[med-svn] [easel] 01/02: New upstream version 0.43

Michael Crusoe misterc-guest at moszumanska.debian.org
Wed Apr 19 19:42:41 UTC 2017


This is an automated email from the git hooks/post-receive script.

misterc-guest pushed a commit to branch master
in repository easel.

commit 18ea3e89b19362bc3cbe95577169b120c459b020
Author: Michael R. Crusoe <michael.crusoe at gmail.com>
Date:   Wed Apr 19 04:28:37 2017 -0700

    New upstream version 0.43
---
 00CHECKLIST                                    |   197 +
 00README                                       |    32 +
 BUGTRAX                                        |   205 +
 INSTALL                                        |    31 +
 LICENSE                                        |    54 +
 LICENSE.sh.in                                  |     5 +
 LICENSE.tag                                    |     7 +
 Makefile.in                                    |   594 +
 aclocal.m4                                     |   867 ++
 config.guess                                   |  1459 ++
 config.sub                                     |  1549 ++
 configure.ac                                   |   565 +
 demotic/00README                               |   101 +
 demotic/blast2profmark                         |    10 +
 demotic/blast2tbl                              |    10 +
 demotic/demotic_blast.pm                       |   286 +
 demotic/demotic_fasta.pm                       |   384 +
 demotic/demotic_h2.pm                          |   190 +
 demotic/demotic_hmmer.pm                       |   218 +
 demotic/demotic_infernal_tab.pm                |   177 +
 demotic/examples/example-single-psiquery.fa    |     7 +
 demotic/examples/example-single.asnt           |  9215 ++++++++++++
 demotic/examples/example-single.fa             |  1159 ++
 demotic/examples/example-single.fa.phr         |   Bin 0 -> 14371 bytes
 demotic/examples/example-single.fa.pin         |   Bin 0 -> 1344 bytes
 demotic/examples/example-single.fa.psq         |   Bin 0 -> 56196 bytes
 demotic/examples/example-single.pbl            |  1748 +++
 demotic/examples/example-single.sto            |   344 +
 demotic/examples/example.fa                    |    12 +
 demotic/examples/example.fasta.out             |  5870 ++++++++
 demotic/examples/example.h2.out                |  4234 ++++++
 demotic/examples/example.hmm                   |   845 ++
 demotic/examples/example.hmm2                  |  1469 ++
 demotic/examples/example.hmmsearch.out         | 17949 +++++++++++++++++++++++
 demotic/examples/example.ncbi-blastp.out       |   437 +
 demotic/examples/example.phmmer.out            |  3477 +++++
 demotic/examples/example.psiblast.out          |  4544 ++++++
 demotic/examples/example.ssearch.out           |  5812 ++++++++
 demotic/examples/example.sto                   |   552 +
 demotic/examples/example.wu-blastp.out         |  7086 +++++++++
 demotic/fasta2profmark                         |    11 +
 demotic/fasta2tbl                              |    10 +
 demotic/h22profmark                            |    10 +
 demotic/h22tbl                                 |    10 +
 demotic/hmmer2profmark                         |    10 +
 demotic/hmmer2tbl                              |    10 +
 demotic/infernal_tab2gff.pl                    |   269 +
 demotic/regress/fasta-profmark.out             |   180 +
 demotic/regress/fasta-tbl.out                  |   180 +
 demotic/regress/h2-profmark.out                |   170 +
 demotic/regress/h2-tbl.out                     |   170 +
 demotic/regress/hmmsearch-profmark.out         |   930 ++
 demotic/regress/hmmsearch-tbl.out              |   972 ++
 demotic/regress/ncbi-blastp-profmark.out       |    19 +
 demotic/regress/ncbi-blastp-tbl.out            |    19 +
 demotic/regress/phmmer-profmark.out            |   221 +
 demotic/regress/phmmer-tbl.out                 |   261 +
 demotic/regress/psiblast-profmark.out          |   139 +
 demotic/regress/psiblast-tbl.out               |   139 +
 demotic/regress/ssearch-profmark.out           |   165 +
 demotic/regress/ssearch-tbl.out                |   165 +
 demotic/regress/wu-blastp-profmark.out         |   506 +
 demotic/regress/wu-blastp-tbl.out              |   369 +
 demotic/test.pl                                |    15 +
 devkit/00README                                |     5 +
 devkit/autodoc                                 |   315 +
 devkit/c2optlist                               |    58 +
 devkit/cexcerpt                                |   100 +
 devkit/cexcerpt.man                            |    73 +
 devkit/ctags-fix                               |    25 +
 devkit/esl-dependencies                        |   155 +
 devkit/man2optlist                             |    41 +
 devkit/rmanprocess.pl                          |    77 +
 devkit/sedition                                |    67 +
 devkit/sedition-pp                             |    89 +
 devkit/sqc                                     |   701 +
 documentation/Makefile.in                      |   205 +
 documentation/codestyle.tex                    |  1872 +++
 documentation/copyright.tex                    |    20 +
 documentation/doctricks.tex                    |    49 +
 documentation/figures/evd_basic.pdf            |   Bin 0 -> 32077 bytes
 documentation/figures/evd_location.pdf         |   Bin 0 -> 32436 bytes
 documentation/figures/evd_scale.pdf            |   Bin 0 -> 31829 bytes
 documentation/figures/gev_density.pdf          |   Bin 0 -> 10631 bytes
 documentation/figures/gev_logdensity.pdf       |   Bin 0 -> 15656 bytes
 documentation/figures/rna_elements.ai          |   851 ++
 documentation/figures/rna_elements.eps         |  6594 +++++++++
 documentation/figures/rna_elements.pdf         |   Bin 0 -> 15711 bytes
 documentation/figures/rnaseP-bsu-alignment.ai  |   592 +
 documentation/figures/rnaseP-bsu-alignment.eps | 11407 ++++++++++++++
 documentation/figures/rnaseP-bsu-alignment.pdf |   Bin 0 -> 23150 bytes
 documentation/figures/rnaseP-ecoli.ai          |   958 ++
 documentation/figures/rnaseP-ecoli.eps         | 12990 ++++++++++++++++
 documentation/figures/rnaseP-ecoli.pdf         |   Bin 0 -> 21786 bytes
 documentation/format_a2m.tex                   |   110 +
 documentation/format_ncbi.tex                  |   271 +
 documentation/format_stockholm.tex             |   252 +
 documentation/format_wuss.tex                  |   216 +
 documentation/install.tex                      |    18 +
 documentation/installation.tex                 |     5 +
 documentation/intro.tex                        |   416 +
 documentation/macros.tex                       |    70 +
 documentation/main.tex                         |   614 +
 documentation/statistics.tex                   |   103 +
 documentation/titlepage.tex                    |    31 +
 documentation/typography.tex                   |    31 +
 easel.c                                        |  2338 +++
 easel.h                                        |   498 +
 easel.tex                                      |   413 +
 esl_alphabet.c                                 |  2553 ++++
 esl_alphabet.h                                 |   129 +
 esl_alphabet.tex                               |   501 +
 esl_avx.c                                      |    24 +
 esl_avx.h                                      |   107 +
 esl_buffer.c                                   |  3227 ++++
 esl_buffer.h                                   |   111 +
 esl_buffer.tex                                 |   456 +
 esl_cluster.c                                  |   345 +
 esl_cluster.h                                  |    16 +
 esl_cluster.tex                                |    53 +
 esl_composition.c                              |   150 +
 esl_composition.h                              |     4 +
 esl_config.h.in                                |   155 +
 esl_dirichlet.c                                |  1684 +++
 esl_dirichlet.h                                |    78 +
 esl_dirichlet.tex                              |    63 +
 esl_distance.c                                 |  1648 +++
 esl_distance.h                                 |    77 +
 esl_distance.tex                               |   149 +
 esl_dmatrix.c                                  |  1593 ++
 esl_dmatrix.h                                  |    89 +
 esl_dmatrix.tex                                |   187 +
 esl_dsqdata.c                                  |  1700 +++
 esl_dsqdata.h                                  |   141 +
 esl_dsqdata.tex                                |   332 +
 esl_exponential.c                              |   699 +
 esl_exponential.h                              |    52 +
 esl_exponential.tex                            |    41 +
 esl_fileparser.c                               |   805 +
 esl_fileparser.h                               |    41 +
 esl_fileparser.tex                             |    97 +
 esl_gamma.c                                    |   839 ++
 esl_gamma.h                                    |    48 +
 esl_gamma.tex                                  |    53 +
 esl_gencode.c                                  |  1182 ++
 esl_gencode.h                                  |    88 +
 esl_getopts.c                                  |  2170 +++
 esl_getopts.h                                  |   121 +
 esl_getopts.tex                                |   668 +
 esl_gev.c                                      |   996 ++
 esl_gev.h                                      |    50 +
 esl_gev.tex                                    |   205 +
 esl_gumbel.c                                   |  1420 ++
 esl_gumbel.h                                   |    50 +
 esl_gumbel.tex                                 |   624 +
 esl_heap.c                                     |   343 +
 esl_heap.h                                     |    44 +
 esl_histogram.c                                |  2070 +++
 esl_histogram.h                                |   130 +
 esl_histogram.tex                              |   299 +
 esl_hmm.c                                      |   812 +
 esl_hmm.h                                      |    58 +
 esl_hyperexp.c                                 |  1418 ++
 esl_hyperexp.h                                 |    75 +
 esl_hyperexp.tex                               |    37 +
 esl_keyhash.c                                  |   853 ++
 esl_keyhash.h                                  |    64 +
 esl_keyhash.tex                                |    89 +
 esl_mem.c                                      |   825 ++
 esl_mem.h                                      |    27 +
 esl_minimizer.c                                |   654 +
 esl_minimizer.h                                |    29 +
 esl_minimizer.tex                              |    13 +
 esl_mixgev.c                                   |   834 ++
 esl_mixgev.h                                   |    63 +
 esl_mpi.c                                      |  1238 ++
 esl_mpi.h                                      |    74 +
 esl_mpi.tex                                    |    24 +
 esl_msa.c                                      |  3740 +++++
 esl_msa.h                                      |   211 +
 esl_msa.tex                                    |   282 +
 esl_msa_testfiles/a2m/a2m.good.1               |    16 +
 esl_msa_testfiles/a2m/a2m.good.2               |    15 +
 esl_msa_testfiles/afa/afa.good.1               |    16 +
 esl_msa_testfiles/afa/afa.good.2               |    15 +
 esl_msa_testfiles/afa/afa.good.3               |    24 +
 esl_msa_testfiles/clustal/clustal.good.1       |    20 +
 esl_msa_testfiles/clustal/clustal.good.2       |    15 +
 esl_msa_testfiles/phylip/phylip.ambig.1        |     9 +
 esl_msa_testfiles/phylip/phylip.bad.1          |     3 +
 esl_msa_testfiles/phylip/phylip.bad.10         |     6 +
 esl_msa_testfiles/phylip/phylip.bad.11         |     7 +
 esl_msa_testfiles/phylip/phylip.bad.2          |     3 +
 esl_msa_testfiles/phylip/phylip.bad.3          |     3 +
 esl_msa_testfiles/phylip/phylip.bad.4          |     3 +
 esl_msa_testfiles/phylip/phylip.bad.5          |     2 +
 esl_msa_testfiles/phylip/phylip.bad.6          |     3 +
 esl_msa_testfiles/phylip/phylip.bad.7          |     3 +
 esl_msa_testfiles/phylip/phylip.bad.8          |     3 +
 esl_msa_testfiles/phylip/phylip.bad.9          |     3 +
 esl_msa_testfiles/phylip/phylip.good.1         |    12 +
 esl_msa_testfiles/phylip/phylip.good.2         |     8 +
 esl_msa_testfiles/phylip/phylip.good.3         |    28 +
 esl_msa_testfiles/phylips/phylips.good.1       |    11 +
 esl_msa_testfiles/phylips/phylips.good.2       |    17 +
 esl_msa_testfiles/psiblast/psiblast.good.1     |    14 +
 esl_msa_testfiles/psiblast/psiblast.good.2     |    11 +
 esl_msa_testfiles/selex/00MANIFEST             |    24 +
 esl_msa_testfiles/selex/selex.bad.1            |     4 +
 esl_msa_testfiles/selex/selex.bad.10           |    16 +
 esl_msa_testfiles/selex/selex.bad.11           |    15 +
 esl_msa_testfiles/selex/selex.bad.12           |    15 +
 esl_msa_testfiles/selex/selex.bad.13           |    15 +
 esl_msa_testfiles/selex/selex.bad.14           |    14 +
 esl_msa_testfiles/selex/selex.bad.2            |    10 +
 esl_msa_testfiles/selex/selex.bad.3            |     7 +
 esl_msa_testfiles/selex/selex.bad.4            |    10 +
 esl_msa_testfiles/selex/selex.bad.5            |    11 +
 esl_msa_testfiles/selex/selex.bad.6            |     8 +
 esl_msa_testfiles/selex/selex.bad.7            |    12 +
 esl_msa_testfiles/selex/selex.bad.8            |     8 +
 esl_msa_testfiles/selex/selex.bad.9            |    14 +
 esl_msa_testfiles/selex/selex.good.1           |     5 +
 esl_msa_testfiles/selex/selex.good.2           |    37 +
 esl_msa_testfiles/selex/selex.good.3           |    27 +
 esl_msa_testfiles/selex/selex.good.4           |    19 +
 esl_msa_testfiles/stockholm/stockholm.bad.1    |     1 +
 esl_msa_testfiles/stockholm/stockholm.bad.2    |     7 +
 esl_msa_testfiles/stockholm/stockholm.bad.3    |     7 +
 esl_msa_testfiles/stockholm/stockholm.bad.4    |     4 +
 esl_msa_testfiles/stockholm/stockholm.bad.5    |     4 +
 esl_msa_testfiles/stockholm/stockholm.bad.6    |     7 +
 esl_msa_testfiles/stockholm/stockholm.bad.7    |     7 +
 esl_msa_testfiles/stockholm/stockholm.bad.8    |     5 +
 esl_msa_testfiles/stockholm/stockholm.good.1   |    96 +
 esl_msacluster.c                               |   430 +
 esl_msacluster.h                               |    18 +
 esl_msacluster.tex                             |    33 +
 esl_msafile.c                                  |  1492 ++
 esl_msafile.h                                  |   145 +
 esl_msafile.md                                 |   181 +
 esl_msafile2.c                                 |  1481 ++
 esl_msafile2.h                                 |    86 +
 esl_msafile_a2m.c                              |  1049 ++
 esl_msafile_a2m.h                              |    18 +
 esl_msafile_afa.c                              |   732 +
 esl_msafile_afa.h                              |    18 +
 esl_msafile_clustal.c                          |  1075 ++
 esl_msafile_clustal.h                          |    18 +
 esl_msafile_phylip.c                           |  1914 +++
 esl_msafile_phylip.h                           |    19 +
 esl_msafile_psiblast.c                         |   819 ++
 esl_msafile_psiblast.h                         |    17 +
 esl_msafile_selex.c                            |  1254 ++
 esl_msafile_selex.h                            |    18 +
 esl_msafile_stockholm.c                        |  2749 ++++
 esl_msafile_stockholm.h                        |    15 +
 esl_msashuffle.c                               |   514 +
 esl_msashuffle.h                               |    31 +
 esl_msaweight.c                                |  1120 ++
 esl_msaweight.h                                |    21 +
 esl_msaweight.tex                              |    53 +
 esl_normal.c                                   |   348 +
 esl_normal.h                                   |    22 +
 esl_normal.tex                                 |    24 +
 esl_paml.c                                     |   184 +
 esl_paml.h                                     |    25 +
 esl_paml.tex                                   |     4 +
 esl_random.c                                   |  1279 ++
 esl_random.h                                   |    61 +
 esl_random.tex                                 |   127 +
 esl_randomseq.c                                |  2118 +++
 esl_randomseq.h                                |    65 +
 esl_randomseq.tex                              |    79 +
 esl_ratematrix.c                               |   822 ++
 esl_ratematrix.h                               |    31 +
 esl_ratematrix.tex                             |     3 +
 esl_recorder.c                                 |  1141 ++
 esl_recorder.h                                 |    88 +
 esl_regexp.c                                   |  1912 +++
 esl_regexp.h                                   |    73 +
 esl_regexp.tex                                 |   386 +
 esl_rootfinder.c                               |   542 +
 esl_rootfinder.h                               |    54 +
 esl_rootfinder.tex                             |    43 +
 esl_scorematrix.c                              |  2299 +++
 esl_scorematrix.h                              |    77 +
 esl_scorematrix.tex                            |    51 +
 esl_sq.c                                       |  2815 ++++
 esl_sq.h                                       |   211 +
 esl_sq.tex                                     |   304 +
 esl_sqio.c                                     |  2438 +++
 esl_sqio.h                                     |   189 +
 esl_sqio.tex                                   |   281 +
 esl_sqio_ascii.c                               |  3411 +++++
 esl_sqio_ascii.h                               |   102 +
 esl_sqio_ncbi.c                                |  3295 +++++
 esl_sqio_ncbi.h                                |   110 +
 esl_sse.c                                      |   623 +
 esl_sse.h                                      |   241 +
 esl_sse.tex                                    |    39 +
 esl_ssi.c                                      |  2050 +++
 esl_ssi.h                                      |   163 +
 esl_ssi.tex                                    |   451 +
 esl_stack.c                                    |  1170 ++
 esl_stack.h                                    |    74 +
 esl_stack.tex                                  |    89 +
 esl_stats.c                                    |  1171 ++
 esl_stats.h                                    |   142 +
 esl_stats.tex                                  |    43 +
 esl_stopwatch.c                                |   420 +
 esl_stopwatch.h                                |    61 +
 esl_stopwatch.tex                              |   117 +
 esl_stretchexp.c                               |   693 +
 esl_stretchexp.h                               |    52 +
 esl_stretchexp.tex                             |    41 +
 esl_swat.c                                     |   225 +
 esl_swat.tex                                   |     1 +
 esl_threads.c                                  |   434 +
 esl_threads.h                                  |    41 +
 esl_tree.c                                     |  2191 +++
 esl_tree.h                                     |   123 +
 esl_tree.tex                                   |    31 +
 esl_vectorops.c                                |  1460 ++
 esl_vectorops.h                                |   128 +
 esl_vectorops.tex                              |    55 +
 esl_vmx.c                                      |   568 +
 esl_vmx.h                                      |   171 +
 esl_weibull.c                                  |   743 +
 esl_weibull.h                                  |    53 +
 esl_weibull.tex                                |    47 +
 esl_workqueue.c                                |   564 +
 esl_workqueue.h                                |    44 +
 esl_wuss.c                                     |   872 ++
 esl_wuss.h                                     |    19 +
 esl_wuss.tex                                   |    34 +
 formats/BLOSUM62                               |    31 +
 formats/embl                                   |   118 +
 formats/fasta                                  |    13 +
 formats/fasta.2                                |    19 +
 formats/fasta.bad.1                            |     2 +
 formats/fasta.bad.2                            |     1 +
 formats/fasta.bad.3                            |     1 +
 formats/fasta.odd.1                            |     2 +
 formats/genbank                                |    55 +
 formats/genbank.2                              |    52 +
 formats/genbank.bad.1                          |    55 +
 formats/stockholm.1                            |     5 +
 formats/uniprot                                |   192 +
 formats/wag.dat                                |    43 +
 install-sh                                     |   295 +
 interface_gsl.c                                |    60 +
 interface_gsl.h                                |    24 +
 interface_lapack.c                             |    91 +
 interface_lapack.h                             |    24 +
 makeTAGS.sh                                    |    15 +
 miniapps/Makefile.in                           |   152 +
 miniapps/esl-afetch.c                          |   373 +
 miniapps/esl-afetch.itest.pl                   |   147 +
 miniapps/esl-afetch.man                        |   128 +
 miniapps/esl-alimanip.c                        |  3328 +++++
 miniapps/esl-alimanip.itest.pl                 |   354 +
 miniapps/esl-alimanip.man                      |   344 +
 miniapps/esl-alimap.c                          |   687 +
 miniapps/esl-alimap.itest.pl                   |   143 +
 miniapps/esl-alimap.man                        |   193 +
 miniapps/esl-alimask.c                         |  1212 ++
 miniapps/esl-alimask.itest.pl                  |   322 +
 miniapps/esl-alimask.man                       |   580 +
 miniapps/esl-alimerge.c                        |  1810 +++
 miniapps/esl-alimerge.itest.pl                 |   211 +
 miniapps/esl-alimerge.man                      |   179 +
 miniapps/esl-alipid.c                          |    92 +
 miniapps/esl-alipid.man                        |   106 +
 miniapps/esl-alirev.c                          |    87 +
 miniapps/esl-alirev.man                        |   127 +
 miniapps/esl-alistat.c                         |  1153 ++
 miniapps/esl-alistat.itest.pl                  |   233 +
 miniapps/esl-alistat.man                       |   234 +
 miniapps/esl-cluster.c                         |   212 +
 miniapps/esl-compalign.c                       |   581 +
 miniapps/esl-compalign.itest.pl                |   110 +
 miniapps/esl-compalign.man                     |   147 +
 miniapps/esl-compstruct.c                      |   337 +
 miniapps/esl-compstruct.man                    |   122 +
 miniapps/esl-construct.c                       |   709 +
 miniapps/esl-construct.itest.pl                |   160 +
 miniapps/esl-construct.man                     |   179 +
 miniapps/esl-histplot.c                        |   284 +
 miniapps/esl-histplot.man                      |    80 +
 miniapps/esl-mask.c                            |   225 +
 miniapps/esl-mask.itest.pl                     |    93 +
 miniapps/esl-mask.man                          |   173 +
 miniapps/esl-reformat.c                        |   948 ++
 miniapps/esl-reformat.man                      |   224 +
 miniapps/esl-selectn.c                         |   117 +
 miniapps/esl-selectn.man                       |    76 +
 miniapps/esl-seqrange.c                        |   165 +
 miniapps/esl-seqrange.itest.pl                 |   143 +
 miniapps/esl-seqrange.man                      |    67 +
 miniapps/esl-seqstat.c                         |   258 +
 miniapps/esl-seqstat.man                       |   113 +
 miniapps/esl-sfetch.c                          |   489 +
 miniapps/esl-sfetch.man                        |   290 +
 miniapps/esl-shuffle.c                         |   394 +
 miniapps/esl-shuffle.itest.pl                  |    54 +
 miniapps/esl-shuffle.man                       |   231 +
 miniapps/esl-ssdraw.c                          |  7485 ++++++++++
 miniapps/esl-ssdraw.itest.pl                   |   644 +
 miniapps/esl-ssdraw.man                        |   830 ++
 miniapps/esl-translate.c                       |   215 +
 miniapps/esl-translate.itest.pl                |   149 +
 miniapps/esl-translate.man                     |   293 +
 miniapps/esl-weight.c                          |   139 +
 miniapps/esl-weight.man                        |   111 +
 testsuite/Makefile.in                          |    70 +
 testsuite/coverage_report.pl                   |   134 +
 testsuite/e2.sh                                |    37 +
 testsuite/i1-degen-residues.pl                 |    99 +
 testsuite/i2-ncbi-indices.pl                   |   147 +
 testsuite/i3-blank-gf.pl                       |    95 +
 testsuite/testsuite.sqc                        |   151 +
 testsuite/trna-5.stk                           |    16 +
 testsuite/trna-ssdraw.ps                       |   181 +
 testsuite/valgrind_report.pl                   |   107 +
 425 files changed, 247042 insertions(+)

diff --git a/00CHECKLIST b/00CHECKLIST
new file mode 100644
index 0000000..0cb0235
--- /dev/null
+++ b/00CHECKLIST
@@ -0,0 +1,197 @@
+THIS CHECKLIST IS OUT OF DATE
+UPDATE TO NEW GIT FLOW BEFORE USING!
+SRE, Mon May  2 17:10:01 2016
+
+
+Checklist for an Easel release
+SRE, Mon Mar 24 10:39:52 2008
+-------------------------------------------------
+When editing this 00CHECKLIST, edit it in the trunk, not in a release
+branch; it isn't included in releases anyway.
+
+Subversion repository:  https://svn.janelia.org/eddylab/eddys/easel
+Trunk:                  https://svn.janelia.org/eddylab/eddys/easel/trunk/
+
+
+Easel follows an 'unstable trunk' policy.
+Each major release goes onto a stable branch.
+Every release (even minor ones) is tagged.
+
+Release types: major releases, minor releases, and snapshots. A major
+release gets its own branch. A minor release puts bug fixes into a
+major branch. A snapshot is from the development trunk.
+
+Version naming:                                        example
+major    <lineage>.<major-release>                      2.1
+minor    <lineage>.<major-release>.<minor-release>      2.1.1
+alpha    <lineage>.<major-release>a<n>                  2.1a1 
+beta     <lineage>.<major-release>b<n>                  2.1b1 
+snapshot <lineage>.<major-release>.snap<yyyymmdd>       2.1.snap20080325
+
+When Easel is bundled into part of a larger release, it gets the
+version of the larger release with a one-letter prefix indicating
+which package bundled it: for example, for HMMER 3.0a1, Easel would be
+versioned as version "h3.0a1".
+
+
+1. Announce intent to release to all developers. 
+   Commit working copies on all machines.
+   Check for stray uncommitted files:
+	 ./configure
+         make distclean
+         svn update
+	 svn status
+   Clean up any stray files identified by 'svn status'.
+   'svn add' and 'svn commit' as needed to commit new or modified files.
+
+
+2. For a major release (where we're about to create a new branch):
+   First test the development trunk.
+   Compile should be entirely clean when compiled -Wall.
+   'make check' should be clean.
+   '(cd documentation; make)' should work
+   'make REPOSITORY=https://svn.janelia.org/eddylab/eddys/easel/trunk RELEASE=snapxxx dist' should work.
+
+   When trunk is clean, 
+   svn commit
+   We're (usually) next going to move out of the trunk to the release branch.
+
+
+3. For a major release, create stable release branch from the trunk.
+   All subsequent bugfix releases will happen in this branch, while trunk keeps moving.
+
+   svn copy https://svn.janelia.org/eddylab/eddys/easel/trunk\
+            https://svn.janelia.org/eddylab/eddys/easel/branches/0.1\
+            -m "created 0.1 release branch"          
+
+
+4. Move into working copy of the release.
+ 
+   For a dev snapshot, this is the normal working copy.
+   For a major or minor release, this is a working copy of the appropriate branch:
+       cd ~/releases
+       svn checkout https://svn.janelia.org/eddylab/eddys/easel/branches/0.1 easel
+
+   Don't call this working directory "easel-xx"; just call it "easel",
+   because later "make dist" is going to try to create "easel-xx" as
+   the actual release directory.
+
+5. Test.
+
+
+6. Write the release notes.
+   For the first time on a new release branch, it's handy to look
+   at the svn log. Replace "1534" below with the last release's SVN rev.
+	 svn log -r 1534:HEAD | more
+         emacs documentation/release-notes/RELEASE-${RELEASE}
+	 svn add documentation/release-notes/RELEASE-${RELEASE}
+
+   These release notes will be merged back into the trunk later, if
+   we're in a branch.
+
+
+7. Update the copyright, year stamps
+	- configure.ac (release, relcode, date)
+	- COPYRIGHT (year only)
+
+
+8. Commit to SVN; include release number in the log message
+	 svn commit
+
+
+9. Tag.
+   We don't bother to tag snapshots.
+   For a new major release, or a bugfix minor release,
+   this tag is from the relevant branch:
+     svn copy https://svn.janelia.org/eddylab/eddys/easel/branches/0.1\
+              https://svn.janelia.org/eddylab/eddys/easel/tags/0.1\
+              -m "tagged Easel 0.1 release, from 0.1 stable branch"          
+
+
+10. Make the distribution tarball.
+  (Remaking configure scripts w/ autoconf is needed)
+	 make distclean
+         autoconf
+	 ./configure          <-- makes a Makefile (needed for "make dist")
+
+     major or minor:
+	 make REPOSITORY=https://svn.janelia.org/eddylab/eddys/easel/tags/0.1 dist
+     snapshot:
+	 make REPOSITORY=https://svn.janelia.org/eddylab/eddys/easel/trunk RELEASE=snap20080325 dist
+
+   Alternatively, make -n dist' and execute commands yourself one at a
+   time, under a Bourne shell like 'bash' so the for loops work.
+
+   This exports into a easel-$RELEASE directory, alongside the
+   easel working directory in ~/releases/. The tarball is also
+   left in ~/releases/.
+   
+   Go into easel-$RELEASE and make sure it looks good from the
+   perspective of a new user: start by reading the README's.
+
+
+
+11. Build and test the release copy (on login-eddy)
+         ssh login-eddy
+	 cd releases/easel-xx
+	 env CFLAGS="-O3" ./configure 
+	 make
+	 make check
+
+
+12. Put on the FTP site. (on selab)
+          scp 00README                selab:/opt/www/ftp/pub/software/easel/
+          scp COPYRIGHT               selab:/opt/www/ftp/pub/software/easel/
+          scp Userguide.pdf           selab:/opt/www/ftp/pub/software/easel/
+          scp ../easel-0.1.tar.gz     selab:/opt/www/ftp/pub/software/easel/
+          ssh selab  rm -f /opt/www/ftp/pub/software/easel/easel.tar.gz
+          ssh selab  "(cd /opt/www/ftp/pub/software/easel; ln -s easel-0.1.tar.gz easel.tar.gz)"
+
+13. Update the web site
+	 cd ~/web/easel/
+         emacs index.html 
+         make
+	 texclean
+         svn commit
+
+
+14. Clean up. 
+    Don't remove the old directory though, 
+    we will (should) use it for regression testing at the next release.
+	cd ~/releases
+        mv easel-0.1.tar.gz ~/Archive/
+        cd easel
+	make distclean
+
+
+15. Merge the changes from the "stabilized" release branch back into the trunk.
+
+    If you're doing a minor bugfix release on a stable branch, you know the
+    revs that introduced the bugfixes; merge them explicitly. For example:
+       cd ~/src/easel
+       svn update
+       svn merge -r 1990:1992 https://svn.janelia.org/eddylab/eddys/easel/branches/0.1
+    
+    If you're doing a major release on a new stable branch:
+    First identify the rev #'s for when we made the release branch.
+    In the release working copy:
+       svn log --verbose --stop-on-copy 
+
+    Go back to working copies of the trunks, and merge the release branches into it.
+       cd ../easel
+       svn update
+       svn merge -r 173:HEAD https://svn.janelia.org/eddylab/eddys/easel/branches/0.8
+
+    Now, the merge will always screw up the svn:externals. Reset them.
+       cd ..
+       svn propedit svn:externals .
+          easel   https://svn.janelia.org/eddylab/eddys/easel/trunk
+
+    Commit.
+       svn commit 
+
+
+Release history
+Version        Date                                    SVN revision
+--------       ----------------------------------      -------------
+
diff --git a/00README b/00README
new file mode 100644
index 0000000..f0f5f60
--- /dev/null
+++ b/00README
@@ -0,0 +1,32 @@
+Easel - a library of C functions for biological sequence analysis
+Version @EASEL_VERSION@; @EASEL_DATE@
+ at EASEL_COPYRIGHT@
+------------------------------------------------------------------
+
+Easel is an ANSI C code library for computational analysis of
+biological sequences using probabilistic models. Easel is used by
+HMMER, the profile hidden Markov model software that underlies the
+Pfam protein families database, and by Infernal, the profile
+stochastic context-free grammar software that underlies the Rfam RNA
+family database. Easel aims to make similar applications more robust
+and easier to develop, by providing a set of reusable, documented, and
+well-tested functions.
+
+Other files to read in the top-level source directory:
+
+    INSTALL          Brief installation instructions.
+    Userguide.pdf    The Easel User's Guide.
+    RELEASE-NOTES    Notes for this release.
+    LICENSE          Copyright, contributors, and license information
+
+To get started after installation, see the Easel User's Guide
+(Userguide.pdf).
+
+------------------------------------------------------------------
+Sean Eddy | HHMI | Harvard University | http://eddylab.org
+
+
+
+
+
+
diff --git a/BUGTRAX b/BUGTRAX
new file mode 100644
index 0000000..3fe71de
--- /dev/null
+++ b/BUGTRAX
@@ -0,0 +1,205 @@
+ID              e11
+TITLE           Unicode characters in MSA files crash MSA parsers
+AFFECTS         -
+FIXED_IN        -
+STATUS          CLOSED
+XREF            -
+REPORTED_BY     Jody Clements
+OPENED_DATE     SRE, Thu Jan 22 14:22:54 2015
+CLOSED_DATE     SRE, Thu Jan 22 14:22:56 2015
+DESCRIPTION     
+  MSA file parsers require ASCII input because they use an
+  inmap[0..127], but were not validating user input. Unicode
+  characters result in out of bounds accesses and corruption.
+  (Unaligned file parsers do validate.)
+
+  Fix is to have esl_abc_dsqcat_noalloc() (for digital mode) and 
+  esl_strmapcat_noalloc() (for text mode) validate that each char 
+  is ASCII.
+//
+ID              e10
+TITLE           Clustal format allows optional trailing coords
+AFFECTS         -
+FIXED_IN        -
+STATUS          CLOSED
+XREF            -
+REPORTED_BY     sumudu <sumudu at fiserlab.org>, 27 Jan 2014
+OPENED_DATE     28 Jan 2014
+CLOSED_DATE     28 Jan 2014
+DESCRIPTION     
+  Clustal format allows an optional trailing seq coord number
+  on each line, but we weren't allowing for that.
+//
+ID              e9
+TITLE           Segmentation fault in esl-stranslate
+AFFECTS         H3.1b1 
+FIXED_IN        -
+STATUS          CLOSED
+XREF            -
+REPORTED_BY     Jaina Mistry <jaina at ebi.ac.uk>
+OPENED_DATE     TJW, Tue Sep 24 04:57:08 2013
+CLOSED_DATE     TJW, Tue Sep 24 04:57:08 2013
+DESCRIPTION     
+  esl-stranslate crashed with seg fault if any of the 6 frames
+  ended with a stop codon. An extra sequence object was
+  created to hold the "next" ORF, but no ORF followed; the
+  result was a sequence object with no name or sequence, 
+  and a resulting seg fault when that sequence's information
+  was printed. 
+//
+ID              e8
+TITLE           esl_threads fails to compile
+AFFECTS         -
+FIXED_IN        -
+STATUS          CLOSED
+XREF            -
+REPORTED_BY     "Campbell, Christopher D" <christopher-campbell at uiowa.edu>
+OPENED_DATE     SRE, Thu Mar  8 23:04:52 2012
+CLOSED_DATE     SRE, Thu Mar  8 23:04:53 2012
+DESCRIPTION     
+  HMMER3.0 failed to build for him with MPI support; he traced
+  problem to esl_threads.h, which was missing an #include <pthread.h>.
+//
+ID              e7
+TITLE           with icc v12, esl_random() sequence is changed
+AFFECTS         -
+FIXED_IN        -
+STATUS          CLOSED
+XREF            SRE:notebook/1213-icc12-random/
+REPORTED_BY     detected in unit tests when we switched to icc v12
+OPENED_DATE     SRE, Thu Dec 15 11:32:35 2011
+CLOSED_DATE     SRE, Thu Dec 15 11:58:08 2011
+DESCRIPTION     
+   When we upgraded to Intel icc version 12, in HMMER, the
+   nhmmer_generic unit test failed. Travis traced it to esl-shuffle
+   generating a different sequence, despite fixed RNG seed. The
+   problem only occurs with icc -O -fPIC.
+
+   In esl_random.c::mersenne_fill_table(), the MT incantation is
+      y = (r->mt[z] & 0x80000000) | (r->mt[z+1] & 0x7fffffff);
+      r->mt[z] = r->mt[z-227] ^ (y>>1) ^ mag01[y & 0x1];
+   with y declared as an unsigned 32-bit int. 
+
+   The problem is mag01[y & 0x1]. I think icc12 *may* (depending on
+   optimization and other flags) be casting y to a signed int before
+   it does the binary AND. The result of casting a large unsigned y to
+   a signed int is implementation-defined and unsafe, so if the
+   compiler does indeed try to cast y to signed int we're in trouble.
+
+   The fix is to dictate the cast explicitly:
+      r->mt[z] = r->mt[z-227] ^ (y>>1) ^ mag01[(int)(y & 0x1)];
+   and this should be guaranteed to work, because we know that the
+   result of (y & 0x1) is 0 or 1, and C99 guarantees that we can
+   safely cast it to signed int 0 or 1.
+
+   Arguably this is a compiler bug. The C99 standard says that an
+   array index may be any integer type; it does not specify signed or
+   unsigned.
+
+   [note added 8 Mar 2012: Intel support confirmed, compiler bug.]
+//
+ID              e6
+TITLE           Running out of disk space corrupts outputs
+AFFECTS         HMMER 3.0 and earlier
+FIXED_IN        - 
+STATUS          CLOSED
+XREF            SRE:J8/118-119
+REPORTED_BY     Maarten Hekkelman <m.hekkelman at cmbi.ru.nl>
+OPENED_DATE     SRE, 13 Oct 2011
+CLOSED_DATE     SRE, Mon Oct 24 13:03:45 2011
+DESCRIPTION     
+  jackhmmer corrupted an output file. Tracked to the user's disk
+  filling up. Return status of fprintf(), fputs(), etc. calls was not
+  being checked, so Easel/HMMER were not detecting the problem.
+
+  Systematically added error return status checking to most printing
+  calls, using ESL_{X}EXCEPTION_SYS(), returning eslEWRITE Easel error
+  codes. Easel _Write() interface is now documented to require such
+  checking.
+//
+ID              e5
+TITLE           Blank text line following #=GF <tag> handled improperly.
+AFFECTS         HMMER 3.0 and earlier
+FIXED_IN        -
+STATUS          CLOSED
+XREF            J6/92
+REPORTED_BY     Sean Powell <spowell at embl.de>
+OPENED_DATE     SRE, Tue Jul 13 09:25:29 2010
+CLOSED_DATE     -
+DESCRIPTION     
+  Easel Stockholm parser allows blank lines for #=GF DE annotation, but 
+  HMMER strictly requires DESC <s> format in save files. Thus hmmbuild
+  can generate a file that other HMMER programs won't parse.
+
+  Stockholm parser does need to allow blank lines on #=GF CC, for
+  legacy reasons (human-readable spacing in CC comments). All other
+  #=GF <tag> lines rigorously enforce the presence of text.
+
+  Revised esl_msa.c::parse_gf().
+  Added i3-blank-gf.pl in testsuite.
+//
+ID              e4
+TITLE           Long options called ambiguous abbreviation, if a prefix of another option
+AFFECTS         HMMER 3.0b3 (and earlier)
+FIXED_IN        -
+STATUS          CLOSED
+XREF            J5/116
+REPORTED_BY     Maufrais Corinne <maufrais at pasteur.fr>; 27 Nov 2009
+OPENED_DATE     SRE, Tue Dec  1 11:24:43 2009
+CLOSED_DATE     SRE, Tue Dec  1 11:24:46 2009
+DESCRIPTION     
+  hmmsim --s gives
+  "Failed to parse command line: Abbreviated option "--s" is ambiguous"
+  because esl_getopts thinks --s is an abbreviation for --seed or --stall.
+  
+  get_optidx_abbrev() revised to allow exact matches to long options.
+  esl_getopts unit test revised to catch this bug.
+//
+ID              e3
+TITLE           esl-sfetch should allow simpler fetching from small files
+AFFECTS         -
+FIXED_IN        -
+STATUS          OPEN
+XREF            J4/81
+REPORTED_BY     SRE
+OPENED_DATE     13 Feb 2009
+CLOSED_DATE     -
+DESCRIPTION     
+  esl-sfetch should allow simpler fetching from a small seqfile of one
+  or a few sequences. It should not require an SSI index. It should allow
+  a . argument to mean "from first sequence in file". (Or perhaps it should
+  allow seqs to be fetched by number, as well as name.)
+//
+ID              e2
+TITLE           esl-seqstat can't read alignment file from stdin
+AFFECTS         -
+FIXED_IN        -
+STATUS          CLOSED
+XREF            J4/84
+REPORTED_BY     SRE
+OPENED_DATE     16 Feb 2009
+CLOSED_DATE     16 Feb 2009
+DESCRIPTION     
+  sqfile_open tries to guess file format; then when msafile_open is called
+  in GuessAlphabet, stdin is already feof(). Using current design, MSA can't
+  be read sequentially (through sqio interface) unless format is known.
+  SQFILE has a recording buffer mechanism, but it only works in sqio proper,
+  not through interface to esl_msa. Added e2.sh to test for the bug.
+//
+ID              e1
+TITLE           esl-alistat fails to read Pfam seed in MUL format
+AFFECTS         -
+FIXED_IN        -
+STATUS          CLOSED
+XREF            J4/81; J4/93
+REPORTED_BY     Rob Finn
+OPENED_DATE     13 Feb 2009
+CLOSED_DATE     13 Feb 2009
+DESCRIPTION     
+  SELEX/MUL format parser was present, but not hooked up to anything.
+  
+  Added --informat to several esl miniapps, to allow --informat selex.
+//
+#
+# Started Easel BUGTRAX file: SRE, Tue Dec  1 11:08:31 2009
+# xref J5/116
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..4d991fe
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,31 @@
+Brief installation instructions
+Easel @EASEL_VERSION@; @EASEL_DATE@
+SRE, Mon Mar 24 09:05:20 2008
+-------------------------------------------------------------
+
+Starting from a source distribution, easel- at EASEL_VERSION@.tar.gz:
+ Uncompress:                uncompress easel- at EASEL_VERSION@.tar.gz  
+ Unpack:                    tar xf easel- at EASEL_VERSION@.tar
+ Move into new directory:   cd easel- at EASEL_VERSION@
+ Configure:                 ./configure
+ Build:                     make
+ Automated tests:           make check
+ Automated install:         make install
+
+
+For information on more expert customization options available to you
+in the configuration and the Makefiles, see the Installation chapter
+in the Easel User's Guide (Userguide.pdf).
+
+Easel is developed on Linux, and tested on a variety of UNIX and
+UNIX-like operating systems, including Apple OS/X. It is written in
+ANSI C99 and should build cleanly on any system with an ANSI C99
+compiler, including Microsoft Windows.
+
+-------------------------------------------------------------
+
+
+
+
+
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..a626cf1
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,54 @@
+Easel - a library of C functions for biological sequence analysis
+
+ at EASEL_COPYRIGHT@
+Copyright (C) 2004-2016 Sean R. Eddy
+Copyright (C) 2004-2016 Howard Hughes Medical Institute
+Copyright (C) 2015-2016 President and Fellows of Harvard College
+Copyright (C) 2004-2006 Washington University School of Medicine
+
+Easel also includes copyrighted and licensed code from a variety of
+sources and contributors, as noted in the appropriate places in
+individual files. Copyright holders and contributors include:
+
+  Free Software Foundation, Inc.    configure	
+  Matteo Frigo                      aclocal.m4
+  Steven G. Johnson                 aclocal.m4
+  Stephen Moshier                   esl_sse.c,esl_vmx.c   
+  Julien Pommier                    esl_sse.c,esl_vmx.c   
+  Sun Microsystems, Inc.            esl_stats.c::esl_erfc()
+  David Robert Nadeau               esl_stopwatch.c
+  Henry Spencer, U. of Toronto      esl_regexp.c
+  Christophe Tournayre              aclocal.m4
+  David Wheeler                     easel.c::esl_tmpfile()
+
+The Easel library is open source, freely distributed under the terms of a
+standard BSD (Berkeley Software Distribution) license:
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+   3. Neither the name of the copyright holder nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+   OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/LICENSE.sh.in b/LICENSE.sh.in
new file mode 100644
index 0000000..029e371
--- /dev/null
+++ b/LICENSE.sh.in
@@ -0,0 +1,5 @@
+export EASEL_VERSION=@EASEL_VERSION@ 
+export EASEL_DATE="@EASEL_DATE@"
+export EASEL_COPYRIGHT="@EASEL_COPYRIGHT@"
+export EASEL_LICENSE="@EASEL_LICENSE@"
+
diff --git a/LICENSE.tag b/LICENSE.tag
new file mode 100644
index 0000000..82a5274
--- /dev/null
+++ b/LICENSE.tag
@@ -0,0 +1,7 @@
+Easel - a library of C functions for biological sequence analysis
+Version @EASEL_VERSION@; @EASEL_DATE@
+ at EASEL_COPYRIGHT@
+Other copyrights also apply. See the LICENSE file for a full list.
+
+Easel is open source software, distributed under the BSD license. See
+the LICENSE file for more details.
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..4914fc5
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,594 @@
+# Top level Makefile for Easel
+#
+# On most systems, to build Easel you should only need:
+#     % ./configure; make
+#
+# Optionally, you can run a test suite:
+#     % make check
+#
+# And optionally, you can install everything more permanently:
+#     % make install
+#
+# For more information, see the Installation chapter of the Easel Guide.
+#
+
+# VPATH and shell configuration
+#
+top_srcdir = @top_srcdir@
+srcdir     = @srcdir@
+VPATH      = @srcdir@
+SHELL      = /bin/sh
+
+# Package information
+#
+PACKAGE         = @PACKAGE_NAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+BASENAME        = @PACKAGE_TARNAME@
+RELEASE         = @EASEL_VERSION@
+RELEASEDATE     = "@EASEL_DATE@"
+COPYRIGHT       = "@EASEL_COPYRIGHT@"
+LICENSELINE     = "@EASEL_LICENSE@"
+
+# Installation targets
+#
+prefix      = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+bindir      = @bindir@
+libdir      = @libdir@
+includedir  = @includedir@
+mandir      = @mandir@
+docdir      = @docdir@
+pdfdir      = @pdfdir@
+mandir      = @mandir@
+man1dir     = ${mandir}/man1
+man1ext     = .1
+
+# Compiler configuration
+#
+CC       = @CC@
+CFLAGS   = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@
+SIMDFLAGS= @SIMD_CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS  = @LDFLAGS@
+LIBGSL   = @LIBGSL@
+LIBS     = @LIBS@ @PTHREAD_LIBS@
+
+# Other tools
+#
+COMPRESS = gzip
+AR       = @AR@
+RANLIB   = @RANLIB@
+INSTALL  = @INSTALL@
+
+# beautification magic stolen from git
+#
+QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c
+QUIET_SUBDIR1 =
+ifndef V
+	QUIET_CC      = @echo '    ' CC $@;
+	QUIET_GEN     = @echo '    ' GEN $@;
+	QUIET_AR      = @echo '    ' AR $@;
+	QUIET_SUBDIR0 = + at subdir=
+	QUIET_SUBDIR1 = ; echo '    ' SUBDIR  $$subdir; \
+		        ${MAKE} -C $$subdir
+endif
+
+
+# Code manifests
+#
+HDRS = 	easel.h\
+	esl_alphabet.h\
+	esl_avx.h\
+	esl_buffer.h\
+	esl_cluster.h\
+	esl_composition.h\
+	esl_dirichlet.h\
+	esl_distance.h\
+	esl_dmatrix.h\
+	esl_dsqdata.h\
+	esl_exponential.h\
+	esl_fileparser.h\
+	esl_gamma.h\
+	esl_gencode.h\
+	esl_getopts.h\
+	esl_gev.h\
+	esl_gumbel.h\
+	esl_heap.h\
+	esl_histogram.h\
+	esl_hmm.h\
+	esl_hyperexp.h\
+	esl_keyhash.h\
+	esl_mem.h\
+	esl_minimizer.h\
+	esl_mixgev.h\
+	esl_mpi.h\
+	esl_msa.h\
+	esl_msacluster.h\
+	esl_msafile.h\
+	esl_msafile2.h\
+	esl_msafile_a2m.h\
+	esl_msafile_afa.h\
+	esl_msafile_clustal.h\
+	esl_msafile_phylip.h\
+	esl_msafile_psiblast.h\
+	esl_msafile_selex.h\
+	esl_msafile_stockholm.h\
+	esl_msashuffle.h\
+	esl_msaweight.h\
+	esl_normal.h\
+	esl_paml.h\
+	esl_random.h\
+	esl_randomseq.h\
+	esl_ratematrix.h\
+	esl_recorder.h\
+	esl_regexp.h\
+	esl_rootfinder.h\
+	esl_scorematrix.h\
+	esl_sq.h\
+	esl_sqio.h\
+	esl_sqio_ascii.h\
+	esl_sqio_ncbi.h\
+	esl_sse.h\
+	esl_ssi.h\
+	esl_stack.h\
+	esl_stats.h\
+	esl_stopwatch.h\
+	esl_stretchexp.h\
+	esl_threads.h\
+	esl_tree.h\
+	esl_vectorops.h\
+	esl_vmx.h\
+	esl_weibull.h\
+	esl_workqueue.h\
+	esl_wuss.h
+
+OBJS =	easel.o\
+	esl_alphabet.o\
+	esl_avx.o\
+	esl_buffer.o\
+	esl_cluster.o\
+	esl_composition.o\
+	esl_dirichlet.o\
+	esl_distance.o\
+	esl_dmatrix.o\
+	esl_dsqdata.o\
+	esl_exponential.o\
+	esl_fileparser.o\
+	esl_gamma.o\
+	esl_gencode.o\
+	esl_getopts.o\
+	esl_gev.o\
+	esl_gumbel.o\
+	esl_heap.o\
+	esl_histogram.o\
+	esl_hmm.o\
+	esl_hyperexp.o\
+	esl_keyhash.o\
+	esl_mem.o\
+	esl_minimizer.o\
+	esl_mixgev.o\
+	esl_mpi.o\
+	esl_msa.o\
+	esl_msacluster.o\
+	esl_msafile.o\
+	esl_msafile2.o\
+	esl_msafile_a2m.o\
+	esl_msafile_afa.o\
+	esl_msafile_clustal.o\
+	esl_msafile_phylip.o\
+	esl_msafile_psiblast.o\
+	esl_msafile_selex.o\
+	esl_msafile_stockholm.o\
+	esl_msashuffle.o\
+	esl_msaweight.o\
+	esl_normal.o\
+	esl_paml.o\
+	esl_random.o\
+	esl_randomseq.o\
+	esl_ratematrix.o\
+	esl_recorder.o\
+	esl_regexp.o\
+	esl_rootfinder.o\
+	esl_scorematrix.o\
+	esl_sq.o\
+	esl_sqio.o\
+	esl_sqio_ascii.o\
+	esl_sqio_ncbi.o\
+	esl_sse.o\
+	esl_ssi.o\
+	esl_stack.o\
+	esl_stats.o\
+	esl_stopwatch.o\
+	esl_stretchexp.o\
+	esl_threads.o\
+	esl_tree.o\
+	esl_vectorops.o\
+	esl_vmx.o\
+	esl_weibull.o\
+	esl_workqueue.o\
+	esl_wuss.o
+#	esl_swat.o
+
+
+BENCHMARKS =\
+	esl_buffer_benchmark\
+	esl_keyhash_benchmark\
+	esl_mem_benchmark\
+	esl_sse_benchmark\
+	esl_random_benchmark
+
+EXPERIMENTS = \
+	esl_scorematrix_experiment
+
+UTESTS =\
+	easel_utest\
+	esl_alphabet_utest\
+	esl_buffer_utest\
+	esl_cluster_utest\
+	esl_dirichlet_utest\
+	esl_distance_utest\
+	esl_dmatrix_utest\
+	esl_dsqdata_utest\
+	esl_exponential_utest\
+	esl_fileparser_utest\
+	esl_gamma_utest\
+	esl_gencode_utest\
+	esl_getopts_utest\
+	esl_gumbel_utest\
+	esl_heap_utest\
+	esl_histogram_utest\
+	esl_hmm_utest\
+	esl_hyperexp_utest\
+	esl_keyhash_utest\
+	esl_mem_utest\
+	esl_msa_utest\
+	esl_msacluster_utest\
+	esl_msafile_utest\
+	esl_msafile2_utest\
+	esl_msafile_a2m_utest\
+	esl_msafile_afa_utest\
+	esl_msafile_clustal_utest\
+	esl_msafile_phylip_utest\
+	esl_msafile_psiblast_utest\
+	esl_msafile_selex_utest\
+	esl_msafile_stockholm_utest\
+	esl_msaweight_utest\
+	esl_normal_utest\
+	esl_random_utest\
+	esl_randomseq_utest\
+	esl_ratematrix_utest\
+	esl_recorder_utest\
+	esl_regexp_utest\
+	esl_rootfinder_utest\
+	esl_scorematrix_utest\
+	esl_sq_utest\
+	esl_sqio_utest\
+	esl_sse_utest\
+	esl_ssi_utest\
+	esl_stack_utest\
+	esl_stats_utest\
+	esl_stretchexp_utest\
+	esl_tree_utest\
+	esl_vectorops_utest\
+	esl_weibull_utest\
+	esl_wuss_utest
+#	gev_utest\
+#	minimizer_utest\
+#	mixgev_utest\
+#	mpi_utest\
+#	paml_utest\
+#	stopwatch_utest\
+#	swat_utest\
+
+EXAMPLES = \
+        easel_example\
+        esl_alphabet_example\
+        esl_alphabet_example2\
+	esl_alphabet_example3\
+	esl_buffer_example\
+	esl_buffer_example2\
+	esl_buffer_example3\
+	esl_buffer_example4\
+	esl_buffer_example5\
+	esl_buffer_example6\
+        esl_cluster_example\
+        esl_dirichlet_example\
+        esl_dmatrix_example\
+        esl_dsqdata_example\
+        esl_dsqdata_example2\
+        esl_exponential_example\
+        esl_fileparser_example\
+        esl_fileparser_example2\
+        esl_gamma_example\
+	esl_gencode_example\
+	esl_gencode_example2\
+        esl_getopts_example\
+        esl_getopts_example2\
+        esl_gev_example\
+        esl_gumbel_example\
+        esl_histogram_example\
+        esl_histogram_example2\
+        esl_histogram_example3\
+        esl_histogram_example4\
+        esl_histogram_example5\
+        esl_hmm_example\
+        esl_hyperexp_example\
+        esl_keyhash_example\
+        esl_minimizer_example\
+        esl_mixgev_example\
+        esl_msafile_example\
+	esl_msafile_a2m_example\
+	esl_msafile_a2m_example2\
+	esl_msafile_afa_example\
+	esl_msafile_afa_example2\
+	esl_msafile_clustal_example\
+	esl_msafile_clustal_example2\
+	esl_msafile_phylip_example\
+	esl_msafile_phylip_example2\
+	esl_msafile_psiblast_example\
+	esl_msafile_psiblast_example2\
+	esl_msafile_selex_example\
+	esl_msafile_selex_example2\
+	esl_msafile_stockholm_example\
+	esl_msafile_stockholm_example2\
+        esl_msacluster_example\
+        esl_msashuffle_example\
+        esl_msaweight_example\
+        esl_normal_example\
+        esl_random_example\
+	esl_regexp_example\
+	esl_regexp_example2\
+	esl_regexp_example3\
+        esl_rootfinder_example\
+        esl_rootfinder_example2\
+        esl_scorematrix_example\
+        esl_sq_example\
+        esl_sq_example2\
+        esl_sqio_example\
+        esl_sqio_example2\
+        esl_sqio_example3\
+        esl_sse_example\
+        esl_ssi_example\
+        esl_ssi_example2\
+        esl_stack_example\
+        esl_stats_example\
+        esl_stats_example2\
+        esl_stopwatch_example\
+        esl_stretchexp_example\
+        esl_threads_example\
+        esl_threads_example2\
+        esl_tree_example\
+        esl_tree_example2\
+        esl_vectorops_example\
+        esl_vmx_example\
+        esl_weibull_example\
+        esl_workqueue_example
+#       esl_distance_example\
+#       esl_hmm_example\
+#       esl_msafile_clustal_example\
+#       esl_randomseq_example\
+#       esl_msa_example2\
+
+.PHONY: all dev tests check pdf install uninstall clean distclean dist implode TAGS
+
+all:    libeasel.a .FORCE
+	${QUIET_SUBDIR0}miniapps  ${QUIET_SUBDIR1} all
+
+dev:    libeasel.a ${UTESTS} ${BENCHMARKS} ${EXPERIMENTS} ${EXAMPLES} .FORCE
+	${QUIET_SUBDIR0}miniapps  ${QUIET_SUBDIR1} dev
+
+tests:  ${UTESTS}
+	${QUIET_SUBDIR0}miniapps ${QUIET_SUBDIR1} tests
+
+check:  ${UTESTS} .FORCE
+	${QUIET_SUBDIR0}miniapps  ${QUIET_SUBDIR1} check
+	${QUIET_SUBDIR0}testsuite ${QUIET_SUBDIR1} check
+
+pdf:
+	${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} pdf
+
+libeasel.a:  ${OBJS}
+	${QUIET_AR}${AR} -r libeasel.a $(OBJS) > /dev/null 2>&1
+	@${RANLIB} libeasel.a
+
+.FORCE:
+
+${OBJS}: ${HDRS} esl_config.h
+
+.c.o:
+	${QUIET_CC}${CC} -I. -I${srcdir} ${CFLAGS} ${SIMDFLAGS} ${DEFS} -o $@ -c $<
+
+# Unit test compilation:
+#
+# To compile unit tests, we need to construct a command line
+# from module basename, module's testdriver flag, and module's
+# C file. This is accomplished via a complex-looking shell scripture;
+# xref J1/81.
+#   $@           =  driver name            esl_msa_utest     easel_utest
+#   $${BASENAME} =  base module name       msa               easel
+#   $${DFLAG}    =  driver flag            eslMSA_TESTDRIVE  eslEASEL_TESTDRIVE
+#   $${DFILE}    =  driver's C file        esl_msa.c         easel.c
+#
+${UTESTS}:  libeasel.a
+	@BASENAME=`echo $@ | sed -e 's/_utest//'| sed -e 's/^esl_//'` ;\
+	DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\
+	DFLAG=esl$${DFLAG}_TESTDRIVE ;\
+	if test $@ = "easel_utest" ;\
+           then DFILE=${srcdir}/easel.c ;\
+	   else DFILE=${srcdir}/esl_$${BASENAME}.c ;\
+        fi;\
+	if test ${V} ;\
+	   then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}" ;\
+	   else echo '    ' GEN $@ ;\
+	fi ;\
+	${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}
+
+# Benchmark compilation:
+# Name construction much like unit tests.
+#   $@           =  driver name            esl_msa_benchmark easel_benchmark
+#   $${BASENAME} =  base module name       msa               easel
+#   $${DFLAG}    =  driver flag            eslMSA_BENCHMARK  eslEASEL_BENCHMARK
+#   $${DFILE}    =  driver's C file        esl_msa.c         easel.c
+#
+${BENCHMARKS}: libeasel.a
+	@BASENAME=`echo $@ | sed -e 's/_benchmark//'| sed -e 's/^esl_//'` ;\
+	DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\
+	DFLAG=esl$${DFLAG}_BENCHMARK ;\
+	if test $@ = "easel_benchmark" ;\
+	   then DFILE=${srcdir}/easel.c ;\
+	   else DFILE=${srcdir}/esl_$${BASENAME}.c ;\
+        fi;\
+	if test ${V} ;\
+	   then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}" ;\
+	   else echo '    ' GEN $@ ;\
+	fi ;\
+	${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}
+
+${EXPERIMENTS}: libeasel.a
+	@BASENAME=`echo $@ | sed -e 's/_experiment//'| sed -e 's/^esl_//'` ;\
+	DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\
+	DFLAG=esl$${DFLAG}_EXPERIMENT ;\
+	if test $@ = "easel_experiment" ;\
+	   then DFILE=${srcdir}/easel.c ;\
+	   else DFILE=${srcdir}/esl_$${BASENAME}.c ;\
+        fi;\
+	if test ${V} ;\
+	   then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}" ;\
+	   else echo '    ' GEN $@ ;\
+	fi ;\
+	${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}
+
+
+${EXAMPLES}: libeasel.a
+	@BASENAME=`echo $@ | sed -e 's/_example[0-9]*//'| sed -e 's/^esl_//'` ;\
+	DFLAG=esl`echo $@ | sed -e 's/^esl_//' | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\
+	if test $@ = "easel_example"; \
+	   then DFILE=${srcdir}/easel.c ;\
+           else DFILE=${srcdir}/esl_$${BASENAME}.c ;\
+        fi ;\
+	if test ${V}; \
+	   then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}" ;\
+	   else echo '    ' GEN $@ ;\
+	fi ;\
+	${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}
+
+# install:   installs libeasel.a in ${libdir}/
+#            installs Easel headers in ${includedir}/
+#            installs miniapp binaries in ${bindir}/
+#
+install:
+	${INSTALL} -d ${DESTDIR}${bindir}
+	${INSTALL} -d ${DESTDIR}${libdir}
+	${INSTALL} -d ${DESTDIR}${includedir}
+	${INSTALL} -m 0644 libeasel.a ${DESTDIR}${libdir}/
+	for file in ${HDRS}; do\
+	   ${INSTALL} -m 0644 ${srcdir}/$$file ${DESTDIR}${includedir}/ ;\
+	done
+	${INSTALL} -m 0644 esl_config.h ${DESTDIR}${includedir}/
+	${QUIET_SUBDIR0}miniapps      ${QUIET_SUBDIR1} install
+
+# "make uninstall" reverses the steps of "make install"
+#
+uninstall:
+	-rm -f ${DESTDIR}${libdir}/libeasel.a
+	for file in ${HDRS}; do\
+	   rm -f ${DESTDIR}${includedir}/$$file;\
+	done
+	rm -f ${DESTDIR}${includedir}/esl_config.h
+	${QUIET_SUBDIR0}miniapps      ${QUIET_SUBDIR1} uninstall
+
+# "make clean" removes almost everything except configuration files
+#
+clean:
+#Use 'ifneq' instead of 'test -e' because the '+@' in QUIET_SUBDIR0 can't
+#be passed to the shell. Note that ifneq breaks if indented.
+ifneq (,$(wildcard ./documentation/.))
+	${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} clean
+endif
+	${QUIET_SUBDIR0}testsuite     ${QUIET_SUBDIR1} clean
+	${QUIET_SUBDIR0}miniapps      ${QUIET_SUBDIR1} clean
+	-rm -f ${OBJS} libeasel.a
+	-rm -f ${UTESTS} ${BENCHMARKS} ${EXAMPLES} ${EXPERIMENTS}
+	-rm -f *~ TAGS
+	-rm -f *.gcno *.gcda *.gcov
+	-rm -f cscope.out
+	-rm -f core.[0-9]*
+	-rm -f esltmp??????
+	-rm -f config.log config.status
+	for prog in ${UTESTS} ${BENCHMARKS} ${EXAMPLES} ${EXPERIMENTS}; do\
+	   if test -d $$prog.dSYM; then rm -rf $$prog.dSYM; fi;\
+	done
+
+
+distclean: clean
+#See above for explanation of 'ifneq' usage
+ifneq (,$(wildcard ./documentation/.))
+	${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} distclean
+endif
+	${QUIET_SUBDIR0}testsuite     ${QUIET_SUBDIR1} distclean
+	${QUIET_SUBDIR0}miniapps      ${QUIET_SUBDIR1} distclean
+	-rm esl_config.h
+	-rm -rf autom4te.cache
+	-rm LICENSE.sh
+	-rm Makefile
+
+gitclean:  distclean
+	-rm configure
+
+
+# 'make REPOSITORY=... dist' : create a new distribution tarball
+#
+dist:
+# Make sure we pointed the make dist to a subversion repository
+	@if test x${REPOSITORY} = 'x'; then\
+	  echo "REPOSITORY isn't set; use make REPOSITORY=... dist";\
+	  exit 1;\
+	fi
+# Delete any old versions of the same release
+	@if test -d ../${BASENAME}-${RELEASE};        then rm -rf ../${BASENAME}-${RELEASE};        fi
+	@if test -e ../${BASENAME}-${RELEASE}.tar;    then rm -f  ../${BASENAME}-${RELEASE}.tar;    fi
+	@if test -e ../${BASENAME}-${RELEASE}.tar.Z;  then rm -f  ../${BASENAME}-${RELEASE}.tar.Z;  fi
+	@if test -e ../${BASENAME}-${RELEASE}.tar.gz; then rm -f  ../${BASENAME}-${RELEASE}.tar.gz; fi
+# Export the release from Subversion control
+	svn export ${REPOSITORY} ../${BASENAME}-${RELEASE}
+# Make the configure script from configure.ac
+	(cd ../${BASENAME}-${RELEASE};  autoconf)
+# We'll need some basic Makefiles
+	(cd ../${BASENAME}-${RELEASE}/; ./configure)
+# Set file permissions.
+	find ../${BASENAME}-${RELEASE} -type f -exec chmod +r {} \;
+# Compile the PDF documentation and move it to top level dir
+	(cd ../${BASENAME}-${RELEASE}/documentation/; make pdf)
+	mv ../${BASENAME}-${RELEASE}/documentation/current.pdf  ../${BASENAME}-${RELEASE}/Userguide.pdf
+# Attach license stamps by replacing LICENSE keyword everywhere
+	find ../${BASENAME}-${RELEASE} -type f -exec devkit/sedition-pp LICENSE LICENSE.tag {} \;
+# Other keyword replacements
+	devkit/sedition RELEASE ${RELEASE} RELEASEDATE ${RELEASEDATE} COPYRIGHT ${COPYRIGHT} ../${BASENAME}-${RELEASE}/00README
+	devkit/sedition RELEASE ${RELEASE}                                                   ../${BASENAME}-${RELEASE}/INSTALL
+# Cleanup
+	(cd ../${BASENAME}-${RELEASE}/; make implode)
+	(cd ../${BASENAME}-${RELEASE}/; make distclean)
+# Packaging
+	(cd ..;	tar cvf ${BASENAME}-${RELEASE}.tar ${BASENAME}-${RELEASE})
+	(cd ..; ${COMPRESS} ${BASENAME}-${RELEASE}.tar)
+
+
+
+# `make dcheck`: run developer testsuite, save output in testsuite/dcheck.report
+dcheck:
+	${QUIET_SUBDIR0}testsuite   ${QUIET_SUBDIR1} dcheck
+
+# The "implode" target is used when we've got Easel as a subdirectory
+# of a larger project, like Infernal or HMMER, and we're building a
+# distribution for that larger project. We remove any "personal
+# information" from Easel. Eventually that'd include our bug tracking,
+# for instance, but right now there's nothing to do.
+implode:
+	-rm -f 00CHECKLIST
+	-rm -f LICENSE.tag
+
+TAGS:
+	./makeTAGS.sh
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..b4e48c5
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,867 @@
+# aclocal.m4 contains custom macros used for creating configuration scripts.
+#
+# The aclocal.m4 in Easel is the master copy. HMMER and other projects
+# that depend on Easel create a symlink to the Easel aclocal.m4.
+#
+# Contents:
+#   1. CHECK_GNU_MAKE           Sets EXEC_DEPENDENCY to $$@.o vs. %: %.o for sysv vs. GNU make.
+#   2. ACX_MPI                  Detects MPI installation
+#   3. ACX_PTHREAD              Detects POSIX threads
+#   4. AX_COMPILER_VENDOR       Sets $ax_cv_c_compiler_vendor to gnu, intel, etc.
+#   5. AX_CHECK_COMPILER_FLAGS  Checks for support of a compiler flag. Example: -msse2
+#   6. AX_GCC_FUNC_ATTRIBUTE    Checks for gcc-like support of function __attribute() tags
+#   7. ESL_PIC_FLAGS            Detects whether/how to build PIC (position independent code)
+#   8. Copyright, license info
+#
+# The autoconf macro archive is at: 
+#   http://www.gnu.org/software/ac-archive/
+#
+
+#################################################################
+# Macro: CHECK_GNU_MAKE
+# Usage: CHECK_GNU_MAKE
+# Author: John Darrington <j.darrington at elvis.murdoch.edu.au> 
+# Modified from the original.
+# 
+# Sets the format of makefile dependency lines for executables.
+#
+# We need this because GNU make and SYSV make use different systems
+# specifying variables for dependencies: $$@ in sysv, %: %.o in GNU.
+# Would love to hear a better way of doing this.
+# 
+# I use two different conventions in my Makefiles. Sometimes 
+# executable "foo" has a file "foo.c" - this is the HMMER, Easel, Infernal convention.
+# Sometimes executable "foo" has a file "foo_main.c" - this is
+# my older SQUID convention. The configure script sets the
+# EXEC_DEPENDENCY appropriately: here, HMMER style.
+#
+# Then we can write one Makefile line for all programs in ${PROGS} like so:
+#   ${PROGS}: @EXEC_DEPENDENCY@ 
+#
+# Sets an output variable EXEC_DEPENDENCY. 
+#
+AC_DEFUN(CHECK_GNU_MAKE,[ 
+  AC_MSG_CHECKING(whether you have a GNU make)
+  foundGNUmake='nope, so we assume you will use a sysv-compatible make.' ;
+  EXEC_DEPENDENCY=[\$\$\@.o] ;
+  for a in "$MAKE" make gmake gnumake ; do
+    if test -z "$a" ; then continue ; fi ;
+    if  ( sh -c "$a --version" 2> /dev/null | grep GNU 2>&1 > /dev/null ) ; then
+      foundGNUmake='yes, you do; and we assume you will use it!' ;
+      EXEC_DEPENDENCY='%: %.o' ;
+    fi
+  done
+  AC_MSG_RESULT($foundGNUmake)
+  AC_SUBST(EXEC_DEPENDENCY)
+])
+
+
+################################################################
+# Macro: ACX_MPI 
+# Usage: ACX_MPI([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+# Authors: Steven G. Johnson and Julian C. Cummings
+# Version: 2006-10-22
+# Unmodified from the original; can be replaced with new version.
+#
+#      xref http://autoconf-archive.cryp.to/acx_mpi.html
+#      Sets MPICC, MPILIBS output variable. 
+#      If ACTION-IF-FOUND is not specified, default action defines HAVE_MPI.
+#
+AC_DEFUN([ACX_MPI], [
+AC_PREREQ(2.50) dnl for AC_LANG_CASE
+
+AC_LANG_CASE([C], [
+        AC_REQUIRE([AC_PROG_CC])
+        AC_ARG_VAR(MPICC,[MPI C compiler command])
+        AC_CHECK_PROGS(MPICC, mpicc hcc mpxlc_r mpxlc mpcc cmpicc, $CC)
+        acx_mpi_save_CC="$CC"
+        CC="$MPICC"
+        AC_SUBST(MPICC)
+],
+[C++], [
+        AC_REQUIRE([AC_PROG_CXX])
+        AC_ARG_VAR(MPICXX,[MPI C++ compiler command])
+        AC_CHECK_PROGS(MPICXX, mpic++ mpicxx mpiCC hcp mpxlC_r mpxlC mpCC cmpic++, $CXX)
+        acx_mpi_save_CXX="$CXX"
+        CXX="$MPICXX"
+        AC_SUBST(MPICXX)
+],
+[Fortran 77], [
+        AC_REQUIRE([AC_PROG_F77])
+        AC_ARG_VAR(MPIF77,[MPI Fortran 77 compiler command])
+        AC_CHECK_PROGS(MPIF77, mpif77 hf77 mpxlf_r mpxlf mpf77 cmpifc, $F77)
+        acx_mpi_save_F77="$F77"
+        F77="$MPIF77"
+        AC_SUBST(MPIF77)
+],
+[Fortran], [
+        AC_REQUIRE([AC_PROG_FC])
+        AC_ARG_VAR(MPIFC,[MPI Fortran compiler command])
+        AC_CHECK_PROGS(MPIFC, mpif90 mpxlf95_r mpxlf90_r mpxlf95 mpxlf90 mpf90 cmpif90c, $FC)
+        acx_mpi_save_FC="$FC"
+        FC="$MPIFC"
+        AC_SUBST(MPIFC)
+])
+
+if test x = x"$MPILIBS"; then
+        AC_LANG_CASE([C], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])],
+                [C++], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])],
+                [Fortran 77], [AC_MSG_CHECKING([for MPI_Init])
+                        AC_LINK_IFELSE([AC_LANG_PROGRAM([],[      call MPI_Init])],[MPILIBS=" "
+                                AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])],
+                [Fortran], [AC_MSG_CHECKING([for MPI_Init])
+                        AC_LINK_IFELSE([AC_LANG_PROGRAM([],[      call MPI_Init])],[MPILIBS=" "
+                                AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])])
+fi
+AC_LANG_CASE([Fortran 77], [
+        if test x = x"$MPILIBS"; then
+                AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"])
+        fi
+        if test x = x"$MPILIBS"; then
+                AC_CHECK_LIB(fmpich, MPI_Init, [MPILIBS="-lfmpich"])
+        fi
+],
+[Fortran], [
+        if test x = x"$MPILIBS"; then
+                AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"])
+        fi
+        if test x = x"$MPILIBS"; then
+                AC_CHECK_LIB(mpichf90, MPI_Init, [MPILIBS="-lmpichf90"])
+        fi
+])
+if test x = x"$MPILIBS"; then
+        AC_CHECK_LIB(mpi, MPI_Init, [MPILIBS="-lmpi"])
+fi
+if test x = x"$MPILIBS"; then
+        AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"])
+fi
+
+dnl We have to use AC_TRY_COMPILE and not AC_CHECK_HEADER because the
+dnl latter uses $CPP, not $CC (which may be mpicc).
+AC_LANG_CASE([C], [if test x != x"$MPILIBS"; then
+        AC_MSG_CHECKING([for mpi.h])
+        AC_TRY_COMPILE([#include <mpi.h>],[],[AC_MSG_RESULT(yes)], [MPILIBS=""
+                AC_MSG_RESULT(no)])
+fi],
+[C++], [if test x != x"$MPILIBS"; then
+        AC_MSG_CHECKING([for mpi.h])
+        AC_TRY_COMPILE([#include <mpi.h>],[],[AC_MSG_RESULT(yes)], [MPILIBS=""
+                AC_MSG_RESULT(no)])
+fi],
+[Fortran 77], [if test x != x"$MPILIBS"; then
+        AC_MSG_CHECKING([for mpif.h])
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[      include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS=""
+                AC_MSG_RESULT(no)])
+fi],
+[Fortran], [if test x != x"$MPILIBS"; then
+        AC_MSG_CHECKING([for mpif.h])
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[      include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS=""
+                AC_MSG_RESULT(no)])
+fi])
+
+AC_LANG_CASE([C], [CC="$acx_mpi_save_CC"],
+        [C++], [CXX="$acx_mpi_save_CXX"],
+        [Fortran 77], [F77="$acx_mpi_save_F77"],
+        [Fortran], [FC="$acx_mpi_save_FC"])
+
+AC_SUBST(MPILIBS)
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x = x"$MPILIBS"; then
+        $2
+        :
+else
+        ifelse([$1],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$1])
+        :
+fi
+])dnl ACX_MPI
+
+
+
+#################################################################
+# Macro: ACX_PTHREAD
+# Usage: ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) 
+# Authors:  Steven G. Johnson <stevenj at alum.mit.edu>
+#           Alejandro Forero Cuervo <bachue at bachue.com>
+# Version:  1.9 (2004/02/23)
+# Source:   http://www.gnu.org/software/ac-archive/htmldoc/acx_pthread.html
+# 
+# SRE: I have modified this source; search for SRE to see where.
+#      Solaris needs -D_POSIX_PTHREAD_SEMANTICS or ctime_r() calls will choke.
+#
+dnl Available from the GNU Autoconf Macro Archive at:
+dnl http://www.gnu.org/software/ac-archive/htmldoc/acx_pthread.html
+dnl
+AC_DEFUN([ACX_PTHREAD], [
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_SAVE
+AC_LANG_C
+acx_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
+        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
+        AC_MSG_RESULT($acx_pthread_ok)
+        if test x"$acx_pthread_ok" = xno; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads too;
+#      also defines -D_REENTRANT)
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case "${host_cpu}-${host_os}" in
+        *solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed.  (We need to link with -pthread or
+        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+        # a function called by this macro, so we could check for that, but
+        # who knows whether they'll stub that too in a future libc.)  So,
+        # we'll just look for -pthreads and -lpthread first:
+
+        acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags"
+        ;;
+esac
+
+if test x"$acx_pthread_ok" = xno; then
+for flag in $acx_pthread_flags; do
+
+        case $flag in
+                none)
+                AC_MSG_CHECKING([whether pthreads work without any flags])
+                ;;
+
+                -*)
+                AC_MSG_CHECKING([whether pthreads work with $flag])
+                PTHREAD_CFLAGS="$flag"
+                ;;
+
+		pthread-config)
+		AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
+		if test x"$acx_pthread_config" = xno; then continue; fi
+		PTHREAD_CFLAGS="`pthread-config --cflags`"
+		PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+		;;
+
+                *)
+                AC_MSG_CHECKING([for the pthreads library -l$flag])
+                PTHREAD_LIBS="-l$flag"
+                ;;
+        esac
+
+        save_LIBS="$LIBS"
+        save_CFLAGS="$CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+        AC_TRY_LINK([#include <pthread.h>],
+                    [pthread_t th; pthread_join(th, 0);
+                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
+                     pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
+                    [acx_pthread_ok=yes])
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        AC_MSG_RESULT($acx_pthread_ok)
+        if test "x$acx_pthread_ok" = xyes; then
+                break;
+        fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$acx_pthread_ok" = xyes; then
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Detect AIX lossage: threads are created detached by default
+        # and the JOINABLE attribute has a nonstandard name (UNDETACHED).
+        AC_MSG_CHECKING([for joinable pthread attribute])
+        AC_TRY_LINK([#include <pthread.h>],
+                    [int attr=PTHREAD_CREATE_JOINABLE;],
+                    ok=PTHREAD_CREATE_JOINABLE, ok=unknown)
+        if test x"$ok" = xunknown; then
+                AC_TRY_LINK([#include <pthread.h>],
+                            [int attr=PTHREAD_CREATE_UNDETACHED;],
+                            ok=PTHREAD_CREATE_UNDETACHED, ok=unknown)
+        fi
+        if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then
+                AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok,
+                          [Define to the necessary symbol if this constant
+                           uses a non-standard name on your system.])
+        fi
+        AC_MSG_RESULT(${ok})
+        if test x"$ok" = xunknown; then
+                AC_MSG_WARN([we do not know how to create joinable pthreads])
+        fi
+
+        AC_MSG_CHECKING([if more special flags are required for pthreads])
+        flag=no
+# Added _POSIX_PTHREAD_SEMANTICS for solaris. Needed for ctime_r() compliance.
+# SRE, Fri Oct 29 10:03:36 2010 [J7/3]
+        case "${host_cpu}-${host_os}" in
+                *-aix* | *-freebsd*)     flag="-D_THREAD_SAFE";;
+                *solaris*)               flag="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS";; 
+                *-osf* | *-hpux*)        flag="-D_REENTRANT";;
+        esac
+        AC_MSG_RESULT(${flag})
+        if test "x$flag" != xno; then
+                PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+        fi
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        # More AIX lossage: must compile with cc_r
+        AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
+else
+        PTHREAD_CC="$CC"
+fi
+
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(PTHREAD_CFLAGS)
+AC_SUBST(PTHREAD_CC)
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$acx_pthread_ok" = xyes; then
+        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
+        :
+else
+        acx_pthread_ok=no
+        $2
+fi
+AC_LANG_RESTORE
+])dnl ACX_PTHREAD
+#
+# ACX_PTHREAD macro end.
+# ****************************************************************
+# ****************************************************************
+
+
+
+#################################################################
+# Macro: AX_COMPILER_VENDOR
+# Usage: AX_COMPILER_VENDOR
+# Authors:  Copyright (C) 2007 Steven G. Johnson <stevenj at alum.mit.edu>
+#           Copyright (C) 2007 Matteo Frigo
+# Version:  2007-08-01
+# Source:   http://autoconf-archive.cryp.to/ax_compiler_vendor.html
+#
+# Sets $ax_cv_c_compiler_vendor to gnu, intel, ibm, sun, hp, borland,
+# comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, watcom, etc.
+#
+# Everything below is verbatim from the archive. DO NOT MODIFY IT.
+AC_DEFUN([AX_COMPILER_VENDOR],
+[
+AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
+ [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
+  # note: don't check for gcc first since some other compilers define __GNUC__
+  for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
+    vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[
+#if !($vencpp)
+      thisisanerror;
+#endif
+])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break])
+  done
+ ])
+])
+#
+# AX_COMPILER_VENDOR macro end.
+# ****************************************************************
+# ****************************************************************
+
+
+
+
+#################################################################
+# Macro: AX_CHECK_COMPILER_FLAGS
+# Usage: AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE])
+# Authors:  Copyright (C) 2007 Steven G. Johnson <stevenj at alum.mit.edu>
+#           Copyright (C) 2007 Matteo Frigo.
+# Version:  2007-07-29
+# Source:   http://autoconf-archive.cryp.to/ax_check_compiler_flags.html
+#
+# Check whether the given compiler FLAGS work with the current language's compiler, 
+# or whether they give an error. (Warnings, however, are ignored.)
+# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on success/failure.
+# 
+# Everything below is verbatim from the archive. DO NOT MODIFY IT.
+#
+AC_DEFUN([AX_CHECK_COMPILER_FLAGS],
+[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX
+AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1])
+dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
+AS_LITERAL_IF([$1],
+  [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
+      ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+      _AC_LANG_PREFIX[]FLAGS="$1"
+      AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+        AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes,
+        AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no)
+      _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])],
+  [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+   _AC_LANG_PREFIX[]FLAGS="$1"
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+     eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes,
+     eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no)
+   _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])
+eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)
+AC_MSG_RESULT($ax_check_compiler_flags)
+if test "x$ax_check_compiler_flags" = xyes; then
+        m4_default([$2], :)
+else
+        m4_default([$3], :)
+fi
+])dnl AX_CHECK_COMPILER_FLAGS
+#
+# AX_CHECK_COMPILER_FLAGS macro end.
+# ****************************************************************
+# ****************************************************************
+
+
+
+
+
+
+
+#################################################################
+# Macro:   AX_GCC_FUNC_ATTRIBUTE
+# Usage:   AX_GCC_FUNC_ATTRIBUTE(noreturn), for example
+# Author:  Gabriele Svelto <gabriele.svelto at gmail.com>
+# Version: 3?
+# Source:  http://www.gnu.org/software/autoconf-archive/ax_gcc_func_attribute.html
+# Unmodified from the original; can be replaced by a new version.
+#
+# Defines HAVE_FUNC_ATTRIBUTE_NORETURN (for example).
+#
+################################################################
+# ===========================================================================
+#   http://www.gnu.org/software/autoconf-archive/ax_gcc_func_attribute.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_GCC_FUNC_ATTRIBUTE(ATTRIBUTE)
+#
+# DESCRIPTION
+#
+#   This macro checks if the compiler supports one of GCC's function
+#   attributes; many other compilers also provide function attributes with
+#   the same syntax. Compiler warnings are used to detect supported
+#   attributes as unsupported ones are ignored by default so quieting
+#   warnings when using this macro will yield false positives.
+#
+#   The ATTRIBUTE parameter holds the name of the attribute to be checked.
+#
+#   If ATTRIBUTE is supported define HAVE_FUNC_ATTRIBUTE_<ATTRIBUTE>.
+#
+#   The macro caches its result in the ax_cv_have_func_attribute_<attribute>
+#   variable.
+#
+#   The macro currently supports the following function attributes:
+#
+#    alias
+#    aligned
+#    alloc_size
+#    always_inline
+#    artificial
+#    cold
+#    const
+#    constructor
+#    constructor_priority for constructor attribute with priority
+#    deprecated
+#    destructor
+#    dllexport
+#    dllimport
+#    error
+#    externally_visible
+#    flatten
+#    format
+#    format_arg
+#    gnu_inline
+#    hot
+#    ifunc
+#    leaf
+#    malloc
+#    noclone
+#    noinline
+#    nonnull
+#    noreturn
+#    nothrow
+#    optimize
+#    pure
+#    unused
+#    used
+#    visibility
+#    warning
+#    warn_unused_result
+#    weak
+#    weakref
+#
+#   Unsuppored function attributes will be tested with a prototype returning
+#   an int and not accepting any arguments and the result of the check might
+#   be wrong or meaningless so use with care.
+#
+# LICENSE
+#
+#   Copyright (c) 2013 Gabriele Svelto <gabriele.svelto at gmail.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.  This file is offered as-is, without any
+#   warranty.
+
+#serial 3
+
+AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [
+    AS_VAR_PUSHDEF([ac_var], [ax_cv_have_func_attribute_$1])
+
+    AC_CACHE_CHECK([for __attribute__(($1))], [ac_var], [
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([
+            m4_case([$1],
+                [alias], [
+                    int foo( void ) { return 0; }
+                    int bar( void ) __attribute__(($1("foo")));
+                ],
+                [aligned], [
+                    int foo( void ) __attribute__(($1(32)));
+                ],
+                [alloc_size], [
+                    void *foo(int a) __attribute__(($1(1)));
+                ],
+                [always_inline], [
+                    inline __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [artificial], [
+                    inline __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [cold], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [const], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [constructor_priority], [
+                    int foo( void ) __attribute__((__constructor__(65535/2)));
+                ],
+                [constructor], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [deprecated], [
+                    int foo( void ) __attribute__(($1("")));
+                ],
+                [destructor], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [dllexport], [
+                    __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [dllimport], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [error], [
+                    int foo( void ) __attribute__(($1("")));
+                ],
+                [externally_visible], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [flatten], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [format], [
+                    int foo(const char *p, ...) __attribute__(($1(printf, 1, 2)));
+                ],
+                [format_arg], [
+                    char *foo(const char *p) __attribute__(($1(1)));
+                ],
+                [gnu_inline], [
+                    inline __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [hot], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [ifunc], [
+                    int my_foo( void ) { return 0; }
+                    static int (*resolve_foo(void))(void) { return my_foo; }
+                    int foo( void ) __attribute__(($1("resolve_foo")));
+                ],
+                [leaf], [
+                    __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [malloc], [
+                    void *foo( void ) __attribute__(($1));
+                ],
+                [noclone], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [noinline], [
+                    __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [nonnull], [
+                    int foo(char *p) __attribute__(($1(1)));
+                ],
+                [noreturn], [
+                    void foo( void ) __attribute__(($1));
+                ],
+                [nothrow], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [optimize], [
+                    __attribute__(($1(3))) int foo( void ) { return 0; }
+                ],
+                [pure], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [unused], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [used], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [visibility], [
+                    int foo_def( void ) __attribute__(($1("default")));
+                    int foo_hid( void ) __attribute__(($1("hidden")));
+                    int foo_int( void ) __attribute__(($1("internal")));
+                    int foo_pro( void ) __attribute__(($1("protected")));
+                ],
+                [warning], [
+                    int foo( void ) __attribute__(($1("")));
+                ],
+                [warn_unused_result], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [weak], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [weakref], [
+                    static int foo( void ) { return 0; }
+                    static int bar( void ) __attribute__(($1("foo")));
+                ],
+                [
+                 m4_warn([syntax], [Unsupported attribute $1, the test may fail])
+                 int foo( void ) __attribute__(($1));
+                ]
+            )], [])
+            ],
+            dnl GCC doesn't exit with an error if an unknown attribute is
+            dnl provided but only outputs a warning, so accept the attribute
+            dnl only if no warning were issued.
+            [AS_IF([test -s conftest.err],
+                [AS_VAR_SET([ac_var], [no])],
+                [AS_VAR_SET([ac_var], [yes])])],
+            [AS_VAR_SET([ac_var], [no])])
+    ])
+
+    AS_IF([test yes = AS_VAR_GET([ac_var])],
+        [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_FUNC_ATTRIBUTE_$1), 1,
+            [Define to 1 if the system has the `$1' function attribute])], [])
+
+    AS_VAR_POPDEF([ac_var])
+])
+#
+# AX_GCC_FUNC_ATTRIBUTE macro end
+# ****************************************************************
+# ****************************************************************
+
+
+
+
+################################################################
+# Macro:      ESL_PIC_FLAGS
+# Usage:      ESL_PIC_FLAGS
+# Author:     Dan Nicholson, Mesa3D project 
+# References: http://www.mesa3d.org/
+#             http://www.mail-archive.com/mesa3d-dev@lists.sourceforge.net/msg04938.html
+# 
+# Derived (essentially verbatim) from MESA_PIC_FLAGS, in the Mesa
+# project's acinclude.m4 file. From the Mesa file's header:
+#   "Find out whether to build PIC code using the option --enable-pic and
+#   the configure enable_static/enable_shared settings. If PIC is needed,
+#   figure out the necessary flags for the platform and compiler.
+#
+#   The platform checks have been shamelessly taken from libtool and
+#   stripped down to just what's needed for Mesa. See _LT_COMPILER_PIC in
+#   /usr/share/aclocal/libtool.m4 or
+#   http://git.savannah.gnu.org/gitweb/?p=libtool.git;a=blob;f=libltdl/m4/libtool.m4;hb=HEAD
+#
+# Sets an output variable @PIC_FLAGS@ which should be added to
+# CFLAGS lines.
+#
+AC_DEFUN([ESL_PIC_FLAGS],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_ARG_VAR([PIC_FLAGS], [compiler flags for PIC code])
+AC_ARG_ENABLE([pic],
+    [AS_HELP_STRING([--disable-pic],
+        [compile PIC objects @<:@default=enabled for shared builds
+        on supported platforms@:>@])],
+    [enable_pic="$enableval"
+    test "x$enable_pic" = x && enable_pic=auto],
+    [enable_pic=auto])
+# disable PIC by default for static builds
+if test "$enable_pic" = auto && test "$enable_static" = yes; then
+    enable_pic=no
+fi
+# if PIC hasn't been explicitly disabled, try to figure out the flags
+if test "$enable_pic" != no; then
+    AC_MSG_CHECKING([for $CC option to produce PIC])
+    # allow the user's flags to override
+    if test "x$PIC_FLAGS" = x; then
+        # see if we're using GCC
+        if test "x$GCC" = xyes; then
+            case "$host_os" in
+            aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*)
+                # PIC is the default for these OSes.
+                ;;
+            mingw*|os2*|pw32*)
+                # 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).
+                PIC_FLAGS="-DDLL_EXPORT"
+                ;;
+            darwin*|rhapsody*)
+                # PIC is the default on this platform
+                # Common symbols not allowed in MH_DYLIB files
+                PIC_FLAGS="-fno-common"
+                ;;
+            hpux*)
+                # 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*)
+                    ;;
+                *)
+                    PIC_FLAGS="-fPIC"
+                    ;;
+                esac
+                ;;
+            *)
+                # Everyone else on GCC uses -fPIC
+                PIC_FLAGS="-fPIC"
+                ;;
+            esac
+        else # !GCC
+            case "$host_os" in
+            hpux9*|hpux10*|hpux11*)
+                # 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
+                    ;;
+                *)
+                    PIC_FLAGS="+Z"
+                    ;;
+                esac
+                ;;
+            linux*|k*bsd*-gnu)
+                case `basename "$CC"` in
+                icc*|ecc*|ifort*)
+                    PIC_FLAGS="-KPIC"
+                    ;;
+                pgcc*|pgf77*|pgf90*|pgf95*)
+                    # Portland Group compilers (*not* the Pentium gcc
+                    # compiler, which looks to be a dead project)
+                    PIC_FLAGS="-fpic"
+                    ;;
+                ccc*)
+                    # All Alpha code is PIC.
+                    ;;
+                xl*)
+                    # IBM XL C 8.0/Fortran 10.1 on PPC
+                    PIC_FLAGS="-qpic"
+                    ;;
+                *)
+                    case `$CC -V 2>&1 | sed 5q` in
+                    *Sun\ C*|*Sun\ F*)
+                        # Sun C 5.9 or Sun Fortran
+                        PIC_FLAGS="-KPIC"
+                        ;;
+                    esac
+                esac
+                ;;
+            solaris*)
+                PIC_FLAGS="-KPIC"
+                ;;
+            sunos4*)
+                PIC_FLAGS="-PIC"
+                ;;
+            esac
+        fi # GCC
+    fi # PIC_FLAGS
+    AC_MSG_RESULT([$PIC_FLAGS])
+fi
+AC_SUBST([PIC_FLAGS])
+])
+#
+# ESL_PIC_FLAGS macro end.
+# ****************************************************************
+# ****************************************************************
+
+
+
+#################################################################
+# @LICENSE@
+#
+# SVN $Id$
+# SVN $URL$
+#################################################################
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..dd1688b
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1459 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-06-11'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 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.
+
+# Originally written by Per Bothner <per at bothner.com>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+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 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit 0 ;;
+    amd64:OpenBSD:*:*)
+	echo x86_64-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    amiga:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    arc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    cats:OpenBSD:*:*)
+	echo arm-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hp300:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    luna88k:OpenBSD:*:*)
+    	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvmeppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pmax:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sgi:OpenBSD:*:*)
+	echo mipseb-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:OpenBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:MirBSD:*:*)
+	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit 0 ;;
+    Alpha*:OpenVMS:*:*)
+	echo alpha-hp-vms
+	exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit 0 ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit 0;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit 0 ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit 0 ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit 0 ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit 0;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit 0;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit 0 ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit 0 ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit 0 ;;
+    DRS?6000:UNIX_SV:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7 && exit 0 ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit 0 ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit 0 ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit 0 ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c \
+	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && exit 0
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit 0 ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit 0 ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit 0 ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit 0 ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit 0 ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit 0 ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit 0 ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit 0 ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+		echo rs6000-ibm-aix3.2.5
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit 0 ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    # avoid double evaluation of $set_cc_for_build
+	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+	echo unknown-hitachi-hiuxwe2
+	exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit 0 ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit 0 ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit 0 ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit 0 ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    *:UNICOS/mp:*:*)
+	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit 0 ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:FreeBSD:*:*)
+	# Determine whether the default compiler uses glibc.
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#if __GLIBC__ >= 2
+	LIBC=gnu
+	#else
+	LIBC=
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
+	# FreeBSD's kernel, but not the complete OS.
+	case ${LIBC} in gnu) kernel_only='k' ;; esac
+	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+	exit 0 ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit 0 ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit 0 ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit 0 ;;
+    x86:Interix*:[34]*)
+	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+	exit 0 ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit 0 ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit 0 ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit 0 ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit 0 ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit 0 ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit 0 ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit 0 ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit 0 ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit 0 ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit 0 ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit 0 ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit 0 ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit 0 ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit 0 ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit 0 ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#ifdef __INTEL_COMPILER
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit 0 ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit 0 ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit 0 ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit 0 ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit 0 ;;
+	i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit 0 ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit 0 ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit 0 ;;
+    i*86:*:5:[78]*)
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit 0 ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit 0 ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit 0 ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit 0 ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit 0 ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit 0 ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit 0 ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit 0 ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit 0 ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit 0 ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit 0 ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit 0 ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit 0 ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit 0 ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Darwin:*:*)
+	case `uname -p` in
+	    *86) UNAME_PROCESSOR=i686 ;;
+	    powerpc) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit 0 ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit 0 ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit 0 ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit 0 ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit 0 ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit 0 ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit 0 ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit 0 ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit 0 ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit 0 ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit 0 ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit 0 ;;
+    c34*)
+	echo c34-convex-bsd
+	exit 0 ;;
+    c38*)
+	echo c38-convex-bsd
+	exit 0 ;;
+    c4*)
+	echo c4-convex-bsd
+	exit 0 ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+    ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..ba33103
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1549 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-03-12'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 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.
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+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 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # 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 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-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/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32r | m32rle | m68000 | m68k | m88k | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| msp430 \
+	| ns16k | ns32k \
+	| openrisc | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* \
+	| bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| msp430-* \
+	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+	| xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	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
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	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
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	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
+		;;
+	mmix*)
+		basic_machine=mmix-knuth
+		os=-mmixware
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nv1)
+		basic_machine=nv1-cray
+		os=-unicosmp
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	or32 | or32-*)
+		basic_machine=or32-unknown
+		os=-coff
+		;;
+	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
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	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
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	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
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-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
+		;;
+	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
+		;;
+	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -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* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -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*)
+	# 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* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-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
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-ibm)
+		os=-aix
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..fcd4ed4
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,565 @@
+# Process this file with autoconf to produce the Easel configuration script.
+# 
+# reminders to save re-reading autoconf manual for the n'th time:
+#   output variables:
+#      - are defined here as normal shell variables, e.g. FOO="my string"
+#      - are made into output variables by calling AC_SUBST(FOO)
+#      - any occurrence of @FOO@ in an output file is then substituted
+#        This only happens in files we assign w/ AC_CONFIG_FILES;
+#        such as our Makefile.in's, for example.
+#
+#   C preprocessor symbols:
+#      - are defined here by calling AC_DEFINE(FOO) or AC_DEFINE(FOO, [42])
+#      - then #undef FOO lines in easel.h.in become #define FOO or #define FOO 42
+#        This only happens in header files that we assign
+#        w/ AC_CONFIG_HEADERS, such as easel.h.in
+#
+# Contents:
+#   1. autoconf requirements
+#   2. AC_INIT
+#   3. info on the package
+#   4. process ./configure commandline options
+#   5. checks for programs, including ${CC}, ${CFLAGS}
+#   6. checks for libraries
+#   7. checks for header files
+#   8. checks for types
+#   9. checks for structures
+#  10. checks for compiler characteristics
+#  11. checks for library functions
+#  11. checks for system services
+#  12. AC_CONFIG_FILES
+#  13. AC_OUTPUT
+#
+# Order obeys autoconf manual, "standard configure.ac layout".
+
+
+
+################################################################
+# 1. autoconf requirements
+################################################################
+# autoconf 2.61 has a bug in AC_FUNC_FSEEKO; make sure we don't use it.
+AC_PREREQ(2.63)
+
+
+
+################################################################
+# 2. AC_INIT
+################################################################
+AC_INIT(Easel, 0.43, sean at eddylab.org, easel)
+AC_MSG_NOTICE([Configuring the Easel library for your system.])
+
+# remember if the user is overriding CFLAGS
+if test x"$CFLAGS" = x; then 
+  sre_cflags_env_set=no
+else
+  sre_cflags_env_set=yes
+fi
+
+################################################################
+# 3. Info on the package
+################################################################
+#
+# The four AC_INIT args above set the following output variables and preprocessor 
+# symbols:
+#     PACKAGE_NAME      <package>     e.g. "Easel"                      
+#     PACKAGE_VERSION   <version>     e.g. "0.43"
+#     PACKAGE_BUGREPORT <bug-report>  e.g. "sean at eddylab.org"
+#     PACKAGE_TARNAME   <tarname>     e.g. "easel"
+# From them, AC_INIT automatically derives one more:
+#     PACKAGE_STRING    <package> <version>, e.g. "Easel 0.43"
+# Then we define some of our own:
+#     EASEL_DATE        release date: e.g. "July 2016"
+#     EASEL_COPYRIGHT   one-line copyright string
+#     EASEL_LICENSE     one-line license string
+#     EASEL_LICENSETAG  which license to bundle from Licenses/ subdirectory.
+#     EASEL_URL         URL home for Easel.
+#
+# Because Easel is designed to be a library and must coexist with
+# packages that include it as a subdirectory (HMMER, Infernal...),
+# we don't want to use AC_INIT's PACKAGE_ variables as preprocessor
+# symbols to put version info into executables; we'll get name clashes,
+# plus we might want to have both Easel version info and main package
+# version info. So, we use the PACKAGE_ stuff to make a
+# new preprocessor symbol of our own:
+#     EASEL_VERSION    e.g. "1.9a"
+#
+
+EASEL_DATE="July 2016"
+EASEL_COPYRIGHT="Copyright (C) 2016 Howard Hughes Medical Institute"
+EASEL_LICENSE="Freely distributed under the BSD open source license."
+EASEL_VERSION=$PACKAGE_VERSION
+EASEL_URL="http://bioeasel.org/"
+
+# Output variables.
+# (AC_OUTPUT replaces instances of @var@ in input files.)
+AC_SUBST(EASEL_DATE)
+AC_SUBST(EASEL_COPYRIGHT)
+AC_SUBST(EASEL_LICENSE)
+AC_SUBST(EASEL_VERSION)
+AC_SUBST(EASEL_URL)
+
+# Preprocessor symbols.
+# adds a -Dvar=value to @DEFS@;
+# replace #undef's in easel.h.in
+AC_DEFINE_UNQUOTED(EASEL_DATE,      "$EASEL_DATE")
+AC_DEFINE_UNQUOTED(EASEL_COPYRIGHT, "$EASEL_COPYRIGHT")
+AC_DEFINE_UNQUOTED(EASEL_LICENSE,   "$EASEL_LICENSE")
+AC_DEFINE_UNQUOTED(EASEL_VERSION,   "$EASEL_VERSION")
+
+# Figure out what host we're compiling on.
+# Three GNU scripts must be included in the distro: 
+#       install.sh, config.guess, config.sub
+# This sets four shell variables:
+#       host            example: i686-pc-linux-gnu      
+#       host_cpu        example: i686
+#       host_vendor     example: pc
+#       host_os         example: linux-gnu
+AC_CANONICAL_HOST
+
+
+################################################################
+# 4. Process ./configure command line options
+################################################################
+
+# --enable-modular       - configure for use of standalone modules
+#
+# Default is to enable all augmentations and compile entire library.
+# With --enable-modular, any desired augmentations must be set
+# at compile-time by the user.
+#
+AC_ARG_ENABLE(modular,[AS_HELP_STRING([--enable-modular],[compile and prepare modules for standalone use])], 
+  [ 
+    AC_MSG_NOTICE([Compiling for standalone (independent) use of modules.])
+  ], 
+  [
+    AC_MSG_NOTICE([Compiling the full Easel library, with all augmentations.])
+    AC_DEFINE(eslAUGMENT_ALPHABET)
+    AC_DEFINE(eslAUGMENT_NCBI)
+    AC_DEFINE(eslAUGMENT_DMATRIX)
+    AC_DEFINE(eslAUGMENT_FILEPARSER)
+    AC_DEFINE(eslAUGMENT_GEV)
+    AC_DEFINE(eslAUGMENT_GUMBEL)
+    AC_DEFINE(eslAUGMENT_HISTOGRAM)
+    AC_DEFINE(eslAUGMENT_KEYHASH)
+    AC_DEFINE(eslAUGMENT_MINIMIZER)
+    AC_DEFINE(eslAUGMENT_MSA)
+    AC_DEFINE(eslAUGMENT_RANDOM)
+    AC_DEFINE(eslAUGMENT_SSI)
+    AC_DEFINE(eslAUGMENT_STATS)
+    AC_DEFINE(eslLIBRARY)
+  ])
+
+# --enable-debugging      - enable basic debugging code (level 1)
+# --enable-debugging=x    - also set verbosity level to <x> (1-3)
+#
+# At all levels, replaces CFLAGS w/ "-g -Wall" (so it assumes gcc).
+# Sets the eslDEBUGLEVEL preprocessor symbol to <x>
+#
+AC_ARG_ENABLE(debugging,
+[AS_HELP_STRING([--enable-debugging],[include debugging code])
+AS_HELP_STRING([--enable-debugging=x],[also set diagnostics verbosity level to <x> (1-3)])],
+enable_debugging=$enableval, enable_debugging=no)
+
+case $enable_debugging in
+   yes)  AC_DEFINE(eslDEBUGLEVEL, 1);;
+     1)  AC_DEFINE(eslDEBUGLEVEL, 1);;
+     2)  AC_DEFINE(eslDEBUGLEVEL, 2);;
+     3)  AC_DEFINE(eslDEBUGLEVEL, 3);;
+    no)  AC_DEFINE(eslDEBUGLEVEL, 0);;
+     *)  AC_MSG_ERROR([Unknown argument to --enable-debugging: $enable_debugging]);;
+esac
+
+# --enable-threads      Enable POSIX multithreading
+#
+# Uses ACX_PTHREAD macro from the GNU macro archive.
+# Back to my code to finish enabling pthreads...
+# Define these preprocessor variables:
+#     HAVE_PTHREAD
+#     HAVE_PTHREAD_SETCONCURRENCY
+#     HAVE_PTHREAD_ATTR_SETSCOPE
+#
+AC_ARG_ENABLE([threads],
+              [AS_HELP_STRING([--enable-threads],
+                 [enable POSIX multithreading support (default is check)])],
+	      [],
+              [enable_threads=check])
+
+case $enable_threads in 
+   yes)   check_threads=yes
+          ;;
+   no)    check_threads=no
+          ;;
+   check) check_threads=yes
+          ;;
+   *)     check_threads=no
+          AC_MSG_NOTICE([Ignoring unknown argument to --enable-threads: $enable_threads])
+          ;;
+esac
+ 
+AS_IF([test "x$check_threads" != xno],
+      [ACX_PTHREAD([AC_DEFINE(HAVE_PTHREAD)
+                    AC_SUBST(PTHREAD_LIBS)
+                    AC_SUBST(PTHREAD_CFLAGS)],
+                   [if test "x$enable_threads" != xcheck; then
+                      AC_MSG_FAILURE([POSIX multithreading failed])
+                    fi])])
+
+AC_ARG_ENABLE(gcov,[AS_HELP_STRING([--enable-gcov],[compile for code coverage testing])], enable_gcov=$enableval,  enable_gcov=no)
+AC_ARG_ENABLE(gprof,[AS_HELP_STRING([--enable-gprof],[compile for gcc code profiling])],  enable_gprof=$enableval, enable_gprof=no)
+AC_ARG_ENABLE(sse,[AS_HELP_STRING([--enable-sse],[enable SSE optimizations])] ,           enable_sse=$enableval,   enable_sse=check)
+AC_ARG_ENABLE(vmx,[AS_HELP_STRING([--enable-vmx],[enable Altivec/VMX optimizations])],    enable_vmx=$enableval,   enable_vmx=check)
+AC_ARG_WITH(gsl,[AS_HELP_STRING([--with-gsl],[use the GSL, GNU Scientific Library])],     with_gsl=$withval,       with_gsl=no)
+AC_ARG_ENABLE(mpi,[AS_HELP_STRING([--enable-mpi],[enable MPI parallelization])],          enable_mpi=$enableval,   enable_mpi=no)
+
+
+
+################################################################
+# 5. Checks for programs, including ${CC} and its ${CFLAGS}
+################################################################
+
+AC_PROG_CC
+AC_PROG_INSTALL
+# MPI :  set @CC@ to mpicc;
+#        set @MPILIBS@ if needed (usually not; mpicc deals w/ it);
+#        defines HAVE_MPI. 
+if test "$enable_mpi" = "yes"; then
+   ACX_MPI(,AC_MSG_ERROR([MPI library not found for --enable-mpi]))
+   CC=$MPICC
+fi
+AC_PROG_CPP
+
+# AC_PROG_CC_STDC wants to append -c99 to icc; icc doesn't like this.
+# To autodetect icc, we use the AX_COMPILER_VENDOR macro.
+AX_COMPILER_VENDOR
+if test "$ax_cv_c_compiler_vendor" != "intel"; then
+  AC_PROG_CC_STDC
+fi
+
+AC_PROG_RANLIB
+AC_PATH_PROG([AR],       [ar],       [:], [$PATH:/usr/ccs/bin:/usr/xpg4/bin])
+
+# CHECK_GNU_MAKE sets EXEC_DEPENDENCY for SYSV vs. GNU make,
+# to support Makefile lines of ${PROGS}: ${EXEC_DEPENDENCY}
+CHECK_GNU_MAKE
+
+# --enable-xlc-arch  Set the code generation for a particular architecture
+#
+# The xlc compiler on AIX seems to need the -qarch flag to be set for a processor
+# that is VMX enabled.  Otherwise a warning is issued that states the -qenablevmx
+# and -qaltivec flags are ignored.
+if test "${ax_cv_c_compiler_vendor}" = "ibm"; then
+  AC_ARG_WITH(xlc-arch, 
+              [AC_HELP_STRING([--with-xlc-arch=<arch>], [specify architecture <arch> for xlc -qarch])],
+              XLC_ARCH=$withval, 
+              XLC_ARCH=no)
+fi
+
+# Select our default optimization flags in CFLAGS.
+#  --enable-gcov, --enable-gprof, and --enable-debugging are mutually exclusive.
+#
+if test "$enable_gcov" = "yes"; then
+   if test "$sre_cflags_env_set" = "yes"; then 
+     AC_MSG_ERROR([--enable-gcov overrides CFLAGS, so don't set CFLAGS])
+   fi
+   CFLAGS="-g -Wall -fprofile-arcs -ftest-coverage"
+elif test "$enable_gprof" = "yes"; then
+   if test "$sre_cflags_env_set" = "yes"; then 
+     AC_MSG_ERROR([--enable-gprof overrides CFLAGS, so don't set CFLAGS])
+   fi
+   CFLAGS="-O -g -pg"
+elif test "$enable_debugging" != "no"; then
+   if test "$GCC" = "yes"; then
+      CFLAGS="-g -Wall"
+   fi
+else
+   CFLAGS="-O3"
+fi
+
+
+# Figure out how to generate PIC code for shared libraries
+# This sets @PIC_FLAGS@ output variable
+ESL_PIC_FLAGS
+
+
+# SSE: figure out our @SIMD_CFLAGS@, define HAVE_SSE2
+# The AC_RUN_IFELSE() is there because it's possible to have 
+# hardware that doesn't support SSE2 instructions, yet the
+# compiler can generate them: example AMD Athlons with gcc.
+# So we need to test that an SSE2 program actually runs without
+# generating an "illegal instruction" error. The program
+# here is sufficient [xref J3/127].
+# Note: some platforms (Ubuntu 32-bit for example) absolutely
+# must have the -msse2 cflag on in order to detect a working
+# emmintrin.h, so we set SIMD_CFLAGS before running the test.
+if test "$enable_sse" = "yes" || test "$enable_sse" = "check"; then
+   if test "x$SIMD_CFLAGS" = x; then
+     case $ax_cv_c_compiler_vendor in
+       gnu)   AX_CHECK_COMPILER_FLAGS(-msse2,[SIMD_CFLAGS="-msse2"],[]);;
+       *)     ;;
+     esac   
+   fi
+fi
+if test "$enable_sse" = "check" && test "$enable_vmx" != "yes"; then
+   sre_save_CFLAGS="$CFLAGS"
+   sre_save_CPPFLAGS="$CPPFLAGS"
+   CFLAGS="$CFLAGS $SIMD_CFLAGS"
+   CPPFLAGS="$CPPFLAGS $SIMD_CFLAGS"
+   AC_CHECK_HEADER([emmintrin.h],[
+     AC_MSG_CHECKING([if platform can run SSE/SSE2 instructions])
+     AC_RUN_IFELSE([AC_LANG_PROGRAM( [[#include <emmintrin.h>]],
+		                      [[__m128i v = _mm_set1_epi8(0);]])],
+                   [AC_MSG_RESULT([yes])
+                     enable_sse=yes],
+                   [AC_MSG_RESULT([no])])])
+   CFLAGS="$sre_save_CFLAGS"
+   CPPFLAGS="$sre_save_CPPFLAGS"
+fi
+if test "$enable_sse" = "yes"; then
+   AC_DEFINE(HAVE_SSE2,1,[Support SSE2 (Streaming SIMD Extensions 2) instructions])
+fi
+
+
+# VMX/Altivec (not autodetected yet; must use --enable-vmx to enable)
+if test "$enable_sse" != "yes"; then
+  if test "x$SIMD_CFLAGS" = x; then
+    VMX_SIMD_CFLAGS=""
+    if test "$GCC" = "yes"; then
+       AX_CHECK_COMPILER_FLAGS(-faltivec, [VMX_SIMD_CFLAGS="-faltivec"],
+         [AX_CHECK_COMPILER_FLAGS(-maltivec -mabi=altivec,
+ 	     [VMX_SIMD_CFLAGS="-maltivec -mabi=altivec"],
+             [AX_CHECK_COMPILER_FLAGS(-fvec, [VMX_SIMD_CFLAGS="-fvec"],
+		     [AC_MSG_ERROR([Need a version of gcc with -maltivec])])])])
+    elif test "${ax_cv_c_compiler_vendor}" = "ibm"; then
+       AX_CHECK_COMPILER_FLAGS(-qenablevmx, [VMX_SIMD_CFLAGS="$VMX_SIMD_CFLAGS -qenablevmx"],[])
+       AX_CHECK_COMPILER_FLAGS(-qaltivec,   [VMX_SIMD_CFLAGS="$VMX_SIMD_CFLAGS -qaltivec"],[])
+    else
+       AX_CHECK_COMPILER_FLAGS(-faltivec, [VMX_SIMD_CFLAGS="-faltivec"],[])
+    fi
+  else
+    VMX_SIMD_CFLAGS="$SIMD_CFLAGS"
+  fi
+  if test "$enable_vmx" = "check"; then
+     sre_save_cflags="$CFLAGS"
+     CFLAGS="$CFLAGS $VMX_SIMD_CFLAGS"
+     AC_MSG_CHECKING([if platform can run Altivec/VMX instructions])
+     AC_RUN_IFELSE([AC_LANG_PROGRAM( [[#include <altivec.h>]],
+   	 			   [[vector unsigned char zerov;
+                                     vector unsigned char onev;
+                                     zerov = vec_splat_u8(0);
+                                     onev = vec_splat_u8(1);
+                                     onev = vec_adds(onev, zerov);
+				   ]])],
+                     [AC_MSG_RESULT([yes])
+                       enable_vmx=yes],
+                     [AC_MSG_RESULT([no])
+                        if test "${ax_cv_c_compiler_vendor}" = "ibm"; then
+                           echo "******************************************************"
+                           echo "*  You seem to have the IBM  C compiler.  If your    *"
+                           echo "*  processor supports vector instructions it is      *"
+                           echo "*  possible specifying an architecture would enable  *"
+                           echo "*  vector support, i.e.                              *"
+                           echo "*                                                    *"
+                           echo "*    --with-xlc-arch=XXX                             *"
+                           echo "*                                                    *"
+                           echo "*  where XXX is pwr6, auto or whatever kind of CPU   *"
+                           echo "*  you have.                                         *"
+                           echo "******************************************************"
+                        fi
+                   ])
+     CFLAGS="$sre_save_cflags"
+  fi
+  if test "$enable_vmx" = "yes"; then
+    SIMD_CFLAGS="$VMX_SIMD_CFLAGS"
+    AC_DEFINE(HAVE_VMX,1,[Support Altivec/VMX vector instructions])
+  fi
+fi
+
+AC_SUBST(SIMD_CFLAGS)
+
+# Define HAVE_GZIP if gzip is in $PATH (or if HAVE_GZIP is already set)
+AC_PATH_PROG(HAVE_GZIP, "gzip", "no")
+if test "${HAVE_GZIP}" = "no"; then
+  AC_MSG_WARN([gzip not found])
+else
+  AC_DEFINE(HAVE_GZIP)
+fi
+
+
+################################################################
+# 6. Checks for libraries
+#################################################################
+LIBGSL=
+AS_IF([test "x$with_gsl" != xno],
+      [AC_CHECK_LIB([gsl], [gsl_expm1], 
+           [AC_SUBST([LIBGSL], ["-lgsl -lgslcblas"])
+            AC_DEFINE([HAVE_LIBGSL], [1], [Define if you have libgsl])
+           ],
+           [if test "x$with_gsl" != xcheck; then
+             AC_MSG_FAILURE(
+               [--with-gsl was given, but GSL library was not found])
+            fi
+           ],
+           [-lgslcblas]
+        )])
+
+
+# Easel stopwatch high-res timer may try to use clock_gettime,
+# which may be in librt
+AC_SEARCH_LIBS(clock_gettime, [rt posix4])
+
+
+################################################################
+# 7. Checks for headers
+################################################################
+#    Defines preprocessor symbols like HAVE_UNISTD_H
+AC_CHECK_HEADERS([\
+  endian.h \
+  inttypes.h \
+  stdint.h \
+  unistd.h \
+  sys/types.h \
+  strings.h \
+])
+
+# Check for sysctl.h separately.  On OpenBSD, it requires
+# <sys/param.h> and autoconf needs special logic to deal w. this as
+# follows.
+AC_CHECK_HEADERS([sys/param.h])
+AC_CHECK_HEADERS([sys/sysctl.h], [], [], 
+[[#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+]])
+
+# Vector-specific headers. 
+# Separated, because we may want to implement
+# other vector languages besides SSE
+# For SSE:
+#  xmmintrin.h = SSE
+#  emmintrin.h = SSE2
+#  pmmintrin.h = SSE3
+AC_CHECK_HEADERS([\
+  emmintrin.h\
+  pmmintrin.h\
+  xmmintrin.h
+])
+
+# altivec.h requires the simd cflags
+# For reasons I don't understand, this needs to come after any other CHECK_HEADERS().
+if test "$enable_vmx" = "yes"; then
+   sre_save_CFLAGS="$CFLAGS"
+   sre_save_CPPFLAGS="$CPPFLAGS"
+   CFLAGS="$CFLAGS $SIMD_CFLAGS"
+   CPPFLAGS="$CPPFLAGS $SIMD_CFLAGS"
+   AC_CHECK_HEADERS([altivec.h])
+   CFLAGS="$sre_save_CFLAGS"
+   CPPFLAGS="$sre_save_CPPFLAGS"
+fi
+
+
+################################################################
+# 8. Checks for types
+################################################################
+#    - Define WORDS_BIGENDIAN on bigendian platforms.
+#    - Make sure we have C99 exact-size integer types; 
+#      ssi uses 16, 32, and 64-bit ints, and we
+#      use 8-bit unsigned chars for digitized sequence.
+#    - Make sure we have off_t.
+#
+AC_C_BIGENDIAN
+AC_TYPE_INT8_T
+AC_TYPE_INT16_T
+AC_TYPE_INT32_T
+AC_TYPE_INT64_T
+AC_TYPE_UINT8_T
+AC_TYPE_UINT16_T
+AC_TYPE_UINT32_T
+AC_TYPE_UINT64_T
+AC_TYPE_OFF_T
+
+################################################################
+# 9. Checks for structures - currently none
+#################################################################
+
+
+################################################################
+# 10. Checks for compiler characteristics
+#################################################################
+
+# __attribute__() tags on function declarations
+# HAVE_FUNC_ATTRIBUTE_NORETURN 
+#
+#   The clang static analyzer can't figure out that some of our
+#   varargs-dependent fatal error handlers (esl_fatal(), for example)
+#   cannot return. To tell it so, we take advantage of __attribute__
+#   tags on function declarations, a non-ISO gcc extension, when
+#   available. gcc, clang, and other gcc-like compilers support this.
+# 
+AX_GCC_FUNC_ATTRIBUTE(noreturn)
+
+
+
+################################################################
+# 11. Checks for library functions: define HAVE_FOO
+################################################################
+
+AC_CHECK_FUNCS(mkstemp)
+AC_CHECK_FUNCS(popen)
+AC_CHECK_FUNCS(putenv)
+AC_CHECK_FUNCS(strcasecmp)
+AC_CHECK_FUNCS(times)
+AC_CHECK_FUNCS(getpid)
+AC_CHECK_FUNCS(sysctl)
+AC_CHECK_FUNCS(sysconf)
+AC_CHECK_FUNCS(getcwd)
+AC_CHECK_FUNCS(chmod)
+AC_CHECK_FUNCS(stat)
+AC_CHECK_FUNCS(fstat)
+AC_CHECK_FUNCS(erfc)
+
+AC_CHECK_FUNCS(ntohs, , AC_CHECK_LIB(socket, ntohs))
+AC_CHECK_FUNCS(ntohl, , AC_CHECK_LIB(socket, ntohl))
+AC_CHECK_FUNCS(htons, , AC_CHECK_LIB(socket, htons))
+AC_CHECK_FUNCS(htonl, , AC_CHECK_LIB(socket, htonl))
+AC_FUNC_FSEEKO
+
+#################################################################
+# 12. System services
+#################################################################
+AC_SYS_LARGEFILE
+
+#################################################################
+# 13. Write out esl_config.h header and the Makefiles
+#################################################################
+AC_CONFIG_HEADERS([esl_config.h])
+AC_CONFIG_FILES([miniapps/Makefile])
+AC_CONFIG_FILES([testsuite/Makefile])
+AC_CONFIG_FILES([Makefile])
+if test -e "LICENSE.sh.in"; then
+  AC_CONFIG_FILES(LICENSE.sh)
+fi
+AC_CONFIG_FILES([documentation/Makefile])
+
+
+#################################################################
+# 14. et voila!
+#################################################################
+AC_OUTPUT
+
+
+echo "
+
+Easel configuration:
+
+     compiler:    ${CC} ${CFLAGS} ${SIMD_CFLAGS} ${PTHREAD_CFLAGS} ${PIC_FLAGS}
+     host:        $host
+     libraries:   ${LIBS} ${LIBGSL} ${PTHREAD_LIBS}
+"
+
+
+#################################################################
+# @LICENSE@
+# 
+# SVN $Id$
+# SVN $URL$
+#################################################################
diff --git a/demotic/00README b/demotic/00README
new file mode 100644
index 0000000..f844d2e
--- /dev/null
+++ b/demotic/00README
@@ -0,0 +1,101 @@
+demotic is a set of Perl modules for interfacing the hieroglyphic
+output of one program with the greek input of another program.
+
+original:   SRE, Wed Oct 25 16:32:09 2000
+into Easel: SRE, Fri Apr 16 16:10:25 2010
+SVN $Id$
+
+  demotic_blast.pm   NCBI blastp; NCBI blastpgp; WU blastp
+  demotic_fasta.pm   fasta; ssearch
+  demotic_hmmer.pm   hmmsearch, phmmer
+  demotic_h2.pm      HMMER 2.0 hmmsearch
+
+  blast2profmark
+  fasta2profmark
+  hmmer2profmark
+  h22profmark
+
+  blast2tbl
+  fasta2tbl
+  hmmer2tbl
+  h22tbl
+
+  test.pl         : example of using demotic_blast "in line" in a perl script.
+
+################################################################
+# Generating the example outputs
+
+# Config that's already in my .bashrc:
+  export SWISS=/misc/data0/databases/Uniprot/uniprot_sprot.fasta
+  export SWISS-WU=/misc/data0/databases/Uniprot/uniprot_sprot_wu.fasta
+  export PFAM_HMM=/misc/data0/databases/Pfam/Pfam-A.hmm
+  export PFAM_SEED=/misc/data0/databases/Pfam/Pfam-A.seed
+  export PFAM_FULL=/misc/data0/databases/Pfam/Pfam-A.full
+  export PERLLIB=.:${HOME}/sw/scripts
+
+# Most examples
+  esl-seqstat -a $SWISS | awk '{print $2}' | esl-selectn 2 - | esl-sfetch -f $SWISS - > examples/example.fa
+  grep -v "^#" /misc/data0/databases/pfam/pfam-24.0/Pfam-A.hmm.stat   | awk '{print $2}' | esl-selectn 2 - | hmmfetch -f /misc/data0/databases/pfam/pfam-24.0/Pfam-A.hmm - > examples/example.hmm
+
+# PSIBLAST example takes some massaging, because of the way we convert Stockholm to a checkpoint .asnt file.
+  grep -v "^#" /misc/data0/databases/pfam/pfam-24.0/Pfam-A.seed.stat  | awk '{print $2}' | esl-selectn 1 - | esl-afetch -f /misc/data0/databases/pfam/pfam-24.0/Pfam-A.seed - > examples/example-single.sto
+  esl-reformat -o examples/example-single.pbl psiblast examples/example-single.sto
+  esl-seqstat -a examples/example-single.sto | grep "^=" | awk '{print $2}' | esl-selectn 1 - | esl-sfetch -f examples/example-single.sto -
+  esl-seqstat -a examples/example-single.sto | grep "^=" | awk '{print $2}' | esl-selectn 1 - | esl-sfetch -f examples/example-single.sto - > examples/example-single-psiquery.fa
+  esl-reformat -o examples/example-single.fa fasta examples/example-single.sto
+  formatdb -i examples/example-single.fa
+  blastpgp -v 9999 -F T -u 1 -j 5 -J TRUE -d examples/example-single.fasta -i examples/example-single-psiquery.fa -C examples/example-single.asnt
+
+# H2 example also is a little special; build new from Stockholm, plus H2 hmmsearch can only do a single query.
+  grep -v "^#" /misc/data0/databases/pfam/pfam-24.0/Pfam-A.seed.stat  | awk '{print $2}' | esl-selectn 1 - | esl-afetch -f /misc/data0/databases/pfam/pfam-24.0/Pfam-A.seed - > examples/example.sto
+  ~/releases/hmmer-2.3.2/src/hmmbuild examples/example.hmm2 examples/example.sto 
+  ~/releases/hmmer-2.3.2/src/hmmcalibrate examples/example.hmm2 
+
+  blastp $SWISS_WU examples/example.fa                                      > examples/example.wu-blastp.out
+  blastall -p blastp -i examples/example.fa -d $SWISS                       > examples/example.ncbi-blastp.out
+  /usr/local/fasta-36x2/bin/ssearch36_t -q examples/example.fa $SWISS       > examples/example.ssearch.out
+  /usr/local/fasta-36x2/bin/fasta36_t   -q examples/example.fa $SWISS       > examples/example.fasta.out
+  phmmer    examples/example.fa  $SWISS                                     > examples/example.phmmer.out
+  hmmsearch examples/example.hmm $SWISS                                     > examples/example.hmmsearch.out
+  ~/releases/hmmer-2.3.2/src/hmmsearch examples/example.hmm2  $SWISS        > examples/example.h2.out
+  blastpgp -v 9999 -F F -q 1 -t 1 -d $SWISS -R examples/example-single.asnt > examples/example.psiblast.out
+
+################################################################
+# Save outputs for regression
+
+  pfx=regress
+  mkdir $pfx
+  cat examples/example.wu-blastp.out   |  ./blast2profmark > $pfx/wu-blastp-profmark.out
+  cat examples/example.ncbi-blastp.out |  ./blast2profmark > $pfx/ncbi-blastp-profmark.out
+  cat examples/example.psiblast.out    |  ./blast2profmark > $pfx/psiblast-profmark.out
+  cat examples/example.ssearch.out     |  ./fasta2profmark > $pfx/ssearch-profmark.out
+  cat examples/example.fasta.out       |  ./fasta2profmark > $pfx/fasta-profmark.out
+  cat examples/example.phmmer.out      |  ./hmmer2profmark > $pfx/phmmer-profmark.out
+  cat examples/example.hmmsearch.out   |  ./hmmer2profmark > $pfx/hmmsearch-profmark.out
+  cat examples/example.h2.out          |  ./h22profmark    > $pfx/h2-profmark.out          
+
+  cat examples/example.wu-blastp.out   |  ./blast2tbl  > $pfx/wu-blastp-tbl.out	  
+  cat examples/example.ncbi-blastp.out |  ./blast2tbl  > $pfx/ncbi-blastp-tbl.out 
+  cat examples/example.psiblast.out    |  ./blast2tbl  > $pfx/psiblast-tbl.out	  
+  cat examples/example.ssearch.out     |  ./fasta2tbl  > $pfx/ssearch-tbl.out	  
+  cat examples/example.fasta.out       |  ./fasta2tbl  > $pfx/fasta-tbl.out	  
+  cat examples/example.phmmer.out      |  ./hmmer2tbl  > $pfx/phmmer-tbl.out	  
+  cat examples/example.hmmsearch.out   |  ./hmmer2tbl  > $pfx/hmmsearch-tbl.out	  
+  cat examples/example.h2.out          |  ./h22tbl     > $pfx/h2-tbl.out          
+
+################################################################
+# Regression test of outputs
+
+  pfx=tmp
+  mkdir $pfx
+# Run the same stuff as above
+
+  for prg in wu-blastp ncbi-blastp psiblast ssearch fasta phmmer hmmsearch h2 ; do 
+    diff --brief regress/$prg-profmark.out tmp/$prg-profmark.out
+    diff --brief  regress/$prg-tbl.out      tmp/$prg-tbl.out
+  done
+
+  rm -rf tmp
+
+
+  
\ No newline at end of file
diff --git a/demotic/blast2profmark b/demotic/blast2profmark
new file mode 100755
index 0000000..c4a087f
--- /dev/null
+++ b/demotic/blast2profmark
@@ -0,0 +1,10 @@
+#! /usr/bin/perl
+
+use demotic_blast;
+
+while (&demotic_blast::parse(\*STDIN))
+{
+    &demotic_blast::profmarkout(\*STDOUT);
+}
+
+
diff --git a/demotic/blast2tbl b/demotic/blast2tbl
new file mode 100755
index 0000000..eaea1e9
--- /dev/null
+++ b/demotic/blast2tbl
@@ -0,0 +1,10 @@
+#! /usr/bin/perl
+
+use demotic_blast;
+
+while (&demotic_blast::parse(\*STDIN))
+{
+    &demotic_blast::tblout(\*STDOUT);
+}
+
+
diff --git a/demotic/demotic_blast.pm b/demotic/demotic_blast.pm
new file mode 100644
index 0000000..b4a0a5c
--- /dev/null
+++ b/demotic/demotic_blast.pm
@@ -0,0 +1,286 @@
+############################################################################
+# demotic_blast package   
+#    Parses blast output, stores extracted information in convenient vars.
+#    Works for both WU-BLAST and NCBI BLAST output files,
+#    and for PSIBLAST runs from checkpoint files (as I use in profmark).
+#    (SRE originated, 10/2000)
+#
+# SVN $Id$
+############################################################################
+
+package demotic_blast;
+
+# parse(\*STDIN) would parse BLAST output
+# coming in via stdin.
+#
+sub parse (*) {
+    my $fh = shift;
+    my $parsing_header  = 1;
+    my $parsing_hitlist = 0;
+    my $parsing_alilist = 0;
+    my $is_wublast      = 0;
+    my $target;
+    my $firstchunk;
+
+    # Initialize everything... so we can call the parser
+    # repeatedly, one call per BLAST output.
+    #
+    # This section also documents what's available in
+    # variables within the package.
+    # 
+    # Arrays are indexed [0..nhits-1] or [0..nali-1]
+    #
+    $queryname      = "";	# Name of the query sequence
+    $querydesc      = "";	# Description line for the query (or "")
+    $querylen       = 0;	# Length of the query in residues
+    $db             = "";	# Name of the target database file
+    $db_nseq        = 0;	# Number of sequences in the target database
+    $db_nletters    = "";	# Number of residues in the target database
+                                # (stored as a string so we can have large #'s)
+
+				# The top hit list (still in rank order)
+    $nhits          = 0;	# Number of entries in the hit list
+    @hit_target     = ();	# Target sequence name (by rank)
+    %target_desc    = ();	# Target sequence description (by targ name)
+    @hit_bitscore   = ();	# Raw score (by rank)
+    @hit_Eval       = ();	# E-val (by rank)
+
+				# The alignment output (in order it came in)
+				# all indexed by # of alignment [0..nali-1]
+    $nali           = 0;	# Number of alignments
+    @ali_target     = ();	# Target sequence name
+    @ali_score      = ();	# Raw score of alignment
+    @ali_bitscore   = ();	# bit score
+    @ali_evalue     = ();	# E-value
+    @ali_pvalue     = ();	# P-value
+    @ali_nident     = ();	# Number of identical residues
+    @ali_alen       = ();	# Length of alignment
+    @ali_identity   = ();	# Percent identity
+    @ali_npos       = ();       # Number of positives (similar positions)
+    @ali_positive   = ();       # Percent of positions matched or similar
+    @ali_qstart     = ();	# Start position on query
+    @ali_qend       = ();	# End position on query
+    @ali_tstart     = ();	# Start position on target
+    @ali_tend       = ();	# End position on target
+    @ali_qali       = ();       # Aligned string from query
+    @ali_tali       = ();       # Aligned string from target (subject)
+    @ali_hitidx     = ();       # index of hit 
+    $hitidx = -1;
+    
+    # Now, loop over the lines of our input, and parse 'em.
+    #
+    while (<$fh>) {
+	if ($parsing_header) {
+	    if (/^\s*\*+ No hits found \*+\s*$/) { return 1; }
+
+	    if (/^Sequences producing /) { # wu and ncbi share this
+		$parsing_header  = 0;
+		$parsing_hitlist = 1;
+		<$fh>;		# This discards the next (blank) line (ncbi, wu)
+		next;
+	    } elsif (/^Query=\s*(\S*)\s*(.*)\s*$/) { # allows blank query
+		$queryname = $1;
+		$querydesc = $2; chomp $querydesc;
+		if ($queryname eq "") { 
+		    $queryname = "unnamed_query";
+		}
+		while (1) {
+		    $_ = <$fh>; # perl quirk: unless part of a while()
+		                # loop, line must be explicitly assigned  
+                                # to $_ or else it will be lost.
+		    if    (/^\s+\((\S+) letters/) { $querylen  = $1; last; } 
+		    elsif (/^Length=(\d+)/)       { $querylen  = $1; last; } # NCBI 
+		    elsif (/^\s*( .+)\s*$/)       { $querydesc .= $1; chomp $querydesc; }
+		}
+	    } elsif (/^Database:\s*(.+)\s*$/) {
+		$db  = $1;
+		$_ = <$fh>;
+		if (/^\s+(\S+) sequences; (\S+) total letters/) {
+		    $db_nseq     = $1; 
+		    $db_nletters = $2; 
+		    $db_nseq     =~ s/,//g; 
+		    $db_nletters =~ s/,//g;
+		}
+	    } elsif (/^Copyright.+Washington University/) {
+		$is_wublast = 1;
+	    }
+	} 
+	elsif ($parsing_hitlist) {
+            # WUBLAST: Sequences producing High-scoring Segment Pairs:              Score  P(N)      N
+            #          2-Hacid_dh/1/17-338/439-757 domains: PTXD_PSEST/5-326 O28...   299  4.7e-27   1
+            # NCBI+:   Sequences producing significant alignments:                          (Bits)  Value
+            #              2-Hacid_dh/4/753-1076/1224-1507 domains: Q20595_CAEEL/181-504 P...  95.1    4e-20
+            # NCBI:    Sequences producing significant alignments:                      (bits) Value
+            #          2-Hacid_dh/4/753-1076/1224-1507 domains: Q20595_CAEEL/181-504 PD...    95   4e-20
+            # In NCBI E-values, beware "e-xxx" without any leading number.
+	    # In NCBI+, beware bit scores can now be real numbers, not just integers.
+            #
+	    if (/^\s*$/) { 
+		$parsing_hitlist = 0;
+		$parsing_alilist = 1;
+		next;
+	    }
+	    elsif ((  $is_wublast && /^\s*(\S+)\s+(.+)\s+(\d+)\s+(\S+)\s+\d+\s*$/) ||
+                   (! $is_wublast && /^\s*(\S+)\s+(.+)\s+(\S+)\s+(\S+)\s*$/))
+	    {
+		$hit_target[$nhits]    = $1;
+		$target_desc{$1}       = $2;
+		$hit_bitscore[$nhits]  = $3;
+
+		if ($is_wublast) { $hit_Eval[$nhits] = $4; } # actually WU reports P-value
+		else             { $hit_Eval[$nhits] = &repair_evalue($4); }
+
+		$nhits++;
+	    }
+	}
+	elsif ($parsing_alilist) {
+	    if (/^>\s*(\S+)\s*(.*)$/) {
+		$target = $1;
+		$hitidx ++;
+		$target_desc{$target} = $2;
+
+		$_ = <$fh>; 
+		if (/^\s+Length = (\S+)/) { 
+		    $target_len{$target} = $1;
+		} 
+	    } 
+	    elsif (/^ Score =\s+(\d+) \((\S+) bits\), Expect\s+=\s+(\S+), /) { # WU
+		$nali++;
+		$ali_target[$nali-1]   = $target;
+		$ali_score[$nali-1]    = $1;
+		$ali_bitscore[$nali-1] = $2;
+		$ali_evalue[$nali-1]   = $3;
+		$ali_hitidx[$nali-1]   = $hitidx;
+	    } 
+	    elsif (/^ Score =\s+(\S+) bits \((\S+)\),\s*Expect\s+=\s+(\S+), /) { # NCBI
+		$nali++;
+		$ali_target[$nali-1]   = $target;
+		$ali_bitscore[$nali-1] = $1;
+		$ali_score[$nali-1]    = $2;
+		$ali_evalue[$nali-1]   = &repair_evalue($3);
+		$ali_hitidx[$nali-1]   = $hitidx;
+	    }
+	    elsif (/^ Identities = (\d+)\/(\d+) \((\d+)%\).+Positives = (\d+).+\((\d+)%/) { # NCBI or WU
+		$ali_nident[$nali-1]     = $1;
+		$ali_alen[$nali-1]       = $2;
+		$ali_identity[$nali-1]   = $3;
+		$ali_npos[$nali-1]       = $4;
+		$ali_positive[$nali-1]   = $5;
+		$ali_hitidx[$nali-1]     = $hitidx;
+		$firstchunk = 1;
+	    } 
+	    elsif (/^ Identities = (\d+)\/(\d+) \((\d+)%\).+/) { # NCBI megablast : no Positives
+		$ali_nident[$nali-1]     = $1;
+		$ali_alen[$nali-1]       = $2;
+		$ali_identity[$nali-1]   = $3;
+		$ali_npos[$nali-1]       = $1;
+		$ali_positive[$nali-1]   = $3;
+		$ali_hitidx[$nali-1]     = $hitidx;
+		$firstchunk = 1;
+	    }		
+	    elsif (/^Query:?\s+(\d+)\s+(\S+)\s+(\d+)\s*$/) {
+		if ($firstchunk) { $ali_qstart[$nali-1] = $1; }
+		$ali_qali[$nali-1]  .= $2;
+		$ali_qend[$nali-1]   = $3;
+	    } 
+	    elsif (/^Sbjct:?\s+(\d+)\s+(\S+)\s+(\d+)\s*$/) {
+		if ($firstchunk) { $ali_tstart[$nali-1] = $1; }
+		$ali_tali[$nali-1]  .= $2;
+		$ali_tend[$nali-1]   = $3;
+		$firstchunk = 0;
+	    }
+
+	    elsif (/^BLAST/) {	return 1; } # normal return; output from a new query is starting
+	    elsif (/^Effective search space used:/) { return 1; } #normal end of query for NCBI BLAST+
+
+	}
+    } # this closes the loop over lines in the input stream.
+
+    if ($parsing_alilist) { return 1; } else { return 0; }
+}
+
+
+# NCBI BLAST now has a nasty habit of abbreviating
+# 1e-100 as e-100, which isn't a number format. 
+
+sub repair_evalue
+{
+    my $value = shift;
+    if ($value =~ /^e-\d+$/) { $value = "1$value"; }
+    $value;
+}
+
+
+sub exblxout {
+    my $ofh     = shift;
+    my $i;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\n",
+	$ali_evalue[$i],
+	$ali_identity[$i],
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_target[$i],
+	$ali_qstart[$i],
+	$ali_qend[$i],
+	$queryname;
+    }
+    
+}
+
+
+sub tblout {
+    my $ofh     = shift;
+    my $i;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\t%s\n",
+	$ali_evalue[$i],
+	$ali_identity[$i],
+	$ali_qstart[$i],
+	$ali_qend[$i],
+	$queryname,
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_target[$i],
+	$target_desc{$ali_target[$i]};
+    }
+}    
+
+
+sub gffout {
+    my $ofh     = shift;
+    my $source  = shift;
+    my $feature = shift;
+    my $i;
+    my $strand;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	if ($ali_qstart[$i] > $ali_qend[$i]) { $strand = "-"; }
+	else { $strand = "+"; } 
+
+	printf $ofh "%s\t%s\t%s\t%d\t%d\t%.1f\t%s\t.\tgene \"%s\"\n",
+	$ali_target[$i],
+	$source,
+	$feature,
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_bitscore[$i],
+	$strand,
+	$queryname;
+    }
+}
+
+sub profmarkout {
+    my $ofh = shift;
+    my $i;
+
+    for ($i = 0; $i < $nhits; $i++) {
+        printf $ofh "%g\t%.1f\t%s\t%s\n", $hit_Eval[$i], $hit_bitscore[$i], $hit_target[$i], $queryname;
+    }
+}
+
+
+1;
+__END__
diff --git a/demotic/demotic_fasta.pm b/demotic/demotic_fasta.pm
new file mode 100644
index 0000000..f3f5b3d
--- /dev/null
+++ b/demotic/demotic_fasta.pm
@@ -0,0 +1,384 @@
+############################################################################
+# demotic_fasta package   
+#    Parses fasta or ssearch output, stores extracted information in convenient vars.
+#    SRE, Wed Jun 25 13:41:41 2003
+#
+#  SVN $Id$
+############################################################################
+
+package demotic_fasta;
+
+# parse(\*STDIN) would parse ssearch output
+# coming in via stdin.
+#
+sub parse (*) {
+    my $fh = shift;
+    my $parsing_header  = 1;
+    my $parsing_hitlist = 0;
+    my $parsing_alilist = 0;
+    my $target;
+    my $alilinecount = 0;
+    my $prvaliline_isquery = 0;
+    my $ali_qline;
+    my $ali_tline;
+    my $ali_qasq;
+    my $ali_tasq;
+    my $margin;
+
+    # Initialize everything... so we can call the parser
+    # repeatedly, one call per ssearch output.
+    #
+    # This section also documents what's available in
+    # variables within the package.
+    # 
+    # Arrays are indexed [0..nhits-1] or [0..nali-1]
+    #
+    $queryname      = "";	# Name of the query sequence
+    $querydesc      = "";	# Description line for the query (or "")
+    $querylen       = 0;	# Length of the query in residues
+    $db             = "";	# Name of the target database file
+    $db_nseq        = 0;	# Number of sequences in the target database
+    $db_nletters    = "";	# Number of residues in the target database
+                                # (stored as a string so we can have large #'s)
+
+				# The top hit list (still in rank order)
+    $nhits          = 0;	# Number of entries in the hit list
+    @hit_target     = ();	# Target sequence name (by rank)
+    %target_desc    = ();	# Target sequence description (by targ name)
+    %target_len     = ();	# Length of target sequence
+    @hit_score      = ();	# Raw score (by rank)
+    @hit_bitscore   = ();	# Bit score (by rank)
+    @hit_Eval       = ();	# E-value (by rank)
+
+				# The alignment output (in order it came in)
+				# all indexed by # of alignment [0..nali-1]
+    $nali           = 0;	# Number of alignments
+    @ali_target     = ();	# Target sequence name
+    @ali_score      = ();	# Smith/Waterman raw score of alignment
+    @ali_bitscore   = ();	# bit score
+    @ali_evalue     = ();	# E-value
+    @ali_nident     = ();	# Number of identical residues
+    @ali_alen       = ();	# Length of alignment (overlap)
+    @ali_identity   = ();	# Percent identity
+#    @ali_npos       = (); # Number of positives (similar positions)
+#    @ali_positive   = (); # Percent of positions matched or similar
+    @ali_qstart     = ();	# Start position on query
+    @ali_qend       = ();	# End position on query
+    @ali_tstart     = ();	# Start position on target
+    @ali_tend       = ();	# End position on target
+    @ali_qali       = (); # Aligned string from query
+    @ali_tali       = (); # Aligned string from target (subject)
+    @ali_qmask      = (); # line in between the two aligned strings
+    @ali_tmask      = (); # line in between the two aligned strings
+    @ali_hitidx     = ();       # index of hit 
+    $hitidx = -1;
+
+    if (defined($save_querycount) && $save_querycount > 1) { # on subsequent queries, we had to use the >>> start line to detect
+	# the end of the prev query; we socked the necessary info away in tmp vars.
+	$querycount = $save_querycount;
+	$queryname  = $save_queryname;
+	$querydesc  = $save_querydesc;
+	$querylen   = $save_querylen;
+    }
+
+    # Now, loop over the lines of our input, and parse 'em.
+    #
+    my $line;
+    my $prvline;
+    while (<$fh>) {
+	$line = $_;
+	if ($parsing_header) {
+	    if (/^The best scores are:/) { # start of hit list
+		$parsing_header  = 0;
+		$parsing_hitlist = 1;
+		next;
+	    } elsif (/^!! No sequences/) { # no hit list: no hits; just return
+		return 1;	# return "success"
+	    } elsif (/^\s+(\d+)>>>\s*(\S*)\s*(.*)\s*-\s*(\d+) \S\S$/) { # allows blank query. \S\S is "nt" or "aa"
+		$querycount = $1;
+		$queryname  = $2;
+		$querydesc  = $3;
+		$querylen   = $4;
+		if ($queryname eq "") { 
+		    $queryname = "unnamed_query";
+		}
+	    } elsif (/^\s+(\d+)\s+residues in\s+(\d+)\s+sequences\s*$/) {
+		$db_nletters = $1;
+		$db_nseq     = $2;
+	    }
+	} 
+	elsif ($parsing_hitlist) {
+	    if (/^\s*$/) {	# blank line marks end of hit list, start of alignments
+		$parsing_hitlist = 0;
+		$parsing_alilist = 1;
+		next;
+	    } elsif (/^(\S+)\s*(.*\S?)\s*\(\s*(\d+)\)\s+(\d+)\s+(\S+)\s+(\S+)\s*$/) {
+		$hit_target[$nhits]    = $1;
+		$target_desc{$1}       = $2;
+	        $target_len{$1}        = $3;
+		$hit_score[$nhits]     = $4;
+		$hit_bitscore[$nhits]  = $5;
+		$hit_Eval[$nhits]      = $6;
+		$nhits++;
+	    }
+	}
+	elsif ($parsing_alilist) {
+	    if (/^>>(\S+)\s*(.*)\s+\((\d+) \S\S\)\s*$/) {  # the \S\S is either nt or aa
+		$target = $1;
+		$hitidx ++;
+		$target_desc{$target} = $2;
+		if ($3 != $target_len{$target}) { die "can't happen.", "1)", $3, "2)", $target_len{$target}; }
+	    } 
+	    elsif (/^ s-w opt:\s+(\d+)\s+Z-score:\s*(\S+)\s+bits:\s+(\S+)\s+E\(\d*\):\s+(\S+)\s*$/) {  # SSEARCH
+		$nali++;
+		$ali_target[$nali-1]   = $target;
+		$ali_score[$nali-1]    = $1;
+		$ali_bitscore[$nali-1] = $3;
+		$ali_evalue[$nali-1]   = $4;
+		$ali_hitidx[$nali-1]   = $hitidx;
+	    } 
+	    elsif (/^ initn:\s*\d+\s*init1:\s*\d+\s*opt:\s*(\d+)\s*Z-score:\s*(\S+)\s*bits:\s*(\S+)\s*E\(\d*\):\s*(\S+)\s*$/) { # FASTA
+		$nali++;
+		$ali_target[$nali-1]   = $target;
+		$ali_score[$nali-1]    = $1;
+		$ali_bitscore[$nali-1] = $3;
+		$ali_evalue[$nali-1]   = $4;
+		$ali_hitidx[$nali-1]   = $hitidx;
+	    }		
+	    elsif (/^Smith-Waterman score:\s+(\d+);\s+(\S+)% identity .* in (\d+) \S\S overlap \((\d+)-(\d+):(\d+)-(\d+)\)\s*/) {
+		$ali_identity[$nali-1]   = $2;
+		$ali_alen[$nali-1]       = $3;
+		$ali_qstart[$nali-1]     = $4;
+		$ali_qend[$nali-1]       = $5;
+		$ali_tstart[$nali-1]     = $6;
+		$ali_tend[$nali-1]       = $7;
+#		$ali_nident[$nali-1]     = $1;
+#		$ali_npos[$nali-1]       = $4;
+#		$ali_positive[$nali-1]   = $5;
+		$alilinecount            = 0;
+		$ali_qali[$nali-1]       = ""; 
+		$ali_tali[$nali-1]       = ""; 
+		$ali_qmask[$nali-1]      = ""; 
+		$ali_tmask[$nali-1]      = ""; 
+	    } 
+	    elsif (/^(\S+)\s+(\S+)\s*$/) { # only ali lines are right-flushed
+		# the usual alignment display is
+		#       ali_query_line
+		#       mask
+		#       ali_target_line
+		#
+		# (1) ends are not flushed, and they can have "extra stuff"
+		#       function calculate_flushedmask() corrects that
+		#
+		# (2) alingments do not need to be complete. (particularly using option -a )
+		#     Meaning at the end AND at the beginning as well, you can end up with one single query line
+		#     or one single target line.
+		#
+		#     ali_query_line
+		#        (no mask)
+		#        (no ali_target_line)
+		#
+		# or 
+		#
+		#         (no ali_query_line)
+		#         (no mask)
+		#     ali_target_line
+		#
+		# or even
+		#
+		#     aliq_query_line
+		#        (no mask)
+		#     ali_target_Line
+		#
+		# why? oh! why? check for that and fix it.
+
+		my $name = $1;
+		my $asq  = $2;
+
+		#carefull, the alignment part, truncates the names of the query and targets
+		# this is a problem specially if the query and target names start similarly.
+		# it appears that querynames have been truncated to 5 characters and targetnames to 6
+		# also check for a prvline with numbers, but if len < 10 those do not show up either
+		if ($queryname =~ /^$name/ && (length($name) <= 5 || $prvline =~ /\s+(\d+)\s*/)) { 
+		    $prvaliline_isquery = 1;
+		    $ali_qline = $_; $ali_qline =~ s/\n//;
+		    $ali_qasq = $asq; 
+		    $mask = "";
+		}
+		elsif ($ali_target[$nali-1] =~ /^$name/) {
+		    $talilinecount ++;
+		    $ali_tline = $_; $ali_tline =~ s/\n//;
+		    $ali_tasq = $asq;
+		    if ($prvaliline_isquery) {
+			$ali_qali[$nali-1]  .= $ali_qasq; 
+			$ali_tali[$nali-1]  .= $ali_tasq; 
+			$ali_qmask[$nali-1] .= calculate_flushedmask($ali_qline, $mask);
+			$ali_tmask[$nali-1] .= calculate_flushedmask($ali_tline, $mask);
+		    }
+		    $prvaliline_isquery = 0;
+		}
+		$alilinecount++;
+	    }
+	    elsif (/^(\s*[\.\:][\s\.\:]*)$/) {
+		$mask .= $1;
+	    }
+
+	    elsif (/^\s+(\d+)>>>\s*(\S*)\s*(.*)\s*-\s*(\d+) \S\S$/) { # next query is starting. \S\S is "nt" or "aa"
+		$save_querycount = $1;
+		$save_queryname  = $2;
+		$save_querydesc  = $3;
+		$save_querylen   = $4;
+		if ($save_queryname eq "") { $save_queryname = "unnamed_query"; }
+		return 1;	# normal return. We've finished output for a query, and stored some info about the next one.
+	    }
+	}
+	$prvline = $line;
+    } # this closes the loop over lines in the input stream: at EOF.
+    
+    if ($parsing_alilist) { 
+	for (my $ali = 0; $ali < $nali; $ali ++) {
+	    # the ali lines come along with more residues that are not part of the alignment. Why? oh! why?. REMOVE
+	    # you cannot remove using ali_{q,t}start and $ali_{q,t}end because those are
+	    # relative to the full sequence. Need to do it by parsing also the line in between (what I call the "mask")
+	    # and finding the first and last ":" or "."
+	    $ali_qali[$ali] = ali_removeflanking($ali_qali[$ali], $ali_qmask[$ali], $ali_qstart[$ali], $ali_qend[$ali]);
+	    $ali_tali[$ali] = ali_removeflanking($ali_tali[$ali], $ali_tmask[$ali], $ali_tstart[$ali], $ali_tend[$ali]);
+	}
+	return 1; 
+    }
+    else { return 0; }  # at EOF: normal return if we were in the alignment section.
+}
+
+
+
+sub exblxout {
+    my $ofh     = shift;
+    my $i;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\n",
+	$ali_evalue[$i],
+	$ali_identity[$i],
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_target[$i],
+	$ali_qstart[$i],
+	$ali_qend[$i],
+	$queryname;
+    }
+}
+
+sub tblout {
+    my $ofh     = shift;
+    my $i;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\t%s\n",
+	$ali_evalue[$i],
+	$ali_identity[$i],
+	$ali_qstart[$i],
+	$ali_qend[$i],
+	$queryname,
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_target[$i],
+	$target_desc{$ali_target[$i]};
+    }
+}    
+
+
+sub gffout {
+    my $ofh     = shift;
+    my $source  = shift;
+    my $feature = shift;
+    my $i;
+    my $strand;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	if ($ali_qstart[$i] > $ali_qend[$i]) { $strand = "-"; }
+	else { $strand = "+"; } 
+
+	printf $ofh "%s\t%s\t%s\t%d\t%d\t%.1f\t%s\t.\tgene \"%s\"\n",
+	$ali_target[$i],
+	$source,
+	$feature,
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_bitscore[$i],
+	$strand,
+	$queryname;
+    }
+}
+
+sub profmarkout {
+    my $ofh = shift;
+    my $i;
+
+    for ($i = 0; $i < $nhits; $i++) {
+	printf $ofh "%g\t%.1f\t%s\t%s\n", $hit_Eval[$i], $hit_bitscore[$i], $hit_target[$i], $queryname;
+    }
+}
+
+sub calculate_flushedmask {
+    my ($asq, $mask) = @_;
+
+    my $lremove = -1;
+    my $flushedasq;
+
+    if ($asq =~ /^(\S+\s+)(\S+)\s*$/) { 
+	$lremove = length($1); 
+	$flushedasq = $2;
+    }
+   
+    my $flushedmask = $mask;
+    $flushedmask =~ s/^(.{$lremove})//;
+    $flushedmask =~ s/\n//;
+
+    if (length($flushedmask) > length($flushedasq)) {
+	while (length($flushedmask) > length($flushedasq)) { 
+	    if ($flushedmask =~ /(\s)$/) { $flushedmask =~ s/(\s)$//; } 
+	}
+    }
+    if (length($flushedmask) < length($flushedasq)) {
+	while (length($flushedmask) < length($flushedasq)) { $flushedmask .= " "; }
+    }
+
+    #printf("\naseq|$asq|\nmask|$mask|\n");
+    #printf("^^aseq|$flushedasq|\n^^mask|$flushedmask|\n");
+
+    return $flushedmask;
+}
+
+
+sub  ali_removeflanking {
+    my ($aseq, $mask) = @_;
+
+    my $taseq = "";
+
+    my $alen = length($aseq);
+    
+    my $apos_start = 0;
+    while ($apos_start < $alen) {
+	my $mval = substr($mask, $apos_start, 1);
+	if ($mval  =~ /[\.\:]/) { last; }
+	$apos_start ++;
+    }
+
+    my $apos_end = $alen-1;
+    while ($apos_end >= 0) {
+	my $mval = substr($mask, $apos_end, 1);
+	if ($mval  =~ /[\.\:]/) { last; }
+	$apos_end --;
+    }
+
+    for (my $apos = $apos_start; $apos <= $apos_end; $apos++) {
+	$taseq .= substr($aseq, $apos, 1);
+    }
+    #print "B:$aseq\nM:$mask\nA:$taseq\n";
+
+    return $taseq;
+}
+
+
+1;
+__END__
diff --git a/demotic/demotic_h2.pm b/demotic/demotic_h2.pm
new file mode 100644
index 0000000..cbf8d71
--- /dev/null
+++ b/demotic/demotic_h2.pm
@@ -0,0 +1,190 @@
+# Demotic parser for H2 hmmsearch output
+#
+# Does not parse alignment section yet. But suitable for profmark use.
+# H2's hmmsearch can only search a single query model, not multiples.
+#
+# SVN $Id$
+# SRE, Fri Apr 16 11:07:34 2010
+
+package demotic_h2;
+
+sub parse (*) {
+    my $fh = shift;
+    my $parsing_header  = 1;
+    my $parsing_seqs    = 0;
+    my $parsing_domains = 0;
+    my $parsing_alis    = 0;
+
+    # Initialize everything... so we can call the parser
+    # repeatedly, one call per hmmsearch output.
+    #
+    # This section also documents what's available in
+    # variables within the package.
+    # 
+    # Arrays are indexed [0..nhits-1] or [0..nali-1]
+    #
+    $queryname      = "";	# Name of the query sequence
+    $querydesc      = "";	# Description line for the query (or "")
+    $querylen       = 0;	# Length of the query in residues
+    $db             = "";	# Name of the target database file
+    $db_nseq        = 0;	# Number of sequences in the target database
+    $db_nletters    = "";	# Number of residues in the target database
+                                # (stored as a string so we can have large #'s)
+
+				# The top hit list (still in rank order)
+    $nhits          = 0;	# Number of entries in the hit list
+    @hit_target     = ();	# Target sequence name (by rank)
+    %target_desc    = ();	# Target sequence description (by targ name)
+    @hit_bitscore   = ();	# Raw score (by rank)
+    @hit_Eval       = ();	# P-val or E-val (by rank)
+
+				# The alignment output (in order it came in)
+				# all indexed by # of alignment [0..nali-1]
+    $nali           = 0;	# Number of alignments
+    @ali_target     = ();	# Target sequence name
+    @ali_bitscore   = ();	# bit score
+    @ali_evalue     = ();	# E-value
+    @ali_qstart     = ();	# Start position on query
+    @ali_qend       = ();	# End position on query
+    @ali_tstart     = ();	# Start position on target
+    @ali_tend       = ();	# End position on target
+    @ali_qali       = ();       # Aligned string from query
+    @ali_tali       = ();       # Aligned string from target (subject)
+
+    # Now, loop over the lines of our input, and parse 'em.
+    #
+    while (<$fh>) {
+
+	if ($parsing_header) {
+	    if (/^Scores for complete sequences /) { # seq section starts with this line
+		$parsing_header  = 0;
+		$parsing_seqs    = 1;
+		<$fh>;		# This discards the next line:   Sequence              Description                       Score    E-value  N
+		<$fh>;		# and discard another line:      --------              -----------                       -----    ------- ---
+		next;
+	    } 
+	    elsif (/Query HMM:\s*(\S+)/)    { $queryname = $1; }
+	    elsif (/Description:\s*(\.*)$/) { $querydesc = $1; }
+	}
+
+	elsif ($parsing_seqs) {
+	    if (/^\s*$/) { 	# seq section ends with a blank line
+		$parsing_seqs    = 0;
+		$parsing_domains = 1;
+		<$fh>;   # Discard:   Parsed for domains:
+		<$fh>;   # Discard:   Sequence              Domain  seq-f seq-t    hmm-f hmm-t      score  E-value
+		<$fh>;   # Discard:   --------              ------- ----- -----    ----- -----      -----  -------
+		next;
+	    } 
+	    elsif (/^(\S+)\s+(.+)\s+(-?\d+\.\d*)\s+(\S+)\s+\d+\s*$/) {
+		#        Target   Description  Score Evalue   N
+                #           
+		$hit_target[$nhits]    = $1;
+		$target_desc{$1}       = $2;
+		$hit_bitscore[$nhits]  = $3;
+		$hit_Eval[$nhits]      = $4;
+		$nhits++;
+	    }
+	}
+
+	elsif ($parsing_domains) {
+	    if (/^\s*$/) { 	# domain section ends with a blank line
+		$parsing_domains    = 0;
+		$parsing_alis       = 1;
+		<$fh>;  # Discard: Alignments of top-scoring domains:
+	    }
+
+	    if (/^(\S+)\s+\d+\/\d+\s+(\d+)\s+(\d+)\s+\S\S\s+(\d+)\s+(\d+)\s+\S\S\s+(-?\d+\.\d*)\s+(\S+)\s*$/)
+               #  Sequence  Domain   seq-f   seq-t           hmm-f  hmm-t            score      E-value
+               #     1                2        3              4       5                6           7
+	    {
+		$ali_target[$nali]   = $1;
+		$ali_bitscore[$nali] = $6;
+		$ali_evalue[$nali]   = $7;
+		$ali_qstart[$nali]   = $4;
+		$ali_qend[$nali]     = $5;
+		$ali_tstart[$nali]   = $2;
+		$ali_tend[$nali]     = $3;
+		$nali++;
+	    }
+	}
+    }
+
+    if ($parsing_alis) { return 1; } else { return 0;  }
+}
+
+sub exblxout {
+    my $ofh     = shift;
+    my $i;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\n",
+	$ali_evalue[$i],
+	$ali_identity[$i],
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_target[$i],
+	$ali_qstart[$i],
+	$ali_qend[$i],
+	$queryname;
+    }
+    
+}
+
+
+sub tblout {
+    my $ofh     = shift;
+    my $i;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\t%s\n",
+	$ali_evalue[$i],
+	$ali_identity[$i],
+	$ali_qstart[$i],
+	$ali_qend[$i],
+	$queryname,
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_target[$i],
+	$target_desc{$ali_target[$i]};
+    }
+}    
+
+
+sub gffout {
+    my $ofh     = shift;
+    my $source  = shift;
+    my $feature = shift;
+    my $i;
+    my $strand;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	if ($ali_qstart[$i] > $ali_qend[$i]) { $strand = "-"; }
+	else { $strand = "+"; } 
+
+	printf $ofh "%s\t%s\t%s\t%d\t%d\t%.1f\t%s\t.\tgene \"%s\"\n",
+	$ali_target[$i],
+	$source,
+	$feature,
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_bitscore[$i],
+	$strand,
+	$queryname;
+    }
+}
+
+
+sub profmarkout {
+    my $ofh = shift;
+    my $i;
+
+    for ($i = 0; $i < $nhits; $i++) {
+	printf $ofh "%g\t%.1f\t%s\t%s\n", $hit_Eval[$i], $hit_bitscore[$i], $hit_target[$i], $queryname;
+    }
+}
+1;
+__END__
+
+  |more
+
diff --git a/demotic/demotic_hmmer.pm b/demotic/demotic_hmmer.pm
new file mode 100644
index 0000000..e901189
--- /dev/null
+++ b/demotic/demotic_hmmer.pm
@@ -0,0 +1,218 @@
+# Demotic parser for HMMER3 output
+#
+# Works for phmmer, hmmsearch output
+# Does not parse env coords nor alignments yet,
+# but is suitable for use in profmark.
+#
+# SVN $Id: demotic_hmmer.pm 2720 2009-01-20 12:03:54Z eddys $
+# SRE, Tue Apr 22 13:13:51 2008
+
+package demotic_hmmer;
+
+# parse(\*STDIN) would parse HMMER output
+# coming in via stdin.
+#
+sub parse (*) {
+    my $fh = shift;
+    my $parsing_header  = 1;
+    my $parsing_seqs    = 0;
+    my $parsing_domains = 0;
+    my $parsing_alis    = 0;
+
+    # Initialize everything... so we can call the parser
+    # repeatedly, one call per hmmsearch output.
+    #
+    # This section also documents what's available in
+    # variables within the package.
+    # 
+    # Arrays are indexed [0..nhits-1] or [0..nali-1]
+    #
+    $queryname      = "";	# Name of the query sequence
+    $querydesc      = "";	# Description line for the query (or "")
+    $querylen       = 0;	# Length of the query in residues
+    $db             = "";	# Name of the target database file
+    $db_nseq        = 0;	# Number of sequences in the target database
+    $db_nletters    = "";	# Number of residues in the target database
+                                # (stored as a string so we can have large #'s)
+
+				# The top hit list (still in rank order)
+    $nhits          = 0;	# Number of entries in the hit list
+    @hit_target     = ();	# Target sequence name (by rank)
+    %target_desc    = ();	# Target sequence description (by targ name)
+    @hit_bitscore   = ();	# Raw score (by rank)
+    @hit_Eval       = ();	# P-val or E-val (by rank)
+
+				# The alignment output (in order it came in)
+				# all indexed by # of alignment [0..nali-1]
+    $nali           = 0;	# Number of alignments
+    @ali_target     = ();	# Target sequence name
+    @ali_bitscore   = ();	# bit score
+    @ali_evalue     = ();	# E-value
+    @ali_qstart     = ();	# Start position on query
+    @ali_qend       = ();	# End position on query
+    @ali_tstart     = ();	# Start position on target
+    @ali_tend       = ();	# End position on target
+    @ali_qali       = ();       # Aligned string from query
+    @ali_tali       = ();       # Aligned string from target (subject)
+    @ali_hitidx     = ();       # index of hit 
+
+    # Now, loop over the lines of our input, and parse 'em.
+    #
+    while (<$fh>) {
+	if ($parsing_header) {
+	    if (/^Scores for complete sequences /) { # seq section starts with this line
+		$parsing_header  = 0;
+		$parsing_seqs    = 1;
+		<$fh>;		# This discards the next line:   --- full sequence ----  ---- single best dom ----
+		<$fh>;		# and discard another line:      E-value   score   bias    score   bias 
+		<$fh>;		# and discard another line:      ------- ------- ------  ------- ------ ----------
+		next;
+	    } 
+	    elsif (/Query:\s*(\S+)\s*\[[LM]=(\d+)\]\s*$/) {
+		$queryname = $1;
+		$querylen  = $2;
+	    }
+	    elsif (/Description:\s*(.*)$/) {
+		$querydesc = $1;
+	    }
+	}
+
+	elsif ($parsing_seqs) {
+	    if (/^\s*$/) { 	# seq section ends with a blank line
+		$parsing_seqs    = 0;
+		$parsing_domains = 1;
+		next;
+	    } elsif (/^\s*(\S+)\s+(\S+)\s+(\S+)\s+\S+\s+\S+\s+\S+\s+(\S+)\s+(\d+)\s+(\S+)\s+(.+)$/) {
+		#        evalue   score    bias evalue score  bias   exp      N     target  desc
+                #           1       2       3                         4       5       6       7
+		$hit_target[$nhits]    = $6;
+		$target_desc{$6}       = $7;
+		$hit_bitscore[$nhits]  = $2;
+		$hit_Eval[$nhits]      = $1;
+		$nhits++;
+	    }
+	}
+
+	elsif ($parsing_domains) {
+	    if (/^\s*$/) { }
+
+	    elsif (/^\s*Domain annotation/) { }
+
+	    elsif (/^\>\>\s*(\S+)\s*/) { $curr_ali_target = $1; }
+
+	    elsif (/^\s*\d+\s+\S\s+(\S+)\s+\S+\s+(\S+)\s+\S+\s+(\d+)\s+(\d+)\s+\S\S\s+(\d+)\s+(\d+)\s+\S\S\s+(\d+)\s+(\d+)\s+\S\S\s+\S+\s*$/)
+                  #     #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+                  #    ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+                  #      1 !  387.6   1.4  7.5e-120  2.1e-115       1     181 []       1     181 []       1     181 [] 1.00
+	    {
+		$ali_target[$nali]   = $curr_ali_target;
+		$ali_bitscore[$nali] = $1;
+		$ali_evalue[$nali]   = $2;
+		$ali_qstart[$nali]   = $3;
+		$ali_qend[$nali]     = $4;
+		$ali_tstart[$nali]   = $5;
+		$ali_tend[$nali]     = $6;
+		$ali_hitidx[$nali]   = $nhits-1;
+		$nali ++;
+	    }
+	    elsif (/^\s+Alignments for each domain/) {
+		$parsing_domains = 0;
+		$parsing_alis    = 1;
+	    }
+	}
+
+	elsif ($parsing_alis) {
+	    if (/^\s*$/) { }
+
+	    elsif (/^\s*\=\=\s+domain\s+(\d+)\s+/) {
+		$whichali = $1-1;
+	    }
+	    elsif (/^\s+$queryname\s+\d+\s+(\S+)\s+\d+\s*$/) {
+		$ali_qali[$whichali]  .= $1;
+	    } 
+	    elsif (/^\s+$ali_target[$whichali]\s+\d+\s+(\S+)\s+\d+\s*$/) {
+		$ali_tali[$whichali]  .= $1;
+	    }
+	    elsif (/\/\//) { return 1; } # normal return after each query.
+	    else { next; }
+	}
+    }
+
+    if ($parsing_alis) { return 1; } else { return 0;  }
+}
+
+sub exblxout {
+    my $ofh     = shift;
+    my $i;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\n",
+	$ali_evalue[$i],
+	$ali_identity[$i],
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_target[$i],
+	$ali_qstart[$i],
+	$ali_qend[$i],
+	$queryname;
+    }
+    
+}
+
+
+sub tblout {
+    my $ofh     = shift;
+    my $i;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\t%s\n",
+	$ali_evalue[$i],
+	$ali_identity[$i],
+	$ali_qstart[$i],
+	$ali_qend[$i],
+	$queryname,
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_target[$i],
+	$target_desc{$ali_target[$i]};
+    }
+}    
+
+
+sub gffout {
+    my $ofh     = shift;
+    my $source  = shift;
+    my $feature = shift;
+    my $i;
+    my $strand;
+    
+    for ($i = 0; $i <= $nali-1; $i++) {
+	if ($ali_qstart[$i] > $ali_qend[$i]) { $strand = "-"; }
+	else { $strand = "+"; } 
+
+	printf $ofh "%s\t%s\t%s\t%d\t%d\t%.1f\t%s\t.\tgene \"%s\"\n",
+	$ali_target[$i],
+	$source,
+	$feature,
+	$ali_tstart[$i],
+	$ali_tend[$i],
+	$ali_bitscore[$i],
+	$strand,
+	$queryname;
+    }
+}
+
+
+sub profmarkout {
+    my $ofh = shift;
+    my $i;
+
+    for ($i = 0; $i < $nhits; $i++) {
+	printf $ofh "%g\t%.1f\t%s\t%s\n", $hit_Eval[$i], $hit_bitscore[$i], $hit_target[$i], $queryname;
+    }
+}
+1;
+__END__
+
+  |more
+
diff --git a/demotic/demotic_infernal_tab.pm b/demotic/demotic_infernal_tab.pm
new file mode 100644
index 0000000..f2f5691
--- /dev/null
+++ b/demotic/demotic_infernal_tab.pm
@@ -0,0 +1,177 @@
+############################################################################
+# demotic_infernal_tab package   
+#    Parses "tabfile" output generated by cmsearch rc1.0
+#    (TAJ 6/2008) based on demotic_search3.pm; itself based on SRE demotic_wublast.pm
+############################################################################
+
+#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
+# TODO List:
+#     (1) Parse "Post-search" number of hits (expected, actual) and surv fraction (expected, actual)
+#     (2) Possibly offload gff output functionality from calling script to this pm. 
+#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
+
+# Example output line (ignoring the leading "#"): 
+# ////////////////////////////////////////////////////////////////////////////////////////////
+## target name                   start        stop  start   stop    bit sc   E-value  GC%
+## -----------------------  ----------  ----------  -----  -----  --------  --------  ---
+#  Contig10/506498-506590            1          65      1     80     35.79  1.00e-08   40
+# ////////////////////////////////////////////////////////////////////////////////////////////
+#
+# Example "post_search" content:
+# ////////////////////////////////////////////////////////////////////////////////////////////
+# Post-search info for CM 1: SmY
+#
+#                              number of hits       surv fraction  
+#                            -------------------  -----------------
+# rnd  mod  alg  cfg   beta    expected   actual  expected   actual
+# ---  ---  ---  ---  -----  ----------  -------  --------  -------
+#   1   cm  ins  glc  1e-15       1.000       15    0.0601   0.7829
+#
+# expected time    actual time
+# -------------  -------------
+#   00:00:01.04    00:00:06.00
+# ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+package demotic_infernal_tab;
+# Don't have "parse(\*STDIN)" option, since "tabfile" output always written to file
+
+sub parse (*) {
+    my $fh                = shift; # if this isn't a file handle to a tabfile, some ass needs kickin'
+    my $parsing_header    = 1;
+    my $parsing_presearch = 0; 
+    my $parsing_hits      = 0; 
+    my $post_search       = 0;
+    my $nhits             = 0;   # temp counter for number of hits in current model; (tabulated)
+    my $index             = 0;   # indexes CM number; ie 1st model is index 0
+
+### NOTE:
+### Some arrays (0..(N-1)) contain values from each search (1..N). Recall there is 1 search per model.
+###      Ex: @cm_name      # lists names of all CMs used, say: (SmY.1, SmY.2, SmY.3)
+###
+### Other arrays are a "list of lists" (see LoL note below). In these cases, the Nth position 
+### in the array, will be an anonymous reference to a list of features for _all_ hits to model (N+1).
+###
+###      Ex: @t_name       # position N in the list corresponds to one model (N+1) in the search, 
+###                        # which is an anonymous ref to a list of ctgs for all hits from that model.
+###      Ex: @{$t_name[1]} # lists ctgs for all hits to the 2nd query model; eg (ChrI, ChrI, ChrIII, ChrV)
+
+
+# Document all the variables available in the package; initialize everything
+# 
+# ===========  Header details (once/report)  ================================
+    $command   = "";   # command line used to run search
+    $date      = "";   # date search was run
+    $db_recs   = "";   # number of records in target DB
+    $db_size   = "";   # DB size (in MB)
+
+# ===========  Pre-search details (once/CM) =================================
+# Note: details of the "pre-search" filtering rounds not captured currently 
+    @cm_name   = ();   # Covariation Model(s) name; 1st model is 0th in array
+
+# ===========  Details from each *hit* (0-many/CM) ==========================
+########################################################################################################
+# NOTE: (LoL) == List of Lists; the (N)th position in the following arrays contains a list             #
+#                of that feature for all hits from the (N+1)th CM in the report. The order of          # 
+#                features in the anonymous array @{$foo[$i]} corresponds to the order in the report.   #
+#                EXAMPLE:                                                                              #
+#                   @GC              # list of anonymous refs, one per CM; refs list all GCs in search # 
+#                   @{$GC[0]}        # contains the list of GC values for all hits to the 1st CM       # 
+#                   ${$GC[1]}->[3]   # GC value of 4th (3+1) hit in the 2nd (1+1) search               # 
+########################################################################################################
+    @t_name    = ();   # (LoL); target fasta record name
+    @t_start   = ();   # (LoL); start location in fasta target
+    @t_stop    = ();   # (LoL); stop  location in fasta target
+    @q_start   = ();   # (LoL); start location in CM query
+    @q_stop    = ();   # (LoL); stop  location in CM query 
+    @bitscore  = ();   # (LoL); bit score
+    @Eval      = ();   # (LoL); E-value  // can be in scientific notation
+    @GC        = ();   # (LoL); %GC
+
+# ===================== "Post-search info" (each CM report) ==================
+# NOTE: I'm not capturing all available information here, because I believe it can
+#       be quite variable. I'm not expert on all possible output that can be generated
+    @time_expect = ();  # expected run time (quoted, not converting into hr:min)
+    @time_actual = ();  # actual run time   (quoted, not converting into hr:min)
+    @num_hits    = ();  # tracks number of hits for each model
+
+# ====================== Cumulative Data (all query outputs) ================
+    $model_num   = 0;   # number of CM's used in the search
+    
+
+    # Loop over tabfile input, and parse it (there can be >1 CM/report in each tabfile)
+    while (<$fh>) {
+	if ($parsing_header) {    # only one header section, even if multiple CM's in search
+	    if (/^\#\sPre\-search\sinfo\sfor\sCM/) { # NB: model name here is picked up later
+		$parsing_header = 0;
+		$parsing_presearch = 1;
+		next;
+	    }
+	    elsif (/^\#\scommand\:\s+(\S.+)$/) {
+		$command = $1; 
+	    }
+	    elsif (/^\#\sdate:\s+(\S.+)$/) {
+		$date = $1;
+	    }
+	    elsif (/^\#\snum\sseqs:\s+(\d+)/) { # could get fucked if commas appear in the number
+		$db_recs = $1; 
+	    }
+	    elsif (/^\#\sdbsize\S+:\s+(\S+)/) { # $1 has a decimal; \d just don't cut it
+		$db_size = $1; 
+	    }
+	}
+	elsif ($parsing_presearch) {    # Each CM has it's own "pre-search"
+	    if (/^\#\starget\sname/) {  # signals end of "Pre-search"; occurs once per CM
+		$parsing_presearch = 0;
+		$parsing_hits      = 1; 
+		<$fh>;     # Discard next line (composed of dashes); then hitlist begins
+		next; 
+	    }
+	    elsif (/^\#\sCM:\s(\S+)/) { # If multiple models/CM; format is "CM-NAME.n" (1..n)
+		$model_num++;           # NB: correctly tallys models; use $index for array indices!
+		push (@cm_name, $1); 
+	    }
+	}
+	elsif ($parsing_hits) {         # every line not starting with "#" should be a "hit"
+# Example hit [sans leading "#"]: 
+#   Contig10                         1001         1065      1     80     35.79  1.00e-08   40
+	    if (/^\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\d+)\s*$/) {  
+		push (@{$t_name[$index]}  , $1);
+		push (@{$t_start[$index]} , $2);
+		push (@{$t_stop[$index]}  , $3);
+		push (@{$q_start[$index]} , $4);
+		push (@{$q_stop[$index]}  , $5);
+		push (@{$bitscore[$index]}, $6);
+		push (@{$Eval[$index]}    , $7);
+		push (@{$GC[$index]}      , $8);
+		$nhits++;  
+	    }
+	    elsif (/^\#/) {       # end of "hitlist" for this CM
+		$parsing_hits = 0; 
+		$post_search  = 1; 
+		push (@num_hits, $nhits); 
+		$nhits = 0;       # clear hit counter for next model 
+		next; 
+	    }
+	    else { die "Parsing 'hitlist' -- should never get here! Current line is:\n$_"; }
+	}
+	elsif ($post_search) {           # Each CM has it's own "post-search"
+	    if (/^\#\sexpected\stime/) { # Effectively marking the end of a single query's report
+		<$fh>;       # discard next line of dashes
+		$_ = <$fh>;  # get next line listing the times
+		if (/^\#\s+(\S+)\s+(\S+)\s*$/) {
+		    push (@time_expect, $1); # \__ not going to try parsing hours/minutes/seconds
+		    push (@time_actual, $2); # /
+		    $post_search       = 0;  # \__ if looping over multiple query CMs, next up is
+		    $parsing_presearch = 1;  # /   "pre-search" for next model, or soon: EOF
+		    $index++;                # LoL index; end of report i, prepare for report i+1
+		}
+	    }
+	}
+	else {  die "Should never get here! Dropped through WHILE loop, parsing line:\n$_";  }
+    }   # this closes the loop over lines in the input stream.
+}
+
+1;
+__END__
+
diff --git a/demotic/examples/example-single-psiquery.fa b/demotic/examples/example-single-psiquery.fa
new file mode 100644
index 0000000..4803c21
--- /dev/null
+++ b/demotic/examples/example-single-psiquery.fa
@@ -0,0 +1,7 @@
+>A3CM55_STRSV/64-391 A3CM55.1
+SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRMLLTLVIALIQSVALVLNLP
+LQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASMIAYIPQDIWN
+SIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPA
+GGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFILYLLTIFILALA
+FAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILISGLPMMV
+VLVDIRYLRLSMIPGIFMIFIGMVFSIK
diff --git a/demotic/examples/example-single.asnt b/demotic/examples/example-single.asnt
new file mode 100644
index 0000000..74edbd7
--- /dev/null
+++ b/demotic/examples/example-single.asnt
@@ -0,0 +1,9215 @@
+PssmWithParameters ::= {
+  pssm {
+    isProtein TRUE ,
+    numRows 28 ,
+    numColumns 328 ,
+    byRow FALSE ,
+    query
+      seq {
+        id {
+          local
+            str "A3CM55_STRSV/64-391" } ,
+        descr {
+          title "A3CM55.1" } ,
+        inst {
+          repr raw ,
+          mol aa ,
+          length 328 ,
+          seq-data
+            ncbieaa "SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRMLLTLVIALIQSVALVL
+NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASMIAYIPQDIWNSIQELKISSLWLALM
+LVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIE
+QWIEALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLI
+LISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVFSIK" } } ,
+    intermediateData {
+      freqRatios {
+        { 0, 10, 0 } ,
+        { 517881877, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 714899082, 10, -11 } ,
+        { 228880836, 10, -10 } ,
+        { 268767292, 10, -10 } ,
+        { 926243646, 10, -11 } ,
+        { 177664277, 10, -9 } ,
+        { 750670798, 10, -11 } ,
+        { 151849534, 10, -10 } ,
+        { 256189057, 10, -10 } ,
+        { 241985116, 10, -10 } ,
+        { 779851038, 10, -11 } ,
+        { 262995653, 10, -10 } ,
+        { 193119177, 10, -10 } ,
+        { 190809756, 10, -10 } ,
+        { 188907569, 10, -10 } ,
+        { 278285975, 10, -9 } ,
+        { 252640924, 10, -9 } ,
+        { 239733259, 10, -10 } ,
+        { 301431543, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 922884276, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 309934003, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 761463694, 10, -11 } ,
+        { 102434459, 10, -10 } ,
+        { 136310089, 10, -10 } ,
+        { 370679606, 10, -10 } ,
+        { 128089526, 10, -10 } ,
+        { 470654848, 10, -11 } ,
+        { 269738853, 10, -9 } ,
+        { 143356703, 10, -10 } ,
+        { 279228195, 10, -9 } ,
+        { 219154764, 10, -10 } ,
+        { 883310202, 10, -11 } ,
+        { 120484249, 10, -10 } ,
+        { 109846992, 10, -10 } ,
+        { 126030556, 10, -10 } ,
+        { 194750028, 10, -10 } ,
+        { 265561434, 10, -10 } ,
+        { 14184185, 10, -8 } ,
+        { 388859764, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 137166057, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 480691169, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 371625208, 10, -10 } ,
+        { 97373281, 10, -10 } ,
+        { 138789891, 10, -10 } ,
+        { 277587347, 10, -9 } ,
+        { 154229191, 10, -10 } ,
+        { 679239895, 10, -11 } ,
+        { 769688451, 10, -10 } ,
+        { 143752343, 10, -10 } ,
+        { 170383067, 10, -9 } ,
+        { 123393878, 10, -9 } ,
+        { 970797801, 10, -11 } ,
+        { 106990917, 10, -10 } ,
+        { 120008149, 10, -10 } ,
+        { 131851268, 10, -10 } ,
+        { 212793063, 10, -10 } ,
+        { 21134561, 10, -9 } ,
+        { 404227857, 10, -10 } ,
+        { 682154343, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 287824526, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 273381473, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 793699125, 10, -11 } ,
+        { 285083707, 10, -10 } ,
+        { 152041089, 10, -9 } ,
+        { 107433403, 10, -10 } ,
+        { 356813034, 10, -10 } ,
+        { 960120934, 10, -11 } ,
+        { 324819475, 10, -10 } ,
+        { 33836615, 10, -9 } ,
+        { 330877985, 10, -10 } ,
+        { 178294009, 10, -10 } ,
+        { 21991971, 10, -9 } ,
+        { 226825182, 10, -10 } ,
+        { 675526885, 10, -10 } ,
+        { 242426951, 10, -10 } ,
+        { 101397213, 10, -9 } ,
+        { 105859297, 10, -9 } ,
+        { 324821235, 10, -10 } ,
+        { 343454612, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 109353832, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 279029956, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 690582591, 10, -11 } ,
+        { 915515151, 10, -11 } ,
+        { 137969549, 10, -10 } ,
+        { 407323651, 10, -10 } ,
+        { 125373864, 10, -10 } ,
+        { 492239741, 10, -11 } ,
+        { 537970465, 10, -10 } ,
+        { 143908894, 10, -10 } ,
+        { 513958028, 10, -9 } ,
+        { 560468512, 10, -10 } ,
+        { 864034937, 10, -11 } ,
+        { 111873436, 10, -10 } ,
+        { 119726049, 10, -10 } ,
+        { 137034531, 10, -10 } ,
+        { 19221067, 10, -9 } ,
+        { 395565848, 10, -10 } ,
+        { 884935061, 10, -10 } ,
+        { 42315088, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 133349611, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 521043011, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 395647073, 10, -11 } ,
+        { 165085958, 10, -10 } ,
+        { 149149131, 10, -10 } ,
+        { 629041473, 10, -11 } ,
+        { 728081838, 10, -9 } ,
+        { 529836444, 10, -11 } ,
+        { 69541992, 10, -10 } ,
+        { 163975886, 10, -10 } ,
+        { 125317218, 10, -10 } ,
+        { 431478644, 10, -11 } ,
+        { 282753926, 10, -10 } ,
+        { 120080208, 10, -10 } ,
+        { 112367134, 10, -10 } ,
+        { 112732303, 10, -10 } ,
+        { 418475414, 10, -10 } ,
+        { 168886274, 10, -10 } ,
+        { 107718011, 10, -10 } ,
+        { 263254928, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 544827325, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 269123114, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 662177844, 10, -11 } ,
+        { 924567497, 10, -11 } ,
+        { 113055886, 10, -10 } ,
+        { 188272808, 10, -10 } ,
+        { 10825489, 10, -9 } ,
+        { 3797244, 10, -9 } ,
+        { 466658624, 10, -9 } ,
+        { 121011005, 10, -10 } ,
+        { 139010418, 10, -9 } ,
+        { 174964519, 10, -10 } ,
+        { 768618973, 10, -11 } ,
+        { 105094923, 10, -10 } ,
+        { 889797122, 10, -11 } ,
+        { 996523231, 10, -11 } ,
+        { 16820564, 10, -9 } ,
+        { 239260116, 10, -10 } ,
+        { 14079382, 10, -8 } ,
+        { 290212908, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 106564555, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 651836045, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 781024537, 10, -11 } ,
+        { 19095696, 10, -9 } ,
+        { 238724803, 10, -10 } ,
+        { 400185161, 10, -10 } ,
+        { 171606437, 10, -9 } ,
+        { 780789604, 10, -11 } ,
+        { 444159947, 10, -10 } ,
+        { 239987176, 10, -10 } ,
+        { 78305675, 10, -9 } ,
+        { 110857434, 10, -9 } ,
+        { 209535046, 10, -10 } ,
+        { 176368235, 10, -10 } ,
+        { 192807775, 10, -10 } ,
+        { 187586848, 10, -10 } ,
+        { 145120995, 10, -9 } ,
+        { 541169244, 10, -10 } ,
+        { 107052161, 10, -9 } ,
+        { 42829021, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 138758435, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 235486802, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 292325478, 10, -11 } ,
+        { 128488024, 10, -10 } ,
+        { 171059612, 10, -10 } ,
+        { 443449159, 10, -11 } ,
+        { 140896898, 10, -10 } ,
+        { 41603363, 10, -10 } ,
+        { 791342966, 10, -11 } ,
+        { 16173364, 10, -9 } ,
+        { 133914369, 10, -10 } ,
+        { 380402256, 10, -11 } ,
+        { 897470434, 10, -11 } ,
+        { 867146688, 10, -9 } ,
+        { 109400097, 10, -10 } ,
+        { 988127282, 10, -11 } ,
+        { 215213125, 10, -10 } ,
+        { 160988181, 10, -10 } ,
+        { 114180197, 10, -10 } ,
+        { 149967155, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 4677331, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 231868293, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 515627476, 10, -11 } ,
+        { 103128978, 10, -10 } ,
+        { 140849126, 10, -10 } ,
+        { 857300965, 10, -10 } ,
+        { 129438707, 10, -10 } ,
+        { 125724605, 10, -10 } ,
+        { 218663544, 10, -9 } ,
+        { 141202503, 10, -10 } ,
+        { 50321186, 10, -9 } ,
+        { 116478414, 10, -10 } ,
+        { 281882452, 10, -10 } ,
+        { 991475365, 10, -11 } ,
+        { 113551595, 10, -10 } ,
+        { 125513926, 10, -10 } ,
+        { 192719506, 10, -10 } ,
+        { 197983872, 10, -10 } ,
+        { 547083935, 10, -10 } ,
+        { 302290459, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 326422403, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 299375543, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 693821672, 10, -11 } ,
+        { 979999378, 10, -11 } ,
+        { 125734011, 10, -10 } ,
+        { 317157013, 10, -10 } ,
+        { 119861446, 10, -10 } ,
+        { 466807251, 10, -11 } ,
+        { 385988613, 10, -9 } ,
+        { 132441562, 10, -10 } ,
+        { 765620744, 10, -10 } ,
+        { 437383702, 10, -10 } ,
+        { 85172182, 10, -10 } ,
+        { 112242639, 10, -10 } ,
+        { 100281139, 10, -10 } ,
+        { 108615005, 10, -10 } ,
+        { 186997969, 10, -10 } ,
+        { 258986195, 10, -10 } ,
+        { 209667772, 10, -9 } ,
+        { 34458904, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 302059153, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 444446573, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 704389127, 10, -11 } ,
+        { 25917194, 10, -9 } ,
+        { 280341533, 10, -10 } ,
+        { 109040543, 10, -10 } ,
+        { 286424736, 10, -10 } ,
+        { 895690046, 10, -11 } ,
+        { 174602797, 10, -10 } ,
+        { 263898432, 10, -10 } ,
+        { 440952802, 10, -10 } ,
+        { 87128392, 10, -10 } ,
+        { 12749547, 10, -8 } ,
+        { 187144692, 10, -10 } ,
+        { 20126867, 10, -9 } ,
+        { 203045715, 10, -10 } ,
+        { 22419357, 10, -8 } ,
+        { 309183627, 10, -9 } ,
+        { 26381826, 10, -9 } ,
+        { 313791685, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 238214666, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 461839243, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 811554263, 10, -11 } ,
+        { 180415238, 10, -10 } ,
+        { 258756231, 10, -10 } ,
+        { 898054422, 10, -11 } ,
+        { 379210866, 10, -10 } ,
+        { 696657891, 10, -11 } ,
+        { 150176551, 10, -10 } ,
+        { 24127792, 10, -9 } ,
+        { 251716116, 10, -10 } ,
+        { 78187254, 10, -10 } ,
+        { 180547292, 10, -10 } ,
+        { 20003569, 10, -9 } ,
+        { 17862483, 10, -9 } ,
+        { 172759128, 10, -10 } ,
+        { 233917091, 10, -9 } ,
+        { 351634851, 10, -10 } ,
+        { 269180962, 10, -10 } ,
+        { 275650271, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 896786212, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 531551186, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 643117558, 10, -11 } ,
+        { 23519724, 10, -9 } ,
+        { 302119961, 10, -10 } ,
+        { 869147403, 10, -11 } ,
+        { 195476593, 10, -9 } ,
+        { 82637662, 10, -10 } ,
+        { 118842469, 10, -10 } ,
+        { 272157511, 10, -10 } ,
+        { 214810812, 10, -10 } ,
+        { 222772154, 10, -10 } ,
+        { 261807917, 10, -10 } ,
+        { 185078955, 10, -10 } ,
+        { 691177601, 10, -10 } ,
+        { 201748549, 10, -10 } ,
+        { 403685572, 10, -9 } ,
+        { 516753071, 10, -10 } ,
+        { 182059045, 10, -10 } ,
+        { 290200838, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 884172288, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 266488645, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 665676921, 10, -11 } ,
+        { 956393937, 10, -11 } ,
+        { 122199829, 10, -10 } ,
+        { 527788382, 10, -10 } ,
+        { 117668351, 10, -10 } ,
+        { 456326758, 10, -11 } ,
+        { 383522354, 10, -9 } ,
+        { 132566515, 10, -10 } ,
+        { 190234248, 10, -9 } ,
+        { 741110664, 10, -10 } ,
+        { 833890928, 10, -11 } ,
+        { 107903749, 10, -10 } ,
+        { 104355901, 10, -10 } ,
+        { 113726173, 10, -10 } ,
+        { 176993185, 10, -10 } ,
+        { 236063966, 10, -10 } ,
+        { 699475415, 10, -10 } ,
+        { 370304842, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 133558046, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 423832036, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 731611618, 10, -11 } ,
+        { 104024718, 10, -10 } ,
+        { 132303252, 10, -10 } ,
+        { 32987985, 10, -9 } ,
+        { 130177131, 10, -10 } ,
+        { 434031478, 10, -11 } ,
+        { 369971686, 10, -9 } ,
+        { 138251238, 10, -10 } ,
+        { 109103697, 10, -9 } ,
+        { 228025578, 10, -10 } ,
+        { 899620835, 10, -11 } ,
+        { 119473472, 10, -10 } ,
+        { 1022835, 10, -8 } ,
+        { 112766782, 10, -10 } ,
+        { 206685905, 10, -10 } ,
+        { 38817477, 10, -9 } ,
+        { 198570254, 10, -9 } ,
+        { 323785145, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 123957787, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 325551474, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 740015777, 10, -11 } ,
+        { 105952164, 10, -10 } ,
+        { 156901421, 10, -10 } ,
+        { 966005858, 10, -10 } ,
+        { 151583051, 10, -10 } ,
+        { 6180454, 10, -9 } ,
+        { 128868906, 10, -9 } ,
+        { 16553765, 10, -9 } ,
+        { 198853845, 10, -9 } ,
+        { 142202165, 10, -9 } ,
+        { 103071831, 10, -10 } ,
+        { 124046684, 10, -10 } ,
+        { 143265505, 10, -10 } ,
+        { 148285744, 10, -10 } ,
+        { 220129648, 10, -10 } ,
+        { 267885994, 10, -10 } ,
+        { 142167228, 10, -9 } ,
+        { 248428934, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 196996274, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 25090378, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 31882391, 10, -10 } ,
+        { 20457712, 10, -9 } ,
+        { 583375855, 10, -10 } ,
+        { 592488738, 10, -11 } ,
+        { 173401061, 10, -10 } ,
+        { 10598314, 10, -9 } ,
+        { 887873796, 10, -11 } ,
+        { 364593317, 10, -10 } ,
+        { 189255904, 10, -10 } ,
+        { 810071482, 10, -11 } ,
+        { 187197245, 10, -10 } ,
+        { 144439597, 10, -10 } ,
+        { 679384397, 10, -9 } ,
+        { 294879652, 10, -10 } ,
+        { 28777719, 10, -9 } ,
+        { 195695312, 10, -10 } ,
+        { 132730528, 10, -10 } ,
+        { 296468067, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 845437503, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 296773197, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 738145482, 10, -11 } ,
+        { 109216628, 10, -10 } ,
+        { 163468778, 10, -10 } ,
+        { 567404848, 10, -10 } ,
+        { 144716284, 10, -10 } ,
+        { 573227216, 10, -11 } ,
+        { 977193432, 10, -10 } ,
+        { 163638065, 10, -10 } ,
+        { 464328074, 10, -9 } ,
+        { 373940435, 10, -10 } ,
+        { 982774434, 10, -11 } ,
+        { 127293769, 10, -10 } ,
+        { 252991746, 10, -10 } ,
+        { 153717282, 10, -10 } ,
+        { 203885521, 10, -10 } ,
+        { 243630006, 10, -10 } ,
+        { 761529559, 10, -10 } ,
+        { 480392105, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 155118482, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 236259247, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 614892777, 10, -11 } ,
+        { 781567161, 10, -11 } ,
+        { 119070646, 10, -10 } ,
+        { 472639881, 10, -10 } ,
+        { 10791564, 10, -9 } ,
+        { 440833714, 10, -11 } ,
+        { 430092618, 10, -10 } ,
+        { 12482028, 10, -9 } ,
+        { 626735587, 10, -9 } ,
+        { 385036295, 10, -10 } ,
+        { 716754079, 10, -11 } ,
+        { 969378634, 10, -11 } ,
+        { 103931837, 10, -10 } ,
+        { 122798316, 10, -10 } ,
+        { 156000485, 10, -10 } ,
+        { 193633056, 10, -10 } ,
+        { 419204473, 10, -10 } ,
+        { 403218374, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 125620884, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 169512228, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 955945729, 10, -11 } ,
+        { 241578395, 10, -10 } ,
+        { 375887958, 10, -10 } ,
+        { 144888312, 10, -10 } ,
+        { 659472757, 10, -10 } ,
+        { 98124845, 10, -10 } ,
+        { 342868702, 10, -10 } ,
+        { 3418672, 10, -8 } ,
+        { 615930922, 10, -10 } ,
+        { 137214689, 10, -10 } ,
+        { 245101154, 10, -10 } ,
+        { 240348348, 10, -10 } ,
+        { 841844023, 10, -10 } ,
+        { 333807113, 10, -10 } ,
+        { 109121203, 10, -9 } ,
+        { 13073363, 10, -8 } ,
+        { 115358738, 10, -9 } ,
+        { 422154202, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 134286717, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 546747566, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 876887126, 10, -11 } ,
+        { 236936025, 10, -10 } ,
+        { 286274781, 10, -10 } ,
+        { 189546075, 10, -10 } ,
+        { 264733833, 10, -9 } ,
+        { 956429268, 10, -11 } ,
+        { 476198935, 10, -10 } ,
+        { 280184339, 10, -10 } ,
+        { 690557708, 10, -10 } ,
+        { 394589655, 10, -10 } ,
+        { 242416733, 10, -10 } ,
+        { 222283036, 10, -10 } ,
+        { 338423903, 10, -10 } ,
+        { 222164001, 10, -10 } ,
+        { 579838693, 10, -10 } ,
+        { 754818233, 10, -10 } ,
+        { 131275917, 10, -9 } ,
+        { 544843315, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 282371854, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 137693756, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 915286543, 10, -11 } ,
+        { 876606444, 10, -10 } ,
+        { 416009718, 10, -10 } ,
+        { 287136173, 10, -10 } ,
+        { 465460418, 10, -10 } ,
+        { 991533718, 10, -11 } ,
+        { 365393835, 10, -10 } ,
+        { 801928542, 10, -10 } ,
+        { 56845064, 10, -9 } ,
+        { 129405428, 10, -10 } ,
+        { 342324122, 10, -10 } ,
+        { 324296019, 10, -10 } ,
+        { 304615419, 10, -10 } ,
+        { 294494159, 10, -10 } ,
+        { 138111028, 10, -9 } ,
+        { 857308478, 10, -10 } ,
+        { 962959782, 10, -10 } ,
+        { 402392678, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 145663262, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 650172246, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 865486837, 10, -11 } ,
+        { 432182586, 10, -10 } ,
+        { 663221617, 10, -10 } ,
+        { 312456713, 10, -10 } ,
+        { 491507032, 10, -10 } ,
+        { 316430512, 10, -10 } ,
+        { 612228974, 10, -10 } ,
+        { 132554075, 10, -9 } ,
+        { 976781104, 10, -10 } ,
+        { 260486017, 10, -10 } ,
+        { 349858955, 10, -10 } ,
+        { 270814954, 10, -10 } ,
+        { 603890567, 10, -10 } ,
+        { 452036674, 10, -10 } ,
+        { 613175604, 10, -10 } ,
+        { 449244246, 10, -10 } ,
+        { 602342031, 10, -10 } ,
+        { 663358449, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 43964771, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 388658924, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 854161777, 10, -11 } ,
+        { 163427558, 10, -10 } ,
+        { 227504954, 10, -10 } ,
+        { 429604054, 10, -10 } ,
+        { 201784066, 10, -10 } ,
+        { 779013644, 10, -11 } ,
+        { 188721627, 10, -9 } ,
+        { 459215178, 10, -10 } ,
+        { 199343851, 10, -9 } ,
+        { 251909307, 10, -10 } ,
+        { 144116159, 10, -10 } ,
+        { 74888628, 10, -9 } ,
+        { 177391, 10, -7 } ,
+        { 350428975, 10, -10 } ,
+        { 326156756, 10, -10 } ,
+        { 320803095, 10, -10 } ,
+        { 109129193, 10, -9 } ,
+        { 530039074, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 311517884, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 37312112, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 548121663, 10, -11 } ,
+        { 147421063, 10, -10 } ,
+        { 199810079, 10, -10 } ,
+        { 129884375, 10, -10 } ,
+        { 168169875, 10, -10 } ,
+        { 53685634, 10, -10 } ,
+        { 182181612, 10, -9 } ,
+        { 352744611, 10, -10 } ,
+        { 117583498, 10, -9 } ,
+        { 120219293, 10, -10 } ,
+        { 115669917, 10, -10 } ,
+        { 400259469, 10, -9 } ,
+        { 199191915, 10, -10 } ,
+        { 144474498, 10, -10 } ,
+        { 355745468, 10, -10 } ,
+        { 353264503, 10, -10 } ,
+        { 417987056, 10, -10 } ,
+        { 271028385, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 89696021, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 943358527, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 814541561, 10, -11 } ,
+        { 595733415, 10, -10 } ,
+        { 789663739, 10, -10 } ,
+        { 167936737, 10, -10 } ,
+        { 85217137, 10, -9 } ,
+        { 232942096, 10, -10 } ,
+        { 245342656, 10, -10 } ,
+        { 109509138, 10, -9 } ,
+        { 667224249, 10, -10 } ,
+        { 137301873, 10, -10 } ,
+        { 563208029, 10, -10 } ,
+        { 521687235, 10, -10 } ,
+        { 583153009, 10, -10 } ,
+        { 725816483, 10, -10 } ,
+        { 860817319, 10, -10 } ,
+        { 509489304, 10, -10 } ,
+        { 376718553, 10, -10 } ,
+        { 50602371, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 24594851, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 328263016, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 744796729, 10, -11 } ,
+        { 116441556, 10, -10 } ,
+        { 191797323, 10, -10 } ,
+        { 978088583, 10, -10 } ,
+        { 15020654, 10, -9 } ,
+        { 637485084, 10, -11 } ,
+        { 68577667, 10, -9 } ,
+        { 268738641, 10, -10 } ,
+        { 337188711, 10, -9 } ,
+        { 283836687, 10, -10 } ,
+        { 10781794, 10, -9 } ,
+        { 129817603, 10, -10 } ,
+        { 440295399, 10, -10 } ,
+        { 170305253, 10, -10 } ,
+        { 224560937, 10, -10 } ,
+        { 264230682, 10, -10 } ,
+        { 152188749, 10, -9 } ,
+        { 518855602, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 19285881, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 707083393, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 597700701, 10, -11 } ,
+        { 17401882, 10, -8 } ,
+        { 164431194, 10, -9 } ,
+        { 999640867, 10, -11 } ,
+        { 571850348, 10, -10 } ,
+        { 124711194, 10, -10 } ,
+        { 195597559, 10, -10 } ,
+        { 57458904, 10, -9 } ,
+        { 25940193, 10, -9 } ,
+        { 842209858, 10, -11 } ,
+        { 901614039, 10, -10 } ,
+        { 230814388, 10, -10 } ,
+        { 481714288, 10, -10 } ,
+        { 44783385, 10, -9 } ,
+        { 115241171, 10, -9 } ,
+        { 603176471, 10, -10 } ,
+        { 28286973, 10, -9 } ,
+        { 317383426, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 107495161, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 563015015, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 671702416, 10, -11 } ,
+        { 668371862, 10, -10 } ,
+        { 133477273, 10, -9 } ,
+        { 166209675, 10, -10 } ,
+        { 291133515, 10, -10 } ,
+        { 122008397, 10, -10 } ,
+        { 394302067, 10, -10 } ,
+        { 139574725, 10, -9 } ,
+        { 128011275, 10, -9 } ,
+        { 372265172, 10, -10 } ,
+        { 471647729, 10, -10 } ,
+        { 233043546, 10, -10 } ,
+        { 570937259, 10, -10 } ,
+        { 644397248, 10, -10 } ,
+        { 457956524, 10, -10 } ,
+        { 506827552, 10, -10 } ,
+        { 363593347, 10, -10 } ,
+        { 439852729, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 138739339, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 695782429, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 844365786, 10, -11 } ,
+        { 389018854, 10, -10 } ,
+        { 43175918, 10, -9 } ,
+        { 481963505, 10, -10 } ,
+        { 346634629, 10, -10 } ,
+        { 93700982, 10, -10 } ,
+        { 608639048, 10, -10 } ,
+        { 328596973, 10, -10 } ,
+        { 210354553, 10, -9 } ,
+        { 393504201, 10, -10 } ,
+        { 277421119, 10, -10 } ,
+        { 188195337, 10, -10 } ,
+        { 592007664, 10, -10 } ,
+        { 240463587, 10, -10 } ,
+        { 662246753, 10, -10 } ,
+        { 670117892, 10, -10 } ,
+        { 512820844, 10, -10 } ,
+        { 568873052, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 204207793, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 683512837, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 613553154, 10, -11 } ,
+        { 10086215, 10, -8 } ,
+        { 694010276, 10, -10 } ,
+        { 110216759, 10, -10 } ,
+        { 334854578, 10, -10 } ,
+        { 200748677, 10, -10 } ,
+        { 239161486, 10, -10 } ,
+        { 139274301, 10, -9 } ,
+        { 381482052, 10, -10 } ,
+        { 108521641, 10, -10 } ,
+        { 779393614, 10, -10 } ,
+        { 715303659, 10, -10 } ,
+        { 108120842, 10, -9 } ,
+        { 713212067, 10, -10 } ,
+        { 745209854, 10, -10 } ,
+        { 517140677, 10, -10 } ,
+        { 379509887, 10, -10 } ,
+        { 361156185, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 126239317, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 357644638, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 441649283, 10, -11 } ,
+        { 422458537, 10, -10 } ,
+        { 602823978, 10, -10 } ,
+        { 906290493, 10, -11 } ,
+        { 443462846, 10, -10 } ,
+        { 184482299, 10, -10 } ,
+        { 278383083, 10, -10 } ,
+        { 321147719, 10, -9 } ,
+        { 409985848, 10, -10 } ,
+        { 884730144, 10, -11 } ,
+        { 548219086, 10, -10 } ,
+        { 105364821, 10, -9 } ,
+        { 520310956, 10, -10 } ,
+        { 878601371, 10, -10 } ,
+        { 492423312, 10, -10 } ,
+        { 278208526, 10, -10 } ,
+        { 204918521, 10, -10 } ,
+        { 293028117, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 10388996, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 451002078, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 390520652, 10, -11 } ,
+        { 923048756, 10, -10 } ,
+        { 417478676, 10, -9 } ,
+        { 764498911, 10, -11 } ,
+        { 221795301, 10, -10 } ,
+        { 10800431, 10, -9 } ,
+        { 121742315, 10, -10 } ,
+        { 375608834, 10, -10 } ,
+        { 214631714, 10, -10 } ,
+        { 130893466, 10, -10 } ,
+        { 292864928, 10, -10 } ,
+        { 50377521, 10, -9 } ,
+        { 892375566, 10, -10 } ,
+        { 256847553, 10, -10 } ,
+        { 862026856, 10, -10 } ,
+        { 267907914, 10, -10 } ,
+        { 329118681, 10, -10 } ,
+        { 275475359, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 892738056, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 514227909, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 562346657, 10, -11 } ,
+        { 105656107, 10, -9 } ,
+        { 950878489, 10, -10 } ,
+        { 109420142, 10, -10 } ,
+        { 283742381, 10, -9 } ,
+        { 992413077, 10, -11 } ,
+        { 170687918, 10, -10 } ,
+        { 355852654, 10, -10 } ,
+        { 574276037, 10, -10 } ,
+        { 911953255, 10, -11 } ,
+        { 41617785, 10, -9 } ,
+        { 341236873, 10, -10 } ,
+        { 367314029, 10, -10 } ,
+        { 757417822, 10, -10 } ,
+        { 617199419, 10, -10 } ,
+        { 383165135, 10, -10 } ,
+        { 333370859, 10, -10 } ,
+        { 358569543, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 987263141, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 610431247, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 476963122, 10, -11 } ,
+        { 101746549, 10, -9 } ,
+        { 183350925, 10, -9 } ,
+        { 459139222, 10, -10 } ,
+        { 129064916, 10, -9 } ,
+        { 124134623, 10, -10 } ,
+        { 138778066, 10, -10 } ,
+        { 690723178, 10, -10 } ,
+        { 275017555, 10, -10 } ,
+        { 875727939, 10, -11 } ,
+        { 281735548, 10, -10 } ,
+        { 202707847, 10, -10 } ,
+        { 760859366, 10, -10 } ,
+        { 120607096, 10, -9 } ,
+        { 431495355, 10, -10 } ,
+        { 277131879, 10, -10 } ,
+        { 199804033, 10, -10 } ,
+        { 435261503, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 230696441, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 120279138, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 655013019, 10, -11 } ,
+        { 326994242, 10, -10 } ,
+        { 14416255, 10, -8 } ,
+        { 113417356, 10, -10 } ,
+        { 397067487, 10, -10 } ,
+        { 126176073, 10, -10 } ,
+        { 280330811, 10, -10 } ,
+        { 474707015, 10, -10 } ,
+        { 413610216, 10, -10 } ,
+        { 147308615, 10, -10 } ,
+        { 489097726, 10, -10 } ,
+        { 217095492, 10, -10 } ,
+        { 141362352, 10, -9 } ,
+        { 106623778, 10, -9 } ,
+        { 851229774, 10, -10 } ,
+        { 350811058, 10, -10 } ,
+        { 701099256, 10, -10 } ,
+        { 375416475, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 122555783, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 63000171, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 578949141, 10, -11 } ,
+        { 244517534, 10, -10 } ,
+        { 5610681, 10, -8 } ,
+        { 275715069, 10, -10 } ,
+        { 35143833, 10, -8 } ,
+        { 87350744, 10, -10 } ,
+        { 34693054, 10, -9 } ,
+        { 940084526, 10, -10 } ,
+        { 549718693, 10, -10 } ,
+        { 215111853, 10, -10 } ,
+        { 391584121, 10, -10 } ,
+        { 180215961, 10, -10 } ,
+        { 231165651, 10, -10 } ,
+        { 510641048, 10, -10 } ,
+        { 425057729, 10, -10 } ,
+        { 494150865, 10, -10 } ,
+        { 249797484, 10, -10 } ,
+        { 393108608, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 11185898, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 126498353, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 143925783, 10, -10 } ,
+        { 183773659, 10, -10 } ,
+        { 322872504, 10, -10 } ,
+        { 364886468, 10, -10 } ,
+        { 69865455, 10, -9 } ,
+        { 13562522, 10, -9 } ,
+        { 304771922, 10, -10 } ,
+        { 699416379, 10, -10 } ,
+        { 848127968, 10, -10 } ,
+        { 123024095, 10, -10 } ,
+        { 19839534, 10, -9 } ,
+        { 178703578, 10, -10 } ,
+        { 486263334, 10, -10 } ,
+        { 165753965, 10, -9 } ,
+        { 40034077, 10, -9 } ,
+        { 281269012, 10, -10 } ,
+        { 304682628, 10, -10 } ,
+        { 223200969, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 116631344, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 3279151, 10, -8 } ,
+        { 0, 10, 0 } ,
+        { 462382531, 10, -11 } ,
+        { 215484058, 10, -10 } ,
+        { 434277571, 10, -10 } ,
+        { 261483794, 10, -10 } ,
+        { 213477755, 10, -10 } ,
+        { 172231653, 10, -10 } ,
+        { 137260424, 10, -10 } ,
+        { 103392278, 10, -9 } ,
+        { 266905912, 10, -10 } ,
+        { 938826416, 10, -11 } ,
+        { 232806908, 10, -10 } ,
+        { 172990152, 10, -10 } ,
+        { 211320261, 10, -9 } ,
+        { 222860369, 10, -9 } ,
+        { 406950698, 10, -10 } ,
+        { 149904204, 10, -9 } ,
+        { 205099762, 10, -10 } ,
+        { 345719866, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 117217896, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 297088208, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 358026551, 10, -11 } ,
+        { 197005575, 10, -10 } ,
+        { 391178337, 10, -10 } ,
+        { 774685382, 10, -11 } ,
+        { 205448968, 10, -10 } ,
+        { 949963603, 10, -11 } ,
+        { 124866705, 10, -10 } ,
+        { 386596539, 10, -9 } ,
+        { 24157251, 10, -9 } ,
+        { 232172358, 10, -10 } ,
+        { 209269679, 10, -10 } ,
+        { 168309251, 10, -10 } ,
+        { 621558626, 10, -10 } ,
+        { 237523579, 10, -9 } ,
+        { 322281722, 10, -10 } ,
+        { 233105452, 10, -10 } ,
+        { 302884934, 10, -10 } ,
+        { 268375534, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 929185091, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 298915619, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 638880908, 10, -11 } ,
+        { 116925705, 10, -10 } ,
+        { 174170506, 10, -10 } ,
+        { 633544475, 10, -10 } ,
+        { 276157577, 10, -10 } ,
+        { 133806383, 10, -10 } ,
+        { 627954666, 10, -10 } ,
+        { 172047941, 10, -10 } ,
+        { 217395927, 10, -9 } ,
+        { 15733418, 10, -9 } ,
+        { 120369539, 10, -10 } ,
+        { 125865975, 10, -10 } ,
+        { 140160277, 10, -10 } ,
+        { 157307562, 10, -10 } ,
+        { 386051993, 10, -10 } ,
+        { 237369782, 10, -10 } ,
+        { 875369654, 10, -10 } ,
+        { 978720354, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 276129227, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 948353356, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 237161571, 10, -10 } ,
+        { 124941807, 10, -10 } ,
+        { 178570506, 10, -10 } ,
+        { 125387121, 10, -9 } ,
+        { 410491814, 10, -10 } ,
+        { 68099301, 10, -10 } ,
+        { 765357665, 10, -10 } ,
+        { 186186761, 10, -10 } ,
+        { 290449395, 10, -9 } ,
+        { 215165697, 10, -10 } ,
+        { 118314161, 10, -10 } ,
+        { 144801388, 10, -10 } ,
+        { 140233658, 10, -10 } ,
+        { 234913738, 10, -10 } ,
+        { 291566022, 10, -10 } ,
+        { 334351582, 10, -10 } ,
+        { 770501498, 10, -10 } ,
+        { 597037063, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 226316403, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 167109947, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 861586638, 10, -11 } ,
+        { 222140424, 10, -10 } ,
+        { 401868467, 10, -10 } ,
+        { 117174383, 10, -10 } ,
+        { 798695427, 10, -10 } ,
+        { 774765283, 10, -11 } ,
+        { 241399438, 10, -10 } ,
+        { 273077468, 10, -10 } ,
+        { 488813533, 10, -10 } ,
+        { 18325079, 10, -9 } ,
+        { 237817015, 10, -10 } ,
+        { 214191498, 10, -10 } ,
+        { 206674005, 10, -10 } ,
+        { 203058194, 10, -10 } ,
+        { 135421973, 10, -9 } ,
+        { 268920674, 10, -9 } ,
+        { 592068329, 10, -10 } ,
+        { 343448839, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 109281132, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 644479047, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 869183592, 10, -11 } ,
+        { 135548155, 10, -10 } ,
+        { 196257078, 10, -10 } ,
+        { 529260225, 10, -10 } ,
+        { 352756255, 10, -10 } ,
+        { 635988147, 10, -11 } ,
+        { 159082671, 10, -9 } ,
+        { 423712329, 10, -10 } ,
+        { 212148498, 10, -9 } ,
+        { 396186944, 10, -10 } ,
+        { 124723874, 10, -10 } ,
+        { 15521052, 10, -9 } ,
+        { 157513265, 10, -10 } ,
+        { 185704758, 10, -10 } ,
+        { 280460531, 10, -10 } ,
+        { 317481833, 10, -10 } ,
+        { 158635363, 10, -9 } ,
+        { 471470581, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 171250108, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 917941468, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 203074754, 10, -10 } ,
+        { 156673822, 10, -10 } ,
+        { 206290511, 10, -10 } ,
+        { 577839787, 10, -10 } ,
+        { 926646531, 10, -10 } ,
+        { 678048028, 10, -11 } ,
+        { 117312157, 10, -9 } ,
+        { 208518583, 10, -10 } ,
+        { 149897962, 10, -9 } ,
+        { 196115921, 10, -10 } ,
+        { 145951979, 10, -10 } ,
+        { 557617925, 10, -10 } ,
+        { 154159664, 10, -10 } ,
+        { 166281036, 10, -10 } ,
+        { 37839221, 10, -9 } ,
+        { 337629283, 10, -10 } ,
+        { 160314634, 10, -9 } ,
+        { 485957133, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 177556942, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 502147261, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 688742734, 10, -11 } ,
+        { 100715551, 10, -10 } ,
+        { 150058922, 10, -10 } ,
+        { 143114297, 10, -9 } ,
+        { 161415366, 10, -10 } ,
+        { 632170761, 10, -11 } ,
+        { 951472415, 10, -10 } ,
+        { 152930879, 10, -10 } ,
+        { 273835537, 10, -9 } ,
+        { 698424712, 10, -10 } ,
+        { 956016412, 10, -11 } ,
+        { 116838231, 10, -10 } ,
+        { 129004042, 10, -10 } ,
+        { 142060415, 10, -10 } ,
+        { 214292656, 10, -10 } ,
+        { 228877031, 10, -10 } ,
+        { 515921535, 10, -10 } ,
+        { 907165489, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 254763647, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 388558643, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 677290258, 10, -10 } ,
+        { 165825272, 10, -10 } ,
+        { 241531359, 10, -10 } ,
+        { 125540035, 10, -10 } ,
+        { 556273732, 10, -10 } ,
+        { 726690111, 10, -11 } ,
+        { 524739051, 10, -10 } ,
+        { 233879044, 10, -10 } ,
+        { 353820367, 10, -10 } ,
+        { 988092546, 10, -11 } ,
+        { 162226818, 10, -10 } ,
+        { 200456717, 10, -10 } ,
+        { 171488161, 10, -10 } ,
+        { 170015533, 10, -10 } ,
+        { 748632202, 10, -10 } ,
+        { 907261705, 10, -10 } ,
+        { 437589872, 10, -10 } ,
+        { 361296514, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 275920502, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 542169101, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 336587569, 10, -10 } ,
+        { 132512753, 10, -10 } ,
+        { 178407895, 10, -10 } ,
+        { 124184765, 10, -9 } ,
+        { 188943476, 10, -10 } ,
+        { 682647252, 10, -11 } ,
+        { 134699989, 10, -9 } ,
+        { 180372913, 10, -10 } ,
+        { 222434946, 10, -9 } ,
+        { 268305362, 10, -10 } ,
+        { 126745556, 10, -10 } ,
+        { 146816764, 10, -10 } ,
+        { 138562558, 10, -10 } ,
+        { 157594266, 10, -10 } ,
+        { 441439826, 10, -10 } ,
+        { 511759563, 10, -10 } ,
+        { 101562268, 10, -9 } ,
+        { 601660311, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 237002469, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 468376173, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 810433708, 10, -11 } ,
+        { 150452747, 10, -10 } ,
+        { 301852741, 10, -10 } ,
+        { 629587254, 10, -10 } ,
+        { 117890319, 10, -9 } ,
+        { 627160437, 10, -11 } ,
+        { 172836329, 10, -9 } ,
+        { 186613302, 10, -10 } ,
+        { 161455142, 10, -9 } ,
+        { 262759529, 10, -10 } ,
+        { 135815013, 10, -10 } ,
+        { 148194607, 10, -10 } ,
+        { 143458029, 10, -10 } ,
+        { 151828348, 10, -10 } ,
+        { 278158032, 10, -10 } ,
+        { 300352892, 10, -10 } ,
+        { 155434371, 10, -9 } ,
+        { 469395111, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 171207309, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 532499116, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 370136212, 10, -11 } ,
+        { 248103056, 10, -10 } ,
+        { 14886055, 10, -8 } ,
+        { 211292574, 10, -10 } ,
+        { 191124532, 10, -10 } ,
+        { 110573166, 10, -10 } ,
+        { 11211082, 10, -9 } ,
+        { 382798789, 10, -10 } ,
+        { 408156991, 10, -10 } ,
+        { 89878358, 10, -10 } ,
+        { 20129265, 10, -9 } ,
+        { 159240994, 10, -10 } ,
+        { 466214282, 10, -9 } ,
+        { 300386696, 10, -10 } ,
+        { 337037917, 10, -10 } ,
+        { 52433255, 10, -9 } ,
+        { 165304847, 10, -10 } ,
+        { 31980049, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 983416644, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 28784064, 10, -8 } ,
+        { 0, 10, 0 } ,
+        { 842371073, 10, -11 } ,
+        { 213498044, 10, -10 } ,
+        { 285454515, 10, -10 } ,
+        { 119311466, 10, -10 } ,
+        { 111699358, 10, -9 } ,
+        { 845619225, 10, -11 } ,
+        { 280966326, 10, -10 } ,
+        { 27353614, 10, -9 } ,
+        { 289471494, 10, -10 } ,
+        { 883669215, 10, -11 } ,
+        { 223603919, 10, -10 } ,
+        { 212464243, 10, -10 } ,
+        { 200971524, 10, -10 } ,
+        { 279393576, 10, -10 } ,
+        { 245756208, 10, -9 } ,
+        { 396691974, 10, -10 } ,
+        { 411929282, 10, -10 } ,
+        { 354936624, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 272772182, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 809362258, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 931807104, 10, -11 } ,
+        { 167074327, 10, -10 } ,
+        { 297327699, 10, -10 } ,
+        { 607524451, 10, -10 } ,
+        { 340129192, 10, -10 } ,
+        { 785289737, 10, -11 } ,
+        { 147065439, 10, -9 } ,
+        { 220066525, 10, -10 } ,
+        { 157525597, 10, -9 } ,
+        { 206503714, 10, -10 } ,
+        { 157900464, 10, -10 } ,
+        { 177575297, 10, -10 } ,
+        { 168649277, 10, -10 } ,
+        { 179608751, 10, -10 } ,
+        { 429973494, 10, -10 } ,
+        { 955828482, 10, -10 } ,
+        { 131215929, 10, -9 } ,
+        { 554921369, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 369400078, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 141989963, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 879115799, 10, -11 } ,
+        { 212707027, 10, -10 } ,
+        { 258292101, 10, -10 } ,
+        { 271732886, 10, -10 } ,
+        { 232456275, 10, -9 } ,
+        { 792928621, 10, -11 } ,
+        { 588456915, 10, -10 } ,
+        { 258216143, 10, -10 } ,
+        { 61654873, 10, -9 } ,
+        { 173644605, 10, -10 } ,
+        { 215214244, 10, -10 } ,
+        { 586187844, 10, -10 } ,
+        { 18716428, 10, -9 } ,
+        { 190395099, 10, -10 } ,
+        { 759075243, 10, -10 } ,
+        { 487186763, 10, -10 } ,
+        { 11269974, 10, -8 } ,
+        { 428688931, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 132592013, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 453818167, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 826188057, 10, -11 } ,
+        { 1662583, 10, -8 } ,
+        { 353313126, 10, -10 } ,
+        { 596225113, 10, -10 } ,
+        { 203514156, 10, -10 } ,
+        { 11052454, 10, -9 } ,
+        { 135330496, 10, -9 } ,
+        { 239555808, 10, -10 } ,
+        { 128255171, 10, -9 } ,
+        { 606191893, 10, -10 } ,
+        { 155459033, 10, -10 } ,
+        { 16675846, 10, -9 } ,
+        { 456757586, 10, -10 } ,
+        { 203451267, 10, -10 } ,
+        { 321502439, 10, -10 } ,
+        { 581369968, 10, -10 } ,
+        { 11374046, 10, -8 } ,
+        { 271551723, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 943992843, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 117293343, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 89796754, 10, -10 } ,
+        { 166043642, 10, -10 } ,
+        { 227878798, 10, -10 } ,
+        { 265791906, 10, -10 } ,
+        { 365167521, 10, -10 } ,
+        { 645442047, 10, -11 } ,
+        { 883015516, 10, -10 } ,
+        { 221387151, 10, -10 } ,
+        { 659951075, 10, -10 } ,
+        { 148994327, 10, -10 } ,
+        { 167331269, 10, -10 } ,
+        { 178534307, 10, -10 } ,
+        { 164411363, 10, -10 } ,
+        { 224517385, 10, -10 } ,
+        { 124711873, 10, -9 } ,
+        { 651774535, 10, -10 } ,
+        { 277942631, 10, -9 } ,
+        { 34449301, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 132461859, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 787123668, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 932770191, 10, -11 } ,
+        { 190030999, 10, -10 } ,
+        { 261844901, 10, -10 } ,
+        { 939065809, 10, -10 } ,
+        { 417170378, 10, -10 } ,
+        { 100573089, 10, -10 } ,
+        { 682407598, 10, -10 } ,
+        { 253595197, 10, -10 } ,
+        { 198347823, 10, -9 } ,
+        { 454775753, 10, -10 } ,
+        { 30743301, 10, -9 } ,
+        { 189891439, 10, -10 } ,
+        { 291169904, 10, -10 } ,
+        { 218164516, 10, -10 } ,
+        { 580791179, 10, -10 } ,
+        { 533436176, 10, -10 } ,
+        { 749475231, 10, -10 } ,
+        { 265355113, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 410584331, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 627626284, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 845687316, 10, -11 } ,
+        { 250654304, 10, -10 } ,
+        { 305418526, 10, -10 } ,
+        { 353255126, 10, -10 } ,
+        { 155940026, 10, -9 } ,
+        { 107226614, 10, -10 } ,
+        { 536558568, 10, -10 } ,
+        { 30298977, 10, -9 } ,
+        { 723639465, 10, -10 } ,
+        { 13374127, 10, -9 } ,
+        { 434389792, 10, -10 } ,
+        { 363823357, 10, -10 } ,
+        { 321283969, 10, -10 } ,
+        { 32945286, 10, -9 } ,
+        { 971661868, 10, -10 } ,
+        { 121429313, 10, -9 } ,
+        { 450009705, 10, -10 } ,
+        { 590683351, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 420264541, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 875499356, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 249450085, 10, -10 } ,
+        { 207579851, 10, -10 } ,
+        { 247447495, 10, -10 } ,
+        { 772007782, 10, -10 } ,
+        { 195622845, 10, -9 } ,
+        { 903860133, 10, -11 } ,
+        { 519823376, 10, -10 } ,
+        { 259082186, 10, -10 } ,
+        { 182483754, 10, -9 } ,
+        { 179325519, 10, -10 } ,
+        { 292609429, 10, -10 } ,
+        { 199210789, 10, -10 } ,
+        { 188885957, 10, -10 } ,
+        { 325533864, 10, -10 } ,
+        { 405158773, 10, -10 } ,
+        { 353501663, 10, -10 } ,
+        { 427878582, 10, -10 } ,
+        { 209698708, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 208361406, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 81023738, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 995636507, 10, -11 } ,
+        { 374355846, 10, -10 } ,
+        { 415889305, 10, -10 } ,
+        { 232018716, 10, -10 } ,
+        { 945455314, 10, -10 } ,
+        { 153801072, 10, -10 } ,
+        { 428354206, 10, -10 } ,
+        { 403816011, 10, -10 } ,
+        { 61700549, 10, -9 } ,
+        { 469665525, 10, -10 } ,
+        { 109109639, 10, -9 } ,
+        { 963476791, 10, -10 } ,
+        { 357596045, 10, -10 } ,
+        { 437573361, 10, -10 } ,
+        { 878610961, 10, -10 } ,
+        { 571006382, 10, -10 } ,
+        { 450347187, 10, -10 } ,
+        { 692907471, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 413825864, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 548772585, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 863563903, 10, -11 } ,
+        { 264075933, 10, -10 } ,
+        { 301951615, 10, -10 } ,
+        { 794953646, 10, -10 } ,
+        { 523415056, 10, -10 } ,
+        { 25895084, 10, -9 } ,
+        { 555181526, 10, -10 } ,
+        { 294360001, 10, -10 } ,
+        { 117512632, 10, -9 } ,
+        { 212743253, 10, -10 } ,
+        { 870231993, 10, -10 } ,
+        { 206438621, 10, -10 } ,
+        { 230704893, 10, -10 } ,
+        { 326479576, 10, -10 } ,
+        { 58767462, 10, -9 } ,
+        { 445092952, 10, -10 } ,
+        { 718555335, 10, -10 } ,
+        { 246896566, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 115538652, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 95443967, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 819241333, 10, -11 } ,
+        { 284172591, 10, -10 } ,
+        { 412708844, 10, -10 } ,
+        { 206932117, 10, -10 } ,
+        { 203440602, 10, -9 } ,
+        { 122764696, 10, -10 } ,
+        { 264058084, 10, -10 } ,
+        { 600603144, 10, -10 } ,
+        { 643817218, 10, -10 } ,
+        { 3013838, 10, -8 } ,
+        { 401242387, 10, -10 } ,
+        { 443156603, 10, -10 } ,
+        { 737085999, 10, -10 } ,
+        { 804556337, 10, -10 } ,
+        { 648969052, 10, -10 } ,
+        { 465006386, 10, -10 } ,
+        { 49091918, 10, -9 } ,
+        { 531674125, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 186769874, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 702297703, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 63864632, 10, -10 } ,
+        { 649478032, 10, -10 } ,
+        { 524264241, 10, -10 } ,
+        { 263402928, 10, -10 } ,
+        { 18883427, 10, -8 } ,
+        { 105923991, 10, -10 } ,
+        { 162096513, 10, -10 } ,
+        { 523058412, 10, -10 } ,
+        { 331006061, 10, -10 } ,
+        { 904825727, 10, -11 } ,
+        { 348600049, 10, -10 } ,
+        { 170861288, 10, -9 } ,
+        { 460316263, 10, -10 } ,
+        { 889000991, 10, -10 } ,
+        { 919409733, 10, -10 } ,
+        { 335917458, 10, -10 } ,
+        { 269223383, 10, -10 } ,
+        { 405493524, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 124582174, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 102878322, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 873383302, 10, -11 } ,
+        { 217225573, 10, -10 } ,
+        { 308324483, 10, -10 } ,
+        { 4934614, 10, -8 } ,
+        { 376139774, 10, -10 } ,
+        { 122035165, 10, -10 } ,
+        { 583511529, 10, -10 } ,
+        { 371655136, 10, -10 } ,
+        { 997024128, 10, -10 } ,
+        { 157115476, 10, -10 } ,
+        { 290954548, 10, -10 } ,
+        { 157739587, 10, -9 } ,
+        { 32764144, 10, -9 } ,
+        { 234097214, 10, -10 } ,
+        { 601782826, 10, -10 } ,
+        { 665655617, 10, -10 } ,
+        { 789690333, 10, -10 } ,
+        { 721833528, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 839993595, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 118118121, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 108038857, 10, -10 } ,
+        { 235259286, 10, -10 } ,
+        { 322972114, 10, -10 } ,
+        { 469814606, 10, -10 } ,
+        { 834315523, 10, -10 } ,
+        { 107390784, 10, -10 } ,
+        { 848389372, 10, -10 } ,
+        { 367352813, 10, -10 } ,
+        { 106948137, 10, -9 } ,
+        { 191976539, 10, -10 } ,
+        { 229203365, 10, -10 } ,
+        { 373994336, 10, -10 } ,
+        { 285542857, 10, -10 } ,
+        { 340049575, 10, -10 } ,
+        { 842549149, 10, -10 } ,
+        { 49889583, 10, -9 } ,
+        { 112974786, 10, -9 } ,
+        { 63770888, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 357321341, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 770063694, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 963609815, 10, -11 } ,
+        { 592850378, 10, -10 } ,
+        { 509044829, 10, -10 } ,
+        { 709769097, 10, -10 } ,
+        { 100125996, 10, -9 } ,
+        { 112673606, 10, -10 } ,
+        { 785832223, 10, -10 } ,
+        { 360999504, 10, -10 } ,
+        { 838159689, 10, -10 } ,
+        { 253494419, 10, -10 } ,
+        { 398299623, 10, -10 } ,
+        { 356620403, 10, -10 } ,
+        { 302374535, 10, -10 } ,
+        { 31330105, 10, -9 } ,
+        { 822237596, 10, -10 } ,
+        { 516707361, 10, -10 } ,
+        { 840543137, 10, -10 } ,
+        { 630020129, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 234274602, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 399311635, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 700036583, 10, -11 } ,
+        { 156551217, 10, -9 } ,
+        { 663639197, 10, -10 } ,
+        { 15973473, 10, -9 } ,
+        { 452183879, 10, -10 } ,
+        { 181699133, 10, -10 } ,
+        { 658795214, 10, -10 } ,
+        { 324789214, 10, -10 } ,
+        { 941469382, 10, -10 } ,
+        { 26600902, 10, -9 } ,
+        { 142957929, 10, -9 } ,
+        { 526347685, 10, -10 } ,
+        { 326171459, 10, -10 } ,
+        { 250000722, 10, -10 } ,
+        { 602029271, 10, -10 } ,
+        { 490877723, 10, -10 } ,
+        { 5808101, 10, -8 } ,
+        { 377421393, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 12970601, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 615588591, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 688980103, 10, -11 } ,
+        { 993777358, 10, -10 } ,
+        { 3514122, 10, -8 } ,
+        { 218081211, 10, -10 } ,
+        { 15837724, 10, -8 } ,
+        { 909478705, 10, -11 } ,
+        { 242186277, 10, -10 } ,
+        { 358576822, 10, -10 } ,
+        { 706339539, 10, -10 } ,
+        { 11036233, 10, -9 } ,
+        { 291167416, 10, -10 } ,
+        { 149383843, 10, -9 } ,
+        { 316051325, 10, -10 } ,
+        { 267497936, 10, -10 } ,
+        { 587993043, 10, -10 } ,
+        { 34763248, 10, -9 } ,
+        { 56059589, 10, -9 } ,
+        { 835825853, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 207548261, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 84555073, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 845712612, 10, -11 } ,
+        { 709077402, 10, -10 } ,
+        { 386517033, 10, -10 } ,
+        { 41358786, 10, -9 } ,
+        { 147052687, 10, -9 } ,
+        { 126086541, 10, -10 } ,
+        { 425447413, 10, -10 } ,
+        { 335932813, 10, -10 } ,
+        { 580829899, 10, -10 } ,
+        { 283711632, 10, -10 } ,
+        { 904361176, 10, -10 } ,
+        { 461378269, 10, -10 } ,
+        { 341282271, 10, -10 } ,
+        { 256442992, 10, -10 } ,
+        { 972947147, 10, -10 } ,
+        { 747590437, 10, -10 } ,
+        { 410777355, 10, -10 } ,
+        { 543114095, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 305392348, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 681761127, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 869534854, 10, -11 } ,
+        { 206029268, 10, -10 } ,
+        { 267437095, 10, -10 } ,
+        { 954948155, 10, -10 } ,
+        { 905185627, 10, -10 } ,
+        { 999702588, 10, -11 } ,
+        { 834661613, 10, -10 } ,
+        { 258077973, 10, -10 } ,
+        { 105869698, 10, -9 } ,
+        { 169772214, 10, -10 } ,
+        { 206796146, 10, -10 } ,
+        { 828068176, 10, -10 } ,
+        { 245575008, 10, -10 } ,
+        { 203470463, 10, -10 } ,
+        { 903673649, 10, -10 } ,
+        { 598823053, 10, -10 } ,
+        { 68412671, 10, -9 } ,
+        { 275525433, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 458713398, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 76796074, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 989507477, 10, -11 } ,
+        { 242129072, 10, -10 } ,
+        { 363128663, 10, -10 } ,
+        { 654570175, 10, -10 } ,
+        { 758209589, 10, -10 } ,
+        { 117209582, 10, -10 } ,
+        { 802880209, 10, -10 } ,
+        { 338548839, 10, -10 } ,
+        { 123031009, 10, -9 } ,
+        { 280403791, 10, -10 } ,
+        { 358848414, 10, -10 } ,
+        { 282415128, 10, -10 } ,
+        { 377494326, 10, -10 } ,
+        { 43689719, 10, -9 } ,
+        { 63747989, 10, -9 } ,
+        { 730902237, 10, -10 } ,
+        { 859959532, 10, -10 } ,
+        { 699684667, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 394663205, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 383986496, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 526023391, 10, -10 } ,
+        { 372243315, 10, -10 } ,
+        { 422315063, 10, -10 } ,
+        { 18721268, 10, -8 } ,
+        { 218318129, 10, -10 } ,
+        { 266052717, 10, -10 } ,
+        { 83729054, 10, -9 } ,
+        { 210375495, 10, -10 } ,
+        { 103597878, 10, -9 } ,
+        { 162332772, 10, -10 } ,
+        { 175801838, 10, -10 } ,
+        { 158771309, 10, -10 } ,
+        { 170839935, 10, -10 } ,
+        { 177859263, 10, -10 } ,
+        { 605989075, 10, -10 } ,
+        { 563908638, 10, -10 } ,
+        { 84322066, 10, -9 } ,
+        { 140315944, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 482927266, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 857406209, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 224932609, 10, -10 } ,
+        { 210212225, 10, -10 } ,
+        { 380025934, 10, -10 } ,
+        { 3547043, 10, -8 } ,
+        { 426823409, 10, -10 } ,
+        { 144126143, 10, -10 } ,
+        { 675185466, 10, -10 } ,
+        { 390576473, 10, -10 } ,
+        { 107397742, 10, -9 } ,
+        { 307770315, 10, -10 } ,
+        { 205127408, 10, -10 } ,
+        { 365643127, 10, -10 } ,
+        { 44906807, 10, -9 } ,
+        { 302101931, 10, -10 } ,
+        { 620434566, 10, -10 } ,
+        { 559788132, 10, -10 } ,
+        { 819106823, 10, -10 } ,
+        { 324840959, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 119225732, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 775103898, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 18952567, 10, -9 } ,
+        { 126976767, 10, -10 } ,
+        { 17672127, 10, -9 } ,
+        { 116718769, 10, -9 } ,
+        { 339768466, 10, -10 } ,
+        { 667085091, 10, -11 } ,
+        { 124046461, 10, -9 } ,
+        { 178141643, 10, -10 } ,
+        { 213118879, 10, -9 } ,
+        { 213694161, 10, -10 } ,
+        { 117384793, 10, -10 } ,
+        { 147303732, 10, -10 } ,
+        { 136280472, 10, -10 } ,
+        { 154873381, 10, -10 } ,
+        { 284874102, 10, -10 } ,
+        { 344603897, 10, -10 } ,
+        { 128557811, 10, -9 } ,
+        { 239325663, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 239926138, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 447887764, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 850057957, 10, -11 } ,
+        { 182000089, 10, -10 } ,
+        { 527455375, 10, -10 } ,
+        { 460447954, 10, -10 } ,
+        { 195136523, 10, -10 } ,
+        { 776412189, 10, -11 } ,
+        { 105511322, 10, -9 } ,
+        { 347565293, 10, -10 } ,
+        { 251888105, 10, -9 } ,
+        { 388042742, 10, -10 } ,
+        { 158135932, 10, -10 } ,
+        { 170771115, 10, -10 } ,
+        { 430019461, 10, -10 } ,
+        { 216303457, 10, -10 } ,
+        { 341385272, 10, -10 } ,
+        { 834170783, 10, -10 } ,
+        { 105868747, 10, -9 } ,
+        { 498094091, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 169948958, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 822881267, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 963933856, 10, -11 } ,
+        { 331036797, 10, -10 } ,
+        { 254418557, 10, -10 } ,
+        { 244522667, 10, -10 } ,
+        { 252682085, 10, -10 } ,
+        { 821878605, 10, -11 } ,
+        { 144858389, 10, -9 } ,
+        { 242035178, 10, -10 } ,
+        { 146030435, 10, -9 } ,
+        { 51990153, 10, -9 } ,
+        { 185485996, 10, -10 } ,
+        { 193192776, 10, -10 } ,
+        { 190245617, 10, -10 } ,
+        { 195806648, 10, -10 } ,
+        { 698761524, 10, -10 } ,
+        { 93740337, 10, -9 } ,
+        { 121383489, 10, -9 } ,
+        { 499370555, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 321675752, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 889692638, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 219418166, 10, -10 } ,
+        { 16977821, 10, -9 } ,
+        { 213438452, 10, -10 } ,
+        { 450010219, 10, -10 } ,
+        { 318586932, 10, -10 } ,
+        { 674345107, 10, -11 } ,
+        { 17803841, 10, -8 } ,
+        { 210885806, 10, -10 } ,
+        { 845784353, 10, -10 } ,
+        { 176968544, 10, -10 } ,
+        { 301500665, 10, -10 } ,
+        { 299089689, 10, -10 } ,
+        { 156619814, 10, -10 } ,
+        { 165703756, 10, -10 } ,
+        { 653934419, 10, -10 } ,
+        { 697107107, 10, -10 } ,
+        { 188543445, 10, -9 } ,
+        { 409656664, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 158253602, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 844600323, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 864636458, 10, -11 } ,
+        { 137310275, 10, -10 } ,
+        { 217097575, 10, -10 } ,
+        { 634901115, 10, -10 } ,
+        { 197426071, 10, -10 } ,
+        { 678452194, 10, -11 } ,
+        { 137370339, 10, -9 } ,
+        { 20684299, 10, -9 } ,
+        { 243537695, 10, -9 } ,
+        { 224820427, 10, -10 } ,
+        { 124042576, 10, -10 } ,
+        { 155945231, 10, -10 } ,
+        { 432817744, 10, -10 } ,
+        { 17676484, 10, -9 } ,
+        { 294725333, 10, -10 } ,
+        { 353213888, 10, -10 } ,
+        { 142768226, 10, -9 } ,
+        { 493118025, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 179566707, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 110226833, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 170312709, 10, -10 } ,
+        { 223675963, 10, -10 } ,
+        { 424631306, 10, -10 } ,
+        { 137585409, 10, -10 } ,
+        { 274663115, 10, -10 } ,
+        { 102127392, 10, -10 } ,
+        { 457440649, 10, -10 } ,
+        { 351916125, 10, -10 } ,
+        { 909773281, 10, -10 } ,
+        { 142716509, 10, -10 } ,
+        { 221089275, 10, -10 } ,
+        { 200965948, 10, -10 } ,
+        { 191737494, 10, -9 } ,
+        { 279674306, 10, -10 } ,
+        { 883697376, 10, -10 } ,
+        { 103862118, 10, -9 } ,
+        { 101666132, 10, -9 } ,
+        { 14141079, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 12964501, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 370520143, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 707880302, 10, -11 } ,
+        { 952136071, 10, -11 } ,
+        { 14432869, 10, -9 } ,
+        { 506201841, 10, -10 } ,
+        { 135825923, 10, -10 } ,
+        { 538363909, 10, -11 } ,
+        { 872863881, 10, -10 } ,
+        { 153068843, 10, -10 } ,
+        { 43114469, 10, -8 } ,
+        { 105540347, 10, -9 } ,
+        { 901697854, 10, -11 } ,
+        { 11599677, 10, -9 } ,
+        { 131056077, 10, -10 } ,
+        { 1435768, 10, -8 } ,
+        { 197675288, 10, -10 } ,
+        { 237236506, 10, -10 } ,
+        { 742467529, 10, -10 } ,
+        { 451681455, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 145032976, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 922650515, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 8460038, 10, -9 } ,
+        { 166805175, 10, -10 } ,
+        { 223148536, 10, -10 } ,
+        { 77200332, 10, -9 } ,
+        { 230835797, 10, -10 } ,
+        { 681903293, 10, -11 } ,
+        { 851087327, 10, -10 } ,
+        { 219955611, 10, -10 } ,
+        { 736710051, 10, -10 } ,
+        { 355039342, 10, -10 } ,
+        { 179101517, 10, -10 } ,
+        { 177786297, 10, -10 } ,
+        { 165911261, 10, -10 } ,
+        { 174234379, 10, -10 } ,
+        { 468452352, 10, -10 } ,
+        { 244452791, 10, -9 } ,
+        { 144390883, 10, -9 } ,
+        { 44195878, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 169783134, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 17270701, 10, -8 } ,
+        { 0, 10, 0 } ,
+        { 953884894, 10, -11 } ,
+        { 19008654, 10, -9 } ,
+        { 258254222, 10, -10 } ,
+        { 615864909, 10, -10 } ,
+        { 753694381, 10, -10 } ,
+        { 79009225, 10, -10 } ,
+        { 598901281, 10, -10 } ,
+        { 254337044, 10, -10 } ,
+        { 127284497, 10, -9 } ,
+        { 20132914, 10, -9 } ,
+        { 196250554, 10, -10 } ,
+        { 20812842, 10, -9 } ,
+        { 189083516, 10, -10 } ,
+        { 197925582, 10, -10 } ,
+        { 626100067, 10, -10 } ,
+        { 148423901, 10, -9 } ,
+        { 770189159, 10, -10 } ,
+        { 492291309, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 17457472, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 132837522, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 519854851, 10, -11 } ,
+        { 182023883, 10, -10 } ,
+        { 186863815, 10, -10 } ,
+        { 746280747, 10, -11 } ,
+        { 562585923, 10, -9 } ,
+        { 608031437, 10, -11 } ,
+        { 938179963, 10, -11 } ,
+        { 196458175, 10, -10 } ,
+        { 165087272, 10, -10 } ,
+        { 547377854, 10, -11 } ,
+        { 199422357, 10, -10 } ,
+        { 388551301, 10, -10 } ,
+        { 136818038, 10, -10 } ,
+        { 135485852, 10, -10 } ,
+        { 784368922, 10, -10 } ,
+        { 222156441, 10, -10 } ,
+        { 152535022, 10, -10 } ,
+        { 292266743, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 67074614, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 126693159, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 170876107, 10, -10 } ,
+        { 23451555, 10, -9 } ,
+        { 285848496, 10, -10 } ,
+        { 116283943, 10, -10 } ,
+        { 163388638, 10, -9 } ,
+        { 809982504, 10, -11 } ,
+        { 199527748, 10, -10 } ,
+        { 275458071, 10, -10 } ,
+        { 579738839, 10, -10 } ,
+        { 100618847, 10, -10 } ,
+        { 260906252, 10, -10 } ,
+        { 215050099, 10, -10 } ,
+        { 204272073, 10, -10 } ,
+        { 204679639, 10, -10 } ,
+        { 187890417, 10, -9 } ,
+        { 206030937, 10, -9 } ,
+        { 303812514, 10, -10 } ,
+        { 35876244, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 106996218, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 730982369, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 172835711, 10, -10 } ,
+        { 123602314, 10, -10 } ,
+        { 181894203, 10, -10 } ,
+        { 595858997, 10, -10 } ,
+        { 187731839, 10, -10 } ,
+        { 845738263, 10, -11 } ,
+        { 153697334, 10, -9 } ,
+        { 190494384, 10, -10 } ,
+        { 136635042, 10, -9 } ,
+        { 125405603, 10, -9 } ,
+        { 121154569, 10, -10 } ,
+        { 216062402, 10, -10 } ,
+        { 160501822, 10, -10 } ,
+        { 162757547, 10, -10 } ,
+        { 280099006, 10, -10 } ,
+        { 351965056, 10, -10 } ,
+        { 113368865, 10, -9 } ,
+        { 609917078, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 719025941, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 313884373, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 741057529, 10, -11 } ,
+        { 108397039, 10, -10 } ,
+        { 146571433, 10, -10 } ,
+        { 168397873, 10, -9 } ,
+        { 145542501, 10, -10 } ,
+        { 608801436, 10, -11 } ,
+        { 166015154, 10, -9 } ,
+        { 149271339, 10, -10 } ,
+        { 219607236, 10, -9 } ,
+        { 253478787, 10, -10 } ,
+        { 983238283, 10, -11 } ,
+        { 19476054, 10, -9 } ,
+        { 113845078, 10, -10 } ,
+        { 134124266, 10, -10 } ,
+        { 21365314, 10, -9 } ,
+        { 304888094, 10, -10 } ,
+        { 135392859, 10, -9 } ,
+        { 59564317, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 248955156, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 570365499, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 259054574, 10, -10 } ,
+        { 130705152, 10, -10 } ,
+        { 183468541, 10, -10 } ,
+        { 227874728, 10, -10 } ,
+        { 259587117, 10, -10 } ,
+        { 576728761, 10, -11 } ,
+        { 114906954, 10, -9 } ,
+        { 186286692, 10, -10 } ,
+        { 252795853, 10, -9 } ,
+        { 32692735, 10, -9 } ,
+        { 125590291, 10, -10 } ,
+        { 153600173, 10, -10 } ,
+        { 145466134, 10, -10 } ,
+        { 159653642, 10, -10 } ,
+        { 356973572, 10, -10 } ,
+        { 698173806, 10, -10 } ,
+        { 192137988, 10, -9 } ,
+        { 414713528, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 139266996, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 313961632, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 705290302, 10, -11 } ,
+        { 109888753, 10, -10 } ,
+        { 159566122, 10, -10 } ,
+        { 208344654, 10, -10 } ,
+        { 147980635, 10, -10 } ,
+        { 57046724, 10, -10 } ,
+        { 168138507, 10, -9 } ,
+        { 172420092, 10, -10 } ,
+        { 201565919, 10, -9 } ,
+        { 212572448, 10, -9 } ,
+        { 112290394, 10, -10 } ,
+        { 125811686, 10, -10 } ,
+        { 152125014, 10, -10 } ,
+        { 149809328, 10, -10 } ,
+        { 247132249, 10, -10 } ,
+        { 774514307, 10, -10 } ,
+        { 895356451, 10, -10 } ,
+        { 390686658, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 121633918, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 190267055, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 145089381, 10, -10 } ,
+        { 709021186, 10, -11 } ,
+        { 117269755, 10, -10 } ,
+        { 974390201, 10, -10 } ,
+        { 132439102, 10, -10 } ,
+        { 652612244, 10, -11 } ,
+        { 404356947, 10, -10 } ,
+        { 110797501, 10, -10 } ,
+        { 168931582, 10, -9 } ,
+        { 109256919, 10, -10 } ,
+        { 706761165, 10, -11 } ,
+        { 809273311, 10, -11 } ,
+        { 101495356, 10, -10 } ,
+        { 10682736, 10, -9 } ,
+        { 149806634, 10, -10 } ,
+        { 150620771, 10, -10 } ,
+        { 351399858, 10, -10 } ,
+        { 376754321, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 104153065, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 284491042, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 701554362, 10, -11 } ,
+        { 420124764, 10, -10 } ,
+        { 16794166, 10, -9 } ,
+        { 833412309, 10, -10 } ,
+        { 141463754, 10, -10 } ,
+        { 576659823, 10, -11 } ,
+        { 1192066, 10, -7 } ,
+        { 156451674, 10, -10 } ,
+        { 387871277, 10, -9 } ,
+        { 646569569, 10, -10 } ,
+        { 107560679, 10, -10 } ,
+        { 11991648, 10, -9 } ,
+        { 129889736, 10, -10 } ,
+        { 143719666, 10, -10 } ,
+        { 203775614, 10, -10 } ,
+        { 23877503, 10, -9 } ,
+        { 579916173, 10, -10 } ,
+        { 49240717, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 171713789, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 969245945, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 235540132, 10, -10 } ,
+        { 198426905, 10, -9 } ,
+        { 654776057, 10, -10 } ,
+        { 868694928, 10, -11 } ,
+        { 283779054, 10, -9 } ,
+        { 834998585, 10, -11 } ,
+        { 121862761, 10, -10 } ,
+        { 26691894, 10, -9 } ,
+        { 203591, 10, -7 } ,
+        { 648963379, 10, -11 } ,
+        { 301933163, 10, -10 } ,
+        { 191553753, 10, -10 } ,
+        { 21068795, 10, -9 } ,
+        { 182867205, 10, -10 } ,
+        { 103721521, 10, -9 } ,
+        { 440064946, 10, -10 } ,
+        { 185610506, 10, -10 } ,
+        { 30059546, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 824180589, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 26391883, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 281201179, 10, -11 } ,
+        { 126988884, 10, -9 } ,
+        { 570974993, 10, -9 } ,
+        { 678805808, 10, -11 } ,
+        { 172672527, 10, -10 } ,
+        { 937901914, 10, -11 } ,
+        { 985450028, 10, -11 } ,
+        { 327647739, 10, -10 } ,
+        { 500581397, 10, -10 } ,
+        { 596470039, 10, -11 } ,
+        { 206018187, 10, -10 } ,
+        { 162068028, 10, -10 } ,
+        { 345719689, 10, -10 } ,
+        { 216784854, 10, -10 } ,
+        { 312034975, 10, -10 } ,
+        { 203737931, 10, -10 } ,
+        { 14214102, 10, -9 } ,
+        { 232226561, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 747394905, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 351851123, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 693289511, 10, -11 } ,
+        { 178226017, 10, -10 } ,
+        { 340290199, 10, -10 } ,
+        { 192312381, 10, -10 } ,
+        { 184721698, 10, -10 } ,
+        { 902255581, 10, -11 } ,
+        { 939003773, 10, -10 } ,
+        { 315636521, 10, -10 } ,
+        { 242423242, 10, -9 } ,
+        { 291846982, 10, -10 } ,
+        { 276693419, 10, -10 } ,
+        { 157858256, 10, -10 } ,
+        { 151831679, 10, -9 } ,
+        { 590248666, 10, -10 } ,
+        { 302161985, 10, -10 } ,
+        { 406191215, 10, -10 } ,
+        { 104744093, 10, -9 } ,
+        { 418954121, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 133105924, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 28526482, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 675253362, 10, -11 } ,
+        { 116982176, 10, -10 } ,
+        { 153994887, 10, -10 } ,
+        { 190543845, 10, -10 } ,
+        { 127634535, 10, -10 } ,
+        { 492627354, 10, -11 } ,
+        { 409506742, 10, -9 } ,
+        { 153235037, 10, -10 } ,
+        { 13134465, 10, -8 } ,
+        { 304979714, 10, -10 } ,
+        { 266972282, 10, -10 } ,
+        { 116072211, 10, -10 } ,
+        { 403246314, 10, -10 } ,
+        { 12603739, 10, -9 } ,
+        { 198013276, 10, -10 } ,
+        { 254631357, 10, -10 } ,
+        { 122160085, 10, -9 } ,
+        { 312127908, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 11225809, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 639525303, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 720407369, 10, -11 } ,
+        { 448893787, 10, -10 } ,
+        { 553757831, 10, -10 } ,
+        { 974136245, 10, -11 } ,
+        { 300499622, 10, -10 } ,
+        { 961843476, 10, -11 } ,
+        { 170873966, 10, -10 } ,
+        { 651950613, 10, -10 } ,
+        { 278881433, 10, -10 } ,
+        { 93185288, 10, -10 } ,
+        { 456351064, 10, -10 } ,
+        { 213964042, 10, -10 } ,
+        { 961022284, 10, -10 } ,
+        { 27096822, 10, -9 } ,
+        { 205477479, 10, -9 } ,
+        { 254881713, 10, -9 } ,
+        { 268542977, 10, -10 } ,
+        { 323225065, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 106194656, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 575785978, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 440373424, 10, -11 } ,
+        { 952703384, 10, -10 } ,
+        { 206243759, 10, -9 } ,
+        { 972580191, 10, -11 } ,
+        { 664536119, 10, -10 } ,
+        { 115791342, 10, -10 } ,
+        { 203419113, 10, -10 } ,
+        { 223999651, 10, -9 } ,
+        { 241226457, 10, -10 } ,
+        { 821125256, 10, -11 } ,
+        { 271511999, 10, -10 } ,
+        { 213682277, 10, -10 } ,
+        { 764995066, 10, -10 } ,
+        { 482917431, 10, -10 } ,
+        { 509916601, 10, -10 } ,
+        { 282245055, 10, -10 } ,
+        { 19656967, 10, -9 } ,
+        { 338747633, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 218556982, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 282885515, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 482224581, 10, -11 } ,
+        { 159210337, 10, -10 } ,
+        { 280908509, 10, -10 } ,
+        { 537161451, 10, -10 } ,
+        { 284313487, 10, -10 } ,
+        { 39557397, 10, -9 } ,
+        { 291440222, 10, -10 } ,
+        { 137332545, 10, -9 } ,
+        { 621445487, 10, -10 } ,
+        { 23547641, 10, -9 } ,
+        { 255297013, 10, -10 } ,
+        { 141562295, 10, -10 } ,
+        { 243843327, 10, -10 } ,
+        { 130597405, 10, -9 } ,
+        { 282173526, 10, -10 } ,
+        { 223313692, 10, -10 } ,
+        { 234337752, 10, -10 } ,
+        { 11799637, 10, -8 } ,
+        { 0, 10, 0 } ,
+        { 155567674, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 384864865, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 387518846, 10, -11 } ,
+        { 162479871, 10, -10 } ,
+        { 155574763, 10, -10 } ,
+        { 651337362, 10, -11 } ,
+        { 712148222, 10, -9 } ,
+        { 527771923, 10, -11 } ,
+        { 204323506, 10, -10 } ,
+        { 470071619, 10, -10 } ,
+        { 138763538, 10, -10 } ,
+        { 460581645, 10, -11 } ,
+        { 1831109, 10, -8 } ,
+        { 120694474, 10, -10 } ,
+        { 118893978, 10, -10 } ,
+        { 128917109, 10, -10 } ,
+        { 303881214, 10, -10 } ,
+        { 16550754, 10, -9 } ,
+        { 119393439, 10, -10 } ,
+        { 26539012, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 558106358, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 331078382, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 77950251, 10, -10 } ,
+        { 108403054, 10, -10 } ,
+        { 143338712, 10, -10 } ,
+        { 54544928, 10, -9 } ,
+        { 284960173, 10, -10 } ,
+        { 502444055, 10, -11 } ,
+        { 237290414, 10, -9 } ,
+        { 149537232, 10, -10 } ,
+        { 24529484, 10, -8 } ,
+        { 215305607, 10, -10 } ,
+        { 956531139, 10, -11 } ,
+        { 12535923, 10, -9 } ,
+        { 113821412, 10, -10 } ,
+        { 130201887, 10, -10 } ,
+        { 208933223, 10, -10 } ,
+        { 275589267, 10, -10 } ,
+        { 164533339, 10, -9 } ,
+        { 418927966, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 153909268, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 395527768, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 402936448, 10, -11 } ,
+        { 17079349, 10, -9 } ,
+        { 154066688, 10, -10 } ,
+        { 641687282, 10, -11 } ,
+        { 708995878, 10, -9 } ,
+        { 545751878, 10, -11 } ,
+        { 721729202, 10, -11 } ,
+        { 168359523, 10, -10 } ,
+        { 128844642, 10, -10 } ,
+        { 443452921, 10, -11 } ,
+        { 333019354, 10, -10 } ,
+        { 122455849, 10, -10 } ,
+        { 115945244, 10, -10 } ,
+        { 116442954, 10, -10 } ,
+        { 498368908, 10, -10 } ,
+        { 321038769, 10, -10 } ,
+        { 11092915, 10, -9 } ,
+        { 266316797, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 559749432, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 390998052, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 534907894, 10, -11 } ,
+        { 333195395, 10, -10 } ,
+        { 288284386, 10, -10 } ,
+        { 766912508, 10, -11 } ,
+        { 690298608, 10, -10 } ,
+        { 108264079, 10, -10 } ,
+        { 998470938, 10, -11 } ,
+        { 266997788, 10, -10 } ,
+        { 167285093, 10, -10 } ,
+        { 601936058, 10, -11 } ,
+        { 349016827, 10, -9 } ,
+        { 16078009, 10, -9 } ,
+        { 207419192, 10, -10 } ,
+        { 207300771, 10, -10 } ,
+        { 287576409, 10, -9 } ,
+        { 490468452, 10, -10 } ,
+        { 150930562, 10, -10 } ,
+        { 224729386, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 833486638, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 485150568, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 416815834, 10, -11 } ,
+        { 163071365, 10, -10 } ,
+        { 149907956, 10, -10 } ,
+        { 69816007, 10, -10 } ,
+        { 694977777, 10, -9 } ,
+        { 525713748, 10, -11 } ,
+        { 355323482, 10, -10 } ,
+        { 164911043, 10, -10 } ,
+        { 156965591, 10, -10 } ,
+        { 496352602, 10, -11 } ,
+        { 183836442, 10, -10 } ,
+        { 122294064, 10, -10 } ,
+        { 112982666, 10, -10 } ,
+        { 113588316, 10, -10 } ,
+        { 483167467, 10, -10 } ,
+        { 176645715, 10, -10 } ,
+        { 140259811, 10, -10 } ,
+        { 27075158, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 577700772, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 660115047, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 730879651, 10, -11 } ,
+        { 201520181, 10, -10 } ,
+        { 247641729, 10, -10 } ,
+        { 124359779, 10, -10 } ,
+        { 272135489, 10, -10 } ,
+        { 695087419, 10, -11 } ,
+        { 177368481, 10, -9 } ,
+        { 229658864, 10, -10 } ,
+        { 411277805, 10, -10 } ,
+        { 15635298, 10, -9 } ,
+        { 21423146, 10, -9 } ,
+        { 413725367, 10, -10 } ,
+        { 174299917, 10, -10 } ,
+        { 170840622, 10, -10 } ,
+        { 375959812, 10, -9 } ,
+        { 406188492, 10, -10 } ,
+        { 608086052, 10, -10 } ,
+        { 279996692, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 998722727, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 398252423, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 79476113, 10, -10 } ,
+        { 144474647, 10, -10 } ,
+        { 19498236, 10, -9 } ,
+        { 22493043, 10, -9 } ,
+        { 385279483, 10, -10 } ,
+        { 629549274, 10, -11 } ,
+        { 940311396, 10, -10 } ,
+        { 194609209, 10, -10 } ,
+        { 34561557, 10, -8 } ,
+        { 514742142, 10, -10 } ,
+        { 146228243, 10, -10 } ,
+        { 148997799, 10, -10 } ,
+        { 156940143, 10, -10 } ,
+        { 167909892, 10, -10 } ,
+        { 123155571, 10, -9 } ,
+        { 323086683, 10, -10 } ,
+        { 806158035, 10, -10 } ,
+        { 416914087, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 130255027, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 263475188, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 673778568, 10, -11 } ,
+        { 944055358, 10, -11 } ,
+        { 128518502, 10, -10 } ,
+        { 141249863, 10, -9 } ,
+        { 125294318, 10, -10 } ,
+        { 53544866, 10, -10 } ,
+        { 183374563, 10, -9 } ,
+        { 133841084, 10, -10 } ,
+        { 356916017, 10, -9 } ,
+        { 21421745, 10, -9 } ,
+        { 842201913, 10, -11 } ,
+        { 107890594, 10, -10 } ,
+        { 104179607, 10, -10 } ,
+        { 125252547, 10, -10 } ,
+        { 179469224, 10, -10 } ,
+        { 222531925, 10, -10 } ,
+        { 562932937, 10, -10 } ,
+        { 529016942, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 204080174, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 249599794, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 615277365, 10, -11 } ,
+        { 908229752, 10, -11 } ,
+        { 108967791, 10, -10 } ,
+        { 981436084, 10, -10 } ,
+        { 108668783, 10, -10 } ,
+        { 419691357, 10, -11 } ,
+        { 477520959, 10, -9 } ,
+        { 1166323, 10, -8 } ,
+        { 738471988, 10, -10 } ,
+        { 341638759, 10, -10 } ,
+        { 769442881, 10, -11 } ,
+        { 993897759, 10, -11 } ,
+        { 858505211, 10, -11 } ,
+        { 962977926, 10, -11 } ,
+        { 164035667, 10, -10 } ,
+        { 223124956, 10, -10 } ,
+        { 100032111, 10, -9 } ,
+        { 360845376, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 147351361, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 831365868, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 693390004, 10, -11 } ,
+        { 131923219, 10, -10 } ,
+        { 170961273, 10, -10 } ,
+        { 25852507, 10, -8 } ,
+        { 198339817, 10, -10 } ,
+        { 795567299, 10, -11 } ,
+        { 105562221, 10, -9 } ,
+        { 17005086, 10, -9 } ,
+        { 138391651, 10, -9 } ,
+        { 426074341, 10, -10 } ,
+        { 281103958, 10, -10 } ,
+        { 13127284, 10, -9 } ,
+        { 13037029, 10, -9 } ,
+        { 14858387, 10, -9 } ,
+        { 289439678, 10, -10 } ,
+        { 541401192, 10, -10 } ,
+        { 521329569, 10, -10 } ,
+        { 73761913, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 397565836, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 257770491, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 934362192, 10, -11 } ,
+        { 196659859, 10, -10 } ,
+        { 286951221, 10, -10 } ,
+        { 332439504, 10, -10 } ,
+        { 605539967, 10, -10 } ,
+        { 793067928, 10, -11 } ,
+        { 874418633, 10, -10 } ,
+        { 271292821, 10, -10 } ,
+        { 512463735, 10, -10 } ,
+        { 128606798, 10, -10 } ,
+        { 196799248, 10, -10 } ,
+        { 216305598, 10, -10 } ,
+        { 396971107, 10, -10 } ,
+        { 202466341, 10, -10 } ,
+        { 809289457, 10, -10 } ,
+        { 136842443, 10, -9 } ,
+        { 727664458, 10, -10 } ,
+        { 39422397, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 135440536, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 6912437, 10, -8 } ,
+        { 0, 10, 0 } ,
+        { 596050362, 10, -11 } ,
+        { 295051725, 10, -10 } ,
+        { 259891781, 10, -10 } ,
+        { 934440719, 10, -11 } ,
+        { 324434481, 10, -9 } ,
+        { 965248242, 10, -11 } ,
+        { 263927092, 10, -10 } ,
+        { 258165709, 10, -10 } ,
+        { 227952916, 10, -10 } ,
+        { 732601291, 10, -11 } ,
+        { 180177725, 10, -9 } ,
+        { 170617077, 10, -10 } ,
+        { 19111878, 10, -9 } ,
+        { 193253934, 10, -10 } ,
+        { 105393607, 10, -9 } ,
+        { 692877822, 10, -10 } ,
+        { 348843886, 10, -10 } ,
+        { 303768701, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 883054655, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 295763488, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 662025611, 10, -11 } ,
+        { 135820678, 10, -10 } ,
+        { 141051513, 10, -10 } ,
+        { 175825776, 10, -10 } ,
+        { 50372681, 10, -9 } ,
+        { 513097131, 10, -11 } ,
+        { 399483723, 10, -9 } ,
+        { 148019298, 10, -10 } ,
+        { 716453627, 10, -10 } ,
+        { 358793887, 10, -10 } ,
+        { 653178444, 10, -10 } ,
+        { 116130725, 10, -10 } ,
+        { 110905974, 10, -10 } ,
+        { 118757852, 10, -10 } ,
+        { 217740458, 10, -10 } ,
+        { 259931863, 10, -10 } ,
+        { 141075707, 10, -9 } ,
+        { 290617049, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 106925505, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 116736915, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 579852557, 10, -10 } ,
+        { 141924581, 10, -10 } ,
+        { 197403767, 10, -10 } ,
+        { 200169286, 10, -10 } ,
+        { 22759913, 10, -9 } ,
+        { 596552057, 10, -11 } ,
+        { 171819262, 10, -9 } ,
+        { 265754392, 10, -10 } ,
+        { 139599596, 10, -9 } ,
+        { 188855993, 10, -10 } ,
+        { 131362158, 10, -10 } ,
+        { 167354145, 10, -10 } ,
+        { 149193718, 10, -10 } ,
+        { 162402765, 10, -10 } ,
+        { 516495866, 10, -10 } ,
+        { 403283542, 10, -10 } ,
+        { 178468895, 10, -9 } ,
+        { 381059719, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 132439648, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 246177573, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 848651592, 10, -11 } ,
+        { 263293449, 10, -10 } ,
+        { 81277277, 10, -9 } ,
+        { 110477696, 10, -10 } ,
+        { 842773775, 10, -10 } ,
+        { 942319167, 10, -11 } ,
+        { 314939102, 10, -10 } ,
+        { 323706152, 10, -10 } ,
+        { 319248413, 10, -10 } ,
+        { 992294119, 10, -11 } ,
+        { 24209425, 10, -9 } ,
+        { 228935966, 10, -10 } ,
+        { 628216518, 10, -10 } ,
+        { 23493531, 10, -9 } ,
+        { 20495524, 10, -8 } ,
+        { 466366896, 10, -10 } ,
+        { 526630599, 10, -10 } ,
+        { 343734681, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 110479955, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 824788704, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 732017958, 10, -11 } ,
+        { 242934111, 10, -10 } ,
+        { 325313361, 10, -10 } ,
+        { 582626297, 10, -10 } ,
+        { 183641416, 10, -9 } ,
+        { 117100578, 10, -10 } ,
+        { 260484941, 10, -10 } ,
+        { 364038043, 10, -10 } ,
+        { 356793093, 10, -10 } ,
+        { 105877077, 10, -10 } ,
+        { 380747438, 10, -10 } ,
+        { 202728379, 10, -10 } ,
+        { 472847977, 10, -10 } ,
+        { 872162432, 10, -10 } ,
+        { 950683495, 10, -10 } ,
+        { 124968637, 10, -9 } ,
+        { 293349147, 10, -10 } ,
+        { 58905999, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 546882448, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 62580618, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 790511178, 10, -11 } ,
+        { 117836983, 10, -10 } ,
+        { 161404226, 10, -10 } ,
+        { 127906333, 10, -9 } ,
+        { 172030786, 10, -10 } ,
+        { 63289156, 10, -10 } ,
+        { 178382571, 10, -9 } ,
+        { 165634363, 10, -10 } ,
+        { 234634225, 10, -9 } ,
+        { 393525986, 10, -10 } ,
+        { 107370266, 10, -10 } ,
+        { 134402814, 10, -10 } ,
+        { 12841042, 10, -9 } ,
+        { 145898163, 10, -10 } ,
+        { 314714856, 10, -10 } ,
+        { 276621355, 10, -10 } ,
+        { 955945125, 10, -10 } ,
+        { 56981154, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 225074442, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 688995197, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 389559763, 10, -11 } ,
+        { 163655854, 10, -10 } ,
+        { 302824648, 10, -10 } ,
+        { 587709919, 10, -11 } ,
+        { 18403777, 10, -9 } ,
+        { 568286015, 10, -11 } ,
+        { 111720094, 10, -10 } ,
+        { 213632772, 10, -10 } ,
+        { 180471438, 10, -10 } ,
+        { 532030304, 10, -11 } ,
+        { 298275424, 10, -10 } ,
+        { 660196017, 10, -9 } ,
+        { 437323099, 10, -10 } ,
+        { 266537865, 10, -10 } ,
+        { 285060568, 10, -10 } ,
+        { 373925285, 10, -10 } ,
+        { 303305896, 10, -10 } ,
+        { 195732457, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 621949976, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 114589326, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 869637685, 10, -11 } ,
+        { 375987527, 10, -10 } ,
+        { 545942068, 10, -10 } ,
+        { 377203577, 10, -10 } ,
+        { 867964613, 10, -10 } ,
+        { 126555898, 10, -10 } ,
+        { 213058815, 10, -10 } ,
+        { 78953449, 10, -9 } ,
+        { 456098658, 10, -10 } ,
+        { 118377111, 10, -10 } ,
+        { 531619436, 10, -10 } ,
+        { 562500309, 10, -10 } ,
+        { 527397356, 10, -10 } ,
+        { 414188223, 10, -10 } ,
+        { 141110862, 10, -9 } ,
+        { 914208183, 10, -10 } ,
+        { 317402028, 10, -10 } ,
+        { 202460825, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 307690064, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 142434017, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 921723057, 10, -11 } ,
+        { 482250622, 10, -10 } ,
+        { 407809508, 10, -10 } ,
+        { 593487752, 10, -10 } ,
+        { 118640926, 10, -9 } ,
+        { 108330162, 10, -10 } ,
+        { 281976883, 10, -10 } ,
+        { 311162551, 10, -10 } ,
+        { 841148199, 10, -10 } ,
+        { 136067742, 10, -10 } ,
+        { 66298862, 10, -9 } ,
+        { 231242613, 10, -10 } ,
+        { 236835049, 10, -10 } ,
+        { 23640548, 10, -9 } ,
+        { 115253412, 10, -9 } ,
+        { 931347207, 10, -10 } ,
+        { 478115172, 10, -10 } ,
+        { 525059837, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 236192384, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 334035996, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 772232432, 10, -11 } ,
+        { 120426857, 10, -10 } ,
+        { 166964839, 10, -10 } ,
+        { 991884208, 10, -10 } ,
+        { 323484776, 10, -10 } ,
+        { 646869935, 10, -11 } ,
+        { 184292569, 10, -9 } ,
+        { 281846083, 10, -10 } ,
+        { 242343381, 10, -9 } ,
+        { 219354195, 10, -10 } ,
+        { 111206347, 10, -10 } ,
+        { 132499674, 10, -10 } ,
+        { 134815481, 10, -10 } ,
+        { 302335211, 10, -10 } ,
+        { 228736726, 10, -10 } ,
+        { 274610839, 10, -10 } ,
+        { 115890211, 10, -9 } ,
+        { 545723941, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 281056192, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 534318453, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 711993566, 10, -11 } ,
+        { 245797183, 10, -10 } ,
+        { 473555147, 10, -10 } ,
+        { 674072656, 10, -10 } ,
+        { 195275938, 10, -9 } ,
+        { 104767147, 10, -10 } ,
+        { 696113685, 10, -10 } ,
+        { 521328764, 10, -10 } ,
+        { 656247505, 10, -10 } ,
+        { 172334835, 10, -10 } ,
+        { 355701609, 10, -10 } ,
+        { 191684304, 10, -10 } ,
+        { 668259089, 10, -10 } ,
+        { 25858868, 10, -9 } ,
+        { 616623723, 10, -10 } ,
+        { 464626629, 10, -10 } ,
+        { 422560059, 10, -10 } ,
+        { 606965808, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 282751505, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 822525338, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 698899707, 10, -11 } ,
+        { 501544985, 10, -10 } ,
+        { 496045553, 10, -10 } ,
+        { 132235334, 10, -10 } ,
+        { 684378865, 10, -10 } ,
+        { 426505363, 10, -10 } ,
+        { 187781537, 10, -10 } ,
+        { 657971887, 10, -10 } ,
+        { 383283771, 10, -10 } ,
+        { 142374677, 10, -10 } ,
+        { 119169513, 10, -9 } ,
+        { 292506653, 10, -10 } ,
+        { 121142463, 10, -9 } ,
+        { 586845206, 10, -10 } ,
+        { 11183035, 10, -8 } ,
+        { 685775087, 10, -10 } ,
+        { 364942801, 10, -10 } ,
+        { 420413942, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 248793192, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 568737448, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 859301236, 10, -11 } ,
+        { 271642858, 10, -10 } ,
+        { 919353019, 10, -10 } ,
+        { 618508386, 10, -10 } ,
+        { 265835345, 10, -10 } ,
+        { 103453536, 10, -10 } ,
+        { 937955778, 10, -10 } ,
+        { 376998402, 10, -10 } ,
+        { 110989181, 10, -9 } ,
+        { 285389058, 10, -10 } ,
+        { 234158898, 10, -10 } ,
+        { 212058015, 10, -10 } ,
+        { 45768555, 10, -9 } ,
+        { 252136058, 10, -10 } ,
+        { 891832327, 10, -10 } ,
+        { 133046691, 10, -9 } ,
+        { 68539574, 10, -9 } ,
+        { 554382973, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 297639048, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 471711216, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 73356874, 10, -10 } ,
+        { 15364971, 10, -9 } ,
+        { 273328779, 10, -10 } ,
+        { 186370256, 10, -9 } ,
+        { 490933557, 10, -10 } ,
+        { 964636274, 10, -11 } ,
+        { 11198912, 10, -8 } ,
+        { 481983438, 10, -10 } ,
+        { 12346622, 10, -8 } ,
+        { 174695807, 10, -10 } ,
+        { 148570252, 10, -10 } ,
+        { 149419417, 10, -10 } ,
+        { 161866046, 10, -10 } ,
+        { 196263654, 10, -10 } ,
+        { 367466269, 10, -10 } ,
+        { 52170341, 10, -9 } ,
+        { 771782576, 10, -10 } ,
+        { 160885679, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 710307492, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 598584014, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 563850495, 10, -11 } ,
+        { 652120476, 10, -10 } ,
+        { 204582571, 10, -9 } ,
+        { 426632295, 10, -10 } ,
+        { 398735313, 10, -10 } ,
+        { 138253756, 10, -10 } ,
+        { 265482595, 10, -10 } ,
+        { 589838568, 10, -10 } ,
+        { 30140396, 10, -9 } ,
+        { 96512974, 10, -10 } ,
+        { 119537123, 10, -9 } ,
+        { 406344275, 10, -10 } ,
+        { 942005502, 10, -10 } ,
+        { 395418667, 10, -10 } ,
+        { 888524612, 10, -10 } ,
+        { 472340999, 10, -10 } ,
+        { 240956307, 10, -10 } ,
+        { 404649127, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 145991214, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 718614915, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 721430806, 10, -11 } ,
+        { 413143846, 10, -10 } ,
+        { 765119325, 10, -10 } ,
+        { 138999919, 10, -10 } ,
+        { 219411509, 10, -9 } ,
+        { 195425417, 10, -10 } ,
+        { 262472375, 10, -10 } ,
+        { 741762912, 10, -10 } ,
+        { 52225466, 10, -9 } ,
+        { 114811721, 10, -10 } ,
+        { 403771037, 10, -10 } ,
+        { 320163892, 10, -10 } ,
+        { 809951629, 10, -10 } ,
+        { 322952151, 10, -10 } ,
+        { 990618169, 10, -10 } ,
+        { 499341146, 10, -10 } ,
+        { 467762462, 10, -10 } ,
+        { 453273914, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 206023857, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 159881733, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 106710073, 10, -10 } ,
+        { 380841091, 10, -10 } ,
+        { 345578667, 10, -10 } ,
+        { 337367134, 10, -10 } ,
+        { 770672061, 10, -10 } ,
+        { 187118451, 10, -10 } ,
+        { 676630477, 10, -10 } ,
+        { 326227419, 10, -10 } ,
+        { 125540963, 10, -9 } ,
+        { 271312508, 10, -10 } ,
+        { 241158102, 10, -10 } ,
+        { 246951174, 10, -10 } ,
+        { 327849827, 10, -10 } ,
+        { 341252516, 10, -10 } ,
+        { 80213553, 10, -9 } ,
+        { 730290953, 10, -10 } ,
+        { 757648406, 10, -10 } ,
+        { 526771759, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 177648734, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 586564423, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 83834414, 10, -10 } ,
+        { 410263771, 10, -10 } ,
+        { 47355341, 10, -9 } ,
+        { 827021742, 10, -10 } ,
+        { 5227787, 10, -8 } ,
+        { 132838447, 10, -10 } ,
+        { 526713066, 10, -10 } ,
+        { 639916954, 10, -10 } ,
+        { 872708479, 10, -10 } ,
+        { 165127143, 10, -10 } ,
+        { 683668869, 10, -10 } ,
+        { 316978507, 10, -10 } ,
+        { 325110307, 10, -10 } ,
+        { 914554162, 10, -10 } ,
+        { 808910053, 10, -10 } ,
+        { 435353531, 10, -10 } ,
+        { 779221237, 10, -10 } ,
+        { 65671579, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 337368836, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 472146268, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 832499358, 10, -11 } ,
+        { 225725759, 10, -10 } ,
+        { 394623346, 10, -10 } ,
+        { 267539749, 10, -10 } ,
+        { 251513127, 10, -10 } ,
+        { 106206734, 10, -10 } ,
+        { 965211921, 10, -10 } ,
+        { 529285948, 10, -10 } ,
+        { 123246193, 10, -9 } ,
+        { 231817554, 10, -10 } ,
+        { 223731553, 10, -10 } ,
+        { 480102305, 10, -10 } ,
+        { 104915322, 10, -9 } ,
+        { 504435633, 10, -10 } ,
+        { 772966062, 10, -10 } ,
+        { 790556068, 10, -10 } ,
+        { 103904212, 10, -9 } ,
+        { 113121001, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 246382406, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 139281041, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 779265033, 10, -11 } ,
+        { 657134318, 10, -10 } ,
+        { 529232844, 10, -10 } ,
+        { 122003107, 10, -10 } ,
+        { 230686805, 10, -9 } ,
+        { 103597717, 10, -10 } ,
+        { 180727443, 10, -10 } ,
+        { 542515632, 10, -10 } ,
+        { 393403922, 10, -10 } ,
+        { 228911011, 10, -10 } ,
+        { 543377497, 10, -10 } ,
+        { 340505955, 10, -10 } ,
+        { 388242251, 10, -10 } ,
+        { 261434568, 10, -10 } ,
+        { 105459639, 10, -9 } ,
+        { 584005354, 10, -10 } ,
+        { 273743325, 10, -10 } ,
+        { 121876355, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 116380152, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 88959382, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 906288354, 10, -11 } ,
+        { 626877256, 10, -10 } ,
+        { 583545225, 10, -10 } ,
+        { 573738181, 10, -10 } ,
+        { 874915371, 10, -10 } ,
+        { 238432921, 10, -10 } ,
+        { 531968356, 10, -10 } ,
+        { 340558057, 10, -10 } ,
+        { 922432844, 10, -10 } ,
+        { 193596517, 10, -10 } ,
+        { 554770269, 10, -10 } ,
+        { 419322315, 10, -10 } ,
+        { 348812259, 10, -10 } ,
+        { 265294275, 10, -10 } ,
+        { 837422744, 10, -10 } ,
+        { 413195912, 10, -10 } ,
+        { 541481523, 10, -10 } ,
+        { 357329532, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 384071524, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 563126867, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 884871179, 10, -11 } ,
+        { 206339656, 10, -10 } ,
+        { 272258505, 10, -10 } ,
+        { 751790055, 10, -10 } ,
+        { 885242732, 10, -10 } ,
+        { 922484687, 10, -11 } ,
+        { 94251744, 10, -9 } ,
+        { 376954449, 10, -10 } ,
+        { 182121335, 10, -9 } ,
+        { 24787267, 10, -9 } ,
+        { 393665225, 10, -10 } ,
+        { 282090414, 10, -10 } ,
+        { 350467162, 10, -10 } ,
+        { 294091623, 10, -10 } ,
+        { 461356196, 10, -10 } ,
+        { 469740498, 10, -10 } ,
+        { 923619124, 10, -10 } ,
+        { 595661568, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 218640818, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 52273974, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 741997327, 10, -11 } ,
+        { 357029867, 10, -10 } ,
+        { 397440036, 10, -10 } ,
+        { 472853465, 10, -10 } ,
+        { 491996872, 10, -10 } ,
+        { 997372186, 10, -10 } ,
+        { 382468063, 10, -10 } ,
+        { 511387394, 10, -10 } ,
+        { 825051734, 10, -10 } ,
+        { 137378008, 10, -10 } ,
+        { 567538768, 10, -10 } ,
+        { 191181304, 10, -10 } ,
+        { 291450552, 10, -10 } ,
+        { 274749922, 10, -10 } ,
+        { 872950617, 10, -10 } ,
+        { 573928005, 10, -10 } ,
+        { 661513347, 10, -10 } ,
+        { 454147267, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 850007034, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 369027452, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 821398972, 10, -11 } ,
+        { 13095585, 10, -9 } ,
+        { 183310067, 10, -10 } ,
+        { 109524034, 10, -9 } ,
+        { 173606426, 10, -10 } ,
+        { 7063137, 10, -9 } ,
+        { 132425666, 10, -9 } ,
+        { 196539836, 10, -10 } ,
+        { 223060336, 10, -9 } ,
+        { 219030372, 10, -10 } ,
+        { 123886233, 10, -10 } ,
+        { 298950852, 10, -10 } ,
+        { 144546132, 10, -10 } ,
+        { 31695408, 10, -9 } ,
+        { 389862599, 10, -10 } ,
+        { 409756737, 10, -10 } ,
+        { 13595029, 10, -8 } ,
+        { 157405724, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 304181871, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 100699248, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 919926721, 10, -11 } ,
+        { 265364326, 10, -10 } ,
+        { 504327248, 10, -10 } ,
+        { 514272156, 10, -10 } ,
+        { 840231317, 10, -10 } ,
+        { 858350752, 10, -11 } ,
+        { 797342012, 10, -10 } ,
+        { 264417576, 10, -10 } ,
+        { 216464221, 10, -9 } ,
+        { 319309419, 10, -10 } ,
+        { 181984641, 10, -10 } ,
+        { 464967781, 10, -10 } ,
+        { 257044591, 10, -10 } ,
+        { 212339343, 10, -10 } ,
+        { 531191558, 10, -10 } ,
+        { 376491417, 10, -10 } ,
+        { 696827549, 10, -10 } ,
+        { 552074955, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 182616482, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 985199564, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 899174678, 10, -11 } ,
+        { 156764357, 10, -10 } ,
+        { 20904632, 10, -9 } ,
+        { 487151465, 10, -10 } ,
+        { 994335213, 10, -10 } ,
+        { 770870806, 10, -11 } ,
+        { 105217336, 10, -9 } ,
+        { 212994285, 10, -10 } ,
+        { 234792007, 10, -9 } ,
+        { 250641103, 10, -10 } ,
+        { 152221611, 10, -10 } ,
+        { 171055935, 10, -10 } ,
+        { 162542094, 10, -10 } ,
+        { 177472749, 10, -10 } ,
+        { 503959352, 10, -10 } ,
+        { 325350805, 10, -10 } ,
+        { 941073191, 10, -10 } ,
+        { 553751286, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 329490628, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 584749798, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 931725949, 10, -11 } ,
+        { 198357179, 10, -10 } ,
+        { 265937028, 10, -10 } ,
+        { 597962618, 10, -10 } ,
+        { 868825991, 10, -10 } ,
+        { 101015277, 10, -10 } ,
+        { 11211988, 10, -8 } ,
+        { 259411836, 10, -10 } ,
+        { 121216983, 10, -9 } ,
+        { 281596266, 10, -10 } ,
+        { 20158591, 10, -9 } ,
+        { 383552119, 10, -10 } ,
+        { 305036363, 10, -10 } ,
+        { 208961617, 10, -10 } ,
+        { 704448925, 10, -10 } ,
+        { 717512264, 10, -10 } ,
+        { 108298969, 10, -9 } ,
+        { 661745711, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 517683637, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 591155724, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 400011462, 10, -10 } ,
+        { 124467492, 10, -10 } ,
+        { 174500683, 10, -10 } ,
+        { 750937242, 10, -10 } ,
+        { 272501947, 10, -10 } ,
+        { 620578693, 10, -11 } ,
+        { 16559424, 10, -8 } ,
+        { 177285323, 10, -10 } ,
+        { 226547478, 10, -9 } ,
+        { 314467324, 10, -10 } ,
+        { 113407333, 10, -10 } ,
+        { 14367223, 10, -9 } ,
+        { 20057301, 10, -9 } ,
+        { 153543147, 10, -10 } ,
+        { 263665475, 10, -10 } ,
+        { 299952379, 10, -10 } ,
+        { 13113381, 10, -8 } ,
+        { 510135178, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 187950816, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 944780354, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 163452061, 10, -10 } ,
+        { 155520109, 10, -10 } ,
+        { 214103047, 10, -10 } ,
+        { 699720789, 10, -10 } ,
+        { 329246809, 10, -10 } ,
+        { 717864552, 10, -11 } ,
+        { 116568134, 10, -9 } ,
+        { 212738303, 10, -10 } ,
+        { 222545368, 10, -9 } ,
+        { 267653337, 10, -10 } ,
+        { 149172799, 10, -10 } ,
+        { 173284157, 10, -10 } ,
+        { 163422514, 10, -10 } ,
+        { 17844249, 10, -9 } ,
+        { 714846783, 10, -10 } ,
+        { 400801526, 10, -10 } ,
+        { 116863525, 10, -9 } ,
+        { 531483135, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 195079858, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 180432311, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 102568917, 10, -10 } ,
+        { 203625027, 10, -10 } ,
+        { 279702745, 10, -10 } ,
+        { 425528443, 10, -10 } ,
+        { 54443571, 10, -9 } ,
+        { 823297982, 10, -11 } ,
+        { 798863011, 10, -10 } ,
+        { 269826109, 10, -10 } ,
+        { 953341849, 10, -10 } ,
+        { 247466273, 10, -10 } ,
+        { 205680619, 10, -10 } ,
+        { 22087169, 10, -9 } ,
+        { 202600374, 10, -10 } ,
+        { 206446683, 10, -10 } ,
+        { 114540398, 10, -9 } ,
+        { 842119318, 10, -10 } ,
+        { 119050773, 10, -9 } ,
+        { 454691905, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 163601549, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 835279187, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 251663934, 10, -10 } ,
+        { 190488951, 10, -10 } ,
+        { 241267264, 10, -10 } ,
+        { 115678951, 10, -9 } ,
+        { 772294124, 10, -10 } ,
+        { 807933197, 10, -11 } ,
+        { 642606891, 10, -10 } ,
+        { 237255752, 10, -10 } ,
+        { 10526351, 10, -8 } ,
+        { 154267894, 10, -10 } ,
+        { 205545688, 10, -10 } ,
+        { 188901692, 10, -10 } ,
+        { 176009494, 10, -10 } ,
+        { 188805038, 10, -10 } ,
+        { 773451727, 10, -10 } ,
+        { 17306344, 10, -8 } ,
+        { 715619241, 10, -10 } ,
+        { 575073756, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 224050387, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 339290822, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 79583713, 10, -10 } ,
+        { 109321068, 10, -10 } ,
+        { 150178394, 10, -10 } ,
+        { 889924022, 10, -10 } ,
+        { 143465022, 10, -10 } ,
+        { 545389072, 10, -11 } ,
+        { 178444611, 10, -9 } ,
+        { 153806229, 10, -10 } ,
+        { 249639207, 10, -9 } ,
+        { 217957213, 10, -10 } ,
+        { 982704823, 10, -11 } ,
+        { 128042057, 10, -10 } ,
+        { 118006201, 10, -10 } ,
+        { 136491932, 10, -10 } ,
+        { 219616177, 10, -10 } ,
+        { 353102447, 10, -10 } ,
+        { 181322191, 10, -9 } ,
+        { 481945764, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 187136765, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 151754187, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 940785823, 10, -11 } ,
+        { 15640759, 10, -9 } ,
+        { 221115284, 10, -10 } ,
+        { 965668744, 10, -10 } ,
+        { 464866848, 10, -10 } ,
+        { 745350129, 10, -11 } ,
+        { 956863625, 10, -10 } ,
+        { 217589037, 10, -10 } ,
+        { 168460066, 10, -9 } ,
+        { 195555514, 10, -10 } ,
+        { 147764534, 10, -10 } ,
+        { 18127361, 10, -9 } ,
+        { 162990442, 10, -10 } ,
+        { 176840663, 10, -10 } ,
+        { 573929085, 10, -10 } ,
+        { 399143572, 10, -10 } ,
+        { 124134966, 10, -9 } ,
+        { 558533214, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 216952726, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 605681628, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 89125737, 10, -10 } ,
+        { 132132144, 10, -10 } ,
+        { 186334147, 10, -10 } ,
+        { 369195331, 10, -10 } ,
+        { 184386987, 10, -10 } ,
+        { 596340697, 10, -11 } ,
+        { 146976446, 10, -9 } ,
+        { 18921436, 10, -9 } ,
+        { 173995293, 10, -9 } ,
+        { 58247965, 10, -9 } ,
+        { 126374632, 10, -10 } ,
+        { 154380157, 10, -10 } ,
+        { 149485686, 10, -10 } ,
+        { 158985836, 10, -10 } ,
+        { 393344016, 10, -10 } ,
+        { 623760686, 10, -10 } ,
+        { 220353757, 10, -9 } ,
+        { 420564651, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 152760364, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 474893503, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 758688524, 10, -11 } ,
+        { 122244963, 10, -10 } ,
+        { 164417037, 10, -10 } ,
+        { 189129729, 10, -9 } ,
+        { 171005503, 10, -10 } ,
+        { 737691358, 10, -11 } ,
+        { 155732844, 10, -9 } ,
+        { 166131365, 10, -10 } ,
+        { 152085023, 10, -9 } ,
+        { 347599727, 10, -10 } ,
+        { 117128603, 10, -10 } ,
+        { 133194972, 10, -10 } ,
+        { 126868823, 10, -10 } ,
+        { 145615388, 10, -10 } ,
+        { 265584563, 10, -10 } ,
+        { 584833211, 10, -10 } ,
+        { 110744187, 10, -9 } ,
+        { 688236466, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 428507068, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 109551852, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 905594296, 10, -11 } ,
+        { 226273428, 10, -10 } ,
+        { 217413616, 10, -10 } ,
+        { 895973439, 10, -10 } ,
+        { 520824354, 10, -10 } ,
+        { 903051715, 10, -11 } ,
+        { 121456174, 10, -9 } ,
+        { 212955886, 10, -10 } ,
+        { 167445732, 10, -9 } ,
+        { 330870373, 10, -10 } ,
+        { 146630147, 10, -10 } ,
+        { 171336885, 10, -10 } ,
+        { 163944446, 10, -10 } ,
+        { 177473949, 10, -10 } ,
+        { 392652879, 10, -10 } ,
+        { 325884158, 10, -10 } ,
+        { 104256039, 10, -9 } ,
+        { 685985591, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 566846079, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 963027328, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 202087952, 10, -10 } ,
+        { 181346978, 10, -10 } ,
+        { 229371908, 10, -10 } ,
+        { 580817131, 10, -10 } ,
+        { 133196975, 10, -9 } ,
+        { 768209099, 10, -11 } ,
+        { 95661432, 10, -9 } ,
+        { 232996531, 10, -10 } ,
+        { 147701457, 10, -9 } ,
+        { 240535494, 10, -10 } ,
+        { 182053852, 10, -10 } ,
+        { 188789908, 10, -10 } ,
+        { 173692523, 10, -10 } ,
+        { 185801217, 10, -10 } ,
+        { 559890411, 10, -10 } ,
+        { 521483567, 10, -10 } ,
+        { 118545331, 10, -9 } ,
+        { 531892003, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 186605966, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 683257077, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 850200091, 10, -11 } ,
+        { 143083657, 10, -10 } ,
+        { 188523369, 10, -10 } ,
+        { 342100518, 10, -10 } ,
+        { 188547501, 10, -10 } ,
+        { 574473755, 10, -11 } ,
+        { 168284793, 10, -9 } ,
+        { 191728601, 10, -10 } ,
+        { 826384525, 10, -10 } ,
+        { 169263891, 10, -10 } ,
+        { 257292419, 10, -10 } ,
+        { 153765326, 10, -10 } ,
+        { 140676588, 10, -10 } ,
+        { 229533498, 10, -10 } ,
+        { 416908278, 10, -10 } ,
+        { 901468425, 10, -10 } ,
+        { 285298227, 10, -9 } ,
+        { 351940536, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 138843868, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 379665756, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 264137216, 10, -10 } ,
+        { 113244646, 10, -10 } ,
+        { 15411474, 10, -9 } ,
+        { 218769002, 10, -10 } ,
+        { 147157091, 10, -10 } ,
+        { 46724423, 10, -10 } ,
+        { 200981614, 10, -9 } ,
+        { 155504806, 10, -10 } ,
+        { 922386128, 10, -10 } ,
+        { 313569526, 10, -10 } ,
+        { 105806245, 10, -10 } ,
+        { 132905274, 10, -10 } ,
+        { 118216134, 10, -10 } ,
+        { 126990551, 10, -10 } ,
+        { 31229026, 10, -9 } ,
+        { 616551584, 10, -10 } ,
+        { 331609034, 10, -9 } ,
+        { 318825169, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 122811485, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 220466199, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 111775856, 10, -10 } ,
+        { 937507874, 10, -11 } ,
+        { 139618998, 10, -10 } ,
+        { 243129852, 10, -9 } ,
+        { 300647357, 10, -10 } ,
+        { 134368851, 10, -10 } ,
+        { 31331539, 10, -9 } ,
+        { 137100221, 10, -10 } ,
+        { 948695741, 10, -10 } ,
+        { 106363688, 10, -10 } ,
+        { 102670717, 10, -10 } ,
+        { 937131026, 10, -11 } ,
+        { 11043864, 10, -9 } ,
+        { 127807056, 10, -10 } ,
+        { 198971363, 10, -10 } ,
+        { 341895399, 10, -10 } ,
+        { 256177336, 10, -10 } ,
+        { 109077705, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 345303564, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 724848539, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 897277316, 10, -11 } ,
+        { 142397738, 10, -10 } ,
+        { 280223092, 10, -10 } ,
+        { 838346979, 10, -10 } ,
+        { 198974631, 10, -10 } ,
+        { 664887019, 10, -11 } ,
+        { 122773174, 10, -9 } ,
+        { 195375824, 10, -10 } ,
+        { 185352319, 10, -9 } ,
+        { 339186262, 10, -10 } ,
+        { 128248764, 10, -10 } ,
+        { 158206602, 10, -10 } ,
+        { 153545005, 10, -10 } ,
+        { 16471336, 10, -9 } ,
+        { 388424232, 10, -10 } ,
+        { 468409541, 10, -10 } ,
+        { 191727905, 10, -9 } ,
+        { 518522047, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 203175169, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 315013663, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 4059237, 10, -9 } ,
+        { 319579162, 10, -10 } ,
+        { 248245345, 10, -9 } ,
+        { 952224327, 10, -11 } ,
+        { 200650922, 10, -10 } ,
+        { 119296319, 10, -10 } ,
+        { 310361183, 10, -10 } ,
+        { 404417411, 10, -10 } ,
+        { 578392083, 10, -10 } ,
+        { 989314126, 10, -11 } ,
+        { 391707328, 10, -10 } ,
+        { 174932503, 10, -10 } ,
+        { 294489288, 10, -9 } ,
+        { 391710773, 10, -10 } ,
+        { 360627628, 10, -10 } ,
+        { 480902548, 10, -10 } ,
+        { 325554497, 10, -10 } ,
+        { 34572455, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 207441721, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 59002966, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 133734748, 10, -10 } ,
+        { 551457155, 10, -10 } ,
+        { 18776457, 10, -8 } ,
+        { 997504965, 10, -11 } ,
+        { 127650423, 10, -9 } ,
+        { 129094422, 10, -10 } ,
+        { 138581429, 10, -10 } ,
+        { 637621879, 10, -10 } ,
+        { 324560033, 10, -10 } ,
+        { 919185583, 10, -11 } ,
+        { 551158474, 10, -10 } ,
+        { 22262234, 10, -9 } ,
+        { 968867591, 10, -10 } ,
+        { 846336619, 10, -10 } ,
+        { 108978486, 10, -9 } ,
+        { 426174387, 10, -10 } ,
+        { 210953449, 10, -10 } ,
+        { 368634218, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 112553396, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 168690226, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 847740818, 10, -11 } ,
+        { 202111557, 10, -10 } ,
+        { 319823545, 10, -10 } ,
+        { 941894548, 10, -10 } ,
+        { 166195129, 10, -9 } ,
+        { 873039456, 10, -11 } ,
+        { 459563361, 10, -10 } ,
+        { 263630385, 10, -10 } ,
+        { 526520364, 10, -10 } ,
+        { 512044294, 10, -10 } ,
+        { 206586617, 10, -10 } ,
+        { 198155839, 10, -10 } ,
+        { 198173184, 10, -10 } ,
+        { 268086964, 10, -10 } ,
+        { 915682172, 10, -10 } ,
+        { 498016117, 10, -10 } ,
+        { 662255532, 10, -10 } ,
+        { 540126686, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 198304064, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 466079878, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 516824629, 10, -11 } ,
+        { 271271603, 10, -10 } ,
+        { 110620211, 10, -9 } ,
+        { 107334544, 10, -10 } ,
+        { 386766925, 10, -10 } ,
+        { 121369524, 10, -10 } ,
+        { 33744965, 10, -9 } ,
+        { 71348119, 10, -9 } ,
+        { 399598238, 10, -10 } ,
+        { 216403248, 10, -10 } ,
+        { 35827761, 10, -9 } ,
+        { 187579441, 10, -10 } ,
+        { 133038744, 10, -9 } ,
+        { 230818237, 10, -9 } ,
+        { 41448278, 10, -9 } ,
+        { 733808641, 10, -10 } ,
+        { 511842609, 10, -10 } ,
+        { 359748502, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 116804878, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 302812396, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 508688773, 10, -11 } ,
+        { 139254418, 10, -10 } ,
+        { 25083531, 10, -9 } ,
+        { 160173351, 10, -10 } ,
+        { 162173277, 10, -10 } ,
+        { 951908971, 10, -11 } ,
+        { 760989346, 10, -10 } ,
+        { 485295888, 10, -10 } ,
+        { 426973159, 10, -10 } ,
+        { 199427128, 10, -10 } ,
+        { 159945808, 10, -10 } ,
+        { 131106807, 10, -10 } ,
+        { 233474923, 10, -10 } ,
+        { 340919706, 10, -9 } ,
+        { 262846582, 10, -10 } ,
+        { 24718796, 10, -9 } ,
+        { 172954096, 10, -9 } ,
+        { 401905125, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 639956107, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 321601226, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 364306934, 10, -11 } ,
+        { 825235611, 10, -10 } ,
+        { 212394439, 10, -9 } ,
+        { 981655827, 10, -11 } ,
+        { 224695348, 10, -10 } ,
+        { 115305256, 10, -10 } ,
+        { 112399421, 10, -10 } ,
+        { 214530979, 10, -9 } ,
+        { 223447125, 10, -10 } ,
+        { 745669643, 10, -11 } ,
+        { 248156889, 10, -10 } ,
+        { 371724753, 10, -10 } ,
+        { 380779095, 10, -10 } ,
+        { 180471958, 10, -9 } ,
+        { 369352617, 10, -10 } ,
+        { 252263893, 10, -10 } ,
+        { 166047703, 10, -10 } ,
+        { 33217369, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 306433402, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 274395641, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 678362655, 10, -11 } ,
+        { 940726075, 10, -11 } ,
+        { 116631988, 10, -10 } ,
+        { 196323809, 10, -10 } ,
+        { 111163551, 10, -10 } ,
+        { 393631339, 10, -11 } ,
+        { 431792677, 10, -9 } ,
+        { 124682023, 10, -10 } ,
+        { 174022203, 10, -9 } ,
+        { 183615315, 10, -10 } ,
+        { 78588587, 10, -10 } ,
+        { 107553236, 10, -10 } ,
+        { 924735175, 10, -11 } ,
+        { 104108348, 10, -10 } ,
+        { 171974234, 10, -10 } ,
+        { 24289841, 10, -9 } ,
+        { 133971463, 10, -9 } ,
+        { 305012437, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 110027972, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 661333412, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 416404065, 10, -11 } ,
+        { 152381201, 10, -10 } ,
+        { 207744923, 10, -10 } ,
+        { 738863221, 10, -11 } ,
+        { 183736003, 10, -10 } ,
+        { 545709995, 10, -11 } ,
+        { 206304992, 10, -10 } ,
+        { 315503203, 10, -10 } ,
+        { 338019772, 10, -10 } ,
+        { 584999878, 10, -11 } ,
+        { 114498919, 10, -10 } ,
+        { 677391445, 10, -9 } ,
+        { 137877497, 10, -10 } ,
+        { 195521459, 10, -10 } ,
+        { 330948008, 10, -10 } ,
+        { 27208368, 10, -9 } ,
+        { 367747681, 10, -10 } ,
+        { 225041634, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 166124856, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 334066103, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 767531833, 10, -11 } ,
+        { 10258428, 10, -9 } ,
+        { 137432759, 10, -10 } ,
+        { 203633019, 10, -10 } ,
+        { 12894651, 10, -9 } ,
+        { 440902943, 10, -11 } ,
+        { 281132375, 10, -9 } ,
+        { 142657799, 10, -10 } ,
+        { 169666455, 10, -9 } ,
+        { 298515666, 10, -10 } ,
+        { 89242538, 10, -10 } ,
+        { 121989191, 10, -10 } ,
+        { 108572043, 10, -10 } ,
+        { 120094914, 10, -10 } ,
+        { 201455062, 10, -10 } ,
+        { 28196711, 10, -9 } ,
+        { 24908352, 10, -8 } ,
+        { 32977256, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 121690771, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 627638263, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 656818479, 10, -11 } ,
+        { 325931903, 10, -10 } ,
+        { 588863415, 10, -10 } ,
+        { 123001913, 10, -10 } ,
+        { 527867714, 10, -10 } ,
+        { 388450398, 10, -10 } ,
+        { 286788505, 10, -10 } ,
+        { 116117287, 10, -9 } ,
+        { 343759289, 10, -10 } ,
+        { 117120892, 10, -10 } ,
+        { 803917198, 10, -10 } ,
+        { 238466909, 10, -10 } ,
+        { 168544817, 10, -9 } ,
+        { 101411654, 10, -9 } ,
+        { 844782868, 10, -10 } ,
+        { 507998087, 10, -10 } ,
+        { 384401914, 10, -10 } ,
+        { 4374826, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 148306631, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 41631797, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 643911313, 10, -11 } ,
+        { 233530786, 10, -10 } ,
+        { 486010745, 10, -10 } ,
+        { 306065891, 10, -10 } ,
+        { 274452002, 10, -10 } ,
+        { 640383982, 10, -10 } ,
+        { 177404346, 10, -10 } ,
+        { 458418506, 10, -10 } ,
+        { 336877623, 10, -10 } ,
+        { 214608478, 10, -10 } ,
+        { 316151749, 10, -10 } ,
+        { 303853783, 10, -10 } ,
+        { 921550753, 10, -10 } ,
+        { 264418792, 10, -10 } ,
+        { 171924128, 10, -9 } ,
+        { 409481636, 10, -10 } ,
+        { 244021968, 10, -10 } ,
+        { 86148596, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 223117311, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 274469117, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 101669367, 10, -10 } ,
+        { 231048049, 10, -10 } ,
+        { 328729374, 10, -10 } ,
+        { 150560145, 10, -10 } ,
+        { 675522928, 10, -10 } ,
+        { 923679695, 10, -11 } ,
+        { 429238647, 10, -10 } ,
+        { 3229533, 10, -8 } ,
+        { 791861051, 10, -10 } ,
+        { 131914262, 10, -10 } ,
+        { 225894387, 10, -10 } ,
+        { 486673994, 10, -10 } ,
+        { 310565242, 10, -10 } ,
+        { 395162613, 10, -10 } ,
+        { 997364351, 10, -10 } ,
+        { 109169175, 10, -9 } ,
+        { 481008575, 10, -10 } ,
+        { 437360143, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 131713968, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 418718737, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 488177149, 10, -11 } ,
+        { 371402915, 10, -10 } ,
+        { 498159524, 10, -10 } ,
+        { 909019925, 10, -11 } ,
+        { 2132793, 10, -7 } ,
+        { 1049765, 10, -8 } ,
+        { 128048875, 10, -10 } ,
+        { 160637961, 10, -9 } ,
+        { 240297759, 10, -10 } ,
+        { 814317579, 10, -11 } ,
+        { 416294009, 10, -10 } ,
+        { 188183272, 10, -10 } ,
+        { 416295557, 10, -10 } ,
+        { 192269611, 10, -9 } ,
+        { 608479705, 10, -10 } ,
+        { 511111551, 10, -10 } ,
+        { 237238232, 10, -10 } ,
+        { 333339274, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 100504694, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 723741616, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 707159894, 10, -11 } ,
+        { 244312615, 10, -10 } ,
+        { 485717323, 10, -10 } ,
+        { 148382712, 10, -10 } ,
+        { 399153322, 10, -10 } ,
+        { 120610452, 10, -10 } ,
+        { 453045789, 10, -10 } ,
+        { 101867892, 10, -9 } ,
+        { 57671641, 10, -9 } ,
+        { 133039565, 10, -10 } ,
+        { 256264645, 10, -10 } ,
+        { 214774223, 10, -10 } ,
+        { 792377585, 10, -10 } ,
+        { 190879324, 10, -9 } ,
+        { 834113265, 10, -10 } ,
+        { 540098501, 10, -10 } ,
+        { 893587621, 10, -10 } ,
+        { 431792653, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 223677819, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 412182625, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 571497231, 10, -11 } ,
+        { 276233746, 10, -10 } ,
+        { 595379974, 10, -10 } ,
+        { 131017907, 10, -10 } ,
+        { 5778022, 10, -8 } ,
+        { 355793275, 10, -10 } ,
+        { 26079994, 10, -9 } ,
+        { 903963315, 10, -10 } ,
+        { 415257412, 10, -10 } ,
+        { 109715223, 10, -10 } ,
+        { 494107087, 10, -10 } ,
+        { 206046771, 10, -10 } ,
+        { 128639373, 10, -9 } ,
+        { 199535005, 10, -9 } ,
+        { 7787849, 10, -8 } ,
+        { 756289854, 10, -10 } ,
+        { 247991411, 10, -10 } ,
+        { 437729989, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 288708934, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 563678841, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 750492906, 10, -11 } ,
+        { 401406762, 10, -10 } ,
+        { 641869029, 10, -10 } ,
+        { 139883589, 10, -10 } ,
+        { 227229386, 10, -9 } ,
+        { 115114201, 10, -10 } ,
+        { 431544878, 10, -10 } ,
+        { 49599519, 10, -9 } ,
+        { 515954677, 10, -10 } ,
+        { 21310287, 10, -9 } ,
+        { 532266405, 10, -10 } ,
+        { 301534958, 10, -10 } ,
+        { 69286931, 10, -9 } ,
+        { 50401923, 10, -9 } ,
+        { 109367295, 10, -9 } ,
+        { 460514697, 10, -10 } ,
+        { 533081907, 10, -10 } ,
+        { 441138379, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 126211354, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 886316676, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 865214795, 10, -11 } ,
+        { 375392026, 10, -10 } ,
+        { 530926666, 10, -10 } ,
+        { 500887864, 10, -10 } ,
+        { 105957733, 10, -9 } ,
+        { 15268532, 10, -9 } ,
+        { 427885271, 10, -10 } ,
+        { 418897884, 10, -10 } ,
+        { 613111357, 10, -10 } ,
+        { 2130466, 10, -8 } ,
+        { 451381196, 10, -10 } ,
+        { 439377928, 10, -10 } ,
+        { 528422303, 10, -10 } ,
+        { 693184911, 10, -10 } ,
+        { 686487733, 10, -10 } ,
+        { 521886516, 10, -10 } ,
+        { 677294367, 10, -10 } ,
+        { 777490743, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 699500346, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 562930432, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 141464023, 10, -10 } ,
+        { 293612587, 10, -10 } ,
+        { 331632706, 10, -10 } ,
+        { 328744097, 10, -10 } ,
+        { 151873267, 10, -9 } ,
+        { 125491738, 10, -10 } ,
+        { 325487856, 10, -10 } ,
+        { 60954491, 10, -9 } ,
+        { 834815866, 10, -10 } ,
+        { 160315735, 10, -10 } ,
+        { 500402812, 10, -10 } ,
+        { 265990251, 10, -10 } ,
+        { 31345967, 10, -9 } ,
+        { 166338324, 10, -9 } ,
+        { 561633002, 10, -10 } ,
+        { 369534066, 10, -10 } ,
+        { 513097703, 10, -10 } ,
+        { 56306161, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 510946052, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 51733824, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 53951966, 10, -10 } ,
+        { 400571138, 10, -10 } ,
+        { 719126098, 10, -10 } ,
+        { 95981844, 10, -10 } ,
+        { 320461723, 10, -9 } ,
+        { 105539971, 10, -10 } ,
+        { 126987624, 10, -10 } ,
+        { 803747121, 10, -10 } ,
+        { 245110374, 10, -10 } ,
+        { 201934343, 10, -10 } ,
+        { 689809264, 10, -10 } ,
+        { 292996977, 10, -10 } ,
+        { 591611705, 10, -10 } ,
+        { 74783601, 10, -9 } ,
+        { 705362844, 10, -10 } ,
+        { 374683035, 10, -10 } ,
+        { 186241207, 10, -10 } ,
+        { 358508197, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 972802962, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 574154129, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 806541555, 10, -11 } ,
+        { 371796099, 10, -10 } ,
+        { 535269827, 10, -10 } ,
+        { 165049704, 10, -10 } ,
+        { 516584402, 10, -10 } ,
+        { 347132766, 10, -10 } ,
+        { 555347165, 10, -10 } ,
+        { 87751087, 10, -9 } ,
+        { 539828222, 10, -10 } ,
+        { 143039462, 10, -10 } ,
+        { 607352157, 10, -10 } ,
+        { 382720265, 10, -10 } ,
+        { 858641386, 10, -10 } ,
+        { 904158369, 10, -10 } ,
+        { 88358768, 10, -9 } ,
+        { 950587259, 10, -10 } ,
+        { 582810917, 10, -10 } ,
+        { 48115734, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 229329717, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 660834142, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 789208453, 10, -11 } ,
+        { 364080469, 10, -10 } ,
+        { 351283421, 10, -10 } ,
+        { 790879737, 10, -10 } ,
+        { 61296661, 10, -9 } ,
+        { 150111323, 10, -10 } ,
+        { 235757462, 10, -10 } ,
+        { 495479867, 10, -10 } ,
+        { 530800459, 10, -10 } ,
+        { 17302876, 10, -9 } ,
+        { 3596655, 10, -8 } ,
+        { 216844191, 10, -10 } ,
+        { 358667502, 10, -10 } ,
+        { 674745115, 10, -10 } ,
+        { 16197213, 10, -8 } ,
+        { 672348759, 10, -10 } ,
+        { 36690965, 10, -9 } ,
+        { 851393735, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 126523263, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 985971282, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 119970789, 10, -10 } ,
+        { 359302645, 10, -10 } ,
+        { 443742712, 10, -10 } ,
+        { 226955252, 10, -10 } ,
+        { 576054833, 10, -10 } ,
+        { 14189215, 10, -9 } ,
+        { 309687925, 10, -10 } ,
+        { 406422049, 10, -10 } ,
+        { 510606291, 10, -10 } ,
+        { 142090846, 10, -10 } ,
+        { 414745974, 10, -10 } ,
+        { 73730186, 10, -9 } ,
+        { 307932394, 10, -10 } ,
+        { 327143879, 10, -10 } ,
+        { 166664295, 10, -9 } ,
+        { 158457399, 10, -9 } ,
+        { 517524026, 10, -10 } ,
+        { 740033326, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 429257909, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 444460898, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 9185375, 10, -9 } ,
+        { 270429247, 10, -10 } ,
+        { 368011326, 10, -10 } ,
+        { 555553973, 10, -10 } ,
+        { 35591103, 10, -9 } ,
+        { 824349999, 10, -10 } ,
+        { 387446977, 10, -10 } ,
+        { 414728118, 10, -10 } ,
+        { 521415579, 10, -10 } ,
+        { 13547524, 10, -9 } ,
+        { 267342074, 10, -10 } ,
+        { 270339279, 10, -10 } ,
+        { 273514976, 10, -10 } ,
+        { 443239352, 10, -10 } ,
+        { 525164282, 10, -10 } ,
+        { 531917379, 10, -10 } ,
+        { 373143505, 10, -10 } ,
+        { 127426935, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 272380917, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 467128874, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 110573422, 10, -10 } ,
+        { 230842398, 10, -10 } ,
+        { 300737523, 10, -10 } ,
+        { 524346197, 10, -10 } ,
+        { 31161235, 10, -9 } ,
+        { 115930781, 10, -10 } ,
+        { 105690272, 10, -9 } ,
+        { 286376361, 10, -10 } ,
+        { 277178451, 10, -9 } ,
+        { 332276008, 10, -10 } ,
+        { 200626202, 10, -10 } ,
+        { 257725676, 10, -10 } ,
+        { 225329068, 10, -10 } ,
+        { 260428812, 10, -10 } ,
+        { 368935449, 10, -10 } ,
+        { 373331012, 10, -10 } ,
+        { 832701024, 10, -10 } ,
+        { 847774796, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 529655696, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 244074662, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 313790238, 10, -11 } ,
+        { 341410522, 10, -10 } ,
+        { 184839898, 10, -10 } ,
+        { 213043468, 10, -10 } ,
+        { 148265205, 10, -10 } ,
+        { 447998341, 10, -11 } ,
+        { 928535264, 10, -11 } ,
+        { 16830234, 10, -9 } ,
+        { 308875898, 10, -10 } ,
+        { 447532985, 10, -11 } ,
+        { 993080777, 10, -11 } ,
+        { 796055452, 10, -9 } ,
+        { 115228599, 10, -10 } ,
+        { 104678862, 10, -10 } ,
+        { 224852364, 10, -10 } ,
+        { 169201052, 10, -10 } ,
+        { 127420138, 10, -10 } ,
+        { 17593733, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 580661331, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 289917427, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 730306723, 10, -11 } ,
+        { 98653337, 10, -10 } ,
+        { 133768816, 10, -10 } ,
+        { 646464007, 10, -10 } ,
+        { 126316072, 10, -10 } ,
+        { 492359506, 10, -11 } ,
+        { 225721104, 10, -9 } ,
+        { 140557326, 10, -10 } ,
+        { 344045687, 10, -9 } ,
+        { 224190464, 10, -10 } ,
+        { 86181637, 10, -10 } ,
+        { 115737082, 10, -10 } ,
+        { 109232974, 10, -10 } ,
+        { 127794949, 10, -10 } ,
+        { 18762611, 10, -9 } ,
+        { 247080892, 10, -10 } ,
+        { 981598774, 10, -10 } ,
+        { 437465972, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 155709039, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 289213462, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 333495109, 10, -11 } ,
+        { 210206692, 10, -10 } ,
+        { 397566998, 10, -10 } ,
+        { 681756245, 10, -11 } ,
+        { 211797014, 10, -10 } ,
+        { 931691641, 10, -11 } ,
+        { 997082734, 10, -11 } ,
+        { 471400266, 10, -9 } ,
+        { 19755142, 10, -9 } ,
+        { 712137302, 10, -11 } ,
+        { 45332193, 10, -9 } ,
+        { 170286532, 10, -10 } ,
+        { 608593975, 10, -10 } ,
+        { 170847728, 10, -9 } ,
+        { 327407306, 10, -10 } ,
+        { 228811658, 10, -10 } ,
+        { 144868843, 10, -10 } ,
+        { 247846753, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 872650727, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 317954268, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 745612419, 10, -11 } ,
+        { 992122832, 10, -11 } ,
+        { 144272853, 10, -10 } ,
+        { 118078982, 10, -9 } ,
+        { 137456778, 10, -10 } ,
+        { 54795992, 10, -10 } ,
+        { 830504353, 10, -10 } ,
+        { 145977454, 10, -10 } ,
+        { 333816417, 10, -9 } ,
+        { 216579937, 10, -10 } ,
+        { 909348225, 10, -11 } ,
+        { 118928447, 10, -10 } ,
+        { 114709387, 10, -10 } ,
+        { 135369563, 10, -10 } ,
+        { 202216377, 10, -10 } ,
+        { 256633366, 10, -10 } ,
+        { 184915107, 10, -9 } ,
+        { 515881495, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 200339234, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 25532143, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 506513688, 10, -11 } ,
+        { 298389525, 10, -10 } ,
+        { 231457103, 10, -10 } ,
+        { 99193508, 10, -9 } ,
+        { 390534803, 10, -10 } ,
+        { 107419366, 10, -10 } ,
+        { 754069658, 10, -10 } ,
+        { 22268733, 10, -9 } ,
+        { 132138965, 10, -9 } ,
+        { 11339777, 10, -9 } ,
+        { 350257789, 10, -9 } ,
+        { 125255265, 10, -10 } ,
+        { 174331856, 10, -10 } ,
+        { 187548191, 10, -10 } ,
+        { 350222966, 10, -10 } ,
+        { 268122374, 10, -10 } ,
+        { 35892657, 10, -9 } ,
+        { 367727817, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 153039222, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 505399813, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 508305668, 10, -11 } ,
+        { 166984721, 10, -10 } ,
+        { 29616023, 10, -9 } ,
+        { 312072651, 10, -10 } ,
+        { 198426998, 10, -10 } ,
+        { 1493128, 10, -8 } ,
+        { 177399726, 10, -10 } ,
+        { 258184898, 10, -10 } ,
+        { 430906099, 10, -10 } ,
+        { 548999827, 10, -10 } ,
+        { 266412543, 10, -10 } ,
+        { 102810516, 10, -9 } ,
+        { 13174635, 10, -8 } ,
+        { 211717047, 10, -10 } ,
+        { 775891571, 10, -10 } ,
+        { 365844905, 10, -10 } ,
+        { 235223166, 10, -10 } ,
+        { 854783234, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 274957188, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 295459922, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 90913897, 10, -10 } ,
+        { 1966725, 10, -8 } ,
+        { 270235588, 10, -10 } ,
+        { 11512459, 10, -9 } ,
+        { 995451773, 10, -10 } ,
+        { 739727583, 10, -11 } ,
+        { 259464442, 10, -10 } ,
+        { 260133439, 10, -10 } ,
+        { 359886652, 10, -10 } ,
+        { 104337525, 10, -10 } ,
+        { 203368233, 10, -10 } ,
+        { 215624329, 10, -10 } ,
+        { 190755175, 10, -10 } ,
+        { 18979991, 10, -9 } ,
+        { 109461055, 10, -9 } ,
+        { 149859998, 10, -9 } ,
+        { 92864049, 10, -9 } ,
+        { 335317623, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 107554876, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 492478459, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 550242687, 10, -11 } ,
+        { 215003161, 10, -10 } ,
+        { 220951005, 10, -10 } ,
+        { 776033331, 10, -11 } ,
+        { 459631856, 10, -9 } ,
+        { 696788255, 10, -11 } ,
+        { 948015653, 10, -11 } ,
+        { 220080215, 10, -10 } ,
+        { 165034174, 10, -10 } ,
+        { 569103497, 10, -11 } ,
+        { 38446691, 10, -9 } ,
+        { 160197332, 10, -10 } ,
+        { 159470525, 10, -10 } ,
+        { 156773249, 10, -10 } ,
+        { 236626674, 10, -9 } ,
+        { 442666445, 10, -10 } ,
+        { 148089217, 10, -10 } ,
+        { 286654986, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 734534227, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 367712401, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 25933985, 10, -9 } ,
+        { 197974533, 10, -10 } ,
+        { 194759484, 10, -10 } ,
+        { 130841413, 10, -10 } ,
+        { 403378123, 10, -10 } ,
+        { 701084881, 10, -11 } ,
+        { 631058166, 10, -10 } ,
+        { 187321795, 10, -10 } ,
+        { 48790463, 10, -9 } ,
+        { 123266231, 10, -10 } ,
+        { 166684222, 10, -9 } ,
+        { 132904189, 10, -10 } ,
+        { 144110287, 10, -10 } ,
+        { 151572753, 10, -10 } ,
+        { 512992294, 10, -10 } ,
+        { 313674838, 10, -10 } ,
+        { 36911522, 10, -8 } ,
+        { 258376384, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 10460469, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 287733822, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 676264517, 10, -11 } ,
+        { 103503636, 10, -10 } ,
+        { 139019235, 10, -10 } ,
+        { 199536719, 10, -10 } ,
+        { 131055744, 10, -10 } ,
+        { 495644069, 10, -11 } ,
+        { 323881868, 10, -9 } ,
+        { 15140205, 10, -9 } ,
+        { 14955705, 10, -8 } ,
+        { 157098919, 10, -9 } ,
+        { 984983561, 10, -11 } ,
+        { 116438104, 10, -10 } ,
+        { 126885377, 10, -10 } ,
+        { 128193512, 10, -10 } ,
+        { 214277832, 10, -10 } ,
+        { 593756558, 10, -10 } ,
+        { 759576899, 10, -10 } ,
+        { 347693344, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 114311683, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 247364235, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 307011628, 10, -11 } ,
+        { 133329175, 10, -10 } ,
+        { 17685685, 10, -9 } ,
+        { 460221957, 10, -11 } ,
+        { 147753446, 10, -10 } ,
+        { 432109816, 10, -11 } ,
+        { 812307921, 10, -11 } ,
+        { 1668515, 10, -8 } ,
+        { 137476518, 10, -10 } ,
+        { 393440005, 10, -11 } ,
+        { 956471933, 10, -11 } ,
+        { 839390282, 10, -9 } ,
+        { 113456228, 10, -10 } ,
+        { 10273511, 10, -9 } ,
+        { 419394758, 10, -10 } ,
+        { 170990605, 10, -10 } ,
+        { 117627495, 10, -10 } ,
+        { 154905509, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 485466809, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 760616652, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 80083637, 10, -10 } ,
+        { 116433979, 10, -10 } ,
+        { 159104072, 10, -10 } ,
+        { 319501405, 10, -10 } ,
+        { 164829899, 10, -10 } ,
+        { 4987426, 10, -9 } ,
+        { 251586121, 10, -9 } ,
+        { 162267808, 10, -10 } ,
+        { 928206512, 10, -10 } ,
+        { 414043646, 10, -10 } ,
+        { 101647468, 10, -10 } ,
+        { 40969229, 10, -9 } ,
+        { 122520398, 10, -10 } ,
+        { 129872004, 10, -10 } ,
+        { 25007116, 10, -9 } ,
+        { 301544365, 10, -10 } ,
+        { 247675312, 10, -9 } ,
+        { 343955589, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 131646299, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 209760498, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 515464336, 10, -11 } ,
+        { 743255067, 10, -11 } ,
+        { 916828074, 10, -11 } ,
+        { 150161413, 10, -10 } ,
+        { 881632097, 10, -11 } ,
+        { 322040346, 10, -11 } ,
+        { 553227329, 10, -9 } ,
+        { 100206867, 10, -10 } ,
+        { 85324405, 10, -9 } ,
+        { 840237215, 10, -10 } ,
+        { 63547853, 10, -10 } ,
+        { 834566247, 10, -11 } ,
+        { 774725335, 10, -11 } ,
+        { 822892069, 10, -11 } ,
+        { 135883968, 10, -10 } ,
+        { 188384475, 10, -10 } ,
+        { 883336338, 10, -10 } ,
+        { 237095334, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 846884577, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 167578968, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 406019507, 10, -11 } ,
+        { 669594661, 10, -11 } ,
+        { 929309908, 10, -11 } ,
+        { 464468497, 10, -9 } ,
+        { 100208699, 10, -10 } ,
+        { 572618569, 10, -11 } ,
+        { 251575049, 10, -10 } ,
+        { 914258357, 10, -11 } ,
+        { 255368039, 10, -9 } ,
+        { 122442153, 10, -10 } ,
+        { 652974287, 10, -11 } ,
+        { 692817331, 10, -11 } ,
+        { 701077239, 10, -11 } ,
+        { 900130719, 10, -11 } ,
+        { 132135178, 10, -10 } ,
+        { 132872687, 10, -10 } ,
+        { 248530992, 10, -10 } ,
+        { 645879538, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 597925785, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 376092863, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 732795953, 10, -11 } ,
+        { 170875845, 10, -10 } ,
+        { 37729046, 10, -9 } ,
+        { 264936885, 10, -10 } ,
+        { 314430469, 10, -10 } ,
+        { 724675061, 10, -11 } ,
+        { 205360624, 10, -10 } ,
+        { 250473603, 10, -10 } ,
+        { 302568161, 10, -10 } ,
+        { 908571268, 10, -11 } ,
+        { 161473119, 10, -10 } ,
+        { 182165725, 10, -10 } ,
+        { 967466752, 10, -10 } ,
+        { 186609403, 10, -10 } ,
+        { 104568913, 10, -9 } ,
+        { 679287999, 10, -10 } ,
+        { 89507819, 10, -9 } ,
+        { 302437535, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 102474427, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 736431238, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 637685179, 10, -11 } ,
+        { 195772728, 10, -10 } ,
+        { 255284569, 10, -10 } ,
+        { 333417481, 10, -10 } ,
+        { 365352457, 10, -10 } ,
+        { 812374769, 10, -11 } ,
+        { 157472272, 10, -10 } ,
+        { 247706601, 10, -10 } ,
+        { 386827051, 10, -10 } ,
+        { 345715074, 10, -10 } ,
+        { 219668506, 10, -10 } ,
+        { 167433375, 10, -10 } ,
+        { 250765732, 10, -10 } ,
+        { 477366638, 10, -10 } ,
+        { 412865364, 10, -9 } ,
+        { 854900808, 10, -10 } ,
+        { 389801876, 10, -10 } ,
+        { 350382196, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 494768976, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 335982687, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 727686234, 10, -11 } ,
+        { 381162623, 10, -10 } ,
+        { 252010543, 10, -10 } ,
+        { 861750909, 10, -11 } ,
+        { 324020801, 10, -10 } ,
+        { 659218147, 10, -11 } ,
+        { 1601993, 10, -8 } ,
+        { 226586595, 10, -10 } ,
+        { 245071376, 10, -10 } ,
+        { 750456636, 10, -11 } ,
+        { 189922967, 10, -10 } ,
+        { 182503561, 10, -10 } ,
+        { 169790249, 10, -10 } ,
+        { 164106255, 10, -10 } ,
+        { 275834339, 10, -9 } ,
+        { 841784063, 10, -10 } ,
+        { 528216527, 10, -10 } ,
+        { 254600237, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 850303156, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 291873775, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 672426009, 10, -11 } ,
+        { 100626138, 10, -10 } ,
+        { 137086838, 10, -10 } ,
+        { 557184266, 10, -10 } ,
+        { 132249553, 10, -10 } ,
+        { 475346272, 10, -11 } ,
+        { 17849905, 10, -8 } ,
+        { 139713848, 10, -10 } ,
+        { 366041265, 10, -9 } ,
+        { 196274099, 10, -10 } ,
+        { 933935033, 10, -11 } ,
+        { 112734667, 10, -10 } ,
+        { 109374527, 10, -10 } ,
+        { 12467092, 10, -9 } ,
+        { 591855634, 10, -10 } ,
+        { 24439165, 10, -9 } ,
+        { 108365902, 10, -9 } ,
+        { 385588758, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 13483249, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 436254621, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 773445072, 10, -11 } ,
+        { 134796204, 10, -10 } ,
+        { 202354185, 10, -10 } ,
+        { 766916669, 10, -10 } ,
+        { 388530614, 10, -10 } ,
+        { 730084574, 10, -11 } ,
+        { 95790632, 10, -9 } ,
+        { 196685072, 10, -10 } ,
+        { 266546449, 10, -9 } ,
+        { 417938962, 10, -10 } ,
+        { 132418503, 10, -10 } ,
+        { 143596479, 10, -10 } ,
+        { 374825632, 10, -10 } ,
+        { 171526587, 10, -10 } ,
+        { 391498444, 10, -10 } ,
+        { 613716473, 10, -10 } ,
+        { 112522694, 10, -9 } ,
+        { 543838148, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 356624402, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 146230451, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 887259116, 10, -11 } ,
+        { 361516655, 10, -10 } ,
+        { 283803909, 10, -10 } ,
+        { 38924009, 10, -9 } ,
+        { 319262063, 10, -10 } ,
+        { 955825082, 10, -11 } ,
+        { 532001569, 10, -10 } ,
+        { 259298723, 10, -10 } ,
+        { 146564043, 10, -9 } ,
+        { 300341079, 10, -10 } ,
+        { 212277367, 10, -10 } ,
+        { 204381729, 10, -10 } ,
+        { 201504961, 10, -10 } ,
+        { 205165487, 10, -10 } ,
+        { 170634194, 10, -9 } ,
+        { 612796383, 10, -10 } ,
+        { 695316048, 10, -10 } ,
+        { 534203578, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 540881929, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 380362625, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 668304104, 10, -11 } ,
+        { 428051151, 10, -10 } ,
+        { 242077233, 10, -10 } ,
+        { 106644179, 10, -9 } ,
+        { 324848435, 10, -10 } ,
+        { 248179955, 10, -10 } ,
+        { 958705023, 10, -10 } ,
+        { 222117899, 10, -10 } ,
+        { 171856635, 10, -9 } ,
+        { 2227858, 10, -8 } ,
+        { 152293724, 10, -9 } ,
+        { 149946827, 10, -10 } ,
+        { 176432921, 10, -10 } ,
+        { 191142425, 10, -10 } ,
+        { 342699135, 10, -10 } ,
+        { 515831942, 10, -10 } ,
+        { 555636486, 10, -10 } ,
+        { 540184637, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 383396133, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 464405663, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 51527533, 10, -10 } ,
+        { 144840575, 10, -10 } ,
+        { 19696003, 10, -9 } ,
+        { 184110872, 10, -10 } ,
+        { 173065839, 10, -10 } ,
+        { 540801441, 10, -11 } ,
+        { 148727575, 10, -9 } ,
+        { 185912513, 10, -10 } ,
+        { 970744466, 10, -10 } ,
+        { 99579945, 10, -10 } ,
+        { 111359609, 10, -10 } ,
+        { 453600341, 10, -9 } ,
+        { 314469844, 10, -10 } ,
+        { 133701911, 10, -10 } ,
+        { 24651181, 10, -9 } ,
+        { 219033694, 10, -10 } ,
+        { 635616708, 10, -10 } ,
+        { 277792214, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 880331525, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 133190523, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 866960922, 10, -11 } ,
+        { 357081802, 10, -10 } ,
+        { 424088301, 10, -10 } ,
+        { 680379652, 10, -10 } ,
+        { 705900366, 10, -10 } ,
+        { 380251692, 10, -10 } ,
+        { 38820561, 10, -9 } ,
+        { 40139465, 10, -9 } ,
+        { 60898167, 10, -9 } ,
+        { 141059413, 10, -10 } ,
+        { 257732942, 10, -10 } ,
+        { 386396599, 10, -10 } ,
+        { 917518129, 10, -10 } ,
+        { 723072342, 10, -10 } ,
+        { 690962807, 10, -10 } ,
+        { 363476545, 10, -10 } ,
+        { 635535905, 10, -10 } ,
+        { 684716867, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 489214514, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 491830504, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 857505703, 10, -11 } ,
+        { 187143081, 10, -10 } ,
+        { 243579326, 10, -10 } ,
+        { 551820307, 10, -10 } ,
+        { 241454114, 10, -10 } ,
+        { 902792063, 10, -11 } ,
+        { 817071464, 10, -10 } ,
+        { 235482366, 10, -10 } ,
+        { 184524721, 10, -9 } ,
+        { 167880033, 10, -10 } ,
+        { 19106057, 10, -9 } ,
+        { 194588588, 10, -10 } ,
+        { 180186429, 10, -10 } ,
+        { 198453615, 10, -10 } ,
+        { 583509553, 10, -10 } ,
+        { 20942313, 10, -8 } ,
+        { 801255372, 10, -10 } ,
+        { 600810165, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 627077053, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 354455573, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 709581677, 10, -11 } ,
+        { 112077621, 10, -10 } ,
+        { 14905161, 10, -9 } ,
+        { 101595903, 10, -9 } ,
+        { 153475215, 10, -10 } ,
+        { 561105769, 10, -11 } ,
+        { 214999972, 10, -9 } ,
+        { 149743557, 10, -10 } ,
+        { 262281299, 10, -9 } ,
+        { 189892055, 10, -10 } ,
+        { 987064738, 10, -11 } ,
+        { 126558628, 10, -10 } ,
+        { 116330301, 10, -10 } ,
+        { 13439241, 10, -9 } ,
+        { 207762678, 10, -10 } ,
+        { 297393345, 10, -10 } ,
+        { 950929284, 10, -10 } ,
+        { 46270388, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 190799203, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 250491606, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 843179813, 10, -11 } ,
+        { 194291222, 10, -10 } ,
+        { 26158172, 10, -9 } ,
+        { 12747579, 10, -9 } ,
+        { 105171401, 10, -9 } ,
+        { 216342378, 10, -10 } ,
+        { 614724562, 10, -10 } ,
+        { 250164153, 10, -10 } ,
+        { 752824569, 10, -10 } ,
+        { 1129484, 10, -8 } ,
+        { 200433165, 10, -10 } ,
+        { 416192018, 10, -10 } ,
+        { 18674278, 10, -9 } ,
+        { 185683117, 10, -10 } ,
+        { 136408673, 10, -9 } ,
+        { 926752453, 10, -10 } ,
+        { 515767643, 10, -10 } ,
+        { 338205233, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 112383809, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 501081709, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 487069923, 10, -11 } ,
+        { 41590466, 10, -9 } ,
+        { 492689581, 10, -10 } ,
+        { 317319405, 10, -10 } ,
+        { 461282187, 10, -10 } ,
+        { 115593392, 10, -10 } ,
+        { 14997429, 10, -9 } ,
+        { 390709292, 10, -10 } ,
+        { 578515032, 10, -10 } ,
+        { 203699589, 10, -10 } ,
+        { 48170401, 10, -9 } ,
+        { 166489924, 10, -10 } ,
+        { 253144344, 10, -9 } ,
+        { 108845436, 10, -9 } ,
+        { 941065525, 10, -10 } ,
+        { 660808344, 10, -10 } ,
+        { 206445243, 10, -10 } ,
+        { 409837059, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 406401617, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 508579416, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 633795566, 10, -11 } ,
+        { 114330698, 10, -10 } ,
+        { 154487271, 10, -10 } ,
+        { 229100355, 10, -9 } ,
+        { 170159128, 10, -10 } ,
+        { 757250691, 10, -11 } ,
+        { 971205076, 10, -10 } ,
+        { 152221678, 10, -10 } ,
+        { 139918699, 10, -9 } ,
+        { 524616956, 10, -10 } ,
+        { 227285675, 10, -10 } ,
+        { 116826449, 10, -10 } ,
+        { 122081573, 10, -10 } ,
+        { 13675456, 10, -9 } ,
+        { 320348898, 10, -10 } ,
+        { 22852614, 10, -9 } ,
+        { 911269587, 10, -10 } ,
+        { 594048016, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 565477021, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 679235976, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 88851867, 10, -10 } ,
+        { 179231623, 10, -10 } ,
+        { 232104207, 10, -10 } ,
+        { 980487937, 10, -10 } ,
+        { 248548166, 10, -10 } ,
+        { 813218675, 10, -11 } ,
+        { 875576477, 10, -10 } ,
+        { 224351388, 10, -10 } ,
+        { 277363297, 10, -9 } ,
+        { 209659672, 10, -10 } ,
+        { 251606934, 10, -10 } ,
+        { 188526689, 10, -10 } ,
+        { 173054681, 10, -10 } ,
+        { 196713746, 10, -10 } ,
+        { 580982788, 10, -10 } ,
+        { 744615048, 10, -10 } ,
+        { 746115406, 10, -10 } ,
+        { 609885167, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 210663633, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 569965637, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 800343379, 10, -11 } ,
+        { 322844431, 10, -10 } ,
+        { 520226428, 10, -10 } ,
+        { 663574292, 10, -10 } ,
+        { 188822372, 10, -9 } ,
+        { 311358877, 10, -10 } ,
+        { 351472647, 10, -10 } ,
+        { 445619719, 10, -10 } ,
+        { 474367631, 10, -10 } ,
+        { 121747284, 10, -10 } ,
+        { 741451044, 10, -10 } ,
+        { 245079222, 10, -10 } ,
+        { 538076525, 10, -10 } ,
+        { 48785796, 10, -9 } ,
+        { 817256868, 10, -10 } ,
+        { 48313695, 10, -9 } ,
+        { 31628613, 10, -9 } ,
+        { 736447345, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 59141803, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 684094234, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 102434134, 10, -10 } ,
+        { 342073411, 10, -10 } ,
+        { 465270197, 10, -10 } ,
+        { 562684642, 10, -10 } ,
+        { 939359156, 10, -10 } ,
+        { 1457997, 10, -8 } ,
+        { 566950798, 10, -10 } ,
+        { 512305741, 10, -10 } ,
+        { 848935625, 10, -10 } ,
+        { 216173837, 10, -10 } ,
+        { 546008168, 10, -10 } ,
+        { 412870883, 10, -10 } ,
+        { 737361667, 10, -10 } ,
+        { 437778684, 10, -10 } ,
+        { 103548061, 10, -9 } ,
+        { 499251336, 10, -10 } ,
+        { 605532434, 10, -10 } ,
+        { 74634781, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 311252939, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 557912643, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 153168321, 10, -10 } ,
+        { 757273289, 10, -10 } ,
+        { 746418083, 10, -10 } ,
+        { 271380768, 10, -10 } ,
+        { 770494763, 10, -10 } ,
+        { 199914921, 10, -10 } ,
+        { 344402897, 10, -10 } ,
+        { 600332891, 10, -10 } ,
+        { 116390449, 10, -9 } ,
+        { 173140872, 10, -10 } ,
+        { 477438749, 10, -10 } ,
+        { 296364582, 10, -10 } ,
+        { 530536545, 10, -10 } ,
+        { 886274679, 10, -10 } ,
+        { 863171564, 10, -10 } ,
+        { 510009838, 10, -10 } ,
+        { 510431275, 10, -10 } ,
+        { 630627378, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 187694104, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 787085934, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 225325589, 10, -10 } ,
+        { 485053063, 10, -10 } ,
+        { 487021205, 10, -10 } ,
+        { 786817851, 10, -10 } ,
+        { 63693075, 10, -9 } ,
+        { 23115476, 10, -9 } ,
+        { 279343914, 10, -10 } ,
+        { 436918322, 10, -10 } ,
+        { 595788499, 10, -10 } ,
+        { 139568044, 10, -10 } ,
+        { 635901071, 10, -10 } ,
+        { 625559109, 10, -10 } ,
+        { 696345291, 10, -10 } ,
+        { 407089174, 10, -10 } ,
+        { 100834398, 10, -9 } ,
+        { 4667553, 10, -8 } ,
+        { 459921892, 10, -10 } ,
+        { 219004152, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 493891932, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 671976171, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 787742893, 10, -11 } ,
+        { 396890775, 10, -10 } ,
+        { 508095395, 10, -10 } ,
+        { 140713444, 10, -10 } ,
+        { 112128842, 10, -9 } ,
+        { 104492837, 10, -10 } ,
+        { 339479609, 10, -10 } ,
+        { 354583023, 10, -10 } ,
+        { 605415423, 10, -10 } ,
+        { 115436459, 10, -10 } ,
+        { 471909969, 10, -10 } ,
+        { 210355127, 10, -9 } ,
+        { 415354059, 10, -10 } ,
+        { 528916744, 10, -10 } ,
+        { 109319691, 10, -9 } ,
+        { 541670056, 10, -10 } ,
+        { 629824472, 10, -10 } ,
+        { 434240883, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 12714666, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 766360947, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 829447551, 10, -11 } ,
+        { 598790684, 10, -10 } ,
+        { 692105775, 10, -10 } ,
+        { 223070273, 10, -10 } ,
+        { 713308287, 10, -10 } ,
+        { 174176915, 10, -10 } ,
+        { 234574197, 10, -10 } ,
+        { 789825972, 10, -10 } ,
+        { 563630711, 10, -10 } ,
+        { 121990003, 10, -10 } ,
+        { 930966942, 10, -10 } ,
+        { 256251308, 10, -10 } ,
+        { 549420045, 10, -10 } ,
+        { 412097425, 10, -10 } ,
+        { 10165779, 10, -8 } ,
+        { 113544901, 10, -9 } ,
+        { 390434099, 10, -10 } ,
+        { 383680291, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 168928528, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 985219787, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 140053741, 10, -10 } ,
+        { 31299573, 10, -9 } ,
+        { 290773631, 10, -10 } ,
+        { 273700886, 10, -10 } ,
+        { 152915299, 10, -9 } ,
+        { 184578495, 10, -10 } ,
+        { 140783195, 10, -10 } ,
+        { 381270421, 10, -10 } ,
+        { 241531511, 10, -10 } ,
+        { 764246021, 10, -11 } ,
+        { 24349809, 10, -8 } ,
+        { 181754535, 10, -10 } ,
+        { 21199314, 10, -9 } ,
+        { 221809476, 10, -10 } ,
+        { 119495231, 10, -9 } ,
+        { 800699283, 10, -10 } ,
+        { 208839155, 10, -10 } ,
+        { 366880095, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 288391086, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 70033696, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 824200241, 10, -11 } ,
+        { 488650806, 10, -10 } ,
+        { 107607971, 10, -9 } ,
+        { 28818636, 10, -9 } ,
+        { 814804898, 10, -10 } ,
+        { 136440828, 10, -10 } ,
+        { 378189589, 10, -10 } ,
+        { 601178031, 10, -10 } ,
+        { 671987353, 10, -10 } ,
+        { 135214585, 10, -10 } ,
+        { 543327327, 10, -10 } ,
+        { 951416679, 10, -10 } ,
+        { 58531557, 10, -9 } ,
+        { 395289952, 10, -10 } ,
+        { 973419194, 10, -10 } ,
+        { 571590255, 10, -10 } ,
+        { 383221997, 10, -10 } ,
+        { 25294006, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 275095126, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 897508997, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 678012206, 10, -11 } ,
+        { 14471769, 10, -9 } ,
+        { 207251043, 10, -10 } ,
+        { 731442344, 10, -10 } ,
+        { 223500362, 10, -10 } ,
+        { 69207369, 10, -10 } ,
+        { 979169725, 10, -10 } ,
+        { 33060957, 10, -9 } ,
+        { 125274838, 10, -9 } ,
+        { 133369157, 10, -10 } ,
+        { 244934641, 10, -10 } ,
+        { 759247875, 10, -10 } ,
+        { 256122677, 10, -10 } ,
+        { 168805896, 10, -10 } ,
+        { 383289831, 10, -10 } ,
+        { 420263899, 10, -10 } ,
+        { 569953075, 10, -10 } ,
+        { 18716898, 10, -8 } ,
+        { 0, 10, 0 } ,
+        { 22485912, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 700729545, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 874550282, 10, -11 } ,
+        { 257086728, 10, -10 } ,
+        { 225218664, 10, -10 } ,
+        { 403203148, 10, -10 } ,
+        { 384983026, 10, -10 } ,
+        { 74418784, 10, -10 } ,
+        { 133012972, 10, -9 } ,
+        { 227153562, 10, -10 } ,
+        { 172026616, 10, -9 } ,
+        { 31755828, 10, -9 } ,
+        { 153078219, 10, -10 } ,
+        { 169184671, 10, -10 } ,
+        { 234714859, 10, -10 } ,
+        { 325205665, 10, -10 } ,
+        { 340882252, 10, -10 } ,
+        { 754876707, 10, -10 } ,
+        { 162470155, 10, -9 } ,
+        { 489765638, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 308830613, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 504424396, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 77372658, 10, -10 } ,
+        { 409184584, 10, -10 } ,
+        { 566092563, 10, -10 } ,
+        { 190186525, 10, -10 } ,
+        { 791607775, 10, -10 } ,
+        { 127494579, 10, -10 } ,
+        { 314725982, 10, -10 } ,
+        { 105111735, 10, -9 } ,
+        { 721904257, 10, -10 } ,
+        { 132590932, 10, -10 } ,
+        { 372931345, 10, -10 } ,
+        { 238567965, 10, -10 } ,
+        { 607094682, 10, -10 } ,
+        { 854376398, 10, -10 } ,
+        { 99322688, 10, -9 } ,
+        { 103829817, 10, -9 } ,
+        { 494108169, 10, -10 } ,
+        { 232785035, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 426935999, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 494565827, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 676856904, 10, -11 } ,
+        { 522738155, 10, -10 } ,
+        { 404810894, 10, -10 } ,
+        { 743130149, 10, -10 } ,
+        { 141407128, 10, -9 } ,
+        { 196013952, 10, -10 } ,
+        { 241613123, 10, -10 } ,
+        { 650500031, 10, -10 } ,
+        { 716628084, 10, -10 } ,
+        { 18421703, 10, -9 } ,
+        { 595334048, 10, -10 } ,
+        { 202219548, 10, -10 } ,
+        { 899013742, 10, -10 } ,
+        { 427144467, 10, -10 } ,
+        { 567158794, 10, -10 } ,
+        { 555335667, 10, -10 } ,
+        { 398117454, 10, -10 } ,
+        { 355118246, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 398415765, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 505790873, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 809071876, 10, -11 } ,
+        { 146592675, 10, -10 } ,
+        { 189723609, 10, -10 } ,
+        { 654512456, 10, -10 } ,
+        { 194919988, 10, -10 } ,
+        { 654261985, 10, -11 } ,
+        { 190872508, 10, -9 } ,
+        { 18789781, 10, -9 } ,
+        { 221515197, 10, -9 } ,
+        { 198166923, 10, -10 } ,
+        { 188202219, 10, -10 } ,
+        { 576803228, 10, -10 } ,
+        { 143375509, 10, -10 } ,
+        { 160834929, 10, -10 } ,
+        { 273459496, 10, -10 } ,
+        { 470146091, 10, -10 } ,
+        { 106015536, 10, -9 } ,
+        { 296391691, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 179939606, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 170089416, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 159833939, 10, -10 } ,
+        { 219006202, 10, -10 } ,
+        { 443607598, 10, -10 } ,
+        { 320122923, 10, -10 } ,
+        { 533387714, 10, -10 } ,
+        { 894746059, 10, -11 } ,
+        { 888692635, 10, -10 } ,
+        { 29696391, 10, -9 } ,
+        { 114308551, 10, -9 } ,
+        { 229097409, 10, -10 } ,
+        { 201114734, 10, -10 } ,
+        { 224848945, 10, -10 } ,
+        { 408445031, 10, -10 } ,
+        { 301652772, 10, -10 } ,
+        { 912410348, 10, -10 } ,
+        { 500483114, 10, -10 } ,
+        { 113450643, 10, -9 } ,
+        { 4707379, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 156523395, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 500835302, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 605480884, 10, -11 } ,
+        { 934504313, 10, -10 } ,
+        { 5570461, 10, -8 } ,
+        { 678596013, 10, -10 } ,
+        { 274755885, 10, -10 } ,
+        { 149320025, 10, -10 } ,
+        { 301157646, 10, -10 } ,
+        { 507432352, 10, -10 } ,
+        { 638371214, 10, -10 } ,
+        { 150140401, 10, -10 } ,
+        { 103126815, 10, -9 } ,
+        { 406126165, 10, -10 } ,
+        { 413280188, 10, -10 } ,
+        { 334064352, 10, -10 } ,
+        { 726264731, 10, -10 } ,
+        { 546868354, 10, -10 } ,
+        { 323257718, 10, -10 } ,
+        { 75891721, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 143356192, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 109590036, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 588253425, 10, -11 } ,
+        { 252535878, 10, -10 } ,
+        { 194531023, 10, -10 } ,
+        { 561513567, 10, -10 } ,
+        { 448234969, 10, -10 } ,
+        { 217351957, 10, -10 } ,
+        { 389863593, 10, -10 } ,
+        { 183573559, 10, -10 } ,
+        { 115638542, 10, -9 } ,
+        { 229235375, 10, -10 } ,
+        { 220983772, 10, -10 } ,
+        { 131672338, 10, -10 } ,
+        { 148083674, 10, -10 } ,
+        { 155712321, 10, -10 } ,
+        { 608658689, 10, -10 } ,
+        { 546956324, 10, -10 } ,
+        { 408809297, 10, -10 } ,
+        { 861056626, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 279672252, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 60110593, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 788702236, 10, -11 } ,
+        { 125415635, 10, -10 } ,
+        { 19219017, 10, -9 } ,
+        { 12082476, 10, -8 } ,
+        { 179122526, 10, -10 } ,
+        { 733540818, 10, -11 } ,
+        { 923120058, 10, -10 } ,
+        { 275533877, 10, -10 } ,
+        { 301920038, 10, -9 } ,
+        { 296734561, 10, -10 } ,
+        { 117662822, 10, -10 } ,
+        { 141104787, 10, -10 } ,
+        { 269618322, 10, -10 } ,
+        { 175580998, 10, -10 } ,
+        { 265181511, 10, -10 } ,
+        { 3811833, 10, -8 } ,
+        { 871953912, 10, -10 } ,
+        { 62522016, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 33952123, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 783628076, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 188989773, 10, -10 } ,
+        { 671308228, 10, -10 } ,
+        { 43363908, 10, -9 } ,
+        { 289661133, 10, -10 } ,
+        { 533785068, 10, -10 } ,
+        { 114184207, 10, -10 } ,
+        { 321490447, 10, -10 } ,
+        { 40950666, 10, -9 } ,
+        { 506091284, 10, -10 } ,
+        { 10747873, 10, -9 } ,
+        { 706917586, 10, -10 } ,
+        { 422533078, 10, -10 } ,
+        { 955629341, 10, -10 } ,
+        { 396898742, 10, -10 } ,
+        { 23330393, 10, -8 } ,
+        { 651052703, 10, -10 } ,
+        { 278296759, 10, -10 } ,
+        { 383411438, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 132540831, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 29057592, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 41881421, 10, -10 } ,
+        { 159542285, 10, -10 } ,
+        { 213546736, 10, -10 } ,
+        { 575186448, 10, -10 } ,
+        { 415445764, 10, -10 } ,
+        { 436634816, 10, -10 } ,
+        { 148855173, 10, -10 } ,
+        { 209914109, 10, -10 } ,
+        { 569849809, 10, -10 } ,
+        { 309905274, 10, -10 } ,
+        { 274326799, 10, -10 } ,
+        { 520603216, 10, -9 } ,
+        { 151924402, 10, -10 } ,
+        { 307196126, 10, -10 } ,
+        { 27104116, 10, -9 } ,
+        { 268819851, 10, -10 } ,
+        { 187216784, 10, -10 } ,
+        { 355861681, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 449845494, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 935686877, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 770567019, 10, -11 } ,
+        { 489170331, 10, -10 } ,
+        { 36057588, 10, -9 } ,
+        { 412706495, 10, -10 } ,
+        { 166031817, 10, -9 } ,
+        { 204254959, 10, -10 } ,
+        { 197126322, 10, -10 } ,
+        { 33392146, 10, -9 } ,
+        { 329068979, 10, -10 } ,
+        { 100225594, 10, -10 } ,
+        { 103103547, 10, -9 } ,
+        { 973812714, 10, -10 } ,
+        { 373542804, 10, -10 } ,
+        { 313471097, 10, -10 } ,
+        { 903444369, 10, -10 } ,
+        { 104151383, 10, -9 } ,
+        { 340222724, 10, -10 } ,
+        { 443135844, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 153980184, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 9516375, 10, -8 } ,
+        { 0, 10, 0 } ,
+        { 871207913, 10, -11 } ,
+        { 487555818, 10, -10 } ,
+        { 599853125, 10, -10 } ,
+        { 151289934, 10, -10 } ,
+        { 924320107, 10, -10 } ,
+        { 395534123, 10, -10 } ,
+        { 456509443, 10, -10 } ,
+        { 775427491, 10, -10 } ,
+        { 51272209, 10, -9 } ,
+        { 136523451, 10, -10 } ,
+        { 374143063, 10, -10 } ,
+        { 393588781, 10, -10 } ,
+        { 695265415, 10, -10 } ,
+        { 595344472, 10, -10 } ,
+        { 112695726, 10, -9 } ,
+        { 806524815, 10, -10 } ,
+        { 521511679, 10, -10 } ,
+        { 444569509, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 163916688, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 491689425, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 706344366, 10, -11 } ,
+        { 19018089, 10, -9 } ,
+        { 235469558, 10, -10 } ,
+        { 530694799, 10, -10 } ,
+        { 237465731, 10, -10 } ,
+        { 772763071, 10, -11 } ,
+        { 97181791, 10, -9 } ,
+        { 223749458, 10, -10 } ,
+        { 842944202, 10, -10 } ,
+        { 132260089, 10, -10 } ,
+        { 444839273, 10, -10 } ,
+        { 218988217, 10, -9 } ,
+        { 168787777, 10, -10 } ,
+        { 169531761, 10, -10 } ,
+        { 934809099, 10, -10 } ,
+        { 323284706, 10, -10 } ,
+        { 941270553, 10, -10 } ,
+        { 742321906, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 249716522, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 71152131, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 799285832, 10, -11 } ,
+        { 134335103, 10, -10 } ,
+        { 204739687, 10, -10 } ,
+        { 110687298, 10, -9 } ,
+        { 202836927, 10, -10 } ,
+        { 114730764, 10, -10 } ,
+        { 869354867, 10, -10 } ,
+        { 20171091, 10, -9 } ,
+        { 159474738, 10, -9 } ,
+        { 400488418, 10, -10 } ,
+        { 132020626, 10, -10 } ,
+        { 268252022, 10, -10 } ,
+        { 221558298, 10, -10 } ,
+        { 176428415, 10, -10 } ,
+        { 30109307, 10, -9 } ,
+        { 386552812, 10, -10 } ,
+        { 110363106, 10, -9 } ,
+        { 183431516, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 126377352, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 480857065, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 562579054, 10, -11 } ,
+        { 131288096, 10, -10 } ,
+        { 184310708, 10, -10 } ,
+        { 102807627, 10, -9 } ,
+        { 109321832, 10, -9 } ,
+        { 196419967, 10, -10 } ,
+        { 692431881, 10, -10 } ,
+        { 319251466, 10, -10 } ,
+        { 433306833, 10, -10 } ,
+        { 183743393, 10, -10 } ,
+        { 196349668, 10, -10 } ,
+        { 124607925, 10, -10 } ,
+        { 147867844, 10, -10 } ,
+        { 163972676, 10, -10 } ,
+        { 27175447, 10, -9 } ,
+        { 348716742, 10, -10 } ,
+        { 501222098, 10, -10 } ,
+        { 741191537, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 252005064, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 560381467, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 642332059, 10, -11 } ,
+        { 145358002, 10, -9 } ,
+        { 472351243, 10, -10 } ,
+        { 101846963, 10, -10 } ,
+        { 612908209, 10, -10 } ,
+        { 234749224, 10, -10 } ,
+        { 133185201, 10, -10 } ,
+        { 463246277, 10, -10 } ,
+        { 222462424, 10, -10 } ,
+        { 782822158, 10, -11 } ,
+        { 255736499, 10, -9 } ,
+        { 217278192, 10, -10 } ,
+        { 294869513, 10, -10 } ,
+        { 403238711, 10, -10 } ,
+        { 161398341, 10, -9 } ,
+        { 435790168, 10, -10 } ,
+        { 194176268, 10, -10 } ,
+        { 292647989, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 114031584, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 136229247, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 248670085, 10, -10 } ,
+        { 202497396, 10, -10 } ,
+        { 273632602, 10, -10 } ,
+        { 824449074, 10, -11 } ,
+        { 480672838, 10, -10 } ,
+        { 697682382, 10, -11 } ,
+        { 145882471, 10, -10 } ,
+        { 260311416, 10, -10 } ,
+        { 245494007, 10, -10 } ,
+        { 710894442, 10, -11 } ,
+        { 159704513, 10, -10 } ,
+        { 557030933, 10, -9 } ,
+        { 180520154, 10, -10 } ,
+        { 167571154, 10, -10 } ,
+        { 588555187, 10, -10 } ,
+        { 391978106, 10, -10 } ,
+        { 228082396, 10, -10 } ,
+        { 273312959, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 838134055, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 562580236, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 556005289, 10, -11 } ,
+        { 971883363, 10, -10 } ,
+        { 16553628, 10, -8 } ,
+        { 253724712, 10, -10 } ,
+        { 316367965, 10, -10 } ,
+        { 143022392, 10, -10 } ,
+        { 187260829, 10, -10 } ,
+        { 134340247, 10, -9 } ,
+        { 330298351, 10, -10 } ,
+        { 104229769, 10, -10 } ,
+        { 458881912, 10, -10 } ,
+        { 245041509, 10, -10 } ,
+        { 460525558, 10, -10 } ,
+        { 15730517, 10, -8 } ,
+        { 65665076, 10, -9 } ,
+        { 35728984, 10, -9 } ,
+        { 377735792, 10, -10 } ,
+        { 405661556, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 146426802, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 56254212, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 582439, 10, -8 } ,
+        { 24322843, 10, -8 } ,
+        { 155376007, 10, -9 } ,
+        { 103446998, 10, -10 } ,
+        { 341785283, 10, -10 } ,
+        { 238379721, 10, -10 } ,
+        { 156321091, 10, -10 } ,
+        { 629480599, 10, -10 } ,
+        { 267916992, 10, -10 } ,
+        { 899148713, 10, -11 } ,
+        { 41012435, 10, -9 } ,
+        { 253342519, 10, -10 } ,
+        { 806494439, 10, -10 } ,
+        { 463643925, 10, -10 } ,
+        { 853051564, 10, -10 } ,
+        { 736300728, 10, -10 } ,
+        { 229533128, 10, -10 } ,
+        { 343133576, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 120671764, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 479467818, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 100033415, 10, -10 } ,
+        { 174403753, 10, -10 } ,
+        { 273863931, 10, -10 } ,
+        { 245813503, 10, -10 } ,
+        { 211446385, 10, -10 } ,
+        { 800781349, 10, -11 } ,
+        { 13667358, 10, -8 } ,
+        { 274739025, 10, -10 } ,
+        { 14985226, 10, -8 } ,
+        { 570196002, 10, -10 } ,
+        { 170934385, 10, -10 } ,
+        { 18749468, 10, -9 } ,
+        { 46147312, 10, -9 } ,
+        { 329497383, 10, -10 } ,
+        { 373854954, 10, -10 } ,
+        { 815774557, 10, -10 } ,
+        { 180477963, 10, -9 } ,
+        { 471847133, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 163517944, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 459942482, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 104638787, 10, -10 } ,
+        { 212846605, 10, -10 } ,
+        { 317148714, 10, -10 } ,
+        { 114387393, 10, -10 } ,
+        { 48866886, 10, -9 } ,
+        { 852803317, 10, -11 } ,
+        { 19762792, 10, -9 } ,
+        { 298288228, 10, -10 } ,
+        { 330697497, 10, -10 } ,
+        { 10111737, 10, -9 } ,
+        { 205931078, 10, -10 } ,
+        { 253063499, 10, -10 } ,
+        { 21907889, 10, -9 } ,
+        { 212420418, 10, -10 } ,
+        { 156709745, 10, -9 } ,
+        { 416247081, 10, -10 } ,
+        { 359278648, 10, -10 } ,
+        { 352044044, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 113102598, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 453425367, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 559612711, 10, -11 } ,
+        { 129476362, 10, -9 } ,
+        { 157554455, 10, -9 } ,
+        { 115302726, 10, -10 } ,
+        { 33794224, 10, -9 } ,
+        { 144767677, 10, -10 } ,
+        { 210699199, 10, -10 } ,
+        { 16370499, 10, -8 } ,
+        { 456484229, 10, -10 } ,
+        { 108251433, 10, -10 } ,
+        { 638306278, 10, -10 } ,
+        { 26051178, 10, -9 } ,
+        { 668481371, 10, -10 } ,
+        { 771003253, 10, -10 } ,
+        { 733671842, 10, -10 } ,
+        { 418458708, 10, -10 } ,
+        { 24774792, 10, -9 } ,
+        { 373144746, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 127478204, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 352641768, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 473395974, 10, -11 } ,
+        { 451563226, 10, -10 } ,
+        { 115815706, 10, -9 } ,
+        { 898033891, 10, -11 } ,
+        { 331968986, 10, -10 } ,
+        { 168023472, 10, -10 } ,
+        { 121442499, 10, -10 } ,
+        { 648091157, 10, -10 } ,
+        { 236608989, 10, -10 } ,
+        { 943496434, 10, -11 } ,
+        { 252625931, 10, -9 } ,
+        { 201137788, 10, -10 } ,
+        { 194885956, 10, -9 } ,
+        { 7602439, 10, -8 } ,
+        { 509841939, 10, -10 } ,
+        { 338477012, 10, -10 } ,
+        { 180208275, 10, -10 } ,
+        { 33903801, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 11601413, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 336850167, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 834984234, 10, -11 } ,
+        { 116347474, 10, -10 } ,
+        { 172622778, 10, -10 } ,
+        { 104863061, 10, -9 } ,
+        { 163916017, 10, -10 } ,
+        { 709986854, 10, -11 } ,
+        { 91121094, 10, -9 } ,
+        { 182706551, 10, -10 } ,
+        { 353370315, 10, -9 } ,
+        { 878164167, 10, -10 } ,
+        { 110961483, 10, -10 } ,
+        { 136957332, 10, -10 } ,
+        { 155592805, 10, -10 } ,
+        { 173461013, 10, -10 } ,
+        { 234224623, 10, -10 } ,
+        { 278079036, 10, -10 } ,
+        { 608412278, 10, -10 } ,
+        { 652126107, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 232786557, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 498797866, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 532662737, 10, -11 } ,
+        { 303721833, 10, -10 } ,
+        { 654018275, 10, -10 } ,
+        { 123230737, 10, -10 } ,
+        { 634360504, 10, -10 } ,
+        { 256332306, 10, -10 } ,
+        { 314130805, 10, -10 } ,
+        { 294854335, 10, -9 } ,
+        { 323633143, 10, -10 } ,
+        { 110329234, 10, -10 } ,
+        { 47199233, 10, -9 } ,
+        { 237273939, 10, -10 } ,
+        { 940262894, 10, -10 } ,
+        { 882783027, 10, -10 } ,
+        { 465471209, 10, -10 } ,
+        { 327091869, 10, -10 } ,
+        { 333370969, 10, -10 } ,
+        { 409867176, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 248255009, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 426527295, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 504828712, 10, -11 } ,
+        { 877861561, 10, -10 } ,
+        { 103369678, 10, -9 } ,
+        { 98400955, 10, -10 } ,
+        { 327849051, 10, -10 } ,
+        { 137505967, 10, -10 } ,
+        { 141049335, 10, -10 } ,
+        { 265499168, 10, -9 } ,
+        { 267089464, 10, -10 } ,
+        { 944793578, 10, -11 } ,
+        { 784513918, 10, -10 } ,
+        { 245799467, 10, -10 } ,
+        { 54152399, 10, -9 } ,
+        { 115159226, 10, -9 } ,
+        { 703353893, 10, -10 } ,
+        { 352508278, 10, -10 } ,
+        { 205138445, 10, -10 } ,
+        { 340479354, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 120608907, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 89158293, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 793935098, 10, -11 } ,
+        { 292815566, 10, -10 } ,
+        { 496348838, 10, -10 } ,
+        { 320482177, 10, -10 } ,
+        { 470384157, 10, -10 } ,
+        { 149879759, 10, -10 } ,
+        { 265318772, 10, -10 } ,
+        { 420308795, 10, -10 } ,
+        { 757232715, 10, -10 } ,
+        { 692466663, 10, -10 } ,
+        { 585710069, 10, -10 } ,
+        { 226712473, 10, -10 } ,
+        { 154932244, 10, -9 } ,
+        { 338066638, 10, -10 } ,
+        { 13159674, 10, -8 } ,
+        { 417419553, 10, -10 } ,
+        { 344214742, 10, -10 } ,
+        { 61299565, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 506840071, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 619512453, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 575760418, 10, -11 } ,
+        { 455832669, 10, -10 } ,
+        { 452471333, 10, -10 } ,
+        { 940333263, 10, -11 } ,
+        { 491538657, 10, -9 } ,
+        { 188870005, 10, -10 } ,
+        { 108607514, 10, -10 } ,
+        { 289077578, 10, -10 } ,
+        { 198272273, 10, -10 } ,
+        { 706493025, 10, -11 } ,
+        { 472430393, 10, -10 } ,
+        { 187467081, 10, -10 } ,
+        { 545074646, 10, -10 } ,
+        { 207586676, 10, -10 } ,
+        { 729330963, 10, -10 } ,
+        { 277266781, 10, -10 } ,
+        { 166503905, 10, -10 } ,
+        { 379856465, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 935354912, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 132173817, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 101164895, 10, -10 } ,
+        { 23721452, 10, -9 } ,
+        { 435962091, 10, -10 } ,
+        { 215521593, 10, -10 } ,
+        { 121307367, 10, -9 } ,
+        { 99250212, 10, -10 } ,
+        { 633136039, 10, -10 } ,
+        { 396180858, 10, -10 } ,
+        { 118056408, 10, -9 } ,
+        { 786207804, 10, -10 } ,
+        { 234439376, 10, -10 } ,
+        { 231565709, 10, -10 } ,
+        { 265237957, 10, -10 } ,
+        { 350051463, 10, -10 } ,
+        { 870512457, 10, -10 } ,
+        { 458911987, 10, -10 } ,
+        { 682872187, 10, -10 } ,
+        { 510490698, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 152624729, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 796578517, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 891504666, 10, -11 } ,
+        { 237850702, 10, -10 } ,
+        { 515174853, 10, -10 } ,
+        { 133071382, 10, -9 } ,
+        { 300884054, 10, -10 } ,
+        { 139152427, 10, -10 } ,
+        { 415776583, 10, -10 } ,
+        { 320853709, 10, -10 } ,
+        { 689426113, 10, -10 } ,
+        { 163628341, 10, -10 } ,
+        { 22927759, 10, -9 } ,
+        { 209821143, 10, -10 } ,
+        { 651604859, 10, -10 } ,
+        { 259822622, 10, -10 } ,
+        { 924698942, 10, -10 } ,
+        { 658759036, 10, -10 } ,
+        { 103201988, 10, -9 } ,
+        { 911762979, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 820983252, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 329989386, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 813063161, 10, -11 } ,
+        { 116671814, 10, -10 } ,
+        { 142627711, 10, -10 } ,
+        { 235287072, 10, -10 } ,
+        { 137265286, 10, -10 } ,
+        { 49618091, 10, -10 } ,
+        { 412830738, 10, -9 } ,
+        { 155356283, 10, -10 } ,
+        { 11641287, 10, -8 } ,
+        { 564612174, 10, -10 } ,
+        { 987730942, 10, -11 } ,
+        { 130996172, 10, -10 } ,
+        { 118316454, 10, -10 } ,
+        { 127188268, 10, -10 } ,
+        { 212112975, 10, -10 } ,
+        { 29659707, 10, -9 } ,
+        { 118030121, 10, -9 } ,
+        { 36794212, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 132766978, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 633755849, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 526522469, 10, -11 } ,
+        { 238779739, 10, -10 } ,
+        { 485241445, 10, -10 } ,
+        { 988929924, 10, -11 } ,
+        { 258044378, 10, -10 } ,
+        { 886957975, 10, -11 } ,
+        { 153505769, 10, -10 } ,
+        { 69582759, 10, -9 } ,
+        { 32276217, 10, -9 } ,
+        { 233204112, 10, -10 } ,
+        { 357286757, 10, -10 } ,
+        { 524161361, 10, -9 } ,
+        { 370867377, 10, -10 } ,
+        { 447653748, 10, -10 } ,
+        { 451587316, 10, -10 } ,
+        { 286530343, 10, -10 } ,
+        { 217376377, 10, -10 } ,
+        { 312701312, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 180167782, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 634950597, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 576811117, 10, -11 } ,
+        { 40948123, 10, -9 } ,
+        { 236493195, 10, -10 } ,
+        { 983703044, 10, -11 } ,
+        { 547250341, 10, -9 } ,
+        { 806226181, 10, -11 } ,
+        { 122073492, 10, -10 } ,
+        { 240673195, 10, -10 } ,
+        { 411036737, 10, -10 } ,
+        { 723172056, 10, -11 } ,
+        { 567777232, 10, -10 } ,
+        { 17229413, 10, -9 } ,
+        { 1699609, 10, -8 } ,
+        { 16989614, 10, -9 } ,
+        { 633996758, 10, -10 } ,
+        { 258597512, 10, -10 } ,
+        { 173574912, 10, -10 } ,
+        { 366454254, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 826184002, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 446110155, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 930689747, 10, -11 } ,
+        { 188955383, 10, -10 } ,
+        { 26650192, 10, -9 } ,
+        { 101818937, 10, -9 } ,
+        { 234628481, 10, -10 } ,
+        { 437050198, 10, -10 } ,
+        { 155959121, 10, -9 } ,
+        { 432602632, 10, -10 } ,
+        { 951758931, 10, -10 } ,
+        { 319775229, 10, -10 } ,
+        { 190916813, 10, -10 } ,
+        { 190386542, 10, -10 } ,
+        { 208535777, 10, -10 } ,
+        { 358423145, 10, -10 } ,
+        { 4244424, 10, -8 } ,
+        { 475893109, 10, -10 } ,
+        { 136531535, 10, -9 } ,
+        { 651806569, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 288773346, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 402495463, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 355021417, 10, -11 } ,
+        { 1740439, 10, -8 } ,
+        { 339893453, 10, -10 } ,
+        { 999248233, 10, -11 } ,
+        { 194200016, 10, -10 } ,
+        { 115099321, 10, -10 } ,
+        { 10774056, 10, -9 } ,
+        { 947432376, 10, -10 } ,
+        { 244166135, 10, -10 } ,
+        { 791893043, 10, -11 } ,
+        { 213109015, 10, -10 } ,
+        { 145249708, 10, -10 } ,
+        { 329188612, 10, -10 } ,
+        { 562650852, 10, -9 } ,
+        { 314428467, 10, -10 } ,
+        { 22586983, 10, -9 } ,
+        { 159985565, 10, -10 } ,
+        { 337414822, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 30402675, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 639417278, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 651842218, 10, -11 } ,
+        { 362562412, 10, -10 } ,
+        { 69310141, 10, -9 } ,
+        { 109027649, 10, -10 } ,
+        { 317854018, 10, -10 } ,
+        { 106397607, 10, -10 } ,
+        { 169454658, 10, -10 } ,
+        { 715448119, 10, -10 } ,
+        { 30143295, 10, -9 } ,
+        { 906166826, 10, -11 } ,
+        { 344763191, 10, -10 } ,
+        { 411650197, 10, -9 } ,
+        { 502209474, 10, -10 } ,
+        { 656866496, 10, -10 } ,
+        { 725481559, 10, -10 } ,
+        { 456380647, 10, -10 } ,
+        { 245838984, 10, -10 } ,
+        { 383606033, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 114912675, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 675568272, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 732155053, 10, -11 } ,
+        { 764583795, 10, -10 } ,
+        { 48933922, 10, -9 } ,
+        { 121645422, 10, -10 } ,
+        { 388166104, 10, -9 } ,
+        { 108347846, 10, -10 } ,
+        { 153903493, 10, -10 } ,
+        { 317357609, 10, -10 } ,
+        { 26811706, 10, -9 } ,
+        { 842808073, 10, -11 } ,
+        { 750329481, 10, -10 } ,
+        { 235037816, 10, -10 } ,
+        { 238508977, 10, -10 } ,
+        { 233494927, 10, -10 } ,
+        { 908408828, 10, -10 } ,
+        { 489900933, 10, -10 } ,
+        { 224141678, 10, -10 } ,
+        { 453221022, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 111891809, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 54419974, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 731847209, 10, -11 } ,
+        { 379193751, 10, -10 } ,
+        { 103596747, 10, -9 } ,
+        { 139868859, 10, -10 } ,
+        { 682011584, 10, -10 } ,
+        { 145241076, 10, -10 } ,
+        { 237970094, 10, -10 } ,
+        { 156056625, 10, -9 } ,
+        { 456706345, 10, -10 } ,
+        { 128068098, 10, -10 } ,
+        { 382875221, 10, -10 } ,
+        { 819024421, 10, -10 } ,
+        { 833005001, 10, -10 } ,
+        { 978256502, 10, -10 } ,
+        { 817264777, 10, -10 } ,
+        { 452853998, 10, -10 } ,
+        { 473911567, 10, -10 } ,
+        { 488005358, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 150668047, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 101015904, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 827676807, 10, -11 } ,
+        { 738504245, 10, -10 } ,
+        { 923531919, 10, -10 } ,
+        { 1510221, 10, -8 } ,
+        { 726533601, 10, -10 } ,
+        { 140537362, 10, -10 } ,
+        { 367195445, 10, -10 } ,
+        { 613736483, 10, -10 } ,
+        { 483313954, 10, -10 } ,
+        { 347223868, 10, -10 } ,
+        { 534709093, 10, -10 } ,
+        { 105179944, 10, -9 } ,
+        { 735388448, 10, -10 } ,
+        { 603516286, 10, -10 } ,
+        { 870648698, 10, -10 } ,
+        { 430620662, 10, -10 } ,
+        { 371667063, 10, -10 } ,
+        { 466215159, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 144494214, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 464617825, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 877799726, 10, -11 } ,
+        { 201733248, 10, -10 } ,
+        { 259478762, 10, -10 } ,
+        { 25741826, 10, -9 } ,
+        { 241315031, 10, -10 } ,
+        { 751196232, 10, -11 } ,
+        { 650633229, 10, -10 } ,
+        { 254928552, 10, -10 } ,
+        { 516840166, 10, -10 } ,
+        { 387282712, 10, -10 } ,
+        { 230441962, 10, -10 } ,
+        { 20029912, 10, -9 } ,
+        { 193445635, 10, -10 } ,
+        { 198728648, 10, -10 } ,
+        { 735992464, 10, -10 } ,
+        { 372164094, 10, -9 } ,
+        { 113612272, 10, -9 } ,
+        { 399802135, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 215112688, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 12358072, 10, -8 } ,
+        { 0, 10, 0 } ,
+        { 743164023, 10, -11 } ,
+        { 431217323, 10, -10 } ,
+        { 207860361, 10, -9 } ,
+        { 133732115, 10, -10 } ,
+        { 36005288, 10, -9 } ,
+        { 284013242, 10, -10 } ,
+        { 386013116, 10, -10 } ,
+        { 791656799, 10, -10 } ,
+        { 370736774, 10, -10 } ,
+        { 115861264, 10, -10 } ,
+        { 34317587, 10, -9 } ,
+        { 264870901, 10, -10 } ,
+        { 717020208, 10, -10 } ,
+        { 523683173, 10, -10 } ,
+        { 991926941, 10, -10 } ,
+        { 596947924, 10, -10 } ,
+        { 380112108, 10, -10 } ,
+        { 425320649, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 191747045, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 667411204, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 660947351, 10, -11 } ,
+        { 75710136, 10, -9 } ,
+        { 101887943, 10, -9 } ,
+        { 204140758, 10, -10 } ,
+        { 593896607, 10, -10 } ,
+        { 313237958, 10, -10 } ,
+        { 271027524, 10, -10 } ,
+        { 157103198, 10, -9 } ,
+        { 427631922, 10, -10 } ,
+        { 122973386, 10, -10 } ,
+        { 33326555, 10, -9 } ,
+        { 255438591, 10, -10 } ,
+        { 601491988, 10, -10 } ,
+        { 111675713, 10, -9 } ,
+        { 620250448, 10, -10 } ,
+        { 467599523, 10, -10 } ,
+        { 549123548, 10, -10 } ,
+        { 427640215, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 161696209, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 33292574, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 639626643, 10, -11 } ,
+        { 184827558, 10, -10 } ,
+        { 645201551, 10, -10 } ,
+        { 84206791, 10, -9 } ,
+        { 203324463, 10, -10 } ,
+        { 410500332, 10, -10 } ,
+        { 579346098, 10, -10 } ,
+        { 265706777, 10, -10 } ,
+        { 497049464, 10, -10 } ,
+        { 124567492, 10, -10 } ,
+        { 173068214, 10, -10 } ,
+        { 159066889, 10, -10 } ,
+        { 215893228, 10, -10 } ,
+        { 516467441, 10, -10 } ,
+        { 298620628, 10, -10 } ,
+        { 262854868, 10, -10 } ,
+        { 81302133, 10, -9 } ,
+        { 125358613, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 308334045, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 340443744, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 847881865, 10, -11 } ,
+        { 116369929, 10, -10 } ,
+        { 163654085, 10, -10 } ,
+        { 499771957, 10, -10 } ,
+        { 15319688, 10, -9 } ,
+        { 591665838, 10, -11 } ,
+        { 1514963, 10, -7 } ,
+        { 171313283, 10, -10 } ,
+        { 38618659, 10, -8 } ,
+        { 38157175, 10, -9 } ,
+        { 105331457, 10, -10 } ,
+        { 136726062, 10, -10 } ,
+        { 137607715, 10, -10 } ,
+        { 158800545, 10, -10 } ,
+        { 314334194, 10, -10 } ,
+        { 286603908, 10, -10 } ,
+        { 803365262, 10, -10 } ,
+        { 509323507, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 168928713, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 67472008, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 66130248, 10, -10 } ,
+        { 781541653, 10, -10 } ,
+        { 106723829, 10, -9 } ,
+        { 111381922, 10, -10 } ,
+        { 454817891, 10, -10 } ,
+        { 152801604, 10, -10 } ,
+        { 167964618, 10, -10 } ,
+        { 142424053, 10, -9 } ,
+        { 301103403, 10, -10 } ,
+        { 106090713, 10, -10 } ,
+        { 113943874, 10, -9 } ,
+        { 260990032, 10, -10 } ,
+        { 802762208, 10, -10 } ,
+        { 737366097, 10, -10 } ,
+        { 890271225, 10, -10 } ,
+        { 759751663, 10, -10 } ,
+        { 2550525, 10, -8 } ,
+        { 382439098, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 131228715, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 494902123, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 560153655, 10, -11 } ,
+        { 381944956, 10, -10 } ,
+        { 557443858, 10, -10 } ,
+        { 257885603, 10, -10 } ,
+        { 698637192, 10, -10 } ,
+        { 150650105, 10, -10 } ,
+        { 179916164, 10, -10 } ,
+        { 157417415, 10, -9 } ,
+        { 337826218, 10, -10 } ,
+        { 106715575, 10, -10 } ,
+        { 278043356, 10, -10 } ,
+        { 210482544, 10, -10 } ,
+        { 529426392, 10, -10 } ,
+        { 207175211, 10, -9 } ,
+        { 507161761, 10, -10 } ,
+        { 556640825, 10, -10 } ,
+        { 323500068, 10, -10 } ,
+        { 617822907, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 783770519, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 400119588, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 845748697, 10, -11 } ,
+        { 138757456, 10, -10 } ,
+        { 200435548, 10, -10 } ,
+        { 488363248, 10, -10 } ,
+        { 178999363, 10, -10 } ,
+        { 121012204, 10, -10 } ,
+        { 138425801, 10, -9 } ,
+        { 204935223, 10, -10 } ,
+        { 104388034, 10, -9 } ,
+        { 183287682, 10, -10 } ,
+        { 140160734, 10, -10 } ,
+        { 154060345, 10, -10 } ,
+        { 157425042, 10, -10 } ,
+        { 229266121, 10, -10 } ,
+        { 305959128, 10, -10 } ,
+        { 676643114, 10, -10 } ,
+        { 188257777, 10, -9 } ,
+        { 854713942, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 156270882, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 435061358, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 855804798, 10, -11 } ,
+        { 119611609, 10, -10 } ,
+        { 16157666, 10, -9 } ,
+        { 261583075, 10, -10 } ,
+        { 155863278, 10, -10 } ,
+        { 569557961, 10, -11 } ,
+        { 26056838, 10, -8 } ,
+        { 173936604, 10, -10 } ,
+        { 238783592, 10, -9 } ,
+        { 753998803, 10, -10 } ,
+        { 106248897, 10, -10 } ,
+        { 139869946, 10, -10 } ,
+        { 140374552, 10, -10 } ,
+        { 151002568, 10, -10 } ,
+        { 23419196, 10, -9 } ,
+        { 3016624, 10, -8 } ,
+        { 102206782, 10, -9 } ,
+        { 435112384, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 144078064, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 446197771, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 685411011, 10, -11 } ,
+        { 436446557, 10, -10 } ,
+        { 356257133, 10, -10 } ,
+        { 199202915, 10, -10 } ,
+        { 38173639, 10, -9 } ,
+        { 269643008, 10, -10 } ,
+        { 290005248, 10, -10 } ,
+        { 49133914, 10, -9 } ,
+        { 536797424, 10, -10 } ,
+        { 21007669, 10, -9 } ,
+        { 113921258, 10, -9 } ,
+        { 244893338, 10, -9 } ,
+        { 253501871, 10, -10 } ,
+        { 261582797, 10, -10 } ,
+        { 835013316, 10, -10 } ,
+        { 782247752, 10, -10 } ,
+        { 342464805, 10, -10 } ,
+        { 533299288, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 655441055, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 503009036, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 584666544, 10, -11 } ,
+        { 240274446, 10, -10 } ,
+        { 406715284, 10, -10 } ,
+        { 150737437, 10, -10 } ,
+        { 260869955, 10, -10 } ,
+        { 132919059, 10, -10 } ,
+        { 326747259, 10, -10 } ,
+        { 821159837, 10, -10 } ,
+        { 349556615, 10, -10 } ,
+        { 108079644, 10, -10 } ,
+        { 422917542, 10, -10 } ,
+        { 811090272, 10, -10 } ,
+        { 629142224, 10, -10 } ,
+        { 266703508, 10, -9 } ,
+        { 470821585, 10, -10 } ,
+        { 110169845, 10, -9 } ,
+        { 282413248, 10, -10 } ,
+        { 468238884, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 440924797, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 133131887, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 103202822, 10, -10 } ,
+        { 150727304, 10, -10 } ,
+        { 21971692, 10, -9 } ,
+        { 409658489, 10, -10 } ,
+        { 260895448, 10, -10 } ,
+        { 697625684, 10, -11 } ,
+        { 124732517, 10, -9 } ,
+        { 221068513, 10, -10 } ,
+        { 23918394, 10, -8 } ,
+        { 246801835, 10, -10 } ,
+        { 136176289, 10, -10 } ,
+        { 186434085, 10, -10 } ,
+        { 168373032, 10, -10 } ,
+        { 184615253, 10, -10 } ,
+        { 381161154, 10, -10 } ,
+        { 45173742, 10, -9 } ,
+        { 123563607, 10, -9 } ,
+        { 504022704, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 173424012, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 175563748, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 963367693, 10, -11 } ,
+        { 254770856, 10, -10 } ,
+        { 315224652, 10, -10 } ,
+        { 131358091, 10, -10 } ,
+        { 521769643, 10, -10 } ,
+        { 899345116, 10, -11 } ,
+        { 303737935, 10, -10 } ,
+        { 303886769, 10, -10 } ,
+        { 633276719, 10, -10 } ,
+        { 121583447, 10, -10 } ,
+        { 579052761, 10, -10 } ,
+        { 237864273, 10, -10 } ,
+        { 226147155, 10, -10 } ,
+        { 229323795, 10, -10 } ,
+        { 104673204, 10, -9 } ,
+        { 281718206, 10, -9 } ,
+        { 400221093, 10, -10 } ,
+        { 379167663, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 122053448, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 102599249, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 881525461, 10, -11 } ,
+        { 136265594, 10, -10 } ,
+        { 198516728, 10, -10 } ,
+        { 186702654, 10, -9 } ,
+        { 238146344, 10, -10 } ,
+        { 806665943, 10, -11 } ,
+        { 665429111, 10, -10 } ,
+        { 193930247, 10, -10 } ,
+        { 160069155, 10, -9 } ,
+        { 234356256, 10, -10 } ,
+        { 128279141, 10, -10 } ,
+        { 158944393, 10, -10 } ,
+        { 148158492, 10, -10 } ,
+        { 168785666, 10, -10 } ,
+        { 330446771, 10, -10 } ,
+        { 364074471, 10, -10 } ,
+        { 127195326, 10, -9 } ,
+        { 33349052, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 339507015, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 440393015, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 895316324, 10, -11 } ,
+        { 145063658, 10, -10 } ,
+        { 201478438, 10, -10 } ,
+        { 135814793, 10, -9 } ,
+        { 203460497, 10, -10 } ,
+        { 78886449, 10, -10 } ,
+        { 10432399, 10, -8 } ,
+        { 200630628, 10, -10 } ,
+        { 177097472, 10, -9 } ,
+        { 360479594, 10, -10 } ,
+        { 13619281, 10, -9 } ,
+        { 476546796, 10, -10 } ,
+        { 156783511, 10, -10 } ,
+        { 175116758, 10, -10 } ,
+        { 383466867, 10, -10 } ,
+        { 44221352, 10, -9 } ,
+        { 124499443, 10, -9 } ,
+        { 359506593, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 307754124, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 502084946, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 509524518, 10, -11 } ,
+        { 208020997, 10, -10 } ,
+        { 194560553, 10, -10 } ,
+        { 791829163, 10, -11 } ,
+        { 645137055, 10, -9 } ,
+        { 666167553, 10, -11 } ,
+        { 878534549, 10, -11 } ,
+        { 209579158, 10, -10 } ,
+        { 157876633, 10, -10 } ,
+        { 546102974, 10, -11 } ,
+        { 236625291, 10, -10 } ,
+        { 153899574, 10, -10 } ,
+        { 145090173, 10, -10 } ,
+        { 144629305, 10, -10 } ,
+        { 904768869, 10, -10 } ,
+        { 233114311, 10, -10 } ,
+        { 135660914, 10, -10 } ,
+        { 325883275, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 695911891, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 200664177, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 88610363, 10, -10 } ,
+        { 26289662, 10, -9 } ,
+        { 32196175, 10, -9 } ,
+        { 10805005, 10, -9 } ,
+        { 211225909, 10, -9 } ,
+        { 915763852, 10, -11 } ,
+        { 154857352, 10, -10 } ,
+        { 305046147, 10, -10 } ,
+        { 264042218, 10, -10 } ,
+        { 866609035, 10, -11 } ,
+        { 284862375, 10, -10 } ,
+        { 236261889, 10, -10 } ,
+        { 225569263, 10, -10 } ,
+        { 218648448, 10, -10 } ,
+        { 26621877, 10, -8 } ,
+        { 45295706, 10, -9 } ,
+        { 261538137, 10, -10 } ,
+        { 357396914, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 106726788, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 145485943, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 162446051, 10, -10 } ,
+        { 182755519, 10, -10 } ,
+        { 258086715, 10, -10 } ,
+        { 473782424, 10, -10 } ,
+        { 504974503, 10, -10 } ,
+        { 818947174, 10, -11 } ,
+        { 983230998, 10, -10 } ,
+        { 257340409, 10, -10 } ,
+        { 194912805, 10, -9 } ,
+        { 293403206, 10, -10 } ,
+        { 169685589, 10, -10 } ,
+        { 51115137, 10, -9 } ,
+        { 194757326, 10, -10 } ,
+        { 206241542, 10, -10 } ,
+        { 59051652, 10, -9 } ,
+        { 455868215, 10, -10 } ,
+        { 803570624, 10, -10 } ,
+        { 547830328, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 186604024, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 34427866, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 509481138, 10, -10 } ,
+        { 133110177, 10, -10 } ,
+        { 183763566, 10, -10 } ,
+        { 221129487, 10, -9 } ,
+        { 189695962, 10, -10 } ,
+        { 124460146, 10, -10 } ,
+        { 681100254, 10, -10 } ,
+        { 18165551, 10, -9 } ,
+        { 963924059, 10, -10 } ,
+        { 225263726, 10, -10 } ,
+        { 139807479, 10, -10 } ,
+        { 137130833, 10, -10 } ,
+        { 14143175, 10, -9 } ,
+        { 163059771, 10, -10 } ,
+        { 347448586, 10, -10 } ,
+        { 613481972, 10, -10 } ,
+        { 7370224, 10, -8 } ,
+        { 108898224, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 14182971, 10, -8 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 378738645, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 915103653, 10, -11 } ,
+        { 117903863, 10, -10 } ,
+        { 170146776, 10, -10 } ,
+        { 28109302, 10, -9 } ,
+        { 155701178, 10, -10 } ,
+        { 573577291, 10, -11 } ,
+        { 139357991, 10, -9 } ,
+        { 177016215, 10, -10 } ,
+        { 345632627, 10, -9 } ,
+        { 365200633, 10, -10 } ,
+        { 105408359, 10, -10 } ,
+        { 144556191, 10, -10 } ,
+        { 141536732, 10, -10 } ,
+        { 161802307, 10, -10 } ,
+        { 235515853, 10, -10 } ,
+        { 313757106, 10, -10 } ,
+        { 154050666, 10, -9 } ,
+        { 470920991, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 154167303, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 205251157, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 896378365, 10, -11 } ,
+        { 241665372, 10, -10 } ,
+        { 288900344, 10, -10 } ,
+        { 302898696, 10, -10 } ,
+        { 290058157, 10, -9 } ,
+        { 884332549, 10, -11 } ,
+        { 325805086, 10, -10 } ,
+        { 288707099, 10, -10 } ,
+        { 340287893, 10, -10 } ,
+        { 101171712, 10, -10 } ,
+        { 256592036, 10, -10 } ,
+        { 230186464, 10, -10 } ,
+        { 206858164, 10, -10 } ,
+        { 20606356, 10, -9 } ,
+        { 105538193, 10, -9 } ,
+        { 665158049, 10, -10 } ,
+        { 328540547, 10, -10 } ,
+        { 438833448, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 130047398, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 133989191, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 10418721, 10, -9 } ,
+        { 161844381, 10, -10 } ,
+        { 234523362, 10, -10 } ,
+        { 923019708, 10, -10 } ,
+        { 361266907, 10, -10 } ,
+        { 804256444, 10, -11 } ,
+        { 886877367, 10, -10 } ,
+        { 232659075, 10, -10 } ,
+        { 194533855, 10, -9 } ,
+        { 233196772, 10, -10 } ,
+        { 15087379, 10, -9 } ,
+        { 194510196, 10, -10 } ,
+        { 175527261, 10, -10 } ,
+        { 193859298, 10, -10 } ,
+        { 418678349, 10, -10 } ,
+        { 506963755, 10, -10 } ,
+        { 117704206, 10, -9 } ,
+        { 636579305, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 245185901, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 365896003, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 896888356, 10, -11 } ,
+        { 119580265, 10, -10 } ,
+        { 159774073, 10, -10 } ,
+        { 268123299, 10, -10 } ,
+        { 149031387, 10, -10 } ,
+        { 537551728, 10, -11 } ,
+        { 239541538, 10, -9 } ,
+        { 168170863, 10, -10 } ,
+        { 269044351, 10, -9 } ,
+        { 257797304, 10, -10 } ,
+        { 102914367, 10, -10 } ,
+        { 141619603, 10, -10 } ,
+        { 129120915, 10, -10 } ,
+        { 147534888, 10, -10 } ,
+        { 227926768, 10, -10 } ,
+        { 313331268, 10, -10 } ,
+        { 147581679, 10, -9 } ,
+        { 432255393, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 148220639, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 299638054, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 751752729, 10, -10 } ,
+        { 223098572, 10, -10 } ,
+        { 312914894, 10, -10 } ,
+        { 1295922, 10, -8 } ,
+        { 446064267, 10, -10 } ,
+        { 868305974, 10, -11 } ,
+        { 351136401, 10, -10 } ,
+        { 29647722, 10, -9 } ,
+        { 396182672, 10, -10 } ,
+        { 114139633, 10, -10 } ,
+        { 226203041, 10, -10 } ,
+        { 248468153, 10, -10 } ,
+        { 220022215, 10, -10 } ,
+        { 215550592, 10, -10 } ,
+        { 161084586, 10, -9 } ,
+        { 752569776, 10, -10 } ,
+        { 571237983, 10, -10 } ,
+        { 382835407, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 121798133, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 7531428, 10, -8 } ,
+        { 0, 10, 0 } ,
+        { 10424355, 10, -9 } ,
+        { 155597893, 10, -10 } ,
+        { 214943315, 10, -10 } ,
+        { 342189343, 10, -10 } ,
+        { 432528084, 10, -10 } ,
+        { 673747717, 10, -11 } ,
+        { 135011525, 10, -9 } ,
+        { 217913289, 10, -10 } ,
+        { 179446427, 10, -9 } ,
+        { 313554644, 10, -10 } ,
+        { 146767517, 10, -10 } ,
+        { 182038315, 10, -10 } ,
+        { 166503887, 10, -10 } ,
+        { 181115286, 10, -10 } ,
+        { 357941887, 10, -10 } ,
+        { 618649579, 10, -10 } ,
+        { 194345112, 10, -9 } ,
+        { 477040785, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 170830749, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 779754187, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 100800507, 10, -10 } ,
+        { 155672513, 10, -10 } ,
+        { 209193531, 10, -10 } ,
+        { 422752051, 10, -10 } ,
+        { 71492891, 10, -9 } ,
+        { 708062479, 10, -11 } ,
+        { 143990221, 10, -9 } ,
+        { 217344648, 10, -10 } ,
+        { 202195154, 10, -9 } ,
+        { 415151633, 10, -10 } ,
+        { 145267349, 10, -10 } ,
+        { 177665267, 10, -10 } ,
+        { 167954319, 10, -10 } ,
+        { 182231377, 10, -10 } ,
+        { 337034028, 10, -10 } ,
+        { 360039832, 10, -10 } ,
+        { 137859312, 10, -9 } ,
+        { 524425378, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 180135767, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 194386925, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 675594674, 10, -11 } ,
+        { 207061379, 10, -10 } ,
+        { 287247603, 10, -10 } ,
+        { 861397362, 10, -11 } ,
+        { 319827064, 10, -10 } ,
+        { 72942949, 10, -10 } ,
+        { 15065738, 10, -9 } ,
+        { 270728224, 10, -10 } ,
+        { 253620914, 10, -10 } ,
+        { 748556931, 10, -11 } ,
+        { 167209337, 10, -10 } ,
+        { 498745357, 10, -9 } ,
+        { 189816204, 10, -10 } ,
+        { 176870804, 10, -10 } ,
+        { 868646774, 10, -10 } ,
+        { 316259966, 10, -10 } ,
+        { 244295783, 10, -10 } ,
+        { 278238773, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 881542719, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 576809889, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 793677668, 10, -11 } ,
+        { 155493596, 10, -9 } ,
+        { 570770648, 10, -10 } ,
+        { 599038993, 10, -10 } ,
+        { 369895459, 10, -10 } ,
+        { 141602743, 10, -10 } ,
+        { 444434311, 10, -10 } ,
+        { 342840845, 10, -10 } ,
+        { 626455728, 10, -10 } ,
+        { 240068081, 10, -10 } ,
+        { 998889999, 10, -10 } ,
+        { 230846118, 10, -10 } ,
+        { 279616785, 10, -10 } ,
+        { 262435365, 10, -10 } ,
+        { 909504185, 10, -10 } ,
+        { 764512186, 10, -10 } ,
+        { 424715386, 10, -10 } ,
+        { 172307064, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 454205512, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 427342761, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 880594859, 10, -11 } ,
+        { 134145756, 10, -10 } ,
+        { 186472017, 10, -10 } ,
+        { 133665336, 10, -9 } ,
+        { 188481036, 10, -10 } ,
+        { 784768683, 10, -11 } ,
+        { 149245212, 10, -9 } ,
+        { 19511124, 10, -9 } ,
+        { 20264351, 10, -8 } ,
+        { 837888349, 10, -10 } ,
+        { 125826852, 10, -10 } ,
+        { 151377208, 10, -10 } ,
+        { 160568408, 10, -10 } ,
+        { 175580504, 10, -10 } ,
+        { 266377614, 10, -10 } ,
+        { 309409014, 10, -10 } ,
+        { 90946517, 10, -9 } ,
+        { 712898624, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 27965938, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 691466612, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 102564379, 10, -10 } ,
+        { 153529962, 10, -10 } ,
+        { 227696588, 10, -10 } ,
+        { 547982995, 10, -10 } ,
+        { 223080251, 10, -10 } ,
+        { 777905076, 10, -11 } ,
+        { 106918701, 10, -9 } ,
+        { 251140216, 10, -10 } ,
+        { 235002996, 10, -9 } ,
+        { 474990904, 10, -10 } ,
+        { 14746425, 10, -9 } ,
+        { 180391406, 10, -10 } ,
+        { 189251494, 10, -10 } ,
+        { 36846651, 10, -9 } ,
+        { 345793211, 10, -10 } ,
+        { 516558998, 10, -10 } ,
+        { 135630533, 10, -9 } ,
+        { 580025196, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 20570262, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 692030134, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 789790153, 10, -11 } ,
+        { 391853281, 10, -10 } ,
+        { 10740184, 10, -8 } ,
+        { 383417495, 10, -10 } ,
+        { 231060635, 10, -9 } ,
+        { 116319741, 10, -10 } ,
+        { 358366619, 10, -10 } ,
+        { 360401515, 10, -10 } ,
+        { 71005069, 10, -9 } ,
+        { 203911596, 10, -10 } ,
+        { 287814116, 10, -10 } ,
+        { 228811847, 10, -10 } ,
+        { 44997154, 10, -9 } ,
+        { 262451869, 10, -10 } ,
+        { 829499932, 10, -10 } ,
+        { 419631724, 10, -10 } ,
+        { 634035178, 10, -10 } ,
+        { 548710918, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 236434127, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 250484066, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 101567397, 10, -10 } ,
+        { 336093334, 10, -10 } ,
+        { 413926269, 10, -10 } ,
+        { 499496721, 10, -10 } ,
+        { 448052935, 10, -10 } ,
+        { 120563198, 10, -10 } ,
+        { 276682197, 10, -10 } ,
+        { 568802795, 10, -10 } ,
+        { 694375352, 10, -10 } ,
+        { 142138613, 10, -10 } ,
+        { 451198751, 10, -10 } ,
+        { 259157841, 10, -10 } ,
+        { 665143468, 10, -10 } ,
+        { 30112052, 10, -9 } ,
+        { 749318419, 10, -10 } ,
+        { 742937998, 10, -10 } ,
+        { 466035791, 10, -10 } ,
+        { 564012253, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 334130431, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 49763193, 10, -9 } ,
+        { 0, 10, 0 } ,
+        { 100521213, 10, -10 } ,
+        { 144940084, 10, -10 } ,
+        { 202652473, 10, -10 } ,
+        { 314243883, 10, -10 } ,
+        { 198746562, 10, -10 } ,
+        { 75375228, 10, -10 } ,
+        { 176413994, 10, -9 } ,
+        { 209671347, 10, -10 } ,
+        { 205176295, 10, -9 } ,
+        { 551833452, 10, -10 } ,
+        { 130751131, 10, -10 } ,
+        { 170983665, 10, -10 } ,
+        { 169779837, 10, -10 } ,
+        { 183037487, 10, -10 } ,
+        { 287272293, 10, -10 } ,
+        { 357946515, 10, -10 } ,
+        { 142487681, 10, -9 } ,
+        { 322892354, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 309659031, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 552057147, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 640358765, 10, -11 } ,
+        { 840814826, 10, -10 } ,
+        { 398842876, 10, -10 } ,
+        { 113358289, 10, -10 } ,
+        { 386530703, 10, -9 } ,
+        { 230267981, 10, -10 } ,
+        { 133328747, 10, -10 } ,
+        { 415962743, 10, -10 } ,
+        { 23790003, 10, -9 } ,
+        { 821997491, 10, -11 } ,
+        { 106217542, 10, -9 } ,
+        { 22020376, 10, -9 } ,
+        { 466897864, 10, -10 } ,
+        { 263494367, 10, -10 } ,
+        { 543349144, 10, -10 } ,
+        { 319792265, 10, -10 } ,
+        { 192708719, 10, -10 } ,
+        { 430024744, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 114961691, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 571474729, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 124858836, 10, -10 } ,
+        { 182647338, 10, -10 } ,
+        { 248937234, 10, -10 } ,
+        { 29919864, 10, -9 } ,
+        { 239559384, 10, -10 } ,
+        { 762497216, 10, -11 } ,
+        { 149618198, 10, -9 } ,
+        { 245964803, 10, -10 } ,
+        { 155489128, 10, -9 } ,
+        { 281402789, 10, -10 } ,
+        { 159780681, 10, -10 } ,
+        { 218967719, 10, -10 } ,
+        { 187023633, 10, -10 } ,
+        { 208419881, 10, -10 } ,
+        { 351038384, 10, -10 } ,
+        { 464719172, 10, -10 } ,
+        { 223098719, 10, -9 } ,
+        { 542482148, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 195355515, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 726595248, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 742304868, 10, -11 } ,
+        { 314639743, 10, -10 } ,
+        { 506268244, 10, -10 } ,
+        { 125936823, 10, -10 } ,
+        { 365750734, 10, -10 } ,
+        { 130423437, 10, -10 } ,
+        { 198586921, 10, -10 } ,
+        { 675956533, 10, -10 } ,
+        { 36581224, 10, -9 } ,
+        { 112691748, 10, -10 } ,
+        { 266841789, 10, -10 } ,
+        { 41407322, 10, -8 } ,
+        { 664434392, 10, -10 } ,
+        { 947045795, 10, -10 } ,
+        { 536725292, 10, -10 } ,
+        { 385587257, 10, -10 } ,
+        { 290906322, 10, -10 } ,
+        { 459113237, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 137798607, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 367059742, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 71768412, 10, -10 } ,
+        { 284116161, 10, -10 } ,
+        { 315598564, 10, -10 } ,
+        { 240642075, 10, -9 } ,
+        { 306150486, 10, -10 } ,
+        { 179739563, 10, -10 } ,
+        { 331656268, 10, -10 } ,
+        { 599438781, 10, -10 } ,
+        { 683615963, 10, -10 } ,
+        { 163710597, 10, -10 } ,
+        { 911025421, 10, -10 } ,
+        { 175856056, 10, -10 } ,
+        { 236247247, 10, -10 } ,
+        { 305379173, 10, -10 } ,
+        { 415740809, 10, -10 } ,
+        { 322247622, 10, -10 } ,
+        { 359930937, 10, -10 } ,
+        { 135586338, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 1003281, 10, -7 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 452237831, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 118277096, 10, -10 } ,
+        { 151606937, 10, -10 } ,
+        { 2190649, 10, -8 } ,
+        { 410170897, 10, -10 } ,
+        { 198878133, 10, -10 } ,
+        { 776888604, 10, -11 } ,
+        { 112882516, 10, -9 } ,
+        { 231302027, 10, -10 } ,
+        { 330483969, 10, -9 } ,
+        { 40588069, 10, -9 } ,
+        { 134083658, 10, -10 } ,
+        { 18537867, 10, -9 } ,
+        { 186899652, 10, -10 } ,
+        { 22088258, 10, -9 } ,
+        { 292994754, 10, -10 } ,
+        { 380219255, 10, -10 } ,
+        { 933853353, 10, -10 } ,
+        { 68264763, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 208689164, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 481121339, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 591678373, 10, -11 } ,
+        { 331477542, 10, -10 } ,
+        { 706766732, 10, -10 } ,
+        { 136226568, 10, -10 } ,
+        { 331207861, 10, -10 } ,
+        { 20457819, 10, -9 } ,
+        { 177320457, 10, -10 } ,
+        { 107339605, 10, -9 } ,
+        { 408750748, 10, -10 } ,
+        { 145165748, 10, -10 } ,
+        { 381734657, 10, -10 } ,
+        { 257348378, 10, -10 } ,
+        { 112627103, 10, -9 } ,
+        { 302416226, 10, -9 } ,
+        { 552336855, 10, -10 } ,
+        { 392439666, 10, -10 } ,
+        { 264889191, 10, -10 } ,
+        { 534877679, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 174575927, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 471021698, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 122597719, 10, -10 } ,
+        { 160823261, 10, -10 } ,
+        { 222620352, 10, -10 } ,
+        { 412387035, 10, -10 } ,
+        { 204601584, 10, -10 } ,
+        { 78586271, 10, -10 } ,
+        { 129641174, 10, -9 } ,
+        { 236482048, 10, -10 } ,
+        { 284537785, 10, -9 } ,
+        { 402823826, 10, -10 } ,
+        { 139792429, 10, -10 } ,
+        { 192683208, 10, -10 } ,
+        { 187393607, 10, -10 } ,
+        { 219499311, 10, -10 } ,
+        { 304398201, 10, -10 } ,
+        { 403231276, 10, -10 } ,
+        { 106861144, 10, -9 } ,
+        { 675065982, 10, -11 } ,
+        { 0, 10, 0 } ,
+        { 212883567, 10, -10 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } ,
+        { 0, 10, 0 } } } } ,
+  params {
+    pseudocount 0 ,
+    rpsdbparams {
+      matrixName "BLOSUM62" ,
+      gapOpen 11 ,
+      gapExtend 1 } } }
diff --git a/demotic/examples/example-single.fa b/demotic/examples/example-single.fa
new file mode 100644
index 0000000..2bca26a
--- /dev/null
+++ b/demotic/examples/example-single.fa
@@ -0,0 +1,1159 @@
+>A9B431_HERA2/73-422 A9B431.1
+SVAAMGVYPYITAQIIMQLLIPLIPALEQLSKEGEQGRNRIQRYQYFLTVPLAYLQGYGQ
+IKSLINSGINLFGTLNFSITENFFQTFSILTIMVSGSMFLVWMGELIDERGIGNGLSMII
+FGGIVTALPSMVYQAITTSSSGNNVIGGILLLIVTLATVVGIVLITEGQRRIPVQYAKRV
+RGNKVYGGQSSHLPLKVNMAGMIPLIFAQSILIFPSTVASYFWNPNGSGFFNGVANFFVN
+SFGPNGLAFTLAMFVLVLLFTYFYALVMFNQQNLPEMLQRNGGFIPGIRPGRNTEVYLTK
+VLNRITLIGAVGLAVVAALPYFVQQITGLQIGFSSTGLLIVVGVAVDTMR
+>A8CRX1_9CHLR/78-422 A8CRX1.1
+SVAALGVYPYITASIIMTLLTPVIPKLTALSKEGEAGRNKINTITHWLAVPTAALAGYSQ
+LLLLQREGAVAQTEPLAAVAIVLSIVAGTMFMVWLGEQITSYGIGNGISLIIFAGIVAGL
+PDMIGRGLMASDQFAGLAVYAFMALLTTVLIVIFTEAHRRIPVQYAQTVIRSGKMYRRGG
+ESHIPLRVNSAGMIPLIFASALVMLPGLVASYFMAGSTEDPNFWNTIYNIFNSGASMPGG
+LVYWGLYFFMTIIFAFFYTMVTFEQQDIPGTLQRQGGFVPGIRPGKMTDQYLSGVIGRIT
+WAGALFLGFVAIMPFIAREVTGIQVIQLSSFGMLIVVGVALDTMK
+>A2Y4E5_ORYSI/132-498 A2Y4E5.1
+SFFQLGISHQISASIVMQVLFYPLFGPALLFSNGNVLCHVLPSLEKLRKEGLDGHEKIKG
+YIWWLSLGFALVAAFTVSCYSLQYSIYAASYRVKHVMITSLFLVLGAMTMTWICDTISES
+GFGHGSSLIICVGILTGYTDTLHKMLTQFSGNWYSCWHYILGIAGTFILVTMGAVLVTEG
+CRKIKLQYYGFKLASGARSESSPVTEVEPYIPFNINPTGMQPLLTTSYLLAFPSIMASIF
+GTQFWESLKETLNPKTSVGGGPWAYYLTYAFLVFVFNIFDIANLPKEISDYLNKMSARVP
+KIKPGRATVEYLTKIQTSTRFWGGILLSLLATSSLLLDRYLRQINEGFSIGFTSVLIIVG
+SIIELRR
+>Q7UZW2_PROMP/80-422 Q7UZW2.1
+GIFALGILPFINASIIIQLLTASLPVLEDLQKNEGEAGRRKIAQITRYVSLGWGFLQSII
+FSLILRQYAIEGISETAFVLQTSIALVTGSMIVMWFSEIITEKGIGQGASLVIFLNIVAT
+LPKALSSTIEKAQTGDRGDVLGIAVLLGVFLLTIVGIIFVQEGARRIPIVSAKRQIGNSS
+LLPTRQSYLPLKLNAGGVMPIIFASALIFLPITVANVTGNPILIKIAGSLNPGSSNPWPY
+ALTFFALILGFSYFYASLTINPVDVASNLKKGGVAIPGVRPGSNTANYLSGIQNRLTLLG
+GLFLGSVAIIPAAVERATNVQTFQGLGATSLLILVGVAIDTAK
+>Q7NKT4_GLOVI/79-416 Q7NKT4.1
+GVFMLGILPYINASIIMQLLVPVFPKLEDLQKNEGEQGRRQIAQYTRYLALGWAIIQSIG
+VAIYIKPFVADWSPLFVIQTTLALTAGAIFVMWLGELITEKGIGNGASLLIFVSIVSSLP
+TAFSQTFQLLQADSSRVAGVVVLLLVFLAMIVGIVFVQEGTRRIPIISARRQVGPRRQQY
+QQQQTSYLPLRVNQGGVMPIIFASSLLYLPLTFAQFARNATVDQVVNAISSGWIHNILYL
+VLILFFSFFYATLIINPEDVSKNLKRMGSSIPGVRPGTATSEYIAKVMNRLTFLGAIFLS
+AVAIIPTFVEQGTGITTFNGLGATSLLILVGVAIDTVR
+>SECY_GUITH/68-404 P28527.2
+GVFALGIVPYINASIIVQLATNSIPSLEKLQKEEGELGRQKIVQLTRYVALVWALIQSIG
+VSFWVRPYVFNWDLNFVFAMSLTLTIGSMLIMWFSEQITEKGIGNGPSLLIFINIISGLP
+KLLQSQIQSTRLNIQALDIFVLVFIFSVMIIGIIFIQEGIKRIPIISARQLGKGQMDNKT
+SYLPLKLNQSGVMPIIFASAVLVLPAYLAQLVSNEQLRTVLHLFDGTSNNKLLYLLFYFT
+LILFFSYFYTSLILNPNDVSKNLKKMESSIYGVRPGKATTEYLQKTLNRLTFLGALFLAF
+IAIVPNIIETLTNLSVFKGLGGTSLLIIVGVQVDTSK
+>SECY_CYACA/62-394 P46249.2
+SVFALGIIPYINATITIQILSSAFPALKKLQSEEGEIGKKKLNKITKYLSFCFAFIESLA
+IVLRLQKYAFDWNLYFIVQTTLILISGAMLVMWLADNISYKGIGTGASVIIFVNIASAFA
+KFLLNQLFVHSIKFLDFASYFALIVFSIACIVFVQEAIRKVPIISAKQLDSTSFYSNDYF
+LPLRINQGGVMPIILASSLLALVDYVIRYGLSTLQAVYFINDILPFKILFLLLYSAFIIF
+FNYLYCSLVLNCFELSNNLKKASVVIPSIRPGKMTEKFFKDTLDNLTLFGSGFLAFIVLA
+PNFLEFVFHIRVFKGLAVSSLLIVVGVAIDLIK
+>Q85FU6_CYAME/42-325 Q85FU6.1
+GWFVLGIIPTINASIVMQILISIVPALTRLQKEEGEMGQKQIQKYTRYLTFFLAGIQAFT
+LSQQWCTWLLIVSGAMLVMWLAEQMTHKGIGNGTSIFVCSNIAANFLHHPIEAPWSLAMV
+VLIFTMLGMIALQEAVRAIPILSAKQLIQSIAQVYLLPMRLNQGGVMPIIFASSTLALLH
+TWSIWWLYVACIIFFSHFYNLVIANPKELSENLNKMAVVIPSIRPGAETQQYLNRTLNRM
+SWIGGIALSLIALLPWLFSSLKIFSGFGATSLLIVIGVSIDTMR
+>A0T0J6_PHATR/72-407 A0T0J6.1
+GLFTLNIFPYINASILVQLILGFSPKLSKLQKEGDLEGRRSINRLTRLITLMFALIQSVS
+LALYLKQILFNWNYSLAIEIGLWLTTGAMIVLWLSELITDYGLGNGASLLIYTNIISSLP
+NLSKTILSENSQNFTLGSEIGIVLLIFTSLYGIVFLQEGVRIIPLISSKQLNQSSLQDSV
+TSNNYIPLRFNQAGVMPIILTTTILVVPNYVNNLGLLPKIDLPINFESLNFVYWIGYFVL
+ILVFSSFYSTIVLNPKDISDQLQKMAVTIPGIRPGIQTTFYLKQVMKRITLLGTTMLATL
+ATIPNFVESTLSITSLNGLSTTSLLILAGVVLDLVR
+>SECY_CYAPA/109-459 P25014.2
+GFFTLGILPYMNASFFLQVLTKILPSLERFQKEQEEIAQREFKKWTRYLTVIWAFIQSIV
+ISWIWIRPYALNWDFFLGLKVVVALTLGAVIVMIIAEQITEIGLTNGSSLLIFINIIARI
+PNSIEQLFNSNINWTFPMISSLILSLSLSFITMFVIIGLQESGRPVPVLIARQEAERQKF
+NEPITEAERRKTQAYIFFQLLPAGIMPVIFASTIFDLALPAFTNFLLQQGNWGYQLIKSF
+PFNSLFKDFCYLITIMLFSSNYALTIMINPKTLAENLNSMNALIPGVRPGSETKVYSEQL
+IHRLNFIGSFVLALVCILPSIVERSLGLPKLQILSPVSISIALGVAVDTTR
+>Q4G351_EMIHU/63-407 Q4G351.1
+GIGSLGILPYINASIIIQLLTPLFPNLERLQKEEGELGRQQISRYTRYLTCIWAIVLSSA
+IAFFLIKPITFGWSLKLGLEIVLSLTVGSILSMWFAELITEESLGNGSSMIIFINIVGGI
+PNNLSSLSKTFSAANLASAIPLLLTGLGIYLGIVLIIIFFQESYKKITIVSAKQLNLTTS
+AQTQSERLANNSFIPLKLNQGGIMPLVFSSTIAVVFMYPAQILLSSALLTNAAGLASKLL
+TIYSFGINFVLVIFFSCFYVSLVLKPKDMSENLGKMAYSIPGIRQGKETTKYLEKVINRL
+AFIGGLFLAFLAFFPLFVGNFIQFGLFKNLTSLLILIGVITDTTS
+>SECY_PAVLU/66-404 P28540.2
+SILTLGLGPFFSASLAVQFLVKLYPAFEKLQNEEGEEGRKTIVRYTRILTVLFCIIESFF
+LSNSLRSFVFNWNSISYFVVAAAVTTGSLVLVWLSEVITERGIGNGSSLLILIGNLSRFR
+FLINKDDFDSLNVSSQSNLYIIYIIITLVSMLIFSTLSQEGARKIPVVSAKQLIDGVEDD
+MRRSYIPIRFGQAGVVPIIFSSSILLFLTTSIKQLPNANIATRVILDSVNLQQIFYFFTF
+LVLIIFFSFFYTLIILSPSDIAKNLKKMSSVIQDTKPGVATKVYIRKFILQASFVGSILL
+SALILIPSILAAALGVHPLSISGITSLILSFSIINDTVR
+>Q6B8X0_GRATL/62-395 Q6B8X0.1
+GIFALGIVPYINASIMMQLLTKLIPELENLQKEEGESGRQKIGQLTRYFTLIWSILQSIG
+ISLWIKPYVFNWNYYFILDSIIALGTGSLIIMWFAEIITEYGIGNGASLLIFQNIISGIP
+KNIQNYKINIYDKQTIINGSFLFLLFVLILIINILIQECKRKIMIVSAKQLSKFTTSNPR
+SYIPLKLNQGGVMPIVFASATMALPIYFSNNIEVPNINNVINLFLPGRILYFPAYGSLII
+AFSYFYTSLVLNPDDIAENLNKMGASIPSIRPGSDTIRYISKILDKMTFMGGVFLFIIAL
+IPSLIAYITHTSLLQGLGTTSLLILVGVAIDTAK
+>SECY_ANTSP/62-390 Q37143.1
+GIFALGIVPYIYASIIIQLLIKLIPYLENLQKEEGEIGRQKINQLTRYLTLLWALIQSLS
+IAIWINHMYLIHLFELCASLTTSSMIAMWFSEIISEYGVGNGPSLLIFQNIISSIPKNLQ
+NYTFNIGTTNTVLNGSLILSFGIIILIINILIQEGERKIAILSAKQLGKINELNHKVIFL
+LKLNQGGVMPFVFASAVVHTFLFISNNTNSKITQFINLFLPNQFLYLPLYLIFIITFSYV
+YTSLILNPEDIAKNLKKMGASIPNIRPGSETIKYLNTRINRLTLIGACFLFTITLFPTIT
+YYIFKINTLKGLGATSLLILVGVAIDTAK
+>A4RW47_OSTLU/65-398 A4RW47.1
+GIFSLGIVPYINSSIIFQLLGSVFPELKKLQKEEGEAGRRKFQQYQRYGALGFAIVQAVG
+QCLYVRPFVEDFTPIWLFEQSCALTAGAMILMYIGELLNEIKLGNGTSLLIFANIVSALP
+SSVGQTVSMAQEKGDSSVLAVFFGAFALTTLGIVYVQEAERKIPMNYSTRFNAGGLAKSS
+YLPFKVNSAGVMPIIFASSLLALPATLTRFTDNGAVLGVARFLSPGGGAGYVPVNVAMIC
+FFNYFYTFLQLEPKDVADQLKRQGASIPGVRPGAATRDYITRVLERLSVLGSVFLGALAL
+TPGAVEQITGLQTFRGFAGTSLLILVGVATDSAR
+>A7PFA4_VITVI/131-465 A7PFA4.1
+GICSLGIVPFINAQIVFQLLTQIYPKLQDLQKREGETGRKKVLQYTRYASVGFALVQAIG
+QVLFLRPYVNDFSTQWVLSSVTLLTLGSVLTTYIGERISDLKLGNGTSLLIFTSIISYLP
+ASFGRTVAQAFQDGNYIGLVIIIISFFLLVLGIVYVQEAERKIPLNYASRYTNKSGGLQK
+STYLPFKVNSSGVMPIIFSTSSLALPGTVSRFTGLAALKKAALALNPGGSLYLPTNILLI
+AFFNYYYTFLQLDPDDVSEQLKRQGASIPLVRPGKSTAAFIKMVLSRISVLGSGFLAILA
+AGPSLVEQTTHLTAFRGFAGTSVLILVGCATDTAR
+>A7HM32_FERNB/75-404 A7HM32.1
+SVFSMSVTPYINASIIMQLLASIIPSLKELLKEGEEGRKKFQHYTKNLTLGLAALQSFVV
+SFGLARSYQGIIAINTWLFSFVSTVSLVAGTMFLLWIGDRITEKGIGNGVSIMIFAGIVS
+RYPAYFRSAVLGNLNIFGWIFLIAVAIFMVVAIIYVQQAERRIKIEYATRMVGRRIYGGT
+STYLPIKVNHSGVIPIIFAWAIISIPEAIAQITGAQWAIKLFSMQSPLMMIIYALLIFFF
+TYFYSVVVIDPKDISENIKRYGGFIPGIRAGKPTEEYITFVLNRVTFLGAIFLVGISLLP
+YLVEGITRVNIWLGGTSALIAVGVALDIAQ
+>A3CK84_STRSV/69-416 A3CK84.1
+SVFALGVSPYITASIVVQLLQMDLLPKFVEWGKQGEVGRRKLNQATRYIALVLAFVQAIG
+ITAGFDTLSRANLVANPNVQTYALICVLLATGSMIVTWLGEQITDKGYGNGVSMIIFAGI
+VSAIPDMIKGIYEDYFVNIPSERLTSSFIFVGILIVAVLLIIYFTTFVQQAEYKIPIQYT
+KVAKGAPSSSYLPLKVNPAGVIPVIFASSITAAPAAIFQVVSALGYDADWVKTAQSLLAT
+TTISGMFMYAFLIVLFTFFYTFVQINPEKTAENLQKSGAYIPGVRPGKGTEDYMSKLLRR
+LATVGSLFLGFISILPILAKDVFGLTDAVALGGTSLLIIISTGIEGMK
+>Q5FM71_LACAC/68-415 Q5FM71.1
+SIFSLGVSPYITAQIVIQLLQMDIVPTLVEWGKQGEVGRRKTNQVTRYLTLVVAFVQSIG
+ITLGFNALTQMGLVKNQTPQTYVEIAIIMTAGTMLLTWLGDEITDKGLGNGVSVIIFAGI
+IARLPSGLWQIYKEEIINNSASDRWQGILFFIAVIVAILIVTQLVTWVEQADRRIPIQYT
+RRATISGSESFLPLKVNVSGVIPVIFASSFIITPATILMAFQRTQGDQQWFKVLNQIFSL
+QTTPGVIIYTLLIILFTFFYAFVQVNPEKLAENLQKQGAYIPSVWPGKDTQNYISKMLIK
+LSTVGSIFLGLVALLPQLATNFWNLPSSIGLGGTSLLIVIGVVLELSR
+>Q03ZM6_LEUMM/68-416 Q03ZM6.1
+SLFAMGVSPYVTAQIIVQLLQLDIVPRFVEWSKQGEVGRRKLNNATRWLTLVLAFVQSVG
+ITAGFNSLSSYGLVSQTNSVMSFVVIGSVMTIGTFFAMWLGEMITEKGLGNGVSMIIFAG
+IIAQAPEGFYEIFKENILQADSSDMLNGWIFVVVLVIAMILVVAFTTWSYEGTRRLQMQY
+TRSATSYGSEAYLPLKVNVSGVIPVIFASSFISTPQTVMLAFQDKYSSAQWYQIMQQIFS
+MTTLPGAILYTALIVVFTYFYAFVQVNPDKLSENLQKQGAYIVGVRPGAETKAFVSKLLL
+NLSFVGSIFLGVVALVPLIASDVWGLNEKIGLGGTSLLISIGVALDLIR
+>SECY_STAA8/69-413 O08387.2
+SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG
+MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI
+LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK
+QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLFYPDKEWAQNIANAANPSSN
+VGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLYRLTF
+VGSIFLAVISILPILATKFMGLPQSIQIGGTSLLIVIGVAIETMK
+>Q4MG72_BACCE/68-415 Q4MG72.1
+SIFAVGITPYITASIIVQLLQMDVIPKFSEWAKQGEMGRKKSAQFTRYFTIILAFIQAIG
+MSYGFNNIAGGQLITDQSWTTYLFIATVLTAGTAFLLWLGEQITANGVGNGISMIIFAGL
+VAAIPNVANQIYLQQFQNAGDQLFMHIIKMLLIGLVILAIVVGVIYIQQAVRKIPIQYAK
+AVSGNNQYQGAKNTHLPLKVNSAGVIPVIFASAFLMTPRTIAQLFPDSSISKWLVANLDF
+AHPIGMTLYVGLIVAFTYFYAFIQVNPEQMAENLKKQNGYVPGIRPGKSTEQYVTKILYR
+LTFIGAIFLGAISILPLVFTKIATLPPSAQIGGTSLLIIVGVALETMK
+>Q6F1X5_MESFL/92-454 Q6F1X5.1
+SILALGVSPYITASIIVQLLSTDVVPILTRWNKSGERGRKKLDKLTKVLMIPFALMQGIA
+TIFTLQQQGVIEPGWSSDNVLASPAFYYVLVPLVMLAGSYFMLWIADQITIKGVGNGISI
+VIFIGIIVQLPNQIKATYDFWIPSNESINVFFDGIIKFSIYMLVFFVVIFSVVLMNEAER
+KVPIQQTGSGLIDSKDHTPYLPLKLNNAGVIPVIFASALISTPITIAQIIDPTASTSTVD
+SANAFVRFTQHYLSFNTWWGIGIFAVMIVLFTFLYAQVQINPEKISENFQKSGTFIPGIK
+PGKDTTNFLKGTINRLSLFGAIFLAAIAALPYVISKLTNLPSQLAIGGTGLIICISVAIQ
+TTQ
+>Q6KI36_MYCMO/87-436 Q6KI36.1
+SIVALGISPFITASLVMQILQTKLFPPIYRLSQSGPIGRRKINIITRAITIFLGVVQSMT
+IVSALSAQNSFISLTNEFNVFWYQFIILPVILIAGTVFSIFIGDQITDKGVGNGTTLLIF
+TGIVITLPTQFTATFNALVGEQQRVSSLSNGIVTFISYVFGFIILMYIIGFVYNAERRIP
+IQQVGAGRAKNEKELSYLPIKINPGGISPIIFALIIISFPQLFASVFPISNPFRIWVESN
+LRPNNTIGFILFISITFIFAIFFGLQQSKVDKIAEDFAKNSTFIPGIKPGQETETYLTGI
+VLRLCFFSAFYLIIIGGMQFAQQLAGVPENISFGGTSVIILVTASYETIT
+>Q4A5I3_MYCS5/83-437 Q4A5I3.1
+SIFALGISPFINASLIMMILQSRLFPMIYKLTQSGPQGRRKLNIATRILTFIIAYPQAVF
+LTKSLTAGERNSSFITLVSIDGFSVDLLVYFLLPMILISASLFALFLSEQITNKGVGNGT
+SIIIMTGIAARLPFQMQNAFKIFVGDLSQSGTLVGILNFVTYIFIYLACLMVIGIFYNAE
+RRIPIQQTGAGRSKALKEIGSLPIKLNPAGIMPIIFAMLVLSLPTLIANILPNDNYSKQW
+INENLQFYKPLGFSLLIIITFVFSLLMGIQQSKVDKIAEDFAKNGTFIPKVTPGEETQNY
+LVAIVFRLSFFSAFYLVIIAGMQYVQIMTGILQPSIAFGGTSLMILVSVSIETIS
+>Q98Q01_MYCPU/90-438 Q98Q01.1
+SIVSLGINPFITASLIMTILQSKLFPPIQKMSQSGPLGRKKINVITRLLTLVFAFPQAIV
+LTQTLSRENGFISIDQEFKTIANIYVLLPLILVAGSLFTLFLSEQITDKGIGNGTSLIIF
+SGISLSLPSQFRAAFNVLVGTNKTTLFTGLIHFLLYLFGYLLLIVIIVFVYLAERRIPIQ
+QTGAGLSKNIKEMGSLPIKVNPAGIMPVIFSMIVISFPLLIAGLLDRSTSLVRLWIERHL
+AFTHPIGFSLLIIITFIFSIFMGLQQSKIDKISEDFNKSGTFIPGLRPGDQTENYLIDVV
+LRLSTFSAFYLSILVSIQYIMQMAGMPAAISFGGTSMMILVSVSLETID
+>Q4AAF9_MYCHJ/85-434 Q4AAF9.1
+SVVALGISPFITASLFMLIAQTKLFPPIHRLSQSGPAGRRKINIITRFLTLLVAVIQAVV
+LIRTVILNPDYGFVRLEINTPVFIWLVLPLVLVAGSLFSLFLAEQITDKGVGNGTSLLIF
+SGIVVGLPRRFQHAFEYLVDLSFSSSLISQVLSFILYIFGFLLILLIAIYVYLAERKIPI
+QQTGSGMSKNIKEISILPLKLNPAGIMPVIFALIIVSLPTLFSGFLDRNTSAVRNWIDNN
+MQIYHPIGLIIFIVFNVSFSIIMSLQQSRVDKIAQDFAKNSTFIPGIRPGEQTEDYLISV
+VLRLSVFSAIYLTFLGILQPVEIMLGLPSAITISGTSIIILATTTLETIS
+>Q9PQP1_UREPA/76-434 Q9PQP1.1
+SLFAIGIGPYITAQIIMQLLSSELVPPLAKLSKSGERGRKKIEVITRIITLPLAVMQAVI
+IINLMTRANGFISIVSNAPFAIGSPLFYVTYIFLMVGGTYISLFLADLISKKGVGNGITL
+LILTGIVASLFNHFIAIFSNLGSLTSSKVSQIIGFILYILFYIMILIGVVFVNNSTRKIP
+VQQTGQALILDHEKLPFLPIKIMTAGVMPVIFASSVLAIPAQVAEFLDKQSMGYYVIHNY
+FIVDSWTGLAIYVVLILLFTFFFSYVQLNPPKMAEDIKKAGRFIPGVQVGMDTEKHITKV
+IYRVNWIGAPILAFLACLPHLVALVAKTINHGIPVIQPSTIFGGTSIIIMVTATLELWN
+>SECY_MYCGE/81-430 P47416.1
+SLFAVGISPYISAQIIMQLLSTDLIPPLSKLVNSGEVGRRKIEMITRIITLPFALVQAFA
+VIQIATNAGTGSSPISLANSGSEFIAFYIIAMTAGTYMAVFLGDTISKKGVGNGITLLIL
+SGILSQLPQGFIAAYNVLSGIVITLTPQLTAAISFFIYFLAFLVLLFATTFITQATRKIP
+IQQSGQGLVSEVKTLPYLPIKVNAAGVIPVIFASSIMSIPVTIAQFQPQTESRWFVEDYL
+SLSTPVGIFLYAVLVILFSFFYSYIQINPERLAKNFEKSGRFIPGIRPGNDTEKHIARVL
+IRINFIGAPFLTVIAIIPYIVSYFIRLPNSLSLGGTGIIIIVTAVVEFIS
+>Q8EUD2_MYCPE/81-433 Q8EUD2.1
+SFMAIGVSPYITAQIIVQLLSSDLIKPLTRLSKAGERGKRKLEIITRLITIPFAIMQAYA
+VLSLAGTQGLVSSFFGQSALSSVPAGQIILLLLGMTAGTYLTIFISDIISKRGVGNGVTL
+IILSGIVASIYPNFTSVFQVLTGSSQISNQLLRYFSFAVYLVFFFLILLATTFVNGSVRK
+IPIQQIGQGLSKEVDEMPYLPIKLNAAGVIPVIFASSIMTIAPTISQFLPSGSAGSEFIN
+EYLSIERPVGLVIYTVLIVLFGFFYSHIQVNSEKLAENFQKSGKFIPGVKMGEETQKYIS
+KTLNRVNCIGVPFLACLAIVPYLITMTTGIPNGIAIGGTGVIIMVTGSLDFWS
+>Q7X4E3_9MOLU/69-399 Q7X4E3.1
+CILSLGVIPYVTASIVIQLSQKVFTFMKEWQEQGEKGKRKINIVTRVLTIFLSLGHGWAL
+CQTEKLVLGPYLLFSTLFFLTVGVFISIWLADLITSKGLGNGISILIAVGMVDKLFKTFK
+YLLSNSNGFETQRILILVSYFVLLILTIILSSAYLKIPINYAXNRNNDKIDKYIPIKLNT
+SGILPIILADTLLNVIQQISMLFSKNGKVNEYIGIFVESRSELGIYFFVYILLIMLFSFF
+SSFMTINPKDVAEHLSKQNAYLKDVQPGLPTVKKIVREMFKITFLGSCFLTLLASTPDII
+NYLAGIKISQNIPFSGTSLLIIVGVALESIQ
+>Q5Q069_ASTYP/59-398 Q5Q069.1
+TLFGLGITPYITASIVVQFLQKLLPICREWKDQGQMGKRKLNLLTRSLALFFAFGQSFAF
+LNSYSKLLVTSISTRQLFLLALIATAGVAILIWFADLINSKGIGNGTSILIVVSMSHSLI
+NLFANLNKSYLSKNTFLTLKTFNFACIVLLLLLFLIFTVVVQITSLKIPINYARNQSQGK
+SYIPLKINSAGVMPVILAFALLQPFQILAGVIGNDKLTKYVNLFTNTNSSNNQINFFAIG
+FLVLLVIVLSFFSAFMNVNPEDISEHLSKQDAYIAGLRPGEQTTRYLANTLFKITVLGTV
+FITALVVTPILMEHFLSLKDMKLGGTSLLIIVSVALETIQ
+>O21257_RECAM/57-372 O21257.1
+SLFALNITPIITYLFLEQLYYIYSIPLISKKKNLNKDLIKKYSVYIFLMISYLEGFIYLN
+HLYNTTSSSFLIFYLDNTINYLLCLNFLVIGSCFLYFFAKLINIYGIGKGLSFIIFINIV
+GSFIDIFYKYLIQIETLNVKYLVFLLFVQCLFCGIIYFYIDFLFLKIPIIKLNFVGNEND
+NYNYLNYFQKYQTSSLNLLGILPFILVYSIIYMLKLNLNSFLDLVFNIFLEMLCMMFIYL
+FLSRFLKKYLKFIYNINKNNIYIEHINKNIYSIFFISHLYYLGILRDYCLFCFLFIFSKL
+FFIISYLFIEIDFSFF
+>Q74NB9_NANEQ/69-457 Q74NB9.1
+SIVSLGIGPIIIGYLLAELFIGSGELNIDITTEEGKRKFENLARFFMIVFGLFESIVMAT
+IGWFKPSQFLISLFAMPFSFLGSNAFLIGYILAVLFIVAQLMLGVILAYLLDDLSQKWGF
+TSGINLFILATVSRELFVQLFNPLTQIPGTPTPPIGKIPQIFYFISQGLYTEAIVVGLQL
+LVIVLVILLSVYFYMVKIPIPTSFGKIPEKSLRYEVRLIYTGNIPVIFAFAFLHQILLIA
+WVLQQLGIPLLGTIENGHPINGLVAYIYPDTGFLISLILGNLTLDNLIRTITSSLFFLGS
+SILFSIYFVLATGQDSEGLAKQLSKMFGRIGLKRDYRIIKHYLDKIIPCVTVLGGFIVGF
+LALLSYWVSIPIGGTSILLATMISYMVYE
+>Q2EMT2_METVO/30-379 Q2EMT2.1
+TLITLGIGPIVTAGIIMQLLIGSELVKLDMSKPDNRALFQGLQKAFGIFLCFLEAGMFVL
+AGAFGALTPMMSLALILQLAIGAILLIYLDEIVSRYGIGSGIGLFIAAGVSQTIFVGALG
+PQGYLWKFFSALVSGSMGPALEYILPILATIAVFFVVVYAESIRVEIPLAHGRVKGAVGK
+YPIKFIYVSNLPVILAAALFANFQLWGLVLYKIGFPLLGTYSNGRAIDGIAYYFSTPYGL
+SSVISDPIHAIVYTLFLIGFCVLFGLFWVETSGLDAKSMAQRLGGLNMAIKGFRKSNKSI
+ENRLKRYIKPITVMGSAFVGLLAALADFTGALGGGTGVLLTVSIVYRFYE
+>A5UL65_METS3/72-433 A5UL65.1
+SILTLGIGPIVTASIVLQLLVGSKLLDLDLSSPEDKSQYQATQKILSIVFTMFEAGVLVL
+TGSLVPIDNSYLGVLFLQLVIGAILIIYLDEVISKWGFGSGIGLFIAAGVCEAIIVGTFS
+FIPGPGGVYGGAIPAFIQSFWSSSIDFSVLIPLIATAAVFFVVVYGESMRVEIPISHGSV
+RGHGRIRGSVGKYPLKFVYASNMPVILTSALLVNVSLLASVFQKIGFPILGEIVNGKAVS
+GIALYLSTPNDVSLLVTDPVRVIVYAFFFLLCAVLFSYLWVEISGLNAKKISEQLYKSGI
+QIPGFRSSKRQLYKILKKYIPALTIISGLYVGIIAFCADLTGALGGGTGVLLTVGIIHKI
+YE
+>SECY_METTH/73-436 O26134.1
+SILTLGIGPIVSASIILQLLVGGKILKLDLSRHEDKAFFQGLQKLLAIVFTFFEALIFVL
+TGSLAPSAPQFVWVLILQLTIGGILIIFLDEVVSKWGFGSGVGLFIAAGVSQEIIVGAFN
+PLSAPTQPGVPAGRITGFLYLLFTGQSPDFQYYVLPVLALIAVFLVVVYAESMRVEIPIS
+MGGGKRLSRGAVGKYPLRFIYASNMPVILTSALLLNVQLLANVFQKLGYPILGTVSNGQA
+VDGLAYLLTAPRSIDALILDPFRVVFYAVVFIGLCVLFAWLWVEISNIGPRHVARQLYQM
+GMQIPGFRSSRGQFEKILKRYIPTITILGGAFVGLLAFVADLTGSLGGGTGVLLTVGIVY
+RLYE
+>SECY_PYRAB/72-448 Q9V1V8.1
+SILTLGIGPIVTAGIILQLLVGSEIIKLDLANPEDRRFYQALQRVFSVFMCFLEAAIWVL
+GGAFGRVGVDVTYAIAALMILQLAFGGIILIVLDELVSKWGIGSGISLFIAAGVSQRILT
+RSLNPLTDPNIIDPLTGKPAIVGAIPYFIQHILKGDLKGALYRGGTAPDMMAVIATIIVF
+LVVVYFESMRVEIPLGYRGVTIRGRYPIRFLYVSNIPIILTFALYANIQLWARVLDRLGH
+PWLGTFDPTTGNPVGGFVLYVIPPRSIFTVIDNPVRALVYLILTVISSLIFGFLWVELTG
+LDARTIARQLQRAGLQIPGFRRDPRTLERVLQKYIPYVTFWGSLTVALIAVLADFLGALG
+TGTGILLTVGILYRFYE
+>Q8TZA9_METKA/75-435 Q8TZA9.1
+SILTLGIGPIVTASILLQLLVGGDLIKLDLTNPEDRRLFQGLQKLLAIVLCFFEGVMMVF
+SGAAPPAEPSILLEILLILQLALGGILVIFLDEVVSKWGIGSGVGLFIVAGVSSQIIIGA
+FNPLPSPQQPGRPAGAVWAFLYSAMQGTPDWTLLAPVIGAIITFLIVLYVEGMRVEIPIA
+FAGIRGARGRFPVRLLYTSNIPVILASALFMNVRLWALAFQRMGVPILGKLDPRGQPISG
+LVYYLSPPNSIVKTLSDPLQALGYMMAMVIASVFFAVLWVELTGMGPREIARHLHRAGLH
+IPGFRRDIRVLEKRLQKYIYPVTVMGGAFVGFLAAGADLMGALGGGTGVLLTVSILYNMY
+E
+>Q9HIT0_THEAC/82-514 Q9HIT0.1
+SLMDLGIGPIVTASIVMQLFVGAKIFNLDLQNAEDKAIYQGVQKLLVIIMIFVEAIPQAF
+GYLVPDTKVVNSINAVFPGYGEFLAQTIIILQLFFGSYLVFLMDEVVSKYGIGSGISLFI
+AADVSEQLFIGAFNWQALNNALTYSLTNPPAGAFPKMFYIIMHSSSSYLLTNGVVQILFS
+PPNPMIAVLGTLLIFFLVAYFQSSKIELPISHERVRGARGRYPLQLLYASNIPVILATAL
+LANVSMWTLLFWSSPVLSKVPILGHNPLLGSYPTTAQATALNISATTPTGGLAYYLFSPN
+GLSDWLFPILQPSGYQNILLGHTPLQEAIHIIVFTAFMVGFSVLFAIFWIETTNMGASAV
+AKQIQASGMQIPGFRRDPRVMERVLKKYIPAITIFSGAVVGLLAAGANLIGTVGDTSGTG
+LLLAVGIIIQFYE
+>Q2QAQ7_9EURY/161-583 Q2QAQ7.1
+SIMHLGIGPIVTGSIIMQLFAGAKIIKLDLGDSDDKQLYQGVQKILVLIMIPVESIPQVY
+GFLDASPALVSDFGQGWANAIIVSQLFIGSLLVFLLDELVSKWGIGSGISLFIAAGVAQS
+TFVGTLSPLAVNPGAYGLQNPPAGTLPMIFYTLRTATFSEMVTANGFESILLGDAAHPNA
+VVALFSSVVVFLVVAYAESSKLELPLTHGKVRGHRGQYPIRLVYASNIPVILMAALLANL
+NMFTLLFWSHPTMSTVPILGSQGAWSIAPYLGSYDVGQTQATDGFAWYASMVNGVGDWLL
+PLLNQSPDPYGHSLWQVVLHVITYVTVMTLGSMMFAKFWIETTNMGAKDVAKQIENTGMQ
+IPGFRKNPKVLERILMRYIPPVTLFSGAFVGLLAAGADLLGTVGNATGTGLLLAVGIILR
+TYE
+>Q0W1W5_UNCMA/75-487 Q0W1W5.1
+SIILLGIGPIVMASIVLQLLVGAELIPLDTTDPKDQAIFQGLQKLMVFVMIVVEALPQIY
+GGFLLPDPAIAATLGVSTGIIQLLIFAQVALGGVLILYMDEIVSKWGIGSGVSLFIVAGI
+AQALVGGIFNWNPPYPGQAMGLNVDIAGLGARENLPIGIIFRWEWLLNNIGLSQLLTGEN
+LIVLLYQGEILALLATIIIFLLIVYVESTRIEIPLAHAAVRGARGKFPVKLIYASVLPMI
+LVRSLQATLEMVGLLLYRNGITFLGTFNQYNQPVDGLMFYINPINGLSDWVPQLAALNYP
+GIQLWQIALHVFTDAFILIAGGILFAIFWVETTGMGASRVARQIQKSGMQIPGFRRNEQV
+IEKVVSRYIPKVTVIGGAFVGFLTLLSSLFGILGAVSGTGMLLAVSITYQLYE
+>SECY_ARCFU/73-471 O28377.1
+SIIALGIGPIVTASIILQLLVGAGIIKLDLTNPEDRAAYQDFQRFLVFVMIAVEAIPQIA
+GGLLKPDLNLAAQLGVSPGIISFLIFIQLFIGGVLIVYMDEVVSKWGIGSGVSLFILAGI
+AQSIVVGLFNWVIPPNSAMPAGIIPRWIWIAQNYPLDQLFTGSGLAFLLIQGGILALITT
+AAIILLVVFFEGTRVEIPLAHAVARGARGRFPIKLIYASVLPMIFVRALQANVVALGQVL
+HARGVTIFGEFVNGKAVSGLMFFLQPVSSPYDWIPSLVKSQGAAFAAIPDWMIYLHLLID
+ALILVVGGIIFAWFWVETSGMDARTVASQIAKSGMQVPGFRKSPQVLERVLSRYIPKVTI
+LGGAIIGILTLVANMLGTIGNVSGTGLLLAVSIAYRFYE
+>Q8TRS4_METAC/72-470 Q8TRS4.1
+SLVLLGIGPIVTASIVLQLLVGADIIKMDLSDPKDQAFFQGAQKFLVFVMIILEALPQLL
+GGYIQPDPGLAATLNVGLGVITLLLLVQIFIGGTLILFMDEVVSKWGIGSGVGLFIVAGI
+SQQIVTGIFNWEFEEGLPVGLIPKWIYIAQNTGADYLFSGEGLMFLLVRGGILALLSTVA
+IFLLVVYVESTRIEIPLAHSAVRGARGRFPVKLIYASVLPMILVRALQANIQMVGIILAS
+RGITFLGEFSGSKPLNGIMYYLAPIHSPYDWIPSLVRESFASYGATAPAIWQIGLHVLAD
+AIMLIGGGIIFALFWIETTGMGAKPTAQKIFNSGMQIPGFRRNIGSIEKVMQRYIPKVTV
+IGGAFIGILTLVASLLGTLGSAGGTGLLLTVSIVYRLYE
+>A0B9U7_METTP/75-515 A0B9U7.1
+SLMLLGIGPIVTASIVLQLLVGAEIIKLNLRDPRDQAIFQGTQKALVFVMIVVEALPQIT
+GGYLLPDQALATSLGVSLSIISLIIFLQVCLGGVLILYMDEVVSKWGIGSGVGLFIVAGV
+SQQLVTGLFNWATGDGGLPIGIVPKWISIIRLGLIGLDEIFTAEGLKFIFVTGGLLALIS
+TVGIILLVVLVESTRIEIPLAHSRVRGARGRFPVKLVYASVLPMILVRALQANIEMLGAL
+LTAKLGTVTTAETTAEGVRIVYTGYQSWLGTFLSSAKFDAATGAPISATSPQPVSGLMYY
+LSPIHGPSDWIPSMVSQSTPGLVELGINPIAGWQIWLHLLTDTAFLIIGGIIFAIFWIET
+TGMGAKSIAAKIHASGLQIPGYRRSPVSIERLMERYIPKVTVIGGAIIGLLTVIASLLGT
+LGGAGGTGLLLAVSIMYRLYE
+>SECY_HALMA/73-468 P28542.2
+SIMQLGIGPIVTASIVLQLLGGADLLGLNTQDDPRDQILYQGLQKLLVLVMICLTGLPMV
+FAGGFLPADTAVANSLGIGTAGVQWLIFAQMFVGGVLILFMDEVISKWGVGSGIGLFIVA
+GVSQRLVGGLLTAPFLGNSEGIIYTWYLFITGERGTGPVLAADGLQTVLLQGELLGLFTT
+VLIFAVVVYAESVRVEIPLSNARVKGARGRFPVKLIYASVLPMILVRALQANIQFLGRIL
+NAQLGSMPAFLGTYANGQPTGGLFYFLAPIQSRGDWMWWLEGTAQPVWQILTRVGIDLFV
+MLVGGAVFAVFWVETTDMGPEATAKQIHNSGMQIPGFRQNVGVIEKVLERYIPQVTVIGG
+ALVGLLAVMANMLGTIGGVSGTGLLLTVSITYKLYE
+>Q2FSG8_METHJ/73-458 Q2FSG8.1
+SIVHLGIGPIVTASIVLQLLKGADLIHIDTSEIRGQIQYMGLQKLMIFIMIVVEALPMIV
+GGFLKPDPAIASALFGGNSGVLAILIFIQICIGGVLIFLMDEVVTKWGIGSGVGLFIIAG
+ISEAIINGFINWAPVNDMYPVGFFPRLFAVVLDGANFIQYFGTDLIAFITTIAIFILIVY
+VESTRVEIPLAHTQVRGARARFPVKLIYASVLPMILVRVLQANVQMIGLFLNNIGITIFG
+TFEGQTPTGGLMWYLAPINHPSDWMWWMPSYVGGHAPWEVLIRLGIDTTIMVVGGAIFAL
+FWVKTAGLDSKAVARQIQLSGMSIPGYRRNPAVLEKVLDRYIPRVTVIGGVFIGIMSVVA
+NLFGVIGAVSGTGLLLTVSITYRLYE
+>A2SPM5_METLZ/73-458 A2SPM5.1
+TILHLGIGPIVTASIVLQLLRGADLIKINTSDQRGQVLYMGLQKVLIFVMIILEALPNVL
+GGWMSADPAVSAFFGGNAGFVMLLIFLQICIGGVLVMFMDEVVSKWGIGSGVGLFIVAGV
+AQGLINGFFNWEATTDQFAVGFFPRLFQVIADGSNFIEYFGLQLLALVTTVGLFFIIVYV
+ESTRIEIPLAHANVRGARSRFPVKLVYASVLPMILVRVLQANVQMIGMFLSSIGFTALGE
+YNGSTPINGLMWYLAPINQPQDWMWWLSSFTGTGHAVWEVILRVGIDCTVMILGGALFAI
+FWVKTAGLDSKHVARQIQNSGMQIPGYRRSPAVLERYLDRYIPRVTVIGGVFIGLLSVMA
+NMLGIIGFVGGTGLLLTVSIIYRLYE
+>A0RUE4_CENSY/79-457 A0RUE4.1
+TLVELGIGPIVTAGLLMQLLRGSEILKFDFKKPEERGIFQTATKMVSYVVIVVESSIYGI
+AVYGPGIADPSVLYILIGQLMASSIIIMFLDELIQKGWGLGSGISLFIMAGVAQQILWSL
+FSPLPAGDGFAVGIFPFIGQWASVGMGNFEDIFFRYNQLPSIFGLLLTGGVLLILVYTQG
+MKIEIPIVSTKYRGFSATYPIKLMYVSNIPVILASALTANAIFIGQMFWSNFNPRNDNIF
+LNVLAQFDLTNPSTPIGGIVYYITPPRGLDIAALDPMRAVGYVLFMIGIVVVFGKLWVEL
+GGLSPKSAAKNLLDADVQIPGFRRSNQPIEVLLNKYIPSVTIIGSMILGALAGASDVLGV
+FGSGIGILLMVDILINYYN
+>A8ME75_CALMQ/77-461 A8ME75.1
+TLAQLGIGPIIIAGIIMELVAFSELMDVDLNDPKDQARFTALTKLVAVIIAMFEGAFIMS
+THQLTVANAGLAFIVWLQMLFGAVIVILLDDLISKGWGIGSGISLFILISIIRSIFQSTF
+MPVTVGAGELLGIIPALVAAVYSAAVSHTLAPLLSIVYRFNLPGLIGLIATIVLGGFIAY
+VELMEVRIPLSFVQYGGYKMSYPFKVMYVSVLPIIFTAYTVALIYNGLYFIWTTYNPHNA
+NALLNSIACIRVITTAKFGTINEPCPSSLIYYFTVVPYNITPQYVVVHILMYVVLSVVFA
+YLWVNLAGLSAEDQARTMVSSGLSIPGFRASARSLAVHLKRYVNSLTFTSGLLAGFIAAL
+GDVLGVYGTGIGLILMVEIIIQYYT
+>A3MUZ2_PYRCJ/70-435 A3MUZ2.1
+TLAHLGIGPIVIAGILMEVFAFSGVLNLDLNKREDRLKFTLMLKWAALGIAALEATAYVL
+GGQFGTVTPLGGVLIVLQLLLATVIILLLDDLMSKGWGIGSAISLIIFLGVSRQIFLSLF
+SWDTVQDSNGNTQVFGLLPALGVALYDLFTSGNANTLLGLVNRPLTVNTYLPDFVGLVAT
+ILLGYIILYLEMMKVNIPVASAQYRGIKFTIPLRFVYVSVLPIIFTTYSLLLVGQLLQPF
+AANNPALITVLNVIFLPHRYFDPLLIILNFALYVALAIAFAWIWVQLAGLSAEDQARQFT
+QSQLHVPGFRQSERVLAKILERPINALTIISGFIAGTFASLGNVLGVWGGGVGLILLVEI
+ALQYYA
+>SECY_SULSO/73-449 Q9UX84.1
+TLAQLGIGPIITAGLIMQILAGSKLISIDLNDPDDRVKFTEAQKGLAFIFILVESALFGY
+VLARTSTTINASILFIAGIVIAQLIVATYLILLLDELIQKGWGLGSGVSLFILAGVMKIM
+FWDMFGIASVSSQNLPIGFFPALFTALASHSDVLNLIVNTSTKNLFQPDLVGLVTTIALI
+IITIYLTTMTIEIPVTSQKLRGIRRTIPLNFLYVSSIPVIFVAVLGSDIQLFASLASYVS
+PSASNILNTVSGVFFFPPPNSAIPHSIYAVVLDPLGALEYAVVFIVLSILFGILWVDVAG
+LDPATQAQQLVEAGIEIPGVRNNPKIIEGILARYIYPLAFFSSIIVGLIAVFATLLGAYG
+TGIGILLAVTIAIQYYS
+>SECY_SULAC/74-443 P49978.1
+TLAQLGIGPVITSGLIMQILVGSKLINVDLTTQEGKSKFTQAEKALALIFIIVESSLFGY
+VFTRATSNILLPIIVVVQLIIASYIILLLDEMIQKGWGLGSGVSLFIMAGIMKVIFWNMF
+GIVSVQSQNLPVGFFPLLVSYITSGRNLQEIVLNTSSTTPYQPDLIGLIATVGLTILIVY
+LVNTNIYIPVTTQRLRGIRTTVPLNFLYVSSIPVIFVSVLGADIQLFASLANSISNSASG
+ILTDIANAFFFPPQGVPHSVYALVVDPVGAAIYAAVFIVLSIVFGMLWIDVAGLDPKTQA
+EQMIRSGIEIPGMRTNPRIIEGILSKYIYALGFFSSLIVGLIAVVATFLGTYGTGVGLLL
+AITIAMQYYN
+>A2BME2_HYPBU/73-444 A2BME2.1
+TLMTLGIGPIVTAGIVLEVLVGGKLIELDLTKPRDRKIFMGAQRTLALLFALLEAAAYVI
+GCRFWISAFASSPEVCPPISTAVKIIVVLQLVFATLVLMWFDEMIRNGWGIGSALSLFIV
+ASVVKGLFWQLAGSTKVATPEGQPVYYGWLAHVVSTGDLGVLRRGMPDMVGFLATIAIIM
+VLIYFQLMRVYIPVTSPRYGSIKTRIPLNFIYVTNIPILFVAIAVSDIKVFEIVIASLLG
+ADNPLVRGMDVLYNYVSPPRGLLAAVADPLRTLTFALAWLALGLLFGFIWVEIAGLSPRQ
+QAENLIKSGMELPGIRKNVKLLERILARYIYPLTVISSLLVTTMAILADVFGAYGTGSGL
+VLLVGIIYNFYQ
+>SECY_AERPE/73-434 Q9YDD0.2
+TLMELGIGPIVTASLIIQVLVGAKIIKLDLADPEGRRKFTSAQKVLALAFAALEAVAFTV
+GGRYWVGTAIEPGPLDYALVSLQLFLGALLVIYFDEVMQKGWGIGSAISLFILAGVAQGV
+VWSIFGTIPGVAQDYGLVPAIISNPDLTLLARPNGFPDLTGFFTTLAAIILLVYLQAMRV
+EIPITSERFKGIRSRVPLQFIYVTNIPILLVGILVSDLLLVQRLLADYLGVESRAYQIYS
+SIVYYLSPPRGVVQSIADPVKTAVFIASWTVLSIVFGYMWVEIAGLNPREQAERLIKGGL
+AIPGMRSDPRVLERVLRRYIYPLTFLSSLIVAALVIVADIFGAYGTGTGLLLAVGIINQY
+YA
+>A1RWR3_THEPD/75-456 A1RWR3.1
+TLIELGIGPIVTSGIVWELLVGSRIVNLDLTTPEGRRTFAGLQKLTAFLFAALEAAAYIL
+GGVYGALTQQQQIIVFVQLFVASTFVILMNDMLEKGWGIGSAVSLFIAAGVAQQIFWELF
+SPIGPLGDGLYYGLFPSLFSALVSGNSTLLMHVVVRPSGYPDLVGFVGMVVMLLLLTYME
+SMKITIPVSSVRFGGAKTRIPLKFLYVSVMPVILVGALYANVVMFTQALWPRVNPGNQNP
+WLNVIAKYNYTEYGPVPLPGSFVYYISPPRSLASALADPVHLVVYSLLYIGFAVLFGVAW
+ILTSGMDPETQAEQLAKAQLQIPGFRKSEKVIASMLKRYIWGLTILSSIIIGVIAVVSDI
+FRVMGGGTGILLLVGIIVQYYS
+>SC61A_SCHPO/76-459 P79088.1
+TLMELGISPIVTSSMLVQLLVGSQLIEVNMELKSDREMYQLVQKFLAIIIAFGQATAYVL
+TGMYGRPQDLGAGICLLLILQLAAASLIVLLLDELLQKGYGLGSGISLFIATINCENIFW
+KAFSPTTYHIANGVQFEGAVINFVYVMFTWDNKAAALYQAFFRSGLTSSQIQLPNLWNFF
+ATLLVFGVVIYLQDFRVEIPIRSQKFRGYRSTFPVKLLYTSNTPIMLQSALTSNLFFASR
+LLFNRFSSNFLVRFLGVWEQTATSGLSYYLSPPASFQDALIDPIHTLVYVFFTMFACALF
+SKLWIEVSGASPRDVAKQLKSQQLVMAGHREGSMYKELKRIIPTAAWLSGAVVGALAVAS
+DLLGALGSGTAVLLCTTTIYGYYE
+>A7E5Q2_SCLS1/76-459 A7E5Q2.1
+TLMELGITPIISSGMVFQLLAGTHLIDVNLDLKADRELYQTAQKLFAIILSMGQATVYVF
+TGLYGQPSDLGAGVVCLLILQLVVAGLIVILLDELLQKGYGLGSGISLFIATNICESIIW
+KAFSPTTINTGRGPEFEGAVIALFHLLLTWPNKQRALQEAFYRQSLPNIMNLLATIVVFA
+AVIYLQGFRVEIPVKSSRQRGARGSYPVRLFYTSNMPIMLQSALSSNIFLISQMLYSRFS
+ENLLVQLFGVWEPKEGSAQLFATSGIAYYMSPPLNFTDALLDPIHTAVYITYMLVACAIF
+SKTWIEVSGSSPRDVAKQLKDQGLVMAGHREQSMYKELKRIIPTAAAFGGACIGALSVGS
+DLLGALGSGTGILLAVTIIYGYFE
+>Q5KC69_CRYNE/75-459 Q5KC69.1
+TLMELGITPIVTSGMIMQLLAGAQLIDVDFSLKDDRALFGAAQKLFAMIISLGQATVYVL
+TGLYGSPSSLGAGVCLLLILQLVSASLIVILLDELLTKGYGLGSGISLFIATNICESIVW
+KAFSPNTVNTGRGPEFEGAIIALIHLLFTWNDKTRALKEAFYRDRLPNIMNLLATVAVFA
+AVIYLQGFRIEIPIKSSKMRGQRGTYPVKLFYTSNMPIMLQSALTSNVFLVSQMLAGRFP
+DNLLVRLLGVWEPMENNPTQLGAVSGIAYYMSAPHSLTSALKDPFHTVIYIAFIVTACAL
+FSKTWIEVSGSGPRDVAKQLKDQNMTLAGHRDASIYKELKRIIPTAAAFGGATLGLLSVV
+ADMMGALGSGTGILMATTIIYGYFE
+>SC61A_ASHGO/75-460 Q752H7.1
+TLMELGVSPIITSSMIFQFLQGTQLLQVNLESKQDRELFQIAQKVCAIVLTLGQAIVVVL
+TGNYGSVSNLGIAISLLLILQLVFASFIVLLLDELLIKGYGLGSGISLFTATNIAEQIFW
+KAFAPTTVNNGRGTEFEGAVVALFHLLSVRKDKKRALVEAFYRDYLPNMFQVLSTVFVFL
+FVLYLQGFRYELPVRSTRTRGQVGSYPIKLFYTSNTPIMLQSALTSNIFLTSQLLYQKFP
+NNPIVKMLGVWGTRSDAPYSPNAAISGLSYYIQPPFSFTEALLDPIKTVVYVTFVLGACA
+MFSRTWIDVSGTSPRDVSKQFKEQGLVINGRRETSVYRELKKVIPTAAAFGGATIGALSV
+GSDLLGTLGSGTSILMATTTIYGYYE
+>Q59MJ6_CANAL/76-459 Q59MJ6.1
+TLMELGISPIVSSGMLFQLLQGTKIIHVDMQNKNDRETFQTAQKLLAILLAVGQATVYVL
+TGMYGPPSSLGVGVCSLLILQLVFASTIVILLDELLQKGYGLGSGVSLFTATNTCEQVFW
+KAFAPTTSTSAKGTEFDGAVVAMFHLLGSRKDKKRALIESFYRPNLPNMFQLLATLLVFF
+AVVYLQGFRIELPMKSTRQRGPYGSYPIRLFYTSNIPIMLESALASNIFIISQLLFMRWP
+NNLFVKLLGTWDARAGSSQLYANGGLAYYIQPPFNFTDALLDPIKTTIYIAFVLGSCAVF
+STTWIEISGTSPRDVAKQFKEQGLVIAGHRDTSAYKELKKIIPIAAAFGGATIGALSVVC
+DLMGTLGSGTSILLAVTTIYGYYE
+>A7SJW4_NEMVE/75-458 A7SJW4.1
+TLMELGISPIVTSGLIMQLLAGSKIIEVGDTPKDRALFNGAQKLFGIIITIGQAVVYVMT
+GMYGDPSDLGPGICLLIIIQLFCAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK
+AFSPATINTGRGTEFEGAVIALFHLLATRTDKVRGLREAFYRQNLPNLTNLIATIFVFGI
+VIYFQGFRVDLPIKSARYRGQYSSYPIKLFYTSNIPIILQSALVSNIYVISQMMSAKFAG
+NFFVNLLGTWEEAGGGPARSYPVGGLCYYMSPPETVSHIIEDPVHACIYIFFMLGSCAFF
+SKTWIDVSGSSAKDVAKQLKDQQMVMRGHRDKSMVHELNRYIPTAAAFGGLCIGALSVLA
+DFLGAIGSGTGILLAVTIIYQYFE
+>A0CFY2_PARTE/73-456 A0CFY2.1
+TLMELGISPIVTSGMILQFLSGVGFIEVNHSVREDKVLFNAAQKLLSFIMAIAEGMAYIW
+SGAYGDINQIGAGNAILILLQLTFAGVIVTMLDEMLQKGYGLGSGISLFIATNVSENILW
+KSFSPITLSTEAGTQFEGAIINFFHLLFTKQNTLQALYYAFFRESAPNLNNLLATLFVIS
+LVIYLQGFRVEVPLASQKIRGLVSSHGIKLFYTSNIPMIIQSTLVQNVYFLSQLLYRRFK
+TNFFVKLLGTWQEAEFGGQSVPIGGLAYYMSPLRDVKDIINDPIHAVVYVLFVVFMCGFF
+AKFWIQISGESAKDVARKFKDEQIKIKGLREESMVKYLSGYIPVAAFCGGVCIGLLTIVA
+DILGAIGSGTGILLAVTIIYGYFE
+>Q22MG2_TETTH/151-538 Q22MG2.2
+TIMELGISPTVTAGMVMQLLVGAQILNIDQNDPVQRSLYEGSQKLLGLIIAFFEAVAYVW
+SGMYGDIEKVGYGNALLIVLQLTFAGIIVILLDDLLSKGHGLGNSAISVFIAINICETII
+WKSFSPITYPIPGFEKEQYEGAILNLFHSLFAIDNKFVALQNAFYRSHLPNLASLISTAL
+IFIVVVYFQGFKVDIALKNDRVRGAIQSYPIKLFYTSNMPIILQSALISNLYFFSQILYR
+NFNGNFIVGLLGKWSIPEAGGSHMVPVGGLVYYLSPPHGMIEVISDPLHTILYVVFILTT
+CALFSKTWIQVSGSSVKDVAKQLKEQGMGLVGSRDSGLKSHLKRYIPIAATFGGLCIGAL
+SVVADFIGVIGSGTGILLAVNIVYGYFE
+>A0CU87_PARTE/77-460 A0CU87.1
+TLMELGISPMVTASMIMQLLAGAKLIDVDQNVKEDKQLYSGAQKLLGILIAFGEAFAYVW
+SGMYGDLDKLGAGNAILIIIQLVFSAIVMIMIDELLSKGYGIGNSGTSLFIAINICENIM
+WKAFSPITHKTELGLEYEGAIIALLHGLFVQSDKISALQSAILRDSLPNLTNLLATVLVF
+LIVIYFQGFKVDIPIKNNKVRGGLTSYPIKLFYTSNIPIILQTALVSNLYFLSQILYRNF
+KGNFLIRLLGYYQELENGQTVPIGGLVYYVSPPRSISEAIFDPIHTILYTAFILGTCAVF
+SKTWIDVSGSSPKDVAKQLKEQDMQIVGYRDSSMKDVLKRYIPIAASFGGMCIGALTILA
+DFLGAIGSGTGILLSVTIIYGYFE
+>Q7RLN0_PLAYO/121-506 Q7RLN0.1
+TLMELGISPIVTSGMVMQLLAGSKIIDVDQSLKEDRTLFQGAQKLLGLLITLGEAIAYVV
+SGIYGNLSEIGTGHAILIILQLFFAGVVVILLDELLQKGYGLGSGISLFIATNICETIMW
+KSFSPTTINTDKGIEFEGAIISLIYCLFTEFNKISALKKSFYRTHAPNVTNLLATILVFL
+IVIYLQGFRVDLSVKYQTVRGQQGTYPIKLFYTSNIPIILQTALVSNLYFFSQILYKRFS
+NSILVNILGQWQEIESNGTAVPIGGIAYYISPPNSFADITNDPFHTLIYISFVLVSCAFF
+SKTWIEVSGSSAKDVAKQLRDQHIGMRGHRDTPTSLTRVFNRYIPTAAAFGGMCIGALTI
+LADFLGALGSGTGILLAVTIIYQFYE
+>Q4QGX4_LEIMA/77-467 Q4QGX4.1
+TLMELGISPIVSASLILELLAGVRILTYDQNNREERAVFEGFQKMMGLVITAVEAVAYVS
+SGMYGDPSRIGVVMCGLIVLQLMVATMICILLDELLQKGWGIGSGTSLFIATNVCDTIIW
+KAFSPSTINTGRGAEFEGAIIAFFHLLVSRTDKVRALREAFYRPQLPNLTNIFSTAVVFA
+VVVFFQGFRVPLMTKSKFNGNDRQPYMIKLFYTSNMPIILQTSVVSNISFFSQILSRRFG
+NRNFLINLLGRWEERGYNGGGSGQLFPVGGLAYYLVPPATFYDLLADPIHAIFYVVFVLT
+SCAVFSRLWITISHTAPRDVAKQLASQGRWLVQARESEDDMTRLLEKYIPVAASFGGLCV
+GALTIFADFLGAIGSGTGILLSVTMINQYYE
+>A5JEK2_NOSBO/75-457 A5JEK2.1
+TLMDLGISPVVTASMIMQFLGMLELVKVDYNVKEDKILHGAANRLISLIMTVGSAIVQVL
+TGFYGDPKALGWTYCILLMVQLIFSGVIIILLDELLQKGYGLGNGVNLFIASNVCESIMW
+RAFSPKVFFTGRGIEFEGSLIAFFHLLIVRKNKFAALYEAFFRQNLPNMFSLVSTVVLFA
+FVIYLQGLRVELKTESTQVRGQTGMYPVKLLYSSTMPIIVQSYVISHICTISRFLYKRFP
+TYFLVRALGVWSSEGSSKYQPIKGLCYYILPPESIFDFKLRPFYFLFYVLFTIISCSMLS
+RAWVEVSDNTPTQVASQMKKNKMTLKGVREVNCASVLSKYIPTAALLGGCFTSLVVLISN
+LFDTIGSGTNIFLATSIVHQYLE
+>A2DH65_TRIVA/75-462 A2DH65.1
+SLMEFGISPIVTSGMILQFLCSFGLINRNPSDPEASALFDAAQKLAGIIMTAFQAGNAIW
+SGEYGIRGEIGFVNAALIMTQLVSSAIVVILLDELCQNGYGIGSGISLFICTNICEMIMW
+RLFSFNHYSMGRGTEYEGLVIAFFHYLFTRKNKLRALRDIVFRPQLPNLCQLFSTVIVFG
+ACVYFDQIKINIGLETTVNRARPEPFEIKLFYCSNTPPIIQSTILSQLAGFSRTIYFHWP
+ESLATQIFGVWRSHNGMSYDYSTPVSGLIYYLTAPQSIQQTIHDPLHTIIYLIFSLSSAG
+FISYYYLRFSNQAPADVAEALKKQHLTLKGHREDQKRLEKTLSRYIPTAAALGGILVALL
+SFVADFLSAFGSGTGIILAVSIINQFTA
+>Q2QM98_ORYSJ/88-448 Q2QM98.2
+TVMELGVAPVVTSWVVVRLLAALLFDSDSSTTVASCELLARCLAYVTNASRLVIGIAAAL
+GMCGSGGAGNAALVVLQLFAGGVVVVLADLLHETGYGVEGVSAASLLIATNACERAVSHL
+FSPVKLRLAGAGPEFEGPVFAVTHRVAAAPPSWRHKAGALLFTLLRLDLPNLSNYMTTCV
+MFVLAVRLDETHLRRLYRSRPRRGTDEFVPIKLLYTSAMPIMLHASAVSAFCVDAGGGAA
+YPVGGLVYYVTPPSKLLVDPGLIHELLIHSVFVVASCTLLSMAWAEASRSSAREFRTRVI
+GTGYFVWDETSRRIDRVIAAAAAVGGFAVGGLAVYAGAVGAIGEAGPELLFAVLVIKNLA
+E
+>Q6AV46_ORYSJ/86-471 Q6AV46.1
+TVMELGITPVVTAGTLVQLLVGSNLVRADSSNPDDRALLSAAQKLLSIVITAGEATAYVL
+SGAYGSVGVLGAGNAVLVVLQLVLGGMVAIFLDELLQKGYGFGSGISLFTAANTCEGVVT
+RALSPATMDRGRGAEFVGAVTAAAHLLATRARKLSAVREAFFRGGGGGSLPDLRGLAATC
+AVFLAAVYLQGVRVALPVRPRNAPRSHRGGAYSVRLLYTSGMPVVLLSSAVSSLYVVSQA
+LYRRFGGSLLVDLLGKWTPDAAVPVGGIAYYVTAPASAASAAANPLHAAMYVAFVLAACA
+ALSRAWVVVSGSSSRDVARRLREQQMVMPGMREASMQRELERYIPAAAALGGVCVGALTV
+AADLMGAVGSGAGMLLAVTTVYQCYE
+>Q6C854_YARLI/70-454 Q6C854.2
+TLMELGVGPMVTSGIIFQILGGFQALNVNFDIRADRELFQSGQKIFALLLTFFHAIFLVF
+FAQTYGTISTDSAVSELSLGAAVLIVAQLTAAGLVLILLGEIVDKGYSFGSGSGLFTALS
+VSQNFMWQNLALLKVHQEFVGSIPALLMGLWKNGLFNFGGSYRYVIENSFFRQNLPNLLQ
+LYMSVAVFMLTIYLNTFRVDIPIKSSRVRSLATAFPVKLLYTGSMCLFLLSAFSQNVLIY
+SQSLYVQFPDNLMVQVLGSWGADGSPVGGIAYYISPNNFGYDVIKMVLYSVYTIVGCTLF
+SKYWAEISGSAPKDVAKQFQAQSIVIVGQRAQSAPRELAKVIPVAAAVGGAVVGAIVAFC
+DIFGGLGASAAPMIVAVTSMNNYFE
+>SSH1_YEAST/78-465 P38353.1
+TLLEFGLFPNISSGLILQLLAGLKVIKVNFKIQSDRELFQSLTKVFAIVQYVILTNIFIF
+AGYFGDDLSVVQIGLINFQLVGAGIFTTLLAEVIDKGFGFSSGAMIINTVVIATNLVADT
+FGVSQIKVGEDDQTEAQGALINLIQGLRSKHKTFIGGIISAFNRDYLPNLTTTIIVLAIA
+IIVCYLQSVRVELPIRSTRARGTNNVYPIKLLYTGCLSVLFSYTILFYIHIFAFVLIQLV
+AKNEPTHIICKIMGHYENANNLLAVPTFPLSLLAPPTSFFKGVTQQPLTFITYSAFILVT
+GIWFADKWQAISGSSARDVALEFKDQGITLMGRREQNVAKELNKVIPIAAVTGASVLSLI
+TVIGESLGLKGKAAGIVVGIAGGFSLLE
+>Q6BT20_DEBHA/78-475 Q6BT20.2
+TLLELGLLPVLTSAFIWQLSAGFRFINVNLNLRSDRELYQSGQKLTSFIFAIVYGAGYIF
+SGYYNNVIKGYNPFNGDSVPVTTLVLIFLQIVTMSFVTTLMVEIFDKGYCFGSGVLCFVA
+LQVATNLIRDVVGLELVSLPNSNKFESYGAAMNFIKNFRINFKSLNYNVLNSFTRSQLPN
+LSQFYIVLVTVLVLIGVQNYRIELPIRSTKVRGMNNVYPIRLFYTGALPILFAFTVLTNL
+QVFGYFTSTLLNNYSQLAASIIGTWSLDTKSFNLNLTSGILYFLTPSKSLAQSLLSPIRS
+VTYGLAIITLSTWFAYRWSRISGSSPKDISKQFKEQGISISGKRDISITKELSRVIPVAS
+VSGAFVLAALAIAGELLGGLGKGVAAIIGVCGAFGILE
+>A5DE75_PICGU/20-414 A5DE75.1
+TLLELGLLPVMTSAFLWQLAAGLRLVKVNLSLRSERELFQTGQKLTSFILGIVYTAGLIA
+SGYFAPALRNQTGFEDSFPVTTYVFIFLQVFVMSAVMTLLVEVFDKGYGFGSGILCFIAL
+QAASDLVKNIIGLEVVKLANSNKFESVGALMNLIRSFSFKTLGKNIYNSFNREHLPNLTQ
+VYITIVTLLVVVALQNFRIELPIRSTRARGMNNVFPIRLLYTGALPLAFAYTVLTNLQVL
+GYIASQLLESYSPVASSVIGKWTIDYRSSNLKVSSGILYFLSPPTSILNTLVSPLKTAAF
+TFVVIVLSAWFANIWSSISGSSPKDISKQFKEQGISIAGKRDISITKELSRVIPVASVSG
+ATVLGLIAVAGEVLGGAGKGVGTIIGVSAAFGVLE
+>A3GFV9_PICST/78-476 A3GFV9.2
+TLFELGVLPVVTAAFFWQLAVGLKLVNVNLGLRSDRELFQTGQKLTSFVLAIVYGVGLIY
+SGYYDNAIRGYDPLSDSTPYGWYGLILFQFLSWSFIITLIVEVFDKGYAFGSGALSFLAL
+QTATNLIAELVGLEIFPINNSNKFESYGALINFTRNFSFDISKIGTNVYNSFTRLQLPNF
+TSFYITVATTLAVVYLQNLRIELPIRSTRARGMNNVFPIRLLYTGALPVLFAYTVIANIQ
+YFGYLAYVVLQKANVSSFALSIIASFNLDSYSNRLNLTSGALYFFSSSPSLLSTILSPIR
+TVVYSATVIVLATWFAEKWSYISGSAPKDISKQFKDQGISISGKRDISITKELSRVIPVA
+AVSGGFILAAIAVAGDLLGGLGKSAATIVGVSAAFSVLE
+>A5DWJ5_LODEL/34-436 A5DWJ5.1
+SLLELGFLPIITSAFLWQLAAGLKLININLGLRYDRELFQLGQKLTAWGLALIFSVGLIY
+SGYYDNVIRGYKVVGGSGGVPIWSYLIIFTQIFTWQIVLTLIVEIFDKGYGFGSGILSFL
+ALQNATSFIAELVGLEMFPVVNNTLKFESLGALLNLVRNFSIFSPTTTINQIWHAFTRVQ
+LPNLTQFYITLATILAVVLLQNFRTEISIRSTKVRGMNQMFPIRLLYTGGLPVLFAYTVI
+ANLQVFGFIFEAALVKLTASPIVSTLFANYVVEPYSNRLVIKSGVLYFFTASQTLLQSII
+SPLRVVIYSSTVVGLATWFAYKWSYIAGSSPKDISKQFKEQGISIAGKRDISITKEFAKI
+IPTAAVTGAFILSALAVTGDYLGGLGRNVASIVGVSSAFGILE
+>Q5A2C9_CANAL/5-404 Q5A2C9.1
+TLLELGLLPIITSAFIWQIAAGLRLINVNFKLRIDRELFQTGQKLTSFIFSLIFAIGLIY
+SGYYDNAIRGYNPLQDGIPYGSYALILLQITAWSWIVTLLVEIFDKGYSFGSGILCFLAI
+QSSTNFIANLLGLENFPVVNSNKFESYGALMNLIKNFSIFNPKQTVYQIWHSFFRIQLPN
+LTQFYISLASILIVVALQNFRIELPIRSTKVRGMNNVFPIRLLYTGGLPVLFAFTVVANI
+QVVGYLIHSVLSKLGTSPIVISIIGNYVYNPSSNELDLNSGILNYFTSSSSLVESIISPI
+KTTVYSITIIVLAVWFANKWSYISGSSPKDISKQFKDQGISLAGKRDISITKELSRVIPV
+ASVSGAFILSVVALIGDFFGGLGYGVASIIGVTASFAVLE
+>Q74L41_LACJO/64-372 Q74L41.1
+SIFSIGLNPLMFSMLIIQLLSFTHSFGFDALSPKQVQYLMQFLTMIITIIQAALLVFAFT
+NRRNGLEDFEMILILSAGSCLVVWLCYRNMKYGVGASAPVILTSILNGAIPNIISNVKLL
+LTMKYAWIWLAALAIFILLLIKFWLAFTKAYYPLKVVNPSLPASSNLMTVPLGLNMAAMM
+MYMVGMAILTLPLMVGRYFSSSSLINNWVFQASFSAVMGILIFYFFTFVNFDPKEQAKSF
+RNNHYYIPNIAPGRPTQRYLNRLIWIIAFPGAVLNAFQLVFGLYGGNFLGNYAGFAIIPM
+NVVMITMFM
+>B3XPQ8_LACRE/65-377 B3XPQ8.1
+SLFMVGLNPLMIAMLIIQLLTMLRLFYFDTLSMNQLMKIQQWLTLGFAIIQSTAVTLGLK
+ITTGTLDSLAVILMLTAGSMFVVWLGNMNMKFGIGGTITLILFNIISGSIPTLLRSIKML
+AKQSYGPLWLFLAAIAGCIVLVFWVSFNRAYYPLKMINTSMSSHDRPIILPIGLNMGAMM
+TYMVGMSLLMVPTLLANVLGPGSLFANPYFNMVVSGILAFVLFYFFTFVQFDPKAQAKAM
+LQGNNYILGVRPGEPTRKYLRQILLHVSFLGALLNAIQLSFGLLGGQVLGNFAGLAIIPM
+NMIMIVMFMQGIK
+>A1C3L4_STRPA/70-403 A1C3L4.1
+TLFSLGIGPTMTMMILWRFLITFKLIGSWTSNKVNRLQFLLTLAIALLQSFGITNDSKFL
+LIFGYSHSTLRIITIILLTTGTFILNWLCKINSERGIGGMTVVILVNMILTFQSNIIRYF
+SVQQFKFSSLIQYGLVFFVALSILIWFNILLYKGEYRIPIQRVGLNTPYHASSYLPIRVT
+PAGAMPFMYGMTLMMLPPYIFVVLLHIFPGNQILEYLSVHIGLSQLPGVICYIFLLYFLS
+IGFAYYNYDPYEISKNMRNNGDYISGKKPGEETIKYIQYVVNSFAQFGAFTVIIFGGLPM
+LAVLLQGQGKNSVSIALLISNAYIIVSLLLGVIE
+>Q3DVD6_STRAG/65-395 Q3DVD6.1
+GVFSLGIGPMMTTMILLRLFTIGKYSSGVSQKVQQFRQNVVMLVIAIIQGLAITISFQYH
+NGFSLTKLLLATMILVTGAYIISWIGNLNAEYGFGGMTILVVVGMLVGQFNNIPLIFELF
+QDGYQLAIILFLLWTLVAMYLMITFERSEYRIPVMRTSIHNRLVDDAYMPIKVNASGGMA
+FMYVYTLLMFPQYIIILLRSIFPTNPDITSYNDYFSLSSIQGVVIYMILMLVLSVAFTFV
+NIDPTKISEAMRESGDFIPNYRPGKETQSYLSKICYLFGTFSGFFMAFLGGVPLLFALGN
+DDLRTVSSMTGIFMMITGMSFMILDEFQVIR
+>A5LN99_STRPN/64-389 A5LN99.1
+SIFSVGLSPWMSAMILWQMFSFSKRLGLTSTSIEIQDRRKMYLTLMIAVIQSLAVSLRLP
+VQSSYSAILVVLMNTILLIAGTFFLVWLSDLNASMGIGGSIVILLSSMVLNIPQDVLETF
+QTVHIPTGIIVLLALLTLVFSYLLALMYRARYLVPVNKIGLHNRFKRYSYLEIMLNPAGG
+MPYMYVMSFLSVPAYLFILLGFIFPNHSGLAALSKEFMIGKPLWVYVYISVLFLFSIIFA
+FVTMNGEEIADRMKKSGEYIYGIYPGADTSLFINRLVLRFSVIGGLFNVVMAGGPMLFVL
+FDEKLLRLAMIPGLFMMFGGMIFTIR
+>A3CM55_STRSV/64-391 A3CM55.1
+SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRMLLTLVIALIQSVALVLNLP
+LQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASMIAYIPQDIWN
+SIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPA
+GGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFILYLLTIFILALA
+FAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILISGLPMMV
+VLVDIRYLRLSMIPGIFMIFIGMVFSIK
+>Q03HZ8_PEDPA/65-396 Q03HZ8.1
+SLFSVGLGPYMTGMILFQAIQLLDIDELNKINDYKRGMIQRWISFVIALLQTLQFIYTIR
+EHINFSGIKVWGIDYNLIVAFFVLVAGAMIVAWMSDMITKYGIGGSGVLILPGMIDSIPR
+VLLYGQGLGSGAVFFTPKLWLVLIISVAVVVIFTIFINKAELRIPLQRPFVQNDFSESYL
+PIRVLAAGSMPFMFTTTVFMIPSYIGSFVPEGEFNRFVQNYVAFDNPVGILIYCSIIVFL
+GYVFSFMNFQTERLTKNLKKSGDYIFNVVPGTATRHYLNQRLFHLSTVANIFFLIIVGTP
+LIVGLYLPEITNFAFVFANILILITIIDTTMD
+>A5IW80_STAA9/64-384 A5IW80.1
+NIFTLGLVPWLTSMIILMLISYRNMDKYMKQTSLEKHYKERILTLILSVIQSYFVIHEYV
+SKERVHQDNIYLTILILVTGTMLLVWLADKNSRYGIAGPMPIVMVSIIKSMMHQKMEYID
+ASHIVIALLIILVIITLFILLFIELVEVRIPYIDLMNVSATNMKSYLSWKVNPAGSITLM
+MSISAFVFLKSGIHFILSMFNKSISDDMPMLTFDSPVGISVYLVIQMLLGYFLSRFLINT
+KQKSKDFLKSGNYFSGVKPGKDTERYLNYQARRVCWFGSALVTVIIGIPLYFTLFVPHLS
+TEIYFSVQLIVLVYISINIAE
+>Q4L9N9_STAHJ/61-383 Q4L9N9.1
+NVFSLGLGPWLTSLVIIMLLNYRNLDQATKQTRSEKHYKERIITIVFAIFQSYFVISTYI
+HNNFIKDSNIILLMLILVAGTMLLVWLADQNITYGICGPMPIVLTSLIKSLFNNQHFFKL
+SVSVLLLILVIVTLVIALLILLFIELSEYRLNYKDIMNNSTNKTPTYLAWKLNPAGSISI
+MISLSVYVLLNNMINLIATLLGSNANFEFLSFANPIGIMFYIVLQIVLSYLLSRFLINTK
+KKADEFLKNGNYFDPIRPGRETERYLNSKARRVCWTGAILVALILAVPLYSTLLVPNLST
+EIYFSMQLIILVYISINIGETIR
+>Q5HKR3_STAEQ/61-380 Q5HKR3.1
+NIFSLGLGPWLSSMIILTLINHKSNDKVKTQTRRERHFKERALTLIISAAQGFYIIHSYI
+NKHAIKDSNMLILLLVLITGTLLMVWLADQNTTYGISGPMPIVLMSLVKSIFNTHFPKLN
+SSASLITMIIVLLVLALFILFFIELTEYRIEYNDIMNISAKDIPSYLSWKLNPAGSISIM
+VSLSLFMLTNNIVNFIGRFIVNHNFETHVFNFTNPVGITIYLLLQMILGYFLSRLLINTK
+RKSKEFLKNGNYFEGIQPGQQTEKFLGSKARRICWFGSIVVAIVLAIPMYSALLVPHLLK
+EVYFTTQMIVFVYIGINIAE
+>Q9RSK8_DEIRA/68-413 Q9RSK8.1
+SIFALGVLPYITASIVIQLLTTTIPSLEKLSKEGEEGRKKINQYTRYAAIALGAVQALFF
+SLYITSNPSFIAVGWDPGLFTVLVMVLTQVAGIAFTMWIGERITEVGIGNGISLIITAGI
+IAVYPREIAATAQLLRSEQTTLLSILAFIAVILVTIAGIVYIYQAERRVPVTYARARGGA
+AGQARGAGQATWLPIKVNQAGVIPVIFASAMLIIPNLIASATATRAPEVNAWINSNLTFG
+QPLYLALESLLIFGFTYLYNSVQFDPKRIAEQLREAGGFIPGVRPGGPTADFLGRISGRL
+SLWGAIFLVILTILPQLVQKATGITTFQFSGTGLLIIVGVALETLK
+>Q5SHQ8_THET8/71-413 Q5SHQ8.1
+SIFALGIMPYITAAIIMQILVTVVPALEKLSKEGEEGRRIINQYTRIGGIALGAFQGFFL
+ATAFLGAEGGRFLLPGWSPGPFFWFVVVVTQVAGIALLLWMAERITEYGIGNGTSLIIFA
+GIVVEWLPQILRTIGLIRTGEVNLVAFLFFLAFIVLAFAGMAAVQQAERRIPVQYARKVV
+GRRVYGGQATYIPIKLNAAGVIPIIFAAAILQIPIFLAAPFQDNPVLQGIANFFNPTRPS
+GLFIEVLLVILFTYVYTAVQFDPKRIAESLREYGGFIPGIRPGEPTVKFLEHIVSRLTLW
+GALFLGLVTLLPQIIQNLTGIHSIAFSGIGLLIVVGVALDTLR
+>SECY_CORGL/73-424 P38376.1
+SIFAIGIMPYITASIIVQLLTVVIPHFEELKKEGQSGQAKMMQYTRYLTVALALLQSSGI
+VALADREQLLGAGIRVLSADRNFFDLIVLVITMTAGAVLVMWMGELITEKGVGNGMSLLI
+FAGIATRLPTDGMNILGNSGGVVFAVVLASVLILVIGVVFVEQGQRRIPVQYAKRMVGRR
+QYGGSSTYLPLKVNQAGVIPVIFASSLIYMPVLITQIVNSGSLEVSDNWWQRNIIAHLQT
+PSSWQYIVLYFALTIFFSYFYVSVQYDPAEQAENMKKYGGFIPGIRPGRPTAEYLGFVMN
+RLLFVGSLYLAVIAVLPNIMLDLGVDAGSAGATPFGGTAILILVSVALTTVK
+>A8LB12_FRASN/74-414 A8LB12.1
+SVFALGIMPYITSSIIIQLLVVVIPRLEQLKKEGSSGEQKLTQYTRYLTVALGILQATGI
+VALARSGRLFPGCSAQIIPDTSLFRIVTIVITMTAGTAVIMWMGELITARGVGNGMSLLI
+FTSIAAALPSQGGRILQVAGGVVFGLVILLGLAIVVFVVFVEQSQRRIPVQYAKRLIGRR
+MYGGTSTYLPIKVNQAGIIPVIFASSLLQLPQLVGQVWSNQTFQDFEQRYLSRGDHPLYL
+VAYGALIIFFTYFYVAITFNPTEVADNMRKYGGFIPGIRPGRPTAEYLDHVLSRITLPGS
+LFLGVITVLPLALLNLTKDQPFPFAGTSVLIMVGVGLETVK
+>Q83NQ1_TROW8/73-424 Q83NQ1.1
+SVFALGVMPYITSSIIIQLLRVVVPRFEQLYKQGQEGQAKLIQYTRYLTIGLAVLQSTTL
+ITVARSGALFAASNSPACSSLLTDDSWYSTIIIVIVMTAGTGLIMWLGELITERGIGNGM
+SILIFTSIAAGFPGVLVGVYQTRGFGMFSTVVITSLVVMVGVVFVEQSQRRVPVQYAKRV
+VGRRILGGGSTYLPIKLNMAGVVPVIFASAILRVPSIIAQFSQPAPGQPPAAWVVWINEN
+FTTGNSPFYIALYFFMIVGFTYFYVAVTFNPTEIADNMKNYGGFISGIRPGVPTANYLSY
+IIKRITLPGSLYLGIVSLIPLIAFALFGLSADIPLGGTSVLIMVGVGLDTVK
+>Q8G3Z9_BIFLO/74-421 Q8G3Z9.1
+SIFALGVMPYITASIVVQLLRVVIPRFEALHKEGQSGEAKLTQYTRYLTIGLAVLQSTTI
+LVTARSGALFNYQCDQVIPDGSVFNLVVMVLIMTGGTGLIMWMAELVTDKGIGQGMSILI
+FMSICSGFLPQLWEIGYGTNGTDGDWLKFGIVVGVLVVILIFVDFVELCQRRVPVQYTRR
+MIGRKMYGGSSTYLPLKINMSGVIPPIFASSILAIPTLIAQFGKSDQSWVKWINANLANT
+TSVWYIALYALMIVFFCFFYTSITFNPDETADNMKQYGGFIPGIRAGNATSRYLTYVMNR
+LNTVGAVYLLFVALIPTVLIMALGLNAKLPFGGTTILIIAGVGLDTLR
+>A7B9M4_9ACTO/72-414 A7B9M4.1
+SIFALGIMPYITASIIIQLLRVVIPRFDDLHKEGQTGQAKLTQYTRYLTIFLGILQATTT
+ISLARSGQLFQSCNHDIIKDRSVMTFIMMIIVMMAGTGVIMWLGELITERGIGNGMSLLI
+FTSIAARLPEQLLSIGQAGKWGSVAAIVALLLLVAIAVVYVEQAQRRIPVQYAKRMIGRR
+QYGGTTTYIPLKINMSGVIPVIFASSILALPPMAAQFGSPNDKWVQWISAHFTQGSSFYL
+TIYALMTLFFTFFYTAITFNPDEVADNMKKYGGFIPGYRAGRPTAEYLRYVINRITSAGA
+LYLVIIALLPSLAIIPLQLSSSQMPFGGTTLLIIIGVGLQTVK
+>SECY_CHLTR/73-433 P28539.3
+TVIALGVVPYISASIIVQLLVVFMPTLQREMRESPDQGKRKLGRMTRLFTLVLACVQSLL
+FAKFALRMNLVVPGIVLPAMLSLKLFGVPWVFYLTTVVVMITGTLLLMWVGEQISDKGIG
+NGISLIITLGILASFPSVLGSIFNKLNLGSQDPSEFGIVSLLILCAVFVFVLMATVLIIE
+GMRKIPVQHARRIIGRREVVGGGSYLPLKVNYAGVIPVIFASSLLMFPATIGQFLSSESS
+WLKRIATMLSPGSVAYSIFYVLLIIFFTYFWTATQFRPEQIASEMKKNGAFIPGIRQGKP
+TQTYLEYTMNRVTLLGAVFLAVVAILPSILGRILRVDANVSYFLGGTAMLIVVGVILDTM
+K
+>Q1AU49_RUBXD/70-408 Q1AU49.1
+SVFALGIMPYITAAIVMQLMTVAIPRLQELAREGEVGQQKITQYTRVFTLALSFIQSVAM
+VLFLRSGQFGPVLAGAGALDLFLVVVTLTTGVMVTMWFGELITQRGLGNGISLIITASIL
+SQAPNAVRTLIEDGSVLTMVILGIIAVMIVAAIVFVNEGQRRIPITYAKRQVGRRMSQGG
+TTYLPLKVNMAGVIPIIFASSLLIFPVVITQFAAGGDQSSWLFRLAQIFAPPSAPYLILY
+ALLIVMFTYFYTAVQFNPIEHADNLKKSGGYIPGIRPGQPTALYLNSVLTRITLFGAVFL
+AVIAVLPYLITGALNLPNSIYLGGTSMLIVVGVSLDTVR
+>Q8RIH6_FUSNN/75-411 Q8RIH6.1
+SIFSLGIIPYINASIVVSLLVSIIPQLEEIQKEGESGRNRITQWTRYLTIALAIIQGTGV
+CLWLQSVGLIYNPGISFFVRTITTLTAGTVFLMWVGEQISIKGIGNGVSLIIFLNVISRA
+PSSVIQTIQTMQGNKFLIPLLVLVAFLGTVTIAGIVLFQLGQRKIPIHYVGKGFSSKGGI
+GEKSFIPLRLNTAGVMPVIFASVFMLIPGVIVNALPSTLSIKTTLSIIFGQNHPVYMILY
+ALVIMFFSFFYTALVFDPEKVAENLKQGGGTIPGIRPGEETVEYLEGVASRITWGGGIFL
+AIISILPYVIFTSMGLPVYFGGTGIIIVVGVALDTIQ
+>A6DRC9_9BACT/79-428 A6DRC9.1
+GVLGIMPYITASIIMQLMTPVFPNLEKLQKDGSHGRQKLNQYTRYMTIVICAVQSAMMAV
+AMHTPSKLLGVPGFEDLVINKGSAFVIQTTIIVTASAILIMWLGEQITDKGLGNGASIII
+TINVLSSMPQAFAAVYSKYQEGEWNLVQILVVVGILFIVTAATVALVQGMRKIPLKYARD
+ASSRNAMIEKTSYLPLKVNHAGVMPIIFASALMMFPPMIINKIGGDFARTVAPYFDFGST
+SYLIIQGVMILVFTFFWVATQFNPIQIADDLNRSGAFVPGHRPGEPTSTFLNDTMTRITV
+AGAIFLVILALLPYVLMNAMGSGSTDFIITQFFGGTSLLIMVGVVLQTMQ
+>C0ACZ0_9BACT/94-454 C0ACZ0.1
+AVCALGIMPYISASIIFQLMTAVVPSLARLQQEGDVGRQKLSQYTRYATVLICLIQGALL
+ILALENPTQLFGEGYDIARYGEIVLVDRTWFLISSVIFMTAGTMLLTWLGEQITQRGIGN
+GISLLITIGIISDLPGAMGTLWTLLRAPVGTQGISMISLTFMVILFFAVTMGIIMVVQGQ
+RKIPVQYAKRVVGNKVMGGQNSFLPLKVNYSGVMPVIFASAILLFPQQIFRYLGAAFNLP
+FLIEFSNNLMRGHWVYYVTMTLLILFFSYFWVSVMFKPIQIAEDLKKYGGYIPGVRPGEP
+TAKFLDFVMTRITLAGAIFLTIIAVFPDFLNAELNVPQRISSFFGGTGMLITVGVILDTM
+K
+>Q1Q157_9BACT/75-434 Q1Q157.1
+AIFGLGVMPYISASIIFQLLVGVVPYLERLQKEGEVGRKKINQYTRIATVGLCLFQAFVM
+TRTLYTVEFNGVPVIPVYLQGVSFQLMAAILLTTGTMILMWIGEQIEEHGIGSGISIVIM
+VGIIERLPWAFNQIVQNFTFSVAPAEHQIGIVKLLILLGMFFAIVGGVVYITQGQRRIPI
+QQAKHTRGRRVYGGQRHFLPLRVNQAGVMPIIFAQSLLIFPAAIMQGIQIRFEPGSVGYW
+ITSRLSGILQEGVLYVMLYILLITFFCYFWTAIQFNPREMSNNMKDYGSFIPGIRPGHRT
+AEYLESIMGKITLAGAAFLSLIAILPKLVAGGFELNRAIAGFYGGTGLLIIVGVALDMVQ
+>A6CGP8_9PLAN/77-435 A6CGP8.1
+TIFGLGIMPYISASIIFQLMGTVYPPLERLQKEGEAGRKKINEYTRYATVVICLVQSFFW
+IRTLAGGFGSGTSLILDGYQGLYFQIVATITMTTGTVFLMWIGEQIDAYGIGNGISLLIM
+AGILARMPQAGWSLIEPAFEKGIALGTDTGIDRLLILALVFVFVVVWVIAITQGQRRIPI
+QSAKHVRGRRVSGGQRQSLPLRVNQAGVMPIIFASSLLMFPYFLFHGLSQYFSTSAFWAM
+LDEAFQPMSRGFVYTMSYVVLIYFFCYFWTAITFNPKDMAENLKDYGSFIPGYRPGARTA
+AYLEQVMVRITYVGAAFLSLVAIIPTLVSTWLGVDFLVASFYGGTGLLIVVSVVLDLVN
+>B4S5A8_PROA2/73-417 B4S5A8.1
+SIFSLGIMPYISASIIVQLLGAVTPYVQKLQKEGEEGRQKINQYTRYGTVLIAALQAWGV
+SVSLASPSSFGTIVVPDPGFFFMMTTVLILTASTVFVMWLGEKITERGIGNGISLIIMIG
+ILARFPQSVIAEFQSVSLGSKNWIIEFIILALMVLIVAAVVVLTVGTRRIPVQHAKRVVG
+RKMYGGSTQYIPMRVNTAGVMPIIFAQSIMFLPNTFLSFFPESEVMQNVATIFSYDSWWY
+ALMFGTMIVFFTYFYTAIAFNPKEVADTMRRQGGFIPGVRPGKSTADFIDNILTRITLPG
+AISLAFIAVLPTFLTKFANVTPGFAQFFGGTSLLIIVGVGLDTLQ
+>Q2S3P5_SALRD/75-414 Q2S3P5.1
+GIFALGIMPYITASIIIQLMGAVVPYFQKLQREGEEGRRRITQLTRYGTIGITALQSIGY
+SINLLAGATGRAVVINSTLFTITTVVVLTSGTAFVMWLGERISEDGIGNGISLIITIGII
+AFLPQALYNEIGLIGDNFFILLVEIGVWVLVAGAVVLVSQGMRRIPVQYAKRVVGKKVQG
+GTTQYLPLRVNAAGVMPIIFAQSIMFIPSTIASFFPNNATMQRVGGWFSDISSMSYSAVF
+FVVVVFFTYFYTAITVNPQEMADTMKRQGGFIPGIRPGKQTSEFIDTVLTRITLPGSIFL
+GLVAIFPAFAMQAGVSQGFAMFYGGTSLLILVQVTLDTLQ
+>A1ZGT4_9SPHI/72-404 A1ZGT4.1
+SIFALGIMPYISASIVIQLMEVAVPYFQKLKKEGESGFKKKTQITRYLTIVITAAQAIGY
+IQATIPSNAIMVSQLSFTISTVIILTAGTVFTMWLGEKIDDRGIGQGISLLIMIGIISRL
+PQSLVEEVVARSTGSQVLILILEMVVLFFVVMSVVMLTEATRRIPIQYAKQVVGNRVYGG
+QRQYLPLKVNAAGVMPIIFAQALMFVPALITPYVGGASSAFSDITTWQYNLVFGLLIIIF
+TYFYTAISVNPKQIADDLKRNGGFIAGVKPGSDTSEYIDKIMSKITLPGSIWLAIVAILP
+AIAVKFGIQNSFAQFYGGTSLLIMVGVVLNTLQ
+>A6EHP4_9SPHI/71-408 A6EHP4.1
+SILALGVMPYISASIVVQLLGIAVPSFQKMQKEGESGRKKLNQITRYLTVAITAVQAVGY
+VKTQVPMEAIVIDHTLFFVMATFVLAAGTLFVMWLGEKITDKGIGNGISLIIMVGIIARL
+PIALYQEITSRIVSDGGLIALVLEIVALFAVVMFTIMIVQGVRKVPVQYAKRIVGNRQFG
+GVRQYIPLKVNAAGVMPIIFAQALMFIPATLTQFFPSLQNTWLVQFSDYTSLAYSLTFAF
+LIIAFTFFYTAITVNPTQMSDDMKKNGGFIPGIKPGFATSSFIDDVISKITFPGAVFLAI
+IAILPSVAVKFGIKSEFAHFYGGTSLLILVGVVLDTLQ
+>Q11QD2_CYTH3/72-411 Q11QD2.1
+SVFGLGIMPYISASIVLQLLTFAVPYFQRLQKDGESGRKTINQYTRILTIFITVAQSIGY
+LAATLDEGMIYEGMNTPFMNVVRIVTLISGTMFCMWIGERITEKGIGNGISMLIMIGIVS
+RLPFALMAEVSSKNLEGALPLLIEFAALFAVIMLVVLVQQATRRIPIQYTKQIAGGKQVI
+GQRQYLPLKLIAAGVMPIIFAQSVMFLPAIIGSSFPDSEFATTIGSTMSDFTSWQYNVAF
+ATMIILFTYFYTAITVNPNSIAEDLRRNGGFIPSVKPGLATSEYIDDVLTKITLPGSIFL
+ALLAILPAFASMTGIEKEFAYFYGGTSLLIMIGVVLDTLQ
+>Q1VTY0_9FLAO/73-421 Q1VTY0.1
+SVFALGIMPYISASIVVQLMTIAIPYLQKLQKEGDSGRKKITQITRWLTIAITLVQGPGY
+IINLYNILPSSAFLMDSTFTFVVSSVIILTTGCIFAMWLGEKITDKGIGNGISLLIMVGI
+IATLPQAFIQEFISRVTESNGGLILILIELVIWFVIILAAVMLVRAVRQIPVQYARKNAS
+GKFEKASVGGARQFIPLRLNASGVMPIIFAQAIMFIPAAVAGLSDSEMAQGITAAFQNMF
+GFWYSLVFGILIIVFTYFYTAITVPTNKMADDLKRSGGFIPGIRPGSETSEYLDRVMSQI
+TLPGSIFLALIAVFPAVIVSLLNVQQGWGLFFGGTSLLIMVGVAIDTIQ
+>Q1NYZ7_9FLAO/72-422 Q1NYZ7.1
+SILSLGIMPYISASILTQLMCYMFPSLYKIQQDGEIGIKKINNITKVLTILISLIQAPVY
+ITILISSNIKENPYNLILIHCKKIFIITSIICITTGTFFTMWLGEKINDKGIGNGNSLII
+ISGILSRFIYSIISEIFNRLKNNNKLLGIIILLFELFIWLLIIGISIIIINFVKKIHIQY
+VNKFYLKNYSSNEIYLRNEMKFLPLKVVYPGVMPIIFSQGILLIFITIFNKINNLQLSNN
+GIWYNILYSILIIIITFFYTFLSIPVNKISDDLKINGVYIPNRKPGKDTCFFLKKIVSQI
+YLTGSLLLVIIALLPSIFISLGGDKNFSLFFGGTTIIIIVGGLLDIKYTIN
+>A5KHP6_CAMJE/62-402 A5KHP6.1
+SIISLGIMPYITASIIMELLAATFPNIGKMKKERDSMQKYMQIIRYATIVITLVQSIGVA
+IGLQSLHGRGGAGVIMVEDLNMFIALCAISMLAGTMLLMWLGEQITQRGIGNGISLIIFA
+GIVSGIPRAISGTVGQINSGEMNFLTAFAIFALILITIGVIIYVELGERRIPISYSRKVV
+MQNQNKRIMNYIPIKLNLSGVIPPIFASAILMFPTTILQTSTNPYLQAINDFLNPNGYLF
+HVLTFLFVIFFAYFYASIVFNAKDIAENLKKQGGFIPGIRPGEGTSSYLNEVASRLTLSG
+SIYLGLVATLPWVLVKFMGVPFHFGGTSVLIVVQVALDTMR
+>A4EA78_9ACTN/52-389 A4EA78.1
+SVFSLGIMPYITSSIILQMLQAVVPSLHELAREGEVGQTKITQYSRYLTLALAILNSVGY
+LFLFKSFGISFNGAGAPEIIFDLMIVGTLTAGAMLIMWIGELITQRGIGNGMSLIIFANI
+MAGLPQAIFSSTEGNAGGIITMVIICAIILLVIPLIVFLERGQRRIPVSYAKRVVGRRMM
+GGQTTYLPIKVNTAGVVPIIFASALLYFPAQIAVFFPGIGWIQAVASALSTGWLNWVLNV
+VLIVFFAYFYTSMVFNPDDTADNLKKQGGFIPGVRPGRATAAYIKNALNKITLPSAVFLA
+LIAIVPSIIFSFTGNHLIQAFGGTSILIMVGVVLDTVD
+>Q2GEC0_NEOSM/73-411 Q2GEC0.1
+TLFALNVMPYIVSSIVVQIFFSMLKSEGKVSAEFMNESRLSFYSKLVALFLAFFQGFIIV
+AGLERTKAFVGGNEEFYSLLKYTSVLTLVCGTFSLIWLGQQINSRGIGNGMSLIIFAGIV
+AEMPAIFGNLFSGIGSPGSGILGIFVSLSLLVFVVFLVVLVERASKNIPVHYPRRRTWGS
+THGDAASNIPVKINVSGVIPPIFANALILFPLTLANFSAESHLGEFIIRYFSVGQPLYFL
+LHSCLLVFFCFFYSDFVFNTTEISDSLKKGEAIVAGRRPGISTKRHLDYVLRRITVVGAA
+YLVCICVVPEIFRNYFGFDAIISGTSLLIIVNVITDLLS
+>Q3YRM8_EHRCJ/72-412 Q3YRM8.1
+TVFALNVMPYIVSSIIIQLLSVTVPRLNELRQNGELGRMKINNYIRYMTIFFCIVQGSVI
+LLGLEKMNSENSIVVIDPGLLFRIVGISSLLGGTMFLLWLGERINKNGIGNGVSMIIFTG
+IVAELPGSFSSMFLLGKNGNVPIFVILLMVLIFFALLLLIIFVEKSYRKILVQYPKRQVK
+NKLYGSSSTYIPLKINISGVIPPIFANALLLSPITVANFHQGSPWSDFILMYFSSGKLLY
+IVCYALLIIFFAFFYTAFVFDAKETSEILKKNGGFVPGKRPGNATCEYFNYVIKRLTVLG
+SIYLTVICIIPELIRYNYSVSFTLGGTSFLIIVNVIIDTFS
+>Q5GSW3_WOLTR/77-416 Q5GSW3.1
+TILVLNVMPYIVASIVMQLLSSAVKGINEVKNDGELGRRRMNSYIRYMTIVFCIFQSVTI
+LIGLERMNREGTLVVIEPGVMFRTVGIFSLLGGTMFLIWLGEQISASGIGNGISLIIFTG
+IISELHNAFSFLLTLNKNGSMSLLIILFVFVLFFLLLLLIIFVESSYRKVTVQYPKKQFK
+RLHSDDFTYIPLKINLSGVIPTIFANAILLTPVSIANFYKGHAFSDFILNYFMANKVVYI
+AAYLALIVFFNFFYTNFIFNPEENADFLKKNGGFIPGRRPGKHTSDYLQDIVFKLTFIGS
+AYLVVICTVPEVMRYYYDMPFIFGGTSLLIIVNVTTDTIM
+>Q0ANS0_MARMM/83-421 Q0ANS0.1
+AIFVLNVMPYISASIIMQLMSATIPSLEKLKKEGGEQGRQQINQYTRYLTVLLATGQAFA
+IAIGMNTPNSEGVALALNPGPFFLASTVITLVGATMLLLWLGEQITARGVGNGVSLIIFA
+GIISAVPGVIGGALSQASSTGDGTVLVVGGVLILVGLLLVVFVERSQRRLLVQYPKRQQG
+NRMVGGDTSFLPLKLNTAGVIPPIFASSLLLLPATAASFQAQSGPGWLQSAVAILGPGSP
+WFMMAYAAMIIFFCFFYTSVVSNPDDMAENLRKYGGFLPGIRPGKRTAEYIDFVMSRLTF
+IGALYLVLICMVPMMMNPNTALGGTSLLIVVSVTMDTVS
+>A7IPQ0_XANP2/80-418 A7IPQ0.1
+AIFALNIMPYISASIIIQLLTSVSPTLEALKKEGEAGRKQLNQYTRYLTVVLAVFQAYGI
+AVGLEGSGSVVADPGWFFRITTVITLTGGTMFLMWLGEQITSRGIGNGTSLIIFGGIVAE
+LPGAFVRTLQLGREGAISTPLILAALVLAVVVIAFIVFMERAQRRLLIQYPKRQVGNRIY
+EGQSSHLPLKLNTSGVIPPIFASSLLLIPTTIASFLQGSGPEWLQTITTHIGHGRPAYMV
+LYVLLIVFFCFFYTAIVFNPVETADNLKKHGGFIPGIRPGERTAEYIDYVLTRITVVGAA
+YIAAVCLFPELLISYASLPFYFGGTSLLIVVSVTMDTVS
+>SECY_RICCN/70-411 Q92GY6.1
+SIFALAIMPYITASIIIQLMSVAYKPLENLKKEGEVGKRKVNQLSRYLTVLLASFQAYGV
+AISLESIVTNTGPVVILAGFFFRITTVITLVVGTMLLMWLGEQITQRGIGNGTSLIIFIG
+IISGVPSAIISMFELSRKGALSPLIAIAVCIGVVVLIAIIIFFERAQRKLLVQYPKRQVG
+NKIYGGEATHMPLKLNTSGVIPPIFASSILLFPATLANFSNSNSETMGMLTYYLGHGKPV
+YILLYVALIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSDYFDYILTRLTVI
+GGIYLSVICVIPELLMNKYVISLSLGGTSFLIVVNVVLDTMT
+>Q2G8W0_NOVAD/80-430 Q2G8W0.1
+SLIALGVMPYITASIVVQLAASLHPALAAMKKEGESGRKKLNQYTRYGAVLLTAIQGWVL
+ASGLEAYGASSGLQAVVNPGLLFRVGAVISLIGGTMFLLWLGEQITSRGIGNGVSLIIMA
+GIVAQMPKFFGNLFEGGRTGSISPFLIFGIVIMLIALVIGICFLERATRRLLIQYPKRAT
+QRGMMAADRSHLPLKINTAGVIPPIFASSLLLLPLTITQFAGNSISPDTKMGQAIVTLNQ
+YLGHGKPLYMLFYALGIIFFSFFYTAVVFNPEETAENLKKNGGFIPGIRPGKNTANYLDY
+VLTRITVLGAAYITVVCVVPEFIMAETGMGTLFFGGTSLLIVVNVTVDTIT
+>A6E0Q6_9RHOB/73-411 A6E0Q6.1
+GIFALGIMPYISASIIVQLMTAMVPALEQLKKEGEQGRKKINQYTRYGTVALATLQSYGL
+AVSLQSGDMVSNPGMFFIASCMITLIGGTMFLMWLGEQITARGVGNGISLIIFVGIIAEV
+PAALAQFFASGRSGAVSPAVIVGVMLMVVAVIAFVVFMERSLRKIHIQYPRRQVGMKIYD
+GGSSHLPVKVNPAGVIPAIFASSLLLLPATITTFSGNTTNPVLSTVMAYFGPGQPLYLLF
+FTIMIVFFAYFYTFNVAFKTDDVAENLKNQNGFIPGIRPGKRTAEYLDFVVNRVLVIGSA
+YLAAVCLLPEILRNQFAIPFYFGGTSVLIVVSVTMDTIQ
+>Q1UZE8_9RICK/67-404 Q1UZE8.1
+AIFALGIMPYISSSIIVQLLTGVSDYFKNLKAQGETGRAKITQITRYGTVILATIQGYGL
+SIGLQSSADLVINPGLFFTITAVSTIVAGTMFLMWLGEQITQRGIGNGISLIIFAGIVAE
+IPRALVTTFELGRTGAVSTIMIIGIFVLLVATIMFIVFMERALRKILINYPKRQMGNKMY
+GGESSHLPLKINQAGVIPAIFASALLLLPVTFSNFSFSDNDTFLNLSSYFTQGQPLYMLL
+YASGIIFFTFFYTSITFNPTETADNLRKYGGFVPGIRPGENTALYIEKIVTKLTTIGALY
+LTIVCLMPEFLIANYPIPFYLGGTSILIVVVVAIDTVT
+>Q3R245_XYLFA/76-424 Q3R245.1
+SIFALNVMPYISASIVVQLATHIFPSLKAMQKEGESGRRKITQYSRIGAVILAVIQGGSI
+ALALQNQTAPGGAAVVYAPGAAFVMTAIVALTAGTVFLMWVGEQVTERGIGNGVSMIIFA
+GIVAGLPGSVLQTIDAFRSDALSLISLLIIVFIVLSFTFFVVFVERGLRRIAVNYARRVE
+GRNSYMNKSSFLPLKLNMAGVIPPIFASSILAFPVTLSIWSGQASSNTLFGAWLQRVSSA
+LGPGEPLHMILFAVLIIGFAFFYTALVFSSQETADILKKSGALIPGIRPGKATSDYVDGV
+LTRLTAVGSLYLVIVCLLPEFMQSRIGASFHFGGTSLLIAVVVVMDFIS
+>A4NK90_HAEIN/76-416 A4NK90.1
+SILALGIMPYISASIVIQLLATVSPALAELKKEGAAGQRKISKYTRYATVVFATIQAVAI
+STGLPNMLSGLVPNVGFSFYFTSVVSLVTGTMFLMWLGEQITERGIGNGISILVFGGIVA
+GLPSAILQTIEQARQGQMHPLVLLLIAAIVFAVTYFVVFVERGQRRIRVEYAKRQQGRQI
+LGGHSTHLPLKVNMANVMPAIFASSIILFPATLTQWFGQNDKFEWLNNLSMLLNPGQPLY
+LLVYAVAIIFFSFFYTAMQYNPRDTADNLKKSGAFIPGIRPGEQTSRYIDKVMTRLTLIG
+GLYVTFVCLVPYIMTSAWDVKFYFGGTSLLIVVVVIMDFIV
+>Q057C4_BUCCC/64-407 Q057C4.1
+SIFALGVMPYISSSIIVQLLTLISSYLRNLKKEGDIGKKTINQYTKYITFFLSIIQSIGV
+VISLPFLPGMKNIIVFADCYFYIIAVVSLVTGTIFLMWLGELITTKGVGNGVSLIIFSGI
+ISGLPASVIRTYKLIKIKNFSFLYVFFLLLIIFFVIFIVVFIEKSQRKIIVCYARRQQGR
+RMYTAHHSYLPLKLNMAGVIPVIFSSSLIVFPSILLTYLRYVFNDYKKIIYFFDFLKFKH
+SIYLIVNIILIIFFCFFYTNIIFNVQDTANNLKKSGAFLPGIRPGLKTAEYIKNIVFKLT
+TIGSIYTVFICLIPDIVRYFFKVPFNFGGTSLLIVVVVLIEFIT
+>Q8D1Z2_WIGBR/82-424 Q8D1Z2.1
+SIFSLGIMPHISASIIIQLLTIIHPKLSEIKKDGEFGRRKINKYTRYGTLFLAIIQSISI
+SISLPNMPGMQELIINKGIEFYITTITSLVTGTIFLMWLGEQITSRGIGNGISILIFSGI
+IAGLPIEVIKSIEQARQGNLNIITVLISIILVFVITYFVVFIERGQRRVIVNYAMRQKGR
+KIYAAQITHLPLKVNMSGVIPAIFASSLILFPATIASWFGEGIGVKWMSKIPYYLEPGTF
+SYSILYASAIMFFCFFYTSLVFNSKDTADNLKKSGAFISGIRPGIKTSQYINKIMMNLTL
+IGATYIALICLMPDFFRVFIKSPFHFGGTSLLIVVVVTIDFMT
+>Q6F7T2_ACIAD/83-426 Q6F7T2.1
+SILALGIMPYISASIIVQLMSTVVPSLEALKKEGEQGKRKINQYTRYGTLLLALVQGVGM
+CAGLISQGITLTSGLAFYIPAVTSLVAGTMFLMWLGEQITERGIGNGISMIIFAGIVAGL
+PNQVIQAFTSVQNGQGSLIGIVVFALLSLAVLAAIVFIEKAQRRIPVNYAQKQQGRRIFT
+AQQTHLPLKINMAGVIPAIFASSLLLFPASLGQWLGSADPNAGIVKRSLQDLALVLSPGQ
+PLYLMLFGTLIIFFCYFYTALVFSPKEVSENLKRSGAYVPGIRPGEQTARYLDHILNRLT
+FIGAIYITVVCLMPMILQNSFGIPFHLGGTSLLIVVVVVMDFMA
+>Q6Q8W8_9GAMM/67-407 Q6Q8W8.1
+SIFALNVVPYISSAIIMQLFSNSIPYLQELKKDGQAGRNKITQYTRYGTAILAFIQASAL
+AVTLSASGLAYVPGPTFFVSAVFSVVAGTMFLMWLGEQVSDRGIGNGISIIIATSILTGI
+PGAIGQALEQSRQGDLSILLLIGIGLLSMAVIAVVVFIERGQRRITVNYAQRQQGRRMMQ
+AQQSHLPFKVNMAGVIPAIFASTFLLFPASLSTWFGENESLSFLQSFSLALNPGQPLYIL
+VFAGLIISFCFIWLALTFNTKDVSDNLKRSGAYIAGIRPGEQTANYIDNVLARLTVFGAI
+YLTLICLLPLALINFAGISPTISIGGTSVLIIVVVLMDFMS
+>A9BRX1_DELAS/74-413 A9BRX1.1
+TVFALGIMPYISASIIMQLMTYVVPTFEQLKKEGESGRRKITQYTRYGTLGLAIFQSLGI
+AVALESSAGLVLSPGFGFRLTAVVSLTAGTMFLMWLGEQITERGLGNGISILIFGGIAAG
+LPSSIGGLLELVRTGAMSILAAIFIVLVVAAVTYFVVFVERGQRKILVNYARRQVGNKVY
+GGQSSHLPLKLNMAGVIPPIFASSIILLPATVVNWFSAGESMRWLKDIASTLTPGQPIYV
+MLYATAIIFFCFFYTALVFNSRETADNLKKSGAFIPGIRPGDQTARYIDKILVRLTLAGA
+VYITFVCLLPEFLILKYNVPFYFGGTSLLIIVVVTMDFMA
+>Q7DDS8_NEIMB/73-410 Q7DDS8.1
+SIFAIGIMPYISASIIVQLASEILPSLKALKKEGEAGRKVITKYTRYGTVLLAILQSLGV
+ASFVFQQGIVVTSSFEFHVSTVVSLVTGTMFLMWLGEQITERGIGNGISLIITAGIASGI
+PSGIAKLVTLTNQGSMSMLTALFIVFGALLLIYLVVYFESAQRKIPIHYAKRQFNGRAGS
+QNTHMPFKLNMAGVIPPIFASSIILFPSTLLGWFGSADTNSVLHKIAGLLQHGQLLYMAL
+FAATVIFFCYFYTALVFSPKEMAENLKKSGAFVPGIRPGEQTSRYLEKVVLRLTLFGALY
+ITTICLIPEFLTTVLNVPFYLGGTSLLILVVVTMDFST
+>Q5NHU8_FRATT/74-416 Q5NHU8.1
+SIFALGVMPYISASIIFQMLSAVYPKFIELKKEGESGQKKITQYTRYLTLALAIVQSFGI
+VAFVLHQDGLVTTNNMALFYLTTIVSVTTGSMFLMWLGEQITERGVGNGISLLIFSGIVA
+NLPFEISNTLSQANQHVISYLSVWVLLILLLLVIAFVVFMESAQRKITVNYAKRQQGRKM
+FAAQTSHLPLKLNMAGVIPAIFASSILMVPGVLLGWLSNYNSLSWLADVAEMLQPGSIVY
+TVVFAATIIFFCFFYTSLVLNPKETADNLKKSGAYISGVRPGEQTAKYIDAVMTRLTLVG
+SLYITAICLLPIFVVKFFAQGLSFTFGGTSLLIVVVVMMDFMA
+>Q7WZR8_9GAMM/64-388 Q7WZR8.1
+SIFSIGLMPYISASIIMQVITGMFLDVEVSKHKLTSYLRYLTFMLSVIHSLVVSILFLEK
+SVVYYKKSVVYLTIILTFVTGAIFLMWLGEQITDKGIGNGISLIILSGLVSVIPNALGRT
+LFLTIKDSSWMYIQIFKVVSLVLITIILVVVIESGQIRIKVSYPRRLIGKKLYATQSSYL
+PLKLNMAGVIPAIFASSSLIITASVGQWINRSILPQLSPGQPLYIMFFVLSVIFYSFFYT
+AIVLNAKEVSINFKKSGAFIHGMRPGKQTAGFISKVSSRLNWFGAIYIVFFSLIPQLIMV
+YCKIPFCGGGISILIMVVVVLDFLS
+>A5EX98_DICNV/69-412 A5EX98.1
+SLLALGVAPYISASIVMQLLTHMLPALKDLRQEGSAGQKKITQYTRYFTLFLAIMQGFAI
+SRTVMAAGMTISAGSGFLLTATIGLTAGALFMMWLGEQITERGIGNGISMLIFGGIAVNM
+PSGILGLFNQAKIGEIGYGRFFLLLGIIVSLFALIVYVERAQRRIKIHYAKRQQFGTSAM
+GERFYLPLKINMAGVIPAIFASAIITLLVSGLTLASSLPGAAGRYLSDLAAGFHQGAWLY
+IATFVLLIILFSFFYTSIMFENRELADSLKKSSAFIQGFRPGRQTADYIDTVQERLTFVG
+AFYVAFVCVLPSLVNMGSASGQVLFLFGGTSLLIAVVVAMDLMS
+>Q6MJ32_BDEBA/70-415 Q6MJ32.1
+SIFALGIMPYISSSIIFQLLTSAIPYLEALKKEGEQGRRKINQYTRYATVALAIIQGYGI
+STWLMNSTSPDGHPLVIAPTVAFLPFQIMTIITLTAGTCFIMWLGEQITERGIGNGTSLI
+IFTGIAAAIPGGAQQLWELVRTGEMRFALVLLLVAFMVAIIAAVIYMEVAQRRITVQYSQ
+RQGGGGMQSMQTPTSHLPIKLNISGVIPPIFASSLLMFPATMAQFVNTPWLKALQDSLNP
+SGAIFNIMFVALIVFFSFFYTEIVFNPNDVAENLKKYGGFVPGVRAGKSTADYIQRVLER
+VNVVGCIYLCTICILPGIMVSQFNVPFQFGGTSLLILVGVALDTAQ
+>B5EFS0_GEOBB/71-411 B5EFS0.1
+TVFALGIMPYISSSIIFQLLTVVLPAVEKLSKEGDAGRKKIIQYTRYGTIVLAVVQAFGI
+SIGLEAMRGPAGELVVPNPGWGFRLMTVITLTAGTAFIMWLGEQMSEKGIGNGISLIIFA
+GIVARIPTAIGNSFRLIKTGELSLFVLLLIAAVMFAVIAAVVFMERGQRRIPIHYAKRVV
+GLKTVGAQSSHLPLKVNMAGVIPPIFASSIIMFPATVGNFIDVPWVQAASKQLAPGKLLY
+EVLFVAFIVFFCYFYTAVTFNPVDVADNVKKQGGYVPGIRPGKETSDFLDAVLTKLTFAG
+AIYISAVCVLPSILIGKFNLPFYFGGTSLLIAVGVGMDTLS
+>A3EVQ1_9BACT/75-412 A3EVQ1.1
+TIFALGIMPYISASIILQLLTVVHPTLQAMAKEGERGRKIITRYTRYLTVLIALVQSFGI
+ALGLEGMNNGQFVPHPGWSFRFIVVITLTAATTFVMWIGEQITERGVGNGISLIIFSGII
+ARLPAAIINTYKLYNQGEISGFLILALVVMVFLIVSSIVFIETARRKIPIQYAKRLVGNK
+MMGGQSTHIPFKINTAGVIPPIFASSLISFPAIIAGFVSVPWIQSFGKSLSPGSFSYTGL
+YVLLIVFFCFFYTAVVLNPTDIAENMQKYGGYIPGVRPGQKTVEYLYRVMNRITFVGALY
+LSIVCVIPELLIYQLHVPFYFGGTSLLIVIGVSLDTAQ
+>Q1MPP6_LAWIP/71-412 Q1MPP6.1
+SVFALGIMPYISASIIMQLLQVIIPDFKRMAKEEGAAGRYKITQYTRYGTVIITLIQGIG
+IAIGLESMYSPTNIPIVLEPGWVFRIVTVLTLTAGTVLIMWLGEQISEKGIGNGISLIIF
+SGIVVGIPGAIVKTYQLIILGDMNILIALVLMLFMFAVLTGVVFMERAQRRIPIQYAKRQ
+LGRKVYGGQSTHLPLRVNTAGVIPPIFASSLLLFPATMASFDISDWLKDIAVWFSPSTIL
+YNCIFLVLIFFFCYFYTAIIFDSKDISENLKKAGGFIPGIRPGEKTCEYLDGVLSRLTLW
+GGVYISIISILPMMLISQFNVPFYFGGTSILILVGVAMDFMS
+>SECY_AQUAE/71-412 O66491.1
+TVFALGVMPYISASIMMQLLTVAIPSLQRLAKEEGDYGRYKINEYTKYLTLFVATVQSLG
+IAFWIRGQVSPKGIPVVENPGISFILITVLTLVAGTMFLVWIADRITEKGIGNGASLIIF
+AGIVANFPNAVIQFYEKVKTGDIGPLTLLLIIALIIAIIVGIVYVQEAERRIPIQYPGRQ
+VGRQLYAGRKTYLPIKINPAGVIPIIFAQALLLIPSTLLNFVQNPFIKVIADMFQPGAIF
+YNFLYVTFIVFFTYFYTAVLINPVELAENLHKAGAFIPGVRPGQDTVKYLERIINRLIFF
+GALFLSVIALIPILISVWFNIPFYFGGTTALIVVGVALDTFR
+>Q01WB2_SOLUE/74-438 Q01WB2.1
+TVFALGIMPYITASIILQLLTVVVPTLEKLQKEGELGRRKITQWTRYLTIILSILQSFGI
+SQGLMGMQQGIVINPGIGFVFLTILSLTTGTAFIMWLGEQISERGVGNGMSLIIFTGIVV
+GLPNAIANIYQHVFTIHDWGAITLIVLMALMVAVVAFIVLVERGERRIPVQYAKRVVGRR
+VMGGQSTHMPLKVNAGGVIPVIFASSILAFPQTLAQFGWVKNLPWLSKTLATIQHGEPMY
+YVLFVAGIIFFCFFYVSIIFNPNEAADNMRKYGGFIPGIRPGRNTADYMNNILTKITVVG
+GIYLAILCLIPDIMISGIKLHHLWLVGDWIDRVAPRFILEGLGVNFYFGGTSLLIVVGVA
+MDTIN
+>Q08ZH8_STIAU/26-370 Q08ZH8.1
+SIFGLGIMPYVSASIIMQLLAVVVPSLERLQKEGASGRQKINQYTRYGSIVLSVVQGIGI
+SRWLASLGRSDAGQSGFNQIVVPDDSAWFTFMTVISLTAGTAFIMWLGERITERGIGNGI
+SLIIFAGIVAGLLPNGKTLLDMTAQGAIEAAALVGLAVFMLFIIAVVVYVERGMRRIPVQ
+YAKRMAGRRMFAGQATYFPMKVNTSGVIPPIFAGALLSFPATLGTWFPFLQTFRQGLEGN
+PWLYNGLFVLLVIFFAYFYTALTFRPDDVADNIKKQGGYIPGIRPGRQTADFIERVLNRI
+TFGGAIYLATICVIPTILTQWLQVPFAFGGTALLIVVGVALDTVQ
+>A6GCG0_9DELT/70-411 A6GCG0.1
+SVFALGIMPYISASIIMQLMTVVIPKLEQLQKEGETGRRKINQYSRYGTVGLALVQGYFM
+ASWLEGQNTPGQTLVLETGLPFKLMTMLSLTAGTCFLMWLGEQITERGIGNGISLIIFAG
+IIADMPTASYQLAQKAIDDPENFGPLPLAMLLVVVLVVIAFVVIMERGQRRIPVIYAKRV
+VGKRMFGGSQNYLPLRINNAGVIPPIFASSIIMFPAQIAGMTGNPYLQRFAAAFSYGNWL
+YLTVYVALCIFFCYFYTQIQFNPVDLADNLKKQNASIPGVRPGKRTAEHIEAILGRLTFA
+GSWYISAVCVLPVFLQTEFNVPFYYGGTSLLIVVGVALDTAQ
+>Q04PV8_LEPBJ/72-436 Q04PV8.1
+SIFALGIMPYISSSIVMQLFMVLVPSLQKLQKEGEEGRKKIGQYTKYGTVILCAIQSLAV
+IQLAKGWSTGTELEPARYPGLINSSVVPYFYLIGILSITTGTVLLIWLGEQITERGIGNG
+ISLLIFAGIIGRLPESMVQLFSTDTMDALNVLILLILLILLISLTVLLTQGVRKVPLQYG
+KQMVGRKMVQAKSQSIPFKVNGANVMPIIFASSLILFPQTIIQWLSSSSEQWAGWAIIMD
+FFNPFSQIWYHALFYYIIYTSLIIFFAYFYTAIQFNPAELAENLKKYGGFIPGIRPGSHT
+KEYIEKVLNRITLPGAMFLAGLALAPYIIIKFLDLSSNSGGGSLVYTFGGTSLLIMVGVA
+LETLK
+>SECY_BORBU/72-409 O51451.1
+SIFMLSIGPYISASIIVQLLVYSFPSLKKMQEGDGGRQKTKKYTKYLTIVAAVVQGYATS
+LYAKGIPGAVTIPFYRYIFVAILTVTTGTFILLWFGEQINQRGVGNGTSLIIFSGIVVRL
+QAALFNLFQSMQDPSQNVNPVFVILIISIFILVVILIIYEYKAQMRIAIHYARANSNNTV
+SSYLPIKLNPSGVLPVIFASVLITLPLQILSGFAETSSIARQILSYLRPNGFYYTFLNVI
+LIIGFTYFYSKIQLSPKDISNNIRKNGGTIPGIKSDEMEKYLDEIMNKTLFSGSIFLSII
+AIIPFLVQNIFRFPHDVSRIMGGSSLLIMVGVALDTLI
+>Q73PL2_TREDE/73-413 Q73PL2.1
+SVFMLGVMPYISTQILMQLAMIIFPRLKKIAEEDGGRKKIQVWTRIVTVFVALLQSSAVG
+TWARAIPGAVVISSPVLHLFITMVTVTTGTMITVWMGEQITARGIGNGISMLIFAGIVAR
+LPQAVWELIKLVSNNELNLVFVIIAFAMFVGIIALVVYEQQGQRKIPVHYAKRVIGRKMY
+GGQNTYIPFKINPSGVIPIIFASSFLTFPLMLSQMWGSNVSWLASVARFLRSDGWGYNVL
+YVVLIIFFAYFYTQVALNPTEIAKQIRENGGSIPGIRTDKTEEYLQKILNRLILPGSLYL
+AAIAVLPTVIQWAFSFPRNISMLMGGTSLLILVGVDLDTMS
+>Q67JW3_SYMTH/69-405 Q67JW3.1
+AIVAMGVTPYINSSIIMQLLTVVIPRLEELQKEGEEGRKKIQQYTRYGAVVLGLVQAFGI
+GYALRSYGAFYSNSWTTLFVIMVSLTAGTALVMWIGEEITEKGIGNGISLIIFANIVSRL
+PYSIYNEILLLRAGQRNIFQPLLVAVVALLMVVFVVIINEAVRKIPVEYAKRVVGRRVVG
+GQRTHLPIRINQAGVIPLIFASSLMYFPITIAGFFPNSDFAVFVGRYLDTRSWWFMLINA
+LLIVFFTYFYTAITFNPENVADNIKKNGGFIPGYRPGRPTAEYLERVSSRLTLVGGLFLA
+AVTILPITIMSLAGVQNAYIGGSSLLIVVSVALETTK
+>A7FQ38_CLOB1/69-409 A7FQ38.1
+SIFAMGVVPYINSSIIMQLLTIALPSLESLSKEGEEGRKKIQQYTRYGAVILAVIQAFST
+YAIIARAGALRDGSKLNLFIIIITVTTASTFLMWFGDKITEKGIGNGISLIIFVNIVSRF
+PSTIYSIVGLQKAETVNFVEVIVFIVIALALFLLVVIMNLGERRIPVQYAGRAVGNKIYK
+GQSTHIPINVNSSAVIGIIFAISVMQFPITIGQFWPESAFYKFITLNQYSPFRDKSIAYI
+VLYFLLTVFFTWFYTVVTFKPDEMAENMHKSSGFIPGIRPGEPTAEYIERVITKSSIIGG
+TFAAIIAVFPIIMAAYSKFQGISFGGTSMLIMVGFALDTIR
+>A6LPT1_CLOB8/69-416 A6LPT1.1
+SILALGVMPYINASIIIQLLTVAIPQLEQLSKEGDTGRKKIQNATRYVSLGIAFILAYGI
+FATISSSGATVGLTAIQKTIVVFALVVGTTFCMWLGDQLTVKGIGNGTSILIFVNIISRV
+PATIASMMTLQQAGSASIVEIVLFGVFTVFLLATILYFSLSERRIPVQYAGKFASGNSNM
+VKSQSTHIPLSIIGSAVLAIIFSMSVMDFPKTIATLFGGVGESQKEWAKWVLNNPTSIFN
+NKSWMYMVLYAVLTIFFNWFYTQITFKPDEMSENLHKSAGFVPGVRPGEETTTYFERVLN
+RLSFIGGILAAVLAVTPVMIQNYTQFQNIAFSGTGLLIVINVALDFTR
+>Q0SQG4_CLOPS/69-409 Q0SQG4.1
+SIFALGVVPYINASIIMQLLTVAIPKLEQLSKEGDDGRKKIQKITRYASIVIGAITAYGS
+YVIIHNVGALKSNSPVSMFLILLTLVVGSTFLMWLGDQITVKGVGNGTSLIIFANILSSL
+PMTGYQIYNLSKIGKINVVEIALFIFFTLALLAGVIYLSLAERRITVQYAGKAVGNKMMK
+GQSTHIPLSIIGTTVIAIIFAMSVMSFPTTIAQFFPEAGWSQWITGSSYSPFNAKTWMYP
+VLYALLTIFFTWFYTQITFKPDEMAENMHKSSGFIPGIRPGKPTEIYLEKVLNRISMFGG
+CFAAIIAVVPILVANYTPFQGIQFGGTSLLILVSVSLEIMR
+>A9KJH4_CLOPH/71-425 A9KJH4.1
+SLFALGIGPYITSSIIMQLLTIAIPKLEEMQKDGESGRKKIAEISRYVTIGLSIIESVAM
+VIGFSGSGALEGGLTFTNIVVITASFTAGSAILMWLGERITEKGVGNGISVILLINIVAN
+MPRDIYGLIEKFVLGESVVKGVTAAIIIVAVILLSVVLIILLNAAQRKIAVQYAKKVQGR
+KMVGGQSSHIPLKVNTAGVIPVIFAVSIMQFPIIIASFFGVQPARAYFWPKVLHMLNSQS
+WFNIKNGEFKYTVGVLIYMALIVFFAYFYTSITFNPMEVANNMKKQGGFIPGIRPGKPTT
+EYLTKVLNYIIFIGAIGLMIVAIIPIFFSGMFDAHVSFSGTSLIIVVSVVLETMK
+>A7VH89_9CLOT/71-420 A7VH89.1
+SIFALNVTPYITASIIIQLLTIAIPALEEMQKDGEDGRKKITAITRFLTIGLAILESAGL
+AINFGRKGFMDSYNFWTVLTMIVILTGGSAFVMWLGERVTDRGVGNGISIILLINIVSTM
+PNDFKNIYTQFIKDKDPVRMCLIALLVVAIVVCVTILVCMLQGAERKIPVQYAKKVQGRK
+QMGGQSSNIPLKVNTAGVIPVIFASSLMAIPSIITSLFGKSPSGVGAKILQGMSQSYWFN
+ANYPWGFLGLAVYILLVFFFAYFYTAITFNPMEIANNMKKSGGFVPGIRPGKPTQDYLNK
+ILNYIIFIGAVGLLIVAMIPMFFNGFFSVNVSFGGTSIIIVVGVVIETMK
+>A6BIS2_9FIRM/71-421 A6BIS2.1
+SVFALSITPYITSSIIVQLLTIAIPQLEEMQRDGETGRKKIVAITRYLTVGLALIESGAM
+AVGFGRQGLLVKYNFVNAAIVVLTLTAGSAFLMWIGERITEKGVGNGISIVLVINIISRI
+PSDMKTLFDQFVKGKAIASACLAVCVIIAIILALVVFTVILQDGERRIAVQYSQKIVGRR
+SYGGQSTNIPLKVNTAGVIPIIFSSSLMQFPIVIASFLGKDNGSGIGSEILRGLNQSNWC
+NPEQIKYSWGLVLYIVLTVFFAYFYTSITFNPLEIANNMKKSGGFIPGIRPGRPTVEYLT
+KILNYIIFVGACGLILVQIVPILFNGWLGAKVSFGGTSLIIIVSVILETLK
+>A7VR33_9CLOT/71-423 A7VR33.1
+TLFAMSVTPYINSSIIMQLLTVAIPPLERMAKEGEEGRKKIGAITRYVAVVLGLVQGLAY
+YLYLRGSSYEGTPIVTYTEGAAGVFTAIVIVLVFTAGTAMMMWLGEQINQKGIGNGISIL
+LFAGIVARLPDTVNILVQALQAAWQAPDSFGQYYFFVPLFVIIFLAIIWVIVFMNDAERR
+IPVQYAKRVVGRKMYGGQSTHLPIKVNMSGVMPIIFASSILTIPSTIQLFVTPTGFWKTV
+LDALSTTGWVYALIYFLLILMFAYFYVAIQYNPIEMANNLRQNNGTIPGIRPGKPTSDYI
+QKILSKITLIGALFLAVIALLPIAFSAFTGMHNLMMGGTSVIILVGVALDTMK
+>A6NXF0_9BACE/71-437 A6NXF0.1
+TVFALGVQPYINSSIIIQLLTVAIPALERLQKEGGEEGRKKIAAITRYTTVAIALLQGFG
+YFTLINANGLVGSDLPTWLAGIIIVLTFTAGSAFVMWLGEQITEFGIGNGISIILFAGIV
+SRFPSMLMNMVQGVQRWSMHLSDEEISAMSNGEAFRNSLVHPAMIPLIIIGILALVVFIV
+FINDSERRIPVQYAKRVVGRKMYGGQSSHIPLKVNMSGVMPIIFAQAIASLPATIAAFIP
+GGMDSTFMKVFDSNGLVYAIVYFLLILGFSYFYATMQFNPIEVANNLKKNGGFVPGFRPG
+KPTADFIYKVLNKITLFGAIYLAVIALLPIITSNIINLASGSQMGRSLSIGGTSIIIVVG
+VALETVK
+>Q250L2_DESHY/70-413 Q250L2.1
+SVFALSITPYITASIILQLLTIVIPSLERLAKEGEFGRKKITQYTRYGTVILGFIQGFGM
+TFGLRGALIIPKPGMEWAIYLLVALILTAGTAFLMWLGERITENGIGNGISLIIFAGIVA
+GVPDAIKRIAGLLSVGEINVFSVFGLIVIGLGIIAGVVFIQEGQRRIQVQYAKRVVGRRV
+YGGQSSHIPMKVNQAGVIPIIFAISLLAFPSTIATWMDPASAYVRFVNTWFVMNGSLTSI
+PYLIVYAVLIIFFTYFYTAVSFNPVDVADNLKKYGGFIPGLRPGRATSDYLSKILSRLTL
+AGGTFLAMIAVLPSLVIGLTGIPNITLGGTSLLIVVSVALETMK
+>Q8R7X3_THETN/69-402 Q8R7X3.1
+TIFAMSIVPYINASIIMQLLTIAIPSLEQLAKEGEEGRKKIAQYTRYLTVVLALIQAIGM
+TIGLRSAVINPTFFRLTVIVITLTAGTTFLMWLGERITENGLGNGSSLIIFAGIISRIPN
+MIYLTHEYIKAGTSNIFGAIAFVVAELIMIVLIILATEGQRRIPVQYAKRVVGRRVYGGQ
+STHIPIRINMAGVIPIIFAISLLQFPQQLATFFPHSSFYNFVQKWLSTNGLIYNLLDIFL
+IIGFTYFYTAVIFNPQDISDNLKKYGGFIPGIRPGKPTTEYLTKVLNRIVFVGALFLAFI
+ATMPVVLMNVTGLQLYFGGTALLIAVGVALDTMK
+>A4XLR1_CALS8/69-419 A4XLR1.1
+SIFAMSVTPYINSSIIMQLLTIAIPALEELAKQGEEGRKKLAEWTRYGTAILAFLQAVGI
+YFGLKNAQGLTGGVPVITTQGQGFLGFITITLALTAGTVFLMWIGEQITENGIGNGISLL
+IFAGIISRIPNGAVSLWNYVAKLNEFSLTSIIGVLLFLVMALAIIVFIIVIQEGERRIPV
+QYAKRIVGRRVYGGQSTHIPIKVNIAGVIPIIFAISLVMLPTTIAQFFPNSGFYKFVKAY
+FSSGSFWYTFFYALFIIGFTYFYTAIVFNPVEIANNLKNNGGFIPGIRPGKPTVDFITRV
+LSKVTFAGALFLAFIAILPTLVGLMFRHQLNIYFGGTSLLIVVGVALETIR
+>A3DJJ2_CLOTH/71-411 A3DJJ2.1
+TIFAMSITPYINASIIIQLLTVAIPKLEALAKEGEEGRKAIAEYTRYGAVVLGFLQATAF
+YFGLAQAVNERNVLSFITITLTFTAGTAFLMWLGEQITEYGIGNGISLLIFAGIVSRGPR
+GILYLWDLYRLERLGKGILGIFGVLGVLLLFVVIIASVVWVDQAERRIPVQYAKRVVGRK
+MYGGQSTHIPIKVNMAGVLPIIFATSFVALPATIVGFFFPNSTHPVAEYFRSFQSRIEVA
+ILTGLLIIFFTFFYTFIQFNPVEVANNLKKNGGFIPGIRPGKPTSDYIYKVVSRISWFSA
+LFLAIIQILPSLLQAITGIRGIWFAGTSVLILVGVALETVK
+>A8MLG0_ALKOO/69-408 A8MLG0.1
+TIFALSISPYITSSIIMQLLTIAIPSLEALAKEGEEGSKKIAQYQRYATIILALIQATGI
+SVGLFRGALINQDTFSIIVVILTLTAGTAFLMWLGEQITEKGIGNGISLLIFAGIIASLP
+SSLFTTFALTKAGQINPLAIILFIVIAIAMIVAVVAIEAGTRKIPVQYAKRVVGRKMYGG
+QSSHIPLKVNQSGVMPVIFAMSLLQFPHTIAYFIGSEGGFAKFLNTWLSPTGMPGVFIYN
+LLSAVLIIFFTYFYTAITFNPVEISNNMKQNGGFIPGIRPGKPTADYINKILTRITLSGA
+VFLAIITIVPTIVLGITHIPISFGGTTIIIIVGVALETMK
+>Q18CH6_CLOD6/69-406 Q18CH6.1
+SLFALGISPYITASIIIQLLTVGFESLAELQKSGEEGKKKINKYTKYTALALAVVQALGI
+TLGIVRSALISNSVFFITTVVITLVSASMLVMWIGDKITEKGIGNGSSVIIFAGIISRIP
+TDVIKISQQVKSGEVAPWVIVILAVVILLTVTGVTFIQEATRKIPVQYAKRVVGRKMYGG
+QSSHIPMKVNQSGVMPIIFASSLLAFPQTIAMFMGPNAQAFVQKYLSMATEQGFWTYRSI
+EILLIIFFSYFYTTVSFNTEDISKNMKNNGGFIPGIRPGEPTMDYLNRILTRLTLAGATF
+LAIIAMVPALTTHYMKVNMSLAGTSLLIVVGVALELKR
+>B8D0S8_HALOH/72-406 B8D0S8.1
+TIFAMSITPYITASIILQLLTGVIPRLEELQKQGVEGRKKLTQYTRYGTVVLAIIQAFGI
+TMLIGRHNVIVNPNLFNLMLIVISLTAGTAFLMWLGEQITDKGIGNGISIIIFTSIISRF
+PSYIHRNWELYKTGDITALNILFFLVLAVVIIAGVIFIQQGERRIPVQYSKRVVGRKVYG
+GRSTHIPMRINQAGVIPVIFAQAVLQFPTVIAAVLPYGWAQDIATALEPGKPVHLVLYAA
+MIFFFTYFWTAFTFNPEEVADNMRKSGAFIPGIRPGKATENFLTRILVRVTLAGAIFLTV
+IAIMPYFISDITRVRISFGGTSLLIMTGVALQTMQ
diff --git a/demotic/examples/example-single.fa.phr b/demotic/examples/example-single.fa.phr
new file mode 100644
index 0000000..65bc105
Binary files /dev/null and b/demotic/examples/example-single.fa.phr differ
diff --git a/demotic/examples/example-single.fa.pin b/demotic/examples/example-single.fa.pin
new file mode 100644
index 0000000..3a5061c
Binary files /dev/null and b/demotic/examples/example-single.fa.pin differ
diff --git a/demotic/examples/example-single.fa.psq b/demotic/examples/example-single.fa.psq
new file mode 100644
index 0000000..c0c4ce6
Binary files /dev/null and b/demotic/examples/example-single.fa.psq differ
diff --git a/demotic/examples/example-single.pbl b/demotic/examples/example-single.pbl
new file mode 100644
index 0000000..3a1838b
--- /dev/null
+++ b/demotic/examples/example-single.pbl
@@ -0,0 +1,1748 @@
+A9B431_HERA2/73-422   SVAAMGVYPYITAQIIMQLL----------------IP-LIPALEQLSKE-GEQGRNRIQ
+A8CRX1_9CHLR/78-422   SVAALGVYPYITASIIMTLL----------------TP-VIPKLTALSKE-GEAGRNKIN
+A2Y4E5_ORYSI/132-498  SFFQLGISHQISASIVMQVLfyplfgpallfsngnvLChVLPSLEKLRKE-GLDGHEKIK
+Q7UZW2_PROMP/80-422   GIFALGILPFINASIIIQLL----------------TA-SLPVLEDLQKNeGEAGRRKIA
+Q7NKT4_GLOVI/79-416   GVFMLGILPYINASIIMQLL----------------VP-VFPKLEDLQKNeGEQGRRQIA
+SECY_GUITH/68-404     GVFALGIVPYINASIIVQLA----------------TN-SIPSLEKLQKEeGELGRQKIV
+SECY_CYACA/62-394     SVFALGIIPYINATITIQIL----------------SS-AFPALKKLQSEeGEIGKKKLN
+Q85FU6_CYAME/42-325   GWFVLGIIPTINASIVMQIL----------------IS-IVPALTRLQKEeGEMGQKQIQ
+A0T0J6_PHATR/72-407   GLFTLNIFPYINASILVQLI----------------LG-FSPKLSKLQKEgDLEGRRSIN
+SECY_CYAPA/109-459    GFFTLGILPYMNASFFLQVL----------------TK-ILPSLERFQKEqEEIAQREFK
+Q4G351_EMIHU/63-407   GIGSLGILPYINASIIIQLL----------------TP-LFPNLERLQKEeGELGRQQIS
+SECY_PAVLU/66-404     SILTLGLGPFFSASLAVQFL----------------VK-LYPAFEKLQNEeGEEGRKTIV
+Q6B8X0_GRATL/62-395   GIFALGIVPYINASIMMQLL----------------TK-LIPELENLQKEeGESGRQKIG
+SECY_ANTSP/62-390     GIFALGIVPYIYASIIIQLL----------------IK-LIPYLENLQKEeGEIGRQKIN
+A4RW47_OSTLU/65-398   GIFSLGIVPYINSSIIFQLL----------------GS-VFPELKKLQKEeGEAGRRKFQ
+A7PFA4_VITVI/131-465  GICSLGIVPFINAQIVFQLL----------------TQ-IYPKLQDLQKReGETGRKKVL
+A7HM32_FERNB/75-404   SVFSMSVTPYINASIIMQLL----------------AS-IIPSLKELLKE-GEEGRKKFQ
+A3CK84_STRSV/69-416   SVFALGVSPYITASIVVQLL----------------QMdLLPKFVEWGKQ-GEVGRRKLN
+Q5FM71_LACAC/68-415   SIFSLGVSPYITAQIVIQLL----------------QMdIVPTLVEWGKQ-GEVGRRKTN
+Q03ZM6_LEUMM/68-416   SLFAMGVSPYVTAQIIVQLL----------------QLdIVPRFVEWSKQ-GEVGRRKLN
+SECY_STAA8/69-413     SIFAMGIVPYITASIVMQLL----------------QMdIVPKFSEWAKQ-GEVGRRKLN
+Q4MG72_BACCE/68-415   SIFAVGITPYITASIIVQLL----------------QMdVIPKFSEWAKQ-GEMGRKKSA
+Q6F1X5_MESFL/92-454   SILALGVSPYITASIIVQLL----------------STdVVPILTRWNKS-GERGRKKLD
+Q6KI36_MYCMO/87-436   SIVALGISPFITASLVMQIL----------------QTkLFPPIYRLSQS-GPIGRRKIN
+Q4A5I3_MYCS5/83-437   SIFALGISPFINASLIMMIL----------------QSrLFPMIYKLTQS-GPQGRRKLN
+Q98Q01_MYCPU/90-438   SIVSLGINPFITASLIMTIL----------------QSkLFPPIQKMSQS-GPLGRKKIN
+Q4AAF9_MYCHJ/85-434   SVVALGISPFITASLFMLIA----------------QTkLFPPIHRLSQS-GPAGRRKIN
+Q9PQP1_UREPA/76-434   SLFAIGIGPYITAQIIMQLL----------------SSeLVPPLAKLSKS-GERGRKKIE
+SECY_MYCGE/81-430     SLFAVGISPYISAQIIMQLL----------------STdLIPPLSKLVNS-GEVGRRKIE
+Q8EUD2_MYCPE/81-433   SFMAIGVSPYITAQIIVQLL----------------SSdLIKPLTRLSKA-GERGKRKLE
+Q7X4E3_9MOLU/69-399   CILSLGVIPYVTASIVIQLS----------------QK-VFTFMKEWQEQ-GEKGKRKIN
+Q5Q069_ASTYP/59-398   TLFGLGITPYITASIVVQFL----------------QK-LLPICREWKDQ-GQMGKRKLN
+O21257_RECAM/57-372   SLFALNITPIITYLFLEQLY-------------------YIYSIPLISKK-KNLNKDLIK
+Q74NB9_NANEQ/69-457   SIVSLGIGPIIIGYLLAELF-------------------IGSGELNIDIT-TEEGKRKFE
+Q2EMT2_METVO/30-379   TLITLGIGPIVTAGIIMQLL-------------------IGSELVKLDMS-KPDNRALFQ
+A5UL65_METS3/72-433   SILTLGIGPIVTASIVLQLL-------------------VGSKLLDLDLS-SPEDKSQYQ
+SECY_METTH/73-436     SILTLGIGPIVSASIILQLL-------------------VGGKILKLDLS-RHEDKAFFQ
+SECY_PYRAB/72-448     SILTLGIGPIVTAGIILQLL-------------------VGSEIIKLDLA-NPEDRRFYQ
+Q8TZA9_METKA/75-435   SILTLGIGPIVTASILLQLL-------------------VGGDLIKLDLT-NPEDRRLFQ
+Q9HIT0_THEAC/82-514   SLMDLGIGPIVTASIVMQLF-------------------VGAKIFNLDLQ-NAEDKAIYQ
+Q2QAQ7_9EURY/161-583  SIMHLGIGPIVTGSIIMQLF-------------------AGAKIIKLDLG-DSDDKQLYQ
+Q0W1W5_UNCMA/75-487   SIILLGIGPIVMASIVLQLL-------------------VGAELIPLDTT-DPKDQAIFQ
+SECY_ARCFU/73-471     SIIALGIGPIVTASIILQLL-------------------VGAGIIKLDLT-NPEDRAAYQ
+Q8TRS4_METAC/72-470   SLVLLGIGPIVTASIVLQLL-------------------VGADIIKMDLS-DPKDQAFFQ
+A0B9U7_METTP/75-515   SLMLLGIGPIVTASIVLQLL-------------------VGAEIIKLNLR-DPRDQAIFQ
+SECY_HALMA/73-468     SIMQLGIGPIVTASIVLQLL-------------------GGADLLGLNTQdDPRDQILYQ
+Q2FSG8_METHJ/73-458   SIVHLGIGPIVTASIVLQLL-------------------KGADLIHIDTS-EIRGQIQYM
+A2SPM5_METLZ/73-458   TILHLGIGPIVTASIVLQLL-------------------RGADLIKINTS-DQRGQVLYM
+A0RUE4_CENSY/79-457   TLVELGIGPIVTAGLLMQLL-------------------RGSEILKFDFK-KPEERGIFQ
+A8ME75_CALMQ/77-461   TLAQLGIGPIIIAGIIMELV-------------------AFSELMDVDLN-DPKDQARFT
+A3MUZ2_PYRCJ/70-435   TLAHLGIGPIVIAGILMEVF-------------------AFSGVLNLDLN-KREDRLKFT
+SECY_SULSO/73-449     TLAQLGIGPIITAGLIMQIL-------------------AGSKLISIDLN-DPDDRVKFT
+SECY_SULAC/74-443     TLAQLGIGPVITSGLIMQIL-------------------VGSKLINVDLT-TQEGKSKFT
+A2BME2_HYPBU/73-444   TLMTLGIGPIVTAGIVLEVL-------------------VGGKLIELDLT-KPRDRKIFM
+SECY_AERPE/73-434     TLMELGIGPIVTASLIIQVL-------------------VGAKIIKLDLA-DPEGRRKFT
+A1RWR3_THEPD/75-456   TLIELGIGPIVTSGIVWELL-------------------VGSRIVNLDLT-TPEGRRTFA
+SC61A_SCHPO/76-459    TLMELGISPIVTSSMLVQLL-------------------VGSQLIEVNME-LKSDREMYQ
+A7E5Q2_SCLS1/76-459   TLMELGITPIISSGMVFQLL-------------------AGTHLIDVNLD-LKADRELYQ
+Q5KC69_CRYNE/75-459   TLMELGITPIVTSGMIMQLL-------------------AGAQLIDVDFS-LKDDRALFG
+SC61A_ASHGO/75-460    TLMELGVSPIITSSMIFQFL-------------------QGTQLLQVNLE-SKQDRELFQ
+Q59MJ6_CANAL/76-459   TLMELGISPIVSSGMLFQLL-------------------QGTKIIHVDMQ-NKNDRETFQ
+A7SJW4_NEMVE/75-458   TLMELGISPIVTSGLIMQLL-------------------AGSKIIEVGDT-PK-DRALFN
+A0CFY2_PARTE/73-456   TLMELGISPIVTSGMILQFL-------------------SGVGFIEVNHS-VREDKVLFN
+Q22MG2_TETTH/151-538  TIMELGISPTVTAGMVMQLL-------------------VGAQILNIDQN-DPVQRSLYE
+A0CU87_PARTE/77-460   TLMELGISPMVTASMIMQLL-------------------AGAKLIDVDQN-VKEDKQLYS
+Q7RLN0_PLAYO/121-506  TLMELGISPIVTSGMVMQLL-------------------AGSKIIDVDQS-LKEDRTLFQ
+Q4QGX4_LEIMA/77-467   TLMELGISPIVSASLILELL-------------------AGVRILTYDQN-NREERAVFE
+A5JEK2_NOSBO/75-457   TLMDLGISPVVTASMIMQFL-------------------GMLELVKVDYN-VKEDKILHG
+A2DH65_TRIVA/75-462   SLMEFGISPIVTSGMILQFL-------------------CSFGLINRNPS-DPEASALFD
+Q2QM98_ORYSJ/88-448   TVMELGVAPVVTSWVVVRLL-------------------AALL--------FDSDSSTTV
+Q6AV46_ORYSJ/86-471   TVMELGITPVVTAGTLVQLL-------------------VGSNLVRADSS-NPDDRALLS
+Q6C854_YARLI/70-454   TLMELGVGPMVTSGIIFQIL-------------------GGFQALNVNFD-IRADRELFQ
+SSH1_YEAST/78-465     TLLEFGLFPNISSGLILQLL-------------------AGLKVIKVNFK-IQSDRELFQ
+Q6BT20_DEBHA/78-475   TLLELGLLPVLTSAFIWQLS-------------------AGFRFINVNLN-LRSDRELYQ
+A5DE75_PICGU/20-414   TLLELGLLPVMTSAFLWQLA-------------------AGLRLVKVNLS-LRSERELFQ
+A3GFV9_PICST/78-476   TLFELGVLPVVTAAFFWQLA-------------------VGLKLVNVNLG-LRSDRELFQ
+A5DWJ5_LODEL/34-436   SLLELGFLPIITSAFLWQLA-------------------AGLKLININLG-LRYDRELFQ
+Q5A2C9_CANAL/5-404    TLLELGLLPIITSAFIWQIA-------------------AGLRLINVNFK-LRIDRELFQ
+Q74L41_LACJO/64-372   SIFSIGLNPLMFSMLIIQLL-------------------SFTHSFGFDA----LSPKQVQ
+B3XPQ8_LACRE/65-377   SLFMVGLNPLMIAMLIIQLL-------------------TMLRLFYFDT----LSMNQLM
+A1C3L4_STRPA/70-403   TLFSLGIGPTMTMMILWRFL-------------------ITFKLI------GSWTSNKVN
+Q3DVD6_STRAG/65-395   GVFSLGIGPMMTTMILLRLF-------------------------TIGKYsSGVSQKVQQ
+A5LN99_STRPN/64-389   SIFSVGLSPWMSAMILWQMF-------------------SFSKRLGLTST----SIEIQD
+A3CM55_STRSV/64-391   SLFSVGLSPWMSSMLIWQMF-------------------AVSKRLGLSKL----PLEVQE
+Q03HZ8_PEDPA/65-396   SLFSVGLGPYMTGMILFQAI-------------------QLLDIDELNKI----NDYKRG
+A5IW80_STAA9/64-384   NIFTLGLVPWLTSMIILMLI-------------------SYRNMDKYMKQ----TSLEKH
+Q4L9N9_STAHJ/61-383   NVFSLGLGPWLTSLVIIMLL-------------------NYRNLDQATKQ----TRSEKH
+Q5HKR3_STAEQ/61-380   NIFSLGLGPWLSSMIILTLI-------------------NHKSNDKVKTQ----TRRERH
+Q9RSK8_DEIRA/68-413   SIFALGVLPYITASIVIQLL----------------TT-TIPSLEKLSKE-GEEGRKKIN
+Q5SHQ8_THET8/71-413   SIFALGIMPYITAAIIMQIL----------------VT-VVPALEKLSKE-GEEGRRIIN
+SECY_CORGL/73-424     SIFAIGIMPYITASIIVQLL----------------TV-VIPHFEELKKE-GQSGQAKMM
+A8LB12_FRASN/74-414   SVFALGIMPYITSSIIIQLL----------------VV-VIPRLEQLKKE-GSSGEQKLT
+Q83NQ1_TROW8/73-424   SVFALGVMPYITSSIIIQLL----------------RV-VVPRFEQLYKQ-GQEGQAKLI
+Q8G3Z9_BIFLO/74-421   SIFALGVMPYITASIVVQLL----------------RV-VIPRFEALHKE-GQSGEAKLT
+A7B9M4_9ACTO/72-414   SIFALGIMPYITASIIIQLL----------------RV-VIPRFDDLHKE-GQTGQAKLT
+SECY_CHLTR/73-433     TVIALGVVPYISASIIVQLL----------------VV-FMPTLQREMREsPDQGKRKLG
+Q1AU49_RUBXD/70-408   SVFALGIMPYITAAIVMQLM----------------TV-AIPRLQELARE-GEVGQQKIT
+Q8RIH6_FUSNN/75-411   SIFSLGIIPYINASIVVSLL----------------VS-IIPQLEEIQKE-GESGRNRIT
+A6DRC9_9BACT/79-428   GV--LGIMPYITASIIMQLM----------------TP-VFPNLEKLQKD-GSHGRQKLN
+C0ACZ0_9BACT/94-454   AVCALGIMPYISASIIFQLM----------------TA-VVPSLARLQQE-GDVGRQKLS
+Q1Q157_9BACT/75-434   AIFGLGVMPYISASIIFQLL----------------VG-VVPYLERLQKE-GEVGRKKIN
+A6CGP8_9PLAN/77-435   TIFGLGIMPYISASIIFQLM----------------GT-VYPPLERLQKE-GEAGRKKIN
+B4S5A8_PROA2/73-417   SIFSLGIMPYISASIIVQLL----------------GA-VTPYVQKLQKE-GEEGRQKIN
+Q2S3P5_SALRD/75-414   GIFALGIMPYITASIIIQLM----------------GA-VVPYFQKLQRE-GEEGRRRIT
+A1ZGT4_9SPHI/72-404   SIFALGIMPYISASIVIQLM----------------EV-AVPYFQKLKKE-GESGFKKKT
+A6EHP4_9SPHI/71-408   SILALGVMPYISASIVVQLL----------------GI-AVPSFQKMQKE-GESGRKKLN
+Q11QD2_CYTH3/72-411   SVFGLGIMPYISASIVLQLL----------------TF-AVPYFQRLQKD-GESGRKTIN
+Q1VTY0_9FLAO/73-421   SVFALGIMPYISASIVVQLM----------------TI-AIPYLQKLQKE-GDSGRKKIT
+Q1NYZ7_9FLAO/72-422   SILSLGIMPYISASILTQLM----------------CY-MFPSLYKIQQD-GEIGIKKIN
+A5KHP6_CAMJE/62-402   SIISLGIMPYITASIIMELL----------------AA-TFPNIGKMKKE--RDSMQKYM
+A4EA78_9ACTN/52-389   SVFSLGIMPYITSSIILQML----------------QA-VVPSLHELARE-GEVGQTKIT
+Q2GEC0_NEOSM/73-411   TLFALNVMPYIVSSIVVQIF----------------FS-MLKSEGKVSAE--FMNESRLS
+Q3YRM8_EHRCJ/72-412   TVFALNVMPYIVSSIIIQLL----------------SV-TVPRLNELRQN-GELGRMKIN
+Q5GSW3_WOLTR/77-416   TILVLNVMPYIVASIVMQLL----------------SS-AVKGINEVKND-GELGRRRMN
+Q0ANS0_MARMM/83-421   AIFVLNVMPYISASIIMQLM----------------SA-TIPSLEKLKKEgGEQGRQQIN
+A7IPQ0_XANP2/80-418   AIFALNIMPYISASIIIQLL----------------TS-VSPTLEALKKE-GEAGRKQLN
+SECY_RICCN/70-411     SIFALAIMPYITASIIIQLM----------------SV-AYKPLENLKKE-GEVGKRKVN
+Q2G8W0_NOVAD/80-430   SLIALGVMPYITASIVVQLA----------------AS-LHPALAAMKKE-GESGRKKLN
+A6E0Q6_9RHOB/73-411   GIFALGIMPYISASIIVQLM----------------TA-MVPALEQLKKE-GEQGRKKIN
+Q1UZE8_9RICK/67-404   AIFALGIMPYISSSIIVQLL----------------TG-VSDYFKNLKAQ-GETGRAKIT
+Q3R245_XYLFA/76-424   SIFALNVMPYISASIVVQLA----------------TH-IFPSLKAMQKE-GESGRRKIT
+A4NK90_HAEIN/76-416   SILALGIMPYISASIVIQLL----------------AT-VSPALAELKKE-GAAGQRKIS
+Q057C4_BUCCC/64-407   SIFALGVMPYISSSIIVQLL----------------TL-ISSYLRNLKKE-GDIGKKTIN
+Q8D1Z2_WIGBR/82-424   SIFSLGIMPHISASIIIQLL----------------TI-IHPKLSEIKKD-GEFGRRKIN
+Q6F7T2_ACIAD/83-426   SILALGIMPYISASIIVQLM----------------ST-VVPSLEALKKE-GEQGKRKIN
+Q6Q8W8_9GAMM/67-407   SIFALNVVPYISSAIIMQLF----------------SN-SIPYLQELKKD-GQAGRNKIT
+A9BRX1_DELAS/74-413   TVFALGIMPYISASIIMQLM----------------TY-VVPTFEQLKKE-GESGRRKIT
+Q7DDS8_NEIMB/73-410   SIFAIGIMPYISASIIVQLA----------------SE-ILPSLKALKKE-GEAGRKVIT
+Q5NHU8_FRATT/74-416   SIFALGVMPYISASIIFQML----------------SA-VYPKFIELKKE-GESGQKKIT
+Q7WZR8_9GAMM/64-388   SIFSIGLMPYISASIIMQVI----------------TG-MFLDVE--------VSKHKLT
+A5EX98_DICNV/69-412   SLLALGVAPYISASIVMQLL----------------TH-MLPALKDLRQE-GSAGQKKIT
+Q6MJ32_BDEBA/70-415   SIFALGIMPYISSSIIFQLL----------------TS-AIPYLEALKKE-GEQGRRKIN
+B5EFS0_GEOBB/71-411   TVFALGIMPYISSSIIFQLL----------------TV-VLPAVEKLSKE-GDAGRKKII
+A3EVQ1_9BACT/75-412   TIFALGIMPYISASIILQLL----------------TV-VHPTLQAMAKE-GERGRKIIT
+Q1MPP6_LAWIP/71-412   SVFALGIMPYISASIIMQLL----------------QV-IIPDFKRMAKEeGAAGRYKIT
+SECY_AQUAE/71-412     TVFALGVMPYISASIMMQLL----------------TV-AIPSLQRLAKEeGDYGRYKIN
+Q01WB2_SOLUE/74-438   TVFALGIMPYITASIILQLL----------------TV-VVPTLEKLQKE-GELGRRKIT
+Q08ZH8_STIAU/26-370   SIFGLGIMPYVSASIIMQLL----------------AV-VVPSLERLQKE-GASGRQKIN
+A6GCG0_9DELT/70-411   SVFALGIMPYISASIIMQLM----------------TV-VIPKLEQLQKE-GETGRRKIN
+Q04PV8_LEPBJ/72-436   SIFALGIMPYISSSIVMQLF----------------MV-LVPSLQKLQKE-GEEGRKKIG
+SECY_BORBU/72-409     SIFMLSIGPYISASIIVQLL----------------VY-SFPSLKKMQE--GDGGRQKTK
+Q73PL2_TREDE/73-413   SVFMLGVMPYISTQILMQLA----------------MI-IFPRLKKIAEE--DGGRKKIQ
+Q67JW3_SYMTH/69-405   AIVAMGVTPYINSSIIMQLL----------------TV-VIPRLEELQKE-GEEGRKKIQ
+A7FQ38_CLOB1/69-409   SIFAMGVVPYINSSIIMQLL----------------TI-ALPSLESLSKE-GEEGRKKIQ
+A6LPT1_CLOB8/69-416   SILALGVMPYINASIIIQLL----------------TV-AIPQLEQLSKE-GDTGRKKIQ
+Q0SQG4_CLOPS/69-409   SIFALGVVPYINASIIMQLL----------------TV-AIPKLEQLSKE-GDDGRKKIQ
+A9KJH4_CLOPH/71-425   SLFALGIGPYITSSIIMQLL----------------TI-AIPKLEEMQKD-GESGRKKIA
+A7VH89_9CLOT/71-420   SIFALNVTPYITASIIIQLL----------------TI-AIPALEEMQKD-GEDGRKKIT
+A6BIS2_9FIRM/71-421   SVFALSITPYITSSIIVQLL----------------TI-AIPQLEEMQRD-GETGRKKIV
+A7VR33_9CLOT/71-423   TLFAMSVTPYINSSIIMQLL----------------TV-AIPPLERMAKE-GEEGRKKIG
+A6NXF0_9BACE/71-437   TVFALGVQPYINSSIIIQLL----------------TV-AIPALERLQKEgGEEGRKKIA
+Q250L2_DESHY/70-413   SVFALSITPYITASIILQLL----------------TI-VIPSLERLAKE-GEFGRKKIT
+Q8R7X3_THETN/69-402   TIFAMSIVPYINASIIMQLL----------------TI-AIPSLEQLAKE-GEEGRKKIA
+A4XLR1_CALS8/69-419   SIFAMSVTPYINSSIIMQLL----------------TI-AIPALEELAKQ-GEEGRKKLA
+A3DJJ2_CLOTH/71-411   TIFAMSITPYINASIIIQLL----------------TV-AIPKLEALAKE-GEEGRKAIA
+A8MLG0_ALKOO/69-408   TIFALSISPYITSSIIMQLL----------------TI-AIPSLEALAKE-GEEGSKKIA
+Q18CH6_CLOD6/69-406   SLFALGISPYITASIIIQLL----------------TV-GFESLAELQKS-GEEGKKKIN
+B8D0S8_HALOH/72-406   TIFAMSITPYITASIILQLL----------------TG-VIPRLEELQKQ-GVEGRKKLT
+
+A9B431_HERA2/73-422   RYQYFLTVPLAYLQGYGQIKSLINSGINLFGTLNFs-----------iTENFFQTFSILT
+A8CRX1_9CHLR/78-422   TITHWLAVPTAALAGYSQLLLLQREGAVAQTE-------------------PLAAVAIVL
+A2Y4E5_ORYSI/132-498  GYIWWLSLGFALVAAFTVSCYSLQYSIYAASY------------------RVKHVMITSL
+Q7UZW2_PROMP/80-422   QITRYVSLGWGFLQSIIFSLILRQYAIEGISET-----------------AFV--LQTSI
+Q7NKT4_GLOVI/79-416   QYTRYLALGWAIIQSIGVAIYIKPFVADWSPL-------------------FV--IQTTL
+SECY_GUITH/68-404     QLTRYVALVWALIQSIGVSFWVRPYVFNWDLN-------------------FV--FAMSL
+SECY_CYACA/62-394     KITKYLSFCFAFIESLAIVLRLQKYAFDWN---------------------LYFIVQTTL
+Q85FU6_CYAME/42-325   KYTRYLTFFLAGIQAFTLSQQ----------------------------------WCTWL
+A0T0J6_PHATR/72-407   RLTRLITLMFALIQSVSLALYLKQILFNWN---------------------YSLAIEIGL
+SECY_CYAPA/109-459    KWTRYLTVIWAFIQSIVISWIWIRPYALNWD--------------------FFLGLKVVV
+Q4G351_EMIHU/63-407   RYTRYLTCIWAIVLSSAIAFFLIKPITFGWS--------------------LKLGLEIVL
+SECY_PAVLU/66-404     RYTRILTVLFCIIESFFLSNSLRSFVFNWN---------------------SISYFVVAA
+Q6B8X0_GRATL/62-395   QLTRYFTLIWSILQSIGISLWIKPYVFNWNYY-------------------FI--LDSII
+SECY_ANTSP/62-390     QLTRYLTLLWALIQSLSIAIWINHMY-------------------------LIHLFELCA
+A4RW47_OSTLU/65-398   QYQRYGALGFAIVQAVGQCLYVRPFVEDFTPI-------------------WL--FEQSC
+A7PFA4_VITVI/131-465  QYTRYASVGFALVQAIGQVLFLRPYVNDFSTQ-------------------WV--LSSVT
+A7HM32_FERNB/75-404   HYTKNLTLGLAALQSFVVSFGLARSYQGIIAIN-----------------TWLFSFVSTV
+A3CK84_STRSV/69-416   QATRYIALVLAFVQAIGITAGFDTLSRANLVAN----------------PNVQTYALICV
+Q5FM71_LACAC/68-415   QVTRYLTLVVAFVQSIGITLGFNALTQMGLVKNQ--------------TPQTY--VEIAI
+Q03ZM6_LEUMM/68-416   NATRWLTLVLAFVQSVGITAGFNSLSSYGLVSQT---------------NSVM--SFVVI
+SECY_STAA8/69-413     NVTRYLAISLAFIQSIGMAFQFNNYLKGALIIN----------------QSIMSYLLIAL
+Q4MG72_BACCE/68-415   QFTRYFTIILAFIQAIGMSYGFNNIAGGQLITD----------------QSWTTYLFIAT
+Q6F1X5_MESFL/92-454   KLTKVLMIPFALMQGIATIFTLQQQGV-----IEPgwssd---nvlasPAFYY--VLVPL
+Q6KI36_MYCMO/87-436   IITRAITIFLGVVQSMTIVSALSAQNSFISLTNEF-------------NVFWYQFIILPV
+Q4A5I3_MYCS5/83-437   IATRILTFIIAYPQAVFLTKSLTAGERNSSFITLVsi--------dgfSVDLLVYFLLPM
+Q98Q01_MYCPU/90-438   VITRLLTLVFAFPQAIVLTQTLSRENGFISIDQEF-------------KTIANIYVLLPL
+Q4AAF9_MYCHJ/85-434   IITRFLTLLVAVIQAVVLIRTVILNPDYGFVRLEI-------------NTPVFIWLVLPL
+Q9PQP1_UREPA/76-434   VITRIITLPLAVMQAVIIINLMTRANG-----FISivsna---pfaigSPLFY--VTYIF
+SECY_MYCGE/81-430     MITRIITLPFALVQAFAVIQIATNAGT-----GSSpis------lansGSEFI--AFYII
+Q8EUD2_MYCPE/81-433   IITRLITIPFAIMQAYAVLSLAGTQGLVSSFFGQSa----------lsSVPAGQIILLLL
+Q7X4E3_9MOLU/69-399   IVTRVLTIFLSLGHGWALCQTEKLVLG------------------------PYLLFSTLF
+Q5Q069_ASTYP/59-398   LLTRSLALFFAFGQSFAFLNSYSKLLVTSIS--------------------TRQLFLLAL
+O21257_RECAM/57-372   KYSVYIFLMISYLEGFIYLNHLYNTTSSSFLIFY--------------LDNTINYLLCLN
+Q74NB9_NANEQ/69-457   NLARFFMIVFGLFESIVMA-TIGWFKPSQFLISLFampfsflgsnaflIGYILAVLFIVA
+Q2EMT2_METVO/30-379   GLQKAFGIFLCFLEAGMFV-LAGAFGALT----------------------PMMSLALIL
+A5UL65_METS3/72-433   ATQKILSIVFTMFEAGVLV-LTGSLVPIDNS--------------------YL--GVLFL
+SECY_METTH/73-436     GLQKLLAIVFTFFEALIFV-LTGSLAPSAPQF------------------V----WVLIL
+SECY_PYRAB/72-448     ALQRVFSVFMCFLEAAIWV-LGGAFGRVGVDV------------------TYAIAALMIL
+Q8TZA9_METKA/75-435   GLQKLLAIVLCFFEGVMMV-FSGAAPPAEPS--------------------ILLEILLIL
+Q9HIT0_THEAC/82-514   GVQKLLVIIMIFVEAIPQA---FGYLVPDTKVVNSina------vfpgYGEFLAQTIIIL
+Q2QAQ7_9EURY/161-583  GVQKILVLIMIPVESIPQV---YGFLDASPALVSD-------------FGQGWANAIIVS
+Q0W1W5_UNCMA/75-487   GLQKLMVFVMIVVEALPQI--YGGFLLPDPAIAATl-----------gVSTGIIQLLIFA
+SECY_ARCFU/73-471     DFQRFLVFVMIAVEAIPQI--AGGLLKPDLNLAAQl-----------gVSPGIISFLIFI
+Q8TRS4_METAC/72-470   GAQKFLVFVMIILEALPQL--LGGYIQPDPGLAATl-----------nVGLGVITLLLLV
+A0B9U7_METTP/75-515   GTQKALVFVMIVVEALPQI--TGGYLLPDQALATSl-----------gVSLSIISLIIFL
+SECY_HALMA/73-468     GLQKLLVLVMICLTGLPMV-FAGGFLPADTAVANSl-----------gIGTAGVQWLIFA
+Q2FSG8_METHJ/73-458   GLQKLMIFIMIVVEALPMI--VGGFLKPDPAIASAl----------fgGNSGVLAILIFI
+A2SPM5_METLZ/73-458   GLQKVLIFVMIILEALPNV--LGGWMSADPAVSAFf-----------gGNAGFVMLLIFL
+A0RUE4_CENSY/79-457   TATKMVSYVVIVVESSIYGIAVYGPGIADPS------------------------VLYIL
+A8ME75_CALMQ/77-461   ALTKLVAVIIAMFEGAFIM-STHQLTVAN----------------------AGLAFIVWL
+A3MUZ2_PYRCJ/70-435   LMLKWAALGIAALEATAYV-LGGQFGTVT----------------------PLGGVLIVL
+SECY_SULSO/73-449     EAQKGLAFIFILVESALFGYVLARTSTTINASIL--------------FIA----GIVIA
+SECY_SULAC/74-443     QAEKALALIFIIVESSLFGYVFTRATSNILLP-----------------------IIVVV
+A2BME2_HYPBU/73-444   GAQRTLALLFALLEAAAYV-IGCRFWISAFASSPEv----------cpPISTAVKIIVVL
+SECY_AERPE/73-434     SAQKVLALAFAALEAVAFT-VGGRYWVGTAIEP-----------------GPLDYALVSL
+A1RWR3_THEPD/75-456   GLQKLTAFLFAALEAAAYI-LGGVYGALT----------------------QQQQIIVFV
+SC61A_SCHPO/76-459    LVQKFLAIIIAFGQATAYV-LTGMYG------RPQd-----------lGAGIC--LLLIL
+A7E5Q2_SCLS1/76-459   TAQKLFAIILSMGQATVYV-FTGLYG------QPSd-----------lGAGVV--CLLIL
+Q5KC69_CRYNE/75-459   AAQKLFAMIISLGQATVYV-LTGLYG------SPSs-----------lGAGVC--LLLIL
+SC61A_ASHGO/75-460    IAQKVCAIVLTLGQAIVVV-LTGNYG------SVSn-----------lGIAIS--LLLIL
+Q59MJ6_CANAL/76-459   TAQKLLAILLAVGQATVYV-LTGMYG------PPSs-----------lGVGVC--SLLIL
+A7SJW4_NEMVE/75-458   GAQKLFGIIITIGQAVVYV-MTGMYG------DPSd-----------lGPGIC--LLIII
+A0CFY2_PARTE/73-456   AAQKLLSFIMAIAEGMAYI-WSGAYG------DINq-----------iGAGNA--ILILL
+Q22MG2_TETTH/151-538  GSQKLLGLIIAFFEAVAYV-WSGMYG------DIEk-----------vGYGNA--LLIVL
+A0CU87_PARTE/77-460   GAQKLLGILIAFGEAFAYV-WSGMYG------DLDk-----------lGAGNA--ILIII
+Q7RLN0_PLAYO/121-506  GAQKLLGLLITLGEAIAYV-VSGIYG------NLSe-----------iGTGHA--ILIIL
+Q4QGX4_LEIMA/77-467   GFQKMMGLVITAVEAVAYV-SSGMYG------DPSr-----------iGVVMC--GLIVL
+A5JEK2_NOSBO/75-457   AANRLISLIMTVGSAIVQV-LTGFYG------DPKa-----------lGWTYC--ILLMV
+A2DH65_TRIVA/75-462   AAQKLAGIIMTAFQAGNAI-WSGEYG------IRGe-----------iGFVNA--ALIMT
+Q2QM98_ORYSJ/88-448   ASCELLARCLAYVTNASRL-VIG---------IAAalgm-----cgsgGAGNA--ALVVL
+Q6AV46_ORYSJ/86-471   AAQKLLSIVITAGEATAYV-LSGAYG------SVGv-----------lGAGNA--VLVVL
+Q6C854_YARLI/70-454   SGQKIFALLLTFFHAIFLVFFAQTYGTISTDSAVS-------------ELSLGAAVLIVA
+SSH1_YEAST/78-465     SLTKVFAIVQYVILTNIFI-FAGYF-------GDD------------lSVVQI--GLINF
+Q6BT20_DEBHA/78-475   SGQKLTSFIFAIVYGAGYI-FSGYYNNVIKGYNPFn----------gdSVPVTTLVLIFL
+A5DE75_PICGU/20-414   TGQKLTSFILGIVYTAGLI-ASGYFAPALR--NQTgfe-------dsfPVTTY--VFIFL
+A3GFV9_PICST/78-476   TGQKLTSFVLAIVYGVGLI-YSGYYDNAIRGYDPLsd---------stPYGWY--GLILF
+A5DWJ5_LODEL/34-436   LGQKLTAWGLALIFSVGLI-YSGYYDNVIR--GYKvvgg-----sggvPIWSY--LIIFT
+Q5A2C9_CANAL/5-404    TGQKLTSFIFSLIFAIGLI-YSGYYDNAIR--GYNplq-------dgiPYGSY--ALILL
+Q74L41_LACJO/64-372   YLMQFLTMIITIIQAALLVFAFTNRRN------------------------GLEDFEMIL
+B3XPQ8_LACRE/65-377   KIQQWLTLGFAIIQSTAVTLGLKITTG------------------------TLDSLAVIL
+A1C3L4_STRPA/70-403   RLQFLLTLAIALLQSFGITNDSKFLLIFGYSH-------------------STLRIITII
+Q3DVD6_STRAG/65-395   FRQNVVMLVIAIIQGLAITISFQYHNGFS----------------------LTKLLLATM
+A5LN99_STRPN/64-389   RRKMYLTLMIAVIQSLAVSLRLPVQSSYSA---------------------ILVVLMNTI
+A3CM55_STRSV/64-391   RRRMLLTLVIALIQSVALVLNLPLQEAAGVDM-------------------TTIMVLDTL
+Q03HZ8_PEDPA/65-396   MIQRWISFVIALLQTLQFIYTIREHINFSGIKVW---------------GIDYNLIVAFF
+A5IW80_STAA9/64-384   YKERILTLILSVIQSYFVIHEYVSKERVH----------------------QDNIYLTIL
+Q4L9N9_STAHJ/61-383   YKERIITIVFAIFQSYFVISTYIHNNFIK----------------------DSNIILLML
+Q5HKR3_STAEQ/61-380   FKERALTLIISAAQGFYIIHSYINKHAIK----------------------DSNMLILLL
+Q9RSK8_DEIRA/68-413   QYTRYAAIALGAVQALFFSLYI--TSNPSFIAVGW-------------DPGLFTVLVMVL
+Q5SHQ8_THET8/71-413   QYTRIGGIALGAFQGFFLATAFLGAEGGRFLLPGW-------------SPGPFFWFVVVV
+SECY_CORGL/73-424     QYTRYLTVALALLQSSGIVALADREQLLGAGIRVLs-----------aDRNFFDLIVLVI
+A8LB12_FRASN/74-414   QYTRYLTVALGILQATGIVALARSGRL-----FPGcsa------qiipDTSLFRIVTIVI
+Q83NQ1_TROW8/73-424   QYTRYLTIGLAVLQSTTLITVARSGAL--FAASNSpacs-----slltDDSWYSTIIIVI
+Q8G3Z9_BIFLO/74-421   QYTRYLTIGLAVLQSTTILVTARSGAL-----FNYqcd------qvipDGSVFNLVVMVL
+A7B9M4_9ACTO/72-414   QYTRYLTIFLGILQATTTISLARSGQL-----FQScnh------diikDRSVMTFIMMII
+SECY_CHLTR/73-433     RMTRLFTLVLACVQSLLFAKFALRMNL--VVPGIVlpamls-lklfgvPWVFY--LTTVV
+Q1AU49_RUBXD/70-408   QYTRVFTLALSFIQSVAMVLFLRSGQFGPVLAG----------------AGALDLFLVVV
+Q8RIH6_FUSNN/75-411   QWTRYLTIALAIIQGTGVCLWLQSVGLIYNPGI-----------------SFF--VRTIT
+A6DRC9_9BACT/79-428   QYTRYMTIVICAVQSAMMAVAMHTPSK----LLGVpgfed---lvinkGSAFV--IQTTI
+C0ACZ0_9BACT/94-454   QYTRYATVLICLIQGALLILALENPTQLFGEGYDIaryge---ivlvdRTWFL--ISSVI
+Q1Q157_9BACT/75-434   QYTRIATVGLCLFQAFVMTRTLYTVEF-----NGVpvip-----vylqGVSFQ--LMAAI
+A6CGP8_9PLAN/77-435   EYTRYATVVICLVQSFFWIRTLAGGFG-----SGTslil-----dgyqGLYFQ--IVATI
+B4S5A8_PROA2/73-417   QYTRYGTVLIAALQAWGVSVSLASPSSFGTIVVP--------------DPGFFFMMTTVL
+Q2S3P5_SALRD/75-414   QLTRYGTIGITALQSIGYSINLLAGATGRAVVIN--------------STLFT--ITTVV
+A1ZGT4_9SPHI/72-404   QITRYLTIVITAAQAIGYIQATIPSNAIMVSQL-----------------SFT--ISTVI
+A6EHP4_9SPHI/71-408   QITRYLTVAITAVQAVGYVKTQVPMEAIVIDHT-----------------LFF--VMATF
+Q11QD2_CYTH3/72-411   QYTRILTIFITVAQSIGYLAATLDEGMIYEGMN-----------------TPFMNVVRIV
+Q1VTY0_9FLAO/73-421   QITRWLTIAITLVQGPGYIINLYNILPSSAFLMD---------------STFTFVVSSVI
+Q1NYZ7_9FLAO/72-422   NITKVLTILISLIQAPVYITILISSNIKENPYNLIli---------hcKKIFI--ITSII
+A5KHP6_CAMJE/62-402   QIIRYATIVITLVQSIGVAIGLQSLHG--RGGAGVim--------vedLNMFI--ALCAI
+A4EA78_9ACTN/52-389   QYSRYLTLALAILNSVGYLFLFKSFGISFNGAGA---------------PEIIFDLMIVG
+Q2GEC0_NEOSM/73-411   FYSKLVALFLAFFQGFIIVAGLERTKAFVGGNEE---------------FYSLLKYTSVL
+Q3YRM8_EHRCJ/72-412   NYIRYMTIFFCIVQGSVILLGLEKMNS-----ENSivv-------idpGLLFR--IVGIS
+Q5GSW3_WOLTR/77-416   SYIRYMTIVFCIFQSVTILIGLERM-------NREgtlv-----viepGVMFR--TVGIF
+Q0ANS0_MARMM/83-421   QYTRYLTVLLATGQAFAIAIGMNTPNS---EGVALal---------npGPFFL--ASTVI
+A7IPQ0_XANP2/80-418   QYTRYLTVVLAVFQAYGIAVGLEG-------SGSVva---------dpGWFFR--ITTVI
+SECY_RICCN/70-411     QLSRYLTVLLASFQAYGVAISLESIVT---NTGPVvi---------laGFFFR--ITTVI
+Q2G8W0_NOVAD/80-430   QYTRYGAVLLTAIQGWVLASGLEAYGA--SSGLQAvv---------npGLLFR--VGAVI
+A6E0Q6_9RHOB/73-411   QYTRYGTVALATLQSYGLAVSLQSGD------MVSn-----------pGMFFI--ASCMI
+Q1UZE8_9RICK/67-404   QITRYGTVILATIQGYGLSIGLQSSAD-----LVIn-----------pGLFFT--ITAVS
+Q3R245_XYLFA/76-424   QYSRIGAVILAVIQGGSIALALQNQTA--PGGAAVvy---------apGAAFV--MTAIV
+A4NK90_HAEIN/76-416   KYTRYATVVFATIQAVAISTGLPNM-----LSGLVp----------nvGFSFY--FTSVV
+Q057C4_BUCCC/64-407   QYTKYITFFLSIIQSIGVVISLPFLPGMKNIIVF---------------ADCYFYIIAVV
+Q8D1Z2_WIGBR/82-424   KYTRYGTLFLAIIQSISISISLPNMPG---MQELIi----------nkGIEFY--ITTIT
+Q6F7T2_ACIAD/83-426   QYTRYGTLLLALVQGVGMCAGLIS-------QGITl----------tsGLAFY--IPAVT
+Q6Q8W8_9GAMM/67-407   QYTRYGTAILAFIQASALAVTLSA-------SGLAy----------vpGPTFF--VSAVF
+A9BRX1_DELAS/74-413   QYTRYGTLGLAIFQSLGIAVALESSAG-----LVLs-----------pGFGFR--LTAVV
+Q7DDS8_NEIMB/73-410   KYTRYGTVLLAILQSLGVASFVFQ-------QGIVv----------tsSFEFH--VSTVV
+Q5NHU8_FRATT/74-416   QYTRYLTLALAIVQSFGIVAFVLHQ------DGLVtt---------nnMALFY--LTTIV
+Q7WZR8_9GAMM/64-388   SYLRYLTFMLSVIHSLVVSILFLEKSV-----VYY------------kKSVVY--LTIIL
+A5EX98_DICNV/69-412   QYTRYFTLFLAIMQGFAISRTVMAAGMTISAGS-----------------GFL--LTATI
+Q6MJ32_BDEBA/70-415   QYTRYATVALAIIQGYGISTWLMNSTS--PDGHPLvia------ptvaFLPFQ--IMTII
+B5EFS0_GEOBB/71-411   QYTRYGTIVLAVVQAFGISIGLEAMRG--PAGELVvp---------npGWGFR--LMTVI
+A3EVQ1_9BACT/75-412   RYTRYLTVLIALVQSFGIALGLEGMNNGQ---FVPh-----------pGWSFR--FIVVI
+Q1MPP6_LAWIP/71-412   QYTRYGTVIITLIQGIGIAIGLESMYS--PTNIPIvl---------epGWVFR--IVTVL
+SECY_AQUAE/71-412     EYTKYLTLFVATVQSLGIAFWIRGQVS--PKGIPVve---------npGISFI--LITVL
+Q01WB2_SOLUE/74-438   QWTRYLTIILSILQSFGISQGLMGM------QQGIvi---------npGIGFV--FLTIL
+Q08ZH8_STIAU/26-370   QYTRYGSIVLSVVQGIGISRWLASLGR--SDAGQSgfnqi---vvpddSAWFT--FMTVI
+A6GCG0_9DELT/70-411   QYSRYGTVGLALVQGYFMASWLEGQNT-----PGQtlv-------letGLPFK--LMTML
+Q04PV8_LEPBJ/72-436   QYTKYGTVILCAIQSLAVIQLAKGWST--GTELEParypg--linssvVPYFY--LIGIL
+SECY_BORBU/72-409     KYTKYLTIVAAVVQGYATSLYAKGIPG-----AVTi-----------pFYRYI--FVAIL
+Q73PL2_TREDE/73-413   VWTRIVTVFVALLQSSAVGTWARAIPGAVVISS-----------------PVLHLFITMV
+Q67JW3_SYMTH/69-405   QYTRYGAVVLGLVQAFGIGYALRSYGAFYSNS-------------------WTTLFVIMV
+A7FQ38_CLOB1/69-409   QYTRYGAVILAVIQAFSTYAIIARAGALRDGS-------------------KLNLFIIII
+A6LPT1_CLOB8/69-416   NATRYVSLGIAFILAYGIFATISSSGATVGLT-------------------AIQKTIVVF
+Q0SQG4_CLOPS/69-409   KITRYASIVIGAITAYGSYVIIHNVGALKSNS-------------------PVSMFLILL
+A9KJH4_CLOPH/71-425   EISRYVTIGLSIIESVAMVIGFSGSGALEGGL------------------TFTNIVVITA
+A7VH89_9CLOT/71-420   AITRFLTIGLAILESAGLAINFGRKGFMDSYN-------------------FWTVLTMIV
+A6BIS2_9FIRM/71-421   AITRYLTVGLALIESGAMAVGFGRQGLLVKYN-------------------FVNAAIVVL
+A7VR33_9CLOT/71-423   AITRYVAVVLGLVQGLAYYLYLRGSSY-----EGTpivty---tegaaGVFTA--IVIVL
+A6NXF0_9BACE/71-437   AITRYTTVAIALLQGFGYFTLINANGLVGSDLP-----------------TWLAGIIIVL
+Q250L2_DESHY/70-413   QYTRYGTVILGFIQGFGMTFGLRGALIIPKPGM-----------------EWAIYLLVAL
+Q8R7X3_THETN/69-402   QYTRYLTVVLALIQAIGMTIGLRSAVINPT---------------------FFRLTVIVI
+A4XLR1_CALS8/69-419   EWTRYGTAILAFLQAVGIYFGLKNAQGLTGGVPVIt----------tqGQGFLGFITITL
+A3DJJ2_CLOTH/71-411   EYTRYGAVVLGFLQATAFYFGLAQAVNERN---------------------VLSFITITL
+A8MLG0_ALKOO/69-408   QYQRYATIILALIQATGISVGLFRGALINQD--------------------TFSIIVVIL
+Q18CH6_CLOD6/69-406   KYTKYTALALAVVQALGITLGIVRSALISNS--------------------VFFITTVVI
+B8D0S8_HALOH/72-406   QYTRYGTVVLAIIQAFGITMLIGRHNVIVNPN-------------------LFNLMLIVI
+
+A9B431_HERA2/73-422   --IMVSGSMFLVWMGELIDE-RGI-G-NGLSMIIFGGIV-TALPSM--------------
+A8CRX1_9CHLR/78-422   --SIVAGTMFMVWLGEQITS-YGI-G-NGISLIIFAGIV-AGLPDM--------------
+A2Y4E5_ORYSI/132-498  --FLVLGAMTMTWICDTISE-SGF-G-HGSSLIICVGIL-TGYTDT--------------
+Q7UZW2_PROMP/80-422   --ALVTGSMIVMWFSEIITE-KGI-G-QGASLVIFLNIV-ATLPKA--------------
+Q7NKT4_GLOVI/79-416   --ALTAGAIFVMWLGELITE-KGI-G-NGASLLIFVSIV-SSLPTA--------------
+SECY_GUITH/68-404     --TLTIGSMLIMWFSEQITE-KGI-G-NGPSLLIFINII-SGLPKL--------------
+SECY_CYACA/62-394     --ILISGAMLVMWLADNISY-KGI-G-TGASVIIFVNIA-SAFAKF--------------
+Q85FU6_CYAME/42-325   --LIVSGAMLVMWLAEQMTH-KGI-G-NGTSIFVCSNIA-ANF-----------------
+A0T0J6_PHATR/72-407   --WLTTGAMIVLWLSELITD-YGL-G-NGASLLIYTNII-SSLPNL--------------
+SECY_CYAPA/109-459    --ALTLGAVIVMIIAEQITE-IGL-T-NGSSLLIFINII-ARIPNS--------------
+Q4G351_EMIHU/63-407   --SLTVGSILSMWFAELITE-ESL-G-NGSSMIIFINIV-GGIPNN--------------
+SECY_PAVLU/66-404     --AVTTGSLVLVWLSEVITE-RGI-G-NGSSLLILIGNL-SRFRFLin------------
+Q6B8X0_GRATL/62-395   --ALGTGSLIIMWFAEIITE-YGI-G-NGASLLIFQNII-SGIPKN--------------
+SECY_ANTSP/62-390     --SLTTSSMIAMWFSEIISE-YGV-G-NGPSLLIFQNII-SSIPKN--------------
+A4RW47_OSTLU/65-398   --ALTAGAMILMYIGELLNE-IKL-G-NGTSLLIFANIV-SALPSS--------------
+A7PFA4_VITVI/131-465  --LLTLGSVLTTYIGERISD-LKL-G-NGTSLLIFTSII-SYLPAS--------------
+A7HM32_FERNB/75-404   --SLVAGTMFLLWIGDRITE-KGI-G-NGVSIMIFAGIV-SRYPAY--------------
+A3CK84_STRSV/69-416   --LLATGSMIVTWLGEQITD-KGY-G-NGVSMIIFAGIV-SAIPDMik------------
+Q5FM71_LACAC/68-415   --IMTAGTMLLTWLGDEITD-KGL-G-NGVSVIIFAGII-ARLPSGlw------------
+Q03ZM6_LEUMM/68-416   gsVMTIGTFFAMWLGEMITE-KGL-G-NGVSMIIFAGII-AQAPEGfy------------
+SECY_STAA8/69-413     --VLTAGTAFLIWLGDQITQ-FGV-G-NGISIIIFAGIL-STLPAS--------------
+Q4MG72_BACCE/68-415   --VLTAGTAFLLWLGEQITA-NGV-G-NGISMIIFAGLV-AAIPNVan------------
+Q6F1X5_MESFL/92-454   --VMLAGSYFMLWIADQITI-KGV-G-NGISIVIFIGII-VQLPNQik------------
+Q6KI36_MYCMO/87-436   --ILIAGTVFSIFIGDQITD-KGV-G-NGTTLLIFTGIV-ITLPTQft------------
+Q4A5I3_MYCS5/83-437   --ILISASLFALFLSEQITN-KGV-G-NGTSIIIMTGIA-ARLPFQmq------------
+Q98Q01_MYCPU/90-438   --ILVAGSLFTLFLSEQITD-KGI-G-NGTSLIIFSGIS-LSLPSQfr------------
+Q4AAF9_MYCHJ/85-434   --VLVAGSLFSLFLAEQITD-KGV-G-NGTSLLIFSGIV-VGLPRRfq------------
+Q9PQP1_UREPA/76-434   --LMVGGTYISLFLADLISK-KGV-G-NGITLLILTGIV-ASLFNHfi------------
+SECY_MYCGE/81-430     --AMTAGTYMAVFLGDTISK-KGV-G-NGITLLILSGIL-SQLPQGfi------------
+Q8EUD2_MYCPE/81-433   --GMTAGTYLTIFISDIISK-RGV-G-NGVTLIILSGIV-ASIYPNft------------
+Q7X4E3_9MOLU/69-399   --FLTVGVFISIWLADLITS-KGL-G-NGISILIAVGMV-DKLFKT--------------
+Q5Q069_ASTYP/59-398   --IATAGVAILIWFADLINS-KGI-G-NGTSILIVVSMS-HSLINLfa------------
+O21257_RECAM/57-372   --FLVIGSCFLYFFAKLINI-YGI-G-KGLSFIIFINIV-GSFIDI--------------
+Q74NB9_NANEQ/69-457   --QLMLGVILAYLLDDLSQK-WGF-T-SGINLFILATVS-RELFVQlfnpltqip-----
+Q2EMT2_METVO/30-379   --QLAIGAILLIYLDEIVSR-YGI-G-SGIGLFIAAGVS-QTIFVGalg-----------
+A5UL65_METS3/72-433   --QLVIGAILIIYLDEVISK-WGF-G-SGIGLFIAAGVC-EAIIVGtfsfipg-------
+SECY_METTH/73-436     --QLTIGGILIIFLDEVVSK-WGF-G-SGVGLFIAAGVS-QEIIVGafnplsap------
+SECY_PYRAB/72-448     --QLAFGGIILIVLDELVSK-WGI-G-SGISLFIAAGVS-QRILTRslnpltdpnii---
+Q8TZA9_METKA/75-435   --QLALGGILVIFLDEVVSK-WGI-G-SGVGLFIVAGVS-SQIIIGafnplpsp------
+Q9HIT0_THEAC/82-514   --QLFFGSYLVFLMDEVVSK-YGI-G-SGISLFIAADVS-EQLFIGafnwqalnnal---
+Q2QAQ7_9EURY/161-583  --QLFIGSLLVFLLDELVSK-WGI-G-SGISLFIAAGVA-QSTFVGtlsplavnpg----
+Q0W1W5_UNCMA/75-487   --QVALGGVLILYMDEIVSK-WGI-G-SGVSLFIVAGIA-QALVGGifnwnppypgqamg
+SECY_ARCFU/73-471     --QLFIGGVLIVYMDEVVSK-WGI-G-SGVSLFILAGIA-QSIVVGlfnwvipp------
+Q8TRS4_METAC/72-470   --QIFIGGTLILFMDEVVSK-WGI-G-SGVGLFIVAGIS-QQIVTGifnwefe-------
+A0B9U7_METTP/75-515   --QVCLGGVLILYMDEVVSK-WGI-G-SGVGLFIVAGVS-QQLVTGlfnwatg-------
+SECY_HALMA/73-468     --QMFVGGVLILFMDEVISK-WGV-G-SGIGLFIVAGVS-QRLVGGlltapf--------
+Q2FSG8_METHJ/73-458   --QICIGGVLIFLMDEVVTK-WGI-G-SGVGLFIIAGIS-EAIINGfinwapv-------
+A2SPM5_METLZ/73-458   --QICIGGVLVMFMDEVVSK-WGI-G-SGVGLFIVAGVA-QGLINGffnweat-------
+A0RUE4_CENSY/79-457   igQLMASSIIIMFLDELIQKgWGL-G-SGISLFIMAGVA-QQILWSlfsplpa-------
+A8ME75_CALMQ/77-461   --QMLFGAVIVILLDDLISKgWGI-G-SGISLFILISII-RSIFQStfmpvtv-------
+A3MUZ2_PYRCJ/70-435   --QLLLATVIILLLDDLMSKgWGI-G-SAISLIIFLGVS-RQIFLSlfswdtvqd-----
+SECY_SULSO/73-449     --QLIVATYLILLLDELIQKgWGL-G-SGVSLFILAGVM-KIMFWDmfgiasvs------
+SECY_SULAC/74-443     --QLIIASYIILLLDEMIQKgWGL-G-SGVSLFIMAGIM-KVIFWNmfgivsvq------
+A2BME2_HYPBU/73-444   --QLVFATLVLMWFDEMIRNgWGI-G-SALSLFIVASVV-KGLFWQlagstkvat-----
+SECY_AERPE/73-434     --QLFLGALLVIYFDEVMQKgWGI-G-SAISLFILAGVA-QGVVWSifgtipg-------
+A1RWR3_THEPD/75-456   --QLFVASTFVILMNDMLEKgWGI-G-SAVSLFIAAGVA-QQIFWElfspigpl------
+SC61A_SCHPO/76-459    --QLAAASLIVLLLDELLQKgYGL-G-SGISLFIATINC-ENIFWKafspttyhi-----
+A7E5Q2_SCLS1/76-459   --QLVVAGLIVILLDELLQKgYGL-G-SGISLFIATNIC-ESIIWKafspttint-----
+Q5KC69_CRYNE/75-459   --QLVSASLIVILLDELLTKgYGL-G-SGISLFIATNIC-ESIVWKafspntvnt-----
+SC61A_ASHGO/75-460    --QLVFASFIVLLLDELLIKgYGL-G-SGISLFTATNIA-EQIFWKafapttvnn-----
+Q59MJ6_CANAL/76-459   --QLVFASTIVILLDELLQKgYGL-G-SGVSLFTATNTC-EQVFWKafapttsts-----
+A7SJW4_NEMVE/75-458   --QLFCAGLIVLLLDELLQKgYGL-G-SGISLFIATNIC-ETIVWKafspatint-----
+A0CFY2_PARTE/73-456   --QLTFAGVIVTMLDEMLQKgYGL-G-SGISLFIATNVS-ENILWKsfspitlst-----
+Q22MG2_TETTH/151-538  --QLTFAGIIVILLDDLLSKgHGL-GnSAISVFIAINIC-ETIIWKsfspitypip----
+A0CU87_PARTE/77-460   --QLVFSAIVMIMIDELLSKgYGI-GnSGTSLFIAINIC-ENIMWKafspithkt-----
+Q7RLN0_PLAYO/121-506  --QLFFAGVVVILLDELLQKgYGL-G-SGISLFIATNIC-ETIMWKsfspttint-----
+Q4QGX4_LEIMA/77-467   --QLMVATMICILLDELLQKgWGI-G-SGTSLFIATNVC-DTIIWKafspstint-----
+A5JEK2_NOSBO/75-457   --QLIFSGVIIILLDELLQKgYGL-G-NGVNLFIASNVC-ESIMWRafspkvfft-----
+A2DH65_TRIVA/75-462   --QLVSSAIVVILLDELCQNgYGI-G-SGISLFICTNIC-EMIMWRlfsfnhysm-----
+Q2QM98_ORYSJ/88-448   --QLFAGGVVVVLADLLHETgYGVeGvSAASLLIATNAC-ERAVSHlfspvklrl-----
+Q6AV46_ORYSJ/86-471   --QLVLGGMVAIFLDELLQKgYGF-G-SGISLFTAANTC-EGVVTRalspatmdr-----
+Q6C854_YARLI/70-454   --QLTAAGLVLILLGEIVDKgYSF-G-SGSGLFTALSVS-QNFMWQnlallkvhqefvgs
+SSH1_YEAST/78-465     --QLVGAGIFTTLLAEVIDKgFGF-S-SGAMIINTVVIA-TNLVADtfgvsqikvg----
+Q6BT20_DEBHA/78-475   --QIVTMSFVTTLMVEIFDKgYCF-G-SGVLCFVALQVA-TNLIRDvvglelvslp----
+A5DE75_PICGU/20-414   --QVFVMSAVMTLLVEVFDKgYGF-G-SGILCFIALQAA-SDLVKNiiglevvkla----
+A3GFV9_PICST/78-476   --QFLSWSFIITLIVEVFDKgYAF-G-SGALSFLALQTA-TNLIAElvgleifpin----
+A5DWJ5_LODEL/34-436   --QIFTWQIVLTLIVEIFDKgYGF-G-SGILSFLALQNA-TSFIAElvglemfpvv----
+Q5A2C9_CANAL/5-404    --QITAWSWIVTLLVEIFDKgYSF-G-SGILCFLAIQSS-TNFIANllglenfpvv----
+Q74L41_LACJO/64-372   --ILSAGSCLVVWLCYRNMK-YGV-G-ASAPVILTSILN-GAIP----------------
+B3XPQ8_LACRE/65-377   --MLTAGSMFVVWLGNMNMK-FGI-G-GTITLILFNIIS-GSIP----------------
+A1C3L4_STRPA/70-403   --LLTTGTFILNWLCKINSE-RGI-G--GMTVVILVNMI-LTFQSN--------------
+Q3DVD6_STRAG/65-395   --ILVTGAYIISWIGNLNAE-YGF-G--GMTILVVVGML-VGQFNN--------------
+A5LN99_STRPN/64-389   --LLIAGTFFLVWLSDLNAS-MGI-G--GSIVILLSSMV-LNIPQD--------------
+A3CM55_STRSV/64-391   --VLMAGTYFLIWLTDLNAA-MGL-G--GSIMIVMASMI-AYIPQD--------------
+Q03HZ8_PEDPA/65-396   --VLVAGAMIVAWMSDMITK-YGI-G--GSGVLILPGMI-DSIPRV--------------
+A5IW80_STAA9/64-384   --ILVTGTMLLVWLADKNSR-YGI---AGPMPIVMVSII-KSMMH---------------
+Q4L9N9_STAHJ/61-383   --ILVAGTMLLVWLADQNIT-YGI---CGPMPIVLTSLI-KSLFNN--------------
+Q5HKR3_STAEQ/61-380   --VLITGTLLMVWLADQNTT-YGI---SGPMPIVLMSLV-KSIFN---------------
+Q9RSK8_DEIRA/68-413   --TQVAGIAFTMWIGERITE-VGI-G-NGISLIITAGII-AVYPRE--------------
+Q5SHQ8_THET8/71-413   --TQVAGIALLLWMAERITE-YGI-G-NGTSLIIFAGIVvEWLPQ---------------
+SECY_CORGL/73-424     --TMTAGAVLVMWMGELITE-KGV-G-NGMSLLIFAGIA-TRLPTDgm------------
+A8LB12_FRASN/74-414   --TMTAGTAVIMWMGELITA-RGV-G-NGMSLLIFTSIA-AALPSQgg------------
+Q83NQ1_TROW8/73-424   --VMTAGTGLIMWLGELITE-RGI-G-NGMSILIFTSIA-AGFPGV--------------
+Q8G3Z9_BIFLO/74-421   --IMTGGTGLIMWMAELVTD-KGI-G-QGMSILIFMSIC-SGF-----------------
+A7B9M4_9ACTO/72-414   --VMMAGTGVIMWLGELITE-RGI-G-NGMSLLIFTSIA-ARLPEQ--------------
+SECY_CHLTR/73-433     --VMITGTLLLMWVGEQISD-KGI-G-NGISLIITLGIL-ASFPSV--------------
+Q1AU49_RUBXD/70-408   --TLTTGVMVTMWFGELITQ-RGL-G-NGISLIITASIL-SQAPNA--------------
+Q8RIH6_FUSNN/75-411   --TLTAGTVFLMWVGEQISI-KGI-G-NGVSLIIFLNVI-SRAPSS--------------
+A6DRC9_9BACT/79-428   --IVTASAILIMWLGEQITD-KGL-G-NGASIIITINVL-SSMPQA--------------
+C0ACZ0_9BACT/94-454   --FMTAGTMLLTWLGEQITQ-RGI-G-NGISLLITIGII-SDLPGA--------------
+Q1Q157_9BACT/75-434   --LLTTGTMILMWIGEQIEE-HGI-G-SGISIVIMVGII-ERLPWAf-------------
+A6CGP8_9PLAN/77-435   --TMTTGTVFLMWIGEQIDA-YGI-G-NGISLLIMAGIL-ARMPQAgw------------
+B4S5A8_PROA2/73-417   --ILTASTVFVMWLGEKITE-RGI-G-NGISLIIMIGIL-ARFPQS--------------
+Q2S3P5_SALRD/75-414   --VLTSGTAFVMWLGERISE-DGI-G-NGISLIITIGII-AFLPQA--------------
+A1ZGT4_9SPHI/72-404   --ILTAGTVFTMWLGEKIDD-RGI-G-QGISLLIMIGII-SRLPQS--------------
+A6EHP4_9SPHI/71-408   --VLAAGTLFVMWLGEKITD-KGI-G-NGISLIIMVGII-ARLPIA--------------
+Q11QD2_CYTH3/72-411   --TLISGTMFCMWIGERITE-KGI-G-NGISMLIMIGIV-SRLPFA--------------
+Q1VTY0_9FLAO/73-421   --ILTTGCIFAMWLGEKITD-KGI-G-NGISLLIMVGII-ATLPQA--------------
+Q1NYZ7_9FLAO/72-422   --CITTGTFFTMWLGEKIND-KGI-G-NGNSLIIISGIL-SRFIYS--------------
+A5KHP6_CAMJE/62-402   --SMLAGTMLLMWLGEQITQ-RGI-G-NGISLIIFAGIV-SGIPRA--------------
+A4EA78_9ACTN/52-389   --TLTAGAMLIMWIGELITQ-RGI-G-NGMSLIIFANIM-AGLPQA--------------
+Q2GEC0_NEOSM/73-411   --TLVCGTFSLIWLGQQINS-RGI-G-NGMSLIIFAGIV-AEMPAI--------------
+Q3YRM8_EHRCJ/72-412   --SLLGGTMFLLWLGERINK-NGI-G-NGVSMIIFTGIV-AELPGS--------------
+Q5GSW3_WOLTR/77-416   --SLLGGTMFLIWLGEQISA-SGI-G-NGISLIIFTGII-SELHNA--------------
+Q0ANS0_MARMM/83-421   --TLVGATMLLLWLGEQITA-RGV-G-NGVSLIIFAGII-SAVPGV--------------
+A7IPQ0_XANP2/80-418   --TLTGGTMFLMWLGEQITS-RGI-G-NGTSLIIFGGIV-AELPGA--------------
+SECY_RICCN/70-411     --TLVVGTMLLMWLGEQITQ-RGI-G-NGTSLIIFIGII-SGVPSA--------------
+Q2G8W0_NOVAD/80-430   --SLIGGTMFLLWLGEQITS-RGI-G-NGVSLIIMAGIV-AQMPKF--------------
+A6E0Q6_9RHOB/73-411   --TLIGGTMFLMWLGEQITA-RGV-G-NGISLIIFVGII-AEVPAA--------------
+Q1UZE8_9RICK/67-404   --TIVAGTMFLMWLGEQITQ-RGI-G-NGISLIIFAGIV-AEIPRA--------------
+Q3R245_XYLFA/76-424   --ALTAGTVFLMWVGEQVTE-RGI-G-NGVSMIIFAGIV-AGLPGS--------------
+A4NK90_HAEIN/76-416   --SLVTGTMFLMWLGEQITE-RGI-G-NGISILVFGGIV-AGLPSA--------------
+Q057C4_BUCCC/64-407   --SLVTGTIFLMWLGELITT-KGV-G-NGVSLIIFSGII-SGLPAS--------------
+Q8D1Z2_WIGBR/82-424   --SLVTGTIFLMWLGEQITS-RGI-G-NGISILIFSGII-AGLPIE--------------
+Q6F7T2_ACIAD/83-426   --SLVAGTMFLMWLGEQITE-RGI-G-NGISMIIFAGIV-AGLPNQ--------------
+Q6Q8W8_9GAMM/67-407   --SVVAGTMFLMWLGEQVSD-RGI-G-NGISIIIATSIL-TGIPGA--------------
+A9BRX1_DELAS/74-413   --SLTAGTMFLMWLGEQITE-RGL-G-NGISILIFGGIA-AGLPSS--------------
+Q7DDS8_NEIMB/73-410   --SLVTGTMFLMWLGEQITE-RGI-G-NGISLIITAGIA-SGIPSG--------------
+Q5NHU8_FRATT/74-416   --SVTTGSMFLMWLGEQITE-RGV-G-NGISLLIFSGIV-ANLPFE--------------
+Q7WZR8_9GAMM/64-388   --TFVTGAIFLMWLGEQITD-KGI-G-NGISLIILSGLV-SVIPNA--------------
+A5EX98_DICNV/69-412   --GLTAGALFMMWLGEQITE-RGI-G-NGISMLIFGGIA-VNMPSG--------------
+Q6MJ32_BDEBA/70-415   --TLTAGTCFIMWLGEQITE-RGI-G-NGTSLIIFTGIA-AAIPGG--------------
+B5EFS0_GEOBB/71-411   --TLTAGTAFIMWLGEQMSE-KGI-G-NGISLIIFAGIV-ARIPTA--------------
+A3EVQ1_9BACT/75-412   --TLTAATTFVMWIGEQITE-RGV-G-NGISLIIFSGII-ARLPAA--------------
+Q1MPP6_LAWIP/71-412   --TLTAGTVLIMWLGEQISE-KGI-G-NGISLIIFSGIV-VGIPGA--------------
+SECY_AQUAE/71-412     --TLVAGTMFLVWIADRITE-KGI-G-NGASLIIFAGIV-ANFPNA--------------
+Q01WB2_SOLUE/74-438   --SLTTGTAFIMWLGEQISE-RGV-G-NGMSLIIFTGIV-VGLPNA--------------
+Q08ZH8_STIAU/26-370   --SLTAGTAFIMWLGERITE-RGI-G-NGISLIIFAGIV-AGLLPN--------------
+A6GCG0_9DELT/70-411   --SLTAGTCFLMWLGEQITE-RGI-G-NGISLIIFAGII-ADMPTA--------------
+Q04PV8_LEPBJ/72-436   --SITTGTVLLIWLGEQITE-RGI-G-NGISLLIFAGII-GRLPES--------------
+SECY_BORBU/72-409     --TVTTGTFILLWFGEQINQ-RGV-G-NGTSLIIFSGIV-VRLQAA--------------
+Q73PL2_TREDE/73-413   --TVTTGTMITVWMGEQITA-RGI-G-NGISMLIFAGIV-ARLPQA--------------
+Q67JW3_SYMTH/69-405   --SLTAGTALVMWIGEEITE-KGI-G-NGISLIIFANIV-SRLPYS--------------
+A7FQ38_CLOB1/69-409   --TVTTASTFLMWFGDKITE-KGI-G-NGISLIIFVNIV-SRFPST--------------
+A6LPT1_CLOB8/69-416   --ALVVGTTFCMWLGDQLTV-KGI-G-NGTSILIFVNII-SRVPAT--------------
+Q0SQG4_CLOPS/69-409   --TLVVGSTFLMWLGDQITV-KGV-G-NGTSLIIFANIL-SSLPMT--------------
+A9KJH4_CLOPH/71-425   --SFTAGSAILMWLGERITE-KGV-G-NGISVILLINIV-ANMPRD--------------
+A7VH89_9CLOT/71-420   --ILTGGSAFVMWLGERVTD-RGV-G-NGISIILLINIV-STMPND--------------
+A6BIS2_9FIRM/71-421   --TLTAGSAFLMWIGERITE-KGV-G-NGISIVLVINII-SRIPSD--------------
+A7VR33_9CLOT/71-423   --VFTAGTAMMMWLGEQINQ-KGI-G-NGISILLFAGIV-ARLPDTvn------------
+A6NXF0_9BACE/71-437   --TFTAGSAFVMWLGEQITE-FGI-G-NGISIILFAGIV-SRFPSM--------------
+Q250L2_DESHY/70-413   --ILTAGTAFLMWLGERITE-NGI-G-NGISLIIFAGIV-AGVPDA--------------
+Q8R7X3_THETN/69-402   --TLTAGTTFLMWLGERITE-NGL-G-NGSSLIIFAGII-SRIPNM--------------
+A4XLR1_CALS8/69-419   --ALTAGTVFLMWIGEQITE-NGI-G-NGISLLIFAGII-SRIPNG--------------
+A3DJJ2_CLOTH/71-411   --TFTAGTAFLMWLGEQITE-YGI-G-NGISLLIFAGIV-SRGPRG--------------
+A8MLG0_ALKOO/69-408   --TLTAGTAFLMWLGEQITE-KGI-G-NGISLLIFAGII-ASLPSS--------------
+Q18CH6_CLOD6/69-406   --TLVSASMLVMWIGDKITE-KGI-G-NGSSVIIFAGII-SRIPTD--------------
+B8D0S8_HALOH/72-406   --SLTAGTAFLMWLGEQITD-KGI-G-NGISIIIFTSII-SRFPSY--------------
+
+A9B431_HERA2/73-422   ------------------VY---QAITTSS----------------------SGNNVIG-
+A8CRX1_9CHLR/78-422   ------------------IG---RGLMASD-------------------------QFAG-
+A2Y4E5_ORYSI/132-498  ------------------LH---KMLTQFS---------------------GNWYSCWH-
+Q7UZW2_PROMP/80-422   ------------------LS---STIEKAQ--------------------TGDRGDVLG-
+Q7NKT4_GLOVI/79-416   ------------------FS---QTFQLLQ---------------------ADSSRVAG-
+SECY_GUITH/68-404     ------------------LQ---SQIQSTR----------------------LNIQALD-
+SECY_CYACA/62-394     ------------------LL---NQLFVHS------------------------IKFLD-
+Q85FU6_CYAME/42-325   ------------------LH---HPIEAPW------------------------------
+A0T0J6_PHATR/72-407   ------------------SK---TILSENS-----------------------QNFTLG-
+SECY_CYAPA/109-459    ------------------IE---QLFNSNI------------------NWT--FPMISS-
+Q4G351_EMIHU/63-407   ------------------LSslsKTFSAAN----------------------LASAIPL-
+SECY_PAVLU/66-404     ----------------kdDF---DSLNVSS------------------------QSNLY-
+Q6B8X0_GRATL/62-395   ------------------IQ---NYKINIY----------------------DKQTIIN-
+SECY_ANTSP/62-390     ------------------LQ---NYTFNIG----------------------TTNTVLN-
+A4RW47_OSTLU/65-398   ------------------VG---QTVSMAQ----------------------EKGDSSV-
+A7PFA4_VITVI/131-465  ------------------FG---RTVAQAF----------------------QDGNYIG-
+A7HM32_FERNB/75-404   ------------------FR---SAVLG-------------------------NLNIFG-
+A3CK84_STRSV/69-416   ----------------giYE---DYFVNIP-------------------SERLTSSFIF-
+Q5FM71_LACAC/68-415   ----------------qiYK---EEIINNS------------------ASDR-WQGILF-
+Q03ZM6_LEUMM/68-416   ----------------eiFK---ENILQAD------------------SSDM-LNGWIF-
+SECY_STAA8/69-413     ------------------LI---QFGQTAF-----------------vGQEDTSLAWLK-
+Q4MG72_BACCE/68-415   ----------------qiYL---QQFQNAG--------------------DQLFMHIIK-
+Q6F1X5_MESFL/92-454   ----------------atYD---FWIPSNE------------------SINVFFDGIIK-
+Q6KI36_MYCMO/87-436   ----------------atFN---ALVGEQQ------------------RVSSLSNGIVT-
+Q4A5I3_MYCS5/83-437   ----------------naFK---IFVGDLS-------------------QSGTLVGILN-
+Q98Q01_MYCPU/90-438   ----------------aaFN---VLVGTNK--------------------TTLFTGLIH-
+Q4AAF9_MYCHJ/85-434   ----------------haFE---YLVDLSF-------------------SSSLISQVLS-
+Q9PQP1_UREPA/76-434   ----------------aiFS---NLGSLTS---------------------SKVSQIIG-
+SECY_MYCGE/81-430     ----------------aaYN---VLSGIVI------------------TLTPQLTAAIS-
+Q8EUD2_MYCPE/81-433   ----------------svFQ---VLTGSSQ-------------------ISNQLLRYFS-
+Q7X4E3_9MOLU/69-399   ------------------FK---YLLSNSN-----------------------GFETQR-
+Q5Q069_ASTYP/59-398   ----------------nlNK---SYLSKNT---------------------FLTLKTFN-
+O21257_RECAM/57-372   ------------------FY---KYLIQIE-----------------------TLNVKY-
+Q74NB9_NANEQ/69-457   ---------gtptppigkIP---QIFYFIS-------------------QGLYTEAIVV-
+Q2EMT2_METVO/30-379   --------------pqgyLW---KFFSALV-------------------SGSMGPALEY-
+A5UL65_METS3/72-433   ----------pggvyggaIP---AFIQSFW-----------------------SSSIDF-
+SECY_METTH/73-436     ---------tqpgvpagrIT---GFLYLLF-------------------TGQSPDFQYY-
+SECY_PYRAB/72-448     ------dpltgkpaivgaIP---YFIQHIL--------------------KGDLKGALYr
+Q8TZA9_METKA/75-435   ---------qqpgrpagaVW---AFLYSAM---------------------QGTPDWTL-
+Q9HIT0_THEAC/82-514   -------tysltnppagaFP---KMFYIIMhss-----------ssylLT-NGVVQILF-
+Q2QAQ7_9EURY/161-583  -------ayglqnppagtLP---MIFYTLRtat-----------fsemVTANGFESILLg
+Q0W1W5_UNCMA/75-487   lnvdiaglgarenlpigiIF---RWEWLLNnig-----------lsqlLTGENLIVLLY-
+SECY_ARCFU/73-471     ----------nsampagiIP---RWIWIAQnyp-----------ldqlFTGSGLAFLLI-
+Q8TRS4_METAC/72-470   -----------eglpvglIP---KWIYIAQntg-----------adylFSGEGLMFLLV-
+A0B9U7_METTP/75-515   ----------dgglpigiVP---KWISIIRlgli---------gldeiFTAEGLKFIFV-
+SECY_HALMA/73-468     -----------lgnsegiIY---TWYLFITgerg----------tgpvLAADGLQTVLL-
+Q2FSG8_METHJ/73-458   ----------ndmypvgfFP---RLFAVVL---------------------DGANFIQY-
+A2SPM5_METLZ/73-458   ----------tdqfavgfFP---RLFQVIA---------------------DGSNFIEY-
+A0RUE4_CENSY/79-457   ----------gdgfavgiFP---FIGQWAS------------------VGMGNFEDIFFr
+A8ME75_CALMQ/77-461   ----------gagellgiIP---ALVAAVYsa-------------avsHTLAPLLSIVYr
+A3MUZ2_PYRCJ/70-435   --------sngntqvfglLP---ALGVALYdl-------------ftsGNANTLLGLVNr
+SECY_SULSO/73-449     ----------sqnlpigfFP---ALFTALA-------------------SHSDVLNLIVn
+SECY_SULAC/74-443     ----------sqnlpvgfFP---LLVSYIT-------------------SGRNLQEIVLn
+A2BME2_HYPBU/73-444   --------pegqpvyygwLA---HVVSTGD-----------------------LGVLRR-
+SECY_AERPE/73-434     -----------vaqdyglVP---AIISNPD-----------------------LTLLARp
+A1RWR3_THEPD/75-456   ----------gdglyyglFP---SLFSALV-----------------sGNSTLLMHVVVr
+SC61A_SCHPO/76-459    ---------angvqfegaVI---NFVYVMFt---------------wdNKAAALYQAFFr
+A7E5Q2_SCLS1/76-459   ---------grgpefegaVI---ALFHLLLt---------------wpNKQRALQEAFYr
+Q5KC69_CRYNE/75-459   ---------grgpefegaII---ALIHLLFt---------------wnDKTRALKEAFYr
+SC61A_ASHGO/75-460    ---------grgtefegaVV---ALFHLLSv---------------rkDKKRALVEAFYr
+Q59MJ6_CANAL/76-459   ---------akgtefdgaVV---AMFHLLGs---------------rkDKKRALIESFYr
+A7SJW4_NEMVE/75-458   ---------grgtefegaVI---ALFHLLAt---------------rtDKVRGLREAFYr
+A0CFY2_PARTE/73-456   ---------eagtqfegaII---NFFHLLFt---------------kqNTLQALYYAFFr
+Q22MG2_TETTH/151-538  --------gfekeqyegaIL---NLFHSLFa---------------idNKFVALQNAFYr
+A0CU87_PARTE/77-460   ---------elgleyegaII---ALLHGLFv---------------qsDKISALQSAILr
+Q7RLN0_PLAYO/121-506  ---------dkgiefegaII---SLIYCLFt---------------efNKISALKKSFYr
+Q4QGX4_LEIMA/77-467   ---------grgaefegaII---AFFHLLVs---------------rtDKVRALREAFYr
+A5JEK2_NOSBO/75-457   ---------grgiefegsLI---AFFHLLIv---------------rkNKFAALYEAFFr
+A2DH65_TRIVA/75-462   ---------grgteyeglVI---AFFHYLFt---------------rkNKLRALRDIVFr
+Q2QM98_ORYSJ/88-448   --------agagpefegpVF---AVTHRVAaap-----------pswrHKAGALLFTLLr
+Q6AV46_ORYSJ/86-471   ---------grgaefvgaVT---AAAHLLAt---------------raRKLSAVREAFFr
+Q6C854_YARLI/70-454   ---ipallmglwknglfnFG---GSYRYVI-------------------ENSFFRQNLP-
+SSH1_YEAST/78-465     --------eddqteaqgaLI---NLIQGLRsk--------------hkTFIGGIISAFNr
+Q6BT20_DEBHA/78-475   --------nsnkfesygaAM---NFIKNFR-----------------iNFKSLNYNVLN-
+A5DE75_PICGU/20-414   --------nsnkfesvgaLM---NLIRSFSf----------------kTLGKNIYNSFNr
+A3GFV9_PICST/78-476   --------nsnkfesygaLI---NFTRNFSfdi-----------skigTNVYNSFTRLQ-
+A5DWJ5_LODEL/34-436   -------nntlkfeslgaLL---NLVRNFSif-------------sptTTINQIWHAFTr
+Q5A2C9_CANAL/5-404    --------nsnkfesygaLM---NLIKNFSif-------------npkQTVYQIWHSFFr
+Q74L41_LACJO/64-372   -----------------------NIISNVK------------------LLLTMKYAWIW-
+B3XPQ8_LACRE/65-377   -----------------------TLLRSIK------------------MLAKQSYGPLW-
+A1C3L4_STRPA/70-403   ------------------II---RYFSVQQ------------------------FKFSS-
+Q3DVD6_STRAG/65-395   ------------------IP---LIFELFQ-----------------------DGYQLA-
+A5LN99_STRPN/64-389   ------------------VL---ETFQTVH------------------------IPTGI-
+A3CM55_STRSV/64-391   ------------------IW---NSIQELK------------------------ISSLW-
+Q03HZ8_PEDPA/65-396   -----------------------LLYGQGL----------------------GSGAVFF-
+A5IW80_STAA9/64-384   -----------------------QKMEYID------------------------ASHIV-
+Q4L9N9_STAHJ/61-383   -----------------------QHFFKLS------------------------VSVLL-
+Q5HKR3_STAEQ/61-380   -----------------------THFPKLN------------------------SSASL-
+Q9RSK8_DEIRA/68-413   ------------------IA---ATAQLLR---------------------SEQTTLLS-
+Q5SHQ8_THET8/71-413   ------------------IL---RTIGLIR---------------------TGEVNLVA-
+SECY_CORGL/73-424     ----------------niLG---------------------------------NSGGVV-
+A8LB12_FRASN/74-414   ----------------riLQ---------------------------------VAGGVV-
+Q83NQ1_TROW8/73-424   ------------------LV---GVYQT--------------------------RGFGM-
+Q8G3Z9_BIFLO/74-421   ------------------LP---QLWEIGY------------------GTNGTDGDWLK-
+A7B9M4_9ACTO/72-414   ------------------LL---SIGQA--------------------------GKWGS-
+SECY_CHLTR/73-433     ------------------LGsifNKLNLGS------------------QDPS-EFGIVS-
+Q1AU49_RUBXD/70-408   ------------------VR---TLIE--------------------------DGSVLT-
+Q8RIH6_FUSNN/75-411   ------------------VI---QTIQTMQ----------------------GNKFLIP-
+A6DRC9_9BACT/79-428   ------------------FA---AVYSK-Y------------------QE-G-EWNLVQ-
+C0ACZ0_9BACT/94-454   ------------------MGtlwTLLRAPV------------------GT-Q-GISMIS-
+Q1Q157_9BACT/75-434   ----------------nqIV---QNFTFSV------------------APAEHQIGIVK-
+A6CGP8_9PLAN/77-435   ----------------slIE---PAFEKGI------------------ALGT-DTGIDR-
+B4S5A8_PROA2/73-417   ------------------VI---AEFQSVS---------------------LGSKNWII-
+Q2S3P5_SALRD/75-414   ------------------LY---NEIGLI------------------------GDNFFI-
+A1ZGT4_9SPHI/72-404   ------------------LV---EEVVARS---------------------T-GSQVLI-
+A6EHP4_9SPHI/71-408   ------------------LY---QEITSRI---------------------VSDGGLIA-
+Q11QD2_CYTH3/72-411   ------------------LM---AEVSSKN-----------------------LEGALP-
+Q1VTY0_9FLAO/73-421   ------------------FI---QEFISRV--------------------TESNGGLIL-
+Q1NYZ7_9FLAO/72-422   ------------------II---SEIFNRL------------------KNNNKLLGIII-
+A5KHP6_CAMJE/62-402   ------------------IS---GTVGQ-I------------------NS-G-EMNFLT-
+A4EA78_9ACTN/52-389   ------------------IF---SSTE------------------------GNAGGIIT-
+Q2GEC0_NEOSM/73-411   ------------------FG---NLFSGIG---------------------SPGSGILG-
+Q3YRM8_EHRCJ/72-412   ------------------FS---SMFLL--------------------GKNG-NVPIFV-
+Q5GSW3_WOLTR/77-416   ------------------FS---FLLT--L------------------NKNG-SMSLLI-
+Q0ANS0_MARMM/83-421   ------------------IG---GALSQ-A------------------SS-T-GDGTVL-
+A7IPQ0_XANP2/80-418   ------------------FV---RTLQL-G------------------RE-G-AISTPL-
+SECY_RICCN/70-411     ------------------II---SMFEL-S------------------RK-G-ALS-PL-
+Q2G8W0_NOVAD/80-430   ------------------FG---NLFEG-G------------------RT-G-SISPFL-
+A6E0Q6_9RHOB/73-411   ------------------LA---QFFAS-G------------------RS-G-AVSPAV-
+Q1UZE8_9RICK/67-404   ------------------LV---TTFEL-G------------------RT-G-AVSTIM-
+Q3R245_XYLFA/76-424   ------------------VL---QTIDA-F------------------RS-D-ALSLIS-
+A4NK90_HAEIN/76-416   ------------------IL---QTIEQ-A------------------RQ-G-QMHPLV-
+Q057C4_BUCCC/64-407   ------------------VI---RTYKLIK---------------------IKNFSFLY-
+Q8D1Z2_WIGBR/82-424   ------------------VI---KSIEQ-A------------------RQ-G-NLNIIT-
+Q6F7T2_ACIAD/83-426   ------------------VI---QAFTS-V------------------QN-G-QGSLIG-
+Q6Q8W8_9GAMM/67-407   ------------------IG---QALEQ-S------------------RQ-G-DLSILL-
+A9BRX1_DELAS/74-413   ------------------IG---GLLEL-V------------------RT-G-AMSILA-
+Q7DDS8_NEIMB/73-410   ------------------IA---KLVTL-T------------------NQ-G-SMSMLT-
+Q5NHU8_FRATT/74-416   ------------------IS---NTLSQ-A------------------NQ-H-VISYLS-
+Q7WZR8_9GAMM/64-388   ------------------LG---RTLFLTI------------------KD-S-SWMYIQ-
+A5EX98_DICNV/69-412   ------------------IL---GLFNQAK---------------------IGEIGYGR-
+Q6MJ32_BDEBA/70-415   ------------------AQ---QLWEL-V------------------RT-G-EMRFAL-
+B5EFS0_GEOBB/71-411   ------------------IG---NSFRL-I------------------KT-G-ELSLFV-
+A3EVQ1_9BACT/75-412   ------------------II---NTYKL--------------------YNQG-EISGFL-
+Q1MPP6_LAWIP/71-412   ------------------IV---KTYQL-I------------------IL-G-DMNILI-
+SECY_AQUAE/71-412     ------------------VI---QFYEK-V------------------KT-G-DIGPLT-
+Q01WB2_SOLUE/74-438   ------------------IA---NIYQH-V------------------FTIH-DWGAIT-
+Q08ZH8_STIAU/26-370   ------------------GK---TLLDM-T------------------AQ-G-AIEAAA-
+A6GCG0_9DELT/70-411   ------------------SY---QLAQKAI------------------DDPE-NFGPLP-
+Q04PV8_LEPBJ/72-436   ------------------MV---QLFST-----------------------D-TMDALN-
+SECY_BORBU/72-409     ------------------LF---NLFQS-M------------------QDPSQNVNPVF-
+Q73PL2_TREDE/73-413   ------------------VW---ELIKLVS---------------------NNELNLVF-
+Q67JW3_SYMTH/69-405   ------------------IY---NEILL--------------------LRAG-QRNIFQ-
+A7FQ38_CLOB1/69-409   ------------------IY---SIVGL--------------------QKAE-TVNFVE-
+A6LPT1_CLOB8/69-416   ------------------IA---SMMTL--------------------QQAG-SASIVE-
+Q0SQG4_CLOPS/69-409   ------------------GY---QIYNL--------------------SKIG-KINVVE-
+A9KJH4_CLOPH/71-425   ------------------IY---GLIEKFV------------------LGESVVKGVTA-
+A7VH89_9CLOT/71-420   ------------------FK---NIYTQFI------------------KDKDPVRMCLI-
+A6BIS2_9FIRM/71-421   ------------------MK---TLFDQFV------------------KGKAIASACLA-
+A7VR33_9CLOT/71-423   ----------------ilVQ---ALQAAWQ------------------APDSFGQYYFF-
+A6NXF0_9BACE/71-437   ------------------LM---NMVQGVQrwsmhlsdeeisamsngeAFRNSLVHPAM-
+Q250L2_DESHY/70-413   ------------------IK---RIAGL--------------------LSVG-EINVFS-
+Q8R7X3_THETN/69-402   ------------------IY---LTHEY--------------------IKAG-TSNIFG-
+A4XLR1_CALS8/69-419   ------------------AV---SLWNYVA-----------------kLNEFSLTSIIG-
+A3DJJ2_CLOTH/71-411   ------------------ILylwDLYRLER------------------LGKG-ILGIFG-
+A8MLG0_ALKOO/69-408   ------------------LF---TTFAL--------------------TKAG-QINPLA-
+Q18CH6_CLOD6/69-406   ------------------VI---KISQQ--------------------VKSG-EVAPWV-
+B8D0S8_HALOH/72-406   ------------------IH---RNWEL--------------------YKTG-DITALN-
+
+A9B431_HERA2/73-422   --------G--------ILLLIVTLAT-VVGIVLITEGQRRIPVQYAKR---VRG-----
+A8CRX1_9CHLR/78-422   --------L--------AVYAFMALLT-TVLIVIFTEAHRRIPVQYAQT---VIRs----
+A2Y4E5_ORYSI/132-498  --------Y--------ILGIAGTFILvTMGAVLVTEGCRKIKLQYYGF------klasg
+Q7UZW2_PROMP/80-422   --------I--------AVLLGVFLLT-IVGIIFVQEGARRIPIVSAKR---QIG-----
+Q7NKT4_GLOVI/79-416   --------V--------VVLLLVFLAM-IVGIVFVQEGTRRIPIISARR---QVG-----
+SECY_GUITH/68-404     --------I--------FVLVFIFSVM-IIGIIFIQEGIKRIPIISARQ-----------
+SECY_CYACA/62-394     --------F--------ASYFALIVFS-IACIVFVQEAIRKVPIISAKQ-----------
+Q85FU6_CYAME/42-325   -----------------SLAMVVLIFT-MLGMIALQEAVRAIPILSAKQ-----------
+A0T0J6_PHATR/72-407   --------S--------EIGIVLLIFTsLYGIVFLQEGVRIIPLISSKQ---LNQ-----
+SECY_CYAPA/109-459    --------L--------ILSLSLSFIT-MFVIIGLQESGRPVPVLIARQ---EAErqkfn
+Q4G351_EMIHU/63-407   --------L--------LTGLGIYLGI-VLIIIFFQESYKKITIVSAKQlnlTTS-----
+SECY_PAVLU/66-404     --------I--------IYIIITLVSM-LIFSTLSQEGARKIPVVSAKQ-----------
+Q6B8X0_GRATL/62-395   --------G--------SFLFLLFVLI-LIINILIQECKRKIMIVSAKQ-----------
+SECY_ANTSP/62-390     --------G--------SLILSFGIII-LIINILIQEGERKIAILSAKQ-----------
+A4RW47_OSTLU/65-398   --------L--------AVFFGAFALT-TLGIVYVQEAERKIPMNYSTR-----------
+A7PFA4_VITVI/131-465  --------L--------VIIIISFFLL-VLGIVYVQEAERKIPLNYASR-----------
+A7HM32_FERNB/75-404   --------W--------IFLIAVAIFM-VVAIIYVQQAERRIKIEYATR---MVGr----
+A3CK84_STRSV/69-416   --------V--------GILIVAVLLI-IYFTTFVQQAEYKIPIQYTKV-----------
+Q5FM71_LACAC/68-415   --------F--------IAVIVAILIV-TQLVTWVEQADRRIPIQYTRR---ATI-----
+Q03ZM6_LEUMM/68-416   --------V--------VVLVIAMILV-VAFTTWSYEGTRRLQMQYTRS---ATS-----
+SECY_STAA8/69-413     --------V--------LGLLVSLILL-TVGAIYVLEAVRKIPIQYAKK-----------
+Q4MG72_BACCE/68-415   --------M--------LLIGLVILAI-VVGVIYIQQAVRKIPIQYAKA---VSGn----
+Q6F1X5_MESFL/92-454   --------F--------SIYMLVFFVV-IFSVVLMNEAERKVPIQQTGS---GLI-----
+Q6KI36_MYCMO/87-436   --------F--------ISYVFGFIIL-MYIIGFVYNAERRIPIQQVGA---GRA-----
+Q4A5I3_MYCS5/83-437   --------F--------VTYIFIYLAC-LMVIGIFYNAERRIPIQQTGA---GRS-----
+Q98Q01_MYCPU/90-438   --------F--------LLYLFGYLLL-IVIIVFVYLAERRIPIQQTGA---GLS-----
+Q4AAF9_MYCHJ/85-434   --------F--------ILYIFGFLLI-LLIAIYVYLAERKIPIQQTGS---GMS-----
+Q9PQP1_UREPA/76-434   --------F--------ILYILFYIMI-LIGVVFVNNSTRKIPVQQTGQ---ALI-----
+SECY_MYCGE/81-430     --------F--------FIYFLAFLVL-LFATTFITQATRKIPIQQSGQ---GLV-----
+Q8EUD2_MYCPE/81-433   --------F--------AVYLVFFFLI-LLATTFVNGSVRKIPIQQIGQ---GLS-----
+Q7X4E3_9MOLU/69-399   -----------------ILILVSYFVL-LILTIILSSAYLKIPINYAXN-----------
+Q5Q069_ASTYP/59-398   --------F--------ACIVLLLLLF-LIFTVVVQITSLKIPINYARN-----------
+O21257_RECAM/57-372   --------L--------VFLLFVQCLFcGIIYFYIDFLFLKIPIIKLNF------vg--n
+Q74NB9_NANEQ/69-457   -----------------GLQLLVIVLV-ILLSVYFYMVKIPIPTSFGKI-----------
+Q2EMT2_METVO/30-379   -----------------ILPILATIAV-FFVVVYAESIRVEIPLAHGRV-----------
+A5UL65_METS3/72-433   ---------s------vLIPLIATAAV-FFVVVYGESMRVEIPISHGSV-----------
+SECY_METTH/73-436     -----------------VLPVLALIAV-FLVVVYAESMRVEIPISMGGG-----------
+SECY_PYRAB/72-448     ------ggTa-----pdMMAVIATIIV-FLVVVYFESMRVEIPLGYRGV-----------
+Q8TZA9_METKA/75-435   -----------------LAPVIGAIIT-FLIVLYVEGMRVEIPIAFAGI-----------
+Q9HIT0_THEAC/82-514   -------sPp-----npMIAVLGTLLI-FFLVAYFQSSKIELPISHERV-----------
+Q2QAQ7_9EURY/161-583  d-----aaHp-----naVVALFSSVVV-FLVVAYAESSKLELPLTHGKV-----------
+Q0W1W5_UNCMA/75-487   ---------q-----geILALLATIII-FLLIVYVESTRIEIPLAHAAV-----------
+SECY_ARCFU/73-471     ---------q-----ggILALITTAAI-ILLVVFFEGTRVEIPLAHAVA-----------
+Q8TRS4_METAC/72-470   ---------r-----ggILALLSTVAI-FLLVVYVESTRIEIPLAHSAV-----------
+A0B9U7_METTP/75-515   ---------t-----ggLLALISTVGI-ILLVVLVESTRIEIPLAHSRV-----------
+SECY_HALMA/73-468     ---------q-----geLLGLFTTVLI-FAVVVYAESVRVEIPLSNARV-----------
+Q2FSG8_METHJ/73-458   --------Fg-----tdLIAFITTIAI-FILIVYVESTRVEIPLAHTQV-----------
+A2SPM5_METLZ/73-458   --------Fg-----lqLLALVTTVGL-FFIIVYVESTRIEIPLAHANV-----------
+A0RUE4_CENSY/79-457   ------ynQl-----psIFGLLLTGGV-LLILVYTQGMKIEIPIVSTKY-----------
+A8ME75_CALMQ/77-461   -------fNl-----pgLIGLIATIVL-GGFIAYVELMEVRIPLSFVQY-----------
+A3MUZ2_PYRCJ/70-435   pl--tvntYl-----pdFVGLVATILL-GYIILYLEMMKVNIPVASAQY-----------
+SECY_SULSO/73-449     tstknlfq-p------dLVGLVTTIAL-IIITIYLTTMTIEIPVTSQKL-----------
+SECY_SULAC/74-443     tssttpyq-p------dLIGLIATVGL-TILIVYLVNTNIYIPVTTQRL-----------
+A2BME2_HYPBU/73-444   --------Gm-----pdMVGFLATIAI-IMVLIYFQLMRVYIPVTSPRY-----------
+SECY_AERPE/73-434     -------nGf-----pdLTGFFTTLAA-IILLVYLQAMRVEIPITSERF-----------
+A1RWR3_THEPD/75-456   ------psGy-----pdLVGFVGMVVM-LLLLTYMESMKITIPVSSVRF-----------
+SC61A_SCHPO/76-459    sgltssqiQl-----pnLWNFFATLLV-FGVVIYLQDFRVEIPIRSQKF-----------
+A7E5Q2_SCLS1/76-459   -------qSl-----pnIMNLLATIVV-FAAVIYLQGFRVEIPVKSSRQ-----------
+Q5KC69_CRYNE/75-459   -------dRl-----pnIMNLLATVAV-FAAVIYLQGFRIEIPIKSSKM-----------
+SC61A_ASHGO/75-460    -------dYl-----pnMFQVLSTVFV-FLFVLYLQGFRYELPVRSTRT-----------
+Q59MJ6_CANAL/76-459   -------pNl-----pnMFQLLATLLV-FFAVVYLQGFRIELPMKSTRQ-----------
+A7SJW4_NEMVE/75-458   -------qNl-----pnLTNLIATIFV-FGIVIYFQGFRVDLPIKSARY-----------
+A0CFY2_PARTE/73-456   -------eSa-----pnLNNLLATLFV-ISLVIYLQGFRVEVPLASQKI-----------
+Q22MG2_TETTH/151-538  -------sHl-----pnLASLISTALI-FIVVVYFQGFKVDIALKNDRV-----------
+A0CU87_PARTE/77-460   -------dSl-----pnLTNLLATVLV-FLIVIYFQGFKVDIPIKNNKV-----------
+Q7RLN0_PLAYO/121-506  -------tHa-----pnVTNLLATILV-FLIVIYLQGFRVDLSVKYQTV-----------
+Q4QGX4_LEIMA/77-467   -------pQl-----pnLTNIFSTAVV-FAVVVFFQGFRVPLMTKSKFN-----------
+A5JEK2_NOSBO/75-457   -------qNl-----pnMFSLVSTVVL-FAFVIYLQGLRVELKTESTQV-----------
+A2DH65_TRIVA/75-462   -------pQl-----pnLCQLFSTVIV-FGACVYFDQIKINIGLETTVN-----------
+Q2QM98_ORYSJ/88-448   -------lDl-----pnLSNYMTTCVM-FVLAVRLDETHLRRLYRSRPR-----------
+Q6AV46_ORYSJ/86-471   gg---gggSl-----pdLRGLAATCAV-FLAAVYLQGVRVALPVRPRNA-----------
+Q6C854_YARLI/70-454   --------N--------LLQLYMSVAV-FMLTIYLNTFRVDIPIKSSRV-----------
+SSH1_YEAST/78-465     -------dYl-----pnLTTTIIVLAI-AIIVCYLQSVRVELPIRSTRA-----------
+Q6BT20_DEBHA/78-475   --------SftrsqlpnLSQFYIVLVT-VLVLIGVQNYRIELPIRSTKV-----------
+A5DE75_PICGU/20-414   -------eHl-----pnLTQVYITIVT-LLVVVALQNFRIELPIRSTRA-----------
+A3GFV9_PICST/78-476   --------Lp------nFTSFYITVAT-TLAVVYLQNLRIELPIRSTRA-----------
+A5DWJ5_LODEL/34-436   -------vQl-----pnLTQFYITLAT-ILAVVLLQNFRTEISIRSTKV-----------
+Q5A2C9_CANAL/5-404    -------iQl-----pnLTQFYISLAS-ILIVVALQNFRIELPIRSTKV-----------
+Q74L41_LACJO/64-372   --------L--------AALAIFILLL-IKFWLAFTKAYYPLKVVNPSL-----------
+B3XPQ8_LACRE/65-377   --------L--------FLAAIAGCIV-LVFWVSFNRAYYPLKMINTSM-----------
+A1C3L4_STRPA/70-403   --------Li-----qyGLVFFVALSIlIWFNILLYKGEYRIPIQRVGL-----------
+Q3DVD6_STRAG/65-395   --------I--------ILFLLWTLVA-MYLMITFERSEYRIPVMRTSI-----------
+A5LN99_STRPN/64-389   --------I--------VLLALLTLVF-SYLLALMYRARYLVPVNKIGL-----------
+A3CM55_STRSV/64-391   --------L--------ALMLVFSLVF-LYLAVTVERSKYRIPVNKINI-----------
+Q03HZ8_PEDPA/65-396   --------Tp-----klWLVLIISVAVvVIFTIFINKAELRIPLQRPFV-----------
+A5IW80_STAA9/64-384   -----------------IALLIILVIItLFILLFIELVEVRIPYIDLMN-----------
+Q4L9N9_STAHJ/61-383   -----------------LILVIVTLVIaLLILLFIELSEYRLNYKDIMN-----------
+Q5HKR3_STAEQ/61-380   -----------------ITMIIVLLVLaLFILFFIELTEYRIEYNDIMN-----------
+Q9RSK8_DEIRA/68-413   --------I--------LAFIAVILVT-IAGIVYIYQAERRVPVTYARArggAAGq----
+Q5SHQ8_THET8/71-413   --------F--------LFFLAFIVLA-FAGMAAVQQAERRIPVQYARK---VVGr----
+SECY_CORGL/73-424     --------F--------AVVLASVLIL-VIGVVFVEQGQRRIPVQYAKR---MVGr----
+A8LB12_FRASN/74-414   --------F--------GLVILLGLAI-VVFVVFVEQSQRRIPVQYAKR---LIGr----
+Q83NQ1_TROW8/73-424   --------F--------STVVITSLVV-MVGVVFVEQSQRRVPVQYAKR---VVGr----
+Q8G3Z9_BIFLO/74-421   --------F--------GIVVGVLVVI-LIFVDFVELCQRRVPVQYTRR---MIGr----
+A7B9M4_9ACTO/72-414   --------V--------AAIVALLLLV-AIAVVYVEQAQRRIPVQYAKR---MIGr----
+SECY_CHLTR/73-433     --------L--------LILCAVFVFV-LMATVLIIEGMRKIPVQHARR---IIGr----
+Q1AU49_RUBXD/70-408   --------M--------VILGIIAVMI-VAAIVFVNEGQRRIPITYAKR---QVGr----
+Q8RIH6_FUSNN/75-411   --------L--------LVLVAFLGTVtIAGIVLFQLGQRKIPIHYVGK---GFSs----
+A6DRC9_9BACT/79-428   --------I--------LVVVGILFIV-TAATVALVQGMRKIPLKYARD---ASSr----
+C0ACZ0_9BACT/94-454   --------L--------TFMVILFFAV-TMGIIMVVQGQRKIPVQYAKR---VVGn----
+Q1Q157_9BACT/75-434   --------L--------LILLGMFFAI-VGGVVYITQGQRRIPIQQAKH---TRGr----
+A6CGP8_9PLAN/77-435   --------L--------LILALVFVFV-VVWVIAITQGQRRIPIQSAKH---VRGr----
+B4S5A8_PROA2/73-417   --------E--------FIILALMVLI-VAAVVVLTVGTRRIPVQHAKR---VVGr----
+Q2S3P5_SALRD/75-414   --------L--------LVEIGVWVLV-AGAVVLVSQGMRRIPVQYAKR---VVGk----
+A1ZGT4_9SPHI/72-404   --------L--------ILEMVVLFFV-VMSVVMLTEATRRIPIQYAKQ---VVGn----
+A6EHP4_9SPHI/71-408   --------L--------VLEIVALFAV-VMFTIMIVQGVRKVPVQYAKR---IVGn----
+Q11QD2_CYTH3/72-411   --------L--------LIEFAALFAV-IMLVVLVQQATRRIPIQYTKQ---IAGg----
+Q1VTY0_9FLAO/73-421   --------I--------LIELVIWFVI-ILAAVMLVRAVRQIPVQYARK--nASGk----
+Q1NYZ7_9FLAO/72-422   --------L--------LFELFIWLLI-IGISIIIINFVKKIHIQYVNKfylKNYs----
+A5KHP6_CAMJE/62-402   --------A--------FAIFALILIT-IGVIIYVELGERRIPISYSRK---VVMq----
+A4EA78_9ACTN/52-389   --------M--------VIICAIILLV-IPLIVFLERGQRRIPVSYAKR---VVGr----
+Q2GEC0_NEOSM/73-411   --------I--------FVSLSLLVFV-VFLVVLVERASKNIPVHYPRR------rt--w
+Q3YRM8_EHRCJ/72-412   --------I--------LLMVLIFFAL-LLLIIFVEKSYRKILVQYPKR---QVKn----
+Q5GSW3_WOLTR/77-416   --------I--------LFVFVLFFLL-LLLIIFVESSYRKVTVQYPKK---QFK-----
+Q0ANS0_MARMM/83-421   --------V--------VGGVLILVG--LLLVVFVERSQRRLLVQYPKR---QQGn----
+A7IPQ0_XANP2/80-418   --------I--------LAALVLAVVV-IAFIVFMERAQRRLLIQYPKR---QVGn----
+SECY_RICCN/70-411     --------I--------AIAVCIGVVVlIAIIIFFERAQRKLLVQYPKR---QVGn----
+Q2G8W0_NOVAD/80-430   --------I--------FGIVIMLIAL-VIGICFLERATRRLLIQYPKR---ATQr----
+A6E0Q6_9RHOB/73-411   --------I--------VGVMLMVVAV-IAFVVFMERSLRKIHIQYPRR---QVGm----
+Q1UZE8_9RICK/67-404   --------I--------IGIFVLLVAT-IMFIVFMERALRKILINYPKR---QMGn----
+Q3R245_XYLFA/76-424   --------L--------LIIVFIVLSF-TFFVVFVERGLRRIAVNYARR---VEGr----
+A4NK90_HAEIN/76-416   --------L--------LLIAAIVFAV-TYFVVFVERGQRRIRVEYAKR---QQGr----
+Q057C4_BUCCC/64-407   --------V--------FFLLLIIFFV-IFIVVFIEKSQRKIIVCYARR---QQGr----
+Q8D1Z2_WIGBR/82-424   --------V--------LISIILVFVI-TYFVVFIERGQRRVIVNYAMR---QKGr----
+Q6F7T2_ACIAD/83-426   --------I--------VVFALLSLAV-LAAIVFIEKAQRRIPVNYAQK---QQGr----
+Q6Q8W8_9GAMM/67-407   --------L--------IGIGLLSMAV-IAVVVFIERGQRRITVNYAQR---QQGr----
+A9BRX1_DELAS/74-413   --------A--------IFIVLVVAAV-TYFVVFVERGQRKILVNYARR---QVGn----
+Q7DDS8_NEIMB/73-410   --------A--------LFIVFGALLL-IYLVVYFESAQRKIPIHYAKR---QFNg----
+Q5NHU8_FRATT/74-416   --------V--------WVLLILLLLV-IAFVVFMESAQRKITVNYAKR---QQGr----
+Q7WZR8_9GAMM/64-388   --------I--------FKVVSLVLIT-IILVVVIESGQIRIKVSYPRR---LIGk----
+A5EX98_DICNV/69-412   --------F--------FLLLGIIVSL-FALIVYVERAQRRIKIHYAKR-----------
+Q6MJ32_BDEBA/70-415   --------V--------LLLVAFMVAI-IAAVIYMEVAQRRITVQYSQR---QGGg----
+B5EFS0_GEOBB/71-411   --------L--------LLIAAVMFAV-IAAVVFMERGQRRIPIHYAKR---VVGl----
+A3EVQ1_9BACT/75-412   --------I--------LALVVMVFLI-VSSIVFIETARRKIPIQYAKR---LVGn----
+Q1MPP6_LAWIP/71-412   --------A--------LVLMLFMFAV-LTGVVFMERAQRRIPIQYAKR---QLGr----
+SECY_AQUAE/71-412     --------L--------LLIIALIIAI-IVGIVYVQEAERRIPIQYPGR---QVGr----
+Q01WB2_SOLUE/74-438   --------L--------IVLMALMVAV-VAFIVLVERGERRIPVQYAKR---VVGr----
+Q08ZH8_STIAU/26-370   --------L--------VGLAVFMLFI-IAVVVYVERGMRRIPVQYAKR---MAGr----
+A6GCG0_9DELT/70-411   --------L--------AMLLVVVLVV-IAFVVIMERGQRRIPVIYAKR---VVGk----
+Q04PV8_LEPBJ/72-436   --------V--------LILLILLILL-ISLTVLLTQGVRKVPLQYGKQ---MVGr----
+SECY_BORBU/72-409     --------V--------ILIISIFILV-VILIIYEYKAQMRIAIHYARA-----------
+Q73PL2_TREDE/73-413   --------V--------IIAFAMFVGI-IALVVYEQQGQRKIPVHYAKR---VIGr----
+Q67JW3_SYMTH/69-405   --------P--------LLVAVVALLM-VVFVVIINEAVRKIPVEYAKR---VVGr----
+A7FQ38_CLOB1/69-409   --------V--------IVFIVIALAL-FLLVVIMNLGERRIPVQYAGR---AVGn----
+A6LPT1_CLOB8/69-416   --------I--------VLFGVFTVFL-LATILYFSLSERRIPVQYAGK--fASGn----
+Q0SQG4_CLOPS/69-409   --------I--------ALFIFFTLAL-LAGVIYLSLAERRITVQYAGK---AVGn----
+A9KJH4_CLOPH/71-425   --------A--------IIIVAVILLS-VVLIILLNAAQRKIAVQYAKK---VQGr----
+A7VH89_9CLOT/71-420   --------A--------LLVVAIVVCV-TILVCMLQGAERKIPVQYAKK---VQGr----
+A6BIS2_9FIRM/71-421   --------V--------CVIIAIILAL-VVFTVILQDGERRIAVQYSQK---IVGr----
+A7VR33_9CLOT/71-423   --------V--------PLFVIIFLAI-IWVIVFMNDAERRIPVQYAKR---VVGr----
+A6NXF0_9BACE/71-437   --------I--------PLIIIGILAL-VVFIVFINDSERRIPVQYAKR---VVGr----
+Q250L2_DESHY/70-413   --------V--------FGLIVIGLGI-IAGVVFIQEGQRRIQVQYAKR---VVGr----
+Q8R7X3_THETN/69-402   --------A--------IAFVVAELIM-IVLIILATEGQRRIPVQYAKR---VVGr----
+A4XLR1_CALS8/69-419   --------V--------LLFLVMALAI-IVFIIVIQEGERRIPVQYAKR---IVGr----
+A3DJJ2_CLOTH/71-411   --------V--------LGVLLLFVVI-IASVVWVDQAERRIPVQYAKR---VVGr----
+A8MLG0_ALKOO/69-408   --------I--------ILFIVIAIAM-IVAVVAIEAGTRKIPVQYAKR---VVGr----
+Q18CH6_CLOD6/69-406   --------I--------VILAVVILLT-VTGVTFIQEATRKIPVQYAKR---VVGr----
+B8D0S8_HALOH/72-406   --------I--------LFFLVLAVVI-IAGVIFIQQGERRIPVQYSKR---VVGr----
+
+A9B431_HERA2/73-422   --NKvyGGQ--SSH-LPLKVNMAGMIPLIFAQSI--LIFPS---TVASYF-----WNPNG
+A8CRX1_9CHLR/78-422   gKMYrrGG---ESH-IPLRVNSAGMIPLIFASAL--VMLPG---LVASYFmagstEDP--
+A2Y4E5_ORYSI/132-498  aRSEssPVTEVEPY-IPFNINPTGMQPLLTTSYL--LAFPS---IMASIF-----GTQFW
+Q7UZW2_PROMP/80-422   ---NssLLPTRQSY-LPLKLNAGGVMPIIFASAL--IFLPI---TVANVT-----GNPIL
+Q7NKT4_GLOVI/79-416   -PRRqqYQQQQTSY-LPLRVNQGGVMPIIFASSL--LYLPL---TFAQFA-----RN---
+SECY_GUITH/68-404     --LGkgQMDNKTSY-LPLKLNQSGVMPIIFASAV--LVLPA---YLAQLV-----SNEQL
+SECY_CYACA/62-394     --LDstSFYSNDYF-LPLRINQGGVMPIILASSL--LALVD---YVIRYG-----LST--
+Q85FU6_CYAME/42-325   ----liQSIAQVYL-LPMRLNQGGVMPIIFASST--LALLH-------------------
+A0T0J6_PHATR/72-407   --SSlqDSVTSNNY-IPLRFNQAGVMPIILTTTI--LVVPN---YVNNLG----------
+SECY_CYAPA/109-459    ePITeaERRKTQAY-IFFQLLPAGIMPVIFASTIfdLALPA----FTNFL-----LQQG-
+Q4G351_EMIHU/63-407   -AQTqsERLANNSF-IPLKLNQGGIMPLVFSSTI--AVVFM---YPAQIL----------
+SECY_PAVLU/66-404     -LIDgvEDDMRRSY-IPIRFGQAGVVPIIFSSSI--LLFLT---TSIKQL-----PNA--
+Q6B8X0_GRATL/62-395   --LSkfTTSNPRSY-IPLKLNQGGVMPIVFASAT--MALPI---YFSNNI-----EV---
+SECY_ANTSP/62-390     --LGkiNELNHKVI-FLLKLNQGGVMPFVFASAV--VHTFL---FISNNT-----NS---
+A4RW47_OSTLU/65-398   ---FnaGGLAKSSY-LPFKVNSAGVMPIIFASSL--LALPA---TLTRFT-----DNGAV
+A7PFA4_VITVI/131-465  -YTNksGGLQKSTY-LPFKVNSSGVMPIIFSTSS--LALPG---TVSRFT-----GLAAL
+A7HM32_FERNB/75-404   -RIY--GGT--STY-LPIKVNHSGVIPIIFAWAI--ISIPE---AIAQIT-----GA---
+A3CK84_STRSV/69-416   -----aKGAPSSSY-LPLKVNPAGVIPVIFASSI--TAAPA---AIFQVV-----SALGY
+Q5FM71_LACAC/68-415   ------SGS--ESF-LPLKVNVSGVIPVIFASSF--IITPA---TILMAF-----QRTQG
+Q03ZM6_LEUMM/68-416   ------YGS--EAY-LPLKVNVSGVIPVIFASSF--ISTPQ---TVMLAF-----QDKYS
+SECY_STAA8/69-413     --QTaqRLGSQATY-LPLKVNSAGVIPVIFAMAF--FLLPR---TLTLFY-----PDK--
+Q4MG72_BACCE/68-415   nQ----YQGAKNTH-LPLKVNSAGVIPVIFASAF--LMTPR---TIAQLF-----PDSSI
+Q6F1X5_MESFL/92-454   ------DSKDHTPY-LPLKLNNAGVIPVIFASAL--ISTPI---TIAQIIdptasTSTVD
+Q6KI36_MYCMO/87-436   ------KNEKELSY-LPIKINPGGISPIIFALII--ISFPQ---LFASVF-----PISNP
+Q4A5I3_MYCS5/83-437   ------KALKEIGS-LPIKLNPAGIMPIIFAMLV--LSLPT---LIANIL-----PNDNY
+Q98Q01_MYCPU/90-438   ------KNIKEMGS-LPIKVNPAGIMPVIFSMIV--ISFPL---LIAGLL-----DRSTS
+Q4AAF9_MYCHJ/85-434   ------KNIKEISI-LPLKLNPAGIMPVIFALII--VSLPT---LFSGFL-----DRNTS
+Q9PQP1_UREPA/76-434   ------LDHEKLPF-LPIKIMTAGVMPVIFASSV--LAIPA---QVAEFL-----DKQ--
+SECY_MYCGE/81-430     ------SEVKTLPY-LPIKVNAAGVIPVIFASSI--MSIPV---TIAQFQ-----PQT--
+Q8EUD2_MYCPE/81-433   ------KEVDEMPY-LPIKLNAAGVIPVIFASSI--MTIAP---TISQFL-----PSG--
+Q7X4E3_9MOLU/69-399   -----rNNDKIDKY-IPIKLNTSGILPIILADTL--LNVIQ---QISMLF-----SKNG-
+Q5Q069_ASTYP/59-398   -------QSQGKSY-IPLKINSAGVMPVILAFAL--LQPFQ---ILAGVI-----GN---
+O21257_RECAM/57-372   eNDNynYLNYFQKY-QTSSLNLLGILPFILVYSIiyMLKLNlnsFLDLVF----------
+Q74NB9_NANEQ/69-457   --------PEKSLR-YEVRLIYTGNIPVIFAFAF--LHQIL---LIAWVL-----QQLGI
+Q2EMT2_METVO/30-379   --------KGAVGK-YPIKFIYVSNLPVILAAAL--FANFQ---LWGLVL-----YKIGF
+A5UL65_METS3/72-433   --RGhgRIRGSVGK-YPLKFVYASNMPVILTSAL--LVNVS---LLASVF-----QKIGF
+SECY_METTH/73-436     ----krLSRGAVGK-YPLRFIYASNMPVILTSAL--LLNVQ---LLANVF-----QKLGY
+SECY_PYRAB/72-448     ---------TIRGR-YPIRFLYVSNIPIILTFAL--YANIQ---LWARVL-----DRLGH
+Q8TZA9_METKA/75-435   --------RGARGR-FPVRLLYTSNIPVILASAL--FMNVR---LWALAF-----QRMGV
+Q9HIT0_THEAC/82-514   --------RGARGR-YPLQLLYASNIPVILATAL--LANVS---MWTLLF-----WSSPV
+Q2QAQ7_9EURY/161-583  --------RGHRGQ-YPIRLVYASNIPVILMAAL--LANLN---MFTLLF-----WSHPT
+Q0W1W5_UNCMA/75-487   --------RGARGK-FPVKLIYASVLPMILVRSL--QATLE---MVGLLL-----YRNGI
+SECY_ARCFU/73-471     --------RGARGR-FPIKLIYASVLPMIFVRAL--QANVV---ALGQVL-----HARGV
+Q8TRS4_METAC/72-470   --------RGARGR-FPVKLIYASVLPMILVRAL--QANIQ---MVGIIL-----ASRGI
+A0B9U7_METTP/75-515   --------RGARGR-FPVKLVYASVLPMILVRAL--QANIE---MLGALL-----TAKLG
+SECY_HALMA/73-468     --------KGARGR-FPVKLIYASVLPMILVRAL--QANIQ---FLGRIL-----NAQLG
+Q2FSG8_METHJ/73-458   --------RGARAR-FPVKLIYASVLPMILVRVL--QANVQ---MIGLFL-----NNIGI
+A2SPM5_METLZ/73-458   --------RGARSR-FPVKLVYASVLPMILVRVL--QANVQ---MIGMFL-----SSIGF
+A0RUE4_CENSY/79-457   --------RGFSAT-YPIKLMYVSNIPVILASAL--TANAI---FIGQMF-----WSNFN
+A8ME75_CALMQ/77-461   --------GGYKMS-YPFKVMYVSVLPIIFTAYT--VALIYnglYFIWTTynphnANALL
+A3MUZ2_PYRCJ/70-435   --------RGIKFT-IPLRFVYVSVLPIIFTTYS--LLLVG-------------------
+SECY_SULSO/73-449     --------RGIRRT-IPLNFLYVSSIPVIFVAVL--GSDIQ---LFASLA----------
+SECY_SULAC/74-443     --------RGIRTT-VPLNFLYVSSIPVIFVSVL--GADIQ---LFASLA----------
+A2BME2_HYPBU/73-444   --------GSIKTR-IPLNFIYVTNIPILFVAIA--VSDIK---VFEIVI-----ASLLG
+SECY_AERPE/73-434     --------KGIRSR-VPLQFIYVTNIPILLVGIL--VSDLL---LVQRLL-----ADYLG
+A1RWR3_THEPD/75-456   --------GGAKTR-IPLKFLYVSVMPVILVGAL--YANVV---MFTQAL-----WPRVN
+SC61A_SCHPO/76-459    --------RGYRST-FPVKLLYTSNTPIMLQSAL--TSNLF---FASRLL-----FNRFS
+A7E5Q2_SCLS1/76-459   --------RGARGS-YPVRLFYTSNMPIMLQSAL--SSNIF---LISQML-----YSRFS
+Q5KC69_CRYNE/75-459   --------RGQRGT-YPVKLFYTSNMPIMLQSAL--TSNVF---LVSQML-----AGRFP
+SC61A_ASHGO/75-460    --------RGQVGS-YPIKLFYTSNTPIMLQSAL--TSNIF---LTSQLL-----YQKFP
+Q59MJ6_CANAL/76-459   --------RGPYGS-YPIRLFYTSNIPIMLESAL--ASNIF---IISQLL-----FMRWP
+A7SJW4_NEMVE/75-458   --------RGQYSS-YPIKLFYTSNIPIILQSAL--VSNIY---VISQMM-----SAKFA
+A0CFY2_PARTE/73-456   --------RGLVSS-HGIKLFYTSNIPMIIQSTL--VQNVY---FLSQLL-----YRRFK
+Q22MG2_TETTH/151-538  --------RGAIQS-YPIKLFYTSNMPIILQSAL--ISNLY---FFSQIL-----YRNFN
+A0CU87_PARTE/77-460   --------RGGLTS-YPIKLFYTSNIPIILQTAL--VSNLY---FLSQIL-----YRNFK
+Q7RLN0_PLAYO/121-506  --------RGQQGT-YPIKLFYTSNIPIILQTAL--VSNLY---FFSQIL-----YKRFS
+Q4QGX4_LEIMA/77-467   --------GNDRQP-YMIKLFYTSNMPIILQTSV--VSNIS---FFSQIL-----SRRFG
+A5JEK2_NOSBO/75-457   --------RGQTGM-YPVKLLYSSTMPIIVQSYV--ISHIC---TISRFL-----YKRFP
+A2DH65_TRIVA/75-462   --------RARPEP-FEIKLFYCSNTPPIIQSTI--LSQLA---GFSRTI-----YFHWP
+Q2QM98_ORYSJ/88-448   --------RGTDEF-VPIKLLYTSAMPIMLHASA--VSAFC---V---------------
+Q6AV46_ORYSJ/86-471   -------PRSHRGGaYSVRLLYTSGMPVVLLSSA--VSSLY---VVSQAL-----YRRFG
+Q6C854_YARLI/70-454   --------RSLATA-FPVKLLYTGSMCLFLLSAF--SQNVL---IYSQSL-----YVQFP
+SSH1_YEAST/78-465     --------RGTNNV-YPIKLLYTGCLSVLFSYTI--LFYIH---IFAFVL-----IQLVA
+Q6BT20_DEBHA/78-475   --------RGMNNV-YPIRLFYTGALPILFAFTV--LTNLQ---VFGYFT-----STLLN
+A5DE75_PICGU/20-414   --------RGMNNV-FPIRLLYTGALPLAFAYTV--LTNLQ---VLGYIA-----SQLLE
+A3GFV9_PICST/78-476   --------RGMNNV-FPIRLLYTGALPVLFAYTV--IANIQ---YFGYLA-----YVVLQ
+A5DWJ5_LODEL/34-436   --------RGMNQM-FPIRLLYTGGLPVLFAYTV--IANLQ---VFGFIF-----EAALV
+Q5A2C9_CANAL/5-404    --------RGMNNV-FPIRLLYTGGLPVLFAFTV--VANIQ---VVGYLI-----HSVLS
+Q74L41_LACJO/64-372   ------PASSNLMT-VPLGLNMAAMMMYMVGMAI--LTLPL---MVGRYF-----SSSSL
+B3XPQ8_LACRE/65-377   ------SSHDRPII-LPIGLNMGAMMTYMVGMSL--LMVPT---LLANVL-----GPGSL
+A1C3L4_STRPA/70-403   -----nTPYHASSY-LPIRVTPAGAMPFMYGMTL--MMLPPyifVVLLHI----------
+Q3DVD6_STRAG/65-395   -----hNRLVDDAY-MPIKVNASGGMAFMYVYTL--LMFPQyiiILLRSI-----FPTN-
+A5LN99_STRPN/64-389   -----hNRFKRYSY-LEIMLNPAGGMPYMYVMSF--LSVPAylfILLGFI-----FPNH-
+A3CM55_STRSV/64-391   -----hNRFKKYSY-LDIRLNPAGGMPIMYAMTL--VSIPQyflLIIHFL-----QPEN-
+Q03HZ8_PEDPA/65-396   ------QNDFSESY-LPIRVLAAGSMPFMFTTTV--FMIPS---YIGSFV-----PEG--
+A5IW80_STAA9/64-384   -----vSATNMKSY-LSWKVNPAGSITLMMSISA--FVFLK---SGIHFI----------
+Q4L9N9_STAHJ/61-383   -----nSTNKTPTY-LAWKLNPAGSISIMISLSV--YVLLN---NMINLI----------
+Q5HKR3_STAEQ/61-380   -----iSAKDIPSY-LSWKLNPAGSISIMVSLSL--FMLTN---NIVNFI----------
+Q9RSK8_DEIRA/68-413   -ARG--AGQ--ATW-LPIKVNQAGVIPVIFASAM--LIIPN---LIASAT-----ATRA-
+Q5SHQ8_THET8/71-413   -RVY--GGQ--ATY-IPIKLNAAGVIPIIFAAAI--LQIPI---FLAAPF-----QDN--
+SECY_CORGL/73-424     -RQY--GGS--STY-LPLKVNQAGVIPVIFASSL--IYMPV---LITQIV-----NSGSL
+A8LB12_FRASN/74-414   -RMY--GGT--STY-LPIKVNQAGIIPVIFASSL--LQLPQ---LVGQVW-----SNQTF
+Q83NQ1_TROW8/73-424   -RIL--GGG--STY-LPIKLNMAGVVPVIFASAI--LRVPS---IIAQFS-----QPAPG
+Q8G3Z9_BIFLO/74-421   -KMY--GGS--STY-LPLKINMSGVIPPIFASSI--LAIPT---LIAQFG-----KSDQ-
+A7B9M4_9ACTO/72-414   -RQY--GGT--TTY-IPLKINMSGVIPVIFASSI--LALPP---MAAQFG-----SPND-
+SECY_CHLTR/73-433     rEVV--GG---GSY-LPLKVNYAGVIPVIFASSL--LMFPA---TIGQFL-----SSES-
+Q1AU49_RUBXD/70-408   -RMS--QGG--TTY-LPLKVNMAGVIPIIFASSL--LIFPV---VITQFA-----AGGDQ
+Q8RIH6_FUSNN/75-411   -K----GGIGEKSF-IPLRLNTAGVMPVIFASVF--MLIPG---VIVNAL-----PSTL-
+A6DRC9_9BACT/79-428   -NAM--IEK--TSY-LPLKVNHAGVMPIIFASAL--MMFPP---MIINKI-----GG---
+C0ACZ0_9BACT/94-454   -KVM--GGQ--NSF-LPLKVNYSGVMPVIFASAI--LLFPQ---QIFRYL-----GAAFN
+Q1Q157_9BACT/75-434   -RVY--GGQ--RHF-LPLRVNQAGVMPIIFAQSL--LIFPA---AIMQGI-----QIRFE
+A6CGP8_9PLAN/77-435   -RVS--GGQ--RQS-LPLRVNQAGVMPIIFASSL--LMFPY---FLFHGL-----SQYF-
+B4S5A8_PROA2/73-417   -KMY--GGS--TQY-IPMRVNTAGVMPIIFAQSI--MFLPN---TFLSFF-----PES--
+Q2S3P5_SALRD/75-414   -KVQ--GGT--TQY-LPLRVNAAGVMPIIFAQSI--MFIPS---TIASFF-----PNN--
+A1ZGT4_9SPHI/72-404   -RVY--GGQ--RQY-LPLKVNAAGVMPIIFAQAL--MFVPA---LITPYV-----GG---
+A6EHP4_9SPHI/71-408   -RQF--GGV--RQY-IPLKVNAAGVMPIIFAQAL--MFIPA---TLTQFF----------
+Q11QD2_CYTH3/72-411   -KQV--IGQ--RQY-LPLKLIAAGVMPIIFAQSV--MFLPA---IIGSSF-----PDS--
+Q1VTY0_9FLAO/73-421   fEKAsvGGA--RQF-IPLRLNASGVMPIIFAQAI--MFIPA---AVAGLS-----DS---
+Q1NYZ7_9FLAO/72-422   sNEIylRNE--MKF-LPLKVVYPGVMPIIFSQGI--LLIFI---TIFNKI----------
+A5KHP6_CAMJE/62-402   -NQN--KRI--MNY-IPIKLNLSGVIPPIFASAI--LMFPT---TILQTS-----TN---
+A4EA78_9ACTN/52-389   -RMM--GGQ--TTY-LPIKVNTAGVVPIIFASAL--LYFPA---QIAVFF-----PGIG-
+Q2GEC0_NEOSM/73-411   gSTH--GDA--ASN-IPVKINVSGVIPPIFANAL--ILFPL---TLANFS-----AE---
+Q3YRM8_EHRCJ/72-412   -KLY--GSS--STY-IPLKINISGVIPPIFANAL--LLSPI---TVANFH-----QGS--
+Q5GSW3_WOLTR/77-416   -RLH--SDD--FTY-IPLKINLSGVIPTIFANAI--LLTPV---SIANFY-----KGH--
+Q0ANS0_MARMM/83-421   -RMV--GGD--TSF-LPLKLNTAGVIPPIFASSL--LLLPA---TAASFQ-----AQSGP
+A7IPQ0_XANP2/80-418   -RIY--EGQ--SSH-LPLKLNTSGVIPPIFASSL--LLIPT---TIASFL-----QGSGP
+SECY_RICCN/70-411     -KIY--GGE--ATH-MPLKLNTSGVIPPIFASSI--LLFPA---TLANF------SNSNS
+Q2G8W0_NOVAD/80-430   -GMM--AAD--RSH-LPLKINTAGVIPPIFASSL--LLLPL---TITQFA-----GNSIS
+A6E0Q6_9RHOB/73-411   -KIY--DGG--SSH-LPVKVNPAGVIPAIFASSL--LLLPA---TITTFS-----GNTTN
+Q1UZE8_9RICK/67-404   -KMY--GGE--SSH-LPLKINQAGVIPAIFASAL--LLLPV---TFSNFS-----FSDND
+Q3R245_XYLFA/76-424   -NSY--MNK--SSF-LPLKLNMAGVIPPIFASSI--LAFPV---TLSIWS-----GQASS
+A4NK90_HAEIN/76-416   -QIL--GGH--STH-LPLKVNMANVMPAIFASSI--ILFPA---TLTQWF-----GQNDK
+Q057C4_BUCCC/64-407   -RMY--TAH--HSY-LPLKLNMAGVIPVIFSSSL--IVFPS---ILLTYL----------
+Q8D1Z2_WIGBR/82-424   -KIY--AAQ--ITH-LPLKVNMSGVIPAIFASSL--ILFPA---TIASWF-----GEGIG
+Q6F7T2_ACIAD/83-426   -RIF--TAQ--QTH-LPLKINMAGVIPAIFASSL--LLFPA---SLGQWL-----GSADP
+Q6Q8W8_9GAMM/67-407   -RMM--QAQ--QSH-LPFKVNMAGVIPAIFASTF--LLFPA---SLSTWF-----GENES
+A9BRX1_DELAS/74-413   -KVY--GGQ--SSH-LPLKLNMAGVIPPIFASSI--ILLPA---TVVNWF-----SAGES
+Q7DDS8_NEIMB/73-410   -RA---GSQ--NTH-MPFKLNMAGVIPPIFASSI--ILFPS---TLLGWF-----GSADT
+Q5NHU8_FRATT/74-416   -KMF--AAQ--TSH-LPLKLNMAGVIPAIFASSI--LMVPG---VLLGWL-----SNYNS
+Q7WZR8_9GAMM/64-388   -KLY--ATQ--SSY-LPLKLNMAGVIPAIFASSS--LIITA---SVG-------------
+A5EX98_DICNV/69-412   -QQFgtSAMGERFY-LPLKINMAGVIPAIFASAI--ITLLVsglTLASSL-----PGAAG
+Q6MJ32_BDEBA/70-415   -GMQ--SMQTPTSH-LPIKLNISGVIPPIFASSL--LMFPA---TMAQFV-----NT---
+B5EFS0_GEOBB/71-411   -KTV--GAQ--SSH-LPLKVNMAGVIPPIFASSI--IMFPA---TVGNFI-----DV---
+A3EVQ1_9BACT/75-412   -KMM--GGQ--STH-IPFKINTAGVIPPIFASSL--ISFPA---IIAGFV-----SV---
+Q1MPP6_LAWIP/71-412   -KVY--GGQ--STH-LPLRVNTAGVIPPIFASSL--LLFPA---TMASFD-----IS---
+SECY_AQUAE/71-412     -QLY--AGR--KTY-LPIKINPAGVIPIIFAQAL--LLIPS---TLLNFV-----QN---
+Q01WB2_SOLUE/74-438   -RVM--GGQ--STH-MPLKVNAGGVIPVIFASSI--LAFPQ---TLAQFG-----WVKNL
+Q08ZH8_STIAU/26-370   -RMF--AGQ--ATY-FPMKVNTSGVIPPIFAGAL--LSFPA---TLGTWF----------
+A6GCG0_9DELT/70-411   -RMF--GGS--QNY-LPLRINNAGVIPPIFASSI--IMFPA---QIAGMT-----GN---
+Q04PV8_LEPBJ/72-436   -KMV--QAK--SQS-IPFKVNGANVMPIIFASSL--ILFPQ---TIIQWL-----SSSSE
+SECY_BORBU/72-409     -NSN--NTV--SSY-LPIKLNPSGVLPVIFASVL--ITLPL---QILSGF-----AETS-
+Q73PL2_TREDE/73-413   -KMY--GGQ--NTY-IPFKINPSGVIPIIFASSF--LTFPL---MLSQMW-----GSNVS
+Q67JW3_SYMTH/69-405   -RVV--GGQ--RTH-LPIRINQAGVIPLIFASSL--MYFPI---TIAGFF-----PNS--
+A7FQ38_CLOB1/69-409   -KIY--KGQ--STH-IPINVNSSAVIGIIFAISV--MQFPI---TIGQFW-----PESAF
+A6LPT1_CLOB8/69-416   sNMV--KSQ--STH-IPLSIIGSAVLAIIFSMSV--MDFPK---TIATLFggvgeSQKEW
+Q0SQG4_CLOPS/69-409   -KMM--KGQ--STH-IPLSIIGTTVIAIIFAMSV--MSFPT---TIAQFF-----PEAGW
+A9KJH4_CLOPH/71-425   -KMV--GGQ--SSH-IPLKVNTAGVIPVIFAVSI--MQFPI---IIASFF-----GVQPA
+A7VH89_9CLOT/71-420   -KQM--GGQ--SSN-IPLKVNTAGVIPVIFASSL--MAIPS---IITSLF-----GK-SP
+A6BIS2_9FIRM/71-421   -RSY--GGQ--STN-IPLKVNTAGVIPIIFSSSL--MQFPI---VIASFL-----GKDNG
+A7VR33_9CLOT/71-423   -KMY--GGQ--STH-LPIKVNMSGVMPIIFASSI--LTIPS---TIQLFV-----TPT--
+A6NXF0_9BACE/71-437   -KMY--GGQ--SSH-IPLKVNMSGVMPIIFAQAI--ASLPA---TIAAFI-----P----
+Q250L2_DESHY/70-413   -RVY--GGQ--SSH-IPMKVNQAGVIPIIFAISL--LAFPS---TIATWM-----DPAS-
+Q8R7X3_THETN/69-402   -RVY--GGQ--STH-IPIRINMAGVIPIIFAISL--LQFPQ---QLATFF-----PHS--
+A4XLR1_CALS8/69-419   -RVY--GGQ--STH-IPIKVNIAGVIPIIFAISL--VMLPT---TIAQFF-----PNS--
+A3DJJ2_CLOTH/71-411   -KMY--GGQ--STH-IPIKVNMAGVLPIIFATSF--VALPA---TIVGFF----fPNSTH
+A8MLG0_ALKOO/69-408   -KMY--GGQ--SSH-IPLKVNQSGVMPVIFAMSL--LQFPH---TIAYFI-----GSEG-
+Q18CH6_CLOD6/69-406   -KMY--GGQ--SSH-IPMKVNQSGVMPIIFASSL--LAFPQ---TIAMFM-----GPNAQ
+B8D0S8_HALOH/72-406   -KVY--GGR--STH-IPMRINQAGVIPVIFAQAV--LQFPT---VIAAVL-----PY---
+
+A9B431_HERA2/73-422   sg-------------------------ffN---------------GVANFFVNSF-----
+A8CRX1_9CHLR/78-422   ---------------------------------------------NFWNTIYNIFnsgas
+A2Y4E5_ORYSI/132-498  -----------------------------E---------------SLKETLNPKTs--vg
+Q7UZW2_PROMP/80-422   -----------------------------I---------------KIAGSLNPGS-----
+Q7NKT4_GLOVI/79-416   -----------------------------A---------------TVDQVVNAI------
+SECY_GUITH/68-404     -----------------------------R---------------TVLHLFDGTS-----
+SECY_CYACA/62-394     -----------------------------L---------------QAVYFINDIL-----
+Q85FU6_CYAME/42-325   ------------------------------------------------------------
+A0T0J6_PHATR/72-407   -----------------------------L---------------LPKIDLPINF-----
+SECY_CYAPA/109-459    -----------------------------N---------------WGYQ-LIKSF-----
+Q4G351_EMIHU/63-407   --------------------------------------------------LSSALltnaa
+SECY_PAVLU/66-404     -----------------------------N---------------IATRVILDSV-----
+Q6B8X0_GRATL/62-395   -----------------------------P---------------NINNVINLFL-----
+SECY_ANTSP/62-390     ---------------------------------------------KITQFINLFL-----
+A4RW47_OSTLU/65-398   -----------------------------L---------------GVARFLSP-------
+A7PFA4_VITVI/131-465  -----------------------------K---------------KAALALN--------
+A7HM32_FERNB/75-404   -----------------------------Q---------------WAIKLFS--------
+A3CK84_STRSV/69-416   d---------------------------aD---------------WVKTAQSLLA-----
+Q5FM71_LACAC/68-415   d---------------------------qQ---------------WFKV-LNQIF-----
+Q03ZM6_LEUMM/68-416   s---------------------------aQ---------------WYQI-MQQIF-----
+SECY_STAA8/69-413     -----------------------------E---------------WAQNIANAAN-----
+Q4MG72_BACCE/68-415   s----------------------------K---------------WLVANLD--------
+Q6F1X5_MESFL/92-454   s---------------------------aN---------------AFVRFTQHYL-----
+Q6KI36_MYCMO/87-436   f---------------------------rI---------------WVESNLR--------
+Q4A5I3_MYCS5/83-437   s---------------------------kQ---------------WINENLQ--------
+Q98Q01_MYCPU/90-438   lv--------------------------rL---------------WIERHLA--------
+Q4AAF9_MYCHJ/85-434   av--------------------------rN---------------WIDNNMQ--------
+Q9PQP1_UREPA/76-434   -----------------------------S---------------MGYYVIHNYF-----
+SECY_MYCGE/81-430     -----------------------------E---------------SRWF-VEDYL-----
+Q8EUD2_MYCPE/81-433   -----------------------------S---------------AGSEFINEYL-----
+Q7X4E3_9MOLU/69-399   ---------------------------------------------KVNEYIGIFVe--sr
+Q5Q069_ASTYP/59-398   -----------------------------D---------------KLTKYVNLFTntnss
+O21257_RECAM/57-372   ------------------------------------------------------------
+Q74NB9_NANEQ/69-457   pllg---------------------tienG---------------HPINGLVAYIypdtg
+Q2EMT2_METVO/30-379   pllg---------------------tysnG---------------RAIDGIAYYFs---t
+A5UL65_METS3/72-433   pilg---------------------eivnG---------------KAVSGIALYLs---t
+SECY_METTH/73-436     pilg---------------------tvsnG---------------QAVDGLAYLLt---a
+SECY_PYRAB/72-448     pwlg---------------------tfdpT-t------------gNPVGGFVLYVi---p
+Q8TZA9_METKA/75-435   pilg---------------------kldpR--------------gQPISGLVYYLs---p
+Q9HIT0_THEAC/82-514   lskvpilgh-----------npllgsyptT-aqata---lnisatTPTGGLAYYLf---s
+Q2QAQ7_9EURY/161-583  mstvpilgsqga-----wsiapylgsydvG-q------------tQATDGFAWYAs---m
+Q0W1W5_UNCMA/75-487   tflgt--------------------fnqyN---------------QPVDGLMFYIn---p
+SECY_ARCFU/73-471     tifg---------------------efvnG---------------KAVSGLMFFLq---p
+Q8TRS4_METAC/72-470   tflg---------------------efsgS---------------KPLNGIMYYLa---p
+A0B9U7_METTP/75-515   tvttaettaegvrivytgyqswlgtflssAkfdaatgapisatspQPVSGLMYYLs---p
+SECY_HALMA/73-468     smpafl------------------gtyanG---------------QPTGGLFYFLa---p
+Q2FSG8_METHJ/73-458   tifg---------------------tfegQ---------------TPTGGLMWYLa---p
+A2SPM5_METLZ/73-458   talg---------------------eyngS---------------TPINGLMWYLa---p
+A0RUE4_CENSY/79-457   prndnifl-------------nvlaqfdlT-n-----------psTPIGGIVYYIt---p
+A8ME75_CALMQ/77-461   nsiacir---------------vittakfG-ti----------nePCPSSLIYYFt---v
+A3MUZ2_PYRCJ/70-435   qllq---------------------pfaaN-n------------pALITVLNVIFl---p
+SECY_SULSO/73-449     syvs---------------------psasN--------------iLNTVSGVFFFpppns
+SECY_SULAC/74-443     nsis---------------------nsasG--------------iLTDIANAFFFp--pq
+A2BME2_HYPBU/73-444   adn------------------------plV---------------RGMDVLYNYVs---p
+SECY_AERPE/73-434     ves------------------------raY---------------QIYSSIVYYLs---p
+A1RWR3_THEPD/75-456   pgnqnpwl-------------nviakynyT-ey---------gpvPLPGSFVYYIs---p
+SC61A_SCHPO/76-459    snflvr-----------------flgvweQ---------------TATSGLSYYLs---p
+A7E5Q2_SCLS1/76-459   enllvql----------------fgvwepK-egs--------aqlFATSGIAYYMs---p
+Q5KC69_CRYNE/75-459   dnllvrl----------------lgvwepM-enn-------ptqlGAVSGIAYYMs---a
+SC61A_ASHGO/75-460    nnpivkm----------------lgvwgtR-sdap------yspnAAISGLSYYIq---p
+Q59MJ6_CANAL/76-459   nnlfvkl----------------lgtwdaR-ags--------sqlYANGGLAYYIq---p
+A7SJW4_NEMVE/75-458   gnffvnl----------------lgtweeA-ggg-------parsYPVGGLCYYMs---p
+A0CFY2_PARTE/73-456   tnffvkl----------------lgtwqeA-efg--------gqsVPIGGLAYYMs---p
+Q22MG2_TETTH/151-538  gnfivgl----------------lgkwsiP-eag-------gshmVPVGGLVYYLs---p
+A0CU87_PARTE/77-460   gnflirl----------------lgyyqeL-en---------gqtVPIGGLVYYVs---p
+Q7RLN0_PLAYO/121-506  nsilvni----------------lgqwqeI-esn--------gtaVPIGGIAYYIs---p
+Q4QGX4_LEIMA/77-467   nrnflin---------------llgrweeR-gyngg----gsgqlFPVGGLAYYLv---p
+A5JEK2_NOSBO/75-457   tyflvra----------------lgvwssE-gs---------skyQPIKGLCYYIl---p
+A2DH65_TRIVA/75-462   eslatqi----------------fgvwrsH-ngms------ydysTPVSGLIYYLt---a
+Q2QM98_ORYSJ/88-448   dag-----------------------ggaA---------------YPVGGLVYYVt---p
+Q6AV46_ORYSJ/86-471   gsllvd-----------------llgkwtP-d-----------aaVPVGGIAYYVt---a
+Q6C854_YARLI/70-454   dnlmvqv----------------lgswgaDg--------------SPVGGIAYYI-----
+SSH1_YEAST/78-465     knepthii--------------ckimghyE-nan--------nllAVPTFPLSLLa---p
+Q6BT20_DEBHA/78-475   nysqlaasii---------gtwsldtksfNl--------------NLTSGILYFL-----
+A5DE75_PICGU/20-414   syspvass--------------vigkwtiD-yrs--------snlKVSSGILYFLs---p
+A3GFV9_PICST/78-476   kanvssfalsi-------iasfnldsysnRl--------------NLTSGALYFF-----
+A5DWJ5_LODEL/34-436   kltaspivs------------tlfanyvvE-pys--------nrlVIKSGVLYFFt---a
+Q5A2C9_CANAL/5-404    klgtspivi------------siignyvyN-pss--------nelDLNSGILNYFt---s
+Q74L41_LACJO/64-372   ------------------------------------------------------------
+B3XPQ8_LACRE/65-377   ------------------------------------------------------------
+A1C3L4_STRPA/70-403   ---------------------------------------------FPGNQILEYLsvhig
+Q3DVD6_STRAG/65-395   -----------------------------P---------------DITSYNDYFS-----
+A5LN99_STRPN/64-389   -----------------------------S---------------GLAALSKEFM-----
+A3CM55_STRSV/64-391   -----------------------------Q---------------LIEQWIEALS-----
+Q03HZ8_PEDPA/65-396   ---------------------------------------------EFNRFVQNYV----a
+A5IW80_STAA9/64-384   -------------------------------l------------sMFNKSISDDMpm-lt
+Q4L9N9_STAHJ/61-383   -------------------------------a------------tLLGSNANFEFl---s
+Q5HKR3_STAEQ/61-380   -------------------------------g-----------rfIVNHNFETHVf---n
+Q9RSK8_DEIRA/68-413   -----------------------------P---------------EVNAWINSNL-----
+Q5SHQ8_THET8/71-413   ---------------------------------------------PVLQGIANFF-----
+SECY_CORGL/73-424     ev-------------------------sdN---------------WWQRNIIAHL-----
+A8LB12_FRASN/74-414   q----------------------------D---------------FEQRYLSR-------
+Q83NQ1_TROW8/73-424   qp-------------------------paA---------------WVVW-INENF-----
+Q8G3Z9_BIFLO/74-421   -----------------------------S---------------WVKW-INANL-----
+A7B9M4_9ACTO/72-414   -----------------------------K---------------WVQW-ISAHF-----
+SECY_CHLTR/73-433     -----------------------------S---------------WLKR-IATML-----
+Q1AU49_RUBXD/70-408   s----------------------------S---------------WLFR-LAQIF-----
+Q8RIH6_FUSNN/75-411   ---------------------------------------------SIKTTLSIIF-----
+A6DRC9_9BACT/79-428   -----------------------------D---------------FART-VAPYF-----
+C0ACZ0_9BACT/94-454   l----------------------------P---------------FLIE-FSNNL-----
+Q1Q157_9BACT/75-434   pgs------------------------vgY---------------WITSRLSGIL-----
+A6CGP8_9PLAN/77-435   st-------------------------saF---------------W--AMLDEAF-----
+B4S5A8_PROA2/73-417   ---------------------------------------------EVMQNVATIF-----
+Q2S3P5_SALRD/75-414   ---------------------------------------------ATMQRVGGWF-----
+A1ZGT4_9SPHI/72-404   --------------------------------------------------ASSAF-----
+A6EHP4_9SPHI/71-408   -----------------------------P---------------SLQNTWLVQF-----
+Q11QD2_CYTH3/72-411   -----------------------------E---------------FATT-IGSTM-----
+Q1VTY0_9FLAO/73-421   ---------------------------------------------EMAQGITAAF-----
+Q1NYZ7_9FLAO/72-422   -----------------------------N---------------NLQL-----------
+A5KHP6_CAMJE/62-402   -----------------------------P---------------YLQA-INDFL-----
+A4EA78_9ACTN/52-389   ---------------------------------------------WIQA-VASAL-----
+Q2GEC0_NEOSM/73-411   -----------------------------S---------------HLGEFIIRYF-----
+Q3YRM8_EHRCJ/72-412   -----------------------------P---------------WSDF-ILMYF-----
+Q5GSW3_WOLTR/77-416   -----------------------------A---------------FSDF-ILNYF-----
+Q0ANS0_MARMM/83-421   -----------------------------G---------------WLQS-AVAIL-----
+A7IPQ0_XANP2/80-418   -----------------------------E---------------WLQT-ITTHI-----
+SECY_RICCN/70-411     -----------------------------E---------------TMGM-LTYYL-----
+Q2G8W0_NOVAD/80-430   pdt-----------------------kmgQ---------------AIVT-LNQYL-----
+A6E0Q6_9RHOB/73-411   -----------------------------P---------------VLST-VMAYF-----
+Q1UZE8_9RICK/67-404   -----------------------------T---------------FLN--LSSYF-----
+Q3R245_XYLFA/76-424   ntl------------------------fgA---------------WLQR-VSSAL-----
+A4NK90_HAEIN/76-416   f----------------------------E---------------WLNN-LSMLL-----
+Q057C4_BUCCC/64-407   -----------------------------R---------------YVFNDYKKIIyffdf
+Q8D1Z2_WIGBR/82-424   v----------------------------K---------------WMSK-IPYYL-----
+Q6F7T2_ACIAD/83-426   nag-----------------------ivkR---------------SLQD-LALVL-----
+Q6Q8W8_9GAMM/67-407   l----------------------------S---------------FLQS-FSLAL-----
+A9BRX1_DELAS/74-413   m----------------------------R---------------WLKD-IASTL-----
+Q7DDS8_NEIMB/73-410   n----------------------------S---------------VLHK-IAGLL-----
+Q5NHU8_FRATT/74-416   l----------------------------S---------------WLAD-VAEML-----
+Q7WZR8_9GAMM/64-388   -----------------------------Q---------------WINRSILPQL-----
+A5EX98_DICNV/69-412   -----------------------------R---------------YLSDLAAGFH-----
+Q6MJ32_BDEBA/70-415   -----------------------------P---------------WLKA-LQDSL-----
+B5EFS0_GEOBB/71-411   -----------------------------P---------------WVQA-ASKQL-----
+A3EVQ1_9BACT/75-412   -----------------------------P---------------WIQS-FGKSL-----
+Q1MPP6_LAWIP/71-412   -----------------------------D---------------WLKD-IAVWF-----
+SECY_AQUAE/71-412     -----------------------------P---------------FIKV-IADMF-----
+Q01WB2_SOLUE/74-438   -----------------------------P---------------WLSK-TLATI-----
+Q08ZH8_STIAU/26-370   -----------------------------P---------------FLQT-FRQGL-----
+A6GCG0_9DELT/70-411   -----------------------------P---------------YLQR-FAAAF-----
+Q04PV8_LEPBJ/72-436   -----------------------------Q---------------WAGWAIIMDFfn-pf
+SECY_BORBU/72-409     -----------------------------S---------------IARQ-ILSYL-----
+Q73PL2_TREDE/73-413   ---------------------------------------------WLAS-VARFL-----
+Q67JW3_SYMTH/69-405   -----------------------------D---------------FAVF-VGRYL-----
+A7FQ38_CLOB1/69-409   y----------------------------K---------------FITLNQYSPF-----
+A6LPT1_CLOB8/69-416   a----------------------------K---------------WVLNNPTSIF-----
+Q0SQG4_CLOPS/69-409   s----------------------------Q---------------WITGSSYSPF-----
+A9KJH4_CLOPH/71-425   ray------------------------fwP---------------KVLHMLNSQSwfnik
+A7VH89_9CLOT/71-420   sgv------------------------gaK---------------ILQG-MSQSYwf-na
+A6BIS2_9FIRM/71-421   sgi------------------------gsE---------------ILRG-LNQSNwcnpe
+A7VR33_9CLOT/71-423   -----------------------------G---------------FWKT-VLDAL-----
+A6NXF0_9BACE/71-437   -----------------------------G---------------GMDSTFMKVF-----
+Q250L2_DESHY/70-413   -----------------------------A---------------YVRF-VNTWF----v
+Q8R7X3_THETN/69-402   -----------------------------S---------------FYNF-VQKWL-----
+A4XLR1_CALS8/69-419   -----------------------------G---------------FYKF-VKAYF-----
+A3DJJ2_CLOTH/71-411   -----------------------------P--------------------VAEYF-----
+A8MLG0_ALKOO/69-408   -----------------------------G---------------FAKF-LNTWL-----
+Q18CH6_CLOD6/69-406   -----------------------------A---------------FVQKYLSMAT-----
+B8D0S8_HALOH/72-406   -----------------------------G---------------WAQD-IATAL-----
+
+A9B431_HERA2/73-422   ---------------------------------GPNGLAF-TLAMFVLVLLFTYFYA-LV
+A8CRX1_9CHLR/78-422   m---------------------------------PGGLVY-WGLYFFMTIIFAFFYT-MV
+A2Y4E5_ORYSI/132-498  ----------------------------------GGPWAY-YLTYAFLVFVFNIF---DI
+Q7UZW2_PROMP/80-422   ----------------------------------SNPWPY-ALTFFALILGFSYFYA-SL
+Q7NKT4_GLOVI/79-416   ----------------------------------SSGWIH-NILYLVLILFFSFFYA-TL
+SECY_GUITH/68-404     ----------------------------------NNKLLY-LLFYFTLILFFSYFYT-SL
+SECY_CYACA/62-394     ----------------------------------PFKILF-LLLYSAFIIFFNYLYC-SL
+Q85FU6_CYAME/42-325   ----------------------------------TWSIWW---LYVACIIFFSHFYN-LV
+A0T0J6_PHATR/72-407   ---------------------------------ESLNFVY-WIGYFVLILVFSSFYS-TI
+SECY_CYAPA/109-459    ---------------------------------PFNSLFK-DFCYLITIMLFSSNYAlTI
+Q4G351_EMIHU/63-407   gl------------------------------aSKLLTIYsFGINFVLVIFFSCFYV-SL
+SECY_PAVLU/66-404     ---------------------------------NLQQIFY-FFTFLVLIIFFSFFYT-LI
+Q6B8X0_GRATL/62-395   ----------------------------------PGRILY-FPAYGSLIIAFSYFYT-SL
+SECY_ANTSP/62-390     ----------------------------------PNQFLY-LPLYLIFIITFSYVYT-SL
+A4RW47_OSTLU/65-398   ----------------------------------GGGAGY-VPVNVAMICFFNYFYT-FL
+A7PFA4_VITVI/131-465  ----------------------------------PGGSLY-LPTNILLIAFFNYYYT-FL
+A7HM32_FERNB/75-404   ----------------------------------MQSPLM-MIIYALLIFFFTYFYS-VV
+A3CK84_STRSV/69-416   ----------------------------------TTTISG-MFMYAFLIVLFTFFYT-FV
+Q5FM71_LACAC/68-415   ---------------------------------SLQTTPG-VIIYTLLIILFTFFYA-FV
+Q03ZM6_LEUMM/68-416   ---------------------------------SMTTLPG-AILYTALIVVFTYFYA-FV
+SECY_STAA8/69-413     ----------------------------------PSSNVG-MVVYIVLIILFTYFYA-FV
+Q4MG72_BACCE/68-415   ----------------------------------FAHPIG-MTLYVGLIVAFTYFYA-FI
+Q6F1X5_MESFL/92-454   ---------------------------------SFNTWWG-IGIFAVMIVLFTFLYA-QV
+Q6KI36_MYCMO/87-436   ----------------------------------PNNTIG-FILFISITFIFAIFFG-LQ
+Q4A5I3_MYCS5/83-437   ----------------------------------FYKPLG-FSLLIIITFVFSLLMG-IQ
+Q98Q01_MYCPU/90-438   ----------------------------------FTHPIG-FSLLIIITFIFSIFMG-LQ
+Q4AAF9_MYCHJ/85-434   ----------------------------------IYHPIG-LIIFIVFNVSFSIIMS-LQ
+Q9PQP1_UREPA/76-434   ---------------------------------IVDSWTG-LAIYVVLILLFTFFFS-YV
+SECY_MYCGE/81-430     ---------------------------------SLSTPVG-IFLYAVLVILFSFFYS-YI
+Q8EUD2_MYCPE/81-433   ---------------------------------SIERPVG-LVIYTVLIVLFGFFYS-HI
+Q7X4E3_9MOLU/69-399   ----------------------------------SELGIY-FFVYILLIMLFSFFSS-FM
+Q5Q069_ASTYP/59-398   n---------------------------------NQINFFaIGFLVLLVIVLSFFSA-FM
+O21257_RECAM/57-372   -----------------------------------------NIFLEMLCMMFIYLFL---
+Q74NB9_NANEQ/69-457   flislilg-------------------nltldnLIRTITS-SLFFLGSSILFSIYFVlAT
+Q2EMT2_METVO/30-379   -pygls----------------------svisdPIHAIVY-TLFLIGFCVLFGLFWVeTS
+A5UL65_METS3/72-433   -pndvs----------------------llvtdPVRVIVY-AFFFLLCAVLFSYLWVeIS
+SECY_METTH/73-436     -prsid----------------------alildPFRVVFY-AVVFIGLCVLFAWLWVeIS
+SECY_PYRAB/72-448     -prsif----------------------tvidnPVRALVY-LILTVISSLIFGFLWVeLT
+Q8TZA9_METKA/75-435   -pnsiv----------------------ktlsdPLQALGY-MMAMVIASVFFAVLWVeLT
+Q9HIT0_THEAC/82-514   -pnglsdwlfpilqps---gyqnillghtplqeAIHIIVF-TAFMVGFSVLFAIFWIeTT
+Q2QAQ7_9EURY/161-583  -vngvgdwllplln------qspdpyghslwqvVLHVITY-VTVMTLGSMMFAKFWIeTT
+Q0W1W5_UNCMA/75-487   -inglsdwvpqla--------alnypgiqlwqiALHVFTD-AFILIAGGILFAIFWVeTT
+SECY_ARCFU/73-471     -vsspydwipslvks-----qgaafaaipdwmiYLHLLID-ALILVVGGIIFAWFWVeTS
+Q8TRS4_METAC/72-470   -ihspydwipslvres---fasygatapaiwqiGLHVLAD-AIMLIGGGIIFALFWIeTT
+A0B9U7_METTP/75-515   -ihgpsdwipsmvsqstpglvelginpiagwqiWLHLLTD-TAFLIIGGIIFAIFWIeTT
+SECY_HALMA/73-468     -iqsrgdwmwwl-----------egtaqpvwqiLTRVGID-LFVMLVGGAVFAVFWVeTT
+Q2FSG8_METHJ/73-458   -inhpsdwmwwmp---------syvgghapwevLIRLGID-TTIMVVGGAIFALFWVkTA
+A2SPM5_METLZ/73-458   -inqpqdwmwwls--------sftgtghavwevILRVGID-CTVMILGGALFAIFWVkTA
+A0RUE4_CENSY/79-457   -prgld----------------------iaaldPMRAVGY-VLFMIGIVVVFGKLWVeLG
+A8ME75_CALMQ/77-461   -vpy--------------------------nitPQYVVVH-ILMYVVLSVVFAYLWVnLA
+A3MUZ2_PYRCJ/70-435   -hry---------------------------fdPLLIILN-FALYVALAIAFAWIWVqLA
+SECY_SULSO/73-449     aiphsiy---------------------avvldPLGALEY-AVVFIVLSILFGILWVdVA
+SECY_SULAC/74-443     gvphsvy---------------------alvvdPVGAAIY-AAVFIVLSIVFGMLWIdVA
+A2BME2_HYPBU/73-444   -prgll----------------------aavadPLRTLTF-ALAWLALGLLFGFIWVeIA
+SECY_AERPE/73-434     -prgvv----------------------qsiadPVKTAVF-IASWTVLSIVFGYMWVeIA
+A1RWR3_THEPD/75-456   -prsla----------------------saladPVHLVVY-SLLYIGFAVLFGVAWIlTS
+SC61A_SCHPO/76-459    -pasfq----------------------dalidPIHTLVY-VFFTMFACALFSKLWIeVS
+A7E5Q2_SCLS1/76-459   -plnft----------------------dalldPIHTAVY-ITYMLVACAIFSKTWIeVS
+Q5KC69_CRYNE/75-459   -phslt----------------------salkdPFHTVIY-IAFIVTACALFSKTWIeVS
+SC61A_ASHGO/75-460    -pfsft----------------------ealldPIKTVVY-VTFVLGACAMFSRTWIdVS
+Q59MJ6_CANAL/76-459   -pfnft----------------------dalldPIKTTIY-IAFVLGSCAVFSTTWIeIS
+A7SJW4_NEMVE/75-458   -petvs----------------------hiiedPVHACIY-IFFMLGSCAFFSKTWIdVS
+A0CFY2_PARTE/73-456   -lrdvk----------------------diindPIHAVVY-VLFVVFMCGFFAKFWIqIS
+Q22MG2_TETTH/151-538  -phgmi----------------------evisdPLHTILY-VVFILTTCALFSKTWIqVS
+A0CU87_PARTE/77-460   -prsis----------------------eaifdPIHTILY-TAFILGTCAVFSKTWIdVS
+Q7RLN0_PLAYO/121-506  -pnsfa----------------------ditndPFHTLIY-ISFVLVSCAFFSKTWIeVS
+Q4QGX4_LEIMA/77-467   -patfy----------------------dlladPIHAIFY-VVFVLTSCAVFSRLWItIS
+A5JEK2_NOSBO/75-457   -pesif----------------------dfklrPFYFLFY-VLFTIISCSMLSRAWVeVS
+A2DH65_TRIVA/75-462   -pqsiq----------------------qtihdPLHTIIY-LIFSLSSAGFISYYYLrFS
+Q2QM98_ORYSJ/88-448   -pskll----------------------vdpglIHELLIH-SVFVVASCTLLSMAWAeAS
+Q6AV46_ORYSJ/86-471   -pasaa----------------------saaanPLHAAMY-VAFVLAACAALSRAWVvVS
+Q6C854_YARLI/70-454   spnnf-------------------------gydVIKMVLY-SVYTIVGCTLFSKYWAeIS
+SSH1_YEAST/78-465     -ptsffk---------------------gvtqqPLTFITY-SAFILVTGIWFADKWQaIS
+Q6BT20_DEBHA/78-475   tpsksla---------------------qsllsPIRSVTY-GLAIITLSTWFAYRWSrIS
+A5DE75_PICGU/20-414   -ptsil----------------------ntlvsPLKTAAF-TFVVIVLSAWFANIWSsIS
+A3GFV9_PICST/78-476   ssspsll---------------------stilsPIRTVVY-SATVIVLATWFAEKWSyIS
+A5DWJ5_LODEL/34-436   -sqtll----------------------qsiisPLRVVIY-SSTVVGLATWFAYKWSyIA
+Q5A2C9_CANAL/5-404    -ssslv----------------------esiisPIKTTVY-SITIIVLAVWFANKWSyIS
+Q74L41_LACJO/64-372   ----------------------------------INNWVFqASFSAVMGILIFYFFT-FV
+B3XPQ8_LACRE/65-377   ----------------------------------FANPYFnMVVSGILAFVLFYFFT-FV
+A1C3L4_STRPA/70-403   ----------------------------------LSQLPG-VICYIFLLYFLSIGFA-YY
+Q3DVD6_STRAG/65-395   ----------------------------------LSSIQG-VVIYMILMLVLSVAFT-FV
+A5LN99_STRPN/64-389   ----------------------------------IGKPLW-VYVYISVLFLFSIIFA-FV
+A3CM55_STRSV/64-391   ----------------------------------MGSPAW-FILYLLTIFILALAFA-FI
+Q03HZ8_PEDPA/65-396   ----------------------------------FDNPVG-ILIYCSIIVFLGYVFS-FM
+A5IW80_STAA9/64-384   ----------------------------------FDSPVG-ISVYLVIQMLLGYFLS-RF
+Q4L9N9_STAHJ/61-383   ----------------------------------FANPIG-IMFYIVLQIVLSYLLS-RF
+Q5HKR3_STAEQ/61-380   ----------------------------------FTNPVG-ITIYLLLQMILGYFLS-RL
+Q9RSK8_DEIRA/68-413   ---------------------------------TFGQPLY-LALESLLIFGFTYLYN-SV
+Q5SHQ8_THET8/71-413   ---------------------------------NPTRPSG-LFIEVLLVILFTYVYT-AV
+SECY_CORGL/73-424     -q-------------------------------TPSSWQY-IVLYFALTIFFSYFYV-SV
+A8LB12_FRASN/74-414   ----------------------------------GDHPLY-LVAYGALIIFFTYFYV-AI
+Q83NQ1_TROW8/73-424   -t-------------------------------TGNSPFY-IALYFFMIVGFTYFYV-AV
+Q8G3Z9_BIFLO/74-421   -a-------------------------------NTTSVWY-IALYALMIVFFCFFYT-SI
+A7B9M4_9ACTO/72-414   ---------------------------------TQGSSFY-LTIYALMTLFFTFFYT-AI
+SECY_CHLTR/73-433     ---------------------------------SPGSVAY-SIFYVLLIIFFTYFWT-AT
+Q1AU49_RUBXD/70-408   ---------------------------------APPSAPY-LILYALLIVMFTYFYT-AV
+Q8RIH6_FUSNN/75-411   ---------------------------------GQNHPVY-MILYALVIMFFSFFYT-AL
+A6DRC9_9BACT/79-428   ---------------------------------DFGSTSY-LIIQGVMILVFTFFWV-AT
+C0ACZ0_9BACT/94-454   ---------------------------------MRGHWVY-YVTMTLLILFFSYFWV-SV
+Q1Q157_9BACT/75-434   ---------------------------------Q-EGVLY-VMLYILLITFFCYFWT-AI
+A6CGP8_9PLAN/77-435   -q------------------------------pMSRGFVY-TMSYVVLIYFFCYFWT-AI
+B4S5A8_PROA2/73-417   ---------------------------------SYDSWWY-ALMFGTMIVFFTYFYT-AI
+Q2S3P5_SALRD/75-414   -s-------------------------------DISSMSY-SAVFFVVVVFFTYFYT-AI
+A1ZGT4_9SPHI/72-404   -s-------------------------------DITTWQY-NLVFGLLIIIFTYFYT-AI
+A6EHP4_9SPHI/71-408   -s-------------------------------DYTSLAY-SLTFAFLIIAFTFFYT-AI
+Q11QD2_CYTH3/72-411   -s-------------------------------DFTSWQY-NVAFATMIILFTYFYT-AI
+Q1VTY0_9FLAO/73-421   -q-------------------------------NMFGFWY-SLVFGILIIVFTYFYT-AI
+Q1NYZ7_9FLAO/72-422   ---------------------------------SNNGIWY-NILYSILIIIITFFYT-FL
+A5KHP6_CAMJE/62-402   ---------------------------------NPNGYLF-HVLTFLFVIFFAYFYA-SI
+A4EA78_9ACTN/52-389   ----------------------------------STGWLN-WVLNVVLIVFFAYFYT-SM
+Q2GEC0_NEOSM/73-411   ---------------------------------SVGQPLY-FLLHSCLLVFFCFFYS-DF
+Q3YRM8_EHRCJ/72-412   ---------------------------------SSGKLLY-IVCYALLIIFFAFFYT-AF
+Q5GSW3_WOLTR/77-416   ---------------------------------MANKVVY-IAAYLALIVFFNFFYT-NF
+Q0ANS0_MARMM/83-421   ---------------------------------GPGSPWF-MMAYAAMIIFFCFFYT-SV
+A7IPQ0_XANP2/80-418   ---------------------------------GHGRPAY-MVLYVLLIVFFCFFYT-AI
+SECY_RICCN/70-411     ---------------------------------GHGKPVY-ILLYVALIMFFSFFYT-AI
+Q2G8W0_NOVAD/80-430   ---------------------------------GHGKPLY-MLFYALGIIFFSFFYT-AV
+A6E0Q6_9RHOB/73-411   ---------------------------------GPGQPLY-LLFFTIMIVFFAYFYTfNV
+Q1UZE8_9RICK/67-404   ---------------------------------TQGQPLY-MLLYASGIIFFTFFYT-SI
+Q3R245_XYLFA/76-424   ---------------------------------GPGEPLH-MILFAVLIIGFAFFYT-AL
+A4NK90_HAEIN/76-416   ---------------------------------NPGQPLY-LLVYAVAIIFFSFFYT-AM
+Q057C4_BUCCC/64-407   l--------------------------------KFKHSIY-LIVNIILIIFFCFFYT-NI
+Q8D1Z2_WIGBR/82-424   ---------------------------------EPGTFSY-SILYASAIMFFCFFYT-SL
+Q6F7T2_ACIAD/83-426   ---------------------------------SPGQPLY-LMLFGTLIIFFCYFYT-AL
+Q6Q8W8_9GAMM/67-407   ---------------------------------NPGQPLY-ILVFAGLIISFCFIWL-AL
+A9BRX1_DELAS/74-413   ---------------------------------TPGQPIY-VMLYATAIIFFCFFYT-AL
+Q7DDS8_NEIMB/73-410   ---------------------------------QHGQLLY-MALFAATVIFFCYFYT-AL
+Q5NHU8_FRATT/74-416   ---------------------------------QPGSIVY-TVVFAATIIFFCFFYT-SL
+Q7WZR8_9GAMM/64-388   ---------------------------------SPGQPLY-IMFFVLSVIFYSFFYT-AI
+A5EX98_DICNV/69-412   ----------------------------------QGAWLY-IATFVLLIILFSFFYT-SI
+Q6MJ32_BDEBA/70-415   ---------------------------------NPSGAIF-NIMFVALIVFFSFFYT-EI
+B5EFS0_GEOBB/71-411   ---------------------------------APGKLLY-EVLFVAFIVFFCYFYT-AV
+A3EVQ1_9BACT/75-412   ---------------------------------SPGSFSY-TGLYVLLIVFFCFFYT-AV
+Q1MPP6_LAWIP/71-412   ---------------------------------SPSTILY-NCIFLVLIFFFCYFYT-AI
+SECY_AQUAE/71-412     ---------------------------------QPGAIFY-NFLYVTFIVFFTYFYT-AV
+Q01WB2_SOLUE/74-438   ---------------------------------QHGEPMY-YVLFVAGIIFFCFFYV-SI
+Q08ZH8_STIAU/26-370   ---------------------------------EGNPWLY-NGLFVLLVIFFAYFYT-AL
+A6GCG0_9DELT/70-411   ---------------------------------SYGNWLY-LTVYVALCIFFCYFYT-QI
+Q04PV8_LEPBJ/72-436   sq------------------------------iWYHALFY-YIIYTSLIIFFAYFYT-AI
+SECY_BORBU/72-409     ---------------------------------RPNGFYY-TFLNVILIIGFTYFYS-KI
+Q73PL2_TREDE/73-413   ---------------------------------RSDGWGY-NVLYVVLIIFFAYFYT-QV
+Q67JW3_SYMTH/69-405   ---------------------------------DTRSWWF-MLINALLIVFFTYFYT-AI
+A7FQ38_CLOB1/69-409   ---------------------------------RDKSIAY-IVLYFLLTVFFTWFYT-VV
+A6LPT1_CLOB8/69-416   ---------------------------------NNKSWMY-MVLYAVLTIFFNWFYT-QI
+Q0SQG4_CLOPS/69-409   ---------------------------------NAKTWMY-PVLYALLTIFFTWFYT-QI
+A9KJH4_CLOPH/71-425   ng-------------------------------EFKYTVG-VLIYMALIVFFAYFYT-SI
+A7VH89_9CLOT/71-420   -n-------------------------------YPWGFLG-LAVYILLVFFFAYFYT-AI
+A6BIS2_9FIRM/71-421   qi------------------------------kYSW---G-LVLYIVLTVFFAYFYT-SI
+A7VR33_9CLOT/71-423   ---------------------------------STTGWVY-ALIYFLLILMFAYFYV-AI
+A6NXF0_9BACE/71-437   ---------------------------------DSNGLVY-AIVYFLLILGFSYFYA-TM
+Q250L2_DESHY/70-413   mn------------------------------gSLTSIPY-LIVYAVLIIFFTYFYT-AV
+Q8R7X3_THETN/69-402   ---------------------------------STNGLIY-NLLDIFLIIGFTYFYT-AV
+A4XLR1_CALS8/69-419   ---------------------------------SSGSFWY-TFFYALFIIGFTYFYT-AI
+A3DJJ2_CLOTH/71-411   -r-------------------------------SFQSRIEvAILTGLLIIFFTFFYT-FI
+A8MLG0_ALKOO/69-408   -sp----------------------------tgMPGVFIY-NLLSAVLIIFFTYFYT-AI
+Q18CH6_CLOD6/69-406   ---------------------------------EQGFWTY-RSIEILLIIFFSYFYT-TV
+B8D0S8_HALOH/72-406   ---------------------------------EPGKPVH-LVLYAAMIFFFTYFWT-AF
+
+A9B431_HERA2/73-422   MFNQQNLPEMLQRNGGFIPGIRPG-RNTEVYLTKVLNRITLIGAV-GLAVVAALP--YFV
+A8CRX1_9CHLR/78-422   TFEQQDIPGTLQRQGGFVPGIRPG-KMTDQYLSGVIGRITWAGAL-FLGFVAIMP--FIA
+A2Y4E5_ORYSI/132-498  ANLPKEISDYLNKMSARVPKIKPG-RATVEYLTKIQTSTRFWGGI-LLSLLATSS--LLL
+Q7UZW2_PROMP/80-422   TINPVDVASNLKKGGVAIPGVRPG-SNTANYLSGIQNRLTLLGGL-FLGSVAIIP--AAV
+Q7NKT4_GLOVI/79-416   IINPEDVSKNLKRMGSSIPGVRPG-TATSEYIAKVMNRLTFLGAI-FLSAVAIIP--TFV
+SECY_GUITH/68-404     ILNPNDVSKNLKKMESSIYGVRPG-KATTEYLQKTLNRLTFLGAL-FLAFIAIVP--NII
+SECY_CYACA/62-394     VLNCFELSNNLKKASVVIPSIRPG-KMTEKFFKDTLDNLTLFGSG-FLAFIVLAP--NFL
+Q85FU6_CYAME/42-325   IANPKELSENLNKMAVVIPSIRPG-AETQQYLNRTLNRMSWIGGI-ALSLIALLP--WLF
+A0T0J6_PHATR/72-407   VLNPKDISDQLQKMAVTIPGIRPG-IQTTFYLKQVMKRITLLGTT-MLATLATIP--NFV
+SECY_CYAPA/109-459    MINPKTLAENLNSMNALIPGVRPG-SETKVYSEQLIHRLNFIGSF-VLALVCILP--SIV
+Q4G351_EMIHU/63-407   VLKPKDMSENLGKMAYSIPGIRQG-KETTKYLEKVINRLAFIGGL-FLAFLAFFP--LFV
+SECY_PAVLU/66-404     ILSPSDIAKNLKKMSSVIQDTKPG-VATKVYIRKFILQASFVGSI-LLSALILIP--SIL
+Q6B8X0_GRATL/62-395   VLNPDDIAENLNKMGASIPSIRPG-SDTIRYISKILDKMTFMGGV-FLFIIALIP--SLI
+SECY_ANTSP/62-390     ILNPEDIAKNLKKMGASIPNIRPG-SETIKYLNTRINRLTLIGAC-FLFTITLFP--TIT
+A4RW47_OSTLU/65-398   QLEPKDVADQLKRQGASIPGVRPG-AATRDYITRVLERLSVLGSV-FLGALALTP--GAV
+A7PFA4_VITVI/131-465  QLDPDDVSEQLKRQGASIPLVRPG-KSTAAFIKMVLSRISVLGSG-FLAILAAGP--SLV
+A7HM32_FERNB/75-404   VIDPKDISENIKRYGGFIPGIRAG-KPTEEYITFVLNRVTFLGAI-FLVGISLLP--YLV
+A3CK84_STRSV/69-416   QINPEKTAENLQKSGAYIPGVRPG-KGTEDYMSKLLRRLATVGSL-FLGFISILP--ILA
+Q5FM71_LACAC/68-415   QVNPEKLAENLQKQGAYIPSVWPG-KDTQNYISKMLIKLSTVGSI-FLGLVALLP--QLA
+Q03ZM6_LEUMM/68-416   QVNPDKLSENLQKQGAYIVGVRPG-AETKAFVSKLLLNLSFVGSI-FLGVVALVP--LIA
+SECY_STAA8/69-413     QVNPEKMADNLKKQGSYVPGIRPG-EQTKKYITKVLYRLTFVGSI-FLAVISILP--ILA
+Q4MG72_BACCE/68-415   QVNPEQMAENLKKQNGYVPGIRPG-KSTEQYVTKILYRLTFIGAI-FLGAISILP--LVF
+Q6F1X5_MESFL/92-454   QINPEKISENFQKSGTFIPGIKPG-KDTTNFLKGTINRLSLFGAI-FLAAIAALP--YVI
+Q6KI36_MYCMO/87-436   QSKVDKIAEDFAKNSTFIPGIKPG-QETETYLTGIVLRLCFFSAF-YLIIIGGMQfaQQL
+Q4A5I3_MYCS5/83-437   QSKVDKIAEDFAKNGTFIPKVTPG-EETQNYLVAIVFRLSFFSAF-YLVIIAGMQyvQIM
+Q98Q01_MYCPU/90-438   QSKIDKISEDFNKSGTFIPGLRPG-DQTENYLIDVVLRLSTFSAF-YLSILVSIQyiMQM
+Q4AAF9_MYCHJ/85-434   QSRVDKIAQDFAKNSTFIPGIRPG-EQTEDYLISVVLRLSVFSAI-YLTFLGILQpvEIM
+Q9PQP1_UREPA/76-434   QLNPPKMAEDIKKAGRFIPGVQVG-MDTEKHITKVIYRVNWIGAP-ILAFLACLP--HLV
+SECY_MYCGE/81-430     QINPERLAKNFEKSGRFIPGIRPG-NDTEKHIARVLIRINFIGAP-FLTVIAIIP--YIV
+Q8EUD2_MYCPE/81-433   QVNSEKLAENFQKSGKFIPGVKMG-EETQKYISKTLNRVNCIGVP-FLACLAIVP--YLI
+Q7X4E3_9MOLU/69-399   TINPKDVAEHLSKQNAYLKDVQPG-LPTVKKIVREMFKITFLGSC-FLTLLASTP--DII
+Q5Q069_ASTYP/59-398   NVNPEDISEHLSKQDAYIAGLRPG-EQTTRYLANTLFKITVLGTV-FITALVVTP--ILM
+O21257_RECAM/57-372   -------SRFLKKYLKFIYNINKN-NIYIEHINKNIYSIFFISHLyYLGILRDYClfCFL
+Q74NB9_NANEQ/69-457   GQDSEGLAKQLSKMFGRI-GLKRDyRIIKHYLDKIIPCVTVLGGF-IVGFLALLS--YWV
+Q2EMT2_METVO/30-379   GLDAKSMAQRLGGLNMAIKGFRKSnKSIENRLKRYIKPITVMGSA-FVGLLAALA--DFT
+A5UL65_METS3/72-433   GLNAKKISEQLYKSGIQIPGFRSSkRQLYKILKKYIPALTIISGL-YVGIIAFCA--DLT
+SECY_METTH/73-436     NIGPRHVARQLYQMGMQIPGFRSSrGQFEKILKRYIPTITILGGA-FVGLLAFVA--DLT
+SECY_PYRAB/72-448     GLDARTIARQLQRAGLQIPGFRRDpRTLERVLQKYIPYVTFWGSL-TVALIAVLA--DFL
+Q8TZA9_METKA/75-435   GMGPREIARHLHRAGLHIPGFRRDiRVLEKRLQKYIYPVTVMGGA-FVGFLAAGA--DLM
+Q9HIT0_THEAC/82-514   NMGASAVAKQIQASGMQIPGFRRDpRVMERVLKKYIPAITIFSGA-VVGLLAAGA--NLI
+Q2QAQ7_9EURY/161-583  NMGAKDVAKQIENTGMQIPGFRKNpKVLERILMRYIPPVTLFSGA-FVGLLAAGA--DLL
+Q0W1W5_UNCMA/75-487   GMGASRVARQIQKSGMQIPGFRRNeQVIEKVVSRYIPKVTVIGGA-FVGFLTLLS--SLF
+SECY_ARCFU/73-471     GMDARTVASQIAKSGMQVPGFRKSpQVLERVLSRYIPKVTILGGA-IIGILTLVA--NML
+Q8TRS4_METAC/72-470   GMGAKPTAQKIFNSGMQIPGFRRNiGSIEKVMQRYIPKVTVIGGA-FIGILTLVA--SLL
+A0B9U7_METTP/75-515   GMGAKSIAAKIHASGLQIPGYRRSpVSIERLMERYIPKVTVIGGA-IIGLLTVIA--SLL
+SECY_HALMA/73-468     DMGPEATAKQIHNSGMQIPGFRQNvGVIEKVLERYIPQVTVIGGA-LVGLLAVMA--NML
+Q2FSG8_METHJ/73-458   GLDSKAVARQIQLSGMSIPGYRRNpAVLEKVLDRYIPRVTVIGGV-FIGIMSVVA--NLF
+A2SPM5_METLZ/73-458   GLDSKHVARQIQNSGMQIPGYRRSpAVLERYLDRYIPRVTVIGGV-FIGLLSVMA--NML
+A0RUE4_CENSY/79-457   GLSPKSAAKNLLDADVQIPGFRRSnQPIEVLLNKYIPSVTIIGSM-ILGALAGAS--DVL
+A8ME75_CALMQ/77-461   GLSAEDQARTMVSSGLSIPGFRASaRSLAVHLKRYVNSLTFTSGL-LAGFIAALG--DVL
+A3MUZ2_PYRCJ/70-435   GLSAEDQARQFTQSQLHVPGFRQSeRVLAKILERPINALTIISGF-IAGTFASLG--NVL
+SECY_SULSO/73-449     GLDPATQAQQLVEAGIEIPGVRNNpKIIEGILARYIYPLAFFSSI-IVGLIAVFA--TLL
+SECY_SULAC/74-443     GLDPKTQAEQMIRSGIEIPGMRTNpRIIEGILSKYIYALGFFSSL-IVGLIAVVA--TFL
+A2BME2_HYPBU/73-444   GLSPRQQAENLIKSGMELPGIRKNvKLLERILARYIYPLTVISSL-LVTTMAILA--DVF
+SECY_AERPE/73-434     GLNPREQAERLIKGGLAIPGMRSDpRVLERVLRRYIYPLTFLSSL-IVAALVIVA--DIF
+A1RWR3_THEPD/75-456   GMDPETQAEQLAKAQLQIPGFRKSeKVIASMLKRYIWGLTILSSI-IIGVIAVVS--DIF
+SC61A_SCHPO/76-459    GASPRDVAKQLKSQQLVMAGHRE--GSMYKELKRIIPTAAWLSGA-VVGALAVAS--DLL
+A7E5Q2_SCLS1/76-459   GSSPRDVAKQLKDQGLVMAGHRE--QSMYKELKRIIPTAAAFGGA-CIGALSVGS--DLL
+Q5KC69_CRYNE/75-459   GSGPRDVAKQLKDQNMTLAGHRD--ASIYKELKRIIPTAAAFGGA-TLGLLSVVA--DMM
+SC61A_ASHGO/75-460    GTSPRDVSKQFKEQGLVINGRRE--TSVYRELKKVIPTAAAFGGA-TIGALSVGS--DLL
+Q59MJ6_CANAL/76-459   GTSPRDVAKQFKEQGLVIAGHRD--TSAYKELKKIIPIAAAFGGA-TIGALSVVC--DLM
+A7SJW4_NEMVE/75-458   GSSAKDVAKQLKDQQMVMRGHRD--KSMVHELNRYIPTAAAFGGL-CIGALSVLA--DFL
+A0CFY2_PARTE/73-456   GESAKDVARKFKDEQIKIKGLRE--ESMVKYLSGYIPVAAFCGGV-CIGLLTIVA--DIL
+Q22MG2_TETTH/151-538  GSSVKDVAKQLKEQGMGLVGSRD--SGLKSHLKRYIPIAATFGGL-CIGALSVVA--DFI
+A0CU87_PARTE/77-460   GSSPKDVAKQLKEQDMQIVGYRD--SSMKDVLKRYIPIAASFGGM-CIGALTILA--DFL
+Q7RLN0_PLAYO/121-506  GSSAKDVAKQLRDQHIGMRGHRDTpTSLTRVFNRYIPTAAAFGGM-CIGALTILA--DFL
+Q4QGX4_LEIMA/77-467   HTAPRDVAKQLASQGRWLVQARESeDDMTRLLEKYIPVAASFGGL-CVGALTIFA--DFL
+A5JEK2_NOSBO/75-457   DNTPTQVASQMKKNKMTLKGVRE--VNCASVLSKYIPTAALLGGC-FTSLVVLIS--NLF
+A2DH65_TRIVA/75-462   NQAPADVAEALKKQHLTLKGHREDqKRLEKTLSRYIPTAAALGGI-LVALLSFVA--DFL
+Q2QM98_ORYSJ/88-448   RSSAREFRTRVIGTGYFVW------DETSRRIDRVIAAAAAVGGF-AVGGLAVYA--GAV
+Q6AV46_ORYSJ/86-471   GSSSRDVARRLREQQMVMPGMRE--ASMQRELERYIPAAAALGGV-CVGALTVAA--DLM
+Q6C854_YARLI/70-454   GSAPKDVAKQFQAQSIVIVGQRA--QSAPRELAKVIPVAAAVGGA-VVGAIVAFC--DIF
+SSH1_YEAST/78-465     GSSARDVALEFKDQGITLMGRRE--QNVAKELNKVIPIAAVTGAS-VLSLITVIG--ESL
+Q6BT20_DEBHA/78-475   GSSPKDISKQFKEQGISISGKRD--ISITKELSRVIPVASVSGAF-VLAALAIAG--ELL
+A5DE75_PICGU/20-414   GSSPKDISKQFKEQGISIAGKRD--ISITKELSRVIPVASVSGAT-VLGLIAVAG--EVL
+A3GFV9_PICST/78-476   GSAPKDISKQFKDQGISISGKRD--ISITKELSRVIPVAAVSGGF-ILAAIAVAG--DLL
+A5DWJ5_LODEL/34-436   GSSPKDISKQFKEQGISIAGKRD--ISITKEFAKIIPTAAVTGAF-ILSALAVTG--DYL
+Q5A2C9_CANAL/5-404    GSSPKDISKQFKDQGISLAGKRD--ISITKELSRVIPVASVSGAF-ILSVVALIG--DFF
+Q74L41_LACJO/64-372   NFDPKEQAKSFRNNHYYIPNIAPG-RPTQRYLNRLIWIIAFPGAV-LNAFQLVFG--LYG
+B3XPQ8_LACRE/65-377   QFDPKAQAKAMLQGNNYILGVRPG-EPTRKYLRQILLHVSFLGAL-LNAIQLSFG--LLG
+A1C3L4_STRPA/70-403   NYDPYEISKNMRNNGDYISGKKPG-EETIKYIQYVVNSFAQFGAF-TVIIFGGLP--MLA
+Q3DVD6_STRAG/65-395   NIDPTKISEAMRESGDFIPNYRPG-KETQSYLSKICYLFGTFSGF-FMAFLGGVP--LLF
+A5LN99_STRPN/64-389   TMNGEEIADRMKKSGEYIYGIYPG-ADTSLFINRLVLRFSVIGGL-FNVVMAGGP--MLF
+A3CM55_STRSV/64-391   NISGDQIAERMQKSGEYIENVYPG-GATRRYINGLVTYFALVGAF-YLILISGLP--MMV
+Q03HZ8_PEDPA/65-396   NFQTERLTKNLKKSGDYIFNVVPG-TATRHYLNQRLFHLSTVANI-FFLIIVGTP--LIV
+A5IW80_STAA9/64-384   LINTKQKSKDFLKSGNYFSGVKPG-KDTERYLNYQARRVCWFGSA-LVTVIIGIP--LYF
+Q4L9N9_STAHJ/61-383   LINTKKKADEFLKNGNYFDPIRPG-RETERYLNSKARRVCWTGAI-LVALILAVP--LYS
+Q5HKR3_STAEQ/61-380   LINTKRKSKEFLKNGNYFEGIQPG-QQTEKFLGSKARRICWFGSI-VVAIVLAIP--MYS
+Q9RSK8_DEIRA/68-413   QFDPKRIAEQLREAGGFIPGVRPG-GPTADFLGRISGRLSLWGAI-FLVILTILP--QLV
+Q5SHQ8_THET8/71-413   QFDPKRIAESLREYGGFIPGIRPG-EPTVKFLEHIVSRLTLWGAL-FLGLVTLLP--QII
+SECY_CORGL/73-424     QYDPAEQAENMKKYGGFIPGIRPG-RPTAEYLGFVMNRLLFVGSL-YLAVIAVLP--NIM
+A8LB12_FRASN/74-414   TFNPTEVADNMRKYGGFIPGIRPG-RPTAEYLDHVLSRITLPGSL-FLGVITVLP--LAL
+Q83NQ1_TROW8/73-424   TFNPTEIADNMKNYGGFISGIRPG-VPTANYLSYIIKRITLPGSL-YLGIVSLIP--LIA
+Q8G3Z9_BIFLO/74-421   TFNPDETADNMKQYGGFIPGIRAG-NATSRYLTYVMNRLNTVGAV-YLLFVALIP--TVL
+A7B9M4_9ACTO/72-414   TFNPDEVADNMKKYGGFIPGYRAG-RPTAEYLRYVINRITSAGAL-YLVIIALLP--SLA
+SECY_CHLTR/73-433     QFRPEQIASEMKKNGAFIPGIRQG-KPTQTYLEYTMNRVTLLGAV-FLAVVAILP--SIL
+Q1AU49_RUBXD/70-408   QFNPIEHADNLKKSGGYIPGIRPG-QPTALYLNSVLTRITLFGAV-FLAVIAVLP--YLI
+Q8RIH6_FUSNN/75-411   VFDPEKVAENLKQGGGTIPGIRPG-EETVEYLEGVASRITWGGGI-FLAIISILP--YVI
+A6DRC9_9BACT/79-428   QFNPIQIADDLNRSGAFVPGHRPG-EPTSTFLNDTMTRITVAGAI-FLVILALLP--YVL
+C0ACZ0_9BACT/94-454   MFKPIQIAEDLKKYGGYIPGVRPG-EPTAKFLDFVMTRITLAGAI-FLTIIAVFP--DFL
+Q1Q157_9BACT/75-434   QFNPREMSNNMKDYGSFIPGIRPG-HRTAEYLESIMGKITLAGAA-FLSLIAILP--KLV
+A6CGP8_9PLAN/77-435   TFNPKDMAENLKDYGSFIPGYRPG-ARTAAYLEQVMVRITYVGAA-FLSLVAIIP--TLV
+B4S5A8_PROA2/73-417   AFNPKEVADTMRRQGGFIPGVRPG-KSTADFIDNILTRITLPGAI-SLAFIAVLP--TFL
+Q2S3P5_SALRD/75-414   TVNPQEMADTMKRQGGFIPGIRPG-KQTSEFIDTVLTRITLPGSI-FLGLVAIFP--AFA
+A1ZGT4_9SPHI/72-404   SVNPKQIADDLKRNGGFIAGVKPG-SDTSEYIDKIMSKITLPGSI-WLAIVAILP--AIA
+A6EHP4_9SPHI/71-408   TVNPTQMSDDMKKNGGFIPGIKPG-FATSSFIDDVISKITFPGAV-FLAIIAILP--SVA
+Q11QD2_CYTH3/72-411   TVNPNSIAEDLRRNGGFIPSVKPG-LATSEYIDDVLTKITLPGSI-FLALLAILP--AFA
+Q1VTY0_9FLAO/73-421   TVPTNKMADDLKRSGGFIPGIRPG-SETSEYLDRVMSQITLPGSI-FLALIAVFP--AVI
+Q1NYZ7_9FLAO/72-422   SIPVNKISDDLKINGVYIPNRKPG-KDTCFFLKKIVSQIYLTGSL-LLVIIALLP--SIF
+A5KHP6_CAMJE/62-402   VFNAKDIAENLKKQGGFIPGIRPG-EGTSSYLNEVASRLTLSGSI-YLGLVATLP--WVL
+A4EA78_9ACTN/52-389   VFNPDDTADNLKKQGGFIPGVRPG-RATAAYIKNALNKITLPSAV-FLALIAIVP--SII
+Q2GEC0_NEOSM/73-411   VFNTTEISDSLKKGEAIVAGRRPG-ISTKRHLDYVLRRITVVGAA-YLVCICVVP--EIF
+Q3YRM8_EHRCJ/72-412   VFDAKETSEILKKNGGFVPGKRPG-NATCEYFNYVIKRLTVLGSI-YLTVICIIP--ELI
+Q5GSW3_WOLTR/77-416   IFNPEENADFLKKNGGFIPGRRPG-KHTSDYLQDIVFKLTFIGSA-YLVVICTVP--EVM
+Q0ANS0_MARMM/83-421   VSNPDDMAENLRKYGGFLPGIRPG-KRTAEYIDFVMSRLTFIGAL-YLVLICMVP--MMM
+A7IPQ0_XANP2/80-418   VFNPVETADNLKKHGGFIPGIRPG-ERTAEYIDYVLTRITVVGAA-YIAAVCLFP--ELL
+SECY_RICCN/70-411     VFNSEETANNLRKYGAYIPGKRPG-KNTSDYFDYILTRLTVIGGI-YLSVICVIP--ELL
+Q2G8W0_NOVAD/80-430   VFNPEETAENLKKNGGFIPGIRPG-KNTANYLDYVLTRITVLGAA-YITVVCVVP--EFI
+A6E0Q6_9RHOB/73-411   AFKTDDVAENLKNQNGFIPGIRPG-KRTAEYLDFVVNRVLVIGSA-YLAAVCLLP--EIL
+Q1UZE8_9RICK/67-404   TFNPTETADNLRKYGGFVPGIRPG-ENTALYIEKIVTKLTTIGAL-YLTIVCLMP--EFL
+Q3R245_XYLFA/76-424   VFSSQETADILKKSGALIPGIRPG-KATSDYVDGVLTRLTAVGSL-YLVIVCLLP--EFM
+A4NK90_HAEIN/76-416   QYNPRDTADNLKKSGAFIPGIRPG-EQTSRYIDKVMTRLTLIGGL-YVTFVCLVP--YIM
+Q057C4_BUCCC/64-407   IFNVQDTANNLKKSGAFLPGIRPG-LKTAEYIKNIVFKLTTIGSI-YTVFICLIP--DIV
+Q8D1Z2_WIGBR/82-424   VFNSKDTADNLKKSGAFISGIRPG-IKTSQYINKIMMNLTLIGAT-YIALICLMP--DFF
+Q6F7T2_ACIAD/83-426   VFSPKEVSENLKRSGAYVPGIRPG-EQTARYLDHILNRLTFIGAI-YITVVCLMP--MIL
+Q6Q8W8_9GAMM/67-407   TFNTKDVSDNLKRSGAYIAGIRPG-EQTANYIDNVLARLTVFGAI-YLTLICLLP--LAL
+A9BRX1_DELAS/74-413   VFNSRETADNLKKSGAFIPGIRPG-DQTARYIDKILVRLTLAGAV-YITFVCLLP--EFL
+Q7DDS8_NEIMB/73-410   VFSPKEMAENLKKSGAFVPGIRPG-EQTSRYLEKVVLRLTLFGAL-YITTICLIP--EFL
+Q5NHU8_FRATT/74-416   VLNPKETADNLKKSGAYISGVRPG-EQTAKYIDAVMTRLTLVGSL-YITAICLLP--IFV
+Q7WZR8_9GAMM/64-388   VLNAKEVSINFKKSGAFIHGMRPG-KQTAGFISKVSSRLNWFGAI-YIVFFSLIP--QLI
+A5EX98_DICNV/69-412   MFENRELADSLKKSSAFIQGFRPG-RQTADYIDTVQERLTFVGAF-YVAFVCVLP--SLV
+Q6MJ32_BDEBA/70-415   VFNPNDVAENLKKYGGFVPGVRAG-KSTADYIQRVLERVNVVGCI-YLCTICILP--GIM
+B5EFS0_GEOBB/71-411   TFNPVDVADNVKKQGGYVPGIRPG-KETSDFLDAVLTKLTFAGAI-YISAVCVLP--SIL
+A3EVQ1_9BACT/75-412   VLNPTDIAENMQKYGGYIPGVRPG-QKTVEYLYRVMNRITFVGAL-YLSIVCVIP--ELL
+Q1MPP6_LAWIP/71-412   IFDSKDISENLKKAGGFIPGIRPG-EKTCEYLDGVLSRLTLWGGV-YISIISILP--MML
+SECY_AQUAE/71-412     LINPVELAENLHKAGAFIPGVRPG-QDTVKYLERIINRLIFFGAL-FLSVIALIP--ILI
+Q01WB2_SOLUE/74-438   IFNPNEAADNMRKYGGFIPGIRPG-RNTADYMNNILTKITVVGGI-YLAILCLIP--DIM
+Q08ZH8_STIAU/26-370   TFRPDDVADNIKKQGGYIPGIRPG-RQTADFIERVLNRITFGGAI-YLATICVIP--TIL
+A6GCG0_9DELT/70-411   QFNPVDLADNLKKQNASIPGVRPG-KRTAEHIEAILGRLTFAGSW-YISAVCVLP--VFL
+Q04PV8_LEPBJ/72-436   QFNPAELAENLKKYGGFIPGIRPG-SHTKEYIEKVLNRITLPGAM-FLAGLALAP--YII
+SECY_BORBU/72-409     QLSPKDISNNIRKNGGTIPGIKSD-E-MEKYLDEIMNKTLFSGSI-FLSIIAIIP--FLV
+Q73PL2_TREDE/73-413   ALNPTEIAKQIRENGGSIPGIRT--DKTEEYLQKILNRLILPGSL-YLAAIAVLP--TVI
+Q67JW3_SYMTH/69-405   TFNPENVADNIKKNGGFIPGYRPG-RPTAEYLERVSSRLTLVGGL-FLAAVTILP--ITI
+A7FQ38_CLOB1/69-409   TFKPDEMAENMHKSSGFIPGIRPG-EPTAEYIERVITKSSIIGGT-FAAIIAVFP--IIM
+A6LPT1_CLOB8/69-416   TFKPDEMSENLHKSAGFVPGVRPG-EETTTYFERVLNRLSFIGGI-LAAVLAVTP--VMI
+Q0SQG4_CLOPS/69-409   TFKPDEMAENMHKSSGFIPGIRPG-KPTEIYLEKVLNRISMFGGC-FAAIIAVVP--ILV
+A9KJH4_CLOPH/71-425   TFNPMEVANNMKKQGGFIPGIRPG-KPTTEYLTKVLNYIIFIGAI-GLMIVAIIP--IFF
+A7VH89_9CLOT/71-420   TFNPMEIANNMKKSGGFVPGIRPG-KPTQDYLNKILNYIIFIGAV-GLLIVAMIP--MFF
+A6BIS2_9FIRM/71-421   TFNPLEIANNMKKSGGFIPGIRPG-RPTVEYLTKILNYIIFVGAC-GLILVQIVP--ILF
+A7VR33_9CLOT/71-423   QYNPIEMANNLRQNNGTIPGIRPG-KPTSDYIQKILSKITLIGAL-FLAVIALLP--IAF
+A6NXF0_9BACE/71-437   QFNPIEVANNLKKNGGFVPGFRPG-KPTADFIYKVLNKITLFGAI-YLAVIALLP--IIT
+Q250L2_DESHY/70-413   SFNPVDVADNLKKYGGFIPGLRPG-RATSDYLSKILSRLTLAGGT-FLAMIAVLP--SLV
+Q8R7X3_THETN/69-402   IFNPQDISDNLKKYGGFIPGIRPG-KPTTEYLTKVLNRIVFVGAL-FLAFIATMP--VVL
+A4XLR1_CALS8/69-419   VFNPVEIANNLKNNGGFIPGIRPG-KPTVDFITRVLSKVTFAGAL-FLAFIAILP--TLV
+A3DJJ2_CLOTH/71-411   QFNPVEVANNLKKNGGFIPGIRPG-KPTSDYIYKVVSRISWFSAL-FLAIIQILP--SLL
+A8MLG0_ALKOO/69-408   TFNPVEISNNMKQNGGFIPGIRPG-KPTADYINKILTRITLSGAV-FLAIITIVP--TIV
+Q18CH6_CLOD6/69-406   SFNTEDISKNMKNNGGFIPGIRPG-EPTMDYLNRILTRLTLAGAT-FLAIIAMVP--ALT
+B8D0S8_HALOH/72-406   TFNPEEVADNMRKSGAFIPGIRPG-KATENFLTRILVRVTLAGAI-FLTVIAIMP--YFI
+
+A9B431_HERA2/73-422   QQIT------------------------GL----------QIG-FSS-TGLL----IVVG
+A8CRX1_9CHLR/78-422   REVT------------------------GI----------QVIqLSS-FGML----IVVG
+A2Y4E5_ORYSI/132-498  DRYL--------------------------rq------inEGFsIGF-TSVL----IIVG
+Q7UZW2_PROMP/80-422   ERAT------------------------NV---------qTFQgLGA-TSLL----ILVG
+Q7NKT4_GLOVI/79-416   EQGT------------------------GI---------tTFNgLGA-TSLL----ILVG
+SECY_GUITH/68-404     ETLT------------------------NL---------sVFKgLGG-TSLL----IIVG
+SECY_CYACA/62-394     EFVF------------------------HI---------rVFKgLAV-SSLL----IVVG
+Q85FU6_CYAME/42-325   SSLK------------------------------------IFSgFGA-TSLL----IVIG
+A0T0J6_PHATR/72-407   ESTL------------------------SI---------tSLNgLST-TSLL----ILAG
+SECY_CYAPA/109-459    ERSL------------------------GL---------pKLQiLSP-VSIS----IALG
+Q4G351_EMIHU/63-407   GNFI------------------------------------QFGlFKNlTSLL----ILIG
+SECY_PAVLU/66-404     AAAL------------------------GV---------hPLSiSGI-TSLI----LSFS
+Q6B8X0_GRATL/62-395   AYIT------------------------HT---------sLLQgLGT-TSLL----ILVG
+SECY_ANTSP/62-390     YYIF------------------------KI---------nTLKgLGA-TSLL----ILVG
+A4RW47_OSTLU/65-398   EQIT------------------------GL---------qTFRgFAG-TSLL----ILVG
+A7PFA4_VITVI/131-465  EQTT------------------------HL---------tAFRgFAG-TSVL----ILVG
+A7HM32_FERNB/75-404   EGIT------------------------RV----------NIW-LGG-TSAL----IAVG
+A3CK84_STRSV/69-416   KDVF------------------------GLt--------dAVA-LGG-TSLL----IIIS
+Q5FM71_LACAC/68-415   TNFW------------------------NLp--------sSIG-LGG-TSLL----IVIG
+Q03ZM6_LEUMM/68-416   SDVW------------------------GLn--------eKIG-LGG-TSLL----ISIG
+SECY_STAA8/69-413     TKFM------------------------GLp--------qSIQ-IGG-TSLL----IVIG
+Q4MG72_BACCE/68-415   TKIA------------------------TLp--------pSAQ-IGG-TSLL----IIVG
+Q6F1X5_MESFL/92-454   SKLT------------------------NLp--------sQLA-IGG-TGLI----ICIS
+Q6KI36_MYCMO/87-436   AGVP------------------------------------ENIsFGG-TSVI----ILVT
+Q4A5I3_MYCS5/83-437   TGIL-----------------------------------qPSIaFGG-TSLM----ILVS
+Q98Q01_MYCPU/90-438   AGMP------------------------------------AAIsFGG-TSMM----ILVS
+Q4AAF9_MYCHJ/85-434   LGLP------------------------------------SAItISG-TSII----ILAT
+Q9PQP1_UREPA/76-434   ALVA------------------------KTinhgipviqpSTI-FGG-TSII----IMVT
+SECY_MYCGE/81-430     SYFI------------------------RLp--------nSLS-LGG-TGII----IIVT
+Q8EUD2_MYCPE/81-433   TMTT------------------------GIp--------nGIA-IGG-TGVI----IMVT
+Q7X4E3_9MOLU/69-399   NYLA------------------------GIk-------isQNIpFSG-TSLL----IIVG
+Q5Q069_ASTYP/59-398   EHFL------------------------SL----------KDMkLGG-TSLL----IIVS
+O21257_RECAM/57-372   FIF---------------------------------------------SKLF----FIIS
+Q74NB9_NANEQ/69-457   SIPI-----------------------------------------GG-TSIL----LATM
+Q2EMT2_METVO/30-379   GALG-----------------------------------------GG-TGVL----LTVS
+A5UL65_METS3/72-433   GALG-----------------------------------------GG-TGVL----LTVG
+SECY_METTH/73-436     GSLG-----------------------------------------GG-TGVL----LTVG
+SECY_PYRAB/72-448     GALG-----------------------------------------TG-TGIL----LTVG
+Q8TZA9_METKA/75-435   GALG-----------------------------------------GG-TGVL----LTVS
+Q9HIT0_THEAC/82-514   GTVG---------------------------------------dTSG-TGLL----LAVG
+Q2QAQ7_9EURY/161-583  GTVG---------------------------------------nATG-TGLL----LAVG
+Q0W1W5_UNCMA/75-487   GILG---------------------------------------aVSG-TGML----LAVS
+SECY_ARCFU/73-471     GTIG---------------------------------------nVSG-TGLL----LAVS
+Q8TRS4_METAC/72-470   GTLG---------------------------------------sAGG-TGLL----LTVS
+A0B9U7_METTP/75-515   GTLG---------------------------------------gAGG-TGLL----LAVS
+SECY_HALMA/73-468     GTIG---------------------------------------gVSG-TGLL----LTVS
+Q2FSG8_METHJ/73-458   GVIG---------------------------------------aVSG-TGLL----LTVS
+A2SPM5_METLZ/73-458   GIIG---------------------------------------fVGG-TGLL----LTVS
+A0RUE4_CENSY/79-457   GVFG-----------------------------------------SG-IGIL----LMVD
+A8ME75_CALMQ/77-461   GVYG-----------------------------------------TG-IGLI----LMVE
+A3MUZ2_PYRCJ/70-435   GVWG-----------------------------------------GG-VGLI----LLVE
+SECY_SULSO/73-449     GAYG-----------------------------------------TG-IGIL----LAVT
+SECY_SULAC/74-443     GTYG-----------------------------------------TG-VGLL----LAIT
+A2BME2_HYPBU/73-444   GAYG-----------------------------------------TG-SGLV----LLVG
+SECY_AERPE/73-434     GAYG-----------------------------------------TG-TGLL----LAVG
+A1RWR3_THEPD/75-456   RVMG-----------------------------------------GG-TGIL----LLVG
+SC61A_SCHPO/76-459    GALG-----------------------------------------SG-TAVL----LCTT
+A7E5Q2_SCLS1/76-459   GALG-----------------------------------------SG-TGIL----LAVT
+Q5KC69_CRYNE/75-459   GALG-----------------------------------------SG-TGIL----MATT
+SC61A_ASHGO/75-460    GTLG-----------------------------------------SG-TSIL----MATT
+Q59MJ6_CANAL/76-459   GTLG-----------------------------------------SG-TSIL----LAVT
+A7SJW4_NEMVE/75-458   GAIG-----------------------------------------SG-TGIL----LAVT
+A0CFY2_PARTE/73-456   GAIG-----------------------------------------SG-TGIL----LAVT
+Q22MG2_TETTH/151-538  GVIG-----------------------------------------SG-TGIL----LAVN
+A0CU87_PARTE/77-460   GAIG-----------------------------------------SG-TGIL----LSVT
+Q7RLN0_PLAYO/121-506  GALG-----------------------------------------SG-TGIL----LAVT
+Q4QGX4_LEIMA/77-467   GAIG-----------------------------------------SG-TGIL----LSVT
+A5JEK2_NOSBO/75-457   DTIG-----------------------------------------SG-TNIF----LATS
+A2DH65_TRIVA/75-462   SAFG-----------------------------------------SG-TGII----LAVS
+Q2QM98_ORYSJ/88-448   GAIG----------------------------------------EAG-PELL----FAVL
+Q6AV46_ORYSJ/86-471   GAVG-----------------------------------------SG-AGML----LAVT
+Q6C854_YARLI/70-454   GGLG----------------------------------------ASA-APMI----VAVT
+SSH1_YEAST/78-465     GLKG-----------------------------------------KA-AGIV----VGIA
+Q6BT20_DEBHA/78-475   GGLG-----------------------------------------KG-VAAI----IGVC
+A5DE75_PICGU/20-414   GGAG-----------------------------------------KG-VGTI----IGVS
+A3GFV9_PICST/78-476   GGLG-----------------------------------------KS-AATI----VGVS
+A5DWJ5_LODEL/34-436   GGLG-----------------------------------------RN-VASI----VGVS
+Q5A2C9_CANAL/5-404    GGLG-----------------------------------------YG-VASI----IGVT
+Q74L41_LACJO/64-372   GNFL------------------------GN--------------YAG-FAIIpmnvVMIT
+B3XPQ8_LACRE/65-377   GQVL------------------------GN--------------FAG-LAIIpmnmIMIV
+A1C3L4_STRPA/70-403   VLLQ--------------------------gqg----knsVSIaLLI-SNAY----IIVS
+Q3DVD6_STRAG/65-395   ALG---------------------------n-------ddLRTvSSM-TGIF----MMIT
+A5LN99_STRPN/64-389   VLF---------------------------d-------ekLLRlAMI-PGLF----MMFG
+A3CM55_STRSV/64-391   VLV---------------------------d-------irYLRlSMI-PGIF----MIFI
+Q03HZ8_PEDPA/65-396   GLYL--------------------------p-------eiTNFaFVF-ANIL----ILIT
+A5IW80_STAA9/64-384   TLFV--------------------------p-------hlSTEiYFS-VQLI----VLVY
+Q4L9N9_STAHJ/61-383   TLLV--------------------------p-------nlSTEiYFS-MQLI----ILVY
+Q5HKR3_STAEQ/61-380   ALLV--------------------------p-------hlLKEvYFT-TQMI----VFVY
+Q9RSK8_DEIRA/68-413   QKAT------------------------GI----------TTFqFSG-TGLL----IIVG
+Q5SHQ8_THET8/71-413   QNLT------------------------GI----------HSIaFSG-IGLL----IVVG
+SECY_CORGL/73-424     LDL-------------------------GVda-----gsaGATpFGG-TAIL----ILVS
+A8LB12_FRASN/74-414   LNLT------------------------KD----------QPFpFAG-TSVL----IMVG
+Q83NQ1_TROW8/73-424   FALF------------------------GLsa------diP---LGG-TSVL----IMVG
+Q8G3Z9_BIFLO/74-421   IMAL------------------------GL---------nAKLpFGG-TTIL----IIAG
+A7B9M4_9ACTO/72-414   IIPL------------------------QLs--------sSQMpFGG-TTLL----IIIG
+SECY_CHLTR/73-433     GRIL------------------------RVda------nvSYF-LGG-TAML----IVVG
+Q1AU49_RUBXD/70-408   TGAL------------------------NLp--------nSIY-LGG-TSML----IVVG
+Q8RIH6_FUSNN/75-411   FTSM------------------------GL----------PVY-FGG-TGII----IVVG
+A6DRC9_9BACT/79-428   MNAM------------------------GSgstd--fiitQF--FGG-TSLL----IMVG
+C0ACZ0_9BACT/94-454   NAEL------------------------NVpq------riSSF-FGG-TGML----ITVG
+Q1Q157_9BACT/75-434   AGGF------------------------ELnr------aiAGF-YGG-TGLL----IIVG
+A6CGP8_9PLAN/77-435   STWL------------------------GVdf------lvASF-YGG-TGLL----IVVS
+B4S5A8_PROA2/73-417   TKFA------------------------NVtp------gfAQF-FGG-TSLL----IIVG
+Q2S3P5_SALRD/75-414   MQA-------------------------GVsq------gfAMF-YGG-TSLL----ILVQ
+A1ZGT4_9SPHI/72-404   VKF-------------------------GIqn------sfAQF-YGG-TSLL----IMVG
+A6EHP4_9SPHI/71-408   VKF-------------------------GIks------efAHF-YGG-TSLL----ILVG
+Q11QD2_CYTH3/72-411   SMT-------------------------GIek------efAYF-YGG-TSLL----IMIG
+Q1VTY0_9FLAO/73-421   VSLL------------------------NVqq------gwGLF-FGG-TSLL----IMVG
+Q1NYZ7_9FLAO/72-422   ISLGg---------------------dkNF----------SLF-FGG-TTII----IIVG
+A5KHP6_CAMJE/62-402   VKFM------------------------GV----------PFH-FGG-TSVL----IVVQ
+A4EA78_9ACTN/52-389   FSFT------------------------GN---------hLIQaFGG-TSIL----IMVG
+Q2GEC0_NEOSM/73-411   RNYF------------------------GF----------DAI-ISG-TSLL----IIVN
+Q3YRM8_EHRCJ/72-412   RYNY------------------------SV----------SFT-LGG-TSFL----IIVN
+Q5GSW3_WOLTR/77-416   RYYY------------------------DM----------PFI-FGG-TSLL----IIVN
+Q0ANS0_MARMM/83-421   ----------------------------NP----------NTA-LGG-TSLL----IVVS
+A7IPQ0_XANP2/80-418   ISYA------------------------SL----------PFY-FGG-TSLL----IVVS
+SECY_RICCN/70-411     MNKY------------------------VI----------SLS-LGG-TSFL----IVVN
+Q2G8W0_NOVAD/80-430   MAET------------------------GM---------gTLF-FGG-TSLL----IVVN
+A6E0Q6_9RHOB/73-411   RNQF------------------------AI----------PFY-FGG-TSVL----IVVS
+Q1UZE8_9RICK/67-404   IANY------------------------PI----------PFY-LGG-TSIL----IVVV
+Q3R245_XYLFA/76-424   QSRI------------------------GA----------SFH-FGG-TSLL----IAVV
+A4NK90_HAEIN/76-416   TSAW------------------------DV----------KFY-FGG-TSLL----IVVV
+Q057C4_BUCCC/64-407   RYFF------------------------KV----------PFN-FGG-TSLL----IVVV
+Q8D1Z2_WIGBR/82-424   RVFI------------------------KS----------PFH-FGG-TSLL----IVVV
+Q6F7T2_ACIAD/83-426   QNSF------------------------GI----------PFH-LGG-TSLL----IVVV
+Q6Q8W8_9GAMM/67-407   INFAg----------------------iSP----------TIS-IGG-TSVL----IIVV
+A9BRX1_DELAS/74-413   ILKY------------------------NV----------PFY-FGG-TSLL----IIVV
+Q7DDS8_NEIMB/73-410   TTVL------------------------NV----------PFY-LGG-TSLL----ILVV
+Q5NHU8_FRATT/74-416   VKFFa----------------------qGL----------SFT-FGG-TSLL----IVVV
+Q7WZR8_9GAMM/64-388   MVYC------------------------KI----------PFC-GGG-ISIL----IMVV
+A5EX98_DICNV/69-412   NMGS------------------------ASg--------qVLFlFGG-TSLL----IAVV
+Q6MJ32_BDEBA/70-415   VSQF------------------------NV----------PFQ-FGG-TSLL----ILVG
+B5EFS0_GEOBB/71-411   IGKF------------------------NL----------PFY-FGG-TSLL----IAVG
+A3EVQ1_9BACT/75-412   IYQL------------------------HV----------PFY-FGG-TSLL----IVIG
+Q1MPP6_LAWIP/71-412   ISQF------------------------NV----------PFY-FGG-TSIL----ILVG
+SECY_AQUAE/71-412     SVWF------------------------NI----------PFY-FGG-TTAL----IVVG
+Q01WB2_SOLUE/74-438   ISGIklhhlwlvgdwidrvaprfileglGV----------NFY-FGG-TSLL----IVVG
+Q08ZH8_STIAU/26-370   TQWL------------------------QV----------PFA-FGG-TALL----IVVG
+A6GCG0_9DELT/70-411   QTEF------------------------NV----------PFY-YGG-TSLL----IVVG
+Q04PV8_LEPBJ/72-436   IKFL------------------------DLssns--gggsLVYtFGG-TSLL----IMVG
+SECY_BORBU/72-409     QNIF------------------------RFph------dvSRI-MGG-SSLL----IMVG
+Q73PL2_TREDE/73-413   QWAF------------------------SFpr------niSML-MGG-TSLL----ILVG
+Q67JW3_SYMTH/69-405   MSLA------------------------GV---------qNAY-IGG-SSLL----IVVS
+A7FQ38_CLOB1/69-409   AAYS------------------------KF---------qGIS-FGG-TSML----IMVG
+A6LPT1_CLOB8/69-416   QNYT------------------------QF---------qNIA-FSG-TGLL----IVIN
+Q0SQG4_CLOPS/69-409   ANYT------------------------PF---------qGIQ-FGG-TSLL----ILVS
+A9KJH4_CLOPH/71-425   SGMF------------------------DA----------HVS-FSG-TSLI----IVVS
+A7VH89_9CLOT/71-420   NGFF------------------------SV----------NVS-FGG-TSII----IVVG
+A6BIS2_9FIRM/71-421   NGWL------------------------GA----------KVS-FGG-TSLI----IIVS
+A7VR33_9CLOT/71-423   SAFT------------------------GM---------hNLM-MGG-TSVI----ILVG
+A6NXF0_9BACE/71-437   SNII------------------------NLasgs--qmgrSLS-IGG-TSII----IVVG
+Q250L2_DESHY/70-413   IGLT------------------------GI---------pNIT-LGG-TSLL----IVVS
+Q8R7X3_THETN/69-402   MNVT------------------------GL----------QLY-FGG-TALL----IAVG
+A4XLR1_CALS8/69-419   GLMFr----------------------hQL----------NIY-FGG-TSLL----IVVG
+A3DJJ2_CLOTH/71-411   QAIT------------------------GI---------rGIW-FAG-TSVL----ILVG
+A8MLG0_ALKOO/69-408   LGIT------------------------HI----------PIS-FGG-TTII----IIVG
+Q18CH6_CLOD6/69-406   THYM------------------------KV----------NMS-LAG-TSLL----IVVG
+B8D0S8_HALOH/72-406   SDIT------------------------RV----------RIS-FGG-TSLL----IMTG
+
+A9B431_HERA2/73-422   ----VAVD---TMR
+A8CRX1_9CHLR/78-422   ----VALD---TMK
+A2Y4E5_ORYSI/132-498  ----SIIE---LRR
+Q7UZW2_PROMP/80-422   ----VAID---TAK
+Q7NKT4_GLOVI/79-416   ----VAID---TVR
+SECY_GUITH/68-404     ----VQVD---TSK
+SECY_CYACA/62-394     ----VAID---LIK
+Q85FU6_CYAME/42-325   ----VSID---TMR
+A0T0J6_PHATR/72-407   ----VVLD---LVR
+SECY_CYAPA/109-459    ----VAVD---TTR
+Q4G351_EMIHU/63-407   ----VITD---TTS
+SECY_PAVLU/66-404     ----IIND---TVR
+Q6B8X0_GRATL/62-395   ----VAID---TAK
+SECY_ANTSP/62-390     ----VAID---TAK
+A4RW47_OSTLU/65-398   ----VATD---SAR
+A7PFA4_VITVI/131-465  ----CATD---TAR
+A7HM32_FERNB/75-404   ----VALD---IAQ
+A3CK84_STRSV/69-416   ----TGIE---GMK
+Q5FM71_LACAC/68-415   ----VVLE---LSR
+Q03ZM6_LEUMM/68-416   ----VALD---LIR
+SECY_STAA8/69-413     ----VAIE---TMK
+Q4MG72_BACCE/68-415   ----VALE---TMK
+Q6F1X5_MESFL/92-454   ----VAIQ---TTQ
+Q6KI36_MYCMO/87-436   ----ASYE---TIT
+Q4A5I3_MYCS5/83-437   ----VSIE---TIS
+Q98Q01_MYCPU/90-438   ----VSLE---TID
+Q4AAF9_MYCHJ/85-434   ----TTLE---TIS
+Q9PQP1_UREPA/76-434   ----ATLE---LWN
+SECY_MYCGE/81-430     ----AVVE---FIS
+Q8EUD2_MYCPE/81-433   ----GSLD---FWS
+Q7X4E3_9MOLU/69-399   ----VALE---SIQ
+Q5Q069_ASTYP/59-398   ----VALE---TIQ
+O21257_RECAM/57-372   ---yLFIEidfSFF
+Q74NB9_NANEQ/69-457   ----ISYM---VYE
+Q2EMT2_METVO/30-379   ----IVYR---FYE
+A5UL65_METS3/72-433   ----IIHK---IYE
+SECY_METTH/73-436     ----IVYR---LYE
+SECY_PYRAB/72-448     ----ILYR---FYE
+Q8TZA9_METKA/75-435   ----ILYN---MYE
+Q9HIT0_THEAC/82-514   ----IIIQ---FYE
+Q2QAQ7_9EURY/161-583  ----IILR---TYE
+Q0W1W5_UNCMA/75-487   ----ITYQ---LYE
+SECY_ARCFU/73-471     ----IAYR---FYE
+Q8TRS4_METAC/72-470   ----IVYR---LYE
+A0B9U7_METTP/75-515   ----IMYR---LYE
+SECY_HALMA/73-468     ----ITYK---LYE
+Q2FSG8_METHJ/73-458   ----ITYR---LYE
+A2SPM5_METLZ/73-458   ----IIYR---LYE
+A0RUE4_CENSY/79-457   ----ILIN---YYN
+A8ME75_CALMQ/77-461   ----IIIQ---YYT
+A3MUZ2_PYRCJ/70-435   ----IALQ---YYA
+SECY_SULSO/73-449     ----IAIQ---YYS
+SECY_SULAC/74-443     ----IAMQ---YYN
+A2BME2_HYPBU/73-444   ----IIYN---FYQ
+SECY_AERPE/73-434     ----IINQ---YYA
+A1RWR3_THEPD/75-456   ----IIVQ---YYS
+SC61A_SCHPO/76-459    ----TIYG---YYE
+A7E5Q2_SCLS1/76-459   ----IIYG---YFE
+Q5KC69_CRYNE/75-459   ----IIYG---YFE
+SC61A_ASHGO/75-460    ----TIYG---YYE
+Q59MJ6_CANAL/76-459   ----TIYG---YYE
+A7SJW4_NEMVE/75-458   ----IIYQ---YFE
+A0CFY2_PARTE/73-456   ----IIYG---YFE
+Q22MG2_TETTH/151-538  ----IVYG---YFE
+A0CU87_PARTE/77-460   ----IIYG---YFE
+Q7RLN0_PLAYO/121-506  ----IIYQ---FYE
+Q4QGX4_LEIMA/77-467   ----MINQ---YYE
+A5JEK2_NOSBO/75-457   ----IVHQ---YLE
+A2DH65_TRIVA/75-462   ----IINQ---FTA
+Q2QM98_ORYSJ/88-448   ----VIKN---LAE
+Q6AV46_ORYSJ/86-471   ----TVYQ---CYE
+Q6C854_YARLI/70-454   ----SMNN---YFE
+SSH1_YEAST/78-465     ----GGFS---LLE
+Q6BT20_DEBHA/78-475   ----GAFG---ILE
+A5DE75_PICGU/20-414   ----AAFG---VLE
+A3GFV9_PICST/78-476   ----AAFS---VLE
+A5DWJ5_LODEL/34-436   ----SAFG---ILE
+Q5A2C9_CANAL/5-404    ----ASFA---VLE
+Q74L41_LACJO/64-372   -----------MFM
+B3XPQ8_LACRE/65-377   ----MFMQ---GIK
+A1C3L4_STRPA/70-403   ----LLLG---VIE
+Q3DVD6_STRAG/65-395   gmsfMILDefqVIR
+A5LN99_STRPN/64-389   ----GMIF---TIR
+A3CM55_STRSV/64-391   ----GMVF---SIK
+Q03HZ8_PEDPA/65-396   ----IIDT---TMD
+A5IW80_STAA9/64-384   ----ISIN---IAE
+Q4L9N9_STAHJ/61-383   ----ISINigeTIR
+Q5HKR3_STAEQ/61-380   ----IGIN---IAE
+Q9RSK8_DEIRA/68-413   ----VALE---TLK
+Q5SHQ8_THET8/71-413   ----VALD---TLR
+SECY_CORGL/73-424     ----VALT---TVK
+A8LB12_FRASN/74-414   ----VGLE---TVK
+Q83NQ1_TROW8/73-424   ----VGLD---TVK
+Q8G3Z9_BIFLO/74-421   ----VGLD---TLR
+A7B9M4_9ACTO/72-414   ----VGLQ---TVK
+SECY_CHLTR/73-433     ----VILD---TMK
+Q1AU49_RUBXD/70-408   ----VSLD---TVR
+Q8RIH6_FUSNN/75-411   ----VALD---TIQ
+A6DRC9_9BACT/79-428   ----VVLQ---TMQ
+C0ACZ0_9BACT/94-454   ----VILD---TMK
+Q1Q157_9BACT/75-434   ----VALD---MVQ
+A6CGP8_9PLAN/77-435   ----VVLD---LVN
+B4S5A8_PROA2/73-417   ----VGLD---TLQ
+Q2S3P5_SALRD/75-414   ----VTLD---TLQ
+A1ZGT4_9SPHI/72-404   ----VVLN---TLQ
+A6EHP4_9SPHI/71-408   ----VVLD---TLQ
+Q11QD2_CYTH3/72-411   ----VVLD---TLQ
+Q1VTY0_9FLAO/73-421   ----VAID---TIQ
+Q1NYZ7_9FLAO/72-422   ----GLLDikyTIN
+A5KHP6_CAMJE/62-402   ----VALD---TMR
+A4EA78_9ACTN/52-389   ----VVLD---TVD
+Q2GEC0_NEOSM/73-411   ----VITD---LLS
+Q3YRM8_EHRCJ/72-412   ----VIID---TFS
+Q5GSW3_WOLTR/77-416   ----VTTD---TIM
+Q0ANS0_MARMM/83-421   ----VTMD---TVS
+A7IPQ0_XANP2/80-418   ----VTMD---TVS
+SECY_RICCN/70-411     ----VVLD---TMT
+Q2G8W0_NOVAD/80-430   ----VTVD---TIT
+A6E0Q6_9RHOB/73-411   ----VTMD---TIQ
+Q1UZE8_9RICK/67-404   ----VAID---TVT
+Q3R245_XYLFA/76-424   ----VVMD---FIS
+A4NK90_HAEIN/76-416   ----VIMD---FIV
+Q057C4_BUCCC/64-407   ----VLIE---FIT
+Q8D1Z2_WIGBR/82-424   ----VTID---FMT
+Q6F7T2_ACIAD/83-426   ----VVMD---FMA
+Q6Q8W8_9GAMM/67-407   ----VLMD---FMS
+A9BRX1_DELAS/74-413   ----VTMD---FMA
+Q7DDS8_NEIMB/73-410   ----VTMD---FST
+Q5NHU8_FRATT/74-416   ----VMMD---FMA
+Q7WZR8_9GAMM/64-388   ----VVLD---FLS
+A5EX98_DICNV/69-412   ----VAMD---LMS
+Q6MJ32_BDEBA/70-415   ----VALD---TAQ
+B5EFS0_GEOBB/71-411   ----VGMD---TLS
+A3EVQ1_9BACT/75-412   ----VSLD---TAQ
+Q1MPP6_LAWIP/71-412   ----VAMD---FMS
+SECY_AQUAE/71-412     ----VALD---TFR
+Q01WB2_SOLUE/74-438   ----VAMD---TIN
+Q08ZH8_STIAU/26-370   ----VALD---TVQ
+A6GCG0_9DELT/70-411   ----VALD---TAQ
+Q04PV8_LEPBJ/72-436   ----VALE---TLK
+SECY_BORBU/72-409     ----VALD---TLI
+Q73PL2_TREDE/73-413   ----VDLD---TMS
+Q67JW3_SYMTH/69-405   ----VALE---TTK
+A7FQ38_CLOB1/69-409   ----FALD---TIR
+A6LPT1_CLOB8/69-416   ----VALD---FTR
+Q0SQG4_CLOPS/69-409   ----VSLE---IMR
+A9KJH4_CLOPH/71-425   ----VVLE---TMK
+A7VH89_9CLOT/71-420   ----VVIE---TMK
+A6BIS2_9FIRM/71-421   ----VILE---TLK
+A7VR33_9CLOT/71-423   ----VALD---TMK
+A6NXF0_9BACE/71-437   ----VALE---TVK
+Q250L2_DESHY/70-413   ----VALE---TMK
+Q8R7X3_THETN/69-402   ----VALD---TMK
+A4XLR1_CALS8/69-419   ----VALE---TIR
+A3DJJ2_CLOTH/71-411   ----VALE---TVK
+A8MLG0_ALKOO/69-408   ----VALE---TMK
+Q18CH6_CLOD6/69-406   ----VALE---LKR
+B8D0S8_HALOH/72-406   ----VALQ---TMQ
diff --git a/demotic/examples/example-single.sto b/demotic/examples/example-single.sto
new file mode 100644
index 0000000..7eadcda
--- /dev/null
+++ b/demotic/examples/example-single.sto
@@ -0,0 +1,344 @@
+# STOCKHOLM 1.0
+#=GF ID   SecY
+#=GF AC   PF00344.13
+#=GF DE   eubacterial secY protein
+#=GF PI   secY;
+#=GF AU   Finn RD
+#=GF SE   Prosite
+#=GF GA   20.10 20.10;
+#=GF TC   20.10 21.30;
+#=GF NC   19.80 19.80;
+#=GF BM   hmmbuild HMM.ann SEED.ann
+#=GF SM   hmmsearch -Z 9421015 -E 1000 HMM pfamseq
+#=GF TP   Family
+#=GF DR   INTERPRO; IPR002208;
+#=GF DR   PROSITE; PDOC00612;
+#=GF DR   PRINTS; PR00303;
+#=GF DR   TC; 3.A.5;
+#=GF DR   SCOP; 1rh5; fa;
+#=GF SQ   158
+#=GS A9B431_HERA2/73-422   AC A9B431.1
+#=GS A8CRX1_9CHLR/78-422   AC A8CRX1.1
+#=GS A2Y4E5_ORYSI/132-498  AC A2Y4E5.1
+#=GS Q7UZW2_PROMP/80-422   AC Q7UZW2.1
+#=GS Q7NKT4_GLOVI/79-416   AC Q7NKT4.1
+#=GS SECY_GUITH/68-404     AC P28527.2
+#=GS SECY_CYACA/62-394     AC P46249.2
+#=GS Q85FU6_CYAME/42-325   AC Q85FU6.1
+#=GS A0T0J6_PHATR/72-407   AC A0T0J6.1
+#=GS SECY_CYAPA/109-459    AC P25014.2
+#=GS Q4G351_EMIHU/63-407   AC Q4G351.1
+#=GS SECY_PAVLU/66-404     AC P28540.2
+#=GS Q6B8X0_GRATL/62-395   AC Q6B8X0.1
+#=GS SECY_ANTSP/62-390     AC Q37143.1
+#=GS A4RW47_OSTLU/65-398   AC A4RW47.1
+#=GS A7PFA4_VITVI/131-465  AC A7PFA4.1
+#=GS A7HM32_FERNB/75-404   AC A7HM32.1
+#=GS A3CK84_STRSV/69-416   AC A3CK84.1
+#=GS Q5FM71_LACAC/68-415   AC Q5FM71.1
+#=GS Q03ZM6_LEUMM/68-416   AC Q03ZM6.1
+#=GS SECY_STAA8/69-413     AC O08387.2
+#=GS Q4MG72_BACCE/68-415   AC Q4MG72.1
+#=GS Q6F1X5_MESFL/92-454   AC Q6F1X5.1
+#=GS Q6KI36_MYCMO/87-436   AC Q6KI36.1
+#=GS Q4A5I3_MYCS5/83-437   AC Q4A5I3.1
+#=GS Q98Q01_MYCPU/90-438   AC Q98Q01.1
+#=GS Q4AAF9_MYCHJ/85-434   AC Q4AAF9.1
+#=GS Q9PQP1_UREPA/76-434   AC Q9PQP1.1
+#=GS SECY_MYCGE/81-430     AC P47416.1
+#=GS Q8EUD2_MYCPE/81-433   AC Q8EUD2.1
+#=GS Q7X4E3_9MOLU/69-399   AC Q7X4E3.1
+#=GS Q5Q069_ASTYP/59-398   AC Q5Q069.1
+#=GS O21257_RECAM/57-372   AC O21257.1
+#=GS Q74NB9_NANEQ/69-457   AC Q74NB9.1
+#=GS Q2EMT2_METVO/30-379   AC Q2EMT2.1
+#=GS A5UL65_METS3/72-433   AC A5UL65.1
+#=GS SECY_METTH/73-436     AC O26134.1
+#=GS SECY_PYRAB/72-448     AC Q9V1V8.1
+#=GS Q8TZA9_METKA/75-435   AC Q8TZA9.1
+#=GS Q9HIT0_THEAC/82-514   AC Q9HIT0.1
+#=GS Q2QAQ7_9EURY/161-583  AC Q2QAQ7.1
+#=GS Q0W1W5_UNCMA/75-487   AC Q0W1W5.1
+#=GS SECY_ARCFU/73-471     AC O28377.1
+#=GS Q8TRS4_METAC/72-470   AC Q8TRS4.1
+#=GS A0B9U7_METTP/75-515   AC A0B9U7.1
+#=GS SECY_HALMA/73-468     AC P28542.2
+#=GS Q2FSG8_METHJ/73-458   AC Q2FSG8.1
+#=GS A2SPM5_METLZ/73-458   AC A2SPM5.1
+#=GS A0RUE4_CENSY/79-457   AC A0RUE4.1
+#=GS A8ME75_CALMQ/77-461   AC A8ME75.1
+#=GS A3MUZ2_PYRCJ/70-435   AC A3MUZ2.1
+#=GS SECY_SULSO/73-449     AC Q9UX84.1
+#=GS SECY_SULAC/74-443     AC P49978.1
+#=GS A2BME2_HYPBU/73-444   AC A2BME2.1
+#=GS SECY_AERPE/73-434     AC Q9YDD0.2
+#=GS A1RWR3_THEPD/75-456   AC A1RWR3.1
+#=GS SC61A_SCHPO/76-459    AC P79088.1
+#=GS A7E5Q2_SCLS1/76-459   AC A7E5Q2.1
+#=GS Q5KC69_CRYNE/75-459   AC Q5KC69.1
+#=GS SC61A_ASHGO/75-460    AC Q752H7.1
+#=GS Q59MJ6_CANAL/76-459   AC Q59MJ6.1
+#=GS A7SJW4_NEMVE/75-458   AC A7SJW4.1
+#=GS A0CFY2_PARTE/73-456   AC A0CFY2.1
+#=GS Q22MG2_TETTH/151-538  AC Q22MG2.2
+#=GS A0CU87_PARTE/77-460   AC A0CU87.1
+#=GS Q7RLN0_PLAYO/121-506  AC Q7RLN0.1
+#=GS Q4QGX4_LEIMA/77-467   AC Q4QGX4.1
+#=GS A5JEK2_NOSBO/75-457   AC A5JEK2.1
+#=GS A2DH65_TRIVA/75-462   AC A2DH65.1
+#=GS Q2QM98_ORYSJ/88-448   AC Q2QM98.2
+#=GS Q6AV46_ORYSJ/86-471   AC Q6AV46.1
+#=GS Q6C854_YARLI/70-454   AC Q6C854.2
+#=GS SSH1_YEAST/78-465     AC P38353.1
+#=GS Q6BT20_DEBHA/78-475   AC Q6BT20.2
+#=GS A5DE75_PICGU/20-414   AC A5DE75.1
+#=GS A3GFV9_PICST/78-476   AC A3GFV9.2
+#=GS A5DWJ5_LODEL/34-436   AC A5DWJ5.1
+#=GS Q5A2C9_CANAL/5-404    AC Q5A2C9.1
+#=GS Q74L41_LACJO/64-372   AC Q74L41.1
+#=GS B3XPQ8_LACRE/65-377   AC B3XPQ8.1
+#=GS A1C3L4_STRPA/70-403   AC A1C3L4.1
+#=GS Q3DVD6_STRAG/65-395   AC Q3DVD6.1
+#=GS A5LN99_STRPN/64-389   AC A5LN99.1
+#=GS A3CM55_STRSV/64-391   AC A3CM55.1
+#=GS Q03HZ8_PEDPA/65-396   AC Q03HZ8.1
+#=GS A5IW80_STAA9/64-384   AC A5IW80.1
+#=GS Q4L9N9_STAHJ/61-383   AC Q4L9N9.1
+#=GS Q5HKR3_STAEQ/61-380   AC Q5HKR3.1
+#=GS Q9RSK8_DEIRA/68-413   AC Q9RSK8.1
+#=GS Q5SHQ8_THET8/71-413   AC Q5SHQ8.1
+#=GS Q5SHQ8_THET8/71-413   DR PDB; 2zjs Y; 71-413;
+#=GS Q5SHQ8_THET8/71-413   DR PDB; 2zqp Y; 71-413;
+#=GS SECY_CORGL/73-424     AC P38376.1
+#=GS A8LB12_FRASN/74-414   AC A8LB12.1
+#=GS Q83NQ1_TROW8/73-424   AC Q83NQ1.1
+#=GS Q8G3Z9_BIFLO/74-421   AC Q8G3Z9.1
+#=GS A7B9M4_9ACTO/72-414   AC A7B9M4.1
+#=GS SECY_CHLTR/73-433     AC P28539.3
+#=GS Q1AU49_RUBXD/70-408   AC Q1AU49.1
+#=GS Q8RIH6_FUSNN/75-411   AC Q8RIH6.1
+#=GS A6DRC9_9BACT/79-428   AC A6DRC9.1
+#=GS C0ACZ0_9BACT/94-454   AC C0ACZ0.1
+#=GS Q1Q157_9BACT/75-434   AC Q1Q157.1
+#=GS A6CGP8_9PLAN/77-435   AC A6CGP8.1
+#=GS B4S5A8_PROA2/73-417   AC B4S5A8.1
+#=GS Q2S3P5_SALRD/75-414   AC Q2S3P5.1
+#=GS A1ZGT4_9SPHI/72-404   AC A1ZGT4.1
+#=GS A6EHP4_9SPHI/71-408   AC A6EHP4.1
+#=GS Q11QD2_CYTH3/72-411   AC Q11QD2.1
+#=GS Q1VTY0_9FLAO/73-421   AC Q1VTY0.1
+#=GS Q1NYZ7_9FLAO/72-422   AC Q1NYZ7.1
+#=GS A5KHP6_CAMJE/62-402   AC A5KHP6.1
+#=GS A4EA78_9ACTN/52-389   AC A4EA78.1
+#=GS Q2GEC0_NEOSM/73-411   AC Q2GEC0.1
+#=GS Q3YRM8_EHRCJ/72-412   AC Q3YRM8.1
+#=GS Q5GSW3_WOLTR/77-416   AC Q5GSW3.1
+#=GS Q0ANS0_MARMM/83-421   AC Q0ANS0.1
+#=GS A7IPQ0_XANP2/80-418   AC A7IPQ0.1
+#=GS SECY_RICCN/70-411     AC Q92GY6.1
+#=GS Q2G8W0_NOVAD/80-430   AC Q2G8W0.1
+#=GS A6E0Q6_9RHOB/73-411   AC A6E0Q6.1
+#=GS Q1UZE8_9RICK/67-404   AC Q1UZE8.1
+#=GS Q3R245_XYLFA/76-424   AC Q3R245.1
+#=GS A4NK90_HAEIN/76-416   AC A4NK90.1
+#=GS Q057C4_BUCCC/64-407   AC Q057C4.1
+#=GS Q8D1Z2_WIGBR/82-424   AC Q8D1Z2.1
+#=GS Q6F7T2_ACIAD/83-426   AC Q6F7T2.1
+#=GS Q6Q8W8_9GAMM/67-407   AC Q6Q8W8.1
+#=GS A9BRX1_DELAS/74-413   AC A9BRX1.1
+#=GS Q7DDS8_NEIMB/73-410   AC Q7DDS8.1
+#=GS Q5NHU8_FRATT/74-416   AC Q5NHU8.1
+#=GS Q7WZR8_9GAMM/64-388   AC Q7WZR8.1
+#=GS A5EX98_DICNV/69-412   AC A5EX98.1
+#=GS Q6MJ32_BDEBA/70-415   AC Q6MJ32.1
+#=GS B5EFS0_GEOBB/71-411   AC B5EFS0.1
+#=GS A3EVQ1_9BACT/75-412   AC A3EVQ1.1
+#=GS Q1MPP6_LAWIP/71-412   AC Q1MPP6.1
+#=GS SECY_AQUAE/71-412     AC O66491.1
+#=GS SECY_AQUAE/71-412     DR PDB; 3dl8 H; 71-412;
+#=GS SECY_AQUAE/71-412     DR PDB; 3dl8 G; 71-412;
+#=GS Q01WB2_SOLUE/74-438   AC Q01WB2.1
+#=GS Q08ZH8_STIAU/26-370   AC Q08ZH8.1
+#=GS A6GCG0_9DELT/70-411   AC A6GCG0.1
+#=GS Q04PV8_LEPBJ/72-436   AC Q04PV8.1
+#=GS SECY_BORBU/72-409     AC O51451.1
+#=GS Q73PL2_TREDE/73-413   AC Q73PL2.1
+#=GS Q67JW3_SYMTH/69-405   AC Q67JW3.1
+#=GS A7FQ38_CLOB1/69-409   AC A7FQ38.1
+#=GS A6LPT1_CLOB8/69-416   AC A6LPT1.1
+#=GS Q0SQG4_CLOPS/69-409   AC Q0SQG4.1
+#=GS A9KJH4_CLOPH/71-425   AC A9KJH4.1
+#=GS A7VH89_9CLOT/71-420   AC A7VH89.1
+#=GS A6BIS2_9FIRM/71-421   AC A6BIS2.1
+#=GS A7VR33_9CLOT/71-423   AC A7VR33.1
+#=GS A6NXF0_9BACE/71-437   AC A6NXF0.1
+#=GS Q250L2_DESHY/70-413   AC Q250L2.1
+#=GS Q8R7X3_THETN/69-402   AC Q8R7X3.1
+#=GS A4XLR1_CALS8/69-419   AC A4XLR1.1
+#=GS A3DJJ2_CLOTH/71-411   AC A3DJJ2.1
+#=GS A8MLG0_ALKOO/69-408   AC A8MLG0.1
+#=GS Q18CH6_CLOD6/69-406   AC Q18CH6.1
+#=GS B8D0S8_HALOH/72-406   AC B8D0S8.1
+A9B431_HERA2/73-422              SVAAMGVYPYITAQIIMQLL................IP.LIPALEQLSKE.GEQGRNRIQRYQYFLTVPLAYLQGYGQIKSLINSGINLFGTLNFS...........ITENFFQTFSILT..IMVSGSMFLVWMGELIDE.RGI.G.NGLSMIIFGGIV.TALPSM................................VY...QAITTSS......................SGNNVIG.........G........ILLLIVTLAT.VVGIVLITEGQRRIPVQYAKR...VRG.......NKVYGGQ..SSH.LPLKVNMAGMIPLIFAQSI..LIFPS...TVASYF.....WNPNGSG.........................FFN...............GVANFFVNSF......................................GPNGLA [...]
+A8CRX1_9CHLR/78-422              SVAALGVYPYITASIIMTLL................TP.VIPKLTALSKE.GEAGRNKINTITHWLAVPTAALAGYSQLLLLQREGAVAQTE...................PLAAVAIVL..SIVAGTMFMVWLGEQITS.YGI.G.NGISLIIFAGIV.AGLPDM................................IG...RGLMASD.........................QFAG.........L........AVYAFMALLT.TVLIVIFTEAHRRIPVQYAQT...VIRS....GKMYRRGG...ESH.IPLRVNSAGMIPLIFASAL..VMLPG...LVASYFMAGSTEDP...............................................NFWNTIYNIFNSGASM.................................PGGLV [...]
+A2Y4E5_ORYSI/132-498             SFFQLGISHQISASIVMQVLFYPLFGPALLFSNGNVLCHVLPSLEKLRKE.GLDGHEKIKGYIWWLSLGFALVAAFTVSCYSLQYSIYAASY..................RVKHVMITSL..FLVLGAMTMTWICDTISE.SGF.G.HGSSLIICVGIL.TGYTDT................................LH...KMLTQFS.....................GNWYSCWH.........Y........ILGIAGTFILVTMGAVLVTEGCRKIKLQYYGF......KLASGARSESSPVTEVEPY.IPFNINPTGMQPLLTTSYL..LAFPS...IMASIF.....GTQFW.............................E...............SLKETLNPKTS..VG..................................GGPWA [...]
+Q7UZW2_PROMP/80-422              GIFALGILPFINASIIIQLL................TA.SLPVLEDLQKNEGEAGRRKIAQITRYVSLGWGFLQSIIFSLILRQYAIEGISET.................AFV..LQTSI..ALVTGSMIVMWFSEIITE.KGI.G.QGASLVIFLNIV.ATLPKA................................LS...STIEKAQ....................TGDRGDVLG.........I........AVLLGVFLLT.IVGIIFVQEGARRIPIVSAKR...QIG........NSSLLPTRQSY.LPLKLNAGGVMPIIFASAL..IFLPI...TVANVT.....GNPIL.............................I...............KIAGSLNPGS.......................................SNPWP [...]
+Q7NKT4_GLOVI/79-416              GVFMLGILPYINASIIMQLL................VP.VFPKLEDLQKNEGEQGRRQIAQYTRYLALGWAIIQSIGVAIYIKPFVADWSPL...................FV..IQTTL..ALTAGAIFVMWLGELITE.KGI.G.NGASLLIFVSIV.SSLPTA................................FS...QTFQLLQ.....................ADSSRVAG.........V........VVLLLVFLAM.IVGIVFVQEGTRRIPIISARR...QVG......PRRQQYQQQQTSY.LPLRVNQGGVMPIIFASSL..LYLPL...TFAQFA.....RN................................A...............TVDQVVNAI........................................SSGWI [...]
+SECY_GUITH/68-404                GVFALGIVPYINASIIVQLA................TN.SIPSLEKLQKEEGELGRQKIVQLTRYVALVWALIQSIGVSFWVRPYVFNWDLN...................FV..FAMSL..TLTIGSMLIMWFSEQITE.KGI.G.NGPSLLIFINII.SGLPKL................................LQ...SQIQSTR......................LNIQALD.........I........FVLVFIFSVM.IIGIIFIQEGIKRIPIISARQ.............LGKGQMDNKTSY.LPLKLNQSGVMPIIFASAV..LVLPA...YLAQLV.....SNEQL.............................R...............TVLHLFDGTS.......................................NNKLL [...]
+SECY_CYACA/62-394                SVFALGIIPYINATITIQIL................SS.AFPALKKLQSEEGEIGKKKLNKITKYLSFCFAFIESLAIVLRLQKYAFDWN.....................LYFIVQTTL..ILISGAMLVMWLADNISY.KGI.G.TGASVIIFVNIA.SAFAKF................................LL...NQLFVHS........................IKFLD.........F........ASYFALIVFS.IACIVFVQEAIRKVPIISAKQ.............LDSTSFYSNDYF.LPLRINQGGVMPIILASSL..LALVD...YVIRYG.....LST...............................L...............QAVYFINDIL.......................................PFKIL [...]
+Q85FU6_CYAME/42-325              GWFVLGIIPTINASIVMQIL................IS.IVPALTRLQKEEGEMGQKQIQKYTRYLTFFLAGIQAFTLSQQ..................................WCTWL..LIVSGAMLVMWLAEQMTH.KGI.G.NGTSIFVCSNIA.ANF...................................LH...HPIEAPW...............................................SLAMVVLIFT.MLGMIALQEAVRAIPILSAKQ...............LIQSIAQVYL.LPMRLNQGGVMPIIFASST..LALLH.................................................................................................................TWSIW [...]
+A0T0J6_PHATR/72-407              GLFTLNIFPYINASILVQLI................LG.FSPKLSKLQKEGDLEGRRSINRLTRLITLMFALIQSVSLALYLKQILFNWN.....................YSLAIEIGL..WLTTGAMIVLWLSELITD.YGL.G.NGASLLIYTNII.SSLPNL................................SK...TILSENS.......................QNFTLG.........S........EIGIVLLIFTSLYGIVFLQEGVRIIPLISSKQ...LNQ.......SSLQDSVTSNNY.IPLRFNQAGVMPIILTTTI..LVVPN...YVNNLG.......................................L...............LPKIDLPINF......................................ESLNFV [...]
+SECY_CYAPA/109-459               GFFTLGILPYMNASFFLQVL................TK.ILPSLERFQKEQEEIAQREFKKWTRYLTVIWAFIQSIVISWIWIRPYALNWD....................FFLGLKVVV..ALTLGAVIVMIIAEQITE.IGL.T.NGSSLLIFINII.ARIPNS................................IE...QLFNSNI..................NWT..FPMISS.........L........ILSLSLSFIT.MFVIIGLQESGRPVPVLIARQ...EAERQKFNEPITEAERRKTQAY.IFFQLLPAGIMPVIFASTIFDLALPA....FTNFL.....LQQG..............................N...............WGYQ.LIKSF......................................PFNSLF [...]
+Q4G351_EMIHU/63-407              GIGSLGILPYINASIIIQLL................TP.LFPNLERLQKEEGELGRQQISRYTRYLTCIWAIVLSSAIAFFLIKPITFGWS....................LKLGLEIVL..SLTVGSILSMWFAELITE.ESL.G.NGSSMIIFINIV.GGIPNN................................LSSLSKTFSAAN......................LASAIPL.........L........LTGLGIYLGI.VLIIIFFQESYKKITIVSAKQLNLTTS......AQTQSERLANNSF.IPLKLNQGGIMPLVFSSTI..AVVFM...YPAQIL............................................................LSSALLTNAAGL..............................ASKLLTI [...]
+SECY_PAVLU/66-404                SILTLGLGPFFSASLAVQFL................VK.LYPAFEKLQNEEGEEGRKTIVRYTRILTVLFCIIESFFLSNSLRSFVFNWN.....................SISYFVVAA..AVTTGSLVLVWLSEVITE.RGI.G.NGSSLLILIGNL.SRFRFLIN............................KDDF...DSLNVSS........................QSNLY.........I........IYIIITLVSM.LIFSTLSQEGARKIPVVSAKQ............LIDGVEDDMRRSY.IPIRFGQAGVVPIIFSSSI..LLFLT...TSIKQL.....PNA...............................N...............IATRVILDSV......................................NLQQIF [...]
+Q6B8X0_GRATL/62-395              GIFALGIVPYINASIMMQLL................TK.LIPELENLQKEEGESGRQKIGQLTRYFTLIWSILQSIGISLWIKPYVFNWNYY...................FI..LDSII..ALGTGSLIIMWFAEIITE.YGI.G.NGASLLIFQNII.SGIPKN................................IQ...NYKINIY......................DKQTIIN.........G........SFLFLLFVLI.LIINILIQECKRKIMIVSAKQ.............LSKFTTSNPRSY.IPLKLNQGGVMPIVFASAT..MALPI...YFSNNI.....EV................................P...............NINNVINLFL.......................................PGRIL [...]
+SECY_ANTSP/62-390                GIFALGIVPYIYASIIIQLL................IK.LIPYLENLQKEEGEIGRQKINQLTRYLTLLWALIQSLSIAIWINHMY.........................LIHLFELCA..SLTTSSMIAMWFSEIISE.YGV.G.NGPSLLIFQNII.SSIPKN................................LQ...NYTFNIG......................TTNTVLN.........G........SLILSFGIII.LIINILIQEGERKIAILSAKQ.............LGKINELNHKVI.FLLKLNQGGVMPFVFASAV..VHTFL...FISNNT.....NS................................................KITQFINLFL.......................................PNQFL [...]
+A4RW47_OSTLU/65-398              GIFSLGIVPYINSSIIFQLL................GS.VFPELKKLQKEEGEAGRRKFQQYQRYGALGFAIVQAVGQCLYVRPFVEDFTPI...................WL..FEQSC..ALTAGAMILMYIGELLNE.IKL.G.NGTSLLIFANIV.SALPSS................................VG...QTVSMAQ......................EKGDSSV.........L........AVFFGAFALT.TLGIVYVQEAERKIPMNYSTR..............FNAGGLAKSSY.LPFKVNSAGVMPIIFASSL..LALPA...TLTRFT.....DNGAV.............................L...............GVARFLSP.........................................GGGAG [...]
+A7PFA4_VITVI/131-465             GICSLGIVPFINAQIVFQLL................TQ.IYPKLQDLQKREGETGRKKVLQYTRYASVGFALVQAIGQVLFLRPYVNDFSTQ...................WV..LSSVT..LLTLGSVLTTYIGERISD.LKL.G.NGTSLLIFTSII.SYLPAS................................FG...RTVAQAF......................QDGNYIG.........L........VIIIISFFLL.VLGIVYVQEAERKIPLNYASR............YTNKSGGLQKSTY.LPFKVNSSGVMPIIFSTSS..LALPG...TVSRFT.....GLAAL.............................K...............KAALALN..........................................PGGSL [...]
+A7HM32_FERNB/75-404              SVFSMSVTPYINASIIMQLL................AS.IIPSLKELLKE.GEEGRKKFQHYTKNLTLGLAALQSFVVSFGLARSYQGIIAIN.................TWLFSFVSTV..SLVAGTMFLLWIGDRITE.KGI.G.NGVSIMIFAGIV.SRYPAY................................FR...SAVLG.........................NLNIFG.........W........IFLIAVAIFM.VVAIIYVQQAERRIKIEYATR...MVGR.....RIY..GGT..STY.LPIKVNHSGVIPIIFAWAI..ISIPE...AIAQIT.....GA................................Q...............WAIKLFS..........................................MQSPL [...]
+A3CK84_STRSV/69-416              SVFALGVSPYITASIVVQLL................QMDLLPKFVEWGKQ.GEVGRRKLNQATRYIALVLAFVQAIGITAGFDTLSRANLVAN................PNVQTYALICV..LLATGSMIVTWLGEQITD.KGY.G.NGVSMIIFAGIV.SAIPDMIK............................GIYE...DYFVNIP...................SERLTSSFIF.........V........GILIVAVLLI.IYFTTFVQQAEYKIPIQYTKV................AKGAPSSSY.LPLKVNPAGVIPVIFASSI..TAAPA...AIFQVV.....SALGYD...........................AD...............WVKTAQSLLA.......................................TTTIS [...]
+Q5FM71_LACAC/68-415              SIFSLGVSPYITAQIVIQLL................QMDIVPTLVEWGKQ.GEVGRRKTNQVTRYLTLVVAFVQSIGITLGFNALTQMGLVKNQ..............TPQTY..VEIAI..IMTAGTMLLTWLGDEITD.KGL.G.NGVSVIIFAGII.ARLPSGLW............................QIYK...EEIINNS..................ASDR.WQGILF.........F........IAVIVAILIV.TQLVTWVEQADRRIPIQYTRR...ATI...........SGS..ESF.LPLKVNVSGVIPVIFASSF..IITPA...TILMAF.....QRTQGD...........................QQ...............WFKV.LNQIF......................................SLQTTP [...]
+Q03ZM6_LEUMM/68-416              SLFAMGVSPYVTAQIIVQLL................QLDIVPRFVEWSKQ.GEVGRRKLNNATRWLTLVLAFVQSVGITAGFNSLSSYGLVSQT...............NSVM..SFVVIGSVMTIGTFFAMWLGEMITE.KGL.G.NGVSMIIFAGII.AQAPEGFY............................EIFK...ENILQAD..................SSDM.LNGWIF.........V........VVLVIAMILV.VAFTTWSYEGTRRLQMQYTRS...ATS...........YGS..EAY.LPLKVNVSGVIPVIFASSF..ISTPQ...TVMLAF.....QDKYSS...........................AQ...............WYQI.MQQIF......................................SMTTLP [...]
+SECY_STAA8/69-413                SIFAMGIVPYITASIVMQLL................QMDIVPKFSEWAKQ.GEVGRRKLNNVTRYLAISLAFIQSIGMAFQFNNYLKGALIIN................QSIMSYLLIAL..VLTAGTAFLIWLGDQITQ.FGV.G.NGISIIIFAGIL.STLPAS................................LI...QFGQTAF.................VGQEDTSLAWLK.........V........LGLLVSLILL.TVGAIYVLEAVRKIPIQYAKK.............QTAQRLGSQATY.LPLKVNSAGVIPVIFAMAF..FLLPR...TLTLFY.....PDK...............................E...............WAQNIANAAN.......................................PSSNV [...]
+Q4MG72_BACCE/68-415              SIFAVGITPYITASIIVQLL................QMDVIPKFSEWAKQ.GEMGRKKSAQFTRYFTIILAFIQAIGMSYGFNNIAGGQLITD................QSWTTYLFIAT..VLTAGTAFLLWLGEQITA.NGV.G.NGISMIIFAGLV.AAIPNVAN............................QIYL...QQFQNAG....................DQLFMHIIK.........M........LLIGLVILAI.VVGVIYIQQAVRKIPIQYAKA...VSGN....NQ....YQGAKNTH.LPLKVNSAGVIPVIFASAF..LMTPR...TIAQLF.....PDSSIS............................K...............WLVANLD..........................................FAHPI [...]
+Q6F1X5_MESFL/92-454              SILALGVSPYITASIIVQLL................STDVVPILTRWNKS.GERGRKKLDKLTKVLMIPFALMQGIATIFTLQQQGV.....IEPGWSSD...NVLASPAFYY..VLVPL..VMLAGSYFMLWIADQITI.KGV.G.NGISIVIFIGII.VQLPNQIK............................ATYD...FWIPSNE..................SINVFFDGIIK.........F........SIYMLVFFVV.IFSVVLMNEAERKVPIQQTGS...GLI...........DSKDHTPY.LPLKLNNAGVIPVIFASAL..ISTPI...TIAQIIDPTASTSTVDS...........................AN...............AFVRFTQHYL......................................SFNTWW [...]
+Q6KI36_MYCMO/87-436              SIVALGISPFITASLVMQIL................QTKLFPPIYRLSQS.GPIGRRKINIITRAITIFLGVVQSMTIVSALSAQNSFISLTNEF.............NVFWYQFIILPV..ILIAGTVFSIFIGDQITD.KGV.G.NGTTLLIFTGIV.ITLPTQFT............................ATFN...ALVGEQQ..................RVSSLSNGIVT.........F........ISYVFGFIIL.MYIIGFVYNAERRIPIQQVGA...GRA...........KNEKELSY.LPIKINPGGISPIIFALII..ISFPQ...LFASVF.....PISNPF...........................RI...............WVESNLR..........................................PNNTI [...]
+Q4A5I3_MYCS5/83-437              SIFALGISPFINASLIMMIL................QSRLFPMIYKLTQS.GPQGRRKLNIATRILTFIIAYPQAVFLTKSLTAGERNSSFITLVSI........DGFSVDLLVYFLLPM..ILISASLFALFLSEQITN.KGV.G.NGTSIIIMTGIA.ARLPFQMQ............................NAFK...IFVGDLS...................QSGTLVGILN.........F........VTYIFIYLAC.LMVIGIFYNAERRIPIQQTGA...GRS...........KALKEIGS.LPIKLNPAGIMPIIFAMLV..LSLPT...LIANIL.....PNDNYS...........................KQ...............WINENLQ..........................................FYKPL [...]
+Q98Q01_MYCPU/90-438              SIVSLGINPFITASLIMTIL................QSKLFPPIQKMSQS.GPLGRKKINVITRLLTLVFAFPQAIVLTQTLSRENGFISIDQEF.............KTIANIYVLLPL..ILVAGSLFTLFLSEQITD.KGI.G.NGTSLIIFSGIS.LSLPSQFR............................AAFN...VLVGTNK....................TTLFTGLIH.........F........LLYLFGYLLL.IVIIVFVYLAERRIPIQQTGA...GLS...........KNIKEMGS.LPIKVNPAGIMPVIFSMIV..ISFPL...LIAGLL.....DRSTSLV..........................RL...............WIERHLA..........................................FTHPI [...]
+Q4AAF9_MYCHJ/85-434              SVVALGISPFITASLFMLIA................QTKLFPPIHRLSQS.GPAGRRKINIITRFLTLLVAVIQAVVLIRTVILNPDYGFVRLEI.............NTPVFIWLVLPL..VLVAGSLFSLFLAEQITD.KGV.G.NGTSLLIFSGIV.VGLPRRFQ............................HAFE...YLVDLSF...................SSSLISQVLS.........F........ILYIFGFLLI.LLIAIYVYLAERKIPIQQTGS...GMS...........KNIKEISI.LPLKLNPAGIMPVIFALII..VSLPT...LFSGFL.....DRNTSAV..........................RN...............WIDNNMQ..........................................IYHPI [...]
+Q9PQP1_UREPA/76-434              SLFAIGIGPYITAQIIMQLL................SSELVPPLAKLSKS.GERGRKKIEVITRIITLPLAVMQAVIIINLMTRANG.....FISIVSNA...PFAIGSPLFY..VTYIF..LMVGGTYISLFLADLISK.KGV.G.NGITLLILTGIV.ASLFNHFI............................AIFS...NLGSLTS.....................SKVSQIIG.........F........ILYILFYIMI.LIGVVFVNNSTRKIPVQQTGQ...ALI...........LDHEKLPF.LPIKIMTAGVMPVIFASSV..LAIPA...QVAEFL.....DKQ...............................S...............MGYYVIHNYF......................................IVDSWT [...]
+SECY_MYCGE/81-430                SLFAVGISPYISAQIIMQLL................STDLIPPLSKLVNS.GEVGRRKIEMITRIITLPFALVQAFAVIQIATNAGT.....GSSPIS......LANSGSEFI..AFYII..AMTAGTYMAVFLGDTISK.KGV.G.NGITLLILSGIL.SQLPQGFI............................AAYN...VLSGIVI..................TLTPQLTAAIS.........F........FIYFLAFLVL.LFATTFITQATRKIPIQQSGQ...GLV...........SEVKTLPY.LPIKVNAAGVIPVIFASSI..MSIPV...TIAQFQ.....PQT...............................E...............SRWF.VEDYL......................................SLSTPV [...]
+Q8EUD2_MYCPE/81-433              SFMAIGVSPYITAQIIVQLL................SSDLIKPLTRLSKA.GERGKRKLEIITRLITIPFAIMQAYAVLSLAGTQGLVSSFFGQSA..........LSSVPAGQIILLLL..GMTAGTYLTIFISDIISK.RGV.G.NGVTLIILSGIV.ASIYPNFT............................SVFQ...VLTGSSQ...................ISNQLLRYFS.........F........AVYLVFFFLI.LLATTFVNGSVRKIPIQQIGQ...GLS...........KEVDEMPY.LPIKLNAAGVIPVIFASSI..MTIAP...TISQFL.....PSG...............................S...............AGSEFINEYL......................................SIERPV [...]
+Q7X4E3_9MOLU/69-399              CILSLGVIPYVTASIVIQLS................QK.VFTFMKEWQEQ.GEKGKRKINIVTRVLTIFLSLGHGWALCQTEKLVLG........................PYLLFSTLF..FLTVGVFISIWLADLITS.KGL.G.NGISILIAVGMV.DKLFKT................................FK...YLLSNSN.......................GFETQR..................ILILVSYFVL.LILTIILSSAYLKIPINYAXN................RNNDKIDKY.IPIKLNTSGILPIILADTL..LNVIQ...QISMLF.....SKNG..............................................KVNEYIGIFVE..SR..................................SELGI [...]
+Q5Q069_ASTYP/59-398              TLFGLGITPYITASIVVQFL................QK.LLPICREWKDQ.GQMGKRKLNLLTRSLALFFAFGQSFAFLNSYSKLLVTSIS....................TRQLFLLAL..IATAGVAILIWFADLINS.KGI.G.NGTSILIVVSMS.HSLINLFA............................NLNK...SYLSKNT.....................FLTLKTFN.........F........ACIVLLLLLF.LIFTVVVQITSLKIPINYARN..................QSQGKSY.IPLKINSAGVMPVILAFAL..LQPFQ...ILAGVI.....GN................................D...............KLTKYVNLFTNTNSSN.................................NQINF [...]
+O21257_RECAM/57-372              SLFALNITPIITYLFLEQLY...................YIYSIPLISKK.KNLNKDLIKKYSVYIFLMISYLEGFIYLNHLYNTTSSSFLIFY..............LDNTINYLLCLN..FLVIGSCFLYFFAKLINI.YGI.G.KGLSFIIFINIV.GSFIDI................................FY...KYLIQIE.......................TLNVKY.........L........VFLLFVQCLFCGIIYFYIDFLFLKIPIIKLNF......VG..NENDNYNYLNYFQKY.QTSSLNLLGILPFILVYSIIYMLKLNLNSFLDLVF............................................................................................................. [...]
+Q74NB9_NANEQ/69-457              SIVSLGIGPIIIGYLLAELF...................IGSGELNIDIT.TEEGKRKFENLARFFMIVFGLFESIVMA.TIGWFKPSQFLISLFAMPFSFLGSNAFLIGYILAVLFIVA..QLMLGVILAYLLDDLSQK.WGF.T.SGINLFILATVS.RELFVQLFNPLTQIP..............GTPTPPIGKIP...QIFYFIS...................QGLYTEAIVV..................GLQLLVIVLV.ILLSVYFYMVKIPIPTSFGKI...................PEKSLR.YEVRLIYTGNIPVIFAFAF..LHQIL...LIAWVL.....QQLGIPLLG.....................TIENG...............HPINGLVAYIYPDTGFLISLILG...................NLTLDNLIRTIT [...]
+Q2EMT2_METVO/30-379              TLITLGIGPIVTAGIIMQLL...................IGSELVKLDMS.KPDNRALFQGLQKAFGIFLCFLEAGMFV.LAGAFGALT......................PMMSLALIL..QLAIGAILLIYLDEIVSR.YGI.G.SGIGLFIAAGVS.QTIFVGALG.........................PQGYLW...KFFSALV...................SGSMGPALEY..................ILPILATIAV.FFVVVYAESIRVEIPLAHGRV...................KGAVGK.YPIKFIYVSNLPVILAAAL..FANFQ...LWGLVL.....YKIGFPLLG.....................TYSNG...............RAIDGIAYYFS...T.PYGLS......................SVISDPIHAIV [...]
+A5UL65_METS3/72-433              SILTLGIGPIVTASIVLQLL...................VGSKLLDLDLS.SPEDKSQYQATQKILSIVFTMFEAGVLV.LTGSLVPIDNS....................YL..GVLFL..QLVIGAILIIYLDEVISK.WGF.G.SGIGLFIAAGVC.EAIIVGTFSFIPG.................PGGVYGGAIP...AFIQSFW.......................SSSIDF..........S......VLIPLIATAAV.FFVVVYGESMRVEIPISHGSV.............RGHGRIRGSVGK.YPLKFVYASNMPVILTSAL..LVNVS...LLASVF.....QKIGFPILG.....................EIVNG...............KAVSGIALYLS...T.PNDVS......................LLVTDPVRVIV [...]
+SECY_METTH/73-436                SILTLGIGPIVSASIILQLL...................VGGKILKLDLS.RHEDKAFFQGLQKLLAIVFTFFEALIFV.LTGSLAPSAPQF..................V....WVLIL..QLTIGGILIIFLDEVVSK.WGF.G.SGVGLFIAAGVS.QEIIVGAFNPLSAP...............TQPGVPAGRIT...GFLYLLF...................TGQSPDFQYY..................VLPVLALIAV.FLVVVYAESMRVEIPISMGGG...............KRLSRGAVGK.YPLRFIYASNMPVILTSAL..LLNVQ...LLANVF.....QKLGYPILG.....................TVSNG...............QAVDGLAYLLT...A.PRSID......................ALILDPFRVVF [...]
+SECY_PYRAB/72-448                SILTLGIGPIVTAGIILQLL...................VGSEIIKLDLA.NPEDRRFYQALQRVFSVFMCFLEAAIWV.LGGAFGRVGVDV..................TYAIAALMIL..QLAFGGIILIVLDELVSK.WGI.G.SGISLFIAAGVS.QRILTRSLNPLTDPNII.........DPLTGKPAIVGAIP...YFIQHIL....................KGDLKGALYR......GGTA.....PDMMAVIATIIV.FLVVVYFESMRVEIPLGYRGV....................TIRGR.YPIRFLYVSNIPIILTFAL..YANIQ...LWARVL.....DRLGHPWLG.....................TFDPT.T............GNPVGGFVLYVI...P.PRSIF......................TVIDNPVRALV [...]
+Q8TZA9_METKA/75-435              SILTLGIGPIVTASILLQLL...................VGGDLIKLDLT.NPEDRRLFQGLQKLLAIVLCFFEGVMMV.FSGAAPPAEPS....................ILLEILLIL..QLALGGILVIFLDEVVSK.WGI.G.SGVGLFIVAGVS.SQIIIGAFNPLPSP...............QQPGRPAGAVW...AFLYSAM.....................QGTPDWTL..................LAPVIGAIIT.FLIVLYVEGMRVEIPIAFAGI...................RGARGR.FPVRLLYTSNIPVILASAL..FMNVR...LWALAF.....QRMGVPILG.....................KLDPR..............GQPISGLVYYLS...P.PNSIV......................KTLSDPLQALG [...]
+Q9HIT0_THEAC/82-514              SLMDLGIGPIVTASIVMQLF...................VGAKIFNLDLQ.NAEDKAIYQGVQKLLVIIMIFVEAIPQA...FGYLVPDTKVVNSINA......VFPGYGEFLAQTIIIL..QLFFGSYLVFLMDEVVSK.YGI.G.SGISLFIAADVS.EQLFIGAFNWQALNNAL..........TYSLTNPPAGAFP...KMFYIIMHSS...........SSYLLT.NGVVQILF........SPP.....NPMIAVLGTLLI.FFLVAYFQSSKIELPISHERV...................RGARGR.YPLQLLYASNIPVILATAL..LANVS...MWTLLF.....WSSPVLSKVPILGH...........NPLLGSYPTT.AQATA...LNISATTPTGGLAYYLF...S.PNGLSDWLFPILQPS...GYQNILLGHTPLQEAIHIIV [...]
+Q2QAQ7_9EURY/161-583             SIMHLGIGPIVTGSIIMQLF...................AGAKIIKLDLG.DSDDKQLYQGVQKILVLIMIPVESIPQV...YGFLDASPALVSD.............FGQGWANAIIVS..QLFIGSLLVFLLDELVSK.WGI.G.SGISLFIAAGVA.QSTFVGTLSPLAVNPG...........AYGLQNPPAGTLP...MIFYTLRTAT...........FSEMVTANGFESILLGD.....AAHP.....NAVVALFSSVVV.FLVVAYAESSKLELPLTHGKV...................RGHRGQ.YPIRLVYASNIPVILMAAL..LANLN...MFTLLF.....WSHPTMSTVPILGSQGA.....WSIAPYLGSYDVG.Q............TQATDGFAWYAS...M.VNGVGDWLLPLLN......QSPDPYGHSLWQVVLHVIT [...]
+Q0W1W5_UNCMA/75-487              SIILLGIGPIVMASIVLQLL...................VGAELIPLDTT.DPKDQAIFQGLQKLMVFVMIVVEALPQI..YGGFLLPDPAIAATL...........GVSTGIIQLLIFA..QVALGGVLILYMDEIVSK.WGI.G.SGVSLFIVAGIA.QALVGGIFNWNPPYPGQAMGLNVDIAGLGARENLPIGIIF...RWEWLLNNIG...........LSQLLTGENLIVLLY..........Q.....GEILALLATIII.FLLIVYVESTRIEIPLAHAAV...................RGARGK.FPVKLIYASVLPMILVRSL..QATLE...MVGLLL.....YRNGITFLGT....................FNQYN...............QPVDGLMFYIN...P.INGLSDWVPQLA........ALNYPGIQLWQIALHVFT [...]
+SECY_ARCFU/73-471                SIIALGIGPIVTASIILQLL...................VGAGIIKLDLT.NPEDRAAYQDFQRFLVFVMIAVEAIPQI..AGGLLKPDLNLAAQL...........GVSPGIISFLIFI..QLFIGGVLIVYMDEVVSK.WGI.G.SGVSLFILAGIA.QSIVVGLFNWVIPP................NSAMPAGIIP...RWIWIAQNYP...........LDQLFTGSGLAFLLI..........Q.....GGILALITTAAI.ILLVVFFEGTRVEIPLAHAVA...................RGARGR.FPIKLIYASVLPMIFVRAL..QANVV...ALGQVL.....HARGVTIFG.....................EFVNG...............KAVSGLMFFLQ...P.VSSPYDWIPSLVKS.....QGAAFAAIPDWMIYLHLLI [...]
+Q8TRS4_METAC/72-470              SLVLLGIGPIVTASIVLQLL...................VGADIIKMDLS.DPKDQAFFQGAQKFLVFVMIILEALPQL..LGGYIQPDPGLAATL...........NVGLGVITLLLLV..QIFIGGTLILFMDEVVSK.WGI.G.SGVGLFIVAGIS.QQIVTGIFNWEFE..................EGLPVGLIP...KWIYIAQNTG...........ADYLFSGEGLMFLLV..........R.....GGILALLSTVAI.FLLVVYVESTRIEIPLAHSAV...................RGARGR.FPVKLIYASVLPMILVRAL..QANIQ...MVGIIL.....ASRGITFLG.....................EFSGS...............KPLNGIMYYLA...P.IHSPYDWIPSLVRES...FASYGATAPAIWQIGLHVLA [...]
+A0B9U7_METTP/75-515              SLMLLGIGPIVTASIVLQLL...................VGAEIIKLNLR.DPRDQAIFQGTQKALVFVMIVVEALPQI..TGGYLLPDQALATSL...........GVSLSIISLIIFL..QVCLGGVLILYMDEVVSK.WGI.G.SGVGLFIVAGVS.QQLVTGLFNWATG.................DGGLPIGIVP...KWISIIRLGLI.........GLDEIFTAEGLKFIFV..........T.....GGLLALISTVGI.ILLVVLVESTRIEIPLAHSRV...................RGARGR.FPVKLVYASVLPMILVRAL..QANIE...MLGALL.....TAKLGTVTTAETTAEGVRIVYTGYQSWLGTFLSSAKFDAATGAPISATSPQPVSGLMYYLS...P.IHGPSDWIPSMVSQSTPGLVELGINPIAGWQIWLHLLT [...]
+SECY_HALMA/73-468                SIMQLGIGPIVTASIVLQLL...................GGADLLGLNTQDDPRDQILYQGLQKLLVLVMICLTGLPMV.FAGGFLPADTAVANSL...........GIGTAGVQWLIFA..QMFVGGVLILFMDEVISK.WGV.G.SGIGLFIVAGVS.QRLVGGLLTAPF...................LGNSEGIIY...TWYLFITGERG..........TGPVLAADGLQTVLL..........Q.....GELLGLFTTVLI.FAVVVYAESVRVEIPLSNARV...................KGARGR.FPVKLIYASVLPMILVRAL..QANIQ...FLGRIL.....NAQLGSMPAFL..................GTYANG...............QPTGGLFYFLA...P.IQSRGDWMWWL...........EGTAQPVWQILTRVGI [...]
+Q2FSG8_METHJ/73-458              SIVHLGIGPIVTASIVLQLL...................KGADLIHIDTS.EIRGQIQYMGLQKLMIFIMIVVEALPMI..VGGFLKPDPAIASAL..........FGGNSGVLAILIFI..QICIGGVLIFLMDEVVTK.WGI.G.SGVGLFIIAGIS.EAIINGFINWAPV.................NDMYPVGFFP...RLFAVVL.....................DGANFIQY.........FG.....TDLIAFITTIAI.FILIVYVESTRVEIPLAHTQV...................RGARAR.FPVKLIYASVLPMILVRVL..QANVQ...MIGLFL.....NNIGITIFG.....................TFEGQ...............TPTGGLMWYLA...P.INHPSDWMWWMP.........SYVGGHAPWEVLIRLGI [...]
+A2SPM5_METLZ/73-458              TILHLGIGPIVTASIVLQLL...................RGADLIKINTS.DQRGQVLYMGLQKVLIFVMIILEALPNV..LGGWMSADPAVSAFF...........GGNAGFVMLLIFL..QICIGGVLVMFMDEVVSK.WGI.G.SGVGLFIVAGVA.QGLINGFFNWEAT.................TDQFAVGFFP...RLFQVIA.....................DGSNFIEY.........FG.....LQLLALVTTVGL.FFIIVYVESTRIEIPLAHANV...................RGARSR.FPVKLVYASVLPMILVRVL..QANVQ...MIGMFL.....SSIGFTALG.....................EYNGS...............TPINGLMWYLA...P.INQPQDWMWWLS........SFTGTGHAVWEVILRVGI [...]
+A0RUE4_CENSY/79-457              TLVELGIGPIVTAGLLMQLL...................RGSEILKFDFK.KPEERGIFQTATKMVSYVVIVVESSIYGIAVYGPGIADPS........................VLYILIGQLMASSIIIMFLDELIQKGWGL.G.SGISLFIMAGVA.QQILWSLFSPLPA.................GDGFAVGIFP...FIGQWAS..................VGMGNFEDIFFR......YNQL.....PSIFGLLLTGGV.LLILVYTQGMKIEIPIVSTKY...................RGFSAT.YPIKLMYVSNIPVILASAL..TANAI...FIGQMF.....WSNFNPRNDNIFL.............NVLAQFDLT.N...........PSTPIGGIVYYIT...P.PRGLD......................IAALDPMRAVG [...]
+A8ME75_CALMQ/77-461              TLAQLGIGPIIIAGIIMELV...................AFSELMDVDLN.DPKDQARFTALTKLVAVIIAMFEGAFIM.STHQLTVAN......................AGLAFIVWL..QMLFGAVIVILLDDLISKGWGI.G.SGISLFILISII.RSIFQSTFMPVTV.................GAGELLGIIP...ALVAAVYSA.............AVSHTLAPLLSIVYR.......FNL.....PGLIGLIATIVL.GGFIAYVELMEVRIPLSFVQY...................GGYKMS.YPFKVMYVSVLPIIFTAYT..VALIYNGLYFIWTTYNPHNANALLNSIACIR...............VITTAKFG.TI..........NEPCPSSLIYYFT...V.VPY..........................NITPQYVVV [...]
+A3MUZ2_PYRCJ/70-435              TLAHLGIGPIVIAGILMEVF...................AFSGVLNLDLN.KREDRLKFTLMLKWAALGIAALEATAYV.LGGQFGTVT......................PLGGVLIVL..QLLLATVIILLLDDLMSKGWGI.G.SAISLIIFLGVS.RQIFLSLFSWDTVQD.............SNGNTQVFGLLP...ALGVALYDL.............FTSGNANTLLGLVNRPL..TVNTYL.....PDFVGLVATILL.GYIILYLEMMKVNIPVASAQY...................RGIKFT.IPLRFVYVSVLPIIFTTYS..LLLVG...................QLLQ.....................PFAAN.N............PALITVLNVIFL...P.HRY...........................FDPLLIIL [...]
+SECY_SULSO/73-449                TLAQLGIGPIITAGLIMQIL...................AGSKLISIDLN.DPDDRVKFTEAQKGLAFIFILVESALFGYVLARTSTTINASIL..............FIA....GIVIA..QLIVATYLILLLDELIQKGWGL.G.SGVSLFILAGVM.KIMFWDMFGIASVS................SQNLPIGFFP...ALFTALA...................SHSDVLNLIVNTSTKNLFQ.P......DLVGLVTTIAL.IIITIYLTTMTIEIPVTSQKL...................RGIRRT.IPLNFLYVSSIPVIFVAVL..GSDIQ...LFASLA..........SYVS.....................PSASN..............ILNTVSGVFFFPPPNSAIPHSIY.....................AVVLDPLGALE [...]
+SECY_SULAC/74-443                TLAQLGIGPVITSGLIMQIL...................VGSKLINVDLT.TQEGKSKFTQAEKALALIFIIVESSLFGYVFTRATSNILLP.......................IIVVV..QLIIASYIILLLDEMIQKGWGL.G.SGVSLFIMAGIM.KVIFWNMFGIVSVQ................SQNLPVGFFP...LLVSYIT...................SGRNLQEIVLNTSSTTPYQ.P......DLIGLIATVGL.TILIVYLVNTNIYIPVTTQRL...................RGIRTT.VPLNFLYVSSIPVIFVSVL..GADIQ...LFASLA..........NSIS.....................NSASG..............ILTDIANAFFFP..PQGVPHSVY.....................ALVVDPVGAAI [...]
+A2BME2_HYPBU/73-444              TLMTLGIGPIVTAGIVLEVL...................VGGKLIELDLT.KPRDRKIFMGAQRTLALLFALLEAAAYV.IGCRFWISAFASSPEV..........CPPISTAVKIIVVL..QLVFATLVLMWFDEMIRNGWGI.G.SALSLFIVASVV.KGLFWQLAGSTKVAT.............PEGQPVYYGWLA...HVVSTGD.......................LGVLRR.........GM.....PDMVGFLATIAI.IMVLIYFQLMRVYIPVTSPRY...................GSIKTR.IPLNFIYVTNIPILFVAIA..VSDIK...VFEIVI.....ASLLGADN........................PLV...............RGMDVLYNYVS...P.PRGLL......................AAVADPLRTLT [...]
+SECY_AERPE/73-434                TLMELGIGPIVTASLIIQVL...................VGAKIIKLDLA.DPEGRRKFTSAQKVLALAFAALEAVAFT.VGGRYWVGTAIEP.................GPLDYALVSL..QLFLGALLVIYFDEVMQKGWGI.G.SAISLFILAGVA.QGVVWSIFGTIPG..................VAQDYGLVP...AIISNPD.......................LTLLARP.......NGF.....PDLTGFFTTLAA.IILLVYLQAMRVEIPITSERF...................KGIRSR.VPLQFIYVTNIPILLVGIL..VSDLL...LVQRLL.....ADYLGVES........................RAY...............QIYSSIVYYLS...P.PRGVV......................QSIADPVKTAV [...]
+A1RWR3_THEPD/75-456              TLIELGIGPIVTSGIVWELL...................VGSRIVNLDLT.TPEGRRTFAGLQKLTAFLFAALEAAAYI.LGGVYGALT......................QQQQIIVFV..QLFVASTFVILMNDMLEKGWGI.G.SAVSLFIAAGVA.QQIFWELFSPIGPL................GDGLYYGLFP...SLFSALV.................SGNSTLLMHVVVR......PSGY.....PDLVGFVGMVVM.LLLLTYMESMKITIPVSSVRF...................GGAKTR.IPLKFLYVSVMPVILVGAL..YANVV...MFTQAL.....WPRVNPGNQNPWL.............NVIAKYNYT.EY.........GPVPLPGSFVYYIS...P.PRSLA......................SALADPVHLVV [...]
+SC61A_SCHPO/76-459               TLMELGISPIVTSSMLVQLL...................VGSQLIEVNME.LKSDREMYQLVQKFLAIIIAFGQATAYV.LTGMYG......RPQD...........LGAGIC..LLLIL..QLAAASLIVLLLDELLQKGYGL.G.SGISLFIATINC.ENIFWKAFSPTTYHI..............ANGVQFEGAVI...NFVYVMFT...............WDNKAAALYQAFFRSGLTSSQIQL.....PNLWNFFATLLV.FGVVIYLQDFRVEIPIRSQKF...................RGYRST.FPVKLLYTSNTPIMLQSAL..TSNLF...FASRLL.....FNRFSSNFLVR.................FLGVWEQ...............TATSGLSYYLS...P.PASFQ......................DALIDPIHTLV [...]
+A7E5Q2_SCLS1/76-459              TLMELGITPIISSGMVFQLL...................AGTHLIDVNLD.LKADRELYQTAQKLFAIILSMGQATVYV.FTGLYG......QPSD...........LGAGVV..CLLIL..QLVVAGLIVILLDELLQKGYGL.G.SGISLFIATNIC.ESIIWKAFSPTTINT..............GRGPEFEGAVI...ALFHLLLT...............WPNKQRALQEAFYR.......QSL.....PNIMNLLATIVV.FAAVIYLQGFRVEIPVKSSRQ...................RGARGS.YPVRLFYTSNMPIMLQSAL..SSNIF...LISQML.....YSRFSENLLVQL................FGVWEPK.EGS........AQLFATSGIAYYMS...P.PLNFT......................DALLDPIHTAV [...]
+Q5KC69_CRYNE/75-459              TLMELGITPIVTSGMIMQLL...................AGAQLIDVDFS.LKDDRALFGAAQKLFAMIISLGQATVYV.LTGLYG......SPSS...........LGAGVC..LLLIL..QLVSASLIVILLDELLTKGYGL.G.SGISLFIATNIC.ESIVWKAFSPNTVNT..............GRGPEFEGAII...ALIHLLFT...............WNDKTRALKEAFYR.......DRL.....PNIMNLLATVAV.FAAVIYLQGFRIEIPIKSSKM...................RGQRGT.YPVKLFYTSNMPIMLQSAL..TSNVF...LVSQML.....AGRFPDNLLVRL................LGVWEPM.ENN.......PTQLGAVSGIAYYMS...A.PHSLT......................SALKDPFHTVI [...]
+SC61A_ASHGO/75-460               TLMELGVSPIITSSMIFQFL...................QGTQLLQVNLE.SKQDRELFQIAQKVCAIVLTLGQAIVVV.LTGNYG......SVSN...........LGIAIS..LLLIL..QLVFASFIVLLLDELLIKGYGL.G.SGISLFTATNIA.EQIFWKAFAPTTVNN..............GRGTEFEGAVV...ALFHLLSV...............RKDKKRALVEAFYR.......DYL.....PNMFQVLSTVFV.FLFVLYLQGFRYELPVRSTRT...................RGQVGS.YPIKLFYTSNTPIMLQSAL..TSNIF...LTSQLL.....YQKFPNNPIVKM................LGVWGTR.SDAP......YSPNAAISGLSYYIQ...P.PFSFT......................EALLDPIKTVV [...]
+Q59MJ6_CANAL/76-459              TLMELGISPIVSSGMLFQLL...................QGTKIIHVDMQ.NKNDRETFQTAQKLLAILLAVGQATVYV.LTGMYG......PPSS...........LGVGVC..SLLIL..QLVFASTIVILLDELLQKGYGL.G.SGVSLFTATNTC.EQVFWKAFAPTTSTS..............AKGTEFDGAVV...AMFHLLGS...............RKDKKRALIESFYR.......PNL.....PNMFQLLATLLV.FFAVVYLQGFRIELPMKSTRQ...................RGPYGS.YPIRLFYTSNIPIMLESAL..ASNIF...IISQLL.....FMRWPNNLFVKL................LGTWDAR.AGS........SQLYANGGLAYYIQ...P.PFNFT......................DALLDPIKTTI [...]
+A7SJW4_NEMVE/75-458              TLMELGISPIVTSGLIMQLL...................AGSKIIEVGDT.PK.DRALFNGAQKLFGIIITIGQAVVYV.MTGMYG......DPSD...........LGPGIC..LLIII..QLFCAGLIVLLLDELLQKGYGL.G.SGISLFIATNIC.ETIVWKAFSPATINT..............GRGTEFEGAVI...ALFHLLAT...............RTDKVRGLREAFYR.......QNL.....PNLTNLIATIFV.FGIVIYFQGFRVDLPIKSARY...................RGQYSS.YPIKLFYTSNIPIILQSAL..VSNIY...VISQMM.....SAKFAGNFFVNL................LGTWEEA.GGG.......PARSYPVGGLCYYMS...P.PETVS......................HIIEDPVHACI [...]
+A0CFY2_PARTE/73-456              TLMELGISPIVTSGMILQFL...................SGVGFIEVNHS.VREDKVLFNAAQKLLSFIMAIAEGMAYI.WSGAYG......DINQ...........IGAGNA..ILILL..QLTFAGVIVTMLDEMLQKGYGL.G.SGISLFIATNVS.ENILWKSFSPITLST..............EAGTQFEGAII...NFFHLLFT...............KQNTLQALYYAFFR.......ESA.....PNLNNLLATLFV.ISLVIYLQGFRVEVPLASQKI...................RGLVSS.HGIKLFYTSNIPMIIQSTL..VQNVY...FLSQLL.....YRRFKTNFFVKL................LGTWQEA.EFG........GQSVPIGGLAYYMS...P.LRDVK......................DIINDPIHAVV [...]
+Q22MG2_TETTH/151-538             TIMELGISPTVTAGMVMQLL...................VGAQILNIDQN.DPVQRSLYEGSQKLLGLIIAFFEAVAYV.WSGMYG......DIEK...........VGYGNA..LLIVL..QLTFAGIIVILLDDLLSKGHGL.GNSAISVFIAINIC.ETIIWKSFSPITYPIP............GFEKEQYEGAIL...NLFHSLFA...............IDNKFVALQNAFYR.......SHL.....PNLASLISTALI.FIVVVYFQGFKVDIALKNDRV...................RGAIQS.YPIKLFYTSNMPIILQSAL..ISNLY...FFSQIL.....YRNFNGNFIVGL................LGKWSIP.EAG.......GSHMVPVGGLVYYLS...P.PHGMI......................EVISDPLHTIL [...]
+A0CU87_PARTE/77-460              TLMELGISPMVTASMIMQLL...................AGAKLIDVDQN.VKEDKQLYSGAQKLLGILIAFGEAFAYV.WSGMYG......DLDK...........LGAGNA..ILIII..QLVFSAIVMIMIDELLSKGYGI.GNSGTSLFIAINIC.ENIMWKAFSPITHKT..............ELGLEYEGAII...ALLHGLFV...............QSDKISALQSAILR.......DSL.....PNLTNLLATVLV.FLIVIYFQGFKVDIPIKNNKV...................RGGLTS.YPIKLFYTSNIPIILQTAL..VSNLY...FLSQIL.....YRNFKGNFLIRL................LGYYQEL.EN.........GQTVPIGGLVYYVS...P.PRSIS......................EAIFDPIHTIL [...]
+Q7RLN0_PLAYO/121-506             TLMELGISPIVTSGMVMQLL...................AGSKIIDVDQS.LKEDRTLFQGAQKLLGLLITLGEAIAYV.VSGIYG......NLSE...........IGTGHA..ILIIL..QLFFAGVVVILLDELLQKGYGL.G.SGISLFIATNIC.ETIMWKSFSPTTINT..............DKGIEFEGAII...SLIYCLFT...............EFNKISALKKSFYR.......THA.....PNVTNLLATILV.FLIVIYLQGFRVDLSVKYQTV...................RGQQGT.YPIKLFYTSNIPIILQTAL..VSNLY...FFSQIL.....YKRFSNSILVNI................LGQWQEI.ESN........GTAVPIGGIAYYIS...P.PNSFA......................DITNDPFHTLI [...]
+Q4QGX4_LEIMA/77-467              TLMELGISPIVSASLILELL...................AGVRILTYDQN.NREERAVFEGFQKMMGLVITAVEAVAYV.SSGMYG......DPSR...........IGVVMC..GLIVL..QLMVATMICILLDELLQKGWGI.G.SGTSLFIATNVC.DTIIWKAFSPSTINT..............GRGAEFEGAII...AFFHLLVS...............RTDKVRALREAFYR.......PQL.....PNLTNIFSTAVV.FAVVVFFQGFRVPLMTKSKFN...................GNDRQP.YMIKLFYTSNMPIILQTSV..VSNIS...FFSQIL.....SRRFGNRNFLIN...............LLGRWEER.GYNGG....GSGQLFPVGGLAYYLV...P.PATFY......................DLLADPIHAIF [...]
+A5JEK2_NOSBO/75-457              TLMDLGISPVVTASMIMQFL...................GMLELVKVDYN.VKEDKILHGAANRLISLIMTVGSAIVQV.LTGFYG......DPKA...........LGWTYC..ILLMV..QLIFSGVIIILLDELLQKGYGL.G.NGVNLFIASNVC.ESIMWRAFSPKVFFT..............GRGIEFEGSLI...AFFHLLIV...............RKNKFAALYEAFFR.......QNL.....PNMFSLVSTVVL.FAFVIYLQGLRVELKTESTQV...................RGQTGM.YPVKLLYSSTMPIIVQSYV..ISHIC...TISRFL.....YKRFPTYFLVRA................LGVWSSE.GS.........SKYQPIKGLCYYIL...P.PESIF......................DFKLRPFYFLF [...]
+A2DH65_TRIVA/75-462              SLMEFGISPIVTSGMILQFL...................CSFGLINRNPS.DPEASALFDAAQKLAGIIMTAFQAGNAI.WSGEYG......IRGE...........IGFVNA..ALIMT..QLVSSAIVVILLDELCQNGYGI.G.SGISLFICTNIC.EMIMWRLFSFNHYSM..............GRGTEYEGLVI...AFFHYLFT...............RKNKLRALRDIVFR.......PQL.....PNLCQLFSTVIV.FGACVYFDQIKINIGLETTVN...................RARPEP.FEIKLFYCSNTPPIIQSTI..LSQLA...GFSRTI.....YFHWPESLATQI................FGVWRSH.NGMS......YDYSTPVSGLIYYLT...A.PQSIQ......................QTIHDPLHTII [...]
+Q2QM98_ORYSJ/88-448              TVMELGVAPVVTSWVVVRLL...................AALL........FDSDSSTTVASCELLARCLAYVTNASRL.VIG.........IAAALGM.....CGSGGAGNA..ALVVL..QLFAGGVVVVLADLLHETGYGVEGVSAASLLIATNAC.ERAVSHLFSPVKLRL.............AGAGPEFEGPVF...AVTHRVAAAP...........PSWRHKAGALLFTLLR.......LDL.....PNLSNYMTTCVM.FVLAVRLDETHLRRLYRSRPR...................RGTDEF.VPIKLLYTSAMPIMLHASA..VSAFC...V...............DAG.......................GGAA...............YPVGGLVYYVT...P.PSKLL......................VDPGLIHELLI [...]
+Q6AV46_ORYSJ/86-471              TVMELGITPVVTAGTLVQLL...................VGSNLVRADSS.NPDDRALLSAAQKLLSIVITAGEATAYV.LSGAYG......SVGV...........LGAGNA..VLVVL..QLVLGGMVAIFLDELLQKGYGF.G.SGISLFTAANTC.EGVVTRALSPATMDR..............GRGAEFVGAVT...AAAHLLAT...............RARKLSAVREAFFRGG...GGGSL.....PDLRGLAATCAV.FLAAVYLQGVRVALPVRPRNA..................PRSHRGGAYSVRLLYTSGMPVVLLSSA..VSSLY...VVSQAL.....YRRFGGSLLVD.................LLGKWTP.D...........AAVPVGGIAYYVT...A.PASAA......................SAAANPLHAAM [...]
+Q6C854_YARLI/70-454              TLMELGVGPMVTSGIIFQIL...................GGFQALNVNFD.IRADRELFQSGQKIFALLLTFFHAIFLVFFAQTYGTISTDSAVS.............ELSLGAAVLIVA..QLTAAGLVLILLGEIVDKGYSF.G.SGSGLFTALSVS.QNFMWQNLALLKVHQEFVGS...IPALLMGLWKNGLFNFG...GSYRYVI...................ENSFFRQNLP.........N........LLQLYMSVAV.FMLTIYLNTFRVDIPIKSSRV...................RSLATA.FPVKLLYTGSMCLFLLSAF..SQNVL...IYSQSL.....YVQFPDNLMVQV................LGSWGADG..............SPVGGIAYYI.....SPNNF.........................GYDVIKMVL [...]
+SSH1_YEAST/78-465                TLLEFGLFPNISSGLILQLL...................AGLKVIKVNFK.IQSDRELFQSLTKVFAIVQYVILTNIFI.FAGYF.......GDD............LSVVQI..GLINF..QLVGAGIFTTLLAEVIDKGFGF.S.SGAMIINTVVIA.TNLVADTFGVSQIKVG............EDDQTEAQGALI...NLIQGLRSK..............HKTFIGGIISAFNR.......DYL.....PNLTTTIIVLAI.AIIVCYLQSVRVELPIRSTRA...................RGTNNV.YPIKLLYTGCLSVLFSYTI..LFYIH...IFAFVL.....IQLVAKNEPTHII..............CKIMGHYE.NAN........NLLAVPTFPLSLLA...P.PTSFFK.....................GVTQQPLTFIT [...]
+Q6BT20_DEBHA/78-475              TLLELGLLPVLTSAFIWQLS...................AGFRFINVNLN.LRSDRELYQSGQKLTSFIFAIVYGAGYI.FSGYYNNVIKGYNPFN..........GDSVPVTTLVLIFL..QIVTMSFVTTLMVEIFDKGYCF.G.SGVLCFVALQVA.TNLIRDVVGLELVSLP............NSNKFESYGAAM...NFIKNFR.................INFKSLNYNVLN.........SFTRSQLPNLSQFYIVLVT.VLVLIGVQNYRIELPIRSTKV...................RGMNNV.YPIRLFYTGALPILFAFTV..LTNLQ...VFGYFT.....STLLNNYSQLAASII.........GTWSLDTKSFNL..............NLTSGILYFL.....TPSKSLA.....................QSLLSPIRSVT [...]
+A5DE75_PICGU/20-414              TLLELGLLPVMTSAFLWQLA...................AGLRLVKVNLS.LRSERELFQTGQKLTSFILGIVYTAGLI.ASGYFAPALR..NQTGFE.......DSFPVTTY..VFIFL..QVFVMSAVMTLLVEVFDKGYGF.G.SGILCFIALQAA.SDLVKNIIGLEVVKLA............NSNKFESVGALM...NLIRSFSF................KTLGKNIYNSFNR.......EHL.....PNLTQVYITIVT.LLVVVALQNFRIELPIRSTRA...................RGMNNV.FPIRLLYTGALPLAFAYTV..LTNLQ...VLGYIA.....SQLLESYSPVASS..............VIGKWTID.YRS........SNLKVSSGILYFLS...P.PTSIL......................NTLVSPLKTAA [...]
+A3GFV9_PICST/78-476              TLFELGVLPVVTAAFFWQLA...................VGLKLVNVNLG.LRSDRELFQTGQKLTSFVLAIVYGVGLI.YSGYYDNAIRGYDPLSD.........STPYGWY..GLILF..QFLSWSFIITLIVEVFDKGYAF.G.SGALSFLALQTA.TNLIAELVGLEIFPIN............NSNKFESYGALI...NFTRNFSFDI...........SKIGTNVYNSFTRLQ.........LP......NFTSFYITVAT.TLAVVYLQNLRIELPIRSTRA...................RGMNNV.FPIRLLYTGALPVLFAYTV..IANIQ...YFGYLA.....YVVLQKANVSSFALSI.......IASFNLDSYSNRL..............NLTSGALYFF.....SSSPSLL.....................STILSPIRTVV [...]
+A5DWJ5_LODEL/34-436              SLLELGFLPIITSAFLWQLA...................AGLKLININLG.LRYDRELFQLGQKLTAWGLALIFSVGLI.YSGYYDNVIR..GYKVVGG.....SGGVPIWSY..LIIFT..QIFTWQIVLTLIVEIFDKGYGF.G.SGILSFLALQNA.TSFIAELVGLEMFPVV...........NNTLKFESLGALL...NLVRNFSIF.............SPTTTINQIWHAFTR.......VQL.....PNLTQFYITLAT.ILAVVLLQNFRTEISIRSTKV...................RGMNQM.FPIRLLYTGGLPVLFAYTV..IANLQ...VFGFIF.....EAALVKLTASPIVS............TLFANYVVE.PYS........NRLVIKSGVLYFFT...A.SQTLL......................QSIISPLRVVI [...]
+Q5A2C9_CANAL/5-404               TLLELGLLPIITSAFIWQIA...................AGLRLINVNFK.LRIDRELFQTGQKLTSFIFSLIFAIGLI.YSGYYDNAIR..GYNPLQ.......DGIPYGSY..ALILL..QITAWSWIVTLLVEIFDKGYSF.G.SGILCFLAIQSS.TNFIANLLGLENFPVV............NSNKFESYGALM...NLIKNFSIF.............NPKQTVYQIWHSFFR.......IQL.....PNLTQFYISLAS.ILIVVALQNFRIELPIRSTKV...................RGMNNV.FPIRLLYTGGLPVLFAFTV..VANIQ...VVGYLI.....HSVLSKLGTSPIVI............SIIGNYVYN.PSS........NELDLNSGILNYFT...S.SSSLV......................ESIISPIKTTV [...]
+Q74L41_LACJO/64-372              SIFSIGLNPLMFSMLIIQLL...................SFTHSFGFDA....LSPKQVQYLMQFLTMIITIIQAALLVFAFTNRRN........................GLEDFEMIL..ILSAGSCLVVWLCYRNMK.YGV.G.ASAPVILTSILN.GAIP.......................................NIISNVK..................LLLTMKYAWIW.........L........AALAIFILLL.IKFWLAFTKAYYPLKVVNPSL.................PASSNLMT.VPLGLNMAAMMMYMVGMAI..LTLPL...MVGRYF.....SSSSL..............................................................................................INNWV [...]
+B3XPQ8_LACRE/65-377              SLFMVGLNPLMIAMLIIQLL...................TMLRLFYFDT....LSMNQLMKIQQWLTLGFAIIQSTAVTLGLKITTG........................TLDSLAVIL..MLTAGSMFVVWLGNMNMK.FGI.G.GTITLILFNIIS.GSIP.......................................TLLRSIK..................MLAKQSYGPLW.........L........FLAAIAGCIV.LVFWVSFNRAYYPLKMINTSM.................SSHDRPII.LPIGLNMGAMMTYMVGMSL..LMVPT...LLANVL.....GPGSL..............................................................................................FANPY [...]
+A1C3L4_STRPA/70-403              TLFSLGIGPTMTMMILWRFL...................ITFKLI......GSWTSNKVNRLQFLLTLAIALLQSFGITNDSKFLLIFGYSH...................STLRIITII..LLTTGTFILNWLCKINSE.RGI.G..GMTVVILVNMI.LTFQSN................................II...RYFSVQQ........................FKFSS.........LI.....QYGLVFFVALSILIWFNILLYKGEYRIPIQRVGL................NTPYHASSY.LPIRVTPAGAMPFMYGMTL..MMLPPYIFVVLLHI.......................................................FPGNQILEYLSVHIG..................................LSQLP [...]
+Q3DVD6_STRAG/65-395              GVFSLGIGPMMTTMILLRLF.........................TIGKYSSGVSQKVQQFRQNVVMLVIAIIQGLAITISFQYHNGFS......................LTKLLLATM..ILVTGAYIISWIGNLNAE.YGF.G..GMTILVVVGML.VGQFNN................................IP...LIFELFQ.......................DGYQLA.........I........ILFLLWTLVA.MYLMITFERSEYRIPVMRTSI................HNRLVDDAY.MPIKVNASGGMAFMYVYTL..LMFPQYIIILLRSI.....FPTN..............................P...............DITSYNDYFS.......................................LSSIQ [...]
+A5LN99_STRPN/64-389              SIFSVGLSPWMSAMILWQMF...................SFSKRLGLTST....SIEIQDRRKMYLTLMIAVIQSLAVSLRLPVQSSYSA.....................ILVVLMNTI..LLIAGTFFLVWLSDLNAS.MGI.G..GSIVILLSSMV.LNIPQD................................VL...ETFQTVH........................IPTGI.........I........VLLALLTLVF.SYLLALMYRARYLVPVNKIGL................HNRFKRYSY.LEIMLNPAGGMPYMYVMSF..LSVPAYLFILLGFI.....FPNH..............................S...............GLAALSKEFM.......................................IGKPL [...]
+A3CM55_STRSV/64-391              SLFSVGLSPWMSSMLIWQMF...................AVSKRLGLSKL....PLEVQERRRMLLTLVIALIQSVALVLNLPLQEAAGVDM...................TTIMVLDTL..VLMAGTYFLIWLTDLNAA.MGL.G..GSIMIVMASMI.AYIPQD................................IW...NSIQELK........................ISSLW.........L........ALMLVFSLVF.LYLAVTVERSKYRIPVNKINI................HNRFKKYSY.LDIRLNPAGGMPIMYAMTL..VSIPQYFLLIIHFL.....QPEN..............................Q...............LIEQWIEALS.......................................MGSPA [...]
+Q03HZ8_PEDPA/65-396              SLFSVGLGPYMTGMILFQAI...................QLLDIDELNKI....NDYKRGMIQRWISFVIALLQTLQFIYTIREHINFSGIKVW...............GIDYNLIVAFF..VLVAGAMIVAWMSDMITK.YGI.G..GSGVLILPGMI.DSIPRV.....................................LLYGQGL......................GSGAVFF.........TP.....KLWLVLIISVAVVVIFTIFINKAELRIPLQRPFV.................QNDFSESY.LPIRVLAAGSMPFMFTTTV..FMIPS...YIGSFV.....PEG...............................................EFNRFVQNYV....A..................................FDNPV [...]
+A5IW80_STAA9/64-384              NIFTLGLVPWLTSMIILMLI...................SYRNMDKYMKQ....TSLEKHYKERILTLILSVIQSYFVIHEYVSKERVH......................QDNIYLTIL..ILVTGTMLLVWLADKNSR.YGI...AGPMPIVMVSII.KSMMH......................................QKMEYID........................ASHIV..................IALLIILVIITLFILLFIELVEVRIPYIDLMN................VSATNMKSY.LSWKVNPAGSITLMMSISA..FVFLK...SGIHFI.........................................L............SMFNKSISDDMPM.LT..................................FDSPV [...]
+Q4L9N9_STAHJ/61-383              NVFSLGLGPWLTSLVIIMLL...................NYRNLDQATKQ....TRSEKHYKERIITIVFAIFQSYFVISTYIHNNFIK......................DSNIILLML..ILVAGTMLLVWLADQNIT.YGI...CGPMPIVLTSLI.KSLFNN.....................................QHFFKLS........................VSVLL..................LILVIVTLVIALLILLFIELSEYRLNYKDIMN................NSTNKTPTY.LAWKLNPAGSISIMISLSV..YVLLN...NMINLI.........................................A............TLLGSNANFEFL...S..................................FANPI [...]
+Q5HKR3_STAEQ/61-380              NIFSLGLGPWLSSMIILTLI...................NHKSNDKVKTQ....TRRERHFKERALTLIISAAQGFYIIHSYINKHAIK......................DSNMLILLL..VLITGTLLMVWLADQNTT.YGI...SGPMPIVLMSLV.KSIFN......................................THFPKLN........................SSASL..................ITMIIVLLVLALFILFFIELTEYRIEYNDIMN................ISAKDIPSY.LSWKLNPAGSISIMVSLSL..FMLTN...NIVNFI.........................................G...........RFIVNHNFETHVF...N..................................FTNPV [...]
+Q9RSK8_DEIRA/68-413              SIFALGVLPYITASIVIQLL................TT.TIPSLEKLSKE.GEEGRKKINQYTRYAAIALGAVQALFFSLYI..TSNPSFIAVGW.............DPGLFTVLVMVL..TQVAGIAFTMWIGERITE.VGI.G.NGISLIITAGII.AVYPRE................................IA...ATAQLLR.....................SEQTTLLS.........I........LAFIAVILVT.IAGIVYIYQAERRVPVTYARARGGAAGQ.....ARG..AGQ..ATW.LPIKVNQAGVIPVIFASAM..LIIPN...LIASAT.....ATRA..............................P...............EVNAWINSNL......................................TFGQPL [...]
+Q5SHQ8_THET8/71-413              SIFALGIMPYITAAIIMQIL................VT.VVPALEKLSKE.GEEGRRIINQYTRIGGIALGAFQGFFLATAFLGAEGGRFLLPGW.............SPGPFFWFVVVV..TQVAGIALLLWMAERITE.YGI.G.NGTSLIIFAGIVVEWLPQ.................................IL...RTIGLIR.....................TGEVNLVA.........F........LFFLAFIVLA.FAGMAAVQQAERRIPVQYARK...VVGR.....RVY..GGQ..ATY.IPIKLNAAGVIPIIFAAAI..LQIPI...FLAAPF.....QDN...............................................PVLQGIANFF......................................NPTRPS [...]
+#=GR Q5SHQ8_THET8/71-413   SS    BTT----HCCCCCCCHHHHC................CC.CSCCHHHHHC-.-----CCHHHHHH------------HCCCCT--------S----.............----HHHHHHHH..HHH---HHHHHHHHHHCC.---.-.---CHHHH---CCCCCHH.................................HH...HH-----.....................-----CCH.........H........HHHHHHHHHH.H---HHHHC-EEEEEEE----...----.....---..---..ECE.EEEESS----HHHHHHHHH..CCHHH...HCCTT-.....TTS...............................................TTT---CCCC......................................-TTS-- [...]
+SECY_CORGL/73-424                SIFAIGIMPYITASIIVQLL................TV.VIPHFEELKKE.GQSGQAKMMQYTRYLTVALALLQSSGIVALADREQLLGAGIRVLS...........ADRNFFDLIVLVI..TMTAGAVLVMWMGELITE.KGV.G.NGMSLLIFAGIA.TRLPTDGM............................NILG.................................NSGGVV.........F........AVVLASVLIL.VIGVVFVEQGQRRIPVQYAKR...MVGR.....RQY..GGS..STY.LPLKVNQAGVIPVIFASSL..IYMPV...LITQIV.....NSGSLEV.........................SDN...............WWQRNIIAHL......Q...............................TPSSWQ [...]
+A8LB12_FRASN/74-414              SVFALGIMPYITSSIIIQLL................VV.VIPRLEQLKKE.GSSGEQKLTQYTRYLTVALGILQATGIVALARSGRL.....FPGCSA......QIIPDTSLFRIVTIVI..TMTAGTAVIMWMGELITA.RGV.G.NGMSLLIFTSIA.AALPSQGG............................RILQ.................................VAGGVV.........F........GLVILLGLAI.VVFVVFVEQSQRRIPVQYAKR...LIGR.....RMY..GGT..STY.LPIKVNQAGIIPVIFASSL..LQLPQ...LVGQVW.....SNQTFQ............................D...............FEQRYLSR.........................................GDHPL [...]
+Q83NQ1_TROW8/73-424              SVFALGVMPYITSSIIIQLL................RV.VVPRFEQLYKQ.GQEGQAKLIQYTRYLTIGLAVLQSTTLITVARSGAL..FAASNSPACS.....SLLTDDSWYSTIIIVI..VMTAGTGLIMWLGELITE.RGI.G.NGMSILIFTSIA.AGFPGV................................LV...GVYQT..........................RGFGM.........F........STVVITSLVV.MVGVVFVEQSQRRVPVQYAKR...VVGR.....RIL..GGG..STY.LPIKLNMAGVVPVIFASAI..LRVPS...IIAQFS.....QPAPGQP.........................PAA...............WVVW.INENF......T...............................TGNSPF [...]
+Q8G3Z9_BIFLO/74-421              SIFALGVMPYITASIVVQLL................RV.VIPRFEALHKE.GQSGEAKLTQYTRYLTIGLAVLQSTTILVTARSGAL.....FNYQCD......QVIPDGSVFNLVVMVL..IMTGGTGLIMWMAELVTD.KGI.G.QGMSILIFMSIC.SGF...................................LP...QLWEIGY..................GTNGTDGDWLK.........F........GIVVGVLVVI.LIFVDFVELCQRRVPVQYTRR...MIGR.....KMY..GGS..STY.LPLKINMSGVIPPIFASSI..LAIPT...LIAQFG.....KSDQ..............................S...............WVKW.INANL......A...............................NTTSVW [...]
+A7B9M4_9ACTO/72-414              SIFALGIMPYITASIIIQLL................RV.VIPRFDDLHKE.GQTGQAKLTQYTRYLTIFLGILQATTTISLARSGQL.....FQSCNH......DIIKDRSVMTFIMMII..VMMAGTGVIMWLGELITE.RGI.G.NGMSLLIFTSIA.ARLPEQ................................LL...SIGQA..........................GKWGS.........V........AAIVALLLLV.AIAVVYVEQAQRRIPVQYAKR...MIGR.....RQY..GGT..TTY.IPLKINMSGVIPVIFASSI..LALPP...MAAQFG.....SPND..............................K...............WVQW.ISAHF......................................TQGSSF [...]
+SECY_CHLTR/73-433                TVIALGVVPYISASIIVQLL................VV.FMPTLQREMRESPDQGKRKLGRMTRLFTLVLACVQSLLFAKFALRMNL..VVPGIVLPAMLS.LKLFGVPWVFY..LTTVV..VMITGTLLLMWVGEQISD.KGI.G.NGISLIITLGIL.ASFPSV................................LGSIFNKLNLGS..................QDPS.EFGIVS.........L........LILCAVFVFV.LMATVLIIEGMRKIPVQHARR...IIGR....REVV..GG...GSY.LPLKVNYAGVIPVIFASSL..LMFPA...TIGQFL.....SSES..............................S...............WLKR.IATML......................................SPGSVA [...]
+Q1AU49_RUBXD/70-408              SVFALGIMPYITAAIVMQLM................TV.AIPRLQELARE.GEVGQQKITQYTRVFTLALSFIQSVAMVLFLRSGQFGPVLAG................AGALDLFLVVV..TLTTGVMVTMWFGELITQ.RGL.G.NGISLIITASIL.SQAPNA................................VR...TLIE..........................DGSVLT.........M........VILGIIAVMI.VAAIVFVNEGQRRIPITYAKR...QVGR.....RMS..QGG..TTY.LPLKVNMAGVIPIIFASSL..LIFPV...VITQFA.....AGGDQS............................S...............WLFR.LAQIF......................................APPSAP [...]
+Q8RIH6_FUSNN/75-411              SIFSLGIIPYINASIVVSLL................VS.IIPQLEEIQKE.GESGRNRITQWTRYLTIALAIIQGTGVCLWLQSVGLIYNPGI.................SFF..VRTIT..TLTAGTVFLMWVGEQISI.KGI.G.NGVSLIIFLNVI.SRAPSS................................VI...QTIQTMQ......................GNKFLIP.........L........LVLVAFLGTVTIAGIVLFQLGQRKIPIHYVGK...GFSS.....K....GGIGEKSF.IPLRLNTAGVMPVIFASVF..MLIPG...VIVNAL.....PSTL..............................................SIKTTLSIIF......................................GQNHPV [...]
+A6DRC9_9BACT/79-428              GV..LGIMPYITASIIMQLM................TP.VFPNLEKLQKD.GSHGRQKLNQYTRYMTIVICAVQSAMMAVAMHTPSK....LLGVPGFED...LVINKGSAFV..IQTTI..IVTASAILIMWLGEQITD.KGL.G.NGASIIITINVL.SSMPQA................................FA...AVYSK.Y..................QE.G.EWNLVQ.........I........LVVVGILFIV.TAATVALVQGMRKIPLKYARD...ASSR.....NAM..IEK..TSY.LPLKVNHAGVMPIIFASAL..MMFPP...MIINKI.....GG................................D...............FART.VAPYF......................................DFGSTS [...]
+C0ACZ0_9BACT/94-454              AVCALGIMPYISASIIFQLM................TA.VVPSLARLQQE.GDVGRQKLSQYTRYATVLICLIQGALLILALENPTQLFGEGYDIARYGE...IVLVDRTWFL..ISSVI..FMTAGTMLLTWLGEQITQ.RGI.G.NGISLLITIGII.SDLPGA................................MGTLWTLLRAPV..................GT.Q.GISMIS.........L........TFMVILFFAV.TMGIIMVVQGQRKIPVQYAKR...VVGN.....KVM..GGQ..NSF.LPLKVNYSGVMPVIFASAI..LLFPQ...QIFRYL.....GAAFNL............................P...............FLIE.FSNNL......................................MRGHWV [...]
+Q1Q157_9BACT/75-434              AIFGLGVMPYISASIIFQLL................VG.VVPYLERLQKE.GEVGRKKINQYTRIATVGLCLFQAFVMTRTLYTVEF.....NGVPVIP.....VYLQGVSFQ..LMAAI..LLTTGTMILMWIGEQIEE.HGI.G.SGISIVIMVGII.ERLPWAF.............................NQIV...QNFTFSV..................APAEHQIGIVK.........L........LILLGMFFAI.VGGVVYITQGQRRIPIQQAKH...TRGR.....RVY..GGQ..RHF.LPLRVNQAGVMPIIFAQSL..LIFPA...AIMQGI.....QIRFEPGS........................VGY...............WITSRLSGIL......................................Q.EGVL [...]
+A6CGP8_9PLAN/77-435              TIFGLGIMPYISASIIFQLM................GT.VYPPLERLQKE.GEAGRKKINEYTRYATVVICLVQSFFWIRTLAGGFG.....SGTSLIL.....DGYQGLYFQ..IVATI..TMTTGTVFLMWIGEQIDA.YGI.G.NGISLLIMAGIL.ARMPQAGW............................SLIE...PAFEKGI..................ALGT.DTGIDR.........L........LILALVFVFV.VVWVIAITQGQRRIPIQSAKH...VRGR.....RVS..GGQ..RQS.LPLRVNQAGVMPIIFASSL..LMFPY...FLFHGL.....SQYF.ST.........................SAF...............W..AMLDEAF......Q..............................PMSRGFV [...]
+B4S5A8_PROA2/73-417              SIFSLGIMPYISASIIVQLL................GA.VTPYVQKLQKE.GEEGRQKINQYTRYGTVLIAALQAWGVSVSLASPSSFGTIVVP..............DPGFFFMMTTVL..ILTASTVFVMWLGEKITE.RGI.G.NGISLIIMIGIL.ARFPQS................................VI...AEFQSVS.....................LGSKNWII.........E........FIILALMVLI.VAAVVVLTVGTRRIPVQHAKR...VVGR.....KMY..GGS..TQY.IPMRVNTAGVMPIIFAQSI..MFLPN...TFLSFF.....PES...............................................EVMQNVATIF......................................SYDSWW [...]
+Q2S3P5_SALRD/75-414              GIFALGIMPYITASIIIQLM................GA.VVPYFQKLQRE.GEEGRRRITQLTRYGTIGITALQSIGYSINLLAGATGRAVVIN..............STLFT..ITTVV..VLTSGTAFVMWLGERISE.DGI.G.NGISLIITIGII.AFLPQA................................LY...NEIGLI........................GDNFFI.........L........LVEIGVWVLV.AGAVVLVSQGMRRIPVQYAKR...VVGK.....KVQ..GGT..TQY.LPLRVNAAGVMPIIFAQSI..MFIPS...TIASFF.....PNN...............................................ATMQRVGGWF......S...............................DISSMS [...]
+A1ZGT4_9SPHI/72-404              SIFALGIMPYISASIVIQLM................EV.AVPYFQKLKKE.GESGFKKKTQITRYLTIVITAAQAIGYIQATIPSNAIMVSQL.................SFT..ISTVI..ILTAGTVFTMWLGEKIDD.RGI.G.QGISLLIMIGII.SRLPQS................................LV...EEVVARS.....................T.GSQVLI.........L........ILEMVVLFFV.VMSVVMLTEATRRIPIQYAKQ...VVGN.....RVY..GGQ..RQY.LPLKVNAAGVMPIIFAQAL..MFVPA...LITPYV.....GG.....................................................ASSAF......S...............................DITTWQ [...]
+A6EHP4_9SPHI/71-408              SILALGVMPYISASIVVQLL................GI.AVPSFQKMQKE.GESGRKKLNQITRYLTVAITAVQAVGYVKTQVPMEAIVIDHT.................LFF..VMATF..VLAAGTLFVMWLGEKITD.KGI.G.NGISLIIMVGII.ARLPIA................................LY...QEITSRI.....................VSDGGLIA.........L........VLEIVALFAV.VMFTIMIVQGVRKVPVQYAKR...IVGN.....RQF..GGV..RQY.IPLKVNAAGVMPIIFAQAL..MFIPA...TLTQFF.......................................P...............SLQNTWLVQF......S...............................DYTSLA [...]
+Q11QD2_CYTH3/72-411              SVFGLGIMPYISASIVLQLL................TF.AVPYFQRLQKD.GESGRKTINQYTRILTIFITVAQSIGYLAATLDEGMIYEGMN.................TPFMNVVRIV..TLISGTMFCMWIGERITE.KGI.G.NGISMLIMIGIV.SRLPFA................................LM...AEVSSKN.......................LEGALP.........L........LIEFAALFAV.IMLVVLVQQATRRIPIQYTKQ...IAGG.....KQV..IGQ..RQY.LPLKLIAAGVMPIIFAQSV..MFLPA...IIGSSF.....PDS...............................E...............FATT.IGSTM......S...............................DFTSWQ [...]
+Q1VTY0_9FLAO/73-421              SVFALGIMPYISASIVVQLM................TI.AIPYLQKLQKE.GDSGRKKITQITRWLTIAITLVQGPGYIINLYNILPSSAFLMD...............STFTFVVSSVI..ILTTGCIFAMWLGEKITD.KGI.G.NGISLLIMVGII.ATLPQA................................FI...QEFISRV....................TESNGGLIL.........I........LIELVIWFVI.ILAAVMLVRAVRQIPVQYARK..NASGK....FEKASVGGA..RQF.IPLRLNASGVMPIIFAQAI..MFIPA...AVAGLS.....DS................................................EMAQGITAAF......Q...............................NMFGFW [...]
+Q1NYZ7_9FLAO/72-422              SILSLGIMPYISASILTQLM................CY.MFPSLYKIQQD.GEIGIKKINNITKVLTILISLIQAPVYITILISSNIKENPYNLILI.........HCKKIFI..ITSII..CITTGTFFTMWLGEKIND.KGI.G.NGNSLIIISGIL.SRFIYS................................II...SEIFNRL..................KNNNKLLGIII.........L........LFELFIWLLI.IGISIIIINFVKKIHIQYVNKFYLKNYS....SNEIYLRNE..MKF.LPLKVVYPGVMPIIFSQGI..LLIFI...TIFNKI.......................................N...............NLQL............................................SNNGIW [...]
+A5KHP6_CAMJE/62-402              SIISLGIMPYITASIIMELL................AA.TFPNIGKMKKE..RDSMQKYMQIIRYATIVITLVQSIGVAIGLQSLHG..RGGAGVIM........VEDLNMFI..ALCAI..SMLAGTMLLMWLGEQITQ.RGI.G.NGISLIIFAGIV.SGIPRA................................IS...GTVGQ.I..................NS.G.EMNFLT.........A........FAIFALILIT.IGVIIYVELGERRIPISYSRK...VVMQ.....NQN..KRI..MNY.IPIKLNLSGVIPPIFASAI..LMFPT...TILQTS.....TN................................P...............YLQA.INDFL......................................NPNGYL [...]
+A4EA78_9ACTN/52-389              SVFSLGIMPYITSSIILQML................QA.VVPSLHELARE.GEVGQTKITQYSRYLTLALAILNSVGYLFLFKSFGISFNGAGA...............PEIIFDLMIVG..TLTAGAMLIMWIGELITQ.RGI.G.NGMSLIIFANIM.AGLPQA................................IF...SSTE........................GNAGGIIT.........M........VIICAIILLV.IPLIVFLERGQRRIPVSYAKR...VVGR.....RMM..GGQ..TTY.LPIKVNTAGVVPIIFASAL..LYFPA...QIAVFF.....PGIG..............................................WIQA.VASAL.......................................STGWL [...]
+Q2GEC0_NEOSM/73-411              TLFALNVMPYIVSSIVVQIF................FS.MLKSEGKVSAE..FMNESRLSFYSKLVALFLAFFQGFIIVAGLERTKAFVGGNEE...............FYSLLKYTSVL..TLVCGTFSLIWLGQQINS.RGI.G.NGMSLIIFAGIV.AEMPAI................................FG...NLFSGIG.....................SPGSGILG.........I........FVSLSLLVFV.VFLVVLVERASKNIPVHYPRR......RT..WGSTH..GDA..ASN.IPVKINVSGVIPPIFANAL..ILFPL...TLANFS.....AE................................S...............HLGEFIIRYF......................................SVGQPL [...]
+Q3YRM8_EHRCJ/72-412              TVFALNVMPYIVSSIIIQLL................SV.TVPRLNELRQN.GELGRMKINNYIRYMTIFFCIVQGSVILLGLEKMNS.....ENSIVV.......IDPGLLFR..IVGIS..SLLGGTMFLLWLGERINK.NGI.G.NGVSMIIFTGIV.AELPGS................................FS...SMFLL....................GKNG.NVPIFV.........I........LLMVLIFFAL.LLLIIFVEKSYRKILVQYPKR...QVKN.....KLY..GSS..STY.IPLKINISGVIPPIFANAL..LLSPI...TVANFH.....QGS...............................P...............WSDF.ILMYF......................................SSGKLL [...]
+Q5GSW3_WOLTR/77-416              TILVLNVMPYIVASIVMQLL................SS.AVKGINEVKND.GELGRRRMNSYIRYMTIVFCIFQSVTILIGLERM.......NREGTLV.....VIEPGVMFR..TVGIF..SLLGGTMFLIWLGEQISA.SGI.G.NGISLIIFTGII.SELHNA................................FS...FLLT..L..................NKNG.SMSLLI.........I........LFVFVLFFLL.LLLIIFVESSYRKVTVQYPKK...QFK......RLH..SDD..FTY.IPLKINLSGVIPTIFANAI..LLTPV...SIANFY.....KGH...............................A...............FSDF.ILNYF......................................MANKVV [...]
+Q0ANS0_MARMM/83-421              AIFVLNVMPYISASIIMQLM................SA.TIPSLEKLKKEGGEQGRQQINQYTRYLTVLLATGQAFAIAIGMNTPNS...EGVALAL.........NPGPFFL..ASTVI..TLVGATMLLLWLGEQITA.RGV.G.NGVSLIIFAGII.SAVPGV................................IG...GALSQ.A..................SS.T.GDGTVL.........V........VGGVLILVG..LLLVVFVERSQRRLLVQYPKR...QQGN.....RMV..GGD..TSF.LPLKLNTAGVIPPIFASSL..LLLPA...TAASFQ.....AQSGP.............................G...............WLQS.AVAIL......................................GPGSPW [...]
+A7IPQ0_XANP2/80-418              AIFALNIMPYISASIIIQLL................TS.VSPTLEALKKE.GEAGRKQLNQYTRYLTVVLAVFQAYGIAVGLEG.......SGSVVA.........DPGWFFR..ITTVI..TLTGGTMFLMWLGEQITS.RGI.G.NGTSLIIFGGIV.AELPGA................................FV...RTLQL.G..................RE.G.AISTPL.........I........LAALVLAVVV.IAFIVFMERAQRRLLIQYPKR...QVGN.....RIY..EGQ..SSH.LPLKLNTSGVIPPIFASSL..LLIPT...TIASFL.....QGSGP.............................E...............WLQT.ITTHI......................................GHGRPA [...]
+SECY_RICCN/70-411                SIFALAIMPYITASIIIQLM................SV.AYKPLENLKKE.GEVGKRKVNQLSRYLTVLLASFQAYGVAISLESIVT...NTGPVVI.........LAGFFFR..ITTVI..TLVVGTMLLMWLGEQITQ.RGI.G.NGTSLIIFIGII.SGVPSA................................II...SMFEL.S..................RK.G.ALS.PL.........I........AIAVCIGVVVLIAIIIFFERAQRKLLVQYPKR...QVGN.....KIY..GGE..ATH.MPLKLNTSGVIPPIFASSI..LLFPA...TLANF......SNSNS.............................E...............TMGM.LTYYL......................................GHGKPV [...]
+Q2G8W0_NOVAD/80-430              SLIALGVMPYITASIVVQLA................AS.LHPALAAMKKE.GESGRKKLNQYTRYGAVLLTAIQGWVLASGLEAYGA..SSGLQAVV.........NPGLLFR..VGAVI..SLIGGTMFLLWLGEQITS.RGI.G.NGVSLIIMAGIV.AQMPKF................................FG...NLFEG.G..................RT.G.SISPFL.........I........FGIVIMLIAL.VIGICFLERATRRLLIQYPKR...ATQR.....GMM..AAD..RSH.LPLKINTAGVIPPIFASSL..LLLPL...TITQFA.....GNSISPDT.......................KMGQ...............AIVT.LNQYL......................................GHGKPL [...]
+A6E0Q6_9RHOB/73-411              GIFALGIMPYISASIIVQLM................TA.MVPALEQLKKE.GEQGRKKINQYTRYGTVALATLQSYGLAVSLQSGD......MVSN...........PGMFFI..ASCMI..TLIGGTMFLMWLGEQITA.RGV.G.NGISLIIFVGII.AEVPAA................................LA...QFFAS.G..................RS.G.AVSPAV.........I........VGVMLMVVAV.IAFVVFMERSLRKIHIQYPRR...QVGM.....KIY..DGG..SSH.LPVKVNPAGVIPAIFASSL..LLLPA...TITTFS.....GNTTN.............................P...............VLST.VMAYF......................................GPGQPL [...]
+Q1UZE8_9RICK/67-404              AIFALGIMPYISSSIIVQLL................TG.VSDYFKNLKAQ.GETGRAKITQITRYGTVILATIQGYGLSIGLQSSAD.....LVIN...........PGLFFT..ITAVS..TIVAGTMFLMWLGEQITQ.RGI.G.NGISLIIFAGIV.AEIPRA................................LV...TTFEL.G..................RT.G.AVSTIM.........I........IGIFVLLVAT.IMFIVFMERALRKILINYPKR...QMGN.....KMY..GGE..SSH.LPLKINQAGVIPAIFASAL..LLLPV...TFSNFS.....FSDND.............................T...............FLN..LSSYF......................................TQGQPL [...]
+Q3R245_XYLFA/76-424              SIFALNVMPYISASIVVQLA................TH.IFPSLKAMQKE.GESGRRKITQYSRIGAVILAVIQGGSIALALQNQTA..PGGAAVVY.........APGAAFV..MTAIV..ALTAGTVFLMWVGEQVTE.RGI.G.NGVSMIIFAGIV.AGLPGS................................VL...QTIDA.F..................RS.D.ALSLIS.........L........LIIVFIVLSF.TFFVVFVERGLRRIAVNYARR...VEGR.....NSY..MNK..SSF.LPLKLNMAGVIPPIFASSI..LAFPV...TLSIWS.....GQASSNTL........................FGA...............WLQR.VSSAL......................................GPGEPL [...]
+A4NK90_HAEIN/76-416              SILALGIMPYISASIVIQLL................AT.VSPALAELKKE.GAAGQRKISKYTRYATVVFATIQAVAISTGLPNM.....LSGLVP..........NVGFSFY..FTSVV..SLVTGTMFLMWLGEQITE.RGI.G.NGISILVFGGIV.AGLPSA................................IL...QTIEQ.A..................RQ.G.QMHPLV.........L........LLIAAIVFAV.TYFVVFVERGQRRIRVEYAKR...QQGR.....QIL..GGH..STH.LPLKVNMANVMPAIFASSI..ILFPA...TLTQWF.....GQNDKF............................E...............WLNN.LSMLL......................................NPGQPL [...]
+Q057C4_BUCCC/64-407              SIFALGVMPYISSSIIVQLL................TL.ISSYLRNLKKE.GDIGKKTINQYTKYITFFLSIIQSIGVVISLPFLPGMKNIIVF...............ADCYFYIIAVV..SLVTGTIFLMWLGELITT.KGV.G.NGVSLIIFSGII.SGLPAS................................VI...RTYKLIK.....................IKNFSFLY.........V........FFLLLIIFFV.IFIVVFIEKSQRKIIVCYARR...QQGR.....RMY..TAH..HSY.LPLKLNMAGVIPVIFSSSL..IVFPS...ILLTYL.......................................R...............YVFNDYKKIIYFFDFL................................KFKHSI [...]
+Q8D1Z2_WIGBR/82-424              SIFSLGIMPHISASIIIQLL................TI.IHPKLSEIKKD.GEFGRRKINKYTRYGTLFLAIIQSISISISLPNMPG...MQELII..........NKGIEFY..ITTIT..SLVTGTIFLMWLGEQITS.RGI.G.NGISILIFSGII.AGLPIE................................VI...KSIEQ.A..................RQ.G.NLNIIT.........V........LISIILVFVI.TYFVVFIERGQRRVIVNYAMR...QKGR.....KIY..AAQ..ITH.LPLKVNMSGVIPAIFASSL..ILFPA...TIASWF.....GEGIGV............................K...............WMSK.IPYYL......................................EPGTFS [...]
+Q6F7T2_ACIAD/83-426              SILALGIMPYISASIIVQLM................ST.VVPSLEALKKE.GEQGKRKINQYTRYGTLLLALVQGVGMCAGLIS.......QGITL..........TSGLAFY..IPAVT..SLVAGTMFLMWLGEQITE.RGI.G.NGISMIIFAGIV.AGLPNQ................................VI...QAFTS.V..................QN.G.QGSLIG.........I........VVFALLSLAV.LAAIVFIEKAQRRIPVNYAQK...QQGR.....RIF..TAQ..QTH.LPLKINMAGVIPAIFASSL..LLFPA...SLGQWL.....GSADPNAG.......................IVKR...............SLQD.LALVL......................................SPGQPL [...]
+Q6Q8W8_9GAMM/67-407              SIFALNVVPYISSAIIMQLF................SN.SIPYLQELKKD.GQAGRNKITQYTRYGTAILAFIQASALAVTLSA.......SGLAY..........VPGPTFF..VSAVF..SVVAGTMFLMWLGEQVSD.RGI.G.NGISIIIATSIL.TGIPGA................................IG...QALEQ.S..................RQ.G.DLSILL.........L........IGIGLLSMAV.IAVVVFIERGQRRITVNYAQR...QQGR.....RMM..QAQ..QSH.LPFKVNMAGVIPAIFASTF..LLFPA...SLSTWF.....GENESL............................S...............FLQS.FSLAL......................................NPGQPL [...]
+A9BRX1_DELAS/74-413              TVFALGIMPYISASIIMQLM................TY.VVPTFEQLKKE.GESGRRKITQYTRYGTLGLAIFQSLGIAVALESSAG.....LVLS...........PGFGFR..LTAVV..SLTAGTMFLMWLGEQITE.RGL.G.NGISILIFGGIA.AGLPSS................................IG...GLLEL.V..................RT.G.AMSILA.........A........IFIVLVVAAV.TYFVVFVERGQRKILVNYARR...QVGN.....KVY..GGQ..SSH.LPLKLNMAGVIPPIFASSI..ILLPA...TVVNWF.....SAGESM............................R...............WLKD.IASTL......................................TPGQPI [...]
+Q7DDS8_NEIMB/73-410              SIFAIGIMPYISASIIVQLA................SE.ILPSLKALKKE.GEAGRKVITKYTRYGTVLLAILQSLGVASFVFQ.......QGIVV..........TSSFEFH..VSTVV..SLVTGTMFLMWLGEQITE.RGI.G.NGISLIITAGIA.SGIPSG................................IA...KLVTL.T..................NQ.G.SMSMLT.........A........LFIVFGALLL.IYLVVYFESAQRKIPIHYAKR...QFNG.....RA...GSQ..NTH.MPFKLNMAGVIPPIFASSI..ILFPS...TLLGWF.....GSADTN............................S...............VLHK.IAGLL......................................QHGQLL [...]
+Q5NHU8_FRATT/74-416              SIFALGVMPYISASIIFQML................SA.VYPKFIELKKE.GESGQKKITQYTRYLTLALAIVQSFGIVAFVLHQ......DGLVTT.........NNMALFY..LTTIV..SVTTGSMFLMWLGEQITE.RGV.G.NGISLLIFSGIV.ANLPFE................................IS...NTLSQ.A..................NQ.H.VISYLS.........V........WVLLILLLLV.IAFVVFMESAQRKITVNYAKR...QQGR.....KMF..AAQ..TSH.LPLKLNMAGVIPAIFASSI..LMVPG...VLLGWL.....SNYNSL............................S...............WLAD.VAEML......................................QPGSIV [...]
+Q7WZR8_9GAMM/64-388              SIFSIGLMPYISASIIMQVI................TG.MFLDVE........VSKHKLTSYLRYLTFMLSVIHSLVVSILFLEKSV.....VYY............KKSVVY..LTIIL..TFVTGAIFLMWLGEQITD.KGI.G.NGISLIILSGLV.SVIPNA................................LG...RTLFLTI..................KD.S.SWMYIQ.........I........FKVVSLVLIT.IILVVVIESGQIRIKVSYPRR...LIGK.....KLY..ATQ..SSY.LPLKLNMAGVIPAIFASSS..LIITA...SVG..........................................Q...............WINRSILPQL......................................SPGQPL [...]
+A5EX98_DICNV/69-412              SLLALGVAPYISASIVMQLL................TH.MLPALKDLRQE.GSAGQKKITQYTRYFTLFLAIMQGFAISRTVMAAGMTISAGS.................GFL..LTATI..GLTAGALFMMWLGEQITE.RGI.G.NGISMLIFGGIA.VNMPSG................................IL...GLFNQAK.....................IGEIGYGR.........F........FLLLGIIVSL.FALIVYVERAQRRIKIHYAKR............QQFGTSAMGERFY.LPLKINMAGVIPAIFASAI..ITLLVSGLTLASSL.....PGAAG.............................R...............YLSDLAAGFH.......................................QGAWL [...]
+Q6MJ32_BDEBA/70-415              SIFALGIMPYISSSIIFQLL................TS.AIPYLEALKKE.GEQGRRKINQYTRYATVALAIIQGYGISTWLMNSTS..PDGHPLVIA......PTVAFLPFQ..IMTII..TLTAGTCFIMWLGEQITE.RGI.G.NGTSLIIFTGIA.AAIPGG................................AQ...QLWEL.V..................RT.G.EMRFAL.........V........LLLVAFMVAI.IAAVIYMEVAQRRITVQYSQR...QGGG.....GMQ..SMQTPTSH.LPIKLNISGVIPPIFASSL..LMFPA...TMAQFV.....NT................................P...............WLKA.LQDSL......................................NPSGAI [...]
+B5EFS0_GEOBB/71-411              TVFALGIMPYISSSIIFQLL................TV.VLPAVEKLSKE.GDAGRKKIIQYTRYGTIVLAVVQAFGISIGLEAMRG..PAGELVVP.........NPGWGFR..LMTVI..TLTAGTAFIMWLGEQMSE.KGI.G.NGISLIIFAGIV.ARIPTA................................IG...NSFRL.I..................KT.G.ELSLFV.........L........LLIAAVMFAV.IAAVVFMERGQRRIPIHYAKR...VVGL.....KTV..GAQ..SSH.LPLKVNMAGVIPPIFASSI..IMFPA...TVGNFI.....DV................................P...............WVQA.ASKQL......................................APGKLL [...]
+A3EVQ1_9BACT/75-412              TIFALGIMPYISASIILQLL................TV.VHPTLQAMAKE.GERGRKIITRYTRYLTVLIALVQSFGIALGLEGMNNGQ...FVPH...........PGWSFR..FIVVI..TLTAATTFVMWIGEQITE.RGV.G.NGISLIIFSGII.ARLPAA................................II...NTYKL....................YNQG.EISGFL.........I........LALVVMVFLI.VSSIVFIETARRKIPIQYAKR...LVGN.....KMM..GGQ..STH.IPFKINTAGVIPPIFASSL..ISFPA...IIAGFV.....SV................................P...............WIQS.FGKSL......................................SPGSFS [...]
+Q1MPP6_LAWIP/71-412              SVFALGIMPYISASIIMQLL................QV.IIPDFKRMAKEEGAAGRYKITQYTRYGTVIITLIQGIGIAIGLESMYS..PTNIPIVL.........EPGWVFR..IVTVL..TLTAGTVLIMWLGEQISE.KGI.G.NGISLIIFSGIV.VGIPGA................................IV...KTYQL.I..................IL.G.DMNILI.........A........LVLMLFMFAV.LTGVVFMERAQRRIPIQYAKR...QLGR.....KVY..GGQ..STH.LPLRVNTAGVIPPIFASSL..LLFPA...TMASFD.....IS................................D...............WLKD.IAVWF......................................SPSTIL [...]
+SECY_AQUAE/71-412                TVFALGVMPYISASIMMQLL................TV.AIPSLQRLAKEEGDYGRYKINEYTKYLTLFVATVQSLGIAFWIRGQVS..PKGIPVVE.........NPGISFI..LITVL..TLVAGTMFLVWIADRITE.KGI.G.NGASLIIFAGIV.ANFPNA................................VI...QFYEK.V..................KT.G.DIGPLT.........L........LLIIALIIAI.IVGIVYVQEAERRIPIQYPGR...QVGR.....QLY..AGR..KTY.LPIKINPAGVIPIIFAQAL..LLIPS...TLLNFV.....QN................................P...............FIKV.IADMF......................................QPGAIF [...]
+#=GR SECY_AQUAE/71-412     SS    -SS----HHHHHHHHHHHHH................HH.HSS-SSS-S--------HHHHHHHHHHHHHHHHHHH---HHHH----S..------SS.........----THH..HHHHH..HHH---HHHHHHHHHHHH.---.-.---HHHHH---T.TTTTTT................................SS...----S.S..................--.-.----HH.........H........HHHHHHHHHH.H-----S--------------...----.....---..---..---.-----------HHHHHHHH..HHHHH...HHHHS-.....SS................................-...............---T.TTTSS......................................----HH [...]
+Q01WB2_SOLUE/74-438              TVFALGIMPYITASIILQLL................TV.VVPTLEKLQKE.GELGRRKITQWTRYLTIILSILQSFGISQGLMGM......QQGIVI.........NPGIGFV..FLTIL..SLTTGTAFIMWLGEQISE.RGV.G.NGMSLIIFTGIV.VGLPNA................................IA...NIYQH.V..................FTIH.DWGAIT.........L........IVLMALMVAV.VAFIVLVERGERRIPVQYAKR...VVGR.....RVM..GGQ..STH.MPLKVNAGGVIPVIFASSI..LAFPQ...TLAQFG.....WVKNL.............................P...............WLSK.TLATI......................................QHGEPM [...]
+Q08ZH8_STIAU/26-370              SIFGLGIMPYVSASIIMQLL................AV.VVPSLERLQKE.GASGRQKINQYTRYGSIVLSVVQGIGISRWLASLGR..SDAGQSGFNQI...VVPDDSAWFT..FMTVI..SLTAGTAFIMWLGERITE.RGI.G.NGISLIIFAGIV.AGLLPN................................GK...TLLDM.T..................AQ.G.AIEAAA.........L........VGLAVFMLFI.IAVVVYVERGMRRIPVQYAKR...MAGR.....RMF..AGQ..ATY.FPMKVNTSGVIPPIFAGAL..LSFPA...TLGTWF.......................................P...............FLQT.FRQGL......................................EGNPWL [...]
+A6GCG0_9DELT/70-411              SVFALGIMPYISASIIMQLM................TV.VIPKLEQLQKE.GETGRRKINQYSRYGTVGLALVQGYFMASWLEGQNT.....PGQTLV.......LETGLPFK..LMTML..SLTAGTCFLMWLGEQITE.RGI.G.NGISLIIFAGII.ADMPTA................................SY...QLAQKAI..................DDPE.NFGPLP.........L........AMLLVVVLVV.IAFVVIMERGQRRIPVIYAKR...VVGK.....RMF..GGS..QNY.LPLRINNAGVIPPIFASSI..IMFPA...QIAGMT.....GN................................P...............YLQR.FAAAF......................................SYGNWL [...]
+Q04PV8_LEPBJ/72-436              SIFALGIMPYISSSIVMQLF................MV.LVPSLQKLQKE.GEEGRKKIGQYTKYGTVILCAIQSLAVIQLAKGWST..GTELEPARYPG..LINSSVVPYFY..LIGIL..SITTGTVLLIWLGEQITE.RGI.G.NGISLLIFAGII.GRLPES................................MV...QLFST.......................D.TMDALN.........V........LILLILLILL.ISLTVLLTQGVRKVPLQYGKQ...MVGR.....KMV..QAK..SQS.IPFKVNGANVMPIIFASSL..ILFPQ...TIIQWL.....SSSSE.............................Q...............WAGWAIIMDFFN.PFSQ..............................IWYHALF [...]
+SECY_BORBU/72-409                SIFMLSIGPYISASIIVQLL................VY.SFPSLKKMQE..GDGGRQKTKKYTKYLTIVAAVVQGYATSLYAKGIPG.....AVTI...........PFYRYI..FVAIL..TVTTGTFILLWFGEQINQ.RGV.G.NGTSLIIFSGIV.VRLQAA................................LF...NLFQS.M..................QDPSQNVNPVF.........V........ILIISIFILV.VILIIYEYKAQMRIAIHYARA............NSN..NTV..SSY.LPIKLNPSGVLPVIFASVL..ITLPL...QILSGF.....AETS..............................S...............IARQ.ILSYL......................................RPNGFY [...]
+Q73PL2_TREDE/73-413              SVFMLGVMPYISTQILMQLA................MI.IFPRLKKIAEE..DGGRKKIQVWTRIVTVFVALLQSSAVGTWARAIPGAVVISS.................PVLHLFITMV..TVTTGTMITVWMGEQITA.RGI.G.NGISMLIFAGIV.ARLPQA................................VW...ELIKLVS.....................NNELNLVF.........V........IIAFAMFVGI.IALVVYEQQGQRKIPVHYAKR...VIGR.....KMY..GGQ..NTY.IPFKINPSGVIPIIFASSF..LTFPL...MLSQMW.....GSNVS.............................................WLAS.VARFL......................................RSDGWG [...]
+Q67JW3_SYMTH/69-405              AIVAMGVTPYINSSIIMQLL................TV.VIPRLEELQKE.GEEGRKKIQQYTRYGAVVLGLVQAFGIGYALRSYGAFYSNS...................WTTLFVIMV..SLTAGTALVMWIGEEITE.KGI.G.NGISLIIFANIV.SRLPYS................................IY...NEILL....................LRAG.QRNIFQ.........P........LLVAVVALLM.VVFVVIINEAVRKIPVEYAKR...VVGR.....RVV..GGQ..RTH.LPIRINQAGVIPLIFASSL..MYFPI...TIAGFF.....PNS...............................D...............FAVF.VGRYL......................................DTRSWW [...]
+A7FQ38_CLOB1/69-409              SIFAMGVVPYINSSIIMQLL................TI.ALPSLESLSKE.GEEGRKKIQQYTRYGAVILAVIQAFSTYAIIARAGALRDGS...................KLNLFIIII..TVTTASTFLMWFGDKITE.KGI.G.NGISLIIFVNIV.SRFPST................................IY...SIVGL....................QKAE.TVNFVE.........V........IVFIVIALAL.FLLVVIMNLGERRIPVQYAGR...AVGN.....KIY..KGQ..STH.IPINVNSSAVIGIIFAISV..MQFPI...TIGQFW.....PESAFY............................K...............FITLNQYSPF......................................RDKSIA [...]
+A6LPT1_CLOB8/69-416              SILALGVMPYINASIIIQLL................TV.AIPQLEQLSKE.GDTGRKKIQNATRYVSLGIAFILAYGIFATISSSGATVGLT...................AIQKTIVVF..ALVVGTTFCMWLGDQLTV.KGI.G.NGTSILIFVNII.SRVPAT................................IA...SMMTL....................QQAG.SASIVE.........I........VLFGVFTVFL.LATILYFSLSERRIPVQYAGK..FASGN....SNMV..KSQ..STH.IPLSIIGSAVLAIIFSMSV..MDFPK...TIATLFGGVGESQKEWA............................K...............WVLNNPTSIF......................................NNKSWM [...]
+Q0SQG4_CLOPS/69-409              SIFALGVVPYINASIIMQLL................TV.AIPKLEQLSKE.GDDGRKKIQKITRYASIVIGAITAYGSYVIIHNVGALKSNS...................PVSMFLILL..TLVVGSTFLMWLGDQITV.KGV.G.NGTSLIIFANIL.SSLPMT................................GY...QIYNL....................SKIG.KINVVE.........I........ALFIFFTLAL.LAGVIYLSLAERRITVQYAGK...AVGN.....KMM..KGQ..STH.IPLSIIGTTVIAIIFAMSV..MSFPT...TIAQFF.....PEAGWS............................Q...............WITGSSYSPF......................................NAKTWM [...]
+A9KJH4_CLOPH/71-425              SLFALGIGPYITSSIIMQLL................TI.AIPKLEEMQKD.GESGRKKIAEISRYVTIGLSIIESVAMVIGFSGSGALEGGL..................TFTNIVVITA..SFTAGSAILMWLGERITE.KGV.G.NGISVILLINIV.ANMPRD................................IY...GLIEKFV..................LGESVVKGVTA.........A........IIIVAVILLS.VVLIILLNAAQRKIAVQYAKK...VQGR.....KMV..GGQ..SSH.IPLKVNTAGVIPVIFAVSI..MQFPI...IIASFF.....GVQPARAY........................FWP...............KVLHMLNSQSWFNIKNG...............................EFKYTV [...]
+A7VH89_9CLOT/71-420              SIFALNVTPYITASIIIQLL................TI.AIPALEEMQKD.GEDGRKKITAITRFLTIGLAILESAGLAINFGRKGFMDSYN...................FWTVLTMIV..ILTGGSAFVMWLGERVTD.RGV.G.NGISIILLINIV.STMPND................................FK...NIYTQFI..................KDKDPVRMCLI.........A........LLVVAIVVCV.TILVCMLQGAERKIPVQYAKK...VQGR.....KQM..GGQ..SSN.IPLKVNTAGVIPVIFASSL..MAIPS...IITSLF.....GK.SPSGV........................GAK...............ILQG.MSQSYWF.NA.N...............................YPWGFL [...]
+A6BIS2_9FIRM/71-421              SVFALSITPYITSSIIVQLL................TI.AIPQLEEMQRD.GETGRKKIVAITRYLTVGLALIESGAMAVGFGRQGLLVKYN...................FVNAAIVVL..TLTAGSAFLMWIGERITE.KGV.G.NGISIVLVINII.SRIPSD................................MK...TLFDQFV..................KGKAIASACLA.........V........CVIIAIILAL.VVFTVILQDGERRIAVQYSQK...IVGR.....RSY..GGQ..STN.IPLKVNTAGVIPIIFSSSL..MQFPI...VIASFL.....GKDNGSGI........................GSE...............ILRG.LNQSNWCNPEQI..............................KYSW... [...]
+A7VR33_9CLOT/71-423              TLFAMSVTPYINSSIIMQLL................TV.AIPPLERMAKE.GEEGRKKIGAITRYVAVVLGLVQGLAYYLYLRGSSY.....EGTPIVTY...TEGAAGVFTA..IVIVL..VFTAGTAMMMWLGEQINQ.KGI.G.NGISILLFAGIV.ARLPDTVN............................ILVQ...ALQAAWQ..................APDSFGQYYFF.........V........PLFVIIFLAI.IWVIVFMNDAERRIPVQYAKR...VVGR.....KMY..GGQ..STH.LPIKVNMSGVMPIIFASSI..LTIPS...TIQLFV.....TPT...............................G...............FWKT.VLDAL......................................STTGWV [...]
+A6NXF0_9BACE/71-437              TVFALGVQPYINSSIIIQLL................TV.AIPALERLQKEGGEEGRKKIAAITRYTTVAIALLQGFGYFTLINANGLVGSDLP.................TWLAGIIIVL..TFTAGSAFVMWLGEQITE.FGI.G.NGISIILFAGIV.SRFPSM................................LM...NMVQGVQRWSMHLSDEEISAMSNGEAFRNSLVHPAM.........I........PLIIIGILAL.VVFIVFINDSERRIPVQYAKR...VVGR.....KMY..GGQ..SSH.IPLKVNMSGVMPIIFAQAI..ASLPA...TIAAFI.....P.................................G...............GMDSTFMKVF......................................DSNGLV [...]
+Q250L2_DESHY/70-413              SVFALSITPYITASIILQLL................TI.VIPSLERLAKE.GEFGRKKITQYTRYGTVILGFIQGFGMTFGLRGALIIPKPGM.................EWAIYLLVAL..ILTAGTAFLMWLGERITE.NGI.G.NGISLIIFAGIV.AGVPDA................................IK...RIAGL....................LSVG.EINVFS.........V........FGLIVIGLGI.IAGVVFIQEGQRRIQVQYAKR...VVGR.....RVY..GGQ..SSH.IPMKVNQAGVIPIIFAISL..LAFPS...TIATWM.....DPAS..............................A...............YVRF.VNTWF....VMN..............................GSLTSIP [...]
+Q8R7X3_THETN/69-402              TIFAMSIVPYINASIIMQLL................TI.AIPSLEQLAKE.GEEGRKKIAQYTRYLTVVLALIQAIGMTIGLRSAVINPT.....................FFRLTVIVI..TLTAGTTFLMWLGERITE.NGL.G.NGSSLIIFAGII.SRIPNM................................IY...LTHEY....................IKAG.TSNIFG.........A........IAFVVAELIM.IVLIILATEGQRRIPVQYAKR...VVGR.....RVY..GGQ..STH.IPIRINMAGVIPIIFAISL..LQFPQ...QLATFF.....PHS...............................S...............FYNF.VQKWL......................................STNGLI [...]
+A4XLR1_CALS8/69-419              SIFAMSVTPYINSSIIMQLL................TI.AIPALEELAKQ.GEEGRKKLAEWTRYGTAILAFLQAVGIYFGLKNAQGLTGGVPVIT..........TQGQGFLGFITITL..ALTAGTVFLMWIGEQITE.NGI.G.NGISLLIFAGII.SRIPNG................................AV...SLWNYVA.................KLNEFSLTSIIG.........V........LLFLVMALAI.IVFIIVIQEGERRIPVQYAKR...IVGR.....RVY..GGQ..STH.IPIKVNIAGVIPIIFAISL..VMLPT...TIAQFF.....PNS...............................G...............FYKF.VKAYF......................................SSGSFW [...]
+A3DJJ2_CLOTH/71-411              TIFAMSITPYINASIIIQLL................TV.AIPKLEALAKE.GEEGRKAIAEYTRYGAVVLGFLQATAFYFGLAQAVNERN.....................VLSFITITL..TFTAGTAFLMWLGEQITE.YGI.G.NGISLLIFAGIV.SRGPRG................................ILYLWDLYRLER..................LGKG.ILGIFG.........V........LGVLLLFVVI.IASVVWVDQAERRIPVQYAKR...VVGR.....KMY..GGQ..STH.IPIKVNMAGVLPIIFATSF..VALPA...TIVGFF....FPNSTH.............................P....................VAEYF......R...............................SFQSRI [...]
+A8MLG0_ALKOO/69-408              TIFALSISPYITSSIIMQLL................TI.AIPSLEALAKE.GEEGSKKIAQYQRYATIILALIQATGISVGLFRGALINQD....................TFSIIVVIL..TLTAGTAFLMWLGEQITE.KGI.G.NGISLLIFAGII.ASLPSS................................LF...TTFAL....................TKAG.QINPLA.........I........ILFIVIAIAM.IVAVVAIEAGTRKIPVQYAKR...VVGR.....KMY..GGQ..SSH.IPLKVNQSGVMPVIFAMSL..LQFPH...TIAYFI.....GSEG..............................G...............FAKF.LNTWL......SP............................TGMPGVFI [...]
+Q18CH6_CLOD6/69-406              SLFALGISPYITASIIIQLL................TV.GFESLAELQKS.GEEGKKKINKYTKYTALALAVVQALGITLGIVRSALISNS....................VFFITTVVI..TLVSASMLVMWIGDKITE.KGI.G.NGSSVIIFAGII.SRIPTD................................VI...KISQQ....................VKSG.EVAPWV.........I........VILAVVILLT.VTGVTFIQEATRKIPVQYAKR...VVGR.....KMY..GGQ..SSH.IPMKVNQSGVMPIIFASSL..LAFPQ...TIAMFM.....GPNAQ.............................A...............FVQKYLSMAT......................................EQGFWT [...]
+B8D0S8_HALOH/72-406              TIFAMSITPYITASIILQLL................TG.VIPRLEELQKQ.GVEGRKKLTQYTRYGTVVLAIIQAFGITMLIGRHNVIVNPN...................LFNLMLIVI..SLTAGTAFLMWLGEQITD.KGI.G.NGISIIIFTSII.SRFPSY................................IH...RNWEL....................YKTG.DITALN.........I........LFFLVLAVVI.IAGVIFIQQGERRIPVQYSKR...VVGR.....KVY..GGR..STH.IPMRINQAGVIPVIFAQAV..LQFPT...VIAAVL.....PY................................G...............WAQD.IATAL......................................EPGKPV [...]
+#=GC SS_cons                     BTT----HCCCCCCCHHHHC................CC.CSCCCCCHCC-------CCHHHHHHHHHHHHHHHHH-HCCCCC----S..-S----SS.........----THHHHHHHHH..HHH---HHHHHHHHHHCC.---.-.---CHHHH---CCCCCCCT................................CC...HH--S.S..................--.-.---CCH.........H........HHHHHHHHHH.H---HHCHC-EEEEEEE----...----.....---..---..ECE.EEEESS----HHHHHHHHH..CCHHH...HCCCT-.....TTS...............................-...............TTTT.TCCCC......................................-TTSHH [...]
+#=GC seq_cons                    olhuLGIhPaIoASIIhQLL...................shspLtclpcp.GcpGRc+lsphoRhholllullQuhuhshhhtths.........................hh..lhhll..pLssGohhlhWLuEhIoc.hGl.G.NGlSLlIhsuIl.sslsts................................lh...phhphh......................t..hshhh.........h........lhhllhhlhl.lhhllalppup++IPlpas+p.................tsp..psa.lPlKlNhuGVlPlIFAsul..lhhPt...hluphh......pt...............................t...............hhtp.lshhh.......................................hpshh [...]
+//
diff --git a/demotic/examples/example.fa b/demotic/examples/example.fa
new file mode 100644
index 0000000..9b1f523
--- /dev/null
+++ b/demotic/examples/example.fa
@@ -0,0 +1,12 @@
+>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1
+MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT
+TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF
+AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP
+N
+>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA PE=2 SV=1
+MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD
+ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK
+HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS
+EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
diff --git a/demotic/examples/example.fasta.out b/demotic/examples/example.fasta.out
new file mode 100644
index 0000000..38392e2
--- /dev/null
+++ b/demotic/examples/example.fasta.out
@@ -0,0 +1,5870 @@
+# /usr/local/fasta-36x2/bin/fasta36_t -q example.fa /misc/data0/databases/Uniprot/uniprot_sprot.fasta
+FASTA searches a protein or DNA sequence data bank
+ version 36.04 January, 2010
+Please cite:
+ W.R. Pearson & D.J. Lipman PNAS (1988) 85:2444-2448
+
+Query: example.fa
+  1>>>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 - 181 aa
+Library: /misc/data0/databases/Uniprot/uniprot_sprot.fasta 181677051 residues in 516081 sequences
+
+       opt      E()
+< 20   558     0:=
+  22     0     0:           one = represents 934 library sequences
+  24     3     0:=
+  26     2    11:*
+  28    11   117:*
+  30   120   710:*
+  32   838  2746:= *
+  34  3876  7447:=====  *
+  36 12656 15294:==============  *
+  38 28083 25276:===========================*===
+  40 44462 35258:=====================================*==========
+  42 53797 43098:==============================================*===========
+  44 55983 47542:==================================================*=========
+  46 48483 48422:===================================================*
+  48 42188 46359:==============================================   *
+  50 36235 42303:=======================================      *
+  52 32159 37191:===================================    *
+  54 27781 31768:==============================    *
+  56 24404 26536:=========================== *
+  58 20107 21785:====================== *
+  60 16997 17647:==================*
+  62 13727 14148:===============*
+  64 11688 11252:============*
+  66  9240  8893:=========*
+  68  7082  6995:=======*
+  70  5456  5482:=====*
+  72  4389  4283:====*
+  74  3394  3340:===*
+  76  2590  2599:==*
+  78  2111  2020:==*
+  80  1752  1569:=*
+  82  1261  1200:=*
+  84   948   951:=*
+  86   795   736:*
+  88   617   569:*          inset = represents 7 library sequences
+  90   401   440:*
+  92   341   341:*         :=======================================*
+  94   233   264:*         :==================================   *
+  96   164   204:*         :========================     *
+  98   145   158:*         :===================== *
+ 100    97   122:*         :==============   *
+ 102    82    94:*         :============ *
+ 104    70    73:*         :==========*
+ 106    31    57:*         :=====   *
+ 108    39    44:*         :======*
+ 110    22    34:*         :====*
+ 112    22    26:*         :===*
+ 114    16    20:*         :==*
+ 116    10    16:*         :==*
+ 118    20    12:*         :=*=
+>120    20     9:*         :=*=
+181677051 residues in 516081 sequences
+Statistics:  Expectation_n fit: rho(ln(x))= 5.0921+/-0.000195; mu= 6.0172+/- 0.011
+ mean_var=67.4672+/-14.288, 0's: 51 Z-trim: 53  B-trim: 3380 in 1/65
+ Lambda= 0.156145
+ statistics sampled from 60000 (278110) to 515494 sequences (mod: 1)
+ Kolmogorov-Smirnov  statistic: 0.0435 (N=29) at  46
+Algorithm: FASTA (3.6 Jan 2009) [optimized]
+Parameters: BL50 matrix (15:-5) ktup: 2
+ join: 42 (0.083), opt: 30 (0.584), open/ext: -10/-2, width:  16
+ Scan time: 11.160
+
+The best scores are:                                      opt bits E(516081)
+sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG  ( 181) 1141 265.5   2e-70
+sp|Q7SY73|ABH6B_XENLA Monoacylglycerol lipase abhd ( 337)  108 33.0     3.6
+
+>>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=R  (181 aa)
+ initn: 1141 init1: 1141 opt: 1141  Z-score: 1399.6  bits: 265.5 E(516081): 2e-70
+Smith-Waterman score: 1141; 100.0% identity (100.0% similar) in 181 aa overlap (1-181:1-181)
+
+               10        20        30        40        50        60
+sp|P55 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|P55 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT
+               10        20        30        40        50        60
+
+               70        80        90       100       110       120
+sp|P55 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|P55 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF
+               70        80        90       100       110       120
+
+              130       140       150       160       170       180
+sp|P55 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|P55 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP
+              130       140       150       160       170       180
+
+        
+sp|P55 N
+       :
+sp|P55 N
+        
+
+>>sp|Q7SY73|ABH6B_XENLA Monoacylglycerol lipase abhd6-B   (337 aa)
+ initn:  47 init1:  47 opt: 108  Z-score: 138.1  bits: 33.0 E(516081):  3.6
+Smith-Waterman score: 108; 24.6% identity (57.7% similar) in 130 aa overlap (41-164:65-189)
+
+               20        30        40        50        60        70
+sp|P55 SNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGTTADDQLAFVS
+                                     ::: ..  ..:.  ..:...  :  :..:.
+sp|Q7S IRIYYWYWRRALGMQVKYSSYGNYKFCYTARGKPGNKPSVLM--LHGFSAHKDMWLGMVK
+           40        50        60        70          80        90  
+
+               80         90       100         110       120       
+sp|P55 LIADQGETTTVAF-GPEIGSRIAASFMAACGQLQ--HQIATRTGKEERKFKPFAAAGFSV
+       ..  . . . : . : :  :: : .... :::..  ::..   : ..   :::  .: :.
+sp|Q7S FLPKNLHLVCVDMPGHEGTSRSALDYYSICGQVKRIHQFVESIGLNK---KPFHLVGTSM
+            100       110       120       130          140         
+
+          130       140       150       160       170       180    
+sp|P55 R---AGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRPN   
+           ::. :    . . :.. .  : . .    . :..:.                    
+sp|Q7S GGNVAGVYAAQHPTHISSLTLICPAGLMYPIESKFLKQLKVLEKSGDNQRIPLIPSTAGE
+     150       160       170       180       190       200         
+
+sp|Q7S MEDMLRLCSFVRFKIPQQVLQGLIDERIPHNEFYRKLFLALVDEKSRHSLHENMNKIMAP
+     210       220       230       240       250       260         
+
+  2>>>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA - 345 aa
+Library: /misc/data0/databases/Uniprot/uniprot_sprot.fasta 181677051 residues in 516081 sequences
+
+       opt      E()
+< 20   552     0:=
+  22     0     0:           one = represents 937 library sequences
+  24     1     0:=
+  26     0    11:*
+  28     2   117:*
+  30    14   710:*
+  32   257  2746:= *
+  34  2276  7448:===    *
+  36 10190 15296:===========     *
+  38 26420 25279:==========================*==
+  40 42419 35262:=====================================*========
+  42 52939 43104:==============================================*==========
+  44 56211 47547:==================================================*=========
+  46 52753 48428:===================================================*=====
+  48 48517 46364:=================================================*==
+  50 42369 42308:=============================================*
+  52 35656 37195:=======================================*
+  54 30193 31771:=================================*
+  56 24361 26539:==========================  *
+  58 19644 21788:=====================  *
+  60 15073 17649:================= *
+  62 11970 14150:=============  *
+  64  9165 11253:==========  *
+  66  7325  8894:======== *
+  68  5598  6996:====== *
+  70  4251  5482:=====*
+  72  3363  4284:====*
+  74  2804  3340:===*
+  76  2216  2600:==*
+  78  1756  2021:==*
+  80  1503  1569:=*
+  82  1074  1200:=*
+  84   955   951:=*
+  86   697   736:*
+  88   516   569:*          inset = represents 9 library sequences
+  90   465   440:*
+  92   423   341:*         :=====================================*==
+  94   350   264:*         :=============================*=========
+  96   240   204:*         :======================*====
+  98   192   158:*         :=================*====
+ 100   169   122:*         :=============*=====
+ 102   133    95:*         :==========*====
+ 104   130    73:*         :========*======
+ 106    91    57:*         :======*====
+ 108    77    44:*         :====*====
+ 110    59    34:*         :===*===
+ 112    53    26:*         :==*===
+ 114    50    20:*         :==*===
+ 116    42    16:*         :=*===
+ 118    27    12:*         :=*=
+>120   275     9:*         :*==============================
+181677051 residues in 516081 sequences
+Statistics:  Expectation_n fit: rho(ln(x))= 6.2367+/-0.000211; mu= 5.0578+/- 0.012
+ mean_var=113.9719+/-22.498, 0's: 53 Z-trim: 72  B-trim: 0 in 0/66
+ Lambda= 0.120137
+ statistics sampled from 60000 (215252) to 515555 sequences (mod: 1)
+ Kolmogorov-Smirnov  statistic: 0.0383 (N=29) at  50
+Algorithm: FASTA (3.6 Jan 2009) [optimized]
+Parameters: BL50 matrix (15:-5) ktup: 2
+ join: 43 (0.127), opt: 31 (0.659), open/ext: -10/-2, width:  16
+ Scan time: 17.160
+
+The best scores are:                                      opt bits E(516081)
+sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hac ( 345) 2265 403.1 2.8e-111
+sp|Q8TFU8|HAC1_EMENI Transcriptional activator hac ( 350) 1740 312.1   7e-84
+sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac ( 451)  393 78.7 1.6e-13
+sp|P41546|HAC1_YEAST Transcriptional activator HAC ( 238)  240 52.0 9.7e-06
+sp|O24646|HY5_ARATH Transcription factor HY5 OS=Ar ( 168)  225 49.2 4.5e-05
+sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bo ( 261)  200 45.1  0.0013
+sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive elemen ( 519)  203 45.8  0.0015
+sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper ( 631)  201 45.6  0.0022
+sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=So ( 158)  191 43.3  0.0026
+sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element- ( 520)  191 43.8  0.0062
+sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive elemen ( 519)  189 43.4  0.0079
+sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive elemen ( 519)  187 43.1    0.01
+sp|A3LYI0|NST1_PICST Stress response protein NST1  (1234)  190 43.9   0.013
+sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive elemen ( 525)  183 42.4   0.016
+sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive elemen ( 428)  181 41.9   0.018
+sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive elemen ( 520)  182 42.2   0.018
+sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive elemen ( 520)  182 42.2   0.018
+sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive elemen ( 521)  179 41.7   0.026
+sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Ho ( 261)  174 40.6   0.029
+sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus  ( 338)  175 40.8   0.031
+sp|Q8W191|HYH_ARATH Transcription factor HY5-like  ( 149)  165 38.8   0.056
+sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens  ( 338)  169 39.8   0.064
+sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element- ( 521)  171 40.3   0.069
+sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive elemen ( 456)  169 39.9    0.08
+sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familia ( 338)  166 39.3   0.091
+sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcri ( 349)  165 39.1    0.11
+sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element- ( 470)  165 39.2    0.13
+sp|Q90370|MAFB_COTJA Transcription factor MafB OS= ( 311)  161 38.4    0.16
+sp|Q90888|MAFB_CHICK Transcription factor MafB OS= ( 311)  161 38.4    0.16
+sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scro ( 380)  160 38.3     0.2
+sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive elemen ( 479)  161 38.5    0.22
+sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcri ( 351)  159 38.1    0.22
+sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocr ( 381)  159 38.1    0.23
+sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus mu ( 380)  158 37.9    0.26
+sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive elemen ( 461)  159 38.2    0.27
+sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive elemen ( 395)  158 37.9    0.27
+sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF ( 401)  158 37.9    0.27
+sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcri ( 483)  159 38.2    0.28
+sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcri ( 494)  159 38.2    0.28
+sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive elemen ( 395)  157 37.8     0.3
+sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS= ( 323)  154 37.2    0.37
+sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein ( 381)  155 37.4    0.37
+sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattu ( 327)  154 37.2    0.38
+sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase ( 780)  159 38.4     0.4
+sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kin ( 806)  159 38.4    0.41
+sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive elemen ( 428)  155 37.4    0.41
+sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Hom ( 326)  153 37.0    0.42
+sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcri ( 413)  154 37.3    0.45
+sp|P29747|CREBA_DROME Cyclic AMP response element- ( 516)  155 37.5    0.47
+sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS= ( 323)  152 36.8    0.47
+sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Ratt ( 267)  150 36.4    0.52
+sp|P54842|MAFB_RAT Transcription factor MafB OS=Ra ( 323)  151 36.6    0.53
+sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus ( 326)  151 36.7    0.54
+sp|Q2VZV0|IF2_MAGSA Translation initiation factor  ( 872)  157 38.0    0.55
+sp|Q0CEI3|KAPC_ASPTN Putative transcription factor ( 286)  150 36.4    0.55
+sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive elemen ( 404)  152 36.9    0.56
+sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcript ( 347)  151 36.7    0.56
+sp|P54841|MAFB_MOUSE Transcription factor MafB OS= ( 323)  150 36.5     0.6
+sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos ta ( 380)  151 36.7     0.6
+sp|A1C9M5|KAPC_ASPCL Putative transcription factor ( 288)  149 36.3    0.62
+sp|Q504L8|MAFB_XENTR Transcription factor MafB OS= ( 316)  149 36.3    0.67
+sp|O57342|MAFA_COTJA Transcription factor MafA OS= ( 286)  148 36.1     0.7
+sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcri ( 348)  149 36.3    0.72
+sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element- ( 367)  149 36.3    0.75
+sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus n ( 380)  149 36.4    0.77
+sp|Q16520|BATF_HUMAN Basic leucine zipper transcri ( 125)  142 34.7    0.77
+sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mu ( 267)  146 35.7    0.84
+sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo s ( 380)  148 36.2    0.86
+sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive elemen ( 357)  147 36.0    0.93
+sp|A4R2R1|NST1_MAGGR Stress response protein NST1  (1319)  155 37.9    0.95
+sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive elemen ( 370)  147 36.0    0.96
+sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis  ( 381)  147 36.0    0.98
+sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcr ( 127)  139 34.2     1.1
+sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive elemen ( 508)  147 36.1     1.2
+sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Ara ( 315)  144 35.4     1.2
+sp|A2R346|KAPC_ASPNC Putative transcription factor ( 283)  143 35.2     1.3
+sp|O42290|MAFA_CHICK Transcription factor MafA OS= ( 286)  143 35.2     1.3
+sp|O43889|CREB3_HUMAN Cyclic AMP-responsive elemen ( 395)  145 35.7     1.3
+sp|O60841|IF2P_HUMAN Eukaryotic translation initia (1220)  151 37.1     1.4
+sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initi ( 952)  149 36.7     1.5
+sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcr ( 118)  135 33.5     1.7
+sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive elemen ( 428)  143 35.4     1.7
+sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS= ( 313)  141 34.9     1.7
+sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BA (2158)  153 37.7     1.7
+sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcr ( 703)  146 36.1     1.7
+sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper ( 834)  147 36.3     1.8
+sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gal ( 323)  141 34.9     1.8
+sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodop ( 381)  142 35.1     1.8
+sp|O35284|BATF_MOUSE Basic leucine zipper transcri ( 125)  135 33.5     1.8
+sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Hom ( 295)  140 34.7     1.9
+sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus ( 295)  140 34.7     1.9
+sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS ( 416)  142 35.2     1.9
+sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein O ( 466)  142 35.2     2.1
+sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcr ( 699)  144 35.7     2.2
+sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS= ( 171)  135 33.6     2.3
+sp|O13024|INCEA_XENLA Inner centromere protein A O ( 873)  145 36.0     2.3
+sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1  ( 885)  145 36.0     2.3
+sp|Q5RDE1|IF2P_PONAB Eukaryotic translation initia (1220)  147 36.4     2.3
+sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS= ( 289)  138 34.4     2.3
+sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattu ( 295)  138 34.4     2.4
+sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_ ( 412)  140 34.8     2.4
+sp|P15336|ATF2_HUMAN Cyclic AMP-dependent transcri ( 505)  141 35.1     2.5
+sp|Q553B1|DDX46_DICDI ATP-dependent RNA helicase d (1151)  146 36.2     2.5
+sp|P48634|BAT2_HUMAN Large proline-rich protein BA (2157)  149 37.0     2.8
+sp|Q5TM26|BAT2_MACMU Large proline-rich protein BA (2160)  149 37.0     2.8
+sp|A3BYC1|HOX25_ORYSJ Homeobox-leucine zipper prot ( 320)  137 34.2     2.9
+sp|P16951|ATF2_MOUSE Cyclic AMP-dependent transcri ( 487)  139 34.7     3.1
+sp|Q96RN5|MED15_HUMAN Mediator of RNA polymerase I ( 788)  142 35.4     3.1
+sp|Q2UNX4|KAPC_ASPOR Putative transcription factor ( 284)  135 33.8     3.3
+sp|Q80U35|ARHGH_MOUSE Rho guanine nucleotide excha (2057)  147 36.6     3.5
+sp|P0C865|MK07_RAT Mitogen-activated protein kinas ( 806)  141 35.2     3.5
+sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS ( 163)  131 32.9     3.5
+sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=R ( 163)  131 32.9     3.5
+sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive elemen ( 368)  136 34.1     3.6
+sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus ( 273)  134 33.6     3.6
+sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing prote ( 846)  141 35.3     3.7
+sp|Q00312|RBF1_CANAL Transcription factor RBF1 OS= ( 527)  138 34.6     3.7
+sp|O35413|SRBS2_RAT Sorbin and SH3 domain-containi (1196)  143 35.7     3.7
+sp|P97876|BATF3_RAT Basic leucine zipper transcrip ( 133)  129 32.5     3.9
+sp|O93602|ATF2_CHICK Cyclic AMP-dependent transcri ( 487)  137 34.4     3.9
+sp|Q5F489|TAF3_CHICK Transcription initiation fact ( 930)  141 35.3     3.9
+sp|Q6CBW0|NST1_YARLI Stress response protein NST1  ( 889)  140 35.1     4.3
+sp|Q9CXK9|RBM33_MOUSE RNA-binding protein 33 OS=Mu (1231)  142 35.6     4.3
+sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper ( 787)  139 34.9     4.4
+sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase  ( 937)  140 35.1     4.4
+sp|O75037|KI21B_HUMAN Kinesin-like protein KIF21B  (1637)  143 35.8     4.7
+sp|O14273|YET4_SCHPO Meiotically up-regulated prot ( 647)  137 34.5     4.8
+sp|P19880|YAP1_YEAST AP-1-like transcription facto ( 650)  137 34.5     4.8
+sp|Q6IPM2|IQCE_HUMAN IQ domain-containing protein  ( 695)  137 34.5     5.1
+sp|Q98UK4|MAF_DANRE Transcription factor Maf OS=Da ( 327)  132 33.4     5.3
+sp|Q556Q3|IRLF_DICDI Probable serine/threonine-pro (1400)  141 35.4     5.3
+sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA- ( 242)  130 32.9     5.4
+sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modul (1031)  139 35.0     5.4
+sp|O81025|P2A03_ARATH Putative protein PHLOEM PROT ( 463)  134 33.8     5.4
+sp|P20226|TBP_HUMAN TATA-box-binding protein OS=Ho ( 339)  132 33.4     5.4
+sp|Q4WG58|PAN1_ASPFU Actin cytoskeleton-regulatory (1467)  141 35.5     5.5
+sp|B0YC95|PAN1_ASPFC Actin cytoskeleton-regulatory (1467)  141 35.5     5.5
+sp|Q00969|ATF2_RAT Cyclic AMP-dependent transcript ( 487)  134 33.9     5.6
+sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Ho ( 591)  135 34.1     5.7
+sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 (2161)  143 35.9     5.8
+sp|P0C5H8|KAPC_EMENI Putative transcription factor ( 278)  130 33.0     5.9
+sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5- ( 454)  133 33.7       6
+sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide excha (1021)  138 34.8       6
+sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modul (1034)  138 34.8     6.1
+sp|O60308|K0562_HUMAN Uncharacterized protein KIAA ( 925)  137 34.6     6.3
+sp|A2Z0Q0|HOX25_ORYSI Homeobox-leucine zipper prot ( 260)  129 32.8     6.4
+sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GY (1299)  139 35.1     6.4
+sp|Q4WA21|KAPC_ASPFU Putative transcription factor ( 280)  129 32.8     6.7
+sp|Q9QXL1|KI21B_MOUSE Kinesin-like protein KIF21B  (1668)  140 35.3     6.9
+sp|P21127|CD11B_HUMAN Cell division protein kinase ( 795)  135 34.2     7.2
+sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Ga ( 359)  130 33.0     7.2
+sp|Q6A000|K0753_MOUSE Uncharacterized protein KIAA ( 959)  136 34.4     7.3
+sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Av ( 369)  130 33.1     7.4
+sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 O ( 601)  133 33.8     7.4
+sp|P23050|FOS_AVINK p55-v-Fos-transforming protein ( 322)  129 32.8     7.5
+sp|Q80YR5|SAFB2_MOUSE Scaffold attachment factor B ( 991)  136 34.5     7.5
+sp|Q6ZSZ5|ARHGI_HUMAN Rho guanine nucleotide excha (1173)  137 34.7     7.5
+sp|O70191|ATF5_MOUSE Cyclic AMP-dependent transcri ( 283)  128 32.6     7.7
+sp|A6NC98|CC88B_HUMAN Coiled-coil domain-containin (1476)  138 34.9     7.9
+sp|B0WYY2|MOEH_CULQU Moesin/ezrin/radixin homolog  ( 572)  132 33.6       8
+sp|P11939|FOS_CHICK Proto-oncogene c-Fos OS=Gallus ( 367)  129 32.9     8.3
+sp|Q9XUS2|MED29_CAEEL Mediator of RNA polymerase I ( 441)  130 33.1     8.4
+sp|A1D9Z7|KAPC_NEOFI Putative transcription factor ( 280)  127 32.4     8.6
+sp|P29176|FOSX_MSVFR Transforming protein v-Fos/v- ( 244)  126 32.2     8.7
+sp|Q09458|YQ37_CAEEL Uncharacterized protein C09F5 ( 395)  129 32.9     8.7
+sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a  ( 349)  128 32.7       9
+sp|Q5R452|SAFB1_PONAB Scaffold attachment factor B ( 914)  134 34.1       9
+sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding prote ( 256)  126 32.2       9
+sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mu ( 802)  133 33.9     9.2
+sp|P54843|MAF_MOUSE Transcription factor Maf OS=Mu ( 370)  128 32.7     9.4
+sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding prote ( 269)  126 32.2     9.4
+sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 O ( 601)  131 33.4     9.4
+sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper ( 372)  128 32.7     9.4
+sp|Q5AXH3|TOF1_EMENI Topoisomerase 1-associated fa (1167)  135 34.3     9.6
+sp|Q498L2|SLTM_XENLA SAFB-like transcription modul ( 998)  134 34.1     9.6
+sp|P0CB49|YLPM1_RAT YLP motif-containing protein 1 (1376)  136 34.6     9.6
+sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS= ( 330)  127 32.5     9.7
+sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6- ( 650)  131 33.4      10
+
+>>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS  (345 aa)
+ initn: 2265 init1: 2265 opt: 2265  Z-score: 2132.8  bits: 403.1 E(516081): 2.8e-111
+Smith-Waterman score: 2265; 100.0% identity (100.0% similar) in 345 aa overlap (1-345:1-345)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+               10        20        30        40        50        60
+
+               70        80        90       100       110       120
+sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+               70        80        90       100       110       120
+
+              130       140       150       160       170       180
+sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD
+              130       140       150       160       170       180
+
+              190       200       210       220       230       240
+sp|Q1X ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK
+              190       200       210       220       230       240
+
+              250       260       270       280       290       300
+sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS
+              250       260       270       280       290       300
+
+              310       320       330       340     
+sp|Q1X EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+       :::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+              310       320       330       340     
+
+>>sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS  (350 aa)
+ initn: 1623 init1: 1623 opt: 1740  Z-score: 1640.9  bits: 312.1 E(516081): 7e-84
+Smith-Waterman score: 1740; 78.9% identity (94.3% similar) in 332 aa overlap (13-344:18-348)
+
+                    10        20        30        40        50     
+sp|Q1X      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKK
+                        .:::.::. ::::::::::::::.. .: .: .::::::::::
+sp|Q8T MKSADRFSPVKMEDAFANSLPTTPSLEVPVLTVSPADTSLQTKNVVAQ-TKPEEKKPAKK
+               10        20        30        40         50         
+
+          60        70        80        90       100       110     
+sp|Q1X RKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+       :::::::::::::::::::::::::::::::::::::::::::::::::::::::::.::
+sp|Q8T RKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLESEK
+      60        70        80        90       100       110         
+
+         120       130       140       150       160       170     
+sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLF
+       :.::::::::::::.::::::::::::.:::.::::::: .::  .:::..:::::::::
+sp|Q8T IDMEQQNQFLLQRLAQMEAENNRLSQQVAQLSAEVRGSRHSTPTSSSPASVSPTLTPTLF
+     120       130       140       150       160       170         
+
+         180       190       200       210       220       230     
+sp|Q1X KQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL
+       ::: ::.::.::::::::..:::::::::.:::: :..:::::::.::::: ::: ::::
+sp|Q8T KQEGDEVPLDRIPFPTPSVTDYSPTLKPSSLAESPDLTQHPAVSVGGLEGDESALTLFDL
+     180       190       200       210       220       230         
+
+         240       250       260       270       280       290     
+sp|Q1X GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSM
+       :...::. : :..:::::::: :::.::::.: :::..:::.:::::..:::::::::::
+sp|Q8T GASIKHEPTHDLTAPLSDDDFRRLFNGDSSLESDSSLLEDGFAFDVLDSGDLSAFPFDSM
+     240       250       260       270       280       290         
+
+         300       310       320       330       340      
+sp|Q1X VNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 
+       :.::.:::::: .:...:: : ..::..:.::. ::::.::::::::::  
+sp|Q8T VDFDTEPVTLEDLEQTNGLSDSASCKAASLQPSHGASTSRCDGQGIAAGSA
+     300       310       320       330       340       350
+
+>>sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS  (451 aa)
+ initn: 467 init1: 378 opt: 414  Z-score: 397.4  bits: 82.4 E(516081): 1.3e-14
+Smith-Waterman score: 446; 31.1% identity (51.8% similar) in 421 aa overlap (7-344:43-450)
+
+                                       10        20        30      
+sp|Q1X                         MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN
+                                     . : . ::. :   :.. :.  :    . .
+sp|Q8T EASPAESFLSAPGDNFTSLFADSTPSTLNPRDMMTPDSV-ADIDSRLSVIPESQDAEDDE
+             20        30        40        50         60        70 
+
+         40        50        60        70        80        90      
+sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA
+       : ....   .  ::::.:::::::: :: :::::::::::::::::::::.::::::: :
+sp|Q8T SHSTSATAPSTSEKKPVKKRKSWGQVLPEPKTNLPPRKRAKTEDEKEQRRVERVLRNRRA
+              80        90       100       110       120       130 
+
+        100       110              120       130       140         
+sp|Q1X AQTSRERKRLEMEKLENEKIQME-------QQNQFLLQRLSQMEAENNRLS---------
+       ::.::::::::.: ::... ..:       . : .:...:....  .. ..         
+sp|Q8T AQSSRERKRLEVEALEKRNKELETLLINVQKTNLILVEELNRFRRSSGVVTRSSSPLDSL
+             140       150       160       170       180       190 
+
+              150       160                         170        180 
+sp|Q1X QQLAQLAAEVRGSRANTPMPG------------------SPATASPTLTPTLFKQ-ERDE
+       :.   :. .. ::: .  : .                  .::. ::.: :   :. .  :
+sp|Q8T QDSITLSQQLFGSRDGQTMSNPEQSLMDQIMRSAANPTVNPASLSPSLPPISDKEFQTKE
+             200       210       220       230       240       250 
+
+             190       200               210       220       230   
+sp|Q1X LPLERIPFPTPSLSDYSPTLKPSTLAE--------SSDVAQHPAVSVAGLEGDGSALPLF
+          :.        . .  : . ..  :        :.: .:.::::..:     .:.:.:
+sp|Q8T EDEEQADEDEEMEQTWHETKEAAAAKEKNSKQSRVSTDSTQRPAVSIGG----DAAVPVF
+             260       270       280       290       300           
+
+                  240                 250       260       270      
+sp|Q1X D-------LGSDLKHHSTDD----------VAAPLSDDDFNRLFHGDSSVEPDSSVFEDG
+       .       :: :  :.  ::          ..: :. : .  :....  . :..:. .: 
+sp|Q8T SDDAGANCLGLDPVHQ--DDGPFSIGHSFGLSAALDADRY--LLESQLLASPNASTVDD-
+       310       320         330       340         350       360   
+
+        280       290         300       310                        
+sp|Q1X LAFDVLEGGDLSAF--PFDSMVNFDSEPVTLEGIEMA---------------------HG
+          : : : . . :  :. :  .:: .    .  . :                     : 
+sp|Q8T ---DYLAGDSAACFTNPLPSDYDFDINDFLTDDANHAAYDIVAASNYAAADRELDLEIHD
+               370       380       390       400       410         
+
+           320       330       340     
+sp|Q1X LPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+         ..   . :  ::  :::.  ::  :::.: 
+sp|Q8T PENQIPSRHSIQQPQSGASSHGCDDGGIAVGV
+     420       430       440       450 
+
+>>sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS  (238 aa)
+ initn: 251 init1: 221 opt: 257  Z-score: 254.0  bits: 54.9 E(516081): 1.3e-06
+Smith-Waterman score: 257; 32.9% identity (60.3% similar) in 219 aa overlap (63-270:16-216)
+
+             40        50        60           70        80         
+sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP---KTNLPPRKRAKTEDEKEQRRIER
+                                     : .:   :..:::::::::..:::::::::
+sp|P41                MEMTDFELTSNSQSNLAIPTNFKSTLPPRKRAKTKEEKEQRRIER
+                              10        20        30        40     
+
+      90       100       110       120        130        140       
+sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ-NQFLLQRLSQME-AENNRLSQQLAQLA
+       .:::: ::. :::.:::... :: .   .:.  :.  :..:.. : : .   .  .:.: 
+sp|P41 ILRNRRAAHQSREKKRLHLQYLERKCSLLENLLNSVNLEKLADHEDALTCSHDAFVASLD
+          50        60        70        80        90       100     
+
+         150        160       170       180       190       200    
+sp|Q1X A--EVRGSR-ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS
+          . ...: :.    .:  ..: :.::.         ::.    :.        ::.:.
+sp|P41 EYRDFQSTRGASLDTRASSHSSSDTFTPS---------PLNCTMEPA--------TLSPK
+         110       120       130                140                
+
+           210       220         230       240       250       260 
+sp|Q1X TLAES-SDVAQHPAVSVAGLEG--DGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFH
+       .. .: ::      ...   :.  ....::  : ...:    .. .: :: ::  .  . 
+sp|P41 SMRDSASDQETSWELQMFKTENVPESTTLPAVD-NNNLFDAVASPLADPLCDDIAGNSLP
+      150       160       170       180        190       200       
+
+             270       280       290       300       310       320 
+sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK
+        :.:.. :.                                                   
+sp|P41 FDNSIDLDNWRNPEAQSGLNSFELNDFFITS                             
+       210       220       230                                     
+
+>>sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabid  (168 aa)
+ initn: 217 init1: 217 opt: 225  Z-score: 226.1  bits: 49.2 E(516081): 4.5e-05
+Smith-Waterman score: 225; 31.8% identity (62.4% similar) in 170 aa overlap (6-167:3-167)
+
+               10             20        30           40        50  
+sp|Q1X MSCDMEKTMSSV--DSLPATP---ASEVPVLTVSP---ADTSLNSADVKTQEVKPEEKKP
+            :.. ::.  .:::..    .: .: : ..    .:  .  .     :.  .: . 
+sp|O24    MQEQATSSLAASSLPSSSERSSSSAPHLEIKEGIESDEEIRRVPEFGGEAVGKETSG
+                  10        20        30        40        50       
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+        .. .. :::     ..   :::..:  :::..:..:.::::..:: .::::.  . .::
+sp|O24 RESGSATGQERTQATVGESQRKRGRTPAEKENKRLKRLLRNRVSAQQARERKKAYLSELE
+        60        70        80        90       100       110       
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       :.  ..:..:. : .::: .. ::. : . : . ... ::. .     :: : ::     
+sp|O24 NRVKDLENKNSELEERLSTLQNENQMLRHILKNTTGNKRGGGG-----GSNADASL    
+       120       130       140       150       160                 
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+
+>>sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos ta  (261 aa)
+ initn: 188 init1: 137 opt: 200  Z-score: 200.1  bits: 45.1 E(516081): 0.0013
+Smith-Waterman score: 200; 29.9% identity (56.9% similar) in 204 aa overlap (16-206:10-196)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+                      ::. : .: .:. .:: :.   :      . :            :
+sp|Q3S       MVVVAPAQSPAAGAPKVLLLSGQPAATGGAPAGRALPVMVP------------G
+                     10        20        30        40              
+
+                 70           80        90       100       110     
+sp|Q1X QELPVPK--TNLPP--RKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+       :.   :.  ...::  ::: . :.   :.. ..: :.::.::::.:.::. .: .::.. 
+sp|Q3S QQGASPEGASGVPPQARKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQV
+             50        60        70        80        90       100  
+
+         120              130       140       150       160        
+sp|Q1X IQMEQQNQFLL-------QRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASP
+       ...:..:: ::       ..   . .::..: :.:. . : :   .:.:   :.  .:. 
+sp|Q3S VDLEEENQKLLLENQLLREKTHGLVVENQELRQRLG-MDALVTEEEAETKGNGAGLVAGS
+            110       120       130        140       150       160 
+
+      170       180       190        200       210       220       
+sp|Q1X TLTPTLFKQERDELPLERIPFPTPSLSDYSP-TLKPSTLAESSDVAQHPAVSVAGLEGDG
+       . . .:    : . ::...      :.. :: ::   ::                     
+sp|Q3S AESAAL----RLRAPLQQVQAQLSPLQNISPWTLMALTLQTLSLTSCWAFCSTWTQSCSS
+                 170       180       190       200       210       
+
+       230       240       250       260       270       280       
+sp|Q1X SALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDL
+                                                                   
+sp|Q3S DVLPQSLPAWSSSQKWTQKDPVPYRPPLLHPWGRHQPSWKPLMN                
+       220       230       240       250       260                 
+
+>>sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-bi  (519 aa)
+ initn: 134 init1: 134 opt: 203  Z-score: 198.9  bits: 45.8 E(516081): 0.0015
+Smith-Waterman score: 203; 32.7% identity (59.0% similar) in 156 aa overlap (4-152:210-360)
+
+                                          10         20        30  
+sp|Q1X                            MSCDMEKTMSSVDSL-PATPASEVPVLTVSP-A
+                                     : : ..: :    ::.:..   :: :.: :
+sp|A1L PHEVDQFLNLSPKGLECLQMPPTPPSSVGSDSEGSQSPVHPCAPASPTQTPAVLKVAPRA
+     180       190       200       210       220       230         
+
+              40        50             60        70        80      
+sp|Q1X DTSLNSADVKTQEVKPEEKKP-----AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRR
+        .::.:. . :   : . . :      .::   ..  ::: :.::  :     .::  ..
+sp|A1L PSSLSSSPLLTAPHKLQGSGPLLLTEEEKRTLIAEGYPVP-TKLPLSK----AEEKALKK
+     240       250       260       270        280           290    
+
+         90       100       110       120       130       140      
+sp|Q1X IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL
+       :.: ..:. .:: ::..:.  .. ::..     ..:. : ... ..:  :. : ::: .:
+sp|A1L IRRKIKNKISAQESRRKKKEYVDALEKKVETCSNENHELRRKVENLECTNKSLLQQLHSL
+          300       310       320       330       340       350    
+
+        150       160       170       180       190       200      
+sp|Q1X AAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL
+        : : :                                                      
+sp|A1L QAVVAGKVPRSCRVTGTQTSTCLMVVVLCFSLFLGSFYPGLSPCSSITKADLSREISIHD
+          360       370       380       390       400       410    
+
+>>sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper tra  (631 aa)
+ initn: 119 init1:  88 opt: 201  Z-score: 195.9  bits: 45.6 E(516081): 0.0022
+Smith-Waterman score: 201; 24.5% identity (55.4% similar) in 233 aa overlap (46-270:363-593)
+
+          20        30        40        50        60            70 
+sp|Q1X PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN----LP
+                                     : :: :  :::: . .  ::   :    : 
+sp|Q54 NSNNISTQINNLNNNINNQNNQLNGSNNGKKKEEDKSIKKRK-FISSTPVKGENGGTTLI
+            340       350       360       370        380       390 
+
+                80        90       100       110       120         
+sp|Q1X PRKRA--KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL
+       :   .  . ..:..:.: .:...:: :::  :.:..  .. ::..  ..   :. .  :.
+sp|Q54 PTTDGGFNMDEERHQKRQRRLVKNREAAQLFRQRQKAYIQDLEKKVSDLTGTNSEFRARV
+             400       410       420       430       440       450 
+
+     130       140       150        160       170       180        
+sp|Q1X SQMEAENNRLSQQLAQLAAEVRGSRA-NTPMPGSPATASPTLTPTLFKQERDELPLERIP
+         ...::. . .::  :   :  . . . :  :: .: ::. .   : .     :    :
+sp|Q54 ELLNSENKLIREQLLYLRNFVTQAVSFSFPKGGSNGTNSPSGVADQFLNSILP-PGLNSP
+             460       470       480       490       500        510
+
+      190       200       210       220       230       240        
+sp|Q1X FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVA
+       .:   :       .:  ..  ...:.. ..   ...:.  . :. .  :.:  .: ..  
+sp|Q54 LPQGILPAGMNLQNPMIMSAIAEAASKNSTFRQNIQGNLLGTPIPSPQSSLTSNSGNNSP
+              520       530       540       550       560       570
+
+       250       260       270       280       290       300       
+sp|Q1X A-PLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG
+         ::.... :  ...... .:.:                                     
+sp|Q54 NKPLNNNNNNNNINNNNNNNPSSPNNNLNNNNNISPNSSTSHQVPYLPQNTPPQQSTPNQ
+              580       590       600       610       620       630
+
+>>sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanu  (158 aa)
+ initn: 183 init1: 183 opt: 191  Z-score: 194.6  bits: 43.3 E(516081): 0.0026
+Smith-Waterman score: 191; 36.8% identity (67.4% similar) in 95 aa overlap (60-154:66-157)
+
+      30        40        50        60        70        80         
+sp|Q1X PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER
+                                     ::  :   :.   :::...  .::..:..:
+sp|Q9S SDDEIRRVPEMGGEATGTTSASGRDGVSAAGQAQPSAGTQ---RKRGRSPADKENKRLKR
+          40        50        60        70           80        90  
+
+      90       100       110       120       130       140         
+sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE
+       .::::..:: .::::.  .  :: .  ..: .:  : .::: .. ::. : . : . .: 
+sp|Q9S LLRNRVSAQQARERKKAYLIDLEARVKELETKNAELEERLSTLQNENQMLRHILKNTTAG
+            100       110       120       130       140       150  
+
+     150       160       170       180       190       200         
+sp|Q1X VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES
+       .. .:                                                       
+sp|Q9S AQEGRK                                                      
+                                                                   
+
+>>sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-bind  (520 aa)
+ initn: 133 init1: 133 opt: 191  Z-score: 187.6  bits: 43.8 E(516081): 0.0062
+Smith-Waterman score: 191; 25.3% identity (51.7% similar) in 300 aa overlap (4-290:214-499)
+
+                                          10        20        30   
+sp|Q1X                            MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT
+                                     : . ..:  .  :..:.  .   ... . .
+sp|Q66 AEPPEMSQFLKVTQEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS
+           190       200       210       220       230       240   
+
+            40         50        60        70        80        90  
+sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+        : .:  : : .. :      .::   ..  :.: :.::  :     .::  .:..: ..
+sp|Q66 PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK
+           250       260       270        280           290        
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :. .:: ::..:.  .: ::..   . ..:. : ...  .:. :  : ::: .: . :  
+sp|Q66 NKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKLQTLVT-
+      300       310       320       330       340       350        
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+       :. . :.     .:. : :  .       : :  .    :..:. : :.: . .: .:  
+sp|Q66 SKISRPYK---MAATQTGTCLMVAALCFVLVLGSLAPCLPAFSSGSKTVKEDPVAADSVY
+       360          370       380       390       400       410    
+
+              220             230           240       250       260
+sp|Q1X A--QHPAVSV------AGLEGDGSALPLFDL----GSDLKHHSTDDVAAPLSDDDFNRLF
+       :  : :. :.      ::   ::    :. .    : .::  .    : :  .: . :  
+sp|Q66 AASQMPSRSLLFYDDGAGSWEDGHRGALLPVEPPEGWELKPGGP---AEPRPQDHL-RHD
+          420       430       440       450          460        470
+
+              270       280       290       300       310       320
+sp|Q1X HGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTC
+       :.:: ..  .. ...    :. ..:    :                              
+sp|Q66 HADS-IHETTKYLRETWPEDTEDNGASPNFSHPKEWFHDRDLGPNTTIKLS         
+               480       490       500       510       520         
+
+>>sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-bi  (519 aa)
+ initn: 133 init1: 133 opt: 189  Z-score: 185.8  bits: 43.4 E(516081): 0.0079
+Smith-Waterman score: 189; 26.7% identity (53.8% similar) in 240 aa overlap (4-232:215-445)
+
+                                          10        20        30   
+sp|Q1X                            MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT
+                                     : . ..:  .  :..:.  .   ... . .
+sp|Q9Z AEPPEMSQFLKVTPEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS
+          190       200       210       220       230       240    
+
+            40         50        60        70        80        90  
+sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+        : .:  : : .. :      .::   ..  :.: :.::  :     .::  .:..: ..
+sp|Q9Z PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK
+          250       260       270        280           290         
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :. .:: ::..:.  .: ::..   . ..:. : ...  .:. :  : ::: .: . :  
+sp|Q9Z NKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKLQTLVT-
+     300       310       320       330       340       350         
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+       :. . :.     .:. : :  .       : :  .    :..:. : :.: . .: .:  
+sp|Q9Z SKISRPY---KMAATQTGTCLMVAALCFVLVLGSLVPCLPAFSSGSMTVKEDPIAADSVY
+      360          370       380       390       400       410     
+
+              220               230       240       250       260  
+sp|Q1X A--QHPAVSV------AGL--EGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG
+       :  : :. :.      ::   .: :. ::.                              
+sp|Q9Z AASQMPSRSLLFYDDGAGSWEDGRGALLPVEPPEGWELKPGGPAEQRPQDHLRHDRADSI
+         420       430       440       450       460       470     
+
+>>sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-bi  (519 aa)
+ initn: 132 init1: 132 opt: 187  Z-score: 183.9  bits: 43.1 E(516081): 0.01
+Smith-Waterman score: 187; 26.2% identity (53.3% similar) in 240 aa overlap (4-232:215-445)
+
+                                          10        20        30   
+sp|Q1X                            MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT
+                                     : . ..:  .  :..:.  .   ... . .
+sp|Q96 AEPLEVNQFLKVTPEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS
+          190       200       210       220       230       240    
+
+            40         50        60        70        80        90  
+sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+        : .:  : : .. :      .::   ..  :.: :.::  :     .::  .:..: ..
+sp|Q96 PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK
+          250       260       270        280           290         
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :. .:: ::..:.  .: ::..   . ..:. : ...  .:  :  : ::: .: . :  
+sp|Q96 NKISAQESRRKKKEYVECLEKKVETFTSENNELWKKVETLENANRTLLQQLQKLQTLVT-
+     300       310       320       330       340       350         
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS--
+       .. . :.     .:. : :  .       : :  .    : .:. : :.: . :: ..  
+sp|Q96 NKISRPY---KMAATQTGTCLMVAALCFVLVLGSLVPCLPEFSSGSQTVKEDPLAADGVY
+      360          370       380       390       400       410     
+
+              220               230       240       250       260  
+sp|Q1X DVAQHPAVSV------AGLEGDGSA--LPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG
+        ..: :. :.      :::  :: .  ::.                              
+sp|Q96 TASQMPSRSLLFYDDGAGLWEDGRSTLLPMEPPDGWEINPGGPAEQRPRDHLQHDHLDST
+         420       430       440       450       460       470     
+
+>>sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=P  (1234 aa)
+ initn: 113 init1:  84 opt: 200  Z-score: 191.0  bits: 45.6 E(516081): 0.004
+Smith-Waterman score: 201; 26.6% identity (54.6% similar) in 304 aa overlap (41-332:727-1001)
+
+               20        30        40        50        60        70
+sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL
+                                     . .:.: .:..  :: ..  ..    : .:
+sp|A3L ELKQKQEALKADQRRRKEEAKLKREEEKKKRIEELKRKEEEHKKKVEAQQKKEEEAK-KL
+        700       710       720       730       740       750      
+
+               80        90       100       110       120       130
+sp|Q1X PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS
+         ... :.:.:..... :.  ..    :  .::.::..:  :::... :::.      :.
+sp|A3L KEERKKKAEEERKKKEEEKRQKELLKKQKEEERERLKLEAEENERLEKEQQE------LQ
+         760       770       780       790       800               
+
+              140       150       160       170       180       190
+sp|Q1X QMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFP
+       ...  .:.:  . ::: ::.        . .:: . ::: .  :..:  .  :   .  :
+sp|A3L ELQESQNQLELESAQLPAEL-----AEEINASPDSFSPTKNH-LLEQLYQARP-SSVSGP
+     810       820            830       840        850        860  
+
+                 200       210           220       230       240   
+sp|Q1X T---PSLSDYSPTLKPSTLAESSDVAQ----HPAVSVAGLEGDGSALPLFDLGSDLKHHS
+       :   : .. ..:   : . : :: : .     ::.: : :.: ::  :  .  . . . :
+sp|A3L TTISPPIQ-FTPEAVPPVAAVSSVVPSVVPISPALSGAILNGTGS--P--NSRNAMLYGS
+            870        880       890       900           910       
+
+           250       260       270           280        290        
+sp|Q1X TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE----DGLAFDV-LEGGDLSAFPFDSMVNF
+       . ..  :      : :  . :.. : ::  .    .: ...  :   .:::  :. . .:
+sp|A3L SAQAQLP------NGLNSSTSNMSPWSSKSRLNSTSGASLQSNLFQPQLSASGFSPFNDF
+       920             930       940       950       960       970 
+
+      300       310       320       330       340                  
+sp|Q1X DSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC             
+        : :.:  ::    ..  ..   ...:.:  ::.                          
+sp|A3L -STPATSAGI---GSVNVNAPLASTAVEPLAGANNGGVWNPSTTSSRNNSIWSNTPNLNN
+              980          990      1000      1010      1020       
+
+sp|A3L ASIWGNTLPSLAGGAGAGASTPSAAHTLPNSAPLASDNELIQVAAYNTFQMLQNSNQLEF
+      1030      1040      1050      1060      1070      1080       
+
+>>sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-bi  (525 aa)
+ initn: 143 init1: 143 opt: 183  Z-score: 180.1  bits: 42.4 E(516081): 0.016
+Smith-Waterman score: 183; 31.0% identity (55.7% similar) in 158 aa overlap (4-152:218-368)
+
+                                          10        20             
+sp|Q1X                            MSCDMEKTMSSVDSLPATPASEVP------VLT
+                                     : :  .: . :::  :.: :       . .
+sp|A2V VDQFLNLCPKEVAPTEALQMPPTPPSSHGSDSEGGQSPTRSLP--PSSPVQSQAGGKMAA
+       190       200       210       220       230         240     
+
+        30           40        50        60        70        80    
+sp|Q1X VSPA---DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ
+        ::.   .. : .:  : :   :      .::   ..  :.: :.::  :     .::  
+sp|A2V RSPSALSNSPLLTAPHKLQGSGPLMLTEEEKRTLVAEGYPIP-TKLPLTK----AEEKAL
+         250       260       270       280        290           300
+
+           90       100       110       120       130       140    
+sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA
+       ..:.: ..:. .:: ::..:.  :..::..  .  ..:. : ...  .:. :  : ::: 
+sp|A2V KKIRRKIKNKISAQESRRKKKEYMDSLEKRVENSSSENSELRKKVEVLESTNRTLLQQLQ
+              310       320       330       340       350       360
+
+          150       160       170       180       190       200    
+sp|Q1X QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS
+       .: : : :                                                    
+sp|A2V RLQAMVTGKVTRSCKAAGTQTGTCLMMVVLCFAVIFGSFTQNLDMYSSSSKTIHEPSQYS
+              370       380       390       400       410       420
+
+>>sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-bi  (428 aa)
+ initn: 137 init1: 137 opt: 181  Z-score: 179.4  bits: 41.9 E(516081): 0.018
+Smith-Waterman score: 181; 26.9% identity (53.3% similar) in 182 aa overlap (24-200:160-330)
+
+                      10        20        30         40        50  
+sp|Q1X        MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD-VKTQEVKPEEKKP
+                                     ::   .:    :. :: . .. . :: .  
+sp|Q08 MSSVISIQLAEDWNSAPLLIPESCIVNDLPPVCKSTPLPIRLTPADLIAVDALYPELHLT
+     130       140       150       160       170       180         
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+        ....  .::  .  .:::  :     .:.  ....: .::. .:: ::.::.  .. ::
+sp|Q08 EEEKRLLSQEGVALPNNLPLTK----AEERILKKVRRKIRNKQSAQDSRRRKKEYIDGLE
+     190       200       210           220       230       240     
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       ..     .::: : ... ..: .:  :  :: .: . .. .  ..      : .:  .  
+sp|Q08 SRVAACSSQNQELHKKVVELEKHNISLITQLRKLQTLIKQTSNKA------AQTSTCVLI
+         250       260       270       280       290               
+
+            180          190        200       210       220        
+sp|Q1X TLFKQERDELPLERIPF---PTPSLSD-YSPTLKPSTLAESSDVAQHPAVSVAGLEGDGS
+        ::.     .:    ::   :. :  : : ::                            
+sp|Q08 LLFSLALLVFP-SYSPFRSRPSASQEDSYRPTGVISRNILNKGGFSEVADPQASDTLHRA
+     300       310        320       330       340       350        
+
+      230       240       250       260       270       280        
+sp|Q1X ALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLS
+                                                                   
+sp|Q08 QQREEGDPGRHVVPPANPNPEETEPVSNRARTTPEPDEQVLAEPEAAILGQKGEPPGSDN
+      360       370       380       390       400       410        
+
+>>sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-bi  (520 aa)
+ initn: 135 init1: 135 opt: 187  Z-score: 183.9  bits: 43.1 E(516081): 0.01
+Smith-Waterman score: 187; 23.9% identity (51.9% similar) in 297 aa overlap (14-297:228-517)
+
+                                10          20        30        40 
+sp|Q1X                  MSCDMEKTMSSVDSLPAT--PASEVPVLTVSPADTSLNSADVK
+                                     ::: :  :.  .:    . ... : .:  :
+sp|Q70 DHLHLPPTPPSSHGSDSEGSLSPNPRLHPFSLPQTHSPSRAAPRAPSALSSSPLLTAPHK
+       200       210       220       230       240       250       
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+        :   :      .::   ..  :.: :.::  :     .::  ..:.: ..:. .:: ::
+sp|Q70 LQGSGPLVLTEEEKRTLIAEGYPIP-TKLPLSKS----EEKALKKIRRKIKNKISAQESR
+       260       270       280        290           300       310  
+
+             110       120       130       140       150        160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMP
+       ..:.  :..::..  .   .:  : ...  .:  :  : ::: .: . : :. . :  . 
+sp|Q70 RKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLA
+            320       330       340       350       360       370  
+
+              170       180       190          200         210     
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---
+       :. . .   ..   :      .     :.:. .   : .     .: :  ...: ..   
+sp|Q70 GTQTGTCLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHSLQEPYTASVVRSRNLLIY
+            380       390       400       410       420       430  
+
+            220       230       240       250       260       270  
+sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV
+        .:     ..  :... :  .: ::.: . :  .    ..   :  .. ...:.: .  .
+sp|Q70 EEHSPPEESSSPGSAGELGGWDRGSSLLRVSGLESRPDVDLPHF--IISNETSLEKSVLL
+            440       450       460       470         480       490
+
+             280        290       300       310       320       330
+sp|Q1X -FEDGLAFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFG
+        ... :.   :::.. :..  .:  ::                                 
+sp|Q70 ELQQHLVSAKLEGNETLKVVELDRRVNTTF                              
+              500       510       520                              
+
+>>sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-bi  (520 aa)
+ initn: 135 init1: 135 opt: 185  Z-score: 182.0  bits: 42.7 E(516081): 0.013
+Smith-Waterman score: 185; 23.9% identity (51.5% similar) in 297 aa overlap (14-297:228-517)
+
+                                10          20        30        40 
+sp|Q1X                  MSCDMEKTMSSVDSLPAT--PASEVPVLTVSPADTSLNSADVK
+                                     ::: :  :.  .:    . ... : .:  :
+sp|Q5R DHLHLPPTPPSSHGSDSEGSLSPNPRLHPFSLPQTHSPSRAAPRAPSALSSSPLLTAPHK
+       200       210       220       230       240       250       
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+        :   :      .::   ..  :.: :.::  :     .::  ..:.: ..:. .:: ::
+sp|Q5R LQGSGPLVLTEEEKRTLIAEGYPIP-TKLPLTKS----EEKALKKIRRKIKNKISAQESR
+       260       270       280        290           300       310  
+
+             110       120       130       140       150        160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMP
+       ..:.  :..::..  .   .:  : ...  .:  :  : ::: .: . : :. . :  . 
+sp|Q5R RKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLA
+            320       330       340       350       360       370  
+
+              170       180       190          200         210     
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---
+       :. . .   ..   :      .     :.:. .   : .     .: :  ...: ..   
+sp|Q5R GTQTGTCLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHSLQEPYTASVVRSRNLLIY
+            380       390       400       410       420       430  
+
+            220       230       240       250       260       270  
+sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV
+        .:      .  :... :  .: ::.: . :  .    ..   :  .. ...:.: .  .
+sp|Q5R EEHSPPEEPSSPGSAGELGGWDRGSSLLRVSGLESRPDVDLPHF--IISNETSLEKSVLL
+            440       450       460       470         480       490
+
+             280        290       300       310       320       330
+sp|Q1X -FEDGLAFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFG
+        ... :.   :::.. :..  .:  ::                                 
+sp|Q5R ELQQHLVSAKLEGNETLKVVELDRRVNTTF                              
+              500       510       520                              
+
+>>sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-bi  (521 aa)
+ initn: 135 init1: 135 opt: 200  Z-score: 196.1  bits: 45.3 E(516081): 0.0021
+Smith-Waterman score: 200; 24.1% identity (52.9% similar) in 291 aa overlap (18-297:234-518)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     .::  .:    . . . : .:  : :   :
+sp|Q8B PTPPSSHSSDSEGSLSPNPRLHPFSLSQAHSPARAMPRGPSALSTSPLLTAPHKLQGSGP
+           210       220       230       240       250       260   
+
+        50        60        70        80        90       100       
+sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE
+             .::   ..  :.: :.::  :     .::  ..:.: ..:. .:: ::..:.  
+sp|Q8B LVLTEEEKRTLVAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEY
+           270       280            290       300       310        
+
+       110       120       130       140       150        160      
+sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMPGSPATA
+       :..::..  .   .:  : ...  .:  :  : ::: .: . : :. . :  . :. . .
+sp|Q8B MDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLAGTQTGT
+      320       330       340       350       360       370        
+
+        170       180       190          200         210           
+sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---AQHPAV
+          ..   :      .     :.:. .   : .  :  .: :  ...: ..    .:  .
+sp|Q8B CLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHPLSEPYTASVVRSRNLLIYEEHAPL
+      380       390       400       410       420       430        
+
+      220       230       240       250       260       270        
+sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV-FEDGL
+         ..  .... :  .: ::.: . :.   : :  :   . :. ...:.: .  . ... :
+sp|Q8B EESSSPASAGELGGWDRGSSLLRASSGLEALPEVDLP-HFLISNETSLEKSVLLELQQHL
+      440       450       460       470        480       490       
+
+       280        290       300       310       320       330      
+sp|Q1X AFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRC
+       . . :::.. :..  ..  ::                                       
+sp|Q8B VSSKLEGNETLKVVELERRVNATF                                    
+       500       510       520                                     
+
+>>sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo s  (261 aa)
+ initn: 188 init1: 137 opt: 201  Z-score: 201.0  bits: 45.2 E(516081): 0.0011
+Smith-Waterman score: 201; 28.5% identity (58.6% similar) in 186 aa overlap (16-187:10-186)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+                      ::  . .: .:. .::...   :      . : ..  . .  : :
+sp|P17       MVVVAAAPNPADGTPKVLLLSGQPASAAGAPAGQALPLMVPAQRGASPEAASGG
+                     10        20        30        40        50    
+
+               70         80        90       100       110         
+sp|Q1X QELPVPKTNLPPRKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME
+           .:..    ::: . :.   :.. ..: :.::.::::.:.::. .: .::.. ...:
+sp|P17 ----LPQA----RKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLE
+                   60        70        80        90       100      
+
+     120              130       140             150       160      
+sp|Q1X QQNQFLL-------QRLSQMEAENNRLSQQL------AQLAAEVRGSRANTPMPGSPATA
+       ..:: ::       ..   . .::..: :.:      :.  ::..:...  :. ::  .:
+sp|P17 EENQKLLLENQLLREKTHGLVVENQELRQRLGMDALVAEEEAEAKGNEVR-PVAGSAESA
+        110       120       130       140       150        160     
+
+        170       180       190       200       210       220      
+sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD
+       .  :   : . . .  ::. :                                       
+sp|P17 ALRLRAPLQQVQAQLSPLQNISPWILAVLTLQIQSLISCWAFWTTWTQSCSSNALPQSLP
+         170       180       190       200       210       220     
+
+>>sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=F  (338 aa)
+ initn:  80 init1:  80 opt: 175  Z-score: 175.2  bits: 40.8 E(516081): 0.031
+Smith-Waterman score: 175; 25.7% identity (50.9% similar) in 222 aa overlap (9-222:76-290)
+
+                                     10         20        30       
+sp|Q1X                       MSCDMEKTMSSVDSLPATP-ASEVPVLTVSPAD---TS
+                                     .::. .  . : ::. :.  :.: :   ::
+sp|P13 GLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPA--VDPYDMPGTS
+          50        60        70        80        90         100   
+
+           40        50          60        70          80        90
+sp|Q1X LNSADVKTQEVKPEEKK--PAKKRKSWGQELPVPKTNLP--PRKRAKTEDEKEQRRIERV
+        ..  ...  .     .  :. .  . :     :    :  ::... : .:.:.::..: 
+sp|P13 YSTPGLSAYSTGGASGSGGPSTSTTTSGPVSARPARARPRRPREETLTPEEEEKRRVRRE
+           110       120       130       140       150       160   
+
+              100       110       120       130       140       150
+sp|Q1X LRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV
+        ::. ::   :.:.:   ..:. :  :.:...  : ....... :..::   :.      
+sp|P13 -RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGC
+            170       180       190       200       210       220  
+
+              160       170       180       190       200       210
+sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+       .    . : ::  : .     :   . ..: .     : : : :   :    : .:. : 
+sp|P13 KIPYEEGPGPGPLAEVRDL--PGSTSAKEDGFGWLLPPPPPPPLPFQSSRDAPPNLTAS-
+            230       240         250       260       270          
+
+              220       230       240       250       260       270
+sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS
+        .  :  :.: :                                                
+sp|P13 -LFTHSEVQVLGDPFPVVSPSYTSSFVLTCPEVSAFAGAQRTSGSEQPSDPLNSPSLLAL
+      280       290       300       310       320       330        
+
+>>sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=A  (149 aa)
+ initn: 148 init1: 148 opt: 165  Z-score: 170.6  bits: 38.8 E(516081): 0.056
+Smith-Waterman score: 165; 35.2% identity (76.1% similar) in 71 aa overlap (73-143:68-138)
+
+             50        60        70        80        90       100  
+sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE
+                                     :.:...  .:: : ..:.::::..:: .::
+sp|Q8W GSTCVLSSSADDGVNNPELDQTQNGVSTAKRRRGRNPVDKEYRSLKRLLRNRVSAQQARE
+        40        50        60        70        80        90       
+
+            110       120       130       140       150       160  
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS
+       ::.. .  ::..  .....:. : ...: .  ::. : ..:                   
+sp|Q8W RKKVYVSDLESRANELQNNNDQLEEKISTLTNENTMLRKMLINTRPKTDDNH        
+       100       110       120       130       140                 
+
+            170       180       190       200       210       220  
+sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG
+
+>>sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=F  (338 aa)
+ initn:  80 init1:  80 opt: 169  Z-score: 169.5  bits: 39.8 E(516081): 0.064
+Smith-Waterman score: 169; 25.7% identity (49.5% similar) in 222 aa overlap (9-222:76-290)
+
+                                     10         20        30       
+sp|Q1X                       MSCDMEKTMSSVDSLPATP-ASEVPVLTVSPAD---TS
+                                     .::. .  . : ::. ::  :.: :   ::
+sp|P53 GLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPV--VDPYDMPGTS
+          50        60        70        80        90         100   
+
+           40        50          60        70          80        90
+sp|Q1X LNSADVKTQEVKPEEKK--PAKKRKSWGQELPVPKTNLP--PRKRAKTEDEKEQRRIERV
+        ..  ..         .  :. .  . :     :    :  ::... : .:.:.::..: 
+sp|P53 YSTPGMSGYSSGGASGSGGPSTSGTTSGPGPARPARARPRRPREETLTPEEEEKRRVRRE
+           110       120       130       140       150       160   
+
+              100       110       120       130       140       150
+sp|Q1X LRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV
+        ::. ::   :.:.:   ..:. :  :.:...  : ....... :..::   :.      
+sp|P53 -RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGC
+            170       180       190       200       210       220  
+
+              160       170       180       190       200       210
+sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+       .    . : ::  : .     :     ..: .     : : : :   .    : .:. : 
+sp|P53 KIPYEEGPGPGPLAEVRDL--PGSAPAKEDGFSWLLPPPPPPPLPFQTSQDAPPNLTAS-
+            230       240         250       260       270          
+
+              220       230       240       250       260       270
+sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS
+        .  :  :.: :                                                
+sp|P53 -LFTHSEVQVLGDPFPVVNPSYTSSFVLTCPEVSAFAGAQRTSGSDQPSDPLNSPSLLAL
+      280       290       300       310       320       330        
+
+>>sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-bind  (521 aa)
+ initn: 135 init1: 135 opt: 182  Z-score: 179.2  bits: 42.2 E(516081): 0.018
+Smith-Waterman score: 182; 23.4% identity (52.6% similar) in 291 aa overlap (18-297:234-518)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     .:.  .:    . . . : .:  : :   :
+sp|Q6Q PTPPSSHSSDSEGSLSPNPRLHPFSLSQAHSPGRAMPRGPSALSTSPLLTAPHKLQGSGP
+           210       220       230       240       250       260   
+
+        50        60        70        80        90       100       
+sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE
+             .::   ..  :.: :.::  :     .::  ..:.: ..:. .:: ::..:.  
+sp|Q6Q LVLTEEEKRTLIAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEY
+           270       280            290       300       310        
+
+       110       120       130       140       150        160      
+sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMPGSPATA
+       :..::..  .   .:  : ...  .:  :  : ::: .: . : :. . :  . :. . .
+sp|Q6Q MDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLAGTQTGT
+      320       330       340       350       360       370        
+
+        170       180       190          200         210           
+sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---AQHPAV
+          ..   :      :      .:. .   : .  :  .: :  ...: ..    .: ..
+sp|Q6Q CLMVVVLCFAVAFGSLFQGYGLYPSATKMALPSQHPLSEPYTASVVRSRNLLIYEEHSSL
+      380       390       400       410       420       430        
+
+      220       230       240       250       260       270        
+sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV-FEDGL
+         ..  .... :  .: ::.: . :.   : :  :   . ..  ..:.: .  . ... :
+sp|Q6Q EESSSPASAGELGGWDRGSSLLRASSGLEALPEVDLP-HFIISKETSLEKSVLLELQQHL
+      440       450       460       470        480       490       
+
+       280        290       300       310       320       330      
+sp|Q1X AFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRC
+       . . :::.. :..  ..  ::                                       
+sp|Q6Q VSSKLEGNETLKVVELERRVNATF                                    
+       500       510       520                                     
+
+>>sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-bi  (456 aa)
+ initn: 171 init1: 141 opt: 188  Z-score: 185.6  bits: 43.2 E(516081): 0.0081
+Smith-Waterman score: 188; 26.2% identity (53.3% similar) in 240 aa overlap (48-275:213-434)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK
+                                     .:::   :.   :  ::   :.::  :   
+sp|Q3S SSGDLQQHHLAAPHLLRPGTGHCQELVLTEDEKKLLAKE---GITLP---TQLPLTKY--
+            190       200       210       220             230      
+
+        80        90       100       110       120       130       
+sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN
+         .:.  ..:.: .::. .:: ::..:.  .. ::..      ::: : ... ..: .: 
+sp|Q3S --EERMLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNL
+            240       250       260       270       280       290  
+
+       140       150       160                170       180        
+sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGS---------PATASPTLTPTLFKQERDELPLERIP
+        : .:: .: : :  : ... . :.            . :...:  : ..: : : .  :
+sp|Q3S SLLEQLKKLQAIVVQSTSKSAQTGTCIAVLLFSFALIVLPSISP--FASNRAESPGDFAP
+            300       310       320       330         340       350
+
+         190       200       210       220       230       240     
+sp|Q1X ---FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD
+          :     .: .  . :.: : .:. :  :. ....:.  . . :     .. . ..: 
+sp|Q3S VRVFSRTLHNDAASRVAPDT-APGSE-APGPGPNTGALQERSPGSP----PGEWESQDTR
+              360       370         380       390           400    
+
+         250       260       270       280       290       300     
+sp|Q1X DVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTL
+        .     : : . : .:.:  : :.... :                              
+sp|Q3S ALDNSTEDLDNSTLVQGNSVKELDQATLLDCAPPEPAVSPGHVGLEAAGGEL        
+          410       420       430       440       450              
+
+>>sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris   (338 aa)
+ initn:  80 init1:  80 opt: 166  Z-score: 166.7  bits: 39.3 E(516081): 0.091
+Smith-Waterman score: 172; 28.8% identity (51.3% similar) in 191 aa overlap (72-237:145-332)
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+                                     ::... : .:.:.::..:  ::. ::   :
+sp|Q9T GGASGSGGPSTSGTTSGPGPARPARARLRRPREETLTPEEEEKRRVRRE-RNKLAAAKCR
+          120       130       140       150       160        170   
+
+             110       120       130       140       150       160 
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPG
+       .:.:   ..:. :  :.:...  : ....... :..::   :.      .    . : ::
+sp|Q9T NRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPG
+           180       190       200       210       220       230   
+
+                                170       180       190            
+sp|Q1X S-------PATAS------------PTLTPTLFKQERDELPLERIPFPTPS----LSDYS
+               :..::            :   :  :.  .:  :     . : :    :.:  
+sp|Q9T PLAEVRDLPGSASTKEDGFSWLLPPPPAPPLPFQTSQDAAPNLTASLFTHSEVQVLGDPF
+           240       250       260       270       280       290   
+
+      200       210       220         230       240       250      
+sp|Q1X PTLKPSTLAESSDVAQHPAVSV-AGLE-GDGSALPLFDLGSDLKHHSTDDVAAPLSDDDF
+       :...::    :: :   : ::. :: .  .::  :   :.:                   
+sp|Q9T PVVNPSY--TSSFVLTCPEVSAFAGTQRPSGSDQPTDPLNSPSLLAL             
+           300         310       320       330                     
+
+        260       270       280       290       300       310      
+sp|Q1X NRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPD
+
+>>sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcriptio  (349 aa)
+ initn: 123 init1:  91 opt: 165  Z-score: 165.6  bits: 39.1 E(516081): 0.11
+Smith-Waterman score: 165; 28.4% identity (61.5% similar) in 148 aa overlap (18-160:212-349)
+
+                            10        20        30          40     
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD--VKTQEV
+                                     ::...   . .:: .. :.: .   .:...
+sp|Q06 GSEVDISEGDRKPDSAAYITLIPPCVKEEDTPSDNDSGICMSP-ESYLGSPQHSPSTSRA
+             190       200       210       220        230       240
+
+           50        60        70          80        90       100  
+sp|Q1X KPEE-KKPAKKRKSWGQELPVPKTNLPP--RKRAKTEDEKEQRRIERVLRNRAAAQTSRE
+        :..  .:. .: :     : ::   ::     ::.. :: ....... .:..::   :.
+sp|Q06 PPDNLPSPGGSRGS-----PRPKPYDPPGVSLTAKVKTEKLDKKLKKMEQNKTAATRYRQ
+              250            260       270       280       290     
+
+            110       120       130       140       150       160  
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS
+       .:: :.: : .:  ..:..:. : .. ...  :     : : .:  ::: .:..  .:  
+sp|Q06 KKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEEVRKARGQKRVP  
+         300       310       320           330       340           
+
+            170       180       190       200       210       220  
+sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG
+
+>>sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-bind  (470 aa)
+ initn: 153 init1: 153 opt: 174  Z-score: 172.3  bits: 40.8 E(516081): 0.045
+Smith-Waterman score: 174; 26.7% identity (52.6% similar) in 247 aa overlap (48-284:214-438)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK
+                                     .:::   :.   :  ::   :.::  :   
+sp|Q5F GGGDLQQHPLAASQLLGPGSGHCQELVLTEDEKKLLAKE---GVTLP---TQLPLTKY--
+           190       200       210       220             230       
+
+        80        90       100       110       120       130       
+sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN
+         .:.  ..:.: .::. .:: ::..:.  .. :::.      ::: : ... ..: .: 
+sp|Q5F --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNL
+           240       250       260       270       280       290   
+
+       140       150       160                170       180        
+sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP
+        : .:: .: : :  : ..    :.  ..          :...:  :  .. . : . ::
+sp|Q5F SLLEQLKHLQALVVQSTSKPAHAGTCIAVLLLSFVLIILPSISP--FTANKVDSPGDFIP
+           300       310       320       330         340       350 
+
+      190       200        210       220       230       240       
+sp|Q1X FPTPSLSDYSPTLKPSTLAE-SSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDV
+            .  .: ::.  . .. . ::.  : :  .  .:....:   : :. :.    :: 
+sp|Q5F -----VRVFSRTLHNHAASRVAPDVTPGPEVP-GPHKGSSGGLSA-DWGNFLEIPMLDD-
+                  360       370        380       390        400    
+
+       250       260       270       280       290       300       
+sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG
+         :  . : . :  ..:. .   ... : .: . : :                       
+sp|Q5F --PTEELDNTTLVLANSTEDLGRATLLDWVASEPLLGQMGLEIPGEEIWLSWVPRWLRVR
+             410       420       430       440       450       460 
+
+       310       320       330       340     
+sp|Q1X IEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+                                             
+sp|Q5F VVQDALGVL                             
+             470                             
+
+>>sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Cotu  (311 aa)
+ initn: 102 init1: 102 opt: 161  Z-score: 162.5  bits: 38.4 E(516081): 0.16
+Smith-Waterman score: 161; 27.3% identity (62.6% similar) in 139 aa overlap (29-163:171-307)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS
+                                     .:. .: .: ...:.. .   .. .. : :
+sp|Q90 HHQYPAVTHEDLAGSGHPHHHHHHHHHASPTPSTSSSSSQQLQTSHQQHPPSSSVEDRFS
+              150       160       170       180       190       200
+
+       60        70        80           90       100       110     
+sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+         : . .   .:  . :. :.::    .:.:  :.:.::. ::. : ..  . ..:::::
+sp|Q90 DDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHHLENEK
+              210       220       230         240       250        
+
+         120       130       140        150       160       170    
+sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLTPTL
+        :. :: . : :.....  : .  . .  .::..  : . ...  :.::           
+sp|Q90 TQLIQQVEQLKQEVTRLARERDAYKLKCEKLASNGFREAGSTSDNPSSPEFFM       
+      260       270       280       290       300       310        
+
+          180       190       200       210       220       230    
+sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD
+
+>>sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gall  (311 aa)
+ initn: 102 init1: 102 opt: 161  Z-score: 162.5  bits: 38.4 E(516081): 0.16
+Smith-Waterman score: 161; 27.3% identity (62.6% similar) in 139 aa overlap (29-163:171-307)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS
+                                     .:. .: .: ...:.. .   .. .. : :
+sp|Q90 HHQYPAVTHEDLAGSGHPHHHHHHHHQASPTPSTSSSSSQQLQTSHQQHPPSSSVEDRFS
+              150       160       170       180       190       200
+
+       60        70        80           90       100       110     
+sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+         : . .   .:  . :. :.::    .:.:  :.:.::. ::. : ..  . ..:::::
+sp|Q90 DDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHHLENEK
+              210       220       230         240       250        
+
+         120       130       140        150       160       170    
+sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLTPTL
+        :. :: . : :.....  : .  . .  .::..  : . ...  :.::           
+sp|Q90 TQLIQQVEQLKQEVTRLARERDAYKLKCEKLASNGFREAGSTSDNPSSPEFFM       
+      260       270       280       290       300       310        
+
+          180       190       200       210       220       230    
+sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD
+
+>>sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa G  (380 aa)
+ initn: 100 init1:  68 opt: 166  Z-score: 166.1  bits: 39.3 E(516081):  0.1
+Smith-Waterman score: 166; 28.4% identity (52.4% similar) in 250 aa overlap (9-237:55-297)
+
+                                     10        20           30     
+sp|Q1X                       MSCDMEKTMSSVDSLPATPASEV-PVLT--VSPADTSL
+                                     .:::. .:.. :  . : :   :.:. .: 
+sp|O97 DSLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSVNFIPTVTAISISPDLQWLVQPTLVS-
+           30        40        50        60        70        80    
+
+          40            50        60        70            80       
+sp|Q1X NSADVKTQEVKP----EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTE----DEKEQRRI
+       . :  .:.  .:      .  : .: .  . .:  ...   : :.:.:    .:.:.:::
+sp|O97 SVAPSQTRAPHPYGVPTPSAGAYSRAGAVKTMPGGRAQSIGR-RGKVEQLSPEEEEKRRI
+            90       100       110       120        130       140  
+
+        90       100       110       120       130       140       
+sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA
+       .:  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::   
+sp|O97 RRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHR
+             150       160       170       180       190       200 
+
+       150       160       170          180          190       200 
+sp|Q1X AEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTL
+          .    .  .:   ..::  :.   :     : .:   :::   : : ::.    :. 
+sp|O97 PACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVE---PVK
+              210       220       230       240       250          
+
+                210       220       230        240       250       
+sp|Q1X KPSTL---AESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFN
+       : :..   ::  :    :: :  :    . ..: .:: ::                    
+sp|O97 KVSSMELKAEPFDDFLFPASSRPGGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMA
+       260       270       280       290       300       310       
+
+       260       270       280       290       300       310       
+sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE
+                                                                   
+sp|O97 TELEPLCTPVVTCTPSCTAYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTL
+       320       330       340       350       360       370       
+
+>>sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-bi  (479 aa)
+ initn: 196 init1: 147 opt: 170  Z-score: 168.4  bits: 40.1 E(516081): 0.073
+Smith-Waterman score: 177; 27.0% identity (54.1% similar) in 233 aa overlap (48-258:214-432)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK
+                                     .:::   :.   :  ::   :.::  :   
+sp|Q91 GSGDLQQHSLAASQLLGPGSGHCQELVLTEDEKKLLAKE---GVTLP---TQLPLTKY--
+           190       200       210       220             230       
+
+        80        90       100       110       120       130       
+sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN
+         .:.  ..:.: .::. .:: ::..:.  .. :::.      ::: : ... ..: .: 
+sp|Q91 --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNL
+           240       250       260       270       280       290   
+
+       140       150       160                170       180        
+sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP
+        : .:: .: : :  : ..    :.  ..          :...:  :.... . : . .:
+sp|Q91 SLLEQLKHLQALVVQSTSKPAHAGTCIAVLLLSFALIILPSISP--FNSNKVDSPGDFVP
+           300       310       320       330         340       350 
+
+             190       200       210          220        230       
+sp|Q1X -------FPTPSLSDYSPTLKPSTLAESS--DVAQ-HPAVSVAGLEGD-GSAL--PLFDL
+              . . . :  .: . :.. . .   ::.  : . : .:: .: :. :  :..: 
+sp|Q91 VRVFSRTLHNHAASRVAPDVTPGSEVPGPWPDVGTPHKGPSSGGLSADWGNFLEIPMLDN
+             360       370       380       390       400       410 
+
+         240       250       260       270       280       290     
+sp|Q1X GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSM
+        ..   .::  .:   : .:..:                                     
+sp|Q91 LTEELDNSTLVLAN--STEDLGRATLLDWVASEPLLSPGRVGLEIPGEMWLSWVPRWLRV
+             420         430       440       450       460         
+
+>>sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcriptio  (351 aa)
+ initn: 123 init1:  91 opt: 159  Z-score: 160.0  bits: 38.1 E(516081): 0.22
+Smith-Waterman score: 159; 31.6% identity (64.3% similar) in 98 aa overlap (66-160:258-351)
+
+          40        50        60        70           80        90  
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR---AKTEDEKEQRRIERVLR
+                                     ::   :: ..   ::.. :: ....... .
+sp|P18 YLGSPQHSPSTRGSPNRSLPSPGVLCGSARPKPYDPPGEKMVAAKVKGEKLDKKLKKMEQ
+       230       240       250       260       270       280       
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :..::   :..:: :.: : .:  ..:..:. : .: ...  :     : : .:  ::: 
+sp|P18 NKTAATRYRQKKRAEQEALTGECKELEKKNEALKERADSLAKEI----QYLKDLIEEVRK
+       290       300       310       320       330           340   
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+       .:..  .:                                                    
+sp|P18 ARGKKRVP                                                    
+           350                                                     
+
+>>sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricet  (381 aa)
+ initn:  87 init1:  55 opt: 159  Z-score: 159.5  bits: 38.1 E(516081): 0.23
+Smith-Waterman score: 159; 25.9% identity (49.0% similar) in 247 aa overlap (2-237:57-298)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|O88 LSYYHSPADSFSSMGSPVNAQDFCTDLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   : :  .    .    :  : :.   . . .   . .  . .:.:.:::.
+sp|O88 PSQTRAPHPYGVPTPSTGAYSRAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|O88 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .:    .::  ::   :     : .:   :::   : : :::   .   .
+sp|O88 ACKIPD-DLGFPEEMFVASLDLTGGLPEATTPESEEAFSLPLLNDPEPKPSLEPVKSISN
+             210       220       230       240       250       260 
+
+            210       220        230        240       250       260
+sp|Q1X PSTLAESSDVAQHPAVSV-AGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLF
+           ::  :    :: :  .: :  . ..: .:: ::                       
+sp|O88 VELKAEPFDDFLFPASSRPSGSETTARSVPDMDLSGSFYAADWEPLHSSSLGMGPMVTEL
+             270       280       290       300       310       320 
+
+              270       280       290       300       310       320
+sp|Q1X HGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTC
+                                                                   
+sp|O88 EPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL
+             330       340       350       360       370       380 
+
+>>sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus muscul  (380 aa)
+ initn:  94 init1:  62 opt: 158  Z-score: 158.6  bits: 37.9 E(516081): 0.26
+Smith-Waterman score: 158; 25.2% identity (48.8% similar) in 246 aa overlap (2-237:57-297)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|P01 LSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   . :: .    .    :  : :.   . . .   . .  . .:.:.:::.
+sp|P01 PSQTRAPHPYGLPTQSAGAYARAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|P01 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .:   ..::  ::   :     : .:   :::   : : :::   .   .
+sp|P01 ACKIPD-DLGFPEEMSVASLDLTGGLPEASTPESEEAFTLPLLNDPEPKPSLEPVKSISN
+             210       220       230       240       250       260 
+
+            210       220       230        240       250       260 
+sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH
+           ::  :    :: :  .    . ..:  :: ::                        
+sp|P01 VELKAEPFDDFLFPASSRPSGSETSRSVPDVDLSGSFYAADWEPLHSNSLGMGPMVTELE
+             270       280       290       300       310       320 
+
+             270       280       290       300       310       320 
+sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK
+                                                                   
+sp|P01 PLCTPVVTCTPGCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 
+             330       340       350       360       370       380 
+
+>>sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-bi  (461 aa)
+ initn: 140 init1: 140 opt: 163  Z-score: 162.1  bits: 38.9 E(516081): 0.16
+Smith-Waterman score: 163; 26.4% identity (52.7% similar) in 201 aa overlap (48-236:218-404)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK
+                                     .:::   :.   :  ::   :.::  :   
+sp|Q68 SSGDLQQHHLGASYLLRPGAGHCQELVLTEDEKKLLAKE---GITLP---TQLPLTKY--
+       190       200       210       220          230              
+
+        80        90       100       110       120       130       
+sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN
+         .:.  ..:.: .::. .:: ::..:.  .. ::..      ::: : ... ..: .: 
+sp|Q68 --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNL
+       240       250       260       270       280       290       
+
+       140       150       160                170       180        
+sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP
+        : .:: .: : :  : ... . :. ...          :...:  :  .. : : .  :
+sp|Q68 SLLEQLKKLQAIVVQSTSKSAQTGTCVAVLLLSFALIILPSISP--FGPNKTESPGDFAP
+       300       310       320       330       340         350     
+
+         190       200       210       220       230       240     
+sp|Q1X ---FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD
+          :     .: .  .  ...  :   . .: ....  :. ::  :  : :         
+sp|Q68 VRVFSRTLHNDAASRVAADAVPGSEAPGPRPEADTTREESPGS--PGADWGFQDTANLTN
+         360       370       380       390         400       410   
+
+         250       260       270       280       290       300     
+sp|Q1X DVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTL
+                                                                   
+sp|Q68 STEELDNATLVLRNATEGLGQVALLDWVAPGPSTGSGRAGLEAAGDEL            
+           420       430       440       450       460             
+
+>>sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-bi  (395 aa)
+ initn: 145 init1: 145 opt: 158  Z-score: 158.3  bits: 37.9 E(516081): 0.27
+Smith-Waterman score: 158; 29.3% identity (56.0% similar) in 150 aa overlap (54-199:192-329)
+
+            30        40        50        60         70        80  
+sp|Q1X PVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEK
+                                     ....  ::: . .: ..::  :     .:.
+sp|Q8T AHAHILPRAGTVAPVPCTTLLPCQTLFLTDEEKRLLGQEGVSLP-SHLPLTK----AEER
+             170       180       190       200        210          
+
+             90       100       110       120       130       140  
+sp|Q1X EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ
+         ....: .::. .:: ::.::.  .. ::..      ::: : ......: .:  :  :
+sp|Q8T VLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQ
+        220       230       240       250       260       270      
+
+            150       160       170       180          190         
+sp|Q1X LAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF---PTPSLSDYSP
+       : :: . .    :.:   .. : .:  .   ::.     ::    ::   :  .  ::.:
+sp|Q8T LRQLQTLI----AQTS--NKAAQTSTCVLILLFSLALIILP-SFSPFQSRPEAGSEDYQP
+        280             290       300       310        320         
+
+     200       210       220       230       240       250         
+sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL
+                                                                   
+sp|Q8T HGVTSRNILTHKDVTENLETQVVESRLREPPGAKDANGSTRTLLEKMGGKPRPSGRIRSV
+     330       340       350       360       370       380         
+
+>>sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS  (401 aa)
+ initn: 115 init1: 115 opt: 158  Z-score: 158.2  bits: 37.9 E(516081): 0.27
+Smith-Waterman score: 158; 28.6% identity (61.3% similar) in 119 aa overlap (80-198:195-312)
+
+      50        60        70        80        90       100         
+sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+                                     : .. .:..:.: :: .:. ::.::. .: 
+sp|Q99 QVKSTTSGSSRDHSDDDDELEGETETTRNGDPSDAKRVRRMLSNRESARRSRRRKQAHMT
+          170       180       190       200       210       220    
+
+     110       120       130       140       150       160         
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT
+       .::..  :.. .:. ::.::...  . :  . .   : :...  ::.. :    .     
+sp|Q99 ELETQVSQLRVENSSLLKRLTDISQRYNDAAVDNRVLKADIETMRAKVKMAEETVKRVTG
+          230       240       250       260       270       280    
+
+     170       180       190       200       210       220         
+sp|Q1X LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSA
+       :.: .:..  .:.    .   . : :: :                               
+sp|Q99 LNP-MFQSMSSEISTIGMQSFSGSPSDTSADTTQDGSKQHFYQPAPTSHMPAQDQKIQNG
+           290       300       310       320       330       340   
+
+>>sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcriptio  (483 aa)
+ initn: 108 init1: 108 opt: 159  Z-score: 158.1  bits: 38.2 E(516081): 0.28
+Smith-Waterman score: 159; 26.1% identity (62.7% similar) in 153 aa overlap (26-168:277-424)
+
+                    10        20        30        40          50   
+sp|Q1X      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA
+                                     ..:. :.: ...   ..: .  .:.  .::
+sp|Q5R PSGHPIPSEAKMRLKATLTHQVSSINGGCGMVVGSASTMVTARPEQSQILIQHPDAPSPA
+        250       260       270       280       290       300      
+
+            60        70        80        90       100       110   
+sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN
+       . . : .:  :.:.:.   :.:  .... ..:: . . ::::::.  :....: . .::.
+sp|Q5R QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK
+        310         320         330       340       350       360  
+
+           120       130       140               150       160     
+sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQL--------AQLAAEVRGSRANTPMPGSPAT
+       .  .. .::  : .... .. :  .:.: :        . :  ...:   ..:  .:  :
+sp|Q5R KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQG-YLESPKESSEPT
+            370       380       390       400        410       420 
+
+         170       180       190       200       210       220     
+sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG
+       .::                                                         
+sp|Q5R GSPAPVIQHSSATAPSNGLSVRSAAEAVATSVLTQMASQRTELSMPIQSHVIMTPQSQSA
+             430       440       450       460       470       480 
+
+>>sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcriptio  (494 aa)
+ initn: 108 init1: 108 opt: 159  Z-score: 158.0  bits: 38.2 E(516081): 0.28
+Smith-Waterman score: 159; 26.1% identity (62.7% similar) in 153 aa overlap (26-168:288-435)
+
+                    10        20        30        40          50   
+sp|Q1X      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA
+                                     ..:. :.: ...   ..: .  .:.  .::
+sp|P17 PSGHPIPSEAKMRLKATLTHQVSSINGGCGMVVGTASTMVTARPEQSQILIQHPDAPSPA
+       260       270       280       290       300       310       
+
+            60        70        80        90       100       110   
+sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN
+       . . : .:  :.:.:.   :.:  .... ..:: . . ::::::.  :....: . .::.
+sp|P17 QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK
+       320         330         340       350       360       370   
+
+           120       130       140               150       160     
+sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQL--------AQLAAEVRGSRANTPMPGSPAT
+       .  .. .::  : .... .. :  .:.: :        . :  ...:   ..:  .:  :
+sp|P17 KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQG-YLESPKESSEPT
+           380       390       400       410       420        430  
+
+         170       180       190       200       210       220     
+sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG
+       .::                                                         
+sp|P17 GSPAPVIQHSSATAPSNGLSVRSAAEAVATSVLTQMASQRTELSMPIQSHVIMTPQSQSA
+            440       450       460       470       480       490  
+
+>>sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-bi  (395 aa)
+ initn: 145 init1: 145 opt: 157  Z-score: 157.4  bits: 37.8 E(516081):  0.3
+Smith-Waterman score: 157; 29.3% identity (56.0% similar) in 150 aa overlap (54-199:192-329)
+
+            30        40        50        60         70        80  
+sp|Q1X PVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEK
+                                     ....  ::: . .: ..::  :     .:.
+sp|Q5U AHAHILPRAGTLAPVPCTTLLPCQTLFLTDEEKRLLGQEGVSLP-SHLPLTK----AEER
+             170       180       190       200        210          
+
+             90       100       110       120       130       140  
+sp|Q1X EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ
+         ....: .::. .:: ::.::.  .. ::..      ::: : ......: .:  :  :
+sp|Q5U VLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQ
+        220       230       240       250       260       270      
+
+            150       160       170       180          190         
+sp|Q1X LAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF---PTPSLSDYSP
+       : :: . .    :.:   .. : .:  .   ::.     ::    ::   :  .  ::.:
+sp|Q5U LRQLQTLI----AQTS--NKAAQTSTCVLILLFSLALIILP-SFSPFQGRPEAGPEDYQP
+        280             290       300       310        320         
+
+     200       210       220       230       240       250         
+sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL
+                                                                   
+sp|Q5U HGVTSRNILTHKDITENLETQVVESRLREPPEAKDANDSTRTLLEKMGGKPRPSGRIGTV
+     330       340       350       360       370       380         
+
+>>sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo  (323 aa)
+ initn: 119 init1: 119 opt: 154  Z-score: 155.8  bits: 37.2 E(516081): 0.37
+Smith-Waterman score: 154; 28.6% identity (57.1% similar) in 154 aa overlap (14-163:174-319)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     :  :.::...:.   .:.  .  :: .   
+sp|Q9Y AYPGAGVAHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATASATAAGG
+           150       160       170       180       190       200   
+
+            50        60        70        80           90       100
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS
+       . . :.      : :  : . .   .:  . :. :.::    .:.:  :.:.::. ::. 
+sp|Q9Y NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC
+                 210       220       230       240         250     
+
+              110       120       130       140        150         
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM
+       : ..  . ..::::: :. :: . : :..:..  : .  . .  .::    : . ...  
+sp|Q9Y RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS
+         260       270       280       290       300       310     
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+       :.::                                                        
+sp|Q9Y PSSPEFFL                                                    
+         320                                                       
+
+>>sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS=  (381 aa)
+ initn:  94 init1:  62 opt: 155  Z-score: 155.7  bits: 37.4 E(516081): 0.37
+Smith-Waterman score: 155; 25.2% identity (48.8% similar) in 246 aa overlap (2-237:57-297)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|P01 LSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTATSTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   . :: .    .    :  : :.   . . .   . .  . .:.:.:::.
+sp|P01 PSQTRAPHPYGLPTQSAGAYARAEMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|P01 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDKKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .:   ..::  ::   :     : .:   :::   : : :::   .   .
+sp|P01 ACKIPD-DLGFPEEMSVASLDLTGGLPEASTPESEEAFTLPLLNDPEPKPSLEPVKSISN
+             210       220       230       240       250       260 
+
+            210       220       230        240       250       260 
+sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH
+           ::  :    :: :  .    . ..:  :: ::                        
+sp|P01 VELKAEPFDDFLFPASSRPSGSETSRSVPNVDLSGSFYAADWEPLHSNSLGMGPMVTELE
+             270       280       290       300       310       320 
+
+             270       280       290       300       310       320 
+sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK
+                                                                   
+sp|P01 PLCTPVVTCTPLLRLPELTHAAGPVSSQRRQGSRHPDVPLPELVHYREEKHVFPQRFPST
+             330       340       350       360       370       380 
+
+>>sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus no  (327 aa)
+ initn:  95 init1:  64 opt: 154  Z-score: 155.7  bits: 37.2 E(516081): 0.38
+Smith-Waterman score: 155; 23.1% identity (55.9% similar) in 229 aa overlap (12-216:38-261)
+
+                                  10        20           30        
+sp|Q1X                    MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD------
+                                     :: .:.. .. .:..   :..  :      
+sp|P51 NFDTSSRGSSGSPAHAESYSSGGGGQQKFRVD-MPGSGSAFIPTINAITTTSQDLQWMVQ
+        10        20        30         40        50        60      
+
+              40        50        60              70          80   
+sp|Q1X -TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKE
+        : ..: .    . .:    :. .     . :: :       :..  :.: .  . .:.:
+sp|P51 PTVITSMSNPYPRSHPYSPLPGLRSVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEE
+         70        80        90       100       110       120      
+
+            90       100       110       120       130       140   
+sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL
+       .:::.:  ::. ::   :.:.:   :::..:  ..:.... : ....... :...:  .:
+sp|P51 KRRIRRE-RNKLAAAKCRNRRRELTEKLQTETEELEEEKSGLQKEIAELQKEKEKLEFML
+        130        140       150       160       170       180     
+
+           150          160         170       180       190        
+sp|Q1X AQLAAEVRGS---RANTPMPGSPAT--ASPTLTPTLFKQERDELPLERIPFPTPSLSDYS
+       .  .   . :   : ..:  :  .   .. .. :.. :::    : :  :  . ...  .
+sp|P51 VAHGPVCKISPEERRSSPTSGVQSLRGTGSAVGPVVVKQEP---PEEDSPSSSAGMDKTQ
+         190       200       210       220          230       240  
+
+      200        210       220       230       240       250       
+sp|Q1X PT-LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN
+        . .:: ..: ..  ...:                                         
+sp|P51 RSVIKPISIAGGGFYGEEPLHTPIVVTSTPAITPGTSNLVFTYPSVLEQESPASPSESCS
+            250       260       270       280       290       300  
+
+>>sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A  (780 aa)
+ initn:  75 init1:  75 opt: 159  Z-score: 155.3  bits: 38.4 E(516081):  0.4
+Smith-Waterman score: 159; 28.9% identity (56.1% similar) in 173 aa overlap (42-208:92-255)
+
+              20        30        40        50        60        70 
+sp|Q1X VDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP
+                                     ... : ...:  :....: ..  : . .  
+sp|Q9U IRNSPYRREDSMEDRGEEDDSLAIKPPQQMSRKEKVHHRKDEKRKEKW-KHARVKEREHE
+              70        80        90       100        110       120
+
+              80        90       100          110       120        
+sp|Q1X PRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEM--EKLENEKIQMEQQNQFLLQR
+        ::: . :..: .:. ::  : . : . :: :: :::.  .: : :. . :::..   :.
+sp|Q9U RRKRHREEQDKARREWERQKRREMAREHSRRERDRLEQLERKRERERKMREQQKEQREQK
+              130       140       150       160       170       180
+
+      130       140        150         160       170       180     
+sp|Q1X LSQMEAENNRLSQQLA-QLAAEVRGSRAN--TPMPGSPATASPTLTPTLFKQERDELPLE
+         . .::. :  ..   ...:. :  : .    . .:  . ::   :    .:: ::   
+sp|Q9U ERERRAEERRKEREARREVSAHHRTMREDYSDKVKASHWSRSPPRPP----RERFELGDG
+              190       200       210       220           230      
+
+         190       200       210       220       230       240     
+sp|Q1X RIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD
+       :     :. .  .:. ::. : :                                     
+sp|Q9U R----KPGEARPAPAQKPAQLKEEKMEERDLLSDLQDISDSERKTSSAESSSAESGSGSE
+            240       250       260       270       280       290  
+
+>>sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase   (806 aa)
+ initn: 106 init1:  69 opt: 173  Z-score: 168.2  bits: 40.8 E(516081): 0.075
+Smith-Waterman score: 173; 27.0% identity (51.0% similar) in 259 aa overlap (3-236:429-680)
+
+                                           10          20        30
+sp|Q1X                             MSCDMEKTMSSVDSLP--ATPASEVPVLTVSP
+                                     : ::   :   .::  . :: ..  ::..:
+sp|Q9W IRFQPSLQPVASEPVCPDVEMPSPWAPSGDCAME---SPPPALPPCSDPAPDTVDLTLQP
+      400       410       420       430          440       450     
+
+               40        50              60        70         80   
+sp|Q1X ADTSLNSADVKTQEVKPEEKKPA------KKRKSWGQELPVPKTNLP-PRKRAKTEDEKE
+       :  . . :  : . .  .. : :      :. .:  .. :    . : ::: . ......
+sp|Q9W APPASELAPPKREGAISDNTKAALKAALLKSLRSRLRDGPSAPLEAPEPRKPVTAQERQR
+         460       470       480       490       500       510     
+
+            90       100       110       120       130        140  
+sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR-LSQQ
+       .:. .:  : :      ::..: : :. :     .   .   :  :  . ..:.: : ..
+sp|Q9W EREEKR--RRRQERAKEREKRRQERERKERGAGTLGGPSTDPLAGL--VLSDNDRSLLER
+         520         530       540       550         560       570 
+
+            150       160        170        180        190         
+sp|Q1X LAQLAAEVRGSRANTPMPG-SPATASPTLTPTL-FKQERDEL-PLERIPFPT--PSLSDY
+        ...:     . : .: :. .:..:.:: :::   .:    : :   :: :.  :     
+sp|Q9W WTRMARPPAPAPAPAPAPAPAPSSAQPTSTPTGPVSQSTGPLQPAGSIPGPASQPVCPPP
+             580       590       600       610       620       630 
+
+       200               210       220         230       240       
+sp|Q1X SPTLKPS--------TLAESSDVAQHPAVSVAGLEGDGS--ALPLFDLGSDLKHHSTDDV
+       .:. .:.        :   .: .:..  :  .:: :.:.  .:: :  :           
+sp|Q9W GPVPQPAGPIPAPLQTAPSTSLLASQSLVPPSGLPGSGAPEVLPYFPSGPPPPDPGLTPQ
+             640       650       660       670       680       690 
+
+       250       260       270       280       290       300       
+sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG
+                                                                   
+sp|Q9W PSTSESPDVNLVTQQLSKSQVEDPLPPVFSGTPKGSGAGYGVGFDLEEFLNQSFDMGVAD
+             700       710       720       730       740       750 
+
+>>sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-bi  (428 aa)
+ initn: 130 init1: 130 opt: 155  Z-score: 155.1  bits: 37.4 E(516081): 0.41
+Smith-Waterman score: 155; 26.8% identity (54.0% similar) in 198 aa overlap (8-199:138-322)
+
+                                      10        20        30       
+sp|Q1X                        MSCDMEKTMSSVDSLPATPASEVPVLTVSP---ADTS
+                                     :. . ..  : ::.  : :::.    . : 
+sp|Q50 VSQTQHSLNINFPFDFNGWETGFLPDQAGGTQCASETPQAQPATGFP-LTVKDLLLSGTP
+       110       120       130       140       150        160      
+
+           40        50        60        70        80        90    
+sp|Q1X LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR
+        ..: :. :  .       .::    . . .:. ..:  :     .:.  ..:.: .::.
+sp|Q50 ETAAKVSQQSYQELILTEDEKRLLAKEGMTLPN-QFPLTKY----EERILKKIRRKIRNK
+        170       180       190        200           210       220 
+
+          100       110       120       130       140       150    
+sp|Q1X AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR
+        .:: ::..:.  .. ::..      .:. : ... :.:  :  : .:: .: : : .. 
+sp|Q50 QSAQESRKKKKEYIDGLESRMAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG-
+             230       240       250       260       270       280 
+
+          160       170       180       190          200       210 
+sp|Q1X ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS---DYSPTLKPSTLAESSD
+       .: :. ..  .    :. ::.      ::  . ::   ..:   :.::            
+sp|Q50 SNKPVQAGTCVLVLLLSFTLIL-----LPNLK-PFTDTKVSQHGDFSPMRVQSRSLHNLQ
+              290       300             310       320       330    
+
+             220       230       240       250       260       270 
+sp|Q1X VAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS
+                                                                   
+sp|Q50 SSRVLRNLDHPYSMTENAKILPRFPEDKTMEEIASLLGRLHRRPQFTEYDPESHNHSFDQ
+          340       350       360       370       380       390    
+
+>>sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sa  (326 aa)
+ initn:  94 init1:  63 opt: 153  Z-score: 154.8  bits: 37.0 E(516081): 0.42
+Smith-Waterman score: 153; 24.9% identity (54.1% similar) in 233 aa overlap (4-222:39-253)
+
+                                          10         20        30  
+sp|Q1X                            MSCDMEKTMSS-VDSLPATPASEVPVLTVSPAD
+                                     ::  . :. . .. :  .:.     :.:  
+sp|P15 FDTSSRGSSGSPAHAESYSSGGGGQQKFRVDMPGSGSAFIPTINAITTSQDLQWMVQP--
+       10        20        30        40        50        60        
+
+             40        50        60              70          80    
+sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKEQ
+       : ..: .    . .:    :.       . :: :       :..  :.: .  . .:.:.
+sp|P15 TVITSMSNPYPRSHPYSPLPGLASVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEEK
+         70        80        90       100       110       120      
+
+           90       100       110       120       130       140    
+sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA
+       :::.:  ::. ::   :.:.:   :::. :  ..:.... : ....... :...:  .:.
+sp|P15 RRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGLQKEIAELQKEKEKLEFMLV
+        130        140       150       160       170       180     
+
+          150          160         170       180       190         
+sp|Q1X QLAAEVRGS---RANTPMPG-SPA-TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSP
+         .   . :   : . : :: .:  ... ..  .. :::    :::          . ::
+sp|P15 AHGPVCKISPEERRSPPAPGLQPMRSGGGSVGAVVVKQE----PLE----------EDSP
+         190       200       210       220                     230 
+
+     200       210       220       230       240       250         
+sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL
+       . . . : ...  . .: .:.::                                     
+sp|P15 SSSSAGLDKAQRSVIKP-ISIAGGFYGEEPLHTPIVVTSTPAVTPGTSNLVFTYPSVLEQ
+             240        250       260       270       280       290
+
+>>sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcriptio  (413 aa)
+ initn: 108 init1: 108 opt: 154  Z-score: 154.3  bits: 37.3 E(516081): 0.45
+Smith-Waterman score: 154; 27.5% identity (67.5% similar) in 120 aa overlap (26-143:277-392)
+
+                    10        20        30        40          50   
+sp|Q1X      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA
+                                     ..:. :.: ...   ..: .  .:.  .::
+sp|Q8R PSGHPMPSEAKMRLKATLTHQVSSINGGCGMVVGTASTMVTARPEQNQILIQHPDAPSPA
+        250       260       270       280       290       300      
+
+            60        70        80        90       100       110   
+sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN
+       . . : .:  :.:.:.   :.:  .... ..:: . . ::::::.  :....: . .::.
+sp|Q8R QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK
+        310         320         330       340       350       360  
+
+           120       130       140       150       160       170   
+sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPT
+       .  .. .::  : .... .. :  .:.: :                              
+sp|Q8R KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQGYLGK         
+            370       380       390       400       410            
+
+>>sp|P29747|CREBA_DROME Cyclic AMP response element-bind  (516 aa)
+ initn: 190 init1: 128 opt: 155  Z-score: 154.0  bits: 37.5 E(516081): 0.47
+Smith-Waterman score: 155; 30.4% identity (55.4% similar) in 148 aa overlap (8-150:370-508)
+
+                                      10        20          30     
+sp|Q1X                        MSCDMEKTMSSVDSLPATPASEVPVLTVS--PADTSL
+                                     : ::  :  :. .:   ..:..  :  : :
+sp|P29 LSPNATVSISVANPAGGESSVRVSRTAASITRSSSGSASASGSSTSSTVTTTRQPIHTPL
+     340       350       360       370       380       390         
+
+          40           50        60        70        80        90  
+sp|Q1X NSADVKTQE---VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+        :.. : .    .  ::.:    :   ..  :.:. .::  :     .::  ..:.: ..
+sp|P29 ISSQPKGSTGTLLLTEEEK----RTLLAEGYPIPQ-KLPLTK----AEEKSLKKIRRKIK
+     400       410           420       430            440       450
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :. .:: ::..:.  :..:: .   .  .:.   .::  .:  :  : .:: .: : :  
+sp|P29 NKISAQESRRKKKEYMDQLERRVEILVTENHDYKKRLEGLEETNANLLSQLHKLQALVSK
+              460       470       480       490       500       510
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+                                                                   
+sp|P29 HNVKKS                                                      
+                                                                   
+
+>>sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Maca  (323 aa)
+ initn: 146 init1: 117 opt: 152  Z-score: 153.9  bits: 36.8 E(516081): 0.47
+Smith-Waterman score: 152; 28.6% identity (57.1% similar) in 154 aa overlap (14-163:174-319)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     :  :.::...:.   .:.  .  :: .   
+sp|Q2P AYPGAGVAHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATASATAAGG
+           150       160       170       180       190       200   
+
+            50        60        70        80           90       100
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS
+       . . :.      : :  : . .   .:  . :. :.::    .:.:  :.:.::. ::. 
+sp|Q2P NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC
+                 210       220       230       240         250     
+
+              110       120       130       140        150         
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM
+       : ..  . ..::::: :. :: . : :..:..  : .  . .  .::    : . ...  
+sp|Q2P RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAHKVKCEKLANSGFREAGSTSDS
+         260       270       280       290       300       310     
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+       :.::                                                        
+sp|Q2P PSSPEFFL                                                    
+         320                                                       
+
+>>sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus n  (267 aa)
+ initn: 156 init1: 109 opt: 152  Z-score: 155.0  bits: 36.8 E(516081): 0.41
+Smith-Waterman score: 152; 27.6% identity (56.4% similar) in 163 aa overlap (51-190:23-183)
+
+               30        40        50        60              70    
+sp|Q1X SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPP-R
+                                     .::.  ..    .: :.      .. :  :
+sp|Q9R         MVVVAAAPSAASAAPKVLLLSGQPASGGRALPLMVPGPRAAGSEASGTPQAR
+                       10        20        30        40        50  
+
+             80        90       100       110       120            
+sp|Q1X KRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ-------FL
+       :: . :.   :.. ..: :.::.::::.:.::. .: .::.. ...:..::       .:
+sp|Q9R KRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKLQLENQLL
+             60        70        80        90       100       110  
+
+         130       140               150       160       170       
+sp|Q1X LQRLSQMEAENNRLSQQLAQLA--------AEVRGSRANTPMPGSPATASPTLTPTLFKQ
+        ..   .  ::..:  .:.. :        :: .:. .   . ::  .:.  :   : .:
+sp|Q9R REKTHGLVIENQELRTRLGMNALVTEEVSEAESKGNGVRL-VAGSAESAALRLRAPL-QQ
+            120       130       140       150        160        170
+
+       180       190       200       210       220       230       
+sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS
+        . .:   .  ::                                               
+sp|Q9R VQAQLSPPQNIFPWILTLLPLQILSLISFWAFWTSWTLSCFSNVLPQSLLIWRNSQRSTQ
+              180       190       200       210       220       230
+
+>>sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus  (323 aa)
+ initn: 119 init1: 119 opt: 151  Z-score: 153.0  bits: 36.6 E(516081): 0.53
+Smith-Waterman score: 151; 27.9% identity (57.8% similar) in 154 aa overlap (14-163:174-319)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     :  :.::...:.   .:.  .  .: .  .
+sp|P54 GYPGAGVTHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHAAAAATAAGS
+           150       160       170       180       190       200   
+
+            50        60        70        80           90       100
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS
+       . . :.      : :  : . .   .:  . :. :.::    .:.:  :.:.::. ::. 
+sp|P54 NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC
+                 210       220       230       240         250     
+
+              110       120       130       140        150         
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM
+       : ..  . ..::::: :. :: . : :..:..  : .  . .  .::    : . ...  
+sp|P54 RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS
+         260       270       280       290       300       310     
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+       :.::                                                        
+sp|P54 PSSPEFFL                                                    
+         320                                                       
+
+>>sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus mus  (326 aa)
+ initn:  94 init1:  63 opt: 151  Z-score: 152.9  bits: 36.7 E(516081): 0.54
+Smith-Waterman score: 151; 24.0% identity (56.3% similar) in 229 aa overlap (4-216:39-260)
+
+                                          10         20        30  
+sp|Q1X                            MSCDMEKTMSS-VDSLPATPASEVPVLTVSPAD
+                                     ::  . :. . .. :  .:.     :.:  
+sp|P47 FDTSSRGSSGSPAHAESYSSGGGGQQKFRVDMPGSGSAFIPTINAITTSQDLQWMVQP--
+       10        20        30        40        50        60        
+
+             40        50        60              70          80    
+sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKEQ
+       : ..: .    . .:    :.       . :: :       :..  :.: .  . .:.:.
+sp|P47 TVITSMSNPYPRSHPYSPLPGLASVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEEK
+         70        80        90       100       110       120      
+
+           90       100       110       120       130       140    
+sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLS-QQL
+       :::.:  ::. ::   :.:.:   :::. :  ..:.... : ....... :...:  ...
+sp|P47 RRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGLQKEIAELQKEKEKLEFMKV
+        130        140       150       160       170       180     
+
+                150       160       170       180       190        
+sp|Q1X A-----QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYS
+       :     ... : : :  .. . .  .:.: .. :.. :::    : :  :  . ...  .
+sp|P47 AHGPVCKISPEERRSPPTSGLQSLRGTGS-AVGPVVVKQEP---PEEDSPSSSAGMDKTQ
+         190       200       210        220          230       240 
+
+      200        210       220       230       240       250       
+sp|Q1X PT-LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN
+        . .:: ..: ..  ...:                                         
+sp|P47 RSVIKPISIAGGGFYGEEPLHTPIVVTSTPAITPGTSNLVFTYPNVLEQESPSSPSESCS
+             250       260       270       280       290       300 
+
+>>sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2  (872 aa)
+ initn: 186 init1:  84 opt: 157  Z-score: 152.8  bits: 38.0 E(516081): 0.55
+Smith-Waterman score: 157; 33.6% identity (62.6% similar) in 107 aa overlap (16-119:188-291)
+
+                              10        20        30        40     
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV
+                                     :..::.  :: ...::  .     ..:.: 
+sp|Q2V QSEPEAAAPAAEPVAPTAPVAAAPAPAPATPVAPAQPKPVAAAAPAGDATAVPRARTEEE
+       160       170       180       190       200       210       
+
+          50        60        70           80        90       100  
+sp|Q1X KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK---TEDEKEQRRIERVLRNRAAAQTSRE
+       . ::.. :::: .  .  :: .:. : :. .:   :.   .. : ::  :. ::.. .::
+sp|Q2V EEEEER-AKKRAAAHKPAPVKRTE-PRRRTGKLTITDALTDDDRSERG-RSLAAVKRARE
+       220        230       240        250       260        270    
+
+            110       120       130       140       150       160  
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS
+       :.::.  .  .::.  :                                           
+sp|Q2V RERLKHMQKGSEKVIREVIVPESITVQELANRMAVRGADVIKCLMRLGVMATINQNIDAD
+          280       290       300       310       320       330    
+
+>>sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kap  (286 aa)
+ initn:  70 init1:  70 opt: 150  Z-score: 152.7  bits: 36.4 E(516081): 0.55
+Smith-Waterman score: 150; 23.4% identity (53.7% similar) in 214 aa overlap (14-223:37-240)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     : :  :  ..:  ...:   . :.:. . :
+sp|Q0C PAPHPSMQTSAQDHADQVLHDQLLAAHQHLSHPQQPRPQAP--ATQPPHMQPNTASPRDQ
+         10        20        30        40          50        60    
+
+             50        60        70         80        90       100 
+sp|Q1X E-VKPEEKKPAKKRKSWGQELPVPKTNLP-PRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+       . . :  .  :      :    .:    : :..  ::  ..     .:. .:::: .. :
+sp|Q0C NNIDPAISGSAI----LGAPPQTPPQPEPAPQESPKTYGKRPLSTSKRAAQNRAAQRAFR
+           70            80        90       100       110       120
+
+             110       120       130       140       150        160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MP
+       .::.  ..:::.   :...: . . .. . ..::: .: . . .: ...  :....: .:
+sp|Q0C QRKESYIRKLEE---QVKHQ-EAITEEYKALHAENYQLREYIINLQTRLLDSQGEVPELP
+              130           140       150       160       170      
+
+              170       180        190       200       210         
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERI-PFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+       :.    .:    ::   : ..       : :.    . :   . . .. ..:. .   ..
+sp|Q0C GNIDLNQPRADLTLSAPELQRGNAASAGPAPAGPGPQQSQPNQNQGVGPNDDMNSLNRIA
+        180       190       200       210       220       230      
+
+     220       230       240       250       260       270         
+sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF
+       ::::                                                        
+sp|Q0C VAGLGMRKHPNEDANYLGNNFQARRPRTDDNQTGATETTKQEPDGLPVVS          
+        240       250       260       270       280                
+
+>>sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-bi  (404 aa)
+ initn: 145 init1: 145 opt: 181  Z-score: 179.7  bits: 41.9 E(516081): 0.017
+Smith-Waterman score: 181; 26.7% identity (56.0% similar) in 225 aa overlap (1-207:107-318)
+
+                                             10            20      
+sp|Q1X                               MSCDMEKTMSSV--DSLP--ATPASEVPVL
+                                     .::  .. ....  ...:   : . :   .
+sp|Q61 LGSSSSSILHDHNYSLPQEHVSIDLGECEMISCRGRRELTGLAGSTFPFADTESFEKEGF
+         80        90       100       110       120       130      
+
+         30        40          50        60        70        80    
+sp|Q1X TVSPADTSLNSADVKTQEV--KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ
+        :.:      .:. . ...    ::::  .:.   :  ::   ..::  :     .:.  
+sp|Q61 HVTPLPGEERAAEQEMSRLILTEEEKKLLEKE---GLTLP---STLPLTKV----EEQVL
+        140       150       160          170          180          
+
+           90       100       110       120       130       140    
+sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA
+       .:..: .::. ::: ::..:.. .  ::.. ...  ::. : ......: .:  : .:: 
+sp|Q61 KRVRRKIRNKRAAQESRKKKKVYVVGLESRVLKYTAQNRELQNKVQRLEEQNLSLLDQLR
+        190       200       210       220       230       240      
+
+          150       160             170        180            190  
+sp|Q1X QLAAEVRGSRANTPMPGSPA------TASPTLTPTLFKQE-RDELPLERIPF-----PTP
+       .: : :    ::    ::        .    :.:...... :  .: : . .       :
+sp|Q61 KLQAMVI-EIANKTSSGSTCVLVLVFSFCLLLVPAMYSSDARGSVPAEYVVLHRKLRALP
+        250        260       270       280       290       300     
+
+            200       210       220       230       240       250  
+sp|Q1X SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLS
+       : .:..:  :::.:.                                             
+sp|Q61 SEDDHQP--KPSALSSELPMDSTHQSLDSSEHMFLVSSNFSCVLYHAPQAEQPLHWPLWD
+         310         320       330       340       350       360   
+
+>>sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription   (347 aa)
+ initn: 123 init1:  91 opt: 151  Z-score: 152.5  bits: 36.7 E(516081): 0.56
+Smith-Waterman score: 151; 30.9% identity (62.9% similar) in 97 aa overlap (66-160:255-347)
+
+          40        50        60        70          80        90   
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP--RKRAKTEDEKEQRRIERVLRN
+                                     ::   ::     ::.. :: ....... .:
+sp|Q9E SYLGSPQHSPSTSRAPPDSLPSPGVPRGSRPKPYDPPGVSVTAKVKTEKLDKKLKKMEQN
+          230       240       250       260       270       280    
+
+           100       110       120       130       140       150   
+sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS
+       ..::   :..:: :.: : .:  ..:..:. : .. ...  :     : : .:  ::: .
+sp|Q9E KTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEEVRKA
+          290       300       310       320           330       340
+
+           160       170       180       190       200       210   
+sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA
+       :..  .:                                                     
+sp|Q9E RGKKRVP                                                     
+                                                                   
+
+>>sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus   (323 aa)
+ initn: 119 init1: 119 opt: 150  Z-score: 152.0  bits: 36.5 E(516081):  0.6
+Smith-Waterman score: 150; 27.9% identity (57.1% similar) in 154 aa overlap (14-163:174-319)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     :  :.::...:.   .:.  .  .: .   
+sp|P54 GYPGAGVTHDDLGQHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATAAATAAGG
+           150       160       170       180       190       200   
+
+            50        60        70        80           90       100
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS
+       . . :.      : :  : . .   .:  . :. :.::    .:.:  :.:.::. ::. 
+sp|P54 NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC
+                 210       220       230       240         250     
+
+              110       120       130       140        150         
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM
+       : ..  . ..::::: :. :: . : :..:..  : .  . .  .::    : . ...  
+sp|P54 RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS
+         260       270       280       290       300       310     
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+       :.::                                                        
+sp|P54 PSSPEFFL                                                    
+         320                                                       
+
+>>sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus  (380 aa)
+ initn:  94 init1:  62 opt: 151  Z-score: 152.0  bits: 36.7 E(516081):  0.6
+Smith-Waterman score: 151; 24.0% identity (50.0% similar) in 246 aa overlap (2-237:57-297)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|O77 LSYYHSPADSFSSMGSPVNAQDYCTDLAVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   : :  .    .  . :  . :.   . . .   . .  . .:.:.:::.
+sp|O77 PSQTRAPHPYGVPTPSAGAYSRAGVMKTMTGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|O77 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .:   ..::  :.   :     : .:   :::   : : ::.   . . .
+sp|O77 ACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVEPVKSVGS
+             210       220       230       240       250       260 
+
+            210       220       230        240       250       260 
+sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH
+           ::  :  . :: :  .    . ..: .:: ::                        
+sp|O77 MELKAEPFDDYMFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMATELE
+             270       280       290       300       310       320 
+
+             270       280       290       300       310       320 
+sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK
+                                                                   
+sp|O77 PLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 
+             330       340       350       360       370       380 
+
+>>sp|A1C9M5|KAPC_ASPCL Putative transcription factor kap  (288 aa)
+ initn: 114 init1:  80 opt: 149  Z-score: 151.7  bits: 36.3 E(516081): 0.62
+Smith-Waterman score: 149; 20.8% identity (56.0% similar) in 159 aa overlap (66-223:83-237)
+
+          40        50        60        70        80        90     
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA
+                                     :. .:  ..  ::  ..     .:. .:::
+sp|A1C HMQPTTPVARDQNNIDPAISGGAMLAGPQTPQPDLSGQESPKTYGKRPLSTSKRAAQNRA
+             60        70        80        90       100       110  
+
+         100       110       120       130       140       150     
+sp|Q1X AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA
+       : .. :.::. ... ::. :..  .    . . .. ..::: .: . . .: ...  ...
+sp|A1C AQRAFRQRKEAHIRDLEG-KVKAYET---MGEAIKALQAENYQLREYIINLQSRLLDTQG
+            120       130           140       150       160        
+
+          160       170       180       190       200       210    
+sp|Q1X NTP-MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQ
+       ..: .::.   ..:     .     .      .: : :.  .     . .. : ..:. .
+sp|A1C EVPELPGNIDLSQPRGDIPVPAPPTSGTSTSAVPVPPPTAPQQPQPAQNQASAPNDDMNS
+      170       180       190       200       210       220        
+
+          220       230       240       250       260       270    
+sp|Q1X HPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE
+          ..::::                                                   
+sp|A1C LNRIAVAGLGMRKPPTEEANYLGNSFQQQARRVRPDDGQPDASELTLPKQEPTHGLPLIS
+      230       240       250       260       270       280        
+
+>>sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xeno  (316 aa)
+ initn: 139 init1: 109 opt: 149  Z-score: 151.2  bits: 36.3 E(516081): 0.67
+Smith-Waterman score: 149; 26.6% identity (62.6% similar) in 139 aa overlap (29-163:176-312)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS
+                                     ::. .: .: ...... . .... .. : :
+sp|Q50 QYQGLPHEEMGLPHQHPHHHHHHHHHQPSPSPSGSSSSSQQLQNSHQQHQNSSAVEDRFS
+         150       160       170       180       190       200     
+
+       60        70        80           90       100       110     
+sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+         : . .   .:  . :. :.:.    .:.:  :.:.::. ::. : ..  . ..:::::
+sp|Q50 DDQLVSMSVRELNRHLRGFTKDDVIRLKQKR--RTLKNRGYAQSCRFKRVQQKHHLENEK
+         210       220       230         240       250       260   
+
+         120       130       140       150        160       170    
+sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-RGSRANTPMPGSPATASPTLTPTL
+        :. :: . :  ..:..  : .  . .  .::  . : . ...  :.::           
+sp|Q50 TQLIQQVEQLKLEVSRLARERDAYKIKCEKLANTTFREAGSTSDNPSSPEFFM       
+           270       280       290       300       310             
+
+          180       190       200       210       220       230    
+sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD
+
+>>sp|O57342|MAFA_COTJA Transcription factor MafA OS=Cotu  (286 aa)
+ initn: 125 init1: 125 opt: 148  Z-score: 150.9  bits: 36.1 E(516081):  0.7
+Smith-Waterman score: 148; 34.1% identity (67.1% similar) in 85 aa overlap (83-167:201-281)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     .:.:  :.:.::. ::. : ..  . . ::
+sp|O57 RFSDDQLVSMSVRELNRQLRGFSKEEVIRLKQKR--RTLKNRGYAQSCRYKRVQQRHILE
+              180       190       200         210       220        
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       ::: :...: . : :..:..  : .  ...  .:::  ::   .:  :..: :..     
+sp|O57 NEKCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPRETSPPAAPKTTAADFFM
+      230       240       250       260         270       280      
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+
+>>sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcriptio  (348 aa)
+ initn: 123 init1:  91 opt: 149  Z-score: 150.6  bits: 36.3 E(516081): 0.72
+Smith-Waterman score: 149; 27.7% identity (61.0% similar) in 141 aa overlap (19-154:210-342)
+
+                           10        20        30        40        
+sp|Q1X             MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE
+                                     :...   . .:: :.::.: . . .  .  
+sp|Q3Z LCSEVVIPEGDSKPDSTTTGFPQCIKEEDAPSDNDSGICMSP-DSSLGSPQDSPSTSRG-
+     180       190       200       210       220        230        
+
+       50        60          70           80        90       100   
+sp|Q1X EKKPAKKRKSWG--QELPVPKTNLPPRKR---AKTEDEKEQRRIERVLRNRAAAQTSRER
+         .: :.  : :  .    ::   :: ..   ::.. :: ....... .:..::   :..
+sp|Q3Z --SPNKSLLSPGALSGSSRPKPYDPPGEKMVAAKVKGEKLDKKLKKMEQNKTAATRYRQK
+         240       250       260       270       280       290     
+
+           110       120       130       140       150       160   
+sp|Q1X KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSP
+       :: :.: : .:  ..:..:. : .. ...  : . :..:.     ::: .:         
+sp|Q3Z KRAEQEALTGECKELEKKNEALKEKADSLAKEIQYLKDQIE----EVRKAREKKRVL   
+         300       310       320       330           340           
+
+           170       180       190       200       210       220   
+sp|Q1X ATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL
+
+>>sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-bind  (367 aa)
+ initn: 143 init1: 143 opt: 149  Z-score: 150.3  bits: 36.3 E(516081): 0.75
+Smith-Waterman score: 149; 33.3% identity (63.2% similar) in 87 aa overlap (60-146:170-252)
+
+      30        40        50        60        70        80         
+sp|Q1X PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER
+                                     :::  .  ..::  :     .:.  ..:.:
+sp|Q5U PRVSTIAPPPPAALLSCQRLFLTDEEKHLLGQEGVTLPSHLPLTK----AEERILKKIRR
+     140       150       160       170       180           190     
+
+      90       100       110       120       130       140         
+sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE
+        .::. .:: ::.::.  .. ::..     .::: : ......: .:  :  :. ::   
+sp|Q5U KIRNKQSAQDSRRRKKEYIDGLESRVAACSEQNQKLQRKVQELERQNISLVAQVHQLQKF
+         200       210       220       230       240       250     
+
+     150       160       170       180       190       200         
+sp|Q1X VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES
+                                                                   
+sp|Q5U TAQTSSRAAQTSTCVLILLFSLALIILPSFSPFQSQPEARSEGYQLHGVISRNILTHEDM
+         260       270       280       290       300       310     
+
+>>sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norve  (380 aa)
+ initn:  93 init1:  61 opt: 150  Z-score: 151.1  bits: 36.5 E(516081): 0.68
+Smith-Waterman score: 150; 27.6% identity (50.4% similar) in 250 aa overlap (8-237:54-297)
+
+                                      10        20           30    
+sp|Q1X                        MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTS
+                                     ..::.. .:.. : :  : :   :.:   .
+sp|P12 GDSLSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTAISTSPDLQWLVQP---T
+            30        40        50        60        70           80
+
+           40        50         60        70                 80    
+sp|Q1X LNSADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQ
+       : :. . .:   :.    :. .  ....   : ::    :     .:.:.:    .:.:.
+sp|P12 LVSSVAPSQTRAPHPYGLPTPSTGAYARA-GVVKTMSGGRAQSIGRRGKVEQLSPEEEEK
+               90       100        110       120       130         
+
+           90       100       110       120       130       140    
+sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA
+       :::.:  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::
+sp|P12 RRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA
+     140        150       160       170       180       190        
+
+          150       160       170          180          190        
+sp|Q1X QLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYS
+             .    .  .:   ...:  ::   :     : .:   :::   : : :::   .
+sp|P12 AHRPACKIPN-DLGFPEEMSVTSLDLTGGLPEATTPESEEAFTLPLLNDPEPKPSLEPVK
+      200        210       220       230       240       250       
+
+      200       210       220       230        240       250       
+sp|Q1X PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFN
+          .    ::  :    :: :  .    . ..:  :: ::                    
+sp|P12 NISNMELKAEPFDDFLFPASSRPSGSETARSVPDVDLSGSFYAADWEPLHSSSLGMGPMV
+       260       270       280       290       300       310       
+
+       260       270       280       290       300       310       
+sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE
+                                                                   
+sp|P12 TELEPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTL
+       320       330       340       350       360       370       
+
+>>sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptio  (125 aa)
+ initn: 127 init1: 127 opt: 143  Z-score: 151.0  bits: 34.9 E(516081): 0.69
+Smith-Waterman score: 143; 28.6% identity (56.2% similar) in 112 aa overlap (71-172:17-125)
+
+               50        60        70        80        90       100
+sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS
+                                     :: :. ...:    ::..:  .:: ::: :
+sp|Q16               MPHSSDSSDSSFSRSPPPGKQDSSDDV---RRVQRREKNRIAAQKS
+                             10        20           30        40   
+
+              110       120       130       140       150       160
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP
+       :.:.  . . :. :. ..:.::  : ....:.  : . ... : .         :.:: :
+sp|Q16 RQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEELKYFTSVLNSHEPLCSVLAASTPSP
+            50        60        70        80        90       100   
+
+                        170       180       190       200       210
+sp|Q1X G----------SPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+                  .: ..:: . :                                      
+sp|Q16 PEVVYSAHAFHQPHVSSPRFQP                                      
+           110       120                                           
+
+>>sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus mu  (267 aa)
+ initn: 149 init1: 103 opt: 149  Z-score: 152.2  bits: 36.2 E(516081): 0.59
+Smith-Waterman score: 149; 27.0% identity (57.7% similar) in 163 aa overlap (51-190:23-183)
+
+               30        40        50        60              70    
+sp|Q1X SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPP-R
+                                     .::.  ..    .: :.      .. :  :
+sp|O35         MVVVAAAPSAATAAPKVLLLSGQPASGGRALPLMVPGPRAAGSEASGTPQAR
+                       10        20        30        40        50  
+
+             80        90       100       110       120            
+sp|Q1X KRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN-------QFL
+       :: . :.   :.. ..: :.::.::::.:.::. .: .::.. ...:..:       :.:
+sp|O35 KRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENHKLQLENQLL
+             60        70        80        90       100       110  
+
+         130       140               150       160       170       
+sp|Q1X LQRLSQMEAENNRLSQQLAQLA--------AEVRGSRANTPMPGSPATASPTLTPTLFKQ
+        ..   . .::..:  .:.. .        .:..:: .   . ::  .:.  :   : .:
+sp|O35 REKTHGLVVENQELRTRLGMDTLDPDEVPEVEAKGSGVRL-VAGSAESAALRLCAPL-QQ
+            120       130       140       150        160        170
+
+       180       190       200       210       220       230       
+sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS
+        . .:   .  ::                                               
+sp|O35 VQAQLSPPQNIFPWTLTLLPLQILSLISFWAFWTSWTLSCFSNVLPQSLLVWRNSQRSTQ
+              180       190       200       210       220       230
+
+>>sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapie  (380 aa)
+ initn:  86 init1:  54 opt: 156  Z-score: 156.7  bits: 37.6 E(516081): 0.33
+Smith-Waterman score: 156; 28.2% identity (51.6% similar) in 248 aa overlap (9-237:55-297)
+
+                                     10        20           30     
+sp|Q1X                       MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTSL
+                                     .::.. .:.. : :  : :   :.:: .: 
+sp|P01 DSLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSANFIPTVTAISTSPDLQWLVQPALVS-
+           30        40        50        60        70        80    
+
+          40        50        60        70                 80      
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQRR
+       . :  .:.  .:    :: .  ....   : ::    :     .:.:.:    .:.:.::
+sp|P01 SVAPSQTRAPHPF-GVPAPSAGAYSRA-GVVKTMTGGRAQSIGRRGKVEQLSPEEEEKRR
+            90        100        110       120       130       140 
+
+         90       100       110       120       130       140      
+sp|Q1X IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL
+       :.:  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::  
+sp|P01 IRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAH
+              150       160       170       180       190       200
+
+        150       160       170          180          190       200
+sp|Q1X AAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPT
+           .    .  .:   ..::  ::   : .   : .:   :::   : : ::.   .  
+sp|P01 RPACKIPD-DLGFPEEMSVASLDLTGGLPEVATPESEEAFTLPLLNDPEPKPSVEPVKSI
+               210       220       230       240       250         
+
+              210       220       230        240       250         
+sp|Q1X LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRL
+        .    .:  :    :: :  .    . ..: .:: ::                      
+sp|P01 SSMELKTEPFDDFLFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHSGSLGMGPMATE
+     260       270       280       290       300       310         
+
+     260       270       280       290       300       310         
+sp|Q1X FHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETT
+                                                                   
+sp|P01 LEPLCTPVVTCTPSCTAYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLA
+     320       330       340       350       360       370         
+
+>>sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-bi  (357 aa)
+ initn: 113 init1: 113 opt: 147  Z-score: 148.6  bits: 36.0 E(516081): 0.93
+Smith-Waterman score: 147; 27.6% identity (59.3% similar) in 123 aa overlap (52-168:194-315)
+
+              30        40        50        60        70        80 
+sp|Q1X EVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDE
+                                     :: .. .  : .  :. .   :.:.  :: 
+sp|Q8K HSHSHLHAHPAHHQTSPHPPLHTGNQAQVSPATQQMQPTQTIQPPQPTGGRRRRVVDEDP
+           170       180       190       200       210       220   
+
+              90       100       110       120       130       140 
+sp|Q1X KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQ
+        :.:: . . ::::::   :..... . .::..  .. : :. : ...:... :  .:.:
+sp|Q8K DERRR-KFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQLKQ
+            230       240       250       260       270       280  
+
+                  150        160       170       180       190     
+sp|Q1X QL-----AQLAAEVRGSRAN-TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS
+        :       ..:  . :..  .:  . ::.  :                           
+sp|Q8K LLLTHKDCPITAMQKESQGYLSPESSPPASPVPACSQQQVIQHNTITTSSSVSEVVGSST
+            290       300       310       320       330       340  
+
+         200       210       220       230       240       250     
+sp|Q1X DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDD
+                                                                   
+sp|Q8K LSQLTTHRTDLNPIL                                             
+            350                                                    
+
+>>sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=M  (1319 aa)
+ initn: 158 init1:  64 opt: 171  Z-score: 163.5  bits: 40.6 E(516081): 0.14
+Smith-Waterman score: 171; 22.7% identity (56.7% similar) in 194 aa overlap (43-227:675-868)
+
+             20        30        40        50        60        70  
+sp|Q1X DSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP
+                                     :. : ::.:  :. .  ..:    . .   
+sp|A4R AQAEEKARKDAEKAAEEAERLAEEQRRQEEQRQKNEERKKKKEAQRKAEEEERQRKEAER
+          650       660       670       680       690       700    
+
+             80          90         100       110        120       
+sp|Q1X RKRAKTEDEK--EQRRIERVLRNRA--AAQTSRERKRLEMEKLENE-KIQMEQQNQFLLQ
+        .::. . :.  :: :  :  ...   : . ...:..   :  : : . . :. ..  :.
+sp|A4R LRRAQEQKERQAEQDRKAREAKEKEKKAKEEAKQREKAARELKEREARERKEKADKERLE
+          710       720       730       740       750       760    
+
+       130        140       150       160          170       180   
+sp|Q1X RLSQMEAENN-RLSQQLAQLAAEVRGSRANTPMPGSPA---TASPTLTPTLFKQERDELP
+       . ....::.. : .:. :. :..   . ::.:.: .::   . .:. .:.: ....  . 
+sp|A4R KEAKIKAEKEAREAQRKAERASQKATTLANVPVPTGPARRQSQAPNPAPALPQSQQASVA
+          770       780       790       800       810       820    
+
+           190       200       210       220       230       240   
+sp|Q1X LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHS
+         ..:  .:.:       ::   ...   ..  :.. .  .: :                
+sp|A4R SPQLPTAVPALPKLPTPQKPRRTSQQEPFTSGFAAQQVHGQGAGQYPAPPKAATPVHTSP
+          830       840       850       860       870       880    
+
+           250       260       270       280       290       300   
+sp|Q1X TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPV
+                                                                   
+sp|A4R GPGGLLSKGSSSQGQSLHSQATSPLGTSLPTSTSLPTPFGMPHPPPNQHYPPGIGPLNAP
+          890       900       910       920       930       940    
+
+>>sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-bi  (370 aa)
+ initn: 205 init1: 145 opt: 160  Z-score: 160.6  bits: 38.3 E(516081):  0.2
+Smith-Waterman score: 160; 29.7% identity (56.5% similar) in 138 aa overlap (18-146:119-256)
+
+                            10        20           30         40   
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVP-VLTVS--PADTSLNSAD-VKTQ
+                                     :::  :: . :::  :.:.  .    :.:.
+sp|Q9D EVVYDSGTLQGTQREAGPTFGLISIQIDQWTPALMVPDACTVSGLPSDSHRHILPRVSTR
+       90       100       110       120       130       140        
+
+            50             60        70        80        90        
+sp|Q1X EVKPEEKKPAKKRKSW-----GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQ
+          :    :. ... .      : :     .:: .      .:.  ..:.: .::. .::
+sp|Q9D APAPPAAMPSCQHHLFLTDEEKQLLAQEGITLPSHLPLTKAEERILKKIRRKIRNKQSAQ
+      150       160       170       180       190       200        
+
+      100       110       120       130       140       150        
+sp|Q1X TSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP
+        ::.::.  .. ::..     .::: : ......: .:  : .:. ::            
+sp|Q9D DSRRRKKEYLDGLESRVAACSEQNQKLQRKVQELERQNIFLMEQVRQLQKLTAQTSSRAA
+      210       220       230       240       250       260        
+
+      160       170       180       190       200       210        
+sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV
+                                                                   
+sp|Q9D QTSTCVLILLFSLALIILPSFSPFQGQSEARPEDYQLHGVISRNILTHENVTENLESPVL
+      270       280       290       300       310       320        
+
+>>sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catu  (381 aa)
+ initn:  91 init1:  59 opt: 150  Z-score: 151.1  bits: 36.5 E(516081): 0.68
+Smith-Waterman score: 150; 26.9% identity (50.6% similar) in 249 aa overlap (9-237:55-298)
+
+                                     10        20           30     
+sp|Q1X                       MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTSL
+                                     .::.. .:.. : :  : :   :.:   .:
+sp|Q8H DNLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSANFIPTVTAISTSPDLQWLVQP---TL
+           30        40        50        60        70           80 
+
+          40        50         60        70                 80     
+sp|Q1X NSADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQR
+        :. . .:   :.    :: .  ....   :  ..   :     .:.:.:    .:.:.:
+sp|Q8H VSSVAPSQTRAPHPYGVPAPSAGAYSRAGVVKTVTAGGRAQSIGRRGKVEQLSPEEEEKR
+              90       100       110       120       130       140 
+
+          90       100       110       120       130       140     
+sp|Q1X RIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQ
+       ::.:  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   :: 
+sp|Q8H RIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAA
+              150       160       170       180       190       200
+
+         150       160       170          180          190         
+sp|Q1X LAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSP
+            .    .  .:   ..::  :.   :     : .:   :::   : : ::.   . 
+sp|Q8H HRPACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVEPVKS
+               210       220       230       240       250         
+
+     200       210       220       230        240       250        
+sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNR
+         .    ::  :    :: :  .    . ..: .:: ::                     
+sp|Q8H ISSMELKAEPFDDFLFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMAT
+     260       270       280       290       300       310         
+
+      260       270       280       290       300       310        
+sp|Q1X LFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDET
+                                                                   
+sp|Q8H ELEPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCGAAHRKGSSSNEPSSDSLSSPTLL
+     320       330       340       350       360       370         
+
+>>sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcripti  (127 aa)
+ initn: 106 init1: 106 opt: 139  Z-score: 147.2  bits: 34.2 E(516081):  1.1
+Smith-Waterman score: 139; 28.6% identity (68.8% similar) in 77 aa overlap (69-145:21-97)
+
+       40        50        60        70        80        90        
+sp|Q1X DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQ
+                                     : :  .  .   : ..:...:  .::.:::
+sp|Q9N           MSQGLPAAGSVLQRSVAAPGNQPQPQPQQQSPEDDDRKVRRREKNRVAAQ
+                         10        20        30        40        50
+
+      100       110       120       130       140       150        
+sp|Q1X TSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP
+        ::...  . .::..:  ..::.: .: ......  : ..:.. : .             
+sp|Q9N RSRKKQTQKADKLHEEYESLEQENTMLRREIGKLTEELKHLTEALKEHEKMCPLLLCPMN
+               60        70        80        90       100       110
+
+      160       170       180       190       200       210        
+sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV
+                                                                   
+sp|Q9N FVPVPPRPDPVAGCLPR                                           
+              120                                                  
+
+>>sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-bi  (508 aa)
+ initn: 113 init1: 113 opt: 147  Z-score: 146.6  bits: 36.1 E(516081):  1.2
+Smith-Waterman score: 147; 27.6% identity (59.3% similar) in 123 aa overlap (52-168:345-466)
+
+              30        40        50        60        70        80 
+sp|Q1X EVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDE
+                                     :: .. .  : .  :. .   :.:.  :: 
+sp|Q02 HSHSHLHAHPAHHQTSPHPPLHTGNQAQVSPATQQMQPTQTIQPPQPTGGRRRRVVDEDP
+          320       330       340       350       360       370    
+
+              90       100       110       120       130       140 
+sp|Q1X KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQ
+        :.:: . . ::::::   :..... . .::..  .. : :. : ...:... :  .:.:
+sp|Q02 DERRR-KFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQLKQ
+           380       390       400       410       420       430   
+
+                  150        160       170       180       190     
+sp|Q1X QL-----AQLAAEVRGSRAN-TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS
+        :       ..:  . :..  .:  . ::.  :                           
+sp|Q02 LLLTHKDCPITAMQKESQGYLSPESSPPASPVPACSQQQVIQHNTITTSSSVSEVVGSST
+           440       450       460       470       480       490   
+
+         200       210       220       230       240       250     
+sp|Q1X DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDD
+                                                                   
+sp|Q02 LSQLTTHRTDLNPIL                                             
+           500                                                     
+
+>>sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabido  (315 aa)
+ initn: 188 init1: 124 opt: 144  Z-score: 146.5  bits: 35.4 E(516081):  1.2
+Smith-Waterman score: 144; 30.7% identity (60.6% similar) in 127 aa overlap (31-149:176-296)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+                                     ::.: .:.  . :   : .        . :
+sp|P42 VTAGSSDENDENANQQEQGSIRKPSFGQMLADASSQSTTGEIQGSVPMKPVAPGTNLNIG
+         150       160       170       180       190       200     
+
+               70        80        90       100       110       120
+sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+       ..:   ....:      ..::.: .: .:   :: .:. :: ::. : :.:...  .. .
+sp|P42 MDLWSSQAGVP------VKDERELKRQKRKQSNRESARRSRLRKQAECEQLQQRVESLSN
+         210             220       230       240       250         
+
+                 130           140        150       160       170  
+sp|Q1X QNQFL---LQRLS----QMEAENNRLSQQLAQ-LAAEVRGSRANTPMPGSPATASPTLTP
+       .:: :   :::::    ....::: ....: . :.::                       
+sp|P42 ENQSLRDELQRLSSECDKLKSENNSIQDELQRVLGAEAVANLEQNAAGSKDGEGTN    
+     260       270       280       290       300       310         
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+
+>>sp|A2R346|KAPC_ASPNC Putative transcription factor kap  (283 aa)
+ initn: 100 init1:  70 opt: 151  Z-score: 153.7  bits: 36.6 E(516081): 0.48
+Smith-Waterman score: 151; 22.5% identity (52.1% similar) in 213 aa overlap (16-223:44-236)
+
+                              10        20           30         40 
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD-TSLNSADVK
+                                     :  :... : .   :.:: : .... :   
+sp|A2R QTSAQDHADQVLHDQLLAAHQHLSHPQQARPQGPTAQPPHMQPNTTSPRDQNNIDPAISG
+            20        30        40        50        60        70   
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+       .  ..   . : . . . ::: :            ::  ..     .:. .:::: .. :
+sp|A2R AAMLSGPPQTPPQPEPT-GQESP------------KTYGKRPLSTSKRAAQNRAAQRAFR
+            80        90                    100       110       120
+
+             110       120       130       140       150        160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MP
+       .::.  ..:::..  .... :.     ..:..::: .: . . .: ...  :....: .:
+sp|A2R QRKESYIRKLEEQVKEFDNTNE----TMKQLQAENYQLREYIINLQSRLLDSQGEVPELP
+              130       140           150       160       170      
+
+              170       180       190       200       210       220
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV
+       :.    .:    ..        :    : : :. .  .  .     : . :. .   ..:
+sp|A2R GNIDLNQPRNDISV---PPPGAPAATGPAPGPGGAPQQMQVPNPGAATNEDMNSLNRIAV
+        180       190          200       210       220       230   
+
+              230       240       250       260       270       280
+sp|Q1X AGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFD
+       :::                                                         
+sp|A2R AGLGMRKHPNEEANFLGNNFQARRPRNDDGQPDGSEATKTEPGHGLPVVS          
+           240       250       260       270       280             
+
+>>sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gall  (286 aa)
+ initn: 125 init1: 125 opt: 143  Z-score: 146.2  bits: 35.2 E(516081):  1.3
+Smith-Waterman score: 143; 33.3% identity (67.9% similar) in 84 aa overlap (85-167:201-281)
+
+           60        70        80        90       100       110    
+sp|Q1X KRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE
+                                     .. .:.:.::. ::. : ..  . . ::::
+sp|O42 RFSDDQLVSMSVRELNRQLRGFSKEEVIRLKQNRRTLKNRGYAQSCRYKRVQQRHILENE
+              180       190       200       210       220       230
+
+          120       130       140       150        160       170   
+sp|Q1X KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPGSPATASPTLTPT
+       : :...: . : :..:..  : .  ...  .:::  ::  :  .: :..: :..      
+sp|O42 KCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPREPSP-PAAPKTTAADFFM 
+              240       250       260         270        280       
+
+           180       190       200       210       220       230   
+sp|Q1X LFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLF
+
+>>sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-bi  (395 aa)
+ initn: 137 init1: 137 opt: 145  Z-score: 146.2  bits: 35.7 E(516081):  1.3
+Smith-Waterman score: 145; 30.2% identity (62.8% similar) in 129 aa overlap (63-185:159-282)
+
+             40        50        60        70        80        90  
+sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+                                     : .:.: ::    .::: :.  .:..: .:
+sp|O43 TPQHMEELAEQEIARLVLTDEEKSLLEKEGLILPET-LP---LTKTE-EQILKRVRRKIR
+      130       140       150       160           170        180   
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV--
+       :. .:: ::..:.. .  ::.. ...  ::. : .... .: .:  : .:: .: : :  
+sp|O43 NKRSAQESRRKKKVYVGGLESRVLKYTAQNMELQNKVQLLEEQNLSLLDQLRKLQAMVIE
+           190       200       210       220       230       240   
+
+                 160       170        180       190       200      
+sp|Q1X ---RGSRANTPMPGSPATASPTLTPTLFKQE-RDELPLERIPFPTPSLSDYSPTLKPSTL
+          . : ..: .    ..    :.:...... :  :: :                     
+sp|O43 ISNKTSSSSTCILVLLVSFCLLLVPAMYSSDTRGSLPAEHGVLSRQLRALPSEDPYQLEL
+           250       260       270       280       290       300   
+
+        210       220       230       240       250       260      
+sp|Q1X AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSV
+                                                                   
+sp|O43 PALQSEVPKDSTHQWLDGSDCVLQAPGNTSCLLHYMPQAPSAEPPLEWPFPDLFSEPLCR
+           310       320       330       340       350       360   
+
+>>sp|O60841|IF2P_HUMAN Eukaryotic translation initiation  (1220 aa)
+ initn:  64 init1:  64 opt: 151  Z-score: 145.2  bits: 37.1 E(516081):  1.4
+Smith-Waterman score: 151; 24.4% identity (58.3% similar) in 180 aa overlap (7-183:282-455)
+
+                                       10        20        30      
+sp|Q1X                         MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN
+                                     :.  .::.  . ::::  . : . :. . :
+sp|O60 KLKEKEELETGKKDQSKQKESQRKFEEETVKSKVTVDT-GVIPASEEKAETPTAAEDD-N
+             260       270       280        290       300          
+
+         40          50        60        70        80         90   
+sp|Q1X SADVKTQEVKPE--EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE-RVLRN
+        .: : .. : .  ::.  .:.:. :    . :.      . : :.:...:. : :. : 
+sp|O60 EGDKKKKDKKKKKGEKEEKEKEKKKGPSKATVKAMQEALAKLKEEEERQKREEEERIKRL
+     310       320       330       340       350       360         
+
+           100       110       120       130       140       150   
+sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS
+       .      .:..:::.:: : .: : :.. .  :.. ... ....: ..  :. . ..  .
+sp|O60 EELEAKRKEEERLEQEKRERKK-QKEKERKERLKKEGKLLTKSQREARARAEATLKLLQA
+     370       380       390        400       410       420        
+
+           160       170       180       190       200       210   
+sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA
+       .. . .:.. .   :   :    ..: ..:                              
+sp|O60 QG-VEVPSKDSL--PKKRPIYEDKKRKKIPQQLESKEVSESMELCAAVEVMEQGVPEKEE
+      430          440       450       460       470       480     
+
+>>sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiatio  (952 aa)
+ initn:  46 init1:  46 opt: 152  Z-score: 147.6  bits: 37.2 E(516081):  1.1
+Smith-Waterman score: 152; 30.7% identity (54.5% similar) in 202 aa overlap (48-230:735-930)
+
+        20        30        40        50          60        70     
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKK--RKSWGQELPVPKTNLPPRKR
+                                     :: : ::.  :..  .:    . ..  :::
+sp|Q5K QRAARELKQRLGRMLEDYEAVKERIESQMQEELKAAKEEARRKIEEEKAQLREKVIKRKR
+          710       720       730       740       750       760    
+
+          80         90         100           110         120      
+sp|Q1X AKTEDE-KEQRRIERVLRNRA--AAQTSRERKR----LEMEKL--ENEKIQMEQQNQFLL
+        . : . :: :. :.  :..   ::: ..:. :    :: :    :... . : : :  :
+sp|Q5K EEKERKLKEAREAEERKRKEEEEAAQKAEEEARAAAALEAEAAAAEQRRAEREAQRQSDL
+          770       780       790       800       810       820    
+
+         130       140       150       160           170           
+sp|Q1X QRL-SQMEAENNRLSQQLAQLAAEVRGSRANTPMPG----SPATASPTLT---PTLFKQE
+       .:. .:.: :.. : .. :. :: . :. :  : :.    .: ::::. .   :. . ..
+sp|Q5K ERIRAQQEREEEALRRRQAEKAAATSGGSAYRP-PARAGTTPPTASPAPSSGGPSWLARR
+          830       840       850        860       870       880   
+
+      180       190       200       210       220       230        
+sp|Q1X RDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSD
+       .          :. :    ::   ::. : .:  :..   :.:: :..  ::        
+sp|Q5K KAMEAQSAGGAPVAS----SPKPVPSNSAAASAPASNGPESIAG-EAEKPALTGSVWRRG
+           890           900       910       920        930        
+
+      240       250       260       270       280       290        
+sp|Q1X LKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNF
+                                                                   
+sp|Q5K MGARRGMPSTRGGA                                              
+      940       950                                                
+
+>>sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcripti  (118 aa)
+ initn: 115 init1: 115 opt: 135  Z-score: 143.8  bits: 33.5 E(516081):  1.7
+Smith-Waterman score: 135; 33.3% identity (77.8% similar) in 63 aa overlap (83-145:28-90)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     ..:...:  .::.::: ::...  . .::.
+sp|Q9D    MSQGPPAVSVLQRSVDAPGNQPQSPKDDDRKVRRREKNRVAAQRSRKKQTQKADKLH
+                  10        20        30        40        50       
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       .:. ..::.:. : ...:... :  .::. : .                           
+sp|Q9D EEHESLEQENSVLRREISKLKEELRHLSEVLKEHEKMCPLLLCPMNFVQLRSDPVASCLP
+        60        70        80        90       100       110       
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+                                                                   
+sp|Q9D R                                                           
+                                                                   
+
+>>sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-bi  (428 aa)
+ initn: 130 init1: 130 opt: 144  Z-score: 144.8  bits: 35.5 E(516081):  1.5
+Smith-Waterman score: 144; 25.8% identity (55.1% similar) in 178 aa overlap (25-199:161-322)
+
+                     10        20        30        40        50    
+sp|Q1X       MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAK
+                                     .:. .:  ..  : .   . .  :..:   
+sp|Q1L LPDQSGGTQCASETPQAQQTTGFPLTVKDLLLSGTPEPAAKVSQQSYQELILTEDEKRLL
+              140       150       160       170       180       190
+
+           60        70        80        90       100       110    
+sp|Q1X KRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE
+        ..  :. ::   ...:  :     .:.  ..:.: .::. .:: ::..:.  .. ::..
+sp|Q1L AKE--GMTLP---NQFPLTKY----EERILKKIRRKIRNKQSAQESRKKKKEYIDGLESR
+                   200           210       220       230       240 
+
+          120       130       140       150       160       170    
+sp|Q1X KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTL
+             .:. : ... :.:  :  : .:: .: : : .. .: :. ..  .    :. ::
+sp|Q1L MAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG-SNKPVQAGTCVLVLLLSFTL
+             250       260       270       280        290       300
+
+          180       190          200       210       220       230 
+sp|Q1X FKQERDELPLERIPFPTPSLS---DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP
+       .      ::  . ::   ..:   :.::                                
+sp|Q1L IL-----LPNLK-PFTDTKVSQHGDFSPMRVQSRSLHNLQSSRVLRNLDHPYSMTENAKI
+                    310       320       330       340       350    
+
+>>sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xeno  (313 aa)
+ initn: 113 init1: 113 opt: 141  Z-score: 143.8  bits: 34.9 E(516081):  1.7
+Smith-Waterman score: 141; 26.8% identity (60.6% similar) in 142 aa overlap (29-163:171-309)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS
+                                     ::. .: .: ... :. .   .. .. : :
+sp|Q6D HQYQGVHHEEMGLPHHHPHHHQHQHHQTSPSPSGSSSSSQQLHHQQ-QHSSSSAVEDRFS
+              150       160       170       180        190         
+
+       60        70        80           90       100       110     
+sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+         : . .   .:  . :. :.:.    .:.:  :.:.::. ::. : ..  . ..::.::
+sp|Q6D DDQLVSMTVRELNRHLRGFTKDDVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHNLEGEK
+     200       210       220       230         240       250       
+
+         120       130       140           150       160       170 
+sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA----AEVRGSRANTPMPGSPATASPTLT
+        :. :: . : :..:..  : .  . .  .::    .. : . ...  :.::        
+sp|Q6D TQLVQQVEQLKQEVSRLARERDAYKIKCEKLANNNSSNFREAGSTSDNPSSPEFFM    
+       260       270       280       290       300       310       
+
+             180       190       200       210       220       230 
+sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP
+
+>>sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 O  (2158 aa)
+ initn:  95 init1:  82 opt: 157  Z-score: 147.5  bits: 38.4 E(516081):  1.1
+Smith-Waterman score: 157; 27.2% identity (48.4% similar) in 217 aa overlap (18-222:378-571)
+
+                            10        20        30          40     
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSL--NSADVKTQEV
+                                     .:.::.:     :  :.   :.   .:. .
+sp|Q7T RDSDEEGAEGHKDSQSAAAEEPETDGKKGTSPGSELP-----PPKTAWTENARPSETEPA
+       350       360       370       380            390       400  
+
+          50             60        70        80           90       
+sp|Q1X KPEEKKPAKKRK-----SWGQELPVPKTNLPPRKRAKTEDEKE---QRRIERVLRNRAAA
+        :  : :    .     .::     :  . :: :    ::: :   ::: .   .   :.
+sp|Q7T PPTPKPPPPPPHRGPVGNWGPPGDYPDRGGPPCKPPAPEDEDEAWRQRRKQSSSEISLAV
+            410       420       430       440       450       460  
+
+       100       110       120       130        140       150      
+sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRAN
+       . .:.:.. : .....:.     ..   :.::.. . : ..::.   :. ::        
+sp|Q7T ERARRRREEEERRMQEERRAACAEK---LKRLDEKFGAPDKRLK---AEPAA--------
+            470       480          490       500                   
+
+        160       170       180       190       200       210      
+sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD-VAQH
+        : : .::  .:.: :.. :.      :   : :::      :.  : . :  :  ::  
+sp|Q7T -P-PVTPA--APALPPVVPKEIPAAPALPPTPTPTPEKEPEEPAQAPPVQAAPSPGVAPV
+        510         520       530       540       550       560    
+
+         220       230       240       250       260       270     
+sp|Q1X PAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFED
+       :..  .:                                                     
+sp|Q7T PTLVSGGGCTANSNSSGSFEASPVEPQLPSKEGPEPPEEVPPPTTPPAPKMEPKGDGVGS
+          570       580       590       600       610       620    
+
+>>sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcripti  (703 aa)
+ initn:  52 init1:  52 opt: 146  Z-score: 143.7  bits: 36.1 E(516081):  1.7
+Smith-Waterman score: 147; 24.8% identity (51.2% similar) in 254 aa overlap (17-241:260-503)
+
+                             10        20          30           40 
+sp|Q1X               MSCDMEKTMSSVDSLPATPASEVPVLT--VSPADTS---LNSADVK
+                                     :.: : . .:   :.:  .:   : .. ..
+sp|Q99 DGSSGKALPTRKPPLQPKPVVLTTVPMPSRAVPPSTTVLLQSLVQPPPVSPVVLIQGAIR
+     230       240       250       260       270       280         
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+       .:   :  . :  .:::     :.: .. ::.      : :  .: .:...:: .:  ::
+sp|Q99 VQPEGPAPSLPRPERKSI-VPAPMPGNSCPPEV-----DAKLLKRQQRMIKNRESACQSR
+     290       300        310       320            330       340   
+
+             110              120       130            140         
+sp|Q1X ERKRLEMEKLEN-------EKIQMEQQNQFLLQRLSQMEAENNRL-----SQQLAQLAAE
+       ..:.  .. ::        .. :....:  : .::  . :::..:     ..... . . 
+sp|Q99 RKKKEYLQGLEARLQAVLADNQQLRRENAALRRRLEALLAENSELKLGSGNRKVVCIMVF
+           350       360       370       380       390       400   
+
+     150        160       170          180               190       
+sp|Q1X VRGSRANT-PMPGSPATASPTLTPTLFK---QERDEL-------PLERI-PFPTPSLSDY
+       .     :  :.  :   ..: ..: . :   : : .:       :.. . :.   : .  
+sp|Q99 LLFIAFNFGPVSISEPPSAP-ISPRMNKGEPQPRRHLLGFSEQEPVQGVEPLQGSSQGPK
+           410       420        430       440       450       460  
+
+       200       210       220       230       240       250       
+sp|Q1X SPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN
+        :  .:.     :...  :. .   :  : .   :: :.:: .:                
+sp|Q99 EPQPSPTDQPSFSNLTAFPGGAKELLLRDLDQ--LF-LSSDCRHFNRTESLRLADELSGW
+            470       480       490          500       510         
+
+       260       270       280       290       300       310       
+sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE
+                                                                   
+sp|Q99 VQRHQRGRRKIPQRAQERQKSQPRKKSPPVKAVPIQPPGPPERDSVGQLQLYRHPDRSQP
+     520       530       540       550       560       570         
+
+>>sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper tra  (834 aa)
+ initn: 124 init1: 124 opt: 147  Z-score: 143.7  bits: 36.3 E(516081):  1.8
+Smith-Waterman score: 147; 26.9% identity (58.3% similar) in 156 aa overlap (10-157:315-458)
+
+                                    10        20        30         
+sp|Q1X                      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD
+                                     :::. .: .  . . .: ..  ::. .. .
+sp|Q54 TSPSSPSTSNMFLTPMVTTTTTSETSSSSDSSVNIIPNNTNTITNIL-IKEEDTNNGNNN
+          290       300       310       320       330        340   
+
+      40        50                60        70        80        90 
+sp|Q1X VKTQEVKPEEK-----KPAKKR---KSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL
+        :...   . .     .:  ..   :  :.: ::  .. :: .  . :::.. .. .:..
+sp|Q54 KKSKKRTIDSRVQNIVHPLTREELLKIAGKE-PVQVVD-PPTH--NQEDERNVKKQRRLI
+           350       360       370        380          390         
+
+             100       110       120       130       140       150 
+sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR
+       .:: .:: :: ::.. .: ::.   .. :.:       :... :   :.  . ::::.  
+sp|Q54 KNRESAQLSRMRKKIYIEDLEKTISDLTQDN-------SSLKEEVLYLQGLVKQLAAQNS
+     400       410       420       430              440       450  
+
+             160       170       180       190       200       210 
+sp|Q1X GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD
+       .:  :.                                                      
+sp|Q54 NSNNNSVIDINNNNVNNSQQQQQQHQQQQQLNNSNNNNNNNNNNSTNKQQQSKNVKAAGV
+            460       470       480       490       500       510  
+
+>>sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus   (323 aa)
+ initn:  94 init1:  63 opt: 141  Z-score: 143.6  bits: 34.9 E(516081):  1.8
+Smith-Waterman score: 141; 24.4% identity (54.8% similar) in 217 aa overlap (68-271:108-311)
+
+        40        50        60        70          80        90     
+sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK--TEDEKEQRRIERVLRNRA
+                                     :..  :.: .  . .:.:.:::.:  ::. 
+sp|P18 SHPYSHPLPPLSSVAGHTALQRPGVIKTIGTTVGRRRRDEQLSPEEEEKRRIRRE-RNKL
+        80        90       100       110       120       130       
+
+         100       110       120       130       140       150     
+sp|Q1X AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS--
+       ::   :.:.:   :::. :   .:.... : ....... :...:  .:.  .   . :  
+sp|P18 AAAKCRNRRRELTEKLQAETEVLEEEKSVLQKEIAELQKEKEKLEFMLVAHSPVCKISPE
+        140       150       160       170       180       190      
+
+            160       170       180       190          200         
+sp|Q1X -RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSL---SDYSPTLKPSTLAES
+        : . :  .  .. . .   .. :::    :.:.  .:. ::   .    ..:: ..: .
+sp|P18 ERRSPPTSSLQSVRTGASGAVVVKQE----PVEE-EIPSSSLVLDKAQRSVIKPISIAGG
+        200       210       220            230       240       250 
+
+       210       220       230          240       250       260    
+sp|Q1X --SDVAQHPAVSVAGLEGDGSALPLFDLGSD---LKHHSTDDVAAPLSDDDFNRLFHGDS
+         .. : .  . :       .. : .  ::.   . . .. :  .::: ..     :  :
+sp|P18 YYGEEALNTPIVV-------TSTPAITPGSSNLVFTYPNVLDQESPLSPSESCSKAHRRS
+             260              270       280       290       300    
+
+          270       280       290       300       310       320    
+sp|Q1X SVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSS
+       :   :.:                                                     
+sp|P18 SSSGDQSSDSLNSPTLLAL                                         
+          310       320                                            
+
+>>sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus r  (381 aa)
+ initn:  46 init1:  46 opt: 144  Z-score: 145.4  bits: 35.5 E(516081):  1.4
+Smith-Waterman score: 144; 23.5% identity (49.7% similar) in 306 aa overlap (2-291:57-353)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|Q56 LSYYHSPADSFSSMGSPVNAQDFCADLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   : :  .    .    :  : :.   . . .   . .  . .:.:.:::.
+sp|Q56 PSQTRAPHPYGVPTPSTGAYSRAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|Q56 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .: . ..::  ::   :     : .:   :::   : :  :: . .   .
+sp|Q56 ACKIPD-DLGFPEDMSVASLDLTGGLPEAATPESEEAFSLPLLNEPEPKTSLESVKSISS
+             210       220       230       240       250       260 
+
+            210       220        230            240        250     
+sp|Q1X PSTLAESSDVAQHPAVSV-AGLEGDGSALPLFDL-GS----DLKH-HSTDDVAAPLSDDD
+           ::  :     : :  .: :  . ..: .:: ::    : .  ::..   .:.. . 
+sp|Q56 MELKAEPFDDFLFSASSRPSGSETTARSVPDMDLSGSFYAADWEPLHSSSLGMGPMATE-
+             270       280       290       300       310       320 
+
+         260       270       280       290       300       310     
+sp|Q1X FNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLP
+       .. :     .  :. ... ....:   :    ..::                        
+sp|Q56 LEPLCTPVVTCTPSCTTYTSSFVFTYPE---TDSFPSCAAAHRKGSSSNEPSSDSLSSPT
+              330       340          350       360       370       
+
+         320       330       340     
+sp|Q1X DETTCKTSSVQPGFGASTTRCDGQGIAAGC
+                                     
+sp|Q56 LLAL                          
+       380                           
+
+>>sp|O35284|BATF_MOUSE Basic leucine zipper transcriptio  (125 aa)
+ initn:  98 init1:  98 opt: 135  Z-score: 143.5  bits: 33.5 E(516081):  1.8
+Smith-Waterman score: 135; 28.9% identity (62.2% similar) in 90 aa overlap (71-160:17-103)
+
+               50        60        70        80        90       100
+sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS
+                                     :: :. ...:    :...:  .:: ::: :
+sp|O35               MPHSSDSSDSSFSRSPPPGKQDSSDDV---RKVQRREKNRIAAQKS
+                             10        20           30        40   
+
+              110       120       130       140       150       160
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP
+       :.:.  . . :. :. ..:.::  : ....:.  : . ... :..         ..:: :
+sp|O35 RQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEELKYFTSVLSSHEPLCSVLASGTPSP
+            50        60        70        80        90       100   
+
+              170       180       190       200       210       220
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV
+                                                                   
+sp|O35 PEVVYSAHAFHQPHISSPRFQP                                      
+           110       120                                           
+
+>>sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sa  (295 aa)
+ initn: 130 init1: 130 opt: 140  Z-score: 143.2  bits: 34.7 E(516081):  1.9
+Smith-Waterman score: 140; 25.8% identity (54.3% similar) in 151 aa overlap (2-148:142-290)
+
+                                            10           20        
+sp|Q1X                              MSCDMEKTMSSVDSLPA---TPASEVPVLTV
+                                     .: :.. .   . :::   ::.   :    
+sp|Q16 GLQPASSAAPSVMDLSSRASAPLHPGIPSPNC-MQSPIRPGQLLPANRNTPSPIDPDTIQ
+             120       130       140        150       160       170
+
+       30        40        50        60         70        80       
+sp|Q1X SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRI
+        :.    . ::.  . .  .:    .:::   .:: : :  .   ::    .: :...  
+sp|Q16 VPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYW
+              180       190       200       210        220         
+
+        90       100       110       120       130       140       
+sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA
+        :  .:  ::. ::. .::. ...  .   .:..:. : :...... : .. .. ::.  
+sp|Q16 ARRRKNNMAAKRSRDARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYE
+     230       240       250       260       270       280         
+
+       150       160       170       180       190       200       
+sp|Q1X AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA
+       :                                                           
+sp|Q16 ARHGPL                                                      
+     290                                                           
+
+>>sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus mus  (295 aa)
+ initn: 130 init1: 130 opt: 140  Z-score: 143.2  bits: 34.7 E(516081):  1.9
+Smith-Waterman score: 140; 25.8% identity (54.3% similar) in 151 aa overlap (2-148:142-290)
+
+                                            10           20        
+sp|Q1X                              MSCDMEKTMSSVDSLPA---TPASEVPVLTV
+                                     .: :.. .   . :::   ::.   :    
+sp|Q8B GLQPASSTAPSVMDLSSRATAPLHPGIPSPNC-MQSPIRPGQLLPANRNTPSPIDPDTIQ
+             120       130       140        150       160       170
+
+       30        40        50        60         70        80       
+sp|Q1X SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRI
+        :.    . ::.  . .  .:    .:::   .:: : :  .   ::    .: :...  
+sp|Q8B VPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYW
+              180       190       200       210        220         
+
+        90       100       110       120       130       140       
+sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA
+        :  .:  ::. ::. .::. ...  .   .:..:. : :...... : .. .. ::.  
+sp|Q8B ARRRKNNMAAKRSRDARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYE
+     230       240       250       260       270       280         
+
+       150       160       170       180       190       200       
+sp|Q1X AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA
+       :                                                           
+sp|Q8B ARHGPL                                                      
+     290                                                           
+
+>>sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xen  (416 aa)
+ initn:  60 init1:  60 opt: 153  Z-score: 153.3  bits: 37.1 E(516081): 0.51
+Smith-Waterman score: 153; 29.8% identity (53.0% similar) in 181 aa overlap (39-210:79-238)
+
+       10        20        30        40        50        60        
+sp|Q1X MSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKT
+                                     : :: .: ::.:.  :: :    :.  ::.
+sp|Q63 VYSGEGSIENAFILYNKYITLFIEKLPKHRDYKTANV-PEKKETLKKLK----EIAFPKA
+       50        60        70        80         90           100   
+
+            70        80        90          100       110       120
+sp|Q1X N-----LPPRKRAKTEDEKEQRRIERVLRNRAAA---QTSRERKRLEMEKLENEKIQMEQ
+       .     :  : . . :. .:..: :.  : :  :   : . :..:. . : ..:  :.::
+sp|Q63 EELKKELHKRYKKEYEEYSEKQRKEEEERARRLALQQQLDAEKQRVALLKQQQE--QQEQ
+           110       120       130       140       150         160 
+
+               130       140       150       160       170         
+sp|Q1X QNQFL-LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER
+        . :  ..: ...:::  :. .:...   :..    ..:.   :.   : .:: :     
+sp|Q63 VQAFEEMMRRKELEAERLRILHQFSKDEPEAEP--LGSPL--IPGMNEPPVTPLL-----
+             170       180       190           200       210       
+
+     180       190       200       210       220       230         
+sp|Q1X DELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL
+          :      : :   : :  ::::. . .:                             
+sp|Q63 ---PSYGTVQPHPPAVDRS--LKPSSYGSNSSGVTSDGLRHVKIPRDVCCKFLQLSENNT
+               220         230       240       250       260       
+
+     240       250       260       270       280       290         
+sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD
+                                                                   
+sp|Q63 QRGVETCGILCGKLLQNEFTVTHVIVPKQSGGPDYCNTESEEELFLIQDQQGLITLGWIH
+       270       280       290       300       310       320       
+
+>>sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Dr  (466 aa)
+ initn: 103 init1:  74 opt: 142  Z-score: 142.4  bits: 35.2 E(516081):  2.1
+Smith-Waterman score: 142; 25.5% identity (57.1% similar) in 184 aa overlap (8-181:14-192)
+
+                     10        20            30        40        50
+sp|Q1X       MSCDMEKTMSSVDSLPATPASEVPVLTVS----PADTSLNSADVKTQEVKPEEK
+                    ... : .::   : ..::  :     :.  :: . .::..:::::: 
+sp|P29 MKPVALILVFLAISQARVLNLPKE-AIDIPVAIVEDKEPPVALSLVKEEVKAEEVKPEEV
+               10        20         30        40        50         
+
+                60        70        80        90       100         
+sp|Q1X KP-AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+       :: :...:.   .  :     :  :.    : :..  :.. :.     .  .:. . ...
+sp|P29 KPIAQEEKAKDLKEEVKPEIKPEIKEQPKPDIKDE--IKEDLKADIKEEL-KEKIEEQIN
+      60        70        80        90         100        110      
+
+     110       120       130       140       150       160         
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS--
+       .: : :  .: ... :  . . .: ...  . .. . :.:..   :.. . . ::  .  
+sp|P29 ELPNAK-PLELKEKSLEAEEKPQEIKEEVQQPEIKKEATEIKEEPAQNILKSLPAEETVV
+        120        130       140       150       160       170     
+
+          170       180       190       200       210       220    
+sp|Q1X -PT--LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLE
+        :.  :.:.  .::..:                                           
+sp|P29 VPAEELSPNPVEQEQSENQDAAHPQVRQATQATPTQQSTTQGNFVQQLIQNSPIGQFLNQ
+         180       190       200       210       220       230     
+
+>>sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcripti  (699 aa)
+ initn:  52 init1:  52 opt: 146  Z-score: 143.8  bits: 36.1 E(516081):  1.7
+Smith-Waterman score: 147; 23.6% identity (50.8% similar) in 254 aa overlap (16-241:259-500)
+
+                              10        20        30          40   
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS--LNSADVKTQ
+                                     :.. :  .  :. .:: .   : .. ...:
+sp|O35 SSGKAPATRKPPLQPKPVVLTTVPVPPRAGPTSAAVLLQPLVQQPAVSPVVLIQGAIRVQ
+      230       240       250       260       270       280        
+
+            50        60        70        80        90       100   
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER
+          :    :  .:::     :.: .. ::.      : :  .: .:...:: .:  ::..
+sp|O35 PEGPAPAAPRPERKSI-VPAPMPGNSCPPE-----VDAKLLKRQQRMIKNRESACQSRRK
+      290       300        310            320       330       340  
+
+           110              120       130            140       150 
+sp|Q1X KRLEMEKLEN-------EKIQMEQQNQFLLQRLSQMEAENNRL-----SQQLAQLAAEVR
+       :.  .. ::        .. :....:  : .::  . :::. :     ..... . . . 
+sp|O35 KKEYLQGLEARLQAVLADNQQLRRENAALRRRLEALLAENSGLKLGSGNRKVVCIMVFLL
+            350       360       370       380       390       400  
+
+              160       170        180       190       200         
+sp|Q1X GSRANT-PMPGSPATASPTLTPTLFKQE-RDELPLERIPFPTPSLSDYSPTLKPSTLAES
+           :  :.  :    .: ..: . ..: : .  :  .  : :. .     ..:   : .
+sp|O35 FIAFNFGPVSISEPPPAP-MSPRMSREEPRPQRHLLGFSEPGPAHG-----MEPLREAAQ
+            410       420        430       440            450      
+
+     210              220       230            240       250       
+sp|Q1X SDVAQHPAVS-------VAGLEGDGSALPLFDL-----GSDLKHHSTDDVAAPLSDDDFN
+       :   :.:. .       .... : .. : : ::     .:: .:                
+sp|O35 SPGEQQPSSAGRPSFRNLTAFPGGAKELLLRDLDQLFLSSDCRHFNRTESLRLADELSGW
+        460       470       480       490       500       510      
+
+       260       270       280       290       300       310       
+sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE
+                                                                   
+sp|O35 VQRHQRGRRKIPHRAQERQKSQLRKKSPPVKPVPTQPPGPPERDPVGQLQLYRHPGRSQP
+        520       530       540       550       560       570      
+
+>>sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schi  (171 aa)
+ initn: 159 init1: 112 opt: 154  Z-score: 159.5  bits: 36.9 E(516081): 0.23
+Smith-Waterman score: 154; 25.8% identity (55.8% similar) in 163 aa overlap (74-223:4-163)
+
+            50        60        70        80        90       100   
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER
+                                     :. ...:::..: .:   ::: ::.  :..
+sp|Q09                            MTAKKKEVDDEKRRRILE---RNRIAASKFRQK
+                                          10           20        30
+
+           110       120       130       140            150        
+sp|Q1X KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL-----AQLAAEVRG-----S
+       :.  ...::.      .:.. :   :::.. :  ::..::      : ....:.     .
+sp|Q09 KKEWIKELEQTANAAFEQSKRLQLLLSQLQQEAFRLKSQLLAHQGCQCSVKIRSVLTDFQ
+               40        50        60        70        80        90
+
+           160       170          180       190       200       210
+sp|Q1X RANTPMPGSPATASPTLTP---TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+        :.. . ..  .  :.  :   .....  .  : .  :       .  : . ::.   .:
+sp|Q09 TAHNALHSQHMAYRPVQPPPGDNMLESVVSVSPTQMHPSLQGLPPNQHPQMPPSSQQPNS
+              100       110       120       130       140       150
+
+              220       230       240       250       260       270
+sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS
+       : .:.   :.:::                                               
+sp|Q09 DDVQQHMFSAAGLPRSLGGPI                                       
+              160       170                                        
+
+>>sp|O13024|INCEA_XENLA Inner centromere protein A OS=Xe  (873 aa)
+ initn: 111 init1: 111 opt: 145  Z-score: 141.5  bits: 36.0 E(516081):  2.3
+Smith-Waterman score: 145; 25.5% identity (60.6% similar) in 137 aa overlap (41-172:629-763)
+
+               20        30        40        50        60        70
+sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL
+                                     . .:   ..:: :. ..   ::    .  :
+sp|O13 RRKQEEEARRLKVKQMEEEERRHQELLQKKREEEELERQKKIAEAKRLAEQERE--RQLL
+      600       610       620       630       640       650        
+
+               80        90            100       110       120     
+sp|Q1X PPRKRAKTEDEKEQRRIERVLR-----NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL
+         ..: ..: :::. . :..:.     .::: .  ..:.. : .: .... ..::.    
+sp|O13 AEKERLRAEREKERIEKEKALQLQRELERAAQEKEQQRREAEERKKREQQERLEQERLRK
+        660       670       680       690       700       710      
+
+         130       140       150       160       170       180     
+sp|Q1X LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE
+        :. .... :..: ... : .:: .    ... : .:::  :  .::             
+sp|O13 EQEAKRLQEEEQRKAKEQAAVAASAPVMNVTVDMQNSPACESYEMTPKSCKVPSVKVNED
+        720       730       740       750       760       770      
+
+         190       200       210       220       230       240     
+sp|Q1X RIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD
+                                                                   
+sp|O13 NYGMDLNSDDSTDDESQPRKPIPAWASGNLLTQAIRQQYYKPIDVDRMYGTIDSPKLEEL
+        780       790       800       810       820       830      
+
+>>sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1 subu  (885 aa)
+ initn: 102 init1:  65 opt: 146  Z-score: 142.4  bits: 36.1 E(516081):  2.1
+Smith-Waterman score: 146; 22.8% identity (60.2% similar) in 206 aa overlap (8-210:234-432)
+
+                                      10        20        30       
+sp|Q1X                        MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNS
+                                     : .:  :  .::....    .: :. . ..
+sp|A0J SSADDDSVSVSSSSSPVSLSSPDVQTGSKFTNGSSPSTSTTPTGKATSNKTS-AEKKKTK
+           210       220       230       240       250        260  
+
+        40        50        60        70        80         90      
+sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRI-ERVLRNRAA
+         .. .... ::.. :...   ...:   : .   ..: : . ::..:.  :.. .::  
+sp|A0J DKAEKRQAEKEERECARREARAAKDLAKKKREGEREQREKDKKEKKEREDREKAEKNRLK
+            270       280       290       300       310       320  
+
+        100        110       120       130       140       150     
+sp|Q1X AQTSRER-KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA
+        . ..:. . :: .. :..: . :....   .::..   :..:.. . :...  ..  . 
+sp|A0J EEKKKEKLEALEAKQEEKRKKEEEKRQKEEEKRLKE---EEKRIKAEKAEITRFLQ--KP
+            330       340       350          360       370         
+
+          160       170       180       190       200       210    
+sp|Q1X NTPM-PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQ
+       .::. : . : .   ..:  .:.     :: :: :   .  . .  :. .: .:::    
+sp|A0J KTPQAPKTFARSCGKFAPFEIKKGMALAPLCRIDFEQEASEELDIFLQEQT-SESSFLDE
+       380       390       400       410       420        430      
+
+          220       230       240       250       260       270    
+sp|Q1X HPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE
+                                                                   
+sp|A0J IKKRRPRKMGQTTVPTINSVEVDDVQVLGETDPVLGSNMVLEEHIKDIGVPERKKFGRMK
+        440       450       460       470       480       490      
+
+>>sp|Q5RDE1|IF2P_PONAB Eukaryotic translation initiation  (1220 aa)
+ initn:  64 init1:  64 opt: 147  Z-score: 141.4  bits: 36.4 E(516081):  2.3
+Smith-Waterman score: 147; 23.9% identity (58.3% similar) in 180 aa overlap (7-183:282-455)
+
+                                       10        20        30      
+sp|Q1X                         MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN
+                                     :.  ..:.  . ::::  . : . :. . :
+sp|Q5R KLKEKEESETGKKDQSKQKESQRKSEEETVKSKVTLDT-GVIPASEEKAETPTAAEDD-N
+             260       270       280        290       300          
+
+         40          50        60        70        80         90   
+sp|Q1X SADVKTQEVKPE--EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE-RVLRN
+        .: : .. : .  ::.  .:.:. :    . :.      . : :.:...:. : :. : 
+sp|Q5R EGDKKKKDKKKKKGEKEEKEKEKKKGPSKATVKAMQEALAKLKEEEERQKREEEERIKRL
+     310       320       330       340       350       360         
+
+           100       110       120       130       140       150   
+sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS
+       .      .:..:::.:: : .: : :.. .  :.. ... ....: ..  :. . ..  .
+sp|Q5R EELEAKRKEEERLEQEKRERKK-QKEKERKERLKKEGKLLTKSQREARARAEATLKLLQA
+     370       380       390        400       410       420        
+
+           160       170       180       190       200       210   
+sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA
+       .. . .:.. .   :   :    ..: ..:                              
+sp|Q5R QG-VEVPSKDSL--PKKRPIYEDKKRKKIPQQLESKEVSESMELCAAVEVMEQGVPEKEE
+      430          440       450       460       470       480     
+
+>>sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xeno  (289 aa)
+ initn:  96 init1:  96 opt: 138  Z-score: 141.4  bits: 34.4 E(516081):  2.3
+Smith-Waterman score: 138; 30.6% identity (68.2% similar) in 85 aa overlap (83-167:203-284)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     .:.:  :.:.::. ::. : ..  . . ::
+sp|Q4U RFSDEQLVSMSVRELNRQLRGFSKEEVIRLKQKR--RTLKNRGYAQSCRYKRVQQRHILE
+            180       190       200         210       220       230
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       .:: :...: . : :..:..  : .  ...  .::..   .: . :. :.:. :.     
+sp|Q4U TEKCQLQSQVEQLKQEVSRLAKERDLYKDKYEKLASRSFTTRESPPQ-GNPGKANADFFM
+              240       250       260       270        280         
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+
+>>sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus no  (295 aa)
+ initn: 127 init1: 127 opt: 138  Z-score: 141.3  bits: 34.4 E(516081):  2.4
+Smith-Waterman score: 138; 29.4% identity (55.9% similar) in 136 aa overlap (16-148:163-290)
+
+                              10        20          30        40   
+sp|Q1X                MSCDMEKTMSSVDSLPATPAS-EVPV-LTVSPADTSLNSADVKTQ
+                                     :  : . .:::    .::: .:.:      
+sp|Q64 PLHPGIPSPNCMQNPIRPGQLLPANRNTPSPIDPDTIQVPVGYEPDPADLALSSIP----
+            140       150       160       170       180            
+
+            50        60         70        80        90       100  
+sp|Q1X EVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE
+          ::   : .:::   .:: : :  .   ::    .: :...   :  .:  ::. ::.
+sp|Q64 --GPEMFDP-RKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYWARRRKNNMAAKRSRD
+        190        200       210        220       230       240    
+
+            110       120       130       140       150       160  
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS
+        .::. ...  .   .:..:. : :...... : .. .. ::.  :              
+sp|Q64 ARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYEARHGPL         
+          250       260       270       280       290              
+
+            170       180       190       200       210       220  
+sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG
+
+>>sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_G028  (412 aa)
+ initn:  71 init1:  71 opt: 140  Z-score: 141.2  bits: 34.8 E(516081):  2.4
+Smith-Waterman score: 140; 18.5% identity (63.1% similar) in 157 aa overlap (22-170:171-321)
+
+                        10        20         30        40        50
+sp|Q1X          MSCDMEKTMSSVDSLPATPASEVPV-LTVSPADTSLNSADVKTQEVKPEEK
+                                     ..:.   .. ...: ::     :. .:...
+sp|Q54 VECDFKMATNTPGSEQAQQQQQQQQQQQLGDIPIKQQITSSNNSGNS-----QQQQPQQQ
+              150       160       170       180            190     
+
+               60        70        80        90       100       110
+sp|Q1X KPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEK
+       .  .....  :. :  . .    .. .  ....:..... :...   : . ....:....
+sp|Q54 QQQQQQQQQQQQQPQQQQQQQQPQQQQHLQQQHQQQVQQ-LQQQQLQQQQLQQQQLQQQQ
+         200       210       220       230        240       250    
+
+              120       130       140           150          160   
+sp|Q1X LENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA----AEVRGSRANT---PMPGSP
+       :.....:. : .:.   . .:.. . .   ::: :.     :. . ..:.     : .::
+sp|Q54 LQQQQLQQPQLQQMQQPQQQQQQQQPQYTPQQLMQFQQMQQAQQQQQQAQQLQQQMGSSP
+          260       270       280       290       300       310    
+
+           170       180       190       200       210       220   
+sp|Q1X ATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL
+       . .:::.                                                     
+sp|Q54 THSSPTIKQEGLTGYTQIPQGGIINTNTNLNGTGGVSPNQPMPNSSPILPTNASSVVPPV
+          320       330       340       350       360       370    
+
+>>sp|P15336|ATF2_HUMAN Cyclic AMP-dependent transcriptio  (505 aa)
+ initn:  65 init1:  65 opt: 141  Z-score: 141.0  bits: 35.1 E(516081):  2.5
+Smith-Waterman score: 141; 27.2% identity (62.5% similar) in 136 aa overlap (15-143:278-412)
+
+                               10        20        30        40    
+sp|Q1X                 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ-
+                                     : :. ... : .: . .  . .:. :.:: 
+sp|P15 LVRPVTMVPSVPGIPGPSSPQPVQSEAKMRLKAALTQQHPPVTNGDTVKGHGSGLVRTQS
+       250       260       270       280       290       300       
+
+              50            60        70        80        90       
+sp|Q1X -EVKPEE-KKPAKKRK----SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA
+        : .:.  ..:: .      : ..  :  ...   :.:: .::  :.:: . . ::::::
+sp|P15 EESRPQSLQQPATSTTETPASPAHTTPQTQSTSGRRRRAANEDPDEKRR-KFLERNRAAA
+       310       320       330       340       350        360      
+
+       100       110       120       130       140       150       
+sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT
+       .  :..... ...::..  .. . :  : .... .. :  .:.: :              
+sp|P15 SRCRQKRKVWVQSLEKKAEDLSSLNGQLQSEVTLLRNEVAQLKQLLLAHKDCPVTAMQKK
+        370       380       390       400       410       420      
+
+       160       170       180       190       200       210       
+sp|Q1X PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPA
+                                                                   
+sp|P15 SGYHTADKDDSSEDISVPSSPHTEAIQHSSVSTSNGVSSTSKAEAVATSVLTQMADQSTE
+        430       440       450       460       470       480      
+
+>>sp|Q553B1|DDX46_DICDI ATP-dependent RNA helicase ddx46  (1151 aa)
+ initn:  54 init1:  54 opt: 146  Z-score: 140.8  bits: 36.2 E(516081):  2.5
+Smith-Waterman score: 146; 21.7% identity (52.6% similar) in 272 aa overlap (16-275:149-410)
+
+                              10        20          30        40   
+sp|Q1X                MSCDMEKTMSSVDSLPATPA--SEVPVLTVSPADTSLNSADVKTQ
+                                     :  :   :. :..  .:   .    . . :
+sp|Q55 QQQPHIQAPPPAKPRKSRFDQAPETIPIQAPQQPPMISNQPIFKQQPMYQQPMYQQKQQQ
+      120       130       140       150       160       170        
+
+            50          60        70              80          90   
+sp|Q1X EVKPEEKKPAKKRKS--WGQELPVPKTNLPP------RKRAKTEDEKEQRRI--ERVLRN
+          :  ..  :...   . .. : :  . ::      ...  . ....:.:.  : .  .
+sp|Q55 PQPPIFQQQQKQQQPPIFQHHQPPPIYQQPPVYQQQQQQQQPVFQQQQQQRVATEAIQFQ
+      180       190       200       210       220       230        
+
+           100       110       120       130       140       150   
+sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS
+       ..  : . :..::..:. :::: ..:: :    ..  . ..:. : .:.: :   .. ::
+sp|Q55 QTPQQLAIEQERLKQER-ENEK-KIEQANLEEEMKKRREKVEQWR-KQKLEQ-ELKASGS
+      240       250         260       270       280         290    
+
+           160       170       180       190       200       210   
+sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA
+        .:.   .:: :.. : : :             ::    . .  ::  :  .: :  ..:
+sp|Q55 -SNSGSTSSPPTTTTTTTKTTAATTTATTSPLTIPSQQQQTATTSPIKKKWSLEEEEETA
+           300       310       320       330       340       350   
+
+           220       230       240       250       260       270   
+sp|Q1X QHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVF
+       : : :.. ..:     ::     ...   ..  ..: ..   ... .. :....: .. .
+sp|Q55 Q-PLVNT-NIEQKEIKLP---PTANIPAAAATTTSATINTTTIKQSIEEDDDIDPLDAYM
+             360          370       380       390       400        
+
+           280       290       300       310       320       330   
+sp|Q1X EDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGAST
+       :.                                                          
+sp|Q55 ENLNKEANLNLKKSKTSQMIDDDEKLEEESEGEDDGKDKTIKKGKKEMLHTDHTSIKYAE
+      410       420       430       440       450       460        
+
+>>sp|P48634|BAT2_HUMAN Large proline-rich protein BAT2 O  (2157 aa)
+ initn: 121 init1:  68 opt: 149  Z-score: 140.0  bits: 37.0 E(516081):  2.8
+Smith-Waterman score: 154; 27.0% identity (50.9% similar) in 222 aa overlap (18-228:380-575)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     .: :: :.  .. :.::    ...     :
+sp|P48 SDEEGAEGHRDSQSASGEERPPEADGKKGNSPNSEPPTPKTAWAETS-RPPETEPGPPAP
+     350       360       370       380       390        400        
+
+        50           60        70        80           90       100 
+sp|Q1X EEKKPAKKRK---SWGQELPVPKTNLPPRKRAKTEDEKE---QRRIERVLRNRAAAQTSR
+       .   :  .:    .::     :  . :: :    ::: :   ::: .   .   :.. .:
+sp|P48 KPPLPPPHRGPAGNWGPPGDYPDRGGPPCKPPAPEDEDEAWRQRRKQSSSEISLAVERAR
+      410       420       430       440       450       460        
+
+             110       120       130        140       150       160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRANTPMP
+       .:.. : .....:.     ..   :.::.. . : ..::.   :. ::         : :
+sp|P48 RRREEEERRMQEERRAACAEK---LKRLDEKFGAPDKRLK---AEPAA---------P-P
+      470       480          490       500          510            
+
+              170       180       190       200       210       220
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV
+       ..:.: .:   :.. :    :::    : : :. :  .:  .:   :..  . . :. .:
+sp|P48 AAPSTPAPP--PAVPK----ELPAP--PAPPPA-SAPTPEKEPEEPAQAPPAQSTPTPGV
+            520             530          540       550       560   
+
+                  230       240       250       260       270      
+sp|Q1X AG----LEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDG
+       :.    . : ::                                                
+sp|P48 AAAPTLVSGGGSTSSTSSGSFEASPVEPQLPSKEGPEPPEEVPPPTTPPVPKVEPKGDGI
+           570       580       590       600       610       620   
+
+>>sp|Q5TM26|BAT2_MACMU Large proline-rich protein BAT2 O  (2160 aa)
+ initn: 122 init1:  68 opt: 149  Z-score: 140.0  bits: 37.0 E(516081):  2.8
+Smith-Waterman score: 152; 25.6% identity (49.6% similar) in 242 aa overlap (18-251:380-589)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     .: ::.:   .. :.::    ...     :
+sp|Q5T SDEEGAEGHKDSQSASGEERPTEADGKKGNSPNSELPPPKTAWAETS-RPPETEPGPPAP
+     350       360       370       380       390        400        
+
+        50           60        70        80           90       100 
+sp|Q1X EEKKPAKKRK---SWGQELPVPKTNLPPRKRAKTEDEKE---QRRIERVLRNRAAAQTSR
+       .   :  .:    .::     :  . :: :    ::: :   ::: .   .   :.. .:
+sp|Q5T KPPLPPPHRGPAGNWGPPGDYPDRGGPPCKPPAPEDEDEAWRQRRKQSSSEISLAVERAR
+      410       420       430       440       450       460        
+
+             110       120       130        140       150       160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRANTPMP
+       .:.. : .....:.     ..   :.::.. . : ..::.   :. ::         : :
+sp|Q5T RRREEEERRMQEERRAACAEK---LKRLDEKFGAPDKRLK---AEPAA---------P-P
+      470       480          490       500          510            
+
+              170       180       190       200       210       220
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV
+       ..:.: .:   :.. :    :::    :         ::.  :.   :  . :: : .. 
+sp|Q5T AAPSTPAPP--PAVPK----ELPAPLAP---------SPASAPTPEKEPEESAQAPPAQC
+            520             530                540       550       
+
+              230       240        250       260       270         
+sp|Q1X AGLEGDGSALPLFDLGSDLKHHSTDDV-AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF
+       .   : ..:  : . :.. .  :. .  :.:.                            
+sp|Q5T TPTPGVAAAPTLVSGGGSTSSTSSGSFEASPVEPQLPSKEGPEPPEEVPPPTTPPAPKVE
+       560       570       580       590       600       610       
+
+     280       290       300       310       320       330         
+sp|Q1X DVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQ
+                                                                   
+sp|Q5T PKGDGIGPTRQPPSQGLGYPKYQKSLPPRFQRQQQEQLLKQQQQQQWQQHQQGSAPPTPV
+       620       630       640       650       660       670       
+
+>>sp|A3BYC1|HOX25_ORYSJ Homeobox-leucine zipper protein   (320 aa)
+ initn:  43 init1:  43 opt: 137  Z-score: 139.9  bits: 34.2 E(516081):  2.9
+Smith-Waterman score: 137; 23.4% identity (56.0% similar) in 282 aa overlap (24-294:48-314)
+
+                      10        20        30        40        50   
+sp|Q1X        MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEK---
+                                     : ::..  .  :.  :.  .    .:.   
+sp|A3B YSLERVAYVCERVGSPVMEEAELRRRRRKRPFLTTTHDELELQMEDLVDELYGVDEQGSS
+        20        30        40        50        60        70       
+
+                60        70        80          90       100       
+sp|Q1X -KPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER--VLRNRAAAQTSRERKRLE
+          :.::.  .... . . ..  .:: : : :....  .:  .   ..:.  . .: : .
+sp|A3B SAAARKRRLTAEQVRALERSFEEEKR-KLEPERKSELARRLGIAPRQVAVWFQNRRARWK
+        80        90       100        110       120       130      
+
+       110       120       130       140       150       160       
+sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS
+        ..:: .  ...  .. ::   . . :.:. : .:.  :. ..... ...: : ::: : 
+sp|A3B TKQLELDFDRLRAAHDELLAGRTALAADNESLRSQVILLTEKLQAN-GKSPSP-SPAPAE
+        140       150       160       170       180         190    
+
+       170       180       190       200       210       220       
+sp|Q1X PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG
+        : .:.  .. .. . ::.       : : . .   .: . .. ::. ::. ::. .. .
+sp|A3B QTAVPAAPESAKS-FQLEE----GRRLYDAAGSTT-TTNGGGGGVAM-PAARVAAARAAS
+          200        210           220        230        240       
+
+       230         240       250          260       270       280  
+sp|Q1X SALP--LFDLGSDLKHHSTDDVAAPLSDDDF---NRLFHGDSSVEPDSSVFEDGLAFDVL
+       .  :   :  . .    : :: ..  ::::.   . :.  :...  :.  :: ..:  : 
+sp|A3B NDSPESYFAGARSPPSSSEDDCGGAGSDDDYPSSSVLLPVDATLVGDA--FEHAVAATV-
+       250       260       270       280       290         300     
+
+            290       300       310       320       330       340  
+sp|Q1X EGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIA
+        ..:  : :..:                                                
+sp|A3B -AADEEA-PLNSWEWFWN                                          
+           310        320                                          
+
+>>sp|P16951|ATF2_MOUSE Cyclic AMP-dependent transcriptio  (487 aa)
+ initn:  65 init1:  65 opt: 139  Z-score: 139.3  bits: 34.7 E(516081):  3.1
+Smith-Waterman score: 139; 27.2% identity (62.5% similar) in 136 aa overlap (15-143:260-394)
+
+                               10        20        30        40    
+sp|Q1X                 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ-
+                                     : :. ... : .: . .  . .:. :.:: 
+sp|P16 LVRPVTMVPSVPGIPGPSSPQPVQSEAKMRLKAALTQQHPPVTNGDTVKGHGSGLVRTQS
+     230       240       250       260       270       280         
+
+              50            60        70        80        90       
+sp|Q1X -EVKPEE-KKPAKKRK----SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA
+        : .:.  ..:: .      : ..  :  ...   :.:: .::  :.:: . . ::::::
+sp|P16 EESRPQSLQQPATSTTETPASPAHTTPQTQNTSGRRRRAANEDPDEKRR-KFLERNRAAA
+     290       300       310       320       330        340        
+
+       100       110       120       130       140       150       
+sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT
+       .  :..... ...::..  .. . :  : .... .. :  .:.: :              
+sp|P16 SRCRQKRKVWVQSLEKKAEDLSSLNGQLQSEVTLLRNEVAQLKQLLLAHKDCPVTAMQKK
+      350       360       370       380       390       400        
+
+       160       170       180       190       200       210       
+sp|Q1X PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPA
+                                                                   
+sp|P16 SGYHTADKDDSSEDLSVPSSPHTEAIQHSSVSTSNGVSSTSKAEAVATSVLTQMADQSTE
+      410       420       430       440       450       460        
+
+>>sp|Q96RN5|MED15_HUMAN Mediator of RNA polymerase II tr  (788 aa)
+ initn: 164 init1:  84 opt: 142  Z-score: 139.3  bits: 35.4 E(516081):  3.1
+Smith-Waterman score: 142; 19.1% identity (59.5% similar) in 220 aa overlap (5-221:119-331)
+
+                                         10        20        30    
+sp|Q1X                           MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS
+                                     : . ::   . :   .. .:  ... ..:.
+sp|Q96 TGGPAAGAAGIGMPPRGPGQSLGGMGSLGAMGQPMSLSGQPPPGTSGMAP-HSMAVVSTA
+       90       100       110       120       130        140       
+
+           40        50        60        70        80        90    
+sp|Q1X LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR
+         ..... :.:  ....  .. ..  :     . .   ... ....   :.... :....
+sp|Q96 TPQTQLQLQQVALQQQQQQQQFQQQQQAALQQQQQQQQQQQFQAQQSAMQQQFQAVVQQQ
+       150       160       170       180       190       200       
+
+          100       110       120       130       140       150    
+sp|Q1X AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR
+          : ...... .. ::.... :. ::.:  :::..:.. .... .::  :   . .. .
+sp|Q96 QQLQQQQQQQQ-HLIKLHHQNQQQIQQQQQQLQRIAQLQLQQQQQQQQQQQQQQQ-QALQ
+       210        220       230       240       250       260      
+
+          160       170        180         190       200       210 
+sp|Q1X ANTPMPGSPATASPTLTPTL-FKQERDEL--PLERIPFPTPSLSDYSPTLKPSTLAESSD
+       :. :.  .:   .:   :.  . :. ...    .. : : :.    . . .:: :  .:.
+sp|Q96 AQPPIQ-QPPMQQPQPPPSQALPQQLQQMHHTQHHQPPPQPQQPPVAQN-QPSQLPPQSQ
+         270        280       290       300       310        320   
+
+             220       230       240       250       260       270 
+sp|Q1X VAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS
+       .  .: :: :                                                  
+sp|Q96 T--QPLVSQAQALPGQMLYTQPPLKFVRAPMVVQQPPVQPQVQQQQTAVQTAQAAQMVAP
+             330       340       350       360       370       380 
+
+>>sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kap  (284 aa)
+ initn:  70 init1:  70 opt: 142  Z-score: 145.3  bits: 35.0 E(516081):  1.4
+Smith-Waterman score: 142; 24.2% identity (51.6% similar) in 215 aa overlap (16-223:44-237)
+
+                              10        20           30         40 
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD-TSLNSADVK
+                                     :  ::.. : .   :.:: : .... :   
+sp|Q2U QTSAQDHADQVLHDQLLAAHQHLSHPQQPRPQPPAAQPPHMQPNTTSPRDQNNIDPAISG
+            20        30        40        50        60        70   
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+       .  ..   . : . . . ::: :            ::  ..     .:. .:::: .. :
+sp|Q2U AAMLSGPPQTPPQPEPT-GQESP------------KTYGKRPLSTSKRAAQNRAAQRAFR
+            80        90                    100       110       120
+
+             110       120         130       140       150         
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQF--LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-
+       .::.  ..:::      :: ..:  . . .. ..::: .: . . .: ...  :....: 
+sp|Q2U QRKESYIRKLE------EQVKEFDTMSEAFKALQAENYQLREYIINLQSRLLESQGEVPE
+              130             140       150       160       170    
+
+      160       170       180       190       200       210        
+sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV
+       .::.   ..:  :     :            :.:  :  . .  :.  : ..:. .   .
+sp|Q2U LPGNIDLSQPR-TDLNVPQPGAGPATTSSSAPAPP-SGAQQAQPPQGAASNDDMNSLNRI
+          180        190       200        210       220       230  
+
+      220       230       240       250       260       270        
+sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLA
+       .::::                                                       
+sp|Q2U AVAGLGMRKHPNEEANYLGNNFTGRRTRPDETQADSEVTKTEQAPHGLPMVS        
+            240       250       260       270       280            
+
+>>sp|Q80U35|ARHGH_MOUSE Rho guanine nucleotide exchange   (2057 aa)
+ initn:  95 init1:  56 opt: 147  Z-score: 138.4  bits: 36.6 E(516081):  3.5
+Smith-Waterman score: 147; 24.5% identity (52.9% similar) in 208 aa overlap (19-214:838-1039)
+
+                           10        20        30        40        
+sp|Q1X             MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADV-KTQEVKP
+                                     :..: :.  : :     .:  .   : ..:
+sp|Q80 EDRIAGKTPKKKSLSDPSRRGELTGPGFEGPGGE-PIREVEPMLPPSSSEPILAEQWTEP
+       810       820       830       840        850       860      
+
+        50        60        70        80        90       100       
+sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK-RL
+       :.  ::. : .  . ::.:     : . .  .: . . ..  ::  : . . :..:  : 
+sp|Q80 EDPAPARGRAQSERSLPAP-----PASSTAHHDFHLDPKLTSVLSPRLTRRGSKKRPARS
+        870       880            890       900       910       920 
+
+        110       120       130       140           150       160  
+sp|Q1X EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA----AEVRGSRANTPMP-G
+         ..:. :. ...: ...   : :. ....  .   .. ..    :   :  . .: : :
+sp|Q80 SHQELRREEGNQDQTGSLTQTRSSSKHVRHASVPATFTPIVVPEPAMSVGPPVAAPEPVG
+             930       940       950       960       970       980 
+
+             170         180         190        200       210      
+sp|Q1X SPATASPTL-TPTLFK-QERDELPLER--IPFPTP-SLSDYSPTLKPSTLAESSDVAQHP
+        :. . :.: .:.:    .:  : :.   .: : : .:    :.  ::: .. : .:.  
+sp|Q80 FPVRGHPALQAPSLEDVTKRYMLTLHSGDVPAPGPVDLPCLPPSAPPSTETKPSGAARAT
+             990      1000      1010      1020      1030      1040 
+
+        220       230       240       250       260       270      
+sp|Q1X AVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDG
+                                                                   
+sp|Q80 PDEPAPASKCCSKPQVDMRKHVTMTLLDTEQSYVESLRTLMQGYMQPLKQPENSLLCDPS
+            1050      1060      1070      1080      1090      1100 
+
+>>sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7   (806 aa)
+ initn: 130 init1:  75 opt: 149  Z-score: 145.7  bits: 36.6 E(516081):  1.3
+Smith-Waterman score: 156; 26.3% identity (50.2% similar) in 259 aa overlap (3-236:429-680)
+
+                                           10          20        30
+sp|Q1X                             MSCDMEKTMSSVDSLP--ATPASEVPVLTVSP
+                                     : ::   :   .::  . :: ..  ::..:
+sp|P0C IRFQPSLQPVASEPVCPDVEMPSPWAPSGDCAME---SPPPALPPCSGPAPDTVDLTLQP
+      400       410       420       430          440       450     
+
+               40        50              60        70         80   
+sp|Q1X ADTSLNSADVKTQEVKPEEKKPA------KKRKSWGQELPVPKTNLP-PRKRAKTEDEKE
+       :  . . :  : . .  .. : :      :. .:  .. :    . : ::: . ......
+sp|P0C APPASELAPPKREGAISDNTKAALKAALLKSLRSRLRDGPSAPLEAPEPRKPVTAQERQR
+         460       470       480       490       500       510     
+
+            90       100       110       120       130        140  
+sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR-LSQQ
+       .:. .:  : :      ::..: : :. :     .   .   :  :  . ..:.: : ..
+sp|P0C EREEKR--RRRQERAKEREKRRQERERKERGAGTLGGPSTDPLAGL--VLSDNDRSLLER
+         520         530       540       550         560       570 
+
+            150       160        170        180        190         
+sp|Q1X LAQLAAEVRGSRANTPMPG-SPATASPTLTPTL-FKQERDEL-PLERIPFPT--PSLSDY
+        ...:     . : .: :  .:..:.::  :.   .:    : :   :: :.  :     
+sp|P0C WTRMARPPVPAPAPAPAPTPKPSSAQPTSPPNGPVSQSTAPLQPAGSIPGPASQPVCPPP
+             580       590       600       610       620       630 
+
+       200               210       220         230       240       
+sp|Q1X SPTLKPS--------TLAESSDVAQHPAVSVAGLEGDGS--ALPLFDLGSDLKHHSTDDV
+       .:. .:.        :   .: .:..  :  .:: :.:.  .:: :  :           
+sp|P0C GPVPQPAGPVPAPLQTAPSTSLLASQSLVPPSGLPGSGAPEVLPYFPSGPPPPDPGLTPQ
+             640       650       660       670       680       690 
+
+       250       260       270       280       290       300       
+sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG
+                                                                   
+sp|P0C PSTSESPDVNLVTQQLSKSQVEDPLPPVFSGTPKGSGAGYGVGFDLEEFLNQSFDMGVAD
+             700       710       720       730       740       750 
+
+>>sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS=Mus  (163 aa)
+ initn: 109 init1: 109 opt: 131  Z-score: 138.2  bits: 32.9 E(516081):  3.5
+Smith-Waterman score: 131; 27.2% identity (56.3% similar) in 151 aa overlap (16-163:9-155)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+                      :.. :. .: :  .:  :.: :. . :.:.:  . .      .  
+sp|P97        MMPGQIPDPSVTAGSLPGL--GPL-TGLPSSALTTEELKYADIRNIGAMIAPL
+                      10          20         30        40        50
+
+               70        80        90       100       110       120
+sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+       . : : : .  :.   .  ::.:.:: .:  .:..::   :..:. . : :. :. ..: 
+sp|P97 HFLEV-KLGKRPQPVKSELDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLEL
+                60        70        80        90       100         
+
+              130       140         150       160        170       
+sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAE--VRGSRANTPMP-GSPATASPTLTPTLFKQ
+       .:  :  .. ... : ..:  .: .      :: . . ::   :.:              
+sp|P97 MNAELKTQIEELKLERQQLILMLNRHRPTCIVRTDSVRTPESEGNPLLEQLDKK      
+     110       120       130       140       150       160         
+
+       180       190       200       210       220       230       
+sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS
+
+>>sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=Rattu  (163 aa)
+ initn: 109 init1: 109 opt: 131  Z-score: 138.2  bits: 32.9 E(516081):  3.5
+Smith-Waterman score: 131; 27.2% identity (56.3% similar) in 151 aa overlap (16-163:9-155)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+                      :.. :. .: :  .:  :.: :. . :.:.:  . .      .  
+sp|Q78        MMPGQIPDPSVTAGSLPGL--GPL-TGLPSSALTTEELKYADIRNIGAMIAPL
+                      10          20         30        40        50
+
+               70        80        90       100       110       120
+sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+       . : : : .  :.   .  ::.:.:: .:  .:..::   :..:. . : :. :. ..: 
+sp|Q78 HFLEV-KLGKRPQPVKSELDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLEL
+                60        70        80        90       100         
+
+              130       140         150       160        170       
+sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAE--VRGSRANTPMP-GSPATASPTLTPTLFKQ
+       .:  :  .. ... : ..:  .: .      :: . . ::   :.:              
+sp|Q78 MNAELKTQIEELKLERQQLILMLNRHRPTCIVRTDSVRTPESEGNPLLEQLDKK      
+     110       120       130       140       150       160         
+
+       180       190       200       210       220       230       
+sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS
+
+>>sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-bi  (368 aa)
+ initn: 134 init1: 134 opt: 151  Z-score: 152.2  bits: 36.7 E(516081): 0.59
+Smith-Waterman score: 151; 25.9% identity (54.7% similar) in 212 aa overlap (20-221:105-301)
+
+                          10        20        30        40         
+sp|Q1X            MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEE
+                                     :. .:. .  :::      ..    .  ::
+sp|Q8S PCLVQHDHTYSLSQEHVSIDLDNESYEKERAQMTPLRVEEPAD-----QEIARLILTEEE
+           80        90       100       110            120         
+
+      50        60        70        80        90       100         
+sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+       :.  .:.   :  ::     ::  :     .:.  .:..: .::. .:: ::..:.. . 
+sp|Q8S KRLLEKE---GLTLP---GMLPLTKM----EEQVLKRVRRKIRNKKSAQESRRKKKVYVG
+     130          140              150       160       170         
+
+     110       120       130       140       150            160    
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-----RGSRANTPMPGSPA
+        ::.. ...  ::  : .... .: .:  : .:: .: : :     ..: ..: .     
+sp|Q8S GLESRVLKYTAQNLELQNKVQLLEEQNLSLLDQLRRLQAMVIQTANKASSSSTCVLVLLF
+     180       190       200       210       220       230         
+
+          170        180         190        200        210         
+sp|Q1X TASPTLTPTLFKQE-RDELPLER--IPFPTPSL-SDYSPTLKPSTL-AESSDVAQHPAVS
+       .    :.:...... :  :: :.  .     .: :.  : :.: .: .:    . .: ..
+sp|Q8S SFCLLLVPAMYSSDTRGSLPAEHRVLSRQLRALPSEDPPQLEPPALQSEVPKDSLNPELQ
+     240       250       260       270       280       290         
+
+     220       230       240       250       260       270         
+sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF
+       .:                                                          
+sp|Q8S AASNSCCLFHLMPQAPRAEPPLQLPLPDGFSGCSCPDSISPLHANLTREEGWLPTPSPTS
+     300       310       320       330       340       350         
+
+>>sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus mus  (273 aa)
+ initn:  97 init1:  97 opt: 150  Z-score: 153.0  bits: 36.4 E(516081): 0.53
+Smith-Waterman score: 150; 26.9% identity (53.4% similar) in 208 aa overlap (44-232:72-265)
+
+            20        30        40        50        60        70   
+sp|Q1X SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR
+                                     . .: . .:.  : . :   : : .   : 
+sp|P48 SIDSSSQELHWMVQPHFLGPTGYPRPLAYPQYSPPQPRPGVIR-ALG---PPPGVRRRPC
+              50        60        70        80            90       
+
+            80        90       100              110       120      
+sp|Q1X KRAKTEDEKEQRRIERVLRNRAAAQTSRERKR-------LEMEKLENEKIQMEQQNQFLL
+       .. . :.: :.::..:  ::. ::   :.:..        : .:::.::  .... . : 
+sp|P48 EQISPEEE-ERRRVRRE-RNKLAAAKCRNRRKELTDFLQAETDKLEDEKSGLQREIEELQ
+       100        110        120       130       140       150     
+
+        130         140       150             160       170        
+sp|Q1X QRLSQMEA--ENNRLSQQLAQLAAEVRGSRANT------PMPGSPATASPTLTP-TLFKQ
+       ..  ..:   : .:   .. .   .  :. ..:      : :: :.    .:.:  ... 
+sp|P48 KQKERLELVLEAHRPICKIPEGDKKDPGGSGSTSGASSPPAPGRPVPCI-SLSPGPVLEP
+         160       170       180       190       200        210    
+
+       180       190       200          210       220       230    
+sp|Q1X ERDELPLERIPFPTPSLSDYSPTL---KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD
+       :  . :     . ::::. ..:.:    :::  :  . :.. . : .:   : :. ::  
+sp|P48 EALHTPTL---MTTPSLTPFTPSLVFTYPST-PEPCSSAHRKSSSSSG---DPSSDPLGS
+          220          230       240        250          260       
+
+          240       250       260       270       280       290    
+sp|Q1X LGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDS
+                                                                   
+sp|P48 PTLLAL                                                      
+       270                                                         
+
+>>sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1  (846 aa)
+ initn:  93 init1:  59 opt: 141  Z-score: 138.0  bits: 35.3 E(516081):  3.7
+Smith-Waterman score: 141; 24.7% identity (56.2% similar) in 146 aa overlap (4-149:527-669)
+
+                                          10        20        30   
+sp|Q1X                            MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT
+                                     . .:. .. .. ::.::: .:  . ::. .
+sp|A2A PRGTTASPKGRVRRKEEAKESPSPSGPEDKNHRKSRAAEEKEPAAPASPAPSPVPSPTPA
+        500       510       520       530       540       550      
+
+            40        50        60        70        80        90   
+sp|Q1X SLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRN
+       . .. . .:: .  :   ::      .    .:... : .  : : :..:  :.    : 
+sp|A2A QPQKEQSSTQ-IPAETAVPAVPAAPTAPPTAAPSVT-PSKPMAGTTDREEATRLLAEKRR
+        560        570       580       590        600       610    
+
+           100       110       120       130       140       150   
+sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS
+       .:  :  ::... ...  ...... ::  .    : .. :::  :  .: :.  :.    
+sp|A2A QAREQREREEQERKLQAERDKRMREEQLAREAEAR-AEREAEARRREEQEAREKAQAEQE
+          620       630       640        650       660       670   
+
+           160       170       180       190       200       210   
+sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA
+                                                                   
+sp|A2A EQERLQKQKEEAEARSREEAERQRQEREKHFQKEEQERQERRKRLEEIMKRTRKSEAAET
+           680       690       700       710       720       730   
+
+>>sp|Q00312|RBF1_CANAL Transcription factor RBF1 OS=Cand  (527 aa)
+ initn: 102 init1:  62 opt: 142  Z-score: 141.7  bits: 35.3 E(516081):  2.3
+Smith-Waterman score: 142; 23.0% identity (57.0% similar) in 200 aa overlap (36-229:263-449)
+
+          10        20        30        40            50        60 
+sp|Q1X EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEE----KKPAKKRKSWGQ
+                                     :  : : .. ::.:    .. ..  . :  
+sp|Q00 TTVKDATKRQRIAYTKRNKCAYRLVANLYPNEKDQKRKN-KPDEPGHNEENSRISEMWVL
+            240       250       260       270        280       290 
+
+              70        80        90       100       110       120 
+sp|Q1X ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ
+       ..  :. :  :    :    :....  :.: ..   .  .... :..:. .... :..::
+sp|Q00 RMINPQHNHAPDPINK----KKRQKTSRTLVEKPINKP-HHHHLLQQEQQQQQQQQQQQQ
+             300           310       320        330       340      
+
+             130       140       150       160       170           
+sp|Q1X NQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPT--LFKQER
+       .:   :. .: .: :.. .:: :::  ... .   . .: .: . :  :     : .:. 
+sp|Q00 QQ---QQQQQHNA-NSQAQQQAAQLQQQMQQQLQASGLPTTP-NYSELLGQLGQLSQQQS
+           350        360       370       380        390       400 
+
+     180       190       200       210       220       230         
+sp|Q1X DELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL
+       ..  :..::      .. .   .:.  :.. :  :  :. .:..:....:          
+sp|Q00 QQQQLHHIPQQRQRTQSQQSQQQPQQTAHGLD--QPDAAVIAAIEASAAAAVASQGSPNV
+             410       420       430         440       450         
+
+     240       250       260       270       280       290         
+sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD
+                                                                   
+sp|Q00 TAAAVAALQHTQGNEHDAQQQQDRGGNNGGAIDSNVDPSLDPNVDPNVQAHDHSHGLRNS
+     460       470       480       490       500       510         
+
+>>sp|O35413|SRBS2_RAT Sorbin and SH3 domain-containing p  (1196 aa)
+ initn:  70 init1:  70 opt: 143  Z-score: 137.8  bits: 35.7 E(516081):  3.7
+Smith-Waterman score: 143; 26.7% identity (53.9% similar) in 217 aa overlap (18-229:220-425)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     :: .    :  :: ... . : .:::  .:
+sp|O35 TVDRPKDWYKTMFKQIHMVHKPDEDTDMYNTPYTYNAGLYNSPYSAQSHPA-AKTQTYRP
+     190       200       210       220       230       240         
+
+        50        60          70        80         90       100    
+sp|Q1X EEKKPAKKRKSWGQEL--PVPKTNLPPRKRAKTEDEK-EQRRIERVLRNRAAAQTSRERK
+         :. . .  .  .:   :::  ..::: : ..  :: .    .: . .:     :. :.
+sp|O35 LSKSHSDNGTDAFKEATSPVPPPHVPPRPRDQSSTEKHDWDPPDRKVDTRKF--RSEPRS
+      250       260       270       280       290       300        
+
+          110       120       130       140       150       160    
+sp|Q1X RLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA
+        .:.:  ..  .: :.  . . :  :...   .: :.. :..:.. :  : . :  : : 
+sp|O35 IFEYEPGKSSILQHERPVS-VYQ--SSIDRSLERPSSS-ASMAGDFRKRRKSEPAVGPPR
+        310       320          330       340        350       360  
+
+          170       180       190       200       210         220  
+sp|Q1X TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQH--PAVSVAG
+         .   . .  .  : .::     : :  .:. ::. .::  :...: ..   :  : .:
+sp|O35 GLGDH-SSSRTSPGRADLPGSSSTFTTSFISS-SPS-SPSR-AQGGDDSKMCPPLCSYSG
+             370       380       390         400        410        
+
+            230       240       250       260       270       280  
+sp|Q1X LEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVL
+       :.:. :.                                                     
+sp|O35 LNGSPSSELECCGAYRRHLDVPQDSQRAITFKNGWQMARQNAEIWSSTEEAVSPKIKSRS
+      420       430       440       450       460       470        
+
+>>sp|P97876|BATF3_RAT Basic leucine zipper transcription  (133 aa)
+ initn: 100 init1: 100 opt: 129  Z-score: 137.5  bits: 32.5 E(516081):  3.9
+Smith-Waterman score: 129; 30.2% identity (77.8% similar) in 63 aa overlap (83-145:28-90)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     ..:...:  .::.::: ::...  . .::.
+sp|P97    MSQGPPAGGVLQSSVAAPGNQPQSPKDDDRKVRRREKNRVAAQRSRKKQTQKSDKLH
+                  10        20        30        40        50       
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       .:. ..::.:. : ....... :  .:.. : .                           
+sp|P97 EEHESLEQENSVLRREIAKLKEELRHLTEALKEHEKMCPLLLCPMNFVQLRPDPVASWSA
+        60        70        80        90       100       110       
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+                                                                   
+sp|P97 HDAPDHPSFIWLGTLV                                            
+       120       130                                               
+
+>>sp|O93602|ATF2_CHICK Cyclic AMP-dependent transcriptio  (487 aa)
+ initn: 112 init1:  65 opt: 141  Z-score: 141.2  bits: 35.1 E(516081):  2.4
+Smith-Waterman score: 141; 25.2% identity (58.8% similar) in 131 aa overlap (13-143:275-394)
+
+                                 10        20        30        40  
+sp|Q1X                   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKT
+                                     :.  . :.. : . .  :   ::..  ..:
+sp|O93 GPSSPQPVQSEAKLRLKAALTQQHPQVTNGDTAKGHPSGLVRTQSEEPRPQSLQQPATST
+          250       260       270       280       290       300    
+
+             50        60        70        80        90       100  
+sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE
+        :.     .:...  . : .          :.:: .::  :.:: . . ::::::.  :.
+sp|O93 TETPASPAQPTQQTPNTGGR----------RRRAANEDPDEKRR-KFLERNRAAASRCRQ
+          310       320                 330        340       350   
+
+            110       120       130       140       150       160  
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS
+       .... ...::..  .. . :  : .... .. :  .:.: :                   
+sp|O93 KRKVWVQSLEKKAEDLSSLNGQLQNEVTLLRNEVAQLKQLLLAHKDCPVTAMQKKSGYHT
+           360       370       380       390       400       410   
+
+            170       180       190       200       210       220  
+sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG
+                                                                   
+sp|O93 ADKDDSSEDISVPSSPHTEAIQHSSVSTSNGVSSTSKAEAVATSVLTQLADQSSEPGLPQ
+           420       430       440       450       460       470   
+
+>>sp|Q5F489|TAF3_CHICK Transcription initiation factor T  (930 aa)
+ initn: 120 init1:  86 opt: 151  Z-score: 146.8  bits: 37.0 E(516081):  1.2
+Smith-Waterman score: 152; 26.1% identity (52.7% similar) in 226 aa overlap (14-232:662-845)
+
+                                10           20        30        40
+sp|Q1X                  MSCDMEKTMSSVDSLP--ATP-ASEVPVLTVSPADTSLNSADV
+                                     :::  .:: : ..:  .. :. . .    .
+sp|Q5F KKDKEKVKDKSKEDKIKPPSAPLVLPPKEMSLPLFSTPTAMRLP--SMLPSLSPMLPEKL
+             640       650       660       670         680         
+
+               50        60        70        80        90       100
+sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS
+         .. ::.:::  ::.:               .:. . : .::...     ...   .  
+sp|Q5F FEDKEKPKEKKKDKKEK---------------KKKKEREKDKEKEK-----KDKEKERKE
+     690       700                      710       720              
+
+              110       120          130        140       150      
+sp|Q1X RERKRLEMEKLENEKIQMEQ---QNQFLLQRLS-QMEAENNRLSQQLAQLAAEVRGSRAN
+       ::.:. : :: ..:::..:      . .. ::. .. : ....  . .  : :   ..  
+sp|Q5F REKKEKEKEKHKHEKIKVEPVVPAPSPVIPRLTLRVGAGQDKIVISKVVPAPE---AKPA
+     730       740       750       760       770       780         
+
+        160       170       180       190       200       210      
+sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP
+       ::. . : :  :. .:.         :..  : :.:  .  .::..:. :  .:     :
+sp|Q5F TPV-SRPKTPPPVPSPV-------PAPVHVTPPPAPVPAPPQPTVSPALLPPAS-----P
+         790       800              810       820       830        
+
+        220       230       240       250       260       270      
+sp|Q1X AVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDG
+       :::.::    ::  :.                                            
+sp|Q5F AVSAAG----GSKAPVRSVVTETVSTYVIRDEWGNQIWFCPGCNKPDDGSPMIGCDDCDD
+               840       850       860       870       880         
+
+>>sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Y  (889 aa)
+ initn: 264 init1:  76 opt: 140  Z-score: 136.7  bits: 35.1 E(516081):  4.3
+Smith-Waterman score: 141; 28.0% identity (58.4% similar) in 161 aa overlap (48-194:477-629)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRK---
+                                     :::. :. :.   ... . : .   .:   
+sp|Q6C KEREKAARKAASEAKQKARQEEQARLAREKEEKRLARIRE-MEERMRLAKEKEEREKEEL
+        450       460       470       480        490       500     
+
+           80         90       100       110       120       130   
+sp|Q1X RAKTEDEKEQRR-IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME
+       ::. ..:...::  ::. ..:       : .::: :..:::... :...: : ..  ...
+sp|Q6C RARQQQEEDERREKERLEEERI------ENERLEAERIENERLEKEREQQRLEEEKERQR
+         510       520             530       540       550         
+
+           140       150          160          170          180    
+sp|Q1X AENNRLSQQLAQLAAEVRGSRA---NTPMPGS---PATASPTLTPTLFK---QERDELPL
+        ...: .:.: .   : :.: .   . :.::.   ::.   :    : .   :     :.
+sp|Q6C IKEEREKQKLEE-EREKRASMSIPLSKPLPGKTQIPASQPGTSLGGLQQPVPQAAPVAPV
+     560       570        580       590       600       610        
+
+           190       200       210       220       230       240   
+sp|Q1X ERIP-FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHS
+         .:  :.:.:                                                 
+sp|Q6C AMMPQSPSPQLPPGLTQHVAQSQILLDRLTPDPTSRMTPERHTPSPGSTTSNAKTLLDSL
+      620       630       640       650       660       670        
+
+>>sp|Q9CXK9|RBM33_MOUSE RNA-binding protein 33 OS=Mus mu  (1231 aa)
+ initn:  63 init1:  63 opt: 142  Z-score: 136.7  bits: 35.6 E(516081):  4.3
+Smith-Waterman score: 142; 27.1% identity (54.7% similar) in 181 aa overlap (5-169:749-921)
+
+                                         10        20        30    
+sp|Q1X                           MSCDMEKTMSSVDSLPATPASEVPVLTVSPAD-T
+                                     :. :    ..:   : .   :: .:    .
+sp|Q9C PSSSRMQCTPHQGLRHNAASQNISKRPMQQMQPTAPRNSNLRELPIAPSHVLEMSGNRCS
+      720       730       740       750       760       770        
+
+            40         50        60        70               80     
+sp|Q1X SLNSADVKTQ-EVKPEEKKPAKKRKSWGQELPVPKTNLP---PRKRAKTE----DEKEQR
+       :   :.::.  ...:  .  ...:.: :.     :   :   :...:: :    :: :. 
+sp|Q9C STPVAQVKSIVNTSPPCRAVVSSRSSQGNTDAKAKPLSPEAQPKEEAKPEAEFPDEDEET
+      780       790       800       810       820       830        
+
+          90       100       110       120           130       140 
+sp|Q1X RIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ----NQFLLQRLSQMEAENNRLS-
+       :. :.          .:.:::. : :...... .::    .. ::.::.:.. .... . 
+sp|Q9C RLYRL--------KIEEQKRLREEILKQKELRRQQQAGARKKELLERLAQQQQQQQQQQH
+      840               850       860       870       880       890
+
+                150       160       170       180       190        
+sp|Q1X --QQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYS
+         ::  :   .. ::...  .    :: :::                             
+sp|Q9C QPQQQQQQPQQIYGSQTSMEQEELAATPSPTNGNPLLPFPGAQCRQNVKTRLLVKNQDIT
+              900       910       920       930       940       950
+
+      200       210       220       230       240       250        
+sp|Q1X PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNR
+                                                                   
+sp|Q9C TASVQPKAVNFVPPGANVQHQGQHLRPLKHLRQLPHKVLQVKPMDMEETPHSPQAARVTS
+              960       970       980       990      1000      1010
+
+>>sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper tra  (787 aa)
+ initn: 125 init1: 125 opt: 139  Z-score: 136.5  bits: 34.9 E(516081):  4.4
+Smith-Waterman score: 139; 27.3% identity (66.7% similar) in 99 aa overlap (80-175:546-644)
+
+      50        60        70        80        90       100         
+sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+                                     .::: .. .:...::  :. :: :... .:
+sp|Q55 LSREHVLKLSSKEIEEYVSRLKMHHILTQAEEKELKKQRRLVKNREYASQSRSRRKIYVE
+         520       530       540       550       560       570     
+
+     110       120       130       140       150       160         
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPG---SPATA
+       ..:..  . .:.   . ..:.... ::. :..:: .:.  .... . .   :   ::   
+sp|Q55 NIETKLQKTNQDCASIKSQLNSVKEENKALKKQLYSLTNTLKSNPSLAEAFGKIFSPIGN
+         580       590       600       610       620       630     
+
+        170       180       190       200       210       220      
+sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD
+       . : . :::                                                   
+sp|Q55 NKTSSATLFVFFFLFTFTFLFQSSTVTFNSDRVSSIQRNLLSLEETQATEWNIKRAILEE
+         640       650       660       670       680       690     
+
+>>sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase doma  (937 aa)
+ initn: 213 init1:  65 opt: 140  Z-score: 136.4  bits: 35.1 E(516081):  4.4
+Smith-Waterman score: 140; 27.8% identity (61.1% similar) in 144 aa overlap (18-154:283-415)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKT-QEVK
+                                     .:.:.. . :.: . :. ....  . .: :
+sp|Q55 HEVHNEFAKEEFVTYILEWIKERIENAKNESPSSNINTTTTSTTTTTTTTTSSPVVEESK
+            260       270       280       290       300       310  
+
+           50        60        70            80        90       100
+sp|Q1X P--EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTE----DEKEQRRIERVLRNRAAAQTS
+       :  ::.::. ....     :: . . :  ...: :    : ::... ::. ...:::.  
+sp|Q55 PVVEESKPVVEESK-----PVVEESKPVVEESKPEPVVDDSKEKEEKERLEKEEAAAKLE
+            320            330       340       350       360       
+
+              110       120       130       140       150       160
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP
+       .::    .:: : :..  : ... .  .  .   :: . .:: :  ::...  :      
+sp|Q55 KER----LEKEEAERVAKEAEEKRI--KDEKEAQENLEKQQQEAAAAAQAEKERLEKEEA
+       370           380         390       400       410       420 
+
+              170       180       190       200       210       220
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV
+                                                                   
+sp|Q55 DKLEKERLEAEAAAAAQAEKERLEAEAAAAAQAEKERLEAEAAAAVQAEKERLEKEEADR
+             430       440       450       460       470       480 
+
+>>sp|O75037|KI21B_HUMAN Kinesin-like protein KIF21B OS=H  (1637 aa)
+ initn:  66 init1:  66 opt: 143  Z-score: 136.0  bits: 35.8 E(516081):  4.7
+Smith-Waterman score: 143; 26.2% identity (61.0% similar) in 141 aa overlap (41-173:723-857)
+
+               20        30        40        50        60        70
+sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL
+                                     : : .. :. .  :... . .::   ....
+sp|O75 STMECYTEEKANKIKADYEKRLREMNRDLQKLQAAQKEHARLLKNQSRYERELKKLQAEV
+            700       710       720       730       740       750  
+
+                     80        90       100         110       120  
+sp|Q1X PPRKRAKT------EDEKEQRRIERVLRNRAAAQTSRERKRLEME--KLENEKIQMEQQN
+          :.::.      ..:...::. .. :::  :: ..:..: :..   ::..:    .:.
+sp|O75 AEMKKAKVALMKQMREEQQRRRLVETKRNREIAQLKKEQRRQEFQIRALESQK----RQQ
+            760       770       780       790       800            
+
+            130       140       150       160       170       180  
+sp|Q1X QFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDEL
+       ...:.: .:  .   ::.. ... .:   : .   ::  : : .: . : .         
+sp|O75 EMVLRRKTQEVSALRRLAKPMSERVAGRAGLK--PPMLDSGAEVSASTTSSEAESGARSV
+      810       820       830       840         850       860      
+
+            190       200       210       220       230       240  
+sp|Q1X PLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHH
+                                                                   
+sp|O75 SSIVRQWNRKINHFLGDHPAPTVNGTRPARKKFQKKGASQSFSKAARLKWQSLERRIIDI
+        870       880       890       900       910       920      
+
+>>sp|O14273|YET4_SCHPO Meiotically up-regulated protein   (647 aa)
+ initn: 116 init1:  50 opt: 137  Z-score: 135.8  bits: 34.5 E(516081):  4.8
+Smith-Waterman score: 137; 22.2% identity (59.1% similar) in 198 aa overlap (26-217:1-186)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+                                .:..:  .. .. ...    . .::  .:. ..  
+sp|O14                          MTTNPDIVKQTKNEIHQVTSRVQEKLDSKSTNAVE
+                                        10        20        30     
+
+               70        80        90       100       110       120
+sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+       :.    ....   .. :.  .. ...  .  .. :::..:       .:  : .. : ::
+sp|O14 QNNNSSQASVTKDNKKKAA-KRAKKKAAKKKKQSAAASASST----PVE--EAQHAQEEQ
+          40        50         60        70              80        
+
+                130         140       150       160       170      
+sp|Q1X QNQFLLQR--LSQ--MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFK
+       :.: .::.  ..:  .: . ..... :  .:. . :. .. :  ..:.... : .::   
+sp|O14 QEQTILQEPGFTQTIVEKDADQVDEPLEPIASSALGT-VEPPTDNKPSASTSTAVPT--T
+       90       100       110       120        130       140       
+
+        180       190       200       210         220       230    
+sp|Q1X QERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD--VAQHPAVSVAGLEGDGSALPLFD
+       . :.    :  :  .:: :. : . : .. ..:.:  ::.: :                 
+sp|O14 EARNTSITE--PANSPSSSSSSASTKSTATTQSADYVVAEHFAPQRNDEQLGNSPASITS
+         150         160       170       180       190       200   
+
+          240       250       260       270       280       290    
+sp|Q1X LGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDS
+                                                                   
+sp|O14 KPATTSAAQPSSKVEENMAKATSQPITTAEKEIPELKPIEPEAIMISKEINTTHDQAAAT
+           210       220       230       240       250       260   
+
+>>sp|P19880|YAP1_YEAST AP-1-like transcription factor YA  (650 aa)
+ initn: 100 init1:  66 opt: 137  Z-score: 135.8  bits: 34.5 E(516081):  4.8
+Smith-Waterman score: 140; 23.1% identity (54.9% similar) in 273 aa overlap (28-297:13-259)
+
+               10        20        30         40        50         
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS-LNSADVKTQEVKPEEKKPAKKRKSW
+                                  :::.. . ....  . .:.. :... . .    
+sp|P19                MSVSTAKRSLDVVSPGSLAEFEGSKSRHDEIENEHRRTGTRD---
+                              10        20        30        40     
+
+      60        70        80        90       100       110         
+sp|Q1X GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME
+       :..   :: .    : .: .:   . . .:. .:::: .. ::::. .:..:: .:.:  
+sp|P19 GEDSEQPKKK--GSKTSKKQDLDPETKQKRTAQNRAAQRAFRERKERKMKELE-KKVQSL
+             50          60        70        80        90          
+
+     120       130       140       150       160       170         
+sp|Q1X QQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER
+       .. :      .: :.: . : .::  :. :..  : .:   ..         :.:  .. 
+sp|P19 ESIQ------QQNEVEATFLRDQLITLVNELKKYRPETRNDSKVLEYLARRDPNLHFSKN
+     100             110       120       130       140       150   
+
+     180       190       200       210       220       230         
+sp|Q1X DELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL
+       .    .  :. ::. .: . ..:     . . . :.:      :..:..     ..:..:
+sp|P19 NVNHSNSEPIDTPN-DDIQENVKQ----KMNFTFQYP------LDNDNDNDNSKNVGKQL
+           160        170           180             190       200  
+
+     240       250       260       270         280       290       
+sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF--DVLEGGDLSAFPFDSMVN
+          .  . .::.    .:.  .  :..  .::.  :.:.   :::..   :.  .: . :
+sp|P19 PSPNDPSHSAPM---PINQTQKKLSDATDSSSATLDSLSNSNDVLNNTPNSSTSMDWLDN
+            210          220       230       240       250         
+
+       300       310       320       330       340                 
+sp|Q1X FDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC            
+                                                                   
+sp|P19 VIYTNRFVSGDDGSNSKTKNLDSNMFSNDFNFENQFDEQVSEFCSKMNQVCGTRQCPIPK
+     260       270       280       290       300       310         
+
+>>sp|Q6IPM2|IQCE_HUMAN IQ domain-containing protein E OS  (695 aa)
+ initn:  66 init1:  66 opt: 137  Z-score: 135.4  bits: 34.5 E(516081):  5.1
+Smith-Waterman score: 137; 22.3% identity (50.0% similar) in 238 aa overlap (34-268:455-686)
+
+            10        20        30        40        50        60   
+sp|Q1X DMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL
+                                     .:.:   . ::.: :::.   .    .:::
+sp|Q6I KADLEKELECAREGEEERREREEVLREEIQTLTSKLQELQEMKKEEKEDCPEVPHKAQEL
+          430       440       450       460       470       480    
+
+            70        80        90       100       110       120   
+sp|Q1X PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ
+       :.:     : .:   .:   .   : . : :.  . .:.    .. . . .  . .... 
+sp|Q6I PAPT----PSSRHCEQDWPPDSSEEGLPRPRSPCSDGRRDAAARVLQAQWKVYKHKKKKA
+              490       500       510       520       530       540
+
+           130       140       150       160        170        180 
+sp|Q1X FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT-LTPTLFKQER-DE
+        : .    ..:       .   ::....::.  . .:: :  .::.  .:. . :   . 
+sp|Q6I VLDEAAVVLQAAFRGHLTRTKLLASKAHGSEPPS-VPGLPDQSSPVPRVPSPIAQATGSP
+              550       560       570        580       590         
+
+             190       200        210       220       230       240
+sp|Q1X LPLERIPFPTPSLSDYSPTLKPSTLAE-SSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK
+       .  : : .   .:  .    . :. .. .. .:.    :... .::.:. :..    :  
+sp|Q6I VQEEAIVIIQSALRAHLARARHSATGKRTTTAASTRRRSASATHGDASSPPFLAALPD-P
+     600       610       620       630       640       650         
+
+              250       260       270       280       290       300
+sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS
+         :  .. :::  :: :     :  . :                                
+sp|Q6I SPSGPQALAPLPGDDVNSDDSDDIVIAPSLPTKNFPV                       
+      660       670       680       690                            
+
+>>sp|Q98UK4|MAF_DANRE Transcription factor Maf OS=Danio   (327 aa)
+ initn:  88 init1:  88 opt: 132  Z-score: 135.1  bits: 33.4 E(516081):  5.3
+Smith-Waterman score: 132; 31.2% identity (61.3% similar) in 93 aa overlap (83-175:243-326)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     .:.:  :.:.::. ::. : ..  . . ::
+sp|Q98 RFSDEQLVNMSVRELNRQLRGVSKEEVIRLKQKR--RTLKNRGYAQSCRYKRVQQRHVLE
+            220       230       240         250       260       270
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       .:: :. :: . : :..:..  : .  ...  .: .   : : :    :: .  .:. .:
+sp|Q98 GEKTQLMQQVDHLKQEISRLVRERDAYKEKYEKLISS--GFREN----GSSSDNNPS-SP
+              280       290       300         310           320    
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+        .:                                                         
+sp|Q98 EFFM                                                        
+                                                                   
+
+>>sp|Q556Q3|IRLF_DICDI Probable serine/threonine-protein  (1400 aa)
+ initn: 120 init1:  84 opt: 141  Z-score: 135.0  bits: 35.4 E(516081):  5.3
+Smith-Waterman score: 141; 17.9% identity (58.7% similar) in 184 aa overlap (6-186:661-844)
+
+                                        10        20        30     
+sp|Q1X                          MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSL
+                                     :  ..  : . . :.  : .  .: . . .
+sp|Q55 DLLFGVINDRLKAPIFINKDKYESLYFVYQEDYQNPSDPFRVLPTRSVDLSKISEGISRM
+              640       650       660       670       680       690
+
+          40        50         60        70        80          90  
+sp|Q1X NSADVKTQEVKPEEKKPAK-KRKSWGQELPVPKTNLPPRKRAKTEDEKEQ--RRIERVLR
+       .. :  ..  : :..:  : :.:.  ..:   : .   ..  . : ::.:  .. . . .
+sp|Q55 KNDDFLNELEKEEKQKKLKTKQKKKIKKLENEKKQKVLQQDKQQEKEKKQNYQQPQDLQQ
+              700       710       720       730       740       750
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       .    ::...... .... .... :..::.:   :. .:....... .::  :  .. ..
+sp|Q55 HNLKIQTQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQSQQQQQQQQSPQQQSQQQS
+              760       770       780       790       800       810
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+       ....     .    :   .:   .:.... : ..                          
+sp|Q55 QQSQQKSQQQSQQKSQQQSPPQQQQQQSQQPQQQSQQQSQQKQKHQKQQQQQKQEKQQQK
+              820       830       840       850       860       870
+
+            220       230       240       250       260       270  
+sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV
+                                                                   
+sp|Q55 QEKQQQKQEKPQQKQQLENQIKNLKIEIKKEEENNKEIKNKKEEVEKEKEENNKEIKSKS
+              880       890       900       910       920       930
+
+>>sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-bind  (242 aa)
+ initn: 103 init1: 103 opt: 130  Z-score: 135.0  bits: 32.9 E(516081):  5.4
+Smith-Waterman score: 130; 39.7% identity (68.3% similar) in 63 aa overlap (80-142:181-242)
+
+      50        60        70        80        90       100         
+sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+                                     :: :..:  :..::: .:: ::.::.  .:
+sp|P14 LKRKKSSEDSNNINIHQKLTNVALSDNVNNDEDEKKRA-RLVRNRESAQLSRQRKKHYVE
+              160       170       180        190       200         
+
+     110       120       130       140       150       160         
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT
+       .::..   :..  : :  ... . :::  :. :                           
+sp|P14 ELEDKVRIMHSTIQDLNAKVAYIIAENATLKTQ                           
+     210       220       230       240                             
+
+     170       180       190       200       210       220         
+sp|Q1X LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSA
+
+>>sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modulator  (1031 aa)
+ initn: 228 init1: 106 opt: 139  Z-score: 134.9  bits: 35.0 E(516081):  5.4
+Smith-Waterman score: 139; 35.7% identity (63.1% similar) in 84 aa overlap (73-153:644-724)
+
+             50        60        70        80        90       100  
+sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-
+                                     :.: .   :.:.:  ::. :.:   .  : 
+sp|Q8C LREHLVRFERLKQAVEFRRRKEIAERERRERERIRIIREREER--ERLQRERERLEIERQ
+           620       630       640       650         660       670 
+
+               110       120       130       140       150         
+sp|Q1X --ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM
+         ::.:.: :.:: :.:..::. .   .:... . :  : .::: .   : :.:      
+sp|Q8C KLERERMERERLERERIRIEQERRREAERIAREREELRRQQQQL-RYEQEKRNSLKRPRD
+             680       690       700       710        720       730
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+                                                                   
+sp|Q8C VDHRRDDPYWSENKKLSLDTEARFGHGSDYRQQSRFLDFSHRERARFPDTASVQSSFERR
+              740       750       760       770       780       790
+
+>>sp|O81025|P2A03_ARATH Putative protein PHLOEM PROTEIN   (463 aa)
+ initn:  79 init1:  49 opt: 134  Z-score: 134.9  bits: 33.8 E(516081):  5.4
+Smith-Waterman score: 134; 29.4% identity (57.5% similar) in 153 aa overlap (4-149:135-280)
+
+                                          10          20        30 
+sp|Q1X                            MSCDMEKTMSSVDSL--PATPASEVPVLTVSPA
+                                     :.:.  ...:.    . :   . :: .  .
+sp|O81 KEEESTVNTLQCIFGSQILDYCIVVFTGGDDLEEDDQTLDDYFRAGCPEFLTKVLRLCGG
+          110       120       130       140       150       160    
+
+              40        50         60         70        80         
+sp|Q1X DTSLNSADVKTQEVKPEEKKPAKKR-KSWGQELP-VPKTNLPPRKRAKTEDEKEQRRIER
+          : .   : .. : :. :    : .. :..   .: :    ::  : :.... :. ::
+sp|O81 RKVLFDNKSKDEKKKVEQVKQLLARVENVGEQTGGIPYTYQLHRK-IKEENDERLREEER
+          170       180       190       200        210       220   
+
+      90         100       110       120        130       140      
+sp|Q1X VL--RNRAAAQTSRERKRLEMEKLENEKIQMEQ-QNQFLLQRLSQMEAENNRLSQQLAQL
+       :.  .::: :. .. .. : :::   ::.:::. .:.   : ..: ::... . :. :. 
+sp|O81 VIESKNRAEAELAEMQQNLLMEK---EKLQMEEAKNK---QLIAQAEANEKLMEQERAKN
+           230       240          250          260       270       
+
+        150       160       170       180       190       200      
+sp|Q1X AAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL
+        ::                                                         
+sp|O81 RAETELAAVMVEKLQMEEEKNKQLIAQANRMICARDLNIEWSHSEEHWKWVNLDHNISSN
+       280       290       300       310       320       330       
+
+>>sp|P20226|TBP_HUMAN TATA-box-binding protein OS=Homo s  (339 aa)
+ initn: 101 init1:  71 opt: 132  Z-score: 134.9  bits: 33.4 E(516081):  5.4
+Smith-Waterman score: 132; 24.8% identity (58.4% similar) in 125 aa overlap (91-212:43-161)
+
+               70        80        90       100       110       120
+sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+                                     ..:  . .  .:..: .... .... :..:
+sp|P20 GLASPQGAMTPGIPIFSPMMPYGTGLTPQPIQNTNSLSILEEQQRQQQQQQQQQQQQQQQ
+             20        30        40        50        60        70  
+
+              130       140       150       160       170          
+sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFK-QER
+       :.:   :. .:.. .... .:: :  :: :. : ..    :. . :     : ::. :  
+sp|P20 QQQQQQQQQQQQQQQQQQQQQQQAVAAAAVQQSTSQQATQGTSGQA-----PQLFHSQTL
+             80        90       100       110            120       
+
+     180         190       200       210       220       230       
+sp|Q1X DELPLE-RIP-FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS
+          ::    : .:.: .. ..:    .  .::: .                         
+sp|P20 TTAPLPGTTPLYPSP-MTPMTPITPATPASESSGIVPQLQNIVSTVNLGCKLDLKTIALR
+       130       140        150       160       170       180      
+
+       240       250       260       270       280       290       
+sp|Q1X DLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVN
+                                                                   
+sp|P20 ARNAEYNPKRFAAVIMRIREPRTTALIFSSGKMVCTGAKSEEQSRLAARKYARVVQKLGF
+        190       200       210       220       230       240      
+
+>>sp|Q4WG58|PAN1_ASPFU Actin cytoskeleton-regulatory com  (1467 aa)
+ initn:  53 init1:  53 opt: 141  Z-score: 134.7  bits: 35.5 E(516081):  5.5
+Smith-Waterman score: 141; 23.3% identity (51.1% similar) in 227 aa overlap (38-257:1078-1294)
+
+        10        20        30        40        50        60       
+sp|Q1X TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK
+                                     :. . .:.  :..    . ..  ...   :
+sp|Q4W TITAEQAAREQAIREEQQAQEEETNRLEMEAQKREEELLKEKEAQEARLRALEEQVRQGK
+      1050      1060      1070      1080      1090      1100       
+
+        70        80        90        100          110       120   
+sp|Q1X TNLPPRKRAKTEDEKEQRRIERVLR-NRAAAQTSRERKR---LEMEKLENEKIQMEQQNQ
+            .:: : : :.  .. : .:  .::  . ..::.:   ::.:.:..:. . ..   
+sp|Q4W IRKQEEKRRKEEAERLAKEKEAALAAQRAEIERAKERERQLQLELERLDEESSSDDEGPV
+      1110      1120      1130      1140      1150      1160       
+
+           130       140       150       160       170       180   
+sp|Q1X FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD-EL
+        .       :  .   :: :  ..  .  :  .. . :::  .:    :. :: : . . 
+sp|Q4W NITP-----EDSTPTQSQLLPTVTPAAPVSAPESEQAGSPEDTSSQAPPVDFKLETESKN
+      1170           1180      1190      1200      1210      1220  
+
+            190         200       210       220       230       240
+sp|Q1X PLERIPFPTPSLSDYS--PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK
+       :  .:   . . .  :  :. .::  . ..::  : .     :  . .. : :  .. :.
+sp|Q4W PYFKITHQATDTQVVSSPPVPQPSFTSPKADV--HSTNPFHRLAKQETSKPAFTGSAPLE
+           1230      1240      1250        1260      1270      1280
+
+              250       260       270       280       290       300
+sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS
+       ..:    : : .:::..                                           
+sp|Q4W RKSR---ARPEADDDWSAAGSEFDSSDDDDDERPGGGSAKQLASILFGTMAPPRPLSAMD
+                1290      1300      1310      1320      1330       
+
+>>sp|B0YC95|PAN1_ASPFC Actin cytoskeleton-regulatory com  (1467 aa)
+ initn:  53 init1:  53 opt: 141  Z-score: 134.7  bits: 35.5 E(516081):  5.5
+Smith-Waterman score: 141; 23.3% identity (51.1% similar) in 227 aa overlap (38-257:1078-1294)
+
+        10        20        30        40        50        60       
+sp|Q1X TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK
+                                     :. . .:.  :..    . ..  ...   :
+sp|B0Y TITAEQAAREQAIREEQQAQEEETNRLEMEAQKREEELLKEKEAQEARLRALEEQVRQGK
+      1050      1060      1070      1080      1090      1100       
+
+        70        80        90        100          110       120   
+sp|Q1X TNLPPRKRAKTEDEKEQRRIERVLR-NRAAAQTSRERKR---LEMEKLENEKIQMEQQNQ
+            .:: : : :.  .. : .:  .::  . ..::.:   ::.:.:..:. . ..   
+sp|B0Y IRKQEEKRRKEEAERLAKEKEAALAAQRAEIERAKERERQLQLELERLDEESSSDDEGPV
+      1110      1120      1130      1140      1150      1160       
+
+           130       140       150       160       170       180   
+sp|Q1X FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD-EL
+        .       :  .   :: :  ..  .  :  .. . :::  .:    :. :: : . . 
+sp|B0Y NITP-----EDSTPTQSQLLPTVTPAAPVSAPESEQAGSPEDTSSQAPPVDFKLETESKN
+      1170           1180      1190      1200      1210      1220  
+
+            190         200       210       220       230       240
+sp|Q1X PLERIPFPTPSLSDYS--PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK
+       :  .:   . . .  :  :. .::  . ..::  : .     :  . .. : :  .. :.
+sp|B0Y PYFKITHQATDTQVVSSPPVPQPSFTSPKADV--HSTNPFHRLAKQETSKPAFTGSAPLE
+           1230      1240      1250        1260      1270      1280
+
+              250       260       270       280       290       300
+sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS
+       ..:    : : .:::..                                           
+sp|B0Y RKSR---ARPEADDDWSAAGSEFDSSDDDDDERPGGGSAKQLASILFGTMAPPRPLSAMD
+                1290      1300      1310      1320      1330       
+
+>>sp|Q00969|ATF2_RAT Cyclic AMP-dependent transcription   (487 aa)
+ initn:  65 init1:  65 opt: 134  Z-score: 134.6  bits: 33.9 E(516081):  5.6
+Smith-Waterman score: 134; 26.9% identity (63.9% similar) in 108 aa overlap (41-143:288-394)
+
+               20        30        40         50            60     
+sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEE-KKPAKKRK----SWGQELPV
+                                     ...: .:.  ..:: .      : ..  : 
+sp|Q00 MRLKAALTQQHPPVTNGDTVKGHGSGLVRAQSEESRPQSLQQPATSTTETPASPAHTTPQ
+       260       270       280       290       300       310       
+
+          70        80        90       100       110       120     
+sp|Q1X PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL
+        ...   :.:: .::  :.:: . . ::::::.  :..... ...::..  .. . :  :
+sp|Q00 TQNTSGRRRRAANEDPDEKRR-KFLERNRAAASRCRQKRKVWVQSLEKKAEDLSSLNGQL
+       320       330        340       350       360       370      
+
+         130       140       150       160       170       180     
+sp|Q1X LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE
+        .... .. :  .:.: :                                          
+sp|Q00 QSEVTLLRNEVAQLKQLLLAHKDCPVTAMQKKSGYHTADKDDSSEDLSVPSSPHTEAIQH
+        380       390       400       410       420       430      
+
+>>sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo s  (591 aa)
+ initn: 219 init1: 100 opt: 143  Z-score: 141.9  bits: 35.5 E(516081):  2.2
+Smith-Waterman score: 143; 31.2% identity (63.4% similar) in 112 aa overlap (35-142:111-219)
+
+           10        20        30        40        50        60    
+sp|Q1X MEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-L
+                                     ::: ..     . . . ::. ... .:: :
+sp|Q8N RDARQVYGLNFGSKEDANVFASAMMHALEVLNSQETGPTLPRQNSQLPAQVQNGPSQEEL
+               90       100       110       120       130       140
+
+            70        80        90       100        110       120  
+sp|Q1X PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEMEKLENEKIQMEQQN
+        . . .:  ..: :   : :..:.::   .:   .  : ::.::: :.::.:... :.:.
+sp|Q8N EIQRRQLQEQQRQK---ELERERLERERMERERLERERLERERLERERLEQEQLERERQE
+              150          160       170       180       190       
+
+            130         140       150       160       170       180
+sp|Q1X QFLLQRLSQME--AENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD
+       .   .:: ..:   ...:: .:                                      
+sp|Q8N RERQERLERQERLERQERLERQERLDRERQERQERERLERLERERQERERQEQLEREQLE
+       200       210       220       230       240       250       
+
+>>sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 OS=  (2161 aa)
+ initn:  89 init1:  74 opt: 154  Z-score: 144.7  bits: 37.9 E(516081):  1.5
+Smith-Waterman score: 155; 24.2% identity (50.2% similar) in 215 aa overlap (18-229:378-575)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     .:.::.:   .. ...:  :    .    :
+sp|Q6M RDSDEEGAEGHKDSQSAAGEEPETDGKKGTSPGSELPPPKTAWTENSRPSETEPAAPPIP
+       350       360       370       380       390       400       
+
+        50           60        70        80        90       100    
+sp|Q1X EEKKPAKKRK---SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK
+       .   :  .:    .::     :  . :: :    ::: :  : .:  :...... :   .
+sp|Q6M KPPPPPPHRGPVGNWGPPGDYPDRGGPPCKPPAPEDEDEAWR-QR--RKQSSSEISLAVE
+       410       420       430       440        450         460    
+
+          110       120       130       140       150       160    
+sp|Q1X RLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA
+       : . .. :.:. ..:..     ..:....   ....    .: ::  .  .. : :. : 
+sp|Q6M RARRRREEEERRMQEERRAACAEKLKRLD---EKFGAPDKRLKAEPAAPPVTPPAPALPP
+          470       480       490          500       510       520 
+
+          170       180       190       200       210       220    
+sp|Q1X TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLE
+       .. :  :::        ::    : :::  .   :.  : . .  .. :  :: .   . 
+sp|Q6M VV-PKETPT-----PPALP--PTPTPTPEKDPEEPAHAPPVQSAPTQ-AGPPAPT--PVS
+                   530         540       550       560          570
+
+          230       240       250       260       270       280    
+sp|Q1X GDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEG
+       : :.:                                                       
+sp|Q6M GGGTASSTSSGSFEASPAEPQLPSKEGPEPPEEVPAPTTPPAPKVEPKGDGVGPTRQPPS
+              580       590       600       610       620       630
+
+>>sp|P0C5H8|KAPC_EMENI Putative transcription factor kap  (278 aa)
+ initn:  70 init1:  70 opt: 152  Z-score: 154.8  bits: 36.8 E(516081): 0.42
+Smith-Waterman score: 169; 22.3% identity (51.2% similar) in 260 aa overlap (17-274:49-268)
+
+                             10        20        30        40      
+sp|Q1X               MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVK
+                                     : :    :. :.:: : .  .  ..   . 
+sp|P0C DHADQVLHDSLLAAQHLSQHPQQPRPQQPNAQPHHLQPTATTSPRDQNNIDPAISGGAML
+       20        30        40        50        60        70        
+
+         50        60        70        80        90       100      
+sp|Q1X PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL
+       :  . ::. . .  .: :            ::  ..     .:. .:::: .. :.::. 
+sp|P0C PPSQPPAQPEPTVEDETP------------KTYGKRPLSTSKRAAQNRAAQRAFRQRKES
+       80        90                   100       110       120      
+
+        110       120       130       140       150        160     
+sp|Q1X EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPAT
+        ..::: :...   . . . :. . ..::: .: . . .: ...  :....: .::.   
+sp|P0C YIRKLE-EQVK---EYEVMSQEYKALQAENYQLREYVINLQSRLLDSQGEVPELPGNIDL
+        130           140       150       160       170       180  
+
+         170       180       190       200       210       220     
+sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG
+        .:          : :.    .: :.:         .:.  . :.     :  .:.  . 
+sp|P0C NQP----------RTEI---SVPQPAP---------RPGQAGASAPPQGSPQSQVSIAND
+                         190                200       210       220
+
+         230        240       250       260       270       280    
+sp|Q1X DGSALP-LFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEG
+       : ..:  . . :  ...: ...  : ::..   :  .:: ...:. .  :          
+sp|P0C DMNSLNRIAEAGLGMRKHPNEE--AFLSNNFQARRGRGDETADPSETKTEPPTHGLPMVS
+              230       240         250       260       270        
+
+          290       300       310       320       330       340    
+sp|Q1X GDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAG
+
+>>sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like  (454 aa)
+ initn: 112 init1: 112 opt: 142  Z-score: 142.5  bits: 35.2 E(516081):    2
+Smith-Waterman score: 142; 31.7% identity (55.9% similar) in 145 aa overlap (14-145:291-435)
+
+                                10        20            30         
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEV-P-VLTVS--PADTSLNSA-
+                                     : :::  .:: : .: .   : ...: .: 
+sp|Q9M QPQQLIQTQERPFPKQTTIAFSNTVDVVNRSQPATQCQEVKPSILGIHNHPMNNNLLQAV
+              270       280       290       300       310       320
+
+       40             50          60        70        80        90 
+sp|Q1X DVKT----QEVKP-EEKKPAKKRKSW--GQELPVPKTNLPPRKRAKTEDEKEQRRIERVL
+       : ::      :.:  . .:    ::   ..  :::      :: . . ..  .:: .:..
+sp|Q9M DFKTGVTVAAVSPGSQMSPDLTPKSALDASLSPVPYMFGRVRKTGAVLEKVIERRQKRMI
+              330       340       350       360       370       380
+
+             100       110       120       130        140       150
+sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEV
+       .:: .:  :: ::.    .:: :  :... :. : ..  . :: ..:.: . : :     
+sp|Q9M KNRESAARSRARKQAYTMELEAEIAQLKELNEELQKKQVEIMEKQKNQLLEPLRQPWGMG
+              390       400       410       420       430       440
+
+              160       170       180       190       200       210
+sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+                                                                   
+sp|Q9M CKRQCLRRTLTGPW                                              
+              450                                                  
+
+>>sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange   (1021 aa)
+ initn:  61 init1:  61 opt: 153  Z-score: 148.1  bits: 37.4 E(516081): 0.99
+Smith-Waterman score: 153; 24.0% identity (52.8% similar) in 246 aa overlap (9-250:628-858)
+
+                                     10        20          30      
+sp|Q1X                       MSCDMEKTMSSVDSLPATPASEVP--VLTVSPADTSLN
+                                     : :..:::..   :.   : :.:    ::.
+sp|Q6P WQGPASSPDSRPCDNSAPSGCCEESPQAVEMPSTESLPTVLELELVHRVQTLSQLLLSLQ
+       600       610       620       630       640       650       
+
+         40        50        60        70        80        90      
+sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA
+       .. .  :.   : .. : ...    .:   . ::         ....:: .:.  ..::.
+sp|Q6P AV-IAQQDSYVEMQRTAIQEREKQFRLQSTRGNL-------LLEQERQRNFEKQREERAG
+        660       670       680       690              700         
+
+        100       110       120       130       140       150      
+sp|Q1X AQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRAN
+       ..  . . : :... : :. ...:. ..   ::.. :.:  .. :.: :  .:.. .:  
+sp|Q6P VEKLQSQLRQEQQRWERERARQQQELELAGARLQEREGEARQMRQRLDQERTELERQRQA
+     710       720       730       740       750       760         
+
+        160       170       180       190       200       210      
+sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP
+                 .   .     .::..: : :  :   .      .: : .:::.. ... :
+sp|Q6P YQHDLERLREAQRAVD----RERERLELLR-RFKKQNT--VPGALPPEVLAEAQPASHPP
+     770       780           790        800         810       820  
+
+        220        230       240        250       260       270    
+sp|Q1X AVSVAGLEGDGS-ALPLFDLGSDLKHHS-TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE
+       . .  :::: .. :      :: . : .  :.:  :                        
+sp|Q6P SFNGDGLEGHSAPAKAPGTQGSAMLHGTGPDNVERPEVARWDSAPPESRPAKSDVPIQLL
+            830       840       850       860       870       880  
+
+          280       290       300       310       320       330    
+sp|Q1X DGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTT
+                                                                   
+sp|Q6P SATNQIQRQTAVQQQIPTKLAASTKGGKEKGSKSRGSQRWESSASFDLKQQLLLSKFIGK
+            890       900       910       920       930       940  
+
+>>sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modulator  (1034 aa)
+ initn: 105 init1: 105 opt: 138  Z-score: 134.0  bits: 34.8 E(516081):  6.1
+Smith-Waterman score: 138; 35.7% identity (63.1% similar) in 84 aa overlap (73-153:645-725)
+
+             50        60        70        80        90       100  
+sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-
+                                     :.: .   :.:.:  ::. :.:   .  : 
+sp|Q9N LREHLVRFERLRRAMELRRRREIAERERRERERIRIIREREER--ERLQRERERLEIERQ
+          620       630       640       650         660       670  
+
+               110       120       130       140       150         
+sp|Q1X --ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM
+         ::.:.: :.:: :.:..::. .   .:... . :  : .::: .   : :.:      
+sp|Q9N KLERERMERERLERERIRIEQERRKEAERIAREREELRRQQQQL-RYEQEKRNSLKRPRD
+            680       690       700       710        720       730 
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+                                                                   
+sp|Q9N VDHRRDDPYWSENKKLSLDTDARFGHGSDYSRQQNRFNDFDHRERGRFPESSAVQSSSFE
+             740       750       760       770       780       790 
+
+>>sp|O60308|K0562_HUMAN Uncharacterized protein KIAA0562  (925 aa)
+ initn:  42 init1:  42 opt: 137  Z-score: 133.7  bits: 34.6 E(516081):  6.3
+Smith-Waterman score: 137; 25.1% identity (49.8% similar) in 271 aa overlap (70-317:217-472)
+
+      40        50        60        70        80        90         
+sp|Q1X VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT
+                                     :  :::  .. :. .   ... .  :  : 
+sp|O60 YARKSDYISPLDDLAFDMYQDPEVAQIIRKLDERKREAVQKERYDY-AKKLKQAIADLQK
+        190       200       210       220       230        240     
+
+     100        110          120       130       140       150     
+sp|Q1X SRER-KRLEMEK---LENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA
+         ::  : :.::   .:.:  .. ....   :.. :..::  .  .  . : ::.     
+sp|O60 VGERLGRYEVEKRCAVEKEDYDLAKEKK---QQMEQYRAEVYEQLELHSLLDAELMRRPF
+         250       260       270          280       290       300  
+
+          160           170        180       190       200         
+sp|Q1X NTPM-P----GSPATASPTLTPTLFK-QERDELPLERIPFPTPSLSDYSPTLKPS-----
+       . :. :    :::   .:   :.: . .::        ::   . :.:: :..:.     
+sp|O60 DLPLQPLARSGSPCHQKPM--PSLPQLEERGTENQFAEPFLQEKPSSYSLTISPQHSAVD
+            310       320         330       340       350       360
+
+          210       220       230       240       250        260   
+sp|Q1X TLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAP-LSDDDFNRLFHGD
+        :  ..:   :: ... .:  :   ::       ...:  . :. : .:. :..   .: 
+sp|O60 PLLPATD--PHPKINAESLPYDERPLPA------IRKHYGEAVVEPEMSNADISDARRGG
+                370       380             390       400       410  
+
+               270       280       290       300          310      
+sp|Q1X SSVEPD----SSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPV---TLEGIEMAHGLPD
+          ::.    ... : . :.::: :  : :  . .  ..  . .   . . .::  : : 
+sp|O60 MLGEPEPLTEKALREASSAIDVL-GETLVAEAYCKTWSYREDALLALSKKLMEMPVGTPK
+            420       430        440       450       460       470 
+
+        320       330       340                                    
+sp|Q1X ETTCKTSSVQPGFGASTTRCDGQGIAAGC                               
+       :                                                           
+sp|O60 EDLKNTLRASVFLVRRAIKDIVTSVFQASLKLLKMIITQYIPKHKLSKLETAHCVERTIP
+             480       490       500       510       520       530 
+
+>>sp|A2Z0Q0|HOX25_ORYSI Homeobox-leucine zipper protein   (260 aa)
+ initn:  43 init1:  43 opt: 129  Z-score: 133.6  bits: 32.8 E(516081):  6.4
+Smith-Waterman score: 129; 24.1% identity (57.8% similar) in 249 aa overlap (53-294:21-254)
+
+             30        40        50        60        70        80  
+sp|Q1X VPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK
+                                     :.::.  .... . . ..  .:: : : :.
+sp|A2Z           MEDLVDELYGVDEQGSSSAAARKRRLTAEQVRALERSFEEEKR-KLEPER
+                         10        20        30        40          
+
+               90       100       110       120       130       140
+sp|Q1X EQRRIER--VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLS
+       ...  .:  .   ..:.  . .: : . ..:: .  ...  .. ::   . . :.:. : 
+sp|A2Z KSELARRLGIAPRQVAVWFQNRRARWKTKQLELDFDRLRAAHDELLAGRAALAADNESLR
+      50        60        70        80        90       100         
+
+              150       160       170       180       190       200
+sp|Q1X QQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPT
+       .:.  :. ..... ...: : ::: :  : .:.  .. .. . ::.       : : . .
+sp|A2Z SQVILLTEKLQAN-GKSPSP-SPAPAEQTAVPAAPESAKS-FQLEE----GRCLYDAAGS
+     110       120         130       140        150           160  
+
+              210       220       230         240       250        
+sp|Q1X LKPSTLAESSDVAQHPAVSVAGLEGDGSALP--LFDLGSDLKHHSTDDVAAPLSDDDF--
+          .: . .. ::. ::. ::. .. ..  :   :  . .    : :: ..  ::::.  
+sp|A2Z TT-TTNGGGGGVAM-PAARVAAARAASNDSPESYFAGARSPPSSSEDDCGGAGSDDDYPS
+             170        180       190       200       210       220
+
+         260       270       280       290       300       310     
+sp|Q1X -NRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLP
+        . :.  :...  :.  :: ..:  :  ..:  : :..:                     
+sp|A2Z SSVLLPVDATLVGDA--FEHAVAATV--AADEEA-PLNSWEWFWN               
+              230         240         250        260               
+
+         320       330       340     
+sp|Q1X DETTCKTSSVQPGFGASTTRCDGQGIAAGC
+
+>>sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GYF do  (1299 aa)
+ initn:  85 init1:  85 opt: 140  Z-score: 134.5  bits: 35.2 E(516081):  5.7
+Smith-Waterman score: 140; 31.2% identity (58.9% similar) in 141 aa overlap (48-180:825-957)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK
+                                     :...  ..:..  ::  . : .    : :.
+sp|Q6Y RRQREQEIALRRQREEEERQQQEEALRRLEERRREEEERRK--QEELLRKQEEEAAKWAR
+          800       810       820       830         840       850  
+
+        80        90       100            110       120       130  
+sp|Q1X TEDEKEQRRIERVLRNRAAAQTSR----ERKRLEME-KLENEKIQMEQQNQFLLQRLSQM
+        :.: ..:  :  :: .  :   :    :::: :.: . ..: ....::.:  :.::.:.
+sp|Q6Y EEEEAQRRLEENRLRMEEEAARLRHEEEERKRKELEVQRQKELMRQRQQQQEALRRLQQQ
+            860       870       880       890       900       910  
+
+            140          150       160       170       180         
+sp|Q1X EAENNRLSQQLAQL---AAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF
+       . .     :::::.   .. . :...::    : :: : .    : ..::.         
+sp|Q6Y QQQ-----QQLAQMKLPSSSTWGQQSNTTACQSQATLSLAEIQKL-EEERERQLREEQRR
+                 920       930       940       950        960      
+
+     190       200       210       220       230       240         
+sp|Q1X PTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAA
+                                                                   
+sp|Q6Y QQRELMKALQQQQQQQQQKLSGWGNVSKPSGTTKSLLEIQQEEARQMQKQQQQQQQHQQP
+        970       980       990      1000      1010      1020      
+
+>>sp|Q4WA21|KAPC_ASPFU Putative transcription factor kap  (280 aa)
+ initn: 101 init1:  67 opt: 132  Z-score: 136.0  bits: 33.3 E(516081):  4.7
+Smith-Waterman score: 132; 23.7% identity (54.5% similar) in 156 aa overlap (66-216:75-214)
+
+          40        50        60        70            80        90 
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP----RKRAKTEDEKEQRRIERVL
+                                     :.:   :    ..  ::  ..     .:. 
+sp|Q4W QPPHMQPNTPARDQNNIDPAISGATMLTGPPQTPTQPDVTGQETPKTYGKRPLSTSKRAA
+           50        60        70        80        90       100    
+
+             100       110       120       130       140       150 
+sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR
+       .:::: .. :.::. ....::. :..  ..   . . .. ..::: .: . . .: ... 
+sp|Q4W QNRAAQRAFRQRKEAHIRELEG-KVKAYES---MGEAIKALQAENYQLREYIINLQSRLL
+          110       120        130          140       150       160
+
+              160       170       180       190       200       210
+sp|Q1X GSRANTP-MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+        :....: .::.   ..:          :.:.:.  ::    . .   :   :.    : 
+sp|Q4W DSQGEVPELPGNIDLSQP----------RSEIPVPPIPNSGTATTTAPPPTAPQQPQPSH
+              170                 180       190       200       210
+
+              220       230       240       250       260       270
+sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS
+         :: :                                                      
+sp|Q4W --AQAPTSNDDMNSLNRIAVAGLGMRKPPTEEANYLGNNFQAQARRVRPDEGQPEASELP
+                220       230       240       250       260        
+
+>>sp|Q9QXL1|KI21B_MOUSE Kinesin-like protein KIF21B OS=M  (1668 aa)
+ initn:  66 init1:  66 opt: 140  Z-score: 133.1  bits: 35.3 E(516081):  6.9
+Smith-Waterman score: 140; 25.5% identity (62.0% similar) in 137 aa overlap (41-169:724-856)
+
+               20        30        40        50        60        70
+sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL
+                                     : : .. :. .  :... . .::   ....
+sp|Q9Q STMECYTEEKANKIKADYEKRLREMNRDLQKLQAAQKEHARLLKNQSRYERELKKLQAEV
+           700       710       720       730       740       750   
+
+                     80        90       100         110       120  
+sp|Q1X PPRKRAKT------EDEKEQRRIERVLRNRAAAQTSRERKRLEME--KLENEKIQMEQQN
+          :.::.      ..:...::. .. :::  :: ..:..: :..   ::..:    .:.
+sp|Q9Q AEMKKAKVALMKQMREEQQRRRLVETKRNREIAQLKKEQRRQEFQIRALESQK----RQQ
+           760       770       780       790       800             
+
+            130       140       150       160       170       180  
+sp|Q1X QFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDEL
+       ...:.: .:  .   ::.. ... .:   : .  .   :. ..:: :             
+sp|Q9Q EIVLRRKTQEVSALRRLAKPMSERVAGRVGLKPPNMDSGAEVSASTTSSEAESGARSVSS
+     810       820       830       840       850       860         
+
+            190       200       210       220       230       240  
+sp|Q1X PLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHH
+                                                                   
+sp|Q9Q IVRQWNRKIDHFLGDRPTATVNGGRPARKKFQKKGASQSFSKAARLKWQSLERRIIDIVM
+     870       880       890       900       910       920         
+
+>>sp|P21127|CD11B_HUMAN Cell division protein kinase 11B  (795 aa)
+ initn:  68 init1:  68 opt: 135  Z-score: 132.7  bits: 34.2 E(516081):  7.2
+Smith-Waterman score: 135; 27.6% identity (53.0% similar) in 181 aa overlap (41-208:96-272)
+
+               20        30        40        50        60          
+sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE------LP
+                                     :... : :..:  ....: . :      . 
+sp|P21 PYRREDSMEDRGEEDDSLAIKPPQQMSRKEKVHHRKDEKRKEKRRHRSHSAEGGKHARVK
+          70        80        90       100       110       120     
+
+           70        80        90       100          110       120 
+sp|Q1X VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEM--EKLENEKIQMEQQ
+         . .   ::: . :..: .:. ::  : . : . :: :: :::.  .: : :. . :::
+sp|P21 EKEREHERRKRHREEQDKARREWERQKRREMAREHSRRERDRLEQLERKRERERKMREQQ
+         130       140       150       160       170       180     
+
+             130       140        150         160       170        
+sp|Q1X NQFLLQRLSQMEAENNRLSQQLA-QLAAEVRGSRAN--TPMPGSPATASPTLTPTLFKQE
+       ..   :.  . .::. :  ..   ...:. :  : .    . .:  . ::   :    .:
+sp|P21 KEQREQKERERRAEERRKEREARREVSAHHRTMREDYSDKVKASHWSRSPPRPP----RE
+         190       200       210       220       230           240 
+
+      180       190        200       210       220       230       
+sp|Q1X RDELPLERIPFPT-PSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS
+       : ::   : :  . :. ..    ::   . :                             
+sp|P21 RFELGDGRKPGEARPARAQKPAQLKEEKMEERDLLSDLQDISDSERKTSSAESSSAESGS
+             250       260       270       280       290       300 
+
+       240       250       260       270       280       290       
+sp|Q1X DLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVN
+                                                                   
+sp|P21 GSEEEEEEEEEEEEEGSTSEESEEEEEEEEEEEEETGSNSEEASEQSAEEVSEEEMSEDE
+             310       320       330       340       350       360 
+
+>>sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Gallus  (359 aa)
+ initn:  87 init1:  87 opt: 130  Z-score: 132.7  bits: 33.0 E(516081):  7.2
+Smith-Waterman score: 130; 30.5% identity (67.1% similar) in 82 aa overlap (83-163:276-355)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     .:.:  :.:.::. ::. : ..  . . ::
+sp|Q78 RFSDEQLVTMSVRELNRQLRGVSKEEVIRLKQKR--RTLKNRGYAQSCRFKRVQQRHVLE
+         250       260       270         280       290       300   
+
+            120       130       140        150       160       170 
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLT
+       .:: :. :: . : :..:..  : .  ...  .:...  : . ...  :.::        
+sp|Q78 SEKNQLLQQVEHLKQEISRLVRERDAYKEKYEKLVSNGFRENGSSSDNPSSPEFFM    
+           310       320       330       340       350             
+
+             180       190       200       210       220       230 
+sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP
+
+>>sp|Q6A000|K0753_MOUSE Uncharacterized protein KIAA0753  (959 aa)
+ initn:  70 init1:  70 opt: 136  Z-score: 132.5  bits: 34.4 E(516081):  7.3
+Smith-Waterman score: 136; 25.7% identity (51.0% similar) in 253 aa overlap (39-269:542-766)
+
+       10        20        30        40        50          60      
+sp|Q1X MSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRK--SWGQELPVP
+                                     : ..  . :.  .:  . :  .:       
+sp|Q6A RNRPNQPYSKSRLQQTTVSSRLKMNRQPMKDHRAPWIPPNPTSPPASPKCAAWM------
+             520       530       540       550       560           
+
+         70        80         90       100               110       
+sp|Q1X KTNLPPRKRAKTED-EKEQRRIERVLRNRAAAQTSR-------ERKRL-EMEKLENEKIQ
+       :..  ::  :: .. ..:. . :  ::. :  ...:         ::: :.:.:: ....
+sp|Q6A KVKYSPRDAAKEQSLQQEDIHKESQLRGDAEQEAARLSWPDAESSKRLKELEELEAKEME
+         570       580       590       600       610       620     
+
+       120       130       140       150            160        170 
+sp|Q1X MEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-----RGSRANTPMPGSPATAS-PTLT
+        .:.     :::. .:::..: ...: .: ::      . : . : .  .   :    : 
+sp|Q6A RKQK-----QRLNWLEAETSRRTKELDELKAEEMDRLQKLSVSATQLADKVEEAVLERLK
+              630       640       650       660       670       680
+
+             180       190       200       210       220       230 
+sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP
+       : :.: .: .  .:     .  :.:     .::  : .   : .:: ... .  ..  .:
+sp|Q6A PLLIKAQRVNSSVE----ANSHLKD-----RPSRHAAA---AAQPAEQASDVPFESRNIP
+              690           700               710       720        
+
+                  240       250       260       270       280      
+sp|Q1X -----LFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGD
+            : : . .:  .. : .   :...   ::  :::.  ::                 
+sp|Q6A QLRDCLEDTAHELWARTQDKI---LGSETSARL--GDSKDSPDLETMMLRMEEMEKYQET
+      730       740          750         760       770       780   
+
+        290       300       310       320       330       340      
+sp|Q1X LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 
+                                                                   
+sp|Q6A VRQRYNKIVYADPHLWMHEERNDQNTPAVSEGPLASHPIKITKTATQKCPAVNILLERPC
+           790       800       810       820       830       840   
+
+>>sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Avian   (369 aa)
+ initn:  87 init1:  87 opt: 130  Z-score: 132.5  bits: 33.1 E(516081):  7.4
+Smith-Waterman score: 130; 30.5% identity (67.1% similar) in 82 aa overlap (83-163:276-355)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     .:.:  :.:.::. ::. : ..  . . ::
+sp|P23 RFSDEQLVTMSMRELNRQLRGVSKEEVIRLKQKR--RTLKNRGYAQSCRFKRVQQRHVLE
+         250       260       270         280       290       300   
+
+            120       130       140        150       160       170 
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLT
+       .:: :. :: . : :..:..  : .  ...  .:...  : . ...  :.::        
+sp|P23 SEKNQLLQQVEHLKQEISRLVRERDAYKEKYEKLVSNGFRENGSSSDNPSSPEFFMYPRE
+           310       320       330       340       350       360   
+
+             180       190       200       210       220       230 
+sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP
+                                                                   
+sp|P23 SSTTVM                                                      
+                                                                   
+
+>>sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 OS=Po  (601 aa)
+ initn: 111 init1:  73 opt: 149  Z-score: 147.5  bits: 36.5 E(516081):  1.1
+Smith-Waterman score: 149; 25.4% identity (54.2% similar) in 177 aa overlap (29-186:294-463)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR-K
+                                     .:.:.::..     .. .:: . :...: :
+sp|Q5R DSQVLIELHKSGFARPGDVEFEDFSQPMNRAPSDSSLGTP----SDGRPELRGPGRSRTK
+           270       280       290       300           310         
+
+          60                      70        80        90       100 
+sp|Q1X SW--GQEL------------PVPKT--NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+        :  :..             :::..  : ::  :.  .      .: . .. : :.  : 
+sp|Q5R RWPFGKKNKPRPPPLSPLGGPVPSALPNGPPSPRSGRDPLAILSEISKSVKPRLASFRSL
+     320       330       340       350       360       370         
+
+             110       120       130       140         150         
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA--EVRGSRANTPM
+       . .:  .   .  ..  ::: . : :   :.: .. .:.... :  :  ...    .::.
+sp|Q5R RGSRGTVVTEDFSHLPPEQQRKRLQQ---QLEERSRELQKEVDQREALKKMKDVYEKTPQ
+     380       390       400          410       420       430      
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+        :.::.  : .: :: . :: .: ...                                 
+sp|Q5R MGDPASLEPQITETLSNIERLKLEVQKYEAWLAEAESRVLSNRGDSLSRHARPPDPPTSA
+        440       450       460       470       480       490      
+
+>>sp|P23050|FOS_AVINK p55-v-Fos-transforming protein OS=  (322 aa)
+ initn:  77 init1:  46 opt: 129  Z-score: 132.4  bits: 32.8 E(516081):  7.5
+Smith-Waterman score: 129; 22.5% identity (49.7% similar) in 306 aa overlap (2-291:12-294)
+
+                         10        20          30        40        
+sp|Q1X           MSCDMEKTMSSVDSLPATPASEVPVL--TVSPADTSLNSADVKTQEVKPE
+                  : ..  :...... :       :.:  .:.:...  .   : .      
+sp|P23 SQDFCTDLAVSSANFVPTVTAISTSPDLQWLVQPTLISSVAPSQNRGHPYGVPAPAPPAA
+               10        20        30        40        50        60
+
+       50        60        70        80        90       100        
+sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM
+        ..::  .   :.   . . .   . .  . .:.:.:::.:  ::. ::   :.:.:   
+sp|P23 YSRPAVLKAPGGRGQSIGRRG---KVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELT
+               70        80           90        100       110      
+
+      110       120       130       140             150            
+sp|Q1X EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA------QLAAEVRGSR---ANTPM
+       . :. :  :.:.... :  .....  :...:   ::      ..  :.: :.   : : .
+sp|P23 DTLQAETDQLEEEKSALQAEIANLLKEKEKLEFILAAHRPACKMPEELRFSEELAAATAL
+        120       130       140       150       160       170      
+
+     160        170       180       190       200        210       
+sp|Q1X P-GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL-AESSDVAQHPA
+         :.:   ::. .   :      :::  .    :..    :. .   : ::  :      
+sp|P23 DLGAP---SPAAAEEAFA-----LPL--MTEAPPAVPPKEPSGSGLELKAEPFD----EL
+        180          190              200       210       220      
+
+       220       230       240       250          260       270    
+sp|Q1X VSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPL---SDDDFNRLFHGDSSVEPDSSVFE
+       .  :: .  . ..: .:: .  . ...:    ::   :  ... :     .  :  :.. 
+sp|P23 LFSAGPREASRSVPDMDLPGASSFYASD--WEPLGAGSGGELEPLCTPVVTCTPCPSTYT
+            230       240       250         260       270       280
+
+          280       290       300       310       320       330    
+sp|Q1X DGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTT
+       . ..:   :.   .:::                                           
+sp|P23 STFVFTYPEA---DAFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL               
+              290          300       310       320                 
+
+>>sp|Q80YR5|SAFB2_MOUSE Scaffold attachment factor B2 OS  (991 aa)
+ initn:  94 init1:  94 opt: 146  Z-score: 141.7  bits: 36.2 E(516081):  2.3
+Smith-Waterman score: 146; 26.6% identity (49.0% similar) in 263 aa overlap (5-245:610-858)
+
+                                         10        20        30    
+sp|Q1X                           MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS
+                                     ::.:.  .:.  . :.  : . . :  : :
+sp|Q80 PEDIKKEKDQDELTPGAAGHSRVTKSGSRGMERTVV-MDKSKGEPVISVKATSRSK-DRS
+     580       590       600       610        620       630        
+
+           40             50         60         70        80       
+sp|Q1X LNSADVKTQ-----EVKPEEK-KPAKKRKSWGQ-ELPVPKTNLPPRKRAKTEDEKEQR--
+        .: : :..     ..   .: :  ..:.   : :  . .:.   :.: . . :.:::  
+sp|Q80 SKSQDRKSEGREKRDILSFDKIKEQRERERQRQREREIRETE---RRREREQREREQRLD
+       640       650       660       670          680       690    
+
+                90       100          110       120       130      
+sp|Q1X ----RIE--RVLRNRAAAQTSR---ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN
+           : :  :. :.:   : .:   ::.::: :.:: :....:.. .   ::. .   : 
+sp|Q80 AFQERREKARLQRERMQLQCQRQRLERERLERERLERERMRVERERRKEQQRIMR---ER
+          700       710       720       730       740          750 
+
+        140       150       160       170       180       190      
+sp|Q1X NRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS--L
+       ..: .:  :: :: .      :.    :  .    :   . .:  :  .   :: :.  .
+sp|Q80 EELRRQQEQLRAEQERRALRRPYD-LDARRDDGYWP---EGKRAALEDRYRDFPRPDHRF
+             760       770        780          790       800       
+
+          200       210       220       230         240       250  
+sp|Q1X SDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP--LFDLGSDLKHHSTDDVAAPLS
+        :..   .     .  :  .   . :   : ::.  :    . :  :.::. :       
+sp|Q80 HDFDHRDRGHYQEHVIDRRDGSRTRVE--ERDGQYYPDDQHSHGRLLEHHAWDSGDGWHG
+       810       820       830         840       850       860     
+
+            260       270       280       290       300       310  
+sp|Q1X DDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAH
+                                                                   
+sp|Q80 YSSDKKLNEGQGLPPPPRVSREWAEHSSQLEEQQVPVWHSAVDTNMTGHEHIRWRGAERG
+         870       880       890       900       910       920     
+
+>>sp|Q6ZSZ5|ARHGI_HUMAN Rho guanine nucleotide exchange   (1173 aa)
+ initn: 100 init1:  65 opt: 137  Z-score: 132.3  bits: 34.7 E(516081):  7.5
+Smith-Waterman score: 137; 25.3% identity (53.7% similar) in 190 aa overlap (80-267:851-1029)
+
+      50        60        70        80        90       100         
+sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+                                     ....:: .:.  ..::: .  . . : :..
+sp|Q6Z QDSYVETQRAAIQEREKQFRLQSTRGNLLLEQERQRNFEKQREERAALEKLQSQLRHEQQ
+              830       840       850       860       870       880
+
+     110       120       130       140       150       160         
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT
+       . : :.  ..:. .    ::.. :.:  .: ..: :  ::.. .:            .  
+sp|Q6Z RWERERQWQHQELERAGARLQEREGEARQLRERLEQERAELERQRQAYQHDLERLREAQR
+              890       900       910       920       930       940
+
+     170       180       190        200       210       220        
+sp|Q1X LTPTLFKQERDELPLERIPFPTPSLSDYSP-TLKPSTLAESSDVAQHPAVSVAGLEGDG-
+        .    ..::..: : :      . .. .: .: :.::::..  .. :. .  ::::   
+sp|Q6Z AV----ERERERLELLR----RLKKQNTAPGALPPDTLAEAQPPSHPPSFNGEGLEGPRV
+                  950           960       970       980       990  
+
+       230       240       250       260       270       280       
+sp|Q1X SALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDL
+       : ::    :   ..    .::   :    .:: ..:  ..                    
+sp|Q6Z SMLP---SGVGPEYAERPEVARRDSAPTESRLAKSDVPIQLLSATNQFQRQAAVQQQIPT
+              1000      1010      1020      1030      1040         
+
+       290       300       310       320       330       340       
+sp|Q1X SAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC  
+                                                                   
+sp|Q6Z KLAASTKGGKDKGGKSRGSQRWESSASFDLKQQLLLNKLMGKDESTSRNRRSLSPILPGR
+    1050      1060      1070      1080      1090      1100         
+
+>>sp|O70191|ATF5_MOUSE Cyclic AMP-dependent transcriptio  (283 aa)
+ initn:  57 init1:  57 opt: 129  Z-score: 133.1  bits: 32.8 E(516081):  6.8
+Smith-Waterman score: 132; 28.4% identity (52.7% similar) in 148 aa overlap (8-155:155-277)
+
+                                      10        20        30       
+sp|Q1X                        MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNS
+                                     :....: : .   ::.     .:.:..:..
+sp|O70 PSPPPPPPPAAAPSLPLPLPLPTFDLPQPPTLDTLDLLAVYCRSEA-----GPGDSGLST
+          130       140       150       160       170              
+
+        40        50        60        70        80        90       
+sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA
+         :  :   :    :          :: :    :  . :.:. ...:.. ..   :..::
+sp|O70 LPVPQQ---PPPLAP----------LPSPARPAPYPSPASTRGDRKQKKRDQ---NKSAA
+     180          190                 200       210          220   
+
+       100       110       120       130       140       150       
+sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT
+          :.::: : : ::.:   .: .:. : .:  ..: :     : . .:  ::  .:.  
+sp|O70 LRYRQRKRAEGEALEGECQGLEARNRELRERAESVEREI----QYVKDLLIEVYKARSQR
+           230       240       250       260           270         
+
+       160       170       180       190       200       210       
+sp|Q1X PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPA
+                                                                   
+sp|O70 TRST                                                        
+     280                                                           
+
+>>sp|A6NC98|CC88B_HUMAN Coiled-coil domain-containing pr  (1476 aa)
+ initn:  67 init1:  67 opt: 146  Z-score: 139.4  bits: 36.3 E(516081):    3
+Smith-Waterman score: 146; 28.2% identity (55.9% similar) in 195 aa overlap (6-186:276-466)
+
+                                        10        20        30     
+sp|Q1X                          MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSL
+                                     ::.   .::   . . :. .  .     .:
+sp|A6N RAPAEGPSHHLALQLANAKAQLRRLRQELEEKAELLLDSQAEVQGLEAEIRRLRQEAQAL
+         250       260       270       280       290       300     
+
+          40        50        60        70          80        90   
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP-RKRAKT-EDEKEQRRIERVLRN
+        :...:  :.  :: .  ..: .   .::  . .:   :.: .. :  : : . :::: .
+sp|A6N -SGQAKRAELYREEAEALRERAG---RLPRLQEELRRCRERLQAAEAYKSQLEEERVLSG
+          310       320          330       340       350       360 
+
+           100       110       120        130       140            
+sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQ-RLSQMEAENNRLSQQLAQLAAE---
+          :. .  ...::  . .  ...  :....::. ::.. .:: . : .:. ::: :   
+sp|A6N VLEASKALLEEQLEAARERCARLHETQRENLLLRTRLGEAHAELDSLRHQVDQLAEENVE
+             370       380       390       400       410       420 
+
+       150       160            170       180        190       200 
+sp|Q1X --VRGSRANTPMPGSP-----ATASPTLTPTLFKQERDEL-PLERIPFPTPSLSDYSPTL
+         .. .:.  : ::::     : :.:.:   . . :  .:  :::               
+sp|A6N LELELQRSLEPPPGSPGEAPLAGAAPSLQDEVREAEAGRLRTLERENRELRGLLQVLQGQ
+             430       440       450       460       470       480 
+
+             210       220       230       240       250       260 
+sp|Q1X KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFH
+                                                                   
+sp|A6N PGGQHPLLEAPREDPVLPVLEEAPQTPVAFDHSPQGLVQKARDGGPQALDLAPPALDSVL
+             490       500       510       520       530       540 
+
+>>sp|B0WYY2|MOEH_CULQU Moesin/ezrin/radixin homolog 1 OS  (572 aa)
+ initn:  83 init1:  83 opt: 132  Z-score: 131.8  bits: 33.6 E(516081):    8
+Smith-Waterman score: 132; 23.7% identity (61.0% similar) in 118 aa overlap (36-151:294-411)
+
+          10        20        30        40        50        60     
+sp|Q1X EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV
+                                     .. ::. .... .:.: ::...    .: .
+sp|B0W VFFAPRVRINKRILALCMGNHELYMRRRKPDTIDVQQMKAQAREEKNAKQQEREKLQLAL
+           270       280       290       300       310       320   
+
+          70        80          90       100       110       120   
+sp|Q1X PKTNLPPRKRAKTEDE--KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ
+          .   .:. . ::.  . :...::   :   ::   .: . ....:.  : ..::...
+sp|B0W AARERAEKKQQEYEDRIRNMQEEMERSQANLIEAQDMIRRLEEQLKQLQAAKDDLEQRQN
+           330       340       350       360       370       380   
+
+           130       140       150       160       170       180   
+sp|Q1X FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELP
+        :   ....:  .:  . . :.:  :.:                                
+sp|B0W ELQVMITRLEETKNMEAAERAKLEDEIRMKQEEVHKIQEEVSVKDSETKRLQEEVEEARR
+           390       400       410       420       430       440   
+
+>>sp|P11939|FOS_CHICK Proto-oncogene c-Fos OS=Gallus gal  (367 aa)
+ initn:  77 init1:  46 opt: 129  Z-score: 131.6  bits: 32.9 E(516081):  8.3
+Smith-Waterman score: 129; 22.5% identity (49.7% similar) in 306 aa overlap (2-291:57-339)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|P11 LTYYPSPADSFSSMGSPVNSQDFCTDLAVSSANFVPTVTAISTSPDLQWLVQPTLISSVA
+         30        40        50        60        70        80      
+
+      30        40        50        60        70        80         
+sp|Q1X PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER
+       :...  .   : .       ..::  .   :.   . . .   . .  . .:.:.:::.:
+sp|P11 PSQNRGHPYGVPAPAPPAAYSRPAVLKAPGGRGQSIGRRG---KVEQLSPEEEEKRRIRR
+         90       100       110       120          130       140   
+
+      90       100       110       120       130       140         
+sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA-----
+         ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::     
+sp|P11 E-RNKMAAAKCRNRRRELTDTLQAETDQLEEEKSALQAEIANLLKEKEKLEFILAAHRPA
+            150       160       170       180       190       200  
+
+           150          160        170       180       190         
+sp|Q1X -QLAAEVRGSR---ANTPMP-GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSP
+        ..  :.: :.   : : .  :.:   ::. .   :      :::  .    :..    :
+sp|P11 CKMPEELRFSEELAAATALDLGAP---SPAAAEEAFA-----LPL--MTEAPPAVPPKEP
+            210       220          230              240       250  
+
+     200        210       220       230       240       250        
+sp|Q1X TLKPSTL-AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPL---SDDD
+       . .   : ::  :      .  :: .  . ..: .:: .  . ...:    ::   :  .
+sp|P11 SGSGLELKAEPFD----ELLFSAGPREASRSVPDMDLPGASSFYASD--WEPLGAGSGGE
+            260           270       280       290         300      
+
+         260       270       280       290       300       310     
+sp|Q1X FNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLP
+       .. :     .  :  :.. . ..:   :.   .:::                        
+sp|P11 LEPLCTPVVTCTPCPSTYTSTFVFTYPEA---DAFPSCAAAHRKGSSSNEPSSDSLSSPT
+        310       320       330          340       350       360   
+
+         320       330       340     
+sp|Q1X DETTCKTSSVQPGFGASTTRCDGQGIAAGC
+                                     
+sp|P11 LLAL                          
+                                     
+
+>>sp|Q9XUS2|MED29_CAEEL Mediator of RNA polymerase II tr  (441 aa)
+ initn: 138 init1:  68 opt: 130  Z-score: 131.5  bits: 33.1 E(516081):  8.4
+Smith-Waterman score: 130; 26.2% identity (53.9% similar) in 141 aa overlap (112-243:13-152)
+
+              90       100       110       120       130        140
+sp|Q1X KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN-NRLS
+                                     ..... :.::.:  ..: .::. .. ..  
+sp|Q9X                   MSGQGPPPSMTPQQQHMLMQQQQQQQMMRQQQMQQQQMQQQR
+                                 10        20        30        40  
+
+              150         160             170       180       190  
+sp|Q1X QQLAQLAAEVRGSRANTP--MP--GSPATAS----PTLTPTLFKQERDELPLERIPFPTP
+       ::  :  :.   .:: ::  .:  :::. :     : : :    : :. :   ..  :. 
+sp|Q9X QQQIQQQAQQPYQRARTPQMVPQGGSPGGAHLQMHPHLQPQGQMQPRSPLVGAQLQAPSS
+             50        60        70        80        90       100  
+
+            200       210       220       230       240       250  
+sp|Q1X SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLS
+         .  .::  :. . ..  . :  ..  . .   ::. :  ..  .:.: :         
+sp|Q9X VPTAANPTT-PQMMQQQMGMNQPMSLPPTHVSRPGSVAPPSSVPVNLQHTSGAPGLPGSQ
+            110        120       130       140       150       160 
+
+            260       270       280       290       300       310  
+sp|Q1X DDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAH
+                                                                   
+sp|Q9X MEHQYPMHLQPQQQTLSRPGSQQSQHIQQPGSIQRPGSVLAPGSIPPGGPASQTGPQSIQ
+             170       180       190       200       210       220 
+
+>>sp|A1D9Z7|KAPC_NEOFI Putative transcription factor kap  (280 aa)
+ initn: 101 init1:  67 opt: 131  Z-score: 135.1  bits: 33.1 E(516081):  5.3
+Smith-Waterman score: 131; 23.4% identity (55.0% similar) in 171 aa overlap (66-223:75-231)
+
+          40        50        60        70            80        90 
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP----RKRAKTEDEKEQRRIERVL
+                                     :.:   :    ..  ::  ..     .:. 
+sp|A1D QPPHMQPNTPARDQNNIDPAISGATMLTGPPQTPTQPDVTGQETPKTYGKRPLSTSKRAA
+           50        60        70        80        90       100    
+
+             100       110       120       130       140       150 
+sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR
+       .:::: .. :.::. ....::. :..  ..   . . .. ..::: .: . . .: ... 
+sp|A1D QNRAAQRAFRQRKEAHIRELEG-KVKAYEN---MGEAIKALQAENYQLREYIINLQSRLL
+          110       120        130          140       150       160
+
+              160       170       180       190       200          
+sp|Q1X GSRANTP-MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS------
+        :....: .::.   ..:          :.:.:.  ::    . .   :   :.      
+sp|A1D DSQGEVPELPGNIDLSQP----------RSEIPVPPIPNSGTTTTAAPPPTAPQQPQPPH
+              170                 180       190       200       210
+
+          210         220       230       240       250       260  
+sp|Q1X TLAESS--DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG
+       . : .:  :. .   ..::::                                       
+sp|A1D AQAPTSNDDMNSLNRIAVAGLGMRKPPTEEANYLGNNFQAQARRVRPDEGQTEASELPKQ
+              220       230       240       250       260       270
+
+>>sp|P29176|FOSX_MSVFR Transforming protein v-Fos/v-Fox   (244 aa)
+ initn:  82 init1:  50 opt: 132  Z-score: 136.8  bits: 33.3 E(516081):  4.2
+Smith-Waterman score: 132; 23.7% identity (49.6% similar) in 224 aa overlap (2-222:33-242)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  : ..... :       :.:  .:.
+sp|P29 LSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTETAISTSPDLQWLVQPTLVSSVA
+             10        20        30        40        50        60  
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   . :: .    .    :  : :.   . . .   . .  . .:. .:::.
+sp|P29 PSQTRAPHPYGLPTQSAGAYARAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEVKRRIR
+             70        80        90       100          110         
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|P29 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP
+     120        130       140       150       160       170        
+
+      150       160       170       180       190       200        
+sp|Q1X EVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAE
+         .    .  .:   ..::  ::  :       :::   : : :::   . ..    .  
+sp|P29 ACKIPD-DLGFPEEMSVASLDLTGGL-------LPLLNDPEPKPSLEPVKSSFDDFLFPA
+      180        190       200              210       220       230
+
+      210       220       230       240       250       260        
+sp|Q1X SSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEP
+       ::  ..   .:.::                                              
+sp|P29 SS--GHSGFISMAGWQ                                            
+                240                                                
+
+>>sp|Q09458|YQ37_CAEEL Uncharacterized protein C09F5.7 O  (395 aa)
+ initn:  45 init1:  45 opt: 129  Z-score: 131.2  bits: 32.9 E(516081):  8.7
+Smith-Waterman score: 129; 23.6% identity (55.3% similar) in 208 aa overlap (30-227:29-229)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+                                    : :..:   .: ...  :  :: .:: .:  
+sp|Q09  MLLPQPKSTAKKPKGEAKSLVARERKSQPQDSAL--MEVPAKREMP--KKEVKKIRSVH
+                10        20        30          40          50     
+
+               70          80        90       100        110       
+sp|Q1X QELPVPKTNLPP--RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME-KLENEKIQ
+       .   : ::.     ::.. . .  .. . .. .   :. ..: :.:. ::  :: .... 
+sp|Q09 KVESVTKTKSAKLRRKKSYSLSSDNESKYKKSISPAASEEASIEKKKEEMTSKLPEKSVA
+          60        70        80        90       100       110     
+
+       120          130       140       150       160       170    
+sp|Q1X MEQQNQ---FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTL
+       :.  :.   : ..  ...     . ::. ...:..  .:  .  :: :  ... .     
+sp|Q09 MKTANSPKTFNMELAKKFFEMRMKESQRTSRMATKSDSSLET--MPESSHNSGQSSKSRK
+         120       130       140       150         160       170   
+
+          180        190        200         210       220       230
+sp|Q1X FKQERDE-LPLERIPFPTPSLSDYS-PTLKPSTLA--ESSDVAQHPAVSVAGLEGDGSAL
+        .. : .  ::.:  :   .   .  :  ::. :.  : ......: . .:.:: ::   
+sp|Q09 SQRTRGKSTPLDRNIFKENGEPVWVVPDRKPGELVMNEHGEMVKYPEL-MAALEEDGLEM
+           180       190       200       210       220        230  
+
+              240       250       260       270       280       290
+sp|Q1X PLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAF
+                                                                   
+sp|Q09 EDGKGWFQKMSSYLMGELDQGRIDNKAASKDINPFASMETLEERTDLYFSRETVIYNTTD
+            240       250       260       270       280       290  
+
+>>sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=T  (349 aa)
+ initn: 163 init1:  89 opt: 128  Z-score: 131.0  bits: 32.7 E(516081):    9
+Smith-Waterman score: 128; 29.9% identity (63.9% similar) in 97 aa overlap (59-150:223-319)
+
+       30        40        50        60            70         80   
+sp|Q1X SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE--LPVP--KTNLPP-RKRAKTEDEKE
+                                     ::     :::  . ..:    :..  ::.:
+sp|P23 NKPMPLVPVQSGAVIGVAGPATNLNIGMDYWGATGSSPVPAMRGKVPSGSARGEQWDERE
+            200       210       220       230       240       250  
+
+            90       100       110       120       130       140   
+sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL
+        .. .: : :: .:. :: ::. : :.: ..   ....:. :  .:.... : ..: .. 
+sp|P23 LKKQKRKLSNRESARRSRLRKQAECEELGQRAEALKSENSSLRIELDRIKKEYEELLSKN
+            260       270       280       290       300       310  
+
+           150       160       170       180       190       200   
+sp|Q1X AQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKP
+       ..: :..                                                     
+sp|P23 TSLKAKLGESGGGGGSDAVPDMNERGDTNGGSHQKEP                       
+            320       330       340                                
+
+>>sp|Q5R452|SAFB1_PONAB Scaffold attachment factor B1 OS  (914 aa)
+ initn:  45 init1:  45 opt: 137  Z-score: 133.8  bits: 34.6 E(516081):  6.3
+Smith-Waterman score: 137; 26.4% identity (60.5% similar) in 129 aa overlap (23-143:572-699)
+
+                       10        20        30        40        50  
+sp|Q1X         MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKP
+                                     :::..:. . ..  ..    ..   .::. 
+sp|Q5R QKPGPSERSRATKSGSRGTERTVVMDKSKGVPVISVKTSGSKERASKSLDRKSASREKRS
+             550       560       570       580       590       600 
+
+                    60        70        80        90       100     
+sp|Q1X A-------KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERK
+       .       . :::  .:    .     ..: ... :.:.:.  .. :.: : : .: ::.
+sp|Q5R VVSFDKVKEPRKSRDSESHRVRERSEREQRMQAQWEREERERLEIARERLAFQRQRLERE
+             610       620       630       640       650       660 
+
+          110       120       130       140       150       160    
+sp|Q1X RLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA
+       :.: :.:: :....:.. .   .:. . : :. : .:.:                     
+sp|Q5R RMERERLERERMHVEHERRREQERIHR-EREELRRQQELRYEQERRPAVRRPYDLDRRDD
+             670       680        690       700       710       720
+
+          170       180       190       200       210       220    
+sp|Q1X TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLE
+                                                                   
+sp|Q5R AYWPEAKRAALDERYHSDFNRQDRFHDFDHRDRGRYPDHSVDRREGSRSMMGEREGQHYP
+              730       740       750       760       770       780
+
+>>sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein d  (256 aa)
+ initn:  86 init1:  86 opt: 130  Z-score: 134.6  bits: 32.9 E(516081):  5.6
+Smith-Waterman score: 148; 26.7% identity (54.1% similar) in 146 aa overlap (19-163:119-245)
+
+                           10        20        30        40        
+sp|Q1X             MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE
+                                     :.: .:. ... :.: .. : . .: . : 
+sp|O02 LLPGGPARLGGPGPAPRPLKREPDWGDGDAPGSLLPAQVAACAQTVVSLA-AAAQPTPPA
+       90       100       110       120       130        140       
+
+       50        60        70        80        90       100        
+sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM
+         .:   :.: .   : :  .    ::.  .   : :  .:  ::  :.. ::.. .   
+sp|O02 SPEP--PRRSPAPPAPGPARDKAAGKRGPDRGSPEYR--QRRERNNIAVRKSRDKAK---
+       150         160       170       180         190       200   
+
+      110       120       130       140       150        160       
+sp|Q1X EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPGSPATAS
+                  ..:: . :.: .. :::..:.:.. ::. .. :  :    .::.:    
+sp|O02 -----------RRNQEMQQKLVELSAENEKLQQRVEQLTRDLAGLRRFFKQLPGAPFLPG
+                         210       220       230       240         
+
+       170       180       190       200       210       220       
+sp|Q1X PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG
+                                                                   
+sp|O02 AGAADAR                                                     
+     250                                                           
+
+>>sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus mu  (802 aa)
+ initn: 179 init1:  93 opt: 133  Z-score: 130.8  bits: 33.9 E(516081):  9.2
+Smith-Waterman score: 162; 25.9% identity (52.1% similar) in 259 aa overlap (9-254:105-350)
+
+                                     10        20        30        
+sp|Q1X                       MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSA
+                                     : ... : .  :..  : :..  .:.:   
+sp|Q03 QTFHQWRDARQVYGLNFGSKEDANVFASAMMHALEVLNSQEAAQSKV-TATQDSTNLRCI
+           80        90       100       110       120        130   
+
+       40        50        60         70        80        90       
+sp|Q1X DVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA
+              . . . ::. ... .:: : . . .:  ..: : : :.:. . ::. :.:   
+sp|Q03 FCGPTLPRQNSQLPAQVQNGPSQEELEIQRRQLQEQQRQK-ELERERMERERLERERLER
+           140       150       160       170        180       190  
+
+       100       110       120       130        140       150      
+sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAE-NNRLSQQLAQLAAEV----RG
+       .   ::.:::.:.:: .. . :. ...  .:: ..: : ..:  ..: ::  :     : 
+sp|Q03 ERL-ERERLEQEQLERQRQEREHVERLERERLERLERERQERERERLEQLEREQVEWERE
+             200       210       220       230       240       250 
+
+            160       170        180       190            200      
+sp|Q1X SRANTPMPGSPATASPTLTPTLFK-QERDELPLERIPFPTPSLSDYSP-----TLKPSTL
+        : ..  :.: .. : .  :   . :  .  :       .  .:: .:     :  : : 
+sp|Q03 RRMSNAAPSSDSSLSSAPLPEYSSCQPPSAPPPSYAKVISAPVSDATPDYAVVTALPPTS
+             260       270       280       290       300       310 
+
+        210       220       230        240       250       260     
+sp|Q1X AESSDVAQHPAVSVAGLEGDGSAL-PLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSS
+       .  .   .: :.  :   . :::. :.      : :..:  :  ::. .           
+sp|Q03 TPPTPPLRHAATRFA--TSLGSAFHPV------LPHYAT--VPRPLNKNSRPSSPVNTPS
+             320         330             340         350       360 
+
+         270       280       290       300       310       320     
+sp|Q1X VEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSV
+                                                                   
+sp|Q03 SQPPAAKSCAWPTSNFSPLPPSPPIMISSPPGKATGPRPVLPVCVSSPVPQMPPSPTAPN
+             370       380       390       400       410       420 
+
+>>sp|P54843|MAF_MOUSE Transcription factor Maf OS=Mus mu  (370 aa)
+ initn:  85 init1:  85 opt: 128  Z-score: 130.6  bits: 32.7 E(516081):  9.4
+Smith-Waterman score: 128; 30.5% identity (67.1% similar) in 82 aa overlap (83-163:287-366)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     .:.:  :.:.::. ::. : ..  . . ::
+sp|P54 RFSDEQLVTMSVRELNRQLRGVSKEEVIRLKQKR--RTLKNRGYAQSCRFKRVQQRHVLE
+        260       270       280       290         300       310    
+
+            120       130       140        150       160       170 
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLT
+       .:: :. :: . : :..:..  : .  ...  .:...  : . ...  :.::        
+sp|P54 SEKNQLLQQVDHLKQEISRLVRERDAYKEKYEKLVSNGFRENGSSSDNPSSPEFFM    
+          320       330       340       350       360       370    
+
+             180       190       200       210       220       230 
+sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP
+
+>>sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein d  (269 aa)
+ initn:  90 init1:  90 opt: 126  Z-score: 130.6  bits: 32.2 E(516081):  9.4
+Smith-Waterman score: 128; 25.7% identity (51.4% similar) in 148 aa overlap (19-163:131-258)
+
+                           10        20        30          40      
+sp|Q1X             MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT--SLNSADVKTQEVK
+                                     :.: .:. ... :.:  :: .:   :  ..
+sp|P49 LPGGPARPLGPGPAAPRLLKREPDWGDGDAPGSLLPAQVAACAQTVVSLAAAGQPTPPTS
+              110       120       130       140       150       160
+
+         50        60        70        80        90       100      
+sp|Q1X PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL
+       ::  . . ..       : :  .    ::.  .   : :  .:  ::  :.. ::.. . 
+sp|P49 PEPPRSSPRQTP----APGPAREKSAGKRGPDRGSPEYR--QRRERNNIAVRKSRDKAK-
+              170           180       190         200       210    
+
+        110       120       130       140       150        160     
+sp|Q1X EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRAN-TPMPGSPAT
+                    ..:: . :.: .. :::..: :.. ::. .. : :     .:. :  
+sp|P49 -------------RRNQEMQQKLVELSAENEKLHQRVEQLTRDLAGLRQFFKQLPSPPFL
+                        220       230       240       250       260
+
+         170       180       190       200       210       220     
+sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG
+                                                                   
+sp|P49 PAAGTADCR                                                   
+                                                                   
+
+>>sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 OS=Ho  (601 aa)
+ initn: 106 init1:  68 opt: 147  Z-score: 145.6  bits: 36.2 E(516081):  1.4
+Smith-Waterman score: 147; 22.4% identity (50.2% similar) in 263 aa overlap (29-272:294-542)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR-K
+                                     .:.:.::.. .    . .:: . :...: :
+sp|Q15 DSHVLIELHKSGFARPGDVEFEDFSQPMNRAPSDSSLGTPS----DGRPELRGPGRSRTK
+           270       280       290       300           310         
+
+          60                      70        80        90       100 
+sp|Q1X SW--GQEL------------PVPKT--NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+        :  :..             :::..  : ::  :.  .      .: . .. : :.  : 
+sp|Q15 RWPFGKKNKPRPPPLSPLGGPVPSALPNGPPSPRSGRDPLAILSEISKSVKPRLASFRSL
+     320       330       340       350       360       370         
+
+             110       120       130       140         150         
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA--EVRGSRANTPM
+       . .:  .   .  ..  ::: . : :   :.: .. .:.... :  :  ...    .::.
+sp|Q15 RGSRGTVVTEDFSHLPPEQQRKRLQQ---QLEERSRELQKEVDQREALKKMKDVYEKTPQ
+     380       390       400          410       420       430      
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+        :.::.  : .. :: . :: .: ...         .   . . ..:.. .   . :: :
+sp|Q15 MGDPASLEPQIAETLSNIERLKLEVQKYEAWLAEAESRVLSNRGDSLSRHARPPDPPA-S
+        440       450       460       470       480       490      
+
+     220       230       240       250       260       270         
+sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF
+       .    ...::      ..: :. : .  .   .:  .   :  :   :: : .       
+sp|Q15 APPDSSSNSA------SQDTKESSEEPPSEESQDTPIYTEFDEDFEEEPTSPIGHCVAIY
+         500             510       520       530       540         
+
+     280       290       300       310       320       330         
+sp|Q1X DVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQ
+                                                                   
+sp|Q15 HFEGSSEGTISMAEGEDLSLMEEDKGDGWTRVRRKEGGEGYVPTSYLRVTLN        
+     550       560       570       580       590       600         
+
+>>sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper tra  (372 aa)
+ initn: 128 init1: 128 opt: 128  Z-score: 130.6  bits: 32.7 E(516081):  9.4
+Smith-Waterman score: 128; 32.8% identity (73.1% similar) in 67 aa overlap (80-146:274-340)
+
+      50        60        70        80        90       100         
+sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+                                     ..:: .: .:...:: .:. ::.::: .. 
+sp|Q54 LNKEELNTFTTTDMNNYVKQANMVKELSQVEKKELKRQKRLIKNRESAHLSRQRKRERLT
+           250       260       270       280       290       300   
+
+     110       120       130       140       150       160         
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT
+        ::..  .. ...  . . ::..: ::  :. ...::                       
+sp|Q54 DLEHRVEELSSNSIDINKTLSSLENENLILKAEVGQLFEVINDSPVLSALFYKIASLSQQ
+           310       320       330       340       350       360   
+
+     170       180       190       200       210       220         
+sp|Q1X LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSA
+                                                                   
+sp|Q54 PQKDTIGAY                                                   
+           370                                                     
+
+>>sp|Q5AXH3|TOF1_EMENI Topoisomerase 1-associated factor  (1167 aa)
+ initn:  80 init1:  80 opt: 140  Z-score: 135.1  bits: 35.2 E(516081):  5.2
+Smith-Waterman score: 140; 25.7% identity (51.0% similar) in 241 aa overlap (48-270:936-1166)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK
+                                     : :.  ::::. :.: :: . .:  :..:.
+sp|Q5A NFGSDSEGEDVIPDGPLFPANPRSKAHALNELKQKRKKRKDKGEEEPVDEETLEERRQAR
+         910       920       930       940       950       960     
+
+        80         90       100       110         120       130    
+sp|Q1X TEDEKEQ-RRIERVLRNRAAAQTSRERKRLEMEKLENEKI--QMEQQNQFLLQRLSQMEA
+        :. . .  .:.  :  .:. . :  .   :. .::.:.   : :. .. ::  :.. : 
+sp|Q5A LENTRWRLAKIKSDLYVHASDEESDAEADQEFFRLEEERRNEQSERIKKALL--LGRTED
+         970       980       990      1000      1010        1020   
+
+          140       150        160       170          180       190
+sp|Q1X ENNRLSQQLAQLAAEVRGSRANTP-MPGSPATASPTLTP---TLFKQERDELPLERIPFP
+        .:.  :.        ::.:.: : . :   :..        :  . :.:.. .. . .:
+sp|Q5A AGNKARQRK-------RGKRSNEPNIAGEEETSGKRRRHSGGTNVELEEDDILMDDMEMP
+          1030             1040      1050      1060      1070      
+
+               200          210       220       230           240  
+sp|Q1X T-PSLSDYSPTLKPS---TLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL----KHH
+       .  : ..:: .   .   ..: . :        . : . : .   .   :.:     ::.
+sp|Q5A SRASSGEYSSNDADAIDKSMAAAEDELYFDDDLAFGRDRDKDETSVDRDGADASSPRKHN
+       1080      1090      1100      1110      1120      1130      
+
+               250       260       270       280       290         
+sp|Q1X STDDVAA---PLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD
+       . .. :    ::.  .  ::  :   :: ::                             
+sp|Q5A DGSESAEEDIPLAPPNRRRLRAG-FVVESDSE                            
+       1140      1150       1160                                   
+
+     300       310       320       330       340     
+sp|Q1X SEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+
+>>sp|Q498L2|SLTM_XENLA SAFB-like transcription modulator  (998 aa)
+ initn: 101 init1: 101 opt: 134  Z-score: 130.4  bits: 34.1 E(516081):  9.6
+Smith-Waterman score: 134; 31.0% identity (66.7% similar) in 84 aa overlap (73-153:607-689)
+
+             50        60        70        80        90       100  
+sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-
+                                     :.: . .  .:.....:. :.:   .  : 
+sp|Q49 REKVERMERIQRFRRAVEMRRSREMAERECRERERIRIMREREELDRLQRERERLEIERQ
+        580       590       600       610       620       630      
+
+               110       120       130       140       150         
+sp|Q1X --ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM
+         ::.:.: :.:: :.:..::. .   .:... . :  : ..:: ..  : :.:      
+sp|Q49 KLERERMERERLERERIRIEQERRREAERIAREREELRRQQEQL-RFEQEKRNSLKRPRD
+        640       650       660       670       680        690     
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+                                                                   
+sp|Q49 VDHRRDEPFWNENKKMAVDTDSRFSHGSDFNRQQNRFNDFDHRDRNRYSEGSNVSSFERR
+         700       710       720       730       740       750     
+
+>>sp|P0CB49|YLPM1_RAT YLP motif-containing protein 1 OS=  (1376 aa)
+ initn: 129 init1:  79 opt: 137  Z-score: 131.4  bits: 34.7 E(516081):  8.5
+Smith-Waterman score: 137; 20.1% identity (50.4% similar) in 224 aa overlap (19-227:858-1076)
+
+                           10        20        30        40        
+sp|Q1X             MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE
+                                     : .  :.    :.. ... .  . . ..  
+sp|P0C EFKRDTAAIPSAPVLPPPPVHPSIPPPGPMPMGMPPMSKPPPVQHTVDYGHGRDMPTNKV
+       830       840       850       860       870       880       
+
+       50        60        70        80        90       100        
+sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS-RERKRLE
+       :. :  .: .   . :.:. .     .:  .:. .. : ..   .: . .:. :. :: .
+sp|P0C EQIPYGERITLRPD-PLPERSAFDADHAGQRDRYDRDRDREPYFDRQSNMTDHRDFKRDR
+       890       900        910       920       930       940      
+
+       110       120       130       140       150       160       
+sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS
+         . . ...   ....:  .:  . . . :.  ..  . ..  ::.  . :     .   
+sp|P0C ETHRDRDRVLDYERDRF--DRERRPRDDRNQSYRDKKDHSSSRRGGF-DRPSYDRKSDRP
+        950       960         970       980       990       1000   
+
+       170       180       190       200            210            
+sp|Q1X PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTL-----KPSTLAESSDVAQHPA-----
+       :   : .:  ::   : ::.:.:.:::.   : .     :: .  . .:. . :.     
+sp|P0C PYEGPPMFGGERRTYPEERMPLPAPSLGHQPPPVPRVEKKPES-KNVDDILKPPGRESRP
+          1010      1020      1030      1040       1050      1060  
+
+           220       230       240       250       260       270   
+sp|Q1X ----VSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVF
+           : . :: :.:                                              
+sp|P0C ERIVVIMRGLPGSGKTHVAKLIRDKEVEFGGPAPRVLSLDDYFIAEVEKEEKDPDSGKKV
+           1070      1080      1090      1100      1110      1120  
+
+>>sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS=Arab  (330 aa)
+ initn: 124 init1:  89 opt: 127  Z-score: 130.3  bits: 32.5 E(516081):  9.7
+Smith-Waterman score: 127; 36.4% identity (72.7% similar) in 55 aa overlap (77-131:38-91)
+
+         50        60        70        80        90       100      
+sp|Q1X PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL
+                                     ...:. .:. ..:. .:: ::. :: ::. 
+sp|Q39 TDVSTDGDTDHRDLGSDRGHMHAAASDSSDRSKDKLDQKTLRRLAQNREAARKSRLRKKA
+        10        20        30        40        50        60       
+
+        110       120       130       140       150       160      
+sp|Q1X EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATA
+        ...::: .... : .: : ::  :                                   
+sp|Q39 YVQQLENSRLKLTQLEQEL-QRARQQGVFISSSGDQAHSTGGNGALAFDAEHSRWLEEKN
+        70        80         90       100       110       120      
+
+>>sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like  (650 aa)
+ initn: 186 init1:  90 opt: 131  Z-score: 130.1  bits: 33.4 E(516081):   10
+Smith-Waterman score: 131; 24.3% identity (61.7% similar) in 115 aa overlap (41-154:277-386)
+
+               20        30        40        50         60         
+sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR-KSWGQELPVPKTN
+                                     . .:.. .:::  :.. : : ::       
+sp|Q8N NVKELKRKLERAKFLLPQVQTNTLQEEMWRQEEELREQEKKIRKQEEKMWRQE-----ER
+        250       260       270       280       290            300 
+
+      70        80        90       100       110       120         
+sp|Q1X LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL
+       :  ..    :.:...:: :. ::..      .:..  :..::.... ::..:.. . .. 
+sp|Q8N LREQEGKMREQEEKMRRQEKRLREQEKELREQEKELREQKKLREQEEQMQEQEEKMWEQE
+             310       320       330       340       350       360 
+
+     130       140       150       160       170       180         
+sp|Q1X SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF
+        .:. ..... .:  .:  . .  :                                   
+sp|Q8N EKMREQEEKMWRQEERLWEQEKQMREQEQKMRDQEERMWEQDERLREKEERMREQEKMWE
+             370       380       390       400       410       420 
+
+
+
+526 residues in 2 query   sequences
+181677051 residues in 516081 library sequences
+ Tcomplib [36.04] (8 proc)
+ start: Fri Apr 16 10:09:02 2010 done: Fri Apr 16 10:09:15 2010
+ Total Scan time: 28.320 Total Display time:  0.320
+
+Function used was FASTA [version 36.04 January, 2010]
diff --git a/demotic/examples/example.h2.out b/demotic/examples/example.h2.out
new file mode 100644
index 0000000..2738b02
--- /dev/null
+++ b/demotic/examples/example.h2.out
@@ -0,0 +1,4234 @@
+hmmsearch - search a sequence database with a profile HMM
+HMMER 2.3.2 (Oct 2003)
+Copyright (C) 1992-2003 HHMI/Washington University School of Medicine
+Freely distributed under the GNU General Public License (GPL)
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+HMM file:                   example.hmm2 [Orn_DAP_Arg_deC]
+Sequence database:          /misc/data0/databases/Uniprot/uniprot_sprot.fasta
+per-sequence score cutoff:  [none]
+per-domain score cutoff:    [none]
+per-sequence Eval cutoff:   <= 10        
+per-domain Eval cutoff:     [none]
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+Query HMM:   Orn_DAP_Arg_deC
+Accession:   PF00278.15
+Description: Pyridoxal-dependent decarboxylase, C-terminal sheet domain
+  [HMM has been calibrated; E-values are empirical estimates]
+
+Scores for complete sequences (score includes all domains):
+Sequence              Description                       Score    E-value  N 
+--------              -----------                       -----    ------- ---
+sp|O29458|DCDA_ARCFU  Diaminopimelate decarboxylase O   173.5      3e-47   1
+sp|Q9UQW9|DCOR_SCHPO  Ornithine decarboxylase OS=Schi   171.6    1.2e-46   1
+sp|O27390|DCDA_METTH  Diaminopimelate decarboxylase O   162.1    8.4e-44   1
+sp|Q9I8S4|DCOR2_XENLA Ornithine decarboxylase 2 OS=Xe   160.6    2.3e-43   1
+sp|P09057|DCOR_RAT    Ornithine decarboxylase OS=Ratt   160.5    2.5e-43   1
+sp|P14019|DCOR_CRIGR  Ornithine decarboxylase OS=Cric   159.9    3.8e-43   1
+sp|P00860|DCOR_MOUSE  Ornithine decarboxylase OS=Mus    159.8    3.9e-43   1
+sp|P27119|DCOR_MUSPA  Ornithine decarboxylase OS=Mus    159.8    3.9e-43   1
+sp|P27118|DCOR_CHICK  Ornithine decarboxylase (Fragme   158.8      8e-43   1
+sp|P27120|DCOR1_XENLA Ornithine decarboxylase 1 OS=Xe   157.0    2.8e-42   1
+sp|P11926|DCOR_HUMAN  Ornithine decarboxylase OS=Homo   156.9      3e-42   1
+sp|P27117|DCOR_BOVIN  Ornithine decarboxylase OS=Bos    154.1    2.1e-41   1
+sp|P07805|DCOR_TRYBB  Ornithine decarboxylase OS=Tryp   151.2    1.6e-40   1
+sp|Q9X1K5|DCDA_THEMA  Diaminopimelate decarboxylase O   150.5    2.6e-40   1
+sp|P49725|DCOR_PANRE  Ornithine decarboxylase OS=Pana   146.6    3.7e-39   1
+sp|O22616|DCOR_SOLLC  Ornithine decarboxylase OS=Sola   145.8    6.6e-39   1
+sp|P27121|DCOR_NEUCR  Ornithine decarboxylase OS=Neur   145.7    7.3e-39   1
+sp|P50134|DCOR_DATST  Ornithine decarboxylase OS=Datu   145.5    8.2e-39   1
+sp|P08432|DCOR_YEAST  Ornithine decarboxylase OS=Sacc   143.2      4e-38   1
+sp|Q8A2B1|SPEA_BACTN  Biosynthetic arginine decarboxy   142.0    9.1e-38   1
+sp|Q9HUX1|SPEA_PSEAE  Biosynthetic arginine decarboxy   141.0    1.9e-37   1
+sp|Q7NU27|SPEA_CHRVO  Biosynthetic arginine decarboxy   140.9      2e-37   1
+sp|O69203|DCDA_ACTPA  Diaminopimelate decarboxylase O   140.6    2.5e-37   1
+sp|Q8S3N2|DCOR_CAPAN  Ornithine decarboxylase OS=Caps   140.5    2.6e-37   1
+sp|P00861|DCDA_ECOLI  Diaminopimelate decarboxylase O   140.3    3.1e-37   1
+sp|Q7NE10|SPEA_GLOVI  Biosynthetic arginine decarboxy   140.2    3.1e-37   1
+sp|Q58497|DCDA_METJA  Diaminopimelate decarboxylase O   140.0    3.8e-37   1
+sp|Q5LIQ3|SPEA_BACFN  Biosynthetic arginine decarboxy   139.5    5.4e-37   1
+sp|Q64ZT8|SPEA_BACFR  Biosynthetic arginine decarboxy   139.5    5.4e-37   1
+sp|Q87VU3|SPEA_PSESM  Biosynthetic arginine decarboxy   138.1    1.3e-36   1
+sp|P40807|DCOR1_DROME Ornithine decarboxylase 1 OS=Dr   137.4    2.2e-36   1
+sp|B0U1H6|SPEA_XYLFM  Biosynthetic arginine decarboxy   137.4    2.3e-36   1
+sp|Q9PH02|SPEA_XYLFA  Biosynthetic arginine decarboxy   137.4    2.3e-36   1
+sp|O05321|DCDA_PSEFL  Diaminopimelate decarboxylase O   136.5    4.1e-36   1
+sp|B2I6M1|SPEA_XYLF2  Biosynthetic arginine decarboxy   136.3    4.7e-36   1
+sp|Q87F25|SPEA_XYLFT  Biosynthetic arginine decarboxy   136.3    4.7e-36   1
+sp|Q8DHY6|SPEA_THEEB  Biosynthetic arginine decarboxy   136.0    6.1e-36   1
+sp|O67262|DCDA_AQUAE  Diaminopimelate decarboxylase O   135.8    6.8e-36   1
+sp|Q88QC7|SPEA_PSEPK  Biosynthetic arginine decarboxy   134.8    1.3e-35   1
+sp|O14977|AZIN1_HUMAN Antizyme inhibitor 1 OS=Homo sa   133.2    4.2e-35   1
+sp|Q5R7K3|AZIN1_PONAB Antizyme inhibitor 1 OS=Pongo a   133.2    4.2e-35   1
+sp|O35484|AZIN1_MOUSE Antizyme inhibitor 1 OS=Mus mus   132.9    5.1e-35   1
+sp|Q50140|DCDA_MYCLE  Diaminopimelate decarboxylase O   132.9    5.2e-35   1
+sp|A6L012|SPEA_BACV8  Biosynthetic arginine decarboxy   132.8    5.5e-35   1
+sp|P19572|DCDA_PSEAE  Diaminopimelate decarboxylase O   132.5    6.8e-35   1
+sp|Q8YRP3|SPEA_ANASP  Biosynthetic arginine decarboxy   132.3    7.9e-35   1
+sp|P23630|DCDA_BACSU  Diaminopimelate decarboxylase O   131.7    1.2e-34   1
+sp|Q9ZBH5|DCDA_STRCO  Diaminopimelate decarboxylase O   130.8    2.2e-34   1
+sp|Q8K9C4|DCDA_BUCAP  Diaminopimelate decarboxylase O   130.6    2.4e-34   1
+sp|Q0ACK8|SPEA_ALHEH  Biosynthetic arginine decarboxy   130.5    2.7e-34   1
+sp|Q949X7|DCDA1_ARATH Diaminopimelate decarboxylase 1   129.2    6.8e-34   1
+sp|Q94A94|DCDA2_ARATH Diaminopimelate decarboxylase 2   128.9    8.1e-34   1
+sp|P0A5M5|DCDA_MYCBO  Diaminopimelate decarboxylase O   128.6    9.9e-34   1
+sp|P0A5M4|DCDA_MYCTU  Diaminopimelate decarboxylase O   128.6    9.9e-34   1
+sp|P41931|DCOR_CAEEL  Ornithine decarboxylase OS=Caen   127.8    1.7e-33   1
+sp|O50657|DCLO_SELRU  Lysine/ornithine decarboxylase    127.7    1.9e-33   1
+sp|Q9KVL7|DCDA_VIBCH  Diaminopimelate decarboxylase O   127.4    2.4e-33   1
+sp|Q6ZG77|DCDA_ORYSJ  Probable diaminopimelate decarb   126.9    3.1e-33   1
+sp|Q55484|DCDA_SYNY3  Diaminopimelate decarboxylase O   126.7    3.6e-33   1
+sp|Q9JXM2|DCDA_NEIMB  Diaminopimelate decarboxylase O   125.6    8.1e-33   1
+sp|Q8P448|SPEA_XANCP  Biosynthetic arginine decarboxy   125.2      1e-32   1
+sp|Q54UF3|DCOR_DICDI  Probable ornithine decarboxylas   125.0    1.2e-32   1
+sp|Q9Z661|DCDA_ZYMMO  Diaminopimelate decarboxylase O   124.9    1.3e-32   1
+sp|Q9JWA6|DCDA_NEIMA  Diaminopimelate decarboxylase O   123.9    2.6e-32   1
+sp|P40808|DCOR2_DROME Ornithine decarboxylase 2 OS=Dr   123.4    3.6e-32   1
+sp|Q8PFQ5|SPEA_XANAC  Biosynthetic arginine decarboxy   122.9    5.1e-32   1
+sp|P56129|DCDA_HELPY  Diaminopimelate decarboxylase O   122.1      9e-32   1
+sp|Q89AC6|DCDA_BUCBP  Diaminopimelate decarboxylase O   121.5    1.4e-31   1
+sp|P78599|DCOR_CANAL  Ornithine decarboxylase OS=Cand   121.5    1.4e-31   1
+sp|Q8DA54|SPEA_VIBVU  Biosynthetic arginine decarboxy   121.1    1.8e-31   1
+sp|Q7MK24|SPEA_VIBVY  Biosynthetic arginine decarboxy   121.1    1.8e-31   1
+sp|A4Y5Y9|SPEA_SHEPC  Biosynthetic arginine decarboxy   121.1    1.8e-31   1
+sp|A1RKK8|SPEA_SHESW  Biosynthetic arginine decarboxy   121.1    1.8e-31   1
+sp|P57513|DCDA_BUCAI  Diaminopimelate decarboxylase O   121.0      2e-31   1
+sp|Q9RTK2|DCDA_DEIRA  Diaminopimelate decarboxylase O   120.9    2.1e-31   1
+sp|B8CR70|SPEA_SHEPW  Biosynthetic arginine decarboxy   120.8    2.2e-31   1
+sp|A3QDD8|SPEA_SHELP  Biosynthetic arginine decarboxy   120.3    3.2e-31   1
+sp|B8EAI2|SPEA_SHEB2  Biosynthetic arginine decarboxy   119.9    4.1e-31   1
+sp|A3D3G2|SPEA_SHEB5  Biosynthetic arginine decarboxy   119.9    4.1e-31   1
+sp|A6WM65|SPEA_SHEB8  Biosynthetic arginine decarboxy   119.9    4.1e-31   1
+sp|A9KY70|SPEA_SHEB9  Biosynthetic arginine decarboxy   119.9    4.1e-31   1
+sp|P27116|DCOR_LEIDO  Ornithine decarboxylase OS=Leis   119.8    4.5e-31   1
+sp|Q083L6|SPEA_SHEFN  Biosynthetic arginine decarboxy   119.2    6.6e-31   1
+sp|Q8EFU5|SPEA_SHEON  Biosynthetic arginine decarboxy   119.1      7e-31   1
+sp|B1KRD4|SPEA_SHEWM  Biosynthetic arginine decarboxy   118.6      1e-30   1
+sp|Q7V3M9|SPEA_PROMP  Biosynthetic arginine decarboxy   118.5    1.1e-30   1
+sp|A8FWJ3|SPEA_SHESH  Biosynthetic arginine decarboxy   117.5    2.2e-30   1
+sp|Q0HJY2|SPEA_SHESM  Biosynthetic arginine decarboxy   117.3    2.5e-30   1
+sp|Q0HW78|SPEA_SHESR  Biosynthetic arginine decarboxy   117.3    2.5e-30   1
+sp|Q63764|AZIN1_RAT   Antizyme inhibitor 1 OS=Rattus    117.2    2.7e-30   1
+sp|Q9ZME5|DCDA_HELPJ  Diaminopimelate decarboxylase O   117.1    2.9e-30   1
+sp|A0KVN8|SPEA_SHESA  Biosynthetic arginine decarboxy   117.0    3.1e-30   1
+sp|Q8ZHG8|SPEA_YERPE  Biosynthetic arginine decarboxy   117.0    3.1e-30   1
+sp|B5XUB1|SPEA_KLEP3  Biosynthetic arginine decarboxy   116.8    3.5e-30   1
+sp|Q12LW6|SPEA_SHEDO  Biosynthetic arginine decarboxy   116.8    3.5e-30   1
+sp|A2BNH3|SPEA_PROMS  Biosynthetic arginine decarboxy   116.8    3.6e-30   1
+sp|Q87JS8|SPEA_VIBPA  Biosynthetic arginine decarboxy   116.7    3.8e-30   1
+sp|A8H5G3|SPEA_SHEPA  Biosynthetic arginine decarboxy   116.7    3.8e-30   1
+sp|A3PA96|SPEA_PROM0  Biosynthetic arginine decarboxy   116.6    4.1e-30   1
+sp|P41023|DCDA_BACMT  Diaminopimelate decarboxylase O   116.4    4.6e-30   1
+sp|B0TQX3|SPEA_SHEHH  Biosynthetic arginine decarboxy   116.4    4.8e-30   1
+sp|Q31DD8|SPEA_PROM9  Biosynthetic arginine decarboxy   116.4    4.8e-30   1
+sp|Q96412|SPE1_DIACA  Arginine decarboxylase OS=Diant   116.3    4.9e-30   1
+sp|A1S712|SPEA_SHEAM  Biosynthetic arginine decarboxy   116.1    5.9e-30   1
+sp|A8G243|SPEA_PROM2  Biosynthetic arginine decarboxy   115.5    8.8e-30   1
+sp|Q7VEG4|SPEA_PROMA  Biosynthetic arginine decarboxy   115.2    1.1e-29   1
+sp|C4K6F4|SPEA_HAMD5  Biosynthetic arginine decarboxy   114.9    1.3e-29   1
+sp|B5F5L1|SPEA_SALA4  Biosynthetic arginine decarboxy   114.9    1.3e-29   1
+sp|Q57K30|SPEA_SALCH  Biosynthetic arginine decarboxy   114.9    1.3e-29   1
+sp|B5FUJ7|SPEA_SALDC  Biosynthetic arginine decarboxy   114.9    1.3e-29   1
+sp|B4THH1|SPEA_SALHS  Biosynthetic arginine decarboxy   114.9    1.3e-29   1
+sp|A9N4N1|SPEA_SALPB  Biosynthetic arginine decarboxy   114.9    1.3e-29   1
+sp|B4TV55|SPEA_SALSV  Biosynthetic arginine decarboxy   114.9    1.3e-29   1
+sp|P60659|SPEA_SALTY  Biosynthetic arginine decarboxy   114.9    1.3e-29   1
+sp|P60658|SPEA_SALTI  Biosynthetic arginine decarboxy   114.9    1.3e-29   1
+sp|B4T5J3|SPEA_SALNS  Biosynthetic arginine decarboxy   114.9    1.3e-29   1
+sp|P44316|DCDA_HAEIN  Diaminopimelate decarboxylase O   114.9    1.4e-29   1
+sp|P22220|SPE1_AVESA  Arginine decarboxylase OS=Avena   114.8    1.4e-29   1
+sp|Q9X5M1|DCDA_MYCS2  Diaminopimelate decarboxylase O   114.7    1.5e-29   1
+sp|Q9KLD1|SPEA_VIBCH  Biosynthetic arginine decarboxy   114.4    1.9e-29   1
+sp|Q8XCX9|SPEA_ECO57  Biosynthetic arginine decarboxy   114.2    2.2e-29   1
+sp|B5YQD6|SPEA_ECO5E  Biosynthetic arginine decarboxy   114.2    2.2e-29   1
+sp|Q8FE34|SPEA_ECOL6  Biosynthetic arginine decarboxy   114.2    2.2e-29   1
+sp|B1LDE8|SPEA_ECOSM  Biosynthetic arginine decarboxy   114.2    2.2e-29   1
+sp|Q0T0V3|SPEA_SHIF8  Biosynthetic arginine decarboxy   113.9    2.6e-29   1
+sp|Q83Q93|SPEA_SHIFL  Biosynthetic arginine decarboxy   113.9    2.6e-29   1
+sp|B9M6H6|SPEA_GEOSF  Biosynthetic arginine decarboxy   113.6    3.3e-29   1
+sp|P21170|SPEA_ECOLI  Biosynthetic arginine decarboxy   113.6    3.4e-29   1
+sp|B5EIW4|SPEA_GEOBB  Biosynthetic arginine decarboxy   112.8    5.7e-29   1
+sp|C6E3V4|SPEA_GEOSM  Biosynthetic arginine decarboxy   112.8    5.7e-29   1
+sp|A1AS90|SPEA_PELPD  Biosynthetic arginine decarboxy   112.3    8.2e-29   1
+sp|A2BU00|SPEA_PROM5  Biosynthetic arginine decarboxy   112.2    8.6e-29   1
+sp|Q8RQM6|DCDA_COREF  Diaminopimelate decarboxylase O   109.3    6.4e-28   1
+sp|B4F1A4|SPEA_PROMH  Biosynthetic arginine decarboxy   108.8    8.9e-28   1
+sp|P74576|SPEA1_SYNY3 Biosynthetic arginine decarboxy   108.1    1.5e-27   1
+sp|A5GB52|SPEA_GEOUR  Biosynthetic arginine decarboxy   107.3    2.6e-27   1
+sp|Q7U3S0|SPEA_SYNPX  Biosynthetic arginine decarboxy   107.1    2.9e-27   1
+sp|A0A4W3|SPEA_GEOSL  Biosynthetic arginine decarboxy   106.7    3.9e-27   1
+sp|Q39X78|SPEA_GEOMG  Biosynthetic arginine decarboxy   106.4    4.8e-27   1
+sp|A1TY02|SPEA_MARAV  Biosynthetic arginine decarboxy   106.3      5e-27   1
+sp|Q9RXR4|SPEA_DEIRA  Biosynthetic arginine decarboxy   106.0    6.4e-27   1
+sp|P09890|DCDA_CORGL  Diaminopimelate decarboxylase O   105.3      1e-26   1
+sp|O82475|SPE1_BRAJU  Arginine decarboxylase OS=Brass   104.8    1.5e-26   1
+sp|Q39827|SPE1_SOYBN  Arginine decarboxylase OS=Glyci   104.7    1.6e-26   1
+sp|Q7N121|SPEA_PHOLL  Biosynthetic arginine decarboxy   104.7    1.6e-26   1
+sp|B3EAF3|SPEA_GEOLS  Biosynthetic arginine decarboxy   104.5    1.8e-26   1
+sp|A5GWM2|SPEA_SYNR3  Biosynthetic arginine decarboxy   104.5    1.8e-26   1
+sp|Q7UTS2|SPEA_RHOBA  Biosynthetic arginine decarboxy   104.0    2.5e-26   1
+sp|Q9KCM5|DCDA_BACHD  Diaminopimelate decarboxylase O   103.8      3e-26   1
+sp|Q96A70|ADC_HUMAN   Arginine decarboxylase OS=Homo    103.7    3.1e-26   1
+sp|Q43075|SPE1_PEA    Arginine decarboxylase OS=Pisum   102.6    6.5e-26   1
+sp|P72587|SPEA2_SYNY3 Biosynthetic arginine decarboxy   100.6    2.6e-25   1
+sp|Q7TUJ9|SPEA_PROMM  Biosynthetic arginine decarboxy   100.2    3.7e-25   1
+sp|P49726|SPE1_SOLLC  Arginine decarboxylase OS=Solan    98.7      1e-24   1
+sp|Q9PII5|DCDA_CAMJE  Diaminopimelate decarboxylase O    98.5    1.1e-24   1
+sp|A2CDK1|SPEA_PROM3  Biosynthetic arginine decarboxy    98.1    1.5e-24   1
+sp|Q8BVM4|ADC_MOUSE   Antizyme inhibitor 2 OS=Mus mus    97.9    1.7e-24   1
+sp|Q9CL60|SPEA_PASMU  Biosynthetic arginine decarboxy    95.7      8e-24   1
+sp|O23141|SPE2_ARATH  Arginine decarboxylase 2 OS=Ara    94.8    1.5e-23   1
+sp|Q9SNN0|SPE1_ORYSJ  Arginine decarboxylase 1 OS=Ory    94.7    1.6e-23   1
+sp|P31851|TABA_PSESZ  Protein tabA OS=Pseudomonas syr    92.2    8.9e-23   1
+sp|Q9JT25|SPEA_NEIMA  Biosynthetic arginine decarboxy    91.8    1.2e-22   1
+sp|Q9K0U3|SPEA_NEIMB  Biosynthetic arginine decarboxy    91.8    1.2e-22   1
+sp|Q7XRA1|ADC2_ORYSJ  Arginine decarboxylase 2 OS=Ory    91.2    1.8e-22   1
+sp|Q9SI64|SPE1_ARATH  Arginine decarboxylase 1 OS=Ara    88.2    1.5e-21   1
+sp|C4L9A9|SPEA_TOLAT  Biosynthetic arginine decarboxy    87.6    2.2e-21   1
+sp|A0KIP8|SPEA_AERHH  Biosynthetic arginine decarboxy    78.4    1.3e-18   1
+sp|A4SPD6|SPEA_AERS4  Biosynthetic arginine decarboxy    73.6    3.6e-17   1
+sp|P55709|Y4YA_RHISN  Uncharacterized protein y4yA OS    23.1     0.0018   1
+sp|O81160|SPE2_THECC  Arginine decarboxylase (Fragmen    -9.6        1.1   1
+
+Parsed for domains:
+Sequence              Domain  seq-f seq-t    hmm-f hmm-t      score  E-value
+--------              ------- ----- -----    ----- -----      -----  -------
+sp|O29458|DCDA_ARCFU    1/1     285   391 ..     1   123 []   173.5    3e-47
+sp|Q9UQW9|DCOR_SCHPO    1/1     307   426 ..     1   123 []   171.6  1.2e-46
+sp|O27390|DCDA_METTH    1/1     292   398 ..     1   123 []   162.1  8.4e-44
+sp|Q9I8S4|DCOR2_XENLA   1/1     284   405 ..     1   123 []   160.6  2.3e-43
+sp|P09057|DCOR_RAT      1/1     285   408 ..     1   123 []   160.5  2.5e-43
+sp|P14019|DCOR_CRIGR    1/1     282   402 ..     1   123 []   159.9  3.8e-43
+sp|P00860|DCOR_MOUSE    1/1     285   408 ..     1   123 []   159.8  3.9e-43
+sp|P27119|DCOR_MUSPA    1/1     285   408 ..     1   123 []   159.8  3.9e-43
+sp|P27118|DCOR_CHICK    1/1     275   398 ..     1   123 []   158.8    8e-43
+sp|P27120|DCOR1_XENLA   1/1     285   409 ..     1   123 []   157.0  2.8e-42
+sp|P11926|DCOR_HUMAN    1/1     285   408 ..     1   123 []   156.9    3e-42
+sp|P27117|DCOR_BOVIN    1/1     285   408 ..     1   123 []   154.1  2.1e-41
+sp|P07805|DCOR_TRYBB    1/1     283   406 ..     1   123 []   151.2  1.6e-40
+sp|Q9X1K5|DCDA_THEMA    1/1     257   362 ..     1   123 []   150.5  2.6e-40
+sp|P49725|DCOR_PANRE    1/1     294   416 ..     1   123 []   146.6  3.7e-39
+sp|O22616|DCOR_SOLLC    1/1     308   424 ..     1   123 []   145.8  6.6e-39
+sp|P27121|DCOR_NEUCR    1/1     326   471 ..     1   123 []   145.7  7.3e-39
+sp|P50134|DCOR_DATST    1/1     308   424 ..     1   123 []   145.5  8.2e-39
+sp|P08432|DCOR_YEAST    1/1     329   460 ..     1   123 []   143.2    4e-38
+sp|Q8A2B1|SPEA_BACTN    1/1     346   558 ..     1   123 []   142.0  9.1e-38
+sp|Q9HUX1|SPEA_PSEAE    1/1     354   567 ..     1   123 []   141.0  1.9e-37
+sp|Q7NU27|SPEA_CHRVO    1/1     343   556 ..     1   123 []   140.9    2e-37
+sp|O69203|DCDA_ACTPA    1/1     309   415 ..     1   123 []   140.6  2.5e-37
+sp|Q8S3N2|DCOR_CAPAN    1/1     312   428 ..     1   123 []   140.5  2.6e-37
+sp|P00861|DCDA_ECOLI    1/1     279   397 ..     1   123 []   140.3  3.1e-37
+sp|Q7NE10|SPEA_GLOVI    1/1     346   557 ..     1   123 []   140.2  3.1e-37
+sp|Q58497|DCDA_METJA    1/1     305   410 ..     1   123 []   140.0  3.8e-37
+sp|Q5LIQ3|SPEA_BACFN    1/1     346   558 ..     1   123 []   139.5  5.4e-37
+sp|Q64ZT8|SPEA_BACFR    1/1     346   558 ..     1   123 []   139.5  5.4e-37
+sp|Q87VU3|SPEA_PSESM    1/1     354   567 ..     1   123 []   138.1  1.3e-36
+sp|P40807|DCOR1_DROME   1/1     276   391 ..     1   123 []   137.4  2.2e-36
+sp|B0U1H6|SPEA_XYLFM    1/1     343   555 ..     1   123 []   137.4  2.3e-36
+sp|Q9PH02|SPEA_XYLFA    1/1     343   555 ..     1   123 []   137.4  2.3e-36
+sp|O05321|DCDA_PSEFL    1/1     285   390 ..     1   123 []   136.5  4.1e-36
+sp|B2I6M1|SPEA_XYLF2    1/1     343   555 ..     1   123 []   136.3  4.7e-36
+sp|Q87F25|SPEA_XYLFT    1/1     343   555 ..     1   123 []   136.3  4.7e-36
+sp|Q8DHY6|SPEA_THEEB    1/1     353   564 ..     1   123 []   136.0  6.1e-36
+sp|O67262|DCDA_AQUAE    1/1     290   396 ..     1   123 []   135.8  6.8e-36
+sp|Q88QC7|SPEA_PSEPK    1/1     354   567 ..     1   123 []   134.8  1.3e-35
+sp|O14977|AZIN1_HUMAN   1/1     282   406 ..     1   123 []   133.2  4.2e-35
+sp|Q5R7K3|AZIN1_PONAB   1/1     282   406 ..     1   123 []   133.2  4.2e-35
+sp|O35484|AZIN1_MOUSE   1/1     282   406 ..     1   123 []   132.9  5.1e-35
+sp|Q50140|DCDA_MYCLE    1/1     336   449 ..     1   123 []   132.9  5.2e-35
+sp|A6L012|SPEA_BACV8    1/1     346   558 ..     1   123 []   132.8  5.5e-35
+sp|P19572|DCDA_PSEAE    1/1     284   389 ..     1   123 []   132.5  6.8e-35
+sp|Q8YRP3|SPEA_ANASP    1/1     395   606 ..     1   123 []   132.3  7.9e-35
+sp|P23630|DCDA_BACSU    1/1     301   409 ..     1   123 []   131.7  1.2e-34
+sp|Q9ZBH5|DCDA_STRCO    1/1     286   403 ..     1   123 []   130.8  2.2e-34
+sp|Q8K9C4|DCDA_BUCAP    1/1     275   393 ..     1   123 []   130.6  2.4e-34
+sp|Q0ACK8|SPEA_ALHEH    1/1     345   558 ..     1   123 []   130.5  2.7e-34
+sp|Q949X7|DCDA1_ARATH   1/1     351   459 ..     1   123 []   129.2  6.8e-34
+sp|Q94A94|DCDA2_ARATH   1/1     356   464 ..     1   123 []   128.9  8.1e-34
+sp|P0A5M5|DCDA_MYCBO    1/1     311   424 ..     1   123 []   128.6  9.9e-34
+sp|P0A5M4|DCDA_MYCTU    1/1     311   424 ..     1   123 []   128.6  9.9e-34
+sp|P41931|DCOR_CAEEL    1/1     286   407 ..     1   123 []   127.8  1.7e-33
+sp|O50657|DCLO_SELRU    1/1     266   371 ..     1   123 []   127.7  1.9e-33
+sp|Q9KVL7|DCDA_VIBCH    1/1     286   391 ..     1   123 []   127.4  2.4e-33
+sp|Q6ZG77|DCDA_ORYSJ    1/1     356   463 ..     1   123 []   126.9  3.1e-33
+sp|Q55484|DCDA_SYNY3    1/1     332   440 ..     1   123 []   126.7  3.6e-33
+sp|Q9JXM2|DCDA_NEIMB    1/1     276   381 ..     1   123 []   125.6  8.1e-33
+sp|Q8P448|SPEA_XANCP    1/1     343   555 ..     1   123 []   125.2    1e-32
+sp|Q54UF3|DCOR_DICDI    1/1     328   450 ..     1   123 []   125.0  1.2e-32
+sp|Q9Z661|DCDA_ZYMMO    1/1     289   394 ..     1   123 []   124.9  1.3e-32
+sp|Q9JWA6|DCDA_NEIMA    1/1     276   381 ..     1   123 []   123.9  2.6e-32
+sp|P40808|DCOR2_DROME   1/1     276   390 ..     1   123 []   123.4  3.6e-32
+sp|Q8PFQ5|SPEA_XANAC    1/1     343   555 ..     1   123 []   122.9  5.1e-32
+sp|P56129|DCDA_HELPY    1/1     270   377 ..     1   123 []   122.1    9e-32
+sp|Q89AC6|DCDA_BUCBP    1/1     275   393 ..     1   123 []   121.5  1.4e-31
+sp|P78599|DCOR_CANAL    1/1     324   468 ..     1   123 []   121.5  1.4e-31
+sp|Q8DA54|SPEA_VIBVU    1/1     355   571 ..     1   123 []   121.1  1.8e-31
+sp|Q7MK24|SPEA_VIBVY    1/1     354   570 ..     1   123 []   121.1  1.8e-31
+sp|A4Y5Y9|SPEA_SHEPC    1/1     350   566 ..     1   123 []   121.1  1.8e-31
+sp|A1RKK8|SPEA_SHESW    1/1     350   566 ..     1   123 []   121.1  1.8e-31
+sp|P57513|DCDA_BUCAI    1/1     275   393 ..     1   123 []   121.0    2e-31
+sp|Q9RTK2|DCDA_DEIRA    1/1     253   357 ..     1   123 []   120.9  2.1e-31
+sp|B8CR70|SPEA_SHEPW    1/1     350   566 ..     1   123 []   120.8  2.2e-31
+sp|A3QDD8|SPEA_SHELP    1/1     350   566 ..     1   123 []   120.3  3.2e-31
+sp|B8EAI2|SPEA_SHEB2    1/1     350   566 ..     1   123 []   119.9  4.1e-31
+sp|A3D3G2|SPEA_SHEB5    1/1     350   566 ..     1   123 []   119.9  4.1e-31
+sp|A6WM65|SPEA_SHEB8    1/1     350   566 ..     1   123 []   119.9  4.1e-31
+sp|A9KY70|SPEA_SHEB9    1/1     350   566 ..     1   123 []   119.9  4.1e-31
+sp|P27116|DCOR_LEIDO    1/1     509   682 ..     1   123 []   119.8  4.5e-31
+sp|Q083L6|SPEA_SHEFN    1/1     350   566 ..     1   123 []   119.2  6.6e-31
+sp|Q8EFU5|SPEA_SHEON    1/1     350   566 ..     1   123 []   119.1    7e-31
+sp|B1KRD4|SPEA_SHEWM    1/1     350   566 ..     1   123 []   118.6    1e-30
+sp|Q7V3M9|SPEA_PROMP    1/1     355   574 ..     1   123 []   118.5  1.1e-30
+sp|A8FWJ3|SPEA_SHESH    1/1     350   566 ..     1   123 []   117.5  2.2e-30
+sp|Q0HJY2|SPEA_SHESM    1/1     350   566 ..     1   123 []   117.3  2.5e-30
+sp|Q0HW78|SPEA_SHESR    1/1     350   566 ..     1   123 []   117.3  2.5e-30
+sp|Q63764|AZIN1_RAT     1/1     282   406 ..     1   123 []   117.2  2.7e-30
+sp|Q9ZME5|DCDA_HELPJ    1/1     270   377 ..     1   123 []   117.1  2.9e-30
+sp|A0KVN8|SPEA_SHESA    1/1     350   566 ..     1   123 []   117.0  3.1e-30
+sp|Q8ZHG8|SPEA_YERPE    1/1     372   588 ..     1   123 []   117.0  3.1e-30
+sp|B5XUB1|SPEA_KLEP3    1/1     345   561 ..     1   123 []   116.8  3.5e-30
+sp|Q12LW6|SPEA_SHEDO    1/1     350   566 ..     1   123 []   116.8  3.5e-30
+sp|A2BNH3|SPEA_PROMS    1/1     355   574 ..     1   123 []   116.8  3.6e-30
+sp|Q87JS8|SPEA_VIBPA    1/1     354   570 ..     1   123 []   116.7  3.8e-30
+sp|A8H5G3|SPEA_SHEPA    1/1     350   566 ..     1   123 []   116.7  3.8e-30
+sp|A3PA96|SPEA_PROM0    1/1     355   574 ..     1   123 []   116.6  4.1e-30
+sp|P41023|DCDA_BACMT    1/1     301   409 ..     1   123 []   116.4  4.6e-30
+sp|B0TQX3|SPEA_SHEHH    1/1     350   566 ..     1   123 []   116.4  4.8e-30
+sp|Q31DD8|SPEA_PROM9    1/1     355   574 ..     1   123 []   116.4  4.8e-30
+sp|Q96412|SPE1_DIACA    1/1     491   605 ..     1   123 []   116.3  4.9e-30
+sp|A1S712|SPEA_SHEAM    1/1     350   566 ..     1   123 []   116.1  5.9e-30
+sp|A8G243|SPEA_PROM2    1/1     355   574 ..     1   123 []   115.5  8.8e-30
+sp|Q7VEG4|SPEA_PROMA    1/1     355   574 ..     1   123 []   115.2  1.1e-29
+sp|C4K6F4|SPEA_HAMD5    1/1     346   562 ..     1   123 []   114.9  1.3e-29
+sp|B5F5L1|SPEA_SALA4    1/1     345   561 ..     1   123 []   114.9  1.3e-29
+sp|Q57K30|SPEA_SALCH    1/1     345   561 ..     1   123 []   114.9  1.3e-29
+sp|B5FUJ7|SPEA_SALDC    1/1     345   561 ..     1   123 []   114.9  1.3e-29
+sp|B4THH1|SPEA_SALHS    1/1     345   561 ..     1   123 []   114.9  1.3e-29
+sp|A9N4N1|SPEA_SALPB    1/1     345   561 ..     1   123 []   114.9  1.3e-29
+sp|B4TV55|SPEA_SALSV    1/1     345   561 ..     1   123 []   114.9  1.3e-29
+sp|P60659|SPEA_SALTY    1/1     371   587 ..     1   123 []   114.9  1.3e-29
+sp|P60658|SPEA_SALTI    1/1     371   587 ..     1   123 []   114.9  1.3e-29
+sp|B4T5J3|SPEA_SALNS    1/1     345   561 ..     1   123 []   114.9  1.3e-29
+sp|P44316|DCDA_HAEIN    1/1     285   391 ..     1   123 []   114.9  1.4e-29
+sp|P22220|SPE1_AVESA    1/1     355   532 ..     1   123 []   114.8  1.4e-29
+sp|Q9X5M1|DCDA_MYCS2    1/1     336   449 ..     1   123 []   114.7  1.5e-29
+sp|Q9KLD1|SPEA_VIBCH    1/1     354   570 ..     1   123 []   114.4  1.9e-29
+sp|Q8XCX9|SPEA_ECO57    1/1     371   587 ..     1   123 []   114.2  2.2e-29
+sp|B5YQD6|SPEA_ECO5E    1/1     345   561 ..     1   123 []   114.2  2.2e-29
+sp|Q8FE34|SPEA_ECOL6    1/1     371   587 ..     1   123 []   114.2  2.2e-29
+sp|B1LDE8|SPEA_ECOSM    1/1     345   561 ..     1   123 []   114.2  2.2e-29
+sp|Q0T0V3|SPEA_SHIF8    1/1     345   561 ..     1   123 []   113.9  2.6e-29
+sp|Q83Q93|SPEA_SHIFL    1/1     371   587 ..     1   123 []   113.9  2.6e-29
+sp|B9M6H6|SPEA_GEOSF    1/1     346   561 ..     1   123 []   113.6  3.3e-29
+sp|P21170|SPEA_ECOLI    1/1     371   587 ..     1   123 []   113.6  3.4e-29
+sp|B5EIW4|SPEA_GEOBB    1/1     425   561 ..     1   123 []   112.8  5.7e-29
+sp|C6E3V4|SPEA_GEOSM    1/1     425   561 ..     1   123 []   112.8  5.7e-29
+sp|A1AS90|SPEA_PELPD    1/1     425   561 ..     1   123 []   112.3  8.2e-29
+sp|A2BU00|SPEA_PROM5    1/1     355   574 ..     1   123 []   112.2  8.6e-29
+sp|Q8RQM6|DCDA_COREF    1/1     324   437 ..     1   123 []   109.3  6.4e-28
+sp|B4F1A4|SPEA_PROMH    1/1     347   563 ..     1   123 []   108.8  8.9e-28
+sp|P74576|SPEA1_SYNY3   1/1     396   615 ..     1   123 []   108.1  1.5e-27
+sp|A5GB52|SPEA_GEOUR    1/1     346   561 ..     1   123 []   107.3  2.6e-27
+sp|Q7U3S0|SPEA_SYNPX    1/1     351   570 ..     1   123 []   107.1  2.9e-27
+sp|A0A4W3|SPEA_GEOSL    1/1     425   561 ..     1   123 []   106.7  3.9e-27
+sp|Q39X78|SPEA_GEOMG    1/1     425   561 ..     1   123 []   106.4  4.8e-27
+sp|A1TY02|SPEA_MARAV    1/1     350   566 ..     1   123 []   106.3    5e-27
+sp|Q9RXR4|SPEA_DEIRA    1/1     372   586 ..     1   123 []   106.0  6.4e-27
+sp|P09890|DCDA_CORGL    1/1     310   423 ..     1   123 []   105.3    1e-26
+sp|O82475|SPE1_BRAJU    1/1     390   585 ..     1   123 []   104.8  1.5e-26
+sp|Q39827|SPE1_SOYBN    1/1     401   596 ..     1   123 []   104.7  1.6e-26
+sp|Q7N121|SPEA_PHOLL    1/1     347   563 ..     1   123 []   104.7  1.6e-26
+sp|B3EAF3|SPEA_GEOLS    1/1     346   561 ..     1   123 []   104.5  1.8e-26
+sp|A5GWM2|SPEA_SYNR3    1/1     355   566 ..     1   123 []   104.5  1.8e-26
+sp|Q7UTS2|SPEA_RHOBA    1/1     460   592 ..     1   123 []   104.0  2.5e-26
+sp|Q9KCM5|DCDA_BACHD    1/1     301   409 ..     1   123 []   103.8    3e-26
+sp|Q96A70|ADC_HUMAN     1/1     286   409 ..     1   123 []   103.7  3.1e-26
+sp|Q43075|SPE1_PEA      1/1     494   609 ..     1   123 []   102.6  6.5e-26
+sp|P72587|SPEA2_SYNY3   1/1     375   587 ..     1   123 []   100.6  2.6e-25
+sp|Q7TUJ9|SPEA_PROMM    1/1     355   574 ..     1   123 []   100.2  3.7e-25
+sp|P49726|SPE1_SOLLC    1/1     291   492 ..     1   123 []    98.7    1e-24
+sp|Q9PII5|DCDA_CAMJE    1/1     270   375 ..     1   123 []    98.5  1.1e-24
+sp|A2CDK1|SPEA_PROM3    1/1     355   574 ..     1   123 []    98.1  1.5e-24
+sp|Q8BVM4|ADC_MOUSE     1/1     286   408 ..     1   123 []    97.9  1.7e-24
+sp|Q9CL60|SPEA_PASMU    1/1     357   573 ..     1   123 []    95.7    8e-24
+sp|O23141|SPE2_ARATH    1/1     481   596 ..     1   123 []    94.8  1.5e-23
+sp|Q9SNN0|SPE1_ORYSJ    1/1     401   598 ..     1   123 []    94.7  1.6e-23
+sp|P31851|TABA_PSESZ    1/1     278   383 ..     1   123 []    92.2  8.9e-23
+sp|Q9JT25|SPEA_NEIMA    1/1     343   559 ..     1   123 []    91.8  1.2e-22
+sp|Q9K0U3|SPEA_NEIMB    1/1     343   559 ..     1   123 []    91.8  1.2e-22
+sp|Q7XRA1|ADC2_ORYSJ    1/1     381   547 ..     1   123 []    91.2  1.8e-22
+sp|Q9SI64|SPE1_ARATH    1/1     385   584 ..     1   123 []    88.2  1.5e-21
+sp|C4L9A9|SPEA_TOLAT    1/1     433   566 ..     1   123 []    87.6  2.2e-21
+sp|A0KIP8|SPEA_AERHH    1/1     348   564 ..     1   123 []    78.4  1.3e-18
+sp|A4SPD6|SPEA_AERS4    1/1     348   564 ..     1   123 []    73.6  3.6e-17
+sp|P55709|Y4YA_RHISN    1/1     324   439 ..     1   123 []    23.1   0.0018
+sp|O81160|SPE2_THECC    1/1     341   406 .]     1   123 []    -9.6      1.1
+
+Alignments of top-scoring domains:
+sp|O29458|DCDA_ARCFU: domain 1 of 1, from 285 to 391: score 173.5, E = 3e-47
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+t+V +vk+ g+ +         fv+ +d+G++ + ++pa+y+ +
+  sp|O29458|   285    VLITRVNAVKK-GY-KN--------FVA-VDAGFNVL-IRPAMYGSY 319  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h++++ +++d+ep+e++t++GP+C+sgDvlar d++LP   ++evGDl++
+  sp|O29458|   320 HRVAVANKMDAEPEEVYTVVGPICESGDVLAR-DRKLP---KVEVGDLIA 365  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +fdaGAY+++++s++Ng+pr+aeVlv   
+  sp|O29458|   366 VFDAGAYGFVMSSQYNGRPRCAEVLV    391  
+
+sp|Q9UQW9|DCOR_SCHPO: domain 1 of 1, from 307 to 426: score 171.6, E = 1.2e-46
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      tL++nVi+++++++++k         +yy++dGvygs ++++l+d++
+  sp|Q9UQW9|   307    TLAVNVIAKRKLDDEEK--------VMYYVNDGVYGS-LNCILFDHQ 344  
+
+                CS --EEECSS         -TTSSEEEEEEE-----TT--SEE.EEEEE...
+                   hpilpvsr.........ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl
+                   hp++ v + +++   ++l ++  +++ ++GPtCds+Dv+a+ d +LP   
+  sp|Q9UQW9|   345 HPVARVLKcgsrfvyndLVGTGQHRCFIWGPTCDSLDVIAN-DAHLPY-- 391  
+
+                CS ------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   elevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   el+vGD+++f+daGAYt ++as+FNgf+   +V++   
+  sp|Q9UQW9|   392 ELNVGDWIYFEDAGAYTVAAASCFNGFKTSRIVYL    426  
+
+sp|O27390|DCDA_METTH: domain 1 of 1, from 292 to 398: score 162.1, E = 8.4e-44
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+t+V ++ke ++ rk        f++ +d+G++++ ++pa+y+ +
+  sp|O27390|   292    YLLTRVNTIKE-SY-RK--------FAG-VDAGFNTL-LRPAMYGSY 326  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h+il+ +r+ +ep e+ ++aG+ C+sgD +ar d++LP   e+++GD l+
+  sp|O27390|   327 HHILVAERPLDEPSEKMDVAGNVCESGDLFAR-DRQLP---EINEGDVLA 372  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +++aGAY +s++s++N++prpaeVlv   
+  sp|O27390|   373 IMNAGAYSFSMSSQYNSRPRPAEVLV    398  
+
+sp|Q9I8S4|DCOR2_XENLA: domain 1 of 1, from 284 to 405: score 160.6, E = 2.3e-43
+                CS    EEEEEEEEEEE--S          S-E........EEEEES----S-
+                   *->tLvtnVigvkergg..........drkldlnerlafvyylddGvygs
+                      +L++nVi++ke++ + ++++++++ +         ++yy++dGvygs
+  sp|Q9I8S4|   284    SLAVNVIAKKEVEHsvsddeenesSKS--------IMYYVNDGVYGS 322  
+
+                CS .-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEEEE
+                   lpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLP
+                    +++  +d+ hp +++++++ +++p+++++l+GPtCd++D +a+  v+LP
+  sp|Q9I8S4|   323 -FNCLVFDHAHPKPILHKkpSPDQPLYTSSLWGPTCDGLDQIAE-RVQLP 370  
+
+                CS ...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   lHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                      el+vGD+l+f+++GAYt++++snFNgf++ ++ +    
+  sp|Q9I8S4|   371 ---ELHVGDWLLFENMGAYTIAASSNFNGFQQSPVHYA    405  
+
+sp|P09057|DCOR_RAT: domain 1 of 1, from 285 to 408: score 160.5, E = 2.5e-43
+                CS    EEEEEEEEEEE--S     S-E.. ......EEEEES----S-.-CH
+                   *->tLvtnVigvkergg.....drkld.lnerlafvyylddGvygslpdp
+                      tL++n+i++k++  +++++d+  d+ ne++ ++y ++dGvygs +++
+  sp|P09057|   285    TLAVNIIAKKTVWKeqtgsDDE-DeSNEQTLMYY-VNDGVYGS-FNC 328  
+
+                CS HHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEEEE...-
+                   alydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLPlHle
+                   +lyd+ h  ++++++++++e+ ++++++GPtCd++D + +  +sLP   e
+  sp|P09057|   329 ILYDHAHVKALLQKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCSLP---E 374  
+
+                CS -----EEEES-----SGCC-B-TTT--.-EEEEE   
+                   levGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   ++vGD+++f+++GAYt ++as+FNgf+rp++++v   
+  sp|P09057|   375 MHVGDWMLFENMGAYTVAAASTFNGFQRPNIYYV    408  
+
+sp|P14019|DCOR_CRIGR: domain 1 of 1, from 282 to 402: score 159.9, E = 3.8e-43
+                CS    EEEEEEEEEEE--S         S-E........EEEEES----S-.
+                   *->tLvtnVigvkergg.........drkldlnerlafvyylddGvygsl
+                      tL++n+i++k ++ ++++++++++++        f+yy++dGvygs 
+  sp|P14019|   282    TLAVNIIAKKIVSKgsddedessEQT--------FMYYVNDGVYGS- 319  
+
+                CS -CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEEEE.
+                   pdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLPl
+                   ++++lyd+ h  ++++++++++e+ ++++++GPtCd++D + +  + LP 
+  sp|P14019|   320 FNCILYDHAHVKPLLPKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCNLP- 367  
+
+                CS ..------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   HlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                     e++vGD+++f+++GAYt ++as+FNgf+rp++++v   
+  sp|P14019|   368 --EMHVGDWMLFENMGAYTVAAASTFNGFQRPSIYYV    402  
+
+sp|P00860|DCOR_MOUSE: domain 1 of 1, from 285 to 408: score 159.8, E = 3.9e-43
+                CS    EEEEEEEEEEE--S            S-E........EEEEES----
+                   *->tLvtnVigvkergg............drkldlnerlafvyylddGvy
+                      tL++n+i++k++  +++++++++++++++        f+yy++dGvy
+  sp|P00860|   285    TLAVNIIAKKTVWKeqpgsddedesnEQT--------FMYYVNDGVY 323  
+
+                CS S-.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEE
+                   gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs
+                   gs ++++lyd+ h  ++++++++++e+ ++++++GPtCd++D + +  + 
+  sp|P00860|   324 GS-FNCILYDHAHVKALLQKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCN 371  
+
+                CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   LP   e++vGD+++f+++GAYt ++as+FNgf+rp++++v   
+  sp|P00860|   372 LP---EMHVGDWMLFENMGAYTVAAASTFNGFQRPNIYYV    408  
+
+sp|P27119|DCOR_MUSPA: domain 1 of 1, from 285 to 408: score 159.8, E = 3.9e-43
+                CS    EEEEEEEEEEE--S            S-E........EEEEES----
+                   *->tLvtnVigvkergg............drkldlnerlafvyylddGvy
+                      tL++n+i++k++  +++++++++++++++        f+yy++dGvy
+  sp|P27119|   285    TLAVNIIAKKTVWKeqpgsddedesnEQT--------FMYYVNDGVY 323  
+
+                CS S-.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEE
+                   gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs
+                   gs ++++lyd+ h  ++++++++++e+ ++++++GPtCd++D + +  + 
+  sp|P27119|   324 GS-FNCILYDHAHVKALLQKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCN 371  
+
+                CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   LP   e++vGD+++f+++GAYt ++as+FNgf+rp++++v   
+  sp|P27119|   372 LP---EMHVGDWMLFENMGAYTVAAASTFNGFQRPNIYYV    408  
+
+sp|P27118|DCOR_CHICK: domain 1 of 1, from 275 to 398: score 158.8, E = 8e-43
+                CS    EEEEEEEEEEE--S        S-E........EEEEES----S-.-
+                   *->tLvtnVigvkergg........drkldlnerlafvyylddGvygslp
+                      tL++n+i++k ++ ++++++++d++   n+++ ++y ++dGvygs +
+  sp|P27118|   275    TLAVNIIAKKIVSKeqtgsddeDDV---NDKTLMYY-VNDGVYGS-F 316  
+
+                CS CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEEEE..
+                   dpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLPlH
+                   +++lyd+ h  +++++++++++ +++++++GPtCd++D + +  + +P  
+  sp|P27118|   317 NCILYDHAHVKPVLQKrpKPDDGCYSCSIWGPTCDGLDRIVE-RCNMP-- 363  
+
+                CS .------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                    el+vGD+++f+++GAYt ++as+FNgf+rp + +v   
+  sp|P27118|   364 -ELQVGDWILFENMGAYTVAAASTFNGFQRPTIHYV    398  
+
+sp|P27120|DCOR1_XENLA: domain 1 of 1, from 285 to 409: score 157.0, E = 2.8e-42
+                CS    EEEEEEEEEEE--S      S-E.. ......EEEEES----S-.-C
+                   *->tLvtnVigvkergg......drkld.lnerlafvyylddGvygslpd
+                      tL++n+i++k++  ++++++d+  d  n+++ ++y ++dGvygs ++
+  sp|P27120|   285    TLAVNIIAKKVMVNeqsgsdDEE-DaANDKTLMYY-VNDGVYGS-FN 328  
+
+                CS HHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEEEE...
+                   palydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl
+                   ++l+d+ h  +++ ++++++e+ ++++++GPtCd++D + +  ++LP   
+  sp|P27120|   329 CILFDHAHVKPVLTKkpKPDEKFYSSSIWGPTCDGLDRIVE-RFELP--- 374  
+
+                CS ------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   elevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   el+vGD+++f+++GAYt ++as+FNgf+rp  ++v   
+  sp|P27120|   375 ELQVGDWMLFENMGAYTVAAASTFNGFQRPTLYYV    409  
+
+sp|P11926|DCOR_HUMAN: domain 1 of 1, from 285 to 408: score 156.9, E = 3e-42
+                CS    EEEEEEEEEEE--S            S-E........EEEEES----
+                   *->tLvtnVigvkergg............drkldlnerlafvyylddGvy
+                      tL++n+i++k +  +++++++++++++++        f+yy++dGvy
+  sp|P11926|   285    TLAVNIIAKKIVLKeqtgsddedessEQT--------FMYYVNDGVY 323  
+
+                CS S-.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEE
+                   gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs
+                   gs ++++lyd+ h  ++++++++++e+ ++++++GPtCd++D + +  + 
+  sp|P11926|   324 GS-FNCILYDHAHVKPLLQKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCD 371  
+
+                CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   LP   e++vGD+++f+++GAYt ++as+FNgf+rp +++v   
+  sp|P11926|   372 LP---EMHVGDWMLFENMGAYTVAAASTFNGFQRPTIYYV    408  
+
+sp|P27117|DCOR_BOVIN: domain 1 of 1, from 285 to 408: score 154.1, E = 2.1e-41
+                CS    EEEEEEEEEEE--S            S-E........EEEEES----
+                   *->tLvtnVigvkergg............drkldlnerlafvyylddGvy
+                      tL++n+i++k +  ++++++++++++dr+        f+yy++dGvy
+  sp|P27117|   285    TLAVNIIAKKLVLKeqtgsddeeestDRT--------FMYYVNDGVY 323  
+
+                CS S-.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEE
+                   gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs
+                   gs ++++lyd+ h  ++++++++++e+ ++++++GPtCd++D + +  + 
+  sp|P27117|   324 GS-FNCILYDHAHVKPLLQKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCN 371  
+
+                CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   LP   e++vGD+++f+++GAYt ++as+FNgf+rp +++v   
+  sp|P27117|   372 LP---EMHVGDWMLFENMGAYTVAAASTFNGFQRPTIYYV    408  
+
+sp|P07805|DCOR_TRYBB: domain 1 of 1, from 283 to 406: score 151.2, E = 1.6e-40
+                CS    EEEEEEEEEEE--S            S-E........EEEEES----
+                   *->tLvtnVigvkergg............drkldlnerlafvyylddGvy
+                      tL++nVi++k+ +g +++ + + +++++         f+yy++dGvy
+  sp|P07805|   283    TLAVNVIAKKVTPGvqtdvgahaesnAQS--------FMYYVNDGVY 321  
+
+                CS S-.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEE
+                   gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs
+                   gs ++++lyd+    ++ +r++ ++e+++p++++GPtCd++D + +  ++
+  sp|P07805|   322 GS-FNCILYDHAVVRPLPQRepIPNEKLYPSSVWGPTCDGLDQIVE-RYY 369  
+
+                CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   LP   e++vG++l+f+d+GAYt + +s FNgf+ p +++v   
+  sp|P07805|   370 LP---EMQVGEWLLFEDMGAYTVVGTSSFNGFQSPTIYYV    406  
+
+sp|Q9X1K5|DCDA_THEMA: domain 1 of 1, from 257 to 362: score 150.5, E = 2.6e-40
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+ +V+ vk+r+  +         fv+ +d+G++ + ++paly a+
+  sp|Q9X1K5|   257    YLLLRVVLVKRRHN-KA--------FVV-VDGGMNVL-IRPALYSAY 292  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h+i ++    ++++ +++++GP+C+sgDv+a  d++LP   e+e+GD+++
+  sp|Q9X1K5|   293 HRIFVLG--KQGKEMRADVVGPLCESGDVIAY-DRELP---EVEPGDIIA 336  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +++aGAY++++++n+N+  rpaeVlv   
+  sp|Q9X1K5|   337 VENAGAYGYTMSNNYNSTTRPAEVLV    362  
+
+sp|P49725|DCOR_PANRE: domain 1 of 1, from 294 to 416: score 146.6, E = 3.7e-39
+                CS    EEEEEEEEEEE--S       S-E........EEEEES----S-.-C
+                   *->tLvtnVigvkergg.......drkldlnerlafvyylddGvygslpd
+                      ++ tnVi+  +++ ++ +++ d++   n+  +++y ++dGvygs ++
+  sp|P49725|   294    SVTTNVIASVKVPAsritekaDDV---NRDGYMYY-MNDGVYGS-FN 335  
+
+                CS HHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEEEE...
+                   palydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl
+                   + l+d+++p     ++++++ep++pv+++GPtCd++D + +    +P   
+  sp|P49725|   336 CKLFDHYQPRGMPLAehDADEPRFPVCVWGPTCDGLDQVEE-SSVMP--- 381  
+
+                CS ------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   elevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   +l +GD+l+++d+GAYt+++as+FNgf  p+++++   
+  sp|P49725|   382 RLYEGDWLYYPDMGAYTSVAASTFNGFDKPKTYYF    416  
+
+sp|O22616|DCOR_SOLLC: domain 1 of 1, from 308 to 424: score 145.8, E = 6.6e-39
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS- 
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalyda.
+                      tL+t++ig+++rg+  k         ++ ++dG+ygs ++++lyd+ 
+  sp|O22616|   308    TLATTIIGKRVRGE-LK--------EYW-INDGLYGS-MNCVLYDHa 343  
+
+                CS    ---EEECSS     -TTSSEEEEEEE-----TT--SEE.EEEEE...
+                   ...lhpilpvsr.....ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl
+                   + +  p ++ s++++ +  +++t+p+t++GPtCd++D++ r d++LP   
+  sp|O22616|   344 tvtATPLACMSNrnnlnCGGSKTFPSTVFGPTCDALDTVLR-DYQLP--- 389  
+
+                CS ------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   elevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   el+v+D+l+f+++GAYt +++snFNgf   a+V     
+  sp|O22616|   390 ELQVNDWLIFPNMGAYTKAAGSNFNGFNTSAIVTH    424  
+
+sp|P27121|DCOR_NEUCR: domain 1 of 1, from 326 to 471: score 145.7, E = 7.3e-39
+                CS    EEEEEEEEEEE--S             S-E.. ......EEEEES--
+                   *->tLvtnVigvkergg.............drkld.lnerlafvyylddG
+                      tL++n+i+++++ +++  + +++++ +d+ + +++++ ++vy ++dG
+  sp|P27121|   326    TLACNIIARRTIQDgsavsvsdsssmsDDGSVnNGDARYMVY-VNDG 371  
+
+                CS --S-.-CHHHHS----EEECSS              -TTSSEEEEEEE--
+                   vygslpdpalydalhpilpvsr..............ldeeptepvtlaGP
+                   +yg+ ++++++d++hp++ + r ++++  ++   ++  +e + +++++GP
+  sp|P27121|   372 LYGN-FSSIMFDHQHPVAKILRaggrtmynsvaaheSSAEDAIEYSIWGP 420  
+
+                CS ---TT--SEE.EEEEE...------EEEES-----SGCC-B-TTT--.-E
+                   tCdsgDvlarFdvsLPlHlelevGDllvffdaGAYteslasnFNgfprpa
+                   tCd+ D + +  + + +   l+vGD+l+f+d+GAYt + a++FNgf    
+  sp|P27121|   421 TCDGIDRITE-SIRFRE--ILDVGDWLYFEDMGAYTKCSATTFNGFSNEH 467  
+
+                CS EEEE   
+                   eVlv<-*
+                    V++   
+  sp|P27121|   468 DVIY    471  
+
+sp|P50134|DCOR_DATST: domain 1 of 1, from 308 to 424: score 145.5, E = 8.2e-39
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS- 
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalyda.
+                      tL+t++ig+++rg  +           y+++dG+ygs ++++lyd+ 
+  sp|P50134|   308    TLATTIIGKRVRG--EL--------REYWINDGLYGS-MNCVLYDHa 343  
+
+                CS    ---EEECSS     -TTSSEEEEEEE-----TT--SEE.EEEEE...
+                   ...lhpilpvsr.....ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl
+                   + +  p ++ s++++ +  +++t+p+t++GPtCd++D++ r d++LP   
+  sp|P50134|   344 tvnATPLACMSNrsnlnCGGSKTFPSTVFGPTCDALDTVLR-DYQLP--- 389  
+
+                CS ------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   elevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   el+v+D+l+f+++GAYt +++snFNgf   a+V     
+  sp|P50134|   390 ELQVNDWLIFPNMGAYTKAAGSNFNGFNTSAIVTH    424  
+
+sp|P08432|DCOR_YEAST: domain 1 of 1, from 329 to 460: score 143.2, E = 4e-38
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      tL+++Vi+++++++++         ++y ++dGvyg+ ++++l+d++
+  sp|P08432|   329    TLASHVIAKRKLSENEA--------MIY-TNDGVYGN-MNCILFDHQ 365  
+
+                CS --EEECSS                      -TTSSEEEEEEE-----TT-
+                   hpilpvsr......................ldeeptepvtlaGPtCdsgD
+                    p + + +++ + + ++ ++++   ++ ++ ++e  ++v+++GPtCd++D
+  sp|P08432|   366 EPHPRTLYhnlefhyddfesttavldsinkTRSEYPYKVSIWGPTCDGLD 415  
+
+                CS -SEE.EEEEE...------EEEES-----SGCC-B-TTT--.-EEEEE  
+                   vlarFdvsLPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-
+                   ++a+ ++++ +  ++ vGD+ +f+  GAYt+s+a++FNgf+++a +++  
+  sp|P08432|   416 CIAK-EYYMKH--DVIVGDWFYFPALGAYTSSAATQFNGFEQTADIVY   460  
+
+                CS  
+                   *
+                    
+  sp|P08432|     -   -    
+
+sp|Q8A2B1|SPEA_BACTN: domain 1 of 1, from 346 to 558: score 142.0, E = 9.1e-38
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+++V+ + ++++ +++++  ++ ++  ++  +  ++ ++++  + 
+  sp|Q8A2B1|   346    VLIFEVLETATLPEwddeeeiapdahelvqelysiwdslnqnkmlea 392  
+
+                CS                                                  S
+                   .................................................d
+                    ++ ++ +++  +  +++  + +++ + ++   + +++ ++  ++ ++ +
+  sp|Q8A2B1|   393 whdaqqireealdlfshgivdlktraqierlywsitreinqiagglkhaP 442  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   + +++l++ la+ y++++++++slpd++++d+++pi+p++rlde p++++
+  sp|Q8A2B1|   443 DEFRgLSKLLADKYFCNFSLFQSLPDSWAIDQIFPIMPIQRLDEKPERSA 492  
+
+                CS EEE-----TT--SEE.      EEEEE.. .------EEEES-----SGC
+                   tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes
+                   tl + tCds++++a+F ++++   +LP+H+l+  + ++l++f++GAY+e+
+  sp|Q8A2B1|   493 TLQDITCDSDGKIANFistrnvAHYLPVHsLKKTEPYYLAVFLVGAYQEI 542  
+
+                CS C-B-TTT--.-EEEEE   
+                   lasnFNgfprpaeVlv<-*
+                   l++++N+f++++ V+v   
+  sp|Q8A2B1|   543 LGDMHNLFGDTNAVHV    558  
+
+sp|Q9HUX1|SPEA_PSEAE: domain 1 of 1, from 354 to 567: score 141.0, E = 1.9e-37
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t+V++v + +++ ++  + +++++  +   +  ++++ +  +++
+  sp|Q9HUX1|   354    VLITQVTDVERHNDdvpkivdldeqpeivrwlaellgptdaemvtet 400  
+
+                CS                                                   
+                   ..................................................
+                     + ++  ++   +  +++ +  ++   ++      ++ +++ + +++++
+  sp|Q9HUX1|   401 ywrathyigdaaaqyadgkislaqkalaeqcyfaicrrlhnqlkarqrsh 450  
+
+                CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEE
+                   drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptep
+                   +++ld+ln++la+ y+++++v++slpd+++++++ pilp++rl eep+++
+  sp|Q9HUX1|   451 RQVLDeLNDKLADKYICNFSVFQSLPDTWAIGQVLPILPLHRLGEEPDRR 500  
+
+                CS EEEE-----TT--SEE.      EEEEE.. .------EEEES-----SG
+                   vtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYte
+                   ++l + tCds++++ ++ ++++ + sLP+H+++  +++l+++f++GAY+e
+  sp|Q9HUX1|   501 AVLQDLTCDSDGKITQYvdeqsiETSLPVHeVKEGEDYLIGVFLVGAYQE 550  
+
+                CS CC-B-TTT--.-EEEEE   
+                   slasnFNgfprpaeVlv<-*
+                   +l++++N+f++++ V v   
+  sp|Q9HUX1|   551 ILGDMHNLFGDTDSVNV    567  
+
+sp|Q7NU27|SPEA_CHRVO: domain 1 of 1, from 343 to 556: score 140.9, E = 2e-37
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV++v +++++  + ++ ++ + + ++  +  + ++++  ++ 
+  sp|Q7NU27|   343    VLLMNVTDVERLPDtvapidkaeelslplrklvelanlndeelvtei 389  
+
+                CS                                                   
+                   ..................................................
+                     + ++  ++ ++   +++ + +++   ++ + +  ++ +++ + +++++
+  sp|Q7NU27|   390 yyrashcvsevsemyaegrlslqekalaedlhatlcrrlhnqlqasqrsq 439  
+
+                CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEE
+                   drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptep
+                   ++++d+l++rla+ y+++++v++slpd++++d++ pi+pv+rl+e+pt++
+  sp|Q7NU27|   440 RQVYDeLTDRLADKYFCNFSVFQSLPDTWAIDQVLPIMPVHRLAEQPTRR 489  
+
+                CS EEEE-----TT--SEE.      EEEEE.. .------EEEES-----SG
+                   vtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYte
+                   ++l + tCds+++l ++ ++++ + s+ +H+++    +l+++f++GAY+e
+  sp|Q7NU27|   490 AVLQDLTCDSDGKLKQYvdqqsiESSMSVHeVKQGDEYLIAVFLVGAYQE 539  
+
+                CS CC-B-TTT--.-EEEEE   
+                   slasnFNgfprpaeVlv<-*
+                   +l++++N+f++++ V v   
+  sp|Q7NU27|   540 ILGDMHNLFGDTDSVNV    556  
+
+sp|O69203|DCDA_ACTPA: domain 1 of 1, from 309 to 415: score 140.6, E = 2.5e-37
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      + +++V +vk+ g +r+        fv+ +d+G++++ p+paly+ +
+  sp|O69203|   309    VTLYRVAAVKR-GVRRV--------FVA-VDGGMSDN-PRPALYGSR 344  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   + +++v+  ++++++pvt++G++C++gDvla+ dv+LP+  ++++GDll+
+  sp|O69203|   345 YAVRLVR--RGGRRAPVTVVGRHCEAGDVLAE-DVPLPE--DVRAGDLLA 389  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   ++ +GAY+++lasn+N ++rp++V v   
+  sp|O69203|   390 VPVTGAYHHALASNYNAVGRPPVVGV    415  
+
+sp|Q8S3N2|DCOR_CAPAN: domain 1 of 1, from 312 to 428: score 140.5, E = 2.6e-37
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS- 
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalyda.
+                      tL+t++ig+++rg  +           y+++dG+ygs ++++lyd+ 
+  sp|Q8S3N2|   312    TLATTIIGKRVRG--DL--------REYWINDGLYGS-MNCVLYDHa 347  
+
+                CS    ---EEECSS     -TTSSEEEEEEE-----TT--SEE.EEEEE...
+                   ...lhpilpvsr.....ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl
+                   + +  p ++ s++ + +  +++ +p+t++GPtCd++D++ r d++ P   
+  sp|Q8S3N2|   348 tvtATPLACMSNrvnlnCSGSKMFPSTIFGPTCDALDTVLR-DYHVP--- 393  
+
+                CS ------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   elevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   el+v+D+++f+++GAYt +++snFNgf   a+V     
+  sp|Q8S3N2|   394 ELQVNDWVIFPNMGAYTKAAGSNFNGFNTSAIVTH    428  
+
+sp|P00861|DCDA_ECOLI: domain 1 of 1, from 279 to 397: score 140.3, E = 3.1e-37
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+t+V +vk +g  r         fv  +d+G++++ ++pa+y+ +
+  sp|P00861|   279    VLITQVRSVKQMGS-RH--------FVL-VDAGFNDL-MRPAMYGSY 314  
+
+                CS --EEECSS    -TTSSEEEEEEE-----TT--S       EE.EEEEE.
+                   hpilpvsr....ldeeptepvtlaGPtCdsgDvl.......arFdvsLPl
+                   h+i  + +++++l+ +pt+++++aGP+C+sgDv++++++++ + +++LP 
+  sp|P00861|   315 HHISALAAdgrsLEHAPTVETVVAGPLCESGDVFtqqeggnVE-TRALP- 362  
+
+                CS ..------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   HlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                     e+++GD+lv +d+GAY+ s++sn+N++p+ +eVl+   
+  sp|P00861|   363 --EVKAGDYLVLHDTGAYGASMSSNYNSRPLLPEVLF    397  
+
+sp|Q7NE10|SPEA_GLOVI: domain 1 of 1, from 346 to 557: score 140.2, E = 3.1e-37
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+ V+gv+++  ++++++ +++++  ++  ++ ++ ++++ ++  
+  sp|Q7NE10|   346    VLVFDVMGVSHLQFgepepparnehsiirnlyetytqitpdnvqeaf 392  
+
+                CS                                                 S-
+                   ................................................dr
+                   ++ ++ +++  +    +  + +++ + ++   +  ++  +  ++ +  ++
+  sp|Q7NE10|   393 ndasqfkeealslfalgylglgeraraerlywgccekilnlvreldyiPD 442  
+
+                CS E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEE
+                   kld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvt
+                    l++l++++a +yy++++v++s pd++++d+l+pi+p++rldeep ++ t
+  sp|Q7NE10|   443 ELAdLEKNMASTYYCNFSVFQSAPDSWAIDQLFPIMPIHRLDEEPKARGT 492  
+
+                CS EE-----TT--SEE.      EEEEE.. .------EEEES-----SGCC
+                   laGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtesl
+                   la+ tCds++++++F + ++ +  L lH++++e+ ++l++f+ GAY+e+l
+  sp|Q7NE10|   493 LADLTCDSDGKIDQFidlrdvKGVLELHpVRPEEPYYLGMFLNGAYQEIL 542  
+
+                CS -B-TTT--.-EEEEE   
+                   asnFNgfprpaeVlv<-*
+                   ++++N+f+++++V++   
+  sp|Q7NE10|   543 GDMHNLFGDTNTVHI    557  
+
+sp|Q58497|DCDA_METJA: domain 1 of 1, from 305 to 410: score 140.0, E = 3.8e-37
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+ +V+++ke +   k        +v  +d+G+++  ++pa+y+a+
+  sp|Q58497|   305    YLLGKVHHIKETPV-TK--------WVM-IDAGMNDM-MRPAMYEAY 340  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h+i+ +      + e+v++aG +C+s Dv++r d++L+   ++evGD l+
+  sp|Q58497|   341 HHIINCK--VKNEKEVVSIAGGLCESSDVFGR-DRELD---KVEVGDVLA 384  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +fd+GAY++s+a+n+N ++rp  Vl    
+  sp|Q58497|   385 IFDVGAYGISMANNYNARGRPRMVLT    410  
+
+sp|Q5LIQ3|SPEA_BACFN: domain 1 of 1, from 346 to 558: score 139.5, E = 5.4e-37
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+++V+ + +++  +++++  ++ ++  ++  +  ++ ++++  + 
+  sp|Q5LIQ3|   346    VLIFEVLETATLPQwddeeeiapdahelvqelygiwdtlnqnkmlea 392  
+
+                CS                                                  S
+                   .................................................d
+                    ++ ++ +++  +  +++  + +++ + ++   + +++ ++  ++ ++ +
+  sp|Q5LIQ3|   393 whdaqqireealdlfshgivdlktraqierlywsitreinqiagglkhaP 442  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   + +++l++ la+ y++++++++slpd++++d+++pi+p++rlde p++++
+  sp|Q5LIQ3|   443 DEFRgLSKLLADKYFCNFSLFQSLPDSWAIDQIFPIMPIQRLDEKPDRSA 492  
+
+                CS EEE-----TT--SEE.      EEEEE.. .------EEEES-----SGC
+                   tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes
+                   tl + tCds++++a+F ++++   ++P+H+l+ ++ +++++f++GAY+e+
+  sp|Q5LIQ3|   493 TLQDITCDSDGKIANFistrnvAHYMPVHsLKQKEPYYVAVFLVGAYQEI 542  
+
+                CS C-B-TTT--.-EEEEE   
+                   lasnFNgfprpaeVlv<-*
+                   l++++N+f++++ V+v   
+  sp|Q5LIQ3|   543 LGDMHNLFGDTNAVHV    558  
+
+sp|Q64ZT8|SPEA_BACFR: domain 1 of 1, from 346 to 558: score 139.5, E = 5.4e-37
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+++V+ + +++  +++++  ++ ++  ++  +  ++ ++++  + 
+  sp|Q64ZT8|   346    VLIFEVLETATLPQwddeeeiapdahelvqelygiwdtlnqnkmlea 392  
+
+                CS                                                  S
+                   .................................................d
+                    ++ ++ +++  +  +++  + +++ + ++   + +++ ++  ++ ++ +
+  sp|Q64ZT8|   393 whdaqqireealdlfshgivdlktraqierlywsitreinqiagglkhaP 442  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   + +++l++ la+ y++++++++slpd++++d+++pi+p++rlde p++++
+  sp|Q64ZT8|   443 DEFRgLSKLLADKYFCNFSLFQSLPDSWAIDQIFPIMPIQRLDEKPDRSA 492  
+
+                CS EEE-----TT--SEE.      EEEEE.. .------EEEES-----SGC
+                   tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes
+                   tl + tCds++++a+F ++++   ++P+H+l+ ++ +++++f++GAY+e+
+  sp|Q64ZT8|   493 TLQDITCDSDGKIANFistrnvAHYMPVHsLKQKEPYYVAVFLVGAYQEI 542  
+
+                CS C-B-TTT--.-EEEEE   
+                   lasnFNgfprpaeVlv<-*
+                   l++++N+f++++ V+v   
+  sp|Q64ZT8|   543 LGDMHNLFGDTNAVHV    558  
+
+sp|Q87VU3|SPEA_PSESM: domain 1 of 1, from 354 to 567: score 138.1, E = 1.3e-36
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv++V++v + +++ ++  ++++ +++ +   +  ++++ +  +++
+  sp|Q87VU3|   354    MLVVQVTDVEKHNDevpkiadkeslpetvqwlvdllgptdiemvtet 400  
+
+                CS                                                   
+                   ..................................................
+                     + ++  ++  ++  +++ +  ++  +++      ++  ++ + +++++
+  sp|Q87VU3|   401 ywrathymsdiatqyadgkislaekalgeqcyfavcrrlynslkarqrsh 450  
+
+                CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEE
+                   drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptep
+                   +++ld+ln++la+ y+++++v++slpd+++++++ pilp++rldeep ++
+  sp|Q87VU3|   451 RQVLDeLNDKLADKYICNFSVFQSLPDTWAIGQVLPILPLHRLDEEPVRR 500  
+
+                CS EEEE-----TT--SEE.      EEEEE.. .------EEEES-----SG
+                   vtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYte
+                   ++l + tCds++++ ++ ++++ + s+P+H+l   +++ll++f++GAY+e
+  sp|Q87VU3|   501 AVLQDLTCDSDGKIKQYvdeqsiETSMPVHsLNEGEDYLLGIFLVGAYQE 550  
+
+                CS CC-B-TTT--.-EEEEE   
+                   slasnFNgfprpaeVlv<-*
+                   +l++++N+f++++ V +   
+  sp|Q87VU3|   551 ILGDMHNLFGDTDSVNI    567  
+
+sp|P40807|DCOR1_DROME: domain 1 of 1, from 276 to 391: score 137.4, E = 2.2e-36
+                CS    EEEEEEEEEEE--S     S-E........EEEEES----S-.-CHH
+                   *->tLvtnVigvkergg.....drkldlnerlafvyylddGvygslpdpa
+                      tLv+++++++e++ + ++ d +        ++y l+dGvygs ++++
+  sp|P40807|   276    TLVCKIHAKREIRNeagklDTV--------MYY-LNDGVYGS-FNCI 312  
+
+                CS HHS-   ---EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...-
+                   lyda...lhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHle
+                   lyd++  +   ++ +  ++ p+ ++ ++GP+Cd++D++ + d +LP    
+  sp|P40807|   313 LYDHqvvIAEHYLDN-AESLPHLKSLIWGPSCDALDKISE-DLHLP---N 357  
+
+                CS -----EEEES-----SGCC-B-TTT--.-EEEEE   
+                   levGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   l++GDll+f ++GAYt+  as FNgf+ p++ ++   
+  sp|P40807|   358 LNRGDLLGFRNMGAYTMPIASAFNGFEVPKTLYF    391  
+
+sp|B0U1H6|SPEA_XYLFM: domain 1 of 1, from 343 to 555: score 137.4, E = 2.3e-36
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV+ v  +++++ ++  ++++   ++ ++  ++ + ++  +  
+  sp|B0U1H6|   343    VLIANVTEVEAVPEgrvpglcddepavvrhmreiygeldarpaielf 389  
+
+                CS                                                  S
+                   .................................................d
+                    + ++ + ++    + ++ +  ++ + ++     +++ +++ ++++++++
+  sp|B0U1H6|   390 yeaqhfhaeglaaytlgqidlvhrariddlfyaishgvrerlsheekshR 439  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   ++ld+lnerl++ y+++++v+ s+pd +++++++pi+p++rl+e+pt++ 
+  sp|B0U1H6|   440 PVLDeLNERLVDKYFVNFSVFESIPDVWAINQIFPIVPIERLNEAPTRRG 489  
+
+                CS EEE-----TT--SEE.      EEEEE.. .------EEEES-----SGC
+                   tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes
+                   ++++ tCds++++ ++ ++++ d +LPlH l++ + ++++ff++GAY+e+
+  sp|B0U1H6|   490 VVCDLTCDSDGTVKQYveneslDSALPLHvLRHGEAYRIGFFLVGAYQEI 539  
+
+                CS C-B-TTT--.-EEEEE   
+                   lasnFNgfprpaeVlv<-*
+                   l++ +N+f++++ V v   
+  sp|B0U1H6|   540 LGDIHNLFGDTDAVEV    555  
+
+sp|Q9PH02|SPEA_XYLFA: domain 1 of 1, from 343 to 555: score 137.4, E = 2.3e-36
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV+ v  +++++ ++  ++++   ++ ++  ++ + ++  +  
+  sp|Q9PH02|   343    VLIANVTEVEAVPEgrvpgvcddepavvrhmreiygeldarpaielf 389  
+
+                CS                                                  S
+                   .................................................d
+                    + ++ + ++    + ++ +  ++ + ++     +++ +++ ++++++++
+  sp|Q9PH02|   390 yeaqhfhaeglaaytlgqidlvhrariddlfyaishgvrerlsheekshR 439  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   ++ld+lnerl++ y+++++v+ s+pd +++++++pi+p++rl+e+pt++ 
+  sp|Q9PH02|   440 PVLDeLNERLVDKYFVNFSVFESIPDVWAINQIFPIVPIERLNEAPTRRG 489  
+
+                CS EEE-----TT--SEE.      EEEEE.. .------EEEES-----SGC
+                   tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes
+                   ++++ tCds++++ ++ ++++ d +LPlH l++ + ++++ff++GAY+e+
+  sp|Q9PH02|   490 VVCDLTCDSDGTVKQYveneslDSALPLHvLRHGEAYRIGFFLVGAYQEI 539  
+
+                CS C-B-TTT--.-EEEEE   
+                   lasnFNgfprpaeVlv<-*
+                   l++ +N+f++++ V v   
+  sp|Q9PH02|   540 LGDIHNLFGDTDAVEV    555  
+
+sp|O05321|DCDA_PSEFL: domain 1 of 1, from 285 to 390: score 136.5, E = 4.1e-36
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+t+V + k+ +++++        f++ +d+ ++++ ++paly+a+
+  sp|O05321|   285    VLLTQVEYLKH-TEHKD--------FAI-VDAAMNDL-IRPALYQAW 320  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                     +  v+ ++++ +++++++GP+C+ gD+la+  ++L     le+GDll+
+  sp|O05321|   321 MDVTAVR-PRDTAARSYDIVGPICETGDFLAK-GRELA----LEEGDLLA 364  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +++aGAY+++++sn+N ++r+aeVlv   
+  sp|O05321|   365 VHSAGAYGFVMSSNYNTRGRCAEVLV    390  
+
+sp|B2I6M1|SPEA_XYLF2: domain 1 of 1, from 343 to 555: score 136.3, E = 4.7e-36
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV+ v  +++++ ++  ++++   ++ ++  ++ + ++  +  
+  sp|B2I6M1|   343    VLIANVTEVEAVPEgrvpgvcddepavvrhmreiygeldarpaielf 389  
+
+                CS                                                  S
+                   .................................................d
+                    + ++ + ++    + ++ +  ++ + ++     +++ +++ ++++++++
+  sp|B2I6M1|   390 yeaqhfhaeglaaytlgqidlvhrariddlfyaishgvrerlsheekshR 439  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   ++ld+lnerl++ y+++++v+ s+pd +++++++pi+p++rl+e pt++ 
+  sp|B2I6M1|   440 PVLDeLNERLVDKYFVNFSVFESIPDVWAINQIFPIVPIERLNEVPTRRG 489  
+
+                CS EEE-----TT--SEE.      EEEEE.. .------EEEES-----SGC
+                   tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes
+                   ++++ tCds++++ ++ ++++ d +LPlH l++ + ++++ff++GAY+e+
+  sp|B2I6M1|   490 VVCDLTCDSDGTVKQYveneslDSALPLHvLRHGEAYRIGFFLVGAYQEI 539  
+
+                CS C-B-TTT--.-EEEEE   
+                   lasnFNgfprpaeVlv<-*
+                   l++ +N+f++++ V v   
+  sp|B2I6M1|   540 LGDIHNLFGDTDAVEV    555  
+
+sp|Q87F25|SPEA_XYLFT: domain 1 of 1, from 343 to 555: score 136.3, E = 4.7e-36
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV+ v  +++++ ++  ++++   ++ ++  ++ + ++  +  
+  sp|Q87F25|   343    VLIANVTEVEAVPEgrvpgvcddepavvrhmreiygeldarpaielf 389  
+
+                CS                                                  S
+                   .................................................d
+                    + ++ + ++    + ++ +  ++ + ++     +++ +++ ++++++++
+  sp|Q87F25|   390 yeaqhfhaeglaaytlgqidlvhrariddlfyaishgvrerlsheekshR 439  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   ++ld+lnerl++ y+++++v+ s+pd +++++++pi+p++rl+e pt++ 
+  sp|Q87F25|   440 PVLDeLNERLVDKYFVNFSVFESIPDVWAINQIFPIVPIERLNEVPTRRG 489  
+
+                CS EEE-----TT--SEE.      EEEEE.. .------EEEES-----SGC
+                   tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes
+                   ++++ tCds++++ ++ ++++ d +LPlH l++ + ++++ff++GAY+e+
+  sp|Q87F25|   490 VVCDLTCDSDGTVKQYveneslDSALPLHvLRHGEAYRIGFFLVGAYQEI 539  
+
+                CS C-B-TTT--.-EEEEE   
+                   lasnFNgfprpaeVlv<-*
+                   l++ +N+f++++ V v   
+  sp|Q87F25|   540 LGDIHNLFGDTDAVEV    555  
+
+sp|Q8DHY6|SPEA_THEEB: domain 1 of 1, from 353 to 564: score 136.0, E = 6.1e-36
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV+gv+e++  ++++ + +++   ++  ++ +  ++++ ++  
+  sp|Q8DHY6|   353    VLIFNVLGVSEVPKitpepataeehliirnlydtyqaidennyqeay 399  
+
+                CS                                                 S-
+                   ................................................dr
+                   ++  + +++  +  + +  + +++ + ++       +  +  ++++  ++
+  sp|Q8DHY6|   400 ndalqfkgeaislfnfgylslperaraeslfwaccakilgiarqqeyvPD 449  
+
+                CS E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEE
+                   kld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvt
+                   +l++l++ +a +yy++ +v++s pd++++d+l+pi+p++rldeepte+ +
+  sp|Q8DHY6|   450 DLEdLEKIMASIYYINLSVFQSVPDSWAIDQLFPIMPIHRLDEEPTERGI 499  
+
+                CS EE-----TT--SEE.      EEEEE.. .------EEEES-----SGCC
+                   laGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtesl
+                   la+ tCds++++++F + ++ +  L lH++++ + ++l+ f+ GAY+e++
+  sp|Q8DHY6|   500 LADLTCDSDGKIDQFidlrdvKSVLELHpFRPGEPYYLGLFLNGAYQEIM 549  
+
+                CS -B-TTT--.-EEEEE   
+                   asnFNgfprpaeVlv<-*
+                   ++ +N+f++++ V++   
+  sp|Q8DHY6|   550 GNLHNLFGDTNAVHI    564  
+
+sp|O67262|DCDA_AQUAE: domain 1 of 1, from 290 to 396: score 135.8, E = 6.8e-36
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+t+V   k++g  +         f++ +d+G++++ ++p +y+a+
+  sp|O67262|   290    ILITQVQFLKDKGS-KH--------FII-VDAGMNDL-IRPSIYNAY 325  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h+i+pv+   e + ++++++GP+C+ gD+la  d++     e+++G++l+
+  sp|O67262|   326 HHIIPVE-TKERKKVVADIVGPICETGDFLAL-DREIE---EVQRGEYLA 370  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +++aGAY+++++s++N +pr+aeVlv   
+  sp|O67262|   371 VLSAGAYGFAMSSHYNMRPRAAEVLV    396  
+
+sp|Q88QC7|SPEA_PSEPK: domain 1 of 1, from 354 to 567: score 134.8, E = 1.3e-35
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv +V++v + +++ ++ ++++  +++ +   +  ++++ +  +++
+  sp|Q88QC7|   354    MLVIQVTDVEKHNDdvptienkealpetvqwlvdllgptdiemvtet 400  
+
+                CS                                                   
+                   ..................................................
+                     + ++  ++   +  +++ + +++   ++      ++ +++ + +++++
+  sp|Q88QC7|   401 ywrathymgdvaaqyadgklslgekalaeqcyfavcrrlhnslkarqrsh 450  
+
+                CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEE
+                   drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptep
+                   +++ld+ln++la+ y+++++v++slpd+++++++ pi+p++rldeep ++
+  sp|Q88QC7|   451 RQVLDeLNDKLADKYICNFSVFQSLPDTWAIGQVLPIIPLHRLDEEPMRR 500  
+
+                CS EEEE-----TT--SEE.      EEEEE.. .------EEEES-----SG
+                   vtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYte
+                   ++l + tCds+++++++ ++++ + s+P+H ++  +++ll++f++GAY+e
+  sp|Q88QC7|   501 AVLQDLTCDSDGKINQYvdeqsiETSMPVHaVKEGEDYLLGVFLVGAYQE 550  
+
+                CS CC-B-TTT--.-EEEEE   
+                   slasnFNgfprpaeVlv<-*
+                   +l++++N+f++++ V +   
+  sp|Q88QC7|   551 ILGDMHNLFGDTDSVNI    567  
+
+sp|O14977|AZIN1_HUMAN: domain 1 of 1, from 282 to 406: score 133.2, E = 4.2e-35
+                CS    EEEEEEEEEEE--S             S-E........EEEEES---
+                   *->tLvtnVigvkergg.............drkldlnerlafvyylddGv
+                      tL++n+i++k+++ ++ +++ ++++++++         f+yy++dGv
+  sp|O14977|   282    TLAVNIIAKKVVENdkfpsgvektgsdEPA--------FMYYMNDGV 320  
+
+                CS -S-.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EE
+                   ygslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdv
+                   ygs +++ l + l  i+ v+++ +++ep+++++l+GP+Cd +D + +  +
+  sp|O14977|   321 YGS-FASKLSEDLNTIPEVHKkyKEDEPLFTSSLWGPSCDELDQIVE-SC 368  
+
+                CS EEE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   sLPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   +LP   el+vGD+l+f ++GA  ++  s FN f+rpa++++   
+  sp|O14977|   369 LLP---ELNVGDWLIFDNMGADSFHEPSAFNDFQRPAIYYM    406  
+
+sp|Q5R7K3|AZIN1_PONAB: domain 1 of 1, from 282 to 406: score 133.2, E = 4.2e-35
+                CS    EEEEEEEEEEE--S             S-E........EEEEES---
+                   *->tLvtnVigvkergg.............drkldlnerlafvyylddGv
+                      tL++n+i++k+++ ++ +++ ++++++++         f+yy++dGv
+  sp|Q5R7K3|   282    TLAVNIIAKKVVENdkfpsgvektgsdEPA--------FMYYMNDGV 320  
+
+                CS -S-.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EE
+                   ygslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdv
+                   ygs +++ l + l  i+ v+++ +++ep+++++l+GP+Cd +D + +  +
+  sp|Q5R7K3|   321 YGS-FASKLSEDLNTIPEVHKkyKEDEPLFTSSLWGPSCDELDQIVE-SC 368  
+
+                CS EEE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   sLPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   +LP   el+vGD+l+f ++GA  ++  s FN f+rpa++++   
+  sp|Q5R7K3|   369 LLP---ELNVGDWLIFDNMGADSFHEPSAFNDFQRPAIYYM    406  
+
+sp|O35484|AZIN1_MOUSE: domain 1 of 1, from 282 to 406: score 132.9, E = 5.1e-35
+                CS    EEEEEEEEEEE--S             S-E........EEEEES---
+                   *->tLvtnVigvkergg.............drkldlnerlafvyylddGv
+                      tL++n+i++k+++ ++ +++ ++++++++         fvyy++dGv
+  sp|O35484|   282    TLAVNIIAKKVVENdkfssgvekngsdEPA--------FVYYMNDGV 320  
+
+                CS -S-.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EE
+                   ygslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdv
+                   ygs +++ l + l  i+ v+++ +++ep+++++l+GP+Cd +D + +  +
+  sp|O35484|   321 YGS-FASKLSEDLNTIPEVHKkyKEDEPLFTSSLWGPSCDELDQIVE-SC 368  
+
+                CS EEE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   sLPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   +LP   el+vGD+l+f ++GA  ++  s FN f+rpa++++   
+  sp|O35484|   369 LLP---ELNVGDWLIFDNMGADSFHEPSAFNDFQRPAIYFM    406  
+
+sp|Q50140|DCDA_MYCLE: domain 1 of 1, from 336 to 449: score 132.9, E = 5.2e-35
+                CS    EEEEEEEEEEE--S    S-E........EEEEES----S-.-CHHH
+                   *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal
+                      + +++V ++k+++ + + +r+        +v  +d+G++++ +++al
+  sp|Q50140|   336    ITLYEVGTIKDVDVsataHRR--------YVS-IDGGMSDN-IRTAL 372  
+
+                CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...-----
+                   ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG
+                   yda++ +++vsr  ++p++p++++G +C+sgD++ r d + P   +l++G
+  sp|Q50140|   373 YDAQYDVRLVSRTSDAPAAPASIVGKHCESGDIVVR-DTWVPD--DLKPG 419  
+
+                CS -EEEES-----SGCC-B-TTT--.-EEEEE   
+                   DllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   Dl+++  +GAY++sl+s++N ++rpa+V+v   
+  sp|Q50140|   420 DLVGVAATGAYCYSLSSRYNMLGRPAVVAV    449  
+
+sp|A6L012|SPEA_BACV8: domain 1 of 1, from 346 to 558: score 132.8, E = 5.5e-35
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+++V+ + ++++ +++ + ++++++  ++  +  ++ ++++  + 
+  sp|A6L012|   346    VLIFEVLETATLPEmdedfevgendhelvhelyeiwdnlnqsrmvea 392  
+
+                CS                                                  S
+                   .................................................d
+                    ++ ++ +++  +  +++  + +++ + ++   + +++ ++  ++ ++ +
+  sp|A6L012|   393 whdaqqireealdlfshgivdlktraqierlywsvtreinqiasglkhaP 442  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   + +++l++ la+ y++++++++slpd++++d+++pi+p++rlde p++ +
+  sp|A6L012|   443 DEFRkLDKLLADKYFCNFSLFQSLPDSWAIDQIFPIMPIQRLDEKPDRNA 492  
+
+                CS EEE-----TT--SEE.      EEEEE.. .------EEEES-----SGC
+                   tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes
+                   tl + tCds++++a+F +++     LP+H+l+ +  +++++f++GAY+e+
+  sp|A6L012|   493 TLQDITCDSDGKIANFistryvSHDLPVHsLKGKDAYYIGVFLVGAYQEI 542  
+
+                CS C-B-TTT--.-EEEEE   
+                   lasnFNgfprpaeVlv<-*
+                   l++++N+f++++ V+v   
+  sp|A6L012|   543 LGDMHNLFGDTNAVHV    558  
+
+sp|P19572|DCDA_PSEAE: domain 1 of 1, from 284 to 389: score 132.5, E = 6.8e-35
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+t+V + k+ +++++        f++ +d+ ++++ ++paly+a+
+  sp|P19572|   284    VLLTRVEYLKH-TEHKD--------FAI-VDAAMNDL-IRPALYQAW 319  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                     +  v+ ++++  ++++l+GP+C+ gD+la+ d+ L     l++GDll+
+  sp|P19572|   320 MDVQAVR-PRDAAPRRYDLVGPICETGDFLAK-DRDLA----LAEGDLLA 363  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   + +aGAY+++++sn+N ++r+aeVlv   
+  sp|P19572|   364 VRSAGAYGFVMSSNYNTRGRAAEVLV    389  
+
+sp|Q8YRP3|SPEA_ANASP: domain 1 of 1, from 395 to 606: score 132.3, E = 7.9e-35
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++ V+++++++ ++++++++++++  +   ++ ++ ++++ ++  
+  sp|Q8YRP3|   395    VLIFDVLSTSDVPRdnpeppkegespvinylwetyqsinkenyqefy 441  
+
+                CS                                                 S-
+                   ................................................dr
+                   ++ ++ +++  ++ + +  + +++ + ++      ++  +  ++++  ++
+  sp|Q8YRP3|   442 hdatqfkeeaisrfnlgilrlrerakaerlywaccqkildiirqhdyvPD 491  
+
+                CS E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEE
+                   kld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvt
+                    l++l++ +a +yy++ +v++s pd++++d+l+pi+p++rldeept++ +
+  sp|Q8YRP3|   492 ELEdLEKIMASIYYINLSVFQSAPDCWAIDQLFPIMPIHRLDEEPTQRGI 541  
+
+                CS EE-----TT--SEE.      EEEEE.. .------EEEES-----SGCC
+                   laGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtesl
+                   la+ tCds+++++rF + ++ +  L lH++ + + +++++f+ GAY+e++
+  sp|Q8YRP3|   542 LADLTCDSDGKIDRFidlrdvKSVLELHpFQPGEPYYMGMFLNGAYQEIM 591  
+
+                CS -B-TTT--.-EEEEE   
+                   asnFNgfprpaeVlv<-*
+                   ++ +N+f++++ V++   
+  sp|Q8YRP3|   592 GNLHNLFGDTNAVHI    606  
+
+sp|P23630|DCDA_BACSU: domain 1 of 1, from 301 to 409: score 131.7, E = 1.2e-34
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      t +++V + ke++g r+        +v+ +d+G++++ ++paly+a 
+  sp|P23630|   301    TTLYTVGSQKEVPGVRQ--------YVA-VDGGMNDN-IRPALYQAK 337  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   +  +  +r  e+ + +v++aG +C+sgD l   d+ LP   e+++GDll+
+  sp|P23630|   338 YEAAAANRIGEAHDKTVSIAGKCCESGDMLIW-DIDLP---EVKEGDLLA 383  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +f +GAY++s+a+n+N +prpa+V+v   
+  sp|P23630|   384 VFCTGAYGYSMANNYNRIPRPAVVFV    409  
+
+sp|Q9ZBH5|DCDA_STRCO: domain 1 of 1, from 286 to 403: score 130.8, E = 2.2e-34
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+++V + k +g  +         fv  +d+G++++ ++pa+y+ +
+  sp|Q9ZBH5|   286    VLAAEVRAQKPVGS-NY--------FVL-VDAGFNDL-MRPAMYGSN 321  
+
+                CS --EEECSS   -TTSSEEEEEEE-----TT--SEE.      EEEEE...
+                   hpilpvsr...ldeeptepvtlaGPtCdsgDvlarF......dvsLPlHl
+                   h++ ++++++ ++++ ++ ++laGP+C+sgDv+ + ++++ + v+ P   
+  sp|Q9ZBH5|   322 HRVSVLDAdgaPRASDARDTVLAGPLCESGDVFTQVeggdvePVPVP--- 368  
+
+                CS ------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   elevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   +++vGDl+vf+d+GAY+ s++s++N++p+ +eVlv   
+  sp|Q9ZBH5|   369 RTDVGDLVVFHDTGAYGASMSSTYNSRPLIPEVLV    403  
+
+sp|Q8K9C4|DCDA_BUCAP: domain 1 of 1, from 275 to 393: score 130.6, E = 2.4e-34
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+++V ++k++g+ +         fv  +d+G++++ ++p++y+ +
+  sp|Q8K9C4|   275    ILISQVRAIKKMGD-KN--------FVL-IDAGFNDL-MRPTMYGSY 310  
+
+                CS --EEECSS    -TTSSEEEEEEE-----TT--SEE.      EEEEE..
+                   hpilpvsr....ldeeptepvtlaGPtCdsgDvlarF......dvsLPlH
+                   h++ +v +++++ +e++t  +++ GP+C+sgD++ ++++++ ++++LP  
+  sp|Q8K9C4|   311 HHVSVVTKddrnIHETETIDTIIGGPLCESGDIFTQKeggnitTRKLP-- 358  
+
+                CS .------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                     l++GD+l+f+d+GAY+ s++sn+N +p+  e+l+   
+  sp|Q8K9C4|   359 -ILKIGDYLIFHDVGAYGASMSSNYNTRPLIQEILL    393  
+
+sp|Q0ACK8|SPEA_ALHEH: domain 1 of 1, from 345 to 558: score 130.5, E = 2.7e-34
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vi+  +++g+ +   + +  ++  ++  +  ++ +++++ + 
+  sp|Q0ACK8|   345    VLITDVIDGDRVPGgadllapadaaprvlhelwtvwtgldrrhplea 391  
+
+                CS                                                   
+                   ..................................................
+                    ++  ++  + ++   ++  + +++ + ++  +   +   ++ +++++++
+  sp|Q0ACK8|   392 yhdaahglaeaqelyahgvlnltdraraeriwqavchallqrldprrrph 441  
+
+                CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEE
+                   drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptep
+                   ++ ld+lne+la+  ++++++++s+pd +++d+++p+lp++rlde p+ +
+  sp|Q0ACK8|   442 RELLDeLNEKLADKLFCNFSLFQSMPDVWAIDQIFPVLPLQRLDEPPASR 491  
+
+                CS EEEE-----TT--SEE.      EEEEE.. .------EEEES-----SG
+                   vtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYte
+                   ++l + tCds++++  + ++++ + +LPl+++++ + +ll++f++GAY+e
+  sp|Q0ACK8|   492 AVLQDLTCDSDGCIRGYvdrdgvESTLPLPpWRPGEPYLLGIFLVGAYQE 541  
+
+                CS CC-B-TTT--.-EEEEE   
+                   slasnFNgfprpaeVlv<-*
+                   +l++++N+f+++  V v   
+  sp|Q0ACK8|   542 ILGDMHNLFGDTHSVNV    558  
+
+sp|Q949X7|DCDA1_ARATH: domain 1 of 1, from 351 to 459: score 129.2, E = 6.8e-34
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      ++v +V+gvk++g  +         f++ +d+++  + ++p lyda+
+  sp|Q949X7|   351    CFVNHVTGVKTNGT-KN--------FIV-IDGSMAEL-IRPSLYDAY 386  
+
+                CS --EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE...------EE
+                   hpilpvsr.ldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDll
+                   ++i++vs++++e++  +++++GP C+s D+l++ d++LP   ++  G  l
+  sp|Q949X7|   387 QHIELVSPpPAEAEVTKFDVVGPVCESADFLGK-DRELP---TPPQGAGL 432  
+
+                CS EES-----SGCC-B-TTT--.-EEEEE   
+                   vffdaGAYteslasnFNgfprpaeVlv<-*
+                   v++daGAY++s+as++N+  rp+e++v   
+  sp|Q949X7|   433 VVHDAGAYCMSMASTYNLKMRPPEYWV    459  
+
+sp|Q94A94|DCDA2_ARATH: domain 1 of 1, from 356 to 464: score 128.9, E = 8.1e-34
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      ++v +V+gvk++g  +         f++ +d+++  + ++p lyda+
+  sp|Q94A94|   356    CFVNHVTGVKTNGT-KN--------FIV-IDGSMAEL-IRPSLYDAY 391  
+
+                CS --EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE...------EE
+                   hpilpvsr.ldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDll
+                   ++i++vs++++e++  +++++GP C+s D+l++ d++LP   ++  G  l
+  sp|Q94A94|   392 QHIELVSPtPPEAEVTKFDVVGPVCESADFLGK-DRELP---TPPQGAGL 437  
+
+                CS EES-----SGCC-B-TTT--.-EEEEE   
+                   vffdaGAYteslasnFNgfprpaeVlv<-*
+                   v++daGAY++s+as++N+  rp+e++v   
+  sp|Q94A94|   438 VVHDAGAYCMSMASTYNLKMRPPEYWV    464  
+
+sp|P0A5M5|DCDA_MYCBO: domain 1 of 1, from 311 to 424: score 128.6, E = 9.9e-34
+                CS    EEEEEEEEEEE--S    S-E........EEEEES----S-.-CHHH
+                   *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal
+                      + +++V +vk+++ + + +r+        +v  +d+G++++ +++al
+  sp|P0A5M5|   311    ITLYEVGTVKDVDVsataHRR--------YVS-VDGGMSDN-IRTAL 347  
+
+                CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...-----
+                   ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG
+                   y+a++ +++vsr  ++p +p+ l+G +C+sgD++ r d + P   ++++G
+  sp|P0A5M5|   348 YGAQYDVRLVSRVSDAPPVPARLVGKHCESGDIIVR-DTWVPD--DIRPG 394  
+
+                CS -EEEES-----SGCC-B-TTT--.-EEEEE   
+                   DllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   Dl+++  +GAY++sl+s++N ++rpa+V+v   
+  sp|P0A5M5|   395 DLVAVAATGAYCYSLSSRYNMVGRPAVVAV    424  
+
+sp|P0A5M4|DCDA_MYCTU: domain 1 of 1, from 311 to 424: score 128.6, E = 9.9e-34
+                CS    EEEEEEEEEEE--S    S-E........EEEEES----S-.-CHHH
+                   *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal
+                      + +++V +vk+++ + + +r+        +v  +d+G++++ +++al
+  sp|P0A5M4|   311    ITLYEVGTVKDVDVsataHRR--------YVS-VDGGMSDN-IRTAL 347  
+
+                CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...-----
+                   ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG
+                   y+a++ +++vsr  ++p +p+ l+G +C+sgD++ r d + P   ++++G
+  sp|P0A5M4|   348 YGAQYDVRLVSRVSDAPPVPARLVGKHCESGDIIVR-DTWVPD--DIRPG 394  
+
+                CS -EEEES-----SGCC-B-TTT--.-EEEEE   
+                   DllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   Dl+++  +GAY++sl+s++N ++rpa+V+v   
+  sp|P0A5M4|   395 DLVAVAATGAYCYSLSSRYNMVGRPAVVAV    424  
+
+sp|P41931|DCOR_CAEEL: domain 1 of 1, from 286 to 407: score 127.8, E = 1.7e-33
+                CS    EEEEEEEEEEE--S            S-E........EEEEES----
+                   *->tLvtnVigvkergg............drkldlnerlafvyylddGvy
+                      +Lv+n+i+  e++ ++ ++++++  ++          ++y ++dGvy
+  sp|P41931|   286    SLVANIIHATEVPAskitkdpkdcadHGY--------MYY-INDGVY 323  
+
+                CS S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEEE
+                   gslpdpalydalhpilpvsr.ldeeptepvtlaGPtCdsgDvlarFdvsL
+                   gs ++++l+d+ hpi     + d+ + + +t++GPtCds+D + + + ++
+  sp|P41931|   324 GS-FNCILFDHAHPIGSPLFdTDRNEKFMSTIWGPTCDSLDLVED-KKLM 371  
+
+                CS E...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   PlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   P   +++vG++l+++d+GAYt ++a++FNgf  p   +v   
+  sp|P41931|   372 P---KMNVGEWLYYPDMGAYTLAAATTFNGFSKPVPMYV    407  
+
+sp|O50657|DCLO_SELRU: domain 1 of 1, from 266 to 371: score 127.7, E = 1.9e-33
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                       Lvt+Vig+k+rg+ +         +++ ld G+yg+ ++ ++yd++
+  sp|O50657|   266    NLVTSVIGTKTRGE-QP--------WYI-LDEGIYGC-FSGIMYDHW 301  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                    ++l +     ++  p+t+ GP+Cd+ Dvl+r d++ P   el++GD+++
+  sp|O50657|   302 TYPLHCF--GKGNKKPSTFGGPSCDGIDVLYR-DFMAP---ELKIGDKVL 345  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +  +G Yt++ a++FNgf +++++++   
+  sp|O50657|   346 VTEMGSYTSVSATRFNGFYLAPTIIF    371  
+
+sp|Q9KVL7|DCDA_VIBCH: domain 1 of 1, from 286 to 391: score 127.4, E = 2.4e-33
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +Lvt+V   k+ ++++         f++ +d+ ++++ ++paly+a+
+  sp|Q9KVL7|   286    VLVTKVEFLKH-TEHKN--------FAI-IDAAMNDL-IRPALYQAW 321  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   + i+p++ ++++++++++l+GP C+  D+l++ d+ L     l++GDll+
+  sp|Q9KVL7|   322 QDIIPLR-PRQGEAQTYDLVGPVCETSDFLGK-DRDLV----LQEGDLLA 365  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   + + GAY+++++sn+N +pr aeV v   
+  sp|Q9KVL7|   366 VRSSGAYGFTMSSNYNTRPRVAEVMV    391  
+
+sp|Q6ZG77|DCDA_ORYSJ: domain 1 of 1, from 356 to 463: score 126.9, E = 3.1e-33
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      ++v +V+gvk++g  +         f++ +d+++  + ++p ly+a+
+  sp|Q6ZG77|   356    CFVNRVTGVKSNGT-KN--------FIV-VDGSMAEL-IRPSLYGAY 391  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   ++i++vs+ ++++ ++++++GP C+s D+l++ d++LP   +++ G  lv
+  sp|Q6ZG77|   392 QHIELVSPSPDAEVATFDIVGPVCESADFLGK-DRELP---TPDKGAGLV 437  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   ++daGAY++s+as++N+  rp+e++v   
+  sp|Q6ZG77|   438 VHDAGAYCMSMASTYNLKLRPPEYWV    463  
+
+sp|Q55484|DCDA_SYNY3: domain 1 of 1, from 332 to 440: score 126.7, E = 3.6e-33
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      + +++V g+k+++ +r+        ++  +d+G++++ p+p+ y+ +
+  sp|Q55484|   332    VTAYRVGGRKVVPNIRT--------YIS-VDGGMSDN-PRPITYQSV 368  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   +++++ +r+++e te+vt+aG +C+sgD+l + dv+LP     e+GD++v
+  sp|Q55484|   369 YRVALANRMNDEITETVTVAGKHCESGDILVK-DVALP---AAEPGDIMV 414  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +  +GAY +s+asn+N ++rpa Vlv   
+  sp|Q55484|   415 VAATGAYNHSMASNYNRLGRPAAVLV    440  
+
+sp|Q9JXM2|DCDA_NEIMB: domain 1 of 1, from 276 to 381: score 125.6, E = 8.1e-33
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+t+V  vk  g+++         fv  +d+ ++++ ++palyda+
+  sp|Q9JXM2|   276    SLLTRVEFVKY-GEEKN--------FVM-VDAAMNDL-MRPALYDAY 311  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h+i+ v+   +  t ++ ++GP+C+ gD+l++ d++       e+GDll+
+  sp|Q9JXM2|   312 HHIEAVE-TKDIATLTANIVGPICETGDFLGK-DRTIA----CEEGDLLL 355  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   + +aGAY+ s+asn+N + r+aeVlv   
+  sp|Q9JXM2|   356 IRSAGAYGASMASNYNARNRAAEVLV    381  
+
+sp|Q8P448|SPEA_XANCP: domain 1 of 1, from 343 to 555: score 125.2, E = 1e-32
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV  v   ++++ ++ +++++   ++ ++ +++ + ++  +  
+  sp|Q8P448|   343    VLIANVSEVEQAPEgrvpdahddepaairhlreihdeldvrpavelf 389  
+
+                CS                                                  S
+                   .................................................d
+                   ++ ++ + ++ +    ++ + +++ + ++      ++ + + + ++++++
+  sp|Q8P448|   390 qeaqhfhaeglsayalgqidlthrariddlfyaiahgvrarlsfdekshR 439  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   ++ld+lnerl++ y+++++v+ s+pd +++d+++pi+p++rl+e+p ++ 
+  sp|Q8P448|   440 PVLDeLNERLVDKYFVNFSVFESIPDVWAIDQVFPIVPIERLNEAPQRRG 489  
+
+                CS EEE-----TT--SEE.      EEEEE.. .------EEEES-----SGC
+                   tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes
+                   ++a+ tCds++ +  + ++++ d sLPlH+l + + ++++ff++GAY+e+
+  sp|Q8P448|   490 IIADMTCDSDGMVKTYveneslDSSLPLHgLNPGESYRIGFFLVGAYQEI 539  
+
+                CS C-B-TTT--.-EEEEE   
+                   lasnFNgfprpaeVlv<-*
+                   l++ +N+f++++ V v   
+  sp|Q8P448|   540 LGDIHNLFGDTDAVEV    555  
+
+sp|Q54UF3|DCOR_DICDI: domain 1 of 1, from 328 to 450: score 125.0, E = 1.2e-32
+                CS    EEEEEEEEEEE--S             S-E........EEEEES---
+                   *->tLvtnVigvkergg.............drkldlnerlafvyylddGv
+                      tL+++Vi+++++  +++++++++++++ r+        + yyl dGv
+  sp|Q54UF3|   328    TLAVTVISKRSIKQednrqhprrtsnnMRQ--------YNYYLADGV 366  
+
+                CS -S-.-CHHHHS- ---EEECSS-TTSSEEEEEEE-----TT--SEE.EEE
+                   ygslpdpalyda.lhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvs
+                   ygs ++ + +d+    +l++  +      p+tl+GPtCds Dv+ + d +
+  sp|Q54UF3|   367 YGS-FNNTKFDYaKVEPLLLK-PSTKQPTPCTLFGPTCDSIDVVLK-DTQ 413  
+
+                CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                    P   el++GD+l+f d+GAYt++ +s FNgf +p+++++   
+  sp|Q54UF3|   414 IP---ELKIGDWLYFQDMGAYTIASSSSFNGFCPPPVYYY    450  
+
+sp|Q9Z661|DCDA_ZYMMO: domain 1 of 1, from 289 to 394: score 124.9, E = 1.3e-32
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+++Vi +ke     +        fv+ ld+ ++++  +p+lyda+
+  sp|Q9Z661|   289    VLLSKVIRIKESKT-AR--------FVI-LDAAMNDL-VRPTLYDAY 324  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h i  v   +++ t+ ++++GP C+ gD++ar ++s      ++++Dl++
+  sp|Q9Z661|   325 HEIKAVT--PSAQTYQADIVGPVCETGDIFAR-NRSIS---AVKADDLMA 368  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +++aGAY+ ++as +N++p+ aeV v   
+  sp|Q9Z661|   369 IMSAGAYGATMASAYNSRPLVAEVMV    394  
+
+sp|Q9JWA6|DCDA_NEIMA: domain 1 of 1, from 276 to 381: score 123.9, E = 2.6e-32
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                       L+t+V  vk  g+++         fv  +d+ ++++ ++palyda+
+  sp|Q9JWA6|   276    ALLTRVEFVKY-GEEKN--------FVM-VDAAMNDL-MRPALYDAY 311  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h+i+ v+ + +    ++ ++GP+C+ gD+l++ d++       e+GDll+
+  sp|Q9JWA6|   312 HHIEAVE-PKNIAPLTANIVGPICETGDFLGK-DRTIA----CEEGDLLL 355  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   + +aGAY+ s+asn+N + r+aeVlv   
+  sp|Q9JWA6|   356 IRSAGAYGASMASNYNARNRAAEVLV    381  
+
+sp|P40808|DCOR2_DROME: domain 1 of 1, from 276 to 390: score 123.4, E = 3.6e-32
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      tL+++V++++e++  ++   ++  +++yyl+dG++g +   ++y+  
+  sp|P40808|   276    TLICKVHAKREVRS-KD---GKLDTMMYYLNDGIFGAFAGMFYYPEE 318  
+
+                CS --EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE...------EE
+                   hpilpvsr.ldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDll
+                     ++++ ++ ++ p  +++++GP+Cd++D++   d +LP    l++GDll
+  sp|P40808|   319 VAPELYLDeAESLPKLKSVIWGPSCDAMDKIS--DLLLP---NLNPGDLL 363  
+
+                CS EES-----SGCC-B-TTT--.-EEEEE   
+                   vffdaGAYteslasnFNgfprpaeVlv<-*
+                   +f ++GAYt+  as FNgf  p + ++   
+  sp|P40808|   364 GFRNMGAYTMPIASPFNGFDVPETRFF    390  
+
+sp|Q8PFQ5|SPEA_XANAC: domain 1 of 1, from 343 to 555: score 122.9, E = 5.1e-32
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV  v   ++++ ++ +++++   ++ ++ +++ + ++  +  
+  sp|Q8PFQ5|   343    VLIANVSEVEQAPEgrvpdahddepaairhlreihdeldvrpavelf 389  
+
+                CS                                                  S
+                   .................................................d
+                   ++ ++ + ++ +    ++ + +++ + ++      ++ + + + ++++++
+  sp|Q8PFQ5|   390 qeaqhfhaeglsayalgqidlthrariddlfyaiahgvrarlsfdekshR 439  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   ++ld+lnerl++ y+++++v+ s+pd +++d+++pi+p++rl+e+p ++ 
+  sp|Q8PFQ5|   440 PVLDeLNERLVDKYFVNFSVFESIPDVWAIDQVFPIVPIERLNEAPQRRG 489  
+
+                CS EEE-----TT--SEE.      EEEEE.. .------EEEES-----SGC
+                   tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes
+                   ++a+ tCds++ +  + ++++ d sLPlH+l   + ++++ff++GAY+e+
+  sp|Q8PFQ5|   490 IIADMTCDSDGMVKTYveneslDSSLPLHrLNAGESYRIGFFLVGAYQEI 539  
+
+                CS C-B-TTT--.-EEEEE   
+                   lasnFNgfprpaeVlv<-*
+                   l++ +N+f++++ V v   
+  sp|Q8PFQ5|   540 LGDIHNLFGDTDAVEV    555  
+
+sp|P56129|DCDA_HELPY: domain 1 of 1, from 270 to 377: score 122.1, E = 9e-32
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                       L+t+V++ k+    ++        fv+ +d+G+++  ++p ly+a 
+  sp|P56129|   270    ELITQVLYEKKAQN-KR--------FVV-VDAGMNDF-LRPSLYHAK 305  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h i+++ +  + +  p++++GP C+s D++ + d +LP   ele+GD+lv
+  sp|P56129|   306 HAIRVITPSKGREISPCDVVGPVCESSDTFLK-DAHLP---ELEPGDKLV 351  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   ++ +GAY++s+as++N++p   e ++   
+  sp|P56129|   352 IEKVGAYGSSMASQYNSRPKLLELAL    377  
+
+sp|Q89AC6|DCDA_BUCBP: domain 1 of 1, from 275 to 393: score 121.5, E = 1.4e-31
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +Lv+++  +k+ + +r+        f+  +d G++++ ++pa+y+ +
+  sp|Q89AC6|   275    ILVSEIRVIKK-TNNRT--------FIL-VDSGFNDL-IRPAMYGSY 310  
+
+                CS --EEECSS    -TTSSEEEEEEE-----TT--S  EE.    EEEEE..
+                   hpilpvsr....ldeeptepvtlaGPtCdsgDvl..arF....dvsLPlH
+                   h+i +++r+++  + + t +++++GP+C+sgDv++++++++ +++ LP  
+  sp|Q89AC6|   311 HHISVIPRdgrcVNYDDTIEAVVCGPLCESGDVFtqNEYgdikTRILP-- 358  
+
+                CS .------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                     +++GD+lvf+d+GAY+ s++sn+N++p+ +e+l+   
+  sp|Q89AC6|   359 -NVQIGDFLVFHDTGAYGASMSSNYNSRPLIPEILF    393  
+
+sp|P78599|DCOR_CANAL: domain 1 of 1, from 324 to 468: score 121.5, E = 1.4e-31
+                CS    EEEEEEEEEEE--S      S-E........EEEEES----S-.-CH
+                   *->tLvtnVigvkergg......drkldlnerlafvyylddGvygslpdp
+                      tL+t++i++++++ +++++++++     ++a++y ++dGvyg+ +++
+  sp|P78599|   324    TLITHIIARRDLPTggnnnnNDM----TPSAMLY-INDGVYGN-LNC 364  
+
+                CS HHHS----EEECSS                       -TTSSEEEEEEE-
+                   alydalhpilpvsr.......................ldeeptepvtlaG
+                   +l+d++ p + v  ++++   +++  ++ + ++++++ + +  ++++++G
+  sp|P78599|   365 ILFDHQTPKVYVLTnenqlfykqemmrslsvnnnnnnNNKTDGFKFSIWG 414  
+
+                CS ----TT--SEE.EEEEE...------EEEES-----SGCC-B-TTT--  
+                   PtCdsgDvlarFdvsLPlHlelevGDllvffdaGAYteslasnFNgfp..
+                   PtCd++D++     +L +   ++vGD+l f+++GAYt+++++ FNg+ ++
+  sp|P78599|   415 PTCDGLDCVSS-LAKLSK--NVQVGDWLFFENVGAYTSCASTKFNGLSsg 461  
+
+                CS .-EEEEE   
+                   rpaeVlv<-*
+                    +++ +v   
+  sp|P78599|   462 ETKTLYV    468  
+
+sp|Q8DA54|SPEA_VIBVU: domain 1 of 1, from 355 to 571: score 121.1, E = 1.8e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nVig+ +   ++ ++++++ +   ++  ++  + +++++ +  
+  sp|Q8DA54|   355    VLISNVIGTETYKPetvtepeedfplllnnmwrswlnlhngtdaral 401  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++  + +++  ++  + +++   ++++ +   + ++  ++++
+  sp|Q8DA54|   402 ieiyndtqsdlaevhsqfatgvltlehrawaeqtslriyyelnrlmstkn 451  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ ld+l+erla+  ++++++++slpd++++d+++p+lp+s l+++ 
+  sp|Q8DA54|   452 rfhRPILDeLSERLADKFFVNFSLFQSLPDSWGIDQVFPVLPLSGLQNAA 501  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds++ ++ + ++++ + +LP++ +  ++ +l++ff++GA
+  sp|Q8DA54|   502 DRRAVMLDITCDSDGAIDAYvdgqgiESTLPVPaWNEDEPYLMGFFLVGA 551  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f+++  V+v   
+  sp|Q8DA54|   552 YQEILGDMHNLFGDTHSVVV    571  
+
+sp|Q7MK24|SPEA_VIBVY: domain 1 of 1, from 354 to 570: score 121.1, E = 1.8e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nVig+ +   ++ ++++++ +   ++  ++  + +++++ +  
+  sp|Q7MK24|   354    VLISNVIGTETYKPetvtepeedfplllnnmwrswlnlhngtdaral 400  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++  + +++  ++  + +++   ++++ +   + ++  ++++
+  sp|Q7MK24|   401 ieiyndtqsdlaevhsqfatgvltlehrawaeqtslriyyelnrlmstkn 450  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ ld+l+erla+  ++++++++slpd++++d+++p+lp+s l+++ 
+  sp|Q7MK24|   451 rfhRPILDeLSERLADKFFVNFSLFQSLPDSWGIDQVFPVLPLSGLQNAA 500  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds++ ++ + ++++ + +LP++ +  ++ +l++ff++GA
+  sp|Q7MK24|   501 DRRAVMLDITCDSDGAIDAYvdgqgiESTLPVPaWNEDEPYLMGFFLVGA 550  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f+++  V+v   
+  sp|Q7MK24|   551 YQEILGDMHNLFGDTHSVVV    570  
+
+sp|A4Y5Y9|SPEA_SHEPC: domain 1 of 1, from 350 to 566: score 121.1, E = 1.8e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ +++++  ++  ++ ++ +++ +++  
+  sp|A4Y5Y9|   350    VLITDVIGTEAYQPeniqppaeespqllhnmwhswseisgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  ++++
+  sp|A4Y5Y9|   397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|A4Y5Y9|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  e  +l++ff++GA
+  sp|A4Y5Y9|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|A4Y5Y9|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|A1RKK8|SPEA_SHESW: domain 1 of 1, from 350 to 566: score 121.1, E = 1.8e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ +++++  ++  ++ ++ +++ +++  
+  sp|A1RKK8|   350    VLITDVIGTEAYQPeniqppaeespqllhnmwhswseisgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  ++++
+  sp|A1RKK8|   397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|A1RKK8|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  e  +l++ff++GA
+  sp|A1RKK8|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|A1RKK8|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|P57513|DCDA_BUCAI: domain 1 of 1, from 275 to 393: score 121.0, E = 2e-31
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+++V ++k++g  +         fv  +d G++++ ++p++y+ +
+  sp|P57513|   275    ILISKVWATKKMGN-KN--------FVL-VDVGFNDL-MRPTMYGSY 310  
+
+                CS --EEECSS    -TTSSEEEEEEE-----TT--SEE.      EEEEE..
+                   hpilpvsr....ldeeptepvtlaGPtCdsgDvlarF......dvsLPlH
+                   h+i ++  ++++++e +t  +++aGP+C+sgD++ ++++++ ++++LP  
+  sp|P57513|   311 HHISVIYGddrkMNEKETIDTVVAGPLCESGDIFTQKeggtvqTRKLP-- 358  
+
+                CS .------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                    +++vGD+l+f+d+GAY+ +++sn+N +p+ +e+l+   
+  sp|P57513|   359 -TIKVGDYLIFHDTGAYGAAMSSNYNTRPLIPEILL    393  
+
+sp|Q9RTK2|DCDA_DEIRA: domain 1 of 1, from 253 to 357: score 120.9, E = 2.1e-31
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L+t+V+g+k+ +g r         f   +d+G+    ++p ly+a 
+  sp|Q9RTK2|   253    WLLTRVVGTKR-TG-RN--------FCL-VDAGMTEF-LRPMLYGAS 287  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   hp +p    d+  te++++aGP C+sgD +ar  v+LP   ++++G ll+
+  sp|Q9RTK2|   288 HPLYPMW--DALATEVWDVAGPACESGDLIAR-GVPLP---TPQRGHLLL 331  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +  aGAY+ s++s+++++prpaeVl+   
+  sp|Q9RTK2|   332 IGEAGAYGASMSSTYLSRPRPAEVLW    357  
+
+sp|B8CR70|SPEA_SHEPW: domain 1 of 1, from 350 to 566: score 120.8, E = 2.2e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+ +   ++  +++++ +   ++  ++ ++ +++ +++  
+  sp|B8CR70|   350    VLLTDVIGTESYKPetilppsedaplllqnmwqswtevsgkadqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++ +++ ++ ++    ++ +  ++   ++ + +  ++ +++ +++ 
+  sp|B8CR70|   397 ieifhdcqsdltevhslfalgqlsladrawaeqinlrvchelqgsmssky 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p++p+s ld +p
+  sp|B8CR70|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVMPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ ++ e  +l++ff++GA
+  sp|B8CR70|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWTQESPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|B8CR70|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|A3QDD8|SPEA_SHELP: domain 1 of 1, from 350 to 566: score 120.3, E = 3.2e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ + ++++ +++ ++  ++ ++ +++ +++  
+  sp|A3QDD8|   350    VLITDVIGTEAYKPedlqapdeeapqqlknmwdswgevsgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++ +++  + ++    ++ + +++   ++ + +   + ++  +++ 
+  sp|A3QDD8|   397 ieiyhdvqsdlaevhslfalgqmslsdrawaeqmnlrvcyelkgvmsgky 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++++d+lne+la+  ++++++++slpd +++d+++p++p+s ld  p
+  sp|A3QDD8|   447 rfhRPVIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVMPLSGLDKKP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  e  +l++ff++GA
+  sp|A3QDD8|   497 ERRAVMLDITCDSDGTVDQYvdgqgiETTLPVPaWSAESPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|A3QDD8|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|B8EAI2|SPEA_SHEB2: domain 1 of 1, from 350 to 566: score 119.9, E = 4.1e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ +++++  ++  ++ ++ +++ +++  
+  sp|B8EAI2|   350    VLITDVIGTEAYQPediqppaeespqllhnmwhswselsgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  + ++
+  sp|B8EAI2|   397 ieiyhdsqsdlqeahslfalgqlslaerawaeqanlrvchevqgllsakn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|B8EAI2|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  +  +l++ff++GA
+  sp|B8EAI2|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSADSPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|B8EAI2|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|A3D3G2|SPEA_SHEB5: domain 1 of 1, from 350 to 566: score 119.9, E = 4.1e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ +++++  ++  ++ ++ +++ +++  
+  sp|A3D3G2|   350    VLITDVIGTEAYQPediqppaeespqllhnmwhswselsgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  + ++
+  sp|A3D3G2|   397 ieiyhdsqsdlqeahslfalgqlslaerawaeqanlrvchevqgllsakn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|A3D3G2|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  +  +l++ff++GA
+  sp|A3D3G2|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSADSPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|A3D3G2|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|A6WM65|SPEA_SHEB8: domain 1 of 1, from 350 to 566: score 119.9, E = 4.1e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ +++++  ++  ++ ++ +++ +++  
+  sp|A6WM65|   350    VLITDVIGTEAYQPediqppaeespqllhnmwhswselsgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  + ++
+  sp|A6WM65|   397 ieiyhdsqsdlqeahslfalgqlslaerawaeqanlrvchevqgllsakn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|A6WM65|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  +  +l++ff++GA
+  sp|A6WM65|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSADSPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|A6WM65|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|A9KY70|SPEA_SHEB9: domain 1 of 1, from 350 to 566: score 119.9, E = 4.1e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ +++++  ++  ++ ++ +++ +++  
+  sp|A9KY70|   350    VLITDVIGTEAYQPediqppaeespqllhnmwhswselsgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  + ++
+  sp|A9KY70|   397 ieiyhdsqsdlqeahslfalgqlslaerawaeqanlrvchevqgllsakn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|A9KY70|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  +  +l++ff++GA
+  sp|A9KY70|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSADSPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|A9KY70|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|P27116|DCOR_LEIDO: domain 1 of 1, from 509 to 682: score 119.8, E = 4.5e-31
+                CS    EEEEEEEEEEE--S          S-E.. ......EEEEES----S
+                   *->tLvtnVigvkergg..........drkld.lnerlafvyylddGvyg
+                       L++nV + ++++ ++ + +++    +++ ++++++ +y ++dG+y+
+  sp|P27116|   509    ALLMNVFASRTLRLsdvevsrqafQSVVSmDEPEEYQYY-VNDGLYH 554  
+
+                CS -.-CHHHHS----EEECSS                               
+                   slpdpalydalhpilpvsr...............................
+                   s ++++l+d+ hp l++ +++++ ++ +++++     ++++++++ +++ 
+  sp|P27116|   555 S-FNCILFDHAHPTLLLLNdgdgadgvesgteaaavcseeegetslsgpl 603  
+
+                CS                -TTSSEEEEEEE-----TT--SEE.EEEEE...--
+                   ...............ldeeptepvtlaGPtCdsgDvlarFdvsLPlHlel
+                    +++   +  +++++ ++ p++ +t++GPtCds+D++ + ++++P   e+
+  sp|P27116|   604 andplfmsawdrrrsFARRPLRITTIFGPTCDSMDCILK-KQPFP---EM 649  
+
+                CS ----EEEES-----SGCC-B-TTT--.-EEEEE   
+                   evGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   + GD+l+++d+G Yt ++a  FNgf      +v   
+  sp|P27116|   650 KLGDWLLVPDMGSYTTAAAGFFNGFATRRLEWV    682  
+
+sp|Q083L6|SPEA_SHEFN: domain 1 of 1, from 350 to 566: score 119.2, E = 6.6e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ ++++++ ++  ++  ++  + +++ +++  
+  sp|Q083L6|   350    VLITDVIGTEAYQPeniqepsedapqllhnmwqswleisgrydqrai 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  ++++
+  sp|Q083L6|   397 ieiyhdsqsdiseahslfavgqlsladrawaeqanlrvchevkgllsnnn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++++d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|Q083L6|   447 ryhRPVIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  +  +l++ff +GA
+  sp|Q083L6|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSADSPYLIGFFMVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|Q083L6|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|Q8EFU5|SPEA_SHEON: domain 1 of 1, from 350 to 566: score 119.1, E = 7e-31
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++++++++  ++  ++ ++ +++ +++  
+  sp|Q8EFU5|   350    VLITDVIGTEAYQVediqppeeespqllhnmwqswtelsgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  ++++
+  sp|Q8EFU5|   397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|Q8EFU5|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  e  +l++ff +GA
+  sp|Q8EFU5|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLIGFFMVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|Q8EFU5|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|B1KRD4|SPEA_SHEWM: domain 1 of 1, from 350 to 566: score 118.6, E = 1e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ ++ ++  ++  ++ ++ +++ +++  
+  sp|B1KRD4|   350    VLITDVIGTEAYKPediqppaedapqllhnmwhswneisgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++ +++ ++ ++    ++ + +++   ++ + +  ++ ++  +++ 
+  sp|B1KRD4|   397 ieiyhdcqsdltevhslfalgqlsltdrawaeqvnlrvchelqgvmssky 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+e+la+  ++++++++slpd +++d+++pi+p+s ld +p
+  sp|B1KRD4|   447 rfhRPIIDeLTEKLADKFFVNFSLFQSLPDAWGIDQVFPIMPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  e  +l++ff++GA
+  sp|B1KRD4|   497 ERRAVMLDITCDSDGTIDQYvdgqgiETTLPVPaWSAESPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  ++   
+  sp|B1KRD4|   547 YQEILGDMHNLFGDTNSAVI    566  
+
+sp|Q7V3M9|SPEA_PROMP: domain 1 of 1, from 355 to 574: score 118.5, E = 1.1e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++n++g+++++ + + +++++++   ++  ++ ++ ++ ++++++
+  sp|Q7V3M9|   355    VLIFNILGTSHVSSqvkvsdqkkqsliitnlietlnqiknlrdkked 401  
+
+                CS                                                   
+                   ..................................................
+                    ++  +  ++ ++ +++     + +    +++   ++ +    ++  ++ 
+  sp|Q7V3M9|   402 lseiielwndakkfkedclvafrlgficleerayaeeltwacakeianql 451  
+
+                CS       S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T
+                   ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   ++++  +++l+++++ la +yy + +v+ s+pd++++++++pi+p++r+ 
+  sp|Q7V3M9|   452 enneiiHPDLSeITDTLASTYYANLSVFKSIPDTWAINQVFPIIPIHRHL 501  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   eep ++  +a+ tCds+++l++F ++++ + +L lH++e ++++l+++f 
+  sp|Q7V3M9|   502 EEPFCKGHFADLTCDSDGKLNNFidngkiKSLLNLHpPEKNNDYLIGIFM 551  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                   aGAY+e+l++ +N+f+ ++++++   
+  sp|Q7V3M9|   552 AGAYQEALGNFHNLFGNTNVIHI    574  
+
+sp|A8FWJ3|SPEA_SHESH: domain 1 of 1, from 350 to 566: score 117.5, E = 2.2e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     +  ++++++ ++  ++  ++ ++ +++ +++  
+  sp|A8FWJ3|   350    VLITDVIGTEAYKPevieepeteapqllhnmwqswsevsgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++ +++ ++ ++    ++ + +++   ++ + +  ++ ++  +++ 
+  sp|A8FWJ3|   397 ieiyhdcqsdlsevhslfalgqlslserawaeqvnlrvchelrdvmspky 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++pi+p+s ld +p
+  sp|A8FWJ3|   447 rfhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPIMPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + + P++++  e  +l++ff++GA
+  sp|A8FWJ3|   497 ERRAVMLDITCDSDGTIDQYvdgqgiETTIPVPtWSAESPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|A8FWJ3|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|Q0HJY2|SPEA_SHESM: domain 1 of 1, from 350 to 566: score 117.3, E = 2.5e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ +++++  ++  ++ ++ +++ +++  
+  sp|Q0HJY2|   350    VLITDVIGTEAYQVediqppaeespqllhnmwqswtelsgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  ++++
+  sp|Q0HJY2|   397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|Q0HJY2|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  e  +l++ff +GA
+  sp|Q0HJY2|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLMGFFMVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|Q0HJY2|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|Q0HW78|SPEA_SHESR: domain 1 of 1, from 350 to 566: score 117.3, E = 2.5e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ +++++  ++  ++ ++ +++ +++  
+  sp|Q0HW78|   350    VLITDVIGTEAYQVediqppaeespqllhnmwqswtelsgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  ++++
+  sp|Q0HW78|   397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|Q0HW78|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  e  +l++ff +GA
+  sp|Q0HW78|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLMGFFMVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|Q0HW78|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|Q63764|AZIN1_RAT: domain 1 of 1, from 282 to 406: score 117.2, E = 2.7e-30
+                CS    EEEEEEEEEEE--S             S-E........EEEEES---
+                   *->tLvtnVigvkergg.............drkldlnerlafvyylddGv
+                      tL++n+i++k+++ ++ +++ ++++++++         fvyy++dGv
+  sp|Q63764|   282    TLAVNIIAKKVVENdklssgvekngsdEPA--------FVYYMNDGV 320  
+
+                CS -S-.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EE
+                   ygslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdv
+                   ygs +++ l + l  ++ v+++ +++ep+++++l+GP+Cd +D + +  +
+  sp|Q63764|   321 YGS-FASKLSEDLNTVPEVHKkyKEDEPLFTSSLWGPSCDELDQIVE-SC 368  
+
+                CS EEE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   sLPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   +LP   el vGD+l+f ++GA   +  s F   +rpa++++   
+  sp|Q63764|   369 LLP---ELSVGDWLIFDNMGADSLHGPSAFSDTQRPAIYFM    406  
+
+sp|Q9ZME5|DCDA_HELPJ: domain 1 of 1, from 270 to 377: score 117.1, E = 2.9e-30
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                       L+t+V++ k+    ++        fv+ +d+G+++  ++p ly+a 
+  sp|Q9ZME5|   270    ELITQVLYEKKAQN-KR--------FVI-VDAGMNDF-LRPSLYHAK 305  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h i+++ +  + +  p++++GP C+s D++ + d  LP   ele+GD+l+
+  sp|Q9ZME5|   306 HAIRVITPCGGREISPCDVVGPVCESSDTFLK-DANLP---ELEPGDKLA 351  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   ++ +GAY++s+as++N++p   e ++   
+  sp|Q9ZME5|   352 IEKVGAYGSSMASQYNSRPKLLELAL    377  
+
+sp|A0KVN8|SPEA_SHESA: domain 1 of 1, from 350 to 566: score 117.0, E = 3.1e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ +++++  ++  ++ ++ +++ +++  
+  sp|A0KVN8|   350    VLITDVIGTEAYQVeeiqppaeespqllhnmwqswteisgradqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ ++    ++ +  ++   ++ + +  ++ ++  ++++
+  sp|A0KVN8|   397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld +p
+  sp|A0KVN8|   447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +  e  +l++ff +GA
+  sp|A0KVN8|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLMGFFMVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|A0KVN8|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|Q8ZHG8|SPEA_YERPE: domain 1 of 1, from 372 to 588: score 117.0, E = 3.1e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+nVigv +++  ++++++ + ++  ++  ++ ++ ++++++++ 
+  sp|Q8ZHG8|   372    VLVSNVIGVERNEFcepqppeagapraleslwdtwqemqepenrrsl 418  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ +++  ++  + +++   ++   +  ++ +++ ++++
+  sp|Q8ZHG8|   419 rewlhdsqmdlhdvhtqyahgmldlthrawaeqlylsicneiqkqldpsn 468  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld  p
+  sp|Q8ZHG8|   469 rahRPIIDeLQERMADKLYVNFSLFQSMPDAWGIDQLFPVLPLEGLDKPP 518  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds+++++++ ++++  ++ ++P  +++e+  ll+ff +G
+  sp|Q8ZHG8|   519 ERRAVLLDITCDSDGTIDHYidgdgvatTMPMPP-YDPENPPLLGFFMVG 567  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++a V v   
+  sp|Q8ZHG8|   568 AYQEILGNMHNLFGDTAAVDV    588  
+
+sp|B5XUB1|SPEA_KLEP3: domain 1 of 1, from 345 to 561: score 116.8, E = 3.5e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv ++++++ +++ ++  ++ ++  ++  + ++++++++ 
+  sp|B5XUB1|   345    VLVSNIIGVERNEYteatppaedaarplqsmwetwlemhetgnrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + ++++ + +++   ++   +  ++ +++ ++++
+  sp|B5XUB1|   392 rewlhdsqmdlhdihigyssgtfnlqerawaeqlylnmchevqkqldpsn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+ +y+++++++s+pd +++d+l+p++p++ l+ +p
+  sp|B5XUB1|   442 rahRPIIDeLQERMADKIYVNFSLFQSMPDAWGIDQLFPVMPLEGLNKSP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|B5XUB1|   492 ERRAVLLDITCDSDGAIDHYvdgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|B5XUB1|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|Q12LW6|SPEA_SHEDO: domain 1 of 1, from 350 to 566: score 116.8, E = 3.5e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ + + ++ ++  ++  ++ ++ +++++++  
+  sp|Q12LW6|   350    VLITDVIGTEAYMPeniqapaedapqllhnmwqswteisgrhdqrai 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++  + ++    ++ +  ++   ++++ +  ++ ++  ++++
+  sp|Q12LW6|   397 ieiyhdsqsdiaeahslfavgqlslmdrawaeqtnlrvchevkgllsnnn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++++d+lne+la+  ++++++++slpd +++d+++p+lp+  ld +p
+  sp|Q12LW6|   447 ryhRPVIDeLNEKLADKLFVNFSLFQSLPDAWGIDQVFPVLPLTCLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++ +++++ +l++ff +GA
+  sp|Q12LW6|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWDPANPYLIGFFMVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|Q12LW6|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|A2BNH3|SPEA_PROMS: domain 1 of 1, from 355 to 574: score 116.8, E = 3.6e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV+g+++++ + +  ++++++   ++  ++  + ++ ++++ +
+  sp|A2BNH3|   355    VLIFNVLGTSHVSSklqifdkknqqliisnlldtfyelkklknkkin 401  
+
+                CS                                                   
+                   ..................................................
+                    ++  +  ++ ++ +++     + +  +  ++   ++ +    ++ +++ 
+  sp|A2BNH3|   402 lsqiielwndakkfkedclvafrlgflslaerayaeeltwacakeisnnl 451  
+
+                CS       S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T
+                   ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   ++++ ++++l++++e la +yy + +++ s+pd++++++++pi+p++r+ 
+  sp|A2BNH3|   452 nndeinHPDLSeITETLASTYYANLSIFKSIPDSWAINQIFPIVPIHRHL 501  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   eep ++  +a+ tCds+++l++F ++++ + +L lH++e + ++l+++f 
+  sp|A2BNH3|   502 EEPFCKGNFADLTCDSDGKLNNFidngkiKSLLNLHkPEEDKDYLIGIFM 551  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                   +GAY+e+l++ +N+f+ +++V++   
+  sp|A2BNH3|   552 TGAYQEALGNLHNLFGSTNVVHI    574  
+
+sp|Q87JS8|SPEA_VIBPA: domain 1 of 1, from 354 to 570: score 116.7, E = 3.8e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nVig+ +   ++ ++ + + +   ++  ++ ++ +++++ +  
+  sp|Q87JS8|   354    VLISNVIGTETYQPeevhelgvdaplllqnmwrnwenlqdgtdaral 400  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++  + +++  ++  + +++   ++ + +   + +++ ++++
+  sp|Q87JS8|   401 ieiyndtqsdlaevhsqfatgvlnleqrawaeqlslriyfelsrkmstkn 450  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ ld+l+erla+  ++++++++slpd +++d+++p+lp+s l +++
+  sp|Q87JS8|   451 rfhRPILDeLSERLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLGDAE 500  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds++ ++++ ++++ + +LP++ +  +  +l++ff++GA
+  sp|Q87JS8|   501 ERRAVMLDITCDSDGAIDHYvdgqgiESTLPVPaWSKDKPYLMGFFLVGA 550  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f+++   +v   
+  sp|Q87JS8|   551 YQEILGDMHNLFGDTHSAVV    570  
+
+sp|A8H5G3|SPEA_SHEPA: domain 1 of 1, from 350 to 566: score 116.7, E = 3.8e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ ++ ++  ++  ++  + +++ +++  
+  sp|A8H5G3|   350    VLLTDVIGTEAYKPediqppaedapqllhnmwqswievsgkadqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++ +++ ++ ++    ++ +  ++   ++ + +   + +++ + + 
+  sp|A8H5G3|   397 ieiyhdcqsdltevhslfavgqlglaerawaeqvnlrvcyelqgsmsaky 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++++d+lne+la+  ++++++++slpd +++d+++p++p+s ld +p
+  sp|A8H5G3|   447 rfhRPVIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVMPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   + +++  + tCds+++++++ ++++ + +LP++ ++ e  +l++ff++GA
+  sp|A8H5G3|   497 ESRAVMLDITCDSDGTVDQYvegqgiETTLPVPaWTQESPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|A8H5G3|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|A3PA96|SPEA_PROM0: domain 1 of 1, from 355 to 574: score 116.6, E = 4.1e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV+g+++++ + +  ++++++   ++  ++  + ++ ++++ +
+  sp|A3PA96|   355    VLIFNVLGTSHVSSklqifdkknqqliisnlletyyelkklknkkin 401  
+
+                CS                                                   
+                   ..................................................
+                    ++  +  ++ ++ +++     + +  +  ++   ++      ++ +++ 
+  sp|A3PA96|   402 lsqiielwndakkfkedclvafrlgflslaerayaeelawacakeisnnl 451  
+
+                CS       S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T
+                   ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   ++++ ++++l++++e la +yy + +++ s+pd++++++++pi+p++r+ 
+  sp|A3PA96|   452 nndeinHPDLSeITETLASTYYANLSIFKSIPDSWAINQIFPIVPIHRHL 501  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   eep ++  +a+ tCds+++l++F ++++ + +L lH++e + ++l+++f 
+  sp|A3PA96|   502 EEPFCKGNFADLTCDSDGKLNNFiddgkiKSLLNLHePEKDKDYLIGIFM 551  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                   +GAY+e+l++ +N+f+ +++V++   
+  sp|A3PA96|   552 TGAYQEALGNLHNLFGSTNVVHI    574  
+
+sp|P41023|DCDA_BACMT: domain 1 of 1, from 301 to 409: score 116.4, E = 4.6e-30
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      t ++++ ++k+++  r         +v+ +d+G++++ ++paly+a 
+  sp|P41023|   301    TTLYQIGSRKDVPNVRH--------YVA-VDGGMSDN-IRPALYNAK 337  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   +  ++ +++ +  +e+v++aG +C+sgD l   d +LP   + + +D+l+
+  sp|P41023|   338 YEAVLANKPLAKADETVSIAGKCCESGDMLIW-DLPLP---KADSDDILA 383  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +f +GAY++s+a+n+N +prpa+V+v   
+  sp|P41023|   384 VFCTGAYGYSMANNYNRIPRPAVVFV    409  
+
+sp|B0TQX3|SPEA_SHEHH: domain 1 of 1, from 350 to 566: score 116.4, E = 4.8e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+     ++ +++ ++ ++  ++  ++  + +++ +++  
+  sp|B0TQX3|   350    VLLTDVIGTEAYKPediqppaedapqllhnmwqswvevsgkadqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++ +++ ++ ++    ++ +  ++   ++ + +   + +++ + + 
+  sp|B0TQX3|   397 ieifhdcqsdltevhslfavgqvglaerawaeqvnlrvcyelqgsmsaky 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p++p+s ld +p
+  sp|B0TQX3|   447 rfhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVMPLSGLDKAP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   + +++  + tCds+++++++ ++++ + +LP++ ++ e  +l++ff++GA
+  sp|B0TQX3|   497 ESRAVMLDITCDSDGTIDQYvdgqgiETTLPVPaWTQESPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f++++  +v   
+  sp|B0TQX3|   547 YQEILGDMHNLFGDTNSAVV    566  
+
+sp|Q31DD8|SPEA_PROM9: domain 1 of 1, from 355 to 574: score 116.4, E = 4.8e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV+g+++++ + +  ++++++   ++  ++  + ++ ++++ +
+  sp|Q31DD8|   355    VLIFNVLGTSHVSSklqifdkknqqliisnlletfyelkklknkkin 401  
+
+                CS                                                   
+                   ..................................................
+                    ++  +  ++ ++ +++     + +  +  ++   ++ +    ++ +++ 
+  sp|Q31DD8|   402 lsqiielwndakkfkedclvafrlgflslaerayaeeltwacakeisknl 451  
+
+                CS       S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T
+                   ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   +++  ++++l++++e la +yy + +++ s+pd++++++++pi+p++r+ 
+  sp|Q31DD8|   452 nndainHPDLSeITETLASTYYANLSIFKSIPDSWAINQIFPIVPIHRHL 501  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   eep ++  +a+ tCds+++l++F ++++ + +L lH++e + ++l+++f 
+  sp|Q31DD8|   502 EEPFCKGNFADLTCDSDGKLNNFiddgkiKSLLNLHkPEEDKDYLIGIFM 551  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                   +GAY+e+l++ +N+f+ +++V++   
+  sp|Q31DD8|   552 TGAYQEALGNLHNLFGSTNVVHI    574  
+
+sp|Q96412|SPE1_DIACA: domain 1 of 1, from 491 to 605: score 116.3, E = 4.9e-30
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                       Lv++ +gv +     +         +y ++ +v++s+pd +++++l
+  sp|Q96412|   491    ELVSKALGVAD----GV--------CTYNVNLSVFTSIPDFWGIGQL 525  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.   EEEEE.. .-----
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarF...dvsLPlH.lelevG
+                   +pi+p++rld++p ++ +l + tCds++++++F +++ sLPlH+l   +G
+  sp|Q96412|   526 FPIMPIHRLDQQPKARGILSDLTCDSDGKIDKFigdESSLPLHeLSGGEG 575  
+
+                CS -EEEES-----SGCC-B-TTT--.-EEEEE   
+                   DllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   ++l++f+ GAY e+l+  +N+f+ p++V v   
+  sp|Q96412|   576 YYLGMFLGGAYEEALGGVHNLFGGPSVVRV    605  
+
+sp|A1S712|SPEA_SHEAM: domain 1 of 1, from 350 to 566: score 116.1, E = 5.9e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+t Vig+   + ++ + ++++ ++  ++  ++ ++ +++ +++  
+  sp|A1S712|   350    VLITDVIGTEAYSPedipapeeeapqllhnmwrswneissrldqral 396  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++  + ++    ++ + +++   ++ +    ++ ++  + ++
+  sp|A1S712|   397 ieifhdtqsdlaeaqslfalgqlsledrawaeqcnlavchelqglmnarn 446  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+lne+la+  ++++++++slpd +++d+++p+lp+s ld  p
+  sp|A1S712|   447 ryqRPIIDeLNEKLADRFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKVP 496  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds+++++++ ++++ + +LP++++  e  +l++ff++GA
+  sp|A1S712|   497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPnWSAEDPYLIGFFLVGA 546  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++ +N+f++++  +v   
+  sp|A1S712|   547 YQEILGDLHNLFGDTNSAVV    566  
+
+sp|A8G243|SPEA_PROM2: domain 1 of 1, from 355 to 574: score 115.5, E = 8.8e-30
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV+g+++++ + +  ++++++   ++  ++  + ++ ++++ +
+  sp|A8G243|   355    VLIFNVLGTSHVSSklkiyddkkqsliisnlietfyelkklknkkin 401  
+
+                CS                                                   
+                   ..................................................
+                    ++  +  ++ ++ +++     + +  +  ++   ++ +    ++  ++ 
+  sp|A8G243|   402 lsqiielwndakkfkedclvafrlgflslaerayaeeltwacakeiannl 451  
+
+                CS       S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T
+                   ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   ++++ ++++l +++e la +yy + +++ s+pd++++++++pi+p++r+ 
+  sp|A8G243|   452 nndeinHPDLFeITETLASTYYANLSIFKSIPDCWAINQIFPIMPIHRHL 501  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   eep ++  +a+ tCds+++l+ F ++++ + +L lH++e + ++l+++f 
+  sp|A8G243|   502 EEPFCKGNFADLTCDSDGKLNSFinngkiKSLLNLHePEQDKDYLIGIFM 551  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                   +GAY+e+l++ +N+f+ +++V++   
+  sp|A8G243|   552 TGAYQEALGNLHNLFGNTNVVHI    574  
+
+sp|Q7VEG4|SPEA_PROMA: domain 1 of 1, from 355 to 574: score 115.2, E = 1.1e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nV+g+++++ +   +++++  + ++ +++    ++  ++++ +
+  sp|Q7VEG4|   355    ILIFNVLGTSSVPTqiaietsneclsvknlretlmilhqiceekkid 401  
+
+                CS                                                   
+                   ..................................................
+                    ++ ++  ++  + +++  +  + +  + +++ + ++ +    ++   + 
+  sp|Q7VEG4|   402 vsklqeawndalkfkedalnafrlgfidlterataeqltwacakqiaahl 451  
+
+                CS       S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T
+                   ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   +++ + ++ l+ +n++l+ +yy +++++ s pd++++++l+p lp++rl+
+  sp|Q7VEG4|   452 pndlkiPKELLaINKGLTETYYANISIFRSAPDTWAIQQLFPLLPIHRLQ 501  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   e p++   +a+ tCds+++larF ++++++++L lH+++ ++++++++f+
+  sp|Q7VEG4|   502 EKPDQLGHFADLTCDSDGKLARFinngqeKFLLELHtVKANENYWIGMFL 551  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                    GAY+e++++ +N+f+ ++ +++   
+  sp|Q7VEG4|   552 GGAYQEVMGNLHNLFGSTNAIHI    574  
+
+sp|C4K6F4|SPEA_HAMD5: domain 1 of 1, from 346 to 562: score 114.9, E = 1.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nVigv +++ ++++ +++++++  ++   + ++ ++++++++ 
+  sp|C4K6F4|   346    VLISNVIGVERNEFsppqapekhspraleslwytwqemqkpdhrhsl 392  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++++ ++ +++ +++  + +++   ++   +  ++ +++ ++++
+  sp|C4K6F4|   393 reclhdsqrdlqdvhtqythgildlkqrawaeqlylqichhiqkeldpsd 442  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + ++ ++d+l+er+a+  y+++++++slpd +++++l+pilp++ l++ p
+  sp|C4K6F4|   443 rahRTMIDnLQERMADKLYVNFSLFQSLPDAWGINQLFPILPLEGLNQRP 492  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++l + tCds++++ ++ ++++   +LP ++++ e+  +l+ff +GA
+  sp|C4K6F4|   493 ERRAVLLDITCDSDGIIEHYvdgdgvANTLPIPpYDAENPPILGFFMVGA 542  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f+++a+V v   
+  sp|C4K6F4|   543 YQEILGNMHNLFGDTAVVEV    562  
+
+sp|B5F5L1|SPEA_SALA4: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv ++++++++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|B5F5L1|   345    VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + +++  + +++   ++   +  ++ +++ ++++
+  sp|B5F5L1|   392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|B5F5L1|   442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|B5F5L1|   492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|B5F5L1|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|Q57K30|SPEA_SALCH: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv ++++++++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|Q57K30|   345    VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + +++  + +++   ++   +  ++ +++ ++++
+  sp|Q57K30|   392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|Q57K30|   442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|Q57K30|   492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|Q57K30|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|B5FUJ7|SPEA_SALDC: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv ++++++++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|B5FUJ7|   345    VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + +++  + +++   ++   +  ++ +++ ++++
+  sp|B5FUJ7|   392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|B5FUJ7|   442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|B5FUJ7|   492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|B5FUJ7|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|B4THH1|SPEA_SALHS: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv ++++++++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|B4THH1|   345    VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + +++  + +++   ++   +  ++ +++ ++++
+  sp|B4THH1|   392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|B4THH1|   442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|B4THH1|   492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|B4THH1|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|A9N4N1|SPEA_SALPB: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv ++++++++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|A9N4N1|   345    VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + +++  + +++   ++   +  ++ +++ ++++
+  sp|A9N4N1|   392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|A9N4N1|   442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|A9N4N1|   492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|A9N4N1|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|B4TV55|SPEA_SALSV: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv ++++++++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|B4TV55|   345    VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + +++  + +++   ++   +  ++ +++ ++++
+  sp|B4TV55|   392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|B4TV55|   442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|B4TV55|   492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|B4TV55|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|P60659|SPEA_SALTY: domain 1 of 1, from 371 to 587: score 114.9, E = 1.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv ++++++++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|P60659|   371    VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 417  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + +++  + +++   ++   +  ++ +++ ++++
+  sp|P60659|   418 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 467  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|P60659|   468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|P60659|   518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|P60659|   567 AYQEILGNMHNLFGDTEAVDV    587  
+
+sp|P60658|SPEA_SALTI: domain 1 of 1, from 371 to 587: score 114.9, E = 1.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv ++++++++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|P60658|   371    VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 417  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + +++  + +++   ++   +  ++ +++ ++++
+  sp|P60658|   418 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 467  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|P60658|   468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|P60658|   518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|P60658|   567 AYQEILGNMHNLFGDTEAVDV    587  
+
+sp|B4T5J3|SPEA_SALNS: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv ++++++++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|B4T5J3|   345    VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + +++  + +++   ++   +  ++ +++ ++++
+  sp|B4T5J3|   392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|B4T5J3|   442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|B4T5J3|   492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|B4T5J3|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|P44316|DCDA_HAEIN: domain 1 of 1, from 285 to 391: score 114.9, E = 1.4e-29
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +Lv++V + k+++  r         f++ +d G+++  ++paly+a+
+  sp|P44316|   285    ILVAKVQYLKSNES-RN--------FAI-TDTGMNDM-IRPALYEAY 320  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                     i+ ++r  e + + ++++GP C+  D+l++ +++L     +++GD+++
+  sp|P44316|   321 MNIVEIDRTLEREKAIYDVVGPVCETSDFLGK-QRELS----IAEGDYIA 365  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                     +aGAY+ s++sn+N++ r+aeVlv   
+  sp|P44316|   366 QCSAGAYGASMSSNYNSRARTAEVLV    391  
+
+sp|P22220|SPE1_AVESA: domain 1 of 1, from 355 to 532: score 114.8, E = 1.4e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +++ + ++    + +++++ ++++ +++ ++ +++ ++++ + +++ 
+  sp|P22220|   355    MIILEALSAIPEPKddedeatteqlhgrirdlssklqptglsmssha 401  
+
+                CS                          S-E........EEEEES----S-.-
+                   .........................drkldlnerlafvyylddGvygslp
+                    + ++++ +  + +++ +++ +++ +          + y+++ +v+ ++p
+  sp|P22220|   402 vhikkhgiemyklgkklsksvttdaHTI--------YNYHMNLSVFSLMP 443  
+
+                CS CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE.   EEEEE.
+                   dpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF...dvsLPl
+                   d +++++l+p +pvsrlde pt+++tl++ tCds++++++F +++ ++Pl
+  sp|P22220|   444 DYWGIQHLFPMMPVSRLDEKPTHKATLVDVTCDSDGKVDKFirdTETMPL 493  
+
+                CS .  .------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   H..lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   H+ ++   G++++++++GAY+e+l++ +N+f+ p+ V v   
+  sp|P22220|   494 HplDPKLGGYYVAVLLTGAYQEALSNKHNLFGGPSLVRV    532  
+
+sp|Q9X5M1|DCDA_MYCS2: domain 1 of 1, from 336 to 449: score 114.7, E = 1.5e-29
+                CS    EEEEEEEEEEE--S    S-E........EEEEES----S-.-CHHH
+                   *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal
+                      + +++V +vk++  +++ +r+        +v  +d+G++++ +++ l
+  sp|Q9X5M1|   336    ITLYEVGTVKDVAVsqtaHRR--------YVS-VDGGMSDN-IRTSL 372  
+
+                CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...-----
+                   ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG
+                   y a++  ++vsr  ++p + + ++G +C+sgD++ r d +     ++++G
+  sp|Q9X5M1|   373 YAAQYDARLVSRVSDAPPALARIVGKHCESGDIVVR-DTWVSD--DIAPG 419  
+
+                CS -EEEES-----SGCC-B-TTT--.-EEEEE   
+                   DllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   Dl+++  +GAY++s++s++N++ rpa+V+v   
+  sp|Q9X5M1|   420 DLIGVAATGAYCYSMSSRYNLLCRPAVVAV    449  
+
+sp|Q9KLD1|SPEA_VIBCH: domain 1 of 1, from 354 to 570: score 114.4, E = 1.9e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+tnVig+   + ++ + ++ + +   ++  ++ ++ +++++++  
+  sp|Q9KLD1|   354    VLITNVIGTEAYSPeeipapgadapmllknmwrgfeevqhgtddral 400  
+
+                CS                                                   
+                   ..................................................
+                    +  ++++++ ++ +++  ++  + +++   ++ + +  ++ +++ ++++
+  sp|Q9KLD1|   401 ieiyndtqsdlseahsqfatgvlnlehrawaeqlslriyhelrqkmsnkn 450  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ ld+l+erla+  ++++++++slpd +++d+++p+lp+s l+e +
+  sp|Q9KLD1|   451 rfhRPILDeLQERLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLEEMN 500  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++  + tCds++ + ++ ++++ + +LP++ ++ +  +l++ff++GA
+  sp|Q9KLD1|   501 DRRAVMLDITCDSDGAVEQYvegqgiESTLPVPaWTSDKPYLMGFFLVGA 550  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f+++   +v   
+  sp|Q9KLD1|   551 YQEILGDMHNLFGDTHSAVV    570  
+
+sp|Q8XCX9|SPEA_ECO57: domain 1 of 1, from 371 to 587: score 114.2, E = 2.2e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv +++++ ++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|Q8XCX9|   371    VLVSNIIGVERNEYtvptapaedapralqsmwetwqemhepgtrrsl 417  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + ++++ + +++   ++   +  ++ +++ ++++
+  sp|Q8XCX9|   418 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 467  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|Q8XCX9|   468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|Q8XCX9|   518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|Q8XCX9|   567 AYQEILGNMHNLFGDTEAVDV    587  
+
+sp|B5YQD6|SPEA_ECO5E: domain 1 of 1, from 345 to 561: score 114.2, E = 2.2e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv +++++ ++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|B5YQD6|   345    VLVSNIIGVERNEYtvptapaedapralqsmwetwqemhepgtrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + ++++ + +++   ++   +  ++ +++ ++++
+  sp|B5YQD6|   392 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|B5YQD6|   442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|B5YQD6|   492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|B5YQD6|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|Q8FE34|SPEA_ECOL6: domain 1 of 1, from 371 to 587: score 114.2, E = 2.2e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv +++++ ++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|Q8FE34|   371    VLVSNIIGVERNEYtvptapaedapralqsmwetwqemhepgtrrsl 417  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + ++++ + +++   ++   +  ++ +++ ++++
+  sp|Q8FE34|   418 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 467  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|Q8FE34|   468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|Q8FE34|   518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|Q8FE34|   567 AYQEILGNMHNLFGDTEAVDV    587  
+
+sp|B1LDE8|SPEA_ECOSM: domain 1 of 1, from 345 to 561: score 114.2, E = 2.2e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv +++++ ++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|B1LDE8|   345    VLVSNIIGVERNEYtvptapaedapralqsmwetwqemhepgtrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + ++++ + +++   ++   +  ++ +++ ++++
+  sp|B1LDE8|   392 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|B1LDE8|   442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|B1LDE8|   492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|B1LDE8|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|Q0T0V3|SPEA_SHIF8: domain 1 of 1, from 345 to 561: score 113.9, E = 2.6e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv +++++ ++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|Q0T0V3|   345    VLVSNIIGVERNEYtvptapvedapralqsmwetwqemhepgtrrsl 391  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + ++++ + +++   ++   +  ++ +++ ++++
+  sp|Q0T0V3|   392 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 441  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|Q0T0V3|   442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|Q0T0V3|   492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|Q0T0V3|   541 AYQEILGNMHNLFGDTEAVDV    561  
+
+sp|Q83Q93|SPEA_SHIFL: domain 1 of 1, from 371 to 587: score 113.9, E = 2.6e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv +++++ ++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|Q83Q93|   371    VLVSNIIGVERNEYtvptapvedapralqsmwetwqemhepgtrrsl 417  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + ++++ + +++   ++   +  ++ +++ ++++
+  sp|Q83Q93|   418 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 467  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|Q83Q93|   468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|Q83Q93|   518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|Q83Q93|   567 AYQEILGNMHNLFGDTEAVDV    587  
+
+sp|B9M6H6|SPEA_GEOSF: domain 1 of 1, from 346 to 561: score 113.6, E = 3.3e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +LvtnV+ + + + +++ +++    ++  ++ ++  + +++ ++ + 
+  sp|B9M6H6|   346    VLVTNVLNTNTQRLtpdfeeelaaaeklaptvkklvdihksidrysl 392  
+
+                CS                                                   
+                   ..................................................
+                   +++ +++ +  ++  +  + +  + +++   +   ++  ++ ++  ++ +
+  sp|B9M6H6|   393 redyhdtvqliqeavslfnlgyltlneramaewlygkiikkinsivekik 442  
+
+                CS            S-E........EEEEES----S-.-CHHHHS----EEEC
+                   ...........drkldlnerlafvyylddGvygslpdpalydalhpilpv
+                   + +++ ++ + + +         +y+ ++++++s+pd++++d+l+pi+p+
+  sp|B9M6H6|   443 pipeelqnfqlALR--------QTYFANFSLFQSIPDSWAIDQLFPIVPI 484  
+
+                CS SS-TTSSEEEEEEE-----TT--SEE.      EEEEE.. .------EE
+                   srldeeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDll
+                   +rl++ p++ +++a+ tCds++ +  F ++++++  LPlH+ + ++++++
+  sp|B9M6H6|   485 QRLNQKPDVIASIADITCDSDGEITSFvgengrTKFLPLHkIRKDEDYYI 534  
+
+                CS EES-----SGCC-B-TTT--.-EEEEE   
+                   vffdaGAYteslasnFNgfprpaeVlv<-*
+                   +ff+ GAY+e+l++++N+f++++ V++   
+  sp|B9M6H6|   535 GFFLIGAYQEILGDMHNLFGDTNAVHI    561  
+
+sp|P21170|SPEA_ECOLI: domain 1 of 1, from 371 to 587: score 113.6, E = 3.4e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+n+igv +++++ ++ + ++ ++  ++  ++ ++ ++++++++ 
+  sp|P21170|   371    VLVSNIIGVERNEYtvptapaedapralqsmwetwqemhepgtrrsl 417  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ + + +++  + +++   ++   +  ++ +++ ++++
+  sp|P21170|   418 rewlhdsqmdlhdihigyssgifslqerawaeqlylsmchevqkqldpqn 467  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++s+pd +++d+l+p+lp++ ld+ p
+  sp|P21170|   468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds++ ++++ ++++  ++ ++P+ +++e+   l+ff +G
+  sp|P21170|   518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|P21170|   567 AYQEILGNMHNLFGDTEAVDV    587  
+
+sp|B5EIW4|SPEA_GEOBB: domain 1 of 1, from 425 to 561: score 112.8, E = 5.7e-29
+                CS    EEEEEEEEEEE--S               S-E........EEEEES-
+                   *->tLvtnVigvkergg...............drkldlnerlafvyyldd
+                      ++ +++i +     ++ ++ +++ ++ +   +         +y+ ++
+  sp|B5EIW4|   425    WICSKIIRKINSIVekmkpipdelqnfqlSLR--------QTYFANF 463  
+
+                CS ---S-.-CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE.  
+                   GvygslpdpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF..
+                   ++++s+pd++++d+l+pi+p++rlde p++ +++a+ tCds++ +  F +
+  sp|B5EIW4|   464 SLFQSIPDSWAIDQLFPIVPIQRLDEKPDVLTSIADITCDSDGEITSFvg 513  
+
+                CS     EEEEE.. .------EEEES-----SGCC-B-TTT--.-EEEEE  
+                   ....dvsLPlH.lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-
+                   +++++ +LPlH+ ++++ ++++ff+ GAY+e+l++++N+f++++ V++  
+  sp|B5EIW4|   514 engrTKALPLHkIKVDEQYYIGFFLIGAYQEILGDMHNLFGDTNAVHI   561  
+
+                CS  
+                   *
+                    
+  sp|B5EIW4|     -   -    
+
+sp|C6E3V4|SPEA_GEOSM: domain 1 of 1, from 425 to 561: score 112.8, E = 5.7e-29
+                CS    EEEEEEEEEEE--S               S-E........EEEEES-
+                   *->tLvtnVigvkergg...............drkldlnerlafvyyldd
+                      ++ +++i +     ++ ++ +++ ++ +   +         +y+ ++
+  sp|C6E3V4|   425    WICSKIIRKINSIVekmkpipdelqnfqlSLR--------QTYFANF 463  
+
+                CS ---S-.-CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE.  
+                   GvygslpdpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF..
+                   ++++s+pd++++d+l+pi+p++rlde p++ +++a+ tCds++ +  F +
+  sp|C6E3V4|   464 SLFQSIPDSWAIDQLFPIVPIQRLDEKPDVLTSIADITCDSDGEITSFvg 513  
+
+                CS     EEEEE.. .------EEEES-----SGCC-B-TTT--.-EEEEE  
+                   ....dvsLPlH.lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-
+                   +++++ +LPlH+ ++++ ++++ff+ GAY+e+l++++N+f++++ V++  
+  sp|C6E3V4|   514 engrTKALPLHkIKVDEQYYIGFFLIGAYQEILGDMHNLFGDTNAVHI   561  
+
+                CS  
+                   *
+                    
+  sp|C6E3V4|     -   -    
+
+sp|A1AS90|SPEA_PELPD: domain 1 of 1, from 425 to 561: score 112.3, E = 8.2e-29
+                CS    EEEEEEEEEEE--S               S-E........EEEEES-
+                   *->tLvtnVigvkergg...............drkldlnerlafvyyldd
+                      +L t++i +  +  ++ ++ +++ ++ +   +         +y+ ++
+  sp|A1AS90|   425    WLYTRIIKKINNLVekmkpvpeelqnfklSMR--------QTYFANF 463  
+
+                CS ---S-.-CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE.  
+                   GvygslpdpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF..
+                   ++++s+pd++++d+l+pi+p++rl e p++ +++a+ tCds++ +  F +
+  sp|A1AS90|   464 SLFQSIPDSWAIDQLFPIMPIQRLGEKPDVIASIADITCDSDGEITSFvg 513  
+
+                CS     EEEEE.. .------EEEES-----SGCC-B-TTT--.-EEEEE  
+                   ....dvsLPlH.lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-
+                   +++++ +LPlH+ + ++ ++++ff+ GAY+e+l++ +N+f++++ V++  
+  sp|A1AS90|   514 engrTKYLPLHkIRKNEEYYIGFFLIGAYQEILGDLHNLFGDTNAVHI   561  
+
+                CS  
+                   *
+                    
+  sp|A1AS90|     -   -    
+
+sp|A2BU00|SPEA_PROM5: domain 1 of 1, from 355 to 574: score 112.2, E = 8.6e-29
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++ V+g+++++ + + +++++++   ++  +++++ ++ ++++++
+  sp|A2BU00|   355    VLIFDVLGTSHVSSqikvshqkktsliiknlidthnqlknlrnkked 401  
+
+                CS                                                   
+                   ..................................................
+                    ++  +  ++ ++ +++     + +  + +++   ++ +    ++ +++ 
+  sp|A2BU00|   402 lseiielwndakkfkkdclvafrlgfislgerayaeeltwacakeisshl 451  
+
+                CS       S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T
+                   ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   ++++  +++l++++e l  +yy + +v+ s+pd++++++++pi+p++r+ 
+  sp|A2BU00|   452 dnekiiHPDLSeITETLSSTYYANLSVFKSIPDTWAINQIFPIIPIHRHL 501  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   eep ++  +a+ tCds+++l++F ++++ + +L lH++e ++++l+++f 
+  sp|A2BU00|   502 EEPICKGNFADLTCDSDGKLNNFidngkiKSLLNLHrPEENNDYLIGIFM 551  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                   aGAY+e+l++ +N+f+ ++++++   
+  sp|A2BU00|   552 AGAYQEALGNFHNLFGNTNVIHI    574  
+
+sp|Q8RQM6|DCDA_COREF: domain 1 of 1, from 324 to 437: score 109.3, E = 6.4e-28
+                CS    EEEEEEEEEEE--S    S-E........EEEEES----S-.-CHHH
+                   *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal
+                      + v++V ++k+++ ++++ r+        ++  +d+G++++ ++pal
+  sp|Q8RQM6|   324    VTVYEVGTIKDVDVddetTRR--------YIS-VDGGMSDN-IRPAL 360  
+
+                CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...-----
+                   ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG
+                   y+a +  ++vsr  e++t  + ++G +C+sgD+l + + + P   +++ G
+  sp|Q8RQM6|   361 YGAEYDARVVSRFTEGETTNTRVVGSHCESGDILIN-EATYPS--DIHTG 407  
+
+                CS -EEEES-----SGCC-B-TTT--.-EEEEE   
+                   DllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   Dll+   +GAY+++++s++N f rpa+V v   
+  sp|Q8RQM6|   408 DLLALAATGAYCYAMSSRYNAFARPAVVSV    437  
+
+sp|B4F1A4|SPEA_PROMH: domain 1 of 1, from 347 to 563: score 108.8, E = 8.9e-28
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++nVigv +++ +  +++ ++ +++  +  ++ ++ ++++++++ 
+  sp|B4F1A4|   347    VLISNVIGVERNEFtaitppaedaprpiaslwetweemqtkgnsrsl 393  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ +++  ++  + +++   ++   +  ++ + + ++++
+  sp|B4F1A4|   394 rewlhdsqldlhdvhtqyvhgmlslterawaeelylnicrhiqydldpsn 443  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+ +  y+++++++slpd +++d+l+p+lp++ ld   
+  sp|B4F1A4|   444 rahRPIIDeLQERMSDKFYVNFSLFQSLPDAWGIDQLFPVLPIEGLDKPL 493  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                   +++++l + tCds+++++++ ++++ + ++P + +++e    ++ff +GA
+  sp|B4F1A4|   494 DRRAVLLDITCDSDGIIDHYvdgdgvETTMPMPaYDPEYPPMIGFFMVGA 543  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f+++a V v   
+  sp|B4F1A4|   544 YQEILGNMHNLFGDTAAVDV    563  
+
+sp|P74576|SPEA1_SYNY3: domain 1 of 1, from 396 to 615: score 108.1, E = 1.5e-27
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L++ V+++ +++ + ++ +++++   ++  ++ ++ + ++ ++  +
+  sp|P74576|   396    VLIFDVVATNDINPplpkvkgkdhailrnlmetwetitvdnyqeayh 442  
+
+                CS                                                S-E
+                   ...............................................drk
+                   + ++ +++  +  + +  + +++ + ++      ++  +  ++++  +++
+  sp|P74576|   443 dveqfkteaislfnfgylglkerakaeelywaccrkilqicrqqeyvPDD 492  
+
+                CS .. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEE
+                   ld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtl
+                   l++l+ +la +yy + +v++s pd++++d+l+pi+p++rldeept++ +l
+  sp|P74576|   493 LEnLEVNLASIYYANMSVFQSAPDSWAIDQLFPIMPIHRLDEEPTQRGIL 542  
+
+                CS E-----TT--SEE.      EEEEE..           .------EEEES
+                   aGPtCdsgDvlarF......dvsLPlH...........lelevGDllvff
+                   a+ tCds++++++F + ++ +  L lH+  + +++++++++e+ ++l++f
+  sp|P74576|   543 ADITCDSDGKIDQFidlrdvKSVLELHplievhqpgtpPRVEP-YYLGMF 591  
+
+                CS -----SGCC-B-TTT--.-EEEEE   
+                   daGAYteslasnFNgfprpaeVlv<-*
+                   ++GAY+e++++ +N+f++ ++V++   
+  sp|P74576|   592 LVGAYQEIMGNLHNLFGDINVVHI    615  
+
+sp|A5GB52|SPEA_GEOUR: domain 1 of 1, from 346 to 561: score 107.3, E = 2.6e-27
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +LvtnV+ + + +  ++ + + ++ ++  ++ ++ ++  ++ ++ + 
+  sp|A5GB52|   346    VLVTNVLNTNTQNImpdfeatlneaeklaptvkklediyksidrysl 392  
+
+                CS                                                   
+                   ..................................................
+                   +++ +++ +  ++  +  + +  + +++   +   ++  ++ ++  ++ +
+  sp|A5GB52|   393 redyhdtlqliqeavslfnlgyltlndramaewlygkiirkinsivekik 442  
+
+                CS            S-E........EEEEES----S-.-CHHHHS----EEEC
+                   ...........drkldlnerlafvyylddGvygslpdpalydalhpilpv
+                   + +++ ++ +   +         +y+ ++++++s pd++++d+l+pi+p+
+  sp|A5GB52|   443 pipeelqnfqlSLR--------QTYFANFSLFQSVPDSWAIDQLFPIVPI 484  
+
+                CS SS-TTSSEEEEEEE-----TT--SEE.      EEEEE.. .------EE
+                   srldeeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDll
+                   +rl++ p++ +++a+ tCds++ +  F ++++++  LPlH+ + ++ +++
+  sp|A5GB52|   485 QRLNQKPDVIASIADITCDSDGEITSFvgengrTKFLPLHkIRKDEAYYI 534  
+
+                CS EES-----SGCC-B-TTT--.-EEEEE   
+                   vffdaGAYteslasnFNgfprpaeVlv<-*
+                   +ff+ GAY+e+l++++N+f++++ V++   
+  sp|A5GB52|   535 GFFLIGAYQEILGDMHNLFGDTNAVHI    561  
+
+sp|Q7U3S0|SPEA_SYNPX: domain 1 of 1, from 351 to 570: score 107.1, E = 2.9e-27
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                       Lv+ V+g + ++ + ++ +++++ + ++ +++  + ++ +++ + +
+  sp|Q7U3S0|   351    LLVFDVLGSSALSAsipnasgdepltvrnlrdtlvtiqelsgtadaq 397  
+
+                CS                                                   
+                   ..................................................
+                     + ++  ++  + +++     + +  + +++ + ++ +    +   ++ 
+  sp|Q7U3S0|   398 lvrlqeawndalkfkqdalaafrlgymglpdrasaeqltwacadaiaqrl 447  
+
+                CS       S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T
+                   ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   ++++  ++ l+ l+++la +yy + +++ s pd++++d+l+p++p+++l+
+  sp|Q7U3S0|   448 pkeqaiPEELAaLSKALAGTYYANLSIFRSAPDTWAIDQLFPVVPIQKLN 497  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   + pt+ + la+ tCds++ l+rF ++++++++L lH+l+ ++ +l++ f+
+  sp|Q7U3S0|   498 QRPTRLANLADLTCDSDGRLDRFigdgqpKQLLELHeLDDNNPYLIGLFL 547  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                    GAY+e++++ +N+f+ ++ V++   
+  sp|Q7U3S0|   548 SGAYQEVMGNLHNLFGTTNAVHI    570  
+
+sp|A0A4W3|SPEA_GEOSL: domain 1 of 1, from 425 to 561: score 106.7, E = 3.9e-27
+                CS    EEEEEEEEEEE--S                S-E........EEEEES
+                   *->tLvtnVigvkergg................drkldlnerlafvyyld
+                      +L  +++ +   g  ++ ++ +++ ++ +   +         +y+ +
+  sp|A0A4W3|   425    WLHGKILRKIN-GIvekikpipeelqnfqlSLR--------QTYFAN 462  
+
+                CS ----S-.-CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE. 
+                   dGvygslpdpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF.
+                   +++++s+pd++++d+l+pi+p++rl++ p++ +++a+ tCds++ +  F 
+  sp|A0A4W3|   463 FSLFQSIPDSWAIDQLFPIVPIQRLNQKPDVMASIADITCDSDGEITSFv 512  
+
+                CS      EEEEE.. .------EEEES-----SGCC-B-TTT--.-EEEEE 
+                   .....dvsLPlH.lelevGDllvffdaGAYteslasnFNgfprpaeVlv<
+                   ++++++ +LPlH+ + +++++++ff+ GAY+e+l++++N+f++++ V+v 
+  sp|A0A4W3|   513 gengrTKYLPLHkMRKDEDYFVGFFLIGAYQEILGDMHNLFGDTNAVHV  561  
+
+                CS   
+                   -*
+                     
+  sp|A0A4W3|     -    -    
+
+sp|Q39X78|SPEA_GEOMG: domain 1 of 1, from 425 to 561: score 106.4, E = 4.8e-27
+                CS    EEEEEEEEEEE--S                S-E........EEEEES
+                   *->tLvtnVigvkergg................drkldlnerlafvyyld
+                      +L  +++ +   g  ++ ++ +++ ++ +   +         +y+ +
+  sp|Q39X78|   425    WLHGKILRKIN-GIvekikpipeelqnfqlSLR--------QTYFAN 462  
+
+                CS ----S-.-CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE. 
+                   dGvygslpdpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF.
+                   +++++s+pd++++d+l+pi+p++rl++ p++ +++a+ tCds++ +  F 
+  sp|Q39X78|   463 FSLFQSIPDSWAIDQLFPIVPIQRLNQKPDVMASIADITCDSDGEITSFv 512  
+
+                CS      EEEEE.. .------EEEES-----SGCC-B-TTT--.-EEEEE 
+                   .....dvsLPlH.lelevGDllvffdaGAYteslasnFNgfprpaeVlv<
+                   ++++++ +LPlH+ + +++++++ff+ GAY+e+l++++N+f++++ V+v 
+  sp|Q39X78|   513 gengrTKYLPLHkIRKDEDYFVGFFLIGAYQEILGDMHNLFGDTNAVHV  561  
+
+                CS   
+                   -*
+                     
+  sp|Q39X78|     -    -    
+
+sp|A1TY02|SPEA_MARAV: domain 1 of 1, from 350 to 566: score 106.3, E = 5e-27
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +LvtnVi++   +++++++++  + + + ++  ++ ++ ++++++++
+  sp|A1TY02|   350    VLVTNVIDREY-PDnreptepaaeapaplqdlwrdleslqdedsprs 395  
+
+                CS                                                   
+                   ..................................................
+                     +  ++  +   + + +  ++  + +++ + ++   +  +  + + ++ 
+  sp|A1TY02|   396 laeiyhdilhamadvhaqfahgllslqeraqaetlyvrccrmlraeldsa 445  
+
+                CS     S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTS
+                   ....drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldee
+                   ++ +++ +d+lne+la   ++++++++slpd +++d+++p++p++ l+++
+  sp|A1TY02|   446 nrahREIIDeLNEKLAEKLFVNFSLFQSLPDVWGIDQIFPVMPINGLNRS 495  
+
+                CS SEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES---
+                   ptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaG
+                     +++++ + tCds++ ++++ ++++ + +LPl++ ++e   l++ff +G
+  sp|A1TY02|   496 LNRRAVIQDITCDSDGRIDQYvdgqgiETTLPLPeHDPESPLLMGFFMTG 545  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++  V v   
+  sp|A1TY02|   546 AYQEILGDMHNLFGDTHSVDV    566  
+
+sp|Q9RXR4|SPEA_DEIRA: domain 1 of 1, from 372 to 586: score 106.0, E = 6.4e-27
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+  V++v   + + ++++ + +++++++  ++  ++ ++ + ++ 
+  sp|Q9RXR4|   372    VLILPVVDVTGPTRnledqeltvpgedshqivrdmyetlenismrny 418  
+
+                CS                                                   
+                   ..................................................
+                   +++ ++  +++++ ++  + +  + +++ +++   +   ++  +  ++++
+  sp|Q9RXR4|   419 resyndavgdkqtlhnlfdlgyvtledrargealfnailrkiakliqgek 468  
+
+                CS   S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSE
+                   ..drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeept
+                     ++ l++l++ la+  ++++++++slpd ++++al+pi+p++rl+e+pt
+  sp|Q9RXR4|   469 yvPDELEdLQKVLADKFICNFSLFQSLPDNWAIGALFPIVPLDRLNEQPT 518  
+
+                CS EEEEEE-----TT--SEE.      EEEEE...------EEEES-----S
+                   epvtlaGPtCdsgDvlarF......dvsLPlHlelevGDllvffdaGAYt
+                   + +tl++ tCds++++ +F + ++ + +LPlH + ++ ++l+ f++GAY+
+  sp|Q9RXR4|   519 RQATLVDITCDSDGKVEKFidlrdvKATLPLHEPGDRPYYLGAFLMGAYQ 568  
+
+                CS GCC-B-TTT--.-EEEEE   
+                   eslasnFNgfprpaeVlv<-*
+                    +l+s +N+f+  +e +v   
+  sp|Q9RXR4|   569 DVLGSAHNLFGKVSEAHV    586  
+
+sp|P09890|DCDA_CORGL: domain 1 of 1, from 310 to 423: score 105.3, E = 1e-26
+                CS    EEEEEEEEEEE--S    S-E........EEEEES----S-.-CHHH
+                   *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal
+                      + +++V ++k+++ ++++ r+        +++ +d+G++++ ++pal
+  sp|P09890|   310    VTIYEVGTTKDVHVdddkTRR--------YIA-VDGGMSDN-IRPAL 346  
+
+                CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...-----
+                   ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG
+                   y+  +  ++vsr +e+  +++ ++G +C+sgD+l + d   P   ++  G
+  sp|P09890|   347 YGSEYDARVVSRFAEGDPVSTRIVGSHCESGDILIN-DEIYPS--DITSG 393  
+
+                CS -EEEES-----SGCC-B-TTT--.-EEEEE   
+                   DllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   D+l+   +GAY+++++s++N f rpa+V v   
+  sp|P09890|   394 DFLALAATGAYCYAMSSRYNAFTRPAVVSV    423  
+
+sp|O82475|SPE1_BRAJU: domain 1 of 1, from 390 to 585: score 104.8, E = 1.5e-26
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+++ ++  +r+++++++ +   ++ +++ +++ ++  +   ++++
+  sp|O82475|   390    VLIFEAVSAGKRHEttpsdlqfllegyseeargdyenlydavmrgdr 436  
+
+                CS                                              S-E..
+                   .............................................drkld
+                   ++     ++ +++  ++ ++++ + ++  + ++  +  +++ +++d++  
+  sp|O82475|   437 escllyvdqlkqrcveefkegslsieqlagvdglcewvtkeiggsDPV-- 484  
+
+                CS ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEEE--
+                   lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtlaGP
+                          +y ++ +v++s+pd +++d+l+pi+p++rld+ p ++ +l + 
+  sp|O82475|   485 ------LTYNVNLSVFHSIPDFWGIDQLFPIVPIHRLDQRPVARGILSDL 528  
+
+                CS ---TT--SEE.   EEEEE...------EEEES-----SGCC-B-TTT--
+                   tCdsgDvlarF...dvsLPlHlelevGDllvffdaGAYteslasnFNgfp
+                   tCds++++++F +++ sLPlH   ++G++l++f+ GAY e+l+  +N+f+
+  sp|O82475|   529 TCDSDGKINKFiggESSLPLHELDNNGYYLGMFLGGAYEEALGGVHNLFG 578  
+
+                CS .-EEEEE   
+                   rpaeVlv<-*
+                    p++V v   
+  sp|O82475|   579 GPSVVRV    585  
+
+sp|Q39827|SPE1_SOYBN: domain 1 of 1, from 401 to 596: score 104.7, E = 1.6e-26
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+++ +g+++ +g++ ++  + +   ++ +++ +  ++   +++ +
+  sp|Q39827|   401    VLIFEAVGTSSTNGggappalsahylaeelsedygylselafrgdye 447  
+
+                CS                                             S-E...
+                   ............................................drkldl
+                   +    +++ +++  ++ ++++   ++    ++  +  ++  +  + +   
+  sp|Q39827|   448 tclvyteemkercveqfkqgtvcmeqlaaveglcelvrkavgaaESV--- 494  
+
+                CS .....EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEEE---
+                   nerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtlaGPt
+                          y+++ ++++s pd +++++++pi+p++rlde p ++ +l + t
+  sp|Q39827|   495 -----RRYHVNLSIFTSVPDAWGIEQVFPIIPIHRLDEKPSVRGILSDLT 539  
+
+                CS --TT--SEE.   EEEEE.. .------EEEES-----SGCC-B-TTT--
+                   CdsgDvlarF...dvsLPlH.lelevGDllvffdaGAYteslasnFNgfp
+                   Cds++++++F +++ sLPlH+ e  + ++l++f+ GAY e+l+  +N+f+
+  sp|Q39827|   540 CDSDGKIDKFingESSLPLHeMEGGRTYYLGMFLGGAYEEALGGVHNLFG 589  
+
+                CS .-EEEEE   
+                   rpaeVlv<-*
+                    p++V v   
+  sp|Q39827|   590 GPSVVRV    596  
+
+sp|Q7N121|SPEA_PHOLL: domain 1 of 1, from 347 to 563: score 104.7, E = 1.6e-26
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+nVigv +++ ++++++ ++ +++ ++  ++ ++ ++++++++ 
+  sp|Q7N121|   347    VLVSNVIGVERNEFtqttppaedasrpltslwetwqemhsegnrrsl 393  
+
+                CS                                                   
+                   ..................................................
+                   +++ ++++ + ++ +++  ++  + +++   ++   +  ++ +++ ++++
+  sp|Q7N121|   394 reslhdgqldlhdvhtqyahgmldlterawaeelylnicrriqqdldpsn 443  
+
+                CS    S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   + +++ +d+l+er+a+  y+++++++slpd +++d+l+p+lp++ ld   
+  sp|Q7N121|   444 rahRPIIDeLQERMADKFYVNFSLFQSLPDAWGIDQLFPVLPIEGLDKPL 493  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds+++++++ ++++   + ++P  ++++    ++ff +G
+  sp|Q7N121|   494 DRRAVLLDITCDSDGIVDHYvdgdgvaaTMPMPA-YDPDCPPMIGFFMVG 542  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++a + v   
+  sp|Q7N121|   543 AYQEILGNMHNLFGDTAAIDV    563  
+
+sp|B3EAF3|SPEA_GEOLS: domain 1 of 1, from 346 to 561: score 104.5, E = 1.8e-26
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +LvtnV+ + + +  ++ ++  ++ +++ ++ ++  +  ++ ++ + 
+  sp|B3EAF3|   346    VLVTNVLNTNTQNLmpdyeqileemekpaptvkklldiyksidrysl 392  
+
+                CS                                                   
+                   ..................................................
+                   +++ +++ +  ++  +  + +  + +++   +   ++  ++ ++  ++ +
+  sp|B3EAF3|   393 redyhdtlqlineavslfnlgyltlqdraiaewlyskiikkinsivekik 442  
+
+                CS            S-E........EEEEES----S-.-CHHHHS----EEEC
+                   ...........drkldlnerlafvyylddGvygslpdpalydalhpilpv
+                   + +++ ++ + + +         +y+ ++++++s+pd++++d+l+pi+p+
+  sp|B3EAF3|   443 pipeelqnfqlALR--------QTYFANFSLFQSIPDSWAIDQLFPIMPL 484  
+
+                CS SS-TTSSEEEEEEE-----TT--SEE.      EEEEE.. .------EE
+                   srldeeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDll
+                   +rl + p++ +++a+ tCds++ +  F +++++   LP H+l+ ++++++
+  sp|B3EAF3|   485 QRLGQRPDVMASIADITCDSDGEITSFvgengrSKFLPMHkLKKDEDYYI 534  
+
+                CS EES-----SGCC-B-TTT--.-EEEEE   
+                   vffdaGAYteslasnFNgfprpaeVlv<-*
+                   +ff+ GAY+e+l++ +N+f++++ V++   
+  sp|B3EAF3|   535 GFFLIGAYQEILGDLHNLFGDTNAVHI    561  
+
+sp|A5GWM2|SPEA_SYNR3: domain 1 of 1, from 355 to 566: score 104.5, E = 1.8e-26
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+nV+g + ++ ++ ++  +++    ++ +++ ++ ++++ ++  
+  sp|A5GWM2|   355    VLVFNVLGQSGVNQpsipeavegealivrnlretlsgigpdnlqeaw 401  
+
+                CS                                                   
+                   ..................................................
+                   ++  + +++     + +  + +++++ ++      +   +  +++++ ++
+  sp|A5GWM2|   402 ndalkfkddalaafrlgylsltergkaeqlywaccsaiadllpgeeelpd 451  
+
+                CS        S-E........EEEEES----S-.-CHHHHS----EEECSS-T
+                   .......drkldlnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   + ++ + +           +yy + +v+ s pd++++d+l+p++p++rl+
+  sp|A5GWM2|   452 elkglkaAFA--------STYYANLSVFRSAPDTWAIDQLFPVMPIHRLE 493  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   e+p+e  ++a+ tCds+++larF  +++ + +L lH+l+  + ++++ f+
+  sp|A5GWM2|   494 EQPRELGSFADLTCDSDGKLARFiasgsaKPLLELHeLKDGEPYWIGLFL 543  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                    GAY+e++++ +N+f+ ++ V +   
+  sp|A5GWM2|   544 GGAYQEVMGNLHNLFGSTNAVSI    566  
+
+sp|Q7UTS2|SPEA_RHOBA: domain 1 of 1, from 460 to 592: score 104.0, E = 2.5e-26
+                CS    EEEEEEEEEEE--S  S-E.. ......EEEEES----S-.-CHHHH
+                   *->tLvtnVigvkergg..drkld.lnerlafvyylddGvygslpdpaly
+                       +  +V    e   +++++l++l++ l ++y+ ++++++s+pd++++
+  sp|Q7UTS2|   460    AICHRVRELAESMKerPDDLKhLDRMLSDIYFANFSLFQSMPDSWAI 506  
+
+                CS S----EEECSS-TTSSEEEEEEE-----TT--SEE.      EEEEE.. 
+                   dalhpilpvsrldeeptepvtlaGPtCdsgDvlarF......dvsLPlH.
+                   d+l+pi+p++rl e p + ++l + tCds+++++ F  +++++++L lH+
+  sp|Q7UTS2|   507 DQLFPIMPIHRLLEKPSRHAVLGDITCDSDGKVDAFvcgggrQRTLMLHp 556  
+
+                CS .------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   l+  + + l++f +GAY+e+l++ +N+f+++  V+v   
+  sp|Q7UTS2|   557 LKSGEPYQLAVFMVGAYQEILGDLHNLFGDTHAVHV    592  
+
+sp|Q9KCM5|DCDA_BACHD: domain 1 of 1, from 301 to 409: score 103.8, E = 3e-26
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      t ++++ ++ke++  r         ++  +d+G++++ ++paly+a 
+  sp|Q9KCM5|   301    TTLYTIGSRKEIPNVRH--------YLS-VDGGMSDN-LRPALYQAE 337  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   +  ++ +r +e+p   +++aG +C+sgD l   d +LP   e +  D+l+
+  sp|Q9KCM5|   338 YEGALANRVNEQPVGMFSVAGKCCESGDMLIW-DLPLP---EANHEDILA 383  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   +f +GAY++s+a+n+N +prp++V+v   
+  sp|Q9KCM5|   384 VFCTGAYGYSMANNYNRIPRPPVVFV    409  
+
+sp|Q96A70|ADC_HUMAN: domain 1 of 1, from 286 to 409: score 103.7, E = 3.1e-26
+                CS    EEEEEEEEEEE--S            S-E........EEEEES----
+                   *->tLvtnVigvkergg............drkldlnerlafvyylddGvy
+                      t+++++i++ke+  ++++++++++++ ++        +vy+ld Gvy
+  sp|Q96A70|   286    TVAVSIIAKKEVLLdqpgreeengstSKT--------IVYHLDEGVY 324  
+
+                CS S-.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEE
+                   gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs
+                   g  ++++l+d + p +++++++  e+p+++++l+GP  d+ D++a+   +
+  sp|Q96A70|   325 GI-FNSVLFDNICPTPILQKkpSTEQPLYSSSLWGPAVDGCDCVAE-GLW 372  
+
+                CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   LP    l+vGD+lvf ++GAYt  ++s F g + + + +    
+  sp|Q96A70|   373 LP---QLHVGDWLVFDNMGAYTVGMGSPFWGTQACHITYA    409  
+
+sp|Q43075|SPE1_PEA: domain 1 of 1, from 494 to 609: score 102.6, E = 6.5e-26
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                       L+t+ igvk+    ++          y+++ +v++s pd +++++l
+  sp|Q43075|   494    DLITETIGVKD----PV--------KKYHVNLSVFTSVPDFWGINQL 528  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.   EEEEE..  .----
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarF...dvsLPlH..lelev
+                   +pi+p++rlde pt++ +l + tCds++++++F +++ sLPlH+   +  
+  sp|Q43075|   529 FPIVPIHRLDEKPTARGILSDLTCDSDGKIDKFiggESSLPLHemEGHGG 578  
+
+                CS --EEEES-----SGCC-B-TTT--.-EEEEE   
+                   GDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   G++l++f+ G Y e+l+  +N+f+ p++V v   
+  sp|Q43075|   579 GYYLGMFLGGSYEEALGGLHNLFGGPSVVRV    609  
+
+sp|P72587|SPEA2_SYNY3: domain 1 of 1, from 375 to 587: score 100.6, E = 2.6e-25
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+ V+g    +g +++++++++ ++  ++  +  ++ + ++ +++
+  sp|P72587|   375    VLVFDVLGSNQ-TGfsephppdenahpllknlwecyetitaeqyqeq 420  
+
+                CS                                                  S
+                   .................................................d
+                    ++  + +++ ++  + +  + +++++ ++ +    ++  + +++ +  +
+  sp|P72587|   421 yhdalqlkteasslfnfgylsltergqaeqihwaccrkifeitrqleyiP 470  
+
+                CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE
+                   rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv
+                   +++  l++ ++++yy++ +v++s p ++  d+l+pilp++ l+e p ++v
+  sp|P72587|   471 EDFQaLDKIMTDIYYVNLSVFQSAPESWSLDQLFPILPIHHLNEKPSQRV 520  
+
+                CS EEE-----TT--SEE.      EEEEE..  .------EEEES-----SG
+                   tlaGPtCdsgDvlarF......dvsLPlH..lelevGDllvffdaGAYte
+                   +la+ tCds+++++rF +  + + +L +H+     + ++l++f++GAY+e
+  sp|P72587|   521 ILADLTCDSDGKIDRFidlwdvKSYLEVHplENDGNPYYLGMFLVGAYQE 570  
+
+                CS CC-B-TTT--.-EEEEE   
+                   slasnFNgfprpaeVlv<-*
+                   ++++ +N+f++ ++V++   
+  sp|P72587|   571 IMGNLHNLFGDINVVHI    587  
+
+sp|Q7TUJ9|SPEA_PROMM: domain 1 of 1, from 355 to 574: score 100.2, E = 3.7e-25
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+ V+g+ +++g  ++++ +++ + ++ +++ ++   ++++  ++
+  sp|Q7TUJ9|   355    ILVFDVLGTGTVPGaipkqtveepltihnlretlsgvmatqkgavse 401  
+
+                CS                                                   
+                   ..................................................
+                    ++ ++  ++  + +++     + +  + +++   ++ ++   +   ++ 
+  sp|Q7TUJ9|   402 isrlqeawndaikfkedalaafrlgyislperalaeqltgacaeaimgql 451  
+
+                CS       S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T
+                   ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   + +++ +++l +l   la +yy + +++ s pd++++++l+p +p++rl+
+  sp|Q7TUJ9|   452 pcnetiPDDLQsLRAVLASTYYANLSIFRSAPDTWAIEQLFPLMPIHRLN 501  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   eept+   +a+ tCds+++l+rF ++++++ +L lH+l+ ++ + +++f+
+  sp|Q7TUJ9|   502 EEPTQLGHFADLTCDSDGKLDRFigngqtKTLLELHnLRQNEAYMIGMFL 551  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                   aGAY+e++++ +N+f+ ++ V++   
+  sp|Q7TUJ9|   552 AGAYQEVMGNLHNLFGSTNAVHI    574  
+
+sp|P49726|SPE1_SOLLC: domain 1 of 1, from 291 to 492: score 98.7, E = 1e-24
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+++ ++ ++ + ++++++++ ++  ++ +++ + + ++ +    +
+  sp|P49726|   291    ILIFEAVSASTSHVstqpssgglqslvetlnedaradyrnlsaaavr 337  
+
+                CS                                                 S-
+                   ................................................dr
+                   ++ ++    +++ +++  ++ ++++ + ++    ++  +  ++  +  d+
+  sp|P49726|   338 geydtcliysdqlkqrcveqfkdgsldieqlaavdsicdwvskaigvaDP 387  
+
+                CS E........EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEE
+                   kldlnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtl
+                   +         +y+++ +v++s+pd +++ +l+pi+p++rlde pt + +l
+  sp|P49726|   388 V--------RTYHVNLSVFTSIPDFWGFSQLFPIVPIHRLDEKPTMRGIL 429  
+
+                CS E-----TT--SEE.   EEEEE..    .------EEEES-----SGCC-
+                   aGPtCdsgDvlarF...dvsLPlH....lelevGDllvffdaGAYtesla
+                    + tCds++++++F +++ sLPlH+ ++++  + ++l++f+ GAY e+l+
+  sp|P49726|   430 SDLTCDSDGKVDKFiggESSLPLHeigsGDGGR-YYLGMFLGGAYEEALG 478  
+
+                CS B-TTT--.-EEEEE   
+                   snFNgfprpaeVlv<-*
+                     +N+f+ p++V v   
+  sp|P49726|   479 GLHNLFGGPSVVRV    492  
+
+sp|Q9PII5|DCDA_CAMJE: domain 1 of 1, from 270 to 375: score 98.5, E = 1.1e-24
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                       +v++V++ k +   ++        fv+ +d+ ++++ ++p ly+a+
+  sp|Q9PII5|   270    EFVCSVLYEKQNKT-KR--------FVV-VDGAMNDL-IRPSLYEAY 305  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h i++    +++++  ++++G +C+sgD++a+  +sLP    ++ +D++v
+  sp|Q9PII5|   306 HEIILPY--NQGEESLCDVVGGICESGDFFAK-ARSLP---STQSDDIMV 349  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   + ++GAY++s++sn+N +    e ++   
+  sp|Q9PII5|   350 IKNTGAYGFSMSSNYNTRNKVCELAL    375  
+
+sp|A2CDK1|SPEA_PROM3: domain 1 of 1, from 355 to 574: score 98.1, E = 1.5e-24
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+ V+g+ +++g  ++++++++ + ++ +++  +   ++++  ++
+  sp|A2CDK1|   355    ILVFDVLGTGTVPGavpnqtgeepltihnlretlagvmatqkgaase 401  
+
+                CS                                                   
+                   ..................................................
+                    ++ ++  ++  + +++     + +  + +++   ++ +    +   ++ 
+  sp|A2CDK1|   402 isrlqeawndavkfkddalaafrlgyislteralaeqltwacaeaimgql 451  
+
+                CS       S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T
+                   ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld
+                   + +++ +++l +l   la +yy + +++ s pd++++++l+p +p++rl 
+  sp|A2CDK1|   452 pchetiPDDLQgLRAVLAGTYYANLSIFRSAPDTWAIEQLFPLMPIHRLK 501  
+
+                CS TSSEEEEEEE-----TT--SEE.      EEEEE.. .------EEEES-
+                   eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd
+                   eept+   +a+ tCds+++l+rF ++++++ +L lH+l+ ++ + +++f+
+  sp|A2CDK1|   502 EEPTQLGHFADLTCDSDGKLDRFigngqtKTLLELHnLRQNEAYMIGMFL 551  
+
+                CS ----SGCC-B-TTT--.-EEEEE   
+                   aGAYteslasnFNgfprpaeVlv<-*
+                   aGAY+e++++ +N+f+ ++ V++   
+  sp|A2CDK1|   552 AGAYQEVMGNLHNLFGSTNAVHI    574  
+
+sp|Q8BVM4|ADC_MOUSE: domain 1 of 1, from 286 to 408: score 97.9, E = 1.7e-24
+                CS    EEEEEEEEEEE--S           S-E........EEEEES----S
+                   *->tLvtnVigvkergg...........drkldlnerlafvyylddGvyg
+                      t+++++++++e+ ++ +++++++  ++         +vyyld Gvyg
+  sp|Q8BVM4|   286    TVAVSIVAKREVLDqasreeqtgaaPKS--------IVYYLDEGVYG 324  
+
+                CS -.-CHHHHS----EEECSS  -TTSSEEEEEEE-----TT--SEE.EEEE
+                   slpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsL
+                     ++++l+d + p + +++++ +++p+++++l+GP  ++ D++a+   +L
+  sp|Q8BVM4|   325 V-FNSVLFDNTCPTPALQKkpSADQPLYSSSLWGPAVEGCDCVAE-GLWL 372  
+
+                CS E...------EEEES-----SGCC-B-TTT--.-EEEEE   
+                   PlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                   P    l+vGD+lvf ++GAYt    s   g +   + +    
+  sp|Q8BVM4|   373 P---QLQVGDWLVFDNMGAYTVDTKSLLGGTQARRVTYA    408  
+
+sp|Q9CL60|SPEA_PASMU: domain 1 of 1, from 357 to 573: score 95.7, E = 8e-24
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+nVigv +   ++   + ++ ++  ++  ++  + ++++++++ 
+  sp|Q9CL60|   357    VLVSNVIGVERYKFetlaapakdapsvlhsmwetwvdiqssrekrsl 403  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ + ++ +++ + +  + +++   ++   +  ++ ++  ++++
+  sp|Q9CL60|   404 rswihesqfdlsdvhnqynvgllnleqrawaeqlylnichevgqlfnekh 453  
+
+                CS   S-E .. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ..drk.ld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   +++r+ +d+l+er a+  y+++++++slpd +++d+l+p+ p+s+l++  
+  sp|Q9CL60|   454 rsHRTiIDeLQERFADKLYVNFSLFQSLPDAWGIDQLFPVCPISNLNQPV 503  
+
+                CS EEEEEEE-----TT--SEE.      EEEEE.. .------EEEES----
+                   tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA
+                    ++++l + tCds+++++++ ++++ + ++P +++e ++  ll+ff +GA
+  sp|Q9CL60|   504 SRRAVLLDITCDSDGTIDHYidgdgiTTTMPMPhYEEDNPPLLGFFMVGA 553  
+
+                CS -SGCC-B-TTT--.-EEEEE   
+                   YteslasnFNgfprpaeVlv<-*
+                   Y+e+l++++N+f+++++V v   
+  sp|Q9CL60|   554 YQEILGNMHNLFGDTSTVDV    573  
+
+sp|O23141|SPE2_ARATH: domain 1 of 1, from 481 to 596: score 94.8, E = 1.5e-23
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L  + ig ++    ++        ++y ++ +v++s+pd +++d+l
+  sp|O23141|   481    VL--KAIGASD----PV--------HTYNINLSVFTSIPDLWGIDQL 513  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.   EEEEE..     .-
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarF...dvsLPlH.....le
+                   +pi+p+++ld+ p ++ +l + tCds++++++F +++ sLPlH+ ++++ 
+  sp|O23141|   514 FPIVPIHKLDQRPGARGILSDLTCDSDGKINKFiggESSLPLHeldknGS 563  
+
+                CS -----EEEES-----SGCC-B-TTT--.-EEEEE   
+                   levGDllvffdaGAYteslasnFNgfprpaeVlv<-*
+                     + ++l++f+ GAY e+l+  +N+f+ p++V v   
+  sp|O23141|   564 GGR-YFLGMFLGGAYEEALGGVHNLFGGPSVVRV    596  
+
+sp|Q9SNN0|SPE1_ORYSJ: domain 1 of 1, from 401 to 598: score 94.7, E = 1.6e-23
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv++  + +  +g+ ++ ++   ++ +++ + + ++      +++ 
+  sp|Q9SNN0|   401    VLVFEAFSASA-PGridpatgylldeltddchadyrnlmaaavrgdf 446  
+
+                CS                                              S-E..
+                   .............................................drkld
+                   ++     ++ +++  ++ +++  + ++    ++  +   ++ +  ++   
+  sp|Q9SNN0|   447 dtcalyadqlkrrcadqfkdgvlglehlaavdslceivargmgaaEPP-- 494  
+
+                CS ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEEE--
+                   lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtlaGP
+                          +y+++ +v++slpd +++++ +pi+p++rl e p++  +l + 
+  sp|Q9SNN0|   495 ------RTYHINLSVFTSLPDMWAIGQMFPIIPIQRLGERPAVDGVLSDL 538  
+
+                CS ---TT--SEE.   EEEEE..   .------EEEES-----SGCC-B-TT
+                   tCdsgDvlarF...dvsLPlH...lelevGDllvffdaGAYteslasnFN
+                   tCds++++++F ++  sLPlH+ ++   +G++l++f+ GAY+e+l+  +N
+  sp|Q9SNN0|   539 TCDSDGKVDHFiggRHSLPLHelpVHGTRGYYLGMFLGGAYQEALGGLHN 588  
+
+                CS T--.-EEEEE   
+                   gfprpaeVlv<-*
+                   +f+ p++V v   
+  sp|Q9SNN0|   589 LFGGPSVVRV    598  
+
+sp|P31851|TABA_PSESZ: domain 1 of 1, from 278 to 383: score 92.2, E = 8.9e-23
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +Lv++Vi + ++g  r         +v+ ld++++++ ++p ly+a+
+  sp|P31851|   278    VLVSRVINRCSKG--RE--------IVG-LDASMSAL-MRPGLYGAY 312  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   h+  +    d+ p+ +++++G +C+  D++a  d++LP    + +GDl +
+  sp|P31851|   313 HHLTLPF-ADQRPEGVFDVVGALCENFDKFAV-DRLLP---SPLIGDLAL 357  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                   ++d+GA +++++ ++Ng+ rpae  +   
+  sp|P31851|   358 IHDTGAHGHAMGFTYNGRLRPAELML    383  
+
+sp|Q9JT25|SPEA_NEIMA: domain 1 of 1, from 343 to 559: score 91.8, E = 1.2e-22
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+nVigv +   ++ + ++++ ++  ++  ++ ++ + ++++++ 
+  sp|Q9JT25|   343    VLVANVIGVERYKPrrldapspeaprvlhsmwetwtdisasrekrsl 389  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ +  + +++ + +  +  ++   ++   +  ++ ++  ++++
+  sp|Q9JT25|   390 rswihegqfdladvhnqynvgllslaqrawaeqlylnichevgelfnekh 439  
+
+                CS   S-E .. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ..drk.ld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   +++r+ +d+l+er a+  y+++++++slpd +++d+l+p+ p+  l+e  
+  sp|Q9JT25|   440 rsHRTiIDeLQERFADKLYVNFSLFQSLPDAWGIDQLFPVCPITGLNEPI 489  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds+++++++ ++++  ++ ++P  ++ e+  ll+ff +G
+  sp|Q9JT25|   490 ARRAVLLDITCDSDGTIDHYidgdgiagTMPMPD-YPEEEPPLLGFFMVG 538  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++a+  v   
+  sp|Q9JT25|   539 AYQEILGNMHNLFGDTATADV    559  
+
+sp|Q9K0U3|SPEA_NEIMB: domain 1 of 1, from 343 to 559: score 91.8, E = 1.2e-22
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lv+nVigv +   ++ + ++++ ++  ++  ++ ++ + ++++++ 
+  sp|Q9K0U3|   343    VLVANVIGVERYKPrrldapspeaprvlhsmwetwtdisasrekrsl 389  
+
+                CS                                                   
+                   ..................................................
+                   ++  ++++ +  + +++ + +  +  ++   ++   +  ++ ++  ++++
+  sp|Q9K0U3|   390 rswihegqfdladvhnqynvgllslaqrawaeqlylnichevgelfnekh 439  
+
+                CS   S-E .. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS
+                   ..drk.ld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep
+                   +++r+ +d+l+er a+  y+++++++slpd +++d+l+p+ p+  l+e  
+  sp|Q9K0U3|   440 rsHRTiIDeLQERFADKLYVNFSLFQSLPDAWGIDQLFPVCPITGLNEPI 489  
+
+                CS EEEEEEE-----TT--SEE.        EEEEE...------EEEES---
+                   tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG
+                   +++++l + tCds+++++++ ++++  ++ ++P  ++ e+  ll+ff +G
+  sp|Q9K0U3|   490 ARRAVLLDITCDSDGTIDHYidgdgiagTMPMPD-YPEEEPPLLGFFMVG 538  
+
+                CS --SGCC-B-TTT--.-EEEEE   
+                   AYteslasnFNgfprpaeVlv<-*
+                   AY+e+l++++N+f+++a+  v   
+  sp|Q9K0U3|   539 AYQEILGNMHNLFGDTATADV    559  
+
+sp|Q7XRA1|ADC2_ORYSJ: domain 1 of 1, from 381 to 547: score 91.2, E = 1.8e-22
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                       L++++ + +++  ++ ++ +++++ +  +++  + ++++ +  +  
+  sp|Q7XRA1|   381    RLLSKIQDLSSKQPrtahtvnggggvdamhshavelkkhgiemykla 427  
+
+                CS            S-E........EEEEES----S-.-CHHHHS----EEEC
+                   ...........drkldlnerlafvyylddGvygslpdpalydalhpilpv
+                   ++ +++ +++ +          + y+++ +v+ + pd +++++l+p +pv
+  sp|Q7XRA1|   428 kklskrvtgdaNGI--------YNYHMNLSVFSLVPDFWGIGQLFPMMPV 469  
+
+                CS SS-TTSSEEEEEEE-----TT--SEE.   EEEEE..     .------E
+                   srldeeptepvtlaGPtCdsgDvlarF...dvsLPlH.....lelevGDl
+                   srl+e pt   tl++ tCds++++ +F ++ v+LPlH+ ++    + G++
+  sp|Q7XRA1|   470 SRLNEKPTINGTLVDITCDSDGKVEKFirdAVTLPLHplddaAAEHGGYY 519  
+
+                CS EEES-----SGCC-B-TTT--.-EEEEE   
+                   lvffdaGAYteslasnFNgfprpaeVlv<-*
+                   ++ ++ GAY+e+la+ +N+f  p  V v   
+  sp|Q7XRA1|   520 VAALLSGAYQEALACKHNLFSGPTLVRV    547  
+
+sp|Q9SI64|SPE1_ARATH: domain 1 of 1, from 385 to 584: score 88.2, E = 1.5e-21
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +L+++ ++    ++++++++   ++ +++ +++ ++  +   +++++
+  sp|Q9SI64|   385    VLIFEAVSAGQQHEtptdhqfmlegyseevrgdyenlygaamrgdre 431  
+
+                CS                                             S-E...
+                   ............................................drkldl
+                   +     ++ +++  ++ ++++ + ++  + ++  +   +  + +d++   
+  sp|Q9SI64|   432 scllyvdqlkqrcvegfkegslgieqlagvdglcewvikaigasDPV--- 478  
+
+                CS .....EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEEE---
+                   nerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtlaGPt
+                         +y+++ +v++s+pd +++d+l+pi+p+++ld+ p+++ +l + t
+  sp|Q9SI64|   479 -----LTYHVNLSVFTSIPDFWGIDQLFPIVPIHKLDQRPAARGILSDLT 523  
+
+                CS --TT--SEE.   EEEEE..      .------EEEES-----SGCC-B-
+                   CdsgDvlarF...dvsLPlH......lelevGDllvffdaGAYteslasn
+                   Cds++++++F +++ sLPlH+ ++++    + ++l++f+ GAY e+l+  
+  sp|Q9SI64|   524 CDSDGKINKFiggESSLPLHemdnngCSGGR-YYLGMFLGGAYEEALGGV 572  
+
+                CS TTT--.-EEEEE   
+                   FNgfprpaeVlv<-*
+                   +N+f+ p++V v   
+  sp|Q9SI64|   573 HNLFGGPSVVRV    584  
+
+sp|C4L9A9|SPEA_TOLAT: domain 1 of 1, from 433 to 566: score 87.6, E = 2.2e-21
+                CS    EEEEEEEEEEE--SS-E .. ......EEEEES----S-.-CHHHHS
+                   *->tLvtnVigvkerggdrk.ld.lnerlafvyylddGvygslpdpalyd
+                      +L  +V+   +++ +r   d+lne+la+  ++++++++slpd +++d
+  sp|C4L9A9|   433    CLKLKVMLDPVNRMHRNlQDeLNEKLADKCFVNFSLFQSLPDAWGID 479  
+
+                CS ----EEECSS-TTSSEEEEEEE-----TT--SEE.        EEEEE..
+                   alhpilpvsrldeeptepvtlaGPtCdsgDvlarF........dvsLPlH
+                   +++pi+p+s ld++pt++ ++ + tCds++ + ++ ++ + ++  ++P  
+  sp|C4L9A9|   480 QIFPIMPLSGLDQQPTRRGVIMDITCDSDGMIKEYvdgvgienSLPMP-- 527  
+
+                CS .------  EEEES-----SGCC-B-TTT--  .-EEEEE   
+                   lelevGD..llvffdaGAYteslasnFNgfp..rpaeVlv<-*
+                    e++++++++++ff++GAY+e+l++ +N+f++++ aeV++   
+  sp|C4L9A9|   528 -EMRNDEtnYMGFFLVGAYQEILGDLHNLFGdtHSAEVCL    566  
+
+sp|A0KIP8|SPEA_AERHH: domain 1 of 1, from 348 to 564: score 78.4, E = 1.3e-18
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lvtn+ig     + ++ + ++++ ++  ++  ++  + ++++++  
+  sp|A0KIP8|   348    VLVTNIIGAEG-VEmndisapdddaptilqnmwkgwldlrsedpsll 393  
+
+                CS                                                   
+                   ..................................................
+                   +  +++  + ++ +++ + +  + +++   +  ++++    ++  ++ ++
+  sp|A0KIP8|   394 eifhdsvadlgdvntqytmgllnleqrawaemlhqntclalkellnpvnr 443  
+
+                CS  S-E..  ......EEEEES----S-.-CHHHHS----EEECSS-TTSSE
+                   .drkld..lnerlafvyylddGvygslpdpalydalhpilpvsrldeept
+                   ++r l+++l+e+la+  + ++++++slpd +++++++p++p+  l++  t
+  sp|A0KIP8|   444 nHRALAdeLSEKLADKCFANFSLFQSLPDAWGIGQVFPVMPLAGLERPLT 493  
+
+                CS EEEEEE-----TT--SEE.      EEEEE.. .------EEEES-----
+                   epvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAY
+                   ++ +l + tCds++ + ++ ++ + + +LP + +  ++   ++ff++GAY
+  sp|A0KIP8|   494 RRGILMDITCDSDGQVEHYvdglgvESTLPMPvYGEHEECHVGFFLVGAY 543  
+
+                CS SGCC-B-TTT--  .-EEEEE   
+                   teslasnFNgfp..rpaeVlv<-*
+                   +e+l++ +N+f+++++aeV++   
+  sp|A0KIP8|   544 QEILGDLHNLFGdtHCAEVWL    564  
+
+sp|A4SPD6|SPEA_AERS4: domain 1 of 1, from 348 to 564: score 73.6, E = 3.6e-17
+                CS    EEEEEEEEEEE--S                                 
+                   *->tLvtnVigvkergg.................................
+                      +Lvtn ig     + ++ + ++++ ++  ++  ++  + ++++++  
+  sp|A4SPD6|   348    VLVTNLIGAEG-VEmsdisapdedaptllqnmwqgwldlrgedpsll 393  
+
+                CS                                                   
+                   ..................................................
+                   +  +++  + ++ +++ + +  + +++   +  ++++    ++  ++ ++
+  sp|A4SPD6|   394 eifhdsvadlgdvntqytmgllnleqrawaemlhqntclalkemlnpvnr 443  
+
+                CS  S-E..  ......EEEEES----S-.-CHHHHS----EEECSS-TTSSE
+                   .drkld..lnerlafvyylddGvygslpdpalydalhpilpvsrldeept
+                   ++r l+++l+e+la+  + ++++++slpd +++++++p++p+  ld+   
+  sp|A4SPD6|   444 nHRALAdeLSEKLADKCFANFSLFQSLPDAWGIGQVFPVMPLTGLDRPLS 493  
+
+                CS EEEEEE-----TT--SEE.      EEEEE.. .------EEEES-----
+                   epvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAY
+                   ++ +l + tCds++ + ++ ++ + + +LP +++e ++  +++ff++GAY
+  sp|A4SPD6|   494 RRGILMDITCDSDGQVEHYvdglgvESTLPMPqYEENEVCYVGFFLVGAY 543  
+
+                CS SGCC-B-TTT--  .-EEEEE   
+                   teslasnFNgfp..rpaeVlv<-*
+                   +e+l++ +N+f+++++aeV++   
+  sp|A4SPD6|   544 QEILGDLHNLFGdtHCAEVCL    564  
+
+sp|P55709|Y4YA_RHISN: domain 1 of 1, from 324 to 439: score 23.1, E = 0.0018
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      + v+++  vk +g  +         +v+++ ++ +     ++ +   
+  sp|P55709|   324    ITVFRISRVKALGP-DS--------HVIFVEGSSFSA--CETWFASE 359  
+
+                CS --EEECSS     -TTSSEEEEEEE-----TT--S EE.EEEEE...---
+                   hpilpvsr.....ldeeptepvtlaGPtCdsgDvl.arFdvsLPlHlele
+                   + i p+  + ++   + p +++ laG +C+  Dv+++r   ++P    ++
+  sp|P55709|   360 FLIDPILVpatkaTVQLPPVRAYLAGHSCLDEDVIsNR-WLTFPT--APR 406  
+
+                CS ---EEEES-----SGCC-B -TTT--.-EEEEE   
+                   vGDllvffdaGAYteslas.nFNgfprpaeVlv<-*
+                   +GDllv+ ++G Y++ l  + F  +p+pa ++v   
+  sp|P55709|   407 AGDLLVYANTGGYQMDLLEnEFHRHPMPARFCV    439  
+
+sp|O81160|SPE2_THECC: domain 1 of 1, from 341 to 406: score -9.6, E = 1.1
+                CS    EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS--
+                   *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal
+                      +L  + ig ++    ++        ++y ++ +v++s+pd +++d+l
+  sp|O81160|   341    VL--KAIGASD----PV--------HTYNINLSVFTSIPDLWGIDQL 373  
+
+                CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE
+                   hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv
+                   +pi+p+++ld+ p ++ +l + tCds++++++                  
+  sp|O81160|   374 FPIVPIHKLDQRPGARGILSDLTCDSDGKINK------------------ 405  
+
+                CS ES-----SGCC-B-TTT--.-EEEEE   
+                   ffdaGAYteslasnFNgfprpaeVlv<-*
+                                            +   
+  sp|O81160|   406 -------------------------F    406  
+
+
+Histogram of all scores:
+score    obs    exp  (one = represents 368 sequences)
+-----    ---    ---
+<-187     18      -|=                                                          
+ -187      0      0|                                                           
+ -186      0      0|                                                           
+ -185      1      0|=                                                          
+ -184      1      0|=                                                          
+ -183      1      0|=                                                          
+ -182      1      0|=                                                          
+ -181      2      0|=                                                          
+ -180      2      0|=                                                          
+ -179      7      0|=                                                          
+ -178      6      0|=                                                          
+ -177     14      0|=                                                          
+ -176     14      0|=                                                          
+ -175     17      0|=                                                          
+ -174     17      0|=                                                          
+ -173     36      0|=                                                          
+ -172     48      0|=                                                          
+ -171     65      0|=                                                          
+ -170     61      0|=                                                          
+ -169     67      0|=                                                          
+ -168     79      0|=                                                          
+ -167    125      0|=                                                          
+ -166     97      0|=                                                          
+ -165    103      0|=                                                          
+ -164    133      0|=                                                          
+ -163    136      0|=                                                          
+ -162    109      0|=                                                          
+ -161    171      0|=                                                          
+ -160    122      0|=                                                          
+ -159    235      0|=                                                          
+ -158    158      0|=                                                          
+ -157    103      0|=                                                          
+ -156    149      0|=                                                          
+ -155    123      0|=                                                          
+ -154    154      0|=                                                          
+ -153    121      0|=                                                          
+ -152    115      0|=                                                          
+ -151     98      0|=                                                          
+ -150     86      0|=                                                          
+ -149    123      0|=                                                          
+ -148    112      0|=                                                          
+ -147    116      0|=                                                          
+ -146    113      0|=                                                          
+ -145    128      0|=                                                          
+ -144    123      0|=                                                          
+ -143    125      0|=                                                          
+ -142    153      0|=                                                          
+ -141    119      0|=                                                          
+ -140    132      0|=                                                          
+ -139    146      0|=                                                          
+ -138    183      0|=                                                          
+ -137    205      0|=                                                          
+ -136    297      0|=                                                          
+ -135    267      0|=                                                          
+ -134    278      0|=                                                          
+ -133    401      0|==                                                         
+ -132    571      0|==                                                         
+ -131    341      0|=                                                          
+ -130    426      0|==                                                         
+ -129    416      0|==                                                         
+ -128    361      0|=                                                          
+ -127    396      0|==                                                         
+ -126    439      0|==                                                         
+ -125    407      0|==                                                         
+ -124    416      0|==                                                         
+ -123    384      0|==                                                         
+ -122    403      0|==                                                         
+ -121    476      0|==                                                         
+ -120    497      0|==                                                         
+ -119    583      0|==                                                         
+ -118    506      0|==                                                         
+ -117    569      0|==                                                         
+ -116    653      0|==                                                         
+ -115    724      0|==                                                         
+ -114    817      0|===                                                        
+ -113    975      0|===                                                        
+ -112    867      0|===                                                        
+ -111   1055      0|===                                                        
+ -110   1129      0|====                                                       
+ -109   1130      0|====                                                       
+ -108   1173      0|====                                                       
+ -107   1303      0|====                                                       
+ -106   1511      0|=====                                                      
+ -105   1761      0|=====                                                      
+ -104   1598      0|=====                                                      
+ -103   1922      0|======                                                     
+ -102   1956      0|======                                                     
+ -101   2171      0|======                                                     
+ -100   2341      0|=======                                                    
+  -99   2531      0|=======                                                    
+  -98   2977      0|=========                                                  
+  -97   3395      0|==========                                                 
+  -96   3552      0|==========                                                 
+  -95   3786      0|===========                                                
+  -94   4681      0|=============                                              
+  -93   5018      0|==============                                             
+  -92   5434      0|===============                                            
+  -91   5767      0|================                                           
+  -90   6231      0|=================                                          
+  -89   7348      9|*===================                                       
+  -88   8000     63|*=====================                                     
+  -87   8823    285|*=======================                                   
+  -86   9568    957|==*=======================                                 
+  -85  10619   2509|======*======================                              
+  -84  12082   5363|==============*==================                          
+  -83  13504   9681|==========================*==========                      
+  -82  14969  15206|=========================================*                 
+  -81  15881  21295|============================================             * 
+  -80  17604  27128|================================================          *
+  -79  18526  31969|===================================================       *
+  -78  19609  35332|======================================================    *
+  -77  20829  37040|========================================================= *
+  -76  21100  37180|==========================================================*
+  -75  21674  36011|==========================================================*
+  -74  21586  33869|==========================================================*
+  -73  20963  31094|========================================================= *
+  -72  20694  27986|========================================================= *
+  -71  19128  24780|====================================================      *
+  -70  18231  21650|==================================================        *
+  -69  16942  18707|===============================================   *        
+  -68  14710  16019|========================================   *               
+  -67  13068  13616|====================================*                      
+  -66  11524  11502|===============================*                           
+  -65   9842   9668|==========================*                                
+  -64   8643   8093|=====================*==                                   
+  -63   7470   6752|==================*==                                      
+  -62   6099   5617|===============*=                                          
+  -61   5084   4663|============*=                                             
+  -60   4216   3863|==========*=                                               
+  -59   3641   3195|========*=                                                 
+  -58   2752   2640|=======*                                                   
+  -57   2382   2179|=====*=                                                    
+  -56   1809   1796|====*                                                      
+  -55   1477   1480|====*                                                      
+  -54   1200   1219|===*                                                       
+  -53    943   1003|==*                                                        
+  -52    814    825|==*                                                        
+  -51    660    679|=*                                                         
+  -50    542    558|=*                                                         
+  -49    333    459|=*                                                         
+  -48    341    377|=*                                                         
+  -47    246    310|*                                                          
+  -46    152    255|*                                                          
+  -45    131    209|*                                                          
+  -44    104    172|*                                                          
+  -43    103    141|*                                                          
+  -42     84    116|*                                                          
+  -41     58     95|*                                                          
+  -40     51     78|*                                                          
+  -39     41     64|*                                                          
+  -38     40     52|*                                                          
+  -37     43     43|*                                                          
+  -36     37     35|*                                                          
+  -35     24     29|*                                                          
+  -34     18     24|*                                                          
+  -33     20     19|*                                                          
+  -32     10     16|*                                                          
+  -31     13     13|*                                                          
+  -30      8     10|*                                                          
+  -29      9      9|*                                                          
+  -28      7      7|*                                                          
+  -27      4      6|*                                                          
+  -26      3      4|*                                                          
+  -25      3      4|*                                                          
+  -24      3      3|*                                                          
+  -23      3      2|*                                                          
+> -22    171      -|=                                                          
+
+
+% Statistical details of theoretical EVD fit:
+              mu =   -75.9194
+          lambda =     0.1968
+chi-sq statistic = 6930210.0000
+  P(chi-square)  =          0
+
+Total sequences searched: 516081
+
+Whole sequence top hits:
+tophits_s report:
+     Total hits:           450
+     Satisfying E cutoff:  170
+     Total memory:         106K
+
+Domain top hits:
+tophits_s report:
+     Total hits:           450
+     Satisfying E cutoff:  450
+     Total memory:         1738K
diff --git a/demotic/examples/example.hmm b/demotic/examples/example.hmm
new file mode 100644
index 0000000..4573ba9
--- /dev/null
+++ b/demotic/examples/example.hmm
@@ -0,0 +1,845 @@
+HMMER3/b [3.0 | March 2010]
+NAME  US2
+ACC   PF02476.8
+DESC  US2 family
+LENG  126
+ALPH  amino
+RF    no
+CS    no
+MAP   yes
+DATE  Mon Sep  7 22:59:25 2009
+NSEQ  15
+EFFN  2.047119
+CKSUM 2472745667
+GA    25.00 25.00
+TC    30.90 30.00
+NC    19.50 18.80
+STATS LOCAL MSV       -9.7952  0.71252
+STATS LOCAL VITERBI  -10.9655  0.71252
+STATS LOCAL FORWARD   -3.6497  0.71252
+HMM          A        C        D        E        F        G        H        I        K        L        M        N        P        Q        R        S        T        V        W        Y   
+            m->m     m->i     m->d     i->m     i->i     d->m     d->d
+  COMPO   2.40416  3.88727  3.02777  2.71996  3.50350  3.04063  3.68795  2.91827  2.73527  2.47221  3.79267  3.14159  2.96869  3.12969  2.82102  2.62876  2.82660  2.71389  3.82655  3.54759
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.00000        *
+      1   2.34670  4.31682  4.05439  3.47793  3.32776  3.84938  2.66035  2.76495  3.37158  1.91436  2.57028  3.74974  4.21994  3.62661  3.60715  3.12590  3.01755  2.57121  4.84475  2.07695      1 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+      2   4.15109  5.41832  5.42701  5.12700  3.63307  4.95879  5.56595  2.91941  4.90612  0.30047  3.51230  5.34507  5.30002  5.06992  4.93276  4.72612  4.42698  3.14284  5.71796  4.60202      2 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+      3   2.78851  3.29911  3.01652  2.11986  4.42653  3.55112  2.90636  3.87477  2.55345  3.42519  4.21014  1.66336  3.96682  2.90860  3.02817  2.48585  3.02647  3.50167  5.61559  4.24398      3 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+      4   2.85690  5.24798  2.62409  2.51660  4.61040  3.07734  3.84047  4.07378  2.62028  3.59668  4.37518  3.05819  4.00214  2.65336  2.76841  1.22963  3.10897  3.66811  5.76382  4.37314      4 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+      5   2.93924  5.43691  2.31179  1.96566  4.78534  1.78663  3.87667  4.27598  2.70919  3.76708  4.53863  3.01513  2.87530  2.99941  3.23222  2.10783  3.19391  3.84234  5.91568  4.48077      5 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+      6   2.27068  4.39378  3.82717  3.25144  3.51479  3.79342  4.05933  2.03881  3.15326  2.07705  3.49214  3.60400  4.16789  3.04032  2.21285  3.05466  3.00285  2.30840  4.99351  3.77854      6 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+      7   2.39276  4.35611  3.83322  3.26034  2.63725  3.77416  4.04981  2.17538  3.18990  2.30768  3.46595  3.60261  2.51739  3.46719  2.89178  2.41776  2.97839  2.61815  4.95386  3.73937      7 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+      8   2.77438  5.03745  2.80692  2.40818  4.30229  1.87938  3.78588  2.58629  2.57007  3.31114  4.11303  3.08503  3.97144  2.92514  2.40773  2.57025  3.00881  3.38593  5.53284  4.18255      8 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+      9   2.26357  4.86562  3.25007  2.86977  4.62106  3.45159  4.12399  4.05685  2.96536  3.65600  4.45463  1.32649  2.19487  3.28964  3.40591  2.81724  2.51509  3.59508  5.86238  4.54173      9 - -
+          2.68620  4.42227  2.77522  2.73126  3.46356  2.40515  3.72444  3.29356  2.67743  2.69357  4.24692  2.90349  2.73723  3.18149  2.89803  2.37889  2.77522  2.98521  4.58479  3.61505
+          0.10458  2.35793  5.36366  0.28724  1.38763  0.48576  0.95510
+     10   2.32704  4.96701  3.16601  2.60379  4.21007  3.59040  3.14525  3.62727  2.55302  3.22503  4.03822  3.12005  3.97901  2.53692  1.84100  2.79768  2.77734  2.98540  5.46067  2.92940     11 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     11   2.72336  4.43267  3.45279  2.90685  3.65155  3.63604  3.86407  3.04486  2.87173  2.07245  3.60133  3.33274  1.93599  3.18048  3.24557  2.50041  2.61116  2.81257  4.91977  3.80947     12 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     12   2.72570  4.10270  4.22073  3.67418  2.20076  3.80041  3.49817  2.31505  3.54206  2.16192  3.27217  3.82359  4.13957  3.73165  3.67617  3.12669  2.95191  2.43052  4.63614  1.87734     13 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     13   3.00014  5.46099  2.36280  2.47625  4.76619  3.55468  1.42248  4.27605  2.77767  3.78386  4.57652  2.29815  4.06623  3.06094  3.29449  2.24758  3.25917  3.86139  5.93222  4.49648     14 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     14   3.92339  5.15648  5.72897  5.15447  3.35224  5.27219  5.56342  2.51942  5.00180  0.54483  2.26912  5.39149  5.31040  4.92160  4.99167  4.66199  4.12892  2.42649  5.59142  4.63695     15 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     15   4.85749  5.90041  5.39625  5.32178  3.84205  4.72536  5.13523  5.02071  5.10285  4.25435  5.59852  5.36391  5.30839  5.43793  5.07308  5.05878  5.20805  4.91967  0.16029  3.81601     16 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     16   3.56350  4.76863  5.62145  5.17242  4.14285  5.16116  5.95321  1.23083  5.11210  2.55957  3.87461  5.33458  5.40059  5.38100  5.28881  4.60779  3.83071  0.74542  6.27674  5.04741     17 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     17   3.43528  4.71392  5.38626  4.81409  2.26701  4.76518  5.12956  1.80859  4.66313  1.25590  3.29436  4.90892  4.98925  4.71974  4.68509  4.11815  3.66378  1.42417  5.41890  4.30979     18 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     18   3.87040  5.50509  4.68630  4.69994  5.70927  0.14688  5.70011  5.56198  4.97457  5.08105  6.10671  4.85420  4.90648  5.23966  5.06488  4.07225  4.40293  4.94474  6.53971  5.85729     19 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     19   0.31531  4.78223  4.45526  4.35737  5.03015  3.57567  5.25133  4.29931  4.40029  4.13268  5.11470  4.24711  4.38688  4.66662  4.54301  3.14688  3.47852  3.79339  6.35538  5.28370     20 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     20   0.31531  4.78223  4.45526  4.35737  5.03015  3.57567  5.25133  4.29931  4.40029  4.13268  5.11470  4.24711  4.38688  4.66662  4.54301  3.14688  3.47852  3.79339  6.35538  5.28370     21 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     21   4.03711  6.08497  0.25387  3.15386  5.61866  4.00373  4.87395  5.43138  4.13203  4.90528  5.95805  3.72937  4.70525  4.15273  4.70455  3.95169  4.40712  5.00274  6.59667  5.44206     22 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     22   3.93892  5.15008  5.77759  5.24218  3.42460  5.33508  5.67002  1.74860  5.07997  0.56649  3.17831  5.47300  5.37951  5.03250  5.07876  4.75888  4.15533  2.55686  5.67642  4.67557     23 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     23   3.24328  0.65240  4.73283  4.36780  3.29555  4.02882  4.49402  3.41080  4.13265  3.11817  4.21058  4.33872  4.62005  4.40989  4.25036  3.52435  3.61940  3.20832  4.90946  2.39529     24 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     24   2.06339  5.21368  2.64191  2.11166  4.53942  3.53101  3.72155  4.00929  2.04159  3.50919  4.26123  3.00705  3.92666  2.82599  2.29393  2.72831  2.98763  2.87306  5.65695  4.26119     25 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     25   2.54643  4.76884  3.36491  2.87183  4.13254  3.58582  3.99261  3.08318  2.82459  3.16087  4.02260  3.32111  1.32327  2.65303  3.22193  2.88031  2.73584  3.18640  5.46993  4.18916     26 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     26   2.03032  4.09664  4.23339  3.68614  2.24299  3.80010  4.08854  2.44676  3.55183  2.36607  3.26580  3.83001  4.13940  3.73906  3.68101  3.12709  2.94866  1.61391  4.63967  3.56372     27 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     27   3.72273  4.97187  5.60523  5.03686  1.62498  5.03800  5.23249  1.56557  4.88677  1.07869  3.16188  5.15717  5.16391  4.82805  4.86307  4.40504  3.93517  2.62517  5.35978  4.20015     28 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     28   2.44428  5.28322  2.49931  1.55308  4.60656  3.53041  3.76648  4.08270  2.53723  2.95320  4.33871  2.58538  3.95514  2.87626  3.03607  2.27994  3.04731  3.66378  5.73142  4.32248     29 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     29   2.43771  3.85767  3.33854  2.77782  3.86996  3.64159  2.57755  3.25507  2.75455  2.26062  3.78402  2.57196  4.02724  2.71610  3.17596  2.64444  2.97655  2.99182  5.24050  2.78070     30 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     30   2.11185  4.57971  5.08334  4.53581  3.71250  4.58083  5.04141  1.09762  4.41166  1.75268  3.56292  4.68088  4.88734  4.60462  4.53933  3.93029  3.50926  1.83653  5.52801  4.35674     31 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     31   2.41613  5.08508  3.13824  2.61618  4.46174  3.56948  3.82409  3.89693  2.54154  3.44798  4.23948  3.12886  1.68539  2.44356  2.46416  2.45221  3.05388  3.51891  5.63320  4.28885     32 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.08170  4.64131  2.67645  0.61958  0.77255  0.48576  0.95510
+     32   2.41176  5.14236  2.49528  2.46979  4.44407  2.10611  3.74114  3.89739  2.17970  2.63045  4.20856  2.64990  3.93037  2.86049  2.99522  2.74389  2.99459  3.51203  5.61376  4.23145     33 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01543  4.57504  5.29739  0.61958  0.77255  0.60472  0.79016
+     33   2.37147  4.58485  3.54996  3.04298  4.14130  2.90462  4.11314  2.96164  3.02715  3.20406  4.05015  3.41101  1.47307  3.34651  3.42106  2.37813  2.38791  3.17703  5.50205  4.24368     34 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01543  4.57504  5.29739  0.61958  0.77255  0.60472  0.79016
+     34   3.28133  5.46966  3.73743  3.02134  4.96925  3.92701  3.85648  4.30355  1.03150  3.71796  4.56312  3.43547  4.28108  2.97861  1.64692  3.26346  2.62045  3.96007  5.74770  4.57184     35 - -
+          2.68597  4.42239  2.77534  2.73138  3.46328  2.40474  3.72509  3.29368  2.67755  2.69333  4.24704  2.90361  2.73754  3.18161  2.89815  2.37901  2.77534  2.98462  4.58491  3.61517
+          0.21606  1.66439  5.29739  1.00151  0.45780  0.41798  1.07405
+     35   4.12020  5.77258  4.70273  4.12388  5.34403  4.36876  4.70257  5.00705  2.96226  4.37865  5.40599  4.40019  4.87849  3.92946  0.26228  4.20114  4.36222  4.70599  6.13639  5.16848     39 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     36   3.00067  4.37825  4.79836  4.19826  2.23428  4.17508  4.48761  2.20511  4.02487  1.18339  2.58315  4.28025  4.49887  4.15161  4.08174  2.78503  3.22902  2.49394  4.95715  3.80106     40 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     37   3.20142  4.50461  5.12734  4.56746  3.07057  4.53164  4.96075  1.36756  4.42538  2.05089  3.54686  4.65720  4.83572  4.59637  4.50927  3.87543  2.71150  1.20694  5.42115  4.24200     41 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     38   1.39361  4.51592  3.85479  3.39230  3.71133  3.63185  4.23537  3.21064  3.33325  2.95118  3.87064  3.67169  4.17997  3.64000  3.63403  2.99089  2.57219  2.94696  5.20310  1.64218     42 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     39   1.54905  4.46587  4.70561  4.16481  3.75116  4.22780  4.75798  1.60994  4.05701  2.58772  3.65939  4.33202  4.63105  4.29230  4.24036  3.57201  2.82376  1.47443  5.40967  4.20932     43 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     40   2.80206  5.25881  3.05861  2.01840  4.60177  2.96537  3.73272  4.06691  1.71943  3.55058  4.30518  3.03935  3.95752  2.47595  2.44054  2.77044  3.02820  3.64960  5.68049  2.96306     44 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     41   2.56181  4.46955  4.94145  4.38488  3.71414  4.42785  4.86616  1.62997  4.25814  2.14004  3.61359  4.51811  4.75930  4.46742  4.38984  3.76432  2.54346  1.11266  5.41094  4.21484     45 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     42   2.28478  5.29270  2.66915  2.18486  4.63050  3.53114  3.80086  4.10589  2.58788  3.61069  4.37451  2.50200  2.01315  2.91596  3.08983  2.14852  3.08071  3.68768  5.76608  4.35667     46 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     43   2.84500  2.12405  1.43243  2.93438  4.66732  1.73723  4.26130  4.09978  3.19447  3.73439  4.56120  3.37590  4.12582  3.45757  3.64784  2.93227  3.22630  3.65647  5.94346  4.63582     47 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     44   1.73076  4.86535  3.22316  1.91151  4.22239  3.56142  3.91068  3.56417  2.73843  3.24192  4.07621  3.21063  4.01630  3.08084  3.18506  2.82534  2.03295  2.80522  5.52016  4.20433     48 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     45   3.64038  4.99068  4.87632  4.46692  1.47090  4.52208  3.97997  3.47679  4.29566  2.94000  4.08435  4.36300  2.93378  4.37224  4.37186  3.88101  3.88070  3.34978  1.12430  2.50203     49 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.16814  4.64131  1.93017  0.61958  0.77255  0.48576  0.95510
+     46   1.67298  4.49614  3.59956  3.08505  4.07102  3.40351  4.11842  3.44146  3.05844  3.13736  3.99032  3.42127  2.52609  3.37026  3.43807  1.98772  2.40492  2.35445  5.44873  4.20213     50 - -
+          2.68620  4.42227  2.77522  2.73089  3.46356  2.40515  3.72497  3.29356  2.67743  2.69357  4.24692  2.90349  2.73742  3.18149  2.89803  2.37889  2.77522  2.98521  4.58479  3.61505
+          0.11958  2.23250  5.21233  0.29166  1.37446  0.35867  1.19934
+     47   2.96470  5.38207  2.77877  2.22006  4.71669  1.36947  2.89548  4.18964  2.73994  3.71164  4.50531  2.52332  4.05493  3.04516  3.23951  2.54642  3.22211  3.78644  5.88183  4.47100     52 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     48   2.20425  5.01731  3.10319  2.23044  4.27793  2.86778  3.76095  3.70650  2.06188  2.86384  2.93099  3.07528  2.89449  2.89637  3.00905  2.76212  2.97824  3.36185  5.50582  4.15485     53 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     49   2.30135  4.84691  3.31652  2.79452  4.42241  3.48554  3.97509  3.85182  2.77161  3.44739  4.24678  3.25069  2.21982  3.13021  2.64914  1.52585  2.58061  3.44548  5.66621  4.34831     54 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     50   3.99686  5.30863  5.10112  4.74645  2.82221  4.70120  4.31354  3.50367  4.33812  2.14339  4.11034  4.67394  5.08982  4.61015  4.40711  4.24545  4.25596  3.52763  0.59778  2.85415     55 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.30073  4.64131  1.38598  0.61958  0.77255  0.48576  0.95510
+     51   2.03752  4.94802  3.00713  2.23023  4.26292  3.46281  3.70080  3.69271  2.46242  3.26407  4.06015  3.00222  2.61085  2.83549  2.48455  2.69077  2.51586  3.33389  5.47248  4.12297     56 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.10978  4.35975  2.39489  0.61958  0.77255  0.30028  1.34944
+     52   2.78752  4.62920  3.49321  2.91952  3.76676  3.71011  3.92368  2.59315  2.06265  1.85051  3.68485  3.36579  4.08747  2.31584  3.15400  2.94924  3.01542  2.60947  5.18551  3.93650     57 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01543  4.57504  5.29739  0.61958  0.77255  0.60472  0.79016
+     53   3.19877  4.98956  4.05858  3.82531  4.33420  3.81429  4.77389  3.80308  3.71760  2.67141  4.55443  4.07120  0.52882  4.15314  3.95272  3.39356  3.62965  3.56467  5.80839  4.53606     58 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.09455  4.57504  2.52684  0.61958  0.77255  0.60472  0.79016
+     54   2.72614  3.87252  1.87457  2.07765  4.46358  3.48035  3.71174  3.92549  2.47938  3.44802  4.21393  2.97477  3.02984  2.82611  2.96920  2.37500  2.69609  3.52392  5.61596  4.22508     59 - -
+          2.68667  4.41808  2.77569  2.73149  3.46098  2.40517  3.72544  3.29322  2.67687  2.69300  4.24739  2.90341  2.73789  3.18196  2.89850  2.37903  2.77569  2.98488  4.58526  3.61498
+          0.35666  1.22220  5.21953  1.80423  0.17985  0.36285  1.18971
+     55   2.82738  5.29095  2.95967  1.87795  4.63423  2.49095  3.76871  4.10583  2.49769  3.59536  4.35356  2.28315  3.96997  2.87722  1.99156  2.79154  2.81283  3.68523  5.73363  4.33756     67 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     56   2.78922  4.23423  4.35591  3.76527  2.63729  3.91523  4.22744  2.13010  3.62688  1.87923  3.32171  3.93482  4.27856  3.83165  2.53935  3.20881  2.23219  2.01844  4.85797  3.67240     68 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     57   2.38074  5.03024  3.09531  2.33992  4.29399  2.94771  3.75486  2.63043  2.32212  2.71955  4.09356  3.06720  3.47526  2.52234  2.63774  2.48841  2.97541  3.37643  5.51470  4.15987     69 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     58   2.78879  4.90186  3.17858  2.41852  4.12972  3.60799  3.16299  3.53492  2.64609  2.60343  3.99585  3.17064  1.72737  3.01181  3.08057  2.84576  2.41678  3.23316  5.42607  4.11139     70 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     59   2.39275  4.33540  3.88507  2.66498  3.45173  2.52724  4.06734  2.28419  3.23486  1.77439  3.44426  3.63792  4.16418  3.50614  3.51515  3.05462  2.98103  2.59271  3.33792  3.72418     71 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     60   2.74514  4.63316  2.93543  2.42392  3.79854  3.66139  3.89230  2.69765  2.81065  1.98134  3.72632  3.30190  4.04546  3.13845  2.88283  2.88797  2.09639  2.92271  3.88357  3.92374     72 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     61   2.32596  4.79850  2.42935  2.84419  4.26188  3.53771  4.03477  3.55235  2.90539  3.28593  4.13553  3.30021  4.05202  3.22528  3.34358  2.85181  1.27931  2.69699  5.59054  4.28935     73 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     62   2.42824  4.68262  2.77844  2.90534  4.04268  3.57091  4.01348  3.37408  2.91847  3.09034  3.95016  3.34315  4.05319  3.23835  3.33441  1.82452  2.59697  1.68659  5.41199  4.13710     74 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     63   2.29808  5.22616  2.58335  2.02724  4.56612  3.01787  3.74303  4.04010  2.49876  3.54017  4.29266  3.00699  2.80153  2.84948  2.99160  2.19018  2.43669  3.61929  5.68916  4.28738     75 - -
+          2.68649  4.42035  2.77581  2.73185  3.46366  2.40575  3.72302  3.29334  2.67687  2.69297  4.24752  2.90370  2.73722  3.18161  2.89772  2.37899  2.77581  2.98482  4.58539  3.61326
+          0.39134  1.36633  2.67645  2.01947  0.14240  0.48576  0.95510
+     64   2.39294  4.58200  4.34732  3.83453  3.14741  4.01480  4.23215  2.90913  3.59517  2.08340  3.60540  4.01317  4.44645  3.91421  3.78391  3.36479  3.31947  2.78142  1.16013  3.32325     85 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01543  4.57504  5.29739  0.61958  0.77255  0.60472  0.79016
+     65   2.75020  5.13208  2.62467  2.08677  4.44215  2.86703  3.74051  3.89580  2.51233  3.43235  4.20593  3.01082  2.64215  2.85932  2.99902  2.73664  2.02616  2.99199  5.61255  4.22980     86 - -
+          2.68625  4.42087  2.77491  2.73065  3.46390  2.40481  3.72450  3.29390  2.67777  2.69391  4.24726  2.90383  2.73746  3.18135  2.89801  2.37902  2.77522  2.98472  4.58513  3.61539
+          0.18077  1.83028  5.29739  1.94899  0.15364  0.60472  0.79016
+     66   2.61257  4.58423  3.66818  3.48540  4.90981  2.34451  4.66788  4.38902  3.67759  4.03487  4.83384  3.65629  0.85165  3.93071  4.00011  2.14541  3.12375  3.72773  6.21145  5.00141     96 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01543  4.57504  5.29739  0.61958  0.77255  0.60472  0.79016
+     67   2.72388  3.22449  4.44573  3.84595  1.96777  3.86527  4.18459  2.32373  2.89607  2.06995  3.25437  3.94403  4.23098  3.85679  3.77394  3.16556  2.71362  2.16147  4.75674  2.85826     97 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01543  4.57504  5.29739  0.61958  0.77255  0.60472  0.79016
+     68   2.72492  4.92142  2.57407  2.40502  2.92970  3.55328  3.76030  3.57461  2.56264  2.46375  3.99332  3.08524  2.53789  2.91184  2.70902  2.41754  2.95661  3.25278  5.42491  4.09032     98 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01543  4.57504  5.29739  0.61958  0.77255  0.60472  0.79016
+     69   2.35817  5.24838  2.23957  2.15900  4.58170  3.02246  3.71207  4.06280  2.19275  3.54882  4.29521  2.97071  3.91032  2.46888  2.95856  2.71755  2.24389  3.63329  5.68700  4.27705     99 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01543  4.57504  5.29739  0.61958  0.77255  0.41798  1.07405
+     70   2.10580  5.22867  2.60514  2.24588  4.55129  3.52745  2.61242  4.02325  2.49077  3.52562  4.27973  2.76084  2.77775  2.84281  2.98291  2.73935  2.38061  3.60811  5.67701  4.27624    100 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     71   2.30821  4.74213  3.29265  2.73265  2.86333  3.62538  2.97949  2.99675  2.40268  2.97901  3.82970  3.22071  2.80885  3.05170  3.14673  2.47482  2.33891  3.04662  5.28314  3.99317    101 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     72   2.76035  4.85464  3.20015  2.22279  4.06786  3.60412  3.82528  3.46579  2.65483  2.02582  3.21353  2.27334  3.99948  3.00247  3.09980  2.20458  2.99348  3.17129  5.38002  4.06880    102 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     73   2.79846  5.27280  2.14277  2.45339  4.60551  3.52724  2.45418  4.08343  2.52399  3.57887  4.33277  2.56736  3.09024  2.86715  3.02111  2.03930  2.70295  3.66036  5.72523  4.31678    103 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     74   2.74836  5.03313  3.09727  2.27438  3.29803  3.55940  3.75728  3.72962  2.08501  3.30330  4.09756  3.07013  2.36083  2.88986  2.79318  2.23567  2.97952  2.88057  5.51753  4.16356    104 - -
+          2.68621  4.42228  2.77496  2.73126  3.46357  2.40516  3.72498  3.29313  2.67744  2.69358  4.24693  2.90350  2.73743  3.18149  2.89804  2.37890  2.77523  2.98521  4.58480  3.61506
+          0.07407  2.70739  5.36366  0.65812  0.72944  0.48576  0.95510
+     75   2.42228  4.27085  4.60247  3.39830  2.81841  4.04066  4.37198  1.82485  3.85113  1.42819  3.31868  4.11840  4.39193  4.02455  3.94827  3.34672  3.10543  2.04858  4.92596  3.75011    107 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     76   2.37360  4.86695  3.19530  2.10976  4.08423  3.59405  3.08153  3.48866  2.39223  2.85555  3.94424  3.14684  3.98297  2.97248  3.07679  2.47191  2.97663  2.13431  5.38440  3.48468    108 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     77   1.94217  4.61639  3.41701  2.85434  2.78884  3.66523  3.06353  2.79409  2.52558  2.84034  3.71119  2.94991  3.16549  3.15140  3.23103  2.89289  2.71710  2.59684  5.17678  3.91292    109 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     78   2.74578  3.94748  3.19048  2.63289  4.11286  2.78452  3.80265  3.51986  2.37241  2.27885  3.96639  2.86759  2.43690  2.96736  2.83705  2.38498  2.97905  3.21216  5.40390  4.08420    110 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     79   2.74569  4.69082  2.60611  2.78052  2.98070  2.96585  3.86930  2.78082  2.76202  2.25119  3.78052  3.25795  2.42900  2.75389  3.18390  2.86503  2.97752  2.98688  5.23937  3.96005    111 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     80   2.74056  4.70941  3.32596  2.76639  3.90283  2.87289  3.86551  2.97534  2.74716  2.95365  3.17317  2.57688  3.18851  3.08087  3.17336  2.01621  2.55937  2.50772  5.26569  3.98248    112 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     81   2.28712  4.72826  3.02403  2.74345  3.11891  2.82814  3.85133  3.30118  2.72552  2.34276  3.81614  2.92981  4.01568  3.06081  2.61785  2.57511  2.71367  2.60092  5.27119  3.98402    113 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     82   2.74444  4.42520  3.68966  3.12023  3.19657  3.74097  4.00025  2.57803  2.30364  2.45174  2.66600  3.50653  4.11894  2.91955  3.40146  2.64770  2.58601  2.69474  5.01184  2.45012    114 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     83   2.56816  5.22758  2.68666  1.94608  4.55876  3.52910  3.71909  4.03232  2.24953  3.52536  4.27378  3.00288  3.92501  2.82166  1.91845  2.72616  2.53356  3.26055  5.66744  4.26842    115 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     84   2.42538  2.47093  4.62834  4.02571  3.27778  3.95930  4.29258  2.07207  3.84225  1.86091  3.29022  4.07729  4.32050  3.99979  3.90023  3.26756  3.02658  2.05522  4.82267  2.32966    116 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     85   2.47112  3.26773  4.33403  3.74124  2.83042  3.87048  4.18214  2.04917  3.60061  2.38294  2.77387  3.89889  4.23807  2.87177  2.86448  3.16350  2.98034  1.84263  4.80954  3.62268    117 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     86   4.62256  5.61391  5.43303  5.32992  1.84687  5.12571  3.85539  4.20347  5.12491  3.37351  4.74571  4.70071  5.40204  4.85684  4.98076  4.54800  4.83016  4.16452  3.93769  0.43575    118 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+     87   1.96673  5.33019  2.53054  2.16920  4.65468  1.98052  3.78783  4.13468  2.26553  3.62789  4.38695  3.00499  3.97245  2.65214  3.06629  2.80062  3.08244  3.71183  5.77419  4.35949    119 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.06728  4.64131  2.89282  0.61958  0.77255  0.48576  0.95510
+     88   2.90754  4.33577  4.45194  3.87227  3.48111  4.07103  4.41088  1.92567  3.72660  2.15469  3.43962  4.07205  4.42595  3.96893  2.98149  3.37369  2.67548  1.22697  5.06705  3.87512    120 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01521  4.58925  5.31159  0.61958  0.77255  0.58102  0.81945
+     89   3.30302  4.57994  5.21901  4.68568  3.80969  4.70762  5.21112  1.54308  4.57144  1.85404  3.63720  4.82097  4.99160  4.77616  4.69778  4.07202  2.80841  0.99381  5.66636  4.47973    121 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01521  4.58925  5.31159  0.61958  0.77255  0.58102  0.81945
+     90   2.72868  4.99699  2.12448  2.53012  3.40456  2.45330  3.07671  3.68394  2.52654  2.94416  4.06258  3.05751  3.93511  2.88022  2.54063  2.74452  2.96017  2.98094  5.48355  4.13115    122 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01521  4.58925  5.31159  0.61958  0.77255  0.58102  0.81945
+     91   2.79977  5.19222  3.01090  2.51028  4.53848  3.54321  3.76159  3.99419  2.47939  3.50862  4.28068  2.35518  1.95202  2.53758  2.50799  2.26043  3.03690  3.59451  5.66478  4.29061    123 - -
+          2.68574  4.41907  2.77526  2.73109  3.46437  2.40495  3.72501  3.29381  2.67824  2.69389  4.24690  2.90408  2.73754  3.18230  2.89546  2.37911  2.77535  2.98532  4.58199  3.61587
+          1.05763  1.10681  1.13286  2.12644  0.12699  0.58102  0.81945
+     92   2.26005  4.91935  2.94101  2.14691  4.24996  2.65053  3.66402  3.68148  2.42085  3.24816  4.04378  2.95623  3.83710  2.79843  2.35002  2.65394  2.52008  3.31725  5.45120  4.10061    136 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.02235  4.20773  4.93007  0.61958  0.77255  1.01229  0.45159
+     93   2.26219  4.49754  3.34404  2.79287  3.68154  3.51577  3.79826  3.09369  2.66364  2.77034  3.64939  3.22467  2.49152  3.05716  2.67931  2.78117  2.87973  2.83651  2.66072  3.79968    137 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.02235  4.20773  4.93007  0.61958  0.77255  0.81559  0.58407
+     94   2.80635  4.27256  4.24559  3.66875  2.64561  2.82219  4.20442  2.50987  3.54662  1.35952  2.53565  3.88975  4.26142  3.75660  3.72684  3.20825  3.03956  2.41409  4.82782  3.62643    138 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.02021  4.30734  5.02969  0.61958  0.77255  0.93000  0.50179
+     95   3.01060  5.22754  3.27816  2.72492  4.52871  3.67292  2.74707  4.01786  2.15364  3.49098  4.32819  2.58856  4.06701  2.86482  1.26875  2.99998  3.20856  3.67319  5.53801  4.25958    139 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.02021  4.30734  5.02969  0.61958  0.77255  0.93000  0.50179
+     96   2.32623  4.62323  3.19133  2.25421  3.12005  3.51784  3.75335  3.20149  2.62811  2.46873  3.72025  3.12589  3.00272  2.96370  3.05684  2.31183  2.87383  2.92990  5.17444  3.88681    140 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.02021  4.30734  5.02969  0.61958  0.77255  0.60292  0.79232
+     97   2.31757  4.96346  3.01754  2.09657  4.22339  2.85281  3.73612  3.64469  2.52210  2.28282  4.04245  3.03624  3.92000  2.22035  2.98232  2.74225  2.95737  3.30866  5.46338  4.11879    141 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01727  4.46328  5.18562  0.61958  0.77255  0.76435  0.62668
+     98   2.04496  4.62240  3.29322  2.39046  3.82375  3.57239  3.82863  2.48632  2.72251  2.87473  3.73653  3.21209  3.04106  3.05400  3.14159  2.27883  2.92157  2.64318  5.19745  3.92027    142 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01727  4.46328  5.18562  0.61958  0.77255  0.76435  0.62668
+     99   1.99633  4.81272  3.16335  2.62373  4.16065  3.48591  3.79835  3.57143  2.59990  3.18639  4.00428  2.60994  3.92520  2.95947  2.53979  1.92523  2.93532  2.70333  5.43398  4.11483    143 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01727  4.46328  5.18562  0.61958  0.77255  0.76435  0.62668
+    100   2.70434  4.84872  2.74517  2.57615  4.08620  3.53201  3.75368  3.49009  2.55688  2.15744  3.93693  3.08608  2.46142  2.91712  2.50182  2.75389  2.55149  3.18072  5.37090  4.05021    144 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01727  4.46328  5.18562  0.61958  0.77255  0.76435  0.62668
+    101   2.73290  3.29948  3.32299  2.74587  3.87302  3.61272  2.86448  3.26427  2.35671  2.43542  3.78140  3.21686  3.99378  3.01666  1.95228  2.84196  2.95906  2.99869  5.21547  3.35682    145 - -
+          2.68619  4.42226  2.77521  2.73124  3.46355  2.40514  3.72496  3.29355  2.67742  2.69356  4.24691  2.90325  2.73741  3.18147  2.89802  2.37888  2.77521  2.98519  4.58478  3.61504
+          0.07194  2.75173  5.18562  0.38748  1.13559  0.34420  1.23369
+    102   2.75533  3.45647  3.47345  2.91624  3.83534  2.96450  3.94273  3.21754  2.38063  2.90106  3.77237  3.35646  1.67407  3.19684  3.22187  2.90793  3.00408  2.95930  3.25659  3.96431    147 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    103   2.07247  5.10813  2.63379  2.51910  4.41754  3.54115  3.77398  3.86351  2.54899  3.06459  4.19608  3.05346  2.05916  2.52606  3.02946  2.41242  3.00694  3.48706  5.60699  4.23510    148 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    104   2.48316  5.17633  2.61612  2.21490  4.49041  2.86532  3.26928  3.17324  2.34684  3.46828  4.22534  2.80592  3.92141  2.82672  2.53408  2.47717  2.97401  2.70097  5.62798  4.23653    149 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    105   2.46238  4.66589  3.37298  2.81154  3.84738  2.94419  3.88411  2.81844  2.78366  2.61044  3.76567  3.28083  2.26624  3.11639  2.40770  2.87331  2.58030  2.72127  5.22686  3.95367    150 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    106   2.24969  5.18261  3.02028  2.34513  4.50002  2.92416  3.71971  3.96582  2.26215  3.16840  4.23224  2.62895  2.63145  2.82642  2.60656  2.47703  2.68781  3.55864  5.63359  4.24132    151 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    107   2.54480  5.19454  3.01926  2.28075  4.51583  3.52840  3.13617  3.98409  2.22358  3.48883  3.25181  3.00605  2.86978  2.62450  2.33315  2.31545  2.73674  3.57242  5.64099  4.24677    152 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    108   2.75016  4.94404  3.15695  2.59825  4.18659  3.57990  3.78426  3.60250  2.57547  2.91718  4.01983  2.74281  2.45182  2.93536  2.20518  2.34303  2.41397  3.27998  4.04575  4.11719    153 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    109   2.26398  4.05764  3.06560  2.51036  4.39901  2.54896  3.74443  3.84602  2.25272  3.39150  4.16777  3.04422  2.87524  2.65445  2.72131  2.11768  2.97823  3.46818  5.57898  4.20769    154 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.07101  4.64131  2.83186  0.61958  0.77255  0.48576  0.95510
+    110   2.76046  5.18472  3.00395  2.14146  4.50877  2.70367  3.72285  3.96985  2.25781  3.48012  4.24247  3.01090  2.26603  2.83274  2.52479  2.73721  2.40165  3.56643  5.63555  4.25085    155 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01527  4.58557  5.30792  0.61958  0.77255  0.58724  0.81161
+    111   2.72495  3.64578  2.90703  2.43828  4.04379  3.57864  3.26343  3.12969  2.32905  2.35403  3.90883  3.13631  3.96679  2.96174  2.23423  2.78756  2.74555  3.14825  3.96310  4.03786    156 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01527  4.58557  5.30792  0.61958  0.77255  0.58724  0.81161
+    112   2.36733  5.16210  2.66615  2.21124  4.47780  2.57108  3.70469  3.94260  2.45333  3.01517  4.21303  2.99176  3.34689  2.81242  2.29049  2.70597  2.53911  3.53735  5.61502  4.22334    157 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01527  4.58557  5.30792  0.61958  0.77255  0.42716  1.05658
+    113   2.23858  5.19833  2.68293  2.32073  4.52113  3.52509  3.71637  3.46002  2.46106  3.49447  4.24607  2.64293  3.16012  2.82081  2.30857  2.18857  2.73621  3.57719  5.64569  4.24893    158 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    114   2.77687  5.17264  2.99356  2.19205  4.51615  2.93141  3.77364  3.97692  2.53960  3.50160  4.26921  3.03705  2.84869  2.63710  3.02507  1.68315  2.47437  3.57428  5.67067  4.28366    159 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    115   2.75506  5.14749  3.05477  2.49544  4.45073  3.54533  2.93714  3.90425  1.95330  3.43204  4.20043  3.03276  3.48597  2.66623  2.19703  2.34045  2.74582  3.51581  4.10147  3.44313    160 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.04795  4.64131  3.29222  0.61958  0.77255  0.48576  0.95510
+    116   2.29258  5.21021  2.66721  2.09998  4.54181  3.15684  3.69956  4.01831  2.20694  3.50980  3.67373  2.98317  3.02034  2.80053  2.69211  2.27795  2.73869  3.59366  5.65123  4.24857    161 - -
+          2.68608  4.42153  2.77540  2.73125  3.46374  2.40533  3.72515  3.29374  2.67737  2.69375  4.24710  2.90367  2.73659  3.18167  2.89821  2.37865  2.77502  2.98506  4.58497  3.61523
+          1.03604  1.08222  1.18319  0.78012  0.61314  0.54780  0.86328
+    117   2.25146  3.34797  3.21827  2.66147  3.80998  3.48648  2.82319  3.19585  2.62422  2.85967  3.71377  3.13239  3.29098  2.97014  2.76963  2.72203  2.28613  2.91880  5.16656  3.88540    165 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.02143  4.24953  4.97187  0.61958  0.77255  0.97957  0.47076
+    118   2.61874  3.30041  3.32643  2.76674  3.67714  3.52511  3.79442  3.06405  2.69957  2.74844  3.62048  3.21139  2.41839  3.04980  2.54662  2.55147  2.86257  2.80887  5.07144  2.94192    166 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.02143  4.24953  4.97187  0.61958  0.77255  0.38435  1.14223
+    119   2.36083  5.15406  2.78361  2.44457  4.47236  3.18076  3.69921  3.93730  2.30369  3.45009  4.20725  2.36792  3.89960  2.80680  2.58538  2.05051  2.69872  3.13452  5.60931  4.21780    167 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01553  4.56863  5.29098  0.61958  0.77255  0.41262  1.08446
+    120   2.45907  5.16227  3.06375  2.51036  4.48827  2.61532  3.74374  3.94254  2.33588  3.46364  4.23106  3.04487  3.94748  2.61687  1.91221  2.29289  2.58381  3.54755  5.62736  4.25201    168 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    121   2.16139  4.89249  3.18907  2.63201  4.13532  3.58364  3.80487  3.54372  2.61330  2.54550  3.98445  2.86416  2.78143  2.96674  2.24003  2.31734  2.98107  2.96206  5.42013  4.09838    169 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    122   2.17513  4.59415  3.46236  2.90262  2.59822  3.66477  3.92779  3.14543  2.86587  2.61239  3.71079  3.34807  2.23059  3.19205  2.76821  2.35756  2.98284  2.89681  5.17528  3.91568    170 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    123   1.99124  0.82259  4.67453  4.42051  4.70714  3.29895  5.05582  4.04283  4.30022  3.83321  4.67760  4.05218  4.12111  4.48969  4.40915  1.92222  3.09031  3.47984  6.12915  5.00807    171 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    124   1.93752  1.92547  3.85874  3.30112  3.06163  3.70994  4.11007  2.92026  3.22956  2.65677  3.56237  3.62086  4.14531  2.82845  3.52799  3.00106  2.34259  2.69523  5.04878  3.83334    172 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    125   2.18980  3.60284  3.75529  2.69618  3.52002  3.31856  4.02480  2.04105  3.12555  2.60032  3.50132  3.55083  4.13272  3.41120  3.44366  2.41189  2.34683  2.66004  3.91422  3.76507    173 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.01443  4.64131  5.36366  0.61958  0.77255  0.48576  0.95510
+    126   2.20111  2.53484  3.59831  3.04097  3.72004  3.66353  4.00344  3.08392  2.75594  2.24706  3.67475  3.44385  2.80871  3.30799  3.36083  2.05562  2.98643  2.83921  5.14818  3.90786    174 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00974  4.63662        *  0.61958  0.77255  0.00000        *
+//
+HMMER3/b [3.0 | March 2010]
+NAME  Glyco_transf_28
+ACC   PF03033.13
+DESC  Glycosyltransferase family 28 N-terminal domain
+LENG  139
+ALPH  amino
+RF    no
+CS    yes
+MAP   yes
+DATE  Thu Sep 17 23:04:26 2009
+NSEQ  43
+EFFN  7.057312
+CKSUM 3380827595
+GA    26.20 26.20
+TC    26.20 26.20
+NC    26.10 26.10
+STATS LOCAL MSV      -10.0618  0.71071
+STATS LOCAL VITERBI  -10.4218  0.71071
+STATS LOCAL FORWARD   -4.4128  0.71071
+HMM          A        C        D        E        F        G        H        I        K        L        M        N        P        Q        R        S        T        V        W        Y   
+            m->m     m->i     m->d     i->m     i->i     d->m     d->d
+  COMPO   2.29906  4.54364  3.15651  2.76769  3.29612  2.64211  3.58261  2.82374  2.88391  2.34808  3.70210  3.32574  3.10653  3.21062  2.94601  2.81037  2.84731  2.47823  4.62934  3.62497
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.00000        *
+      1   2.93769  3.13941  5.38672  4.77915  1.70122  4.59823  4.94655  1.56606  4.56954  2.44086  3.87341  4.76449  4.95352  4.70242  4.57916  3.91536  3.63400  1.37878  5.42857  3.63284      1 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+      2   1.77095  4.68927  5.27047  4.65832  3.31701  3.83403  4.82903  2.39711  4.44825  1.50386  3.45619  4.65027  4.85348  4.58284  4.46249  3.80410  2.61655  1.47616  5.32437  4.14802      2 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+      3   3.45918  5.40997  6.12011  5.52243  1.94161  5.40694  5.74121  2.17953  5.34266  0.78755  3.05347  5.58027  5.62291  5.34535  5.31319  4.75257  4.34343  1.97842  5.99770  4.93331      3 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+      4   1.20249  4.71476  5.01357  4.41617  3.81699  4.43509  4.76547  2.76611  4.25382  2.00341  3.24629  4.51673  4.80462  4.43173  4.35078  2.51054  1.90927  2.46657  5.34242  4.15992      4 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+      5   1.99076  3.76121  4.62866  4.06843  4.09298  1.74549  4.75721  2.82870  3.98098  3.18175  4.09010  4.31070  3.62899  4.23085  4.22666  1.89520  2.10421  2.12195  5.58008  4.38005      5 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+      6   3.05486  3.17617  5.19573  4.58377  2.89352  1.40599  3.60302  2.22944  4.37947  2.59647  2.94002  4.59133  4.80934  4.51996  4.40504  2.86784  3.51340  2.58711  5.28457  2.19123      6 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+      7   2.90647  5.45675  5.35380  5.39797  6.34621  0.24861  6.30413  5.88868  5.65251  5.56345  6.30355  5.02196  2.59956  5.71616  5.70684  3.74536  4.12958  4.91021  7.63753  6.63559      7 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+      8   2.34387  5.36275  4.84523  4.50611  5.62866  4.14471  3.59200  5.08251  4.51339  4.74135  5.53867  4.58734  4.91065  4.79173  4.81730  1.42337  0.66712  4.46356  6.95540  5.76208      8 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+      9   1.95982  5.39273  4.39775  3.89193  5.32274  1.43454  4.98655  4.75551  3.80515  4.37259  5.16973  4.21038  4.76129  4.17417  1.04376  2.96811  3.18345  3.41887  6.58573  5.32380      9 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     10   2.58632  5.35332  5.69345  5.71014  6.28930  0.25536  6.35160  5.81044  5.74688  5.50139  6.22075  5.04638  5.02879  5.78916  5.72542  2.98462  3.14628  4.81448  7.62314  6.62906     10 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     11   3.25814  6.94187  0.89104  3.31537  6.24123  4.41195  0.91182  6.01827  4.35918  5.46015  6.39812  3.90853  5.13197  4.34973  5.06102  4.18591  4.69472  5.50334  7.49624  5.87450     11 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     12   3.90367  5.18630  5.94646  5.38362  2.46567  5.25482  5.68940  1.33591  5.22278  2.13244  3.53464  5.42275  5.54472  5.35790  5.25870  4.60625  3.18817  0.97168  6.08782  4.92497     12 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     13   3.22232  5.27822  3.72298  1.45248  1.99544  4.08888  3.61428  3.17259  3.15001  3.51945  4.36031  3.66254  4.47638  2.12662  3.59291  2.96374  3.09243  3.29794  5.80516  2.66914     13 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     14   3.48649  5.29936  4.47447  4.16607  4.84597  3.32975  5.14778  3.01735  4.16787  3.26115  4.84776  3.40279  0.43566  4.49613  4.45155  3.69924  3.88213  3.86894  6.28840  5.05292     14 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     15   1.53476  2.80103  5.12925  4.52164  2.19640  3.10133  4.76405  2.37630  4.33128  2.00233  3.79164  3.67050  4.80133  4.48397  4.37992  2.45051  3.51226  2.92128  5.29325  3.07608     15 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     16   2.23872  4.67144  5.21055  4.59885  3.76547  4.45731  3.90974  1.96305  3.55578  1.54186  3.04678  4.60491  4.82083  4.53407  4.41834  3.76705  3.03012  1.38752  5.29624  4.11920     16 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     17   0.64640  5.20116  4.86088  4.39518  4.97477  3.23067  5.26249  4.35449  4.34217  3.31640  4.92946  4.51377  2.17913  4.60590  4.63081  2.35957  3.79305  2.78916  6.39453  5.19925     17 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     18   3.30712  5.06645  5.74351  5.14848  2.78190  4.99659  5.36022  2.18938  4.95723  0.90493  3.48161  5.16414  5.30378  5.05860  4.96393  4.32753  3.47155  1.43086  5.76818  4.62457     18 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     19   1.07810  4.81373  4.49293  3.91499  3.50455  1.84064  4.60811  2.83063  3.45245  2.79008  3.37036  4.20966  4.69595  4.08450  3.57683  3.19768  3.13014  2.76876  5.41712  4.21299     19 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     20   2.96691  5.68829  2.79227  2.26176  5.02518  3.97404  3.74366  3.67819  2.14960  2.54298  4.73110  2.96936  3.65265  2.54279  2.12052  3.16329  3.08283  2.65727  2.84086  4.71993     20 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     21   1.82278  5.70319  3.45057  1.48668  5.04581  2.65068  3.46686  4.52945  2.52120  4.00704  4.74467  3.44258  4.36746  2.98482  2.41797  3.16335  2.56127  4.09255  6.13697  3.56547     21 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     22   3.36704  5.76646  6.50911  5.93220  2.76232  5.86450  6.18025  3.23546  5.78063  0.35768  3.86169  6.05638  5.96605  5.66411  5.71567  5.24870  4.74311  2.35973  6.23979  5.22216     22 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     23   2.79302  5.56427  3.52094  2.71798  4.85170  4.00514  4.19861  2.85053  2.14289  2.90492  3.14258  3.49984  3.70763  1.72000  1.78011  2.99898  3.43705  3.54174  6.03273  4.66043     23 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     24   2.04287  5.70988  2.78101  2.18866  5.05596  3.30252  3.66219  4.54256  1.98829  3.36426  4.75031  2.78846  4.36380  3.03673  1.68184  3.15888  2.89920  4.10107  6.14189  4.73044     24 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     25   2.29742  5.66410  3.11196  2.23103  3.59540  3.97986  4.16881  4.46354  2.60504  2.55241  4.70971  3.45484  4.37288  2.46995  1.46390  2.89791  3.43014  4.04472  6.10798  3.15213     25 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     26   3.09021  6.33437  2.23725  2.33922  5.65040  0.64949  3.94386  5.16047  3.56024  4.63976  5.43511  3.32053  4.76867  3.78451  4.12190  3.68142  4.03547  3.74190  6.78902  5.31295     26 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.08630  5.64863  2.53628  0.61958  0.77255  0.48576  0.95510
+     27   2.63094  4.79226  4.39260  3.81746  3.88703  4.26730  1.06098  2.56147  3.73551  2.99292  3.90348  3.51166  2.65694  4.00073  4.00531  3.53497  3.45230  2.84521  3.27651  3.21654     27 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00569  5.56802  6.29037  0.61958  0.77255  0.56361  0.84199
+     28   2.57555  5.68647  1.79201  1.53095  5.03256  3.54239  3.62795  3.79209  2.73080  3.99218  4.72691  2.66405  4.33972  2.53170  2.65296  2.84029  3.18899  4.07766  6.11849  4.70679     28 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00548  5.60582  6.32816  0.61958  0.77255  0.68958  0.69673
+     29   2.91482  5.20632  5.97928  5.45483  4.54426  5.34591  5.90750  2.30908  5.32991  3.22994  2.92963  5.52263  5.65674  5.53303  5.42376  4.72118  3.01553  0.45118  6.35187  5.14753     29 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.04072  5.60582  3.31795  0.61958  0.77255  0.37662  1.15892
+     30   2.78418  3.20493  3.60021  2.48528  4.61850  3.65024  2.85423  2.37366  2.51471  3.35137  4.45489  3.56042  4.41643  3.38369  1.48829  2.86688  2.90601  3.03938  5.88801  4.55533     30 - E
+          2.68608  4.42275  2.77569  2.73173  3.46102  2.40563  3.72544  3.29250  2.67767  2.69333  4.24669  2.90396  2.73789  3.18196  2.89851  2.37937  2.77504  2.98455  4.57879  3.61300
+          0.34725  1.23236  6.33742  0.80968  0.58879  0.39547  1.11891
+     31   4.53873  5.75446  6.55803  5.97666  3.02975  5.93546  6.26709  1.70405  5.83403  1.02657  1.75033  6.11817  6.00569  5.71555  5.76757  5.32049  4.74858  1.70804  6.30950  5.33623     34 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     32   1.22361  2.59319  5.19534  4.63581  4.05921  1.35468  4.99828  2.73712  4.47459  2.68792  4.06367  4.66358  4.89913  4.64941  4.56620  3.77918  3.65406  2.64489  5.59421  4.41467     35 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     33   2.00418  4.91140  3.54520  3.66802  4.03922  4.25893  4.52307  2.75137  3.22216  2.57063  4.01816  4.04235  4.63648  3.48576  3.93635  2.62032  1.61359  1.63268  5.50191  4.27890     36 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     34   2.84176  4.00494  2.92926  2.55045  5.04013  3.27450  2.32021  3.59682  2.11985  4.00246  4.74038  3.44080  1.69079  2.79466  3.38770  2.62233  2.76225  4.08740  6.13364  4.72491     37 - T
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     35   2.68417  4.09987  2.83001  2.15608  5.04162  3.23200  4.15929  4.52528  2.59986  3.51937  4.74136  2.83550  1.42691  3.25669  2.38398  2.96726  3.42812  4.08870  6.13447  3.76893     38 - G
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     36   2.43836  5.70832  2.08920  2.35861  5.05226  1.82382  4.16067  4.53761  2.71269  3.50119  4.74943  2.06172  4.36661  3.25752  2.49249  2.91624  3.43110  3.40545  6.14161  4.73103     39 - G
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     37   2.61030  3.43970  5.24278  4.62763  2.37418  3.75644  4.78445  2.29887  4.41313  1.32478  2.27768  4.61252  4.81479  3.61984  4.42232  2.71603  3.51426  2.60976  5.27908  3.16351     40 - G
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     38   2.40219  5.58102  2.73385  1.71973  4.87498  3.59313  4.19150  3.11744  2.40033  3.25786  3.63655  3.48893  4.39025  3.30743  2.37825  3.19202  2.84596  2.05258  6.04558  4.66777     41 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     39   2.49830  5.70978  2.22143  1.89093  5.05601  2.83567  3.24683  4.54282  2.42560  4.01556  4.75014  3.02675  2.98146  3.25263  2.64723  2.27352  2.60190  4.10105  6.14177  3.86904     42 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     40   2.61860  5.43884  3.33103  2.59194  1.81097  3.59668  3.74596  4.10636  2.58550  2.34755  3.64065  3.55918  4.42562  2.77398  2.21118  3.01901  2.85160  3.77503  3.89975  3.82894     43 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.02653  5.64863  3.78708  0.61958  0.77255  0.48576  0.95510
+     41   2.66121  3.82660  5.21391  3.67621  3.74204  4.43902  4.77197  1.92212  4.39010  1.71667  3.76798  4.59447  3.49216  4.52553  4.40602  3.74954  2.74998  1.26252  3.83796  4.09540     44 - H
+          2.68629  4.42256  2.77550  2.73132  3.46322  2.40528  3.72525  3.29292  2.67748  2.69386  4.24720  2.90349  2.73745  3.18177  2.89831  2.37886  2.77550  2.98279  4.58508  3.61534
+          0.44923  1.02128  6.34981  0.14679  1.99126  0.42420  1.06217
+     42   2.36158  5.67378  3.18340  1.30053  5.00423  3.97795  4.16657  3.62471  2.43915  2.61708  4.71838  3.45126  2.62530  3.26783  2.72511  3.16804  2.61242  4.05655  6.11527  4.71347     47 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     43   2.09482  5.70944  2.93148  1.86851  4.09524  3.01564  4.15679  4.54218  2.16693  4.01514  4.74985  3.07122  4.36331  2.28885  2.98050  2.15760  2.54681  4.10061  6.14153  4.72996     48 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     44   1.37795  5.59810  2.72586  2.66246  3.54866  3.99406  3.01272  4.35411  2.76220  3.88412  3.86262  3.48136  4.38635  3.08036  2.77423  2.53766  2.67144  2.88052  6.05851  3.30217     49 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     45   3.43900  5.95053  3.06829  2.62341  5.27529  0.73752  3.66539  4.76248  2.74184  3.56430  5.00693  2.97992  3.19127  3.48010  3.66405  3.38625  3.68011  4.33227  6.38687  4.96145     50 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     46   3.62830  4.97273  5.60246  4.99568  3.91313  4.83895  5.17776  1.70333  4.79337  0.82878  3.48700  5.00296  3.92535  4.89214  4.79513  4.16106  3.85804  2.01387  5.60263  3.01791     51 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     47   2.20363  5.70614  2.84393  2.02712  3.88221  3.57770  3.28411  3.81338  2.53473  4.01126  4.74691  3.11940  2.35105  2.65918  3.38505  2.52356  2.03209  4.09657  6.13907  4.72835     52 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     48   1.53220  4.67593  5.10933  4.50286  1.72721  3.00917  3.26134  2.61191  4.31649  2.40265  3.36689  4.55098  4.79872  4.47274  4.37192  3.22166  2.86114  2.67789  5.29552  2.70776     53 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.02654  5.64863  3.78667  0.61958  0.77255  0.48576  0.95510
+     49   2.59726  3.69266  3.35513  2.14185  4.58314  4.04375  3.30169  3.08155  2.74922  3.61016  4.43182  3.58683  4.43284  3.08861  2.58365  3.24922  3.07762  1.39867  5.86897  3.22793     54 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00536  5.62745  6.34980  0.61958  0.77255  0.59288  0.80460
+     50   2.02433  5.59387  3.19472  2.50997  3.31322  3.27205  4.17198  3.71170  2.71896  2.97911  4.64572  3.46572  1.60144  3.03703  3.04646  2.59347  2.69579  3.96193  6.05232  4.66799     55 - E
+          2.68632  4.42239  2.77533  2.73137  3.46253  2.40526  3.72433  3.29368  2.67754  2.69344  4.24703  2.90360  2.73753  3.18160  2.89814  2.37864  2.77533  2.98502  4.58491  3.61444
+          0.09997  2.37097  6.34980  0.68011  0.70636  0.42417  1.06222
+     51   3.52305  4.87060  5.50860  4.90571  3.28941  4.73605  5.08176  1.30851  4.70206  1.70387  3.90213  4.90031  5.07667  4.82497  4.71148  4.05711  3.22394  1.78054  5.53856  1.84927     58 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     52   2.52287  5.71937  2.73186  2.65862  5.06259  1.33820  4.17038  4.54809  2.77856  4.02400  4.76126  2.85203  2.43436  3.09621  3.18303  2.83662  2.52390  4.10917  6.15305  4.74172     59 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     53   2.38129  3.97034  2.94555  3.39667  4.22295  2.40721  4.41226  2.69831  3.36561  2.30587  4.16490  3.84357  2.10361  3.68447  3.02463  2.27801  2.80648  2.62282  5.63439  4.37896     60 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     54   2.96696  5.71030  1.72735  2.08512  5.05645  2.38575  4.15721  4.54322  2.53100  4.01604  4.75071  3.00889  3.34656  2.57570  2.42393  2.71658  3.22414  3.07544  6.14232  4.73065     61 - -
+          2.68746  4.42877  2.77440  2.73159  3.45260  2.40950  3.72897  3.29357  2.68070  2.68873  4.22499  2.90492  2.73863  3.18036  2.89318  2.38258  2.77818  2.98609  4.55047  3.61741
+          2.01323  0.83442  0.83859  2.91745  0.05559  0.48576  0.95510
+     55   2.71559  4.63275  2.73754  3.28298  3.76598  3.92470  4.18187  2.76732  3.23370  2.07565  3.03079  3.67787  3.31885  3.53077  2.92523  2.74929  2.23309  1.90940  5.21791  3.98787     98 - S
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00923  5.08545  5.80780  0.61958  0.77255  0.41001  1.08958
+     56   3.11524  4.09333  3.13042  2.11992  4.96994  2.28768  4.07612  4.45567  1.91303  3.33072  4.66588  3.35666  2.82995  2.11598  2.63155  2.74853  2.73280  4.01563  6.05795  4.64722     99 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00607  5.50261  6.22496  0.61958  0.77255  0.68595  0.70040
+     57   2.28834  3.10713  4.89876  4.30090  2.46962  2.63000  3.18895  3.08141  4.14358  1.64921  3.75884  2.77682  4.71910  4.32651  3.38156  3.27050  3.44932  2.25175  4.11093  3.03842    100 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00576  5.55637  6.27872  0.61958  0.77255  0.68924  0.69707
+     58   2.48006  5.63553  2.99990  2.71338  4.96617  2.84013  4.12769  4.44205  2.30454  3.46989  3.58326  3.16028  2.55512  2.81658  2.11805  3.12898  3.39102  3.41817  2.08033  4.67490    101 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00561  5.58154  6.30389  0.61958  0.77255  0.78589  0.60828
+     59   1.76074  5.64497  3.06412  2.66361  4.05670  2.70523  4.12515  4.45834  2.62401  3.57293  3.96575  2.60328  4.33022  2.90254  1.81302  2.64234  3.14605  3.08582  6.08393  4.67934    102 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.47096  5.58154  0.98931  0.61958  0.77255  0.78589  0.60828
+     60   2.92901  5.40252  3.19260  2.63642  4.73274  2.84765  3.17005  4.20790  1.70319  3.06882  4.44722  2.79566  3.46837  2.65930  2.58117  2.40018  3.16005  3.36670  5.84392  2.86540    103 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00892  5.11950  5.84185  0.61958  0.77255  1.65400  0.21231
+     61   2.71954  4.47966  4.28092  3.05375  2.45816  2.35097  4.33004  2.64096  3.60132  1.71120  3.59268  3.29059  3.16693  3.84339  3.82738  2.85097  3.19239  2.43189  3.46820  3.88738    104 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.59971  5.11950  0.80957  0.61958  0.77255  0.12741  2.12334
+     62   2.75641  5.52008  2.43083  2.13625  3.01651  3.81258  2.73982  4.33313  2.73967  2.52151  3.44889  2.69618  3.69288  2.20468  2.56131  3.00209  3.26602  3.90502  5.95915  4.55467    105 - .
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00710  5.34689  6.06923  0.61958  0.77255  0.17434  1.83265
+     63   2.93156  5.39101  3.21807  2.85940  3.02655  3.60411  3.66496  2.97648  2.81288  2.79671  2.39298  3.29713  3.27144  2.97026  3.09653  2.06517  2.12913  2.99917  5.89819  4.56826    106 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     64   2.85405  4.92131  4.21394  3.09028  2.73502  2.88202  4.51324  2.79873  3.12173  2.06118  3.43003  2.80232  2.48812  3.51144  3.50041  2.28401  3.48236  2.52668  3.99314  3.13413    107 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     65   2.18577  5.70999  2.92312  2.43867  5.05629  2.38183  3.77229  4.54314  1.91183  4.01579  4.75033  3.13425  3.33471  2.50443  2.78465  2.40124  2.34743  4.10129  6.14192  4.73022    108 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     66   2.42950  5.31553  2.94072  2.67974  2.86570  2.71143  4.28526  2.85069  2.63839  2.59373  2.73029  2.33872  4.46197  3.46067  3.56693  2.93913  2.25464  3.21841  5.83797  4.52626    109 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     67   2.77454  4.65931  5.23283  4.61841  2.52057  3.55452  4.78329  2.23351  3.82360  1.23264  2.54256  4.60848  2.54131  4.53993  4.41913  3.76115  3.51469  2.37577  5.28089  3.38487    110 - C
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     68   3.04262  4.98391  4.09260  3.52583  3.63948  3.50396  4.46666  3.02695  1.81750  2.15838  3.06580  3.60942  2.99945  3.78836  2.57627  2.63501  2.30923  2.49145  4.14650  4.32539    111 - C
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     69   2.68671  5.69628  2.32394  1.92589  4.02485  3.54535  4.15988  3.77377  2.89641  3.02316  4.73817  2.96854  2.89536  3.03652  2.70378  1.92840  2.47329  3.70395  6.13179  4.72369    112 - S
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     70   2.38136  4.68585  3.85119  4.44534  2.46680  3.28060  4.74832  2.23586  4.27119  1.70165  3.80368  4.52149  2.23481  4.43846  4.34773  3.39443  2.55937  2.00994  5.30460  4.12368    113 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     71   1.72806  5.13536  3.30862  3.30834  2.62686  2.93130  3.50501  3.68209  2.87051  2.08371  3.80103  3.30949  3.15147  3.11546  3.69686  2.93090  3.46258  2.99635  3.22528  3.32108    114 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     72   2.20142  5.70751  2.22427  2.00944  5.05281  3.97006  3.47617  3.45608  2.10414  3.05500  4.74812  3.11891  4.36354  2.85186  2.28636  2.46014  3.42752  4.09827  6.14006  3.67366    115 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+     73   2.98899  5.62738  3.04307  2.40484  3.17942  1.91518  4.17821  3.25308  2.35484  2.65389  4.67695  3.12112  4.37995  2.65802  2.40309  2.90408  3.43123  2.59260  6.08055  4.69065    116 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.48938  5.64863  0.95849  0.61958  0.77255  0.48576  0.95510
+     74   2.64351  3.86966  3.15364  2.74504  3.20339  2.23793  4.15291  2.93647  3.11579  1.92930  3.88371  2.98399  4.29497  3.43261  2.71041  2.83215  3.20209  3.06839  3.34654  3.48892    117 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00850  5.16775  5.89010  0.61958  0.77255  1.60393  0.22453
+     75   2.94982  5.40323  2.87386  2.66563  4.72503  3.38255  3.92229  3.12306  1.92087  2.79413  4.45008  2.76418  3.39974  2.32999  2.16678  2.72879  2.97179  3.35731  3.91643  4.45367    118 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00850  5.16775  5.89010  0.61958  0.77255  1.26752  0.33063
+     76   1.81340  3.78371  3.42935  2.31059  3.38159  2.18972  3.30623  3.76844  2.86173  2.98918  4.21279  3.38324  4.22598  2.74893  3.31837  2.49701  2.74174  3.16240  5.65115  4.32885    119 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00791  5.23893  5.96128  0.61958  0.77255  1.37458  0.29162
+     77   2.69052  4.45556  4.80081  4.19881  3.10308  4.19049  4.51247  2.09205  4.02743  1.85851  2.80123  3.28743  3.45060  3.43425  2.67982  3.49218  2.70438  1.99627  4.02885  3.04691    120 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00771  5.26549  5.98784  0.61958  0.77255  1.48523  0.25676
+     78   2.78557  5.38999  2.93809  2.06487  3.17737  3.14727  3.28276  3.11929  2.24437  2.82631  4.44309  3.05855  4.18303  3.09706  2.00276  2.98404  3.22867  2.75343  5.85133  4.47010    121 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00771  5.26549  5.98784  0.61958  0.77255  1.33587  0.30507
+     79   2.50593  5.50917  2.71686  2.03831  4.01322  3.78239  3.96981  4.33394  1.96062  2.78785  4.55080  3.25127  4.17578  2.12450  2.61451  2.46171  2.92227  3.40908  5.94404  4.53534    122 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00750  5.29208  6.01443  0.61958  0.77255  1.44807  0.26791
+     80   1.66738  4.46548  4.84856  4.24476  3.00862  3.26867  4.53446  2.15265  4.06710  2.23341  3.58343  4.31279  4.57588  4.23119  4.13752  2.25837  2.39931  2.17307  3.58597  3.90416    123 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00750  5.29208  6.01443  0.61958  0.77255  0.98829  0.46555
+     81   2.69056  5.29644  2.73558  2.48675  2.65949  3.88633  4.08802  2.91712  2.11360  2.68551  3.03458  3.04979  4.27659  3.23082  2.23675  3.08725  2.58739  3.63353  5.79235  3.78293    124 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00685  5.38293  6.10528  0.61958  0.77255  1.30051  0.31799
+     82   2.29313  4.21160  2.97361  1.84382  3.19787  3.83391  4.02282  4.32456  1.95806  3.82052  3.47459  3.30824  4.22697  2.73981  2.32504  2.86268  2.83366  3.90397  5.96564  3.35013    125 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00685  5.38293  6.10528  0.61958  0.77255  1.30051  0.31799
+     83   2.28796  4.63786  4.37566  3.37693  3.23701  3.27415  3.64746  1.94900  3.27839  1.95255  3.75014  4.07563  4.54351  3.95357  3.19804  2.48478  2.56295  2.18135  5.24262  3.60616    126 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00685  5.38293  6.10528  0.61958  0.77255  1.30051  0.31799
+     84   3.40562  4.75828  5.37798  4.76440  2.56606  4.59467  4.91240  1.91343  4.55410  0.93541  2.82609  4.76052  4.91756  4.64152  4.54549  3.91332  3.63324  2.48246  3.11876  3.48243    127 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00685  5.38293  6.10528  0.61958  0.77255  1.30051  0.31799
+     85   2.22701  5.53802  3.07557  1.99716  4.87239  3.23474  4.01906  2.86055  1.81715  2.84721  4.58150  3.30254  3.50270  2.94930  2.66047  2.51456  3.28425  3.92290  5.97715  3.75153    128 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00685  5.38293  6.10528  0.61958  0.77255  1.30051  0.31799
+     86   2.69734  5.51614  2.62869  2.09497  4.84143  3.16832  4.02440  2.87874  2.37555  2.88014  3.02088  2.78727  2.96992  3.12744  2.58017  2.61677  3.05181  3.08716  5.96085  4.56214    129 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00685  5.38293  6.10528  0.61958  0.77255  1.30051  0.31799
+     87   2.35444  5.32429  2.57373  2.59301  2.47508  2.88939  3.39015  3.45494  2.50035  2.72605  4.38956  2.97353  4.26968  2.41714  3.33431  3.07839  3.07107  2.96892  4.16855  3.35312    130 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00685  5.38293  6.10528  0.61958  0.77255  1.30051  0.31799
+     88   3.05352  3.68078  3.06639  2.24322  2.98604  3.83380  4.02269  4.32537  1.83085  2.71355  4.56818  3.04450  3.50340  2.67215  2.73702  2.30143  2.57825  3.90455  5.96600  3.71417    131 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.07812  5.38293  2.65134  0.61958  0.77255  1.30051  0.31799
+     89   2.46329  3.91657  2.37629  2.44766  4.37268  3.87947  4.08881  2.71063  2.71489  2.51447  3.35155  3.43146  1.80023  3.25710  3.00486  3.08690  3.26156  3.47511  5.67236  4.35462    132 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00735  5.31216  6.03450  0.61958  0.77255  1.41838  0.27721
+     90   2.22219  4.03917  1.83640  2.00809  4.86594  3.79207  3.10443  4.35029  2.54041  3.31840  4.56460  2.94070  4.18581  2.22697  3.20810  2.98135  2.70757  3.91263  5.95734  4.54772    133 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00735  5.31216  6.03450  0.61958  0.77255  1.41838  0.27721
+     91   2.02374  4.65144  3.42434  3.60815  3.76957  3.24995  3.45126  2.68725  3.53571  1.91251  3.76110  3.93888  3.32345  3.80600  3.82133  3.08621  2.34801  1.86316  5.24952  3.33534    134 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00735  5.31216  6.03450  0.61958  0.77255  1.41838  0.27721
+     92   2.80681  3.65023  2.85973  3.65591  3.75049  4.10828  4.38933  2.37964  3.57776  2.19485  3.74537  3.30947  2.79685  3.84162  3.84966  2.44139  2.87658  1.53329  5.23545  4.02741    135 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.03735  5.31216  3.45061  0.61958  0.77255  1.19350  0.36120
+     93   2.04359  4.46222  5.00082  4.38848  2.81428  4.24529  4.57650  1.91004  4.18296  2.10399  3.58088  4.39332  3.76476  3.44659  4.20655  3.17927  3.31290  1.81537  2.82267  2.82187    136 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00727  5.32303  6.04538  0.61958  0.77255  1.40166  0.28261
+     94   2.23858  5.51465  2.83499  2.17419  4.85182  1.82003  3.98767  4.33222  2.52716  3.34533  4.55750  3.27020  3.35949  3.08662  2.64430  2.36254  2.93758  3.21992  5.95219  4.54607    137 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00727  5.32303  6.04538  0.61958  0.77255  1.23303  0.34448
+     95   2.11523  4.51659  4.78336  4.18506  1.97658  4.22993  4.54791  2.71253  3.02755  2.41957  3.05873  3.46211  4.59655  4.20771  4.13036  2.73818  2.07674  2.18453  3.75672  3.43703    138 - C
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00707  5.35164  6.07398  0.61958  0.77255  1.35539  0.29820
+     96   2.31149  3.11869  3.96355  2.28109  4.11543  1.16632  4.38840  3.45160  3.38060  2.81010  4.06688  3.81528  4.45345  3.68949  3.74874  3.28851  3.35709  2.52056  5.54421  4.30291    139 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.04845  5.35164  3.15687  0.61958  0.77255  1.35539  0.29820
+     97   3.07100  5.52128  2.89054  2.46967  4.83980  1.20456  4.03809  3.16599  2.79794  3.81675  4.57448  3.02952  4.23295  2.53405  3.29052  2.63274  2.74512  3.89868  5.97254  4.57313    140 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00736  5.31055  6.03289  0.61958  0.77255  1.42082  0.27643
+     98   3.08016  2.84137  4.01834  3.44875  2.30196  4.07050  4.31146  3.25562  3.37547  2.97050  3.86966  3.27107  4.44871  3.15666  2.14301  2.79984  3.31175  3.03619  5.30397  1.55733    141 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00736  5.31055  6.03289  0.61958  0.77255  1.18792  0.36364
+     99   2.33853  4.67672  3.54231  3.62184  3.06781  4.11659  2.82899  2.39735  3.55038  2.87930  3.78617  3.95529  3.22793  3.11219  3.39888  2.67993  3.31206  1.61804  3.13049  3.36921    142 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00707  5.35164  6.07398  0.61958  0.77255  0.32806  1.27410
+    100   1.30940  4.50437  2.84479  2.47662  4.99864  3.54883  4.13082  4.47970  2.57769  3.96288  4.70311  3.09263  4.33632  2.87188  3.12773  1.81169  3.39784  3.53365  6.09749  3.78537    143 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00554  5.59483  6.31718  0.61958  0.77255  0.73462  0.65333
+    101   2.48808  5.01870  1.78644  3.38655  3.67180  2.46539  4.38927  3.18044  3.35360  2.05458  4.11686  3.82792  3.54132  3.67010  3.25706  3.12372  2.61797  2.14841  5.58789  4.33589    144 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00554  5.59483  6.31718  0.61958  0.77255  0.73462  0.65333
+    102   2.46874  4.83896  2.61856  3.73742  3.95858  4.25741  4.53031  2.89028  3.67018  1.62486  3.38111  4.08194  1.63013  3.14513  3.96794  3.51805  3.46002  2.30467  5.43603  4.22170    145 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00554  5.59483  6.31718  0.61958  0.77255  0.73462  0.65333
+    103   1.57140  4.68489  4.85515  4.26192  3.78696  3.01725  4.68523  2.73037  4.11726  1.78159  3.80360  4.40779  3.02692  4.31322  3.52842  3.66204  2.93372  1.58658  5.30343  4.11739    146 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00554  5.59483  6.31718  0.61958  0.77255  0.73462  0.65333
+    104   3.24637  3.87409  5.16532  3.63897  2.57938  2.62194  4.74200  2.33848  4.34778  1.81026  2.42308  3.66347  4.77494  4.48744  4.37178  2.64026  2.76197  1.96742  5.24913  2.95826    147 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00554  5.59483  6.31718  0.61958  0.77255  0.53043  0.88758
+    105   2.63073  4.64594  5.21679  4.60293  2.92917  2.43839  4.77104  1.79582  4.39175  1.83003  3.76461  4.59478  4.80130  4.52623  4.40597  3.74850  2.01940  1.92043  5.26937  3.15990    148 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.02878  5.62173  3.69885  0.61958  0.77255  0.61959  0.77255
+    106   1.24487  5.59728  3.18667  2.40003  4.90741  1.83643  4.16327  4.36793  2.91658  3.20933  4.65163  3.11657  4.36217  3.27388  3.01921  2.88271  3.41435  3.41542  6.05624  4.66874    149 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00552  5.59847  6.32081  0.61958  0.77255  0.51075  0.91641
+    107   1.58687  5.52620  2.83578  2.96132  4.80552  3.11139  4.19158  3.58457  2.95942  2.44587  4.58540  3.01308  4.38723  2.18078  3.43785  2.10310  2.85800  3.25912  6.00115  4.63411    150 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00537  5.62600  6.34834  0.61958  0.77255  0.59975  0.79617
+    108   2.36620  5.09227  3.89367  3.33080  3.67876  4.14194  3.87949  2.73621  2.55565  2.21582  4.18669  2.98842  2.48751  3.30188  2.77700  2.44752  2.50177  2.72378  3.80523  3.63027    151 - H
+          2.68633  4.42240  2.77534  2.73138  3.46369  2.40494  3.72509  3.29288  2.67756  2.69370  4.24705  2.90361  2.73708  3.18161  2.89761  2.37902  2.77534  2.98474  4.58492  3.61518
+          0.04516  3.16049  6.34834  1.36808  0.29383  0.59975  0.79617
+    109   2.53214  5.14332  3.00676  3.26942  2.70177  3.53589  4.34683  3.69709  2.72470  2.09531  4.23424  3.74266  3.48604  3.32492  2.68870  2.22416  3.44716  2.80421  3.86058  2.20473    157 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00537  5.62600  6.34834  0.61958  0.77255  0.59975  0.79617
+    110   1.78823  3.32950  3.50220  2.53810  4.84226  3.98855  3.18463  4.29030  2.94426  2.23038  4.04679  3.09475  3.65209  2.17120  2.49013  2.49919  3.42121  3.39118  6.02156  4.64747    158 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00537  5.62600  6.34834  0.61958  0.77255  0.59975  0.79617
+    111   2.85861  5.63122  3.07536  2.31266  3.94483  2.13204  3.53324  3.87792  2.22249  3.30810  3.32387  3.12232  4.36330  2.74221  2.30937  3.16153  2.88834  3.12194  4.02657  3.10944    159 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00537  5.62600  6.34834  0.61958  0.77255  0.59975  0.79617
+    112   1.94383  4.98682  3.45086  3.06025  4.12958  2.62202  4.44282  1.57989  3.10033  2.87177  4.08831  3.90679  3.16273  3.75416  3.81453  3.16648  3.46171  1.91046  5.56415  4.32298    160 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00537  5.62600  6.34834  0.61958  0.77255  0.59975  0.79617
+    113   1.80505  5.45502  3.56473  2.78393  4.70903  2.85183  3.39037  4.13509  2.78461  3.72049  4.52152  3.53607  1.49903  2.99146  3.47439  3.22014  3.43197  2.37095  5.94661  3.65294    161 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00537  5.62600  6.34834  0.61958  0.77255  0.59975  0.79617
+    114   1.86164  4.75922  4.61583  4.03286  3.86641  4.33821  4.63386  2.05060  3.92780  2.00118  3.87301  4.27938  2.83722  3.49440  2.57294  3.21459  2.42002  2.02453  5.36759  4.17095    162 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00537  5.62600  6.34834  0.61958  0.77255  0.42056  1.06909
+    115   3.27370  4.72109  4.85227  4.25972  2.47444  4.39416  2.41378  1.93731  4.12076  2.43889  3.83717  1.93460  4.76215  4.32152  3.54670  2.71079  3.09955  2.01857  5.33533  3.44906    163 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    116   2.75719  4.97681  5.66860  5.08503  3.46557  4.93141  5.32601  1.58426  4.90043  1.96963  3.49694  5.09638  5.26269  5.04661  4.92911  4.26413  3.05398  0.92870  5.78647  4.60685    164 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    117   1.33391  5.45400  3.63990  2.84409  4.74292  3.49942  1.38510  4.16098  3.14468  3.76541  4.57956  3.14774  4.49183  3.48947  3.60588  3.30619  2.91460  2.95604  6.00865  4.67503    165 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    118   3.51479  6.06225  2.63801  0.60145  5.38676  4.11647  3.44865  4.88687  3.24679  4.35956  5.12115  3.07002  4.59401  3.54389  3.77093  3.04649  3.23473  4.44480  6.49399  3.82025    166 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    119   2.11711  5.69054  2.59101  2.89728  5.02832  3.97395  3.14863  4.50910  2.14841  3.99266  3.88268  3.44426  4.36724  1.73567  2.99178  2.56445  3.42863  3.53962  6.12755  2.30811    167 - H
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    120   3.21370  5.43266  2.77213  3.04450  3.63901  4.04031  3.54256  4.09583  3.03895  2.00656  4.50191  1.61411  3.68415  3.38953  2.83472  2.90545  3.44504  3.76746  5.92768  2.01479    168 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    121   2.06556  5.32418  2.30900  3.12160  3.24451  1.72774  4.28193  3.23174  2.91129  2.76039  4.40249  3.62853  4.45944  2.78313  3.56197  2.30043  3.44879  2.97544  5.84504  4.53131    169 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    122   3.27662  4.72281  3.86158  3.53699  3.82317  4.39796  4.70913  1.15801  4.12548  1.85898  3.83899  4.42505  4.76581  4.32677  2.84517  2.98836  3.50872  1.91766  5.33826  3.55616    170 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    123   2.35686  5.35274  2.90040  3.20541  4.58170  4.11729  4.37093  3.97255  2.88506  2.99975  3.28797  3.70425  0.86109  3.55648  3.65098  3.35871  3.52560  3.68069  5.90415  4.59907    171 - -
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    124   2.87232  4.77530  2.89381  3.36250  2.54625  1.49908  4.64521  2.81375  3.93538  2.17289  3.30580  4.28821  4.72166  4.17229  4.15079  2.90281  3.49887  3.03122  3.77396  2.36967    172 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    125   1.99617  4.74044  4.76157  4.17317  2.36644  3.44291  3.51408  2.49849  2.54450  1.50534  3.52086  4.36980  4.74710  4.26437  3.26823  3.18158  3.09896  2.48578  5.35249  4.16178    173 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    126   1.86344  4.83743  4.42007  3.84445  3.95353  4.30555  4.58462  3.07022  3.76746  2.75580  3.33266  3.54540  3.72831  4.03279  2.73799  2.59230  1.86352  1.78972  5.43731  2.89696    174 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    127   2.12691  5.31419  2.91570  3.12966  3.51348  3.19176  3.47930  3.92581  3.11824  1.89473  4.39323  1.72211  4.46245  3.18843  3.56784  3.05335  2.56281  3.26990  4.08828  4.52553    175 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    128   2.72825  5.47881  3.59854  3.03805  2.01162  4.04448  1.99648  4.15967  1.78641  3.28423  4.54494  3.56186  4.43398  2.80582  2.31892  3.24643  3.12440  3.15889  5.96635  4.62218    176 - E
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    129   2.44466  4.66029  5.22001  4.60641  2.21476  4.44819  2.30709  2.23462  4.39687  2.04739  3.77911  4.60230  3.97432  4.53286  4.41399  3.25622  2.36248  2.07491  3.57567  2.83476    177 - S
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    130   2.75736  3.99746  4.81513  3.46289  2.26903  3.08555  4.69595  2.84410  4.09161  1.81518  2.46502  2.90902  4.75606  3.57331  3.07470  2.58080  3.50463  2.13580  5.34211  3.45244    178 - S
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    131   2.52404  5.56797  2.84310  2.95940  4.85746  3.27991  4.19705  4.30564  2.70415  3.84964  3.63109  3.12698  1.41543  3.31549  3.44001  1.87445  3.43558  2.96808  6.03657  3.77985    179 - G
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    132   2.84492  5.55172  3.21407  2.96699  3.90453  3.09427  4.20032  4.27961  2.19079  3.83024  2.33078  3.25373  3.62341  3.05029  1.97358  2.71696  3.43513  3.12503  2.13801  4.65303    180 - G
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    133   3.21769  5.39065  3.63618  2.76348  2.69889  4.05486  3.68756  3.40192  2.44105  3.64532  4.46359  3.59291  4.44396  2.72966  1.69563  3.25974  2.04264  3.71852  3.54186  2.41914    181 - G
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    134   1.38848  3.80710  4.75501  4.17614  3.93674  4.36496  4.73360  3.25658  4.04967  2.29495  3.94309  4.37949  1.63349  4.28365  2.83366  3.66475  3.54196  2.01188  5.44343  4.25121    182 - S
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    135   2.71168  5.70945  2.00479  2.55836  5.05472  3.97095  4.15854  4.54091  2.16977  3.36346  4.75013  1.70103  3.44870  3.25489  2.94999  2.83164  2.14152  4.10021  6.14195  4.73074    183 - C
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    136   2.59041  4.52108  3.50541  2.94883  4.88267  1.85525  4.19041  3.51527  2.08873  2.55726  4.64066  2.96886  4.38962  3.11122  2.20756  2.25740  2.84825  3.95066  6.04989  4.67089    184 - C
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    137   2.47049  5.23397  3.76291  2.45714  4.42465  4.10336  4.32223  2.21765  2.61567  3.47058  3.60725  3.69325  3.25311  2.24525  3.62093  2.99233  3.11957  1.54060  5.77199  4.47953    185 - C
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    138   2.20898  4.68384  3.68796  4.45456  2.62777  3.11797  2.79903  2.31675  4.27838  1.65444  3.45820  4.52611  4.79200  3.74118  4.35139  3.72929  3.10050  2.13820  5.30254  2.47479    186 - S
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00525  5.64863  6.37098  0.61958  0.77255  0.48576  0.95510
+    139   2.62355  4.66425  5.19052  4.57889  3.38125  4.44444  4.77514  2.09923  4.37569  2.12021  3.37698  4.58892  2.62399  3.57091  4.40305  2.39205  2.72992  1.83682  2.47621  3.33477    187 - C
+          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
+          0.00353  5.64692        *  0.61958  0.77255  0.00000        *
+//
diff --git a/demotic/examples/example.hmm2 b/demotic/examples/example.hmm2
new file mode 100644
index 0000000..603e933
--- /dev/null
+++ b/demotic/examples/example.hmm2
@@ -0,0 +1,1469 @@
+HMMER2.0  [2.3.2]
+NAME  Orn_DAP_Arg_deC
+ACC   PF00278.15
+DESC  Pyridoxal-dependent decarboxylase, C-terminal sheet domain
+LENG  123
+ALPH  Amino
+RF    no
+CS    yes
+MAP   yes
+COM   /groups/eddy/home/eddys/releases/hmmer-2.3.2/src/hmmbuild example.hmm2 example.sto
+COM   /groups/eddy/home/eddys/releases/hmmer-2.3.2/src/hmmcalibrate example.hmm2
+NSEQ  105
+DATE  Fri Apr 16 11:03:03 2010
+CKSUM 1905
+GA    20.1 20.1
+TC    20.4 20.1
+NC    19.8 20.0
+XT      -8455     -4  -1000  -1000  -8455     -4  -8455     -4 
+NULT      -4  -8455
+NULE     595  -1558     85    338   -294    453  -1158    197    249    902  -1085   -142    -21   -313     45    531    201    384  -1998   -644 
+EVD   -75.919388   0.196776
+HMM        A      C      D      E      F      G      H      I      K      L      M      N      P      Q      R      S      T      V      W      Y    
+         m->m   m->i   m->d   i->m   i->i   d->m   d->d   b->m   m->e
+          -14      *  -6727
+     1   -155    743  -6532  -5896   -780  -5734  -1012    875  -5491   -503    870  -1313  -5784  -5114  -5291     92   1979   1780    532   1378     1
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378    -14      * 
+     2  -1682  -4022  -6543  -5907     20  -5745  -4617    398  -2271   2820  -3223  -5391  -5795  -5125  -5302  -2634   -242      7  -4482    624     2
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E    -14 -11881  -6717   -894  -1115   -701  -1378      *      * 
+     3    722   -557  -6512  -1872  -3954  -2641  -1278   1497  -2668   1607  -1117  -5364  -5770  -5097  -2208  -4804  -2260   2317  -4458  -4116     3
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11867 -12909   -894  -1115  -1442   -662      *      * 
+     4    781   1635  -6517  -5881    640   -373  -4592  -3492  -5476  -1388    329  -2095  -5771  -5100  -5277    525   2693    622  -4458    171     4
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11867 -12909   -894  -1115  -1442   -662      *      * 
+     5  -3883  -5357  -2074   1459  -2040  -2288   1088  -5428    746  -5373  -4446   2000  -2200    728   1586    623    691  -2301  -5540  -4857     5
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11867 -12909   -894  -1115  -1442   -662      *      * 
+     6  -1426  -5583  -8811  -8513  -6360  -8668  -8868   1788  -8509  -2816  -5025  -8340  -2071  -8517  -8721  -8067  -6096   3514  -8205  -7636     6
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11867 -12909   -894  -1115  -1442   -662      *      * 
+     7  -1673  -5007  -1267    -19  -2017   -820    776   1913   -631    676    230   -245  -5065   -395   -728  -2172    447   1185  -5281   -167     7
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11867 -12909   -894  -1115  -1442   -662      *      * 
+     8   1096   -549   1742   -395   -762   1395    276  -2186  -3133   -983  -1302   -432  -4970   -877  -1016    241     27  -4892  -5490   1023     8
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11867 -12909   -894  -1115  -1442   -662      *      * 
+     9   -229  -5188  -1785  -1839  -5436  -4910  -1020    952   1650   -557  -4297  -3579  -5001   -345    410  -1235    729   2165  -5417  -4782     9
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11867 -12909   -894  -1115  -1442   -662      *      * 
+    10   -600  -5344  -2136   -198  -2009  -4861  -1131    -59   2674  -3187  -1379  -1844  -2433  -1334   1969    239  -1367   -406  -5531  -1732    10
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11867 -12909   -894  -1115  -1442   -662      *      * 
+    11   -860   -475    333   1492  -5677  -1611   1301   -109    348  -2890  -4445   -576  -2112   -556   1098     89    701    761  -5539   -688    11
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E   -338 -11867  -2261   -894  -1115  -1442   -662      *      * 
+    12   -321  -4996  -1638   -395  -5297  -1286  -3213      9    455    326    119   1051  -1112   -217   1735    -12  -2054    944    101  -1285    12
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -106 -11530  -3825   -894  -1115   -211  -2880      *      * 
+    13   -504   -729    478     15  -1016   1089   1111  -2218   -306  -2850   -340    541   1326   -759    526    349     76  -1022   -309  -1630    13
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -228 -11759  -2777   -894  -1115  -3468   -137      *      * 
+    14   -242  -5039   1770    933  -1801   1563   -721  -2161   -459  -1886  -4129   -174    -95  -1111   -469   -264   -991   -464  -5223    482    14
+     -   -105   -440    237    138   -405    323    160   -556    176   -377   -675    246    317     80     91    304     73   -368   -262   -208 
+     S  -2192   -987  -1855  -4846    -51  -4737    -55      *      * 
+    15    115  -4610   1102    701  -4931   -112   1059    424    367  -1501  -3699    584    310   -854    706   -336    -53   -359  -4793  -4110   104
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     S     -1 -11065 -12107   -894  -1115   -591  -1573      *      * 
+    16   -705  -5156   1135    146   -660   -230    -53  -2341   1335  -1367   -177     74    386    497   1733  -1890   -685  -1384  -5339   -552   105
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11656 -12698   -894  -1115   -764  -1282      *      * 
+    17   -211  -5273    397   -203  -2303  -1044   -875   -941   1435  -1074    663   -120  -1153    425    945  -1561    770    651    390   -353   106
+     -   -150   -501    234     45   -382    399    105   -627    209   -464   -721    274    393     49     95    360    116   -370   -295   -250 
+     E  -3070  -4950   -237  -1101   -905  -3102   -179      *      * 
+    18  -1922  -1734  -4254  -3627    682  -3479  -2310    488  -3229   2158   -788  -3116  -3507  -2828  -3024    738  -1860    335  -2118   2030   111
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .     -4  -9069 -10112   -894  -1115  -5057    -44      *      * 
+    19   1009  -3015   1544    246  -3307   -248  -1256  -3038    264    226   1184  -1241  -2687   -806    269    641  -1549   -301  -3215  -2550   112
+     -   -149   -502    235     52   -383    398    103   -628    210   -468   -713    276    394     43     99    358    115   -372   -297   -252 
+     .  -4402    -71 -10280    -12  -6930  -5520    -32      *      * 
+    20   -159  -2362    815  -1710  -2418  -2992  -1745   1755  -1629   1789  -1536    268  -3087    761  -2008   -155  -1770  -1834  -2738  -2270   114
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .     -3  -9325 -10367   -894  -1115  -3944    -97      *      * 
+    21   -407  -3479    723   1350  -3798    154  -1627  -3551  -1217  -3495  -2570   2119   -267    390  -1729   1140    580  -3100  -3662  -2975   115
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .     -3  -9672 -10714   -894  -1115  -4804    -53      *      * 
+    22  -2045  -3517   1732   1828  -3837  -3019  -1677   -557   1605  -3532  -2606  -1654    565    509    553  -1926   -323   -723  -3700  -3018   116
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .     -2  -9799 -10842   -894  -1115  -5367    -35      *      * 
+    23    544   1072   -289    424  -3885     87    862  -3636    701   -468  -2654   1199    486    248   1450  -1972   -346  -3186  -3748  -3065   117
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .     -2  -9861 -10903   -894  -1115  -5261    -38      *      * 
+    24   -625  -3445  -2090    403  -3692    -78    545  -3392  -1450   1414   1485    935  -3259    174   -276    134    367    154  -3674  -3039   118
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .     -2  -9926 -10968   -894  -1115  -5278    -38      *      * 
+    25   1936    946  -4718  -4086    784   -799  -2841    541  -3694  -2116  -1470  -3599  -4023   -227   -723  -3055    967    812  -2724   2044   119
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .     -2  -9986 -11028   -894  -1115    -10  -7116      *      * 
+    26  -2354   -993    765   -741   2318  -2313    261     56  -1928  -5062   2192  -1975  -1470   -322   -278   -671   -878   -306   3093   1303   120
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    27    697  -4060  -6143  -1035  -1022  -5673  -1474    126    -61    619    748   -412  -5727  -1681  -1275  -2400    246   1886   -378   1797   121
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    28    312  -4013  -6531  -5895   -104    233  -4605    666  -1543  -2001  -1105  -1805  -5784  -5113  -5290  -1365  -4127   1204    589   3721   122
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E  -1315 -11881   -742   -894  -1115   -701  -1378      *      * 
+    29  -2952  -2780   -933  -4648   2176  -4498    179   1283  -4246   -769    -56   -149  -4548   -566  -4051  -3582     29   1007   1991   2686   123
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -10567 -11609   -894  -1115    -13  -6832      *      * 
+    30  -1799   2170  -6532  -5896  -1699  -2732  -4605   1539  -5491   1685    378  -5380  -5784  -1976  -5291  -1754    949   1754   -355  -4128   124
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    31  -5769   -946   3181  -2344  -7805  -1675    -84  -7682  -5228  -7569  -6819   3045  -6358  -4779  -1632  -1659   -730  -7166  -7755  -6824   125
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     S     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    32   1413    221   2283   -680   1069   1075  -4568    302  -5350   -416  -3238  -5290  -5758  -5008  -5217  -1289   -243  -1641  -4491  -4144   126
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    33   -619   -807  -8268  -8621  -8231   3261  -7564  -8059  -8252  -8320  -7339  -1904  -6589  -7668  -7841   1895  -5360  -6713  -8451  -8447   127
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    34   -725  -4015  -6533  -5897    802  -5736  -4607   1501   -746    319   3032  -5382  -5786  -5115   -716  -1693    -63   1977  -4473  -4131   128
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    35  -1024  -5354  -1109   -335   2403  -4874   1499  -5413  -3117  -2899  -4445   1820  -1892   -856  -1712      6   -679  -4972   -335   2983   129
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    36    284    739   1001   -866  -5658   1983   1959  -1651  -1916  -2898    -68   -570  -4969   1365  -3626   -408    579  -1135  -5537  -4860   130
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     S     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    37  -1145    316  -6511  -5877   -164    290   2549  -1140  -5476    909  -1105   1020  -5781  -1796  -5283   1948   -374  -1254  -4472   -579   131
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -  -1456 -11881   -655   -894  -1115   -701  -1378      *      * 
+    38  -1236  -2788  -5320  -4686   1054  -4531  -3404   1409  -4285   1992   3208   -445  -4568  -3899  -4083  -3619   -625   -802  -3250  -2917   132
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .     -2 -10426 -11469   -894  -1115    -39  -5234      *      * 
+    39   -167  -3996  -6515  -5879   2326  -1666  -4588   1325  -5474    298   1651  -5363   2297  -5097  -1014  -1276  -1316   -934  -4454  -1470   133
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11864 -12906   -894  -1115  -1589   -583      *      * 
+    40    296   -681   2289   -430  -5583  -1095  -3534  -2534  -3126  -1724  -1027   1303  -4965  -3084   2286    221  -2198  -4897  -5491    -76   134
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     C    -15 -11864  -6668   -894  -1115   -336  -2266      *      * 
+    41   -238   2953  -1955     71  -2041   -766    -77  -4122  -3883  -1250   -145  -1861   2289  -3779  -1963    862    385   -511   1342    -14   135
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     H     -1 -11867 -12909   -894  -1115  -1455   -654      *      * 
+    42   1213    407  -6517  -5881     71   -636  -4591   1299   -225   -262   -928  -5366  -5770   -712  -5276   -116    407    625   3572  -1617   136
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     H    -15 -11867  -6594   -894  -1115   -373  -2132      *      * 
+    43    459  -4501  -1172    287   -798    173  -3973   1060  -2022   1548   2146   -794  -5316   -672  -1974  -1338  -1391  -2282   -234    348   137
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     H     -1 -11866 -12908   -894  -1115  -1488   -636      *      * 
+    44  -1781  -4053   -182  -5470   2057  -2605  -1129   1130  -2190   -633   1294  -2241  -2185   -432  -1951  -1117  -2035   -441    366   3258   138
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     H     -1 -11866 -12908   -894  -1115   -364  -2165      *      * 
+    45  -1717  -5369   2610   1144  -1938   1098    507  -5441  -1261  -2908   -934    841    550    523   -443  -3776  -1912  -4991  -5553  -4870   139
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     S     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    46   1568   -951  -1248   -809  -1026   -727   2740  -1428   -657  -2188   -286   -838  -2109   1930   -575   -149  -3841  -1517   -249   1165   140
+     -   -151   -492    231     38   -381    394    101   -613    218   -462   -715    271    392     41    103    354    120   -360   -299   -254 
+     -   -144  -3402 -12923  -1732   -517   -701  -1378      *      * 
+    47   -801   -663  -1822   -555  -1150  -2359    846    308   -123    347  -4326    595  -5008   1356    375   -244     31    397   1833   1328   145
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    48   -940   -743  -2036   -822   2037  -2398   3343  -5328  -1242  -1597  -1338   -445    781     10    183  -1162   -910   -409    675   1291   146
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    49   -131  -5368   -509    -89  -2049   -945   1325  -5439  -1165  -1977  -1562  -3506   3047   -360    534   -459   -897  -4990  -5552   1125   147
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    50   -683   1237  -2448  -2599    158  -2705   -226   2391  -2531   -371   -210  -5285    612  -1131   -429  -4780   -391   1831  -4490  -4143   148
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    51    442  -4119  -5779     13   -674  -1882  -1050    636  -1454    946   1778  -4991    834  -2068   1036  -1694   -881    566  -4561    638   149
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    52   -326   1175  -2300  -1367   -404   -771    -27    569   -308    351  -1257   -302   2078   -207   -122  -1517   -908    855  -5260  -1685   150
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E    -25 -11881  -5894   -894  -1115   -701  -1378      *      * 
+    53   -230    695  -2143  -1084   -871  -1271  -1194   1251  -5454   1111   -172  -1953   -449  -5080  -5260  -2063    395   2007  -4449    296   151
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     C    -27 -11856  -5791   -894  -1115  -1836   -474      *      * 
+    54   -560  -5319    365    333  -2017    -91   1721   -217   -739   -148  -4409    270    853     45    842    601   -183  -1026   -208  -4821   152
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     S   -407 -11830  -2025   -894  -1115  -2491   -283      *      * 
+    55    131  -4934    333   -357     -6   -747  -3101  -1084   1074  -4949     83    192      7    256   2425  -3349  -1748   -409  -5119    187   153
+     -   -127   -510    242     66   -370    395    120   -657    197   -481   -709    311    375     21    105    349    104   -374   -244   -237 
+     S  -1245   -791 -12466  -2841   -217   -912  -1094      *      * 
+    56  -1076   -673    326   -357   -183   -426   1033  -1567    786    967    804   -312    621   -724    854   -960  -1187   -266  -5335  -1358   200
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11683 -12725   -894  -1115   -341  -2249      *      * 
+    57    513   -781   1412    751  -5656   -532    450  -5407   -218   -752   -178    426    530    766    802   -504   -338   -741  -5519  -4836   201
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     T     -1 -11845 -12887   -894  -1115   -217  -2843      *      * 
+    58    493  -5369   1490   1410  -5691    636   -254  -1731    -57  -5385  -4458    623  -2057    386    201    549   -204  -4991  -5553   -592   202
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     T     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    59    215    330    537   1571  -1811   1046  -3531  -2681   -172  -1703   -214  -1884   -314    208   -101    347    343   -824  -5546  -1398   203
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     S     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    60   -422   -954   -121    754  -5690   -239    -77  -5441    670   -722  -4458    443   2516    -25    218   -375  -2149  -2318  -5553   -618   204
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     S     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    61    667    285    484    267  -2069   -620    920  -2436    -20    597   -316  -1867   -895   -851    657   -773   1458  -1164  -5539  -1553   205
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    62    314    304   -831   1098   1221  -1825   1259  -1014   -409   -970  -1097  -1780  -5020    230   1332  -1378  -1013    309   -717   1386   206
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    63   -797  -5364  -1341    750  -1887  -2331   -932  -1058   1082   -981  -4453  -1866   1937  -1558    961    454    613    227   -144  -4867   207
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    64   1130   2050  -6530  -5894    538    -98  -4605  -1876  -5489  -3861  -1130  -5379  -5784  -1032  -5290   1013    243   1427    537   2443   208
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    65  -4104    223   1355  -4598  -1203  -5450   -176    508   -351  -1083  -1217   -601  -5517  -1792   -378   1205   1931   1045  -4688  -1296   209
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    66  -7091  -6500  -9564  -9041    366  -9384  -8247   2131  -8885   1864  -1038  -9087  -8520  -7787  -8466  -8766  -6971   2348  -6814  -1672   210
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    67   1613   1081  -6521  -5885    340   -298  -4603  -3506  -5483  -1309  -3217  -5375  -5782   -467  -1983   -323   -275   1594   3554   1377   211
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    68  -9285  -8565   1438  -8544 -10076   3643  -8773 -10978  -9549 -10412 -10266  -8744  -8844  -9135  -9400  -9466  -9515 -10476  -8857  -9945   212
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    69  -2361   -730  -3780  -2141  -5595  -1786   -115    -16   -336   -365  -4401    329   3343    266    539  -1141  -2291  -2457  -5506  -4841   213
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    70  -1655   1194  -6543  -5910  -3988  -5739    233    685  -5506    571  -3236  -1805  -5796  -5130  -5308   1157   2937   -361  -4492  -4150   214
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    71  -5347   5748  -8186  -7892  -5766  -6727  -6957  -1820  -7577  -2760   -973  -2039  -7130  -7190  -7395  -2515  -5522  -2119  -6784  -6480   215
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    72  -4170   -522   3161   1734   -862  -5649  -4489  -2008  -5077    191   -771  -1039  -5705  -4796  -5065  -4709    635  -3514  -4541  -1231   216
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    73   1150  -5383  -3776   -341  -5724    754  -3571  -5473  -3154  -5421  -4496   -249    454  -1338   -505   2630  -1496  -1561  -5590  -4910   217
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     T     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    74   -154   -684   1640  -4129  -4490   1632     67   -502  -1110    774    685     -5  -5368  -3872  -1888   -139    226   -335  -4848  -4407   218
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     T     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    75  -9166  -8596   4011  -8037 -10030   1070  -8530 -10877  -9251 -10333 -10165  -8309  -8749  -8751  -9287  -9233  -9364 -10390  -8854  -9811   219
+     -   -149   -500    233     43   -381    398    105   -627    210   -464   -721    275    393     45     96    359    117   -370   -295   -243 
+     -    -36  -5360 -12923    -70  -4402   -701  -1378      *      * 
+    76  -1206   2156  -6527  -2648    857  -5733  -4604   1334   1009   -419   -801  -5377  -5783   -493   -898  -4818      2   2226   -189   -485   221
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    77  -2414  -4146  -6676  -6041   1881  -5885  -4756   2300  -5639   1676    614  -5531  -5923  -5252  -5437  -4972   -861   1229   -191  -1485   222
+     -   -151   -502    231     48   -382    399    117   -628    209   -468   -710    274    392     47     94    359    118   -371   -296   -237 
+     S   -150  -4118  -4593  -1137   -875   -701  -1378      *      * 
+    78   1676    146    160   -553  -5570   1390      0  -1553   -124   -938  -1153    252  -1020  -3032   -637   -722   -457   -369  -5464    604   226
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E   -197 -11820  -2970   -894  -1115  -1657   -550      *      * 
+    79  -2162  -5141    158   1079  -5462   -818   1251  -1393   1663  -2901  -4230     56  -1987    754   2238   -817  -1243  -1398  -5324  -1425   227
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E  -2423 -11639   -298   -894  -1115  -2508   -279      *      * 
+    80  -4102  -3772  -5476  -5223   3620   -105  -2492  -3441    857  -3412  -3055  -4306  -5199  -4195  -4447  -4349  -4042   -345  -1881   2833   228
+     -   -157   -498    248     43   -392    405    100   -590    201   -471   -722    274    389     48     92    360    113   -361   -306   -261 
+     .  -4563    -63 -10441  -2180   -360    -25  -5869      *      * 
+    81  -2459  -5357   2559   1490  -5678   -750  -1031  -2226      1  -1583  -1395    617    -55    113   -143   -282     96  -4979  -5540  -4858   237
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11868 -12910   -894  -1115  -1413   -679      *      * 
+    82   -673    324  -5783    -47    503  -1350  -1196    807  -1464  -1079  -1232  -4988  -5652    506   1496   -145   -791   1423  -4547   1902   238
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11868 -12910   -894  -1115  -1413   -679      *      * 
+    83    432  -5274  -2217    442   -297  -4882    388  -5282    211     50    272  -3533   1027    175   -245    591    553   -199   1900    648   239
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11868 -12910   -894  -1115   -386  -2090      *      * 
+    84  -1601  -4045  -6565  -2579   1422  -5768   -966   -454  -5524   2757   1842  -5414  -5815  -5144  -5323  -4853  -4160   -314   -621  -1544   240
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    85  -1274  -5373    751   -615  -2076  -1635  -3533  -5444   -696  -5389   -285  -1044   3667  -3073  -1272   -633  -1489  -4995  -5557  -4874   241
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E   -823 -11881  -1202   -894  -1115   -701  -1378      *      * 
+    86   -504  -4596  -1323    785   -941   -358   1009   -686   1088    842  -3686   -967   -445   -299    335   -137   -258    244  -4781   -971   242
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .  -1837 -11058   -475   -894  -1115  -5707    -28      *      * 
+    87  -2493  -3105  -3828  -4056  -4777    -21   4919  -4828  -4196  -5063  -4275  -3527   1360  -4031  -4242  -2712  -2903    -12  -5069  -4613   243
+     -   -150   -504    233     45   -385    395    102   -618    208   -463   -724    274    405     45     95    358    118   -370   -298   -253 
+     .  -4390    -72 -10267   -808  -1222  -5464    -33      *      * 
+    88  -1864  -1755    875  -3219    441   1046  -2214  -1257  -2892   1132   -955  -2882      5  -2585    187  -2433  -1804   1302   1989    864   250
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .     -3  -9320 -10362   -894  -1115    -24  -5911      *      * 
+    89   -566  -5357    981   1693  -5678  -1302  -3517  -1593    541  -1101   -256   -149   1244   -156    816   -128    273  -1801  -5540  -4858   251
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11868 -12910   -894  -1115   -391  -2074      *      * 
+    90  -1387   -498  -1503  -1097  -1906  -1961    433    763  -1031   2064    276  -5263    632  -1927  -5194  -4771     91   1208  -4495  -4147   252
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    91    211  -5369    205   1426  -5691   -128    507  -2545   1005  -2967  -4458   1077  -1238   1567    823   -553   -357  -4991  -5553   -650   253
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    92     56  -5354   -857   1287  -5668  -1632  -3534   1041  -1831   -874  -4445    425   1018   -311    231  -1106  -1433   1651  -5541  -1373   254
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -13 -11881  -6863   -894  -1115   -701  -1378      *      * 
+    93  -2742  -7199    284   -974  -7442   3437  -4893  -2264  -2243  -7186  -6383    196    -51  -1912  -5547  -5227  -2485  -6792  -7367  -6500   255
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11868 -12911   -894  -1115   -395  -2062      *      * 
+    94  -2834  -8548   3826     50  -8627  -6094  -5570  -8650  -6050  -8465  -7942  -2107  -6700  -2184  -7125  -2045  -6521  -8073  -8674   2022   256
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    95  -4181    255  -6387  -2796    739  -2675  -1035    112     17   1163  -1098  -2030  -2211  -2287    932  -2616  -4121   -643   3916   2319   257
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    96  -2928  -6191  -9320  -8877  -1204  -9162  -8403   2053  -8771   2179    441  -8848  -8491  -7950  -8528  -8549  -6679   2087  -7087  -7147   258
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    97   1595   -663  -6532  -1613   -982    982  -4605    243  -5490    168   -118  -5380  -5784  -2098  -5290  -1956  -2129   2089   -280    779   259
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    98  -1646  -4021  -6541  -5906   3201  -2723  -4615   2230  -5501  -1890    951  -5390  -5793  -5124  -5301  -4829  -2160   1356    686    289   260
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+    99  -1778   -838    -41   1142   2032  -1180   1045  -1608   -729    656   1179  -1800   1315   -566   -138  -1482  -1362  -4963  -5536   -768   261
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     S     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   100  -1260   -567   2398  -1280  -5665  -1153    -96  -5410  -3118    420  -1238   2269  -4968    534  -1926    395   -918  -2659  -5540   -197   262
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   101   1766   1859  -6526  -5890  -1741  -1963  -4604  -1184  -5486  -1947   3141  -2216  -5783  -1261  -2085   -425   1232   1198   -251  -4129   263
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   102   -710  -5603  -8373  -8603  -6927   3726  -7619  -1210  -8247  -3404  -1603  -6842  -6808  -7667  -7877  -5416  -5540  -5603  -7958  -7907   264
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   103   3545  -5494  -8121  -8474  -8213  -1254   1050  -2856  -8199  -8311  -7335  -6596  -6590  -7628  -7816  -1235  -5365  -6715  -8436  -8409   265
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   104  -8529  -7443  -2394  -9209  -1503  -8768  -1161  -7422  -8804  -6723  -6821  -7377  -8628  -7523  -8170  -8025  -8379  -7578  -4205   4909   266
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   105   -237   1755  -1797  -1506  -1853   1522    841  -2485  -3258  -5088  -1084   -967  -5041   1619  -3742   -118   2485  -2569  -5368  -1533   267
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     S     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   106   -186     48  -2272   1030    741  -2401    380    889   -499   -459   1879  -1857  -5290   -965  -2036    748   -210   -363    949   1132   268
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     G     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   107    873   1125  -1270  -1033  -4008  -5687    259    266  -5266  -2450    116  -5233   -713  -4943  -5169   2063    579   1643  -4501  -4152   269
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     C     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   108    852   -569  -5819  -2482  -1817  -2695  -1024   -588    416   1376   3173  -1773  -5669  -1601  -1985   -219  -1366  -1375  -4555   1390   270
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     C     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   109   1972  -5371  -1903  -3196  -5692   1273     59  -5442   -875  -5387  -4460    327  -2154  -1344  -1896   1962    140  -4993  -5554  -1547   271
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   110  -1109    150    298  -3749  -1973  -1344    592  -4394  -3633  -2784    831   1232   -531  -3554  -1896   2207   1971  -2218  -5046  -1504   272
+     -   -151   -502    234     41   -383    399    119   -625    212   -466   -723    275    391     43     96    359    117   -364   -297   -252 
+     B   -247  -2672 -12923    -12  -6972   -701  -1378      *      * 
+   111   -342     25   -220   -135   -632   -480     29  -2448   -127  -1254    975   2077   -758    233    197   -105    955   -812   1150  -4866   274
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   112  -8511  -7429  -8892  -9248   3788  -8773   2968  -2181  -8803  -3072  -6779  -7383  -8626  -7522  -8164  -8021  -2259  -7543  -4203   2799   275
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     T    -16 -11881  -6512   -894  -1115   -701  -1378      *      * 
+   113  -2330   -577  -6759  -6317  -5141  -1571  -1237  -2035  -5825     20  -4364   4131  -6140  -5663  -1967  -2471  -4691  -4512  -5594  -5263   276
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     T    -16 -11865  -6501   -894  -1115   -352  -2206      *      * 
+   114   -794   -892  -1990  -3274  -2029   2661   -757  -5150  -1693    970   -204   -763  -4996   -906  -1307    910   -616  -4780  -5422  -4784   277
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     T    -19 -11865  -6309   -894  -1115  -1527   -615      *      * 
+   115  -4155  -3982  -6495  -5859   3395  -5702   1472     74  -2434    113  -1069  -5346  -5752   -619   1708  -4786  -2095    149  -4440    -39   278
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11847 -12889   -894  -1115  -2111   -380      *      * 
+   116  -1147   -895   -738    156  -2111   1589  -1295  -5408    499  -2125   -300   -415   2480    290   -348  -1187   -529  -4959    -86   -667   279
+     -   -150   -501    232     42   -377    399    105   -627    210   -465   -711    275    393     44     95    360    119   -370   -295   -250 
+     -   -113  -5088  -4439   -995  -1005   -226  -2788      *      * 
+   117   -446  -5305    580   -447  -5625   -775   1449  -2469   -386    669    201   -115    844    116   1966  -1478   -483  -1060  -5489  -1547   282
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     .     -1 -11814 -12857   -894  -1115   -976  -1024      *      * 
+   118    380    887  -2296  -1621  -1625  -5637  -4487  -1206  -5158   -913  -3229  -5150   3194  -4852   -324   -321   1356   -615  -4480  -4128   283
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11846 -12888   -894  -1115   -875  -1137      *      * 
+   119   1317  -5353     80    -51  -5674    235   -155  -5425    564  -2381  -4442   1076   1282   -847    -34    469    -31  -1174  -5537  -1538   284
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11864 -12906   -894  -1115   -339  -2256      *      * 
+   120     -5  -5016   -805   1834  -1147  -2532    895   1302  -1202  -1357   -296  -3705  -5079   -817  -1190    -41    423   1338  -5291  -1561   285
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   121   -522   -829  -6521  -2652     20  -1557  -1291    736  -2288   -819  -1156  -5375  -5782  -1960   -398  -4817  -1282   2966  -4471   1558   286
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   122     41   1046  -2331  -1647    456   -728    994    912  -5468    845    -17  -1068  -5780  -5097   -234  -1239  -2217   1112   1281   2048   287
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     E     -1 -11881 -12923   -894  -1115   -701  -1378      *      * 
+   123  -1669    340  -6532  -5896   1095  -5734  -1166   1778  -2668    350    375  -5380  -5784  -5114  -1450  -1931  -1467   2315    486   1573   288
+     -      *      *      *      *      *      *      *      *      *      *      *      *      *      *      *      *      *      *      *      * 
+     E      *      *      *      *      *      *      *      *      0 
+//
+HMMER2.0  [2.3.2]
+NAME  NIF3
+ACC   PF01784.11
+DESC  NIF3 (NGG1p interacting factor 3)
+LENG  350
+ALPH  Amino
+RF    no
+CS    no
+MAP   yes
+COM   /groups/eddy/home/eddys/releases/hmmer-2.3.2/src/hmmbuild example.hmm2 example.sto
+COM   /groups/eddy/home/eddys/releases/hmmer-2.3.2/src/hmmcalibrate example.hmm2
+NSEQ  122
+DATE  Fri Apr 16 11:03:03 2010
+CKSUM 8888
+GA    23.4 23.4
+TC    24.1 24.0
+NC    22.0 23.3
+XT      -8455     -4  -1000  -1000  -8455     -4  -8455     -4 
+NULT      -4  -8455
+NULE     595  -1558     85    338   -294    453  -1158    197    249    902  -1085   -142    -21   -313     45    531    201    384  -1998   -644 
+EVD   -180.735001   0.124881
+HMM        A      C      D      E      F      G      H      I      K      L      M      N      P      Q      R      S      T      V      W      Y    
+         m->m   m->i   m->d   i->m   i->i   d->m   d->d   b->m   m->e
+          -12      *  -6953
+     1  -1169  -5587   2255   2289  -2333  -1931  -3746  -5659    380  -1940  -4676   -119  -5181    915      6  -1098   -418  -1459  -5770  -5087     1
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378    -12      * 
+     2  -2251  -6145  -9105  -8594    349  -8711  -7768   2712  -8376   1740  -1230  -8380  -8291  -7700  -8142  -7963  -6537   1780  -6895  -1988     2
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+     3   -436    490  -2634    -28  -1126  -2818  -4772   1894   -501    213   1375  -1964  -5967  -5188  -1707  -1138     56   1620  -4717   1194     3
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+     4    -94   -651    695   1414  -2152   -598   -403  -5658    614  -1275  -4676   1188  -5181    875    762    705   -427  -1419  -5770  -1650     4
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+     5    450  -4293  -2738  -1344   1690  -5878    215   1306   -250   -113   -454  -2370  -5933  -5063    379  -1161   -732    697   1971   1775     5
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+     6  -1906    431  -6787  -6151    640  -5990  -4861   1710  -5746   2391   1857  -5636  -6037  -5367  -5546  -5075  -1724    109   -599   -395     6
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+     7  -2642  -5590   1586   2611  -5911  -1420  -1344  -1596  -3330  -1038  -4679   1980  -5183   -904    102  -1818    -52  -5212  -5773  -5090     7
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+     8    583  -5587     38   1753  -5908   -753  -3746  -2414   1539  -2515  -1338   -146  -5181    816    642    732   -730  -2896  -5770  -1722     8
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+     9  -2038   -617   -673  -1612   1513  -5869   -440   1784    259   1299    651   -748  -5924  -2038  -1485  -2825  -1191   -135   1355   1008     9
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    10   2292    892  -6753  -6117   1518  -2694  -4826   -966  -5711    828  -3436  -5601  -6005  -5334  -5511   -410  -2535   -915    321   2249    10
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    11  -2349  -5587      0   -368  -2346  -1675  -1245  -2450  -1413  -2358  -4676    522   3647   -251  -2179   -315  -4053  -5208  -5770  -5087    11
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    12  -1996   -127  -6219     96   1328  -5867  -4709    695    812    953  -3500  -5335   1936   -405   -469  -1531   -683    396   -767  -4393    12
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    13    720  -1006    912    939  -2280  -1076   1720  -2735    740  -5603  -4676    840  -1410    331    402   1138  -1629  -5209    282  -2022    13
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -28 -12109  -5729   -894  -1115   -701  -1378      *      * 
+    14   -772  -5389   -898  -2060   -417  -1431  -3783  -1784    265   2082  -4499     47  -5206    403   -305   -150   -503  -1773   1436   1083    14
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12082 -13124   -894  -1115  -2065   -394      *      * 
+    15   2903    127  -6518  -5895   1119  -5897  -4758   -985  -1231  -2145  -1297  -1999  -1164   1389  -5404  -1484  -4313  -3646  -4685   1021    15
+     -   -145   -501    232     45   -381    398    111   -627    210   -467   -721    275    395     44     95    358    116   -367   -295   -250 
+     -   -103  -5232  -4564   -995  -1005   -913  -1092      *      * 
+    16   -111     75    646   2620  -5766  -5029  -1135  -2600    -92  -1051   1440  -3673   -413    379   -522   -689  -3986   -873    320   -374    18
+     -   -150   -501    231     47   -382    398    104   -628    217   -468   -722    274    392     47     97    358    118   -371   -296   -244 
+     -   -167  -3324  -6742    -16  -6482   -373  -2133      *      * 
+    17  -1057  -5579   2411   1610  -5900    147  -3735  -5651     51  -3121  -4668  -1165   -223  -1073  -3826   1462   -246  -5201  -5762  -5078    20
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12082 -13124   -894  -1115  -2055   -397      *      * 
+    18  -1362  -4364  -1437  -5153   1248    226  -1142  -3891  -1076  -1993  -3558  -2175  -2457  -4704  -2508  -4781  -4271   -668   5293   2095    21
+     -   -149   -500    233     43   -381    398    105   -626    210   -466   -721    275    394     45     99    359    119   -370   -295   -250 
+     -    -26  -5828 -13124    -83  -4162   -235  -2732      *      * 
+    19   -925   1179   3914  -5962  -8518  -1479  -6770  -8385  -7260  -8523  -7664  -1258  -6835  -2109  -7688   -339  -5847  -2999  -8683  -8224    23
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    20  -1505  -5585  -3962   -949  -5906  -5088    910  -2608    112  -1842  -4675   3382   1765  -1025   -545   -682   -872  -5207  -5769   -808    24
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -15 -12109  -6657   -894  -1115   -701  -1378      *      * 
+    21   -483   1767  -2564  -6033  -1699  -2838  -4798    289  -5644  -1902  -3430   2111   -637  -5280  -1499    612   -275   2382  -4684  -1438    25
+     -   -155   -506    233     45   -347    392    100   -614    214   -467   -714    273    393     43     93    357    111   -365   -283   -249 
+     -    -74  -4683  -6536  -3148   -173   -342  -2244      *      * 
+    22  -7717  -7960  -7442  -7630  -9670   3822  -7694  -9875  -1480  -9577  -9045  -7634  -8320  -2328  -7103  -7826  -7971  -9161  -8741  -9179    55
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -15 -12094  -6677   -894  -1115  -1617   -569      *      * 
+    23  -2402  -4268  -6789  -6154    619  -5994  -1183    -53  -5750   2880  -1205  -5639  -2502  -5366  -5547  -5079  -4384     95   1717   -187    56
+     -   -152   -503    233     45   -374    399    116   -625    211   -465   -724    275    393     46     93    360    114   -366   -298   -253 
+     -   -128  -3904  -5770  -1575   -590   -840  -1179      *      * 
+    24  -4356  -4227  -6431  -1652  -1884  -5873  -4729    117  -1449   1395    861  -1453  -5926   3485  -5361   -553  -1390   -779  -4680  -1630    60
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12069 -13111   -894  -1115  -1219   -810      *      * 
+    25   -592    877  -2523  -6088  -1959  -5929  -1011   1603  -1089    515   -903  -1219  -5979  -2218  -5485  -5013  -4322   2913  -4666  -1585    61
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -287 -12083  -2475   -894  -1115  -2022   -408      *      * 
+    26  -1123   -643   -300   1246   -901   3047  -3452  -5358  -1012  -1936  -4378  -1611  -2061   -129  -3540  -2147  -1064  -4910  -5473  -4791    62
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -  -2796 -11797   -225   -894  -1115  -3600   -124      *      * 
+    27   1498   1588    260  -1937    758  -2940  -1707  -1486  -1772   -108  -1095    367   1798  -1632  -2051   -143  -1584  -1358  -2319   1078    63
+     -   -150   -503    229     54   -384    397    109   -622    217   -465   -724    274    392     42     92    361    116   -373   -298   -253 
+     -   -931  -1075 -10163  -1826   -478  -3439   -140      *      * 
+    28  -2311  -2585   1204   -531   1541  -3545  -2364  -2157  -2463    -19  -1776  -2599   2819  -2293  -2752    244  -2258    447  -2998  -2576    72
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -219  -9790  -2842   -894  -1115   -763  -1283      *      * 
+    29   -538   -345   2652  -1040   -758   -670    140  -1747  -2768  -1734  -4006   1302  -1798  -2725  -1595   1603  -1811  -4510  -5113    142    73
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11473 -12515   -894  -1115  -3133   -175      *      * 
+    30   -947  -4376   -959  -1928   1276    572   -837  -2029   -944    431   -822  -3664   2308  -3251   1092   -327     16  -1200  -4722  -1347    74
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11549 -12591   -894  -1115   -247  -2669      *      * 
+    31     40   -939    807   1901  -5840   -333   -335  -2615    -89  -1686  -4608   1338   -267    107   -533    689   -659  -5141  -5702   -236    75
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12039 -13081   -894  -1115  -3029   -189      *      * 
+    32    606  -5519    856   -320  -5840   1133    900  -5591   1259  -1808  -1504    815  -2379    936    201    336   -284  -5141  -5702  -5020    76
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -  -2087 -12039   -388   -894  -1115  -3029   -189      *      * 
+    33   -778    764   -300    468  -3963    -39  -1801  -3713   1919  -3658  -2731    835  -3235    189   1633   -657   1198  -3264  -3825  -3142    77
+     -   -155   -506    240     42   -376    395    106   -628    209   -460   -726    284    393     43     96    353    117   -363   -300   -242 
+     -   -244  -2686 -10996  -3264   -159  -3711   -115      *      * 
+    34   -131  -3897    984    535   -577  -1076   1861   -965   1033  -3913   1312  -2033   -839    711   1448   -208     40  -3519  -4080  -3397   102
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10259 -11301   -894  -1115     -9  -7324      *      * 
+    35   -609  -5587    744   2458  -2106  -2079  -1024  -2745     29  -1714  -4676    709    153   1024   -910   -141   -244  -1825  -5770  -2046   103
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    36   -629  -1047  -2491  -6110   -190  -5953  -1386   2354  -1263  -1225  -3437  -5597  -2576  -2261  -5508  -2809  -4347   2896  -4692  -1809   104
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    37   -990  -5587   -987    844  -2249  -1974   1502  -2464   1732  -2401  -4676   1149  -5180    623    890    501   1218  -2848  -5770  -5087   105
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    38  -1914  -1041  -2287  -2241  -5908    574   -524  -1760   2421  -5603  -4676    389  -5181  -1769   2305    155    486  -5209  -5770  -5087   106
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    39   -680  -5840  -9048  -8729  -6443  -8904  -8921   3001  -8702    -62  -1522  -8559  -2348  -8627  -8863  -8286  -6347   2557  -8224  -7742   107
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    40   1226  -1073  -6752  -6116     79   -318  -1357   -364  -2621   2139   1720  -5600  -6004  -1176  -5511  -5039  -2334    584  -4691    -37   108
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    41  -1525     28  -6788  -6153   1124  -5992  -4867    845  -5750   1468  -3467  -5639  -6041  -5374  -5551  -2101   1427   2260  -4731  -1455   109
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    42   2319   3368  -8274  -8327  -2171    511  -7163  -6782  -7927  -2466  -6344  -6699  -6732  -7419  -7589     87   2034  -2843  -7543  -7332   110
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    43  -2517  -4247  -6768  -6132  -1713  -2598  -4842   -183  -5727   2432   1044    281  -6020  -5350  -5527  -5055  -2152   2048   -176  -4365   111
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    44  -6066  -7643   3774   -204  -2008  -6159  -5463  -2365  -5650  -7661   -162  -1091  -6653  -5136  -6430   -570    800  -7240  -7930  -7047   112
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    45   1747    910  -6767  -6131  -1892  -5970  -4842    521  -5727   1288   -159  -5616   1730  -5349  -5527  -5055  -1668   1233  -4706   -244   113
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    46  -2665   1861     94  -1453  -5103  -2034  -4017  -1732  -3767  -1224  -4147   -122  -5401  -3695   -130    933   3140  -1928  -5324  -1738   114
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -13 -12109  -6794   -894  -1115   -701  -1378      *      * 
+    47   -256  -5567    -28   1840  -1312  -2685  -1192  -1662  -1005    647    634   -691   1584    461   -296   -100  -2336  -1804  -5752   -700   115
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12096 -13139   -894  -1115   -359  -2183      *      * 
+    48   1580  -5587   1563   2049  -1141  -2872   -323  -5659   -244  -5603  -4676  -2014   -284    862   -785   -342  -1154  -2923  -5770  -1798   116
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    49   -339   -920  -6757  -1187  -1187  -5962  -4834    200  -5717    253  -3443   -329  -6012  -5341  -5518   -160   1058   2871  -4700  -4358   117
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    50    405   -978  -2562  -6302     68  -6148  -5035   2248  -5905   1410    872  -5794  -6189  -5533  -5712  -2877  -4513   1967  -4893  -4550   118
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    51    -47  -5587   1930   2264  -5908  -2796  -3746  -5659    175  -1395  -4676    618  -2429    551    450  -1077   -714  -1903  -5770  -1856   119
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    52    -37  -5587    -44   2754    -21  -5088  -3746  -5658    798  -1323  -1437   -445  -5181    891    884  -1111  -4053  -5208  -5770  -1650   120
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    53   3483    608  -6846  -6214  -1779  -2936  -4932  -2227  -2630  -1373   -443  -5699  -6096  -5433  -5613  -5135  -4436  -1621  -4791  -4451   121
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -12 -12109  -6918   -894  -1115   -701  -1378      *      * 
+    54   -200     32  -1455   -373  -4788  -2748  -4179   2655    468    136  -1189  -4370  -1622  -1766   -293  -1261  -1580   1165  -5117  -1486   122
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12098 -13140   -894  -1115  -1454   -655      *      * 
+    55   1116   -934   1094   2036  -1861  -1912    273  -5647    436  -3069  -4665   -353   -336    765    180    305  -4041  -5198  -5759  -1862   123
+     -   -150   -501    233     50   -382    401    104   -628    211   -465   -722    274    394     44     94    359    116   -371   -296   -251 
+     -   -181  -5167  -3475  -1755   -507  -1454   -655      *      * 
+    56     51    -33  -4012    408  -2159  -1230   1479  -1098   1280    893    567   1199  -5134    425    333   -827  -1574  -1792   1012  -1778   130
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11962 -13004   -894  -1115  -2817   -221      *      * 
+    57  -2566  -5497   -179  -2085  -5818   2327    990  -5569   1457  -5513  -4587   2231  -2321    625   -402   -909  -3961  -5119  -5679  -4995   131
+     -   -149   -500    232     42   -381    398    105   -627    212   -462   -721    275    393     45     95    362    117   -370   -295   -250 
+     -    -72  -4373 -13017    -34  -5410   -205  -2915      *      * 
+    58   2455   2546  -1771  -2723  -2094  -1914  -1442    -56  -5607  -2166  -3437   -201  -5975  -5253  -5450   -997   -951   1589  -4690    360   133
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12097 -13139   -894  -1115   -361  -2177      *      * 
+    59  -2065  -5937   3021   -513  -6250  -2744  -4039  -6010  -2129  -5950  -5036   2622  -5450    983  -2296    -18   -741  -5556  -6118  -5415   134
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    60    324   -940  -6758  -6122   1363  -5960  -4831  -1357  -5717   2374   2634  -2199  -6010  -5340  -5517  -2914   -739    212  -4696  -4354   135
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    61  -6950  -6379  -9549  -9137  -1292  -9440  -8815   3219  -9064   1733  -4313  -9123  -8772  -8296  -8870  -8857  -6886   1055  -7452  -7486   136
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    62  -7412  -6803  -9876  -9343   1002  -9722  -8544   2915  -9191   1103  -1071  -9435  -8787  -8028  -8737  -9124  -7282   2019   -729  -7234   137
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    63   1271  -4842  -7495  -6939  -4995  -6596  -5770  -2239  -6574  -1792  -1076  -6384  -6715  -6218  -6399   1687   2547   1551  -5626  -5277   138
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    64  -8548  -7657  -9047  -8870  -1965  -8826   5193  -7646  -1915  -3053  -7012  -7442  -8684  -7189  -1599  -8110  -8341  -7779  -4514   1937   139
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    65 -10068  -8941  -8614   -965 -10022  -8731   5431 -11325  -9792 -10673 -10610  -9232  -9187  -9513  -9585 -10274 -10202 -10986  -8996  -9816   140
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    66  -1903  -5824  -7117  -1878  -8491   1493  -7487  -8330  -8106  -8562  -7611  -6556   3921  -7476  -7986  -5421  -1644  -7018  -8696  -8574   141
+     -   -150   -501    232     45   -382    403    105   -627    212   -467   -721    274    393     44     95    360    116   -370   -295   -250 
+     -   -111  -5657  -4212  -1551   -602   -701  -1378      *      * 
+    67  -1813  -4169  -6690  -6055   1819  -5893  -4765   1142  -5650   2176  -3369  -5539   1012  -5273  -5450  -2555  -1206    306  -4629    842   145
+     -   -149   -500    232     42   -371    399    105   -627    212   -464   -721    275    393     45     95    358    117   -370   -295   -250 
+     -    -70  -4401 -13072    -34  -5435  -1362   -711      *      * 
+    68  -1940   -759  -7032  -6399   2695  -6251  -5119   2712  -6000   1052   1364  -5898   -915  -5594  -5792  -5341  -4621  -2435  -4932   -216   147
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12057 -13099   -894  -1115  -2697   -242      *      * 
+    69  -2485  -4188  -6705  -6069   3822  -2760  -4777  -1270  -2579   -820   -272  -5553  -5958  -5287  -1421  -4993  -2202  -3601   3864   1041   148
+     -   -150   -494    247     45   -383    396    119   -621    206   -457   -694    273    385     45     87    358    108   -372   -285   -245 
+     -  -3075  -4018   -287  -3103   -179  -2697   -242      *      * 
+    70   -186  -3611  -2099  -1511     11  -3152  -1726  -3686   2411  -3603  -2706   1019    105   1771   1856  -2091  -2131  -3261  -3730  -3121   164
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -78  -9587  -4286   -894  -1115   -140  -3431      *      * 
+    71  -1745  -5467  -1219  -3296  -2254   1170   1409  -2306   1855  -1702  -4556    827   -499   -922   1989    422  -1513  -2688  -5651  -4969   165
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -16 -11986  -6569   -894  -1115  -1835   -474      *      * 
+    72   -240  -5484   -460    565  -5805   1747  -3643  -2202    294  -5500  -1334  -1023   2768   -443   -705   -576  -3950  -5106  -5667  -4985   166
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12001 -13043   -894  -1115  -2365   -311      *      * 
+    73    197  -4164  -2690  -2599    174  -5834  -1005    559  -1572   1855    668  -2381   1160  -2032  -5344   -758  -1097    969    616  -1779   167
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12015 -13057   -894  -1115   -503  -1764      *      * 
+    74  -1139  -5562    139    -99  -5884  -2034  -1300  -5634   2781  -1462  -4651   -777    281   1094    384     58  -1113  -5184   -322   -416   168
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -25 -12084  -5902   -894  -1115  -2010   -412      *      * 
+    75    272  -1081     42  -1583  -1144  -1770    115  -1482    503  -1786  -4625    331   -178    333   1667   1141    339   -472  -5720    136   169
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12060 -13102   -894  -1115  -2645   -251      *      * 
+    76  -2533  -4186  -6694  -1842   -983  -5905  -4776   2719   -995   1748   -193  -1140  -5955  -1795  -5459  -2609  -2050   1026   -418  -4301   170
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12060 -13102   -894  -1115  -2645   -251      *      * 
+    77  -1024    141    612   -173  -1884  -1194    124   -796    654  -1525  -1377    860  -2484  -1593    387   -731   2407   -320  -5716  -5036   171
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12060 -13102   -894  -1115  -2645   -251      *      * 
+    78    216  -1001    706    352    634   1712  -3702  -5594   -341   -752   -602  -1068   -872   -132  -1298    382    603  -2820    261   -980   172
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12060 -13102   -894  -1115  -2645   -251      *      * 
+    79   -517  -5538   1741   1218  -2327  -1908   -990   -494    375  -3284   1253   1169   -913    174    -41    461   -751  -1243    315  -5039   173
+     -   -141   -506    229     36   -377    394     99   -620    211   -460   -715    281    390     39     92    358    115   -369   -301   -225 
+     -   -685  -3231  -1882  -1872   -460  -2645   -251      *      * 
+    80  -1962  -5108   2079     -1   -656   -499   -675  -2262   -493  -5124  -4197   1231   1187   -592   -147    132   1152  -1471  -5291   -430   178
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11603 -12645   -894  -1115  -5392    -35      *      * 
+    81   -361  -4295  -2014  -1350    754  -4960  -3688    -75   -626  -1036   -752  -1663   2240   -587   -973   -560  -1955   -634   1767   2837   179
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -19 -11603  -6290   -894  -1115   -286  -2474      *      * 
+    82  -2643   -702  -4755   -209  -1200  -5400    647    478   2114   -435   -267  -1164    555   1381  -1546  -1016   -761    622   -403    526   180
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12021 -13063   -894  -1115  -1492   -634      *      * 
+    83    345  -5528  -1997    754  -1304   1895    177  -2423    706  -5544  -4617   -113  -5122   1368     16   -186  -1662  -5150  -5712   1549   181
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12048 -13090   -894  -1115  -1837   -474      *      * 
+    84    338  -1159   -497    659  -2209  -1366   -354  -2630   1361  -3355  -4628    816  -5133   1102   2399   -207   -962  -5161  -5722  -5040   182
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12060 -13102   -894  -1115  -1507   -625      *      * 
+    85   -838    618  -6696  -6062  -4154  -5916  -4786   1695    408   1038   1635  -5556  -2629  -2313   1873   -175  -4311    776  -4657  -1464   183
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12073 -13115   -894  -1115  -2338   -318      *      * 
+    86   -332  -4198  -6715  -1687  -1777  -5919  -4790   2419  -1401   1580  -1193  -5564   -997  -5298  -2246  -5003  -2298   1429  -4656    879   184
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12073 -13115   -894  -1115  -2338   -318      *      * 
+    87    302  -4668  -4828    375     54  -1908   -479    865   1470    609  -1275  -4414  -5534    788   1034   -710  -1087   -919   -641     20   185
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12073 -13115   -894  -1115  -2338   -318      *      * 
+    88    -22  -5549   -286   -149   -560  -1178  -3712   -490   1957    414  -4638   -427   -884   1410    870  -2562    372  -2612  -5733  -1809   186
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12073 -13115   -894  -1115  -2338   -318      *      * 
+    89   1286   1044  -6818  -6184    -38  -6025  -4898    182  -5781   2678     61  -5672  -6068  -5398  -5580  -2728  -1601  -2219  -4751  -4415   187
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12073 -13115   -894  -1115  -2338   -318      *      * 
+    90    137    169  -6712  -2584  -1040  -5918    -68   2776    166   1324    253  -1303  -5968  -5296  -5474  -2820  -1534   -123  -4656  -1473   188
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12073 -13115   -894  -1115  -2338   -318      *      * 
+    91    -67  -5552   -923   1630  -5873  -2878  -1268  -5624   2215  -3226   -451  -3688  -2167   1754   1561  -1374   -619  -2519  -5735  -5052   189
+     -   -150   -501    232     42   -382    398    105   -627    212   -464   -721    274    393     44    101    360    116   -367   -295   -250 
+     -    -88  -4081 -13115    -26  -5784   -191  -3015      *      * 
+    92    436   -841  -1033   -110  -5908   -574   2830  -5659   1026  -5603  -4676   2876   -959  -1761  -2164   -281  -4053  -2683  -5770   -811   191
+     -   -137   -503    235     39   -384    395    109   -630    209   -459   -724    275    390     42    102    357    114   -366   -298   -247 
+     -    -29  -5657 -13151  -3385   -145   -701  -1378      *      * 
+    93  -1768  -5593   2221   -436  -5914   1650   -498  -5665    486  -3170  -4682   2500  -2429  -1022     24  -3999  -4058  -2773  -5776  -5093   203
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    94  -1901   1213  -6782  -6147  -4217  -5986  -4860   3501  -2589    691    626  -5632  -6035  -5367  -2258  -2760  -2347   -329  -4725  -4382   204
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    95   1575   -914  -5853  -5264  -4343   -554  -1433  -3891  -5018  -1718  -3564   1799    497  -2110  -5110   2060   -509    -36   -570   -784   205
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    96  -2046  -4252  -6773  -6138    -37  -5977  -1038   1326  -5734   2183  -3453  -2487  -6026  -5357  -5534  -5062  -1581   2196  -4712   -373   206
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    97  -7686  -7042  -9531  -9236   2147  -9280  -6513   1478  -8939   -114    267  -8481  -8662  -7744  -8402  -8559  -7531  -2062   -223   4013   207
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    98   2207   1305  -6435  -5950  -5530  -1365  -1179  -5104  -5728  -5420  -4722  -2453  -6253  -5523   -671   2461    273   -574   -253  -5582   208
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+    99   1987   1187  -6753  -6117    394  -5954  -4826    825  -5711    330   1573  -5601   1334  -5334  -5511   -846  -2544   -794   -647   1520   209
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   100  -8799  -8407  -9472  -9840  -9476  -8455   5462 -10883  -9976 -10428 -10173  -9476  -8992  -9807  -9530  -9111  -2423 -10174  -8830  -9274   210
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   101  -5472  -5506   -734  -7737  -5885  -6792  -6915   -710  -7589    784  -4869  -6996  -7202  -7161  -7424   -275   3590  -2243  -6813  -6525   211
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   102    620   -768  -7570  -7575  -8163  -1961  -1071  -7953  -7487  -8176  -7239   3536   2168  -1897  -7476     14  -5523  -2505  -8355  -8181   212
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   103   -217  -1086  -6754  -6118   1568  -5956  -4827  -1118  -5713   2255   1199  -5602  -6006  -5335  -5512  -2843  -2224    -31   2639   1746   213
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   104  -7957  -8797   4199  -6020  -9373  -7466  -1062  -9970  -7498  -9638  -9246  -6400  -8024  -6923  -2262  -7650  -8076  -9451  -8872  -8633   214
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -14 -12109  -6746   -894  -1115   -701  -1378      *      * 
+   105   1925     28  -5541  -4962   -397  -2889   -539   1161    -55  -2952   -478    348  -2316    231   -130    921  -2533    650  -4854  -1508   215
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -14 -12096  -6727   -894  -1115  -1527   -615      *      * 
+   106   2194    615  -2255  -2127  -4863  -5387   3203  -1622  -1492  -1725  -1088    -10  -5467  -3857  -2002    114   -255    808  -5162  -1468   216
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -12 -12082  -6902   -894  -1115  -2051   -399      *      * 
+   107    511  -1138   -939    171    432  -1390   1304  -1752    746  -1878  -4635   -756   2640    424   -262  -2434   -742  -1788  -5730  -1920   217
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -70 -12071  -4415   -894  -1115  -2392   -305      *      * 
+   108   -677  -5480    660   1364   -987   2021  -1169   -707   -266  -1826  -4570   1359   -353   -565  -3732  -1309   -476  -2566  -5665   -826   218
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -  -1853 -12001   -468   -894  -1115  -3519   -132      *      * 
+   109  -2575  -2424    490  -4149    798  -4107  -2970   1190   -848   1877  -1625  -3704  -4158   -312   -447  -3185  -2516   1231  -2879   1008   219
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10150 -11192   -894  -1115   -158  -3270      *      * 
+   110  -2784  -5926  -5922  -5961  -7742   3720  -6126  -7438  -2348  -3166  -1557  -2213  -2059  -1980  -5815  -1888  -5550  -6658  -7730  -7392   220
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11999 -13041   -894  -1115   -456  -1885      *      * 
+   111   -665  -4207  -6726  -6090   -964  -5928    253    578  -5685    974   1837   1850   -954  -5308  -5485  -2019    793   1857  -4665  -4323   221
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12082 -13124   -894  -1115   -920  -1085      *      * 
+   112    308    668  -6007  -5411  -1862  -2084  -1074  -2237  -5141  -2812   -144   3714  -2145  -1883  -2263    826  -2216  -1622  -4765  -4401   222
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12095 -13137   -894  -1115   -342  -2244      *      * 
+   113   1015  -5576   2784    401    -23  -1360  -3749  -1825   -335  -5590  -1229  -1252  -5183   -235   -911  -1318    -72   -782    886   -213   223
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   114    525    611  -6114  -2621  -4285   -894    489   -761   -605   -312    136  -5277  -5904   1821  -2382  -1017      8     83   3751   1962   224
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   115  -2051   -879  -7341  -6708    841  -6573  -5436    949  -6315   2786   -286  -6222  -6561  -2223  -6096  -5669  -4925    488    349  -4910   225
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   116   2962   1192  -2408  -2847   -888   -590  -4811   -314  -5658   -848   -491  -2327  -5995  -1938  -5483   -298  -1160   -313  -4698  -1607   226
+     -   -150   -501    232     44   -382    398    116   -627    209   -464   -721    274    393     44     97    360    118   -370   -295   -250 
+     -    -82  -4185 -13151    -28  -5719   -701  -1378      *      * 
+   117   -220  -5587   1403   1898  -5908  -2040    548  -2677   1682  -3379  -1544    850  -5181   1295    715  -1901  -4053  -5209  -5770  -5087   228
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   118    988    -77  -1553   -701  -1139   -573   -427    556    335    950   1222  -4117  -1509    482   1207  -1471  -2296   -163   -517  -4801   229
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   119  -2159   -914  -8720  -8110    -17  -8117  -6946   1044  -7781   3011   -496  -7782  -7811  -7080  -7479  -7277  -6252   -961  -6263  -1819   230
+     -   -150   -505    235     40   -371    404    106   -619    210   -469   -725    273    393     40     93    359    121   -372   -299   -249 
+     -  -7274  -3634   -131  -1840   -473   -701  -1378      *      * 
+   120  -1183  -2220    622    753    691    191   -919    388   -592  -2169  -1352    844  -2325   -534  -1059    463    561   1061  -2502  -1926   235
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -152  -8589  -3359   -894  -1115   -182  -3073      *      * 
+   121  -1254  -5569     95    546  -5886   3041    214  -5641   -483  -3235  -4662   1299  -2347   -955  -3819  -1704  -4027  -5190  -5751  -5060   236
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11935 -12977   -894  -1115  -4099    -87      *      * 
+   122  -1164  -4065  -6584  -5948     91  -5786  -1218   1402  -2444   2621  -1124  -5432  -2479  -5166  -1481  -1695   -958  -1473   1902  -1706   237
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -16 -11935  -6518   -894  -1115  -4099    -87      *      * 
+   123  -2305  -1026   -250   1818  -1931   -350  -1048  -1146    955  -2230  -4495   -539  -2348   1727    128    -14   1303  -1815  -5589  -1839   238
+     -   -150   -488    231     44   -377    399    104   -628    211   -465   -722    274    392     44     97    361    116   -371   -296   -245 
+     -  -4276  -5154   -120  -1801   -488  -4205    -80      *      * 
+   124  -1089   2492  -1903  -1368  -1763    406  -1271   1577  -1221  -1620   -903  -1441    772   1418  -1543   1348  -1103  -1154  -2111  -1677   247
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -817  -8273  -1220   -894  -1115   -130  -3541      *      * 
+   125   -469  -5432   1487    211  -5754     13   -335  -1504   1050  -5449  -1284   2065   -429    433  -1939    429   -557   -724  -5616  -1599   248
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11947 -12989   -894  -1115  -2823   -220      *      * 
+   126   -923   1880  -2592  -2611  -1124   -913  -4507   1923  -1615   -533   -376  -2247   -223  -1132    -12   -180   1161   1303   -504   -704   249
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11962 -13004   -894  -1115  -3892   -101      *      * 
+   127   -679   -913   -135   1487  -1006   -913   -298  -1175   1104  -2153  -1381   -912  -2144    -99   1492     73    599   -112  -5627   -778   250
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -14 -11962  -6687   -894  -1115  -3892   -101      *      * 
+   128   -357   -984  -2189    -85  -1156  -1229    304    286  -1191  -5193    190    359   2887  -3251  -1406   -125  -1449    848  -5459  -1781   251
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -13 -11948  -6889   -894  -1115  -2798   -224      *      * 
+   129  -2547  -4081  -6601  -5964   2591  -5802   -261   1243  -2629   2248  -1131  -5448  -1306  -5182  -5359  -2704  -2340   -121  -4539  -1298   252
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -39 -11952  -5227   -894  -1115  -3976    -95      *      * 
+   130   -131   -877   1617   1209  -1914   1022   -344  -1687    866  -1227  -4488   -920  -2071    -60   -826    273   -516   -830  -5582  -1596   253
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -85 -11913  -4132   -894  -1115  -3234   -162      *      * 
+   131  -1778  -5317    539    154    176  -2549   -800   -670     89   -606  -1169    186   2316    -19   -542   -294   -310    142  -5505    282   254
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -208 -11841  -2901   -894  -1115  -4629    -60      *      * 
+   132   -421    428   -213  -1244  -1847  -2479    972  -2151   -124   -430   -959    795   -606  -2978  -1830   1287   1468  -2075   -171   2123   255
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -33 -11634  -5484   -894  -1115  -2427   -297      *      * 
+   133   -677  -5193   -544    805   -924    248    547  -1499   1098   -331    358    562    363   1152     81    127  -2065  -1591  -5376   -131   256
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -315 -11695  -2352   -894  -1115  -5156    -41      *      * 
+   134   1045   -337    417    914   -704    -59  -3061   -811    679  -2654  -3988    831  -1002   -348   -322    805    -13  -1300  -5082  -1080   257
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -130 -11381  -3544   -894  -1115  -5800    -26      *      * 
+   135   -348  -4777    867   1371  -1480    432  -2942  -1781    563  -1735   -714   1278    547  -1038  -1359    367   -280   -530    173  -4280   258
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -321 -11252  -2329   -894  -1115  -2996   -193      *      * 
+   136     85   1390    823     59  -4949    115    -43   -879    892   -949   -430    573    660    483  -1334     25    425  -1713  -4813   -807   259
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -121 -11088  -3640   -894  -1115  -6147    -21      *      * 
+   137  -1602  -4454  -1182    318  -4745   -395    660   -266   -303   1190    423   -794   -513     95   -342  -2951  -1348   -914  -4656   2854   260
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -409 -10968  -2021   -894  -1115  -6252    -19      *      * 
+   138   -448    344   -174   -197   -823  -3753   1091    199    622  -1075  -2980  -2452   1095   -409   -878     28  -1012    938  -4118   2136   261
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -110 -10560  -3781   -894  -1115  -6515    -16      *      * 
+   139  -1175  -4093   -804   -761  -4415     48  -2247  -4165   3241  -4108  -3183  -2221  -3682   -234   -618   -352    819  -3716  -4274  -3592   262
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -36 -10451  -5379   -894  -1115  -6567    -15      *      * 
+   140  -1125    601  -4970  -1370  -2621  -1468   1144   1370  -3981   2143    253   -726    -17   -470  -3847  -1156  -2750    -73    921  -2773   263
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10417 -11459   -894  -1115  -6583    -15      *      * 
+   141   1146  -3848      4  -1967  -4090     60  -2258   -218   -530  -3830  -2959  -2262  -3681   -148    637   -361   -129   2387  -4081  -3451   264
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -80 -10417  -4226   -894  -1115  -6583    -15      *      * 
+   142   -340  -2574  -5090  -4454   -258   -408    216    208  -4050   -477  -1777  -3940  -4345  -3673  -3851  -3379   1600   2720  -3032    722   265
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10338 -11380   -894  -1115  -6616    -15      *      * 
+   143  -3292  -3604  -3763   -193   3647  -4456   1707  -3227  -3292  -3442  -2801    329    106  -3117  -3593  -1073  -3235   -955  -3197   1978   266
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -44 -10338  -5108   -894  -1115  -6616    -15      *      * 
+   144   -375  -2545  -4971  -4341   -349  -1211  -3113    731  -1086  -1195  -1748  -3865  -4296  -3592    -18  -1094   -845   3118  -3002  -2658   267
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10296 -11338   -894  -1115  -6633    -15      *      * 
+   145   -986  -2583  -5030  -4407  -2556  -4251  -3170  -2090  -4017    -94    479  -3908   3666  -3652  -3839   -360   -759   -569  -3059     38   268
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10296 -11338   -894  -1115  -6633    -15      *      * 
+   146    512    561  -2361   1959  -4099   -332   1123  -1071    195  -1484    332  -2114   -853   -221   -645   -257    819    225  -4036  -3382   269
+     -   -149   -504    239     51   -377    400    107   -627    206   -471   -715    281    391     44     94    360    117   -374   -299   -254 
+     -  -5460    -74  -5189     -6  -7974  -6633    -15      *      * 
+   147    198    504    131     76  -4176  -1069   3563  -3918  -1649  -3879    175  -2044  -3496   1429   -592   -288   -577  -1143  -4059   1944   271
+     -   -142   -504    230     49   -376    394    101   -627    208   -463   -725    276    391     44     91    359    117   -364   -287   -249 
+     -  -5421    -35 -11299     -6  -7974  -6648    -14      *      * 
+   148    248  -3895   2202   2342   -475  -1150  -2056   -942  -1636  -3910  -2984   -427   -810     15   -550   -886   -736  -3516  -4078  -3396   273
+     -   -142   -504    233     51   -385    398    101   -627    209   -471   -725    271    396     44    101    357    121   -371   -299   -254 
+     -  -5421    -35 -11299     -6  -7974  -6648    -14      *      * 
+   149   -269  -2518   -820  -1140   -182  -4223  -3092   -580  -3937   1069  -1721  -3845  -4273  -3574  -3763  -1224   -753   2947  -2978  -2634   275
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10257 -11299   -894  -1115  -6648    -14      *      * 
+   150    811  -3719  -2374  -1824   -450  -1241  -2117  -3663    952    461  -2828   -377  -3540    512   2601   -933   -579   -989  -3949  -3316   276
+     -   -147   -504    239     49   -385    395    101   -627    215   -469   -725    275    389     53     98    359    115   -371   -299   -254 
+     -  -5421    -35 -11299     -6  -7974  -6648    -14      *      * 
+   151   2787  -2620  -4232    423  -2591  -1277  -2913   -649   -970    -21   1332  -3461  -4146  -3135  -3437   -977  -2581    -47  -3062  -2696   278
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -42 -10257  -5150   -894  -1115  -6648    -14      *      * 
+   152  -2636  -2524  -1008  -4001  -2485  -1104  -2993   1540   -948   2344   2452  -3659   -718  -3368  -3603   -971  -2577  -1941  -2977  -2626   279
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   153   1172   1582  -4540  -1068   1685   -415  -2963   -512  -1035     73  -1720    332  -4170  -3314  -3562   1319   -570     65   1059  -2617   280
+     -   -145   -504    239     41   -385    399    101   -627    210   -470   -725    285    393     54     96    357    113   -368   -299   -254 
+     -  -5380    -36 -11258     -6  -7933  -6663    -14      *      * 
+   154   2191  -3245  -2702     11   -552  -3581    342  -2964  -2037    290    247   -416  -3665    -55   -499    275    142    411  -3576  -3057   282
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   155  -1003    736  -2367  -1816  -3907   3098  -2100  -3599   -422  -1391    197   -422   -607    -90   -506   -946  -2360  -3246  -3905  -3281   283
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   156   2819    679  -4072    -97  -2583  -1276    373   -552  -3240   -365  -1803  -3351   -854  -3015   -648  -3062   -759    101  -3046  -2675   284
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   157   -148    882  -3629  -3058  -2773   2997   1307   -696  -2870   -459  -1964   -533  -3987  -2710   -641  -1095   -681  -2213  -3195  -2796   285
+     -   -145   -504    228     43   -368    396    128   -620    208   -470   -725    276    389     47     99    359    115   -371   -274   -254 
+     -  -5380    -36 -11258     -6  -7933  -6663    -14      *      * 
+   158  -2634  -2473  -4894   -955   -252   1394  -3039   2992  -3878   -429  -1675  -3790  -4223   -353  -3708   -971   -571   -571   1298  -2585   287
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   159  -3625  -4369   -579  -3535  -5691   3282  -4321     30  -4667  -5575  -4855   1419  -4875  -4123  -5177  -1087  -3923   -233  -5976  -5440   288
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   160   -994  -3854   1064   -505   -429    599    373     27   -410  -3869  -2944   2804  -3456  -1563   -373   -921     77  -3474  -4039    646   289
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   161  -2410  -3668    202   -550  -3906   -275  -2088   -940  -1708  -3648    411   -322  -3510    679   -568  -2335   -661  -1114  -3903   3987   290
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   162  -2463    575   1513    126    501   -296  -2278  -2976  -2029  -1342  -2405  -2374  -3662  -1957   -607   2283   -724   -977  -3582   1361   291
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   163   -909   2076   1299    579  -4174  -3363   2704  -3923  -1603  -1644  -2945    841   -777    -61   -542    691     51  -1029  -4040    888   292
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -47 -10216  -5006   -894  -1115  -6663    -14      *      * 
+   164   -835   5013  -3632   -883   -254  -3883   1348  -2550  -2962  -2857  -2168   -487  -4037  -2802  -3208    961  -2613   -803  -3390  -2984   293
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -50 -10171  -4925   -894  -1115  -6679    -14      *      * 
+   165    750    901  -5604  -5273   1215   -868  -4241  -3517  -4930  -3857  -3168  -4347  -4580  -4552  -4772   1887   2712  -3243  -4387    -90   294
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -53 -10123  -4824   -894  -1115  -6695    -14      *      * 
+   166   -917  -2587   -556  -2992   3597  -3804  -2591   -472  -2797  -2453  -1776  -2985  -3870   -286   -577    720   -556  -2022   1164    875   295
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10072 -11114   -894  -1115  -6712    -14      *      * 
+   167    -87  -3730  -2118    725   1017   -190  -1902   -873   -200  -3744    240    470  -3336    687   1434   1257    639  -3349  -3916  -3235   296
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -56 -10072  -4762   -894  -1115  -6712    -14      *      * 
+   168   -143  -3426  -2229   -451  -3637  -3275   1950     47   -306  -3394    375    546   -671  -1535   -411    858   1318   1404  -3679    -36   297
+     -   -145   -504    233     54   -385    398    102   -630    206   -470   -724    276    394     47    102    357    120   -370   -298   -253 
+     -  -5183    -41 -11061     -7  -7732  -6729    -14      *      * 
+   169  -4269  -5366  -3182   1076  -6168   3311  -3227  -5700   -379  -5431  -4735  -3299  -4862  -2833   -360  -4091    189  -5323  -5369  -5013   299
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10019 -11061   -894  -1115  -6729    -14      *      * 
+   170  -2225   1684   -459    658  -4000    770  -1859    519   -155  -3698  -2775  -1838  -3293    112   -315   -690   2651  -3303  -3871  -3192   300
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -99 -10019  -3935   -894  -1115  -6729    -14      *      * 
+   171  -2703  -3603   -392   -408    696   3241  -2449   -619  -2254  -3564  -2799  -2349  -3784  -2123   -448  -2702   -558  -3141  -3946  -3383   301
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -106  -9922  -3836   -894  -1115  -6757    -13      *      * 
+   172  -2421   1126  -3317  -2788   1762    147  -2711  -2954  -2577  -3211  -2477  -2825  -3799   1470   -178   -686   2997  -2713  -3666  -3230   302
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -6784    -13      *      * 
+   173  -5051  -4563  -6429  -6412   4098  -5976  -2938  -4293  -5991  -1192  -3850  -5041  -5977  -5080  -5553   -874    961  -4326  -2239   1417   303
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -6784    -13      *      * 
+   174  -2397  -2566  -3474  -2851    862  -3713  -2426   -403   2028    590  -1745  -2846    425    157   2319  -2742  -2327   -427  -2963  -2579   304
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -6784    -13      *      * 
+   175     85  -3070  -4392  -3990  -3786    114  -3548  -3321    400   -304  -2953  -3629   3594  -3526  -3647  -2975  -2878   -596  -4160  -3815   305
+     -   -148   -503    229     40   -384    403    102   -630    207   -454   -724    279    397     48     95    356    114   -367   -298   -253 
+     -  -4982    -47 -10860     -8  -7527  -6784    -13      *      * 
+   176    114  -3672  -2821   3132  -4752   1126  -3040  -4470  -2831  -1201  -3709  -2784   -418  -2678  -3295  -2768    407  -3911  -4815  -4242   307
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -6784    -13      *      * 
+   177    948  -6019    777   -289  -6202   3137  -3354  -6138   -563  -5995  -5336    -76  -4530  -3024  -4500  -3739  -4160  -5598  -6191  -5151   308
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -6784    -13      *      * 
+   178   2010  -3468  -1990   -255  -3795   -755  -1767  -3524  -1363  -3511    558     -5  -3182  -1320   -229    579   2263  -3105  -3712  -3052   309
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -6784    -13      *      * 
+   179   -611  -3486   -192  -1382   -282  -3045    702  -3523  -1296  -3494  -2582   3129    393    906  -1800    682   -387   -609  -3683  -3013   310
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -181  -9818  -3098   -894  -1115  -6784    -13      *      * 
+   180  -3995  -4635  -3861  -4003  -6304  -4447  -4138  -6292  -3341  -6125  -5449    996   4064  -3869   -135  -4075  -4261  -5510  -5792  -5631   311
+     -   -147   -502    231     43   -377    398    115   -628    208   -466   -722    278    400     43     94    357    115   -371   -296   -251 
+     -   -453  -1896 -10682  -1177   -843  -4742    -55      *      * 
+   181     46  -2133   -625  -3917   3118  -3829  -2697    652  -3533  -1982  -1336  -3446   -277  -3173  -3366  -2911   1291   -268  -2589   2006   319
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -6784    -13      *      * 
+   182  -2563   1054  -4934  -4318  -2376    165  -3079   2918  -3931   -158  -1582  -3818  -4207  -3567  -3745  -3267   -360   1759  -2934    442   320
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -6784    -13      *      * 
+   183  -3254  -4032   -315  -3268  -5578   3510  -3895   -396  -3800  -5425  -4669  -3341  -4509  -3644   -204  -3348   -401  -4570  -5684  -5191   321
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -6784    -13      *      * 
+   184   1392  -3569  -1917   1689  -3896   -645  -1733  -3647    540  -3592  -2667  -1701  -3163   2041  -1822   -599   1545  -3197  -3760  -3077   322
+     -   -150   -503    229     42   -384    398    102   -608    215   -467   -724    272    390     51     95    356    120   -362   -298   -253 
+     -  -4982    -47 -10860     -8  -7527  -6784    -13      *      * 
+   185  -2708  -4153   -139   -145   -224   3097    732  -4161  -2012  -1099  -3281    730  -3651  -1866  -2563   -704  -2670  -3747  -4356  -3644   324
+     -   -148   -503    236     52   -384    395    108   -625    215   -469   -724    274    390     57    100    356    114   -373   -298   -253 
+     -  -4982    -47 -10860     -8  -7527  -6784    -13      *      * 
+   186   -677  -2135   -667  -3848     19   -953  -2678    955  -3478   2208  -1337  -3409  -3866   -170  -3333    610  -2225    521  -2591  -2245   326
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -6784    -13      *      * 
+   187    185  -2770  -2758   3005  -2835  -3475   2124    475  -2166  -1004  -1963  -2430  -3583  -2066  -2517  -2485    422  -2213  -3179  -2724   327
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9818 -10860   -894  -1115  -5783    -26      *      * 
+   188     -1  -3572  -1947    877  -3893   -909    663  -3643   1198  -3588  -2661  -1709  -3167    870   2261    153    796   -662  -3755  -3073   328
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9869 -10911   -894  -1115  -5713    -28      *      * 
+   189    484  -2435  -4228   1329  -2439   -919  -2892  -1851  -3503   -917  -1672  -3458  -4050  -3209  -3478  -3047  -2465   3013  -2938    357   329
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9922 -10964   -894  -1115  -5134    -42      *      * 
+   190    319  -3757   1718   2207  -4076   -947    649  -3828  -1497  -3772  -2848    517   1195  -1449    371  -2157  -2221   -780  -3940  -3254   330
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10019 -11061   -894  -1115  -6729    -14      *      * 
+   191  -3298  -4845   -157   3450  -5107    -82  -2805   -843  -2640  -4844  -4005  -2429   -537   -145  -3244  -3106  -3283   -793  -5047  -4274   331
+     -   -151   -504    229     46   -376    395    102   -623    206   -466   -724    274    390     48     97    358    120   -350   -298   -249 
+     -  -5183    -41 -11061     -7  -7732  -6729    -14      *      * 
+   192  -3521  -3782  -4573  -3605   -312  -4589  -2894   -501   1702  -1250  -2915  -3531  -4584    742   3390  -3739  -3372   -652  -3985  -3690   333
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10019 -11061   -894  -1115  -5584    -30      *      * 
+   193  -3146  -2911  -5457   -845  -2943  -4821  -3762   2744   -726   1812  -2070  -4437   -651  -4171  -4332  -3935  -3094   1058  -3613  -3269   334
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10072 -11114   -894  -1115  -6712    -14      *      * 
+   194    -94  -4388  -2202   3313  -4745  -3659  -2506  -4504   -484  -1334  -3566   -243  -3878  -2076  -2684    733  -2889  -4050  -4624  -3917   335
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10072 -11114   -894  -1115  -4964    -47      *      * 
+   195   -945  -2439  -4845    -21  -2395  -4135  -3002   1100  -3833   1142    476  -3749   -783  -3475  -3668   -247   2539    132  -2896  -2552   336
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10171 -11213   -894  -1115  -5589    -30      *      * 
+   196  -2637  -2477  -4891  -1064    670  -4175  -3042   2445  -3876   -465  -1679   -721  -4225  -3517   -823   -243    642   2048  -2934  -2590   337
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   197   -875   2654   -838  -4341    524  -4183  -3054    646  -3937    607    641   -673   -633  -3560  -3738  -1054   -683   2255  -2921    -78   338
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   198   -934    782   -635  -2741  -2874  -1165    397   -541  -2584  -1266  -2037  -2842   3160  -2456    695   -333    102     13  -3257  -2832   339
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   199   1044    627  -2244   1164  -4187  -3369  -2026  -3937    992  -3881  -2955    437  -3462   2346   1635   -857  -2334   -956  -4048  -3367   340
+     -   -147   -504    238     43   -385    395    123   -631    211   -470   -725    278    389     44     98    362    115   -374   -285   -239 
+     -  -5380    -36 -11258     -6  -7933  -6663    -14      *      * 
+   200    179    775  -2272    115  -4084  -1113  -2042   -891    607   1097  -2890   1587  -3473    689   1579  -2289   -732  -3399  -3995   -289   342
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   201    235  -3577    755    568  -3782  -3449  -2123    827   -531   1982  -2698  -2144  -3538    544   -580  -2369   -664   -925  -3834  -3230   343
+     -   -142   -504    233     45   -385    399    101   -631    213   -466   -716    271    389     41     98    361    119   -371   -285   -248 
+     -  -5380    -36 -11258     -6  -7933  -6663    -14      *      * 
+   202    831  -3855  -2238    627  -4173   -321  -2022    -41   1195  -1571  -2944   -312  -3456   1407    690    679    521   -951  -4040  -3358   345
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   203    846  -2538   -772  -4151  -2508  -4196  -3065    731  -3805   -985  -1745  -3760  -4250   -378  -3697  -1100    589   2914  -3011  -2662   346
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   204   -221  -2771  -5354  -4740  -2771  -4598  -3508   2383  -4355   1256   1304  -4245  -4627  -3988   -662  -3697    156   1758  -3353  -3009   347
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   205   1089  -3864   -528    111  -4185  -3364  -2023  -3936   2279  -3880  -2953    461  -3457   1709    694   -236  -2330   -151  -4047  -3364   348
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   206   2587  -2547   -801  -1088   -383  -4086  -2923    658  -3485   -300    489  -3526  -4142  -3213    755  -1160     40   -573  -2994  -2635   349
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -6663    -14      *      * 
+   207    651  -2483  -4954  -4320  -2432  -4194    454    719   -844   1769   3405  -3826  -4243   -442  -3736  -3278  -2591    156  -2939  -2597   350
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10216 -11258   -894  -1115  -5628    -29      *      * 
+   208  -2593  -3147  -3047   -866  -3209  -3770   2151   1464   1214   1687  -2313  -2660  -3847   1447  -2635   -336  -2529   -973  -3506  -3041   351
+     -   -138   -504    233     49   -385    395    101   -624    219   -466   -725    273    391     44     97    358    115   -374   -299   -254 
+     -  -5421    -35 -11299     -6  -7974  -6648    -14      *      * 
+   209   2461  -3194    136   -814   -348  -3662   1845  -2878  -2170  -3103    451  -2500   -826    598  -2580  -2613  -2455   1195  -3541   -200   353
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10257 -11299   -894  -1115  -6648    -14      *      * 
+   210   -887  -3727  -2420   -627  -3968  -3492   4655  -3659  -1783  -1507  -2848   -265    681  -1744   -620   -134  -2429   -984  -3969  -3347   354
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10257 -11299   -894  -1115  -6648    -14      *      * 
+   211  -2500  -3898  -2316    132  -4186  -3464   1355  -3916  -1739  -1516  -2998   -250   3459    530  -2240   -953   -735  -3503  -4099    785   355
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10257 -11299   -894  -1115  -6648    -14      *      * 
+   212   -205  -3376   -630    146  -3501  -3596  -2296  -3127  -2021  -1528  -2523  -2368    736  -1953   -627  -2539   -702  -1039  -3692   4082   356
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10257 -11299   -894  -1115  -6648    -14      *      * 
+   213   -244  -2963  -3287   3138  -3006  -1139  -2616    137  -2599  -1195  -2160  -2855  -3924  -2476  -2920   -275   -599  -2433  -3376   1305   357
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10257 -11299   -894  -1115  -6648    -14      *      * 
+   214  -2426  -3863   -544   3070   -657  -1069  -2065  -3909    250  -1671    362   -431  -3498    646  -2156  -2313   -720  -1161  -4055   -217   358
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10257 -11299   -894  -1115  -6648    -14      *      * 
+   215   -881  -3348   -720  -2114  -3470  -3586  -2281     22   -657  -3276  -2494   -311   1963  -1940   -549   -265    175   2456  -3664   -171   359
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10257 -11299   -894  -1115  -5613    -30      *      * 
+   216   2807  -2535  -5044  -4408   -224  -4254    254   -590  -4005    -43  -1738  -3897    194  -3630  -3808  -1096   -835    -19   1234     38   360
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10296 -11338   -894  -1115  -6633    -15      *      * 
+   217  -2654  -2723    143   -237    356  -4050    349   -648  -3158   -518    441    230   -878   -522  -3308  -3078  -2595    839  -3155   3639   361
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10296 -11338   -894  -1115  -6633    -15      *      * 
+   218  -2866  -2766   3236   -284   -251  -4360  -3230   1009  -3843    -19  -1954  -3820  -4418  -3545  -3821    128  -2810    149  -3261  -2903   362
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10296 -11338   -894  -1115  -6633    -15      *      * 
+   219  -2708    629   -846  -4412   -220  -4255  -3125   1676   -970   1797    399  -3899     95  -3632  -3810  -1054   -758   1262  -2992    -93   363
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10296 -11338   -894  -1115  -5533    -32      *      * 
+   220   -313  -2920  -3513  -2945    412  -1204    241   1107    -24  -1364    369   -485   -731    430  -3058  -1197   -860  -2366  -3328   3514   364
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10338 -11380   -894  -1115  -6616    -15      *      * 
+   221   -334  -3932    149   -556  -4238  -1152  -2135   -945   -585     76  -3025  -2116   3016    -59    118   -992    -36  -1180  -4125  -3451   365
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10338 -11380   -894  -1115  -4920    -48      *      * 
+   222    110  -3184  -3198    353  -3232  -3887  -2617   -928   -728   2226  -2354   -574   -879    346  -2871  -2854     11    900  -3559  -3099   366
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10417 -11459   -894  -1115  -6583    -15      *      * 
+   223    -13  -4032    879   2200  -4353   -352  -2193  -1033   1113   -982    228   -470    -65    923   -585  -2440  -2499  -3654  -4216   -397   367
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10417 -11459   -894  -1115  -4150    -84      *      * 
+   224    300  -4147   -876   -851  -4464   -533  -2321  -1420   -712  -4161    -50   3066    728    869  -2409     10  -2625  -1242  -4334    597   368
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -10560 -11602   -894  -1115  -2864   -213      *      * 
+   225   -402  -4440    483    290  -4761   -321    667  -1437   1100    -52  -3530  -2579    781    563   1038   -286     14   -580  -4624    288   369
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -10880 -11922   -894  -1115  -3343   -150      *      * 
+   226    -73  -4526    -78    952   -399   1474   -358   -805  -1222    250  -3623    837    -74  -2318   -464   -225   -133  -1571    230   -607   370
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11041 -12083   -894  -1115  -2700   -241      *      * 
+   227    -27   -440  -1489   1746   -428  -1272   -537  -4848   -776   -100  -3868  -1273   1279    849    586    291   -827  -1061  -4963    399   371
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -179 -11252  -3102   -894  -1115   -267  -2564      *      * 
+   228   -412   -736    706   1472  -2130   1457   -293  -1123   -182  -1271  -4470    135   -894    249  -1276   -261   -589    -63  -5565    -70   372
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11896 -12938   -894  -1115  -4349    -73      *      * 
+   229    492   1349    381    993   -604  -2740   -118   -127   -537     78  -4426  -1057  -2229    302   -474   -861    926   -507   -419   1350   373
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11896 -12938   -894  -1115  -4349    -73      *      * 
+   230  -1746   -889   -745   -715  -5704   3127  -1002  -2362      1  -5399   -358    112   -147   -670  -3631   -309  -2232  -5005  -5567  -4884   374
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11896 -12938   -894  -1115  -4349    -73      *      * 
+   231  -1643    191  -1625  -2723    257  -2838  -1313   1749  -2335   1771   2596  -5382  -5795  -2012  -5295   -386  -1480   -893  -4488   1165   375
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11896 -12938   -894  -1115  -4349    -73      *      * 
+   232   -703   -839  -2414  -2690  -4078   3498  -4493  -3621  -5063  -1215  -1092  -5099  -1965  -4788  -2163  -2659  -4118   -958  -4559  -1198   376
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11896 -12938   -894  -1115  -4349    -73      *      * 
+   233  -1661    895  -2101  -5862    966  -2400  -1268   -146   -728  -1069    244  -1388  -5792  -5101   3228  -4824  -1934    552   1446   -758   377
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11896 -12938   -894  -1115  -4349    -73      *      * 
+   234  -2506  -4031  -2101  -5880  -3985  -5744  -4614   2761   -645    940    239  -5380  -5794   -561  -2315   -942  -2287   1411   -441    964   378
+     -   -147   -500    233     43   -381    398    105   -627    210   -466   -721    275    393     45     96    359    117   -366   -295   -250 
+     -    -34  -5420 -12938    -72  -4361    -45  -5026      *      * 
+   235    307   2285  -6733  -6098    419   3046  -4823  -2151  -1710  -4085  -1322  -2251  -6002  -5324  -5504  -1141  -2293    397  -4694  -1395   380
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -11 -12109  -7088   -894  -1115   -701  -1378      *      * 
+   236   -962  -5574    -97   1759  -1302  -1286    507  -2567    825  -1860   -533   -333  -5171    534    665  -1808   1323   -230  -5758   1048   381
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -12 -12099  -6941   -894  -1115   -395  -2063      *      * 
+   237  -2710   -137  -6741  -6105   1258  -5943  -4814   1293  -2559   2597  -3425  -1325  -1536  -1931  -5500  -2730  -2329   -246   -631   -534   382
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -12 -12098  -6988   -894  -1115  -1440   -663      *      * 
+   238    204   -910   1717   1354  -2135  -1889  -1190  -5637    653  -5581  -1541    468   1949   -599  -1388    169   -444  -5187  -5748  -5065   383
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -40 -12087  -5214   -894  -1115   -262  -2589      *      * 
+   239   -797    105   -213   1706  -1230   -686    183  -1849   1050  -1140  -1526    218   -122   1487     72   -720     58   -651  -5732  -5050   384
+     -   -150   -501    234     42   -382    397    104   -623    209   -467   -722    274    395     44     95    361    119   -364   -296   -251 
+     -   -477  -3742  -2273    -21  -6110  -2386   -306      *      * 
+   240    276   -565  -1171    230  -5558   -972  -3396  -5309    530  -5253  -4326    -18   3142  -2936   -995    647   -420  -4859  -5420  -4737   386
+     -   -148   -501    234     46   -378    397    104   -624    209   -467   -722    274    392     44     97    359    118   -371   -296   -245 
+     -    -47  -4965 -12779  -1732   -517   -323  -2319      *      * 
+   241  -1000    791  -2180   -106   -555  -2818  -4693   1371    -50    789   2704  -5373  -5893    673  -5312  -1360    177   1109  -4664  -4313   391
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12045 -13087   -894  -1115   -125  -3594      *      * 
+   242  -1461  -5587   -282   -130  -5908  -1976  -1154  -5658   -161  -2236  -4676   -140    552  -3286  -1503   2279   2200  -2881  -5770  -1939   392
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   243    527  -4242  -6676  -1015   1572  -2079  -4811     38  -1843   2145   -397  -5565   -724  -2174  -1585  -2058  -1006    375    976  -4354   393
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   244    706  -5586   1263   1590  -2333    561    148  -1611    183  -2507  -4676  -1189  -1034    555    436    376  -2085  -1940   -723   -950   394
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   245    309  -5586   2192   2201  -2396  -1957  -1360  -1848   -749  -5602  -1509    296  -5181    831  -2177   -584   -731   -557  -5770  -1668   395
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -260 -12109  -2602   -894  -1115   -701  -1378      *      * 
+   246   -862   -712  -6541  -5905   3014  -5744  -4615   1180  -5500   1914    787  -5390  -2138  -5120  -5299  -4829  -4135   -946   -457   -219   396
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -16 -11850  -6527   -894  -1115  -3504   -133      *      * 
+   247   1882   1173  -6501  -2493  -3942  -2666  -4580   1898  -5462    646  -3191  -5352  -5757  -5086  -2376  -1161   -657   1681  -4447  -4105   397
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11849 -12891   -894  -1115  -4596    -61      *      * 
+   248    587   -928    842    745  -2023   -724    352  -1707   1643   -538  -1031    576  -4933   1126    414   -155  -1943  -2616  -5521  -4839   398
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -15 -11849  -6657   -894  -1115  -4596    -61      *      * 
+   249   -233  -5312    652   -526    145  -2447   1575   -443   1336   -939  -1192   -539  -4923    695   1805  -1160  -3793   -738  -5499   1294   399
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11834 -12877   -894  -1115    -36  -5338      *      * 
+   250   -117   -146  -6753  -6117    501  -5955  -4826   1867  -5712   1421   -450  -5601  -6005  -2059  -2515  -5039  -2348   2280   -647   -864   400
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   251   1149  -1119  -2236   -598  -5901  -2789  -1122  -1811   3032  -1809   -567  -1930  -5182   -552   -311    148  -1170  -2866  -5767  -1856   401
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   252    532  -1150    588   1966  -5908  -2018  -1254  -2640   1395  -2387  -4676    425  -2413   1173   -970    263    252  -5209  -5770  -5087   402
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   253    442  -5440  -2173  -3499   -370  -1095   1022    265   1455   -354  -4547    458  -5224     52   1547    637   -796   -272   -591  -5022   403
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -15 -12109  -6628   -894  -1115   -701  -1378      *      * 
+   254  -4408  -1001  -6754  -6118   1947  -5956  -4828    410  -5713   2604    602  -5603  -1307  -5335  -5513  -1858  -1121   -155  -4691   -831   404
+     -   -148   -488    231     44   -377    403    104   -628    214   -468   -722    279    392     43     94    357    116   -371   -296   -251 
+     -   -564  -3252  -2195    -15  -6613  -1580   -587      *      * 
+   255     57   -895    186    -20  -5557   1618   -147  -5308    552  -2729  -4325   1856    490   -221    275    248  -1942  -2352  -5419  -1599   406
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11739 -12782   -894  -1115  -2742   -234      *      * 
+   256    364    720   -620  -1419  -1588  -2610   -982   1653  -2470   1540  -1043  -5210     25  -4930  -1872  -1079   -862   1182  -4402   -336   407
+     -   -135   -504    229     45   -385    400    102   -630    209   -466   -724    271    396     41     92    357    125   -367   -298   -253 
+     -   -231  -3842  -3677  -2051   -398   -412  -2011      *      * 
+   257   -642  -5427    299   1811  -2096    178   -162  -5499    562  -1742  -4516     32   1695    849  -1317   -216    214  -5049   -573  -4927   417
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11941 -12983   -894  -1115  -2166   -364      *      * 
+   258   -129    -80   -572   -594   -223    772   2155  -1085    805  -5471  -1310    544  -1406   -347    307    331    517  -1890  -5639   1173   418
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -  -2005 -11973   -414   -894  -1115  -1547   -605      *      * 
+   259   -948  -2834  -3138   -686  -2860   1137  -2455   1494    645     22  -2011   -386  -3782   -157  -2752  -2689    756    827  -3227   1500   419
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -95 -10136  -3996   -894  -1115  -6691    -14      *      * 
+   260  -2471  -2355   -445  -3861    646    870  -2831    -73   -656   1715    896  -3508   -658  -3214  -3448   -952    251  -1772  -2807   2066   420
+     -   -150   -503    234     46   -380    406    107   -630    207   -470   -724    280    390     59     95    356    116   -370   -298   -253 
+     -  -5208   -170  -3575     -7  -7629  -6721    -14      *      * 
+   261   -630  -3568   -331   -229   -412   -883   2097   -770   1368   -931  -2662  -1766  -3216    212   2244  -2032   -378    184  -3763  -3092   422
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2  -9918 -10960   -894  -1115  -4503    -65      *      * 
+   262   -892    820   -499    204  -4067  -3256   1463      8   -324  -3764  -2838   -276   2271    903   -206    874  -2220   -828  -3933    776   423
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10089 -11131   -894  -1115  -5628    -29      *      * 
+   263    785    902  -4799   -995    127    483    656    785  -3789  -2254  -1607  -3708   1696  -3432   -627  -3177  -2502   1667   1387    330   424
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -2 -10136 -11178   -894  -1115     -9  -7368      *      * 
+   264   -893  -4235  -2719  -6107   -544  -2056  -4824   1929  -5704   1625   -372  -1433   -912  -1317  -1706  -5037  -1087   2061  -4692  -4350   425
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   265   -540  -1055  -2309  -2183   -344  -2719    434  -1114    353  -1539   -536  -1852   -911   1067   3011   -728  -1025    133   -584  -5033   426
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   266   -425   -122  -6746  -2036    534  -5953    813   1050  -2719    518  -1292  -2239  -6003  -5330  -2498   -916   -105   2272  -4692   1829   427
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   267   1494    564  -2592  -1873  -4348    447  -4600    487  -2507  -1630  -3568    774   -324  -4772  -5095   -326      2   1742   1144    168   428
+     -   -151   -504    224     28   -384    452     95   -632    204   -466   -749    275    405     43     85    362    100   -380   -308   -257 
+     -  -1959   -429 -13151  -1122   -888   -701  -1378      *      * 
+   268   -138  -5586   2357    130   -381    373   -460  -2594    562  -1969  -4675    952  -1017   -981   -878    449   -782  -1462   -772  -1933   438
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   269   -397  -5559  -1460   -256    -10    683   -153  -1707    448   1273     22   -701    908   -299   -579   -788    164   -698  -5750   -910   439
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   270   -984  -5587   1954    805  -2267   -832     45  -2414    745  -3331  -4676   1543   1134    389   -880     65  -1157  -2007    315  -5087   440
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   271   -391   -955   -320    776  -1253  -2890    163  -1303   1848  -5603  -1333   -301  -1005   1341   1757     44    246  -5209  -5770  -5087   441
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   272  -2000  -5583   -703    700  -1330  -1905   -495   -401   1151  -1019    658    285   1387    661    200     33    500   -655  -5767     35   442
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   273  -1749    262  -6772  -6137  -1117  -5976  -4849   2805  -5733   -267  -1088  -2138   -979  -2090  -5533  -5061  -2404   2556  -4714  -4371   443
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   274  -1963    478  -2244   -286  -5908   -933   1305  -5659   2388  -3184  -4676    208  -5180    968   1477    892     11  -5209  -5770  -1856   444
+     -   -150   -501    231     42   -382    397    111   -623    218   -468   -722    274    395     44     94    358    121   -371   -280   -251 
+     -    -28  -5720 -13151  -2264   -337   -701  -1378      *      * 
+   275  -4118  -1071  -1047  -2241  -5907  -5092  -3750  -2798   2506  -5602  -1572  -1190  -5185  -1804   2347     59   1857  -2896  -5770  -5089   450
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   276  -1186  -4708  -7339  -6742   -611  -1936  -5556   2172  -6373  -1389  -1424  -6258  -2611  -6022  -6202  -5719  -2322   3183  -5397  -5043   451
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   277   3208    555  -6753  -6117   -943    857  -4827  -2157  -5712  -1551  -1160  -5601  -2343  -5335  -5512  -1990  -4348  -2265  -4692   -306   452
+     -   -150   -501    235     45   -376    398    105   -627    209   -467   -721    274    393     44     95    358    119   -363   -295   -250 
+     -    -43  -5105 -13151   -996  -1004   -701  -1378      *      * 
+   278  -1467  -4369  -6904  -6271   -317  -6116  -4992   2264  -5871    883    349  -5762  -6155  -5488  -5671  -5204  -2393   2483   2231   -858   455
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   279   -998   4484  -6753  -6117     34  -1026  -1204    909  -5712    383  -3437  -2331  -6005  -5335  -5512  -1448  -1062   1580  -4692  -4350   456
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   280   1311   1656  -7285  -6996  -7037   1861  -6571  -6687  -6785  -3130  -6178   -231    300  -2206  -6866   1605   1462  -2687  -7360  -7064   457
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   281 -10421  -8931  -9885 -10273 -10452   3868  -9526 -11566 -10466 -10858 -10853 -10282  -9334 -10356  -9878 -10965 -10599 -11224  -9101 -10471   458
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -16 -12109  -6498   -894  -1115   -701  -1378      *      * 
+   282   1337   -684     24  -4759   -226    576  -4424  -4048  -2571  -2655  -3679  -4783  -5710  -4415  -2456   2804  -1378  -2297  -4910   -662   459
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12093 -13136   -894  -1115  -1642   -557      *      * 
+   283   1033  -1081  -8491  -8809  -1491   3486  -7717  -8101  -8391  -3235  -7424  -6823  -6797  -7838  -2250  -1206  -5563  -6858  -8532  -8477   460
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12093 -13136   -894  -1115  -1642   -557      *      * 
+   284   1379   -139    447  -3545   -614   1709  -1244  -2503  -1504  -1099   -578   -344   -996   1296  -3938    922  -1400  -4900  -5580    186   461
+     -   -151   -502    233     41   -378    398    111   -629    215   -468   -723    276    391     43     96    365    117   -372   -297   -252 
+     -  -2382  -2834   -582    -11  -7022  -1642   -557      *      * 
+   285  -2636  -4108   1757    449     73    797  -2268  -1162    113  -4124  -3197   1110   -951   -211   -700   1018     84   -205  -4291  -3609   463
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -  -1094 -10503   -913   -894  -1115   -151  -3332      *      * 
+   286  -2213   -279   1976    416   -104   -109  -3384  -5298    187  -5242  -4316   -211  -2058  -2925  -1180   2516  -3692  -4848  -5409  -4726   464
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11718 -12760   -894  -1115   -461  -1871      *      * 
+   287   -110  -4145  -1800   -206   2382  -2842  -4728  -1427  -5597   1539    520  -5494  -5909  -1822  -2327  -1358  -4255    688   1112   1923   465
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12015 -13057   -894  -1115  -1581   -587      *      * 
+   288   -261   -497  -6688  -2668   1394  -1883  -4760   2497  -5646   1344   -237  -5535  -2366  -5269  -5446  -4974  -2075    277   2318    166   466
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -180 -12042  -3095   -894  -1115  -2975   -196      *      * 
+   289   -279   -720   1062   1229  -2120   -330   1446   -828    673  -2213    644    326    476   -893    561    310  -2121  -1537  -5534  -1528   467
+     -   -151   -489    233     43   -383    396    103   -624    210   -462   -713    273    397     50     96    358    117   -372   -297   -252 
+     -   -220  -2919  -6756   -427  -1965  -1264   -777      *      * 
+   290    144  -5439    857   1625  -5760  -2779  -1195   -616    761    302  -4528  -1941  -1473   1627    146   -420    -22  -1242  -5622  -4939   470
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11954 -12996   -894  -1115  -3957    -96      *      * 
+   291   3091   -686  -6603  -5967    411  -5805  -4677    718  -2420  -1107  -3287  -5451  -2259  -5185  -5362  -2665  -2250     15  -4542     62   471
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -28 -11954  -5743   -894  -1115    -59  -4634      *      * 
+   292   1027  -4748  -4719   -999     78  -2841  -1342   1039   1554      6   1101   -697  -5502    454    937   -694  -4166   -606   -588     -5   472
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12085 -13127   -894  -1115   -926  -1078      *      * 
+   293    993  -5574   -271    345   -461    289   -378  -1735   1047  -3347  -1389    986  -2470   1182   1015    158   -375  -2021  -5758  -5075   473
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -56 -12096  -4711   -894  -1115   -358  -2186      *      * 
+   294   1182    529   -221    352   -636  -2752  -3752   -758    956    287    563    -48  -5176    709   -244  -1000  -1043    182  -5600    621   474
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -16 -12054  -6573   -894  -1115  -2760   -230      *      * 
+   295  -1826  -5520    570  -1549  -2107   2903  -3679  -5592   1408  -3053  -4609     16   -990     63   -227  -2570  -2317  -5142  -5703  -5021   475
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12039 -13081   -894  -1115  -3024   -189      *      * 
+   296   2827   1985  -2450  -1877  -1784  -5886  -1356   -222  -5638   -133  -1134  -5529  -5936   -595  -5441  -4970  -4280   1337  -4625  -4282   476
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -  -3344 -12039   -150   -894  -1115  -3024   -189      *      * 
+   297  -1372  -1786  -1996  -1429  -1823  -2598   1693   1322    690    886   -961   1763  -2672  -1148  -1513  -1583   1367  -1246  -2167  -1728   477
+     -   -150   -501    231     42   -382    397    104   -623    211   -467   -722    277    399     47     94    358    116   -368   -296   -239 
+     -  -3865   -104  -9742    -18  -6371    -20  -6213      *      * 
+   298  -6624  -8747   4035   -538  -8850  -1294  -5791  -2852  -6274  -8688  -8166  -4891  -6918   -561  -7351  -1974  -6738  -8291  -8897  -7712   479
+     -   -150   -461    237     42   -377    397    104   -628    209   -467   -722    274    392     44     95    358    116   -371   -296   -236 
+     -    -71  -4385 -13140   -725  -1341   -382  -2104      *      * 
+   299   1401   2155  -7445  -6848  -1090  -6725  -5667    318  -6483   1605   -355  -6372  -6729  -6117  -6307  -5836    -68   2047  -5482  -5143   482
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   300  -7202  -6661  -9453  -8994   2861  -9128  -7195    -93  -8744   1582  -4071  -8621  -8525  -7737  -8328  -8403  -2351   -285  -6218   3238   483
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   301  -6775  -6220  -9410  -9033   -394  -9300  -8885   3120  -8981   1306  -4497  -8973  -8744  -8401  -8895  -8713  -6731   1855  -7642  -7570   484
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   302  -1262  -4975  -7515  -7124  -2051  -6016  -5860  -4991  -6737  -3230  -4676  -1990  -6466  -6327  -6514    882   3750  -2443  -5821  -1520   485
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   303    329  -5763  -2245  -8060  -8470   3496  -7639  -8304  -8296  -8552   -261  -6700  -6821  -7682  -8033    439  -5618  -6974  -8686  -8623   486
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   304  -6643  -8789   3192   2865  -8864  -6322   -175  -8888  -6285  -8702  -8182  -2237  -6930  -5500  -7366  -1858  -6755  -8310  -8912  -7723   487
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   305   -809   -816  -6753  -6117   -254  -1835  -4826   1955  -2398   1388   2021  -5601   -578  -5334  -5511  -5039   -380   1793  -4691  -1817   488
+     -   -153   -489    231     56   -385    396    116   -626    211   -470   -725    274    392     45     95    357    113   -370   -262   -240 
+     -    -63  -4561 -13151  -2530   -274   -701  -1378      *      * 
+   306  -2682  -5587   -666  -1124  -5909   -725  -3747  -5659   2698  -5604  -4677  -1283  -2202  -3287    169   1629    974  -2462  -5771    708   500
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   307  -8472  -7545  -8859   1194  -1040  -3052   3855  -7474  -8737  -2301  -6904  -7514  -2213  -2165  -8222  -8100  -8338  -7595   2888   3530   501
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   308  -1094  -5587    270   -393  -5908  -2804   4676  -2672   -552  -5603  -4676  -1240    -87   -580   -344   -360  -4053  -2417  -5770  -1548   502
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   309   -142  -5504   2077   1195  -1409  -1977   -249  -1790  -3371  -2291  -4603  -1861   -110    972  -3872   -920   1610    554  -5710   -794   503
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   310   2219  -1014  -6751  -6115    788   -556  -4825    427  -2629  -1564   -279  -5600  -2618  -2071   -895  -2896  -1037   1025   2781   1326   504
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   311  -1340  -4639  -2556  -2404    -68  -5541   2887    290  -1439   1390   1600  -2008  -5615   1181    510   -160  -4221     21  -5035   -485   505
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   312    -71  -5530   2350   1566  -1277  -2014   -943   -559  -1410     26   -517  -1125  -2434  -1090  -2178   -353   -184   -949    344    116   506
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   313   3028   -787  -6749  -6114   -672  -1833   -556  -1606  -5709   -742   1358  -2136  -6004  -5332  -2441  -1296  -1094  -1490  -4691   1224   507
+     -   -147   -500    233     43   -381    398    105   -627    210   -466   -721    275    393     45     96    361    119   -370   -295   -250 
+     -    -52  -5902  -5760   -652  -1460   -701  -1378      *      * 
+   314   -840   -916   -924    954  -1292  -1954  -1222    354   1489    384    -63    229  -5169    409   1325  -1726   -725     25  -5710  -1738   510
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12083 -13125   -894  -1115   -798  -1235      *      * 
+   315    899  -5574    687   2560  -1921  -1396    289  -2563  -1217  -3068   -625    428  -5169    -87  -2229    867  -2432  -1711  -5758  -5075   511
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12097 -13139   -894  -1115  -1461   -651      *      * 
+   316     95   1463   -609   -521  -2210  -2039    886   -943    959    981    948    863  -2402    922    410    107  -1666  -2689  -5750  -1850   512
+     -   -146   -500    232     42   -381    402    105   -627    210   -465   -721    275    393     45     95    358    117   -370   -295   -250 
+     -    -93  -6018  -4403  -1529   -614   -372  -2139      *      * 
+   317  -1824  -5533   -289  -1325  -5855   3170    327  -5605   -227  -3134  -4623   1389  -5125  -1577   -774  -1771  -3999  -5156  -5716  -1585   518
+     -   -148   -501    231     42   -382    399    104   -620    211   -465   -722    276    394     47     97    358    118   -371   -296   -251 
+     -    -81  -5304  -5091  -1869   -462   -652  -1459      *      * 
+   318  -2532  -4170  -6683  -6047   -540  -5890  -4761   2445   -755   1652   1043  -5534  -1060  -1069  -1557  -1432   -613   1072  -4628  -4286   525
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -12044 -13086   -894  -1115  -2947   -200      *      * 
+   319   1353   1452  -4569  -4012  -4845  -1711   1504  -1572  -2203   -713  -3942   2036    514  -1963  -1962   1125    739   -930  -5137  -1654   526
+     -   -150   -501    232     42   -381    398    105   -627    212   -467   -709    278    393     44     95    360    116   -366   -295   -250 
+     -    -47  -4962 -13086   -753  -1298   -122  -3625      *      * 
+   320  -2054   -852  -6772  -6137   1060  -3003  -4849    891  -5733   1746   1200  -5622  -6025  -5356  -5533  -5061  -1664   2373  -4713    285   529
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   321   -790  -1100  -7735  -7154    604  -7054  -6024   3140  -6808    589   -513  -6703  -7024  -6431  -6638  -6180  -5266   1569  -5788   -420   530
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   322    557    954   3061    104  -1156  -1917  -4816  -1345  -5676    303   -929  -5578  -5998  -5308  -5493  -1152   -508    -81  -4695   -855   531
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   323   2015   2412  -6754  -6118   -616    -57  -4827   1593  -5713   -157    834  -5602    106  -5336  -5513  -2076  -1178    743  -4692  -4350   532
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   324  -1500  -6174  -1474   -303  -1402   3278  -4305  -6309  -3981  -6251  -5349    201   -184  -3868  -2452   -416   -137  -5841  -6423  -5706   533
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   325 -10320  -8913  -9757 -10035  -9858  -8870   5463 -11349  -9602 -10663 -10609 -10021  -9297  -9868  -2269 -10768 -10436 -11051  -8920  -9653   534
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -22 -12109  -6044   -894  -1115   -701  -1378      *      * 
+   326  -1327  -4596  -2274  -2449   1902  -5537   2630  -4184  -2325  -1230   -177  -2202  -5610  -2101  -4608    977   -622  -2194   2097   3270   535
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -232 -12087  -2751   -894  -1115   -269  -2556      *      * 
+   327   2014   -824  -2132   1302   -354   -562   -235  -5437  -1952  -5383   -882   1896   -871   -257   -258   -277  -3836  -1444   -510   -706   536
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11881 -12923   -894  -1115    -42  -5109      *      * 
+   328  -1765  -4255  -2543  -6046  -4214  -3002  -4824     38  -5661  -1657    164  -5570  -6001  -2024  -5492   2120   3060  -1069  -4716  -4372   537
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   329  -8164  -8910  -1363   3949  -9764  -7579  -7291 -10175  -7833  -9827  -9467  -6545  -8137  -7112  -8597  -7842  -8280  -9664  -9039  -9016   538
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   330  -1129  -1191   -538    378  -2348  -5101    484  -1326    460  -1466   -543    342  -5194    361   2394   -150     18   -355   1568    653   539
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   331  -1052  -1054  -1677  -1331   1811    425     98   1074  -2781    117  -3439  -5589   1811  -5321  -5502  -5035  -4346   1268  -4693   1380   540
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   332    542   -787  -6754  -6118   2653   2112  -4827   -834  -5713  -4083   1865  -5602  -6006  -5336  -5513  -5041   -820    -72   1582    973   541
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   333   -265      5  -6739  -2842  -1159  -2121  -1089   1397    361   1301   2190  -1004  -1064  -5327  -5506  -2960  -1137   1672  -4692  -1808   542
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   334   -361  -5587    538   1253  -2156   -513   -428  -1750   1569  -2366  -4676     59    425   1424    846   -556  -4053  -1836   -512     61   543
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   335   1315  -5571    469    318  -2416  -1487    631    107    610    109  -4662  -3730   -660   -572    709   -483    224   -467  -5759   -277   544
+     -   -154   -496    231     40   -383    392     99   -625    214   -454   -690    271    398     58     97    355    112   -366   -288   -256 
+     -   -137  -3470 -13151  -2149   -369   -701  -1378      *      * 
+   336  -1262   -662  -8280  -7661   1293  -7606  -6454   1196  -7306   2645   1075  -7264  -7428  -6718  -7042  -6738  -5833    279   -599  -5794   550
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -12 -12109  -6921   -894  -1115   -701  -1378      *      * 
+   337   2188    468  -2328    -48   -791    676  -1340  -1829    545  -1775   1249  -3861  -5257    634    357  -1018  -4078   -918  -5556   -301   551
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12098 -13140   -894  -1115   -374  -2130      *      * 
+   338    -54  -1071   1092   2178  -5908   -261  -3746  -2803    823  -3250  -4676    375  -2575   1053    923   -712   -769  -2831  -5770  -5087   552
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   339  -1414  -4812  -1405   -792    137  -5421   1251    -69    910    737   -525  -4306  -5500   1059   1392  -1374  -2520   -214   1978   1786   553
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -      0 -12109 -13151   -894  -1115   -701  -1378      *      * 
+   340  -2822  -5568  -2787  -7707    615  -7660  -6585   1049  -7376   2928   -484  -7317  -7500  -6851  -7152  -6806  -2490   -166  -6123  -5923   554
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -23 -12109  -6021   -894  -1115   -701  -1378      *      * 
+   341   -230  -5566   -556   1123  -5887  -1500    128  -2805   1586  -3302   -478    380  -5159   1002   1288    820    386  -1654  -5749  -1889   555
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -11 -12087  -7066   -894  -1115   -812  -1216      *      * 
+   342    223  -5567    315   2160  -5888  -1035  -1341  -1683   1461  -2187  -4656    860  -2314    839    218    -63  -2065  -2876  -5750  -5067   556
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -    -15 -12088  -6652   -894  -1115  -1842   -472      *      * 
+   343    217  -5549   -287   1057    -23  -1032   1172  -5618   1478   -306   -310    432  -5148    627    822  -3961   -447  -1321   1896   -985   557
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -  -2247 -12074   -342   -894  -1115  -2295   -329      *      * 
+   344    155  -3231   -302   -297   -271   1843  -1807   -609   -216    550  -2355   1719  -3221  -1402  -1933   -243  -2037  -2786   1341  -2895   558
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -289  -9829  -2470   -894  -1115   -160  -3251      *      * 
+   345   -718    554  -1351  -2529   2824  -1174  -1315   -544  -1166   1377  -1126  -2257  -1363  -1146  -5220  -2763   -577    262   -411   1025   559
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11930 -12972   -894  -1115  -1499   -630      *      * 
+   346     51  -5474   1479    120  -2041    764   -164  -5546   1119  -2333  -4563    -36   1419    534    571      2  -3940  -2810  -5657  -1376   560
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -582 -11991  -1593   -894  -1115  -3630   -121      *      * 
+   347    447  -4927   1668    758  -5248   -160    741  -1220    819   -919  -4017    572    -88    422  -1379  -1937    501   -786    160  -4428   561
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -   -405 -11410  -2034   -894  -1115  -3691   -116      *      * 
+   348    715    316    344   -188     83   -946    546   -282    657    -13  -3695    491   -668    665    447  -1682   -644    -91  -4792    156   562
+     -   -151   -513    231     54   -377    414    119   -623    196   -462   -717    289    387     28     74    348    105   -346   -227   -252 
+     -  -1805   -487 -12119  -1982   -421  -3647   -120      *      * 
+   349   -239  -4711    199   2304  -5032   -417  -2870  -4783    862  -4727  -3800   1156    -80   1017    200   -543  -1392  -2035    163  -4211   583
+     -   -149   -500    233     43   -381    399    106   -626    210   -466   -720    275    394     45     96    359    117   -369   -294   -249 
+     -     -1 -11175 -12217   -894  -1115    -14  -6736      *      * 
+   350   -860    161  -6909  -2858    894  -6127  -5013   2305  -5884    767  -3572  -5773  -6169  -5512  -5690  -5216  -1702   2523   -585  -4528   584
+     -      *      *      *      *      *      *      *      *      *      *      *      *      *      *      *      *      *      *      *      * 
+     -      *      *      *      *      *      *      *      *      0 
+//
diff --git a/demotic/examples/example.hmmsearch.out b/demotic/examples/example.hmmsearch.out
new file mode 100644
index 0000000..f5a5de9
--- /dev/null
+++ b/demotic/examples/example.hmmsearch.out
@@ -0,0 +1,17949 @@
+# hmmsearch :: search profile(s) against a sequence database
+# HMMER 3.0 (March 2010); http://hmmer.org/
+# Copyright (C) 2010 Howard Hughes Medical Institute.
+# Freely distributed under the GNU General Public License (GPLv3).
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# query HMM file:                  example.hmm
+# target sequence database:        /misc/data0/databases/Uniprot/uniprot_sprot.fasta
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+Query:       US2  [M=126]
+Accession:   PF02476.8
+Description: US2 family
+Scores for complete sequences (score includes all domains):
+   --- full sequence ---   --- best 1 domain ---    -#dom-
+    E-value  score  bias    E-value  score  bias    exp  N  Sequence              Description
+    ------- ------ -----    ------- ------ -----   ---- --  --------              -----------
+    4.2e-39  138.8   0.3    4.2e-39  138.8   0.2    1.7  2  sp|P06485|US02_HHV11  Protein US2 OS=Human herpesvirus 1 (st
+      2e-38  136.6   0.2    3.6e-38  135.8   0.1    1.4  1  sp|P13292|US02_HHV2H  Protein US2 OS=Human herpesvirus 2 (st
+    1.6e-35  127.2   0.1    2.2e-35  126.8   0.0    1.1  1  sp|Q05106|US453_GAHVG Uncharacterized 16.6 kDa protein OS=Ga
+    2.3e-35  126.8   0.0    3.9e-35  126.0   0.0    1.3  1  sp|P32517|US02_EHV1K  US1 protein OS=Equine herpesvirus 1 (s
+    3.3e-33  119.8   0.0    6.4e-33  118.9   0.0    1.5  1  sp|P28964|US02_EHV1B  Gene 68 protein OS=Equine herpesvirus 
+    2.1e-31  114.0   0.0    3.6e-31  113.2   0.0    1.4  1  sp|Q08099|US02_BHV1S  Protein US2 homolog OS=Bovine herpesvi
+    1.8e-17   68.9   0.0    3.3e-17   68.1   0.0    1.4  1  sp|P24382|US02_SUHVN  Protein US2 homolog OS=Suid herpesviru
+  ------ inclusion threshold ------
+        1.4   14.3   0.1        2.6   13.5   0.0    1.4  1  sp|Q9ZK80|ATPG_HELPJ  ATP synthase gamma chain OS=Helicobact
+        1.4   14.3   0.1        2.6   13.5   0.0    1.4  1  sp|P56082|ATPG_HELPY  ATP synthase gamma chain OS=Helicobact
+        1.5   14.2   0.1        2.9   13.3   0.0    1.4  1  sp|B2UUP1|ATPG_HELPS  ATP synthase gamma chain OS=Helicobact
+        1.5   14.2   0.0        2.9   13.3   0.0    1.4  1  sp|B6JMX3|ATPG_HELP2  ATP synthase gamma chain OS=Helicobact
+        2.6   13.4   0.0        4.8   12.6   0.0    1.4  1  sp|Q17Y79|ATPG_HELAH  ATP synthase gamma chain OS=Helicobact
+        3.6   13.0   0.0        6.6   12.2   0.0    1.4  1  sp|B5Z8D1|ATPG_HELPG  ATP synthase gamma chain OS=Helicobact
+        3.9   12.9   0.0        7.3   12.0   0.0    1.4  1  sp|Q1CSD4|ATPG_HELPH  ATP synthase gamma chain OS=Helicobact
+
+
+Domain annotation for each sequence (and alignments):
+>> sp|P06485|US02_HHV11  Protein US2 OS=Human herpesvirus 1 (strain 17) GN=US2 PE=1 SV=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   -2.0   0.0       4.5   1.6e+05      88     116 ..      50      78 ..      49      86 .. 0.74
+   2 !  138.8   0.2   1.1e-43   4.2e-39       2     126 .]     111     247 ..     110     247 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: -2.0 bits;  conditional E-value: 4.5
+                   US2  88 vvdpealreeaslrppepakrseresske 116
+                           vv+p+ lr +a++  + p+++++  ++++
+  sp|P06485|US02_HHV11  50 VVRPANLRRLAEPLMDLPKPTRPIVRTRS 78 
+                           67888888888888888888887777776 PP
+
+  == domain 2    score: 138.8 bits;  conditional E-value: 1.1e-43
+                   US2   2 Lnsgiign.rpyhLWvlGAADLCkpvlelipgpk...RlvavkvpdawagksWalPdelkplltvewtpfeeaalskleallsakrlvY 86 
+                           L+++++++ r+yhLWv+GAADLC p+le++++ +   R++a+k+pdaw+g++Wa+P+++ p++tv+wtpf++a++++le+lls+++++Y
+  sp|P06485|US02_HHV11 111 LHRDQPSPpRLYHLWVVGAADLCVPFLEYAQKIRlgvRFIAIKTPDAWVGEPWAVPTRFLPEWTVAWTPFPAAPNHPLETLLSRYEYQY 199
+                           888888888******************************************************************************** PP
+
+                   US2  87 avvdp..........ealreeaslrppepakrseresskeapsraaccis 126
+                           +vv p          ++lr++++l++p+pa++++ ++s++   r++cc++
+  sp|P06485|US02_HHV11 200 GVVLPgtngrerdcmRWLRSLIALHKPHPATPGPLTTSHP--VRRPCCAC 247
+                           ***************************************9..******97 PP
+
+>> sp|P13292|US02_HHV2H  Protein US2 OS=Human herpesvirus 2 (strain HG52) GN=US2 PE=1 SV=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  135.8   0.1   9.8e-43   3.6e-38       1     126 []     110     246 ..     110     246 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 135.8 bits;  conditional E-value: 9.8e-43
+                   US2   1 lLnsgiign.rpyhLWvlGAADLCkpvlelipgpk...RlvavkvpdawagksWalPdelkplltvewtpfeeaalskleallsakrlv 85 
+                           lL+++++g+ r+yhLWv+GAADLC p++e++++++   R++a+k++daw+g++W+lPd++ p++tv+wtpf++a++++le+lls+++++
+  sp|P13292|US02_HHV2H 110 LLHQERPGPhRLYHLWVVGAADLCVPFFEYAQKTRlgfRFIATKTNDAWVGEPWPLPDRFLPERTVSWTPFPAAPNHPLENLLSRYEYQ 198
+                           599******99****************************************************************************** PP
+
+                   US2  86 Yavvdp........ealreeaslr.ppepakrseresskeapsraaccis 126
+                           Y+vv p        ++lr++++++ +p+pa+++++ ++++  ++++c+++
+  sp|P13292|US02_HHV2H 199 YGVVVPgdrersclRWLRSLVAPHnKPRPASSRPHPATHP--TQRPCFTC 246
+                           ********************99996777777777777777..*****987 PP
+
+>> sp|Q05106|US453_GAHVG  Uncharacterized 16.6 kDa protein OS=Gallid herpesvirus 2 (strain GA) GN=US453 PE=4 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.8   0.0   5.9e-40   2.2e-35       1     124 [.       1     116 [.       1     118 [. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 126.8 bits;  conditional E-value: 5.9e-40
+                    US2   1 lLnsgiignrpyhLWvlGAADLCkpvlelipgpkRlvavkvpdawagksWalPdelkplltvewtpfeeaalskleallsakrlvYav 88 
+                            +L+s+++gn+p++LW++GAAD+C+ +le+ip pkRl+a+kv+++w+g++Wa+Pd++++llt++w+p ++++++++++++s + +vY++
+  sp|Q05106|US453_GAHVG   1 MLESEVSGNAPHSLWIVGAADICRIALECIPLPKRLLAIKVSGTWSGMPWAIPDNIQTLLTSTWEPKFDTPEDRAHFCDSDMVCVYKI 88 
+                            79************************************************************************************** PP
+
+                    US2  89 vdpealreeaslrppepakrseresske..apsraacc 124
+                            +++          pp+p k++e e +++  +p r +cc
+  sp|Q05106|US453_GAHVG  89 LGS----------PPNPLKPPEIEPPQMssTPGRLFCC 116
+                            ***..........4444444444444444457889998 PP
+
+>> sp|P32517|US02_EHV1K  US1 protein OS=Equine herpesvirus 1 (strain Kentucky A) GN=US1 PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.0   0.0   1.1e-39   3.9e-35       1     124 [.     111     265 ..     111     268 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 126.0 bits;  conditional E-value: 1.1e-39
+                   US2   1 lLnsgiignrpyhLWvlGAADLCkpvlelipgpkRlvavkvpdawagksWalPd.......elkplltvewt................. 65 
+                           +Lns++i+n+pyhLWvlGAADLCkpv++lipgpkR+v+++++d++ +ksW +P+       e++p++tve +                 
+  sp|P32517|US02_EHV1K 111 HLNSSLIINQPYHLWVLGAADLCKPVFDLIPGPKRMVYAEIADEF-HKSW-QPPfvcgklfETIPWTTVEHNhplklraaggedtvvge 197
+                           7********************************************.****.7888***************4445556666677777888 PP
+
+                   US2  66 .pfeeaalskleallsakrlvYavvdp.......ealreeaslrppepakrseresske.apsraacc 124
+                            +f+++++++l++++++ r++Yavvdp       ++ r++ ++rp+e  +r++r++s++ ap+r+ ++
+  sp|P32517|US02_EHV1K 198 cGFSKHSSNSLVHPPTVNRVIYAVVDParlreipAPGRPLPRRRPSEGGMRAPRRRSRApAPARSTAA 265
+                           8**************************999999999999*****************999755555544 PP
+
+>> sp|P28964|US02_EHV1B  Gene 68 protein OS=Equine herpesvirus 1 (strain Ab4p) GN=68 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.9   0.0   1.7e-37   6.4e-33       1     112 [.     111     245 ..     111     262 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 118.9 bits;  conditional E-value: 1.7e-37
+                   US2   1 lLnsgiignrpyhLWvlGAADLCkpvlelipgpkRlvavkvpdawagksWalPd.......elkplltvewt................. 65 
+                           +Lns++i+n+pyhLWvlGAADLCkpv++lipgpkR+v+++++d++ +ksW +P+       e++p++tve +                 
+  sp|P28964|US02_EHV1B 111 HLNSSLIINQPYHLWVLGAADLCKPVFDLIPGPKRMVYAEIADEF-HKSW-QPPfvcgklfETIPWTTVEHNhplklraaggedtvvge 197
+                           7********************************************.****.7888***************4445556666677777888 PP
+
+                   US2  66 .pfeeaalskleallsakrlvYavvdpealreeaslrppepakrsere 112
+                            +f+++++++l+ ++++kr++Yavvdp++lre  ++  p p++r+ ++
+  sp|P28964|US02_EHV1B 198 cGFSKHSSNSLVRPPTVKRVIYAVVDPARLREIPAPGRPLPRRRPSEG 245
+                           8**************************888887776644444443332 PP
+
+>> sp|Q08099|US02_BHV1S  Protein US2 homolog OS=Bovine herpesvirus 1.2 (strain ST) PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  113.2   0.0   9.8e-36   3.6e-31       1     110 [.     105     208 ..     105     219 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 113.2 bits;  conditional E-value: 9.8e-36
+                   US2   1 lLnsgiignrpyhLWvlGAADLCkpvlelipgpkRlvavkvpdawagksWalPdelkplltvewtpfeeaalskleallsakrlvYavv 89 
+                           lLnsg++g+rp+h+Wv+GAADL++p++++i++++Rlv++++++++ag++W+lP ++ p+++++w+p++++al +l+a  +  rlvY+vv
+  sp|Q08099|US02_BHV1S 105 LLNSGRAGARPFHMWVFGAADLYAPIFAHIAATTRLVYAQLDCTFAGAAWRLP-RRGPAIASPWPPYDTPALPELVAGGVLLRLVYEVV 192
+                           69************************************************999.9********************************** PP
+
+                   US2  90 dpealreeaslrppepakrse 110
+                           d+      a++rp++++++++
+  sp|Q08099|US02_BHV1S 193 DR-----GAAPRPAKREPPCP 208
+                           **.....88889888888765 PP
+
+>> sp|P24382|US02_SUHVN  Protein US2 homolog OS=Suid herpesvirus 1 (strain NIA-3) GN=28K PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   68.1   0.0   8.8e-22   3.3e-17       1     125 [.     135     255 ..     135     256 .] 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 68.1 bits;  conditional E-value: 8.8e-22
+                   US2   1 lLnsgiignrpyhLWvlGAADLCkpvlelipgpkRlvavkvpdawagksWalPdelkplltvewtpfeeaalskleallsakrlvYavv 89 
+                           +Lnsg++g++p+hLW+lGAADLC++vl +++   R +a+  p+a++g++++   +++p+lt++      +al+ ++a + a+r+++a v
+  sp|P24382|US02_SUHVN 135 YLNSGARGTAPIHLWILGAADLCDQVLLAAS---RSTAAGAPGAPTGARLT---RRRPGLTDA------DALDVIVAGIPATRAMFARV 211
+                           8****************************99...****************5...9******99......9******************* PP
+
+                   US2  90 dp..........ealreeaslrppepakrseresskeapsraacci 125
+                           ++          eal++++ +r + +++r+ r++ +e  ++++c+i
+  sp|P24382|US02_SUHVN 212 HNrswrhagewtEALHAQIVTRGDVRRRRGGRGNGRE--RAPRCTI 255
+                           ************************************9..9999987 PP
+
+>> sp|Q9ZK80|ATPG_HELPJ  ATP synthase gamma chain OS=Helicobacter pylori J99 GN=atpG PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.5   0.0   7.1e-05       2.6      51     107 ..     208     262 ..     203     283 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 13.5 bits;  conditional E-value: 7.1e-05
+                   US2  51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107
+                           ++P+e+++ +t+e  + e++ l++l+ + + + l Ya++d+  l +e s r ++  +
+  sp|Q9ZK80|ATPG_HELPJ 208 PQPSETQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262
+                           5899*************************************..44444444443333 PP
+
+>> sp|P56082|ATPG_HELPY  ATP synthase gamma chain OS=Helicobacter pylori GN=atpG PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.5   0.0   7.1e-05       2.6      51     107 ..     208     262 ..     203     283 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 13.5 bits;  conditional E-value: 7.1e-05
+                   US2  51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107
+                           ++P+e+++ +t+e  + e++ l++l+ + + + l Ya++d+  l +e s r ++  +
+  sp|P56082|ATPG_HELPY 208 PQPSETQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262
+                           5899*************************************..44444444443333 PP
+
+>> sp|B2UUP1|ATPG_HELPS  ATP synthase gamma chain OS=Helicobacter pylori (strain Shi470) GN=atpG PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.3   0.0   7.8e-05       2.9      51     107 ..     208     262 ..     203     283 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 13.3 bits;  conditional E-value: 7.8e-05
+                   US2  51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107
+                           ++P+e+++ +t+e  + e++ l++l+ + + + l Ya++d+  l +e s r ++  +
+  sp|B2UUP1|ATPG_HELPS 208 PQPNETQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262
+                           5899*************************************..44444444443333 PP
+
+>> sp|B6JMX3|ATPG_HELP2  ATP synthase gamma chain OS=Helicobacter pylori (strain P12) GN=atpG PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.3   0.0   7.8e-05       2.9      51     107 ..     208     262 ..     203     283 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 13.3 bits;  conditional E-value: 7.8e-05
+                   US2  51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107
+                           ++P+e+++ +t+e  + e++ l++l+ + + + l Ya++d+  l +e s r ++  +
+  sp|B6JMX3|ATPG_HELP2 208 PQPNEVQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262
+                           5899*************************************..44444444443333 PP
+
+>> sp|Q17Y79|ATPG_HELAH  ATP synthase gamma chain OS=Helicobacter acinonychis (strain Sheeba) GN=atpG PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.6   0.0   0.00013       4.8      52     107 ..     209     262 ..     201     283 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 12.6 bits;  conditional E-value: 0.00013
+                   US2  52 lPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107
+                           +P+e ++ +t+e  + e++ l++l+++ + + l Ya++d+  l +e s r ++  +
+  sp|Q17Y79|ATPG_HELAH 209 QPSEAQETITSEPSGSEDEILDSLAKKYVEYSLYYALIDS--LAAEHSARMQAMDT 262
+                           899*************************************..44444444443333 PP
+
+>> sp|B5Z8D1|ATPG_HELPG  ATP synthase gamma chain OS=Helicobacter pylori (strain G27) GN=atpG PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.2   0.0   0.00018       6.6      51     107 ..     208     262 ..     203     283 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 12.2 bits;  conditional E-value: 0.00018
+                   US2  51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107
+                           ++P+e ++ +t+e  + e++ l++l+ + + + l Ya++d+  l +e s r ++  +
+  sp|B5Z8D1|ATPG_HELPG 208 PQPSEAQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262
+                           5899*************************************..44444444443333 PP
+
+>> sp|Q1CSD4|ATPG_HELPH  ATP synthase gamma chain OS=Helicobacter pylori (strain HPAG1) GN=atpG PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   0.0    0.0002       7.3      51     107 ..     208     262 ..     203     283 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.0002
+                   US2  51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107
+                           ++P+e ++ +t+e  + e++ l++l+ + + + l Ya++d+  l +e s r ++  +
+  sp|Q1CSD4|ATPG_HELPH 208 PQPNEAQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262
+                           5899*************************************..44444444443333 PP
+
+
+
+Internal pipeline statistics summary:
+-------------------------------------
+Query model(s):                            1  (126 nodes)
+Target sequences:                     516081  (181677051 residues)
+Passed MSV filter:                      9110  (0.0176523); expected 10321.6 (0.02)
+Passed bias filter:                     7603  (0.0147322); expected 10321.6 (0.02)
+Passed Vit filter:                       423  (0.000819639); expected 516.1 (0.001)
+Passed Fwd filter:                        17  (3.29406e-05); expected 5.2 (1e-05)
+Initial search space (Z):             516081  [actual number of targets]
+Domain search space  (domZ):              14  [number of targets reported over threshold]
+# CPU time: 4.56u 0.07s 00:00:04.63 Elapsed: 00:00:01.60
+# Mc/sec: 14307.07
+//
+Query:       Glyco_transf_28  [M=139]
+Accession:   PF03033.13
+Description: Glycosyltransferase family 28 N-terminal domain
+Scores for complete sequences (score includes all domains):
+   --- full sequence ---   --- best 1 domain ---    -#dom-
+    E-value  score  bias    E-value  score  bias    exp  N  Sequence              Description
+    ------- ------ -----    ------- ------ -----   ---- --  --------              -----------
+      3e-40  142.2   0.0    7.6e-40  140.8   0.0    1.7  1  sp|A7Z4E5|MURG_BACA2  UDP-N-acetylglucosamine--N-acetylmuram
+    3.6e-40  141.9   0.0    2.3e-38  136.1   0.0    2.5  2  sp|Q65JY0|MURG_BACLD  UDP-N-acetylglucosamine--N-acetylmuram
+    7.6e-40  140.8   0.0    2.8e-39  139.0   0.0    1.9  1  sp|P37585|MURG_BACSU  UDP-N-acetylglucosamine--N-acetylmuram
+      3e-39  138.9   0.0    1.4e-38  136.8   0.0    2.0  1  sp|A8FCY1|MURG_BACP2  UDP-N-acetylglucosamine--N-acetylmuram
+    7.6e-39  137.6   0.0    4.4e-37  131.9   0.0    2.8  1  sp|Q812W5|MURG1_BACCR UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-38  137.0   0.5      4e-38  135.3   0.1    1.9  1  sp|A3MY90|MURG_ACTP2  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-38  136.7   0.0    4.4e-37  131.9   0.0    2.7  1  sp|A0RHT1|MURG2_BACAH UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-38  136.7   0.0    4.4e-37  131.9   0.0    2.7  1  sp|Q636B6|MURG1_BACCZ UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-38  136.7   0.0    4.4e-37  131.9   0.0    2.7  1  sp|Q81JG5|MURG1_BACAN UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-38  136.4   0.0    4.4e-37  131.9   0.0    2.6  1  sp|Q732F8|MURG1_BACC1 UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-38  135.8   0.0    1.8e-37  133.1   0.0    2.3  1  sp|B7GGI2|MURG_ANOFW  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-38  135.7   0.1    4.2e-37  131.9   0.0    2.3  1  sp|A7GRN6|MURG_BACCN  UDP-N-acetylglucosamine--N-acetylmuram
+    3.7e-38  135.4   0.4    1.4e-37  133.5   0.1    2.0  1  sp|B0BRH7|MURG_ACTPJ  UDP-N-acetylglucosamine--N-acetylmuram
+    3.7e-38  135.4   0.4    1.4e-37  133.5   0.1    2.0  1  sp|B3GZK8|MURG_ACTP7  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-38  135.3   0.0    1.1e-36  130.6   0.0    2.7  1  sp|Q6HEQ4|MURG1_BACHK UDP-N-acetylglucosamine--N-acetylmuram
+    9.4e-38  134.1   0.0      4e-37  132.0   0.0    2.0  1  sp|O07670|MURG_ENTHR  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-37  133.3   1.8    2.3e-36  129.6   0.3    2.5  2  sp|A7FM66|MURG_YERP3  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-37  133.3   1.8    2.3e-36  129.6   0.3    2.5  2  sp|B1JK81|MURG_YERPY  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-37  133.3   1.8    2.3e-36  129.6   0.3    2.5  2  sp|B2K4E6|MURG_YERPB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-37  133.3   1.8    2.3e-36  129.6   0.3    2.5  2  sp|Q66EK5|MURG_YERPS  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-37  133.0   1.5    1.4e-36  130.3   0.2    2.3  1  sp|A1JJJ3|MURG_YERE8  UDP-N-acetylglucosamine--N-acetylmuram
+    2.2e-37  132.8   2.4    2.7e-36  129.3   0.4    2.3  2  sp|A9MQC2|MURG_SALAR  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-37  132.8   1.5    4.5e-37  131.8   1.0    1.5  1  sp|P64869|Y1526_MYCTU Uncharacterized protein Rv1526c/MT1577
+    2.3e-37  132.8   1.5    4.5e-37  131.8   1.0    1.5  1  sp|P64870|Y1553_MYCBO Uncharacterized protein Mb1553c OS=Myc
+    3.1e-37  132.4   0.1    5.6e-37  131.5   0.1    1.5  1  sp|Q65RY6|MURG_MANSM  UDP-N-acetylglucosamine--N-acetylmuram
+    3.5e-37  132.2   1.8    2.1e-36  129.7   0.2    2.4  1  sp|B2VD91|MURG_ERWT9  UDP-N-acetylglucosamine--N-acetylmuram
+    3.6e-37  132.2   0.1    7.4e-37  131.2   0.1    1.6  1  sp|Q4QLF8|MURG_HAEI8  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-37  132.1   0.1    7.4e-37  131.2   0.1    1.5  1  sp|A5UIR2|MURG_HAEIG  UDP-N-acetylglucosamine--N-acetylmuram
+      4e-37  132.0   0.1    7.4e-37  131.2   0.1    1.5  1  sp|P45065|MURG_HAEIN  UDP-N-acetylglucosamine--N-acetylmuram
+    4.7e-37  131.8   2.7    5.5e-36  128.3   0.3    2.6  2  sp|A9R124|MURG_YERPG  UDP-N-acetylglucosamine--N-acetylmuram
+    4.7e-37  131.8   2.7    5.5e-36  128.3   0.3    2.6  2  sp|Q1C214|MURG_YERPA  UDP-N-acetylglucosamine--N-acetylmuram
+    4.7e-37  131.8   2.7    5.5e-36  128.3   0.3    2.6  2  sp|Q1CMM7|MURG_YERPN  UDP-N-acetylglucosamine--N-acetylmuram
+    4.7e-37  131.8   2.7    5.5e-36  128.3   0.3    2.6  2  sp|Q8ZIE9|MURG_YERPE  UDP-N-acetylglucosamine--N-acetylmuram
+    5.7e-37  131.5   0.0    3.5e-36  129.0   0.0    2.1  1  sp|O07109|MURG_ENTFA  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-37  131.5   1.2    2.4e-36  129.5   0.1    2.1  1  sp|A3QIM1|MURG_SHELP  UDP-N-acetylglucosamine--N-acetylmuram
+      6e-37  131.5   1.3    3.5e-36  129.0   0.2    2.3  1  sp|A8G9S7|MURG_SERP5  UDP-N-acetylglucosamine--N-acetylmuram
+    6.3e-37  131.4   1.6    3.4e-36  129.0   0.3    2.2  1  sp|B7LWF6|MURG_ESCF3  UDP-N-acetylglucosamine--N-acetylmuram
+    7.1e-37  131.2   2.0    4.3e-36  128.7   0.2    2.3  1  sp|A7MIE5|MURG_ENTS8  UDP-N-acetylglucosamine--N-acetylmuram
+    7.4e-37  131.2   2.7      4e-36  128.8   0.2    2.6  1  sp|C6DEU3|MURG_PECCP  UDP-N-acetylglucosamine--N-acetylmuram
+    8.3e-37  131.0   0.3    1.3e-35  127.1   0.1    2.4  1  sp|Q88V81|MURG_LACPL  UDP-N-acetylglucosamine--N-acetylmuram
+    8.9e-37  130.9   1.2    8.3e-36  127.8   0.2    2.3  1  sp|Q8Z9G9|MURG_SALTI  UDP-N-acetylglucosamine--N-acetylmuram
+    8.9e-37  130.9   2.2    1.9e-35  126.6   0.1    2.6  2  sp|B4F111|MURG_PROMH  UDP-N-acetylglucosamine--N-acetylmuram
+    9.9e-37  130.7   2.6    1.4e-35  127.0   0.2    2.3  2  sp|A0L1P2|MURG_SHESA  UDP-N-acetylglucosamine--N-acetylmuram
+    9.9e-37  130.7   2.6    1.4e-35  127.0   0.2    2.3  2  sp|Q0HZR6|MURG_SHESR  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-36  130.4   1.6    9.6e-36  127.5   0.3    2.3  1  sp|B5BLC2|MURG_SALPK  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-36  130.4   1.6    9.6e-36  127.5   0.3    2.3  1  sp|Q5PDC8|MURG_SALPA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-36  130.4   0.6    2.3e-36  129.6   0.0    1.8  1  sp|Q9K9T0|MURG_BACHD  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-36  130.3   0.0    2.9e-36  129.2   0.0    1.6  1  sp|Q8Y5M2|MURG_LISMO  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-36  130.0   1.5    1.3e-35  127.1   0.3    2.3  1  sp|A9MZL9|MURG_SALPB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-36  130.0   1.5    1.3e-35  127.1   0.3    2.3  1  sp|B4TJ87|MURG_SALHS  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-36  130.0   1.5    1.3e-35  127.1   0.3    2.3  1  sp|B4TXH8|MURG_SALSV  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-36  130.0   1.5    1.3e-35  127.1   0.3    2.3  1  sp|B5F7W4|MURG_SALA4  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-36  130.0   1.5    1.3e-35  127.1   0.3    2.3  1  sp|Q8ZRU3|MURG_SALTY  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-36  130.0   1.5    1.3e-35  127.1   0.3    2.3  1  sp|B4SU50|MURG_SALNS  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-36  130.0   1.5    1.5e-35  127.0   0.2    2.3  1  sp|A1REZ6|MURG_SHESW  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-36  130.0   1.5    1.5e-35  127.0   0.2    2.3  1  sp|A4Y2N6|MURG_SHEPC  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-36  130.0   0.7    9.6e-36  127.5   0.1    2.2  1  sp|A6T4N3|MURG_KLEP7  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-36  129.9   1.5    1.3e-35  127.1   0.3    2.3  1  sp|B5RH64|MURG_SALG2  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-36  129.9   0.9    6.4e-36  128.1   0.2    2.1  1  sp|A8ALK6|MURG_CITK8  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-36  129.9   1.5    1.3e-35  127.1   0.3    2.2  1  sp|Q57TD0|MURG_SALCH  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-36  129.9   1.6    2.2e-35  126.4   0.2    2.4  2  sp|A6WID1|MURG_SHEB8  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-36  129.9   1.6    2.2e-35  126.4   0.2    2.4  2  sp|A9KY29|MURG_SHEB9  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-36  129.9   1.6    2.2e-35  126.4   0.2    2.4  2  sp|B8E698|MURG_SHEB2  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-36  129.8   0.7    9.6e-36  127.5   0.1    2.1  1  sp|B5Y1U7|MURG_KLEP3  UDP-N-acetylglucosamine--N-acetylmuram
+    2.2e-36  129.6   1.7    2.2e-35  126.4   0.2    2.3  2  sp|A3CZM1|MURG_SHEB5  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-36  129.5   0.3    8.9e-36  127.7   0.1    2.0  1  sp|Q7U336|MURG_HAEDU  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-36  129.5   0.2    4.9e-36  128.5   0.1    1.5  1  sp|B7VJ03|MURG_VIBSL  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-36  129.5   0.4      6e-36  128.2   0.1    1.8  1  sp|Q0I1D3|MURG_HAES1  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-36  129.4   1.2    1.3e-35  127.1   0.3    2.2  1  sp|B5FI72|MURG_SALDC  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-36  129.4   0.0    1.3e-35  127.1   0.0    2.1  1  sp|A2RJQ4|MURG_LACLM  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-36  129.4   0.0    1.3e-35  127.1   0.0    2.1  1  sp|Q02XY0|MURG_LACLS  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-36  129.3   1.5    9.4e-36  127.6   0.3    2.1  1  sp|B7MNU9|MURG_ECO81  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-36  129.3   1.5    9.4e-36  127.6   0.3    2.1  1  sp|B7NHJ6|MURG_ECO7I  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-36  129.3   1.5    9.4e-36  127.6   0.3    2.1  1  sp|B7UIE0|MURG_ECO27  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-36  129.3   1.5    9.4e-36  127.6   0.3    2.1  1  sp|Q0TLP9|MURG_ECOL5  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-36  129.3   1.5    9.4e-36  127.6   0.3    2.1  1  sp|Q8FL64|MURG_ECOL6  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-36  129.2   1.6    9.4e-36  127.6   0.3    2.1  1  sp|A1A7D5|MURG_ECOK1  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-36  129.2   1.6    9.4e-36  127.6   0.3    2.1  1  sp|B7MAL3|MURG_ECO45  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-36  129.2   1.6    9.4e-36  127.6   0.3    2.1  1  sp|Q1RGA5|MURG_ECOUT  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-36  129.1   2.3    1.2e-35  127.2   0.2    2.4  1  sp|Q6D0I3|MURG_ERWCT  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|B5YZC6|MURG_ECO5E  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|Q8X9Y8|MURG_ECO57  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|A7ZHI1|MURG_ECO24  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|B1LG27|MURG_ECOSM  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|B6HZ67|MURG_ECOSE  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|B7M133|MURG_ECO8A  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|B7N7W3|MURG_ECOLU  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|Q326E5|MURG_SHIBS  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|Q3Z5R9|MURG_SHISS  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|Q32K02|MURG_SHIDS  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|B2U295|MURG_SHIB3  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|B1IR88|MURG_ECOLC  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|B1XC67|MURG_ECODH  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|C4ZRI5|MURG_ECOBW  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|P17443|MURG_ECOLI  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-36  129.1   1.3    9.4e-36  127.6   0.3    2.1  1  sp|A7ZW42|MURG_ECOHS  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-36  129.1   2.9    3.4e-35  125.8   0.3    2.6  2  sp|A4TQ83|MURG_YERPP  UDP-N-acetylglucosamine--N-acetylmuram
+    3.5e-36  129.0   0.1    2.6e-35  126.1   0.0    2.4  1  sp|Q9CF92|MURG_LACLA  UDP-N-acetylglucosamine--N-acetylmuram
+    3.7e-36  128.9   1.2    3.2e-35  125.8   0.2    2.3  1  sp|B5R2M4|MURG_SALEP  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-36  128.8   1.1    1.3e-35  127.1   0.2    2.1  1  sp|Q0T8A7|MURG_SHIF8  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-36  128.8   1.1    1.3e-35  127.1   0.2    2.1  1  sp|Q83MN4|MURG_SHIFL  UDP-N-acetylglucosamine--N-acetylmuram
+    4.1e-36  128.7   2.5    6.6e-35  124.8   0.2    2.3  2  sp|Q8CX35|MURG_SHEON  UDP-N-acetylglucosamine--N-acetylmuram
+    4.3e-36  128.7   0.0    9.4e-36  127.6   0.0    1.6  1  sp|B8DBP8|MURG_LISMH  UDP-N-acetylglucosamine--N-acetylmuram
+    4.6e-36  128.6   0.0    1.1e-35  127.4   0.0    1.6  1  sp|A0AKD5|MURG_LISW6  UDP-N-acetylglucosamine--N-acetylmuram
+    5.2e-36  128.4   2.9    1.3e-35  127.1   1.0    2.2  1  sp|Q9ZBA5|MURG_STRCO  UDP-N-acetylglucosamine--N-acetylmuram
+    5.5e-36  128.3   0.0    1.2e-35  127.3   0.0    1.6  1  sp|Q929Y2|MURG_LISIN  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-36  128.3   0.5    1.2e-35  127.3   0.1    1.7  1  sp|B8F3B6|MURG_HAEPS  UDP-N-acetylglucosamine--N-acetylmuram
+    5.9e-36  128.2   2.6    1.4e-35  127.0   0.2    2.2  1  sp|Q0HE83|MURG_SHESM  UDP-N-acetylglucosamine--N-acetylmuram
+      6e-36  128.2   0.0    1.3e-35  127.2   0.0    1.6  1  sp|C1KWY8|MURG_LISMC  UDP-N-acetylglucosamine--N-acetylmuram
+      6e-36  128.2   0.0    1.3e-35  127.2   0.0    1.6  1  sp|Q71XX8|MURG_LISMF  UDP-N-acetylglucosamine--N-acetylmuram
+    6.4e-36  128.1   0.1    1.3e-35  127.1   0.1    1.5  1  sp|A1S2F9|MURG_SHEAM  UDP-N-acetylglucosamine--N-acetylmuram
+    9.6e-36  127.5   0.1      2e-35  126.5   0.0    1.6  1  sp|A5UCW8|MURG_HAEIE  UDP-N-acetylglucosamine--N-acetylmuram
+    9.8e-36  127.5   1.0    1.1e-33  120.9   0.1    2.6  2  sp|Q03QH5|MURG_LACBA  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-35  127.4   0.3    2.2e-35  126.4   0.2    1.6  1  sp|Q8DEL0|MURG_VIBVU  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-35  127.4   0.3    2.2e-35  126.4   0.2    1.6  1  sp|Q7MNV1|MURG_VIBVY  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-35  127.2   0.1    2.5e-35  126.2   0.1    1.5  1  sp|Q3IFY0|MURG_PSEHT  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-35  127.1   1.5    3.8e-35  125.6   0.4    2.1  1  sp|B7LFW0|MURG_ECO55  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-35  127.0   0.2    2.4e-35  126.3   0.1    1.4  1  sp|B1KKX7|MURG_SHEWM  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-35  126.3   0.1    4.2e-35  125.5   0.1    1.5  1  sp|Q49929|Y2348_MYCLE Uncharacterized glycosyltransferase ML
+    2.3e-35  126.3   1.8    9.4e-35  124.3   0.2    2.1  1  sp|Q7N147|MURG_PHOLL  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-35  126.3   0.3    7.8e-35  124.6   0.1    1.9  1  sp|A8H984|MURG_SHEPA  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-35  126.1   2.1    5.7e-35  125.0   0.7    2.0  1  sp|Q820F6|MURG_STRAW  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-35  126.1   0.0    1.9e-34  123.3   0.0    2.2  1  sp|Q1WTA0|MURG_LACS1  UDP-N-acetylglucosamine--N-acetylmuram
+      3e-35  125.9   0.7    7.7e-35  124.6   0.5    1.6  1  sp|Q9X4H4|MURG_STRCU  UDP-N-acetylglucosamine--N-acetylmuram
+      4e-35  125.6   1.3    7.1e-35  124.7   0.2    2.0  1  sp|Q12SC6|MURG_SHEDO  UDP-N-acetylglucosamine--N-acetylmuram
+      4e-35  125.5   3.0      6e-35  125.0   0.2    2.2  1  sp|P57817|MURG_PASMU  UDP-N-acetylglucosamine--N-acetylmuram
+    4.3e-35  125.4   1.1    1.1e-34  124.2   0.2    2.0  1  sp|Q87SG4|MURG_VIBPA  UDP-N-acetylglucosamine--N-acetylmuram
+    4.4e-35  125.4   0.5    1.4e-34  123.7   0.1    1.9  1  sp|B0TQN7|MURG_SHEHH  UDP-N-acetylglucosamine--N-acetylmuram
+    4.7e-35  125.3   0.5    1.7e-34  123.5   0.0    2.0  1  sp|C4L5U5|MURG_EXISA  UDP-N-acetylglucosamine--N-acetylmuram
+    5.3e-35  125.1   0.5    1.2e-34  124.0   0.1    1.7  1  sp|A9M2H3|MURG_NEIM0  UDP-N-acetylglucosamine--N-acetylmuram
+    7.1e-35  124.7   1.7    1.1e-34  124.1   0.2    1.9  1  sp|Q6LMF6|MURG_PHOPR  UDP-N-acetylglucosamine--N-acetylmuram
+    8.4e-35  124.5   0.2    1.7e-34  123.5   0.1    1.5  1  sp|Q5E2Q0|MURG_VIBF1  UDP-N-acetylglucosamine--N-acetylmuram
+    8.7e-35  124.4   0.2    1.6e-34  123.6   0.2    1.5  1  sp|P64865|Y1524_MYCTU Uncharacterized glycosyltransferase Rv
+    8.7e-35  124.4   0.2    1.6e-34  123.6   0.2    1.5  1  sp|P64866|Y1551_MYCBO Uncharacterized glycosyltransferase Mb
+      9e-35  124.4   0.2    1.7e-34  123.5   0.1    1.5  1  sp|B5FB35|MURG_VIBFM  UDP-N-acetylglucosamine--N-acetylmuram
+    9.6e-35  124.3   0.3    2.5e-33  119.7   0.2    2.3  2  sp|B2GB78|MURG_LACF3  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-34  124.2   0.1      2e-34  123.3   0.1    1.5  1  sp|B6ELH5|MURG_ALISL  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-34  124.1   0.0    2.4e-34  123.0   0.0    1.6  1  sp|B8CWJ6|MURG_HALOH  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-34  124.1   1.2    2.3e-34  123.1   0.2    1.9  1  sp|A7MXR6|MURG_VIBHB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-34  124.1   0.5    3.3e-33  119.3   0.0    2.4  2  sp|A5VJ33|MURG_LACRD  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-34  124.1   0.5    3.3e-33  119.3   0.0    2.4  2  sp|B2G6K5|MURG_LACRJ  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-34  123.8   0.0    3.2e-34  122.6   0.0    1.7  1  sp|Q182Y6|MURG_CLOD6  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-34  123.8   0.2    3.6e-34  122.5   0.2    1.7  1  sp|Q2NVV1|MURG_SODGM  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-34  123.8   0.1    3.6e-34  122.4   0.0    1.8  1  sp|Q07WI5|MURG_SHEFN  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-34  123.8   0.6      3e-34  122.7   0.1    1.7  1  sp|A1KVL3|MURG_NEIMF  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-34  123.7   0.4      3e-34  122.7   0.1    1.6  1  sp|Q9K0Y2|MURG_NEIMB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-34  123.4   0.2    5.6e-34  121.8   0.0    1.8  1  sp|B8CNL1|MURG_SHEPW  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-34  123.3   1.8    1.4e-33  120.6   0.4    2.1  1  sp|C4LA25|MURG_TOLAT  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-34  123.3   0.2    6.1e-34  121.7   0.0    1.8  1  sp|Q9F1N0|MURG_SHEVI  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-34  122.9   0.5    6.5e-34  121.6   0.4    1.7  1  sp|A5F5M9|MURG_VIBC3  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-34  122.9   0.1    9.4e-34  121.1   0.1    1.9  1  sp|Q03W35|MURG_LEUMM  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-34  122.8   2.7    4.4e-34  122.2   1.3    1.7  1  sp|A3Q1L8|MURG_MYCSJ  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-34  122.8   2.7    4.4e-34  122.2   1.3    1.7  1  sp|A1UI54|MURG_MYCSK  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-34  122.8   2.7    4.4e-34  122.2   1.3    1.7  1  sp|Q1B6X1|MURG_MYCSS  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-34  122.6   1.5    3.9e-34  122.3   0.3    1.7  1  sp|C3LQU6|MURG_VIBCM  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-34  122.6   1.5    3.9e-34  122.3   0.3    1.7  1  sp|Q9KPG7|MURG_VIBCH  UDP-N-acetylglucosamine--N-acetylmuram
+    4.3e-34  122.2   0.1    7.6e-34  121.4   0.1    1.4  1  sp|A8FQA0|MURG_SHESH  UDP-N-acetylglucosamine--N-acetylmuram
+    6.8e-34  121.5   0.4    1.6e-33  120.3   0.1    1.8  1  sp|B4RQC5|MURG_NEIG2  UDP-N-acetylglucosamine--N-acetylmuram
+    6.8e-34  121.5   0.4    1.6e-33  120.3   0.1    1.8  1  sp|Q5F6L8|MURG_NEIG1  UDP-N-acetylglucosamine--N-acetylmuram
+    7.6e-34  121.4   1.3    1.6e-33  120.4   0.3    2.0  1  sp|B1I4C4|MURG_DESAP  UDP-N-acetylglucosamine--N-acetylmuram
+      8e-34  121.3   1.6      8e-34  121.3   1.1    2.2  1  sp|Q6A9Q2|MURG_PROAC  UDP-N-acetylglucosamine--N-acetylmuram
+    8.6e-34  121.2   0.3    6.8e-33  118.3   0.0    2.4  1  sp|B3WDY2|MURG_LACCB  UDP-N-acetylglucosamine--N-acetylmuram
+    8.6e-34  121.2   0.3    6.8e-33  118.3   0.0    2.4  1  sp|Q039R7|MURG_LACC3  UDP-N-acetylglucosamine--N-acetylmuram
+      9e-34  121.2   0.2    5.8e-33  118.5   0.0    2.3  1  sp|A4J2B1|MURG_DESRM  UDP-N-acetylglucosamine--N-acetylmuram
+    9.5e-34  121.1   0.1    2.3e-33  119.8   0.0    1.7  1  sp|Q47VQ9|MURG_COLP3  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-33  120.9   0.0    2.1e-33  120.0   0.0    1.5  1  sp|B2A2H2|MURG_NATTJ  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-33  120.3   1.6    2.3e-33  119.8   0.3    1.9  1  sp|Q6NGC8|MURG_CORDI  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-33  120.2   1.5    2.9e-33  119.5   0.3    1.8  1  sp|B4RWX9|MURG_ALTMD  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-33  120.2   0.3    3.7e-33  119.2   0.1    1.6  1  sp|Q9JSZ7|MURG_NEIMA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-33  120.1   0.6    5.2e-32  115.5   0.2    2.5  2  sp|B0KFS6|MURG_PSEPG  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-33  119.7   0.8      5e-33  118.7   0.2    1.8  1  sp|A4XQS4|MURG_PSEMY  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-33  119.7   1.1    5.1e-33  118.7   0.4    1.7  1  sp|Q48EF8|MURG_PSE14  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-33  119.7   0.0    2.6e-33  119.7   0.0    1.7  1  sp|Q8R9G6|MURG_THETN  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-33  119.6   0.2    4.7e-32  115.6   0.2    2.3  1  sp|A5W8Q0|MURG_PSEP1  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-33  119.5   1.3    3.1e-32  116.2   0.4    2.4  1  sp|Q1I5B8|MURG_PSEE4  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-33  119.5   0.9    6.5e-33  118.4   0.3    1.8  1  sp|Q87WY5|MURG_PSESM  UDP-N-acetylglucosamine--N-acetylmuram
+    3.4e-33  119.3   0.0    5.8e-33  118.5   0.0    1.4  1  sp|C3L230|MURG_CLOB6  UDP-N-acetylglucosamine--N-acetylmuram
+    3.5e-33  119.3   0.5    6.5e-33  118.4   0.1    1.7  1  sp|A1WC06|MURG_ACISJ  UDP-N-acetylglucosamine--N-acetylmuram
+    3.5e-33  119.3   0.5    6.5e-33  118.4   0.1    1.7  1  sp|B9MFR2|MURG_DIAST  UDP-N-acetylglucosamine--N-acetylmuram
+    3.6e-33  119.2   3.2    3.6e-33  119.2   2.2    2.3  1  sp|B8ZQQ0|MURG_MYCLB  UDP-N-acetylglucosamine--N-acetylmuram
+    3.6e-33  119.2   3.2    3.6e-33  119.2   2.2    2.3  1  sp|O69552|MURG_MYCLE  UDP-N-acetylglucosamine--N-acetylmuram
+    3.7e-33  119.2   0.0    2.1e-32  116.8   0.0    1.9  1  sp|Q893R7|MURG_CLOTE  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-33  119.1   0.0    6.5e-33  118.4   0.0    1.4  1  sp|A7GGX9|MURG_CLOBL  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-33  119.1   0.0    6.5e-33  118.4   0.0    1.4  1  sp|B1IKH3|MURG_CLOBK  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-33  119.1   0.0    6.5e-33  118.4   0.0    1.4  1  sp|C1FUF9|MURG_CLOBJ  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-33  119.1   0.0    6.5e-33  118.4   0.0    1.4  1  sp|A5I5J5|MURG_CLOBH  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-33  119.1   0.0    6.5e-33  118.4   0.0    1.4  1  sp|A7FX11|MURG_CLOB1  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-33  119.1   1.1    7.4e-33  118.2   0.4    1.7  1  sp|Q4ZNZ0|MURG_PSEU2  UDP-N-acetylglucosamine--N-acetylmuram
+    4.3e-33  119.0   0.0    4.3e-32  115.7   0.0    2.2  1  sp|A4XI04|MURG_CALS8  UDP-N-acetylglucosamine--N-acetylmuram
+    4.6e-33  118.9   1.2    1.1e-32  117.6   0.8    1.7  1  sp|A0R016|MURG_MYCS2  UDP-N-acetylglucosamine--N-acetylmuram
+    5.1e-33  118.7   0.0      2e-32  116.8   0.0    2.0  1  sp|A8YUN9|MURG_LACH4  UDP-N-acetylglucosamine--N-acetylmuram
+    5.6e-33  118.6   0.6    5.6e-33  118.6   0.4    2.6  1  sp|A1SL80|MURG_NOCSJ  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-33  118.5   1.0    7.1e-32  115.0   0.3    2.4  1  sp|Q88N76|MURG_PSEPK  UDP-N-acetylglucosamine--N-acetylmuram
+    8.3e-33  118.0   0.0    1.4e-32  117.3   0.0    1.4  1  sp|B1KYH7|MURG_CLOBM  UDP-N-acetylglucosamine--N-acetylmuram
+    8.7e-33  118.0   2.7    1.5e-32  117.2   0.1    2.5  1  sp|Q24TE6|MURG_DESHY  UDP-N-acetylglucosamine--N-acetylmuram
+      9e-33  117.9   1.5    1.8e-32  117.0   0.5    1.9  1  sp|Q3K744|MURG_PSEPF  UDP-N-acetylglucosamine--N-acetylmuram
+    9.4e-33  117.9   0.7    1.7e-31  113.8   0.4    2.4  1  sp|B1J3L2|MURG_PSEPW  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-32  117.8   0.1    1.1e-31  114.4   0.0    2.4  1  sp|B0K3H0|MURG_THEPX  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-32  117.8   0.1    1.1e-31  114.4   0.0    2.4  1  sp|B0K8K7|MURG_THEP3  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-32  117.7   0.0    1.5e-31  114.0   0.0    2.2  1  sp|A3DE27|MURG_CLOTH  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-32  117.3   3.8    2.3e-32  116.6   1.1    2.3  1  sp|A1TAW8|MURG_MYCVP  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-32  117.1   1.3    7.6e-32  114.9   0.2    2.5  1  sp|B8FT56|MURG_DESHD  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-32  116.6   1.2    2.3e-32  116.6   0.8    1.7  1  sp|Q9RWP0|MURG_DEIRA  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-32  116.5   1.3    1.8e-31  113.7   0.3    2.2  1  sp|B2I1J5|MURG_ACIBC  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-32  116.5   1.3    1.8e-31  113.7   0.3    2.2  1  sp|B0V9F5|MURG_ACIBY  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-32  116.5   1.3    1.8e-31  113.7   0.3    2.2  1  sp|B7GV73|MURG_ACIB3  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-32  116.5   1.3    1.8e-31  113.7   0.3    2.2  1  sp|B7ICE5|MURG_ACIB5  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-32  116.5   0.1    2.5e-32  116.5   0.0    2.0  1  sp|A5D145|MURG_PELTS  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-32  116.3   1.2    1.8e-31  113.7   0.3    2.2  1  sp|A3M9Y1|MURG_ACIBT  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-32  116.3   0.0    5.9e-32  115.3   0.0    1.6  1  sp|A9KK83|MURG_CLOPH  UDP-N-acetylglucosamine--N-acetylmuram
+    3.6e-32  116.0   0.7    7.1e-32  115.0   0.5    1.5  1  sp|C3KCT0|MURG_PSEFS  UDP-N-acetylglucosamine--N-acetylmuram
+    4.5e-32  115.7   0.0    9.5e-32  114.6   0.0    1.6  1  sp|Q03EY2|MURG_PEDPA  UDP-N-acetylglucosamine--N-acetylmuram
+    4.8e-32  115.6   1.5    1.3e-31  114.2   1.0    1.7  1  sp|A0QF52|MURG_MYCA1  UDP-N-acetylglucosamine--N-acetylmuram
+    5.3e-32  115.4   0.0    2.1e-30  110.2   0.0    2.5  2  sp|Q04B72|MURG_LACDB  UDP-N-acetylglucosamine--N-acetylmuram
+    5.3e-32  115.4   0.0    2.1e-30  110.2   0.0    2.5  2  sp|Q1GAT5|MURG_LACDA  UDP-N-acetylglucosamine--N-acetylmuram
+    6.7e-32  115.1   2.3    9.1e-32  114.7   0.6    2.0  1  sp|Q4K6J3|MURG_PSEF5  UDP-N-acetylglucosamine--N-acetylmuram
+    7.5e-32  114.9   1.2    5.8e-31  112.1   0.3    2.2  1  sp|B0VNZ9|MURG_ACIBS  UDP-N-acetylglucosamine--N-acetylmuram
+    8.8e-32  114.7   0.0      5e-31  112.3   0.0    2.1  1  sp|Q5FKV2|MURG_LACAC  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-31  114.5   2.0    7.3e-31  111.7   0.3    2.4  1  sp|A0KPX2|MURG_AERHH  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-31  114.3   4.6    1.4e-31  114.1   2.4    1.7  1  sp|A1WYU3|MURG_HALHL  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-31  114.3   2.2    3.1e-31  113.0   1.5    1.7  1  sp|Q73YQ8|MURG_MYCPA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-31  114.3   1.0    2.2e-31  113.4   0.3    1.7  1  sp|B1MXW0|MURG_LEUCK  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-31  114.2   0.4    3.4e-31  112.8   0.3    1.7  1  sp|Q604V7|MURG_METCA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-31  114.2   0.0    2.3e-31  113.3   0.0    1.4  1  sp|B2V1X5|MURG_CLOBA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-31  113.8   0.2    3.4e-31  112.8   0.1    1.5  1  sp|A1U3F8|MURG_MARAV  UDP-N-acetylglucosamine--N-acetylmuram
+    2.1e-31  113.5   0.0    2.5e-30  110.0   0.0    2.2  1  sp|A8MH36|MURG_ALKOO  UDP-N-acetylglucosamine--N-acetylmuram
+    2.1e-31  113.5   0.0    5.3e-31  112.2   0.0    1.6  1  sp|B2TLE0|MURG_CLOBB  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-31  113.2   2.0    1.5e-30  110.7   0.3    2.4  1  sp|A4SI56|MURG_AERS4  UDP-N-acetylglucosamine--N-acetylmuram
+      3e-31  113.0   0.0    1.3e-30  111.0   0.0    1.9  1  sp|C4Z1B5|MURG_EUBE2  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-31  113.0   0.3    6.9e-31  111.8   0.2    1.6  1  sp|C1DQ99|MURG_AZOVD  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-31  112.9   1.0    1.8e-30  110.5   0.3    2.1  1  sp|Q6F703|MURG_ACIAD  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-31  112.9   0.0    5.3e-31  112.2   0.0    1.4  1  sp|B1YIT7|MURG_EXIS2  UDP-N-acetylglucosamine--N-acetylmuram
+      5e-31  112.3   2.6    1.2e-30  111.1   1.8    1.6  1  sp|C1CW40|MURG_DEIDV  UDP-N-acetylglucosamine--N-acetylmuram
+    5.1e-31  112.2   0.9    1.9e-30  110.4   0.3    1.9  1  sp|Q47QW9|MURG_THEFY  UDP-N-acetylglucosamine--N-acetylmuram
+    5.3e-31  112.2   0.0      9e-31  111.4   0.0    1.4  1  sp|A0Q182|MURG_CLONN  UDP-N-acetylglucosamine--N-acetylmuram
+    5.3e-31  112.2   1.4    5.3e-31  112.2   0.9    2.0  1  sp|A1KKJ6|MURG_MYCBP  UDP-N-acetylglucosamine--N-acetylmuram
+    5.3e-31  112.2   1.4    5.3e-31  112.2   0.9    2.0  1  sp|C1AQ69|MURG_MYCBT  UDP-N-acetylglucosamine--N-acetylmuram
+    5.3e-31  112.2   1.4    5.3e-31  112.2   0.9    2.0  1  sp|Q7VEP8|MURG_MYCBO  UDP-N-acetylglucosamine--N-acetylmuram
+    6.3e-31  111.9   0.0      1e-30  111.3   0.0    1.3  1  sp|B0S0Z5|MURG_FINM2  UDP-N-acetylglucosamine--N-acetylmuram
+    7.7e-31  111.7   0.2    4.9e-30  109.0   0.2    2.1  1  sp|B7UZJ0|MURG_PSEA8  UDP-N-acetylglucosamine--N-acetylmuram
+    7.7e-31  111.7   0.2    4.9e-30  109.0   0.2    2.1  1  sp|Q02H28|MURG_PSEAB  UDP-N-acetylglucosamine--N-acetylmuram
+    7.7e-31  111.7   0.2    4.9e-30  109.0   0.2    2.1  1  sp|Q9HW01|MURG_PSEAE  UDP-N-acetylglucosamine--N-acetylmuram
+    7.8e-31  111.6   0.8    7.8e-31  111.6   0.5    2.2  1  sp|A0PTI7|MURG_MYCUA  UDP-N-acetylglucosamine--N-acetylmuram
+    8.2e-31  111.6   0.2    4.9e-30  109.0   0.2    2.1  1  sp|A6VB85|MURG_PSEA7  UDP-N-acetylglucosamine--N-acetylmuram
+    8.5e-31  111.5   0.1    1.5e-30  110.7   0.1    1.4  1  sp|A9KER3|MURG_COXBN  UDP-N-acetylglucosamine--N-acetylmuram
+    8.6e-31  111.5   0.1    1.5e-30  110.7   0.1    1.4  1  sp|A9NA44|MURG_COXBR  UDP-N-acetylglucosamine--N-acetylmuram
+    8.6e-31  111.5   0.1    1.5e-30  110.7   0.1    1.4  1  sp|B6J2Q3|MURG_COXB2  UDP-N-acetylglucosamine--N-acetylmuram
+    8.6e-31  111.5   0.1    1.5e-30  110.7   0.1    1.4  1  sp|B6J5K3|MURG_COXB1  UDP-N-acetylglucosamine--N-acetylmuram
+    8.6e-31  111.5   0.1    1.5e-30  110.7   0.1    1.4  1  sp|Q820X3|MURG_COXBU  UDP-N-acetylglucosamine--N-acetylmuram
+    9.1e-31  111.4   0.0    2.9e-30  109.8   0.0    1.9  1  sp|Q042P9|MURG_LACGA  UDP-N-acetylglucosamine--N-acetylmuram
+    9.6e-31  111.4   1.3    9.6e-31  111.4   0.9    2.1  1  sp|B2HGR6|MURG_MYCMM  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-30  111.2   0.8    2.7e-30  109.9   0.2    1.8  1  sp|Q0VS02|MURG_ALCBS  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-30  111.2   2.3    1.1e-30  111.2   1.6    1.8  1  sp|Q0RNP1|MURG_FRAAA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-30  111.0   2.9    2.1e-30  110.3   0.5    2.3  1  sp|Q2RK79|MURG_MOOTA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-30  111.0   2.6    1.3e-30  111.0   1.8    1.7  1  sp|Q1IXV9|MURG_DEIGD  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-30  111.0   0.0    5.5e-30  108.9   0.0    2.0  1  sp|Q74JY4|MURG_LACJO  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-30  110.7   0.0    3.9e-30  109.4   0.0    1.7  1  sp|A5MZ55|MURG_CLOK5  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-30  110.5   0.6    3.7e-30  109.5   0.4    1.5  1  sp|A1TKD1|MURG_ACIAC  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-30  110.4   0.0    4.3e-30  109.3   0.0    1.6  1  sp|B7J0L2|MURG_BORBZ  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-30  110.4   0.0    4.3e-30  109.3   0.0    1.6  1  sp|O51708|MURG_BORBU  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-30  110.3   1.0    4.2e-30  109.3   0.7    1.6  1  sp|Q15Q17|MURG_PSEA6  UDP-N-acetylglucosamine--N-acetylmuram
+    2.1e-30  110.3   0.0    5.7e-30  108.9   0.0    1.8  1  sp|A7A179|ATG26_YEAS7 Sterol 3-beta-glucosyltransferase OS=S
+    2.3e-30  110.1   0.5    4.8e-30  109.1   0.4    1.6  1  sp|Q1D0T0|MURG_MYXXD  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-30  110.0   1.0    2.5e-30  110.0   0.7    1.6  1  sp|Q1QVG7|MURG_CHRSD  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-30  110.0   0.5    2.6e-30  110.0   0.3    2.1  1  sp|A4VIH8|MURG_PSEU5  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-30  109.9   0.0    8.3e-30  108.3   0.0    1.8  1  sp|Q38XM8|MURG_LACSS  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-30  109.6   0.4    8.3e-30  108.3   0.1    1.8  1  sp|A1SU19|MURG_PSYIN  UDP-N-acetylglucosamine--N-acetylmuram
+    3.4e-30  109.6   0.0    7.1e-30  108.5   0.0    1.6  1  sp|Q31I59|MURG_THICR  UDP-N-acetylglucosamine--N-acetylmuram
+    3.4e-30  109.6   0.0    8.7e-30  108.3   0.0    1.7  1  sp|Q04ET0|MURG_OENOB  UDP-N-acetylglucosamine--N-acetylmuram
+    3.4e-30  109.6   0.9    3.4e-30  109.6   0.6    1.8  1  sp|Q2KVG0|MURG_BORA1  UDP-N-acetylglucosamine--N-acetylmuram
+    3.6e-30  109.5   0.3    7.1e-30  108.5   0.2    1.5  1  sp|Q5R0M1|MURG_IDILO  UDP-N-acetylglucosamine--N-acetylmuram
+    3.7e-30  109.5   0.1      1e-29  108.1   0.0    1.7  1  sp|Q5WAE4|MURG_BACSK  UDP-N-acetylglucosamine--N-acetylmuram
+    3.7e-30  109.5   3.4    1.3e-29  107.6   1.0    2.3  1  sp|Q2JD50|MURG_FRASC  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-30  109.4   1.3    8.8e-30  108.2   0.9    1.6  1  sp|B5ELC3|MURG_ACIF5  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-30  109.4   1.3    8.8e-30  108.2   0.9    1.6  1  sp|B7J3V2|MURG_ACIF2  UDP-N-acetylglucosamine--N-acetylmuram
+    3.9e-30  109.4   0.0    7.7e-30  108.4   0.0    1.5  1  sp|Q0SM88|MURG_BORAP  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-30  109.3   0.3    1.1e-29  107.9   0.2    1.7  1  sp|Q4FQV9|MURG_PSYA2  UDP-N-acetylglucosamine--N-acetylmuram
+    4.5e-30  109.2   0.0    2.9e-29  106.6   0.0    2.2  1  sp|Q730T5|MURG2_BACC1 UDP-N-acetylglucosamine--N-acetylmuram
+    4.8e-30  109.1   0.0    2.6e-29  106.7   0.0    2.1  1  sp|Q1LSW5|MURG_BAUCH  UDP-N-acetylglucosamine--N-acetylmuram
+    5.4e-30  108.9   0.2    9.8e-30  108.1   0.2    1.4  1  sp|Q9WY74|MURG_THEMA  UDP-N-acetylglucosamine--N-acetylmuram
+    5.5e-30  108.9   0.2    9.8e-30  108.1   0.1    1.4  1  sp|B1L9S1|MURG_THESQ  UDP-N-acetylglucosamine--N-acetylmuram
+    5.5e-30  108.9   0.2    9.8e-30  108.1   0.2    1.4  1  sp|A5IKI9|MURG_THEP1  UDP-N-acetylglucosamine--N-acetylmuram
+    5.9e-30  108.8   1.4    1.4e-29  107.5   0.6    1.9  1  sp|A4FLW0|MURG_SACEN  UDP-N-acetylglucosamine--N-acetylmuram
+    6.6e-30  108.6   1.4    1.3e-29  107.7   0.9    1.5  1  sp|Q9RNM6|MURG_ZYMMO  UDP-N-acetylglucosamine--N-acetylmuram
+    7.1e-30  108.5   0.0    1.9e-29  107.1   0.0    1.8  1  sp|Q06321|ATG26_YEAST Sterol 3-beta-glucosyltransferase OS=S
+    7.2e-30  108.5   3.0    1.2e-29  107.8   2.1    1.4  1  sp|Q9PF81|MURG_XYLFA  UDP-N-acetylglucosamine--N-acetylmuram
+    7.9e-30  108.4   1.5    7.9e-30  108.4   1.0    1.9  1  sp|Q5GW41|MURG_XANOR  UDP-N-acetylglucosamine--N-acetylmuram
+    8.9e-30  108.2   0.2    1.4e-29  107.6   0.1    1.3  1  sp|B2S3B6|MURG_TREPS  UDP-N-acetylglucosamine--N-acetylmuram
+    8.9e-30  108.2   0.2    1.4e-29  107.6   0.1    1.3  1  sp|O83535|MURG_TREPA  UDP-N-acetylglucosamine--N-acetylmuram
+    9.2e-30  108.2   0.0    1.7e-29  107.3   0.0    1.5  1  sp|Q0AJE1|MURG_NITEC  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-29  108.1   1.1      1e-29  108.1   0.8    1.8  1  sp|B3PCM0|MURG_CELJU  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-29  107.8   0.1      2e-29  107.0   0.1    1.4  1  sp|A5G8K0|MURG_GEOUR  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-29  107.8   1.4    1.2e-29  107.8   1.0    2.1  1  sp|A5U4I0|MURG_MYCTA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-29  107.8   1.4    1.2e-29  107.8   1.0    2.1  1  sp|O06224|MURG_MYCTU  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-29  107.7   1.0    1.3e-29  107.7   0.7    2.2  1  sp|Q4JW95|MURG_CORJK  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-29  107.6   0.0    3.3e-29  106.4   0.0    1.6  1  sp|Q97GY4|MURG_CLOAB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-29  107.4   0.0    2.5e-29  106.8   0.0    1.4  1  sp|Q9Z702|MURG_CHLPN  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-29  107.4   0.4    2.8e-29  106.6   0.3    1.4  1  sp|Q1Q944|MURG_PSYCK  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-29  107.3   0.5    5.5e-29  105.6   0.3    1.9  1  sp|C0RE70|MURG_BRUMB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-29  107.3   0.5    5.5e-29  105.6   0.3    1.9  1  sp|Q8YI66|MURG_BRUME  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-29  107.3   1.3    3.8e-29  106.2   0.9    1.6  1  sp|Q3BXF2|MURG_XANC5  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-29  107.2   0.5    5.5e-29  105.6   0.3    1.8  1  sp|B2S6Q4|MURG_BRUA1  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-29  107.2   0.5    5.5e-29  105.6   0.3    1.8  1  sp|Q2YLY5|MURG_BRUA2  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-29  107.2   0.5    5.5e-29  105.6   0.3    1.8  1  sp|Q57C78|MURG_BRUAB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-29  107.1   0.0    4.1e-29  106.1   0.0    1.6  1  sp|Q660A8|MURG_BORGA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-29  107.1   0.0    3.8e-29  106.2   0.0    1.5  1  sp|B8I6H3|MURG_CLOCE  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-29  107.1   0.5    5.5e-29  105.6   0.3    1.8  1  sp|A5VRH7|MURG_BRUO2  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-29  107.1   0.5    5.5e-29  105.6   0.3    1.8  1  sp|B0CHM0|MURG_BRUSI  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-29  107.1   1.4      4e-29  106.1   0.7    1.8  1  sp|A0JV94|MURG_ARTS2  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-29  107.1   0.0    4.1e-29  106.1   0.0    1.5  1  sp|A6TS61|MURG_ALKMQ  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-29  107.1   0.0      4e-29  106.1   0.0    1.5  1  sp|C5D4C2|MURG_GEOSW  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-29  107.1   0.5    5.5e-29  105.6   0.3    1.7  1  sp|A9M690|MURG_BRUC2  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-29  107.0   1.6    6.1e-29  105.5   1.1    1.8  1  sp|Q8PPA8|MURG_XANAC  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-29  107.0   0.5    5.5e-29  105.6   0.3    1.7  1  sp|Q8CY39|MURG_BRUSU  UDP-N-acetylglucosamine--N-acetylmuram
+    2.2e-29  106.9   1.6      5e-29  105.8   1.1    1.6  1  sp|A1WRL1|MURG_VEREI  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-29  106.7   0.0    1.3e-28  104.4   0.0    2.1  1  sp|Q812T8|MURG2_BACCR UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-29  106.6   3.7    4.8e-29  105.9   2.6    1.4  1  sp|B0U4Z7|MURG_XYLFM  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-29  106.5   0.0    5.3e-29  105.7   0.0    1.4  1  sp|A4IJS4|MURG_GEOTN  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-29  106.4   1.4    3.2e-29  106.4   0.9    1.9  1  sp|Q2NZB8|MURG_XANOM  UDP-N-acetylglucosamine--N-acetylmuram
+    4.6e-29  105.9   0.0    7.6e-29  105.2   0.0    1.4  1  sp|A5FIY3|MURG_FLAJ1  UDP-N-acetylglucosamine--N-acetylmuram
+      6e-29  105.5   0.6    1.6e-28  104.2   0.4    1.7  1  sp|Q39JX0|MURG_BURS3  UDP-N-acetylglucosamine--N-acetylmuram
+    6.9e-29  105.3   3.5    9.4e-29  104.9   1.1    2.1  1  sp|C1A0X5|MURG_RHOE4  UDP-N-acetylglucosamine--N-acetylmuram
+    7.3e-29  105.3   0.3    1.8e-28  103.9   0.1    1.8  1  sp|Q748D6|MURG_GEOSL  UDP-N-acetylglucosamine--N-acetylmuram
+    8.2e-29  105.1   0.1    1.3e-28  104.4   0.1    1.4  1  sp|Q820Y4|MURG_TROWT  UDP-N-acetylglucosamine--N-acetylmuram
+    8.2e-29  105.1   0.1    1.3e-28  104.4   0.1    1.4  1  sp|Q83HK1|MURG_TROW8  UDP-N-acetylglucosamine--N-acetylmuram
+    8.3e-29  105.1   3.4    1.3e-28  104.5   0.9    2.2  1  sp|A4QFM3|MURG_CORGB  UDP-N-acetylglucosamine--N-acetylmuram
+    8.5e-29  105.0   0.5    1.8e-28  104.0   0.1    1.7  1  sp|Q39YL9|MURG_GEOMG  UDP-N-acetylglucosamine--N-acetylmuram
+    8.5e-29  105.0   0.0    1.3e-28  104.5   0.0    1.3  1  sp|A1R0I9|MURG_BORT9  UDP-N-acetylglucosamine--N-acetylmuram
+    8.7e-29  105.0   0.0      2e-28  103.9   0.0    1.6  1  sp|Q3AAE6|MURG_CARHZ  UDP-N-acetylglucosamine--N-acetylmuram
+    9.1e-29  104.9   3.5    1.3e-28  104.5   0.9    2.2  1  sp|Q8NNN5|MURG_CORGL  UDP-N-acetylglucosamine--N-acetylmuram
+    9.1e-29  104.9   0.0      2e-28  103.8   0.0    1.6  1  sp|Q0TNP7|MURG_CLOP1  UDP-N-acetylglucosamine--N-acetylmuram
+    9.1e-29  104.9   0.0      2e-28  103.8   0.0    1.6  1  sp|Q8XIQ1|MURG_CLOPE  UDP-N-acetylglucosamine--N-acetylmuram
+    9.4e-29  104.9   0.0      2e-28  103.8   0.0    1.6  1  sp|Q0SRB4|MURG_CLOPS  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-28  104.8   2.6    1.9e-28  103.9   1.8    1.5  1  sp|Q5YYX9|MURG_NOCFA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-28  104.7   2.7    1.5e-28  104.3   0.4    2.0  1  sp|A7HH67|MURG_ANADF  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-28  104.6   0.0    2.6e-28  103.5   0.0    1.6  1  sp|Q82VS3|MURG_NITEU  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-28  104.6   3.5    1.3e-28  104.4   1.4    1.9  1  sp|B0RVA5|MURG_XANCB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-28  104.6   0.8    2.9e-28  103.3   0.5    1.7  1  sp|Q2SZI3|MURG_BURTA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-28  104.5   1.3    1.8e-28  104.0   0.3    1.7  1  sp|Q11GS5|MURG_MESSB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-28  104.5   3.6    1.3e-28  104.4   1.4    1.9  1  sp|Q4UQX0|MURG_XANC8  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-28  104.5   3.6    1.3e-28  104.4   1.4    1.9  1  sp|Q8PCK0|MURG_XANCP  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-28  104.4   0.8    3.4e-28  103.1   0.5    1.7  1  sp|A3NZL5|MURG_BURP0  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-28  104.3   2.8    1.7e-28  104.1   0.7    1.9  1  sp|Q98KB3|MURG_RHILO  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-28  104.2   1.6    3.5e-28  103.1   1.1    1.6  1  sp|Q0A6K2|MURG_ALHEH  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-28  104.2   0.0    3.4e-28  103.1   0.0    1.6  1  sp|A5IGA6|MURG_LEGPC  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-28  104.2   0.0    2.6e-28  103.5   0.0    1.4  1  sp|Q5L3H6|MURG_GEOKA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-28  104.1   2.6    2.9e-28  103.3   0.9    2.1  1  sp|A0LTM3|MURG_ACIC1  UDP-N-acetylglucosamine--N-acetylmuram
+    2.1e-28  103.7   0.0    4.3e-28  102.8   0.0    1.5  1  sp|Q3A2G6|MURG_PELCD  UDP-N-acetylglucosamine--N-acetylmuram
+    2.2e-28  103.7   0.2    5.5e-27   99.2   0.0    2.6  1  sp|Q0AYQ8|MURG_SYNWW  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-28  103.5   0.4    7.6e-28  102.0   0.1    1.9  1  sp|Q1LIM6|MURG_RALME  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-28  103.5   2.0    2.1e-27  100.5   0.5    2.2  1  sp|Q92NL9|MURG_RHIME  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-28  103.4   0.7    2.2e-27  100.4   0.3    2.1  1  sp|Q72JP9|MURG_THET2  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-28  103.4   1.3    2.8e-28  103.4   0.9    2.3  1  sp|A1R5F8|MURG_ARTAT  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-28  103.3   3.7    4.9e-28  102.6   2.6    1.4  1  sp|Q87AF9|MURG_XYLFT  UDP-N-acetylglucosamine--N-acetylmuram
+      3e-28  103.3   3.7    4.9e-28  102.6   2.6    1.4  1  sp|B2I9B3|MURG_XYLF2  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-28  103.1   1.4    5.6e-28  102.4   0.3    1.9  1  sp|A6WZQ6|MURG_OCHA4  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-28  103.1   0.7    8.6e-28  101.8   0.5    1.7  1  sp|A1V0R8|MURG_BURMS  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-28  103.1   0.7    8.6e-28  101.8   0.5    1.7  1  sp|A2S5U5|MURG_BURM9  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-28  103.1   0.7    8.6e-28  101.8   0.5    1.7  1  sp|A3MR63|MURG_BURM7  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-28  103.1   0.7    8.6e-28  101.8   0.5    1.7  1  sp|Q62GS7|MURG_BURMA  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-28  103.1   0.7    8.6e-28  101.8   0.5    1.7  1  sp|Q63QJ7|MURG_BURPS  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-28  103.1   0.7    8.6e-28  101.8   0.5    1.7  1  sp|A3NDW4|MURG_BURP6  UDP-N-acetylglucosamine--N-acetylmuram
+    3.9e-28  102.9   0.4    8.7e-28  101.8   0.3    1.6  1  sp|Q3J789|MURG_NITOC  UDP-N-acetylglucosamine--N-acetylmuram
+    3.9e-28  102.9   0.0      6e-28  102.3   0.0    1.3  1  sp|Q8K9T4|MURG_BUCAP  UDP-N-acetylglucosamine--N-acetylmuram
+      4e-28  102.9   0.4    7.8e-28  101.9   0.0    1.7  1  sp|B9M172|MURG_GEOSF  UDP-N-acetylglucosamine--N-acetylmuram
+      4e-28  102.9   0.4    1.1e-27  101.5   0.0    1.9  1  sp|B5EBQ1|MURG_GEOBB  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-28  102.8   0.9    1.1e-27  101.5   0.6    1.7  1  sp|Q3JND8|MURG_BURP1  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-28  102.8   1.1    8.4e-28  101.8   0.3    1.8  1  sp|Q1IKH0|MURG_ACIBL  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-28  102.8   0.1    1.4e-27  101.1   0.0    1.9  1  sp|P74657|MURG_SYNY3  UDP-N-acetylglucosamine--N-acetylmuram
+    4.4e-28  102.7   0.5    9.7e-28  101.6   0.4    1.6  1  sp|B1YSS4|MURG_BURA4  UDP-N-acetylglucosamine--N-acetylmuram
+    4.4e-28  102.7   0.5    9.7e-28  101.6   0.4    1.6  1  sp|Q0BIK1|MURG_BURCM  UDP-N-acetylglucosamine--N-acetylmuram
+    5.7e-28  102.4   0.0    2.2e-27  100.5   0.0    1.9  1  sp|Q6HDR3|MURG2_BACHK UDP-N-acetylglucosamine--N-acetylmuram
+    5.7e-28  102.4   0.0    2.2e-27  100.5   0.0    1.9  1  sp|Q81JE6|MURG2_BACAN UDP-N-acetylglucosamine--N-acetylmuram
+    6.2e-28  102.2   0.9    1.3e-27  101.2   0.2    1.8  1  sp|Q0K6M4|MURG_RALEH  UDP-N-acetylglucosamine--N-acetylmuram
+    6.4e-28  102.2   0.0    1.5e-27  101.0   0.0    1.6  1  sp|Q5WY98|MURG_LEGPL  UDP-N-acetylglucosamine--N-acetylmuram
+    6.5e-28  102.2   0.0    2.2e-27  100.5   0.0    1.8  1  sp|A0RIN0|MURG3_BACAH UDP-N-acetylglucosamine--N-acetylmuram
+    6.7e-28  102.1   0.5    1.7e-27  100.9   0.4    1.7  1  sp|Q7W4B4|MURG_BORPA  UDP-N-acetylglucosamine--N-acetylmuram
+    6.7e-28  102.1   0.0    1.5e-27  101.0   0.0    1.6  1  sp|Q5X6U5|MURG_LEGPA  UDP-N-acetylglucosamine--N-acetylmuram
+    6.7e-28  102.1   0.0    1.5e-27  101.0   0.0    1.6  1  sp|Q5ZXC4|MURG_LEGPH  UDP-N-acetylglucosamine--N-acetylmuram
+    6.9e-28  102.1   0.0    1.1e-27  101.4   0.0    1.4  1  sp|A6M1F0|MURG_CLOB8  UDP-N-acetylglucosamine--N-acetylmuram
+    7.7e-28  101.9   0.0    1.1e-27  101.4   0.0    1.2  1  sp|B8D7B9|MURG_BUCAT  UDP-N-acetylglucosamine--N-acetylmuram
+    7.7e-28  101.9   0.0    1.1e-27  101.4   0.0    1.2  1  sp|P57311|MURG_BUCAI  UDP-N-acetylglucosamine--N-acetylmuram
+    8.3e-28  101.8   0.5      2e-27  100.6   0.4    1.7  1  sp|Q7VUQ3|MURG_BORPE  UDP-N-acetylglucosamine--N-acetylmuram
+    8.4e-28  101.8   0.5      2e-27  100.6   0.4    1.7  1  sp|Q7WFS2|MURG_BORBR  UDP-N-acetylglucosamine--N-acetylmuram
+    8.7e-28  101.8   1.5    3.6e-27   99.8   0.3    2.1  1  sp|B2SYX6|MURG_BURPP  UDP-N-acetylglucosamine--N-acetylmuram
+    9.7e-28  101.6   0.0    1.6e-27  100.9   0.0    1.4  1  sp|B0B8Y7|MURG_CHLT2  UDP-N-acetylglucosamine--N-acetylmuram
+    9.7e-28  101.6   0.0    1.6e-27  100.9   0.0    1.4  1  sp|B0BAL6|MURG_CHLTB  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-27  101.5   0.0    1.5e-27  101.0   0.0    1.2  1  sp|B8D914|MURG_BUCA5  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-27  101.5   0.4    2.4e-27  100.4   0.3    1.6  1  sp|Q47AA4|MURG_DECAR  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-27  101.4   0.5    2.3e-27  100.4   0.3    1.5  1  sp|A4JB94|MURG_BURVG  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-27  101.2   0.1    2.2e-27  100.4   0.1    1.4  1  sp|Q2Y638|MURG_NITMU  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-27  101.0   1.1    2.6e-27  100.2   0.2    1.8  1  sp|B2JHG0|MURG_BURP8  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-27  101.0   0.0    2.6e-27  100.2   0.0    1.4  1  sp|O84766|MURG_CHLTR  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-27  101.0   0.0    2.6e-27  100.2   0.0    1.4  1  sp|Q3KKT1|MURG_CHLTA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-27  100.8   0.1    3.5e-27   99.8   0.0    1.5  1  sp|A1AU61|MURG_PELPD  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-27  100.8   0.0    3.6e-27   99.8   0.0    1.5  1  sp|Q2LR48|MURG_SYNAS  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-27  100.7   1.6    3.2e-27   99.9   0.6    1.8  1  sp|Q2G995|MURG_NOVAD  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-27  100.7   0.9    4.2e-27   99.5   0.3    1.8  1  sp|A5EY03|MURG_DICNV  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-27  100.6   5.4      2e-27  100.6   0.8    2.4  1  sp|Q8FNU0|MURG_COREF  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-27  100.6   0.9    4.5e-27   99.4   0.6    1.6  1  sp|A9AI96|MURG_BURM1  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-27  100.4   0.2    3.9e-27   99.7   0.1    1.4  1  sp|Q21SW9|MURG_RHOFD  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-27  100.2   0.0    4.9e-27   99.3   0.0    1.5  1  sp|B5YFT4|MURG_THEYD  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-27  100.2   0.0      7e-27   98.8   0.0    1.8  1  sp|A7KAK6|ATG26_PICAN Sterol 3-beta-glucosyltransferase OS=P
+    3.1e-27  100.0   0.7    6.9e-27   98.9   0.1    1.8  1  sp|Q46WZ4|MURG_RALEJ  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-27  100.0   1.6    1.1e-26   98.1   0.3    2.1  1  sp|Q13TZ2|MURG_BURXL  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-27   99.9   0.2    1.1e-26   98.2   0.0    2.0  1  sp|C6DZK6|MURG_GEOSM  UDP-N-acetylglucosamine--N-acetylmuram
+    4.4e-27   99.5   0.0    7.7e-27   98.7   0.0    1.4  1  sp|A8GVJ7|MURG_RICB8  UDP-N-acetylglucosamine--N-acetylmuram
+    4.4e-27   99.5   0.0    7.7e-27   98.7   0.0    1.4  1  sp|Q1RI55|MURG_RICBR  UDP-N-acetylglucosamine--N-acetylmuram
+    5.2e-27   99.2   1.7    5.1e-26   96.0   0.7    2.2  1  sp|B5ZWJ4|MURG_RHILW  UDP-N-acetylglucosamine--N-acetylmuram
+    5.4e-27   99.2   0.0      1e-26   98.3   0.0    1.5  1  sp|B0JFZ1|MURG_MICAN  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-27   99.1   0.2    1.3e-26   98.0   0.1    1.6  1  sp|Q31KS7|MURG_SYNE7  UDP-N-acetylglucosamine--N-acetylmuram
+      6e-27   99.1   0.2    1.3e-26   97.9   0.1    1.6  1  sp|Q5N140|MURG_SYNP6  UDP-N-acetylglucosamine--N-acetylmuram
+    6.4e-27   99.0   0.0    1.6e-26   97.6   0.0    1.7  1  sp|Q14I26|MURG_FRAT1  UDP-N-acetylglucosamine--N-acetylmuram
+    6.4e-27   99.0   0.0    1.6e-26   97.6   0.0    1.7  1  sp|Q5NGM4|MURG_FRATT  UDP-N-acetylglucosamine--N-acetylmuram
+    6.5e-27   98.9   0.0    1.5e-26   97.8   0.0    1.6  1  sp|Q493Q1|MURG_BLOPB  UDP-N-acetylglucosamine--N-acetylmuram
+    6.5e-27   98.9   0.0    1.1e-26   98.2   0.0    1.4  1  sp|Q92I58|MURG_RICCN  UDP-N-acetylglucosamine--N-acetylmuram
+    6.5e-27   98.9   0.0    1.1e-26   98.2   0.0    1.4  1  sp|C3PND5|MURG_RICAE  UDP-N-acetylglucosamine--N-acetylmuram
+    6.5e-27   98.9   0.0    1.1e-26   98.2   0.0    1.4  1  sp|C4K2A6|MURG_RICPU  UDP-N-acetylglucosamine--N-acetylmuram
+    6.6e-27   98.9   0.0      1e-26   98.3   0.0    1.3  1  sp|B2S1A8|MURG_BORHD  UDP-N-acetylglucosamine--N-acetylmuram
+    6.6e-27   98.9   0.0    1.1e-26   98.2   0.0    1.4  1  sp|A8GRZ6|MURG_RICRS  UDP-N-acetylglucosamine--N-acetylmuram
+    6.6e-27   98.9   0.0    1.1e-26   98.2   0.0    1.4  1  sp|B0BXF6|MURG_RICRO  UDP-N-acetylglucosamine--N-acetylmuram
+    6.7e-27   98.9   0.5    1.5e-26   97.8   0.4    1.6  1  sp|Q3SMH3|MURG_THIDA  UDP-N-acetylglucosamine--N-acetylmuram
+    6.7e-27   98.9   0.9    1.7e-26   97.6   0.7    1.7  1  sp|Q21MG9|MURG_SACD2  UDP-N-acetylglucosamine--N-acetylmuram
+    8.7e-27   98.5   0.0    6.8e-26   95.6   0.0    2.2  1  sp|B1IAM4|MURG_STRPI  UDP-N-acetylglucosamine--N-acetylmuram
+    8.7e-27   98.5   0.0    6.8e-26   95.6   0.0    2.2  1  sp|Q04LK0|MURG_STRP2  UDP-N-acetylglucosamine--N-acetylmuram
+    8.7e-27   98.5   0.0    6.8e-26   95.6   0.0    2.2  1  sp|Q8DQM1|MURG_STRR6  UDP-N-acetylglucosamine--N-acetylmuram
+    8.7e-27   98.5   0.0    6.8e-26   95.6   0.0    2.2  1  sp|B2IN77|MURG_STRPS  UDP-N-acetylglucosamine--N-acetylmuram
+    8.8e-27   98.5   0.0    6.8e-26   95.6   0.0    2.2  1  sp|C1CQG5|MURG_STRZT  UDP-N-acetylglucosamine--N-acetylmuram
+    8.9e-27   98.5   0.0    6.8e-26   95.6   0.0    2.2  1  sp|C1CD52|MURG_STRZJ  UDP-N-acetylglucosamine--N-acetylmuram
+      9e-27   98.5   0.0    2.4e-26   97.1   0.0    1.7  1  sp|Q634T3|MURG2_BACCZ UDP-N-acetylglucosamine--N-acetylmuram
+      9e-27   98.5   0.3    1.7e-26   97.5   0.2    1.5  1  sp|A1VST6|MURG_POLNA  UDP-N-acetylglucosamine--N-acetylmuram
+      9e-27   98.5   2.0    3.5e-26   96.6   0.8    2.1  1  sp|A6UB85|MURG_SINMW  UDP-N-acetylglucosamine--N-acetylmuram
+    9.2e-27   98.5   0.0    5.5e-26   95.9   0.0    2.0  1  sp|B9DNZ7|MURG_STACT  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-26   98.3   0.5    2.6e-26   97.0   0.4    1.7  1  sp|B4E6J2|MURG_BURCJ  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-26   98.3   0.5    2.6e-26   97.0   0.4    1.7  1  sp|B1JV78|MURG_BURCC  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-26   98.2   0.0    6.8e-26   95.6   0.0    2.1  1  sp|C1C649|MURG_STRP7  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-26   98.2   0.4      3e-26   96.8   0.2    1.7  1  sp|Q2S9Z2|MURG_HAHCH  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-26   98.2   0.0    7.6e-26   95.5   0.0    2.2  1  sp|B5E2Z9|MURG_STRP4  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-26   98.2   0.0    7.6e-26   95.5   0.0    2.2  1  sp|C1CJF3|MURG_STRZP  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-26   98.1   0.4    2.5e-26   97.1   0.3    1.6  1  sp|A9I4V2|MURG_BORPD  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-26   98.0   2.0    1.3e-26   98.0   1.4    2.0  1  sp|B0RIJ3|MURG_CLAMS  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-26   97.9   0.0    1.1e-25   95.0   0.0    2.2  1  sp|P0CB60|MURG_STRPN  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-26   97.9   0.0      1e-25   95.0   0.0    2.2  1  sp|B8ZMZ7|MURG_STRPJ  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-26   97.8   1.6    1.1e-25   94.9   0.7    2.2  1  sp|B3PTW0|MURG_RHIE6  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-26   97.8   1.9    3.3e-26   96.7   1.3    1.6  1  sp|Q0SHS1|MURG_RHOSR  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-26   97.7   2.4    3.1e-26   96.8   0.9    2.0  1  sp|Q313Q3|MURG_DESDG  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-26   97.7   0.0    3.1e-26   96.8   0.0    1.5  1  sp|A8F1I4|MURG_RICM5  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-26   97.7   0.0    2.5e-26   97.0   0.0    1.3  1  sp|A6H195|MURG_FLAPJ  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-26   97.6   1.4    2.6e-26   97.0   0.4    1.8  1  sp|A0K486|MURG_BURCH  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-26   97.6   1.4    2.6e-26   97.0   0.4    1.8  1  sp|Q1BZG3|MURG_BURCA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-26   97.6   0.3    3.4e-26   96.6   0.2    1.5  1  sp|Q12EL5|MURG_POLSJ  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-26   97.5   1.2    4.5e-26   96.2   0.9    1.6  1  sp|Q8UDM8|MURG_AGRT5  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-26   97.3   0.1    3.4e-26   96.6   0.0    1.4  1  sp|B7K5Z6|MURG_CYAP8  UDP-N-acetylglucosamine--N-acetylmuram
+    2.1e-26   97.3   0.3      8e-26   95.4   0.2    2.0  1  sp|Q2NCZ0|MURG_ERYLH  UDP-N-acetylglucosamine--N-acetylmuram
+    2.1e-26   97.3   0.0    7.3e-26   95.5   0.0    2.0  1  sp|Q9Y751|ATG26_PICPG Sterol 3-beta-glucosyltransferase OS=P
+    2.1e-26   97.3   0.3    4.2e-26   96.3   0.2    1.5  1  sp|Q5P6Z6|MURG_AZOSE  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-26   97.1   1.7    4.3e-26   96.3   1.1    1.5  1  sp|B6IRG2|MURG_RHOCS  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-26   97.1   0.0    3.9e-26   96.4   0.0    1.4  1  sp|A7TF84|ATG26_VANPO Sterol 3-beta-glucosyltransferase OS=V
+    2.4e-26   97.1   2.4    1.7e-25   94.3   1.4    2.1  1  sp|Q2S528|MURG_SALRD  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-26   97.0   0.0    6.5e-26   95.7   0.0    1.7  1  sp|B2SGS8|MURG_FRATM  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-26   97.0   0.0    6.5e-26   95.7   0.0    1.7  1  sp|A4IX64|MURG_FRATW  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-26   96.9   1.6    6.3e-26   95.7   1.1    1.7  1  sp|Q67Q48|MURG_SYMTH  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-26   96.7   0.0    6.6e-26   95.7   0.0    1.6  1  sp|Q6C8M8|ATG26_YARLI Sterol 3-beta-glucosyltransferase OS=Y
+    3.1e-26   96.7   2.1      7e-26   95.6   1.4    1.6  1  sp|C1AU55|MURG_RHOOB  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-26   96.7   0.1    6.8e-26   95.6   0.1    1.6  1  sp|B3E3Y2|MURG_GEOLS  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-26   96.7   0.0    8.1e-26   95.4   0.0    1.7  1  sp|A0Q766|MURG_FRATN  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-26   96.7   0.0    4.9e-26   96.1   0.0    1.3  1  sp|B1WVP7|MURG_CYAA5  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-26   96.5   0.0    6.8e-26   95.6   0.0    1.4  1  sp|B0TY93|MURG_FRAP2  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-26   96.4   0.0    8.7e-26   95.3   0.0    1.6  1  sp|Q68WW7|MURG_RICTY  UDP-N-acetylglucosamine--N-acetylmuram
+    4.1e-26   96.4   0.0    7.5e-26   95.5   0.0    1.5  1  sp|Q6GGZ0|MURG_STAAR  UDP-N-acetylglucosamine--N-acetylmuram
+      5e-26   96.1   0.6    1.4e-25   94.6   0.4    1.7  1  sp|B9JH51|MURG_AGRRK  UDP-N-acetylglucosamine--N-acetylmuram
+    5.6e-26   95.9   0.0    1.2e-25   94.9   0.0    1.6  1  sp|Q6BN88|ATG26_DEBHA Sterol 3-beta-glucosyltransferase OS=D
+    6.1e-26   95.8   0.0    1.6e-25   94.5   0.0    1.7  1  sp|A7NDC0|MURG_FRATF  UDP-N-acetylglucosamine--N-acetylmuram
+    6.1e-26   95.8   0.0    1.6e-25   94.5   0.0    1.7  1  sp|Q0BL37|MURG_FRATO  UDP-N-acetylglucosamine--N-acetylmuram
+    6.1e-26   95.8   0.0    1.6e-25   94.5   0.0    1.7  1  sp|Q2A2I7|MURG_FRATH  UDP-N-acetylglucosamine--N-acetylmuram
+    6.5e-26   95.7   2.5    6.5e-26   95.7   1.7    1.9  1  sp|A5CS51|MURG_CLAM3  UDP-N-acetylglucosamine--N-acetylmuram
+    6.6e-26   95.7   0.0    1.1e-25   94.9   0.0    1.4  1  sp|Q9ZDC0|MURG_RICPR  UDP-N-acetylglucosamine--N-acetylmuram
+    7.1e-26   95.6   0.0    1.2e-25   94.8   0.0    1.4  1  sp|Q9ZK59|MURG_HELPJ  UDP-N-acetylglucosamine--N-acetylmuram
+    7.7e-26   95.5   0.0    1.4e-25   94.6   0.0    1.4  1  sp|B7KGH1|MURG_CYAP7  UDP-N-acetylglucosamine--N-acetylmuram
+    7.9e-26   95.4   0.0    1.4e-25   94.6   0.0    1.4  1  sp|Q4L6C8|MURG_STAHJ  UDP-N-acetylglucosamine--N-acetylmuram
+    9.3e-26   95.2   1.4    9.3e-26   95.2   0.9    1.7  1  sp|B4UES1|MURG_ANASK  UDP-N-acetylglucosamine--N-acetylmuram
+    9.8e-26   95.1   3.1    1.4e-25   94.7   1.3    1.8  1  sp|B9JY54|MURG_AGRVS  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-25   94.7   1.4    4.4e-25   93.0   0.8    1.9  1  sp|Q1ME33|MURG_RHIL3  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-25   94.6   0.0    2.5e-25   93.8   0.0    1.4  1  sp|A8EZ14|MURG_RICCK  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-25   94.5   0.0    3.8e-25   93.2   0.0    1.7  1  sp|Q5A950|ATG26_CANAL Sterol 3-beta-glucosyltransferase OS=C
+    1.6e-25   94.4   1.3    1.6e-25   94.4   0.9    1.7  1  sp|Q2IG27|MURG_ANADE  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-25   94.1   1.4      2e-25   94.1   1.0    1.7  1  sp|B8J8E8|MURG_ANAD2  UDP-N-acetylglucosamine--N-acetylmuram
+    2.1e-25   94.0   1.0    5.2e-25   92.8   0.7    1.7  1  sp|C3MEM9|MURG_RHISN  UDP-N-acetylglucosamine--N-acetylmuram
+    2.1e-25   94.0   0.0    4.1e-25   93.1   0.0    1.5  1  sp|Q1CSB1|MURG_HELPH  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-25   93.9   0.0    4.4e-25   93.0   0.0    1.4  1  sp|P59424|MURG_BUCBP  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-25   93.9   1.4    1.3e-24   91.4   0.8    2.1  1  sp|Q2K6C1|MURG_RHIEC  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-25   93.9   0.0    4.1e-25   93.1   0.0    1.4  1  sp|O25770|MURG_HELPY  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-25   93.9   0.0    5.7e-25   92.6   0.0    1.6  1  sp|A0M527|MURG_GRAFK  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-25   93.9   0.0    4.1e-25   93.1   0.0    1.4  1  sp|B2UUR4|MURG_HELPS  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-25   93.8   0.0    4.5e-25   93.0   0.0    1.5  1  sp|Q3K2P3|MURG_STRA1  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-25   93.8   0.0    4.5e-25   93.0   0.0    1.5  1  sp|Q8CX15|MURG_STRA5  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-25   93.8   0.0    4.5e-25   93.0   0.0    1.5  1  sp|Q8E6P0|MURG_STRA3  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-25   93.8   0.0    4.8e-25   92.9   0.0    1.5  1  sp|Q7U346|MURG_BLOFL  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-25   93.7   0.0    4.8e-25   92.9   0.0    1.4  1  sp|Q5HPC0|MURG_STAEQ  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-25   93.7   0.0    4.8e-25   92.9   0.0    1.4  1  sp|Q8CMM3|MURG_STAES  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-25   93.6   0.7    5.8e-25   92.6   0.3    1.7  1  sp|Q01Q48|MURG_SOLUE  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-25   93.6   0.0    4.9e-25   92.8   0.0    1.4  1  sp|B5Z8F1|MURG_HELPG  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-25   93.5   0.0    5.8e-25   92.6   0.0    1.5  1  sp|Q5L524|MURG_CHLAB  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-25   93.5   0.0    5.6e-25   92.7   0.0    1.4  1  sp|Q255W4|MURG_CHLFF  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-25   93.5   0.0    6.7e-25   92.4   0.0    1.5  1  sp|Q820E0|MURG_CHLCV  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-25   93.4   2.3    3.5e-25   93.3   0.2    2.0  1  sp|Q8XVI7|MURG_RALSO  UDP-N-acetylglucosamine--N-acetylmuram
+    3.6e-25   93.3   0.0    6.6e-25   92.4   0.0    1.4  1  sp|Q4ULT6|MURG_RICFE  UDP-N-acetylglucosamine--N-acetylmuram
+    3.9e-25   93.2   0.0    6.6e-25   92.4   0.0    1.4  1  sp|Q49XM9|MURG_STAS1  UDP-N-acetylglucosamine--N-acetylmuram
+    3.9e-25   93.2   0.0    6.5e-25   92.5   0.0    1.4  1  sp|Q119X8|MURG_TRIEI  UDP-N-acetylglucosamine--N-acetylmuram
+      4e-25   93.2   0.0    1.3e-24   91.5   0.0    1.9  1  sp|Q03L97|MURG_STRTD  UDP-N-acetylglucosamine--N-acetylmuram
+      4e-25   93.1   1.0    7.4e-25   92.3   0.7    1.5  1  sp|A0L5N1|MURG_MAGSM  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-25   93.1   3.7    4.2e-25   93.1   1.2    2.0  1  sp|B8H091|MURG_CAUCN  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-25   93.1   3.7    4.2e-25   93.1   1.2    2.0  1  sp|Q9A5A1|MURG_CAUCR  UDP-N-acetylglucosamine--N-acetylmuram
+    4.4e-25   93.0   0.0    7.8e-25   92.2   0.0    1.4  1  sp|A8GNC7|MURG_RICAH  UDP-N-acetylglucosamine--N-acetylmuram
+    4.7e-25   92.9   0.0    1.5e-24   91.3   0.0    1.9  1  sp|B5XMA2|MURG_STRPZ  UDP-N-acetylglucosamine--N-acetylmuram
+    4.8e-25   92.9   0.0    7.7e-25   92.2   0.0    1.3  1  sp|B6JMZ5|MURG_HELP2  UDP-N-acetylglucosamine--N-acetylmuram
+      5e-25   92.8   0.0      1e-24   91.8   0.0    1.6  1  sp|A7ERM5|ATG26_SCLS1 Sterol 3-beta-glucosyltransferase OS=S
+    5.1e-25   92.8   0.3    1.2e-24   91.6   0.2    1.6  1  sp|Q7V466|MURG_PROMM  UDP-N-acetylglucosamine--N-acetylmuram
+    5.7e-25   92.7   0.3    1.2e-24   91.7   0.2    1.5  1  sp|A2CDG1|MURG_PROM3  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    2.1e-24   90.8   0.0    1.9  1  sp|Q5M0D4|MURG_STRT1  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    2.1e-24   90.8   0.0    1.9  1  sp|Q5M4Y1|MURG_STRT2  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    1.1e-24   91.7   0.0    1.5  1  sp|A6QGX0|MURG_STAAE  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    1.1e-24   91.7   0.0    1.5  1  sp|Q2FYL5|MURG_STAA8  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    1.1e-24   91.7   0.0    1.5  1  sp|Q5HG02|MURG_STAAC  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    1.1e-24   91.7   0.0    1.5  1  sp|Q6G9E3|MURG_STAAS  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    1.1e-24   91.7   0.0    1.5  1  sp|Q8NWR4|MURG_STAAW  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    1.1e-24   91.7   0.0    1.5  1  sp|A5ISU9|MURG_STAA9  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    1.1e-24   91.7   0.0    1.5  1  sp|A6U1N8|MURG_STAA2  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    1.1e-24   91.7   0.0    1.5  1  sp|A7X2A2|MURG_STAA1  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    1.1e-24   91.7   0.0    1.5  1  sp|P65481|MURG_STAAM  UDP-N-acetylglucosamine--N-acetylmuram
+    5.8e-25   92.6   0.0    1.1e-24   91.7   0.0    1.5  1  sp|P65482|MURG_STAAN  UDP-N-acetylglucosamine--N-acetylmuram
+      6e-25   92.6   0.0    1.1e-24   91.7   0.0    1.4  1  sp|Q2YY01|MURG_STAAB  UDP-N-acetylglucosamine--N-acetylmuram
+    6.2e-25   92.5   0.0    2.1e-24   90.8   0.0    1.9  1  sp|Q7MAW5|MURG_PORGI  UDP-N-acetylglucosamine--N-acetylmuram
+    6.3e-25   92.5   0.1    2.1e-24   90.8   0.0    1.9  1  sp|A2RDL0|MURG_STRPG  UDP-N-acetylglucosamine--N-acetylmuram
+    6.4e-25   92.5   0.1    2.1e-24   90.8   0.0    1.9  1  sp|Q5XB05|MURG_STRP6  UDP-N-acetylglucosamine--N-acetylmuram
+    7.5e-25   92.3   0.0    2.5e-24   90.6   0.0    1.9  1  sp|Q1JAT5|MURG_STRPB  UDP-N-acetylglucosamine--N-acetylmuram
+    7.5e-25   92.3   0.0    2.5e-24   90.6   0.0    1.9  1  sp|Q1JKY5|MURG_STRPC  UDP-N-acetylglucosamine--N-acetylmuram
+    9.4e-25   91.9   0.0    2.1e-24   90.8   0.0    1.6  1  sp|B2RIF1|MURG_PORG3  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-24   91.8   0.0    2.4e-24   90.6   0.0    1.6  1  sp|C0M6J2|MURG_STRE4  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-24   91.5   1.0    2.8e-24   90.4   0.7    1.6  1  sp|A1UTC5|MURG_BARBK  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-24   91.5   0.0      3e-24   90.3   0.0    1.6  1  sp|C0MD54|MURG_STRS7  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-24   91.3   0.0    3.2e-24   90.2   0.0    1.6  1  sp|B4U1U4|MURG_STREM  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-24   91.3   0.0    2.7e-24   90.5   0.0    1.5  1  sp|A5CWW1|MURG_VESOH  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-24   91.3   1.6    4.1e-24   89.9   1.1    1.7  1  sp|A1A2E9|MURG_BIFAA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-24   91.2   0.0    5.1e-24   89.6   0.0    1.9  1  sp|P65483|MURG_STRP1  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-24   91.2   0.0    5.1e-24   89.6   0.0    1.9  1  sp|P65484|MURG_STRP8  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-24   91.2   0.0    5.1e-24   89.6   0.0    1.9  1  sp|Q48SK9|MURG_STRPM  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-24   91.2   0.0    5.1e-24   89.6   0.0    1.9  1  sp|Q1J5S6|MURG_STRPF  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-24   91.2   0.0      3e-24   90.3   0.0    1.5  1  sp|A8Z3Z7|MURG_STAAT  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-24   91.2   0.0      3e-24   90.3   0.0    1.5  1  sp|Q2FH20|MURG_STAA3  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-24   91.2   0.0    5.1e-24   89.6   0.0    1.9  1  sp|Q1JG11|MURG_STRPD  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-24   91.0   0.0      4e-24   89.9   0.0    1.6  1  sp|Q17WB5|MURG_HELAH  UDP-N-acetylglucosamine--N-acetylmuram
+    1.9e-24   90.9   0.1    3.4e-24   90.1   0.1    1.4  1  sp|C6BYG6|MURG_DESAD  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-24   90.7   0.5    5.7e-24   89.4   0.2    1.8  1  sp|Q6G2Q5|MURG_BARHE  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-24   90.7   0.2    5.6e-24   89.4   0.1    1.7  1  sp|A9IWA5|MURG_BART1  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-24   90.4   0.0    5.7e-24   89.4   0.0    1.6  1  sp|Q8CUL4|MURG_OCEIH  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-24   90.4   0.0    5.6e-24   89.4   0.0    1.5  1  sp|A6LEU3|MURG_PARD8  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-24   90.2   1.4    3.1e-24   90.2   1.0    1.7  1  sp|Q6AE64|MURG_LEIXX  UDP-N-acetylglucosamine--N-acetylmuram
+    3.3e-24   90.2   0.2    6.9e-24   89.1   0.1    1.6  1  sp|A1K3U6|MURG_AZOSB  UDP-N-acetylglucosamine--N-acetylmuram
+    3.9e-24   89.9   0.0    6.2e-24   89.3   0.0    1.3  1  sp|Q9PLG2|MURG_CHLMU  UDP-N-acetylglucosamine--N-acetylmuram
+    4.1e-24   89.9   0.6    8.9e-24   88.8   0.4    1.6  1  sp|Q1GRX9|MURG_SPHAL  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-24   89.8   0.0    9.1e-24   88.7   0.0    1.6  1  sp|Q751Z4|ATG26_ASHGO Sterol 3-beta-glucosyltransferase OS=A
+    4.4e-24   89.8   0.1    1.3e-23   88.2   0.0    1.8  1  sp|A4VTK4|MURG_STRSY  UDP-N-acetylglucosamine--N-acetylmuram
+    4.4e-24   89.8   0.1    1.3e-23   88.2   0.0    1.8  1  sp|A4VZT9|MURG_STRS2  UDP-N-acetylglucosamine--N-acetylmuram
+    4.6e-24   89.7   0.1    9.2e-24   88.7   0.0    1.5  1  sp|B3QWT7|MURG_CHLT3  UDP-N-acetylglucosamine--N-acetylmuram
+    4.6e-24   89.7   0.0      8e-24   88.9   0.0    1.4  1  sp|Q6AJ53|MURG_DESPS  UDP-N-acetylglucosamine--N-acetylmuram
+      5e-24   89.6   0.6    9.4e-24   88.7   0.2    1.6  1  sp|B9K6P7|MURG_THENN  UDP-N-acetylglucosamine--N-acetylmuram
+    5.9e-24   89.3   0.0    1.9e-23   87.7   0.0    1.9  1  sp|Q8K6R7|MURG_STRP3  UDP-N-acetylglucosamine--N-acetylmuram
+    6.9e-24   89.1   0.0    1.3e-23   88.3   0.0    1.5  1  sp|Q54IL5|UGT52_DICDI UDP-sugar-dependent glycosyltransferas
+    7.5e-24   89.0   0.6    1.9e-23   87.7   0.4    1.7  1  sp|B3DQN1|MURG_BIFLD  UDP-N-acetylglucosamine--N-acetylmuram
+    7.5e-24   89.0   0.6    1.9e-23   87.7   0.4    1.7  1  sp|Q8CY50|MURG_BIFLO  UDP-N-acetylglucosamine--N-acetylmuram
+    7.8e-24   89.0   0.0    1.8e-23   87.7   0.0    1.7  1  sp|Q6MIG1|MURG_BDEBA  UDP-N-acetylglucosamine--N-acetylmuram
+    8.4e-24   88.9   0.6    1.5e-23   88.0   0.4    1.5  1  sp|Q7U3U6|MURG_SYNPX  UDP-N-acetylglucosamine--N-acetylmuram
+    8.9e-24   88.8   0.6    2.2e-23   87.5   0.4    1.7  1  sp|B7GQ78|MURG_BIFLI  UDP-N-acetylglucosamine--N-acetylmuram
+    9.3e-24   88.7   0.0    3.8e-23   86.7   0.0    2.1  1  sp|Q0UY53|ATG26_PHANO Sterol 3-beta-glucosyltransferase OS=P
+    1.2e-23   88.4   0.0    3.6e-23   86.8   0.0    1.8  1  sp|Q8DVE2|MURG_STRMU  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-23   88.4   2.0    1.3e-23   88.2   0.6    1.7  1  sp|Q6N411|MURG_RHOPA  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-23   88.3   0.0    3.2e-23   87.0   0.0    1.8  1  sp|Q6CUV2|ATG26_KLULA Sterol 3-beta-glucosyltransferase OS=K
+    1.3e-23   88.3   0.1      2e-23   87.6   0.1    1.3  1  sp|Q1MPB9|MURG_LAWIP  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-23   88.3   0.0      2e-22   84.4   0.0    2.2  1  sp|Q8R5N5|MURG_FUSNN  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-23   88.1   0.3    3.8e-23   86.7   0.1    1.8  1  sp|Q3ANV3|MURG_CHLCH  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-23   88.1   0.0    6.7e-23   85.9   0.0    2.1  1  sp|A8AW15|MURG_STRGC  UDP-N-acetylglucosamine--N-acetylmuram
+    2.2e-23   87.5   1.7    5.9e-23   86.1   1.2    1.8  1  sp|B8DP79|MURG_DESVM  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-23   87.4   1.2    4.6e-23   86.5   0.8    1.5  1  sp|Q728U8|MURG_DESVH  UDP-N-acetylglucosamine--N-acetylmuram
+      3e-23   87.1   0.0    5.9e-23   86.1   0.0    1.5  1  sp|Q8NJS1|ATG26_LEPMC Sterol 3-beta-glucosyltransferase OS=L
+    3.4e-23   86.9   0.0    6.2e-23   86.0   0.0    1.5  1  sp|Q5KK25|ATG26_CRYNE Sterol 3-beta-glucosyltransferase OS=C
+    3.5e-23   86.8   0.1    9.9e-23   85.4   0.0    1.8  1  sp|Q8YZI3|MURG_ANASP  UDP-N-acetylglucosamine--N-acetylmuram
+    3.6e-23   86.8   0.0      1e-22   85.3   0.0    1.8  1  sp|B9DUV6|MURG_STRU0  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-23   86.7   0.0    7.7e-23   85.7   0.0    1.6  1  sp|Q3M935|MURG_ANAVT  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-23   86.7   0.0    8.2e-23   85.7   0.0    1.6  1  sp|Q7VDZ2|MURG_PROMA  UDP-N-acetylglucosamine--N-acetylmuram
+    3.9e-23   86.7   0.1    7.7e-23   85.7   0.1    1.5  1  sp|Q0I6M0|MURG_SYNS3  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-23   86.6   0.1    9.6e-23   85.4   0.0    1.6  1  sp|B2J8J9|MURG_NOSP7  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-23   86.6   0.3    4.2e-23   86.6   0.2    1.5  1  sp|A5GPC2|MURG_SYNPW  UDP-N-acetylglucosamine--N-acetylmuram
+    4.5e-23   86.5   2.3    4.5e-23   86.5   1.6    1.8  1  sp|B4RFS0|MURG_PHEZH  UDP-N-acetylglucosamine--N-acetylmuram
+    5.2e-23   86.3   1.4      1e-22   85.4   1.0    1.5  1  sp|A1VBE8|MURG_DESVV  UDP-N-acetylglucosamine--N-acetylmuram
+    6.2e-23   86.1   0.0      1e-22   85.4   0.0    1.4  1  sp|B7IHN7|MURG_THEAB  UDP-N-acetylglucosamine--N-acetylmuram
+    6.3e-23   86.0   0.0    1.3e-22   85.0   0.0    1.6  1  sp|Q7S1I0|ATG26_NEUCR Sterol 3-beta-glucosyltransferase OS=N
+    6.7e-23   85.9   0.4    1.2e-22   85.1   0.3    1.4  1  sp|Q3AVX2|MURG_SYNS9  UDP-N-acetylglucosamine--N-acetylmuram
+    7.2e-23   85.8   0.0    1.5e-22   84.8   0.0    1.6  1  sp|Q4WID6|ATG26_ASPFU Sterol 3-beta-glucosyltransferase OS=A
+    7.2e-23   85.8   0.0    1.5e-22   84.8   0.0    1.6  1  sp|A1CYS1|ATG26_NEOFI Sterol 3-beta-glucosyltransferase OS=N
+    7.8e-23   85.7   0.0    1.7e-22   84.6   0.0    1.6  1  sp|Q8DHY4|MURG_THEEB  UDP-N-acetylglucosamine--N-acetylmuram
+    8.1e-23   85.7   0.4    2.4e-22   84.2   0.0    1.9  1  sp|Q11RH5|MURG_CYTH3  UDP-N-acetylglucosamine--N-acetylmuram
+    8.2e-23   85.6   0.1    1.6e-22   84.7   0.0    1.5  1  sp|A9BDG0|MURG_PROM4  UDP-N-acetylglucosamine--N-acetylmuram
+      9e-23   85.5   0.0    3.6e-22   83.6   0.0    2.0  1  sp|Q73L91|MURG_TREDE  UDP-N-acetylglucosamine--N-acetylmuram
+    9.7e-23   85.4   0.8    9.7e-23   85.4   0.6    1.9  1  sp|C4XK69|MURG_DESMR  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-22   85.3   1.9    2.3e-22   84.2   1.3    1.6  1  sp|A1BAL5|MURG_PARDP  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-22   85.1   0.1    4.1e-22   83.4   0.0    1.9  1  sp|A3CLN6|MURG_STRSV  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-22   85.1   0.0    2.5e-22   84.1   0.0    1.6  1  sp|A4SV74|MURG_POLSQ  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-22   84.9   0.0    2.6e-22   84.0   0.0    1.4  1  sp|O67238|MURG_AQUAE  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-22   84.7   0.0    2.8e-22   83.9   0.0    1.4  1  sp|Q2U0C3|ATG26_ASPOR Sterol 3-beta-glucosyltransferase OS=A
+    1.6e-22   84.7   0.4    4.4e-22   83.3   0.3    1.8  1  sp|Q3STS8|MURG_NITWN  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-22   84.7   0.3    3.2e-22   83.7   0.2    1.5  1  sp|A1BJX8|MURG_CHLPD  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-22   84.6   0.0    3.6e-22   83.6   0.0    1.6  1  sp|A1AWE8|MURG_RUTMC  UDP-N-acetylglucosamine--N-acetylmuram
+    1.7e-22   84.6   0.0    3.2e-22   83.7   0.0    1.5  1  sp|A1CFB3|ATG26_ASPCL Sterol 3-beta-glucosyltransferase OS=A
+    2.1e-22   84.4   2.1      5e-22   83.1   1.4    1.7  1  sp|B8IN64|MURG_METNO  UDP-N-acetylglucosamine--N-acetylmuram
+    2.2e-22   84.3   0.8    5.1e-22   83.1   0.2    1.9  1  sp|Q6G124|MURG_BARQU  UDP-N-acetylglucosamine--N-acetylmuram
+    2.2e-22   84.2   1.6      5e-22   83.1   1.1    1.6  1  sp|Q2W0H3|MURG_MAGSA  UDP-N-acetylglucosamine--N-acetylmuram
+    2.8e-22   83.9   0.0    5.3e-22   83.0   0.0    1.5  1  sp|Q0CKU4|ATG26_ASPTN Sterol 3-beta-glucosyltransferase OS=A
+    2.8e-22   83.9   0.4    5.6e-22   82.9   0.2    1.6  1  sp|B1ZU31|MURG_OPITP  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-22   83.9   0.1    5.6e-22   82.9   0.0    1.5  1  sp|A6L071|MURG_BACV8  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-22   83.9   0.3    6.6e-22   82.7   0.2    1.6  1  sp|Q1QNU3|MURG_NITHX  UDP-N-acetylglucosamine--N-acetylmuram
+    3.8e-22   83.5   0.0      1e-21   82.1   0.0    1.7  1  sp|B2V7Y8|MURG_SULSY  UDP-N-acetylglucosamine--N-acetylmuram
+    4.9e-22   83.1   0.2      1e-21   82.1   0.1    1.6  1  sp|Q3AGT7|MURG_SYNSC  UDP-N-acetylglucosamine--N-acetylmuram
+    5.2e-22   83.0   0.0      1e-21   82.1   0.0    1.5  1  sp|Q5B4C9|ATG26_EMENI Sterol 3-beta-glucosyltransferase OS=E
+    7.1e-22   82.6   0.0    1.4e-21   81.7   0.0    1.5  1  sp|A5GW69|MURG_SYNR3  UDP-N-acetylglucosamine--N-acetylmuram
+    7.4e-22   82.6   0.8    7.4e-22   82.6   0.6    2.0  1  sp|A4YZK3|MURG_BRASO  UDP-N-acetylglucosamine--N-acetylmuram
+    7.6e-22   82.5   1.9    7.6e-22   82.5   1.3    2.6  1  sp|Q2RVU4|MURG_RHORT  UDP-N-acetylglucosamine--N-acetylmuram
+    7.8e-22   82.5   0.1    1.8e-21   81.3   0.1    1.6  1  sp|Q2JW21|MURG_SYNJA  UDP-N-acetylglucosamine--N-acetylmuram
+      8e-22   82.4   0.8      8e-22   82.4   0.6    2.0  1  sp|A5EPK4|MURG_BRASB  UDP-N-acetylglucosamine--N-acetylmuram
+    9.4e-22   82.2   0.0    1.8e-21   81.3   0.0    1.5  1  sp|A7KAN4|ATG26_PENCW Sterol 3-beta-glucosyltransferase OS=P
+    1.1e-21   82.0   0.2    2.7e-21   80.8   0.1    1.7  1  sp|Q2JJR4|MURG_SYNJB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-21   81.9   0.0    2.2e-21   81.0   0.0    1.5  1  sp|A2QNQ5|ATG26_ASPNC Sterol 3-beta-glucosyltransferase OS=A
+    1.3e-21   81.8   2.4    2.6e-21   80.8   1.6    1.5  1  sp|Q0AMW7|MURG_MARMM  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-21   81.5   0.0    5.2e-21   79.8   0.0    1.8  1  sp|Q812Y1|MURG3_BACCR UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-21   81.3   2.2      4e-21   80.2   1.5    1.6  1  sp|B4SH49|MURG_PELPB  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-21   81.2   1.0    4.3e-21   80.1   0.4    1.8  1  sp|B4S6Q9|MURG_PROA2  UDP-N-acetylglucosamine--N-acetylmuram
+    2.5e-21   80.8   0.0    4.4e-21   80.0   0.0    1.4  1  sp|A8G2K3|MURG_PROM2  UDP-N-acetylglucosamine--N-acetylmuram
+    2.7e-21   80.8   0.3    5.9e-21   79.6   0.2    1.6  1  sp|Q89FU7|MURG_BRAJA  UDP-N-acetylglucosamine--N-acetylmuram
+    3.5e-21   80.4   0.0    8.3e-21   79.2   0.0    1.6  1  sp|A0RHC3|MURG1_BACAH UDP-N-acetylglucosamine--N-acetylmuram
+    3.7e-21   80.3   0.0    8.3e-21   79.2   0.0    1.6  1  sp|Q6MBS7|MURG_PARUW  UDP-N-acetylglucosamine--N-acetylmuram
+    3.9e-21   80.2   0.7    9.7e-21   78.9   0.5    1.7  1  sp|Q0BXU2|MURG_HYPNA  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-21   80.1   0.5    7.5e-21   79.3   0.3    1.4  1  sp|Q8KGD4|MURG_CHLTE  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-21   80.1   0.2    7.7e-21   79.3   0.1    1.5  1  sp|B3QLW4|MURG_CHLP8  UDP-N-acetylglucosamine--N-acetylmuram
+    5.4e-21   79.8   0.2    1.1e-20   78.7   0.1    1.5  1  sp|A6T2F8|MURG_JANMA  UDP-N-acetylglucosamine--N-acetylmuram
+    7.8e-21   79.2   0.0    1.4e-20   78.5   0.0    1.4  1  sp|A5CEL6|MURG_ORITB  UDP-N-acetylglucosamine--N-acetylmuram
+    7.9e-21   79.2   0.0    1.2e-20   78.6   0.0    1.3  1  sp|Q8D2Z6|MURG_WIGBR  UDP-N-acetylglucosamine--N-acetylmuram
+    9.1e-21   79.0   1.4    2.4e-20   77.7   1.0    1.8  1  sp|B0UFC7|MURG_METS4  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-20   78.6   0.7    2.2e-20   77.8   0.5    1.5  1  sp|Q163J0|MURG_ROSDO  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-20   78.6   0.2    3.9e-20   77.0   0.1    1.9  1  sp|A4G8T8|MURG_HERAR  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-20   78.6   1.6    2.5e-20   77.6   1.1    1.5  1  sp|Q28NN5|MURG_JANSC  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-20   78.6   0.0    2.4e-20   77.6   0.0    1.5  1  sp|Q31CY4|MURG_PROM9  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-20   78.5   2.0    3.2e-20   77.3   1.4    1.7  1  sp|B1ZGP4|MURG_METPB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-20   78.3   0.8    1.5e-20   78.3   0.6    1.8  1  sp|Q5LU63|MURG_SILPO  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-20   78.3   0.0    2.7e-20   77.5   0.0    1.4  1  sp|B3CRE9|MURG_ORITI  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-20   78.1   2.2    2.4e-20   77.7   0.6    1.9  1  sp|Q1GIV1|MURG_SILST  UDP-N-acetylglucosamine--N-acetylmuram
+    2.1e-20   77.8   0.5    5.1e-20   76.6   0.3    1.7  1  sp|Q1GZ01|MURG_METFK  UDP-N-acetylglucosamine--N-acetylmuram
+    2.3e-20   77.7   0.1    7.8e-20   76.0   0.0    1.9  1  sp|B3ET95|MURG_AMOA5  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-20   77.7   0.2    1.2e-19   75.4   0.0    2.0  1  sp|Q8A258|MURG_BACTN  UDP-N-acetylglucosamine--N-acetylmuram
+    2.6e-20   77.5   0.5    5.5e-20   76.5   0.3    1.6  1  sp|Q211T8|MURG_RHOPB  UDP-N-acetylglucosamine--N-acetylmuram
+    2.9e-20   77.4   1.3    5.5e-20   76.5   0.5    1.8  1  sp|Q2IYK8|MURG_RHOP2  UDP-N-acetylglucosamine--N-acetylmuram
+    3.9e-20   77.0   4.1    4.1e-20   76.9   0.9    2.2  1  sp|B1LXZ4|MURG_METRJ  UDP-N-acetylglucosamine--N-acetylmuram
+    4.4e-20   76.8   0.0    7.8e-20   76.0   0.0    1.4  1  sp|A2BNZ2|MURG_PROMS  UDP-N-acetylglucosamine--N-acetylmuram
+    5.1e-20   76.6   0.0    9.9e-20   75.7   0.0    1.5  1  sp|C0R2W7|MURG_WOLWR  UDP-N-acetylglucosamine--N-acetylmuram
+    5.1e-20   76.6   0.0    9.9e-20   75.7   0.0    1.5  1  sp|Q73I55|MURG_WOLPM  UDP-N-acetylglucosamine--N-acetylmuram
+    5.9e-20   76.4   1.8    1.4e-19   75.2   1.3    1.7  1  sp|A9VWV3|MURG_METEP  UDP-N-acetylglucosamine--N-acetylmuram
+    6.1e-20   76.3   1.8    1.4e-19   75.2   1.3    1.7  1  sp|B7KSC1|MURG_METC4  UDP-N-acetylglucosamine--N-acetylmuram
+    6.5e-20   76.3   0.0    9.5e-20   75.7   0.0    1.3  1  sp|A2C027|MURG_PROM1  UDP-N-acetylglucosamine--N-acetylmuram
+    6.7e-20   76.2   2.3    3.6e-19   73.9   0.7    2.4  1  sp|A3PHS8|MURG_RHOS1  UDP-N-acetylglucosamine--N-acetylmuram
+    7.9e-20   76.0   1.3    2.8e-19   74.2   1.2    1.7  1  sp|A4SH02|MURG_PROVI  UDP-N-acetylglucosamine--N-acetylmuram
+    7.9e-20   76.0   2.2    3.6e-19   73.9   0.7    2.3  1  sp|Q3J4M2|MURG_RHOS4  UDP-N-acetylglucosamine--N-acetylmuram
+    9.5e-20   75.7   0.0    1.7e-19   74.9   0.0    1.4  1  sp|Q7V388|MURG_PROMP  UDP-N-acetylglucosamine--N-acetylmuram
+    9.9e-20   75.7   0.0    1.7e-19   74.9   0.0    1.4  1  sp|A3PAR5|MURG_PROM0  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-19   75.6   0.8      1e-19   75.6   0.6    1.9  1  sp|Q07PT3|MURG_RHOP5  UDP-N-acetylglucosamine--N-acetylmuram
+    1.1e-19   75.5   0.8      3e-19   74.1   0.6    1.8  1  sp|Q133X1|MURG_RHOPS  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-19   75.4   0.1    2.5e-19   74.4   0.1    1.6  1  sp|Q5LIJ7|MURG_BACFN  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-19   75.4   0.1    2.5e-19   74.4   0.1    1.6  1  sp|Q64ZM1|MURG_BACFR  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-19   75.3   0.0    2.5e-19   74.4   0.0    1.5  1  sp|A6LLF1|MURG_THEM4  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-19   75.0   0.0    2.4e-19   74.4   0.0    1.3  1  sp|Q46HH6|MURG_PROMT  UDP-N-acetylglucosamine--N-acetylmuram
+    2.4e-19   74.4   2.8    7.8e-19   72.8   1.1    2.2  1  sp|A4WQD5|MURG_RHOS5  UDP-N-acetylglucosamine--N-acetylmuram
+    3.2e-19   74.0   0.0      6e-19   73.1   0.0    1.5  1  sp|A2BUH4|MURG_PROM5  UDP-N-acetylglucosamine--N-acetylmuram
+    6.6e-19   73.0   0.0    1.5e-18   71.8   0.0    1.6  1  sp|Q5GS79|MURG_WOLTR  UDP-N-acetylglucosamine--N-acetylmuram
+      1e-18   72.4   0.2    2.5e-18   71.1   0.1    1.6  1  sp|Q7NPZ9|MURG_CHRVO  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-18   72.2   3.1    2.1e-17   68.1   0.0    2.8  2  sp|Q1AVX3|MURG_RUBXD  UDP-N-acetylglucosamine--N-acetylmuram
+    1.3e-18   72.1   0.1    2.4e-18   71.2   0.1    1.4  1  sp|Q7MBC4|MURG_GLOVI  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-18   71.8   0.0    2.8e-18   70.9   0.0    1.4  1  sp|Q7U322|MURG_HELHP  UDP-N-acetylglucosamine--N-acetylmuram
+      2e-18   71.4   0.6      2e-18   71.4   0.5    1.5  1  sp|Q3B129|MURG_PELLD  UDP-N-acetylglucosamine--N-acetylmuram
+    4.3e-18   70.4   0.1    6.9e-17   66.5   0.0    2.1  1  sp|Q30PK0|MURG_SULDN  UDP-N-acetylglucosamine--N-acetylmuram
+    7.3e-18   69.6   0.3    1.4e-17   68.7   0.2    1.5  1  sp|A2SCY5|MURG_METPP  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-17   68.9   0.0      3e-16   64.4   0.0    2.1  2  sp|A0RP87|MURG_CAMFF  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-17   68.5   0.0    6.2e-17   66.6   0.0    2.0  1  sp|B3CM87|MURG_WOLPP  UDP-N-acetylglucosamine--N-acetylmuram
+    3.5e-17   67.4   3.3    8.1e-17   66.2   2.3    1.7  1  sp|A5FUL0|MURG_ACICJ  UDP-N-acetylglucosamine--N-acetylmuram
+    5.3e-17   66.8   0.0    1.1e-16   65.8   0.0    1.5  1  sp|Q7MAD4|MURG_WOLSU  UDP-N-acetylglucosamine--N-acetylmuram
+    8.9e-17   66.1   0.0    2.8e-16   64.5   0.0    1.8  1  sp|B2KE54|MURG_ELUMP  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-16   65.6   0.4    2.2e-16   64.8   0.3    1.5  1  sp|B3EIK8|MURG_CHLL2  UDP-N-acetylglucosamine--N-acetylmuram
+    1.4e-16   65.4   3.3    1.4e-16   65.4   2.3    2.7  1  sp|A5UZT7|MURG_ROSS1  UDP-N-acetylglucosamine--N-acetylmuram
+    3.1e-16   64.4   0.8    7.2e-16   63.1   0.5    1.7  1  sp|Q5FUJ5|MURG_GLUOX  UDP-N-acetylglucosamine--N-acetylmuram
+    6.5e-16   63.3   0.1    4.4e-15   60.6   0.0    2.2  1  sp|A6Q722|MURG_SULNB  UDP-N-acetylglucosamine--N-acetylmuram
+    1.6e-15   62.0   0.0    3.1e-15   61.1   0.0    1.5  1  sp|B8E325|MURG_DICTD  UDP-N-acetylglucosamine--N-acetylmuram
+    2.2e-15   61.6   0.0    5.6e-15   60.3   0.0    1.7  1  sp|A6Q579|MURG_NITSB  UDP-N-acetylglucosamine--N-acetylmuram
+    3.4e-15   61.0   0.8    1.1e-14   59.3   0.5    1.9  1  sp|Q0BV25|MURG_GRABC  UDP-N-acetylglucosamine--N-acetylmuram
+      4e-15   60.8   0.0    1.3e-14   59.0   0.0    1.9  1  sp|Q5PB22|MURG_ANAMM  UDP-N-acetylglucosamine--N-acetylmuram
+    4.1e-15   60.7   0.0    1.9e-14   58.5   0.0    1.9  1  sp|A7I265|MURG_CAMHC  UDP-N-acetylglucosamine--N-acetylmuram
+    6.3e-15   60.1   1.1    6.3e-15   60.1   0.8    2.2  1  sp|A9FI55|MURG_SORC5  UDP-N-acetylglucosamine--N-acetylmuram
+    8.2e-15   59.7   0.0    1.7e-14   58.7   0.0    1.6  1  sp|B5YEL3|MURG_DICT6  UDP-N-acetylglucosamine--N-acetylmuram
+    1.2e-13   56.0   0.0    2.1e-13   55.1   0.0    1.5  1  sp|A8FM88|MURG_CAMJ8  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-13   55.6   0.0    2.8e-13   54.8   0.0    1.5  1  sp|Q5HU62|MURG_CAMJR  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-13   55.6   0.0    2.8e-13   54.8   0.0    1.5  1  sp|A1W027|MURG_CAMJJ  UDP-N-acetylglucosamine--N-acetylmuram
+    1.5e-13   55.6   0.0    2.8e-13   54.8   0.0    1.5  1  sp|Q9PNQ2|MURG_CAMJE  UDP-N-acetylglucosamine--N-acetylmuram
+    3.5e-13   54.5   0.0    6.4e-13   53.6   0.0    1.5  1  sp|A7H2Z9|MURG_CAMJD  UDP-N-acetylglucosamine--N-acetylmuram
+    7.2e-13   53.4   0.0    1.8e-12   52.2   0.0    1.7  1  sp|A8F4X1|MURG_THELT  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-10   45.7   0.3    3.9e-09   41.3   0.2    2.3  1  sp|Q72R84|MURG_LEPIC  UDP-N-acetylglucosamine--N-acetylmuram
+    1.8e-10   45.7   0.3    3.9e-09   41.3   0.2    2.3  1  sp|Q8F4J1|MURG_LEPIN  UDP-N-acetylglucosamine--N-acetylmuram
+    4.2e-09   41.3   0.0    7.1e-09   40.5   0.0    1.4  1  sp|Q4FPK5|MURG_PELUB  UDP-N-acetylglucosamine--N-acetylmuram
+    7.7e-09   40.4   0.3    1.5e-07   36.2   0.2    2.3  1  sp|Q04V94|MURG_LEPBJ  UDP-N-acetylglucosamine--N-acetylmuram
+    7.7e-09   40.4   0.3    1.5e-07   36.2   0.2    2.3  1  sp|Q04Y82|MURG_LEPBL  UDP-N-acetylglucosamine--N-acetylmuram
+    3.4e-07   35.1   0.0    9.9e-07   33.5   0.0    1.8  1  sp|Q8TTI1|Y452_METAC  Uncharacterized glycosyltransferase MA
+    2.3e-06   32.4   0.0    3.1e-05   28.7   0.0    2.5  1  sp|Q8TTI0|Y453_METAC  Uncharacterized glycosyltransferase MA
+    2.4e-06   32.3   0.0    1.2e-05   30.0   0.0    2.1  1  sp|Q8PWF3|Y1636_METMA Uncharacterized glycosyltransferase MM
+    7.8e-06   30.6   0.0    2.7e-05   28.9   0.0    2.0  1  sp|O34539|YJIC_BACSU  Uncharacterized UDP-glucosyltransferas
+      2e-05   29.3   0.7    6.6e-05   27.6   0.1    2.2  1  sp|Q53685|OLED_STRAT  Oleandomycin glycosyltransferase OS=St
+      2e-05   29.3   0.0    4.5e-05   28.2   0.0    1.6  1  sp|Q8PZB2|Y582_METMA  Uncharacterized glycosyltransferase MM
+    7.8e-05   27.4   0.1    0.00022   25.9   0.1    1.7  1  sp|P21686|CRTX_PANAN  Zeaxanthin glucosyltransferase OS=Pant
+    0.00056   24.6   0.0     0.0013   23.5   0.0    1.6  1  sp|Q54387|MGT_STRLI   Macrolide glycosyltransferase OS=Strep
+    0.00067   24.4   0.3     0.0017   23.1   0.2    1.6  1  sp|Q01330|CRTX_ESCVU  Zeaxanthin glucosyltransferase OS=Esch
+  ------ inclusion threshold ------
+      0.012   20.4   0.0       0.36   15.5   0.0    2.4  2  sp|O31853|YOJK_BACSU  Uncharacterized UDP-glucosyltransferas
+      0.013   20.2   0.0      0.049   18.4   0.0    1.9  1  sp|B1YIY4|MTNA_EXIS2  Methylthioribose-1-phosphate isomerase
+      0.016   19.9   0.0      0.039   18.6   0.0    1.7  1  sp|Q0WW21|UGAGT_ARATH Anthocyanin 5-O-glucosyltransferase OS
+      0.021   19.6   0.4      0.064   18.0   0.0    2.0  1  sp|Q9Z565|ILVC1_STRCO Ketol-acid reductoisomerase 1 OS=Strep
+      0.022   19.5   0.0      0.051   18.3   0.0    1.7  1  sp|O05496|YDHE_BACSU  Uncharacterized UDP-glucosyltransferas
+      0.022   19.4   0.3      0.064   18.0   0.0    1.9  1  sp|Q9FBT8|ILVC2_STRCO Ketol-acid reductoisomerase 2 OS=Strep
+      0.023   19.4   0.4      0.044   18.5   0.1    1.7  1  sp|Q9SBL1|HMNGT_SORBI Cyanohydrin beta-glucosyltransferase O
+      0.067   17.9   0.2       0.19   16.4   0.1    1.9  1  sp|B1I2P1|MTNA_DESAP  Methylthioribose-1-phosphate isomerase
+       0.08   17.6   0.0        8.6   11.1   0.0    3.1  2  sp|A8AZU1|MUTL_STRGC  DNA mismatch repair protein mutL OS=St
+      0.085   17.6   0.0       0.19   16.4   0.0    1.6  1  sp|Q01198|LIGD_PSEPA  C alpha-dehydrogenase OS=Pseudomonas p
+      0.087   17.5   0.1        1.2   13.8   0.0    2.2  1  sp|Q83RR8|NPD_SHIFL   NAD-dependent deacetylase OS=Shigella 
+      0.089   17.5   0.0       0.24   16.1   0.0    1.7  1  sp|C5D7U5|MTNA_GEOSW  Methylthioribose-1-phosphate isomerase
+       0.11   17.2   0.0        9.4   10.9   0.0    3.1  2  sp|A3CR14|MUTL_STRSV  DNA mismatch repair protein mutL OS=St
+       0.12   17.1   0.0       0.37   15.5   0.0    1.8  1  sp|Q88M09|MTNA_PSEPK  Methylthioribose-1-phosphate isomerase
+       0.13   17.0   0.0       0.45   15.2   0.0    1.9  1  sp|Q5L1E6|MTNA_GEOKA  Methylthioribose-1-phosphate isomerase
+       0.14   16.9   0.1        1.9   13.2   0.0    2.2  1  sp|Q8X8E0|NPD_ECO57   NAD-dependent deacetylase OS=Escherich
+       0.14   16.9   0.1        1.8   13.3   0.0    2.2  1  sp|P75960|NPD_ECOLI   NAD-dependent deacetylase OS=Escherich
+       0.14   16.9   0.8       0.21   16.3   0.5    1.5  1  sp|Q5V467|MAMA1_HALMA Methylaspartate mutase S chain 1 OS=Ha
+       0.14   16.9   0.0       0.65   14.7   0.0    2.1  1  sp|C0MAS4|MUTL_STRE4  DNA mismatch repair protein mutL OS=St
+       0.14   16.8   0.1        1.4   13.6   0.0    2.1  1  sp|P0A2F2|NPD_SALTY   NAD-dependent deacetylase OS=Salmonell
+       0.14   16.8   0.1        1.4   13.6   0.0    2.1  1  sp|P0A2F3|NPD_SALTI   NAD-dependent deacetylase OS=Salmonell
+       0.15   16.8   0.0       0.77   14.5   0.0    2.1  1  sp|C0MGC4|MUTL_STRS7  DNA mismatch repair protein mutL OS=St
+       0.15   16.8   0.0       0.48   15.1   0.0    1.8  1  sp|Q65KK2|MTNA_BACLD  Methylthioribose-1-phosphate isomerase
+       0.15   16.7   0.0        0.5   15.1   0.0    1.9  1  sp|B0KTX5|MTNA_PSEPG  Methylthioribose-1-phosphate isomerase
+       0.16   16.7   0.0       0.41   15.4   0.0    1.7  1  sp|B1J5G5|MTNA_PSEPW  Methylthioribose-1-phosphate isomerase
+       0.16   16.7   0.0       0.51   15.1   0.0    1.9  1  sp|A5W7G2|MTNA_PSEP1  Methylthioribose-1-phosphate isomerase
+       0.17   16.6   0.1       0.86   14.3   0.0    2.1  1  sp|A4ILL1|MTNA_GEOTN  Methylthioribose-1-phosphate isomerase
+       0.18   16.5   0.0       0.77   14.5   0.0    2.0  1  sp|B4U0J7|MUTL_STREM  DNA mismatch repair protein mutL OS=St
+        0.2   16.4   0.1        1.9   13.2   0.0    2.2  1  sp|Q8FIM4|NPD_ECOL6   NAD-dependent deacetylase OS=Escherich
+       0.21   16.3   0.2       0.72   14.6   0.0    2.0  1  sp|B2GFJ7|ILVC_KOCRD  Ketol-acid reductoisomerase OS=Kocuria
+       0.21   16.3   0.3       0.67   14.7   0.0    2.0  1  sp|B1VZ72|ILVC_STRGG  Ketol-acid reductoisomerase OS=Strepto
+       0.22   16.2   0.2       0.73   14.5   0.0    2.0  1  sp|Q59818|ILVC_STRAW  Ketol-acid reductoisomerase OS=Strepto
+       0.26   16.0   0.0        2.9   12.6   0.0    2.4  1  sp|Q731R7|MTNA_BACC1  Methylthioribose-1-phosphate isomerase
+       0.29   15.8   0.0        0.6   14.8   0.0    1.5  1  sp|B1GZW3|TPIS_UNCTG  Triosephosphate isomerase OS=Unculture
+       0.33   15.7   0.1        6.3   11.5   0.0    2.4  1  sp|Q2IWS4|GLYA_RHOP2  Serine hydroxymethyltransferase OS=Rho
+       0.36   15.5   0.0        1.4   13.6   0.0    2.0  1  sp|A7GS56|MTNA_BACCN  Methylthioribose-1-phosphate isomerase
+       0.37   15.5   0.0       0.85   14.3   0.0    1.6  1  sp|B7KF23|ILVC_CYAP7  Ketol-acid reductoisomerase OS=Cyanoth
+       0.39   15.4   0.0          1   14.1   0.0    1.6  1  sp|A5W1E8|RNZ_PSEP1   Ribonuclease Z OS=Pseudomonas putida (
+       0.45   15.2   0.0        1.6   13.5   0.0    1.9  1  sp|B3QSP0|ILVC_CHLT3  Ketol-acid reductoisomerase OS=Chloroh
+       0.46   15.2   0.0        4.5   12.0   0.0    2.3  1  sp|O31662|MTNA_BACSU  Methylthioribose-1-phosphate isomerase
+       0.51   15.0   0.2        2.2   13.0   0.1    2.1  1  sp|C1F6Z5|ILVC_ACIC5  Ketol-acid reductoisomerase OS=Acidoba
+       0.55   14.9   0.1         50    8.6   0.0    2.3  2  sp|Q2G3S7|PYRB_NOVAD  Aspartate carbamoyltransferase OS=Novo
+       0.57   14.9   1.6         25    9.6   0.0    3.0  2  sp|Q96LB3|IFT74_HUMAN Intraflagellar transport protein 74 ho
+       0.58   14.9   0.2        1.6   13.5   0.1    1.8  1  sp|A9AZM5|ILVC_HERA2  Ketol-acid reductoisomerase OS=Herpeto
+       0.64   14.7   0.0        3.9   12.2   0.0    2.0  1  sp|B8HSQ9|SURE_CYAP4  5'-nucleotidase surE OS=Cyanothece sp.
+       0.68   14.6   0.0        2.4   12.9   0.0    1.9  1  sp|Q3SPL2|UVRC_NITWN  UvrABC system protein C OS=Nitrobacter
+       0.68   14.6   0.0        2.8   12.6   0.0    1.8  1  sp|A7Z3X0|MTNA_BACA2  Methylthioribose-1-phosphate isomerase
+       0.69   14.6   0.4         44    8.8   0.1    2.2  2  sp|Q38W65|EFTS_LACSS  Elongation factor Ts OS=Lactobacillus 
+       0.69   14.6   0.0        1.9   13.2   0.0    1.7  1  sp|C3JYK1|TIG_PSEFS   Trigger factor OS=Pseudomonas fluoresc
+       0.71   14.6   0.0        1.7   13.4   0.0    1.7  1  sp|Q1GZA6|BIOB_METFK  Biotin synthase OS=Methylobacillus fla
+       0.71   14.6   0.0        2.5   12.8   0.0    2.0  1  sp|Q635P7|MTNA2_BACCZ Methylthioribose-1-phosphate isomerase
+       0.71   14.6   0.0        1.8   13.3   0.0    1.7  1  sp|O48676|HTGT_ARATH  N-hydroxythioamide S-beta-glucosyltran
+       0.72   14.6   0.1    1.4e+02    7.1   0.0    2.9  2  sp|Q8YRC9|THIOG_ANASP Bifunctional protein thiO/thiG OS=Anab
+       0.73   14.5   0.0         11   10.8   0.0    2.4  1  sp|Q8DW43|ILVC_STRMU  Ketol-acid reductoisomerase OS=Strepto
+       0.73   14.5   0.0        2.3   12.9   0.0    1.9  1  sp|Q81MJ6|MTNA2_BACAN Methylthioribose-1-phosphate isomerase
+       0.74   14.5   0.0        7.7   11.2   0.0    2.4  1  sp|Q6N693|GLYA1_RHOPA Serine hydroxymethyltransferase 1 OS=R
+       0.75   14.5   0.0          2   13.1   0.0    1.7  1  sp|B0C915|MURD_ACAM1  UDP-N-acetylmuramoylalanine--D-glutama
+       0.76   14.5   0.0        3.5   12.4   0.0    2.0  1  sp|Q2KA25|GLYA_RHIEC  Serine hydroxymethyltransferase OS=Rhi
+       0.77   14.5   0.0        6.5   11.5   0.0    2.3  1  sp|Q214H7|GLYA_RHOPB  Serine hydroxymethyltransferase OS=Rho
+       0.79   14.4   0.0        3.8   12.2   0.0    2.2  1  sp|B9DW70|MUTL_STRU0  DNA mismatch repair protein mutL OS=St
+        0.8   14.4   0.0        2.6   12.8   0.0    1.9  1  sp|A0RI38|MTNA2_BACAH Methylthioribose-1-phosphate isomerase
+       0.81   14.4   0.0        2.6   12.8   0.0    1.9  1  sp|Q6HED3|MTNA2_BACHK Methylthioribose-1-phosphate isomerase
+       0.83   14.4   0.0        2.4   12.9   0.0    1.8  1  sp|Q1QIR5|UVRC_NITHX  UvrABC system protein C OS=Nitrobacter
+       0.84   14.3   0.0        4.8   11.9   0.0    2.3  1  sp|A8AVN4|ILVC_STRGC  Ketol-acid reductoisomerase OS=Strepto
+       0.86   14.3   0.3         13   10.4   0.0    2.8  1  sp|Q7V5V5|MURD_PROMM  UDP-N-acetylmuramoylalanine--D-glutama
+        0.9   14.2   0.1        2.4   12.9   0.1    1.8  1  sp|Q47SB6|ILVC_THEFY  Ketol-acid reductoisomerase OS=Thermob
+        0.9   14.2   0.1        1.8   13.3   0.0    1.5  1  sp|A4FMQ5|ILVC_SACEN  Ketol-acid reductoisomerase OS=Sacchar
+       0.91   14.2   0.1        1.3   13.8   0.0    1.3  1  sp|Q5V3R4|TRM56_HALMA tRNA ribose 2'-O-methyltransferase aTr
+       0.91   14.2   0.0         37    9.0   0.0    2.3  2  sp|B8GW68|ENO_CAUCN   Enolase OS=Caulobacter crescentus (str
+       0.91   14.2   0.0         37    9.0   0.0    2.3  2  sp|Q9A7J9|ENO_CAUCR   Enolase OS=Caulobacter crescentus GN=e
+       0.92   14.2   0.2        2.8   12.7   0.1    1.8  1  sp|Q5V3F0|MAMA2_HALMA Methylaspartate mutase S chain 2 OS=Ha
+       0.96   14.2   0.0        4.9   11.9   0.0    2.2  1  sp|B1LZ88|GLYA_METRJ  Serine hydroxymethyltransferase OS=Met
+       0.98   14.1   0.0        2.1   13.0   0.0    1.5  1  sp|P94966|BIOB_METSK  Biotin synthase OS=Methylobacillus sp.
+          1   14.1   0.1        2.4   12.9   0.1    1.7  1  sp|Q3SHE4|ILVC_THIDA  Ketol-acid reductoisomerase OS=Thiobac
+        1.1   14.0   0.0        8.5   11.1   0.0    2.3  1  sp|Q07MT9|GLYA_RHOP5  Serine hydroxymethyltransferase OS=Rho
+        1.1   14.0   0.0        2.6   12.7   0.0    1.8  1  sp|A9VRK3|MTNA1_BACWK Methylthioribose-1-phosphate isomerase
+        1.1   13.9   0.3        5.6   11.7   0.1    2.2  1  sp|A9GW78|ILVC_SORC5  Ketol-acid reductoisomerase OS=Sorangi
+        1.1   13.9   0.0        4.5   12.0   0.0    2.0  1  sp|Q5YRW2|ILVC_NOCFA  Ketol-acid reductoisomerase OS=Nocardi
+        1.2   13.9   0.0        5.6   11.7   0.0    2.2  1  sp|A3CQ86|ILVC_STRSV  Ketol-acid reductoisomerase OS=Strepto
+        1.2   13.8   0.0        7.6   11.2   0.0    2.2  1  sp|Q21AW5|UVRC_RHOPB  UvrABC system protein C OS=Rhodopseudo
+        1.3   13.7   0.0        3.5   12.4   0.0    1.8  1  sp|Q81IK7|MTNA1_BACCR Methylthioribose-1-phosphate isomerase
+        1.3   13.7   0.1    1.9e+02    6.7   0.0    3.2  2  sp|Q5FNN2|PYRG_GLUOX  CTP synthase OS=Gluconobacter oxydans 
+        1.3   13.7   0.1        4.3   12.0   0.1    2.0  1  sp|Q2S9V9|ILVC_HAHCH  Ketol-acid reductoisomerase OS=Hahella
+        1.4   13.6   0.0        2.4   12.9   0.0    1.5  1  sp|Q17QH8|D39U1_BOVIN Epimerase family protein SDR39U1 OS=Bo
+        1.4   13.6   0.1        3.2   12.5   0.1    1.7  1  sp|Q2J6V2|ILVC_FRASC  Ketol-acid reductoisomerase OS=Frankia
+        1.4   13.6   0.2         22    9.8   0.0    2.4  1  sp|A1WUW3|ILVC_HALHL  Ketol-acid reductoisomerase OS=Halorho
+        1.4   13.6   0.1        5.3   11.8   0.1    2.0  1  sp|A8LMD0|PUR9_DINSH  Bifunctional purine biosynthesis prote
+        1.4   13.6   0.2        5.1   11.8   0.1    2.0  1  sp|C5BAT0|GCSP_EDWI9  Glycine dehydrogenase [decarboxylating
+        1.4   13.6   0.0        6.3   11.5   0.0    2.0  1  sp|C1B2M1|ILVC_RHOOB  Ketol-acid reductoisomerase OS=Rhodoco
+        1.4   13.6   0.0        6.3   11.5   0.0    2.0  1  sp|Q0S2H3|ILVC_RHOSR  Ketol-acid reductoisomerase OS=Rhodoco
+        1.4   13.6   0.0        3.5   12.3   0.0    1.7  1  sp|A0R946|MTNA1_BACAH Methylthioribose-1-phosphate isomerase
+        1.4   13.6   0.0        3.5   12.3   0.0    1.7  1  sp|Q81ZC2|MTNA1_BACAN Methylthioribose-1-phosphate isomerase
+        1.5   13.6   0.0        3.5   12.3   0.0    1.7  1  sp|Q6HP54|MTNA1_BACHK Methylthioribose-1-phosphate isomerase
+        1.5   13.5   0.0          6   11.6   0.0    1.9  1  sp|Q1MIU5|GLYA_RHIL3  Serine hydroxymethyltransferase OS=Rhi
+        1.5   13.5   0.0        4.4   12.0   0.0    1.8  1  sp|A8FCG5|MTNA_BACP2  Methylthioribose-1-phosphate isomerase
+        1.6   13.5   0.7        7.3   11.3   0.1    2.2  1  sp|Q63CV4|ILVC2_BACCZ Ketol-acid reductoisomerase 2 OS=Bacil
+        1.6   13.4   0.0        4.7   11.9   0.0    1.8  1  sp|A4J179|ILVC_DESRM  Ketol-acid reductoisomerase OS=Desulfo
+        1.6   13.4   0.0        2.2   13.0   0.0    1.3  1  sp|Q9V030|PAAD_PYRAB  Probable aromatic acid decarboxylase O
+        1.7   13.4   0.7        7.7   11.2   0.1    2.2  1  sp|Q81F27|ILVC2_BACCR Ketol-acid reductoisomerase 2 OS=Bacil
+        1.7   13.4   0.0         28    9.4   0.0    2.6  1  sp|Q03IJ9|ILVC_STRTD  Ketol-acid reductoisomerase OS=Strepto
+        1.7   13.4   0.0         28    9.4   0.0    2.6  1  sp|Q9F0I7|ILVC_STRTR  Ketol-acid reductoisomerase OS=Strepto
+        1.7   13.4   0.1        4.6   11.9   0.0    1.7  1  sp|P26166|YBCC_RHOCA  Uncharacterized 20.5 kDa protein in bc
+        1.7   13.4   0.2        3.8   12.2   0.1    2.1  1  sp|B8I1T8|ILVC_CLOCE  Ketol-acid reductoisomerase OS=Clostri
+        1.7   13.3   0.1         37    9.0   0.0    2.7  1  sp|A4VXL3|ILVC_STRSY  Ketol-acid reductoisomerase OS=Strepto
+        1.7   13.3   0.1         37    9.0   0.0    2.7  1  sp|A4W3V8|ILVC_STRS2  Ketol-acid reductoisomerase OS=Strepto
+        1.8   13.3   0.0        4.4   12.0   0.0    1.7  1  sp|Q3B594|ILVC_PELLD  Ketol-acid reductoisomerase OS=Pelodic
+        1.8   13.3   0.0         15   10.3   0.0    2.5  1  sp|B1I8F2|MUTL_STRPI  DNA mismatch repair protein mutL OS=St
+        1.8   13.3   0.0         15   10.3   0.0    2.5  1  sp|B2IS10|MUTL_STRPS  DNA mismatch repair protein mutL OS=St
+        1.8   13.3   0.0         15   10.3   0.0    2.5  1  sp|B8ZKC9|MUTL_STRPJ  DNA mismatch repair protein mutL OS=St
+        1.8   13.3   0.0         15   10.3   0.0    2.5  1  sp|P0A3R1|HEXB_STRPN  DNA mismatch repair protein hexB OS=St
+        1.8   13.3   0.0         15   10.3   0.0    2.5  1  sp|P0A3R2|HEXB_STRR6  DNA mismatch repair protein hexB OS=St
+        1.8   13.3   0.0         15   10.3   0.0    2.5  1  sp|Q04MR4|MUTL_STRP2  DNA mismatch repair protein mutL OS=St
+        1.8   13.3   0.0         15   10.3   0.0    2.5  1  sp|C1CI68|MUTL_STRZP  DNA mismatch repair protein mutL OS=St
+        1.8   13.3   0.0         15   10.3   0.0    2.5  1  sp|C1CP43|MUTL_STRZT  DNA mismatch repair protein mutL OS=St
+        1.8   13.3   1.2        8.8   11.0   0.2    2.7  1  sp|Q8ZQE4|MACB_SALTY  Macrolide export ATP-binding/permease 
+        1.8   13.3   1.2        8.8   11.0   0.2    2.7  1  sp|Q57R58|MACB_SALCH  Macrolide export ATP-binding/permease 
+        1.8   13.2   0.0        3.6   12.3   0.0    1.5  1  sp|Q64550|UD11_RAT    UDP-glucuronosyltransferase 1-1 OS=Rat
+        1.8   13.2   0.0          6   11.6   0.0    1.8  1  sp|B9JCX4|GLYA_AGRRK  Serine hydroxymethyltransferase OS=Agr
+        1.9   13.2   1.2        8.8   11.0   0.2    2.6  1  sp|Q8Z824|MACB_SALTI  Macrolide export ATP-binding/permease 
+        1.9   13.2   0.0        2.7   12.7   0.0    1.2  1  sp|O94475|YC67_SCHPO  Uncharacterized protein C1919.07 OS=Sc
+        1.9   13.2   0.0    2.2e+02    6.5   0.0    2.2  2  sp|P59837|RDH12_BOVIN Retinol dehydrogenase 12 OS=Bos taurus
+        1.9   13.2   0.8        8.8   11.0   0.2    2.4  1  sp|Q5PGK9|MACB_SALPA  Macrolide export ATP-binding/permease 
+          2   13.1   0.8         18   10.0   0.1    2.6  1  sp|Q02CM4|ILVC_SOLUE  Ketol-acid reductoisomerase OS=Solibac
+          2   13.1   0.0         11   10.8   0.0    2.0  1  sp|Q669P6|NPD_YERPS   NAD-dependent deacetylase OS=Yersinia 
+          2   13.1   0.0         11   10.8   0.0    2.0  1  sp|Q8ZFR1|NPD_YERPE   NAD-dependent deacetylase OS=Yersinia 
+          2   13.1   0.1        5.1   11.8   0.1    1.7  1  sp|B9KYS1|ILVC_THERP  Ketol-acid reductoisomerase OS=Thermom
+          2   13.1   0.4         13   10.5   0.1    2.3  1  sp|B4UAN4|ILVC_ANASK  Ketol-acid reductoisomerase OS=Anaerom
+          2   13.1   0.4         13   10.5   0.1    2.3  1  sp|B8J829|ILVC_ANAD2  Ketol-acid reductoisomerase OS=Anaerom
+          2   13.1   0.4         13   10.5   0.1    2.3  1  sp|Q2IJB7|ILVC_ANADE  Ketol-acid reductoisomerase OS=Anaerom
+        2.1   13.1   0.1        5.1   11.8   0.1    1.7  1  sp|Q0RDI8|ILVC_FRAAA  Ketol-acid reductoisomerase OS=Frankia
+        2.1   13.1   1.1        7.1   11.3   0.0    2.3  1  sp|P0ABQ0|COABC_ECOLI Coenzyme A biosynthesis bifunctional p
+        2.1   13.1   1.1        7.1   11.3   0.0    2.3  1  sp|P0ABQ1|COABC_ECOL6 Coenzyme A biosynthesis bifunctional p
+        2.1   13.1   0.1        4.8   11.9   0.0    1.8  1  sp|B2J2U6|ILVC_NOSP7  Ketol-acid reductoisomerase OS=Nostoc 
+        2.1   13.0   0.0        6.4   11.5   0.0    1.8  1  sp|Q89DG9|UVRC_BRAJA  UvrABC system protein C OS=Bradyrhizob
+        2.1   13.0   0.1        5.1   11.8   0.1    1.6  1  sp|Q2S0M9|ILVC_SALRD  Ketol-acid reductoisomerase OS=Salinib
+        2.2   13.0   0.0        4.9   11.9   0.0    1.7  1  sp|Q7NH80|ILVC_GLOVI  Ketol-acid reductoisomerase OS=Gloeoba
+        2.2   13.0   0.1        4.5   12.0   0.1    1.6  1  sp|Q8G6V1|ILVC2_BIFLO Ketol-acid reductoisomerase 2 OS=Bifid
+        2.2   13.0   0.0         33    9.2   0.0    2.2  1  sp|Q2W698|ENO_MAGSA   Enolase OS=Magnetospirillum magneticum
+        2.3   12.9   0.0        5.4   11.7   0.0    1.7  1  sp|Q63GN3|MTNA1_BACCZ Methylthioribose-1-phosphate isomerase
+        2.3   12.9   0.0        5.4   11.7   0.0    1.7  1  sp|B0JRP2|ILVC_MICAN  Ketol-acid reductoisomerase OS=Microcy
+        2.3   12.9   0.0         15   10.3   0.0    2.3  1  sp|C1CBX8|MUTL_STRZJ  DNA mismatch repair protein mutL OS=St
+        2.3   12.9   0.0        5.4   11.7   0.0    1.8  1  sp|Q3SLY0|BIOB_THIDA  Biotin synthase OS=Thiobacillus denitr
+        2.4   12.9   0.0         15   10.3   0.0    2.3  1  sp|B5E6C5|MUTL_STRP4  DNA mismatch repair protein mutL OS=St
+        2.5   12.8   0.0          6   11.6   0.0    1.7  1  sp|B2J6I3|MURD_NOSP7  UDP-N-acetylmuramoylalanine--D-glutama
+        2.5   12.8   0.1         28    9.4   0.0    2.6  1  sp|Q5LXV0|ILVC_STRT1  Ketol-acid reductoisomerase OS=Strepto
+        2.5   12.8   0.1         28    9.4   0.0    2.6  1  sp|Q5M2F2|ILVC_STRT2  Ketol-acid reductoisomerase OS=Strepto
+        2.6   12.8   0.2         95    7.7   0.0    2.3  2  sp|C6A5E6|VATD_THESM  V-type ATP synthase subunit D OS=Therm
+        2.6   12.8   0.1        7.7   11.2   0.0    1.8  1  sp|Q2RIS6|ILVC_MOOTA  Ketol-acid reductoisomerase OS=Moorell
+        2.6   12.7   0.3         74    8.0   0.0    2.9  1  sp|Q3M859|THIOG_ANAVT Bifunctional protein thiO/thiG OS=Anab
+        2.6   12.7   0.0        7.4   11.3   0.0    1.7  1  sp|Q5GS59|RLME_WOLTR  Ribosomal RNA large subunit methyltran
+        2.7   12.7   2.1        2.8   12.7   0.1    2.1  1  sp|B8G7X1|ILVC_CHLAD  Ketol-acid reductoisomerase OS=Chlorof
+        2.8   12.7   0.3          9   11.0   0.1    2.0  1  sp|C5C2I2|ILVC_BEUC1  Ketol-acid reductoisomerase OS=Beutenb
+        2.8   12.6   0.3         13   10.5   0.1    2.1  1  sp|Q5SJ03|ILVC_THET8  Ketol-acid reductoisomerase OS=Thermus
+        2.8   12.6   0.3         13   10.5   0.1    2.1  1  sp|Q72JC8|ILVC_THET2  Ketol-acid reductoisomerase OS=Thermus
+        2.9   12.6   0.0         11   10.8   0.0    2.0  1  sp|Q4JUN9|ILVC_CORJK  Ketol-acid reductoisomerase OS=Coryneb
+        2.9   12.6   0.0        7.5   11.3   0.0    1.7  1  sp|Q2J0X3|UVRC_RHOP2  UvrABC system protein C OS=Rhodopseudo
+        2.9   12.6   0.0         16   10.2   0.0    2.2  1  sp|Q02YY8|ILVC_LACLS  Ketol-acid reductoisomerase OS=Lactoco
+        2.9   12.6   0.1        8.9   11.0   0.0    1.9  1  sp|B9EBF4|ILVC_MACCJ  Ketol-acid reductoisomerase OS=Macroco
+        2.9   12.6   0.0          6   11.6   0.0    1.6  1  sp|Q43716|UFOG_PETHY  Anthocyanidin 3-O-glucosyltransferase 
+          3   12.6   0.0        5.6   11.7   0.0    1.4  1  sp|A5GUT4|SURE_SYNR3  5'-nucleotidase surE OS=Synechococcus 
+          3   12.6   0.2        6.8   11.4   0.0    1.7  1  sp|Q1ARE4|ILVC_RUBXD  Ketol-acid reductoisomerase OS=Rubroba
+          3   12.5   0.4         19   10.0   0.1    2.5  1  sp|A6W7N6|ILVC_KINRD  Ketol-acid reductoisomerase OS=Kineoco
+          3   12.5   0.6    1.4e+02    7.1   0.0    3.1  1  sp|Q11039|DEAD_MYCTU  Cold-shock DEAD box protein A homolog 
+          3   12.5   0.1        9.5   10.9   0.0    1.8  1  sp|Q13BM0|UVRC_RHOPS  UvrABC system protein C OS=Rhodopseudo
+        3.1   12.5   0.0        4.8   11.9   0.0    1.4  1  sp|Q8YMT3|SURE_ANASP  5'-nucleotidase surE OS=Anabaena sp. (
+        3.1   12.5   0.0        8.6   11.1   0.0    1.7  1  sp|Q319M0|SURE_PROM9  5'-nucleotidase surE OS=Prochlorococcu
+        3.1   12.5   0.0        9.9   10.9   0.0    1.9  1  sp|A9VFD5|MTNA2_BACWK Methylthioribose-1-phosphate isomerase
+        3.2   12.5   0.0    2.1e+02    6.6   0.0    2.3  2  sp|A1JRP2|NADA_YERE8  Quinolinate synthase A OS=Yersinia ent
+        3.3   12.4   0.0         18   10.0   0.0    2.2  1  sp|A2RKQ6|ILVC_LACLM  Ketol-acid reductoisomerase OS=Lactoco
+        3.5   12.3   0.5         11   10.7   0.1    2.1  1  sp|Q32DZ9|MACB_SHIDS  Macrolide export ATP-binding/permease 
+        3.5   12.3   0.1         10   10.8   0.1    1.8  1  sp|A5CPY6|ILVC_CLAM3  Ketol-acid reductoisomerase OS=Claviba
+        3.5   12.3   0.1         10   10.8   0.1    1.8  1  sp|B0RIN6|ILVC_CLAMS  Ketol-acid reductoisomerase OS=Claviba
+        3.7   12.3   0.0         14   10.4   0.0    1.9  1  sp|Q8K5J6|MUTL_STRP3  DNA mismatch repair protein mutL OS=St
+        3.7   12.3   0.0         14   10.4   0.0    1.9  1  sp|Q99XN7|MUTL_STRP1  DNA mismatch repair protein mutL OS=St
+        3.7   12.3   0.0         14   10.4   0.0    1.9  1  sp|B5XJ09|MUTL_STRPZ  DNA mismatch repair protein mutL OS=St
+        3.8   12.2   0.0         14   10.4   0.0    1.9  1  sp|A2RGV3|MUTL_STRPG  DNA mismatch repair protein mutL OS=St
+        3.8   12.2   0.0         14   10.4   0.0    1.9  1  sp|Q5X9H5|MUTL_STRP6  DNA mismatch repair protein mutL OS=St
+        3.9   12.2   0.0         11   10.8   0.0    1.7  1  sp|Q3JYM6|MUTL_STRA1  DNA mismatch repair protein mutL OS=St
+        3.9   12.2   0.0         11   10.8   0.0    1.7  1  sp|Q8E2R5|MUTL_STRA3  DNA mismatch repair protein mutL OS=St
+          4   12.2   0.0         12   10.6   0.0    1.8  1  sp|Q9MB73|LGT_CITUN   Limonoid UDP-glucosyltransferase OS=Ci
+        4.1   12.1   0.0         11   10.7   0.0    1.8  1  sp|A8G678|SURE_PROM2  5'-nucleotidase surE OS=Prochlorococcu
+        4.2   12.1   1.1         26    9.5   0.5    2.3  1  sp|A9WP08|ILVC_RENSM  Ketol-acid reductoisomerase OS=Renibac
+        4.8   11.9   0.1        4.8   11.9   0.1    2.1  1  sp|A9WC26|ILVC_CHLAA  Ketol-acid reductoisomerase OS=Chlorof
+        4.8   11.9   0.1        4.8   11.9   0.1    2.1  1  sp|B9LGM7|ILVC_CHLSY  Ketol-acid reductoisomerase OS=Chlorof
+        4.9   11.9   0.0         12   10.7   0.0    1.8  1  sp|A2BSJ2|SURE_PROMS  5'-nucleotidase surE OS=Prochlorococcu
+          5   11.8   0.1         15   10.3   0.0    1.8  1  sp|Q9LR44|IABG1_ARATH Indole-3-acetate beta-glucosyltransfer
+        5.2   11.8   0.3         38    9.0   0.1    2.2  1  sp|O57731|VATD_PYRHO  V-type ATP synthase subunit D OS=Pyroc
+        5.6   11.7   0.0         15   10.3   0.0    1.7  1  sp|A3PEA4|SURE_PROM0  5'-nucleotidase surE OS=Prochlorococcu
+        6.8   11.4   1.8         11   10.7   0.1    2.3  1  sp|P75831|MACB_ECOLI  Macrolide export ATP-binding/permease 
+        7.6   11.2   2.0         11   10.7   0.1    2.3  1  sp|Q83LR7|MACB_SHIFL  Macrolide export ATP-binding/permease 
+        7.7   11.2   2.0         11   10.7   0.1    2.3  1  sp|Q3Z3Q4|MACB_SHISS  Macrolide export ATP-binding/permease 
+        9.5   10.9   1.8         16   10.2   0.1    2.3  1  sp|Q8XED0|MACB_ECO57  Macrolide export ATP-binding/permease 
+
+
+Domain annotation for each sequence (and alignments):
+>> sp|A7Z4E5|MURG_BACA2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  140.8   0.0   1.3e-42   7.6e-40       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 140.8 bits;  conditional E-value: 1.3e-42
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+A+ +e+qrr ++V+   ++t++gle+++ e +++++++i++  ++++kl s++++k++ ++lk+++k+k  lk
+  sp|A7Z4E5|MURG_BACA2   3 IAVSGGGTGGHIYPALAFIKEVQRRHPDVEflyIGTENGLEKKIvERENIPFRAIEIT-GFKRKL-SFENVKTVMRFLKGVKKSKSYLK 89 
+                           6899******************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           e+kpd+v+g+ggyv +++++aa++ gip++++Eqn++pg++nk+l++++n+v+
+  sp|A7Z4E5|MURG_BACA2  90 EFKPDAVIGTGGYVCGPVVYAAAKMGIPTIIHEQNSLPGITNKFLSKYVNKVA 142
+                           ***************************************************97 PP
+
+>> sp|Q65JY0|MURG_BACLD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  136.1   0.0     4e-41   2.3e-38       1     138 [.       3     142 ..       3     143 .. 0.99
+   2 ?    3.2   0.0         4   2.2e+03      13     106 ..     203     234 ..     173     251 .. 0.60
+
+  Alignments for each domain:
+  == domain 1    score: 136.1 bits;  conditional E-value: 4e-41
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT+G+++Pa+A+ +e++r   +V+   ++t++gle+ + e +g+++++i++  ++++kl s++++k++ ++lk++++ ke lk
+  sp|Q65JY0|MURG_BACLD   3 IVVSGGGTGGHIYPALAFIKEVKRHHEDVEflyIGTEKGLEKNIvEREGIPFKAIEIT-GFKRKL-SFENVKTVMRFLKGVKECKEELK 89 
+                           799*******************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd+v+g+ggyv +++++aa+++gip++++Eqn++pgl+nk+l++++++v+
+  sp|Q65JY0|MURG_BACLD  90 RFKPDAVIGTGGYVCGPVVYAASKLGIPTIIHEQNSLPGLTNKFLSKYVDKVA 142
+                           ***************************************************97 PP
+
+  == domain 2    score: 3.2 bits;  conditional E-value: 4
+                           HHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EE CS
+       Glyco_transf_28  13 ePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvad 101
+                           e  +A+ +eL++r+++V                                                              ++ +g+ + d
+  sp|Q65JY0|MURG_BACLD 203 EAVIAMQNELKKRDYQV--------------------------------------------------------------LYVTGEVHYD 229
+                           34455555555555555..............................................................5555555555 PP
+
+                           EE--H CS
+       Glyco_transf_28 102 lalia 106
+                            ++ a
+  sp|Q65JY0|MURG_BACLD 230 KVTAA 234
+                           55444 PP
+
+>> sp|P37585|MURG_BACSU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  139.0   0.0   4.9e-42   2.8e-39       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 139.0 bits;  conditional E-value: 4.9e-42
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+A+ +e+qrr ++V+   ++t++gle+++ e +++++++i++  ++++kl s++++k++ ++lk+++k+k  l+
+  sp|P37585|MURG_BACSU   3 IAISGGGTGGHIYPALAFIKEVQRRHPNVEflyIGTENGLEKKIvERENIPFRSIEIT-GFKRKL-SFENVKTVMRFLKGVKKSKSYLA 89 
+                           6899******************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           e+kpd+v+g+ggyv +++++aa++ gip++v+Eqn++pg++nk+l++++n+v+
+  sp|P37585|MURG_BACSU  90 EFKPDAVIGTGGYVCGPVVYAAAKMGIPTIVHEQNSLPGITNKFLSKYVNKVA 142
+                           ***************************************************97 PP
+
+>> sp|A8FCY1|MURG_BACP2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  136.8   0.0   2.4e-41   1.4e-38       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 136.8 bits;  conditional E-value: 2.4e-41
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT+G+++Pa+A+ +e++r  ++V+   ++t++gle+++ e +++++++i++  ++++kl s++++k++ ++lk+++k+k  lk
+  sp|A8FCY1|MURG_BACP2   3 IVISGGGTGGHIYPALAFIKEVKRLHPDVEflyIGTENGLEKKIvERENIPFKAIEIS-GFKRKL-SFDNVKTVMRFLKGVQKSKSYLK 89 
+                           799*******************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           e+kpd+v+g+ggyv +++++aa++++ip++++Eqn++pg++nk+l+r++n+v+
+  sp|A8FCY1|MURG_BACP2  90 EFKPDAVIGTGGYVCGPVVYAASKLKIPTIIHEQNSLPGITNKFLARYVNKVA 142
+                           ***************************************************97 PP
+
+>> sp|Q812W5|MURG1_BACCR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.9   0.0   7.9e-40   4.4e-37       1     139 []       3     143 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 131.9 bits;  conditional E-value: 7.9e-40
+                            EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                            v+++ggGT+G+++Pa+Al re ++  +e r   ++t++gle+++ ++ag+++++i +  ++++k+ sl+++k++ ++lk+++++k+ +
+  sp|Q812W5|MURG1_BACCR   3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 
+                            7899******************************************************.******.********************** PP
+
+                            HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+        Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                            ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v
+  sp|Q812W5|MURG1_BACCR  89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143
+                            ****************************************************975 PP
+
+>> sp|A3MY90|MURG_ACTP2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  135.3   0.1     7e-41     4e-38       2     138 ..       6     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 135.3 bits;  conditional E-value: 7e-41
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+areLq++G+e+r l+t++++e+ + +++g++++ i++  +l+ k+   + lk +++ +ka+ +a++i+k+++
+  sp|A3MY90|MURG_ACTP2   6 LVMAGGTGGHVFPAIAVARELQKQGWEIRwLGTKDRMEADLvPKHGIPIEFIQIS-GLKGKG-IGALLKAPFAIFKAVMQARKIIKNYQ 92 
+                           789*************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+l+g+p++++Eqn+++gl+n +l++ a +vl
+  sp|A3MY90|MURG_ACTP2  93 PDAVLGMGGYVSGPGGIAAKLCGVPVILHEQNAVAGLTNVWLSKIARRVL 142
+                           **********************************************9986 PP
+
+>> sp|A0RHT1|MURG2_BACAH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.9   0.0   7.9e-40   4.4e-37       1     139 []       3     143 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 131.9 bits;  conditional E-value: 7.9e-40
+                            EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                            v+++ggGT+G+++Pa+Al re ++  +e r   ++t++gle+++ ++ag+++++i +  ++++k+ sl+++k++ ++lk+++++k+ +
+  sp|A0RHT1|MURG2_BACAH   3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 
+                            7899******************************************************.******.********************** PP
+
+                            HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+        Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                            ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v
+  sp|A0RHT1|MURG2_BACAH  89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143
+                            ****************************************************975 PP
+
+>> sp|Q636B6|MURG1_BACCZ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.9   0.0   7.9e-40   4.4e-37       1     139 []       3     143 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 131.9 bits;  conditional E-value: 7.9e-40
+                            EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                            v+++ggGT+G+++Pa+Al re ++  +e r   ++t++gle+++ ++ag+++++i +  ++++k+ sl+++k++ ++lk+++++k+ +
+  sp|Q636B6|MURG1_BACCZ   3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 
+                            7899******************************************************.******.********************** PP
+
+                            HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+        Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                            ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v
+  sp|Q636B6|MURG1_BACCZ  89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143
+                            ****************************************************975 PP
+
+>> sp|Q81JG5|MURG1_BACAN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.9   0.0   7.9e-40   4.4e-37       1     139 []       3     143 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 131.9 bits;  conditional E-value: 7.9e-40
+                            EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                            v+++ggGT+G+++Pa+Al re ++  +e r   ++t++gle+++ ++ag+++++i +  ++++k+ sl+++k++ ++lk+++++k+ +
+  sp|Q81JG5|MURG1_BACAN   3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 
+                            7899******************************************************.******.********************** PP
+
+                            HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+        Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                            ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v
+  sp|Q81JG5|MURG1_BACAN  89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143
+                            ****************************************************975 PP
+
+>> sp|Q732F8|MURG1_BACC1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.9   0.0   7.9e-40   4.4e-37       1     139 []       3     143 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 131.9 bits;  conditional E-value: 7.9e-40
+                            EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                            v+++ggGT+G+++Pa+Al re ++  +e r   ++t++gle+++ ++ag+++++i +  ++++k+ sl+++k++ ++lk+++++k+ +
+  sp|Q732F8|MURG1_BACC1   3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 
+                            7899******************************************************.******.********************** PP
+
+                            HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+        Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                            ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v
+  sp|Q732F8|MURG1_BACC1  89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143
+                            ****************************************************975 PP
+
+>> sp|B7GGI2|MURG_ANOFW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  133.1   0.0   3.2e-40   1.8e-37       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 133.1 bits;  conditional E-value: 3.2e-40
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT+G+++Pa+A+ +e++++ ++V    ++t++gle+++ + +++++++i++  +l+++l s++++k++ ++ k++r+ k++lk
+  sp|B7GGI2|MURG_ANOFW   3 IVVSGGGTGGHIYPALAFIHEVKKQHPNVDvlyIGTKKGLESTIvPRENIPFHAIDIS-GLKRSL-SFENVKTIVRFIKSVRACKKLLK 89 
+                           799*******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpdvv+g+ggyv +++++aa+++gip++++Eqn+ipgl+n +l+r+an+v+
+  sp|B7GGI2|MURG_ANOFW  90 QYKPDVVLGTGGYVCGPVVYAAAKLGIPTIIHEQNSIPGLTNTFLSRYANKVA 142
+                           ***************************************************97 PP
+
+>> sp|A7GRN6|MURG_BACCN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.9   0.0   7.5e-40   4.2e-37       1     139 []       3     143 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 131.9 bits;  conditional E-value: 7.5e-40
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+Al re ++  +e r   ++t++gle+++ ++ag+++++i +  ++++k+ s++++k++ ++ k+++++k+ ++
+  sp|A7GRN6|MURG_BACCN   3 ILVSGGGTGGHIYPALALIREIKKLHPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SFDNVKTVMRFVKGVQDSKRYIR 89 
+                           6899******************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           +++pdvv+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v
+  sp|A7GRN6|MURG_BACCN  90 RFNPDVVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143
+                           ***************************************************975 PP
+
+>> sp|B0BRH7|MURG_ACTPJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  133.5   0.1   2.5e-40   1.4e-37       2     138 ..       6     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 133.5 bits;  conditional E-value: 2.5e-40
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+areLq++G+e+r l+t++++e+ + +++g++++ i++  +l+ k+   + lk +++ +ka+ +a++i+k+++
+  sp|B0BRH7|MURG_ACTPJ   6 LVMAGGTGGHVFPAIAVARELQKQGWEIRwLGTKDRMEADLvPKHGIPIEFIQIS-GLKGKG-IGALLKAPFAIFKAVMQARKIIKNYQ 92 
+                           789*************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+l+g+p++++Eqn+++gl+n +l++ a +vl
+  sp|B0BRH7|MURG_ACTPJ  93 PDAVLGMGGYVSGPGGIAAKLCGVPVILHEQNAVAGLTNVWLSKIACRVL 142
+                           *******************************************9987775 PP
+
+>> sp|B3GZK8|MURG_ACTP7  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  133.5   0.1   2.5e-40   1.4e-37       2     138 ..       6     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 133.5 bits;  conditional E-value: 2.5e-40
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+areLq++G+e+r l+t++++e+ + +++g++++ i++  +l+ k+   + lk +++ +ka+ +a++i+k+++
+  sp|B3GZK8|MURG_ACTP7   6 LVMAGGTGGHVFPAIAVARELQKQGWEIRwLGTKDRMEADLvPKHGIPIEFIQIS-GLKGKG-IGALLKAPFAIFKAVMQARKIIKNYQ 92 
+                           789*************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+l+g+p++++Eqn+++gl+n +l++ a +vl
+  sp|B3GZK8|MURG_ACTP7  93 PDAVLGMGGYVSGPGGIAAKLCGVPVILHEQNAVAGLTNVWLSKIACRVL 142
+                           *******************************************9987775 PP
+
+>> sp|Q6HEQ4|MURG1_BACHK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  130.6   0.0     2e-39   1.1e-36       1     139 []       3     143 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 130.6 bits;  conditional E-value: 2e-39
+                            EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                            v+++ggGT+G+++Pa+Al re ++  +e r   ++t++gle+++ +++g+++++i +  ++++k+ sl+++k++ ++lk+++++k+ +
+  sp|Q6HEQ4|MURG1_BACHK   3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKTGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 
+                            7899******************************************************.******.********************** PP
+
+                            HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+        Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                            ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v
+  sp|Q6HEQ4|MURG1_BACHK  89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143
+                            ****************************************************975 PP
+
+>> sp|O07670|MURG_ENTHR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  132.0   0.0   7.1e-40     4e-37       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 132.0 bits;  conditional E-value: 7.1e-40
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+A+ + +++++++ +   +++++gle+++ +e+g+++++++++ ++++kl sl++lk+++ +lk++r+ak+ilk
+  sp|O07670|MURG_ENTHR   3 ILVTGGGTGGHIYPALAFVNYVKTKEPNTEfmyVGAQRGLENKIvPETGMPFRTLEIQ-GFQRKL-SLHNLKTIQLFLKSIREAKKILK 89 
+                           799*******************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           e+kpdvv+g+ggyv++++++aa+++ ip++++Eqn++pg++nk+l+r++++++
+  sp|O07670|MURG_ENTHR  90 EFKPDVVIGTGGYVSGAVVYAASKLAIPTIIHEQNSVPGITNKFLSRYVDRIA 142
+                           **************************************************986 PP
+
+>> sp|A7FM66|MURG_YERP3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.6   0.3     4e-39   2.3e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    2.6   0.0       6.1   3.4e+03      38     108 ..     266     342 ..     253     356 .] 0.53
+
+  Alignments for each domain:
+  == domain 1    score: 129.6 bits;  conditional E-value: 4e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i++  +l+ k+  ++ l+ + + ++a+r+a +i+++++
+  sp|A7FM66|MURG_YERP3   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl
+  sp|A7FM66|MURG_YERP3  96 PDVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145
+                           ***********************************************997 PP
+
+  == domain 2    score: 2.6 bits;  conditional E-value: 6.1
+                           HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           +++v++agl+a  ++ +                         ++                     ++  +l+ +  ++++++++++  +
+  sp|A7FM66|MURG_YERP3 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqPQFT------------------ATSVSSLLAGWDRATLLSMAERARSV 336
+                           567899****99999998888666666555544444443332222..................22333333334444444444444444 PP
+
+                           E--HHH CS
+       Glyco_transf_28 103 aliaal 108
+                           a+  a+
+  sp|A7FM66|MURG_YERP3 337 AIPDAT 342
+                           444333 PP
+
+>> sp|B1JK81|MURG_YERPY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.6   0.3     4e-39   2.3e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    2.6   0.0       6.1   3.4e+03      38     108 ..     266     342 ..     253     356 .] 0.53
+
+  Alignments for each domain:
+  == domain 1    score: 129.6 bits;  conditional E-value: 4e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i++  +l+ k+  ++ l+ + + ++a+r+a +i+++++
+  sp|B1JK81|MURG_YERPY   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl
+  sp|B1JK81|MURG_YERPY  96 PDVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145
+                           ***********************************************997 PP
+
+  == domain 2    score: 2.6 bits;  conditional E-value: 6.1
+                           HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           +++v++agl+a  ++ +                         ++                     ++  +l+ +  ++++++++++  +
+  sp|B1JK81|MURG_YERPY 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqPQFT------------------ATSVSSLLAGWDRATLLSMAERARSV 336
+                           567899****99999998888666666555544444443332222..................22333333334444444444444444 PP
+
+                           E--HHH CS
+       Glyco_transf_28 103 aliaal 108
+                           a+  a+
+  sp|B1JK81|MURG_YERPY 337 AIPDAT 342
+                           444333 PP
+
+>> sp|B2K4E6|MURG_YERPB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.6   0.3     4e-39   2.3e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    2.6   0.0       6.1   3.4e+03      38     108 ..     266     342 ..     253     356 .] 0.53
+
+  Alignments for each domain:
+  == domain 1    score: 129.6 bits;  conditional E-value: 4e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i++  +l+ k+  ++ l+ + + ++a+r+a +i+++++
+  sp|B2K4E6|MURG_YERPB   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl
+  sp|B2K4E6|MURG_YERPB  96 PDVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145
+                           ***********************************************997 PP
+
+  == domain 2    score: 2.6 bits;  conditional E-value: 6.1
+                           HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           +++v++agl+a  ++ +                         ++                     ++  +l+ +  ++++++++++  +
+  sp|B2K4E6|MURG_YERPB 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqPQFT------------------ATSVSSLLAGWDRATLLSMAERARSV 336
+                           567899****99999998888666666555544444443332222..................22333333334444444444444444 PP
+
+                           E--HHH CS
+       Glyco_transf_28 103 aliaal 108
+                           a+  a+
+  sp|B2K4E6|MURG_YERPB 337 AIPDAT 342
+                           444333 PP
+
+>> sp|Q66EK5|MURG_YERPS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.6   0.3     4e-39   2.3e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    2.6   0.0       6.1   3.4e+03      38     108 ..     266     342 ..     253     356 .] 0.53
+
+  Alignments for each domain:
+  == domain 1    score: 129.6 bits;  conditional E-value: 4e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i++  +l+ k+  ++ l+ + + ++a+r+a +i+++++
+  sp|Q66EK5|MURG_YERPS   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl
+  sp|Q66EK5|MURG_YERPS  96 PDVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145
+                           ***********************************************997 PP
+
+  == domain 2    score: 2.6 bits;  conditional E-value: 6.1
+                           HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           +++v++agl+a  ++ +                         ++                     ++  +l+ +  ++++++++++  +
+  sp|Q66EK5|MURG_YERPS 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqPQFT------------------ATSVSSLLAGWDRATLLSMAERARSV 336
+                           567899****99999998888666666555544444443332222..................22333333334444444444444444 PP
+
+                           E--HHH CS
+       Glyco_transf_28 103 aliaal 108
+                           a+  a+
+  sp|Q66EK5|MURG_YERPS 337 AIPDAT 342
+                           444333 PP
+
+>> sp|A1JJJ3|MURG_YERE8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  130.3   0.2   2.5e-39   1.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 130.3 bits;  conditional E-value: 2.5e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + ++ g+e+  i++  +l+ k+  ++ l+ + + ++a+r+ak+i+++++
+  sp|A1JJJ3|MURG_YERE8   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPKNGIEIDFIEIS-GLRGKG-LMAQLTAPVRIYRAVRQAKKIMRDYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+l+gip++++Eqngi+gl+n++l+r a++vl
+  sp|A1JJJ3|MURG_YERE8  96 PDVVLGMGGYVSGPGGLAAWLCGIPVVLHEQNGIAGLTNRWLARIAKKVL 145
+                           ***********************************************997 PP
+
+>> sp|A9MQC2|MURG_SALAR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.3   0.4   4.8e-39   2.7e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    2.9   0.0       5.2   2.9e+03      38     108 ..     266     342 ..     254     351 .. 0.63
+
+  Alignments for each domain:
+  == domain 1    score: 129.3 bits;  conditional E-value: 4.8e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g++++ i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|A9MQC2|MURG_SALAR   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGINIEFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|A9MQC2|MURG_SALAR  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATTVM 145
+                           *********************************************99885 PP
+
+  == domain 2    score: 2.9 bits;  conditional E-value: 5.2
+                           HHHHHH---EEEE----..........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHH CS
+       Glyco_transf_28  38 eefveeagleavpigpd..........vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaal 108
+                           ++++++agl+a  ++ +          ++l +     ++++e  ++  + +++  +l+ ++ d+++ +++++ ++ ++ a+
+  sp|A9MQC2|MURG_SALAR 266 VSEIAAAGLPAIFVPFQhkdrqqywnaLPLEN--AGAAKILEQPQF--TAEAVADTLAGWSRDTLLTMAERARAVSILDAT 342
+                           466799*****999999888855555533333..223333333333..456667777777777777777777766666555 PP
+
+>> sp|P64869|Y1526_MYCTU  Uncharacterized protein Rv1526c/MT1577 OS=Mycobacterium tuberculosis GN=Rv1526c PE=4 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.8   1.0   8.1e-40   4.5e-37       1     138 [.       3     144 ..       3     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 131.8 bits;  conditional E-value: 8.1e-40
+                            EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----................................S- CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd................................vk 56 
+                            +vla++GTrGdveP++A+++eL+rrGh V++a+pp+l efve+agl+ v++gpd                                v+
+  sp|P64869|Y1526_MYCTU   3 FVLAVHGTRGDVEPCAAVGVELRRRGHAVHMAVPPNLIEFVESAGLTGVAYGPDsdeqintvaafvrnltraqnplnlaravkelfVE 90 
+                            89***********************************************************************************99* PP
+
+                            -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +wa  e+ +tl++la+g                          adl++++++++g++anvaE+++ip ++++++p+++ng++
+  sp|P64869|Y1526_MYCTU  91 GWA--EMGTTLTTLADG--------------------------ADLVMTGQTYHGVAANVAEYYDIPAAALHHFPMQVNGQI 144
+                            ***..99**********..........................*************************************97 PP
+
+>> sp|P64870|Y1553_MYCBO  Uncharacterized protein Mb1553c OS=Mycobacterium bovis GN=Mb1553c PE=4 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.8   1.0   8.1e-40   4.5e-37       1     138 [.       3     144 ..       3     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 131.8 bits;  conditional E-value: 8.1e-40
+                            EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----................................S- CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd................................vk 56 
+                            +vla++GTrGdveP++A+++eL+rrGh V++a+pp+l efve+agl+ v++gpd                                v+
+  sp|P64870|Y1553_MYCBO   3 FVLAVHGTRGDVEPCAAVGVELRRRGHAVHMAVPPNLIEFVESAGLTGVAYGPDsdeqintvaafvrnltraqnplnlaravkelfVE 90 
+                            89***********************************************************************************99* PP
+
+                            -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +wa  e+ +tl++la+g                          adl++++++++g++anvaE+++ip ++++++p+++ng++
+  sp|P64870|Y1553_MYCBO  91 GWA--EMGTTLTTLADG--------------------------ADLVMTGQTYHGVAANVAEYYDIPAAALHHFPMQVNGQI 144
+                            ***..99**********..........................*************************************97 PP
+
+>> sp|Q65RY6|MURG_MANSM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.5   0.1     1e-39   5.6e-37       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 131.5 bits;  conditional E-value: 1e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+a+ Lq++G++++ l+t++++e+++ +++g++++ i++  +l+ k+   + l  +++ ++a+ +a++i+ ++k
+  sp|Q65RY6|MURG_MANSM   8 LVMAGGTGGHVFPAIAVAQYLQKQGWDICwLGTKDRMEAQLvPKHGIPIEFIQIS-GLRGKG-IKALLGAPFAICRAIMQARKIILRQK 94 
+                           789****************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ ++aa+l+g+p++++Eqn+++gl+n +l++ a++vl
+  sp|Q65RY6|MURG_MANSM  95 PDAVLGMGGYVSGPGGVAAKLCGVPVILHEQNAVAGLTNVWLSKIAKRVL 144
+                           ***********************************************997 PP
+
+>> sp|B2VD91|MURG_ERWT9  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.7   0.2   3.7e-39   2.1e-36       2     138 ..       7     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 129.7 bits;  conditional E-value: 3.7e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g++++ i +  +l+ k+   + l  +++ ++a+r+a++i+k ++
+  sp|B2VD91|MURG_ERWT9   7 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIEFIRIS-GLRGKG-IKALLAAPLRIFNAWRQARAIMKAWQ 93 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B2VD91|MURG_ERWT9  94 PDVVLGMGGYVSGPGGLAAWSCGIPVVLHEQNGIAGLTNKWLAKIATKVM 143
+                           ***********************************************986 PP
+
+>> sp|Q4QLF8|MURG_HAEI8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.2   0.1   1.3e-39   7.4e-37       2     138 ..       7     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 131.2 bits;  conditional E-value: 1.3e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+a++Lq+++++++ l+t++++e+++ +++g++++ i++  +l+ k+   + l  +++ ++a+ +ak+i++e+k
+  sp|Q4QLF8|MURG_HAEI8   7 LVMAGGTGGHVFPAIAVAQTLQKQEWDICwLGTKDRMEAQLvPKYGIPIRFIQIS-GLRGKG-IKALLNAPFAIFRAVLQAKKIIQEEK 93 
+                           789****************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++a++aa+l+g+p++++Eqn+i+gl+nkll + a+ vl
+  sp|Q4QLF8|MURG_HAEI8  94 PDAVLGMGGYVSGPAGVAAKLCGVPIILHEQNAIAGLTNKLLGKIATCVL 143
+                           *******************************************9999886 PP
+
+>> sp|A5UIR2|MURG_HAEIG  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.2   0.1   1.3e-39   7.4e-37       2     138 ..       7     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 131.2 bits;  conditional E-value: 1.3e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+a++Lq+++++++ l+t++++e+++ +++g++++ i++  +l+ k+   + l  +++ ++a+ +ak+i++e+k
+  sp|A5UIR2|MURG_HAEIG   7 LVMAGGTGGHVFPAIAVAQTLQKQEWDICwLGTKDRMEAQLvPKYGIPIRFIQIS-GLRGKG-IKALLNAPFAIFRAVLQAKKIIQEEK 93 
+                           789****************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++a++aa+l+g+p++++Eqn+i+gl+nkll + a+ vl
+  sp|A5UIR2|MURG_HAEIG  94 PDAVLGMGGYVSGPAGVAAKLCGVPIILHEQNAIAGLTNKLLGKIATCVL 143
+                           *******************************************9999886 PP
+
+>> sp|P45065|MURG_HAEIN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  131.2   0.1   1.3e-39   7.4e-37       2     138 ..       7     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 131.2 bits;  conditional E-value: 1.3e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+a++Lq+++++++ l+t++++e+++ +++g++++ i++  +l+ k+   + l  +++ ++a+ +ak+i++e+k
+  sp|P45065|MURG_HAEIN   7 LVMAGGTGGHVFPAIAVAQTLQKQEWDICwLGTKDRMEAQLvPKYGIPIRFIQIS-GLRGKG-IKALLNAPFAIFRAVLQAKKIIQEEK 93 
+                           789****************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++a++aa+l+g+p++++Eqn+i+gl+nkll + a+ vl
+  sp|P45065|MURG_HAEIN  94 PDAVLGMGGYVSGPAGVAAKLCGVPIILHEQNAIAGLTNKLLGKIATCVL 143
+                           *******************************************9999886 PP
+
+>> sp|A9R124|MURG_YERPG  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  128.3   0.3   9.8e-39   5.5e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    2.8   0.0       5.3     3e+03      38     116 ..     266     350 ..     254     356 .] 0.56
+
+  Alignments for each domain:
+  == domain 1    score: 128.3 bits;  conditional E-value: 9.8e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i++  +l+ k+  ++ l+ + + ++a+r+a +i+++++
+  sp|A9R124|MURG_YERPG   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p+vv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl
+  sp|A9R124|MURG_YERPG  96 PNVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145
+                           ***********************************************997 PP
+
+  == domain 2    score: 2.8 bits;  conditional E-value: 5.3
+                           HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           +++v++agl+a  ++ +                                         ++  +  ++  +l+++  ++++++++++  +
+  sp|A9R124|MURG_YERPG 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqP----------------QF--TATSVSSLLASWDRATLLSMAERARSV 336
+                           567899****99999998888666655433333333332222................22..334444555555555555555555555 PP
+
+                           E--HHHHHHHHHHH CS
+       Glyco_transf_28 103 aliaallagipanv 116
+                           a+  a+ + ++ +v
+  sp|A9R124|MURG_YERPG 337 AIPDATERVAAEVV 350
+                           55555555554444 PP
+
+>> sp|Q1C214|MURG_YERPA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  128.3   0.3   9.8e-39   5.5e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    2.8   0.0       5.3     3e+03      38     116 ..     266     350 ..     254     356 .] 0.56
+
+  Alignments for each domain:
+  == domain 1    score: 128.3 bits;  conditional E-value: 9.8e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i++  +l+ k+  ++ l+ + + ++a+r+a +i+++++
+  sp|Q1C214|MURG_YERPA   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p+vv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl
+  sp|Q1C214|MURG_YERPA  96 PNVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145
+                           ***********************************************997 PP
+
+  == domain 2    score: 2.8 bits;  conditional E-value: 5.3
+                           HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           +++v++agl+a  ++ +                                         ++  +  ++  +l+++  ++++++++++  +
+  sp|Q1C214|MURG_YERPA 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqP----------------QF--TATSVSSLLASWDRATLLSMAERARSV 336
+                           567899****99999998888666655433333333332222................22..334444555555555555555555555 PP
+
+                           E--HHHHHHHHHHH CS
+       Glyco_transf_28 103 aliaallagipanv 116
+                           a+  a+ + ++ +v
+  sp|Q1C214|MURG_YERPA 337 AIPDATERVAAEVV 350
+                           55555555554444 PP
+
+>> sp|Q1CMM7|MURG_YERPN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  128.3   0.3   9.8e-39   5.5e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    2.8   0.0       5.3     3e+03      38     116 ..     266     350 ..     254     356 .] 0.56
+
+  Alignments for each domain:
+  == domain 1    score: 128.3 bits;  conditional E-value: 9.8e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i++  +l+ k+  ++ l+ + + ++a+r+a +i+++++
+  sp|Q1CMM7|MURG_YERPN   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p+vv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl
+  sp|Q1CMM7|MURG_YERPN  96 PNVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145
+                           ***********************************************997 PP
+
+  == domain 2    score: 2.8 bits;  conditional E-value: 5.3
+                           HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           +++v++agl+a  ++ +                                         ++  +  ++  +l+++  ++++++++++  +
+  sp|Q1CMM7|MURG_YERPN 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqP----------------QF--TATSVSSLLASWDRATLLSMAERARSV 336
+                           567899****99999998888666655433333333332222................22..334444555555555555555555555 PP
+
+                           E--HHHHHHHHHHH CS
+       Glyco_transf_28 103 aliaallagipanv 116
+                           a+  a+ + ++ +v
+  sp|Q1CMM7|MURG_YERPN 337 AIPDATERVAAEVV 350
+                           55555555554444 PP
+
+>> sp|Q8ZIE9|MURG_YERPE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  128.3   0.3   9.8e-39   5.5e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    2.8   0.0       5.3     3e+03      38     116 ..     266     350 ..     254     356 .] 0.56
+
+  Alignments for each domain:
+  == domain 1    score: 128.3 bits;  conditional E-value: 9.8e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i++  +l+ k+  ++ l+ + + ++a+r+a +i+++++
+  sp|Q8ZIE9|MURG_YERPE   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p+vv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl
+  sp|Q8ZIE9|MURG_YERPE  96 PNVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145
+                           ***********************************************997 PP
+
+  == domain 2    score: 2.8 bits;  conditional E-value: 5.3
+                           HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           +++v++agl+a  ++ +                                         ++  +  ++  +l+++  ++++++++++  +
+  sp|Q8ZIE9|MURG_YERPE 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqP----------------QF--TATSVSSLLASWDRATLLSMAERARSV 336
+                           567899****99999998888666655433333333332222................22..334444555555555555555555555 PP
+
+                           E--HHHHHHHHHHH CS
+       Glyco_transf_28 103 aliaallagipanv 116
+                           a+  a+ + ++ +v
+  sp|Q8ZIE9|MURG_YERPE 337 AIPDATERVAAEVV 350
+                           55555555554444 PP
+
+>> sp|O07109|MURG_ENTFA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.0   0.0   6.2e-39   3.5e-36       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 129.0 bits;  conditional E-value: 6.2e-39
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+++ ++++++ +  +   ++t++gle+++ ++a++++++i+++ +++++l s++++k+++ +l +++kak+i++
+  sp|O07109|MURG_ENTFA   3 ILVTGGGTGGHIYPALSFVEHVKKEAPATEflyVGTENGLESQIvPKAKIPFKTIKIQ-GFKRSL-SPQNFKTIYLFLTSINKAKKIIR 89 
+                           799*******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           e++pdvv+g+ggyv++++++aa  ++ip++++Eqn+ipg++nk+l+r++++++
+  sp|O07109|MURG_ENTFA  90 EFQPDVVIGTGGYVSGAVVYAAHQLKIPTIIHEQNSIPGMTNKFLSRYVDKIA 142
+                           **************************************************987 PP
+
+>> sp|A3QIM1|MURG_SHELP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.5   0.1   4.3e-39   2.4e-36       1     138 [.       7     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 129.5 bits;  conditional E-value: 4.3e-39
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a++L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  +++ l+++ +a+e++ke+
+  sp|A3QIM1|MURG_SHELP   7 ILIMAGGTGGHVFPALAVAKALAKQGWQVRwLGTADRMEARLvPQHGFDIDFIDIK-GVRGNG-LIRKLAAPFKILRSIMQAREVIKEF 93 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kp+vv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++nkll+r a +vl
+  sp|A3QIM1|MURG_SHELP  94 KPHVVLGMGGFASGPGGVAAKLSGIPLVLHEQNAIPGMTNKLLSRIASRVL 144
+                           ***********************************************9986 PP
+
+>> sp|A8G9S7|MURG_SERP5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.0   0.2   6.2e-39   3.5e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 129.0 bits;  conditional E-value: 6.2e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + l+ +++ + a+r+ak+i+++++
+  sp|A8G9S7|MURG_SERP5   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-LKAQLSAPLRIWHAVRQAKAIMRNYQ 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+l+gip++++Eqngi+gl+n++l+r a++vl
+  sp|A8G9S7|MURG_SERP5  96 PDVVLGMGGYVSGPGGLAAWLCGIPVVLHEQNGIAGLTNRWLARIAKTVL 145
+                           **********************************************9986 PP
+
+>> sp|B7LWF6|MURG_ESCF3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.0   0.3     6e-39   3.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 129.0 bits;  conditional E-value: 6e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L ++G+eVr l+t +++e+ + +++g+e+  i +  +l+ k+   + l  +++ ++a+r+a++i+k +k
+  sp|B7LWF6|MURG_ESCF3   9 MVMAGGTGGHVFPGLAVAHHLIAQGWEVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALLAAPLRIFNAWRQARAIMKAFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B7LWF6|MURG_ESCF3  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|A7MIE5|MURG_ENTS8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  128.7   0.2   7.6e-39   4.3e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 128.7 bits;  conditional E-value: 7.6e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + l+ + + ++a+r+a++i+k++k
+  sp|A7MIE5|MURG_ENTS8   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-VKALLLAPVRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a +v+
+  sp|A7MIE5|MURG_ENTS8  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIASRVM 145
+                           ********************************************999885 PP
+
+>> sp|C6DEU3|MURG_PECCP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  128.8   0.2   7.1e-39     4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 128.8 bits;  conditional E-value: 7.1e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+  ++ l+ + + ++a+r+a++i+++++
+  sp|C6DEU3|MURG_PECCP   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IWAQLSAPIRIFQAVRQARAIMRRYQ 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+l+gip++++Eqngi+gl+n++l+  a++vl
+  sp|C6DEU3|MURG_PECCP  96 PDVVLGMGGYVSGPGGLAAWLCGIPVVLHEQNGIAGLTNRWLSHIAKKVL 145
+                           **********************************************9997 PP
+
+>> sp|Q88V81|MURG_LACPL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.1   2.4e-38   1.3e-35       2     138 ..       4     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.4e-38
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++ggGT+G+++Pa+Al ++L++ ++e     ++t++gle+++ +e+g+++++i+++ +++++l sl+++k+++ +lk++  a++ +k 
+  sp|Q88V81|MURG_LACPL   4 MISGGGTGGHIYPALALIDALKAHDPEAQvqfVGTHRGLESRIvPERGIDFKTIKIQ-GFKRSL-SLQNVKTVYLFLKSVVTARKYIKA 90 
+                           5799**********************99999**************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpdvvvg+ggyv++++++aa+  +ip++++Eqn++ g++nk+l+r++++++
+  sp|Q88V81|MURG_LACPL  91 FKPDVVVGTGGYVSGAVVFAASQMHIPTVIHEQNSVVGVTNKFLSRFVDKIA 142
+                           *************************************************987 PP
+
+>> sp|Q8Z9G9|MURG_SALTI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.8   0.2   1.5e-38   8.3e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.8 bits;  conditional E-value: 1.5e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t++++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|Q8Z9G9|MURG_SALTI   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTSDRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|Q8Z9G9|MURG_SALTI  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|B4F111|MURG_PROMH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.6   0.1   3.5e-38   1.9e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    3.2   0.0         4   2.3e+03      38     116 ..     271     355 ..     257     358 .. 0.68
+
+  Alignments for each domain:
+  == domain 1    score: 126.6 bits;  conditional E-value: 3.5e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a+ Lq +G+++r l+t +++e+++ +++g+e++ i +  +l+ k+   + +  + +  ka+++a++i+k+++
+  sp|B4F111|MURG_PROMH   9 MVMAGGTGGHVFPGLAVAHYLQSQGWDIRwLGTADRMEAQLvPKHGIEIEYIRIS-GLRGKG-VKALIAAPIRIIKAIFQARRIMKRYQ 95 
+                           5899***************************************************.******.9999********************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++vl
+  sp|B4F111|MURG_PROMH  96 PDAVLGMGGYVSGPGGVAAWSCGIPVVLHEQNGIAGLTNRWLSKIAKRVL 145
+                           ***********************************************997 PP
+
+  == domain 2    score: 3.2 bits;  conditional E-value: 4
+                           HHHHHH---EEEE----....S------...-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHH CS
+       Glyco_transf_28  38 eefveeagleavpigpd....vklwakl..eslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanv 116
+                           ++++++agl+a  ++ +     ++w+ l  e  ++ + + ++  + +++  +l+++  + ++ +++ ++ +a++ a+ + + +++
+  sp|B4F111|MURG_PROMH 271 VSEIAAAGLPAIFVPFQhkdrQQYWNALplENAGAARIIEQNDLTPEAIADTLENWDRHQLMLMAEKAQSVAITDATERVANVII 355
+                           4566999999999999988885555543113344445555555577778888888888888888888888888888777777665 PP
+
+>> sp|A0L1P2|MURG_SHESA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.0   0.2   2.5e-38   1.4e-35       1     138 [.       8     145 ..       8     146 .. 0.99
+   2 ?    3.7   0.1       2.9   1.6e+03      54     117 ..     285     357 ..     254     361 .. 0.68
+
+  Alignments for each domain:
+  == domain 1    score: 127.0 bits;  conditional E-value: 2.5e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++ +++ +ak++++e+
+  sp|A0L1P2|MURG_SHESA   8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVVRSILQAKAVIAEF 94 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+lag+p++++Eqn+ipg++nkll+r an+vl
+  sp|A0L1P2|MURG_SHESA  95 KPDVVLGMGGFASGPGGVAAKLAGVPLVLHEQNAIPGMTNKLLSRIANQVL 145
+                           ************************************************986 PP
+
+  == domain 2    score: 3.7 bits;  conditional E-value: 2.9
+                           -..............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHH CS
+       Glyco_transf_28  54 d..............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanva 117
+                                          v++ a +  +++++++ +      +  ++l++++ + ++++g+++ d+a++ a+ + +++ +a
+  sp|A0L1P2|MURG_SHESA 285 PhavddhqtrnaqvlVEAGAAFLLPQAILDVNKL----VSKLQLLANDR-AELAQMGQRARDVAVLDATEQVAQVCIA 357
+                           3446666666666665666666677777777777....44445555555.6677***************999998876 PP
+
+>> sp|Q0HZR6|MURG_SHESR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.0   0.2   2.5e-38   1.4e-35       1     138 [.       8     145 ..       8     146 .. 0.99
+   2 ?    3.7   0.1       2.9   1.6e+03      54     117 ..     285     357 ..     254     361 .. 0.68
+
+  Alignments for each domain:
+  == domain 1    score: 127.0 bits;  conditional E-value: 2.5e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++ +++ +ak++++e+
+  sp|Q0HZR6|MURG_SHESR   8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVVRSILQAKAVIAEF 94 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+lag+p++++Eqn+ipg++nkll+r an+vl
+  sp|Q0HZR6|MURG_SHESR  95 KPDVVLGMGGFASGPGGVAAKLAGVPLVLHEQNAIPGMTNKLLSRIANQVL 145
+                           ************************************************986 PP
+
+  == domain 2    score: 3.7 bits;  conditional E-value: 2.9
+                           -..............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHH CS
+       Glyco_transf_28  54 d..............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanva 117
+                                          v++ a +  +++++++ +      +  ++l++++ + ++++g+++ d+a++ a+ + +++ +a
+  sp|Q0HZR6|MURG_SHESR 285 PhavddhqtrnaqvlVEAGAAFLLPQAILDVNKL----VSKLQLLANDR-AELAQMGQRARDVAVLDATEQVAQVCIA 357
+                           3446666666666665666666677777777777....44445555555.6677***************999998876 PP
+
+>> sp|B5BLC2|MURG_SALPK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.5   0.3   1.7e-38   9.6e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.5 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|B5BLC2|MURG_SALPK   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l+r a++v+
+  sp|B5BLC2|MURG_SALPK  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLARIATTVM 145
+                           **********************************************9885 PP
+
+>> sp|Q5PDC8|MURG_SALPA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.5   0.3   1.7e-38   9.6e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.5 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|Q5PDC8|MURG_SALPA   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l+r a++v+
+  sp|Q5PDC8|MURG_SALPA  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLARIATTVM 145
+                           **********************************************9885 PP
+
+>> sp|Q9K9T0|MURG_BACHD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.6   0.0   4.1e-39   2.3e-36       1     138 [.       3     142 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 129.6 bits;  conditional E-value: 4.1e-39
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT+G+++Pa+A+ +e ++r+ +     ++t++gle+++ + +g+++++i +  ++++kl s++++k++ ++l+++++ak++l 
+  sp|Q9K9T0|MURG_BACHD   3 IVVSGGGTGGHIYPALAFINEMKKRDERLDvlyIGTERGLESEIvPREGIPFQTIHIT-GFQRKL-SMENVKTVVRFLRGTKRAKALLN 89 
+                           799***********************877777**************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           e+kpdvv+g+ggyv +++++aa++++ip++++Eqn++pgl+nk+l+r++++++
+  sp|Q9K9T0|MURG_BACHD  90 EFKPDVVIGTGGYVCGPVVYAAAKLKIPTVIHEQNSVPGLTNKFLSRYVDRIA 142
+                           **************************************************987 PP
+
+>> sp|Q8Y5M2|MURG_LISMO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.2   0.0   5.2e-39   2.9e-36       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 129.2 bits;  conditional E-value: 5.2e-39
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+v+Pa+Al reL++  +e +   ++t++gle+ + + +g+++++i++  +++++l sl+++k++ ++l + +k+k+il+
+  sp|Q8Y5M2|MURG_LISMO   3 VAISGGGTGGHVYPALALIRELKKSHPEAEflyIGTEKGLEAGIvKREGIPFEAIEIT-GFKRSL-SLENIKTVMRFLSGAKKSKQILR 89 
+                           6899******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+++gl+nk+l+r+ ++v+
+  sp|Q8Y5M2|MURG_LISMO  90 DFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSVAGLTNKFLSRYTDKVA 142
+                           **************************************************997 PP
+
+>> sp|A9MZL9|MURG_SALPB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.3   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|A9MZL9|MURG_SALPB   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|A9MZL9|MURG_SALPB  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|B4TJ87|MURG_SALHS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.3   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|B4TJ87|MURG_SALHS   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|B4TJ87|MURG_SALHS  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|B4TXH8|MURG_SALSV  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.3   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|B4TXH8|MURG_SALSV   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|B4TXH8|MURG_SALSV  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|B5F7W4|MURG_SALA4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.3   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|B5F7W4|MURG_SALA4   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|B5F7W4|MURG_SALA4  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|Q8ZRU3|MURG_SALTY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.3   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|Q8ZRU3|MURG_SALTY   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|Q8ZRU3|MURG_SALTY  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|B4SU50|MURG_SALNS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.3   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|B4SU50|MURG_SALNS   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|B4SU50|MURG_SALNS  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|A1REZ6|MURG_SHESW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.0   0.2   2.6e-38   1.5e-35       1     138 [.       8     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.0 bits;  conditional E-value: 2.6e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++ +++ +ak++++e+
+  sp|A1REZ6|MURG_SHESW   8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVIRSILQAKAVIAEF 94 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl
+  sp|A1REZ6|MURG_SHESW  95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145
+                           ***********************************************9986 PP
+
+>> sp|A4Y2N6|MURG_SHEPC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.0   0.2   2.6e-38   1.5e-35       1     138 [.       8     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.0 bits;  conditional E-value: 2.6e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++ +++ +ak++++e+
+  sp|A4Y2N6|MURG_SHEPC   8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVIRSILQAKAVIAEF 94 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl
+  sp|A4Y2N6|MURG_SHEPC  95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145
+                           ***********************************************9986 PP
+
+>> sp|A6T4N3|MURG_KLEP7  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.5   0.1   1.7e-38   9.6e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.5 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + ++ g+e+  i +  +l+ k+   + l+ + + ++a+r+a++i+k+++
+  sp|A6T4N3|MURG_KLEP7   9 MVMAGGTGGHVFPGLAVAHHLMDQGWQVRwLGTADRMEADLvPKNGIEIDFIRIS-GLRGKG-IKAQLLAPVRIFNAWRQARAIMKRFQ 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|A6T4N3|MURG_KLEP7  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIAKKVM 145
+                           **********************************************9986 PP
+
+>> sp|B5RH64|MURG_SALG2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.3   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|B5RH64|MURG_SALG2   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|B5RH64|MURG_SALG2  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|A8ALK6|MURG_CITK8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  128.1   0.2   1.1e-38   6.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 128.1 bits;  conditional E-value: 1.1e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|A8ALK6|MURG_CITK8   9 MVMAGGTGGHVFPGLAVAHHLMDQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKQFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|A8ALK6|MURG_CITK8  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|Q57TD0|MURG_SALCH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.3   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|Q57TD0|MURG_SALCH   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|Q57TD0|MURG_SALCH  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|A6WID1|MURG_SHEB8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.4   0.2   3.9e-38   2.2e-35       1     138 [.       8     145 ..       8     146 .. 0.98
+   2 ?    2.3   0.0         8   4.5e+03      54     116 ..     287     356 ..     254     360 .. 0.67
+
+  Alignments for each domain:
+  == domain 1    score: 126.4 bits;  conditional E-value: 3.9e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++ +++ +ak++++e+
+  sp|A6WID1|MURG_SHEB8   8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LIRKLAAPFKVVRSILQAKAVIAEF 94 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl
+  sp|A6WID1|MURG_SHEB8  95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145
+                           ***********************************************9986 PP
+
+  == domain 2    score: 2.3 bits;  conditional E-value: 8
+                           -............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHH CS
+       Glyco_transf_28  54 d............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanv 116
+                                        v++ a +  +++++++ +      + k  l  +  + ++++g+++ d+a++ a+ + +++ +
+  sp|A6WID1|MURG_SHEB8 287 AvddhqtrngqvlVEAGAAFLLPQAILDVNKL-----AGKLQLLANDRTELARMGQRARDVAVLDATEQVAAVCI 356
+                           15555555555555555555566666666666.....4444455555677889************9999988765 PP
+
+>> sp|A9KY29|MURG_SHEB9  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.4   0.2   3.9e-38   2.2e-35       1     138 [.       8     145 ..       8     146 .. 0.98
+   2 ?    2.3   0.0         8   4.5e+03      54     116 ..     287     356 ..     254     360 .. 0.67
+
+  Alignments for each domain:
+  == domain 1    score: 126.4 bits;  conditional E-value: 3.9e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++ +++ +ak++++e+
+  sp|A9KY29|MURG_SHEB9   8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LIRKLAAPFKVVRSILQAKAVIAEF 94 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl
+  sp|A9KY29|MURG_SHEB9  95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145
+                           ***********************************************9986 PP
+
+  == domain 2    score: 2.3 bits;  conditional E-value: 8
+                           -............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHH CS
+       Glyco_transf_28  54 d............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanv 116
+                                        v++ a +  +++++++ +      + k  l  +  + ++++g+++ d+a++ a+ + +++ +
+  sp|A9KY29|MURG_SHEB9 287 AvddhqtrngqvlVEAGAAFLLPQAILDVNKL-----AGKLQLLANDRTELARMGQRARDVAVLDATEQVAAVCI 356
+                           15555555555555555555566666666666.....4444455555677889************9999988765 PP
+
+>> sp|B8E698|MURG_SHEB2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.4   0.2   3.9e-38   2.2e-35       1     138 [.       8     145 ..       8     146 .. 0.98
+   2 ?    2.3   0.0         8   4.5e+03      54     116 ..     287     356 ..     254     360 .. 0.67
+
+  Alignments for each domain:
+  == domain 1    score: 126.4 bits;  conditional E-value: 3.9e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++ +++ +ak++++e+
+  sp|B8E698|MURG_SHEB2   8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LIRKLAAPFKVVRSILQAKAVIAEF 94 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl
+  sp|B8E698|MURG_SHEB2  95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145
+                           ***********************************************9986 PP
+
+  == domain 2    score: 2.3 bits;  conditional E-value: 8
+                           -............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHH CS
+       Glyco_transf_28  54 d............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanv 116
+                                        v++ a +  +++++++ +      + k  l  +  + ++++g+++ d+a++ a+ + +++ +
+  sp|B8E698|MURG_SHEB2 287 AvddhqtrngqvlVEAGAAFLLPQAILDVNKL-----AGKLQLLANDRTELARMGQRARDVAVLDATEQVAAVCI 356
+                           15555555555555555555566666666666.....4444455555677889************9999988765 PP
+
+>> sp|B5Y1U7|MURG_KLEP3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.5   0.1   1.7e-38   9.6e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.5 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + ++ g+e+  i +  +l+ k+   + l+ + + ++a+r+a++i+k+++
+  sp|B5Y1U7|MURG_KLEP3   9 MVMAGGTGGHVFPGLAVAHHLMDQGWQVRwLGTADRMEADLvPKNGIEIDFIRIS-GLRGKG-IKAQLLAPVRIFNAWRQARAIMKRFQ 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B5Y1U7|MURG_KLEP3  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIAKKVM 145
+                           **********************************************9986 PP
+
+>> sp|A3CZM1|MURG_SHEB5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.4   0.2   3.9e-38   2.2e-35       1     138 [.       8     145 ..       8     146 .. 0.98
+   2 ?    2.2   0.0       8.1   4.5e+03      54     116 ..     287     356 ..     255     360 .. 0.67
+
+  Alignments for each domain:
+  == domain 1    score: 126.4 bits;  conditional E-value: 3.9e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++ +++ +ak++++e+
+  sp|A3CZM1|MURG_SHEB5   8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LIRKLAAPFKVVRSILQAKAVIAEF 94 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl
+  sp|A3CZM1|MURG_SHEB5  95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145
+                           ***********************************************9986 PP
+
+  == domain 2    score: 2.2 bits;  conditional E-value: 8.1
+                           -............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHH CS
+       Glyco_transf_28  54 d............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanv 116
+                                        v++ a +  +++++++ +      + k  l  +  + ++++g+++ d+a++ a+ + +++ +
+  sp|A3CZM1|MURG_SHEB5 287 AvddhqtrngqvlVEAGAAFLLPQAILDVNKL-----AGKLQLLANDRTELARMGQRARDVAVLDATEQVAAVCI 356
+                           15555555555555555555566666666666.....4444455555677889************9999988765 PP
+
+>> sp|Q7U336|MURG_HAEDU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.7   0.1   1.6e-38   8.9e-36       2     138 ..       6     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.7 bits;  conditional E-value: 1.6e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+a+eLq++G++++ l+t++++e+++ ++++++++ i++  +l+ k+  l+ +k ++  lka+ +a  i+k+++
+  sp|Q7U336|MURG_HAEDU   6 LIMAGGTGGHVFPAIAVAQELQKQGWQICwLGTKDRMEAELvPQYNIPIEFIQIS-GLKGKG-VLALIKAPFTILKAVLQALNIIKKYR 92 
+                           789****************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+l+++p++++Eqn+i+gl+n +l++ a++vl
+  sp|Q7U336|MURG_HAEDU  93 PDAVLGMGGYVSGPGGIAARLCNVPIVLHEQNAIAGLTNVWLAKIAKRVL 142
+                           ***********************************************997 PP
+
+>> sp|B7VJ03|MURG_VIBSL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  128.5   0.1   8.7e-39   4.9e-36       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 128.5 bits;  conditional E-value: 8.7e-39
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+ + +++g+e+  i+++ +l+ ++  +k +k +++  +a+ +a++++k ++
+  sp|B7VJ03|MURG_VIBSL   8 LVMAGGTGGHVFPGLAVAKKLQQQGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-VSKLIKAPFQIINAILQARRHIKAWQ 94 
+                           789*************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+
+  sp|B7VJ03|MURG_VIBSL  95 PDVVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNQWLSKIAKKVF 144
+                           ***********************************************997 PP
+
+>> sp|Q0I1D3|MURG_HAES1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  128.2   0.1   1.1e-38     6e-36       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 128.2 bits;  conditional E-value: 1.1e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+a+ Lq+++++++ l+t +++e+++ +++g++++ i++  +l+ k+  ++ lk ++  l+a+ +a++i+k+++
+  sp|Q0I1D3|MURG_HAES1   8 LVMAGGTGGHVFPAIAVAQYLQKQDWDICwLGTRDRMEAKLvPKHGIPIEFIQIS-GLRGKG-LITLLKAPFVILRAVLQARKIIKKYQ 94 
+                           789****************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+l++ip++v+Eqn++ gl+n ll++ a++vl
+  sp|Q0I1D3|MURG_HAES1  95 PDVVLGMGGYVSGPGGVAAKLCNIPVVVHEQNAVLGLTNSLLAKIATRVL 144
+                           ***********************************************997 PP
+
+>> sp|B5FI72|MURG_SALDC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.3   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|B5FI72|MURG_SALDC   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|B5FI72|MURG_SALDC  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|A2RJQ4|MURG_LACLM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.0   2.4e-38   1.3e-35       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.4e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+A+ + L++++++ +   ++t++gle+++ + ag++ ++++++ +l+++l s++++k++++++k++ +ak+i+k
+  sp|A2RJQ4|MURG_LACLM   3 IIITGGGTGGHIYPALAFLKYLKQEEPDTEvlyIGTKKGLESKIvPRAGIQLKTVDIQ-GLRRSL-SPQNIKTAYKFFKSVSDAKKIMK 89 
+                           689*******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpdvv+g+ggyva+++++aa+ ++ip++++E n+ pg++n++l++++++++
+  sp|A2RJQ4|MURG_LACLM  90 DFKPDVVLGTGGYVAGPVVFAAAQLKIPTIIHEGNSFPGITNRFLAKKVDRIA 142
+                           **************************************************987 PP
+
+>> sp|Q02XY0|MURG_LACLS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.0   2.4e-38   1.3e-35       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.4e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+A+ + L++++++ +   ++t++gle+++ + ag++ ++++++ +l+++l s++++k++++++k++ +ak+i+k
+  sp|Q02XY0|MURG_LACLS   3 IIITGGGTGGHIYPALAFLKYLKQEEPDTEvlyIGTKKGLESKIvPRAGIQLKTVDIQ-GLRRSL-SPQNIKTAYKFFKSVSDAKKIMK 89 
+                           689*******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpdvv+g+ggyva+++++aa+ ++ip++++E n+ pg++n++l++++++++
+  sp|Q02XY0|MURG_LACLS  90 DFKPDVVLGTGGYVAGPVVFAAAQLKIPTIIHEGNSFPGITNRFLAKKVDRIA 142
+                           **************************************************987 PP
+
+>> sp|B7MNU9|MURG_ECO81  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B7MNU9|MURG_ECO81   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B7MNU9|MURG_ECO81  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B7NHJ6|MURG_ECO7I  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B7NHJ6|MURG_ECO7I   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B7NHJ6|MURG_ECO7I  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B7UIE0|MURG_ECO27  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B7UIE0|MURG_ECO27   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B7UIE0|MURG_ECO27  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|Q0TLP9|MURG_ECOL5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|Q0TLP9|MURG_ECOL5   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|Q0TLP9|MURG_ECOL5  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|Q8FL64|MURG_ECOL6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|Q8FL64|MURG_ECOL6   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|Q8FL64|MURG_ECOL6  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|A1A7D5|MURG_ECOK1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|A1A7D5|MURG_ECOK1   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|A1A7D5|MURG_ECOK1  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B7MAL3|MURG_ECO45  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B7MAL3|MURG_ECO45   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B7MAL3|MURG_ECO45  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|Q1RGA5|MURG_ECOUT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|Q1RGA5|MURG_ECOUT   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|Q1RGA5|MURG_ECOUT  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|Q6D0I3|MURG_ERWCT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.2   0.2   2.2e-38   1.2e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.2 bits;  conditional E-value: 2.2e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + l+ + + ++a+r+a++i+++++
+  sp|Q6D0I3|MURG_ERWCT   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IRAQLSAPIRIFQAVRQARAIMRRYQ 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+l+gip++++Eqngi+gl+n++l+  a++vl
+  sp|Q6D0I3|MURG_ERWCT  96 PDVVLGMGGYVSGPGGLAAWLCGIPVVLHEQNGIAGLTNRWLSHIAKKVL 145
+                           **********************************************9997 PP
+
+>> sp|B5YZC6|MURG_ECO5E  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B5YZC6|MURG_ECO5E   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B5YZC6|MURG_ECO5E  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|Q8X9Y8|MURG_ECO57  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|Q8X9Y8|MURG_ECO57   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|Q8X9Y8|MURG_ECO57  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|A7ZHI1|MURG_ECO24  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|A7ZHI1|MURG_ECO24   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|A7ZHI1|MURG_ECO24  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B1LG27|MURG_ECOSM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B1LG27|MURG_ECOSM   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B1LG27|MURG_ECOSM  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B6HZ67|MURG_ECOSE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B6HZ67|MURG_ECOSE   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B6HZ67|MURG_ECOSE  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B7M133|MURG_ECO8A  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B7M133|MURG_ECO8A   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B7M133|MURG_ECO8A  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B7N7W3|MURG_ECOLU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B7N7W3|MURG_ECOLU   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B7N7W3|MURG_ECOLU  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|Q326E5|MURG_SHIBS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|Q326E5|MURG_SHIBS   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|Q326E5|MURG_SHIBS  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|Q3Z5R9|MURG_SHISS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|Q3Z5R9|MURG_SHISS   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|Q3Z5R9|MURG_SHISS  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|Q32K02|MURG_SHIDS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|Q32K02|MURG_SHIDS   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|Q32K02|MURG_SHIDS  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B2U295|MURG_SHIB3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B2U295|MURG_SHIB3   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B2U295|MURG_SHIB3  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B1IR88|MURG_ECOLC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B1IR88|MURG_ECOLC   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B1IR88|MURG_ECOLC  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B1XC67|MURG_ECODH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|B1XC67|MURG_ECODH   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B1XC67|MURG_ECODH  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|C4ZRI5|MURG_ECOBW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|C4ZRI5|MURG_ECOBW   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|C4ZRI5|MURG_ECOBW  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|P17443|MURG_ECOLI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|P17443|MURG_ECOLI   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|P17443|MURG_ECOLI  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|A7ZW42|MURG_ECOHS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.3   1.7e-38   9.4e-36       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|A7ZW42|MURG_ECOHS   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|A7ZW42|MURG_ECOHS  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|A4TQ83|MURG_YERPP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  125.8   0.3     6e-38   3.4e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+   2 ?    2.8   0.0       5.3     3e+03      38     116 ..     266     350 ..     254     356 .] 0.56
+
+  Alignments for each domain:
+  == domain 1    score: 125.8 bits;  conditional E-value: 6e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++ GT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i++  +l+ k+  ++ l+ + + ++a+r+a +i+++++
+  sp|A4TQ83|MURG_YERPP   9 MVMAAGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 
+                           57899**************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p+vv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl
+  sp|A4TQ83|MURG_YERPP  96 PNVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145
+                           ***********************************************997 PP
+
+  == domain 2    score: 2.8 bits;  conditional E-value: 5.3
+                           HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           +++v++agl+a  ++ +                                         ++  +  ++  +l+++  ++++++++++  +
+  sp|A4TQ83|MURG_YERPP 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqP----------------QF--TATSVSSLLASWDRATLLSMAERARSV 336
+                           567899****99999998888666655433333333332222................22..334444555555555555555555555 PP
+
+                           E--HHHHHHHHHHH CS
+       Glyco_transf_28 103 aliaallagipanv 116
+                           a+  a+ + ++ +v
+  sp|A4TQ83|MURG_YERPP 337 AIPDATERVAAEVV 350
+                           55555555554444 PP
+
+>> sp|Q9CF92|MURG_LACLA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.1   0.0   4.7e-38   2.6e-35       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 126.1 bits;  conditional E-value: 4.7e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+A+ + L + +++ +   ++t++gle+++ ++ag++ ++++++ +l+++l s+++lk++++++k++ +ak+i+k
+  sp|Q9CF92|MURG_LACLA   3 IIITGGGTGGHIYPALAFLKYLEKVEPDTEvlyIGTKKGLEAKIvPQAGIKLKTVDIQ-GLRRSL-SPQNLKTAYKFFKSVSDAKKIMK 89 
+                           689***************************99**************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           e+kpdvv+g+ggyva+++++aa+ ++ip++++E n+ pg++n++l++++++++
+  sp|Q9CF92|MURG_LACLA  90 EFKPDVVLGTGGYVAGPVVYAAAQLKIPTIIHEGNSFPGITNRFLAKKVDRIA 142
+                           **************************************************987 PP
+
+>> sp|B5R2M4|MURG_SALEP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  125.8   0.2   5.8e-38   3.2e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 125.8 bits;  conditional E-value: 5.8e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+ +G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l  +++ ++a+r+a++i+k++k
+  sp|B5R2M4|MURG_SALEP   9 MVMAGGTGGHVFPGLAVAHHLMSQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+
+  sp|B5R2M4|MURG_SALEP  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145
+                           *********************************************99885 PP
+
+>> sp|Q0T8A7|MURG_SHIF8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.2   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a+ L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|Q0T8A7|MURG_SHIF8   9 MVMAGGTGGHVFPGLAVAHYLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|Q0T8A7|MURG_SHIF8  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|Q83MN4|MURG_SHIFL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.2   2.3e-38   1.3e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a+ L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r+a++i+k +k
+  sp|Q83MN4|MURG_SHIFL   9 MVMAGGTGGHVFPGLAVAHYLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|Q83MN4|MURG_SHIFL  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|Q8CX35|MURG_SHEON  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  124.8   0.2   1.2e-37   6.6e-35       1     138 [.       8     145 ..       8     146 .. 0.98
+   2 ?    3.8   0.1       2.6   1.5e+03      54     117 ..     285     357 ..     255     361 .. 0.68
+
+  Alignments for each domain:
+  == domain 1    score: 124.8 bits;  conditional E-value: 1.2e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++ +++ +ak++++e+
+  sp|Q8CX35|MURG_SHEON   8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVVRSILQAKAVIAEF 94 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+lag+p++++Eqn+ipg++nkll+r a +vl
+  sp|Q8CX35|MURG_SHEON  95 KPDVVLGMGGFASGPGGVAAKLAGVPLVLHEQNAIPGMTNKLLSRIASQVL 145
+                           *********************************************999886 PP
+
+  == domain 2    score: 3.8 bits;  conditional E-value: 2.6
+                           -..............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHH CS
+       Glyco_transf_28  54 d..............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanva 117
+                                          v++ a +  +++++++ +      +  ++l++++ + ++++g+++ d+a++ a+ + +++ +a
+  sp|Q8CX35|MURG_SHEON 285 PhavddhqtrnaqvlVEAGAAFLLPQAILDVNKL----VSKLQLLANDR-AELARMGQRARDVAVLDATEQVAQVCIA 357
+                           3446666666666665666666677777777777....44445555555.6678***************999998876 PP
+
+>> sp|B8DBP8|MURG_LISMH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.6   0.0   1.7e-38   9.4e-36       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 127.6 bits;  conditional E-value: 1.7e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+v+Pa+Al reL++  +e +   ++t++gle+ + + +g+++++i++  +++++l sl+++k++ ++l + +k+k+il+
+  sp|B8DBP8|MURG_LISMH   3 VAISGGGTGGHVYPALALIRELKKVHPEAEflyIGTEKGLEAGIvKREGIPFEAIEIT-GFKRSL-SLENIKTVMRFLSGAKKSKQILR 89 
+                           6899******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+++gl+nk+l+r+ ++v+
+  sp|B8DBP8|MURG_LISMH  90 DFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSVAGLTNKFLSRYTDKVA 142
+                           **************************************************997 PP
+
+>> sp|A0AKD5|MURG_LISW6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.4   0.0   1.9e-38   1.1e-35       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 127.4 bits;  conditional E-value: 1.9e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+v+Pa+A+ reL++  +e +   ++t++gle+ + + +g+++++i++  +++++l sl+++k++ ++l + +k+k+il+
+  sp|A0AKD5|MURG_LISW6   3 VAISGGGTGGHVYPALAFIRELKKLHPEAEflyIGTEKGLEADIvKREGIPFESIEIT-GFKRSL-SLENVKTIMRFLSGAKKSKQILR 89 
+                           6899******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+++gl+nk+l+r+ ++v+
+  sp|A0AKD5|MURG_LISW6  90 DFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSVAGLTNKFLSRYTDKVA 142
+                           **************************************************997 PP
+
+>> sp|Q9ZBA5|MURG_STRCO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   1.0   2.3e-38   1.3e-35       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G++ePa+Ala++L+r+++ V    l+t++gle+++ +e+g+e   i++  +l++k  +++ ++ + + + +++++++il+
+  sp|Q9ZBA5|MURG_STRCO   3 VVLAGGGTAGHIEPALALADALRRQDPTVGitaLGTERGLETRLvPERGYELALIPAV-PLPRKP-TPELITVPGRLRGTIKATEQILE 89 
+                           79****************************9***************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + k+d+v+gfggyva++a++aa+++g+p++v+E+n++pgl+nk+ +r+a +v+
+  sp|Q9ZBA5|MURG_STRCO  90 RTKADAVAGFGGYVALPAYLAAKRLGVPIVVHEANARPGLANKIGSRYAAQVA 142
+                           *************************************************9987 PP
+
+>> sp|Q929Y2|MURG_LISIN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.3   0.0   2.1e-38   1.2e-35       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 127.3 bits;  conditional E-value: 2.1e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+v+Pa+A+ reL++  +e +   ++t++gle+ + + +g+++++i++  +++++l sl+++k++ ++l + +k+k+il+
+  sp|Q929Y2|MURG_LISIN   3 VAISGGGTGGHVYPALAFIRELKKVHPEAEflyIGTEKGLEAGIvKREGIPFESIEIT-GFKRSL-SLENIKTVMRFLSGAKKSKQILR 89 
+                           6899******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           e+kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+i+gl+nk+l+r+ ++v+
+  sp|Q929Y2|MURG_LISIN  90 EFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSIAGLTNKFLSRYTDKVA 142
+                           **************************************************997 PP
+
+>> sp|B8F3B6|MURG_HAEPS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.3   0.1   2.1e-38   1.2e-35       2     137 ..       6     141 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.3 bits;  conditional E-value: 2.1e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+ reLq++G+e+r l+t++++e+ + +++g++++ i++  +l+ k+   + l+ +++ l+a+ +ak+i+  +k
+  sp|B8F3B6|MURG_HAEPS   6 LVMAGGTGGHVFPAIAVVRELQQQGWEIRwLGTKDRMEADLvPKHGIPIEFIQIS-GLKGKG-IKALLTAPFAILRAVLQAKKIINAYK 92 
+                           789*************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pd+v+g+ggyv+++ +iaa+l+g+p++++Eqn++ gl+n +l++ a + 
+  sp|B8F3B6|MURG_HAEPS  93 PDAVLGMGGYVSGPGGIAAKLCGVPVILHEQNAVVGLTNVWLSKIARRT 141
+                           *******************************************999876 PP
+
+>> sp|Q0HE83|MURG_SHESM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.0   0.2   2.5e-38   1.4e-35       1     138 [.       8     145 ..       8     146 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 127.0 bits;  conditional E-value: 2.5e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++ +++ +ak++++e+
+  sp|Q0HE83|MURG_SHESM   8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVVRSILQAKAVIAEF 94 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+lag+p++++Eqn+ipg++nkll+r an+vl
+  sp|Q0HE83|MURG_SHESM  95 KPDVVLGMGGFASGPGGVAAKLAGVPLVLHEQNAIPGMTNKLLSRIANQVL 145
+                           ************************************************986 PP
+
+>> sp|C1KWY8|MURG_LISMC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.2   0.0   2.2e-38   1.3e-35       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 127.2 bits;  conditional E-value: 2.2e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+v+Pa+Al reL++  +e +   ++t++gle+ + + +g+++++i++  +++++l sl+++k++ ++l + +k+k+il+
+  sp|C1KWY8|MURG_LISMC   3 VAISGGGTGGHVYPALALIRELKKIHPEAEflyIGTEKGLEAGIvKREGIPFEAIEIT-GFKRSL-SLENIKTVMRFLSGAKKSKQILR 89 
+                           6899******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+++gl+nk+l+r+ ++v+
+  sp|C1KWY8|MURG_LISMC  90 DFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSVAGLTNKFLSRYTDKVA 142
+                           **************************************************997 PP
+
+>> sp|Q71XX8|MURG_LISMF  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.2   0.0   2.2e-38   1.3e-35       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 127.2 bits;  conditional E-value: 2.2e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+v+Pa+Al reL++  +e +   ++t++gle+ + + +g+++++i++  +++++l sl+++k++ ++l + +k+k+il+
+  sp|Q71XX8|MURG_LISMF   3 VAISGGGTGGHVYPALALIRELKKIHPEAEflyIGTEKGLEAGIvKREGIPFEAIEIT-GFKRSL-SLENIKTVMRFLSGAKKSKQILR 89 
+                           6899******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+++gl+nk+l+r+ ++v+
+  sp|Q71XX8|MURG_LISMF  90 DFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSVAGLTNKFLSRYTDKVA 142
+                           **************************************************997 PP
+
+>> sp|A1S2F9|MURG_SHEAM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  127.1   0.1   2.3e-38   1.3e-35       2     138 ..      10     146 ..       9     147 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 127.1 bits;  conditional E-value: 2.3e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+ar+L  +G+++r l+t +++e+++ +++g ++  i+++ +++ ++  l++l  ++++l+++ +a+++++e+k
+  sp|A1S2F9|MURG_SHEAM  10 LVMAGGTGGHVFPALAVARRLASEGWQIRwLGTADRMEARLvPQHGFDIDFIDIQ-GVRGNG-LLRKLAAPFKVLRSVMQARKVIREFK 96 
+                           789****************************************************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++nkll+r a++vl
+  sp|A1S2F9|MURG_SHEAM  97 PDVVLGMGGFASGPGGVAAKLCGIPLVLHEQNAIPGMTNKLLSRIATRVL 146
+                           ***********************************************997 PP
+
+>> sp|A5UCW8|MURG_HAEIE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.5   0.0   3.5e-38     2e-35       2     137 ..       7     142 ..       6     144 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 126.5 bits;  conditional E-value: 3.5e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+a++Lq+++++++ l+t++++e+++ +++ ++++ i++  +l+ k+   + +  +++ ++a+ +ak+i++e+k
+  sp|A5UCW8|MURG_HAEIE   7 LVMAGGTGGHVFPAIAVAQTLQKQEWDICwLGTKDRMEAQLvPKYDIPIRFIQIS-GLRGKG-IKALFNAPFAIFRAVLQAKKIIQEEK 93 
+                           789****************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pd+v+g+ggyv+++a++aa+l+g+p++++Eqn+i+gl+nkll + a  v
+  sp|A5UCW8|MURG_HAEIE  94 PDAVLGMGGYVSGPAGVAAKLCGVPIILHEQNAIAGLTNKLLGKIASCV 142
+                           *****************************************99988776 PP
+
+>> sp|Q03QH5|MURG_LACBA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  120.9   0.1   1.9e-36   1.1e-33       2     138 ..       4     142 ..       3     143 .. 0.97
+   2 ?    4.5   0.0       1.6   8.8e+02      63     130 ..     295     355 ..     267     358 .. 0.70
+
+  Alignments for each domain:
+  == domain 1    score: 120.9 bits;  conditional E-value: 1.9e-36
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++ggGT+G+++Pa+Al ++L++r+++     +++++gle+++ +++g+++++  ++ +++++l sl+++k+++ +lk++++ak+ +++
+  sp|Q03QH5|MURG_LACBA   4 MVSGGGTGGHIYPALALIKALKKREPNSAvmyVGSERGLESTIvPAKGIPFQATRIQ-GFKRSL-SLENFKTVYLFLKSVHEAKKMIRQ 90 
+                           5899**********************977779*************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpdvvvg+ggyv++++++aa+++++p+ ++Eqn++ g++n++l+r++++++
+  sp|Q03QH5|MURG_LACBA  91 FKPDVVVGTGGYVSGAVVYAAARLHVPTLIHEQNSVVGITNRFLSRYVDRIA 142
+                           *************************************************986 PP
+
+  == domain 2    score: 4.5 bits;  conditional E-value: 1.6
+                           -HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  63 slktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                           + k+  +la +      a ei+kea  d++ ++    ad+++++++l++  a    q+g+p++++++l
+  sp|Q03QH5|MURG_LACBA 295 QTKNANSLATV-----GAAEIIKEA--DLTGETLIAKADQLMTNDALRQDMATASKQLGVPDAADRVL 355
+                           44445555554.....445555554..4777788889**************************99987 PP
+
+>> sp|Q8DEL0|MURG_VIBVU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.4   0.2   3.9e-38   2.2e-35       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 126.4 bits;  conditional E-value: 3.9e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+++ +++g+++  i+++ +l+ ++   + ++ +++ l+a+++ak+++k+++
+  sp|Q8DEL0|MURG_VIBVU   8 MVMAGGTGGHVFPGLAVAKKLQQQGWEIRwLGTADRMEAELvPKHGIDIDFIKVK-GLRGQG-IKRLVLAPFQILNAIFQAKAHIKRWQ 94 
+                           5899***************************************************.*****9.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+
+  sp|Q8DEL0|MURG_VIBVU  95 PDAVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNHWLAKIAKKVF 144
+                           ***********************************************996 PP
+
+>> sp|Q7MNV1|MURG_VIBVY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.4   0.2   3.9e-38   2.2e-35       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 126.4 bits;  conditional E-value: 3.9e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+++ +++g+++  i+++ +l+ ++   + ++ +++ l+a+++ak+++k+++
+  sp|Q7MNV1|MURG_VIBVY   8 MVMAGGTGGHVFPGLAVAKKLQQQGWEIRwLGTADRMEAELvPKHGIDIDFIKVK-GLRGQG-IKRLVLAPFQILNAIFQAKAHIKRWQ 94 
+                           5899***************************************************.*****9.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+
+  sp|Q7MNV1|MURG_VIBVY  95 PDAVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNHWLAKIAKKVF 144
+                           ***********************************************996 PP
+
+>> sp|Q3IFY0|MURG_PSEHT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.2   0.1   4.4e-38   2.5e-35       1     138 [.       5     142 ..       5     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 126.2 bits;  conditional E-value: 4.4e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +v+++gGT+G+++P +A+a+ L+++G++V  ++tp+++e++v +++++++  i+++ +++ ++   + +k ++ +l+a+ +a+++lk++
+  sp|Q3IFY0|MURG_PSEHT   5 CVVVAGGTGGHIFPGIAVADYLKQQGWQVSwIGTPDRMEATVvPKHNIDINFINVK-GVRGNG-IKRLIKAPFMVLNAILQARKVLKSE 91 
+                           6999****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+++ggyv ++ +iaa+++gip++++Eqn+i+g++nk+l+++an+vl
+  sp|Q3IFY0|MURG_PSEHT  92 KPDVVLAMGGYVTGPTGIAAKSLGIPLVIHEQNAIAGMSNKWLAKFANRVL 142
+                           *************************************************97 PP
+
+>> sp|B7LFW0|MURG_ECO55  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  125.6   0.4   6.7e-38   3.8e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 125.6 bits;  conditional E-value: 6.7e-38
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+  i +  +l+ k+   + +  +++ ++a+r a++i+k +k
+  sp|B7LFW0|MURG_ECO55   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRHARAIMKAYK 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+
+  sp|B7LFW0|MURG_ECO55  96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145
+                           ***********************************************986 PP
+
+>> sp|B1KKX7|MURG_SHEWM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  126.3   0.1   4.2e-38   2.4e-35       1     138 [.      10     147 ..      10     148 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 126.3 bits;  conditional E-value: 4.2e-38
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  ++++l+++ +a+ ++ke+
+  sp|B1KKX7|MURG_SHEWM  10 ILIMAGGTGGHVFPALAVAKYLSKQGWKVRwLGTAERMEARLvPQHGFDIDFIDIK-GVRGNG-VVRKLAAPFKVLRSITQARVVIKEF 96 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +pdvv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++nk+l+r a +vl
+  sp|B1KKX7|MURG_SHEWM  97 QPDVVLGMGGFASGPGGVAARLSGIPLVLHEQNAIPGMTNKILSRIASQVL 147
+                           *********************************************999886 PP
+
+>> sp|Q49929|Y2348_MYCLE  Uncharacterized glycosyltransferase ML2348 OS=Mycobacterium leprae GN=ML2348 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  125.5   0.1   7.4e-38   4.2e-35       1     138 [.       3     141 ..       3     142 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 125.5 bits;  conditional E-value: 7.4e-38
+                            EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.............................S---- CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.............................vklwa 59 
+                            ++la+ G+rGdveP++Al+ eLqrrGheVr+++pp++ +fve+agl+av++gpd                              ++wa
+  sp|Q49929|Y2348_MYCLE   3 FTLAASGSRGDVEPFAALGLELQRRGHEVRIGVPPDMLRFVESAGLAAVAYGPDtqeflardtysqwrqwwkilppikalqqlRQAWA 90 
+                            78*************************************************************8888888888888888888888888 PP
+
+                            --.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  60 kleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                              ++ + lk+la+g                          adl++++  ++g++anvaE++gip+ v++++p r+ng++
+  sp|Q49929|Y2348_MYCLE  91 --DMATDLKSLADG--------------------------ADLVMTGVVYQGVVANVAEYYGIPFGVLHFVPARVNGKI 141
+                            ..788888888888..........................************************************987 PP
+
+>> sp|Q7N147|MURG_PHOLL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  124.3   0.2   1.7e-37   9.4e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 124.3 bits;  conditional E-value: 1.7e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++V  l+t +++e+ + +++g++++ i++  +l+ k+   + l  + + +ka+r+ak+i+++++
+  sp|Q7N147|MURG_PHOLL   9 MVMAGGTGGHVFPGLAVAHHLKDQGWDVLwLGTADRMEADLvPKHGIDIEFIQIS-GLRGKG-IKALLAAPVRIFKAIRQAKAIMRRYQ 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ +iaa+ +g+p++++Eqngi+gl+n++l++ a++vl
+  sp|Q7N147|MURG_PHOLL  96 PDVVLGMGGYVSGPGGIAAWMCGVPVVLHEQNGIAGLTNRWLAKIATTVL 145
+                           **********************************************9986 PP
+
+>> sp|A8H984|MURG_SHEPA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  124.6   0.1   1.4e-37   7.8e-35       1     138 [.      10     147 ..      10     148 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 124.6 bits;  conditional E-value: 1.4e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  +++ l+++ +a++++k++
+  sp|A8H984|MURG_SHEPA  10 ILIMAGGTGGHVFPALAVAKYLSQQGWKVRwLGTAERMEARLvPQHGFDIDFIDIK-GVRGNG-LMRKLAAPFKILRSVMQARAVIKSF 96 
+                           689*****************************************************.****99.9************************ PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++n+ll+r a  vl
+  sp|A8H984|MURG_SHEPA  97 KPDVVMGMGGFASGPGGVAAKLSGIPLVLHEQNAIPGMTNRLLSRIASEVL 147
+                           *********************************************998875 PP
+
+>> sp|Q820F6|MURG_STRAW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  125.0   0.7     1e-37   5.7e-35       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 125.0 bits;  conditional E-value: 1e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G++ePa+Ala++L+r+++ V    l+t++gle+++ +e+g++   i++  +l++k  +++ ++ + + + ++++a++il+
+  sp|Q820F6|MURG_STRAW   3 VVLAGGGTAGHIEPALALADALRRQDPTVGitaLGTERGLETRLvPERGYDLALIPAV-PLPRKP-TPELITVPGRLRGTIKAAEQILE 89 
+                           79****************************9***************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + k+d+vvgfggyva++ ++aa+++g+p++++E+n++pgl+nk+ +r+a +v+
+  sp|Q820F6|MURG_STRAW  90 RTKADAVVGFGGYVALPGYLAAKRLGVPIVIHEANARPGLANKIGSRYAAQVA 142
+                           *************************************************9987 PP
+
+>> sp|Q1WTA0|MURG_LACS1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  123.3   0.0   3.4e-37   1.9e-34       2     138 ..       4     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 123.3 bits;  conditional E-value: 3.4e-37
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++ggGT+G+++Pa+Al ++ ++++++ +   ++t++gle+++ ++ag++ ++i+++ +++++l sl+++k+++ +lk++++ k+i+++
+  sp|Q1WTA0|MURG_LACS1   4 LISGGGTGGHIYPALALIEAIKQKEPDSEilyVGTHKGLESRIvPSAGVPLKTIKIQ-GFKRSL-SLENFKTVYLFLKSVHDCKKIIRD 90 
+                           789*************************999**************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpdvvvg+ggyv +++++aa++ +ip++v+Eqn+++g++nk+l+r++++v 
+  sp|Q1WTA0|MURG_LACS1  91 FKPDVVVGTGGYVCGAVVYAAARMKIPTFVHEQNSVAGVTNKFLSRFVDKVG 142
+                           *************************************************986 PP
+
+>> sp|Q9X4H4|MURG_STRCU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  124.6   0.5   1.4e-37   7.7e-35       1     137 [.       3     141 ..       3     142 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 124.6 bits;  conditional E-value: 1.4e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G++ePa+Ala++L+r+++ V    l+t++gle+++ +e+g+e   i++  +l++k  +++ ++ + + + ++++a++il+
+  sp|Q9X4H4|MURG_STRCU   3 VVLAGGGTAGHIEPALALADALRRQDPTVGitaLGTERGLETRLvPERGYELALIPAV-PLPRKP-TPELITVPGRLRGTIKAAEQILE 89 
+                           79****************************9***************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           + k+d vvgfggyva++ ++aa+++g+p++++E+n++pgl+nk+ +r+a +v
+  sp|Q9X4H4|MURG_STRCU  90 RTKADCVVGFGGYVALPGYLAAKRLGVPIVIHEANARPGLANKIGSRYAARV 141
+                           *************************************************998 PP
+
+>> sp|Q12SC6|MURG_SHEDO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  124.7   0.2   1.3e-37   7.1e-35       1     138 [.      10     147 ..      10     148 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 124.7 bits;  conditional E-value: 1.3e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  l+tl  +++  +++ +a+e+++e+
+  sp|Q12SC6|MURG_SHEDO  10 ILIMAGGTGGHVFPALAVAKNLAEKGWQVRwLGTADRMEARLvPQHGFDIDFIDIQ-GVRGNG-LLRTLAAPFKIMRSIMQAREVIAEF 96 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kp+v++g+gg+++++ ++a +lagip++++Eqn+ipg++nkll+r a++vl
+  sp|Q12SC6|MURG_SHEDO  97 KPQVILGMGGFASGPGGVAGRLAGIPLVLHEQNAIPGMTNKLLARIATKVL 147
+                           ************************************************997 PP
+
+>> sp|P57817|MURG_PASMU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  125.0   0.2   1.1e-37     6e-35       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 125.0 bits;  conditional E-value: 1.1e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+a+ Lq++G++++ l+t +++e+++ ++++++++ i++  +l+ k+   + l+ +++ ++a+ +a++i+k ++
+  sp|P57817|MURG_PASMU   9 LVMAGGTGGHVFPAIAVAQYLQQQGWDICwLGTADRMEAQLvPKHHIPIQFIQIS-GLRGKG-IKALLSAPFSIFRAILQARKIIKAYQ 95 
+                           789****************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p++v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n +l++ a +vl
+  sp|P57817|MURG_PASMU  96 PHAVLGMGGYVSGPGGIAAKLCGIPVILHEQNAVAGLTNSWLAKIARRVL 145
+                           *********************************************99986 PP
+
+>> sp|Q87SG4|MURG_VIBPA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  124.2   0.2   1.9e-37   1.1e-34       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 124.2 bits;  conditional E-value: 1.9e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+ + +++g+e+  i+++ +l+ ++   + l  +++  +a+ +a++++k+++
+  sp|Q87SG4|MURG_VIBPA   8 MVMAGGTGGHVFPGLAVAKQLQEQGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-VKRLLAAPFQIINAIMQARAHMKRWQ 94 
+                           5899************************************99*************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+
+  sp|Q87SG4|MURG_VIBPA  95 PDAVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNQWLSKIAKKVF 144
+                           ***********************************************997 PP
+
+>> sp|B0TQN7|MURG_SHEHH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  123.7   0.1   2.5e-37   1.4e-34       1     138 [.      10     147 ..      10     148 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 123.7 bits;  conditional E-value: 2.5e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  +++l  +++  +++ +a++++k++
+  sp|B0TQN7|MURG_SHEHH  10 ILIMAGGTGGHVFPALAVAKYLSQQGWKVRwLGTAERMEARLvPQHGFDIDFIDIK-GVRGNG-LMRKLAAPFKIIRSVMQARAVIKKF 96 
+                           689*****************************************************.****99.99*********************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kp+vv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++n+ll+r a  vl
+  sp|B0TQN7|MURG_SHEHH  97 KPHVVMGMGGFASGPGGVAAKLSGIPLVLHEQNAIPGMTNRLLSRIASEVL 147
+                           *********************************************998875 PP
+
+>> sp|C4L5U5|MURG_EXISA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  123.5   0.0     3e-37   1.7e-34       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 123.5 bits;  conditional E-value: 3e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+Al ++L++r ++     ++t++gle+ + + ag+++++i++  +l+++l sl+++k+++ +lka+r++k+ ++
+  sp|C4L5U5|MURG_EXISA   3 IMISGGGTGGHIYPALALIETLKKRHPDLQvqyIGTENGLEADLvPRAGVPFKSIQIA-GLKRSL-SLENVKTAYWFLKAVRALKKDMA 89 
+                           6799***********************99888***********99*************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +kpdvv+g+gg+v++++++ a  +gip++++Eqn+ipgl+nk+l+++a++v+
+  sp|C4L5U5|MURG_EXISA  90 AFKPDVVIGTGGFVSGPVVYTAQQLGIPTILHEQNSIPGLTNKFLSKKADRVA 142
+                           **************************************************997 PP
+
+>> sp|A9M2H3|MURG_NEIM0  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  124.0   0.1   2.1e-37   1.2e-34       1     138 [.       6     143 ..       6     144 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 124.0 bits;  conditional E-value: 2.1e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++l++gGT+G+++Pa+A+a+ L++rGh+V+ l++++ +ee++ +++g+  ++++++ +++ ++   ++l+ ++  ++++r+a +i++++
+  sp|A9M2H3|MURG_NEIM0   6 FMLMAGGTGGHIFPALAVADSLRARGHHVIwLGSKDSMEERIvPQYGIRLETLAIK-GVRGNG-IKRKLMLPFTLYQTVREAQRIIRKH 92 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + + v+gfgg+v  + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl
+  sp|A9M2H3|MURG_NEIM0  93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143
+                           *************************************************97 PP
+
+>> sp|Q6LMF6|MURG_PHOPR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  124.1   0.2     2e-37   1.1e-34       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 124.1 bits;  conditional E-value: 2e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+ + +++g+e+  i+++ +l+ ++  +++l  +++   a+ +a++ +k ++
+  sp|Q6LMF6|MURG_PHOPR   8 LVMAGGTGGHVFPGLAVAKKLQQEGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-IIRMLAAPFKIVGAILQARKYIKAWQ 94 
+                           789*************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ +iaa+l+g+p++++Eqn+++gl+n++l+r a +vl
+  sp|Q6LMF6|MURG_PHOPR  95 PDVVLGMGGYVSGPGGIAAWLSGVPVVLHEQNAVAGLTNQWLSRIAAKVL 144
+                           **********************************************9986 PP
+
+>> sp|Q5E2Q0|MURG_VIBF1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  123.5   0.1   3.1e-37   1.7e-34       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 123.5 bits;  conditional E-value: 3.1e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq +G+e+r l+t +++e+ + +++g+e+  i+++ +l+ ++   k +  +++ l a+ +ak+++k ++
+  sp|Q5E2Q0|MURG_VIBF1   9 LVMAGGTGGHVFPGLAVAKQLQSEGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-LKKLIAAPFQILGAISQAKKHIKAWQ 95 
+                           789*************************************99*************.****99.9999********************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+
+  sp|Q5E2Q0|MURG_VIBF1  96 PDVVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNQWLSKIAKRVF 145
+                           ***********************************************997 PP
+
+>> sp|P64865|Y1524_MYCTU  Uncharacterized glycosyltransferase Rv1524/MT1575 OS=Mycobacterium tuberculosis GN=Rv1524 PE=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  123.6   0.2   2.8e-37   1.6e-34       1     138 [.       3     143 ..       3     144 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 123.6 bits;  conditional E-value: 2.8e-37
+                            EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----................S------.-HHHCCSHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd................vklwakleslktlkelae 72 
+                            +v+a++GTrGd+eP++A++ eLqrrGh+V+la+pp+l  fve+agl+av++g++                +         +++  l++
+  sp|P64865|Y1524_MYCTU   3 FVVASYGTRGDIEPCAAVGLELQRRGHDVCLAVPPNLIGFVETAGLSAVAYGSRdsqeqldeqflhnawkL---------QNPIKLLR 81 
+                            89****************************************************99988887654444440.........44444444 PP
+
+                            HHHHHHHHHHHHHHHHHH.HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  73 glkalrkakeilkeakpd.vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +  a+  ++e ++e ++  ++v++g   adl+l+++++++++anvaE++gip+++++++p rang++
+  sp|P64865|Y1524_MYCTU  82 E--AMAPVTEGWAELSAMlTPVAAG---ADLLLTGQIYQEVVANVAEHHGIPLAALHFYPVRANGEI 143
+                            4..4444555555544331334444...************************************986 PP
+
+>> sp|P64866|Y1551_MYCBO  Uncharacterized glycosyltransferase Mb1551 OS=Mycobacterium bovis GN=Mb1551 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  123.6   0.2   2.8e-37   1.6e-34       1     138 [.       3     143 ..       3     144 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 123.6 bits;  conditional E-value: 2.8e-37
+                            EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----................S------.-HHHCCSHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd................vklwakleslktlkelae 72 
+                            +v+a++GTrGd+eP++A++ eLqrrGh+V+la+pp+l  fve+agl+av++g++                +         +++  l++
+  sp|P64866|Y1551_MYCBO   3 FVVASYGTRGDIEPCAAVGLELQRRGHDVCLAVPPNLIGFVETAGLSAVAYGSRdsqeqldeqflhnawkL---------QNPIKLLR 81 
+                            89****************************************************99988887654444440.........44444444 PP
+
+                            HHHHHHHHHHHHHHHHHH.HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  73 glkalrkakeilkeakpd.vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +  a+  ++e ++e ++  ++v++g   adl+l+++++++++anvaE++gip+++++++p rang++
+  sp|P64866|Y1551_MYCBO  82 E--AMAPVTEGWAELSAMlTPVAAG---ADLLLTGQIYQEVVANVAEHHGIPLAALHFYPVRANGEI 143
+                            4..4444555555544331334444...************************************986 PP
+
+>> sp|B5FB35|MURG_VIBFM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  123.5   0.1   3.1e-37   1.7e-34       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 123.5 bits;  conditional E-value: 3.1e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq +G+e+r l+t +++e+ + +++g+e+  i+++ +l+ ++   k +  +++ l a+ +ak+++k ++
+  sp|B5FB35|MURG_VIBFM   9 LVMAGGTGGHVFPGLAVAKQLQSEGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-LKKLIAAPFQILGAISQAKKHIKAWQ 95 
+                           789*************************************99*************.****99.9999********************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+
+  sp|B5FB35|MURG_VIBFM  96 PDVVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNQWLSKIAKRVF 145
+                           ***********************************************997 PP
+
+>> sp|B2GB78|MURG_LACF3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  119.7   0.2   4.4e-36   2.5e-33       2     138 ..       4     142 ..       3     143 .. 0.98
+   2 ?    2.1   0.0         9   5.1e+03      72     114 ..     201     243 ..     186     252 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 119.7 bits;  conditional E-value: 4.4e-36
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++ggGT+G+++Pa+Al ++L++ +++ +   +++++gle+++ ++ag+  ++ +++ +++++l sl+++k+++ +lka+ +ak+++k+
+  sp|B2GB78|MURG_LACF3   4 MVSGGGTGGHIYPALALIERLKQVEPDTEvlyVGAKRGLETKIvPQAGYRLETMEVQ-GFRRSL-SLENVKTVYLFLKAVAQAKKLIKD 90 
+                           5899*************************99**************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++pdvv+g+ggyv++++l+aa+++g+p++++Eqn++ g++nk+l+r++n v+
+  sp|B2GB78|MURG_LACF3  91 FRPDVVLGTGGYVSGAVLYAAAKLGVPTVIHEQNSVVGVTNKFLARYVNEVA 142
+                           *************************************************997 PP
+
+  == domain 2    score: 2.1 bits;  conditional E-value: 9
+                           HHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHH CS
+       Glyco_transf_28  72 eglkalrkakeilkeakpdvvvgfggyvadlaliaallagipa 114
+                           + +ka+ +a  ++ e+  +v++++g    d++++a + + i  
+  sp|B2GB78|MURG_LACF3 201 RINKAVVEALPSFNEQPYQVIFATGRKRYDDVMGALAGQPIGD 243
+                           567889999999**********************998776655 PP
+
+>> sp|B6ELH5|MURG_ALISL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  123.3   0.1   3.6e-37     2e-34       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 123.3 bits;  conditional E-value: 3.6e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq +G+e+r l+t++++e+ + +++g+e+  i+++ +l+ ++   k l  +++   a+ +ak++++ ++
+  sp|B6ELH5|MURG_ALISL   9 LVMAGGTGGHVFPGLAVAKQLQSEGWEIRwLGTEDRMEADLvPKHGIEIDFIKVK-GLRGQG-LKKLLIAPFQIIGAILQAKKHIQAWQ 95 
+                           789*************************************99*************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+
+  sp|B6ELH5|MURG_ALISL  96 PDVVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNQWLSKIAKRVF 145
+                           ***********************************************997 PP
+
+>> sp|B8CWJ6|MURG_HALOH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  123.0   0.0   4.3e-37   2.4e-34       2     138 ..       4     140 ..       3     141 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 123.0 bits;  conditional E-value: 4.3e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           v++ggGT+G+++Pa+Ala+ ++++G e+  +++ +gle+++ +e+g +++ i++  +++++l s++ +++l++ ++++ +a+++l+++k
+  sp|B8CWJ6|MURG_HALOH   4 VFTGGGTGGHIYPALALAESFRKKGDEILyIGSNDGLERRIvPEEGFDFQGIEVA-PFPRNL-SVHLFSSLLKTGRGFIQARKLLRKFK 90 
+                           89*****************************************************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+gg+v++++++aa+l++ip++++Eqn+ pgl+n+ll+ ++++++
+  sp|B8CWJ6|MURG_HALOH  91 PDVVIGTGGFVSGPVVLAAALQKIPTVIHEQNAYPGLANRLLAPFVTRIA 140
+                           *********************************************99986 PP
+
+>> sp|A7MXR6|MURG_VIBHB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  123.1   0.2     4e-37   2.3e-34       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 123.1 bits;  conditional E-value: 4e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+ + +++g+e+  i+++ +l+ ++   + l  +++  +a+ +a++++k+++
+  sp|A7MXR6|MURG_VIBHB   8 MVMAGGTGGHVFPGLAVAKQLQEQGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-VKRLLAAPFQIINAIMQARAHMKRWQ 94 
+                           5899************************************99*************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+ +gip++++Eqn+++gl+n++l++ a++v+
+  sp|A7MXR6|MURG_VIBHB  95 PDAVLGMGGYVSGPGGIAAWMSGIPVVLHEQNAVAGLTNQWLSKIAKKVF 144
+                           ***********************************************997 PP
+
+>> sp|A5VJ33|MURG_LACRD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  119.3   0.0   5.8e-36   3.3e-33       2     138 ..       4     142 ..       3     143 .. 0.98
+   2 ?    2.7   0.0       5.7   3.2e+03      64     129 ..     299     357 ..     237     360 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 119.3 bits;  conditional E-value: 5.8e-36
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++ggGT+G+++Pa+Al ++L++ +++ +   ++t++gle+++ + ag+e ++   + +++++l sl+++k+++ +l++++ ak+i++e
+  sp|A5VJ33|MURG_LACRD   4 LVSGGGTGGHIYPALALIERLKQVEPDTEvlyVGTTRGLENKIvPDAGIELETMHMQ-GFKRSL-SLENFKTIYLFLNSVHHAKKIISE 90 
+                           789**************************99**************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpdvv+g+ggyv++++l+aa++ +ip++++Eqn++ g++nk+l+r++++++
+  sp|A5VJ33|MURG_LACRD  91 FKPDVVLGTGGYVSGAVLYAAAKKHIPTVIHEQNSVVGVTNKFLSRYVDQIA 142
+                           ************************************************9986 PP
+
+  == domain 2    score: 2.7 bits;  conditional E-value: 5.7
+                           HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEES CS
+       Glyco_transf_28  64 lktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkl 129
+                           +k+   l        k ++ l   ++++++++   +ad ++     ++  a+ aE+ g+p+++++l
+  sp|A5VJ33|MURG_LACRD 299 VKNAQALV-------KNNAGLMITEDKLDARALLTQADKIMEDEEVRKEMAHAAEKMGRPDAADRL 357
+                           44444444.......44888888899999999999999999999999999*********9999876 PP
+
+>> sp|B2G6K5|MURG_LACRJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  119.3   0.0   5.8e-36   3.3e-33       2     138 ..       4     142 ..       3     143 .. 0.98
+   2 ?    2.7   0.0       5.7   3.2e+03      64     129 ..     299     357 ..     237     360 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 119.3 bits;  conditional E-value: 5.8e-36
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++ggGT+G+++Pa+Al ++L++ +++ +   ++t++gle+++ + ag+e ++   + +++++l sl+++k+++ +l++++ ak+i++e
+  sp|B2G6K5|MURG_LACRJ   4 LVSGGGTGGHIYPALALIERLKQVEPDTEvlyVGTTRGLENKIvPDAGIELETMHMQ-GFKRSL-SLENFKTIYLFLNSVHHAKKIISE 90 
+                           789**************************99**************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpdvv+g+ggyv++++l+aa++ +ip++++Eqn++ g++nk+l+r++++++
+  sp|B2G6K5|MURG_LACRJ  91 FKPDVVLGTGGYVSGAVLYAAAKKHIPTVIHEQNSVVGVTNKFLSRYVDQIA 142
+                           ************************************************9986 PP
+
+  == domain 2    score: 2.7 bits;  conditional E-value: 5.7
+                           HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEES CS
+       Glyco_transf_28  64 lktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkl 129
+                           +k+   l        k ++ l   ++++++++   +ad ++     ++  a+ aE+ g+p+++++l
+  sp|B2G6K5|MURG_LACRJ 299 VKNAQALV-------KNNAGLMITEDKLDARALLTQADKIMEDEEVRKEMAHAAEKMGRPDAADRL 357
+                           44444444.......44888888899999999999999999999999999*********9999876 PP
+
+>> sp|Q182Y6|MURG_CLOD6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  122.6   0.0   5.6e-37   3.2e-34       1     138 [.       4     143 ..       4     144 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 122.6 bits;  conditional E-value: 5.6e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+l+ggGT+G+v+Pa+A+a++ +++ ++ +   ++t++g+e+++ +++g e ++++++ ++++k+  ++++k++++ +k+l+++++i+k
+  sp|Q182Y6|MURG_CLOD6   4 VLLSGGGTGGHVYPAIAIANKIRDEHPDAEiifVGTEKGIESEIvPKYGFELKTVTVQ-GFKRKI-DFDNVKRVFKLFKGLEQSRKIVK 90 
+                           79***************************999**************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd+v+g+ggyv++++l++a+  +ipa+++Eqn+ pg++nk+l++++++vl
+  sp|Q182Y6|MURG_CLOD6  91 KFKPDIVIGTGGYVSGPVLFNASMGKIPAIIHEQNSFPGVTNKILSKTVTKVL 143
+                           ***************************************************97 PP
+
+>> sp|Q2NVV1|MURG_SODGM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  122.5   0.2   6.3e-37   3.6e-34       2     135 ..       9     142 ..       8     146 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 122.5 bits;  conditional E-value: 6.3e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++  i +  +l+ k+   + l+ + + ++alr+a++i++ ++
+  sp|Q2NVV1|MURG_SODGM   9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTANRMEADLvPQHGIDIDFIRIS-GLRGKG-LKAQLLAPVRIWRALRQARRIMRAWR 95 
+                           5899************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n+ l++   
+  sp|Q2NVV1|MURG_SODGM  96 PDVVLGMGGYVSGPGGLAAWSCGIPVVLHEQNGIAGLTNRGLAKISR 142
+                           ***************************************97776655 PP
+
+>> sp|Q07WI5|MURG_SHEFN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  122.4   0.0   6.4e-37   3.6e-34       1     138 [.      11     148 ..      11     149 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 122.4 bits;  conditional E-value: 6.4e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G+++r l+t +++e+++ +++g +++ i+++ +++ ++  +++l  +++  +++ +ak+++ ++
+  sp|Q07WI5|MURG_SHEFN  11 ILIMAGGTGGHVFPALAVAKYLAEKGWQIRwLGTADRMEARLvPQHGFDIEFIDIK-GVRGNG-LMRKLAAPFKIIRSIIQAKAVIDDF 97 
+                           689*****************************************************.****99.99*********************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +pdv++g+gg+++++ ++a +l+gip++++Eqn+ipgl+nkll++ a++vl
+  sp|Q07WI5|MURG_SHEFN  98 QPDVILGMGGFASGPGGVAGKLSGIPVVLHEQNAIPGLTNKLLSKIAKKVL 148
+                           ************************************************997 PP
+
+>> sp|A1KVL3|MURG_NEIMF  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  122.7   0.1   5.3e-37     3e-34       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 122.7 bits;  conditional E-value: 5.3e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++l++gGT+G+++Pa+A+a+ L++rGh+V+ l++++ +ee++ +++g+  ++++++ +++ ++   ++l+ +   ++++r+a +i++++
+  sp|A1KVL3|MURG_NEIMF   6 FMLMAGGTGGHIFPALAVADSLRARGHHVIwLGSKDSMEERIvPQYGIRLETLAIK-GVRGNG-IKRKLMLPVTLYQTVREAQRIIRKH 92 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + + v+gfgg+v  + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl
+  sp|A1KVL3|MURG_NEIMF  93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143
+                           *************************************************97 PP
+
+>> sp|Q9K0Y2|MURG_NEIMB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  122.7   0.1   5.3e-37     3e-34       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 122.7 bits;  conditional E-value: 5.3e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++l++gGT+G+++Pa+A+a+ L++rGh+V+ l++++ +ee++ +++g+  ++++++ +++ ++   ++l+ +   ++++r+a +i++++
+  sp|Q9K0Y2|MURG_NEIMB   6 FMLMAGGTGGHIFPALAVADSLRARGHHVIwLGSKDSMEERIvPQYGIRLETLAIK-GVRGNG-IKRKLMLPVTLYQTVREAQRIIRKH 92 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + + v+gfgg+v  + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl
+  sp|Q9K0Y2|MURG_NEIMB  93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143
+                           *************************************************97 PP
+
+>> sp|B8CNL1|MURG_SHEPW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  121.8   0.0   9.9e-37   5.6e-34       1     138 [.      10     147 ..      10     148 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 121.8 bits;  conditional E-value: 9.9e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  ++++ +++ ++  l++l  +++ l+++ +a+ +++++
+  sp|B8CNL1|MURG_SHEPW  10 ILIMAGGTGGHVFPALAVAKYLSQQGWKVRwLGTADRMEARLvPQHGFDIDFLDIK-GVRGNG-LLRKLAAPFKILRSVMQARSVIQDF 96 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++nkll++ a+ vl
+  sp|B8CNL1|MURG_SHEPW  97 KPDVVMGMGGFASGPGGVAARLSGIPLVLHEQNAIPGMTNKLLSKVATEVL 147
+                           *********************************************999886 PP
+
+>> sp|C4LA25|MURG_TOLAT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  120.6   0.4   2.5e-36   1.4e-33       2     138 ..       6     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 120.6 bits;  conditional E-value: 2.5e-36
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           v+++gGT+G+v+P +A+a++Lq+ G++++ l+tp+++e+ + +++g +++ i+++ +l++++  +++l+ +++ +ka+ +a++il++ +
+  sp|C4LA25|MURG_TOLAT   6 VIMAGGTGGHVFPGLAVAHRLQADGWNIHwLGTPDRMEADLvPAHGFPIEFINIR-GLRNHG-LVRKLLAPFQICKAVLQAFMILRRIR 92 
+                           799*************************************99*************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggy+a++ ++aa+l+gip++++Eqn+ +gl+n+ll++ a+++l
+  sp|C4LA25|MURG_TOLAT  93 PDVVLGMGGYAAGPGGVAAKLLGIPVVLHEQNAAAGLTNRLLAKIATRIL 142
+                           **********************************************9987 PP
+
+>> sp|Q9F1N0|MURG_SHEVI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  121.7   0.0   1.1e-36   6.1e-34       1     138 [.      10     147 ..      10     148 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 121.7 bits;  conditional E-value: 1.1e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++ ++Vr l+t +++e+++ +++g ++  i+++ +++ ++  l++l  ++++ +++ +a+++++e+
+  sp|Q9F1N0|MURG_SHEVI  10 ILIMAGGTGGHVFPALAVAKYLSQKSWKVRwLGTAERMEARLvPQHGFDIDFIDIK-GVRGNG-LLRKLAAPFKVMRSVMQARRVIQEF 96 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ +iaa+l+gip++++Eqn+ipg++nkll+r a +vl
+  sp|Q9F1N0|MURG_SHEVI  97 KPDVVLGMGGFASGPGGIAARLSGIPLVLHEQNAIPGMTNKLLSRIASKVL 147
+                           ***********************************************9986 PP
+
+>> sp|A5F5M9|MURG_VIBC3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  121.6   0.4   1.2e-36   6.5e-34       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 121.6 bits;  conditional E-value: 1.2e-36
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq++G+++r l+t +++e+++ +++g+e+  i+++ +l+ ++  ++ lk +++  +a+ +a+++l  ++
+  sp|A5F5M9|MURG_VIBC3   9 MVMAGGTGGHVFPGLAVAKQLQQQGWQIRwLGTADRMEAELvPKHGIEIDFIQVK-GLRGQG-LMRLLKAPFQIVNAILQARRHLLAYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+l gip++++Eqn+++gl+n++l++ a +v+
+  sp|A5F5M9|MURG_VIBC3  96 PDAVLGMGGYVSGPGGIAAWLMGIPVVLHEQNAVAGLTNQWLAKIARRVF 145
+                           *********************************************99986 PP
+
+>> sp|Q03W35|MURG_LEUMM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  121.1   0.1   1.7e-36   9.4e-34       1     137 [.       3     141 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 121.1 bits;  conditional E-value: 1.7e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G+++Pa+Ala+  ++ +++ +   +++++g+e+ + +++g+++++++++ ++++++ sl+++k++  +lka+++ak+i+k
+  sp|Q03W35|MURG_LEUMM   3 IILSGGGTGGHIYPALALAEVIRKHEPDTEflyVGSERGVESNIvPATGMPFEKLTVQ-GFKRSF-SLENIKTVSLFLKAVKEAKKIIK 89 
+                           689*******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           ++ pdvvvg+ggyv++++++aa +++ip++++Eqn+++g++nk+l+r a+++
+  sp|Q03W35|MURG_LEUMM  90 DFDPDVVVGTGGYVSGAVVYAAQRLHIPTVIHEQNSVAGVTNKFLSRGATKI 141
+                           ***********************************************99987 PP
+
+>> sp|A3Q1L8|MURG_MYCSJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  122.2   1.3   7.9e-37   4.4e-34       1     138 [.       7     146 ..       7     147 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 122.2 bits;  conditional E-value: 7.9e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+laggGT+G+vePa+A+a++L + ++ Vr   l+t++gle+++ +e+g++ + i+p  +l++kl s +  + + ++++a+r+++eil 
+  sp|A3Q1L8|MURG_MYCSJ   7 VLLAGGGTAGHVEPAMAVADALAALEPGVRitaLGTERGLETRLvPERGYALELITPV-PLPRKL-SGDLARLPMRVRRAVRETREILD 93 
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                              +dvv+gfggyva++a++aa+++++p++v+E+n+ +gl+nk+ +r+a +vl
+  sp|A3Q1L8|MURG_MYCSJ  94 TVHADVVIGFGGYVALPAYLAARRNRVPIVVHEANASAGLANKVGARFARRVL 146
+                           **************************************************997 PP
+
+>> sp|A1UI54|MURG_MYCSK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  122.2   1.3   7.9e-37   4.4e-34       1     138 [.       7     146 ..       7     147 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 122.2 bits;  conditional E-value: 7.9e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+laggGT+G+vePa+A+a++L + ++ Vr   l+t++gle+++ +e+g++ + i+p  +l++kl s +  + + ++++a+r+++eil 
+  sp|A1UI54|MURG_MYCSK   7 VLLAGGGTAGHVEPAMAVADALAALEPGVRitaLGTERGLETRLvPERGYALELITPV-PLPRKL-SGDLARLPMRVRRAVRETREILD 93 
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                              +dvv+gfggyva++a++aa+++++p++v+E+n+ +gl+nk+ +r+a +vl
+  sp|A1UI54|MURG_MYCSK  94 TVHADVVIGFGGYVALPAYLAARRNRVPIVVHEANASAGLANKVGARFARRVL 146
+                           **************************************************997 PP
+
+>> sp|Q1B6X1|MURG_MYCSS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  122.2   1.3   7.9e-37   4.4e-34       1     138 [.       7     146 ..       7     147 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 122.2 bits;  conditional E-value: 7.9e-37
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+laggGT+G+vePa+A+a++L + ++ Vr   l+t++gle+++ +e+g++ + i+p  +l++kl s +  + + ++++a+r+++eil 
+  sp|Q1B6X1|MURG_MYCSS   7 VLLAGGGTAGHVEPAMAVADALAALEPGVRitaLGTERGLETRLvPERGYALELITPV-PLPRKL-SGDLARLPMRVRRAVRETREILD 93 
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                              +dvv+gfggyva++a++aa+++++p++v+E+n+ +gl+nk+ +r+a +vl
+  sp|Q1B6X1|MURG_MYCSS  94 TVHADVVIGFGGYVALPAYLAARRNRVPIVVHEANASAGLANKVGARFARRVL 146
+                           **************************************************997 PP
+
+>> sp|C3LQU6|MURG_VIBCM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  122.3   0.3   6.9e-37   3.9e-34       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 122.3 bits;  conditional E-value: 6.9e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq++G+++r l+t +++e+++ +++g+e+  i+++ +l+ ++  ++ lk +++  +a+ +a+++l  ++
+  sp|C3LQU6|MURG_VIBCM   9 MVMAGGTGGHVFPGLAVAKQLQQQGWQIRwLGTADRMEAELvPKHGIEIDFIQVK-GLRGQG-LMRLLKAPFQIVNAILQARRHLLTYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a +v+
+  sp|C3LQU6|MURG_VIBCM  96 PDAVLGMGGYVSGPGGIAAWLLGIPVVLHEQNAVAGLTNQWLAKIARRVF 145
+                           *********************************************99986 PP
+
+>> sp|Q9KPG7|MURG_VIBCH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  122.3   0.3   6.9e-37   3.9e-34       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 122.3 bits;  conditional E-value: 6.9e-37
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++Lq++G+++r l+t +++e+++ +++g+e+  i+++ +l+ ++  ++ lk +++  +a+ +a+++l  ++
+  sp|Q9KPG7|MURG_VIBCH   9 MVMAGGTGGHVFPGLAVAKQLQQQGWQIRwLGTADRMEAELvPKHGIEIDFIQVK-GLRGQG-LMRLLKAPFQIVNAILQARRHLLTYQ 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a +v+
+  sp|Q9KPG7|MURG_VIBCH  96 PDAVLGMGGYVSGPGGIAAWLLGIPVVLHEQNAVAGLTNQWLAKIARRVF 145
+                           *********************************************99986 PP
+
+>> sp|A8FQA0|MURG_SHESH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  121.4   0.1   1.4e-36   7.6e-34       1     138 [.      10     147 ..      10     148 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 121.4 bits;  conditional E-value: 1.4e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++  i+++ +++ ++  l++l  ++++ +++ +a +++ke+
+  sp|A8FQA0|MURG_SHESH  10 ILIMAGGTGGHVFPALAVAKYLCQQGWQVRwLGTAERMEARLvPQHGFDIDFIDIK-GVRGNG-LLRKLAAPFKVIRSIMQAQAVIKEF 96 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpdvv+g+gg+++++ ++aa+l+g p++++Eqn+ipg++nk+l+r a +vl
+  sp|A8FQA0|MURG_SHESH  97 KPDVVLGMGGFASGPGGVAARLSGLPLVLHEQNAIPGMTNKILARIASQVL 147
+                           *********************************************999876 PP
+
+>> sp|B4RQC5|MURG_NEIG2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  120.3   0.1   2.9e-36   1.6e-33       1     138 [.       6     143 ..       6     144 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 120.3 bits;  conditional E-value: 2.9e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++l++gGT+G+++Pa+A+a+ L+ rGh+V+ l++++ +ee++ +++g+  ++++++ + + ++   ++l+ ++  +k++r+a +i++++
+  sp|B4RQC5|MURG_NEIG2   6 FMLMAGGTGGHIFPALAVADSLRVRGHHVIwLGSKDSMEERIvPQYGIRLETLAIK-GIRGNG-IKRKLMLPFTLYKTVREAQRIIRKH 92 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + + v+gfgg+v  + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl
+  sp|B4RQC5|MURG_NEIG2  93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143
+                           *************************************************97 PP
+
+>> sp|Q5F6L8|MURG_NEIG1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  120.3   0.1   2.9e-36   1.6e-33       1     138 [.       6     143 ..       6     144 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 120.3 bits;  conditional E-value: 2.9e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++l++gGT+G+++Pa+A+a+ L+ rGh+V+ l++++ +ee++ +++g+  ++++++ + + ++   ++l+ ++  +k++r+a +i++++
+  sp|Q5F6L8|MURG_NEIG1   6 FMLMAGGTGGHIFPALAVADSLRVRGHHVIwLGSKDSMEERIvPQYGIRLETLAIK-GIRGNG-IKRKLMLPFTLYKTVREAQRIIRKH 92 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + + v+gfgg+v  + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl
+  sp|Q5F6L8|MURG_NEIG1  93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143
+                           *************************************************97 PP
+
+>> sp|B1I4C4|MURG_DESAP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  120.4   0.3   2.8e-36   1.6e-33       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 120.4 bits;  conditional E-value: 2.8e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v++aggGT+G+++Pa+A+a++ +rr ++     ++t++gle+++ + +gl++++i++  +l++ l s+++l  +++ +++l ++  +++
+  sp|B1I4C4|MURG_DESAP   3 VIIAGGGTGGHIYPALAIAEGIKRRHPDADllyVGTSRGLETEIvPRTGLPFHAIPAA-GLKRGL-SPTNLAAVLRAGRGLGASLSLMR 89 
+                           689*******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +++p+vvvg+ggyv +++++aa+l+gi++ ++Eqn++pgl+n+ l+r+a + +
+  sp|B1I4C4|MURG_DESAP  90 RFRPQVVVGTGGYVCGPVVLAAALRGIKTLIHEQNALPGLTNRMLSRYASRTA 142
+                           *************************************************9875 PP
+
+>> sp|Q6A9Q2|MURG_PROAC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  121.3   1.1   1.4e-36     8e-34       1     134 [.       4     137 ..       4     140 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 121.3 bits;  conditional E-value: 1.4e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           vvlaggGT+G+  P++A a +Lq+rG  V  ++tp+gle +v +eagl+   i+p  +l++ +   + +k +a+   a+rka e+l++ 
+  sp|Q6A9Q2|MURG_PROAC   4 VVLAGGGTAGHTSPLIATAMALQERGATVScIGTPRGLEGRViPEAGLQLDMIPPV-PLPRTV-NADLFKVPARLAGAVRKAGEVLQRR 90 
+                           79******************************************************.****99.9999999****************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134
+                           + dvvvgfggyv+++a++aa++a+ip++++Eqn++pgl+nk+ +r+a
+  sp|Q6A9Q2|MURG_PROAC  91 QTDVVVGFGGYVSLPAYLAARRAKIPVVIHEQNAVPGLANKIAARFA 137
+                           ******************************************99986 PP
+
+>> sp|B3WDY2|MURG_LACCB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.3   0.0   1.2e-35   6.8e-33       2     138 ..       4     142 ..       3     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 118.3 bits;  conditional E-value: 1.2e-35
+                           EEE-------HHHHHHHHHHHHH---..EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGh..eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           v++ggGT+G+++Pa+Al ++L+++G   +V  ++t++gle+++ +++gl++ +++++ +++++l sl++++++ ++l +l +ak++l++
+  sp|B3WDY2|MURG_LACCB   4 VISGGGTGGHIYPALALIEALKAEGKldDVLyVGTKRGLESRIvPATGLKFATLDLQ-GFKRSL-SLSNFTTVRKFLGSLGEAKKLLQD 90 
+                           799**********************544666**************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++pd+vvg+ggyv++++l+aa++++ip++++E+n+++g++nk+l+ ++++v+
+  sp|B3WDY2|MURG_LACCB  91 FQPDIVVGTGGYVSGAILFAATRLHIPTVIHESNSVAGVTNKFLSHFVDRVA 142
+                           *************************************************997 PP
+
+>> sp|Q039R7|MURG_LACC3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.3   0.0   1.2e-35   6.8e-33       2     138 ..       4     142 ..       3     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 118.3 bits;  conditional E-value: 1.2e-35
+                           EEE-------HHHHHHHHHHHHH---..EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGh..eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           v++ggGT+G+++Pa+Al ++L+++G   +V  ++t++gle+++ +++gl++ +++++ +++++l sl++++++ ++l +l +ak++l++
+  sp|Q039R7|MURG_LACC3   4 VISGGGTGGHIYPALALIEALKAEGKldDVLyVGTKRGLESRIvPATGLKFATLDLQ-GFKRSL-SLSNFTTVRKFLGSLGEAKKLLQD 90 
+                           799**********************544666**************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++pd+vvg+ggyv++++l+aa++++ip++++E+n+++g++nk+l+ ++++v+
+  sp|Q039R7|MURG_LACC3  91 FQPDIVVGTGGYVSGAILFAATRLHIPTVIHESNSVAGVTNKFLSHFVDRVA 142
+                           *************************************************997 PP
+
+>> sp|A4J2B1|MURG_DESRM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.5   0.0     1e-35   5.8e-33       2     138 ..       4     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.5 bits;  conditional E-value: 1e-35
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++ggGT+G+++Pa+A+ar+Lq r  +V    ++t +gle+ + ++a+ ++++i++  +l++k+ sl+++k l++ ++++r+a  i+k 
+  sp|A4J2B1|MURG_DESRM   4 IITGGGTGGHIYPALAIARGLQSRFSKVQilyVGTNRGLEADIvPKANFPFQAITVS-GLQRKI-SLENFKVLWQAYRGYREAVGIIKT 90 
+                           689******************************************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++pdvv+g+ggyv ++++ aa+++gip+ ++Eqn+ pg++n++l+++a++v 
+  sp|A4J2B1|MURG_DESRM  91 FNPDVVIGTGGYVCGPVVMAAARRGIPTLIHEQNAFPGITNRILSKFADQVT 142
+                           *************************************************986 PP
+
+>> sp|Q47VQ9|MURG_COLP3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  119.8   0.0   4.1e-36   2.3e-33       2     137 ..      17     152 ..      16     154 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 119.8 bits;  conditional E-value: 4.1e-36
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+++P +A+a+eL+++G++++ l+t +++e+++ + +g+++  i++  +l+ k   l+tl+ +++ l++l++a++++k  k
+  sp|Q47VQ9|MURG_COLP3  17 LVMAGGTGGHIFPGIAVADELKAQGWKIHwLGTADRMEAQIvPMHGYDISFINIS-GLRGKN-LLTTLVMPFKLLRSLFQARRVIKTVK 103
+                           789****************************************************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pdvv+g+ggy++++ ++aa+l++ip++v+Eqn+ +gl+n+ll+r an+v
+  sp|Q47VQ9|MURG_COLP3 104 PDVVIGMGGYASAPGGLAAWLSKIPLIVHEQNAAAGLSNRLLARIANKV 152
+                           ***********************************************98 PP
+
+>> sp|B2A2H2|MURG_NATTJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  120.0   0.0   3.6e-36   2.1e-33       1     135 [.       3     139 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 120.0 bits;  conditional E-value: 3.6e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+++Pa+A+ +eL++r   V    ++t++g+e ++ +++g+++ +i+++ +l++k+  l+ +  l ++lk+l ++ +++k
+  sp|B2A2H2|MURG_NATTJ   3 VLVTGGGTGGHIYPALAVINELKERNQIVDilyVGTSKGMEQEIiPNRGIDFAAITVR-GLQRKI-NLEQVYFLRDFLKGLYQSYRLIK 89 
+                           799***********************9999****************************.******.99999999999999********* PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +++pdvv+g+ggyv +++l aa+l +ip++++Eqn ipg++nk+l+r+a+
+  sp|B2A2H2|MURG_NATTJ  90 NFTPDVVIGTGGYVCGPVLMAASLMKIPTVLHEQNVIPGITNKFLSRFAD 139
+                           ************************************************98 PP
+
+>> sp|Q6NGC8|MURG_CORDI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  119.8   0.3   4.2e-36   2.3e-33       1     130 [.       6     135 ..       6     138 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 119.8 bits;  conditional E-value: 4.2e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           vv+aggGT+G++ePa+A+a+ L++rG eV  l+t++gle+ + +e+g e + i+p  ++++k+   + +k +++ l ++ ++++ilke+
+  sp|Q6NGC8|MURG_CORDI   6 VVVAGGGTAGHIEPALAVAESLRHRGAEVVaLGTTKGLETSIvPERGFELRLINPV-PVPRKI-NADLFKLPFRLLATISQTRKILKEF 92 
+                           79******************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                             dvv+gfggyva++a+iaa+l++ip +v+E+n++ g++nkl 
+  sp|Q6NGC8|MURG_CORDI  93 DTDVVIGFGGYVAAPAYIAAKLQKIPFIVHEANARSGMANKLG 135
+                           ****************************************986 PP
+
+>> sp|B4RWX9|MURG_ALTMD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  119.5   0.3   5.1e-36   2.9e-33       1     138 [.       5     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 119.5 bits;  conditional E-value: 5.1e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+P +A+a++L+++G++++ l+t +++e++v +++ ++++ i+++ +l+ k+  ++ +  + +  k+l++a++i+k+ 
+  sp|B4RWX9|MURG_ALTMD   5 CLIMAGGTGGHVFPGLAVANALRAEGWDIHwLGTAERMEAQVvPKHDIPIHFIPVK-GLRGKG-ISARIQGAVALVKSLFSARRIIKRL 91 
+                           6899****************************************************.******.999999999999************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +pd+vvgfggy++++ ++aa+++gip++v+Eqn+ +g++nkll++ a +vl
+  sp|B4RWX9|MURG_ALTMD  92 QPDIVVGFGGYASGPGGVAAKSLGIPVIVHEQNAAAGMTNKLLSKLASRVL 142
+                           *********************************************999987 PP
+
+>> sp|Q9JSZ7|MURG_NEIMA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  119.2   0.1   6.5e-36   3.7e-33       1     138 [.       6     143 ..       6     144 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 119.2 bits;  conditional E-value: 6.5e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++l++gGT+G+++Pa+A+a+ L++rGh+V+ l++++ +ee++ +++ +  ++++++ +++ ++   ++l+ ++  ++++r+a +i++++
+  sp|Q9JSZ7|MURG_NEIMA   6 FMLMAGGTGGHIFPALAVADSLRARGHHVIwLGSKDSMEERIvPQYDILLETLAIK-GVRGNG-IKRKLMLPFTLYQTVREAQQIIRKH 92 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + + v+gfgg+v  + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl
+  sp|Q9JSZ7|MURG_NEIMA  93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143
+                           *************************************************97 PP
+
+>> sp|B0KFS6|MURG_PSEPG  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  115.5   0.2   9.2e-35   5.2e-32       1     130 [.       8     137 ..       8     144 .. 0.98
+   2 ?    2.3   0.0       7.8   4.4e+03      34      55 ..     209     258 ..     207     352 .. 0.56
+
+  Alignments for each domain:
+  == domain 1    score: 115.5 bits;  conditional E-value: 9.2e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++  +l+ k+ +l+ lk ++   ka+ +a++i+++ 
+  sp|B0KFS6|MURG_PSEPG   8 VLIMAGGTGGHVFPALACAREFQARGYSVHwLGTPRGIENELvPQAGLPLHLIQVS-GLRGKG-KLSLLKAPFTLIKAVLQARRIIRQL 94 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                           kp  v+gfggyv ++ ++aa+l+g+p++++Eqn+++g +n+ll
+  sp|B0KFS6|MURG_PSEPG  95 KPVCVLGFGGYVTGPGGVAARLCGVPLVIHEQNARAGTANRLL 137
+                           ****************************************986 PP
+
+  == domain 2    score: 2.3 bits;  conditional E-value: 7.8
+                           TGGGHHHH.HH---EEEE----...........................S CS
+       Glyco_transf_28  34 ppgleefv.eeagleavpigpd...........................v 55 
+                           p gl+++v  +ag ++ pi+++                           v
+  sp|B0KFS6|MURG_PSEPG 209 PAGLRPEVfHQAGKQHAPITAEryheagvaaqvepfikdmaqaygwadmV 258
+                           77788888888888888888886666444444444444444444444440 PP
+
+>> sp|A4XQS4|MURG_PSEMY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.7   0.2   8.9e-36     5e-33       1     137 [.       5     141 ..       5     142 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 118.7 bits;  conditional E-value: 8.9e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+t++g+e+++ ++agl+ + i++  +l+ k+ +l+ lk +++ l++l +a++i++e 
+  sp|A4XQS4|MURG_PSEMY   5 VLIMAGGTGGHVFPALACAREFQTRGYAVHwLGTSRGIENELvPQAGLPLHLINVS-GLRGKG-KLSLLKAPFQLLRSLLQARRIVREL 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +p  v+g+ggyv ++ ++aa+lag+p++++Eqn+++g +n+ll+r a+++
+  sp|A4XQS4|MURG_PSEMY  92 QPVCVLGMGGYVTGPGGLAARLAGVPLVIHEQNAVAGTANRLLSRIATRI 141
+                           **********************************************9986 PP
+
+>> sp|Q48EF8|MURG_PSE14  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.7   0.4     9e-36   5.1e-33       1     137 [.       5     141 ..       5     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.7 bits;  conditional E-value: 9e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG++V+ l+tp+g+e+++ ++agl+ + i++  +l+ k+  l+ lk ++  lkal +a++++++ 
+  sp|Q48EF8|MURG_PSE14   5 VLIMAGGTGGHVFPALACAREFQARGYKVHwLGTPRGIENELvPQAGLTLHLINVT-GLRGKG-RLSLLKAPFMLLKALMQARKVVRQV 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kp  vvgfggyv ++ ++aa+lag+p++++Eqn+++g +n+ l+ +a +v
+  sp|Q48EF8|MURG_PSE14  92 KPVCVVGFGGYVTGPGGLAAKLAGVPLIIHEQNAVAGTANRSLASFASRV 141
+                           ********************************************999886 PP
+
+>> sp|Q8R9G6|MURG_THETN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  119.7   0.0   4.6e-36   2.6e-33       2     138 ..       4     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 119.7 bits;  conditional E-value: 4.6e-36
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++PavA+a+e  + + +     ++t++gle+++ + +g e v+i+++ ++++kl s++tlk++++ + ++++a++ilk+
+  sp|Q8R9G6|MURG_THETN   4 LFAGGGTGGHIYPAVAIAKEILKNEQDAQilfVGTEKGLEKELvPREGFELVTIEVQ-GFKRKL-SFDTLKTVYKAFTGFKQANKILKD 90 
+                           89*********************99999999**************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kp+vv+g+ggyv +++l aa   +ip+ ++Eqn+ pgl+n+ll+ +++ v+
+  sp|Q8R9G6|MURG_THETN  91 FKPHVVIGTGGYVCGPVLMAAVIKRIPTLIHEQNAFPGLTNRLLSPFVDIVA 142
+                           ***********************************************99886 PP
+
+>> sp|A5W8Q0|MURG_PSEP1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  115.6   0.2   8.3e-35   4.7e-32       1     130 [.       8     137 ..       8     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 115.6 bits;  conditional E-value: 8.3e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++  +l+ k+ +l+ lk ++   ka+ +a++i+++ 
+  sp|A5W8Q0|MURG_PSEP1   8 VLIMAGGTGGHVFPALACAREFQKRGYSVHwLGTPRGIENELvPQAGLPLHLIQVS-GLRGKG-KLSLLKAPFTLVKAVLQARRIIRQL 94 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                           kp  v+gfggyv ++ ++aa+l+g+p++++Eqn+++g +n+ll
+  sp|A5W8Q0|MURG_PSEP1  95 KPVCVLGFGGYVTGPGGVAARLCGVPLVIHEQNARAGTANRLL 137
+                           ****************************************986 PP
+
+>> sp|Q1I5B8|MURG_PSEE4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  116.2   0.4   5.5e-35   3.1e-32       1     134 [.       8     141 ..       8     145 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 116.2 bits;  conditional E-value: 5.5e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++  +l+ k+ +l+ lk ++   ka+ +a++i++e 
+  sp|Q1I5B8|MURG_PSEE4   8 VLIMAGGTGGHVFPALACAREFQARGYSVHwLGTPRGIENELvPQAGLPLHLIQVT-GLRGKG-KLSLLKAPFTLVKAVLQARRIVREL 94 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134
+                           kp  v+gfggyv ++ ++aa+l+g+p++++Eqn+++g +n+ll   a
+  sp|Q1I5B8|MURG_PSEE4  95 KPVCVIGFGGYVTGPGGVAARLCGVPLVIHEQNARAGTANRLLVPLA 141
+                           *****************************************987665 PP
+
+>> sp|Q87WY5|MURG_PSESM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.4   0.3   1.2e-35   6.5e-33       1     137 [.       5     141 ..       5     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.4 bits;  conditional E-value: 1.2e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG++V+ l+tp+g+e+++ ++agl+ + i++  +l+ k+  l+ lk ++  lkal +a++++++ 
+  sp|Q87WY5|MURG_PSESM   5 VLIMAGGTGGHVFPALACAREFQARGYKVHwLGTPRGIENELiPQAGLPLHLINVT-GLRGKG-RLSLLKAPFMLLKALMQARKVVRQV 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kp  vvgfggyv ++ ++aa+lag+p++++Eqn+++g +n+ l+ +a +v
+  sp|Q87WY5|MURG_PSESM  92 KPVCVVGFGGYVTGPGGLAARLAGVPLIIHEQNAVAGTANRSLASFASRV 141
+                           ********************************************999886 PP
+
+>> sp|C3L230|MURG_CLOB6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.5   0.0     1e-35   5.8e-33       1     138 [.       4     141 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.5 bits;  conditional E-value: 1e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggGT+G+v P +Al  eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++  lk++++++++lk++++ak+i+k++
+  sp|C3L230|MURG_CLOB6   4 IIMTGGGTAGHVTPNLALVPELKKLGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKKE 90 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpd+v++ gg+v ++++iaa l++ip++ +E++  pgl+nkl   ++++v 
+  sp|C3L230|MURG_CLOB6  91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141
+                           ********************************************9999985 PP
+
+>> sp|A1WC06|MURG_ACISJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.4   0.1   1.2e-35   6.5e-33       2     138 ..      52     188 ..      51     189 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.4 bits;  conditional E-value: 1.2e-35
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+++P +Ala++L++rG++V+ l+tp  +ee++ + +g +++pi+   +++ k+   + l  +++  +a  +a++++++ +
+  sp|A1WC06|MURG_ACISJ  52 LVMAGGTGGHIFPGLALAEALRERGWQVHwLGTPGSMEERLvPPRGFAFEPIDFS-GVRGKG-LKTLLALPLRLARACLQARAVVRRLQ 138
+                           689****************************************************.****99.99999999****************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g ggyv  + +iaa+la+ p+ ++Eqn++pg++nkll+r a++v+
+  sp|A1WC06|MURG_ACISJ 139 PDVVIGLGGYVTFPGGIAARLARKPLLLHEQNSVPGMANKLLSRLATRVY 188
+                           ***********************************************998 PP
+
+>> sp|B9MFR2|MURG_DIAST  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.4   0.1   1.2e-35   6.5e-33       2     138 ..      52     188 ..      51     189 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.4 bits;  conditional E-value: 1.2e-35
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+++P +Ala++L++rG++V+ l+tp  +ee++ + +g +++pi+   +++ k+   + l  +++  +a  +a++++++ +
+  sp|B9MFR2|MURG_DIAST  52 LVMAGGTGGHIFPGLALAEALRERGWQVHwLGTPGSMEERLvPPRGFAFEPIDFS-GVRGKG-LKTLLALPLRLARACLQARAVVRRLQ 138
+                           689****************************************************.****99.99999999****************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g ggyv  + +iaa+la+ p+ ++Eqn++pg++nkll+r a++v+
+  sp|B9MFR2|MURG_DIAST 139 PDVVIGLGGYVTFPGGIAARLARKPLLLHEQNSVPGMANKLLSRLATRVY 188
+                           ***********************************************998 PP
+
+>> sp|B8ZQQ0|MURG_MYCLB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  119.2   2.2   6.3e-36   3.6e-33       1     138 [.      31     175 ..      31     176 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 119.2 bits;  conditional E-value: 6.3e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L++ +++Vr   l+t++gle+++ +e+g++ + i+p  +l++kl + +  + ++++++a+r+++++++
+  sp|B8ZQQ0|MURG_MYCLB  31 VVLAGGGTAGHVEPAMAVADALRALDPQVRitaLGTSRGLETRLvPERGYHLELITPV-PLPRKL-TGDLARLPLRVWRAVRETRAVFE 117
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138
+                             +++vvvgfggyva++a++aa+     +++ip++v+E+n+++g++n++  r+a++vl
+  sp|B8ZQQ0|MURG_MYCLB 118 VVEAHVVVGFGGYVALPAYLAARgiprvRRRIPVVVHEANARAGIANRVGVRTAERVL 175
+                           *******************************************************997 PP
+
+>> sp|O69552|MURG_MYCLE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  119.2   2.2   6.3e-36   3.6e-33       1     138 [.      31     175 ..      31     176 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 119.2 bits;  conditional E-value: 6.3e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L++ +++Vr   l+t++gle+++ +e+g++ + i+p  +l++kl + +  + ++++++a+r+++++++
+  sp|O69552|MURG_MYCLE  31 VVLAGGGTAGHVEPAMAVADALRALDPQVRitaLGTSRGLETRLvPERGYHLELITPV-PLPRKL-TGDLARLPLRVWRAVRETRAVFE 117
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138
+                             +++vvvgfggyva++a++aa+     +++ip++v+E+n+++g++n++  r+a++vl
+  sp|O69552|MURG_MYCLE 118 VVEAHVVVGFGGYVALPAYLAARgiprvRRRIPVVVHEANARAGIANRVGVRTAERVL 175
+                           *******************************************************997 PP
+
+>> sp|Q893R7|MURG_CLOTE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  116.8   0.0   3.6e-35   2.1e-32       1     138 [.       5     142 ..       5     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 116.8 bits;  conditional E-value: 3.6e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++l+ggGT+G+v P ++l  +L++ G+eV  ++t++g+e+ + +++g+++++i ++ kl++++  lk++++++++lk++ +a++i+k++
+  sp|Q893R7|MURG_CLOTE   5 IILTGGGTAGHVTPNISLIPKLKELGYEVQyIGTKDGIEKSLiKKEGIKYHEISSG-KLRRYF-DLKNFTDPFKVLKGIMEARKIIKKE 91 
+                           78******************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kp++v++ gg+va++++i+a l+++p++ +E++  pgl+nkl+  ++n+v 
+  sp|Q893R7|MURG_CLOTE  92 KPNIVFSKGGFVAVPVVIGAYLNKVPVISHESDMTPGLANKLSTPYCNKVC 142
+                           ************************************************986 PP
+
+>> sp|A7GGX9|MURG_CLOBL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.4   0.0   1.2e-35   6.5e-33       1     138 [.       4     141 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.4 bits;  conditional E-value: 1.2e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggGT+G+v P +Al  eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++  lk++++++++lk++++ak+i+k++
+  sp|A7GGX9|MURG_CLOBL   4 IIMTGGGTAGHVTPNLALVPELKKSGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpd+v++ gg+v ++++iaa l++ip++ +E++  pgl+nkl   ++++v 
+  sp|A7GGX9|MURG_CLOBL  91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141
+                           ********************************************9999985 PP
+
+>> sp|B1IKH3|MURG_CLOBK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.4   0.0   1.2e-35   6.5e-33       1     138 [.       4     141 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.4 bits;  conditional E-value: 1.2e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggGT+G+v P +Al  eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++  lk++++++++lk++++ak+i+k++
+  sp|B1IKH3|MURG_CLOBK   4 IIMTGGGTAGHVTPNLALVPELKKSGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpd+v++ gg+v ++++iaa l++ip++ +E++  pgl+nkl   ++++v 
+  sp|B1IKH3|MURG_CLOBK  91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141
+                           ********************************************9999985 PP
+
+>> sp|C1FUF9|MURG_CLOBJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.4   0.0   1.2e-35   6.5e-33       1     138 [.       4     141 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.4 bits;  conditional E-value: 1.2e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggGT+G+v P +Al  eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++  lk++++++++lk++++ak+i+k++
+  sp|C1FUF9|MURG_CLOBJ   4 IIMTGGGTAGHVTPNLALVPELKKLGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpd+v++ gg+v ++++iaa l++ip++ +E++  pgl+nkl   ++++v 
+  sp|C1FUF9|MURG_CLOBJ  91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141
+                           ********************************************9999985 PP
+
+>> sp|A5I5J5|MURG_CLOBH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.4   0.0   1.2e-35   6.5e-33       1     138 [.       4     141 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.4 bits;  conditional E-value: 1.2e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggGT+G+v P +Al  eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++  lk++++++++lk++++ak+i+k++
+  sp|A5I5J5|MURG_CLOBH   4 IIMTGGGTAGHVTPNLALVPELKKLGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpd+v++ gg+v ++++iaa l++ip++ +E++  pgl+nkl   ++++v 
+  sp|A5I5J5|MURG_CLOBH  91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141
+                           ********************************************9999985 PP
+
+>> sp|A7FX11|MURG_CLOB1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.4   0.0   1.2e-35   6.5e-33       1     138 [.       4     141 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.4 bits;  conditional E-value: 1.2e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggGT+G+v P +Al  eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++  lk++++++++lk++++ak+i+k++
+  sp|A7FX11|MURG_CLOB1   4 IIMTGGGTAGHVTPNLALVPELKKLGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpd+v++ gg+v ++++iaa l++ip++ +E++  pgl+nkl   ++++v 
+  sp|A7FX11|MURG_CLOB1  91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141
+                           ********************************************9999985 PP
+
+>> sp|Q4ZNZ0|MURG_PSEU2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.2   0.4   1.3e-35   7.4e-33       1     137 [.       5     141 ..       5     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.2 bits;  conditional E-value: 1.3e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG++V+ l+tp+g+e+++ ++agl+ + i++  +l+ k+  l+ lk ++  lkal +a++++++ 
+  sp|Q4ZNZ0|MURG_PSEU2   5 VLIMAGGTGGHVFPALACAREFQARGYKVHwLGTPRGIENELvPQAGLTLHLINVT-GLRGKG-RLSLLKAPLMLLKALMQARKVVRQV 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kp  vvgfggyv ++ ++aa+lag+p++++Eqn+++g +n+ l+ +a +v
+  sp|Q4ZNZ0|MURG_PSEU2  92 KPVCVVGFGGYVTGPGGLAAKLAGVPLIIHEQNAVAGTANRSLASFASRV 141
+                           ********************************************999886 PP
+
+>> sp|A4XI04|MURG_CALS8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  115.7   0.0   7.7e-35   4.3e-32       1     138 [.       8     147 ..       8     148 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 115.7 bits;  conditional E-value: 7.7e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT+G+++PavA+a+ L++r  +     ++t +gle+++ +++g++++ i+++ +l+++l ++k++  ++++  ++r+a +ilk
+  sp|A4XI04|MURG_CALS8   8 IVFSGGGTGGHIYPAVAVADYLKKRYNNLNivfIGTNEGLESKIvPQHGYKIEYIQAK-GLKRSL-TVKNVEVFLKFISGYRQALQILK 94 
+                           79***********************99988889*************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + kp+vv+ +ggyv++++ +aa++++i+++++Eqn+ pgl+nk+ +r+++++l
+  sp|A4XI04|MURG_CALS8  95 RIKPKVVFVTGGYVSLPVALAARRLKIKTILHEQNAYPGLANKIISRFCEKIL 147
+                           *************************************************9987 PP
+
+>> sp|A0R016|MURG_MYCS2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  117.6   0.8     2e-35   1.1e-32       1     138 [.      17     161 ..      17     162 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 117.6 bits;  conditional E-value: 2e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L++ +++Vr   l+t++gle+++ +++g++ + i+p  +l++k  s + l+ + +++ a+r+++ +l 
+  sp|A0R016|MURG_MYCS2  17 VVLAGGGTAGHVEPAMAVADALRALDPDVRitaLGTQRGLETRLvPQRGYDLELITPV-PLPRKP-SKDLLRLPMRVRTAIRQTRDVLT 103
+                           79********************************************************.*****9.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138
+                             ++dvvvgfggyva++a++aa+     ++++p++v+E+n+++gl+n++ +r a +vl
+  sp|A0R016|MURG_MYCS2 104 GVNADVVVGFGGYVALPAYLAARggltgRRKVPVVVHEANARAGLANRVGARSARRVL 161
+                           ******************************************************9997 PP
+
+>> sp|A8YUN9|MURG_LACH4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  116.8   0.0   3.5e-35     2e-32       1     137 [.       3     143 ..       3     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 116.8 bits;  conditional E-value: 3.5e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.....EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.....latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 
+                           v+++ggGT+G+++P++A+ ++L++rG+        ++t++gle+++ ++ag+++++i+++ ++++k   lk++ ++  +l+a+++a++i
+  sp|A8YUN9|MURG_LACH4   3 VIFTGGGTGGHIYPIMAIIERLKERGISTNdkilfVGTKKGLESKIvPAAGVNFKTINIQ-GFNRKH-PLKNFETIKLFLQATKSARKI 89 
+                           789*********************************************************.****98.********************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           lke+kpdvv+g+ggyv+++ +++a++ +ip+ ++E+n++ gl+nk+l  +++++
+  sp|A8YUN9|MURG_LACH4  90 LKEFKPDVVLGTGGYVSGAMVYEAAKMHIPTMIHESNSVVGLANKFLGHYVDRI 143
+                           **************************************************9987 PP
+
+>> sp|A1SL80|MURG_NOCSJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  118.6   0.4   9.9e-36   5.6e-33       1     139 []       3     143 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 118.6 bits;  conditional E-value: 9.9e-36
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+laggGT+G+  P++A a++L+r +++V+   l+tp+gle++v +eag++ + i+p  +l+++    + lk +++ + a+r++ ++l 
+  sp|A1SL80|MURG_NOCSJ   3 VLLAGGGTAGHTSPLLATADALRRLEPDVEitcLGTPRGLENKVvPEAGYPLELIPPV-PLPRRP-GADLLKVPFRLRAAVRATHAVLD 89 
+                           79********************************************************.****99.9999999**************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           + +pdvvvg+ggyv+ +a++a++++gip++v+Eqn +pgl+n++ +r+a +v+v
+  sp|A1SL80|MURG_NOCSJ  90 RVRPDVVVGYGGYVSMPAYVATRKRGIPLVVHEQNTVPGLANRAGARFAQRVAV 143
+                           **************************************************9975 PP
+
+>> sp|Q88N76|MURG_PSEPK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  115.0   0.3   1.3e-34   7.1e-32       1     130 [.       8     137 ..       8     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 115.0 bits;  conditional E-value: 1.3e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++  +l+ k+ +l+ lk ++   ka+ +a++i+++ 
+  sp|Q88N76|MURG_PSEPK   8 VLIMAGGTGGHVFPALACAREFQARGYSVHwLGTPRGIENELvPQAGLPLHLIQVS-GLRGKG-KLSLLKAPFTLVKAVLQARRIIRQL 94 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                           kp  v+gfggyv ++ ++aa+l+g+p++++Eqn+++g +n+ll
+  sp|Q88N76|MURG_PSEPK  95 KPVCVLGFGGYVTGPGGVAARLCGVPLVIHEQNARAGTANRLL 137
+                           ****************************************986 PP
+
+>> sp|B1KYH7|MURG_CLOBM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  117.3   0.0   2.4e-35   1.4e-32       1     138 [.       4     141 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 117.3 bits;  conditional E-value: 2.4e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggGT+G+v P +Al  eL++ G+e++ +++ +g+e+++ e +g+e+ pi ++ kl++++  lk++++++++lk++++ak+i+k++
+  sp|B1KYH7|MURG_CLOBM   4 IIMTGGGTAGHVTPNLALVPELKKLGYEIKyIGSIEGIERKIiEREGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpd+v++ gg+v ++++iaa l++ip++ +E++  pgl+nkl   ++++v 
+  sp|B1KYH7|MURG_CLOBM  91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141
+                           ********************************************9999985 PP
+
+>> sp|Q24TE6|MURG_DESHY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  117.2   0.1   2.7e-35   1.5e-32       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 117.2 bits;  conditional E-value: 2.7e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+++Pa+A+a++  ++ ++ +   ++t +g+e+++ +eag+e+  + ++ +l++kl sl+tlk   + +kal ++k+ilk
+  sp|Q24TE6|MURG_DESHY   3 VIVTGGGTGGHIYPALAIAKGILAQRPDAEilyIGTREGMEARLvPEAGIEFSGVSGQ-GLPRKL-SLETLKVGGKSFKALWETKQILK 89 
+                           689************************99999**************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd+vvg+ggyva+++++ a+l gip+ ++Eqn++pg++nk+l r++ +v+
+  sp|Q24TE6|MURG_DESHY  90 KFKPDLVVGTGGYVAGPVVLTAALFGIPTLLHEQNALPGITNKILTRFVRKVM 142
+                           *************************************************9997 PP
+
+>> sp|Q3K744|MURG_PSEPF  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  117.0   0.5   3.1e-35   1.8e-32       1     137 [.       5     141 ..       5     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 117.0 bits;  conditional E-value: 3.1e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agle + i++  +l+ k+ +l+ lk ++  lk++ +a++i+++ 
+  sp|Q3K744|MURG_PSEPF   5 VLIMAGGTGGHVFPALACAREFQARGYTVHwLGTPRGIENDLvPAAGLELHRINAT-GLRGKG-KLSLLKAPFMLLKSVWQARAIIRRL 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +p  vvgfggyv ++ ++aa+lag+p++v+Eqn+++g +n+ll  +a +v
+  sp|Q3K744|MURG_PSEPF  92 RPVCVVGFGGYVTGPGGLAAKLAGVPVIVHEQNAVAGTANRLLVPFAARV 141
+                           *******************************************9999876 PP
+
+>> sp|B1J3L2|MURG_PSEPW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  113.8   0.4     3e-34   1.7e-31       1     130 [.       8     137 ..       8     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 113.8 bits;  conditional E-value: 3e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++  +l+ k+ +l+ lk ++   ka+ +a++i+ + 
+  sp|B1J3L2|MURG_PSEPW   8 VLIMAGGTGGHVFPALACAREFQARGYTVHwLGTPRGIENELvPQAGLSLHLIQVS-GLRGKG-KLSLLKAPFTLVKAVLQARRIIGQL 94 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                           kp  v+gfggyv ++ ++aa+l+g+p++++Eqn+++g +n+ll
+  sp|B1J3L2|MURG_PSEPW  95 KPVCVIGFGGYVTGPGGVAARLCGVPLVIHEQNARAGTANRLL 137
+                           ****************************************986 PP
+
+>> sp|B0K3H0|MURG_THEPX  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  114.4   0.0     2e-34   1.1e-31       2     138 ..       4     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 114.4 bits;  conditional E-value: 2e-34
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++Pa+A+a+e  + + +     ++t++gle+++ + +g e ++i+++ ++++kl sl+tlk++++   +l++a+ il e
+  sp|B0K3H0|MURG_THEPX   4 LFAGGGTGGHIYPAIAIAKEILKNEKNAQilfVGTKKGLENELvPREGFELKTITVQ-GFKRKL-SLDTLKTIYKAMVGLKEANNILNE 90 
+                           89*********************99999999**************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpdvv+g+ggyv +++l  a+l gip+ ++Eqn+ pgl+nk+l+r+++ v+
+  sp|B0K3H0|MURG_THEPX  91 FKPDVVIGTGGYVCGPVLMMAALKGIPTLIHEQNAFPGLTNKVLSRFVKVVA 142
+                           ***********************************************99776 PP
+
+>> sp|B0K8K7|MURG_THEP3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  114.4   0.0     2e-34   1.1e-31       2     138 ..       4     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 114.4 bits;  conditional E-value: 2e-34
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++Pa+A+a+e  + + +     ++t++gle+++ + +g e ++i+++ ++++kl sl+tlk++++   +l++a+ il e
+  sp|B0K8K7|MURG_THEP3   4 LFAGGGTGGHIYPAIAIAKEILKNEKNAQilfVGTKKGLENELvPREGFELKTITVQ-GFKRKL-SLDTLKTIYKAMVGLKEANNILNE 90 
+                           89*********************99999999**************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpdvv+g+ggyv +++l  a+l gip+ ++Eqn+ pgl+nk+l+r+++ v+
+  sp|B0K8K7|MURG_THEP3  91 FKPDVVIGTGGYVCGPVLMMAALKGIPTLIHEQNAFPGLTNKVLSRFVKVVA 142
+                           ***********************************************99776 PP
+
+>> sp|A3DE27|MURG_CLOTH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  114.0   0.0   2.7e-34   1.5e-31       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 114.0 bits;  conditional E-value: 2.7e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G++ P +A+a+  ++r+++ +   ++t++gle+++ + ++ e++ i+++ ++++kl s++tl+ + e +++l +a++i+k
+  sp|A3DE27|MURG_CLOTH   3 VIISGGGTAGHINPGLAIAKYIKKREPDTEilfIGTERGLEARLvPRENFEIKMIKVR-GFKRKL-SMDTLVAVKELFQGLAEARKIIK 89 
+                           6899******************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd+v+g+ggyv +++l++a++ +ip+ v+Eqn+ pg++nk+l++++++v+
+  sp|A3DE27|MURG_CLOTH  90 DYKPDLVIGTGGYVCGPVLFNASRMKIPTLVHEQNAFPGVTNKILSKFVDRVA 142
+                           ***************************************************97 PP
+
+>> sp|A1TAW8|MURG_MYCVP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  116.6   1.1   4.1e-35   2.3e-32       1     138 [.      32     175 ..      32     176 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 116.6 bits;  conditional E-value: 4.1e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G++ePa+A+a++L + +++Vr   l+t++gle+++ +++g++ + i++  +l++kl s + ++ + ++l+a+r++++il 
+  sp|A1TAW8|MURG_MYCVP  32 VVLAGGGTAGHIEPAMAVADALTALDPDVRitaLGTERGLETRLvPQRGYHLELITLV-PLPRKL-SADLFRLPMRVLRAVRQTRRILD 118
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH....HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal....lagipanvaEqngipglvnkllprrangvl 138
+                           e ++dvvvgfggyva++a++aa+     +++p++v+E+n+ +g +nk+ +r a +vl
+  sp|A1TAW8|MURG_MYCVP 119 EVSADVVVGFGGYVAVPAYLAARslrtHRRVPVVVHEANASAGWANKVGARSAQRVL 175
+                           **********************97777889***********************9997 PP
+
+>> sp|B8FT56|MURG_DESHD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  114.9   0.2   1.3e-34   7.6e-32       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 114.9 bits;  conditional E-value: 1.3e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+++Pa+A+a++     ++ +   ++t +g+e+++ +eagle+  + ++ +l++kl sl+tlk   + +kal ++k+ilk
+  sp|B8FT56|MURG_DESHD   3 VIVTGGGTGGHIYPALAIAKGILVHQPDAEilyIGTREGMEARLvPEAGLEFAGVSGQ-GLPRKL-SLETLKVGGKSFKALWETKQILK 89 
+                           689********************999999999**************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd+vvg+ggyva+++++ a+l gip+ ++Eqn++pg++nk+l r++ +v+
+  sp|B8FT56|MURG_DESHD  90 KFKPDLVVGTGGYVAGPVVLTAALFGIPTLLHEQNALPGITNKILTRFVRKVM 142
+                           *************************************************9997 PP
+
+>> sp|Q9RWP0|MURG_DEIRA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  116.6   0.8   4.1e-35   2.3e-32       1     137 [.       4     141 ..       4     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 116.6 bits;  conditional E-value: 4.1e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           vv+a+gGT+G+++PavA a+eL+ rG+eV  ++ + g+ee + e +gl+++ ++++ kl+++++    +++l++ +++l +a+++l+  
+  sp|Q9RWP0|MURG_DEIRA   4 VVMATGGTGGHIYPAVATAKELRGRGYEVAlMGQKGGMEEGIaEREGLTFYGVDAG-KLARSGQGRPDPRQLLKAGQGLAQARRTLAGL 91 
+                           79******************************************************.******************************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +p++vvg+gg+++++ ++aa ++gip++++Eqn++ gl+++l  rra  v
+  sp|Q9RWP0|MURG_DEIRA  92 NPAAVVGYGGFASLPGVLAAQSLGIPTILHEQNARLGLTQRLAVRRARAV 141
+                           **********************************************9877 PP
+
+>> sp|B2I1J5|MURG_ACIBC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  113.7   0.3   3.1e-34   1.8e-31       1     135 [.      12     146 ..      12     149 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 113.7 bits;  conditional E-value: 3.1e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++ GT+G+v+Pa+A+a++Lq++G +V  latp g+e+++ + +++++++i+++ +++ ++  +++l  +++ lka+++a++ +k+ 
+  sp|B2I1J5|MURG_ACIBC  12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPTGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 
+                           67899***************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n  l+r a+
+  sp|B2I1J5|MURG_ACIBC  99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146
+                           ****************************************99998776 PP
+
+>> sp|B0V9F5|MURG_ACIBY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  113.7   0.3   3.1e-34   1.8e-31       1     135 [.      12     146 ..      12     149 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 113.7 bits;  conditional E-value: 3.1e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++ GT+G+v+Pa+A+a++Lq++G +V  latp g+e+++ + +++++++i+++ +++ ++  +++l  +++ lka+++a++ +k+ 
+  sp|B0V9F5|MURG_ACIBY  12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPTGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 
+                           67899***************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n  l+r a+
+  sp|B0V9F5|MURG_ACIBY  99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146
+                           ****************************************99998776 PP
+
+>> sp|B7GV73|MURG_ACIB3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  113.7   0.3   3.1e-34   1.8e-31       1     135 [.      12     146 ..      12     149 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 113.7 bits;  conditional E-value: 3.1e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++ GT+G+v+Pa+A+a++Lq++G +V  latp g+e+++ + +++++++i+++ +++ ++  +++l  +++ lka+++a++ +k+ 
+  sp|B7GV73|MURG_ACIB3  12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPTGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 
+                           67899***************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n  l+r a+
+  sp|B7GV73|MURG_ACIB3  99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146
+                           ****************************************99998776 PP
+
+>> sp|B7ICE5|MURG_ACIB5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  113.7   0.3   3.1e-34   1.8e-31       1     135 [.      12     146 ..      12     149 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 113.7 bits;  conditional E-value: 3.1e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++ GT+G+v+Pa+A+a++Lq++G +V  latp g+e+++ + +++++++i+++ +++ ++  +++l  +++ lka+++a++ +k+ 
+  sp|B7ICE5|MURG_ACIB5  12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPTGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 
+                           67899***************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n  l+r a+
+  sp|B7ICE5|MURG_ACIB5  99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146
+                           ****************************************99998776 PP
+
+>> sp|A5D145|MURG_PELTS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  116.5   0.0   4.4e-35   2.5e-32       1     138 [.       3     142 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 116.5 bits;  conditional E-value: 4.4e-35
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+A+ar+L++r +  +   ++t++g+e+ + +++g ++  i +  +l +kl s+++l+ l++  +++ +a ei+ 
+  sp|A5D145|MURG_PELTS   3 FLVSGGGTGGHIYPALAIARGLKNRYPGAEilyMGTSNGMEADIvPAEGFPFTGISAS-GLERKL-SPRNLLALWQAVRGFCQAVEIIG 89 
+                           799**********************7766666**************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +++p++v+g+ggyv +++++aa l +ip+ ++Eqn++pg++n++l+r+a +v+
+  sp|A5D145|MURG_PELTS  90 RWRPEAVIGTGGYVCGPVVLAAVLKRIPTLIHEQNALPGVTNRILSRFASRVA 142
+                           **************************************************997 PP
+
+>> sp|A3M9Y1|MURG_ACIBT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  113.7   0.3   3.1e-34   1.8e-31       1     135 [.      12     146 ..      12     149 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 113.7 bits;  conditional E-value: 3.1e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++ GT+G+v+Pa+A+a++Lq++G +V  latp g+e+++ + +++++++i+++ +++ ++  +++l  +++ lka+++a++ +k+ 
+  sp|A3M9Y1|MURG_ACIBT  12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPTGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 
+                           67899***************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n  l+r a+
+  sp|A3M9Y1|MURG_ACIBT  99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146
+                           ****************************************99998776 PP
+
+>> sp|A9KK83|MURG_CLOPH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  115.3   0.0   1.1e-34   5.9e-32       1     134 [.       4     137 ..       4     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 115.3 bits;  conditional E-value: 1.1e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +vl+ggGT+G+v P +Al  +L+++G+e++ +++ +g+e+++ e+ g++++ i ++ kl+++l  +k++++++++lk++r+ak++lk+ 
+  sp|A9KK83|MURG_CLOPH   4 IVLTGGGTAGHVTPNIALIAGLKEQGYEIHyIGSYEGIERELiEKLGIPYHGISSG-KLRRYL-DIKNFSDPFKVLKGYREAKKLLKNL 90 
+                           79******************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134
+                            p+vv++ gg+va+++++aa++++ipa+++E++  pgl+n+l+   a
+  sp|A9KK83|MURG_CLOPH  91 DPNVVFSKGGFVAVPVVLAAKKRKIPAIIHESDMTPGLANRLCIPSA 137
+                           ****************************************9876555 PP
+
+>> sp|C3KCT0|MURG_PSEFS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  115.0   0.5   1.3e-34   7.1e-32       1     134 [.       5     138 ..       5     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 115.0 bits;  conditional E-value: 1.3e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++  +l+ k+ +l+ lk ++  lka+ +a++++++ 
+  sp|C3KCT0|MURG_PSEFS   5 VLIMAGGTGGHVFPALACAREFQNRGYTVHwLGTPRGIENELvPNAGLPLHLINVT-GLRGKG-KLSLLKAPFVLLKAVWQARKVIRDV 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134
+                           +p  v+gfggyv ++ ++aa+lag+p++v+Eqn+++g +n+ll   a
+  sp|C3KCT0|MURG_PSEFS  92 QPVCVLGFGGYVTGPGGVAAKLAGVPVIVHEQNAVAGTANRLLVPLA 138
+                           *****************************************987665 PP
+
+>> sp|Q03EY2|MURG_PEDPA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  114.6   0.0   1.7e-34   9.5e-32       2     138 ..       4     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 114.6 bits;  conditional E-value: 1.7e-34
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++ggGT+G+++Pa+Al +++++ +++     ++t++gle+++ + +g+++++i+++ +++++l sl+++k++  +l ++ ka++ +ke
+  sp|Q03EY2|MURG_PEDPA   4 MVSGGGTGGHIYPALALIKQVKQSEPDSQilyVGTSKGLESKIvPDSGIDFKTINIQ-GFKRSL-SLENFKTIGLFLSSVVKARKMVKE 90 
+                           5899***********************9999**************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpdvv+g+ggyv++++++aa+  g+p++++Eqn++ g++nk+l++++++++
+  sp|Q03EY2|MURG_PEDPA  91 FKPDVVLGTGGYVSGAVVFAASMMGVPTVIHEQNSVVGVTNKFLSKFVKKIA 142
+                           *************************************************987 PP
+
+>> sp|A0QF52|MURG_MYCA1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  114.2   1.0   2.2e-34   1.3e-31       1     138 [.      34     178 ..      34     179 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 114.2 bits;  conditional E-value: 2.2e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L++ +++Vr   l+t +gle+++ +e+g++ + i+p  +l++k  + +  + + ++++a+r+++++l 
+  sp|A0QF52|MURG_MYCA1  34 VVLAGGGTAGHVEPAMAVADALKALDPNVRitsLGTARGLETRLvPERGYDLELITPV-PLPRKP-TGDLARLPSRVWRAVRETRAVLH 120
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138
+                              +dvv+gfggyva++a++aa+     + ++p++++E+n+ +gl+n++ +r+a +vl
+  sp|A0QF52|MURG_MYCA1 121 AVDADVVIGFGGYVALPAYLAARgvsprKPRVPVVIHEANASAGLANRVGARTAQRVL 178
+                           ***********************99999***************************997 PP
+
+>> sp|Q04B72|MURG_LACDB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.2   0.0   3.7e-33   2.1e-30       1     137 [.       3     143 ..       3     145 .. 0.96
+   2 ?    2.3   0.0       7.8   4.4e+03      71     102 ..     204     235 ..     179     240 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 110.2 bits;  conditional E-value: 3.7e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.......EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.......latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkak 81 
+                           v+++ggGT+G+++P++Al ++L+++G  ++       ++t++gle+++ ++ag+++++i+++ ++ +k   l+++k+++ +lka+++ak
+  sp|Q04B72|MURG_LACDB   3 VIFSGGGTGGHIYPIMALIERLKEEG--ICqddeilfVGTKKGLESKIvPAAGVNFKTIDIQ-GFDRKH-LLNNVKTIQLFLKATKRAK 87 
+                           689***********************..44568889**************************.****98.******************* PP
+
+                           HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           eil++++pdvv+g+ggyv+++++++a++ +ip+ ++E+n++ g++nk+l  +++++
+  sp|Q04B72|MURG_LACDB  88 EILADFQPDVVLGTGGYVSGAIVYEASKMKIPTMIHESNSVVGVANKFLGHYVDKI 143
+                           ****************************************************9987 PP
+
+  == domain 2    score: 2.3 bits;  conditional E-value: 7.8
+                           HHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  71 aeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           ++ ++ + k+ + lk++  +v++++g+y+ d+
+  sp|Q04B72|MURG_LACDB 204 LAINRVMLKSLMELKKKPYQVIWATGTYYYDA 235
+                           455567888999999999999**999999875 PP
+
+>> sp|Q1GAT5|MURG_LACDA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.2   0.0   3.7e-33   2.1e-30       1     137 [.       3     143 ..       3     145 .. 0.96
+   2 ?    2.3   0.0       7.8   4.4e+03      71     102 ..     204     235 ..     179     240 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 110.2 bits;  conditional E-value: 3.7e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.......EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.......latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkak 81 
+                           v+++ggGT+G+++P++Al ++L+++G  ++       ++t++gle+++ ++ag+++++i+++ ++ +k   l+++k+++ +lka+++ak
+  sp|Q1GAT5|MURG_LACDA   3 VIFSGGGTGGHIYPIMALIERLKEEG--ICqddeilfVGTKKGLESKIvPAAGVNFKTIDIQ-GFDRKH-LLNNVKTIQLFLKATKRAK 87 
+                           689***********************..44568889**************************.****98.******************* PP
+
+                           HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           eil++++pdvv+g+ggyv+++++++a++ +ip+ ++E+n++ g++nk+l  +++++
+  sp|Q1GAT5|MURG_LACDA  88 EILADFQPDVVLGTGGYVSGAIVYEASKMKIPTMIHESNSVVGVANKFLGHYVDKI 143
+                           ****************************************************9987 PP
+
+  == domain 2    score: 2.3 bits;  conditional E-value: 7.8
+                           HHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS
+       Glyco_transf_28  71 aeglkalrkakeilkeakpdvvvgfggyvadl 102
+                           ++ ++ + k+ + lk++  +v++++g+y+ d+
+  sp|Q1GAT5|MURG_LACDA 204 LAINRVMLKSLMELKKKPYQVIWATGTYYYDA 235
+                           455567888999999999999**999999875 PP
+
+>> sp|Q4K6J3|MURG_PSEF5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  114.7   0.6   1.6e-34   9.1e-32       1     134 [.       5     138 ..       5     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 114.7 bits;  conditional E-value: 1.6e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i++  +l+ k+ +l+ lk ++   ka+ +a++++++ 
+  sp|Q4K6J3|MURG_PSEF5   5 VLIMAGGTGGHVFPALACAREFQARGYTVHwLGTPRGIENDLvPAAGLPLHLINVS-GLRGKG-KLSLLKAPFVLIKAVLQARRVIRQL 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134
+                           kp  v+gfggyv ++ ++aa+l+g+p++v+Eqn+++g +n+ll   a
+  sp|Q4K6J3|MURG_PSEF5  92 KPVCVLGFGGYVTGPGGVAAKLSGVPVIVHEQNAVAGTANRLLVPLA 138
+                           *****************************************987665 PP
+
+>> sp|B0VNZ9|MURG_ACIBS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  112.1   0.3     1e-33   5.8e-31       1     135 [.      12     146 ..      12     149 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 112.1 bits;  conditional E-value: 1e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++ GT+G+v+Pa+A+a++Lq++G +V  latp g+e+++ + +++++++i+++ +++ ++  +++l  +++ lka+++a++ +k+ 
+  sp|B0VNZ9|MURG_ACIBS  12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPIGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 
+                           67899***************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n  l+r a+
+  sp|B0VNZ9|MURG_ACIBS  99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146
+                           ****************************************99998776 PP
+
+>> sp|Q5FKV2|MURG_LACAC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  112.3   0.0   8.8e-34     5e-31       1     137 [.       3     143 ..       3     145 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 112.3 bits;  conditional E-value: 8.8e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.....EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.....latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 
+                           v+++ggGT+G+++P++A+ ++L++rG+        ++t++gle+++ ++ag+++++i+++ ++++k   lk++ ++  +++a+++a++i
+  sp|Q5FKV2|MURG_LACAC   3 VIFTGGGTGGHIYPIMAIIERLKERGISKNdeilfVGTQKGLESKIvPAAGVNFETIQIQ-GFNRKH-PLKNFETIKLFFQATKSARKI 89 
+                           789***********************87778999**************************.****98.********************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           l+e+kpdvv+g+ggyv+++ +++a++ +ip+ ++E+n++ gl+nk+l  +++++
+  sp|Q5FKV2|MURG_LACAC  90 LQEFKPDVVLGTGGYVSGAMVYEAAKMHIPTMIHESNSVVGLANKFLGHYVDKI 143
+                           **************************************************9987 PP
+
+>> sp|A0KPX2|MURG_AERHH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  111.7   0.3   1.3e-33   7.3e-31       2     138 ..       6     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 111.7 bits;  conditional E-value: 1.3e-33
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G+ ++ l+t +++e+++ +++g+++  i+++ +++ ++   + l+ +++  k++ +a+++lk  +
+  sp|A0KPX2|MURG_AERHH   6 LVMAGGTGGHVFPGLAVADRLKAQGWTIHwLGTADRMEAELvPAHGYPISFIDIQ-GVRGNG-IKRLLVAPYRIVKSVLQARRVLKTIR 92 
+                           789****************************************************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+gg+++++ ++aa+l+gip+ ++Eqn+ +gl+nkll+r a++vl
+  sp|A0KPX2|MURG_AERHH  93 PDVVLGMGGFASGPGGVAAWLSGIPLLLHEQNAAAGLTNKLLARLAKRVL 142
+                           ***********************************************997 PP
+
+>> sp|A1WYU3|MURG_HALHL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  114.1   2.4   2.4e-34   1.4e-31       1     132 [.       6     137 ..       6     144 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 114.1 bits;  conditional E-value: 2.4e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++a+gGT+G+v+P +A+a++L++rGh+V  l+t  gle +v ++agl+a+ ++++ + + k+   +    +++ ++a+  a ++l+++
+  sp|A1WYU3|MURG_HALHL   6 VAIAAGGTGGHVYPGLAVADALRERGHRVVwLGTRAGLEGRVvPAAGLDAEWLEIG-GMRGKG-LATIAALPWRLGRAVAVAGAALRRQ 92 
+                           799*****************************************************.****99.9************************ PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllpr 132
+                           +pdvv+g+ggyva+++++aa+lag p++++Eqn+++g++n++l+r
+  sp|A1WYU3|MURG_HALHL  93 RPDVVLGMGGYVAGPVGLAARLAGRPLIIHEQNARAGMTNRFLAR 137
+                           ******************************************987 PP
+
+>> sp|Q73YQ8|MURG_MYCPA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  113.0   1.5   5.5e-34   3.1e-31       1     138 [.      34     178 ..      34     179 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 113.0 bits;  conditional E-value: 5.5e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L++ +++Vr   l+t +gle+++ +e+g++ + i+p  +l++k  + +  + + ++++a+r+++++l 
+  sp|Q73YQ8|MURG_MYCPA  34 VVLAGGGTAGHVEPAMAVADALKALDPHVRitaLGTARGLETRLvPERGYDLELITPV-PLPRKP-TGDLARLPSRVWRAVRETRAVLH 120
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138
+                              +dvv+gfggyva++a++aa+     + ++p++++E+n+ +gl+n++ +r+a +vl
+  sp|Q73YQ8|MURG_MYCPA 121 AVDADVVIGFGGYVALPAYLAARgvsprKPRVPVVIHEANASAGLANRVGARTAQRVL 178
+                           ***********************99999***************************997 PP
+
+>> sp|B1MXW0|MURG_LEUCK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  113.4   0.3   3.9e-34   2.2e-31       1     137 [.       3     141 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 113.4 bits;  conditional E-value: 3.9e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+l+ggGT+G+++Pa+Ala+  ++ +++ +   +++++g+e+ + +++g+++++++++ ++ ++l sl+++k+++ +lka++ +k+i+k
+  sp|B1MXW0|MURG_LEUCK   3 VILSGGGTGGHIYPALALAEVIKQHEPDAEflyVGSERGVEANIvPKTGMAFKQLAVQ-GFSRSL-SLHNIKTVQLFLKAVKVSKKIIK 89 
+                           789*******************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           e+kpdvv+g+ggyva+++++aa + +ip++++Eqn+++g++nk+l+r a+++
+  sp|B1MXW0|MURG_LEUCK  90 EFKPDVVIGTGGYVAGAVVYAAQRMNIPTVIHEQNSVAGVTNKFLARGATKI 141
+                           ***********************************************99987 PP
+
+>> sp|Q604V7|MURG_METCA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  112.8   0.3   6.1e-34   3.4e-31       1     138 [.       5     142 ..       5     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 112.8 bits;  conditional E-value: 6.1e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +v+++gGT+G+v+Pa+A+a +L+r+G eV  ++t  gle++v ++ag+++  + +  + + k+   ++ k +a  + a  +a +il++ 
+  sp|Q604V7|MURG_METCA   5 IVILAGGTGGHVFPALAVAGKLRRAGAEVFwMGTRTGLEARVvPAAGYPIDWLSVS-GIRGKG-LASKAKAPAMLGLACLQALRILRRR 91 
+                           799*****************************************************.******.999999999999************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpd+v+g+gg+va++ ++ a+ +gip++++Eqn ipg +n++l+r an+vl
+  sp|Q604V7|MURG_METCA  92 KPDAVLGMGGFVAGPGGLMARVLGIPLIIHEQNRIPGTTNRWLSRIANRVL 142
+                           ************************************************986 PP
+
+>> sp|B2V1X5|MURG_CLOBA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  113.3   0.0   4.2e-34   2.3e-31       1     134 [.       6     139 ..       6     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 113.3 bits;  conditional E-value: 4.2e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v+++ggGT+G+v P +Al  +L++ G eV+ +++++g+e+++ ++ ++++ +i ++ kl++++  lk++++++++lk++++a++ilk++
+  sp|B2V1X5|MURG_CLOBA   6 VIMTGGGTAGHVTPNLALVPALKENGFEVKyIGSKDGIEKEIiKNNNIPYFQISSG-KLRRYF-DLKNFSDPFKVLKGIKDANKILKKE 92 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134
+                           kpdvv++ gg+va++++iaa l++ip++ +E++  pgl+nkl++ ++
+  sp|B2V1X5|MURG_CLOBA  93 KPDVVFSKGGFVAVPVVIAAHLRKIPVVAHESDMTPGLANKLSAPFC 139
+                           *****************************************988765 PP
+
+>> sp|A1U3F8|MURG_MARAV  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  112.8   0.1     6e-34   3.4e-31       1     137 [.       9     145 ..       9     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 112.8 bits;  conditional E-value: 6e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A ar+Lq+rGheV+ l+++ g+ee++   + ++   i +  +l+ k+ +l+ l+ +++  +al +a ++l++ 
+  sp|A1U3F8|MURG_MARAV   9 FLMMAGGTGGHVFPALATARALQQRGHEVHwLGASGGMEERLiGDTDIPLSLIHIS-GLRGKG-KLALLLAPFRLMRALGEAYTHLRRI 95 
+                           799*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +pd vvg+gg+v ++ +iaa+l + p++++Eqn+i+g++n++l r+ ++v
+  sp|A1U3F8|MURG_MARAV  96 RPDCVVGMGGFVTGPGGIAAWLMRKPLVIHEQNAIAGMTNRWLTRFSETV 145
+                           *******************************************9987665 PP
+
+>> sp|A8MH36|MURG_ALKOO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.0   0.0   4.4e-33   2.5e-30       1     138 [.       3     142 ..       3     143 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 110.0 bits;  conditional E-value: 4.4e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+l+ggGT+G+++Pa+++a++ +++ ++ +   ++t++g+e+++ ++ag++++ +++   l++k+ sl+++k++a  lk++ +a++i+k
+  sp|A8MH36|MURG_ALKOO   3 VILSGGGTGGHIYPAISIANKIKEQHPKAEilfIGTENGMESEIvPKAGYPIKYVTVS-YLKRKI-SLHNVKSAAMLLKGIAEARKIIK 89 
+                           789*******************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           e+kpd+v+g+gg+v +++l+ a+++gi + ++Eqn  pgl+n++l+r++++++
+  sp|A8MH36|MURG_ALKOO  90 EFKPDIVIGTGGFVCGPVLYMASKLGIRTMIHEQNVFPGLTNRILDRYVDRIA 142
+                           **************************************************986 PP
+
+>> sp|B2TLE0|MURG_CLOBB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  112.2   0.0   9.3e-34   5.3e-31       1     136 [.       6     141 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 112.2 bits;  conditional E-value: 9.3e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v+++ggGT+G+v P +Al   L++ G eV+ +++++g+e+++ ++ ++++ +i ++ kl++++  +k++++++++lk++++a++ilk++
+  sp|B2TLE0|MURG_CLOBB   6 VIMTGGGTAGHVTPNLALVPSLKENGFEVKyIGSKDGIEKEIiKNNNIPYFQISSG-KLRRYF-DFKNFSDPFKVLKGIKDANRILKKE 92 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           kpdv+++ gg+va++++iaa l++ip++ +E++  pgl+nkl++ ++n+
+  sp|B2TLE0|MURG_CLOBB  93 KPDVIFSKGGFVAVPVVIAAHLRKIPVVAHESDMTPGLANKLSAPFCNK 141
+                           ******************************************9999987 PP
+
+>> sp|A4SI56|MURG_AERS4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.7   0.3   2.7e-33   1.5e-30       2     138 ..       6     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 110.7 bits;  conditional E-value: 2.7e-33
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G+ ++ l+t +++e+++ +++g+++  i+++ +++ ++   + l  +++  k++ +a+++lk  +
+  sp|A4SI56|MURG_AERS4   6 LVMAGGTGGHVFPGLAVADRLKAQGWTIHwLGTADRMEAELvPAHGYPISFIDIQ-GVRGNG-IKRLLAAPYRIVKSVLQARRVLKTIR 92 
+                           789****************************************************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+gg+++++ ++aa+l+gip+ ++Eqn+ +gl+nkll+r a++vl
+  sp|A4SI56|MURG_AERS4  93 PDVVLGMGGFASGPGGVAAWLSGIPLLLHEQNAAAGLTNKLLARLAKRVL 142
+                           ***********************************************997 PP
+
+>> sp|C4Z1B5|MURG_EUBE2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  111.0   0.0   2.2e-33   1.3e-30       1     137 [.       4     140 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 111.0 bits;  conditional E-value: 2.2e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +vl+ggGT+G+v P +Al   L+++G+eV  +++  g+e+++ e  g++++ i ++ kl+++  slk+l++++++l +l++ak+++k+ 
+  sp|C4Z1B5|MURG_EUBE2   4 IVLTGGGTAGHVTPNIALLPSLKEAGYEVFyIGSYTGIEKTLiEDLGIPYYGISSG-KLRRYR-SLKNLSDPFRVLHGLFQAKRLMKKI 90 
+                           79******************************************************.****88.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kpd+v++ gg+v++++++aa +++ip++++E++  pgl+nk+ +r+a+++
+  sp|C4Z1B5|MURG_EUBE2  91 KPDIVFSKGGFVSVPVVLAAGSRHIPVIIHESDMTPGLANKIAMRKATKI 140
+                           ***********************************************987 PP
+
+>> sp|C1DQ99|MURG_AZOVD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  111.8   0.2   1.2e-33   6.9e-31       1     136 [.       5     140 ..       5     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 111.8 bits;  conditional E-value: 1.2e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i+++ +l+ k+   + lk +++  ++l++a++i+ e 
+  sp|C1DQ99|MURG_AZOVD   5 VLIMAGGTGGHVFPALACAREFQARGYAVHwLGTPRGIENDLvPSAGLPLHRIQIG-GLRGKG-LATLLKAPFQLIRSLFQARRIMNEL 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           +p  v+g+gg+v ++ ++aa+l g+p++++Eqn+++g +n++l+  a++
+  sp|C1DQ99|MURG_AZOVD  92 RPVCVLGMGGFVTGPGGVAAKLTGAPLVIHEQNAVAGTSNRALAPLADR 140
+                           *****************************************99887776 PP
+
+>> sp|Q6F703|MURG_ACIAD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.5   0.3   3.2e-33   1.8e-30       1     137 [.      12     148 ..      12     149 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 110.5 bits;  conditional E-value: 3.2e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++ GT+G+v+Pa+A+a++Lq+ G +V  latp g+e+++ + +++++++i+++ +++ ++  +++l+ +++ lka+ +a++ +k+ 
+  sp|Q6F703|MURG_ACIAD  12 VMMMAAGTGGHVFPALAVAKQLQQHGCQVSwLATPAGMENRLlKDQNIPIYQIDIQ-GVRGNG-AVRKLLAPFKILKATYSAMRYMKQL 98 
+                           67899***************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           k d+v+gfggyva++ ++aa+ +gip+ ++Eqn+++g++n  l+r a +v
+  sp|Q6F703|MURG_ACIAD  99 KVDAVAGFGGYVAGPGGLAARILGIPILIHEQNAVAGFTNTQLARVASKV 148
+                           ****************************************9998888765 PP
+
+>> sp|B1YIT7|MURG_EXIS2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  112.2   0.0   9.4e-34   5.3e-31       1     138 [.       3     141 ..       3     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 112.2 bits;  conditional E-value: 9.4e-34
+                           EEEE-------HHHHHHHHHHHHH---.EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGh.eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +v++ggGT+G+++Pa+A+ re  rr + eV  ++t++gle+ + + ag+++++i++  + +++l s++++k+ +++lk++ +++++l++
+  sp|B1YIT7|MURG_EXIS2   3 IVVSGGGTGGHIYPALAMIREIERRTPcEVLyIGTENGLEADIvRRAGIPFESIEIS-GIRRSL-SFENVKTGFRFLKSVVRVRKLLRD 89 
+                           799********************99865888**************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++pd+vvg+gg+v +++l+ a++ g ++ v+Eqn++pg++nk+l+r++++v+
+  sp|B1YIT7|MURG_EXIS2  90 FQPDIVVGTGGFVCGPVLYTAAKMGYKTLVHEQNSLPGITNKFLARYVDRVA 141
+                           *************************************************997 PP
+
+>> sp|C1CW40|MURG_DEIDV  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  111.1   1.8   2.1e-33   1.2e-30       1     137 [.       4     141 ..       4     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 111.1 bits;  conditional E-value: 2.1e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           vv+a+gGT+G+++PavA areL +rGhe   l+   g+ee+v +e+gl+++ ++++ kl+++++    ++el++  +++ +a+++l+  
+  sp|C1CW40|MURG_DEIDV   4 VVMATGGTGGHIYPAVATARELNARGHETLlLGQRGGMEERVaAEQGLSFEGVDAG-KLARSGQGRPDPRELFRAVRGVVEARRVLQAR 91 
+                           79******************************************************.******************************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +p++vvg+gg+++++ ++aa ++gi+++++Eqn++ gl++++   ra  v
+  sp|C1CW40|MURG_DEIDV  92 RPALVVGYGGFASLPGVLAAQSLGIATVLHEQNARLGLTQRVAVGRARAV 141
+                           ******************************************99999876 PP
+
+>> sp|Q47QW9|MURG_THEFY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.4   0.3   3.3e-33   1.9e-30       1     132 [.       3     136 ..       3     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 110.4 bits;  conditional E-value: 3.3e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+Ala++L+r  ++     l+t++gle ++ + +g+e  +i++  +l++kl +++ l+ + +  +a+  a ++l 
+  sp|Q47QW9|MURG_THEFY   3 VVLAGGGTAGHVEPALALADALRRINPDTQvlcLGTKRGLEQRLvPMRGYELAEIPAV-PLPRKL-TPQLLSVPGRLANAISTAAKHLD 89 
+                           79**************************99999*************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllpr 132
+                           + ++d++vgfggyva++ ++aa++++ip++v+E+n +pgl+n+l +r
+  sp|Q47QW9|MURG_THEFY  90 RVQADILVGFGGYVATPGYLAARSRRIPIVVHEANPLPGLANRLGAR 136
+                           ******************************************98765 PP
+
+>> sp|A0Q182|MURG_CLONN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  111.4   0.0   1.6e-33     9e-31       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 111.4 bits;  conditional E-value: 1.6e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggG++G+v P +Al  +L++ G+e+  ++t++g+e+++ e+++++++ i ++ kl++++  +k++++++++lk++++ak+i+k++
+  sp|A0Q182|MURG_CLONN   6 IIMTGGGSAGHVTPNLALVPKLKELGYEIQyIGTENGIERKIiESENIKYHIISSG-KLRRYF-DIKNFSDPFKVLKGVFEAKKIIKRE 92 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kp++v++ gg+v+++++i+a+l++ip++ +E++  pgl+nkl + ++n+v 
+  sp|A0Q182|MURG_CLONN  93 KPNIVFSKGGFVSVPVVIGARLNRIPVISHESDMTPGLANKLAAPFCNKVC 143
+                           ***********************************************9986 PP
+
+>> sp|A1KKJ6|MURG_MYCBP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  112.2   0.9   9.4e-34   5.3e-31       1     138 [.      38     185 ..      38     186 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 112.2 bits;  conditional E-value: 9.4e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L + +++Vr   l+tp+gle+++ +++g++ + i++  + ++k    +  + + ++++a+r+a+ +l 
+  sp|A1KKJ6|MURG_MYCBP  38 VVLAGGGTAGHVEPAMAVADALVALDPRVRitaLGTPRGLETRLvPQRGYHLELITAV-PMPRKP-GGDLARLPSRVWRAVREARDVLD 124
+                           79********************************************************.****99.999999999************** PP
+
+                           HHHHHHHHHC----EEEE--HHH........HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal........lagipanvaEqngipglvnkllprrangvl 138
+                           +  +dvvvgfggyva++a++aa+        +++ip++++E+n+++gl+n++ + +a++vl
+  sp|A1KKJ6|MURG_MYCBP 125 DVDADVVVGFGGYVALPAYLAARglplpprrRRRIPVVIHEANARAGLANRVGAHTADRVL 185
+                           ***********************************************************97 PP
+
+>> sp|C1AQ69|MURG_MYCBT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  112.2   0.9   9.4e-34   5.3e-31       1     138 [.      38     185 ..      38     186 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 112.2 bits;  conditional E-value: 9.4e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L + +++Vr   l+tp+gle+++ +++g++ + i++  + ++k    +  + + ++++a+r+a+ +l 
+  sp|C1AQ69|MURG_MYCBT  38 VVLAGGGTAGHVEPAMAVADALVALDPRVRitaLGTPRGLETRLvPQRGYHLELITAV-PMPRKP-GGDLARLPSRVWRAVREARDVLD 124
+                           79********************************************************.****99.999999999************** PP
+
+                           HHHHHHHHHC----EEEE--HHH........HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal........lagipanvaEqngipglvnkllprrangvl 138
+                           +  +dvvvgfggyva++a++aa+        +++ip++++E+n+++gl+n++ + +a++vl
+  sp|C1AQ69|MURG_MYCBT 125 DVDADVVVGFGGYVALPAYLAARglplpprrRRRIPVVIHEANARAGLANRVGAHTADRVL 185
+                           ***********************************************************97 PP
+
+>> sp|Q7VEP8|MURG_MYCBO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  112.2   0.9   9.4e-34   5.3e-31       1     138 [.      38     185 ..      38     186 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 112.2 bits;  conditional E-value: 9.4e-34
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L + +++Vr   l+tp+gle+++ +++g++ + i++  + ++k    +  + + ++++a+r+a+ +l 
+  sp|Q7VEP8|MURG_MYCBO  38 VVLAGGGTAGHVEPAMAVADALVALDPRVRitaLGTPRGLETRLvPQRGYHLELITAV-PMPRKP-GGDLARLPSRVWRAVREARDVLD 124
+                           79********************************************************.****99.999999999************** PP
+
+                           HHHHHHHHHC----EEEE--HHH........HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal........lagipanvaEqngipglvnkllprrangvl 138
+                           +  +dvvvgfggyva++a++aa+        +++ip++++E+n+++gl+n++ + +a++vl
+  sp|Q7VEP8|MURG_MYCBO 125 DVDADVVVGFGGYVALPAYLAARglplpprrRRRIPVVIHEANARAGLANRVGAHTADRVL 185
+                           ***********************************************************97 PP
+
+>> sp|B0S0Z5|MURG_FINM2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  111.3   0.0   1.8e-33     1e-30       1     138 [.       3     142 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 111.3 bits;  conditional E-value: 1.8e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa++l +eL++r+ + +   ++t++gle+ + ++ g+++++i ++ + ++k+   + +k l e +++lr+a++ilk
+  sp|B0S0Z5|MURG_FINM2   3 IIVSGGGTGGHIYPAISLIEELKKRDKDNKilyVGTEKGLESSIvPKLGIDFKTIHVR-GIPRKI-NANSFKALKELFQGLREANKILK 89 
+                           6899***********************99999**************************.888888.77888888888888********* PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           e+kpd+v+g+ggyv++++l+ a++ ++++  +Eqn+ pg++n++l+r++++ +
+  sp|B0S0Z5|MURG_FINM2  90 EFKPDLVIGTGGYVSGPILYKATKTKAKVAFHEQNSFPGITNRILSRYVDKYF 142
+                           *************************************************9865 PP
+
+>> sp|B7UZJ0|MURG_PSEA8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.0   0.2   8.7e-33   4.9e-30       1     137 [.       5     141 ..       5     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 109.0 bits;  conditional E-value: 8.7e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i++  +l+ k+   + +k ++e lk+l++a +++++ 
+  sp|B7UZJ0|MURG_PSEA8   5 VLIMAGGTGGHVFPALACAREFQARGYAVHwLGTPRGIENDLvPKAGLPLHLIQVS-GLRGKG-LKSLVKAPLELLKSLFQALRVIRQL 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +p  v+g ggyv ++ ++aa+l+g+p++++Eqn+++g +n+ l+  a +v
+  sp|B7UZJ0|MURG_PSEA8  92 RPVCVLGLGGYVTGPGGLAARLNGVPLVIHEQNAVAGTANRSLAPIARRV 141
+                           *****************************************998877765 PP
+
+>> sp|Q02H28|MURG_PSEAB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.0   0.2   8.7e-33   4.9e-30       1     137 [.       5     141 ..       5     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 109.0 bits;  conditional E-value: 8.7e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i++  +l+ k+   + +k ++e lk+l++a +++++ 
+  sp|Q02H28|MURG_PSEAB   5 VLIMAGGTGGHVFPALACAREFQARGYAVHwLGTPRGIENDLvPKAGLPLHLIQVS-GLRGKG-LKSLVKAPLELLKSLFQALRVIRQL 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +p  v+g ggyv ++ ++aa+l+g+p++++Eqn+++g +n+ l+  a +v
+  sp|Q02H28|MURG_PSEAB  92 RPVCVLGLGGYVTGPGGLAARLNGVPLVIHEQNAVAGTANRSLAPIARRV 141
+                           *****************************************998877765 PP
+
+>> sp|Q9HW01|MURG_PSEAE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.0   0.2   8.7e-33   4.9e-30       1     137 [.       5     141 ..       5     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 109.0 bits;  conditional E-value: 8.7e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i++  +l+ k+   + +k ++e lk+l++a +++++ 
+  sp|Q9HW01|MURG_PSEAE   5 VLIMAGGTGGHVFPALACAREFQARGYAVHwLGTPRGIENDLvPKAGLPLHLIQVS-GLRGKG-LKSLVKAPLELLKSLFQALRVIRQL 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +p  v+g ggyv ++ ++aa+l+g+p++++Eqn+++g +n+ l+  a +v
+  sp|Q9HW01|MURG_PSEAE  92 RPVCVLGLGGYVTGPGGLAARLNGVPLVIHEQNAVAGTANRSLAPIARRV 141
+                           *****************************************998877765 PP
+
+>> sp|A0PTI7|MURG_MYCUA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  111.6   0.5   1.4e-33   7.8e-31       1     138 [.      22     166 ..      22     167 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 111.6 bits;  conditional E-value: 1.4e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L   +++Vr   l+t++gle+++ +++g++ + i+p  +l++k  s +  + + ++++++r+++++l 
+  sp|A0PTI7|MURG_MYCUA  22 VVLAGGGTAGHVEPAMAVADALSVLEPNVRitaLGTSRGLETRLvPARGYHLELITPV-PLPRKP-SGDLARLPPRVWRSVRETRAVLD 108
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138
+                              +dvv+gfggyva++a++aa+     +++ip++++E+n+++gl+n++  r+a++vl
+  sp|A0PTI7|MURG_MYCUA 109 LVDADVVIGFGGYVALPAYLAARgipglRRRIPVVIHEANARAGLANRVGLRTADRVL 166
+                           ***************************9****************************97 PP
+
+>> sp|A6VB85|MURG_PSEA7  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.0   0.2   8.7e-33   4.9e-30       1     137 [.       5     141 ..       5     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 109.0 bits;  conditional E-value: 8.7e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i++  +l+ k+   + +k ++e lk+l++a +++++ 
+  sp|A6VB85|MURG_PSEA7   5 VLIMAGGTGGHVFPALACAREFQARGYAVHwLGTPRGIENDLvPKAGLPLHLIQVS-GLRGKG-LKSLVKAPLELLKSLFQALRVIRQL 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +p  v+g ggyv ++ ++aa+l+g+p++++Eqn+++g +n+ l+  a +v
+  sp|A6VB85|MURG_PSEA7  92 RPVCVLGLGGYVTGPGGLAARLNGVPLVIHEQNAVAGTANRSLAPIARRV 141
+                           *****************************************998877765 PP
+
+>> sp|A9KER3|MURG_COXBN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.7   0.1   2.6e-33   1.5e-30       1     135 [.       4     137 ..       4     141 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 110.7 bits;  conditional E-value: 2.6e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+areL++++ +V  l+++ glee++   +  l+  +i++  ++++    l+ l+ +++  +a+++a +i+++
+  sp|A9KER3|MURG_COXBN   4 ILIIAGGTGGHIFPALAVARELREQEVDVQwLGVKGGLEEKLvpDSFPLHLIQIKAF-RGKR---GLQQLLMPLRLVRAVFQAYRIIRQ 88 
+                           6899*************************************9666666666666666.5555...66777778888899********** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +kpdv++g+ggyva++ ++aa+  + p++++Eqn+ipgl+n++l++ a+
+  sp|A9KER3|MURG_COXBN  89 FKPDVILGMGGYVAGPGGLAAWITRTPLIIHEQNSIPGLTNRVLAKMAK 137
+                           ********************************************99886 PP
+
+>> sp|A9NA44|MURG_COXBR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.7   0.1   2.6e-33   1.5e-30       1     135 [.       4     137 ..       4     141 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 110.7 bits;  conditional E-value: 2.6e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+areL++++ +V  l+++ glee++   +  l+  +i++  ++++    l+ l+ +++  +a+++a +i+++
+  sp|A9NA44|MURG_COXBR   4 ILIIAGGTGGHIFPALAVARELREQEVDVQwLGVKGGLEEKLvpDSFPLHLIQIKAF-RGKR---GLQQLLMPLRLVRAVFQAYRIIRQ 88 
+                           6899*************************************9666666666666666.5555...66777778888899********** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +kpdv++g+ggyva++ ++aa+  + p++++Eqn+ipgl+n++l++ a+
+  sp|A9NA44|MURG_COXBR  89 FKPDVILGMGGYVAGPGGLAAWITRTPLIIHEQNSIPGLTNRVLAKMAK 137
+                           ********************************************99886 PP
+
+>> sp|B6J2Q3|MURG_COXB2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.7   0.1   2.6e-33   1.5e-30       1     135 [.       4     137 ..       4     141 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 110.7 bits;  conditional E-value: 2.6e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+areL++++ +V  l+++ glee++   +  l+  +i++  ++++    l+ l+ +++  +a+++a +i+++
+  sp|B6J2Q3|MURG_COXB2   4 ILIIAGGTGGHIFPALAVARELREQEVDVQwLGVKGGLEEKLvpDSFPLHLIQIKAF-RGKR---GLQQLLMPLRLVRAVFQAYRIIRQ 88 
+                           6899*************************************9666666666666666.5555...66777778888899********** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +kpdv++g+ggyva++ ++aa+  + p++++Eqn+ipgl+n++l++ a+
+  sp|B6J2Q3|MURG_COXB2  89 FKPDVILGMGGYVAGPGGLAAWITRTPLIIHEQNSIPGLTNRVLAKMAK 137
+                           ********************************************99886 PP
+
+>> sp|B6J5K3|MURG_COXB1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.7   0.1   2.6e-33   1.5e-30       1     135 [.       4     137 ..       4     141 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 110.7 bits;  conditional E-value: 2.6e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+areL++++ +V  l+++ glee++   +  l+  +i++  ++++    l+ l+ +++  +a+++a +i+++
+  sp|B6J5K3|MURG_COXB1   4 ILIIAGGTGGHIFPALAVARELREQEVDVQwLGVKGGLEEKLvpDSFPLHLIQIKAF-RGKR---GLQQLLMPLRLVRAVFQAYRIIRQ 88 
+                           6899*************************************9666666666666666.5555...66777778888899********** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +kpdv++g+ggyva++ ++aa+  + p++++Eqn+ipgl+n++l++ a+
+  sp|B6J5K3|MURG_COXB1  89 FKPDVILGMGGYVAGPGGLAAWITRTPLIIHEQNSIPGLTNRVLAKMAK 137
+                           ********************************************99886 PP
+
+>> sp|Q820X3|MURG_COXBU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.7   0.1   2.6e-33   1.5e-30       1     135 [.       4     137 ..       4     141 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 110.7 bits;  conditional E-value: 2.6e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+areL++++ +V  l+++ glee++   +  l+  +i++  ++++    l+ l+ +++  +a+++a +i+++
+  sp|Q820X3|MURG_COXBU   4 ILIIAGGTGGHIFPALAVARELREQEVDVQwLGVKGGLEEKLvpDSFPLHLIQIKAF-RGKR---GLQQLLMPLRLVRAVFQAYRIIRQ 88 
+                           6899*************************************9666666666666666.5555...66777778888899********** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +kpdv++g+ggyva++ ++aa+  + p++++Eqn+ipgl+n++l++ a+
+  sp|Q820X3|MURG_COXBU  89 FKPDVILGMGGYVAGPGGLAAWITRTPLIIHEQNSIPGLTNRVLAKMAK 137
+                           ********************************************99886 PP
+
+>> sp|Q042P9|MURG_LACGA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.8   0.0   5.2e-33   2.9e-30       1     137 [.       3     143 ..       3     145 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 109.8 bits;  conditional E-value: 5.2e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.....EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.....latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 
+                           v+++ggGT+G+++P++Al ++L++r          ++t +gle+++ ++ag+++++++++ ++ +k   lk++ ++  + ka+++ak+i
+  sp|Q042P9|MURG_LACGA   3 VIFSGGGTGGHIYPIMALIERLKERKLVTNdeilfVGTDRGLESKIvPAAGVPFRTLKIK-GFDRKH-PLKNFETIELFIKATKEAKQI 89 
+                           689***********************66659999**************************.****98.********************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +k++kpdvvvg+ggyv+++++++a++ +ip++++E+n++ gl+nk+l+ +++++
+  sp|Q042P9|MURG_LACGA  90 IKDFKPDVVVGTGGYVSGAIVYEAAKMHIPTIIHESNSVVGLANKFLAHYVDKI 143
+                           ***************************************************987 PP
+
+>> sp|B2HGR6|MURG_MYCMM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  111.4   0.9   1.7e-33   9.6e-31       1     138 [.      22     166 ..      22     167 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 111.4 bits;  conditional E-value: 1.7e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L   +++Vr   l+t +gle+++ +++g++ + i+p  +l++k  s +  + + ++++a+r+++++l 
+  sp|B2HGR6|MURG_MYCMM  22 VVLAGGGTAGHVEPAMAVADALSVLEPNVRitaLGTARGLETRLvPARGYHLELITPV-PLPRKP-SGDLARLPPRVWRAVRETRAVLD 108
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138
+                              +dvv+gfggyva++a++aa+     +++ip++++E+n+++gl+n++  r+a++vl
+  sp|B2HGR6|MURG_MYCMM 109 LVDADVVIGFGGYVALPAYLAARgipglRRRIPVVIHEANARAGLANRVGLRTADRVL 166
+                           ***************************9****************************97 PP
+
+>> sp|Q0VS02|MURG_ALCBS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.9   0.2   4.8e-33   2.7e-30       1     132 [.       5     136 ..       5     140 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 109.9 bits;  conditional E-value: 4.8e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A+a++L++rG ++  l++++g+e  + +++g+e+ ++ +  +l+  +   ++l+ +++ l+a+ +a+++++  
+  sp|Q0VS02|MURG_ALCBS   5 VLIMAGGTGGHVFPALAVADQLRTRGFDILwLGAENGMEGNLvRQYGYEIAELSVS-RLRGGG-IKRKLTAPFNLLRAVLQARQLIRAR 91 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllpr 132
+                           +p + vgfgg+++++ ++aa+l+++p++v+Eqn++pgl+n+ll+r
+  sp|Q0VS02|MURG_ALCBS  92 QPVLAVGFGGFASGPGGLAARLCKVPVVVHEQNAVPGLTNRLLSR 136
+                           *****************************************9987 PP
+
+>> sp|Q0RNP1|MURG_FRAAA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  111.2   1.6   1.9e-33   1.1e-30       1     133 [.       5     139 ..       5     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 111.2 bits;  conditional E-value: 1.9e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L++++++ r   l+t  gle+++ +++g+e  +++   + +++  +++ lk + + ++a+r+a ++l 
+  sp|Q0RNP1|MURG_FRAAA   5 VVLAGGGTAGHVEPALAVADALRAADPRARltlLGTATGLEARLvPARGYELATVPKV-PMPRRP-TPALLKLPVRLFDAVRQAGATLD 91 
+                           79********************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133
+                           + ++dvvvgfggyv+++a++aa+++gip++v+E+n +pg++n+l +r+
+  sp|Q0RNP1|MURG_FRAAA  92 RVRADVVVGFGGYVSVPAYLAARRRGIPIVVHEANPLPGMANRLGARF 139
+                           *******************************************98876 PP
+
+>> sp|Q2RK79|MURG_MOOTA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.3   0.5   3.7e-33   2.1e-30       1     131 [.       3     135 ..       3     142 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 110.3 bits;  conditional E-value: 3.7e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+v+Pa+A+ar+L+++ + V+   ++t +gle+ v + agl+  +i+++ +l ++   +k+++ l + +++l +a + ++
+  sp|Q2RK79|MURG_MOOTA   3 VIITGGGTGGHVYPALAIARGLKEARPGVEllyIGTARGLEADVvPRAGLTLATITVQ-GLVRRQ-VWKNIPALVKTGRGLGEAWQQVR 89 
+                           689*******************************************************.776655.9********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSG CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllp 131
+                           +++pdvvvg+ggyv++++++aa+l+g+p++++Eqn+ pg++n+ll+
+  sp|Q2RK79|MURG_MOOTA  90 RFRPDVVVGTGGYVSGPVCLAAALQGVPVILHEQNAFPGVTNRLLA 135
+                           ******************************************9875 PP
+
+>> sp|Q1IXV9|MURG_DEIGD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  111.0   1.8   2.2e-33   1.3e-30       1     137 [.       4     141 ..       4     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 111.0 bits;  conditional E-value: 2.2e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +v+a+gGT+G+++PavA+ reL +rGhe   l+   g+ee+v +e+gl+++ ++++ kl+++++    ++el++  +++ +a++ l++a
+  sp|Q1IXV9|MURG_DEIGD   4 IVMATGGTGGHIYPAVAVSRELLARGHEAVlLGQRGGMEERVaAEQGLPFQGVNAG-KLARSGQGRPDPRELLRAARGVAEARAFLRDA 91 
+                           79**************************999*************************.******************************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +p +vvgfgg+++++ ++aa  +gip++++Eqn++ gl+++l + ra  v
+  sp|Q1IXV9|MURG_DEIGD  92 RPGAVVGFGGFASLPGVLAAQTLGIPTVLHEQNARLGLTQRLAAGRARAV 141
+                           *******************************************9999876 PP
+
+>> sp|Q74JY4|MURG_LACJO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.9   0.0   9.8e-33   5.5e-30       1     137 [.       3     143 ..       3     145 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 108.9 bits;  conditional E-value: 9.8e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.....EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.....latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 
+                           v+++ggGT+G+++P++Al ++L++r          ++t +gle+++ ++ag+++++++++ ++ +k   lk++ ++  + ka+++ak+i
+  sp|Q74JY4|MURG_LACJO   3 VIFSGGGTGGHIYPIMALIERLKERKLVTNdeilfVGTDRGLESKIvPAAGVPFKTLKIK-GFDRKH-PLKNFETIELFIKATKEAKQI 89 
+                           689***********************66659999**************************.****98.********************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +k++kpdvvvg+ggyv+++++++a++ ++p++++E+n++ gl+nk+l+ +++++
+  sp|Q74JY4|MURG_LACJO  90 IKNFKPDVVVGTGGYVSGAIVYEAAKMHVPTIIHESNSVVGLANKFLAHYVDKI 143
+                           ***************************************************987 PP
+
+>> sp|A5MZ55|MURG_CLOK5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.4   0.0   6.9e-33   3.9e-30       1     138 [.       4     141 ..       4     142 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 109.4 bits;  conditional E-value: 6.9e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++l+ggG++G+v P +Al  +L++ G+e+  ++t+ g+e+++ e+++++++ i ++ kl++++  +k++++++++ k++++a +i++++
+  sp|A5MZ55|MURG_CLOK5   4 IILTGGGSAGHVTPNLALIPKLKELGYEIQyIGTESGIEREIiENEKIKYHVISSG-KLRRYF-DIKNFTDPFKVIKGIFQAIFIMRKE 90 
+                           78******************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kp+vv++ gg+v++++++aa  +gip++ +E++  pgl+n+l++ ++++v 
+  sp|A5MZ55|MURG_CLOK5  91 KPNVVFSKGGFVSVPVVFAAYINGIPVIAHESDITPGLANRLSSPYCTKVC 141
+                           ***********************************************9985 PP
+
+>> sp|A1TKD1|MURG_ACIAC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.5   0.4   6.5e-33   3.7e-30       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 109.5 bits;  conditional E-value: 6.5e-33
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+++P +A+a+eL++rG++V+ l+tp  +e+++ + +g +++pi+   +++ k+   +  + +++ l+a+ +a +++++ +
+  sp|A1TKD1|MURG_ACIAC   8 LVMAGGTGGHIFPGLAVAEELRARGWKVHwLGTPGSMESRIvPPQGFAFEPIDFS-GVRGKG-LATLALLPLRLLRAFWQALAVVRRVQ 94 
+                           689****************************************************.******.99999********************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvvvg ggyv  + +  a l+g p++v+Eqn+++glvnk+l+  a++v+
+  sp|A1TKD1|MURG_ACIAC  95 PDVVVGLGGYVTFPGGMMAVLCGKPLVVHEQNSVAGLVNKVLAGVADRVF 144
+                           ********************************************999997 PP
+
+>> sp|B7J0L2|MURG_BORBZ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.3   0.0   7.6e-33   4.3e-30       1     139 []       7     148 ..       7     148 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 109.3 bits;  conditional E-value: 7.6e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                           + ++ggGT+G+v+P +++ ++L++ + e++   ++ ++ +ee++  e++++++ +i+++ kl++++ s+k++++++++  ++ k++++l
+  sp|B7J0L2|MURG_BORBZ   7 IFFTGGGTGGHVFPGISIIQKLKEFDNEIEffwIGKKNSIEEKLikEQDNIKFISIPCG-KLRRYF-SFKNFTDFFKVILGIIKSFYVL 93 
+                           679****************************************99**************.******.********************** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           k++kp++++++gg+v+++a+ia++l++i+ + +E +  pgl++k+++++an++++
+  sp|B7J0L2|MURG_BORBZ  94 KKYKPQLIYATGGFVSTPAIIASSLLKIKSITHEMDLDPGLATKINSKFANNIHI 148
+                           ***************************************************9985 PP
+
+>> sp|O51708|MURG_BORBU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.3   0.0   7.6e-33   4.3e-30       1     139 []       7     148 ..       7     148 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 109.3 bits;  conditional E-value: 7.6e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                           + ++ggGT+G+v+P +++ ++L++ + e++   ++ ++ +ee++  e++++++ +i+++ kl++++ s+k++++++++  ++ k++++l
+  sp|O51708|MURG_BORBU   7 IFFTGGGTGGHVFPGISIIQKLKEFDNEIEffwIGKKNSIEEKLikEQDNIKFISIPCG-KLRRYF-SFKNFTDFFKVILGIIKSFYVL 93 
+                           679****************************************99**************.******.********************** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           k++kp++++++gg+v+++a+ia++l++i+ + +E +  pgl++k+++++an++++
+  sp|O51708|MURG_BORBU  94 KKYKPQLIYATGGFVSTPAIIASSLLKIKSITHEMDLDPGLATKINSKFANNIHI 148
+                           ***************************************************9985 PP
+
+>> sp|Q15Q17|MURG_PSEA6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.3   0.7   7.4e-33   4.2e-30       2     138 ..      16     152 ..      15     153 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 109.3 bits;  conditional E-value: 7.4e-33
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++ ++++ l+t  ++e+ + ++ag e+  i++  +++ ++  ++ l  +++  ka+ +a+ ++k+ k
+  sp|Q15Q17|MURG_PSEA6  16 LVMAGGTGGHVFPGLAVAQALKEQNWHIHwLGTAQRMEADLvPKAGFEISFIDIA-GVRGNG-LVRLLAAPFKIIKAVIQARGVIKQVK 102
+                           789*************************************99*************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+gg+++++ ++aa+l g p++++Eqn+ pg++n+ll+r an+vl
+  sp|Q15Q17|MURG_PSEA6 103 PDVVIGMGGFASGPGGVAAWLMGKPLVLHEQNAAPGMTNRLLARIANKVL 152
+                           ************************************************97 PP
+
+>> sp|A7A179|ATG26_YEAS7  Sterol 3-beta-glucosyltransferase OS=Saccharomyces cerevisiae (strain YJM789) GN=ATG26 PE=3 SV
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.9   0.0     1e-32   5.7e-30       2     138 ..     743     878 ..     742     879 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 108.9 bits;  conditional E-value: 1e-32
+                            EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 
+                             l+++G+rGdv+P++Al+++L ++Gh+V ++t+ ++++fve++g+++++i+++        v++ +  + +k+l+e+ ++       +
+  sp|A7A179|ATG26_YEAS7 743 GLLTIGSRGDVQPYIALGKGLIKEGHQVVIITHSEFRDFVESHGIQFEEIAGNpvelmslmVENES--MNVKMLREASSK-------F 821
+                            589***************************************************999997777777..899999999999.......* PP
+
+                            HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            + + +a  +++++++++ + ++li++++a++ +++aE+++ip+++++++p+++++++
+  sp|A7A179|ATG26_YEAS7 822 RGWIDALLQTSWEVCNRRKFDILIESPSAMVGIHIAEALQIPYFRAFTMPWTRTRAY 878
+                            *****************************************************9987 PP
+
+>> sp|Q1D0T0|MURG_MYXXD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.1   0.4   8.5e-33   4.8e-30       1     137 [.       4     142 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 109.1 bits;  conditional E-value: 8.5e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v++aggGT+G+++P +Ala+e+ +r h+ +   ++t++g+e++v +++g++ + ++++ +l+ k+ +l+ lk l++   a+ ++++il+
+  sp|Q1D0T0|MURG_MYXXD   4 VLIAGGGTGGHLFPGIALAEEVVTRHHRNEvvfVGTERGIESRVvPKEGYPLELVKVQ-GLKGKG-FLSLLKALFALPLAFIESFRILA 90 
+                           799************************755559*************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           ++kpdvvvg+ggy++++++ aa+l gip+ + Eqn++pg++nk+l r +  v
+  sp|Q1D0T0|MURG_MYXXD  91 RQKPDVVVGVGGYASGPVVMAAWLMGIPTAIQEQNALPGFTNKVLGRIVRVV 142
+                           ********************************************99887655 PP
+
+>> sp|Q1QVG7|MURG_CHRSD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.0   0.7   4.5e-33   2.5e-30       1     138 [.       9     146 ..       9     147 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 110.0 bits;  conditional E-value: 4.5e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v Pa++lar+L++rG  V+ l++p+g+e+++ ++a +  + i++  +l+ ++ + + l+ +++  ka+ +a+++++++
+  sp|Q1QVG7|MURG_CHRSD   9 VLIMAGGTGGHVVPALSLARALRARGVSVEwLGSPRGIENRLvPAADIVLHRIQVA-GLRGNG-MAGWLLAPWRLAKAVWQARQVIAKF 95 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            p++vvg gg+++++ ++aa+l +  ++v+Eqn+++g++n++l+r a+gv+
+  sp|Q1QVG7|MURG_CHRSD  96 DPQLVVGLGGFASGPGGLAAWLMRRRLIVHEQNAVAGMTNRYLSRLADGVY 146
+                           *************************************************98 PP
+
+>> sp|A4VIH8|MURG_PSEU5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  110.0   0.3   4.6e-33   2.6e-30       1     132 [.       5     136 ..       5     142 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 110.0 bits;  conditional E-value: 4.6e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++  +l+ k+   + +k +++  ++l++a++i++e 
+  sp|A4VIH8|MURG_PSEU5   5 VLIMAGGTGGHVFPALACAREFQTRGYAVHwLGTPRGIENELvPAAGLPLHLIQVS-GLRGKG-LASLIKAPLQLVRSLFQARRIIREL 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllpr 132
+                           +p  v+g ggyv ++ ++aa+lag+p++++Eqn+++g +n+ l  
+  sp|A4VIH8|MURG_PSEU5  92 RPVCVLGLGGYVTGPGGLAAKLAGVPLVIHEQNAVAGTANRSLVP 136
+                           ****************************************98765 PP
+
+>> sp|Q38XM8|MURG_LACSS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.3   0.0   1.5e-32   8.3e-30       3     138 ..       2     143 ..       1     144 [. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 108.3 bits;  conditional E-value: 1.5e-32
+                           EE-------HHHHHHHHHHHHH---..EEE..EEETGGGHHHH.HH---EEEE----S------....-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   3 laggGTrGdvePavAlareLqrrGh..eVr..latppgleefv.eeagleavpigpdvklwakle...slktlkelaeglkalrkakei 83 
+                           ++ggGT+G+++Pa+Al ++L++rG        ++t++gle+++ + +g+++++++++ +++++++     ++lk++  +  ++++ak+ 
+  sp|Q38XM8|MURG_LACSS   2 ISGGGTGGHIYPALALIERLKQRGLldA-VlyVGTERGLESKIvPDQGIDFKTLEIQ-GFKRSMNlngIKTNLKTIELFMSSIKSAKKM 88 
+                           789*********************6423.36**************************.7777554111568999999999********* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +ke+kpdvv+g+ggyv++ +l+aa+++++p++++Eqn+ +g++nk+l+r++++v+
+  sp|Q38XM8|MURG_LACSS  89 IKEFKPDVVIGTGGYVSGSLLYAASRLKVPTIIHEQNSAAGVTNKFLARFVDKVA 143
+                           *****************************************************97 PP
+
+>> sp|A1SU19|MURG_PSYIN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.3   0.1   1.5e-32   8.3e-30       2     138 ..       8     144 ..       7     145 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 108.3 bits;  conditional E-value: 1.5e-32
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           v+++gGT+G+v+P +A+a++L+++G+ V  l+t +++e+++ +++g+e+  i++  + + ++   + l+ + +  k++ +a+ +lk+ +
+  sp|A1SU19|MURG_PSYIN   8 VVMAGGTGGHVFPGLAVADALKEQGWAVSwLGTADRMEAQLvPKHGYEIDFIDIA-GIRGNG-LKRLLMAPIRIIKSIWQARSVLKKRR 94 
+                           899****************************************************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            d+v+g+gg+++++ +iaa++ gip++++Eqn+++gl+n++l+ + ++vl
+  sp|A1SU19|MURG_PSYIN  95 VDLVLGMGGFASGPGGIAAWSMGIPVILHEQNAVAGLTNRILSLFSKRVL 144
+                           ******************************************99888876 PP
+
+>> sp|Q31I59|MURG_THICR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.5   0.0   1.3e-32   7.1e-30       1     138 [.       4     141 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 108.5 bits;  conditional E-value: 1.3e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+P +Ala++L ++  +   l+t++g+e+++  +a++++++i++  +l+ ++  l+ lk +++++ka+r+a++i++++
+  sp|Q31I59|MURG_THICR   4 ILIMAGGTGGHVFPGLALAEALADKQVKTVwLGTCNGMEKQWvDAAKIPFYTIAIS-GLRGNG-LLGWLKAPFNVFKAWRQARYIIQQE 90 
+                           689*********************9988889*************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            pd+v+g+gg+v ++ ++aal+++ p++++Eqn+ pgl+nkll+ +a++v+
+  sp|Q31I59|MURG_THICR  91 APDLVLGMGGFVCGPGGLAALSLNKPLVLHEQNATPGLTNKLLAPFAKKVI 141
+                           ************************************************986 PP
+
+>> sp|Q04ET0|MURG_OENOB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.3   0.0   1.5e-32   8.7e-30       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 108.3 bits;  conditional E-value: 1.5e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+Al + L + +++ +   +++ +gle  + +++gl+++++ ++ ++ ++l sl+++k++  + ka++k+k i+ 
+  sp|Q04ET0|MURG_OENOB   3 IIVSGGGTGGHIYPALALVESLLKHEPDSKvlyIGSFRGLEGSIvPKTGLDFKQLHVQ-GFSRSL-SLTNFKTVNLFIKAVKKSKHIIH 89 
+                           6899************************9999**************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd+v+g+ggyv++++l+aa +++ip++++Eqn+i+g++nk+l+r a++++
+  sp|Q04ET0|MURG_OENOB  90 DFKPDIVLGTGGYVSGAVLYAAQRLRIPTVINEQNSIAGVTNKFLSRGADRIA 142
+                           *************************************************9987 PP
+
+>> sp|Q2KVG0|MURG_BORA1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  109.6   0.6   6.1e-33   3.4e-30       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 109.6 bits;  conditional E-value: 6.1e-33
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G++ P +A+a+ L++rG++Vr l+ p+++e ++ +++g+e+ p+  + +l+ ++   + lk ++   +al +a+++++e 
+  sp|Q2KVG0|MURG_BORA1   6 ILIMAGGTGGHIMPGLAVAEILRQRGWQVRwLGNPDKMEGKLvPARGIEMAPLRFQ-GLRGRG-VTALLKLPLLLTRALLQARKHMAEI 92 
+                           689*****************************************************.****99.99*********************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +pdvv+g+ggyva + ++ a+l++ p++v+Eqn+++g +n++l+r a++vl
+  sp|Q2KVG0|MURG_BORA1  93 QPDVVLGMGGYVAFPGGVVAALRRTPLVVHEQNAVAGTANRWLARMAKNVL 143
+                           ***********************************************9997 PP
+
+>> sp|Q5R0M1|MURG_IDILO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.5   0.2   1.3e-32   7.1e-30       1     138 [.       4     142 ..       4     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 108.5 bits;  conditional E-value: 1.3e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGG.GHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppg.leefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           v++a+ GT+G+++Pa+A+a++ ++ G++V  l+t++g le++v ++a+ + ++i    +++ ++   ++l  ++   ka+ + +++lk 
+  sp|Q5R0M1|MURG_IDILO   4 VLIAAAGTGGHIFPALAVAEQMRDNGWQVDwLGTQEGrLESRViPAANFPLHSISMT-GVRGHG-LKRKLFMPFTLAKAVLQCRRLLKT 90 
+                           789*******************************98549******************.****99.777777777777************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +p+vv+ fggyv ++ ++aa+l+gip++v+Eqn+ipg++++ll+ ran+v+
+  sp|Q5R0M1|MURG_IDILO  91 LQPQVVATFGGYVCAPMGLAAKLLGIPLVVHEQNAIPGMTTRLLAPRANKVM 142
+                           **************************************************97 PP
+
+>> sp|Q5WAE4|MURG_BACSK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.1   0.0   1.8e-32     1e-29       1     136 [.       4     139 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 108.1 bits;  conditional E-value: 1.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggG++G+v P +A+ +eL ++++ +  +++ +g+e+++ e+ag+ +  i ++ kl++++  +k+++++a+  +++r+a++ilk +
+  sp|Q5WAE4|MURG_BACSK   4 IIFTGGGSAGHVTPNLAIINELNDKDWSIAyIGSYEGIERQLvEKAGIRYFGISSG-KLRRYM-DWKNVTDIARIANGFRQARKILKAE 90 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           kpdvv++ gg+v ++++ aa  ++ip++++E++  pgl+n+l +r+an+
+  sp|Q5WAE4|MURG_BACSK  91 KPDVVFSKGGFVTVPVVAAAYTLRIPVHLHESDLTPGLANRLAKRFANT 139
+                           ***********************************************97 PP
+
+>> sp|Q2JD50|MURG_FRASC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.6   1.0   2.4e-32   1.3e-29       1     131 [.       5     137 ..       5     141 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 107.6 bits;  conditional E-value: 2.4e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L++ + +Vr   l+t  gle+++ +++g e  +++   + +++  +++ +k +a++l+a+ +a e+l 
+  sp|Q2JD50|MURG_FRASC   5 VVLAGGGTAGHVEPALAVADALRATDSRVRltlLGTATGLEARLvPARGHELATVPKV-PMPRRP-TPAVFKLPARFLDAICQAGETLD 91 
+                           79********************************************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSG CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllp 131
+                             ++dvvvgfggyv+++a++aa+++gip++v+E+n +pgl+n+l +
+  sp|Q2JD50|MURG_FRASC  92 LVRADVVVGFGGYVSAPAYLAARRRGIPIVVHEANPLPGLANRLGA 137
+                           ******************************************9865 PP
+
+>> sp|B5ELC3|MURG_ACIF5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.2   0.9   1.6e-32   8.8e-30       1     138 [.       5     142 ..       5     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 108.2 bits;  conditional E-value: 1.6e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++a+gGT+G+v+Pa+A+a++L+++G eV+  +t  g+e+++ +e+g++ ++++ + +l+ k+   + l+ ++++ +a+ +a++il++ 
+  sp|B5ELC3|MURG_ACIF5   5 VLIAAGGTGGHVFPALAVADALRAQGVEVTfAGTATGMEARLvPERGYTLHTLDMQ-GLRGKG-IRRWLRAPWRVSRAILQARRILRQT 91 
+                           799***************************889***********************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +vv+g+ggyv ++++iaa+ +g p+ ++Eqn+++gl+n+ll+  a +v+
+  sp|B5ELC3|MURG_ACIF5  92 RSHVVLGMGGYVTAPVGIAAWTLGRPLCLHEQNAVAGLSNRLLAPLARRVF 142
+                           ******************************************998888876 PP
+
+>> sp|B7J3V2|MURG_ACIF2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.2   0.9   1.6e-32   8.8e-30       1     138 [.       5     142 ..       5     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 108.2 bits;  conditional E-value: 1.6e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++a+gGT+G+v+Pa+A+a++L+++G eV+  +t  g+e+++ +e+g++ ++++ + +l+ k+   + l+ ++++ +a+ +a++il++ 
+  sp|B7J3V2|MURG_ACIF2   5 VLIAAGGTGGHVFPALAVADALRAQGVEVTfAGTATGMEARLvPERGYTLHTLDMQ-GLRGKG-IRRWLRAPWRVSRAILQARRILRQT 91 
+                           799***************************889***********************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +vv+g+ggyv ++++iaa+ +g p+ ++Eqn+++gl+n+ll+  a +v+
+  sp|B7J3V2|MURG_ACIF2  92 RSHVVLGMGGYVTAPVGIAAWTLGRPLCLHEQNAVAGLSNRLLAPLARRVF 142
+                           ******************************************998888876 PP
+
+>> sp|Q0SM88|MURG_BORAP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.4   0.0   1.4e-32   7.7e-30       1     139 []       7     148 ..       7     148 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 108.4 bits;  conditional E-value: 1.4e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                           + ++ggGT+G+++P +++ ++L++ + e++   ++ ++ +ee++  e+ ++++ +i+++ kl++++ s++++++++++  ++ k+++il
+  sp|Q0SM88|MURG_BORAP   7 IFFTGGGTGGHIFPGISIIQKLKELDNEIEffwIGKKNSIEEKLikEQNNIKFISIPCG-KLRRYF-SFQNFTDFFKVIFGIIKSFYIL 93 
+                           679****************************************99**************.******.********************** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           k++kp++v+++gg+v+++ +ia++l++i+++ +E +  pgl++k+++++an++++
+  sp|Q0SM88|MURG_BORAP  94 KKYKPQIVYATGGFVSTPTIIASSLLKIKRITHEMDLDPGLATKINSKFANKIYI 148
+                           ****************************************************986 PP
+
+>> sp|Q4FQV9|MURG_PSYA2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.9   0.2   1.9e-32   1.1e-29       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 107.9 bits;  conditional E-value: 1.9e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++ GT+G+v+Pa+A+ +eL +rG  ++ l+tp+g+e+ + + +g+++++i+ + +l+ k+   + lk +   l a+ ++ +i++ +
+  sp|Q4FQV9|MURG_PSYA2   6 ILMMAAGTGGHVFPALAVSEELSKRGAIIHwLGTPNGMENGLvAPTGYPFHAIEMQ-GLRGKG-IGRLLKMPVTLLSATMAVIKIIRGN 92 
+                           6899**********************9999************9*************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           k+d vvgfggyv+++ +iaa+l + p++++Eqn+i+g++n++l++ a++vl
+  sp|Q4FQV9|MURG_PSYA2  93 KIDMVVGFGGYVSAPGGIAARLTKTPLIIHEQNAIAGMSNRYLAKMATKVL 143
+                           ************************************************997 PP
+
+>> sp|Q730T5|MURG2_BACC1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.6   0.0   5.1e-32   2.9e-29       1     138 [.       4     141 ..       4     142 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 106.6 bits;  conditional E-value: 5.1e-32
+                            EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                            +v++ggG++G+v P +A+  +Lq++ +++  ++++ g+e+++ e++g+++++i+++ kl++++  lk++k+++ + k++ +a   +++
+  sp|Q730T5|MURG2_BACC1   4 IVFTGGGSAGHVTPNLAIIPHLQEQNWDISyIGSHQGIEKTIiEKEGIPYYSIASG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 
+                            79******************************************************.******.************************ PP
+
+                            HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             kpdv+++ gg+v+++++i+ +l+++p+ ++E++  pgl+nk+  r+a +++
+  sp|Q730T5|MURG2_BACC1  90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141
+                            ***********************************************99987 PP
+
+>> sp|Q1LSW5|MURG_BAUCH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.7   0.0   4.6e-32   2.6e-29       2     138 ..       7     143 ..       6     144 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 106.7 bits;  conditional E-value: 4.6e-32
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+++P +A+a+   ++G++Vr l+t++++e+ + +++g++++ + +  ++  ++ + ++++ + + l+a+ ++ +i+++++
+  sp|Q1LSW5|MURG_BAUCH   7 IIVAGGTGGHIFPGLAIANNMITQGWDVRwLGTKNRIEADLvPKHGITTYFLSIY-GYGLHG-KKQKILAIVSILQAVLQSYYIMRKWR 93 
+                           6789************************************99*********9999.999999.99999999999*************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pd+v+g+ggy++++ ++aa+ ++ip++++Eqn + gl+n +l+++a++vl
+  sp|Q1LSW5|MURG_BAUCH  94 PDIVLGMGGYISGPCGLAAWMCKIPLVIHEQNRVTGLTNYYLSKFAKKVL 143
+                           ***********************************************997 PP
+
+>> sp|Q9WY74|MURG_THEMA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.1   0.2   1.7e-32   9.8e-30       1     139 []       4     146 ..       4     146 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 108.1 bits;  conditional E-value: 1.7e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeil 84 
+                           v+ aggGT+G+++P++A+ ++L +r  +V+   +a++ +++e+v ++++ e++++ +d  +l + l+++k+l+++++ + a+ ++k++l
+  sp|Q9WY74|MURG_THEMA   4 VAAAGGGTGGHLYPLLAILETLAKRV-DVKvlfFAVKGKIDERVvRKDHPEFETVSIDvRGLLRPLHHPKNLWRTLKIGIATIEVKKHL 91 
+                           5789*********************9.99999**********************7777669999************************* PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           k++kpd+vv +ggy+++++++aa+ +gip++v+Eqn +pgl+ k+l+++a++v+v
+  sp|Q9WY74|MURG_THEMA  92 KRFKPDLVVLTGGYISGVVGLAAKDLGIPIFVHEQNVVPGLAVKVLSQYAKKVFV 146
+                           ****************************************************986 PP
+
+>> sp|B1L9S1|MURG_THESQ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.1   0.1   1.7e-32   9.8e-30       1     139 []       4     146 ..       4     146 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 108.1 bits;  conditional E-value: 1.7e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeil 84 
+                           ++ aggGT+G+++P++A+ ++L +r  +V+   +a++ +++e+v ++++ e++++ +d  +l + l+++k+l+++++ + a+ ++k++l
+  sp|B1L9S1|MURG_THESQ   4 IAAAGGGTGGHLYPLLAILETLAKRV-DVKvlfFAVKGKIDERVvRKDHPEFETVSIDvRGLLRPLHHPKNLWRTLKIGIATIEVKKHL 91 
+                           5789*********************9.99999**********************7777669999************************* PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           k++kpd+vv +ggy+++++++aa+ +gip++v+Eqn +pgl+ k+l+++a++v+v
+  sp|B1L9S1|MURG_THESQ  92 KRFKPDLVVLTGGYISGVVGLAAKDLGIPIFVHEQNVVPGLAVKVLSQYAKKVFV 146
+                           ****************************************************986 PP
+
+>> sp|A5IKI9|MURG_THEP1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.1   0.2   1.7e-32   9.8e-30       1     139 []       4     146 ..       4     146 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 108.1 bits;  conditional E-value: 1.7e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeil 84 
+                           v+ aggGT+G+++P++A+ ++L +r  +V+   +a++ +++e+v ++++ e++++ +d  +l + l+++k+l+++++ + a+ ++k++l
+  sp|A5IKI9|MURG_THEP1   4 VAAAGGGTGGHLYPLLAILETLAKRV-DVKvlfFAVKGKIDERVvRKDHPEFETVSIDvRGLLRPLHHPKNLWRTLKIGIATIEVKKHL 91 
+                           5789*********************9.99999**********************7777669999************************* PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           k++kpd+vv +ggy+++++++aa+ +gip++v+Eqn +pgl+ k+l+++a++v+v
+  sp|A5IKI9|MURG_THEP1  92 KRFKPDLVVLTGGYISGVVGLAAKDLGIPIFVHEQNVVPGLAVKVLSQYAKKVFV 146
+                           ****************************************************986 PP
+
+>> sp|A4FLW0|MURG_SACEN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.5   0.6   2.6e-32   1.4e-29       1     138 [.      22     160 ..      22     161 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 107.5 bits;  conditional E-value: 2.6e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vv+aggGT+G++ePa+Ala++++r  ++ r   l+t++gle+++ +++g++ + ++p  + ++k  +++ lk ++++++++++++e+l 
+  sp|A4FLW0|MURG_SACEN  22 VVVAGGGTAGHIEPALALADAVRRLRPDARvtaLGTERGLENRLvPARGYPLELVPPV-PMPRKP-TPELLKLPLKVRESVKRTREVLD 108
+                           79****************************99**************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +  +dvvvgfggyv+++a++a ++ + p++v+E+n+++gl+nk+ +++a++vl
+  sp|A4FLW0|MURG_SACEN 109 RVGADVVVGFGGYVSLPAYLA-ARGKTPIVVHEANARAGLANKVGAKFAERVL 160
+                           ********************5.56789***********************997 PP
+
+>> sp|Q9RNM6|MURG_ZYMMO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.7   0.9   2.3e-32   1.3e-29       2     138 ..       8     142 ..       7     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 107.7 bits;  conditional E-value: 2.3e-32
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +la+gGT+G++ Pa Ala+eL+rrGh+V l+t ++ ++f    + +++++++++ +++  k+  +++++++++g   +++a +++++++
+  sp|Q9RNM6|MURG_ZYMMO   8 ILAAGGTGGHMIPAHALAVELMRRGHHVALVTDERGTRFPeLFKDVQIHQLPAGrLTGGVKG-LFQAMRNIWAG---RERALTLYENFT 92 
+                           79**************************************99***********986666667.89999999999...************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p++vvgfggy a++al+aa +a+ip++++Eqn+++g +n++l+ r++ ++
+  sp|Q9RNM6|MURG_ZYMMO  93 PAAVVGFGGYPALPALLAAFKAKIPTVIHEQNAVMGRTNRFLAGRVDAIA 142
+                           *********************************************99875 PP
+
+>> sp|Q06321|ATG26_YEAST  Sterol 3-beta-glucosyltransferase OS=Saccharomyces cerevisiae GN=ATG26 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.1   0.0   3.5e-32   1.9e-29       2     138 ..     743     878 ..     742     879 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 107.1 bits;  conditional E-value: 3.5e-32
+                            EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 
+                             l+++G+rGdv+P++Al+++L ++Gh+V ++t+ ++++fve++g+++++i+++        v++ +  + +k+l+e+ ++       +
+  sp|Q06321|ATG26_YEAST 743 GLLTIGSRGDVQPYIALGKGLIKEGHQVVIITHSEFRDFVESHGIQFEEIAGNpvelmslmVENES--MNVKMLREASSK-------F 821
+                            589***************************************************999997777777..899999999999.......* PP
+
+                            HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            + + +a  +++++++++ + ++li++++a++ ++++E+++ip+++++++p+++++++
+  sp|Q06321|ATG26_YEAST 822 RGWIDALLQTSWEVCNRRKFDILIESPSAMVGIHITEALQIPYFRAFTMPWTRTRAY 878
+                            *****************************************************9987 PP
+
+>> sp|Q9PF81|MURG_XYLFA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.8   2.1   2.2e-32   1.2e-29       1     138 [.      15     152 ..      15     153 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 107.8 bits;  conditional E-value: 2.2e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a +L++rG  V  l+++ ++e+++ +++g+e+++i++  +++ ++ +l+ l ++ ++l a+++a+++l+++
+  sp|Q9PF81|MURG_XYLFA  15 VMILAGGTGGHIFPGLAVAGALRARGVPVVwLGATGKMETHLvPKHGIEIQTIAVS-GVRGHG-MLALLGTPVRVLPAIFAAMRVLRRY 101
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p vvv+fgg++a++ +iaa+l g p++v+Eqn  pg++n++l+r a +vl
+  sp|Q9PF81|MURG_XYLFA 102 RPRVVVSFGGFAAGPGGIAARLMGLPLIVHEQNRAPGMTNRILARVARRVL 152
+                           **********************************************99987 PP
+
+>> sp|Q5GW41|MURG_XANOR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.4   1.0   1.4e-32   7.9e-30       1     138 [.      21     158 ..      21     159 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 108.4 bits;  conditional E-value: 1.4e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a+ L++rG  V+ l++  ++e+++ +++ +++ ++++  +l+ k+ ++k l  ++++ +a+r+a ++l++ 
+  sp|Q5GW41|MURG_XANOR  21 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADGAMETRLvPQHDIPIDTLAIT-GLRGKG-MVKLLGAPLRVMRAVRAAGFVLRKR 107
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn  pg++nk+l+r+a +vl
+  sp|Q5GW41|MURG_XANOR 108 QPRAVISFGGFAAGPGGLAARLLGAPLLVHEQNRAPGMTNKVLSRFARRVL 158
+                           ************************************************997 PP
+
+>> sp|B2S3B6|MURG_TREPS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.6   0.1   2.5e-32   1.4e-29       1     139 []      15     154 ..      15     154 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 107.6 bits;  conditional E-value: 2.5e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vv++ggGT+G+++P +A+ ++L ++   Vr   +++ +g ++ + e+agle++ i+++ k++++  s++++ +++++l ++ ++  il+
+  sp|B2S3B6|MURG_TREPS  15 VVFTGGGTGGHIFPGIAVFQALAQQA-AVRvvwIGAARGADRSIvESAGLEFCGITAG-KWRRYA-SVRNFFDVFRVLVGTVQSYCILR 100
+                           79********************9998.88888**************************.999999.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                             +p+++++ gg+v+++++iaa+l++ip++ +E++  pgl++++++r+a+++lv
+  sp|B2S3B6|MURG_TREPS 101 ALRPQALFSKGGFVSVPPCIAAWLLRIPVVTHESDISPGLATRINARFADRILV 154
+                           **************************************************9985 PP
+
+>> sp|O83535|MURG_TREPA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.6   0.1   2.5e-32   1.4e-29       1     139 []      15     154 ..      15     154 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 107.6 bits;  conditional E-value: 2.5e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vv++ggGT+G+++P +A+ ++L ++   Vr   +++ +g ++ + e+agle++ i+++ k++++  s++++ +++++l ++ ++  il+
+  sp|O83535|MURG_TREPA  15 VVFTGGGTGGHIFPGIAVFQALAQQA-AVRvvwIGAARGADRSIvESAGLEFCGITAG-KWRRYA-SVRNFFDVFRVLVGTVQSYCILR 100
+                           79********************9998.88888**************************.999999.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                             +p+++++ gg+v+++++iaa+l++ip++ +E++  pgl++++++r+a+++lv
+  sp|O83535|MURG_TREPA 101 ALRPQALFSKGGFVSVPPCIAAWLLRIPVVTHESDISPGLATRINARFADRILV 154
+                           **************************************************9985 PP
+
+>> sp|Q0AJE1|MURG_NITEC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.3   0.0     3e-32   1.7e-29       3     138 ..       2     137 ..       1     138 [. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 107.3 bits;  conditional E-value: 3e-32
+                           EE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   3 laggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           +++gGT+G+v+P +A+ar+ q++G++V+ l+t +g+e+++ +++g +++ i+   +l+ k   ++ l+ +++  ka  +++ il++++p
+  sp|Q0AJE1|MURG_NITEC   2 IMAGGTGGHVFPGLAVARAMQAEGWRVIwLGTRNGMEATLvPQHGFTIELINFS-GLRGKK-PVSYLLLPWRLAKACWQSFCILRRQRP 88 
+                           789***************************************************.****99.*************************** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++v+g+ggy a++ +i a l+g p+ ++Eqn i+gl+nk+l++ a ++l
+  sp|Q0AJE1|MURG_NITEC  89 QIVLGMGGYPALPGGIMAVLSGKPLLIHEQNRIAGLTNKILAKIASRIL 137
+                           *******************************************999886 PP
+
+>> sp|B3PCM0|MURG_CELJU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  108.1   0.8   1.8e-32     1e-29       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 108.1 bits;  conditional E-value: 1.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+eL++rG  V+ l+t +g+e+++ ++a+++   i ++ +++ ++   + lk ++   ka+++a  i+++ 
+  sp|B3PCM0|MURG_CELJU   6 ILVMAGGTGGHVFPALAVAEELRARGALVEwLGTAKGIENTLvPKANIPLNLISVE-GVRGRG-LTGLLKAPFLITKAVFQAISIIRKM 92 
+                           789*****************************************************.****99.9************************ PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++d+v+gfgg+++++ ++aa+l+g p++++Eqn+++g +n+ll+r a +vl
+  sp|B3PCM0|MURG_CELJU  93 NADLVLGFGGFASGPGGVAARLLGKPLVIHEQNAVAGTTNRLLARIAQRVL 143
+                           ***********************************************9987 PP
+
+>> sp|A5G8K0|MURG_GEOUR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.0   0.1   3.6e-32     2e-29       2     139 .]       4     143 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 107.0 bits;  conditional E-value: 3.6e-32
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++P +A+a+e+ +r h  +   ++t++g+e+++ +  g+  + i++  + + +   l++++++a+ l ++ ++++ilke
+  sp|A5G8K0|MURG_GEOUR   4 LIAGGGTGGHLFPGIAVAEEFLARNHSNEvlfVGTERGIEARLlPRLGYRLECITAS-GIKGQS-PLAKIRSAAQLLYGYAQSRRILKE 90 
+                           79************************77777**************************.9**999.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           ++pd+v+g+ggy+++++++aa+  +i ++++Eqn+ipgl+nkll+r+a++v++
+  sp|A5G8K0|MURG_GEOUR  91 FRPDLVLGVGGYASAPVVLAARGMQIRRFIHEQNAIPGLTNKLLARFAEKVFI 143
+                           *************************************************9985 PP
+
+>> sp|A5U4I0|MURG_MYCTA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.8   1.0   2.2e-32   1.2e-29       1     138 [.      38     185 ..      38     186 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 107.8 bits;  conditional E-value: 2.2e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L + +++Vr   l+t +gle+++ +++g++ + i++  + ++k    +  + + ++++a+r+a+ +l 
+  sp|A5U4I0|MURG_MYCTA  38 VVLAGGGTAGHVEPAMAVADALVALDPRVRitaLGTLRGLETRLvPQRGYHLELITAV-PMPRKP-GGDLARLPSRVWRAVREARDVLD 124
+                           79********************************************************.****99.999999999************** PP
+
+                           HHHHHHHHHC----EEEE--HHH........HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal........lagipanvaEqngipglvnkllprrangvl 138
+                           +  +dvvvgfggyva++a++aa+        +++ip++++E+n+++gl+n++ + +a++vl
+  sp|A5U4I0|MURG_MYCTA 125 DVDADVVVGFGGYVALPAYLAARglplpprrRRRIPVVIHEANARAGLANRVGAHTADRVL 185
+                           ***********************************************************97 PP
+
+>> sp|O06224|MURG_MYCTU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.8   1.0   2.2e-32   1.2e-29       1     138 [.      38     185 ..      38     186 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 107.8 bits;  conditional E-value: 2.2e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+vePa+A+a++L + +++Vr   l+t +gle+++ +++g++ + i++  + ++k    +  + + ++++a+r+a+ +l 
+  sp|O06224|MURG_MYCTU  38 VVLAGGGTAGHVEPAMAVADALVALDPRVRitaLGTLRGLETRLvPQRGYHLELITAV-PMPRKP-GGDLARLPSRVWRAVREARDVLD 124
+                           79********************************************************.****99.999999999************** PP
+
+                           HHHHHHHHHC----EEEE--HHH........HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal........lagipanvaEqngipglvnkllprrangvl 138
+                           +  +dvvvgfggyva++a++aa+        +++ip++++E+n+++gl+n++ + +a++vl
+  sp|O06224|MURG_MYCTU 125 DVDADVVVGFGGYVALPAYLAARglplpprrRRRIPVVIHEANARAGLANRVGAHTADRVL 185
+                           ***********************************************************97 PP
+
+>> sp|Q4JW95|MURG_CORJK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  107.7   0.7   2.3e-32   1.3e-29       1     130 [.      13     144 ..      13     147 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 107.7 bits;  conditional E-value: 2.3e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vv+aggGT+G++ePa+A+a++++++ ++ r   l+t++gle+++ +++g + + i+p  ++++kl   +  + +++ +kal+++k++l+
+  sp|Q4JW95|MURG_CORJK  13 VVVAGGGTAGHIEPAMAVAEAVRAQRPDARitaLGTTRGLETTLvPARGFDLQLIPPV-PVPRKL-NKDLATLPLRLRKALKETKRVLR 99 
+                           79********************************************************.****99.99999999*************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                           e ++dvv+gfggyv+++a++aa++++ip +v+E+n+++g++nkl 
+  sp|Q4JW95|MURG_CORJK 100 EVEADVVIGFGGYVSAPAYLAARSLKIPFFVHEANARAGVANKLG 144
+                           ******************************************975 PP
+
+>> sp|Q97GY4|MURG_CLOAB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.4   0.0   5.8e-32   3.3e-29       1     137 [.       6     142 ..       6     144 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 106.4 bits;  conditional E-value: 5.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +v++ggG++G+v P +Al  +L++ G+e++ ++t++g+e+ + e++++++  i ++ kl++++  +k++++++++  +++++  il+++
+  sp|Q97GY4|MURG_CLOAB   6 IVMTGGGSAGHVTPNLALVPKLKELGYEIEyIGTKDGIERSIiEKENIKYNCISSG-KLRRYI-DIKNFSDPFKVILGIFQSVSILRKK 92 
+                           79******************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kp++v++ gg+v+++++iaa +++ip++ +E++  pgl+n++   ++++v
+  sp|Q97GY4|MURG_CLOAB  93 KPNIVFSKGGFVSVPVVIAAHFCRIPVIAHESDITPGLANRIAVPYCTKV 142
+                           ********************************************999987 PP
+
+>> sp|Q9Z702|MURG_CHLPN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.8   0.0   4.5e-32   2.5e-29       1     137 [.       8     142 ..       8     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 106.8 bits;  conditional E-value: 4.5e-32
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           v+la+gG++G++ Pa+++ +++ r+G++V l   +gl+++   ++g+++++i+++  l+  l+ +k ++++++ + ++ ka++ lk + 
+  sp|Q9Z702|MURG_CHLPN   8 VALAVGGSGGHIVPALSVKEAFSREGIDV-LLLGKGLKNHPsLQQGISYREIPSG--LPTVLNPIKIMSRTLSLCSGYLKARKELKIFD 93 
+                           79***************************.999**********************..99999*************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pd+v+gfg+y+++++l+a l+++ip++++Eqn +pg+vn+l++r+a g+
+  sp|Q9Z702|MURG_CHLPN  94 PDLVIGFGSYHSLPVLLAGLSHKIPLFLHEQNLVPGKVNQLFSRYARGI 142
+                           **********************************************997 PP
+
+>> sp|Q1Q944|MURG_PSYCK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.6   0.3     5e-32   2.8e-29       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 106.6 bits;  conditional E-value: 5e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++ GT+G+v+Pa+A+ +eL +rG  ++ l+tp+g+e+ + + +g+++++i+ + +l+ k+   + lk +   l a+ ++ +i++ +
+  sp|Q1Q944|MURG_PSYCK   6 ILMMAAGTGGHVFPALAVSEELTKRGAMIHwLGTPNGMENGLvAPTGYPFHAIEMQ-GLRGKG-IGRLLKMPVTLLSATMAVIKIIRGN 92 
+                           6899**********************9999************9*************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++d+vvgfggyv+++ +iaa+l + p++++Eqn+i+g++n++l++ a++vl
+  sp|Q1Q944|MURG_PSYCK  93 NIDIVVGFGGYVSAPGGIAARLTKTPLIIHEQNAIAGMSNRYLAKMATKVL 143
+                           ************************************************997 PP
+
+>> sp|C0RE70|MURG_BRUMB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.6   0.3   9.8e-32   5.5e-29       1     137 [.      10     145 ..      10     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 105.6 bits;  conditional E-value: 9.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+lat  +  +fv + a  +++ i +  + + + + ++ lk++++ +++  ++++++++ k
+  sp|C0RE70|MURG_BRUMB  10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 
+                           79***************************************87777777778888.55554.59************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy  +++l+aa+  gip+ ++Eqn+++g +nk l+ r++ +
+  sp|C0RE70|MURG_BRUMB  97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145
+                           ****************************************999998865 PP
+
+>> sp|Q8YI66|MURG_BRUME  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.6   0.3   9.8e-32   5.5e-29       1     137 [.      10     145 ..      10     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 105.6 bits;  conditional E-value: 9.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+lat  +  +fv + a  +++ i +  + + + + ++ lk++++ +++  ++++++++ k
+  sp|Q8YI66|MURG_BRUME  10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 
+                           79***************************************87777777778888.55554.59************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy  +++l+aa+  gip+ ++Eqn+++g +nk l+ r++ +
+  sp|Q8YI66|MURG_BRUME  97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145
+                           ****************************************999998865 PP
+
+>> sp|Q3BXF2|MURG_XANC5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.2   0.9   6.7e-32   3.8e-29       1     138 [.      22     159 ..      22     160 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 106.2 bits;  conditional E-value: 6.7e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a+ L++rG  V+ l++ +++e+++ +++ +++ ++++  +l+ k+  +k l  + ++ +a+r+a ++l++ 
+  sp|Q3BXF2|MURG_XANC5  22 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADDAMETRLvPQHDIPIDTLAIS-GLRGKG-VVKLLGAPVRVMRAVRAAGFVLRKR 108
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn  pg++nk+l+r+a +vl
+  sp|Q3BXF2|MURG_XANC5 109 RPRAVISFGGFAAGPGGLAARLLGAPLLVHEQNRAPGMTNKVLSRFARRVL 159
+                           ************************************************997 PP
+
+>> sp|B2S6Q4|MURG_BRUA1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.6   0.3   9.8e-32   5.5e-29       1     137 [.      10     145 ..      10     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 105.6 bits;  conditional E-value: 9.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+lat  +  +fv + a  +++ i +  + + + + ++ lk++++ +++  ++++++++ k
+  sp|B2S6Q4|MURG_BRUA1  10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 
+                           79***************************************87777777778888.55554.59************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy  +++l+aa+  gip+ ++Eqn+++g +nk l+ r++ +
+  sp|B2S6Q4|MURG_BRUA1  97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145
+                           ****************************************999998865 PP
+
+>> sp|Q2YLY5|MURG_BRUA2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.6   0.3   9.8e-32   5.5e-29       1     137 [.      10     145 ..      10     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 105.6 bits;  conditional E-value: 9.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+lat  +  +fv + a  +++ i +  + + + + ++ lk++++ +++  ++++++++ k
+  sp|Q2YLY5|MURG_BRUA2  10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 
+                           79***************************************87777777778888.55554.59************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy  +++l+aa+  gip+ ++Eqn+++g +nk l+ r++ +
+  sp|Q2YLY5|MURG_BRUA2  97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145
+                           ****************************************999998865 PP
+
+>> sp|Q57C78|MURG_BRUAB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.6   0.3   9.8e-32   5.5e-29       1     137 [.      10     145 ..      10     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 105.6 bits;  conditional E-value: 9.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+lat  +  +fv + a  +++ i +  + + + + ++ lk++++ +++  ++++++++ k
+  sp|Q57C78|MURG_BRUAB  10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 
+                           79***************************************87777777778888.55554.59************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy  +++l+aa+  gip+ ++Eqn+++g +nk l+ r++ +
+  sp|Q57C78|MURG_BRUAB  97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145
+                           ****************************************999998865 PP
+
+>> sp|Q660A8|MURG_BORGA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.1   0.0   7.2e-32   4.1e-29       1     138 [.       7     147 ..       7     148 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 106.1 bits;  conditional E-value: 7.2e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                           + ++ggGT+G+v+P +++ ++L++ + e++   ++ ++ +ee++  e+ ++++  ++++ kl++++ s++++++++++  ++ k++++l
+  sp|Q660A8|MURG_BORGA   7 IFFTGGGTGGHVFPGISIIQKLKELDNEIEffwIGKKNSIEEKLikEQNNIKFIWVPCG-KLRRYF-SFQNFTDFFKVILGIIKSFYVL 93 
+                           679****************************************99**************.******.********************** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           k++kp++v+++gg+v+++ +ia++l++i+++ +E +  pgl++k+++++an+++
+  sp|Q660A8|MURG_BORGA  94 KKYKPQIVYATGGFVSTPTIIASSLLKIKRITHEMDLDPGLATKINSKFANKIY 147
+                           ****************************************************98 PP
+
+>> sp|B8I6H3|MURG_CLOCE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.2   0.0   6.7e-32   3.8e-29       1     137 [.       3     141 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 106.2 bits;  conditional E-value: 6.7e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v++aggGT+G++ P +A+a+  ++++ e     ++t++gle+++ + +g++ ++i+++ ++++kl sl+tl  + e  +++++a ++lk
+  sp|B8I6H3|MURG_CLOCE   3 VLIAGGGTGGHINPGLAIAKYIKQKEAEADitfVGTKKGLETKLvPREGYPLETITVR-GFKRKL-SLDTLIAIKELIQSFFQASRLLK 89 
+                           799*********************99999999**************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           + kpdvv+g+ggyv +++l+ a++ gip+ ++E+n+ pg++n+ll r++  v
+  sp|B8I6H3|MURG_CLOCE  90 RIKPDVVIGTGGYVCGPVLYMAAKKGIPTLIHESNAFPGVTNRLLERYVSYV 141
+                           ***********************************************99766 PP
+
+>> sp|A5VRH7|MURG_BRUO2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.6   0.3   9.8e-32   5.5e-29       1     137 [.      10     145 ..      10     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 105.6 bits;  conditional E-value: 9.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+lat  +  +fv + a  +++ i +  + + + + ++ lk++++ +++  ++++++++ k
+  sp|A5VRH7|MURG_BRUO2  10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 
+                           79***************************************87777777778888.55554.59************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy  +++l+aa+  gip+ ++Eqn+++g +nk l+ r++ +
+  sp|A5VRH7|MURG_BRUO2  97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145
+                           ****************************************999998865 PP
+
+>> sp|B0CHM0|MURG_BRUSI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.6   0.3   9.8e-32   5.5e-29       1     137 [.      10     145 ..      10     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 105.6 bits;  conditional E-value: 9.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+lat  +  +fv + a  +++ i +  + + + + ++ lk++++ +++  ++++++++ k
+  sp|B0CHM0|MURG_BRUSI  10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 
+                           79***************************************87777777778888.55554.59************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy  +++l+aa+  gip+ ++Eqn+++g +nk l+ r++ +
+  sp|B0CHM0|MURG_BRUSI  97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145
+                           ****************************************999998865 PP
+
+>> sp|A0JV94|MURG_ARTS2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.1   0.7   7.1e-32     4e-29       1     133 [.       8     142 ..       8     148 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 106.1 bits;  conditional E-value: 7.1e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G++ P++A+a +L++  ++Vr   ++tp g+e+++ ++agle  +i    +++++  sl+ l+ + +   a+++a +il 
+  sp|A0JV94|MURG_ARTS2   8 VVLAGGGTAGHISPLLAIAAALRDVRPDVRllaVGTPSGMETRLvPAAGLELATISRV-PFPRRP-SLDLLRLPGRLAGAVKQAGRILD 94 
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133
+                           +a +dv+vg+ggyv +++++aa++++ip++++E+n ++gl+nk+ +r+
+  sp|A0JV94|MURG_ARTS2  95 DAHADVLVGVGGYVCTPLYLAARRRKIPIVIHEANTRAGLANKVGARF 142
+                           *******************************************99887 PP
+
+>> sp|A6TS61|MURG_ALKMQ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.1   0.0   7.2e-32   4.1e-29       1     138 [.       3     142 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 106.1 bits;  conditional E-value: 7.2e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+A+a++  ++ ++ +   ++t +gle+++ ++ag+e++ i++   l++k+ s++++k++a+  k+l +a++++k
+  sp|A6TS61|MURG_ALKMQ   3 IMISGGGTGGHIYPAIAIANQITEKHPQAKiqfVGTAKGLESELiPKAGYEIKHITVS-YLRRKI-SFHNVKSIAKLIKGLVEARRLIK 89 
+                           6799******************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +++pdvv+g+gg+v +++l+ a+++g ++ ++Eqn  pgl+n++l  ++++++
+  sp|A6TS61|MURG_ALKMQ  90 DFNPDVVIGTGGFVCGPVLYMATKLGYKTLIHEQNVFPGLTNRVLGNYVDRIA 142
+                           *************************************************9986 PP
+
+>> sp|C5D4C2|MURG_GEOSW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.1   0.0   7.1e-32     4e-29       1     137 [.       5     142 ..       5     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 106.1 bits;  conditional E-value: 7.1e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++l+ggGT+G+v   +Al  +L+++G+++  ++++ g+e+++  + +g+++ pi ++ kl++++  ++++k+++++lk++++a +i+k+
+  sp|C5D4C2|MURG_GEOSW   5 IILTGGGTAGHVMVNLALIPKLKEQGWDIAyIGSHQGIERELisKVEGVPYFPISTG-KLRRYF-DWNNFKDPFKVLKGTFQAYRIIKK 91 
+                           78**************************************9999999**********.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +kp +v++ gg+v+++++i+a+l+g+p +++E++  pgl+nk+ + +a+++
+  sp|C5D4C2|MURG_GEOSW  92 EKPSIVFSKGGFVSVPVIIGAWLNGVPSIIHESDITPGLANKIAMPFATKI 142
+                           ***********************************************9997 PP
+
+>> sp|A9M690|MURG_BRUC2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.6   0.3   9.8e-32   5.5e-29       1     137 [.      10     145 ..      10     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 105.6 bits;  conditional E-value: 9.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+lat  +  +fv + a  +++ i +  + + + + ++ lk++++ +++  ++++++++ k
+  sp|A9M690|MURG_BRUC2  10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 
+                           79***************************************87777777778888.55554.59************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy  +++l+aa+  gip+ ++Eqn+++g +nk l+ r++ +
+  sp|A9M690|MURG_BRUC2  97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145
+                           ****************************************999998865 PP
+
+>> sp|Q8PPA8|MURG_XANAC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.5   1.1   1.1e-31   6.1e-29       1     138 [.      21     158 ..      21     159 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 105.5 bits;  conditional E-value: 1.1e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a+ L++rG  V+ l++  ++e+++ +++ +++ ++++  +l+ k+  +k l  + ++ +a+r+a ++l++ 
+  sp|Q8PPA8|MURG_XANAC  21 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADGAMETRLvPQHDIPIDTLAIS-GLRGKG-VVKLLGAPVRVMRAVRAAGFVLRKR 107
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn  pg++nk+l+r+a +vl
+  sp|Q8PPA8|MURG_XANAC 108 QPRAVISFGGFAAGPGGLAARLLGAPLLVHEQNRAPGMTNKVLSRFARRVL 158
+                           ************************************************997 PP
+
+>> sp|Q8CY39|MURG_BRUSU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.6   0.3   9.8e-32   5.5e-29       1     137 [.      10     145 ..      10     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 105.6 bits;  conditional E-value: 9.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+lat  +  +fv + a  +++ i +  + + + + ++ lk++++ +++  ++++++++ k
+  sp|Q8CY39|MURG_BRUSU  10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 
+                           79***************************************87777777778888.55554.59************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy  +++l+aa+  gip+ ++Eqn+++g +nk l+ r++ +
+  sp|Q8CY39|MURG_BRUSU  97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145
+                           ****************************************999998865 PP
+
+>> sp|A1WRL1|MURG_VEREI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.8   1.1   8.9e-32     5e-29       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 105.8 bits;  conditional E-value: 8.9e-32
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+++P +A+a++L++rG++V+ l++p  +e+++ +++g + ++++   +++ k+   +  + +++ l+a+ +a+++l++ +
+  sp|A1WRL1|MURG_VEREI   8 LIMAGGTGGHIFPGLAVAEALRARGWRVHwLGAPASMEARIaAQHGFALESVTFS-GVRGKG-LATLALLPLRLLRAFWQARAVLRRVQ 94 
+                           689****************************************************.******.99999********************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdv+vg ggy++ +  +  ll++ p++++Eqn+++gl+n+ll+ ra++v+
+  sp|A1WRL1|MURG_VEREI  95 PDVLVGLGGYISFPGALMGLLRRKPLVLHEQNAVAGLANRLLAGRADRVF 144
+                           ***********************************************997 PP
+
+>> sp|Q812T8|MURG2_BACCR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.4   0.0   2.4e-31   1.3e-28       1     138 [.       4     141 ..       4     142 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 104.4 bits;  conditional E-value: 2.4e-31
+                            EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                            +v++ggG++G+v P +A+   Lq+  +++  ++++ g+e+++ e++g+++++i ++ kl++++  lk++k+++ + k++ +a   +++
+  sp|Q812T8|MURG2_BACCR   4 IVFTGGGSAGHVTPNLAIIPYLQEDNWDISyIGSHQGIEKTIiEKEGIPYYSISSG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 
+                            79******************************************************.******.************************ PP
+
+                            HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             kpdv+++ gg+v+++++i+ +l+++p+ ++E++  pgl+nk+  r+a +++
+  sp|Q812T8|MURG2_BACCR  90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141
+                            ***********************************************99987 PP
+
+>> sp|B0U4Z7|MURG_XYLFM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.9   2.6   8.4e-32   4.8e-29       1     138 [.      15     152 ..      15     153 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 105.9 bits;  conditional E-value: 8.4e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a +L++rG  V  l+++ ++e+++ +++g+e+++i++  +++ ++ +l+ l  + ++l+a+++a+ +l+++
+  sp|B0U4Z7|MURG_XYLFM  15 VMILAGGTGGHIFPGLAVAGALRARGVPVVwLGATGKMETHLvPKHGIEIQTIAVA-GVRGRG-MLALLGAPVRVLRAIFAAMGVLRRY 101
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p vvv+fgg++a++ +iaa++ + p++v+Eqn  pg++n++l+r a++vl
+  sp|B0U4Z7|MURG_XYLFM 102 RPRVVVSFGGFAAGPGGIAARFMRLPLIVHEQNRAPGMTNRVLARVAKRVL 152
+                           ************************************************997 PP
+
+>> sp|A4IJS4|MURG_GEOTN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.7   0.0   9.4e-32   5.3e-29       1     137 [.       5     142 ..       5     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 105.7 bits;  conditional E-value: 9.4e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +vl+ggGT+G+v   vAl  +L+++G+++  +++++g+e+++  + +g++++++ ++ kl++++  +k++k+++++lk++ +a +++++
+  sp|A4IJS4|MURG_GEOTN   5 IVLTGGGTAGHVMVNVALIPKLKEQGWDIVyIGSHEGIEREIigRIDGVPYYSVSTG-KLRRYF-DWKNFKDPFNVLKGVWQAYRLIQK 91 
+                           79****************************************9999***********.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +kpd+v++ gg+v+++++++a+l+g+p +++E++  pgl+nk+ + +a+++
+  sp|A4IJS4|MURG_GEOTN  92 EKPDIVFSKGGFVSVPVILGAWLNGVPSVIHESDLTPGLANKIAMPFATKI 142
+                           **********************************************99987 PP
+
+>> sp|Q2NZB8|MURG_XANOM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  106.4   0.9   5.8e-32   3.2e-29       1     138 [.      21     158 ..      21     159 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 106.4 bits;  conditional E-value: 5.8e-32
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a+ L +rG  V+ l++  ++e+++ +++ +++ ++++  +l+ k+ ++k l  ++++ +a+r+a ++l++ 
+  sp|Q2NZB8|MURG_XANOM  21 VMILAGGTGGHIFPGLAVAKVLSARGVPVTwLGADGAMETRLvPQHDIPIDTLAIT-GLRGKG-MVKLLGAPLRVMRAVRAAGFVLRKR 107
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn  pg++nk+l+r+a +vl
+  sp|Q2NZB8|MURG_XANOM 108 QPRAVISFGGFAAGPGGLAARLLGAPLLVHEQNRAPGMTNKVLSRFARRVL 158
+                           ************************************************997 PP
+
+>> sp|A5FIY3|MURG_FLAJ1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  105.2   0.0   1.3e-31   7.6e-29       1     137 [.       6     144 ..       6     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 105.2 bits;  conditional E-value: 1.3e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G+++Pa+A+a+eL+ + ++ +   +++++++e +  ++ag+e++ + +  +l++kl +l++++ +++   +l ++k+i+k
+  sp|A5FIY3|MURG_FLAJ1   6 FILSGGGTGGHIYPAIAIANELKLQFPDAEflfVGAKDKMEMQKvPQAGYEIKGLWIA-GLQRKL-TLQNMMFPLKLASSLLESKRIIK 92 
+                           79**************************************98877*************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           ++kp+vv+g+gg++++++l aa +agip++v Eqn+ pg++nkll+++an +
+  sp|A5FIY3|MURG_FLAJ1  93 KFKPNVVIGTGGFASGPLLQAAGSAGIPTVVQEQNSFPGITNKLLSKKANAI 144
+                           *************************************************987 PP
+
+>> sp|Q39JX0|MURG_BURS3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.2   0.4   2.8e-31   1.6e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 104.2 bits;  conditional E-value: 2.8e-31
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++  ++G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l+ +++ l+a  ++ ++l++ +
+  sp|Q39JX0|MURG_BURS3   9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPFNLLRACGQSLAALRRVR 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ ++l+g p++++Eqn+i+gl+nk+l+++a++vlv
+  sp|Q39JX0|MURG_BURS3  96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLTNKVLAKFAKRVLV 146
+                           ************************************************986 PP
+
+>> sp|C1A0X5|MURG_RHOE4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.9   1.1   1.7e-31   9.4e-29       1     138 [.      10     155 ..      10     156 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 104.9 bits;  conditional E-value: 1.7e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vv+aggGT+G++ePa+A+a++++++ ++ r   l+t +gle+++ +++g++ + i+p  +l++k  +++ +k + + l ++rk++e+l 
+  sp|C1A0X5|MURG_RHOE4  10 VVVAGGGTAGHIEPALAVADAVKAAQPDTRitaLGTARGLETTLvPARGYTLELIPPV-PLPRKP-TMDLVKLPTRILASVRKTREVLD 96 
+                           79********************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH......HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal......lagipanvaEqngipglvnkllprrangvl 138
+                           +  +dv+vgfggyva++a++aa+      +++ip++++E+n+ +g++nk+ +r a++vl
+  sp|C1A0X5|MURG_RHOE4  97 SVDADVIVGFGGYVALPAYLAARggvlrrRRKIPIVIHEANASAGIANKIGARLATRVL 155
+                           *******************************************************9997 PP
+
+>> sp|Q748D6|MURG_GEOSL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.9   0.1   3.3e-31   1.8e-28       2     138 ..       4     142 ..       3     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 103.9 bits;  conditional E-value: 3.3e-31
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++P +A+a+e+ +r+ + +   ++t +g+e++v +++g+  + i++  + + k+ sl+  k la++l ++ ++++ilke
+  sp|Q748D6|MURG_GEOSL   4 LIAGGGTGGHLFPGIAVAEEFLARDKQNEvlfVGTWKGIEARVlPKTGYRLECITAA-GIRGKG-SLARAKGLAKFLYGYAQSRKILKE 90 
+                           79*******************9999766666**************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++pd+v+g+ggy++++ l aa+  +ip++++Eqn+ipg++n+ l++ a++++
+  sp|Q748D6|MURG_GEOSL  91 FRPDLVLGVGGYASAPTLMAARGMQIPRFIHEQNAIPGFTNRMLAKVADKIF 142
+                           ************************************************9987 PP
+
+>> sp|Q820Y4|MURG_TROWT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.4   0.1   2.4e-31   1.3e-28       1     137 [.       4     140 ..       4     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 104.4 bits;  conditional E-value: 2.4e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++laggGT+G+v P++Ala+ L+  Gh    l+t++g+e+++ +++g+++ +i+   +++++  s + l  +++++ +++ ++ il e+
+  sp|Q820Y4|MURG_TROWT   4 ILLAGGGTAGHVNPLLALADVLKVSGHATFaLGTSEGIESRLvPNSGIDFFTIPKL-PFPRRT-SRHILCFPFKFFSSVKLVRSILIEH 90 
+                           79***************************99************************9.****99.99*********************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           k++vvvgfggyva++a+ aa++++ip +v+E+n++pgl+n l + +a+ v
+  sp|Q820Y4|MURG_TROWT  91 KIQVVVGFGGYVAAPAYAAAISLNIPYVVHESNARPGLANLLAAHFAKCV 140
+                           ****************************************9999999876 PP
+
+>> sp|Q83HK1|MURG_TROW8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.4   0.1   2.4e-31   1.3e-28       1     137 [.       4     140 ..       4     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 104.4 bits;  conditional E-value: 2.4e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++laggGT+G+v P++Ala+ L+  Gh    l+t++g+e+++ +++g+++ +i+   +++++  s + l  +++++ +++ ++ il e+
+  sp|Q83HK1|MURG_TROW8   4 ILLAGGGTAGHVNPLLALADVLKVSGHATFaLGTSEGIESRLvPNSGIDFFTIPKL-PFPRRT-SRHILCFPFKFFSSVKLVRSILIEH 90 
+                           79***************************99************************9.****99.99*********************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           k++vvvgfggyva++a+ aa++++ip +v+E+n++pgl+n l + +a+ v
+  sp|Q83HK1|MURG_TROW8  91 KIQVVVGFGGYVAAPAYAAAISLNIPYVVHESNARPGLANLLAAHFAKCV 140
+                           ****************************************9999999876 PP
+
+>> sp|A4QFM3|MURG_CORGB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.5   0.9   2.3e-31   1.3e-28       1     129 [.       3     132 ..       3     135 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 104.5 bits;  conditional E-value: 2.3e-31
+                           EEEE-------HHHHHHHHHHHHH-.--EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrr.GheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           vv+aggGT+G++ePa+A+a++L+++ G  V  l+t +gle+++ + +g e + i+p  ++++k   ++ lk ++++ kal +a+++lk+
+  sp|A4QFM3|MURG_CORGB   3 VVVAGGGTAGHIEPALAVAEALRDKhGATVSaLGTARGLETTLvPDRGFELHLIEPV-PVPRKP-NMDLLKLPFRVAKALGQARKALKD 89 
+                           79********************975378888**************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEES CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkl 129
+                             +++v+gfggyv+++a+ aa+++g p +v+E+n+++g++nkl
+  sp|A4QFM3|MURG_CORGB  90 TDAQAVIGFGGYVSAPAYMAAKSLGLPFFVHEANARAGMANKL 132
+                           *****************************************97 PP
+
+>> sp|Q39YL9|MURG_GEOMG  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.0   0.1   3.1e-31   1.8e-28       2     138 ..       4     142 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 104.0 bits;  conditional E-value: 3.1e-31
+                           EEE-------HHHHHHHHHHH..HH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareL..qrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++P +A+a+e+  +++G eV  ++t +g+e++v ++ g+  + i++  + + k+ s++  k la++l ++ ++++ilke
+  sp|Q39YL9|MURG_GEOMG   4 LIAGGGTGGHLFPGIAVAEEFlsRKKGNEVLfVGTWRGIEARVlPKLGYRLECITAA-GIRGKG-SVARAKGLAKFLYGYAQSRKILKE 90 
+                           79******************977789*******************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpd+v+g+ggy++++al+aa+  +ip++++Eqn+ipg++nk l+  a++v+
+  sp|Q39YL9|MURG_GEOMG  91 FKPDLVLGVGGYASAPALLAARGMHIPRFIHEQNAIPGFTNKMLATVAERVF 142
+                           ********************************************99999987 PP
+
+>> sp|A1R0I9|MURG_BORT9  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.5   0.0   2.2e-31   1.3e-28       1     139 []       7     148 ..       7     148 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 104.5 bits;  conditional E-value: 2.2e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                           + ++ggGT+G+v+P +A+  +L++ + +++   l+ ++ +e+++  e a +++ +i+++ kl++++ sl+++++++++  ++ k+++i+
+  sp|A1R0I9|MURG_BORT9   7 IFFTGGGTGGHVFPGIAIISKLRELDTNIEffwLGQKDSMEDKIikEHAYIKFIAIPSG-KLRRYF-SLQNFTDFFKVIFGIIKSFFII 93 
+                           679******************************************9999**********.******.********************** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           k++kp++++++gg+v+ +++iaa+l++++ + +E +  pgl++k+++++an++++
+  sp|A1R0I9|MURG_BORT9  94 KKYKPQIIYATGGFVSSPPIIAASLLKVKSITHEMDLDPGLATKINSKFANKIHI 148
+                           ****************************************************985 PP
+
+>> sp|Q3AAE6|MURG_CARHZ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.9   0.0   3.5e-31     2e-28       2     137 ..       4     141 ..       3     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 103.9 bits;  conditional E-value: 3.5e-31
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           v+aggGT+G+++Pa+A+a+  ++  ++ +   ++tp+g+e++v +++g + + ++++ + ++k+ s++tlk l+ + k+l  a+  lk+
+  sp|Q3AAE6|MURG_CARHZ   4 VFAGGGTGGHLYPALAIAQSWKESHPNDEilfVGTPRGIENTVvPKYGFPLYLLPVE-GIPRKV-SWETLKKLFLVPKSLINAFIFLKK 90 
+                           89***********************998889**************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +kpd+vvg+ggy++ ++++aa+ ++ip++++Eqn+ pg++nk+l+ r++ v
+  sp|Q3AAE6|MURG_CARHZ  91 EKPDIVVGTGGYASFPVVFAATVLKIPTVIHEQNAYPGIANKILAARVDAV 141
+                           ***********************************************9987 PP
+
+>> sp|Q8NNN5|MURG_CORGL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.5   0.9   2.3e-31   1.3e-28       1     129 [.       3     132 ..       3     135 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 104.5 bits;  conditional E-value: 2.3e-31
+                           EEEE-------HHHHHHHHHHHHH-.--EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrr.GheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           vv+aggGT+G++ePa+A+a++L+++ G  V  l+t +gle+++ + +g e + i+p  ++++k   ++ lk ++++ kal +a+++lk+
+  sp|Q8NNN5|MURG_CORGL   3 VVVAGGGTAGHIEPALAVAEALRDKhGATVSaLGTARGLETTLvPDRGFELHLIEPV-PVPRKP-NMDLLKLPFRVAKALGQARKALKD 89 
+                           79********************975378888**************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEES CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkl 129
+                             +++v+gfggyv+++a+ aa+++g p +v+E+n+++g++nkl
+  sp|Q8NNN5|MURG_CORGL  90 TDAQAVIGFGGYVSAPAYMAAKSLGLPFFVHEANARAGMANKL 132
+                           *****************************************97 PP
+
+>> sp|Q0TNP7|MURG_CLOP1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.8   0.0   3.5e-31     2e-28       1     135 [.       6     140 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 103.8 bits;  conditional E-value: 3.5e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggG++G+v P +Al  +L++ G e++ +++++g+e+++ +++++++++i ++ kl++++  +k++++++++lk++ +a +il+++
+  sp|Q0TNP7|MURG_CLOP1   6 IIMTGGGSAGHVTPNLALVPKLKELGFEIKyIGSKNGIEKEIiTKENIPYYSISSG-KLRRYF-DIKNFTDPFKVLKGVMDASRILSKE 92 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           kpdv+++ gg+v ++++iaa+  +ip++ +E++  pgl+nk+ + +++
+  sp|Q0TNP7|MURG_CLOP1  93 KPDVIFSKGGFVTVPVVIAASMKKIPVVSHESDLTPGLANKIASPFCD 140
+                           ******************************************998887 PP
+
+>> sp|Q8XIQ1|MURG_CLOPE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.8   0.0   3.5e-31     2e-28       1     135 [.       6     140 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 103.8 bits;  conditional E-value: 3.5e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggG++G+v P +Al  +L++ G e++ +++++g+e+++ +++++++++i ++ kl++++  +k++++++++lk++ +a +il+++
+  sp|Q8XIQ1|MURG_CLOPE   6 IIMTGGGSAGHVTPNLALVPKLKELGFEIKyIGSKNGIEKEIiTKENIPYYSISSG-KLRRYF-DIKNFTDPFKVLKGVMDASRILSKE 92 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           kpdv+++ gg+v ++++iaa+  +ip++ +E++  pgl+nk+ + +++
+  sp|Q8XIQ1|MURG_CLOPE  93 KPDVIFSKGGFVTVPVVIAASMKKIPVVSHESDLTPGLANKIASPFCD 140
+                           ******************************************998887 PP
+
+>> sp|Q0SRB4|MURG_CLOPS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.8   0.0   3.5e-31     2e-28       1     135 [.       6     140 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 103.8 bits;  conditional E-value: 3.5e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggG++G+v P +Al  +L++ G e++ +++++g+e+++ +++++++++i ++ kl++++  +k++++++++lk++ +a +il+++
+  sp|Q0SRB4|MURG_CLOPS   6 IIMTGGGSAGHVTPNLALVPKLKELGFEIKyIGSKNGIEKEIiTKENIPYYSISSG-KLRRYF-DIKNFTDPFKVLKGVMDASRILSKE 92 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           kpdv+++ gg+v ++++iaa+  +ip++ +E++  pgl+nk+ + +++
+  sp|Q0SRB4|MURG_CLOPS  93 KPDVIFSKGGFVTVPVVIAASMKKIPVVSHESDLTPGLANKIASPFCD 140
+                           ******************************************998887 PP
+
+>> sp|Q5YYX9|MURG_NOCFA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.9   1.8   3.4e-31   1.9e-28       1     138 [.      17     162 ..      17     163 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 103.9 bits;  conditional E-value: 3.4e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v++aggGT+G++ePa+A+a++L+r ++ +r   l+t++gle+++ +e+g++ + i+p  +l++k  +++ l+ +a+++ ++r++++++ 
+  sp|Q5YYX9|MURG_NOCFA  17 VIVAGGGTAGHIEPALAVADALRRLDPAIRvtaLGTERGLETRLvPERGYPLELIPPV-PLPRKP-TVDLLRLPARVRASVRRTRAVID 103
+                           689*******************************************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH......HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal......lagipanvaEqngipglvnkllprrangvl 138
+                             ++dv++gfggyva++a++aa       ++ +p++v+E+n+ +g++nk+ +r a  vl
+  sp|Q5YYX9|MURG_NOCFA 104 AVQADVIIGFGGYVALPAYLAAGrgvlrrRRAVPVIVHEANAKAGIANKIGARVARAVL 162
+                           *********************999999999********************999998876 PP
+
+>> sp|A7HH67|MURG_ANADF  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.3   0.4   2.6e-31   1.5e-28       2     138 ..       4     142 ..       3     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 104.3 bits;  conditional E-value: 2.6e-31
+                           EEE-------HHHHHHHHHHHHH-..--EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrr..GheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+v+P +Ala+e+  r  G +V  ++t++gle++v ++ag +++ i+++ +l+ k+  l+ l++l+ + +al ++ +il++
+  sp|A7HH67|MURG_ANADF   4 LIAGGGTGGHVFPGIALAEEVVGRhpGNDVVfVGTERGLEAKVvPAAGFPIELIDVK-GLKGKG-ILSLLLNLLLVPRALLQSHRILRK 90 
+                           79*******************6664488999**************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++pdvvvg+ggy+++++++ a+l++ip+ v Eqn+i+g++n++l r+++ ++
+  sp|A7HH67|MURG_ANADF  91 WRPDVVVGVGGYASGPVVLVAWLLRIPTAVQEQNAIAGFTNRVLGRFVDAAF 142
+                           ***********************************************99865 PP
+
+>> sp|Q82VS3|MURG_NITEU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.5   0.0   4.7e-31   2.6e-28       3     138 ..       2     137 ..       1     138 [. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 103.5 bits;  conditional E-value: 4.7e-31
+                           EE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   3 laggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           +++gGT+G+v+P +A+ar  q+ G+++  l+t +g+e+ + +++g +++ i+   +l+ k   ++ l+ +++  +a  ++++il++++p
+  sp|Q82VS3|MURG_NITEU   2 IMAGGTGGHVFPGLAVARSMQANGWRIVwLGTRNGMEAALvPQHGFSIELINFS-GLRGKK-LSSYLLLPWRLAQACWQSFRILRRQQP 88 
+                           789***************************************************.****99.9************************** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +vv+g+ggy a++ +i a l+g p+ ++Eqn i+gl+nk+l++ a+++l
+  sp|Q82VS3|MURG_NITEU  89 QVVLGMGGYPALPGGIMAVLLGKPLLIHEQNRIAGLTNKILAKIADRIL 137
+                           **********************************************987 PP
+
+>> sp|B0RVA5|MURG_XANCB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.4   1.4   2.4e-31   1.3e-28       1     138 [.      22     159 ..      22     160 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 104.4 bits;  conditional E-value: 2.4e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a+ L++rG  V+ l++  ++e+++ +++ +++ ++++  +l+ k+  +k l  + ++ +a+r+a ++l++ 
+  sp|B0RVA5|MURG_XANCB  22 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADGAMETRLvPQHAIQIDTLAIS-GLRGKG-IVKLLGAPVRVMRAVRAAGFVLRKR 108
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn  pg++nk+l+r+a +vl
+  sp|B0RVA5|MURG_XANCB 109 QPRAVISFGGFAAGPGGLAARLLGVPLLVHEQNRAPGMTNKVLSRFARRVL 159
+                           ************************************************997 PP
+
+>> sp|Q2SZI3|MURG_BURTA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.3   0.5   5.2e-31   2.9e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 103.3 bits;  conditional E-value: 5.2e-31
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++ q++G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l  +++ l+a  ++ ++l++ k
+  sp|Q2SZI3|MURG_BURTA   9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LATKLALPFNLLRACAQSLRALRRVK 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|Q2SZI3|MURG_BURTA  96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|Q11GS5|MURG_MESSB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.0   0.3   3.2e-31   1.8e-28       1     137 [.       6     141 ..       6     142 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 104.0 bits;  conditional E-value: 3.2e-31
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++Pa Ala+eL++rG+ V+lat ++ ++f  +    e+++i++  ++ ++   l+ lk+ ++ +++++++++++ + k
+  sp|Q11GS5|MURG_MESSB   6 ILLSAGGTGGHLFPAEALAHELRARGWSVHLATDKRATRFAgTFPADEIHAIDSA-TFGSRN-PLALLKSGLSIWRGFKQSTALINRLK 92 
+                           79**************************************986666677779999.777777.9************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy  +++l+aa+++++p+ v+Eqn+++g +nk+l+ r++ +
+  sp|Q11GS5|MURG_MESSB  93 PAAVVGFGGYPTLPPLYAATRRQVPTLVHEQNAVMGRANKALAPRVTAI 141
+                           *******************************************999876 PP
+
+>> sp|Q4UQX0|MURG_XANC8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.4   1.4   2.4e-31   1.3e-28       1     138 [.      22     159 ..      22     160 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 104.4 bits;  conditional E-value: 2.4e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a+ L++rG  V+ l++  ++e+++ +++ +++ ++++  +l+ k+  +k l  + ++ +a+r+a ++l++ 
+  sp|Q4UQX0|MURG_XANC8  22 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADGAMETRLvPQHAIQIDTLAIS-GLRGKG-IVKLLGAPVRVMRAVRAAGFVLRKR 108
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn  pg++nk+l+r+a +vl
+  sp|Q4UQX0|MURG_XANC8 109 QPRAVISFGGFAAGPGGLAARLLGVPLLVHEQNRAPGMTNKVLSRFARRVL 159
+                           ************************************************997 PP
+
+>> sp|Q8PCK0|MURG_XANCP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.4   1.4   2.4e-31   1.3e-28       1     138 [.      22     159 ..      22     160 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 104.4 bits;  conditional E-value: 2.4e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a+ L++rG  V+ l++  ++e+++ +++ +++ ++++  +l+ k+  +k l  + ++ +a+r+a ++l++ 
+  sp|Q8PCK0|MURG_XANCP  22 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADGAMETRLvPQHAIQIDTLAIS-GLRGKG-IVKLLGAPVRVMRAVRAAGFVLRKR 108
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn  pg++nk+l+r+a +vl
+  sp|Q8PCK0|MURG_XANCP 109 QPRAVISFGGFAAGPGGLAARLLGVPLLVHEQNRAPGMTNKVLSRFARRVL 159
+                           ************************************************997 PP
+
+>> sp|A3NZL5|MURG_BURP0  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.1   0.5     6e-31   3.4e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 103.1 bits;  conditional E-value: 6e-31
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++ q++G++V  l++p g+e+++ + +g++++ +  + +l+ k+   +++  +++ l+a  ++ ++l++ k
+  sp|A3NZL5|MURG_BURP0   9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGSPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 
+                           5899***************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|A3NZL5|MURG_BURP0  96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|Q98KB3|MURG_RHILO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  104.1   0.7   2.9e-31   1.7e-28       1     137 [.       6     141 ..       6     142 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 104.1 bits;  conditional E-value: 2.9e-31
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++la+gGT+G+++Pa Ala+eL  rG+ V+lat ++ e+f       +++pi++  +  +k   ++ l  +++ ++++r+a +i+ + k
+  sp|Q98KB3|MURG_RHILO   6 ILLAAGGTGGHLFPAEALAHELNGRGWTVHLATDDRAERFAgHFPAAAVHPIQSA-TMGSKN-PIAVLGAFWKIWRGVRQASTIIGRIK 92 
+                           79***************************************6666666677****.777777.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pd+vvgfggy  +++l+aa+++++p+ ++Eqn+++g +n++l+ r++ +
+  sp|Q98KB3|MURG_RHILO  93 PDAVVGFGGYPTLPPLYAATRRKVPTLIHEQNAVMGRANRALAGRVDAI 141
+                           ********************************************99976 PP
+
+>> sp|Q0A6K2|MURG_ALHEH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.1   1.1   6.2e-31   3.5e-28       1     138 [.       5     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 103.1 bits;  conditional E-value: 6.2e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+v+Pa+A+a++L+++G  V  l+t +gle++v ++a ++ +++ ++ +l+ ++   + l  ++  l+al +a  +l+++
+  sp|Q0A6K2|MURG_ALHEH   5 VLIMAGGTGGHVFPALAVAERLREQGVPVVwLGTREGLEARVvPAADIPLESLRVR-GLRGNG-LRGWLAAPFVLLRALWQALGVLRRH 91 
+                           789*****************************************************.****99.9999********************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p +v+g+ggy+a++  +aa+l + p++++Eqn+++gl+n+ll+r a +vl
+  sp|Q0A6K2|MURG_ALHEH  92 RPRAVLGMGGYAAGPGAVAAWLTRRPLIIHEQNAVAGLTNRLLSRLARRVL 142
+                           *********************************************999987 PP
+
+>> sp|A5IGA6|MURG_LEGPC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.1   0.0   6.1e-31   3.4e-28       1     137 [.       5     141 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 103.1 bits;  conditional E-value: 6.1e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +v++ggGT+G+v P +Al +e++++G++V+ +++  g+e++  e   ++++ + ++ kl++++ slk+l+++++   ++ ++  ++ + 
+  sp|A5IGA6|MURG_LEGPC   5 IVFTGGGTAGHVTPNIALIKEFRKEGWNVEyIGSVSGIEKEMiEPMDIPFHGVSSG-KLRRYF-SLKNLLDPFKIVLGIIQSSLLFYKI 91 
+                           79******************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kpdvv++ gg+va +++++a+l++ip++ +E++  pgl+n+l+  ++n++
+  sp|A5IGA6|MURG_LEGPC  92 KPDVVFSKGGFVAFPVVVGAWLNRIPVVAHESDMSPGLANRLSFPFVNKI 141
+                           *****************************************999988886 PP
+
+>> sp|Q5L3H6|MURG_GEOKA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.5   0.0   4.7e-31   2.6e-28       1     137 [.       5     142 ..       5     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 103.5 bits;  conditional E-value: 4.7e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++l+ggGT+G+v   vAl  +L++ G+++  ++++ g+e+++  + +g++++++ ++ kl++++  +k++k+++++lk++ +a +++++
+  sp|Q5L3H6|MURG_GEOKA   5 IILTGGGTAGHVMVNVALIPKLKELGWDIVyIGSHQGIEREIigRIDGVPYYSVSTG-KLRRYF-DWKNFKDPFNVLKGVWQAYRLIQK 91 
+                           78****************************************9999***********.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +kpdvv++ gg+v+++++++a+l+g+p +++E++  pgl+nk+ + +a+++
+  sp|Q5L3H6|MURG_GEOKA  92 EKPDVVFSKGGFVSVPVILGAWLNGVPSVIHESDLTPGLANKIAMPFATKI 142
+                           **********************************************99987 PP
+
+>> sp|A0LTM3|MURG_ACIC1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.3   0.9   5.2e-31   2.9e-28       1     135 [.       3     139 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 103.3 bits;  conditional E-value: 5.2e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G++ePa+ la++L+rr+  V    l++p+gle+++ +++g +   i++  +l+++l +++ l  + + + a+ ++++il+
+  sp|A0LTM3|MURG_ACIC1   3 VVLAGGGTAGHIEPALTLAEALRRRDVGVGitlLGSPRGLETRLvPARGFDLALIPAV-PLPRRL-TPDLLAVPSRLRAAVGEVERILA 89 
+                           79***************************9****************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           e  +dv+vgfggyva++ ++aa++ g p +v+E+n++pgl+n++ +r+  
+  sp|A0LTM3|MURG_ACIC1  90 ETGADVLVGFGGYVALPGYLAARRTGLPYVVHEANARPGLANRWGARFTR 139
+                           ********************************************998865 PP
+
+>> sp|Q3A2G6|MURG_PELCD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  102.8   0.0   7.6e-31   4.3e-28       2     137 ..       4     141 ..       3     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 102.8 bits;  conditional E-value: 7.6e-31
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +laggGT+G+++PavAla++L +++ e     ++t +g+e++v +e+g + + i+++ ++ +++  l++l+ +    +++ +   il++
+  sp|Q3A2G6|MURG_PELCD   4 LLAGGGTGGHLFPAVALAQRLLEQDSEAQvqfVGTARGIEARVlPEQGWPLELIDIR-GFVNQG-LLGKLRMIPCLIRSVWQGLCILRK 90 
+                           89*******************9999888888**************************.****99.999999999999************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           ++pdvv+g+ggy++++ l+aa+l +ip++++Eqn+ pgl+n+ll  +a  v
+  sp|Q3A2G6|MURG_PELCD  91 FQPDVVLGVGGYASAPMLVAARLKRIPTVIHEQNAWPGLTNRLLGPWARCV 141
+                           *******************************************99988765 PP
+
+>> sp|Q0AYQ8|MURG_SYNWW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   99.2   0.0   9.8e-30   5.5e-27       1     136 [.       3     140 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 99.2 bits;  conditional E-value: 9.8e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+A+a +L++r  e +   ++t++gle+ + + agl + +i++  +  ++  +lk+ ++l ++ +++++a  i+k
+  sp|Q0AYQ8|MURG_SYNWW   3 FIITGGGTGGHIYPALAIASGLKERLGEAEilyVGTKKGLEANIvPRAGLRFTTIDIS-GIDRSS-MLKASRSLVKFPRSFFQAWDIIK 89 
+                           789**********************8888888**************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           +++pd+v+g+ggyv+ +++ a ++   +++++Eqn+ipgl+n+ l+rr++ 
+  sp|Q0AYQ8|MURG_SYNWW  90 DFQPDIVIGTGGYVSFPIVMAGTFFPSKTVIHEQNAIPGLANRNLARRVDY 140
+                           ***********************************************9985 PP
+
+>> sp|Q1LIM6|MURG_RALME  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  102.0   0.1   1.3e-30   7.6e-28       2     138 ..       7     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 102.0 bits;  conditional E-value: 1.3e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+ar+L+++G++V  l+   g+e+++ +++ ++++ i+ + +l+ k+  l++l+ +++ l+a+ ++  +l++ k
+  sp|Q1LIM6|MURG_RALME   7 LVMAGGTGGHVFPGLAVARALRDEGWRVVwLGNRTGMEATLvPKHDIPMEYIQFG-GLRGKG-LLTKLLLPLNLLRAFWQSIGALRRVK 93 
+                           789****************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggy+  +a+  a+l+g p++++Eqn+i+gl+nk+l++ a++vl
+  sp|Q1LIM6|MURG_RALME  94 PDVVLGMGGYITFPAGMMASLLGRPLVLHEQNSIAGLANKVLAKVADRVL 143
+                           ***********************************************997 PP
+
+>> sp|Q92NL9|MURG_RHIME  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.5   0.5   3.7e-30   2.1e-27       1     137 [.       6     141 ..       6     142 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 100.5 bits;  conditional E-value: 3.7e-30
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 
+                           ++la+gGT+G+++Pa Ala+eL++ G+ V+l+t  + e+f+   +++++++vp   ig++       + +k  +++++ + +lr+a+++
+  sp|Q92NL9|MURG_RHIME   6 ILLAAGGTGGHLFPAEALAHELKATGYSVHLVTDSRAERFTgkfPADEIHVVPsatIGSK-------NPVKLARSVWKLWTGLRAARRL 87 
+                           79**************************************99888999999995444444.......599******************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++ kp +vvgfggy  +++l+aa+  gip +++Eqn+++g +nk l+ r++ v
+  sp|Q92NL9|MURG_RHIME  88 IARLKPRAVVGFGGYPTVPPLLAATGMGIPSIIHEQNAVMGRANKMLASRVKAV 141
+                           **************************************************9987 PP
+
+>> sp|Q72JP9|MURG_THET2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.4   0.3   3.9e-30   2.2e-27       1     135 [.       2     134 ..       2     138 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 100.4 bits;  conditional E-value: 3.9e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++l+ggGT+G+++Pa+A+a+eL+rrGh V  l+++ gle+++ +++ +++  i+++ kl ++   +++ + +++g   + +a ++l++ 
+  sp|Q72JP9|MURG_THET2   2 ILLTGGGTGGHLFPALAVAEELRRRGHPVFyLGAEGGLEARLlPKTPIPHALIPAG-KLDRSALRPQEAPKVLQG---VLRAQALLRRL 86 
+                           79******************************************************.****88777777777777...*********** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +p++v+++ggy+  + + aa+l+gip+ ++Eqn++ gl+n++l+  a+
+  sp|Q72JP9|MURG_THET2  87 RPKAVLSTGGYAGFPGGMAASLLGIPLLLHEQNARLGLANRALAPLAK 134
+                           *****************************************9887665 PP
+
+>> sp|A1R5F8|MURG_ARTAT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  103.4   0.9     5e-31   2.8e-28       1     138 [.      14     153 ..      14     154 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 103.4 bits;  conditional E-value: 5e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           vvlaggGT+G+v P++A+a++ +++ +e     ++tp g+e+++ ++ag+e  +i+   +++++  s + +k +a+   a+r+a++il+
+  sp|A1R5F8|MURG_ARTAT  14 VVLAGGGTAGHVSPLLAIADAIREKRPEAAilaVGTPSGMETRLvPAAGYELATIDRV-PFPRRP-SADLVKLPARLSGAVRQARRILE 100
+                           79****************************9***************************.****99.9999999999999********** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ea++dv+vg+ggyv ++ ++aa++++ip++++E+n  +gl+n++ +r+ n v+
+  sp|A1R5F8|MURG_ARTAT 101 EARADVLVGVGGYVCTPMYLAARKLRIPIVIHEANMKAGLANRVGARFSNHVA 153
+                           ***********************************************999886 PP
+
+>> sp|Q87AF9|MURG_XYLFT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  102.6   2.6   8.6e-31   4.9e-28       1     138 [.      12     149 ..      12     150 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 102.6 bits;  conditional E-value: 8.6e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a  L++rG  V  l++  ++e+++ +++g+e+++i++  +++ ++ +l+ l  + ++l a+++a+++l+++
+  sp|Q87AF9|MURG_XYLFT  12 VMILAGGTGGHIFPGLAVAGVLRARGVPVVwLGAAGKMETHLvPKHGIEIQTIAVS-GVRGHG-MLALLGAPVRVLPAIFAAMRVLRRY 98 
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p vvv+fgg++a++ +iaa+l g p++v+Eqn  pg++n++l+r a +vl
+  sp|Q87AF9|MURG_XYLFT  99 RPRVVVSFGGFAAGPGGIAARLMGLPLIVHEQNRAPGMTNRVLARVARRVL 149
+                           **********************************************99987 PP
+
+>> sp|B2I9B3|MURG_XYLF2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  102.6   2.6   8.8e-31   4.9e-28       1     138 [.      15     152 ..      15     153 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 102.6 bits;  conditional E-value: 8.8e-31
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++P +A+a  L++rG  V  l++  ++e+++ +++g+e+++i++  +++ ++ +l+ l  + ++l a+++a+++l+++
+  sp|B2I9B3|MURG_XYLF2  15 VMILAGGTGGHIFPGLAVAGVLRARGVPVVwLGAAGKMETHLvPKHGIEIQTIAVS-GVRGHG-MLALLGAPVRVLPAIFAAMRVLRRY 101
+                           6799****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p vvv+fgg++a++ +iaa+l g p++v+Eqn  pg++n++l+r a +vl
+  sp|B2I9B3|MURG_XYLF2 102 RPRVVVSFGGFAAGPGGIAARLMGLPLIVHEQNRAPGMTNRVLARVARRVL 152
+                           **********************************************99987 PP
+
+>> sp|A6WZQ6|MURG_OCHA4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  102.4   0.3   9.9e-31   5.6e-28       1     137 [.       6     141 ..       6     142 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 102.4 bits;  conditional E-value: 9.9e-31
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+lat  +  +f  + a+ +++ i +  + + + + ++ lk++++ +++  ++++++++ k
+  sp|A6WZQ6|MURG_OCHA4   6 IVLAAGGTGGHLFPAEALAHELKARGWDVHLATDARAQRFAgAFAEDHVHVIRSA-TIAGR-NPIALLKTFWSLWQGNLDSRKLFRRLK 92 
+                           79***************************************98888888889999.55554.59************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++v+gfggy  +++l+aa+  +ip+ v+Eqn+++g +nk l+ r++ +
+  sp|A6WZQ6|MURG_OCHA4  93 PKLVAGFGGYPTLPPLYAASNMNIPTMVHEQNAVMGRANKGLAGRVKAI 141
+                           ****************************************999998865 PP
+
+>> sp|A1V0R8|MURG_BURMS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.8   0.5   1.5e-30   8.6e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.8 bits;  conditional E-value: 1.5e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++ q++G++V  l+ p g+e+++ + +g++++ +  + +l+ k+   +++  +++ l+a  ++ ++l++ k
+  sp|A1V0R8|MURG_BURMS   9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 
+                           5899***************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|A1V0R8|MURG_BURMS  96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|A2S5U5|MURG_BURM9  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.8   0.5   1.5e-30   8.6e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.8 bits;  conditional E-value: 1.5e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++ q++G++V  l+ p g+e+++ + +g++++ +  + +l+ k+   +++  +++ l+a  ++ ++l++ k
+  sp|A2S5U5|MURG_BURM9   9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 
+                           5899***************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|A2S5U5|MURG_BURM9  96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|A3MR63|MURG_BURM7  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.8   0.5   1.5e-30   8.6e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.8 bits;  conditional E-value: 1.5e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++ q++G++V  l+ p g+e+++ + +g++++ +  + +l+ k+   +++  +++ l+a  ++ ++l++ k
+  sp|A3MR63|MURG_BURM7   9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 
+                           5899***************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|A3MR63|MURG_BURM7  96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|Q62GS7|MURG_BURMA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.8   0.5   1.5e-30   8.6e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.8 bits;  conditional E-value: 1.5e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++ q++G++V  l+ p g+e+++ + +g++++ +  + +l+ k+   +++  +++ l+a  ++ ++l++ k
+  sp|Q62GS7|MURG_BURMA   9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 
+                           5899***************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|Q62GS7|MURG_BURMA  96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|Q63QJ7|MURG_BURPS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.8   0.5   1.5e-30   8.6e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.8 bits;  conditional E-value: 1.5e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++ q++G++V  l+ p g+e+++ + +g++++ +  + +l+ k+   +++  +++ l+a  ++ ++l++ k
+  sp|Q63QJ7|MURG_BURPS   9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 
+                           5899***************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|Q63QJ7|MURG_BURPS  96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|A3NDW4|MURG_BURP6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.8   0.5   1.5e-30   8.6e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.8 bits;  conditional E-value: 1.5e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++ q++G++V  l+ p g+e+++ + +g++++ +  + +l+ k+   +++  +++ l+a  ++ ++l++ k
+  sp|A3NDW4|MURG_BURP6   9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 
+                           5899***************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|A3NDW4|MURG_BURP6  96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|Q3J789|MURG_NITOC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.8   0.3   1.6e-30   8.7e-28       1     132 [.       5     136 ..       5     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 101.8 bits;  conditional E-value: 1.6e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G+++Pa+A+a++L++ G eV  ++t  gle+++ ++ag++++ i ++ +l+ k+   + l+ +++ l al +a ++l+++
+  sp|Q3J789|MURG_NITOC   5 VLIMAGGTGGHIFPALAVADRLRAWGVEVVwMGTRHGLEAELvPKAGYPIEWISIG-GLRGKG-LTHWLRAPFKLLLALSQALRALRRW 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllpr 132
+                           +p+vv+g gg+v+++ +++a+l++ p+ ++Eqn+i g +n+ll+ 
+  sp|Q3J789|MURG_NITOC  92 QPAVVLGLGGFVSGPGGLGAWLLRRPLLIHEQNAIVGTANRLLAP 136
+                           ****************************************99865 PP
+
+>> sp|Q8K9T4|MURG_BUCAP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  102.3   0.0   1.1e-30     6e-28       1     135 [.       6     140 ..       6     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 102.3 bits;  conditional E-value: 1.1e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gG++G+v+P + +a++L ++G+++  ++t++++e+++ ++ +++++ i+++ +l+++    + ++++ ++l+++ ++++i+k++
+  sp|Q8K9T4|MURG_BUCAP   6 IIILAGGSGGHVFPGLTIAKHLIKKGWDINwIGTKNKIESEIiPKCNIKIHFIKIQ-GLRNSS-LKNLIMTPINVLNSYLQVRKIIKNW 92 
+                           6899****************************************************.****77.888889999**************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                            pd+++g+ggyv+++ ++aa++++ip +++Eqn i+g++nkll++  +
+  sp|Q8K9T4|MURG_BUCAP  93 IPDIILGMGGYVSGPGGLAAWSCKIPFILHEQNKIAGITNKLLSKIST 140
+                           *******************************************98765 PP
+
+>> sp|B9M172|MURG_GEOSF  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.9   0.0   1.4e-30   7.8e-28       2     139 .]       4     143 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 101.9 bits;  conditional E-value: 1.4e-30
+                           EEE-------HHHHHHHHHHHHH--..-EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrG..heVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++P +A+a+e+ +r    eV  ++t++g+e+++ ++ g+  + i +  + + +   l+++k++a  l ++ ++++ilke
+  sp|B9M172|MURG_GEOSF   4 IVAGGGTGGHLFPGIAVAEEFLARNsaNEVLfIGTERGIEARLlPKLGYRLECISAS-GIKGQS-PLTKVKSAALLLYGYSQSRKILKE 90 
+                           68*******************9887224566**************************.9**999.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           ++pdvv+g+ggy+++++++ a+ ++i ++++Eqn+ipgl+nk+l+r a++v++
+  sp|B9M172|MURG_GEOSF  91 FRPDVVLGVGGYASAPVVLSARGLQIRRFIHEQNAIPGLTNKVLARIADKVFI 143
+                           **************************************************985 PP
+
+>> sp|B5EBQ1|MURG_GEOBB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.5   0.0   1.9e-30   1.1e-27       2     139 .]       4     143 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 101.5 bits;  conditional E-value: 1.9e-30
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++P +A+a+e+ +r +e +   ++t++g+e+++ ++ g++   i +  + +  + ++k+++++ + l ++ ++++ilke
+  sp|B5EBQ1|MURG_GEOBB   4 IIAGGGTGGHLFPGIAVADEFLARSPENEvlfVGTERGIEARLlPKLGYKLALISAS-GMKGMG-TIKKIMSAGRLLYGYSQSRKILKE 90 
+                           68**********************9887777**************************.999988.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           ++pd+v+g+ggy+++++++aa+  gi ++++Eqn+ pgl+nk+l r+++gv++
+  sp|B5EBQ1|MURG_GEOBB  91 FRPDLVLGVGGYASAPIVLAARGMGIRRFIHEQNAFPGLTNKVLGRFVDGVFI 143
+                           **************************************************985 PP
+
+>> sp|Q3JND8|MURG_BURP1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.5   0.6   1.9e-30   1.1e-27       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.5 bits;  conditional E-value: 1.9e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++ q++G++V  l+ p g+e+++ + +g++++ +  + +l+ k+   +++  +++ l+a  ++ ++l++ k
+  sp|Q3JND8|MURG_BURP1   9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVHFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 
+                           5899***************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|Q3JND8|MURG_BURP1  96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|Q1IKH0|MURG_ACIBL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.8   0.3   1.5e-30   8.4e-28       2     137 ..       4     140 ..       3     142 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 101.8 bits;  conditional E-value: 1.5e-30
+                           EEE-------HHHHHHHHHHHHH.---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqr.rGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +laggGT+G+v Pa+A+a+eL++  G eV+ ++t++g+e+++ ++ag + + ++++  l++   +++ +k+ ++  ka+ ++++i++e+
+  sp|Q1IKH0|MURG_ACIBL   4 ILAGGGTGGHVIPALAIAQELKNvHGAEVIfIGTQRGIETRLvPAAGFSLKLVKVG-ALNRVS-FSTRIKTMFDLPKAILESRRIIREF 90 
+                           79********************967*******************************.777755.9************************ PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kpdv +g+ggy++++a++aa+l+++p+++ E n  pg++n+l++ +a  +
+  sp|Q1IKH0|MURG_ACIBL  91 KPDVMIGVGGYASGPAMLAARLCRVPTVIFEPNIYPGFANRLVAPFAAAA 140
+                           ******************************************99998765 PP
+
+>> sp|P74657|MURG_SYNY3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.1   0.0   2.6e-30   1.4e-27       2     138 ..       8     141 ..       7     142 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 101.1 bits;  conditional E-value: 2.6e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+Ala++L +++  ++ l++p++le+++  + ++ ++i+++ +++ +  slkt+k  ++ l++++ +++++k++k+
+  sp|P74657|MURG_SYNY3   8 LIAASGTGGHLFPALALAQQLPDYE--IIwLGVPDRLETTLVPRQYPLQTIPVE-GFQGRP-SLKTIKIGWNLLRSVFTVRKLIKSKKI 92 
+                           799********************99..556***********8888888889999.999999.*************************** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++v+ +ggy+a++a++aa+l++ip++ +E+n ipg+v+ +l r++++v+
+  sp|P74657|MURG_SYNY3  93 NAVATTGGYIAAPAIVAAKLCNIPVIFHESNFIPGKVTTWLGRWCDTVA 141
+                           **********************************************997 PP
+
+>> sp|B1YSS4|MURG_BURA4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.6   0.4   1.7e-30   9.7e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.6 bits;  conditional E-value: 1.7e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++  ++G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l+ +++ l+a  ++  +l++ +
+  sp|B1YSS4|MURG_BURA4   9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPFNLLRACWQSLGALRRVR 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ a+l+g p++++Eqn+i+gl+nk+l+++a++vlv
+  sp|B1YSS4|MURG_BURA4  96 PDVVLGMGGYITFPAGVMAALSGRPLVLHEQNSIAGLANKVLAKFAKRVLV 146
+                           ************************************************986 PP
+
+>> sp|Q0BIK1|MURG_BURCM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.6   0.4   1.7e-30   9.7e-28       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.6 bits;  conditional E-value: 1.7e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++  ++G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l+ +++ l+a  ++  +l++ +
+  sp|Q0BIK1|MURG_BURCM   9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPFNLLRACWQSLGALRRVR 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ a+l+g p++++Eqn+i+gl+nk+l+++a++vlv
+  sp|Q0BIK1|MURG_BURCM  96 PDVVLGMGGYITFPAGVMAALSGRPLVLHEQNSIAGLANKVLAKFAKRVLV 146
+                           ************************************************986 PP
+
+>> sp|Q6HDR3|MURG2_BACHK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.5   0.0   3.9e-30   2.2e-27       1     138 [.       4     141 ..       4     142 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 100.5 bits;  conditional E-value: 3.9e-30
+                            EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                            +v++ggG++G+v P +A+   L++  +++  ++++ g+e+++ e++ +++++i+++ kl++++  lk++k+++ + k++ +a   +++
+  sp|Q6HDR3|MURG2_BACHK   4 IVFTGGGSAGHVTPNLAIIPYLKEDNWDISyIGSHQGIEKTIiEKEDIPYYSIASG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 
+                            79******************************************************.******.************************ PP
+
+                            HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             kpdv+++ gg+v+++++i+ +l+++p+ ++E++  pgl+nk+  r+a +++
+  sp|Q6HDR3|MURG2_BACHK  90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141
+                            ***********************************************99987 PP
+
+>> sp|Q81JE6|MURG2_BACAN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.5   0.0   3.9e-30   2.2e-27       1     138 [.       4     141 ..       4     142 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 100.5 bits;  conditional E-value: 3.9e-30
+                            EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                            +v++ggG++G+v P +A+   L++  +++  ++++ g+e+++ e++ +++++i+++ kl++++  lk++k+++ + k++ +a   +++
+  sp|Q81JE6|MURG2_BACAN   4 IVFTGGGSAGHVTPNLAIIPYLKEDNWDISyIGSHQGIEKTIiEKEDIPYYSIASG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 
+                            79******************************************************.******.************************ PP
+
+                            HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             kpdv+++ gg+v+++++i+ +l+++p+ ++E++  pgl+nk+  r+a +++
+  sp|Q81JE6|MURG2_BACAN  90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141
+                            ***********************************************99987 PP
+
+>> sp|Q0K6M4|MURG_RALEH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.2   0.2   2.3e-30   1.3e-27       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.2 bits;  conditional E-value: 2.3e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++V  l+   g+e+++ +++ ++++ i+ + +l+ k+  +++++ +++ l+a+ ++ ++l++ +
+  sp|Q0K6M4|MURG_RALEH   8 LVMAGGTGGHVFPGLAVAHALREQGWKVVwLGNRTGMEATLvPKHDIPMEFIQFG-GLRGKG-LVTKFLLPLNLLRAFWQSIAALRRVR 94 
+                           789****************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p vv+g+ggy+  +a+  a+l+g p++++Eqn+i+gl+nk+l++ a++vl
+  sp|Q0K6M4|MURG_RALEH  95 PSVVLGMGGYITFPAGMMASLLGRPLVLHEQNSIAGLANKVLAKVADRVL 144
+                           ***********************************************997 PP
+
+>> sp|Q5WY98|MURG_LEGPL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.0   0.0   2.6e-30   1.5e-27       1     137 [.       5     141 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.0 bits;  conditional E-value: 2.6e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +v++ggGT+G+v P +Al +e++++G++V+ +++  g+e++  e   ++++ + ++ kl++++ slk+l+++++   ++ ++  ++ + 
+  sp|Q5WY98|MURG_LEGPL   5 IVFTGGGTAGHVTPNIALIKEFRKEGWNVEyIGSVSGIEKEMiEPLDIPFHGVSSG-KLRRYF-SLKNLLDPFKIVLGIIQSSLLFYKI 91 
+                           79****************************************9*************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kpdvv++ gg+va +++++a+l++ip++ +E++  pgl+n+l+  ++n++
+  sp|Q5WY98|MURG_LEGPL  92 KPDVVFSKGGFVAFPVVVGAWLNRIPVVAHESDMSPGLANRLSFPFVNKI 141
+                           *****************************************999988886 PP
+
+>> sp|A0RIN0|MURG3_BACAH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.5   0.0   3.9e-30   2.2e-27       1     138 [.       4     141 ..       4     142 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 100.5 bits;  conditional E-value: 3.9e-30
+                            EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                            +v++ggG++G+v P +A+   L++  +++  ++++ g+e+++ e++ +++++i+++ kl++++  lk++k+++ + k++ +a   +++
+  sp|A0RIN0|MURG3_BACAH   4 IVFTGGGSAGHVTPNLAIIPYLKEDNWDISyIGSHQGIEKTIiEKEDIPYYSIASG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 
+                            79******************************************************.******.************************ PP
+
+                            HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             kpdv+++ gg+v+++++i+ +l+++p+ ++E++  pgl+nk+  r+a +++
+  sp|A0RIN0|MURG3_BACAH  90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141
+                            ***********************************************99987 PP
+
+>> sp|Q7W4B4|MURG_BORPA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.9   0.4   2.9e-30   1.7e-27       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 100.9 bits;  conditional E-value: 2.9e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G++ P +A+a+ L++rG++V  l+ p+++e ++ + +g+e vp+  + +++ ++   + lk ++   +a  +a + l++ 
+  sp|Q7W4B4|MURG_BORPA   6 ILIMAGGTGGHIMPGLAVAEVLRERGWRVLwLGNPDKMEGRLvPPRGIELVPLRFQ-GVRGRG-AAALLKLPFLLARACAQAWRRLADI 92 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +pdvv+g+ggyva + ++ a+l++ p++v+Eqn+++g +n++l+r a +vl
+  sp|Q7W4B4|MURG_BORPA  93 RPDVVLGMGGYVAFPGGVMAALRRMPLVVHEQNAVAGTANRWLARLARRVL 143
+                           *********************************************999987 PP
+
+>> sp|Q5X6U5|MURG_LEGPA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.0   0.0   2.6e-30   1.5e-27       1     137 [.       5     141 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.0 bits;  conditional E-value: 2.6e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +v++ggGT+G+v P +Al +e++++G++V+ +++  g+e++  e   ++++ + ++ kl++++ slk+l+++++   ++ ++  ++ + 
+  sp|Q5X6U5|MURG_LEGPA   5 IVFTGGGTAGHVTPNIALIKEFRKEGWNVEyIGSVSGIEKEMiEPLDIPFHGVSSG-KLRRYF-SLKNLLDPFKIVLGIIQSSLLFYKI 91 
+                           79****************************************9*************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kpdvv++ gg+va +++++a+l++ip++ +E++  pgl+n+l+  ++n++
+  sp|Q5X6U5|MURG_LEGPA  92 KPDVVFSKGGFVAFPVVVGAWLNRIPVVAHESDMSPGLANRLSFPFVNKI 141
+                           *****************************************999988886 PP
+
+>> sp|Q5ZXC4|MURG_LEGPH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.0   0.0   2.6e-30   1.5e-27       1     137 [.       5     141 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.0 bits;  conditional E-value: 2.6e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +v++ggGT+G+v P +Al +e++++G++V+ +++  g+e++  e   ++++ + ++ kl++++ slk+l+++++   ++ ++  ++ + 
+  sp|Q5ZXC4|MURG_LEGPH   5 IVFTGGGTAGHVTPNIALIKEFRKEGWNVEyIGSVSGIEKEMiEPLDIPFHGVSSG-KLRRYF-SLKNLLDPFKIVLGIIQSSLLFYKI 91 
+                           79****************************************9*************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kpdvv++ gg+va +++++a+l++ip++ +E++  pgl+n+l+  ++n++
+  sp|Q5ZXC4|MURG_LEGPH  92 KPDVVFSKGGFVAFPVVVGAWLNRIPVVAHESDMSPGLANRLSFPFVNKI 141
+                           *****************************************999988886 PP
+
+>> sp|A6M1F0|MURG_CLOB8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.4   0.0     2e-30   1.1e-27       1     136 [.       6     141 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 101.4 bits;  conditional E-value: 2e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggGT+G+v P +Al  +L++++ e++ +++ +g+e+++ ++ ++++  i ++ kl++++  +k+++++++ lk++ +a +il+++
+  sp|A6M1F0|MURG_CLOB8   6 IIMTGGGTAGHVTPNLALVPKLKQKDFEIKyIGSFDGIEKEIiTKNNIPFFGISCG-KLRRYF-DVKNFTDPFKILKGIAQALKILSKE 92 
+                           689*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           kpdv+++ gg+va++++iaa+  +ip++ +E++  pgl+nkl++ ++++
+  sp|A6M1F0|MURG_CLOB8  93 KPDVIFSKGGFVAVPVVIAASIKKIPVVAHESDMTPGLANKLSAPFCDK 141
+                           ******************************************9988876 PP
+
+>> sp|B8D7B9|MURG_BUCAT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.4   0.0     2e-30   1.1e-27       1     135 [.       6     140 ..       6     144 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 101.4 bits;  conditional E-value: 2e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gG++G+v+P + +ar L ++G+ V  ++t++ +e+++ +++g++++ i ++ +l++     + + ++   l+a+ ++k+i+k +
+  sp|B8D7B9|MURG_BUCAT   6 IIIMAGGSGGHVFPGLTIARYLIEKGWLVNwIGTKNSIESRIiPKYGIKIHYISIK-GLRNTS-LKNLIISPIYILRAYYAVKKIIKTW 92 
+                           6899****************************************************.****66.666778999999************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +pd+v+g+ggyv+++ ++a++ ++ip+ ++Eqn i+g++nk+l+r  +
+  sp|B8D7B9|MURG_BUCAT  93 SPDIVLGMGGYVSGPGGVASWNCNIPLLLHEQNKIAGITNKWLSRIST 140
+                           *******************************************99766 PP
+
+>> sp|P57311|MURG_BUCAI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.4   0.0     2e-30   1.1e-27       1     135 [.       6     140 ..       6     144 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 101.4 bits;  conditional E-value: 2e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gG++G+v+P + +ar L ++G+ V  ++t++ +e+++ +++g++++ i ++ +l++     + + ++   l+a+ ++k+i+k +
+  sp|P57311|MURG_BUCAI   6 IIIMAGGSGGHVFPGLTIARYLIEKGWLVNwIGTKNSIESRIiPKYGIKIHYISIK-GLRNTS-LKNLIISPIYILRAYYAVKKIIKTW 92 
+                           6899****************************************************.****66.666778999999************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +pd+v+g+ggyv+++ ++a++ ++ip+ ++Eqn i+g++nk+l+r  +
+  sp|P57311|MURG_BUCAI  93 SPDIVLGMGGYVSGPGGVASWNCNIPLLLHEQNKIAGITNKWLSRIST 140
+                           *******************************************99766 PP
+
+>> sp|Q7VUQ3|MURG_BORPE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.6   0.4   3.6e-30     2e-27       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 100.6 bits;  conditional E-value: 3.6e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G++ P +A+a+ L++rG++V  l+ p+++e ++ + +g+e vp+  + +++ ++   + lk ++   +a  +a + l++ 
+  sp|Q7VUQ3|MURG_BORPE   6 ILIMAGGTGGHIMPGLAVAEVLRERGWRVLwLGNPDKMEGRLvPPRGIELVPLRFQ-GVRGRG-AAALLKLPFLLARACAQAWRRLADI 92 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +pdvv+g+ggyva + ++ a+l++ p++v+Eqn+++g +n++l+r a +vl
+  sp|Q7VUQ3|MURG_BORPE  93 RPDVVLGMGGYVAFPGGVMAALRRTPLVVHEQNAVAGTANRWLARLARRVL 143
+                           *********************************************999987 PP
+
+>> sp|Q7WFS2|MURG_BORBR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.6   0.4   3.6e-30     2e-27       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 100.6 bits;  conditional E-value: 3.6e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G++ P +A+a+ L++rG++V  l+ p+++e ++ + +g+e vp+  + +++ ++   + lk ++   +a  +a + l++ 
+  sp|Q7WFS2|MURG_BORBR   6 ILIMAGGTGGHIMPGLAVAEVLRERGWRVLwLGNPDKMEGRLvPPRGIELVPLRFQ-GVRGRG-AAALLKLPFLLARACAQAWRRLADI 92 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +pdvv+g+ggyva + ++ a+l++ p++v+Eqn+++g +n++l+r a +vl
+  sp|Q7WFS2|MURG_BORBR  93 RPDVVLGMGGYVAFPGGVMAALRRTPLVVHEQNAVAGTANRWLARLARRVL 143
+                           *********************************************999987 PP
+
+>> sp|B2SYX6|MURG_BURPP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   99.8   0.3   6.3e-30   3.6e-27       2     139 .]      10     147 ..       9     147 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 99.8 bits;  conditional E-value: 6.3e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a+  q+ G++V  l+ p g+e+++ +++g++++ +  + +l+ k+ + ++l+ + + l+a  ++  +l++ k
+  sp|B2SYX6|MURG_BURPP  10 MVMAGGTGGHVFPGLAVAHLMQAWGWKVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-MKTKLMLPVNLLRACTQSLSVLRRVK 96 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|B2SYX6|MURG_BURPP  97 PDVVLGMGGYITFPAGLMTALSGRPLVLHEQNSIAGLANKVLAKVAKRVLV 147
+                           ***********************************************9986 PP
+
+>> sp|B0B8Y7|MURG_CHLT2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.9   0.0   2.9e-30   1.6e-27       1     137 [.       7     141 ..       7     143 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 100.9 bits;  conditional E-value: 2.9e-30
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G++ Pa+A  +++ ++++eV l   +gl++f+   ++++++ i+++   + +l+ +++++ + + +k++ +a + +++++
+  sp|B0B8Y7|MURG_CHLT2   7 IVLAVGGTGGHIIPALAARETFIHEDIEV-LLLGKGLAHFLgDDSEIAYCDIPSG--SPFSLRVNRMFSGAKQLYKGYVAALQKIRDFT 92 
+                           79***************************.99***********************..44444777777777777777************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pd+ +gfg+y++++a++a+++++ip++++Eqn +pg+vnkl++r+a+gv
+  sp|B0B8Y7|MURG_CHLT2  93 PDLAIGFGSYHSLPAMLASIRSRIPLFLHEQNIVPGKVNKLFSRFAKGV 141
+                           ***********************************************98 PP
+
+>> sp|B0BAL6|MURG_CHLTB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.9   0.0   2.9e-30   1.6e-27       1     137 [.       7     141 ..       7     143 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 100.9 bits;  conditional E-value: 2.9e-30
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G++ Pa+A  +++ ++++eV l   +gl++f+   ++++++ i+++   + +l+ +++++ + + +k++ +a + +++++
+  sp|B0BAL6|MURG_CHLTB   7 IVLAVGGTGGHIIPALAARETFIHEDIEV-LLLGKGLAHFLgDDSEIAYCDIPSG--SPFSLRVNRMFSGAKQLYKGYVAALQKIRDFT 92 
+                           79***************************.99***********************..44444777777777777777************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pd+ +gfg+y++++a++a+++++ip++++Eqn +pg+vnkl++r+a+gv
+  sp|B0BAL6|MURG_CHLTB  93 PDLAIGFGSYHSLPAMLASIRSRIPLFLHEQNIVPGKVNKLFSRFAKGV 141
+                           ***********************************************98 PP
+
+>> sp|B8D914|MURG_BUCA5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  101.0   0.0   2.6e-30   1.5e-27       1     135 [.       6     140 ..       6     144 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 101.0 bits;  conditional E-value: 2.6e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gG++G+v+P + +ar L ++G+ V  ++t++ +e+++ +++g++++ i ++ +l++     + + ++   l+a+ ++k+i+k +
+  sp|B8D914|MURG_BUCA5   6 IIIMAGGSGGHVFPGLTIARYLIEKGWLVNwIGTKNSIESRIiPTYGIKIHYISIK-GLRNTS-LKNLIISPIYILRAYYAVKKIIKTW 92 
+                           6899****************************************************.****66.666778999999************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +pd+v+g+ggyv+++ ++a++ ++ip+ ++Eqn i+g++nk+l+r  +
+  sp|B8D914|MURG_BUCA5  93 SPDIVLGMGGYVSGPGGVASWNCNIPLLLHEQNKIAGITNKWLSRIST 140
+                           *******************************************99766 PP
+
+>> sp|Q47AA4|MURG_DECAR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.4   0.3   4.2e-30   2.4e-27       1     138 [.       5     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 100.4 bits;  conditional E-value: 4.2e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+++Pa+A+a++L+++G++V  l+ p+g+e+++ +++g e+v i+    l+ k+  l++l+ + + l+++ +  +++++ 
+  sp|Q47AA4|MURG_DECAR   5 ILVMAGGTGGHIFPALAVAHKLRDAGWRVVwLGNPEGMEARLvPQHGFEMVWIKFS-ALRGKG-ILRKLLLPVNLLRGFWQGLKAIRQV 91 
+                           789*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kp+vv+g+ggy+  + +  a+l g+p++++Eqn+++gl+n++l+  a++++
+  sp|Q47AA4|MURG_DECAR  92 KPNVVLGMGGYITFPGGMMAALTGVPLVLHEQNSVAGLANRVLASVADRIV 142
+                           *********************************************999986 PP
+
+>> sp|A4JB94|MURG_BURVG  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.4   0.3   4.1e-30   2.3e-27       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 100.4 bits;  conditional E-value: 4.1e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++  ++G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l+ +++ l+a  ++  +l++ +
+  sp|A4JB94|MURG_BURVG   9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPFNLLRACWQSLGALRRVR 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ ++l+g p++++Eqn+i+gl+nk+l+++a++vlv
+  sp|A4JB94|MURG_BURVG  96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLANKVLAKFAKRVLV 146
+                           ************************************************986 PP
+
+>> sp|Q2Y638|MURG_NITMU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.4   0.1     4e-30   2.2e-27       1     138 [.       5     142 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 100.4 bits;  conditional E-value: 4e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+P +A+a+ L+++G+++  l+t+ g+e+++ +++g + ++i    +l+ k    + l+ +a+ l a+ ++ +++++ 
+  sp|Q2Y638|MURG_NITMU   5 ILIMAGGTGGHVFPGLAVAEYLKAAGWRIVwLGTEGGMETTLaRQQGHALETIRFS-GLRGKN-VRTWLLLPARLLLAFWQSARVIRKV 91 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +pdvv+g+ggy a + +  a+l+  p+ ++Eqn+ipgl+n++l+r a++vl
+  sp|Q2Y638|MURG_NITMU  92 RPDVVLGMGGYPAFPGGMMASLLARPLLIHEQNSIPGLANRILSRLADRVL 142
+                           ************************************************997 PP
+
+>> sp|B2JHG0|MURG_BURP8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.2   0.2   4.6e-30   2.6e-27       2     139 .]      10     147 ..       9     147 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 100.2 bits;  conditional E-value: 4.6e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a+  q+ G++V  l+ p+g+e+++ +++g++++ ++ + +l+ k+ + ++l+ + + l+a  ++  +l++ k
+  sp|B2JHG0|MURG_BURP8  10 MVMAGGTGGHVFPGLAVAHLMQAWGWRVVwLGNPNGMEATLvPKHGIPMEYVQFG-GLRGKG-MKTKLMLPVNLLRACMQSLSVLRRVK 96 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a+  ++l+g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|B2JHG0|MURG_BURP8  97 PDVVLGMGGYITFPAGMMTALSGTPLVLHEQNSIAGLANKVLAKLAKRVLV 147
+                           ***********************************************9986 PP
+
+>> sp|O84766|MURG_CHLTR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.2   0.0   4.6e-30   2.6e-27       1     137 [.       7     141 ..       7     143 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 100.2 bits;  conditional E-value: 4.6e-30
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G++ Pa+A  +++ ++++eV l   +gl++f+   ++++++ i+++   + +l+ +++++ + + +k++ +a + +++++
+  sp|O84766|MURG_CHLTR   7 IVLAVGGTGGHIIPALAARETFIHEDIEV-LLLGKGLAHFLgDDSEVAYCDIPSG--SPFSLRVNRMFSGAKQLYKGYVAALQKIRDFT 92 
+                           79***************************.99***********************..44444777777777777777************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pd+ +gfg+y++++a++a+++++ip++++Eqn +pg+vnkl++r+a+gv
+  sp|O84766|MURG_CHLTR  93 PDLAIGFGSYHSLPAMLASIRSRIPLFLHEQNIVPGKVNKLFSRFAKGV 141
+                           ***********************************************98 PP
+
+>> sp|Q3KKT1|MURG_CHLTA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.2   0.0   4.6e-30   2.6e-27       1     137 [.       7     141 ..       7     143 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 100.2 bits;  conditional E-value: 4.6e-30
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G++ Pa+A  +++ ++++eV l   +gl++f+   ++++++ i+++   + +l+ +++++ + + +k++ +a + +++++
+  sp|Q3KKT1|MURG_CHLTA   7 IVLAVGGTGGHIIPALAARETFIHEDIEV-LLLGKGLAHFLgDDSEVAYCDIPSG--SPFSLRVNRMFSGAKQLYKGYVAALQKIRDFT 92 
+                           79***************************.99***********************..44444777777777777777************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pd+ +gfg+y++++a++a+++++ip++++Eqn +pg+vnkl++r+a+gv
+  sp|Q3KKT1|MURG_CHLTA  93 PDLAIGFGSYHSLPAMLASIRSRIPLFLHEQNIVPGKVNKLFSRFAKGV 141
+                           ***********************************************98 PP
+
+>> sp|A1AU61|MURG_PELPD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   99.8   0.0   6.2e-30   3.5e-27       2     138 ..       4     142 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 99.8 bits;  conditional E-value: 6.2e-30
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++P +A+a+e+  r++      ++t++g+e++  ++ag + + i +  + + k+  l++l+ +a  ++++r++ ++l +
+  sp|A1AU61|MURG_PELPD   4 IIAGGGTGGHLFPGIAVAEEFLSRDPANQvlfVGTERGIEARAvPAAGFPLELISAA-GIRGKG-GLGKLRGAAMMFNGYRQSCRLLDR 90 
+                           68***********************876666**************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++pd+v+g+ggy++++ l+aa+ +++p +++Eqn++pg++n+ll+r+a++++
+  sp|A1AU61|MURG_PELPD  91 FRPDAVLGVGGYASLPMLLAARTRQVPSFIHEQNAVPGMTNRLLSRFADRIF 142
+                           *************************************************997 PP
+
+>> sp|Q2LR48|MURG_SYNAS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   99.8   0.0   6.3e-30   3.6e-27       1     138 [.       5     144 ..       5     145 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 99.8 bits;  conditional E-value: 6.3e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v++aggGT+G+++P vA+a+eL rr+ e r   ++t++g+e++v +  g   + ++++ + + ++  ++  + l++   +l ++++i++
+  sp|Q2LR48|MURG_SYNAS   5 VIIAGGGTGGHLFPGVAIAEELLRRDRENRvlfVGTKRGIEKKVlKDLGFRLKLLNVE-GIKGRG-VMRSSLALLKLPGSLMQSMKIIR 91 
+                           689**********************9999999************9999*999999999.555555.555555555555566******** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +++pdvv+g+ggy++++a+ aa l gi++ +aEqn+ipgl+n++l r++++v+
+  sp|Q2LR48|MURG_SYNAS  92 DFRPDVVIGVGGYASGPAVMAAHLMGIKTAIAEQNSIPGLTNRILGRFVDRVF 144
+                           **************************************************997 PP
+
+>> sp|Q2G995|MURG_NOVAD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   99.9   0.6   5.6e-30   3.2e-27       2     138 ..       9     143 ..       8     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 99.9 bits;  conditional E-value: 5.6e-30
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           vla+gGT+G++ Pa Ala+eL rrGh+V l+t ++ ++   + + l+a+ ++++ +l +  + ++ +k l + ++++  a +++++++p
+  sp|Q2G995|MURG_NOVAD   9 VLAAGGTGGHLIPAFALAVELDRRGHHVALVTDERGAKIPgKPDFLPAHVLPAG-RLGK--NPVALFKGLRAIWQGRAMALRLFESFEP 94 
+                           8*****************************************************.9998..789999999999999************* PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             v+gfggy a++al+aa +a+ip++++Eqn++ g vn+ll++r++ ++
+  sp|Q2G995|MURG_NOVAD  95 SCVIGFGGYPALPALLAAHAARIPTVIHEQNAVLGRVNRLLAKRVDAIA 143
+                           *********************************************9875 PP
+
+>> sp|A5EY03|MURG_DICNV  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   99.5   0.3   7.5e-30   4.2e-27       2     138 ..       9     145 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 99.5 bits;  conditional E-value: 7.5e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+ar+  ++G  ++ l+ + g+e +  +eag  ++ i++  +l+ ++  ++ lk ++  ++a+++ak+i++  +
+  sp|A5EY03|MURG_DICNV   9 LFMAGGTGGHVYPALAVARAAAEQGSIIHwLGNQSGFEGKKvPEAGFIFHDIAVY-GLRGNG-VIGWLKAPFMIGRAVFQAKKIMQHIQ 95 
+                           799**********************9999*********9888*************.*****9.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+gg+++++ +iaa+ ++ip+ ++Eqn+++gl+n ll+r an++l
+  sp|A5EY03|MURG_DICNV  96 PDVVIGMGGFASGPGGIAAKILNIPLLIHEQNAVMGLTNALLSRVANTIL 145
+                           **********************************************9986 PP
+
+>> sp|Q8FNU0|MURG_COREF  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  100.6   0.8   3.6e-30     2e-27       1     130 [.      10     140 ..      10     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 100.6 bits;  conditional E-value: 3.6e-30
+                           EEEE-------HHHHHHHHHHHHH.---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqr.rGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           vv+aggGT+G++ePa+A+a++L++ +G  V+ l+t +gle+ + + +g + + i+p  ++++    l+ +k ++++ k+lr+a+++l++
+  sp|Q8FNU0|MURG_COREF  10 VVVAGGGTAGHIEPALAVAEALRDgYGATVTaLGTARGLETSLvPDRGFDLRLIEPV-PVPRTP-NLDLVKLPFRVAKSLRQARQVLRD 96 
+                           79********************9769*******************************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                             +++vvgfggyv+++a++aa+++gip +v+E+n+++g++nkl 
+  sp|Q8FNU0|MURG_COREF  97 TGAHAVVGFGGYVSAPAYLAARSLGIPFFVHEANARAGMANKLG 140
+                           *****************************************986 PP
+
+>> sp|A9AI96|MURG_BURM1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   99.4   0.6   8.1e-30   4.5e-27       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 99.4 bits;  conditional E-value: 8.1e-30
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++  ++G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l  +++ l+a  ++ ++l++ +
+  sp|A9AI96|MURG_BURM1   9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLALPFNLLRACAQSLAALRRVR 95 
+                           5899***************************************************.******.99************************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|A9AI96|MURG_BURM1  96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLANKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|Q21SW9|MURG_RHOFD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   99.7   0.1   6.9e-30   3.9e-27       2     138 ..      36     177 ..      35     178 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 99.7 bits;  conditional E-value: 6.9e-30
+                           EEE-------HHHHHHHHHHHHH---EEE......EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr......latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 
+                           ++++gGT+G+++P +Ala++L++rG++V+       a++p +e+++ + +g ++++i+   +++ k+   + ++ +++ l+a  ++ ++
+  sp|Q21SW9|MURG_RHOFD  36 LIMAGGTGGHIFPGLALAHALRERGWRVHwlggagTASQPSMESQLvPPQGFAFESIDFS-GVRGKG-LGTLVRLPWRLLRACWQSVAL 122
+                           689***************************9999999***********************.******.********************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           l++ +pdvv+g ggy+ ++a++ + l+g +++++Eqn+++g++nk+l+r+a++v+
+  sp|Q21SW9|MURG_RHOFD 123 LRRVQPDVVLGLGGYITLPAGLMSVLLGKALILHEQNSVAGMANKVLARFATRVF 177
+                           *****************************************************97 PP
+
+>> sp|B5YFT4|MURG_THEYD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   99.3   0.0   8.8e-30   4.9e-27       1     138 [.       3     142 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 99.3 bits;  conditional E-value: 8.8e-30
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v++aggGT+G+++P +Ala+ L  + +e     ++tp+gle++v +++g+e   i ++ ++  k  ++++ k+l + lk+++++k i+ 
+  sp|B5YFT4|MURG_THEYD   3 VIIAGGGTGGHLFPGIALAESLIGKYPEAQiifVGTPKGLEAKViPKTGYELSFISIQ-GFVGKS-FSEKAKSLKSLLKSMFESKNIIN 89 
+                           689**********************9999999**************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++ pd+v+g+ggy++ ++++aa l +ip+++ Eqn +pgl+nkll + a  v+
+  sp|B5YFT4|MURG_THEYD  90 SFAPDIVFGVGGYASFPVVLAAFLKKIPTIILEQNTVPGLANKLLGKIASAVA 142
+                           *********************************************99998876 PP
+
+>> sp|A7KAK6|ATG26_PICAN  Sterol 3-beta-glucosyltransferase OS=Pichia angusta GN=ATG26 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.8   0.0   1.2e-29     7e-27       1     138 [.     790     924 ..     790     925 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 98.8 bits;  conditional E-value: 1.2e-29
+                            EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.vklwakleslktlkelaeglkalrkakeilkea 87 
+                            ++l+++G+rGdv+P++Al+++L+++Gh+Vr++t+ ++e++++++g+ + +i++d  +l+a   +++ ++  +++ k+ ++ ++++ ++
+  sp|A7KAK6|ATG26_PICAN 790 FTLLTIGSRGDVQPYIALGKALMKEGHQVRIVTHAEFEPWIKKHGIRFASIAGDpSELMA--LMVTHPTINYNFIKEAKSKFRSWIDD 875
+                            789***************************************************555555..45666555555555555555556555 PP
+
+                            HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                               +v ++  ++++++li+++++   +++aE+++ip+++++++p+++++++
+  sp|A7KAK6|ATG26_PICAN 876 L--LVTSWKACQDTDILIESPSSICGIHIAEKLQIPYFRAFTMPWTRTRAY 924
+                            5..344566679***********************************9987 PP
+
+>> sp|Q46WZ4|MURG_RALEJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.9   0.1   1.2e-29   6.9e-27       2     138 ..       8     144 ..       7     145 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 98.9 bits;  conditional E-value: 1.2e-29
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++L+++G++V  l+   g+e+++ +++ ++++ i+ + +l+ k+  +++++ +++ l+a+ ++  +l++ +
+  sp|Q46WZ4|MURG_RALEJ   8 LVMAGGTGGHVFPGLAVAHALREQGWKVVwLGNRTGMEATLvPKHDIPMEFIQFG-GLRGKG-LVTKFLLPLNLLRAFWQSLGALRRVR 94 
+                           789****************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p vv+g+ggy+  +a+  a+l+g p++++Eqn+i+gl+nk+l++ a++vl
+  sp|Q46WZ4|MURG_RALEJ  95 PSVVLGMGGYITFPAGMMASLLGRPLVLHEQNSIAGLANKVLAKVADRVL 144
+                           ***********************************************997 PP
+
+>> sp|Q13TZ2|MURG_BURXL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.1   0.3     2e-29   1.1e-26       2     139 .]      10     147 ..       9     147 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 98.1 bits;  conditional E-value: 2e-29
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a+  q+ G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l+ +++ l+a  ++  +l++ k
+  sp|Q13TZ2|MURG_BURXL  10 MVMAGGTGGHVFPGLAVAHLMQAWGWKVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLMLPLNLLRACTQSLSVLRRVK 96 
+                           5899***************************************************.******.99999999****************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|Q13TZ2|MURG_BURXL  97 PDVVLGMGGYITFPAGLMTALSGRPLVLHEQNSIAGLANKVLAKVAKRVLV 147
+                           ***********************************************9986 PP
+
+>> sp|C6DZK6|MURG_GEOSM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.2   0.0   1.9e-29   1.1e-26       2     139 .]       4     143 ..       3     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 98.2 bits;  conditional E-value: 1.9e-29
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++P +A+a+e+ +r +e +   ++t++g+e+++ ++ g++   i +  + +  + ++k+++++ + l ++ ++++ilke
+  sp|C6DZK6|MURG_GEOSM   4 IIAGGGTGGHLFPGIAIADEFLARSPENEvlfVGTERGIEARLlPKLGYKLALISAS-GMKGMG-TIKKIMSAGRLLYGYSQSRKILKE 90 
+                           68**********************9887777**************************.999988.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           ++pd+v+g+ggy+++++++aa+  g+ ++++Eqn+ pgl+nk+l r ++gv++
+  sp|C6DZK6|MURG_GEOSM  91 FRPDLVLGVGGYASAPIVLAARGMGVRRFIHEQNAFPGLTNKVLGRIVDGVFI 143
+                           *************************************************9985 PP
+
+>> sp|A8GVJ7|MURG_RICB8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.7   0.0   1.4e-29   7.7e-27       1     138 [.       4     135 ..       4     136 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 98.7 bits;  conditional E-value: 1.4e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vl++gGT+G+++PavAl++eL +r +eV+++t  ++e+ +   agl ++ i+++       +  + l+ l     a++ka ++l + +
+  sp|A8GVJ7|MURG_RICB8   4 IVLVAGGTGGHFFPAVALGEELIKRKYEVHFITDLRCEKYInHDAGLIFHVIDLK-------RPKNILLFLPLLSLAIFKAIKLLFSLS 85 
+                           79*****************************************************.......34444444444445899********** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p +vvgfggy  ++ ++aa+++++p++++Eqn+  g+vn++++ +a++++
+  sp|A8GVJ7|MURG_RICB8  86 PSAVVGFGGYPVVASMFAAIFLRVPIVIHEQNSYLGKVNRFFANFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|Q1RI55|MURG_RICBR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.7   0.0   1.4e-29   7.7e-27       1     138 [.       4     135 ..       4     136 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 98.7 bits;  conditional E-value: 1.4e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vl++gGT+G+++PavAl++eL +r +eV+++t  ++e+ +   agl ++ i+++       +  + l+ l     a++ka ++l + +
+  sp|Q1RI55|MURG_RICBR   4 IVLVAGGTGGHFFPAVALGEELIKRKYEVHFITDLRCEKYInHDAGLIFHVIDLK-------RPKNILLFLPLLSLAIFKAIKLLFSLS 85 
+                           79*****************************************************.......34444444444445899********** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p +vvgfggy  ++ ++aa+++++p++++Eqn+  g+vn++++ +a++++
+  sp|Q1RI55|MURG_RICBR  86 PSAVVGFGGYPVVASMFAAIFLRVPIVIHEQNSYLGKVNRFFANFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|B5ZWJ4|MURG_RHILW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.0   0.7   9.1e-29   5.1e-26       1     137 [.       6     141 ..       6     142 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 96.0 bits;  conditional E-value: 9.1e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 
+                           v+la+gGT+G+v+Pa Ala +L++rG+ V+l+t  + e+     +++++++vp   ig++       + ++  ++l+  + ++r+ak++
+  sp|B5ZWJ4|MURG_RHILW   6 VLLAAGGTGGHVFPAEALAFKLKERGYSVHLVTDSRAERYAgkfPAEEIHVVPsatIGSK-------NPVAVARSLWTLWSGMRAAKKL 87 
+                           79********************************99999887668889999886444444.......366777777777777******* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++ kp +vvgfggy  +++l+aa+++g+p+ ++Eqn+++g +nk+l+ r+ g+
+  sp|B5ZWJ4|MURG_RHILW  88 IQRLKPVIVVGFGGYPTVPPLLAATRLGVPTMIHEQNAVMGRANKALATRVQGI 141
+                           ************************************************999886 PP
+
+>> sp|B0JFZ1|MURG_MICAN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.3   0.0   1.8e-29     1e-26       2     138 ..       9     142 ..       8     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 98.3 bits;  conditional E-value: 1.8e-29
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+++Pa+Ala++L ++++e  l++p++le  +  + ++ ++i+++ +++ +l  lktlk l+++l+a+ +++ ++k+ +++
+  sp|B0JFZ1|MURG_MICAN   9 LIAASGTGGHLFPALALAERLPDYEIEW-LGVPDRLEQSLVPKTYPLHTIPIE-GFQTRL-GLKTLKILFSQLRAIWQVRSLIKKRQIA 94 
+                           799**********************776.***********7788888889999.999999.**************************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +v+ +ggy+a++ ++aa+la+ip++++E+n ipg+v+k+l r++++v+
+  sp|B0JFZ1|MURG_MICAN  95 AVFTTGGYIAGPTILAARLANIPVILHESNYIPGKVTKVLGRWCDTVA 142
+                           ********************************************9986 PP
+
+>> sp|Q31KS7|MURG_SYNE7  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.0   0.1   2.3e-29   1.3e-26       2     138 ..       9     141 ..       8     142 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 98.0 bits;  conditional E-value: 2.3e-29
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+v+Pa+A+a++L ++ ++  l++p++le+++  + ++ ++i ++ +++ ++  l  ++++++   a++k++++lk+++++
+  sp|Q31KS7|MURG_SYNE7   9 LFAASGTGGHVFPALAVAEALPEAKIDW-LGVPDRLETQLVGDRYPLHTIRVG-GFQGSW--LLRPLTALRLIGAIFKVRRLLKRQQIE 93 
+                           79***********************888.************************.99**77..666777777779*************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +v+ +ggy+a++a+ aa+++gip++++E+n++pg++++ll+r++ +v+
+  sp|Q31KS7|MURG_SYNE7  94 AVFTTGGYIAGPAIAAAWSLGIPVVLHESNALPGKTTRLLSRFCRRVA 141
+                           ********************************************9986 PP
+
+>> sp|Q5N140|MURG_SYNP6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.9   0.1   2.4e-29   1.3e-26       2     138 ..      15     147 ..      14     148 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 97.9 bits;  conditional E-value: 2.4e-29
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+v+Pa+A+a++L ++ ++  l++p++le+++  + ++ ++i ++ +++ ++  l  ++++++   a++k++++lk+++++
+  sp|Q5N140|MURG_SYNP6  15 LFAASGTGGHVFPALAVAEALPEAKIDW-LGVPDRLETQLVGDRYPLHTIRVG-GFQGSW--LLRPLTALRLIGAIFKVRRLLKRQQIE 99 
+                           79***********************888.************************.99**77..666777777779*************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +v+ +ggy+a++a+ aa+++gip++++E+n++pg++++ll+r++ +v+
+  sp|Q5N140|MURG_SYNP6 100 AVFTTGGYIAGPAIAAAWSLGIPVVLHESNALPGKTTRLLSRFCRRVA 147
+                           ********************************************9986 PP
+
+>> sp|Q14I26|MURG_FRAT1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.6   0.0   2.9e-29   1.6e-26       1     137 [.       8     143 ..       8     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 97.6 bits;  conditional E-value: 2.9e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+a+ L++   +V+ ++tp+++e+ +  e  ++++  i++  ++++k+  +k+++ +++    + k++ +lk+
+  sp|Q14I26|MURG_FRAT1   8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNNMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 
+                           689***************************************655556666..9999.99****.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            k+d+v+gfggyv++++++aa+  +ip++++Eqn+  gl+n++l+++a+++
+  sp|Q14I26|MURG_FRAT1  93 LKADLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143
+                           ***********************************************9986 PP
+
+>> sp|Q5NGM4|MURG_FRATT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.6   0.0   2.9e-29   1.6e-26       1     137 [.       8     143 ..       8     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 97.6 bits;  conditional E-value: 2.9e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+a+ L++   +V+ ++tp+++e+ +  e  ++++  i++  ++++k+  +k+++ +++    + k++ +lk+
+  sp|Q5NGM4|MURG_FRATT   8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNNMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 
+                           689***************************************655556666..9999.99****.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            k+d+v+gfggyv++++++aa+  +ip++++Eqn+  gl+n++l+++a+++
+  sp|Q5NGM4|MURG_FRATT  93 LKADLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143
+                           ***********************************************9986 PP
+
+>> sp|Q493Q1|MURG_BLOPB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.8   0.0   2.6e-29   1.5e-26       1     138 [.       7     144 ..       7     145 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 97.8 bits;  conditional E-value: 2.6e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gG++G+v+P +++a+ L + G++V  l+t +++e+++ +++g++++ i ++ +++ +  ++k +++l+    a+ +a++i+k +
+  sp|Q493Q1|MURG_BLOPB   7 IMIVAGGSGGHVFPGLSVAHYLINHGYQVVwLGTADRIESKLvPQYGIDIKFIRIN-GWNGEKLHIKCIMPLFIC-LAIYQARKIIKYW 93 
+                           6789****************************************************.777666689999999987.9************ PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpd+v+g+ggyv+++ ++aa+ +g+p++++Eqn i gl+n++l+ + ++vl
+  sp|Q493Q1|MURG_BLOPB  94 KPDIVLGMGGYVSGPGGLAAWTCGVPLIIHEQNRIIGLTNRYLSIFSKKVL 144
+                           *******************************************98888775 PP
+
+>> sp|Q92I58|MURG_RICCN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.2   0.0   1.9e-29   1.1e-26       1     138 [.       4     135 ..       4     136 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 98.2 bits;  conditional E-value: 1.9e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++PavAl++eL +rG+eV+++t  +++  +    ++ ++ ++++       +s + ++ l +   a+ ka ++l + k
+  sp|Q92I58|MURG_RICCN   4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 
+                           689**************************************999***********.......688899999999999************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p v+vgfggy   ++++aa+++++p++++Eqn+  g+vnk+++ +a++++
+  sp|Q92I58|MURG_RICCN  86 PSVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|C3PND5|MURG_RICAE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.2   0.0   1.9e-29   1.1e-26       1     138 [.       4     135 ..       4     136 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 98.2 bits;  conditional E-value: 1.9e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++PavAl++eL +rG+eV+++t  +++  +    ++ ++ ++++       +s + ++ l +   a+ ka ++l + k
+  sp|C3PND5|MURG_RICAE   4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 
+                           689**************************************999***********.......688899999999999************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p v+vgfggy   ++++aa+++++p++++Eqn+  g+vnk+++ +a++++
+  sp|C3PND5|MURG_RICAE  86 PSVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|C4K2A6|MURG_RICPU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.2   0.0   1.9e-29   1.1e-26       1     138 [.       4     135 ..       4     136 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 98.2 bits;  conditional E-value: 1.9e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++PavAl++eL +rG+eV+++t  +++  +    ++ ++ ++++       +s + ++ l +   a+ ka ++l + k
+  sp|C4K2A6|MURG_RICPU   4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 
+                           689**************************************999***********.......688899999999999************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p v+vgfggy   ++++aa+++++p++++Eqn+  g+vnk+++ +a++++
+  sp|C4K2A6|MURG_RICPU  86 PSVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|B2S1A8|MURG_BORHD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.3   0.0   1.8e-29     1e-26       1     139 []       7     148 ..       7     148 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 98.3 bits;  conditional E-value: 1.8e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                           + ++ggGT+G+v+P +A+  +L++ + +++   l+ +  +e+ +  e + +++ +i+++ kl++++ sl+++++++++  ++ k+++i+
+  sp|B2S1A8|MURG_BORHD   7 IFFTGGGTGGHVFPGIAIISKLKELDTNIEffwLGQKGSMEDNIikEHEYIKFIAIPSG-KLRRYF-SLQNFTDVFKVIFGIIKSFFII 93 
+                           679******************************************777889********.******.********************** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           k++kp++++++gg+v+ +++iaa+l++++ + +E +  pgl++k+++++a ++++
+  sp|B2S1A8|MURG_BORHD  94 KKYKPQIIYATGGFVSSPPIIAASLLRVKSITHEMDLDPGLATKINSKFASKIHI 148
+                           **************************************************99985 PP
+
+>> sp|A8GRZ6|MURG_RICRS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.2   0.0   1.9e-29   1.1e-26       1     138 [.       4     135 ..       4     136 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 98.2 bits;  conditional E-value: 1.9e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++PavAl++eL +rG+eV+++t  +++  +    ++ ++ ++++       +s + ++ l +   a+ ka ++l + k
+  sp|A8GRZ6|MURG_RICRS   4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 
+                           689**************************************999***********.......688899999999999************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p v+vgfggy   ++++aa+++++p++++Eqn+  g+vnk+++ +a++++
+  sp|A8GRZ6|MURG_RICRS  86 PSVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|B0BXF6|MURG_RICRO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.2   0.0   1.9e-29   1.1e-26       1     138 [.       4     135 ..       4     136 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 98.2 bits;  conditional E-value: 1.9e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++PavAl++eL +rG+eV+++t  +++  +    ++ ++ ++++       +s + ++ l +   a+ ka ++l + k
+  sp|B0BXF6|MURG_RICRO   4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 
+                           689**************************************999***********.......688899999999999************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p v+vgfggy   ++++aa+++++p++++Eqn+  g+vnk+++ +a++++
+  sp|B0BXF6|MURG_RICRO  86 PSVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|Q3SMH3|MURG_THIDA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.8   0.4   2.7e-29   1.5e-26       2     138 ..       9     145 ..       8     146 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 97.8 bits;  conditional E-value: 2.7e-29
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+Pa+A+a++L++rG+ V  l+t  gle++v ++ag+++v +  + +++ k+  +k+l+ +a  l a+ ++  ++ + +
+  sp|Q3SMH3|MURG_THIDA   9 MVMAGGTGGHVYPALAVAETLRERGWSVFwLGTRAGLEARVvPAAGIDMVWVSMG-GVRGKG-LVKKLLLPAMLLVAFAQSLGAILRRR 95 
+                           5899***************************************************.******.9************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggy a + +  a+l++ p++v+Eqn++ gl+n+ll+  a++vl
+  sp|Q3SMH3|MURG_THIDA  96 PDVVLGMGGYTAFPGGMMASLLNRPLVVHEQNSVGGLTNRLLACLADRVL 145
+                           *****************************************999998886 PP
+
+>> sp|Q21MG9|MURG_SACD2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.6   0.7   3.1e-29   1.7e-26       1     138 [.      32     175 ..      32     176 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 97.6 bits;  conditional E-value: 3.1e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-......--EEEE----S------.-HHHCCSHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea......gleavpigpdvklwakleslktlkelaeglkalrkak 81 
+                           vv+++gGT+G+v+P +A+a++  +rG ++  l++  g+e+++ ++a       +++ +i++  +++ k+  ++ l  ++++lka+++ak
+  sp|Q21MG9|MURG_SACD2  32 VVIMAGGTGGHVYPGLAVAEAMHQRGFNIAwLGSRGGMEKELvAKAseqmgfDIAFSEIEIS-GVRGKG-RMALLAAPFRVLKAIEQAK 118
+                           799****************************9999999988875553333334777779999.******.******************* PP
+
+                           HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +il++ +p++v+g+gg+va++ + aa++++ip++++Eqn+ +g +nk+l r+an  l
+  sp|Q21MG9|MURG_SACD2 119 QILQKLRPALVIGMGGFVAGPGGMAARKLKIPLVIHEQNAAAGTTNKILRRFANLTL 175
+                           *****************************************************9876 PP
+
+>> sp|B1IAM4|MURG_STRPI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.6   0.0   1.2e-28   6.8e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.6 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|B1IAM4|MURG_STRPI   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|B1IAM4|MURG_STRPI  91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|Q04LK0|MURG_STRP2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.6   0.0   1.2e-28   6.8e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.6 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|Q04LK0|MURG_STRP2   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|Q04LK0|MURG_STRP2  91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|Q8DQM1|MURG_STRR6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.6   0.0   1.2e-28   6.8e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.6 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|Q8DQM1|MURG_STRR6   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|Q8DQM1|MURG_STRR6  91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|B2IN77|MURG_STRPS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.6   0.0   1.2e-28   6.8e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.6 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|B2IN77|MURG_STRPS   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|B2IN77|MURG_STRPS  91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|C1CQG5|MURG_STRZT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.6   0.0   1.2e-28   6.8e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.6 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|C1CQG5|MURG_STRZT   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|C1CQG5|MURG_STRZT  91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|C1CD52|MURG_STRZJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.6   0.0   1.2e-28   6.8e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.6 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|C1CD52|MURG_STRZJ   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|C1CD52|MURG_STRZJ  91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|Q634T3|MURG2_BACCZ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.1   0.0   4.3e-29   2.4e-26       1     138 [.       4     141 ..       4     142 .. 0.99
+
+  Alignments for each domain:
+  == domain 1    score: 97.1 bits;  conditional E-value: 4.3e-29
+                            EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                            +v++ggG++G+v P +A+   L++  +++  ++++ g+e+++ e++ + +++i+++ kl++++  lk++k+++ + k++ +a   +++
+  sp|Q634T3|MURG2_BACCZ   4 IVFTGGGSAGHVTPNLAIIPYLKEDNWDISyIGSHQGIEKTIiEKEDILYYSIASG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 
+                            79******************************************************.******.************************ PP
+
+                            HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             kpdv+++ gg+v+++++i+ +l+++p+ ++E++  pgl+nk+  r+a +++
+  sp|Q634T3|MURG2_BACCZ  90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141
+                            ***********************************************99987 PP
+
+>> sp|A1VST6|MURG_POLNA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.5   0.2   3.1e-29   1.7e-26       2     138 ..       8     149 ..       7     150 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 97.5 bits;  conditional E-value: 3.1e-29
+                           EEE-------HHHHHHHHHHHHH---EEE......EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr......latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 
+                           ++++gGT+G+++P +A+a++L++rG++V+       a+ p +e+++ + +g ++++i+   +++ k+  ++  + +++ lka+ ++ ++
+  sp|A1VST6|MURG_POLNA   8 LVMAGGTGGHIFPGLAVAEALRERGWRVHwlggkgSAARPSMESQLvPPRGFSFETIDFS-GVRGKG-PVTLALLPLRLLKAFWQSVQV 94 
+                           689***************************88888899**********************.******.********************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +++ kpdvvvg ggy+a +a+  + l+g p++++Eqn+++g+vnk+l+  a++v+
+  sp|A1VST6|MURG_POLNA  95 IRRVKPDVVVGLGGYIAFPAGMMSVLLGKPLVLHEQNSVAGMVNKVLASVADRVF 149
+                           ***************************************************9997 PP
+
+>> sp|A6UB85|MURG_SINMW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.6   0.8   6.1e-29   3.5e-26       1     136 [.       6     140 ..       6     142 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 96.6 bits;  conditional E-value: 6.1e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 
+                           ++la+gGT+G+++Pa Ala+eL++ G+ V+l+t  + e+f    +++++++v+   ig++       + +k  +++++ + +lr+a+++
+  sp|A6UB85|MURG_SINMW   6 ILLAAGGTGGHLFPAEALAHELKASGYSVHLVTDSRAERFAgrfPADEIHVVAsatIGSK-------NPVKLARSAWKLWTGLRAARRL 87 
+                           79**********************************999998778999999885444444.......599******************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           +++ kp +vvgfggy  +++l+aa+  g+p++++Eqn+++g +nk l+ r+  
+  sp|A6UB85|MURG_SINMW  88 ISRLKPMAVVGFGGYPTVPPLLAATGMGVPTIIHEQNAVMGRANKMLASRVAA 140
+                           ***********************************************999876 PP
+
+>> sp|B9DNZ7|MURG_STACT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.9   0.0   9.8e-29   5.5e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.9 bits;  conditional E-value: 9.8e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l    q+rG+e   +++++g+e++  e++  g+++ pi ++ kl++++ s++++k+++++lk++ +a+++lk
+  sp|B9DNZ7|MURG_STACT   4 IAFTGGGTVGHVSVNLSLIPIAQERGYEAFyVGSKNGIEREMiESQlpGIQYFPISSG-KLRRYI-SVENIKDVFKVLKGVLDARKVLK 90 
+                           79****************************************766566888889****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk++ ++a++++
+  sp|B9DNZ7|MURG_STACT  91 KQKPDLLFSKGGFVSVPVVIAARSLNIPVVIHESDITPGLANKISLKFAKKIY 143
+                           **************************************************997 PP
+
+>> sp|B4E6J2|MURG_BURCJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.0   0.4   4.6e-29   2.6e-26       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 97.0 bits;  conditional E-value: 4.6e-29
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++  ++G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l+ + + l+a  ++  +l++ +
+  sp|B4E6J2|MURG_BURCJ   9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPVNLLRACWQSLGALRRVR 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|B4E6J2|MURG_BURCJ  96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|B1JV78|MURG_BURCC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.0   0.4   4.6e-29   2.6e-26       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 97.0 bits;  conditional E-value: 4.6e-29
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++  ++G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l+ + + l+a  ++  +l++ +
+  sp|B1JV78|MURG_BURCC   9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPVNLLRACWQSLGALRRVR 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|B1JV78|MURG_BURCC  96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|C1C649|MURG_STRP7  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.6   0.0   1.2e-28   6.8e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.6 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|C1C649|MURG_STRP7   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|C1C649|MURG_STRP7  91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|Q2S9Z2|MURG_HAHCH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.8   0.2   5.3e-29     3e-26       1     135 [.       6     140 ..       6     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 96.8 bits;  conditional E-value: 5.3e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A a +L+++G +V  l++  g+ee++   + ++++ i+++ +l+ k+   + l+ + +  +al +a+ +++++
+  sp|Q2S9Z2|MURG_HAHCH   6 FLVMAGGTGGHVYPALASALALREQGANVVwLGARGGMEERIiGRTDIPMRLITIG-GLRGKG-VAALLMAPVNLVRALWQAFSVFRKE 92 
+                           799*****************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           kpd v+g+gg+++++ +i a l g p++++Eqn+i+g++n++l+r a 
+  sp|Q2S9Z2|MURG_HAHCH  93 KPDCVLGMGGFASGPGGIVACLTGTPLVIHEQNAIAGMTNRWLARGAR 140
+                           ******************************************998765 PP
+
+>> sp|B5E2Z9|MURG_STRP4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.5   0.0   1.3e-28   7.6e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.5 bits;  conditional E-value: 1.3e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|B5E2Z9|MURG_STRP4   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVCWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|B5E2Z9|MURG_STRP4  91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|C1CJF3|MURG_STRZP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.5   0.0   1.3e-28   7.6e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.5 bits;  conditional E-value: 1.3e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|C1CJF3|MURG_STRZP   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVCWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|C1CJF3|MURG_STRZP  91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|A9I4V2|MURG_BORPD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.1   0.3   4.4e-29   2.5e-26       1     138 [.       6     143 ..       6     144 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 97.1 bits;  conditional E-value: 4.4e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++gGT+G++ P +A+a+ L++rG++V  l+ p+++e ++ + +g++ vp   + +++ ++   ++lk ++  l+a  +a  +l + 
+  sp|A9I4V2|MURG_BORPD   6 VLIMAGGTGGHIMPGLAVADVLRERGWRVLwLGNPDKMEGRLvPPRGIDLVPMHFQ-GVRGRG-VAAMLKLPFLLLRACSQAWGHLTRV 92 
+                           789*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +pdvv+g+ggyva + +  a+l+g p++v+Eqn+++g +n++l+r a +vl
+  sp|A9I4V2|MURG_BORPD  93 RPDVVLGMGGYVAFPGGMMAALRGLPLVVHEQNAVAGTANRWLARLARRVL 143
+                           *********************************************999987 PP
+
+>> sp|B0RIJ3|MURG_CLAMS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.0   1.4   2.3e-29   1.3e-26       2     137 ..       5     142 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 98.0 bits;  conditional E-value: 2.3e-29
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +laggGT+G+v P++A+a+eL++r++  +   l+t +gle+++ +++g+e  +i+   +++++    ++++ + ++ +a+ ++++ ++e
+  sp|B0RIJ3|MURG_CLAMS   5 LLAGGGTAGHVNPLLAVADELRAREPGSTilvLGTREGLESRLvPARGYELLTIARL-PFPRRP-NGAAVRFAPAFTRAVGQIRRMIAE 91 
+                           89***********************9887899************************9.****99.999999999*************** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                              dvvvgfggy+a++a++aa+++g+p++v+E+n+ pgl+n+l +r a+ v
+  sp|B0RIJ3|MURG_CLAMS  92 RGVDVVVGFGGYAAAPAYLAARRSGVPVVVHEANASPGLANRLGARVATAV 142
+                           ********************************************9999887 PP
+
+>> sp|P0CB60|MURG_STRPN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.0   0.0   1.9e-28   1.1e-25       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.0 bits;  conditional E-value: 1.9e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|P0CB60|MURG_STRPN   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKCGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|P0CB60|MURG_STRPN  91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|B8ZMZ7|MURG_STRPJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.0   0.0   1.9e-28     1e-25       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.0 bits;  conditional E-value: 1.9e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l+ ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i+ 
+  sp|B8ZMZ7|MURG_STRPJ   4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+ +g+p++++E++  +gl+nk+  ++a++++
+  sp|B8ZMZ7|MURG_STRPJ  91 RLRPQILFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143
+                           **************************************************987 PP
+
+>> sp|B3PTW0|MURG_RHIE6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.9   0.7     2e-28   1.1e-25       1     137 [.       6     141 ..       6     142 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 94.9 bits;  conditional E-value: 2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 
+                           v+la+gGT+G+v+Pa Ala +L++rG+ V+l+t  + e+f    +++++++vp   ig++       + ++  ++l+  + ++r+ak++
+  sp|B3PTW0|MURG_RHIE6   6 VLLAAGGTGGHVFPAEALAFKLKERGYSVHLVTDSRAERFAgkfPAEEIHVVPsatIGSK-------NPVAVARSLWTLWSGMRAAKKL 87 
+                           79**************************************98778888888885444444.......366777777777777******* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++ kp +vvgfggy  +++l+aa+++gi+  ++Eqn+++g +nk+l+ r++ +
+  sp|B3PTW0|MURG_RHIE6  88 IQRLKPVIVVGFGGYPTVPPLLAATRLGIASMLHEQNAVMGRANKALAPRVKAI 141
+                           ************************************************999876 PP
+
+>> sp|Q0SHS1|MURG_RHOSR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.7   1.3   5.8e-29   3.3e-26       1     138 [.      10     155 ..      10     156 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 96.7 bits;  conditional E-value: 5.8e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v++aggGT+G++ePa+A+a++ ++ +       l+t +gle+++ +e+g++ + i+p  +l++k  +l+ l+ + +++ ++r+++e+l 
+  sp|Q0SHS1|MURG_RHOSR  10 VIVAGGGTAGHIEPALAVADAIKAIDDTAVvtaLGTARGLETTLvPERGYPLELIPPV-PLPRKP-TLDLLRLPGRVRASVRRTREVLD 96 
+                           689********************977433359**************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH......HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal......lagipanvaEqngipglvnkllprrangvl 138
+                              +dvvvgfggyva++a++aa       +++ip++v+E+n+ +g++nk+ +rra +vl
+  sp|Q0SHS1|MURG_RHOSR  97 ATGADVVVGFGGYVALPAYLAAGpgllrrRRRIPIVVHEANASAGIANKIGARRAARVL 155
+                           *********************98999999**************************9997 PP
+
+>> sp|Q313Q3|MURG_DESDG  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.8   0.9   5.4e-29   3.1e-26       1     139 []       4     143 ..       4     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 96.8 bits;  conditional E-value: 5.4e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+l++gGT+G+++Pa+A+a+e +r+ +      ++ + g e+++ +++g+ ++ ++++ +++   + lk+++ la+   ++ + ++++ 
+  sp|Q313Q3|MURG_DESDG   4 VLLTTGGTGGHIFPALAVAEEIRRQYPAADilfVGGSYGPEARIvPAHGIRFEGLPVR-GVMG--RGLKAPLALAAMTAGVARGMRLVG 89 
+                           79************************99999999************************.9999..77********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           +++pdvv+gfggy+a +a++aa+l++ p  v+Eqn++pg++n+ll++ a++v++
+  sp|Q313Q3|MURG_DESDG  90 RFNPDVVIGFGGYAAFAAMVAAKLREKPCAVHEQNSVPGMANRLLAKIADRVFI 143
+                           ***************************************************985 PP
+
+>> sp|A8F1I4|MURG_RICM5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.8   0.0   5.4e-29   3.1e-26       1     138 [.       4     135 ..       4     136 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 96.8 bits;  conditional E-value: 5.4e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++PavAl++eL +rG+eV+++t  +++  +    ++ ++ ++++       +s + ++ l +   a+ ka ++l + k
+  sp|A8F1I4|MURG_RICM5   4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 
+                           689**************************************999***********.......688899999999999************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +v+vgfggy   ++++aa+++++p++++Eqn+  g+vnk+++ +a++++
+  sp|A8F1I4|MURG_RICM5  86 SAVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|A6H195|MURG_FLAPJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.0   0.0   4.5e-29   2.5e-26       1     138 [.       6     145 ..       6     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 97.0 bits;  conditional E-value: 4.5e-29
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G+++Pa+A+a+eL+ r ++ +   +++++++e +  ++ag++++ + +  +l++k+ +l++ + +++ l +l k++ i++
+  sp|A6H195|MURG_FLAPJ   6 FILSGGGTGGHIYPAIAIANELKSRFPNCKilfVGAKDKMEMQKvPQAGYDIKGLSIA-GLQRKI-TLQNAMFPFKLLSSLVKSFGIVQ 92 
+                           79**************************************98877*************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpdvv+g+gg++++++l  a+ +gi++++ Eqn+ pg++nkll+++an++ 
+  sp|A6H195|MURG_FLAPJ  93 QFKPDVVIGTGGFASGAVLKVASILGIATVIQEQNSYPGITNKLLSKKANKIC 145
+                           **************************************************985 PP
+
+>> sp|A0K486|MURG_BURCH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.0   0.4   4.6e-29   2.6e-26       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 97.0 bits;  conditional E-value: 4.6e-29
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++  ++G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l+ + + l+a  ++  +l++ +
+  sp|A0K486|MURG_BURCH   9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPVNLLRACWQSLGALRRVR 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|A0K486|MURG_BURCH  96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|Q1BZG3|MURG_BURCA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   97.0   0.4   4.6e-29   2.6e-26       2     139 .]       9     146 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 97.0 bits;  conditional E-value: 4.6e-29
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+v+P +A+a++  ++G++V  l+ p g+e+++ +++g++++ +  + +l+ k+   ++l+ + + l+a  ++  +l++ +
+  sp|Q1BZG3|MURG_BURCA   9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPVNLLRACWQSLGALRRVR 95 
+                           5899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           pdvv+g+ggy+  +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv
+  sp|Q1BZG3|MURG_BURCA  96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146
+                           ***********************************************9986 PP
+
+>> sp|Q12EL5|MURG_POLSJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.6   0.2     6e-29   3.4e-26       2     138 ..      35     176 ..      34     177 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 96.6 bits;  conditional E-value: 6e-29
+                           EEE-------HHHHHHHHHHHHH---EEE......EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr......latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 
+                           ++++gGT+G+++P +A+a++L++rG++V+       a +p +e+++ + +g ++++i+   +++ k+  l+ +  +++ lka+ ++ ++
+  sp|Q12EL5|MURG_POLSJ  35 LVMAGGTGGHIFPGLAVAEALRERGWRVHwlggrgNAGHPSMESQLvPPRGFAFESIDFS-GVRGKG-PLTLVFLPLRLLKAFWQSIQV 121
+                           689***************************77777789**********************.******.********************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +++ kpdvvvg ggy+a +a+  + l+g p++++Eqn+++g+vnk+l+  a++v+
+  sp|Q12EL5|MURG_POLSJ 122 VRRVKPDVVVGLGGYIAFPAGMMSVLLGKPLVLHEQNSVAGMVNKVLAGVADRVF 176
+                           *************************************************999997 PP
+
+>> sp|Q8UDM8|MURG_AGRT5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.2   0.9   7.9e-29   4.5e-26       1     137 [.       6     141 ..       6     142 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 96.2 bits;  conditional E-value: 7.9e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 
+                           v+la+gGT+G+v+Pa Ala++L++rG++V+l+t  + e+     +++++++vp   ig++       + ++ +++l++ + +lr a+++
+  sp|Q8UDM8|MURG_AGRT5   6 VLLAAGGTGGHVFPAEALAHTLKARGYQVHLVTDSRAERYAgkfPADEIHVVPsatIGSK-------NPISVVRSLWKLWVGLRTARRL 87 
+                           79********************************99999887678999999995444444.......599******************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           + + kp +vvgfggy  +++l+a++ +g+p +++Eqn+++g +nk+l+ r++ +
+  sp|Q8UDM8|MURG_AGRT5  88 VTKLKPVAVVGFGGYPTVPPLLASTGLGVPSIIHEQNAVMGRANKALAARVKAI 141
+                           *************************************************99876 PP
+
+>> sp|B7K5Z6|MURG_CYAP8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.6   0.0   6.1e-29   3.4e-26       2     138 ..       5     138 ..       4     139 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 96.6 bits;  conditional E-value: 6.1e-29
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+++Pa+Ala++L ++ +e  l++p++le ++  + ++ ++i+++ +++ +   lk+l  l++  +++++++ ++k + +d
+  sp|B7K5Z6|MURG_CYAP8   5 LIAASGTGGHLFPALALAEHLPDYQIEW-LGVPDRLEQTLVGDRYPLHSIAVE-GFQTRS-VLKNLQILFKLIRGIFEVRHLIKTHHID 90 
+                           799********************99776.************************.****99.**************************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           vv+ +ggy+a++a+++a+lagi a+++E+n ipg+v++ll+r++++v+
+  sp|B7K5Z6|MURG_CYAP8  91 VVFTTGGYIAAPAILGARLAGIRAILHESNFIPGKVTRLLSRFCDRVA 138
+                           *********************************************997 PP
+
+>> sp|Q2NCZ0|MURG_ERYLH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.4   0.2   1.4e-28     8e-26       2     137 ..       9     142 ..       8     144 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 95.4 bits;  conditional E-value: 1.4e-28
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           vla+gGT+G++ Pa Ala eL rrGh+V l+t ++ ++   + + l+a+ i+++ ++ +  + l+ +  l +++k+++ ak+++++++p
+  sp|Q2NCZ0|MURG_ERYLH   9 VLAAGGTGGHLLPAFALAAELDRRGHHVALITDERGAKIPgKPDFLPAHVIPAG-RFGK--NPLRWVGGLRAVWKGREMAKRLFESFQP 94 
+                           8*****************************************************.7777..566666666666666************* PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            +vvgfggy a++a++aa+++ ip +++Eqn++ g vn+l + r+  +
+  sp|Q2NCZ0|MURG_ERYLH  95 SAVVGFGGYPALPAMLAASREDIPSIIHEQNAVLGRVNRLQAGRVSAI 142
+                           ****************************************99998766 PP
+
+>> sp|Q9Y751|ATG26_PICPG  Sterol 3-beta-glucosyltransferase OS=Pichia pastoris (strain GS115) GN=ATG26 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.5   0.0   1.3e-28   7.3e-26       1     138 [.     763     897 ..     763     898 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.5 bits;  conditional E-value: 1.3e-28
+                            EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrka 80 
+                            +vl+++G+rGdv+P+++la++L ++ h+V+++t+++++++ve++g+e+ +i+++        v++++   s+++lke+ e+       
+  sp|Q9Y751|ATG26_PICPG 763 FVLLTIGSRGDVQPYISLAKGLLAENHKVKIVTHEEFKPWVESYGIEFATIAGNpaelmslmVTHKS--LSVGFLKEAKEK------- 841
+                            89*****************************************************999998888888..799999999999....... PP
+
+                            HHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  81 keilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            ++ +  +  + +++++  +++++li++++a++ +++aE+++ip+++++++p+++++++
+  sp|Q9Y751|ATG26_PICPG 842 FTGWIGELLQSSWDAC--QDADVLIESPSAMAGIHIAEKLQIPYFRAFTMPWTRTRAY 897
+                            999*****99999999..8999********************************9987 PP
+
+>> sp|Q5P6Z6|MURG_AZOSE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.3   0.2   7.5e-29   4.2e-26       2     138 ..       5     141 ..       4     142 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 96.3 bits;  conditional E-value: 7.5e-29
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+++P vA+a++L+ rG+++  ++ p+g+e+++ +++g+e+  +  +  l+ k+  l++l+ +++ l+++ +a   l++ +
+  sp|Q5P6Z6|MURG_AZOSE   5 LVMAGGTGGHIFPGVAVAEQLRGRGWRIVwMGNPDGMEARIvPQHGYETAWVHFG-ALRGKG-LLRKLLLPLNLLRGFWQALGELRRIR 91 
+                           789****************************************************.******.99************************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggyv  + +  a+l+g p++v+Eqn+++gl+n++l+  a++vl
+  sp|Q5P6Z6|MURG_AZOSE  92 PDVVLGMGGYVTFPGGMMAALLGRPLVVHEQNSVAGLANRVLAGVADRVL 141
+                           *********************************************99997 PP
+
+>> sp|B6IRG2|MURG_RHOCS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.3   1.1   7.6e-29   4.3e-26       1     137 [.       6     140 ..       6     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 96.3 bits;  conditional E-value: 7.6e-29
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa AlareL +rGh+V l+t  + ++f  + ++++++ i +  +l      l++ ++++e + ++ +a+++l++ +
+  sp|B6IRG2|MURG_RHOCS   6 IVLAAGGTGGHLFPAEALARELLERGHRVVLVTDVRGTAFGdALREVPVHRIRSA-TLGG--GLLGKARTALELGIGTLQARRLLSRLE 91 
+                           79*****************************************************.9999..469************************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p++vvgfggy + +a++aa+ ++ip+ ++Eqn+++g +n+ l+rra  +
+  sp|B6IRG2|MURG_RHOCS  92 PAIVVGFGGYPSFPAVYAAAGLRIPVAIHEQNAVMGRANRMLARRARLI 140
+                           *********************************************9865 PP
+
+>> sp|A7TF84|ATG26_VANPO  Sterol 3-beta-glucosyltransferase OS=Vanderwaltozyma polyspora (strain ATCC 22028 / DSM 70294)
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.4   0.0     7e-29   3.9e-26       2     138 ..     760     895 ..     759     896 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 96.4 bits;  conditional E-value: 7e-29
+                            EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 
+                             ++++G+rGdv+P++Ala++L ++Gh V+++t++++++fve +g+++++i++d        v++ a    +++l+e+ ++       +
+  sp|A7TF84|ATG26_VANPO 760 GFLTIGSRGDVQPYIALAKGLIQEGHSVTIITHREFKSFVECHGIDFKEIAGDptklmslmVEHEA--INVGMLMEASSK-------F 838
+                            589********************************************************9999999..69**********.......* PP
+
+                            HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            + +  +   +++++++  ++++li++++a++ +++ E+++ip+++++++p+++++++
+  sp|A7TF84|ATG26_VANPO 839 RGWIHDLLVTTWEACKNLKLDILIESPSAMAGIHISEALQIPYFRAFTMPWTRTRAY 895
+                            *****************************************************9987 PP
+
+>> sp|Q2S528|MURG_SALRD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.3   1.4   3.1e-28   1.7e-25       1     138 [.       8     147 ..       8     148 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 94.3 bits;  conditional E-value: 3.1e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+v+Pa+A+a+++++  ++      +t+++le++  +eag++ +pi+++ +l+++    ++l+ ++++ ++l ++ +++ 
+  sp|Q2S528|MURG_SALRD   8 ILMVGGGTGGHVYPAIAIADAVRALRPDAQivfAGTQDRLEARAvPEAGYALHPITAQ-GLQRRA-VASNLLLPFRVAQGLVQSWRLVG 94 
+                           6899***********************99987779***********************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             +pdv vg+ggyva+++l aa+l+g p+ + Eqn+ +gl+n++l+r a +++
+  sp|Q2S528|MURG_SALRD  95 AIEPDVAVGTGGYVAAPVLMAAWLRGRPLLIQEQNAYAGLTNRVLARLALRIH 147
+                           *********************************************99887776 PP
+
+>> sp|B2SGS8|MURG_FRATM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.7   0.0   1.2e-28   6.5e-26       1     137 [.       8     143 ..       8     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 95.7 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+a+ L++   +V+ ++tp+ +e+ +  e  ++++  i++  ++++k+  +k+++ +++    + k++ +lk+
+  sp|B2SGS8|MURG_FRATM   8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 
+                           689***************************************655556666..9999.99****.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            k+d+v+gfggyv++++++aa+  +ip++++Eqn+  gl+n++l+++a+++
+  sp|B2SGS8|MURG_FRATM  93 LKADLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143
+                           ***********************************************9986 PP
+
+>> sp|A4IX64|MURG_FRATW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.7   0.0   1.2e-28   6.5e-26       1     137 [.       8     143 ..       8     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 95.7 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+a+ L++   +V+ ++tp+ +e+ +  e  ++++  i++  ++++k+  +k+++ +++    + k++ +lk+
+  sp|A4IX64|MURG_FRATW   8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 
+                           689***************************************655556666..9999.99****.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            k+d+v+gfggyv++++++aa+  +ip++++Eqn+  gl+n++l+++a+++
+  sp|A4IX64|MURG_FRATW  93 LKADLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143
+                           ***********************************************9986 PP
+
+>> sp|Q67Q48|MURG_SYMTH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.7   1.1   1.1e-28   6.3e-26       2     139 .]       4     143 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 95.7 bits;  conditional E-value: 1.1e-28
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++ggGT+G+++Pa+++ar+L ++++e +   ++t  g e+ + ++ag+++  i ++ ++ + +  l+ ++  ++  ++l +a  ++++
+  sp|Q67Q48|MURG_SYMTH   4 LITGGGTGGHIYPALSIARALTEQDPEAEllyVGTRTGREAAIvPQAGIAFAVISSG-GVVNLG-LLQRVRGGLRAARGLLEALGHIRR 90 
+                           79*******************************************************.999977.99999999999999********** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           ++pd+v+g+gg+va+++l aa+la++p+++ Eqn+ pg++n+l +r+a+ v+v
+  sp|Q67Q48|MURG_SYMTH  91 FRPDIVIGTGGFVAGPVLAAARLARVPLVIQEQNAFPGVTNRLAARWATAVFV 143
+                           *************************************************9985 PP
+
+>> sp|Q6C8M8|ATG26_YARLI  Sterol 3-beta-glucosyltransferase OS=Yarrowia lipolytica GN=ATG26 PE=3 SV=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.7   0.0   1.2e-28   6.6e-26       1     138 [.     997    1131 ..     997    1132 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 95.7 bits;  conditional E-value: 1.2e-28
+                             EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHH CS
+        Glyco_transf_28    1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalr 78  
+                             ++l+++G+rGdv+P+++l+++L ++Gh+Vr+at+ ++++++e +g+e++++++d        v +    +s+++l+++a++     
+  sp|Q6C8M8|ATG26_YARLI  997 FTLLTIGSRGDVQPYISLGKALIEEGHRVRIATHSEFKDWIEGYGIEFKEVAGDpselmkimVDHGV--FSVSFLRDAASK----- 1075
+                             789*******************************************************997777777..8***********..... PP
+
+                             HHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   79 kakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                               ++ + ++  + +++++  +  ++li++++a++ +++aE+++ip+++++++p+ +++++
+  sp|Q6C8M8|ATG26_YARLI 1076 --FRGWINELLASSWEAC--QGSDVLIESPSAMAGIHIAEALQIPYFRAFTMPWSRTRAY 1131
+                             ..9999999988887777..78999******************************99987 PP
+
+>> sp|C1AU55|MURG_RHOOB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.6   1.4   1.2e-28     7e-26       1     138 [.      10     155 ..      10     156 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 95.6 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v++aggGT+G++ePa+A+a++ ++ +       l+t +gle+++ +e+g++ + ++p  +l++k  +l+ l+ + +++ ++r+++e+l 
+  sp|C1AU55|MURG_RHOOB  10 VIVAGGGTAGHIEPALAVADAIKAIDDTAVvtaLGTARGLETTLvPERGYPLELVPPV-PLPRKP-TLDLLRLPGRVRASVRRTREVLD 96 
+                           689********************977433359**************************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHH......HHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal......lagipanvaEqngipglvnkllprrangvl 138
+                              +dvvvgfggyva++a++aa       +++ip++v+E+n+ +g++nk+ +rra +vl
+  sp|C1AU55|MURG_RHOOB  97 ATGADVVVGFGGYVALPAYLAAGpgllrrRRRIPIVVHEANASAGIANKIGARRAARVL 155
+                           *********************98999999**************************9997 PP
+
+>> sp|B3E3Y2|MURG_GEOLS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.6   0.1   1.2e-28   6.8e-26       2     139 .]       4     143 ..       3     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 95.6 bits;  conditional E-value: 1.2e-28
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++P +A+a+e+  r++      +++++g+e++  +  g++ + i +  + + k+ sl++lk +a    ++ ++++il +
+  sp|B3E3Y2|MURG_GEOLS   4 IVAGGGTGGHLFPGIAVAEEFLSRDPANQvlfVGSERGIEARAiPRLGYQLELISAA-GIRGKG-SLAKLKGAAMMIYGYAQSRKILHR 90 
+                           68***********************876666**************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           ++pd+v+g+ggy++++ + aa+  +ip++++Eqn++pg++nk+l+r an+v++
+  sp|B3E3Y2|MURG_GEOLS  91 FQPDLVLGVGGYASLPMVMAARGMEIPRYIHEQNALPGMSNKVLSRVANKVFI 143
+                           **************************************************985 PP
+
+>> sp|A0Q766|MURG_FRATN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.4   0.0   1.4e-28   8.1e-26       1     137 [.       8     143 ..       8     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 95.4 bits;  conditional E-value: 1.4e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+a+ L++   +V+ ++tp+ +e+ +  e  ++++  i++  ++++k+  +k+++ +++    + +++ +lk+
+  sp|A0Q766|MURG_FRATN   8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLRSRSLLKK 92 
+                           689***************************************655556666..9999.99****.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            k+d+v+gfggyv++++++aa+l +ip++++Eqn+  gl+n++l+++a+++
+  sp|A0Q766|MURG_FRATN  93 LKADLVIGFGGYVSGPICLAAALINIPVIIHEQNAKIGLTNRILAKFATTI 143
+                           ***********************************************9986 PP
+
+>> sp|B1WVP7|MURG_CYAA5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   96.1   0.0   8.7e-29   4.9e-26       2     138 ..       5     138 ..       4     139 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 96.1 bits;  conditional E-value: 8.7e-29
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+v+Pa+ +a++L +++++  l+tp++le  +  + +++++i ++ +++ +   +k+lk l+  l +++++k++++++k+d
+  sp|B1WVP7|MURG_CYAA5   5 LIAASGTGGHVFPALGVAEKLSDYEIQW-LGTPNRLEQSLVGDRYPFHTISVE-GFQTRS-PIKKLKILLGLLSSIFEVKQLIEQQKID 90 
+                           799*********************9666.************************.****99.**************************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           vv+ +ggy+a  a++aa+l+gipa+++E+n ipg+v+kll+r++++v+
+  sp|B1WVP7|MURG_CYAA5  91 VVFTTGGYIASSAILAAKLSGIPAILHESNYIPGKVTKLLSRFCTTVA 138
+                           ********************************************9986 PP
+
+>> sp|B0TY93|MURG_FRAP2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.6   0.0   1.2e-28   6.8e-26       1     137 [.       8     143 ..       8     145 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 95.6 bits;  conditional E-value: 1.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+a+ L++   +V+ ++tp+ +e+ +  e  ++++  i++  +++ k+   +++  ++    ++ ka++ilk+
+  sp|B0TY93|MURG_FRAP2   8 IIITAGGTGGHIYPALAVAEMLRENNANVTwVGTPNSMEANIvpEYFNMQY--IKSS-GVRGKG-LKRKVAFPFTLISSTLKARKILKK 92 
+                           689***************************************655555555..7777.778888.77777777777788999******* PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            k+d+v+gfggyv++++++aa    ip++++Eqn+  gl+n++l++ a++v
+  sp|B0TY93|MURG_FRAP2  93 LKIDLVIGFGGYVSGPICLAAVQKDIPIIIHEQNAKIGLTNRILAKLATKV 143
+                           **********************************************99998 PP
+
+>> sp|Q68WW7|MURG_RICTY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.3   0.0   1.5e-28   8.7e-26       1     138 [.       4     135 ..       4     136 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 95.3 bits;  conditional E-value: 1.5e-28
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++PavAl++eL +rG+ V+++t  ++++ + +  ++ ++ ++++       ++++ l+ l   l a+ k+ +++   k
+  sp|Q68WW7|MURG_RICTY   4 IILVAGGTGGHFFPAVALGEELIKRGYIVHFITDLRCKKYInKDMKIIFYLLDLK-------RFSNILLFLPTLLIAFLKSIKLIYHIK 85 
+                           689***************************************************9.......567777777777777888********* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +v++gfggy   ++++aa++++ip++++Eqn+  g+vnk+++r+a++++
+  sp|Q68WW7|MURG_RICTY  86 SCVIIGFGGYPVIAPMFAAIFLRIPIIIHEQNSYLGKVNKFFARFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|Q6GGZ0|MURG_STAAR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.5   0.0   1.3e-28   7.5e-26       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.5 bits;  conditional E-value: 1.3e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+eV  +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|Q6GGZ0|MURG_STAAR   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEVLyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|Q6GGZ0|MURG_STAAR  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|B9JH51|MURG_AGRRK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.6   0.4   2.4e-28   1.4e-25       1     136 [.       6     140 ..       6     142 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 94.6 bits;  conditional E-value: 2.4e-28
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 
+                           ++la+gGT+G+v+Pa Ala +L++rG+ V+l+t  + e+     +++++++vp   ig++       + +k  ++l+  + ++r+a+++
+  sp|B9JH51|MURG_AGRRK   6 ILLAAGGTGGHVFPAEALAYKLKERGYSVHLVTDSRAERYAgkfPADEIHVVPsatIGSK-------NPIKVARSLWTLWTGIRAARKL 87 
+                           79********************************99999887678999999995444444.......588999999999999******* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           ++  kp  vvgfggy  +++l+aa++ g+pa ++Eqn+++g +nk+l+ r+  
+  sp|B9JH51|MURG_AGRRK  88 IRTIKPLCVVGFGGYPTVPPLLAATRMGVPAMIHEQNAVMGRANKALAARVQA 140
+                           ***********************************************999876 PP
+
+>> sp|Q6BN88|ATG26_DEBHA  Sterol 3-beta-glucosyltransferase OS=Debaryomyces hansenii GN=ATG26 PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.9   0.0   2.1e-28   1.2e-25       1     138 [.    1050    1184 ..    1050    1185 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 94.9 bits;  conditional E-value: 2.1e-28
+                             EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHH CS
+        Glyco_transf_28    1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalr 78  
+                             ++l+++G+rGdv+P++Al+++L ++Gh+V++at+ ++ee++  +g+++++i+++        v++ +  +sl++lke+ ++     
+  sp|Q6BN88|ATG26_DEBHA 1050 FTLLTIGSRGDVQPYIALGKGLLNEGHNVTIATHSDFEEWIVGHGIKFKTIAGNpvelmslmVTHGS--MSLSFLKEASSK----- 1128
+                             789***************************************************9888777666666..677777777777..... PP
+
+                             HHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   79 kakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                               ++ + ++  d++++++  +  ++li++++a++ a++aE++gip+++++++p+++++++
+  sp|Q6BN88|ATG26_DEBHA 1129 --FRGWIQELLDTSWKAC--QGSDILIESPSAMVGAHIAEALGIPYIRAFTMPWTRTRAY 1184
+                             ..999*****99999999..788999******************************9987 PP
+
+>> sp|A7NDC0|MURG_FRATF  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.5   0.0   2.8e-28   1.6e-25       1     137 [.       8     143 ..       8     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 94.5 bits;  conditional E-value: 2.8e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+a+ L++   +V+ ++tp+ +e+ +  e  ++++  i++  ++++k+  +k+++ +++    + k++ +lk+
+  sp|A7NDC0|MURG_FRATF   8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 
+                           689***************************************655556666..9999.99****.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            k+++v+gfggyv++++++aa+  +ip++++Eqn+  gl+n++l+++a+++
+  sp|A7NDC0|MURG_FRATF  93 LKANLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143
+                           ***********************************************9986 PP
+
+>> sp|Q0BL37|MURG_FRATO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.5   0.0   2.8e-28   1.6e-25       1     137 [.       8     143 ..       8     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 94.5 bits;  conditional E-value: 2.8e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+a+ L++   +V+ ++tp+ +e+ +  e  ++++  i++  ++++k+  +k+++ +++    + k++ +lk+
+  sp|Q0BL37|MURG_FRATO   8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 
+                           689***************************************655556666..9999.99****.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            k+++v+gfggyv++++++aa+  +ip++++Eqn+  gl+n++l+++a+++
+  sp|Q0BL37|MURG_FRATO  93 LKANLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143
+                           ***********************************************9986 PP
+
+>> sp|Q2A2I7|MURG_FRATH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.5   0.0   2.8e-28   1.6e-25       1     137 [.       8     143 ..       8     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 94.5 bits;  conditional E-value: 2.8e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa+A+a+ L++   +V+ ++tp+ +e+ +  e  ++++  i++  ++++k+  +k+++ +++    + k++ +lk+
+  sp|Q2A2I7|MURG_FRATH   8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 
+                           689***************************************655556666..9999.99****.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            k+++v+gfggyv++++++aa+  +ip++++Eqn+  gl+n++l+++a+++
+  sp|Q2A2I7|MURG_FRATH  93 LKANLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143
+                           ***********************************************9986 PP
+
+>> sp|A5CS51|MURG_CLAM3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.7   1.7   1.2e-28   6.5e-26       2     137 ..       5     142 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 95.7 bits;  conditional E-value: 1.2e-28
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +laggGT+G+v P++A+a+eL++r++  +   l+t +gle+++ +++g+e  +i+   +++++    ++++ + ++ +a+ ++++ ++e
+  sp|A5CS51|MURG_CLAM3   5 LLAGGGTAGHVNPLLAVADELRAREPGSTilvLGTREGLESRLvPARGYELLTIARL-PFPRRP-DGAAVRFAPAFARAVGQIRRMIAE 91 
+                           89***********************9887899************************9.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                             +dvvvgfggy+a++a+ aa++ g+p++v+E+n+ pgl+n+l +r a  v
+  sp|A5CS51|MURG_CLAM3  92 RGIDVVVGFGGYAAAPAYAAARRPGVPVVVHEANASPGLANRLGARVAAAV 142
+                           ******************************************999988766 PP
+
+>> sp|Q9ZDC0|MURG_RICPR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.9   0.0     2e-28   1.1e-25       1     138 [.       4     135 ..       4     136 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 94.9 bits;  conditional E-value: 2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++PavAl++eL +rG+ V+++t  ++++ + +  ++ ++ ++++ ++ +       ++ l     ++ k+ +++ + k
+  sp|Q9ZDC0|MURG_RICPR   4 IILVAGGTGGHFFPAVALGEELIKRGYIVHFITDLRCKKYInKDMKIIFHILNLK-RFSN------IFLFLPILSITFLKSIRLIYNIK 85 
+                           689****************************************************.4444......44444444456777********* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++v++gfggy   ++++aa++++ip++++Eqn+  g+vnk+++r+a++++
+  sp|Q9ZDC0|MURG_RICPR  86 CCVIIGFGGYPVIAPMFAAIFLRIPIIIHEQNSYLGKVNKFFARFAKKIA 135
+                           ***********************************************986 PP
+
+>> sp|Q9ZK59|MURG_HELPJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.8   0.0   2.2e-28   1.2e-25       1     138 [.       3     142 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 94.8 bits;  conditional E-value: 2.2e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++  a Ala eL ++G+e + l+++ g ++++ e++ l  +    +++ ++ +k  ++k++++l+ + ka +kakeilk
+  sp|Q9ZK59|MURG_HELPJ   3 FALTGGGTGGHLSIAKALAIELEKQGIEAIyLGSTYGQDKEWfENSPLFSERyfFNTQ-GVVNKS-FFKKIRSLFLQAKAAFKAKEILK 89 
+                           79*************************************************9445555.777777.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++++++++++gg++a++a++a+ll++ip++++Eqn+i g  n++l+ +a+ v+
+  sp|Q9ZK59|MURG_HELPJ  90 KHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142
+                           *************************************************9987 PP
+
+>> sp|B7KGH1|MURG_CYAP7  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.6   0.0   2.5e-28   1.4e-25       2     138 ..       9     142 ..       8     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 94.6 bits;  conditional E-value: 2.5e-28
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+++Pa+A+a++L ++ +e  l++p++le ++  + ++ ++i+++ +++  + slk +k l+  + ++++++++l+e k+d
+  sp|B7KGH1|MURG_CYAP7   9 LIAASGTGGHLFPALAVAEQLLDYKIEW-LGVPNRLEQTLVPQDYPLHTIAVE-GFQTGF-SLKSVKILLGLFSSVFQVRKLLRERKID 94 
+                           799********************99776.***********99999999*****.999988.99999999999999************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +v+ +ggy+a +a++aa+l+gip++++E+n +pg+v+++++r++ +v+
+  sp|B7KGH1|MURG_CYAP7  95 IVFTTGGYIASPAILAARLEGIPVILHESNYLPGKVTRFFSRWCQTVA 142
+                           *******************************************99886 PP
+
+>> sp|Q4L6C8|MURG_STAHJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.6   0.0   2.4e-28   1.4e-25       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 94.6 bits;  conditional E-value: 2.4e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +  ++Gh+   ++++ g+e++  e++  ++e++pi ++ kl+++l s+++ k+++++lk++ +a+++lk
+  sp|Q4L6C8|MURG_STAHJ   4 IAFTGGGTVGHVSVNLSLIPTATDKGHDAFyIGSKTGIEREMiESQlpNIEYYPISSG-KLRRYL-SVDNAKDVFKVLKGVIDARKVLK 90 
+                           79****************************************776655688999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk++ ++a++++
+  sp|Q4L6C8|MURG_STAHJ  91 REKPDLLFSKGGFVSVPVVIAARSLNIPTIIHESDLTPGLANKISLKFAKKIY 143
+                           **************************************************997 PP
+
+>> sp|B4UES1|MURG_ANASK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   95.2   0.9   1.6e-28   9.3e-26       2     137 ..       4     141 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 95.2 bits;  conditional E-value: 1.6e-28
+                           EEE-------HHHHHHHHHHHHH---..EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGh..eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+v+P +Ala+e+ +r +  +V  ++t +gle+ v ++ag +++ i+++ +l+ k+   ++l++l+   +a+ ++ +ilk+
+  sp|B4UES1|MURG_ANASK   4 MVAGGGTGGHVFPGIALAEEVVTRHPanDVVfVGTARGLEASVvPAAGFPIELIEVK-GLKGKG-IAGALLNLLLLPRAFLQSWRILKR 90 
+                           68*******************99987336779*************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           ++pdvvvg+ggy+++++++ a++ +ip+ v Eqn+i+gl+n+ll r ++ +
+  sp|B4UES1|MURG_ANASK  91 WRPDVVVGVGGYASGPVVLTAWAMRIPTAVQEQNAIAGLTNRLLGRVVKAA 141
+                           *******************************************99887765 PP
+
+>> sp|B9JY54|MURG_AGRVS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.7   1.3   2.4e-28   1.4e-25       1     137 [.       6     141 ..       6     142 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 94.7 bits;  conditional E-value: 2.4e-28
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 
+                           ++la+gGT+G+++Pa Ala+eL++rG+ V+l+t  + e+     +++ +++vp   ig++  ++      k+l++l++g   +r+a+ +
+  sp|B9JY54|MURG_AGRVS   6 ILLAAGGTGGHLFPAEALAHELRARGYSVHLVTDSRAERYAgkfPADAIHVVPsatIGSK--NPV--AIAKALLTLWRG---YRAARSL 87 
+                           79*********************************9999985445666666664333333..333..555555555555...******* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           ++  kp vv+gfggy   ++l+aa+++g++++++Eqn+++g +n++l+ r++ +
+  sp|B9JY54|MURG_AGRVS  88 IAGLKPLVVIGFGGYPTIPPLLAARALGVATVIHEQNAVMGRANRFLAPRVKAI 141
+                           ************************************************999876 PP
+
+>> sp|Q1ME33|MURG_RHIL3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.0   0.8   7.8e-28   4.4e-25       1     136 [.       6     140 ..       6     142 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 93.0 bits;  conditional E-value: 7.8e-28
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 
+                           v+la+gGT+G+v+Pa Ala +L++rG+ V+l+t  + e+     +++++++vp   ig++       + ++  ++l+  + ++r+ak++
+  sp|Q1ME33|MURG_RHIL3   6 VLLAAGGTGGHVFPAEALAFKLKERGYSVHLVTDSRAERYAgkfPAEEIHVVPsatIGSK-------NPVAVARSLWTLWSGMRAAKKL 87 
+                           79********************************99999887668889999886444444.......366777777777777******* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           +++ +p +vvgfggy  +++l+aa+++g+p  ++Eqn+++g +nk+l+ r+  
+  sp|Q1ME33|MURG_RHIL3  88 IQRLQPVIVVGFGGYPTVPPLLAATRLGVPSMIHEQNAVMGRANKALATRVQA 140
+                           ***********************************************999876 PP
+
+>> sp|A8EZ14|MURG_RICCK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.8   0.0   4.5e-28   2.5e-25       1     138 [.       4     135 ..       4     136 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 93.8 bits;  conditional E-value: 4.5e-28
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++PavAl++eL +rG+eV++++  ++++ +    ++ ++ ++++       +s + ++ l +   a+ ka ++l + k
+  sp|A8EZ14|MURG_RICCK   4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFIIDLRCKKYIsQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIRLLYNIK 85 
+                           689****************************************************.......688899999999999************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p v+vgfggy     ++aa ++++p++++Eqn+  g+vnk++  +a++++
+  sp|A8EZ14|MURG_RICCK  86 PSVIVGFGGYPVISSMFAAVFLRVPIIIHEQNSYLGKVNKFFTSFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|Q5A950|ATG26_CANAL  Sterol 3-beta-glucosyltransferase OS=Candida albicans GN=ATG26 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.2   0.0   6.7e-28   3.8e-25       1     138 [.    1017    1151 ..    1017    1152 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 93.2 bits;  conditional E-value: 6.7e-28
+                             EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHH CS
+        Glyco_transf_28    1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalr 78  
+                             ++l+++G+rGdv+P++Al+++L ++Gh+V++at+ ++ +++++ gl +++i++d        v++++  +s+++lk+++++     
+  sp|Q5A950|ATG26_CANAL 1017 ITLLTIGSRGDVQPYIALGKGLVKEGHNVTIATHAEFGDWIKTFGLGFKEIAGDpaelmsfmVTHNS--MSVGFLKNAQQK----- 1095
+                             689****************************************************999999888888..899999999999..... PP
+
+                             HHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   79 kakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                               ++++ ++  +++++++  +  ++li++++a+  +++aE++gip+++++++p+++++++
+  sp|Q5A950|ATG26_CANAL 1096 --FRSWISKLLTTSWEAC--QGSDILIESPSAMSGIHIAEALGIPYFRAFTMPWTRTRAY 1151
+                             ..9999999989988887..788999******************************9987 PP
+
+>> sp|Q2IG27|MURG_ANADE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.4   0.9   2.9e-28   1.6e-25       2     137 ..       4     141 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 94.4 bits;  conditional E-value: 2.9e-28
+                           EEE-------HHHHHHHHHHHHH---..EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGh..eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+v+P +Ala+e+ +r +  +V  ++t +gle+ v ++ag +++ i+++ +l+ k+  +++l++l+   +a+ ++ +il++
+  sp|Q2IG27|MURG_ANADE   4 MVAGGGTGGHVFPGIALAEEVVTRHPanDVVfVGTARGLEASVvPAAGFPIELIEVK-GLKGKG-LVGALLNLLLLPRAFLQSWRILRR 90 
+                           68*******************99987336779*************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           ++pdvvvg+ggy+++++++ a++ +ip+ v Eqn+i+gl+n+ll r ++ +
+  sp|Q2IG27|MURG_ANADE  91 WRPDVVVGVGGYASGPVVLTAWAMRIPTAVQEQNAIAGLTNRLLGRVVKAA 141
+                           *******************************************99887765 PP
+
+>> sp|B8J8E8|MURG_ANAD2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   94.1   1.0   3.6e-28     2e-25       2     137 ..       4     141 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 94.1 bits;  conditional E-value: 3.6e-28
+                           EEE-------HHHHHHHHHHHHH---..EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGh..eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+v+P +Ala+e+ +r +  +V  ++t +gle+ v ++ag +++ i+++ +l+ k+   ++l++l+   +a+ ++ +il++
+  sp|B8J8E8|MURG_ANAD2   4 MVAGGGTGGHVFPGIALAEEVVTRHPanDVVfVGTARGLEASVvPAAGFPIELIEVK-GLKGKG-IAGALLNLLLLPRAFLQSWRILRR 90 
+                           68*******************99987336779*************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           ++pdvvvg+ggy+++++++ a++ +ip+ v Eqn+i+gl+n+ll r ++ +
+  sp|B8J8E8|MURG_ANAD2  91 WRPDVVVGVGGYASGPVVLTAWAMRIPTAVQEQNAIAGLTNRLLGRVVKAA 141
+                           *******************************************99887765 PP
+
+>> sp|C3MEM9|MURG_RHISN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.8   0.7   9.3e-28   5.2e-25       1     136 [.       6     140 ..       6     142 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 92.8 bits;  conditional E-value: 9.3e-28
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 
+                           + la+gGT+G+++Pa Ala+eL++ G+ V+l+t  + e+     +++++++vp   i       +k   +k   ++++ + +lr+a+++
+  sp|C3MEM9|MURG_RHISN   6 IFLAAGGTGGHLFPAEALAHELKASGYAVHLVTDSRAERYAgkfPAEEVHVVPsatI------GSKN-PIKLAQSVWKLWTGLRAARRL 87 
+                           689********************************9999985445666666664333......4444.99******************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           ++++kp +vvgfggy  +++l+aa+  g+p  ++Eqn+++g +nk l+ r+  
+  sp|C3MEM9|MURG_RHISN  88 IARYKPRAVVGFGGYPTVPPLLAATGMGVPSLIHEQNAVMGRANKMLASRVQA 140
+                           ************************************************99976 PP
+
+>> sp|Q1CSB1|MURG_HELPH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.1   0.0   7.3e-28   4.1e-25       1     138 [.       3     142 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 93.1 bits;  conditional E-value: 7.3e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++  a Ala eL ++G+e + l+++ g ++++ e++ l  +    +++ ++ +k  ++k++ +l+ + ka +kakeilk
+  sp|Q1CSB1|MURG_HELPH   3 FALTGGGTGGHLSIAKALAIELEKQGIEAIyLGSTYGQDKEWfENSPLFSERyfFNTQ-GVVNKS-FFKKIGSLFLQAKAAFKAKEILK 89 
+                           79*************************************************9445555.777777.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++++++++++gg++a++a++a+ll++ip++++Eqn+i g  n++l+ +a+ v+
+  sp|Q1CSB1|MURG_HELPH  90 KHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142
+                           *************************************************9987 PP
+
+>> sp|P59424|MURG_BUCBP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.0   0.0   7.9e-28   4.4e-25       1     134 [.       4     137 ..       4     141 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 93.0 bits;  conditional E-value: 7.9e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT G+++P + +a+ L ++G++V  l+t++++e+++ +++g++++ i++  +++ k   ++ +  +++   a  +ak+i+++ 
+  sp|P59424|MURG_BUCBP   4 IIIMAGGTCGHIFPGLEIAKSLINKGWKVFwLGTSKNIESKIvPKYGITIKYINIS-GVRGKN-LFELMAIPFKLIIACYQAKKIIENI 90 
+                           6899****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134
+                           +pd+++g+ggyv+++ +i + l + p++++Eqn i+gl+nkll+++ 
+  sp|P59424|MURG_BUCBP  91 NPDIILGMGGYVSVPGGIISYLYKKPLIIHEQNKIAGLANKLLSKFT 137
+                           *******************************************9986 PP
+
+>> sp|Q2K6C1|MURG_RHIEC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.4   0.8   2.4e-27   1.3e-24       1     137 [.       6     141 ..       6     142 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 91.4 bits;  conditional E-value: 2.4e-27
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 
+                           v+la+gGT+G+v+Pa Ala +L++rG+ V+l+t  + e+     +++++++vp   ig++       + ++  ++l+  + ++r+ak++
+  sp|Q2K6C1|MURG_RHIEC   6 VLLAAGGTGGHVFPAEALAFKLKERGYSVHLVTDSRAERYAgkfPAEEIHVVPsatIGSK-------NPVAVARSLWTLWSGMRAAKRL 87 
+                           79********************************99999887668889999886444444.......366777777777777******* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++ kp +vvgfggy  +++l+aa+++g++  ++Eqn+++g +nk+l+ r++ +
+  sp|Q2K6C1|MURG_RHIEC  88 IQRLKPVIVVGFGGYPTVPPLLAATRLGVASMLHEQNAVMGRANKALAPRVKAI 141
+                           ************************************************999876 PP
+
+>> sp|O25770|MURG_HELPY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.1   0.0   7.3e-28   4.1e-25       1     138 [.       3     142 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 93.1 bits;  conditional E-value: 7.3e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++  a Ala eL ++G+e + l+++ g ++++ e++ l  +    +++ ++ +k  ++k++ +l+ + ka +kakeilk
+  sp|O25770|MURG_HELPY   3 FALTGGGTGGHLSIAKALAIELEKQGIEAIyLGSTYGQDKEWfENSPLFSERyfFNTQ-GVVNKS-FFKKIGSLFLQAKAAFKAKEILK 89 
+                           79*************************************************9445555.777777.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++++++++++gg++a++a++a+ll++ip++++Eqn+i g  n++l+ +a+ v+
+  sp|O25770|MURG_HELPY  90 KHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142
+                           *************************************************9987 PP
+
+>> sp|A0M527|MURG_GRAFK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.6   0.0     1e-27   5.7e-25       1     135 [.       7     143 ..       7     146 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 92.6 bits;  conditional E-value: 1e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+l+ggGT+G+++Pa+A+a+e +rr ++ +   +++++++e +  ++ag+e++ + +  +  +++ slk++  +++   +l k+++i+k
+  sp|A0M527|MURG_GRAFK   7 VILSGGGTGGHIYPAIAIADEIKRRYPNAEilfVGAQDRMEMEKvPQAGYEIKGLWIS-GIDRSF-SLKNFIFPFKLMSSLSKSRKIIK 93 
+                           789*************************************96555*************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           ++kpd+v+g+gg+ ++++l  a++ gip+ + Eqn++pg++n++l++ a 
+  sp|A0M527|MURG_GRAFK  94 KFKPDIVIGTGGFGSGPLLRIAISKGIPTLIQEQNSLPGVTNRILSKNAS 143
+                           *********************************************99875 PP
+
+>> sp|B2UUR4|MURG_HELPS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.1   0.0   7.3e-28   4.1e-25       1     138 [.       3     142 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 93.1 bits;  conditional E-value: 7.3e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++  a Ala eL ++G+e + l+++ g ++++ e++ l  +    +++ ++ +k  ++k++ +l+ + ka +kakeilk
+  sp|B2UUR4|MURG_HELPS   3 FALTGGGTGGHLSIAKALAIELEKQGIEAIyLGSTYGQDKEWfENSPLFSERyfFNTQ-GVVNKS-FFKKIGSLFLQAKAAFKAKEILK 89 
+                           79*************************************************9445555.777777.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++++++++++gg++a++a++a+ll++ip++++Eqn+i g  n++l+ +a+ v+
+  sp|B2UUR4|MURG_HELPS  90 KHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142
+                           *************************************************9987 PP
+
+>> sp|Q3K2P3|MURG_STRA1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.0   0.0     8e-28   4.5e-25       1     138 [.       5     144 ..       5     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 93.0 bits;  conditional E-value: 8e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s+++++++++++ ++ ++ +i++
+  sp|Q3K2P3|MURG_STRA1   5 IVFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHEQiNQSGLdiTFHSIATG-KLRRYF-SWQNMLDVFKVGVGVLQSIAIIA 91 
+                           79*************************************9988***98225666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+++p++v+E++  +gl+nk+  ++a+ ++
+  sp|Q3K2P3|MURG_STRA1  92 KLRPQALFSKGGFVSVPPVVAARLLKVPVFVHESDLSMGLANKIAYKFATIMY 144
+                           ***********************************************999765 PP
+
+>> sp|Q8CX15|MURG_STRA5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.0   0.0     8e-28   4.5e-25       1     138 [.       5     144 ..       5     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 93.0 bits;  conditional E-value: 8e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s+++++++++++ ++ ++ +i++
+  sp|Q8CX15|MURG_STRA5   5 IVFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHEQiNQSGLdiTFHSIATG-KLRRYF-SWQNMLDVFKVGVGVLQSIAIIA 91 
+                           79*************************************9988***98225666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+++p++v+E++  +gl+nk+  ++a+ ++
+  sp|Q8CX15|MURG_STRA5  92 KLRPQALFSKGGFVSVPPVVAARLLKVPVFVHESDLSMGLANKIAYKFATIMY 144
+                           ***********************************************999765 PP
+
+>> sp|Q8E6P0|MURG_STRA3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.0   0.0     8e-28   4.5e-25       1     138 [.       5     144 ..       5     145 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 93.0 bits;  conditional E-value: 8e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++   ++gl  ++++i+++ kl++++ s+++++++++++ ++ ++ +i++
+  sp|Q8E6P0|MURG_STRA3   5 IVFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHEQiNQSGLdiTFHSIATG-KLRRYF-SWQNMLDVFKVGVGVLQSIAIIA 91 
+                           79*************************************9988***98225666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+++p++v+E++  +gl+nk+  ++a+ ++
+  sp|Q8E6P0|MURG_STRA3  92 KLRPQALFSKGGFVSVPPVVAARLLKVPVFVHESDLSMGLANKIAYKFATIMY 144
+                           ***********************************************999765 PP
+
+>> sp|Q7U346|MURG_BLOFL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.9   0.0   8.6e-28   4.8e-25       1     138 [.       8     146 ..       8     147 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 92.9 bits;  conditional E-value: 8.6e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+++P +++ar L++ G++V  +++++++e+++ + ++++++ i ++ +l+ k    k ++ l+  + a+ ++++i++ +
+  sp|Q7U346|MURG_BLOFL   8 IMIIAGGTGGHIFPGLSVARYLMNHGYKVVwIGSKDRIESELvPVYNIDIKYICIQ-GLRGKKIYQKLITLLFLIFFAMYQSFKIIRCW 95 
+                           6789****************************************************.99998856667777889999************ PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           kpd+v+++ggyv+++ ++ a+l gip++++Eqn i+gl+n++++r+a+++l
+  sp|Q7U346|MURG_BLOFL  96 KPDIVLSMGGYVSGPSSLVAWLYGIPVIIHEQNRIMGLTNRYVSRFAKKIL 146
+                           ************************************************986 PP
+
+>> sp|Q5HPC0|MURG_STAEQ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.9   0.0   8.5e-28   4.8e-25       2     138 ..       5     143 ..       4     144 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 92.9 bits;  conditional E-value: 8.5e-28
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           + +ggGT G+v   ++l  +  ++Ghe   ++++ g+e++  e++   ++++pi ++ kl+++l s+++ k+++++lk++ +a++ilk+
+  sp|Q5HPC0|MURG_STAEQ   5 AYTGGGTVGHVSVNLSLIPTSIEKGHEAFyIGSKHGIEREMiESQlpDIQYYPISSG-KLRRYL-SFENAKDVFKVLKGILDARKILKK 91 
+                           669**************************************766644688999****.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk++ ++a++++
+  sp|Q5HPC0|MURG_STAEQ  92 QKPDLLFSKGGFVSVPVVIAARSLKIPTIIHESDLTPGLANKISLKFAKKIY 143
+                           *************************************************997 PP
+
+>> sp|Q8CMM3|MURG_STAES  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.9   0.0   8.5e-28   4.8e-25       2     138 ..       5     143 ..       4     144 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 92.9 bits;  conditional E-value: 8.5e-28
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           + +ggGT G+v   ++l  +  ++Ghe   ++++ g+e++  e++   ++++pi ++ kl+++l s+++ k+++++lk++ +a++ilk+
+  sp|Q8CMM3|MURG_STAES   5 AYTGGGTVGHVSVNLSLIPTSIEKGHEAFyIGSKHGIEREMiESQlpDIQYYPISSG-KLRRYL-SFENAKDVFKVLKGILDARKILKK 91 
+                           669**************************************766644688999****.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk++ ++a++++
+  sp|Q8CMM3|MURG_STAES  92 QKPDLLFSKGGFVSVPVVIAARSLKIPTIIHESDLTPGLANKISLKFAKKIY 143
+                           *************************************************997 PP
+
+>> sp|Q01Q48|MURG_SOLUE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.6   0.3     1e-27   5.8e-25       1     138 [.      14     149 ..      14     150 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 92.6 bits;  conditional E-value: 1e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++aggGT+G+v Pa+A+areL+ rGh+V  ++t+ g+e+++ + +g e+++i+++ +l++    ++++ +l +   ++ k  +++++a
+  sp|Q01Q48|MURG_SOLUE  14 FLMAGGGTGGHVIPALAVARELRSRGHKVFfVGTQHGMEARLvPPEGFEFKTIEIG-GLNQVS-WNQKFATLSRLPITTLKCGRSVRDA 100
+                           79******************************************************.665533.5666666666644455555555555 PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +  +v+++ggyva++++ aal +++p++v E n+ pg++n++ +r + ++l
+  sp|Q01Q48|MURG_SOLUE 101 S--AVFSMGGYVAGPPVMAALVRRVPVVVMEPNAFPGFTNRVIARLVSRAL 149
+                           5..***************************************999887765 PP
+
+>> sp|B5Z8F1|MURG_HELPG  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.8   0.0   8.8e-28   4.9e-25       1     138 [.       3     142 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 92.8 bits;  conditional E-value: 8.8e-28
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++  a Ala eL ++G+e + l+++ g ++++ e++ l  +    +++ ++ +k  ++k++ +l+ + ka +kakeilk
+  sp|B5Z8F1|MURG_HELPG   3 FALTGGGTGGHLSIAKALAIELEKQGIEAIyLGSTYGQDREWfENSPLFSERyfFNTQ-GVVNKS-FFKKIGSLFLQAKAAFKAKEILK 89 
+                           79*************************************************9445555.777777.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++++++++++gg++a++a++a+ll++ip++++Eqn+i g  n++l+ +a+ v+
+  sp|B5Z8F1|MURG_HELPG  90 NHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142
+                           *************************************************9987 PP
+
+>> sp|Q5L524|MURG_CHLAB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.6   0.0     1e-27   5.8e-25       1     138 [.       8     144 ..       8     145 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 92.6 bits;  conditional E-value: 1e-27
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++la+gG++G++ Pa+A  +++ r+G +V l   +gle++    e+ + +++i+++  l+  ++ +++++++ + + +++kak+ l  +
+  sp|Q5L524|MURG_CHLAB   8 IALAVGGSGGHIVPALATREAFCREGVDV-LLLGKGLENHPslGEQQILYKEIPSG--LPTFVRPITAVRRVCSLYAGYKKAKKELLIF 93 
+                           79***************************.6666666666655999**********..77777899999999999999*********** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            pdvv+gfg+y+++++l aal+ +ip++++Eqn +pg+vnkl++r+a+gv 
+  sp|Q5L524|MURG_CHLAB  94 DPDVVIGFGSYHSLPVLMAALKKKIPIFLHEQNVVPGKVNKLFSRFAKGVG 144
+                           ************************************************986 PP
+
+>> sp|Q255W4|MURG_CHLFF  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.7   0.0     1e-27   5.6e-25       1     138 [.       7     143 ..       7     144 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 92.7 bits;  conditional E-value: 1e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++la+gG++G++ Pa+A  +++ ++G++V  l+   +  + + e+ +++++i+++  l  +   +++++++ + + +++kak+ l  + 
+  sp|Q255W4|MURG_CHLFF   7 IALAVGGSGGHIVPALATRETFCKEGIDVLlLGKGLDNYPNLCEQDIPYREIPSG-SLSISR-PIAAIRNTRSLYIGYKKAKKELIAFG 93 
+                           79***************************66666666666669************.666544.88999999999999************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+gfg+y+++++l aal+ +ip++++Eqn +pg+vnkl++r+a+gv 
+  sp|Q255W4|MURG_CHLFF  94 PDVVIGFGSYHSLPVLMAALKKKIPIFLHEQNLVPGKVNKLFSRFAKGVG 143
+                           ***********************************************986 PP
+
+>> sp|Q820E0|MURG_CHLCV  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.4   0.0   1.2e-27   6.7e-25       1     138 [.       8     144 ..       8     145 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 92.4 bits;  conditional E-value: 1.2e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++la+gG++G++ Pa+A  +++ ++G +V  l+   +  + +    +++++i+++++  a    ++++++  + ++++rkak+ l  + 
+  sp|Q820E0|MURG_CHLCV   8 IALAVGGSGGHIVPALATREAFCKEGVDVLlLGKGLDNHPNLCDLDVHYKEIPSGLPTVA--SPVTAIRRMSSLYNGYRKAKKELCIFD 94 
+                           79***************************666666666666699999********66666..889************************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+gfg+y+++++l aal+ +ip++++Eqn ipg vnkl++r+a+gv 
+  sp|Q820E0|MURG_CHLCV  95 PDVVIGFGSYHSLPVLMAALKKKIPIFLHEQNLIPGRVNKLFSRFAKGVG 144
+                           ***********************************************986 PP
+
+>> sp|Q8XVI7|MURG_RALSO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.3   0.2   6.1e-28   3.5e-25       2     138 ..      14     150 ..      13     151 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 93.3 bits;  conditional E-value: 6.1e-28
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+++Pa+++ar L +rG++V  l+   g+e ++ +++g + +++  + +++ k+  +++++ +++ l+a+ ++  ++++ +
+  sp|Q8XVI7|MURG_RALSO  14 LVMAGGTGGHIFPALSVARLLAARGWQVVwLGNASGMEGQLvPKHGFPLESVRFG-GVRGKG-LVTKFLLPLNLLRAFWQSLGVVRRVR 100
+                           789****************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p+vv+g+ggy+  + +  + l+g+p++++Eqn+i+gl+n++l+r a++vl
+  sp|Q8XVI7|MURG_RALSO 101 PNVVLGMGGYITFPGGMMSVLLGAPLVLHEQNSIAGLANRVLARVADRVL 150
+                           ***********************************************997 PP
+
+>> sp|Q4ULT6|MURG_RICFE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.4   0.0   1.2e-27   6.6e-25       1     138 [.       4     135 ..       4     136 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 92.4 bits;  conditional E-value: 1.2e-27
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l++gGT+G+++PavAl++eL +rG+eV+++t  ++ + +  + gl ++ ++++       +s + ++ l +   a+ ka ++l + +
+  sp|Q4ULT6|MURG_RICFE   4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCQKYInQNMGLIFHILDLK-------RSDNIFLFLPNLSIAILKAIKLLYNIR 85 
+                           689****************************************************.......45666666666667899********** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             v++gfggy   ++++aa+++++p+++ Eqn+  g+vnk+++ +a++++
+  sp|Q4ULT6|MURG_RICFE  86 SSVIIGFGGYPVIAPMFAAIFLRVPIIIYEQNSYLGKVNKFFASFAKKIA 135
+                           ***********************************************987 PP
+
+>> sp|Q49XM9|MURG_STAS1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.4   0.0   1.2e-27   6.6e-25       1     138 [.       4     143 ..       4     144 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 92.4 bits;  conditional E-value: 1.2e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +  ++G++   +++++g+e++  e+ l+  +   i ++ kl++++ s++++k+++++lk++ +a+ +lk
+  sp|Q49XM9|MURG_STAS1   4 IAFTGGGTVGHVSVNLSLIPTAIEEGYDTFyIGSKNGIEREMIESQLPSIKyhsISSG-KLRRYI-SWDNIKDIFKVLKGVLDARSVLK 90 
+                           79****************************************6666654443339999.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk++ ++a++++
+  sp|Q49XM9|MURG_STAS1  91 KEKPDLLFSKGGFVSVPVVIAAKSLKIPTIIHESDLTPGLANKISLKFAKKIY 143
+                           **************************************************997 PP
+
+>> sp|Q119X8|MURG_TRIEI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.5   0.0   1.2e-27   6.5e-25       2     138 ..      29     162 ..      28     163 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 92.5 bits;  conditional E-value: 1.2e-27
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+++Pa+A+a++L+++ +e  l++p++le+++  + ++ ++i ++ ++++kl  ++tlk l +   ++ k++ ilke k +
+  sp|Q119X8|MURG_TRIEI  29 LIAASGTGGHLFPAIAIANQLKDYHIEW-LGVPDRLETKLIPSQYPLHTISVE-GFQQKL-GIETLKVLSRLIGSILKVRHILKEGKFQ 114
+                           799**********************776.***********99***********.******.**************************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            ++ +ggy+a++a+iaa+++g p++++E+n +pg+v+++++r +n v+
+  sp|Q119X8|MURG_TRIEI 115 GLFTTGGYIAAPAIIAARYLGLPVILHESNVLPGKVTRWFSRLCNVVA 162
+                           *****************************************9998775 PP
+
+>> sp|Q03L97|MURG_STRTD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.5   0.0   2.3e-27   1.3e-24       1     138 [.       7     146 ..       7     147 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.5 bits;  conditional E-value: 2.3e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l  ++ + G+eV+ ++ + g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i++
+  sp|Q03L97|MURG_STRTD   7 IVFTGGGTVGHVTLNLILIPKFLKDGWEVHyIGDKHGIEHEQiDKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGILQSIAIIA 93 
+                           79*************************************9988***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++ia++l+++p++v+E++  +gl+nk+  ++a++++
+  sp|Q03L97|MURG_STRTD  94 KIRPQALFSKGGFVSVPPVIASKLLRVPVYVHESDLSMGLANKIAYKFATTMF 146
+                           ************************************************99875 PP
+
+>> sp|A0L5N1|MURG_MAGSM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.3   0.7   1.3e-27   7.4e-25       2     138 ..       9     147 ..       8     148 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 92.3 bits;  conditional E-value: 1.3e-27
+                           EEE-------HHHHHHHHHHHHH--..-EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrG..heVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++aggGT+G+++Pa+A+a++ ++r   h V+ ++ ++gle+++ ++ag + ++++++ +l+ k+  +++l++l   l a+ +a+  +++
+  sp|A0L5N1|MURG_MAGSM   9 LIAGGGTGGHLFPALAVAERWRERYglHSVHfIGGQRGLENRLvPNAGFTLETLAVG-QLKGKG-LPHKLRTLGGLLPAVWQARGMVQR 95 
+                           79********************985579*****************************.******.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + p+vv+g+ggy++++a++aa+++gip  ++Eqn+++gl+n+ll+  a +vl
+  sp|A0L5N1|MURG_MAGSM  96 FDPHVVLGVGGYASAPAMVAARSLGIPMALHEQNARAGLTNRLLSHLAQQVL 147
+                           ********************************************99988887 PP
+
+>> sp|B8H091|MURG_CAUCN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.1   1.2   7.5e-28   4.2e-25       2     138 ..       6     141 ..       5     142 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 93.1 bits;  conditional E-value: 7.5e-28
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGG....GHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppg....leefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           v+a+gGT+G+++Pa Ala++L +rG++V lat ++     ++f +e+ l+  + +++    +  + l+++k  + +l+++ +a++++k+
+  sp|B8H091|MURG_CAUCN   6 VVAAGGTGGHMFPAQALAEALAARGWRVVLATDDRgalyADKFPAEERLALSAATAK---SN--DPLGMIKAGFVVLQGVMEARAAFKR 89 
+                           89*******************************983432344557777777777777...44..89*********************** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             p+vvvgfggy a++al++al++g p++++Eqn++ g vn++l+ r+n v+
+  sp|B8H091|MURG_CAUCN  90 LDPAVVVGFGGYPALPALLGALSQGRPTVIHEQNAVLGRVNRFLAPRVNEVA 141
+                           ************************************************9885 PP
+
+>> sp|Q9A5A1|MURG_CAUCR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   93.1   1.2   7.5e-28   4.2e-25       2     138 ..       6     141 ..       5     142 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 93.1 bits;  conditional E-value: 7.5e-28
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGG....GHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppg....leefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           v+a+gGT+G+++Pa Ala++L +rG++V lat ++     ++f +e+ l+  + +++    +  + l+++k  + +l+++ +a++++k+
+  sp|Q9A5A1|MURG_CAUCR   6 VVAAGGTGGHMFPAQALAEALAARGWRVVLATDDRgalyADKFPAEERLALSAATAK---SN--DPLGMIKAGFVVLQGVMEARAAFKR 89 
+                           89*******************************983432344557777777777777...44..89*********************** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             p+vvvgfggy a++al++al++g p++++Eqn++ g vn++l+ r+n v+
+  sp|Q9A5A1|MURG_CAUCR  90 LDPAVVVGFGGYPALPALLGALSQGRPTVIHEQNAVLGRVNRFLAPRVNEVA 141
+                           ************************************************9885 PP
+
+>> sp|A8GNC7|MURG_RICAH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.2   0.0   1.4e-27   7.8e-25       1     138 [.       4     135 ..       4     136 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 92.2 bits;  conditional E-value: 1.4e-27
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++la+gGT+G+++PavAl++eL +rG+eV+++t  ++ + +  + gl ++ ++++       +s++ ++ l +   a+ ka ++l + +
+  sp|A8GNC7|MURG_RICAH   4 IILAAGGTGGHFFPAVALGEELVKRGYEVHFITDLRCQKYInQNLGLIFHILDLK-------RSSNIFLFLPNLSIAILKAIKLLYNIR 85 
+                           78*****************************************************.......788899999999999************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             +++gfg+y     ++aa ++++p++++Eqn+  g+vnk+++ +a++++
+  sp|A8GNC7|MURG_RICAH  86 SSAIIGFGSYPVISSMFAAVFLRVPIIIHEQNSYLGKVNKFFASFAKRIA 135
+                           ***********************************************987 PP
+
+>> sp|B5XMA2|MURG_STRPZ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.3   0.0   2.6e-27   1.5e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.3 bits;  conditional E-value: 2.6e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++  e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +il+
+  sp|B5XMA2|MURG_STRPZ   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFILA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++++
+  sp|B5XMA2|MURG_STRPZ  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|B6JMZ5|MURG_HELP2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   92.2   0.0   1.4e-27   7.7e-25       1     138 [.       3     142 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 92.2 bits;  conditional E-value: 1.4e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++  a Ala eL ++G e + l+++ g ++++ e++ l  +    +++ ++ +k  ++k++ +l+ + ka +kakeilk
+  sp|B6JMZ5|MURG_HELP2   3 FALTGGGTGGHLSIAKALAIELEKQGVEAIyLGSTYGQDKEWfENSPLFSERyfFNTQ-GVVNKS-FFKKINSLFLQVKAAFKAKEILK 89 
+                           79*************************************************9445555.777777.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++++++++++gg++a++a++a+ll++ip++++Eqn+i g  n++l+ +a+ v+
+  sp|B6JMZ5|MURG_HELP2  90 KHQITHTISVGGFSAGPASFASLLNHIPLYIHEQNAIKGSLNRYLSPKAKAVF 142
+                           *************************************************9987 PP
+
+>> sp|A7ERM5|ATG26_SCLS1  Sterol 3-beta-glucosyltransferase OS=Sclerotinia sclerotiorum (strain ATCC 18683 / 1980 / Ss-1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.8   0.0   1.8e-27     1e-24       4     138 ..     945    1076 ..     942    1077 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 91.8 bits;  conditional E-value: 1.8e-27
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81  
+                             +++G+rGdv+P++Al ++L+++Gh+ ++at+ +++e++e++g+e+ p+++d        v++    +++++lke+ ++       +
+  sp|A7ERM5|ATG26_SCLS1  945 LTIGSRGDVQPYIALCKGLMAEGHQTKIATHLEFKEWIESHGIEFAPVDGDpaelmricVENGM--FTVSFLKEASSK-------F 1021
+                             79**************************************************999995555555..899999999999.......9 PP
+
+                             HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + + ++    +++++  ++ ++li++++a++ +++aE++ ip+++++++p+++++++
+  sp|A7ERM5|ATG26_SCLS1 1022 RGWIDDLLSSSWRAC--QNSDILIESPSAMAGIHIAEALRIPYFRAFTMPWTRTRAY 1076
+                             999999988888888..788999******************************9987 PP
+
+>> sp|Q7V466|MURG_PROMM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.6   0.2   2.1e-27   1.2e-24       2     137 ..       5     137 ..       4     139 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 91.6 bits;  conditional E-value: 2.1e-27
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++a+ GT+G+++Pa+A+a++L    + V+ l++p++le+++  e ++l++v  g+    +   + l++l++l++ l a+ +++++l+++
+  sp|Q7V466|MURG_PROMM   5 LIAASGTGGHLFPALAVAEALPGS-WSVCwLGVPDRLETQLvpERYELTTVRAGGL---QG--RGLRKLVQLLQLLAATGRVRKLLRKQ 87 
+                           799*******************97.6**************9777777777666655...56..568999999999999*********** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            +++v+ +ggy+a++a++aa+++gip++++E+n+ipg v++ll r++  v
+  sp|Q7V466|MURG_PROMM  88 GIQTVFTTGGYIAAPAILAARWCGIPVVLHESNAIPGRVTRLLGRFCQVV 137
+                           ******************************************99998765 PP
+
+>> sp|A2CDG1|MURG_PROM3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.2     2e-27   1.2e-24       2     137 ..       5     137 ..       4     139 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 2e-27
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++a+ GT+G+++Pa+A+a+ L +  + V+ l++p++le+++  e ++l++v  g+    +   + l++l++l++ l a+ +++++l+++
+  sp|A2CDG1|MURG_PROM3   5 LIAASGTGGHLFPALAVAESLPAS-WSVCwLGVPDRLETQLvpERYELTTVRAGGL---QG--RGLRKLVQLLQLLAATGRVRKLLRKQ 87 
+                           799******************987.6**************9777777777666655...56..568999999999999*********** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            +++v+ +ggy+a++a++aa+++gip++++E+n+ipg v++ll r++  v
+  sp|A2CDG1|MURG_PROM3  88 GIQTVFTTGGYIAAPAILAARWCGIPVVLHESNAIPGRVTRLLGRFCQVV 137
+                           ******************************************99998765 PP
+
+>> sp|Q5M0D4|MURG_STRT1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.8   0.0   3.6e-27   2.1e-24       1     138 [.       7     146 ..       7     147 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.8 bits;  conditional E-value: 3.6e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l  ++ + G+eV+ ++ + g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i++
+  sp|Q5M0D4|MURG_STRT1   7 IVFTGGGTVGHVTLNLILIPKFLKDGWEVHyIGDKHGVEHEQiDKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGILQSIAIIA 93 
+                           79*************************************9988***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++ia++l+++p++v+E++  +gl+nk+  ++a++++
+  sp|Q5M0D4|MURG_STRT1  94 KIRPQALFSKGGFVSVPPVIASKLLRVPVYVHESDLSMGLANKIAYKFATTMF 146
+                           ************************************************99875 PP
+
+>> sp|Q5M4Y1|MURG_STRT2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.8   0.0   3.6e-27   2.1e-24       1     138 [.       7     146 ..       7     147 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.8 bits;  conditional E-value: 3.6e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l  ++ + G+eV+ ++ + g+e++   ++gl  ++++i+++ kl++++ s++++++++++++++ ++ +i++
+  sp|Q5M4Y1|MURG_STRT2   7 IVFTGGGTVGHVTLNLILIPKFLKDGWEVHyIGDKHGVEHEQiDKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGILQSIAIIA 93 
+                           79*************************************9988***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++ia++l+++p++v+E++  +gl+nk+  ++a++++
+  sp|Q5M4Y1|MURG_STRT2  94 KIRPQALFSKGGFVSVPPVIASKLLRVPVYVHESDLSMGLANKIAYKFATTMF 146
+                           ************************************************99875 PP
+
+>> sp|A6QGX0|MURG_STAAE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|A6QGX0|MURG_STAAE   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|A6QGX0|MURG_STAAE  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|Q2FYL5|MURG_STAA8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|Q2FYL5|MURG_STAA8   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|Q2FYL5|MURG_STAA8  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|Q5HG02|MURG_STAAC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|Q5HG02|MURG_STAAC   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|Q5HG02|MURG_STAAC  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|Q6G9E3|MURG_STAAS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|Q6G9E3|MURG_STAAS   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|Q6G9E3|MURG_STAAS  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|Q8NWR4|MURG_STAAW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|Q8NWR4|MURG_STAAW   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|Q8NWR4|MURG_STAAW  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|A5ISU9|MURG_STAA9  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|A5ISU9|MURG_STAA9   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|A5ISU9|MURG_STAA9  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|A6U1N8|MURG_STAA2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|A6U1N8|MURG_STAA2   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|A6U1N8|MURG_STAA2  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|A7X2A2|MURG_STAA1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|A7X2A2|MURG_STAA1   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|A7X2A2|MURG_STAA1  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|P65481|MURG_STAAM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|P65481|MURG_STAAM   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|P65481|MURG_STAAM  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|P65482|MURG_STAAN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|P65482|MURG_STAAN   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|P65482|MURG_STAAN  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|Q2YY01|MURG_STAAB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   91.7   0.0   1.9e-27   1.1e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 91.7 bits;  conditional E-value: 1.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|Q2YY01|MURG_STAAB   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip++++E++  pgl+nk+  ++a++++
+  sp|Q2YY01|MURG_STAAB  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|Q7MAW5|MURG_PORGI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.8   0.0   3.7e-27   2.1e-24       1     137 [.      12     150 ..      12     152 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.8 bits;  conditional E-value: 3.7e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGH.HHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgle.efveeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+++a++L+rr +e +   ++++ ++e e+v+ +g+e+v ++++ +l +k   l+++k + ++ +++r a+++++
+  sp|Q7MAW5|MURG_PORGI  12 FIISGGGTGGHIFPAISIADALRRRYPECEilfVGAEGRMEmERVPRSGYEIVGLPIK-GLDRKH-LLSNYKVAIAVIRSMRLANKTIR 98 
+                           7899***************************9********83566*************.****98.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++pd v+g+ggy++++ l  a ++gip+ + Eqn+ +g++nkll+r a ++
+  sp|Q7MAW5|MURG_PORGI  99 NFRPDMVIGVGGYASGPTLRRAHSLGIPTLIQEQNSYAGVTNKLLSRGAHKI 150
+                           **********************************************988776 PP
+
+>> sp|A2RDL0|MURG_STRPG  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.8   0.0   3.8e-27   2.1e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.8 bits;  conditional E-value: 3.8e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++  e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +i++
+  sp|A2RDL0|MURG_STRPG   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++v+
+  sp|A2RDL0|MURG_STRPG  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTVY 144
+                           **************************************************998 PP
+
+>> sp|Q5XB05|MURG_STRP6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.8   0.0   3.8e-27   2.1e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.8 bits;  conditional E-value: 3.8e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++  e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +i++
+  sp|Q5XB05|MURG_STRP6   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++v+
+  sp|Q5XB05|MURG_STRP6  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTVY 144
+                           **************************************************998 PP
+
+>> sp|Q1JAT5|MURG_STRPB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.6   0.0   4.4e-27   2.5e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.6 bits;  conditional E-value: 4.4e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++  e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +i++
+  sp|Q1JAT5|MURG_STRPB   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIIA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++++
+  sp|Q1JAT5|MURG_STRPB  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|Q1JKY5|MURG_STRPC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.6   0.0   4.4e-27   2.5e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.6 bits;  conditional E-value: 4.4e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++  e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +i++
+  sp|Q1JKY5|MURG_STRPC   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIIA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++++
+  sp|Q1JKY5|MURG_STRPC  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|B2RIF1|MURG_PORG3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.8   0.0   3.7e-27   2.1e-24       1     137 [.      12     150 ..      12     152 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.8 bits;  conditional E-value: 3.7e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGH.HHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgle.efveeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+++a++L+rr +e +   ++++ ++e e+v+ +g+e+v ++++ +l +k   l+++k + ++ +++r a+++++
+  sp|B2RIF1|MURG_PORG3  12 FIISGGGTGGHIFPAISIADALRRRYPECEilfVGAEGRMEmERVPRSGYEIVGLPIK-GLDRKH-LLSNYKVAIAVIRSMRLANKTIR 98 
+                           7899***************************9********83566*************.****98.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++pd v+g+ggy++++ l  a ++gip+ + Eqn+ +g++nkll+r a ++
+  sp|B2RIF1|MURG_PORG3  99 NFRPDMVIGVGGYASGPTLRRAHSLGIPTLIQEQNSYAGVTNKLLSRGAHKI 150
+                           **********************************************988776 PP
+
+>> sp|C0M6J2|MURG_STRE4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.6   0.0   4.2e-27   2.4e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.6 bits;  conditional E-value: 4.2e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+v   + l  ++ + G+eV+ ++  +g+e++  +++gl  ++++i+++ kl++++ s+++l+++++++ ++ ++ +i++
+  sp|C0M6J2|MURG_STRE4   5 IIFTGGGTAGHVTLNLILIPKFIKDGWEVHyIGDDKGIEHQEiKKSGLdvTFHAIATG-KLRRYF-SWQNLLDIFKVGFGVMQSLFIIA 91 
+                           689**************************************99****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+l+g+pa+++E++  +gl+n++  r+a++++
+  sp|C0M6J2|MURG_STRE4  92 RLRPKALFSKGGFVSVPPVIAARLLGVPAFIHESDLSMGLANRIAYRFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|A1UTC5|MURG_BARBK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.4   0.7   4.9e-27   2.8e-24       1     138 [.       7     143 ..       7     144 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 90.4 bits;  conditional E-value: 4.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           vvl++gGT+G+++Pa Ala+eL++rG++V+lat ++ ++fv   ++ +++ i +  +l ++ + ++ +k+++  l+++ ++  ++++ +
+  sp|A1UTC5|MURG_BARBK   7 VVLVAGGTGGHLFPAEALAVELRQRGYDVHLATDERAKRFVrHFDEKHIHIISSA-TLVRH-HPFALIKTFWLLLRGMVQSWILFRKLR 93 
+                           79***************************************87777777778888.66665.5************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p +v gfggy  ++++  a+l g +++++Eqn+++g +n++l+ r+n ++
+  sp|A1UTC5|MURG_BARBK  94 PVLVGGFGGYPTVPPVWVAALTGRVTFIHEQNAVMGRANRVLATRVNAIA 143
+                           **********************************************9876 PP
+
+>> sp|C0MD54|MURG_STRS7  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.3   0.0   5.3e-27     3e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.3 bits;  conditional E-value: 5.3e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+v   + l  ++ + G+eV+ ++  +g+e++  +++gl++    i+++ kl++++ s+++l+++++++ ++ ++ +i++
+  sp|C0MD54|MURG_STRS7   5 IIFTGGGTAGHVTLNLILIPKFIKDGWEVHyIGDDNGIEHQEiKKSGLDVAFhtIATG-KLRRYF-SWQNLLDIFKVGFGVMQSLFIIA 91 
+                           689**************************************99****9755545****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+l+g+pa+++E++  +gl+n++  r+a++++
+  sp|C0MD54|MURG_STRS7  92 RLRPKALFSKGGFVSVPPVIAARLLGVPAFIHESDLSMGLANRIAYRFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|B4U1U4|MURG_STREM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.2   0.0   5.8e-27   3.2e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.2 bits;  conditional E-value: 5.8e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+v   + l  ++ + G+eV+ ++  +g+e++  +++gl  ++++i+++ kl++++ s+++l+++++++ ++ ++ +i++
+  sp|B4U1U4|MURG_STREM   5 IIFTGGGTAGHVTLNLILIPKFIKDGWEVHyIGDDNGIEHQEiKKSGLdvTFHAIATG-KLRRYF-SWQNLLDAFKVGFGVMQSLFIIA 91 
+                           689**************************************99****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+l+g+pa+++E++  +gl+n++  r+a++++
+  sp|B4U1U4|MURG_STREM  92 RLRPKALFSKGGFVSVPPVIAARLLGVPAFIHESDLSMGLANRIAYRFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|A5CWW1|MURG_VESOH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.5   0.0   4.7e-27   2.7e-24       1     137 [.       8     144 ..       8     146 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 90.5 bits;  conditional E-value: 4.7e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+++Pa+A+a+eL++   ++  l++  g+e+ + ++++++ +++ +  +l+ k   ++ +k ++    a+ ++ +i+ ++
+  sp|A5CWW1|MURG_VESOH   8 ILIMAGGTGGHIFPALAIANELKKHSSNIQwLGSNLGMENNIiPKHNIKLHTVSSV-GLRGKN-VISLIKAPFLLSYATLQVIKIFLKF 94 
+                           689*****************************************************.****99.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kpdvv+g+gg+ ++  ++ a+  +  ++++Eqn+ipg +nk+l++ a++ 
+  sp|A5CWW1|MURG_VESOH  95 KPDVVLGMGGFTSGIGGLVAWVFKTTLVIHEQNSIPGTTNKILNKIATKT 144
+                           *********************************************99986 PP
+
+>> sp|A1A2E9|MURG_BIFAA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.9   1.1   7.3e-27   4.1e-24       1     135 [.       7     143 ..       7     146 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 89.9 bits;  conditional E-value: 7.3e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHH.HHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglka.lrkakeil 84 
+                           +vlaggGT+G+v P++A+a+  ++ ++e     ++t  gle+ + ++ag e ++i+   ++++  + +k+ +++ +++ka   k++ il
+  sp|A1A2E9|MURG_BIFAA   7 IVLAGGGTAGHVNPLLAVAHVIRELEPEADiavVGTAVGLERDLvPQAGFELETIEKV-PFPR--RPNKAALQFPAKWKAeKAKVRDIL 92 
+                           79**************************99999*********999*************.****..77888888888887615689**** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                            +++++vvvgfggy +++++ aa + gip+ ++Eqn+++g++nkl +r+a 
+  sp|A1A2E9|MURG_BIFAA  93 TRHQAQVVVGFGGYTSAPVYAAAHSMGIPIAIHEQNARAGMANKLGARWAS 143
+                           **********************************************99986 PP
+
+>> sp|P65483|MURG_STRP1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.6   0.0     9e-27   5.1e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 89.6 bits;  conditional E-value: 9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++  e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +i++
+  sp|P65483|MURG_STRP1   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++++
+  sp|P65483|MURG_STRP1  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|P65484|MURG_STRP8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.6   0.0     9e-27   5.1e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 89.6 bits;  conditional E-value: 9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++  e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +i++
+  sp|P65484|MURG_STRP8   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++++
+  sp|P65484|MURG_STRP8  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|Q48SK9|MURG_STRPM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.6   0.0     9e-27   5.1e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 89.6 bits;  conditional E-value: 9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++  e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +i++
+  sp|Q48SK9|MURG_STRPM   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++++
+  sp|Q48SK9|MURG_STRPM  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|Q1J5S6|MURG_STRPF  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.6   0.0     9e-27   5.1e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 89.6 bits;  conditional E-value: 9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++  e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +i++
+  sp|Q1J5S6|MURG_STRPF   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++++
+  sp|Q1J5S6|MURG_STRPF  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|A8Z3Z7|MURG_STAAT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.3   0.0   5.4e-27     3e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.3 bits;  conditional E-value: 5.4e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|A8Z3Z7|MURG_STAAT   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip+ ++E++  pgl+nk+  ++a++++
+  sp|A8Z3Z7|MURG_STAAT  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTLIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|Q2FH20|MURG_STAA3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.3   0.0   5.4e-27     3e-24       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.3 bits;  conditional E-value: 5.4e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   ++l  +   +G+e   +++++g+e++  e++  +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk
+  sp|Q2FH20|MURG_STAA3   4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 
+                           79****************************************776644678999****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++kpd++++ gg+v+++++iaa++++ip+ ++E++  pgl+nk+  ++a++++
+  sp|Q2FH20|MURG_STAA3  91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTLIHESDLTPGLANKIALKFAKKIY 143
+                           *************************************************9997 PP
+
+>> sp|Q1JG11|MURG_STRPD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.6   0.0     9e-27   5.1e-24       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 89.6 bits;  conditional E-value: 9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e++  e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +i++
+  sp|Q1JG11|MURG_STRPD   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++++
+  sp|Q1JG11|MURG_STRPD  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|Q17WB5|MURG_HELAH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.9   0.0   7.1e-27     4e-24       1     138 [.       3     142 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 89.9 bits;  conditional E-value: 7.1e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+l+ggGT+G++  a Ala eL ++G e + l+++ g ++++ e + l  +    +++ ++ +k  ++k++ +l+ + ka  kakeilk
+  sp|Q17WB5|MURG_HELAH   3 VALTGGGTGGHLSIAKALAIELEKQGVEAIyLGSTYGQDKEWfEDSPLFSECyfFNTQ-GVVNKS-FFKKIGSLFLQAKAALKAKEILK 89 
+                           79**********************************************9887336666.777777.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++++++++++gg++a++a++a+ll++ip++++Eqn+i g  n++l+ +a+ v+
+  sp|Q17WB5|MURG_HELAH  90 KHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142
+                           *************************************************9987 PP
+
+>> sp|C6BYG6|MURG_DESAD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.1   0.1     6e-27   3.4e-24       1     138 [.       4     141 ..       4     142 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 90.1 bits;  conditional E-value: 6e-27
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +vl++gGT+G+v+Pa+A+a+e ++r ++ +   ++ +   +e+ve ag++++ ++++ ++   +   k +++l+ +  a+  a + +++
+  sp|C6BYG6|MURG_DESAD   4 IVLTTGGTGGHVFPALAVAHEIKNRFPQCEilfIGGKGPEREMVERAGISFKGLPAK-GVLGGG-IKKVFSSLWIV-SAMIMALKEIAS 89 
+                           79***************************999888888888888*************.999988.99999999999.************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +kpd+v+gfggy+   +++aa+l+g+p+ ++Eqn++pg++n++l + +++v+
+  sp|C6BYG6|MURG_DESAD  90 FKPDAVIGFGGYAGFCPVLAAWLLGVPTAIHEQNSVPGVTNRILGKVVKRVF 141
+                           *********************************************9999986 PP
+
+>> sp|Q6G2Q5|MURG_BARHE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.4   0.2     1e-26   5.7e-24       1     136 [.       7     141 ..       7     143 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 89.4 bits;  conditional E-value: 1e-26
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vla+gGT+G+++Pa A+a+eL++rG++V+l+t ++  +fv   ++ +++ i +  ++ ++   ++ +k+++  lk++ ++ +++ + +
+  sp|Q6G2Q5|MURG_BARHE   7 IVLAAGGTGGHLFPAEAVAVELRQRGYDVHLVTDERAQRFVrCFDEEHIHIISSA-TFTRRH-PFSLIKTFWMLLKGMGQSLALFYKLC 93 
+                           79***************************************75555566667777.776655.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           p +v gfggy   ++li a++ + +++++Eqn+++g +n++l+ ++  
+  sp|Q6G2Q5|MURG_BARHE  94 PVLVGGFGGYPTFPPLIVAAFMRRVTFIHEQNAVMGRANRVLAVFVSA 141
+                           *****************************************9988765 PP
+
+>> sp|A9IWA5|MURG_BART1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.4   0.1   9.9e-27   5.6e-24       1     135 [.       7     140 ..       7     143 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 89.4 bits;  conditional E-value: 9.9e-27
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           +vla+gGT+G+++Pa Ala+eL++rG++V+l+t ++ ++fv+    e+  i +  ++ +  + ++ +k++++ lk++ ++ +++ + +p
+  sp|A9IWA5|MURG_BART1   7 IVLAAGGTGGHLFPAEALAVELRQRGYDVHLITDERARSFVRRFDEEHTHIVSSATFTR-CHPFALIKTILSLLKGMGQSLRLFYKLRP 94 
+                           79***************************************666666666555548888.67*************************** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                            +v gfggy + ++l+ a l + +++++Eqn+++g +n++l+ ++ 
+  sp|A9IWA5|MURG_BART1  95 VLVGGFGGYPSFPPLFIAVLMRRVTFIHEQNAVMGRANRVLAIFVR 140
+                           ***************************************9987665 PP
+
+>> sp|Q8CUL4|MURG_OCEIH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.4   0.0     1e-26   5.7e-24       1     137 [.       7     144 ..       7     146 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 89.4 bits;  conditional E-value: 1e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++++ggGT+G+v   +Al    q+rG+e+  +++ +g+e+ +  + +g++++++ ++ kl++++ s ++lk+++++lk++ +a +i+ +
+  sp|Q8CUL4|MURG_OCEIH   7 ILFTGGGTAGHVIVNLALIPYYQERGWEIDyIGSYNGIERDLisPLDGVTYHSVSTG-KLRRYM-SKENLKDPFKVLKGTMQAYRIIGK 93 
+                           79*************************************999999************.****99.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            kp +v++ gg+v+++++ aa+l+g+p +++E++  pgl+nkl+  + ++v
+  sp|Q8CUL4|MURG_OCEIH  94 RKPSIVFSKGGFVSVPVVAAAKLRGVPSIIHESDYTPGLANKLSIPFTKRV 144
+                           ******************************************987777766 PP
+
+>> sp|A6LEU3|MURG_PARD8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.4   0.0     1e-26   5.6e-24       1     137 [.       6     144 ..       6     146 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 89.4 bits;  conditional E-value: 1e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGH.HHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgle.efveeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pa+++a+++++r ++ +   +++++++e ++v++ag+++v +++  ++ +  + ++++k   +  k+lr a+++++
+  sp|A6LEU3|MURG_PARD8   6 IIISGGGTGGHIFPAISIANTFKKRFPDAEilfVGAEDRMEmDKVPAAGYKIVGLPVS-GFDRA-HLMNNVKVMVRLAKSLRLARKTIR 92 
+                           6899**************************99********83566*************.99995.599********************* PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           e+kpd+ vg+ggy++++ l  a+++g+pa + Eqn+ +g++nkll+++a ++
+  sp|A6LEU3|MURG_PARD8  93 EFKPDIAVGVGGYASGPTLWMAASQGVPALIQEQNSYAGVTNKLLAKKASKI 144
+                           ************************************************9987 PP
+
+>> sp|Q6AE64|MURG_LEIXX  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   90.2   1.0   5.6e-27   3.1e-24       2     133 ..       5     138 ..       4     143 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 90.2 bits;  conditional E-value: 5.6e-27
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +laggGT+G+v P++A+a++L+r ++  +   l+t +gle+++ +++g+e  +i+   +++++    ++++ + e ++++r++ e+++ 
+  sp|Q6AE64|MURG_LEIXX   5 LLAGGGTAGHVNPLLAVADRLRRDDPAAEvlvLGTAEGLEARLvPARGYELATIPRL-PFPRRP-NAAAVRFPGEYRRSVRAVGELIRA 91 
+                           89************************99999**************************.****99.99999999**************** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133
+                             +++vvgfggy+a++a+ aa++a +p++++E+n++pgl+ +l +r+
+  sp|Q6AE64|MURG_LEIXX  92 RGIAAVVGFGGYAAAPAYSAARKAAVPLILHEANARPGLASRLGARY 138
+                           ****************************************9998876 PP
+
+>> sp|A1K3U6|MURG_AZOSB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.1   0.1   1.2e-26   6.9e-24       2     138 ..       5     141 ..       4     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 89.1 bits;  conditional E-value: 1.2e-26
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++gGT+G+++P +A+a++L+++G+++  ++ p+g+e+++ +++g+++  +  +  l+ k+  +++l+ + + l ++ +a   l++ k
+  sp|A1K3U6|MURG_AZOSB   5 LVMAGGTGGHIFPGIAVAEALRAKGWRIVwMGNPDGMEARIvPSRGYDTAWVRFG-ALRGKG-LVRKLLLPVNLLVGFWQALGQLRRIK 91 
+                           789****************************************************.******.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           pdvv+g+ggy+  + +  a+l+g p++++Eqn+++gl+n++l+  a++vl
+  sp|A1K3U6|MURG_AZOSB  92 PDVVLGMGGYITFPGGMMAALLGWPLVLHEQNSVAGLANRVLAGVADRVL 141
+                           *********************************************99997 PP
+
+>> sp|Q9PLG2|MURG_CHLMU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   89.3   0.0   1.1e-26   6.2e-24       1     137 [.       8     142 ..       8     144 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 89.3 bits;  conditional E-value: 1.1e-26
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           vvla+gGT+G++ Pa+A  +++ ++  eV l   +gl++f+  e  + ++ i+++   + +l+ +++++ + + ++++ +a + +k++ 
+  sp|Q9PLG2|MURG_CHLMU   8 VVLAVGGTGGHIIPALAARETFIKEKVEV-LLLGKGLTRFLeGEPDVLYYDIPSG--SPFSLRPNQMFSGARQLYQGYTAALRMIKSFA 93 
+                           79***************************.99*********88889*********..55555888888888888889************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pdv vgfg+y++++a++a+++ +ip++++Eqn +pg+vnkl++ +a+gv
+  sp|Q9PLG2|MURG_CHLMU  94 PDVAVGFGSYHSLPAILASIRKRIPLFLHEQNVVPGKVNKLFSHFAKGV 142
+                           ***********************************************98 PP
+
+>> sp|Q1GRX9|MURG_SPHAL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   88.8   0.4   1.6e-26   8.9e-24       1     138 [.       7     142 ..       7     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 88.8 bits;  conditional E-value: 1.6e-26
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++la+gGT+G++ Pa Ala+eL +rGh+V l++ ++  +   + a+le++ ++++ ++      l+ lk +++ +k++r a e++ ++ 
+  sp|Q1GRX9|MURG_SPHAL   7 FLLAAGGTGGHMLPAYALADELIARGHRVALVSDDRGLKIPgAPAELETHVLPAG-RASG--GPLGWLKGALAIRKGRRMAIELIDDFD 92 
+                           79****************************999999999999*************.4444..69************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p+vvvgfggy +++ l+aa + + p++++Eqn++ g vn+l++ r++ v+
+  sp|Q1GRX9|MURG_SPHAL  93 PAVVVGFGGYPSLPSLLAAGATKRPRVIHEQNAVLGRVNRLMAPRVDAVA 142
+                           ***********************************************997 PP
+
+>> sp|Q751Z4|ATG26_ASHGO  Sterol 3-beta-glucosyltransferase OS=Ashbya gossypii GN=ATG26 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   88.7   0.0   1.6e-26   9.1e-24       3     138 ..     781     913 ..     779     914 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 88.7 bits;  conditional E-value: 1.6e-26
+                            EE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHHH CS
+        Glyco_transf_28   3 laggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkake 82 
+                            ++++G+rGdv+P++Al+++L ++Gh+V ++++ ++ ++v+++gl++++i++d        v++ +  + ++ ++e+a+        ++
+  sp|Q751Z4|ATG26_ASHGO 781 MLTIGSRGDVQPYIALGKGLLQEGHRVVVISHAEFGDWVRSHGLQFRAIAGDpaelmalmVQHGS--MNVGLIREAAST-------FR 859
+                            789*************************************************9777666666666..566666666666.......99 PP
+
+                            HHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  83 ilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             + ++  ++ ++++  +  ++li++++a++ +++aE+++ip+++++++p++ ++ +
+  sp|Q751Z4|ATG26_ASHGO 860 NWIRDLLETAWEAC--QGIDVLIESPSAMAGIHIAEALQIPYFRAFTMPWTKTRSY 913
+                            99999999998888..788999*****************************98876 PP
+
+>> sp|A4VTK4|MURG_STRSY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   88.2   0.0   2.4e-26   1.3e-23       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 88.2 bits;  conditional E-value: 2.4e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l  ++ ++G+eV+ ++  +g+e++   ++gl+++   i+++ kl++++ s+++++++++++ ++ ++ +i++
+  sp|A4VTK4|MURG_STRSY   4 IVFTGGGTVGHVTLNLLLIPRFLEEGWEVHyIGDGNGIEHEQvVKSGLDVHFhsIATG-KLRRYF-SFQNMLDVFKVGFGVLQSLTIIA 90 
+                           79*************************************987799998766655****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+l+++p++++E++  +gl+nk+  ++a++++
+  sp|A4VTK4|MURG_STRSY  91 KIRPQALFSKGGFVSVPPVIAANLLRVPVFIHESDLTMGLANKIAYKFATTMY 143
+                           *************************************************9886 PP
+
+>> sp|A4VZT9|MURG_STRS2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   88.2   0.0   2.4e-26   1.3e-23       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 88.2 bits;  conditional E-value: 2.4e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l  ++ ++G+eV+ ++  +g+e++   ++gl+++   i+++ kl++++ s+++++++++++ ++ ++ +i++
+  sp|A4VZT9|MURG_STRS2   4 IVFTGGGTVGHVTLNLLLIPRFLEEGWEVHyIGDGNGIEHEQvVKSGLDVHFhsIATG-KLRRYF-SFQNMLDVFKVGFGVLQSLTIIA 90 
+                           79*************************************987799998766655****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+l+++p++++E++  +gl+nk+  ++a++++
+  sp|A4VZT9|MURG_STRS2  91 KIRPQALFSKGGFVSVPPVIAANLLRVPVFIHESDLTMGLANKIAYKFATTMY 143
+                           *************************************************9886 PP
+
+>> sp|B3QWT7|MURG_CHLT3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   88.7   0.0   1.6e-26   9.2e-24       2     138 ..       4     146 ..       3     147 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 88.7 bits;  conditional E-value: 1.6e-26
+                           EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------....-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakl...eslktlkelaeglkalrkakei 83 
+                           ++aggGT+G+v+Pa+A+a+e  r   + +   ++t++g+e++  +++g +++ i++  ++++ +   e +++lk + +  ++l +   i
+  sp|B3QWT7|MURG_CHLT3   4 IFAGGGTGGHVFPAIAIAQEILRTQQNAEiqfVGTERGIEATAvPKQGFPMHLIPVA-GVKRGFspkELFENLKVPMRLQRSLSACHDI 91 
+                           79******************99988888778***********99*************.6666552223677889999999********* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           l+++kp+vv+g+gg+v+++++ +a + +ip+ + Eqn+ pg++++ll+ ra  v+
+  sp|B3QWT7|MURG_CHLT3  92 LQREKPNVVIGTGGFVSGPIVWEAQSKKIPTLIQEQNSMPGVTTRLLSLRASEVH 146
+                           *************************************************999887 PP
+
+>> sp|Q6AJ53|MURG_DESPS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   88.9   0.0   1.4e-26     8e-24       1     137 [.       9     147 ..       9     149 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 88.9 bits;  conditional E-value: 1.4e-26
+                           EEEE-------HHHHHHHHHHHHH-..--EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrr..GheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G+++Pa+A a+++ r+  G eV  ++t++++++++ e +g + v+i++  +l+ k  + + +k l+    +  +a +il+
+  sp|Q6AJ53|MURG_DESPS   9 ILLTGGGTGGHLFPAIAAAQQFCREypGAEVLfVGTKRKMDAETlERYGFKGVAINSY-GLKGKN-MRELVKALLVLPISCLQALFILA 95 
+                           79********************9986677888**************************.999999.99999999999999********* PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++pd+v+g+ggyv ++++  a+l++ p+ ++Eqn++pgl+n+ l++ +++v
+  sp|Q6AJ53|MURG_DESPS  96 RFRPDLVLGVGGYVTGPVVAMAKLCRRPTLIHEQNSVPGLANRKLAKLVDRV 147
+                           *******************************************999999887 PP
+
+>> sp|B9K6P7|MURG_THENN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   88.7   0.2   1.7e-26   9.4e-24       1     139 []       4     146 ..       4     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 88.7 bits;  conditional E-value: 1.7e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeil 84 
+                           v+ aggGT+G+++P++A+ ++L +   e +   +a++ +++e+v ++++ e++ +++d  +l + l ++k+++++a++ +a+ kak+ l
+  sp|B9K6P7|MURG_THENN   4 VAAAGGGTGGHLYPLLAILETLSKDV-ETKvlfFAVKGKIDEKVvKQEHPEYEVVTLDvRGLFRPLYHPKNFWRAAKVVNAILKAKKEL 91 
+                           5789******************9976.66667*************8888888777777558889999********************** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                            ++kpdv+v +ggy+++++++aa+  g+p++++Eqn +pgl+ k+++++a +++v
+  sp|B9K6P7|MURG_THENN  92 LRFKPDVIVLTGGYISGVVGLAAKNMGVPIFLHEQNVVPGLAVKTVAKYARKIFV 146
+                           **************************************************99975 PP
+
+>> sp|Q8K6R7|MURG_STRP3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   87.7   0.0   3.3e-26   1.9e-23       1     138 [.       5     144 ..       5     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 87.7 bits;  conditional E-value: 3.3e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e+   e++gl  ++++i+++ kl++++ s+++l +++++  +l ++ +i++
+  sp|Q8K6R7|MURG_STRP3   5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHIEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 
+                           79**************************************999****8335677****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v++++++aa+l+g p++++E++  +gl+nk+  ++a++++
+  sp|Q8K6R7|MURG_STRP3  92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144
+                           *************************************************9876 PP
+
+>> sp|Q54IL5|UGT52_DICDI  UDP-sugar-dependent glycosyltransferase 52 OS=Dictyostelium discoideum GN=ugt52 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   88.3   0.0   2.2e-26   1.3e-23       1     138 [.    1166    1303 ..    1166    1304 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 88.3 bits;  conditional E-value: 2.2e-26
+                             EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----......S------.-HHHCCSHHHHHHHHHH CS
+        Glyco_transf_28    1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpd......vklwakleslktlkelaeglkalrk 79  
+                             ++++++G+rGd++P++Al  +L+++Gh+V+lat++ +++ + +e gl+++p+g+d      +++++ ++++k++ke++++      
+  sp|Q54IL5|UGT52_DICDI 1166 ITILTIGSRGDIQPFIALSLGLKEYGHNVTLATHELYRDLIsKEFGLNYQPLGGDprelmdLCVRNGIFTPKFIKEALSR------ 1245
+                             6799*********************************************************9999999************...... PP
+
+                             HHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   80 akeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                              ++++ ++   +++++++ +++++lia++ + + +++ E ++ip++ ++++p ++++ +
+  sp|Q54IL5|UGT52_DICDI 1246 -FRSFIDDLLLTCWKAVQNSNTQVLIATPGCFAGPHIGEVLQIPFFNAFTMPFTRTRTY 1303
+                             .*****************************************************99976 PP
+
+>> sp|B3DQN1|MURG_BIFLD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   87.7   0.4   3.3e-26   1.9e-23       1     135 [.       8     144 ..       8     148 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 87.7 bits;  conditional E-value: 3.3e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +vlaggGT+G+v P++A+a + ++ ++      ++t  gle+ + +eag+e  +i+   +++++   l +l+ +a+  +++ k++ il+
+  sp|B3DQN1|MURG_BIFLD   8 IVLAGGGTAGHVNPLLAVAGAIRDIEPTAQvtvIGTAVGLEKDLvPEAGYELDTIEKV-PFPRRP-NLYMLRFPAKWKRETAKVRSILE 94 
+                           79**********************99987777************9*************.****99.9********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                              +dvv+gfggy++++++  a + gip+ ++Eqn+++g++nkl +r+a+
+  sp|B3DQN1|MURG_BIFLD  95 TRHADVVAGFGGYASAPVYATAHKMGIPIAIHEQNARAGMANKLGARWAD 144
+                           ***********************************************998 PP
+
+>> sp|Q8CY50|MURG_BIFLO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   87.7   0.4   3.3e-26   1.9e-23       1     135 [.       8     144 ..       8     148 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 87.7 bits;  conditional E-value: 3.3e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +vlaggGT+G+v P++A+a + ++ ++      ++t  gle+ + +eag+e  +i+   +++++   l +l+ +a+  +++ k++ il+
+  sp|Q8CY50|MURG_BIFLO   8 IVLAGGGTAGHVNPLLAVAGAIRDIEPTAQvtvIGTAVGLEKDLvPEAGYELDTIEKV-PFPRRP-NLYMLRFPAKWKRETAKVRSILE 94 
+                           79**********************99987777************9*************.****99.9********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                              +dvv+gfggy++++++  a + gip+ ++Eqn+++g++nkl +r+a+
+  sp|Q8CY50|MURG_BIFLO  95 TRHADVVAGFGGYASAPVYATAHKMGIPIAIHEQNARAGMANKLGARWAD 144
+                           ***********************************************998 PP
+
+>> sp|Q6MIG1|MURG_BDEBA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   87.7   0.0   3.3e-26   1.8e-23       1     137 [.       7     145 ..       7     147 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 87.7 bits;  conditional E-value: 3.3e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v+aggGT+G+++P +A+ar+Lq+ ++ ++   ++t +gle+++ + +g + + i+++ +l+ k   ++++k+l++   +l ++ ++l 
+  sp|Q6MIG1|MURG_BDEBA   7 IVIAGGGTGGHIYPGIAIARALQKLDPSIEvhfVGTARGLESKIvPREGFPLHLIESG-QLNVKS-PIQKMKTLLKIPVGLWQSIRLLG 93 
+                           79************************988877**************************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           + kp +v+g+ggy++++ ++aa+  g  + v E n+ pg++n++l+r++++ 
+  sp|Q6MIG1|MURG_BDEBA  94 QLKPLYVIGVGGYASGPFVLAASIIGFNTAVWEPNAMPGMANRILSRFVDKC 145
+                           *************************************************986 PP
+
+>> sp|Q7U3U6|MURG_SYNPX  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   88.0   0.4   2.7e-26   1.5e-23       2     137 ..       5     137 ..       4     139 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 88.0 bits;  conditional E-value: 2.7e-26
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpd.vklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++a+ GT+G+++Pa+A+a++L + +++Vr l++p++le+++  a ++  +++++ +++ +  + ++ l+ la+g     ++ +++++++
+  sp|Q7U3U6|MURG_SYNPX   5 LIAASGTGGHLFPALAVAEALPE-DWQVRwLGVPDRLETQLVPARYSLFTVNAGgLQGSRLSKAVQLLLLLAAG----VSVARLIRRER 88 
+                           799******************86.78***************555666666666611555545555555555555....*********** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++v+++ggy+a++a++aa+++g+p++++E+n+ipg v++ll r++  v
+  sp|Q7U3U6|MURG_SYNPX  89 IQLVLSTGGYIAAPAILAARFCGVPTVLHEANAIPGRVTRLLGRFCGAV 137
+                           *****************************************99988666 PP
+
+>> sp|B7GQ78|MURG_BIFLI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   87.5   0.4     4e-26   2.2e-23       1     135 [.       8     144 ..       8     148 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 87.5 bits;  conditional E-value: 4e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +vlaggGT+G+v P++A+a + ++ ++      ++t  gle+ + +eag+e  +i+   +++++   l +l+ +a+  +++ k++ il+
+  sp|B7GQ78|MURG_BIFLI   8 IVLAGGGTAGHVNPLLAVAGAIRDIEPTAQvtvIGTAVGLEKDLvPEAGYELDTIEKV-PFPRRP-DLYMLRFPAKWKRETAKVRSILE 94 
+                           79**********************99987777************9*************.*****9.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                              +dvv+gfggy++++++  a + gip+ ++Eqn+++g++nkl +r+a+
+  sp|B7GQ78|MURG_BIFLI  95 TRHADVVAGFGGYASAPVYATAHKMGIPIAIHEQNARAGMANKLGARWAD 144
+                           ***********************************************998 PP
+
+>> sp|Q0UY53|ATG26_PHANO  Sterol 3-beta-glucosyltransferase OS=Phaeosphaeria nodorum GN=ATG26 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   86.7   0.0   6.8e-26   3.8e-23       2     138 ..     956    1089 ..     955    1090 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 86.7 bits;  conditional E-value: 6.8e-26
+                             EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHH CS
+        Glyco_transf_28    2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrk 79  
+                             v +++G+rGdv+P+++l +eL ++Gh+ r+at+ ++e++v+++g+++ p+++d        v++    ++++++ke+ ++      
+  sp|Q0UY53|ATG26_PHANO  956 VCLTIGSRGDVQPYISLCKELLKEGHKARIATHAEFEPWVRKHGIDFAPVDGDpaelmricVEHGM--FTYGFIKEANSK------ 1033
+                             6789*******************************************************7777777..8***********...... PP
+
+                             HHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   80 akeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                              ++ + ++ +  +++++  + +++li++++ ++ ++vaE++ ip+++++++p+ +++++
+  sp|Q0UY53|ATG26_PHANO 1034 -FRGWLDDVCSSSWRAC--QGADVLIESPSTMAGIHVAEALEIPYFRAFTMPWSRTRAY 1089
+                             .8888888877777777..8999*******************************99987 PP
+
+>> sp|Q8DVE2|MURG_STRMU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   86.8   0.0   6.4e-26   3.6e-23       1     138 [.       6     145 ..       6     146 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 86.8 bits;  conditional E-value: 6.4e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH--..-EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeag..leavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ + g+e++  e++   + +++i+++ kl++++ slk++++++++++++ ++ +i+ 
+  sp|Q8DVE2|MURG_STRMU   6 IIFTGGGTVGHVTLNLLLIPRFLKDGWEVHyIGDKHGIEHEQiEQSDfdVIFHSIATG-KLRRYF-SLKNVLDVFKVGWGVLQSLTIMV 92 
+                           689************************************998888761166777****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+v+++ gg+v++++++aa+l++ip++v+E++  +gl+n++  ++a++++
+  sp|Q8DVE2|MURG_STRMU  93 KVRPQVLFSKGGFVSVPPVVAANLLRIPVFVHESDLSMGLANRIAYKFATTMY 145
+                           *************************************************9876 PP
+
+>> sp|Q6N411|MURG_RHOPA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   88.2   0.6   2.3e-26   1.3e-23       1     138 [.       7     143 ..       7     144 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 88.2 bits;  conditional E-value: 2.3e-26
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE....----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp....igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++la+gGT+G+++Pa Al++ L rrG++Vrl+t  + ++    +gl + +    ++++ +++ +   ++  k++++ + +   a+ ++ 
+  sp|Q6N411|MURG_RHOPA   7 ILLAAGGTGGHLFPAEALGVVLIRRGYRVRLVTDHRATRY---SGLFTAEmtdvVPSE-TVRGRT-PWALAKTALKLGSGALLAFNLIG 90 
+                           79********************************999998...555555533345566.777766.9999******************* PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + kp++vvgfggy  +++l+aa+++++p+ ++Eqn+++g +n++l+ r++ ++
+  sp|Q6N411|MURG_RHOPA  91 RLKPAAVVGFGGYPTLPPLLAATWRRVPTLIHEQNAVMGRANRFLAPRVDAIA 143
+                           ************************************************99875 PP
+
+>> sp|Q6CUV2|ATG26_KLULA  Sterol 3-beta-glucosyltransferase OS=Kluyveromyces lactis GN=ATG26 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   87.0   0.0   5.6e-26   3.2e-23       2     138 ..     739     872 ..     738     873 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 87.0 bits;  conditional E-value: 5.6e-26
+                            EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 
+                             l+++G+rGdv+P++Ala++Lq++GheV++ t+ ++++++ ++++ +++i ++        v++ +  + ++ l+++  +       +
+  sp|Q6CUV2|ATG26_KLULA 739 GLLTIGSRGDVQPYIALAKGLQAEGHEVIILTHGEFKDWIVSHNIGFREISGNpaelislmVQHGS--MNMGLLRDASTN-------F 817
+                            589******************************************************988877777..778888888888.......7 PP
+
+                            HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28  82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                             ++ +   d+  +++g++  ++li++++a++ +++aE++ ip+++++++p+++++++
+  sp|Q6CUV2|ATG26_KLULA 818 STWISSLLDT--AWEGCQGIDILIESPSAMAGIHIAEALRIPYFRAFTMPWTRTRAY 872
+                            7777777444..48999************************************9987 PP
+
+>> sp|Q1MPB9|MURG_LAWIP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   87.6   0.1   3.6e-26     2e-23       1     138 [.       5     140 ..       5     141 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 87.6 bits;  conditional E-value: 3.6e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+v+Pa+A+a+++ ++  +   ++++ g e++  ++ +++++ ++++ ++    +++k+++ l++  ka+ ka++il++ 
+  sp|Q1MPB9|MURG_LAWIP   5 IAITTGGTGGHVYPALAVAEQFHDKA-DLFfIGSQYGPEAEMvKTFNIPFYGLPVR-GVLG--RKWKAFSALYSMIKAIVKARKILQKC 89 
+                           789**********************9.5555********9999*************.8888..999*********************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            pd+vvgfg+y++ ++l+aa+l +ip+ ++Eqn +pgl+n+ l+r a++v+
+  sp|Q1MPB9|MURG_LAWIP  90 MPDIVVGFGSYASFAPLVAAKLKRIPTAIHEQNVRPGLANRMLARLADRVF 140
+                           ************************************************997 PP
+
+>> sp|Q8R5N5|MURG_FUSNN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   84.4   0.0   3.5e-25     2e-22       1     135 [.       7     135 ..       7     139 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 84.4 bits;  conditional E-value: 3.5e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v+l++gGT+G+++Pa+A+a++L+ +G+e   +++ +++e+ + +e+g ++  +++          ++ lk++ + lka+r a +++ke+
+  sp|Q8R5N5|MURG_FUSNN   7 VMLTTGGTGGHIYPALAVADRLKIKGIEAVfVGSMERMEKDLvPESGHKFIGVDIS--------VPRGLKNIRKYLKAIRTAYKVIKEE 87 
+                           68**************************999***********9*******666655........55677888888888*********** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           kpd+++gfg+y++++++ia +l++ ++++ Eqn   g +nk + + a+
+  sp|Q8R5N5|MURG_FUSNN  88 KPDAIIGFGNYISVPVIIAGILLRKKIYLQEQNVNIGSANKMFYKIAK 135
+                           ******************************************999887 PP
+
+>> sp|Q3ANV3|MURG_CHLCH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   86.7   0.1   6.7e-26   3.8e-23       1     139 []       3     147 ..       3     147 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 86.7 bits;  conditional E-value: 6.7e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----...S------.-HHHCCSHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd...vklwakleslktlkelaeglkalrkake 82 
+                           v++aggGT+G+++Pa+A+a eLqr  ++V    ++t+ g+e++  +  g++ + + ++    ++  kl  +++l+ l+++ ++l  + +
+  sp|Q3ANV3|MURG_CHLCH   3 VLFAGGGTGGHLYPAIAMAAELQRLSPNVSvafVGTKSGIEATEvPRLGYKLHLVSVRglkRGFSPKL-LIENLRILFDFARSLGITIQ 90 
+                           79***************************************9988**********9994444444444.66788889999********* PP
+
+                           HHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  83 ilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           +l+++ pdvvvg+gg+v++++l+aa l+g ++ + Eqn+ pg++++ll+ +a  v+v
+  sp|Q3ANV3|MURG_CHLCH  91 LLRSEAPDVVVGTGGFVSAPLLFAAQLLGKKTLIQEQNAFPGVTTRLLSLFASEVHV 147
+                           *************************************************99998875 PP
+
+>> sp|A8AW15|MURG_STRGC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.9   0.0   1.2e-25   6.7e-23       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 85.9 bits;  conditional E-value: 1.2e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ ++G++V+ ++ ++g+e +   ++gl  ++++++++ kl++++ s+++l++ +++ ++++++  i+ 
+  sp|A8AW15|MURG_STRGC   4 ILFTGGGTVGHVTLNLLLIPKFIKEGWQVHyIGDKNGIEYQEiQKSGLdvTFHSVATG-KLRRYF-SWQNLLDGFKVIWGIFQSLSIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+l+g+p++v+E++   gl+nk+  + a++++
+  sp|A8AW15|MURG_STRGC  91 KVRPQALFSKGGFVSVPPVIAARLSGVPVYVHESDLSIGLANKIAYKCATKMY 143
+                           *********************************************99999876 PP
+
+>> sp|B8DP79|MURG_DESVM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   86.1   1.2   1.1e-25   5.9e-23       1     138 [.       4     142 ..       4     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 86.1 bits;  conditional E-value: 1.1e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+l++gGT+G+++Pa+A+a+e  rr ++ r   l+ + g e+ + + agle+v ++++ +++   + l++l  + + + ++ +a  +++
+  sp|B8DP79|MURG_DESVM   4 VILTTGGTGGHIFPALAVAEEITRRYPKARilfLGGQYGPEADLaARAGLEYVGLPVR-GVMG--RGLRALAAAGAMGLGVWRAVSVVR 89 
+                           78********************************************************.9999..7799999999999*********** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++ pd+ vgfggy+a + ++aa+l+g pa ++Eqn+ipgl+n+ll   + +v+
+  sp|B8DP79|MURG_DESVM  90 RFDPDIAVGFGGYAAFAGVLAARLCGRPAAIHEQNAIPGLTNRLLGHVVQRVF 142
+                           *******************************************9988777765 PP
+
+>> sp|Q728U8|MURG_DESVH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   86.5   0.8   8.2e-26   4.6e-23       1     138 [.       4     142 ..       4     143 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 86.5 bits;  conditional E-value: 8.2e-26
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+l++gGT+G+++Pa+A+a+e ++r +e     ++   g e+ + + agl++v ++++ ++    + ++++  ++    ++ +a +++ 
+  sp|Q728U8|MURG_DESVH   4 VILTTGGTGGHIFPALAVAEEIRARYPECSvlfMGGLYGPEADLaARAGLDFVGLPVR-GVLG--RGVRAIGAAFGMAAGIARAYAVMG 89 
+                           78**************************999999999999*9999*************.6555..4455555555555669999***** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++ pd+v+gfggy+a + ++aa+l+g pa ++Eqn++pgl+n++l+r + +v+
+  sp|Q728U8|MURG_DESVH  90 RFDPDIVLGFGGYAAFAGVLAARLRGRPAAIHEQNSVPGLTNRVLSRVVPRVF 142
+                           ***********************************************999886 PP
+
+>> sp|Q8NJS1|ATG26_LEPMC  Sterol 3-beta-glucosyltransferase OS=Leptosphaeria maculans GN=ATG26 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   86.1   0.0     1e-25   5.9e-23       2     138 ..     960    1093 ..     959    1094 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 86.1 bits;  conditional E-value: 1e-25
+                             EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHH CS
+        Glyco_transf_28    2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrk 79  
+                             v +++G+rGdv+P++Al +eL ++Gh+ r+at+ ++e++v+++g+++ p++++        v++    ++++++ke+ ++      
+  sp|Q8NJS1|ATG26_LEPMC  960 VCLTIGSRGDVQPYIALCKELLKEGHKPRIATHAEFEPWVRKHGIDFAPVDGNpaelmricVEHGM--FTYNFMKEANSK------ 1037
+                             6789**************************************************99*997777777..8999****9999...... PP
+
+                             HHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   80 akeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                              ++ + ++ +  +++++  + +++li++++ ++ +++aE++ ip+++++++p+++++++
+  sp|Q8NJS1|ATG26_LEPMC 1038 -FRGWLDDVCSSSWRAC--QGADVLIESPSTMAGIHIAEALEIPYFRAFTMPWTRTRAY 1093
+                             .7888888877777777..8999********************************9987 PP
+
+>> sp|Q5KK25|ATG26_CRYNE  Sterol 3-beta-glucosyltransferase OS=Cryptococcus neoformans GN=ATG26 PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   86.0   0.0   1.1e-25   6.2e-23       4     138 ..    1039    1170 ..    1036    1171 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 86.0 bits;  conditional E-value: 1.1e-25
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----......S------.-HHHCCSHHHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd......vklwakleslktlkelaeglkalrkakei 83  
+                             +++G+rGdv+P++Al ++Lq++Gh  ++at+ +++++ve +g++++++g+d      +++ + ++++++lke +++       ++ 
+  sp|Q5KK25|ATG26_CRYNE 1039 LTIGSRGDVQPYIALCKGLQAEGHITKIATHGEYKAWVEGHGIAFESVGGDpaelmqMCVDNGMFTVSFLKEGLQK-------FRG 1117
+                             79**************************************************999997777777999999999999.......899 PP
+
+                             HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + ++  + +++++  +  ++li++++a+  ++vaE++ ip+ +++++p+++++++
+  sp|Q5KK25|ATG26_CRYNE 1118 WLDDLLNSSWEAC--QGSDLLIESPSAMSGIHVAEALRIPYYRAFTMPWTRTRAY 1170
+                             9999977777776..788999******************************9987 PP
+
+>> sp|Q8YZI3|MURG_ANASP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.4   0.0   1.8e-25   9.9e-23       2     135 ..       9     139 ..       8     143 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 85.4 bits;  conditional E-value: 1.8e-25
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+++Pa+Ala++L ++++e  l++p++le+++  + ++  +i+++ ++++ l  ++ l+ l +   ++ k++++lk+ + +
+  sp|Q8YZI3|MURG_ANASP   9 LIAASGTGGHLFPAIALAEKLPDYEIEW-LGVPNRLETQLVPKQYPLNTIAVE-GFQQGL-GISSLVILGKLIGSILKVRRLLKQGNFQ 94 
+                           799**********************776.***********8888999999999.999988.**************************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                            vv +ggy+a++a+iaa+++g p++ +E+n++pg+v++++  ++ 
+  sp|Q8YZI3|MURG_ANASP  95 GVVTTGGYIAGPAVIAARSLGLPVIFHESNALPGKVTRFFGPWCS 139
+                           **************************************9987765 PP
+
+>> sp|B9DUV6|MURG_STRU0  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.3   0.0   1.8e-25     1e-22       1     138 [.       5     144 ..       5     145 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 85.3 bits;  conditional E-value: 1.8e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT G+v   + l  ++ + G+eV+ ++ ++g+e +   ++g+  ++++i+++ kl++++ s+++l +++++  +l ++  i+ 
+  sp|B9DUV6|MURG_STRU0   5 ILFTGGGTVGHVTLNLILIPKFLKDGWEVHyIGDKKGIEYQEiQKSGYpvTFHAIKTG-KLRRYF-SWQNLIDVFKVATGLLQSLVIIN 91 
+                           79**************************************99988876116777****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + kp+++++ gg+v+++++ia++l g+p++v+E++  +gl+nk+  ++a +++
+  sp|B9DUV6|MURG_STRU0  92 KVKPQALFSKGGFVSVPPVIASRLMGVPVFVHESDLSMGLANKIALKFASTMY 144
+                           ********************************************999987765 PP
+
+>> sp|Q3M935|MURG_ANAVT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.7   0.0   1.4e-25   7.7e-23       2     135 ..       9     139 ..       8     143 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 85.7 bits;  conditional E-value: 1.4e-25
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+++Pa+Ala++L ++++e  l++p++le+++  + ++  +i+++ ++++ l  l+ l+ l +   ++ k++++lk+ + +
+  sp|Q3M935|MURG_ANAVT   9 LIAASGTGGHLFPAIALAEKLPDYEIEW-LGVPNRLETQLVPKQYPLNTIAVE-GFQQGL-GLSSLVILGKLIGSILKVRRLLKQGNFQ 94 
+                           799**********************776.***********8888999999999.999988.**************************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                            vv +ggy+a++a+iaa+++g p++ +E+n++pg+v++++  ++ 
+  sp|Q3M935|MURG_ANAVT  95 GVVTTGGYIAGPAVIAARSLGLPVIFHESNALPGKVTRFFGPWCS 139
+                           **************************************9987765 PP
+
+>> sp|Q7VDZ2|MURG_PROMA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.7   0.0   1.4e-25   8.2e-23       2     138 ..       5     138 ..       4     139 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 85.7 bits;  conditional E-value: 1.4e-25
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+++a+eL +  +++  l++p++le+++  +++++  i+++ +l++  + l+++ +l++   a++ + +++k++++
+  sp|Q7VDZ2|MURG_PROMA   5 LIAASGTGGHIFPALSVAEELPES-WDISwLGVPERLENQLVPTKYDMTVIPVG-GLQS--KGLRKYFQLLKLILAIFFVIYLIKRKQI 89 
+                           799******************987.6***************5555555556666.6677..4488888889998999999********* PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++v+ +ggy+a++a+ia++l+gi ++++E+n+ pg+v++ll ++++ v+
+  sp|Q7VDZ2|MURG_PROMA  90 KLVFTTGGYIAAPAIIASKLCGINVILHESNSYPGKVTRLLGKFCDEVA 138
+                           ********************************************99886 PP
+
+>> sp|Q0I6M0|MURG_SYNS3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.7   0.1   1.4e-25   7.7e-23       2     139 .]       5     139 ..       4     139 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 85.7 bits;  conditional E-value: 1.4e-25
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+++a++L +  + Vr +++p++le+ +    ++  +++++ +l+   + l++l +l + l a  +++++++++++
+  sp|Q0I6M0|MURG_SYNS3   5 LVAASGTGGHLFPALSVADALLEP-WSVRwVGVPDRLETSLVPGRYPLTTVKAG-GLQG--RGLRKLIQLIQLLAASGSIRRLIQRERI 89 
+                           799******************976.7**************95555666666666.6677..5688999999999999************ PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           d+v+ +ggy+a++a++aa+++gip++++E+n+ipg v++ll r++++v+v
+  sp|Q0I6M0|MURG_SYNS3  90 DAVFTTGGYIAAPAILAARWCGIPVVLHESNAIPGRVTRLLGRFCTRVAV 139
+                           **********************************************9975 PP
+
+>> sp|B2J8J9|MURG_NOSP7  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.4   0.0   1.7e-25   9.6e-23       2     137 ..       9     141 ..       8     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 85.4 bits;  conditional E-value: 1.7e-25
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+++Pa+Ala++L ++ +e  l++p++le+++  ++++  +i+++ ++++ +  l+ ++ + +   ++ ++++ilk+ + +
+  sp|B2J8J9|MURG_NOSP7   9 LIAASGTGGHLFPAIALAEKLPDYQIEW-LGVPNRLETQLVPKEYPLNTIAVE-GFQQGF-GLSSIRIFGKLAGSIIEVRRILKQGNFQ 94 
+                           799********************99776.***********8899999999999.999988.**************************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            v+ +ggy+a++a+iaa+++g p++ +E+n++pg+v++++  ++  v
+  sp|B2J8J9|MURG_NOSP7  95 GVFTTGGYIAGPAVIAARSLGLPVVFHESNALPGKVTRFFGPWCSAV 141
+                           ***************************************99988776 PP
+
+>> sp|A5GPC2|MURG_SYNPW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   86.6   0.2   7.5e-26   4.2e-23       2     138 ..       5     138 ..       4     139 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 86.6 bits;  conditional E-value: 7.5e-26
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++a+ GT+G+++Pa+++a++L  +G+  + l++p++le+++  e + l++  ++++ +l+   + lk++++l++ l a r+++++++++
+  sp|A5GPC2|MURG_SYNPW   5 LIAASGTGGHLFPALSVADALP-AGWSAHwLGVPDRLETTLvpERYPLTT--VNAG-GLQG--RGLKKVVQLLRLLAASRDVRRLIRRN 87 
+                           799******************8.59***************9555555555..6666.6677..6689999999999999********** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +dvv+ +ggy+a++a+++a+++g+p++++E+n+ipg v++ll r +++v+
+  sp|A5GPC2|MURG_SYNPW  88 GIDVVFTTGGYIAAPAILGARWSGVPVVLHESNAIPGRVTRLLGRACTQVA 138
+                           *******************************************99999886 PP
+
+>> sp|B4RFS0|MURG_PHEZH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   86.5   1.6     8e-26   4.5e-23       2     137 ..       6     140 ..       5     142 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 86.5 bits;  conditional E-value: 8e-26
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH......HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv......eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 
+                           v+a+gGT+G+++Pa Ala++L +rG+++ la+ ++++         +  gl+a ++ p+       + +++++  +++l++   a++++
+  sp|B4RFS0|MURG_PHEZH   6 VVAAGGTGGHLFPAQALAEALIARGWRIVLASDERVAGLAqdfpaeRRIGLSAATYRPG-------DPVGMMRAGFAVLRGAMHARAAF 87 
+                           89********************************9987641111222335555555555.......9********************** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +e  pdvvvgfggy +++al+aa+l + p++++Eqn+++g +n++l+ ++ +v
+  sp|B4RFS0|MURG_PHEZH  88 REIGPDVVVGFGGYPSAPALVAAILDRRPTVIHEQNAVMGRTNRILAPHVRTV 140
+                           *********************************************99888776 PP
+
+>> sp|A1VBE8|MURG_DESVV  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.4   1.0   1.8e-25     1e-22       1     138 [.       4     142 ..       4     143 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 85.4 bits;  conditional E-value: 1.8e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+l++gGT+G+++Pa+A+a+e ++r +e     ++   g e+ + + agl++v ++++ ++    + ++++  ++    ++ +a +++ 
+  sp|A1VBE8|MURG_DESVV   4 VILTTGGTGGHIFPALAVAEEIRARYPECSvlfMGGLYGPEADLaARAGLDFVGLPVR-GVLG--RGVRAIGAAFGMAAGIARAYAVMG 89 
+                           78**************************999999999999*9999*************.6555..4455555555555669999***** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++ pd+v+gfggy+a + ++aa+l+g pa ++Eqn++pg++n++l+r + +v+
+  sp|A1VBE8|MURG_DESVV  90 RFDPDIVLGFGGYAAFAGVLAARLRGRPAAIHEQNSVPGVTNRVLSRVVPRVF 142
+                           ***********************************************999886 PP
+
+>> sp|B7IHN7|MURG_THEAB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.4   0.0   1.8e-25     1e-22       1     139 []       4     144 ..       4     144 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 85.4 bits;  conditional E-value: 1.8e-25
+                           EEEE-------HHHHHHHHHHHHH--.-EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrG.heVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++agg T+G+++Pa+A+ +eL +   ++V  + ++ +lee+v + ++++ v+++++ +l++ + s++++k+l++ ++a + + + lk+
+  sp|B7IHN7|MURG_THEAB   4 IAVAGGVTGGHLYPALAVLKELEKLTpIDVLyFTVSGKLEERVlKDYNYKKVSLKIQ-GLKRPVYSIENIKRLFKIFNANNIVLKELKK 91 
+                           789*********************9735888**************************.******************************* PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           +kpd+v+ +ggyv+ ++++aa++++ip+++ Eqn ipgl+n  l+ +a++v+v
+  sp|B7IHN7|MURG_THEAB  92 FKPDIVFVTGGYVSYPVGTAAKKLKIPLYIQEQNVIPGLANIKLSSFAKKVFV 144
+                           *************************************************9985 PP
+
+>> sp|Q7S1I0|ATG26_NEUCR  Sterol 3-beta-glucosyltransferase OS=Neurospora crassa GN=atg-26 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.0   0.0   2.3e-25   1.3e-22       4     138 ..    1016    1147 ..    1013    1148 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 85.0 bits;  conditional E-value: 2.3e-25
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81  
+                             +++G+rGdv+P++Al ++L ++Gh+ +++t++++++++e++g+e+ p+++d        +++    +++++l+e+ ++       +
+  sp|Q7S1I0|ATG26_NEUCR 1016 LTIGSRGDVQPYIALCKRLLEEGHRPKIVTHREFKDWIESHGIEFGPVEGDpselmricIENGT--FTYAFLREANSK-------F 1092
+                             79*************************************************9777774444444..677777777777.......7 PP
+
+                             HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + + ++  +  +++  ++  ++li++++a++ +++aE++gip+++++++p+++++++
+  sp|Q7S1I0|ATG26_NEUCR 1093 RGWLDELLTSAWEA--CQGSDLLIESPSAMAGIHIAEALGIPYFRAFTMPWTRTRAY 1147
+                             77877776666555..589999*******************************9987 PP
+
+>> sp|Q3AVX2|MURG_SYNS9  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.1   0.3   2.1e-25   1.2e-22       2     138 ..       5     138 ..       4     139 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 85.1 bits;  conditional E-value: 2.1e-25
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+a++L     +V  l++p++le+++  a  +  +++++ +l+   + +++l++l + l a   ++++++ +++
+  sp|Q3AVX2|MURG_SYNS9   5 LIAASGTGGHLFPALAVADALDGHC-QVSwLGVPDRLETELVPARFKLITVNAG-GLQG--RGITKLVQLIRLLAASITVRRLIRTHQI 89 
+                           799******************8876.9**************9999999999999.9999..77************************** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           d+v+ +ggy+a++a+++a+++g+pa+++E+n+ipg v++ll r++  v+
+  sp|Q3AVX2|MURG_SYNS9  90 DAVFTTGGYIAAPAILGARWCGVPAVLHESNAIPGRVTRLLGRFCSAVA 138
+                           *******************************************998886 PP
+
+>> sp|Q4WID6|ATG26_ASPFU  Sterol 3-beta-glucosyltransferase OS=Aspergillus fumigatus GN=atg26 PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   84.8   0.0   2.7e-25   1.5e-22       4     138 ..     907    1038 ..     904    1039 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 84.8 bits;  conditional E-value: 2.7e-25
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81  
+                             +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+++g+++ p+++d        v++    +++++lke+ ++       +
+  sp|Q4WID6|ATG26_ASPFU  907 LTIGSRGDVQPYIALCKGLLAEGHRPKIATHAEFEPWVRKHGIDFAPVEGDpaelmricVENGM--FTYSFLKEASQK-------F 983 
+                             79**************************************************999884444444..889999999888.......8 PP
+
+                             HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + + ++   ++ +++++++ ++li++++a++ +++aE++ ip+++++++p+ +++++
+  sp|Q4WID6|ATG26_ASPFU  984 RGWIDDL--LSSAWASCQDSDLLIESPSAMAGIHIAEALRIPYFRAFTMPWSRTRAY 1038
+                             8888888..666778889**********************************99987 PP
+
+>> sp|A1CYS1|ATG26_NEOFI  Sterol 3-beta-glucosyltransferase OS=Neosartorya fischeri (strain ATCC 1020 / DSM 3700 / FGSC 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   84.8   0.0   2.7e-25   1.5e-22       4     138 ..     916    1047 ..     913    1048 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 84.8 bits;  conditional E-value: 2.7e-25
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81  
+                             +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+++g+++ p+++d        v++    +++++lke+ ++       +
+  sp|A1CYS1|ATG26_NEOFI  916 LTIGSRGDVQPYIALCKGLLAEGHRPKIATHAEFEPWVRKHGIDFAPVEGDpaelmricVENGM--FTYSFLKEASQK-------F 992 
+                             79**************************************************999884444444..889999999888.......8 PP
+
+                             HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + + ++   ++ +++++++ ++li++++a++ +++aE++ ip+++++++p+ +++++
+  sp|A1CYS1|ATG26_NEOFI  993 RGWIDDL--LSSAWASCQDSDLLIESPSAMAGIHIAEALRIPYFRAFTMPWSRTRAY 1047
+                             8888888..666778889**********************************99987 PP
+
+>> sp|Q8DHY4|MURG_THEEB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   84.6   0.0     3e-25   1.7e-22       2     138 ..       8     141 ..       7     142 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 84.6 bits;  conditional E-value: 3e-25
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+a+eL +++  ++ l++ ++le+++   +++ ++++   +l+ k   +++l++l++++  + +++++lk+   
+  sp|Q8DHY4|MURG_THEEB   8 LIAASGTGGHLFPALAVAQELPEYE--IHwLGVRDRLENQLIPPHYPLHTVNFS-GLQGKT-PWAKLRPLWQFWGVFWQTRQLLKQGDF 92 
+                           799********************99..667***********8888888888888.889988.9************************** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + v+ +ggy+a++a++aa+++g +a+++E+n++pg+v+++l+ +++ v+
+  sp|Q8DHY4|MURG_THEEB  93 QGVFTTGGYIAAPAILAARSLGRVAILHESNALPGKVTRWLAPWCTLVA 141
+                           ******************************************9999886 PP
+
+>> sp|Q11RH5|MURG_CYTH3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   84.2   0.0   4.2e-25   2.4e-22       1     137 [.       9     147 ..       9     149 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 84.2 bits;  conditional E-value: 4.2e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++PavA+a++ ++r ++ +   ++++ ++e +  ++ag++++ + +  + ++kl sl++l  ++++  +++kak+i++
+  sp|Q11RH5|MURG_CYTH3   9 IIISGGGTGGHIYPAVAIANAIKARFPDSEilfVGAQGRMEMQKvPAAGYNIEGLWIS-GIQRKL-SLDNLAFPLKVIASYFKAKKIVS 95 
+                           6899*********************9999999********98877*************.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            +kpd+ +g+ggy++ ++l aa+++g+++ + Eqn+ +g++nk+l+++++ +
+  sp|Q11RH5|MURG_CYTH3  96 TFKPDIAIGVGGYASWPLLQAANASGVATLIQEQNSYAGVANKALSKKVKAI 147
+                           ************************************************9976 PP
+
+>> sp|A9BDG0|MURG_PROM4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   84.7   0.0   2.9e-25   1.6e-22       2     138 ..       5     138 ..       4     139 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 84.7 bits;  conditional E-value: 2.9e-25
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+a++L +  ++V  l+++++le+ +  ++++  +ig++ ++++  + +k ++++++ l a+ ++  +++++++
+  sp|A9BDG0|MURG_PROM4   5 LIAASGTGGHLFPALAVAEALPES-WKVSwLGVSDRLESSLIPKKYQLSTIGVE-GVQS--RGIKRIVQIFKLLAATGSVICLIRRNRI 89 
+                           799******************987.6***************99999********.9999..77************************** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++v+ +ggy+a++a++aa+l g +++++E+n+ipg++++ll r +++v+
+  sp|A9BDG0|MURG_PROM4  90 QIVLTTGGYIAVPAVLAAKLTGKKVILHESNAIPGKATRLLGRLCDKVA 138
+                           *****************************************99999986 PP
+
+>> sp|Q73L91|MURG_TREDE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.6   0.0   6.4e-25   3.6e-22       1     139 []       4     151 ..       4     151 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 83.6 bits;  conditional E-value: 6.4e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE........----S------.-HHHCCSHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavp........igpdvklwakleslktlkelaeglkal 77 
+                           vv++ggGT+G+++P +A+a++L     e r   +++ +g+++++ e+++l   +        i+++ kl++++ s++++ +++++  ++
+  sp|Q73L91|MURG_TREDE   4 VVFTGGGTGGHIFPGLAVAEALSSSL-ECRivwIGSAKGVDRKIvESSELYSASpsvlefigIPAG-KLRRYF-SFQNFIDVFKVAAGF 89 
+                           79********************9764.444559************999874443355555448888.******.*************** PP
+
+                           HHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  78 rkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                            k+++il + kp  v++ gg+v+++++ aa++++ip++ +E +  pgl++++++++an++lv
+  sp|Q73L91|MURG_TREDE  90 IKSFFILLKLKPVFVFSKGGFVSVPPCAAAKFLKIPVITHECDFSPGLATRINSKFANRILV 151
+                           ***********************************************************985 PP
+
+>> sp|C4XK69|MURG_DESMR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   85.4   0.6   1.7e-25   9.7e-23       2     138 ..       5     141 ..       4     142 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 85.4 bits;  conditional E-value: 1.7e-25
+                           EEE-------HHHHHHHHHHHHH-..--EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrr..GheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++gGT+G+++Pa+A+a++ +r   G +V ++   g e ++ ++agl++v+++++ ++    + +k+l  ++  l+a+  a + ++e+
+  sp|C4XK69|MURG_DESMR   5 IVTTGGTGGHIFPALAVAEAAMRLspGLDVLFIGGAGPEGELaAKAGLPFVALPAK-GVFG--RGIKALAAPFWMLRAFGLAGARIREF 90 
+                           689*******************985588999999999999999*************.8888..6689999999999************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +pdvv gfggy+   ++ aa+l g+p+ ++Eqn++pg++nk+l r++++v+
+  sp|C4XK69|MURG_DESMR  91 SPDVVCGFGGYAGFIPVAAARLMGVPTAIHEQNSVPGVTNKVLGRFVDRVF 141
+                           ************************************************997 PP
+
+>> sp|A1BAL5|MURG_PARDP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   84.2   1.3   4.1e-25   2.3e-22       1     138 [.       7     144 ..       7     145 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 84.2 bits;  conditional E-value: 4.1e-25
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp..igpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++a+gGT+G+++Pa +la++L ++G++V+l t ++ ++   +   e+    + +  + ++ +  l+ l  +++ + ++ +a ++++ +
+  sp|A1BAL5|MURG_PARDP   7 CLIAAGGTGGHMFPAQSLAETLLAQGWRVKLSTDERGARYAGAFPAEVARevVSSA-TTARGG-ALARLAVPFRIGAGVLAAIRAMRAD 93 
+                           689************************************99555555444437777.555556.9999********************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p+vvvgfggy   +a+ aal ++ip+ ++Eqngi+g vn +++rr+++v+
+  sp|A1BAL5|MURG_PARDP  94 RPAVVVGFGGYPTIPAMSAALVLRIPRMIHEQNGIMGRVNMAFARRVDRVA 144
+                           ************************************************986 PP
+
+>> sp|A3CLN6|MURG_STRSV  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.4   0.0   7.3e-25   4.1e-22       1     138 [.       4     143 ..       4     144 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 83.4 bits;  conditional E-value: 7.3e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v++ggGT G+v   + l  ++ ++G++V+ ++ + g+e +   ++gl  ++++++++ kl++++ s+++l++ +++ ++++++  i+ 
+  sp|A3CLN6|MURG_STRSV   4 IVFTGGGTVGHVTLNLLLIPKFIKEGWQVHyVGDKHGIEYQEiQKSGLdvTFHSVATG-KLRRYF-SWQNLLDGFKVVWGIFQSLGIML 90 
+                           79***************************************99***98334666****.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +p+++++ gg+v+++++iaa+l+g+p++v+E++   gl+nk+  + a++++
+  sp|A3CLN6|MURG_STRSV  91 KVRPQALFSKGGFVSVPPVIAARLSGVPVYVHESDLSIGLANKIAYKCATKMY 143
+                           *********************************************99999876 PP
+
+>> sp|A4SV74|MURG_POLSQ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   84.1   0.0   4.4e-25   2.5e-22       1     136 [.       6     141 ..       6     144 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 84.1 bits;  conditional E-value: 4.4e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+++P +A+a+ L+  G++V  l+ + g+e ++ ++ + ++++++ + +l+ k+   ++l+ + +  +a +++ +i+++ 
+  sp|A4SV74|MURG_POLSQ   6 ILVMAGGTGGHIFPGLAVAEYLRICGWNVSwLGNQSGMEYRLvKSCNFPFEAVEFG-GLRGKG-IKAKLMLPINLARACHQSWKIMRRL 92 
+                           789*****************************************************.******.999999999999************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           kp+vv+g+ggy+  + ++ ++l++ p++++E+n+++g +n++l++ a +
+  sp|A4SV74|MURG_POLSQ  93 KPNVVLGMGGYITFPGGLISKLLKRPLVLHEANSVAGSANRALAKIAMR 141
+                           ******************************************9998765 PP
+
+>> sp|O67238|MURG_AQUAE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   84.0   0.0   4.6e-25   2.6e-22       1     139 []       2     137 ..       2     137 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 84.0 bits;  conditional E-value: 4.6e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp..igpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++++ggGT+G+++Pa+A+ + + +++ +V+ +++++g+e +  ++ +++++  ++++ +l+++  ++++lk ++++lka ++++e lke
+  sp|O67238|MURG_AQUAE   2 IAVSGGGTGGHFFPALAFTNYVLKKE-KVKfIGSKRGIEYE-LKDLIKTEKlfLDVE-PLRERN-FYQKLKAIWKFLKAQEEINEFLKE 86 
+                           6899**********************.***9*******999.677888888446666.777777.************************ PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           +  +++  fggy++++++i++ l++  ++++Eqn+ip ++nk+l+++a++vl+
+  sp|O67238|MURG_AQUAE  87 DYRALI--FGGYASLPLGINTVLRRKELFIHEQNSIPSKTNKILSKKAKKVLI 137
+                           **9999..******************************************985 PP
+
+>> sp|Q2U0C3|ATG26_ASPOR  Sterol 3-beta-glucosyltransferase OS=Aspergillus oryzae GN=atg26 PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.9   0.0     5e-25   2.8e-22       4     138 ..     897    1028 ..     894    1029 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 83.9 bits;  conditional E-value: 5e-25
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81  
+                             +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+++g+++ p+++d        v++    +++++lke+  +       +
+  sp|Q2U0C3|ATG26_ASPOR  897 LTIGSRGDVQPYIALCKGLLAEGHKPKIATHAEFEPWVRQHGIDFAPVDGDpaelmricVENGM--FTYSFLKEASTK-------F 973 
+                             79**************************************************999994444444..899999999999.......8 PP
+
+                             HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + + ++   ++ +++++++ ++li++++a++ +++aE++ ip+++++++p+ +++++
+  sp|Q2U0C3|ATG26_ASPOR  974 RGWIDDL--LSSAWASCQDSDLLIESPSAMAGIHIAEALRIPYFRAFTMPWSRTRAY 1028
+                             8888888..666778889**********************************99987 PP
+
+>> sp|Q3STS8|MURG_NITWN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.3   0.3   7.8e-25   4.4e-22       1     138 [.       7     143 ..       7     144 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 83.3 bits;  conditional E-value: 7.8e-25
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.....vklwakleslktlkelaeglkalrkakeil 84 
+                           ++la+gGT+G+++Pa Al++eL++rG +Vrl+t  +  +    +gl  + ++       v++++    ++  ++ +    ++  a  ++
+  sp|Q3STS8|MURG_NITWN   7 ILLAAGGTGGHLFPAEALGVELMKRGLRVRLVTDSRALRY---SGLFSKDLTDVvpsetVRGRS---PWALARTGLMLAAGTAVALNLM 89 
+                           79****************************9999887766...566655544444443434444...44444444444445889999** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +  kp++vvgfggy  +++liaa+l+gip++++++n+++g +n +l++r+n ++
+  sp|Q3STS8|MURG_NITWN  90 RVLKPAAVVGFGGYPTLPPLIAARLRGIPTVIHDSNAVMGRANSFLSKRVNAIA 143
+                           ***************************************************976 PP
+
+>> sp|A1BJX8|MURG_CHLPD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.7   0.2   5.7e-25   3.2e-22       1     138 [.       3     146 ..       3     147 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 83.7 bits;  conditional E-value: 5.7e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----..S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd..vklwakleslktlkelaeglkalrkakei 83 
+                           v++aggGT+G+++PavA+a eLq+r ++V+    +t+ g+e++  +  g+  + + ++   ++++ +  +++l  la++  a+r+a +i
+  sp|A1BJX8|MURG_CHLPD   3 VLFAGGGTGGHLYPAVAMAGELQKRVPHVKlsfAGTEAGIEAREiPRLGYRLHLLSVRglKRGRSLGALVDNLGVLADFIGAVRSALAI 91 
+                           79****************************88779999999999999999999999995533444445677788899************ PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + +++pdvvvg+gg+v++++l+aa  +g ++ + Eqn+ pg+++kll+ +a  ++
+  sp|A1BJX8|MURG_CHLPD  92 INSESPDVVVGTGGFVSAPLLLAAQMRGKKTLIQEQNAFPGVTTKLLSLFASEIH 146
+                           ***********************************************99988766 PP
+
+>> sp|A1AWE8|MURG_RUTMC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.6   0.0   6.4e-25   3.6e-22       1     137 [.       5     141 ..       5     143 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 83.6 bits;  conditional E-value: 6.4e-25
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++++gGT+G+++Pa+A+a+eL++   ++  l++  g+e+++ ++++++ +++++  +l+ k   ++ +k l+    a+ +++ i+ ++
+  sp|A1AWE8|MURG_RUTMC   5 ILIMAGGTGGHIFPALAIANELKNHSTHIQwLGSNVGIENEIvPKHNIKLHTVNSV-GLRGKS-VVSLIKALFLLSYATLQIMGIFLKF 91 
+                           689***********************9999**************************.*****9.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kp++v+g+gg+ ++  ++ a   +ip++++Eqn+i g +nk+l++ a++ 
+  sp|A1AWE8|MURG_RUTMC  92 KPNIVLGMGGFTSGIGGLVACIFRIPLVIHEQNSISGTTNKILNKIAKKT 141
+                           *********************************************99986 PP
+
+>> sp|A1CFB3|ATG26_ASPCL  Sterol 3-beta-glucosyltransferase OS=Aspergillus clavatus GN=atg26 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.7   0.0   5.7e-25   3.2e-22       4     138 ..     913    1044 ..     910    1045 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 83.7 bits;  conditional E-value: 5.7e-25
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81  
+                             +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+ +g+++ p+++d        v++    +++++lke+ ++       +
+  sp|A1CFB3|ATG26_ASPCL  913 LTIGSRGDVQPYIALCKGLLAEGHKPKIATHAEFEPWVRRHGIDFAPVDGDpaelmricVENGM--FTYSFLKEASQK-------F 989 
+                             79**************************************************999884444444..889999999888.......8 PP
+
+                             HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + + ++   ++ +++++++ ++li++++a++ +++aE++ ip+++++++p+ +++++
+  sp|A1CFB3|ATG26_ASPCL  990 RGWIDDL--LSSAWASCQDSDLLIESPSAMAGIHIAEALRIPYFRAFTMPWSRTRAY 1044
+                             8888888..666778889**********************************99987 PP
+
+>> sp|B8IN64|MURG_METNO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.1   1.4   8.9e-25     5e-22       1     135 [.       8     141 ..       8     145 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 83.1 bits;  conditional E-value: 8.9e-25
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S----.--.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwa.kleslktlkelaeglkalrkakeilkea 87 
+                           v+la+gGT+G+++Pa Ala +L++rG++V lat  ++e+   e    e+v+i++ ++  +  l   ++l++l +   ++ +a +++++ 
+  sp|B8IN64|MURG_METNO   8 VLLAAGGTGGHLFPAEALALRLRERGIRVVLATDSRVETLSgEFPASEIVSIPSATPSGRsPLARGAALVTLGR---GFAAALRVVRRL 93 
+                           79***************************************999999999999995555504444555555555...5*********** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +p+v vgfggy  +++l+aa  +++p+ ++Eqn+++g +n +l+r a+
+  sp|B8IN64|MURG_METNO  94 NPAVAVGFGGYPTVPPLLAAQMLRVPTLLHEQNAVMGRANAFLARGAT 141
+                           ******************************************999876 PP
+
+>> sp|Q6G124|MURG_BARQU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.1   0.2     9e-25   5.1e-22       1     135 [.       7     140 ..       7     143 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 83.1 bits;  conditional E-value: 9e-25
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +vl++gGT+G+++Pa A+a+eL++rG++V+l+t ++ + fv     e+   + +  ++ ++   ++ +k+ +  lk++ ++ +++ + +
+  sp|Q6G124|MURG_BARQU   7 IVLVAGGTGGHLFPAEAVAVELRQRGYDVHLVTDRRAKCFVSCVDEEHTHiVSSA-TFTRRH-PFALIKTCWILLKGMGQSLALFYKLR 93 
+                           79***************************************55555555515555.666655.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           p +v gfggy   ++l+ a+l + +++++Eqn+i+g +n++l+ ++ 
+  sp|Q6G124|MURG_BARQU  94 PVLVGGFGGYPTFPPLLVAALMRCVTFIHEQNAIMGRANRVLAVFVH 140
+                           *****************************************998876 PP
+
+>> sp|Q2W0H3|MURG_MAGSA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.1   1.1   8.8e-25     5e-22       1     138 [.       8     144 ..       8     145 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 83.1 bits;  conditional E-value: 8.8e-25
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++la+gGT+G+v+Pa Ala  L +rG++  l+t ++ ++   +  +le+  i ++ + + ++ +l++l++++e + +l +a+ il + +
+  sp|Q2W0H3|MURG_MAGSA   8 IALAAGGTGGHVFPAEALASVLLDRGYRLALITDKRGAAYGgTLGKLETFRISAG-GIAGRG-KLSALRSALELGLGLIQARSILGRIR 94 
+                           79****************************9999999999989999*********.999999.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p++v+gfggy++++ ++aa+lagip+ ++Eqn++ g +n+ll+ ++ +++
+  sp|Q2W0H3|MURG_MAGSA  95 PAAVIGFGGYASVPGMGAAALAGIPTAIHEQNAVLGRANRLLAGHVRRIA 144
+                           ******************************************99988875 PP
+
+>> sp|Q0CKU4|ATG26_ASPTN  Sterol 3-beta-glucosyltransferase OS=Aspergillus terreus (strain NIH 2624 / FGSC A1156) GN=atg
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   83.0   0.0   9.4e-25   5.3e-22       4     138 ..     903    1034 ..     900    1035 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 83.0 bits;  conditional E-value: 9.4e-25
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81  
+                             +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++++++g+++ p+++d        v++    +++++lke+  +       +
+  sp|Q0CKU4|ATG26_ASPTN  903 LTIGSRGDVQPYIALCKGLLAEGHRPKIATHAEFEPWIRKHGIDFAPVEGDpaelmricVENGM--FTYSFLKEASMK-------F 979 
+                             79**************************************************999994444444..899999999999.......8 PP
+
+                             HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + + ++      ++ ++++ ++li++++a++ +++aE++ ip+++++++p+++++++
+  sp|Q0CKU4|ATG26_ASPTN  980 RGWIDDLLS--SAWRSCQDSDLLIESPSAMAGIHIAEALRIPYFRAFTMPWTRTRAY 1034
+                             888888855..555666999*********************************9987 PP
+
+>> sp|B1ZU31|MURG_OPITP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   82.9   0.2     1e-24   5.6e-22       1     138 [.       4     141 ..       4     142 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 82.9 bits;  conditional E-value: 1e-24
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G++ P +Ala++Lq+rGh Vr l++++++++++  +   l++  +++  ++    + ++  + +  + ++l   + +++ 
+  sp|B1ZU31|MURG_OPITP   4 FLISCGGTGGHLSPGIALAEGLQARGHSVRlLISHKKVDARLiaKYPRLDFTRVPGT-GFSL--HPVRLARFIGTQSRGLWFCRGLVRA 89 
+                           7899**************************************9444579*******9.8877..99999999999999*********** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           a+p+ vv+fgg+ ++ +++aa+++g+p+ ++E+n +pg + ++l+r+an+v+
+  sp|B1ZU31|MURG_OPITP  90 ARPAGVVAFGGFTSAGVVLAARWRGVPVALHEANRVPGRAIRVLSRFANRVY 141
+                           **************************************************98 PP
+
+>> sp|A6L071|MURG_BACV8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   82.9   0.0     1e-24   5.6e-22       1     136 [.       7     144 ..       7     147 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 82.9 bits;  conditional E-value: 1e-24
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pav++a++ +++ +e +   ++++ ++e +  ++ag++++ +++  ++ +k   lk+++ l++  k+   a++i+k
+  sp|A6L071|MURG_BACV8   7 IIISGGGTGGHIFPAVSIANAIKEQHPEAEilfVGAEGRMEMQRvPAAGYPIKGLPVA-GFDRKN-LLKNVSVLFKLVKSQLLARKIIK 93 
+                           6899************************************98766*************.****99.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           ++kp++ vg+ggy++++ l  a   gip+ + Eqn+ +g++nkll+++a +
+  sp|A6L071|MURG_BACV8  94 DFKPHAAVGVGGYASGPTLKMAGMMGIPTLIQEQNSYAGVTNKLLAKKACK 144
+                           *********************************************999866 PP
+
+>> sp|Q1QNU3|MURG_NITHX  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   82.7   0.2   1.2e-24   6.6e-22       1     138 [.       7     143 ..       7     144 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 82.7 bits;  conditional E-value: 1.2e-24
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE....----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp....igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++la+gGT+G+++Pa Al++eL++r+ +Vrl+t  +  +    +gl  +     ++++ +++ +   l+  ++ +    ++  a  +++
+  sp|Q1QNU3|MURG_NITHX   7 ILLAAGGTGGHLFPAEALGVELMKRDLRVRLVTDSRALRY---SGLFSKDmtdvVPSE-TVRGRS-PLALARTGLMLATGTVVALNLMR 90 
+                           79****************************9999887777...455444422225555.556655.77777777777788999999*** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + kp++v+gfggy  +++liaa+l gip++++++n+++g +n+ll+rr+n ++
+  sp|Q1QNU3|MURG_NITHX  91 RLKPAAVIGFGGYPTLPPLIAARLKGIPTVIHDANAVMGRANRLLSRRVNAIA 143
+                           **************************************************986 PP
+
+>> sp|B2V7Y8|MURG_SULSY  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   82.1   0.0   1.8e-24     1e-21       1     139 []       4     141 ..       4     141 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 82.1 bits;  conditional E-value: 1.8e-24
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           v ++ggGT+G+++Pa+++a+ L+++G  ++ ++t++g+e++   ++++     ++ +  ++ k   ++++  +++ l +++k+ + +k+
+  sp|B2V7Y8|MURG_SULSY   4 VFISGGGTGGHFYPALSVAENLKEKGFSITyIGTTNGIENKKdfPADEKIL--YPMR-AVRGKS-IVGKIQGVFSLLSTTFKVYKQIKK 88 
+                           5789***********************************996444444444..5555.557777.99********************** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           +kpd ++ fggy + ++++a+ la++p++++Eqn+ip  +nk+l+ +a++v++
+  sp|B2V7Y8|MURG_SULSY  89 EKPDFSICFGGYTSIPLGLASFLARVPLYIHEQNSIPSYSNKILSYFAKKVFI 141
+                           *************************************************9985 PP
+
+>> sp|Q3AGT7|MURG_SYNSC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   82.1   0.1   1.9e-24     1e-21       2     138 ..       5     138 ..       4     139 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 82.1 bits;  conditional E-value: 1.9e-24
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++a+ GT+G+++Pa+A+a+++ +    V  +++p++le+++  e  gl  v  g+    +   + lk+l++l++ l a  +++++++++
+  sp|Q3AGT7|MURG_SYNSC   5 LIAASGTGGHLFPALAVAEAVEDLW-LVSwVGVPDRLETQLvpERFGLVCVNAGGL---QG--RGLKKLLQLLRLLLASVSVRRAIRRN 87 
+                           799******************9996.8889**********9888889888666555...66..5699********************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +d+v+ +ggy+a++a++aa+++ ip++++E+n+ipg v++ll r++  v+
+  sp|Q3AGT7|MURG_SYNSC  88 AIDAVFTTGGYIAAPAILAARWCCIPVVLHESNAIPGRVTRLLGRFCSAVA 138
+                           ********************************************9998876 PP
+
+>> sp|Q5B4C9|ATG26_EMENI  Sterol 3-beta-glucosyltransferase OS=Emericella nidulans GN=atg26 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   82.1   0.0   1.8e-24     1e-21       4     138 ..     901    1032 ..     898    1033 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 82.1 bits;  conditional E-value: 1.8e-24
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----......S------.-HHHCCSHHHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd......vklwakleslktlkelaeglkalrkakei 83  
+                             +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+++g+++ p+++d      +++ + ++++++lke+ ++       ++ 
+  sp|Q5B4C9|ATG26_EMENI  901 LTIGSRGDVQPYIALCKGLLAEGHKPKIATHAEFEPWVRKHGIDFAPVDGDpaelmrLCVENGMFTYSFLKEATAK-------FRG 979 
+                             79**************************************************888884444444788888888888.......999 PP
+
+                             HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + ++     ++++  ++ ++li++++a++ +++aE++ ip+++ +++p+ +++++
+  sp|Q5B4C9|ATG26_EMENI  980 WIDDLLSSAWRAC--QDSDLLIESPSAMAGIHIAEALRIPYFRGFTMPWSRTRAY 1032
+                             9999977777776..8999*******************************99987 PP
+
+>> sp|A5GW69|MURG_SYNR3  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   81.7   0.0   2.5e-24   1.4e-21       2     138 ..       5     138 ..       4     139 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 81.7 bits;  conditional E-value: 2.5e-24
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+a++  +  + Vr l++p++le+++  + ++  ++ ++ +l+   + l++lk+l + l++   ++++++++++
+  sp|A5GW69|MURG_SYNR3   5 LIAASGTGGHLFPALAVADRMPET-WSVRwLGVPDRLERQLVPSRYPLFTVRAG-GLQG--RGLRKLKQLIQLLWSAWPVTRLIRKQEC 89 
+                           799*****************9876.7***************7777777788888.7888..6699999999999999999********* PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +vv+ +ggy+a++a++aa+l++ p++++E+n+ipg v++l+ r++ +v+
+  sp|A5GW69|MURG_SYNR3  90 AVVFTTGGYIAAPAILAARLCRRPVVLHESNAIPGQVTRLFGRFCSRVA 138
+                           ********************************************99986 PP
+
+>> sp|A4YZK3|MURG_BRASO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   82.6   0.6   1.3e-24   7.4e-22       1     138 [.       8     144 ..       8     145 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 82.6 bits;  conditional E-value: 1.3e-24
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++la+gGT+G+++Pa Al++eL +rG++Vrl+t  +  +     +++ +++vp ++    +++   ++  ++++  + ++ +a+ ++++
+  sp|A4YZK3|MURG_BRASO   8 ILLAAGGTGGHLFPAEALGVELIKRGYRVRLVTDARALKYSglfTKDMIDVVPSETV---RSRS-PVALARTALLLGTGTLAAFNLMRR 92 
+                           79****************************999988776643346666666555544...6655.8999999999999*********** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            kp++v+gfggy  +++l+aa+lag+p  ++++n++ g +n++l+ +++ ++
+  sp|A4YZK3|MURG_BRASO  93 LKPAAVIGFGGYPTVPPLLAARLAGVPSLIHDANAVLGRANRFLSAHVKAIA 144
+                           *********************************************9998875 PP
+
+>> sp|Q2RVU4|MURG_RHORT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   82.5   1.3   1.3e-24   7.6e-22       1     136 [.      19     153 ..      19     156 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 82.5 bits;  conditional E-value: 1.3e-24
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++la+gGT+G+v+Pa Ala eL rrGh+ +l+t ++      +   l+++ i ++ +++ ++  ++ l+   e   +  +a  +l++ +
+  sp|Q2RVU4|MURG_RHORT  19 IALAAGGTGGHVFPAEALAGELIRRGHKLTLITDKRGHVYGgTLGLLDTKRILAG-GVAGRG-VIGRLRGMIELAMGSLQAYGLLRRLR 105
+                           79****************************8887777766657777899998888.777777.77777777777777************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           pdvvvgfggy++++ ++aa++++ p++v+Eqn++pg +n+ll+ r+ +
+  sp|Q2RVU4|MURG_RHORT 106 PDVVVGFGGYASVPTMLAAIRLKLPTVVHEQNAVPGRANRLLAARVSR 153
+                           ******************************************999876 PP
+
+>> sp|Q2JW21|MURG_SYNJA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   81.3   0.1   3.1e-24   1.8e-21       2     138 ..      15     147 ..      14     148 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 81.3 bits;  conditional E-value: 3.1e-24
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+ ++L +  +  + l++p +le+++  + ++ + ++    +w+    +++l +l +  +a+ ++++il++ + 
+  sp|Q2JW21|MURG_SYNJA  15 LVAASGTGGHIFPALAVVEQLPTWQI--EwLGVPQRLEAKLVPDRYPLHRVAMS--GWQG-SPWQKLGSLVQLARATLQVRQILASGQF 98 
+                           799*******************9775..55***********9999999999999..5554.59************************** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           dvv+ +ggy+a++ ++aa+++g+p+ ++E+n +pg+v+++l r++  v+
+  sp|Q2JW21|MURG_SYNJA  99 DVVLTTGGYIAAPTILAARSLGVPVLLHESNCLPGKVTRWLGRFCRLVA 147
+                           ******************************************9998775 PP
+
+>> sp|A5EPK4|MURG_BRASB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   82.4   0.6   1.4e-24     8e-22       1     138 [.       8     144 ..       8     145 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 82.4 bits;  conditional E-value: 1.4e-24
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++la+gGT+G+++Pa Al++eL +rG++Vrl+t  +  +     +++ +++vp ++    +++   ++  ++++  + ++ +a+ ++++
+  sp|A5EPK4|MURG_BRASB   8 ILLAAGGTGGHLFPAEALGVELIKRGYRVRLVTDARALRYSglfTKDMIDVVPSETV---RSRS-PVALARTALLLGTGTLAAFNLMRR 92 
+                           79****************************999988766533346666666555555...6655.8999999999999*********** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            kp++v+gfggy  +++l+aa+lag+p  ++++n++ g +n++l+ +++ ++
+  sp|A5EPK4|MURG_BRASB  93 LKPAAVIGFGGYPTVPPLLAARLAGVPSLIHDANAVLGRANRFLSAHVKAIA 144
+                           *********************************************9998875 PP
+
+>> sp|A7KAN4|ATG26_PENCW  Sterol 3-beta-glucosyltransferase OS=Penicillium chrysogenum (strain ATCC 28089 / DSM 1075 / W
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   81.3   0.0   3.1e-24   1.8e-21       4     138 ..     889    1020 ..     886    1021 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 81.3 bits;  conditional E-value: 3.1e-24
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81  
+                             +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++++++g+++ p+++d        v++    +++++l+e+  +       +
+  sp|A7KAN4|ATG26_PENCW  889 LTIGSRGDVQPYIALCKGLLAEGHKPKIATHAEFEPWIRKHGIDFAPVDGDpaelmricVENGM--FTYSFLREASLK-------F 965 
+                             79**************************************************888884444444..888888888888.......8 PP
+
+                             HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + + ++   ++ ++ g++  ++li++++a++ +++aE++ ip+++ +++p+++++++
+  sp|A7KAN4|ATG26_PENCW  966 RGWIDDL--LSSAWIGCQGSDLLIESPSAMAGIHIAEALRIPYFRGFTMPWTRTRAY 1020
+                             8888877..78889***************************************9987 PP
+
+>> sp|Q2JJR4|MURG_SYNJB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   80.8   0.1   4.7e-24   2.7e-21       2     136 ..      15     145 ..      14     148 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 80.8 bits;  conditional E-value: 4.7e-24
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+a++L +  ++++ l++p+++e ++  + ++ + +     +w+    l+ l  la+  +a+ +++++l + + 
+  sp|Q2JJR4|MURG_SYNJB  15 LVAASGTGGHIFPALAVAEQLPD--WQIEwLGVPDRMEGKLVRERYPLHRVVMS--GWQGS-PLHRLQALAQLARATLQVRRLLMSGRF 98 
+                           799******************96..55667***********8888999998888..45545.9999*********************** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           d+v+ +ggy+a++a++aa+++g+p+ ++E+n ipg+v+++l r++  
+  sp|Q2JJR4|MURG_SYNJB  99 DIVLTTGGYIAAPAILAARSLGVPVLLHESNWIPGKVTRWLGRFCQV 145
+                           *****************************************998865 PP
+
+>> sp|A2QNQ5|ATG26_ASPNC  Sterol 3-beta-glucosyltransferase OS=Aspergillus niger (strain CBS 513.88 / FGSC A1513) GN=atg
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   81.0   0.0   3.9e-24   2.2e-21       4     138 ..     902    1033 ..     899    1034 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 81.0 bits;  conditional E-value: 3.9e-24
+                             E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS
+        Glyco_transf_28    4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81  
+                             +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+++g+++  +++d        v++    ++++++ke+ ++       +
+  sp|A2QNQ5|ATG26_ASPNC  902 LTIGSRGDVQPYIALCKGLLAEGHRPKIATHAEFEPWVRKHGIDFALVDGDpaelmricVENGM--FTYSFFKEATAK-------F 978 
+                             79**************************************************999995555555..899999999999.......9 PP
+
+                             HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+        Glyco_transf_28   82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 
+                             + + ++     ++++  +++++li++++a++ +++aE++ ip+++++++p+ +++++
+  sp|A2QNQ5|ATG26_ASPNC  979 RGWIDDLLSSAWKAC--QDTDLLIESPSAMAGIHIAEALRIPYFRAFTMPWSRTRAY 1033
+                             999999966666665..9**********************************99987 PP
+
+>> sp|Q0AMW7|MURG_MARMM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   80.8   1.6   4.6e-24   2.6e-21       1     134 [.       6     138 ..       6     142 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 80.8 bits;  conditional E-value: 4.6e-24
+                           EEEE-------HHHHHHHHHHHHH---EEEEEET.GGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatp.pgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           +++a+gGT+G+++Pa A a++L +rG++Vrl+t  +gl++ +    +++ +i +  +  +  + lk  + ++e  +++ +a+ i+ ++k
+  sp|Q0AMW7|MURG_MARMM   6 CLIAAGGTGGHMFPARAAAEALIARGWQVRLVTDaRGLRHATDFPAVAVDEIHAASPSTK--NPLKLARAALELTQGFAQARSIVGKWK 92 
+                           689***************************776615666666777777777888844444..69999999999999************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134
+                           pdv++gfggy a +al  a++ gi+  ++Eqn++ g vn++++ +a
+  sp|Q0AMW7|MURG_MARMM  93 PDVIAGFGGYPAFPALAVARSMGIAFAIHEQNAVLGRVNRVFAAKA 138
+                           *****************************************98776 PP
+
+>> sp|Q812Y1|MURG3_BACCR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   79.8   0.0   9.2e-24   5.2e-21       1     135 [.       5     137 ..       5     140 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 79.8 bits;  conditional E-value: 9.2e-24
+                            EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                            ++++ggGT+G+v   + l  ++ ++G++V+ +++++g+e+ +  +++++ ++ ++ kl++++  ++++k++++  ++  ++  ++k+ 
+  sp|Q812Y1|MURG3_BACCR   5 ILFTGGGTAGHVMINIVLIPKFIEKGWRVEyIGSKNGIEKSL-VQNVKYNSVSTG-KLRRYW-DWDNFKDPFKIIRGCLQSYNLIKKT 89 
+                            79***************************************6.456777778888.89****.************************* PP
+
+                            HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+        Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                            kpdv++++gg+v++++ i+a+l+++p+++ E ++  gl+nk+   +a+
+  sp|Q812Y1|MURG3_BACCR  90 KPDVIFSAGGFVSVPVAIGAWLNRVPIIIREPDSTLGLANKIALPFAT 137
+                            *****************************************9877666 PP
+
+>> sp|B4SH49|MURG_PELPB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   80.2   1.5   7.1e-24     4e-21       1     138 [.       3     146 ..       3     147 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 80.2 bits;  conditional E-value: 7.1e-24
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----..S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd..vklwakleslktlkelaeglkalrkakei 83 
+                           v++aggGT+G+++Pa+A+a eL++  ++V    ++t+ g+e++  +  g+  + i+++   +++a  + ++++  +a++  al +a ++
+  sp|B4SH49|MURG_PELPB   3 VLFAGGGTGGHLYPAIAMAGELRKLVPDVVisfVGTTGGIEATEvPRLGYRLHLIPVRglKRGRALADIVANIGVIADFVAALGRAAAL 91 
+                           79***************************************9988*********999977667777799******************** PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           ++++ pdvvvg+gg+v++++l+aa l + ++ + Eqn+ pg+++kll+  a  v+
+  sp|B4SH49|MURG_PELPB  92 IAREAPDVVVGTGGFVSAPLLLAAQLMRKKTLIQEQNAFPGVTTKLLAALASEVH 146
+                           *********************************************9988777665 PP
+
+>> sp|B4S6Q9|MURG_PROA2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   80.1   0.4   7.7e-24   4.3e-21       1     138 [.       3     146 ..       3     147 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 80.1 bits;  conditional E-value: 7.7e-24
+                           EEEE-------HHHHHHHHHHHHH-..--EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCS...HHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrr..GheVr.latppgleefv.eeagleavpigpdvklwakleslktlke...laeglkalrkake 82 
+                           +++aggGT+G+++PavA+a++L +   G  V  ++t++g+e++  +  g+  + ++++ ++++ + ++++l +   l+++ +a+ ka  
+  sp|B4S6Q9|MURG_PROA2   3 ILFAGGGTGGHLYPAVAMAERLEQLypGTTVAfVGTERGIEATEiPRLGYRLHLLDVR-GFRRGFSFSDMLNNagvLLDFVRAVVKAAG 90 
+                           79*********************983455555*********9999*************.99999855544444333789999******* PP
+
+                           HHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  83 ilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           i++ ++pdvvvg+gg+v++++l aa l g ++ + Eqn+ pg+++++l+ +a+ v+
+  sp|B4S6Q9|MURG_PROA2  91 IIRAEQPDVVVGTGGFVSGPLLAAAELMGRKTLIQEQNAFPGVTTRFLAAFATEVH 146
+                           ****************************************************9997 PP
+
+>> sp|A8G2K3|MURG_PROM2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   80.0   0.0   7.8e-24   4.4e-21       2     135 ..       8     137 ..       7     141 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 80.0 bits;  conditional E-value: 7.8e-24
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+ +e+ ++ ++++ l+++ +l++ +  ++++ +++ ++++ ++ ++ +  + e++     ++++ +ilke+k+
+  sp|A8G2K3|MURG_PROM2   8 LVAASGTGGHIFPALAVSKEVEDK-WNIHwLGVKQRLDSNLIPKKYNLRTLSIKTPRKN-IFLFYQYIEILMS---TFQIIRILKEKKI 91 
+                           799******************887.6999************666777777777733444.4455555555555...8************ PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           ++v+ +ggy++++ +ia+++++ip++++E+n ipg+v+k++   +n
+  sp|A8G2K3|MURG_PROM2  92 NLVFTTGGYISAPTIIASKFLRIPVIIHESNLIPGMVTKYFGFLCN 137
+                           ***************************************9976665 PP
+
+>> sp|Q89FU7|MURG_BRAJA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   79.6   0.2     1e-23   5.9e-21       1     137 [.       7     142 ..       7     144 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 79.6 bits;  conditional E-value: 1e-23
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++la+gGT+G+++Pa Al++eL rrG +Vrl+t ++  +      ++ +++v+ ++  ++++ ++   + ++la+g   + +a  ++k+
+  sp|Q89FU7|MURG_BRAJA   7 ILLAAGGTGGHLFPAEALGVELIRRGFRVRLVTDERALRYSglfSKDMIDVVSSETA-RGRNPFQVAYAGLTLAAG---TLSAYSLIKR 91 
+                           79****************************999998766533357888888887777.888888777777888888...********** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            kp +vvgfggy  +++l+aa++ag+p +++++n++ g +n++l+ r+  +
+  sp|Q89FU7|MURG_BRAJA  92 LKPVAVVGFGGYPTLPPLVAAKFAGVPGIIHDANAVLGRANRFLSSRVRAI 142
+                           ***********************************************9876 PP
+
+>> sp|A0RHC3|MURG1_BACAH  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   79.2   0.0   1.5e-23   8.3e-21       1     130 [.       5     132 ..       5     138 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 79.2 bits;  conditional E-value: 1.5e-23
+                            EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                            ++++ggGT+G+v   + l  +++ +G+ V+ +++++g+e+    +++++ +i ++ kl++++  ++++k++++  k+  ++ +++k+ 
+  sp|A0RHC3|MURG1_BACAH   5 ILFTGGGTAGHVMINMVLIPKFMGKGWGVEyIGSQNGIEKL-LVQNVKYNSISTG-KLRRYW-DWENFKDPFKIIKGCIQSYKLMKRI 89 
+                            79***********************************9999.566788999****.******.************************* PP
+
+                            HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+        Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                            kpdv++++gg+v+++++i+a+ +++p+++ E ++  gl+nk+ 
+  sp|A0RHC3|MURG1_BACAH  90 KPDVIFSAGGFVSVPVVIGAWMNKVPVIIREPDSTLGLANKIA 132
+                            ****************************************985 PP
+
+>> sp|Q6MBS7|MURG_PARUW  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   79.2   0.0   1.5e-23   8.3e-21       1     135 [.       5     140 ..       5     144 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 79.2 bits;  conditional E-value: 1.5e-23
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+++Pa  la+eL ++ +    l +  gl +      +  +++++ +  +l +k   +k lk +++ l+++ ++ +i+++
+  sp|Q6MBS7|MURG_PARUW   5 FMITAGGTGGHIFPAQGLAQELIKKTYSSSiLFVAGGLSTNKyfDRSIFPFQEVSAS-PLFSKN-PFKLLKGVFNLLRGVWQSIRIIRK 91 
+                           789***********************9998855555554443367777777777777.555555.9*********************** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           +kpdvvvgfg+y+ +++l+aa+ ++ip++++E+n+ipg++nk+l+  a 
+  sp|Q6MBS7|MURG_PARUW  92 FKPDVVVGFGSYYTVPPLLAAKILRIPIVLHEANSIPGKANKWLASMAW 140
+                           *******************************************987765 PP
+
+>> sp|Q0BXU2|MURG_HYPNA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   78.9   0.5   1.7e-23   9.7e-21       1     138 [.      10     146 ..      10     147 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 78.9 bits;  conditional E-value: 1.7e-23
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.----S-.-----.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp.igpdvk.lwakleslktlkelaeglkalrkakeilkea 87 
+                           v++a+gGT+G+++Pa A+a+e ++rG++  l++  +  +  +    + ++ i++  + +++    ++ +  +++ + ++ +a++++k++
+  sp|Q0BXU2|MURG_HYPNA  10 VIIAAGGTGGHMFPARAFADEMRARGWNTALISDSRGLRYAADFPADWKEeIEAASPnFRKP---WTVPGAALKINAGIARARRLMKQH 95 
+                           689***************************77666555555555555444455443305554...5566666666666*********** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +p++v+gfggy a +al aa+++g+p++++Eqn++ g vn+ ++++a  v+
+  sp|Q0BXU2|MURG_HYPNA  96 RPALVAGFGGYPAFPALAAARRLGVPIIIHEQNAVLGRVNRQFAKHAQLVA 146
+                           ********************************************9998875 PP
+
+>> sp|Q8KGD4|MURG_CHLTE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   79.3   0.3   1.3e-23   7.5e-21       1     138 [.       3     146 ..       3     147 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 79.3 bits;  conditional E-value: 1.3e-23
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCS....HHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlke....laeglkalrkak 81 
+                           v++aggGT+G+++P vA+a eL++r + +     +t+ g+e++  +  g+  v  +++ +l++ l s+++l+e    l ++ k+l  a+
+  sp|Q8KGD4|MURG_CHLTE   3 VLFAGGGTGGHLYPGVAMAAELKKRVPGISisfAGTSAGIEATEvPRLGYRLVLFPVR-GLKRGL-SIRALVEnaliLGDFAKSLSMAM 89 
+                           79***********************999997788999***99888*************.777776.55555442222778889999*** PP
+
+                           HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +++++++pdvvvg+ggyv++++l+aa l+g ++ + Eqn+ pg++++ll+r a+ v+
+  sp|Q8KGD4|MURG_CHLTE  90 ALVRKEQPDVVVGTGGYVSAPLLLAAQLSGKKTLIQEQNAFPGVTTRLLARMATEVH 146
+                           *****************************************************9987 PP
+
+>> sp|B3QLW4|MURG_CHLP8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   79.3   0.1   1.4e-23   7.7e-21       1     138 [.       3     146 ..       3     147 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 79.3 bits;  conditional E-value: 1.4e-23
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.....S------.-HHHCCSHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.....vklwakleslktlkelaeglkalrka 80 
+                           v++aggGT+G+++P vA+a eL++  + V+    +tp g+e++  +  g++ + ++++       l+   +  +++  l +++ +l +a
+  sp|B3QLW4|MURG_CHLP8   3 VLFAGGGTGGHLYPGVAMASELKKVVPGVEisfAGTPAGIEATEvPRLGYPLHLLPVRglkrgRSLR---DLAANVGVLKDFGSSLMQA 88 
+                           79***********************9999988889*****99988*************754443333...344555666677777**** PP
+
+                           HHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  81 keilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + i+++++p+vvvg+ggyv++++l+aa l+g ++ + Eqn+ pg++++ l+r a  v+
+  sp|B3QLW4|MURG_CHLP8  89 FSIIRKETPNVVVGTGGYVSAPLLLAAQLSGCKTLIQEQNAFPGVTTRMLARMASEVH 146
+                           ***************************************************9998887 PP
+
+>> sp|A6T2F8|MURG_JANMA  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   78.7   0.1     2e-23   1.1e-20       2     138 ..       5     141 ..       4     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 78.7 bits;  conditional E-value: 2e-23
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           v+++ GT+G+++P +A+a++ ++rG++V  l+t+ g+e+++ ++ag+e+  i+   +l+ k+   +t++ +++   ++   + ilk+ +
+  sp|A6T2F8|MURG_JANMA   5 VIMAAGTGGHIFPGLAIAETMKARGWQVSwLGTSHGMERELvPKAGVEMDIIEFS-GLRGKG-LQHTITGAFKLVASFATCFSILKRRN 91 
+                           7899***************************************************.******.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p +v+g+ggyv ++ +  a+l+g+p+++ ++++  +l+nk+l+  a++vl
+  sp|A6T2F8|MURG_JANMA  92 PGIVLGMGGYVTVPGGWMAKLRGVPVVLVNADAALLLSNKTLMPVAERVL 141
+                           ******************************************99998886 PP
+
+>> sp|A5CEL6|MURG_ORITB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   78.5   0.0   2.4e-23   1.4e-20       1     138 [.       4     140 ..       4     141 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 78.5 bits;  conditional E-value: 2.4e-23
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           + l+ggGT+G+++Pa+Al++eLq+rG++V l+t  ++e+ + + +++++  i   v   +    +k+l    + l a    ++++ +++
+  sp|A5CEL6|MURG_ORITB   4 IFLVGGGTGGHLFPAIALGEELQERGYNVYLITDTRCEKYLLNFNYSFKIhIMNMVSISN--TGIKKLYAYIRILAACITGFKLVYSNS 90 
+                           679*********************************************764222245556..45777777777788899999******* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p ++v+fggy  ++++i+ +l +ip +++Eqn++ gl+n+l+ r+a+ + 
+  sp|A5CEL6|MURG_ORITB  91 PSLIVAFGGYTIAPIIINGILFRIPFILHEQNSVLGLANRLFLRYAKAIT 140
+                           **********************************************9875 PP
+
+>> sp|Q8D2Z6|MURG_WIGBR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   78.6   0.0   2.2e-23   1.2e-20       1     133 [.       8     140 ..       8     146 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 78.6 bits;  conditional E-value: 2.2e-23
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++++ggG++G+v+  +++a++L + G e+  +++++++e+ + +++++++++i++  +++ +   + +l +l +   ++ k+k+++k +
+  sp|Q8D2Z6|MURG_WIGBR   8 IIITGGGSGGHVFVGLSIAEQLIKIGCEILwIGSSDRIESYLiPKSNIKIYKINVI-GFNGNN-IFLKLISLIKTAYSILKIKKLIKYY 94 
+                           689****************************************************9.999988.999999999999************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133
+                           kpd+v+++ggyv+ +  ia++ +++p++++Eqn++pgl+n +l + 
+  sp|Q8D2Z6|MURG_WIGBR  95 KPDIVLSIGGYVSFPGAIATWISKVPLIIHEQNSVPGLSNYILYKL 140
+                           ****************************************988765 PP
+
+>> sp|B0UFC7|MURG_METS4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   77.7   1.0   4.2e-23   2.4e-20       1     134 [.       8     140 ..       8     145 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 77.7 bits;  conditional E-value: 4.2e-23
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           v+la+gGT+G+++Pa Ala +L++rG++V la+  ++e+        e+v+i++ ++  +    l+    ++  ++++ +a +++++ +
+  sp|B0UFC7|MURG_METS4   8 VLLAAGGTGGHLFPAEALALRLRDRGIRVVLASDGRVEALSgGFPASEIVSIPSATPSGR--SPLARGAAFLTLGRGFAAAIRAVRRLN 94 
+                           79***********************************99976555556666777755555..445555555555566************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134
+                           p+vvvgfggy  +++l+aa  +++p+ ++Eqn+++g +n +l+r a
+  sp|B0UFC7|MURG_METS4  95 PAVVVGFGGYPTVPPLLAAQMLRVPTLLHEQNAVMGRANGFLARGA 140
+                           ***************************************9998765 PP
+
+>> sp|Q163J0|MURG_ROSDO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   77.8   0.5   3.9e-23   2.2e-20       2     137 ..       2     137 ..       1     139 [. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 77.8 bits;  conditional E-value: 3.9e-23
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++a+gGT+G+++Pa Ala++  +rG++V+l t  + ++ +    +  ++++i +  ++++ +   ++++ +++ + ++ +a  ++++++
+  sp|Q163J0|MURG_ROSDO   2 LIAAGGTGGHMFPAQALAEAMLNRGWRVKLTTDARGARYTggFPHSTQIEEISSA-TFARGG-IAAKIVAPFKIGAGVLRALLSFRRDR 88 
+                           79*********************************9999977778889999****.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p+vvvgfggy   +al aa l + p+ ++Eqng+ g vn +++ r++ +
+  sp|Q163J0|MURG_ROSDO  89 PAVVVGFGGYPTIPALAAAFLMKLPRMIHEQNGVLGRVNTAFASRVDAI 137
+                           *********************************************9987 PP
+
+>> sp|A4G8T8|MURG_HERAR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   77.0   0.1   6.9e-23   3.9e-20       2     138 ..       5     141 ..       4     142 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 77.0 bits;  conditional E-value: 6.9e-23
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++ GT+G+++P +A+a++ q+rG+eV+ l+t+ g+e+ + +++g+++ +i    +l+ k+   +t++ +++ l ++   + il++ k
+  sp|A4G8T8|MURG_HERAR   5 LIMAAGTGGHIFPGLAIADTMQARGWEVTwLGTEHGMERDLvPKSGIAMDTISFA-GLRGKG-LRHTVTGVLRLLASFGTCFSILARRK 91 
+                           68999***********************************99*************.******.9************************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p vv+g+ggyv ++ +  a+l+g+p+++ ++++  +l+nk+l   a +vl
+  sp|A4G8T8|MURG_HERAR  92 PGVVLGMGGYVTVPGGWMAKLRGVPLVLLNADAALLLSNKALTPIAQRVL 141
+                           ****************************************9999888876 PP
+
+>> sp|Q28NN5|MURG_JANSC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   77.6   1.1   4.4e-23   2.5e-20       2     137 ..       7     142 ..       6     144 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 77.6 bits;  conditional E-value: 4.4e-23
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++a+gGT+G+++Pa Al ++  r+G++V+l t  + ++ v   ++ +e++++ +  ++ + +  l++l  +++ + ++  a++ + ++k
+  sp|Q28NN5|MURG_JANSC   7 IIAAGGTGGHMFPAQALSEAMLRKGWRVTLSTDARGARYVggFSHAVEIREVSSA-TFTRGG-ALAKLAVPFRIFGGVLTATARMLREK 93 
+                           689*************************************999************.****99.************************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pdvvvgfggy   +a+ aa+l g p+ ++Eqng+ g vn+++++++  v
+  sp|Q28NN5|MURG_JANSC  94 PDVVVGFGGYPTIPAMAAARLTGRPRMLHEQNGVLGRVNRVFAKHVAHV 142
+                           *******************************************998766 PP
+
+>> sp|Q31CY4|MURG_PROM9  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   77.6   0.0   4.3e-23   2.4e-20       2     135 ..       8     137 ..       7     141 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 77.6 bits;  conditional E-value: 4.3e-23
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+ +e+ + +++++ l++  +l++    ++++ ++++++++ +++++ +  + e++     ++++ +ilke+k+
+  sp|Q31CY4|MURG_PROM9   8 LVAASGTGGHIFPALAVSKEVED-EWNIHwLGVRQRLDANFIPKKYNLRTLNIKTP-RKNIFLFYQYIEILIS---TFQIIRILKEKKI 91 
+                           799*****************976.57***********9988777777777777733.4434466666666666...9************ PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           ++v+ +ggy++++ ++a++l++ip++++E+n ipg+v+k++   +n
+  sp|Q31CY4|MURG_PROM9  92 NLVFTTGGYISAPTIVASKLLRIPIIIHESNVIPGMVTKYFGFLCN 137
+                           ***************************************9976665 PP
+
+>> sp|B1ZGP4|MURG_METPB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   77.3   1.4   5.6e-23   3.2e-20       1     133 [.       8     139 ..       8     145 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 77.3 bits;  conditional E-value: 5.6e-23
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           v++ +gGT+G+++Pa +la +L++rG++V lat  ++++        e+v+i++ ++  +   +l+    ++  ++++ +a +++++ +
+  sp|B1ZGP4|MURG_METPB   8 VLVCAGGTGGHLFPAQSLAYALKARGIRVALATDARVDSIAgDFPAEEIVTIASATPSGR--SMLRRAGAVLTLGRGFGQAARAVRRLN 94 
+                           6899*********************************99887666667777888766677..688888888888888************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133
+                           p++vvgfggy  +++++aa l+++p++++Eqn+++g +n +l++ 
+  sp|B1ZGP4|MURG_METPB  95 PAAVVGFGGYPTVPPMLAAQLLRVPTILHEQNAVMGRANGFLAKG 139
+                           ***************************************998875 PP
+
+>> sp|Q5LU63|MURG_SILPO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   78.3   0.6   2.7e-23   1.5e-20       2     137 ..       7     142 ..       6     144 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 78.3 bits;  conditional E-value: 2.7e-23
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++a+gGT+G+++Pa Ala++  r+G++Vrl t  + ++ +    +  e+ ++ +  ++++ +  l++ + + +   ++ ++   +++++
+  sp|Q5LU63|MURG_SILPO   7 MIAAGGTGGHMFPAQALAEAMLRKGWRVRLSTDARGARYTggFPHTTEISQVSSA-TFARGG-ILAKAMVAPRIAAGIAATAWEMRRDR 93 
+                           689**********************************999443444444458888.999999.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pdvvvgfggy + +al+aa+l++ p+ ++Eqng+ g vn+l++rr+  v
+  sp|Q5LU63|MURG_SILPO  94 PDVVVGFGGYPSIPALGAATLLRLPRMIHEQNGVLGRVNQLFARRVACV 142
+                           *********************************************9877 PP
+
+>> sp|B3CRE9|MURG_ORITI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   77.5   0.0   4.8e-23   2.7e-20       1     138 [.       4     140 ..       4     141 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 77.5 bits;  conditional E-value: 4.8e-23
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           + l+ggGT+G+++Pa+Al++eLq+rG++V l+t  ++e+ + +++++++  i   v   +    +k+l    + l a    ++++ +++
+  sp|B3CRE9|MURG_ORITI   4 IFLVGGGTGGHLFPAIALGEELQERGYNVYLITDTRCEKYLLNSNYSFKIhIMNMVSISN--TGIKKLYAYIRILAACITGFKLVYSNS 90 
+                           679*********************************************664222235556..45777777777888899999******* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p ++v fggy  ++++i+ +l +ip +++Eqn++ gl+n+l+ r+a+ + 
+  sp|B3CRE9|MURG_ORITI  91 PGLIVTFGGYTIAPIIINGILFKIPFILHEQNSVLGLANRLFLRYAKAIT 140
+                           **********************************************9875 PP
+
+>> sp|Q1GIV1|MURG_SILST  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   77.7   0.6   4.2e-23   2.4e-20       2     137 ..       7     142 ..       6     144 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 77.7 bits;  conditional E-value: 4.2e-23
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++a+gGT+G+++Pa Ala++  r+G++V+l t p+ ++ +    +  e+ ++ +  ++++ +  l++ + + +   ++ ++ + +++++
+  sp|Q1GIV1|MURG_SILST   7 LMAAGGTGGHMFPAQALAEAMLRKGWRVKLSTDPRGARYTggFPHMTEITEVSSA-TFARGG-LLAKAMVAPRIAAGVASMAMQMRRDR 93 
+                           79*************************************9644455566668888.999999.7777777778889************* PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           pdvv+gfggy + +al+aa+l+g p+ ++Eqng+ g+vn+ ++ r+  v
+  sp|Q1GIV1|MURG_SILST  94 PDVVIGFGGYPSIPALGAATLLGLPRMIHEQNGVLGKVNQKFATRVAEV 142
+                           ****************************************999988766 PP
+
+>> sp|Q1GZ01|MURG_METFK  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   76.6   0.3   9.1e-23   5.1e-20       2     138 ..       6     142 ..       5     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 76.6 bits;  conditional E-value: 9.1e-23
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++ GT+G+v P +A+a++ q rG++V+ l+t+ g+e+++ + +gl++  ++   + + k+   +tl+  ++   a+ +a ++++e +
+  sp|Q1GZ01|MURG_METFK   6 LIMAAGTGGHVMPGLAIAKTMQSRGWNVHwLGTTHGMENRLvPPSGLPMTLLKFS-GMRGKG-WKHTLLGMFRLVGATWRAWRLMRELQ 92 
+                           68999*************************************************9.888888.888888888888888999999***** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           p++v+g+ggyv ++ + aa+lag+p+ + ++++  +++n++l ++a++vl
+  sp|Q1GZ01|MURG_METFK  93 PQAVLGMGGYVTVPGGWAARLAGVPLAIVNADAALLMSNRALVKHAKRVL 142
+                           ***********************************************997 PP
+
+>> sp|B3ET95|MURG_AMOA5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   76.0   0.0   1.4e-22   7.8e-20       1     137 [.       3     143 ..       3     145 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 76.0 bits;  conditional E-value: 1.4e-22
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------..-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakle.slktlkelaeglkalrkakeil 84 
+                           v+++ggGT+G+v+P +A+a+ L+++  e     +++  ++e    ++ag+++v ++++ + ++kl+  +k+l  +  +l +l k+k+i+
+  sp|B3ET95|MURG_AMOA5   3 VIISGGGTGGHVYPGIAIADVLKQKNAENQilfVGAGGKMEMSQvPAAGYPIVGLPIR-GINRKLKyIWKNLALPIWVLISLWKVKRII 90 
+                           6899********************9999888899******86555*************.7777663278999999999999******** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           k++kp+vv+g+ggy+  + ++ a++ +ip+++ Eqn+ +g++n+ll+++a ++
+  sp|B3ET95|MURG_AMOA5  91 KDFKPNVVIGTGGYAGFPTIYMAARMHIPIVLQEQNAYAGVANRLLAKYAHKI 143
+                           *************************************************9987 PP
+
+>> sp|Q8A258|MURG_BACTN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   75.4   0.0   2.2e-22   1.2e-19       1     137 [.       7     145 ..       7     147 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 75.4 bits;  conditional E-value: 2.2e-22
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G+++Pav++a++  +  ++ +   ++++ ++e +  + ag+++  +++  ++ +k   +k+++ l +  ++  ka+ i+k
+  sp|Q8A258|MURG_BACTN   7 IIISGGGTGGHIFPAVSIANAIIELRPDAKilfVGAEGRMEMQRvPDAGYKIIGLPIA-GFDRKH-LWKNVSVLIKLARSQWKARSIIK 93 
+                           6899************************************98766*************.****98.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++p+v vg+ggy++++ l  a   g+p+ + Eqn+ +g++nkll+++a+ +
+  sp|Q8A258|MURG_BACTN  94 NFRPQVAVGVGGYASGPTLKTAGMMGVPTLIQEQNSYAGVTNKLLAQKAKAI 145
+                           ***********************************************99976 PP
+
+>> sp|Q211T8|MURG_RHOPB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   76.5   0.3   9.7e-23   5.5e-20       1     138 [.       8     144 ..       8     145 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 76.5 bits;  conditional E-value: 9.7e-23
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE....----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp....igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++la+gGT+G+++Pa Al+++L++rG +Vrl+t  +  +    +gl  +     ++++ +l+ +   ++  +++++ + ++  a  ++ 
+  sp|Q211T8|MURG_RHOPB   8 IMLAAGGTGGHLFPAEALGVALMKRGLRVRLVTDMRALRY---SGLFSRDmvdvVPSE-TLRGRS-PVALARTALKLGTGTLMALSLML 91 
+                           68*******************************9887777...455444443357777.888877.9999******************* PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + kp++v+gfggy  +++l+aa+  gip+ v+++n+++g +n++l+ +++ ++
+  sp|Q211T8|MURG_RHOPB  92 RLKPAAVIGFGGYPTLPPLLAARMFGIPTLVHDSNAVMGRANRFLSHKVTAIA 144
+                           ***********************************************999875 PP
+
+>> sp|Q2IYK8|MURG_RHOP2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   76.5   0.5   9.8e-23   5.5e-20       1     137 [.       7     142 ..       7     144 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 76.5 bits;  conditional E-value: 9.8e-23
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++la+gGT+G+++Pa Al++ L++rG +Vrl+t  + ++      ++ +++vp ++    + +   ++  ++ +  + ++ ka +++ +
+  sp|Q2IYK8|MURG_RHOP2   7 ILLAAGGTGGHLFPAEALGVVLMKRGLRVRLVTDSRAMRYSglfSADMIDVVPSETV---RGRT-PWALARTGLMLGAGTAKALALMLR 91 
+                           79****************************999998887743345666666665555...4444.777777778888889********* PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            kp++vvgfggy  +++l+aa++++ip+ ++++n+++g +n+ll++ ++ +
+  sp|Q2IYK8|MURG_RHOP2  92 LKPAAVVGFGGYPTLPPLFAARALRIPTLIHDSNAVMGRANRLLSKGVTAI 142
+                           *********************************************988876 PP
+
+>> sp|B1LXZ4|MURG_METRJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   76.9   0.9   7.2e-23   4.1e-20       1     137 [.       8     143 ..       8     145 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 76.9 bits;  conditional E-value: 7.2e-23
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++l +gGT+G+++Pa +la++L++rG++V lat  ++++   e    e+v+i++ ++  +    lk    ++  ++++  a + +++ +
+  sp|B1LXZ4|MURG_METRJ   8 ILLCAGGTGGHLFPAESLAHALRARGIRVALATDARVDSIAsEFPASEVVTIASATPSGR--SPLKRAGAVLTLGRGFGVAAKEIRRIN 94 
+                           7899***********************************998888899999999977777..578888888888888************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p+++vgfggy  +++++a   +++p++++Eqn+++g +n +l+r a ++
+  sp|B1LXZ4|MURG_METRJ  95 PAAIVGFGGYPTVPPVLAGQILRVPTILHEQNAVMGRANAFLARGARTI 143
+                           ******************************************9988766 PP
+
+>> sp|A2BNZ2|MURG_PROMS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   76.0   0.0   1.4e-22   7.8e-20       2     135 ..       8     137 ..       7     141 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 76.0 bits;  conditional E-value: 1.4e-22
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+ +e+ + +++++ l+++ +l++ +  ++++ ++++++++ ++ + +++ +k l +     +++ +ilke+k+
+  sp|A2BNZ2|MURG_PROMS   8 LVAASGTGGHIFPALAVSKEVED-EWNIHwLGIQQRLDANLIPQKYNLKTLNLKTPRKNIFLFYQYIKILMST----FQIIRILKEKKI 91 
+                           799*****************976.57***************88888888899886677766667777766666....************ PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           ++v+ +ggy++++ ++a++ ++ip++++E+n +pg+v+k++   +n
+  sp|A2BNZ2|MURG_PROMS  92 NLVFTTGGYISAPTIVASKILKIPIIIHESNVVPGMVTKYFGFLCN 137
+                           ***************************************9976665 PP
+
+>> sp|C0R2W7|MURG_WOLWR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   75.7   0.0   1.8e-22   9.9e-20       1     137 [.       3     130 ..       3     132 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 75.7 bits;  conditional E-value: 1.8e-22
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++la+gGT+G+++Pa+Ala++L+++G++ +l t ++  + +  e++ l+ +   ++ k++   + +  +++ ++         + +++ 
+  sp|C0R2W7|MURG_WOLWR   3 IILATGGTGGHIFPAIALAKALKTQGYNCILFTDKKTNKNTdiESYTLPLRRPSSN-KFKF--FLFLIYSSMLAL--------YQVRKL 80 
+                           78*******************************99988886556666666666655.4444..444444444444........788999 PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kp+ v+gfg+y++ + l+aa+ + ip++++Eqn + g vn+++ + a+ +
+  sp|C0R2W7|MURG_WOLWR  81 KPKSVIGFGSYASFPTLLAARVLSIPIILHEQNTVLGRVNRFFFKSAKLI 130
+                           ******************************************99988876 PP
+
+>> sp|Q73I55|MURG_WOLPM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   75.7   0.0   1.8e-22   9.9e-20       1     137 [.       3     130 ..       3     132 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 75.7 bits;  conditional E-value: 1.8e-22
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           ++la+gGT+G+++Pa+Ala++L+++G++ +l t ++  + +  e++ l+ +   ++ k++   + +  +++ ++         + +++ 
+  sp|Q73I55|MURG_WOLPM   3 IILATGGTGGHIFPAIALAKALKTQGYNCILFTDKKTNKNTdiESYTLPLRRPSSN-KFKF--FLFLIYSSMLAL--------YQVRKL 80 
+                           78*******************************99988886556666666666655.4444..444444444444........788999 PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           kp+ v+gfg+y++ + l+aa+ + ip++++Eqn + g vn+++ + a+ +
+  sp|Q73I55|MURG_WOLPM  81 KPKSVIGFGSYASFPTLLAARVLSIPIILHEQNTVLGRVNRFFFKSAKLI 130
+                           ******************************************99988876 PP
+
+>> sp|A9VWV3|MURG_METEP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   75.2   1.3   2.5e-22   1.4e-19       1     133 [.       8     139 ..       8     145 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 75.2 bits;  conditional E-value: 2.5e-22
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S-.-----.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvk.lwakleslktlkelaeglkalrkakeilkea 87 
+                           v++ +gGT+G+++Pa +la +L++rG++V lat  ++++        e+v+i++ ++ +++ l+  +++++l +g   + +a +++++ 
+  sp|A9VWV3|MURG_METEP   8 VLVCAGGTGGHLFPAQSLAYALKDRGIRVALATDARVDSIAgDFPAEEIVTIASATPsGRSVLRRAGAVVTLGRG---FGQAARAVRRL 93 
+                           6899********************************998776544555555665544044445555555555555...*********** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133
+                           +p++vvgfggy  +++++aa l+++p++++Eqn+++g +n +l++ 
+  sp|A9VWV3|MURG_METEP  94 NPAAVVGFGGYPTVPPMLAAQLLRVPTILHEQNAVMGRANGFLAKG 139
+                           ****************************************998875 PP
+
+>> sp|B7KSC1|MURG_METC4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   75.2   1.3   2.5e-22   1.4e-19       1     133 [.       8     139 ..       8     145 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 75.2 bits;  conditional E-value: 2.5e-22
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S-.-----.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvk.lwakleslktlkelaeglkalrkakeilkea 87 
+                           v++ +gGT+G+++Pa +la +L++rG++V lat  ++++        e+v+i++ ++ +++ l+  +++++l +g   + +a +++++ 
+  sp|B7KSC1|MURG_METC4   8 VLVCAGGTGGHLFPAQSLAYALKDRGIRVALATDARVDSIAgDFPAEEIVTIASATPsGRSVLRRAGAVVTLGRG---FGQAARAVRRL 93 
+                           6899********************************998776544555555665544044445555555555555...*********** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133
+                           +p++vvgfggy  +++++aa l+++p++++Eqn+++g +n +l++ 
+  sp|B7KSC1|MURG_METC4  94 NPAAVVGFGGYPTVPPMLAAQLLRVPTILHEQNAVMGRANGFLAKG 139
+                           ****************************************998875 PP
+
+>> sp|A2C027|MURG_PROM1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   75.7   0.0   1.7e-22   9.5e-20       2     138 ..       5     138 ..       4     139 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 75.7 bits;  conditional E-value: 1.7e-22
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+++Pa+++a+ L +    V l++p++le ++  ++++  +++++ +l+   + +++l +l + l a  ++  +l+++k++
+  sp|A2C027|MURG_PROM1   5 LIAASGTGGHIYPALSFADSLSNSWEIVWLGVPNRLEVELVPEKYNLIKLKVG-GLQG--NIFRKLFDLCKLLFASVQVSVLLRQKKIN 90 
+                           799********************998888********9998888899999999.9999..89*************************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           v++ +ggy++++ +++a+ agip+ ++E+n+ipg+v++ll r+++ v+
+  sp|A2C027|MURG_PROM1  91 VIFTTGGYISAPCILGAKMAGIPVLLHESNAIPGKVTRLLGRFCDHVA 138
+                           *******************************************99886 PP
+
+>> sp|A3PHS8|MURG_RHOS1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   73.9   0.7   6.3e-22   3.6e-19       2     137 ..       7     142 ..       6     144 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 73.9 bits;  conditional E-value: 6.3e-22
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++a+gGT+G+++Pa Ala++  rrG++V+l t  + ++      + +e++++ +  ++++ +  l++ + +++   ++ +a + + +++
+  sp|A3PHS8|MURG_RHOS1   7 LIAAGGTGGHMFPAQALAEAMVRRGWRVKLSTDARGARYAggFPHVVEIEEVSSA-TFARGG-PLAKALVPLRIAGGVASAVAGFLRDR 93 
+                           79********************************99999977778899999***9.****99.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p vvvgfggy + +al aa +++ p+ ++Eqng+ g vn+l++ r+  v
+  sp|A3PHS8|MURG_RHOS1  94 PSVVVGFGGYPSIPALSAAVALRLPRMIHEQNGVLGRVNRLFAPRVQAV 142
+                           ******************************************9999876 PP
+
+>> sp|A4SH02|MURG_PROVI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   74.2   1.2   4.9e-22   2.8e-19       1     138 [.       3     146 ..       3     147 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 74.2 bits;  conditional E-value: 4.9e-22
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----..S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd..vklwakleslktlkelaeglkalrkakei 83 
+                           +++aggGT+G+++PavA+a+e+qr  +       +t++g+e++  +  g+  + ++++   ++++  ++ +++  +a++  al +a ++
+  sp|A4SH02|MURG_PROVI   3 ILFAGGGTGGHLYPAVAMAEEVQRMVPGASvlfAGTSRGIEAREvPRLGYRLHLLEVRglRRGRSLKDMAANIGIAADFAAALASAVAL 91 
+                           79**********************86655554789******9999*******999999664445555789999999************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +++++pdvvvg+gg+v++++l+aa l+g ++ + Eqn+ pg++++ll+  a+ v+
+  sp|A4SH02|MURG_PROVI  92 VRRERPDVVVGTGGFVSAPVLFAAQLLGKKTLIQEQNAFPGVTTRLLSALATEVH 146
+                           ************************************************9999887 PP
+
+>> sp|Q3J4M2|MURG_RHOS4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   73.9   0.7   6.3e-22   3.6e-19       2     137 ..       7     142 ..       6     144 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 73.9 bits;  conditional E-value: 6.3e-22
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++a+gGT+G+++Pa Ala++  rrG++V+l t  + ++      + +e++++ +  ++++ +  l++ + +++   ++ +a + + +++
+  sp|Q3J4M2|MURG_RHOS4   7 LIAAGGTGGHMFPAQALAEAMVRRGWRVKLSTDARGARYAggFPHVVEIEEVSSA-TFARGG-PLAKALVPLRIAGGVASAVAGFLRDR 93 
+                           79********************************99999977778899999***9.****99.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p vvvgfggy + +al aa +++ p+ ++Eqng+ g vn+l++ r+  v
+  sp|Q3J4M2|MURG_RHOS4  94 PSVVVGFGGYPSIPALSAAVALRLPRMIHEQNGVLGRVNRLFAPRVQAV 142
+                           ******************************************9999876 PP
+
+>> sp|Q7V388|MURG_PROMP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   74.9   0.0     3e-22   1.7e-19       2     130 ..       9     133 ..       8     141 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 74.9 bits;  conditional E-value: 3e-22
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+ +++ + +++++ l+++++l+++   ++++  +++++++ ++ ++ ++ lk l++     + + +ilke+k+
+  sp|Q7V388|MURG_PROMP   9 LIAASGTGGHIFPALAVSKKVEK-DWDIHwLGVTKRLDSEFVPSKYNLLTLNLETPKKNIFRVFQYLKILFSI----FNIIKILKEKKI 92 
+                           799*****************975.78************99977778888888886666666777777777777....999********* PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                           ++v+ +ggy++++ ++aa++++ip++++E+n ipg v+k++
+  sp|Q7V388|MURG_PROMP  93 NLVFTTGGYISAPTILAAKWLKIPVILHESNLIPGTVTKYF 133
+                           **************************************998 PP
+
+>> sp|A3PAR5|MURG_PROM0  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   74.9   0.0     3e-22   1.7e-19       2     130 ..       8     132 ..       7     141 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 74.9 bits;  conditional E-value: 3e-22
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+ +e+ ++ ++++ l+++++l++    ++++ ++++++++ ++    +  + + ++ l +++++  ilke+k+
+  sp|A3PAR5|MURG_PROM0   8 LVAASGTGGHIFPALAVTKEVEDK-WNIHwLGVHKRLDANFIPKKYNLRTLNIKTPRKN----IFLFYQYFRILMSTFQVIWILKEEKI 91 
+                           799******************887.6999********9988777777777777733444....444555555555569*********** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                           ++v+ +ggy++++ +ia++l++ip++++E+n ipg+v+k +
+  sp|A3PAR5|MURG_PROM0  92 NLVFTTGGYISAPTIIASKLLRIPVIIHESNLIPGMVTKNF 132
+                           *************************************9876 PP
+
+>> sp|Q07PT3|MURG_RHOP5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   75.6   0.6   1.8e-22     1e-19       1     138 [.       7     143 ..       7     144 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 75.6 bits;  conditional E-value: 1.8e-22
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE....----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp....igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++la+gGT+G+++Pa Al++ L++rG +Vrl+t  +  +    +gl  ++    ++++ +++ +   ++  ++ a  + ++ ka +++ 
+  sp|Q07PT3|MURG_RHOP5   7 ILLAAGGTGGHLFPAEALGVVLMQRGLRVRLVTDSRALRY---SGLFSREmtdvVPSE-TVRGRS-PVALARTGAMLGAGTLKALTLMW 90 
+                           79****************************9999988777...677666633346666.777766.89999999999999********* PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + kp++v+gfggy  +++liaa+l +ip+ v+++n+++g +n++l+ +++ ++
+  sp|Q07PT3|MURG_RHOP5  91 RLKPAAVIGFGGYPTLPPLIAARLMKIPTLVHDSNAVMGRANRFLSAHVTAIA 143
+                           **********************************************9999875 PP
+
+>> sp|Q133X1|MURG_RHOPS  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   74.1   0.6   5.3e-22     3e-19       1     137 [.       7     142 ..       7     144 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 74.1 bits;  conditional E-value: 5.3e-22
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           ++la+gGT+G+++Pa Al++ L++rG +Vrl+t  + ++      ++ +++vp ++  +++     ++  ++    + ++  a  ++ +
+  sp|Q133X1|MURG_RHOPS   7 ILLAAGGTGGHLFPAEALGVVLMKRGLRVRLVTDSRAMRYSglfSADMIDVVPSETV-RGRT---PWALARTGVMLGAGTALAIGLMMR 91 
+                           79****************************999988887643356666666665555.3333...55666666666666888999**** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                            +p++v+gfggy  +++l+aa++++ip+ ++++n+++g +n+ll+rr+  +
+  sp|Q133X1|MURG_RHOPS  92 LRPAAVIGFGGYPTLPPLFAARALRIPTLIHDANAVMGRANRLLSRRVSAI 142
+                           ***********************************************9876 PP
+
+>> sp|Q5LIJ7|MURG_BACFN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   74.4   0.1   4.4e-22   2.5e-19       1     137 [.      16     154 ..      16     156 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 74.4 bits;  conditional E-value: 4.4e-22
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+++Pav++a++ ++  ++     ++++ ++e +  + ag+++  +++  ++ +k   +k++  l++  ++  ka+ i++
+  sp|Q5LIJ7|MURG_BACFN  16 VIISGGGTGGHIFPAVSIANAIKELRPDAQilfVGAEGRMEMQRvPDAGYQIIGLPVA-GFDRKH-LWKNVAVLLKLVRSQWKARNIIR 102
+                           6899**************************99********98766*************.****98.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++p+v vg+ggy++++ l  a   g+p+ + Eqn+ +g++nkll+++a ++
+  sp|Q5LIJ7|MURG_BACFN 103 QFRPQVAVGVGGYASGPTLKMAGMMGVPTLIQEQNSYAGVTNKLLAQKARRI 154
+                           ***********************************************99987 PP
+
+>> sp|Q64ZM1|MURG_BACFR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   74.4   0.1   4.4e-22   2.5e-19       1     137 [.      16     154 ..      16     156 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 74.4 bits;  conditional E-value: 4.4e-22
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ggGT+G+++Pav++a++ ++  ++     ++++ ++e +  + ag+++  +++  ++ +k   +k++  l++  ++  ka+ i++
+  sp|Q64ZM1|MURG_BACFR  16 VIISGGGTGGHIFPAVSIANAIKELRPDAQilfVGAEGRMEMQRvPDAGYQIIGLPVA-GFDRKH-LWKNVAVLLKLVRSQWKARNIIR 102
+                           6899**************************99********98766*************.****98.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +++p+v vg+ggy++++ l  a   g+p+ + Eqn+ +g++nkll+++a ++
+  sp|Q64ZM1|MURG_BACFR 103 QFRPQVAVGVGGYASGPTLKMAGMMGVPTLIQEQNSYAGVTNKLLAQKARRI 154
+                           ***********************************************99987 PP
+
+>> sp|A6LLF1|MURG_THEM4  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   74.4   0.0   4.4e-22   2.5e-19       1     139 []       4     144 ..       4     144 .. 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 74.4 bits;  conditional E-value: 4.4e-22
+                           EEEE-------HHHHHHHHHHHHH--.-EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrG.heVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++agg T+G+++Pa+A  +eLq+   ++V  + ++ +lee+v + ++ ++v+++++ +l + l s++++k++++ l+a + +k++lk+
+  sp|A6LLF1|MURG_THEM4   4 IAVAGGVTGGHLYPALATLNELQKITpIDVLyFTVKGKLEEKVlKDYNFKTVSLDVK-GLIRPLYSFGNIKRILKILNAKNIVKKALKD 91 
+                           789*********************7626999**************************.******************************* PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139
+                           +kpd+ + +ggyv+ ++++ a+ +g  ++++Eqn ipgl+n  l++ a++v+v
+  sp|A6LLF1|MURG_THEM4  92 FKPDIAFVTGGYVSYPVGVTAKQLGFLLYIHEQNVIPGLTNLKLSKIADKVFV 144
+                           *************************************************9985 PP
+
+>> sp|Q46HH6|MURG_PROMT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   74.4   0.0   4.2e-22   2.4e-19       2     138 ..       5     138 ..       4     139 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 74.4 bits;  conditional E-value: 4.2e-22
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+++Pa+++a+ L +    V l++p +le ++  ++++  +++++ +l+   +s+++l +l + l a  ++  +l+++k++
+  sp|Q46HH6|MURG_PROMT   5 LIAASGTGGHIYPALSFADSLSNSWEIVWLGVPHRLEVELVPEKYNLIKLKVG-GLQG--NSFRKLFNLCKLLFASVQVSVLLRQKKIN 90 
+                           799********************998888********9998888888999999.9999..99*************************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           v++ +ggy++++ +++a+ agip+ ++E+n+ipg+v++ll r+++ v+
+  sp|Q46HH6|MURG_PROMT  91 VIFTTGGYISAPSILGAKMAGIPVLLHESNAIPGKVTRLLGRFCDHVA 138
+                           *******************************************99886 PP
+
+>> sp|A4WQD5|MURG_RHOS5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   72.8   1.1   1.4e-21   7.8e-19       2     137 ..       7     142 ..       6     144 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 72.8 bits;  conditional E-value: 1.4e-21
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++a+gGT+G+++Pa Ala++  rrG++V+l t  + ++      + +e+ ++ ++ ++++ +  l+  + +a+   ++ +a   + +++
+  sp|A4WQD5|MURG_RHOS5   7 LIAAGGTGGHMFPAQALAEAMVRRGWRVKLSTDARGARYAggFPHVVEIDQVSSG-TFARGG-ALARALVPARIAAGVASAVVGFLRDR 93 
+                           79********************************99999877677889999****.999999.999999999999************** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           p+vvvgfggy + +al aa +++ p+ ++Eqng+ g vn+l++ r++ v
+  sp|A4WQD5|MURG_RHOS5  94 PAVVVGFGGYPSIPALSAAVALRLPRMIHEQNGVLGRVNRLFAPRVDAV 142
+                           *********************************************9987 PP
+
+>> sp|A2BUH4|MURG_PROM5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   73.1   0.0   1.1e-21     6e-19       2     130 ..       9     133 ..       8     142 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 73.1 bits;  conditional E-value: 1.1e-21
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++a+ GT+G+++Pa+A+ +e+ ++  +++ l+++++l+++   ++++  +++++   ++  +s+  l + ++ l +++ + +ilke+k+
+  sp|A2BUH4|MURG_PROM5   9 LIAASGTGGHIFPALAVSKEVEKYW-NMHwLGVEKRLDSKFVPRKYNLLTLNLE--TPQ--KSIFILFQYLKILYSTFNIIKILKEKKI 92 
+                           799*******************995.9***********9997777777777777..556..5677888888888889************ PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130
+                           ++v+ +gg+++++ ++aa+l++ip++++E+n ipg v+k++
+  sp|A2BUH4|MURG_PROM5  93 NLVFTTGGFISAPTILAAKLLNIPVIIHESNLIPGTVTKYF 133
+                           **************************************998 PP
+
+>> sp|Q5GS79|MURG_WOLTR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   71.8   0.0   2.7e-21   1.5e-18       1     135 [.       3     128 ..       3     132 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 71.8 bits;  conditional E-value: 2.7e-21
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +vla+gGT+G+++Pa+ lar+ +r+G++ +l + ++  + +  + + l+  + g++ k++   + l  ++           a + +++ 
+  sp|Q5GS79|MURG_WOLTR   3 IVLATGGTGGHIFPAITLARAIKRQGYDSILFADKKTGKNTdvKDYTLPLNKPGGN-KFRF--FLLLIYS--------CVLALYQIRKL 80 
+                           79****************************88887777666346666666655555.4444..3333333........35556889*** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           kp++v+gfggy++ + l+aa+ + ip++++Eqn++ g vnk++   a+
+  sp|Q5GS79|MURG_WOLTR  81 KPKLVIGFGGYASFPTLLAAKVLSIPIILHEQNAVLGRVNKFFFNSAE 128
+                           ******************************************977665 PP
+
+>> sp|Q7NPZ9|MURG_CHRVO  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   71.1   0.1   4.4e-21   2.5e-18       1     133 [.       6     138 ..       6     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 71.1 bits;  conditional E-value: 4.4e-21
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           v++++ GT+G++ P +A+a+eLq rG++V  l+t +g+e+++ + +g++ + ++   +++ k+  l+ lk +++   a++++ + + ++
+  sp|Q7NPZ9|MURG_CHRVO   6 VMVMAAGTGGHIVPGLAVAKELQSRGWKVVwLGTRRGMENKLvPPTGIPLERLNFH-GVRGKG-LLGSLKGALQLAGAFFSSAAQIFRH 92 
+                           67899***************************************************.******.************************* PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133
+                           +pdvv+g+ggyv ++ ++ a l++ p+++ ++++  +l+nk+l  +
+  sp|Q7NPZ9|MURG_CHRVO  93 RPDVVLGMGGYVCLPGGVMAGLLWKPLVLVNADAGLLLSNKALLPF 138
+                           ********************************99999999987555 PP
+
+>> sp|Q1AVX3|MURG_RUBXD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   68.1   0.0   3.8e-20   2.1e-17      19     139 .]       2     121 ..       1     121 [. 0.93
+   2 ?    3.7   0.1       2.8   1.6e+03       1      24 [.     165     188 ..     165     192 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 68.1 bits;  conditional E-value: 3.8e-20
+                           HHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE-- CS
+       Glyco_transf_28  19 areLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlali 105
+                           a+ L++rG eV  ++++ gle+++ ++ag   +++++  +l+    s +  + l+++  a+ + +++l+e +p +v+g+ggy++++a+ 
+  sp|Q1AVX3|MURG_RUBXD   2 AESLRERGAEVVfFGSESGLERELvPKAGFGLHALPLS-GLAGGPASRARASLLFAR--AVVRCRALLRELRPGAVLGVGGYASAPAVA 87 
+                           889***********************************.999977666666666666..****************************** PP
+
+                           HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS
+       Glyco_transf_28 106 aallagipanvaEqngipglvnkllprrangvlv 139
+                           aa+l+gip++++Eqn++pg+vn++  r+a  vlv
+  sp|Q1AVX3|MURG_RUBXD  88 AARLLGIPTFIHEQNSVPGKVNRAAGRFAREVLV 121
+                           ****************************999875 PP
+
+  == domain 2    score: 3.7 bits;  conditional E-value: 2.8
+                           EEEE-------HHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqr 24 
+                           vvl+ gG++G +   +A a++++ 
+  sp|Q1AVX3|MURG_RUBXD 165 VVLVFGGSGGALRINLAAAEAFRG 188
+                           799*****************9986 PP
+
+>> sp|Q7MBC4|MURG_GLOVI  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   71.2   0.1   4.2e-21   2.4e-18       2     134 ..       7     136 ..       6     140 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 71.2 bits;  conditional E-value: 4.2e-21
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                           ++a+ GT+G+++Pa+A+a eL + ++   l++p++le+++    ++ ++++++ +l++k   ++ l  + + + a+r a+ +l++++ +
+  sp|Q7MBC4|MURG_GLOVI   7 LIAASGTGGHIFPALAVAGELSEFEIAW-LGVPDRLENKLVPGRYPLHTVALQ-GLNRKP-GPQWLEAASQTFAAYRYARNLLSQERFA 92 
+                           799**********************444.***********7777888888888.889988.999999999999**************** PP
+
+                           HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134
+                            v+ +ggy+a++a++aa++++ pa+ +E+n +pg+v ++l+r+ 
+  sp|Q7MBC4|MURG_GLOVI  93 GVFTTGGYIAAPAVLAARSLNLPAIGHESNVLPGKVIRYLARWM 136
+                           ***************************************99986 PP
+
+>> sp|Q7U322|MURG_HELHP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   70.9   0.0     5e-21   2.8e-18       1     137 [.       2     140 ..       2     141 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 70.9 bits;  conditional E-value: 5e-21
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeilke 86 
+                           ++++ggGT+G++  a Ala+e q+   + + ++++ g ++++ e + l ++ + +d +++ +k   l+++k ++++lka  +a+ ilk+
+  sp|Q7U322|MURG_HELHP   2 FAITGGGTGGHLAIAKALAQEAQKNNQQSIyIGSQIGQDKTWfEGSSLFTHCYFLDsTGVVNKK-GLGKIKAIFKQLKAAWEARNILKK 89 
+                           799***********************99999*******************99888865777766.9*********************** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +k+++v+++gg++a+ a+i+a+l++ p++++Eqn+i g+ n +l  +a+ +
+  sp|Q7U322|MURG_HELHP  90 HKIEYVISVGGFSAGGASIGAILSNTPLFIHEQNAIKGKLNEILTPFAKAI 140
+                           *******************************************99999876 PP
+
+>> sp|Q3B129|MURG_PELLD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   71.4   0.5   3.5e-21     2e-18       1     138 [.       3     146 ..       3     147 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 71.4 bits;  conditional E-value: 3.5e-21
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.....S------.-HHHCCSHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.....vklwakleslktlkelaeglkalrka 80 
+                           +++aggGT+G+++PavA+a  L++  + V+    +t  g+e+   +  g+  + i+++       l a l  ++ l+++a+    l++a
+  sp|Q3B129|MURG_PELLD   3 ILFAGGGTGGHLYPAVAMAAMLKEMVPGVElsfAGTASGIEAGEvPRLGYRLHLIPVRglkrgRSLSALLSNIGVLTDFAAS---LFRA 88 
+                           79****************************88889*****99877*************766655555555555555566665...**** PP
+
+                           HHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  81 keilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +++++++pdvvvg+gg+v++++l+aa l+g ++ + Eqn+ pgl+++ll+  a  v+
+  sp|Q3B129|MURG_PELLD  89 AALIRRERPDVVVGTGGFVSAPVLLAAQLLGRKTLIQEQNAFPGLTTRLLSILAREVH 146
+                           ************************************************9997777666 PP
+
+>> sp|Q30PK0|MURG_SULDN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   66.5   0.0   1.2e-19   6.9e-17       3     136 ..       5     140 ..       3     143 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 66.5 bits;  conditional E-value: 1.2e-19
+                           EE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   3 laggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++ggGT+G++  a Al ++  + Ghe + ++++ g +++  e+     + + ++ +++ ++ + l++lk l+ +l+a++++++ilk+++
+  sp|Q30PK0|MURG_SULDN   5 ITGGGTGGHLMIAEALVEACANDGHEAIfIGSTSGQDRKYfEQNSKFSHVYFLQtTGVVNQ-RGLGKLKALWLVLRAFFASRAILKKHN 92 
+                           79************************************99744433333344442255554.599************************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           +++++++gg++a++a++a+l++ ip++++Eqn++ g+ n +l+ +a++
+  sp|Q30PK0|MURG_SULDN  93 IQATYSVGGFSAAAASFASLSRLIPLFIHEQNAVYGKLNSILKPFATR 140
+                           ******************************************999987 PP
+
+>> sp|A2SCY5|MURG_METPP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   68.7   0.2   2.4e-20   1.4e-17       2     137 ..       7     145 ..       6     147 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 68.7 bits;  conditional E-value: 2.4e-20
+                           EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH....HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv....eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           v+++ GT+G++ P +A+a+e q+rG+ V  l+t+ g+e+++    +e+g+e+ +i+   +l+ k+  l+tl+  ++ l a+ +  +il+
+  sp|A2SCY5|MURG_METPP   7 VVMAAGTGGHIIPGLAVAQEMQHRGWTVSwLGTEQGMENRLvppaAESGIEMDTIAFS-GLRGKG-LLHTLTGGLRLLGAFAACAKILR 93 
+                           7899***********************************988766789**********.******.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +   ++v+g+ggyv  + ++ a+l+g p+++ ++++  +++n++l+  a+++
+  sp|A2SCY5|MURG_METPP  94 RRATTAVLGMGGYVCFPGGLMASLLGKPLILVNADAALLMSNRALKPVADRI 145
+                           *******************************************999998887 PP
+
+>> sp|A0RP87|MURG_CAMFF  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   64.4   0.0   5.3e-19     3e-16       1     136 [.       2     139 ..       2     142 .. 0.92
+   2 ?    2.5   0.0       6.7   3.8e+03       2      41 ..     171     210 ..     170     264 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 64.4 bits;  conditional E-value: 5.3e-19
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++++ggGT+G++  a Ala eL++rG +V+ +++  g ++++ e + +   +   +++ ++ +k   +++l  l++  k  +k + i+ 
+  sp|A0RP87|MURG_CAMFF   2 IAITGGGTGGHLAIAKALAIELKNRGENVIfIGSNSGQDRMWfEHSDIFKFKyfFPSR-GVVNKK-GIHKLFALLNIIKLAFKCRCIFT 88 
+                           789***************************************9888886544356777.888877.999999999999*********** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           e+++  v+++ggy++++a+++a   + +++++Eqn+i g+ n +l+ ++++
+  sp|A0RP87|MURG_CAMFF  89 EHNISSVISVGGYSSAPASFGAVIFRKKLFIHEQNAIKGKLNSILKPFCKK 139
+                           *******************************************99988876 PP
+
+  == domain 2    score: 2.5 bits;  conditional E-value: 6.7
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH CS
+       Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv 41 
+                           +++gg  +  +  ++Al  +L  + h++ ++ ++g +e  
+  sp|A0RP87|MURG_CAMFF 171 LFLGGSQGASFINSLALNLALNLKNHNINIIHQCGAKELE 210
+                           66777777789999***************99999988873 PP
+
+>> sp|B3CM87|MURG_WOLPP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   66.6   0.0   1.1e-19   6.2e-17       1     137 [.       3     127 ..       3     129 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 66.6 bits;  conditional E-value: 1.1e-19
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           ++la+gGT+G+v+Pa+ la++L+ +Gh+ +l t  +  +  e++ l+ ++  ++ kl+    +l +++ +++         +  ++ kp
+  sp|B3CM87|MURG_WOLPP   3 IILATGGTGGHVFPAITLAKALKVQGHNCILFTDQKTINI-ESYILPLCKPSGN-KLKF--LFLLMYSCVLAL--------YQTRKLKP 79 
+                           78***************************99999988765.9999999887777.5555..334444444444........556999** PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           ++++gfg+y++ + l+aa+ + ip++++Eqn + g vn+++ + a+ +
+  sp|B3CM87|MURG_WOLPP  80 KLIIGFGSYASFPTLLAAKILSIPIVLHEQNTVLGRVNRFFFKSAKLI 127
+                           ****************************************99988876 PP
+
+>> sp|A5FUL0|MURG_ACICJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   66.2   2.3   1.4e-19   8.1e-17       1     135 [.       9     145 ..       9     149 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 66.2 bits;  conditional E-value: 1.4e-19
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +v+a+gGT+G++ Pa ++a+eL+rrG ++ l t  + + +     ag e + +++  +l+ +    + l+ +a+  +++ +a+ il++ 
+  sp|A5FUL0|MURG_ACICJ   9 IVIAAGGTGGHMVPAESVADELMRRGQRIVLMTDARSAGQKsaVFAGCERHVLAGA-GLAGRS-LGRRLLGVAQLARGTVAARHILAKL 95 
+                           79****************************99999999886556788887778888.788877.9999********************* PP
+
+                           HHHHHHHC----EEEE--HHH..HHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaal..lagipanvaEqngipglvnkllprran 135
+                            +++vvgfggy ++++++aa+  +++ ++++++qn++ g +n++l+r+a+
+  sp|A5FUL0|MURG_ACICJ  96 DAAAVVGFGGYPSVPPVLAAAtlRRRPAIVLHDQNAVLGGANRFLARFAD 145
+                           *****************9998778999********************998 PP
+
+>> sp|Q7MAD4|MURG_WOLSU  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   65.8   0.0   1.9e-19   1.1e-16       1     131 [.       3     135 ..       3     140 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 65.8 bits;  conditional E-value: 1.9e-19
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++  a Al++ L  +      +++++g ++ +   e+g + +  ++++ ++ ++   ++++++l ++++a+ +a++ilk
+  sp|Q7MAD4|MURG_WOLSU   3 ILLTGGGTGGHLAIAKALMESLASKNQSLFfIGSQRGQDRSWfeHEEGFKRRFfLETQ-GVVNQR-GIAKIRSLSSQFQAMLEARKILK 89 
+                           79************************9999***********98667777777777777.666655.9********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSG CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllp 131
+                           +++++ vv++ggy+a++a++aal++gip++++Eqn+  gl n+ll+
+  sp|Q7MAD4|MURG_WOLSU  90 NHQIKRVVSVGGYSAAPASLAALSLGIPLYIHEQNAKVGLLNRLLK 135
+                           ****************************************999876 PP
+
+>> sp|B2KE54|MURG_ELUMP  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   64.5   0.0   4.9e-19   2.8e-16       1     135 [.       4     139 ..       4     143 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 64.5 bits;  conditional E-value: 4.9e-19
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           +++a+gGT+G+++P  +l++eL++r +eV  ++ +++ + ++ ++ + ++++i+   +++++ + ++ +   +++  ++ ++  i+  +
+  sp|B2KE54|MURG_ELUMP   4 FIIASGGTGGHFYPGFSLGKELRKRSYEVLfVVRKEDAAIKTlTKNNFNYKEINFT-GFPRSANPIRHIIFCYKFIVSFWQTLGIINAF 91 
+                           789***************************8666666666666*************.******************************** PP
+
+                           HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           kpdv+vg+ggy + ++++ a+  gi+  v+++n   gl+nk+++++ n
+  sp|B2KE54|MURG_ELUMP  92 KPDVCVGMGGYLSFPVIVWAKIKGIKSAVHDSNTKIGLANKICAKFTN 139
+                           ******************************************999876 PP
+
+>> sp|B3EIK8|MURG_CHLL2  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   64.8   0.3     4e-19   2.2e-16       1     133 [.       3     141 ..       3     147 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 64.8 bits;  conditional E-value: 4e-19
+                           EEEE-------HHHHHHHHHHHHH-..--EEE.EEETGGGHHHH.HH---EEEE----S------....-HHHCCSHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrr..GheVr.latppgleefv.eeagleavpigpdvklwakle...slktlkelaeglkalrkake 82 
+                           v++aggGT+G+++PavA+a+eL +   G  V   +t++g+e+   +  g+  + ++++ +l++ +     l+++  l ++  al  a  
+  sp|B3EIK8|MURG_CHLL2   3 VLFAGGGTGGHLYPAVAMAVELLKLvpGASVSfAGTKNGIEASEiPRLGYRLHLLPVR-GLKRGGSlraILANVGILIDFAGALINAGG 90 
+                           79**********************8445666688999999998889999999999999.66665530003444455566677899999* PP
+
+                           HHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS
+       Glyco_transf_28  83 ilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133
+                           ++++++pdvvvg+gg+v++++l+aa   g  + + Eqn+ pg+++kll+  
+  sp|B3EIK8|MURG_CHLL2  91 LIRRENPDVVVGTGGFVSAPVLLAAQMMGRRTLIQEQNAFPGVTTKLLSIL 141
+                           **********************************************99865 PP
+
+>> sp|A5UZT7|MURG_ROSS1  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   65.4   2.3   2.5e-19   1.4e-16       3     138 ..      20     177 ..      18     178 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 65.4 bits;  conditional E-value: 2.5e-19
+                           EE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.........................S------.-HHH CS
+       Glyco_transf_28   3 laggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.........................vklwakleslkt 66 
+                           l+ggGT+G+v+Pa+A+a +L + G +  +a ++g +++  +++    ++ ++                         v++++ l ++++
+  sp|A5UZT7|MURG_ROSS1  20 LVGGGTGGHVYPALAVAAALNAHGAQFVVADTDGGRNRAMSRHTRWSALYVGsvggmeaalvaresalpfhalpaaaVRGRNPLTMVRN 108
+                           89*************************************777777777444445**********************9999999999999 PP
+
+                           CCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  67 lkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           l +la+g   + +a +++++++p++++g+ggyv +++++aa+la +p+++   + +pgl+ +ll+r an v+
+  sp|A5UZT7|MURG_ROSS1 109 LITLARG---TGAAHRLIARDRPAAILGTGGYVCVPVFLAARLACVPTVIYQPDVVPGLAVRLLARLANLVA 177
+                           9999999...********************************************************999875 PP
+
+>> sp|Q5FUJ5|MURG_GLUOX  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   63.1   0.5   1.3e-18   7.2e-16       1     134 [.       5     142 ..       5     147 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 63.1 bits;  conditional E-value: 1.3e-18
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE....----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp....igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           +v+a+gGT+G+++Pa A+a  L +rGh+  l t  +  ++  e+gl        +++  +++ k+  ++++  +++ l+++ +a++il+
+  sp|Q5FUJ5|MURG_GLUOX   5 IVIAAGGTGGHFFPAEAVATVLAERGHDLVLMTDARHGRR--ETGLFKDRpqyvLDGA-GVAGKG-LSGKVHGVLALLRGMMEARRILA 89 
+                           79***************************98877766665..4444443334224555.799999.999999***************** PP
+
+                           HHHHHHHHHC----EEEE--HHH....HHHHHHHHHHH----EEEEESSGGGS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaal....lagipanvaEqngipglvnkllprra 134
+                           +  +++vvgfggy + ++l+a++    + + + +++E n++ g +n +l+r+ 
+  sp|Q5FUJ5|MURG_GLUOX  90 SLDAAAVVGFGGYPSIPPLTASRllpsAKRPQMVIHEGNAVLGQANAFLSRFS 142
+                           **********************9888888999*****************9985 PP
+
+>> sp|A6Q722|MURG_SULNB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   60.6   0.0   7.8e-18   4.4e-15       1     135 [.       3     137 ..       3     141 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 60.6 bits;  conditional E-value: 7.8e-18
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           ++++ggGT+G++  + A+ ++L+ ++  + ++++ g ++++ e+++  ++++  d+++  + + +++lk+l+  l+a+ ka+++lk++ 
+  sp|A6Q722|MURG_SULNB   3 IIMTGGGTGGHLAIIKAVKEQLKGEE-LIYIGSTTGQDRQWfENDEDFTETYFFDTRGVVNQRGFGKLKSLWMMLQAMMKARKLLKKYD 90 
+                           689********************999.555***********999998888887775555555699************************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           ++vv+++gg+++++  +aa++a +p++++Eqn+  g  nkll  +a 
+  sp|A6Q722|MURG_SULNB  91 AKVVFSVGGFSSAATAFAAKSASVPLVIHEQNAALGSLNKLLRPYAA 137
+                           ****************************************9988875 PP
+
+>> sp|B8E325|MURG_DICTD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   61.1   0.0   5.5e-18   3.1e-15       1     138 [.       4     135 ..       4     136 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 61.1 bits;  conditional E-value: 5.5e-18
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+v Pa+ +a+   +r ++ +   ++ ++ +ee++ + +++++ +++    ++    +k+l+  +    ++++a +il e
+  sp|B8E325|MURG_DICTD   4 ILFVAGGTGGHVIPALNMADYISERAPHWKisfIGRKNSFEEKLIAGKYDFYGLDII---KS--SDIKKLSYYL----SIKDALKILGE 83 
+                           799**********************9998888*******************555555...33..3444444444....55999****** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            +pd++v fg+y+ +++++a++  + p +++Eqn ipg v+kl+ r+  gv+
+  sp|B8E325|MURG_DICTD  84 LEPDILVVFGSYITVPIIVASIIKKLPFFLHEQNVIPGRVTKLFYRFSQGVA 135
+                           **********************************************999886 PP
+
+>> sp|A6Q579|MURG_NITSB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   60.3   0.0   9.9e-18   5.6e-15       1     138 [.       3     142 ..       3     143 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 60.3 bits;  conditional E-value: 9.9e-18
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp...igpdvklwakleslktlkelaeglkalrkakeil 84 
+                           ++++ggGT+G++  a +l +++++++     +++  g ++ + e+++ ++++    +++ ++ +k   +++++ l +  +a ++ak+++
+  sp|A6Q579|MURG_NITSB   3 ILITGGGTGGHLSVAKSLKEAFKKKDATLYyIGSIQGQDRSWfENDE-DFQKklfFDVE-GVVNKK-GINKIRALTDIVRASFAAKKLI 88 
+                           789***********************9998************65555.44444555555.555555.78888888888899******** PP
+
+                           HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           k++++d+vv++ggy+a++a++aal ++ p++++Eqn++ g+ n+ll+ +a++v+
+  sp|A6Q579|MURG_NITSB  89 KNESIDAVVSVGGYSAAAASFAALQLNLPLFIHEQNAVKGKLNRLLSPFAKRVF 142
+                           ***************************************************996 PP
+
+>> sp|Q0BV25|MURG_GRABC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   59.3   0.5     2e-17   1.1e-14       1     133 [.      10     144 ..      10     148 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 59.3 bits;  conditional E-value: 2e-17
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETG...GGHHHH.HH--...-EEEE----S------.-HHHCCSHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatpp...gleefv.eeag...leavpigpdvklwakleslktlkelaeglkalrkake 82 
+                           +++a+gGT+G+++Pa Ala eL+rrG ++ l t     gl+++v + +    l+   i+++ + ++     +++  l +g   + ka +
+  sp|Q0BV25|MURG_GRABC  10 IIIAAGGTGGHFFPAEALAAELKRRGRQIVLMTDArsgGLTSTVfADTDrfvLPGAGIAGR-GIRR---AGQAVIALGHG---VVKAGA 91 
+                           689***************************9887611145566633322111333334444.5555...44666666666...****** PP
+
+                           HHHHHHHHHHHHC----EEEE--HHH..HHHHHHHHHHH----EEEEESSGGG CS
+       Glyco_transf_28  83 ilkeakpdvvvgfggyvadlaliaal..lagipanvaEqngipglvnkllprr 133
+                           +l++ ++  +vgfggy   +++++a+  ++++p++++Eqn++ g +n+ll+r+
+  sp|Q0BV25|MURG_GRABC  92 LLRRLEAGCIVGFGGYPCIPPVLGARlrARNVPVILHEQNAVLGRANRLLARK 144
+                           ************************9966789*****************99886 PP
+
+>> sp|Q5PB22|MURG_ANAMM  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   59.0   0.0   2.4e-17   1.3e-14       1     135 [.       4     137 ..       4     141 .. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 59.0 bits;  conditional E-value: 2.4e-17
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 
+                           vvla+gGT+G++ Pa+ l + L +rG++  l t   +   + +  g++ + + p   +++++  ++ lk  a    +   +   l++ k
+  sp|Q5PB22|MURG_ANAMM   4 VVLAAGGTGGHIVPAALLCQVLADRGYRCVLYTDQYFLQYTaRFPGIKGYVLLPL--CKRSGGAVRLLKFCALLAYSCVLSYIKLRSLK 90 
+                           79**************************************9999****9998887..67777799999999999999************ PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                           pd+v+gfg y++ ++l+ a+l  + a+++Eqn+++g vn++++ +a 
+  sp|Q5PB22|MURG_ANAMM  91 PDLVIGFGAYASFPVLLSAWLMSVDAVLHEQNSVMGRVNRVFAGYAR 137
+                           ******************************************99986 PP
+
+>> sp|A7I265|MURG_CAMHC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   58.5   0.0   3.4e-17   1.9e-14       1     137 [.       3     141 ..       3     143 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 58.5 bits;  conditional E-value: 3.4e-17
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeilke 86 
+                           ++++ggGT+G++  a  la eL++rG + + +++++g +  + e++ l  +++ ++  ++ +k   ++ +++l++ l   +  ++i+++
+  sp|A7I265|MURG_CAMHC   3 IAITGGGTGGHLTIAKILAYELKKRGLKTIfIGSTNGQDMLWfENSVLFDEKYFLKsSGVVNKK-GISRILSLFKILALSFGCRKIFAK 90 
+                           789***************************************9999998888665532666666.899999999999999********* PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           +  ++v+++ggy++++a + a +++ip++++Eqn+  g+ n ll+r+a++ 
+  sp|A7I265|MURG_CAMHC  91 HDVKAVISVGGYSSAPAAFWAVANKIPLFIHEQNAEIGKINALLKRFAKRF 141
+                           ************************************************985 PP
+
+>> sp|A9FI55|MURG_SORC5  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   60.1   0.8   1.1e-17   6.3e-15       1     138 [.       4     145 ..       4     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 60.1 bits;  conditional E-value: 1.1e-17
+                           EEEE-------HHHHHHHHHHHHH..---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqr..rGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 
+                           v++aggGT+G+v+P +A+++++++  r+ e r   ++t +g+e +v  e+g + + + +  +l+  +  +++++ +a+ +  l +a+++
+  sp|A9FI55|MURG_SORC5   4 VLIAGGGTGGHVFPMIAVGDAVRAaaRDEEARvvyVGTARGIEVRVmGERGDNLELLHVL-PLRGGG-LSGFVRGAARAGSVLPEARRL 90 
+                           799*****************998622444555669*******************999999.999999.********************* PP
+
+                           HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +++  + v ++ ggy+ +++++aa+++g+p+ + E n++ gl+n+ll+  +++++
+  sp|A9FI55|MURG_SORC5  91 VERLDARVALSLGGYAGGPVSLAARSLGVPVAILEPNSVLGLSNRLLAPIVDRAY 145
+                           ***********************************************99999987 PP
+
+>> sp|B5YEL3|MURG_DICT6  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   58.7   0.0     3e-17   1.7e-14       1     138 [.       4     135 ..       4     136 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 58.7 bits;  conditional E-value: 3e-17
+                           EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           +++++gGT+G+v Pa+ +a+   ++ ++ +   ++ ++ +ee +   +++++ +++    ++    +k+l+  ++      +a +il e
+  sp|B5YEL3|MURG_DICT6   4 ILFVAGGTGGHVIPALNMADYIAQKAPHWKisfVGRKDSFEEGLIRGKYDFYGLNIS---RS--SDVKKLSYYLSI----SDAIKILNE 83 
+                           799*******************9998888888*******************999999...22..244444444444....777****** PP
+
+                           HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                            kpd++v fg+y+ ++++ia++  + p +++Eqn +pg v+kl+  + +gv+
+  sp|B5YEL3|MURG_DICT6  84 VKPDILVVFGSYITVPVIIASIVKKYPFFLHEQNVVPGRVTKLFYEFSEGVA 135
+                           ********************************************99988876 PP
+
+>> sp|A8FM88|MURG_CAMJ8  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   55.1   0.0   3.8e-16   2.1e-13       1     136 [.       3     140 ..       3     143 .. 0.96
+
+  Alignments for each domain:
+  == domain 1    score: 55.1 bits;  conditional E-value: 3.8e-16
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++     l +   ++ +e   +++++g ++ + e ++ +++   + ++ ++ ++  +++++++l++ lk  ++ +ei+k
+  sp|A8FM88|MURG_CAMJ8   3 IALTGGGTGGHLAIVRCLLESAIKKNIECVyIGSQNGQDKAWFENEVRFKEkffLSSK-GVVNQS-KFGKISSLLHTLKLSKDCREIFK 89 
+                           79**************************889***********999****999989999.999988.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           ++ +++v+++ggy+a++a++aal+++ p++++Eqn+  g  n ll+ +a++
+  sp|A8FM88|MURG_CAMJ8  90 KYHIQAVFSVGGYSAAPASFAALFSHLPLFIHEQNSKSGSLNMLLKPFATK 140
+                           ***************************************999999998887 PP
+
+>> sp|Q5HU62|MURG_CAMJR  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   54.8   0.0     5e-16   2.8e-13       1     136 [.       3     140 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 54.8 bits;  conditional E-value: 5e-16
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++     l +   ++ +e   +++++g ++ + e ++ +++   + ++ ++ ++  +++++++l++ lk  ++ +ei+k
+  sp|Q5HU62|MURG_CAMJR   3 IALTGGGTGGHLAIVRCLLESAIKKNIECVyIGSQNGQDKAWFENEVRFKEkffLSSK-GVVNQS-KFDKISSLLHTLKLSKDCREIFK 89 
+                           79**************************889***********999****999988999.888888.9********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           ++ +++v+++ggy+a++a++aal+++ p++++Eqn+  g  n ll+ +a++
+  sp|Q5HU62|MURG_CAMJR  90 KYHIQAVFSVGGYSAAPASFAALFSHLPLFIHEQNSKSGSLNMLLKPFATK 140
+                           ***************************************999999998887 PP
+
+>> sp|A1W027|MURG_CAMJJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   54.8   0.0     5e-16   2.8e-13       1     136 [.       3     140 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 54.8 bits;  conditional E-value: 5e-16
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++     l +   ++ +e   +++++g ++ + e ++ +++   + ++ ++ ++  +++++++l++ lk  ++ +ei+k
+  sp|A1W027|MURG_CAMJJ   3 IALTGGGTGGHLAIVRCLLESAIKKNIECVyIGSQNGQDKAWFENEVRFKEkffLSSK-GVVNQS-KFDKISSLLHTLKLSKDCREIFK 89 
+                           79**************************889***********999****999988999.888888.9********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           ++ +++v+++ggy+a++a++aal+++ p++++Eqn+  g  n ll+ +a++
+  sp|A1W027|MURG_CAMJJ  90 KYHIQAVFSVGGYSAAPASFAALFSHLPLFIHEQNSKSGSLNMLLKPFATK 140
+                           ***************************************999999998887 PP
+
+>> sp|Q9PNQ2|MURG_CAMJE  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   54.8   0.0     5e-16   2.8e-13       1     136 [.       3     140 ..       3     143 .. 0.95
+
+  Alignments for each domain:
+  == domain 1    score: 54.8 bits;  conditional E-value: 5e-16
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++     l +   ++ +e   +++++g ++ + e ++ +++   + ++ ++ ++  +++++++l++ lk  ++ +ei+k
+  sp|Q9PNQ2|MURG_CAMJE   3 IALTGGGTGGHLAIVRCLLESAIKKNIECVyIGSQNGQDKAWFENEVRFKEkffLSSK-GVVNQS-KFDKISSLLHTLKLSKDCREIFK 89 
+                           79**************************889***********999****999988999.888888.9********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           ++ +++v+++ggy+a++a++aal+++ p++++Eqn+  g  n ll+ +a++
+  sp|Q9PNQ2|MURG_CAMJE  90 KYHIQAVFSVGGYSAAPASFAALFSHLPLFIHEQNSKSGSLNMLLKPFATK 140
+                           ***************************************999999998887 PP
+
+>> sp|A7H2Z9|MURG_CAMJD  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   53.6   0.0   1.1e-15   6.4e-13       1     136 [.       3     140 ..       3     143 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 53.6 bits;  conditional E-value: 1.1e-15
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 
+                           ++l+ggGT+G++     l +   ++ +e   +++++g ++ + e +  +++   + ++ ++ ++  +++++++l++ lk  ++ +ei+k
+  sp|A7H2Z9|MURG_CAMJD   3 IALTGGGTGGHLAIVRCLLESAIKKNIECVyIGSQNGQDKAWFENEARFKEkffLSSK-GVVNQN-KFGKISSLLHTLKLSKDCREIFK 89 
+                           79**************************889***********6666666666677777.777777.*********************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136
+                           ++ +++v+++ggy+a++a++aal+++ p++++Eqn+  g  n ll+ +a++
+  sp|A7H2Z9|MURG_CAMJD  90 KYHIQAVFSVGGYSAAPASFAALFSHLPLFIHEQNSKSGSLNMLLKPFATK 140
+                           ***************************************999999998887 PP
+
+>> sp|A8F4X1|MURG_THELT  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   52.2   0.0   3.1e-15   1.8e-12       4     138 ..       6     142 ..       3     143 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 52.2 bits;  conditional E-value: 3.1e-15
+                           E-------HHHHHHHHHHHHH.---EEE.EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   4 aggGTrGdvePavAlareLqr.rGheVr.latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeilkeak 88 
+                           aggGT+G+++Pav++ ++L + +  +V+ ++ ++g+e+++ + ++ e++ i++d  +l + + +++++++l++   +  ++  +l+ ++
+  sp|A8F4X1|MURG_THELT   6 AGGGTGGHLYPAVSILEKLAEmKKLNVTyFCLEKGIESKIlPLEHPEYKLIKIDlKGLERPIWKPSNFTRLLKI--SQSESIIALEIKQ 92 
+                           89*****************984568999*************777777777666653777777789999999999..8889999****** PP
+
+                           HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           +d  + +ggy++ +++   ++++ p ++ Eqn +pgl+nk+l+  a++++
+  sp|A8F4X1|MURG_THELT  93 CDFGLMTGGYISYPVGKVCKKLKKPFFIQEQNVVPGLANKALSLSAKKIF 142
+                           *******************************************9999987 PP
+
+>> sp|Q72R84|MURG_LEPIC  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   41.3   0.2     7e-12   3.9e-09       1     138 [.       4     142 ..       4     143 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 41.3 bits;  conditional E-value: 7e-12
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------...-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakl..eslktlkelaeglkalrkakeilk 85 
+                           +v+++gGT+G++ P vAla+ L +   +  ++ ++ +   +   + + + ++ ++   lw +l   s+++++ + +   ++ k+++i+k
+  sp|Q72R84|MURG_LEPIC   4 IVIVAGGTGGHISPGVALAEVLTELKEK--IGYENLYLYSLvrNKNNPDLEQAPCP-VLWHNLppLSSNFFLFPIRYTIQIIKTFFIFK 89 
+                           799*********************9944..68888766655588888888888888.5555432258888999999999********** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + ++dvv+g+ggy+ +  ++  ++ + ++++ Eqn ipg vn+l+ r+a +v+
+  sp|Q72R84|MURG_LEPIC  90 KLNIDVVIGMGGYSTVSSILYGIFFRKKIYLCEQNTIPGNVNRLFFRFASKVA 142
+                           ************************************************99986 PP
+
+>> sp|Q8F4J1|MURG_LEPIN  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   41.3   0.2     7e-12   3.9e-09       1     138 [.       4     142 ..       4     143 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 41.3 bits;  conditional E-value: 7e-12
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------...-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakl..eslktlkelaeglkalrkakeilk 85 
+                           +v+++gGT+G++ P vAla+ L +   +  ++ ++ +   +   + + + ++ ++   lw +l   s+++++ + +   ++ k+++i+k
+  sp|Q8F4J1|MURG_LEPIN   4 IVIVAGGTGGHISPGVALAEVLTELKEK--IGYENLYLYSLvrNKNNPDLEQAPCP-VLWHNLppLSSNFFLFPIRYTIQIIKTFFIFK 89 
+                           799*********************9944..68888766655588888888888888.5555432258888999999999********** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           + ++dvv+g+ggy+ +  ++  ++ + ++++ Eqn ipg vn+l+ r+a +v+
+  sp|Q8F4J1|MURG_LEPIN  90 KLNIDVVIGMGGYSTVSSILYGIFFRKKIYLCEQNTIPGNVNRLFFRFASKVA 142
+                           ************************************************99986 PP
+
+>> sp|Q4FPK5|MURG_PELUB  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   40.5   0.0   1.3e-11   7.1e-09       1     138 [.       5     138 ..       5     139 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 40.5 bits;  conditional E-value: 1.3e-11
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           +++++gG++G+v Pa  + ++L +   +V + +  + ++f+ +++++ +  +++ +  ++   l  ++++      ++k+   ++++k+
+  sp|Q4FPK5|MURG_PELUB   5 ILISTGGSGGHVIPATIIYKHLEDNF-DVSMTSDFRGVKFLNKDEYNLKIFNVR-PISKN--LLIIPLDFIFMIFLIFKSISFFRKNKI 89 
+                           6899******************9876.***************999999999999.77774..45555555555557899999******* PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138
+                           d+++++ggy +++++++a+ ++i++ + E n + g +nk++  ++ +++
+  sp|Q4FPK5|MURG_PELUB  90 DTLISTGGYMSLPLCLGARILNIKLLLFEPNMVLGRSNKFFLSYCQKIF 138
+                           *****************************************99998875 PP
+
+>> sp|Q04V94|MURG_LEPBJ  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   36.2   0.2   2.7e-10   1.5e-07       1     137 [.       4     141 ..       4     143 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 36.2 bits;  conditional E-value: 2.7e-10
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------...-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakl..eslktlkelaeglkalrkakeilk 85 
+                           +v+a+gGT+G++ P vAla+ L +   +  ++ ++ +   +   + + + ++ ++   lw +l   s++ ++ +++   ++ k++ ++k
+  sp|Q04V94|MURG_LEPBJ   4 IVIAAGGTGGHISPGVALAEVLTDLKEK--IGYENLYLYSLirNQNNPDLEQAPCP-VLWHNLppLSSNIFLFPFRYTIQILKTFLLFK 89 
+                           79**********************9944..68888877766688888888888888.5555432268999999**************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           + + dvv+g+ggy+ +  ++  +l + ++++ Eqn +pg v +l+ r+an++
+  sp|Q04V94|MURG_LEPBJ  90 KLNVDVVIGMGGYSTVSSILYGILFKKKIYLCEQNTVPGNVSRLFFRFANKA 141
+                           *************************************************997 PP
+
+>> sp|Q04Y82|MURG_LEPBL  UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   36.2   0.2   2.7e-10   1.5e-07       1     137 [.       4     141 ..       4     143 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 36.2 bits;  conditional E-value: 2.7e-10
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------...-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakl..eslktlkelaeglkalrkakeilk 85 
+                           +v+a+gGT+G++ P vAla+ L +   +  ++ ++ +   +   + + + ++ ++   lw +l   s++ ++ +++   ++ k++ ++k
+  sp|Q04Y82|MURG_LEPBL   4 IVIAAGGTGGHISPGVALAEVLTDLKEK--IGYENLYLYSLirNQNNPDLEQAPCP-VLWHNLppLSSNIFLFPFRYTIQILKTFLLFK 89 
+                           79**********************9944..68888877766688888888888888.5555432268999999**************** PP
+
+                           HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS
+       Glyco_transf_28  86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137
+                           + + dvv+g+ggy+ +  ++  +l + ++++ Eqn +pg v +l+ r+an++
+  sp|Q04Y82|MURG_LEPBL  90 KLNVDVVIGMGGYSTVSSILYGILFKKKIYLCEQNTVPGNVSRLFFRFANKA 141
+                           *************************************************997 PP
+
+>> sp|Q8TTI1|Y452_METAC  Uncharacterized glycosyltransferase MA_0452 OS=Methanosarcina acetivorans GN=MA_0452 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   33.5   0.0   1.8e-09   9.9e-07      10     103 ..      13     111 ..       4     164 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 33.5 bits;  conditional E-value: 1.8e-09
+                           --HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28  10 GdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.........vklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           G+   ++Al++eL ++Ghe+++++    +e ve++g++a++i+++         + l       +tlk+++    +  k+ ++l+e+kp
+  sp|Q8TTI1|Y452_METAC  13 GHTSRCLALGKELLNAGHEIKFGAYGYSKELVEKTGYTAQEIPSEiklvgkagsLDLTG--SIEATLKSAQLL--GGPKLLKLLREFKP 97 
+                           9********************************************99988887766666..567777777777..778899******** PP
+
+                           HHHHHC----EEEE CS
+       Glyco_transf_28  90 dvvvgfggyvadla 103
+                           dvvv+   y  +la
+  sp|Q8TTI1|Y452_METAC  98 DVVVSDSYYLGTLA 111
+                           ***87665444444 PP
+
+>> sp|Q8TTI0|Y453_METAC  Uncharacterized glycosyltransferase MA_0453 OS=Methanosarcina acetivorans GN=MA_0453 PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   28.7   0.0   5.5e-08   3.1e-05      10     113 ..      13     118 ..       3     128 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 28.7 bits;  conditional E-value: 5.5e-08
+                           --HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28  10 GdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.........vklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           G+   ++Al++e+ ++GheV +++    +e v+++g++a +i+p+             +     +tl++l  +  ++rk+ ++++  +p
+  sp|Q8TTI0|Y453_METAC  13 GHTSRCLALGKEFLAAGHEVSFGAYGYSRELVRKTGYSAWEIQPEirligetgiFDIGK--SIKETLRNLSPV--GFRKLLKLIEVLEP 97 
+                           9********************************************99987766644444..344455555555..77899999****** PP
+
+                           HHHHHC----EEEE--HHHHHHHH CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagip 113
+                           dvv++ g y+    ++aa+++++p
+  sp|Q8TTI0|Y453_METAC  98 DVVLSDGYYS---GILAARSRKVP 118
+                           ***9988444...44555666655 PP
+
+>> sp|Q8PWF3|Y1636_METMA  Uncharacterized glycosyltransferase MM_1636 OS=Methanosarcina mazei GN=MM_1636 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   30.0   0.0   2.2e-08   1.2e-05      10     112 ..      13     117 ..       4     143 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 30.0 bits;  conditional E-value: 2.2e-08
+                            --HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.........S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28  10 GdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.........vklwakleslktlkelaeglkalrkakeilkeak 88 
+                            G+   ++Al++eL ++Ghe+++++    ++ ve++g+ +++i+++           l       +tlk++     +  k+ +++k++k
+  sp|Q8PWF3|Y1636_METMA  13 GHTSRCLALGKELLAAGHEIEFGAYGYSRDLVEKTGYRIHEIPSEiklvgkaggFDLSG--SIEATLKNARIL--GGPKVLKLIKDFK 96 
+                            9********************************************99977664422222..334444444444..55689999***** PP
+
+                            HHHHHHC----EEEE--HHHHHHH CS
+        Glyco_transf_28  89 pdvvvgfggyvadlaliaallagi 112
+                            pdvvv+       l ++aa l++i
+  sp|Q8PWF3|Y1636_METMA  97 PDVVVSDS---YYLGTLAAMLLNI 117
+                            ***97755...4444444445555 PP
+
+>> sp|O34539|YJIC_BACSU  Uncharacterized UDP-glucosyltransferase yjiC OS=Bacillus subtilis GN=yjiC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   28.9   0.0   4.8e-08   2.7e-05       6      93 ..      11     104 ..       6     124 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 28.9 bits;  conditional E-value: 4.8e-08
+                           ------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....S------.-HHHCCSHHHHHHH.HHHHHHHHHHHH CS
+       Glyco_transf_28   6 gGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.....vklwakleslktlkelaeglka.lrkakeilkeak 88 
+                           +++ G+v P +Al ++L ++Gh+V+ at++++++ v +ag ea  + +       + ++ +e+++++++l+++  + l +++e++k+++
+  sp|O34539|YJIC_BACSU  11 IPAYGHVNPTLALVEKLCEKGHRVTYATTEEFAPAVQQAGGEALIYHTSlnidpKQIREMMEKNDAPLSLLKESLSiLPQLEELYKDDQ 99 
+                           5667************************************9999988777777846666556666666666654441568888889998 PP
+
+                           HHHHH CS
+       Glyco_transf_28  89 pdvvv 93 
+                           pd+++
+  sp|O34539|YJIC_BACSU 100 PDLII 104
+                           88874 PP
+
+>> sp|Q53685|OLED_STRAT  Oleandomycin glycosyltransferase OS=Streptomyces antibioticus GN=oleD PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   27.6   0.1   1.2e-07   6.6e-05       1      59 [.      10      75 ..      10     132 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 27.6 bits;  conditional E-value: 1.2e-07
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.......S---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.......vklwa 59
+                          +++ ++ + G+v P++ + reL +rGh+V+ a+pp ++++v+++g   v + +         ++w 
+  sp|Q53685|OLED_STRAT 10 IAMFSIAAHGHVNPSLEVIRELVARGHRVTYAIPPVFADKVAATGPRPVLYHSTlpgpdadPEAWG 75
+                          577889999************************************999988888555556533333 PP
+
+>> sp|Q8PZB2|Y582_METMA  Uncharacterized glycosyltransferase MM_0582 OS=Methanosarcina mazei GN=MM_0582 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   28.2   0.0     8e-08   4.5e-05      10     112 ..      13     117 ..       3     129 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 28.2 bits;  conditional E-value: 8e-08
+                           --HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.........S------.-HHHCCSHHHHH..HHHHHHHHHHHHH CS
+       Glyco_transf_28  10 GdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.........vklwakleslktlkelaegl..kalrkakeilkea 87 
+                           G+   ++Al++e+ ++GheV +++    +  v ++g++a++i+++                +  k +ke++++l   ++rk+ +++++ 
+  sp|Q8PZB2|Y582_METMA  13 GHTGRCLALGKEFLAAGHEVNFGAYGYSKGLVQKTGYSAYEIPSEiklageagtF------DIRKSIKETLNNLspSGFRKILRLIEKL 95 
+                           99999****************************************7664444332......333444444443322378999999**** PP
+
+                           HHHHHHHC----EEEE--HHHHHHH CS
+       Glyco_transf_28  88 kpdvvvgfggyvadlaliaallagi 112
+                            pdvv++ g y     ++aa ++++
+  sp|Q8PZB2|Y582_METMA  96 DPDVVLSDGYY---TGILAAQKRKV 117
+                           *****998844...34444555554 PP
+
+>> sp|P21686|CRTX_PANAN  Zeaxanthin glucosyltransferase OS=Pantoea ananas GN=crtX PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   25.9   0.1   3.9e-07   0.00022      11     126 ..      14     131 ..      13     135 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 25.9 bits;  conditional E-value: 3.9e-07
+                           -HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----..........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28  11 dvePavAlareLqrrGheVrlatppgleefveeagleavpigpd..........vklwakleslktlkelaeglkalrkakeilkeakp 89 
+                           +v  +  la+eL +rGh+V+++ + ++++ + ++ + ++++g+d          + l+a+   +++lk + e         ++  + + 
+  sp|P21686|CRTX_PANAN  14 HVRALQNLAQELVARGHRVTFIQQYDIKHLIDSETIGFHSVGTDshppgaltrvLHLAAHPLGPSMLKLINEM-------ARTTDMLCR 95 
+                           67777779***************************************98887776677766666666666666.......555555555 PP
+
+                           HHHHHC----EEEE--HHHHHHHHHHHHHH----EEE CS
+       Glyco_transf_28  90 dvvvgfggyvadlaliaallagipanvaEqngipglv 126
+                           +++ +f    a++ +i +  + + a vaE++g+p+++
+  sp|P21686|CRTX_PANAN  96 ELPQAFN-DLAVDGVIVDQMEPAGALVAEALGLPFIS 131
+                           5555554.4567777779999999**********986 PP
+
+>> sp|Q54387|MGT_STRLI  Macrolide glycosyltransferase OS=Streptomyces lividans GN=mgt PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   23.5   0.0   2.2e-06    0.0013       9      54 ..      33      78 ..      25     136 .. 0.72
+
+  Alignments for each domain:
+  == domain 1    score: 23.5 bits;  conditional E-value: 2.2e-06
+                         ---HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE---- CS
+      Glyco_transf_28  9 rGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd 54
+                          G+v P++ + reL +rGh+V+ a+p+ l+++v+eag e +  ++ 
+  sp|Q54387|MGT_STRLI 33 HGHVNPSLEVIRELVARGHRVTYAIPRLLADKVAEAGAEPKLWNST 78
+                         6***********************************9876655555 PP
+
+>> sp|Q01330|CRTX_ESCVU  Zeaxanthin glucosyltransferase OS=Escherichia vulneris GN=crtX PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   23.1   0.2   2.9e-06    0.0017      15     125 ..      18     125 ..      13     129 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 23.1 bits;  conditional E-value: 2.9e-06
+                           HHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----.....S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC-- CS
+       Glyco_transf_28  15 avAlareLqrrGheVrlatppgleefv.eeagleavpigpd.....vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfgg 97 
+                           + Ala e  +rGh+V++ t +       e++ ++++p+++        +++  +s+++l++l +        + +l +  ++ + ++ +
+  sp|Q01330|CRTX_ESCVU  18 LHALALEMAQRGHRVTFLTGNVASLAEqETERVAFYPLPASvqqaqRNVQQ--QSNGNLLRLIAA-------MSSLTDVLCQQLPAILQ 97 
+                           78**************998887777778**********9998554333333..566666666666.......8888888888888888* PP
+
+                           --EEEE--HHHHHHHHHHHHHH----EE CS
+       Glyco_transf_28  98 yvadlaliaallagipanvaEqngipgl 125
+                           + a++ali +  + +   vaE++g+p++
+  sp|Q01330|CRTX_ESCVU  98 RLAVDALIVDEMEPAGSLVAEALGLPFI 125
+                           **************************97 PP
+
+>> sp|O31853|YOJK_BACSU  Uncharacterized UDP-glucosyltransferase yojK OS=Bacillus subtilis GN=yojK PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.5   0.0   0.00065      0.36       1      53 [.       4      56 ..       4     125 .. 0.82
+   2 ?    2.3   0.0       7.7   4.3e+03      30      98 ..     189     270 ..     181     275 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 15.5 bits;  conditional E-value: 0.00065
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE--- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigp 53
+                          v+++g++  G++ P++ +++eL+ rG +++  + ++++e++++  +e++++  
+  sp|O31853|YOJK_BACSU  4 VLMIGFPGEGHINPSIGVMKELKSRGENITYYAVKEYKEKITALDIEFREYHD 56
+                          678899999*********************9999999****999999999865 PP
+
+  == domain 2    score: 2.3 bits;  conditional E-value: 7.7
+                           EEEETGGGHHHHHH---EEEE----..............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS
+       Glyco_transf_28  30 rlatppgleefveeagleavpigpd..............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 
+                           ++ t++g+ +  e+ g  +v +gp               + + + l ++++ + + ++ + +++  e+ k++  +vv+++g+ 
+  sp|O31853|YOJK_BACSU 189 IVFTSRGFQPLAEQFGERYVFVGPSiteragnndfpfdqIDNENVL-FISMGTIFNNQKQFFNQCLEVCKDFDGKVVLSIGKH 270
+                           5778999999999999999999999999999999999887777766.999999999999999999999999999999998876 PP
+
+>> sp|B1YIY4|MTNA_EXIS2  Methylthioribose-1-phosphate isomerase OS=Exiguobacterium sibiricum (strain DSM 17290 / JCM 134
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.4   0.0   8.6e-05     0.049      19      70 ..     201     251 ..     190     271 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 18.4 bits;  conditional E-value: 8.6e-05
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSH CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkel 70 
+                            +eLqr+G++V+l+t + ++++++e+ ++a  +g+d +  +++++ +++ ++
+  sp|B1YIY4|MTNA_EXIS2 201 TWELQRAGIDVTLITDNMVAHTIKEKQITAIIVGAD-RITRNGDTANKIGTF 251
+                           69**********************************.888888776666555 PP
+
+>> sp|Q0WW21|UGAGT_ARATH  Anthocyanin 5-O-glucosyltransferase OS=Arabidopsis thaliana GN=UGT75C1 PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.6   0.0     7e-05     0.039       2      55 ..      15      74 ..      14     130 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 18.6 bits;  conditional E-value: 7e-05
+                           EEE-------HHHHHHHHHHHHH---EEE....EEETGGGHHHHHH---EEEE----..S CS
+        Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVr....latppgleefveeagleavpigpd..v 55
+                           +l+++++ G++ Pa+ la++L + G  V+    + +++++ e   ++gl++   + +  +
+  sp|Q0WW21|UGAGT_ARATH 15 LLVTFPAQGHINPALQLANRLIHHGATVTystaVSAHRRMGEPPSTKGLSFAWFTDGfdD 74
+                           799**********************************************99887776542 PP
+
+>> sp|Q9Z565|ILVC1_STRCO  Ketol-acid reductoisomerase 1 OS=Streptomyces coelicolor GN=ilvC1 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.0   0.0   0.00011     0.064       1      54 [.      20      70 ..      20     105 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 18.0 bits;  conditional E-value: 0.00011
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+        Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                           v+++g+G+ G+     A a  L++ G +Vr++ ++g +++   ee+gl +vp++  
+  sp|Q9Z565|ILVC1_STRCO 20 VAVIGYGSQGH-----AHALSLRDSGVDVRVGLHEGSKSKAkaEEQGLRVVPVAEA 70
+                           67888999998.....77999******************9999*********9876 PP
+
+>> sp|O05496|YDHE_BACSU  Uncharacterized UDP-glucosyltransferase ydhE OS=Bacillus subtilis GN=ydhE PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.3   0.0   9.1e-05     0.051       2      49 ..       5      52 ..       4     103 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 18.3 bits;  conditional E-value: 9.1e-05
+                          EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEE CS
+       Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleav 49
+                          +++ +++ G+v P + + +++ ++G++V+ ++++++++++e+ag +++
+  sp|O05496|YDHE_BACSU  5 LILNFPAEGHVNPTLGITKAFSDKGYDVHYISTEKYKKRLEAAGATVH 52
+                          67778999************************************8865 PP
+
+>> sp|Q9FBT8|ILVC2_STRCO  Ketol-acid reductoisomerase 2 OS=Streptomyces coelicolor GN=ilvC2 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.0   0.0   0.00011     0.064       1      54 [.      20      70 ..      20     105 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 18.0 bits;  conditional E-value: 0.00011
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+        Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                           v+++g+G+ G+     A a  L++ G +Vr++ ++g +++   ee+gl +vp++  
+  sp|Q9FBT8|ILVC2_STRCO 20 VAVIGYGSQGH-----AHALSLRDSGVDVRVGLHEGSKSKAkaEEQGLRVVPVAEA 70
+                           67888999998.....77999******************9999*********9876 PP
+
+>> sp|Q9SBL1|HMNGT_SORBI  Cyanohydrin beta-glucosyltransferase OS=Sorghum bicolor GN=UGT85B1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.5   0.1   7.8e-05     0.044       1      55 [.      13      83 ..      13     152 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 18.5 bits;  conditional E-value: 7.8e-05
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----...............S CS
+        Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpd...............v 55
+                           vvl+ ++  G+v P++ lar L +rG +V+ + t+ ++++ ++++g +av  ++                +
+  sp|Q9SBL1|HMNGT_SORBI 13 VVLVPFPGQGHVAPLMQLARLLHARGARVTfVYTQYNYRRLLRAKGEAAVRPPATssarfrieviddglsL 83
+                           688889999*********************************99999988755554555555555555554 PP
+
+>> sp|B1I2P1|MTNA_DESAP  Methylthioribose-1-phosphate isomerase OS=Desulforudis audaxviator (strain MP104C) GN=mtnA PE=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.4   0.1   0.00034      0.19      18      62 ..     199     242 ..     184     278 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 16.4 bits;  conditional E-value: 0.00034
+                           HHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------. CS
+       Glyco_transf_28  18 lareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakle 62 
+                            a+eL+r+G+eV + + ++++  + + +gl+ v +g+d +++a+++
+  sp|B1I2P1|MTNA_DESAP 199 TAWELMREGIEV-VLVADNMAGYLmAREGLDLVIVGAD-RVAANGD 242
+                           69**********.667777777777*************.8888763 PP
+
+>> sp|A8AZU1|MUTL_STRGC  DNA mismatch repair protein mutL OS=Streptococcus gordonii (strain Challis / ATCC 35105 / CH1 /
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.1   0.0     0.015       8.6      55     127 ..     194     265 ..     129     268 .. 0.84
+   2 ?    2.6   0.0       6.1   3.5e+03     105     136 ..     315     346 ..     308     348 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 11.1 bits;  conditional E-value: 0.015
+                           S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  55 vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                            +  +    +++l+++ +g  +l  ak+ ++    d+++++ gyv+++ l+ a++++i + ++  +   +l n
+  sp|A8AZU1|MUTL_STRGC 194 REMTRTA-GSGNLRQAIAGIYGLATAKKMVEISASDLDFEVSGYVSLPELTRANRNYITILINGRYIKNFLLN 265
+                           4455544.789999999*******************************************9998887766666 PP
+
+  == domain 2    score: 2.6 bits;  conditional E-value: 6.1
+                           -HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28 105 iaallagipanvaEqngipglvnkllprrang 136
+                            a +++ i+a + Eq+ ip++   l + ++++
+  sp|A8AZU1|MUTL_STRGC 315 MALISQAIAASLKEQDLIPDALENLAKSTVKR 346
+                           67889****************99999888876 PP
+
+>> sp|Q01198|LIGD_PSEPA  C alpha-dehydrogenase OS=Pseudomonas paucimobilis GN=ligD PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.4   0.0   0.00034      0.19      20      91 ..     173     244 ..     171     279 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 16.4 bits;  conditional E-value: 0.00034
+                           HHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28  20 reLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdv 91 
+                           ++L ++G+ V ++tp ++++ + e++ l   ++g+  ++ ++ es++ l ++++ + + +k+ e++k+  +d 
+  sp|Q01198|LIGD_PSEPA 173 QGLEKYGIGVSVCTPANIKSNIaEASRLRPAKYGTS-GYVENEESIASLHSIHQHGLEPEKLAEAIKKGVEDN 244
+                           689*********************************.9999999********************999877665 PP
+
+>> sp|Q83RR8|NPD_SHIFL  NAD-dependent deacetylase OS=Shigella flexneri GN=npdA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.8   0.0    0.0021       1.2       2      31 ..     209     239 ..     209     254 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 13.8 bits;  conditional E-value: 0.0021
+                          EEE-------HHHHHHHHHHHHH--.-EEEE CS
+      Glyco_transf_28   2 vlaggGTrGdvePavAlareLqrrG.heVrl 31 
+                          v++++GT G+v+Pa+ + +e +  G h V+l
+  sp|Q83RR8|NPD_SHIFL 209 VFIAIGTSGHVYPAAGFVHEAKLHGaHTVEL 239
+                          789***************9999888344445 PP
+
+>> sp|C5D7U5|MTNA_GEOSW  Methylthioribose-1-phosphate isomerase OS=Geobacillus sp. (strain WCH70) GN=mtnA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.1   0.0   0.00042      0.24      19      69 ..     205     254 ..     198     280 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 16.1 bits;  conditional E-value: 0.00042
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCS CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlke 69 
+                            +eL+++G +V+l+t +  + ++++++++av +g+d + +a++++ +++ +
+  sp|C5D7U5|MTNA_GEOSW 205 TWELMQAGVDVTLITDNMAAQTIKAKNITAVIVGAD-RIAANGDTANKIGT 254
+                           69**********************************.88888877666655 PP
+
+>> sp|A3CR14|MUTL_STRSV  DNA mismatch repair protein mutL OS=Streptococcus sanguinis (strain SK36) GN=mutL PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.9   0.0     0.017       9.4      56     127 ..     195     265 ..     131     268 .. 0.87
+   2 ?    2.2   0.0       8.4   4.7e+03     105     136 ..     315     346 ..     309     348 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 10.9 bits;  conditional E-value: 0.017
+                           ------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  56 klwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                           +  +    +++l+++ +g  +l  ak+ ++    d+++++ gyv+++ l+ a++++i + ++  +   +l n
+  sp|A3CR14|MUTL_STRSV 195 EMTRTA-GSGNLRQAIAGIYGLATAKKMVEISASDLDFEVSGYVSLPELTRANRNYITILINGRYIKNFLLN 265
+                           445544.7899999999******************************************9998887766666 PP
+
+  == domain 2    score: 2.2 bits;  conditional E-value: 8.4
+                           -HHHHHHHHHHHHHH----EEEEESSGGGSCC CS
+       Glyco_transf_28 105 iaallagipanvaEqngipglvnkllprrang 136
+                            a +++ i++ + Eq+ ip++   l + ++++
+  sp|A3CR14|MUTL_STRSV 315 MALISQAIATSLKEQDLIPDALENLAKSTVKR 346
+                           67889***************999998888876 PP
+
+>> sp|Q88M09|MTNA_PSEPK  Methylthioribose-1-phosphate isomerase OS=Pseudomonas putida (strain KT2440) GN=mtnA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.5   0.0   0.00066      0.37      19      69 ..     211     260 ..     205     290 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 15.5 bits;  conditional E-value: 0.00066
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCS CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlke 69 
+                           ++eL ++G+ V+l++  +l++  +++g++ v +g+d + +a++++ +++ +
+  sp|Q88M09|MTNA_PSEPK 211 GWELANEGIPVTLCADSALAHLMKTKGITWVVVGAD-CIAANGDMAGKIGT 260
+                           8***********************************.88888877776654 PP
+
+>> sp|Q5L1E6|MTNA_GEOKA  Methylthioribose-1-phosphate isomerase OS=Geobacillus kaustophilus GN=mtnA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.2   0.0    0.0008      0.45      18      69 ..     203     253 ..     197     288 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 15.2 bits;  conditional E-value: 0.0008
+                           HHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCS CS
+       Glyco_transf_28  18 lareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlke 69 
+                            a+eL+++G +V+l+t +  +  ++++g+ a  +g+d + ++++++ +++ +
+  sp|Q5L1E6|MTNA_GEOKA 203 TAWELMQAGVDVTLITDNMAAQAIKAKGIGAIIVGAD-RIAQNGDTANKIGT 253
+                           59***********************************.77777766665554 PP
+
+>> sp|Q8X8E0|NPD_ECO57  NAD-dependent deacetylase OS=Escherichia coli O157:H7 GN=npdA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.2   0.0    0.0033       1.9       3      31 ..     210     239 ..     209     254 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 13.2 bits;  conditional E-value: 0.0033
+                          EE-------HHHHHHHHHHHHH--.-EEEE CS
+      Glyco_transf_28   3 laggGTrGdvePavAlareLqrrG.heVrl 31 
+                          ++++GT G+v+Pa+ + +e +  G h V+l
+  sp|Q8X8E0|NPD_ECO57 210 FIAIGTSGHVYPAAGFVHEAKLHGaHTVEL 239
+                          889**************9999888344445 PP
+
+>> sp|P75960|NPD_ECOLI  NAD-dependent deacetylase OS=Escherichia coli (strain K12) GN=npdA PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.3   0.0    0.0031       1.8       3      33 ..     210     241 ..     209     264 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 13.3 bits;  conditional E-value: 0.0031
+                          EE-------HHHHHHHHHHHHH--.-EEEEEE CS
+      Glyco_transf_28   3 laggGTrGdvePavAlareLqrrG.heVrlat 33 
+                          ++++GT G+v+Pa+ + +e +  G h V+l  
+  sp|P75960|NPD_ECOLI 210 FIAIGTSGHVYPAAGFVHEAKLHGaHTVELNL 241
+                          889***************99988834454655 PP
+
+>> sp|Q5V467|MAMA1_HALMA  Methylaspartate mutase S chain 1 OS=Haloarcula marismortui GN=mamA1 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.3   0.5   0.00037      0.21       1      50 [.      10      61 ..      10     147 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 16.3 bits;  conditional E-value: 0.00037
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE CS
+        Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp 50
+                           v+l ++G+  +v  +  l ++L ++G eV+ l+++ + +efv +++  +a++
+  sp|Q5V467|MAMA1_HALMA 10 VILGVIGSDAHVVGITILEQALSAAGFEVInLGVQTAQDEFVsAAKSHDAEA 61
+                           57889*************************************7555555554 PP
+
+>> sp|C0MAS4|MUTL_STRE4  DNA mismatch repair protein mutL OS=Streptococcus equi subsp. equi (strain 4047) GN=mutL PE=3 S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.7   0.0    0.0012      0.65      50     127 ..     189     265 ..     150     268 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 14.7 bits;  conditional E-value: 0.0012
+                           E----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  50 pigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                            i  + +l +     + l+++++g  +l+ ak+ +   ++d+++++gg+v+++ l+ a++++i + ++  +   +l n
+  sp|C0MAS4|MUTL_STRE4 189 LISDGKQLTQTS-GAGDLRQALAGIYGLNTAKKMIDISSADLDFEVGGFVSLPELTRANRNYITILINGRYIKNFLLN 265
+                           555554555544.67889999********************************************9998887766666 PP
+
+>> sp|P0A2F2|NPD_SALTY  NAD-dependent deacetylase OS=Salmonella typhimurium GN=npdA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.6   0.0    0.0025       1.4       3      36 ..     210     244 ..     209     259 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 13.6 bits;  conditional E-value: 0.0025
+                          EE-------HHHHHHHHHHHHH--.-EEEEEETGG CS
+      Glyco_transf_28   3 laggGTrGdvePavAlareLqrrG.heVrlatppg 36 
+                          ++++GT G+v+Pa+ + +e +  G h V+l  +p 
+  sp|P0A2F2|NPD_SALTY 210 FIAIGTSGHVYPAAGFVHEAKLHGaHTVELNLEPS 244
+                          889****************9998845555666665 PP
+
+>> sp|P0A2F3|NPD_SALTI  NAD-dependent deacetylase OS=Salmonella typhi GN=npdA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.6   0.0    0.0025       1.4       3      36 ..     210     244 ..     209     259 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 13.6 bits;  conditional E-value: 0.0025
+                          EE-------HHHHHHHHHHHHH--.-EEEEEETGG CS
+      Glyco_transf_28   3 laggGTrGdvePavAlareLqrrG.heVrlatppg 36 
+                          ++++GT G+v+Pa+ + +e +  G h V+l  +p 
+  sp|P0A2F3|NPD_SALTI 210 FIAIGTSGHVYPAAGFVHEAKLHGaHTVELNLEPS 244
+                          889****************9998845555666665 PP
+
+>> sp|C0MGC4|MUTL_STRS7  DNA mismatch repair protein mutL OS=Streptococcus equi subsp. zooepidemicus (strain H70) GN=mut
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.5   0.0    0.0014      0.77      56     127 ..     195     265 ..     152     268 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 14.5 bits;  conditional E-value: 0.0014
+                           ------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  56 klwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                           +l +     + l+++++g  +l+ ak+ +   ++d+++++gg+v+++ l+ a++++i + ++  +   +l n
+  sp|C0MGC4|MUTL_STRS7 195 QLTQTS-GTGDLRQALAGIYGLNTAKKMIDISSADLDFEVGGFVSLPELTRANRNYITILINGRYIKNFLLN 265
+                           444444.6678999999******************************************9998887766666 PP
+
+>> sp|Q65KK2|MTNA_BACLD  Methylthioribose-1-phosphate isomerase OS=Bacillus licheniformis (strain DSM 13 / ATCC 14580) G
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.1   0.0   0.00085      0.48      18      70 ..     204     255 ..     194     281 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 15.1 bits;  conditional E-value: 0.00085
+                           HHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSH CS
+       Glyco_transf_28  18 lareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkel 70 
+                            a+eL++ G++V+l+t    +++ +e++++av +g+d + ++++++ +++ ++
+  sp|Q65KK2|MTNA_BACLD 204 TAWELMQGGIDVTLITDSMAAHTMKEKNISAVIVGAD-RIARNGDTANKIGTF 255
+                           69***********************************.999988777766655 PP
+
+>> sp|B0KTX5|MTNA_PSEPG  Methylthioribose-1-phosphate isomerase OS=Pseudomonas putida (strain GB-1) GN=mtnA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.1   0.0   0.00089       0.5      19      63 ..     211     254 ..     204     293 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 15.1 bits;  conditional E-value: 0.00089
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.- CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakles 63 
+                           a+eL ++G+ V+l++  +l++  +++g++ v +g+d + +a+++ 
+  sp|B0KTX5|MTNA_PSEPG 211 AWELANEGIPVTLCADSALAHLMKTKGITWVVVGAD-CIAANGDV 254
+                           9***********************************.66665543 PP
+
+>> sp|B1J5G5|MTNA_PSEPW  Methylthioribose-1-phosphate isomerase OS=Pseudomonas putida (strain W619) GN=mtnA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.4   0.0   0.00072      0.41      19      64 ..     211     255 ..     204     291 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 15.4 bits;  conditional E-value: 0.00072
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-H CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwaklesl 64 
+                           a+eL ++G+ V+l++  +l++  +++g++ v +g+d + +a+++  
+  sp|B1J5G5|MTNA_PSEPW 211 AWELANEGIPVTLCADSALAHLMKSKGITWVVVGAD-CIAANGDVA 255
+                           9***********************************.666655444 PP
+
+>> sp|A5W7G2|MTNA_PSEP1  Methylthioribose-1-phosphate isomerase OS=Pseudomonas putida (strain F1 / ATCC 700007) GN=mtnA 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.1   0.0    0.0009      0.51      19      63 ..     211     254 ..     204     292 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 15.1 bits;  conditional E-value: 0.0009
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.- CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakles 63 
+                           a+eL ++G+ V+l++  +l++  +++g++ v +g+d + +a+++ 
+  sp|A5W7G2|MTNA_PSEP1 211 AWELANEGIPVTLCADSALAHLMKTKGITWVVVGAD-CIAANGDV 254
+                           9***********************************.66665543 PP
+
+>> sp|A4ILL1|MTNA_GEOTN  Methylthioribose-1-phosphate isomerase OS=Geobacillus thermodenitrificans (strain NG80-2) GN=mt
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.3   0.0    0.0015      0.86      18      69 ..     203     253 ..     197     287 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 14.3 bits;  conditional E-value: 0.0015
+                           HHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCS CS
+       Glyco_transf_28  18 lareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlke 69 
+                            a+eL+++G +V+l+t +  + ++++++++a  +g+d + ++++++ +++ +
+  sp|A4ILL1|MTNA_GEOTN 203 TAWELMQAGVDVTLITDNMAAQTIKAKNINAIIVGAD-RIAQNGDTANKIGT 253
+                           59***********************************.77776666555544 PP
+
+>> sp|B4U0J7|MUTL_STREM  DNA mismatch repair protein mutL OS=Streptococcus equi subsp. zooepidemicus (strain MGCS10565) 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.5   0.0    0.0014      0.77      56     127 ..     195     265 ..     153     268 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 14.5 bits;  conditional E-value: 0.0014
+                           ------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  56 klwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                           +l +     + l+++++g  +l+ ak+ +   ++d+++++gg+v+++ l+ a++++i + ++  +   +l n
+  sp|B4U0J7|MUTL_STREM 195 QLTQTS-GTGDLRQALAGIYGLNTAKKMIDISSADLDFEVGGFVSLPELTRANRNYITILINGRYIKNFLLN 265
+                           444444.6678999999******************************************9998887766666 PP
+
+>> sp|Q8FIM4|NPD_ECOL6  NAD-dependent deacetylase OS=Escherichia coli O6 GN=npdA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.2   0.0    0.0033       1.9       3      31 ..     210     239 ..     209     254 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 13.2 bits;  conditional E-value: 0.0033
+                          EE-------HHHHHHHHHHHHH--.-EEEE CS
+      Glyco_transf_28   3 laggGTrGdvePavAlareLqrrG.heVrl 31 
+                          ++++GT G+v+Pa+ + +e +  G h V+l
+  sp|Q8FIM4|NPD_ECOL6 210 FIAIGTSGHVYPAAGFVHEAKLHGaHTVEL 239
+                          889**************9999888344445 PP
+
+>> sp|B2GFJ7|ILVC_KOCRD  Ketol-acid reductoisomerase OS=Kocuria rhizophila (strain ATCC 9341 / DSM 348 / NBRC 103217 / D
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.6   0.0    0.0013      0.72       1      55 [.      20      83 ..      20     110 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 14.6 bits;  conditional E-value: 0.0013
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----............S CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd............v 55
+                          v+++g+G+ G+     A a  L++ G +Vr++  +g +++   e++gl++ +i+              +
+  sp|B2GFJ7|ILVC_KOCRD 20 VAIIGYGSQGH-----AHALNLRDSGVDVRIGLNEGSKSRAkaEAEGLQVMSIAEAakeadvimiltpD 83
+                          57888888888.....7799********************99999****99998773333333333332 PP
+
+>> sp|B1VZ72|ILVC_STRGG  Ketol-acid reductoisomerase OS=Streptomyces griseus subsp. griseus (strain JCM 4626 / NBRC 1335
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.7   0.0    0.0012      0.67       1      50 [.      20      66 ..      20     103 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 14.7 bits;  conditional E-value: 0.0012
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavp 50
+                          v+++g+G+ G+     A a  L++ G +Vr++ ++g +++   ee+gl +v+
+  sp|B1VZ72|ILVC_STRGG 20 VAVLGYGSQGH-----AHALSLRDSGVDVRVGLHEGSKSKAkaEEQGLRVVT 66
+                          67889999999.....77999******************9988999998864 PP
+
+>> sp|Q59818|ILVC_STRAW  Ketol-acid reductoisomerase OS=Streptomyces avermitilis GN=ilvC PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.5   0.0    0.0013      0.73       1      50 [.      20      66 ..      20     106 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 14.5 bits;  conditional E-value: 0.0013
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavp 50
+                          v+++g+G+ G+     A a  L++ G +Vr++ ++g +++   ee+gl +v+
+  sp|Q59818|ILVC_STRAW 20 VAVIGYGSQGH-----AHALSLRDSGVDVRVGLHEGSKSKAkaEEQGLRVVT 66
+                          67888999998.....77999******************9988999998864 PP
+
+>> sp|Q731R7|MTNA_BACC1  Methylthioribose-1-phosphate isomerase OS=Bacillus cereus (strain ATCC 10987) GN=mtnA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.6   0.0    0.0052       2.9      19      65 ..     205     250 ..     203     298 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 12.6 bits;  conditional E-value: 0.0052
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HH CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslk 65 
+                            +eL+++G++V+l+t +  ++ + +++++a  +g+d +  a++++ +
+  sp|Q731R7|MTNA_BACC1 205 TWELKQAGIDVTLITDNTAAHAIQTKEINAIIVGAD-RIVANGDTAN 250
+                           59**********************************.6666554444 PP
+
+>> sp|B1GZW3|TPIS_UNCTG  Triosephosphate isomerase OS=Uncultured termite group 1 bacterium phylotype Rs-D17 GN=tpiA PE=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.8   0.0    0.0011       0.6      10      85 ..     119     194 ..     117     214 .. 0.72
+
+  Alignments for each domain:
+  == domain 1    score: 14.8 bits;  conditional E-value: 0.0011
+                           --HHHHHHHHHHHHH---EEE.....EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28  10 GdvePavAlareLqrrGheVr.....latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 
+                            d+ P+v ++++L++r+ +V+       + +gl++ +  +a l++ +++p    wa + + kt ++ +++  +++++ + + 
+  sp|B1GZW3|TPIS_UNCTG 119 ADITPIVCVGETLKERENNVTfsvieKQVRNGLADLTlQQASLTVIAYEPV---WAIG-TGKTATPDQAQ--EVHSFIRKIY 194
+                           7********************77433346789999999*******999999...7744.44444443333..5555544443 PP
+
+>> sp|Q2IWS4|GLYA_RHOP2  Serine hydroxymethyltransferase OS=Rhodopseudomonas palustris (strain HaA2) GN=glyA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.5   0.0     0.011       6.3      13     108 ..      25     121 ..      22     126 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 11.5 bits;  conditional E-value: 0.011
+                           HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS
+       Glyco_transf_28  13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 
+                           e a+A+  eL r+ heV+l+++++++++   e++g  +   ++ + +++++     +++++ae+  a+++ak+++   +++v    g++
+  sp|Q2IWS4|GLYA_RHOP2  25 EIAAAIKGELGRQRHEVELIASENIVSRAvlEAQGSVMTNkYAEGYPGARYY-GGCEFVDVAEN-LAIERAKKLFGAGFANVQPNSGSQ 111
+                           7899**********************99887666654444577777777777.88889999998.999999999999999999999998 PP
+
+                           -EEEE--HHH CS
+       Glyco_transf_28  99 vadlaliaal 108
+                            + ++++a l
+  sp|Q2IWS4|GLYA_RHOP2 112 MNQAVFLALL 121
+                           8888888765 PP
+
+>> sp|A7GS56|MTNA_BACCN  Methylthioribose-1-phosphate isomerase OS=Bacillus cereus subsp. cytotoxis (strain NVH 391-98) 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.6   0.0    0.0025       1.4      19      66 ..     205     251 ..     198     283 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 13.6 bits;  conditional E-value: 0.0025
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 
+                            +eL+++G +V+l+t +  ++++++++++a  +g+d +  a++++ ++
+  sp|A7GS56|MTNA_BACCN 205 TWELREAGVDVTLITDNMAAHTIRTKNISAIIVGAD-RIVANGDTANK 251
+                           69**********************************.66666655444 PP
+
+>> sp|B7KF23|ILVC_CYAP7  Ketol-acid reductoisomerase OS=Cyanothece sp. (strain PCC 7424) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.3   0.0    0.0015      0.85       1      61 [.      20      76 ..      20     110 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 14.3 bits;  conditional E-value: 0.0015
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------ CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakl 61
+                          v+++g+G+ G+     A a  L++ G++V+++  pg ++    eeagl++++++    ++a +
+  sp|B7KF23|ILVC_CYAP7 20 VAIIGYGSQGH-----AHALNLKDSGIDVIVGLYPGSKSAKkaEEAGLTVHSVADA-AAKADW 76
+                          57888888888.....7799***************99987777*********9998.555433 PP
+
+>> sp|A5W1E8|RNZ_PSEP1  Ribonuclease Z OS=Pseudomonas putida (strain F1 / ATCC 700007) GN=rnz PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.1   0.0    0.0018         1      23     126 ..     138     237 ..     132     244 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 14.1 bits;  conditional E-value: 0.0018
+                          HH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHH CS
+      Glyco_transf_28  23 qrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallag 111
+                           +r + V  + t+ + e+++  + l+a+ i+ + +lw   e  k l+ +++g  +l   +  l++ +p   v ++g  + +al+aa ++g
+  sp|A5W1E8|RNZ_PSEP1 138 SHRVPSVGfVFTEINPEPRLDIQRLDAEGIPRG-PLWG--ELAKGLTVTFNG--QLLNGNDYLRPSRPPQRVIVCGDNDKPALLAAVARG 222
+                          455555555556666666777777888888888.****..88**********..************************************ PP
+
+                          HHHHHHHH----EEE CS
+      Glyco_transf_28 112 ipanvaEqngipglv 126
+                          + + v+E+     +v
+  sp|A5W1E8|RNZ_PSEP1 223 ADVLVHEATFTQAVV 237
+                          *******98766655 PP
+
+>> sp|B3QSP0|ILVC_CHLT3  Ketol-acid reductoisomerase OS=Chloroherpeton thalassium (strain ATCC 35110 / GB-78) GN=ilvC PE
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.5   0.0    0.0028       1.6       2      52 ..      20      67 ..      19     101 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 13.5 bits;  conditional E-value: 0.0028
+                          EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE-- CS
+       Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpig 52
+                          +++g+G+ G+     A a  L++ G +V+++ +++ +++v  e+agl +++ +
+  sp|B3QSP0|ILVC_CHLT3 20 AVLGFGSQGH-----AHALNLKDSGMNVCVGLKENSASWVkaEKAGLMVEKTA 67
+                          6777777777.....7799**********************99***9887755 PP
+
+>> sp|O31662|MTNA_BACSU  Methylthioribose-1-phosphate isomerase OS=Bacillus subtilis GN=mtnA PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   0.0     0.008       4.5      19      63 ..     205     248 ..     198     257 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.008
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.- CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakles 63 
+                           a+eL++ G++V+l+t    +++ +e+ ++av +g+d + ++++++
+  sp|O31662|MTNA_BACSU 205 AWELMQGGIDVTLITDSMAAHTMKEKQISAVIVGAD-RIAKNGDT 248
+                           9***********************************.76665544 PP
+
+>> sp|C1F6Z5|ILVC_ACIC5  Ketol-acid reductoisomerase OS=Acidobacterium capsulatum (strain ATCC 51196 / DSM 11244 / JCM 7
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.0   0.1     0.004       2.2       1      60 [.      20      75 ..      20     105 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 13.0 bits;  conditional E-value: 0.004
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S----- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwak 60
+                          v+++g+G+ G+     A a +L++ G eVr++  p+ ++    ++agle+ +++    +wa 
+  sp|C1F6Z5|ILVC_ACIC5 20 VAIIGYGSQGH-----AHALGLKDSGVEVRVGLAPNSRSIEkaKKAGLETGTVAEV-AAWAD 75
+                          67888999998.....77899*********999988876555599***99998888.77774 PP
+
+>> sp|Q2G3S7|PYRB_NOVAD  Aspartate carbamoyltransferase OS=Novosphingobium aromaticivorans (strain DSM 12444) GN=pyrB PE
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    4.0   0.0       2.3   1.3e+03      63     125 ..      93     143 ..      67     145 .. 0.65
+   2 ?    8.6   0.0      0.09        50      22      47 ..     199     225 ..     196     282 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 4.0 bits;  conditional E-value: 2.3
+                           -HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EE CS
+       Glyco_transf_28  63 slktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipgl 125
+                           + ++ +++ +g ++            +d+ +      ad+++i  +++g+++ +aE+ + p l
+  sp|Q2G3S7|PYRB_NOVAD  93 MHAATSSVKKG-ET-----------LIDTAMTLNAMRADAIVIRHASSGAVRLIAEKVDCPVL 143
+                           44444444444.33...........33444445555699******************999976 PP
+
+  == domain 2    score: 8.6 bits;  conditional E-value: 0.09
+                           HHH---EEEEEETGGGHHHH.HH---E CS
+       Glyco_transf_28  22 LqrrGheVrlatppgleefv.eeagle 47 
+                           L + G eVr+++pp+l++   e+ g++
+  sp|Q2G3S7|PYRB_NOVAD 199 LTALGAEVRVCAPPALMPAEiEAMGVT 225
+                           8899*************9998999986 PP
+
+>> sp|Q96LB3|IFT74_HUMAN  Intraflagellar transport protein 74 homolog OS=Homo sapiens GN=IFT74 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    3.2   0.2       4.2   2.4e+03      56      96 ..     349     387 ..     252     421 .. 0.79
+   2 ?    9.6   0.0     0.044        25      28      87 ..     505     562 ..     499     572 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 3.2 bits;  conditional E-value: 4.2
+                            ------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC- CS
+        Glyco_transf_28  56 klwakleslktlkelaeglkalrkakeilkeakpdvvvgfg 96 
+                            +++   e+++++kel ++ +++  + e+++e k + + + +
+  sp|Q96LB3|IFT74_HUMAN 349 EHQG--EMNQKYKELKKREEHMDTFIETFEETKNQELKRKA 387
+                            5666..89**********99999999999999977665544 PP
+
+  == domain 2    score: 9.6 bits;  conditional E-value: 0.044
+                            EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+        Glyco_transf_28  28 eVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                            +++l t+++  +++ e++++e+++++++  l+++  + + l++l +++++l++ ++++ke+
+  sp|Q96LB3|IFT74_HUMAN 505 RMILSTHRNAFKKImEKQNIEYEALKTQ--LQENE-THSQLTNLERKWQHLEQNNFAMKEF 562
+                            46799***********************..66655.*****************99999987 PP
+
+>> sp|A9AZM5|ILVC_HERA2  Ketol-acid reductoisomerase OS=Herpetosiphon aurantiacus (strain ATCC 23779 / DSM 785) GN=ilvC 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.5   0.1    0.0028       1.6       1      57 [.      20      73 ..      20     110 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 13.5 bits;  conditional E-value: 0.0028
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S-- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvkl 57
+                          v+++g+G+ G+     A a  L++ G +V ++ ++g +++   e+agl++ ++g  +k+
+  sp|A9AZM5|ILVC_HERA2 20 VAIIGYGSQGH-----AHALNLKDSGVQVVVGLHEGSKSKAkaEAAGLQVLSVGEATKA 73
+                          57888888888.....7799*******************9999******9999987443 PP
+
+>> sp|B8HSQ9|SURE_CYAP4  5'-nucleotidase surE OS=Cyanothece sp. (strain PCC 7425 / ATCC 29141) GN=surE PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.2   0.0    0.0069       3.9      18      59 ..      19      69 ..      15      96 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 12.2 bits;  conditional E-value: 0.0069
+                          HHHHHHH---EEEEEETGGGHHHHHH---E.EEE----.........S---- CS
+       Glyco_transf_28 18 lareLqrrGheVrlatppgleefveeagle.avpigpd.........vklwa 59
+                          la++L ++GheV ++++p+ e+  + +gl+ + pi ++         vk+wa
+  sp|B8HSQ9|SURE_CYAP4 19 LADTLAAAGHEV-MVVCPDRERSATGHGLTlFDPIRAEavaslfhpsVKAWA 69
+                          89**********.****************94566887766666666655555 PP
+
+>> sp|Q3SPL2|UVRC_NITWN  UvrABC system protein C OS=Nitrobacter winogradskyi (strain Nb-255 / ATCC 25391) GN=uvrC PE=3 S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.9   0.0    0.0043       2.4      14      73 ..     601     661 ..     600     667 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 12.9 bits;  conditional E-value: 0.0043
+                           HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHHH CS
+       Glyco_transf_28  14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelaeg 73 
+                           P + + ++L+++ h+  ++++++l+++  +eagl+ vp igp  + +a l++++tlke+ + 
+  sp|Q3SPL2|UVRC_NITWN 601 PVLYFIQRLRDEAHRFVIGSHRKLRRKDiREAGLQEVPgIGPA-RKRALLHHFGTLKEIERA 661
+                           6777899*****************99988**************.9999999*****998765 PP
+
+>> sp|A7Z3X0|MTNA_BACA2  Methylthioribose-1-phosphate isomerase OS=Bacillus amyloliquefaciens (strain FZB42) GN=mtnA PE=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.6   0.0     0.005       2.8      19      63 ..     205     248 ..     198     262 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 12.6 bits;  conditional E-value: 0.005
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.- CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakles 63 
+                           a+eL++ G++V+l+t    +++ +e++++av +g+d + ++++++
+  sp|A7Z3X0|MTNA_BACA2 205 AWELMQGGIDVTLITDSMAAHTMKEKHISAVIVGAD-RIAKNGDT 248
+                           9***********************************.76666554 PP
+
+>> sp|Q38W65|EFTS_LACSS  Elongation factor Ts OS=Lactobacillus sakei subsp. sakei (strain 23K) GN=tsf PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    8.8   0.1     0.078        44      21     118 ..      40     134 ..      36     138 .. 0.77
+   2 ?    3.9   0.0       2.5   1.4e+03      27     122 ..     177     262 ..     159     273 .. 0.65
+
+  Alignments for each domain:
+  == domain 1    score: 8.8 bits;  conditional E-value: 0.078
+                           HHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHH.HHHHHHHHHHHHHHHHHHC----EEEE--HHH CS
+       Glyco_transf_28  21 eLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglka.lrkakeilkeakpdvvvgfggyvadlaliaal 108
+                           +L+++G    +a   +  ++++++gl+ v+i++++ +  +++s + ++   +++ka l+++ e+++++kp+  +++++   +  +ia++
+  sp|Q38W65|EFTS_LACSS  40 ALREKG----MAKAAKKNDRIAAEGLAGVAIDGNTAAIVEVNSETDFVASNDQFKAlLKDIAETIAKNKPADMAAAEELPMGEGTIASS 124
+                           677777....99999999****************555555566666666666666525679999*******999999888888888887 PP
+
+                           HHHHHHHHHH CS
+       Glyco_transf_28 109 lagipanvaE 118
+                             +  a++ E
+  sp|Q38W65|EFTS_LACSS 125 VINLTAVIGE 134
+                           7777666666 PP
+
+  == domain 2    score: 3.9 bits;  conditional E-value: 2.5
+                           -EEEEEETGGGHHHHHH---EEEE----.......S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHH CS
+       Glyco_transf_28  27 heVrlatppgleefveeagleavpigpd.......vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaal 108
+                           h+V + ++      v  + ++a++++ +       +k+    +  + ++ + eg     ++++ l+e +           +d+a+i ++
+  sp|Q38W65|EFTS_LACSS 177 HDVAMHVSAVNPQYVSREDVPAETLDHErevlteeTKNEG--KPENIIPKIVEG-----RVNKFLSEIS----------LNDQAFIKDS 248
+                           5555555555555555555555555555555554444444..556666666666.....5555555555..........78999***** PP
+
+                           HHHHHHHHHHH--- CS
+       Glyco_transf_28 109 lagipanvaEqngi 122
+                            ++++ +va +ng 
+  sp|Q38W65|EFTS_LACSS 249 DQTVAQFVASKNGS 262
+                           *********99973 PP
+
+>> sp|C3JYK1|TIG_PSEFS  Trigger factor OS=Pseudomonas fluorescens (strain SBW25) GN=tig PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.2   0.0    0.0033       1.9      44     126 ..     121     199 ..      99     208 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 13.2 bits;  conditional E-value: 0.0033
+                          ---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEE CS
+      Glyco_transf_28  44 agleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglv 126
+                          +g++++ + ++  ++     l++++e++++ ++++++ e  +++++++ ++f+g v++ a+ + ++ g ++++   + ipg+ 
+  sp|C3JYK1|TIG_PSEFS 121 DGIAIERLSAE--VAD--SDLDNMLEILRKQNTRFEVAERAAQNEDQLNIDFVGKVDGEAFAGGSAKGTQLVLGSNRMIPGFE 199
+                          56677777777..666..5899**********************************************************985 PP
+
+>> sp|Q1GZA6|BIOB_METFK  Biotin synthase OS=Methylobacillus flagellatus (strain KT / ATCC 51484 / DSM 6875) GN=bioB PE=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.4   0.0     0.003       1.7      11      97 ..     131     219 ..     131     299 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 13.4 bits;  conditional E-value: 0.003
+                           -HHHHHHHHHHHHH---EEE..EE.ETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC- CS
+       Glyco_transf_28  11 dvePavAlareLqrrGheVr..la.tppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfg 96 
+                           d+eP +A+ re+++ G e +  l+  ++g +e+++eagl+++  ++d +++++   + t ++ +++l++l +++e   + ++  ++g+g
+  sp|Q1GZA6|BIOB_METFK 131 DLEPVLAMIREVKAMGLETCatLGmLKDGQAEQLKEAGLDYYNHNLD-TAPEYYGEVITTRTYQDRLDTLDRVREQDINVCCGGIIGMG 218
+                           89********************873578888899*********9999.77776666666677777777777776666666666666666 PP
+
+                           - CS
+       Glyco_transf_28  97 g 97 
+                           +
+  sp|Q1GZA6|BIOB_METFK 219 E 219
+                           4 PP
+
+>> sp|Q635P7|MTNA2_BACCZ  Methylthioribose-1-phosphate isomerase 2 OS=Bacillus cereus (strain ZK / E33L) GN=mtnA2 PE=3 S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.8   0.0    0.0044       2.5      19      66 ..     205     251 ..     203     311 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 12.8 bits;  conditional E-value: 0.0044
+                            HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS
+        Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 
+                             +eL+++G++V+l+t +  ++ + +++++a  +g+d +  a++++ ++
+  sp|Q635P7|MTNA2_BACCZ 205 TWELKQAGIDVTLITDNTAAHAIQTKEINAIIVGAD-RIVANGDTANK 251
+                            59**********************************.66665544444 PP
+
+>> sp|O48676|HTGT_ARATH  N-hydroxythioamide S-beta-glucosyltransferase OS=Arabidopsis thaliana GN=UGT74B1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.3   0.0    0.0032       1.8       1      73 [.      12      87 ..      12     130 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 13.3 bits;  conditional E-value: 0.0032
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....S------.-HHHCCSHHHH CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.....vklwakleslktlkelaeg 73
+                          vv++ ++  G++ P v +a++L  +  +V++at+   ++ +++  l+++pi  +     ++ +   +s++t++e ++ 
+  sp|O48676|HTGT_ARATH 12 VVILPYPVQGHLNPMVQFAKRLVSKNVKVTIATTTYTASSITTPSLSVEPISDGfdfipIGIPG--FSVDTYSESFKL 87
+                          678889999******************************************9987777744444..444444444444 PP
+
+>> sp|Q8YRC9|THIOG_ANASP  Bifunctional protein thiO/thiG OS=Anabaena sp. (strain PCC 7120) GN=thiO/thiG PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    3.9   0.0       2.5   1.4e+03      16      33 ..      15      32 ..      12      74 .. 0.80
+   2 ?    7.1   0.0      0.25   1.4e+02      87     133 ..     315     361 ..     290     366 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 3.9 bits;  conditional E-value: 2.5
+                           HHHHHHHHH---EEEEEE CS
+        Glyco_transf_28 16 vAlareLqrrGheVrlat 33
+                           +A+a+eL+ rG eV+++ 
+  sp|Q8YRC9|THIOG_ANASP 15 LAIAVELKLRGAEVTVIC 32
+                           8*************9543 PP
+
+  == domain 2    score: 7.1 bits;  conditional E-value: 0.25
+                            HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS
+        Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133
+                            ++p++++++g y ++ +l   ++a i+  + Eq + p+l++++++r 
+  sp|Q8YRC9|THIOG_ANASP 315 HCPNLTLATGHYRNGILLAPITAALIADLIVEQKSDPLLSHFHYSRS 361
+                            78999**************************************9985 PP
+
+>> sp|Q8DW43|ILVC_STRMU  Ketol-acid reductoisomerase OS=Streptococcus mutans GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.0     0.019        11       1      54 [.      21      70 ..      21     103 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.019
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGG.GHHHHHH---EEEE---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppg.leefveeagleavpigpd 54
+                          ++++g+G+ G+     A a+ L++ Gh+V++++  g   ++ +e+g +++++g  
+  sp|Q8DW43|ILVC_STRMU 21 IAVIGYGSQGH-----AHAQNLRDSGHDVIIGVRHGkSFDKAKEDGFDTYEVGEA 70
+                          57888899888.....88**************96541445557777777776655 PP
+
+>> sp|Q81MJ6|MTNA2_BACAN  Methylthioribose-1-phosphate isomerase 2 OS=Bacillus anthracis GN=mtnA2 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.9   0.0    0.0041       2.3      19      66 ..     205     251 ..     203     308 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 12.9 bits;  conditional E-value: 0.0041
+                            HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS
+        Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 
+                             +eL+++G++V+l+t +  ++ + +++++a  +g+d +  a++++ ++
+  sp|Q81MJ6|MTNA2_BACAN 205 TWELKQAGIDVTLITDNTAAHAIQTKEISAIIVGAD-RIVANGDTANK 251
+                            59**********************************.66665544444 PP
+
+>> sp|Q6N693|GLYA1_RHOPA  Serine hydroxymethyltransferase 1 OS=Rhodopseudomonas palustris GN=glyA1 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.2   0.0     0.014       7.7      13     107 ..      24     119 ..      21     125 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 11.2 bits;  conditional E-value: 0.014
+                            HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC-- CS
+        Glyco_transf_28  13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfgg 97 
+                            e a+A+  eL r+ heV+l+++++++++   e++g  +   ++ + +++++     +++++ae+  a+ +ak+++  ++++v    g+
+  sp|Q6N693|GLYA1_RHOPA  24 EIAAAIRGELGRQRHEVELIASENIVSRAvlEAQGSVMTNkYAEGYPGNRYY-GGCEFVDVAEN-LAIDRAKKLFGANFANVQPNSGS 109
+                            7899**********************99886666654444577776677777.78888888888.89999999999999999988888 PP
+
+                            --EEEE--HH CS
+        Glyco_transf_28  98 yvadlaliaa 107
+                            + + ++++a 
+  sp|Q6N693|GLYA1_RHOPA 110 QMNQAVFLAL 119
+                            8888888876 PP
+
+>> sp|B0C915|MURD_ACAM1  UDP-N-acetylmuramoylalanine--D-glutamate ligase OS=Acaryochloris marina (strain MBIC 11017) GN=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.1   0.0    0.0035         2      16      73 ..      14      69 ..      12     109 .. 0.75
+
+  Alignments for each domain:
+  == domain 1    score: 13.1 bits;  conditional E-value: 0.0035
+                          HHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHH CS
+       Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeg 73
+                          +A ar L+r+G++V ++     e  v +++ l+a+ i++   l+ k+ sl++l el   
+  sp|B0C915|MURD_ACAM1 14 IAAARLLRREGWQVSVGDAGHSEGLVaTQKTLAAEGIPVH--LNLKF-SLSALAELSLD 69
+                          7999**********************************99..44444.55665555444 PP
+
+>> sp|Q2KA25|GLYA_RHIEC  Serine hydroxymethyltransferase OS=Rhizobium etli (strain CFN 42 / ATCC 51251) GN=glyA PE=3 SV=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.4   0.0    0.0061       3.5      13     108 ..      20     116 ..      16     121 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 12.4 bits;  conditional E-value: 0.0061
+                           HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS
+       Glyco_transf_28  13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 
+                           e + A+++eL r+ he++l+++++++++   e++g  +   ++ + +++++      ++++ae+  a+++ak+++  ++++v    g++
+  sp|Q2KA25|GLYA_RHIEC  20 EIFGAIGKELGRQRHEIELIASENIVSRAvlEAQGSIMTNkYAEGYPGKRYY-GGCQFVDIAEE-LAIERAKKLFGVNFANVQPNSGSQ 106
+                           56779*********************99887766655544588888888888.88899999999.999999999999999999999999 PP
+
+                           -EEEE--HHH CS
+       Glyco_transf_28  99 vadlaliaal 108
+                            + ++++a l
+  sp|Q2KA25|GLYA_RHIEC 107 MNQAVFLALL 116
+                           9999998865 PP
+
+>> sp|Q214H7|GLYA_RHOPB  Serine hydroxymethyltransferase OS=Rhodopseudomonas palustris (strain BisB18) GN=glyA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.5   0.0     0.011       6.5      13     107 ..      32     127 ..      28     133 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 11.5 bits;  conditional E-value: 0.011
+                           HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS
+       Glyco_transf_28  13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 
+                           e a+A+a eL r+ he++l+++++++++   e++g  +   ++ + ++ ++     +++++ae+  a+++ak+++   +++v    g++
+  sp|Q214H7|GLYA_RHOPB  32 EIAAAIAGELGRQRHEIELIASENIVSRAvmEAQGSVMTNkYAEGYPGHRYY-GGCEFVDVAEN-LAIERAKKLFGAGFANVQPNSGSQ 118
+                           789**********************999888777755554477775666666.77788888888.899999999999999988888888 PP
+
+                           -EEEE--HH CS
+       Glyco_transf_28  99 vadlaliaa 107
+                            + ++++a 
+  sp|Q214H7|GLYA_RHOPB 119 MNQAVFLAL 127
+                           888888876 PP
+
+>> sp|B9DW70|MUTL_STRU0  DNA mismatch repair protein mutL OS=Streptococcus uberis (strain ATCC BAA-854 / 0140J) GN=mutL 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.2   0.0    0.0067       3.8      65     127 ..     203     265 ..     151     268 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 12.2 bits;  conditional E-value: 0.0067
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                           + lk++ +g  +l+ ak+ ++  ++d+++++ gyv+++ l+ a++++i + ++  +   +l n
+  sp|B9DW70|MUTL_STRU0 203 GDLKQAIAGIYGLNTAKKMIEISNADLDFEVSGYVSLPELTRANRNYITILINGRYIKNFLLN 265
+                           5788888999999*************************************9998887766666 PP
+
+>> sp|A0RI38|MTNA2_BACAH  Methylthioribose-1-phosphate isomerase 2 OS=Bacillus thuringiensis (strain Al Hakam) GN=mtnA2 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.8   0.0    0.0046       2.6      19      66 ..     205     251 ..     203     307 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 12.8 bits;  conditional E-value: 0.0046
+                            HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS
+        Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 
+                             +eL+++G++V+l+t +  ++ + +++++a  +g+d +  a++++ ++
+  sp|A0RI38|MTNA2_BACAH 205 TWELKQAGIDVTLITDNTAAHAIQTKEINAIIVGAD-RIVANGDTANK 251
+                            59**********************************.66665544444 PP
+
+>> sp|Q6HED3|MTNA2_BACHK  Methylthioribose-1-phosphate isomerase 2 OS=Bacillus thuringiensis subsp. konkukian GN=mtnA2 P
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.8   0.0    0.0046       2.6      19      66 ..     205     251 ..     203     307 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 12.8 bits;  conditional E-value: 0.0046
+                            HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS
+        Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 
+                             +eL+++G++V+l+t +  ++ + +++++a  +g+d +  a++++ ++
+  sp|Q6HED3|MTNA2_BACHK 205 TWELKQAGIDVTLITDNTAAHAIQTKEINAIIVGAD-RIVANGDTANK 251
+                            59**********************************.66665544444 PP
+
+>> sp|Q1QIR5|UVRC_NITHX  UvrABC system protein C OS=Nitrobacter hamburgensis (strain X14 / DSM 10229) GN=uvrC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.9   0.0    0.0042       2.4      14      73 ..     602     662 ..     601     669 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 12.9 bits;  conditional E-value: 0.0042
+                           HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHHH CS
+       Glyco_transf_28  14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelaeg 73 
+                           P + + ++L+++ h+  ++++++l+++  +eagl+ vp igp  + +a l++++tlke+ + 
+  sp|Q1QIR5|UVRC_NITHX 602 PVLYFIQRLRDEAHRFVIGSHRKLRRKDiREAGLQEVPgIGPA-RKRALLHHFGTLKEIERA 662
+                           6777899*****************99988**************.9999999*****998765 PP
+
+>> sp|A8AVN4|ILVC_STRGC  Ketol-acid reductoisomerase OS=Streptococcus gordonii (strain Challis / ATCC 35105 / CH1 / DL1 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.9   0.0    0.0085       4.8       1      50 [.      21      66 ..      21     118 .. 0.75
+
+  Alignments for each domain:
+  == domain 1    score: 11.9 bits;  conditional E-value: 0.0085
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGH.HHHHH---EEEE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgle.efveeagleavp 50
+                          ++++g+G+ G+     A a+ L++ Gh+V++++ pg   ++ +e+g ++++
+  sp|A8AVN4|ILVC_STRGC 21 IAVIGYGSQGH-----AHAQNLRDTGHDVIIGVRPGKSfDKAKEDGFDTYT 66
+                          57888889888.....88***************997431333666655555 PP
+
+>> sp|Q7V5V5|MURD_PROMM  UDP-N-acetylmuramoylalanine--D-glutamate ligase OS=Prochlorococcus marinus (strain MIT 9313) GN
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.4   0.0     0.024        13      17      68 ..      40      90 ..      34     134 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 10.4 bits;  conditional E-value: 0.024
+                          HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCC CS
+       Glyco_transf_28 17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlk 68
+                          +la  L+ +G+ V+l+ p +l +f+   + l+av i p+  +w +  +l++l+
+  sp|Q7V5V5|MURD_PROMM 40 SLAADLRLQGIAVELGKPLELNSFIpLLDQLDAVVISPG-IAWDHP-TLTALR 90
+                          7999***********************************.777766.666665 PP
+
+>> sp|Q47SB6|ILVC_THEFY  Ketol-acid reductoisomerase OS=Thermobifida fusca (strain YX) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.9   0.1    0.0043       2.4       1      50 [.      21      67 ..      21      91 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 12.9 bits;  conditional E-value: 0.0043
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavp 50
+                          v+++g+G+ G+     A a  L++ G +Vr++ p+  +++   ee+gl +v+
+  sp|Q47SB6|ILVC_THEFY 21 VAVIGYGSQGH-----AHALSLRDSGVDVRVGLPESSKSRAkaEEDGLRVVT 67
+                          67888999998.....77999******************9999999998875 PP
+
+>> sp|A4FMQ5|ILVC_SACEN  Ketol-acid reductoisomerase OS=Saccharopolyspora erythraea (strain NRRL 23338) GN=ilvC PE=3 SV=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.3   0.0    0.0032       1.8       1      47 [.      21      64 ..      21      92 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 13.3 bits;  conditional E-value: 0.0032
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---E CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagle 47
+                          v+++g+G+ G+     A a  L++ G +Vr++ p+g +++   ee+gl 
+  sp|A4FMQ5|ILVC_SACEN 21 VAVIGYGSQGH-----AHALSLRDSGADVRIGLPEGSKSRAkaEEEGLR 64
+                          67888999998.....77999*******************987888875 PP
+
+>> sp|Q5V3R4|TRM56_HALMA  tRNA ribose 2'-O-methyltransferase aTrm56 OS=Haloarcula marismortui GN=rrnAC0857 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.8   0.0    0.0022       1.3      30     121 ..      11     103 ..       1     116 [. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 13.8 bits;  conditional E-value: 0.0022
+                            EEEETGGGHHHH.HH---EEEE----....S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHH CS
+        Glyco_transf_28  30 rlatppgleefv.eeagleavpigpd....vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagi 112
+                            rl+  pg +e+  +  gl+a+++g+d      +++  ++ +t+ ++ +++ + +++  + ++++  ++ +f+g+v  l +++ + +++
+  sp|Q5V3R4|TRM56_HALMA  11 RLGHRPGRDERMtTHVGLTARALGADkvvlANAAR--NQADTVIDITDRFGGPFDVASTEEPKR--LIRDFEGRVVHLTMYGEPVQEV 94 
+                            3999999999999**************98544445..699999999999888888888777776..8999****************** PP
+
+                            HHHHHHH-- CS
+        Glyco_transf_28 113 panvaEqng 121
+                             a v E+n 
+  sp|Q5V3R4|TRM56_HALMA  95 EADVREANT 103
+                            *****9985 PP
+
+>> sp|B8GW68|ENO_CAUCN  Enolase OS=Caulobacter crescentus (strain NA1000 / CB15N) GN=eno PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    2.9   0.0       5.1   2.9e+03      24      67 ..     105     146 ..     104     172 .. 0.78
+   2 ?    9.0   0.0     0.066        37      13      48 ..     184     219 ..     183     276 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 2.9 bits;  conditional E-value: 5.1
+                          H---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHC CS
+      Glyco_transf_28  24 rrGheVrlatppgleefv.eeagleavpigpdvklwakleslktl 67 
+                          r G + +l+++ + ++   e+agl+ +++ ++  ++a++  ++ +
+  sp|B8GW68|ENO_CAUCN 105 RLGANAILGVSLATAKAAaESAGLPLYKYVGG--VNARV-LPTPM 146
+                          67999999***99999999*********8887..33333.34444 PP
+
+  == domain 2    score: 9.0 bits;  conditional E-value: 0.066
+                          HHHHHHHHHHHH---EEEEEETGGGHHHHHH---EE CS
+      Glyco_transf_28  13 ePavAlareLqrrGheVrlatppgleefveeaglea 48 
+                          e + Al ++L+++Gh+  ++ + g+++ +++a+ + 
+  sp|B8GW68|ENO_CAUCN 184 EIFHALKKALKDAGHNTNVGDEGGFAPNLASAEAAL 219
+                          6799**********************9996665444 PP
+
+>> sp|Q9A7J9|ENO_CAUCR  Enolase OS=Caulobacter crescentus GN=eno PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    2.9   0.0       5.1   2.9e+03      24      67 ..     105     146 ..     104     172 .. 0.78
+   2 ?    9.0   0.0     0.066        37      13      48 ..     184     219 ..     183     276 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 2.9 bits;  conditional E-value: 5.1
+                          H---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHC CS
+      Glyco_transf_28  24 rrGheVrlatppgleefv.eeagleavpigpdvklwakleslktl 67 
+                          r G + +l+++ + ++   e+agl+ +++ ++  ++a++  ++ +
+  sp|Q9A7J9|ENO_CAUCR 105 RLGANAILGVSLATAKAAaESAGLPLYKYVGG--VNARV-LPTPM 146
+                          67999999***99999999*********8887..33333.34444 PP
+
+  == domain 2    score: 9.0 bits;  conditional E-value: 0.066
+                          HHHHHHHHHHHH---EEEEEETGGGHHHHHH---EE CS
+      Glyco_transf_28  13 ePavAlareLqrrGheVrlatppgleefveeaglea 48 
+                          e + Al ++L+++Gh+  ++ + g+++ +++a+ + 
+  sp|Q9A7J9|ENO_CAUCR 184 EIFHALKKALKDAGHNTNVGDEGGFAPNLASAEAAL 219
+                          6799**********************9996665444 PP
+
+>> sp|Q5V3F0|MAMA2_HALMA  Methylaspartate mutase S chain 2 OS=Haloarcula marismortui GN=mamA2 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.7   0.1    0.0049       2.8       1      54 [.       4      59 ..       4     131 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 12.7 bits;  conditional E-value: 0.0049
+                           EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE---- CS
+        Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpd 54
+                           v+l ++G+  +v  +  l r++ ++G +V  l+++    ef+ ++++ +a++i + 
+  sp|Q5V3F0|MAMA2_HALMA  4 VILGVIGSDAHVVGITILERAFEAAGFNVVnLGVQSSQSEFIdAADEHDAEAILVS 59
+                           578899************************************98888888887666 PP
+
+>> sp|B1LZ88|GLYA_METRJ  Serine hydroxymethyltransferase OS=Methylobacterium radiotolerans (strain ATCC 27329 / DSM 1819
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.9   0.0    0.0086       4.9      11      45 ..      24      60 ..      17     125 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 11.9 bits;  conditional E-value: 0.0086
+                          -HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH-- CS
+       Glyco_transf_28 11 dvePavAlareLqrrGheVrlatppgleefv..eeag 45
+                          d e a A+a+eL r+ he++l+++++++++   e++g
+  sp|B1LZ88|GLYA_METRJ 24 DPEIAEAVAKELGRQQHEIELIASENIVSRAvlEAQG 60
+                          557888*********************9998755554 PP
+
+>> sp|P94966|BIOB_METSK  Biotin synthase OS=Methylobacillus sp. (strain KT1) GN=bioB PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.0   0.0    0.0038       2.1      11      97 ..     128     216 ..     128     242 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 13.0 bits;  conditional E-value: 0.0038
+                           -HHHHHHHHHHHHH---EEE..EE.ETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC- CS
+       Glyco_transf_28  11 dvePavAlareLqrrGheVr..la.tppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfg 96 
+                           d+eP +A+ re+++ G e +  l+  ++g +e+++eagl+++  ++d +++++   + t ++ +++l++l +++e   + ++  ++g+g
+  sp|P94966|BIOB_METSK 128 DLEPVLAMIREVKAMGLETCatLGmLKDGQAEQLKEAGLDYYNHNLD-TAPEYYGEVITTRTYQDRLDTLDRVREQDINVCCGGIIGMG 215
+                           89********************873578888899*********9999.88877767777777777777777777777777777777766 PP
+
+                           - CS
+       Glyco_transf_28  97 g 97 
+                           +
+  sp|P94966|BIOB_METSK 216 E 216
+                           5 PP
+
+>> sp|Q3SHE4|ILVC_THIDA  Ketol-acid reductoisomerase OS=Thiobacillus denitrificans (strain ATCC 25259) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.9   0.1    0.0043       2.4       1      70 [.      19      81 ..      19     119 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 12.9 bits;  conditional E-value: 0.0043
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSH CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkel 70
+                          v+++g+G+ G+     A a+ L++ G +V++a  pg ++    e+agl++++++    + a    l +++++
+  sp|Q3SHE4|ILVC_THIDA 19 VAIVGYGSQGH-----AHANNLKDSGVDVTVALRPGSASAKkaENAGLTVKSVPEA-VAGA---DLVMILTP 81
+                          67888999998.....88******************9887777********99988.2222...33333333 PP
+
+>> sp|Q07MT9|GLYA_RHOP5  Serine hydroxymethyltransferase OS=Rhodopseudomonas palustris (strain BisA53) GN=glyA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.1   0.0     0.015       8.5      13     107 ..      25     120 ..      20     126 .. 0.75
+
+  Alignments for each domain:
+  == domain 1    score: 11.1 bits;  conditional E-value: 0.015
+                           HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS
+       Glyco_transf_28  13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 
+                           e a+A+a eL r+ he++l+++++++++   e++g  +   ++ + ++ ++     +++++ae+  a+ +ak+++   +++v    g++
+  sp|Q07MT9|GLYA_RHOP5  25 EIAAAIAGELGRQRHEIELIASENIVSRAvlEAQGSVMTNkYAEGYPGHRYY-GGCEFVDVAEN-LAIDRAKKLFGAGFANVQPNSGSQ 111
+                           789***********************99886666644444466665555555.67777777777.788888888888888888777777 PP
+
+                           -EEEE--HH CS
+       Glyco_transf_28  99 vadlaliaa 107
+                            + ++++a 
+  sp|Q07MT9|GLYA_RHOP5 112 MNQAVFLAL 120
+                           777777765 PP
+
+>> sp|A9VRK3|MTNA1_BACWK  Methylthioribose-1-phosphate isomerase 1 OS=Bacillus weihenstephanensis (strain KBAB4) GN=mtnA
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.7   0.0    0.0047       2.6      17      63 ..     202     247 ..     193     332 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 12.7 bits;  conditional E-value: 0.0047
+                            HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS
+        Glyco_transf_28  17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 
+                              a eLqr+G++V+++t  +++++v  + +++av +g+d +++a+++ 
+  sp|A9VRK3|MTNA1_BACWK 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKIDAVIVGCD-RVAANGDV 247
+                            5699*********98875.6777777*************.77776643 PP
+
+>> sp|A9GW78|ILVC_SORC5  Ketol-acid reductoisomerase OS=Sorangium cellulosum (strain So ce56) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.7   0.1      0.01       5.6       1      54 [.      20      70 ..      20     105 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 11.7 bits;  conditional E-value: 0.01
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                          v+++g+G+ G+     A a  L++ G  V++a p+g +++    +agl++ ++   
+  sp|A9GW78|ILVC_SORC5 20 VAIVGYGSQGH-----AHALNLRDSGVTVIVALPEGSKSRPkaQAAGLQVATVSEA 70
+                          67889999998.....7799********************9988999999887655 PP
+
+>> sp|Q5YRW2|ILVC_NOCFA  Ketol-acid reductoisomerase OS=Nocardia farcinica GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   0.0    0.0079       4.5       1      59 [.      21      75 ..      21     103 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.0079
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwa 59
+                          v+++g+G+ G+     A    L++ G eVr++  +g +++   eeagl++   +++v +wa
+  sp|Q5YRW2|ILVC_NOCFA 21 VAVIGYGSQGH-----AHSLSLRDSGVEVRVGLAEGSKSRPkaEEAGLTV-GTPAEVSAWA 75
+                          56778888888.....55678*********9999999999888*****97.4444446666 PP
+
+>> sp|A3CQ86|ILVC_STRSV  Ketol-acid reductoisomerase OS=Streptococcus sanguinis (strain SK36) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.7   0.0      0.01       5.6       1      36 [.      21      51 ..      21     117 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 11.7 bits;  conditional E-value: 0.01
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGG CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppg 36
+                          ++++g+G+ G+     A a+ L++ Gh+V++++ pg
+  sp|A3CQ86|ILVC_STRSV 21 IAVIGYGSQGH-----AHAQNLRDTGHDVIIGVRPG 51
+                          57888889888.....88***************997 PP
+
+>> sp|Q21AW5|UVRC_RHOPB  UvrABC system protein C OS=Rhodopseudomonas palustris (strain BisB18) GN=uvrC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.2   0.0     0.013       7.6      14      72 ..     611     670 ..     610     676 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 11.2 bits;  conditional E-value: 0.013
+                           HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHH CS
+       Glyco_transf_28  14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelae 72 
+                           P + + ++L+++ h+  ++++++l+++  +eagl+  p igp  + +a l++++tlke+ +
+  sp|Q21AW5|UVRC_RHOPB 611 PVLYFIQRLRDEAHRFVIGSHRKLRKKDiREAGLQEIPgIGPS-RKRALLHHFGTLKEIER 670
+                           6777899******************9988**************.9999999*****99876 PP
+
+>> sp|Q81IK7|MTNA1_BACCR  Methylthioribose-1-phosphate isomerase 1 OS=Bacillus cereus (strain ATCC 14579 / DSM 31) GN=mt
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.4   0.0    0.0061       3.5      17      63 ..     202     247 ..     193     276 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 12.4 bits;  conditional E-value: 0.0061
+                            HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS
+        Glyco_transf_28  17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 
+                              a eLqr+G++V+++t  +++++v  + +++av +g+d +++a+++ 
+  sp|Q81IK7|MTNA1_BACCR 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKIDAVIVGCD-RVAANGDV 247
+                            5699*********98875.6777777*************.88887744 PP
+
+>> sp|Q5FNN2|PYRG_GLUOX  CTP synthase OS=Gluconobacter oxydans GN=pyrG PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    2.8   0.0       5.6   3.2e+03      15      31 ..      21      37 ..      19      42 .. 0.92
+   2 ?    6.7   0.0      0.34   1.9e+02       2      45 ..     137     183 ..     136     223 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 2.8 bits;  conditional E-value: 5.6
+                          HHHHHHHHHH---EEEE CS
+       Glyco_transf_28 15 avAlareLqrrGheVrl 31
+                          ++Ala  Lq+rG++Vr+
+  sp|Q5FNN2|PYRG_GLUOX 21 SAALAALLQARGYKVRM 37
+                          589*************8 PP
+
+  == domain 2    score: 6.7 bits;  conditional E-value: 0.34
+                           EEE-------HH..HHHHHHHHHHH.---EEEEEETGGGHHHHHH-- CS
+       Glyco_transf_28   2 vlaggGTrGdve..PavAlareLqr.rGheVrlatppgleefveeag 45 
+                           ++ +gGT Gd+e  P++   r+L++  Gh  +++++  l + +++ag
+  sp|Q5FNN2|PYRG_GLUOX 137 LVEIGGTVGDIEslPFLEAIRQLRNdLGHAQTMCVHLTLLPYIPAAG 183
+                           66789******98899*99****973699999******999995555 PP
+
+>> sp|Q2S9V9|ILVC_HAHCH  Ketol-acid reductoisomerase OS=Hahella chejuensis (strain KCTC 2396) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   0.1    0.0076       4.3       1      55 [.      19      82 ..      19     128 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.0076
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----............S CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd............v 55
+                          v+++g+G+ G+     A a+ L++ G +V+++  +g  ++   e+agl++++++              +
+  sp|Q2S9V9|ILVC_HAHCH 19 VAIIGYGSQGH-----AHANNLKDSGVDVCVGLRKGSGSWAkaENAGLAVKEVAEAvagadvvmiltpD 82
+                          57888888888.....88**********************999*******9998873333333333332 PP
+
+>> sp|Q17QH8|D39U1_BOVIN  Epimerase family protein SDR39U1 OS=Bos taurus GN=SDR39U1 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.9   0.0    0.0042       2.4       2      79 ..       3      75 ..       2     121 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 12.9 bits;  conditional E-value: 0.0042
+                           EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHH CS
+        Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrk 79
+                           vl+ggGT+   +   Al + L++rGheV+l++ +   ++++ + l++  ++    ++ +l   +++++++++++a ++
+  sp|Q17QH8|D39U1_BOVIN  3 VLVGGGTG---FIGTALTQLLKARGHEVTLISRKPGPDRITWDDLTTSGLPRC-DAAVNL-AGENILNPLRRWNAAFQ 75
+                           67888888...999****************99999999999999999998888.666666.88888888888666554 PP
+
+>> sp|Q2J6V2|ILVC_FRASC  Ketol-acid reductoisomerase OS=Frankia sp. (strain CcI3) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.5   0.1    0.0057       3.2       1      47 [.      20      63 ..      20     100 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 12.5 bits;  conditional E-value: 0.0057
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---E CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagle 47
+                          v+++g+G+ G+     A a  L++ G +Vr++ p + +++   ee+gl 
+  sp|Q2J6V2|ILVC_FRASC 20 VAVIGYGSQGH-----AHALNLRDSGVDVRVGLPADSRSRAraEEEGLR 63
+                          67888999998.....7799******************99987888876 PP
+
+>> sp|A1WUW3|ILVC_HALHL  Ketol-acid reductoisomerase OS=Halorhodospira halophila (strain DSM 244 / SL1) GN=ilvC PE=3 SV=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.8   0.0     0.038        22       1      54 [.      19      69 ..      19      98 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 9.8 bits;  conditional E-value: 0.038
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                          v+++g+G+ G+     A a+ L++ G +V ++  pg  +     eagle+ +++  
+  sp|A1WUW3|ILVC_HALHL 19 VAIIGYGSQGH-----AHANNLKESGVNVVVGLRPGSSSAAkaQEAGLEVASVEEA 69
+                          57888888888.....88*******************99998899***99988766 PP
+
+>> sp|A8LMD0|PUR9_DINSH  Bifunctional purine biosynthesis protein purH OS=Dinoroseobacter shibae (strain DFL 12) GN=purH
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.8   0.1    0.0093       5.3      15      70 ..      20      71 ..      13      99 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 11.8 bits;  conditional E-value: 0.0093
+                          HHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSH CS
+       Glyco_transf_28 15 avAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkel 70
+                          +v+l+++L +rG  V+l ++ g ++ ++eagl++v +   +++++  ++ + +k+l
+  sp|A8LMD0|PUR9_DINSH 20 LVPLGQALAARG--VELLSTGGTAKALREAGLDVVDVSDVTGFPE--MMDGRVKTL 71
+                          79**********..**********************999977777..565555554 PP
+
+>> sp|C5BAT0|GCSP_EDWI9  Glycine dehydrogenase [decarboxylating] OS=Edwardsiella ictaluri (strain 93-146) GN=gcvP PE=3 S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.8   0.1    0.0091       5.1       1      37 [.     215     251 ..     215     306 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 11.8 bits;  conditional E-value: 0.0091
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGG CS
+       Glyco_transf_28   1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgl 37 
+                           v+l  +GT Gd++ + Al++ L++rG   ++a+ p  
+  sp|C5BAT0|GCSP_EDWI9 215 VLLQQVGTQGDLHDYRALMDSLRERGVITCMAADPLA 251
+                           567789***************************9965 PP
+
+>> sp|C1B2M1|ILVC_RHOOB  Ketol-acid reductoisomerase OS=Rhodococcus opacus (strain B4) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.5   0.0     0.011       6.3       1      48 [.      21      65 ..      21     102 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.5 bits;  conditional E-value: 0.011
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48
+                          v+++g+G+ G+     A    L++ G +Vr++ ++g +++   ee+gl++
+  sp|C1B2M1|ILVC_RHOOB 21 VAVIGYGSQGH-----AHSLSLRDSGVDVRIGLKEGSKSRAkaEEQGLTV 65
+                          56778888888.....55678*******************9999999986 PP
+
+>> sp|Q0S2H3|ILVC_RHOSR  Ketol-acid reductoisomerase OS=Rhodococcus sp. (strain RHA1) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.5   0.0     0.011       6.3       1      48 [.      21      65 ..      21     102 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.5 bits;  conditional E-value: 0.011
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48
+                          v+++g+G+ G+     A    L++ G +Vr++ ++g +++   ee+gl++
+  sp|Q0S2H3|ILVC_RHOSR 21 VAVIGYGSQGH-----AHSLSLRDSGVDVRIGLKEGSKSRAkaEEQGLTV 65
+                          56778888888.....55678*******************9999999986 PP
+
+>> sp|A0R946|MTNA1_BACAH  Methylthioribose-1-phosphate isomerase 1 OS=Bacillus thuringiensis (strain Al Hakam) GN=mtnA1 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.3   0.0    0.0062       3.5      17      63 ..     202     247 ..     193     275 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 12.3 bits;  conditional E-value: 0.0062
+                            HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS
+        Glyco_transf_28  17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 
+                              a eLqr+G++V+++t  +++++v  + +++av +g+d +++a+++ 
+  sp|A0R946|MTNA1_BACAH 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKIDAVIVGCD-RVAANGDV 247
+                            5699*********98875.6777777*************.88887744 PP
+
+>> sp|Q81ZC2|MTNA1_BACAN  Methylthioribose-1-phosphate isomerase 1 OS=Bacillus anthracis GN=mtnA1 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.3   0.0    0.0062       3.5      17      63 ..     202     247 ..     193     275 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 12.3 bits;  conditional E-value: 0.0062
+                            HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS
+        Glyco_transf_28  17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 
+                              a eLqr+G++V+++t  +++++v  + +++av +g+d +++a+++ 
+  sp|Q81ZC2|MTNA1_BACAN 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKIDAVIVGCD-RVAANGDV 247
+                            5699*********98875.6777777*************.88887744 PP
+
+>> sp|Q6HP54|MTNA1_BACHK  Methylthioribose-1-phosphate isomerase 1 OS=Bacillus thuringiensis subsp. konkukian GN=mtnA1 P
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.3   0.0    0.0062       3.5      17      63 ..     202     247 ..     193     275 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 12.3 bits;  conditional E-value: 0.0062
+                            HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS
+        Glyco_transf_28  17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 
+                              a eLqr+G++V+++t  +++++v  + +++av +g+d +++a+++ 
+  sp|Q6HP54|MTNA1_BACHK 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKIDAVIVGCD-RVAANGDV 247
+                            5699*********98875.6777777*************.88887744 PP
+
+>> sp|Q1MIU5|GLYA_RHIL3  Serine hydroxymethyltransferase OS=Rhizobium leguminosarum bv. viciae (strain 3841) GN=glyA PE=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.6   0.0     0.011         6      16     108 ..      23     116 ..      16     121 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 11.6 bits;  conditional E-value: 0.011
+                           HHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EE CS
+       Glyco_transf_28  16 vAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvad 101
+                            A+++eL r+ he++l+++++++++   e++g  +   ++ + +++++      ++++ae+  a+++ak+++  ++++v    g++ + 
+  sp|Q1MIU5|GLYA_RHIL3  23 GAIGKELGRQRHEIELIASENIVSRAvlEAQGSIMTNkYAEGYPGKRYY-GGCQFVDIAEE-LAIERAKKLFGVNFANVQPNSGSQMNQ 109
+                           599********************99887766655544588888888888.88899999999.999999999999999999999999999 PP
+
+                           EE--HHH CS
+       Glyco_transf_28 102 laliaal 108
+                           ++++a l
+  sp|Q1MIU5|GLYA_RHIL3 110 AVFLALL 116
+                           9998865 PP
+
+>> sp|A8FCG5|MTNA_BACP2  Methylthioribose-1-phosphate isomerase OS=Bacillus pumilus (strain SAFR-032) GN=mtnA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   0.0    0.0078       4.4      19      65 ..     205     250 ..     198     288 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.0078
+                           HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HH CS
+       Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslk 65 
+                            +eL++ G +V+l+t +  +++ +e+ ++av +g+d + +++++  +
+  sp|A8FCG5|MTNA_BACP2 205 TWELMQGGVDVTLITDNMAAHTMKEKQISAVIVGAD-RIARNGDAAN 250
+                           69**********************************.7777664443 PP
+
+>> sp|Q63CV4|ILVC2_BACCZ  Ketol-acid reductoisomerase 2 OS=Bacillus cereus (strain ZK / E33L) GN=ilvC2 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.3   0.1     0.013       7.3       1      68 [.      19      79 ..      19     103 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 11.3 bits;  conditional E-value: 0.013
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCC CS
+        Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlk 68
+                           v+++g+G+ G+     A a+ L++ G eV +++ pg   +v +++g e+ ++     ++   + +++l+
+  sp|Q63CV4|ILVC2_BACCZ 19 VAVVGYGSQGH-----AQAQNLRDSGVEVVVGVRPGKSYEVaKADGFEVMSVSEA--VRT-AQVVQMLL 79
+                           67899999999.....669**********************99999998887766..222.24455554 PP
+
+>> sp|A4J179|ILVC_DESRM  Ketol-acid reductoisomerase OS=Desulfotomaculum reducens (strain MI-1) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.9   0.0    0.0084       4.7       1      68 [.      20      81 ..      20     107 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.9 bits;  conditional E-value: 0.0084
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCC CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlk 68
+                          ++++g+G+ G+     A a+ L++ G +V ++  ++ +++   e++gl++ +++   +++a  e ++ l+
+  sp|A4J179|ILVC_DESRM 20 IAVLGYGSQGH-----AQAQSLRDSGLDVVVGLRKDSARWSkaEADGLQVATVPDA-CAQA--EVIQVLL 81
+                          67899999999.....669********************9999**********999.7777..5555554 PP
+
+>> sp|Q9V030|PAAD_PYRAB  Probable aromatic acid decarboxylase OS=Pyrococcus abyssi GN=PYRAB09680 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.0   0.0    0.0039       2.2       1      55 [.       3      76 ..       3     127 .. 0.70
+
+  Alignments for each domain:
+  == domain 1    score: 13.0 bits;  conditional E-value: 0.0039
+                          EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE.----..................S CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp.igpd..................v 55
+                          vv+a+ G+ G ++  + l ++L++ GheV+ la++ g++    e+g+e++p    d                   
+  sp|Q9V030|PAAD_PYRAB  3 VVVAITGASGTIYG-IKLYETLRDLGHEVIlLASKTGIKVAKYETGIEVKPdFSEDelfapiasgsypfdamviA 76
+                          68888899998886.5699***********888888888877999999988544445666666666555555551 PP
+
+>> sp|Q81F27|ILVC2_BACCR  Ketol-acid reductoisomerase 2 OS=Bacillus cereus (strain ATCC 14579 / DSM 31) GN=ilvC2 PE=3 SV
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.2   0.1     0.014       7.7       1      54 [.      19      68 ..      19     104 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 11.2 bits;  conditional E-value: 0.014
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE---- CS
+        Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpd 54
+                           v+++g+G+ G+     A a+ L++ G eV +++ pg   +v +++g e+ ++   
+  sp|Q81F27|ILVC2_BACCR 19 VAVVGYGSQGH-----AQAQNLRDSGVEVVVGVRPGKSYEVaKADGFEVMSVSEA 68
+                           67899999999.....669**********************99999998877766 PP
+
+>> sp|Q03IJ9|ILVC_STRTD  Ketol-acid reductoisomerase OS=Streptococcus thermophilus (strain ATCC BAA-491 / LMD-9) GN=ilvC
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.4   0.0      0.05        28       1      52 [.      21      68 ..      21     117 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 9.4 bits;  conditional E-value: 0.05
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGH.HHHHH---EEEE-- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgle.efveeagleavpig 52
+                          ++++g+G+ G+     A  + L++ Gh+V++++ pg   ++ +e+g ++++++
+  sp|Q03IJ9|ILVC_STRTD 21 IAVIGYGSQGH-----AHSQNLRDTGHDVIIGVRPGKSfDKAKEDGFDTYTVA 68
+                          56778888888.....6789*************99743144466666666555 PP
+
+>> sp|Q9F0I7|ILVC_STRTR  Ketol-acid reductoisomerase OS=Streptococcus thermophilus GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.4   0.0      0.05        28       1      52 [.      21      68 ..      21     117 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 9.4 bits;  conditional E-value: 0.05
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGH.HHHHH---EEEE-- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgle.efveeagleavpig 52
+                          ++++g+G+ G+     A  + L++ Gh+V++++ pg   ++ +e+g ++++++
+  sp|Q9F0I7|ILVC_STRTR 21 IAVIGYGSQGH-----AHSQNLRDTGHDVIIGVRPGKSfDKAKEDGFDTYTVA 68
+                          56778888888.....6789*************99743144466666666555 PP
+
+>> sp|P26166|YBCC_RHOCA  Uncharacterized 20.5 kDa protein in bchF-crtJ intergenic region OS=Rhodobacter capsulatus PE=4 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.9   0.0    0.0082       4.6      14      90 ..      88     168 ..      83     184 .. 0.65
+
+  Alignments for each domain:
+  == domain 1    score: 11.9 bits;  conditional E-value: 0.0082
+                           HHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----....S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28  14 PavAlareLqrrGheVrlatppgleefv...eeagleavpigpd....vklwakleslktlkelaeglkalrkakeilkeakpd 90 
+                            a+ +a eL+rrG  Vr++  pgl +     +++  +a  i+++    v+  a  + +ktl++l +g + + ++  ++ +++++
+  sp|P26166|YBCC_RHOCA  88 GALIVAMELRRRGVSVRIVFAPGLSDLSrlmATTRFDAALITVGsmdrVEICA--KLVKTLSSLTKG-RMRVAIGGAIVSQRAE 168
+                           57889*****************9987644245555555556666666655555..336666666666.4444555555555555 PP
+
+>> sp|B8I1T8|ILVC_CLOCE  Ketol-acid reductoisomerase OS=Clostridium cellulolyticum (strain ATCC 35319 / DSM 5812 / JCM 6
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.2   0.1    0.0067       3.8       1      54 [.      20      70 ..      20     303 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 12.2 bits;  conditional E-value: 0.0067
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                          v+++g+G+ G+     A a+ L++ G +V+++ +p  +++   e++gl+a+  +  
+  sp|B8I1T8|ILVC_CLOCE 20 VAVIGYGSQGH-----AHAQNLKDSGVNVIVGLTPSSARRKqvEADGLKAYDTAEA 70
+                          67888999998.....88**************99998765444******9775544 PP
+
+>> sp|A4VXL3|ILVC_STRSY  Ketol-acid reductoisomerase OS=Streptococcus suis (strain 05ZYH33) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.0   0.0     0.066        37       1      35 [.      21      50 ..      21      90 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 9.0 bits;  conditional E-value: 0.066
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETG CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatpp 35
+                          ++++g+G+ G+     A a+ L++ Gh+V++++  
+  sp|A4VXL3|ILVC_STRSY 21 IAVIGYGSQGH-----AHAQNLRDTGHDVIIGVRA 50
+                          57888889888.....88**************976 PP
+
+>> sp|A4W3V8|ILVC_STRS2  Ketol-acid reductoisomerase OS=Streptococcus suis (strain 98HAH33) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.0   0.0     0.066        37       1      35 [.      21      50 ..      21      90 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 9.0 bits;  conditional E-value: 0.066
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETG CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatpp 35
+                          ++++g+G+ G+     A a+ L++ Gh+V++++  
+  sp|A4W3V8|ILVC_STRS2 21 IAVIGYGSQGH-----AHAQNLRDTGHDVIIGVRA 50
+                          57888889888.....88**************976 PP
+
+>> sp|Q3B594|ILVC_PELLD  Ketol-acid reductoisomerase OS=Pelodictyon luteolum (strain DSM 273) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   0.0    0.0079       4.4       1      59 [.      19      73 ..      19     116 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.0079
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwa 59
+                          ++++g+G+ G+     A a  L++ G +V+++  p+  +    +eagl ++p++  vk wa
+  sp|Q3B594|ILVC_PELLD 19 IAVLGYGSQGH-----AHALNLKDSGMNVCVGLRPDSSSCAkaREAGLRVEPVADAVK-WA 73
+                          67889999998.....7799*****************9998889********999833.33 PP
+
+>> sp|B1I8F2|MUTL_STRPI  DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain Hungary19A-6) GN=mutL PE=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.026        15      65     128 ..     203     266 ..     172     268 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.026
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128
+                           + l+++ +g  +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++  +   +l n+
+  sp|B1I8F2|MUTL_STRPI 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266
+                           56777788888999*************************************9988877776665 PP
+
+>> sp|B2IS10|MUTL_STRPS  DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain CGSP14) GN=mutL PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.026        15      65     128 ..     203     266 ..     172     268 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.026
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128
+                           + l+++ +g  +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++  +   +l n+
+  sp|B2IS10|MUTL_STRPS 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266
+                           56777788888999*************************************9988877776665 PP
+
+>> sp|B8ZKC9|MUTL_STRPJ  DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain ATCC 700669 / Spain 23F-1)
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.026        15      65     128 ..     203     266 ..     172     268 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.026
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128
+                           + l+++ +g  +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++  +   +l n+
+  sp|B8ZKC9|MUTL_STRPJ 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266
+                           56777788888999*************************************9988877776665 PP
+
+>> sp|P0A3R1|HEXB_STRPN  DNA mismatch repair protein hexB OS=Streptococcus pneumoniae GN=hexB PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.026        15      65     128 ..     203     266 ..     172     268 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.026
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128
+                           + l+++ +g  +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++  +   +l n+
+  sp|P0A3R1|HEXB_STRPN 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266
+                           56777788888999*************************************9988877776665 PP
+
+>> sp|P0A3R2|HEXB_STRR6  DNA mismatch repair protein hexB OS=Streptococcus pneumoniae (strain ATCC BAA-255 / R6) GN=hexB
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.026        15      65     128 ..     203     266 ..     172     268 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.026
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128
+                           + l+++ +g  +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++  +   +l n+
+  sp|P0A3R2|HEXB_STRR6 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266
+                           56777788888999*************************************9988877776665 PP
+
+>> sp|Q04MR4|MUTL_STRP2  DNA mismatch repair protein mutL OS=Streptococcus pneumoniae serotype 2 (strain D39 / NCTC 7466
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.026        15      65     128 ..     203     266 ..     172     268 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.026
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128
+                           + l+++ +g  +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++  +   +l n+
+  sp|Q04MR4|MUTL_STRP2 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266
+                           56777788888999*************************************9988877776665 PP
+
+>> sp|C1CI68|MUTL_STRZP  DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain P1031) GN=mutL PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.026        15      65     128 ..     203     266 ..     172     268 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.026
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128
+                           + l+++ +g  +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++  +   +l n+
+  sp|C1CI68|MUTL_STRZP 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266
+                           56777788888999*************************************9988877776665 PP
+
+>> sp|C1CP43|MUTL_STRZT  DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain Taiwan19F-14) GN=mutL PE=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.026        15      65     128 ..     203     266 ..     172     268 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.026
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128
+                           + l+++ +g  +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++  +   +l n+
+  sp|C1CP43|MUTL_STRZT 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266
+                           56777788888999*************************************9988877776665 PP
+
+>> sp|Q8ZQE4|MACB_SALTY  Macrolide export ATP-binding/permease protein macB OS=Salmonella typhimurium GN=macB PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.2     0.016       8.8      16      59 ..     184     248 ..     181     304 .. 0.61
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.016
+                           HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S---- CS
+       Glyco_transf_28  16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwa 59 
+                           +A+ r+L++rGh V+++t++ l +  +e+ +e++  ++                       ++w+
+  sp|Q8ZQE4|MACB_SALTY 184 MAILRQLRDRGHTVIIVTHDPLIAAQAERIIEIHDGKIVhnppaqekkreqgvdaavvntAPGWR 248
+                           89*****************9998888777777776444455666777777777777777655555 PP
+
+>> sp|Q57R58|MACB_SALCH  Macrolide export ATP-binding/permease protein macB OS=Salmonella choleraesuis GN=macB PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.2     0.016       8.8      16      59 ..     184     248 ..     181     304 .. 0.61
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.016
+                           HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S---- CS
+       Glyco_transf_28  16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwa 59 
+                           +A+ r+L++rGh V+++t++ l +  +e+ +e++  ++                       ++w+
+  sp|Q57R58|MACB_SALCH 184 MAILRQLRDRGHTVIIVTHDPLIAAQAERIIEIHDGKIVhnppaqekkreqgvdaavvntAPGWR 248
+                           89*****************9998888777777776444455666777777777777777655555 PP
+
+>> sp|Q64550|UD11_RAT  UDP-glucuronosyltransferase 1-1 OS=Rattus norvegicus GN=Ugt1a1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.3   0.0    0.0064       3.6      15      92 ..      45     123 ..      39     172 .. 0.71
+
+  Alignments for each domain:
+  == domain 1    score: 12.3 bits;  conditional E-value: 0.0064
+                         HHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHH CS
+     Glyco_transf_28  15 avAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkakeilkeakpdvv 92 
+                          + + ++Lq++GheV +++p++  +  e + ++++++++                 +++  ++++++   l ++ +++ + k d +
+  sp|Q64550|UD11_RAT  45 MLGVIQQLQQKGHEVVVIAPEASIHIKEGSFYTMRKYPVPfqnenvtaA-------FVELGRSVFDQDPFLLRVVKTYNKVKRDSS 123
+                         57899****************999999********99999665333330.......344444444444444444444444444444 PP
+
+>> sp|B9JCX4|GLYA_AGRRK  Serine hydroxymethyltransferase OS=Agrobacterium radiobacter (strain K84 / ATCC BAA-868) GN=gly
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.6   0.0     0.011         6      13     108 ..      20     116 ..      17     121 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.6 bits;  conditional E-value: 0.011
+                           HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS
+       Glyco_transf_28  13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 
+                           e + A+++eL r+ he++l+++++++++   e++g  +   ++ + +++++      ++++ae+  a+++ak+++  ++++v    g++
+  sp|B9JCX4|GLYA_AGRRK  20 EIFGAIGKELGRQRHEIELIASENIVSRAvlEAQGSIMTNkYAEGYPGKRYY-GGCQYVDIAEE-LAIERAKKLFGVNFANVQPNSGSQ 106
+                           66789*********************99887666655544577777888888.88889999999.999999999999999999999999 PP
+
+                           -EEEE--HHH CS
+       Glyco_transf_28  99 vadlaliaal 108
+                            + ++++a l
+  sp|B9JCX4|GLYA_AGRRK 107 MNQAVFLALL 116
+                           9988888765 PP
+
+>> sp|Q8Z824|MACB_SALTI  Macrolide export ATP-binding/permease protein macB OS=Salmonella typhi GN=macB PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.2     0.016       8.8      16      59 ..     184     248 ..     181     304 .. 0.61
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.016
+                           HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S---- CS
+       Glyco_transf_28  16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwa 59 
+                           +A+ r+L++rGh V+++t++ l +  +e+ +e++  ++                       ++w+
+  sp|Q8Z824|MACB_SALTI 184 MAILRQLRDRGHTVIIVTHDPLIAAQAERIIEIHDGKIVhnppaqekkreqgvdaavvntAPGWR 248
+                           89*****************9998888777777776444455666777777777777777655555 PP
+
+>> sp|O94475|YC67_SCHPO  Uncharacterized protein C1919.07 OS=Schizosaccharomyces pombe GN=SPCC1919.07 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.7   0.0    0.0047       2.7      43     134 ..      80     181 ..      70     185 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 12.7 bits;  conditional E-value: 0.0047
+                           H---EEEE----...........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EE.EE--HHHHHHHHHHHHHH CS
+       Glyco_transf_28  43 eagleavpigpd...........vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvad.laliaallagipanvaEq 119
+                            ++l+a+p+++             + ++  e ++ ++e  e  k+++++++ +  +kp+v ++ ++  +d + ++++  + +p+ ++E+
+  sp|O94475|YC67_SCHPO  80 YSKLQARPLTGLgisnqkpkskvRTIQR--EEVADMLESVEHEKSIQEFRKRYNVQKPKVNISHAEAEEDiDSFLESMDQSAPPSITED 166
+                           5566666644445667788877777888..7888999999999*******************9888776627899999*********** PP
+
+                           ----EEEEESSGGGS CS
+       Glyco_transf_28 120 ngipglvnkllprra 134
+                            g  +++  +++++ 
+  sp|O94475|YC67_SCHPO 167 KGENYISSNHSSMHI 181
+                           *********999976 PP
+
+>> sp|P59837|RDH12_BOVIN  Retinol dehydrogenase 12 OS=Bos taurus GN=RDH12 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    6.5   0.0      0.39   2.2e+02      19      73 ..      56     108 ..      53     136 .. 0.78
+   2 ?    4.4   0.0       1.7   9.7e+02      34      79 ..     211     265 ..     205     284 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 6.5 bits;  conditional E-value: 0.39
+                            HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHH CS
+        Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeg 73 
+                            areL rrG +V +a  + l+ + ++++++a + +++  l +kl  l+  k++ ++
+  sp|P59837|RDH12_BOVIN  56 ARELARRGARVYIACRDVLKGESAASEIQADTKNSQ-VLVRKL-DLSDTKSIRAF 108
+                            89****************************999999.555556.55555555544 PP
+
+  == domain 2    score: 4.4 bits;  conditional E-value: 1.7
+                            TGGGHHHHHH---EEEE----.............S------.-HHHCCSHHHHHHHHHH CS
+        Glyco_transf_28  34 ppgleefveeagleavpigpd.............vklwakleslktlkelaeglkalrk 79 
+                            +++l+++++ +g++++++ p+               lw+   ++ +lk+++eg  a  +
+  sp|P59837|RDH12_BOVIN 211 TRELAKRLKGTGVTTYAVHPGivrsklvrhsfllCLLWR--LFSPFLKTTWEG--AQTS 265
+                            688999***************************999999..79*********9..4444 PP
+
+>> sp|Q5PGK9|MACB_SALPA  Macrolide export ATP-binding/permease protein macB OS=Salmonella paratyphi A GN=macB PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.2     0.016       8.8      16      59 ..     184     248 ..     181     304 .. 0.61
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.016
+                           HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S---- CS
+       Glyco_transf_28  16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwa 59 
+                           +A+ r+L++rGh V+++t++ l +  +e+ +e++  ++                       ++w+
+  sp|Q5PGK9|MACB_SALPA 184 MAILRQLRDRGHTVIIVTHDPLIAAQAERIIEIHDGKIVhnppaqekkreqgvdaavvntAPGWR 248
+                           89*****************9998888777777776444455666777777777777777655555 PP
+
+>> sp|Q02CM4|ILVC_SOLUE  Ketol-acid reductoisomerase OS=Solibacter usitatus (strain Ellin6076) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.0   0.1     0.032        18       1      48 [.      20      64 ..      20      90 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 10.0 bits;  conditional E-value: 0.032
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48
+                          v+++g+G+ G+     A a  L++ G +V ++ p g +++   e+agl++
+  sp|Q02CM4|ILVC_SOLUE 20 VAIIGYGSQGH-----AHALNLRDSGVDVVVGLPAGSKSTAkaEAAGLKV 64
+                          57888888888.....7799*******************99989999975 PP
+
+>> sp|Q669P6|NPD_YERPS  NAD-dependent deacetylase OS=Yersinia pseudotuberculosis GN=npdA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.0     0.019        11       3      21 ..     208     226 ..     207     257 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.019
+                          EE-------HHHHHHHHHH CS
+      Glyco_transf_28   3 laggGTrGdvePavAlare 21 
+                          ++++GT G+v+Pa+ + +e
+  sp|Q669P6|NPD_YERPS 208 FISIGTSGHVYPAAGFVHE 226
+                          789**********998877 PP
+
+>> sp|Q8ZFR1|NPD_YERPE  NAD-dependent deacetylase OS=Yersinia pestis GN=npdA PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.0     0.019        11       3      21 ..     208     226 ..     207     257 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.019
+                          EE-------HHHHHHHHHH CS
+      Glyco_transf_28   3 laggGTrGdvePavAlare 21 
+                          ++++GT G+v+Pa+ + +e
+  sp|Q8ZFR1|NPD_YERPE 208 FISIGTSGHVYPAAGFVHE 226
+                          789**********998877 PP
+
+>> sp|B9KYS1|ILVC_THERP  Ketol-acid reductoisomerase OS=Thermomicrobium roseum (strain ATCC 27502 / DSM 5159 / P-2) GN=i
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.8   0.1     0.009       5.1       1      69 [.      20      82 ..      20      94 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.8 bits;  conditional E-value: 0.009
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCS CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlke 69
+                          v+++g+G+ G+     A a+ L++ G +V ++ ++g +++ +++   ++ ++p+ +++a+++ +++l++
+  sp|B9KYS1|ILVC_THERP 20 VAVLGYGSQGH-----AHAQNLRDSGVQVVVGLHEGSRSRERAKSDGFEVLTPR-EAAARGDIISMLMP 82
+                          67889999998.....88*********************996666667778888.88888888888776 PP
+
+>> sp|B4UAN4|ILVC_ANASK  Ketol-acid reductoisomerase OS=Anaeromyxobacter sp. (strain K) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.5   0.1     0.023        13       1      48 [.      20      64 ..      20     104 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 10.5 bits;  conditional E-value: 0.023
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48
+                          v+++g+G+ G+     A a  L++ G +Vr++   g +++   e agl +
+  sp|B4UAN4|ILVC_ANASK 20 VAIIGYGSQGH-----AHALNLRDSGVDVRVGLAAGSKSKAkaEGAGLRV 64
+                          57888888888.....7799**********66666666666448888765 PP
+
+>> sp|B8J829|ILVC_ANAD2  Ketol-acid reductoisomerase OS=Anaeromyxobacter dehalogenans (strain 2CP-1 / ATCC BAA-258) GN=i
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.5   0.1     0.023        13       1      48 [.      20      64 ..      20     103 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 10.5 bits;  conditional E-value: 0.023
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48
+                          v+++g+G+ G+     A a  L++ G +Vr++   g +++   e agl +
+  sp|B8J829|ILVC_ANAD2 20 VAIIGYGSQGH-----AHALNLRDSGVDVRVGLAAGSKSKAkaEGAGLRV 64
+                          57888888888.....7799**********66666666666448888765 PP
+
+>> sp|Q2IJB7|ILVC_ANADE  Ketol-acid reductoisomerase OS=Anaeromyxobacter dehalogenans (strain 2CP-C) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.5   0.1     0.023        13       1      48 [.      20      64 ..      20     103 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 10.5 bits;  conditional E-value: 0.023
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48
+                          v+++g+G+ G+     A a  L++ G +Vr++   g +++   e agl +
+  sp|Q2IJB7|ILVC_ANADE 20 VAIIGYGSQGH-----AHALNLRDSGVDVRVGLAAGSKSKAkaEGAGLRV 64
+                          57888888888.....7799**********66666666666448888765 PP
+
+>> sp|Q0RDI8|ILVC_FRAAA  Ketol-acid reductoisomerase OS=Frankia alni (strain ACN14a) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.8   0.1    0.0091       5.1       1      45 [.      20      59 ..      20      95 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 11.8 bits;  conditional E-value: 0.0091
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH-- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeag 45
+                          v+++g+G+ G+     A a  L++ G +Vr++ p + +++ ++a+
+  sp|Q0RDI8|ILVC_FRAAA 20 VAVIGYGSQGH-----AHALNLRDSGVDVRVGLPADSRSRAKAAE 59
+                          67888999998.....7799*******************995543 PP
+
+>> sp|P0ABQ0|COABC_ECOLI  Coenzyme A biosynthesis bifunctional protein coaBC OS=Escherichia coli (strain K12) GN=coaBC P
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.3   0.0     0.013       7.1      18      54 ..      24      61 ..      23     135 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 11.3 bits;  conditional E-value: 0.013
+                           HHHHHHH---EEEEEETGGGHHHHHH---EEEE.---- CS
+        Glyco_transf_28 18 lareLqrrGheVrlatppgleefveeagleavp.igpd 54
+                           l r+L++rG +Vr+a +++ ++f++   l+av+ +++ 
+  sp|P0ABQ0|COABC_ECOLI 24 LVRRLRDRGADVRVAMTEAAKAFITPLSLQAVSgYPVS 61
+                           689*********************98888888766655 PP
+
+>> sp|P0ABQ1|COABC_ECOL6  Coenzyme A biosynthesis bifunctional protein coaBC OS=Escherichia coli O6 GN=coaBC PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.3   0.0     0.013       7.1      18      54 ..      24      61 ..      23     135 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 11.3 bits;  conditional E-value: 0.013
+                           HHHHHHH---EEEEEETGGGHHHHHH---EEEE.---- CS
+        Glyco_transf_28 18 lareLqrrGheVrlatppgleefveeagleavp.igpd 54
+                           l r+L++rG +Vr+a +++ ++f++   l+av+ +++ 
+  sp|P0ABQ1|COABC_ECOL6 24 LVRRLRDRGADVRVAMTEAAKAFITPLSLQAVSgYPVS 61
+                           689*********************98888888766655 PP
+
+>> sp|B2J2U6|ILVC_NOSP7  Ketol-acid reductoisomerase OS=Nostoc punctiforme (strain ATCC 29133 / PCC 73102) GN=ilvC PE=3 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.9   0.0    0.0085       4.8       1      64 [.      20      76 ..      20     170 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 11.9 bits;  conditional E-value: 0.0085
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-H CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwaklesl 64
+                          ++++g+G+ G+     A a  L++ G +V+++  pg ++    e+agl++++++    ++a    +
+  sp|B2J2U6|ILVC_NOSP7 20 IAIIGYGSQGH-----AHALNLKDSGLNVIVGLYPGSKSVAkaEAAGLTVKSVADA-ANAA---DF 76
+                          57888888888.....7799****************9998888*********9998.3333...22 PP
+
+>> sp|Q89DG9|UVRC_BRAJA  UvrABC system protein C OS=Bradyrhizobium japonicum GN=uvrC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.5   0.0     0.011       6.4      14      73 ..     598     658 ..     597     665 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 11.5 bits;  conditional E-value: 0.011
+                           HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHHH CS
+       Glyco_transf_28  14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelaeg 73 
+                           P + + ++L+++ h+  ++++++l+++  +eagl+  p igp  + +a l++++tlke+ + 
+  sp|Q89DG9|UVRC_BRAJA 598 PVLYFIQRLRDEAHRFVIGSHRKLRKKDiREAGLQEIPgIGPS-RKRALLHHFGTLKEIERA 658
+                           6777899******************9988**************.999999******998775 PP
+
+>> sp|Q2S0M9|ILVC_SALRD  Ketol-acid reductoisomerase OS=Salinibacter ruber (strain DSM 13855) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.8   0.1     0.009       5.1       1      63 [.      17      73 ..      17     104 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 11.8 bits;  conditional E-value: 0.009
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakles 63
+                          v+++g+G+ G+     A a  L + G +V ++  pg  ++   e++gl++  ig    +w   + 
+  sp|Q2S0M9|ILVC_SALRD 17 VAVIGYGSQGH-----AHALNLHDSGVDVAVGLRPGSSSRPkaEQQGLTVMDIGEA-AAWG--DV 73
+                          67888899888.....7799*****************999999***********99.7777..33 PP
+
+>> sp|Q7NH80|ILVC_GLOVI  Ketol-acid reductoisomerase OS=Gloeobacter violaceus GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.9   0.0    0.0086       4.9       1      59 [.      22      76 ..      22     122 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 11.9 bits;  conditional E-value: 0.0086
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwa 59
+                          ++++g+G+ G+     A a  L++ G++V+++  +g +++   e++gl+++p +    ++a
+  sp|Q7NH80|ILVC_GLOVI 22 IAIVGYGSQGH-----AHALNLKDSGIDVIVGLYEGSRSWAraENEGLAVYPTAEA-AAKA 76
+                          67888999998.....7799********************99999****9887766.3333 PP
+
+>> sp|Q8G6V1|ILVC2_BIFLO  Ketol-acid reductoisomerase 2 OS=Bifidobacterium longum GN=ilvC2 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   0.1    0.0081       4.5       1      54 [.      21      71 ..      21     110 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.0081
+                           EEEE-------HHHHHHHHHHHHH---EEEEEETG..GGHHHHHH---EEEE---- CS
+        Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatpp..gleefveeagleavpigpd 54
+                           v+++g+G+ G+     A a  L++ G +V ++  p  + +ef +e+gle++p+g  
+  sp|Q8G6V1|ILVC2_BIFLO 21 VAILGYGSQGH-----AHALNLRDSGVDVVVGLRPtsKSVEFAKEQGLEVKPVGEA 71
+                           67889999998.....7799**********9998822467788**********987 PP
+
+>> sp|Q2W698|ENO_MAGSA  Enolase OS=Magnetospirillum magneticum (strain AMB-1 / ATCC 700264) GN=eno PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.2   0.0     0.059        33      15      53 ..     186     224 ..     183     275 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 9.2 bits;  conditional E-value: 0.059
+                          HHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE--- CS
+      Glyco_transf_28  15 avAlareLqrrGheVrlatppgleefveeagleavpigp 53 
+                          + Al ++L+++Gh+  ++ + g+++ +++a+++   i  
+  sp|Q2W698|ENO_MAGSA 186 FHALKKTLKDAGHNTNVGDEGGFAPNLKSAEMALDFIMK 224
+                          78*************************999998877655 PP
+
+>> sp|Q63GN3|MTNA1_BACCZ  Methylthioribose-1-phosphate isomerase 1 OS=Bacillus cereus (strain ZK / E33L) GN=mtnA1 PE=3 S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.7   0.0    0.0097       5.4      17      63 ..     202     247 ..     193     275 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.7 bits;  conditional E-value: 0.0097
+                            HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS
+        Glyco_transf_28  17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 
+                              a eLqr+G++V+++t  +++++v  + +++av +g+d +++a+++ 
+  sp|Q63GN3|MTNA1_BACCZ 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKVDAVIVGCD-RVAANGDV 247
+                            5699*********98875.67777779************.88887744 PP
+
+>> sp|B0JRP2|ILVC_MICAN  Ketol-acid reductoisomerase OS=Microcystis aeruginosa (strain NIES-843) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.7   0.0    0.0096       5.4       1      54 [.      20      70 ..      20     140 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 11.7 bits;  conditional E-value: 0.0096
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                          ++++g+G+ G+     A a  L++ G +V+++  pg ++ +  +eag++++ ++  
+  sp|B0JRP2|ILVC_MICAN 20 IAIIGYGSQGH-----AHALNLKDSGVNVIVGLYPGSKSAIkaKEAGIPVYDVAEA 70
+                          57888888888.....7799*********************999*****9888766 PP
+
+>> sp|C1CBX8|MUTL_STRZJ  DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain JJA) GN=mutL PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.027        15      65     128 ..     203     266 ..     173     268 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.027
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128
+                           + l+++ +g  +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++  +   +l n+
+  sp|C1CBX8|MUTL_STRZJ 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266
+                           56777788888999*************************************9988877776665 PP
+
+>> sp|Q3SLY0|BIOB_THIDA  Biotin synthase OS=Thiobacillus denitrificans (strain ATCC 25259) GN=bioB PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.7   0.0    0.0097       5.4      12      80 ..     114     184 ..     113     279 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 11.7 bits;  conditional E-value: 0.0097
+                           HHHHHHHHHHHHH---EEE..EE.ETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHH CS
+       Glyco_transf_28  12 vePavAlareLqrrGheVr..la.tppgleefveeagleavpigpdvklwakleslktlkelaeglkalrka 80 
+                           +eP +A+ re+++ G e +  l+  ++g +e+++eagl+++  ++d ++++    + t ++ +++l++l+++
+  sp|Q3SLY0|BIOB_THIDA 114 LEPVLAMVREVKALGLETCatLGmLKDGQAEQLKEAGLDYYNHNLD-TAPEFYGEIITTRDYQDRLDTLERV 184
+                           69*******************873578888899********99999.5554111222333333343334333 PP
+
+>> sp|B5E6C5|MUTL_STRP4  DNA mismatch repair protein mutL OS=Streptococcus pneumoniae serotype 19F (strain G54) GN=mutL 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.027        15      65     128 ..     203     266 ..     173     268 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.027
+                           HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS
+       Glyco_transf_28  65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128
+                           + l+++ +g  +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++  +   +l n+
+  sp|B5E6C5|MUTL_STRP4 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266
+                           56777788888999*************************************9988877776665 PP
+
+>> sp|B2J6I3|MURD_NOSP7  UDP-N-acetylmuramoylalanine--D-glutamate ligase OS=Nostoc punctiforme (strain ATCC 29133 / PCC 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.6   0.0     0.011         6      16      55 ..      14      60 ..      11     138 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.6 bits;  conditional E-value: 0.011
+                          HHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----......S CS
+       Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefv.eeagleavpigpd......v 55
+                          vA ar L+r+G+eV+l   +  ++ +  +++l+a++i+++      +
+  sp|B2J6I3|MURD_NOSP7 14 VAAARLLKREGWEVELSDGNTSKTLLqQQQELAAEQITVKlgqsleL 60
+                          899**********************************9994444440 PP
+
+>> sp|Q5LXV0|ILVC_STRT1  Ketol-acid reductoisomerase OS=Streptococcus thermophilus (strain CNRZ 1066) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.4   0.0      0.05        28       1      52 [.      21      68 ..      21     117 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 9.4 bits;  conditional E-value: 0.05
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGH.HHHHH---EEEE-- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgle.efveeagleavpig 52
+                          ++++g+G+ G+     A  + L++ Gh+V++++ pg   ++ +e+g ++++++
+  sp|Q5LXV0|ILVC_STRT1 21 IAVIGYGSQGH-----AHSQNLRDTGHDVIIGVRPGKSfDKAKEDGFDTYTVA 68
+                          56778888888.....6789*************99743144466666666555 PP
+
+>> sp|Q5M2F2|ILVC_STRT2  Ketol-acid reductoisomerase OS=Streptococcus thermophilus (strain ATCC BAA-250 / LMG 18311) GN=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.4   0.0      0.05        28       1      52 [.      21      68 ..      21     117 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 9.4 bits;  conditional E-value: 0.05
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGH.HHHHH---EEEE-- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgle.efveeagleavpig 52
+                          ++++g+G+ G+     A  + L++ Gh+V++++ pg   ++ +e+g ++++++
+  sp|Q5M2F2|ILVC_STRT2 21 IAVIGYGSQGH-----AHSQNLRDTGHDVIIGVRPGKSfDKAKEDGFDTYTVA 68
+                          56778888888.....6789*************99743144466666666555 PP
+
+>> sp|C6A5E6|VATD_THESM  V-type ATP synthase subunit D OS=Thermococcus sibiricus (strain MM 739 / DSM 12597) GN=atpD PE=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    3.2   0.0       4.1   2.3e+03      66     100 ..      13      47 ..       5      74 .. 0.79
+   2 ?    7.7   0.0      0.17        95      29      87 ..     104     160 ..      98     205 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 3.2 bits;  conditional E-value: 4.1
+                           HCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----E CS
+       Glyco_transf_28  66 tlkelaeglkalrkakeilkeakpdvvvgfggyva 100
+                           +l++l ++ k  +k  +ilke++++++++f + ++
+  sp|C6A5E6|VATD_THESM  13 ELLRLKRRIKLAEKGHKILKEKQDALIMEFFTIYD 47 
+                           678899999999***************99876544 PP
+
+  == domain 2    score: 7.7 bits;  conditional E-value: 0.17
+                           EEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28  29 Vrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 
+                           V l+  +g+++   e+g+++v+  p+v + a  e++++++el  +l +++++ + l+++
+  sp|C6A5E6|VATD_THESM 104 VPLIEAEGFRRDPYERGYAFVSTSPKVDVTA--ETFEEVLELVTRLAEIEETLKRLAKE 160
+                           557777899999999***********88888..99999999999988888888888765 PP
+
+>> sp|Q2RIS6|ILVC_MOOTA  Ketol-acid reductoisomerase OS=Moorella thermoacetica (strain ATCC 39073) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.2   0.0     0.014       7.7       1      67 [.      20      80 ..      20     103 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 11.2 bits;  conditional E-value: 0.014
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHC CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktl 67
+                          ++++g+G+ G+ +     a+ L++ G +V ++  p+ +++    +agle+++++    + a  + ++ l
+  sp|Q2RIS6|ILVC_MOOTA 20 IAVMGYGSQGHSQ-----AQNLKDSGLDVVVGLRPESKSRAaaQAAGLEVKTVAEA-AAEA--DIIQIL 80
+                          6789999999966.....9*********************998999***9999877.4444..445554 PP
+
+>> sp|Q3M859|THIOG_ANAVT  Bifunctional protein thiO/thiG OS=Anabaena variabilis (strain ATCC 29413 / PCC 7937) GN=thiO/t
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    8.0   0.0      0.13        74      87     135 ..     315     363 ..     291     366 .. 0.92
+
+  Alignments for each domain:
+  == domain 1    score: 8.0 bits;  conditional E-value: 0.13
+                            HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS
+        Glyco_transf_28  87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135
+                            +++++++++g y ++ +l   ++a i+ ++ Eq + p+l++++++r+ +
+  sp|Q3M859|THIOG_ANAVT 315 HCANLTLATGHYRNGILLAPITAALIADFIVEQKSDPLLSHFHYSRFQK 363
+                            6778999*************************************99865 PP
+
+>> sp|Q5GS59|RLME_WOLTR  Ribosomal RNA large subunit methyltransferase E OS=Wolbachia sp. subsp. Brugia malayi (strain T
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.3   0.0     0.013       7.4      24      93 ..      58     124 ..      54     128 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 11.3 bits;  conditional E-value: 0.013
+                           H---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28  24 rrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvv 93 
+                           ++G ++  l+++pg  ++v  ++g+++v+i+++   +   ++++ +k ++   ++l+ ++e +k++k dv++
+  sp|Q5GS59|RLME_WOLTR  58 QAGQKIVdLGASPGGWSQVaSQKGVKVVAIDIK---PV--NTISGVKYIQYDINELETLRERFKDQKFDVIL 124
+                           44444444*************************...66..99************************999875 PP
+
+>> sp|B8G7X1|ILVC_CHLAD  Ketol-acid reductoisomerase OS=Chloroflexus aggregans (strain MD-66 / DSM 9485) GN=ilvC PE=3 SV
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.7   0.1    0.0049       2.8       2      54 ..      21      70 ..      20     103 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 12.7 bits;  conditional E-value: 0.0049
+                          EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+       Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                          +++g+G+ G+     A ar L + G +Vr++  pg +++   eeagl++ +++  
+  sp|B8G7X1|ILVC_CHLAD 21 AIIGFGSQGH-----AHARNLADSGLDVRVGLYPGSKSWAkvEEAGLKVMTVAEA 70
+                          5667777776.....789********************9999******9888766 PP
+
+>> sp|C5C2I2|ILVC_BEUC1  Ketol-acid reductoisomerase OS=Beutenbergia cavernae (strain ATCC BAA-8 / DSM 12333 / NBRC 1643
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.1     0.016         9       1      52 [.      20      68 ..      20      98 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.016
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE-- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpig 52
+                          v+++g+G+ G+     A a  L++ G +Vr++  +g +++   e++gl++ +++
+  sp|C5C2I2|ILVC_BEUC1 20 VAVIGYGSQGH-----AHALNLRDSGVDVRVGLREGSASRAkaENEGLKVLTVP 68
+                          67888999998.....7799*******************998899999887665 PP
+
+>> sp|Q5SJ03|ILVC_THET8  Ketol-acid reductoisomerase OS=Thermus thermophilus (strain HB8 / ATCC 27634 / DSM 579) GN=ilvC
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.5   0.1     0.022        13       2      54 ..      20      69 ..      19     111 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 10.5 bits;  conditional E-value: 0.022
+                          EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+       Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                          +++g+G+ G+     A a  L++ G +Vr++  +g +++   e+agl + p++  
+  sp|Q5SJ03|ILVC_THET8 20 AVLGFGSQGH-----AHALNLKDSGVDVRVGLRKGSRSWEkaEAAGLRVLPVAEA 69
+                          6777777777.....7799******************99988999*999887765 PP
+
+>> sp|Q72JC8|ILVC_THET2  Ketol-acid reductoisomerase OS=Thermus thermophilus (strain HB27 / ATCC BAA-163 / DSM 7039) GN=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.5   0.1     0.022        13       2      54 ..      20      69 ..      19     111 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 10.5 bits;  conditional E-value: 0.022
+                          EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+       Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                          +++g+G+ G+     A a  L++ G +Vr++  +g +++   e+agl + p++  
+  sp|Q72JC8|ILVC_THET2 20 AVLGFGSQGH-----AHALNLKDSGVDVRVGLRKGSRSWEkaEAAGLRVLPVAEA 69
+                          6777777777.....7799******************99988999*999887765 PP
+
+>> sp|Q4JUN9|ILVC_CORJK  Ketol-acid reductoisomerase OS=Corynebacterium jeikeium (strain K411) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.0     0.019        11       1      49 [.      21      66 ..      21      97 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.019
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleav 49
+                          v+++g+G+ G+     A a+ L++ G eV ++  +g +++   eeag +++
+  sp|Q4JUN9|ILVC_CORJK 21 VAIIGYGSQGH-----AHAQNLRESGVEVVIGLREGSKSRAkaEEAGFTVK 66
+                          57888888888.....88**********************98888887765 PP
+
+>> sp|Q2J0X3|UVRC_RHOP2  UvrABC system protein C OS=Rhodopseudomonas palustris (strain HaA2) GN=uvrC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.3   0.0     0.013       7.5      14      72 ..     607     666 ..     606     672 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 11.3 bits;  conditional E-value: 0.013
+                           HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHH CS
+       Glyco_transf_28  14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelae 72 
+                           P + + ++L+++ h+  ++++++l+++  +eagl+  p igp  + +a l++++tlke+ +
+  sp|Q2J0X3|UVRC_RHOP2 607 PVLYFIQRLRDEAHRFVIGSHRKLRKKDiREAGLQEIPgIGPS-RKRALLHHFGTLKEIER 666
+                           6777899******************9988**************.9999999*****99876 PP
+
+>> sp|Q02YY8|ILVC_LACLS  Ketol-acid reductoisomerase OS=Lactococcus lactis subsp. cremoris (strain SK11) GN=ilvC PE=3 SV
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.2   0.0     0.028        16       1      36 [.      21      51 ..      21     101 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 10.2 bits;  conditional E-value: 0.028
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGG CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppg 36
+                          ++++g+G+ G+     A a+ L++ Gh+V++++  g
+  sp|Q02YY8|ILVC_LACLS 21 IAVIGYGSQGH-----AHAQNLRDSGHDVIIGVRQG 51
+                          57888899888.....88**************9765 PP
+
+>> sp|B9EBF4|ILVC_MACCJ  Ketol-acid reductoisomerase OS=Macrococcus caseolyticus (strain JCSC5402) GN=ilvC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.0     0.016       8.9       1      57 [.      20      70 ..      20     113 .. 0.72
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.016
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S-- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvkl 57
+                          ++++g+G+ G+     A a  L++ G++V +++ +g  ++  ee+g +a+ +     +
+  sp|B9EBF4|ILVC_MACCJ 20 IAVLGYGSQGH-----AHALNLKDSGYDVVIGVREGQSRTKaEEDGFQAYDVSEA--V 70
+                          67889999998.....7799***************9988888******9988777..2 PP
+
+>> sp|Q43716|UFOG_PETHY  Anthocyanidin 3-O-glucosyltransferase OS=Petunia hybrida GN=RT PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.6   0.0     0.011         6      10      43 ..      23      56 ..      21     167 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.6 bits;  conditional E-value: 0.011
+                          --HHHHHHHHHHHHH---EEEEEETGGGHHHHHH CS
+       Glyco_transf_28 10 GdvePavAlareLqrrGheVrlatppgleefvee 43
+                          G++ P+v la++L  +G +V + t  g +++v++
+  sp|Q43716|UFOG_PETHY 23 GHISPFVQLANKLSSYGVKVSFFTASGNASRVKS 56
+                          9********************9999988888865 PP
+
+>> sp|A5GUT4|SURE_SYNR3  5'-nucleotidase surE OS=Synechococcus sp. (strain RCC307) GN=surE PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.7   0.0    0.0099       5.6      15      56 ..      20      60 ..      18      99 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 11.7 bits;  conditional E-value: 0.0099
+                          HHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.----S- CS
+       Glyco_transf_28 15 avAlareLqrrGheVrlatppgleefveeagleavp.igpdvk 56
+                          + Ala+e  rrGh V+ +++p+ e+  + +gl+ ++ i ++ +
+  sp|A5GUT4|SURE_SYNR3 20 IKALAHEAARRGHSVT-VVCPDQERSATGHGLTLQSpIRAE-Q 60
+                          679************6.5789999999******98767777.3 PP
+
+>> sp|Q1ARE4|ILVC_RUBXD  Ketol-acid reductoisomerase OS=Rubrobacter xylanophilus (strain DSM 9941 / NBRC 16129) GN=ilvC 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.4   0.0     0.012       6.8       2      64 ..      20      76 ..      19     121 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.4 bits;  conditional E-value: 0.012
+                          EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-H CS
+       Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwaklesl 64
+                          +++g+G+ G+     A a  L++ G eV+++  +g +++   eeagl + +i+     wa  e +
+  sp|Q1ARE4|ILVC_RUBXD 20 AVLGFGSQGH-----AHALNLRDSGCEVTVGLYRGSASWPkaEEAGLRVAEIPET-VRWA--EVV 76
+                          6777777777.....7799********************999**********999.5555..333 PP
+
+>> sp|A6W7N6|ILVC_KINRD  Ketol-acid reductoisomerase OS=Kineococcus radiotolerans (strain ATCC BAA-149 / DSM 14245 / SRS
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.0   0.1     0.033        19       2      48 ..      21      64 ..      20     106 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 10.0 bits;  conditional E-value: 0.033
+                          EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS
+       Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48
+                          +++g+G+ G+     A a  L++ G +V ++ ++g +++   ee+gl++
+  sp|A6W7N6|ILVC_KINRD 21 AVLGFGSQGH-----AHALSLRDSGVDVVVGLKEGSKSRAkaEEQGLTV 64
+                          6777777777.....77999*******************9999999986 PP
+
+>> sp|Q11039|DEAD_MYCTU  Cold-shock DEAD box protein A homolog OS=Mycobacterium tuberculosis GN=deaD PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    7.1   0.0      0.25   1.4e+02      23      52 ..     129     158 ..     121     262 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 7.1 bits;  conditional E-value: 0.25
+                           HH---EEEEEETGGGHHHHHH---EEEE-- CS
+       Glyco_transf_28  23 qrrGheVrlatppgleefveeagleavpig 52 
+                            rrG +V ++tp ++ +++e a l+   ++
+  sp|Q11039|DEAD_MYCTU 129 LRRGAQVVVGTPGRMIDHLERATLDLSRVD 158
+                           59********************99887655 PP
+
+>> sp|Q13BM0|UVRC_RHOPS  UvrABC system protein C OS=Rhodopseudomonas palustris (strain BisB5) GN=uvrC PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.9   0.0     0.017       9.5      14      72 ..     607     666 ..     606     672 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 10.9 bits;  conditional E-value: 0.017
+                           HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHH CS
+       Glyco_transf_28  14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelae 72 
+                           P + + ++L+++ h+  ++++++l+++  +eagl+  p igp  + +a l++++tlke+ +
+  sp|Q13BM0|UVRC_RHOPS 607 PVLYFIQRLRDEAHRFVIGSHRKLRKKDiREAGLQEIPgIGPT-RKRALLHHFGTLKEIER 666
+                           6777899******************9988*********9****.9999999*****99876 PP
+
+>> sp|Q8YMT3|SURE_ANASP  5'-nucleotidase surE OS=Anabaena sp. (strain PCC 7120) GN=surE PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.9   0.0    0.0085       4.8      18     105 ..      19     127 ..      16     156 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 11.9 bits;  conditional E-value: 0.0085
+                           HHHHHHH---EEEEEETGGGHHHHHH---EEEE.----........................S------.-HHHCCSHHHHHHHHHHHH CS
+       Glyco_transf_28  18 lareLqrrGheVrlatppgleefveeagleavp.igpd........................vklwakleslktlkelaeglkalrkak 81 
+                           la++L ++Gh+V++ ++p+ e+  + +gl+ ++ i ++                        + lwa les+  l+    + ++ +  +
+  sp|Q8YMT3|SURE_ANASP  19 LANALAEAGHDVTV-VCPDRERSATGHGLTLHQpIRAEivesifhpaikawacdgtpsdcvkLALWALLESPPDLVLSGIN-QGANLGT 105
+                           89**********76.566777777******987699999999999998888888888888887777777777777666666.6667777 PP
+
+                           HHHHHHHHHHHHHC----EEEE-- CS
+       Glyco_transf_28  82 eilkeakpdvvvgfggyvadlali 105
+                           eil + +  v+++++g +++ ++i
+  sp|Q8YMT3|SURE_ANASP 106 EILYSGT--VSAAMEGMIEGIPSI 127
+                           7776666..666666666666655 PP
+
+>> sp|Q319M0|SURE_PROM9  5'-nucleotidase surE OS=Prochlorococcus marinus (strain MIT 9312) GN=surE PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.1   0.0     0.015       8.6      16      54 ..      20      58 ..      17     106 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 11.1 bits;  conditional E-value: 0.015
+                          HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.---- CS
+       Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefveeagleavp.igpd 54
+                           Ala+  q+rGh+V+ +++p+ e+  + +gl+ ++ + ++
+  sp|Q319M0|SURE_PROM9 20 RALAKSAQKRGHKVT-VVCPDQERSATGHGLTLQSpLRVE 58
+                          59************6.5788999999*****987645555 PP
+
+>> sp|A9VFD5|MTNA2_BACWK  Methylthioribose-1-phosphate isomerase 2 OS=Bacillus weihenstephanensis (strain KBAB4) GN=mtnA
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.9   0.0     0.017       9.9      19      66 ..     205     251 ..     203     300 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 10.9 bits;  conditional E-value: 0.017
+                            HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS
+        Glyco_transf_28  19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 
+                             +eL++++++V+l+t +  ++ +++++++a  +g+d +  +++++ ++
+  sp|A9VFD5|MTNA2_BACWK 205 TWELKQADIDVTLITDNTAAHAIRTKEINAIIVGAD-RIVENGDTANK 251
+                            59**********************************.55444444433 PP
+
+>> sp|A1JRP2|NADA_YERE8  Quinolinate synthase A OS=Yersinia enterocolitica serotype O:8 / biotype 1B (strain 8081) GN=na
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    3.4   0.0       3.5     2e+03      47     107 ..      15      73 ..       8      82 .. 0.84
+   2 ?    6.6   0.0      0.37   2.1e+02      85     132 ..     226     276 ..     191     278 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 3.4 bits;  conditional E-value: 3.5
+                           EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HH CS
+       Glyco_transf_28  47 eavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaa 107
+                           +a+p+++d  + +k +  +++k+l+++++a+  a +   ++  ++  ++gg+vad +  a 
+  sp|A1JRP2|NADA_YERE8  15 PARPVPLD--VDQKAFYREKIKTLLKQRDAVLVAHYYTDPEIQALAEETGGCVADSLEMAR 73 
+                           68888888..555558999********99999999999999999999*******9887665 PP
+
+  == domain 2    score: 6.6 bits;  conditional E-value: 0.37
+                           HHHHHHHHHH...C----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS
+       Glyco_transf_28  85 keakpdvvvg...fggyvadlaliaallagipanvaEqngipglvnkllpr 132
+                            +++p++vv+   ++g  + l++ a +l + +++va ++gi +++++++p 
+  sp|A1JRP2|NADA_YERE8 226 HPESPQAVVDmadAVGSTSQLIMAAKTLPQKKLIVATDRGIFYKMQQACPD 276
+                           555666665411157889**************************9999885 PP
+
+>> sp|A2RKQ6|ILVC_LACLM  Ketol-acid reductoisomerase OS=Lactococcus lactis subsp. cremoris (strain MG1363) GN=ilvC PE=3 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.0   0.0     0.032        18       1      36 [.      21      51 ..      21     101 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 10.0 bits;  conditional E-value: 0.032
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGG CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppg 36
+                          ++++g+G+ G+     A a+ L++ Gh+V++++  g
+  sp|A2RKQ6|ILVC_LACLM 21 IAVIGYGSQGH-----AHAQNLRDSGHDVIIGVRQG 51
+                          57888899888.....88**************9765 PP
+
+>> sp|Q32DZ9|MACB_SHIDS  Macrolide export ATP-binding/permease protein macB OS=Shigella dysenteriae serotype 1 (strain S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.1     0.019        11      16     110 ..     184     298 ..     181     304 .. 0.65
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.019
+                           HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S------.-HHHCCSHHHH.H..HHHHHH CS
+       Glyco_transf_28  16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwakleslktlkelaeg.l..kalrka 80 
+                           +A+ ++L++rGh V+++t++  ++  +e+ +e++  ++                      v +w+  ++++ + e++   +   a +k+
+  sp|Q32DZ9|MACB_SHIDS 184 MAILHQLRDRGHTVIIVTHDPQVAAQAERVIEIRDGEIVrnppaidkvnvaggtepvvntVSGWR--QFVSGFNEALTMaWraLAANKM 270
+                           8999***************9999988888888887555555788888888888888888877777..3344443333330200333333 PP
+
+                           HHHHHHHHHHHHHHC----EEEE--HHHHH CS
+       Glyco_transf_28  81 keilkeakpdvvvgfggyvadlaliaalla 110
+                           +++l +    +++g+++ v+ ++++ a+++
+  sp|Q32DZ9|MACB_SHIDS 271 RTLLTMLG--IIIGIASVVSIVVVGDAAKQ 298
+                           33333333..66666666666666666655 PP
+
+>> sp|A5CPY6|ILVC_CLAM3  Ketol-acid reductoisomerase OS=Clavibacter michiganensis subsp. michiganensis (strain NCPPB 382
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.1     0.018        10       1      59 [.      20      74 ..      20     109 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.018
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwa 59
+                          v+++g+G+ G+     A a  L++ G eV ++ ++g +++   ee+g ++ + ++d  +wa
+  sp|A5CPY6|ILVC_CLAM3 20 VAVIGYGSQGH-----AHALNLRDSGVEVVIGLKEGSTSRAkaEEQGFTV-KTPSDASAWA 74
+                          67888999998.....7799********************9956666555.5555546666 PP
+
+>> sp|B0RIN6|ILVC_CLAMS  Ketol-acid reductoisomerase OS=Clavibacter michiganensis subsp. sepedonicus (strain ATCC 33113 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.1     0.018        10       1      59 [.      20      74 ..      20     109 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.018
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S---- CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwa 59
+                          v+++g+G+ G+     A a  L++ G eV ++ ++g +++   ee+g ++ + ++d  +wa
+  sp|B0RIN6|ILVC_CLAMS 20 VAVIGYGSQGH-----AHALNLRDSGVEVVIGLKEGSTSRAkaEEQGFTV-KTPSDASAWA 74
+                          67888999998.....7799********************9956666555.5555546666 PP
+
+>> sp|Q8K5J6|MUTL_STRP3  DNA mismatch repair protein mutL OS=Streptococcus pyogenes serotype M3 GN=mutL PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.4   0.0     0.024        14      57     127 ..     196     265 ..     158     268 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 10.4 bits;  conditional E-value: 0.024
+                           -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                           l +     + l+++ +g  +l+ +k+ l+  ++d+++++ gyv+++ l+ a++++  + v+  +   +l n
+  sp|Q8K5J6|MUTL_STRP3 196 LTQTS-GTGDLRQAIAGIYGLNTTKKMLAISNADLDFEVSGYVSLPELTRANRNYMTILVNGRYIKNFLLN 265
+                           55544.567788888999999**********************************9999988877666666 PP
+
+>> sp|Q99XN7|MUTL_STRP1  DNA mismatch repair protein mutL OS=Streptococcus pyogenes serotype M1 GN=mutL PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.4   0.0     0.024        14      57     127 ..     196     265 ..     158     268 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 10.4 bits;  conditional E-value: 0.024
+                           -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                           l +     + l+++ +g  +l+ +k+ l+  ++d+++++ gyv+++ l+ a++++  + v+  +   +l n
+  sp|Q99XN7|MUTL_STRP1 196 LTQTS-GTGDLRQAIAGIYGLNTTKKMLAISNADLDFEVSGYVSLPELTRANRNYMTILVNGRYIKNFLLN 265
+                           55544.567788888999999**********************************9999988877666666 PP
+
+>> sp|B5XJ09|MUTL_STRPZ  DNA mismatch repair protein mutL OS=Streptococcus pyogenes serotype M49 (strain NZ131) GN=mutL 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.4   0.0     0.024        14      57     127 ..     196     265 ..     158     268 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 10.4 bits;  conditional E-value: 0.024
+                           -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                           l +     + l+++ +g  +l+ +k+ l+  ++d+++++ gyv+++ l+ a++++  + v+  +   +l n
+  sp|B5XJ09|MUTL_STRPZ 196 LTQTS-GTGDLRQAIAGIYGLNTTKKMLAISNADLDFEVSGYVSLPELTRANRNYMTILVNGRYIKNFLLN 265
+                           55544.567788888999999**********************************9999988877666666 PP
+
+>> sp|A2RGV3|MUTL_STRPG  DNA mismatch repair protein mutL OS=Streptococcus pyogenes serotype M5 (strain Manfredo) GN=mut
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.4   0.0     0.024        14      57     127 ..     196     265 ..     158     268 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 10.4 bits;  conditional E-value: 0.024
+                           -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                           l +     + l+++ +g  +l+ +k+ l+  ++d+++++ gyv+++ l+ a++++  + v+  +   +l n
+  sp|A2RGV3|MUTL_STRPG 196 LTQTS-GTGDLRQAIAGIYGLNTTKKMLAISNADLDFEVSGYVSLPELTRANRNYMTILVNGRYIKNFLLN 265
+                           55544.567788888999999**********************************9999988877666666 PP
+
+>> sp|Q5X9H5|MUTL_STRP6  DNA mismatch repair protein mutL OS=Streptococcus pyogenes serotype M6 GN=mutL PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.4   0.0     0.024        14      57     127 ..     196     265 ..     158     268 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 10.4 bits;  conditional E-value: 0.024
+                           -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS
+       Glyco_transf_28  57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127
+                           l +     + l+++ +g  +l+ +k+ l+  ++d+++++ gyv+++ l+ a++++  + v+  +   +l n
+  sp|Q5X9H5|MUTL_STRP6 196 LTQTS-GTGDLRQAIAGIYGLNTTKKMLAISNADLDFEVSGYVSLPELTRANRNYMTILVNGRYIKNFLLN 265
+                           55544.567788888999999**********************************9999988877666666 PP
+
+>> sp|Q3JYM6|MUTL_STRA1  DNA mismatch repair protein mutL OS=Streptococcus agalactiae serotype Ia GN=mutL PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.0     0.019        11      63     125 ..     201     263 ..     168     268 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.019
+                           -HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EE CS
+       Glyco_transf_28  63 slktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipgl 125
+                             + l+++ +g  +l+ ak+ ++  ++d+++++ gyv+++ l+ a++++i + ++  +   +l
+  sp|Q3JYM6|MUTL_STRA1 201 GTGDLRQAIAGIYGLNTAKKMIEISNADLDFEISGYVSLPELTRANRNYITLLINGRYIKNFL 263
+                           566788888999999***********************************9999877766655 PP
+
+>> sp|Q8E2R5|MUTL_STRA3  DNA mismatch repair protein mutL OS=Streptococcus agalactiae serotype III GN=mutL PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.0     0.019        11      63     125 ..     201     263 ..     168     268 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.019
+                           -HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EE CS
+       Glyco_transf_28  63 slktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipgl 125
+                             + l+++ +g  +l+ ak+ ++  ++d+++++ gyv+++ l+ a++++i + ++  +   +l
+  sp|Q8E2R5|MUTL_STRA3 201 GTGDLRQAIAGIYGLNTAKKMIEISNADLDFEISGYVSLPELTRANRNYITLLINGRYIKNFL 263
+                           566788888999999***********************************9999877766655 PP
+
+>> sp|Q9MB73|LGT_CITUN  Limonoid UDP-glucosyltransferase OS=Citrus unshiu PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.6   0.0     0.021        12       1      54 [.       9      63 ..       9     141 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 10.6 bits;  conditional E-value: 0.021
+                         EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE---- CS
+      Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpd 54
+                         v+l++++  G+v P++ l+r L  +G   +l tp+ + ++  ++ + +++p +++
+  sp|Q9MB73|LGT_CITUN  9 VLLVSFPGHGHVNPLLRLGRLLASKGFFLTLTTPESFGKQMrKAGNFTYEPTPVG 63
+                         68999999*********************************55555677776655 PP
+
+>> sp|A8G678|SURE_PROM2  5'-nucleotidase surE OS=Prochlorococcus marinus (strain MIT 9215) GN=surE PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.0      0.02        11      17      54 ..      21      58 ..      18     136 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.02
+                          HHHHHHHH---EEEEEETGGGHHHHHH---EEEE.---- CS
+       Glyco_transf_28 17 AlareLqrrGheVrlatppgleefveeagleavp.igpd 54
+                          Ala+  q+rGh+V++ ++p+ e+  + +gl+ ++ + ++
+  sp|A8G678|SURE_PROM2 21 ALAKSAQKRGHKVKV-VCPDQERSATGHGLTLQSpLRVE 58
+                          9************96.67888888899999987645555 PP
+
+>> sp|A9WP08|ILVC_RENSM  Ketol-acid reductoisomerase OS=Renibacterium salmoninarum (strain ATCC 33209 / DSM 20767 / IFO 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.5   0.5     0.046        26       1      48 [.      20      64 ..      20     104 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 9.5 bits;  conditional E-value: 0.046
+                          EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS
+       Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48
+                          v+++g+G+ G+     A a  L++ G +Vr++  +g  ++   e++gl +
+  sp|A9WP08|ILVC_RENSM 20 VAVIGYGSQGH-----AHALSLRDSGVDVRVGLAEGSQSRAkaEAEGLRV 64
+                          67888999998.....77999*********99999999998878888876 PP
+
+>> sp|A9WC26|ILVC_CHLAA  Ketol-acid reductoisomerase OS=Chloroflexus aurantiacus (strain ATCC 29366 / DSM 635 / J-10-fl)
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.9   0.1    0.0085       4.8       2      54 ..      21      70 ..      20     102 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 11.9 bits;  conditional E-value: 0.0085
+                          EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+       Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                          +++g+G+ G+     A ar L + G +Vr++  pg +++   e+agl++ +++  
+  sp|A9WC26|ILVC_CHLAA 21 AIIGFGSQGH-----AHARNLADSGLDVRVGLYPGSKSWAkvEAAGLKVMTVAEA 70
+                          5667777776.....789********************9999*****99887766 PP
+
+>> sp|B9LGM7|ILVC_CHLSY  Ketol-acid reductoisomerase OS=Chloroflexus aurantiacus (strain ATCC 29364 / DSM 637 / Y-400-fl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.9   0.1    0.0085       4.8       2      54 ..      21      70 ..      20     102 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 11.9 bits;  conditional E-value: 0.0085
+                          EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS
+       Glyco_transf_28  2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54
+                          +++g+G+ G+     A ar L + G +Vr++  pg +++   e+agl++ +++  
+  sp|B9LGM7|ILVC_CHLSY 21 AIIGFGSQGH-----AHARNLADSGLDVRVGLYPGSKSWAkvEAAGLKVMTVAEA 70
+                          5667777776.....789********************9999*****99887766 PP
+
+>> sp|A2BSJ2|SURE_PROMS  5'-nucleotidase surE OS=Prochlorococcus marinus (strain AS9601) GN=surE PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.0      0.02        12      17      53 ..      21      57 ..      18     150 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.02
+                          HHHHHHHH---EEEEEETGGGHHHHHH---EEEE.--- CS
+       Glyco_transf_28 17 AlareLqrrGheVrlatppgleefveeagleavp.igp 53
+                          Ala+  q+rGh+V++ ++p+ e+  + +gl+ ++ + +
+  sp|A2BSJ2|SURE_PROMS 21 ALAKSAQKRGHKVKV-VCPDQERSATGHGLTLQSpLRV 57
+                          9************96.6788888889999998754554 PP
+
+>> sp|Q9LR44|IABG1_ARATH  Indole-3-acetate beta-glucosyltransferase 1 OS=Arabidopsis thaliana GN=UGT75B1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.026        15       1      32 [.       6      38 ..       6      43 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.026
+                           EEEE-------HHHHHHHHHHHHH-.--EEEEE CS
+        Glyco_transf_28  1 vvlaggGTrGdvePavAlareLqrr.GheVrla 32
+                           ++l+++++ G+v P++ +ar+L +r G +V+++
+  sp|Q9LR44|IABG1_ARATH  6 FLLVTFPAQGHVNPSLRFARRLIKRtGARVTFV 38
+                           79********************87646777655 PP
+
+>> sp|O57731|VATD_PYRHO  V-type ATP synthase subunit D OS=Pyrococcus horikoshii GN=atpD PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.0   0.1     0.068        38      26      86 ..     101     159 ..      80     170 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 9.0 bits;  conditional E-value: 0.068
+                           --EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS
+       Glyco_transf_28  26 GheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 
+                           G +V l+  p+l+++  e+g+++v+ ++ v  +a  e++++++ela +l +++++ + l +
+  sp|O57731|VATD_PYRHO 101 GVRVPLIEVPELKRKASERGYAFVSTTSTVDMAA--EKFEEVLELAIRLAEVEESLKRLGK 159
+                           556669999*******************988999..99**********8888888887765 PP
+
+>> sp|A3PEA4|SURE_PROM0  5'-nucleotidase surE OS=Prochlorococcus marinus (strain MIT 9301) GN=surE PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.0     0.027        15      17      50 ..      21      53 ..      18     102 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.027
+                          HHHHHHHH---EEEEEETGGGHHHHHH---EEEE CS
+       Glyco_transf_28 17 AlareLqrrGheVrlatppgleefveeagleavp 50
+                          Ala+  q+rGh+V++ ++p+ e+  + +gl+ ++
+  sp|A3PEA4|SURE_PROM0 21 ALAKSAQKRGHKVKV-VCPDQERSATGHGLTLQS 53
+                          9************96.678888888999999875 PP
+
+>> sp|P75831|MACB_ECOLI  Macrolide export ATP-binding/permease protein macB OS=Escherichia coli (strain K12) GN=macB PE=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.1     0.019        11      16     110 ..     184     298 ..     181     304 .. 0.65
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.019
+                           HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S------.-HHHCCSHHHH.H..HHHHHH CS
+       Glyco_transf_28  16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwakleslktlkelaeg.l..kalrka 80 
+                           +A+ ++L++rGh V+++t++  ++  +e+ +e++  ++                      v +w+  ++++ + e++   +   a +k+
+  sp|P75831|MACB_ECOLI 184 MAILHQLRDRGHTVIIVTHDPQVAAQAERVIEIRDGEIVrnppaiekvnvtggtepvvntVSGWR--QFVSGFNEALTMaWraLAANKM 270
+                           8999***************9999988888888887555556788888888888888888877777..3344443333330200333333 PP
+
+                           HHHHHHHHHHHHHHC----EEEE--HHHHH CS
+       Glyco_transf_28  81 keilkeakpdvvvgfggyvadlaliaalla 110
+                           +++l +    +++g+++ v+ ++++ a+++
+  sp|P75831|MACB_ECOLI 271 RTLLTMLG--IIIGIASVVSIVVVGDAAKQ 298
+                           33333333..66666666666666666655 PP
+
+>> sp|Q83LR7|MACB_SHIFL  Macrolide export ATP-binding/permease protein macB OS=Shigella flexneri GN=macB PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.1      0.02        11      16     110 ..     184     298 ..     181     304 .. 0.65
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.02
+                           HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S------.-HHHCCSHHHH.H..HHHHHH CS
+       Glyco_transf_28  16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwakleslktlkelaeg.l..kalrka 80 
+                           +A+ ++L++rGh V+++t++  ++  +e+ +e++  ++                      v +w+  ++++ + e++   +   a +k+
+  sp|Q83LR7|MACB_SHIFL 184 MAILHQLRDRGHTVIIVTHDPQVAAQAERVIEIRDGEIVrnppaiekvnvaggtepvvntVSGWR--QFVSGFNEALTMaWraLAANKM 270
+                           8999***************9999988888888887555556788888888888888888877777..3344443333330200333333 PP
+
+                           HHHHHHHHHHHHHHC----EEEE--HHHHH CS
+       Glyco_transf_28  81 keilkeakpdvvvgfggyvadlaliaalla 110
+                           +++l +    +++g+++ v+ ++++ a+++
+  sp|Q83LR7|MACB_SHIFL 271 RTLLTMLG--IIIGIASVVSIVVVGDAAKQ 298
+                           33333333..66666666666666666655 PP
+
+>> sp|Q3Z3Q4|MACB_SHISS  Macrolide export ATP-binding/permease protein macB OS=Shigella sonnei (strain Ss046) GN=macB PE
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.1      0.02        11      16     110 ..     184     298 ..     181     304 .. 0.65
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.02
+                           HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S------.-HHHCCSHHHH.H..HHHHHH CS
+       Glyco_transf_28  16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwakleslktlkelaeg.l..kalrka 80 
+                           +A+ ++L++rGh V+++t++  ++  +e+ +e++  ++                      v +w+  ++++ + e++   +   a +k+
+  sp|Q3Z3Q4|MACB_SHISS 184 MAILHQLRDRGHTVIIVTHDPQVAAQAERVIEIRDGEIVrnppaiekvnvaggtepvvntVSGWR--QFVSGFNEALTMaWraLAANKM 270
+                           8999***************9999988888888887555556788888888888888888877777..3344443333330200333333 PP
+
+                           HHHHHHHHHHHHHHC----EEEE--HHHHH CS
+       Glyco_transf_28  81 keilkeakpdvvvgfggyvadlaliaalla 110
+                           +++l +    +++g+++ v+ ++++ a+++
+  sp|Q3Z3Q4|MACB_SHISS 271 RTLLTMLG--IIIGIASVVSIVVVGDAAKQ 298
+                           33333333..66666666666666666655 PP
+
+>> sp|Q8XED0|MACB_ECO57  Macrolide export ATP-binding/permease protein macB OS=Escherichia coli O157:H7 GN=macB PE=3 SV=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.2   0.1     0.029        16      15     108 ..     183     296 ..     180     304 .. 0.59
+
+  Alignments for each domain:
+  == domain 1    score: 10.2 bits;  conditional E-value: 0.029
+                           HHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S------.-HHHCCSHHHH.H..HHHHH CS
+       Glyco_transf_28  15 avAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwakleslktlkelaeg.l..kalrk 79 
+                            +A+ ++L++rGh V+++t++  ++  +e+ +e++  ++                        +w+  ++++ + e++   +   a +k
+  sp|Q8XED0|MACB_ECO57 183 VMAILHQLRDRGHTVIIVTHDPQVAAQAERVIEIRDGEIVrnppaiekvnvaggtepvvntASGWR--QFVSGFNEALTMaWraLAANK 269
+                           5899****************9888888888777776444455677777777777777777744444..222222222222010033333 PP
+
+                           HHHHHHHHHHHHHHHC----EEEE--HHH CS
+       Glyco_transf_28  80 akeilkeakpdvvvgfggyvadlaliaal 108
+                           ++++l +    +++g+++ v+ ++++ a+
+  sp|Q8XED0|MACB_ECO57 270 MRTLLTMLG--IIIGIASVVSIVVVGDAA 296
+                           333333333..555555555555555555 PP
+
+
+
+Internal pipeline statistics summary:
+-------------------------------------
+Query model(s):                            1  (139 nodes)
+Target sequences:                     516081  (181677051 residues)
+Passed MSV filter:                     24810  (0.0480738); expected 10321.6 (0.02)
+Passed bias filter:                    19491  (0.0377673); expected 10321.6 (0.02)
+Passed Vit filter:                      3048  (0.00590605); expected 516.1 (0.001)
+Passed Fwd filter:                       917  (0.00177685); expected 5.2 (1e-05)
+Initial search space (Z):             516081  [actual number of targets]
+Domain search space  (domZ):             916  [number of targets reported over threshold]
+# CPU time: 6.72u 0.07s 00:00:06.79 Elapsed: 00:00:02.00
+# Mc/sec: 12563.74
+//
diff --git a/demotic/examples/example.ncbi-blastp.out b/demotic/examples/example.ncbi-blastp.out
new file mode 100644
index 0000000..26b75ef
--- /dev/null
+++ b/demotic/examples/example.ncbi-blastp.out
@@ -0,0 +1,437 @@
+BLASTP 2.2.22 [Sep-27-2009]
+
+
+Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, 
+Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), 
+"Gapped BLAST and PSI-BLAST: a new generation of protein database search
+programs",  Nucleic Acids Res. 25:3389-3402.
+
+Reference for compositional score matrix adjustment: Altschul, Stephen F., 
+John C. Wootton, E. Michael Gertz, Richa Agarwala, Aleksandr Morgulis,
+Alejandro A. Schaffer, and Yi-Kuo Yu (2005) "Protein database searches
+using compositionally adjusted substitution matrices", FEBS J. 272:5101-5109.
+
+Query= sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium
+sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1
+         (181 letters)
+
+Database: uniprot_sprot.fasta 
+           516,081 sequences; 181,677,051 total letters
+
+Searching..................................................done
+
+
+
+                                                                 Score    E
+Sequences producing significant alignments:                      (bits) Value
+
+sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium s...   325   1e-88
+sp|B2VCH7|MTLD_ERWT9 Mannitol-1-phosphate 5-dehydrogenase OS=Erw...    31   3.8  
+sp|Q9CZP0|UFSP1_MOUSE Ufm1-specific protease 1 OS=Mus musculus G...    30   7.3  
+
+>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp.
+           (strain NGR234) GN=NGR_a00980 PE=4 SV=1
+          Length = 181
+
+ Score =  325 bits (832), Expect = 1e-88,   Method: Compositional matrix adjust.
+ Identities = 163/181 (90%), Positives = 163/181 (90%)
+
+Query: 1   MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT 60
+           MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT
+Sbjct: 1   MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT 60
+
+Query: 61  TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF 120
+           TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF
+Sbjct: 61  TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF 120
+
+Query: 121 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSXXXXXXXXXXXXXXXXXXSRP 180
+           AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERS                  SRP
+Sbjct: 121 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP 180
+
+Query: 181 N 181
+           N
+Sbjct: 181 N 181
+
+
+>sp|B2VCH7|MTLD_ERWT9 Mannitol-1-phosphate 5-dehydrogenase
+          OS=Erwinia tasmaniensis (strain DSM 17950 / Et1/99)
+          GN=mtlD PE=3 SV=1
+          Length = 382
+
+ Score = 31.2 bits (69), Expect = 3.8,   Method: Compositional matrix adjust.
+ Identities = 17/52 (32%), Positives = 32/52 (61%), Gaps = 6/52 (11%)
+
+Query: 42 GKMAEIDAILITDVNGIGTTADDQLAFVSLIADQGETTTVAFGPEIGSRIAA 93
+          G+ A+I+  ++  VN + +++DD +A ++ +    +  T A GP+I  RIAA
+Sbjct: 52 GEQAQIE--IVNGVNAVHSSSDDIIALIAEV----DIVTTAVGPQILERIAA 97
+
+
+>sp|Q9CZP0|UFSP1_MOUSE Ufm1-specific protease 1 OS=Mus musculus
+           GN=Ufsp1 PE=1 SV=1
+          Length = 217
+
+ Score = 30.0 bits (66), Expect = 7.3,   Method: Compositional matrix adjust.
+ Identities = 15/44 (34%), Positives = 22/44 (50%)
+
+Query: 111 GKEERKFKPFAAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFI 154
+           G+EER +  F   G  V  G  AD  +  +L I    G+EV+ +
+Sbjct: 129 GEEERLYSHFTTGGGPVMVGGDADAQSKALLGICEGPGSEVYVL 172
+
+
+BLASTP 2.2.22 [Sep-27-2009]
+
+
+Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, 
+Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), 
+"Gapped BLAST and PSI-BLAST: a new generation of protein database search
+programs",  Nucleic Acids Res. 25:3389-3402.
+
+Reference for compositional score matrix adjustment: Altschul, Stephen F., 
+John C. Wootton, E. Michael Gertz, Richa Agarwala, Aleksandr Morgulis,
+Alejandro A. Schaffer, and Yi-Kuo Yu (2005) "Protein database searches
+using compositionally adjusted substitution matrices", FEBS J. 272:5101-5109.
+
+Query= sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA
+OS=Aspergillus oryzae GN=hacA PE=2 SV=1
+         (345 letters)
+
+Database: uniprot_sprot.fasta 
+           516,081 sequences; 181,677,051 total letters
+
+Searching..................................................done
+
+
+
+                                                                 Score    E
+Sequences producing significant alignments:                      (bits) Value
+
+sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergill...   602   e-171
+sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Emericell...   416   e-115
+sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Trichoder...    84   2e-15
+sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS=Saccharom...    58   1e-07
+sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidopsis thal...    41   0.010
+sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum lycopers...    38   0.12 
+sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding prot...    34   1.5  
+sp|A1URL3|PYRD_BARBK Dihydroorotate dehydrogenase OS=Bartonella ...    34   1.6  
+sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding prot...    34   1.9  
+sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding prot...    33   2.1  
+sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding protei...    33   2.6  
+sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding prot...    33   2.9  
+sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arabidopsis...    32   5.7  
+sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos taurus GN=XB...    32   5.8  
+sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding protei...    32   9.0  
+sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding prot...    32   9.3  
+
+>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus
+           oryzae GN=hacA PE=2 SV=1
+          Length = 345
+
+ Score =  602 bits (1552), Expect = e-171,   Method: Compositional matrix adjust.
+ Identities = 303/345 (87%), Positives = 303/345 (87%)
+
+Query: 1   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVXXXXXXXXXXXXSWG 60
+           MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV            SWG
+Sbjct: 1   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG 60
+
+Query: 61  QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQ 120
+           QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS               IQMEQ
+Sbjct: 61  QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 120
+
+Query: 121 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMXXXXXXXXXXXXXXXFKQERD 180
+           QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM               FKQERD
+Sbjct: 121 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD 180
+
+Query: 181 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK 240
+           ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK
+Sbjct: 181 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK 240
+
+Query: 241 HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS 300
+           HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS
+Sbjct: 241 HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS 300
+
+Query: 301 EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 345
+           EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+Sbjct: 301 EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 345
+
+
+>sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Emericella
+           nidulans GN=hacA PE=2 SV=2
+          Length = 350
+
+ Score =  416 bits (1069), Expect = e-115,   Method: Compositional matrix adjust.
+ Identities = 225/332 (67%), Positives = 254/332 (76%), Gaps = 1/332 (0%)
+
+Query: 13  DSLPATPASEVPVLTVSPADTSLNSADVKTQEVXXXXXXXXXXXXSWGQELPVPKTNLPP 72
+           +SLP TP+ EVPVLTVSPADTSL + +V  Q              SWGQELPVPKTNLPP
+Sbjct: 18  NSLPTTPSLEVPVLTVSPADTSLQTKNVVAQ-TKPEEKKPAKKRKSWGQELPVPKTNLPP 76
+
+Query: 73  RKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQM 132
+           RKRAKTEDEKEQRRIERVLRNRAAAQTS               I MEQQNQFLLQRL+QM
+Sbjct: 77  RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLESEKIDMEQQNQFLLQRLAQM 136
+
+Query: 133 EAENNRLSQQLAQLAAEVRGSRANTPMXXXXXXXXXXXXXXXFKQERDELPLERIPFPTP 192
+           EAENNRLSQQ+AQL+AEVRGSR +TP                FKQE DE+PL+RIPFPTP
+Sbjct: 137 EAENNRLSQQVAQLSAEVRGSRHSTPTSSSPASVSPTLTPTLFKQEGDEVPLDRIPFPTP 196
+
+Query: 193 SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLS 252
+           S++DYSPTLKPS+LAES D+ QHPAVSV GLEGD SAL LFDLG+ +KH  T D+ APLS
+Sbjct: 197 SVTDYSPTLKPSSLAESPDLTQHPAVSVGGLEGDESALTLFDLGASIKHEPTHDLTAPLS 256
+
+Query: 253 DDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAH 312
+           DDDF RLF+GDSS+E DSS+ EDG AFDVL+ GDLSAFPFDSMV+FD+EPVTLE +E  +
+Sbjct: 257 DDDFRRLFNGDSSLESDSSLLEDGFAFDVLDSGDLSAFPFDSMVDFDTEPVTLEDLEQTN 316
+
+Query: 313 GLPDETTCKTSSVQPGFGASTTRCDGQGIAAG 344
+           GL D  +CK +S+QP  GAST+RCDGQGIAAG
+Sbjct: 317 GLSDSASCKAASLQPSHGASTSRCDGQGIAAG 348
+
+
+>sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Trichoderma
+           reesei GN=hac1 PE=2 SV=1
+          Length = 451
+
+ Score = 84.0 bits (206), Expect = 2e-15,   Method: Compositional matrix adjust.
+ Identities = 38/43 (88%), Positives = 40/43 (93%)
+
+Query: 58  SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+           SWGQ LP PKTNLPPRKRAKTEDEKEQRR+ERVLRNR AAQ+S
+Sbjct: 93  SWGQVLPEPKTNLPPRKRAKTEDEKEQRRVERVLRNRRAAQSS 135
+
+
+>sp|P41546|HAC1_YEAST Transcriptional activator HAC1
+           OS=Saccharomyces cerevisiae GN=HAC1 PE=1 SV=2
+          Length = 238
+
+ Score = 58.2 bits (139), Expect = 1e-07,   Method: Compositional matrix adjust.
+ Identities = 28/41 (68%), Positives = 33/41 (80%), Gaps = 3/41 (7%)
+
+Query: 63  LPVP---KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+           L +P   K+ LPPRKRAKT++EKEQRRIER+LRNR AA  S
+Sbjct: 16  LAIPTNFKSTLPPRKRAKTKEEKEQRRIERILRNRRAAHQS 56
+
+
+>sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidopsis
+           thaliana GN=HY5 PE=1 SV=1
+          Length = 168
+
+ Score = 41.2 bits (95), Expect = 0.010,   Method: Compositional matrix adjust.
+ Identities = 27/80 (33%), Positives = 39/80 (48%)
+
+Query: 60  GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQME 119
+           GQE          RKR +T  EKE +R++R+LRNR +AQ +                 +E
+Sbjct: 65  GQERTQATVGESQRKRGRTPAEKENKRLKRLLRNRVSAQQARERKKAYLSELENRVKDLE 124
+
+Query: 120 QQNQFLLQRLSQMEAENNRL 139
+            +N  L +RLS ++ EN  L
+Sbjct: 125 NKNSELEERLSTLQNENQML 144
+
+
+>sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum
+           lycopersicum GN=HY5 PE=2 SV=1
+          Length = 158
+
+ Score = 37.7 bits (86), Expect = 0.12,   Method: Compositional matrix adjust.
+ Identities = 26/80 (32%), Positives = 41/80 (51%), Gaps = 3/80 (3%)
+
+Query: 60  GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQME 119
+           GQ  P   T    RKR ++  +KE +R++R+LRNR +AQ +                ++E
+Sbjct: 66  GQAQPSAGTQ---RKRGRSPADKENKRLKRLLRNRVSAQQARERKKAYLIDLEARVKELE 122
+
+Query: 120 QQNQFLLQRLSQMEAENNRL 139
+            +N  L +RLS ++ EN  L
+Sbjct: 123 TKNAELEERLSTLQNENQML 142
+
+
+>sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding protein
+           3 OS=Mus musculus GN=Creb3 PE=2 SV=2
+          Length = 404
+
+ Score = 34.3 bits (77), Expect = 1.5,   Method: Compositional matrix adjust.
+ Identities = 20/71 (28%), Positives = 35/71 (49%)
+
+Query: 80  DEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQMEAENNRL 139
+           +E+  +R+ R +RN+ AAQ S               ++   QN+ L  ++ ++E +N  L
+Sbjct: 182 EEQVLKRVRRKIRNKRAAQESRKKKKVYVVGLESRVLKYTAQNRELQNKVQRLEEQNLSL 241
+
+Query: 140 SQQLAQLAAEV 150
+             QL +L A V
+Sbjct: 242 LDQLRKLQAMV 252
+
+
+>sp|A1URL3|PYRD_BARBK Dihydroorotate dehydrogenase OS=Bartonella
+           bacilliformis (strain ATCC 35685 / KC583) GN=pyrD PE=3
+           SV=1
+          Length = 362
+
+ Score = 33.9 bits (76), Expect = 1.6,   Method: Compositional matrix adjust.
+ Identities = 28/70 (40%), Positives = 36/70 (51%), Gaps = 11/70 (15%)
+
+Query: 227 GSALPLF-DLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGL---AFDVL 282
+           G ++P+F  L  DL     DDVAA LS  DF      D  V  ++++F  GL   AF + 
+Sbjct: 205 GFSIPIFLKLAPDLTEQELDDVAAELSLSDF------DGLVVSNTTLFRQGLKKSAF-MN 257
+
+Query: 283 EGGDLSAFPF 292
+           EGG LS  P 
+Sbjct: 258 EGGGLSGRPL 267
+
+
+>sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding protein
+           3-like protein 3 OS=Bos taurus GN=CREB3L3 PE=2 SV=1
+          Length = 456
+
+ Score = 33.9 bits (76), Expect = 1.9,   Method: Compositional matrix adjust.
+ Identities = 20/71 (28%), Positives = 34/71 (47%)
+
+Query: 80  DEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQMEAENNRL 139
+           +E+  ++I R +RN+ +AQ S                    QNQ L +++  +E +N  L
+Sbjct: 235 EERMLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNLSL 294
+
+Query: 140 SQQLAQLAAEV 150
+            +QL +L A V
+Sbjct: 295 LEQLKKLQAIV 305
+
+
+>sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding protein
+           3-like protein 3 OS=Homo sapiens GN=CREB3L3 PE=1 SV=2
+          Length = 461
+
+ Score = 33.5 bits (75), Expect = 2.1,   Method: Compositional matrix adjust.
+ Identities = 20/71 (28%), Positives = 34/71 (47%)
+
+Query: 80  DEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQMEAENNRL 139
+           +E+  ++I R +RN+ +AQ S                    QNQ L +++  +E +N  L
+Sbjct: 240 EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNLSL 299
+
+Query: 140 SQQLAQLAAEV 150
+            +QL +L A V
+Sbjct: 300 LEQLKKLQAIV 310
+
+
+>sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding protein
+           3-like protein 3 OS=Rattus norvegicus GN=Creb3l3 PE=2
+           SV=1
+          Length = 470
+
+ Score = 33.1 bits (74), Expect = 2.6,   Method: Compositional matrix adjust.
+ Identities = 22/83 (26%), Positives = 36/83 (43%)
+
+Query: 68  TNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQ 127
+             LP +      +E+  ++I R +RN+ +AQ S                    QNQ L +
+Sbjct: 224 VTLPTQLPLTKYEERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQR 283
+
+Query: 128 RLSQMEAENNRLSQQLAQLAAEV 150
+           ++  +E +N  L +QL  L A V
+Sbjct: 284 KVLHLEKQNLSLLEQLKHLQALV 306
+
+
+>sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding protein
+           3-like protein 3 OS=Mus musculus GN=Creb3l3 PE=2 SV=1
+          Length = 479
+
+ Score = 33.1 bits (74), Expect = 2.9,   Method: Compositional matrix adjust.
+ Identities = 22/83 (26%), Positives = 36/83 (43%)
+
+Query: 68  TNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQ 127
+             LP +      +E+  ++I R +RN+ +AQ S                    QNQ L +
+Sbjct: 224 VTLPTQLPLTKYEERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQR 283
+
+Query: 128 RLSQMEAENNRLSQQLAQLAAEV 150
+           ++  +E +N  L +QL  L A V
+Sbjct: 284 KVLHLEKQNLSLLEQLKHLQALV 306
+
+
+>sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arabidopsis
+           thaliana GN=HYH PE=1 SV=1
+          Length = 149
+
+ Score = 32.3 bits (72), Expect = 5.7,   Method: Compositional matrix adjust.
+ Identities = 19/71 (26%), Positives = 35/71 (49%)
+
+Query: 73  RKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQM 132
+           R+R +   +KE R ++R+LRNR +AQ +                +++  N  L +++S +
+Sbjct: 68  RRRGRNPVDKEYRSLKRLLRNRVSAQQARERKKVYVSDLESRANELQNNNDQLEEKISTL 127
+
+Query: 133 EAENNRLSQQL 143
+             EN  L + L
+Sbjct: 128 TNENTMLRKML 138
+
+
+>sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos taurus GN=XBP1
+           PE=2 SV=1
+          Length = 261
+
+ Score = 32.0 bits (71), Expect = 5.8,   Method: Compositional matrix adjust.
+ Identities = 25/86 (29%), Positives = 41/86 (47%), Gaps = 10/86 (11%)
+
+Query: 68  TNLPP--RKRAK-TEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQF 124
+           + +PP  RKR + T    E++ + R L+NR AAQT+               + +E++NQ 
+Sbjct: 52  SGVPPQARKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQK 111
+
+Query: 125 LL-------QRLSQMEAENNRLSQQL 143
+           LL       ++   +  EN  L Q+L
+Sbjct: 112 LLLENQLLREKTHGLVVENQELRQRL 137
+
+
+>sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding protein
+           3-like protein 4 OS=Rattus norvegicus GN=Creb3l4 PE=2
+           SV=1
+          Length = 367
+
+ Score = 31.6 bits (70), Expect = 9.0,   Method: Compositional matrix adjust.
+ Identities = 18/67 (26%), Positives = 33/67 (49%)
+
+Query: 80  DEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQMEAENNRL 139
+           +E+  ++I R +RN+ +AQ S                   +QNQ L +++ ++E +N  L
+Sbjct: 186 EERILKKIRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSEQNQKLQRKVQELERQNISL 245
+
+Query: 140 SQQLAQL 146
+             Q+ QL
+Sbjct: 246 VAQVHQL 252
+
+
+>sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding protein
+           3-like protein 4 OS=Mus musculus GN=Creb3l4 PE=1 SV=1
+          Length = 370
+
+ Score = 31.6 bits (70), Expect = 9.3,   Method: Compositional matrix adjust.
+ Identities = 18/67 (26%), Positives = 34/67 (50%)
+
+Query: 80  DEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQMEAENNRL 139
+           +E+  ++I R +RN+ +AQ S                   +QNQ L +++ ++E +N  L
+Sbjct: 190 EERILKKIRRKIRNKQSAQDSRRRKKEYLDGLESRVAACSEQNQKLQRKVQELERQNIFL 249
+
+Query: 140 SQQLAQL 146
+            +Q+ QL
+Sbjct: 250 MEQVRQL 256
+
+
+  Database: uniprot_sprot.fasta
+    Posted date:  Apr 12, 2010  9:48 AM
+  Number of letters in database: 181,677,051
+  Number of sequences in database:  516,081
+  
+Lambda     K      H
+   0.317    0.128    0.360 
+
+Gapped
+Lambda     K      H
+   0.267   0.0410    0.140 
+
+
+Matrix: BLOSUM62
+Gap Penalties: Existence: 11, Extension: 1
+Number of Sequences: 516081
+Number of Hits to DB: 151,440,785
+Number of extensions: 5635886
+Number of successful extensions: 14148
+Number of sequences better than 10.0: 43
+Number of HSP's gapped: 14298
+Number of HSP's successfully gapped: 44
+Length of database: 181,677,051
+Neighboring words threshold: 11
+Window for multiple hits: 40
+X1: 16 ( 7.3 bits)
+X2: 38 (14.6 bits)
+X3: 64 (24.7 bits)
+S1: 41 (21.7 bits)
+S2: 66 (30.0 bits)
diff --git a/demotic/examples/example.phmmer.out b/demotic/examples/example.phmmer.out
new file mode 100644
index 0000000..7c63df7
--- /dev/null
+++ b/demotic/examples/example.phmmer.out
@@ -0,0 +1,3477 @@
+# phmmer :: search a protein sequence against a protein database
+# HMMER 3.0 (March 2010); http://hmmer.org/
+# Copyright (C) 2010 Howard Hughes Medical Institute.
+# Freely distributed under the GNU General Public License (GPLv3).
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# query sequence file:             example.fa
+# target sequence database:        /misc/data0/databases/Uniprot/uniprot_sprot.fasta
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+Query:       sp|P55685|Y4WG_RHISN  [L=181]
+Description: Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1
+Scores for complete sequences (score includes all domains):
+   --- full sequence ---   --- best 1 domain ---    -#dom-
+    E-value  score  bias    E-value  score  bias    exp  N  Sequence              Description
+    ------- ------ -----    ------- ------ -----   ---- --  --------              -----------
+   1.9e-115  387.7   2.1   2.1e-115  387.6   1.4    1.0  1  sp|P55685|Y4WG_RHISN  Uncharacterized protein y4wG OS=Rhizob
+  ------ inclusion threshold ------
+        1.7   13.5   0.0        7.4   11.4   0.0    1.9  2  sp|A1VDW9|HEM1_DESVV  Glutamyl-tRNA reductase OS=Desulfovibr
+        2.1   13.1   0.0        9.5   11.0   0.0    1.9  2  sp|Q72C23|HEM1_DESVH  Glutamyl-tRNA reductase OS=Desulfovibr
+        2.8   12.7   0.1         22    9.8   0.1    2.0  2  sp|C0ZYA2|RIMP_RHOE4  Ribosome maturation factor rimP OS=Rho
+        2.9   12.7   0.1    4.7e+02    5.5   0.0    2.2  2  sp|Q98G87|UBIG_RHILO  3-demethylubiquinone-9 3-methyltransfe
+        3.6   12.4   0.1         13   10.6   0.0    1.8  2  sp|B2VCH7|MTLD_ERWT9  Mannitol-1-phosphate 5-dehydrogenase O
+        4.5   12.1   0.5         11   10.8   0.3    1.7  1  sp|A1WE19|RLMN_VEREI  Ribosomal RNA large subunit methyltran
+        4.6   12.0   1.0        7.6   11.3   0.1    1.8  2  sp|Q2J713|RLMN_FRASC  Ribosomal RNA large subunit methyltran
+        5.4   11.8   0.0         12   10.7   0.0    1.5  2  sp|Q9CZP0|UFSP1_MOUSE Ufm1-specific protease 1 OS=Mus muscul
+        7.4   11.4   0.2         32    9.3   0.0    1.9  2  sp|Q21KT6|RLMN_SACD2  Ribosomal RNA large subunit methyltran
+        7.5   11.4   0.0        9.9   11.0   0.0    1.3  1  sp|Q7W7U1|NADD_BORPA  Probable nicotinate-nucleotide adenyly
+        7.9   11.3   0.9    5.7e+02    5.2   0.0    3.1  3  sp|Q8C6Y6|ASB14_MOUSE Ankyrin repeat and SOCS box protein 14
+          8   11.3   0.1         13   10.6   0.1    1.4  1  sp|Q8Y3H7|Y003_RALSO  UPF0161 protein RSc0003 OS=Ralstonia s
+        8.1   11.2   0.7    2.4e+02    6.4   0.0    2.8  3  sp|A4G4J9|RLMN_HERAR  Ribosomal RNA large subunit methyltran
+        8.8   11.1   0.2         16   10.2   0.2    1.4  1  sp|B8F3W8|LEUC_HAEPS  3-isopropylmalate dehydratase large su
+        9.6   11.0   0.0         12   10.7   0.0    1.1  1  sp|Q07074|YH007_YEAST Uncharacterized protein YHR007C-A OS=S
+        9.7   11.0   1.5    1.9e+02    6.8   0.1    2.8  3  sp|A6SZX3|RLMN_JANMA  Ribosomal RNA large subunit methyltran
+        9.7   11.0   2.6         12   10.7   0.4    2.0  2  sp|A2SHB8|RLMN_METPP  Ribosomal RNA large subunit methyltran
+
+
+Domain annotation for each sequence (and alignments):
+>> sp|P55685|Y4WG_RHISN  Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  387.6   1.4  7.5e-120  2.1e-115       1     181 []       1     181 []       1     181 [] 1.00
+
+  Alignments for each domain:
+  == domain 1    score: 387.6 bits;  conditional E-value: 7.5e-120
+  sp|P55685|Y4WG_RHISN   1 ltascrirrnsnsaqkstlgwsalstsdskvfyrvawllgrgklaeidailitdvngigttaddqlafvsliadqgetttvafgpeigs 89 
+                           +tascrirrnsnsaqkst+gwsalstsdskvfyrvawllgrgk+aeidailitdvngigttaddqlafvsliadqgetttvafgpeigs
+  sp|P55685|Y4WG_RHISN   1 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGTTADDQLAFVSLIADQGETTTVAFGPEIGS 89 
+                           8**************************************************************************************** PP
+
+  sp|P55685|Y4WG_RHISN  90 riaasflaacgqlqhqiatrtgkeerkfkpfaaagfsvraglaadgsnsgllsistvagaevhfiaterslrelenqltllleqlrlrs 178
+                           riaasf+aacgqlqhqiatrtgkeerkfkpfaaagfsvraglaadgsnsg+lsistvagaevhfiaterslrelenqltllleqlrlrs
+  sp|P55685|Y4WG_RHISN  90 RIAASFMAACGQLQHQIATRTGKEERKFKPFAAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRS 178
+                           ***************************************************************************************** PP
+
+  sp|P55685|Y4WG_RHISN 179 rpn 181
+                           rpn
+  sp|P55685|Y4WG_RHISN 179 RPN 181
+                           **8 PP
+
+>> sp|A1VDW9|HEM1_DESVV  Glutamyl-tRNA reductase OS=Desulfovibrio vulgaris subsp. vulgaris (strain DP4) GN=hemA PE=3 SV=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.4   0.0   0.00026       7.4      63     108 ..      39      86 ..      10     104 .. 0.76
+   2 ?   -1.1   0.0       1.8     5e+04      36      50 ..     185     199 ..     172     225 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.4 bits;  conditional E-value: 0.00026
+  sp|P55685|Y4WG_RHISN  63 ddqlafvsli..adqgetttvafgpeigsriaasflaacgqlqhqiat 108
+                           dd ++ v ++  +++ e   v+ gpe+ sr+  ++ aa gq++h++a 
+  sp|A1VDW9|HEM1_DESVV  39 DDVVSEVLILstCNRVEILAVGRGPEVVSRVLRGWAAARGQCEHDLAP 86 
+                           55554444431156778889999*********************9985 PP
+
+  == domain 2    score: -1.1 bits;  conditional E-value: 1.8
+  sp|P55685|Y4WG_RHISN  36 awllgrgklaeidai 50 
+                           a l+g g +ae+ a 
+  sp|A1VDW9|HEM1_DESVV 185 AMLIGAGEMAELAAT 199
+                           789999999999775 PP
+
+>> sp|Q72C23|HEM1_DESVH  Glutamyl-tRNA reductase OS=Desulfovibrio vulgaris (strain Hildenborough / ATCC 29579 / NCIMB 83
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.0   0.00033       9.5      63     108 ..      39      86 ..      10     104 .. 0.76
+   2 ?   -1.1   0.0       1.8     5e+04      36      50 ..     185     199 ..     172     225 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.00033
+  sp|P55685|Y4WG_RHISN  63 ddqlafvsli..adqgetttvafgpeigsriaasflaacgqlqhqiat 108
+                           dd ++ v ++  +++ e   v+ gpe+ sr+  ++ aa gq++h++a 
+  sp|Q72C23|HEM1_DESVH  39 DDVVSEVLILstCNRVEILAVGRGPEVVSRVLRGWSAARGQCEHDLAP 86 
+                           55554444431156778889999*********************9985 PP
+
+  == domain 2    score: -1.1 bits;  conditional E-value: 1.8
+  sp|P55685|Y4WG_RHISN  36 awllgrgklaeidai 50 
+                           a l+g g +ae+ a 
+  sp|Q72C23|HEM1_DESVH 185 AMLIGAGEMAELAAT 199
+                           789999999999775 PP
+
+>> sp|C0ZYA2|RIMP_RHOE4  Ribosome maturation factor rimP OS=Rhodococcus erythropolis (strain PR4 / NBRC 100887) GN=rimP 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.8   0.1   0.00077        22      36      76 ..      93     131 ..      82     148 .. 0.83
+   2 ?    0.6   0.0      0.53   1.5e+04      40      65 ..     167     192 ..     155     200 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 9.8 bits;  conditional E-value: 0.00077
+  sp|P55685|Y4WG_RHISN  36 awllgrgklaeidailitdvngigttaddqlafvsliadqg 76 
+                            w   rg+ a+id    t v+ igt  dd +a v  i+ +g
+  sp|C0ZYA2|RIMP_RHOE4  93 HWRRARGRKARIDLAGETVVGRIGTLNDDSVAVV--IGGRG 131
+                           699**************************99976..45555 PP
+
+  == domain 2    score: 0.6 bits;  conditional E-value: 0.53
+  sp|P55685|Y4WG_RHISN  40 grgklaeidailitdvngigttaddq 65 
+                             g+    da+ +td +g+ +  dd+
+  sp|C0ZYA2|RIMP_RHOE4 167 PEGRAVPSDAVDLTDDSGVDSVEDDE 192
+                           56888899************999997 PP
+
+>> sp|Q98G87|UBIG_RHILO  3-demethylubiquinone-9 3-methyltransferase OS=Rhizobium loti GN=ubiG PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    5.5   0.0     0.016   4.7e+02     101     123 ..      44      66 ..      32      95 .. 0.81
+   2 ?    5.2   0.0      0.02   5.8e+02      71     103 ..     122     156 ..     107     175 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 5.5 bits;  conditional E-value: 0.016
+  sp|P55685|Y4WG_RHISN 101 qlqhqiatrtgkeerkfkpfaaa 123
+                            ++ qia r g++ r  +pf + 
+  sp|Q98G87|UBIG_RHILO  44 YIRDQIAARFGRDPRAARPFEGL 66 
+                           5789****************754 PP
+
+  == domain 2    score: 5.2 bits;  conditional E-value: 0.02
+  sp|P55685|Y4WG_RHISN  71 liadqgetttvafgpeigsriaa..sflaacgqlq 103
+                            +ad get  v    e+  ++a    f+a cgq+ 
+  sp|Q98G87|UBIG_RHILO 122 DLADAGETFDVILNMEVVEHVADidLFVAKCGQMV 156
+                           589*****************99633699*****85 PP
+
+>> sp|B2VCH7|MTLD_ERWT9  Mannitol-1-phosphate 5-dehydrogenase OS=Erwinia tasmaniensis (strain DSM 17950 / Et1/99) GN=mtl
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.6   0.0   0.00046        13      44      96 ..      54     100 ..      45     113 .. 0.76
+   2 ?   -1.7   0.0       2.8   7.9e+04      40      77 ..     248     282 ..     233     293 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 10.6 bits;  conditional E-value: 0.00046
+  sp|P55685|Y4WG_RHISN  44 laeidailitdvngigttaddqlafvsliadqgetttvafgpeigsriaasfl 96 
+                           +a+i+  ++  vn + +++dd +a   lia+  +  t a gp+i  riaa++ 
+  sp|B2VCH7|MTLD_ERWT9  54 QAQIE--IVNGVNAVHSSSDDIIA---LIAEV-DIVTTAVGPQILERIAAGMA 100
+                           55554..56788999999998655...67765.5667799*********9865 PP
+
+  == domain 2    score: -1.7 bits;  conditional E-value: 2.8
+  sp|P55685|Y4WG_RHISN  40 grgklaeidailitdvngigttaddqlafvsliadqge 77 
+                            +g + e  a+li      g  ad + a+++ i ++ e
+  sp|B2VCH7|MTLD_ERWT9 248 VQGAMEESGAVLIK---RYGFAADKHAAYIQKIINRFE 282
+                           56888888888875...568889999999988887766 PP
+
+>> sp|A1WE19|RLMN_VEREI  Ribosomal RNA large subunit methyltransferase N OS=Verminephrobacter eiseniae (strain EF01-2) G
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.3    0.0004        11      56     119 ..     304     362 ..     276     388 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.0004
+  sp|P55685|Y4WG_RHISN  56 ngigttaddq.lafvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkfkp 119
+                           +g+  +a dq laf ++++  g  ttv      g+ ia    aacgql  ++  rt   er  k 
+  sp|A1WE19|RLMN_VEREI 304 SGLLRSAHDQiLAFAQVLGAAGIVTTVRK--TRGDDIA----AACGQLAGDVRDRTRVAERMAKQ 362
+                           5666777777479************9974..5677776....69************999998775 PP
+
+>> sp|Q2J713|RLMN_FRASC  Ribosomal RNA large subunit methyltransferase N OS=Frankia sp. (strain CcI3) GN=rlmN PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   -2.8   0.1         6   1.7e+05      77     108 ..     135     156 ..     120     169 .. 0.57
+   2 ?   11.3   0.1   0.00027       7.6      42     119 ..     324     395 ..     316     413 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: -2.8 bits;  conditional E-value: 6
+  sp|P55685|Y4WG_RHISN  77 etttvafgpeigsriaasflaacgqlqhqiat 108
+                           +  tv+   + g+ +++ f+a          t
+  sp|Q2J713|RLMN_FRASC 135 DRATVCVSSQAGCGMGCPFCA----------T 156
+                           445555555555555555544..........2 PP
+
+  == domain 2    score: 11.3 bits;  conditional E-value: 0.00027
+  sp|P55685|Y4WG_RHISN  42 gklaeidailitdvngigtta...ddqlafvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkfkp 119
+                           g+la+++ i +   +g    a     q afv  + d+g  ttv      g  ia    aacgql  +     gk er  +p
+  sp|Q2J713|RLMN_FRASC 324 GRLAHVNLIPLNPTGGSSWRAsapAGQRAFVRRLRDRGIVTTVRD--TRGREIA----AACGQLAAE---PAGKPERTDRP 395
+                           6778888888877777655441114799**************974..4566666....69***9755...55777777776 PP
+
+>> sp|Q9CZP0|UFSP1_MOUSE  Ufm1-specific protease 1 OS=Mus musculus GN=Ufsp1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.0    0.0004        12     107     155 ..     126     173 ..     104     189 .. 0.84
+   2 ?   -2.1   0.0       3.6     1e+05      17      37 ..     192     213 ..     180     215 .. 0.71
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.0004
+   sp|P55685|Y4WG_RHISN 107 atrtgkeerkfkpfaaagfsvraglaadgsnsgllsistvagaevhfia 155
+                            +   g eer +  f  +g  v  g  ad ++  ll+i+   g+ev+ + 
+  sp|Q9CZP0|UFSP1_MOUSE 126 G-LRGEEERLYSHFTTGGGPVMVGGDADAQSKALLGICEGPGSEVYVLI 173
+                            3.459***************************************98765 PP
+
+  == domain 2    score: -2.1 bits;  conditional E-value: 3.6
+   sp|P55685|Y4WG_RHISN  17 stlgwsal.stsdskvfyrvaw 37 
+                            + +gw+ + s  ds  fy +++
+  sp|Q9CZP0|UFSP1_MOUSE 192 GWVGWQKVkSVFDSNSFYNLCF 213
+                            4578876537789999998875 PP
+
+>> sp|Q21KT6|RLMN_SACD2  Ribosomal RNA large subunit methyltransferase N OS=Saccharophagus degradans (strain 2-40 / ATCC
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   -0.8   0.0       1.4     4e+04      74     156 ..     105     129 ..      83     158 .. 0.62
+   2 ?    9.3   0.0    0.0011        32      67     115 ..     324     366 ..     312     381 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: -0.8 bits;  conditional E-value: 1.4
+  sp|P55685|Y4WG_RHISN  74 dqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkfkpfaaagfsvraglaadgsnsgllsistvagaevhfiat 156
+                            +g+  t++   ++g+ + +sf+a                                                          t
+  sp|Q21KT6|RLMN_SACD2 105 PDGDRGTLCVSSQVGCSLDCSFCA----------------------------------------------------------T 129
+                           234444555555555555555544..........................................................3 PP
+
+  == domain 2    score: 9.3 bits;  conditional E-value: 0.0011
+  sp|P55685|Y4WG_RHISN  67 afvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeer 115
+                            f +++ d g tttv      g+     + aacgql  q+  rt + +r
+  sp|Q21KT6|RLMN_SACD2 324 RFQQILIDAGYTTTVRT--TRGDD----IDAACGQLAGQVNDRTKRSQR 366
+                           58889999999999974..34554....5689************88776 PP
+
+>> sp|Q7W7U1|NADD_BORPA  Probable nicotinate-nucleotide adenylyltransferase OS=Bordetella parapertussis GN=nadD PE=3 SV=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.0   0.00035       9.9     105     152 ..     146     193 ..     100     197 .] 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.00035
+  sp|P55685|Y4WG_RHISN 105 qiatrtgkeerkfkpfaaagfsvraglaadgsnsgllsistvagaevh 152
+                             a r   +e  f p+a +  ++r  laad + +gll     a    h
+  sp|Q7W7U1|NADD_BORPA 146 LAAHRRQLHELPFAPMAVSASDIRQRLAADAATDGLLPEPVAAYIATH 193
+                           34557778999*************************987666655555 PP
+
+>> sp|Q8C6Y6|ASB14_MOUSE  Ankyrin repeat and SOCS box protein 14 OS=Mus musculus GN=Asb14 PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    5.2   0.0      0.02   5.7e+02     124     158 ..     216     249 ..     205     256 .. 0.83
+   2 ?    1.6   0.0      0.26   7.3e+03     131     166 ..     320     355 ..     309     361 .. 0.86
+   3 ?    0.2   0.1      0.68   1.9e+04     149     178 ..     522     553 ..     518     554 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 5.2 bits;  conditional E-value: 0.02
+   sp|P55685|Y4WG_RHISN 124 gfsvraglaadgsnsgllsistvagaevhfiater 158
+                            gf+    laa+g+++g++++    ga+vh  a++ 
+  sp|Q8C6Y6|ASB14_MOUSE 216 GFTP-LALAAQGGHTGIMQLLLQKGADVHSQASDS 249
+                            6654.469*********************988775 PP
+
+  == domain 2    score: 1.6 bits;  conditional E-value: 0.26
+   sp|P55685|Y4WG_RHISN 131 laadgsnsgllsistvagaevhfiaterslrelenq 166
+                            +aa g++  +l +   ag +v+f+  +r  ++ ++q
+  sp|Q8C6Y6|ASB14_MOUSE 320 CAAAGAHPHCLELLIQAGFDVNFMLDQRIRKHYDDQ 355
+                            68899999*****************99988887776 PP
+
+  == domain 3    score: 0.2 bits;  conditional E-value: 0.68
+   sp|P55685|Y4WG_RHISN 149 aevhfi.aterslrelen.qltllleqlrlrs 178
+                             e+hfi a  rsl++l + ++  ++ +lrlr+
+  sp|Q8C6Y6|ASB14_MOUSE 522 PEIHFIlANPRSLQHLCRlKIRKCMGRLRLRC 553
+                            589*9847789**9986526777888888885 PP
+
+>> sp|Q8Y3H7|Y003_RALSO  UPF0161 protein RSc0003 OS=Ralstonia solanacearum GN=RSc0003 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.6   0.1   0.00044        13      64     101 ..      22      59 ..      10      68 .. 0.90
+
+  Alignments for each domain:
+  == domain 1    score: 10.6 bits;  conditional E-value: 0.00044
+  sp|P55685|Y4WG_RHISN  64 dqlafvsliadqgetttvafgpeigsriaasflaacgq 101
+                            q+ f+  ++d  +   +  gp igs +aa  l+ c  
+  sp|Q8Y3H7|Y003_RALSO  22 AQCRFLPTCSDYARDAVLTHGPAIGSYLAAKRLCRCHP 59 
+                           5889999***************************9975 PP
+
+>> sp|A4G4J9|RLMN_HERAR  Ribosomal RNA large subunit methyltransferase N OS=Herminiimonas arsenicoxydans GN=rlmN PE=3 SV
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    0.1   0.0      0.77   2.2e+04      93     133 ..      14      53 ..      10      72 .. 0.82
+   2 ?    0.8   0.0      0.46   1.3e+04     136     153 ..     101     118 ..      79     143 .. 0.78
+   3 ?    6.4   0.0    0.0085   2.4e+02      67     117 ..     321     365 ..     289     375 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 0.1 bits;  conditional E-value: 0.77
+  sp|P55685|Y4WG_RHISN  93 asflaacgqlqhqiatrtgkeerkfkpfaaagfsvraglaa 133
+                           a+ +a cg+l  +   r  + +r +  f+a+ f+    la 
+  sp|A4G4J9|RLMN_HERAR  14 AQLIAYCGELGEK-PFRAKQLQRWIHQFGASDFDAMTDLAK 53 
+                           677899**99876.578888899999*****9999888875 PP
+
+  == domain 2    score: 0.8 bits;  conditional E-value: 0.46
+  sp|P55685|Y4WG_RHISN 136 snsgllsistvagaevhf 153
+                            n g l+ist ag+ v+ 
+  sp|A4G4J9|RLMN_HERAR 101 ENRGTLCISTQAGCAVNC 118
+                           589999999999998753 PP
+
+  == domain 3    score: 6.4 bits;  conditional E-value: 0.0085
+  sp|P55685|Y4WG_RHISN  67 afvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkf 117
+                           af +++ d g  tt+      g+    ++ aacgql  ++  rt  ++r  
+  sp|A4G4J9|RLMN_HERAR 321 AFAQVLMDGGLVTTIRK--TRGD----DIDAACGQLAGEVQDRTRVQDRMK 365
+                           78888888888888753..3344....45689************9998864 PP
+
+>> sp|B8F3W8|LEUC_HAEPS  3-isopropylmalate dehydratase large subunit OS=Haemophilus parasuis serovar 5 (strain SH0165) G
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.2   0.2   0.00057        16      88     168 ..     135     218 ..      90     229 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 10.2 bits;  conditional E-value: 0.00057
+  sp|P55685|Y4WG_RHISN  88 gsriaasflaacgqlqhqiatrtgkeerkfkpfaaagfsvraglaadgsnsgllsistvagaevhfia.terslrel..enqlt 168
+                           g+  a +f  +  +++h +at+t k+ r  k        vr g+ a      +++ +t+ag+  h +  +  ++r+l  e+++t
+  sp|B8F3W8|LEUC_HAEPS 135 GAFGALAFGIGTSEVEHVLATQTVKQARAKKMKIEVRGKVREGITAKDIVLAIIGKTTMAGGTGHVVEfCGEAIRDLsmEGRMT 218
+                           33446678888999**************99988888889***********************9998752456777752244555 PP
+
+>> sp|Q07074|YH007_YEAST  Uncharacterized protein YHR007C-A OS=Saccharomyces cerevisiae GN=YHR007C-A PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.0   0.00041        12     142     173 ..      32      62 ..      27      68 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.00041
+   sp|P55685|Y4WG_RHISN 142 sistvagaevhfiaterslrelenqltllleq 173
+                            s+ t+  a vh+i t+ + ++ enql lll q
+  sp|Q07074|YH007_YEAST  32 SLPTLL-APVHYIPTRLTHHQAENQLFLLLFQ 62 
+                            555554.78*******************9987 PP
+
+>> sp|A6SZX3|RLMN_JANMA  Ribosomal RNA large subunit methyltransferase N OS=Janthinobacterium sp. (strain Marseille) GN=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    0.1   0.0      0.76   2.2e+04      93     133 ..      13      52 ..      10      71 .. 0.81
+   2 ?    0.7   0.0      0.49   1.4e+04     136     153 ..     100     117 ..      75     135 .. 0.77
+   3 ?    6.8   0.1    0.0066   1.9e+02      67     117 ..     322     366 ..     307     376 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 0.1 bits;  conditional E-value: 0.76
+  sp|P55685|Y4WG_RHISN  93 asflaacgqlqhqiatrtgkeerkfkpfaaagfsvraglaa 133
+                           a+ +a cg+l  +   r  + +r +  f+a+ f+    la 
+  sp|A6SZX3|RLMN_JANMA  13 AQLIAYCGELGEK-PFRAKQLQRWIHQFGASDFDAMTDLAK 52 
+                           6778999999866.5788888999999****9999888875 PP
+
+  == domain 2    score: 0.7 bits;  conditional E-value: 0.49
+  sp|P55685|Y4WG_RHISN 136 snsgllsistvagaevhf 153
+                            n g l+ist ag+ v+ 
+  sp|A6SZX3|RLMN_JANMA 100 ENRGTLCISTQAGCAVNC 117
+                           589999999999998753 PP
+
+  == domain 3    score: 6.8 bits;  conditional E-value: 0.0066
+  sp|P55685|Y4WG_RHISN  67 afvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkf 117
+                           af +++ d g  ttv      g+    ++ aacgql  ++  rt  ++r  
+  sp|A6SZX3|RLMN_JANMA 322 AFAQVLMDAGIVTTVRK--TRGD----DIDAACGQLAGEVQDRTRVQDRMK 366
+                           78888899999888863..3444....45689************9998864 PP
+
+>> sp|A2SHB8|RLMN_METPP  Ribosomal RNA large subunit methyltransferase N OS=Methylibium petroleiphilum (strain PM1) GN=r
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   -0.7   0.0       1.3   3.8e+04      95     116 ..     135     156 ..      78     166 .. 0.59
+   2 ?   10.7   0.4   0.00042        12      66     139 ..     319     387 ..     291     393 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: -0.7 bits;  conditional E-value: 1.3
+  sp|P55685|Y4WG_RHISN  95 flaacgqlqhqiatrtgkeerk 116
+                           ++a   + +hq+  r g  er 
+  sp|A2SHB8|RLMN_METPP 135 IVAQLWHAEHQLRARLGTTERV 156
+                           4445555667777777777765 PP
+
+  == domain 2    score: 10.7 bits;  conditional E-value: 0.00042
+  sp|P55685|Y4WG_RHISN  66 lafvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkfk.pfaaagfsvraglaadgsnsg 139
+                            af +l+ d g  ttv      g+    ++ aacgql  ++  rt  + r  + p+a   ++      ad + sg
+  sp|A2SHB8|RLMN_METPP 319 QAFAQLLVDGGLVTTVRR--TRGD----DIDAACGQLAGEVQDRTNAQARMRRaPIAIRPIDSAVQRRADAAPSG 387
+                           489999999999999964..3354....45689************999885443888887777777777777766 PP
+
+
+
+Internal pipeline statistics summary:
+-------------------------------------
+Query model(s):                            1  (181 nodes)
+Target sequences:                     516081  (181677051 residues)
+Passed MSV filter:                     11913  (0.0230836); expected 10321.6 (0.02)
+Passed bias filter:                    11913  (0.0230836); expected 10321.6 (0.02)
+Passed Vit filter:                      1904  (0.00368934); expected 516.1 (0.001)
+Passed Fwd filter:                        38  (7.36319e-05); expected 5.2 (1e-05)
+Initial search space (Z):             516081  [actual number of targets]
+Domain search space  (domZ):              18  [number of targets reported over threshold]
+# CPU time: 6.07u 0.08s 00:00:06.15 Elapsed: 00:00:02.46
+# Mc/sec: 13367.30
+//
+Query:       sp|Q1XGE2|HAC1_ASPOR  [L=345]
+Description: Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA PE=2 SV=1
+Scores for complete sequences (score includes all domains):
+   --- full sequence ---   --- best 1 domain ---    -#dom-
+    E-value  score  bias    E-value  score  bias    exp  N  Sequence              Description
+    ------- ------ -----    ------- ------ -----   ---- --  --------              -----------
+     2e-228  762.1   3.5   2.2e-228  762.0   2.4    1.0  1  sp|Q1XGE2|HAC1_ASPOR  Transcriptional activator hacA OS=Aspe
+   1.2e-169  568.8   2.3   1.5e-169  568.6   1.6    1.0  1  sp|Q8TFU8|HAC1_EMENI  Transcriptional activator hacA OS=Emer
+    1.5e-26   98.4   9.3    1.5e-26   98.4   6.4    3.2  3  sp|Q8TFF3|HAC1_TRIRE  Transcriptional activator hac1 OS=Tric
+    1.3e-12   52.6   5.6    1.3e-12   52.6   3.9    1.7  1  sp|P41546|HAC1_YEAST  Transcriptional activator HAC1 OS=Sacc
+      6e-11   47.1   2.6    6.9e-11   46.9   1.8    1.1  1  sp|O24646|HY5_ARATH   Transcription factor HY5 OS=Arabidopsi
+    4.6e-07   34.3   0.7      6e-07   33.9   0.5    1.3  1  sp|Q3SZZ2|XBP1_BOVIN  X-box-binding protein 1 OS=Bos taurus 
+    7.8e-07   33.6   5.7    9.5e-07   33.3   3.9    1.1  1  sp|Q9SM50|HY5_SOLLC   Transcription factor HY5 OS=Solanum ly
+    1.7e-06   32.5   2.8    2.4e-06   32.0   2.0    1.3  1  sp|P17861|XBP1_HUMAN  X-box-binding protein 1 OS=Homo sapien
+    9.6e-06   30.0   4.8    1.2e-05   29.6   3.4    1.1  1  sp|Q8W191|HYH_ARATH   Transcription factor HY5-like OS=Arabi
+    2.2e-05   28.8   0.0    3.8e-05   28.0   0.0    1.3  1  sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-binding 
+    6.8e-05   27.2   2.5     0.0001   26.6   1.7    1.3  1  sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding 
+    7.1e-05   27.1   3.1    0.00011   26.6   2.2    1.4  1  sp|Q9R1S4|XBP1_RAT    X-box-binding protein 1 OS=Rattus norv
+    0.00017   25.8   0.5    0.00027   25.2   0.3    1.3  1  sp|Q54WN7|BZPF_DICDI  Probable basic-leucine zipper transcri
+    0.00023   25.5   0.8     0.0004   24.7   0.2    1.6  1  sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-binding 
+    0.00023   25.4   4.5    0.00023   25.4   3.1    1.6  1  sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS=Petro
+    0.00028   25.2   0.2    0.00056   24.2   0.2    1.4  1  sp|Q5FVM5|CR3L3_RAT   Cyclic AMP-responsive element-binding 
+    0.00029   25.1   3.1    0.00044   24.5   2.2    1.3  1  sp|O35426|XBP1_MOUSE  X-box-binding protein 1 OS=Mus musculu
+    0.00031   25.0   0.1    0.00043   24.5   0.0    1.2  1  sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding 
+    0.00058   24.1   0.3    0.00058   24.1   0.2    1.7  1  sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding 
+     0.0006   24.1   2.0     0.0006   24.1   1.4    1.8  2  sp|O57342|MAFA_COTJA  Transcription factor MafA OS=Coturnix 
+    0.00063   24.0   3.1     0.0012   23.1   2.2    1.4  1  sp|Q5UEM7|CR3L4_RAT   Cyclic AMP-responsive element-binding 
+    0.00077   23.7   2.0    0.00089   23.5   0.3    1.7  1  sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-binding 
+    0.00091   23.5   3.2     0.0035   21.5   1.0    2.0  2  sp|Q90370|MAFB_COTJA  Transcription factor MafB OS=Coturnix 
+    0.00095   23.4   0.1     0.0015   22.7   0.0    1.4  1  sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding 
+      0.001   23.3   0.4     0.0019   22.4   0.3    1.3  1  sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-binding 
+     0.0011   23.3   0.6     0.0021   22.3   0.4    1.4  1  sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-binding 
+     0.0012   23.1   3.7     0.0043   21.3   1.3    2.0  2  sp|Q90888|MAFB_CHICK  Transcription factor MafB OS=Gallus ga
+     0.0013   23.0   0.2     0.0013   23.0   0.1    1.6  1  sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding 
+     0.0014   22.9   0.1     0.0023   22.2   0.1    1.3  1  sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-binding 
+     0.0014   22.9   1.3     0.0021   22.3   0.2    1.8  1  sp|Q9Y5Q3|MAFB_HUMAN  Transcription factor MafB OS=Homo sapi
+     0.0016   22.7   0.1     0.0027   22.0   0.1    1.3  1  sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-binding 
+     0.0017   22.6   1.7      0.044   17.9   0.8    2.1  2  sp|Q6DE84|MAFB_XENLA  Transcription factor MafB OS=Xenopus l
+     0.0018   22.6   0.0     0.0032   21.7   0.0    1.5  1  sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-binding 
+     0.0018   22.6   0.1     0.0028   21.9   0.0    1.2  1  sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-binding 
+     0.0021   22.3   1.7     0.0023   22.2   0.2    1.7  1  sp|P54842|MAFB_RAT    Transcription factor MafB OS=Rattus no
+     0.0021   22.3   0.1     0.0032   21.7   0.0    1.2  1  sp|Q6QDP7|CR3L2_RAT   Cyclic AMP-responsive element-binding 
+     0.0021   22.3   0.2     0.0024   22.1   0.2    1.0  1  sp|Q16520|BATF_HUMAN  Basic leucine zipper transcriptional f
+     0.0023   22.1   0.3     0.0023   22.1   0.2    1.8  1  sp|P54841|MAFB_MOUSE  Transcription factor MafB OS=Mus muscu
+     0.0027   21.9   0.3     0.0027   21.9   0.2    1.8  1  sp|Q2PFS4|MAFB_MACFA  Transcription factor MafB OS=Macaca fa
+     0.0029   21.8   2.4     0.0029   21.8   1.6    1.8  2  sp|O42290|MAFA_CHICK  Transcription factor MafA OS=Gallus ga
+      0.003   21.8   3.8     0.0033   21.6   2.6    1.1  1  sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcriptional f
+     0.0037   21.5   0.0     0.0066   20.7   0.0    1.5  1  sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-binding 
+      0.004   21.4   0.0      0.004   21.4   0.0    1.6  1  sp|Q66HA2|CR3L1_RAT   Cyclic AMP-responsive element-binding 
+     0.0043   21.3   3.0      0.011   19.9   2.1    1.7  1  sp|P17544|ATF7_HUMAN  Cyclic AMP-dependent transcription fac
+     0.0053   21.0   0.9     0.0092   20.2   0.6    1.3  1  sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-binding 
+     0.0054   20.9   2.2     0.0054   20.9   1.5    1.7  1  sp|Q8R0S1|ATF7_MOUSE  Cyclic AMP-dependent transcription fac
+     0.0057   20.9   3.2      0.014   19.6   2.2    1.6  1  sp|Q5R9C9|ATF7_PONAB  Cyclic AMP-dependent transcription fac
+     0.0068   20.6   0.1     0.0076   20.5   0.1    1.1  1  sp|O35284|BATF_MOUSE  Basic leucine zipper transcriptional f
+     0.0084   20.3   0.3      0.012   19.8   0.2    1.2  1  sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-binding 
+     0.0089   20.2   5.8      0.014   19.6   3.7    1.5  1  sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-binding 
+     0.0097   20.1   4.3      0.012   19.9   2.9    1.1  1  sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcriptional f
+  ------ inclusion threshold ------
+      0.012   19.9   4.4      0.029   18.5   1.1    2.0  2  sp|Q504L8|MAFB_XENTR  Transcription factor MafB OS=Xenopus t
+      0.012   19.8   5.2      0.012   19.8   3.6    1.8  1  sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-binding 
+      0.016   19.4   2.1      0.026   18.7   1.5    1.3  1  sp|Q4U1U2|MAFA_XENTR  Transcription factor MafA OS=Xenopus t
+      0.018   19.3   1.8       0.32   15.1   1.3    2.0  2  sp|P23091|MAF_AVIS4   Transforming protein Maf OS=Avian musc
+      0.018   19.2   0.4      0.026   18.7   0.3    1.2  1  sp|P81269|ATF1_MOUSE  Cyclic AMP-dependent transcription fac
+      0.019   19.2   1.6       0.38   14.9   1.2    2.0  2  sp|Q789F3|MAF_CHICK   Transcription factor Maf OS=Gallus gal
+       0.02   19.1   0.1      0.042   18.0   0.1    1.5  1  sp|P29747|CREBA_DROME Cyclic AMP response element-binding pr
+       0.02   19.0   0.5      0.034   18.3   0.3    1.3  1  sp|P18848|ATF4_HUMAN  Cyclic AMP-dependent transcription fac
+      0.024   18.8   1.8       0.33   15.1   0.9    2.1  2  sp|P54844|MAF_RAT     Transcription factor Maf OS=Rattus nor
+      0.024   18.8   1.5       0.43   14.7   1.0    2.1  2  sp|O75444|MAF_HUMAN   Transcription factor Maf OS=Homo sapie
+      0.024   18.8   3.3      0.032   18.4   2.3    1.1  1  sp|P97876|BATF3_RAT   Basic leucine zipper transcriptional f
+      0.025   18.8   0.3      0.025   18.8   0.2    1.7  1  sp|Q06507|ATF4_MOUSE  Cyclic AMP-dependent transcription fac
+      0.025   18.7   1.5       0.43   14.7   1.0    2.1  2  sp|A7Z017|MAF_BOVIN   Transcription factor Maf OS=Bos taurus
+      0.026   18.7   1.7       0.53   14.4   1.2    2.2  2  sp|Q0V9K1|MAF_XENTR   Transcription factor Maf OS=Xenopus tr
+      0.028   18.6   0.3      0.047   17.9   0.2    1.4  1  sp|Q08DA8|ATF1_BOVIN  Cyclic AMP-dependent transcription fac
+      0.029   18.5   0.3       0.03   18.5   0.2    1.1  1  sp|O60675|MAFK_HUMAN  Transcription factor MafK OS=Homo sapi
+       0.03   18.5   2.0       0.48   14.5   1.1    2.1  2  sp|P54843|MAF_MOUSE   Transcription factor Maf OS=Mus muscul
+      0.036   18.2   0.3       0.05   17.8   0.2    1.2  1  sp|P18846|ATF1_HUMAN  Cyclic AMP-dependent transcription fac
+      0.039   18.1   1.9      0.039   18.1   1.3    2.2  1  sp|P42774|GBF1_ARATH  G-box-binding factor 1 OS=Arabidopsis 
+      0.039   18.1   0.4      0.039   18.1   0.3    1.1  1  sp|Q61827|MAFK_MOUSE  Transcription factor MafK OS=Mus muscu
+      0.046   17.9   0.9      0.058   17.6   0.6    1.1  1  sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-binding pr
+      0.051   17.7   0.6      0.086   17.0   0.4    1.3  1  sp|Q6NW59|ATF4_DANRE  Cyclic AMP-dependent transcription fac
+      0.067   17.3   2.3       0.15   16.2   1.6    1.6  1  sp|O24160|TGA21_TOBAC TGACG-sequence-specific DNA-binding pr
+       0.07   17.3   2.8       0.21   15.7   1.3    1.9  2  sp|Q98UK4|MAF_DANRE   Transcription factor Maf OS=Danio reri
+      0.071   17.3   0.8       0.11   16.7   0.6    1.2  1  sp|A3KMR8|MAFA_DANRE  Transcription factor MafA OS=Danio rer
+      0.078   17.1   0.7       0.09   16.9   0.5    1.1  1  sp|Q90596|MAFK_CHICK  Transcription factor MafK OS=Gallus ga
+      0.079   17.1   0.5       0.13   16.4   0.3    1.4  1  sp|Q3ZCH6|ATF4_BOVIN  Cyclic AMP-dependent transcription fac
+      0.086   17.0   1.2      0.088   17.0   0.8    1.1  1  sp|P97875|JDP2_MOUSE  Jun dimerization protein 2 OS=Mus musc
+      0.086   17.0   1.2      0.088   17.0   0.8    1.1  1  sp|Q78E65|JDP2_RAT    Jun dimerization protein 2 OS=Rattus n
+      0.092   16.9   0.2       0.15   16.2   0.2    1.3  1  sp|P12959|OP2_MAIZE   Regulatory protein opaque-2 OS=Zea may
+      0.093   16.9   6.4      0.093   16.9   4.4    2.1  2  sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-binding 
+      0.093   16.9   4.3       0.16   16.1   3.0    1.3  1  sp|Q39140|TGA6_ARATH  Transcription factor TGA6 OS=Arabidops
+      0.098   16.8   4.3       0.19   15.9   2.9    1.4  1  sp|P23923|HBP1B_WHEAT Transcription factor HBP-1b(c38) OS=Tr
+       0.11   16.7   1.0       0.21   15.7   0.7    1.6  1  sp|Q00322|CEBPD_MOUSE CCAAT/enhancer-binding protein delta O
+       0.11   16.6   3.2       0.18   15.9   2.2    1.3  1  sp|Q39163|TGA5_ARATH  Transcription factor TGA5 OS=Arabidops
+       0.12   16.5   1.0       0.21   15.7   0.7    1.3  1  sp|Q54RZ9|BZPG_DICDI  Probable basic-leucine zipper transcri
+       0.12   16.5   0.5       0.21   15.7   0.3    1.3  1  sp|Q8CF90|MAFA_MOUSE  Transcription factor MafA OS=Mus muscu
+       0.13   16.4   0.2       0.13   16.4   0.2    1.8  1  sp|Q9ES19|ATF4_RAT    Cyclic AMP-dependent transcription fac
+       0.15   16.2   3.5       0.26   15.4   2.4    1.3  1  sp|P43273|TGA2_ARATH  Transcription factor TGA2 OS=Arabidops
+       0.16   16.1   5.8       0.22   15.7   1.5    2.1  2  sp|Q98UK5|MAFB_DANRE  Transcription factor MafB OS=Danio rer
+       0.17   16.0   1.5       0.38   14.9   1.0    1.6  1  sp|P16951|ATF2_MOUSE  Cyclic AMP-dependent transcription fac
+       0.18   15.9   2.1        0.5   14.5   0.1    2.1  2  sp|P27925|CREB1_BOVIN Cyclic AMP-responsive element-binding 
+       0.19   15.9   1.4       0.41   14.8   1.0    1.6  1  sp|P15336|ATF2_HUMAN  Cyclic AMP-dependent transcription fac
+       0.19   15.9   2.6       0.46   14.6   1.8    1.6  1  sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcription fac
+       0.19   15.9   7.0       0.36   15.0   4.8    1.4  1  sp|Q2VZV0|IF2_MAGSA   Translation initiation factor IF-2 OS=
+       0.21   15.7   1.1       0.37   14.9   0.8    1.5  1  sp|Q6ZDF3|TRAB1_ORYSJ bZIP transcription factor TRAB1 OS=Ory
+       0.22   15.7   1.6        0.5   14.5   1.1    1.6  1  sp|Q6P788|ATF5_RAT    Cyclic AMP-dependent transcription fac
+       0.22   15.6   6.7       0.22   15.6   4.7    2.2  2  sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-binding 
+       0.23   15.6   0.3          1   13.5   0.1    1.9  2  sp|Q66J36|NFIL3_XENLA Nuclear factor interleukin-3-regulated
+       0.29   15.3   0.6       0.52   14.4   0.4    1.3  1  sp|Q8NHW3|MAFA_HUMAN  Transcription factor MafA OS=Homo sapi
+       0.37   14.9   0.5       0.76   13.9   0.3    1.5  1  sp|O88479|FOS_MESAU   Proto-oncogene c-Fos OS=Mesocricetus a
+       0.38   14.9   0.1       0.62   14.2   0.0    1.3  1  sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=Triticu
+       0.39   14.9   0.2       0.45   14.6   0.1    1.0  1  sp|Q90595|MAFF_CHICK  Transcription factor MafF OS=Gallus ga
+       0.39   14.8   3.0       0.76   13.9   0.4    2.1  2  sp|P53450|FOS_TAKRU   Proto-oncogene c-Fos OS=Takifugu rubri
+       0.43   14.7   2.8        1.1   13.3   1.9    1.7  1  sp|Q00969|ATF2_RAT    Cyclic AMP-dependent transcription fac
+       0.43   14.7   0.2       0.78   13.8   0.2    1.5  1  sp|O97930|FOS_PIG     Proto-oncogene c-Fos OS=Sus scrofa GN=
+       0.51   14.5   0.1       0.84   13.7   0.1    1.5  1  sp|P79145|CREM_CANFA  cAMP-responsive element modulator OS=C
+       0.52   14.4   2.9        1.1   13.3   2.0    1.6  1  sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcription fac
+       0.53   14.4   0.1       0.85   13.7   0.1    1.4  1  sp|P01101|FOS_MOUSE   Proto-oncogene c-Fos OS=Mus musculus G
+       0.54   14.4   0.1       0.54   14.4   0.1    1.8  1  sp|P15337|CREB1_RAT   Cyclic AMP-responsive element-binding 
+       0.54   14.4   0.1       0.54   14.4   0.1    1.9  1  sp|P16220|CREB1_HUMAN Cyclic AMP-responsive element-binding 
+       0.54   14.4   0.1       0.54   14.4   0.1    1.9  1  sp|Q01147|CREB1_MOUSE Cyclic AMP-responsive element-binding 
+       0.57   14.3   3.5        1.1   13.3   2.4    1.5  1  sp|O93602|ATF2_CHICK  Cyclic AMP-dependent transcription fac
+       0.63   14.1   0.7       0.75   13.9   0.5    1.1  1  sp|Q90889|MAFG_CHICK  Transcription factor MafG OS=Gallus ga
+       0.64   14.1   0.1          1   13.5   0.1    1.3  1  sp|P79702|FOS_CYPCA   Proto-oncogene c-Fos OS=Cyprinus carpi
+       0.64   14.1   3.7          1   13.5   2.5    1.2  1  sp|Q8X229|FCR3_CANAL  Fluconazole resistance protein 3 OS=Ca
+       0.65   14.1   0.3        1.3   13.1   0.2    1.6  1  sp|P12841|FOS_RAT     Proto-oncogene c-Fos OS=Rattus norvegi
+       0.71   14.0   4.9        1.3   13.1   3.4    1.4  1  sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein delta O
+       0.72   14.0   0.3       0.72   14.0   0.2    1.7  1  sp|Q554P0|BZPJ_DICDI  Probable basic-leucine zipper transcri
+       0.74   13.9   0.1       0.74   13.9   0.1    2.2  1  sp|Q55E93|BZPE_DICDI  Probable basic-leucine zipper transcri
+       0.75   13.9   0.2        1.1   13.4   0.1    1.2  1  sp|P51984|CREB_CHLVR  Cyclic AMP-responsive element-binding 
+       0.77   13.9   0.2          1   13.4   0.1    1.3  1  sp|P01102|FOS_MSVFB   p55-v-Fos-transforming protein OS=FBJ 
+       0.81   13.8   0.1        1.3   13.1   0.0    1.6  1  sp|O77628|FOS_BOVIN   Proto-oncogene c-Fos OS=Bos taurus GN=
+       0.82   13.8   4.0        0.9   13.6   2.7    1.1  1  sp|Q8WYK2|JDP2_HUMAN  Jun dimerization protein 2 OS=Homo sap
+       0.86   13.7   1.4        2.3   12.3   1.0    1.8  1  sp|Q60925|DBP_MOUSE   D site-binding protein OS=Mus musculus
+        0.9   13.6   0.6        1.5   12.9   0.4    1.3  1  sp|P14232|TGA1A_TOBAC TGACG-sequence-specific DNA-binding pr
+       0.96   13.6   1.4        2.3   12.3   1.0    1.7  1  sp|P16443|DBP_RAT     D site-binding protein OS=Rattus norve
+       0.97   13.5   0.0        1.5   12.9   0.0    1.3  1  sp|Q68EL6|NFIL3_DANRE Nuclear factor interleukin-3-regulated
+       0.98   13.5   0.2        1.7   12.7   0.2    1.5  1  sp|P01100|FOS_HUMAN   Proto-oncogene c-Fos OS=Homo sapiens G
+          1   13.5   2.7        1.5   12.9   1.9    1.2  1  sp|Q9C5Q2|AI5L3_ARATH ABSCISIC ACID-INSENSITIVE 5-like prote
+        1.1   13.4   0.2        2.1   12.4   0.2    1.4  1  sp|Q5FW38|NFIL3_XENTR Nuclear factor interleukin-3-regulated
+        1.1   13.4   0.1        1.9   12.5   0.1    1.5  1  sp|Q8HZP6|FOS_FELCA   Proto-oncogene c-Fos OS=Felis catus GN
+        1.2   13.3   3.1        1.9   12.6   2.2    1.3  1  sp|Q9SJN0|ABI5_ARATH  Protein ABSCISIC ACID-INSENSITIVE 5 OS
+        1.2   13.2   3.6        1.9   12.6   2.5    1.2  1  sp|P42777|GBF4_ARATH  G-box-binding factor 4 OS=Arabidopsis 
+        1.3   13.1   6.2        1.8   12.6   4.3    1.2  1  sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sapiens 
+        1.3   13.1   0.6        1.5   12.9   0.4    1.1  1  sp|O15525|MAFG_HUMAN  Transcription factor MafG OS=Homo sapi
+        1.4   13.0   0.1        2.5   12.2   0.0    1.3  1  sp|P40535|ACA2_YEAST  ATF/CREB activator 2 OS=Saccharomyces 
+        1.5   12.9   0.2        1.7   12.7   0.2    1.1  1  sp|A7YY73|MAFF_BOVIN  Transcription factor MafF OS=Bos tauru
+        1.6   12.9   0.4    1.9e+02    6.0   0.1    2.1  2  sp|Q8PY58|PSMR_METMA  Proteasome-activating nucleotidase OS=
+        1.6   12.8   0.5        3.2   11.8   0.4    1.5  1  sp|Q56TN0|FOS_PHORO   Proto-oncogene c-Fos OS=Phodopus robor
+        1.7   12.7   1.1        2.8   12.0   0.8    1.4  1  sp|P23050|FOS_AVINK   p55-v-Fos-transforming protein OS=Avia
+        1.8   12.6   2.3        2.8   12.0   1.6    1.2  1  sp|Q9LES3|AI5L2_ARATH ABSCISIC ACID-INSENSITIVE 5-like prote
+          2   12.5   2.7        3.5   11.7   1.8    1.4  1  sp|Q84JK2|FD_ARATH    Protein FD OS=Arabidopsis thaliana GN=
+          2   12.5   0.7        2.3   12.3   0.5    1.1  1  sp|A5PJV0|MAFG_BOVIN  Transcription factor MafG OS=Bos tauru
+          2   12.5   0.7        2.3   12.3   0.5    1.1  1  sp|O54790|MAFG_MOUSE  Transcription factor MafG OS=Mus muscu
+          2   12.5   2.7        3.4   11.7   1.9    1.3  1  sp|Q39234|TGA3_ARATH  Transcription factor TGA3 OS=Arabidops
+        2.2   12.4   1.4        3.3   11.8   1.0    1.3  1  sp|P07049|CPPB_NEIGO  Cryptic plasmid protein B OS=Neisseria
+        2.2   12.3   1.2        3.8   11.6   0.9    1.4  1  sp|P11939|FOS_CHICK   Proto-oncogene c-Fos OS=Gallus gallus 
+        2.5   12.2   0.0        2.9   12.0   0.0    1.3  1  sp|P29176|FOSX_MSVFR  Transforming protein v-Fos/v-Fox OS=FB
+        2.5   12.2   0.9        2.9   12.0   0.6    1.1  1  sp|O54791|MAFF_MOUSE  Transcription factor MafF OS=Mus muscu
+        2.7   12.1   0.3    1.9e+02    6.0   0.1    2.1  2  sp|Q8TI88|PSMR_METAC  Proteasome-activating nucleotidase OS=
+        2.8   12.0   0.4        5.5   11.1   0.3    1.4  1  sp|O08750|NFIL3_MOUSE Nuclear factor interleukin-3-regulated
+        2.8   12.0   0.7        3.4   11.7   0.5    1.1  1  sp|Q76MX4|MAFG_RAT    Transcription factor MafG OS=Rattus no
+          3   11.9   1.2        6.4   10.9   0.8    1.5  1  sp|P20482|CNC_DROME   Segmentation protein cap'n'collar OS=D
+        3.1   11.9   0.3        5.3   11.1   0.2    1.3  1  sp|Q90Z72|NFIL3_CHICK Nuclear factor interleukin-3-regulated
+        3.2   11.8   2.4        5.6   11.0   1.7    1.3  1  sp|Q9VWW0|CREBB_DROME Cyclic AMP response element-binding pr
+        3.2   11.8   2.0        4.9   11.2   1.4    1.3  1  sp|Q8BKJ9|SIRT7_MOUSE NAD-dependent deacetylase sirtuin-7 OS
+        3.3   11.8   0.2        6.3   10.9   0.1    1.5  1  sp|Q56TT7|FOS_PHOCM   Proto-oncogene c-Fos OS=Phodopus campb
+        3.3   11.8   0.5        5.8   11.0   0.3    1.3  1  sp|Q6IMZ0|NFIL3_RAT   Nuclear factor interleukin-3-regulated
+        3.5   11.7   5.3       0.94   13.6   1.6    1.4  1  sp|P38749|YAP3_YEAST  AP-1-like transcription factor YAP3 OS
+        3.7   11.6   0.4        5.5   11.0   0.2    1.2  1  sp|Q08D88|NFIL3_BOVIN Nuclear factor interleukin-3-regulated
+        3.8   11.6   0.4        5.9   11.0   0.3    1.2  1  sp|Q16649|NFIL3_HUMAN Nuclear factor interleukin-3-regulated
+        3.8   11.6   3.0        6.6   10.8   2.1    1.3  1  sp|Q9C7S0|BZI60_ARATH bZIP transcription factor 60 OS=Arabid
+        3.9   11.6   0.8        5.5   11.1   0.6    1.2  1  sp|P78962|ATF21_SCHPO Transcription factor atf21 OS=Schizosa
+          4   11.5   0.1        6.9   10.7   0.1    1.5  1  sp|Q1LZH5|CREM_BOVIN  cAMP-responsive element modulator OS=B
+        4.2   11.4   0.0        7.3   10.7   0.0    1.3  1  sp|B1MX63|THIE_LEUCK  Thiamine-phosphate pyrophosphorylase O
+        4.6   11.3   2.8        6.7   10.8   2.0    1.2  1  sp|Q5AVK6|NOP16_EMENI Nucleolar protein 16 OS=Emericella nid
+        4.6   11.3   1.0        5.5   11.1   0.7    1.1  1  sp|Q9ULX9|MAFF_HUMAN  Transcription factor MafF OS=Homo sapi
+        4.6   11.3   0.4        5.7   11.0   0.3    1.2  1  sp|P53567|CEBPG_HUMAN CCAAT/enhancer-binding protein gamma O
+        4.8   11.2   0.7         21    9.2   0.3    2.1  1  sp|Q2V2M9|FHOD3_HUMAN FH1/FH2 domain-containing protein 3 OS
+        4.9   11.2   0.1        7.1   10.7   0.1    1.3  1  sp|Q03060|CREM_HUMAN  cAMP-responsive element modulator OS=H
+        4.9   11.2   0.1         11   10.0   0.1    1.5  1  sp|O68007|BACB_BACLI  Bacitracin synthase 2 OS=Bacillus lich
+        5.1   11.2   0.5        7.6   10.6   0.4    1.2  1  sp|Q5VPE3|HOX2_ORYSJ  Homeobox-leucine zipper protein HOX2 O
+        5.1   11.2   0.5        7.6   10.6   0.4    1.2  1  sp|Q84U86|HOX2_ORYSI  Homeobox-leucine zipper protein HOX2 O
+        5.4   11.1   0.0        6.6   10.8   0.0    1.1  1  sp|Q65US7|THIE_MANSM  Thiamine-phosphate pyrophosphorylase O
+        5.4   11.1   0.2        8.6   10.4   0.2    1.2  1  sp|P07948|LYN_HUMAN   Tyrosine-protein kinase Lyn OS=Homo sa
+        5.4   11.1   9.6        1.1   13.4   4.3    1.6  1  sp|Q16534|HLF_HUMAN   Hepatic leukemia factor OS=Homo sapien
+        5.5   11.1   0.9        6.6   10.8   0.6    1.2  1  sp|Q9XGJ4|GGM13_GNEGN MADS-box protein GGM13 OS=Gnetum gnemo
+        5.8   11.0   0.6        9.2   10.3   0.4    1.3  1  sp|P27921|JUND_CHICK  Transcription factor jun-D OS=Gallus g
+        5.9   10.9   1.0        8.8   10.4   0.7    1.2  1  sp|Q5XHX8|THEG_RAT    Testicular haploid expressed gene prot
+          6   10.9   2.3        8.7   10.4   1.6    1.2  1  sp|P18847|ATF3_HUMAN  Cyclic AMP-dependent transcription fac
+        6.1   10.9   5.5        8.7   10.4   3.8    1.2  1  sp|P24068|OCS1_MAIZE  Ocs element-binding factor 1 OS=Zea ma
+        6.2   10.9   6.0         11   10.1   4.2    1.3  1  sp|P20393|NR1D1_HUMAN Nuclear receptor subfamily 1 group D m
+        6.3   10.9  12.2         10   10.2   8.1    1.6  1  sp|P13346|FOSB_MOUSE  Protein fosB OS=Mus musculus GN=Fosb P
+        6.4   10.8   2.1         13    9.8   1.5    1.4  1  sp|P42775|GBF2_ARATH  G-box-binding factor 2 OS=Arabidopsis 
+        6.5   10.8  11.4         20    9.2   7.9    1.8  1  sp|Q09926|PCR1_SCHPO  Transcription factor pcr1 OS=Schizosac
+        6.9   10.7   2.2         11   10.0   1.5    1.3  1  sp|P24813|YAP2_YEAST  AP-1-like transcription activator YAP2
+          7   10.7   9.2        1.9   12.5   4.4    1.5  1  sp|Q64709|HLF_RAT     Hepatic leukemia factor OS=Rattus norv
+        7.3   10.6   0.4         12    9.9   0.3    1.3  1  sp|Q02100|SKO1_YEAST  CRE-binding bZIP protein SKO1 OS=Sacch
+        7.7   10.6   0.0         11   10.0   0.0    1.2  1  sp|P50198|LINX_PSEPA  2,5-dichloro-2,5-cyclohexadiene-1,4-di
+        7.7   10.6   5.8         10   10.2   4.0    1.1  1  sp|Q6DGM8|JDP2_DANRE  Jun dimerization protein 2 OS=Danio re
+        7.8   10.6   0.5        9.1   10.3   0.4    1.2  1  sp|A2Z0Q0|HOX25_ORYSI Homeobox-leucine zipper protein HOX25 
+        7.9   10.5   0.5         13    9.8   0.3    1.2  1  sp|Q9UPR3|SMG5_HUMAN  Protein SMG5 OS=Homo sapiens GN=SMG5 P
+        8.1   10.5   6.6        1.1   13.3   1.4    1.9  1  sp|Q41558|HBP1C_WHEAT Transcription factor HBP-1b(c1) (Fragm
+        8.2   10.5  11.7         13    9.9   7.9    1.5  1  sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein delta O
+        8.6   10.4   0.2         17    9.4   0.2    1.4  1  sp|Q63315|CAD22_RAT   Cadherin-22 OS=Rattus norvegicus GN=Cd
+        8.7   10.4   0.2         17    9.4   0.2    1.4  1  sp|Q9WTP5|CAD22_MOUSE Cadherin-22 OS=Mus musculus GN=Cdh22 P
+        9.3   10.3   3.3        8.4   10.5   0.5    1.8  2  sp|Q5FUV3|ATE_GLUOX   Putative arginyl-tRNA--protein transfe
+        9.5   10.3   5.0         17    9.4   3.5    1.4  1  sp|Q99091|CPRF3_PETCR Light-inducible protein CPRF3 OS=Petro
+        9.5   10.3  10.3        1.3   13.1   4.4    1.5  1  sp|Q8BW74|HLF_MOUSE   Hepatic leukemia factor OS=Mus musculu
+        9.9   10.2   0.4         17    9.5   0.3    1.4  1  sp|Q9JLC6|TEF_MOUSE   Thyrotroph embryonic factor OS=Mus mus
+         10   10.2   0.5         15    9.6   0.4    1.2  1  sp|Q92172|TEF_CHICK   Transcription factor VBP OS=Gallus gal
+
+
+Domain annotation for each sequence (and alignments):
+>> sp|Q1XGE2|HAC1_ASPOR  Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  762.0   2.4  8.7e-232  2.2e-228       1     345 []       1     345 []       1     345 [] 1.00
+
+  Alignments for each domain:
+  == domain 1    score: 762.0 bits;  conditional E-value: 8.7e-232
+  sp|Q1XGE2|HAC1_ASPOR   1 lscdlektlssvdslpatpasevpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrrier 89 
+                           +scd+ekt+ssvdslpatpasevpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrrier
+  sp|Q1XGE2|HAC1_ASPOR   1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER 89 
+                           8**************************************************************************************** PP
+
+  sp|Q1XGE2|HAC1_ASPOR  90 vlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasptltptlfkqe 178
+                           vlrnraaaqtsrerkrle+eklenekiq+eqqnqfllqrlsq+eaennrlsqqlaqlaaevrgsrantp+pgspatasptltptlfkqe
+  sp|Q1XGE2|HAC1_ASPOR  90 VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178
+                           ***************************************************************************************** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 179 rdelpleripfptpslsdysptlkpstlaessdvaqhpavsvaglegdgsalplfdlgsdlkhhstddvaaplsdddfnrlfhgdssve 267
+                           rdelpleripfptpslsdysptlkpstlaessdvaqhpavsvaglegdgsalplfdlgsdlkhhstddvaaplsdddfnrlfhgdssve
+  sp|Q1XGE2|HAC1_ASPOR 179 RDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVE 267
+                           ***************************************************************************************** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 268 pdssvfedglafdvleggdlsafpfdslvnfdsepvtlegielahglpdettcktssvqpgfgasttrcdgqgiaagc 345
+                           pdssvfedglafdvleggdlsafpfds+vnfdsepvtlegie+ahglpdettcktssvqpgfgasttrcdgqgiaagc
+  sp|Q1XGE2|HAC1_ASPOR 268 PDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 345
+                           ****************************************************************************** PP
+
+>> sp|Q8TFU8|HAC1_EMENI  Transcriptional activator hacA OS=Emericella nidulans GN=hacA PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  568.6   1.6  5.8e-173  1.5e-169      11     344 ..      16     348 ..       9     349 .. 0.98
+
+  Alignments for each domain:
+  == domain 1    score: 568.6 bits;  conditional E-value: 5.8e-173
+  sp|Q1XGE2|HAC1_ASPOR  11 svdslpatpasevpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqt 99 
+                             +slp tp+ evpvltvspadtsl++ +v  q  kpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqt
+  sp|Q8TFU8|HAC1_EMENI  16 FANSLPTTPSLEVPVLTVSPADTSLQTKNVVAQ-TKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 103
+                           4689*************************9876.7****************************************************** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 100 srerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasptltptlfkqerdelplerip 188
+                           srerkrle+ekle+eki++eqqnqfllqrl+q+eaennrlsqq+aql+aevrgsr +tp   spa+ sptltptlfkqe de+pl+rip
+  sp|Q8TFU8|HAC1_EMENI 104 SRERKRLEMEKLESEKIDMEQQNQFLLQRLAQMEAENNRLSQQVAQLSAEVRGSRHSTPTSSSPASVSPTLTPTLFKQEGDEVPLDRIP 192
+                           ***************************************************************************************** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 189 fptpslsdysptlkpstlaessdvaqhpavsvaglegdgsalplfdlgsdlkhhstddvaaplsdddfnrlfhgdssvepdssvfedgl 277
+                           fptps++dysptlkps+laes d+ qhpavsv+glegd sal lfdlg+ +kh  t d+ aplsdddf+rlf+gdss+e dss+ edg+
+  sp|Q8TFU8|HAC1_EMENI 193 FPTPSVTDYSPTLKPSSLAESPDLTQHPAVSVGGLEGDESALTLFDLGASIKHEPTHDLTAPLSDDDFRRLFNGDSSLESDSSLLEDGF 281
+                           ***************************************************************************************** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 278 afdvleggdlsafpfdslvnfdsepvtlegielahglpdettcktssvqpgfgasttrcdgqgiaag 344
+                           afdvl+ gdlsafpfds+v+fd+epvtle +e+ +gl d  +ck +s+qp  gast+rcdgqgiaag
+  sp|Q8TFU8|HAC1_EMENI 282 AFDVLDSGDLSAFPFDSMVDFDTEPVTLEDLEQTNGLSDSASCKAASLQPSHGASTSRCDGQGIAAG 348
+                           ******************************************************************9 PP
+
+>> sp|Q8TFF3|HAC1_TRIRE  Transcriptional activator hac1 OS=Trichoderma reesei GN=hac1 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   98.4   6.4   5.8e-30   1.5e-26      47     119 ..      82     154 ..      45     184 .. 0.86
+   2 ?   -0.5   0.0       7.1   1.8e+04     209     234 ..     287     308 ..     278     351 .. 0.70
+   3 ?    3.2   0.0      0.52   1.3e+03     315     344 ..     421     450 ..     356     451 .] 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 98.4 bits;  conditional E-value: 5.8e-30
+  sp|Q1XGE2|HAC1_ASPOR  47 peekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqle 119
+                             ekkp kkrkswgq lp pktnlpprkraktedekeqrr+ervlrnr aaq+srerkrle+e le +  +le
+  sp|Q8TFF3|HAC1_TRIRE  82 TSEKKPVKKRKSWGQVLPEPKTNLPPRKRAKTEDEKEQRRVERVLRNRRAAQSSRERKRLEVEALEKRNKELE 154
+                           469*************************************************************997765554 PP
+
+  == domain 2    score: -0.5 bits;  conditional E-value: 7.1
+  sp|Q1XGE2|HAC1_ASPOR 209 ssdvaqhpavsvaglegdgsalplfd 234
+                           s+d  q+pavs++g   d +a+p+f 
+  sp|Q8TFF3|HAC1_TRIRE 287 STDSTQRPAVSIGG---D-AAVPVFS 308
+                           67778888888754...3.5667763 PP
+
+  == domain 3    score: 3.2 bits;  conditional E-value: 0.52
+  sp|Q1XGE2|HAC1_ASPOR 315 pdettcktssvqpgfgasttrcdgqgiaag 344
+                            ++   + s  qp  gas+  cd  gia g
+  sp|Q8TFF3|HAC1_TRIRE 421 ENQIPSRHSIQQPQSGASSHGCDDGGIAVG 450
+                           455566778889****************98 PP
+
+>> sp|P41546|HAC1_YEAST  Transcriptional activator HAC1 OS=Saccharomyces cerevisiae GN=HAC1 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   52.6   3.9     5e-16   1.3e-12      67     119 ..      23      75 ..      12     145 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 52.6 bits;  conditional E-value: 5e-16
+  sp|Q1XGE2|HAC1_ASPOR  67 ktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqle 119
+                           k+ lpprkrakt++ekeqrrier+lrnr aa+ sre+krl+l+ le++   le
+  sp|P41546|HAC1_YEAST  23 KSTLPPRKRAKTKEEKEQRRIERILRNRRAAHQSREKKRLHLQYLERKCSLLE 75 
+                           789******************************************98765555 PP
+
+>> sp|O24646|HY5_ARATH  Transcription factor HY5 OS=Arabidopsis thaliana GN=HY5 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   46.9   1.8   2.7e-14   6.9e-11      59     153 ..      64     158 ..      49     167 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 46.9 bits;  conditional E-value: 2.7e-14
+  sp|Q1XGE2|HAC1_ASPOR  59 wgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147
+                            gqe      +   rkr++t  eke +r++r+lrnr +aq +rerk+  l  len+  +le +n  l +rls l+ en+ l + l    
+   sp|O24646|HY5_ARATH  64 TGQERTQATVGESQRKRGRTPAEKENKRLKRLLRNRVSAQQARERKKAYLSELENRVKDLENKNSELEERLSTLQNENQMLRHILKNTT 152
+                           57777777777789******************************************************************999998888 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 148 aevrgs 153
+                           +  rg+
+   sp|O24646|HY5_ARATH 153 GNKRGG 158
+                           888876 PP
+
+>> sp|Q3SZZ2|XBP1_BOVIN  X-box-binding protein 1 OS=Bos taurus GN=XBP1 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   33.9   0.5   2.4e-10     6e-07      68     145 ..      52     139 ..      10     208 .. 0.72
+
+  Alignments for each domain:
+  == domain 1    score: 33.9 bits;  conditional E-value: 2.4e-10
+  sp|Q1XGE2|HAC1_ASPOR  68 tnlpp..rkrak.tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfll.......qrlsqleaennrlsqqlaq 145
+                           +++pp  rkr + t+   e++ ++r l+nr aaqt+r+rk+ ++  le++ ++le++nq ll       ++   l  en+ l q+l++
+  sp|Q3SZZ2|XBP1_BOVIN  52 SGVPPqaRKRQRlTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKLLlenqllrEKTHGLVVENQELRQRLGM 139
+                           56677334554436778999***********************************999876622211112233455667777776654 PP
+
+>> sp|Q9SM50|HY5_SOLLC  Transcription factor HY5 OS=Solanum lycopersicum GN=HY5 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   33.3   3.9   3.7e-10   9.5e-07      72     148 ..      75     151 ..      62     158 .] 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 33.3 bits;  conditional E-value: 3.7e-10
+  sp|Q1XGE2|HAC1_ASPOR  72 prkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148
+                            rkr+++  +ke +r++r+lrnr +aq +rerk+  l  le +  +le +n  l +rls l+ en+ l + l    a
+   sp|Q9SM50|HY5_SOLLC  75 QRKRGRSPADKENKRLKRLLRNRVSAQQARERKKAYLIDLEARVKELETKNAELEERLSTLQNENQMLRHILKNTTA 151
+                           69*****************************************99********************999887766555 PP
+
+>> sp|P17861|XBP1_HUMAN  X-box-binding protein 1 OS=Homo sapiens GN=XBP1 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   32.0   2.0   9.4e-10   2.4e-06      72     186 ..      58     185 ..      14     194 .. 0.72
+
+  Alignments for each domain:
+  == domain 1    score: 32.0 bits;  conditional E-value: 9.4e-10
+  sp|Q1XGE2|HAC1_ASPOR  72 prkrak.tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfll.......qrlsqleaennrlsqqlaq..la... 147
+                            rkr + t+   e++ ++r l+nr aaqt+r+rk+ ++  le++ ++le++nq ll       ++   l  en+ l q+l++  l    
+  sp|P17861|XBP1_HUMAN  58 ARKRQRlTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKLLlenqllrEKTHGLVVENQELRQRLGMdaLVaee 146
+                           366655367788999**********************************9998765332111133445667898899888652232122 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 148 .aevrgsrantplpgspatasptltptlfkqerdelpler 186
+                            ae +g+    p+ gs  +a+  l   l + + +  pl+ 
+  sp|P17861|XBP1_HUMAN 147 eAEAKGNEV-RPVAGSAESAALRLRAPLQQVQAQLSPLQN 185
+                           234444433.477788777777777666655555556665 PP
+
+>> sp|Q8W191|HYH_ARATH  Transcription factor HY5-like OS=Arabidopsis thaliana GN=HYH PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   29.6   3.4   4.9e-09   1.2e-05      72     144 ..      67     139 ..      56     146 .. 0.93
+
+  Alignments for each domain:
+  == domain 1    score: 29.6 bits;  conditional E-value: 4.9e-09
+  sp|Q1XGE2|HAC1_ASPOR  72 prkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144
+                            r+r++   +ke r ++r+lrnr +aq +rerk++ +  le++  +l+  n+ l +++s l  en  l ++l 
+   sp|Q8W191|HYH_ARATH  67 KRRRGRNPVDKEYRSLKRLLRNRVSAQQARERKKVYVSDLESRANELQNNNDQLEEKISTLTNENTMLRKMLI 139
+                           69999*************************************************************9998876 PP
+
+>> sp|A1L224|CR3L2_DANRE  Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Danio rerio GN=creb3l2 PE=2 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   28.0   0.0   1.5e-08   3.8e-05      14     155 ..     221     363 ..     208     384 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 28.0 bits;  conditional E-value: 1.5e-08
+   sp|Q1XGE2|HAC1_ASPOR  14 slpatpasevpvltvsp.adtslnsadvktqevkpeekkpa.....kkrkswgqelpvpktnlpprkraktedekeqrriervlrnra 95 
+                            + pa+p +   vl v+p a +sl+s+ + t   k +   p       kr    +  pvp t lp  k     +ek  ++i+r ++n+ 
+  sp|A1L224|CR3L2_DANRE 221 CAPASPTQTPAVLKVAPrAPSSLSSSPLLTAPHKLQGSGPLllteeEKRTLIAEGYPVP-TKLPLSK----AEEKALKKIRRKIKNKI 303
+                            56999999889999999567899999999988888888875222225777778888888.6777544....468999*********** PP
+
+   sp|Q1XGE2|HAC1_ASPOR  96 aaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsra 155
+                            +aq sr++k+  ++ le +   +  +n+ l +++  le+ n  l qql  l a v g   
+  sp|A1L224|CR3L2_DANRE 304 SAQESRRKKKEYVDALEKKVETCSNENHELRRKVENLECTNKSLLQQLHSLQAVVAGKVP 363
+                            **********99*****98888999****************************9999644 PP
+
+>> sp|Q9D2A5|CR3L4_MOUSE  Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Mus musculus GN=Creb3l4 PE=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   26.6   1.7   4.1e-08    0.0001      76     147 ..     186     257 ..     114     274 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 26.6 bits;  conditional E-value: 4.1e-08
+   sp|Q1XGE2|HAC1_ASPOR  76 aktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147
+                                +e+  ++i+r +rn+ +aq sr+rk+  l+ le++   + +qnq l +++++le +n  l +q+ ql 
+  sp|Q9D2A5|CR3L4_MOUSE 186 LTKAEERILKKIRRKIRNKQSAQDSRRRKKEYLDGLESRVAACSEQNQKLQRKVQELERQNIFLMEQVRQLQ 257
+                            44456788999*****************************************************99998875 PP
+
+>> sp|Q9R1S4|XBP1_RAT  X-box-binding protein 1 OS=Rattus norvegicus GN=Xbp1 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   26.6   2.2   4.2e-08   0.00011      73     127 ..      52     106 ..      37     148 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 26.6 bits;  conditional E-value: 4.2e-08
+  sp|Q1XGE2|HAC1_ASPOR  73 rkrak.tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllq 127
+                           rkr + t+   e++ ++r l+nr aaqt+r+rk+ ++  le++ ++le++nq l q
+    sp|Q9R1S4|XBP1_RAT  52 RKRQRlTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKL-Q 106
+                           55554267788999***********************************99965.3 PP
+
+>> sp|Q54WN7|BZPF_DICDI  Probable basic-leucine zipper transcription factor F OS=Dictyostelium discoideum GN=bzpF PE=3 S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   25.2   0.3   1.1e-07   0.00027      46     175 ..     363     498 ..     347     593 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 25.2 bits;  conditional E-value: 1.1e-07
+  sp|Q1XGE2|HAC1_ASPOR  46 kpeekkpakkrkswgqelpvpk....tnlpp.rkr.aktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqr 128
+                           k ee k  kkrk      pv      t l p        ++e++q+r +r+++nr aaq  r+r++  ++ le +  +l   n  +  r
+  sp|Q54WN7|BZPF_DICDI 363 KKEEDKSIKKRKFI-SSTPVKGenggTTLIPtTDGgFNMDEERHQKRQRRLVKNREAAQLFRQRQKAYIQDLEKKVSDLTGTNSEFRAR 450
+                           56677777777754.44566431122444440443135677899******************************999******9999** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 129 lsqleaennrlsqqlaqlaaevrgs.rantplpgspatasptltptlf 175
+                           +  l +en  + +ql  l   v  +   + p  gs +t sp+     f
+  sp|Q54WN7|BZPF_DICDI 451 VELLNSENKLIREQLLYLRNFVTQAvSFSFPKGGSNGTNSPSGVADQF 498
+                           *****************9988765415678999999999998665555 PP
+
+>> sp|A2VD01|CR3L2_XENLA  Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Xenopus laevis GN=creb3l2 PE
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   24.7   0.2   1.6e-07    0.0004      60     157 ..     281     373 ..     241     392 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 24.7 bits;  conditional E-value: 1.6e-07
+   sp|Q1XGE2|HAC1_ASPOR  60 gqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147
+                             +  p+p t lp  k     +ek  ++i+r ++n+ +aq sr++k+  ++ le +      +n  l +++  le+ n+ l qql +l 
+  sp|A2VD01|CR3L2_XENLA 281 AEGYPIP-TKLPLTK----AEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKRVENSSSENSELRKKVEVLESTNRTLLQQLQRLQ 363
+                            5556666.5666543....368999****************************99889999*************************** PP
+
+   sp|Q1XGE2|HAC1_ASPOR 148 aevrgsrant 157
+                            a v g   ++
+  sp|A2VD01|CR3L2_XENLA 364 AMVTGKVTRS 373
+                            ***9976554 PP
+
+>> sp|Q99090|CPRF2_PETCR  Light-inducible protein CPRF2 OS=Petroselinum crispum GN=CPRF2 PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   25.4   3.1   9.1e-08   0.00023      77     162 ..     192     277 ..     187     312 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 25.4 bits;  conditional E-value: 9.1e-08
+   sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgs 162
+                            +  d  + +r++r+l nr +a+ sr+rk+ ++  le +  ql+ +n  ll+rl+++  + n  + +   l a++   ra   +   
+  sp|Q99090|CPRF2_PETCR 192 RNGDPSDAKRVRRMLSNRESARRSRRRKQAHMTELETQVSQLRVENSSLLKRLTDISQRYNDAAVDNRVLKADIETMRAKVKMAEE 277
+                            56788999*************************************************99999999999999999999999888655 PP
+
+>> sp|Q5FVM5|CR3L3_RAT  Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Rattus norvegicus GN=Creb3l3 P
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   24.2   0.2   2.2e-07   0.00056      77     154 ..     233     310 ..     219     328 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 24.2 bits;  conditional E-value: 2.2e-07
+  sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsr 154
+                              +e+  ++i+r +rn+ +aq sr++k+  ++ len+   +  qnq l +++ +le +n  l +ql +l a v  s 
+   sp|Q5FVM5|CR3L3_RAT 233 TKYEERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNLSLLEQLKHLQALVVQST 310
+                           4456788899***********************************************************999876554 PP
+
+>> sp|O35426|XBP1_MOUSE  X-box-binding protein 1 OS=Mus musculus GN=Xbp1 PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   24.5   2.2   1.7e-07   0.00044      73     127 ..      52     106 ..      36     135 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 24.5 bits;  conditional E-value: 1.7e-07
+  sp|Q1XGE2|HAC1_ASPOR  73 rkrak.tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllq 127
+                           rkr + t+   e++ ++r l+nr aaqt+r+rk+ ++  le++ ++le++n+ l q
+  sp|O35426|XBP1_MOUSE  52 RKRQRlTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENHKL-Q 106
+                           55554267788999*********************************9998754.3 PP
+
+>> sp|Q61817|CREB3_MOUSE  Cyclic AMP-responsive element-binding protein 3 OS=Mus musculus GN=Creb3 PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   24.5   0.0   1.7e-07   0.00043      80     151 ..     182     253 ..     163     315 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 24.5 bits;  conditional E-value: 1.7e-07
+   sp|Q1XGE2|HAC1_ASPOR  80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr 151
+                            +e+  +r++r +rn+ aaq sr++k++ +  le++ ++   qn+ l  ++++le +n  l +ql +l a v 
+  sp|Q61817|CREB3_MOUSE 182 EEQVLKRVRRKIRNKRAAQESRKKKKVYVVGLESRVLKYTAQNRELQNKVQRLEEQNLSLLDQLRKLQAMVI 253
+                            4566799***********************************************************999774 PP
+
+>> sp|Q91XE9|CR3L3_MOUSE  Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Mus musculus GN=Creb3l3 PE=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   24.1   0.2   2.3e-07   0.00058      77     154 ..     233     310 ..     219     329 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 24.1 bits;  conditional E-value: 2.3e-07
+   sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsr 154
+                               +e+  ++i+r +rn+ +aq sr++k+  ++ len+   +  qnq l +++ +le +n  l +ql +l a v  s 
+  sp|Q91XE9|CR3L3_MOUSE 233 TKYEERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNLSLLEQLKHLQALVVQST 310
+                            4456788899***********************************************************999876554 PP
+
+>> sp|O57342|MAFA_COTJA  Transcription factor MafA OS=Coturnix coturnix japonica GN=MAFA PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   -0.8   0.1       8.7   2.2e+04     156     180 ..      69      93 ..      22      97 .. 0.76
+   2 !   24.1   1.4   2.3e-07    0.0006      85     167 ..     201     281 ..     174     285 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: -0.8 bits;  conditional E-value: 8.7
+  sp|Q1XGE2|HAC1_ASPOR 156 ntplpgspatasptltptlfkqerd 180
+                             p pg+  +a+pt  p   k + +
+  sp|O57342|MAFA_COTJA  69 CAPSPGGQPSAGPTAAPLGSKPQLE 93 
+                           4688888888999988876666655 PP
+
+  == domain 2    score: 24.1 bits;  conditional E-value: 2.3e-07
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatas 167
+                           ++ +r l+nr+ aq++r ++  + + lenek+ql+ q + l q +s+l  e++   ++  +laa  rg    t  p +p t +
+  sp|O57342|MAFA_COTJA 201 KQKRRTLKNRGYAQSCRYKRVQQRHILENEKCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPRETSPPAAPKTTA 281
+                           445699***********988888999************************************98..89888898899998865 PP
+
+>> sp|Q5UEM7|CR3L4_RAT  Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Rattus norvegicus GN=Creb3l4 P
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   23.1   2.2   4.8e-07    0.0012      78     148 ..     184     254 ..     165     270 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 23.1 bits;  conditional E-value: 4.8e-07
+  sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148
+                             +e+  ++i+r +rn+ +aq sr+rk+  ++ le++   + +qnq l +++++le +n  l  q+ ql  
+   sp|Q5UEM7|CR3L4_RAT 184 KAEERILKKIRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSEQNQKLQRKVQELERQNISLVAQVHQLQK 254
+                           346788899**************************************************999988888753 PP
+
+>> sp|Q08CW8|CR3L4_XENTR  Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Xenopus tropicalis GN=creb3l
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   23.5   0.3   3.5e-07   0.00089      24     151 ..     160     284 ..     150     296 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 23.5 bits;  conditional E-value: 3.5e-07
+   sp|Q1XGE2|HAC1_ASPOR  24 pvltvspadtslnsadvk.tqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrlelek 110
+                            pv+  +p    l  ad+   + + pe       ++   qe      nlp  k     +e+  ++++r +rn+ +aq sr+rk+  ++ 
+  sp|Q08CW8|CR3L4_XENTR 160 PVCKSTPLPIRLTPADLIaVDALYPELHLTEEEKRLLSQEGVALPNNLPLTK----AEERILKKVRRKIRNKQSAQDSRRRKKEYIDG 243
+                            4444555555566666430344556666555566666677655557888655....3578889999********************** PP
+
+   sp|Q1XGE2|HAC1_ASPOR 111 lenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr 151
+                            le++   +  qnq l +++ +le +n  l  ql +l   ++
+  sp|Q08CW8|CR3L4_XENTR 244 LESRVAACSSQNQELHKKVVELEKHNISLITQLRKLQTLIK 284
+                            ********************************999877665 PP
+
+>> sp|Q90370|MAFB_COTJA  Transcription factor MafB OS=Coturnix coturnix japonica GN=MAFB PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    1.5   0.0       1.8   4.5e+03     115     178 ..      15      81 ..       8     103 .. 0.70
+   2 !   21.5   1.0   1.4e-06    0.0035      53     149 ..     195     292 ..     168     309 .. 0.71
+
+  Alignments for each domain:
+  == domain 1    score: 1.5 bits;  conditional E-value: 1.8
+  sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrlsqle...aennrlsqqlaqlaaevrgsrantpl..pgspatasptltptlfkqe 178
+                            + +e  n+f l++++  +   ++n+r ++++ +l     gs ++tp+  p s   +sp+++pt  k +
+  sp|Q90370|MAFB_COTJA  15 PLAMEYVNDFDLMKFDVKKeplGRNDRSGRHCTRLQ--PAGSVSSTPIstPCSSVPSSPSFSPTEQKTH 81 
+                           567888888888877643312257788888877764..4677777775446777778999999976655 PP
+
+  == domain 2    score: 21.5 bits;  conditional E-value: 1.4e-06
+  sp|Q1XGE2|HAC1_ASPOR  53 akkrkswgqelpvpktnlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140
+                              r s  q + +    l  + r+ t+de  + ++ +r l+nr+ aq++r ++  + + lenek ql qq + l q +++l  e++   
+  sp|Q90370|MAFB_COTJA 195 VEDRFSDDQLVSMSVRELNRHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVTRLARERDAYK 283
+                           555666666666666667777888999987552556799***********988888999*********************999998877 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 141 qqlaqlaae 149
+                            ++ +la+ 
+  sp|Q90370|MAFB_COTJA 284 LKCEKLASN 292
+                           777777654 PP
+
+>> sp|Q68CJ9|CR3L3_HUMAN  Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Homo sapiens GN=CREB3L3 PE=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   22.7   0.0   6.1e-07    0.0015      77     161 ..     237     321 ..     222     385 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 22.7 bits;  conditional E-value: 6.1e-07
+   sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpg 161
+                               +e+  ++i+r +rn+ +aq sr++k+  ++ le +   +  qnq l +++ +le +n  l +ql +l a v  s + + + g
+  sp|Q68CJ9|CR3L3_HUMAN 237 TKYEERVLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNLSLLEQLKKLQAIVVQSTSKSAQTG 321
+                            345678889*************************************************************998877776666655 PP
+
+>> sp|Q1LYG4|CR3LB_DANRE  Cyclic AMP-responsive element-binding protein 3-like protein 3-B OS=Danio rerio GN=creb3l3b PE
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   22.4   0.3   7.4e-07    0.0019      78     160 ..     205     286 ..     190     305 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 22.4 bits;  conditional E-value: 7.4e-07
+   sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplp 160
+                              +e+  ++i+r +rn+ +aq sr++k+  ++ le++   +  +n+ l +++ qle  n  l +ql +l a v  + +n p+ 
+  sp|Q1LYG4|CR3LB_DANRE 205 KYEERILKKIRRKIRNKQSAQESRKKKKEYIDGLESRMAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG-SNKPVQ 286
+                            346788899************************************************************9988643.466655 PP
+
+>> sp|Q502F0|CR3LA_DANRE  Cyclic AMP-responsive element-binding protein 3-like protein 3-A OS=Danio rerio GN=creb3l3a PE
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   22.3   0.4   8.1e-07    0.0021      78     160 ..     205     286 ..     187     305 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 22.3 bits;  conditional E-value: 8.1e-07
+   sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplp 160
+                              +e+  ++i+r +rn+ +aq sr++k+  ++ le++   +  +n+ l +++ qle  n  l +ql +l a v  + +n p+ 
+  sp|Q502F0|CR3LA_DANRE 205 KYEERILKKIRRKIRNKQSAQESRKKKKEYIDGLESRMAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG-SNKPVQ 286
+                            446788899************************************************************9988643.466655 PP
+
+>> sp|Q90888|MAFB_CHICK  Transcription factor MafB OS=Gallus gallus GN=MAFB PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    1.5   0.0       1.8   4.5e+03     115     178 ..      15      81 ..       8     103 .. 0.70
+   2 !   21.3   1.3   1.7e-06    0.0043      52     149 ..     194     292 ..     167     309 .. 0.71
+
+  Alignments for each domain:
+  == domain 1    score: 1.5 bits;  conditional E-value: 1.8
+  sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrlsqle...aennrlsqqlaqlaaevrgsrantpl..pgspatasptltptlfkqe 178
+                            + +e  n+f l++++  +   ++n+r ++++ +l     gs ++tp+  p s   +sp+++pt  k +
+  sp|Q90888|MAFB_CHICK  15 PLAMEYVNDFDLMKFDVKKeplGRNDRSGRHCTRLQ--PAGSVSSTPIstPCSSVPSSPSFSPTEQKTH 81 
+                           567888888888877643312257788888877764..4677777775446777778999999976655 PP
+
+  == domain 2    score: 21.3 bits;  conditional E-value: 1.7e-06
+  sp|Q1XGE2|HAC1_ASPOR  52 pakkrkswgqelpvpktnlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrl 139
+                               r s  q + +    l  + r+ t+de  + ++ +r l+nr+ aq++r ++  + + lenek ql qq + l q +++l  e++  
+  sp|Q90888|MAFB_CHICK 194 SVEDRFSDDQLVSMSVRELNRHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVTRLARERDAY 282
+                           4555666666666666677777889999997552556799***********988888999*********************99999887 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 140 sqqlaqlaae 149
+                             ++ +la+ 
+  sp|Q90888|MAFB_CHICK 283 KLKCEKLASN 292
+                           7777777654 PP
+
+>> sp|Q3SYZ3|CR3L3_BOVIN  Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Bos taurus GN=CREB3L3 PE=2 S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   23.0   0.1     5e-07    0.0013      77     161 ..     232     316 ..     217     371 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 23.0 bits;  conditional E-value: 5e-07
+   sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpg 161
+                               +e+  ++i+r +rn+ +aq sr++k+  ++ le +   +  qnq l +++ +le +n  l +ql +l a v  s + + + g
+  sp|Q3SYZ3|CR3L3_BOVIN 232 TKYEERMLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNLSLLEQLKKLQAIVVQSTSKSAQTG 316
+                            4456788899************************************************************998877766655555 PP
+
+>> sp|Q5RCM9|CR3L2_PONAB  Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Pongo abelii GN=CREB3L2 PE=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   22.2   0.1   9.1e-07    0.0023      54     159 ..     270     370 ..     226     388 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 22.2 bits;  conditional E-value: 9.1e-07
+   sp|Q1XGE2|HAC1_ASPOR  54 kkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141
+                             kr    +  p+p t lp  k     +ek  ++i+r ++n+ +aq sr++k+  ++ le +   +  +n  l +++  le  n+ l q
+  sp|Q5RCM9|CR3L2_PONAB 270 EKRTLIAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQ 352
+                            5555666667776.5676544....468999****************************988889999******************** PP
+
+   sp|Q1XGE2|HAC1_ASPOR 142 qlaqlaaevrgsrantpl 159
+                            ql +l   v g  ++t  
+  sp|Q5RCM9|CR3L2_PONAB 353 QLQKLQTLVMGKVSRTCK 370
+                            *******99998777754 PP
+
+>> sp|Q9Y5Q3|MAFB_HUMAN  Transcription factor MafB OS=Homo sapiens GN=MAFB PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   22.3   0.2   8.3e-07    0.0021      72     148 ..     226     303 ..     170     321 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 22.3 bits;  conditional E-value: 8.3e-07
+  sp|Q1XGE2|HAC1_ASPOR  72 prkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148
+                            + r+ t+de  + ++ +r l+nr+ aq++r ++  + + lenek ql qq + l q +s+l  e++    ++ +la 
+  sp|Q9Y5Q3|MAFB_HUMAN 226 RHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLAN 303
+                           55677788886541556799***********988888999**********************9999887666655553 PP
+
+>> sp|Q70SY1|CR3L2_HUMAN  Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Homo sapiens GN=CREB3L2 PE=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   22.0   0.1     1e-06    0.0027      54     159 ..     270     370 ..     226     388 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 22.0 bits;  conditional E-value: 1e-06
+   sp|Q1XGE2|HAC1_ASPOR  54 kkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141
+                             kr    +  p+p t lp  k     +ek  ++i+r ++n+ +aq sr++k+  ++ le +   +  +n  l +++  le  n+ l q
+  sp|Q70SY1|CR3L2_HUMAN 270 EKRTLIAEGYPIP-TKLPLSK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQ 352
+                            5566666667777.6676543....468999****************************988889999******************** PP
+
+   sp|Q1XGE2|HAC1_ASPOR 142 qlaqlaaevrgsrantpl 159
+                            ql +l   v g  ++t  
+  sp|Q70SY1|CR3L2_HUMAN 353 QLQKLQTLVMGKVSRTCK 370
+                            *******99998777754 PP
+
+>> sp|Q6DE84|MAFB_XENLA  Transcription factor MafB OS=Xenopus laevis GN=mafb PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    3.2   0.0      0.52   1.3e+03     115     182 ..      15      86 ..       8     100 .. 0.76
+   2 !   17.9   0.8   1.7e-05     0.044      70     143 ..     211     285 ..     168     310 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 3.2 bits;  conditional E-value: 0.52
+  sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrls.qleaennrlsqqlaql.aaevrgsrantpl..pgspatasptltptlfkqerdel 182
+                            + +e  n+f l++++ + e  ++r ++ + q+   +  gs ++tp+  p s   +sp+++pt  k + d+l
+  sp|Q6DE84|MAFB_XENLA  15 PLAMEYLNDFDLMKFDvKKEPLGGRPDRAIRQCnRLQPTGSVSSTPIstPCSSVPSSPSFSPTEHKTHLDDL 86 
+                           567888888888877624556667777777776234778999999975578888999******999998887 PP
+
+  == domain 2    score: 17.9 bits;  conditional E-value: 1.7e-05
+  sp|Q1XGE2|HAC1_ASPOR  70 lpprkraktedek.eqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql 143
+                           l  + r+ t+d+  + ++ +r l+nr+ aq++r ++  + + le+ek ql qq + l q +s+l  e++    ++
+  sp|Q6DE84|MAFB_XENLA 211 LNRHLRGFTKDDViRLKQKRRTLKNRGYAQSCRYKRVQQKHNLEGEKTQLVQQVEQLKQEVSRLARERDAYKIKC 285
+                           5555677777765144566799***********99888999**********************999987665554 PP
+
+>> sp|Q9Z125|CR3L1_MOUSE  Cyclic AMP-responsive element-binding protein 3-like protein 1 OS=Mus musculus GN=Creb3l1 PE=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   21.7   0.0   1.3e-06    0.0032      59     160 ..     271     366 ..     215     434 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 21.7 bits;  conditional E-value: 1.3e-06
+   sp|Q1XGE2|HAC1_ASPOR  59 wgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146
+                              +  p+p t lp  k     +ek  +r++r ++n+ +aq sr++k+  +e le +      +n  l +++  le  n+ l qql +l
+  sp|Q9Z125|CR3L1_MOUSE 271 IAEGYPIP-TKLPLTK----AEEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKL 353
+                            55556666.5666543....368999*********************99****9877778899999*******************999 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 147 aaevrgsrantplp 160
+                               v  s+ + p  
+  sp|Q9Z125|CR3L1_MOUSE 354 QTLVT-SKISRPYK 366
+                            88775.55555554 PP
+
+>> sp|Q8BH52|CR3L2_MOUSE  Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Mus musculus GN=Creb3l2 PE=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   21.9   0.0   1.1e-06    0.0028      55     159 ..     271     370 ..     230     391 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 21.9 bits;  conditional E-value: 1.1e-06
+   sp|Q1XGE2|HAC1_ASPOR  55 krkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqq 142
+                            kr    +  p+p t lp  k     +ek  ++i+r ++n+ +aq sr++k+  ++ le +   +  +n  l +++  le  n+ l qq
+  sp|Q8BH52|CR3L2_MOUSE 271 KRTLVAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQ 353
+                            555555566666.5666543....468999****************************988889999********************* PP
+
+   sp|Q1XGE2|HAC1_ASPOR 143 laqlaaevrgsrantpl 159
+                            l +l   v g  ++t  
+  sp|Q8BH52|CR3L2_MOUSE 354 LQKLQTLVMGKVSRTCK 370
+                            ******99998777754 PP
+
+>> sp|P54842|MAFB_RAT  Transcription factor MafB OS=Rattus norvegicus GN=Mafb PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   22.2   0.2   9.1e-07    0.0023      72     148 ..     226     303 ..     172     321 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 22.2 bits;  conditional E-value: 9.1e-07
+  sp|Q1XGE2|HAC1_ASPOR  72 prkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148
+                            + r+ t+de  + ++ +r l+nr+ aq++r ++  + + lenek ql qq + l q +s+l  e++    ++ +la 
+    sp|P54842|MAFB_RAT 226 RHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLAN 303
+                           55677788886541556799***********988888999**********************9999887666655553 PP
+
+>> sp|Q6QDP7|CR3L2_RAT  Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Rattus norvegicus GN=Creb3l2 P
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   21.7   0.0   1.3e-06    0.0032      59     159 ..     275     370 ..     234     387 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 21.7 bits;  conditional E-value: 1.3e-06
+  sp|Q1XGE2|HAC1_ASPOR  59 wgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147
+                             +  p+p t lp  k     +ek  ++i+r ++n+ +aq sr++k+  ++ le +   +  +n  l +++  le  n+ l qql +l 
+   sp|Q6QDP7|CR3L2_RAT 275 IAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQ 358
+                           55556666.5666543....468999****************************988889999************************** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 148 aevrgsrantpl 159
+                             v g  ++t  
+   sp|Q6QDP7|CR3L2_RAT 359 TLVMGKVSRTCK 370
+                           *99998777754 PP
+
+>> sp|Q16520|BATF_HUMAN  Basic leucine zipper transcriptional factor ATF-like OS=Homo sapiens GN=BATF PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   22.1   0.2   9.3e-07    0.0024      71     135 ..      17      78 ..      12     108 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 22.1 bits;  conditional E-value: 9.3e-07
+  sp|Q1XGE2|HAC1_ASPOR  71 pprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleae 135
+                           pp k+   +   + rr++r  +nr aaq sr+r+  + + l+ e  +le+qn  l + + ql  e
+  sp|Q16520|BATF_HUMAN  17 PPGKQ---DSSDDVRRVQRREKNRIAAQKSRQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEE 78 
+                           44444...44445799***************************************9999998766 PP
+
+>> sp|P54841|MAFB_MOUSE  Transcription factor MafB OS=Mus musculus GN=Mafb PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   22.1   0.2   9.1e-07    0.0023      72     148 ..     226     303 ..     172     321 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 22.1 bits;  conditional E-value: 9.1e-07
+  sp|Q1XGE2|HAC1_ASPOR  72 prkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148
+                            + r+ t+de  + ++ +r l+nr+ aq++r ++  + + lenek ql qq + l q +s+l  e++    ++ +la 
+  sp|P54841|MAFB_MOUSE 226 RHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLAN 303
+                           45677788886541556799***********988888999**********************9999887666655553 PP
+
+>> sp|Q2PFS4|MAFB_MACFA  Transcription factor MafB OS=Macaca fascicularis GN=MAFB PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   21.9   0.2   1.1e-06    0.0027      72     147 ..     226     302 ..     170     321 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 21.9 bits;  conditional E-value: 1.1e-06
+  sp|Q1XGE2|HAC1_ASPOR  72 prkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147
+                            + r+ t+de  + ++ +r l+nr+ aq++r ++  + + lenek ql qq + l q +s+l  e++    ++ +la
+  sp|Q2PFS4|MAFB_MACFA 226 RHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAHKVKCEKLA 302
+                           55677788886541556799***********988888999********************99988876554444444 PP
+
+>> sp|O42290|MAFA_CHICK  Transcription factor MafA OS=Gallus gallus GN=MAFA PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   -0.8   0.1       8.7   2.2e+04     156     180 ..      69      93 ..      22      97 .. 0.76
+   2 !   21.8   1.6   1.1e-06    0.0029      84     167 ..     200     281 ..     174     286 .] 0.81
+
+  Alignments for each domain:
+  == domain 1    score: -0.8 bits;  conditional E-value: 8.7
+  sp|Q1XGE2|HAC1_ASPOR 156 ntplpgspatasptltptlfkqerd 180
+                             p pg+  +a+pt  p   k + +
+  sp|O42290|MAFA_CHICK  69 CAPSPGGQPSAGPTAAPLGSKPQLE 93 
+                           4688888888999988876666655 PP
+
+  == domain 2    score: 21.8 bits;  conditional E-value: 1.1e-06
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatas 167
+                            ++ +r l+nr+ aq++r ++  + + lenek+ql+ q + l q +s+l  e++   ++  +laa  rg       p +p t +
+  sp|O42290|MAFA_CHICK 200 LKQNRRTLKNRGYAQSCRYKRVQQRHILENEKCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPREPSPPAAPKTTA 281
+                           3556799***********988888999****************************9****99998..67655555567776654 PP
+
+>> sp|Q9NR55|BATF3_HUMAN  Basic leucine zipper transcriptional factor ATF-like 3 OS=Homo sapiens GN=BATF3 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   21.6   2.6   1.3e-06    0.0033      70     143 ..      22      95 ..      12     124 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 21.6 bits;  conditional E-value: 1.3e-06
+   sp|Q1XGE2|HAC1_ASPOR  70 lpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql 143
+                             p  +  +   e ++r+++r  +nr aaq sr+++  + +kl+ e   leq+n +l + +++l  e  +l++ l
+  sp|Q9NR55|BATF3_HUMAN  22 QPQPQPQQQSPEDDDRKVRRREKNRVAAQRSRKKQTQKADKLHEEYESLEQENTMLRREIGKLTEELKHLTEAL 95 
+                            33333334445667788889999*********************************999999998888887766 PP
+
+>> sp|Q96BA8|CR3L1_HUMAN  Cyclic AMP-responsive element-binding protein 3-like protein 1 OS=Homo sapiens GN=CREB3L1 PE=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   20.7   0.0   2.6e-06    0.0066      60     156 ..     272     362 ..     219     434 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 20.7 bits;  conditional E-value: 2.6e-06
+   sp|Q1XGE2|HAC1_ASPOR  60 gqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147
+                             +  p+p t lp  k     +ek  +r++r ++n+ +aq sr++k+  +e le +   +  +n  l +++  le  n+ l qql +l 
+  sp|Q96BA8|CR3L1_HUMAN 272 AEGYPIP-TKLPLTK----AEEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETFTSENNELWKKVETLENANRTLLQQLQKLQ 354
+                            5556666.5666543....468999*********************99*****988889999**********************9998 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 148 aevrgsran 156
+                              v     +
+  sp|Q96BA8|CR3L1_HUMAN 355 TLVTNK-IS 362
+                            877543.33 PP
+
+>> sp|Q66HA2|CR3L1_RAT  Cyclic AMP-responsive element-binding protein 3-like protein 1 OS=Rattus norvegicus GN=Creb3l1 P
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   21.4   0.0   1.6e-06     0.004      59     160 ..     270     365 ..     215     432 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 21.4 bits;  conditional E-value: 1.6e-06
+  sp|Q1XGE2|HAC1_ASPOR  59 wgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147
+                             +  p+p t lp  k     +ek  +r++r ++n+ +aq sr++k+  +e le +      +n  l +++  le  n+ l qql +l 
+   sp|Q66HA2|CR3L1_RAT 270 IAEGYPIP-TKLPLTK----AEEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKLQ 353
+                           55556666.5666543....368999*********************99****9877778899999*******************9998 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 148 aevrgsrantplp 160
+                             v  s+ + p  
+   sp|Q66HA2|CR3L1_RAT 354 TLVT-SKISRPYK 365
+                           8775.45555543 PP
+
+>> sp|P17544|ATF7_HUMAN  Cyclic AMP-dependent transcription factor ATF-7 OS=Homo sapiens GN=ATF7 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   19.9   2.1   4.4e-06     0.011      46     141 ..     310     401 ..     285     419 .. 0.69
+
+  Alignments for each domain:
+  == domain 1    score: 19.9 bits;  conditional E-value: 4.4e-06
+  sp|Q1XGE2|HAC1_ASPOR  46 kpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqlea 134
+                            p+   pa+ + s  q  p p t+   r+r   +++ ++rr + + rnraaa  +r++++l +  le +  +l  qn  l   ++ l+ 
+  sp|P17544|ATF7_HUMAN 310 HPDAPSPAQPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRN 394
+                           4666777777766555..788886..344444444455666566669********************9999999999777776666665 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 135 ennrlsq 141
+                           e  +l q
+  sp|P17544|ATF7_HUMAN 395 EVAQLKQ 401
+                           5555554 PP
+
+>> sp|O43889|CREB3_HUMAN  Cyclic AMP-responsive element-binding protein 3 OS=Homo sapiens GN=CREB3 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   20.2   0.6   3.6e-06    0.0092      77     150 ..     169     241 ..     157     255 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 20.2 bits;  conditional E-value: 3.6e-06
+   sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaev 150
+                            kte e+  +r++r +rn+ +aq sr++k++ +  le++ ++   qn+ l  +++ le +n  l +ql +l a v
+  sp|O43889|CREB3_HUMAN 169 KTE-EQILKRVRRKIRNKRSAQESRRKKKVYVGGLESRVLKYTAQNMELQNKVQLLEEQNLSLLDQLRKLQAMV 241
+                            555.456789*********************************************************9998876 PP
+
+>> sp|Q8R0S1|ATF7_MOUSE  Cyclic AMP-dependent transcription factor ATF-7 OS=Mus musculus GN=Atf7 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   20.9   1.5   2.1e-06    0.0054      46     140 ..     299     389 ..     274     401 .. 0.68
+
+  Alignments for each domain:
+  == domain 1    score: 20.9 bits;  conditional E-value: 2.1e-06
+  sp|Q1XGE2|HAC1_ASPOR  46 kpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqlea 134
+                            p+   pa+ + s  q  p p t+   r+r   +++ ++rr + + rnraaa  +r++++l +  le +  +l  qn  l   ++ l+ 
+  sp|Q8R0S1|ATF7_MOUSE 299 HPDAPSPAQPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRN 383
+                           4666777777766555..788886..344444444455666566669********************9999999999777766666665 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 135 ennrls 140
+                           e  +l 
+  sp|Q8R0S1|ATF7_MOUSE 384 EVAQLK 389
+                           555554 PP
+
+>> sp|Q5R9C9|ATF7_PONAB  Cyclic AMP-dependent transcription factor ATF-7 OS=Pongo abelii GN=ATF7 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   19.6   2.2   5.4e-06     0.014      46     141 ..     299     390 ..     275     408 .. 0.70
+
+  Alignments for each domain:
+  == domain 1    score: 19.6 bits;  conditional E-value: 5.4e-06
+  sp|Q1XGE2|HAC1_ASPOR  46 kpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqlea 134
+                            p+   pa+ + s  q  p p t+   r+r   +++ ++rr + + rnraaa  +r++++l +  le +  +l  qn  l   ++ l+ 
+  sp|Q5R9C9|ATF7_PONAB 299 HPDAPSPAQPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRN 383
+                           4666677777766555..788886..344444444455666566669********************9999999999777776666665 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 135 ennrlsq 141
+                           e  +l q
+  sp|Q5R9C9|ATF7_PONAB 384 EVAQLKQ 390
+                           5555554 PP
+
+>> sp|O35284|BATF_MOUSE  Basic leucine zipper transcriptional factor ATF-like OS=Mus musculus GN=Batf PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   20.5   0.1     3e-06    0.0076      71     135 ..      17      78 ..      12     107 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 20.5 bits;  conditional E-value: 3e-06
+  sp|Q1XGE2|HAC1_ASPOR  71 pprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleae 135
+                           pp k+  +    + r+++r  +nr aaq sr+r+  + + l+ e  +le+qn  l + + ql  e
+  sp|O35284|BATF_MOUSE  17 PPGKQDSS---DDVRKVQRREKNRIAAQKSRQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEE 78 
+                           55554444...45688999999*********************************9999998766 PP
+
+>> sp|Q8SQ19|CREB3_BOVIN  Cyclic AMP-responsive element-binding protein 3 OS=Bos taurus GN=CREB3 PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   19.8   0.2   4.8e-06     0.012      79     151 ..     149     221 ..     134     274 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 19.8 bits;  conditional E-value: 4.8e-06
+   sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr 151
+                             +e+  +r++r +rn+ +aq sr++k++ +  le++ ++   qn  l  +++ le +n  l +ql +l a v 
+  sp|Q8SQ19|CREB3_BOVIN 149 MEEQVLKRVRRKIRNKKSAQESRRKKKVYVGGLESRVLKYTAQNLELQNKVQLLEEQNLSLLDQLRRLQAMVI 221
+                            3466779***************************************9999*99***************99875 PP
+
+>> sp|Q8TEY5|CR3L4_HUMAN  Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Homo sapiens GN=CREB3L4 PE=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   19.6   3.7   5.5e-06     0.014      78     150 ..     212     284 ..     191     299 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 19.6 bits;  conditional E-value: 5.5e-06
+   sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaev 150
+                              +e+  ++++r +rn+ +aq sr+rk+  ++ le++   +  qnq l +++++le +n  l  ql ql   +
+  sp|Q8TEY5|CR3L4_HUMAN 212 KAEERVLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQLRQLQTLI 284
+                            346788899******************************************************9999997654 PP
+
+>> sp|Q9D275|BATF3_MOUSE  Basic leucine zipper transcriptional factor ATF-like 3 OS=Mus musculus GN=Batf3 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   19.9   2.9   4.6e-06     0.012      81     143 ..      26      88 ..      12      96 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 19.9 bits;  conditional E-value: 4.6e-06
+   sp|Q1XGE2|HAC1_ASPOR  81 ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql 143
+                            + ++r+++r  +nr aaq sr+++  + +kl+ e   leq+n  l + +s+l+ e ++ls+ l
+  sp|Q9D275|BATF3_MOUSE  26 KDDDRKVRRREKNRVAAQRSRKKQTQKADKLHEEHESLEQENSVLRREISKLKEELRHLSEVL 88 
+                            335677888889*****************************************9999998766 PP
+
+>> sp|Q504L8|MAFB_XENTR  Transcription factor MafB OS=Xenopus tropicalis GN=mafb PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    1.9   0.0       1.3   3.3e+03     116     182 ..      16      86 ..       8     100 .. 0.70
+   2 ?   18.5   1.1   1.2e-05     0.029      54     147 ..     201     295 ..     173     314 .. 0.66
+
+  Alignments for each domain:
+  == domain 1    score: 1.9 bits;  conditional E-value: 1.3
+  sp|Q1XGE2|HAC1_ASPOR 116 iqleqqnqfllqrls.qleaennrlsqqlaql.aaevrgsrantpl..pgspatasptltptlfkqerdel 182
+                           + +e  n+f l++++ + e  ++r ++ +  +   +  gs ++tp+  p s   +sp+++pt  k + del
+  sp|Q504L8|MAFB_XENTR  16 LAMEYVNDFDLMKFDvKKEPLGGRPDRAIRPCnRLQPTGSVSSTPIstPCSSVPSSPSFSPTEQKTHMDEL 86 
+                           56677777766666523444555555555444134667888888864577888899999999999999997 PP
+
+  == domain 2    score: 18.5 bits;  conditional E-value: 1.2e-05
+  sp|Q1XGE2|HAC1_ASPOR  54 kkrkswgqelpvpktnlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141
+                             r s  q + +    l  + r+ t+d+  + ++ +r l+nr+ aq++r ++  + + lenek ql qq + l   +s+l  e++    
+  sp|Q504L8|MAFB_XENTR 201 EDRFSDDQLVSMSVRELNRHLRGFTKDDVIRlKQKRRTLKNRGYAQSCRFKRVQQKHHLENEKTQLIQQVEQLKLEVSRLARERDAYKI 289
+                           55555555555555666667788887775441566799***********988888999********99998888888888888776655 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 142 qlaqla 147
+                           ++ +la
+  sp|Q504L8|MAFB_XENTR 290 KCEKLA 295
+                           444444 PP
+
+>> sp|Q5UEM8|CR3L4_MACFA  Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Macaca fascicularis GN=CREB3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   19.8   3.6   4.8e-06     0.012      78     150 ..     212     284 ..     191     299 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 19.8 bits;  conditional E-value: 4.8e-06
+   sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaev 150
+                              +e+  ++++r +rn+ +aq sr+rk+  ++ le++   +  qnq l +++++le +n  l  ql ql   +
+  sp|Q5UEM8|CR3L4_MACFA 212 KAEERVLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQLRQLQTLI 284
+                            346788899******************************************************9999997654 PP
+
+>> sp|Q4U1U2|MAFA_XENTR  Transcription factor MafA OS=Xenopus tropicalis GN=mafa PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.7   1.5     1e-05     0.026      85     167 ..     203     284 ..     181     288 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 18.7 bits;  conditional E-value: 1e-05
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatas 167
+                           ++ +r l+nr+ aq++r ++  + + le ek+ql+ q + l q +s+l  e++   ++  +la++   +r + p  g+p+ a+
+  sp|Q4U1U2|MAFA_XENTR 203 KQKRRTLKNRGYAQSCRYKRVQQRHILETEKCQLQSQVEQLKQEVSRLAKERDLYKDKYEKLASRSFTTRES-PPQGNPGKAN 284
+                           445699***********988888999***************************99999999*9998888765.5568888775 PP
+
+>> sp|P23091|MAF_AVIS4  Transforming protein Maf OS=Avian musculoaponeurotic fibrosarcoma virus AS42 GN=V-MAF PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    1.8   0.0       1.4   3.7e+03     114     168 ..      15      68 ..       6      80 .. 0.72
+   2 ?   15.1   1.3   0.00013      0.32      85     148 ..     276     339 ..     253     362 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 1.8 bits;  conditional E-value: 1.4
+  sp|Q1XGE2|HAC1_ASPOR 114 ekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168
+                             + +e  n+f l+++   +   e +r+  q+++l a   gs ++tp+  +p+++ p
+   sp|P23091|MAF_AVIS4  15 SPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 
+                           5678999999988886511455799999999999987..5999999994.3444333 PP
+
+  == domain 2    score: 15.1 bits;  conditional E-value: 0.00013
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148
+                           ++ +r l+nr+ aq++r ++  + + le+ek ql qq + l q +s+l  e++   ++  +l +
+   sp|P23091|MAF_AVIS4 276 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVEHLKQEISRLVRERDAYKEKYEKLVS 339
+                           445699***********988889999**********************9999988887777765 PP
+
+>> sp|P81269|ATF1_MOUSE  Cyclic AMP-dependent transcription factor ATF-1 OS=Mus musculus GN=Atf1 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.7   0.3     1e-05     0.026      75     131 ..     204     259 ..     167     265 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 18.7 bits;  conditional E-value: 1e-05
+  sp|Q1XGE2|HAC1_ASPOR  75 raktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                             kt+d +  rr  r+++nr aa+ +r++k+  ++ len+   le qn+ l++ l  
+  sp|P81269|ATF1_MOUSE 204 TTKTDDPQ-LRREIRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKT 259
+                           46776665.566669************99999999****************998865 PP
+
+>> sp|Q789F3|MAF_CHICK  Transcription factor Maf OS=Gallus gallus GN=MAF PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    1.8   0.0       1.4   3.5e+03     114     168 ..      15      68 ..       6      81 .. 0.72
+   2 ?   14.9   1.2   0.00015      0.38      85     148 ..     276     339 ..     254     357 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 1.8 bits;  conditional E-value: 1.4
+  sp|Q1XGE2|HAC1_ASPOR 114 ekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168
+                             + +e  n+f l+++   +   e +r+  q+++l a   gs ++tp+  +p+++ p
+   sp|Q789F3|MAF_CHICK  15 SPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 
+                           5678999999988886511455799999999999987..5999999994.3443333 PP
+
+  == domain 2    score: 14.9 bits;  conditional E-value: 0.00015
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148
+                           ++ +r l+nr+ aq++r ++  + + le+ek ql qq + l q +s+l  e++   ++  +l +
+   sp|Q789F3|MAF_CHICK 276 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVEHLKQEISRLVRERDAYKEKYEKLVS 339
+                           445699***********988889999**********************9999988877766654 PP
+
+>> sp|P29747|CREBA_DROME  Cyclic AMP response element-binding protein A OS=Drosophila melanogaster GN=CrebA PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.0   0.1   1.6e-05     0.042      64     149 ..     427     507 ..     383     513 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 18.0 bits;  conditional E-value: 1.6e-05
+   sp|Q1XGE2|HAC1_ASPOR  64 pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaae 149
+                            p+p+  lp  k     +ek  ++i+r ++n+ +aq sr++k+  +++le++   l  +n+   +rl  le  n  l  ql +l a 
+  sp|P29747|CREBA_DROME 427 PIPQ-KLPLTK----AEEKSLKKIRRKIKNKISAQESRRKKKEYMDQLERRVEILVTENHDYKKRLEGLEETNANLLSQLHKLQAL 507
+                            5554.344322....4689999***************************98777788899999*******9999999999998775 PP
+
+>> sp|P18848|ATF4_HUMAN  Cyclic AMP-dependent transcription factor ATF-4 OS=Homo sapiens GN=ATF4 PE=1 SV=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.3   0.3   1.3e-05     0.034      75     155 ..     270     346 ..     242     351 .] 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 18.3 bits;  conditional E-value: 1.3e-05
+  sp|Q1XGE2|HAC1_ASPOR  75 raktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsra 155
+                            ak + ek +++++++ +n+ aa   r++kr e+e l +e  +le++n+ l +r + l  e     q l +l  evr +r+
+  sp|P18848|ATF4_HUMAN 270 AAKVKGEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKERADSLAKEI----QYLKDLIEEVRKARG 346
+                           48999*************************************************99987775....445555555655554 PP
+
+>> sp|P54844|MAF_RAT  Transcription factor Maf OS=Rattus norvegicus GN=Maf PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    2.0   0.0       1.2   3.1e+03     113     168 ..      14      68 ..       5      87 .. 0.74
+   2 ?   15.1   0.9   0.00013      0.33      85     148 ..     286     349 ..     264     368 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 2.0 bits;  conditional E-value: 1.2
+  sp|Q1XGE2|HAC1_ASPOR 113 nekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168
+                              + +e  n+f l+++   +   e +r+  q+++l a   gs ++tp+  +p+++ p
+     sp|P54844|MAF_RAT  14 TSPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 
+                           56678999999988886511456799999999999987..5999999994.3443333 PP
+
+  == domain 2    score: 15.1 bits;  conditional E-value: 0.00013
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148
+                           ++ +r l+nr+ aq++r ++  + + le+ek ql qq + l q +s+l  e++   ++  +l +
+     sp|P54844|MAF_RAT 286 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVDHLKQEISRLVRERDAYKEKYEKLVS 349
+                           445699***********988889999**********************9999988887777654 PP
+
+>> sp|O75444|MAF_HUMAN  Transcription factor Maf OS=Homo sapiens GN=MAF PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    1.9   0.0       1.3   3.4e+03     113     168 ..      14      68 ..       5      80 .. 0.72
+   2 ?   14.7   1.0   0.00017      0.43      85     147 ..     290     352 ..     268     371 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 1.9 bits;  conditional E-value: 1.3
+  sp|Q1XGE2|HAC1_ASPOR 113 nekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168
+                              + +e  n+f l+++   +   e +r+  q+++l a   gs ++tp+  +p+++ p
+   sp|O75444|MAF_HUMAN  14 TSPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 
+                           56678999999988886511456799999999999987..5999999994.3444333 PP
+
+  == domain 2    score: 14.7 bits;  conditional E-value: 0.00017
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147
+                           ++ +r l+nr+ aq++r ++  + + le+ek ql qq + l q +s+l  e++   ++  +l 
+   sp|O75444|MAF_HUMAN 290 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVDHLKQEISRLVRERDAYKEKYEKLV 352
+                           445699***********988889999**********************999998877766665 PP
+
+>> sp|P97876|BATF3_RAT  Basic leucine zipper transcriptional factor ATF-like 3 OS=Rattus norvegicus GN=Batf3 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.4   2.3   1.2e-05     0.032      81     143 ..      26      88 ..      14      96 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 18.4 bits;  conditional E-value: 1.2e-05
+  sp|Q1XGE2|HAC1_ASPOR  81 ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql 143
+                           + ++r+++r  +nr aaq sr+++  + +kl+ e   leq+n  l + +++l+ e ++l++ l
+   sp|P97876|BATF3_RAT  26 KDDDRKVRRREKNRVAAQRSRKKQTQKSDKLHEEHESLEQENSVLRREIAKLKEELRHLTEAL 88 
+                           335677888889***************************************999998888766 PP
+
+>> sp|Q06507|ATF4_MOUSE  Cyclic AMP-dependent transcription factor ATF-4 OS=Mus musculus GN=Atf4 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.8   0.2   9.7e-06     0.025      63     155 ..     254     344 ..     220     349 .] 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 18.8 bits;  conditional E-value: 9.7e-06
+  sp|Q1XGE2|HAC1_ASPOR  63 lpvpktnlppr..kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaae 149
+                            p pk   pp     ak + ek +++++++ +n+ aa   r++kr e+e l +e  +le++n+ l ++ + l  e     q l +l  e
+  sp|Q06507|ATF4_MOUSE 254 SPRPKPYDPPGvsLTAKVKTEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEE 338
+                           477777778862257999**********************************************999988887665....445555556 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 150 vrgsra 155
+                           vr +r+
+  sp|Q06507|ATF4_MOUSE 339 VRKARG 344
+                           665554 PP
+
+>> sp|A7Z017|MAF_BOVIN  Transcription factor Maf OS=Bos taurus GN=MAF PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    1.9   0.0       1.4   3.5e+03     113     168 ..      14      68 ..       5      80 .. 0.72
+   2 ?   14.7   1.0   0.00017      0.43      85     147 ..     294     356 ..     272     375 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 1.9 bits;  conditional E-value: 1.4
+  sp|Q1XGE2|HAC1_ASPOR 113 nekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168
+                              + +e  n+f l+++   +   e +r+  q+++l a   gs ++tp+  +p+++ p
+   sp|A7Z017|MAF_BOVIN  14 TSPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 
+                           56678999999988886511456799999999999987..5999999994.3444333 PP
+
+  == domain 2    score: 14.7 bits;  conditional E-value: 0.00017
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147
+                           ++ +r l+nr+ aq++r ++  + + le+ek ql qq + l q +s+l  e++   ++  +l 
+   sp|A7Z017|MAF_BOVIN 294 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVDHLKQEISRLVRERDAYKEKYEKLV 356
+                           445699***********988889999**********************999998877766665 PP
+
+>> sp|Q0V9K1|MAF_XENTR  Transcription factor Maf OS=Xenopus tropicalis GN=maf PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    2.0   0.0       1.2   3.2e+03     113     168 ..      14      68 ..       5      78 .. 0.72
+   2 ?   14.4   1.2   0.00021      0.53      85     146 ..     267     328 ..     245     349 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 2.0 bits;  conditional E-value: 1.2
+  sp|Q1XGE2|HAC1_ASPOR 113 nekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168
+                              + +e  n+f l+++   +   e +r+  q+++l a   gs ++tp+  +p+++ p
+   sp|Q0V9K1|MAF_XENTR  14 TSPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 
+                           56678999999988886511456799999999999987..5999999994.4444333 PP
+
+  == domain 2    score: 14.4 bits;  conditional E-value: 0.00021
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146
+                           ++ +r l+nr+ aq++r ++  + + le+ek ql qq + l q +s+l  e++   ++  +l
+   sp|Q0V9K1|MAF_XENTR 267 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVEHLKQEISRLLRERDAYKEKYEKL 328
+                           445699***********988889999*********************999988777666554 PP
+
+>> sp|Q08DA8|ATF1_BOVIN  Cyclic AMP-dependent transcription factor ATF-1 OS=Bos taurus GN=ATF1 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   17.9   0.2   1.9e-05     0.047      74     131 ..     204     260 ..     165     268 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 17.9 bits;  conditional E-value: 1.9e-05
+  sp|Q1XGE2|HAC1_ASPOR  74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                           + +kt+d + +r i r+++nr aa+ +r++k+  ++ len+   le qn+ l++ l  
+  sp|Q08DA8|ATF1_BOVIN 204 QTSKTDDPQLKREI-RLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKT 260
+                           45788887776666.89***********99999999****************998865 PP
+
+>> sp|O60675|MAFK_HUMAN  Transcription factor MafK OS=Homo sapiens GN=MAFK PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.5   0.2   1.2e-05      0.03      78     166 ..      45     134 ..       9     155 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 18.5 bits;  conditional E-value: 1.2e-05
+  sp|Q1XGE2|HAC1_ASPOR  78 tedek.eqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspat 165
+                           t++e  + ++ +r l+nr+ a ++r ++  + e le+++++l+q+ + l +  s ++ e + l  +   l    r    +   p   at
+  sp|O60675|MAFK_HUMAN  45 TKEEVtRLKQRRRTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMRLELDALRSKYEALQTFARTVARGPVAPSKVAT 133
+                           44433023445699************9999****************************9999998887777766654333333444444 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 166 a 166
+                            
+  sp|O60675|MAFK_HUMAN 134 T 134
+                           3 PP
+
+>> sp|P54843|MAF_MOUSE  Transcription factor Maf OS=Mus musculus GN=Maf PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    1.9   0.0       1.3   3.3e+03     113     168 ..      14      68 ..       5      80 .. 0.72
+   2 ?   14.5   1.1   0.00019      0.48      85     148 ..     287     350 ..     265     368 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 1.9 bits;  conditional E-value: 1.3
+  sp|Q1XGE2|HAC1_ASPOR 113 nekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168
+                              + +e  n+f l+++   +   e +r+  q+++l a   gs ++tp+  +p+++ p
+   sp|P54843|MAF_MOUSE  14 TSPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 
+                           56778999999988886511456799999999999987..5999999994.3444333 PP
+
+  == domain 2    score: 14.5 bits;  conditional E-value: 0.00019
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148
+                           ++ +r l+nr+ aq++r ++  + + le+ek ql qq + l q +s+l  e++   ++  +l +
+   sp|P54843|MAF_MOUSE 287 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVDHLKQEISRLVRERDAYKEKYEKLVS 350
+                           445699***********988889999**********************9999988877766654 PP
+
+>> sp|P18846|ATF1_HUMAN  Cyclic AMP-dependent transcription factor ATF-1 OS=Homo sapiens GN=ATF1 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   17.8   0.2     2e-05      0.05      74     131 ..     205     261 ..     166     269 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 17.8 bits;  conditional E-value: 2e-05
+  sp|Q1XGE2|HAC1_ASPOR  74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                           +  kt+d + +r i r+++nr aa+ +r++k+  ++ len+   le qn+ l++ l  
+  sp|P18846|ATF1_HUMAN 205 QTTKTDDPQLKREI-RLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKT 261
+                           45788887766666.89***********99999999****************998865 PP
+
+>> sp|P42774|GBF1_ARATH  G-box-binding factor 1 OS=Arabidopsis thaliana GN=GBF1 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.1   1.3   1.5e-05     0.039      77     142 ..     216     281 ..     176     302 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 18.1 bits;  conditional E-value: 1.5e-05
+  sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqq 142
+                             +de+e +r +r   nr +a+ sr rk+ e+e+l+++   l  +nq l + l++l +e ++l  +
+  sp|P42774|GBF1_ARATH 216 PVKDERELKRQKRKQSNRESARRSRLRKQAECEQLQQRVESLSNENQSLRDELQRLSSECDKLKSE 281
+                           5689********************************998899999999976666666666555433 PP
+
+>> sp|Q61827|MAFK_MOUSE  Transcription factor MafK OS=Mus musculus GN=Mafk PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   18.1   0.3   1.5e-05     0.039      78     165 ..      45     133 ..       9     155 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 18.1 bits;  conditional E-value: 1.5e-05
+  sp|Q1XGE2|HAC1_ASPOR  78 tedek.eqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspat 165
+                           t++e  + ++ +r l+nr+ a ++r ++  + e le+++++l+q+ + l +  s ++ e + l  +   l    r    +   p   at
+  sp|Q61827|MAFK_MOUSE  45 TKEEVtRLKQRRRTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMRLELDALRSKYEALQTFARTVARGPVTPTKVAT 133
+                           44433023445699************9999**************************999999988877776665543333223333333 PP
+
+>> sp|P14233|TGA1B_TOBAC  TGACG-sequence-specific DNA-binding protein TGA-1B (Fragment) OS=Nicotiana tabacum GN=TGA1B PE
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   17.6   0.6   2.3e-05     0.058      80     140 ..     181     240 ..     166     242 .] 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 17.6 bits;  conditional E-value: 2.3e-05
+   sp|Q1XGE2|HAC1_ASPOR  80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140
+                            de e++r  r++rnr +aq sr+rk+  +e le++   ++   q l  +++ + aen  l 
+  sp|P14233|TGA1B_TOBAC 181 DEDEKKR-ARLVRNRESAQLSRQRKKHYVEELEDKVRIMHSTIQDLNAKVAYIIAENATLK 240
+                            5555555.6899*********************9877788899999999999999998775 PP
+
+>> sp|Q6NW59|ATF4_DANRE  Cyclic AMP-dependent transcription factor ATF-4 OS=Danio rerio GN=atf4 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   17.0   0.4   3.4e-05     0.086      47     144 ..     230     327 ..     200     338 .. 0.75
+
+  Alignments for each domain:
+  == domain 1    score: 17.0 bits;  conditional E-value: 3.4e-05
+  sp|Q1XGE2|HAC1_ASPOR  47 peekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleae 135
+                             +  p+ + k + +  p     l  r +  +   k +++++++ +n+ aa   r++kr+e+e l +e  +le++n+ l ++ + l  e
+  sp|Q6NW59|ATF4_DANRE 230 QSDLEPSSRAKPYSRPDPEASPALKGRVKTSSGAPKVEKKLKKMEQNKTAATRYRQKKRVEQESLNSECSELEKKNRELSEKADSLSRE 318
+                           55667888888888766666666666666666778999**************************************9998888877766 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 136 nnrlsqqla 144
+                            + l + l 
+  sp|Q6NW59|ATF4_DANRE 319 IQYLRDLLE 327
+                           655544443 PP
+
+>> sp|O24160|TGA21_TOBAC  TGACG-sequence-specific DNA-binding protein TGA-2.1 OS=Nicotiana tabacum GN=TGA21 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.2   1.6   6.1e-05      0.15      82     133 ..     165     215 ..     155     236 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 16.2 bits;  conditional E-value: 6.1e-05
+   sp|Q1XGE2|HAC1_ASPOR  82 keqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqle 133
+                             +q+ ++r+ +nr aa+ sr rk+  +++len +++l q  q l qr  q+ 
+  sp|O24160|TGA21_TOBAC 165 LDQKTLRRLAQNREAARKSRLRKKAYVQQLENSRLKLSQLEQDL-QRARQQG 215
+                            4788899999***************************9999975.6665543 PP
+
+>> sp|Q98UK4|MAF_DANRE  Transcription factor Maf OS=Danio rerio GN=maf PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   -0.1   0.0       5.2   1.3e+04     115     165 ..      16      65 ..       5      86 .. 0.60
+   2 ?   15.7   1.3   8.2e-05      0.21      85     144 ..     243     302 ..     221     324 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: -0.1 bits;  conditional E-value: 5.2
+  sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspat 165
+                            + +e  n+f l+++   +   e +r   q+++l a   gs ++tp+  +p++
+   sp|Q98UK4|MAF_DANRE  16 PLAMEYVNDFDLMKFEvkKEPVEPDRSISQCSRLIA--GGSLSSTPMS-TPCS 65 
+                           556677777766665311233455555555555554..4667777773.3333 PP
+
+  == domain 2    score: 15.7 bits;  conditional E-value: 8.2e-05
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144
+                           ++ +r l+nr+ aq++r ++  + + le+ek ql qq + l q +s+l  e++   ++  
+   sp|Q98UK4|MAF_DANRE 243 KQKRRTLKNRGYAQSCRYKRVQQRHVLEGEKTQLMQQVDHLKQEISRLVRERDAYKEKYE 302
+                           445699***********988889999*********************9999887766655 PP
+
+>> sp|A3KMR8|MAFA_DANRE  Transcription factor MafA OS=Danio rerio GN=mafa PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.7   0.6   4.2e-05      0.11      85     165 ..     225     305 ..     200     315 .] 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 16.7 bits;  conditional E-value: 4.2e-05
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspat 165
+                           ++ +r l+nr+ aq++r ++  + + le+ek+ l+ q + l q +++l  e++   ++  +la++   + +nt  p s   
+  sp|A3KMR8|MAFA_DANRE 225 KQKRRTLKNRGYAQSCRYKRVQQRHMLESEKCTLQSQVEQLKQDVARLIKERDLYKEKYEKLASRAFNGGGNTRDPSSGNH 305
+                           445699***********998889999**************************************99999999988877554 PP
+
+>> sp|Q90596|MAFK_CHICK  Transcription factor MafK OS=Gallus gallus GN=MAFK PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.9   0.5   3.5e-05      0.09      84     164 ..      52     132 ..      31     154 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 16.9 bits;  conditional E-value: 3.5e-05
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspa 164
+                            ++ +r l+nr+ a ++r ++  + e le+++++l+q+ + l +  s ++ e + l  +   l    r    +   p   a
+  sp|Q90596|MAFK_CHICK  52 LKQRRRTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMKLELDALRSKYEALQTFARTVARGPITPTKVA 132
+                           3344699************9999***************************9999998887777666554333222233333 PP
+
+>> sp|Q3ZCH6|ATF4_BOVIN  Cyclic AMP-dependent transcription factor ATF-4 OS=Bos taurus GN=ATF4 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.4   0.3   5.2e-05      0.13      75     145 ..     267     337 ..     228     346 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 16.4 bits;  conditional E-value: 5.2e-05
+  sp|Q1XGE2|HAC1_ASPOR  75 raktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145
+                            ak + ek +++++++ +n+ aa   r++kr e+e l +e  +le++n+ l ++ + l  e + l +q+ +
+  sp|Q3ZCH6|ATF4_BOVIN 267 AAKVKGEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLAKEIQYLKDQIEE 337
+                           48999**********************************************99999999888888887754 PP
+
+>> sp|P97875|JDP2_MOUSE  Jun dimerization protein 2 OS=Mus musculus GN=Jdp2 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   17.0   0.8   3.5e-05     0.088      77     145 ..      65     134 ..       9     157 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 17.0 bits;  conditional E-value: 3.5e-05
+  sp|Q1XGE2|HAC1_ASPOR  77 kte.dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145
+                           k+e de e+rr +r  +n+ aa  +r +k+ + e l++e  +le +n  l  ++ +l+ e+++l  +l +
+  sp|P97875|JDP2_MOUSE  65 KSElDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLELMNAELKTQIEELKLERQQLILMLNR 134
+                           3333888999999999****************************************99999998777654 PP
+
+>> sp|Q78E65|JDP2_RAT  Jun dimerization protein 2 OS=Rattus norvegicus GN=Jdp2 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   17.0   0.8   3.5e-05     0.088      77     145 ..      65     134 ..       9     157 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 17.0 bits;  conditional E-value: 3.5e-05
+  sp|Q1XGE2|HAC1_ASPOR  77 kte.dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145
+                           k+e de e+rr +r  +n+ aa  +r +k+ + e l++e  +le +n  l  ++ +l+ e+++l  +l +
+    sp|Q78E65|JDP2_RAT  65 KSElDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLELMNAELKTQIEELKLERQQLILMLNR 134
+                           3333888999999999****************************************99999998777654 PP
+
+>> sp|P12959|OP2_MAIZE  Regulatory protein opaque-2 OS=Zea mays GN=O2 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.2   0.2   5.8e-05      0.15      85     159 ..     227     301 ..     221     342 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 16.2 bits;  conditional E-value: 5.8e-05
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantpl 159
+                            r+++   nr +a+ sr rk  +l+ le++  ql+ +n  ll+r++ l  + n  + +   l a++   ra   +
+   sp|P12959|OP2_MAIZE 227 ERVRKKESNRESARRSRYRKAAHLKELEDQVAQLKAENSCLLRRIAALNQKYNDANVDNRVLRADMETLRAKVKM 301
+                           46777778***************************************9999998888888888888877776655 PP
+
+>> sp|Q8K1L0|CREB5_MOUSE  Cyclic AMP-responsive element-binding protein 5 OS=Mus musculus GN=Creb5 PE=2 SV=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    0.8   0.9       2.9   7.3e+03     141     170 ..      19      48 ..      10     124 .. 0.63
+   2 ?   16.9   4.4   3.7e-05     0.093      51     143 ..     193     284 ..     182     322 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 0.8 bits;  conditional E-value: 2.9
+   sp|Q1XGE2|HAC1_ASPOR 141 qqlaqlaaevrgsrantplpgspatasptl 170
+                            +q   + a + g+  n  +pgs a   p  
+  sp|Q8K1L0|CREB5_MOUSE  19 RQRQPMPASMPGTLPNPTMPGSSAVLMPME 48 
+                            455567788899999999999988877753 PP
+
+  == domain 2    score: 16.9 bits;  conditional E-value: 3.7e-05
+   sp|Q1XGE2|HAC1_ASPOR  51 kpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennr 138
+                             pa ++ +  q +  p+     r+r   ed   +rr + + rnraaa  +r+++++ +  le +  +l q n+ l   +s+l+ e  +
+  sp|Q8K1L0|CREB5_MOUSE 193 SPATQQMQPTQTIQPPQPTGGRRRRVVDEDPD-ERRRKFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQ 279
+                            57777777778888888777667777666655.55667889**********************9999***999999999999888877 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 139 lsqql 143
+                            l q l
+  sp|Q8K1L0|CREB5_MOUSE 280 LKQLL 284
+                            77655 PP
+
+>> sp|Q39140|TGA6_ARATH  Transcription factor TGA6 OS=Arabidopsis thaliana GN=TGA6 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.1   3.0   6.4e-05      0.16      77     131 ..      38      91 ..      33     102 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 16.1 bits;  conditional E-value: 6.4e-05
+  sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                           +++d+ +q+ ++r+ +nr aa+ sr rk+  +++len +++l q  q  lqr  q
+  sp|Q39140|TGA6_ARATH  38 RSKDKLDQKTLRRLAQNREAARKSRLRKKAYVQQLENSRLKLTQLEQE-LQRARQ 91 
+                           5679999**********************************9998886.466555 PP
+
+>> sp|P23923|HBP1B_WHEAT  Transcription factor HBP-1b(c38) OS=Triticum aestivum PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.9   2.9   7.3e-05      0.19      73     131 ..      37      91 ..      30     106 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 15.9 bits;  conditional E-value: 7.3e-05
+   sp|Q1XGE2|HAC1_ASPOR  73 rkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                            r r k  d+k +r   r+ +nr aa+ sr rk+  +++len +++l q  q  lqr  q
+  sp|P23923|HBP1B_WHEAT  37 RSRDKNGDQKTMR---RLAQNREAARKSRLRKKAYVQQLENSRLKLTQLEQE-LQRARQ 91 
+                            6666666666665...5679*************************9998886.466555 PP
+
+>> sp|Q00322|CEBPD_MOUSE  CCAAT/enhancer-binding protein delta OS=Mus musculus GN=Cebpd PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.7   0.7   8.1e-05      0.21      98     169 ..     195     263 ..     142     267 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 15.7 bits;  conditional E-value: 8.1e-05
+   sp|Q1XGE2|HAC1_ASPOR  98 qtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspataspt 169
+                            +  rer  + ++k    + + +++nq + q+l +l aen +l q++ ql  ++ g r       sp    pt
+  sp|Q00322|CEBPD_MOUSE 195 RQRRERNNIAVRK---SRDKAKRRNQEMQQKLVELSAENEKLHQRVEQLTRDLAGLRQFFKKLPSPPFLPPT 263
+                            3345555555555...44456789999****************************99876655555555555 PP
+
+>> sp|Q39163|TGA5_ARATH  Transcription factor TGA5 OS=Arabidopsis thaliana GN=TGA5 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.9   2.2     7e-05      0.18      79     131 ..      40      91 ..      34     109 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 15.9 bits;  conditional E-value: 7e-05
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                           + + +q+ ++r+ +nr aa+ sr rk+  +++len +++l q  q  lqr  q
+  sp|Q39163|TGA5_ARATH  40 KSKMDQKTLRRLAQNREAARKSRLRKKAYVQQLENSRLKLTQLEQE-LQRARQ 91 
+                           4567899999*****************************9998886.466655 PP
+
+>> sp|Q54RZ9|BZPG_DICDI  Probable basic-leucine zipper transcription factor G OS=Dictyostelium discoideum GN=bzpG PE=3 S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.7   0.7   8.4e-05      0.21      80     149 ..     274     343 ..     262     352 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 15.7 bits;  conditional E-value: 8.4e-05
+  sp|Q1XGE2|HAC1_ASPOR  80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaae 149
+                           ++ke +r +r+++nr +a+ sr+rkr +l  le++  +l   +  + + ls le en  l  +++ql   
+  sp|Q54RZ9|BZPG_DICDI 274 EKKELKRQKRLIKNRESAHLSRQRKRERLTDLEHRVEELSSNSIDINKTLSSLENENLILKAEVGQLFEV 343
+                           578999***************************9888888877788899********9999999998654 PP
+
+>> sp|Q8CF90|MAFA_MOUSE  Transcription factor MafA OS=Mus musculus GN=Mafa PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.7   0.3   8.2e-05      0.21      85     168 ..     262     348 ..     237     356 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 15.7 bits;  conditional E-value: 8.2e-05
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr.g..srantplpgspatasp 168
+                           ++ +r l+nr+ aq++r ++  + + le+ek+ql+ q + l   +++l  e++   ++  +la++   g  + a+ p   spa a+p
+  sp|Q8CF90|MAFA_MOUSE 262 KQKRRTLKNRGYAQSCRFKRVQQRHILESEKCQLQSQVEQLKLEVGRLAKERDLYKEKYEKLAGRGGpGgaGGAGFPREPSPAQAGP 348
+                           445699***********988888999**********999999999999999999998888888753212113456666667777776 PP
+
+>> sp|Q9ES19|ATF4_RAT  Cyclic AMP-dependent transcription factor ATF-4 OS=Rattus norvegicus GN=Atf4 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   16.4   0.2     5e-05      0.13      74     155 ..     265     342 ..     230     347 .] 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 16.4 bits;  conditional E-value: 5e-05
+  sp|Q1XGE2|HAC1_ASPOR  74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsra 155
+                             ak + ek +++++++ +n+ aa   r++kr e+e l +e  +le++n+ l ++ + l  e     q l +l  evr +r+
+    sp|Q9ES19|ATF4_RAT 265 VTAKVKTEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEEVRKARG 342
+                           46899999*******************************************999988887665....444555555555554 PP
+
+>> sp|P43273|TGA2_ARATH  Transcription factor TGA2 OS=Arabidopsis thaliana GN=TGA2 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.4   2.4    0.0001      0.26      79     131 ..      40      91 ..      31     103 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 15.4 bits;  conditional E-value: 0.0001
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                           + + +q+ ++r+ +nr aa+ sr rk+  +++len +++l q  q  lqr  q
+  sp|P43273|TGA2_ARATH  40 KGKMDQKTLRRLAQNREAARKSRLRKKAYVQQLENSRLKLTQLEQE-LQRARQ 91 
+                           5567899999*****************************9998886.466655 PP
+
+>> sp|Q98UK5|MAFB_DANRE  Transcription factor MafB OS=Danio rerio GN=mafb PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    1.7   0.1       1.5   3.9e+03     132     182 ..      36      86 ..       8     120 .. 0.64
+   2 ?   15.7   1.5   8.5e-05      0.22      73     144 ..     259     331 ..     241     354 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 1.7 bits;  conditional E-value: 1.5
+  sp|Q1XGE2|HAC1_ASPOR 132 leaennrlsqqlaqlaaevrgsrantpl..pgspatasptltptlfkqerdel 182
+                           + a+++   +q+ +l  + +gs ++tp+  p s   +sp+++pt  k + +el
+  sp|Q98UK5|MAFB_DANRE  36 MAAHDRANIRQCNRL--QPQGSVSSTPIstPCSSVPSSPSFSPTEQKNHLEEL 86 
+                           333333333444444..567888888864477888889999999888777765 PP
+
+  == domain 2    score: 15.7 bits;  conditional E-value: 8.5e-05
+  sp|Q1XGE2|HAC1_ASPOR  73 rkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144
+                           + r+ t+de  + ++ +r l+nr+ aq++r ++  + + lenek ql  q + l q +++l  e++    ++ 
+  sp|Q98UK5|MAFB_DANRE 259 HLRGFTKDEVIRlKQKRRTLKNRGYAQSCRFKRVQQKHLLENEKTQLINQVEQLKQEINRLARERDAYKLKCE 331
+                           5577788886541556799**********99888888899********9999999999999888876655544 PP
+
+>> sp|P16951|ATF2_MOUSE  Cyclic AMP-dependent transcription factor ATF-2 OS=Mus musculus GN=Atf2 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.9   1.0   0.00015      0.38      64     125 ..     316     376 ..     262     402 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 14.9 bits;  conditional E-value: 0.00015
+  sp|Q1XGE2|HAC1_ASPOR  64 pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfl 125
+                           p  +     r+ra  ed  e+rr + + rnraaa  +r+++++ ++ le +  +l   n  l
+  sp|P16951|ATF2_MOUSE 316 PQTQNTSGRRRRAANEDPDEKRR-KFLERNRAAASRCRQKRKVWVQSLEKKAEDLSSLNGQL 376
+                           44444455678888888877776.6788******************9998776666655544 PP
+
+>> sp|P27925|CREB1_BOVIN  Cyclic AMP-responsive element-binding protein 1 OS=Bos taurus GN=CREB1 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    0.6   0.1       3.2   8.1e+03     140     211 ..      20      94 ..      10     104 .. 0.62
+   2 ?   14.5   0.1    0.0002       0.5      78     131 ..     262     315 ..     240     320 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 0.6 bits;  conditional E-value: 3.2
+   sp|Q1XGE2|HAC1_ASPOR 140 sqqlaqlaaevrgsrantplpgspatas.ptltptlfkqerdelpleripfptpsl..sdysptlkpstlaessd 211
+                            sqq+   a     + a+  +p + at+s pt+t       +       i    ps+  s    t++ st+aes d
+  sp|P27925|CREB1_BOVIN  20 SQQMTVQAQPQIATLAQVSMPAAHATSSaPTVTLVQLPNGQTVQVHGVIQAAQPSViqSPQVQTVQISTIAESED 94 
+                            566665555556788999999999997537777555444333322233444444441155566777788888776 PP
+
+  == domain 2    score: 14.5 bits;  conditional E-value: 0.0002
+   sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                              +e  ++r  r+++nr aa+ +r++k+  ++ len+   le qn+ l++ l  
+  sp|P27925|CREB1_BOVIN 262 PAEEAARKREVRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKA 315
+                            445667778889************99999999****************998865 PP
+
+>> sp|P15336|ATF2_HUMAN  Cyclic AMP-dependent transcription factor ATF-2 OS=Homo sapiens GN=ATF2 PE=1 SV=4
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.8   1.0   0.00016      0.41      63     125 ..     333     394 ..     281     420 .. 0.75
+
+  Alignments for each domain:
+  == domain 1    score: 14.8 bits;  conditional E-value: 0.00016
+  sp|Q1XGE2|HAC1_ASPOR  63 lpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfl 125
+                            p  ++    r+ra  ed  e+rr + + rnraaa  +r+++++ ++ le +  +l   n  l
+  sp|P15336|ATF2_HUMAN 333 TPQTQSTSGRRRRAANEDPDEKRR-KFLERNRAAASRCRQKRKVWVQSLEKKAEDLSSLNGQL 394
+                           444555566789999999888777.6788******************9998776666655544 PP
+
+>> sp|O35451|ATF6B_MOUSE  Cyclic AMP-dependent transcription factor ATF-6 beta OS=Mus musculus GN=Atf6b PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.6   1.8   0.00018      0.46      38     137 ..     283     383 ..     257     391 .. 0.63
+
+  Alignments for each domain:
+  == domain 1    score: 14.6 bits;  conditional E-value: 0.00018
+   sp|Q1XGE2|HAC1_ASPOR  38 advktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklen.......ekiql 118
+                            + ++ q   p    p   rks     p+p  ++pp   ak       +r +r+++nr +a  sr++k+  l+ le        +  ql
+  sp|O35451|ATF6B_MOUSE 283 GAIRVQPEGPAPAAPRPERKSIV-PAPMPGNSCPPEVDAK-----LLKRQQRMIKNRESACQSRRKKKEYLQGLEArlqavlaDNQQL 364
+                            45666666666667777777764.5788889999986555.....5667788999**9998898888766666654110111133344 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 119 eqqnqfllqrlsqleaenn 137
+                            +++n  l +rl  l aen+
+  sp|O35451|ATF6B_MOUSE 365 RRENAALRRRLEALLAENS 383
+                            4555555555555555554 PP
+
+>> sp|Q2VZV0|IF2_MAGSA  Translation initiation factor IF-2 OS=Magnetospirillum magneticum (strain AMB-1 / ATCC 700264) G
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   15.0   4.8   0.00014      0.36      13     118 ..     185     290 ..     176     325 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 15.0 bits;  conditional E-value: 0.00014
+  sp|Q1XGE2|HAC1_ASPOR  13 dslpatpasevpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkrak...tedekeqrriervlrnraaaq 98 
+                            + p  pa+  pv   +pa  +      +t+e    e   akkr +  +  pv +t  p r+ +k   t+   ++ r er  r+ aa +
+   sp|Q2VZV0|IF2_MAGSA 185 PATPVAPAQPKPVAAAAPAGDATAVPRARTEEEEE-EEERAKKRAAAHKPAPVKRTE-PRRRTGKltiTDALTDDDRSERG-RSLAAVK 270
+                           567899999**********9999999999998765.556699999999888888875.44444453224555667777774.7889999 PP
+
+  sp|Q1XGE2|HAC1_ASPOR  99 tsrerkrleleklenekiql 118
+                            +rer rl+  +  +ek+  
+   sp|Q2VZV0|IF2_MAGSA 271 RARERERLKHMQKGSEKVIR 290
+                           99*****9876666777654 PP
+
+>> sp|Q6ZDF3|TRAB1_ORYSJ  bZIP transcription factor TRAB1 OS=Oryza sativa subsp. japonica GN=TRAB1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.9   0.8   0.00015      0.37      64     139 ..     210     287 ..     174     312 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 14.9 bits;  conditional E-value: 0.00015
+   sp|Q1XGE2|HAC1_ASPOR  64 pvpktnlpprkraktedek.eqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq.leaennrl 139
+                            p p  ++   +r+    ek  +rr +r+++nr +a  sr rk+     le e  +l++qn+ l ++  + +e + n +
+  sp|Q6ZDF3|TRAB1_ORYSJ 210 PYPFEGVIRGRRSGGNVEKvVERRQRRMIKNRESAARSRARKQAYTMELEAEVQKLKEQNMELQKKQEEiMEMQKNFF 287
+                            55555554444544444442689999*****************99999***999999999987766544367776655 PP
+
+>> sp|Q6P788|ATF5_RAT  Cyclic AMP-dependent transcription factor ATF-5 OS=Rattus norvegicus GN=Atf5 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.5   1.1    0.0002       0.5      73     141 ..     200     265 ..     171     280 .. 0.75
+
+  Alignments for each domain:
+  == domain 1    score: 14.5 bits;  conditional E-value: 0.0002
+  sp|Q1XGE2|HAC1_ASPOR  73 rkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141
+                              a t+ +++q++ +   +n++aa   r+rkr e e le+e   le +n+ l +r   +e e + + +
+    sp|Q6P788|ATF5_RAT 200 PSPASTRGDRKQKKRD---QNKSAALRYRQRKRAEGEALEGECQGLEARNRELRERAESVEREIQYVKD 265
+                           3446666666665544...79***********************************9999988665544 PP
+
+>> sp|Q02930|CREB5_HUMAN  Cyclic AMP-responsive element-binding protein 5 OS=Homo sapiens GN=CREB5 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   -0.7   1.8       8.3   2.1e+04     141     171 ..     170     200 ..     144     276 .. 0.63
+   2 ?   15.6   4.7   8.8e-05      0.22      51     143 ..     344     435 ..     333     472 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: -0.7 bits;  conditional E-value: 8.3
+   sp|Q1XGE2|HAC1_ASPOR 141 qqlaqlaaevrgsrantplpgspatasptlt 171
+                            +q   + a + g+  n  +pgs a   p   
+  sp|Q02930|CREB5_HUMAN 170 RQRQPMPASMPGTLPNPTMPGSSAVLMPMER 200
+                            4555677888899999999999888777543 PP
+
+  == domain 2    score: 15.6 bits;  conditional E-value: 8.8e-05
+   sp|Q1XGE2|HAC1_ASPOR  51 kpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennr 138
+                             pa ++ +  q +  p+     r+r   ed   +rr + + rnraaa  +r+++++ +  le +  +l q n+ l   +s+l+ e  +
+  sp|Q02930|CREB5_HUMAN 344 SPATQQMQPTQTIQPPQPTGGRRRRVVDEDPD-ERRRKFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQ 430
+                            57777777778888787777667777666655.55667889**********************9999***999999999999888877 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 139 lsqql 143
+                            l q l
+  sp|Q02930|CREB5_HUMAN 431 LKQLL 435
+                            77654 PP
+
+>> sp|Q66J36|NFIL3_XENLA  Nuclear factor interleukin-3-regulated protein OS=Xenopus laevis GN=nfil3 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.5   0.1    0.0004         1      63     130 ..      44     113 ..      25     140 .. 0.79
+   2 ?   -0.5   0.0         7   1.8e+04      29      51 ..     196     218 ..     179     228 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 13.5 bits;  conditional E-value: 0.0004
+   sp|Q1XGE2|HAC1_ASPOR  63 lpvp.ktnlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrls 130
+                            lpv  k++   rkr    dek++    e+  +n  aa+ sre++rl    len+ i l ++n  l   l 
+  sp|Q66J36|NFIL3_XENLA  44 LPVKnKSSSCRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDMVLENKLIALGEENASLKTELL 113
+                            66642555667899999998766155799999**************************999987766655 PP
+
+  == domain 2    score: -0.5 bits;  conditional E-value: 7
+   sp|Q1XGE2|HAC1_ASPOR  29 spadtslnsadvktqevkpeekk 51 
+                            s  +++++s d+k+q++k e+  
+  sp|Q66J36|NFIL3_XENLA 196 STIQSNCRSTDIKSQRIKQEQME 218
+                            4556788999********99875 PP
+
+>> sp|Q8NHW3|MAFA_HUMAN  Transcription factor MafA OS=Homo sapiens GN=MAFA PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.4   0.4    0.0002      0.52      85     167 ..     255     335 ..     230     345 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 14.4 bits;  conditional E-value: 0.0002
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaev.rgsrantplpgspatas 167
+                           ++ +r l+nr+ aq++r ++  + + le+ek+ql+ q + l   +++l  e++   ++  +la++   gs ++    g p   s
+  sp|Q8NHW3|MAFA_HUMAN 255 KQKRRTLKNRGYAQSCRFKRVQQRHILESEKCQLQSQVEQLKLEVGRLAKERDLYKEKYEKLAGRGgPGSAGGA---GFPREPS 335
+                           445699***********988888999**********99999999999999999999998888875313443333...3333333 PP
+
+>> sp|O88479|FOS_MESAU  Proto-oncogene c-Fos OS=Mesocricetus auratus GN=FOS PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.9   0.3    0.0003      0.76      79     234 ..     134     294 ..     118     303 .. 0.65
+
+  Alignments for each domain:
+  == domain 1    score: 13.9 bits;  conditional E-value: 0.0003
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatas 167
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l   la     ++    +  +p     as
+   sp|O88479|FOS_MESAU 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMFVAS 220
+                           467788999885.899999999999999999************999999999999999998877765433332.223344555555555 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 168 ptlt...p...tlfkqerdelpleripfptpslsdysptlkpstlaessdvaqhpavs.vaglegdgsalplfd 234
+                             lt   p   t   +e   lpl   p p psl            ae  d   +pa s  +g e    ++p +d
+   sp|O88479|FOS_MESAU 221 LDLTgglPeatTPESEEAFSLPLLNDPEPKPSLEPVKSISNVELKAEPFDDFLFPASSrPSGSETTARSVPDMD 294
+                           55552221111223445556777777777777776666666666666666666666552345555555555555 PP
+
+>> sp|P23922|HBP1A_WHEAT  Transcription factor HBP-1a OS=Triticum aestivum PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.2   0.0   0.00024      0.62      64     137 ..     232     306 ..     220     328 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 14.2 bits;  conditional E-value: 0.00024
+   sp|Q1XGE2|HAC1_ASPOR  64 pvpktnlpp.rkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaenn 137
+                            p  +  +p    r+   de+e ++ +r l nr +a+ sr rk+ e+e l ++   l+ +n  l   l++++ e  
+  sp|P23922|HBP1A_WHEAT 232 PAMRGKVPSgSARGEQWDERELKKQKRKLSNRESARRSRLRKQAECEELGQRAEALKSENSSLRIELDRIKKEYE 306
+                            33444555413577788********************************99988889999888777777776655 PP
+
+>> sp|Q90595|MAFF_CHICK  Transcription factor MafF OS=Gallus gallus GN=MAFF PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.6   0.1   0.00018      0.45      84     167 ..      52     134 ..      31     144 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 14.6 bits;  conditional E-value: 0.00018
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatas 167
+                            ++ +r l+nr+ a ++r ++ ++ e l+ +k++le + + l +  + ++ e + l  +   l +  r   a+ p p   atas
+  sp|Q90595|MAFF_CHICK  52 LKQRRRTLKNRGYAASCRVKRVCQKEELQKQKMELEWEVDKLARENAAMRLELDTLRGKYEALQGFARTVAAHGP-PAKVATAS 134
+                           3344699*******************************9999999999999999999999999998888888877.77778876 PP
+
+>> sp|P53450|FOS_TAKRU  Proto-oncogene c-Fos OS=Takifugu rubripes GN=fos PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.9   0.4    0.0003      0.76      73     144 ..     112     182 ..      41     223 .. 0.74
+   2 ?    1.1   0.0       2.3   5.8e+03      17      42 ..     316     340 ..     301     359 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 13.9 bits;  conditional E-value: 0.0003
+  sp|Q1XGE2|HAC1_ASPOR  73 rkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144
+                           r    t +e e++ri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  rl   la
+   sp|P53450|FOS_TAKRU 112 RVEQTTPEEEEKKRIRRE-RNKQAAAKCRNRRRELTDTLQAETDQLEDEKSSLQNDIANLLKEKERLEFILA 182
+                           444557788889999886.788788888999998899**********9999999999999989888876665 PP
+
+  == domain 2    score: 1.1 bits;  conditional E-value: 2.3
+  sp|Q1XGE2|HAC1_ASPOR  17 atpasevpvltvspadtslnsadvkt 42 
+                             p +  pv+t++pa t+l s+ v t
+   sp|P53450|FOS_TAKRU 316 FEPLC-TPVVTCTPACTTLTSSFVFT 340
+                           34433.69************998877 PP
+
+>> sp|Q00969|ATF2_RAT  Cyclic AMP-dependent transcription factor ATF-2 OS=Rattus norvegicus GN=Atf2 PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.3   1.9   0.00044       1.1      64     125 ..     316     376 ..     283     402 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 13.3 bits;  conditional E-value: 0.00044
+  sp|Q1XGE2|HAC1_ASPOR  64 pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfl 125
+                           p  +     r+ra  ed  e+rr + + rnraaa  +r+++++ ++ le +  +l   n  l
+    sp|Q00969|ATF2_RAT 316 PQTQNTSGRRRRAANEDPDEKRR-KFLERNRAAASRCRQKRKVWVQSLEKKAEDLSSLNGQL 376
+                           44444445688888888887776.6788******************9998776666655544 PP
+
+>> sp|O97930|FOS_PIG  Proto-oncogene c-Fos OS=Sus scrofa GN=FOS PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.8   0.2   0.00031      0.78      79     146 ..     134     200 ..      77     302 .. 0.68
+
+  Alignments for each domain:
+  == domain 1    score: 13.8 bits;  conditional E-value: 0.00031
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l   la  
+     sp|O97930|FOS_PIG 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAH 200
+                           467788999885.899899999999999999***********99999999999888888887766643 PP
+
+>> sp|P79145|CREM_CANFA  cAMP-responsive element modulator OS=Canis familiaris GN=CREM PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.7   0.1   0.00033      0.84      80     131 ..     299     350 ..     227     354 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 13.7 bits;  conditional E-value: 0.00033
+  sp|Q1XGE2|HAC1_ASPOR  80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                           +e  ++r  r+++nr aa+ +r++k+  ++ len+   le qn+ l++ l  
+  sp|P79145|CREM_CANFA 299 EEATRKRELRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKA 350
+                           4556677789************99999999****************998865 PP
+
+>> sp|Q99941|ATF6B_HUMAN  Cyclic AMP-dependent transcription factor ATF-6 beta OS=Homo sapiens GN=ATF6B PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.3   2.0   0.00045       1.1      37     138 ..     285     387 ..     252     393 .. 0.70
+
+  Alignments for each domain:
+  == domain 1    score: 13.3 bits;  conditional E-value: 0.00045
+   sp|Q1XGE2|HAC1_ASPOR  37 sadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklen.......ekiq 117
+                            ++ ++ q   p    p   rks     p+p  ++pp   ak       +r +r+++nr +a  sr++k+  l+ le        +  q
+  sp|Q99941|ATF6B_HUMAN 285 QGAIRVQPEGPAPSLPRPERKSIV-PAPMPGNSCPPEVDAK-----LLKRQQRMIKNRESACQSRRKKKEYLQGLEArlqavlaDNQQ 366
+                            455777777788888888899874.6799999999987665.....5567778999**998888888876666665411111113446 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 118 leqqnqfllqrlsqleaennr 138
+                            l+++n  l +rl  l aen+ 
+  sp|Q99941|ATF6B_HUMAN 367 LRRENAALRRRLEALLAENSE 387
+                            666677777777777777765 PP
+
+>> sp|P01101|FOS_MOUSE  Proto-oncogene c-Fos OS=Mus musculus GN=Fos PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.7   0.1   0.00033      0.85      79     146 ..     134     200 ..      81     297 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 13.7 bits;  conditional E-value: 0.00033
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l   la  
+   sp|P01101|FOS_MOUSE 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAH 200
+                           467788999885.899889999999999999***********99999999999888888887766643 PP
+
+>> sp|P15337|CREB1_RAT  Cyclic AMP-responsive element-binding protein 1 OS=Rattus norvegicus GN=Creb1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.4   0.1   0.00021      0.54      78     131 ..     278     331 ..     257     336 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 14.4 bits;  conditional E-value: 0.00021
+  sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                             +e  ++r  r+++nr aa+ +r++k+  ++ len+   le qn+ l++ l  
+   sp|P15337|CREB1_RAT 278 PAEEAARKREVRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKA 331
+                           445667778889************99999999****************998865 PP
+
+>> sp|P16220|CREB1_HUMAN  Cyclic AMP-responsive element-binding protein 1 OS=Homo sapiens GN=CREB1 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.4   0.1   0.00021      0.54      78     131 ..     278     331 ..     257     336 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 14.4 bits;  conditional E-value: 0.00021
+   sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                              +e  ++r  r+++nr aa+ +r++k+  ++ len+   le qn+ l++ l  
+  sp|P16220|CREB1_HUMAN 278 PAEEAARKREVRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKA 331
+                            445667778889************99999999****************998865 PP
+
+>> sp|Q01147|CREB1_MOUSE  Cyclic AMP-responsive element-binding protein 1 OS=Mus musculus GN=Creb1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.4   0.1   0.00021      0.54      78     131 ..     278     331 ..     257     336 .. 0.86
+
+  Alignments for each domain:
+  == domain 1    score: 14.4 bits;  conditional E-value: 0.00021
+   sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                              +e  ++r  r+++nr aa+ +r++k+  ++ len+   le qn+ l++ l  
+  sp|Q01147|CREB1_MOUSE 278 PAEEAARKREVRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKA 331
+                            445667778889************99999999****************998865 PP
+
+>> sp|O93602|ATF2_CHICK  Cyclic AMP-dependent transcription factor ATF-2 OS=Gallus gallus GN=ATF2 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.3   2.4   0.00044       1.1      66     129 ..     319     380 ..     260     403 .. 0.68
+
+  Alignments for each domain:
+  == domain 1    score: 13.3 bits;  conditional E-value: 0.00044
+  sp|Q1XGE2|HAC1_ASPOR  66 pktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrl 129
+                           p t+   r+ra  ed  e+rr + + rnraaa  +r+++++ ++ le +  +l   n  l   +
+  sp|O93602|ATF2_CHICK 319 PNTG-GRRRRAANEDPDEKRR-KFLERNRAAASRCRQKRKVWVQSLEKKAEDLSSLNGQLQNEV 380
+                           3332.3477888888877776.6788******************99987766666665554444 PP
+
+>> sp|Q90889|MAFG_CHICK  Transcription factor MafG OS=Gallus gallus GN=MAFG PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.9   0.5    0.0003      0.75      84     165 ..      52     134 ..      30     146 .. 0.70
+
+  Alignments for each domain:
+  == domain 1    score: 13.9 bits;  conditional E-value: 0.0003
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql..aaevrgsrantplpgspat 165
+                            ++ +r l+nr+ a ++r ++  + e le +k +l+q+ + l    + ++ e + l  +   l   a+       tp+ g p t
+  sp|Q90889|MAFG_CHICK  52 LKQRRRTLKNRGYAASCRVKRVTQKEELEKQKAELQQEVEKLASENASMKMELDALRSKYEALqnFARTVARSPVTPVRG-PLT 134
+                           3444699************9999***************999999888888877777654433300333333334566666.333 PP
+
+>> sp|P79702|FOS_CYPCA  Proto-oncogene c-Fos OS=Cyprinus carpio GN=fos PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.5   0.1   0.00039         1      66     145 ..      97     175 ..      39     207 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 13.5 bits;  conditional E-value: 0.00039
+  sp|Q1XGE2|HAC1_ASPOR  66 pktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145
+                           p +n   r    + +e e++r++r  rn+ aa  +r r+r   + l+ e  +le++   l   ++ l  e  rl   la 
+   sp|P79702|FOS_CYPCA  97 PNSNKRARAEQLSPEEEEKKRVRRE-RNKMAAAKCRNRRRELTDTLQAETDELEDEKSALQNDIANLLKEKERLEFILAA 175
+                           4556555555556678888888775.8999999999999998999*********99999999999999999999877764 PP
+
+>> sp|Q8X229|FCR3_CANAL  Fluconazole resistance protein 3 OS=Candida albicans GN=FCR3 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.5   2.5    0.0004         1      81     140 ..     208     267 ..     197     289 .. 0.87
+
+  Alignments for each domain:
+  == domain 1    score: 13.5 bits;  conditional E-value: 0.0004
+  sp|Q1XGE2|HAC1_ASPOR  81 ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140
+                             e+ +++r  +nraa +  rerk  +l+ le + +  e+++q ll+ l q++ +n  ++
+  sp|Q8X229|FCR3_CANAL 208 TEEELQMKRKAQNRAAQRAFRERKESKLKELEAKLLASEEERQKLLDELEQIKKQNISIA 267
+                           4567788999******************************************99997665 PP
+
+>> sp|P12841|FOS_RAT  Proto-oncogene c-Fos OS=Rattus norvegicus GN=Fos PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.1   0.2   0.00052       1.3      79     145 ..     134     199 ..     116     297 .. 0.72
+
+  Alignments for each domain:
+  == domain 1    score: 13.1 bits;  conditional E-value: 0.00052
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l   la 
+     sp|P12841|FOS_RAT 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAA 199
+                           467788999885.899889999999999999***********9999998999888888888766654 PP
+
+>> sp|P49716|CEBPD_HUMAN  CCAAT/enhancer-binding protein delta OS=Homo sapiens GN=CEBPD PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.1   3.4   0.00052       1.3      82     159 ..     192     253 ..     129     266 .. 0.53
+
+  Alignments for each domain:
+  == domain 1    score: 13.1 bits;  conditional E-value: 0.00052
+   sp|Q1XGE2|HAC1_ASPOR  82 keqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantpl 159
+                             e              +  rer  + ++     + + +++nq + q+l +l aen +l q++ ql  ++ g r    +
+  sp|P49716|CEBPD_HUMAN 192 PE-------------YRQRRERNNIAVR---KSRDKAKRRNQEMQQKLVELSAENEKLHQRVEQLTRDLAGLRQFFKQ 253
+                            11.............1222333333333...33445567777788888888888888888888888888887764432 PP
+
+>> sp|Q554P0|BZPJ_DICDI  Probable basic-leucine zipper transcription factor J OS=Dictyostelium discoideum GN=bzpJ PE=3 S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   14.0   0.2   0.00028      0.72      79     148 ..     545     614 ..     535     644 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 14.0 bits;  conditional E-value: 0.00028
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148
+                            +eke ++ +r+++nr  a  sr r+++ +e +e +  +  q+   +  +l+ ++ en  l +ql  l  
+  sp|Q554P0|BZPJ_DICDI 545 AEEKELKKQRRLVKNREYASQSRSRRKIYVENIETKLQKTNQDCASIKSQLNSVKEENKALKKQLYSLTN 614
+                           46899999999**********************9866556666677888999************988865 PP
+
+>> sp|Q55E93|BZPE_DICDI  Probable basic-leucine zipper transcription factor E OS=Dictyostelium discoideum GN=bzpE PE=3 S
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.9   0.1   0.00029      0.74      85     146 ..     248     309 ..     243     324 .. 0.88
+
+  Alignments for each domain:
+  == domain 1    score: 13.9 bits;  conditional E-value: 0.00029
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146
+                           r+ +r+l+nr aaq  r+r++  +  le++   le  n   l ++s+l  en+ + +++  l
+  sp|Q55E93|BZPE_DICDI 248 RKNRRLLKNREAAQLFRQRQKEYINSLESKASSLEASNTTALSKVSHLTEENQLMKDKVRYL 309
+                           77789*******************************************99998887776655 PP
+
+>> sp|P51984|CREB_CHLVR  Cyclic AMP-responsive element-binding protein OS=Chlorohydra viridissima GN=CREB PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.4   0.1   0.00043       1.1      76     131 ..     184     239 ..     149     243 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 13.4 bits;  conditional E-value: 0.00043
+  sp|Q1XGE2|HAC1_ASPOR  76 aktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                            +  +e  ++r  r+ +nr aa+ +r++k+  ++ len+   le qn+ l++ l  
+  sp|P51984|CREB_CHLVR 184 HQLAEEATRKRELRLYKNREAARECRRKKKEYVKCLENRVAVLENQNKALIEELKS 239
+                           444566777788899***********99999999****************998865 PP
+
+>> sp|P01102|FOS_MSVFB  p55-v-Fos-transforming protein OS=FBJ murine osteosarcoma virus GN=V-FOS PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.4   0.1    0.0004         1      79     146 ..     134     200 ..      84     298 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 13.4 bits;  conditional E-value: 0.0004
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l   la  
+   sp|P01102|FOS_MSVFB 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDKKSALQTEIANLLKEKEKLEFILAAH 200
+                           467788999885.899999999999999999***********99999999999988888887766643 PP
+
+>> sp|O77628|FOS_BOVIN  Proto-oncogene c-Fos OS=Bos taurus GN=FOS PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.1   0.0   0.00052       1.3      79     144 ..     134     198 ..      79     298 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 13.1 bits;  conditional E-value: 0.00052
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l   la
+   sp|O77628|FOS_BOVIN 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA 198
+                           467788999885.899888899999999999**********9999888888888777777766555 PP
+
+>> sp|Q8WYK2|JDP2_HUMAN  Jun dimerization protein 2 OS=Homo sapiens GN=JDP2 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.6   2.7   0.00035       0.9      78     145 ..      67     134 ..      30     157 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 13.6 bits;  conditional E-value: 0.00035
+  sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145
+                             de e+rr +r  +n+ aa  +r +k+ + e l++e  +le +n  l  ++ +l+ e+++l  +l +
+  sp|Q8WYK2|JDP2_HUMAN  67 ELDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLELMNAELKTQIEELKQERQQLILMLNR 134
+                           34888999999999**********************************99999999999988776654 PP
+
+>> sp|Q60925|DBP_MOUSE  D site-binding protein OS=Mus musculus GN=Dbp PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.3   1.0   0.00092       2.3      38     135 ..     210     307 ..     184     323 .. 0.69
+
+  Alignments for each domain:
+  == domain 1    score: 12.3 bits;  conditional E-value: 0.00092
+  sp|Q1XGE2|HAC1_ASPOR  38 advktqevkpeek.kpakkrkswgqel.pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqf 124
+                           ad+    +  +e   p + r s  +el p p      rk    e++k+++   r  +n  aa+ sr+ +rl+  ++  +   le++n  
+   sp|Q60925|DBP_MOUSE 210 ADLALSSIPGHETfDPRRHRFS-EEELkPQP-IMKKARKVQVPEEQKDEKYWSRRYKNNEAAKRSRDARRLKENQISVRAAFLEKENAL 296
+                           4444444444443034444444.34441333.334567777789999*******************************99*******99 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 125 llqrlsqleae 135
+                           l q +  ++ e
+   sp|Q60925|DBP_MOUSE 297 LRQEVVAVRQE 307
+                           99987665555 PP
+
+>> sp|P14232|TGA1A_TOBAC  TGACG-sequence-specific DNA-binding protein TGA-1A OS=Nicotiana tabacum GN=TGA1A PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.9   0.4   0.00058       1.5      85     125 ..      74     114 ..      59     133 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 12.9 bits;  conditional E-value: 0.00058
+   sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfl 125
+                            + ++r+ +nr aa+ sr rk+  +++len k++l q  q l
+  sp|P14232|TGA1A_TOBAC  74 KVLRRLAQNREAARKSRLRKKAYVQQLENSKLKLIQLEQEL 114
+                            45678899***********************9988877755 PP
+
+>> sp|P16443|DBP_RAT  D site-binding protein OS=Rattus norvegicus GN=Dbp PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.3   1.0   0.00092       2.3      38     135 ..     210     307 ..     184     323 .. 0.69
+
+  Alignments for each domain:
+  == domain 1    score: 12.3 bits;  conditional E-value: 0.00092
+  sp|Q1XGE2|HAC1_ASPOR  38 advktqevkpeek.kpakkrkswgqel.pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqf 124
+                           ad+    +  +e   p + r s  +el p p      rk    e++k+++   r  +n  aa+ sr+ +rl+  ++  +   le++n  
+     sp|P16443|DBP_RAT 210 ADLALSSIPGHETfDPRRHRFS-EEELkPQP-IMKKARKVQVPEEQKDEKYWSRRYKNNEAAKRSRDARRLKENQISVRAAFLEKENAL 296
+                           4444444444443034444444.34441333.334567777789999*******************************99*******99 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 125 llqrlsqleae 135
+                           l q +  ++ e
+     sp|P16443|DBP_RAT 297 LRQEVVAVRQE 307
+                           99987665555 PP
+
+>> sp|Q68EL6|NFIL3_DANRE  Nuclear factor interleukin-3-regulated protein OS=Danio rerio GN=nfil3 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.9   0.0   0.00059       1.5      71     131 ..      50     111 ..      39     184 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 12.9 bits;  conditional E-value: 0.00059
+   sp|Q1XGE2|HAC1_ASPOR  71 pprkraktedekeqr.riervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                              rkr    dek++    er  +n  aa+ sre++rl    len+ + l ++n  l   l  
+  sp|Q68EL6|NFIL3_DANRE  50 CRRKREFIPDEKKDNlYWERRRKNNEAAKRSREKRRLNDMVLENKLMALGEENASLKAELLS 111
+                            5688888888876551679**************************99999999877666655 PP
+
+>> sp|P01100|FOS_HUMAN  Proto-oncogene c-Fos OS=Homo sapiens GN=FOS PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.7   0.2   0.00069       1.7      79     144 ..     134     198 ..     120     294 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 12.7 bits;  conditional E-value: 0.00069
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l   la
+   sp|P01100|FOS_HUMAN 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA 198
+                           467788999885.899888899999999999**********9999988888888887777766555 PP
+
+>> sp|Q9C5Q2|AI5L3_ARATH  ABSCISIC ACID-INSENSITIVE 5-like protein 3 OS=Arabidopsis thaliana GN=DPBF4 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.9   1.9   0.00059       1.5      70     133 ..     175     239 ..     165     242 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 12.9 bits;  conditional E-value: 0.00059
+   sp|Q1XGE2|HAC1_ASPOR  70 lpprkrakte..dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqle 133
+                             p rkr   e  ++  +rr +r+++nr +a  sr rk+   + le +  +le++n+  l+rl ++e
+  sp|Q9C5Q2|AI5L3_ARATH 175 APGRKRVAGEivEKTVERRQKRMIKNRESAARSRARKQAYTHELEIKVSRLEEENEK-LRRLKEVE 239
+                            58889877662244568999**************************999*****996.57777665 PP
+
+>> sp|Q5FW38|NFIL3_XENTR  Nuclear factor interleukin-3-regulated protein OS=Xenopus tropicalis GN=nfil3 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.4   0.2   0.00083       2.1      71     132 ..      60     122 ..      43     150 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 12.4 bits;  conditional E-value: 0.00083
+   sp|Q1XGE2|HAC1_ASPOR  71 pprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsql 132
+                              rkr    dek++    e+  +n  aa+ sre++rl    len+ i l ++n  l   l  l
+  sp|Q5FW38|NFIL3_XENTR  60 CRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDMVLENKLIALGEENASLKTELLSL 122
+                            46788888888766156799999**************************99998877666555 PP
+
+>> sp|Q8HZP6|FOS_FELCA  Proto-oncogene c-Fos OS=Felis catus GN=FOS PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.5   0.1   0.00076       1.9      79     144 ..     135     199 ..     124     298 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 12.5 bits;  conditional E-value: 0.00076
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l   la
+   sp|Q8HZP6|FOS_FELCA 135 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA 199
+                           467788999885.899888899999999999**********9999888888888777777765554 PP
+
+>> sp|Q9SJN0|ABI5_ARATH  Protein ABSCISIC ACID-INSENSITIVE 5 OS=Arabidopsis thaliana GN=ABI5 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.6   2.2   0.00076       1.9      70     141 ..     340     411 ..     327     435 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 12.6 bits;  conditional E-value: 0.00076
+  sp|Q1XGE2|HAC1_ASPOR  70 lpprkrakte..dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141
+                           l  rkr      ++  +rr +r+++nr +a  sr rk+     le e  ql+++n  l + l++le ++   +q
+  sp|Q9SJN0|ABI5_ARATH 340 LRGRKRVVDGpvEKVVERRQRRMIKNRESAARSRARKQAYTVELEAELNQLKEENAQLKHALAELERKRK--QQ 411
+                           555666543210233579999*************************************999998876543..33 PP
+
+>> sp|P42777|GBF4_ARATH  G-box-binding factor 4 OS=Arabidopsis thaliana GN=GBF4 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.6   2.5   0.00074       1.9      77     134 ..     181     238 ..     170     259 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 12.6 bits;  conditional E-value: 0.00074
+  sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqlea 134
+                              d+   +r +r+++nr +a  srerk+  +  le    +le++n+ ll+ + +   
+  sp|P42777|GBF4_ARATH 181 EAMDKAAAQRQKRMIKNRESAARSRERKQAYQVELETLAAKLEEENEQLLKEIEESTK 238
+                           45677788899************************************99998876554 PP
+
+>> sp|P15407|FOSL1_HUMAN  Fos-related antigen 1 OS=Homo sapiens GN=FOSL1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.6   4.3   0.00072       1.8      64     202 ..      88     234 ..      64     263 .. 0.61
+
+  Alignments for each domain:
+  == domain 1    score: 12.6 bits;  conditional E-value: 0.00072
+   sp|Q1XGE2|HAC1_ASPOR  64 pvpktnlpprkraktedekeqrriervlrnraaaqtsr.erkrl......eleklenekiqleqqnqfllqrlsqle..aennrlsqq 142
+                            p p  +  p  +   e e e+rr++r  rn+ aa  +r +rk l      e +kle+ek  l+++ + l ++  +le   e +r   +
+  sp|P15407|FOSL1_HUMAN  88 PPPGVRRRPCEQISPE-EEERRRVRRE-RNKLAAAKCRnRRKELtdflqaETDKLEDEKSGLQREIEELQKQKERLElvLEAHRPICK 173
+                            5566666666665544.5577888776.666555555505554432222256778888777777666665555554422466777777 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 143 laqlaaev.rgsrantplpgspatasptltptlfkq.erdelpleripfptpslsdysptlk 202
+                            + + a e   gs ++t  p +p+   p+++ +     e + l      + tpsl+ ++p+l 
+  sp|P15407|FOSL1_HUMAN 174 IPEGAKEGdTGSTSGTSSPPAPCRPVPCISLSPGPVlEPEALHTP-TLMTTPSLTPFTPSLV 234
+                            777777642689999999999988888765433322033333333.3467899999999874 PP
+
+>> sp|O15525|MAFG_HUMAN  Transcription factor MafG OS=Homo sapiens GN=MAFG PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.9   0.4   0.00059       1.5      84     152 ..      52     120 ..      30     144 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 12.9 bits;  conditional E-value: 0.00059
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrg 152
+                            ++ +r l+nr+ a ++r ++  + e le +k +l+q+ + l    + ++ e + l  +   l    r 
+  sp|O15525|MAFG_HUMAN  52 LKQRRRTLKNRGYAASCRVKRVTQKEELEKQKAELQQEVEKLASENASMKLELDALRSKYEALQTFART 120
+                           3444699************9999***************9999999999999888887766655554443 PP
+
+>> sp|P40535|ACA2_YEAST  ATF/CREB activator 2 OS=Saccharomyces cerevisiae GN=CST6 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.2   0.0   0.00098       2.5      85     133 ..     427     475 ..     363     484 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 12.2 bits;  conditional E-value: 0.00098
+  sp|Q1XGE2|HAC1_ASPOR  85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqle 133
+                           +r + + rnr aa  +r+rk++ + +l+ e  +++++n++ll++l+  e
+  sp|P40535|ACA2_YEAST 427 KRARLLERNRIAASKCRQRKKVAQLQLQKEFNEIKDENRILLKKLNYYE 475
+                           34444558***********************************998765 PP
+
+>> sp|A7YY73|MAFF_BOVIN  Transcription factor MafF OS=Bos taurus GN=MAFF PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.7   0.2   0.00069       1.7      84     174 ..      52     139 ..      32     170 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 12.7 bits;  conditional E-value: 0.00069
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasptltp 172
+                            ++ +r l+nr+ a ++r ++ ++ e l+ +k +le++ + l +  + ++ e + l  ++  l +  r   a     g  a  +p    
+  sp|A7YY73|MAFF_BOVIN  52 LKQRRRTLKNRGYAASCRVKRVCQKEELQKQKSELEREVDKLARENAAMRLELDALRGKCEALQGFARSVAA---ARGPAALVAPASVI 137
+                           3444699*******************************9999999999999988887776666555444332...33444445555555 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 173 tl 174
+                           t+
+  sp|A7YY73|MAFF_BOVIN 138 TI 139
+                           55 PP
+
+>> sp|Q8PY58|PSMR_METMA  Proteasome-activating nucleotidase OS=Methanosarcina mazei GN=pan PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    6.0   0.1     0.075   1.9e+02     110     154 ..      26      70 ..      22      95 .. 0.82
+   2 ?    5.0   0.0      0.15   3.8e+02     115     194 ..     255     332 ..     236     374 .. 0.72
+
+  Alignments for each domain:
+  == domain 1    score: 6.0 bits;  conditional E-value: 0.075
+  sp|Q1XGE2|HAC1_ASPOR 110 klenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsr 154
+                            ++++  qle +n fl +++sq+e+e + l  q  +   e+r  +
+  sp|Q8PY58|PSMR_METMA  26 SVQDRVRQLESRNSFLEEQCSQIESEKRYLENQKIKYEREIRKLQ 70 
+                           566677799*********************999999999998655 PP
+
+  == domain 2    score: 5.0 bits;  conditional E-value: 0.15
+  sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasp.tltptlfkqerdelpleripfptpsl 194
+                            i +++ + +  +rl++  + ++ +++ l ql ae+ g   +  +    at  p  l p + +  r +  l ++p+p   +
+  sp|Q8PY58|PSMR_METMA 255 IIFIDELDSIAARRLNETTGADREVQRTLMQLLAEMDGFDKRKNIRIIAATNRPdVLDPAILRPGRFDR-LVHVPMPG--I 332
+                           4567778888999*******9*****************8777777778888888358899999998764.55666664..3 PP
+
+>> sp|Q56TN0|FOS_PHORO  Proto-oncogene c-Fos OS=Phodopus roborovskii GN=FOS PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.8   0.4    0.0012       3.2      79     142 ..     134     196 ..     118     251 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.8 bits;  conditional E-value: 0.0012
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqq 142
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l   
+   sp|Q56TN0|FOS_PHORO 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFI 196
+                           467788999885.899888899999999899**********99988888888777777666555 PP
+
+>> sp|P23050|FOS_AVINK  p55-v-Fos-transforming protein OS=Avian retrovirus NK24 GN=V-FOS PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   0.8    0.0011       2.8      79     140 ..      88     148 ..      41     168 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.0011
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l 
+   sp|P23050|FOS_AVINK  88 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEEEKSALQAEIANLLKEKEKLE 148
+                           467788999885.899889999999999999**********999888888877777766665 PP
+
+>> sp|Q9LES3|AI5L2_ARATH  ABSCISIC ACID-INSENSITIVE 5-like protein 2 OS=Arabidopsis thaliana GN=DPBF3 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   1.6    0.0011       2.8      68     126 ..     207     268 ..     199     276 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.0011
+   sp|Q1XGE2|HAC1_ASPOR  68 tnlpprkrakted...ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfll 126
+                            t+ p rkr  + +   +  +rr +r+++nr +a  sr rk+   + le +  +le++n+ l 
+  sp|Q9LES3|AI5L2_ARATH 207 TQTPGRKRVASGEvveKTVERRQKRMIKNRESAARSRARKQAYTHELEIKVSRLEEENERLR 268
+                            77899999766542214458999**************************9999**9998765 PP
+
+>> sp|Q84JK2|FD_ARATH  Protein FD OS=Arabidopsis thaliana GN=FD PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.7   1.8    0.0014       3.5      66     133 ..     197     264 ..     188     281 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 11.7 bits;  conditional E-value: 0.0014
+  sp|Q1XGE2|HAC1_ASPOR  66 pktnlpprkraktede.keqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqle 133
+                           p +++  +kr++  +e    rr +r+++nr +a  sr rk+     le e  +l+ +n  l ++ +ql+
+    sp|Q84JK2|FD_ARATH 197 PSSSFG-KKRGQDSNEgSGNRRHKRMIKNRESAARSRARKQAYTNELELEVAHLQAENARLKRQQDQLK 264
+                           555554.455554444167899**************************999999999998877777664 PP
+
+>> sp|A5PJV0|MAFG_BOVIN  Transcription factor MafG OS=Bos taurus GN=MAFG PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.3   0.5    0.0009       2.3      84     151 ..      52     119 ..      30     144 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 12.3 bits;  conditional E-value: 0.0009
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr 151
+                            ++ +r l+nr+ a ++r ++  + e le +k +l+q+ + l    + ++ e + l  +   l    r
+  sp|A5PJV0|MAFG_BOVIN  52 LKQRRRTLKNRGYAASCRVKRVTQKEELEKQKAELQQEVEKLASENASMKLELDALRSKYEALQNFAR 119
+                           3444699************9999***************999999988888888877665544443333 PP
+
+>> sp|O54790|MAFG_MOUSE  Transcription factor MafG OS=Mus musculus GN=Mafg PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.3   0.5    0.0009       2.3      84     151 ..      52     119 ..      30     144 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 12.3 bits;  conditional E-value: 0.0009
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr 151
+                            ++ +r l+nr+ a ++r ++  + e le +k +l+q+ + l    + ++ e + l  +   l    r
+  sp|O54790|MAFG_MOUSE  52 LKQRRRTLKNRGYAASCRVKRVTQKEELEKQKAELQQEVEKLASENASMKLELDALRSKYEALQNFAR 119
+                           3444699************9999***************999999988888888877665544443333 PP
+
+>> sp|Q39234|TGA3_ARATH  Transcription factor TGA3 OS=Arabidopsis thaliana GN=TGA3 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.7   1.9    0.0014       3.4      77     131 ..      90     144 ..      82     161 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 11.7 bits;  conditional E-value: 0.0014
+  sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                           + ed+  ++  +r+ +nr aa+ sr rk+ ++++le  +++l q  q l++  +q
+  sp|Q39234|TGA3_ARATH  90 QDEDRINDKMKRRLAQNREAARKSRLRKKAHVQQLEESRLKLSQLEQELVRARQQ 144
+                           456666677778899*****************************99988876555 PP
+
+>> sp|P07049|CPPB_NEIGO  Cryptic plasmid protein B OS=Neisseria gonorrhoeae GN=cppB PE=4 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.8   1.0    0.0013       3.3     108     151 ..     147     194 ..     122     204 .. 0.71
+
+  Alignments for each domain:
+  == domain 1    score: 11.8 bits;  conditional E-value: 0.0013
+  sp|Q1XGE2|HAC1_ASPOR 108 leklenekiqleqqnq....fllqrlsqleaennrlsqqlaqlaaevr 151
+                           l  le+    +eq+ +     l +rl++le en  l+qqla laae+ 
+  sp|P07049|CPPB_NEIGO 147 LAELESNHAAIEQRMMkaltHLGERLAELEQENTSLAQQLASLAAELE 194
+                           5566666666666554111156689********************984 PP
+
+>> sp|P11939|FOS_CHICK  Proto-oncogene c-Fos OS=Gallus gallus GN=FOS PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.6   0.9    0.0015       3.8      79     140 ..     133     193 ..      88     212 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 11.6 bits;  conditional E-value: 0.0015
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l 
+   sp|P11939|FOS_CHICK 133 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEEEKSALQAEIANLLKEKEKLE 193
+                           467788999885.899889999999999999**********999888888877777666665 PP
+
+>> sp|P29176|FOSX_MSVFR  Transforming protein v-Fos/v-Fox OS=FBR murine osteosarcoma virus GN=FOS-FOX PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   0.0    0.0011       2.9      80     144 ..     111     174 ..      54     239 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.0011
+  sp|Q1XGE2|HAC1_ASPOR  80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144
+                           +e  +rri+r  rn+ aa  +r r+r   + l+ e  qle++   l   ++ l  e  +l   la
+  sp|P29176|FOSX_MSVFR 111 EEEVKRRIRR-ERNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA 174
+                           4555788877.5899999999999999999**********9999988888888877777766555 PP
+
+>> sp|O54791|MAFF_MOUSE  Transcription factor MafF OS=Mus musculus GN=Maff PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.0   0.6    0.0011       2.9      84     168 ..      52     133 ..      32     154 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 12.0 bits;  conditional E-value: 0.0011
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasp 168
+                            ++ +r l+nr+ a ++r ++ ++ e l+ +k +le++ + l +  + ++ e + l  ++  l +  r   a     g  a  +p
+  sp|O54791|MAFF_MOUSE  52 LKQRRRTLKNRGYAASCRVKRVCQKEELQKQKSELEREVDKLARENAAMRLELDALRGKCEALQGFARSVAA---ARGPAALVAP 133
+                           3444699*******************************9999999999999888887666655554443322...2233333444 PP
+
+>> sp|Q8TI88|PSMR_METAC  Proteasome-activating nucleotidase OS=Methanosarcina acetivorans GN=pan PE=3 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    6.0   0.1     0.075   1.9e+02     110     154 ..      26      70 ..      22      95 .. 0.82
+   2 ?    4.1   0.0      0.28   7.1e+02     115     190 ..     255     330 ..     236     363 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 6.0 bits;  conditional E-value: 0.075
+  sp|Q1XGE2|HAC1_ASPOR 110 klenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsr 154
+                            ++++  qle +n fl +++sq+e+e + l  q  +   e+r  +
+  sp|Q8TI88|PSMR_METAC  26 SVQDRVRQLESRNSFLEEQCSQIESEKRYLENQKIKYEREIRKLQ 70 
+                           566677799*********************999999999998655 PP
+
+  == domain 2    score: 4.1 bits;  conditional E-value: 0.28
+  sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasp.tltptlfkqerdelpleripfp 190
+                            i +++ + +  +rl++  + ++ +++ l ql ae+ g   +  +    at  p  l p + +  r +  l ++p+p
+  sp|Q8TI88|PSMR_METAC 255 IIFIDELDSIAARRLNETTGADREVQRTLMQLLAEMDGFDKRKNIRIIAATNRPdVLDPAILRPGRFDR-LVHVPMP 330
+                           4567778888999******999****************8777777777888887357899999988764.5566665 PP
+
+>> sp|O08750|NFIL3_MOUSE  Nuclear factor interleukin-3-regulated protein OS=Mus musculus GN=Nfil3 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.1   0.3    0.0021       5.5      69     129 ..      58     119 ..      51     142 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 11.1 bits;  conditional E-value: 0.0021
+   sp|Q1XGE2|HAC1_ASPOR  69 nlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrl 129
+                            +   rkr    dek++    e+  +n  aa+ sre++rl    len+ i l ++n  l   l
+  sp|O08750|NFIL3_MOUSE  58 SACRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDLVLENKLIALGEENATLKAEL 119
+                            5567899999998766155789999**************************99998876655 PP
+
+>> sp|Q76MX4|MAFG_RAT  Transcription factor MafG OS=Rattus norvegicus GN=Mafg PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.7   0.5    0.0013       3.4      84     149 ..      79     144 ..      57     170 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 11.7 bits;  conditional E-value: 0.0013
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaae 149
+                            ++ +r l+nr+ a ++r ++  + e le +k +l+q+ + l    + ++ e + l  +   l   
+    sp|Q76MX4|MAFG_RAT  79 LKQRRRTLKNRGYAASCRVKRVTQKEELEKQKAELQQEVEKLASENASMKLELDALRSKYEALQNF 144
+                           3444699************9999***************9999998888888888776655444433 PP
+
+>> sp|P20482|CNC_DROME  Segmentation protein cap'n'collar OS=Drosophila melanogaster GN=cnc PE=1 SV=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.9   0.8    0.0025       6.4      85     152 ..    1197    1264 ..    1154    1284 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 10.9 bits;  conditional E-value: 0.0025
+  sp|Q1XGE2|HAC1_ASPOR   85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrg 152 
+                            r i+r  +n+ aaq +r+rk  ++  le+e   + ++   l q  ++le+e+ r+s ++a+l  +v  
+   sp|P20482|CNC_DROME 1197 RDIRRRGKNKVAAQNCRKRKLDQILTLEDEVNAVVKRKTQLNQDRDHLESERKRISNKFAMLHRHVFQ 1264
+                            67889999**********************988888888899999****************9988754 PP
+
+>> sp|Q90Z72|NFIL3_CHICK  Nuclear factor interleukin-3-regulated protein OS=Gallus gallus GN=NFIL3 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.1   0.2    0.0021       5.3      70     130 ..      59     120 ..      54     145 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 11.1 bits;  conditional E-value: 0.0021
+   sp|Q1XGE2|HAC1_ASPOR  70 lpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrls 130
+                               rkr    dek++    e+  +n  aa+ sre++rl    len+ i l ++n  l   l 
+  sp|Q90Z72|NFIL3_CHICK  59 ACRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDLVLENKLIALGEENATLKAELL 120
+                            557899999898766155789999**************************999988766655 PP
+
+>> sp|Q9VWW0|CREBB_DROME  Cyclic AMP response element-binding protein B OS=Drosophila melanogaster GN=CrebB-17A PE=1 SV=
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   1.7    0.0022       5.6      78     131 ..     296     348 ..     289     355 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.0022
+   sp|Q1XGE2|HAC1_ASPOR  78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                             ed+ ++r i r+ +nr aa+ +r++k+  ++ len+   le qn+ l++ l  
+  sp|Q9VWW0|CREBB_DROME 296 AEDQTRKREI-RLQKNREAARECRRKKKEYIKCLENRVAVLENQNKALIEELKS 348
+                            4666666555.899***********99999******************998865 PP
+
+>> sp|Q8BKJ9|SIRT7_MOUSE  NAD-dependent deacetylase sirtuin-7 OS=Mus musculus GN=Sirt7 PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.2   1.4    0.0019       4.9      74     164 ..      19     111 ..      12     174 .. 0.75
+
+  Alignments for each domain:
+  == domain 1    score: 11.2 bits;  conditional E-value: 0.0019
+   sp|Q1XGE2|HAC1_ASPOR  74 kraktedekeq.rriervlrnraaaqtsrerkrl..eleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantp 158
+                            +r + e+++e+ r++ r+lr  aa + s e  rl  e e l  e     ++++ l +r  ++  +   l +++ +la+ vr +r    
+  sp|Q8BKJ9|SIRT7_MOUSE  19 RRLREEQQRERlRQVSRILRKAAAER-SAEEGRLlaESEDLVTELQGRSRRREGLKRRQEEVCDDPEELRRKVRELAGAVRSARHLVV 105
+                            4556666666547899***9766555.55555542477889988777888888899999999899999**************998777 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 159 lpgspa 164
+                              g+  
+  sp|Q8BKJ9|SIRT7_MOUSE 106 YTGAGI 111
+                            766654 PP
+
+>> sp|Q56TT7|FOS_PHOCM  Proto-oncogene c-Fos OS=Phodopus campbelli GN=FOS PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.9   0.1    0.0025       6.3      79     144 ..     134     198 ..     118     301 .. 0.71
+
+  Alignments for each domain:
+  == domain 1    score: 10.9 bits;  conditional E-value: 0.0025
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144
+                            +e e+rri+r  rn+ aa  +r r+r   + l+ e  +le++   l   ++ l  e  +l   la
+   sp|Q56TT7|FOS_PHOCM 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDHLEDEKSALQTEIANLLKEKEKLEFILA 198
+                           467788999885.88888889999999889999999999999998888888888888777766655 PP
+
+>> sp|Q6IMZ0|NFIL3_RAT  Nuclear factor interleukin-3-regulated protein OS=Rattus norvegicus GN=Nfil3 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.3    0.0023       5.8      69     129 ..      58     119 ..      51     140 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.0023
+  sp|Q1XGE2|HAC1_ASPOR  69 nlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrl 129
+                           +   rkr    dek++    e+  +n  aa+ sre++rl    len+ i l ++n  l   l
+   sp|Q6IMZ0|NFIL3_RAT  58 SACRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDLVLENKLIALGEENATLKAEL 119
+                           5567899999998766155789999**************************99998776655 PP
+
+>> sp|P38749|YAP3_YEAST  AP-1-like transcription factor YAP3 OS=Saccharomyces cerevisiae GN=YAP3 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.6   1.6   0.00037      0.94      81     140 ..     142     201 ..     127     211 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 13.6 bits;  conditional E-value: 0.00037
+  sp|Q1XGE2|HAC1_ASPOR  81 ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140
+                             ++ + ++  +nraa +  rerk  +++ l+++ ++ e+ +q ll+ + +l+  n  ++
+  sp|P38749|YAP3_YEAST 142 VPDDSKAKKKAQNRAAQKAFRERKEARMKELQDKLLESERNRQSLLKEIEELRKANTEIN 201
+                           555666777889*************************************99998887765 PP
+
+>> sp|Q08D88|NFIL3_BOVIN  Nuclear factor interleukin-3-regulated protein OS=Bos taurus GN=NFIL3 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.2    0.0022       5.5      70     129 ..      59     119 ..      52     142 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.0022
+   sp|Q1XGE2|HAC1_ASPOR  70 lpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrl 129
+                               rkr    dek++    e+  +n  aa+ sre++rl    len+ i l ++n  l   l
+  sp|Q08D88|NFIL3_BOVIN  59 ACRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDLVLENKLIALGEENATLKAEL 119
+                            567899999898766155789999**************************99998876655 PP
+
+>> sp|Q16649|NFIL3_HUMAN  Nuclear factor interleukin-3-regulated protein OS=Homo sapiens GN=NFIL3 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.3    0.0023       5.9      70     129 ..      59     119 ..      52     141 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.0023
+   sp|Q1XGE2|HAC1_ASPOR  70 lpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrl 129
+                               rkr    dek++    e+  +n  aa+ sre++rl    len+ i l ++n  l   l
+  sp|Q16649|NFIL3_HUMAN  59 ACRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDLVLENKLIALGEENATLKAEL 119
+                            567899999898766155789999**************************99998876655 PP
+
+>> sp|Q9C7S0|BZI60_ARATH  bZIP transcription factor 60 OS=Arabidopsis thaliana GN=BZIP60 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   2.1    0.0026       6.6      80     142 ..     137     199 ..     132     215 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.0026
+   sp|Q1XGE2|HAC1_ASPOR  80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqq 142
+                            d+   ++ +r +rnr aa  srerk+  ++ le +   le++   l + l  + aen+ l   
+  sp|Q9C7S0|BZI60_ARATH 137 DDAVAKKRRRRVRNRDAAVRSRERKKEYVQDLEKKSKYLERECLRLGRMLECFVAENQSLRYC 199
+                            444455556778**********************99999999988888888899999877654 PP
+
+>> sp|P78962|ATF21_SCHPO  Transcription factor atf21 OS=Schizosaccharomyces pombe GN=atf21 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.1   0.6    0.0022       5.5      74     143 ..     261     327 ..     237     343 .. 0.72
+
+  Alignments for each domain:
+  == domain 1    score: 11.1 bits;  conditional E-value: 0.0022
+   sp|Q1XGE2|HAC1_ASPOR  74 kraktedekeqrriervlrnraaaqtsrerkrleleklenek.iqleqqnqfllqrlsqleaennrlsqql 143
+                                t d k++r +e   rnr aa  +r++k+l  + le    i +e q++ l   +sql+ e   l  ql
+  sp|P78962|ATF21_SCHPO 261 SNNETPDMKRRRFLE---RNRIAASKCRQKKKLWTQNLEKTAhIACE-QSKALRILVSQLREEVICLKNQL 327
+                            455677777666666...7*******************986515555.56667777899888877776654 PP
+
+>> sp|Q1LZH5|CREM_BOVIN  cAMP-responsive element modulator OS=Bos taurus GN=CREM PE=2 SV=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.1    0.0027       6.9      80     130 ..     299     349 ..     227     355 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.0027
+  sp|Q1XGE2|HAC1_ASPOR  80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrls 130
+                           +e  ++r  r+++nr aa+ +r+rk+  ++ le++   le qn+ l++ l 
+  sp|Q1LZH5|CREM_BOVIN 299 EEATRKRELRLMKNREAAKECRRRKKEYVKCLESRVAVLEVQNKKLIEELE 349
+                           4556677789****************99*******99*******9998876 PP
+
+>> sp|B1MX63|THIE_LEUCK  Thiamine-phosphate pyrophosphorylase OS=Leuconostoc citreum (strain KM20) GN=thiE PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.0    0.0029       7.3     189     227 ..     139     177 ..     130     187 .. 0.91
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.0029
+  sp|Q1XGE2|HAC1_ASPOR 189 fptpslsdysptlkpstlaessdvaqhpavsvaglegdg 227
+                           f t s sd  p +  s l++   +a+hp v+++g++ d 
+  sp|B1MX63|THIE_LEUCK 139 FATTSKSDAKPPIGISGLSQLIRIAHHPIVAIGGIQRDN 177
+                           8999********************************996 PP
+
+>> sp|Q5AVK6|NOP16_EMENI  Nucleolar protein 16 OS=Emericella nidulans GN=nop16 PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   2.0    0.0026       6.7      29     114 ..     136     219 ..     127     236 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.0026
+   sp|Q1XGE2|HAC1_ASPOR  29 spadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprk...raktedekeqrriervlrnraaaqtsrerkrleleklen 113
+                            +p +  ln+      e+kp+ kk a +     q+l +   n+ p+k   ++k e+e   r ie+   n aa   +r+rk   +++ e+
+  sp|Q5AVK6|NOP16_EMENI 136 NPLNDPLNDLSDNEPEIKPQVKKAANQ---IVQQLEIQADNVAPKKprhQSKREEEWITRLIEKHGDNYAA--MARDRKLNPMQQTEG 218
+                            688888999888999******999876...46999999999987552114555666666666666656554..579999999998887 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 114 e 114
+                            +
+  sp|Q5AVK6|NOP16_EMENI 219 D 219
+                            6 PP
+
+>> sp|Q9ULX9|MAFF_HUMAN  Transcription factor MafF OS=Homo sapiens GN=MAFF PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.1   0.7    0.0022       5.5      84     152 ..      52     120 ..      32     144 .. 0.74
+
+  Alignments for each domain:
+  == domain 1    score: 11.1 bits;  conditional E-value: 0.0022
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrg 152
+                            ++ +r l+nr+ a ++r ++ ++ e l+ +k +le++ + l +  + ++ e + l  ++  l +  r 
+  sp|Q9ULX9|MAFF_HUMAN  52 LKQRRRTLKNRGYAASCRVKRVCQKEELQKQKSELEREVDKLARENAAMRLELDALRGKCEALQGFARS 120
+                           3444699******************************99999999888988888877665555444443 PP
+
+>> sp|P53567|CEBPG_HUMAN  CCAAT/enhancer-binding protein gamma OS=Homo sapiens GN=CEBPG PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   11.0   0.3    0.0023       5.7      90     147 ..      58     112 ..      21     117 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 11.0 bits;  conditional E-value: 0.0023
+   sp|Q1XGE2|HAC1_ASPOR  90 vlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147
+                            + rn    +  rer  + ++     +++ +q+ q  lqr++ql+ en rl  ++  l 
+  sp|P53567|CEBPG_HUMAN  58 MDRNSDEYRQRRERNNMAVK---KSRLKSKQKAQDTLQRVNQLKEENERLEAKIKLLT 112
+                            55565555566666666554...56888999999****************98887665 PP
+
+>> sp|Q2V2M9|FHOD3_HUMAN  FH1/FH2 domain-containing protein 3 OS=Homo sapiens GN=FHOD3 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.2   0.3    0.0081        21      56     167 ..     412     524 ..     366     535 .. 0.72
+
+  Alignments for each domain:
+  == domain 1    score: 9.2 bits;  conditional E-value: 0.0081
+   sp|Q1XGE2|HAC1_ASPOR  56 rkswgqelpv.pktnlpprkraktedekeqrriervlrnr.aaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141
+                            r s g  +p  p +++ p + a+ e       +   +r++  +    rer+r e e  + ++i+ e++n+f  + l ql ae +    
+  sp|Q2V2M9|FHOD3_HUMAN 412 RPSSGSSVPTtPTSSVSPPQEARWERSSPSGLLTSSFRQHqESLAAERERRRQEREE-RLQRIEREERNKFRYKYLEQLAAEEHEKEL 498
+                            566677777525556777778888888877777776665414556779999998876.4579*****************999875433 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 142 qlaqlaaevrgsrantplpgspatas 167
+                            +   ++        +   p +pa+ +
+  sp|Q2V2M9|FHOD3_HUMAN 499 RSRSVSRGRADLSLDLTSPAAPACLA 524
+                            32222222222223444455555554 PP
+
+>> sp|Q03060|CREM_HUMAN  cAMP-responsive element modulator OS=Homo sapiens GN=CREM PE=1 SV=5
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.7   0.1    0.0028       7.1      80     130 ..     299     349 ..     230     355 .. 0.89
+
+  Alignments for each domain:
+  == domain 1    score: 10.7 bits;  conditional E-value: 0.0028
+  sp|Q1XGE2|HAC1_ASPOR  80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrls 130
+                           +e  ++r  r+++nr aa+ +r+rk+  ++ le++   le qn+ l++ l 
+  sp|Q03060|CREM_HUMAN 299 EEATRKRELRLMKNREAAKECRRRKKEYVKCLESRVAVLEVQNKKLIEELE 349
+                           4556677789****************99*******99*******9998876 PP
+
+>> sp|O68007|BACB_BACLI  Bacitracin synthase 2 OS=Bacillus licheniformis GN=bacB PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.0   0.1    0.0045        11     181     256 ..     353     428 ..     325     464 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 10.0 bits;  conditional E-value: 0.0045
+  sp|Q1XGE2|HAC1_ASPOR 181 elpleripfptpslsdysptlkpstla..essdvaqhpavsvaglegdgsalplfdlgsdlkhhstddvaaplsdddf 256
+                            l l+  p    ++s+y  t+k +tl   e++d      +   gl  d s  plfd   dl+h   dd+a+  +   f
+  sp|O68007|BACB_BACLI 353 TLALRNRPKGNMTFSEYVQTVKNNTLKayENQDYQFDALIEHLGLTHDMSRNPLFDTMFDLQH--ADDFASEAGGGHF 428
+                           5778888888999************95347888888888999*******************99..5788876665555 PP
+
+>> sp|Q5VPE3|HOX2_ORYSJ  Homeobox-leucine zipper protein HOX2 OS=Oryza sativa subsp. japonica GN=HOX2 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.6   0.4     0.003       7.6     106     251 ..     160     302 ..     135     307 .. 0.63
+
+  Alignments for each domain:
+  == domain 1    score: 10.6 bits;  conditional E-value: 0.003
+  sp|Q1XGE2|HAC1_ASPOR 106 leleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa.evr..gsrantplpgspatasptltptlfkqerdelpleripfpt 191
+                           ++ ++ + +  q e + ++l + + +l  en rl ++la+l a +     + a+  +p s a a+ t++p++ +      p        
+  sp|Q5VPE3|HOX2_ORYSJ 160 FQNRRARTKLKQTEVDCEYLKRWCERLADENKRLEKELADLRAlKAApsPASASAMQPSSSAAATLTMCPSCRRVATAGAPH------Q 242
+                           44444444444666677788888888999**********9976233311445677889999999999999876655444443......3 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 192 pslsdysptlkpstlaessdvaqhpavsvag...legdgsalplfdlgsdlkhhstddvaapl 251
+                           p+ ++  p    +t++ ss  a   av+vag   l    + +p     +d   +st + aapl
+  sp|Q5VPE3|HOX2_ORYSJ 243 PNHQQCHPKS-NTTISSSSTAA--AAVAVAGgnvLPSHCQFFPAAAAAADRTSQSTWNAAAPL 302
+                           5556666643.34555555544..456666633345555666666677788888888888887 PP
+
+>> sp|Q84U86|HOX2_ORYSI  Homeobox-leucine zipper protein HOX2 OS=Oryza sativa subsp. indica GN=HOX2 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.6   0.4     0.003       7.6     106     251 ..     160     302 ..     135     307 .. 0.63
+
+  Alignments for each domain:
+  == domain 1    score: 10.6 bits;  conditional E-value: 0.003
+  sp|Q1XGE2|HAC1_ASPOR 106 leleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa.evr..gsrantplpgspatasptltptlfkqerdelpleripfpt 191
+                           ++ ++ + +  q e + ++l + + +l  en rl ++la+l a +     + a+  +p s a a+ t++p++ +      p        
+  sp|Q84U86|HOX2_ORYSI 160 FQNRRARTKLKQTEVDCEYLKRWCERLADENKRLEKELADLRAlKAApsPASASAMQPSSSAAATLTMCPSCRRVATAGAPH------Q 242
+                           44444444444666677788888888999**********9976233311445677889999999999999876655444443......3 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 192 pslsdysptlkpstlaessdvaqhpavsvag...legdgsalplfdlgsdlkhhstddvaapl 251
+                           p+ ++  p    +t++ ss  a   av+vag   l    + +p     +d   +st + aapl
+  sp|Q84U86|HOX2_ORYSI 243 PNHQQCHPKS-NTTISSSSTAA--AAVAVAGgnvLPSHCQFFPAAAAAADRTSQSTWNAAAPL 302
+                           5556666643.34555555544..456666633345555666666677788888888888887 PP
+
+>> sp|Q65US7|THIE_MANSM  Thiamine-phosphate pyrophosphorylase OS=Mannheimia succiniciproducens (strain MBEL55E) GN=thiE 
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.0    0.0026       6.6     135     238 ..      95     196 ..      54     199 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.0026
+  sp|Q1XGE2|HAC1_ASPOR 135 ennrlsqqlaqlaaevrgsrantplpgspatasptltptlfkqerdelpleri.p.fptpslsdysptlkpstlaessdva.qhpavsv 220
+                           ++ +++q+   +   +r +r n p+ g       tl   l  ++r+++    + p fpt s +d+sp +  + + +  +++ + p+v++
+  sp|Q65US7|THIE_MANSM  95 DGIHVGQKDTAVETILRNTR-NKPIIGLS---INTLAQALANKDRQDIDYFGVgPiFPTNSKADHSPLVGMNFIRQIRQLGiDKPCVAI 179
+                           55555555555555555554.67777754...457777777777777776655324*******************999986378***** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 221 aglegdgsalplfdlgsd 238
+                           +g++ + +a+ l  lg+d
+  sp|Q65US7|THIE_MANSM 180 GGIKEESAAI-LRRLGAD 196
+                           ***9876665.6777776 PP
+
+>> sp|P07948|LYN_HUMAN  Tyrosine-protein kinase Lyn OS=Homo sapiens GN=LYN PE=1 SV=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.4   0.2    0.0034       8.6      36      87 ..      15      67 ..       7      73 .. 0.84
+
+  Alignments for each domain:
+  == domain 1    score: 10.4 bits;  conditional E-value: 0.0034
+  sp|Q1XGE2|HAC1_ASPOR 36 nsadvktqevkpeekkp.akkrkswgqelpvpktnlpprkraktedekeqrri 87
+                          ++ d+ktq v+  e+    +   s  q+ pvp ++l p +r +t+d  eq  i
+   sp|P07948|LYN_HUMAN 15 DGVDLKTQPVRNTERTIyVRDPTSNKQQRPVPESQLLPGQRFQTKDPEEQGDI 67
+                          5689*******9888761566678889********************999765 PP
+
+>> sp|Q16534|HLF_HUMAN  Hepatic leukemia factor OS=Homo sapiens GN=HLF PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.4   4.3   0.00042       1.1      21     145 ..     163     287 ..     141     293 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 13.4 bits;  conditional E-value: 0.00042
+  sp|Q1XGE2|HAC1_ASPOR  21 sevpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrlele 109
+                              p     p     + ad+    +  +e    +krk   +el         rk    +d k+++   r  +n  aa+ sr+ +rl+  
+   sp|Q16534|HLF_HUMAN 163 PIDPDTIQVPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIKKARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKEN 251
+                           3334444457777778888888999999998889999888888533334467888889999**************************** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 110 klenekiqleqqnqfllqrlsqleaennrlsqqlaq 145
+                           ++  +   le++n  l q +++l+ e +++   la+
+   sp|Q16534|HLF_HUMAN 252 QIAIRASFLEKENSALRQEVADLRKELGKCKNILAK 287
+                           ********************9999998888777776 PP
+
+>> sp|Q9XGJ4|GGM13_GNEGN  MADS-box protein GGM13 OS=Gnetum gnemon GN=GGM13 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.8   0.6    0.0026       6.6      74     147 ..      92     165 ..      75     230 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 10.8 bits;  conditional E-value: 0.0026
+   sp|Q1XGE2|HAC1_ASPOR  74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiql.eqqnqfllqrlsqleaennrlsqqlaqla 147
+                             r k e+ek q  i+r++     + t  e  +l + +le+   ++  ++nq +lq+l  l+ + + l +q ++l+
+  sp|Q9XGJ4|GGM13_GNEGN  92 TRMKNENEKLQTNIRRMMGEDLTSLTMTELHHLGQ-QLESASSRVrSRKNQLMLQQLENLRRKERILEDQNSHLC 165
+                            689**************************999975.57766555415789*****99988777666665544333 PP
+
+>> sp|P27921|JUND_CHICK  Transcription factor jun-D OS=Gallus gallus GN=JUND PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.4    0.0036       9.2      71     139 ..     230     298 ..     195     308 .. 0.70
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.0036
+  sp|Q1XGE2|HAC1_ASPOR  71 pprkraktedekeqrrier.vlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrl 139
+                           pp       d +e+ + er  lrnr aa  +r+rk  ++ +le +   l+ qn  l    s l+ +  +l
+  sp|P27921|JUND_CHICK 230 PPLSPI-DMDTQERIKAERkRLRNRIAASKCRKRKLERISRLEEKVKSLKSQNTELASTASLLREQVAQL 298
+                           333333.344555555555269************999999999777778999987776666655554444 PP
+
+>> sp|Q5XHX8|THEG_RAT  Testicular haploid expressed gene protein OS=Rattus norvegicus GN=Theg PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.4   0.7    0.0034       8.8     117     205 ..     218     300 ..     182     318 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 10.4 bits;  conditional E-value: 0.0034
+  sp|Q1XGE2|HAC1_ASPOR 117 qleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasptltptlfkqerdelpleripfptpslsdysptlkpst 205
+                            le q    l+rl+  + +nn  s  +++++   r ++   p p +   a p    tl  +e d +     p p p +sdy+  l+ +t
+    sp|Q5XHX8|THEG_RAT 218 TLEYQASNRLKRLATPKIRNNIWSINMSEVSQVSRAAQMAVPTPRTLRLAKPRAPATLL-EEWDPM-----PKPKPYVSDYNRLLQLAT 300
+                           45556666799*****************************************9877776.567755.....679999****99887655 PP
+
+>> sp|P18847|ATF3_HUMAN  Cyclic AMP-dependent transcription factor ATF-3 OS=Homo sapiens GN=ATF3 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.4   1.6    0.0034       8.7      76     158 ..      82     163 ..      71     168 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 10.4 bits;  conditional E-value: 0.0034
+  sp|Q1XGE2|HAC1_ASPOR  76 aktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql..aqlaaevrgsrantp 158
+                           a  ede+++rr e   rn+ aa  +r +k+ + e l+ e  +le  n  l  ++ +l+ e ++l  +l   +  + vr + ++tp
+  sp|P18847|ATF3_HUMAN  82 APEEDERKKRRRE---RNKIAAAKCRNKKKEKTECLQKESEKLESVNAELKAQIEELKNEKQHLIYMLnlHRPTCIVRAQNGRTP 163
+                           4456666666655...7999999***************************99999999999988765411455666777777776 PP
+
+>> sp|P24068|OCS1_MAIZE  Ocs element-binding factor 1 OS=Zea mays GN=OBF1 PE=2 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.4   3.8    0.0034       8.7      84     149 ..      25      90 ..      12     101 .. 0.77
+
+  Alignments for each domain:
+  == domain 1    score: 10.4 bits;  conditional E-value: 0.0034
+  sp|Q1XGE2|HAC1_ASPOR  84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaae 149
+                           +rr +r l nr +a+ sr rk+ +l+ l +e  +l+ +n  +  r  ++ ++  r+ q+   l a+
+  sp|P24068|OCS1_MAIZE  25 HRREKRRLSNRESARRSRLRKQQHLDELVQEVARLQADNARVAARARDIASQYTRVEQENTVLRAR 90 
+                           577778888999999999999999999999988888888888888888888888888876655543 PP
+
+>> sp|P20393|NR1D1_HUMAN  Nuclear receptor subfamily 1 group D member 1 OS=Homo sapiens GN=NR1D1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.1   4.2    0.0043        11      83     197 ..     173     288 ..     159     298 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 10.1 bits;  conditional E-value: 0.0043
+   sp|Q1XGE2|HAC1_ASPOR  83 eqrriervlrnraaaqtsrerkrlel....eklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspat. 165
+                            e   i r+ rnr+  q +r +k l +    + ++  +i  ++++++l +  s +   nn+ls q+     e   ++  tp p +p+  
+  sp|P20393|NR1D1_HUMAN 173 ENCSIVRINRNRC--QQCRFKKCLSVgmsrDAVRFGRIPKREKQRMLAEMQSAMNLANNQLSSQC---PLETSPTQHPTPGPMGPSPp 255
+                            5556778888875..66777776654111145677788888888889999999999999999875...45666667777777666541 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 166 asptltptl.fkqerdelpleripfptpslsdy 197
+                             +p  +p + f q  ++l   r p p p++ d 
+  sp|P20393|NR1D1_HUMAN 256 PAPVPSPLVgFSQFPQQLTPPRSPSPEPTVEDV 288
+                            4577777655999999************99885 PP
+
+>> sp|P13346|FOSB_MOUSE  Protein fosB OS=Mus musculus GN=Fosb PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.2   8.1    0.0039        10      69     164 ..     142     236 ..     130     297 .. 0.72
+
+  Alignments for each domain:
+  == domain 1    score: 10.2 bits;  conditional E-value: 0.0039
+  sp|Q1XGE2|HAC1_ASPOR  69 nlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrant 157
+                              pr    t +e e+rr++r  rn+ aa  +r r+r   ++l+ e  qle++   l   +++l+ e  rl   l      ++      
+  sp|P13346|FOSB_MOUSE 142 PRRPREETLTPEEEEKRRVRRE-RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEG 229
+                           445788888999999***9885.89999999999999999*****************************99877655444444444455 PP
+
+  sp|Q1XGE2|HAC1_ASPOR 158 plpgspa 164
+                           p pg  a
+  sp|P13346|FOSB_MOUSE 230 PGPGPLA 236
+                           5555544 PP
+
+>> sp|P42775|GBF2_ARATH  G-box-binding factor 2 OS=Arabidopsis thaliana GN=GBF2 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.8   1.5    0.0051        13      80     152 ..     246     322 ..     236     329 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 9.8 bits;  conditional E-value: 0.0051
+  sp|Q1XGE2|HAC1_ASPOR  80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqq....laqlaaevrg 152
+                           +eke +r +r   nr +a+ sr rk+ e e+l  +   l  +n+ l  +l+ql  e+ +l  +    l ql a+  g
+  sp|P42775|GBF2_ARATH 246 NEKEVKREKRKQSNRESARRSRLRKQAETEQLSVKVDALVAENMSLRSKLGQLNNESEKLRLEneaiLDQLKAQATG 322
+                           79999***************************998889999***********9877665543211224566666655 PP
+
+>> sp|Q09926|PCR1_SCHPO  Transcription factor pcr1 OS=Schizosaccharomyces pombe GN=pcr1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.2   7.9    0.0079        20      74     145 ..       4      73 ..       1     169 [. 0.60
+
+  Alignments for each domain:
+  == domain 1    score: 9.2 bits;  conditional E-value: 0.0079
+  sp|Q1XGE2|HAC1_ASPOR  74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql.aq 145
+                           k+   +dek++r +e   rnr aa   r++k+  ++ le+      +q++ l   lsql+ e  rl  ql a+
+  sp|Q09926|PCR1_SCHPO   4 KKKEVDDEKRRRILE---RNRIAASKFRQKKKEWIKELEQTANAAFEQSKRLQLLLSQLQQEAFRLKSQLlAH 73 
+                           445567777666555...7***********9987777776665555555555556777777777776554122 PP
+
+>> sp|P24813|YAP2_YEAST  AP-1-like transcription activator YAP2 OS=Saccharomyces cerevisiae GN=CAD1 PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.0   1.5    0.0045        11      64     121 ..      29      80 ..      15     105 .. 0.73
+
+  Alignments for each domain:
+  == domain 1    score: 10.0 bits;  conditional E-value: 0.0045
+  sp|Q1XGE2|HAC1_ASPOR  64 pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqq 121
+                           p  k + p rkr  +e   + r   r  +nraa +  r+rk  +++ l+  +++l +q
+  sp|P24813|YAP2_YEAST  29 PKRKVGRPGRKRIDSE--AKSR---RTAQNRAAQRAFRDRKEAKMKSLQE-RVELLEQ 80 
+                           5566777888876544..3334...6789****************99974.5544333 PP
+
+>> sp|Q64709|HLF_RAT  Hepatic leukemia factor OS=Rattus norvegicus GN=Hlf PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   12.5   4.4   0.00076       1.9      24     145 ..     166     287 ..     141     293 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 12.5 bits;  conditional E-value: 0.00076
+  sp|Q1XGE2|HAC1_ASPOR  24 pvltvspadtslnsadvktqevkpeekkpakkrkswgqel.pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrlelekl 111
+                           p     p     + ad+    +   e    +krk   +el p p      rk    +d k+++   r  +n  aa+ sr+ +rl+  ++
+     sp|Q64709|HLF_RAT 166 PDTIQVPVGYEPDPADLALSSIPGPEMFDPRKRKFSEEELkPQPMI-KKARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKENQI 253
+                           3334446666667788877777655565566777767777244444.457888889999****************************** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 112 enekiqleqqnqfllqrlsqleaennrlsqqlaq 145
+                             +   le++n  l q +++l+ e +++   la+
+     sp|Q64709|HLF_RAT 254 AIRASFLEKENSALRQEVADLRKELGKCKNILAK 287
+                           ******************9999998888777776 PP
+
+>> sp|Q02100|SKO1_YEAST  CRE-binding bZIP protein SKO1 OS=Saccharomyces cerevisiae GN=SKO1 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.9   0.3    0.0047        12      79     120 ..     425     466 ..     390     481 .. 0.83
+
+  Alignments for each domain:
+  == domain 1    score: 9.9 bits;  conditional E-value: 0.0047
+  sp|Q1XGE2|HAC1_ASPOR  79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleq 120
+                            +e+e++r e + rnr aa   r+rk+  ++k+en+    e 
+  sp|Q02100|SKO1_YEAST 425 NEEQERKRKEFLERNRVAASKFRKRKKEYIKKIENDLQFYES 466
+                           3567888999999**********************8655555 PP
+
+>> sp|P50198|LINX_PSEPA  2,5-dichloro-2,5-cyclohexadiene-1,4-diol dehydrogenase OS=Pseudomonas paucimobilis GN=linX PE=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.0   0.0    0.0045        11     138     190 ..     164     217 ..     158     225 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 10.0 bits;  conditional E-value: 0.0045
+  sp|Q1XGE2|HAC1_ASPOR 138 rlsqqlaqlaaevrgsrantplpgspata.sptltptlfkqerdelpleripfp 190
+                           r+  + a l    rg r nt +pg+  t  +  + p + kq+  ++p+ ++  p
+  sp|P50198|LINX_PSEPA 164 RIMSKAAALEFVDRGVRVNTIVPGGMNTPiTANVPPDVLKQQTSQIPMGKLGDP 217
+                           5566677777888**********9876641567899************998766 PP
+
+>> sp|Q6DGM8|JDP2_DANRE  Jun dimerization protein 2 OS=Danio rerio GN=jdp2 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.2   4.0    0.0039        10      76     141 ..      62     128 ..      48     142 .. 0.82
+
+  Alignments for each domain:
+  == domain 1    score: 10.2 bits;  conditional E-value: 0.0039
+  sp|Q1XGE2|HAC1_ASPOR  76 aktede.keqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141
+                            k+ed+  ++r+ +r  +n+ aa  +r rk+ + + l+ e  +le+ n  l  ++ +l++e+++l  
+  sp|Q6DGM8|JDP2_DANRE  62 IKSEDDdDDERKKRRREKNKVAAARCRNRKKERTDFLQKESERLEMLNSDLKSQIEELKSERQQLIV 128
+                           566554145666677789*************************************999999988765 PP
+
+>> sp|A2Z0Q0|HOX25_ORYSI  Homeobox-leucine zipper protein HOX25 OS=Oryza sativa subsp. indica GN=HOX25 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   10.3   0.4    0.0036       9.1      53     173 ..      21     140 ..      13     219 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 10.3 bits;  conditional E-value: 0.0036
+   sp|Q1XGE2|HAC1_ASPOR  53 akkrkswgqelpvpktnlpprkraktedek..eqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennr 138
+                            a+kr+   +++     ++   kr k e e+  e  r   +  ++ a   + +r r + ++le +  +l+  ++ ll   + l a+n  
+  sp|A2Z0Q0|HOX25_ORYSI  21 ARKRRLTAEQVRALERSFEEEKR-KLEPERksELARRLGIAPRQVAVWFQNRRARWKTKQLELDFDRLRAAHDELLAGRAALAADNES 107
+                            67777777777777777766665.444444013333334556667777788889999999999999999999999999999******* PP
+
+   sp|Q1XGE2|HAC1_ASPOR 139 lsqqlaqlaaevrgsrantplpgspatasptltpt 173
+                            l  q+  l  +++   + +p p spa a  t  p 
+  sp|A2Z0Q0|HOX25_ORYSI 108 LRSQVILLTEKLQA-NGKSPSP-SPAPAEQTAVPA 140
+                            ****9988877764.5677887.799999888886 PP
+
+>> sp|Q9UPR3|SMG5_HUMAN  Protein SMG5 OS=Homo sapiens GN=SMG5 PE=1 SV=3
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.8   0.3    0.0052        13     112     173 ..     800     860 ..     792     901 .. 0.78
+
+  Alignments for each domain:
+  == domain 1    score: 9.8 bits;  conditional E-value: 0.0052
+  sp|Q1XGE2|HAC1_ASPOR 112 enekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsr..antplpgspatasptltpt 173
+                           e+e + ++ q qf   r++q ea++nrl +++aql  ++  s+  ++  +p + +  sp l p 
+  sp|Q9UPR3|SMG5_HUMAN 800 EQESLLQQAQAQF---RMAQEEARRNRLMRDMAQLRLQLEVSQleGSLQQPKAQSAMSPYLVPD 860
+                           5555555666666...899***************998776665115677888888899999886 PP
+
+>> sp|Q41558|HBP1C_WHEAT  Transcription factor HBP-1b(c1) (Fragment) OS=Triticum aestivum PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.3   1.4   0.00044       1.1      77     131 ..     183     236 ..     142     250 .. 0.85
+
+  Alignments for each domain:
+  == domain 1    score: 13.3 bits;  conditional E-value: 0.00044
+   sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131
+                            k++d+ +++ ++r+ +nr aa+ sr rk+  ++ le+ +++l q  q  lqr  q
+  sp|Q41558|HBP1C_WHEAT 183 KSRDKLDHKSLRRLAQNREAARKSRLRKKAYIQNLESSRLKLTQLEQE-LQRARQ 236
+                            778999999999****************************99998886.466555 PP
+
+>> sp|O02756|CEBPD_BOVIN  CCAAT/enhancer-binding protein delta OS=Bos taurus GN=CEBPD PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.9   7.9     0.005        13      74     164 ..     171     246 ..     115     253 .. 0.57
+
+  Alignments for each domain:
+  == domain 1    score: 9.9 bits;  conditional E-value: 0.005
+   sp|Q1XGE2|HAC1_ASPOR  74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsra.ntplp 160
+                            kr+  +   e              +  rer  + ++k    + + +++nq + q+l +l aen +l+q++ ql  ++ g r     lp
+  sp|O02756|CEBPD_BOVIN 171 KRGPDRGSPEY-------------RQRRERNNIAVRK---SRDKAKRRNQEMQQKLVELSAENEKLQQRVEQLTRDLAGLRRfFKQLP 242
+                            33222222222.............2233344443333...333456777788888888888888888888888888888765145678 PP
+
+   sp|Q1XGE2|HAC1_ASPOR 161 gspa 164
+                            g+p 
+  sp|O02756|CEBPD_BOVIN 243 GAPF 246
+                            8875 PP
+
+>> sp|Q63315|CAD22_RAT  Cadherin-22 OS=Rattus norvegicus GN=Cdh22 PE=1 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.4   0.2    0.0068        17     254     299 ..     713     759 ..     681     767 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 9.4 bits;  conditional E-value: 0.0068
+  sp|Q1XGE2|HAC1_ASPOR 254 ddfnrlfhgdssvepdssvfedglafdv.leggdlsafpfdslvnfd 299
+                            + + l +g ss epd svf+d ++  v l   dls  p+d++  + 
+   sp|Q63315|CAD22_RAT 713 SERHSLPRGPSSPEPDFSVFRDFISRKVaLADADLSVPPYDAFQTYA 759
+                           45567889****************998747899********987765 PP
+
+>> sp|Q9WTP5|CAD22_MOUSE  Cadherin-22 OS=Mus musculus GN=Cdh22 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.4   0.2    0.0068        17     254     299 ..     713     759 ..     681     767 .. 0.80
+
+  Alignments for each domain:
+  == domain 1    score: 9.4 bits;  conditional E-value: 0.0068
+   sp|Q1XGE2|HAC1_ASPOR 254 ddfnrlfhgdssvepdssvfedglafdv.leggdlsafpfdslvnfd 299
+                             + + l +g ss epd svf+d ++  v l   dls  p+d++  + 
+  sp|Q9WTP5|CAD22_MOUSE 713 SERHSLPRGPSSPEPDFSVFRDFISRKVaLADADLSVPPYDAFQTYA 759
+                            45567889****************998747899********987765 PP
+
+>> sp|Q5FUV3|ATE_GLUOX  Putative arginyl-tRNA--protein transferase OS=Gluconobacter oxydans GN=ate PE=3 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    1.9   0.0       1.4   3.5e+03     177     224 ..       2      49 ..       1      56 [. 0.89
+   2 ?   10.5   0.5    0.0033       8.4     137     193 ..      48     102 ..      39     127 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 1.9 bits;  conditional E-value: 1.4
+  sp|Q1XGE2|HAC1_ASPOR 177 qerdelpleripfptpslsdysptlkpstlaessdvaqhpavsvagle 224
+                           q+r +l     p p+p l d +     + la  + va h  +s ag++
+   sp|Q5FUV3|ATE_GLUOX   2 QHRPQLFYTTAPAPCPYLPDRTERKVLTELAGPDAVALHNRLSQAGFR 49 
+                           78999999999**********99988899999999*********9987 PP
+
+  == domain 2    score: 10.5 bits;  conditional E-value: 0.0033
+  sp|Q1XGE2|HAC1_ASPOR 137 nrlsqqlaqlaaevrgsrantplpgspatasptltptlfkqerdelpleripfptps 193
+                            r s+ +a  a  + g+ra tp+    at +pt t   ++ ++ +l +  ip p p+
+   sp|Q5FUV3|ATE_GLUOX  48 FRRSHAIAY-APVCVGCRACTPMRIPAATFAPTRTQKKIRSRHTDLVVNIIP-PVPT 102
+                           455566654.45567**********9****************99**999997.5554 PP
+
+>> sp|Q99091|CPRF3_PETCR  Light-inducible protein CPRF3 OS=Petroselinum crispum GN=CPRF3 PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.4   3.5    0.0068        17      77     132 ..     190     248 ..     179     269 .. 0.81
+
+  Alignments for each domain:
+  == domain 1    score: 9.4 bits;  conditional E-value: 0.0068
+   sp|Q1XGE2|HAC1_ASPOR  77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfl...lqrlsql 132
+                            +  de+e +r +r   nr +a+ sr rk+ + + l+ +   l ++n++l   lqr+s+ 
+  sp|Q99091|CPRF3_PETCR 190 RVNDERELKRQRRKQSNRESARRSRLRKQAKSDELQERLDNLSKENRILrknLQRISEA 248
+                            467999999999************************999999****9993334555544 PP
+
+>> sp|Q8BW74|HLF_MOUSE  Hepatic leukemia factor OS=Mus musculus GN=Hlf PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?   13.1   4.4   0.00051       1.3      23     145 ..     165     287 ..     142     293 .. 0.79
+
+  Alignments for each domain:
+  == domain 1    score: 13.1 bits;  conditional E-value: 0.00051
+  sp|Q1XGE2|HAC1_ASPOR  23 vpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrlelekl 111
+                            p     p     + ad+    +  +e    +krk   +el         rk    +d k+++   r  +n  aa+ sr+ +rl+  ++
+   sp|Q8BW74|HLF_MOUSE 165 DPDTIQVPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIKKARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKENQI 253
+                           34444456777778888888899999998889999888888533334467888889999****************************** PP
+
+  sp|Q1XGE2|HAC1_ASPOR 112 enekiqleqqnqfllqrlsqleaennrlsqqlaq 145
+                             +   le++n  l q +++l+ e +++   la+
+   sp|Q8BW74|HLF_MOUSE 254 AIRASFLEKENSALRQEVADLRKELGKCKNILAK 287
+                           ******************9999998888777776 PP
+
+>> sp|Q9JLC6|TEF_MOUSE  Thyrotroph embryonic factor OS=Mus musculus GN=Tef PE=2 SV=1
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.5   0.3    0.0066        17      52     134 ..     201     282 ..     152     292 .. 0.71
+
+  Alignments for each domain:
+  == domain 1    score: 9.5 bits;  conditional E-value: 0.0066
+  sp|Q1XGE2|HAC1_ASPOR  52 pakkrkswgqelpvpktnlpprkrakted.ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqlea 134
+                           p k r  + +e   p+  +   k+    d +k+++   r  +n  aa+ sr+ +rl+  ++  +   le++n  l   +++l+ 
+   sp|Q9JLC6|TEF_MOUSE 201 PRKHR--FAEEDLKPQPMIKKAKKVFVPDeQKDEKYWTRRKKNNVAAKRSRDARRLKENQITIRAAFLEKENTALRTEVAELRK 282
+                           43333..3344444666666666666555157788889999****************999999999999999988777776665 PP
+
+>> sp|Q92172|TEF_CHICK  Transcription factor VBP OS=Gallus gallus GN=TEF PE=1 SV=2
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 ?    9.6   0.4    0.0059        15      54     139 ..     214     299 ..     176     308 .. 0.76
+
+  Alignments for each domain:
+  == domain 1    score: 9.6 bits;  conditional E-value: 0.0059
+  sp|Q1XGE2|HAC1_ASPOR  54 kkrkswgqelpvpktnlpprkrakted.ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrl 139
+                           +k+k   ++l  p+  +   k+    d +k+++   r  +n  aa+ sr+ +rl+  ++  +   le++n  l   +++l+ e +r+
+   sp|Q92172|TEF_CHICK 214 RKHKFTEEDL-KPQPMIKKAKKVFVPDeQKDEKYWTRRKKNNVAAKRSRDARRLKENQITIRAAFLEKENTALRTEVAELRKEVGRC 299
+                           4555444444.3555555556655555167888889999*********************99999*****99999998888887775 PP
+
+
+
+Internal pipeline statistics summary:
+-------------------------------------
+Query model(s):                            1  (345 nodes)
+Target sequences:                     516081  (181677051 residues)
+Passed MSV filter:                     21797  (0.0422356); expected 10321.6 (0.02)
+Passed bias filter:                    21797  (0.0422356); expected 10321.6 (0.02)
+Passed Vit filter:                      6030  (0.0116842); expected 516.1 (0.001)
+Passed Fwd filter:                      1516  (0.00293752); expected 5.2 (1e-05)
+Initial search space (Z):             516081  [actual number of targets]
+Domain search space  (domZ):             203  [number of targets reported over threshold]
+# CPU time: 21.11u 0.09s 00:00:21.20 Elapsed: 00:00:03.64
+# Mc/sec: 17219.39
+//
diff --git a/demotic/examples/example.psiblast.out b/demotic/examples/example.psiblast.out
new file mode 100644
index 0000000..b6890a1
--- /dev/null
+++ b/demotic/examples/example.psiblast.out
@@ -0,0 +1,4544 @@
+BLASTP 2.2.22 [Sep-27-2009]
+
+
+Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, 
+Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), 
+"Gapped BLAST and PSI-BLAST: a new generation of protein database search
+programs",  Nucleic Acids Res. 25:3389-3402.
+
+
+Reference for composition-based statistics:
+Schaffer, Alejandro A., L. Aravind, Thomas L. Madden,
+Sergei Shavirin, John L. Spouge, Yuri I. Wolf,  
+Eugene V. Koonin, and Stephen F. Altschul (2001), 
+"Improving the accuracy of PSI-BLAST protein database searches with 
+composition-based statistics and other refinements",  Nucleic Acids Res. 29:2994-3005.
+
+Query= A3CM55.1
+         (328 letters)
+
+Database: uniprot_sprot.fasta 
+           516,081 sequences; 181,677,051 total letters
+
+Searching..................................................done
+
+
+
+                                                                 Score    E
+Sequences producing significant alignments:                      (bits) Value
+
+sp|P78283|SECY_VIBCH Preprotein translocase subunit secY OS=Vibr...   276   2e-73
+sp|P43804|SECY_HAEIN Preprotein translocase subunit secY OS=Haem...   275   3e-73
+sp|Q9HWF5|SECY_PSEAE Preprotein translocase subunit secY OS=Pseu...   273   1e-72
+sp|Q59912|SECY_STRGB Preprotein translocase subunit secY OS=Stre...   268   4e-71
+sp|Q05217|SECY_STACT Preprotein translocase subunit secY OS=Stap...   264   5e-70
+sp|Q59916|SECY_STRGR Preprotein translocase subunit secY OS=Stre...   260   1e-68
+sp|O33006|SECY_MYCLE Preprotein translocase subunit secY OS=Myco...   259   3e-68
+sp|P38376|SECY_CORGL Preprotein translocase subunit secY OS=Cory...   258   4e-68
+sp|P77964|SECY_SYNY3 Preprotein translocase subunit secY OS=Syne...   258   5e-68
+sp|P27148|SECY_LACLC Preprotein translocase subunit secY OS=Lact...   256   2e-67
+sp|Q8CNF3|SECY_STAES Preprotein translocase subunit secY OS=Stap...   255   3e-67
+sp|Q5HM19|SECY_STAEQ Preprotein translocase subunit secY OS=Stap...   255   3e-67
+sp|P46785|SECY_STRCO Preprotein translocase subunit secY OS=Stre...   255   3e-67
+sp|P49977|SECY_STRLI Preprotein translocase subunit secY OS=Stre...   255   4e-67
+sp|P93690|SECY_SPIOL Preprotein translocase subunit secY, chloro...   255   4e-67
+sp|Q7A086|SECY_STAAW Preprotein translocase subunit secY OS=Stap...   254   5e-67
+sp|Q6G791|SECY_STAAS Preprotein translocase subunit secY OS=Stap...   254   5e-67
+sp|Q6GEK3|SECY_STAAR Preprotein translocase subunit secY OS=Stap...   254   5e-67
+sp|Q7A468|SECY_STAAN Preprotein translocase subunit secY OS=Stap...   254   5e-67
+sp|Q99S39|SECY_STAAM Preprotein translocase subunit secY OS=Stap...   254   5e-67
+sp|Q5HDX8|SECY_STAAC Preprotein translocase subunit secY OS=Stap...   254   5e-67
+sp|O08387|SECY_STAA8 Preprotein translocase subunit secY OS=Stap...   254   5e-67
+sp|P58118|SECY_LACLA Preprotein translocase subunit secY OS=Lact...   254   7e-67
+sp|P0A5Z2|SECY_MYCTU Preprotein translocase subunit secY OS=Myco...   253   9e-67
+sp|P0A5Z3|SECY_MYCBO Preprotein translocase subunit secY OS=Myco...   253   9e-67
+sp|P43416|SECY_STRSC Preprotein translocase subunit secY OS=Stre...   253   9e-67
+sp|Q9XQU4|SECY_PEA Preprotein translocase subunit secY, chloropl...   252   2e-66
+sp|P0AGA5|SECY_SHIFL Preprotein translocase subunit secY OS=Shig...   252   2e-66
+sp|P0AGA2|SECY_ECOLI Preprotein translocase subunit secY OS=Esch...   252   2e-66
+sp|P0AGA3|SECY_ECOL6 Preprotein translocase subunit secY OS=Esch...   252   2e-66
+sp|P0AGA4|SECY_ECO57 Preprotein translocase subunit secY OS=Esch...   252   2e-66
+sp|Q05207|SECY_BACLD Preprotein translocase subunit secY OS=Baci...   250   8e-66
+sp|O63066|SECY_MAIZE Preprotein translocase subunit secY, chloro...   250   8e-66
+sp|P16336|SECY_BACSU Preprotein translocase subunit secY OS=Baci...   249   2e-65
+sp|P38375|SECY_BACHD Preprotein translocase subunit secY OS=Baci...   247   7e-65
+sp|Q38885|SECY_ARATH Preprotein translocase subunit secY, chloro...   247   7e-65
+sp|P0A4H1|SECY_SYNP6 Preprotein translocase subunit secY OS=Syne...   246   1e-64
+sp|P0A4H0|SECY_SYNE7 Preprotein translocase subunit secY OS=Syne...   246   1e-64
+sp|Q6ZG25|SECY_ORYSJ Preprotein translocase subunit secY, chloro...   246   2e-64
+sp|P51297|SECY_PORPU Preprotein translocase subunit secY OS=Porp...   244   8e-64
+sp|O66491|SECY_AQUAE Preprotein translocase subunit secY OS=Aqui...   240   1e-62
+sp|Q4UMQ9|SECY_RICFE Preprotein translocase subunit secY OS=Rick...   240   1e-62
+sp|Q68W98|SECY_RICTY Preprotein translocase subunit secY OS=Rick...   238   3e-62
+sp|Q92GY6|SECY_RICCN Preprotein translocase subunit secY OS=Rick...   238   4e-62
+sp|Q1RHP1|SECY_RICBR Preprotein translocase subunit secY OS=Rick...   238   6e-62
+sp|P38397|SECY_PYRSA Preprotein translocase subunit secY (Fragme...   237   7e-62
+sp|Q9ZCS5|SECY_RICPR Preprotein translocase subunit secY OS=Rick...   237   9e-62
+sp|P28539|SECY_CHLTR Preprotein translocase subunit secY OS=Chla...   236   1e-61
+sp|Q1XDJ1|SECY_PORYE Preprotein translocase subunit secY OS=Porp...   236   1e-61
+sp|P28527|SECY_GUITH Preprotein translocase subunit secY OS=Guil...   233   2e-60
+sp|Q89A85|SECY_BUCBP Preprotein translocase subunit secY OS=Buch...   231   3e-60
+sp|P57571|SECY_BUCAI Preprotein translocase subunit secY OS=Buch...   231   6e-60
+sp|Q8K969|SECY_BUCAP Preprotein translocase subunit secY OS=Buch...   226   2e-58
+sp|Q59548|SECY_MYCPN Preprotein translocase subunit secY OS=Myco...   224   9e-58
+sp|Q9PJN1|SECY_CHLMU Preprotein translocase subunit secY OS=Chla...   222   2e-57
+sp|P33108|SECY_MICLU Preprotein translocase subunit secY OS=Micr...   222   3e-57
+sp|O52351|SECY_MYCGA Preprotein translocase subunit secY OS=Myco...   221   7e-57
+sp|P10250|SECY_MYCCT Preprotein translocase subunit secY OS=Myco...   219   2e-56
+sp|P47416|SECY_MYCGE Preprotein translocase subunit secY OS=Myco...   218   3e-56
+sp|Q9Z7S5|SECY_CHLPN Preprotein translocase subunit secY OS=Chla...   217   9e-56
+sp|O25879|SECY_HELPY Preprotein translocase subunit secY OS=Heli...   214   6e-55
+sp|Q9ZJS9|SECY_HELPJ Preprotein translocase subunit secY OS=Heli...   214   7e-55
+sp|O59442|SECY_PYRHO Preprotein translocase subunit secY OS=Pyro...   211   6e-54
+sp|P49976|SECY_BUCAK Preprotein translocase subunit secY (Fragme...   211   7e-54
+sp|Q870W0|SC61A_NEUCR Protein transport protein SEC61 subunit al...   210   8e-54
+sp|Q9V1V8|SECY_PYRAB Preprotein translocase subunit secY OS=Pyro...   210   1e-53
+sp|Q8U019|SECY_PYRFU Preprotein translocase subunit secY OS=Pyro...   210   1e-53
+sp|Q54XK2|SC61A_DICDI Protein transport protein Sec61 subunit al...   208   3e-53
+sp|P49461|SECY_ODOSI Preprotein translocase subunit secY OS=Odon...   205   5e-52
+sp|O51451|SECY_BORBU Preprotein translocase subunit secY OS=Borr...   204   8e-52
+sp|Q5NVM7|S61A2_PONAB Protein transport protein Sec61 subunit al...   203   1e-51
+sp|Q96TW8|SC61A_HANAN Protein transport protein SEC61 subunit al...   203   2e-51
+sp|P78979|SC61A_YARLI Protein transport protein SEC61 subunit al...   203   2e-51
+sp|Q9JLR1|S61A2_MOUSE Protein transport protein Sec61 subunit al...   202   3e-51
+sp|Q9H9S3|S61A2_HUMAN Protein transport protein Sec61 subunit al...   202   3e-51
+sp|Q2KHX4|S61A2_BOVIN Protein transport protein Sec61 subunit al...   202   3e-51
+sp|Q90ZM2|S61A1_DANRE Protein transport protein Sec61 subunit al...   202   3e-51
+sp|Q8AY32|SC61A_GADOC Protein transport protein Sec61 subunit al...   202   3e-51
+sp|Q98SN8|S61A2_ONCMY Protein transport protein Sec61 subunit al...   201   4e-51
+sp|Q5EA68|S61A1_BOVIN Protein transport protein Sec61 subunit al...   201   5e-51
+sp|P61621|S61A1_RAT Protein transport protein Sec61 subunit alph...   201   5e-51
+sp|Q5R5L5|S61A1_PONAB Protein transport protein Sec61 subunit al...   201   5e-51
+sp|P61620|S61A1_MOUSE Protein transport protein Sec61 subunit al...   201   5e-51
+sp|P61619|S61A1_HUMAN Protein transport protein Sec61 subunit al...   201   5e-51
+sp|Q7T278|SC61A_HARAN Protein transport protein Sec61 subunit al...   201   6e-51
+sp|Q7T277|SC61A_DISMA Protein transport protein Sec61 subunit al...   201   6e-51
+sp|Q8AY36|SC61A_PAGBO Protein transport protein Sec61 subunit al...   201   7e-51
+sp|Q8AY35|SC61A_NOTAN Protein transport protein Sec61 subunit al...   201   7e-51
+sp|Q8AY34|SC61A_HEMAM Protein transport protein Sec61 subunit al...   201   8e-51
+sp|Q90YL4|S61A2_DANRE Protein transport protein Sec61 subunit al...   201   8e-51
+sp|Q8AY31|SC61A_BOVVA Protein transport protein Sec61 subunit al...   200   9e-51
+sp|P38377|S61A1_CANFA Protein transport protein Sec61 subunit al...   200   1e-50
+sp|Q9P8E3|SC61A_CANAL Protein transport protein SEC61 subunit al...   199   1e-50
+sp|Q6FRY3|SC61A_CANGA Protein transport protein SEC61 subunit al...   199   2e-50
+sp|Q752H7|SC61A_ASHGO Protein transport protein SEC61 subunit al...   199   2e-50
+sp|P25014|SECY_CYAPA Preprotein translocase subunit secY OS=Cyan...   199   2e-50
+sp|Q6CPY9|SC61A_KLULA Protein transport protein SEC61 subunit al...   199   3e-50
+sp|Q6BN08|SC61A_DEBHA Protein transport protein SEC61 subunit al...   198   4e-50
+sp|Q8AY33|SC61A_BORSA Protein transport protein Sec61 subunit al...   198   4e-50
+sp|Q98SN9|S61A1_ONCMY Protein transport protein Sec61 subunit al...   198   5e-50
+sp|P46249|SECY_CYACA Preprotein translocase subunit secY OS=Cyan...   193   1e-48
+sp|P32915|SC61A_YEAST Protein transport protein SEC61 OS=Sacchar...   193   2e-48
+sp|Q25147|SC61A_HALRO Protein transport protein Sec61 subunit al...   192   4e-48
+sp|O26134|SECY_METTH Preprotein translocase subunit secY OS=Meth...   191   5e-48
+sp|P38379|SC61A_PYRSA Protein transport protein Sec61 subunit al...   188   5e-47
+sp|Q37143|SECY_ANTSP Preprotein translocase subunit secY OS=Anti...   184   8e-46
+sp|Q60175|SECY_METJA Preprotein translocase subunit secY OS=Meth...   183   1e-45
+sp|P28540|SECY_PAVLU Preprotein translocase subunit secY OS=Pavl...   179   3e-44
+sp|P79088|SC61A_SCHPO Protein transport protein sec61 subunit al...   178   5e-44
+sp|P28541|SECY_METVA Preprotein translocase subunit secY OS=Meth...   174   6e-43
+sp|Q9YDD0|SECY_AERPE Preprotein translocase subunit secY OS=Aero...   171   5e-42
+sp|O28377|SECY_ARCFU Preprotein translocase subunit secY OS=Arch...   171   7e-42
+sp|P28542|SECY_HALMA Preprotein translocase subunit secY OS=Halo...   165   3e-40
+sp|Q9HPB1|SECY_HALSA Preprotein translocase subunit secY OS=Halo...   162   4e-39
+sp|Q977V3|SECY_HALVO Preprotein translocase subunit secY OS=Halo...   156   2e-37
+sp|P49978|SECY_SULAC Preprotein translocase subunit secY OS=Sulf...   140   2e-32
+sp|Q9UX84|SECY_SULSO Preprotein translocase subunit secY OS=Sulf...   131   9e-30
+sp|P38353|SSH1_YEAST Sec sixty-one protein homolog OS=Saccharomy...   127   7e-29
+sp|O42965|YGMH_SCHPO Uncharacterized protein C19G7.17 OS=Schizos...   117   1e-25
+sp|P72179|SECY_PARDE Preprotein translocase subunit secY (Fragme...    99   5e-20
+sp|P28620|SECY_BACST Preprotein translocase subunit secY (Fragme...    74   1e-12
+sp|P0C6V7|R1AB_BEV Replicase polyprotein 1ab OS=Berne virus GN=r...    34   1.0  
+sp|P0C6F3|R1A_BEV Replicase polyprotein 1a OS=Berne virus GN=1a ...    34   1.1  
+sp|Q49VR4|LTAS_STAS1 Glycerol phosphate lipoteichoic acid syntha...    33   3.2  
+sp|Q5HR16|LTAS_STAEQ Glycerol phosphate lipoteichoic acid syntha...    33   3.6  
+sp|Q8CQ10|LTAS_STAES Glycerol phosphate lipoteichoic acid syntha...    32   4.0  
+sp|Q6P6T5|OCLN_RAT Occludin OS=Rattus norvegicus GN=Ocln PE=2 SV=1     32   4.4  
+sp|P94493|YNCC_BACSU Putative metabolite transport protein yncC ...    32   5.7  
+sp|Q7A1I3|LTAS_STAAW Glycerol phosphate lipoteichoic acid syntha...    32   6.0  
+sp|Q6GBB1|LTAS_STAAS Glycerol phosphate lipoteichoic acid syntha...    32   6.0  
+sp|Q6GIS3|LTAS_STAAR Glycerol phosphate lipoteichoic acid syntha...    32   6.0  
+sp|Q7A6U1|LTAS_STAAN Glycerol phosphate lipoteichoic acid syntha...    32   6.0  
+sp|Q99VQ4|LTAS_STAAM Glycerol phosphate lipoteichoic acid syntha...    32   6.0  
+sp|Q5HHV4|LTAS_STAAC Glycerol phosphate lipoteichoic acid syntha...    32   6.0  
+sp|Q2G093|LTAS_STAA8 Glycerol phosphate lipoteichoic acid syntha...    32   6.0  
+sp|Q2FIS2|LTAS_STAA3 Glycerol phosphate lipoteichoic acid syntha...    32   6.0  
+sp|Q2YSL2|LTAS_STAAB Glycerol phosphate lipoteichoic acid syntha...    32   6.0  
+sp|P0C6V8|R1AB_BRV1 Replicase polyprotein 1ab OS=Breda virus 1 G...    32   6.7  
+sp|P0C6F4|R1A_BRV1 Replicase polyprotein 1a OS=Breda virus 1 GN=...    32   7.6  
+
+>sp|P78283|SECY_VIBCH Preprotein translocase subunit secY OS=Vibrio
+           cholerae GN=secY PE=3 SV=2
+          Length = 444
+
+ Score =  276 bits (706), Expect = 2e-73,   Method: Composition-based stats.
+ Identities = 82/326 (25%), Positives = 158/326 (48%), Gaps = 20/326 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+ ++G+ P++S+ ++ Q+  V     L++L  E +  RR         TLV+A  Q++ 
+Sbjct: 76  SILALGIMPYISASIVVQLLTVVH-PALAELKKEGEAGRRKISQYTRYGTLVLATFQAIG 134
+
+Query: 55  LVLNLPLQ--EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMI 111
+           +   LP        +D T   ++ T+ L+ GT FL+WL +     G+G    +++ A ++
+Sbjct: 135 IATGLPNMVNNLVVIDQTMFTLIATVSLVTGTMFLMWLGEQITERGIGNGISILIFAGIV 194
+
+Query: 112 AYIPQDIWNSIQELKIS---SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFK 168
+           A +P+ I  +I++ +      L L L+ V +   +Y  V +ER + RI VN        K
+Sbjct: 195 AGLPKAIGQTIEQARQGELHVLLLLLIAVLAFAVIYFVVFMERGQRRIVVNYAKRQQGRK 254
+
+Query: 169 ----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHF--LQPENQLIEQWIEALSMG 222
+               + ++L +++N AG +P ++A +++  P                  +     ALS G
+Sbjct: 255 VFAAQSTHLPLKINMAGVIPAIFASSIILFPGTLAQWFGQNGESSTFGWLTDVSLALSPG 314
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+            P + +LY   I      +  +  +  + A+ ++KSG ++  + PG  T +YI+ ++T  
+Sbjct: 315 QPLYVMLYAAAIIFFCFFYTALVFNPRETADNLKKSGAFVPGIRPGEQTAKYIDKVMTRL 374
+
+Query: 283 ALVGAFYLILISGLP-MMVVLVDIRY 307
+            L GA Y+  I  +P  M+V  ++R+
+Sbjct: 375 TLAGALYITFICLIPEFMMVAWNVRF 400
+
+
+>sp|P43804|SECY_HAEIN Preprotein translocase subunit secY
+           OS=Haemophilus influenzae GN=secY PE=3 SV=1
+          Length = 441
+
+ Score =  275 bits (704), Expect = 3e-73,   Method: Composition-based stats.
+ Identities = 71/324 (21%), Positives = 143/324 (44%), Gaps = 19/324 (5%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+           S+ ++G+ P++S+ ++ Q+ A      L++L  E               T+V A IQ+VA
+Sbjct: 76  SILALGIMPYISASIVIQLLATVS-PALAELKKEGAAGQRKISKYTRYATVVFATIQAVA 134
+
+Query: 55  LVLNLPLQ--EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMI 111
+           +   LP            +      + L+ GT FL+WL +     G+G    ++V   ++
+Sbjct: 135 ISTGLPNMLSGLVPNVGFSFYFTSVVSLVTGTMFLMWLGEQITERGIGNGISILVFGGIV 194
+
+Query: 112 AYIPQDIWNSIQELKISSLW---LALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRF- 167
+           A +P  I  +I++ +   +    L L+        Y  V VER + RI V          
+Sbjct: 195 AGLPSAILQTIEQARQGQMHPLVLLLIAAIVFAVTYFVVFVERGQRRIRVEYAKRQQGRQ 254
+
+Query: 168 ---KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSP 224
+                 ++L +++N A  MP ++A +++  P            + + +      L+ G P
+Sbjct: 255 ILGGHSTHLPLKVNMANVMPAIFASSIILFPATLTQWFGQ-NDKFEWLNNLSMLLNPGQP 313
+
+Query: 225 AWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFAL 284
+            + ++Y + I   +  +  +  +    A+ ++KSG +I  + PG  T RYI+ ++T   L
+Sbjct: 314 LYLLVYAVAIIFFSFFYTAMQYNPRDTADNLKKSGAFIPGIRPGEQTSRYIDKVMTRLTL 373
+
+Query: 285 VGAFYLILISGLPMMV-VLVDIRY 307
+           +G  Y+  +  +P ++    D+++
+Sbjct: 374 IGGLYVTFVCLVPYIMTSAWDVKF 397
+
+
+>sp|Q9HWF5|SECY_PSEAE Preprotein translocase subunit secY
+           OS=Pseudomonas aeruginosa GN=secY PE=3 SV=1
+          Length = 442
+
+ Score =  273 bits (698), Expect = 1e-72,   Method: Composition-based stats.
+ Identities = 73/322 (22%), Positives = 155/322 (48%), Gaps = 17/322 (5%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++S+ +I Q+   +    L +L  E +  RR         T+V+AL+Q++ 
+Sbjct: 75  SIFALGIMPYISASIIMQLMT-AISPQLEQLKKEGESGRRKISQYTRYGTVVLALVQAIG 133
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+           + + L  Q  A  +      +     +AG  F++WL +     G+G    M++ A ++A 
+Sbjct: 134 MSVGLGSQGVAFSNDFGFYFVAVTTFVAGAMFMMWLGEQITERGVGNGISMLIFAGIVAG 193
+
+Query: 114 IPQDIWNSIQELKISSLWLALML---VFSLVFLYLAVTVERSKYRIPVNKINIHNRFK-- 168
+           +P+ I  S +  +   + +  ++   + ++  +   V +ER + RI V+        K  
+Sbjct: 194 LPRAIGQSFESARQGDINIFALIGVGLLAVAIIAFVVFIERGQRRIAVHYAKRQQGRKVF 253
+
+Query: 169 --KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAW 226
+             + S+L +++N AG +P ++A +++  P          +     ++   +A++ G P  
+Sbjct: 254 AAQTSHLPLKVNMAGVIPAIFASSILLFPASLGSWFGQSEGLG-WLQDVAQAIAPGQPLN 312
+
+Query: 227 FILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVG 286
+            +L+   I      +  +  +   +AE ++KSG +I  + PG  + RYI+G++T   + G
+Sbjct: 313 ILLFTAGIVFFCFFYTALMFNPKDVAENLKKSGAFIPGIRPGEQSARYIDGVLTRLTMFG 372
+
+Query: 287 AFYLILISGLP-MMVVLVDIRY 307
+           A Y+  +  LP  +VV   + +
+Sbjct: 373 ALYMTAVCLLPQFLVVAAHVPF 394
+
+
+>sp|Q59912|SECY_STRGB Preprotein translocase subunit secY
+           OS=Streptomyces galbus GN=secY PE=3 SV=1
+          Length = 437
+
+ Score =  268 bits (686), Expect = 4e-71,   Method: Composition-based stats.
+ Identities = 71/322 (22%), Positives = 142/322 (44%), Gaps = 26/322 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+           ++F++G+ P++++ +I Q+  V     L  L  E Q            LT+ +A++Q   
+Sbjct: 73  TIFALGIMPYITASIILQLLTVV-IPRLEALKKEGQAGTAKITQYTRYLTVALAILQGTG 131
+
+Query: 55  LVLNLPLQEAAG----------VDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-I 103
+           LV         G                 +   + + AGT  ++WL +L    G+G    
+Sbjct: 132 LVATARSAPLFGRCSVGGQIVPDQSIFTTITMVICMTAGTCVVMWLGELITDRGIGNGMS 191
+
+Query: 104 MIVMASMIAYIPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKI 161
+           +++  S+ A  P  +W   ++  ++  W+    ++   L+ + L V VE+++ RIPV   
+Sbjct: 192 ILMFISIAATFPSALWAIKKQGTLAGGWIEFGTVIAVGLIMVALVVFVEQAQRRIPVQYA 251
+
+Query: 162 ----NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217
+                  +     +Y+ +++N AG +P+++A +L+ IP                +EQ   
+Sbjct: 252 KRMIGRRSYGGTSTYIPLKVNQAGVIPVIFASSLLYIPALVAQFAGGNSGWKSWVEQ--N 309
+
+Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277
+                 P + + Y L I   A  +  I+ + +++A+ M+K G +I  +  G  T  Y++ 
+Sbjct: 310 LTKGDHPIYIVTYFLLIVFFAFFYVAISFNPEEVADNMKKYGGFIPGIRAGRPTAEYLSY 369
+
+Query: 278 LVTYFALVGAFYLILISGLPMM 299
+           ++      G+ YL LI+ +P M
+Sbjct: 370 VLNRITWPGSLYLGLIALVPTM 391
+
+
+>sp|Q05217|SECY_STACT Preprotein translocase subunit secY
+           OS=Staphylococcus carnosus (strain TM300) GN=secY PE=3
+           SV=2
+          Length = 430
+
+ Score =  264 bits (676), Expect = 5e-70,   Method: Composition-based stats.
+ Identities = 62/319 (19%), Positives = 149/319 (46%), Gaps = 24/319 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      ++   +    R+          +++A IQS+ 
+Sbjct: 69  SIFAMGIMPYITASIVMQLLQMDIVPKFTEWAKQGDVGRKKLNNVTRYFAIILAFIQSIG 128
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     +L  +VL  GT FL+WL +     G+G    +I+ A +
+Sbjct: 129 MAFQFNNYLKGALIIDPSPMSYLLIAIVLTTGTAFLLWLGEQITQYGVGNGISIIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           ++ +P  +    Q+  +         L +A +++  ++    AV V ++  +IP+     
+Sbjct: 189 LSTLPSSLIQFYQQAFVGQSDTTMAWLQVAGLVIGLVLLTMGAVYVLQAVRKIPIQYAKK 248
+
+Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+            +        +YL +++N AG +P+++AM    +P+   +      P+    +Q     +
+Sbjct: 249 QSTQRLGSNATYLPLKVNSAGVIPVIFAMAFFLLPRTLTMFF----PKADWAQQIANTAN 304
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             S    ++Y++ I      +AF+ ++ +++++ ++K G Y+  + PG  T++YI  ++ 
+Sbjct: 305 PSSNIGMVIYIILIIAFTYFYAFVQVNPEKMSDNLKKQGSYVPGIRPGEQTKKYITKVLY 364
+
+Query: 281 YFALVGAFYLILISGLPMM 299
+               VG+ +L +I+ LP++
+Sbjct: 365 RLTFVGSIFLAVIAILPIL 383
+
+
+>sp|Q59916|SECY_STRGR Preprotein translocase subunit secY
+           OS=Streptomyces griseus GN=secY PE=3 SV=1
+          Length = 437
+
+ Score =  260 bits (664), Expect = 1e-68,   Method: Composition-based stats.
+ Identities = 73/325 (22%), Positives = 147/325 (45%), Gaps = 26/325 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+           ++F++G+ P++++ +I Q+  V     L  L  E Q            LT+ +A++Q   
+Sbjct: 72  TIFALGIMPYITASIILQLLTVV-IPRLEALKKEGQSGTAKITQYTRYLTVALAILQGTG 130
+
+Query: 55  LVLNLPLQ----------EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIM 104
+           LV                +          ++  L + AGT  ++WL +L    G+G  + 
+Sbjct: 131 LVATARSGALFQNCSVGSQIVADKSIFTTIIMVLTMTAGTPPVMWLGELITDRGIGNGMS 190
+
+Query: 105 I-VMASMIAYIPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVN-- 159
+           I +  S+ A  P  +W   +  K++  W+    +++   V + L V VE+++ RIPV   
+Sbjct: 191 IPMFISIAATFPGALWAIKESGKLADGWIEFGTVILIGFVMVALVVFVEQAQRRIPVQLP 250
+
+Query: 160 --KINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217
+              I   +     +Y+ +++N AG +P+++A +L+ IP   +   +        I+    
+Sbjct: 251 KRMIGRRSYGGTSTYIPLKVNQAGVIPVIFASSLLYIPALIVQFSNSQAGWATWIQD--N 308
+
+Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277
+            ++   P +   Y + I   A  +  I+ + D++A+ M+K G +I  +  G  T  Y++ 
+Sbjct: 309 FVTGDHPYYIATYFVLIVFFAFFYVAISFNPDEVADNMKKYGGFIPGIRAGRPTAEYLSY 368
+
+Query: 278 LVTYFALVGAFYLILISGLPMMVVL 302
+           ++      G+ YL LI+ +P M + 
+Sbjct: 369 VLNRITWPGSLYLGLIALVPTMALA 393
+
+
+>sp|O33006|SECY_MYCLE Preprotein translocase subunit secY
+           OS=Mycobacterium leprae GN=secY PE=3 SV=1
+          Length = 438
+
+ Score =  259 bits (662), Expect = 3e-68,   Method: Composition-based stats.
+ Identities = 70/348 (20%), Positives = 146/348 (41%), Gaps = 30/348 (8%)
+
+Query: 3   FSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVALV 56
+            +VG+ P++++ +I Q+  V       +L  E Q            L + +A++Q+ ++V
+Sbjct: 74  LTVGVMPYITASIIVQLLTVV-IPRFEELRKEGQAGQAKMTQYTRYLAIALAVLQATSIV 132
+
+Query: 57  LNLPLQE--------AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVM 107
+                                   +V+  LV+  G   ++W+ +L    G+G    +++ 
+Sbjct: 133 ALAANGGLLQGCQEDIISDQSIFSLVVIVLVMTGGAALVMWMGELITERGIGNGMSLLIF 192
+
+Query: 108 ASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI----NI 163
+             + A IP +    +       +  A + + +LV +   V VE+ + RIPV         
+Sbjct: 193 VGIAARIPAEGKQILDS--RGGVIFAAVCLAALVIIVGVVFVEQGQRRIPVQYAKRMVGR 250
+
+Query: 164 HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP---ENQLIEQWIEALS 220
+                  +YL +++N AG +P+++A +L+ IP     ++        ++   +     LS
+Sbjct: 251 RMYGGTSTYLPLKVNQAGVIPVIFASSLIYIPHLITQLVRSGSGGVGKSWWDKFVGTYLS 310
+
+Query: 221 -MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLV 279
+               P +  +Y   I      +  +  + D+ A+ M+K G +I  + PG  T  Y+  ++
+Sbjct: 311 DPADPVYINIYFGLIIFFTYFYVSVTFNPDERADEMKKFGGFIPGIRPGRPTADYLRYVL 370
+
+Query: 280 TYFALVGAFYLILISGLPMMVVLVD----IRYLRLSMIPGIFMIFIGM 323
+           +   L G+ YL  I+ LP + + +     ++ L       + MI +G+
+Sbjct: 371 SRITLPGSIYLGAIAVLPNLFLQIGNGGEVQNLPFGGTAVLIMIGVGL 418
+
+
+>sp|P38376|SECY_CORGL Preprotein translocase subunit secY
+           OS=Corynebacterium glutamicum GN=secY PE=3 SV=1
+          Length = 440
+
+ Score =  258 bits (660), Expect = 4e-68,   Method: Composition-based stats.
+ Identities = 71/328 (21%), Positives = 146/328 (44%), Gaps = 26/328 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+           S+F++G+ P++++ +I Q+  V       +L  E Q            LT+ +AL+QS  
+Sbjct: 73  SIFAIGIMPYITASIIVQLLTVV-IPHFEELKKEGQSGQAKMMQYTRYLTVALALLQSSG 131
+
+Query: 55  LV--------LNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMI 105
+           +V        L   ++  +       +++  + + AG   ++W+ +L    G+G    ++
+Sbjct: 132 IVALADREQLLGAGIRVLSADRNFFDLIVLVITMTAGAVLVMWMGELITEKGVGNGMSLL 191
+
+Query: 106 VMASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI---- 161
+           + A +   +P D  N +       +  A++L   L+ +   V VE+ + RIPV       
+Sbjct: 192 IFAGIATRLPTDGMNIL--GNSGGVVFAVVLASVLILVIGVVFVEQGQRRIPVQYAKRMV 249
+
+Query: 162 NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQ---PENQLIEQWIEA 218
+                    +YL +++N AG +P+++A +L+ +P     I++       +N      I  
+Sbjct: 250 GRRQYGGSSTYLPLKVNQAGVIPVIFASSLIYMPVLITQIVNSGSLEVSDNWWQRNIIAH 309
+
+Query: 219 LS-MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277
+           L    S  + +LY       +  +  +     + AE M+K G +I  + PG  T  Y+  
+Sbjct: 310 LQTPSSWQYIVLYFALTIFFSYFYVSVQYDPAEQAENMKKYGGFIPGIRPGRPTAEYLGF 369
+
+Query: 278 LVTYFALVGAFYLILISGLPMMVVLVDI 305
+           ++     VG+ YL +I+ LP +++ + +
+Sbjct: 370 VMNRLLFVGSLYLAVIAVLPNIMLDLGV 397
+
+
+>sp|P77964|SECY_SYNY3 Preprotein translocase subunit secY
+           OS=Synechocystis sp. (strain PCC 6803) GN=secY PE=3 SV=1
+          Length = 442
+
+ Score =  258 bits (659), Expect = 5e-68,   Method: Composition-based stats.
+ Identities = 70/320 (21%), Positives = 150/320 (46%), Gaps = 19/320 (5%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+            +F++G+ P++++ +I Q+   +          E +  RR        +     +IQ + 
+Sbjct: 79  GIFALGILPYINASIIMQLLTAAIPALEDLQKNEGEAGRRKISQYSRYIAFGWCIIQGLG 138
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+           L + L L+  A       +    L + AG+ F++W+++L    G+G    +++  +++A 
+Sbjct: 139 LTVGL-LRPYANNYGPLFIFQTVLAITAGSMFVMWISELITERGIGNGASLLIFVNIVAT 197
+
+Query: 114 IPQDIWNSIQ----ELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHN---- 165
+           +PQ +  +I+      + S   + L+++  LV +   V V+    RIP+           
+Sbjct: 198 LPQTLGQTIEYAQSGGRQSITAVVLLMLVFLVMIVGIVFVQEGTRRIPIISARRQVGKKL 257
+
+Query: 166 RFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHF---LQPENQLIEQWIEALSMG 222
+             ++ SYL +RLN  G MPI++A  ++ +P            L    ++  Q   AL  G
+Sbjct: 258 YRERTSYLPLRLNQGGVMPIIFASAVLILPSSLAGFATGNEGLGGFGEIFVQISNALRPG 317
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+           +  + ++Y + IF  +  +A + ++ + +++ ++K G  I  + PG  T +Y+ G++   
+Sbjct: 318 TWVYTVVYSVMIFFFSYFYASLIVNPEDVSKNLKKMGSSIPGIRPGKKTEQYLEGVLNRL 377
+
+Query: 283 ALVGAFYLILISGLPMMVVL 302
+             +GA +L  ++ LP+ V  
+Sbjct: 378 TFLGAIFLSFVATLPIFVEQ 397
+
+
+>sp|P27148|SECY_LACLC Preprotein translocase subunit secY
+           OS=Lactococcus lactis subsp. cremoris GN=secY PE=3 SV=3
+          Length = 439
+
+ Score =  256 bits (654), Expect = 2e-67,   Method: Composition-based stats.
+ Identities = 74/329 (22%), Positives = 159/329 (48%), Gaps = 21/329 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           SLF++G+SP++++ +I Q+  +       +   + +  RR        +TLV+A+ QS+ 
+Sbjct: 69  SLFAMGVSPYITASIIVQLLQMDILPKFVEWSKQGEIGRRKLNQATRYITLVLAMAQSIG 128
+
+Query: 55  LVLNLPLQE---AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     ++  ++L  G+  + W+ +     G G    +I+ A +
+Sbjct: 129 ITAGFQAMSSLNIVQNPNWQSYLMIGVLLTTGSMVVTWMGEQINEKGFGSGVSVIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKI---------SSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI 161
+           ++ IP  I +   E  +         S +++  +++ ++V +Y+   V++++ ++P+   
+Sbjct: 189 VSGIPSAIKSVYDEKFLNVRPSEIPMSWIFVIGLILSAIVIIYVTTFVQQAERKVPIQYT 248
+
+Query: 162 NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPEN-QLIEQWIEALS 220
+            +       SYL +R+NPAG +P+++A ++ + P   L  +   Q  N   +     ALS
+Sbjct: 249 KLTQGAPTSSYLPLRVNPAGVIPVIFAGSITTAPATILQFLQRSQGSNVGWLSTLQNALS 308
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             +    + Y L I +    ++F+ ++ +++AE +QK G YI +V PG  T +Y++ L+ 
+Sbjct: 309 YTTWTGMLFYALLIVLFTFFYSFVQVNPEKMAENLQKQGSYIPSVRPGKGTEKYVSRLLM 368
+
+Query: 281 YFALVGAFYLILISGLPMMVVL-VDIRYL 308
+             A VG+ +L LIS +P+       +  +
+Sbjct: 369 RLATVGSLFLGLISIIPIAAQNVWGLPKI 397
+
+
+>sp|Q8CNF3|SECY_STAES Preprotein translocase subunit secY
+           OS=Staphylococcus epidermidis (strain ATCC 12228)
+           GN=secY PE=3 SV=1
+          Length = 430
+
+ Score =  255 bits (652), Expect = 3e-67,   Method: Composition-based stats.
+ Identities = 65/309 (21%), Positives = 146/309 (47%), Gaps = 24/309 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      ++   + +  RR          +++A IQS+ 
+Sbjct: 69  SIFAMGIMPYITASIVMQLLQMDIVPKFTEWAKQGEMGRRKINNVTRYFAIILAFIQSIG 128
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +          +          +L  +VL AGT FLIWL D     G+G    +I+ A +
+Sbjct: 129 MAFQFNNYLKGQLIIEKSVMSYLLIAVVLTAGTAFLIWLGDQITQFGVGNGISLIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           ++ +P  +    Q + +         L +  ++V  ++    A+ V  +K +IP+     
+Sbjct: 189 LSTLPSSLEQFAQSVFVGQDDTSLAWLKILGLIVALILLTVGAIFVLEAKRKIPIQYAKK 248
+
+Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+            +      + +YL +++N AG +P+++AM    +P+   L      P+ +  +   +  +
+Sbjct: 249 QSAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLFF----PKAEWAQNIADTAN 304
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             S    I+Y++ I   A  +AF+ ++ +++A+ ++K G Y+  + PG  T++YI  ++ 
+Sbjct: 305 PSSNIGMIIYVVLIIAFAYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364
+
+Query: 281 YFALVGAFY 289
+               VG+ +
+Sbjct: 365 RLTFVGSIF 373
+
+
+>sp|Q5HM19|SECY_STAEQ Preprotein translocase subunit secY
+           OS=Staphylococcus epidermidis (strain ATCC 35984 /
+           RP62A) GN=secY PE=3 SV=1
+          Length = 430
+
+ Score =  255 bits (652), Expect = 3e-67,   Method: Composition-based stats.
+ Identities = 65/309 (21%), Positives = 146/309 (47%), Gaps = 24/309 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      ++   + +  RR          +++A IQS+ 
+Sbjct: 69  SIFAMGIMPYITASIVMQLLQMDIVPKFTEWAKQGEMGRRKINNVTRYFAIILAFIQSIG 128
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +          +          +L  +VL AGT FLIWL D     G+G    +I+ A +
+Sbjct: 129 MAFQFNNYLKGQLIIEKSVMSYLLIAVVLTAGTAFLIWLGDQITQFGVGNGISLIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           ++ +P  +    Q + +         L +  ++V  ++    A+ V  +K +IP+     
+Sbjct: 189 LSTLPSSLEQFAQSVFVGQDDTSLAWLKILGLIVALILLTVGAIFVLEAKRKIPIQYAKK 248
+
+Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+            +      + +YL +++N AG +P+++AM    +P+   L      P+ +  +   +  +
+Sbjct: 249 QSAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLFF----PKAEWAQNIADTAN 304
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             S    I+Y++ I   A  +AF+ ++ +++A+ ++K G Y+  + PG  T++YI  ++ 
+Sbjct: 305 PSSNIGMIIYVVLIIAFAYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364
+
+Query: 281 YFALVGAFY 289
+               VG+ +
+Sbjct: 365 RLTFVGSIF 373
+
+
+>sp|P46785|SECY_STRCO Preprotein translocase subunit secY
+           OS=Streptomyces coelicolor GN=secY PE=3 SV=2
+          Length = 437
+
+ Score =  255 bits (652), Expect = 3e-67,   Method: Composition-based stats.
+ Identities = 71/325 (21%), Positives = 146/325 (44%), Gaps = 26/325 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+           ++F++G+ P++++ +I Q+  V     L  L  E Q            LT+ +A++Q   
+Sbjct: 73  TVFALGIMPYITASIILQLLTVV-IPRLEALKKEGQAGTAKITQYTRYLTVALAILQGTG 131
+
+Query: 55  LVLNLPLQ----------EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-I 103
+           LV                +          V+  + + AGT  ++WL +L    G+G    
+Sbjct: 132 LVATARSGALFSGCTVAGQIVPDQAIFTTVVMVICMTAGTCVVMWLGELITDRGIGNGMS 191
+
+Query: 104 MIVMASMIAYIPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKI 161
+           +++  S+ A  P  +W   ++ +++  W+    +++  LV + L V VE+++ RIPV   
+Sbjct: 192 ILMFISIAATFPSALWAIKKQGELADGWIEFGTVILVGLVMVGLVVFVEQAQRRIPVQYA 251
+
+Query: 162 ----NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217
+                  +     +Y+ +++N AG +P+++A +L+ IP   +   +        I +   
+Sbjct: 252 KRMIGRRSYGGTSTYIPLKVNQAGVIPVIFASSLLYIPALIVQFSNSTAGWATWITK--N 309
+
+Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277
+                +    ILY   I   A  +  I+ + +++A+ M+K G +I  +  G  T  Y++ 
+Sbjct: 310 LADTAATPHIILYFFLIVFFAFFYVAISFNPEEVADNMKKYGGFIPGIRAGRPTAEYLSY 369
+
+Query: 278 LVTYFALVGAFYLILISGLPMMVVL 302
+           ++      G+ YL LI+ +P M + 
+Sbjct: 370 VLNRITWPGSLYLGLIALVPTMALA 394
+
+
+>sp|P49977|SECY_STRLI Preprotein translocase subunit secY
+           OS=Streptomyces lividans GN=secY PE=3 SV=1
+          Length = 437
+
+ Score =  255 bits (651), Expect = 4e-67,   Method: Composition-based stats.
+ Identities = 71/325 (21%), Positives = 146/325 (44%), Gaps = 26/325 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+           ++F++G+ P++++ +I Q+  V     L  L  E Q            LT+ +A++Q   
+Sbjct: 73  TVFALGIMPYITASIILQLLTVV-IPRLEALKKEGQAGTAKITQYTRYLTVALAILQGTG 131
+
+Query: 55  LVLNLPLQ----------EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-I 103
+           LV                +          V+  + + AGT  ++WL +L    G+G    
+Sbjct: 132 LVATARSGALFSGCTVAGQIVPDQAIFTTVVMVICMTAGTCVVMWLGELITDRGIGNGMS 191
+
+Query: 104 MIVMASMIAYIPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKI 161
+           +++  S+ A  P  +W   ++ +++  W+    +++  LV + L V VE+++ RIPV   
+Sbjct: 192 ILMFISIAATFPSALWAIKKQGELADGWIEFGTVILVGLVMVGLVVFVEQAQRRIPVQYA 251
+
+Query: 162 ----NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217
+                  +     +Y+ +++N AG +P+++A +L+ IP   +   +        I +   
+Sbjct: 252 KRMIGRRSYGGTSTYIPLKVNQAGVIPVIFASSLLYIPALIVQFSNSTAGWATWITK--N 309
+
+Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277
+                +    ILY   I   A  +  I+ + +++A+ M+K G +I  +  G  T  Y++ 
+Sbjct: 310 LADTAATPHIILYFFLIVFFAFFYVAISFNPEEVADNMKKYGGFIPGIRAGRPTAEYLSY 369
+
+Query: 278 LVTYFALVGAFYLILISGLPMMVVL 302
+           ++      G+ YL LI+ +P M + 
+Sbjct: 370 VLNRITWPGSLYLGLIALVPTMALA 394
+
+
+>sp|P93690|SECY_SPIOL Preprotein translocase subunit secY,
+           chloroplastic OS=Spinacia oleracea GN=SECY PE=2 SV=1
+          Length = 545
+
+ Score =  255 bits (651), Expect = 4e-67,   Method: Composition-based stats.
+ Identities = 62/315 (19%), Positives = 151/315 (47%), Gaps = 20/315 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+            + S+G+ P++++ +++Q+ +            E +  R+         ++  AL+Q++ 
+Sbjct: 190 GICSLGIVPFINAQIVFQLLSQVYPKLQDLQKKEGEAGRKKIKQYTQYASVGFALVQAIG 249
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+            VL L  +       T  ++   ++L  G+ F  +L +  + + LG    +++  ++I+Y
+Sbjct: 250 QVLFL--RPYVNDYSTEWVLSSVILLTLGSVFTTYLGERISDLKLGNGTSLLIFTNIISY 307
+
+Query: 114 IPQDIWNSIQELKISSLW--LALMLVFSLVFLYLAVTVERSKYRIPVNKI----NIHNRF 167
+           +P     ++ E      +  LA+++V  +  ++  V V+ ++ +IP+N            
+Sbjct: 308 LPASFGRTVAEAYQEGNYTGLAIIVVSFVSLVFGIVYVQEAERKIPMNYASRYSGKSGGL 367
+
+Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227
+           +K +YL  ++N AG MPI+++ + +S+P               ++++   AL+ G   + 
+Sbjct: 368 QKSAYLPFKVNSAGVMPIIFSTSSLSLPATLARFTGLD-----ILKKAAVALTPGGSFYL 422
+
+Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287
+              +L I      + F+ +  D ++E++++ G  I  V PG +T  YI  +++  +++G+
+Sbjct: 423 PTNILLIAFFNYYYTFLQLDPDDVSEQLKRQGASIPLVRPGKSTAAYIKTVLSRISVLGS 482
+
+Query: 288 FYLILISGLPMMVVL 302
+            +L +++  P +V  
+Sbjct: 483 GFLAILAAGPAVVEQ 497
+
+
+>sp|Q7A086|SECY_STAAW Preprotein translocase subunit secY
+           OS=Staphylococcus aureus (strain MW2) GN=secY PE=3 SV=1
+          Length = 430
+
+ Score =  254 bits (650), Expect = 5e-67,   Method: Composition-based stats.
+ Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      S+   + +  RR        L + +A IQS+ 
+Sbjct: 69  SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     +L  LVL AGT FLIWL D     G+G    +I+ A +
+Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           ++ +P  +    Q   +         L +  +LV  ++    A+ V  +  +IP+     
+Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248
+
+Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+                   + +YL +++N AG +P+++AM    +P+   L      P+ +  +    A +
+Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             S    ++Y++ I +    +AF+ ++ +++A+ ++K G Y+  + PG  T++YI  ++ 
+Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364
+
+Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306
+               VG+ +L +IS LP++    + + 
+Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391
+
+
+>sp|Q6G791|SECY_STAAS Preprotein translocase subunit secY
+           OS=Staphylococcus aureus (strain MSSA476) GN=secY PE=3
+           SV=1
+          Length = 430
+
+ Score =  254 bits (650), Expect = 5e-67,   Method: Composition-based stats.
+ Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      S+   + +  RR        L + +A IQS+ 
+Sbjct: 69  SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     +L  LVL AGT FLIWL D     G+G    +I+ A +
+Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           ++ +P  +    Q   +         L +  +LV  ++    A+ V  +  +IP+     
+Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248
+
+Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+                   + +YL +++N AG +P+++AM    +P+   L      P+ +  +    A +
+Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             S    ++Y++ I +    +AF+ ++ +++A+ ++K G Y+  + PG  T++YI  ++ 
+Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364
+
+Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306
+               VG+ +L +IS LP++    + + 
+Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391
+
+
+>sp|Q6GEK3|SECY_STAAR Preprotein translocase subunit secY
+           OS=Staphylococcus aureus (strain MRSA252) GN=secY PE=3
+           SV=1
+          Length = 430
+
+ Score =  254 bits (650), Expect = 5e-67,   Method: Composition-based stats.
+ Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      S+   + +  RR        L + +A IQS+ 
+Sbjct: 69  SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     +L  LVL AGT FLIWL D     G+G    +I+ A +
+Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           ++ +P  +    Q   +         L +  +LV  ++    A+ V  +  +IP+     
+Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248
+
+Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+                   + +YL +++N AG +P+++AM    +P+   L      P+ +  +    A +
+Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             S    ++Y++ I +    +AF+ ++ +++A+ ++K G Y+  + PG  T++YI  ++ 
+Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364
+
+Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306
+               VG+ +L +IS LP++    + + 
+Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391
+
+
+>sp|Q7A468|SECY_STAAN Preprotein translocase subunit secY
+           OS=Staphylococcus aureus (strain N315) GN=secY PE=1 SV=1
+          Length = 430
+
+ Score =  254 bits (650), Expect = 5e-67,   Method: Composition-based stats.
+ Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      S+   + +  RR        L + +A IQS+ 
+Sbjct: 69  SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     +L  LVL AGT FLIWL D     G+G    +I+ A +
+Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           ++ +P  +    Q   +         L +  +LV  ++    A+ V  +  +IP+     
+Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248
+
+Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+                   + +YL +++N AG +P+++AM    +P+   L      P+ +  +    A +
+Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             S    ++Y++ I +    +AF+ ++ +++A+ ++K G Y+  + PG  T++YI  ++ 
+Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364
+
+Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306
+               VG+ +L +IS LP++    + + 
+Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391
+
+
+>sp|Q99S39|SECY_STAAM Preprotein translocase subunit secY
+           OS=Staphylococcus aureus (strain Mu50 / ATCC 700699)
+           GN=secY PE=3 SV=1
+          Length = 430
+
+ Score =  254 bits (650), Expect = 5e-67,   Method: Composition-based stats.
+ Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      S+   + +  RR        L + +A IQS+ 
+Sbjct: 69  SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     +L  LVL AGT FLIWL D     G+G    +I+ A +
+Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           ++ +P  +    Q   +         L +  +LV  ++    A+ V  +  +IP+     
+Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248
+
+Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+                   + +YL +++N AG +P+++AM    +P+   L      P+ +  +    A +
+Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             S    ++Y++ I +    +AF+ ++ +++A+ ++K G Y+  + PG  T++YI  ++ 
+Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364
+
+Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306
+               VG+ +L +IS LP++    + + 
+Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391
+
+
+>sp|Q5HDX8|SECY_STAAC Preprotein translocase subunit secY
+           OS=Staphylococcus aureus (strain COL) GN=secY PE=3 SV=1
+          Length = 430
+
+ Score =  254 bits (650), Expect = 5e-67,   Method: Composition-based stats.
+ Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      S+   + +  RR        L + +A IQS+ 
+Sbjct: 69  SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     +L  LVL AGT FLIWL D     G+G    +I+ A +
+Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           ++ +P  +    Q   +         L +  +LV  ++    A+ V  +  +IP+     
+Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248
+
+Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+                   + +YL +++N AG +P+++AM    +P+   L      P+ +  +    A +
+Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             S    ++Y++ I +    +AF+ ++ +++A+ ++K G Y+  + PG  T++YI  ++ 
+Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364
+
+Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306
+               VG+ +L +IS LP++    + + 
+Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391
+
+
+>sp|O08387|SECY_STAA8 Preprotein translocase subunit secY
+           OS=Staphylococcus aureus (strain NCTC 8325) GN=secY PE=3
+           SV=2
+          Length = 430
+
+ Score =  254 bits (650), Expect = 5e-67,   Method: Composition-based stats.
+ Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      S+   + +  RR        L + +A IQS+ 
+Sbjct: 69  SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     +L  LVL AGT FLIWL D     G+G    +I+ A +
+Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           ++ +P  +    Q   +         L +  +LV  ++    A+ V  +  +IP+     
+Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248
+
+Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+                   + +YL +++N AG +P+++AM    +P+   L      P+ +  +    A +
+Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             S    ++Y++ I +    +AF+ ++ +++A+ ++K G Y+  + PG  T++YI  ++ 
+Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364
+
+Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306
+               VG+ +L +IS LP++    + + 
+Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391
+
+
+>sp|P58118|SECY_LACLA Preprotein translocase subunit secY
+           OS=Lactococcus lactis subsp. lactis GN=secY PE=3 SV=1
+          Length = 439
+
+ Score =  254 bits (649), Expect = 7e-67,   Method: Composition-based stats.
+ Identities = 74/329 (22%), Positives = 159/329 (48%), Gaps = 21/329 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           SLF++G+SP++++ +I Q+  +       +   + +  RR        +TLV+A+ QS+ 
+Sbjct: 69  SLFAMGVSPYITASIIVQLLQMDILPKFVEWSKQGEIGRRKLNQATRYITLVLAMAQSIG 128
+
+Query: 55  LVLNLPLQE---AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     ++   +L  G+  + W+ +     G G    +I+ A +
+Sbjct: 129 ITAGFQAMSSLNIVQNPNWQSYLMIGAILTTGSMVVTWMGEQINEKGFGSGVSVIIFAGI 188
+
+Query: 111 IAYIPQDIWNSIQELKI---------SSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI 161
+           ++ IP  + +   E  +         S L++  +++ +++ +Y+   V++++ ++P+   
+Sbjct: 189 VSSIPSAVKSVYDEKFLNVRPSEIPMSWLFVIGLVLSAIIIIYVTTFVQQAERKVPIQYT 248
+
+Query: 162 NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPEN-QLIEQWIEALS 220
+            +       SYL +R+NPAG +P+++A ++ + P   L  +   Q  N   +    +ALS
+Sbjct: 249 KLTQGAPTSSYLPLRVNPAGVIPVIFAGSITTAPATILQFLQRSQGSNVGWLSTLQDALS 308
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+             +    + Y L I +    ++F+ ++ +++AE +QK G YI +V PG  T +Y++ L+ 
+Sbjct: 309 YTTWTGMLFYALLIVLFTFFYSFVQVNPEKMAENLQKQGSYIPSVRPGKGTEKYVSRLLM 368
+
+Query: 281 YFALVGAFYLILISGLPMMVVL-VDIRYL 308
+             A VGA +L LIS +P+       +  +
+Sbjct: 369 RLATVGALFLGLISIIPIAAQNVWGLPKI 397
+
+
+>sp|P0A5Z2|SECY_MYCTU Preprotein translocase subunit secY
+           OS=Mycobacterium tuberculosis GN=secY PE=3 SV=1
+          Length = 441
+
+ Score =  253 bits (648), Expect = 9e-67,   Method: Composition-based stats.
+ Identities = 70/350 (20%), Positives = 149/350 (42%), Gaps = 30/350 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+           ++F+VG+ P++++ +I Q+  V       +L  E Q            L + +A++Q+ +
+Sbjct: 75  TVFAVGVMPYITASIIVQLLTVV-IPRFEELRKEGQAGQSKMTQYTRYLAIALAILQATS 133
+
+Query: 55  LVLNLPLQE--------AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMI 105
+           +V                        +V+  LV+  G   ++W+ +L    G+G    ++
+Sbjct: 134 IVALAANGGLLQGCSLDIIADQSIFTLVVIVLVMTGGAALVMWMGELITERGIGNGMSLL 193
+
+Query: 106 VMASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI---- 161
+           +   + A IP +  + ++      +    +   +L+ +   V VE+ + RIPV       
+Sbjct: 194 IFVGIAARIPAEGQSILES--RGGVVFTAVCAAALIIIVGVVFVEQGQRRIPVQYAKRMV 251
+
+Query: 162 NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP---ENQLIEQWIEA 218
+                    +YL +++N AG +P+++A +L+ IP     +I         +   +     
+Sbjct: 252 GRRMYGGTSTYLPLKVNQAGVIPVIFASSLIYIPHLITQLIRSGSGVVGNSWWDKFVGTY 311
+
+Query: 219 LS-MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277
+           LS   +  +  +Y   I      +  I  + D+ A+ M+K G +I  + PG  T  Y+  
+Sbjct: 312 LSDPSNLVYIGIYFGLIIFFTYFYVSITFNPDERADEMKKFGGFIPGIRPGRPTADYLRY 371
+
+Query: 278 LVTYFALVGAFYLILISGLPMMVVLVD----IRYLRLSMIPGIFMIFIGM 323
+           +++   L G+ YL +I+ LP + + +     ++ L       + MI +G+
+Sbjct: 372 VLSRITLPGSIYLGVIAVLPNLFLQIGAGGTVQNLPFGGTAVLIMIGVGL 421
+
+
+>sp|P0A5Z3|SECY_MYCBO Preprotein translocase subunit secY
+           OS=Mycobacterium bovis GN=secY PE=3 SV=1
+          Length = 441
+
+ Score =  253 bits (648), Expect = 9e-67,   Method: Composition-based stats.
+ Identities = 70/350 (20%), Positives = 149/350 (42%), Gaps = 30/350 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+           ++F+VG+ P++++ +I Q+  V       +L  E Q            L + +A++Q+ +
+Sbjct: 75  TVFAVGVMPYITASIIVQLLTVV-IPRFEELRKEGQAGQSKMTQYTRYLAIALAILQATS 133
+
+Query: 55  LVLNLPLQE--------AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMI 105
+           +V                        +V+  LV+  G   ++W+ +L    G+G    ++
+Sbjct: 134 IVALAANGGLLQGCSLDIIADQSIFTLVVIVLVMTGGAALVMWMGELITERGIGNGMSLL 193
+
+Query: 106 VMASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI---- 161
+           +   + A IP +  + ++      +    +   +L+ +   V VE+ + RIPV       
+Sbjct: 194 IFVGIAARIPAEGQSILES--RGGVVFTAVCAAALIIIVGVVFVEQGQRRIPVQYAKRMV 251
+
+Query: 162 NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP---ENQLIEQWIEA 218
+                    +YL +++N AG +P+++A +L+ IP     +I         +   +     
+Sbjct: 252 GRRMYGGTSTYLPLKVNQAGVIPVIFASSLIYIPHLITQLIRSGSGVVGNSWWDKFVGTY 311
+
+Query: 219 LS-MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277
+           LS   +  +  +Y   I      +  I  + D+ A+ M+K G +I  + PG  T  Y+  
+Sbjct: 312 LSDPSNLVYIGIYFGLIIFFTYFYVSITFNPDERADEMKKFGGFIPGIRPGRPTADYLRY 371
+
+Query: 278 LVTYFALVGAFYLILISGLPMMVVLVD----IRYLRLSMIPGIFMIFIGM 323
+           +++   L G+ YL +I+ LP + + +     ++ L       + MI +G+
+Sbjct: 372 VLSRITLPGSIYLGVIAVLPNLFLQIGAGGTVQNLPFGGTAVLIMIGVGL 421
+
+
+>sp|P43416|SECY_STRSC Preprotein translocase subunit secY
+           OS=Streptomyces scabies GN=secY PE=3 SV=1
+          Length = 437
+
+ Score =  253 bits (648), Expect = 9e-67,   Method: Composition-based stats.
+ Identities = 70/325 (21%), Positives = 144/325 (44%), Gaps = 26/325 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+           ++F++G+ P++++ +I Q+  V     L  L  E Q            LT+ +A++Q   
+Sbjct: 73  TIFALGIMPYITASIILQLLTVV-IPRLEALKKEGQSGTAKITQYTRYLTVALAVLQGTG 131
+
+Query: 55  LVLNLPLQEAAG----------VDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-I 103
+           LV                     D     +   + + AGT  ++WL +L    G+G    
+Sbjct: 132 LVATARSGALFSQCPQANNIVPDDSIFTTLTMVVTMTAGTAVVMWLGELITDRGIGNGMS 191
+
+Query: 104 MIVMASMIAYIPQDIWNSIQELKI--SSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI 161
+           +++  S+ A  P  +W+  ++  +    +   +++   LV + L V VE+++ RIPV   
+Sbjct: 192 ILMFISIAATFPSALWSIKEQGDLAGGWIEFGIVIAVGLVMVALVVFVEQAQRRIPVQYA 251
+
+Query: 162 ----NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217
+                  +     +Y+ +++N AG +P+++A +L+ IP   +            I++   
+Sbjct: 252 KRMIGRRSYGGTSTYIPLKVNQAGIIPVIFASSLLYIPALVVQFSGSTAGWAAWIQK--N 309
+
+Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277
+                +PA   +Y   I   A  +  I+ + +++A+ M+K G +I  +  G  T  Y++ 
+Sbjct: 310 LADTAAPAHITVYFFLIIFFAFFYVAISFNPEEVADNMKKYGGFIPGIRAGRPTAEYLSY 369
+
+Query: 278 LVTYFALVGAFYLILISGLPMMVVL 302
+           ++      G+ YL LI+ +P M + 
+Sbjct: 370 VLNRITWPGSLYLGLIALVPTMALA 394
+
+
+>sp|Q9XQU4|SECY_PEA Preprotein translocase subunit secY,
+           chloroplastic OS=Pisum sativum GN=SECY PE=2 SV=1
+          Length = 527
+
+ Score =  252 bits (645), Expect = 2e-66,   Method: Composition-based stats.
+ Identities = 56/315 (17%), Positives = 145/315 (46%), Gaps = 20/315 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+            + S+G+ P++++ +++Q+ A            E +             ++  A++Q++ 
+Sbjct: 171 GICSLGIVPFINAQIVFQLLAQVYPKLQDLQKKEGEAGRKKLLQYTRYASVGFAIVQAIG 230
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+            VL L  +  A    T   +   ++L  G+ F  ++ +    + LG    +++  ++I+Y
+Sbjct: 231 QVLFL--RPYANDFTTEWALTSVILLTLGSVFTTYIGEQITELKLGNGTSLLIFTNIISY 288
+
+Query: 114 IPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKINI----HNRF 167
+           +P     +  +    + ++ L  ++V   + +   V V+ ++ +IP+N  +         
+Sbjct: 289 LPASFGRTFSQAFSDANYVGLVTIIVSFFLLVLGIVYVQEAERKIPINYASRFTSKSGGI 348
+
+Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227
+           +K +YL  ++N +G MPI+++ + +++P            +   +     AL+ G   + 
+Sbjct: 349 EKSAYLPFKVNSSGVMPIIFSTSSLALPGTLARFTGLSSLKTAAV-----ALNPGGSFYL 403
+
+Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287
+              +L I      + F+ +  D ++E++++ G  I  V PG +T  +I  +++  +++G+
+Sbjct: 404 PFNILLIAFFNYYYTFLQLDPDDVSEQLKRQGASIPLVRPGKSTATFIKTVLSRISVLGS 463
+
+Query: 288 FYLILISGLPMMVVL 302
+            +L +++  P +V  
+Sbjct: 464 TFLAILAAGPAVVEQ 478
+
+
+>sp|P0AGA5|SECY_SHIFL Preprotein translocase subunit secY
+           OS=Shigella flexneri GN=secY PE=3 SV=1
+          Length = 443
+
+ Score =  252 bits (645), Expect = 2e-66,   Method: Composition-based stats.
+ Identities = 76/326 (23%), Positives = 151/326 (46%), Gaps = 21/326 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++S+ +I Q+  V     L+++  E +  RR         TLV+A+ QS+ 
+Sbjct: 76  SIFALGIMPYISASIIIQLLTVVH-PTLAEIKKEGESGRRKISQYTRYGTLVLAIFQSIG 134
+
+Query: 55  LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIV-MAS 109
+           +   LP                     + L+ GT FL+WL +     G+G  I I+  A 
+Sbjct: 135 IATGLPNMPGMQGLVINPGFAFYFTAVVSLVTGTMFLMWLGEQITERGIGNGISIIIFAG 194
+
+Query: 110 MIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTV---ERSKYRIPVNKINIHNR 166
+           ++A +P  I ++I++ +   L   ++L+ +++   +   V   ER + RI VN       
+Sbjct: 195 IVAGLPPAIAHTIEQARQGDLHFLVLLLVAVLVFAVTFFVVFVERGQRRIVVNYAKRQQG 254
+
+Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222
+            +    + ++L +++N AG +P ++A +++  P             N  +      L  G
+Sbjct: 255 RRVYAAQSTHLPLKVNMAGVIPAIFASSIILFPATIASWFGGGTGWN-WLTTISLYLQPG 313
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+            P + +LY   I      +  +  +  + A+ ++KSG ++  + PG  T +YI+ ++T  
+Sbjct: 314 QPLYVLLYASAIIFFCFFYTALVFNPRETADNLKKSGAFVPGIRPGEQTAKYIDKVMTRL 373
+
+Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307
+            LVGA Y+  I  +P  +   + + +
+Sbjct: 374 TLVGALYITFICLIPEFMRDAMKVPF 399
+
+
+>sp|P0AGA2|SECY_ECOLI Preprotein translocase subunit secY
+           OS=Escherichia coli (strain K12) GN=secY PE=1 SV=1
+          Length = 443
+
+ Score =  252 bits (645), Expect = 2e-66,   Method: Composition-based stats.
+ Identities = 76/326 (23%), Positives = 151/326 (46%), Gaps = 21/326 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++S+ +I Q+  V     L+++  E +  RR         TLV+A+ QS+ 
+Sbjct: 76  SIFALGIMPYISASIIIQLLTVVH-PTLAEIKKEGESGRRKISQYTRYGTLVLAIFQSIG 134
+
+Query: 55  LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIV-MAS 109
+           +   LP                     + L+ GT FL+WL +     G+G  I I+  A 
+Sbjct: 135 IATGLPNMPGMQGLVINPGFAFYFTAVVSLVTGTMFLMWLGEQITERGIGNGISIIIFAG 194
+
+Query: 110 MIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTV---ERSKYRIPVNKINIHNR 166
+           ++A +P  I ++I++ +   L   ++L+ +++   +   V   ER + RI VN       
+Sbjct: 195 IVAGLPPAIAHTIEQARQGDLHFLVLLLVAVLVFAVTFFVVFVERGQRRIVVNYAKRQQG 254
+
+Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222
+            +    + ++L +++N AG +P ++A +++  P             N  +      L  G
+Sbjct: 255 RRVYAAQSTHLPLKVNMAGVIPAIFASSIILFPATIASWFGGGTGWN-WLTTISLYLQPG 313
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+            P + +LY   I      +  +  +  + A+ ++KSG ++  + PG  T +YI+ ++T  
+Sbjct: 314 QPLYVLLYASAIIFFCFFYTALVFNPRETADNLKKSGAFVPGIRPGEQTAKYIDKVMTRL 373
+
+Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307
+            LVGA Y+  I  +P  +   + + +
+Sbjct: 374 TLVGALYITFICLIPEFMRDAMKVPF 399
+
+
+>sp|P0AGA3|SECY_ECOL6 Preprotein translocase subunit secY
+           OS=Escherichia coli O6 GN=secY PE=3 SV=1
+          Length = 443
+
+ Score =  252 bits (645), Expect = 2e-66,   Method: Composition-based stats.
+ Identities = 76/326 (23%), Positives = 151/326 (46%), Gaps = 21/326 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++S+ +I Q+  V     L+++  E +  RR         TLV+A+ QS+ 
+Sbjct: 76  SIFALGIMPYISASIIIQLLTVVH-PTLAEIKKEGESGRRKISQYTRYGTLVLAIFQSIG 134
+
+Query: 55  LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIV-MAS 109
+           +   LP                     + L+ GT FL+WL +     G+G  I I+  A 
+Sbjct: 135 IATGLPNMPGMQGLVINPGFAFYFTAVVSLVTGTMFLMWLGEQITERGIGNGISIIIFAG 194
+
+Query: 110 MIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTV---ERSKYRIPVNKINIHNR 166
+           ++A +P  I ++I++ +   L   ++L+ +++   +   V   ER + RI VN       
+Sbjct: 195 IVAGLPPAIAHTIEQARQGDLHFLVLLLVAVLVFAVTFFVVFVERGQRRIVVNYAKRQQG 254
+
+Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222
+            +    + ++L +++N AG +P ++A +++  P             N  +      L  G
+Sbjct: 255 RRVYAAQSTHLPLKVNMAGVIPAIFASSIILFPATIASWFGGGTGWN-WLTTISLYLQPG 313
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+            P + +LY   I      +  +  +  + A+ ++KSG ++  + PG  T +YI+ ++T  
+Sbjct: 314 QPLYVLLYASAIIFFCFFYTALVFNPRETADNLKKSGAFVPGIRPGEQTAKYIDKVMTRL 373
+
+Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307
+            LVGA Y+  I  +P  +   + + +
+Sbjct: 374 TLVGALYITFICLIPEFMRDAMKVPF 399
+
+
+>sp|P0AGA4|SECY_ECO57 Preprotein translocase subunit secY
+           OS=Escherichia coli O157:H7 GN=secY PE=3 SV=1
+          Length = 443
+
+ Score =  252 bits (645), Expect = 2e-66,   Method: Composition-based stats.
+ Identities = 76/326 (23%), Positives = 151/326 (46%), Gaps = 21/326 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++S+ +I Q+  V     L+++  E +  RR         TLV+A+ QS+ 
+Sbjct: 76  SIFALGIMPYISASIIIQLLTVVH-PTLAEIKKEGESGRRKISQYTRYGTLVLAIFQSIG 134
+
+Query: 55  LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIV-MAS 109
+           +   LP                     + L+ GT FL+WL +     G+G  I I+  A 
+Sbjct: 135 IATGLPNMPGMQGLVINPGFAFYFTAVVSLVTGTMFLMWLGEQITERGIGNGISIIIFAG 194
+
+Query: 110 MIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTV---ERSKYRIPVNKINIHNR 166
+           ++A +P  I ++I++ +   L   ++L+ +++   +   V   ER + RI VN       
+Sbjct: 195 IVAGLPPAIAHTIEQARQGDLHFLVLLLVAVLVFAVTFFVVFVERGQRRIVVNYAKRQQG 254
+
+Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222
+            +    + ++L +++N AG +P ++A +++  P             N  +      L  G
+Sbjct: 255 RRVYAAQSTHLPLKVNMAGVIPAIFASSIILFPATIASWFGGGTGWN-WLTTISLYLQPG 313
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+            P + +LY   I      +  +  +  + A+ ++KSG ++  + PG  T +YI+ ++T  
+Sbjct: 314 QPLYVLLYASAIIFFCFFYTALVFNPRETADNLKKSGAFVPGIRPGEQTAKYIDKVMTRL 373
+
+Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307
+            LVGA Y+  I  +P  +   + + +
+Sbjct: 374 TLVGALYITFICLIPEFMRDAMKVPF 399
+
+
+>sp|Q05207|SECY_BACLD Preprotein translocase subunit secY
+           OS=Bacillus licheniformis (strain DSM 13 / ATCC 14580)
+           GN=secY PE=3 SV=2
+          Length = 431
+
+ Score =  250 bits (640), Expect = 8e-66,   Method: Composition-based stats.
+ Identities = 68/325 (20%), Positives = 147/325 (45%), Gaps = 26/325 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+ ++G+ P++++ +I Q+  +      ++   + +  RR         T+V+  IQ++ 
+Sbjct: 68  SILAMGIMPYITASIIIQLLQMDVVPKFTEWSKQGEVGRRKLAQFTRYFTIVLGFIQALG 127
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                     +L  +VL AGT FL+WL +   + G+G    +I+ A +
+Sbjct: 128 MSYGFNNMAGGALITDPGVGTYLLIAIVLTAGTAFLMWLGEQITSHGVGNGISIIIFAGI 187
+
+Query: 111 IAYIPQDIWNSI--------QELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKIN 162
+           +A IPQ I             +L +  + + ++LV  L  +   + ++++  +I +    
+Sbjct: 188 VAGIPQTINQIYAQQFVDAGDQLFLQIIKVVVILVAILAIVVGVIFIQQAVRKISIQYAK 247
+
+Query: 163 IHNR----FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEA 218
+              R      + ++L +++NPAG +P+++A+  ++ P+            N       + 
+Sbjct: 248 GSGRSPVPGGQSTHLPLKVNPAGVIPVIFAVAFITTPRTVATFFGSNDVTN----WIQKT 303
+
+Query: 219 LSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGL 278
+                P    +Y   I      +AF+ ++ +Q+A+ ++K G YI  V PG  T+  I  +
+Sbjct: 304 FDYTHPVGMGVYAALIIAFTYFYAFVQVNPEQMADNLKKQGGYIPGVRPGKMTQDRITSI 363
+
+Query: 279 VTYFALVGAFYLILISGLPMMVVLV 303
+           +     VG+ +L +I+ LP++ V +
+Sbjct: 364 LYRLTFVGSIFLAVIAILPVLFVNI 388
+
+
+>sp|O63066|SECY_MAIZE Preprotein translocase subunit secY,
+           chloroplastic OS=Zea mays GN=SECY PE=2 SV=1
+          Length = 553
+
+ Score =  250 bits (640), Expect = 8e-66,   Method: Composition-based stats.
+ Identities = 56/315 (17%), Positives = 148/315 (46%), Gaps = 20/315 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+            + S+G+ P++++ +++Q+ A            E +             ++  A++Q++ 
+Sbjct: 195 GICSLGIVPFINAQIVFQLLAQLYPKLQDLQRKEGEAGRKKVLQYTRYASVGFAIVQAIG 254
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+            VL L  +       T  ++    +L  G+ F  ++ +  + + LG    +++  S+I+Y
+Sbjct: 255 QVLYL--RPYVNDFSTEWVLTSVTLLTLGSVFTTFIGERISDLKLGNGTSLLIFTSIISY 312
+
+Query: 114 IPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKINIHNRF---- 167
+           +P     ++ +      ++ L  +++  L+ +   V V+ ++ +IP+N  + ++      
+Sbjct: 313 LPASFGRTVAQAFQDGNYVGLLTIILSFLLLVLGIVYVQEAERKIPLNYASRYSSRTGEL 372
+
+Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227
+           ++ +YL  ++N +G MPI+++ + +++P                +++   AL+ G   + 
+Sbjct: 373 QRSAYLPFKVNSSGVMPIIFSTSSLALPGTLARFSGLDF-----LKKAAIALNPGGALYL 427
+
+Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287
+              +L I      + F+ +  D ++E++++ G  I  V PG +T  YI  ++   +++G+
+Sbjct: 428 PTNVLLIAFFNYYYTFLQLDPDDLSEQLKRQGASIPLVRPGKSTAAYIKTVLNRISVLGS 487
+
+Query: 288 FYLILISGLPMMVVL 302
+            +L +++  P +V  
+Sbjct: 488 AFLAVLAAGPSLVEQ 502
+
+
+>sp|P16336|SECY_BACSU Preprotein translocase subunit secY
+           OS=Bacillus subtilis GN=secY PE=3 SV=1
+          Length = 431
+
+ Score =  249 bits (636), Expect = 2e-65,   Method: Composition-based stats.
+ Identities = 65/329 (19%), Positives = 148/329 (44%), Gaps = 27/329 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G++P++++ +I Q+  +      ++   + +  RR         T+V+  IQ++ 
+Sbjct: 68  SIFAMGITPYITASIIIQLLQMDVVPKFTEWSKQGEVGRRKLAQFTRYFTIVLGFIQALG 127
+
+Query: 55  LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+           +                  +  ++  LVL  GT FL+WL +   + G+G    +I+ A +
+Sbjct: 128 MSYGFNNLANGMLIEKSGVSTYLIIALVLTGGTAFLMWLGEQITSHGVGNGISIIIFAGI 187
+
+Query: 111 IAYIPQDIWNSIQELKISS--------LWLALMLVFSLVFLYLAVTVERSKYRIPVNKIN 162
+           ++ IP+ I    +   + S        + +AL+++  L  +   + ++++  +I +    
+Sbjct: 188 VSSIPKTIGQIYETQFVGSNDQLFIHIVKVALLVIAILAVIVGVIFIQQAVRKIAIQYAK 247
+
+Query: 163 IHN----RFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEA 218
+                     + ++L +++NPAG +P+++A+  +  P+            N + +     
+Sbjct: 248 GTGRSPAGGGQSTHLPLKVNPAGVIPVIFAVAFLITPRTIASFFG----TNDVTKWIQNN 303
+
+Query: 219 LSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGL 278
+                P    +Y+  I      +AF+ ++ +Q+A+ ++K G YI  V PG  T+  I  +
+Sbjct: 304 FDNTHPVGMAIYVALIIAFTYFYAFVQVNPEQMADNLKKQGGYIPGVRPGKMTQDRITSI 363
+
+Query: 279 VTYFALVGAFYLILISGLP-MMVVLVDIR 306
+           +     VG+ +L +IS LP   +    + 
+Sbjct: 364 LYRLTFVGSIFLAVISILPIFFIQFAGLP 392
+
+
+>sp|P38375|SECY_BACHD Preprotein translocase subunit secY
+           OS=Bacillus halodurans GN=secY PE=3 SV=2
+          Length = 430
+
+ Score =  247 bits (632), Expect = 7e-65,   Method: Composition-based stats.
+ Identities = 71/321 (22%), Positives = 149/321 (46%), Gaps = 24/321 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++++ ++ Q+  +      ++   E +  RR         T+V+  IQ++ 
+Sbjct: 68  SIFAMGIMPYITASIVMQLLQMDVVPKFAEWAKEGEAGRRKLAQFTRYGTIVLGFIQALG 127
+
+Query: 55  LVLNLP--LQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMI 111
+           + +               ++ +   LVL AGT FL+WL +   A G+G    +I+ A + 
+Sbjct: 128 MSVGFNNFFPGLIPNPSVSVYLFIALVLTAGTAFLMWLGEQITAKGVGNGISIIIFAGIA 187
+
+Query: 112 AYIPQDIWNSI--------QELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+           A IP  +            ++L ++ + + L+ +  L  +   + V+++  +IPV     
+Sbjct: 188 AGIPNGLNLIYSTRIQDAGEQLFLNIVVILLLALAILAIIVGVIFVQQALRKIPVQYAKR 247
+
+Query: 164 HNRF----KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEAL 219
+                    + ++L +++N AG +P+++A++L   P     +     P    +   IE  
+Sbjct: 248 LVGRNPVGGQSTHLPLKVNAAGVIPVIFALSLFIFPPTVAGLFGSDHPVAAWV---IETF 304
+
+Query: 220 SMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLV 279
+               P    +Y L I      + FI ++ +++AE ++K G YI  + PG AT+ YI  ++
+Sbjct: 305 DYTHPIGMAVYALLIIGFTYFYTFIQVNPERMAENLKKQGGYIPGIRPGKATQTYITRIL 364
+
+Query: 280 TYFALVGAFYLILISGLPMMV 300
+                VG+ +L +++ LP+  
+Sbjct: 365 YRLTFVGSLFLAVVAILPVFF 385
+
+
+>sp|Q38885|SECY_ARATH Preprotein translocase subunit secY,
+           chloroplastic OS=Arabidopsis thaliana GN=SECY PE=1 SV=2
+          Length = 551
+
+ Score =  247 bits (632), Expect = 7e-65,   Method: Composition-based stats.
+ Identities = 58/316 (18%), Positives = 143/316 (45%), Gaps = 20/316 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+            + S+G+ P++++ +++Q+ A            E +             ++  A++Q++ 
+Sbjct: 193 GICSLGIVPFINAQIVFQLLAQVYPKLQDLQKKEGEAGRKKILQYTRYASVGFAIVQAIG 252
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+            V  L  +       T  +V    +L  G+    ++ +  + + LG    +++  S+I+Y
+Sbjct: 253 QVFYL--RPYVNDFSTEWVVSSVTLLTLGSVLTTYIGERISDLKLGNGTSLLIFTSIISY 310
+
+Query: 114 IPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKINIH----NRF 167
+           +P     +  E      +  L  ++V  L+ +   V V+ ++ +IP+N  + +       
+Sbjct: 311 LPASFGRTTAEALQEGNYTGLGTIVVSFLLLVLGIVYVQEAERKIPLNYASRYTSKAGGL 370
+
+Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227
+           +K +YL  ++N AG MPI+++ + +++P                ++    AL+ G   + 
+Sbjct: 371 QKSAYLPFKVNSAGVMPIIFSTSSLALPATLARFTGI-----SALKNVAFALTPGGSFYL 425
+
+Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287
+              +L I      + F+ +  D ++E++++ G  I  V PG +T  +I  ++   +++G+
+Sbjct: 426 PTNILLIAFFNYYYTFLQLDPDDVSEQLKRQGASIPLVRPGKSTALFIKTVLGRISVLGS 485
+
+Query: 288 FYLILISGLPMMVVLV 303
+            +L +++  P +V  +
+Sbjct: 486 AFLAVLAAGPAVVEQI 501
+
+
+>sp|P0A4H1|SECY_SYNP6 Preprotein translocase subunit secY
+           OS=Synechococcus sp. (strain ATCC 27144 / PCC 6301 /
+           SAUG 1402/1) GN=secY PE=3 SV=1
+          Length = 439
+
+ Score =  246 bits (630), Expect = 1e-64,   Method: Composition-based stats.
+ Identities = 68/319 (21%), Positives = 150/319 (47%), Gaps = 25/319 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+            +F++G+ P++++ +I Q+   +          E +  RR        ++L  AL+QS+ 
+Sbjct: 83  GVFALGILPYINASIILQLLTAAVPALEDLQKNEGEAGRRKIAQLTRYVSLGWALLQSIV 142
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+           + +   +   A        +   L L+AG+ F++W+++L    G+G    +++  +++A 
+Sbjct: 143 IAVW--VTRYAVTPGPLFTIQTALALVAGSMFVMWISELITERGIGNGASLLIFLNIVAT 200
+
+Query: 114 IPQDIWNSIQELKISS----LWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI----HN 165
+           +P+ +  +++  +         + ++L+  L  +   V V+    RIPV           
+Sbjct: 201 LPRSLQQTLELAQSGDRSTVGGIVILLIVFLATIVGIVFVQEGTRRIPVVSARRQVGNRV 260
+
+Query: 166 RFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGS-- 223
+             ++ SYL +RLN  G MPI++A  ++ +P             N+++ +    LS     
+Sbjct: 261 YSERSSYLPLRLNQGGVMPIIFASAILVLPFSLANFT-----SNEVVLRIANYLSPNGPT 315
+
+Query: 224 -PAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+              + + YL+ I   +  ++ + ++   +A+ ++K G  I  V PG AT +Y+ G++   
+Sbjct: 316 PWIYALFYLVLIVAFSYFYSSLILNPVDLAQNLKKMGSSIPGVRPGRATSQYVQGVLNRL 375
+
+Query: 283 ALVGAFYLILISGLPMMVV 301
+            ++GA +L L++ +P  V 
+Sbjct: 376 TILGAVFLGLVAIIPTAVE 394
+
+
+>sp|P0A4H0|SECY_SYNE7 Preprotein translocase subunit secY
+           OS=Synechococcus elongatus (strain PCC 7942) GN=secY
+           PE=3 SV=1
+          Length = 439
+
+ Score =  246 bits (630), Expect = 1e-64,   Method: Composition-based stats.
+ Identities = 68/319 (21%), Positives = 150/319 (47%), Gaps = 25/319 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+            +F++G+ P++++ +I Q+   +          E +  RR        ++L  AL+QS+ 
+Sbjct: 83  GVFALGILPYINASIILQLLTAAVPALEDLQKNEGEAGRRKIAQLTRYVSLGWALLQSIV 142
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+           + +   +   A        +   L L+AG+ F++W+++L    G+G    +++  +++A 
+Sbjct: 143 IAVW--VTRYAVTPGPLFTIQTALALVAGSMFVMWISELITERGIGNGASLLIFLNIVAT 200
+
+Query: 114 IPQDIWNSIQELKISS----LWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI----HN 165
+           +P+ +  +++  +         + ++L+  L  +   V V+    RIPV           
+Sbjct: 201 LPRSLQQTLELAQSGDRSTVGGIVILLIVFLATIVGIVFVQEGTRRIPVVSARRQVGNRV 260
+
+Query: 166 RFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGS-- 223
+             ++ SYL +RLN  G MPI++A  ++ +P             N+++ +    LS     
+Sbjct: 261 YSERSSYLPLRLNQGGVMPIIFASAILVLPFSLANFT-----SNEVVLRIANYLSPNGPT 315
+
+Query: 224 -PAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+              + + YL+ I   +  ++ + ++   +A+ ++K G  I  V PG AT +Y+ G++   
+Sbjct: 316 PWIYALFYLVLIVAFSYFYSSLILNPVDLAQNLKKMGSSIPGVRPGRATSQYVQGVLNRL 375
+
+Query: 283 ALVGAFYLILISGLPMMVV 301
+            ++GA +L L++ +P  V 
+Sbjct: 376 TILGAVFLGLVAIIPTAVE 394
+
+
+>sp|Q6ZG25|SECY_ORYSJ Preprotein translocase subunit secY,
+           chloroplastic OS=Oryza sativa subsp. japonica GN=SECY
+           PE=2 SV=1
+          Length = 556
+
+ Score =  246 bits (629), Expect = 2e-64,   Method: Composition-based stats.
+ Identities = 54/316 (17%), Positives = 148/316 (46%), Gaps = 20/316 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+            + S+G+ P++++ +++Q+ A            E +             ++  A++Q++ 
+Sbjct: 198 GICSLGIVPFINAQIVFQLLAQLYPKLQDLQKKEGEAGRKKVLQYTRYASVGFAIVQAIG 257
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+            VL L  +       T  ++    +L  G+ F  ++ +  + + LG    +++  S+I+Y
+Sbjct: 258 QVLFL--RPYVNDFSTEWVLTSVTLLTLGSVFTTFIGERISDLKLGNGTSLLIFTSIISY 315
+
+Query: 114 IPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKINI----HNRF 167
+           +P     ++ +      ++ L  +++  L  +   V V+ ++ +IP+N  +         
+Sbjct: 316 LPASFGRTVAQAFQDGNYVGLLTIILSFLFLVLGIVYVQEAERKIPLNYASRYSSRSGGL 375
+
+Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227
+           ++ +YL  ++N +G MPI+++ + +++P              + +++   +L+ G   + 
+Sbjct: 376 QRSAYLPFKVNSSGVMPIIFSTSSLALPGTLARFTGL-----EFLKKAAISLNPGGALYI 430
+
+Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287
+              +L I      + F+ +  D ++E++++ G  I  V PG +T  +I  +++  +++G+
+Sbjct: 431 PTNVLLIAFFNYYYTFLQLDPDDLSEQLKRQGASIPLVRPGKSTAAFIKTVLSNISVLGS 490
+
+Query: 288 FYLILISGLPMMVVLV 303
+            +L +++  P +V  +
+Sbjct: 491 AFLAVLAAGPSVVEQI 506
+
+
+>sp|P51297|SECY_PORPU Preprotein translocase subunit secY
+           OS=Porphyra purpurea GN=secY PE=3 SV=1
+          Length = 411
+
+ Score =  244 bits (623), Expect = 8e-64,   Method: Composition-based stats.
+ Identities = 73/323 (22%), Positives = 149/323 (46%), Gaps = 22/323 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR-------MLLTLVIALIQSV 53
+            +F++G+ P+++S ++ Q+        L KL  E  E  R         L L  A +QS 
+Sbjct: 62  GIFALGIVPYINSSIVMQLLT-KIIPDLEKLQKEEGELGRQKITQITRYLALGWATLQSG 120
+
+Query: 54  ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIA 112
+           A+ +   ++        T +    L L AG+  ++WL++L    G+G    +++  ++++
+Sbjct: 121 AISIW--VKPYVFNWNFTFVCESVLALTAGSMIIMWLSELITEKGIGNGASLLIFQNIVS 178
+
+Query: 113 YIPQDIWNSIQELKISS--LWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKK- 169
+            +P++   S  +   S+  +   L +V  L+ + + + V+    RI +       +    
+Sbjct: 179 GLPKNFTQSFFDANYSNTSIKFGLFIVIFLLMIIITIFVQEGTRRIKIISARQLGKSSIL 238
+
+Query: 170 --YSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227
+              SYL ++LN  G MPI++A   +++P Y   +      +N  + Q +         + 
+Sbjct: 239 DPNSYLPLKLNQGGVMPIVFASASMALPAYLTQLT-----QNTFLLQVLYLFCPNGSLYL 293
+
+Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287
+           +LY + I   +  +  I ++ + IA  ++K G  I N+ PG AT  Y+  ++     +GA
+Sbjct: 294 VLYSVLILFFSYFYTSIVMNPEDIATNLKKMGASIPNIRPGQATIDYLQVILNRLTFLGA 353
+
+Query: 288 FYLILISGLPMMVVLV-DIRYLR 309
+            +L  ++ +P ++  V  I+ LR
+Sbjct: 354 TFLFTVALIPFIIEKVAQIQNLR 376
+
+
+>sp|O66491|SECY_AQUAE Preprotein translocase subunit secY OS=Aquifex
+           aeolicus GN=secY PE=1 SV=1
+          Length = 429
+
+ Score =  240 bits (612), Expect = 1e-62,   Method: Composition-based stats.
+ Identities = 77/329 (23%), Positives = 156/329 (47%), Gaps = 28/329 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ-------ERRRMLLTLVIALIQSV 53
+           ++F++G+ P++S+ ++ Q+  V+    L +L  E               LTL +A +QS+
+Sbjct: 71  TVFALGVMPYISASIMMQLLTVA-IPSLQRLAKEEGDYGRYKINEYTKYLTLFVATVQSL 129
+
+Query: 54  ALVLNLPLQ------EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIV 106
+            +   +  Q              + +++  L L+AGT FL+W+ D     G+G    +I+
+Sbjct: 130 GIAFWIRGQVSPKGIPVVENPGISFILITVLTLVAGTMFLVWIADRITEKGIGNGASLII 189
+
+Query: 107 MASMIAYIPQDIWNSIQELKISS---LWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163
+            A ++A  P  +    +++K      L L L++   +  +   V V+ ++ RIP+     
+Sbjct: 190 FAGIVANFPNAVIQFYEKVKTGDIGPLTLLLIIALIIAIIVGIVYVQEAERRIPIQYPGR 249
+
+Query: 164 HNRF----KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEAL 219
+                    + +YL I++NPAG +PI++A  L+ IP   L  +     +N  I+   +  
+Sbjct: 250 QVGRQLYAGRKTYLPIKINPAGVIPIIFAQALLLIPSTLLNFV-----QNPFIKVIADMF 304
+
+Query: 220 SMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLV 279
+             G+  +  LY+  I      +  + I+  ++AE + K+G +I  V PG  T +Y+  ++
+Sbjct: 305 QPGAIFYNFLYVTFIVFFTYFYTAVLINPVELAENLHKAGAFIPGVRPGQDTVKYLERII 364
+
+Query: 280 TYFALVGAFYLILISGLPMMVVLV-DIRY 307
+                 GA +L +I+ +P+++ +  +I +
+Sbjct: 365 NRLIFFGALFLSVIALIPILISVWFNIPF 393
+
+
+>sp|Q4UMQ9|SECY_RICFE Preprotein translocase subunit secY
+           OS=Rickettsia felis GN=secY PE=3 SV=1
+          Length = 433
+
+ Score =  240 bits (612), Expect = 1e-62,   Method: Composition-based stats.
+ Identities = 66/344 (19%), Positives = 155/344 (45%), Gaps = 25/344 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++ + P++++ +I Q+ +V+ +  L  L  E +  +R        LT+++A  Q+  
+Sbjct: 70  SIFALAIMPYITASIIIQLMSVAYKP-LENLKKEGEVGKRKVNQLSRYLTVLLASFQAYG 128
+
+Query: 55  LVLNL-----PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMA 108
+           + ++L            +      V   + L+ GT  L+WL +     G+G    +I+  
+Sbjct: 129 VAISLESIVTNTGPVVILAGFFFRVTTVITLVVGTMLLMWLGEQITQRGIGNGTSLIIFI 188
+
+Query: 109 SMIAYIPQDIWNSIQELKISSLWLALMLVFSL---VFLYLAVTVERSKYRIPVNKINIH- 164
+            +I+ +P  I +  +  +  +L   + L   +   V + + +  E+++ ++ V       
+Sbjct: 189 GIISGVPSAIISMFELSRKGALSPLIALAVCIGVVVLIAIIIFFEKAQRKLLVQYPKRQV 248
+
+Query: 165 ---NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSM 221
+                  + +++ ++LN +G +P ++A +++  P             ++ +      L  
+Sbjct: 249 GNKIYGGEATHMPLKLNTSGVIPPIFASSILLFPATLANF---SNSNSETMGMLTYYLGH 305
+
+Query: 222 GSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTY 281
+           G P + +LY+  I   +  +  I  + ++ A  ++K G YI    PG  T  Y + ++T 
+Sbjct: 306 GKPVYILLYVALIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSDYFDYILTR 365
+
+Query: 282 FALVGAFYLILISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVF 325
+             ++G  YL +I  +P ++  ++   + LS+    F+I + +V 
+Sbjct: 366 LTVIGGIYLSVICVIPELL--MNKYVISLSLGGTSFLIVVNVVL 407
+
+
+>sp|Q68W98|SECY_RICTY Preprotein translocase subunit secY
+           OS=Rickettsia typhi GN=secY PE=3 SV=1
+          Length = 433
+
+ Score =  238 bits (609), Expect = 3e-62,   Method: Composition-based stats.
+ Identities = 65/344 (18%), Positives = 157/344 (45%), Gaps = 25/344 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++ + P++++ +I Q+ +V+ +  L  L  E +  +R        LT+++A  Q+  
+Sbjct: 70  SIFALAIMPYITASIIIQLMSVAYKP-LENLKKEGESGKRKINQLSRYLTVLLASFQAYG 128
+
+Query: 55  LVLNL-----PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMA 108
+           + L+L            +      V   + L+ GT  L+WL +     G+G    +I+  
+Sbjct: 129 VALSLESMVTNTGPVVILAGFFFRVTTVITLVVGTMLLMWLGEQITQRGIGNGTSLIIFI 188
+
+Query: 109 SMIAYIPQDIWNSIQELKISSLWLAL---MLVFSLVFLYLAVTVERSKYRIPVNKINIH- 164
+            +I+ +P  I +  +  +  +L   +   + +  ++ + + +  E+++ ++ V       
+Sbjct: 189 GIISGVPSAIISMFELSRKGALSPLIAITVCIGVVLLIAIIIFFEKAQRKLLVQYPKRQV 248
+
+Query: 165 ---NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSM 221
+                  + +++ ++LN +G +P ++A +++  P             ++ +      L  
+Sbjct: 249 GNKIYGGEATHMPLKLNTSGVIPPIFASSILLFPTTLANF---SNSNSETMSMLSYYLGH 305
+
+Query: 222 GSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTY 281
+           G P + +LY++ I   +  +  I  + ++ A  ++K G YI    PG  T  Y + ++T 
+Sbjct: 306 GKPVYILLYVVLIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSDYFDYILTR 365
+
+Query: 282 FALVGAFYLILISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVF 325
+             ++G  YL +I  +P ++  ++   + LS+    F+I + +V 
+Sbjct: 366 LTVIGGLYLSIICVIPELL--MNKYVISLSLGGTSFLIVVNVVL 407
+
+
+>sp|Q92GY6|SECY_RICCN Preprotein translocase subunit secY
+           OS=Rickettsia conorii GN=secY PE=3 SV=1
+          Length = 433
+
+ Score =  238 bits (608), Expect = 4e-62,   Method: Composition-based stats.
+ Identities = 65/344 (18%), Positives = 155/344 (45%), Gaps = 25/344 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++ + P++++ +I Q+ +V+ +  L  L  E +  +R        LT+++A  Q+  
+Sbjct: 70  SIFALAIMPYITASIIIQLMSVAYKP-LENLKKEGEVGKRKVNQLSRYLTVLLASFQAYG 128
+
+Query: 55  LVLNL-----PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMA 108
+           + ++L            +      +   + L+ GT  L+WL +     G+G    +I+  
+Sbjct: 129 VAISLESIVTNTGPVVILAGFFFRITTVITLVVGTMLLMWLGEQITQRGIGNGTSLIIFI 188
+
+Query: 109 SMIAYIPQDIWNSIQELKISSLWLALMLVFSL---VFLYLAVTVERSKYRIPVNKINIH- 164
+            +I+ +P  I +  +  +  +L   + +   +   V + + +  ER++ ++ V       
+Sbjct: 189 GIISGVPSAIISMFELSRKGALSPLIAIAVCIGVVVLIAIIIFFERAQRKLLVQYPKRQV 248
+
+Query: 165 ---NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSM 221
+                  + +++ ++LN +G +P ++A +++  P             ++ +      L  
+Sbjct: 249 GNKIYGGEATHMPLKLNTSGVIPPIFASSILLFPATLANF---SNSNSETMGMLTYYLGH 305
+
+Query: 222 GSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTY 281
+           G P + +LY+  I   +  +  I  + ++ A  ++K G YI    PG  T  Y + ++T 
+Sbjct: 306 GKPVYILLYVALIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSDYFDYILTR 365
+
+Query: 282 FALVGAFYLILISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVF 325
+             ++G  YL +I  +P ++  ++   + LS+    F+I + +V 
+Sbjct: 366 LTVIGGIYLSVICVIPELL--MNKYVISLSLGGTSFLIVVNVVL 407
+
+
+>sp|Q1RHP1|SECY_RICBR Preprotein translocase subunit secY
+           OS=Rickettsia bellii (strain RML369-C) GN=secY PE=3 SV=1
+          Length = 433
+
+ Score =  238 bits (607), Expect = 6e-62,   Method: Composition-based stats.
+ Identities = 65/344 (18%), Positives = 156/344 (45%), Gaps = 25/344 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++ + P++++ +I Q+ +V+ +  L  L  E +  +R        LT+++A +Q+  
+Sbjct: 70  SIFALAIMPYITASIIIQLMSVAYKP-LENLKKEGEAGKRKINQLSRYLTVLLASLQAYG 128
+
+Query: 55  LVLNL-----PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMA 108
+           + ++L            +      +   + L+ GT  L+WL +     G+G    +I+  
+Sbjct: 129 VAVSLESIVTNTGPVVIIPGLFFKITTVITLVVGTMLLMWLGEQITQRGIGNGTSLIIFI 188
+
+Query: 109 SMIAYIPQDIWNSIQELKISSLWLALMLVFS---LVFLYLAVTVERSKYRIPVNKINIH- 164
+            +I+ +P  I +  +  +  +L   + +      ++ + + +  E+++ ++ V       
+Sbjct: 189 GIISGVPSAIISMFELSRKGALSPLVAIAVCAGVVILISIIIFFEKAQRKLLVQYPKRQV 248
+
+Query: 165 ---NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSM 221
+                    +Y+ ++LN +G +P ++A +++  P             ++++      L  
+Sbjct: 249 GNKIYGGDSTYMPLKLNTSGVIPPIFASSILLFPATLANF---SSSNSEIMNMLTYYLGH 305
+
+Query: 222 GSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTY 281
+           G P + +LY+  I   +  +  I  + ++ A  ++K G YI    PG  T  Y + ++T 
+Sbjct: 306 GKPIYILLYVALIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSEYFDYILTR 365
+
+Query: 282 FALVGAFYLILISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVF 325
+             +VG  YL +I  +P ++  ++   + LS+    F+I + +V 
+Sbjct: 366 LTVVGGIYLSVICIIPELL--MNKYVISLSLGGTSFLIVVNVVL 407
+
+
+>sp|P38397|SECY_PYRSA Preprotein translocase subunit secY (Fragment)
+           OS=Pyrenomonas salina GN=secY PE=3 SV=1
+          Length = 412
+
+ Score =  237 bits (606), Expect = 7e-62,   Method: Composition-based stats.
+ Identities = 70/314 (22%), Positives = 146/314 (46%), Gaps = 22/314 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLE-VQERRRM------LLTLVIALIQSV 53
+            +F++G+ P++++ ++ Q  A +    L KL  E  +  R+          L  A IQS+
+Sbjct: 68  GIFALGIVPYINASIVIQ-LATTSIPNLEKLQKEEGEAGRQKISQITRYRALGWAAIQSL 126
+
+Query: 54  ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIA 112
+            +     ++       +  +V  TL L  G+  ++W ++     G+G    +++  ++IA
+Sbjct: 127 GVSFW--VRPYVFNWDSQFVVQMTLALTTGSMLIMWFSEQITEKGIGNGPSLLIFINIIA 184
+
+Query: 113 YIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSY 172
+            +P+ I      +  ++    L+++ S+      + +   +Y I +  +  H   K+ SY
+Sbjct: 185 GLPKLIQQKSNAISSTNQTTELVVLASISVYDSRIFIRDRRYYI-LQTVGRH--CKQTSY 241
+
+Query: 173 LDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSP---AWFIL 229
+           L +RLN  G MPI++A  ++ +P Y   +I     +NQ + + +  LS  S     + I 
+Sbjct: 242 LPLRLNQGGVMPIIFASAILVLPAYLGQVI-----QNQFVLKLVTLLSPNSSDKNLYLIF 296
+
+Query: 230 YLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFY 289
+           Y   I   +  +A + I+ + +++ ++K    I  V PG AT  Y+   +     +GA +
+Sbjct: 297 YFSLILFFSYFYASLIINPNDVSQNLKKMESSIPGVRPGKATTDYLQKTLNRLTFLGALF 356
+
+Query: 290 LILISGLPMMVVLV 303
+           L  I+ +P ++  +
+Sbjct: 357 LAFIAVVPSIIENI 370
+
+
+>sp|Q9ZCS5|SECY_RICPR Preprotein translocase subunit secY
+           OS=Rickettsia prowazekii GN=secY PE=3 SV=1
+          Length = 433
+
+ Score =  237 bits (605), Expect = 9e-62,   Method: Composition-based stats.
+ Identities = 65/344 (18%), Positives = 156/344 (45%), Gaps = 25/344 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++ + P++++ +I Q+ +V+ +  L  L  E +  +R        LT+++A  Q+  
+Sbjct: 70  SIFALAIMPYITASIIIQLMSVAYKP-LENLKKEGETGKRKINQLSRYLTVLLASFQAYG 128
+
+Query: 55  LVLNL-----PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMA 108
+           + L+L            +      V   + L+ GT  L+WL +     G+G    +I+  
+Sbjct: 129 VALSLESMVTNTGPVVILAGFFFRVTTVITLVVGTILLMWLGEQITQRGIGNGTSLIIFI 188
+
+Query: 109 SMIAYIPQDIWNSIQELKISSLWLAL---MLVFSLVFLYLAVTVERSKYRIPVNKINIH- 164
+            +I+ +P  I +  +  +  +L   +   + +  ++ + + +  E+++ ++ V       
+Sbjct: 189 GIISGVPSAIISMFELSRKGALSPLIAITVCIGVVLLIAIIIFFEKAQRKLLVQYPKRQV 248
+
+Query: 165 ---NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSM 221
+                  + +++ ++LN +G +P ++A +++  P             +  +      L  
+Sbjct: 249 GNKIYGGEATHMPLKLNTSGVIPPIFASSILLFPTTLASF---SNSNSDTMSMLTYYLGH 305
+
+Query: 222 GSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTY 281
+           G P + +LY++ I   +  +  I  + ++ A  ++K G YI    PG  T  Y + ++T 
+Sbjct: 306 GKPVYILLYVVLIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSDYFDYILTR 365
+
+Query: 282 FALVGAFYLILISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVF 325
+             ++G  YL +I  +P ++  ++   + LS+    F+I + +V 
+Sbjct: 366 LTVIGGIYLSVICVIPELL--MNKYVISLSLGGTSFLIVVNVVL 407
+
+
+>sp|P28539|SECY_CHLTR Preprotein translocase subunit secY
+           OS=Chlamydia trachomatis GN=secY PE=3 SV=3
+          Length = 457
+
+ Score =  236 bits (604), Expect = 1e-61,   Method: Composition-based stats.
+ Identities = 71/336 (21%), Positives = 146/336 (43%), Gaps = 36/336 (10%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRML------LTLVIALIQSV- 53
+           ++ ++G+ P++S+ +I Q+  V       ++     + +R L       TLV+A +QS+ 
+Sbjct: 73  TVIALGVVPYISASIIVQLLVVFMPTLQREMRESPDQGKRKLGRMTRLFTLVLACVQSLL 132
+
+Query: 54  -------------ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLG 100
+                         +VL   L            +   +V++ GT  L+W+ +  +  G+G
+Sbjct: 133 FAKFALRMNLVVPGIVLPAMLSLKLFGVPWVFYLTTVVVMITGTLLLMWVGEQISDKGIG 192
+
+Query: 101 GSIMIVMA-SMIAYIPQDIWNSIQELKISS--------LWLALMLVFSLVFLYLAVTVER 151
+             I +++   ++A  P  + +   +L + S        + L ++    +  L   V +  
+Sbjct: 193 NGISLIITLGILASFPSVLGSIFNKLNLGSQDPSEFGIVSLLILCAVFVFVLMATVLIIE 252
+
+Query: 152 SKYRIPVNKINI----HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP 207
+              +IPV                SYL +++N AG +P+++A +L+  P      +     
+Sbjct: 253 GMRKIPVQHARRIIGRREVVGGGSYLPLKVNYAGVIPVIFASSLLMFPATIGQFL---SS 309
+
+Query: 208 ENQLIEQWIEALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYP 267
+           E+  +++    LS GS A+ I Y+L I      +       +QIA  M+K+G +I  +  
+Sbjct: 310 ESSWLKRIATMLSPGSVAYSIFYVLLIIFFTYFWTATQFRPEQIASEMKKNGAFIPGIRQ 369
+
+Query: 268 GGATRRYINGLVTYFALVGAFYLILISGLPMMVVLV 303
+           G  T+ Y+   +    L+GA +L +++ LP ++  +
+Sbjct: 370 GKPTQTYLEYTMNRVTLLGAVFLAVVAILPSILGRI 405
+
+
+>sp|Q1XDJ1|SECY_PORYE Preprotein translocase subunit secY
+           OS=Porphyra yezoensis GN=secY PE=3 SV=1
+          Length = 411
+
+ Score =  236 bits (604), Expect = 1e-61,   Method: Composition-based stats.
+ Identities = 74/323 (22%), Positives = 148/323 (45%), Gaps = 22/323 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR-------MLLTLVIALIQSV 53
+            +F++G+ P+++S ++ Q+        L KL  E  E  R         L L  A +QS 
+Sbjct: 62  GIFALGIVPYINSSIVMQLLT-KIVPNLEKLQKEEGELGRQKITQITRYLALGWATLQSG 120
+
+Query: 54  ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIA 112
+           A+ +   ++          +    L L AG+  ++WL++L    G+G    +++  ++++
+Sbjct: 121 AISIW--VKPYVFNWNFAFVCESVLALTAGSMIIMWLSELITEKGIGNGASLLIFQNIVS 178
+
+Query: 113 YIPQDIWNSIQELKI--SSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKK- 169
+            +P++   S  +     +SL   L +   L+ + + + V+    RI +       +    
+Sbjct: 179 GLPKNFTQSFFDASYSNASLKFGLFIAIFLLMIIITICVQEGTRRIKIISARQLGKSSIL 238
+
+Query: 170 --YSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227
+              SYL ++LN  G MPI++A   +++P Y   II     +N+ + Q +         + 
+Sbjct: 239 DPNSYLPLKLNQGGVMPIVFASASMALPSYLTQII-----QNKTLLQILYLFCPNGSLYL 293
+
+Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287
+           +LY   I   +  +  I ++ + IA  ++K G  I N+ PG AT  Y+  ++     +GA
+Sbjct: 294 LLYCALILFFSYFYTSIVMNPEDIAINLKKMGASIPNIRPGQATIDYLQVILNRLTFLGA 353
+
+Query: 288 FYLILISGLPMMVVLV-DIRYLR 309
+            +L  ++ +P ++  V  I+ LR
+Sbjct: 354 SFLFTVALIPFIIEKVTQIQNLR 376
+
+
+>sp|P28527|SECY_GUITH Preprotein translocase subunit secY
+           OS=Guillardia theta GN=secY PE=3 SV=2
+          Length = 420
+
+ Score =  233 bits (594), Expect = 2e-60,   Method: Composition-based stats.
+ Identities = 63/316 (19%), Positives = 143/316 (45%), Gaps = 18/316 (5%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR-------MLLTLVIALIQSV 53
+            +F++G+ P++++ +I Q  A +    L KL  E  E  R         + LV ALIQS+
+Sbjct: 68  GVFALGIVPYINASIIVQ-LATNSIPSLEKLQKEEGELGRQKIVQLTRYVALVWALIQSI 126
+
+Query: 54  ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIA 112
+            +     ++          +   +L L  G+  ++W ++     G+G    +++  ++I+
+Sbjct: 127 GVSFW--VRPYVFNWDLNFVFAMSLTLTIGSMLIMWFSEQITEKGIGNGPSLLIFINIIS 184
+
+Query: 113 YIPQDIWNSIQELKISSLWLALMLVFSLV--FLYLAVTVERSKYRIPVNKINIHNRF--- 167
+            +P+ + + IQ  +++   L + ++  +    +   + ++    RIP+       +    
+Sbjct: 185 GLPKLLQSQIQSTRLNIQALDIFVLVFIFSVMIIGIIFIQEGIKRIPIISARQLGKGQMD 244
+
+Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227
+            K SYL ++LN +G MPI++A  ++ +P Y   ++   Q     +    +  S     + 
+Sbjct: 245 NKTSYLPLKLNQSGVMPIIFASAVLVLPAYLAQLVSNEQLRT--VLHLFDGTSNNKLLYL 302
+
+Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287
+           + Y   I   +  +  + ++ + +++ ++K    I  V PG AT  Y+   +     +GA
+Sbjct: 303 LFYFTLILFFSYFYTSLILNPNDVSKNLKKMESSIYGVRPGKATTEYLQKTLNRLTFLGA 362
+
+Query: 288 FYLILISGLPMMVVLV 303
+            +L  I+ +P ++  +
+Sbjct: 363 LFLAFIAIVPNIIETL 378
+
+
+>sp|Q89A85|SECY_BUCBP Preprotein translocase subunit secY
+           OS=Buchnera aphidicola subsp. Baizongia pistaciae
+           GN=secY PE=3 SV=1
+          Length = 441
+
+ Score =  231 bits (591), Expect = 3e-60,   Method: Composition-based stats.
+ Identities = 68/326 (20%), Positives = 152/326 (46%), Gaps = 21/326 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++SS +I Q+  +       ++  + ++ R         +TL++A +QS  
+Sbjct: 77  SIFALGIMPFISSSIIVQILTLIH-PKFIEMKKDGEQGRHRINKYIRYITLILAALQSFG 135
+
+Query: 55  LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASM 110
+           + ++LP              +   +  + L+ GT FL+WL +L    G+G  I I++ S 
+Sbjct: 136 MSISLPNIPGLKDVIIDPSISFYGIAIISLITGTIFLMWLGELITEKGIGNGISIIIFSG 195
+
+Query: 111 -IAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYL---AVTVERSKYRIPVNKINI--- 163
+            ++ +P    N++++++  SL + L     +V   +    V +ERS+ +I ++       
+Sbjct: 196 IVSGLPSSFLNTVEKVRQGSLHVLLFCFIGIVIFLVTLLVVYIERSQRKITISYAKRNLG 255
+
+Query: 164 -HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222
+                   ++L ++LN +G +P ++A ++V  P              + +   +  L   
+Sbjct: 256 HRTYSMNSTHLPLKLNMSGVIPAIFASSIVLFPATIASWFGNRD-HFKWLVDIVFYLQPT 314
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+            P + + Y+  I      +  +  +  + A+ ++KSG +I  + PG  T +YIN ++   
+Sbjct: 315 KPLYILTYITAIIFFCFFYTGLAFNPRETADNLKKSGAFILGIRPGEKTAQYINKIMLRL 374
+
+Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307
+             +G+ Y+  I  +P ++   +D+ +
+Sbjct: 375 TFLGSMYMAFICLVPELMRFFMDVPF 400
+
+
+>sp|P57571|SECY_BUCAI Preprotein translocase subunit secY
+           OS=Buchnera aphidicola subsp. Acyrthosiphon pisum
+           GN=secY PE=3 SV=1
+          Length = 437
+
+ Score =  231 bits (589), Expect = 6e-60,   Method: Composition-based stats.
+ Identities = 75/326 (23%), Positives = 157/326 (48%), Gaps = 23/326 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54
+           S+F++G+ P++S+ +I Q+  +     LS++  E +             TL++AL+QS+ 
+Sbjct: 76  SIFALGIMPYISASIIIQLLTLVY-PTLSEIKKEGESGRHRINQYTRYATLILALVQSIG 134
+
+Query: 55  LVLNLPL----QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASM 110
+           + + LP     +           ++  + L+  T FL+WL +L    G+G  I I++   
+Sbjct: 135 IAMTLPNIAGIRSIIINTDFYFYLIAIISLVTSTMFLMWLGELITEYGIGNGISIIIFIG 194
+
+Query: 111 IAY-IPQDIWNSIQELKISSLWLALMLVFSLV---FLYLAVTVERSKYRIPVNKINIHNR 166
+           I   +P  I N+I++ +   L + L L   L+    ++L V +ER + +I V+       
+Sbjct: 195 IIAGLPSAIGNTIEKTRQGDLHILLFLFILLLIFSVIFLVVFMERGQRKIVVHYAQRQQG 254
+
+Query: 167 FKKY----SYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222
+            + Y    ++L +++N AG +P ++A ++V  P   +      +  ++ + + +  L   
+Sbjct: 255 RRIYETPSTHLPLKINMAGVIPAIFASSIVLFPATIISW---CKVNHEWLTKILFYLQPN 311
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+              + ILY+  I      +  +  +  + A+ ++KSG +I  + PG  T +YIN ++   
+Sbjct: 312 QFLYLILYISAIVFFCFFYTGLVFNPRETADNLKKSGAFISGIRPGEQTAKYINKIMLRL 371
+
+Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307
+            LVG+ Y+  I  +P  +   +++ +
+Sbjct: 372 TLVGSLYITFICLIPEFMRSAMNVPF 397
+
+
+>sp|Q8K969|SECY_BUCAP Preprotein translocase subunit secY
+           OS=Buchnera aphidicola subsp. Schizaphis graminum
+           GN=secY PE=3 SV=1
+          Length = 439
+
+ Score =  226 bits (576), Expect = 2e-58,   Method: Composition-based stats.
+ Identities = 76/326 (23%), Positives = 156/326 (47%), Gaps = 21/326 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++SS +I Q+  +     LS++  E +  R          TLV+AL QS+ 
+Sbjct: 76  SIFALGIMPYISSSIIIQLLTLV-IPSLSEIKKEGEVGRTKINQYTRYTTLVLALFQSIG 134
+
+Query: 55  LVLNLP----LQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMAS 109
+           +V +LP    + +              ++L+ GT FL+WL +L        G  +I+   
+Sbjct: 135 IVTSLPKISGMNQIIIHPDFYFYFTAIIILVTGTMFLMWLGELITECGIGNGISIIIFIG 194
+
+Query: 110 MIAYIPQDIWNSIQELKISSLWLALMLVFSLVFL---YLAVTVERSKYRIPVNKINIHNR 166
+           +IA +P  I ++I++ +   L + L L   ++     +L V +ERS+ +I ++       
+Sbjct: 195 IIAGLPSAIVHTIEQTRQGDLHILLFLCVLILIFSVVFLVVFIERSQRKIIIHYAQRQKG 254
+
+Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222
+            +    + ++L +++N AG +P ++A ++V  P   +        +  L++         
+Sbjct: 255 RRIYSTQSTHLPLKINMAGVIPAIFASSVVLFPVTIISWFGID-RKCYLLKTIFFYFQPN 313
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+            P + ILY+ +I      +  +  +  + A+ ++KSG +I  + PG  T +YIN ++   
+Sbjct: 314 QPLYLILYVFSIIFFCFFYTGLVFNPRETADNLKKSGGFISGIRPGEQTAKYINKIMIRL 373
+
+Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307
+            L G+ Y+  I  +P  +   +++ +
+Sbjct: 374 TLFGSLYIAFICLIPEFMRSAMNVPF 399
+
+
+>sp|Q59548|SECY_MYCPN Preprotein translocase subunit secY
+           OS=Mycoplasma pneumoniae GN=secY PE=3 SV=1
+          Length = 477
+
+ Score =  224 bits (571), Expect = 9e-58,   Method: Composition-based stats.
+ Identities = 70/326 (21%), Positives = 157/326 (48%), Gaps = 29/326 (8%)
+
+Query: 3   FSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRML------LTLVIALIQSVALV 56
+           F+VG+SP++S+ ++ Q+ +      LSKL    +  RR +      +TL  AL+QS A++
+Sbjct: 85  FAVGISPYISAQIVMQLLSTDLIPPLSKLVNSGEVGRRKIEMITRIITLPFALVQSFAVI 144
+
+Query: 57  LNLPLQE------AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMAS 109
+                            + +  +    + + AGTY  ++L D  +  G+G  I +++++ 
+Sbjct: 145 QIATNSGGGSSPITLKNNGSDFVAFYIIAMTAGTYLSVFLGDTISKKGIGNGITLLILSG 204
+
+Query: 110 MIAYIPQDIWN----------SIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVN 159
+           ++A +P+              +I     +++   +  +  +  L+    + +   +IP+ 
+Sbjct: 205 ILAQLPEGFIAAYSVLSGVVVTINATLTTAISFFIYFMAFVTLLFATTFITQETRKIPIQ 264
+
+Query: 160 KINIHNRFKKY--SYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217
+           +       +     YL I++N AG +P+++A +++SIP          QP+ +      +
+Sbjct: 265 QSGQGLVTESSALPYLPIKVNSAGVIPVIFASSIMSIPVTIAQF----QPQTESRWFVED 320
+
+Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277
+            LS+  P   +LY + + + +  +++I I+ +++A+  +KSG +I  + PG  T ++I  
+Sbjct: 321 YLSLSKPTGIVLYGILVILFSFFYSYIQINPERLAKNFEKSGRFIPGIRPGKDTEKHIAR 380
+
+Query: 278 LVTYFALVGAFYLILISGLPMMVVLV 303
+           ++     +GA +L +I+ +P +V  +
+Sbjct: 381 VLVRINFIGAPFLTVIAIIPYIVSAL 406
+
+
+>sp|Q9PJN1|SECY_CHLMU Preprotein translocase subunit secY
+           OS=Chlamydia muridarum GN=secY PE=3 SV=1
+          Length = 457
+
+ Score =  222 bits (567), Expect = 2e-57,   Method: Composition-based stats.
+ Identities = 69/336 (20%), Positives = 144/336 (42%), Gaps = 36/336 (10%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRML------LTLVIALIQSV- 53
+           ++ ++G+ P++S+ +I Q+  V       ++     + +R L       TL++A +QS+ 
+Sbjct: 73  TVIALGVVPYISASIIVQLLVVFMPTLQREMREAPDQGKRKLGRMTRLFTLLLACVQSLL 132
+
+Query: 54  -------------ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLG 100
+                         +VL   L            +   +V+  GT  L+W+ +  +  G+G
+Sbjct: 133 FAKFALRMNLVVPGIVLPAMLSLKLFGIPCVFYLTTVVVMTTGTLLLMWIGEQISDKGIG 192
+
+Query: 101 GSIMIVMA-SMIAYIPQDIWNSIQELKISS--------LWLALMLVFSLVFLYLAVTVER 151
+             I +++   M+A  P  + +   +L + S        + L ++    +  L   V +  
+Sbjct: 193 NGISLIITLGMLASFPSVLGSIFNKLNLGSQDPSEFGIVSLLVLCAVFVFVLMATVLIIE 252
+
+Query: 152 SKYRIPVNKINI----HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP 207
+              ++PV                SYL +++N AG +P+++A +L+  P      +     
+Sbjct: 253 GVRKVPVQHARRIIGRREVLGGGSYLPLKVNYAGVIPVIFASSLLMFPATIGQFL---SS 309
+
+Query: 208 ENQLIEQWIEALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYP 267
+           E+  +++    LS GS  + I Y+L I      +       +QIA  M+K+G +I  +  
+Sbjct: 310 ESSWLKRIATMLSPGSVVYSIFYVLLIIFFTYFWTATQFRPEQIASEMKKNGAFIPGIRQ 369
+
+Query: 268 GGATRRYINGLVTYFALVGAFYLILISGLPMMVVLV 303
+           G  T+ Y+   +    L+GA +L +++ LP ++  +
+Sbjct: 370 GKPTQSYLEYTMNRVTLLGAVFLAVVAILPSILGRI 405
+
+
+>sp|P33108|SECY_MICLU Preprotein translocase subunit secY
+           OS=Micrococcus luteus GN=secY PE=3 SV=1
+          Length = 436
+
+ Score =  222 bits (566), Expect = 3e-57,   Method: Composition-based stats.
+ Identities = 65/326 (19%), Positives = 132/326 (40%), Gaps = 27/326 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLV-------- 46
+           S+F++G+ P++++ +I Q+  V       +L  E +            LTL         
+Sbjct: 73  SVFALGIMPYITASIIVQLLRVV-IPRFEQLHQERRRGQATLTQYTRYLTLALALLQATT 131
+
+Query: 47  IALIQSVALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMI 105
+           +A +     +L   L           ++L  + L  G   ++W  +     G+G    ++
+Sbjct: 132 MASLARTGALLGCSL-PLLRDGSILTVLLVVIALTTGCLIVMWFGERITENGVGNGMSLL 190
+
+Query: 106 VMASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHN 165
+           +  S+ A  P  +   +Q         A+++   L+ +   V VE S+ RIPV       
+Sbjct: 191 IFTSIAAGFPAGLGQVVQT--QGWRVFAIVMGIGLLTMLAIVFVEESQRRIPVQYAKRQI 248
+
+Query: 166 R----FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQ--LIEQWIEAL 219
+                    +Y+ +++N A  +P+++A +++ +P   +              I       
+Sbjct: 249 GSRTVGGSSTYIPVKVNMANVIPVIFASSVLMLPGILIQFNTPQDGSAPAPWITWLSRYF 308
+
+Query: 220 -SMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGL 278
+            S   P +  LY L I      +  I  +  +I++ M++ G +I    P G T RY+  +
+Sbjct: 309 GSGDHPVYMALYFLLIIGFTYFYVSITFNPVEISDNMKRYGGFIPASAPAGPTERYLQYV 368
+
+Query: 279 VTYFAL-VGAFYLILISGLPMMVVLV 303
+           ++     VGA YL +++ +P++   V
+Sbjct: 369 ISRITFVVGALYLGIVAMIPLIAFAV 394
+
+
+>sp|O52351|SECY_MYCGA Preprotein translocase subunit secY
+           OS=Mycoplasma gallisepticum GN=secY PE=3 SV=2
+          Length = 498
+
+ Score =  221 bits (563), Expect = 7e-57,   Method: Composition-based stats.
+ Identities = 82/324 (25%), Positives = 156/324 (48%), Gaps = 27/324 (8%)
+
+Query: 3   FSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVALV 56
+           F+VG+SP++S+ +I Q+ +      LSKL    +  RR        +TL  A++Q+ A++
+Sbjct: 82  FAVGISPYISAQIIMQLLSTDLIPPLSKLAKSGELGRRRIELITRFVTLPFAVVQAFAII 141
+
+Query: 57  LNLPLQEAAG----VDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMASMI 111
+             +  Q                   + + AGTY  I++ D+ +  G+G  I +++++ ++
+Sbjct: 142 ALINNQRNGAIRFENGGILHQAFYIVTMTAGTYIGIFIGDIISKKGVGNGITLLILSGIL 201
+
+Query: 112 AYIPQDIWNSI----------QELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI 161
+           A +P                   +  S++  +L  +  LV L     V  S  RIP+ + 
+Sbjct: 202 ARLPDGFIVMYRVLGGVIISTNPILTSAINFSLYFLAFLVLLLAISFVNSSTRRIPIQQT 261
+
+Query: 162 NIHNRFK--KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEAL 219
+                    K  YL I+LN AG +P+++A +++SIP          QP+++      + L
+Sbjct: 262 GEGMVLGNEKLPYLPIKLNAAGVIPVIFASSIMSIPITIAEF----QPQSEARWFVEDYL 317
+
+Query: 220 SMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLV 279
+           S+ +P    LY++ I I    +++I I+ +Q+AE   KS ++I  V PG  T ++I  ++
+Sbjct: 318 SLRTPVGISLYVILIIIFTFFYSYIQINPEQLAENFNKSHKFIPGVRPGLDTEKHITKVL 377
+
+Query: 280 TYFALVGAFYLILISGLPMMVVLV 303
+                +GA +L +++ +P ++ LV
+Sbjct: 378 MRINFIGAPFLAIVAVIPYIISLV 401
+
+
+>sp|P10250|SECY_MYCCT Preprotein translocase subunit secY
+           OS=Mycoplasma capricolum subsp. capricolum (strain
+           California kid / ATCC 27343 / NCTC 10154) GN=secY PE=3
+           SV=2
+          Length = 482
+
+ Score =  219 bits (558), Expect = 2e-56,   Method: Composition-based stats.
+ Identities = 70/332 (21%), Positives = 157/332 (47%), Gaps = 29/332 (8%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRML------LTLVIALIQSVA 54
+           S+ ++G+SP++++ +I Q+ +      L++     +  R+ L      + +  AL+Q+ A
+Sbjct: 93  SILALGVSPYITASIIVQLLSTDVIPVLTRWSKSGERGRKKLDKLTKIIMIPFALMQAEA 152
+
+Query: 55  LVLNLPLQEAAGVD---------MTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMI 105
+            +  L  Q                    +L  LV++ G++F++W+ D     G+G  I I
+Sbjct: 153 TIFTLSSQGLIIPGWDNTNAIANSAFYYILIPLVMLGGSFFMLWIADQITIKGIGNGISI 212
+
+Query: 106 VMASMIAY-IPQDIWNSIQE-----------LKISSLWLALMLVFSLVFLYLAVTVERSK 153
+           V+   I   +P ++ ++ +                 L   + +   L+ +   V +  ++
+Sbjct: 213 VIFIGIIISMPSNLKSTFEYWVSNSGEEANIFFSGLLNFMIYISVFLLVILSVVIMNEAE 272
+
+Query: 154 YRIPVNKINI--HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQL 211
+            +IP+ +      +  +   YL ++LN AG +P+++A  ++S P     II  + P++  
+Sbjct: 273 RKIPIQQTGSGLTDSSEHTPYLPLKLNNAGVIPVIFASAIISTPITISQIIEAVNPDSGF 332
+
+Query: 212 IEQWIEALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGAT 271
+           +    + LS  +     ++ + I +    ++ + I+ ++IAE  QKSG +I  + PG  T
+Sbjct: 333 VIFTRDYLSFNTWWGISIFGILIVLFTFLYSQVQINPEKIAENFQKSGTFIPGIKPGKDT 392
+
+Query: 272 RRYINGLVTYFALVGAFYLILISGLPMMVVLV 303
+            +Y+ G++   ++VG+ +L +I+ LP ++  +
+Sbjct: 393 TKYLTGIINRLSVVGSVFLAIIALLPYVISKL 424
+
+
+>sp|P47416|SECY_MYCGE Preprotein translocase subunit secY
+           OS=Mycoplasma genitalium GN=secY PE=3 SV=1
+          Length = 475
+
+ Score =  218 bits (557), Expect = 3e-56,   Method: Composition-based stats.
+ Identities = 73/325 (22%), Positives = 158/325 (48%), Gaps = 29/325 (8%)
+
+Query: 3   FSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRML------LTLVIALIQSVALV 56
+           F+VG+SP++S+ +I Q+ +      LSKL    +  RR +      +TL  AL+Q+ A++
+Sbjct: 83  FAVGISPYISAQIIMQLLSTDLIPPLSKLVNSGEVGRRKIEMITRIITLPFALVQAFAVI 142
+
+Query: 57  LNLPLQEAAG------VDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMAS 109
+                              +  +    + + AGTY  ++L D  +  G+G  I +++++ 
+Sbjct: 143 QIATNAGTGSSPISLANSGSEFIAFYIIAMTAGTYMAVFLGDTISKKGVGNGITLLILSG 202
+
+Query: 110 MIAYIPQDIWNSIQELK----------ISSLWLALMLVFSLVFLYLAVTVERSKYRIPVN 159
+           +++ +PQ    +   L            +++   +  +  LV L+    + ++  +IP+ 
+Sbjct: 203 ILSQLPQGFIAAYNVLSGIVITLTPQLTAAISFFIYFLAFLVLLFATTFITQATRKIPIQ 262
+
+Query: 160 KINIH--NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217
+           +      +  K   YL I++N AG +P+++A +++SIP          QP+ +      +
+Sbjct: 263 QSGQGLVSEVKTLPYLPIKVNAAGVIPVIFASSIMSIPVTIAQF----QPQTESRWFVED 318
+
+Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277
+            LS+ +P    LY + + + +  +++I I+ +++A+  +KSG +I  + PG  T ++I  
+Sbjct: 319 YLSLSTPVGIFLYAVLVILFSFFYSYIQINPERLAKNFEKSGRFIPGIRPGNDTEKHIAR 378
+
+Query: 278 LVTYFALVGAFYLILISGLPMMVVL 302
+           ++     +GA +L +I+ +P +V  
+Sbjct: 379 VLIRINFIGAPFLTVIAIIPYIVSY 403
+
+
+>sp|Q9Z7S5|SECY_CHLPN Preprotein translocase subunit secY
+           OS=Chlamydia pneumoniae GN=secY PE=3 SV=1
+          Length = 457
+
+ Score =  217 bits (553), Expect = 9e-56,   Method: Composition-based stats.
+ Identities = 68/336 (20%), Positives = 146/336 (43%), Gaps = 36/336 (10%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSV- 53
+           ++ ++G+ P++S+ +I Q+F V       ++     + +R       L T+ +A+IQS+ 
+Sbjct: 73  TVIALGVVPYISASIIVQLFLVFMPALQREMRESSDQGKRRIGRLTRLFTVALAVIQSLL 132
+
+Query: 54  -------------ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLG 100
+                         +VL   L            +   +V+  GT  L+W+ +  +  G+G
+Sbjct: 133 FAKFALRMNLTIPGIVLPTLLSSKLFGVPWIFYITTVVVMTTGTLLLMWIGEQISDKGIG 192
+
+Query: 101 GSIMIVMA-SMIAYIPQDIWNSIQELKISS--------LWLALMLVFSLVFLYLAVTVER 151
+             I +++A  +++  P  + + + +L + S        + + ++ +  +  L   + +  
+Sbjct: 193 NGISLIIALGILSSFPSVLGSIVNKLNLGSQDSSDLGLISILILALVFVFVLITTILIIE 252
+
+Query: 152 SKYRIPVNKINI----HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP 207
+              +IPV                SYL +++N AG +P+++A +L+  P      I     
+Sbjct: 253 GVRKIPVQYARRVIGRREVPGGGSYLPLKVNYAGVIPVIFASSLLMFPATIGQFI---AS 309
+
+Query: 208 ENQLIEQWIEALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYP 267
+           E+  +++    L+ GS  + I Y+L I      +       +QIA  M+K+  +I  +  
+Sbjct: 310 ESSWMKRIAALLAPGSLVYSICYVLLIIFFTYFWTATQFHPEQIASEMKKNNAFIPGIRQ 369
+
+Query: 268 GGATRRYINGLVTYFALVGAFYLILISGLPMMVVLV 303
+           G  T+ Y+   +    L+GA +L  I+ LP ++  +
+Sbjct: 370 GKPTQHYLEYTMNRVTLLGALFLAAIAILPSLLGCL 405
+
+
+>sp|O25879|SECY_HELPY Preprotein translocase subunit secY
+           OS=Helicobacter pylori GN=secY PE=3 SV=1
+          Length = 420
+
+ Score =  214 bits (546), Expect = 6e-55,   Method: Composition-based stats.
+ Identities = 75/326 (23%), Positives = 159/326 (48%), Gaps = 24/326 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR-----MLLTLVIALIQSVAL 55
+           S+ S+G+ P+++S +I ++ + +    L+K+  E    ++       LT++I LIQ+V++
+Sbjct: 62  SIISLGIMPYITSSIIMELLS-ATFPNLAKMKKERDGMQKYMQIVRYLTILITLIQAVSV 120
+
+Query: 56  VLN-----LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMAS 109
+            +           A  +DM   M++    ++ GT  L+W+ +     G+G    +I+ A 
+Sbjct: 121 SVGLRSISGGANGAIMIDMQVFMIVSAFSMLTGTMLLMWIGEQITQRGVGNGISLIIFAG 180
+
+Query: 110 MIAYIPQDIWNSIQELKISSLWLA---LMLVFSLVFLYLAVTVERSKYRIPVNKIN---- 162
+           +++ IP  I  +   +    + +     +++  L  ++  + VE ++ RIP++       
+Sbjct: 181 IVSGIPSAISGTFNLVNTGVINILMLIGIVLIVLATIFAIIYVELAERRIPISYARKVVM 240
+
+Query: 163 IHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222
+            +   +  +Y+ I+LN +G +P ++A  L+  P   L         N+ ++   + LS  
+Sbjct: 241 QNQNKRIMNYIPIKLNLSGVIPPIFASALLVFPSTILQ----QATSNKTLQAVADFLSPQ 296
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+             A+ IL  L I   A  ++ I  +   IA+ ++++G YI  + PG  T  ++N + +  
+Sbjct: 297 GYAYNILMFLLIIFFAYFYSSIVFNSKDIADNLRRNGGYIPGLRPGEGTSSFLNSVASKL 356
+
+Query: 283 ALVGAFYLILISGLPMMVV-LVDIRY 307
+            L G+ YL LIS +P ++V  + + +
+Sbjct: 357 TLWGSLYLALISTVPWILVKAMGVPF 382
+
+
+>sp|Q9ZJS9|SECY_HELPJ Preprotein translocase subunit secY
+           OS=Helicobacter pylori J99 GN=secY PE=3 SV=1
+          Length = 420
+
+ Score =  214 bits (546), Expect = 7e-55,   Method: Composition-based stats.
+ Identities = 75/326 (23%), Positives = 159/326 (48%), Gaps = 24/326 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR-----MLLTLVIALIQSVAL 55
+           S+ S+G+ P+++S +I ++ + +    L+K+  E    ++       LT++I LIQ+V++
+Sbjct: 62  SIISLGIMPYITSSIIMELLS-ATFPNLAKMKKERDGMQKYMQIVRYLTILITLIQAVSV 120
+
+Query: 56  VLN-----LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMAS 109
+            +           A  +DM   M++    ++ GT  L+W+ +     G+G    +I+ A 
+Sbjct: 121 SVGLRSISGGANGAIMIDMQVFMIVSAFSMLTGTMLLMWIGEQITQRGVGNGISLIIFAG 180
+
+Query: 110 MIAYIPQDIWNSIQELKISSLWLA---LMLVFSLVFLYLAVTVERSKYRIPVNKIN---- 162
+           +++ IP  I  +   +    + +     +++  L  ++  + VE ++ RIP++       
+Sbjct: 181 IVSGIPSAISGTFNLVNTGVINILMLIGIVLIVLATIFAIIYVELAERRIPISYARKVVM 240
+
+Query: 163 IHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222
+            +   +  +Y+ I+LN +G +P ++A  L+  P   L         N+ ++   + LS  
+Sbjct: 241 QNQNKRIMNYIPIKLNLSGVIPPIFASALLVFPSTILQ----QATSNKTLQAIADFLSPQ 296
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282
+             A+ IL  L I   A  ++ I  +   IA+ ++++G YI  + PG  T  ++N + +  
+Sbjct: 297 GYAYNILMFLLIIFFAYFYSSIVFNSKDIADNLRRNGGYIPGLRPGEGTSSFLNAVASKL 356
+
+Query: 283 ALVGAFYLILISGLPMMVV-LVDIRY 307
+            L G+ YL LIS +P ++V  + + +
+Sbjct: 357 TLWGSLYLALISTVPWILVKAMGVPF 382
+
+
+>sp|O59442|SECY_PYRHO Preprotein translocase subunit secY
+           OS=Pyrococcus horikoshii GN=secY PE=3 SV=1
+          Length = 468
+
+ Score =  211 bits (538), Expect = 6e-54,   Method: Composition-based stats.
+ Identities = 59/364 (16%), Positives = 127/364 (34%), Gaps = 64/364 (17%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57
+           S+ ++G+ P +++ +I Q+   S+ + L     E +   +    + ++ +   ++   VL
+Sbjct: 72  SILTLGIGPIVTAGIILQLLVGSELIRLDLANPEDRRFYQALQRVFSVFMCFFEAAIWVL 131
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMA--------- 108
+                        TI  L  + L  G   LI L +L +  G+G  I + +A         
+Sbjct: 132 GGAFGRVGVDVTYTIATLMIIQLALGGIILIVLDELVSKWGIGSGISLFIAAGVSQRILT 191
+
+Query: 109 -------------------SMIAYIPQDIWNSIQELKISSLWL------ALMLVFSLVFL 143
+                              +++  IP  I + +      +L+        + +  +++  
+Sbjct: 192 RSLNPLTDPNIIDPLTGKPAIVGAIPYFIQHILDGDLKGALYRGGSAPDMIAVTATIIVF 251
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLII- 202
+            + V  E  +  IP+    +  R +      I+      +PI+    L +  Q +  ++ 
+Sbjct: 252 LVVVYFESMRVEIPLGYRGVTIRGR----YPIKFLYVSNIPIILTFALYANIQLWARVLD 307
+
+Query: 203 --------HFLQPENQLIEQWIEALSMGSPAWF--------ILYLLTIFILALAFAFI-- 244
+                    F       I  ++  +      +         I+YL+   I +L F F+  
+Sbjct: 308 RFGHPWLGRFDPVTGNPIGGFVLYVIPPRNIFTVIDNPVRAIIYLILTIIFSLLFGFLWV 367
+
+Query: 245 ---NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTYFALVGAFYLILISGLPMMV 300
+               +    IA ++Q++G  I        T  R +   + Y    G+  + LIS L   +
+Sbjct: 368 ELTGLDARTIARQLQRAGLQIPGFRRDPRTLERVLQKYIPYVTFWGSLTVALISVLADFL 427
+
+Query: 301 VLVD 304
+             + 
+Sbjct: 428 GALG 431
+
+
+>sp|P49976|SECY_BUCAK Preprotein translocase subunit secY (Fragment)
+           OS=Buchnera aphidicola subsp. Acyrthosiphon kondoi
+           GN=secY PE=3 SV=1
+          Length = 356
+
+ Score =  211 bits (537), Expect = 7e-54,   Method: Composition-based stats.
+ Identities = 62/283 (21%), Positives = 124/283 (43%), Gaps = 20/283 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+           S+F++G+ P++S+ +I Q+  V     L+++  E +  RR         TLV+A+ QS+ 
+Sbjct: 76  SIFALGIMPYISASIIIQLLTVVH-PALAEVKKEGEAGRRKISQYTRYGTLVLAIFQSIG 134
+
+Query: 55  LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAM-GLGGSIMIVMAS 109
+           +   LP                     + L+ GT FL+WL +         G  +I+ A 
+Sbjct: 135 IATGLPNMPGMQGLVMNPGFAFYFTAVVSLVTGTMFLMWLGEQITERGIGNGISIIIFAG 194
+
+Query: 110 MIAYIPQDIWNSIQELKISSLW---LALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNR 166
+           ++A +P  + ++I++ +   L    L L+ V      +  V +ER + RI VN       
+Sbjct: 195 IVAGLPPAVAHTIEQARQGDLHFLLLLLVAVLVFAVTFFVVFIERGQRRIVVNYAKRQQG 254
+
+Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222
+            +    + ++L +++N AG +P ++A +++  P             N  +      L  G
+Sbjct: 255 RRVYAAQSTHLPLKVNMAGVIPAIFASSIILFPATIASWFGGGTGWN-WLTTVSLYLQPG 313
+
+Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENV 265
+            P + +LY   I      +  +  +  + A+ ++KSG ++  +
+Sbjct: 314 QPLYVLLYASAIIFFCFFYTALVFNPRETADNLKKSGAFVPGI 356
+
+
+>sp|Q870W0|SC61A_NEUCR Protein transport protein SEC61 subunit alpha
+           OS=Neurospora crassa GN=sec-61 PE=3 SV=1
+          Length = 476
+
+ Score =  210 bits (536), Expect = 8e-54,   Method: Composition-based stats.
+ Identities = 61/391 (15%), Positives = 131/391 (33%), Gaps = 78/391 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLS---KLPLEVQERRRMLLTLVIALIQSVALVL 57
+           +L  +G++P +SS +++Q+ A +  + ++   K   E+ +  + L  +++++  +   V 
+Sbjct: 76  TLMELGITPIISSGMVFQLLAGTHMIDVNLDLKADRELYQTAQKLFAVILSIGTATVYVF 135
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGS-IMIVMASMIAYI- 114
+                  +      I+ L  L L+     +I L +L     GLG    + +  ++   I 
+Sbjct: 136 TGLYGPPS-DLGAGIVFLLILQLVVAGMIVILLDELLQKGYGLGSGISLFIATNICESIM 194
+
+Query: 115 -----PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFL 143
+                P  I        +   I+   L +                       L+ +LV  
+Sbjct: 195 WKAFSPTSINTGRGPEYEGAVIALFHLLMTWDNKQRALYEAFYRQNLPNIMNLLATLVVF 254
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+              + ++  +  IPV           Y    IRL     MPIM    L S       +++
+Sbjct: 255 AAVIYLQGFRVEIPVKSSRQRGARGSY---PIRLFYTSNMPIMLQSALSSNVFLISQMLY 311
+
+Query: 204 FLQPEN------------------QLIEQWIEALSMGSPA-----------WFILYLLTI 234
+               EN                    +   +  +S                 +I Y+LT 
+Sbjct: 312 SRFSENLLVRLFGVWEAKEGTAQLSAVSGLVYYMSPPLNFKDALLDPIHTAVYIAYMLTA 371
+
+Query: 235 FILALAFAFINI---SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLI 291
+                +  +I +   S   +A++++  G  +       +  + +  ++   A  G   + 
+Sbjct: 372 -CAVFSKTWIEVSGSSPRDVAKQLKDQGLVMAGHRE-QSMYKELKRIIPTAAAFGGACIG 429
+
+Query: 292 LISGLPMMVVLVDI---RYLRLSMIPGIFMI 319
+            +S    ++  +       L +++I G F I
+Sbjct: 430 ALSVASDLMGALGSGTGTLLAVTIIYGYFEI 460
+
+
+>sp|Q9V1V8|SECY_PYRAB Preprotein translocase subunit secY
+           OS=Pyrococcus abyssi GN=secY PE=3 SV=1
+          Length = 468
+
+ Score =  210 bits (536), Expect = 1e-53,   Method: Composition-based stats.
+ Identities = 57/364 (15%), Positives = 128/364 (35%), Gaps = 64/364 (17%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57
+           S+ ++G+ P +++ +I Q+   S+ + L     E +   +    + ++ +  +++   VL
+Sbjct: 72  SILTLGIGPIVTAGIILQLLVGSEIIKLDLANPEDRRFYQALQRVFSVFMCFLEAAIWVL 131
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMA--------- 108
+                         I  L  L L  G   LI L +L +  G+G  I + +A         
+Sbjct: 132 GGAFGRVGVDVTYAIAALMILQLAFGGIILIVLDELVSKWGIGSGISLFIAAGVSQRILT 191
+
+Query: 109 -------------------SMIAYIPQDIWNSIQELKISSLWLALM------LVFSLVFL 143
+                              +++  IP  I + ++     +L+          ++ +++  
+Sbjct: 192 RSLNPLTDPNIIDPLTGKPAIVGAIPYFIQHILKGDLKGALYRGGTAPDMMAVIATIIVF 251
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLII- 202
+            + V  E  +  IP+    +  R +      IR      +PI+    L +  Q +  ++ 
+Sbjct: 252 LVVVYFESMRVEIPLGYRGVTIRGR----YPIRFLYVSNIPIILTFALYANIQLWARVLD 307
+
+Query: 203 --------HFLQPENQLIEQWIEALSMGSPAWFIL--------YLLTIFILALAFAFI-- 244
+                    F       +  ++  +      + ++        YL+   I +L F F+  
+Sbjct: 308 RLGHPWLGTFDPTTGNPVGGFVLYVIPPRSIFTVIDNPVRALVYLILTVISSLIFGFLWV 367
+
+Query: 245 ---NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTYFALVGAFYLILISGLPMMV 300
+               +    IA ++Q++G  I        T  R +   + Y    G+  + LI+ L   +
+Sbjct: 368 ELTGLDARTIARQLQRAGLQIPGFRRDPRTLERVLQKYIPYVTFWGSLTVALIAVLADFL 427
+
+Query: 301 VLVD 304
+             + 
+Sbjct: 428 GALG 431
+
+
+>sp|Q8U019|SECY_PYRFU Preprotein translocase subunit secY
+           OS=Pyrococcus furiosus GN=secY PE=3 SV=1
+          Length = 468
+
+ Score =  210 bits (535), Expect = 1e-53,   Method: Composition-based stats.
+ Identities = 59/364 (16%), Positives = 129/364 (35%), Gaps = 64/364 (17%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57
+           S+ ++G+ P +++ +I Q+   S+ + L     E +   +    + ++ +   ++   +L
+Sbjct: 72  SILTLGIGPIVTAGIILQLLVGSEIIKLDLANPEDRRFYQALQRVFSVFMCFFEAAVWIL 131
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMA--------- 108
+                         I VL  L L  G   LI L +L +  G+G  I + +A         
+Sbjct: 132 GGAFGRVGVDVTYAIAVLMILQLAMGGIVLIILDELVSKWGIGSGISLFIAAGVSQTILT 191
+
+Query: 109 -------------------SMIAYIPQDIWNSIQELKISSLWL------ALMLVFSLVFL 143
+                              +++  IP  I + ++     +++        L +V ++V  
+Sbjct: 192 RSLNPLTDPNIIDPLTGQPAIVGAIPYFIQHILKGDLWGAIYRGGSAPDMLSVVATIVVF 251
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLII- 202
+           ++ V  E  +  IP+    +  R        IR      +PI+    L +  Q +  ++ 
+Sbjct: 252 FIVVYFESMRVEIPLGYRGVTVRGS----YPIRFLYVSNIPIILTFALYANIQLWARVLD 307
+
+Query: 203 --------HFLQPENQLIEQWIEALSMGSPAW--------FILYLLTIFILALAFAFI-- 244
+                    F       I  ++  +      +         I+YL+   I +L F ++  
+Sbjct: 308 RLGHPWLGRFDPTTGSPISGFVLYVIPPRNIFSVIDNPVRAIVYLILTVIFSLLFGYLWV 367
+
+Query: 245 ---NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTYFALVGAFYLILISGLPMMV 300
+               +    IA ++Q++G  I        T  + +   + Y    G+  + LI+ L   +
+Sbjct: 368 ELTGLDARSIARQLQRAGLQIPGFRRDPRTLEKVLQRYIPYVTFWGSLTVALIAVLADFL 427
+
+Query: 301 VLVD 304
+             + 
+Sbjct: 428 GALG 431
+
+
+>sp|Q54XK2|SC61A_DICDI Protein transport protein Sec61 subunit alpha
+           OS=Dictyostelium discoideum GN=sec61a PE=3 SV=1
+          Length = 475
+
+ Score =  208 bits (531), Expect = 3e-53,   Method: Composition-based stats.
+ Identities = 50/373 (13%), Positives = 127/373 (34%), Gaps = 75/373 (20%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57
+           +L  +G+SP ++S ++ Q+ A +K + + +     +      + L  ++I + Q VA + 
+Sbjct: 75  TLMELGISPIVTSGMVMQLLAGAKLIEIDQSVKADRDLFSAAQKLFGMLICVGQGVAYIW 134
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGS-IMIVMASMIAYI- 114
+           +    + A +       L  L L      ++ L +L     G+G    + +  ++   I 
+Sbjct: 135 SGSYGDPAVLGFGNC-FLIVLQLFFAGIIVMLLDELLQKGYGIGSGISLFIATNICETIV 193
+
+Query: 115 -----PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFL 143
+                P  +        +   I+   L L                       L+ +++  
+Sbjct: 194 WKTFSPTTVSVGKGTEFEGAVIALFHLLLTRNDKVRALKEAFYRQNLPNITNLLATVLIF 253
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+            + +  +  +  +PV    +  +   Y    I+L     +PI+    LVS   +   +++
+Sbjct: 254 MVVIYFQGFRVDLPVKSTRVSGQQGTY---PIKLFYTSNIPIILQSALVSNLYFISQLLY 310
+
+Query: 204 FLQPEN------------------QLIEQWIEALS-----------MGSPAWFILYLLTI 234
+              P+N                    +      +S                ++I ++LT 
+Sbjct: 311 RRFPDNILVNLFGAWRTSEYSQQMIPVSGLTYYISSPNNMSAVLADPFHALFYITFMLTS 370
+
+Query: 235 FILALAFAFINI---SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLI 291
+             L  +  +I +   S   +A++++     ++      +  + +N  +   A  G   + 
+Sbjct: 371 CAL-FSKVWIEVSGSSARDVAKQLKDQQMTMKGHR-DTSVIKELNRYIPTAAAFGGLCIG 428
+
+Query: 292 LISGLPMMVVLVD 304
+            ++ +   +  + 
+Sbjct: 429 ALTVVADFMGAIG 441
+
+
+>sp|P49461|SECY_ODOSI Preprotein translocase subunit secY
+           OS=Odontella sinensis GN=secY PE=3 SV=1
+          Length = 425
+
+ Score =  205 bits (521), Expect = 5e-52,   Method: Composition-based stats.
+ Identities = 72/323 (22%), Positives = 142/323 (43%), Gaps = 25/323 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM-------LLTLVIALIQSV 53
+            LF++ + P++++ +I Q+  VS   GLSKL  E     R        LLTL  +LIQS 
+Sbjct: 66  GLFTLNIFPYINASIIMQLL-VSLLPGLSKLQKEGGAEARRSINSLTRLLTLGWSLIQST 124
+
+Query: 54  ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIA 112
+           ++   L  + A       +     + L  G   ++WL+++    GLG    +++  ++++
+Sbjct: 125 SVAFYL--KRALFEWNLVLAFEIVIWLTTGAMIVLWLSEIITEYGLGNGPSLLIYTNIVS 182
+
+Query: 113 YIPQDIWNSI--QELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI------- 163
+            +P  +   I     K+      L      V LY  V ++    ++ +            
+Sbjct: 183 SLPGFVKQVITESSGKVPIGSWLLSGFVLFVALYGIVLLQEGMRKVYLISSKQLNQTSLP 242
+
+Query: 164 ---HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220
+               +  +   Y+ +R N AG MPI+    ++ IP  F+  +  L+    LI   +   S
+Sbjct: 243 FSGSSNLESGYYIPLRFNQAGVMPIILTTAVLVIP-TFIYNLGLLRILTPLITLPVFVKS 301
+
+Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280
+                +++ Y + I + +L ++ I ++   +++ +QK    I  + PG  T  Y+  ++ 
+Sbjct: 302 Y-KIIYWVSYFVLILLFSLFYSTIVVNPKDLSDELQKMAVSIPGIRPGVETTFYLKQVMK 360
+
+Query: 281 YFALVGAFYLILISGLPMMVVLV 303
+              L+GA  L L++ LP ++  +
+Sbjct: 361 RVTLLGAIMLALLATLPNIIQAI 383
+
+
+>sp|O51451|SECY_BORBU Preprotein translocase subunit secY
+           OS=Borrelia burgdorferi GN=secY PE=3 SV=1
+          Length = 434
+
+ Score =  204 bits (519), Expect = 8e-52,   Method: Composition-based stats.
+ Identities = 59/314 (18%), Positives = 144/314 (45%), Gaps = 15/314 (4%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQE----RRRMLLTLVIALIQSVALV 56
+           S+F + + P++S+ +I Q+   S          +       +    LT+V A++Q  A  
+Sbjct: 72  SIFMLSIGPYISASIIVQLLVYSFPSLKKMQEGDGGRQKTKKYTKYLTIVAAVVQGYATS 131
+
+Query: 57  LNL-PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI 114
+           L    +  A  +     + +  L +  GT+ L+W  +     G+G    +I+ + ++  +
+Sbjct: 132 LYAKGIPGAVTIPFYRYIFVAILTVTTGTFILLWFGEQINQRGVGNGTSLIIFSGIVVRL 191
+
+Query: 115 PQDIWNSIQEL-----KISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKK 169
+              ++N  Q +      ++ +++ L++   ++ + L +   +++ RI ++    ++    
+Sbjct: 192 QAALFNLFQSMQDPSQNVNPVFVILIISIFILVVILIIYEYKAQMRIAIHYARANSNNTV 251
+
+Query: 170 YSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFIL 229
+            SYL I+LNP+G +P+++A  L+++P   L I+      + +  Q +  L      +  L
+Sbjct: 252 SSYLPIKLNPSGVLPVIFASVLITLP---LQILSGFAETSSIARQILSYLRPNGFYYTFL 308
+
+Query: 230 YLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFY 289
+            ++ I      ++ I +S   I+  ++K+G  I  +       +Y++ ++      G+ +
+Sbjct: 309 NVILIIGFTYFYSKIQLSPKDISNNIRKNGGTIPGIKSDE-MEKYLDEIMNKTLFSGSIF 367
+
+Query: 290 LILISGLPMMVVLV 303
+           L +I+ +P +V  +
+Sbjct: 368 LSIIAIIPFLVQNI 381
+
+
+>sp|Q5NVM7|S61A2_PONAB Protein transport protein Sec61 subunit alpha
+           isoform 2 OS=Pongo abelii GN=SEC61A2 PE=2 SV=1
+          Length = 476
+
+ Score =  203 bits (518), Expect = 1e-51,   Method: Composition-based stats.
+ Identities = 60/392 (15%), Positives = 126/392 (32%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + A +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPAEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 ---PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+              P  I        +   I+   L                         L+ ++    +
+Sbjct: 195 ASSPTTINTGRGTEFEGAVIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +YS   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYSSYPIKLFYTSNIPIILQSALVSNLYVISQMLSVR 311
+
+Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N                      +      LS       IL       +  IF+L  
+Sbjct: 312 FSGNFLVNLLGQWADVSGGGPARSYPVGGLCYYLSPPESMGAILEDPVHVVVYIIFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRDTSMVHE-LNRYIPTAAAFGGLCIGA 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S L   +  +       L +++I   F IF+
+Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q96TW8|SC61A_HANAN Protein transport protein SEC61 subunit alpha
+           OS=Hansenula anomala GN=SEC61 PE=3 SV=1
+          Length = 479
+
+ Score =  203 bits (516), Expect = 2e-51,   Method: Composition-based stats.
+ Identities = 59/372 (15%), Positives = 129/372 (34%), Gaps = 73/372 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLS---KLPLEVQERRRMLLTLVIALIQSVALVL 57
+           +L  +G+SP +SS +++Q+   ++ L ++   K   E  +  + L  +++++ Q+   VL
+Sbjct: 76  TLMELGISPIVSSGMVFQLLQGTQLLDVNLESKTDRETFQTAQKLFAILLSIGQATVYVL 135
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMI----- 111
+                  +      + +L  L L+     +I L +L     GLG  I + MA+ I     
+Sbjct: 136 TGIYGRPS-DLGVGVCLLLILQLVFAGIIVILLDELLQKGYGLGSGISLFMATNICEQIF 194
+
+Query: 112 --AYIPQDI----WNSIQELKISSLWLALM----------------------LVFSLVFL 143
+             A+ P  +     +  +   ++   L  +                      L+ + +  
+Sbjct: 195 WKAFAPTTVNNGRGDEFEGAVVALFHLLSVRKDKRRALVEAFYRQNLPNIFQLLATFIVF 254
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+           +L V ++  +Y IPV       +   Y    I+L      PIM    L S       ++ 
+Sbjct: 255 FLVVYLQGFRYEIPVRSTRQRGQNGLY---PIKLFYTSNTPIMLQSALTSNFFIISQMLF 311
+
+Query: 204 FLQPENQLIE------------------QWIEALSMG--------SPAWFILYLLTIFIL 237
+              P N ++                        +            P   ++Y+  +  +
+Sbjct: 312 QRFPLNPVVRLFGVWDARPGSAQLFASNGLAYYIQPPLSLTEALLDPIKTVIYVSFVLSV 371
+
+Query: 238 ALAFA--FINIS---GDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F+  +I IS      +A++ +  G  I       +  + +  ++   A  G   +  
+Sbjct: 372 CALFSKTWIEISGTAPRDVAKQFKDQGLVIAG-RRETSVYKELKRIIPTAAAFGGASIGA 430
+
+Query: 293 ISGLPMMVVLVD 304
+           +S    ++  + 
+Sbjct: 431 LSVACDLLGTLG 442
+
+
+>sp|P78979|SC61A_YARLI Protein transport protein SEC61 subunit alpha
+           OS=Yarrowia lipolytica GN=SEC61 PE=3 SV=2
+          Length = 471
+
+ Score =  203 bits (516), Expect = 2e-51,   Method: Composition-based stats.
+ Identities = 50/371 (13%), Positives = 119/371 (32%), Gaps = 73/371 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLS---KLPLEVQERRRMLLTLVIALIQSVALVL 57
+           SL  +G++P +SS +++Q+   ++ + ++   K   E+ +  + L  ++++L Q+   VL
+Sbjct: 76  SLMELGITPIVSSGMVFQLLGGTQLIEVNMDLKSDRELYQTAQKLFAIILSLGQATVYVL 135
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGS-IMIVMASMIAYI- 114
+                         + +L    L+     +I L +L     GLG    + +  ++   I 
+Sbjct: 136 TGMYGPPK-DLGVGVCLLLIFQLVLAALVVILLDELLQKGYGLGSGISLFIATNICEQIF 194
+
+Query: 115 ---------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143
+                     +      +   ++ + L                         LV ++   
+Sbjct: 195 WKAFAPTTVNKGRGYEFEGAIVAFVHLLFTRKDKKRAIIEAFTRQDLPNMSQLVTTVAIF 254
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+              + ++  +  IPV        +  +    I+L     +PIM    L S       ++ 
+Sbjct: 255 AAVIYLQGFRVDIPVKSSKQRGPYGVF---PIKLFYTSNLPIMLQSALTSNIFIISQMLF 311
+
+Query: 204 FLQPEN------------------QLIEQWIEALSMG--------SPAWFILYLLTIFIL 237
+              P N                    +      +            P   ++Y+  +  +
+Sbjct: 312 KKFPTNVLVRLLGVWDGREGMQQLFPVSGIAYYMQPPFNAKEALADPVKTVIYIAFVLGV 371
+
+Query: 238 ALAFAFINI-----SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F+   I     S   +A++ ++ G  I       A  + +  ++   A  G   +  
+Sbjct: 372 CAVFSATWIEISGSSPRDVAKQFKEQGLVIAGRRETSAY-KELKRIIPTAAAFGGATIGA 430
+
+Query: 293 ISGLPMMVVLV 303
+           +S    ++  +
+Sbjct: 431 LSVASDLLGAL 441
+
+
+>sp|Q9JLR1|S61A2_MOUSE Protein transport protein Sec61 subunit alpha
+           isoform 2 OS=Mus musculus GN=Sec61a2 PE=2 SV=3
+          Length = 476
+
+ Score =  202 bits (514), Expect = 3e-51,   Method: Composition-based stats.
+ Identities = 59/392 (15%), Positives = 126/392 (32%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + A +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPAEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 ---PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+              P  I        +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTINTGRGTEFEGAVIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +YS   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYSSYPIKLFYTSNIPIILQSALVSNLYVISQMLSVR 311
+
+Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFI------LYLLTIFILAL 239
+              N                      +      LS       I      + +  IF+L  
+Sbjct: 312 FSGNFLVNLLGQWADVSGGGPARSYPVGGLCYYLSPPESMGAIFEDPVHVVVYIIFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRDTSMVHE-LNRYIPTAAAFGGLCIGA 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S L   +  +       L +++I   F IF+
+Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q9H9S3|S61A2_HUMAN Protein transport protein Sec61 subunit alpha
+           isoform 2 OS=Homo sapiens GN=SEC61A2 PE=2 SV=3
+          Length = 476
+
+ Score =  202 bits (514), Expect = 3e-51,   Method: Composition-based stats.
+ Identities = 59/392 (15%), Positives = 126/392 (32%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + A +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPAEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 ---PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+              P  I        +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTINTGRGTEFEGAVIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +YS   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYSSYPIKLFYTSNIPIILQSALVSNLYVISQMLSVR 311
+
+Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFI------LYLLTIFILAL 239
+              N                      +      LS       I      + +  IF+L  
+Sbjct: 312 FSGNFLVNLLGQWADVSGGGPARSYPVGGLCYYLSPPESMGAIFEDPVHVVVYIIFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRDTSMVHE-LNRYIPTAAAFGGLCIGA 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S L   +  +       L +++I   F IF+
+Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q2KHX4|S61A2_BOVIN Protein transport protein Sec61 subunit alpha
+           isoform 2 OS=Bos taurus GN=SEC61A2 PE=2 SV=3
+          Length = 476
+
+ Score =  202 bits (514), Expect = 3e-51,   Method: Composition-based stats.
+ Identities = 59/392 (15%), Positives = 126/392 (32%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + A +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPAEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 ---PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+              P  I        +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTINTGRGTEFEGAVIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +YS   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYSSYPIKLFYTSNIPIILQSALVSNLYVISQMLSVR 311
+
+Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFI------LYLLTIFILAL 239
+              N                      +      LS       I      + +  IF+L  
+Sbjct: 312 FSGNFLVNLLGQWADVSGGGPARSYPVGGLCYYLSPPESMGAIFEDPVHVVVYIIFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRDTSMVHE-LNRYIPTAAAFGGLCIGA 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S L   +  +       L +++I   F IF+
+Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q90ZM2|S61A1_DANRE Protein transport protein Sec61 subunit
+           alpha-like 1 OS=Danio rerio GN=sec61al1 PE=2 SV=3
+          Length = 476
+
+ Score =  202 bits (514), Expect = 3e-51,   Method: Composition-based stats.
+ Identities = 53/392 (13%), Positives = 124/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N                      +      LS       +L       +  +F+L  
+Sbjct: 312 FSGNFLVNLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLDDPVHAVIYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q8AY32|SC61A_GADOC Protein transport protein Sec61 subunit alpha
+           OS=Gadus ogac GN=sec61a PE=2 SV=3
+          Length = 476
+
+ Score =  202 bits (514), Expect = 3e-51,   Method: Composition-based stats.
+ Identities = 53/392 (13%), Positives = 123/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +V+   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLVIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N                      +       S       +L       +  +F+L  
+Sbjct: 312 FSGNFLVNLLGTWSDTSTGGPARAYPVGGLCYYFSPPESFGSVLDDPVHASIYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q98SN8|S61A2_ONCMY Protein transport protein Sec61 subunit alpha
+           isoform B OS=Oncorhynchus mykiss GN=sec61ab PE=2 SV=3
+          Length = 476
+
+ Score =  201 bits (513), Expect = 4e-51,   Method: Composition-based stats.
+ Identities = 52/392 (13%), Positives = 122/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSDMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLLATVFVFGV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N                      +       S       +L       +   F+L  
+Sbjct: 312 FSGNFLVNLLGTWSDTSSGGPARAYPVGGLCYYFSPPESFGSVLDDPIHAAIYICFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q5EA68|S61A1_BOVIN Protein transport protein Sec61 subunit alpha
+           isoform 1 OS=Bos taurus GN=SEC61A1 PE=2 SV=3
+          Length = 476
+
+ Score =  201 bits (513), Expect = 5e-51,   Method: Composition-based stats.
+ Identities = 56/392 (14%), Positives = 124/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  + I + QS+  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMTITIGQSIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGVCLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLEDPVHAVVYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S L   +  +       L +++I   F IF+
+Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|P61621|S61A1_RAT Protein transport protein Sec61 subunit alpha
+           isoform 1 OS=Rattus norvegicus GN=Sec61a1 PE=2 SV=2
+          Length = 476
+
+ Score =  201 bits (513), Expect = 5e-51,   Method: Composition-based stats.
+ Identities = 56/392 (14%), Positives = 125/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + QS+  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLEDPVHAVVYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S L   +  +       L +++I   F IF+
+Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q5R5L5|S61A1_PONAB Protein transport protein Sec61 subunit alpha
+           isoform 1 OS=Pongo abelii GN=SEC61A1 PE=2 SV=3
+          Length = 476
+
+ Score =  201 bits (513), Expect = 5e-51,   Method: Composition-based stats.
+ Identities = 56/392 (14%), Positives = 125/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + QS+  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLEDPVHAVVYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S L   +  +       L +++I   F IF+
+Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|P61620|S61A1_MOUSE Protein transport protein Sec61 subunit alpha
+           isoform 1 OS=Mus musculus GN=Sec61a1 PE=2 SV=2
+          Length = 476
+
+ Score =  201 bits (513), Expect = 5e-51,   Method: Composition-based stats.
+ Identities = 56/392 (14%), Positives = 125/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + QS+  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLEDPVHAVVYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S L   +  +       L +++I   F IF+
+Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|P61619|S61A1_HUMAN Protein transport protein Sec61 subunit alpha
+           isoform 1 OS=Homo sapiens GN=SEC61A1 PE=1 SV=2
+          Length = 476
+
+ Score =  201 bits (513), Expect = 5e-51,   Method: Composition-based stats.
+ Identities = 56/392 (14%), Positives = 125/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + QS+  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLEDPVHAVVYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S L   +  +       L +++I   F IF+
+Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q7T278|SC61A_HARAN Protein transport protein Sec61 subunit alpha
+           OS=Harpagifer antarcticus GN=sec61a PE=2 SV=3
+          Length = 476
+
+ Score =  201 bits (512), Expect = 6e-51,   Method: Composition-based stats.
+ Identities = 54/392 (13%), Positives = 125/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNILNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNFLVNLLGTWSDATSGGPARAYPVAGLCYYLSPPESFGSVLDDPVHAAIYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q7T277|SC61A_DISMA Protein transport protein Sec61 subunit alpha
+           OS=Dissostichus mawsoni GN=sec61a PE=2 SV=3
+          Length = 476
+
+ Score =  201 bits (512), Expect = 6e-51,   Method: Composition-based stats.
+ Identities = 54/392 (13%), Positives = 125/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNILNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNFLVNLLGTWSDATSGGPARAYPVAGLCYYLSPPESFGSVLDDPVHAAIYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q8AY36|SC61A_PAGBO Protein transport protein Sec61 subunit alpha
+           OS=Pagothenia borchgrevinki GN=sec61a PE=2 SV=3
+          Length = 476
+
+ Score =  201 bits (511), Expect = 7e-51,   Method: Composition-based stats.
+ Identities = 54/392 (13%), Positives = 125/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNILNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNFLVNLLGTWSDATSGGPARAYPVAGLCYYLSPPESFGSVLDDPVHAAIYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q8AY35|SC61A_NOTAN Protein transport protein Sec61 subunit alpha
+           OS=Notothenia angustata GN=sec61a PE=2 SV=3
+          Length = 476
+
+ Score =  201 bits (511), Expect = 7e-51,   Method: Composition-based stats.
+ Identities = 54/392 (13%), Positives = 125/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNILNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNFLVNLLGTWSDATSGGPARAYPVAGLCYYLSPPESFGSVLDDPVHAAIYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q8AY34|SC61A_HEMAM Protein transport protein Sec61 subunit alpha
+           OS=Hemitripterus americanus GN=sec61a PE=2 SV=3
+          Length = 476
+
+ Score =  201 bits (511), Expect = 8e-51,   Method: Composition-based stats.
+ Identities = 55/392 (14%), Positives = 126/392 (32%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K +G+   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIGVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREGFYRQNLPNLMNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNFLVNLLGTWSDATSGGPARAYPVAGLCYYLSPPESFGSVLDDPVHAGIYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q90YL4|S61A2_DANRE Protein transport protein Sec61 subunit
+           alpha-like 2 OS=Danio rerio GN=sec61al2 PE=2 SV=3
+          Length = 476
+
+ Score =  201 bits (511), Expect = 8e-51,   Method: Composition-based stats.
+ Identities = 55/392 (14%), Positives = 124/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q+V  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAVVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N                      +      LS       +L       +  IF+L  
+Sbjct: 312 FSGNFLVNLLGTWSDTSTGGPARAYPVGGLCYYLSPPESFGTVLEDPIHAIIYIIFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q8AY31|SC61A_BOVVA Protein transport protein Sec61 subunit alpha
+           OS=Bovichtus variegatus GN=sec61a PE=2 SV=3
+          Length = 476
+
+ Score =  200 bits (510), Expect = 9e-51,   Method: Composition-based stats.
+ Identities = 53/392 (13%), Positives = 125/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G++P ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGIAPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFGPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNFLVNLLGTWSDATTSGPARAYPVAGLCYYLSPPESFGSVLDDPVHAVIYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|P38377|S61A1_CANFA Protein transport protein Sec61 subunit alpha
+           isoform 1 OS=Canis familiaris GN=SEC61A1 PE=1 SV=3
+          Length = 476
+
+ Score =  200 bits (510), Expect = 1e-50,   Method: Composition-based stats.
+ Identities = 56/392 (14%), Positives = 125/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + QS+  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311
+
+Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N L+                          LS       +L       +  +F+L  
+Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCHYLSPPESFGSVLEDPVHAVVYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S L   +  +       L +++I   F IF+
+Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q9P8E3|SC61A_CANAL Protein transport protein SEC61 subunit alpha
+           OS=Candida albicans GN=SEC61 PE=3 SV=1
+          Length = 479
+
+ Score =  199 bits (508), Expect = 1e-50,   Method: Composition-based stats.
+ Identities = 57/374 (15%), Positives = 122/374 (32%), Gaps = 77/374 (20%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPL---EVQERRRMLLTLVIALIQSVALVL 57
+           +L  +G+SP +SS +++Q+   +K + +        E  +  + LL +++A+ Q+   VL
+Sbjct: 76  TLMELGISPIVSSGMLFQLLQGTKIIHVDMQNKNDRETFQTAQKLLAILLAVGQATVYVL 135
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMI----- 111
+                  + + +    +L  L L+  +  +I L +L     GLG  + +  A+       
+Sbjct: 136 TGMYGPPSSLGVGVCSLL-ILQLVFASTIVILLDELLQKGYGLGSGVSLFTATNTCEQVF 194
+
+Query: 112 --AYIP----QDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143
+             A+ P               ++   L                         L+ +L+  
+Sbjct: 195 WKAFAPTTSTSAKGTEFDGAVVAMFHLLGSRKDKKRALIESFYRPNLPNMFQLLATLLVF 254
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+           +  V ++  +  +P+        +  Y    IRL     +PIM    L S       ++ 
+Sbjct: 255 FAVVYLQGFRIELPMKSTRQRGPYGSY---PIRLFYTSNIPIMLESALASNIFIISQLLF 311
+
+Query: 204 FLQPENQLIE------------------QWIEALSMGSPAWFILYLLTIFILALAFAFI- 244
+              P N  ++                       +    P  F   LL      +  AF+ 
+Sbjct: 312 MRWPNNLFVKLLGTWDARAGSSQLYANGGLAYYIQP--PFNFTDALLDPIKTTIYIAFVL 369
+
+Query: 245 --------------NISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYL 290
+                           S   +A++ ++ G  I       A  + +  ++   A  G   +
+Sbjct: 370 GSCAVFSTTWIEISGTSPRDVAKQFKEQGLVIAGHRDTSAY-KELKKIIHIAAAFGGATI 428
+
+Query: 291 ILISGLPMMVVLVD 304
+             +S +  ++  + 
+Sbjct: 429 GALSVVCDLMGTLG 442
+
+
+>sp|Q6FRY3|SC61A_CANGA Protein transport protein SEC61 subunit alpha
+           OS=Candida glabrata GN=SEC61 PE=3 SV=1
+          Length = 479
+
+ Score =  199 bits (507), Expect = 2e-50,   Method: Composition-based stats.
+ Identities = 54/373 (14%), Positives = 119/373 (31%), Gaps = 74/373 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57
+           +L  +G+SP ++S +I+Q    ++ L +S    E +E  +    +  +++   Q++ +V+
+Sbjct: 75  TLMELGVSPIITSSMIFQFLQGTQLLQVSLDSKEDRELYQIAQKVCAIILTFGQALVVVM 134
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMIA---- 112
+                  +      I +L    LM  ++ ++ L +L     GLG  I +  A+ IA    
+Sbjct: 135 TGNYGSPS-DLGIAISLLLIFQLMFASFIVLLLDELLTKGYGLGSGISLFTATNIAENIF 193
+
+Query: 113 -------YIPQDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143
+                   +        +   I+   L  +                      ++ ++   
+Sbjct: 194 WKAFAPTTVNSGRGKEFEGAVIAFFHLLAVRKDKKRALVEAFYRENLPNMFQVIATVFVF 253
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+              + ++  +Y +PV    +     + +   I+L      PIM    L S       I+ 
+Sbjct: 254 LFVLYLQGFRYELPVKSTKVR---GQMAIYPIKLFYTSNTPIMLQSALSSNIFLISQILF 310
+
+Query: 204 FLQPENQ-------------------LIEQWIEALSMGSPAWFILY------LLTIFILA 238
+              P N                     +      L         L       + T F+L 
+Sbjct: 311 QKYPSNPVIRLFGVWGIRPGTNGPQVPLSGISYYLQPIGSLKMALLDPIKTVIYTAFVLG 370
+
+Query: 239 LAFAFIN-------ISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLI 291
+               F          S   +A++ ++ G  I       +  + +  ++   A  G   + 
+Sbjct: 371 TCALFSKTWIEISGTSAKDVAKQFKEQGMVINGKRET-SVYKELKKIIPTAAAFGGATIG 429
+
+Query: 292 LISGLPMMVVLVD 304
+            +S    ++  + 
+Sbjct: 430 ALSVGSDLLGALG 442
+
+
+>sp|Q752H7|SC61A_ASHGO Protein transport protein SEC61 subunit alpha
+           OS=Ashbya gossypii GN=SEC61 PE=3 SV=1
+          Length = 480
+
+ Score =  199 bits (507), Expect = 2e-50,   Method: Composition-based stats.
+ Identities = 50/374 (13%), Positives = 123/374 (32%), Gaps = 75/374 (20%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57
+           +L  +G+SP ++S +I+Q    ++ L ++    + +   +  + +  +V+ L Q++ +VL
+Sbjct: 75  TLMELGVSPIITSSMIFQFLQGTQLLQVNLESKQDRELFQIAQKVCAIVLTLGQAIVVVL 134
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDL-NAAMGLGGSIMIVMASMIA---- 112
+                         I +L  L L+  ++ ++ L +L     GLG  I +  A+ IA    
+Sbjct: 135 TGNYGS-VSNLGIAISLLLILQLVFASFIVLLLDELLIKGYGLGSGISLFTATNIAEQIF 193
+
+Query: 113 -------YIPQDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143
+                   +        +   ++   L  +                      ++ ++   
+Sbjct: 194 WKAFAPTTVNNGRGTEFEGAVVALFHLLSVRKDKKRALVEAFYRDYLPNMFQVLSTVFVF 253
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+              + ++  +Y +PV       +   Y    I+L      PIM    L S       +++
+Sbjct: 254 LFVLYLQGFRYELPVRSTRTRGQVGSY---PIKLFYTSNTPIMLQSALTSNIFLTSQLLY 310
+
+Query: 204 FLQPENQLIE--------------------QWIEALSMG--------SPAWFILYLLTIF 235
+              P N +++                         +            P   ++Y+  + 
+Sbjct: 311 QKFPNNPIVKMLGVWGTRSDAPYSPNAAISGLSYYIQPPFSFTEALLDPIKTVVYVTFVL 370
+
+Query: 236 ILALAFAFINIS-----GDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYL 290
+                F+   I         ++++ ++ G  I       +  R +  ++   A  G   +
+Sbjct: 371 GACAMFSRTWIDVSGTSPRDVSKQFKEQGLVING-RRETSVYRELKKVIPTAAAFGGATI 429
+
+Query: 291 ILISGLPMMVVLVD 304
+             +S    ++  + 
+Sbjct: 430 GALSVGSDLLGTLG 443
+
+
+>sp|P25014|SECY_CYAPA Preprotein translocase subunit secY
+           OS=Cyanophora paradoxa GN=secY PE=3 SV=2
+          Length = 492
+
+ Score =  199 bits (507), Expect = 2e-50,   Method: Composition-based stats.
+ Identities = 70/337 (20%), Positives = 138/337 (40%), Gaps = 31/337 (9%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQE-------RRRMLLTLVIALIQSV 53
+             F++G+ P+M++    Q+        L +   E +E       +    LT++ A IQS+
+Sbjct: 109 GFFTLGILPYMNASFFLQVLT-KILPSLERFQKEQEEIAQREFKKWTRYLTVIWAFIQSI 167
+
+Query: 54  ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMASMIA 112
+            +     ++  A      + +   + L  G   ++ + +    +GL     +++  ++IA
+Sbjct: 168 VISWIW-IRPYALNWDFFLGLKVVVALTLGAVIVMIIAEQITEIGLTNGSSLLIFINIIA 226
+
+Query: 113 YIPQDIWNSIQE----LKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFK 168
+            IP  I                 L L L  S + +++ + ++ S   +PV         +
+Sbjct: 227 RIPNSIEQLFNSNINWTFPMISSLILSLSLSFITMFVIIGLQESGRPVPVLIARQEAERQ 286
+
+Query: 169 KY-------------SYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQW 215
+           K+             +Y+  +L PAG MP+++A T+  +        +FL  +     Q 
+Sbjct: 287 KFNEPITEAERRKTQAYIFFQLLPAGIMPVIFASTIFDL--ALPAFTNFLLQQGNWGYQL 344
+
+Query: 216 IEALSMGSPAWFILYLLTIFILALAFAF-INISGDQIAERMQKSGEYIENVYPGGATRRY 274
+           I++    S      YL+TI + +  +A  I I+   +AE +      I  V PG  T+ Y
+Sbjct: 345 IKSFPFNSLFKDFCYLITIMLFSSNYALTIMINPKTLAENLNSMNALIPGVRPGSETKVY 404
+
+Query: 275 INGLVTYFALVGAFYLILISGLPMMVV-LVDIRYLRL 310
+              L+     +G+F L L+  LP +V   + +  L++
+Sbjct: 405 SEQLIHRLNFIGSFVLALVCILPSIVERSLGLPKLQI 441
+
+
+>sp|Q6CPY9|SC61A_KLULA Protein transport protein SEC61 subunit alpha
+           OS=Kluyveromyces lactis GN=SEC61 PE=3 SV=1
+          Length = 480
+
+ Score =  199 bits (506), Expect = 3e-50,   Method: Composition-based stats.
+ Identities = 51/374 (13%), Positives = 124/374 (33%), Gaps = 75/374 (20%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57
+           +L  +G+SP ++S +I+Q    ++ L ++    + +E  +    +  +++   Q++ +VL
+Sbjct: 75  TLMELGVSPIITSSMIFQFLQGTQLLQVNMENKQDRELYQIAQKVFAILLTFGQAIVVVL 134
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMI----- 111
+                + +      I +L    L+  ++ ++ L +L +   GLG  I +  A+ I     
+Sbjct: 135 TGNYGKPS-DLGLAISLLLIFQLIFASFTVLLLDELLSKGYGLGSGISLFTATNIAEQIT 193
+
+Query: 112 --AYIPQDI----WNSIQELKISSLWLALM----------------------LVFSLVFL 143
+             A+ P  +        +   I+   L  +                      +  ++   
+Sbjct: 194 WKAFAPTTVNVGRGQEFEGAVIALFHLLAIRKDKKRALVEAFYRENLPNMFQVFSTIGVF 253
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+              + ++  +Y +P+       ++  Y    I+L      PIM    L S       I++
+Sbjct: 254 LSVLYLQGFRYELPIKSTRTRGQYGSY---PIKLFYTSNTPIMLQSALTSNIFLISQILY 310
+
+Query: 204 FLQPENQLIE--------------------QWIEALSMG--------SPAWFILYLLTIF 235
+                N L++                         +            P   ++Y+  + 
+Sbjct: 311 QRFSTNPLVKLLGVWGTRAGAPAGQQVALSGLSYYIQPPFSVTDALLDPIKTVVYVGFVL 370
+
+Query: 236 ILALAFAFINI-----SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYL 290
+                F+   I     S   +A++ +  G  I          + +  ++   A  G   +
+Sbjct: 371 GACALFSKTWIEISGTSPRDVAKQFKDQGLTINGKRET-NVYKELKKIIPTAAAFGGAVI 429
+
+Query: 291 ILISGLPMMVVLVD 304
+             +S    ++  + 
+Sbjct: 430 GALSVGSDLLGTLG 443
+
+
+>sp|Q6BN08|SC61A_DEBHA Protein transport protein SEC61 subunit alpha
+           OS=Debaryomyces hansenii GN=SEC61 PE=3 SV=1
+          Length = 479
+
+ Score =  198 bits (504), Expect = 4e-50,   Method: Composition-based stats.
+ Identities = 55/372 (14%), Positives = 123/372 (33%), Gaps = 73/372 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57
+           +L  +G+SP +S+ +++Q+   +K + +       +   +  + L  +++A+ Q+   VL
+Sbjct: 76  TLMELGISPIVSAGMVFQLLQGTKLITVDMSNKNDRDQFQTAQKLFAILLAVGQATVYVL 135
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMI----- 111
+                  + +     ++L   ++ AG   +I L +L     GLG  I +  A+ +     
+Sbjct: 136 TGMYGPPSSLGTGVCLLLVLQLVFAG-IVVILLDELLQKGYGLGSGISLFTATNVCEQVF 194
+
+Query: 112 --AYIPQ----DIWNSIQELKISSLWLALM----------------------LVFSLVFL 143
+             A+ P           +   ++   L                         L+ ++   
+Sbjct: 195 WKAFAPTTSNIGKGTEFEGAVVALFHLLGSRKDKKRALLEAFYRSHLPNMFQLIATVFVF 254
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+            L V ++  +  +P+        +  Y    IRL     +PIM    L S       ++ 
+Sbjct: 255 LLVVYLQGFRIELPIKSTRQRGPYGLY---PIRLFYTSNIPIMLQSALSSNIFIISQMLF 311
+
+Query: 204 FLQPENQLIE------------------QWIEALSMG--------SPAWFILYLLTIFIL 237
+              P N  ++                       +            P   I+Y++ +   
+Sbjct: 312 VRWPNNIFVKILGSWDTRQGAAQLYAVSGLAYYIQPPLSFTEALLDPIKTIIYIIFVLGS 371
+
+Query: 238 ALAFAFINI-----SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F+   I     S   +A++ ++ G  I       A  R +  ++   A  G   +  
+Sbjct: 372 CAVFSTTWIEISGASPRDVAKQFKEQGLVIAGHRDTSAY-RELKKIIPTAAAFGGATIGA 430
+
+Query: 293 ISGLPMMVVLVD 304
+           +S    ++  + 
+Sbjct: 431 LSVFCDLMGTLG 442
+
+
+>sp|Q8AY33|SC61A_BORSA Protein transport protein Sec61 subunit alpha
+           OS=Boreogadus saida GN=sec61a PE=2 SV=3
+          Length = 476
+
+ Score =  198 bits (504), Expect = 4e-50,   Method: Composition-based stats.
+ Identities = 54/392 (13%), Positives = 126/392 (32%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + Q++  V+ 
+Sbjct: 75  TLMELGISPIVTSDLIMQLLAGAKIIEVGDSPKDRALFNGAQKLFGMIITIGQAIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +V+   + +AG   L+    L    GLG    +++  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLVIIIQLFVAGLIVLLLDELLQKGYGLGSGISLLIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPENQL--------------------IEQWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N +                    +      LS       +L       +  +F+L  
+Sbjct: 312 FSGNFIVNLLGTWSDTSTGGPARAYPVGGLCYFLSPPESFGSVLDDPVHAAIYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|Q98SN9|S61A1_ONCMY Protein transport protein Sec61 subunit alpha
+           isoform A OS=Oncorhynchus mykiss GN=sec61aa PE=2 SV=3
+          Length = 476
+
+ Score =  198 bits (503), Expect = 5e-50,   Method: Composition-based stats.
+ Identities = 54/392 (13%), Positives = 124/392 (31%), Gaps = 75/392 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G+SP ++S LI Q+ A +K + +   P +       + L  ++I + QS+  V+ 
+Sbjct: 75  TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114
+               + + +     +++   + +AG   L+    L    GLG    + +  ++   I   
+Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+                          +   I+   L                         L+ ++    +
+Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLLNLIATVFVFAV 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +Y+   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311
+
+Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239
+              N                      +      LS       +L       +  +F+L  
+Sbjct: 312 FSGNFLVNLLGTWSDTSTGGPARAYPVGGLCYFLSPPESFGSVLDDPIHAAIYIVFMLGS 371
+
+Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292
+              F          S   +A+++++    +            +N  +   A  G   +  
+Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMGGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430
+
+Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           +S +   +  +       L +++I   F IF+
+Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462
+
+
+>sp|P46249|SECY_CYACA Preprotein translocase subunit secY
+           OS=Cyanidium caldarium GN=secY PE=3 SV=2
+          Length = 410
+
+ Score =  193 bits (492), Expect = 1e-48,   Method: Composition-based stats.
+ Identities = 59/313 (18%), Positives = 134/313 (42%), Gaps = 16/313 (5%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERR------RMLLTLVIALIQSVA 54
+           S+F++G+ P++++ +  Q+ + +          E +  +         L+   A I+S+A
+Sbjct: 62  SVFALGIIPYINATITIQILSSAFPALKKLQSEEGEIGKKKLNKITKYLSFCFAFIESLA 121
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+           +VL L  Q+ A       +V  TL+L++G   ++WL D  +  G+G    +I+  ++ + 
+Sbjct: 122 IVLRL--QKYAFDWNLYFIVQTTLILISGAMLVMWLADNISYKGIGTGASVIIFVNIASA 179
+
+Query: 114 IPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI---HNRFKKY 170
+             + + N +    I  L  A      +  +   V V+ +  ++P+         + +   
+Sbjct: 180 FAKFLLNQLFVHSIKFLDFASYFALIVFSIACIVFVQEAIRKVPIISAKQLDSTSFYSND 239
+
+Query: 171 SYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFILY 230
+            +L +R+N  G MPI+ A +L+++  Y +               +I  +      + +LY
+Sbjct: 240 YFLPLRINQGGVMPIILASSLLALVDYVIRY----GLSTLQAVYFINDILPFKILFLLLY 295
+
+Query: 231 LLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYL 290
+              I      +  + ++  +++  ++K+   I ++ PG  T ++    +    L G+ +L
+Sbjct: 296 SAFIIFFNYLYCSLVLNCFELSNNLKKASVVIPSIRPGKMTEKFFKDTLDNLTLFGSGFL 355
+
+Query: 291 ILISGLPMMVVLV 303
+             I   P  +  V
+Sbjct: 356 AFIVLAPNFLEFV 368
+
+
+>sp|P32915|SC61A_YEAST Protein transport protein SEC61
+           OS=Saccharomyces cerevisiae GN=SEC61 PE=1 SV=1
+          Length = 480
+
+ Score =  193 bits (491), Expect = 2e-48,   Method: Composition-based stats.
+ Identities = 54/373 (14%), Positives = 124/373 (33%), Gaps = 74/373 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGL---SKLPLEVQERRRMLLTLVIALIQSVALVL 57
+           +L  +G+SP ++S +I+Q    ++ L +   SK   E+ +  + +  +++ L Q++ +V+
+Sbjct: 76  TLLELGVSPIITSSMIFQFLQGTQLLQIRPESKQDRELFQIAQKVCAIILILGQALVVVM 135
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMIA---- 112
+                  + + +    +L    LM  +  ++ L +L +   GLG  I +  A+ IA    
+Sbjct: 136 TGNYGAPSDLGLPIC-LLLIFQLMFASLIVMLLDELLSKGYGLGSGISLFTATNIAEQIF 194
+
+Query: 113 -------YIPQDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143
+                   +        +   I+   L  +                      ++ ++   
+Sbjct: 195 WRAFAPTTVNSGRGKEFEGAVIAFFHLLAVRKDKKRALVEAFYRTNLPNMFQVLMTVAIF 254
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+              + ++  +Y +P+    +  +   Y    I+L      PIM    L S       I+ 
+Sbjct: 255 LFVLYLQGFRYELPIRSTKVRGQIGIY---PIKLFYTSNTPIMLQSALTSNIFLISQILF 311
+
+Query: 204 FLQPENQLIE-------------------QWIEALSM------------GSPAWFILYLL 232
+              P N LI                         +               +  +    L 
+Sbjct: 312 QKYPTNPLIRLIGVWGIRPGTQGPQMALSGLAYYIQPLMSLSEALLDPIKTIVYITFVLG 371
+
+Query: 233 TIFILALAFAFIN-ISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLI 291
+           +  + +  +  I+  S   IA++ +  G  I       +  R +  ++   A  G   + 
+Sbjct: 372 SCAVFSKTWIEISGTSPRDIAKQFKDQGMVINGKRET-SIYRELKKIIPTAAAFGGATIG 430
+
+Query: 292 LISGLPMMVVLVD 304
+            +S    ++  + 
+Sbjct: 431 ALSVGSDLLGTLG 443
+
+
+>sp|Q25147|SC61A_HALRO Protein transport protein Sec61 subunit alpha
+           OS=Halocynthia roretzi PE=2 SV=1
+          Length = 475
+
+ Score =  192 bits (488), Expect = 4e-48,   Method: Composition-based stats.
+ Identities = 59/391 (15%), Positives = 131/391 (33%), Gaps = 74/391 (18%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58
+           +L  +G++P ++S LI Q+ A +K + +   P +       + L  ++I + Q+V  V+ 
+Sbjct: 75  TLMELGITPIVTSGLIMQLLAGAKLIEVGDTPKDRALFNGAQKLFGMIITIGQAVVYVMT 134
+
+Query: 59  LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASMI------- 111
+               + + +     +++   + +A    L+    L    GLG  I + +A+ I       
+Sbjct: 135 GMYGDPSDMGAGICLLIIIQLFIASLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194
+
+Query: 112 ----AYIPQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145
+               A +        +   I+   L                         L  +++   +
+Sbjct: 195 SFSPATVNTGRGTEFEGAVIALFHLLATRSDKVRALREAFYRPNLPNLMNLSATILVFGI 254
+
+Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205
+            +  +  +  +P+          +YS   I+L     +PI+    LVS       ++   
+Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYSSYPIKLFYTSNIPIILQSALVSGLYVISQMLAIR 311
+
+Query: 206 QPENQLIEQ-------------------WIEALSMGSPAWFI-------LYLLTIFILAL 239
+              N  I                         LS     + +       L  +T  + + 
+Sbjct: 312 FRGNFFIGLLGVWEDVEGGGPARSYPVALCYYLSPPESFFSMFLDPIHGLLYITFMLGSC 371
+
+Query: 240 AF---AFINIS---GDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILI 293
+           AF    +I +S      +A+++++    +       +    +N  +   A  G   +  +
+Sbjct: 372 AFFSKTWIEVSGSAAKDVAKQLKEQQMVMRGHRE-KSMIHELNRYIPTAAAFGGLCIGAL 430
+
+Query: 294 SGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321
+           S L   +  +       L +++I   F IF+
+Sbjct: 431 SVLADFIGAIGSGTGILLAVTIIYQYFEIFV 461
+
+
+>sp|O26134|SECY_METTH Preprotein translocase subunit secY
+           OS=Methanobacterium thermoautotrophicum GN=secY PE=3
+           SV=1
+          Length = 456
+
+ Score =  191 bits (486), Expect = 5e-48,   Method: Composition-based stats.
+ Identities = 52/345 (15%), Positives = 118/345 (34%), Gaps = 51/345 (14%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57
+           S+ ++G+ P +S+ +I Q+    K L L     E +   +  + LL +V    +++  VL
+Sbjct: 73  SILTLGIGPIVSASIILQLLVGGKILKLDLSRHEDKAFFQGLQKLLAIVFTFFEALIFVL 132
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASMIA----- 112
+              L  +A       + +  L L  G   +I+L ++ +  G G  + + +A+ ++     
+Sbjct: 133 TGSLAPSA----PQFVWVLILQLTIGGILIIFLDEVVSKWGFGSGVGLFIAAGVSQEIIV 188
+
+Query: 113 -----------------YIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYR 155
+                             I   ++           +  L ++  +    + V  E  +  
+Sbjct: 189 GAFNPLSAPTQPGVPAGRITGFLYLLFTGQSPDFQYYVLPVLALIAVFLVVVYAESMRVE 248
+
+Query: 156 IPVNK-INIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQ-------P 207
+           IP++                +R   A  MP++    L+   Q    +   L         
+Sbjct: 249 IPISMGGGKRLSRGAVGKYPLRFIYASNMPVILTSALLLNVQLLANVFQKLGYPILGTVS 308
+
+Query: 208 ENQLIEQWIEALSMGS--------PAWFILYLLTIFILALAFAFI-----NISGDQIAER 254
+             Q ++     L+           P   + Y +    L + FA++     NI    +A +
+Sbjct: 309 NGQAVDGLAYLLTAPRSIDALILDPFRVVFYAVVFIGLCVLFAWLWVEISNIGPRHVARQ 368
+
+Query: 255 MQKSGEYIENVYPGG-ATRRYINGLVTYFALVGAFYLILISGLPM 298
+           + + G  I           + +   +    ++G  ++ L++ +  
+Sbjct: 369 LYQMGMQIPGFRSSRGQFEKILKRYIPTITILGGAFVGLLAFVAD 413
+
+
+>sp|P38379|SC61A_PYRSA Protein transport protein Sec61 subunit alpha
+           OS=Pyrenomonas salina PE=2 SV=1
+          Length = 494
+
+ Score =  188 bits (478), Expect = 5e-47,   Method: Composition-based stats.
+ Identities = 62/374 (16%), Positives = 132/374 (35%), Gaps = 74/374 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57
+           +L  +G+SP ++S L+ Q+ A SK + + +   E +   +  + LL ++I + +SVA VL
+Sbjct: 78  TLMELGISPIVTSGLVMQLLAGSKIIDVDQGTKEDKTLFQGAQKLLGILITIGESVAYVL 137
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMI----- 111
+           +    +   +      +L  + L      +I L +L     G+G +I + +A+ +     
+Sbjct: 138 SGMYGDVKDLGAGN-AILIIVQLFTSGIIVICLDELLQKGYGIGSAISLFIATNVCESIV 196
+
+Query: 112 ------AYIPQDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143
+                   I        +   ++   L +                       L+ +++  
+Sbjct: 197 WKSFSPTTINTGRGTEFEGALVALFQLMITKTDKVRALQEAFYRQNLPNVTNLLATVLVF 256
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+            L V  +  +  +P+          ++    I+L     MPI+    LVS   +   I++
+Sbjct: 257 VLVVYFQGFQVELPITPAKSKGMAGQF--YPIKLFYTSNMPIILQTALVSNLYFISQILY 314
+
+Query: 204 FLQPENQLI--------------------EQWIEALSMGSPAWFIL------YLLTIFIL 237
+              PEN +I                          +S  +    I+       L  IFIL
+Sbjct: 315 KRYPENIIIHILGRWEEPEMSVSGQMRPVGGIAYYISPLNSFAEIVSDPVHALLYIIFIL 374
+
+Query: 238 ALAFAFIN-------ISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYL 290
+           A    F          S   ++++++     ++      + +R +N  +   A  G   +
+Sbjct: 375 ASCALFSKTWIQVSGTSASDVSKQLRDQQMVMKGFRAS-SMQRELNRYIPTAAAFGGMCI 433
+
+Query: 291 ILISGLPMMVVLVD 304
+             +S +   +  + 
+Sbjct: 434 GALSIVADFMGAIG 447
+
+
+>sp|Q37143|SECY_ANTSP Preprotein translocase subunit secY
+           OS=Antithamnion sp. GN=secY PE=3 SV=1
+          Length = 405
+
+ Score =  184 bits (467), Expect = 8e-46,   Method: Composition-based stats.
+ Identities = 61/315 (19%), Positives = 141/315 (44%), Gaps = 24/315 (7%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54
+            +F++G+ P++ + +I Q+         +    E +  R+        LTL+ ALIQS++
+Sbjct: 62  GIFALGIVPYIYASIIIQLLIKLIPYLENLQKEEGEIGRQKINQLTRYLTLLWALIQSLS 121
+
+Query: 55  LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113
+           + + +             +      L   +   +W +++ +  G+G    +++  ++I+ 
+Sbjct: 122 IAIWINHM------YLIHLFELCASLTTSSMIAMWFSEIISEYGVGNGPSLLIFQNIISS 175
+
+Query: 114 IPQDIWNSIQELKISSLWL--ALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYS 171
+           IP+++ N    +  ++  L  +L+L F ++ L + + ++  + +I +       +  + +
+Sbjct: 176 IPKNLQNYTFNIGTTNTVLNGSLILSFGIIILIINILIQEGERKIAILSAKQLGKINELN 235
+
+Query: 172 Y---LDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFI 228
+           +     ++LN  G MP ++A  +V         +      N  I Q+I         +  
+Sbjct: 236 HKVIFLLKLNQGGVMPFVFASAVV------HTFLFISNNTNSKITQFINLFLPNQFLYLP 289
+
+Query: 229 LYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAF 288
+           LYL+ I   +  +  + ++ + IA+ ++K G  I N+ PG  T +Y+N  +    L+GA 
+Sbjct: 290 LYLIFIITFSYVYTSLILNPEDIAKNLKKMGASIPNIRPGSETIKYLNTRINRLTLIGAC 349
+
+Query: 289 YLILISGLPMMVVLV 303
+           +L  I+  P +   +
+Sbjct: 350 FLFTITLFPTITYYI 364
+
+
+>sp|Q60175|SECY_METJA Preprotein translocase subunit secY
+           OS=Methanocaldococcus jannaschii GN=secY PE=1 SV=2
+          Length = 436
+
+ Score =  183 bits (466), Expect = 1e-45,   Method: Composition-based stats.
+ Identities = 48/338 (14%), Positives = 127/338 (37%), Gaps = 41/338 (12%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57
+           +L ++G+ P +++ +I Q+   S  + +     E +   +  + LL++++  +++V  V 
+Sbjct: 69  TLITLGIGPIVTAGIIMQLLVGSGIIQMDLSIPENRALFQGCQKLLSIIMCFVEAVLFVG 128
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMASMIAYI-- 114
+                    +    +  L  + +  G+  LI+L ++ +  G+G  I + + A +   I  
+Sbjct: 129 AGAFG----ILTPLLAFLVIIQIAFGSIILIYLDEIVSKYGIGSGIGLFIAAGVSQTIFV 184
+
+Query: 115 -----PQDIWNSIQELKISSLWLALM--LVFSLVFLYLAVTVERSKYRIPVNKINIHNRF 167
+                   +W  +  L      +  +  ++ +++   + V  E  +  IP+    I    
+Sbjct: 185 GALGPEGYLWKFLNSLIQGVPNIEYIAPIIGTIIVFLMVVYAECMRVEIPLAHGRIKGAV 244
+
+Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH-------FLQPENQLIEQWIEALS 220
+            KY    I+      +P++ A  L +  Q + L ++             + ++     LS
+Sbjct: 245 GKY---PIKFVYVSNIPVILAAALFANIQLWGLALYRMGIPILGHYEGGRAVDGIAYYLS 301
+
+Query: 221 MG--------SPAWFILYLLTIFILALAFAFI-----NISGDQIAERMQKSGEYIENVYP 267
+                      P   I+Y++ + I  + F         +    +A+R+   G  I+    
+Sbjct: 302 TPYGLSSVISDPIHAIVYMIAMIITCVMFGIFWVETTGLDPKSMAKRIGSLGMAIKGFRK 361
+
+Query: 268 G-GATRRYINGLVTYFALVGAFYLILISGLPMMVVLVD 304
+              A    +   +    ++ + ++  ++ +   +  + 
+Sbjct: 362 SEKAIEHRLKRYIPPLTVMSSAFVGFLATIANFIGALG 399
+
+
+>sp|P28540|SECY_PAVLU Preprotein translocase subunit secY OS=Pavlova
+           lutherii GN=secY PE=3 SV=2
+          Length = 419
+
+ Score =  179 bits (455), Expect = 3e-44,   Method: Composition-based stats.
+ Identities = 67/337 (19%), Positives = 146/337 (43%), Gaps = 23/337 (6%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQE-------RRRMLLTLVIALIQSV 53
+           S+ ++GL P+ S+ L  Q   V       KL  E  E       R   +LT++  +I+S 
+Sbjct: 66  SILTLGLGPFFSASLAVQFL-VKLYPAFEKLQNEEGEEGRKTIVRYTRILTVLFCIIESF 124
+
+Query: 54  ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMASMIA 112
+            L  +L  +       +    +    +  G+  L+WL+++    G+G    ++++   ++
+Sbjct: 125 FLSNSL--RSFVFNWNSISYFVVAAAVTTGSLVLVWLSEVITERGIGNGSSLLILIGNLS 182
+
+Query: 113 YIPQDI----WNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRF- 167
+                I    ++S+     S+L++  +++  +  L  +   +    +IPV          
+Sbjct: 183 RFRFLINKDDFDSLNVSSQSNLYIIYIIITLVSMLIFSTLSQEGARKIPVVSAKQLIDGV 242
+
+Query: 168 ---KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSP 224
+               + SY+ IR   AG +PI+++ +++         I  L   N      ++++++   
+Sbjct: 243 EDDMRRSYIPIRFGQAGVVPIIFSSSILLF---LTTSIKQLPNANIATRVILDSVNLQQI 299
+
+Query: 225 AWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFAL 284
+            +F  +L+ I   +  +  I +S   IA+ ++K    I++  PG AT+ YI   +   + 
+Sbjct: 300 FYFFTFLVLIIFFSFFYTLIILSPSDIAKNLKKMSSVIQDTKPGVATKVYIRKFILQASF 359
+
+Query: 285 VGAFYLILISGLPMMV-VLVDIRYLRLSMIPGIFMIF 320
+           VG+  L  +  +P ++   + +  L +S I  + + F
+Sbjct: 360 VGSILLSALILIPSILAAALGVHPLSISGITSLILSF 396
+
+
+>sp|P79088|SC61A_SCHPO Protein transport protein sec61 subunit alpha
+           OS=Schizosaccharomyces pombe GN=sec61 PE=2 SV=1
+          Length = 479
+
+ Score =  178 bits (452), Expect = 5e-44,   Method: Composition-based stats.
+ Identities = 49/371 (13%), Positives = 118/371 (31%), Gaps = 71/371 (19%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57
+           +L  +G+SP ++S ++ Q+   S+ + ++      +E  +     L ++IA  Q+ A VL
+Sbjct: 76  TLMELGISPIVTSSMLVQLLVGSQLIEVNMELKSDREMYQLVQKFLAIIIAFGQATAYVL 135
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASM------- 110
+                    +     ++L   +  A    L+    L    GLG  I + +A++       
+Sbjct: 136 TGMYGRPQDLGAGICLLLILQLAAASLIVLLLDELLQKGYGLGSGISLFIATINCENIFW 195
+
+Query: 111 IAYIPQDI----WNSIQELKISSLWLALM-----------------------------LV 137
+            A+ P           +   I+ +++                                  
+Sbjct: 196 KAFSPTTYHIANGVQFEGAVINFVYVMFTWDNKAAALYQAFFRSGLTSSQIQLPNLWNFF 255
+
+Query: 138 FSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQY 197
+            +L+   + + ++  +  IP+           +    ++L      PIM    L S   +
+Sbjct: 256 ATLLVFGVVIYLQDFRVEIPIRSQKFRGYRSTF---PVKLLYTSNTPIMLQSALTSNLFF 312
+
+Query: 198 FLLIIHFLQPENQLIE-----------QWIEALSMGSPAWFILY-----LLTIFILALAF 241
+              ++      N L+                 LS  +     L      L+ +F    A 
+Sbjct: 313 ASRLLFNRFSSNFLVRFLGVWEQTATSGLSYYLSPPASFQDALIDPIHTLVYVFFTMFAC 372
+
+Query: 242 AFIN--------ISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILI 293
+           A  +         S   +A++++     +     G +  + +  ++   A +    +  +
+Sbjct: 373 ALFSKLWIEVSGASPRDVAKQLKSQQLVMAGHREG-SMYKELKRIIPTAAWLSGAVVGAL 431
+
+Query: 294 SGLPMMVVLVD 304
+           +    ++  + 
+Sbjct: 432 AVASDLLGALG 442
+
+
+>sp|P28541|SECY_METVA Preprotein translocase subunit secY
+           OS=Methanococcus vannielii GN=secY PE=3 SV=1
+          Length = 438
+
+ Score =  174 bits (443), Expect = 6e-43,   Method: Composition-based stats.
+ Identities = 49/340 (14%), Positives = 121/340 (35%), Gaps = 43/340 (12%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57
+           +L ++G+ P +++ +I Q+   S+ + L       +   +  + L  + +  +++V  V 
+Sbjct: 68  TLITLGIGPIVTAGIIMQLLVGSELISLDLSKPMNRALFQGLQKLFGIFLCFLEAVMFVG 127
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMASMIAYI-- 114
+                    V  +T+ ++  L L  G   +I+L ++ +  G+G  I + + A +   I  
+Sbjct: 128 AGAFG----VVNSTLALILVLQLALGAILVIYLDEIVSRYGIGSGIGLFIAAGVAQTIFV 183
+
+Query: 115 -----PQDIWNSIQELKISSLWL----ALMLVFSLVFLYLAVTVERSKYRIPVNKINIHN 165
+                   +W     + + SL +     L ++ +L    + V VE  +  IP+    +  
+Sbjct: 184 GAFGAEGYLWKFFSAMSVGSLGIAFEYILPILSTLFVFLVVVYVESIRVEIPLAHGRVKG 243
+
+Query: 166 RFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH-------FLQPENQLIEQWIEA 218
+              KY    I+      +P++ A  L +  Q + + +                +      
+Sbjct: 244 AVGKY---PIKFIYVSNLPVILAAALFANIQLWGMFLDRMGYPILGQYSNGTAVSGIAYY 300
+
+Query: 219 LSMG--------SPAWFILYLLTIFILALAFAFI-----NISGDQIAERMQKSGEYIENV 265
+            S           P   I Y L + I  + F         +    +A+++      I+  
+Sbjct: 301 FSTPYGISNIISDPLHAIFYTLMMVIFCILFGLFWVETSGLDAKSMAKKLGNLDMAIKGF 360
+
+Query: 266 YPG-GATRRYINGLVTYFALVGAFYLILISGLPMMVVLVD 304
+                +  + +   +    ++G+ ++  ++        + 
+Sbjct: 361 RKSQKSIEQRLKRYIKPITVMGSAFVGFLAAAADFTGALG 400
+
+
+>sp|Q9YDD0|SECY_AERPE Preprotein translocase subunit secY
+           OS=Aeropyrum pernix GN=secY PE=3 SV=2
+          Length = 457
+
+ Score =  171 bits (435), Expect = 5e-42,   Method: Composition-based stats.
+ Identities = 47/348 (13%), Positives = 120/348 (34%), Gaps = 47/348 (13%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER---RRMLLTLVIALIQSVALVL 57
+           +L  +G+ P +++ LI Q+   +K + L     E + +    + +L L  A +++VA  +
+Sbjct: 73  TLMELGIGPIVTASLIIQVLVGAKIIKLDLADPEGRRKFTSAQKVLALAFAALEAVAFTV 132
+
+Query: 58  NLPL-QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGG-SIMIVMASMIAYI 114
+                   A         L +L L  G   +I+  ++     G+G    + ++A +   +
+Sbjct: 133 GGRYWVGTAIEPGPLDYALVSLQLFLGALLVIYFDEVMQKGWGIGSAISLFILAGVAQGV 192
+
+Query: 115 PQDIWNSIQELKISSLWLALML--------------------VFSLVFLYLAVTVERSKY 154
+              I+ +I  +      +  ++                      +L  + L V ++  + 
+Sbjct: 193 VWSIFGTIPGVAQDYGLVPAIISNPDLTLLARPNGFPDLTGFFTTLAAIILLVYLQAMRV 252
+
+Query: 155 RIPVNKINIHNRFKKYSYLDIRLNPAGGMPI----MYAMTLVSIPQYFLLIIHFLQPENQ 210
+            IP+            S + ++      +PI    +    L+ + +     +       Q
+Sbjct: 253 EIPITSER---FKGIRSRVPLQFIYVTNIPILLVGILVSDLLLVQRLLADYLGVESRAYQ 309
+
+Query: 211 LIEQWIEALSMGS--------PAWFILYLLTIFILALAFAFI-----NISGDQIAERMQK 257
+           +    +  LS           P    +++ +  +L++ F ++      ++  + AER+ K
+Sbjct: 310 IYSSIVYYLSPPRGVVQSIADPVKTAVFIASWTVLSIVFGYMWVEIAGLNPREQAERLIK 369
+
+Query: 258 SGEYIENVYPGGAT-RRYINGLVTYFALVGAFYLILISGLPMMVVLVD 304
+            G  I  +        R +   +     + +  +  +  +  +     
+Sbjct: 370 GGLAIPGMRSDPRVLERVLRRYIYPLTFLSSLIVAALVIVADIFGAYG 417
+
+
+>sp|O28377|SECY_ARCFU Preprotein translocase subunit secY
+           OS=Archaeoglobus fulgidus GN=secY PE=3 SV=1
+          Length = 493
+
+ Score =  171 bits (434), Expect = 7e-42,   Method: Composition-based stats.
+ Identities = 44/383 (11%), Positives = 123/383 (32%), Gaps = 82/383 (21%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERR---RMLLTLVIALIQSVALVL 57
+           S+ ++G+ P +++ +I Q+   +  + L     E +      +  L  V+  ++++  + 
+Sbjct: 73  SIIALGIGPIVTASIILQLLVGAGIIKLDLTNPEDRAAYQDFQRFLVFVMIAVEAIPQIA 132
+
+Query: 58  NL------PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110
+                    L    GV    I  L  + L  G   ++++ ++ +  G+G    + ++A +
+Sbjct: 133 GGLLKPDLNLAAQLGVSPGIISFLIFIQLFIGGVLIVYMDEVVSKWGIGSGVSLFILAGI 192
+
+Query: 111 IAYIPQDIW----------------------------NSIQELKISSLWLALMLVFSL-- 140
+              I   ++                                   ++ L +   ++  +  
+Sbjct: 193 AQSIVVGLFNWVIPPNSAMPAGIIPRWIWIAQNYPLDQLFTGSGLAFLLIQGGILALITT 252
+
+Query: 141 -VFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFL 199
+              + L V  E ++  IP+          ++    I+L  A  +P+++   L +      
+Sbjct: 253 AAIILLVVFFEGTRVEIPLAHAVARGARGRF---PIKLIYASVLPMIFVRALQANVVALG 309
+
+Query: 200 LII-------HFLQPENQLIEQWIEALSM----------------------GSPAWFILY 230
+            ++              + +   +  L                             ++  
+Sbjct: 310 QVLHARGVTIFGEFVNGKAVSGLMFFLQPVSSPYDWIPSLVKSQGAAFAAIPDWMIYLHL 369
+
+Query: 231 LLTIFILALA---FAFI-----NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTY 281
+           L+   IL +    FA+       +    +A ++ KSG  +           R ++  +  
+Sbjct: 370 LIDALILVVGGIIFAWFWVETSGMDARTVASQIAKSGMQVPGFRKSPQVLERVLSRYIPK 429
+
+Query: 282 FALVGAFYLILISGLPMMVVLVD 304
+             ++G   + +++ +  M+  + 
+Sbjct: 430 VTILGGAIIGILTLVANMLGTIG 452
+
+
+>sp|P28542|SECY_HALMA Preprotein translocase subunit secY
+           OS=Haloarcula marismortui GN=secY PE=3 SV=2
+          Length = 487
+
+ Score =  165 bits (419), Expect = 3e-40,   Method: Composition-based stats.
+ Identities = 51/380 (13%), Positives = 129/380 (33%), Gaps = 79/380 (20%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ----ERRRMLLTLVIALIQSVALV 56
+           S+  +G+ P +++ ++ Q+   +  LGL+           +  + LL LV+  +  + +V
+Sbjct: 73  SIMQLGIGPIVTASIVLQLLGGADLLGLNTQDDPRDQILYQGLQKLLVLVMICLTGLPMV 132
+
+Query: 57  LNLPLQEA-------AGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMA 108
+                  A        G+    +  L    +  G   ++++ ++ +  G+G  I + ++A
+Sbjct: 133 FAGGFLPADTAVANSLGIGTAGVQWLIFAQMFVGGVLILFMDEVISKWGVGSGIGLFIVA 192
+
+Query: 109 SMIAYI------PQDIWNSIQELKISSLWL-----------------------ALMLVFS 139
+            +   +         + NS   +    L++                        L L  +
+Sbjct: 193 GVSQRLVGGLLTAPFLGNSEGIIYTWYLFITGERGTGPVLAADGLQTVLLQGELLGLFTT 252
+
+Query: 140 LVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFL 199
+           ++   + V  E  +  IP++   +     ++    ++L  A  +P++    L +  Q+  
+Sbjct: 253 VLIFAVVVYAESVRVEIPLSNARVKGARGRF---PVKLIYASVLPMILVRALQANIQFLG 309
+
+Query: 200 LIIH--------------FLQPENQLIEQWIEALSMGSPAWFI---------------LY 230
+            I++                QP   L        S G   W++               + 
+Sbjct: 310 RILNAQLGSMPAFLGTYANGQPTGGLFYFLAPIQSRGDWMWWLEGTAQPVWQILTRVGID 369
+
+Query: 231 LLTIFILALAFAFI-----NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTYFAL 284
+           L  + +    FA       ++  +  A+++  SG  I           + +   +    +
+Sbjct: 370 LFVMLVGGAVFAVFWVETTDMGPEATAKQIHNSGMQIPGFRQNVGVIEKVLERYIPQVTV 429
+
+Query: 285 VGAFYLILISGLPMMVVLVD 304
+           +G   + L++ +  M+  + 
+Sbjct: 430 IGGALVGLLAVMANMLGTIG 449
+
+
+>sp|Q9HPB1|SECY_HALSA Preprotein translocase subunit secY
+           OS=Halobacterium salinarium GN=secY PE=3 SV=1
+          Length = 491
+
+ Score =  162 bits (410), Expect = 4e-39,   Method: Composition-based stats.
+ Identities = 48/383 (12%), Positives = 123/383 (32%), Gaps = 83/383 (21%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQE----RRRMLLTLVIALIQSVALV 56
+           ++  +G+ P +++ ++ Q+   +  LGL        +      +  L  V+ ++    +V
+Sbjct: 72  TVLQLGIGPIVTASIVLQLLGGANLLGLDTDNDPRDQAIYQGLQKFLVGVMVVLTGAPMV 131
+
+Query: 57  LNLPLQEAAGV-------DMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMI---- 105
+                 + +             + VL    + AG   L+++ ++ +  G+G  I +    
+Sbjct: 132 FLGNFLQPSQQLAQSMPGGAFGVEVLIFAQIAAGGILLLFMDEVISKWGVGSGIGLFIVA 191
+
+Query: 106 ----------------------------VMASMIAYIPQDIWNSIQELKISSLWLALMLV 137
+                                       ++   ++ +P  +  S  E  +    +   L+
+Sbjct: 192 GVSQSLVGGLVFWEGGVGSQGLLPTWFDIIVGNVSNMPPLLSGSGIEFLLMQAGILG-LL 250
+
+Query: 138 FSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQY 197
+            +L    + V  E  +  IP++   +     ++    ++L  A  +P++    L +  Q+
+Sbjct: 251 TTLFIYVVVVYAESVRVEIPLSHARVKGARGRF---PVKLIYASVLPMILVRALQANIQF 307
+
+Query: 198 FLL-----------IIHFLQPENQLIEQWIEAL----SMGSPAWFI-------LYLLTIF 235
+                          +       Q+       L    S  +  W+          +L   
+Sbjct: 308 LGQILNSTLASMPTWLGVYGGNGQVTGGLFYYLAPIYSPNAWMWWTSGATAARWQVLIRI 367
+
+Query: 236 ILALAFAFI-------------NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTY 281
+            + L+F  I             ++  D  A ++Q SG  I           + +   +  
+Sbjct: 368 AIDLSFMIIGGAIFAIFWVETADMGPDATARQIQNSGMQIPGFRKNQGVIEKVMERYIPQ 427
+
+Query: 282 FALVGAFYLILISGLPMMVVLVD 304
+             ++G   + L++ +  M+  + 
+Sbjct: 428 VTVIGGALVGLLAVMANMLGTIG 450
+
+
+>sp|Q977V3|SECY_HALVO Preprotein translocase subunit secY
+           OS=Halobacterium volcanii GN=secY PE=3 SV=1
+          Length = 488
+
+ Score =  156 bits (395), Expect = 2e-37,   Method: Composition-based stats.
+ Identities = 45/380 (11%), Positives = 124/380 (32%), Gaps = 79/380 (20%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ----ERRRMLLTLVIALIQSVALV 56
+           S+  +G+ P +++ ++ Q+   +  LGL            +  + LL  V+  +  + +V
+Sbjct: 73  SVLQLGIGPIVTASIVLQLLGGADLLGLDTDNNPRDQVLYQGLQKLLVGVMICLTGLPMV 132
+
+Query: 57  LNLPLQEA-------AGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMA 108
+                  A        G+    +  L    +  G   ++++ ++ +  G+G  + + ++A
+Sbjct: 133 FAGNFLPADQAVATSLGIGTVGVKGLIFAQIAVGGVLILFMDEIVSKWGVGSGVGLFIIA 192
+
+Query: 109 SMIAYI------------PQDIWNSIQELKISSLWLALM---LVFSLVF----------- 142
+            +   +                + +   +   ++ L      L+ ++             
+Sbjct: 193 GVSQQLVGGLFSWQGLGGTSGFFATWIGIITGAIELPASPTDLLSTVFLGQGQLLALITT 252
+
+Query: 143 ---LYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFL 199
+                + V  E  +  IP++   +     ++    ++L  A  +P++    L +  Q+  
+Sbjct: 253 LLIFGIVVYAESVRVEIPLSHARVKGARGRF---PVKLIYASVLPMILVRALQANIQFLG 309
+
+Query: 200 LIIHFLQP----------ENQLIEQWIEALSM----GSPAWF---------------ILY 230
+             ++                Q+    +  L+         WF               ++ 
+Sbjct: 310 RFLNSSWVGMPAWLGQYTSGQVTGGLLYYLAPIQSRSDWMWFLGLTSADPLDIAIRVLID 369
+
+Query: 231 LLTIFILALAFAFI-----NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTYFAL 284
+           L+ + +    FA        +     A+++Q SG  I           R +   +    +
+Sbjct: 370 LIFMIVGGAVFAIFWVETTGMGPKSTAQQIQNSGMQIPGFRRNPQVIERVMERYIPQVTV 429
+
+Query: 285 VGAFYLILISGLPMMVVLVD 304
+           +G   + L++ +  M+  + 
+Sbjct: 430 IGGALVGLLAVMANMLGTIG 449
+
+
+>sp|P49978|SECY_SULAC Preprotein translocase subunit secY
+           OS=Sulfolobus acidocaldarius GN=secY PE=3 SV=1
+          Length = 463
+
+ Score =  140 bits (353), Expect = 2e-32,   Method: Composition-based stats.
+ Identities = 46/357 (12%), Positives = 113/357 (31%), Gaps = 57/357 (15%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRMLLTLVIALIQSVALVLNLP 60
+           +L  +G+ P ++S LI Q+   SK + +     E + +        +ALI  +       
+Sbjct: 74  TLAQLGIGPVITSGLIMQILVGSKLINVDLTTQEGKSKFTQ-AEKALALIFIIVESSLFG 132
+
+Query: 61  LQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGS-IMIVMASM-------- 110
+                      + ++  + L+  +Y ++ L ++     GLG    + +MA +        
+Sbjct: 133 YVFTRATSNILLPIIVVVQLIIASYIILLLDEMIQKGWGLGSGVSLFIMAGIMKVIFWNM 192
+
+Query: 111 ------------IAYIPQDIWNSIQELKISSLWL-----------ALMLVFSLVFLYLAV 147
+                       + + P  +        +  + L            + L+ ++    L V
+Sbjct: 193 FGIVSVQSQNLPVGFFPLLVSYITSGRNLQEIVLNTSSTTPYQPDLIGLIATVGLTILIV 252
+
+Query: 148 TVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHF-LQ 206
+            +  +   IPV    +       + + +       +P+++   L +  Q F  + +    
+Sbjct: 253 YLVNTNIYIPVTTQRLRGIR---TTVPLNFLYVSSIPVIFVSVLGADIQLFASLANSISN 309
+
+Query: 207 PENQLIEQWIEALSMG-------------SPAWFILYLLTIFILALAFAFI-----NISG 248
+             + ++     A                  P    +Y     +L++ F  +      +  
+Sbjct: 310 SASGILTDIANAFFFPPQGVPHSVYALVVDPVGAAIYAAVFIVLSIVFGMLWIDVAGLDP 369
+
+Query: 249 DQIAERMQKSGEYIENVYPGGA-TRRYINGLVTYFALVGAFYLILISGLPMMVVLVD 304
+              AE+M +SG  I  +          ++  +       +  + LI+ +   +    
+Sbjct: 370 KTQAEQMIRSGIEIPGMRTNPRIIEGILSKYIYALGFFSSLIVGLIAVVATFLGTYG 426
+
+
+>sp|Q9UX84|SECY_SULSO Preprotein translocase subunit secY
+           OS=Sulfolobus solfataricus GN=secY PE=3 SV=1
+          Length = 469
+
+ Score =  131 bits (329), Expect = 9e-30,   Method: Composition-based stats.
+ Identities = 49/363 (13%), Positives = 118/363 (32%), Gaps = 62/363 (17%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER---RRMLLTLVIALIQSVALVL 57
+           +L  +G+ P +++ LI Q+ A SK + +     + + +    +  L  +  L++S     
+Sbjct: 73  TLAQLGIGPIITAGLIMQILAGSKLISIDLNDPDDRVKFTEAQKGLAFIFILVESALFGY 132
+
+Query: 58  NLPLQEAAGVDMTTIMV-LDTLVLMAGTYFLIWLTDLNAA-MGLGGS-IMIVMASM---- 110
+            L             +  +    L+  TY ++ L +L     GLG    + ++A +    
+Sbjct: 133 VLARTSTTINASILFIAGIVIAQLIVATYLILLLDELIQKGWGLGSGVSLFILAGVMKIM 192
+
+Query: 111 ----------------IAYIPQDIWNSIQELKISSLWL-----------ALMLVFSLVFL 143
+                           I + P           + +L +            + LV ++  +
+Sbjct: 193 FWDMFGIASVSSQNLPIGFFPALFTALASHSDVLNLIVNTSTKNLFQPDLVGLVTTIALI 252
+
+Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203
+            + + +      IPV    +    +    + +       +P+++   L S  Q F  +  
+Sbjct: 253 IITIYLTTMTIEIPVTSQKLRGIRRT---IPLNFLYVSSIPVIFVAVLGSDIQLFASLAS 309
+
+Query: 204 FLQPENQLIEQWI---------EALSMGSPAWFIL-------YLLTIFILALAFAFI--- 244
+           ++ P    I   +          +    S    +L       Y +   +L++ F  +   
+Sbjct: 310 YVSPSASNILNTVSGVFFFPPPNSAIPHSIYAVVLDPLGALEYAVVFIVLSILFGILWVD 369
+
+Query: 245 --NISGDQIAERMQKSGEYIENVYPG-GATRRYINGLVTYFALVGAFYLILISGLPMMVV 301
+              +     A+++ ++G  I  V          +   +   A   +  + LI+    ++ 
+Sbjct: 370 VAGLDPATQAQQLVEAGIEIPGVRNNPKIIEGILARYIYPLAFFSSIIVGLIAVFATLLG 429
+
+Query: 302 LVD 304
+              
+Sbjct: 430 AYG 432
+
+
+>sp|P38353|SSH1_YEAST Sec sixty-one protein homolog OS=Saccharomyces
+           cerevisiae GN=SSH1 PE=1 SV=1
+          Length = 490
+
+ Score =  127 bits (321), Expect = 7e-29,   Method: Composition-based stats.
+ Identities = 60/376 (15%), Positives = 119/376 (31%), Gaps = 77/376 (20%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRMLLTLVIALIQSVALVLNLP 60
+           +L   GL P +SS LI Q+ A  K + ++   ++        LT V A++Q V L     
+Sbjct: 78  TLLEFGLFPNISSGLILQLLAGLKVIKVN-FKIQSDRELFQSLTKVFAIVQYVILTNIFI 136
+
+Query: 61  LQEAAGVDMTTIMV-LDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMIAY----- 113
+                G D++ + + L    L+    F   L ++     G     MI+   +IA      
+Sbjct: 137 FAGYFGDDLSVVQIGLINFQLVGAGIFTTLLAEVIDKGFGFSSGAMIINTVVIATNLVAD 196
+
+Query: 114 ----------------IPQDIWNSIQELKISSLWLALMLVFSL---------------VF 142
+                               + N IQ L+         ++ +                  
+Sbjct: 197 TFGVSQIKVGEDDQTEAQGALINLIQGLRSKHKTFIGGIISAFNRDYLPNLTTTIIVLAI 256
+
+Query: 143 LYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLII 202
+             +   ++  +  +P+           Y    I+L   G + ++++ T++     F  ++
+Sbjct: 257 AIIVCYLQSVRVELPIRSTRARGTNNVY---PIKLLYTGCLSVLFSYTILFYIHIFAFVL 313
+
+Query: 203 HFLQPENQLI--------------------EQWIEALSMGSPAW---------FILYLLT 233
+             L  +N+                         +  L+  +  +         FI Y   
+Sbjct: 314 IQLVAKNEPTHIICKIMGHYENANNLLAVPTFPLSLLAPPTSFFKGVTQQPLTFITYSAF 373
+
+Query: 234 IFILALAF-----AFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAF 288
+           I +  + F     A    S   +A   +  G  +          + +N ++   A+ GA 
+Sbjct: 374 ILVTGIWFADKWQAISGSSARDVALEFKDQGITLMG-RREQNVAKELNKVIPIAAVTGAS 432
+
+Query: 289 YLILISGLPMMVVLVD 304
+            L LI+ +   + L  
+Sbjct: 433 VLSLITVIGESLGLKG 448
+
+
+>sp|O42965|YGMH_SCHPO Uncharacterized protein C19G7.17
+           OS=Schizosaccharomyces pombe GN=SPBC19G7.17 PE=2 SV=2
+          Length = 475
+
+ Score =  117 bits (294), Expect = 1e-25,   Method: Composition-based stats.
+ Identities = 40/372 (10%), Positives = 127/372 (34%), Gaps = 77/372 (20%)
+
+Query: 1   SLFSVGLSPWMSSMLIWQMFAVSKRLGLS---KLPLEVQERRRMLLTLVIALIQSVALVL 57
+            L   GL+P   S  + Q+ A  K++ ++    +   + +  + +++ ++ LI +V  V 
+Sbjct: 76  GLMITGLAPIYLSSFLLQILASKKKIAVNFNLIIDRVLFQNAQKVVSALLYLILAVTYVS 135
+
+Query: 58  NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMI-----VMASM- 110
+           +      + + +    ++  L +       I+L ++     GLG   ++     ++ ++ 
+Sbjct: 136 SGYYGSFSDLGIFRF-IMLILQIFLPGIVCIYLCEIIEKGHGLGSGPVLLLGSHILGNIM 194
+
+Query: 111 ----------------------IAYIPQDIWNSIQE-------LKISSLWLALMLVFSLV 141
+                                 +     ++++   +       L  S     +  +  + 
+Sbjct: 195 WDVLSLHRYPVNESGDSQYQGALVGFAFNLFSFKNKFSSLRSILFRSEGLSFVQFLVCIA 254
+
+Query: 142 FLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLI 201
+                +     +  +P+    +    + +    ++L     +P++Y  +++S    F   
+Sbjct: 255 VFATFMYTLNIRIDVPIRSSRVRGVRQNF---PLKLLYTSVIPLIYFYSILSHLLVFAYA 311
+
+Query: 202 IHFLQPEN--------------------QLIEQWIEALSMG--------SPAWFILYLLT 233
+           ++ L P +                    QL+   +  L            P   ++Y +T
+Sbjct: 312 LYSLCPNSLITRLLVQYSPIDTFAEHKLQLVGGLVYFLYPPLGLSEALLHPVHTVIYTIT 371
+
+Query: 234 IFILALAFAFINIS-----GDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAF 288
+           +  + + F+ + ++        +    +++   I          + +  ++   A + AF
+Sbjct: 372 LICITIYFSLLWMNATAGGPRDVLLFFKENQLVIAGYREATML-KELEKIIPIAAKLSAF 430
+
+Query: 289 YLILISGLPMMV 300
+           ++ ++S +  + 
+Sbjct: 431 FVSILSVIAGIF 442
+
+
+>sp|P72179|SECY_PARDE Preprotein translocase subunit secY (Fragment)
+           OS=Paracoccus denitrificans GN=secY PE=3 SV=1
+          Length = 182
+
+ Score = 98.7 bits (245), Expect = 5e-20,   Method: Composition-based stats.
+ Identities = 21/113 (18%), Positives = 48/113 (42%), Gaps = 3/113 (2%)
+
+Query: 186 MYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFILYLLTIFILALAFAF-I 244
+           ++A +L+ +P               ++   +     G P + + +   I      + + +
+Sbjct: 1   IFASSLLLLPVTISTFSGNQ--TGPIMSTVLAYFGPGQPLYLLFFAAMIVFFTYFYTYNV 58
+
+Query: 245 NISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILISGLP 297
+           +   + +AE ++  G +I  + PG  T  Y+  +VT   ++G+ YL  +  LP
+Sbjct: 59  SFKTEDVAENLKNQGGFIPGIRPGKRTEDYLTYVVTRVLVIGSAYLAFVCLLP 111
+
+
+>sp|P28620|SECY_BACST Preprotein translocase subunit secY (Fragment)
+           OS=Bacillus stearothermophilus GN=secY PE=3 SV=1
+          Length = 99
+
+ Score = 74.0 bits (181), Expect = 1e-12,   Method: Composition-based stats.
+ Identities = 20/57 (35%), Positives = 35/57 (61%)
+
+Query: 247 SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILISGLPMMVVLV 303
+           + +Q+AE ++K G YI  + PG  T+ Y+  ++    LVG+ +L +I+ LP+  V V
+Sbjct: 1   NPEQMAENLKKQGGYIPGIRPGKNTQEYVTRILYRLTLVGSVFLAVIAVLPVFFVNV 57
+
+
+>sp|P0C6V7|R1AB_BEV Replicase polyprotein 1ab OS=Berne virus GN=rep
+            PE=1 SV=1
+          Length = 6857
+
+ Score = 34.4 bits (78), Expect = 1.0,   Method: Composition-based stats.
+ Identities = 12/102 (11%), Positives = 39/102 (38%), Gaps = 12/102 (11%)
+
+Query: 135  MLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSI 194
+             +   +V ++  + +   +  I +     ++ FK ++Y+  +L     + +++   +V +
+Sbjct: 3061 YVFVFIVVIFTVIFLILIRLYIVM-----YSYFKVFTYVVFKLLFVNIIMVLF---VVCL 3112
+
+Query: 195  PQYFLLIIHFLQPE----NQLIEQWIEALSMGSPAWFILYLL 232
+            P     ++  L          +           P +++L+ L
+Sbjct: 3113 PPLVPGVVFVLALWLCDSVMFLLYLAFLSLFILPWFYVLFFL 3154
+
+
+>sp|P0C6F3|R1A_BEV Replicase polyprotein 1a OS=Berne virus GN=1a PE=1
+            SV=1
+          Length = 4569
+
+ Score = 34.4 bits (78), Expect = 1.1,   Method: Composition-based stats.
+ Identities = 12/102 (11%), Positives = 39/102 (38%), Gaps = 12/102 (11%)
+
+Query: 135  MLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSI 194
+             +   +V ++  + +   +  I +     ++ FK ++Y+  +L     + +++   +V +
+Sbjct: 3061 YVFVFIVVIFTVIFLILIRLYIVM-----YSYFKVFTYVVFKLLFVNIIMVLF---VVCL 3112
+
+Query: 195  PQYFLLIIHFLQPE----NQLIEQWIEALSMGSPAWFILYLL 232
+            P     ++  L          +           P +++L+ L
+Sbjct: 3113 PPLVPGVVFVLALWLCDSVMFLLYLAFLSLFILPWFYVLFFL 3154
+
+
+>sp|Q49VR4|LTAS_STAS1 Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus saprophyticus subsp. saprophyticus
+           (strain ATCC 15305 / DSM 20229) GN=ltaS PE=3 SV=1
+          Length = 646
+
+ Score = 32.8 bits (74), Expect = 3.2,   Method: Composition-based stats.
+ Identities = 11/81 (13%), Positives = 25/81 (30%), Gaps = 1/81 (1%)
+
+Query: 70  TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128
+               +L  L +   TYF  ++       GL    I+++    +  +   I+   +  K  
+Sbjct: 11  FAFFILTVLTVTLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLIALVLSIFLFFKGKKAF 70
+
+Query: 129 SLWLALMLVFSLVFLYLAVTV 149
+                   + + +     V  
+Sbjct: 71  WFIFIGGFILTFLLYANVVYF 91
+
+
+>sp|Q5HR16|LTAS_STAEQ Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus epidermidis (strain ATCC 35984 /
+           RP62A) GN=ltaS PE=3 SV=1
+          Length = 646
+
+ Score = 32.8 bits (74), Expect = 3.6,   Method: Composition-based stats.
+ Identities = 9/91 (9%), Positives = 26/91 (28%), Gaps = 1/91 (1%)
+
+Query: 60  PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDI 118
+                  + +    +L    +   TYF  ++       GL    I+++    +  +   +
+Sbjct: 1   MSLPKKKIGIFAFFLLTVFTITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLIALVLSV 60
+
+Query: 119 WNSIQELKISSLWLALMLVFSLVFLYLAVTV 149
+           +   +  K          + + +     V  
+Sbjct: 61  FLFFKGKKAFWFIFIGGFLLTFLLYANVVYF 91
+
+
+>sp|Q8CQ10|LTAS_STAES Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus epidermidis (strain ATCC 12228)
+           GN=ltaS PE=3 SV=1
+          Length = 646
+
+ Score = 32.4 bits (73), Expect = 4.0,   Method: Composition-based stats.
+ Identities = 10/91 (10%), Positives = 26/91 (28%), Gaps = 1/91 (1%)
+
+Query: 60  PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDI 118
+                  + +    +L    +   TYF  ++       GL    I+I+    +  +   +
+Sbjct: 1   MSLPKKKIGIFAFFLLTVFTITLKTYFSYYVDFSLGVKGLVQNLILIMNPYSLIALVLSV 60
+
+Query: 119 WNSIQELKISSLWLALMLVFSLVFLYLAVTV 149
+           +   +  K          + + +     V  
+Sbjct: 61  FLFFKGKKAFWFIFIGGFLLTFLLYANVVYF 91
+
+
+>sp|Q6P6T5|OCLN_RAT Occludin OS=Rattus norvegicus GN=Ocln PE=2 SV=1
+          Length = 523
+
+ Score = 32.4 bits (73), Expect = 4.4,   Method: Composition-based stats.
+ Identities = 11/132 (8%), Positives = 42/132 (31%), Gaps = 21/132 (15%)
+
+Query: 42  LLTLVIALIQSVALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLG- 100
+           L       I S+ + +   ++          +++  +  + G   ++++  +   MG+  
+Sbjct: 142 LAMAAFCFIASLVIFVTSVIRSGMSRTRRYYLIVIIVSAILG--IMVFIATIVYIMGVNP 199
+
+Query: 101 ----GSIMI---VMASMIAYI--PQDIWNSIQELK--------ISSLWLALMLVFSLVFL 143
+                  M    +   + +    P      + +            ++ + L  +  + F 
+Sbjct: 200 TAQASGSMYGSQIYT-ICSQFYTPGGTGLYVDQYLYHYCVVDPQEAIAIVLGFMIIVAFA 258
+
+Query: 144 YLAVTVERSKYR 155
+            + V   +++ +
+Sbjct: 259 LIIVFAVKTRRK 270
+
+
+>sp|P94493|YNCC_BACSU Putative metabolite transport protein yncC
+           OS=Bacillus subtilis GN=yncC PE=3 SV=2
+          Length = 471
+
+ Score = 32.0 bits (72), Expect = 5.7,   Method: Composition-based stats.
+ Identities = 14/105 (13%), Positives = 38/105 (36%), Gaps = 2/105 (1%)
+
+Query: 44  TLVIALIQSVALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAM--GLGG 101
+           T  + LI   ++VL+  +     V   T++ L  +    G    + + ++      GLG 
+Sbjct: 332 TTALLLIAIFSIVLDGSMALPYVVLSLTVLFLAFMQGCVGPVTWLVIAEIFPQRLRGLGS 391
+
+Query: 102 SIMIVMASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLA 146
+            I +    ++ ++    +  +      S    + +   ++ +   
+Sbjct: 392 GISVFFLWILNFVIGFAFPILLSSVGLSFTFFIFVALGVLAIGFV 436
+
+
+>sp|Q7A1I3|LTAS_STAAW Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus aureus (strain MW2) GN=ltaS PE=1 SV=1
+          Length = 646
+
+ Score = 32.0 bits (72), Expect = 6.0,   Method: Composition-based stats.
+ Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%)
+
+Query: 70  TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128
+               +L  + +   TYF  ++       GL    I+++    +  +   ++   +  K  
+Sbjct: 11  FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70
+
+Query: 129 SLWLALMLVFSLVFLYLAVTV 149
+                   + + +     V  
+Sbjct: 71  WFMFIGGFLLTFLLYANVVYF 91
+
+
+>sp|Q6GBB1|LTAS_STAAS Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus aureus (strain MSSA476) GN=ltaS PE=3
+           SV=1
+          Length = 646
+
+ Score = 32.0 bits (72), Expect = 6.0,   Method: Composition-based stats.
+ Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%)
+
+Query: 70  TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128
+               +L  + +   TYF  ++       GL    I+++    +  +   ++   +  K  
+Sbjct: 11  FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70
+
+Query: 129 SLWLALMLVFSLVFLYLAVTV 149
+                   + + +     V  
+Sbjct: 71  WFMFIGGFLLTFLLYANVVYF 91
+
+
+>sp|Q6GIS3|LTAS_STAAR Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus aureus (strain MRSA252) GN=ltaS PE=3
+           SV=1
+          Length = 646
+
+ Score = 32.0 bits (72), Expect = 6.0,   Method: Composition-based stats.
+ Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%)
+
+Query: 70  TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128
+               +L  + +   TYF  ++       GL    I+++    +  +   ++   +  K  
+Sbjct: 11  FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70
+
+Query: 129 SLWLALMLVFSLVFLYLAVTV 149
+                   + + +     V  
+Sbjct: 71  WFMFIGGFLLTFLLYANVVYF 91
+
+
+>sp|Q7A6U1|LTAS_STAAN Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus aureus (strain N315) GN=ltaS PE=1 SV=1
+          Length = 646
+
+ Score = 32.0 bits (72), Expect = 6.0,   Method: Composition-based stats.
+ Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%)
+
+Query: 70  TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128
+               +L  + +   TYF  ++       GL    I+++    +  +   ++   +  K  
+Sbjct: 11  FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70
+
+Query: 129 SLWLALMLVFSLVFLYLAVTV 149
+                   + + +     V  
+Sbjct: 71  WFMFIGGFLLTFLLYANVVYF 91
+
+
+>sp|Q99VQ4|LTAS_STAAM Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus aureus (strain Mu50 / ATCC 700699)
+           GN=ltaS PE=1 SV=1
+          Length = 646
+
+ Score = 32.0 bits (72), Expect = 6.0,   Method: Composition-based stats.
+ Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%)
+
+Query: 70  TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128
+               +L  + +   TYF  ++       GL    I+++    +  +   ++   +  K  
+Sbjct: 11  FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70
+
+Query: 129 SLWLALMLVFSLVFLYLAVTV 149
+                   + + +     V  
+Sbjct: 71  WFMFIGGFLLTFLLYANVVYF 91
+
+
+>sp|Q5HHV4|LTAS_STAAC Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus aureus (strain COL) GN=ltaS PE=3 SV=1
+          Length = 646
+
+ Score = 32.0 bits (72), Expect = 6.0,   Method: Composition-based stats.
+ Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%)
+
+Query: 70  TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128
+               +L  + +   TYF  ++       GL    I+++    +  +   ++   +  K  
+Sbjct: 11  FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70
+
+Query: 129 SLWLALMLVFSLVFLYLAVTV 149
+                   + + +     V  
+Sbjct: 71  WFMFIGGFLLTFLLYANVVYF 91
+
+
+>sp|Q2G093|LTAS_STAA8 Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus aureus (strain NCTC 8325) GN=ltaS PE=1
+           SV=1
+          Length = 646
+
+ Score = 32.0 bits (72), Expect = 6.0,   Method: Composition-based stats.
+ Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%)
+
+Query: 70  TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128
+               +L  + +   TYF  ++       GL    I+++    +  +   ++   +  K  
+Sbjct: 11  FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70
+
+Query: 129 SLWLALMLVFSLVFLYLAVTV 149
+                   + + +     V  
+Sbjct: 71  WFMFIGGFLLTFLLYANVVYF 91
+
+
+>sp|Q2FIS2|LTAS_STAA3 Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus aureus (strain USA300) GN=ltaS PE=3
+           SV=1
+          Length = 646
+
+ Score = 32.0 bits (72), Expect = 6.0,   Method: Composition-based stats.
+ Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%)
+
+Query: 70  TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128
+               +L  + +   TYF  ++       GL    I+++    +  +   ++   +  K  
+Sbjct: 11  FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70
+
+Query: 129 SLWLALMLVFSLVFLYLAVTV 149
+                   + + +     V  
+Sbjct: 71  WFMFIGGFLLTFLLYANVVYF 91
+
+
+>sp|Q2YSL2|LTAS_STAAB Glycerol phosphate lipoteichoic acid synthase
+           OS=Staphylococcus aureus (strain bovine RF122 / ET3-1)
+           GN=ltaS PE=3 SV=1
+          Length = 646
+
+ Score = 32.0 bits (72), Expect = 6.0,   Method: Composition-based stats.
+ Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%)
+
+Query: 70  TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128
+               +L  + +   TYF  ++       GL    I+++    +  +   ++   +  K  
+Sbjct: 11  FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70
+
+Query: 129 SLWLALMLVFSLVFLYLAVTV 149
+                   + + +     V  
+Sbjct: 71  WFMFIGGFLLTFLLYANVVYF 91
+
+
+>sp|P0C6V8|R1AB_BRV1 Replicase polyprotein 1ab OS=Breda virus 1 GN=rep
+            PE=2 SV=1
+          Length = 6733
+
+ Score = 31.7 bits (71), Expect = 6.7,   Method: Composition-based stats.
+ Identities = 16/137 (11%), Positives = 48/137 (35%), Gaps = 23/137 (16%)
+
+Query: 108  ASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRF 167
+             +++  +P     + + +      + + +   +    L + +        V      + F
+Sbjct: 2926 TNIVECLP-----TFEIISPYVFVVLVAIFTIVFLFLLRMYI--------VMY----SYF 2968
+
+Query: 168  KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPE-NQLIEQWIEA--LSMGSP 224
+            K ++Y+  +L     + +++   +V +P     ++  L       +   +    LS+   
+Sbjct: 2969 KVFTYVVFKLLFVNTVMVLF---VVCLPPLVPGVVFVLALWLCDSVVFLLYLAVLSLFIL 3025
+
+Query: 225  AWFILYLLTIFILALAF 241
+             WF + L  + +    F
+Sbjct: 3026 PWFYVMLFVLIVGGFVF 3042
+
+
+>sp|P0C6F4|R1A_BRV1 Replicase polyprotein 1a OS=Breda virus 1 GN=1a
+            PE=3 SV=1
+          Length = 4445
+
+ Score = 31.7 bits (71), Expect = 7.6,   Method: Composition-based stats.
+ Identities = 16/137 (11%), Positives = 48/137 (35%), Gaps = 23/137 (16%)
+
+Query: 108  ASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRF 167
+             +++  +P     + + +      + + +   +    L + +        V      + F
+Sbjct: 2926 TNIVECLP-----TFEIISPYVFVVLVAIFTIVFLFLLRMYI--------VMY----SYF 2968
+
+Query: 168  KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPE-NQLIEQWIEA--LSMGSP 224
+            K ++Y+  +L     + +++   +V +P     ++  L       +   +    LS+   
+Sbjct: 2969 KVFTYVVFKLLFVNTVMVLF---VVCLPPLVPGVVFVLALWLCDSVVFLLYLAVLSLFIL 3025
+
+Query: 225  AWFILYLLTIFILALAF 241
+             WF + L  + +    F
+Sbjct: 3026 PWFYVMLFVLIVGGFVF 3042
+
+
+  Database: uniprot_sprot.fasta
+    Posted date:  Apr 12, 2010  9:48 AM
+  Number of letters in database: 181,677,051
+  Number of sequences in database:  516,081
+  
+Lambda     K      H
+   0.320    0.164    0.454 
+
+Lambda     K      H
+   0.267   0.0500    0.140 
+
+
+Matrix: BLOSUM62
+Gap Penalties: Existence: 11, Extension: 1
+Number of Hits to DB: 133,748,572
+Number of Sequences: 516081
+Number of extensions: 6364856
+Number of successful extensions: 37324
+Number of sequences better than 10.0: 789
+Number of HSP's better than 10.0 without gapping: 141
+Number of HSP's successfully gapped in prelim test: 648
+Number of HSP's that attempted gapping in prelim test: 35714
+Number of HSP's gapped (non-prelim): 1353
+length of query: 328
+length of database: 181,677,051
+effective HSP length: 117
+effective length of query: 211
+effective length of database: 121,295,574
+effective search space: 25593366114
+effective search space used: 25593366114
+T: 11
+A: 40
+X1: 16 ( 7.4 bits)
+X2: 38 (14.6 bits)
+X3: 64 (24.7 bits)
+S1: 40 (21.1 bits)
+S2: 70 (31.3 bits)
diff --git a/demotic/examples/example.ssearch.out b/demotic/examples/example.ssearch.out
new file mode 100644
index 0000000..55add39
--- /dev/null
+++ b/demotic/examples/example.ssearch.out
@@ -0,0 +1,5812 @@
+# /usr/local/fasta-36x2/bin/ssearch36_t -q example.fa /misc/data0/databases/Uniprot/uniprot_sprot.fasta
+SSEARCH searches a sequence data bank
+ version 36.04 January, 2010
+Please cite:
+ T. F. Smith and M. S. Waterman, (1981) J. Mol. Biol. 147:195-197; 
+ W.R. Pearson (1991) Genomics 11:635-650
+
+Query: example.fa
+  1>>>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 - 181 aa
+Library: /misc/data0/databases/Uniprot/uniprot_sprot.fasta 181677051 residues in 516081 sequences
+
+       opt      E()
+< 20   552     0:=
+  22     4     0:=          one = represents 790 library sequences
+  24    11     0:=
+  26    44    11:*
+  28   185   117:*
+  30   984   711:*=
+  32  3307  2749:===*=
+  34  8676  7455:=========*=
+  36 16592 15311:===================*==
+  38 27252 25304:================================*==
+  40 36214 35297:============================================*=
+  42 43422 43146:======================================================*
+  44 46626 47594:===========================================================*
+  46 47359 48476:===========================================================*
+  48 45135 46410:==========================================================*
+  50 40548 42349:==================================================== *
+  52 35616 37232:============================================== *
+  54 30462 31803:======================================= *
+  56 26378 26565:=================================*
+  58 21901 21809:===========================*
+  60 17755 17667:======================*
+  62 13618 14164:=================*
+  64 11354 11264:==============*
+  66  8741  8903:===========*
+  68  7286  7003:========*=
+  70  5736  5488:======*=
+  72  4389  4288:=====*
+  74  3439  3343:====*
+  76  2941  2602:===*
+  78  2125  2023:==*
+  80  1817  1571:=*=
+  82  1255  1201:=*
+  84  1079   952:=*
+  86   779   736:*
+  88   622   570:*          inset = represents 7 library sequences
+  90   407   441:*
+  92   310   341:*         :=======================================*
+  94   252   264:*         :==================================== *
+  96   207   204:*         :=============================*
+  98   169   158:*         :======================*==
+ 100   146   122:*         :=================*===
+ 102    94    95:*         :=============*
+ 104    80    73:*         :==========*=
+ 106    44    57:*         :======= *
+ 108    42    44:*         :======*
+ 110    34    34:*         :====*
+ 112    24    26:*         :===*
+ 114    20    20:*         :==*
+ 116    20    16:*         :==*
+ 118    10    12:*         :=*
+>120    18     9:*         :=*=
+181677051 residues in 516081 sequences
+Statistics:  Expectation_n fit: rho(ln(x))= 6.5893+/-0.000186; mu= 5.4925+/- 0.010
+ mean_var=54.1928+/-11.354, 0's: 59 Z-trim: 59  B-trim: 3232 in 1/65
+ Lambda= 0.174222
+ statistics sampled from 60000 (279906) to 516065 sequences (mod: 1)
+ Kolmogorov-Smirnov  statistic: 0.0128 (N=29) at  42
+Algorithm: Smith-Waterman (SSE2, Michael Farrar 2006) (7.1 Aug 2009)
+Parameters: BL50 matrix (15:-5), open/ext: -10/-2
+ Scan time: 12.010
+
+The best scores are:                                      s-w bits E(516081)
+sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG  ( 181) 1141 292.6 1.4e-78
+sp|Q7SY73|ABH6B_XENLA Monoacylglycerol lipase abhd ( 337)  108 32.9     4.1
+
+>>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=R  (181 aa)
+ s-w opt: 1141  Z-score: 1545.9  bits: 292.6 E(516081): 1.4e-78
+Smith-Waterman score: 1141; 100.0% identity (100.0% similar) in 181 aa overlap (1-181:1-181)
+
+               10        20        30        40        50        60
+sp|P55 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|P55 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT
+               10        20        30        40        50        60
+
+               70        80        90       100       110       120
+sp|P55 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|P55 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF
+               70        80        90       100       110       120
+
+              130       140       150       160       170       180
+sp|P55 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|P55 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP
+              130       140       150       160       170       180
+
+        
+sp|P55 N
+       :
+sp|P55 N
+        
+
+>>sp|Q7SY73|ABH6B_XENLA Monoacylglycerol lipase abhd6-B   (337 aa)
+ s-w opt: 108  Z-score: 137.2  bits: 32.9 E(516081):  4.1
+Smith-Waterman score: 108; 24.6% identity (57.7% similar) in 130 aa overlap (41-164:65-189)
+
+               20        30        40        50        60        70
+sp|P55 SNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGTTADDQLAFVS
+                                     ::: ..  ..:.  ..:...  :  :..:.
+sp|Q7S IRIYYWYWRRALGMQVKYSSYGNYKFCYTARGKPGNKPSVLM--LHGFSAHKDMWLGMVK
+           40        50        60        70          80        90  
+
+               80         90       100         110       120       
+sp|P55 LIADQGETTTVAF-GPEIGSRIAASFMAACGQLQ--HQIATRTGKEERKFKPFAAAGFSV
+       ..  . . . : . : :  :: : .... :::..  ::..   : ..   :::  .: :.
+sp|Q7S FLPKNLHLVCVDMPGHEGTSRSALDYYSICGQVKRIHQFVESIGLNK---KPFHLVGTSM
+            100       110       120       130          140         
+
+          130       140       150       160       170       180    
+sp|P55 R---AGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRPN   
+           ::. :    . . :.. .  : . .    . :..:.                    
+sp|Q7S GGNVAGVYAAQHPTHISSLTLICPAGLMYPIESKFLKQLKVLEKSGDNQRIPLIPSTAGE
+     150       160       170       180       190       200         
+
+sp|Q7S MEDMLRLCSFVRFKIPQQVLQGLIDERIPHNEFYRKLFLALVDEKSRHSLHENMNKIMAP
+     210       220       230       240       250       260         
+
+  2>>>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA - 345 aa
+Library: /misc/data0/databases/Uniprot/uniprot_sprot.fasta 181677051 residues in 516081 sequences
+
+       opt      E()
+< 20   549     0:=
+  22     0     0:           one = represents 1023 library sequences
+  24     1     0:=
+  26     0    11:*
+  28     1   117:*
+  30    41   711:*
+  32   346  2748:= *
+  34  1976  7453:==     *
+  36  6380 15306:=======       *
+  38 17052 25295:=================       *
+  40 31636 35284:===============================   *
+  42 47449 43131:==========================================*====
+  44 57813 47577:==============================================*==========
+  46 61372 48459:===============================================*============
+  48 56648 46394:=============================================*==========
+  50 48468 42334:=========================================*======
+  52 40207 37219:====================================*===
+  54 32033 31792:===============================*
+  56 25118 26556:=========================*
+  58 19256 21802:===================  *
+  60 14861 17661:===============  *
+  62 11182 14159:===========  *
+  64  8664 11260:=========  *
+  66  7032  8900:======= *
+  68  5657  7000:======*
+  70  4343  5486:=====*
+  72  3344  4287:====*
+  74  2668  3342:===*
+  76  2281  2601:==*
+  78  1739  2022:=*
+  80  1412  1570:=*
+  82  1245  1201:=*
+  84   964   951:*
+  86   779   736:*
+  88   638   570:*          inset = represents 9 library sequences
+  90   494   441:*
+  92   425   341:*         :=====================================*==
+  94   339   264:*         :=============================*========
+  96   280   204:*         :======================*=========
+  98   218   158:*         :=================*=======
+ 100   199   122:*         :=============*=========
+ 102   153    95:*         :==========*======
+ 104   125    73:*         :========*=====
+ 106   106    57:*         :======*=====
+ 108    82    44:*         :====*=====
+ 110    99    34:*         :===*=======
+ 112    64    26:*         :==*=====
+ 114    66    20:*         :==*=====
+ 116    43    16:*         :=*===
+ 118    30    12:*         :=*==
+>120   203     9:*         :*======================
+181677051 residues in 516081 sequences
+Statistics:  Expectation_n fit: rho(ln(x))= 8.6553+/-0.00021; mu= 1.0570+/- 0.012
+ mean_var=116.4100+/-22.696, 0's: 69 Z-trim: 86  B-trim: 0 in 0/64
+ Lambda= 0.118872
+ statistics sampled from 60000 (216003) to 515883 sequences (mod: 1)
+ Kolmogorov-Smirnov  statistic: 0.0572 (N=29) at  40
+Algorithm: Smith-Waterman (SSE2, Michael Farrar 2006) (7.1 Aug 2009)
+Parameters: BL50 matrix (15:-5), open/ext: -10/-2
+ Scan time: 17.720
+
+The best scores are:                                      s-w bits E(516081)
+sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hac ( 345) 2265 397.3 1.6e-109
+sp|Q8TFU8|HAC1_EMENI Transcriptional activator hac ( 350) 1740 307.2   2e-82
+sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac ( 451)  446 85.3 1.7e-15
+sp|P41546|HAC1_YEAST Transcriptional activator HAC ( 238)  257 52.9 4.9e-06
+sp|O24646|HY5_ARATH Transcription factor HY5 OS=Ar ( 168)  225 47.5 0.00016
+sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Ho ( 261)  201 43.3  0.0042
+sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bo ( 261)  200 43.1  0.0048
+sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive elemen ( 519)  203 43.6  0.0068
+sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=So ( 158)  191 41.6  0.0083
+sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive elemen ( 521)  200 43.1  0.0097
+sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper ( 631)  201 43.3    0.01
+sp|A3LYI0|NST1_PICST Stress response protein NST1  (1234)  201 43.3   0.021
+sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element- ( 520)  191 41.6   0.028
+sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive elemen ( 456)  188 41.1   0.035
+sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive elemen ( 519)  189 41.2   0.036
+sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive elemen ( 519)  187 40.9   0.045
+sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive elemen ( 520)  187 40.9   0.045
+sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive elemen ( 520)  185 40.5   0.058
+sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive elemen ( 404)  181 39.9   0.071
+sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive elemen ( 525)  183 40.2   0.074
+sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive elemen ( 428)  181 39.9   0.076
+sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element- ( 521)  182 40.0   0.082
+sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus  ( 338)  175 38.9    0.12
+sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive elemen ( 479)  177 39.2    0.14
+sp|Q5A2K0|NST1_CANAL Stress response protein NST1  (1399)  186 40.7    0.14
+sp|Q8W191|HYH_ARATH Transcription factor HY5-like  ( 149)  165 37.2    0.17
+sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familia ( 338)  172 38.3    0.17
+sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element- ( 470)  174 38.7    0.19
+sp|P0C5H8|KAPC_EMENI Putative transcription factor ( 278)  169 37.8     0.2
+sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens  ( 338)  169 37.8    0.25
+sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprin ( 347)  168 37.6    0.29
+sp|Q0D9R7|ARFS_ORYSJ Auxin response factor 19 OS=O (1161)  178 39.3     0.3
+sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Hom ( 271)  165 37.1    0.32
+sp|Q5B3C8|NST1_EMENI Stress response protein nst1  (1125)  176 39.0    0.37
+sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kin ( 806)  173 38.5    0.38
+sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scro ( 380)  166 37.3     0.4
+sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcri ( 349)  165 37.1    0.41
+sp|Q90370|MAFB_COTJA Transcription factor MafB OS= ( 311)  161 36.5    0.59
+sp|Q90888|MAFB_CHICK Transcription factor MafB OS= ( 311)  161 36.5    0.59
+sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive elemen ( 461)  163 36.8     0.7
+sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS= ( 171)  154 35.3    0.73
+sp|O88778|BSN_RAT Protein bassoon OS=Rattus norveg (3938)  181 39.8    0.74
+sp|Q8VCH8|UBXN4_MOUSE UBX domain-containing protei ( 506)  163 36.8    0.77
+sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive elemen ( 370)  160 36.3    0.79
+sp|A4R2R1|NST1_MAGGR Stress response protein NST1  (1319)  171 38.1    0.79
+sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcri ( 351)  159 36.1    0.85
+sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocr ( 381)  159 36.1    0.92
+sp|A5PKJ4|MK07_BOVIN Mitogen-activated protein kin ( 781)  165 37.1    0.94
+sp|Q1DQC1|PAN1_COCIM Actin cytoskeleton-regulatory (1485)  170 37.9       1
+sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus mu ( 380)  158 35.9       1
+sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcri ( 339)  157 35.8       1
+sp|Q76LL6|FHOD3_MOUSE FH1/FH2 domain-containing pr (1578)  170 37.9     1.1
+sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive elemen ( 395)  158 35.9     1.1
+sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF ( 401)  158 35.9     1.1
+sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcri ( 483)  159 36.1     1.2
+sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcri ( 494)  159 36.1     1.2
+sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive elemen ( 395)  157 35.8     1.2
+sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattu ( 327)  155 35.4     1.3
+sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo s ( 380)  156 35.6     1.3
+sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mu ( 802)  162 36.6     1.4
+sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS= ( 323)  154 35.3     1.4
+sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Ratt ( 267)  152 34.9     1.5
+sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein ( 381)  155 35.4     1.5
+sp|P10158|FOSL1_RAT Fos-related antigen 1 OS=Rattu ( 275)  152 34.9     1.5
+sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GY (1291)  165 37.1     1.6
+sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Hom ( 326)  153 35.1     1.6
+sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive elemen ( 428)  155 35.4     1.7
+sp|A2R346|KAPC_ASPNC Putative transcription factor ( 283)  151 34.7     1.8
+sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS= ( 323)  152 34.9     1.8
+sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcri ( 413)  154 35.2     1.8
+sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus ( 273)  150 34.6     1.9
+sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase ( 780)  159 36.1     1.9
+sp|Q16520|BATF_HUMAN Basic leucine zipper transcri ( 125)  143 33.4       2
+sp|Q0CEI3|KAPC_ASPTN Putative transcription factor ( 286)  150 34.6       2
+sp|P54842|MAFB_RAT Transcription factor MafB OS=Ra ( 323)  151 34.7       2
+sp|P29747|CREBA_DROME Cyclic AMP response element- ( 516)  155 35.4       2
+sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus ( 326)  151 34.7       2
+sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS ( 416)  153 35.1     2.1
+sp|Q91496|FOS_TETFL Proto-oncogene c-Fos OS=Tetrao ( 374)  152 34.9     2.1
+sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mu ( 267)  149 34.4     2.1
+sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcript ( 347)  151 34.7     2.2
+sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding prote ( 256)  148 34.2     2.3
+sp|P54841|MAFB_MOUSE Transcription factor MafB OS= ( 323)  150 34.6     2.3
+sp|A1C9M5|KAPC_ASPCL Putative transcription factor ( 288)  149 34.4     2.3
+sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive elemen ( 368)  151 34.7     2.3
+sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos ta ( 380)  151 34.7     2.4
+sp|Q6NS15|MED15_XENLA Mediator of RNA polymerase I ( 777)  157 35.7     2.4
+sp|P94517|YSCB_BACSU Uncharacterized protein yscB  ( 221)  146 33.9     2.5
+sp|Q504L8|MAFB_XENTR Transcription factor MafB OS= ( 316)  149 34.4     2.5
+sp|O57342|MAFA_COTJA Transcription factor MafA OS= ( 286)  148 34.2     2.5
+sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus n ( 380)  150 34.6     2.7
+sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis  ( 381)  150 34.6     2.7
+sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodop ( 381)  150 34.6     2.7
+sp|Q2VZV0|IF2_MAGSA Translation initiation factor  ( 872)  157 35.7     2.7
+sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcri ( 348)  149 34.4     2.8
+sp|Q5HZY0|UBXN4_RAT UBX domain-containing protein  ( 506)  152 34.9     2.8
+sp|P0C865|MK07_RAT Mitogen-activated protein kinas ( 806)  156 35.6     2.8
+sp|Q9N0J3|CEBPD_SHEEP CCAAT/enhancer-binding prote ( 255)  146 33.9     2.9
+sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element- ( 367)  149 34.4     2.9
+sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1  ( 863)  156 35.6       3
+sp|Q96JK9|MAML3_HUMAN Mastermind-like protein 3 OS (1134)  158 35.9     3.2
+sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcr ( 127)  139 32.7     3.2
+sp|Q9C0A6|SETD5_HUMAN SET domain-containing protei (1442)  160 36.2     3.2
+sp|B3DM43|SOX5_XENTR Transcription factor Sox-5 OS ( 753)  154 35.2     3.4
+sp|A5FV21|IF2_ACICJ Translation initiation factor  ( 887)  155 35.4     3.5
+sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive elemen ( 357)  147 34.0     3.6
+sp|Q9H254|SPTN4_HUMAN Spectrin beta chain, brain 3 (2564)  164 36.9     3.6
+sp|B2AWS3|PAN1_PODAN Actin cytoskeleton-regulatory (1441)  159 36.0     3.6
+sp|Q61827|MAFK_MOUSE Transcription factor MafK OS= ( 156)  139 32.7       4
+sp|O60675|MAFK_HUMAN Transcription factor MafK OS= ( 156)  139 32.7       4
+sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containin (1481)  158 35.9     4.2
+sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifu ( 376)  146 33.9     4.3
+sp|Q9UPA5|BSN_HUMAN Protein bassoon OS=Homo sapien (3926)  166 37.2     4.4
+sp|O88737|BSN_MOUSE Protein bassoon OS=Mus musculu (3942)  166 37.2     4.4
+sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Ara ( 315)  144 33.5     4.5
+sp|Q7ZVN7|MED15_DANRE Mediator of RNA polymerase I ( 809)  152 34.9     4.6
+sp|O42290|MAFA_CHICK Transcription factor MafA OS= ( 286)  143 33.4     4.6
+sp|A9V549|EIF3A_MONBE Eukaryotic translation initi (1052)  154 35.2     4.7
+sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcr ( 118)  135 32.0     4.8
+sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 O ( 601)  149 34.4     4.8
+sp|O43889|CREB3_HUMAN Cyclic AMP-responsive elemen ( 395)  145 33.7       5
+sp|O35284|BATF_MOUSE Basic leucine zipper transcri ( 125)  135 32.0     5.1
+sp|Q2UNX4|KAPC_ASPOR Putative transcription factor ( 284)  142 33.2     5.1
+sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive elemen ( 508)  147 34.0     5.1
+sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide excha (1021)  153 35.0     5.2
+sp|Q5F489|TAF3_CHICK Transcription initiation fact ( 930)  152 34.9     5.3
+sp|Q5HZG4|TAF3_MOUSE Transcription initiation fact ( 932)  152 34.9     5.3
+sp|Q9UKV3|ACINU_HUMAN Apoptotic chromatin condensa (1341)  155 35.4     5.4
+sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initi ( 952)  152 34.9     5.4
+sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodop ( 381)  144 33.5     5.5
+sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing prote ( 841)  150 34.5     6.1
+sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 O ( 601)  147 34.0     6.1
+sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive elemen ( 428)  144 33.5     6.2
+sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS= ( 313)  141 33.0     6.4
+sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gal ( 323)  141 33.0     6.6
+sp|Q3UHR0|BAHC1_MOUSE BAH and coiled-coil domain-c (2643)  159 36.0     6.7
+sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus ( 295)  140 32.9     6.8
+sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Hom ( 295)  140 32.9     6.8
+sp|Q9NZ53|PDXL2_HUMAN Podocalyxin-like protein 2 O ( 605)  146 33.9     6.9
+sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BA (2158)  157 35.7     6.9
+sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcr ( 699)  147 34.0     7.1
+sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcr ( 703)  147 34.0     7.2
+sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mu ( 804)  148 34.2     7.3
+sp|Q6C908|PAN1_YARLI Actin cytoskeleton-regulatory (1634)  154 35.2     7.5
+sp|Q9W705|NCOA2_XENLA Nuclear receptor coactivator (1516)  153 35.0     7.8
+sp|O60841|IF2P_HUMAN Eukaryotic translation initia (1220)  151 34.7     7.9
+sp|P15205|MAP1B_RAT Microtubule-associated protein (2459)  157 35.7     7.9
+sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5- ( 454)  142 33.2     8.3
+sp|Q69022|EBNA2_EBVA8 Epstein-Barr nuclear antigen ( 454)  142 33.2     8.3
+sp|Q9ES64|USH1C_MOUSE Harmonin OS=Mus musculus GN= ( 910)  148 34.2     8.3
+sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS= ( 289)  138 32.5     8.4
+sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein O ( 466)  142 33.2     8.5
+sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper ( 834)  147 34.0     8.6
+sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattu ( 295)  138 32.5     8.6
+sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 (2161)  155 35.3     8.8
+sp|Q54HX6|MYBI_DICDI Myb-like protein I OS=Dictyos ( 977)  148 34.2       9
+sp|Q90596|MAFK_CHICK Transcription factor MafK OS= ( 156)  132 31.5     9.1
+sp|Q4VYS1|FOXP2_XENLA Forkhead box protein P2 OS=X ( 706)  145 33.7     9.2
+sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_ ( 412)  140 32.8     9.5
+sp|Q0CPW4|PAN1_ASPTN Actin cytoskeleton-regulatory (1469)  151 34.7     9.5
+sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Ho ( 591)  143 33.3     9.7
+sp|Q00312|RBF1_CANAL Transcription factor RBF1 OS= ( 527)  142 33.2     9.7
+sp|P48634|BAT2_HUMAN Large proline-rich protein BA (2157)  154 35.2     9.9
+
+>>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS  (345 aa)
+ s-w opt: 2265  Z-score: 2101.4  bits: 397.3 E(516081): 1.6e-109
+Smith-Waterman score: 2265; 100.0% identity (100.0% similar) in 345 aa overlap (1-345:1-345)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+               10        20        30        40        50        60
+
+               70        80        90       100       110       120
+sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+               70        80        90       100       110       120
+
+              130       140       150       160       170       180
+sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD
+              130       140       150       160       170       180
+
+              190       200       210       220       230       240
+sp|Q1X ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK
+              190       200       210       220       230       240
+
+              250       260       270       280       290       300
+sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS
+       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS
+              250       260       270       280       290       300
+
+              310       320       330       340     
+sp|Q1X EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+       :::::::::::::::::::::::::::::::::::::::::::::
+sp|Q1X EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+              310       320       330       340     
+
+>>sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS  (350 aa)
+ s-w opt: 1740  Z-score: 1614.7  bits: 307.2 E(516081): 2e-82
+Smith-Waterman score: 1740; 78.9% identity (94.3% similar) in 332 aa overlap (13-344:18-348)
+
+                    10        20        30        40        50     
+sp|Q1X      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKK
+                        .:::.::. ::::::::::::::.. .: .: .::::::::::
+sp|Q8T MKSADRFSPVKMEDAFANSLPTTPSLEVPVLTVSPADTSLQTKNVVAQ-TKPEEKKPAKK
+               10        20        30        40         50         
+
+          60        70        80        90       100       110     
+sp|Q1X RKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+       :::::::::::::::::::::::::::::::::::::::::::::::::::::::::.::
+sp|Q8T RKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLESEK
+      60        70        80        90       100       110         
+
+         120       130       140       150       160       170     
+sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLF
+       :.::::::::::::.::::::::::::.:::.::::::: .::  .:::..:::::::::
+sp|Q8T IDMEQQNQFLLQRLAQMEAENNRLSQQVAQLSAEVRGSRHSTPTSSSPASVSPTLTPTLF
+     120       130       140       150       160       170         
+
+         180       190       200       210       220       230     
+sp|Q1X KQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL
+       ::: ::.::.::::::::..:::::::::.:::: :..:::::::.::::: ::: ::::
+sp|Q8T KQEGDEVPLDRIPFPTPSVTDYSPTLKPSSLAESPDLTQHPAVSVGGLEGDESALTLFDL
+     180       190       200       210       220       230         
+
+         240       250       260       270       280       290     
+sp|Q1X GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSM
+       :...::. : :..:::::::: :::.::::.: :::..:::.:::::..:::::::::::
+sp|Q8T GASIKHEPTHDLTAPLSDDDFRRLFNGDSSLESDSSLLEDGFAFDVLDSGDLSAFPFDSM
+     240       250       260       270       280       290         
+
+         300       310       320       330       340      
+sp|Q1X VNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 
+       :.::.:::::: .:...:: : ..::..:.::. ::::.::::::::::  
+sp|Q8T VDFDTEPVTLEDLEQTNGLSDSASCKAASLQPSHGASTSRCDGQGIAAGSA
+     300       310       320       330       340       350
+
+>>sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS  (451 aa)
+ s-w opt: 446  Z-score: 413.4  bits: 85.3 E(516081): 1.7e-15
+Smith-Waterman score: 446; 31.1% identity (51.8% similar) in 421 aa overlap (7-344:43-450)
+
+                                       10        20        30      
+sp|Q1X                         MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN
+                                     . : . ::. :   :.. :.  :    . .
+sp|Q8T EASPAESFLSAPGDNFTSLFADSTPSTLNPRDMMTPDSV-ADIDSRLSVIPESQDAEDDE
+             20        30        40        50         60        70 
+
+         40        50        60        70        80        90      
+sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA
+       : ....   .  ::::.:::::::: :: :::::::::::::::::::::.::::::: :
+sp|Q8T SHSTSATAPSTSEKKPVKKRKSWGQVLPEPKTNLPPRKRAKTEDEKEQRRVERVLRNRRA
+              80        90       100       110       120       130 
+
+        100       110              120       130       140         
+sp|Q1X AQTSRERKRLEMEKLENEKIQME-------QQNQFLLQRLSQMEAENNRLS---------
+       ::.::::::::.: ::... ..:       . : .:...:....  .. ..         
+sp|Q8T AQSSRERKRLEVEALEKRNKELETLLINVQKTNLILVEELNRFRRSSGVVTRSSSPLDSL
+             140       150       160       170       180       190 
+
+              150       160                         170        180 
+sp|Q1X QQLAQLAAEVRGSRANTPMPG------------------SPATASPTLTPTLFKQ-ERDE
+       :.   :. .. ::: .  : .                  .::. ::.: :   :. .  :
+sp|Q8T QDSITLSQQLFGSRDGQTMSNPEQSLMDQIMRSAANPTVNPASLSPSLPPISDKEFQTKE
+             200       210       220       230       240       250 
+
+             190       200               210       220       230   
+sp|Q1X LPLERIPFPTPSLSDYSPTLKPSTLAE--------SSDVAQHPAVSVAGLEGDGSALPLF
+          :.        . .  : . ..  :        :.: .:.::::..:     .:.:.:
+sp|Q8T EDEEQADEDEEMEQTWHETKEAAAAKEKNSKQSRVSTDSTQRPAVSIGG----DAAVPVF
+             260       270       280       290       300           
+
+                  240                 250       260       270      
+sp|Q1X D-------LGSDLKHHSTDD----------VAAPLSDDDFNRLFHGDSSVEPDSSVFEDG
+       .       :: :  :.  ::          ..: :. : .  :....  . :..:. .: 
+sp|Q8T SDDAGANCLGLDPVHQ--DDGPFSIGHSFGLSAALDADRY--LLESQLLASPNASTVDD-
+       310       320         330       340         350       360   
+
+        280       290         300       310                        
+sp|Q1X LAFDVLEGGDLSAF--PFDSMVNFDSEPVTLEGIEMA---------------------HG
+          : : : . . :  :. :  .:: .    .  . :                     : 
+sp|Q8T ---DYLAGDSAACFTNPLPSDYDFDINDFLTDDANHAAYDIVAASNYAAADRELDLEIHD
+               370       380       390       400       410         
+
+           320       330       340     
+sp|Q1X LPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+         ..   . :  ::  :::.  ::  :::.: 
+sp|Q8T PENQIPSRHSIQQPQSGASSHGCDDGGIAVGV
+     420       430       440       450 
+
+>>sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS  (238 aa)
+ s-w opt: 257  Z-score: 243.3  bits: 52.9 E(516081): 4.9e-06
+Smith-Waterman score: 257; 32.9% identity (60.3% similar) in 219 aa overlap (63-270:16-216)
+
+             40        50        60           70        80         
+sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP---KTNLPPRKRAKTEDEKEQRRIER
+                                     : .:   :..:::::::::..:::::::::
+sp|P41                MEMTDFELTSNSQSNLAIPTNFKSTLPPRKRAKTKEEKEQRRIER
+                              10        20        30        40     
+
+      90       100       110       120        130        140       
+sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ-NQFLLQRLSQME-AENNRLSQQLAQLA
+       .:::: ::. :::.:::... :: .   .:.  :.  :..:.. : : .   .  .:.: 
+sp|P41 ILRNRRAAHQSREKKRLHLQYLERKCSLLENLLNSVNLEKLADHEDALTCSHDAFVASLD
+          50        60        70        80        90       100     
+
+         150        160       170       180       190       200    
+sp|Q1X A--EVRGSR-ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS
+          . ...: :.    .:  ..: :.::.         ::.    :.        ::.:.
+sp|P41 EYRDFQSTRGASLDTRASSHSSSDTFTPS---------PLNCTMEPA--------TLSPK
+         110       120       130                140                
+
+           210       220         230       240       250       260 
+sp|Q1X TLAES-SDVAQHPAVSVAGLEG--DGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFH
+       .. .: ::      ...   :.  ....::  : ...:    .. .: :: ::  .  . 
+sp|P41 SMRDSASDQETSWELQMFKTENVPESTTLPAVD-NNNLFDAVASPLADPLCDDIAGNSLP
+      150       160       170       180        190       200       
+
+             270       280       290       300       310       320 
+sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK
+        :.:.. :.                                                   
+sp|P41 FDNSIDLDNWRNPEAQSGLNSFELNDFFITS                             
+       210       220       230                                     
+
+>>sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabid  (168 aa)
+ s-w opt: 225  Z-score: 216.5  bits: 47.5 E(516081): 0.00016
+Smith-Waterman score: 225; 31.8% identity (62.4% similar) in 170 aa overlap (6-167:3-167)
+
+               10             20        30           40        50  
+sp|Q1X MSCDMEKTMSSV--DSLPATP---ASEVPVLTVSP---ADTSLNSADVKTQEVKPEEKKP
+            :.. ::.  .:::..    .: .: : ..    .:  .  .     :.  .: . 
+sp|O24    MQEQATSSLAASSLPSSSERSSSSAPHLEIKEGIESDEEIRRVPEFGGEAVGKETSG
+                  10        20        30        40        50       
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+        .. .. :::     ..   :::..:  :::..:..:.::::..:: .::::.  . .::
+sp|O24 RESGSATGQERTQATVGESQRKRGRTPAEKENKRLKRLLRNRVSAQQARERKKAYLSELE
+        60        70        80        90       100       110       
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       :.  ..:..:. : .::: .. ::. : . : . ... ::. .     :: : ::     
+sp|O24 NRVKDLENKNSELEERLSTLQNENQMLRHILKNTTGNKRGGGG-----GSNADASL    
+       120       130       140       150       160                 
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+
+>>sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo s  (261 aa)
+ s-w opt: 201  Z-score: 190.7  bits: 43.3 E(516081): 0.0042
+Smith-Waterman score: 201; 28.5% identity (58.6% similar) in 186 aa overlap (16-187:10-186)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+                      ::  . .: .:. .::...   :      . : ..  . .  : :
+sp|P17       MVVVAAAPNPADGTPKVLLLSGQPASAAGAPAGQALPLMVPAQRGASPEAASGG
+                     10        20        30        40        50    
+
+               70         80        90       100       110         
+sp|Q1X QELPVPKTNLPPRKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME
+           .:..    ::: . :.   :.. ..: :.::.::::.:.::. .: .::.. ...:
+sp|P17 ----LPQA----RKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLE
+                   60        70        80        90       100      
+
+     120              130       140             150       160      
+sp|Q1X QQNQFLL-------QRLSQMEAENNRLSQQL------AQLAAEVRGSRANTPMPGSPATA
+       ..:: ::       ..   . .::..: :.:      :.  ::..:...  :. ::  .:
+sp|P17 EENQKLLLENQLLREKTHGLVVENQELRQRLGMDALVAEEEAEAKGNEVR-PVAGSAESA
+        110       120       130       140       150        160     
+
+        170       180       190       200       210       220      
+sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD
+       .  :   : . . .  ::. :                                       
+sp|P17 ALRLRAPLQQVQAQLSPLQNISPWILAVLTLQIQSLISCWAFWTTWTQSCSSNALPQSLP
+         170       180       190       200       210       220     
+
+>>sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos ta  (261 aa)
+ s-w opt: 200  Z-score: 189.7  bits: 43.1 E(516081): 0.0048
+Smith-Waterman score: 200; 29.9% identity (56.9% similar) in 204 aa overlap (16-206:10-196)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+                      ::. : .: .:. .:: :.   :      . :            :
+sp|Q3S       MVVVAPAQSPAAGAPKVLLLSGQPAATGGAPAGRALPVMVP------------G
+                     10        20        30        40              
+
+                 70           80        90       100       110     
+sp|Q1X QELPVPK--TNLPP--RKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+       :.   :.  ...::  ::: . :.   :.. ..: :.::.::::.:.::. .: .::.. 
+sp|Q3S QQGASPEGASGVPPQARKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQV
+             50        60        70        80        90       100  
+
+         120              130       140       150       160        
+sp|Q1X IQMEQQNQFLL-------QRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASP
+       ...:..:: ::       ..   . .::..: :.:. . : :   .:.:   :.  .:. 
+sp|Q3S VDLEEENQKLLLENQLLREKTHGLVVENQELRQRLG-MDALVTEEEAETKGNGAGLVAGS
+            110       120       130        140       150       160 
+
+      170       180       190        200       210       220       
+sp|Q1X TLTPTLFKQERDELPLERIPFPTPSLSDYSP-TLKPSTLAESSDVAQHPAVSVAGLEGDG
+       . . .:    : . ::...      :.. :: ::   ::                     
+sp|Q3S AESAAL----RLRAPLQQVQAQLSPLQNISPWTLMALTLQTLSLTSCWAFCSTWTQSCSS
+                 170       180       190       200       210       
+
+       230       240       250       260       270       280       
+sp|Q1X SALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDL
+                                                                   
+sp|Q3S DVLPQSLPAWSSSQKWTQKDPVPYRPPLLHPWGRHQPSWKPLMN                
+       220       230       240       250       260                 
+
+>>sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-bi  (519 aa)
+ s-w opt: 203  Z-score: 187.0  bits: 43.6 E(516081): 0.0068
+Smith-Waterman score: 203; 32.7% identity (59.0% similar) in 156 aa overlap (4-152:210-360)
+
+                                          10         20        30  
+sp|Q1X                            MSCDMEKTMSSVDSL-PATPASEVPVLTVSP-A
+                                     : : ..: :    ::.:..   :: :.: :
+sp|A1L PHEVDQFLNLSPKGLECLQMPPTPPSSVGSDSEGSQSPVHPCAPASPTQTPAVLKVAPRA
+     180       190       200       210       220       230         
+
+              40        50             60        70        80      
+sp|Q1X DTSLNSADVKTQEVKPEEKKP-----AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRR
+        .::.:. . :   : . . :      .::   ..  ::: :.::  :     .::  ..
+sp|A1L PSSLSSSPLLTAPHKLQGSGPLLLTEEEKRTLIAEGYPVP-TKLPLSK----AEEKALKK
+     240       250       260       270        280           290    
+
+         90       100       110       120       130       140      
+sp|Q1X IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL
+       :.: ..:. .:: ::..:.  .. ::..     ..:. : ... ..:  :. : ::: .:
+sp|A1L IRRKIKNKISAQESRRKKKEYVDALEKKVETCSNENHELRRKVENLECTNKSLLQQLHSL
+          300       310       320       330       340       350    
+
+        150       160       170       180       190       200      
+sp|Q1X AAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL
+        : : :                                                      
+sp|A1L QAVVAGKVPRSCRVTGTQTSTCLMVVVLCFSLFLGSFYPGLSPCSSITKADLSREISIHD
+          360       370       380       390       400       410    
+
+>>sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanu  (158 aa)
+ s-w opt: 191  Z-score: 185.4  bits: 41.6 E(516081): 0.0083
+Smith-Waterman score: 191; 36.8% identity (67.4% similar) in 95 aa overlap (60-154:66-157)
+
+      30        40        50        60        70        80         
+sp|Q1X PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER
+                                     ::  :   :.   :::...  .::..:..:
+sp|Q9S SDDEIRRVPEMGGEATGTTSASGRDGVSAAGQAQPSAGTQ---RKRGRSPADKENKRLKR
+          40        50        60        70           80        90  
+
+      90       100       110       120       130       140         
+sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE
+       .::::..:: .::::.  .  :: .  ..: .:  : .::: .. ::. : . : . .: 
+sp|Q9S LLRNRVSAQQARERKKAYLIDLEARVKELETKNAELEERLSTLQNENQMLRHILKNTTAG
+            100       110       120       130       140       150  
+
+     150       160       170       180       190       200         
+sp|Q1X VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES
+       .. .:                                                       
+sp|Q9S AQEGRK                                                      
+                                                                   
+
+>>sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-bi  (521 aa)
+ s-w opt: 200  Z-score: 184.2  bits: 43.1 E(516081): 0.0097
+Smith-Waterman score: 200; 24.1% identity (52.9% similar) in 291 aa overlap (18-297:234-518)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     .::  .:    . . . : .:  : :   :
+sp|Q8B PTPPSSHSSDSEGSLSPNPRLHPFSLSQAHSPARAMPRGPSALSTSPLLTAPHKLQGSGP
+           210       220       230       240       250       260   
+
+        50        60        70        80        90       100       
+sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE
+             .::   ..  :.: :.::  :     .::  ..:.: ..:. .:: ::..:.  
+sp|Q8B LVLTEEEKRTLVAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEY
+           270       280            290       300       310        
+
+       110       120       130       140       150        160      
+sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMPGSPATA
+       :..::..  .   .:  : ...  .:  :  : ::: .: . : :. . :  . :. . .
+sp|Q8B MDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLAGTQTGT
+      320       330       340       350       360       370        
+
+        170       180       190          200         210           
+sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---AQHPAV
+          ..   :      .     :.:. .   : .  :  .: :  ...: ..    .:  .
+sp|Q8B CLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHPLSEPYTASVVRSRNLLIYEEHAPL
+      380       390       400       410       420       430        
+
+      220       230       240       250       260       270        
+sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV-FEDGL
+         ..  .... :  .: ::.: . :.   : :  :   . :. ...:.: .  . ... :
+sp|Q8B EESSSPASAGELGGWDRGSSLLRASSGLEALPEVDLP-HFLISNETSLEKSVLLELQQHL
+      440       450       460       470        480       490       
+
+       280        290       300       310       320       330      
+sp|Q1X AFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRC
+       . . :::.. :..  ..  ::                                       
+sp|Q8B VSSKLEGNETLKVVELERRVNATF                                    
+       500       510       520                                     
+
+>>sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper tra  (631 aa)
+ s-w opt: 201  Z-score: 183.6  bits: 43.3 E(516081): 0.01
+Smith-Waterman score: 201; 24.5% identity (55.4% similar) in 233 aa overlap (46-270:363-593)
+
+          20        30        40        50        60            70 
+sp|Q1X PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN----LP
+                                     : :: :  :::: . .  ::   :    : 
+sp|Q54 NSNNISTQINNLNNNINNQNNQLNGSNNGKKKEEDKSIKKRK-FISSTPVKGENGGTTLI
+            340       350       360       370        380       390 
+
+                80        90       100       110       120         
+sp|Q1X PRKRA--KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL
+       :   .  . ..:..:.: .:...:: :::  :.:..  .. ::..  ..   :. .  :.
+sp|Q54 PTTDGGFNMDEERHQKRQRRLVKNREAAQLFRQRQKAYIQDLEKKVSDLTGTNSEFRARV
+             400       410       420       430       440       450 
+
+     130       140       150        160       170       180        
+sp|Q1X SQMEAENNRLSQQLAQLAAEVRGSRA-NTPMPGSPATASPTLTPTLFKQERDELPLERIP
+         ...::. . .::  :   :  . . . :  :: .: ::. .   : .     :    :
+sp|Q54 ELLNSENKLIREQLLYLRNFVTQAVSFSFPKGGSNGTNSPSGVADQFLNSILP-PGLNSP
+             460       470       480       490       500        510
+
+      190       200       210       220       230       240        
+sp|Q1X FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVA
+       .:   :       .:  ..  ...:.. ..   ...:.  . :. .  :.:  .: ..  
+sp|Q54 LPQGILPAGMNLQNPMIMSAIAEAASKNSTFRQNIQGNLLGTPIPSPQSSLTSNSGNNSP
+              520       530       540       550       560       570
+
+       250       260       270       280       290       300       
+sp|Q1X A-PLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG
+         ::.... :  ...... .:.:                                     
+sp|Q54 NKPLNNNNNNNNINNNNNNNPSSPNNNLNNNNNISPNSSTSHQVPYLPQNTPPQQSTPNQ
+              580       590       600       610       620       630
+
+>>sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=P  (1234 aa)
+ s-w opt: 201  Z-score: 178.2  bits: 43.3 E(516081): 0.021
+Smith-Waterman score: 201; 26.6% identity (54.6% similar) in 304 aa overlap (41-332:727-1001)
+
+               20        30        40        50        60        70
+sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL
+                                     . .:.: .:..  :: ..  ..    : .:
+sp|A3L ELKQKQEALKADQRRRKEEAKLKREEEKKKRIEELKRKEEEHKKKVEAQQKKEEEAK-KL
+        700       710       720       730       740       750      
+
+               80        90       100       110       120       130
+sp|Q1X PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS
+         ... :.:.:..... :.  ..    :  .::.::..:  :::... :::.      :.
+sp|A3L KEERKKKAEEERKKKEEEKRQKELLKKQKEEERERLKLEAEENERLEKEQQE------LQ
+         760       770       780       790       800               
+
+              140       150       160       170       180       190
+sp|Q1X QMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFP
+       ...  .:.:  . ::: ::.        . .:: . ::: .  :..:  .  :   .  :
+sp|A3L ELQESQNQLELESAQLPAEL-----AEEINASPDSFSPTKNH-LLEQLYQARP-SSVSGP
+     810       820            830       840        850        860  
+
+                 200       210           220       230       240   
+sp|Q1X T---PSLSDYSPTLKPSTLAESSDVAQ----HPAVSVAGLEGDGSALPLFDLGSDLKHHS
+       :   : .. ..:   : . : :: : .     ::.: : :.: ::  :  .  . . . :
+sp|A3L TTISPPIQ-FTPEAVPPVAAVSSVVPSVVPISPALSGAILNGTGS--P--NSRNAMLYGS
+            870        880       890       900           910       
+
+           250       260       270           280        290        
+sp|Q1X TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE----DGLAFDV-LEGGDLSAFPFDSMVNF
+       . ..  :      : :  . :.. : ::  .    .: ...  :   .:::  :. . .:
+sp|A3L SAQAQLP------NGLNSSTSNMSPWSSKSRLNSTSGASLQSNLFQPQLSASGFSPFNDF
+       920             930       940       950       960       970 
+
+      300       310       320       330       340                  
+sp|Q1X DSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC             
+        : :.:  ::    ..  ..   ...:.:  ::.                          
+sp|A3L -STPATSAGI---GSVNVNAPLASTAVEPLAGANNGGVWNPSTTSSRNNSIWSNTPNLNN
+              980          990      1000      1010      1020       
+
+sp|A3L ASIWGNTLPSLAGGAGAGASTPSAAHTLPNSAPLASDNELIQVAAYNTFQMLQNSNQLEF
+      1030      1040      1050      1060      1070      1080       
+
+>>sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-bind  (520 aa)
+ s-w opt: 191  Z-score: 175.9  bits: 41.6 E(516081): 0.028
+Smith-Waterman score: 191; 25.3% identity (51.7% similar) in 300 aa overlap (4-290:214-499)
+
+                                          10        20        30   
+sp|Q1X                            MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT
+                                     : . ..:  .  :..:.  .   ... . .
+sp|Q66 AEPPEMSQFLKVTQEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS
+           190       200       210       220       230       240   
+
+            40         50        60        70        80        90  
+sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+        : .:  : : .. :      .::   ..  :.: :.::  :     .::  .:..: ..
+sp|Q66 PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK
+           250       260       270        280           290        
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :. .:: ::..:.  .: ::..   . ..:. : ...  .:. :  : ::: .: . :  
+sp|Q66 NKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKLQTLVT-
+      300       310       320       330       340       350        
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+       :. . :.     .:. : :  .       : :  .    :..:. : :.: . .: .:  
+sp|Q66 SKISRPYK---MAATQTGTCLMVAALCFVLVLGSLAPCLPAFSSGSKTVKEDPVAADSVY
+       360          370       380       390       400       410    
+
+              220             230           240       250       260
+sp|Q1X A--QHPAVSV------AGLEGDGSALPLFDL----GSDLKHHSTDDVAAPLSDDDFNRLF
+       :  : :. :.      ::   ::    :. .    : .::  .    : :  .: . :  
+sp|Q66 AASQMPSRSLLFYDDGAGSWEDGHRGALLPVEPPEGWELKPGGP---AEPRPQDHL-RHD
+          420       430       440       450          460        470
+
+              270       280       290       300       310       320
+sp|Q1X HGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTC
+       :.:: ..  .. ...    :. ..:    :                              
+sp|Q66 HADS-IHETTKYLRETWPEDTEDNGASPNFSHPKEWFHDRDLGPNTTIKLS         
+               480       490       500       510       520         
+
+>>sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-bi  (456 aa)
+ s-w opt: 188  Z-score: 174.2  bits: 41.1 E(516081): 0.035
+Smith-Waterman score: 188; 26.2% identity (53.3% similar) in 240 aa overlap (48-275:213-434)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK
+                                     .:::   :.   :  ::   :.::  :   
+sp|Q3S SSGDLQQHHLAAPHLLRPGTGHCQELVLTEDEKKLLAKE---GITLP---TQLPLTKY--
+            190       200       210       220             230      
+
+        80        90       100       110       120       130       
+sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN
+         .:.  ..:.: .::. .:: ::..:.  .. ::..      ::: : ... ..: .: 
+sp|Q3S --EERMLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNL
+            240       250       260       270       280       290  
+
+       140       150       160                170       180        
+sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGS---------PATASPTLTPTLFKQERDELPLERIP
+        : .:: .: : :  : ... . :.            . :...:  : ..: : : .  :
+sp|Q3S SLLEQLKKLQAIVVQSTSKSAQTGTCIAVLLFSFALIVLPSISP--FASNRAESPGDFAP
+            300       310       320       330         340       350
+
+         190       200       210       220       230       240     
+sp|Q1X ---FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD
+          :     .: .  . :.: : .:. :  :. ....:.  . . :     .. . ..: 
+sp|Q3S VRVFSRTLHNDAASRVAPDT-APGSE-APGPGPNTGALQERSPGSP----PGEWESQDTR
+              360       370         380       390           400    
+
+         250       260       270       280       290       300     
+sp|Q1X DVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTL
+        .     : : . : .:.:  : :.... :                              
+sp|Q3S ALDNSTEDLDNSTLVQGNSVKELDQATLLDCAPPEPAVSPGHVGLEAAGGEL        
+          410       420       430       440       450              
+
+>>sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-bi  (519 aa)
+ s-w opt: 189  Z-score: 174.0  bits: 41.2 E(516081): 0.036
+Smith-Waterman score: 189; 26.7% identity (53.8% similar) in 240 aa overlap (4-232:215-445)
+
+                                          10        20        30   
+sp|Q1X                            MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT
+                                     : . ..:  .  :..:.  .   ... . .
+sp|Q9Z AEPPEMSQFLKVTPEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS
+          190       200       210       220       230       240    
+
+            40         50        60        70        80        90  
+sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+        : .:  : : .. :      .::   ..  :.: :.::  :     .::  .:..: ..
+sp|Q9Z PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK
+          250       260       270        280           290         
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :. .:: ::..:.  .: ::..   . ..:. : ...  .:. :  : ::: .: . :  
+sp|Q9Z NKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKLQTLVT-
+     300       310       320       330       340       350         
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+       :. . :.     .:. : :  .       : :  .    :..:. : :.: . .: .:  
+sp|Q9Z SKISRPY---KMAATQTGTCLMVAALCFVLVLGSLVPCLPAFSSGSMTVKEDPIAADSVY
+      360          370       380       390       400       410     
+
+              220               230       240       250       260  
+sp|Q1X A--QHPAVSV------AGL--EGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG
+       :  : :. :.      ::   .: :. ::.                              
+sp|Q9Z AASQMPSRSLLFYDDGAGSWEDGRGALLPVEPPEGWELKPGGPAEQRPQDHLRHDRADSI
+         420       430       440       450       460       470     
+
+>>sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-bi  (519 aa)
+ s-w opt: 187  Z-score: 172.2  bits: 40.9 E(516081): 0.045
+Smith-Waterman score: 187; 26.2% identity (53.3% similar) in 240 aa overlap (4-232:215-445)
+
+                                          10        20        30   
+sp|Q1X                            MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT
+                                     : . ..:  .  :..:.  .   ... . .
+sp|Q96 AEPLEVNQFLKVTPEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS
+          190       200       210       220       230       240    
+
+            40         50        60        70        80        90  
+sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+        : .:  : : .. :      .::   ..  :.: :.::  :     .::  .:..: ..
+sp|Q96 PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK
+          250       260       270        280           290         
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :. .:: ::..:.  .: ::..   . ..:. : ...  .:  :  : ::: .: . :  
+sp|Q96 NKISAQESRRKKKEYVECLEKKVETFTSENNELWKKVETLENANRTLLQQLQKLQTLVT-
+     300       310       320       330       340       350         
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS--
+       .. . :.     .:. : :  .       : :  .    : .:. : :.: . :: ..  
+sp|Q96 NKISRPY---KMAATQTGTCLMVAALCFVLVLGSLVPCLPEFSSGSQTVKEDPLAADGVY
+      360          370       380       390       400       410     
+
+              220               230       240       250       260  
+sp|Q1X DVAQHPAVSV------AGLEGDGSA--LPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG
+        ..: :. :.      :::  :: .  ::.                              
+sp|Q96 TASQMPSRSLLFYDDGAGLWEDGRSTLLPMEPPDGWEINPGGPAEQRPRDHLQHDHLDST
+         420       430       440       450       460       470     
+
+>>sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-bi  (520 aa)
+ s-w opt: 187  Z-score: 172.2  bits: 40.9 E(516081): 0.045
+Smith-Waterman score: 187; 23.9% identity (51.9% similar) in 297 aa overlap (14-297:228-517)
+
+                                10          20        30        40 
+sp|Q1X                  MSCDMEKTMSSVDSLPAT--PASEVPVLTVSPADTSLNSADVK
+                                     ::: :  :.  .:    . ... : .:  :
+sp|Q70 DHLHLPPTPPSSHGSDSEGSLSPNPRLHPFSLPQTHSPSRAAPRAPSALSSSPLLTAPHK
+       200       210       220       230       240       250       
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+        :   :      .::   ..  :.: :.::  :     .::  ..:.: ..:. .:: ::
+sp|Q70 LQGSGPLVLTEEEKRTLIAEGYPIP-TKLPLSKS----EEKALKKIRRKIKNKISAQESR
+       260       270       280        290           300       310  
+
+             110       120       130       140       150        160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMP
+       ..:.  :..::..  .   .:  : ...  .:  :  : ::: .: . : :. . :  . 
+sp|Q70 RKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLA
+            320       330       340       350       360       370  
+
+              170       180       190          200         210     
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---
+       :. . .   ..   :      .     :.:. .   : .     .: :  ...: ..   
+sp|Q70 GTQTGTCLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHSLQEPYTASVVRSRNLLIY
+            380       390       400       410       420       430  
+
+            220       230       240       250       260       270  
+sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV
+        .:     ..  :... :  .: ::.: . :  .    ..   :  .. ...:.: .  .
+sp|Q70 EEHSPPEESSSPGSAGELGGWDRGSSLLRVSGLESRPDVDLPHF--IISNETSLEKSVLL
+            440       450       460       470         480       490
+
+             280        290       300       310       320       330
+sp|Q1X -FEDGLAFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFG
+        ... :.   :::.. :..  .:  ::                                 
+sp|Q70 ELQQHLVSAKLEGNETLKVVELDRRVNTTF                              
+              500       510       520                              
+
+>>sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-bi  (520 aa)
+ s-w opt: 185  Z-score: 170.3  bits: 40.5 E(516081): 0.058
+Smith-Waterman score: 185; 23.9% identity (51.5% similar) in 297 aa overlap (14-297:228-517)
+
+                                10          20        30        40 
+sp|Q1X                  MSCDMEKTMSSVDSLPAT--PASEVPVLTVSPADTSLNSADVK
+                                     ::: :  :.  .:    . ... : .:  :
+sp|Q5R DHLHLPPTPPSSHGSDSEGSLSPNPRLHPFSLPQTHSPSRAAPRAPSALSSSPLLTAPHK
+       200       210       220       230       240       250       
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+        :   :      .::   ..  :.: :.::  :     .::  ..:.: ..:. .:: ::
+sp|Q5R LQGSGPLVLTEEEKRTLIAEGYPIP-TKLPLTKS----EEKALKKIRRKIKNKISAQESR
+       260       270       280        290           300       310  
+
+             110       120       130       140       150        160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMP
+       ..:.  :..::..  .   .:  : ...  .:  :  : ::: .: . : :. . :  . 
+sp|Q5R RKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLA
+            320       330       340       350       360       370  
+
+              170       180       190          200         210     
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---
+       :. . .   ..   :      .     :.:. .   : .     .: :  ...: ..   
+sp|Q5R GTQTGTCLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHSLQEPYTASVVRSRNLLIY
+            380       390       400       410       420       430  
+
+            220       230       240       250       260       270  
+sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV
+        .:      .  :... :  .: ::.: . :  .    ..   :  .. ...:.: .  .
+sp|Q5R EEHSPPEEPSSPGSAGELGGWDRGSSLLRVSGLESRPDVDLPHF--IISNETSLEKSVLL
+            440       450       460       470         480       490
+
+             280        290       300       310       320       330
+sp|Q1X -FEDGLAFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFG
+        ... :.   :::.. :..  .:  ::                                 
+sp|Q5R ELQQHLVSAKLEGNETLKVVELDRRVNTTF                              
+              500       510       520                              
+
+>>sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-bi  (404 aa)
+ s-w opt: 181  Z-score: 168.6  bits: 39.9 E(516081): 0.071
+Smith-Waterman score: 181; 26.7% identity (56.0% similar) in 225 aa overlap (1-207:107-318)
+
+                                             10            20      
+sp|Q1X                               MSCDMEKTMSSV--DSLP--ATPASEVPVL
+                                     .::  .. ....  ...:   : . :   .
+sp|Q61 LGSSSSSILHDHNYSLPQEHVSIDLGECEMISCRGRRELTGLAGSTFPFADTESFEKEGF
+         80        90       100       110       120       130      
+
+         30        40          50        60        70        80    
+sp|Q1X TVSPADTSLNSADVKTQEV--KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ
+        :.:      .:. . ...    ::::  .:.   :  ::   ..::  :     .:.  
+sp|Q61 HVTPLPGEERAAEQEMSRLILTEEEKKLLEKE---GLTLP---STLPLTKV----EEQVL
+        140       150       160          170          180          
+
+           90       100       110       120       130       140    
+sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA
+       .:..: .::. ::: ::..:.. .  ::.. ...  ::. : ......: .:  : .:: 
+sp|Q61 KRVRRKIRNKRAAQESRKKKKVYVVGLESRVLKYTAQNRELQNKVQRLEEQNLSLLDQLR
+        190       200       210       220       230       240      
+
+          150       160             170        180            190  
+sp|Q1X QLAAEVRGSRANTPMPGSPA------TASPTLTPTLFKQE-RDELPLERIPF-----PTP
+       .: : :    ::    ::        .    :.:...... :  .: : . .       :
+sp|Q61 KLQAMVI-EIANKTSSGSTCVLVLVFSFCLLLVPAMYSSDARGSVPAEYVVLHRKLRALP
+        250        260       270       280       290       300     
+
+            200       210       220       230       240       250  
+sp|Q1X SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLS
+       : .:..:  :::.:.                                             
+sp|Q61 SEDDHQP--KPSALSSELPMDSTHQSLDSSEHMFLVSSNFSCVLYHAPQAEQPLHWPLWD
+         310         320       330       340       350       360   
+
+>>sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-bi  (525 aa)
+ s-w opt: 183  Z-score: 168.4  bits: 40.2 E(516081): 0.074
+Smith-Waterman score: 183; 31.0% identity (55.7% similar) in 158 aa overlap (4-152:218-368)
+
+                                          10        20             
+sp|Q1X                            MSCDMEKTMSSVDSLPATPASEVP------VLT
+                                     : :  .: . :::  :.: :       . .
+sp|A2V VDQFLNLCPKEVAPTEALQMPPTPPSSHGSDSEGGQSPTRSLP--PSSPVQSQAGGKMAA
+       190       200       210       220       230         240     
+
+        30           40        50        60        70        80    
+sp|Q1X VSPA---DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ
+        ::.   .. : .:  : :   :      .::   ..  :.: :.::  :     .::  
+sp|A2V RSPSALSNSPLLTAPHKLQGSGPLMLTEEEKRTLVAEGYPIP-TKLPLTK----AEEKAL
+         250       260       270       280        290           300
+
+           90       100       110       120       130       140    
+sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA
+       ..:.: ..:. .:: ::..:.  :..::..  .  ..:. : ...  .:. :  : ::: 
+sp|A2V KKIRRKIKNKISAQESRRKKKEYMDSLEKRVENSSSENSELRKKVEVLESTNRTLLQQLQ
+              310       320       330       340       350       360
+
+          150       160       170       180       190       200    
+sp|Q1X QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS
+       .: : : :                                                    
+sp|A2V RLQAMVTGKVTRSCKAAGTQTGTCLMMVVLCFAVIFGSFTQNLDMYSSSSKTIHEPSQYS
+              370       380       390       400       410       420
+
+>>sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-bi  (428 aa)
+ s-w opt: 181  Z-score: 168.2  bits: 39.9 E(516081): 0.076
+Smith-Waterman score: 181; 26.9% identity (53.3% similar) in 182 aa overlap (24-200:160-330)
+
+                      10        20        30         40        50  
+sp|Q1X        MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD-VKTQEVKPEEKKP
+                                     ::   .:    :. :: . .. . :: .  
+sp|Q08 MSSVISIQLAEDWNSAPLLIPESCIVNDLPPVCKSTPLPIRLTPADLIAVDALYPELHLT
+     130       140       150       160       170       180         
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+        ....  .::  .  .:::  :     .:.  ....: .::. .:: ::.::.  .. ::
+sp|Q08 EEEKRLLSQEGVALPNNLPLTK----AEERILKKVRRKIRNKQSAQDSRRRKKEYIDGLE
+     190       200       210           220       230       240     
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       ..     .::: : ... ..: .:  :  :: .: . .. .  ..      : .:  .  
+sp|Q08 SRVAACSSQNQELHKKVVELEKHNISLITQLRKLQTLIKQTSNKA------AQTSTCVLI
+         250       260       270       280       290               
+
+            180          190        200       210       220        
+sp|Q1X TLFKQERDELPLERIPF---PTPSLSD-YSPTLKPSTLAESSDVAQHPAVSVAGLEGDGS
+        ::.     .:    ::   :. :  : : ::                            
+sp|Q08 LLFSLALLVFP-SYSPFRSRPSASQEDSYRPTGVISRNILNKGGFSEVADPQASDTLHRA
+     300       310        320       330       340       350        
+
+      230       240       250       260       270       280        
+sp|Q1X ALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLS
+                                                                   
+sp|Q08 QQREEGDPGRHVVPPANPNPEETEPVSNRARTTPEPDEQVLAEPEAAILGQKGEPPGSDN
+      360       370       380       390       400       410        
+
+>>sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-bind  (521 aa)
+ s-w opt: 182  Z-score: 167.5  bits: 40.0 E(516081): 0.082
+Smith-Waterman score: 182; 23.4% identity (52.6% similar) in 291 aa overlap (18-297:234-518)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     .:.  .:    . . . : .:  : :   :
+sp|Q6Q PTPPSSHSSDSEGSLSPNPRLHPFSLSQAHSPGRAMPRGPSALSTSPLLTAPHKLQGSGP
+           210       220       230       240       250       260   
+
+        50        60        70        80        90       100       
+sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE
+             .::   ..  :.: :.::  :     .::  ..:.: ..:. .:: ::..:.  
+sp|Q6Q LVLTEEEKRTLIAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEY
+           270       280            290       300       310        
+
+       110       120       130       140       150        160      
+sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMPGSPATA
+       :..::..  .   .:  : ...  .:  :  : ::: .: . : :. . :  . :. . .
+sp|Q6Q MDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLAGTQTGT
+      320       330       340       350       360       370        
+
+        170       180       190          200         210           
+sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---AQHPAV
+          ..   :      :      .:. .   : .  :  .: :  ...: ..    .: ..
+sp|Q6Q CLMVVVLCFAVAFGSLFQGYGLYPSATKMALPSQHPLSEPYTASVVRSRNLLIYEEHSSL
+      380       390       400       410       420       430        
+
+      220       230       240       250       260       270        
+sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV-FEDGL
+         ..  .... :  .: ::.: . :.   : :  :   . ..  ..:.: .  . ... :
+sp|Q6Q EESSSPASAGELGGWDRGSSLLRASSGLEALPEVDLP-HFIISKETSLEKSVLLELQQHL
+      440       450       460       470        480       490       
+
+       280        290       300       310       320       330      
+sp|Q1X AFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRC
+       . . :::.. :..  ..  ::                                       
+sp|Q6Q VSSKLEGNETLKVVELERRVNATF                                    
+       500       510       520                                     
+
+>>sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=F  (338 aa)
+ s-w opt: 175  Z-score: 164.5  bits: 38.9 E(516081): 0.12
+Smith-Waterman score: 175; 25.7% identity (50.9% similar) in 222 aa overlap (9-222:76-290)
+
+                                     10         20        30       
+sp|Q1X                       MSCDMEKTMSSVDSLPATP-ASEVPVLTVSPAD---TS
+                                     .::. .  . : ::. :.  :.: :   ::
+sp|P13 GLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPA--VDPYDMPGTS
+          50        60        70        80        90         100   
+
+           40        50          60        70          80        90
+sp|Q1X LNSADVKTQEVKPEEKK--PAKKRKSWGQELPVPKTNLP--PRKRAKTEDEKEQRRIERV
+        ..  ...  .     .  :. .  . :     :    :  ::... : .:.:.::..: 
+sp|P13 YSTPGLSAYSTGGASGSGGPSTSTTTSGPVSARPARARPRRPREETLTPEEEEKRRVRRE
+           110       120       130       140       150       160   
+
+              100       110       120       130       140       150
+sp|Q1X LRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV
+        ::. ::   :.:.:   ..:. :  :.:...  : ....... :..::   :.      
+sp|P13 -RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGC
+            170       180       190       200       210       220  
+
+              160       170       180       190       200       210
+sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+       .    . : ::  : .     :   . ..: .     : : : :   :    : .:. : 
+sp|P13 KIPYEEGPGPGPLAEVRDL--PGSTSAKEDGFGWLLPPPPPPPLPFQSSRDAPPNLTAS-
+            230       240         250       260       270          
+
+              220       230       240       250       260       270
+sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS
+        .  :  :.: :                                                
+sp|P13 -LFTHSEVQVLGDPFPVVSPSYTSSFVLTCPEVSAFAGAQRTSGSEQPSDPLNSPSLLAL
+      280       290       300       310       320       330        
+
+>>sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-bi  (479 aa)
+ s-w opt: 177  Z-score: 163.6  bits: 39.2 E(516081): 0.14
+Smith-Waterman score: 177; 27.0% identity (54.1% similar) in 233 aa overlap (48-258:214-432)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK
+                                     .:::   :.   :  ::   :.::  :   
+sp|Q91 GSGDLQQHSLAASQLLGPGSGHCQELVLTEDEKKLLAKE---GVTLP---TQLPLTKY--
+           190       200       210       220             230       
+
+        80        90       100       110       120       130       
+sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN
+         .:.  ..:.: .::. .:: ::..:.  .. :::.      ::: : ... ..: .: 
+sp|Q91 --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNL
+           240       250       260       270       280       290   
+
+       140       150       160                170       180        
+sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP
+        : .:: .: : :  : ..    :.  ..          :...:  :.... . : . .:
+sp|Q91 SLLEQLKHLQALVVQSTSKPAHAGTCIAVLLLSFALIILPSISP--FNSNKVDSPGDFVP
+           300       310       320       330         340       350 
+
+             190       200       210          220        230       
+sp|Q1X -------FPTPSLSDYSPTLKPSTLAESS--DVAQ-HPAVSVAGLEGD-GSAL--PLFDL
+              . . . :  .: . :.. . .   ::.  : . : .:: .: :. :  :..: 
+sp|Q91 VRVFSRTLHNHAASRVAPDVTPGSEVPGPWPDVGTPHKGPSSGGLSADWGNFLEIPMLDN
+             360       370       380       390       400       410 
+
+         240       250       260       270       280       290     
+sp|Q1X GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSM
+        ..   .::  .:   : .:..:                                     
+sp|Q91 LTEELDNSTLVLAN--STEDLGRATLLDWVASEPLLSPGRVGLEIPGEMWLSWVPRWLRV
+             420         430       440       450       460         
+
+>>sp|Q5A2K0|NST1_CANAL Stress response protein NST1 OS=C  (1399 aa)
+ s-w opt: 186  Z-score: 163.3  bits: 40.7 E(516081): 0.14
+Smith-Waterman score: 186; 20.1% identity (55.0% similar) in 358 aa overlap (32-334:788-1145)
+
+              10        20        30        40        50           
+sp|Q1X SCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSW--
+                                     .. :.. . : .... ...:  ..::.   
+sp|Q5A KRKEEELKAKEEEQRLQKEKLKAEQKKRKEEARLKKEEEKKKKIEEQKRKEEEHRKKVEA
+       760       770       780       790       800       810       
+
+      60        70        80        90       100       110         
+sp|Q1X GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME
+        :.  .   .:  ..: :.:.:..:.. :.  ..    :  .:... :. . . :. . .
+sp|Q5A QQKREAEAKKLKEERRRKAEEERKQKEEEKKQKELLKKQKEEEKRQKELLRKQREEEKEK
+       820       830       840       850       860       870       
+
+     120       130       140       150               160           
+sp|Q1X QQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM--------PGS----PATAS
+       .  ..  .: . :  ....:..:.    ... .. ::.:.        :::    :.::.
+sp|Q5A EAARLEEERTKLMVNDDDELARQIEVEKSKLSAAVANNPLLNHLYQPSPGSAPTTPSTAN
+       880       890       900       910       920       930       
+
+        170                  180                 190         200   
+sp|Q1X -PTLTPT-----------LFKQERDELPLERIPF----------PTPSLSDY--SPTLKP
+        :.:.:            . .:.....  :..:           : ::.:..  :   .:
+sp|Q5A LPALSPLQSASAKLMSQQFEQQHQQQVSQEKLPQTSNIQSPNQQPHPSISSFQFSSEYNP
+       940       950       960       970       980       990       
+
+             210              220       230       240       250    
+sp|Q1X --STLAESSDVAQHPAV-------SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDD
+         :.. ..:.. ..:..       :.  :.:..  .:    . .:   .:....   : .
+sp|Q5A NASVFHNNSSLLSNPSIMNSPRTTSTNLLNGNSPIVPNVTTNISLGATNTSNLSPWSSKS
+      1000      1010      1020      1030      1040      1050       
+
+                260       270       280       290         300      
+sp|Q1X DFNRL------FHGDSSVEPDSSVFEDGLAFDVLEGGDLSAF-PF-DSMVNFDSEPVTLE
+        .: :      : : ..    ...  .:..  : ..:..: :  : : .:.   . .   
+sp|Q5A RLNSLSNSTQPFIGGNQFTQTNTASFNGVGNAVQQSGNFSPFNAFSDPLVSDAFKAAGPA
+      1060      1070      1080      1090      1100      1110       
+
+        310       320       330       340                          
+sp|Q1X GIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC                     
+       :..    : . .. ..:. : :..: ::                                
+sp|Q5A GMNSNIWLNSSNVGNNSGNQSGISAPTTTSTNTSSRNNSIWGNTNPNKVTEPSLLNNNNN
+      1120      1130      1140      1150      1160      1170       
+
+>>sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=A  (149 aa)
+ s-w opt: 165  Z-score: 161.8  bits: 37.2 E(516081): 0.17
+Smith-Waterman score: 165; 35.2% identity (76.1% similar) in 71 aa overlap (73-143:68-138)
+
+             50        60        70        80        90       100  
+sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE
+                                     :.:...  .:: : ..:.::::..:: .::
+sp|Q8W GSTCVLSSSADDGVNNPELDQTQNGVSTAKRRRGRNPVDKEYRSLKRLLRNRVSAQQARE
+        40        50        60        70        80        90       
+
+            110       120       130       140       150       160  
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS
+       ::.. .  ::..  .....:. : ...: .  ::. : ..:                   
+sp|Q8W RKKVYVSDLESRANELQNNNDQLEEKISTLTNENTMLRKMLINTRPKTDDNH        
+       100       110       120       130       140                 
+
+            170       180       190       200       210       220  
+sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG
+
+>>sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris   (338 aa)
+ s-w opt: 172  Z-score: 161.7  bits: 38.3 E(516081): 0.17
+Smith-Waterman score: 172; 28.8% identity (51.3% similar) in 191 aa overlap (72-237:145-332)
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+                                     ::... : .:.:.::..:  ::. ::   :
+sp|Q9T GGASGSGGPSTSGTTSGPGPARPARARLRRPREETLTPEEEEKRRVRRE-RNKLAAAKCR
+          120       130       140       150       160        170   
+
+             110       120       130       140       150       160 
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPG
+       .:.:   ..:. :  :.:...  : ....... :..::   :.      .    . : ::
+sp|Q9T NRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPG
+           180       190       200       210       220       230   
+
+                                170       180       190            
+sp|Q1X S-------PATAS------------PTLTPTLFKQERDELPLERIPFPTPS----LSDYS
+               :..::            :   :  :.  .:  :     . : :    :.:  
+sp|Q9T PLAEVRDLPGSASTKEDGFSWLLPPPPAPPLPFQTSQDAAPNLTASLFTHSEVQVLGDPF
+           240       250       260       270       280       290   
+
+      200       210       220         230       240       250      
+sp|Q1X PTLKPSTLAESSDVAQHPAVSV-AGLE-GDGSALPLFDLGSDLKHHSTDDVAAPLSDDDF
+       :...::    :: :   : ::. :: .  .::  :   :.:                   
+sp|Q9T PVVNPSY--TSSFVLTCPEVSAFAGTQRPSGSDQPTDPLNSPSLLAL             
+           300         310       320       330                     
+
+        260       270       280       290       300       310      
+sp|Q1X NRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPD
+
+>>sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-bind  (470 aa)
+ s-w opt: 174  Z-score: 160.9  bits: 38.7 E(516081): 0.19
+Smith-Waterman score: 174; 26.7% identity (52.6% similar) in 247 aa overlap (48-284:214-438)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK
+                                     .:::   :.   :  ::   :.::  :   
+sp|Q5F GGGDLQQHPLAASQLLGPGSGHCQELVLTEDEKKLLAKE---GVTLP---TQLPLTKY--
+           190       200       210       220             230       
+
+        80        90       100       110       120       130       
+sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN
+         .:.  ..:.: .::. .:: ::..:.  .. :::.      ::: : ... ..: .: 
+sp|Q5F --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNL
+           240       250       260       270       280       290   
+
+       140       150       160                170       180        
+sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP
+        : .:: .: : :  : ..    :.  ..          :...:  :  .. . : . ::
+sp|Q5F SLLEQLKHLQALVVQSTSKPAHAGTCIAVLLLSFVLIILPSISP--FTANKVDSPGDFIP
+           300       310       320       330         340       350 
+
+      190       200        210       220       230       240       
+sp|Q1X FPTPSLSDYSPTLKPSTLAE-SSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDV
+            .  .: ::.  . .. . ::.  : :  .  .:....:   : :. :.    :: 
+sp|Q5F -----VRVFSRTLHNHAASRVAPDVTPGPEVP-GPHKGSSGGLSA-DWGNFLEIPMLDD-
+                  360       370        380       390        400    
+
+       250       260       270       280       290       300       
+sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG
+         :  . : . :  ..:. .   ... : .: . : :                       
+sp|Q5F --PTEELDNTTLVLANSTEDLGRATLLDWVASEPLLGQMGLEIPGEEIWLSWVPRWLRVR
+             410       420       430       440       450       460 
+
+       310       320       330       340     
+sp|Q1X IEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+                                             
+sp|Q5F VVQDALGVL                             
+             470                             
+
+>>sp|P0C5H8|KAPC_EMENI Putative transcription factor kap  (278 aa)
+ s-w opt: 169  Z-score: 160.5  bits: 37.8 E(516081):  0.2
+Smith-Waterman score: 169; 22.3% identity (51.2% similar) in 260 aa overlap (17-274:49-268)
+
+                             10        20        30        40      
+sp|Q1X               MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVK
+                                     : :    :. :.:: : .  .  ..   . 
+sp|P0C DHADQVLHDSLLAAQHLSQHPQQPRPQQPNAQPHHLQPTATTSPRDQNNIDPAISGGAML
+       20        30        40        50        60        70        
+
+         50        60        70        80        90       100      
+sp|Q1X PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL
+       :  . ::. . .  .: :            ::  ..     .:. .:::: .. :.::. 
+sp|P0C PPSQPPAQPEPTVEDETP------------KTYGKRPLSTSKRAAQNRAAQRAFRQRKES
+       80        90                   100       110       120      
+
+        110       120       130       140       150        160     
+sp|Q1X EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPAT
+        ..::: :...   . . . :. . ..::: .: . . .: ...  :....: .::.   
+sp|P0C YIRKLE-EQVK---EYEVMSQEYKALQAENYQLREYVINLQSRLLDSQGEVPELPGNIDL
+        130           140       150       160       170       180  
+
+         170       180       190       200       210       220     
+sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG
+        .:          : :.    .: :.:         .:.  . :.     :  .:.  . 
+sp|P0C NQP----------RTEI---SVPQPAP---------RPGQAGASAPPQGSPQSQVSIAND
+                         190                200       210       220
+
+         230        240       250       260       270       280    
+sp|Q1X DGSALP-LFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEG
+       : ..:  . . :  ...: ...  : ::..   :  .:: ...:. .  :          
+sp|P0C DMNSLNRIAEAGLGMRKHPNEE--AFLSNNFQARRGRGDETADPSETKTEPPTHGLPMVS
+              230       240         250       260       270        
+
+          290       300       310       320       330       340    
+sp|Q1X GDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAG
+
+>>sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=F  (338 aa)
+ s-w opt: 169  Z-score: 158.9  bits: 37.8 E(516081): 0.25
+Smith-Waterman score: 169; 25.7% identity (49.5% similar) in 222 aa overlap (9-222:76-290)
+
+                                     10         20        30       
+sp|Q1X                       MSCDMEKTMSSVDSLPATP-ASEVPVLTVSPAD---TS
+                                     .::. .  . : ::. ::  :.: :   ::
+sp|P53 GLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPV--VDPYDMPGTS
+          50        60        70        80        90         100   
+
+           40        50          60        70          80        90
+sp|Q1X LNSADVKTQEVKPEEKK--PAKKRKSWGQELPVPKTNLP--PRKRAKTEDEKEQRRIERV
+        ..  ..         .  :. .  . :     :    :  ::... : .:.:.::..: 
+sp|P53 YSTPGMSGYSSGGASGSGGPSTSGTTSGPGPARPARARPRRPREETLTPEEEEKRRVRRE
+           110       120       130       140       150       160   
+
+              100       110       120       130       140       150
+sp|Q1X LRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV
+        ::. ::   :.:.:   ..:. :  :.:...  : ....... :..::   :.      
+sp|P53 -RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGC
+            170       180       190       200       210       220  
+
+              160       170       180       190       200       210
+sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+       .    . : ::  : .     :     ..: .     : : : :   .    : .:. : 
+sp|P53 KIPYEEGPGPGPLAEVRDL--PGSAPAKEDGFSWLLPPPPPPPLPFQTSQDAPPNLTAS-
+            230       240         250       260       270          
+
+              220       230       240       250       260       270
+sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS
+        .  :  :.: :                                                
+sp|P53 -LFTHSEVQVLGDPFPVVNPSYTSSFVLTCPEVSAFAGAQRTSGSDQPSDPLNSPSLLAL
+      280       290       300       310       320       330        
+
+>>sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprinus c  (347 aa)
+ s-w opt: 168  Z-score: 157.8  bits: 37.6 E(516081): 0.29
+Smith-Waterman score: 168; 21.7% identity (55.5% similar) in 299 aa overlap (6-291:39-319)
+
+                                        10        20           30  
+sp|Q1X                          MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPAD
+                                     : ..::.. .:.. : :  : :   :.:  
+sp|P79 DCDASSRCSTASAAAESVACYPLNQTQKFTELSVSSASFVPTVTAISSCPDLQWMVQPMV
+       10        20        30        40        50        60        
+
+             40        50        60        70        80        90  
+sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+       .:.  ..  ..  .:.   :  : .  : .   :..:   : .  . .:.:..:..:  :
+sp|P79 SSVAPSNGGARSYNPN---PYPKMRVTGTK--SPNSNKRARAEQLSPEEEEKKRVRRE-R
+       70        80           90         100       110       120   
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :. ::   :.:.:   . :. :  ..:.... : . ....  :..::   ::       .
+sp|P79 NKMAAAKCRNRRRELTDTLQAETDELEDEKSALQNDIANLLKEKERLEFILA-------A
+            130       140       150       160       170            
+
+            160       170        180       190        200       210
+sp|Q1X SRANTPMPGSPATASPTLT-PTLFKQERDELPLERIPFPTPSLSD-YSPTLKPSTLAESS
+        .    .:.: ..  :. . : . .   . .     :  : : :. .: : . .... . 
+sp|P79 HKPICKIPSSSVSPIPAASVPEIHSITTSVVSTANAPVTTSSSSSLFSSTASTDSFGSTV
+         180       190       200       210       220       230     
+
+                      220       230       240       250       260  
+sp|Q1X DVAQ-HPAV-------SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG
+       .... .:..       . : ::  . ..:  ::.:.:  .. ... .: ...:.. :   
+sp|P79 EISDLEPTLEESLELLAKAELE-TARSVPDVDLSSSLYARDWESLYTP-ANNDLEPLCTP
+         240       250        260       270       280        290   
+
+            270       280       290       300       310       320  
+sp|Q1X DSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKT
+         .  :  ... ....:   :.   ..::                               
+sp|P79 VVTRTPACTTYTSSFTFTYPEN---DVFPSCGPVHRRGSSSNDQSSDSLNSPTLLTL   
+           300       310          320       330       340          
+
+>>sp|Q0D9R7|ARFS_ORYSJ Auxin response factor 19 OS=Oryza  (1161 aa)
+ s-w opt: 178  Z-score: 157.4  bits: 39.3 E(516081):  0.3
+Smith-Waterman score: 178; 22.4% identity (58.4% similar) in 250 aa overlap (1-237:530-774)
+
+                                             10        20        30
+sp|Q1X                               MSCDMEKTMSSVDSLPATPASEVPVLTVSP
+                                     .:   .. . ....:     :   .: .: 
+sp|Q0D NIQFNTPKLSQQMQPVNELAKAGIPLNQLGVSTKPQEQIHDASNLQRQQPSMNHMLPLSQ
+     500       510       520       530       540       550         
+
+               40        50        60        70        80        90
+sp|Q1X ADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERV
+       :.:.:..:.: .:.   ...  . . .. .   :.   .   ... . .....:.. ...
+sp|Q0D AQTNLGQAQVLVQNQMQQQHASSTQGQQPATSQPLLLPQQQQQQQQQQQQQQQQQQQQKL
+     560       570       580       590       600       610         
+
+              100            110        120        130       140   
+sp|Q1X LRNRAAAQTSRERKRL-----EMEKLENEKIQM-EQQNQF-LLQRLSQMEAENNRLSQQ-
+       :...      .....:     .. .: :...:. .:: :. :::.:.:..  .. :::  
+sp|Q0D LQQQQQQLLLQQQQQLSKMPAQLSSLANQQFQLTDQQLQLQLLQKLQQQQ--QSLLSQPA
+     620       630       640       650       660         670       
+
+              150       160       170        180       190         
+sp|Q1X --LAQLAAEVRGSRANTPMPGSPATASPTLTPT-LFKQERDELPLERIPFPTPSLSDYSP
+         ::::    . ..    :  .  . : ::.   .. :.  ..: .  :.: :  .. . 
+sp|Q0D VTLAQLPLIQEQQKLLLDMQ-QQLSNSQTLSQQQMMPQQSTKVPSQNTPLPLPVQQEPQQ
+       680       690        700       710       720       730      
+
+     200         210       220       230       240       250       
+sp|Q1X TL--KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN
+        :  : . ::..:..:  :..::  .   ::  ::.  :.                    
+sp|Q0D KLLQKQAMLADTSEAAVPPTTSVNVISTTGS--PLMTTGATHSVLTEEIPSCSTSPSTAN
+        740       750       760         770       780       790    
+
+       260       270       280       290       300       310       
+sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE
+                                                                   
+sp|Q0D GNHLLQPILGRNKHCSMINTEKVPQSAAPMSVPSSLEAVTATPRMMKDSPKLNHNVKQSV
+          800       810       820       830       840       850    
+
+>>sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sa  (271 aa)
+ s-w opt: 165  Z-score: 157.0  bits: 37.1 E(516081): 0.32
+Smith-Waterman score: 165; 28.3% identity (53.7% similar) in 205 aa overlap (44-232:72-263)
+
+            20        30        40        50        60        70   
+sp|Q1X SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR
+                                     . .: . .:.  : . :   : : .   : 
+sp|P15 NTMSGSQELQWMVQPHFLGPSSYPRPLTYPQYSPPQPRPGVIR-ALG---PPPGVRRRPC
+              50        60        70        80            90       
+
+            80        90       100              110       120      
+sp|Q1X KRAKTEDEKEQRRIERVLRNRAAAQTSRERKR-------LEMEKLENEKIQMEQQNQFLL
+       .. . :.: :.::..:  ::. ::   :.:..        : .:::.::  .... . : 
+sp|P15 EQISPEEE-ERRRVRRE-RNKLAAAKCRNRRKELTDFLQAETDKLEDEKSGLQREIEELQ
+       100        110        120       130       140       150     
+
+        130         140       150        160         170        180
+sp|Q1X QRLSQMEA--ENNRLSQQLAQLAAEV-RGSRANTPMPGSPATASP--TLTP-TLFKQERD
+       ..  ..:   : .:   .. . : :   :: ..:  : .:    :  .:.:  ... :  
+sp|P15 KQKERLELVLEAHRPICKIPEGAKEGDTGSTSGTSSPPAPCRPVPCISLSPGPVLEPEAL
+         160       170       180       190       200       210     
+
+              190       200          210       220       230       
+sp|Q1X ELPLERIPFPTPSLSDYSPTL---KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS
+       . :     . ::::. ..:.:    :::  :    :.. . : .:   : :. ::     
+sp|P15 HTPTL---MTTPSLTPFTPSLVFTYPST-PEPCASAHRKSSSSSG---DPSSDPLGSPTL
+         220          230       240        250          260        
+
+       240       250       260       270       280       290       
+sp|Q1X DLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVN
+                                                                   
+sp|P15 LAL                                                         
+      270                                                          
+
+>>sp|Q5B3C8|NST1_EMENI Stress response protein nst1 OS=E  (1125 aa)
+ s-w opt: 176  Z-score: 155.8  bits: 39.0 E(516081): 0.37
+Smith-Waterman score: 176; 24.5% identity (55.0% similar) in 302 aa overlap (43-340:528-798)
+
+             20        30        40        50        60        70  
+sp|Q1X DSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP
+                                     :: : ::..  :...   .:    . .   
+sp|Q5B KKRLAKLAKDEEKARREAQKAAEEAAAKAEQERKLEEQRKKKEEQRKKRE---AERKAQE
+       500       510       520       530       540          550    
+
+             80        90       100       110       120       130  
+sp|Q1X RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM
+       ..::. : ::..:  :.  :.. : . .::.:. : .. :. : . ... ..  :. .: 
+sp|Q5B EERARKEAEKHKRLREERERQEEAERRQREQKEQEKKRREEAKRKEREERELREQKAKQE
+          560       570       580       590       600       610    
+
+              140       150       160        170       180         
+sp|Q1X EAEN--NRLSQQLAQLAAEVRGSRANTPMPGSPATASP-TLTPTLFKQERDELPLE-RIP
+       . ..  .. :..  . .:. ...:: . .: ::..  : . ::.. :      : . : :
+sp|Q5B RERKAQDEQSRRERERVAQEQAKRAPNLQPVSPVSPPPESATPVVSKAP---TPAKGRRP
+          620       630       640       650       660          670 
+
+      190       200       210       220       230       240        
+sp|Q1X FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVA
+           : :. ::  . :. ::.:.:. .   :.   ...::..: .  :  . :      .
+sp|Q5B SQQGSHSS-SPRSQ-SASAEASQVSPR---SAPLSQSSGSSIPKYGSGHPILHPHP---G
+              680        690          700       710       720      
+
+      250       260       270       280       290       300        
+sp|Q1X APLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGI
+       ::.:   ..:  :   .. :..    .::.     : .: ..:  :   ...    :.:.
+sp|Q5B APMSP--LGRT-H-PPGLSPSNPPGLSGLVPRPPMGHELPTYPPHSSPYMNQ----LRGF
+             730         740       750       760       770         
+
+      310       320       330       340                            
+sp|Q1X EMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC                       
+          .:.:         : ::....     :.:                            
+sp|Q5B PAPNGIP---------VLPGMNGTRPMPPGRGFPLDAPGIPFHAQPPFSGIFSPQPSGLP
+         780                790       800       810       820      
+
+sp|Q5B HGHSRQPSNSFERSPLDTSAQPFPISRPSPIKRPPSTQQEQRNSRRDVDDLSAQLGSSAL
+        830       840       850       860       870       880      
+
+>>sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase   (806 aa)
+ s-w opt: 173  Z-score: 155.7  bits: 38.5 E(516081): 0.38
+Smith-Waterman score: 173; 27.0% identity (51.0% similar) in 259 aa overlap (3-236:429-680)
+
+                                           10          20        30
+sp|Q1X                             MSCDMEKTMSSVDSLP--ATPASEVPVLTVSP
+                                     : ::   :   .::  . :: ..  ::..:
+sp|Q9W IRFQPSLQPVASEPVCPDVEMPSPWAPSGDCAME---SPPPALPPCSDPAPDTVDLTLQP
+      400       410       420       430          440       450     
+
+               40        50              60        70         80   
+sp|Q1X ADTSLNSADVKTQEVKPEEKKPA------KKRKSWGQELPVPKTNLP-PRKRAKTEDEKE
+       :  . . :  : . .  .. : :      :. .:  .. :    . : ::: . ......
+sp|Q9W APPASELAPPKREGAISDNTKAALKAALLKSLRSRLRDGPSAPLEAPEPRKPVTAQERQR
+         460       470       480       490       500       510     
+
+            90       100       110       120       130        140  
+sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR-LSQQ
+       .:. .:  : :      ::..: : :. :     .   .   :  :  . ..:.: : ..
+sp|Q9W EREEKR--RRRQERAKEREKRRQERERKERGAGTLGGPSTDPLAGL--VLSDNDRSLLER
+         520         530       540       550         560       570 
+
+            150       160        170        180        190         
+sp|Q1X LAQLAAEVRGSRANTPMPG-SPATASPTLTPTL-FKQERDEL-PLERIPFPT--PSLSDY
+        ...:     . : .: :. .:..:.:: :::   .:    : :   :: :.  :     
+sp|Q9W WTRMARPPAPAPAPAPAPAPAPSSAQPTSTPTGPVSQSTGPLQPAGSIPGPASQPVCPPP
+             580       590       600       610       620       630 
+
+       200               210       220         230       240       
+sp|Q1X SPTLKPS--------TLAESSDVAQHPAVSVAGLEGDGS--ALPLFDLGSDLKHHSTDDV
+       .:. .:.        :   .: .:..  :  .:: :.:.  .:: :  :           
+sp|Q9W GPVPQPAGPIPAPLQTAPSTSLLASQSLVPPSGLPGSGAPEVLPYFPSGPPPPDPGLTPQ
+             640       650       660       670       680       690 
+
+       250       260       270       280       290       300       
+sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG
+                                                                   
+sp|Q9W PSTSESPDVNLVTQQLSKSQVEDPLPPVFSGTPKGSGAGYGVGFDLEEFLNQSFDMGVAD
+             700       710       720       730       740       750 
+
+>>sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa G  (380 aa)
+ s-w opt: 166  Z-score: 155.2  bits: 37.3 E(516081):  0.4
+Smith-Waterman score: 166; 28.4% identity (52.4% similar) in 250 aa overlap (9-237:55-297)
+
+                                     10        20           30     
+sp|Q1X                       MSCDMEKTMSSVDSLPATPASEV-PVLT--VSPADTSL
+                                     .:::. .:.. :  . : :   :.:. .: 
+sp|O97 DSLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSVNFIPTVTAISISPDLQWLVQPTLVS-
+           30        40        50        60        70        80    
+
+          40            50        60        70            80       
+sp|Q1X NSADVKTQEVKP----EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTE----DEKEQRRI
+       . :  .:.  .:      .  : .: .  . .:  ...   : :.:.:    .:.:.:::
+sp|O97 SVAPSQTRAPHPYGVPTPSAGAYSRAGAVKTMPGGRAQSIGR-RGKVEQLSPEEEEKRRI
+            90       100       110       120        130       140  
+
+        90       100       110       120       130       140       
+sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA
+       .:  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::   
+sp|O97 RRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHR
+             150       160       170       180       190       200 
+
+       150       160       170          180          190       200 
+sp|Q1X AEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTL
+          .    .  .:   ..::  :.   :     : .:   :::   : : ::.    :. 
+sp|O97 PACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVE---PVK
+              210       220       230       240       250          
+
+                210       220       230        240       250       
+sp|Q1X KPSTL---AESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFN
+       : :..   ::  :    :: :  :    . ..: .:: ::                    
+sp|O97 KVSSMELKAEPFDDFLFPASSRPGGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMA
+       260       270       280       290       300       310       
+
+       260       270       280       290       300       310       
+sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE
+                                                                   
+sp|O97 TELEPLCTPVVTCTPSCTAYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTL
+       320       330       340       350       360       370       
+
+>>sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcriptio  (349 aa)
+ s-w opt: 165  Z-score: 155.0  bits: 37.1 E(516081): 0.41
+Smith-Waterman score: 165; 28.4% identity (61.5% similar) in 148 aa overlap (18-160:212-349)
+
+                            10        20        30          40     
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD--VKTQEV
+                                     ::...   . .:: .. :.: .   .:...
+sp|Q06 GSEVDISEGDRKPDSAAYITLIPPCVKEEDTPSDNDSGICMSP-ESYLGSPQHSPSTSRA
+             190       200       210       220        230       240
+
+           50        60        70          80        90       100  
+sp|Q1X KPEE-KKPAKKRKSWGQELPVPKTNLPP--RKRAKTEDEKEQRRIERVLRNRAAAQTSRE
+        :..  .:. .: :     : ::   ::     ::.. :: ....... .:..::   :.
+sp|Q06 PPDNLPSPGGSRGS-----PRPKPYDPPGVSLTAKVKTEKLDKKLKKMEQNKTAATRYRQ
+              250            260       270       280       290     
+
+            110       120       130       140       150       160  
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS
+       .:: :.: : .:  ..:..:. : .. ...  :     : : .:  ::: .:..  .:  
+sp|Q06 KKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEEVRKARGQKRVP  
+         300       310       320           330       340           
+
+            170       180       190       200       210       220  
+sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG
+
+>>sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Cotu  (311 aa)
+ s-w opt: 161  Z-score: 152.2  bits: 36.5 E(516081): 0.59
+Smith-Waterman score: 161; 27.3% identity (62.6% similar) in 139 aa overlap (29-163:171-307)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS
+                                     .:. .: .: ...:.. .   .. .. : :
+sp|Q90 HHQYPAVTHEDLAGSGHPHHHHHHHHHASPTPSTSSSSSQQLQTSHQQHPPSSSVEDRFS
+              150       160       170       180       190       200
+
+       60        70        80           90       100       110     
+sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+         : . .   .:  . :. :.::    .:.:  :.:.::. ::. : ..  . ..:::::
+sp|Q90 DDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHHLENEK
+              210       220       230         240       250        
+
+         120       130       140        150       160       170    
+sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLTPTL
+        :. :: . : :.....  : .  . .  .::..  : . ...  :.::           
+sp|Q90 TQLIQQVEQLKQEVTRLARERDAYKLKCEKLASNGFREAGSTSDNPSSPEFFM       
+      260       270       280       290       300       310        
+
+          180       190       200       210       220       230    
+sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD
+
+>>sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gall  (311 aa)
+ s-w opt: 161  Z-score: 152.2  bits: 36.5 E(516081): 0.59
+Smith-Waterman score: 161; 27.3% identity (62.6% similar) in 139 aa overlap (29-163:171-307)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS
+                                     .:. .: .: ...:.. .   .. .. : :
+sp|Q90 HHQYPAVTHEDLAGSGHPHHHHHHHHQASPTPSTSSSSSQQLQTSHQQHPPSSSVEDRFS
+              150       160       170       180       190       200
+
+       60        70        80           90       100       110     
+sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+         : . .   .:  . :. :.::    .:.:  :.:.::. ::. : ..  . ..:::::
+sp|Q90 DDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHHLENEK
+              210       220       230         240       250        
+
+         120       130       140        150       160       170    
+sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLTPTL
+        :. :: . : :.....  : .  . .  .::..  : . ...  :.::           
+sp|Q90 TQLIQQVEQLKQEVTRLARERDAYKLKCEKLASNGFREAGSTSDNPSSPEFFM       
+      260       270       280       290       300       310        
+
+          180       190       200       210       220       230    
+sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD
+
+>>sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-bi  (461 aa)
+ s-w opt: 163  Z-score: 150.9  bits: 36.8 E(516081):  0.7
+Smith-Waterman score: 163; 26.4% identity (52.7% similar) in 201 aa overlap (48-236:218-404)
+
+        20        30        40        50        60        70       
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK
+                                     .:::   :.   :  ::   :.::  :   
+sp|Q68 SSGDLQQHHLGASYLLRPGAGHCQELVLTEDEKKLLAKE---GITLP---TQLPLTKY--
+       190       200       210       220          230              
+
+        80        90       100       110       120       130       
+sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN
+         .:.  ..:.: .::. .:: ::..:.  .. ::..      ::: : ... ..: .: 
+sp|Q68 --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNL
+       240       250       260       270       280       290       
+
+       140       150       160                170       180        
+sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP
+        : .:: .: : :  : ... . :. ...          :...:  :  .. : : .  :
+sp|Q68 SLLEQLKKLQAIVVQSTSKSAQTGTCVAVLLLSFALIILPSISP--FGPNKTESPGDFAP
+       300       310       320       330       340         350     
+
+         190       200       210       220       230       240     
+sp|Q1X ---FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD
+          :     .: .  .  ...  :   . .: ....  :. ::  :  : :         
+sp|Q68 VRVFSRTLHNDAASRVAADAVPGSEAPGPRPEADTTREESPGS--PGADWGFQDTANLTN
+         360       370       380       390         400       410   
+
+         250       260       270       280       290       300     
+sp|Q1X DVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTL
+                                                                   
+sp|Q68 STEELDNATLVLRNATEGLGQVALLDWVAPGPSTGSGRAGLEAAGDEL            
+           420       430       440       450       460             
+
+>>sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schi  (171 aa)
+ s-w opt: 154  Z-score: 150.5  bits: 35.3 E(516081): 0.73
+Smith-Waterman score: 154; 25.8% identity (55.8% similar) in 163 aa overlap (74-223:4-163)
+
+            50        60        70        80        90       100   
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER
+                                     :. ...:::..: .:   ::: ::.  :..
+sp|Q09                            MTAKKKEVDDEKRRRILE---RNRIAASKFRQK
+                                          10           20        30
+
+           110       120       130       140            150        
+sp|Q1X KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL-----AQLAAEVRG-----S
+       :.  ...::.      .:.. :   :::.. :  ::..::      : ....:.     .
+sp|Q09 KKEWIKELEQTANAAFEQSKRLQLLLSQLQQEAFRLKSQLLAHQGCQCSVKIRSVLTDFQ
+               40        50        60        70        80        90
+
+           160       170          180       190       200       210
+sp|Q1X RANTPMPGSPATASPTLTP---TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+        :.. . ..  .  :.  :   .....  .  : .  :       .  : . ::.   .:
+sp|Q09 TAHNALHSQHMAYRPVQPPPGDNMLESVVSVSPTQMHPSLQGLPPNQHPQMPPSSQQPNS
+              100       110       120       130       140       150
+
+              220       230       240       250       260       270
+sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS
+       : .:.   :.:::                                               
+sp|Q09 DDVQQHMFSAAGLPRSLGGPI                                       
+              160       170                                        
+
+>>sp|O88778|BSN_RAT Protein bassoon OS=Rattus norvegicus  (3938 aa)
+ s-w opt: 181  Z-score: 150.4  bits: 39.8 E(516081): 0.74
+Smith-Waterman score: 181; 26.0% identity (55.7% similar) in 235 aa overlap (15-236:2294-2524)
+
+                               10        20        30        40    
+sp|Q1X                 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQE
+                                     :::  : : :. :..:  . .. : :    
+sp|O88 STIPPAEGPVYLGKPAAAKASGAGGPPRPELPAGGAREEPLSTTAPP-AVIKEAPVAQAP
+          2270      2280      2290      2300      2310       2320  
+
+           50        60        70        80          90       100  
+sp|Q1X VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDE--KEQRRIERVLRNRAAAQTSRE
+       . :  .:::    . :.   :    .  ...:. ::.  :.:... .. :.:.  .  :.
+sp|O88 APPPGQKPAGDAAA-GSGSGVLGRPVMEKEEASQEDRQRKQQEQLLQLERERVELEKLRQ
+           2330       2340      2350      2360      2370      2380 
+
+            110          120        130        140       150       
+sp|Q1X RKRLEMEKLENEKIQME---QQNQFLLQR-LSQMEA-ENNRLSQQLAQLAAEVRGSRANT
+         ::. :.:: :.....   ...:.:.:: :..... ... :.::  .  :.   .: . 
+sp|O88 L-RLQ-EELERERVELQRHREEEQLLVQRELQELQTIKHHVLQQQQEERQAQFALQREQL
+              2390      2400      2410      2420      2430         
+
+       160       170       180       190        200       210      
+sp|Q1X PMPGSPATASPTLTPTLFKQERDELPLERIPFP-TPSLSDYSPTLKPSTLAESSDV---A
+        .          :   : .: ...   .. ::: :    . .:    . ::....     
+sp|O88 AQQRLQLEQIQQLQQQLQQQLEEQKQRQKAPFPATCEAPSRGPPPAATELAQNGQYWPPL
+    2440      2450      2460      2470      2480      2490         
+
+            220       230        240       250       260       270 
+sp|Q1X QHPA-VSVAGLEGDGSAL-PLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS
+        : : ..::: :: :.:  :..  :                                   
+sp|O88 THTAFIAVAGTEGPGQAREPVLHRGLPSSASDMSLQTEEQWEAGRSGIKKRHSMPRLRDA
+    2500      2510      2520      2530      2540      2550         
+
+>>sp|Q8VCH8|UBXN4_MOUSE UBX domain-containing protein 4   (506 aa)
+ s-w opt: 163  Z-score: 150.1  bits: 36.8 E(516081): 0.77
+Smith-Waterman score: 163; 22.8% identity (51.4% similar) in 333 aa overlap (19-337:146-459)
+
+                           10        20        30        40        
+sp|Q1X             MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE
+                                     : :.   :  .:: ....:  .   :   .
+sp|Q8V KGEASVTNDNQSESSVSTPSASFEPDVCENPESKNTELCETPATSDIKSDTATGGECTGH
+         120       130       140       150       160       170     
+
+       50        60        70        80        90       100        
+sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM
+       ...  . .   .:.     :    :   : :...:..: :.. :.    .   ::..   
+sp|Q8V DSHSQEPHGCSNQRPAEDLTVRVERLTKKLEERREEKRKEEAQRE---IKKEIERRKTGK
+         180       190       200       210       220          230  
+
+      110       120       130           140       150       160    
+sp|Q1X EKLENEKIQMEQQNQFLLQRLSQMEAEN----NRLSQQLAQLAAEVRGSRANTPMPGSPA
+       : :. .. : :. .. .:.. :. .::.    .:..::.:   :: :..:      .  :
+sp|Q8V EMLDYKRKQEEELTKRMLEERSREKAEDRAARERIKQQIALDRAE-RAARFAKTKEAEAA
+            240       250       260       270        280       290 
+
+          170             180       190       200       210        
+sp|Q1X TASPTLTP---TLFKQE---RDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV
+        :.  ::    :  :.:   ::.  . :: :  :. :...  . ::  :   .. :  : 
+sp|Q8V KAAALLTKQAGTEVKRESTARDRSTIARIQFRLPDGSSFTNQF-PSD-APLEEARQFAAQ
+             300       310       320       330         340         
+
+      220       230           240       250       260       270    
+sp|Q1X SVAGLEGDGSALPLFD----LGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE
+       .:..  :. :   .:        : :..  :   :: .  .   :  :    .: .:. .
+sp|Q8V TVGNTYGNFSLATMFPRREFTREDYKRRLLDLELAPSA--SVVLLPAG----RPATSIVH
+     350       360       370       380         390           400   
+
+          280       290       300       310       320       330    
+sp|Q1X DGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTT
+       .. . :.        .:: ..  . :.      . ...  : .:. ...:..:. .::..
+sp|Q8V SS-SGDIWTLLGTVLYPFLAIWRLISN------FLFSNPPPAQTSARATSTEPSNSASSS
+            410       420             430       440       450      
+
+          340                                            
+sp|Q1X RCDGQGIAAGC                                       
+       . .                                               
+sp|Q8V KSEKREPVRKRMLEKRGEDFKKEGKIYRLRTQDDGEDENNTWNGNSTQQM
+        460       470       480       490       500      
+
+>>sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-bi  (370 aa)
+ s-w opt: 160  Z-score: 149.9  bits: 36.3 E(516081): 0.79
+Smith-Waterman score: 160; 29.7% identity (56.5% similar) in 138 aa overlap (18-146:119-256)
+
+                            10        20           30         40   
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVP-VLTVS--PADTSLNSAD-VKTQ
+                                     :::  :: . :::  :.:.  .    :.:.
+sp|Q9D EVVYDSGTLQGTQREAGPTFGLISIQIDQWTPALMVPDACTVSGLPSDSHRHILPRVSTR
+       90       100       110       120       130       140        
+
+            50             60        70        80        90        
+sp|Q1X EVKPEEKKPAKKRKSW-----GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQ
+          :    :. ... .      : :     .:: .      .:.  ..:.: .::. .::
+sp|Q9D APAPPAAMPSCQHHLFLTDEEKQLLAQEGITLPSHLPLTKAEERILKKIRRKIRNKQSAQ
+      150       160       170       180       190       200        
+
+      100       110       120       130       140       150        
+sp|Q1X TSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP
+        ::.::.  .. ::..     .::: : ......: .:  : .:. ::            
+sp|Q9D DSRRRKKEYLDGLESRVAACSEQNQKLQRKVQELERQNIFLMEQVRQLQKLTAQTSSRAA
+      210       220       230       240       250       260        
+
+      160       170       180       190       200       210        
+sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV
+                                                                   
+sp|Q9D QTSTCVLILLFSLALIILPSFSPFQGQSEARPEDYQLHGVISRNILTHENVTENLESPVL
+      270       280       290       300       310       320        
+
+>>sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=M  (1319 aa)
+ s-w opt: 171  Z-score: 149.9  bits: 38.1 E(516081): 0.79
+Smith-Waterman score: 171; 22.7% identity (56.7% similar) in 194 aa overlap (43-227:675-868)
+
+             20        30        40        50        60        70  
+sp|Q1X DSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP
+                                     :. : ::.:  :. .  ..:    . .   
+sp|A4R AQAEEKARKDAEKAAEEAERLAEEQRRQEEQRQKNEERKKKKEAQRKAEEEERQRKEAER
+          650       660       670       680       690       700    
+
+             80          90         100       110        120       
+sp|Q1X RKRAKTEDEK--EQRRIERVLRNRA--AAQTSRERKRLEMEKLENE-KIQMEQQNQFLLQ
+        .::. . :.  :: :  :  ...   : . ...:..   :  : : . . :. ..  :.
+sp|A4R LRRAQEQKERQAEQDRKAREAKEKEKKAKEEAKQREKAARELKEREARERKEKADKERLE
+          710       720       730       740       750       760    
+
+       130        140       150       160          170       180   
+sp|Q1X RLSQMEAENN-RLSQQLAQLAAEVRGSRANTPMPGSPA---TASPTLTPTLFKQERDELP
+       . ....::.. : .:. :. :..   . ::.:.: .::   . .:. .:.: ....  . 
+sp|A4R KEAKIKAEKEAREAQRKAERASQKATTLANVPVPTGPARRQSQAPNPAPALPQSQQASVA
+          770       780       790       800       810       820    
+
+           190       200       210       220       230       240   
+sp|Q1X LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHS
+         ..:  .:.:       ::   ...   ..  :.. .  .: :                
+sp|A4R SPQLPTAVPALPKLPTPQKPRRTSQQEPFTSGFAAQQVHGQGAGQYPAPPKAATPVHTSP
+          830       840       850       860       870       880    
+
+           250       260       270       280       290       300   
+sp|Q1X TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPV
+                                                                   
+sp|A4R GPGGLLSKGSSSQGQSLHSQATSPLGTSLPTSTSLPTPFGMPHPPPNQHYPPGIGPLNAP
+          890       900       910       920       930       940    
+
+>>sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcriptio  (351 aa)
+ s-w opt: 159  Z-score: 149.4  bits: 36.1 E(516081): 0.85
+Smith-Waterman score: 159; 31.6% identity (64.3% similar) in 98 aa overlap (66-160:258-351)
+
+          40        50        60        70           80        90  
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR---AKTEDEKEQRRIERVLR
+                                     ::   :: ..   ::.. :: ....... .
+sp|P18 YLGSPQHSPSTRGSPNRSLPSPGVLCGSARPKPYDPPGEKMVAAKVKGEKLDKKLKKMEQ
+       230       240       250       260       270       280       
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :..::   :..:: :.: : .:  ..:..:. : .: ...  :     : : .:  ::: 
+sp|P18 NKTAATRYRQKKRAEQEALTGECKELEKKNEALKERADSLAKEI----QYLKDLIEEVRK
+       290       300       310       320       330           340   
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+       .:..  .:                                                    
+sp|P18 ARGKKRVP                                                    
+           350                                                     
+
+>>sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricet  (381 aa)
+ s-w opt: 159  Z-score: 148.7  bits: 36.1 E(516081): 0.92
+Smith-Waterman score: 159; 25.9% identity (49.0% similar) in 247 aa overlap (2-237:57-298)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|O88 LSYYHSPADSFSSMGSPVNAQDFCTDLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   : :  .    .    :  : :.   . . .   . .  . .:.:.:::.
+sp|O88 PSQTRAPHPYGVPTPSTGAYSRAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|O88 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .:    .::  ::   :     : .:   :::   : : :::   .   .
+sp|O88 ACKIPD-DLGFPEEMFVASLDLTGGLPEATTPESEEAFSLPLLNDPEPKPSLEPVKSISN
+             210       220       230       240       250       260 
+
+            210       220        230        240       250       260
+sp|Q1X PSTLAESSDVAQHPAVSV-AGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLF
+           ::  :    :: :  .: :  . ..: .:: ::                       
+sp|O88 VELKAEPFDDFLFPASSRPSGSETTARSVPDMDLSGSFYAADWEPLHSSSLGMGPMVTEL
+             270       280       290       300       310       320 
+
+              270       280       290       300       310       320
+sp|Q1X HGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTC
+                                                                   
+sp|O88 EPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL
+             330       340       350       360       370       380 
+
+>>sp|A5PKJ4|MK07_BOVIN Mitogen-activated protein kinase   (781 aa)
+ s-w opt: 165  Z-score: 148.5  bits: 37.1 E(516081): 0.94
+Smith-Waterman score: 165; 27.0% identity (48.0% similar) in 244 aa overlap (3-236:429-655)
+
+                                           10        20        30  
+sp|Q1X                             MSCDMEKTMSSVDSLPATPASEVPVLTVSPAD
+                                     : ::.   .    :. :: ..  ::..:  
+sp|A5P IRFQPSLQPVASEPGCPDVEMPSPWAPSGDCAMESPPPAPLPCPG-PAPDTIDLTLQPPP
+      400       410       420       430       440        450       
+
+             40        50              60        70         80     
+sp|Q1X TSLNSADVKTQEVKPEEKKPA------KKRKSWGQELPVPKTNLP-PRKRAKTEDEKEQR
+        . . :  : . .  .. : :      :. .:  .. :    . : ::: . .......:
+sp|A5P PASEPAPPKKEGAISDNTKAALKAALLKSLRSRLRDGPSAPLEAPEPRKPVTAQERQRER
+       460       470       480       490       500       510       
+
+          90       100       110       120       130       140     
+sp|Q1X RIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQ
+       . .:  : :      ::..: : :. :         .   :  :  . ..:.:   .: .
+sp|A5P EEKR--RRRQERAKEREKRRQERERKERGAGVSGGPSADPLAGL--VLSDNDR---SLLE
+       520         530       540       550         560          570
+
+         150       160       170        180       190       200    
+sp|Q1X LAAEVRGSRANTPMPGSPATASPTLTPTL-FKQERDELPLERIPFPTPSLSDYSPTLKPS
+            : .:   :   .:::: :   :.    :    ::    : :.:. .   :.  :.
+sp|A5P -----RWTRMAQPPAPAPATARPPSPPAGPATQPTGPLPQPACPPPAPAAG---PA-APQ
+                   580       590       600       610           620 
+
+          210       220         230       240       250       260  
+sp|Q1X TLAESSDVAQHPAVSVAGLEGDG--SALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG
+       : : :. .: .: :   :: : .  :.:: :  :                          
+sp|A5P TTAASGLLAPQPLVPPPGLPGPSALSVLPYFPSGPPPPDPGGAPQPSTSESPDVTLVTQQ
+             630       640       650       660       670       680 
+
+            270       280       290       300       310       320  
+sp|Q1X DSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKT
+                                                                   
+sp|A5P LSKSQVEDPLPPVFSGTPKGSGAGYGVGFDLEEFLNQSFDMGVADGPQDGQADSASLSAS
+             690       700       710       720       730       740 
+
+>>sp|Q1DQC1|PAN1_COCIM Actin cytoskeleton-regulatory com  (1485 aa)
+ s-w opt: 170  Z-score: 148.0  bits: 37.9 E(516081):    1
+Smith-Waterman score: 170; 23.6% identity (51.8% similar) in 284 aa overlap (5-265:989-1264)
+
+                                         10        20              
+sp|Q1X                           MSCDMEKTMSSVDSLPATPASEVP----------
+                                     . .  : : : :  :.:. :          
+sp|Q1D RQEREKREKEERRRRAEEEDAKREAERQKRLAQEKSPVTSPPPKPSSKKPPPPPSRKVRT
+      960       970       980       990      1000      1010        
+
+            30        40        50        60        70        80   
+sp|Q1X -VLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE
+        :     :  . .:. ..  ... :::. : :... .::    . .    :: . :  .:
+sp|Q1D DVTESVEAKKAEDSVVASKARAEQEEKERALKQEQEAQEAERKQLE-DEAKRQEEELARE
+     1020      1030      1040      1050      1060       1070       
+
+            90         100       110       120       130           
+sp|Q1X QRRIERVLR--NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR---
+       ..  .  ::  .. . : . .... . .: . ::   :.. ..  :: ...:: . :   
+sp|Q1D KEAAQARLRALEEQVRQGKIKKQEEKRRKQQAEKEAKEKEARLAAQR-AELEAAQARERE
+      1080      1090      1100      1110      1120       1130      
+
+      140       150       160       170          180       190     
+sp|Q1X LSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDELPLERIPFPTPSLS
+       :..:: ... :  .:  . :.  .: :..:: .   :. : :     :   .: :. .  
+sp|Q1D LQRQLENMGEEESSSDDEGPIEITPQTSTPTQSQVLPAPFPQPSP--PTAALPVPAIQEP
+       1140      1150      1160      1170      1180        1190    
+
+         200       210       220       230       240       250     
+sp|Q1X DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPL----
+       : . . .::    :   . .:. ..   : . :  : :    .:...:. ..: :     
+sp|Q1D DQDVAREPSPTLPSPVETPEPVKQTLPPETE-SRNPYF---RQLSQQSAPSAAQPTHEMQ
+         1200      1210      1220       1230         1240      1250
+
+             260       270       280       290       300       310 
+sp|Q1X SDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMA
+       : . :.:: . .:.                                              
+sp|Q1D STNPFHRLAQQESTSKSAFTTDATVPGPLERKSRVRPEEDDWSAAESENESDEDDDRVAG
+             1260      1270      1280      1290      1300      1310
+
+>>sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus muscul  (380 aa)
+ s-w opt: 158  Z-score: 147.8  bits: 35.9 E(516081):    1
+Smith-Waterman score: 158; 25.2% identity (48.8% similar) in 246 aa overlap (2-237:57-297)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|P01 LSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   . :: .    .    :  : :.   . . .   . .  . .:.:.:::.
+sp|P01 PSQTRAPHPYGLPTQSAGAYARAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|P01 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .:   ..::  ::   :     : .:   :::   : : :::   .   .
+sp|P01 ACKIPD-DLGFPEEMSVASLDLTGGLPEASTPESEEAFTLPLLNDPEPKPSLEPVKSISN
+             210       220       230       240       250       260 
+
+            210       220       230        240       250       260 
+sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH
+           ::  :    :: :  .    . ..:  :: ::                        
+sp|P01 VELKAEPFDDFLFPASSRPSGSETSRSVPDVDLSGSFYAADWEPLHSNSLGMGPMVTELE
+             270       280       290       300       310       320 
+
+             270       280       290       300       310       320 
+sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK
+                                                                   
+sp|P01 PLCTPVVTCTPGCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 
+             330       340       350       360       370       380 
+
+>>sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcriptio  (339 aa)
+ s-w opt: 157  Z-score: 147.8  bits: 35.8 E(516081):    1
+Smith-Waterman score: 157; 22.5% identity (63.8% similar) in 138 aa overlap (18-154:204-338)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     ::  :  .   : .:....   :. . .. 
+sp|Q6N APQDEHTEVPVLHPAGIMLSLSPSHIVVLLTPKEEQNISDCSDSDSGIS---VSGSPAHQ
+           180       190       200       210       220          230
+
+        50        60        70        80        90       100       
+sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE
+        . .:... : ...  :  .  :  : ....   : ....... .:..::   :..::.:
+sp|Q6N SDLEPSSRAKPYSRPDPEASPALKGRVKTSSGAPKVEKKLKKMEQNKTAATRYRQKKRVE
+              240       250       260       270       280       290
+
+       110       120       130       140        150       160      
+sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL-AAEVRGSRANTPMPGSPATA
+       .:.:..:  ..:..:. : .. ...  : . : . : .. .:. : :.            
+sp|Q6N QESLNSECSELEKKNRELSEKADSLSREIQYLRDLLEEMRTAKQRKSKR           
+              300       310       320       330                    
+
+        170       180       190       200       210       220      
+sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD
+
+>>sp|Q76LL6|FHOD3_MOUSE FH1/FH2 domain-containing protei  (1578 aa)
+ s-w opt: 170  Z-score: 147.5  bits: 37.9 E(516081):  1.1
+Smith-Waterman score: 170; 25.1% identity (52.5% similar) in 259 aa overlap (7-235:509-759)
+
+                                       10        20        30      
+sp|Q1X                         MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN
+                                     :.  ..:.:: .: :   ... .  :. : 
+sp|Q76 GGTSGPEASRPAARLLPPSPGLATRPSTAPKVSPTIDKLPYVPHSPFHLFSYDFEDSPLL
+      480       490       500       510       520       530        
+
+         40        50        60        70        80        90      
+sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL-----
+       . : :  . . :..    . .:. .  : :  .  :   ..  . .. :     :     
+sp|Q76 TKD-KGGDSQTENRYSNFSSNSFQSSRPSPGPSGSPSYASSFSSPQDTRSSPSGLLTSSF
+      540        550       560       570       580       590       
+
+              100       110       120           130       140      
+sp|Q1X -RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF----LLQRLSQMEAENNRLSQQLAQL
+        ... .  . :::.: : :. . ..:. :..:.:    : .:  : .:...:  . : ::
+sp|Q76 RQHQESLAAERERRRQEREE-RLQRIEREERNKFNREYLDKREEQRQARGERY-KYLEQL
+       600       610        620       630       640        650     
+
+                  150           160        170       180       190 
+sp|Q1X AAE----------VRGSRANTPM----PGSPATASPT-LTPTLFKQERDELPLERIPFPT
+       :::          :  .::.  .    :..::  ::.  .:.  .::   ::.   : ::
+sp|Q76 AAETQEKEPRSQSVSRGRADLSLDLSLPAAPAPPSPSSQSPSADSQE--ALPVPSSP-PT
+         660       670       680       690       700         710   
+
+                  200       210       220       230       240      
+sp|Q1X ---PSLS--DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDD
+          :..:  :. : :.  .   .....:  : .  : :.  .  :...:           
+sp|Q76 LQCPQVSGKDHEPELEAEAGQGADEASQDIASAHRGAES--QEEPVLELEPEERASLSEK
+            720       730       740       750         760       770
+
+        250       260       270       280       290       300      
+sp|Q1X VAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLE
+                                                                   
+sp|Q76 ERQNEEVNERDNCSASSISSSSSTLEREEKEDKLSEDRATGLWSTSLQDVGVNGQCGDIL
+              780       790       800       810       820       830
+
+>>sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-bi  (395 aa)
+ s-w opt: 158  Z-score: 147.5  bits: 35.9 E(516081):  1.1
+Smith-Waterman score: 158; 29.3% identity (56.0% similar) in 150 aa overlap (54-199:192-329)
+
+            30        40        50        60         70        80  
+sp|Q1X PVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEK
+                                     ....  ::: . .: ..::  :     .:.
+sp|Q8T AHAHILPRAGTVAPVPCTTLLPCQTLFLTDEEKRLLGQEGVSLP-SHLPLTK----AEER
+             170       180       190       200        210          
+
+             90       100       110       120       130       140  
+sp|Q1X EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ
+         ....: .::. .:: ::.::.  .. ::..      ::: : ......: .:  :  :
+sp|Q8T VLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQ
+        220       230       240       250       260       270      
+
+            150       160       170       180          190         
+sp|Q1X LAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF---PTPSLSDYSP
+       : :: . .    :.:   .. : .:  .   ::.     ::    ::   :  .  ::.:
+sp|Q8T LRQLQTLI----AQTS--NKAAQTSTCVLILLFSLALIILP-SFSPFQSRPEAGSEDYQP
+        280             290       300       310        320         
+
+     200       210       220       230       240       250         
+sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL
+                                                                   
+sp|Q8T HGVTSRNILTHKDVTENLETQVVESRLREPPGAKDANGSTRTLLEKMGGKPRPSGRIRSV
+     330       340       350       360       370       380         
+
+>>sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS  (401 aa)
+ s-w opt: 158  Z-score: 147.4  bits: 35.9 E(516081):  1.1
+Smith-Waterman score: 158; 28.6% identity (61.3% similar) in 119 aa overlap (80-198:195-312)
+
+      50        60        70        80        90       100         
+sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+                                     : .. .:..:.: :: .:. ::.::. .: 
+sp|Q99 QVKSTTSGSSRDHSDDDDELEGETETTRNGDPSDAKRVRRMLSNRESARRSRRRKQAHMT
+          170       180       190       200       210       220    
+
+     110       120       130       140       150       160         
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT
+       .::..  :.. .:. ::.::...  . :  . .   : :...  ::.. :    .     
+sp|Q99 ELETQVSQLRVENSSLLKRLTDISQRYNDAAVDNRVLKADIETMRAKVKMAEETVKRVTG
+          230       240       250       260       270       280    
+
+     170       180       190       200       210       220         
+sp|Q1X LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSA
+       :.: .:..  .:.    .   . : :: :                               
+sp|Q99 LNP-MFQSMSSEISTIGMQSFSGSPSDTSADTTQDGSKQHFYQPAPTSHMPAQDQKIQNG
+           290       300       310       320       330       340   
+
+>>sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcriptio  (483 aa)
+ s-w opt: 159  Z-score: 146.8  bits: 36.1 E(516081):  1.2
+Smith-Waterman score: 159; 26.1% identity (62.7% similar) in 153 aa overlap (26-168:277-424)
+
+                    10        20        30        40          50   
+sp|Q1X      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA
+                                     ..:. :.: ...   ..: .  .:.  .::
+sp|Q5R PSGHPIPSEAKMRLKATLTHQVSSINGGCGMVVGSASTMVTARPEQSQILIQHPDAPSPA
+        250       260       270       280       290       300      
+
+            60        70        80        90       100       110   
+sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN
+       . . : .:  :.:.:.   :.:  .... ..:: . . ::::::.  :....: . .::.
+sp|Q5R QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK
+        310         320         330       340       350       360  
+
+           120       130       140               150       160     
+sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQL--------AQLAAEVRGSRANTPMPGSPAT
+       .  .. .::  : .... .. :  .:.: :        . :  ...:   ..:  .:  :
+sp|Q5R KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQG-YLESPKESSEPT
+            370       380       390       400        410       420 
+
+         170       180       190       200       210       220     
+sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG
+       .::                                                         
+sp|Q5R GSPAPVIQHSSATAPSNGLSVRSAAEAVATSVLTQMASQRTELSMPIQSHVIMTPQSQSA
+             430       440       450       460       470       480 
+
+>>sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcriptio  (494 aa)
+ s-w opt: 159  Z-score: 146.6  bits: 36.1 E(516081):  1.2
+Smith-Waterman score: 159; 26.1% identity (62.7% similar) in 153 aa overlap (26-168:288-435)
+
+                    10        20        30        40          50   
+sp|Q1X      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA
+                                     ..:. :.: ...   ..: .  .:.  .::
+sp|P17 PSGHPIPSEAKMRLKATLTHQVSSINGGCGMVVGTASTMVTARPEQSQILIQHPDAPSPA
+       260       270       280       290       300       310       
+
+            60        70        80        90       100       110   
+sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN
+       . . : .:  :.:.:.   :.:  .... ..:: . . ::::::.  :....: . .::.
+sp|P17 QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK
+       320         330         340       350       360       370   
+
+           120       130       140               150       160     
+sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQL--------AQLAAEVRGSRANTPMPGSPAT
+       .  .. .::  : .... .. :  .:.: :        . :  ...:   ..:  .:  :
+sp|P17 KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQG-YLESPKESSEPT
+           380       390       400       410       420        430  
+
+         170       180       190       200       210       220     
+sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG
+       .::                                                         
+sp|P17 GSPAPVIQHSSATAPSNGLSVRSAAEAVATSVLTQMASQRTELSMPIQSHVIMTPQSQSA
+            440       450       460       470       480       490  
+
+>>sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-bi  (395 aa)
+ s-w opt: 157  Z-score: 146.6  bits: 35.8 E(516081):  1.2
+Smith-Waterman score: 157; 29.3% identity (56.0% similar) in 150 aa overlap (54-199:192-329)
+
+            30        40        50        60         70        80  
+sp|Q1X PVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEK
+                                     ....  ::: . .: ..::  :     .:.
+sp|Q5U AHAHILPRAGTLAPVPCTTLLPCQTLFLTDEEKRLLGQEGVSLP-SHLPLTK----AEER
+             170       180       190       200        210          
+
+             90       100       110       120       130       140  
+sp|Q1X EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ
+         ....: .::. .:: ::.::.  .. ::..      ::: : ......: .:  :  :
+sp|Q5U VLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQ
+        220       230       240       250       260       270      
+
+            150       160       170       180          190         
+sp|Q1X LAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF---PTPSLSDYSP
+       : :: . .    :.:   .. : .:  .   ::.     ::    ::   :  .  ::.:
+sp|Q5U LRQLQTLI----AQTS--NKAAQTSTCVLILLFSLALIILP-SFSPFQGRPEAGPEDYQP
+        280             290       300       310        320         
+
+     200       210       220       230       240       250         
+sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL
+                                                                   
+sp|Q5U HGVTSRNILTHKDITENLETQVVESRLREPPEAKDANDSTRTLLEKMGGKPRPSGRIGTV
+     330       340       350       360       370       380         
+
+>>sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus no  (327 aa)
+ s-w opt: 155  Z-score: 146.2  bits: 35.4 E(516081):  1.3
+Smith-Waterman score: 155; 23.1% identity (55.9% similar) in 229 aa overlap (12-216:38-261)
+
+                                  10        20           30        
+sp|Q1X                    MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD------
+                                     :: .:.. .. .:..   :..  :      
+sp|P51 NFDTSSRGSSGSPAHAESYSSGGGGQQKFRVD-MPGSGSAFIPTINAITTTSQDLQWMVQ
+        10        20        30         40        50        60      
+
+              40        50        60              70          80   
+sp|Q1X -TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKE
+        : ..: .    . .:    :. .     . :: :       :..  :.: .  . .:.:
+sp|P51 PTVITSMSNPYPRSHPYSPLPGLRSVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEE
+         70        80        90       100       110       120      
+
+            90       100       110       120       130       140   
+sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL
+       .:::.:  ::. ::   :.:.:   :::..:  ..:.... : ....... :...:  .:
+sp|P51 KRRIRRE-RNKLAAAKCRNRRRELTEKLQTETEELEEEKSGLQKEIAELQKEKEKLEFML
+        130        140       150       160       170       180     
+
+           150          160         170       180       190        
+sp|Q1X AQLAAEVRGS---RANTPMPGSPAT--ASPTLTPTLFKQERDELPLERIPFPTPSLSDYS
+       .  .   . :   : ..:  :  .   .. .. :.. :::    : :  :  . ...  .
+sp|P51 VAHGPVCKISPEERRSSPTSGVQSLRGTGSAVGPVVVKQEP---PEEDSPSSSAGMDKTQ
+         190       200       210       220          230       240  
+
+      200        210       220       230       240       250       
+sp|Q1X PT-LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN
+        . .:: ..: ..  ...:                                         
+sp|P51 RSVIKPISIAGGGFYGEEPLHTPIVVTSTPAITPGTSNLVFTYPSVLEQESPASPSESCS
+            250       260       270       280       290       300  
+
+>>sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapie  (380 aa)
+ s-w opt: 156  Z-score: 146.0  bits: 35.6 E(516081):  1.3
+Smith-Waterman score: 156; 28.2% identity (51.6% similar) in 248 aa overlap (9-237:55-297)
+
+                                     10        20           30     
+sp|Q1X                       MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTSL
+                                     .::.. .:.. : :  : :   :.:: .: 
+sp|P01 DSLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSANFIPTVTAISTSPDLQWLVQPALVS-
+           30        40        50        60        70        80    
+
+          40        50        60        70                 80      
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQRR
+       . :  .:.  .:    :: .  ....   : ::    :     .:.:.:    .:.:.::
+sp|P01 SVAPSQTRAPHPF-GVPAPSAGAYSRA-GVVKTMTGGRAQSIGRRGKVEQLSPEEEEKRR
+            90        100        110       120       130       140 
+
+         90       100       110       120       130       140      
+sp|Q1X IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL
+       :.:  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::  
+sp|P01 IRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAH
+              150       160       170       180       190       200
+
+        150       160       170          180          190       200
+sp|Q1X AAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPT
+           .    .  .:   ..::  ::   : .   : .:   :::   : : ::.   .  
+sp|P01 RPACKIPD-DLGFPEEMSVASLDLTGGLPEVATPESEEAFTLPLLNDPEPKPSVEPVKSI
+               210       220       230       240       250         
+
+              210       220       230        240       250         
+sp|Q1X LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRL
+        .    .:  :    :: :  .    . ..: .:: ::                      
+sp|P01 SSMELKTEPFDDFLFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHSGSLGMGPMATE
+     260       270       280       290       300       310         
+
+     260       270       280       290       300       310         
+sp|Q1X FHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETT
+                                                                   
+sp|P01 LEPLCTPVVTCTPSCTAYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLA
+     320       330       340       350       360       370         
+
+>>sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus mu  (802 aa)
+ s-w opt: 162  Z-score: 145.5  bits: 36.6 E(516081):  1.4
+Smith-Waterman score: 162; 25.9% identity (52.1% similar) in 259 aa overlap (9-254:105-350)
+
+                                     10        20        30        
+sp|Q1X                       MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSA
+                                     : ... : .  :..  : :..  .:.:   
+sp|Q03 QTFHQWRDARQVYGLNFGSKEDANVFASAMMHALEVLNSQEAAQSKV-TATQDSTNLRCI
+           80        90       100       110       120        130   
+
+       40        50        60         70        80        90       
+sp|Q1X DVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA
+              . . . ::. ... .:: : . . .:  ..: : : :.:. . ::. :.:   
+sp|Q03 FCGPTLPRQNSQLPAQVQNGPSQEELEIQRRQLQEQQRQK-ELERERMERERLERERLER
+           140       150       160       170        180       190  
+
+       100       110       120       130        140       150      
+sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAE-NNRLSQQLAQLAAEV----RG
+       .   ::.:::.:.:: .. . :. ...  .:: ..: : ..:  ..: ::  :     : 
+sp|Q03 ERL-ERERLEQEQLERQRQEREHVERLERERLERLERERQERERERLEQLEREQVEWERE
+             200       210       220       230       240       250 
+
+            160       170        180       190            200      
+sp|Q1X SRANTPMPGSPATASPTLTPTLFK-QERDELPLERIPFPTPSLSDYSP-----TLKPSTL
+        : ..  :.: .. : .  :   . :  .  :       .  .:: .:     :  : : 
+sp|Q03 RRMSNAAPSSDSSLSSAPLPEYSSCQPPSAPPPSYAKVISAPVSDATPDYAVVTALPPTS
+             260       270       280       290       300       310 
+
+        210       220       230        240       250       260     
+sp|Q1X AESSDVAQHPAVSVAGLEGDGSAL-PLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSS
+       .  .   .: :.  :   . :::. :.      : :..:  :  ::. .           
+sp|Q03 TPPTPPLRHAATRFA--TSLGSAFHPV------LPHYAT--VPRPLNKNSRPSSPVNTPS
+             320         330             340         350       360 
+
+         270       280       290       300       310       320     
+sp|Q1X VEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSV
+                                                                   
+sp|Q03 SQPPAAKSCAWPTSNFSPLPPSPPIMISSPPGKATGPRPVLPVCVSSPVPQMPPSPTAPN
+             370       380       390       400       410       420 
+
+>>sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo  (323 aa)
+ s-w opt: 154  Z-score: 145.4  bits: 35.3 E(516081):  1.4
+Smith-Waterman score: 154; 28.6% identity (57.1% similar) in 154 aa overlap (14-163:174-319)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     :  :.::...:.   .:.  .  :: .   
+sp|Q9Y AYPGAGVAHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATASATAAGG
+           150       160       170       180       190       200   
+
+            50        60        70        80           90       100
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS
+       . . :.      : :  : . .   .:  . :. :.::    .:.:  :.:.::. ::. 
+sp|Q9Y NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC
+                 210       220       230       240         250     
+
+              110       120       130       140        150         
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM
+       : ..  . ..::::: :. :: . : :..:..  : .  . .  .::    : . ...  
+sp|Q9Y RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS
+         260       270       280       290       300       310     
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+       :.::                                                        
+sp|Q9Y PSSPEFFL                                                    
+         320                                                       
+
+>>sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus n  (267 aa)
+ s-w opt: 152  Z-score: 145.1  bits: 34.9 E(516081):  1.5
+Smith-Waterman score: 152; 27.6% identity (56.4% similar) in 163 aa overlap (51-190:23-183)
+
+               30        40        50        60              70    
+sp|Q1X SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPP-R
+                                     .::.  ..    .: :.      .. :  :
+sp|Q9R         MVVVAAAPSAASAAPKVLLLSGQPASGGRALPLMVPGPRAAGSEASGTPQAR
+                       10        20        30        40        50  
+
+             80        90       100       110       120            
+sp|Q1X KRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ-------FL
+       :: . :.   :.. ..: :.::.::::.:.::. .: .::.. ...:..::       .:
+sp|Q9R KRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKLQLENQLL
+             60        70        80        90       100       110  
+
+         130       140               150       160       170       
+sp|Q1X LQRLSQMEAENNRLSQQLAQLA--------AEVRGSRANTPMPGSPATASPTLTPTLFKQ
+        ..   .  ::..:  .:.. :        :: .:. .   . ::  .:.  :   : .:
+sp|Q9R REKTHGLVIENQELRTRLGMNALVTEEVSEAESKGNGVRL-VAGSAESAALRLRAPL-QQ
+            120       130       140       150        160        170
+
+       180       190       200       210       220       230       
+sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS
+        . .:   .  ::                                               
+sp|Q9R VQAQLSPPQNIFPWILTLLPLQILSLISFWAFWTSWTLSCFSNVLPQSLLIWRNSQRSTQ
+              180       190       200       210       220       230
+
+>>sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS=  (381 aa)
+ s-w opt: 155  Z-score: 145.0  bits: 35.4 E(516081):  1.5
+Smith-Waterman score: 155; 25.2% identity (48.8% similar) in 246 aa overlap (2-237:57-297)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|P01 LSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTATSTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   . :: .    .    :  : :.   . . .   . .  . .:.:.:::.
+sp|P01 PSQTRAPHPYGLPTQSAGAYARAEMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|P01 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDKKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .:   ..::  ::   :     : .:   :::   : : :::   .   .
+sp|P01 ACKIPD-DLGFPEEMSVASLDLTGGLPEASTPESEEAFTLPLLNDPEPKPSLEPVKSISN
+             210       220       230       240       250       260 
+
+            210       220       230        240       250       260 
+sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH
+           ::  :    :: :  .    . ..:  :: ::                        
+sp|P01 VELKAEPFDDFLFPASSRPSGSETSRSVPNVDLSGSFYAADWEPLHSNSLGMGPMVTELE
+             270       280       290       300       310       320 
+
+             270       280       290       300       310       320 
+sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK
+                                                                   
+sp|P01 PLCTPVVTCTPLLRLPELTHAAGPVSSQRRQGSRHPDVPLPELVHYREEKHVFPQRFPST
+             330       340       350       360       370       380 
+
+>>sp|P10158|FOSL1_RAT Fos-related antigen 1 OS=Rattus no  (275 aa)
+ s-w opt: 152  Z-score: 144.8  bits: 34.9 E(516081):  1.5
+Smith-Waterman score: 152; 27.1% identity (53.6% similar) in 207 aa overlap (44-232:74-267)
+
+            20        30        40        50        60        70   
+sp|Q1X SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR
+                                     . .: . .:.  : . :   : : .   : 
+sp|P10 NAVSGSQELQWMVQPHFLGPSGYPRPLTYPQYSPPQPRPGVIR-ALG---PPPGVRRRPC
+            50        60        70        80            90         
+
+            80        90       100              110       120      
+sp|Q1X KRAKTEDEKEQRRIERVLRNRAAAQTSRERKR-------LEMEKLENEKIQMEQQNQFLL
+       .. . :.: :.::..:  ::. ::   :.:..        : .:::.::  .... . : 
+sp|P10 EQISPEEE-ERRRVRRE-RNKLAAAKCRNRRKELTDFLQAETDKLEDEKSGLQREIEELQ
+     100        110        120       130       140       150       
+
+        130         140       150       160            170         
+sp|Q1X QRLSQMEA--ENNRLSQQLAQLAAEVRGSRANTPMPGSP-ATASP----TLTP-TLFKQE
+       ..  ..:   : .:   .. .   .  :. ..:   ::: .   :    .:.:  ... :
+sp|P10 KQKERLELVLEAHRPICKIPEEDKKDTGGTSSTSGAGSPPGPCRPVPCISLSPGPVLEPE
+       160       170       180       190       200       210       
+
+      180       190       200          210       220       230     
+sp|Q1X RDELPLERIPFPTPSLSDYSPTL---KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL
+         . :     . ::::. ..:.:    :::  :  . :.. . : .:   : :. ::   
+sp|P10 ALHTPTL---MTTPSLTPFTPSLVFTYPST-PEPCSSAHRKSSSSSG---DPSSDPLGSP
+       220          230       240        250       260          270
+
+         240       250       260       270       280       290     
+sp|Q1X GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSM
+                                                                   
+sp|P10 TLLAL                                                       
+                                                                   
+
+>>sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF do  (1291 aa)
+ s-w opt: 165  Z-score: 144.5  bits: 37.1 E(516081):  1.6
+Smith-Waterman score: 165; 24.2% identity (51.3% similar) in 273 aa overlap (13-267:284-545)
+
+                                 10          20        30        40
+sp|Q1X                   MSCDMEKTMSSVDSLPA--TPASEVPVLTVSPADTSLNSADV
+                                     ::::      .:  . : . . . :.   :
+sp|Q6Y RRFEFDFRDRDDERGYRRVRSGSGSIDDDRDSLPEWCLEDAEEEMGTFDSSGAFLSLKKV
+           260       270       280       290       300       310   
+
+               50        60        70        80        90       100
+sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS
+       . . . :::..   .    :.:     ..    ..::  :. ..:. :..  .::.:..:
+sp|Q6Y QKEPI-PEEQEMDFRPVEEGEER--SDSDSSHNEEAKEPDKTNRREGEKT--DRAGAEAS
+            320       330         340       350       360          
+
+                       110       120       130          140        
+sp|Q1X RE---------RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN---NRLSQQLAQLAA
+       .:         :     ..  .:  :.:....   ... . : ::   : :: .. . . 
+sp|Q6Y EEVPQTSLSSARPGTPSDHQPQEATQFERKDEPKAEQVEKAEEENRSENSLSAKVPSRGD
+      370       380       390       400       410       420        
+
+      150         160       170         180       190       200    
+sp|Q1X EV--RGSRANTPMPGSPATASPTL--TPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS
+       :.   ... .::.:  : :::: :  .: .        :.:     .:..:. :   .:.
+sp|Q6Y ETVPASQQPSTPLP--PDTASPLLILSPPVPTPSSASRPVETAAVEAPGMSSVST--EPD
+      430       440         450       460       470       480      
+
+          210       220       230       240       250       260    
+sp|Q1X TLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDS
+            . . :.    :: :.   :::    : : :..: .  :. ::  . ... .. : 
+sp|Q6Y DEEGLKHLEQQAEKMVAYLQD--SALDDERLTSKLQEHRAKGVSIPLMHEAMQKWYYKDP
+          490       500         510       520       530       540  
+
+          270       280       290       300       310       320    
+sp|Q1X SVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSS
+       . :                                                         
+sp|Q6Y QGEIQGPFNNQEMAEWFQAGYFTMSLLVKRACDESFQPLGDIMKMWGRVPFSPGPAPPPH
+            550       560       570       580       590       600  
+
+>>sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sa  (326 aa)
+ s-w opt: 153  Z-score: 144.4  bits: 35.1 E(516081):  1.6
+Smith-Waterman score: 153; 24.9% identity (54.1% similar) in 233 aa overlap (4-222:39-253)
+
+                                          10         20        30  
+sp|Q1X                            MSCDMEKTMSS-VDSLPATPASEVPVLTVSPAD
+                                     ::  . :. . .. :  .:.     :.:  
+sp|P15 FDTSSRGSSGSPAHAESYSSGGGGQQKFRVDMPGSGSAFIPTINAITTSQDLQWMVQP--
+       10        20        30        40        50        60        
+
+             40        50        60              70          80    
+sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKEQ
+       : ..: .    . .:    :.       . :: :       :..  :.: .  . .:.:.
+sp|P15 TVITSMSNPYPRSHPYSPLPGLASVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEEK
+         70        80        90       100       110       120      
+
+           90       100       110       120       130       140    
+sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA
+       :::.:  ::. ::   :.:.:   :::. :  ..:.... : ....... :...:  .:.
+sp|P15 RRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGLQKEIAELQKEKEKLEFMLV
+        130        140       150       160       170       180     
+
+          150          160         170       180       190         
+sp|Q1X QLAAEVRGS---RANTPMPG-SPA-TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSP
+         .   . :   : . : :: .:  ... ..  .. :::    :::          . ::
+sp|P15 AHGPVCKISPEERRSPPAPGLQPMRSGGGSVGAVVVKQE----PLE----------EDSP
+         190       200       210       220                     230 
+
+     200       210       220       230       240       250         
+sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL
+       . . . : ...  . .: .:.::                                     
+sp|P15 SSSSAGLDKAQRSVIKP-ISIAGGFYGEEPLHTPIVVTSTPAVTPGTSNLVFTYPSVLEQ
+             240        250       260       270       280       290
+
+>>sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-bi  (428 aa)
+ s-w opt: 155  Z-score: 144.1  bits: 35.4 E(516081):  1.7
+Smith-Waterman score: 155; 26.8% identity (54.0% similar) in 198 aa overlap (8-199:138-322)
+
+                                      10        20        30       
+sp|Q1X                        MSCDMEKTMSSVDSLPATPASEVPVLTVSP---ADTS
+                                     :. . ..  : ::.  : :::.    . : 
+sp|Q50 VSQTQHSLNINFPFDFNGWETGFLPDQAGGTQCASETPQAQPATGFP-LTVKDLLLSGTP
+       110       120       130       140       150        160      
+
+           40        50        60        70        80        90    
+sp|Q1X LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR
+        ..: :. :  .       .::    . . .:. ..:  :     .:.  ..:.: .::.
+sp|Q50 ETAAKVSQQSYQELILTEDEKRLLAKEGMTLPN-QFPLTKY----EERILKKIRRKIRNK
+        170       180       190        200           210       220 
+
+          100       110       120       130       140       150    
+sp|Q1X AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR
+        .:: ::..:.  .. ::..      .:. : ... :.:  :  : .:: .: : : .. 
+sp|Q50 QSAQESRKKKKEYIDGLESRMAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG-
+             230       240       250       260       270       280 
+
+          160       170       180       190          200       210 
+sp|Q1X ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS---DYSPTLKPSTLAESSD
+       .: :. ..  .    :. ::.      ::  . ::   ..:   :.::            
+sp|Q50 SNKPVQAGTCVLVLLLSFTLIL-----LPNLK-PFTDTKVSQHGDFSPMRVQSRSLHNLQ
+              290       300             310       320       330    
+
+             220       230       240       250       260       270 
+sp|Q1X VAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS
+                                                                   
+sp|Q50 SSRVLRNLDHPYSMTENAKILPRFPEDKTMEEIASLLGRLHRRPQFTEYDPESHNHSFDQ
+          340       350       360       370       380       390    
+
+>>sp|A2R346|KAPC_ASPNC Putative transcription factor kap  (283 aa)
+ s-w opt: 151  Z-score: 143.7  bits: 34.7 E(516081):  1.8
+Smith-Waterman score: 151; 22.5% identity (52.1% similar) in 213 aa overlap (16-223:44-236)
+
+                              10        20           30         40 
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD-TSLNSADVK
+                                     :  :... : .   :.:: : .... :   
+sp|A2R QTSAQDHADQVLHDQLLAAHQHLSHPQQARPQGPTAQPPHMQPNTTSPRDQNNIDPAISG
+            20        30        40        50        60        70   
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+       .  ..   . : . . . ::: :            ::  ..     .:. .:::: .. :
+sp|A2R AAMLSGPPQTPPQPEPT-GQESP------------KTYGKRPLSTSKRAAQNRAAQRAFR
+            80        90                    100       110       120
+
+             110       120       130       140       150        160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MP
+       .::.  ..:::..  .... :.     ..:..::: .: . . .: ...  :....: .:
+sp|A2R QRKESYIRKLEEQVKEFDNTNE----TMKQLQAENYQLREYIINLQSRLLDSQGEVPELP
+              130       140           150       160       170      
+
+              170       180       190       200       210       220
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV
+       :.    .:    ..        :    : : :. .  .  .     : . :. .   ..:
+sp|A2R GNIDLNQPRNDISV---PPPGAPAATGPAPGPGGAPQQMQVPNPGAATNEDMNSLNRIAV
+        180       190          200       210       220       230   
+
+              230       240       250       260       270       280
+sp|Q1X AGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFD
+       :::                                                         
+sp|A2R AGLGMRKHPNEEANFLGNNFQARRPRNDDGQPDGSEATKTEPGHGLPVVS          
+           240       250       260       270       280             
+
+>>sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Maca  (323 aa)
+ s-w opt: 152  Z-score: 143.6  bits: 34.9 E(516081):  1.8
+Smith-Waterman score: 152; 28.6% identity (57.1% similar) in 154 aa overlap (14-163:174-319)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     :  :.::...:.   .:.  .  :: .   
+sp|Q2P AYPGAGVAHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATASATAAGG
+           150       160       170       180       190       200   
+
+            50        60        70        80           90       100
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS
+       . . :.      : :  : . .   .:  . :. :.::    .:.:  :.:.::. ::. 
+sp|Q2P NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC
+                 210       220       230       240         250     
+
+              110       120       130       140        150         
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM
+       : ..  . ..::::: :. :: . : :..:..  : .  . .  .::    : . ...  
+sp|Q2P RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAHKVKCEKLANSGFREAGSTSDS
+         260       270       280       290       300       310     
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+       :.::                                                        
+sp|Q2P PSSPEFFL                                                    
+         320                                                       
+
+>>sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcriptio  (413 aa)
+ s-w opt: 154  Z-score: 143.4  bits: 35.2 E(516081):  1.8
+Smith-Waterman score: 154; 27.5% identity (67.5% similar) in 120 aa overlap (26-143:277-392)
+
+                    10        20        30        40          50   
+sp|Q1X      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA
+                                     ..:. :.: ...   ..: .  .:.  .::
+sp|Q8R PSGHPMPSEAKMRLKATLTHQVSSINGGCGMVVGTASTMVTARPEQNQILIQHPDAPSPA
+        250       260       270       280       290       300      
+
+            60        70        80        90       100       110   
+sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN
+       . . : .:  :.:.:.   :.:  .... ..:: . . ::::::.  :....: . .::.
+sp|Q8R QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK
+        310         320         330       340       350       360  
+
+           120       130       140       150       160       170   
+sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPT
+       .  .. .::  : .... .. :  .:.: :                              
+sp|Q8R KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQGYLGK         
+            370       380       390       400       410            
+
+>>sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus mus  (273 aa)
+ s-w opt: 150  Z-score: 143.0  bits: 34.6 E(516081):  1.9
+Smith-Waterman score: 150; 26.9% identity (53.4% similar) in 208 aa overlap (44-232:72-265)
+
+            20        30        40        50        60        70   
+sp|Q1X SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR
+                                     . .: . .:.  : . :   : : .   : 
+sp|P48 SIDSSSQELHWMVQPHFLGPTGYPRPLAYPQYSPPQPRPGVIR-ALG---PPPGVRRRPC
+              50        60        70        80            90       
+
+            80        90       100              110       120      
+sp|Q1X KRAKTEDEKEQRRIERVLRNRAAAQTSRERKR-------LEMEKLENEKIQMEQQNQFLL
+       .. . :.: :.::..:  ::. ::   :.:..        : .:::.::  .... . : 
+sp|P48 EQISPEEE-ERRRVRRE-RNKLAAAKCRNRRKELTDFLQAETDKLEDEKSGLQREIEELQ
+       100        110        120       130       140       150     
+
+        130         140       150             160       170        
+sp|Q1X QRLSQMEA--ENNRLSQQLAQLAAEVRGSRANT------PMPGSPATASPTLTP-TLFKQ
+       ..  ..:   : .:   .. .   .  :. ..:      : :: :.    .:.:  ... 
+sp|P48 KQKERLELVLEAHRPICKIPEGDKKDPGGSGSTSGASSPPAPGRPVPCI-SLSPGPVLEP
+         160       170       180       190       200        210    
+
+       180       190       200          210       220       230    
+sp|Q1X ERDELPLERIPFPTPSLSDYSPTL---KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD
+       :  . :     . ::::. ..:.:    :::  :  . :.. . : .:   : :. ::  
+sp|P48 EALHTPTL---MTTPSLTPFTPSLVFTYPST-PEPCSSAHRKSSSSSG---DPSSDPLGS
+          220          230       240        250          260       
+
+          240       250       260       270       280       290    
+sp|Q1X LGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDS
+                                                                   
+sp|P48 PTLLAL                                                      
+       270                                                         
+
+>>sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A  (780 aa)
+ s-w opt: 159  Z-score: 143.0  bits: 36.1 E(516081):  1.9
+Smith-Waterman score: 159; 28.9% identity (56.1% similar) in 173 aa overlap (42-208:92-255)
+
+              20        30        40        50        60        70 
+sp|Q1X VDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP
+                                     ... : ...:  :....: ..  : . .  
+sp|Q9U IRNSPYRREDSMEDRGEEDDSLAIKPPQQMSRKEKVHHRKDEKRKEKW-KHARVKEREHE
+              70        80        90       100        110       120
+
+              80        90       100          110       120        
+sp|Q1X PRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEM--EKLENEKIQMEQQNQFLLQR
+        ::: . :..: .:. ::  : . : . :: :: :::.  .: : :. . :::..   :.
+sp|Q9U RRKRHREEQDKARREWERQKRREMAREHSRRERDRLEQLERKRERERKMREQQKEQREQK
+              130       140       150       160       170       180
+
+      130       140        150         160       170       180     
+sp|Q1X LSQMEAENNRLSQQLA-QLAAEVRGSRAN--TPMPGSPATASPTLTPTLFKQERDELPLE
+         . .::. :  ..   ...:. :  : .    . .:  . ::   :    .:: ::   
+sp|Q9U ERERRAEERRKEREARREVSAHHRTMREDYSDKVKASHWSRSPPRPP----RERFELGDG
+              190       200       210       220           230      
+
+         190       200       210       220       230       240     
+sp|Q1X RIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD
+       :     :. .  .:. ::. : :                                     
+sp|Q9U R----KPGEARPAPAQKPAQLKEEKMEERDLLSDLQDISDSERKTSSAESSSAESGSGSE
+            240       250       260       270       280       290  
+
+>>sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptio  (125 aa)
+ s-w opt: 143  Z-score: 142.8  bits: 33.4 E(516081):    2
+Smith-Waterman score: 143; 28.6% identity (56.2% similar) in 112 aa overlap (71-172:17-125)
+
+               50        60        70        80        90       100
+sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS
+                                     :: :. ...:    ::..:  .:: ::: :
+sp|Q16               MPHSSDSSDSSFSRSPPPGKQDSSDDV---RRVQRREKNRIAAQKS
+                             10        20           30        40   
+
+              110       120       130       140       150       160
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP
+       :.:.  . . :. :. ..:.::  : ....:.  : . ... : .         :.:: :
+sp|Q16 RQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEELKYFTSVLNSHEPLCSVLAASTPSP
+            50        60        70        80        90       100   
+
+                        170       180       190       200       210
+sp|Q1X G----------SPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+                  .: ..:: . :                                      
+sp|Q16 PEVVYSAHAFHQPHVSSPRFQP                                      
+           110       120                                           
+
+>>sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kap  (286 aa)
+ s-w opt: 150  Z-score: 142.7  bits: 34.6 E(516081):    2
+Smith-Waterman score: 150; 23.4% identity (53.7% similar) in 214 aa overlap (14-223:37-240)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     : :  :  ..:  ...:   . :.:. . :
+sp|Q0C PAPHPSMQTSAQDHADQVLHDQLLAAHQHLSHPQQPRPQAP--ATQPPHMQPNTASPRDQ
+         10        20        30        40          50        60    
+
+             50        60        70         80        90       100 
+sp|Q1X E-VKPEEKKPAKKRKSWGQELPVPKTNLP-PRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+       . . :  .  :      :    .:    : :..  ::  ..     .:. .:::: .. :
+sp|Q0C NNIDPAISGSAI----LGAPPQTPPQPEPAPQESPKTYGKRPLSTSKRAAQNRAAQRAFR
+           70            80        90       100       110       120
+
+             110       120       130       140       150        160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MP
+       .::.  ..:::.   :...: . . .. . ..::: .: . . .: ...  :....: .:
+sp|Q0C QRKESYIRKLEE---QVKHQ-EAITEEYKALHAENYQLREYIINLQTRLLDSQGEVPELP
+              130           140       150       160       170      
+
+              170       180        190       200       210         
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERI-PFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+       :.    .:    ::   : ..       : :.    . :   . . .. ..:. .   ..
+sp|Q0C GNIDLNQPRADLTLSAPELQRGNAASAGPAPAGPGPQQSQPNQNQGVGPNDDMNSLNRIA
+        180       190       200       210       220       230      
+
+     220       230       240       250       260       270         
+sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF
+       ::::                                                        
+sp|Q0C VAGLGMRKHPNEDANYLGNNFQARRPRTDDNQTGATETTKQEPDGLPVVS          
+        240       250       260       270       280                
+
+>>sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus  (323 aa)
+ s-w opt: 151  Z-score: 142.6  bits: 34.7 E(516081):    2
+Smith-Waterman score: 151; 27.9% identity (57.8% similar) in 154 aa overlap (14-163:174-319)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     :  :.::...:.   .:.  .  .: .  .
+sp|P54 GYPGAGVTHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHAAAAATAAGS
+           150       160       170       180       190       200   
+
+            50        60        70        80           90       100
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS
+       . . :.      : :  : . .   .:  . :. :.::    .:.:  :.:.::. ::. 
+sp|P54 NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC
+                 210       220       230       240         250     
+
+              110       120       130       140        150         
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM
+       : ..  . ..::::: :. :: . : :..:..  : .  . .  .::    : . ...  
+sp|P54 RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS
+         260       270       280       290       300       310     
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+       :.::                                                        
+sp|P54 PSSPEFFL                                                    
+         320                                                       
+
+>>sp|P29747|CREBA_DROME Cyclic AMP response element-bind  (516 aa)
+ s-w opt: 155  Z-score: 142.6  bits: 35.4 E(516081):    2
+Smith-Waterman score: 155; 30.4% identity (55.4% similar) in 148 aa overlap (8-150:370-508)
+
+                                      10        20          30     
+sp|Q1X                        MSCDMEKTMSSVDSLPATPASEVPVLTVS--PADTSL
+                                     : ::  :  :. .:   ..:..  :  : :
+sp|P29 LSPNATVSISVANPAGGESSVRVSRTAASITRSSSGSASASGSSTSSTVTTTRQPIHTPL
+     340       350       360       370       380       390         
+
+          40           50        60        70        80        90  
+sp|Q1X NSADVKTQE---VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+        :.. : .    .  ::.:    :   ..  :.:. .::  :     .::  ..:.: ..
+sp|P29 ISSQPKGSTGTLLLTEEEK----RTLLAEGYPIPQ-KLPLTK----AEEKSLKKIRRKIK
+     400       410           420       430            440       450
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       :. .:: ::..:.  :..:: .   .  .:.   .::  .:  :  : .:: .: : :  
+sp|P29 NKISAQESRRKKKEYMDQLERRVEILVTENHDYKKRLEGLEETNANLLSQLHKLQALVSK
+              460       470       480       490       500       510
+
+            160       170       180       190       200       210  
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+                                                                   
+sp|P29 HNVKKS                                                      
+                                                                   
+
+>>sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus mus  (326 aa)
+ s-w opt: 151  Z-score: 142.6  bits: 34.7 E(516081):    2
+Smith-Waterman score: 151; 24.0% identity (56.3% similar) in 229 aa overlap (4-216:39-260)
+
+                                          10         20        30  
+sp|Q1X                            MSCDMEKTMSS-VDSLPATPASEVPVLTVSPAD
+                                     ::  . :. . .. :  .:.     :.:  
+sp|P47 FDTSSRGSSGSPAHAESYSSGGGGQQKFRVDMPGSGSAFIPTINAITTSQDLQWMVQP--
+       10        20        30        40        50        60        
+
+             40        50        60              70          80    
+sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKEQ
+       : ..: .    . .:    :.       . :: :       :..  :.: .  . .:.:.
+sp|P47 TVITSMSNPYPRSHPYSPLPGLASVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEEK
+         70        80        90       100       110       120      
+
+           90       100       110       120       130       140    
+sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLS-QQL
+       :::.:  ::. ::   :.:.:   :::. :  ..:.... : ....... :...:  ...
+sp|P47 RRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGLQKEIAELQKEKEKLEFMKV
+        130        140       150       160       170       180     
+
+                150       160       170       180       190        
+sp|Q1X A-----QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYS
+       :     ... : : :  .. . .  .:.: .. :.. :::    : :  :  . ...  .
+sp|P47 AHGPVCKISPEERRSPPTSGLQSLRGTGS-AVGPVVVKQEP---PEEDSPSSSAGMDKTQ
+         190       200       210        220          230       240 
+
+      200        210       220       230       240       250       
+sp|Q1X PT-LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN
+        . .:: ..: ..  ...:                                         
+sp|P47 RSVIKPISIAGGGFYGEEPLHTPIVVTSTPAITPGTSNLVFTYPNVLEQESPSSPSESCS
+             250       260       270       280       290       300 
+
+>>sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xen  (416 aa)
+ s-w opt: 153  Z-score: 142.4  bits: 35.1 E(516081):  2.1
+Smith-Waterman score: 153; 29.8% identity (53.0% similar) in 181 aa overlap (39-210:79-238)
+
+       10        20        30        40        50        60        
+sp|Q1X MSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKT
+                                     : :: .: ::.:.  :: :    :.  ::.
+sp|Q63 VYSGEGSIENAFILYNKYITLFIEKLPKHRDYKTANV-PEKKETLKKLK----EIAFPKA
+       50        60        70        80         90           100   
+
+            70        80        90          100       110       120
+sp|Q1X N-----LPPRKRAKTEDEKEQRRIERVLRNRAAA---QTSRERKRLEMEKLENEKIQMEQ
+       .     :  : . . :. .:..: :.  : :  :   : . :..:. . : ..:  :.::
+sp|Q63 EELKKELHKRYKKEYEEYSEKQRKEEEERARRLALQQQLDAEKQRVALLKQQQE--QQEQ
+           110       120       130       140       150         160 
+
+               130       140       150       160       170         
+sp|Q1X QNQFL-LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER
+        . :  ..: ...:::  :. .:...   :..    ..:.   :.   : .:: :     
+sp|Q63 VQAFEEMMRRKELEAERLRILHQFSKDEPEAEP--LGSPL--IPGMNEPPVTPLL-----
+             170       180       190           200       210       
+
+     180       190       200       210       220       230         
+sp|Q1X DELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL
+          :      : :   : :  ::::. . .:                             
+sp|Q63 ---PSYGTVQPHPPAVDRS--LKPSSYGSNSSGVTSDGLRHVKIPRDVCCKFLQLSENNT
+               220         230       240       250       260       
+
+     240       250       260       270       280       290         
+sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD
+                                                                   
+sp|Q63 QRGVETCGILCGKLLQNEFTVTHVIVPKQSGGPDYCNTESEEELFLIQDQQGLITLGWIH
+       270       280       290       300       310       320       
+
+>>sp|Q91496|FOS_TETFL Proto-oncogene c-Fos OS=Tetraodon   (374 aa)
+ s-w opt: 152  Z-score: 142.4  bits: 34.9 E(516081):  2.1
+Smith-Waterman score: 152; 24.1% identity (56.4% similar) in 241 aa overlap (15-248:47-278)
+
+                               10        20        30         40   
+sp|Q1X                 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN-SADVKTQ
+                                     : :. :: ::..:.  .. .:.  ..  ..
+sp|Q91 SASPSDNVYYPSPAGSYSSMGSPQSQDLTDLTASSASFVPTVTAISTSPDLQWMVQPLVS
+         20        30        40        50        60        70      
+
+            50         60        70            80        90        
+sp|Q1X EVKPEEK-KPAKKRKSWGQELPVPKTNLPPRKRAKTE----DEKEQRRIERVLRNRAAAQ
+        : : .. .: .   :. . .    .. :  ::...:    .:.:..::.:  ::. :: 
+sp|Q91 SVAPSRRAHPYSPSPSYKRTVMRSGASKPHAKRGRVEQTTPEEEEKKRIRRE-RNKQAAA
+         80        90       100       110       120        130     
+
+      100       110       120       130       140       150        
+sp|Q1X TSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR-GSRANT
+         :.:.:   ..:. :  :.: ... : . ....  :..::   ::      .  :. ..
+sp|Q91 KCRNRRRELTDSLQAETDQLEAEKSSLQNDIANLLKEKERLEFILAAHQPICKIPSQMDS
+         140       150       160       170       180       190     
+
+       160       170       180       190       200       210       
+sp|Q1X PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPA
+        .:   .. ::  . . ..   .  :   .:  :   :..:   . :.   .:.  .   
+sp|Q91 DFP--VVSMSP--VHAYLSTAASTQPQTSVPEATTVTSSHSTFTSTSNSIFGSN--SDSL
+           200         210       220       230       240           
+
+       220       230       240       250       260       270       
+sp|Q1X VSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGL
+       .:.: .  . :.. . :: :.. ..: : .:                             
+sp|Q91 LSTATV--SDSVVKMTDLESSVLEESLDLLAKTEVETVEVPDVNLSSSLYTAQDWEPLHA
+     250         260       270       280       290       300       
+
+       280       290       300       310       320       330       
+sp|Q1X AFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCD
+                                                                   
+sp|Q91 TIGSSDFEPLCTPVVTCTPACTTITSSFVFTFPEAETFPTCCVAHRRGSNSNDQSSDSLS
+       310       320       330       340       350       360       
+
+>>sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus mu  (267 aa)
+ s-w opt: 149  Z-score: 142.3  bits: 34.4 E(516081):  2.1
+Smith-Waterman score: 149; 27.0% identity (57.7% similar) in 163 aa overlap (51-190:23-183)
+
+               30        40        50        60              70    
+sp|Q1X SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPP-R
+                                     .::.  ..    .: :.      .. :  :
+sp|O35         MVVVAAAPSAATAAPKVLLLSGQPASGGRALPLMVPGPRAAGSEASGTPQAR
+                       10        20        30        40        50  
+
+             80        90       100       110       120            
+sp|Q1X KRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN-------QFL
+       :: . :.   :.. ..: :.::.::::.:.::. .: .::.. ...:..:       :.:
+sp|O35 KRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENHKLQLENQLL
+             60        70        80        90       100       110  
+
+         130       140               150       160       170       
+sp|Q1X LQRLSQMEAENNRLSQQLAQLA--------AEVRGSRANTPMPGSPATASPTLTPTLFKQ
+        ..   . .::..:  .:.. .        .:..:: .   . ::  .:.  :   : .:
+sp|O35 REKTHGLVVENQELRTRLGMDTLDPDEVPEVEAKGSGVRL-VAGSAESAALRLCAPL-QQ
+            120       130       140       150        160        170
+
+       180       190       200       210       220       230       
+sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS
+        . .:   .  ::                                               
+sp|O35 VQAQLSPPQNIFPWTLTLLPLQILSLISFWAFWTSWTLSCFSNVLPQSLLVWRNSQRSTQ
+              180       190       200       210       220       230
+
+>>sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription   (347 aa)
+ s-w opt: 151  Z-score: 142.0  bits: 34.7 E(516081):  2.2
+Smith-Waterman score: 151; 30.9% identity (62.9% similar) in 97 aa overlap (66-160:255-347)
+
+          40        50        60        70          80        90   
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP--RKRAKTEDEKEQRRIERVLRN
+                                     ::   ::     ::.. :: ....... .:
+sp|Q9E SYLGSPQHSPSTSRAPPDSLPSPGVPRGSRPKPYDPPGVSVTAKVKTEKLDKKLKKMEQN
+          230       240       250       260       270       280    
+
+           100       110       120       130       140       150   
+sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS
+       ..::   :..:: :.: : .:  ..:..:. : .. ...  :     : : .:  ::: .
+sp|Q9E KTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEEVRKA
+          290       300       310       320           330       340
+
+           160       170       180       190       200       210   
+sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA
+       :..  .:                                                     
+sp|Q9E RGKKRVP                                                     
+                                                                   
+
+>>sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein d  (256 aa)
+ s-w opt: 148  Z-score: 141.7  bits: 34.2 E(516081):  2.3
+Smith-Waterman score: 148; 26.7% identity (54.1% similar) in 146 aa overlap (19-163:119-245)
+
+                           10        20        30        40        
+sp|Q1X             MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE
+                                     :.: .:. ... :.: .. : . .: . : 
+sp|O02 LLPGGPARLGGPGPAPRPLKREPDWGDGDAPGSLLPAQVAACAQTVVSLA-AAAQPTPPA
+       90       100       110       120       130        140       
+
+       50        60        70        80        90       100        
+sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM
+         .:   :.: .   : :  .    ::.  .   : :  .:  ::  :.. ::.. .   
+sp|O02 SPEP--PRRSPAPPAPGPARDKAAGKRGPDRGSPEYR--QRRERNNIAVRKSRDKAK---
+       150         160       170       180         190       200   
+
+      110       120       130       140       150        160       
+sp|Q1X EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPGSPATAS
+                  ..:: . :.: .. :::..:.:.. ::. .. :  :    .::.:    
+sp|O02 -----------RRNQEMQQKLVELSAENEKLQQRVEQLTRDLAGLRRFFKQLPGAPFLPG
+                         210       220       230       240         
+
+       170       180       190       200       210       220       
+sp|Q1X PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG
+                                                                   
+sp|O02 AGAADAR                                                     
+     250                                                           
+
+>>sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus   (323 aa)
+ s-w opt: 150  Z-score: 141.7  bits: 34.6 E(516081):  2.3
+Smith-Waterman score: 150; 27.9% identity (57.1% similar) in 154 aa overlap (14-163:174-319)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     :  :.::...:.   .:.  .  .: .   
+sp|P54 GYPGAGVTHDDLGQHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATAAATAAGG
+           150       160       170       180       190       200   
+
+            50        60        70        80           90       100
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS
+       . . :.      : :  : . .   .:  . :. :.::    .:.:  :.:.::. ::. 
+sp|P54 NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC
+                 210       220       230       240         250     
+
+              110       120       130       140        150         
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM
+       : ..  . ..::::: :. :: . : :..:..  : .  . .  .::    : . ...  
+sp|P54 RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS
+         260       270       280       290       300       310     
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+       :.::                                                        
+sp|P54 PSSPEFFL                                                    
+         320                                                       
+
+>>sp|A1C9M5|KAPC_ASPCL Putative transcription factor kap  (288 aa)
+ s-w opt: 149  Z-score: 141.7  bits: 34.4 E(516081):  2.3
+Smith-Waterman score: 149; 20.8% identity (56.0% similar) in 159 aa overlap (66-223:83-237)
+
+          40        50        60        70        80        90     
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA
+                                     :. .:  ..  ::  ..     .:. .:::
+sp|A1C HMQPTTPVARDQNNIDPAISGGAMLAGPQTPQPDLSGQESPKTYGKRPLSTSKRAAQNRA
+             60        70        80        90       100       110  
+
+         100       110       120       130       140       150     
+sp|Q1X AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA
+       : .. :.::. ... ::. :..  .    . . .. ..::: .: . . .: ...  ...
+sp|A1C AQRAFRQRKEAHIRDLEG-KVKAYET---MGEAIKALQAENYQLREYIINLQSRLLDTQG
+            120       130           140       150       160        
+
+          160       170       180       190       200       210    
+sp|Q1X NTP-MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQ
+       ..: .::.   ..:     .     .      .: : :.  .     . .. : ..:. .
+sp|A1C EVPELPGNIDLSQPRGDIPVPAPPTSGTSTSAVPVPPPTAPQQPQPAQNQASAPNDDMNS
+      170       180       190       200       210       220        
+
+          220       230       240       250       260       270    
+sp|Q1X HPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE
+          ..::::                                                   
+sp|A1C LNRIAVAGLGMRKPPTEEANYLGNSFQQQARRVRPDDGQPDASELTLPKQEPTHGLPLIS
+      230       240       250       260       270       280        
+
+>>sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-bi  (368 aa)
+ s-w opt: 151  Z-score: 141.6  bits: 34.7 E(516081):  2.3
+Smith-Waterman score: 151; 25.9% identity (54.7% similar) in 212 aa overlap (20-221:105-301)
+
+                          10        20        30        40         
+sp|Q1X            MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEE
+                                     :. .:. .  :::      ..    .  ::
+sp|Q8S PCLVQHDHTYSLSQEHVSIDLDNESYEKERAQMTPLRVEEPAD-----QEIARLILTEEE
+           80        90       100       110            120         
+
+      50        60        70        80        90       100         
+sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+       :.  .:.   :  ::     ::  :     .:.  .:..: .::. .:: ::..:.. . 
+sp|Q8S KRLLEKE---GLTLP---GMLPLTKM----EEQVLKRVRRKIRNKKSAQESRRKKKVYVG
+     130          140              150       160       170         
+
+     110       120       130       140       150            160    
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-----RGSRANTPMPGSPA
+        ::.. ...  ::  : .... .: .:  : .:: .: : :     ..: ..: .     
+sp|Q8S GLESRVLKYTAQNLELQNKVQLLEEQNLSLLDQLRRLQAMVIQTANKASSSSTCVLVLLF
+     180       190       200       210       220       230         
+
+          170        180         190        200        210         
+sp|Q1X TASPTLTPTLFKQE-RDELPLER--IPFPTPSL-SDYSPTLKPSTL-AESSDVAQHPAVS
+       .    :.:...... :  :: :.  .     .: :.  : :.: .: .:    . .: ..
+sp|Q8S SFCLLLVPAMYSSDTRGSLPAEHRVLSRQLRALPSEDPPQLEPPALQSEVPKDSLNPELQ
+     240       250       260       270       280       290         
+
+     220       230       240       250       260       270         
+sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF
+       .:                                                          
+sp|Q8S AASNSCCLFHLMPQAPRAEPPLQLPLPDGFSGCSCPDSISPLHANLTREEGWLPTPSPTS
+     300       310       320       330       340       350         
+
+>>sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus  (380 aa)
+ s-w opt: 151  Z-score: 141.3  bits: 34.7 E(516081):  2.4
+Smith-Waterman score: 151; 24.0% identity (50.0% similar) in 246 aa overlap (2-237:57-297)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|O77 LSYYHSPADSFSSMGSPVNAQDYCTDLAVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   : :  .    .  . :  . :.   . . .   . .  . .:.:.:::.
+sp|O77 PSQTRAPHPYGVPTPSAGAYSRAGVMKTMTGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|O77 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .:   ..::  :.   :     : .:   :::   : : ::.   . . .
+sp|O77 ACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVEPVKSVGS
+             210       220       230       240       250       260 
+
+            210       220       230        240       250       260 
+sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH
+           ::  :  . :: :  .    . ..: .:: ::                        
+sp|O77 MELKAEPFDDYMFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMATELE
+             270       280       290       300       310       320 
+
+             270       280       290       300       310       320 
+sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK
+                                                                   
+sp|O77 PLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 
+             330       340       350       360       370       380 
+
+>>sp|Q6NS15|MED15_XENLA Mediator of RNA polymerase II tr  (777 aa)
+ s-w opt: 157  Z-score: 141.1  bits: 35.7 E(516081):  2.4
+Smith-Waterman score: 157; 20.1% identity (53.1% similar) in 273 aa overlap (30-297:282-540)
+
+                10        20        30        40        50         
+sp|Q1X  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSW
+                                     : .  ..  ... :.:   ...   . .  
+sp|Q6N QRIAHLQQMQQMQQQQQQQQQQQQQQQQQPPPQQVMQLQQMQQQQVAQSQQQQLLSTQPQ
+             260       270       280       290       300       310 
+
+      60        70        80        90       100        110        
+sp|Q1X GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK-RLEMEKLENEKIQM
+       .  : : . ..: .    :   ..:.... . . ::  : . ... . . ..  ... :.
+sp|Q6N APSL-VAQGQIPSQVMPVTLTPQQQQQLKILQQVRAQQQQQAQHQAQQQAQQQAHQQAQQ
+              320       330       340       350       360       370
+
+      120       130       140       150       160       170        
+sp|Q1X EQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT-PTLFKQ
+       . :.:   :  .:.  .  . .:: :: ::. ....:.        .. :... :.  .:
+sp|Q6N QAQQQAQQQAAQQQAQQAAQQAQQQAQQAAQQQAAQAHLAAGQVTQNSIPVMSSPSPVQQ
+              380       390       400       410       420       430
+
+       180       190       200       210       220       230       
+sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS
+        .   :.   : :.:. :.  :  .:.     :.:.. :: : ...  . :  :     :
+sp|Q6N VQTPQPMPPPPQPSPQPSQ--PMSQPN-----SNVSSGPAPSPSSFMPSPSPQP---SQS
+              440         450            460       470          480
+
+       240       250       260       270        280       290      
+sp|Q1X DLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV-FEDGLAFDVLEGGDLSAF--PFDS
+         . .. .. ..: :   .:   . .: . : :.   :.   .: :.  .:: .  :.  
+sp|Q6N PASARTPQNFSVP-SPGPLNTPGNPNSVMSPASNNQSEEQQYLDKLK--QLSKYIEPLRR
+              490        500       510       520         530       
+
+          300       310       320       330       340              
+sp|Q1X MVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC         
+       :.:                                                         
+sp|Q6N MINKIDKNEERKKDLSKMKSLLDILTDPNKRCPLKTLQKCEIALEKLKNDMAVPTPPPPT
+       540       550       560       570       580       590       
+
+>>sp|P94517|YSCB_BACSU Uncharacterized protein yscB OS=B  (221 aa)
+ s-w opt: 146  Z-score: 141.0  bits: 33.9 E(516081):  2.5
+Smith-Waterman score: 146; 26.5% identity (56.9% similar) in 181 aa overlap (7-183:28-188)
+
+                                    10        20          30       
+sp|Q1X                      MSCDMEKTMSSVDSLPATPASEVP--VLTVSPADTSLN-
+                                  :. ..: .  : : .:.   .  ..:.. ... 
+sp|P94 MNKLIQLALFFTLMLTGCSNSSTSSESKVETTVKTTAAFPQKELEKELKKLKPVSLDMKF
+               10        20        30        40        50        60
+
+         40        50        60        70        80        90      
+sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA
+        . . :.  : . :. :.:... . :  . :      :: : ..:: .:.       : :
+sp|P94 ESPLATELGKRKAKEEAEKQRQIAAEKKLEKER--EAKRKKQQEEKAERQ-------RLA
+               70        80        90         100              110 
+
+        100        110       120       130       140       150     
+sp|Q1X AQTSRERKRL-EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA
+        : . ::.:: : :.    . ..:.: :  .:. .. .::..: ::   :  .:. .: .
+sp|P94 EQQAAERQRLAEAER----QAELERQRQAAIQKEQKANAEKKRQSQAQRQ-QTEAPSSNS
+             120           130       140       150        160      
+
+         160       170       180       190       200       210     
+sp|Q1X NTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQH
+       . : :.: . .. :.     .:  .:::                                
+sp|P94 QDP-PSSSSQTDKTI-----QQPASELPDDDGYGYEERKKWHDDQVEWGIKQGYIDPEDA
+         170       180            190       200       210       220
+
+>>sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xeno  (316 aa)
+ s-w opt: 149  Z-score: 140.9  bits: 34.4 E(516081):  2.5
+Smith-Waterman score: 149; 26.6% identity (62.6% similar) in 139 aa overlap (29-163:176-312)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS
+                                     ::. .: .: ...... . .... .. : :
+sp|Q50 QYQGLPHEEMGLPHQHPHHHHHHHHHQPSPSPSGSSSSSQQLQNSHQQHQNSSAVEDRFS
+         150       160       170       180       190       200     
+
+       60        70        80           90       100       110     
+sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+         : . .   .:  . :. :.:.    .:.:  :.:.::. ::. : ..  . ..:::::
+sp|Q50 DDQLVSMSVRELNRHLRGFTKDDVIRLKQKR--RTLKNRGYAQSCRFKRVQQKHHLENEK
+         210       220       230         240       250       260   
+
+         120       130       140       150        160       170    
+sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-RGSRANTPMPGSPATASPTLTPTL
+        :. :: . :  ..:..  : .  . .  .::  . : . ...  :.::           
+sp|Q50 TQLIQQVEQLKLEVSRLARERDAYKIKCEKLANTTFREAGSTSDNPSSPEFFM       
+           270       280       290       300       310             
+
+          180       190       200       210       220       230    
+sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD
+
+>>sp|O57342|MAFA_COTJA Transcription factor MafA OS=Cotu  (286 aa)
+ s-w opt: 148  Z-score: 140.8  bits: 34.2 E(516081):  2.5
+Smith-Waterman score: 148; 34.1% identity (67.1% similar) in 85 aa overlap (83-167:201-281)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     .:.:  :.:.::. ::. : ..  . . ::
+sp|O57 RFSDDQLVSMSVRELNRQLRGFSKEEVIRLKQKR--RTLKNRGYAQSCRYKRVQQRHILE
+              180       190       200         210       220        
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       ::: :...: . : :..:..  : .  ...  .:::  ::   .:  :..: :..     
+sp|O57 NEKCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPRETSPPAAPKTTAADFFM
+      230       240       250       260         270       280      
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+
+>>sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norve  (380 aa)
+ s-w opt: 150  Z-score: 140.4  bits: 34.6 E(516081):  2.7
+Smith-Waterman score: 150; 27.6% identity (50.4% similar) in 250 aa overlap (8-237:54-297)
+
+                                      10        20           30    
+sp|Q1X                        MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTS
+                                     ..::.. .:.. : :  : :   :.:   .
+sp|P12 GDSLSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTAISTSPDLQWLVQP---T
+            30        40        50        60        70           80
+
+           40        50         60        70                 80    
+sp|Q1X LNSADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQ
+       : :. . .:   :.    :. .  ....   : ::    :     .:.:.:    .:.:.
+sp|P12 LVSSVAPSQTRAPHPYGLPTPSTGAYARA-GVVKTMSGGRAQSIGRRGKVEQLSPEEEEK
+               90       100        110       120       130         
+
+           90       100       110       120       130       140    
+sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA
+       :::.:  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::
+sp|P12 RRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA
+     140        150       160       170       180       190        
+
+          150       160       170          180          190        
+sp|Q1X QLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYS
+             .    .  .:   ...:  ::   :     : .:   :::   : : :::   .
+sp|P12 AHRPACKIPN-DLGFPEEMSVTSLDLTGGLPEATTPESEEAFTLPLLNDPEPKPSLEPVK
+      200        210       220       230       240       250       
+
+      200       210       220       230        240       250       
+sp|Q1X PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFN
+          .    ::  :    :: :  .    . ..:  :: ::                    
+sp|P12 NISNMELKAEPFDDFLFPASSRPSGSETARSVPDVDLSGSFYAADWEPLHSSSLGMGPMV
+       260       270       280       290       300       310       
+
+       260       270       280       290       300       310       
+sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE
+                                                                   
+sp|P12 TELEPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTL
+       320       330       340       350       360       370       
+
+>>sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catu  (381 aa)
+ s-w opt: 150  Z-score: 140.4  bits: 34.6 E(516081):  2.7
+Smith-Waterman score: 150; 26.9% identity (50.6% similar) in 249 aa overlap (9-237:55-298)
+
+                                     10        20           30     
+sp|Q1X                       MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTSL
+                                     .::.. .:.. : :  : :   :.:   .:
+sp|Q8H DNLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSANFIPTVTAISTSPDLQWLVQP---TL
+           30        40        50        60        70           80 
+
+          40        50         60        70                 80     
+sp|Q1X NSADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQR
+        :. . .:   :.    :: .  ....   :  ..   :     .:.:.:    .:.:.:
+sp|Q8H VSSVAPSQTRAPHPYGVPAPSAGAYSRAGVVKTVTAGGRAQSIGRRGKVEQLSPEEEEKR
+              90       100       110       120       130       140 
+
+          90       100       110       120       130       140     
+sp|Q1X RIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQ
+       ::.:  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   :: 
+sp|Q8H RIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAA
+              150       160       170       180       190       200
+
+         150       160       170          180          190         
+sp|Q1X LAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSP
+            .    .  .:   ..::  :.   :     : .:   :::   : : ::.   . 
+sp|Q8H HRPACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVEPVKS
+               210       220       230       240       250         
+
+     200       210       220       230        240       250        
+sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNR
+         .    ::  :    :: :  .    . ..: .:: ::                     
+sp|Q8H ISSMELKAEPFDDFLFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMAT
+     260       270       280       290       300       310         
+
+      260       270       280       290       300       310        
+sp|Q1X LFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDET
+                                                                   
+sp|Q8H ELEPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCGAAHRKGSSSNEPSSDSLSSPTLL
+     320       330       340       350       360       370         
+
+>>sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodopus c  (381 aa)
+ s-w opt: 150  Z-score: 140.4  bits: 34.6 E(516081):  2.7
+Smith-Waterman score: 150; 23.5% identity (50.0% similar) in 306 aa overlap (2-291:57-353)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|Q56 LSYYHSPADSFSSMGSPVNAQDFCADLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   : :  .    .    :  : :.   . . .   . .  . .:.:.:::.
+sp|Q56 PSQTRAPHPYGVPTPPTGAYSRAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  ..:.... :  .....  :...:   ::    
+sp|Q56 RE-RNKMAAAKCRNRRRELTDTLQAETDHLEDEKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .: . ..::  ::   :     : .:   :::   : :  ::   .   .
+sp|Q56 ACKIPD-DLGFPEDMSVASLDLTGGLPEATTPESEEAFSLPLLNDPEPKTSLEPVKSISN
+             210       220       230       240       250       260 
+
+            210       220        230            240        250     
+sp|Q1X PSTLAESSDVAQHPAVSV-AGLEGDGSALPLFDL-GS----DLKH-HSTDDVAAPLSDDD
+           ::  :    :: :  .: :  . ..: .:: ::    : .  ::..   .:.. . 
+sp|Q56 MELKAEPFDDFLFPASSRPSGSETTARSVPDMDLSGSFYAADWEPLHSSSLGMGPMATE-
+             270       280       290       300       310       320 
+
+         260       270       280       290       300       310     
+sp|Q1X FNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLP
+       .. :     .  :. ... ....:   :.   ..::                        
+sp|Q56 LEPLCTPVVTCTPSCTTYTSSFVFTYPEA---DSFPSCAAAHRKGSSSNEPSSDSLSSPT
+              330       340          350       360       370       
+
+         320       330       340     
+sp|Q1X DETTCKTSSVQPGFGASTTRCDGQGIAAGC
+                                     
+sp|Q56 LLAL                          
+       380                           
+
+>>sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2  (872 aa)
+ s-w opt: 157  Z-score: 140.2  bits: 35.7 E(516081):  2.7
+Smith-Waterman score: 157; 33.6% identity (62.6% similar) in 107 aa overlap (16-119:188-291)
+
+                              10        20        30        40     
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV
+                                     :..::.  :: ...::  .     ..:.: 
+sp|Q2V QSEPEAAAPAAEPVAPTAPVAAAPAPAPATPVAPAQPKPVAAAAPAGDATAVPRARTEEE
+       160       170       180       190       200       210       
+
+          50        60        70           80        90       100  
+sp|Q1X KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK---TEDEKEQRRIERVLRNRAAAQTSRE
+       . ::.. :::: .  .  :: .:. : :. .:   :.   .. : ::  :. ::.. .::
+sp|Q2V EEEEER-AKKRAAAHKPAPVKRTE-PRRRTGKLTITDALTDDDRSERG-RSLAAVKRARE
+       220        230       240        250       260        270    
+
+            110       120       130       140       150       160  
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS
+       :.::.  .  .::.  :                                           
+sp|Q2V RERLKHMQKGSEKVIREVIVPESITVQELANRMAVRGADVIKCLMRLGVMATINQNIDAD
+          280       290       300       310       320       330    
+
+>>sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcriptio  (348 aa)
+ s-w opt: 149  Z-score: 140.2  bits: 34.4 E(516081):  2.8
+Smith-Waterman score: 149; 27.7% identity (61.0% similar) in 141 aa overlap (19-154:210-342)
+
+                           10        20        30        40        
+sp|Q1X             MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE
+                                     :...   . .:: :.::.: . . .  .  
+sp|Q3Z LCSEVVIPEGDSKPDSTTTGFPQCIKEEDAPSDNDSGICMSP-DSSLGSPQDSPSTSRG-
+     180       190       200       210       220        230        
+
+       50        60          70           80        90       100   
+sp|Q1X EKKPAKKRKSWG--QELPVPKTNLPPRKR---AKTEDEKEQRRIERVLRNRAAAQTSRER
+         .: :.  : :  .    ::   :: ..   ::.. :: ....... .:..::   :..
+sp|Q3Z --SPNKSLLSPGALSGSSRPKPYDPPGEKMVAAKVKGEKLDKKLKKMEQNKTAATRYRQK
+         240       250       260       270       280       290     
+
+           110       120       130       140       150       160   
+sp|Q1X KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSP
+       :: :.: : .:  ..:..:. : .. ...  : . :..:.     ::: .:         
+sp|Q3Z KRAEQEALTGECKELEKKNEALKEKADSLAKEIQYLKDQIE----EVRKAREKKRVL   
+         300       310       320       330           340           
+
+           170       180       190       200       210       220   
+sp|Q1X ATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL
+
+>>sp|Q5HZY0|UBXN4_RAT UBX domain-containing protein 4 OS  (506 aa)
+ s-w opt: 152  Z-score: 140.0  bits: 34.9 E(516081):  2.8
+Smith-Waterman score: 152; 24.4% identity (53.0% similar) in 279 aa overlap (73-337:200-459)
+
+             50        60        70        80        90       100  
+sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE
+                                     :   : :...:..: :.. :.    .   :
+sp|Q5H GECAGHDSLSQEPPGCSNQRPAEDLTVRVERLTKKLEERREEKRKEEAQRE---IKKEIE
+     170       180       190       200       210       220         
+
+            110       120       130           140       150        
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN----NRLSQQLAQLAAEVRGSRANTP
+       :..   : :. .. : :. .. .:.. :. .::.    .:..::.:   :: :..:    
+sp|Q5H RRKTGKEMLDYKRKQEEELTKRMLEERSREKAEDRAARERIKQQIALDRAE-RAARFAKT
+        230       240       250       260       270        280     
+
+      160       170             180       190       200       210  
+sp|Q1X MPGSPATASPTLTPTL---FKQE---RDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+         .  : :.  :.       :.:   ::.  . :: :  :. :...  . ::  :   ..
+sp|Q5H KEAEAAKAAALLAKQAEAEVKRESSTRDRSTIARIQFRLPDGSSFTNQF-PSD-APLEEA
+         290       300       310       320       330         340   
+
+            220       230           240       250       260        
+sp|Q1X AQHPAVSVAGLEGDGSALPLFD----LGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEP
+        :  : .:..  :. :   .:        : :..  :   :: ..  .    .  .:. :
+sp|Q5H RQFAAQTVGNTYGNFSLATMFPRREFTREDYKRKLLDLELAPSASVVLLPAGRPATSIVP
+           350       360       370       380       390       400   
+
+      270       280       290       300       310       320        
+sp|Q1X DSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPG
+       .::    :  . .: :  :  .:: ..  . :. .      ...  : .:. ...:..:.
+sp|Q5H SSS----GDIWTLL-GTVL--YPFLAIWRLISNFL------FSNPPPAQTSARATSTEPS
+               410          420       430             440       450
+
+      330       340                                            
+sp|Q1X FGASTTRCDGQGIAAGC                                       
+        .::... .                                               
+sp|Q5H NSASSSKSEKREPVRKRVLEKRGEDFKKEGKIYRLRTQDDGEDENNTWNGNSTQQM
+              460       470       480       490       500      
+
+>>sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7   (806 aa)
+ s-w opt: 156  Z-score: 139.9  bits: 35.6 E(516081):  2.8
+Smith-Waterman score: 156; 26.3% identity (50.2% similar) in 259 aa overlap (3-236:429-680)
+
+                                           10          20        30
+sp|Q1X                             MSCDMEKTMSSVDSLP--ATPASEVPVLTVSP
+                                     : ::   :   .::  . :: ..  ::..:
+sp|P0C IRFQPSLQPVASEPVCPDVEMPSPWAPSGDCAME---SPPPALPPCSGPAPDTVDLTLQP
+      400       410       420       430          440       450     
+
+               40        50              60        70         80   
+sp|Q1X ADTSLNSADVKTQEVKPEEKKPA------KKRKSWGQELPVPKTNLP-PRKRAKTEDEKE
+       :  . . :  : . .  .. : :      :. .:  .. :    . : ::: . ......
+sp|P0C APPASELAPPKREGAISDNTKAALKAALLKSLRSRLRDGPSAPLEAPEPRKPVTAQERQR
+         460       470       480       490       500       510     
+
+            90       100       110       120       130        140  
+sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR-LSQQ
+       .:. .:  : :      ::..: : :. :     .   .   :  :  . ..:.: : ..
+sp|P0C EREEKR--RRRQERAKEREKRRQERERKERGAGTLGGPSTDPLAGL--VLSDNDRSLLER
+         520         530       540       550         560       570 
+
+            150       160        170        180        190         
+sp|Q1X LAQLAAEVRGSRANTPMPG-SPATASPTLTPTL-FKQERDEL-PLERIPFPT--PSLSDY
+        ...:     . : .: :  .:..:.::  :.   .:    : :   :: :.  :     
+sp|P0C WTRMARPPVPAPAPAPAPTPKPSSAQPTSPPNGPVSQSTAPLQPAGSIPGPASQPVCPPP
+             580       590       600       610       620       630 
+
+       200               210       220         230       240       
+sp|Q1X SPTLKPS--------TLAESSDVAQHPAVSVAGLEGDGS--ALPLFDLGSDLKHHSTDDV
+       .:. .:.        :   .: .:..  :  .:: :.:.  .:: :  :           
+sp|P0C GPVPQPAGPVPAPLQTAPSTSLLASQSLVPPSGLPGSGAPEVLPYFPSGPPPPDPGLTPQ
+             640       650       660       670       680       690 
+
+       250       260       270       280       290       300       
+sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG
+                                                                   
+sp|P0C PSTSESPDVNLVTQQLSKSQVEDPLPPVFSGTPKGSGAGYGVGFDLEEFLNQSFDMGVAD
+             700       710       720       730       740       750 
+
+>>sp|Q9N0J3|CEBPD_SHEEP CCAAT/enhancer-binding protein d  (255 aa)
+ s-w opt: 146  Z-score: 139.9  bits: 33.9 E(516081):  2.9
+Smith-Waterman score: 146; 26.7% identity (54.1% similar) in 146 aa overlap (19-163:118-244)
+
+                           10        20        30        40        
+sp|Q1X             MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE
+                                     :.: .:. ... :.: .. : . .: . : 
+sp|Q9N LLPGGPARLGGPGPAPRPLKREPDWGDGDAPGSLLPAQVAACAQTVVSLAPA-AQPTPP-
+        90       100       110       120       130        140      
+
+       50        60        70        80        90       100        
+sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM
+         .:   :.: .   : :  .    ::.  .   : :  .:  ::  :.. ::.. .   
+sp|Q9N -ASPDPPRRSPAPPAPGPARDKAAGKRGPDRGSPEYR--QRRERNNIAVRKSRDKAK---
+          150       160       170       180         190            
+
+      110       120       130       140       150        160       
+sp|Q1X EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPGSPATAS
+                  ..:: . :.: .. :::..:.:.. ::. .. :  :    .::.:    
+sp|Q9N -----------RRNQEMQQKLVELSAENEKLQQRVEQLTRDLAGLRRFFKQLPGAPFLPG
+                200       210       220       230       240        
+
+       170       180       190       200       210       220       
+sp|Q1X PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG
+                                                                   
+sp|Q9N AGAADAR                                                     
+      250                                                          
+
+>>sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-bind  (367 aa)
+ s-w opt: 149  Z-score: 139.7  bits: 34.4 E(516081):  2.9
+Smith-Waterman score: 149; 33.3% identity (63.2% similar) in 87 aa overlap (60-146:170-252)
+
+      30        40        50        60        70        80         
+sp|Q1X PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER
+                                     :::  .  ..::  :     .:.  ..:.:
+sp|Q5U PRVSTIAPPPPAALLSCQRLFLTDEEKHLLGQEGVTLPSHLPLTK----AEERILKKIRR
+     140       150       160       170       180           190     
+
+      90       100       110       120       130       140         
+sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE
+        .::. .:: ::.::.  .. ::..     .::: : ......: .:  :  :. ::   
+sp|Q5U KIRNKQSAQDSRRRKKEYIDGLESRVAACSEQNQKLQRKVQELERQNISLVAQVHQLQKF
+         200       210       220       230       240       250     
+
+     150       160       170       180       190       200         
+sp|Q1X VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES
+                                                                   
+sp|Q5U TAQTSSRAAQTSTCVLILLFSLALIILPSFSPFQSQPEARSEGYQLHGVISRNILTHEDM
+         260       270       280       290       300       310     
+
+>>sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1 subu  (863 aa)
+ s-w opt: 156  Z-score: 139.4  bits: 35.6 E(516081):    3
+Smith-Waterman score: 156; 25.3% identity (55.5% similar) in 229 aa overlap (1-215:208-432)
+
+                                             10        20        30
+sp|Q1X                               MSCDMEKTMSSVDSLPATPASEVPVLTVSP
+                                     .:    .. : . : :  :.. .:.   .:
+sp|A0J DSDTEEEEEEEEEEEEQQQEAEVSHGNESVLSTGSTSSASVIASSPE-PSKSAPT---TP
+       180       190       200       210       220        230      
+
+                 40        50        60         70        80       
+sp|Q1X ADTS-LNSAD-VKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRI
+       :.:: .:.:. :: . .:  ...  :.:.   .: :         .:. ...  ::... 
+sp|A0J ASTSRINAANKVKRRSLKSVQEQEEKQRQRDEKERLKQEAKAAKEKKKEEARKMKEEKER
+           240       250       260       270       280       290   
+
+        90       100        110       120       130         140    
+sp|Q1X ERVLRNRAAAQTSRERK-RLEMEKLENEKIQMEQQNQFLLQRLSQM--EAENNRLSQQLA
+       :.  ...   .  ::.: : : :: .. : . ::... .  .: .   . :..::...  
+sp|A0J EKKEKKEKDEKERREKKERDEKEKADKLKAKEEQRQMKIEAKLEEKRKKEEEKRLKEEKD
+           300       310       320       330       340       350   
+
+              150         160       170       180       190        
+sp|Q1X QLAAE----VRG-SRANTPM-PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYS
+       .. ::    .:  .. .: . : . :.:   ..:  .: . .  :: :.      : : .
+sp|A0J RIKAEKAEITRFLQKPKTQLAPKTLASACGKFAPFEIKAHMSLAPLTRVQCEDSVLEDLD
+           360       370       380       390       400       410   
+
+      200         210       220       230       240       250      
+sp|Q1X PTL-KP-STLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDF
+         : .: :::   .: . :                                         
+sp|A0J RYLAQPDSTLNGLKDWTGHKPRSSGPTRPRHSAQGDCVVITESQKADDGPDRSRYGRMKL
+           420       430       440       450       460       470   
+
+>>sp|Q96JK9|MAML3_HUMAN Mastermind-like protein 3 OS=Hom  (1134 aa)
+ s-w opt: 158  Z-score: 139.0  bits: 35.9 E(516081):  3.2
+Smith-Waterman score: 158; 22.8% identity (53.1% similar) in 254 aa overlap (8-250:390-619)
+
+                                      10        20        30       
+sp|Q1X                        MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNS
+                                     : .:. :. .:::.  :.   :::. ...:
+sp|Q96 DPSHSPFAHVSMGSPQARPSSSGPPFSTVSTATSLPSVASTPAAPNPA--SSPANCAVQS
+     360       370       380       390       400         410       
+
+        40        50        60        70        80        90       
+sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA
+        .. .:   : .  :   : . :  :    ...     . .   . .    . :.. :: 
+sp|Q96 PQTPNQAHTPGQAPP---RPGNGYLLNPAAVTVAGSASGPVAVPSSDMSPAEQLKQMAAQ
+       420       430          440       450       460       470    
+
+       100       110       120       130       140       150       
+sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT
+       :  ..: .: ..: .... :..::.:   :. .:.. ..:. :.  . :.        ..
+sp|Q96 Q--QQRAKLMQQKQQQQQQQQQQQQQ---QQQQQQQQHSNQTSNW-SPLGPP------SS
+            480       490          500       510        520        
+
+       160           170       180       190              200      
+sp|Q1X PMPGSPATA----SPTLTPTLFKQERDELPLERIPFPTPSLSDYSP-------TLKPSTL
+       :. :.  ::    :: . :  :...   .:     .   ....: :       . .:..:
+sp|Q96 PY-GAAFTAEKPNSPMMYPQAFNNQNPIVPPMANNLQKTTMNNYLPQNHMNMINQQPNNL
+             530       540       550       560       570       580 
+
+        210       220       230       240       250       260      
+sp|Q1X AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSV
+       . .:   ::  ..       :.. ::  ...::... :  :: :                
+sp|Q96 GTNSLNKQHNILTY------GNTKPLTHFNADLSQRMTPPVANPNKNPLMPYIQQQQQQQ
+             590             600       610       620       630     
+
+        270       280       290       300       310       320      
+sp|Q1X EPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQ
+                                                                   
+sp|Q96 QQQQQQQQQQQPPPPQLQAPRAHLSEDQKRLLLMKQKGVMNQPMAYAALPSHGQEQHPVG
+         640       650       660       670       680       690     
+
+>>sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcripti  (127 aa)
+ s-w opt: 139  Z-score: 139.0  bits: 32.7 E(516081):  3.2
+Smith-Waterman score: 139; 28.6% identity (68.8% similar) in 77 aa overlap (69-145:21-97)
+
+       40        50        60        70        80        90        
+sp|Q1X DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQ
+                                     : :  .  .   : ..:...:  .::.:::
+sp|Q9N           MSQGLPAAGSVLQRSVAAPGNQPQPQPQQQSPEDDDRKVRRREKNRVAAQ
+                         10        20        30        40        50
+
+      100       110       120       130       140       150        
+sp|Q1X TSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP
+        ::...  . .::..:  ..::.: .: ......  : ..:.. : .             
+sp|Q9N RSRKKQTQKADKLHEEYESLEQENTMLRREIGKLTEELKHLTEALKEHEKMCPLLLCPMN
+               60        70        80        90       100       110
+
+      160       170       180       190       200       210        
+sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV
+                                                                   
+sp|Q9N FVPVPPRPDPVAGCLPR                                           
+              120                                                  
+
+>>sp|Q9C0A6|SETD5_HUMAN SET domain-containing protein 5   (1442 aa)
+ s-w opt: 160  Z-score: 139.0  bits: 36.2 E(516081):  3.2
+Smith-Waterman score: 160; 21.2% identity (49.9% similar) in 359 aa overlap (2-331:410-760)
+
+                                            10        20        30 
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVLTVSPA
+                                     .: ..:   ..  ::  :    : : .  :
+sp|Q9C TKDAEVTIAFDYEYSNCNYKVDCACHKGNRNCPIQKRNPNATELPLLPPP--PSLPTIGA
+     380       390       400       410       420         430       
+
+              40        50        60        70        80        90 
+sp|Q1X DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL
+       .:   .:  :  :.. ...   ..  . .::.:   :    .... . .:: ... :.:.
+sp|Q9C ETRRRKARRKELEMEQQNEASEENNDQQSQEVPEKVTVSSDHEEVDNPEEKPEEEKEEVI
+       440       450       460       470       480       490       
+
+                100         110       120       130       140      
+sp|Q1X ---RNRAAAQTSRERKRLE--MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL
+          .: : .. .:: ...:  :. .:: . . ....: : :  :..:  ..     ... 
+sp|Q9C DDQENLAHSRRTREDRKVEAIMHAFENLEKRKKRRDQPLEQSNSDVEITTTTSETPVGEE
+       500       510       520       530       540       550       
+
+              150       160       170       180       190          
+sp|Q1X A------AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS-------
+       .      .:: .: .:. .:..: ... .   .  .:  :    . .: : :.       
+sp|Q9C TKTEAPESEVSNSVSNVTIPSTPQSVGVNTRRS--SQAGDIAAEKLVPKPPPAKPSRPRP
+       560       570       580       590         600       610     
+
+              200       210       220       230       240          
+sp|Q1X ---LSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAA-
+          .: :  .       ...  ::.  .: :.::  ::     .: .  .  : :. .  
+sp|Q9C KSRISRYRTSSAQRLKRQKQANAQQAELSQAALEEGGSN----SLVTPTEAGSLDSSGEN
+         620       630       640       650           660       670 
+
+      250       260       270       280           290       300    
+sp|Q1X -PLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSA----FPFDSMVNFDSEPVT
+        ::. .: . .    : :.  .: .     . : :  . .:     : .  . . ..:..
+sp|Q9C RPLTGSDPTVVSITGSHVNRAASKYPKTKKYLVTEWLNDKAEKQECPVECPLRITTDPTV
+             680       690       700       710       720       730 
+
+           310        320       330       340                      
+sp|Q1X LEG-IEMAHGL-PDETTCKTSSVQPGFGASTTRCDGQGIAAGC                 
+       :   ..:  ::  .   : : .    ::.                               
+sp|Q9C LATTLNMLPGLIHSPLICTTPKHYIRFGSPFIPERRRRPLLPDGTFSSCKKRWIKQALEE
+             740       750       760       770       780       790 
+
+>>sp|B3DM43|SOX5_XENTR Transcription factor Sox-5 OS=Xen  (753 aa)
+ s-w opt: 154  Z-score: 138.6  bits: 35.2 E(516081):  3.4
+Smith-Waterman score: 154; 23.3% identity (50.0% similar) in 236 aa overlap (95-327:224-436)
+
+           70        80        90       100       110       120    
+sp|Q1X VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF
+                                     ::.:  ..:...:. : ..:.:  .::. .
+sp|B3D EKERQLMAMINQLTSLREQLLAAHDEQKKLAASQIEKQRQQMELAKQQQEQIARQQQQLL
+           200       210       220       230       240       250   
+
+          130       140       150       160       170          180 
+sp|Q1X LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE---RDE
+         :.  ..  .. ... ::  :   :      : . .. :. .  : :  :. .    : 
+sp|B3D QQQHKINLLQQQIQVQGQLPPLMIPVFPPDQRT-LAAAAAAQQGFLIPPGFSYKPGCSDP
+           260       270       280        290       300       310  
+
+             190       200       210       220       230       240 
+sp|Q1X LPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKH
+        :.. ::    . .  .: : :  : .   .::  :..:.     :. ::       .  
+sp|B3D YPVQLIPTTMAAAAAATPGLAPLQLQQLY-AAQLAAMQVS----PGAKLP------GVPP
+            320       330       340        350                 360 
+
+             250       260       270       280       290       300 
+sp|Q1X HSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSE
+        . .....: :       .: :.:.       .:    :: .  .::: :  :  .  : 
+sp|B3D SNLSNAVSPSS-------IHTDKSTSSPPPKTKD----DVTQPLNLSAKPKGSDSKSPSS
+             370              380           390       400       410
+
+             310       320       330       340                     
+sp|Q1X PVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC                
+       :.. .  ... .:  .  :.::.  :                                  
+sp|B3D PTSPHIPRLSSALAHKPICSTSASTPLRVNSIDILSSITSPGYLNDHDAVTKAIQEARQM
+              420       430       440       450       460       470
+
+>>sp|A5FV21|IF2_ACICJ Translation initiation factor IF-2  (887 aa)
+ s-w opt: 155  Z-score: 138.2  bits: 35.4 E(516081):  3.5
+Smith-Waterman score: 155; 26.7% identity (49.2% similar) in 240 aa overlap (41-255:41-271)
+
+               20        30        40        50        60        70
+sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL
+                                     ... :. : .:  :.  . : :   :..  
+sp|A5F KGRLSLRPVNRGELGRTVDAGSVRQSFSHGRSKVVQVEVRK--KRGGAAGAETGRPSA--
+               20        30        40        50          60        
+
+               80        90       100       110                    
+sp|Q1X PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQM------------
+       : :  . .   .     :.. :.::... .::  ::: :. :.:::..            
+sp|A5F PSRASGGAAAPRGLTAAEQAARQRAVVEQQREAARLEAERREQEKISILSAAEEARRKAE
+         70        80        90       100       110       120      
+
+       120       130       140         150       160          170  
+sp|Q1X -EQQNQFLLQRLSQMEAENNRLSQQLAQL--AAEVRGSRANTPMPG---SPATASPTLTP
+        : .     .:: . : :  :  .. :.   :::.  . :  : :.   :: .: :  .:
+sp|A5F EEARAAEEAERL-RAEEEARRREEEEAERRRAAEASQATAAPPAPAAAASPRAAMP--AP
+        130        140       150       160       170       180     
+
+            180       190       200              210       220     
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL-------AESSDVAQHPAVSVAGLEG
+       :    .    : .:   :.:  .. : ::.  .         :.:  :..:. ..:  . 
+sp|A5F TAAPARPGAAPARRTA-PVPPATSASETLRLRAARTGRDEEEEASRPARRPGSGAAPSRK
+           190        200       210       220       230       240  
+
+         230       240       250       260       270       280     
+sp|Q1X DGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGG
+        .   :   .:.: .. .  :: : :: ::                              
+sp|A5F PSVPAPK-KVGDDRRRGARIDVQAALSGDDERVRSLASVRRQRDRERRQAELERLRSDQV
+             250       260       270       280       290       300 
+
+>>sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-bi  (357 aa)
+ s-w opt: 147  Z-score: 138.1  bits: 34.0 E(516081):  3.6
+Smith-Waterman score: 147; 27.6% identity (59.3% similar) in 123 aa overlap (52-168:194-315)
+
+              30        40        50        60        70        80 
+sp|Q1X EVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDE
+                                     :: .. .  : .  :. .   :.:.  :: 
+sp|Q8K HSHSHLHAHPAHHQTSPHPPLHTGNQAQVSPATQQMQPTQTIQPPQPTGGRRRRVVDEDP
+           170       180       190       200       210       220   
+
+              90       100       110       120       130       140 
+sp|Q1X KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQ
+        :.:: . . ::::::   :..... . .::..  .. : :. : ...:... :  .:.:
+sp|Q8K DERRR-KFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQLKQ
+            230       240       250       260       270       280  
+
+                  150        160       170       180       190     
+sp|Q1X QL-----AQLAAEVRGSRAN-TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS
+        :       ..:  . :..  .:  . ::.  :                           
+sp|Q8K LLLTHKDCPITAMQKESQGYLSPESSPPASPVPACSQQQVIQHNTITTSSSVSEVVGSST
+            290       300       310       320       330       340  
+
+         200       210       220       230       240       250     
+sp|Q1X DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDD
+                                                                   
+sp|Q8K LSQLTTHRTDLNPIL                                             
+            350                                                    
+
+>>sp|Q9H254|SPTN4_HUMAN Spectrin beta chain, brain 3 OS=  (2564 aa)
+ s-w opt: 164  Z-score: 138.1  bits: 36.9 E(516081):  3.6
+Smith-Waterman score: 164; 22.5% identity (53.9% similar) in 204 aa overlap (6-203:2186-2384)
+
+                                        10        20         30    
+sp|Q1X                          MSCDMEKTMSSVDSLPATPASEVPV-LTVSPADTS
+                                     :. .  .: ::  :.   :. : ..: :..
+sp|Q9H GLEPLARRASDTLSAEVRTRVGYVRQELKPERLQPRIDRLPEIPGRVEPAALPAAPEDAA
+        2160      2170      2180      2190      2200      2210     
+
+            40        50        60        70          80        90 
+sp|Q1X LNSAD-VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA--KTEDEKEQRRIERVL
+        . :  . ...:.:   .: ....:  .   .:.   : :...  ..:.  ..:: ::  
+sp|Q9H ETPATPAAAEQVRP---RP-ERQESADRAEELPRRRRPERQESVDQSEEAARRRRPERQE
+        2220         2230       2240      2250      2260      2270 
+
+             100       110       120       130       140       150 
+sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR
+         .  :  :    : :. . . :. . . . :   ..   ....  . .  ::... ...
+sp|Q9H SAEHEAAHSLTLGRYEQMERRRERRERRLERQESSEQEMPIRGDLVKGKATLADIVEQLQ
+            2280      2290      2300      2310      2320      2330 
+
+             160       170       180       190         200         
+sp|Q1X GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPT-PSLSDY-SPTLKPSTLAES
+        ..:.  .:..:.  .:   :     .  ::: :: : :  :   :  .:  .:      
+sp|Q9H EKEAGPGLPAGPSLPQPRELPPGRLPNGLELP-ERTPRPDRPRARDRPKPRRRPRPREGG
+            2340      2350      2360       2370      2380      2390
+
+     210       220       230       240       250       260         
+sp|Q1X SDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPD
+                                                                   
+sp|Q9H EGGGSRRSRSAPAQGGSAPAPPPPPTHTVQHEGFLLRKRELDANRKSSNRSWVSLYCVLS
+             2400      2410      2420      2430      2440      2450
+
+>>sp|B2AWS3|PAN1_PODAN Actin cytoskeleton-regulatory com  (1441 aa)
+ s-w opt: 159  Z-score: 138.0  bits: 36.0 E(516081):  3.6
+Smith-Waterman score: 159; 23.5% identity (50.4% similar) in 341 aa overlap (16-333:1015-1335)
+
+                              10        20        30        40     
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV
+                                     :  :. ..:   :.   .  ..:  :..: 
+sp|B2A AERQARIAEETGAPAPAAQAAVPKPEGKKPPPPPSRKTP--KVDDRRAEEEAAARKAEEG
+          990      1000      1010      1020        1030      1040  
+
+          50        60        70         80        90       100    
+sp|Q1X KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKT-EDEKEQRRIERVLRNRAAAQTSRERK
+       . :...  ..:..  .::         ..:::  :::  ..: :   : .:  .  :. :
+sp|B2A RLERERGEQERQT--REL---------EERAKDQEDELAKERAEADARLKALEEQVRQGK
+           1050                 1060      1070      1080      1090 
+
+          110          120       130          140       150        
+sp|Q1X RLEMEKLENEKIQM---EQQNQFLLQRLSQMEAENNR---LSQQLAQLAAEVRGSRANT-
+         . :. ...:  :   ..:.  : :: ...::  .:   : .::  : .:  .:  .  
+sp|B2A LKKEEEKRKKKAAMAEAKEQEAKLAQRRAEIEAARKREEELRKQLEALDVEDSSSDDDEG
+            1100      1110      1120      1130      1140      1150 
+
+       160       170         180       190          200            
+sp|Q1X PMPGSPATASPTLTPTLF--KQERDELPLERIPFPT---PSLSDYSPTLKPST------L
+       :   .: ...:::  .    .:: .  :   .: :.   :..   ::.   :        
+sp|B2A PEQITPQASTPTLGGSQVGGSQELEPAPPTPVPAPVQSPPQIVTSSPAETESRNPYFRMR
+            1160      1170      1180      1190      1200      1210 
+
+        210       220       230       240       250       260      
+sp|Q1X AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSV
+       :......  : .  : .       :  :....  :. :. .:::  .   .:    :.. 
+sp|B2A AQAAETTPAPPAPPAPVAPPPPPQP--DVSTNPFHRMTQAAAAPAPSGPVSRKRPEDDGW
+            1220      1230        1240      1250      1260         
+
+        270       280           290       300       310       320  
+sp|Q1X EPDSSVFEDGLAFDVLEGGD----LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKT
+         :.   .:    :  . :.    :... : .:.    .:..  : . : . :  .:  .
+sp|B2A GSDKE--DDDEDSDDDRPGQGAAHLASILFGTMA--PPRPLSATGDKSAAASPP-VTSPV
+    1270        1280      1290      1300        1310       1320    
+
+            330       340                                          
+sp|Q1X SSVQPGFGASTTRCDGQGIAAGC                                     
+       .:  :.. . :                                                 
+sp|B2A ASPPPAIPSPTAAGAPPAPPPPPPMPGMGAPPPPPPPPPMPGSGAPAAPPPPPPPAPGGA
+         1330      1340      1350      1360      1370      1380    
+
+>>sp|Q61827|MAFK_MOUSE Transcription factor MafK OS=Mus   (156 aa)
+ s-w opt: 139  Z-score: 137.3  bits: 32.7 E(516081):    4
+Smith-Waterman score: 139; 26.4% identity (56.6% similar) in 159 aa overlap (47-193:5-156)
+
+         20        30        40        50        60                
+sp|Q1X ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN-------
+                                     :. .:  : .:  :.. :: . .       
+sp|Q61                           MTTNPKPNKALKVKKEAGENAPVLSDDELVSMSV
+                                         10        20        30    
+
+        70        80           90       100       110       120    
+sp|Q1X --LPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF
+         :  . :. :..:    .:::  :.:.::. : . : ..  . :.:: ......:. . 
+sp|Q61 RELNQHLRGLTKEEVTRLKQRR--RTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEK
+           40        50          60        70        80        90  
+
+          130       140       150       160       170       180    
+sp|Q1X LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPL
+       : .. :.:. : . : ..   : . .: . :  :.  .:. .. : . :. :.   ::  
+sp|Q61 LARENSSMRLELDALRSKYEALQTFAR-TVARGPV--TPTKVATTSVITIVKSA--ELSS
+            100       110        120         130       140         
+
+          190       200       210       220       230       240    
+sp|Q1X ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHST
+         .:: . :                                                   
+sp|Q61 TSVPFSAAS                                                   
+       150                                                         
+
+>>sp|O60675|MAFK_HUMAN Transcription factor MafK OS=Homo  (156 aa)
+ s-w opt: 139  Z-score: 137.3  bits: 32.7 E(516081):    4
+Smith-Waterman score: 139; 26.4% identity (56.6% similar) in 159 aa overlap (47-193:5-156)
+
+         20        30        40        50        60                
+sp|Q1X ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN-------
+                                     :. .:  : .:  :.. :: . .       
+sp|O60                           MTTNPKPNKALKVKKEAGENAPVLSDDELVSMSV
+                                         10        20        30    
+
+        70        80           90       100       110       120    
+sp|Q1X --LPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF
+         :  . :. :..:    .:::  :.:.::. : . : ..  . :.:: ......:. . 
+sp|O60 RELNQHLRGLTKEEVTRLKQRR--RTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEK
+           40        50          60        70        80        90  
+
+          130       140       150       160       170       180    
+sp|Q1X LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPL
+       : .. :.:. : . : ..   : . .: . :  :.  .:. .. : . :. :.   ::  
+sp|O60 LARENSSMRLELDALRSKYEALQTFAR-TVARGPV--APSKVATTSVITIVKST--ELSS
+            100       110        120         130       140         
+
+          190       200       210       220       230       240    
+sp|Q1X ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHST
+         .:: . :                                                   
+sp|O60 TSVPFSAAS                                                   
+       150                                                         
+
+>>sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containing pr  (1481 aa)
+ s-w opt: 158  Z-score: 136.9  bits: 35.9 E(516081):  4.2
+Smith-Waterman score: 158; 28.6% identity (57.8% similar) in 185 aa overlap (6-180:281-460)
+
+                                        10        20        30     
+sp|Q1X                          MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSL
+                                     ::. . .::   . . :. .  .     .:
+sp|Q4Q NASAEGVSHHLALQLTNAKAQLRRLRQEVEEKAEQLLDSQAEVQGLEAEIRRLRQETQAL
+              260       270       280       290       300       310
+
+          40        50        60        70           80        90  
+sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK---TEDEKEQRRIERVLR
+        ::..:  :.  :: .  ..: .   .::  . .:  : : :   .:  : : . :::: 
+sp|Q4Q -SAQAKRAELYREEAEALRERAG---RLPRLQEELR-RCREKLQAAEVFKGQLEEERVLS
+               320       330          340        350       360     
+
+            100       110       120        130       140           
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQ-RLSQMEAENNRLSQQLAQLAAE--
+       .   :.    ...::. . .. ...  :....::. ::.. .:. . : .:: ::. :  
+sp|Q4Q EALEASKVLLEEQLEVARERSARLHETQRENLLLRTRLGEAHADLDSLRHQLEQLVEENV
+         370       380       390       400       410       420     
+
+        150       160        170       180       190       200     
+sp|Q1X ---VRGSRANTPMPGSPATAS-PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPST
+          .. .:.  : ::::. :: :  .:.:  . :.                         
+sp|Q4Q ELELELQRSLEPPPGSPGEASLPGAAPSLQDEVREAEAGRLRAVERENRELRGQLQMLQA
+         430       440       450       460       470       480     
+
+         210       220       230       240       250       260     
+sp|Q1X LAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSS
+                                                                   
+sp|Q4Q QLGSQHPLLEEQRENSRQPPVPNRDPATPSALHHSPQSPACQIGGEGSESLDLPSPASYS
+         490       500       510       520       530       540     
+
+>>sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifugu r  (376 aa)
+ s-w opt: 146  Z-score: 136.8  bits: 33.9 E(516081):  4.3
+Smith-Waterman score: 146; 25.9% identity (57.5% similar) in 247 aa overlap (15-248:48-279)
+
+                               10        20        30              
+sp|Q1X                 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN-------S
+                                     : :. :: .:..:.  .. .:.       :
+sp|P53 ASPVGDNLYYPSPAGSYSSMGSPQSQDFTDLTASSASFIPTVTAISTSPDLQWMVQPLIS
+        20        30        40        50        60        70       
+
+        40        50        60        70          80        90     
+sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK--TEDEKEQRRIERVLRNRA
+       . . .....:   .:. ::    ..  . :..   :.:..  : .:.:..::.:  ::. 
+sp|P53 SVAPSHRAHPYSPSPSYKRTV--MRSAASKAH-GKRSRVEQTTPEEEEKKRIRRE-RNKQ
+        80        90         100        110       120        130   
+
+         100       110       120       130       140       150     
+sp|Q1X AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR-GSR
+       ::   :.:.:   . :. :  :.:.... : . ....  :..::   ::      .  :.
+sp|P53 AAAKCRNRRRELTDTLQAETDQLEDEKSSLQNDIANLLKEKERLEFILAAHQPICKIPSQ
+           140       150       160       170       180       190   
+
+          160          170       180       190       200       210 
+sp|Q1X ANTPMPGSPATASPT---LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD
+        .: .  : .. ::.   :. :.  : .  .:  .    : : : .. : . : .. :::
+sp|P53 MDTDF--SVVSMSPVHACLSTTVSTQLQTSIP--EATTVTSSHSTFTST-SNSIFSGSSD
+             200       210       220         230        240        
+
+             220       230       240       250       260       270 
+sp|Q1X VAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS
+             .:.: .  ..:.. . :: :.. ..: : .:                       
+sp|P53 ----SLLSTATV--SNSVVKMTDLDSSVLEESLDLLAKTEAETARSVPDVNLSNSLFAAQ
+          250         260       270       280       290       300  
+
+             280       290       300       310       320       330 
+sp|Q1X VFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGA
+                                                                   
+sp|P53 DWEPLHATISSSDFEPLCTPVVTCTPACTTLTSSFVFTFPEAETFPTCGVAHRRRSNSND
+            310       320       330       340       350       360  
+
+>>sp|Q9UPA5|BSN_HUMAN Protein bassoon OS=Homo sapiens GN  (3926 aa)
+ s-w opt: 166  Z-score: 136.5  bits: 37.2 E(516081):  4.4
+Smith-Waterman score: 166; 25.7% identity (58.3% similar) in 187 aa overlap (16-189:2328-2510)
+
+                              10        20        30          40   
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS--LNSADVKTQ
+                                     ::  :.. :   ..:.  :  :.    . .
+sp|Q9U RPEMPVGAAREEPLPTTTPAAIKEAAGAPAPAPLAGQKPPADAAPGGGSGALSRPGFEKE
+      2300      2310      2320      2330      2340      2350       
+
+            50        60        70        80        90       100   
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER
+       :.. ::..  .:..    .:   ...:   .. . ..: :..:.: . :.:   :   .:
+sp|Q9U EASQEERQ--RKQQEQLLQLERERVELEKLRQLRLQEELERERVE-LQRHREEEQLLVQR
+      2360        2370      2380      2390      2400       2410    
+
+           110       120            130          140       150     
+sp|Q1X KRLEMEKLENEKIQMEQ---QNQFLLQR--LSQ--MEAEN-NRLSQQLAQLAAEVRGSRA
+       .  :.. .... .:..:   : :: :::  :.:  .. :. ..:.::: :   : . .: 
+sp|Q9U ELQELQTIKHHVLQQQQEERQAQFALQREQLAQQRLQLEQIQQLQQQLQQQLEEQK-QRQ
+         2420      2430      2440      2450      2460      2470    
+
+         160          170       180       190       200       210  
+sp|Q1X NTPMPGS---PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV
+       ..:.:..   :. . :  .  : .. .   :: .  :                       
+sp|Q9U KAPFPAACEAPGRGPPLAAAELAQNGQYWPPLTHAAFIAMAGPEGLGQPREPVLHRGLPS
+          2480      2490      2500      2510      2520      2530   
+
+            220       230       240       250       260       270  
+sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV
+                                                                   
+sp|Q9U SASDMSLQTEEQWEASRSGIKKRHSMPRLRDACELESGTEPCVVRRIADSSVQTDDEDGE
+          2540      2550      2560      2570      2580      2590   
+
+>>sp|O88737|BSN_MOUSE Protein bassoon OS=Mus musculus GN  (3942 aa)
+ s-w opt: 166  Z-score: 136.5  bits: 37.2 E(516081):  4.4
+Smith-Waterman score: 166; 24.2% identity (57.5% similar) in 186 aa overlap (16-189:2336-2518)
+
+                              10        20        30          40   
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS--LNSADVKTQ
+                                     :: : .. :.  .. .. :  :.    . .
+sp|O88 PAGVAREEPFSTTAPAVIKEAPVAPAPGPAPAPPPGQKPAGEAAAGSGSGVLSRPASEKE
+        2310      2320      2330      2340      2350      2360     
+
+            50        60        70        80        90       100   
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER
+       :.. :...  .:..    .:   ...:   .. . ..: :..:.: . :.:   :   .:
+sp|O88 EASQEDRQ--RKQQEQLLQLERERVELEKLRQLRLQEELERERVE-LQRHREEEQLLVQR
+        2370        2380      2390      2400       2410      2420  
+
+           110       120            130         140       150      
+sp|Q1X KRLEMEKLENEKIQMEQ---QNQFLLQR--LSQ--MEAENNRLSQQLAQLAAEVRGSRAN
+       .  :.. .... .:..:   : :: :::  :.:  .. :. .  ::  ::  : . .: .
+sp|O88 ELQELQTIKQHVLQQQQEERQAQFALQREQLAQQRLQLEQIQQLQQQLQLQLEEQKQRQK
+           2430      2440      2450      2460      2470      2480  
+
+        160          170       180       190       200       210   
+sp|Q1X TPMPGS---PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA
+       .:.:..   :. . :  .  : .. .   :: .  :                        
+sp|O88 APFPATCEAPSRGPPPAATELAQNGQYWPPLTHAAFIAVAGTEGPGQPREPVLHRGLPSS
+           2490      2500      2510      2520      2530      2540  
+
+           220       230       240       250       260       270   
+sp|Q1X QHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVF
+                                                                   
+sp|O88 ASDMSLQTEEQWEAGRSGIKKRHSMPRLRDACEPESGPDPSTVRRIADSSVQTDDEEGEG
+           2550      2560      2570      2580      2590      2600  
+
+>>sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabido  (315 aa)
+ s-w opt: 144  Z-score: 136.3  bits: 33.5 E(516081):  4.5
+Smith-Waterman score: 144; 30.7% identity (60.6% similar) in 127 aa overlap (31-149:176-296)
+
+               10        20        30        40        50        60
+sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+                                     ::.: .:.  . :   : .        . :
+sp|P42 VTAGSSDENDENANQQEQGSIRKPSFGQMLADASSQSTTGEIQGSVPMKPVAPGTNLNIG
+         150       160       170       180       190       200     
+
+               70        80        90       100       110       120
+sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+       ..:   ....:      ..::.: .: .:   :: .:. :: ::. : :.:...  .. .
+sp|P42 MDLWSSQAGVP------VKDERELKRQKRKQSNRESARRSRLRKQAECEQLQQRVESLSN
+         210             220       230       240       250         
+
+                 130           140        150       160       170  
+sp|Q1X QNQFL---LQRLS----QMEAENNRLSQQLAQ-LAAEVRGSRANTPMPGSPATASPTLTP
+       .:: :   :::::    ....::: ....: . :.::                       
+sp|P42 ENQSLRDELQRLSSECDKLKSENNSIQDELQRVLGAEAVANLEQNAAGSKDGEGTN    
+     260       270       280       290       300       310         
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+
+>>sp|Q7ZVN7|MED15_DANRE Mediator of RNA polymerase II tr  (809 aa)
+ s-w opt: 152  Z-score: 136.2  bits: 34.9 E(516081):  4.6
+Smith-Waterman score: 152; 20.8% identity (56.0% similar) in 259 aa overlap (58-297:322-573)
+
+        30        40        50        60        70        80       
+sp|Q1X VSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRI
+                                     :  :.. ::.     ... .. ....: ..
+sp|Q7Z QMQQQQQLQVQAQGQPQVQGQGGAVQMPPHSQQQQVLVPQMVQGQHSQMSALSQQQQLKL
+             300       310       320       330       340       350 
+
+        90       100       110       120       130       140       
+sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA
+       ..... :   : ...... .... .... :..::.:   :. .: . .. .  :: .::.
+sp|Q7Z QQAMQARMQQQQQQQQQQQQQQQQQQQQQQQQQQQQ--QQQQQQHQQQQVQQVQQASQLT
+             360       370       380         390       400         
+
+                  150           160       170       180        190 
+sp|Q1X A-----------EV--RGSRA--NTPMPGSPATASPTLTPTLFKQERDELPLE-RIPFPT
+       :           ..  :  ::  :. .: .:.. .    :   ..  .  :.. . :   
+sp|Q7Z AVPGQMMPRPGMQIPPRLPRATPNSAIPQNPVAIGGQQMPQAQQMMSSPSPVQVQTPQSM
+     410       420       430       440       450       460         
+
+             200       210       220       230       240       250 
+sp|Q1X PSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPL
+       :   . .:. .: . .. ..:.. :. : .:.. . :  :  . .:.   .:   . .: 
+sp|Q7Z PPPPQPQPSPQPPS-SQPNSVSSGPTPSPGGFQPSPSPQPSQSPASSRTPQSYP-LQVP-
+     470       480        490       500       510       520        
+
+             260        270       280       290         300        
+sp|Q1X SDDDFNRLFHGDSSVEP-DSSVFEDGLAFDVLEGGDLSAF--PFDSMVNFDSEPVTLEGI
+       :   .:   . .: . :  .:  :: : .: :.  .:: .  :.  :.:           
+sp|Q7Z SPGPLNTPGNPSSVMSPAGASQSEDQLYMDKLR--QLSKYIEPLRRMINKIDKNEDRKKD
+        530       540       550         560       570       580    
+
+      310       320       330       340                            
+sp|Q1X EMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC                       
+                                                                   
+sp|Q7Z LSKMKSLLNILTDPNTRCPLKTLQKCEIALEKLKNDMAVPTPPPPPVPCTKKQYLCQPIL
+          590       600       610       620       630       640    
+
+>>sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gall  (286 aa)
+ s-w opt: 143  Z-score: 136.2  bits: 33.4 E(516081):  4.6
+Smith-Waterman score: 143; 33.3% identity (67.9% similar) in 84 aa overlap (85-167:201-281)
+
+           60        70        80        90       100       110    
+sp|Q1X KRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE
+                                     .. .:.:.::. ::. : ..  . . ::::
+sp|O42 RFSDDQLVSMSVRELNRQLRGFSKEEVIRLKQNRRTLKNRGYAQSCRYKRVQQRHILENE
+              180       190       200       210       220       230
+
+          120       130       140       150        160       170   
+sp|Q1X KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPGSPATASPTLTPT
+       : :...: . : :..:..  : .  ...  .:::  ::  :  .: :..: :..      
+sp|O42 KCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPREPSP-PAAPKTTAADFFM 
+              240       250       260         270        280       
+
+           180       190       200       210       220       230   
+sp|Q1X LFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLF
+
+>>sp|A9V549|EIF3A_MONBE Eukaryotic translation initiatio  (1052 aa)
+ s-w opt: 154  Z-score: 135.9  bits: 35.2 E(516081):  4.7
+Smith-Waterman score: 154; 27.1% identity (56.2% similar) in 203 aa overlap (41-231:770-966)
+
+               20        30        40        50        60        70
+sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL
+                                     :: : . :        :.  ::  . . . 
+sp|A9V EKARVDHAKALGLKELLKAFAPDKDAYIEEKTAERRKEYMAKLDDFKQRMQEQKI-RLER
+     740       750       760       770       780       790         
+
+                   80          90       100       110        120   
+sp|Q1X PPRKRAKTE----DEKEQRRI--ERVLRNRAAAQTSRERKRLEMEKLEN-EKIQMEQQNQ
+         :.: . :    .:.:::::  :.  :..   ...::..: :. :::. :. .::. ..
+sp|A9V EERERKREEKRRAEEEEQRRIKQEEEDRKQREREAKREQERQEQLKLEEAERKKMEEATK
+      800       810       820       830       840       850        
+
+           130        140       150         160       170       180
+sp|Q1X FLLQRLSQMEA-ENNRLSQQLAQLAAEV--RGSRANTPMPGSPATASPTLTPTLFKQERD
+       .  ::  :..: :...::.  :: .  .  :..:...:  ..:..    .  . .: . .
+sp|A9V LQRQREEQVRAREQEKLSNLSAQTSQPTWKRSARSDAPTTAAPSS----MRVSSWKGDAS
+      860       870       880       890       900           910    
+
+              190       200        210        220       230        
+sp|Q1X ELPLERIPFPTPSLSDYSPTLKP-STLAESSDVA-QHPAVSVAGLEGDGSALPLFDLGSD
+       .   .  ::  :: .    . .  : :.. .: : .  . : .::   :.  :       
+sp|A9V DDSGRSQPF-RPSRGGERDSGRSFSGLGDRGDRAPRDTGRSFSGLGDRGDRAPRDTGRSF
+          920        930       940       950       960       970   
+
+      240       250       260       270       280       290        
+sp|Q1X LKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNF
+                                                                   
+sp|A9V SGLGDRAPRDFSGRSEPSRSGPRDFSGRSEAGRTSGERRALHVPSGGADKPSGDNVWRSS
+           980       990      1000      1010      1020      1030   
+
+>>sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcripti  (118 aa)
+ s-w opt: 135  Z-score: 135.9  bits: 32.0 E(516081):  4.8
+Smith-Waterman score: 135; 33.3% identity (77.8% similar) in 63 aa overlap (83-145:28-90)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     ..:...:  .::.::: ::...  . .::.
+sp|Q9D    MSQGPPAVSVLQRSVDAPGNQPQSPKDDDRKVRRREKNRVAAQRSRKKQTQKADKLH
+                  10        20        30        40        50       
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       .:. ..::.:. : ...:... :  .::. : .                           
+sp|Q9D EEHESLEQENSVLRREISKLKEELRHLSEVLKEHEKMCPLLLCPMNFVQLRSDPVASCLP
+        60        70        80        90       100       110       
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+                                                                   
+sp|Q9D R                                                           
+                                                                   
+
+>>sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 OS=Po  (601 aa)
+ s-w opt: 149  Z-score: 135.8  bits: 34.4 E(516081):  4.8
+Smith-Waterman score: 149; 25.4% identity (54.2% similar) in 177 aa overlap (29-186:294-463)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR-K
+                                     .:.:.::..     .. .:: . :...: :
+sp|Q5R DSQVLIELHKSGFARPGDVEFEDFSQPMNRAPSDSSLGTP----SDGRPELRGPGRSRTK
+           270       280       290       300           310         
+
+          60                      70        80        90       100 
+sp|Q1X SW--GQEL------------PVPKT--NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+        :  :..             :::..  : ::  :.  .      .: . .. : :.  : 
+sp|Q5R RWPFGKKNKPRPPPLSPLGGPVPSALPNGPPSPRSGRDPLAILSEISKSVKPRLASFRSL
+     320       330       340       350       360       370         
+
+             110       120       130       140         150         
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA--EVRGSRANTPM
+       . .:  .   .  ..  ::: . : :   :.: .. .:.... :  :  ...    .::.
+sp|Q5R RGSRGTVVTEDFSHLPPEQQRKRLQQ---QLEERSRELQKEVDQREALKKMKDVYEKTPQ
+     380       390       400          410       420       430      
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+        :.::.  : .: :: . :: .: ...                                 
+sp|Q5R MGDPASLEPQITETLSNIERLKLEVQKYEAWLAEAESRVLSNRGDSLSRHARPPDPPTSA
+        440       450       460       470       480       490      
+
+>>sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-bi  (395 aa)
+ s-w opt: 145  Z-score: 135.4  bits: 33.7 E(516081):    5
+Smith-Waterman score: 145; 30.2% identity (62.8% similar) in 129 aa overlap (63-185:159-282)
+
+             40        50        60        70        80        90  
+sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR
+                                     : .:.: ::    .::: :.  .:..: .:
+sp|O43 TPQHMEELAEQEIARLVLTDEEKSLLEKEGLILPET-LP---LTKTE-EQILKRVRRKIR
+      130       140       150       160           170        180   
+
+            100       110       120       130       140       150  
+sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV--
+       :. .:: ::..:.. .  ::.. ...  ::. : .... .: .:  : .:: .: : :  
+sp|O43 NKRSAQESRRKKKVYVGGLESRVLKYTAQNMELQNKVQLLEEQNLSLLDQLRKLQAMVIE
+           190       200       210       220       230       240   
+
+                 160       170        180       190       200      
+sp|Q1X ---RGSRANTPMPGSPATASPTLTPTLFKQE-RDELPLERIPFPTPSLSDYSPTLKPSTL
+          . : ..: .    ..    :.:...... :  :: :                     
+sp|O43 ISNKTSSSSTCILVLLVSFCLLLVPAMYSSDTRGSLPAEHGVLSRQLRALPSEDPYQLEL
+           250       260       270       280       290       300   
+
+        210       220       230       240       250       260      
+sp|Q1X AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSV
+                                                                   
+sp|O43 PALQSEVPKDSTHQWLDGSDCVLQAPGNTSCLLHYMPQAPSAEPPLEWPFPDLFSEPLCR
+           310       320       330       340       350       360   
+
+>>sp|O35284|BATF_MOUSE Basic leucine zipper transcriptio  (125 aa)
+ s-w opt: 135  Z-score: 135.4  bits: 32.0 E(516081):  5.1
+Smith-Waterman score: 135; 28.9% identity (62.2% similar) in 90 aa overlap (71-160:17-103)
+
+               50        60        70        80        90       100
+sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS
+                                     :: :. ...:    :...:  .:: ::: :
+sp|O35               MPHSSDSSDSSFSRSPPPGKQDSSDDV---RKVQRREKNRIAAQKS
+                             10        20           30        40   
+
+              110       120       130       140       150       160
+sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP
+       :.:.  . . :. :. ..:.::  : ....:.  : . ... :..         ..:: :
+sp|O35 RQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEELKYFTSVLSSHEPLCSVLASGTPSP
+            50        60        70        80        90       100   
+
+              170       180       190       200       210       220
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV
+                                                                   
+sp|O35 PEVVYSAHAFHQPHISSPRFQP                                      
+           110       120                                           
+
+>>sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kap  (284 aa)
+ s-w opt: 142  Z-score: 135.3  bits: 33.2 E(516081):  5.1
+Smith-Waterman score: 142; 24.2% identity (51.6% similar) in 215 aa overlap (16-223:44-237)
+
+                              10        20           30         40 
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD-TSLNSADVK
+                                     :  ::.. : .   :.:: : .... :   
+sp|Q2U QTSAQDHADQVLHDQLLAAHQHLSHPQQPRPQPPAAQPPHMQPNTTSPRDQNNIDPAISG
+            20        30        40        50        60        70   
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+       .  ..   . : . . . ::: :            ::  ..     .:. .:::: .. :
+sp|Q2U AAMLSGPPQTPPQPEPT-GQESP------------KTYGKRPLSTSKRAAQNRAAQRAFR
+            80        90                    100       110       120
+
+             110       120         130       140       150         
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQF--LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-
+       .::.  ..:::      :: ..:  . . .. ..::: .: . . .: ...  :....: 
+sp|Q2U QRKESYIRKLE------EQVKEFDTMSEAFKALQAENYQLREYIINLQSRLLESQGEVPE
+              130             140       150       160       170    
+
+      160       170       180       190       200       210        
+sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV
+       .::.   ..:  :     :            :.:  :  . .  :.  : ..:. .   .
+sp|Q2U LPGNIDLSQPR-TDLNVPQPGAGPATTSSSAPAPP-SGAQQAQPPQGAASNDDMNSLNRI
+          180        190       200        210       220       230  
+
+      220       230       240       250       260       270        
+sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLA
+       .::::                                                       
+sp|Q2U AVAGLGMRKHPNEEANYLGNNFTGRRTRPDETQADSEVTKTEQAPHGLPMVS        
+            240       250       260       270       280            
+
+>>sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-bi  (508 aa)
+ s-w opt: 147  Z-score: 135.3  bits: 34.0 E(516081):  5.1
+Smith-Waterman score: 147; 27.6% identity (59.3% similar) in 123 aa overlap (52-168:345-466)
+
+              30        40        50        60        70        80 
+sp|Q1X EVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDE
+                                     :: .. .  : .  :. .   :.:.  :: 
+sp|Q02 HSHSHLHAHPAHHQTSPHPPLHTGNQAQVSPATQQMQPTQTIQPPQPTGGRRRRVVDEDP
+          320       330       340       350       360       370    
+
+              90       100       110       120       130       140 
+sp|Q1X KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQ
+        :.:: . . ::::::   :..... . .::..  .. : :. : ...:... :  .:.:
+sp|Q02 DERRR-KFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQLKQ
+           380       390       400       410       420       430   
+
+                  150        160       170       180       190     
+sp|Q1X QL-----AQLAAEVRGSRAN-TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS
+        :       ..:  . :..  .:  . ::.  :                           
+sp|Q02 LLLTHKDCPITAMQKESQGYLSPESSPPASPVPACSQQQVIQHNTITTSSSVSEVVGSST
+           440       450       460       470       480       490   
+
+         200       210       220       230       240       250     
+sp|Q1X DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDD
+                                                                   
+sp|Q02 LSQLTTHRTDLNPIL                                             
+           500                                                     
+
+>>sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange   (1021 aa)
+ s-w opt: 153  Z-score: 135.2  bits: 35.0 E(516081):  5.2
+Smith-Waterman score: 153; 24.0% identity (52.8% similar) in 246 aa overlap (9-250:628-858)
+
+                                     10        20          30      
+sp|Q1X                       MSCDMEKTMSSVDSLPATPASEVP--VLTVSPADTSLN
+                                     : :..:::..   :.   : :.:    ::.
+sp|Q6P WQGPASSPDSRPCDNSAPSGCCEESPQAVEMPSTESLPTVLELELVHRVQTLSQLLLSLQ
+       600       610       620       630       640       650       
+
+         40        50        60        70        80        90      
+sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA
+       .. .  :.   : .. : ...    .:   . ::         ....:: .:.  ..::.
+sp|Q6P AV-IAQQDSYVEMQRTAIQEREKQFRLQSTRGNL-------LLEQERQRNFEKQREERAG
+        660       670       680       690              700         
+
+        100       110       120       130       140       150      
+sp|Q1X AQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRAN
+       ..  . . : :... : :. ...:. ..   ::.. :.:  .. :.: :  .:.. .:  
+sp|Q6P VEKLQSQLRQEQQRWERERARQQQELELAGARLQEREGEARQMRQRLDQERTELERQRQA
+     710       720       730       740       750       760         
+
+        160       170       180       190       200       210      
+sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP
+                 .   .     .::..: : :  :   .      .: : .:::.. ... :
+sp|Q6P YQHDLERLREAQRAVD----RERERLELLR-RFKKQNT--VPGALPPEVLAEAQPASHPP
+     770       780           790        800         810       820  
+
+        220        230       240        250       260       270    
+sp|Q1X AVSVAGLEGDGS-ALPLFDLGSDLKHHS-TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE
+       . .  :::: .. :      :: . : .  :.:  :                        
+sp|Q6P SFNGDGLEGHSAPAKAPGTQGSAMLHGTGPDNVERPEVARWDSAPPESRPAKSDVPIQLL
+            830       840       850       860       870       880  
+
+          280       290       300       310       320       330    
+sp|Q1X DGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTT
+                                                                   
+sp|Q6P SATNQIQRQTAVQQQIPTKLAASTKGGKEKGSKSRGSQRWESSASFDLKQQLLLSKFIGK
+            890       900       910       920       930       940  
+
+>>sp|Q5F489|TAF3_CHICK Transcription initiation factor T  (930 aa)
+ s-w opt: 152  Z-score: 135.1  bits: 34.9 E(516081):  5.3
+Smith-Waterman score: 152; 26.1% identity (52.7% similar) in 226 aa overlap (14-232:662-845)
+
+                                10           20        30        40
+sp|Q1X                  MSCDMEKTMSSVDSLP--ATP-ASEVPVLTVSPADTSLNSADV
+                                     :::  .:: : ..:  .. :. . .    .
+sp|Q5F KKDKEKVKDKSKEDKIKPPSAPLVLPPKEMSLPLFSTPTAMRLP--SMLPSLSPMLPEKL
+             640       650       660       670         680         
+
+               50        60        70        80        90       100
+sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS
+         .. ::.:::  ::.:               .:. . : .::...     ...   .  
+sp|Q5F FEDKEKPKEKKKDKKEK---------------KKKKEREKDKEKEK-----KDKEKERKE
+     690       700                      710       720              
+
+              110       120          130        140       150      
+sp|Q1X RERKRLEMEKLENEKIQMEQ---QNQFLLQRLS-QMEAENNRLSQQLAQLAAEVRGSRAN
+       ::.:. : :: ..:::..:      . .. ::. .. : ....  . .  : :   ..  
+sp|Q5F REKKEKEKEKHKHEKIKVEPVVPAPSPVIPRLTLRVGAGQDKIVISKVVPAPE---AKPA
+     730       740       750       760       770       780         
+
+        160       170       180       190       200       210      
+sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP
+       ::. . : :  :. .:.         :..  : :.:  .  .::..:. :  .:     :
+sp|Q5F TPV-SRPKTPPPVPSPV-------PAPVHVTPPPAPVPAPPQPTVSPALLPPAS-----P
+         790       800              810       820       830        
+
+        220       230       240       250       260       270      
+sp|Q1X AVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDG
+       :::.::    ::  :.                                            
+sp|Q5F AVSAAG----GSKAPVRSVVTETVSTYVIRDEWGNQIWFCPGCNKPDDGSPMIGCDDCDD
+               840       850       860       870       880         
+
+>>sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor T  (932 aa)
+ s-w opt: 152  Z-score: 135.1  bits: 34.9 E(516081):  5.3
+Smith-Waterman score: 152; 27.2% identity (52.0% similar) in 202 aa overlap (14-203:664-845)
+
+                                10        20        30        40   
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ
+                                     .::    : : : .. :: . .    .  .
+sp|Q5H KRERERLKEKNREDKIKAPPTQLVLPPKEMALPLFSPSAVRVPAMLPAFSPMLPEKLFEE
+           640       650       660       670       680       690   
+
+            50        60        70        80        90       100   
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER
+       . ::.::.  : .:               .:. : : :::... ::   .:   .  ::.
+sp|Q5H KEKPKEKERKKDKK---------------EKKKKKEKEKEKEKKER---EREKERREREK
+           700                      710       720          730     
+
+           110       120          130        140       150         
+sp|Q1X KRLEMEKLENEKIQMEQ---QNQFLLQRLS-QMEAENNRLSQQLAQLAAEVRGS----RA
+       .. : :: ..:::..:      . .. ::. .. : ....  . .  : :.. .    : 
+sp|Q5H REKEKEKHKHEKIKVEPVIPAPSPVIPRLTLRVGAGQDKIVISKVVPAPEAKPAPSLNRP
+         740       750       760       770       780       790     
+
+         160           170       180       190       200       210 
+sp|Q1X NTPMPGS---PATASPT-LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD
+       .:: :.    :. .::: : : :. :      :  .: :.:.::  . .  :        
+sp|Q5H KTPPPAPVPIPVRVSPTPLQPPLLTQAAVCPAL--MPSPAPALSGIGSAKAPVRSVVTET
+         800       810       820         830       840       850   
+
+             220       230       240       250       260       270 
+sp|Q1X VAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS
+                                                                   
+sp|Q5H VSTYVIRDEWGNQIWICPGCNKPDDGSPMIGCDDCDDWYHWPCVGIMAAPPEEMQWFCPK
+           860       870       880       890       900       910   
+
+>>sp|Q9UKV3|ACINU_HUMAN Apoptotic chromatin condensation  (1341 aa)
+ s-w opt: 155  Z-score: 134.9  bits: 35.4 E(516081):  5.4
+Smith-Waterman score: 155; 25.8% identity (55.1% similar) in 256 aa overlap (46-283:294-535)
+
+          20        30        40        50        60          70   
+sp|Q1X PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV--PKTNLPPR
+                                     : .:    :. :  :.:.:   :.  .  :
+sp|Q9U DRNLKTEEEEEEEEEEEEDDEEEEGDDEGQKSREAPILKEFKEEGEEIPRVKPEEMMDER
+           270       280       290       300       310       320   
+
+            80        90       100          110          120       
+sp|Q1X KRAKTEDEKEQRRIERVLRNRAAAQTS---RERKRLEMEK---LENEKIQMEQQNQFLLQ
+        ........  .:  :  :..  :. :   :.... ::.    ::.:. .. ...: : .
+sp|Q9U PKTRSQEQEVLERGGRFTRSQEEARKSHLARQQQEKEMKTTSPLEEEEREI-KSSQGLKE
+           330       340       350       360       370        380  
+
+       130       140         150       160        170       180    
+sp|Q1X RLSQMEAENNRLSQQLAQLAA--EVRGSRANTPMPG-SPATASPTLTPTLFKQERDELPL
+       . ..        ... :.:.:  :  .:. .:: :  .  ..::   : : ..:. : :.
+sp|Q9U KSKSPSPPRLTEDRKKASLVALPEQTASEEETPPPLLTKEASSPPPHPQLHSEEEIE-PM
+            390       400       410       420       430        440 
+
+          190       200       210         220       230       240  
+sp|Q1X ERIPFPTPSLSDYSPTLKPSTLAESSD--VAQHPAVSVAGLEGDGSALPLFDLGSDLKHH
+       :  : : : : . ::   :.: :.. .  :.:: .  :.::       :: .  :: : .
+sp|Q9U EG-PAP-PVLIQLSP---PNTDADTRELLVSQHTVQLVGGLS------PLSS-PSDTKAE
+               450          460       470             480          
+
+                 250       260       270       280       290       
+sp|Q1X ST-----DDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVN
+       :      .. . :: . .    . .....::.:.   . : . . :              
+sp|Q9U SPAEKVPEESVLPLVQKSTLADYSAQKDLEPESDRSAQPLPLKIEELALAKGITEECLKQ
+     490       500       510       520       530       540         
+
+       300       310       320       330       340                 
+sp|Q1X FDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC            
+                                                                   
+sp|Q9U PSLEQKEGRRASHTLLPSHRLKQSADSSSSRSSSSSSSSSRSRSRSPDSSGSRSHSPLRS
+     550       560       570       580       590       600         
+
+>>sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiatio  (952 aa)
+ s-w opt: 152  Z-score: 134.9  bits: 34.9 E(516081):  5.4
+Smith-Waterman score: 152; 30.7% identity (54.5% similar) in 202 aa overlap (48-230:735-930)
+
+        20        30        40        50          60        70     
+sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKK--RKSWGQELPVPKTNLPPRKR
+                                     :: : ::.  :..  .:    . ..  :::
+sp|Q5K QRAARELKQRLGRMLEDYEAVKERIESQMQEELKAAKEEARRKIEEEKAQLREKVIKRKR
+          710       720       730       740       750       760    
+
+          80         90         100           110         120      
+sp|Q1X AKTEDE-KEQRRIERVLRNRA--AAQTSRERKR----LEMEKL--ENEKIQMEQQNQFLL
+        . : . :: :. :.  :..   ::: ..:. :    :: :    :... . : : :  :
+sp|Q5K EEKERKLKEAREAEERKRKEEEEAAQKAEEEARAAAALEAEAAAAEQRRAEREAQRQSDL
+          770       780       790       800       810       820    
+
+         130       140       150       160           170           
+sp|Q1X QRL-SQMEAENNRLSQQLAQLAAEVRGSRANTPMPG----SPATASPTLT---PTLFKQE
+       .:. .:.: :.. : .. :. :: . :. :  : :.    .: ::::. .   :. . ..
+sp|Q5K ERIRAQQEREEEALRRRQAEKAAATSGGSAYRP-PARAGTTPPTASPAPSSGGPSWLARR
+          830       840       850        860       870       880   
+
+      180       190       200       210       220       230        
+sp|Q1X RDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSD
+       .          :. :    ::   ::. : .:  :..   :.:: :..  ::        
+sp|Q5K KAMEAQSAGGAPVAS----SPKPVPSNSAAASAPASNGPESIAG-EAEKPALTGSVWRRG
+           890           900       910       920        930        
+
+      240       250       260       270       280       290        
+sp|Q1X LKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNF
+                                                                   
+sp|Q5K MGARRGMPSTRGGA                                              
+      940       950                                                
+
+>>sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus r  (381 aa)
+ s-w opt: 144  Z-score: 134.8  bits: 33.5 E(516081):  5.5
+Smith-Waterman score: 144; 23.5% identity (49.7% similar) in 306 aa overlap (2-291:57-353)
+
+                                            10        20           
+sp|Q1X                              MSCDMEKTMSSVDSLPATPASEVPVL--TVS
+                                     : ..  :...... :       :.:  .:.
+sp|Q56 LSYYHSPADSFSSMGSPVNAQDFCADLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA
+         30        40        50        60        70        80      
+
+      30         40        50        60        70        80        
+sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE
+       :..:   .   : :  .    .    :  : :.   . . .   . .  . .:.:.:::.
+sp|Q56 PSQTRAPHPYGVPTPSTGAYSRAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR
+         90       100       110       120          130       140   
+
+       90       100       110       120       130       140        
+sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       :  ::. ::   :.:.:   . :. :  :.:.... :  .....  :...:   ::    
+sp|Q56 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP
+            150       160       170       180       190       200  
+
+      150       160       170          180          190       200  
+sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK
+         .    .  .: . ..::  ::   :     : .:   :::   : :  :: . .   .
+sp|Q56 ACKIPD-DLGFPEDMSVASLDLTGGLPEAATPESEEAFSLPLLNEPEPKTSLESVKSISS
+             210       220       230       240       250       260 
+
+            210       220        230            240        250     
+sp|Q1X PSTLAESSDVAQHPAVSV-AGLEGDGSALPLFDL-GS----DLKH-HSTDDVAAPLSDDD
+           ::  :     : :  .: :  . ..: .:: ::    : .  ::..   .:.. . 
+sp|Q56 MELKAEPFDDFLFSASSRPSGSETTARSVPDMDLSGSFYAADWEPLHSSSLGMGPMATE-
+             270       280       290       300       310       320 
+
+         260       270       280       290       300       310     
+sp|Q1X FNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLP
+       .. :     .  :. ... ....:   :    ..::                        
+sp|Q56 LEPLCTPVVTCTPSCTTYTSSFVFTYPE---TDSFPSCAAAHRKGSSSNEPSSDSLSSPT
+              330       340          350       360       370       
+
+         320       330       340     
+sp|Q1X DETTCKTSSVQPGFGASTTRCDGQGIAAGC
+                                     
+sp|Q56 LLAL                          
+       380                           
+
+>>sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing protein 1  (841 aa)
+ s-w opt: 150  Z-score: 134.0  bits: 34.5 E(516081):  6.1
+Smith-Waterman score: 150; 24.6% identity (48.9% similar) in 264 aa overlap (16-258:555-812)
+
+                              10        20        30         40    
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS-LNSADVKTQE
+                                     :: : .: :  . .:.:.. :.:  . .  
+sp|Q3K DKSQSKRRASNEKESAAPASPAPSPAPSPTPAPPQKEQPP-AETPTDAAVLTSPPAPAPP
+          530       540       550       560        570       580   
+
+           50        60        70        80              90        
+sp|Q1X VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK------EQRRIERVLRNRAAAQ
+       : : .   .   .  . .: . :     ..: . :.:.      ..:  :. :  .: :.
+sp|Q3K VTPSKPMAGTTDREEATRLLAEKRRQAREQREREEQERRLQAERDKRMREEQLAREAEAR
+           590       600       610       620       630       640   
+
+      100          110       120              130       140        
+sp|Q1X TSRE---RKRLEMEKLENEKIQMEQQNQFLLQRL-------SQMEAENNRLSQQLA-QLA
+       . ::   :.: :.:    :: : ::..:  ::.        :. ::: .:: ..   :  
+sp|Q3K AEREAEARRREEQEA--REKAQAEQEEQERLQKQKEEAEARSREEAERQRLEREKHFQQQ
+           650         660       670       680       690       700 
+
+       150       160       170       180        190       200      
+sp|Q1X AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE-RIPFPTPSLSDYSPTLKPSTL
+        . :  : .        : .  .. :  ::.  :   .   : :. ..   :: :.  ..
+sp|Q3K EQERQERRKRLEEIMKRTRKSEVSETKQKQDSKEANANGSSPEPVKAVEARSPGLQKEAV
+             710       720       730       740       750       760 
+
+        210       220       230       240         250       260    
+sp|Q1X AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAA--PLSDDDFNRLFHGDS
+        .   . :.:  :. . :  .:   : .  . :  :. .  ..  : .: ...:      
+sp|Q3K QKEEPIPQEPQWSLPSKELPAS---LVNGLQPLPAHQENGFSTNGPSGDKSLSRTPETLL
+             770       780          790       800       810        
+
+          270       280       290       300       310       320    
+sp|Q1X SVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSS
+                                                                   
+sp|Q3K PFAEAEAFLKKAVVQSPQVTEVL                                     
+      820       830       840                                      
+
+>>sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 OS=Ho  (601 aa)
+ s-w opt: 147  Z-score: 133.9  bits: 34.0 E(516081):  6.1
+Smith-Waterman score: 147; 22.4% identity (50.2% similar) in 263 aa overlap (29-272:294-542)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR-K
+                                     .:.:.::.. .    . .:: . :...: :
+sp|Q15 DSHVLIELHKSGFARPGDVEFEDFSQPMNRAPSDSSLGTPS----DGRPELRGPGRSRTK
+           270       280       290       300           310         
+
+          60                      70        80        90       100 
+sp|Q1X SW--GQEL------------PVPKT--NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+        :  :..             :::..  : ::  :.  .      .: . .. : :.  : 
+sp|Q15 RWPFGKKNKPRPPPLSPLGGPVPSALPNGPPSPRSGRDPLAILSEISKSVKPRLASFRSL
+     320       330       340       350       360       370         
+
+             110       120       130       140         150         
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA--EVRGSRANTPM
+       . .:  .   .  ..  ::: . : :   :.: .. .:.... :  :  ...    .::.
+sp|Q15 RGSRGTVVTEDFSHLPPEQQRKRLQQ---QLEERSRELQKEVDQREALKKMKDVYEKTPQ
+     380       390       400          410       420       430      
+
+     160       170       180       190       200       210         
+sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS
+        :.::.  : .. :: . :: .: ...         .   . . ..:.. .   . :: :
+sp|Q15 MGDPASLEPQIAETLSNIERLKLEVQKYEAWLAEAESRVLSNRGDSLSRHARPPDPPA-S
+        440       450       460       470       480       490      
+
+     220       230       240       250       260       270         
+sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF
+       .    ...::      ..: :. : .  .   .:  .   :  :   :: : .       
+sp|Q15 APPDSSSNSA------SQDTKESSEEPPSEESQDTPIYTEFDEDFEEEPTSPIGHCVAIY
+         500             510       520       530       540         
+
+     280       290       300       310       320       330         
+sp|Q1X DVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQ
+                                                                   
+sp|Q15 HFEGSSEGTISMAEGEDLSLMEEDKGDGWTRVRRKEGGEGYVPTSYLRVTLN        
+     550       560       570       580       590       600         
+
+>>sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-bi  (428 aa)
+ s-w opt: 144  Z-score: 133.9  bits: 33.5 E(516081):  6.2
+Smith-Waterman score: 144; 25.8% identity (55.1% similar) in 178 aa overlap (25-199:161-322)
+
+                     10        20        30        40        50    
+sp|Q1X       MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAK
+                                     .:. .:  ..  : .   . .  :..:   
+sp|Q1L LPDQSGGTQCASETPQAQQTTGFPLTVKDLLLSGTPEPAAKVSQQSYQELILTEDEKRLL
+              140       150       160       170       180       190
+
+           60        70        80        90       100       110    
+sp|Q1X KRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE
+        ..  :. ::   ...:  :     .:.  ..:.: .::. .:: ::..:.  .. ::..
+sp|Q1L AKE--GMTLP---NQFPLTKY----EERILKKIRRKIRNKQSAQESRKKKKEYIDGLESR
+                   200           210       220       230       240 
+
+          120       130       140       150       160       170    
+sp|Q1X KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTL
+             .:. : ... :.:  :  : .:: .: : : .. .: :. ..  .    :. ::
+sp|Q1L MAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG-SNKPVQAGTCVLVLLLSFTL
+             250       260       270       280        290       300
+
+          180       190          200       210       220       230 
+sp|Q1X FKQERDELPLERIPFPTPSLS---DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP
+       .      ::  . ::   ..:   :.::                                
+sp|Q1L IL-----LPNLK-PFTDTKVSQHGDFSPMRVQSRSLHNLQSSRVLRNLDHPYSMTENAKI
+                    310       320       330       340       350    
+
+>>sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xeno  (313 aa)
+ s-w opt: 141  Z-score: 133.6  bits: 33.0 E(516081):  6.4
+Smith-Waterman score: 141; 26.8% identity (60.6% similar) in 142 aa overlap (29-163:171-309)
+
+                 10        20        30        40        50        
+sp|Q1X   MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS
+                                     ::. .: .: ... :. .   .. .. : :
+sp|Q6D HQYQGVHHEEMGLPHHHPHHHQHQHHQTSPSPSGSSSSSQQLHHQQ-QHSSSSAVEDRFS
+              150       160       170       180        190         
+
+       60        70        80           90       100       110     
+sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK
+         : . .   .:  . :. :.:.    .:.:  :.:.::. ::. : ..  . ..::.::
+sp|Q6D DDQLVSMTVRELNRHLRGFTKDDVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHNLEGEK
+     200       210       220       230         240       250       
+
+         120       130       140           150       160       170 
+sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA----AEVRGSRANTPMPGSPATASPTLT
+        :. :: . : :..:..  : .  . .  .::    .. : . ...  :.::        
+sp|Q6D TQLVQQVEQLKQEVSRLARERDAYKIKCEKLANNNSSNFREAGSTSDNPSSPEFFM    
+       260       270       280       290       300       310       
+
+             180       190       200       210       220       230 
+sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP
+
+>>sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus   (323 aa)
+ s-w opt: 141  Z-score: 133.4  bits: 33.0 E(516081):  6.6
+Smith-Waterman score: 141; 24.4% identity (54.8% similar) in 217 aa overlap (68-271:108-311)
+
+        40        50        60        70          80        90     
+sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK--TEDEKEQRRIERVLRNRA
+                                     :..  :.: .  . .:.:.:::.:  ::. 
+sp|P18 SHPYSHPLPPLSSVAGHTALQRPGVIKTIGTTVGRRRRDEQLSPEEEEKRRIRRE-RNKL
+        80        90       100       110       120       130       
+
+         100       110       120       130       140       150     
+sp|Q1X AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS--
+       ::   :.:.:   :::. :   .:.... : ....... :...:  .:.  .   . :  
+sp|P18 AAAKCRNRRRELTEKLQAETEVLEEEKSVLQKEIAELQKEKEKLEFMLVAHSPVCKISPE
+        140       150       160       170       180       190      
+
+            160       170       180       190          200         
+sp|Q1X -RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSL---SDYSPTLKPSTLAES
+        : . :  .  .. . .   .. :::    :.:.  .:. ::   .    ..:: ..: .
+sp|P18 ERRSPPTSSLQSVRTGASGAVVVKQE----PVEE-EIPSSSLVLDKAQRSVIKPISIAGG
+        200       210       220            230       240       250 
+
+       210       220       230          240       250       260    
+sp|Q1X --SDVAQHPAVSVAGLEGDGSALPLFDLGSD---LKHHSTDDVAAPLSDDDFNRLFHGDS
+         .. : .  . :       .. : .  ::.   . . .. :  .::: ..     :  :
+sp|P18 YYGEEALNTPIVV-------TSTPAITPGSSNLVFTYPNVLDQESPLSPSESCSKAHRRS
+             260              270       280       290       300    
+
+          270       280       290       300       310       320    
+sp|Q1X SVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSS
+       :   :.:                                                     
+sp|P18 SSSGDQSSDSLNSPTLLAL                                         
+          310       320                                            
+
+>>sp|Q3UHR0|BAHC1_MOUSE BAH and coiled-coil domain-conta  (2643 aa)
+ s-w opt: 159  Z-score: 133.2  bits: 36.0 E(516081):  6.7
+Smith-Waterman score: 159; 23.0% identity (49.5% similar) in 382 aa overlap (8-338:860-1230)
+
+                                      10        20          30     
+sp|Q1X                        MSCDMEKTMSSVDSLPATPASEVPVLTV--SPADTSL
+                                     .: ::  ::   :... .:    .:  :  
+sp|Q3U SLWMGGHSYGLGHPALHQNLPPGFPASVPGSMPSVFPLPQDAATQLVILPSEPTPHTTPH
+     830       840       850       860       870       880         
+
+          40            50        60        70        80        90 
+sp|Q1X NSADVKTQE-VKPE---EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL
+       . :.:  :  . :     . ::.. .  ::        ::  .:..   ..:   ...  
+sp|Q3U TLAEVMDQASLWPPMYGARGPASHMQHPGQ--------LPVYSRSQLLRQQELYALQQQQ
+     890       900       910               920       930       940 
+
+             100       110       120        130       140          
+sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL-LQRLSQMEAENNRLSQQLAQLAAE-
+       ...   : ...... .... .... :... .: : :::..:.. . .   ..: . : : 
+sp|Q3U QQQQQQQQQQQQQQQQQQQQQQQQQQQHRATQALELQRVAQFQRKPEDRHMELEEAAQEK
+             950       960       970       980       990      1000 
+
+         150       160        170               180         190    
+sp|Q1X ----VRGSRANTPMP-GSPATASPTL--------TPTLFKQERDELPLER--IPFPTPSL
+           ..   : :::  :.:..:.  :        .:::        :  :   :   :  
+sp|Q3U TPKSTHKPVALTPMAKGTPSSATAGLVKLSPCCQSPTLKTPASCPTPPPRPSAPCTLPIC
+            1010      1020      1030      1040      1050      1060 
+
+             200       210       220                  230       240
+sp|Q1X SDYSP---TLKPSTLAESSDVAQHPAVSVAGLEGDGS-----------ALPLFDLGSDLK
+          ::   .  :::. ..:. .:. ..... :: : .           .::    .:::.
+sp|Q3U PTGSPGPGSKVPSTM-DKSEEGQRAGTNLTTLEPDLTPGLNPTAGLDLSLPSDVHSSDLQ
+            1070       1080      1090      1100      1110      1120
+
+              250       260        270          280       290      
+sp|Q1X HHSTDDVAAPLSDDDFNRLF-HGDSSVEPDSSVFEDGL---AFDVLEGGDLSAFPFDSMV
+         .: ....: .  .  : :  :.       .. : ::   : :. .  ::. .:     
+sp|Q3U DPKTMQTTTPGTRPEPPRTFLPGEPPPCSPRNLEEPGLLSRARDATQ--DLANLPPPVEG
+             1130      1140      1150      1160        1170        
+
+        300                 310       320       330       340      
+sp|Q1X NFDS----EPVTLEGIE------MAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 
+       ..      .:  :::..      . .:   :.: .:.:.: :.    :  .:        
+sp|Q3U GLPPGKAEDPSPLEGLQALKFGDLLEGGGTEATGQTNSTQGGMQNERTVDQGAPQPPLGA
+     1180      1190      1200      1210      1220      1230        
+
+sp|Q3U TPQALEQEAGSPAALDKREGPQKVPDVAQLQEEETQLEESGGDSEVDWGTPNHSHPPKAL
+     1240      1250      1260      1270      1280      1290        
+
+>>sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus mus  (295 aa)
+ s-w opt: 140  Z-score: 133.2  bits: 32.9 E(516081):  6.8
+Smith-Waterman score: 140; 25.8% identity (54.3% similar) in 151 aa overlap (2-148:142-290)
+
+                                            10           20        
+sp|Q1X                              MSCDMEKTMSSVDSLPA---TPASEVPVLTV
+                                     .: :.. .   . :::   ::.   :    
+sp|Q8B GLQPASSTAPSVMDLSSRATAPLHPGIPSPNC-MQSPIRPGQLLPANRNTPSPIDPDTIQ
+             120       130       140        150       160       170
+
+       30        40        50        60         70        80       
+sp|Q1X SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRI
+        :.    . ::.  . .  .:    .:::   .:: : :  .   ::    .: :...  
+sp|Q8B VPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYW
+              180       190       200       210        220         
+
+        90       100       110       120       130       140       
+sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA
+        :  .:  ::. ::. .::. ...  .   .:..:. : :...... : .. .. ::.  
+sp|Q8B ARRRKNNMAAKRSRDARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYE
+     230       240       250       260       270       280         
+
+       150       160       170       180       190       200       
+sp|Q1X AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA
+       :                                                           
+sp|Q8B ARHGPL                                                      
+     290                                                           
+
+>>sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sa  (295 aa)
+ s-w opt: 140  Z-score: 133.2  bits: 32.9 E(516081):  6.8
+Smith-Waterman score: 140; 25.8% identity (54.3% similar) in 151 aa overlap (2-148:142-290)
+
+                                            10           20        
+sp|Q1X                              MSCDMEKTMSSVDSLPA---TPASEVPVLTV
+                                     .: :.. .   . :::   ::.   :    
+sp|Q16 GLQPASSAAPSVMDLSSRASAPLHPGIPSPNC-MQSPIRPGQLLPANRNTPSPIDPDTIQ
+             120       130       140        150       160       170
+
+       30        40        50        60         70        80       
+sp|Q1X SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRI
+        :.    . ::.  . .  .:    .:::   .:: : :  .   ::    .: :...  
+sp|Q16 VPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYW
+              180       190       200       210        220         
+
+        90       100       110       120       130       140       
+sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA
+        :  .:  ::. ::. .::. ...  .   .:..:. : :...... : .. .. ::.  
+sp|Q16 ARRRKNNMAAKRSRDARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYE
+     230       240       250       260       270       280         
+
+       150       160       170       180       190       200       
+sp|Q1X AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA
+       :                                                           
+sp|Q16 ARHGPL                                                      
+     290                                                           
+
+>>sp|Q9NZ53|PDXL2_HUMAN Podocalyxin-like protein 2 OS=Ho  (605 aa)
+ s-w opt: 146  Z-score: 133.0  bits: 33.9 E(516081):  6.9
+Smith-Waterman score: 146; 25.3% identity (51.9% similar) in 285 aa overlap (32-294:107-375)
+
+              10        20        30        40          50         
+sp|Q1X SCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE--EKKPAKKRKSW
+                                     :.::. . . .. : :.  ::  . .  : 
+sp|Q9N PGSGFPSEENEESRILQPPQYFWEEEEELNDSSLDLGPT-ADYVFPDLTEKAGSIEDTSQ
+         80        90       100       110        120       130     
+
+      60             70               80        90       100       
+sp|Q1X GQELP-----VPKTNL-------PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE
+       .::::     .:: ::       :::.. . :.:.:.:. :.: .     :  .:...: 
+sp|Q9N AQELPNLPSPLPKMNLVEPPWHMPPREEEEEEEEEEEREKEEVEK-----QEEEEEEELL
+         140       150       160       170       180            190
+
+       110       120       130       140       150       160       
+sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS
+         .  .:. .  :  .: :   ::  . ..   .. .. :.   : .... :  .:.   
+sp|Q9N PVNGSQEEAK-PQVRDFSLTSSSQTPGATKSRHEDSGDQASS--GVEVESSM--GPSLLL
+              200        210       220       230           240     
+
+       170        180       190       200       210       220      
+sp|Q1X PTLTPTLFKQ-ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD
+       :..:::     ..:    :      :. .       :.   :.:. :   :....: . .
+sp|Q9N PSVTPTTVTPGDQDSTSQEAEATVLPAAGLGVEFEAPQ---EASEEATAGAAGLSGQHEE
+         250       260       270       280          290       300  
+
+        230          240       250       260       270        280  
+sp|Q1X GSALPLFDLG---SDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVF-EDGLAFDVL
+         ::: :      :  .: . : ...  : .  . :  ::  . :.:... .. :  ..:
+sp|Q9N VPALPSFPQTTAPSGAEHPDEDPLGSRTSAS--SPLAPGDMELTPSSATLGQEDLNQQLL
+            310       320       330         340       350       360
+
+               290       300       310       320       330         
+sp|Q1X EGGDLSA---FPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQ
+       ::    :   .:.::                                             
+sp|Q9N EGQAAEAQSRIPWDSTQVICKDWSNLAGKNYIILNMTENIDCEVFRQHRGPQLLALVEEV
+              370       380       390       400       410       420
+
+>>sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 O  (2158 aa)
+ s-w opt: 157  Z-score: 132.9  bits: 35.7 E(516081):  6.9
+Smith-Waterman score: 157; 27.2% identity (48.4% similar) in 217 aa overlap (18-222:378-571)
+
+                            10        20        30          40     
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSL--NSADVKTQEV
+                                     .:.::.:     :  :.   :.   .:. .
+sp|Q7T RDSDEEGAEGHKDSQSAAAEEPETDGKKGTSPGSELP-----PPKTAWTENARPSETEPA
+       350       360       370       380            390       400  
+
+          50             60        70        80           90       
+sp|Q1X KPEEKKPAKKRK-----SWGQELPVPKTNLPPRKRAKTEDEKE---QRRIERVLRNRAAA
+        :  : :    .     .::     :  . :: :    ::: :   ::: .   .   :.
+sp|Q7T PPTPKPPPPPPHRGPVGNWGPPGDYPDRGGPPCKPPAPEDEDEAWRQRRKQSSSEISLAV
+            410       420       430       440       450       460  
+
+       100       110       120       130        140       150      
+sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRAN
+       . .:.:.. : .....:.     ..   :.::.. . : ..::.   :. ::        
+sp|Q7T ERARRRREEEERRMQEERRAACAEK---LKRLDEKFGAPDKRLK---AEPAA--------
+            470       480          490       500                   
+
+        160       170       180       190       200       210      
+sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD-VAQH
+        : : .::  .:.: :.. :.      :   : :::      :.  : . :  :  ::  
+sp|Q7T -P-PVTPA--APALPPVVPKEIPAAPALPPTPTPTPEKEPEEPAQAPPVQAAPSPGVAPV
+        510         520       530       540       550       560    
+
+         220       230       240       250       260       270     
+sp|Q1X PAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFED
+       :..  .:                                                     
+sp|Q7T PTLVSGGGCTANSNSSGSFEASPVEPQLPSKEGPEPPEEVPPPTTPPAPKMEPKGDGVGS
+          570       580       590       600       610       620    
+
+>>sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcripti  (699 aa)
+ s-w opt: 147  Z-score: 132.7  bits: 34.0 E(516081):  7.1
+Smith-Waterman score: 147; 23.6% identity (50.8% similar) in 254 aa overlap (16-241:259-500)
+
+                              10        20        30          40   
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS--LNSADVKTQ
+                                     :.. :  .  :. .:: .   : .. ...:
+sp|O35 SSGKAPATRKPPLQPKPVVLTTVPVPPRAGPTSAAVLLQPLVQQPAVSPVVLIQGAIRVQ
+      230       240       250       260       270       280        
+
+            50        60        70        80        90       100   
+sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER
+          :    :  .:::     :.: .. ::.      : :  .: .:...:: .:  ::..
+sp|O35 PEGPAPAAPRPERKSI-VPAPMPGNSCPPE-----VDAKLLKRQQRMIKNRESACQSRRK
+      290       300        310            320       330       340  
+
+           110              120       130            140       150 
+sp|Q1X KRLEMEKLEN-------EKIQMEQQNQFLLQRLSQMEAENNRL-----SQQLAQLAAEVR
+       :.  .. ::        .. :....:  : .::  . :::. :     ..... . . . 
+sp|O35 KKEYLQGLEARLQAVLADNQQLRRENAALRRRLEALLAENSGLKLGSGNRKVVCIMVFLL
+            350       360       370       380       390       400  
+
+              160       170        180       190       200         
+sp|Q1X GSRANT-PMPGSPATASPTLTPTLFKQE-RDELPLERIPFPTPSLSDYSPTLKPSTLAES
+           :  :.  :    .: ..: . ..: : .  :  .  : :. .     ..:   : .
+sp|O35 FIAFNFGPVSISEPPPAP-MSPRMSREEPRPQRHLLGFSEPGPAHG-----MEPLREAAQ
+            410       420        430       440            450      
+
+     210              220       230            240       250       
+sp|Q1X SDVAQHPAVS-------VAGLEGDGSALPLFDL-----GSDLKHHSTDDVAAPLSDDDFN
+       :   :.:. .       .... : .. : : ::     .:: .:                
+sp|O35 SPGEQQPSSAGRPSFRNLTAFPGGAKELLLRDLDQLFLSSDCRHFNRTESLRLADELSGW
+        460       470       480       490       500       510      
+
+       260       270       280       290       300       310       
+sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE
+                                                                   
+sp|O35 VQRHQRGRRKIPHRAQERQKSQLRKKSPPVKPVPTQPPGPPERDPVGQLQLYRHPGRSQP
+        520       530       540       550       560       570      
+
+>>sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcripti  (703 aa)
+ s-w opt: 147  Z-score: 132.7  bits: 34.0 E(516081):  7.2
+Smith-Waterman score: 147; 24.8% identity (51.2% similar) in 254 aa overlap (17-241:260-503)
+
+                             10        20          30           40 
+sp|Q1X               MSCDMEKTMSSVDSLPATPASEVPVLT--VSPADTS---LNSADVK
+                                     :.: : . .:   :.:  .:   : .. ..
+sp|Q99 DGSSGKALPTRKPPLQPKPVVLTTVPMPSRAVPPSTTVLLQSLVQPPPVSPVVLIQGAIR
+     230       240       250       260       270       280         
+
+              50        60        70        80        90       100 
+sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR
+       .:   :  . :  .:::     :.: .. ::.      : :  .: .:...:: .:  ::
+sp|Q99 VQPEGPAPSLPRPERKSI-VPAPMPGNSCPPEV-----DAKLLKRQQRMIKNRESACQSR
+     290       300        310       320            330       340   
+
+             110              120       130            140         
+sp|Q1X ERKRLEMEKLEN-------EKIQMEQQNQFLLQRLSQMEAENNRL-----SQQLAQLAAE
+       ..:.  .. ::        .. :....:  : .::  . :::..:     ..... . . 
+sp|Q99 RKKKEYLQGLEARLQAVLADNQQLRRENAALRRRLEALLAENSELKLGSGNRKVVCIMVF
+           350       360       370       380       390       400   
+
+     150        160       170          180               190       
+sp|Q1X VRGSRANT-PMPGSPATASPTLTPTLFK---QERDEL-------PLERI-PFPTPSLSDY
+       .     :  :.  :   ..: ..: . :   : : .:       :.. . :.   : .  
+sp|Q99 LLFIAFNFGPVSISEPPSAP-ISPRMNKGEPQPRRHLLGFSEQEPVQGVEPLQGSSQGPK
+           410       420        430       440       450       460  
+
+       200       210       220       230       240       250       
+sp|Q1X SPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN
+        :  .:.     :...  :. .   :  : .   :: :.:: .:                
+sp|Q99 EPQPSPTDQPSFSNLTAFPGGAKELLLRDLDQ--LF-LSSDCRHFNRTESLRLADELSGW
+            470       480       490          500       510         
+
+       260       270       280       290       300       310       
+sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE
+                                                                   
+sp|Q99 VQRHQRGRRKIPQRAQERQKSQPRKKSPPVKAVPIQPPGPPERDSVGQLQLYRHPDRSQP
+     520       530       540       550       560       570         
+
+>>sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mus mu  (804 aa)
+ s-w opt: 148  Z-score: 132.5  bits: 34.2 E(516081):  7.3
+Smith-Waterman score: 148; 24.4% identity (55.0% similar) in 209 aa overlap (80-285:588-784)
+
+      50        60        70        80        90       100         
+sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+                                     :. :.:. .:  ...:  .  ::: :.:::
+sp|Q3U SHLPLTCEFSICELALQPPVVSKETLEMFSDDIEKRKRQR--QKKAREERRRER-RIEME
+       560       570       580       590         600        610    
+
+     110       120       130          140       150       160      
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRL---SQQLAQLAAEVRGSRANTPMPGSPATA
+         ::..     . .. :. :.:. : :.     .. :.  ..: .:. . .:.  ::.. 
+sp|Q3U --ENKRQGRYPEVHIPLENLQQFPAFNSYTCPSDSALGPTSTEGHGALSLSPLSRSPGSH
+            620       630       640       650       660       670  
+
+        170       180       190       200       210       220      
+sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD
+       .  :   :     .  :     : . :: : :: :. . . . . .      ..:  . :
+sp|Q3U ADFLLTPLSPTASQGSP----SFCVGSLEDDSPFLSFAQMLRVGKAKADGWPKTAPKKDD
+            680           690       700       710       720        
+
+        230       240       250       260       270       280      
+sp|Q1X GSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGD
+       .: .:   . :: .  ..: : .:  ...:.. ... . .. :. .  : :. :  .:: 
+sp|Q3U NSLVPPAPVDSDGESDNSDRVPVPSFQNSFSQAIEA-AFMKLDTPATSDPLSED--RGGK
+      730       740       750       760        770       780       
+
+        290       300       310       320       330       340     
+sp|Q1X LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+                                                                  
+sp|Q3U KRKRQKQKLLFSTSVVHTK                                        
+         790       800                                            
+
+>>sp|Q6C908|PAN1_YARLI Actin cytoskeleton-regulatory com  (1634 aa)
+ s-w opt: 154  Z-score: 132.4  bits: 35.2 E(516081):  7.5
+Smith-Waterman score: 154; 26.2% identity (50.6% similar) in 320 aa overlap (16-311:1113-1403)
+
+                              10        20         30        40    
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVLTVS-PADTSLNSADVKTQE
+                                     :::  . .:.. :: ::: :    :   .:
+sp|Q6C SPAVASPAATPAVSSPAPVSRGVPAPAAATPATDPATTPAVPVSAPADDS----DSDDEE
+           1090      1100      1110      1120      1130            
+
+           50        60        70        80        90       100    
+sp|Q1X VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK
+           ::  :.::.   ::    : .   .:.   :.::.:..         ::.  : ::
+sp|Q6C Y---EKLMAQKRE---QEERFKKQQEADKKK---EEEKKQKK---------AAKEERMRK
+        1140         1150      1160         1170               1180
+
+           110        120       130       140       150        160 
+sp|Q1X -RLEMEKLEN-EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPG
+        : :::  :  ::   :.:.    ..    :::..  .  :: .. .. . : . : . .
+sp|Q6C LREEMEANEAREKAWKESQS----KEAEADEAEGDVGAAALAAFSNKATAPSTTPTAVAA
+             1190      1200          1210      1220      1230      
+
+               170       180               190       200       210 
+sp|Q1X SP--ATASPTLTPTLFKQERDELPLERI--------PFPTPSLSDYSPTLKPSTLAESSD
+       .:  ::..:. .        :. :..:.          :. .  : .: :.:.:  ..  
+sp|Q6C TPPVATSTPSPAAPTVPAADDNNPFHRLNNGGDAAAAAPAAGGEDNNPFLRPGT--NQPI
+       1240      1250      1260      1270      1280      1290      
+
+              220       230         240       250        260       
+sp|Q1X VAQHPA-VSVAGLEGDGSALP--LFDLGSDLKHHSTDDVAAPLS-DDDFNRLFHGDSSVE
+       .:  ::  : :  :.   . :  . .  .. .  ..::    .: :.: .. .:  ...:
+sp|Q6C AAPSPASFSEAPKEAPKPVDPVKISNQRANQRAAKNDDDDWGMSSDEDDDQDYHRGNAAE
+         1300      1310      1320      1330      1340      1350    
+
+       270       280           290         300       310       320 
+sp|Q1X PDSSVFEDGLAFDVLE----GGDLSAFPFDSMVNFD--SEPVTLEGIEMAHGLPDETTCK
+         :..:.  .:  . .    :. ..: :  :       . ::.  ..:.:          
+sp|Q6C LASQLFRT-MAPPIQRQPTGGAPITATPTGSAPAAPPAAPPVAPAAVEVAVAASEATPGP
+         1360       1370      1380      1390      1400      1410   
+
+             330       340                                         
+sp|Q1X TSSVQPGFGASTTRCDGQGIAAGC                                    
+                                                                   
+sp|Q6C ESAPPAPPMPEINIPPATEAPSAPAATEAPPAPPSAPTTIETTHLPPPVDTHNDMSSSEF
+          1420      1430      1440      1450      1460      1470   
+
+>>sp|Q9W705|NCOA2_XENLA Nuclear receptor coactivator 2 O  (1516 aa)
+ s-w opt: 153  Z-score: 132.1  bits: 35.0 E(516081):  7.8
+Smith-Waterman score: 153; 22.4% identity (54.8% similar) in 290 aa overlap (61-333:1188-1460)
+
+               40        50        60        70        80        90
+sp|Q1X ADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERV
+                                     :.:  : .:.   . :       : : .  
+sp|Q9W RPGLRPTGMVQNQPNQLRLQLQHRLQAQNRQQLMNPINNVSNMNLAMRPGVPGQLREQGP
+      1160      1170      1180      1190      1200      1210       
+
+              100         110       120       130       140        
+sp|Q1X LRNRAAAQTSRE--RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA
+       .  .  :: .::   ..:....:.... :..::.:   :. .:.. .... .::  . : 
+sp|Q9W INAQMLAQRQREILSQHLRQKQLQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQHRAM
+      1220      1230      1240      1250      1260      1270       
+
+      150         160       170       180            190       200 
+sp|Q1X EVRGSRANTP--MPGSPATASPTLTPTLFKQERDELPLER-----IPFPTPSLSDYSPTL
+        .:..    :  : :: .  .   .: . .   ...:.       :: : :  : .:: .
+sp|Q9W MMRSQGLAMPPNMVGSGGIPASINSPRIPQGSTQQFPFPPNYGTGIPSPPPFTSPFSP-V
+      1280      1290      1300      1310      1320      1330       
+
+                 210       220         230       240       250     
+sp|Q1X KPS----TLAESSDVAQHPAVSVAGLEGD--GSALPLFDLGSDLKHHSTDDVAAPLSDDD
+        ::    .:..::  ...  ..  :. :.  :.  :.  .. ...:.. . . . .:...
+sp|Q9W PPSPGSQSLSHSSLHGSQMNLANQGIMGSMGGQYGPV--MNPQMQHNAFQFANSGMSQQS
+       1340      1350      1360      1370        1380      1390    
+
+         260       270       280       290         300       310   
+sp|Q1X FNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVN--FDSEPVTLEGIEMAHG
+        .  : : ..  :.: ..   .      :   :..  .:..:  ..::   :.:   :.:
+sp|Q9W -DPGFTGATT--PQSPIMSPRM------GHIQSSMMQQSQANPAYQSE---LNG--WAQG
+          1400        1410            1420      1430           1440
+
+           320       330       340                                 
+sp|Q1X LPDETTCKTSSVQPGFGASTTRCDGQGIAAGC                            
+        :  ..  ...  : :: ..                                        
+sp|Q9W NPAGNSMFSQQSPPHFGQQSGTSMYNSNNMNISVSMAANGNGMNNMNQMTGQINMTSVTS
+             1450      1460      1470      1480      1490      1500
+
+>>sp|O60841|IF2P_HUMAN Eukaryotic translation initiation  (1220 aa)
+ s-w opt: 151  Z-score: 132.0  bits: 34.7 E(516081):  7.9
+Smith-Waterman score: 151; 24.4% identity (58.3% similar) in 180 aa overlap (7-183:282-455)
+
+                                       10        20        30      
+sp|Q1X                         MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN
+                                     :.  .::.  . ::::  . : . :. . :
+sp|O60 KLKEKEELETGKKDQSKQKESQRKFEEETVKSKVTVDT-GVIPASEEKAETPTAAEDD-N
+             260       270       280        290       300          
+
+         40          50        60        70        80         90   
+sp|Q1X SADVKTQEVKPE--EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE-RVLRN
+        .: : .. : .  ::.  .:.:. :    . :.      . : :.:...:. : :. : 
+sp|O60 EGDKKKKDKKKKKGEKEEKEKEKKKGPSKATVKAMQEALAKLKEEEERQKREEEERIKRL
+     310       320       330       340       350       360         
+
+           100       110       120       130       140       150   
+sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS
+       .      .:..:::.:: : .: : :.. .  :.. ... ....: ..  :. . ..  .
+sp|O60 EELEAKRKEEERLEQEKRERKK-QKEKERKERLKKEGKLLTKSQREARARAEATLKLLQA
+     370       380       390        400       410       420        
+
+           160       170       180       190       200       210   
+sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA
+       .. . .:.. .   :   :    ..: ..:                              
+sp|O60 QG-VEVPSKDSL--PKKRPIYEDKKRKKIPQQLESKEVSESMELCAAVEVMEQGVPEKEE
+      430          440       450       460       470       480     
+
+>>sp|P15205|MAP1B_RAT Microtubule-associated protein 1B   (2459 aa)
+ s-w opt: 157  Z-score: 131.9  bits: 35.7 E(516081):  7.9
+Smith-Waterman score: 157; 21.8% identity (54.5% similar) in 330 aa overlap (12-323:595-900)
+
+                                  10        20        30        40 
+sp|Q1X                    MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVK
+                                     :.: :..  .:::    :  . :  .:.: 
+sp|P15 PEATKASQVEKTPKVESKEKVIVKKDKPGKVESKPSVTEKEVP----SKEEQSPVKAEV-
+          570       580       590       600           610          
+
+              50        60           70         80        90       
+sp|Q1X TQEVKPEEKKPAKKRKSWGQEL---PVPKTNLPPRKR-AKTEDEKEQRRIERVLRNRAAA
+       ....  : :  . : :   .:.   :  : .  :.:. :: ::.   .. :.  ...:  
+sp|P15 AEKAATESKPKVTKDKVVKKEIKTKPEEKKEEKPKKEVAKKEDKTPLKKDEKPKKEEAKK
+     620       630       640       650       660       670         
+
+       100       110       120            130       140       150  
+sp|Q1X QTSRERKRLEMEKLENEKIQMEQ-----QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG
+       . ..: :. : ..:..: .. :      ...   .. .... :... .... ... ... 
+sp|P15 EIKKEIKKEEKKELKKE-VKKETPLKDAKKEVKKDEKKEVKKEEKEPKKEIKKISKDIKK
+     680       690        700       710       720       730        
+
+            160       170       180       190       200            
+sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPT--LKP---STLA
+       :   ::.  .   :.  : : . :.:.   : .. :. . .:.: . .  .:    .: :
+sp|P15 S---TPLSDTKKPAA--LKPKVAKKEE---PTKKEPIAAGKLKDKGKVKVIKKEGKTTEA
+         740       750         760          770       780       790
+
+       210       220       230       240       250       260       
+sp|Q1X ESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGD----
+        .. :.   ....::. ..: :  :    : ..  : .:..      ::..:   .    
+sp|P15 AATAVGTAAVAAAAGVAASGPAKELEAERSLMS--SPEDLTK-----DFEELKAEEIDVA
+              800       810       820         830            840   
+
+           270       280       290       300       310       320   
+sp|Q1X SSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTS
+       ....:.  ..::   .   : :.  ..  .. :.  :     :::  ..:   :  :. .
+sp|P15 KDIKPQLELIEDEEKLKETEPGEAYVIQKETEVSKGSAESPDEGITTTEG---EGECEQT
+           850       860       870       880       890          900
+
+           330       340                                           
+sp|Q1X SVQPGFGASTTRCDGQGIAAGC                                      
+                                                                   
+sp|P15 PEELEPVEKQGVDDIEKFEDEGAGFEESSEAGDYEEKAETEEAEEPEEDGEDNVSGSASK
+              910       920       930       940       950       960
+
+>>sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like  (454 aa)
+ s-w opt: 142  Z-score: 131.6  bits: 33.2 E(516081):  8.3
+Smith-Waterman score: 142; 31.7% identity (55.9% similar) in 145 aa overlap (14-145:291-435)
+
+                                10        20            30         
+sp|Q1X                  MSCDMEKTMSSVDSLPATPASEV-P-VLTVS--PADTSLNSA-
+                                     : :::  .:: : .: .   : ...: .: 
+sp|Q9M QPQQLIQTQERPFPKQTTIAFSNTVDVVNRSQPATQCQEVKPSILGIHNHPMNNNLLQAV
+              270       280       290       300       310       320
+
+       40             50          60        70        80        90 
+sp|Q1X DVKT----QEVKP-EEKKPAKKRKSW--GQELPVPKTNLPPRKRAKTEDEKEQRRIERVL
+       : ::      :.:  . .:    ::   ..  :::      :: . . ..  .:: .:..
+sp|Q9M DFKTGVTVAAVSPGSQMSPDLTPKSALDASLSPVPYMFGRVRKTGAVLEKVIERRQKRMI
+              330       340       350       360       370       380
+
+             100       110       120       130        140       150
+sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEV
+       .:: .:  :: ::.    .:: :  :... :. : ..  . :: ..:.: . : :     
+sp|Q9M KNRESAARSRARKQAYTMELEAEIAQLKELNEELQKKQVEIMEKQKNQLLEPLRQPWGMG
+              390       400       410       420       430       440
+
+              160       170       180       190       200       210
+sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS
+                                                                   
+sp|Q9M CKRQCLRRTLTGPW                                              
+              450                                                  
+
+>>sp|Q69022|EBNA2_EBVA8 Epstein-Barr nuclear antigen 2 O  (454 aa)
+ s-w opt: 142  Z-score: 131.6  bits: 33.2 E(516081):  8.3
+Smith-Waterman score: 142; 24.4% identity (47.3% similar) in 205 aa overlap (10-209:236-424)
+
+                                    10        20         30        
+sp|Q1X                      MSCDMEKTMSSVDSLPATPAS-EVPVLTVSPADTSLNSA
+                                     :.  .::  :.:  .: .:.::      .:
+sp|Q69 PPTAPQRLTLGHQLSLPPHPPPHQSTPHCSSDSTGLPPPPTSYSIPSMTLSPEPLPPPAA
+         210       220       230       240       250       260     
+
+       40          50        60          70        80        90    
+sp|Q1X DVKTQE--VKPEEKKPAKKRKSWGQEL--PVPKTNLPPRKRAKTEDEKEQRRIERVLRNR
+        ..     .  ..  :      :   .  :.: :. :: .  .  :. . :   :  :.:
+sp|Q69 PAHPLPGVIYDQQALPPTPGPPWWPPVRDPTPTTQTPPTNTKQGPDQGQGRG--R-WRGR
+         270       280       290       300       310          320  
+
+          100       110       120       130       140       150    
+sp|Q1X AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR
+       .     : . : .:.:: . .    . ..  . .:: . .    : :  .   . . :  
+sp|Q69 G-----RSKGRGRMHKLPEPRRPGPDTSSPSMPQLSPVVS----LHQGQGPENSPTPGPS
+                 330       340       350           360       370   
+
+          160       170       180       190       200       210    
+sp|Q1X ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQ
+       .  :.     .:.: ..:    .  :    :. ::  :: . : :::.:. : ::     
+sp|Q69 TAGPVCRVTPSATPDISPIHEPESSDS---EEPPFLFPS-DWYPPTLEPAELDESWEGIF
+           380       390       400           410       420         
+
+          220       230       240       250       260       270    
+sp|Q1X HPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE
+                                                                   
+sp|Q69 ETTESHSSDEENVGGPSKRPRTSTQ                                   
+     430       440       450                                       
+
+>>sp|Q9ES64|USH1C_MOUSE Harmonin OS=Mus musculus GN=Ush1  (910 aa)
+ s-w opt: 148  Z-score: 131.5  bits: 34.2 E(516081):  8.3
+Smith-Waterman score: 148; 23.1% identity (48.9% similar) in 333 aa overlap (15-333:386-687)
+
+                               10        20         30         40  
+sp|Q1X                 MSCDMEKTMSSVDSLPATPASEV-PVLTVSPADTS-LNSADVKT
+                                     :: : ..:: ::   .: . . .   : : 
+sp|Q9E YRKEMEQISEEEEKFKKQWEEDWGSKEQLILPKTITAEVHPVPLRKPKSFGWFYRYDGKF
+         360       370       380       390       400       410     
+
+             50        60        70        80        90       100  
+sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE
+         .. . :.  : . .  :.:   : .:  ...   : :.  .. ...  :: : ..: :
+sp|Q9E PTIRKKAKEKKKAKYDSLQDLRKNKKELEFEQKLYKEKEEMLEKEKQLKINRLAQEVS-E
+         420       430       440       450       460       470     
+
+            110       120       130       140       150       160  
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS
+        .: ..:  :.::      .:. ..:: :     .:: .:...   :.    .. : :  
+sp|Q9E TEREDLE--ESEK------TQYWVERLCQ-----TRL-EQISSAENEIPEMTTGPPPP--
+          480               490             500       510          
+
+            170               180       190         200       210  
+sp|Q1X PATASPTLTPT--------LFKQERDELPLERIPFP--TPSLSDYSPTLKPSTLAESSDV
+       : ..::   :         :   . :..::. . .:  :::     :  .: ..   : :
+sp|Q9E PPSVSPLAPPLRRFAGGIHLHTTDLDDIPLDMFYYPPKTPSALPVMP--HPPSVNSPSKV
+      520       530       540       550       560         570      
+
+            220       230       240       250       260       270  
+sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV
+          :..  .:  ...:        :   ...   .  :   .  .. .   . ..:  :.
+sp|Q9E PAPPVLPSSGHVSSSS--------SPWVQRTPPPIPIPPPPSIPTQDL---TPTRPLPSA
+        580       590               600       610          620     
+
+            280       290        300        310       320       330
+sp|Q1X FEDGLAFDVLEGGDLSAFPFDSM-VNFDS-EPVTLEGIEMAHGLPDETTCKTSSVQPGFG
+       .:..:.   .. ::  . : :.  .:  : .: .    : .     .: : . .   : :
+sp|Q9E LEEALGNHPFRTGD-PGHPADDWEANTHSGKPSSSPTTERSFPPAPKTFCPSPQPPRGPG
+         630        640       650       660       670       680    
+
+              340                                                  
+sp|Q1X ASTTRCDGQGIAAGC                                             
+       .::                                                         
+sp|Q9E VSTISKPVMVHQEHNFVYRPAVKSEVLPQEMLKRMVVYQTAFRQDFRKYEEGFDPYSMFS
+          690       700       710       720       730       740    
+
+>>sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xeno  (289 aa)
+ s-w opt: 138  Z-score: 131.5  bits: 32.5 E(516081):  8.4
+Smith-Waterman score: 138; 30.6% identity (68.2% similar) in 85 aa overlap (83-167:203-284)
+
+             60        70        80        90       100       110  
+sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE
+                                     .:.:  :.:.::. ::. : ..  . . ::
+sp|Q4U RFSDEQLVSMSVRELNRQLRGFSKEEVIRLKQKR--RTLKNRGYAQSCRYKRVQQRHILE
+            180       190       200         210       220       230
+
+            120       130       140       150       160       170  
+sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP
+       .:: :...: . : :..:..  : .  ...  .::..   .: . :. :.:. :.     
+sp|Q4U TEKCQLQSQVEQLKQEVSRLAKERDLYKDKYEKLASRSFTTRESPPQ-GNPGKANADFFM
+              240       250       260       270        280         
+
+            180       190       200       210       220       230  
+sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL
+
+>>sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Dr  (466 aa)
+ s-w opt: 142  Z-score: 131.3  bits: 33.2 E(516081):  8.5
+Smith-Waterman score: 142; 25.5% identity (57.1% similar) in 184 aa overlap (8-181:14-192)
+
+                     10        20            30        40        50
+sp|Q1X       MSCDMEKTMSSVDSLPATPASEVPVLTVS----PADTSLNSADVKTQEVKPEEK
+                    ... : .::   : ..::  :     :.  :: . .::..:::::: 
+sp|P29 MKPVALILVFLAISQARVLNLPKE-AIDIPVAIVEDKEPPVALSLVKEEVKAEEVKPEEV
+               10        20         30        40        50         
+
+                60        70        80        90       100         
+sp|Q1X KP-AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME
+       :: :...:.   .  :     :  :.    : :..  :.. :.     .  .:. . ...
+sp|P29 KPIAQEEKAKDLKEEVKPEIKPEIKEQPKPDIKDE--IKEDLKADIKEEL-KEKIEEQIN
+      60        70        80        90         100        110      
+
+     110       120       130       140       150       160         
+sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS--
+       .: : :  .: ... :  . . .: ...  . .. . :.:..   :.. . . ::  .  
+sp|P29 ELPNAK-PLELKEKSLEAEEKPQEIKEEVQQPEIKKEATEIKEEPAQNILKSLPAEETVV
+        120        130       140       150       160       170     
+
+          170       180       190       200       210       220    
+sp|Q1X -PT--LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLE
+        :.  :.:.  .::..:                                           
+sp|P29 VPAEELSPNPVEQEQSENQDAAHPQVRQATQATPTQQSTTQGNFVQQLIQNSPIGQFLNQ
+         180       190       200       210       220       230     
+
+>>sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper tra  (834 aa)
+ s-w opt: 147  Z-score: 131.3  bits: 34.0 E(516081):  8.6
+Smith-Waterman score: 147; 26.9% identity (58.3% similar) in 156 aa overlap (10-157:315-458)
+
+                                    10        20        30         
+sp|Q1X                      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD
+                                     :::. .: .  . . .: ..  ::. .. .
+sp|Q54 TSPSSPSTSNMFLTPMVTTTTTSETSSSSDSSVNIIPNNTNTITNIL-IKEEDTNNGNNN
+          290       300       310       320       330        340   
+
+      40        50                60        70        80        90 
+sp|Q1X VKTQEVKPEEK-----KPAKKR---KSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL
+        :...   . .     .:  ..   :  :.: ::  .. :: .  . :::.. .. .:..
+sp|Q54 KKSKKRTIDSRVQNIVHPLTREELLKIAGKE-PVQVVD-PPTH--NQEDERNVKKQRRLI
+           350       360       370        380          390         
+
+             100       110       120       130       140       150 
+sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR
+       .:: .:: :: ::.. .: ::.   .. :.:       :... :   :.  . ::::.  
+sp|Q54 KNRESAQLSRMRKKIYIEDLEKTISDLTQDN-------SSLKEEVLYLQGLVKQLAAQNS
+     400       410       420       430              440       450  
+
+             160       170       180       190       200       210 
+sp|Q1X GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD
+       .:  :.                                                      
+sp|Q54 NSNNNSVIDINNNNVNNSQQQQQQHQQQQQLNNSNNNNNNNNNNSTNKQQQSKNVKAAGV
+            460       470       480       490       500       510  
+
+>>sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus no  (295 aa)
+ s-w opt: 138  Z-score: 131.3  bits: 32.5 E(516081):  8.6
+Smith-Waterman score: 138; 29.4% identity (55.9% similar) in 136 aa overlap (16-148:163-290)
+
+                              10        20          30        40   
+sp|Q1X                MSCDMEKTMSSVDSLPATPAS-EVPV-LTVSPADTSLNSADVKTQ
+                                     :  : . .:::    .::: .:.:      
+sp|Q64 PLHPGIPSPNCMQNPIRPGQLLPANRNTPSPIDPDTIQVPVGYEPDPADLALSSIP----
+            140       150       160       170       180            
+
+            50        60         70        80        90       100  
+sp|Q1X EVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE
+          ::   : .:::   .:: : :  .   ::    .: :...   :  .:  ::. ::.
+sp|Q64 --GPEMFDP-RKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYWARRRKNNMAAKRSRD
+        190        200       210        220       230       240    
+
+            110       120       130       140       150       160  
+sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS
+        .::. ...  .   .:..:. : :...... : .. .. ::.  :              
+sp|Q64 ARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYEARHGPL         
+          250       260       270       280       290              
+
+            170       180       190       200       210       220  
+sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG
+
+>>sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 OS=  (2161 aa)
+ s-w opt: 155  Z-score: 131.1  bits: 35.3 E(516081):  8.8
+Smith-Waterman score: 155; 24.2% identity (50.2% similar) in 215 aa overlap (18-229:378-575)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     .:.::.:   .. ...:  :    .    :
+sp|Q6M RDSDEEGAEGHKDSQSAAGEEPETDGKKGTSPGSELPPPKTAWTENSRPSETEPAAPPIP
+       350       360       370       380       390       400       
+
+        50           60        70        80        90       100    
+sp|Q1X EEKKPAKKRK---SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK
+       .   :  .:    .::     :  . :: :    ::: :  : .:  :...... :   .
+sp|Q6M KPPPPPPHRGPVGNWGPPGDYPDRGGPPCKPPAPEDEDEAWR-QR--RKQSSSEISLAVE
+       410       420       430       440        450         460    
+
+          110       120       130       140       150       160    
+sp|Q1X RLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA
+       : . .. :.:. ..:..     ..:....   ....    .: ::  .  .. : :. : 
+sp|Q6M RARRRREEEERRMQEERRAACAEKLKRLD---EKFGAPDKRLKAEPAAPPVTPPAPALPP
+          470       480       490          500       510       520 
+
+          170       180       190       200       210       220    
+sp|Q1X TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLE
+       .. :  :::        ::    : :::  .   :.  : . .  .. :  :: .   . 
+sp|Q6M VV-PKETPT-----PPALP--PTPTPTPEKDPEEPAHAPPVQSAPTQ-AGPPAPT--PVS
+                   530         540       550       560          570
+
+          230       240       250       260       270       280    
+sp|Q1X GDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEG
+       : :.:                                                       
+sp|Q6M GGGTASSTSSGSFEASPAEPQLPSKEGPEPPEEVPAPTTPPAPKVEPKGDGVGPTRQPPS
+              580       590       600       610       620       630
+
+>>sp|Q54HX6|MYBI_DICDI Myb-like protein I OS=Dictyosteli  (977 aa)
+ s-w opt: 148  Z-score: 131.0  bits: 34.2 E(516081):    9
+Smith-Waterman score: 148; 17.5% identity (58.7% similar) in 223 aa overlap (36-252:628-845)
+
+          10        20        30        40        50        60     
+sp|Q1X EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV
+                                     ::..   :. .  ...  ....   :.  .
+sp|Q54 NNNNNNNNNINNNNNNNNGNNINNNNNNNNNSSNQIIQQQQQVQQQQMQQQQMMMQNQII
+       600       610       620       630       640       650       
+
+          70         80        90       100       110       120    
+sp|Q1X PKTNLP-PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF
+       :   .: :....   . . :..... .. .   : ...... .... .... :..::.: 
+sp|Q54 PTLPMPSPQSQVLQSQFQPQQQMQQQMQMQYQQQQQQQQQQQQQQQQQQQQQQQQQQQQ-
+       660       670       680       690       700       710       
+
+          130       140       150       160       170       180    
+sp|Q1X LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDE-LP
+         :. .:.. .... .::. :   .. .. .:.    :  ... . .:.  ...:   . 
+sp|Q54 --QQQQQQQQQQQQQQQQIYQ--QNLNSNSGNSSPNISSINGDFVRSPNYNNKKRPPPVN
+          720       730         740       750       760       770  
+
+           190          200        210       220       230         
+sp|Q1X LERIPFPTPSLS---DYSPTLKPS-TLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL
+       . :  ::.  ::   ..::. .:  .: ....   . . . ..  :. : : :    :  
+sp|Q54 VSRPEFPVTPLSGSPSHSPAQSPHYNLNNGNNNNGNGSSNSSSYSGNQSPLGLVPSPSLS
+            780       790       800       810       820       830  
+
+     240       250       260       270       280       290         
+sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD
+        :  .  ...: :                                               
+sp|Q54 LHPPSPLITSPTSHSIRWPGPLNNTLMYDYRRMEPSHGINYVPLQQSPHAPPQQSPHFNN
+            840       850       860       870       880       890  
+
+>>sp|Q90596|MAFK_CHICK Transcription factor MafK OS=Gall  (156 aa)
+ s-w opt: 132  Z-score: 130.9  bits: 31.5 E(516081):  9.1
+Smith-Waterman score: 132; 25.2% identity (56.6% similar) in 159 aa overlap (47-193:5-156)
+
+         20        30        40        50        60                
+sp|Q1X ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN-------
+                                     :. .:  : ..  :.. :: . .       
+sp|Q90                           MTTNPKPNKALKVKEESGENAPVLSDDELVSMSV
+                                         10        20        30    
+
+        70        80           90       100       110       120    
+sp|Q1X --LPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF
+         :  . :. :..:    .:::  :.:.::. : . : ..  . :.:: ......:. . 
+sp|Q90 RELNQHLRGLTKEEVIRLKQRR--RTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEK
+           40        50          60        70        80        90  
+
+          130       140       150       160       170       180    
+sp|Q1X LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPL
+       : .. :.:. : . : ..   : . .: . :  :.  .:. .. : . :. :.   :.  
+sp|Q90 LARENSSMKLELDALRSKYEALQTFAR-TVARGPI--TPTKVATTSVITIVKSA--EISS
+            100       110        120         130       140         
+
+          190       200       210       220       230       240    
+sp|Q1X ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHST
+         .:: . :                                                   
+sp|Q90 SSVPFSAAS                                                   
+       150                                                         
+
+>>sp|Q4VYS1|FOXP2_XENLA Forkhead box protein P2 OS=Xenop  (706 aa)
+ s-w opt: 145  Z-score: 130.8  bits: 33.7 E(516081):  9.2
+Smith-Waterman score: 145; 20.1% identity (51.2% similar) in 344 aa overlap (10-321:36-373)
+
+                                    10        20        30         
+sp|Q1X                      MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD
+                                     :: :.  .. .: : .: ..  ..   . .
+sp|Q4V ATETISNSSMNQNGMSTLSSQLDAGSRDGRSSSDT--SSEVSTVELLHLQQQQALQAARQ
+          10        20        30        40          50        60   
+
+      40        50        60        70        80        90         
+sp|Q1X VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT
+       .  :.     :.: ...:.   ..::  . . :  .. : .. .:   ..::  .     
+sp|Q4V LLLQQQTSGLKSPKNNEKQRPLQVPVSMAMMTP--QVITPQQMQQILQQQVLSPQQLQAL
+            70        80        90         100       110       120 
+
+     100       110       120       130       140       150         
+sp|Q1X SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT--
+        .... . ... . ...  .::.:. :: :.:.. .... .::  :   . . .. .   
+sp|Q4V LQQQQAVMLQQQQLQEFYKKQQEQLHLQLLQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
+             130       140       150       160       170       180 
+
+              160       170                   180          190     
+sp|Q1X -------PMPGSPATASPTLTPTLF------------KQERDELPLER---IPFPTPSLS
+              : ::. :  .  :.   .            .:..  : :.:   : .: :: :
+sp|Q4V QQQQQPQPHPGKQAKEQQQLAAQQLVFQQQLLQMQQLQQQQHLLNLQRQGLISIP-PSQS
+             190       200       210       220       230        240
+
+         200       210         220       230       240       250   
+sp|Q1X DYSPTLKPSTLAESSDVAQ--HPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSD
+              :..    ... :  . ...: ..: .:     .:: ....  .:. ...  : 
+sp|Q4V ALPVQSLPQAGLSPAEIQQLWKEVTGVHSMEDNGIKHGGLDLTTNISSSTTSTTTSKASP
+              250       260       270       280       290       300
+
+            260          270       280       290       300         
+sp|Q1X D-DFNRLFHGDSSV---EPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIE
+           . :..:..::   . :::  :.  :  .: :  .  .:    .  :     :. ..
+sp|Q4V PITHHSLLNGQASVLSARRDSSSHEETGASHTLYGHGVCKWPGCENICEDFGQF-LKHLN
+              310       320       330       340       350          
+
+     310         320       330       340                           
+sp|Q1X MAHGLPDETT--CKTSSVQPGFGASTTRCDGQGIAAGC                      
+         :.: :..:  :.                                              
+sp|Q4V NEHALDDRSTAQCRVQMQVVQQLEIQLSKERERLQAMMTHLHMRPSEPKPSPKPLNLVST
+     360       370       380       390       400       410         
+
+>>sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_G028  (412 aa)
+ s-w opt: 140  Z-score: 130.5  bits: 32.8 E(516081):  9.5
+Smith-Waterman score: 140; 18.5% identity (63.1% similar) in 157 aa overlap (22-170:171-321)
+
+                        10        20         30        40        50
+sp|Q1X          MSCDMEKTMSSVDSLPATPASEVPV-LTVSPADTSLNSADVKTQEVKPEEK
+                                     ..:.   .. ...: ::     :. .:...
+sp|Q54 VECDFKMATNTPGSEQAQQQQQQQQQQQLGDIPIKQQITSSNNSGNS-----QQQQPQQQ
+              150       160       170       180            190     
+
+               60        70        80        90       100       110
+sp|Q1X KPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEK
+       .  .....  :. :  . .    .. .  ....:..... :...   : . ....:....
+sp|Q54 QQQQQQQQQQQQQPQQQQQQQQPQQQQHLQQQHQQQVQQ-LQQQQLQQQQLQQQQLQQQQ
+         200       210       220       230        240       250    
+
+              120       130       140           150          160   
+sp|Q1X LENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA----AEVRGSRANT---PMPGSP
+       :.....:. : .:.   . .:.. . .   ::: :.     :. . ..:.     : .::
+sp|Q54 LQQQQLQQPQLQQMQQPQQQQQQQQPQYTPQQLMQFQQMQQAQQQQQQAQQLQQQMGSSP
+          260       270       280       290       300       310    
+
+           170       180       190       200       210       220   
+sp|Q1X ATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL
+       . .:::.                                                     
+sp|Q54 THSSPTIKQEGLTGYTQIPQGGIINTNTNLNGTGGVSPNQPMPNSSPILPTNASSVVPPV
+          320       330       340       350       360       370    
+
+>>sp|Q0CPW4|PAN1_ASPTN Actin cytoskeleton-regulatory com  (1469 aa)
+ s-w opt: 151  Z-score: 130.5  bits: 34.7 E(516081):  9.5
+Smith-Waterman score: 151; 24.8% identity (53.4% similar) in 266 aa overlap (16-268:1032-1284)
+
+                              10        20        30        40     
+sp|Q1X                MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV
+                                     :: :. .. . ... .... ..:: .. .:
+sp|Q0C LREQERQRRLAEERGTPAQPSTKPIGKKPPPAPPSRRARTDSADQSEAK-KAAD-EAAKV
+            1010      1020      1030      1040      1050           
+
+          50        60        70        80        90        100    
+sp|Q1X KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRN-RAAAQTSRERK
+       .   .. : ....  ::  . . .   :.: . :  ::..  :  ::  .  .: .. .:
+sp|Q0C EQTAREQAIREEQQVQEEETKRLEDEARQR-EEEFMKEKEAQEARLRALQEQVQQGKIKK
+    1060      1070      1080       1090      1100      1110        
+
+           110       120       130       140         150       160 
+sp|Q1X RLEME-KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA--EVRGSRANTPMPG
+       . : . : : :.   ::. ..  :: ...:: ..:  :   .: :  :  .:  . :  .
+sp|Q0C QEEKRRKEEAERRAKEQEAKLAAQR-AELEAAKERERQLQRELEAMEEESSSDDEGPEFA
+     1120      1130      1140       1150      1160      1170       
+
+             170       180       190       200        210       220
+sp|Q1X SPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES-SDVAQHPAVSV
+       .: ..::. :         : :  . : : :     .: .   .  :. .. :  :: : 
+sp|Q0C TPRNGSPAQT---------EAPTAEAPPPPPPAPATAPPVPAIAEPEAPTSPATSPASSR
+      1180               1190      1200      1210      1220        
+
+               230          240       250           260       270  
+sp|Q1X AGLEGDG-SALPLFD-LG--SDLKHHSTDDVAAPLSD----DDFNRLFHGDSSVEPDSSV
+       :.:  .. :  : :  .:  .: .   . ..:.  ::    . :.:: . . :. :    
+sp|Q0C ANLSPEAESKNPWFKKIGQPADSQPAPVPQAATTPSDTHSTNPFHRLAQQQESTAPAFTG
+     1230      1240      1250      1260      1270      1280        
+
+            280       290       300       310       320       330  
+sp|Q1X FEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGAS
+                                                                   
+sp|Q0C SAPLERKTRARPEDDDDWSAAGSEFDSSDDEDDRAGGGSAKQLASILFGTMAPPRPLSAM
+     1290      1300      1310      1320      1330      1340        
+
+>>sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo s  (591 aa)
+ s-w opt: 143  Z-score: 130.4  bits: 33.3 E(516081):  9.7
+Smith-Waterman score: 143; 31.2% identity (63.4% similar) in 112 aa overlap (35-142:111-219)
+
+           10        20        30        40        50        60    
+sp|Q1X MEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-L
+                                     ::: ..     . . . ::. ... .:: :
+sp|Q8N RDARQVYGLNFGSKEDANVFASAMMHALEVLNSQETGPTLPRQNSQLPAQVQNGPSQEEL
+               90       100       110       120       130       140
+
+            70        80        90       100        110       120  
+sp|Q1X PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEMEKLENEKIQMEQQN
+        . . .:  ..: :   : :..:.::   .:   .  : ::.::: :.::.:... :.:.
+sp|Q8N EIQRRQLQEQQRQK---ELERERLERERMERERLERERLERERLERERLEQEQLERERQE
+              150          160       170       180       190       
+
+            130         140       150       160       170       180
+sp|Q1X QFLLQRLSQME--AENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD
+       .   .:: ..:   ...:: .:                                      
+sp|Q8N RERQERLERQERLERQERLERQERLDRERQERQERERLERLERERQERERQEQLEREQLE
+       200       210       220       230       240       250       
+
+>>sp|Q00312|RBF1_CANAL Transcription factor RBF1 OS=Cand  (527 aa)
+ s-w opt: 142  Z-score: 130.4  bits: 33.2 E(516081):  9.7
+Smith-Waterman score: 142; 23.0% identity (57.0% similar) in 200 aa overlap (36-229:263-449)
+
+          10        20        30        40            50        60 
+sp|Q1X EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEE----KKPAKKRKSWGQ
+                                     :  : : .. ::.:    .. ..  . :  
+sp|Q00 TTVKDATKRQRIAYTKRNKCAYRLVANLYPNEKDQKRKN-KPDEPGHNEENSRISEMWVL
+            240       250       260       270        280       290 
+
+              70        80        90       100       110       120 
+sp|Q1X ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ
+       ..  :. :  :    :    :....  :.: ..   .  .... :..:. .... :..::
+sp|Q00 RMINPQHNHAPDPINK----KKRQKTSRTLVEKPINKP-HHHHLLQQEQQQQQQQQQQQQ
+             300           310       320        330       340      
+
+             130       140       150       160       170           
+sp|Q1X NQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPT--LFKQER
+       .:   :. .: .: :.. .:: :::  ... .   . .: .: . :  :     : .:. 
+sp|Q00 QQ---QQQQQHNA-NSQAQQQAAQLQQQMQQQLQASGLPTTP-NYSELLGQLGQLSQQQS
+           350        360       370       380        390       400 
+
+     180       190       200       210       220       230         
+sp|Q1X DELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL
+       ..  :..::      .. .   .:.  :.. :  :  :. .:..:....:          
+sp|Q00 QQQQLHHIPQQRQRTQSQQSQQQPQQTAHGLD--QPDAAVIAAIEASAAAAVASQGSPNV
+             410       420       430         440       450         
+
+     240       250       260       270       280       290         
+sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD
+                                                                   
+sp|Q00 TAAAVAALQHTQGNEHDAQQQQDRGGNNGGAIDSNVDPSLDPNVDPNVQAHDHSHGLRNS
+     460       470       480       490       500       510         
+
+>>sp|P48634|BAT2_HUMAN Large proline-rich protein BAT2 O  (2157 aa)
+ s-w opt: 154  Z-score: 130.2  bits: 35.2 E(516081):  9.9
+Smith-Waterman score: 154; 27.0% identity (50.9% similar) in 222 aa overlap (18-228:380-575)
+
+                            10        20        30        40       
+sp|Q1X              MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP
+                                     .: :: :.  .. :.::    ...     :
+sp|P48 SDEEGAEGHRDSQSASGEERPPEADGKKGNSPNSEPPTPKTAWAETS-RPPETEPGPPAP
+     350       360       370       380       390        400        
+
+        50           60        70        80           90       100 
+sp|Q1X EEKKPAKKRK---SWGQELPVPKTNLPPRKRAKTEDEKE---QRRIERVLRNRAAAQTSR
+       .   :  .:    .::     :  . :: :    ::: :   ::: .   .   :.. .:
+sp|P48 KPPLPPPHRGPAGNWGPPGDYPDRGGPPCKPPAPEDEDEAWRQRRKQSSSEISLAVERAR
+      410       420       430       440       450       460        
+
+             110       120       130        140       150       160
+sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRANTPMP
+       .:.. : .....:.     ..   :.::.. . : ..::.   :. ::         : :
+sp|P48 RRREEEERRMQEERRAACAEK---LKRLDEKFGAPDKRLK---AEPAA---------P-P
+      470       480          490       500          510            
+
+              170       180       190       200       210       220
+sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV
+       ..:.: .:   :.. :    :::    : : :. :  .:  .:   :..  . . :. .:
+sp|P48 AAPSTPAPP--PAVPK----ELPAP--PAPPPA-SAPTPEKEPEEPAQAPPAQSTPTPGV
+            520             530          540       550       560   
+
+                  230       240       250       260       270      
+sp|Q1X AG----LEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDG
+       :.    . : ::                                                
+sp|P48 AAAPTLVSGGGSTSSTSSGSFEASPVEPQLPSKEGPEPPEEVPPPTTPPVPKVEPKGDGI
+           570       580       590       600       610       620   
+
+
+
+526 residues in 2 query   sequences
+181677051 residues in 516081 library sequences
+ Tcomplib [36.04] (8 proc)
+ start: Fri Apr 16 09:19:16 2010 done: Fri Apr 16 09:19:21 2010
+ Total Scan time: 29.730 Total Display time:  0.360
+
+Function used was SSEARCH [version 36.04 January, 2010]
diff --git a/demotic/examples/example.sto b/demotic/examples/example.sto
new file mode 100644
index 0000000..478447d
--- /dev/null
+++ b/demotic/examples/example.sto
@@ -0,0 +1,552 @@
+# STOCKHOLM 1.0
+#=GF ID   Orn_DAP_Arg_deC
+#=GF AC   PF00278.15
+#=GF DE   Pyridoxal-dependent decarboxylase, C-terminal sheet domain
+#=GF AU   Finn RD, Griffiths-Jones SR
+#=GF SE   Prosite
+#=GF GA   20.10 20.10;
+#=GF TC   20.40 20.10;
+#=GF NC   19.80 20.00;
+#=GF BM   hmmbuild HMM.ann SEED.ann
+#=GF SM   hmmsearch -Z 9421015 -E 1000 HMM pfamseq
+#=GF TP   Domain
+#=GF RN   [1]
+#=GF RM   10378276
+#=GF RT   Structure of mammalian ornithine decarboxylase at 1.6 A
+#=GF RT   resolution: stereochemical implications of PLP-dependent amino
+#=GF RT   acid decarboxylases. 
+#=GF RA   Kern AD, Oliveira MA, Coffino P, Hackert ML; 
+#=GF RL   Structure Fold Des 1999;7:567-581.
+#=GF DR   INTERPRO; IPR000183;
+#=GF DR   PROSITE; PDOC00685;
+#=GF DR   SCOP; 1qu4; fa;
+#=GF DR   HOMSTRAD; Orn_Arg_deC_NC;
+#=GF DR   HOMSTRAD; Orn_DAP_Arg_deC;
+#=GF CC   These pyridoxal-dependent decarboxylases act on ornithine,
+#=GF CC   lysine,  arginine and related substrates.  
+#=GF SQ   105
+#=GS O14439_USTMA/296-443  AC O14439.1
+#=GS O01579_CAEEL/298-416  AC O01579.1
+#=GS AZIN1_HUMAN/282-406   AC O14977.2
+#=GS ADC_MOUSE/286-408     AC Q8BVM4.1
+#=GS Q7DFY1_SELRU/266-371  AC Q7DFY1.1
+#=GS Q7UFM7_RHOBA/290-397  AC Q7UFM7.1
+#=GS Q7MC63_VIBVY/293-399  AC Q7MC63.1
+#=GS Q70GM6_CHLRE/256-376  AC Q70GM6.1
+#=GS A8BFD3_GIALA/305-445  AC A8BFD3.1
+#=GS DCOR_SOLLC/308-424    AC O22616.2
+#=GS Q7PV11_ANOGA/282-398  AC Q7PV11.4
+#=GS Q7Q083_ANOGA/289-408  AC Q7Q083.4
+#=GS Q7PZ99_ANOGA/280-394  AC Q7PZ99.4
+#=GS DCOR2_DROME/276-390   AC P40808.2
+#=GS A9NCJ9_COXBR/264-371  AC A9NCJ9.1
+#=GS Q98K89_RHILO/273-385  AC Q98K89.1
+#=GS Q6SF82_9BACT/264-372  AC Q6SF82.1
+#=GS Q9X2I6_THEMA/263-370  AC Q9X2I6.1
+#=GS Q82VZ0_NITEU/286-391  AC Q82VZ0.1
+#=GS Q5LXE4_SILPO/280-393  AC Q5LXE4.1
+#=GS Q7CRV2_AGRT5/264-377  AC Q7CRV2.2
+#=GS Q8PS97_METMA/278-390  AC Q8PS97.1
+#=GS Q5YT58_NOCFA/255-366  AC Q5YT58.1
+#=GS O69865_STRCO/277-392  AC O69865.1
+#=GS Q5XQ82_9ARCH/314-419  AC Q5XQ82.1
+#=GS Q604F1_METCA/244-348  AC Q604F1.1
+#=GS Q7VZY7_BORPE/241-343  AC Q7VZY7.1
+#=GS Q88IS0_PSEPK/241-343  AC Q88IS0.1
+#=GS Q5HSR6_CAMJR/244-361  AC Q5HSR6.1
+#=GS P73562_SYNY3/258-365  AC P73562.1
+#=GS Q9RUH6_DEIRA/278-394  AC Q9RUH6.1
+#=GS Q7MAL4_WOLSU/251-357  AC Q7MAL4.1
+#=GS O24865_HELPY/267-385  AC O24865.1
+#=GS Q5LVU5_SILPO/266-369  AC Q5LVU5.1
+#=GS Q72EZ9_DESVH/261-367  AC Q72EZ9.1
+#=GS Q57LZ4_SALCH/318-441  AC Q57LZ4.1
+#=GS Q82HL1_STRAW/330-442  AC Q82HL1.1
+#=GS Q75JL7_DICDI/295-407  AC Q75JL7.1
+#=GS Q7WXK3_RALEH/291-407  AC Q7WXK3.1
+#=GS Q7A862_STAAN/277-393  AC Q7A862.1
+#=GS Q5SEM5_RALSO/282-398  AC Q5SEM5.1
+#=GS Q76KY1_STRHA/280-393  AC Q76KY1.1
+#=GS Q8RKC5_ERWCH/297-409  AC Q8RKC5.1
+#=GS Q7CYS1_AGRT5/270-383  AC Q7CYS1.2
+#=GS Q7N8H2_PHOLL/306-419  AC Q7N8H2.1
+#=GS Q82VG2_NITEU/296-409  AC Q82VG2.1
+#=GS Q5YWM9_NOCFA/340-451  AC Q5YWM9.1
+#=GS Q72WM6_DESVH/318-424  AC Q72WM6.1
+#=GS Q62F85_BURMA/278-395  AC Q62F85.1
+#=GS Q7NPE5_GLOVI/307-415  AC Q7NPE5.1
+#=GS Q7A0X5_STAAW/290-398  AC Q7A0X5.1
+#=GS DCDA_MYCS2/336-449    AC Q9X5M1.1
+#=GS DCDA_ACTPA/309-415    AC O69203.1
+#=GS Q8TY23_METKA/277-383  AC Q8TY23.1
+#=GS Q7N7F9_PHOLL/289-407  AC Q7N7F9.1
+#=GS Q8F7A1_LEPIN/276-395  AC Q8F7A1.1
+#=GS Q8GGR7_STRAZ/284-405  AC Q8GGR7.1
+#=GS DCDA_METJA/305-410    AC Q58497.1
+#=GS DCDA_METJA/305-410    DR PDB; 1tuf B; 315-420;
+#=GS DCDA_METJA/305-410    DR PDB; 1twi D; 315-420;
+#=GS DCDA_METJA/305-410    DR PDB; 1tuf A; 315-420;
+#=GS DCDA_METJA/305-410    DR PDB; 1twi A; 315-420;
+#=GS DCDA_METJA/305-410    DR PDB; 1twi C; 315-420;
+#=GS DCDA_METJA/305-410    DR PDB; 1twi B; 315-420;
+#=GS Q7ULZ0_RHOBA/283-389  AC Q7ULZ0.1
+#=GS Q6SHW6_9BACT/289-395  AC Q6SHW6.1
+#=GS Q5V5E3_HALMA/306-412  AC Q5V5E3.1
+#=GS DCDA_METTH/292-398    AC O27390.1
+#=GS Q87EA9_XYLFT/758-866  AC Q87EA9.1
+#=GS DCDA1_ARATH/351-459   AC Q949X7.1
+#=GS DCDA_PSEFL/285-390    AC O05321.1
+#=GS Q5FPL4_GLUOX/282-390  AC Q5FPL4.1
+#=GS Q9A681_CAUCR/288-394  AC Q9A681.1
+#=GS Q5FEQ0_EHRRW/291-397  AC Q5FEQ0.1
+#=GS Q7MT14_PORGI/263-379  AC Q7MT14.1
+#=GS Q6MM66_BDEBA/286-391  AC Q6MM66.1
+#=GS Q6L350_PICTO/286-391  AC Q6L350.1
+#=GS Q97AJ0_THEVO/281-380  AC Q97AJ0.1
+#=GS Q728N7_DESVH/285-394  AC Q728N7.1
+#=GS Q62B72_BURMA/307-413  AC Q62B72.1
+#=GS Q66B85_YERPS/267-374  AC Q66B85.1
+#=GS Q5NIN9_FRATT/298-400  AC Q5NIN9.1
+#=GS Q8XS02_RALSO/281-396  AC Q8XS02.1
+#=GS SPEA_XYLFT/343-555    AC Q87F25.1
+#=GS Q5NHM0_FRATT/327-467  AC Q5NHM0.1
+#=GS SPEA_PROMP/355-574    AC Q7V3M9.1
+#=GS SPEA_GLOVI/346-557    AC Q7NE10.1
+#=GS Q6MQU4_BDEBA/373-587  AC Q6MQU4.1
+#=GS Q72F01_DESVH/373-585  AC Q72F01.1
+#=GS Q5SHU0_THET8/347-559  AC Q5SHU0.1
+#=GS SPEA_BACTN/346-558    AC Q8A2B1.1
+#=GS O25176_HELPY/412-542  AC O25176.1
+#=GS SPE2_ARATH/396-596    AC O23141.1
+#=GS O04429_DIACA/405-605  AC O04429.1
+#=GS SPE1_AVESA/355-532    AC P22220.1
+#=GS Q5X0L3_LEGPL/343-556  AC Q5X0L3.1
+#=GS SPEA_CHRVO/343-556    AC Q7NU27.1
+#=GS SPEA_VIBVY/354-570    AC Q7MK24.1
+#=GS Q7PZA0_ANOGA/274-386  AC Q7PZA0.3
+#=GS Q60D03_SOLDE/147-257  AC Q60D03.2
+#=GS DCOR_NEUCR/326-471    AC P27121.1
+#=GS DCOR_YEAST/329-460    AC P08432.1
+#=GS DCOR_CANAL/324-468    AC P78599.1
+#=GS Q84527_PBCV1/263-371  AC Q84527.1
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nv9 A; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nv9 H; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nv9 C; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nv9 F; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nva H; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nv9 E; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nva D; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nv9 D; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nv9 G; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nva C; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nva E; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nv9 B; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nva B; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nva F; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nva A; 263-371;
+#=GS Q84527_PBCV1/263-371  DR PDB; 2nva G; 263-371;
+#=GS Q5MNH7_NEOUN/277-400  AC Q5MNH7.1
+#=GS Q58P26_ENTHI/268-382  AC Q58P26.1
+#=GS O15696_PLAFA/807-931  AC O15696.1
+#=GS DCOR_LEIDO/509-682    AC P27116.1
+#=GS P78829_SCHPO/238-357  AC P78829.1
+#=GS O76203_HAECO/287-407  AC O76203.1
+#=GS DCOR_PANRE/294-416    AC P49725.1
+O14439_USTMA/296-443             ALATNIIAVRRGEPSAAM..................................................................................DHVEAT........PKAQVMYY.QNDGLYGS.FNCVIFDHVKFIQSSDAGPRVRVRADDWVARG........................ASGECGRLALQQEAMTLESCSVWGPTCDSID.CV...RD.........HVELPK........GLQVGDWLVYENMGAYTICAAS.TFNGIR..RSEIRYT
+O01579_CAEEL/298-416             TLCTNVIGKRAMDAKFI...................................................................................TNDDFD.........DGVGFVYQTNDGVYGS.FGCKQMDI....KPLCKPLDVE............................................NDSEEQLHFGTILGPTLDGTD.VA..............QRLMKS.......RQLRVGEWLVWEQMGAFTIPVDS.EHS.....VPPVYYY
+AZIN1_HUMAN/282-406              TLAVNIIAKKVVENDKFP.................................................................................SGVEKTG.......SDEPAFMYY.MNDGVYGS.FASKLSED....LNTIPEVHKK............................................YKEDEPLFTSSLWGPSCDELD.QI...VE.........SCLLP.........ELNVGDWLIFDNMGADSFHEPS.AFNDFQ..RPAIYYM
+ADC_MOUSE/286-408                TVAVSIVAKREVLDQASR..................................................................................EEQTGA........APKSIVYY.LDEGVYGV.FNSVLFDN....TCPTPALQKK............................................PSADQPLYSSSLWGPAVEGCD.CV...AE.........GLWLP.........QLQVGDWLVFDNMGAYTVDTKS.LLGGTQ..ARRVTYA
+Q7DFY1_SELRU/266-371             NLVTSVIGTKTRG...........................................................................................EQ.............PWYILDEGIYGC.FSGIMYDH....WTYPLHCF................................................GKGNKKPSTFGGPSCDGID.VL...YR.........DFMAP.........ELKIGDKVLVTEMGSYTSVSAT.RFNGFY..LAPTIIF
+Q7UFM7_RHOBA/290-397             TLITRVIGKSRRWE..........................................................................................LP.............WFF.LDDGIYGS.FSGKIFDH....TDFPLLVEN..............................................DGSRETVPCVVAGPTCDSTD.IV...SR.........DQWLP.........DLEVGELVLVPSMGAYAAASAS.PFNGLP..MANSVAI
+Q7MC63_VIBVY/293-399             TSVASVMGQAEREG..........................................................................................QI.............WYY.LDDGIYGS.FSGLMFDD....ARYPLTTI...............................................KQGGELIPSVLSGPTCDSVD.VI...AE.........NILLP.........KLNNGDLVIGRTMGAYTSATAT.DFNFFK..RAQTIAL
+Q70GM6_CHLRE/256-376             TLLTPVYGQRDRVAAD.....................................................................................GSVKK.............DYW.LTDGLYGS.FNCILYDG....QNPGYKVVRSPL........................................MADSTDSRTFLSTLWGPTCDSAD.CV...YK.........DVTLP.........VLRNGDWLMWNNAGAYTVAGAC.DFNGIEFTTPGKLYV
+A8BFD3_GIALA/305-445             TLGTRIYGRRIIFDKIEDNS.............................................................................CLTEKEIME....SGKASINEVKYY.VGDGVYGY.YNAILFDH....VVPHLRFTDKHGNR...................................KELSGAHAGSSLNTSSIFGPTCDSLD.CI...LK.........ERKLP.........LLDVGDWVITDAFGAYTYAAAT.EFNGIP..HVSVVCC
+DCOR_SOLLC/308-424               TLATTIIGKRVRGE..........................................................................................LK.............EYW.INDGLYGS.MNCVLYDHATVTATPLACMSNRN.........................................NLNCGGSKTFPSTVFGPTCDALD.TV...LR.........DYQLP.........ELQVNDWLIFPNMGAYTKAAGS.NFNGFN..TSAIVTH
+#=GR DCOR_SOLLC/308-424    sAS   ......................................................................................................................................................................................................................*.........................................................................
+Q7PV11_ANOGA/282-398             TLVSFVDSKRVMKEKQPD..................................................................................GTEKTR.............MYYYLNDGIFGT.FYCTAHEA....QPAIPIVER..............................................KTGAKDFPTSVWGPTCDVMD.LI...LP.........DVMLP.........ELNVGDSVVFENCGAYGQVLAC.RFNGFP..LPKVIAY
+Q7Q083_ANOGA/289-408             TLLTTVQGKKIVRDDA.....................................................................................GQIQQ.............MMYYINDGVFGTLFDWLSLREIKDLKRAVPLVRR.............................................EREHEPAFPTTIWGPTCDSTD.IV...CE.........DVPYP.........EHHIGDYIVFENLGAYGMTFAT.NFNGFP..KPTVQVY
+Q7PZ99_ANOGA/280-394             TLVTNVQSKRV.CLNAR...................................................................................TGTIDR.............MMYYLNDGVYAS.FNSILYDH....QVPQPKLIG..............................................GQAGKQYKSTLWGPTCDALD.QL...IE.........TIALP.........ELQIDDWVVFENMGAYTIPVAS.PFNGFE..LPKVYCY
+DCOR2_DROME/276-390              TLICKVHAKREVRSKD.....................................................................................GKLDT.............MMYYLNDGIFGAFAGMFYYPE....EVAPELYLD.............................................EAESLPKLKSVIWGPSCDAMD.KI...S..........DLLLP.........NLNPGDLLGFRNMGAYTMPIAS.PFNGFD..VPETRFF
+#=GR DCOR2_DROME/276-390   sAS   ......................................................................................................................................................................................................................*.........................................................................
+A9NCJ9_COXBR/264-371             SVIVNVELRKDD...........................................................................................................ILY.INDGTYGSLFDAGIPHF....IFPVHLLRPK............................................HTADVDLLPFSFYGPTCDSLD.YM...KG.........PFYLPN........DIKAGDYIEIGQMGAYGRTLST.AFNGFK..QREGVIM
+Q98K89_RHILO/273-385             SLIVRVLLRKGK...........................................................................................................RLY.INDGIWASLSDSWTGKI....TLPARFIPDPAI.......................................RTRNGAEKNVVPFKVCGATCDSVD.IL...SR.........PFWLPE........TVDTGDWIEIGHIGAYSLSLRT.RFNGFY..PDTFVEV
+Q6SF82_9BACT/264-372             TLATQIKALRGL...........................................................................................................RTVFLNDGVYGL.LSEFRDLG....VSQRYQAWRA...........................................GSKLAGPSAAYTVFGPTCDSID.KL...PS.........PLHLPK........SIQEGDYLLFSEIGAYSLSLAT.AFNGYG..GCEIVAV
+Q9X2I6_THEMA/263-370             WLVTKVLLKSERSG..........................................................................................EK.............WVY.IDAGVFHG.LAETIQNF....EYEIRVLG...............................................KEREELEEYHLAGPTCDSVD.VI...YD.........RIFLPK........SITLNDLVCFINAGAYTVEYNT.RFNGIE..PPKMVFI
+Q82VZ0_NITEU/286-391             CFVCRVVGTATRNG..........................................................................................KR.............WMY.WDAGIFGGIIE..VSEG....LRYEILTQ................................................RNGSLIPWSVAGPTCDSVD.VL...MH.........DEMLPE........DIQENDFIFIPNAGAYTTSYAS.NFNGFP..LPDVVVI
+Q5LXE4_SILPO/280-393             AIAAEVLLVSRKSGH.......................................................................................DLHR.............WVY.LDIGKFSG.LAETMDEA....IRYQFLTE...............................................REHEPTGPCILAGPSCDSAD.VLY.EKK.........PVQLPL........GLRDGDRIVIRNCGAYTSTYASVGFNGFP..PLDVVAI
+Q7CRV2_AGRT5/264-377             VIKAEVVLVSK....................................................................................................KSDNDNHRWVF.LDIGKFGG.LAETMDEA....IRYPIRTE...............................................RDQDEMQPCVLAGPTCDSAD.VL...YEK.......NMYPLPV........SLTIGDEVLIEGTGAYTTTYSAVAFNGFE..PLKAYVI
+Q8PS97_METMA/278-390             IIVSEVIMIAKKARF.......................................................................................NQYK.............WVY.LDIGKFGG.LIETLDEC....IKYPIFCD................................................KKGCAEEVILAGPTCDSMD.ILY.EHH.........KYSFPH........TMRDGNRVYIFTTGAYTQSYSSICFNGFP..PLKAYVI
+Q5YT58_NOCFA/255-366             TIHAEVVAVRIAPD.........................................................................................GRR.............WVY.LDIGRYNG.MAETENEY....IAYRFVTE...............................................RDGDPVDEAVVAGPTCDGDD.VLY.QRT.........RVLLPT........TLRAGDRVQILDTGAYTASYSSVSFNGFP..PLTVHVS
+O69865_STRCO/277-392             AIRAHVVRLTERRAAD.....................................................................................GERQH.............WLY.LSCGKFNG.LYEM..DA....LQYRLVFPG..............................................HPDGPCVPAVVAGPTCDSDD.AYSHEEG.........LVPVPA........ALASGDPVWVLSCGAYATSYTTRGFNGFA..PLPYAFA
+Q5XQ82_9ARCH/314-419             MVVSVIGTAKRGD...........................................................................................NM.............WAY.IDAGIYSGLLDYVIKDK....VFEISILDR.............................................TEPSSKTYKYLLSGPTSDALD.FL...G..........EYSFKK........QLNAGDKLIIKNCGAYTFVLGT.HFGGFN.....HFGF
+Q604F1_METCA/244-348             YLVASVIDVFNSG...........................................................................................GK.............TVAVLDSSINHH.PEVFEYQR....SPRLAEV.................................................CEEGRETAILAGGTCLAGD.LF...G..........EYALPT........RPRIGDRLVFEDVGAYTLVKAN.RFNGHN..LPSIYRW
+Q7VZY7_BORPE/241-343             TLEVTVLDVMRNE............................................................................................K.............NLAIVDAATEAHMLDLLIYRM....SARVQP...................................................DQGPHRYVIYGNSCLAGD.VF...G..........EFSFES........PLQPGSRISIQDAAGYTMVKKN.WFNGVR..MPAIAIR
+Q88IS0_PSEPK/241-343             SLEVTVLDTLYNG............................................................................................K.............HLAVVDSSIEAHLLDLLIYRL....NAKMAP...................................................NDGEHTYMVCGKSCLAGD.IF...G..........EYQFDR........PLAIGDRLSFIDTAGYTMVKKN.WFNGLK..MPSIVVK
+Q5HSR6_CAMJR/244-361             NLVASVVDIIENE............................................................................................K.............QIAILDTSSEAHMPDTIIMPY....TSEVLNARILATRE....................................NEKISDLKENEFSYLLTGNTCLAGD.VM...G..........EYAFDK........KLKIGDKIVFLDQIHYTIVKNT.TFNGIR..LPNLMLL
+P73562_SYNY3/258-365             FLLSTVEDLIETP...........................................................................................EF.............THAMLDVSFTAHMPDCLEMPY....RPEVRGAR...............................................VPQTGDTVYRLGGSSCLAGD.FL...G..........DYAFDQ........PLQVGDRLIFEDMMHYTMVKTT.TFNGVH..HPAIGCL
+Q9RUH6_DEIRA/278-394             WLVSSVLDVVHNV............................................................................................K.............DAALLDVSVSAHMPDVLEMPY....RPRILGAGDPPLD.....................................DHREAQDTGSGYPYIIGGTTCLAGD.VV...G..........EYVFPH........ELKVGSRVVFDDMIHYTMVKTT.FFNGVK..HPDIGIL
+Q7MAL4_WOLSU/251-357             FLLGEVVDVVRNG............................................................................................M.............EIAILDISAAAHMPDCLEMPY....RPMVRGSA...............................................EAGEKRYSYRLGGPTCLAGD.VI...G..........DYSFDS........PLKVGDQLIFEDMIHYTIVKNN.TFNGVP..LPSIGVI
+O24865_HELPY/267-385             FLIASVIDIVQND............................................................................................Q.............EIAILDASFSAHMPDCLEMPY....RPSIFKVSVENDEE...................................LIEVEKGENQGAFSYFLGGPTCLAGD.FM...G..........SFSFET........PLKRGDKIVFQDMLHYTIVKNN.SFNGVP..LPSLARL
+Q5LVU5_SILPO/266-369             ILVGEILDLPSNG............................................................................................M.............DLAITDISATCHMPDVIEAPY....RPALMDE..................................................ADSGHTYRLGGPSCLAGD.VI...G..........DYTWDQ........PLTIGQRFAFLDQAHYSMVKTN.TFNGVP..LPTIALW
+Q72EZ9_DESVH/261-367             VLLCSVLDVVQAD............................................................................................V.............PVVILDTSAAAHMPDVLEMPY....RPGCIGSG...............................................LPDEKAWTCRLAGKSCLAGD.VV...G..........DYSFDR........PLRPGDRLAFLDMAIYSMVKTT.TFNGLQ..LPAIALY
+Q57LZ4_SALCH/318-441             VLLTEVSCEKRK...........................................................................................................TNYDLNGNVECH.VEWKFVDA....GYSVLSDSQHFDWFF.................................YVYNASRMTAAHDAWVKLAGPLCDGGD.YFHMGVKG.......EEFLLPK........ETHVGDIVAFLDAGAYAIESQT.VYNNRP..RTGVVMI
+Q82HL1_STRAW/330-442             TVVARVEYAKSAGG..........................................................................................RA.............VAV.THAGVQVA.TRTVYAPA....SWPLRITAYDA.........................................KGHPKAGPEVVQDVAGPACFAGD.LL...AV.........GRALP.........LLEQGDHVAALDTGAYYFAHHY.AYNSLA..RPGIYGF
+Q75JL7_DICDI/295-407             VVVSTVEYTKSSGD..........................................................................................RE.............IAI.CHAGANMY.IRTVYQFP....LWRIRVTIFDS.........................................NGEYKTGNEKITDIAGPCCFAAD.VL...VK.........ERLLP.........PIKKDDFIMAHDSGAYMLSSYS.HYNLRL..APPIFSF
+Q7WXK3_RALEH/291-407             YYAMEVIDVKHAFD..........................................................................................RA.............FVV.ACGGTHHF.RTPYAQGH....SHPFRVLPVESWR......................................YPFARPGVRDARVSVVGQLCTPKD.VL...AQ.........DAPVD.........SVRAGDMVVFPYAGAYAWHISHHDFLRHP..HPQHCYL
+Q7A862_STAAN/277-393             YYVTEVLDIKKVHG..........................................................................................AW.............YAI.LRGGTQQF.RLPVSWQH....NHPFEIYRYKDNP......................................YSFEKVSISRQDTTLVGQLCTPKD.VF...AR.........EVQID.........AISTGDVIVFKYAGAYGWSISHHDFLSHP..HPEFIYL
+Q5SEM5_RALSO/282-398             YYVTEVVDIKRNHG..........................................................................................KW.............FAV.LRGGTHHF.RLTASWQH....NHPFAIVPNAQWT......................................YPFARPSVQAQAVTLCGELCTPKD.VL...AR.........DVVVD.........RLSVGDRIVFQLAGAYGWHISHHDFLSHP..HPERRFV
+Q76KY1_STRHA/280-393             TLLTRVVNIKVSRG..........................................................................................RK.............FVV.IDAGINTF.GGMSGLGR....LLPVAVEPEYT.........................................GSAEATELTDVASLAGPLCTPGD.IL...GR.........EIRLP.........ELAPGDLVTIPNAGAYGVTASLLMFLGRP..APVEVVL
+Q8RKC5_ERWCH/297-409             LFVTRVNTLKTAGG..........................................................................................KT.............FAV.CDGGANCH.SAAAGLNSMLRKNFPLLRLGD..............................................NQGRPLQPYQVSGPLCTPTD.LL...GD.........NVLLP.........TLEVDDLIGITHSGAYGLTASPGSFLSFG..YPVEVMV
+Q7CYS1_AGRT5/270-383             LYVVEVNSVKT.......................................................................................................SRGTTFVV.TDGGMHHHLAASGNLGQIVKRNYPIVAPAM..............................................MQAAHDETATIVGPLCTPLD.TL...AR.........NATLP.........KLNAGDLLAILQSGAYGASASPGGFLSHT..VAKEVLV
+Q7N8H2_PHOLL/306-419             IYVTKIVERKISHD..........................................................................................MT.............FLV.TDGGMNHHLSASGNLGQLIRRNYPAIIGNK..............................................IKGEKRETVNIVGPLCTPLD.IL...VH.........QGDMS.........VATPGDLVVIFQSGAYGLSASPNNFLSQT..NAVEVLV
+Q82VG2_NITEU/296-409             IYVCRVLEKKISRG..........................................................................................QT.............FLV.TNGGLHHHLAASGNFGQVIRKNYPVAIGNK..............................................MKIDETEIVSVVGPLCTPLD.LL...AD.........RMELS.........RAEPGDLVVVFQSGAYGLTASPTAFLSHP..ASLEVLI
+Q5YWM9_NOCFA/340-451             LTLASVEFVKELGD..........................................................................................GT.............VLVTLDLSRDTVTPADQEVMV....DPLVLPGAR..............................................RDDGPAVGVYFAGRLCLERDLIT...TR.........QVFLPG........LPAPGDVVVFPNTAAYHMDLSA.STAARW..APPRRWV
+Q72WM6_DESVH/318-424             LLLTRVKAVKERPG.........................................................................................AEP.............FAI.TDGGRLSQ.AYPCDFEW....HEAFLAND...............................................LRRPLARAYTVTGRVCTRSD.WL...YR.........GKVMP.........ELASGDILAVLDAGAYFSSYAM.NF.AFP..RAAVVGV
+Q62F85_BURMA/278-395             VFVTRVRAVKVWDD..........................................................................................RV.............IAV.CDGGMSHN.FLLAKTEAVLKTWAAPTLVPAGT.........................................ADAHRAPNARPITFVGNTCNRAD.VI...GR.........LERHPR........LPQPGDFVVFSQCGAYHHSYTVSGFLSHK...PAQVYI
+Q7NPE5_GLOVI/307-415             ATAYTVGSTKTIPS.........................................................................................IRK.............YFS.VDGGMSDN.PRPITYKA....LYTAVVANK..............................................MHDGRREKVTVAGKHCESGD.VL...LR.........DVELP.........PLERGDCLVVFSTGAYNCSMAS.NYNRIP..RPAAVLV
+Q7A0X5_STAAW/290-398             VTLYEVGTIKEIPE.........................................................................................INK.............YVS.IDGGMSDH.IRTALYDA....KYQALLVN...............................................RNEEADDSVTIAGKLCESGD.II...IK.........DAKLPS........SVKRGDYLAILSTGAYHYSMAS.NYNQMQ..KPSVFFL
+DCDA_MYCS2/336-449               ITLYEVGTVKDVAVSQ.....................................................................................TAHRR.............YVS.VDGGMSDN.IRTSLYAA....QYDARLVSR..............................................VSDAPPALARIVGKHCESGD.IV...VR.........DTWVSD........DIAPGDLIGVAATGAYCYSMSS.RYNLLC..RPAVVAV
+DCDA_ACTPA/309-415               VTLYRVAAVKR.GV.........................................................................................RRV.............FVA.VDGGMSDN.PRPALYGS....RYAVRLVR................................................RGGRRAPVTVVGRHCEAGD.VL...AE.........DVPLPE........DVRAGDLLAVPVTGAYHHALAS.NYNAVG..RPPVVGV
+Q8TY23_METKA/277-383             ILVTSVRQVKR.GR..........................................................................................RR.............WVF.VDTGMNAL.IRPALYDA....YHEVVVHG...............................................GDYSATEKASVAGPLCESGD.VL...AE.........DRELPI........DISEGDLVVFLSAGAYCESMAS.NYNCYP..IPGSVVV
+Q7N7F9_PHOLL/289-407             VLMTEVRAVKQ.MG.........................................................................................NRN.............YVL.VDAGFNDL.MRPVMYGS....YHHISVLPADG..........................................RKIEQLPLRETLVAGPLCESGD.IF...TQVEG..GGIAPRALP.........PVQVGDYLVFHDTGAYGASMSS.NYNSRP..LISEVLF
+Q8F7A1_LEPIN/276-395             SILTTVDDVVS.TGP.......................................................................................GGYT.............FVK.LDAGMDVN.TRPSLYAA....KHPLVVVSKE............................................GVHSGKTADYVYVGHCCESGD.LF..............TQAEGGGPITRITGEAKLGDYVVMEGAGAYCSSMSTKNYNSFP..ETAEVLV
+Q8GGR7_STRAZ/284-405             SLVTKVIDKAD.TGA.......................................................................................EGNS.............FLK.INSGLTEI.ARPSYYGV....QHPIVSVPATG.........................................GAERAADDREEFNVVGHCCIAGD.VL..TAK.........QEELAPVP....LGRTEIGDYVVIERAGSYCSSMSMKNFNSYP..EAAEVLR
+DCDA_METJA/305-410               YLLGKVHHIKE.TP.........................................................................................VTK.............WVM.IDAGMNDM.MRPAMYEA....YHHIINCK................................................VKNEKEVVSIAGGLCESSD.VF...GR.........DRELD.........KVEVGDVLAIFDVGAYGISMAN.NYNARG..RPRMVLT
+#=GR DCDA_METJA/305-410    SS    -EE--EEEEEE.-S.........................................................................................S-E.............EEE.E-----S-.-HHHHH--....---EEESS................................................--SSEEEEEEE-----TT-.--...--.........-EEEE.........-------EEES-------TT-B.-TTT--..--EEEEE
+Q7ULZ0_RHOBA/283-389             YLITKVINQKS.SY..........................................................................................KD.............YVG.VDACMSNL.MRPGMYGA....YHHITVMGK..............................................EDQPADRTVDIVGSLCENND.KF...AI.........DRKMP.........ATEVGDIAVIHDAGAHGHSMGF.QYNGRL..RSAEIVF
+Q6SHW6_9BACT/289-395             ILLAQVTGIKD.SY..........................................................................................KT.............FIG.LDAGMETL.MRPALYGA....VHRIYKVGA..............................................LMEEQNLTVDITGRICENTD.RL...AI.........DIPFP.........DVAEGDLIAIMDTGAYGYAMAH.QFNTRP..RPAEVLI
+Q5V5E3_HALMA/306-412             CILTEVNTVKE.TP.........................................................................................AAT.............VVG.VDASLATL.IRPAMFGS....YHPIRNVT...............................................APEREAEPVSVGGPCCTSAD.VF...CT.........DRPLA.........RPERTDLLAIGNAGAYGYELAN.QFHSQP..RPAEVAF
+DCDA_METTH/292-398               YLLTRVNTIKE.SY..........................................................................................RK.............FAG.VDAGFNTL.LRPAMYGS....YHHILVAER..............................................PLDEPSEKMDVAGNVCESGD.LF...AR.........DRQLP.........EINEGDVLAIMNAGAYSFSMSS.QYNSRP..RPAEVLV
+Q87EA9_XYLFT/758-866             VLLTRVTQVIE.KD.........................................................................................DIL.............RVG.LEAGMHTL.IRPALYDA....WHGVENLTR..............................................LDETPHVLCDVVGPICESSD.VF...GR.........RRHLPA........ATASGDLMLIADAGAYGFSMAS.TYNLRG..LPAEVVL
+DCDA1_ARATH/351-459              CFVNHVTGVKT.NG.........................................................................................TKN.............FIV.IDGSMAEL.IRPSLYDA....YQHIELVSP.............................................PPAEAEVTKFDVVGPVCESAD.FL...GK.........DRELP.........TPPQGAGLVVHDAGAYCMSMAS.TYNLKM..RPPEYWV
+DCDA_PSEFL/285-390               VLLTQVEYLKH.TE.........................................................................................HKD.............FAI.VDAAMNDL.IRPALYQA....WMDVTAVR...............................................PRDTAARSYDIVGPICETGD.FL...AK.........GRELA..........LEEGDLLAVHSAGAYGFVMSS.NYNTRG..RCAEVLV
+Q5FPL4_GLUOX/282-390             ILLTRVIETKA.GN..........................................................................................PD.............FVV.LDAAMNDL.ARPSLYES....WHGIMPVAP.............................................NGLTSLTKLWDIVGPVCESSD.IF...AR.........DRALPA........DTKRGDLIALLDTGAYGSVMSS.TYNTRP..LAAQVLI
+Q9A681_CAUCR/288-394             VLVSEVIHVHERPE.........................................................................................GRK.............FLV.IDAAMNDL.VRPAMYDA....FHDIRPVI................................................QRTGETVYDVVGPVCETGD.TF...TR.........DRALP.........PFAAGDLVAFMSAGAYGAAMAS.EYNTRP..LVPEVLV
+Q5FEQ0_EHRRW/291-397             ILLAKVLYHKS.NY.........................................................................................EKN.............HLV.LDTGMNDL.IRPALYNA....EHTIIPAV...............................................VSSKSHLSFDIVGPICESDD.TF...AY.........SYWIN.........NVDNNEIVAICTVGAYGSSMSS.NYNSRP..LVPEVIV
+Q7MT14_PORGI/263-379             SLITQVLYIKE.GK.........................................................................................AKK.............FAI.VDAGMTDL.VRPALYEA....HHQIRLVQPGEWT.....................................MRATSPSAALTEKYDVVGPICESSD.VF...ER.........ELLMP.........ELKRGDYLAIRSAGAYGAVMAS.SYNMRP..LPGSLFS
+Q6MM66_BDEBA/286-391             ALITQVQYIKE.TS.........................................................................................AKT.............FVI.VDAGMNHL.IRPSLYEA....THRIEPLK................................................RKDAAFVVDVVGPICESSD.FF...AK.........EISLT.........KVQEGDFVAIMDSGAYGYSMAS.VYNLQE..LPLEICI
+Q6L350_PICTO/286-391             IALATVTDLKN.YG..........................................................................................RS.............IAG.TDLGMNIL.IRPALYGA....VHEIICIN...............................................KNDDKLFNYDITGQICENTD.FT...GL.........NVKLP.........GLEPGDILGIMNAGAYVSSMSS.NYNSLS..RAAEVLI
+Q97AJ0_THEVO/281-380             ILVGKVYDVYN..............................................................................................G.............FVG.TDIGMNIN.IRHALYGA....EHRFYALT................................................GRSDEAEYIVTGQICENTD.VT...GR............LTG........KVQIGDLVAMYDAGAYIYSMSS.NYNGRF..RPTEVIV
+Q728N7_DESVH/285-394             LLLGSVHSVKS.NG.........................................................................................ANR.............YVG.TDLGFNVL.ARPVMYDA....HHDIEVYRED............................................GAPSDLLLPQTVVGNICESGD.II...AR.........NRPLP.........PVEEGDILGVLDAGAYGYVMSS.SYNQRM..RPAEVLI
+Q62B72_BURMA/307-413             MLVLRVAYVELKRN..........................................................................................RR.............FVG.LNGGFNLA.IEPAFYDL...PCEPVPCVR................................................RPGPAQSVCVAGNINEALD.VW...GN.........DVSLP.........PVEPGDFIALLNAGGYASSMSS.NHCLRG..QFRELAL
+Q66B85_YERPS/267-374             YLVTRIVFAKCR.............................................................................................Y.............STNVITTAVPGTNIRSAQYHN....HRKVLIIPE.............................................RPVNCEHSVADVYGSNCYEND.II...AK.........NVPVPF........DLSLDDKIAIFSCGAYDIMNSSDWIRK....RPPIIVI
+Q5NIN9_FRATT/298-400             ALLTTIVGTREQNE.........................................................................................DFQ.............SLI.TDAGIHTI...PTISTY....RHPIYHLK................................................TDSYHKKTLLLGPSCMQHD.FL...HD.........DIFLP.........KLEYGDKLLIDGVGAYNISRNN.EFIHLK....PSVIL
+Q8XS02_RALSO/281-396             VLLTGIKRDIVQH...........................................................................................SL.............GNIVVTDGSRMLMPSAQLRNR....AHHTVFLDAAF.........................................NEVVDYSRRCVAKVRGRSILRNDYIL...PG.........DVVAPE........TVKAGEYMLILDVGAYCATQHM.EFLNVP..PAGEVLV
+SPEA_XYLFT/343-555               VLIANVTEVEAVPEGRVPGVCDDEPAVVRHMREIYGELDARPAIELFYEAQHFHA.......EGLAAYTLGQIDLVHRARIDDLFYAISHGVRERLSHEEKSHRPV....LDELNERLVDKYFVNFSVFESIPDVWAINQ....IFPIVPIER..............................................LNEVPTRRGVVCDLTCDSDG.TV...KQYVE..NESLDSALPLH.....VLRHGEAYRIGFFLVGAYQEILGD.IHNLFG..DTDAVEV
+Q5NHM0_FRATT/327-467             LLITKPLIKQHESDIENEILHQ..........................................................................QWLDREVSLGELQSYLPQNQKNTQQAWLNFSIFQSLPDHWGIDQ....KFPILPLEF..............................................FNSYVTSEVKLYDISCDVDG.VV.....K......STSEYIEI........ATDNIEYIVFMCVGAYQGMLSA.KHNMLG..NISAVNI
+SPEA_PROMP/355-574               VLIFNILGTSHVSSQVKVSDQKKQSLIITNLIETLNQIKNLRDKKEDLSEIIELWNDAKKFKEDCLVAFRLGFICLEERAYAEELTWACAKEIANQLENNEIIHPD....LSEITDTLASTYYANLSVFKSIPDTWAINQ....VFPIIPIHR..............................................HLEEPFCKGHFADLTCDSDG.KL...NNFID..NGKIKSLLNLH.....PPEKNNDYLIGIFMAGAYQEALGN.FHNLFG..NTNVIHI
+SPEA_GLOVI/346-557               VLVFDVMGVSHLQFGEPEPPARNEHSIIRNLYETYTQITPDNVQEAFNDASQFKE........EALSLFALGYLGLGERARAERLYWGCCEKILNLVRELDYIPDE....LADLEKNMASTYYCNFSVFQSAPDSWAIDQ....LFPIMPIHR..............................................LDEEPKARGTLADLTCDSDG.KI...DQFID..LRDVKGVLELH.....PVRPEEPYYLGMFLNGAYQEILGD.MHNLFG..DTNTVHI
+Q6MQU4_BDEBA/373-587             VLVFNVMGVNDLHRHEPPRPATKTDHSIMQDMQYIFEKVNKDNINECFNDLEQAK.......QETLQLFTYGVLSLEQRAWCESMYFAIATKMIKLARATPDCEDI....VAALGKELCDTYFSNFSVFQSVPDSWAVGQ....LFPVIPIHR..............................................LGEEPKREATLADLTCDSDG.VI...EKFIDTASGEPKETIRLH.....QFTEGQQYYLGVFLTGAYQEILGD.LHNLFG..DTDAVHI
+Q72F01_DESVH/373-585             MLLFNILDVSRVEIGNLPDALPEDTPEPVRNMREVLAGMTLRNLQECYNDALYYR.......DAVRQLFLTGQVTLRQRTLSERLFWAIMKRIAQEKQKLKHVPKD....LAEIDVALADIYYGNFSVFQSLPDSWAIDQ....LFPVMPVHR..............................................LQELPSRQGILSDITCDSDG.RI...DHFID..PQGMKGTLDLH.....PLRDGEEYYLGVFLVGAYQETLGD.LHNLLG..DTNVVSV
+Q5SHU0_THET8/347-559             VLVLQVIDVIAPPGEARPSPPPPEAHPLVKELWESLQSLSPKNFQEVYHDAFADK.......ETLQTLYDLGLVSLRDRALAEEIFYHIARRVQTIAQNLPYVPDE....LEDLEKLLADKLVCNFSVFQSLPDAWAIHQ....LFPVVPLSR..............................................LLEPPTRRATLVDISCDSDG.KM...DRFID..LHDVRQTLPVH.....PVRPGEPYYLGVFLVGAYQDVLGS.NHNLFG..QVGEAHV
+SPEA_BACTN/346-558               VLIFEVLETATLPEWDDEEEIAPDAHELVQELYSIWDSLNQNKMLEAWHDAQQIR.......EEALDLFSHGIVDLKTRAQIERLYWSITREINQIAGGLKHAPDE....FRGLSKLLADKYFCNFSLFQSLPDSWAIDQ....IFPIMPIQR..............................................LDEKPERSATLQDITCDSDG.KI...ANFIS..TRNVAHYLPVH.....SLKKTEPYYLAVFLVGAYQEILGD.MHNLFG..DTNAVHV
+O25176_HELPY/412-542             VL..........AHLIVKKAV............................................................................QLLYVKDHN.D..ILRIQEQVQERYLLNCSFFQSLPDYWGLRQ....NFPVMPLNK..............................................LDEKPTRSASLWDITCDSDG.EI...A.F......DSTKPLFLHD....IDIDEEEYFLAFFLVGAYQEVLGM.KHNLFT..HPTEFSV
+SPE2_ARATH/396-596               VLIFEAVSADKPMVHQATPGDIQFLLEGNEEARANYEDLYAAVMRGDHESCLLY..........VDQLKQRCVEGFKEGVLSIEQLASVDGLCEWVLKAIGASDPV.............HTYNINLSVFTSIPDLWGIDQ....LFPIVPIHK..............................................LDQRPGARGILSDLTCDSDG.KI...NKFI.....GGESSLPLHEL.DKNGSGGR.YFLGMFLGGAYEEALGG.VHNLFG..GPSVVRV
+O04429_DIACA/405-605             ILVFEAVSSSSSASPPMPGSTLALDYLVDGLTDEVKGEYRSLTAAAMRGEYESCL.......MYSGMLKQRCVELFKDGCLGMEQLAAVDGLCELVSKALGVADGV.............CTYNVNLSVFTSIPDFWGIGQ....LFPIMPIHR..............................................LDQQPKARGILSDLTCDSDG.KI...DKFI.....GDESSLPLH.....ELSGGEGYYLGMFLGGAYEEALGG.VHNLFG..GPSVVRV
+SPE1_AVESA/355-532               MIILEALSAIPEPKDDEDEATTEQLHGRIRDLSSKLQPTGLS..................................MSSHAVHIKKHGIEMYKLGKKLSKSVTTDA..........HTIYNYHMNLSVFSLMPDYWGIQH....LFPMMPVSR..............................................LDEKPTHKATLVDVTCDSDG.KV...DKFI.....RDTETMPLHP....LDPKLGGYYVAVLLTGAYQEALSN.KHNLFG..GPSLVRV
+Q5X0L3_LEGPL/343-556             VLISNITDVEIINKAPVLPEISEDDSHVIRDIYDTYQAITDSSPTEIYNYAAHSLN......EAHSLFKHGVISLQEKAKVEAFYTNICMEIKDKLDEENPSEKAL....LMRINECMAAKIFCNISFFQSIPDAWAIGQ....IFPVAPISQ..............................................LNRTLSMHSVLQDLTCDSDG.TI...KQYPG..SSCVTTTLMLP.....SYDINNPYNIGFFLVGAYQEILGN.LHNLFG..DTNSLDV
+SPEA_CHRVO/343-556               VLLMNVTDVERLPDTVAPIDKAEELSLPLRKLVELANLNDEELVTEIYYRASHCVS......EVSEMYAEGRLSLQEKALAEDLHATLCRRLHNQLQASQRSQRQV....YDELTDRLADKYFCNFSVFQSLPDTWAIDQ....VLPIMPVHR..............................................LAEQPTRRAVLQDLTCDSDG.KL...KQYVD..QQSIESSMSVH.....EVKQGDEYLIAVFLVGAYQEILGD.MHNLFG..DTDSVNV
+SPEA_VIBVY/354-570               VLISNVIGTETYKPETVTEPEEDFPLLLNNMWRSWLNLHNGTDARALIEIYNDTQSD...LAEVHSQFATGVLTLEHRAWAEQTSLRIYYELNRLMSTKNRFHRPI....LDELSERLADKFFVNFSLFQSLPDSWGIDQ....VFPVLPLSG..............................................LQNAADRRAVMLDITCDSDG.AI...DAYVD..GQGIESTLPVP.....AWNEDEPYLMGFFLVGAYQEILGD.MHNLFG..DTHSVVV
+Q7PZA0_ANOGA/274-386             TALVNVVSKSYEKDVD.....................................................................................GAVVR.............VRYYVDDGLYDT.FDWCDDQG....SGPLLQED...............................................KRGAPCVRSVIYGRTMCEHD.VI...RE.........EISLP.........EHEIGDCLVFPNRGAYAKLLGR.GHNGFR..PTGTKVC
+Q60D03_SOLDE/147-257             TLVTHVIGKRVRG...........................................................................................EK.............IEYWIDEGIYGS.FRPTLYNS...CFVGIKTISM..............................................KESCEIGESTIYGPSCDSLD.AV...AV.........DIKLP.........ELELDDLIVFYDMGAYSKCAGT.KFNGFDMLSTPTYIV
+DCOR_NEUCR/326-471               TLACNIIARRTIQDGSAVSV.............................................................................SDSSSMSDD.G..SVNNGDARYMVY.VNDGLYGN.FSSIMFDH....QHPVAKILRAGGRTMY................................NSVAAHESSAEDAIEYSIWGPTCDGID.RI...TE.........SIRFRE........ILDVGDWLYFEDMGAYTKCSAT.TFNGFS..NEHDVIY
+#=GR DCOR_NEUCR/326-471    sAS   ......................................................................................................................................................................................................................*.........................................................................
+DCOR_YEAST/329-460               TLASHVIAKRKLSE.........................................................................................NEA.............MIY.TNDGVYGN.MNCILFDH....QEPHPRTLYHNLEFHYDDFE........................STTAVLDSINKTRSEYPYKVSIWGPTCDGLD.CI...AK.........EYYMKH........DVIVGDWFYFPALGAYTSSAAT.QFNGFE..QTADIVY
+#=GR DCOR_YEAST/329-460    sAS   ......................................................................................................................................................................................................................*.........................................................................
+DCOR_CANAL/324-468               TLITHIIARRDLPTGGN...................................................................................NNNNDM.........TPSAMLY.INDGVYGN.LNCILFDH....QTPKVYVLTNENQLFYKQEM.......................MRSLSVNNNNNNNNKTDGFKFSIWGPTCDGLD.CV...SS.........LAKLSK........NVQVGDWLFFENVGAYTSCAST.KFNGLSSGETKTLYV
+#=GR DCOR_CANAL/324-468    sAS   ......................................................................................................................................................................................................................*.........................................................................
+Q84527_PBCV1/263-371             VLATQVIGKRVRD...........................................................................................GL.............YEYFFNESTYGG.FSNVIFEK....SVPTPQLLRD............................................VPDDEEYVPSVLYGCTCDGVD.VI...NH.........NVALP.........ELHIGDWVYFPSWGAYTNVLTT.SFNGFG...EYDVYY
+#=GR Q84527_PBCV1/263-371  SS    EEEEEB---EE--...........................................................................................--.............EEEEBS------.-THHHHS-....-----EESS-............................................--TT--EEEEEEE--------.-S...EE.........EEEEE.........------EEEES-----SGGG--.------...-EEEEE
+Q5MNH7_NEOUN/277-400             YLAVKVVARRVNATAF.....................................................................................GHEPA............TRLY.INDGIYSNFMMRFIVNM....TFSPAAVIREGVW......................................HDQADHTMRGEACSLWGRSCDSND.CI...NR.........DCRLGP........EVRVGDWLVFKDMGAYTTVCNT.TFNGFT..SSNHTIY
+Q58P26_ENTHI/268-382             HLVSSLHGKRVRIQN.......................................................................................GKKQ.............IEYTSGDGLHGSFGCCIWFEK....QKSCECITQK............................................VNENTKMYESIIYGPSCNGSD.KV...A..........TQELPE........MEPGKDWLLFPNMGAYTISMAT.NFNGFE..ERNHVIY
+O15696_PLAFA/807-931             SKLGNITNIKKKVVNI.....................................................................................NDNRY...........NYFSYYVSDSIYGC.FSGIIFDE....YNRCPIYVIKNKN.....................................NPNQNFMNFNLYLANVFGQSCDGLD.MI...NS.........ITYLP.........ECYINDWLLYEYAGAYTFVSSS.NFNGFK..KCKKVYI
+DCOR_LEIDO/509-682               ALLMNVFASRTLRLSDVEVS..............................................................................RQAFQSVV.....SMDEPEEYQYY.VNDGLYHS.FNCILFDH....AHPTLLLLNDGDGADGVESGTEAAAVCSEEEGETSLSGPLANDPLFMSAWDRRRSFARRPLRITTIFGPTCDSMD.CI...LK.........KQPFP.........EMKLGDWLLVPDMGSYTTAAAG.FFNGFA..TRRLEWV
+#=GR DCOR_LEIDO/509-682    sAS   ......................................................................................................................................................................................................................*.........................................................................
+P78829_SCHPO/238-357             TLAVNVIAKRKLDDE........................................................................................EKV.............MYY.VNDGVYGS.LNCILFDH....QHPVARVLKCGSR.....................................FVYNDLVGTGQHRCFIWGPTCDSLD.VI...AN.........DAHLPY........EPNVGDWIYFEDAGAYTVAAAS.CFNGFK..TSRIVYL
+O76203_HAECO/287-407             TLVCNIIHATEVSAEKIT..................................................................................KRPEDV........EERGFMYY.VNDGVYGS.FNCILFDH....VQPVGTPLF..............................................DEIAQEYPSTIWGPTCDSLD.KI....E.........DQKLMR........MMSVGEWIVYRNMGAYTCSAST.TFNGFQ..RPNAIYM
+DCOR_PANRE/294-416               SVTTNVIASVKVPASRIT..................................................................................EKADDV........NRDGYMYY.MNDGVYGS.FNCKLFDH....YQPRGMPLAE............................................HDADEPRFPVCVWGPTCDGLD.QV...EE.........SSVMP.........RLYEGDWLYYPDMGAYTSVAAS.TFNGFD..KPKTYYF
+#=GR DCOR_PANRE/294-416    sAS   ......................................................................................................................................................................................................................*.........................................................................
+#=GC SS_cons                     EEEEEEEEEEE--S.........................................................................................S-E.............EEEEES----S-.-CHHHHS-....---EEECSS-............................................--TTSSEEEEEEE-----TT-.-S...EE.........EEEEE.........------EEEES-----SGCC-B.-TTT--...-EEEEE
+#=GC seq_cons                    sLlspVhsh+p.st..........................................................................................tt.............hhh.lssGhhsp.hsshhhst....hhslhhht...............................................hpspstttsslsGsoC-usD.hl...sp.........chhLP.........plp.GDhlshhssGAYshshus.saNuhs..tsshlhl
+//
+# STOCKHOLM 1.0
+#=GF ID   NIF3
+#=GF AC   PF01784.11
+#=GF DE   NIF3 (NGG1p interacting factor 3)
+#=GF PI   DUF34;
+#=GF AU   Bashton M, Bateman A
+#=GF SE   Pfam-B_1006 (release 4.2)
+#=GF GA   23.40 23.40;
+#=GF TC   24.10 24.00;
+#=GF NC   22.00 23.30;
+#=GF BM   hmmbuild HMM.ann SEED.ann
+#=GF SM   hmmsearch -Z 9421015 -E 1000 HMM pfamseq
+#=GF TP   Family
+#=GF RN   [1]
+#=GF RM   8663102
+#=GF RT   Transcriptional activation by yeast PDR1p is inhibited by its
+#=GF RT   association with NGG1p/ADA3p. 
+#=GF RA   Martens JA, Genereaux J, Saleh A, Brandl CJ; 
+#=GF RL   J Biol Chem 1996;271:15884-15890.
+#=GF RN   [2]
+#=GF RM   11124544
+#=GF RT   Isolation and characterization of a novel human gene, NIF3L1,
+#=GF RT   and its mouse ortholog, Nif3l1, highly conserved from bacteria
+#=GF RT   to mammals. 
+#=GF RA   Tascou S, Uedelhoven J, Dixkens C, Nayernia K, Engel W, Burfeind
+#=GF RA   P; 
+#=GF RL   Cytogenet Cell Genet 2000;90:330-336.
+#=GF DR   INTERPRO; IPR002678;
+#=GF DR   SCOP; 1nmp; fa;
+#=GF CC   This family contains several NIF3 (NGG1p interacting factor 3)
+#=GF CC   protein homologues. NIF3 interacts with the yeast
+#=GF CC   transcriptional coactivator NGG1p which is part of the ADA
+#=GF CC   complex, the exact function of this interaction is unknown
+#=GF CC   [1,2].
+#=GF SQ   122
+#=GS Q6AQL0_DESPS/7-255   AC Q6AQL0.1
+#=GS Q1NWG7_9DELT/9-267   AC Q1NWG7.1
+#=GS Q1JZJ5_DESAC/11-364  AC Q1JZJ5.1
+#=GS B3E3Z5_GEOLS/16-365  AC B3E3Z5.1
+#=GS B5EBN8_GEOBB/8-355   AC B5EBN8.1
+#=GS A0LHK1_SYNFM/6-257   AC A0LHK1.1
+#=GS Q1ASW8_RUBXD/7-359   AC Q1ASW8.1
+#=GS Q24T08_DESHY/7-373   AC Q24T08.1
+#=GS Q67RW0_SYMTH/3-355   AC Q67RW0.1
+#=GS A6NV06_9BACE/2-238   AC A6NV06.1
+#=GS A7VVR8_9CLOT/6-241   AC A7VVR8.1
+#=GS Q2S0R3_SALRD/53-405  AC Q2S0R3.1
+#=GS A7V376_BACUN/5-351   AC A7V376.1
+#=GS Q7MTC6_PORGI/5-351   AC Q7MTC6.1
+#=GS Q11U42_CYTH3/6-352   AC Q11U42.1
+#=GS A6ENK7_9BACT/5-358   AC A6ENK7.1
+#=GS A3ZRR2_9PLAN/11-256  AC A3ZRR2.1
+#=GS Q7UDY5_RHOBA/21-282  AC Q7UDY5.1
+#=GS A4ECC5_9ACTN/5-252   AC A4ECC5.1
+#=GS Q83GL0_TROWT/12-270  AC Q83GL0.1
+#=GS A7BDB0_9ACTO/13-271  AC A7BDB0.1
+#=GS A0LTB3_ACIC1/18-373  AC A0LTB3.1
+#=GS Q6AFH9_LEIXX/10-259  AC Q6AFH9.1
+#=GS Q6M3K0_CORGL/8-362   AC Q6M3K0.1
+#=GS A8ZUC2_DESOH/8-358   AC A8ZUC2.1
+#=GS Q6M164_METMP/5-237   AC Q6M164.1
+#=GS A3MU59_PYRCJ/10-266  AC A3MU59.1
+#=GS Q8TZC0_METKA/12-224  AC Q8TZC0.1
+#=GS A5UKQ3_METS3/5-218   AC A5UKQ3.1
+#=GS Q2FPY1_METHJ/5-230   AC Q2FPY1.1
+#=GS Y1146_METTH/8-215    AC O27214.1
+#=GS Q8TW44_METKA/6-234   AC Q8TW44.1
+#=GS Q0W3L4_UNCMA/5-231   AC Q0W3L4.1
+#=GS Q12Z61_METBU/5-232   AC Q12Z61.1
+#=GS A0ZGU3_NODSP/5-248   AC A0ZGU3.1
+#=GS Q310X0_DESDG/5-312   AC Q310X0.1
+#=GS Q1MR73_LAWIP/5-246   AC Q1MR73.1
+#=GS A1VDX4_DESVV/5-310   AC A1VDX4.1
+#=GS Q7MQP7_WOLSU/6-230   AC Q7MQP7.1
+#=GS Q7VIG7_HELHP/17-261  AC Q7VIG7.1
+#=GS Y959_HELPY/6-231     AC O25613.1
+#=GS A8EW77_ARCB4/5-232   AC A8EW77.1
+#=GS Q30TF6_SULDN/5-228   AC Q30TF6.1
+#=GS A7GZB8_CAMC5/5-228   AC A7GZB8.1
+#=GS A7SAJ3_NEMVE/5-336   AC A7SAJ3.1
+#=GS Q4CW43_TRYCR/7-273   AC Q4CW43.1
+#=GS Q5KCX5_CRYNE/12-280  AC Q5KCX5.1
+#=GS NIF3_SCHPO/9-265     AC O94404.1
+#=GS Q7S5H9_NEUCR/62-330  AC Q7S5H9.2
+#=GS A6SM83_BOTFB/24-302  AC A6SM83.1
+#=GS Q5B6Z5_EMENI/15-342  AC Q5B6Z5.1
+#=GS Q4KMJ5_DANRE/5-334   AC Q4KMJ5.1
+#=GS A4IGP2_XENTR/5-334   AC A4IGP2.1
+#=GS Q6P1B7_MOUSE/31-363  AC Q6P1B7.1
+#=GS NIF3L_DICDI/12-341   AC Q55E83.1
+#=GS Q8SV52_ENCCU/5-229   AC Q8SV52.1
+#=GS Q6FQE2_CANGA/13-283  AC Q6FQE2.1
+#=GS A3LS90_PICST/8-261   AC A3LS90.1
+#=GS Q86F61_SCHJA/5-335   AC Q86F61.1
+#=GS Q14P57_SPICI/5-233   AC Q14P57.1
+#=GS Q2SRY9_MYCCT/5-244   AC Q2SRY9.1
+#=GS Q6F1J4_MESFL/5-244   AC Q6F1J4.1
+#=GS Q8EUT6_MYCPE/5-240   AC Q8EUT6.1
+#=GS Q4A5V5_MYCS5/5-245   AC Q4A5V5.2
+#=GS Q6KI02_MYCMO/6-252   AC Q6KI02.1
+#=GS A5IY53_MYCAP/5-248   AC A5IY53.1
+#=GS Q601Y7_MYCH2/5-239   AC Q601Y7.1
+#=GS Y351_UREPA/10-250    AC Q9PQE0.1
+#=GS Q7NB92_MYCGA/5-241   AC Q7NB92.1
+#=GS Q3F0L5_BACTI/6-294   AC Q3F0L5.1
+#=GS Q0SN38_BORAP/5-237   AC Q0SN38.1
+#=GS A9B0A0_HERA2/5-242   AC A9B0A0.1
+#=GS Q1IWV8_DEIGD/21-255  AC Q1IWV8.1
+#=GS Q73KL0_TREDE/5-248   AC Q73KL0.1
+#=GS Q2LUC1_SYNAS/5-241   AC Q2LUC1.1
+#=GS Y1777_ARCFU/5-234    AC O28497.1
+#=GS Y1424_PYRAB/5-239    AC Q9UYT3.1
+#=GS Y1766_HALSA/5-242    AC Q9HP80.1
+#=GS A8B7G6_GIALA/7-257   AC A8B7G6.1
+#=GS A5EYD5_DICNV/5-236   AC A5EYD5.1
+#=GS Q5WY60_LEGPL/6-241   AC Q5WY60.1
+#=GS Y291_BUCAP/5-236     AC Q8K9N4.1
+#=GS Q1Z5P6_PHOPR/5-241   AC Q1Z5P6.1
+#=GS Q6FCJ5_ACIAD/6-241   AC Q6FCJ5.1
+#=GS A2S764_BURM9/5-237   AC A2S764.1
+#=GS A5CVR4_VESOH/6-235   AC A5CVR4.1
+#=GS Q21U81_RHOFD/6-241   AC Q21U81.1
+#=GS A6GMA8_9BURK/8-242   AC A6GMA8.1
+#=GS A0L3K9_MAGSM/6-241   AC A0L3K9.1
+#=GS A3YBU9_9GAMM/11-248  AC A3YBU9.1
+#=GS Q6MC02_PARUW/7-241   AC Q6MC02.1
+#=GS Y108_CHLTR/5-240     AC O84110.1
+#=GS Q609U6_METCA/7-244   AC Q609U6.1
+#=GS A9VML6_BACWK/5-238   AC A9VML6.1
+#=GS A6TKN7_ALKMQ/5-263   AC A6TKN7.1
+#=GS A4J511_DESRM/5-303   AC A4J511.1
+#=GS Q3Z2K6_SHISS/9-274   AC Q3Z2K6.1
+#=GS Q022B6_SOLUE/14-253  AC Q022B6.1
+#=GS A4IP70_GEOTN/7-250   AC A4IP70.1
+#=GS Y1125_STAEQ/5-353    AC Q5HNY9.1
+#=GS A5KQA2_9FIRM/5-253   AC A5KQA2.1
+#=GS Q8RE15_FUSNN/5-246   AC Q8RE15.1
+#=GS A0Q1P0_CLONN/7-258   AC A0Q1P0.1
+#=GS Q0TNV6_CLOP1/5-249   AC Q0TNV6.1
+#=GS B8CXH0_HALOH/6-355   AC B8CXH0.1
+#=GS Y1073_LACLA/5-244    AC Q9CGM3.1
+#=GS A5LFS5_STRPN/5-252   AC A5LFS5.1
+#=GS Q4ETV8_LISMO/8-360   AC Q4ETV8.1
+#=GS Q038U7_LACC3/6-251   AC Q038U7.1
+#=GS B3XRX7_LACRE/6-257   AC B3XRX7.1
+#=GS Q5FJU7_LACAC/6-251   AC Q5FJU7.1
+#=GS Q03Y42_LEUMM/5-248   AC Q03Y42.1
+#=GS A8MG99_ALKOO/7-357   AC A8MG99.1
+#=GS A4XK84_CALS8/6-353   AC A4XK84.1
+#=GS B0K888_THEP3/7-356   AC B0K888.1
+#=GS Q18BX9_CLOD6/5-352   AC Q18BX9.1
+#=GS A0RIR2_BACAH/9-360   AC A0RIR2.1
+#=GS A4J7B6_DESRM/6-358   AC A4J7B6.1
+#=GS Q0AZ81_SYNWW/7-359   AC Q0AZ81.1
+#=GS Q3AEW6_CARHZ/6-353   AC Q3AEW6.1
+#=GS B8I6N4_CLOCE/5-249   AC B8I6N4.1
+#=GS A3DDU7_CLOTH/7-355   AC A3DDU7.1
+Q6AQL0_DESPS/7-255              DILESIEGDAPKSLA..E.SW.DNV.............................GL...LVG..........DKER..........................QVKRVLVGLDPTTSLLAEAIE......LG.ADTVITHHP...V.IF................HPLSAIDTS....TPVGIIIEQALL.H...........KISLIASHTNLDSAAS.GVSQALA.IAL.....GLE.........KCCPLLPSSEGI...............................................................................................................EGTGLGCL.AEFST.P....LLWEDFCDLLLERL.SV.........LS......VQVA.......G.SVPKRVA.....RVA..LCGGSG [...]
+Q1NWG7_9DELT/9-267              KLLTLLDTVSPFSQA..A.AW.DNV.............................GL...MVG..........AVHR..........................EVSGILLALDPTPDLLEECRH......HH.CNTIITHHP...P.IF................HPLPSIRTD....QPEGQLVSQAIK.D...........DINLLACHTNLDVVAD.GVSDVLA.RLL.....GIT.........ASAPLEPLERPAGAQAA.....................................................................................................TGAKAPLSGFGRY.GQLAS.P....MAGEEFLARISDRL.KL.........PA......LSVA.......G.PIPRQVS.....TVA..VCGGSG [...]
+Q1JZJ5_DESAC/11-364             DLVGWLNRNYPQSLA..E.EW.DNV.............................GL...QVG..........DLNQ..........................EITKVMVALEPTEQTIKQAID......HH.CQLLISHHP...L.LF................KPLKKISKN....DETGRILFAAIQ.N...........NLAIVSAHTNLDHAAD.GLNDWLA.ECL.....DLG.........ATTPLLPPRSGDLVKLVVFVPEDDTDRVATALFKAGAGHIGGYDHCSFRNRGTGTFRPGTDTQP.......FIGQTGQDERVDEVRLETIVPRHRLAATLQRMEKAHPYEEVAYDLIPLENRRQDIGLGRI.GRLAE.P....LSLEELAHRCKDKL.DC.........AA......LRIV......AA.EQPRPVN.....KVA..VCGGSG [...]
+B3E3Z5_GEOLS/16-365             DIAGIINKKYPFRLA..E.DW.DNV.............................GL...QLG..........DTTK..........................SVTRIMVALDPLPQVITSALD......HN.CDLLVTHHP...L.IF................SPLRQITSS....TSTGNSLLLAAQ.G...........GLALLAMHTNYDIATD.GLNDLLA.DRI.....GLQ.........QTRPLKITSRDELIKLVVFVPEEQLATVRSALLPHAESIGNYQDCSFSTRGEGTFLPLAGAEP........AIGTIGKQEKVAEQRLELLLRRDQLSRAIRTLLAVHPYEEPAFDCYPLLNEAAAKGLGRI.GYLPE.P....VVLADWAGSVAKQL.DC.........ET......LRFV.......G.DTGRSIR.....KIA..LCSGSG [...]
+B5EBN8_GEOBB/8-355              DISGITGKIAPTHLA..E.SW.DNV.............................GL...QLG..........DPSS..........................QVSRIMVALDPGRPAVEAAVE......IG.CQLLITHHP...F.IF................TPLKKISTA....DETGRLAILALK.N...........DLSIISLHTNFDIAPG.GVNDLLA.GLL.....GIQ.........GAQPLRITGGDEYVKMVLFAPSGCEEKLLGALSPFMPHIGNYRDCSYQGEGTGRFTPLPGARP........FVGEVGASHAEPESRLEILLVKERIAAAVAALKGAHPYEEPAYDLYPVLNRGEAYGLGRI.GKLAE.P....VTAGAYALQVKERL.AA.........TG......VRLV.......G.DPARQVK.....KVA..LCGGSG [...]
+A0LHK1_SYNFM/6-257              DVMDWVDAYAPFRFS..A.GW.DRC.............................GL...QVG..........DPEA..........................ELSRLLVALDPGSTTLGEALS......LK.CQCVVTHHP...L.IF................QPLESVRAD....VFPGKLIMTAVR.E...........GISLICAHTNLDAARA.GTNEQLA.RVF.....ALQ.........GVTPLEIDAAWQD............................................................................................................EPRYAGMGCV.GELPA.E....MSLDGLASFAAAAM.GG.........GA......VRVV.......G.EPGRSVR.....RVA..VCTGSG [...]
+Q1ASW8_RUBXD/7-359              QVVEAVERLAPPELA..E.GW.DNC.............................GL...QVG..........DLSS..........................EVSRVLVALTPLPEVFDEAEE......EG.ADFLLLHHP...L.LF................RPVRSLDTS....GYPGDLVARAVR.A...........GITVYAAHTSYDAAPG.GVSEALA.AAL.....GLR.........GPLEV.VSPRGSLRKLVVFVPEEHADGVAEALAGEGAGVIGDYTHCTFRAPGTGTFLGGEASSP.......AVGERGRLERVPEVRLETVVPAHLARRAVAAAKAAHPYEEVALDLYPVDGHPQDCGYGRV.GRLPE.P....LSPEELRERVSEAL.GA.........PA......RLVA......NP.SPGERVE.....RVA..ALGGSG [...]
+Q24T08_DESHY/7-373              LIAQIIERVAPKAWA..E.EW.DNV.............................GL...LVG..........DFAA..........................PVERILVALDATPEVLQEARE......KD.VQLIVAHHP...I.LF................RALKNLRSD....NQSARLPIQMIQ.S...........GIAYYAAHTNLDQSPL.SSSWSLG.KAL.....ELE.........KMEHLKLTHAEKLVKLVTFVPKDHAEAVRQALVNVGVGEGITDGPHASEYAECFFTVVGTGMFRPLNNAHPTIGEVGELTRVEEIRLESILPENRIDRVVKALQKAHPYEEPAYDLIPLYNRGASRGYGVI.GYLKV.P....ESLGSFARKLSAGL.RKLAPASLAEEPK......VRAS.......G.NTEQILR.....KIA..IVNGSG [...]
+Q67RW0_SYMTH/3-355              NIAAYIEELAPLYWA..E.SW.DNV.............................GL...QVG..........DPGA..........................AVQRVLVALELTDPVLEEAES......LG.CDMVVVHHP...P.IF................RPLKALRFD....NRPARRLLRLIR.G...........GIALYAAHTNLDQAAG.MTNDTLA.AAA.....GLT.........EFEVLKQAGEERYVKLVVFVPRGHEDAVRDALAGAGAGHIGNYSHCTFQAPGTGTFLPLEGTNP.......FIGQQGRLERVEELRLETIVPESAAAQAVQAMIAAHPYEEVAYDLYPLANPGKVRGHGRI.GRLAQ.P....VSLAQLAERLKQAL.RT.........PA......VRVV.......G.DPERMVT.....TVA..VGAGAG [...]
+A6NV06_9BACE/2-238              DVYRFLDGKAPFSTQ..M.SF.DNA.............................GF...LVG..........HGDK..........................EVHTILVALDITETVVEEAAQ......AG.AELIVSHHP...V.IF................LPAKHITDQ....DPSGRKLLALLE.Y...........NIAAICAHTNLDIAPG.GVNDALA.QAL.....GLE.........QIGPFS......................................................................................................................EDGLGRT.GVISG.A....LSAEAFAAQVKERL.GA.........NG......VRFV.........DGGRLVC.....KVA..VGGGAC [...]
+A7VVR8_9CLOT/6-241              EIYRYLNEIAPFSTA..M.DF.DNA.............................GF...LVG..........DGKT..........................EVTKALVTLDITAQSVRQARE......KG.AQLIVSHHP...V.IF................HPLKRLLSN........SVPYLLAK.E...........GIGAICAHTNLDMAPG.GVNDCLA.AAL.....ELS.........GRMEVAFYG...................................................................................................................ELPCCVM.GTLAQ.P....MEPKSFAAFVKERL.SC.........EG......IRYV.........AGNRPVR.....KVA..LCSGAG [...]
+Q2S0R3_SALRD/53-405             DITTALEAWAPPGSA..Q.DY.DNV.............................GL...QVG..........DASR..........................SVTSAVLALDATPAVLAEAKA......HD.AELVVTHHP...L.LF................RPLDGVTAD....GYVSNLALQFAE.A...........GIGLYSIHTNLDAAPE.GVSFALA.ERL.....GLT.........DVGFLDG.FADTLYKLAVFVPEDAFDEVRRALADAGAGRIGDYEACAFASEGTGFFKPGAGADP......HIGTAGGDVESAHERKLEVEVARWNLSSVMAALQEAHPYEEVAHDLYPVKQKNSRAGLGAL.GHLEA.P....MPLSAFLDRVATRL.DA.........GS......LRYA.......G.DPDATVE.....RVA..VCGGAG [...]
+A7V376_BACUN/5-351              ELVSALERFAPLPLQ..D.GF.DNA.............................GL...QIG..........LTDA..........................EATGALLCLDVTEAVLDEAIA......LG.YNVVISHHP...L.IF................KGYKSITGR....DYVERCILKAIK.N...........DIVVYAAHTNLDNAPG.GVNFKIA.EKI.....GLK.........NVRILEA.KENALVKLTTFVPTAQAEDVRKALFDAGCGNIGNYDLCSYNMEGEGTFRAREGATP.......YCGAIGELHTEREVRIETIIPAYKKAATVKALLAAHPYEEPVYDIYPLQNSWPQAGAGVI.GELEV.P....ETELEFLKRIKKTF.EV.........GC......LRHN.......K.LLGREIQ.....TVA..LCGGAG [...]
+Q7MTC6_PORGI/5-351              DIIEAIEAVCPRAYQ..E.SY.DNS.............................GV...QVG..........DTKR..........................EATGALLCVDVTEAVLEEAIR......LG.CNLVIAHHP...I.LF................KPLKRLTGS....SYVERCVELAVR.H...........GLVLYAAHTNADNAPQ.GLNALLA.ERF.....GLL.........NTRPLEP.LQGKLLELVTFVPTEYADAVRQALWQAGAGRLGHYDCCSFSHAGTGTFRAAEGANP.......FVGAISELHHEAEERISLVLPAYRQGTVLQALHAAHPYELPAVSLIPLANDHPSAGGGIV.GDLPS.P....ISEREMLLHIKEVF.GL.........KV......LSHS.......A.WRERPLR.....RMA..ICGGSG [...]
+Q11U42_CYTH3/6-352              DLISYLEQIAPLAYQ..E.DY.DNC.............................GL...LVG..........DRQQ..........................TCTGVVVCLDVIEEVVNEAIS......KG.YNLIVAHHP...F.IF................KGVKKITGS....NYVERIIIKAIQ.H...........NIAIYAIHTNLDNIEG.GVSGMLA.QKL.....GLI.........HTEILSP.KKGLLSKLVTFVPTTHTEQLLQGIFSTGAGSIGNYSECSYTVTGTGSFKPNEKANP.......TIGTANQAEQVEENRIEIIYPNHLERQVIRALHAHHPYEVPAYDLIALQNRNTEVGSGFV.GELEK.S....MTKEDFLAFITARL.SL.........TC......IRYT.......T.AFQGEIK.....KVA..LCGGSG [...]
+A6ENK7_9BACT/5-358              EIINELELLAPQAYA..E.GF.DNT.............................GL...LVG..........DANA..........................EVSGILVTLDTLETIVDEAIA......SD.CNLIVSFHP...I.IF................SGLKKITGK....NYVERVVLKAIK.N...........DIAIYAIHTALDNSFN.GVNAGIC.DRL.....QLS.........NRKILIP.QKGTIKKLITYVPTEEATALKQALFNVGAGSIGNYDNCSFSTNGTGTYKGNENSNP.......VVGAKHEFIAADETQISVTFPKHLESIIIKTLHEAHSYEEVAYEVLTLENTNQHIGMGMI.GALKN.P....MEEADFLNYLKKQM.NV.........AV......VRHS.......S.LRNKTIK.....KVA..VLGGSG [...]
+A3ZRR2_9PLAN/11-256             QLCRYLDQFAPVALA..E.SW.DNV.............................GL...LVG..........DRAA..........................AVNKLMTCLTITPEVVEEALA......GG.ANMIVAHHP...L.PF................RALKRITAD....DTVGRMLLQLIA.A...........GVAIYSPHTGFDSAAA.GINQQLA.AGL.....GLT.........DVSPLKPFDNPA..............................................................................................................LAPLGSGRY.GKLTA.P....QTLAQFAAVVREFL.QI.........EY......VQVV.......G.GADQKVT.....QPA..VACGAA [...]
+Q7UDY5_RHOBA/21-282             SICQSLSAIAPLKLA..E.EW.DNV.............................GL...LLG..........DRSA..........................EAHRILTCLTITPAVVEEATE......LA.ANLIVAHHP...L.PF................KPMARITTD....SAASAMVWNLCR.A...........GIAVYSAHTAYDSARL.GINEQWA.NRL.....DLT.........SIKPLTPSLDD................................................................................................................PTLGSGRY.GELSE.P....MTAREFLSFAAKSC.GS.........TR......PRLV.......G.DFDRSIR.....RVA..IGCGSG [...]
+A4ECC5_9ACTN/5-252              ELERALLARYPKADA..E.GW.DHV.............................GL...SVG..........DPAA..........................EIAGVACALDATEANVRRAQD......AG.ANVLLTHHP...V.YI................KAPEAFCPADASRPQCSAALYEAAR.C...........GVSIISLHTNLDCSHE..ARVCLS.ELL.....GAA.........PVSSLEHVDDP................................................................................................................EATGLGAL.ATLND.P....CTLRDLATRAATAFGSD.................PRVW........GEADRPCR.....TVA..ILGGSL [...]
+Q83GL0_TROWT/12-270             VLCATFESMWPSSDA..C.EW.DNV.............................GL...LCG..........FPGL..........................SVERVHFVVDVTSATINEAIK......AG.ADLLVSHHP...L.IF................KPIKKLTCD....TYESFLLSQLIE.S...........KCALFSVHTNADIAPD.GLAQHWS.HLI.....GLR.........NVKPVRY....CPESPS.....................................................................................................VDSTETQYGFGRI.GDLAE.P....VSLYDFAKDLKAFL.PET.......VGG......IMVA.......G.DEAKEIH.....SAA..VVPGAG [...]
+A7BDB0_9ACTO/13-271             DVMALMESWYPAATA..Q.SW.DRV.............................GL...IVG..........DPAA..........................PVRSILLALDPTAAIADQAVAGPSGDGQS.FDMVITHHP...L.LL................RGASFLPVT....DPKGGVVTTLIR.S...........GIALFNAHTNADVACD.GVATALA.DLI.....GLR.........DTTPLEP....CGTD.........................................................................................................AEGHEIGLGRV.GTVDE......TTLGSFADHVASVL.PAG.......PSG......LFVG.......G.DENATVQ.....RVA..VLGGAG [...]
+A0LTB3_ACIC1/18-373             DVVAVLNQLYPPALA..A.EW.DAV.............................GL...VCG..........EPSQ..........................AVRRILFAVDPVPSVAAEAIE......RG.VDLLVTHHP...L.YL................RGTSSVAAT....TAKGRVVHELIR.A...........GIALFTAHTNADHANP.GVSDALA.AAL.....GVT.........ELRPLDPLPAQPIDKLVTFAPADAVERILDVLSAAGAGAIGAYSRCAWTTDGIGTFRPNPGAHP.......TIGTIGRIETVPEVRVEMVLPRARRDAVIAALLAAHPYEEPAYDVIPLAERPGRAGTGRI.GRLDQ.P....ESLADFVDRVRAAL.PAT.......PGG......GRYA.......G.DPDRLVH.....IVA..VCGGAG [...]
+Q6AFH9_LEIXX/10-259             TVREAAETLWPLSGA..E.SW.DAP.............................GL...VCG..........DPAA..........................SVERILLAVDAVAATVEEAIE......TR.SDLLIAHHP...L.LL................RGVTSIAED....RYKGALLAKLIR.G...........GCALLAAHTNVDVVAQ.GTSAVLA.ARL.....GLT.........GTTP.......IVP..........................................................................................................AADGVTGIGRV.GTLSR.P....STLGALARSLAGLL.PPT.......AGG......VRAA.......G.DFHQPVS.....RVA..LCGGAG [...]
+Q6M3K0_CORGL/8-362              DIRRILDEAYPPALA..E.SW.DKV.............................GL...ICG..........DPTE..........................SVKRVGLALDCTQAVADKAVD......MG.LDMLIIHHP...L.LL................RGVTSVAAD....EPKGKVIHTLIR.G...........GVALFSAHTNADSARP.GVNDKLA.ELV.....GIT.........AGRPIATRLLGGMDKWGVHVLPRMQRTLKKMLFDAGAGAIGDYRECAFEIEGTGQFRPVEGANPA....EGDVDKLFKSLELRIEFVAPRNLRARLTSVLREAHPYEEPAFDIVEMHSAESLENATGLGRV.GELPE.P....MRLADFVQQVANNL.PVT.......EWG......VRAT.......G.DPEQMVS.....RVA..VSSGSG [...]
+A8ZUC2_DESOH/8-358              DMVAIMNRLAPPDLA..E.TW.DNC.............................GL...QAG..........CFDQ..........................EVKTVLVALDPSSAVVRDACD......RD.VDLLITHHP...L.FL................SPPRSVDFS....RMPGTAIFLAAT.H...........GLSIFSAHTNLDSAEG.GLNDRCA.ECI.....GLQ.........NVRVLSRAGQTDHVKLAFFVPVEHEARLLEALAATPAGAWGRYSSCSFSVRGTGRFQPLEGAVP......FIGRTGEIVAVEEVRVEAIVPRRDLDGVVRVLKQAHPYETMAYDVFPLAGGIEPLHGLGRI.GEVEP......STLEVFAGRVKQRF.GV.........DR......VGVA.......G.DMAMPVK.....TVA..VCSGAG [...]
+Q6M164_METMP/5-237              EIIKIIEKFAPKELAVPR....DNI.............................GL...QVG.........LNLEK..........................EVETLGIALDPSLEVIKKAES......EN.VDFLFTHHP...I.LK................DPIRNFTGP......IYKKLKILTK.K...........DIPLYSAHTNLDICKN.GLNDCLA.ELY.....NLK.........DVKNLY......................................................................................................................EDGLGRV.GTFDG.......TFEDILKITKENIFAV.........PQ......TVVP.......KSIYDKKQL.....KVA..VLSGYG [...]
+A3MU59_PYRCJ/10-266             DVVEVLESIAPPSLA..MEEHRNRL.............................GL...VVGPLHG..LEEV..............................AVERIGFSLNPSIRAIRAAVE......RG.AQLLVVHHE...YFLF...................PRAEDSAPVIYSYRDRVLELLRRH...........RLYLYAAHTNWDFAEG.GNFDTLA.RLL.....GLE..........ARPLPLKLGN................................................................................................................LVLKKAVLAAELPR.P....MKLRELAQYVKERL..............GL..RHIAYV........DGGREEVR.....RVA..LSTGGG [...]
+Q8TZC0_METKA/12-224             GVLEVLEGLAPFDLA..V.EG.DEV.............................GL...VAG..........DPSD..........................SVDRVVVCLDLTPQLVRRLSP.........ETLVISHHP.........................................VPGPLLERV...........RSPVIVFHSNWDAARA...AEALA.EWL.....GLE.........DVRKPDPLAAE.........................................................................................................................GRFDG.......TLEDLLSRVEDAL.NP.........PE......IRVV.........ATKNRIH.....RVI..VVSGFG [...]
+A5UKQ3_METS3/5-218              EIIEFIDKNIPKNLA..L.EN.DEI.............................GFKKEYNL............NQ..........................DISSIKIFMDLYPEFDTQKTN..........TLILTHHP...P.LF...............N..........................P...........KTPTYTIHSNWDIING.GANEALA.ETL.....KLN.........VISPFDK.....................................................................................................................TTNIGRI.CKTDK.......SFGDFEKDILDSF............NE......IRIV......NKPSSSKKLN.....KIG..IVSGFG [...]
+Q2FPY1_METHJ/5-230              ELFSRFEQDIPPSYA..V.PG.DQN.............................GY..................IGTLD...................PHIFDVQKILVLMDYILPESPNIDY.......SLYDLLVLHHP.......................PPIS......................P...........VIPTYVIHSNWDIVTG.GACDALA.DAL.....NIT.........SFDVLDE.....................................................................................................................STGIGRI.GGIDR.ETEDIITQGRFIHEIMATL.RV.........HD......IRTV.......NCNRFQPVG.....TIC..VISGFG [...]
+Y1146_METTH/8-215               SLIELMDRVAPPELA..L.PG.DRI.............................GYHGPEI.........................................EVEAVLVLMDYLEDVAVDG...........YDLLVLHHP.......................PEVE......................P...........PIPYLTVHSNWDVADG.GACDALA.DAL.....GLD.........VESFLDP.....................................................................................................................DTGVDRI.CRADL.......SLEELLE.RTGVL.NP.........ET......LRVV.........NPREYVD.....RVA..VVSGFG [...]
+Q8TW44_METKA/6-234              EVIDFVEELAPPDLA..E.DW.DNP.............................GI...QVCP........PGGLD.........................RKAERVLVALDAT.HALERAGD.........ADLVLTHHP...L.LF................RPPRRIGGR......WYRVLRAVLE.A...........DAVFYAAHTNLDRAEG.GVADTLA.RRL.....NLR....................VE............................................................................................................REACDGFGRL.CEVPG.......SEEELLNALRNLS.PL.................TTVY.........GDWEGVS.....RVL..VVPGAA [...]
+Q0W3L4_UNCMA/5-231              DLVKLLEAIAPPDLA..E.DF.DHGK...........................IGL...IVP...........GYH..........................RVNKVATALDPTPFVIERAID......MH.AEAIVVHHT...L.IW................NPVTALTPD......MAGVLKLLLE.N...........DISLYSMHTNYDRAPG.GVNDTLA.DLL.....GLK.........DTVAVDLCRA..........................................................................................................................GVVET......QSLADFAASASRALKVD.................VEVV........GRLNKDVC.....TIV..TAAGSA [...]
+Q12Z61_METBU/5-232              KVVETLEEIAPPELA..E.DF.DIDR...........................IGL...TLD...........LDN..........................DIKRIAVALDPTEYVLERAAQ......IG.ADMLITHHT...L.IF................HSVNLISKE......LAGLLKIAFD.N...........EISLYSMHTNYDSAKG.GVNDVLA.QRL.....GLN.........DVY.........................................................................................................................EVGMGRI.GTIDE......CPLDVFIDHVAKSLNTH.................LQYV.........GEKDTIK.....KVM..VFGGSG [...]
+A0ZGU3_NODSP/5-248              DLITWFEEWANPAWC..E.SW.DNC.............................GW...QIQ.........PGVLS..........................EKARVLVCLTPTLAVMQEAIA......LH.ANLIFAHHP...L.IF................SPLKSLCSG....EAIAEMARLAFT.H...........NIGIYSAHTNFDQVQD.GTADVLA.QIL.....DLQ.........SATPIVPTQA..................................................................................................................GLGYGRV.GLLEP.C....LTLQELLAKIHTRL.AP.........PH......LIFS......PTADLQQNIS.....RVA..VLGGSG [...]
+Q310X0_DESDG/5-312              DFIHMIERIAPVCGA..A.EW.DNS.............................GV...QVA..........SRCT..........................EIHSVAVALDPSEANIEKAVS......QG.ADFFLAHHP...L.AF.................KPQPLSGN....DSYFRSVSQLIT.N...........DICLYSAHTSLDANPA.GPVGWLA.ESL.....KLQ.........NCKTLEPTAASMQHRIIAPSAASGSIPAVIAGSIRCRHIQGIGYEF..........................................EFDTEDIVYETAADHIRQVLPAGTSLLKAEERAGRRELGLGIS.GSLPC.R....LSWHEFVQLLEKSVERT.................FWTT.......CGPVPETVE.....TVA..YCTGSG [...]
+Q1MR73_LAWIP/5-246              NIINIIEEVAPLSVA..A.TW.DNS.............................GV...QVA..........SSQD..........................EIFCLAVCLDPTPESVYKASE......LG.ANMILSHHP...LGLR................PRFPTIIDN......YYSVLKLLLS.K...........NILLYSAHTSLDANLY.GPASWLA.EVL.....ELH.........ECSVLESIHTTNG............................................................................................................VSSQYGFGRI.GHFSS.P....VPVENFCQRIYPLIGEA.................VPRL.......IGELPRQIY.....RVA..FCPGAG [...]
+A1VDX4_DESVV/5-310              RIIETIEKTALPAAA..A.PW.DHC.............................GV...QVA..........AARD..........................DVHALAVCLDPTPDNVVKAAA......LG.ADFVLAHHP.....LL................LQPRYLDRV....DAHHEVVRTLLT.R...........DIWLYGAHTSLDANPA.GPVAWFA.DEL.....ALE.........GRRVLEPTFTRQRITHRIVGMGAHLAAVAALPAVLKARAGDDDLV............................................VSCNAEDWAQLEVALRALPDGDRPMLPMAPEYPAEVWGIGII.GDLPA.P....LAWDDFIRRVGQLV.PL.........DG......ATFC........GSPPPVIS.....RVG..YCTGSG [...]
+Q7MQP7_WOLSU/6-230              EVLGFLEEISPLALQ..E.PW.DNS.............................GL...LVG..........SGGE..........................EVNSIYVALEATLKLVESLPP.........HSLLITHHP...L.LF................KPLKALLWE....EYPANILRALIQ.K...........NLSLIALHTNFDQTH...LGRYVASEVL.....GFS........G............................................................................................................................VEMEGYV.GYFPL.K....MSTHELASHLKRAL.GL.........ER......IATV.........GQERYLE.....RGA..IITGSG [...]
+Q7VIG7_HELHP/17-261             EIYELCNTISPFNTQ..E.SW.DKS.............................GL...NLG..........SFHN..........................EYTDIVLCLEVNLAIALSLKP.........NTLLITHHP...L.FF................NPTAQMITD....TYPHNIAAILIR.K...........NCSLISLHTNFDKSH...LNTYLTHQIL.................QWHHFVPS....................................................................................................................EDGLLMS.GKIPP......ISLQKLAQDVCKKL.NA.........PSVSFVQGDDITFLNQESQASHTNDAIT.....EAY..VVCGSG [...]
+Y959_HELPY/6-231                EVLVVLNRLSPFELQ..E.SW.DNS.............................GL...NVG..........SENS..........................EFSEIVACLEITLKIALNAPQ.........NALIITHHP...L.IF................KPLKTLNDE....IYPGNILKILIQ.K...........NVSVISMHTNFDKTH...LNKHFAHALLE..FDGLV.....................................................................................................................................EKGLMLV.KENAN......IEFDALVKKIKSSL.GV.........GS......LACV.........KSSQTIK.....DLA..FVCGSG [...]
+A8EW77_ARCB4/5-232              EIYDVLNEISPFELQ..E.KW.DNS.............................GI...LVG..........SFED..........................EIENVYISMDLDLELAKDLKP.........NSLIITHHP...L.IF................SGIKRVNFD....TYSTKILKELIK.K...........DISLISMHTNIDKTH...LNKYVIEKIL.....GFK........I............................................................................................................................ENSSEFI.SYCNV.N....MNFDELVKYVSNKL.NL.........KT......TKVV.........RSKEFIK.....DIA..VVTGSA [...]
+Q30TF6_SULDN/5-228              QIYDFLDSLSPFELQ..E.KW.DNS.............................GL...LVG..........DFNQ..........................DVKKIVLSIDVDESLIDSMEE.........GTLLITHHP...I.IF................GGLKQLEFN....KYPANLLQKMIQ.K...........NISNISMHTNFDQTH...LNEYVATEIL.....GYK........I............................................................................................................................AQKDGFV.AYLDI.D....EDFDFFALKVASAF.SL.........PH......AKCV.........KSSQRVK.....RVA..LTTGSG [...]
+A7GZB8_CAMC5/5-228              EIYKILDAIAPFDIQ..E.SW.DNS.............................GL...LVG..........SLES..........................EFERIYLSLDLSREILENALP.........NSLFITHHP...L.IF................KGLKSLNFS....YYPSNLIRKMIE.K...........NISLISMHTNADLAF...LNEHFTREIL.....GFE........P............................................................................................................................SEKDGFL.MYCEV.K....FSFDELACFLKEKL.RV.........ET......IRAV.........HAKDEIS.....RIC..VCTGSG [...]
+A7SAJ3_NEMVE/5-336              EVVSNLESWAPTSLA..E.KW.DNV.............................GL...LVE.........PSGQH..........................NVRSILLTNDLTEKVLQEAIE......KR.ANMIISYHP...P.IF................VPLKRLTSK....SFKERIIVKAIE.E...........RIAIYSPHTAFDAVFG.GVNDWLA.KGL.....GRG.........SVDPITYSMEACVKGCDYNVTAIAPSTEAAEKINSQINSLGGIGSNSIGKTERF...........................GDPALPKIVTHCSGDTLSAVMQILQSYTIYYLEIYQLAKKPIPGTGSGRL.CTLDT.P....VTLPDIIHRIKKHL.QL.........PH......LRVAY....APSKAKDTLLS.....TVA..LCAGSG [...]
+Q4CW43_TRYCR/7-273              RVMVAMGEIAPLWLA..DQSW.DNV.............................GL...LVE.........SPDSN..........................NSGIVLLTVDLTPEVMEECLR......HN.VEVIVAYHP...P.IF................TAFKRLTLA....DPKQKIILQTVR.H...........GASIYSPHTSLDAAKG.GINDWLA.SIVDS.SG............ACRPIQPCECVNRHGNGGF.................................................................................................GGNDNDELSVGIGRL.VALHQ.P....KTMATLVNDIKTGL.RI.........PT......VRVSL....PHGWSGNTSVH.....SVA..ICAGSG [...]
+Q5KCX5_CRYNE/12-280             LIKRVWERIAPLQLA..ERSW.DNV.............................GP...IIEA........PYPNP..........................SHRQVLLTIDLTPSVCAEALK......HPSLSLIVSYHP...P.IF................RGLKSLTLS....DPLQASLLKLSA.K...........GISVFAPHTSLDATPN.GINTWLI.KPFIPISISHD.........PIIPSDPLESF................................................................................................................EGAGMGRI.AKLSE.P....LDIRQAIKMVKDHL.SL.........DF......VQLAE.....PQPDVRKPIK.....SVA..VCAGSG [...]
+NIF3_SCHPO/9-265                KLKKVVESIYNPKLA..D.SW.DNT.............................GL...LLEA........PFPRT..........................NASSVLLTIDLTEKVAEEAIS......NKLVSSIVAYHP...I.IF................RGLKAITME....DPQQRSLLKLAA.E...........GIHVYSPHTAVDAAVD.GVNDWLA.QGIAGGRNNIK.........SVVPTQQNSVMA...............................................................................................................EAEGYGRI.CELKI.P....TTLRELVQRAKELT.GL.........QY......VQVC......APNGLDSHIS.....KVS..LCAGSG [...]
+Q7S5H9_NEUCR/62-330             RVVAAMRALYPEQLA..DKAW.DNV.............................GL...LQENI......AVAGQD..........................VPQTVLLTNDLTVAVAEEAIR......KR.ASVIVSYHP...F.IF................RGLKSVTLA....DPQQRILLQLAQ.A...........NIAVYSPHTAVDAAPG.GMNDWLA.DMLDGHGVETKR.......SICQPISSSITASLP..........................................................................................................PAFFNSGYGRL.VELGH.P....VYLGNIIKAYAEGLGGL.........NH......IMIAA.....PKDKKVTTIR.....SVG..ICAGSG [...]
+A6SM83_BOTFB/24-302             TVVLTTRGVSFVTYL..WGSFTDNI.............................QV...LLEA........PHREN.........................HLKDSVLLTVDLTKGVADEAIR......RK.DSIIITYHP...I.IF................RGLKAVTLA....NSQQSSLLRLAQ.E...........GISVYSPHTAVDAAPE.GLNDWLA.DIV.................TNRPLKKNQSVDTESIDHERSI..........................................................................................VNSIKDIPDGFEGAGYGRI.VRFKQ.P....QKLGDLVARMQSSL............QIGGRISGLSVAVPQSIPRGKKSSIEIS.....SIG..ICAGSG [...]
+Q5B6Z5_EMENI/15-342             AVVNSMRKLYPESLA..DKSF.DNT.............................GL...LLEA.......PFNPTR.........................RQKNSVLLTIDLTKAVADEAIA......RK.DSVVVAYHP...I.IF................RGLKSLTFN....DPQQQSLLRLAA.E...........GISVYSPHTAVDATPG.GMGDWLC.DVVTGATTPSSS.......SSVADLESPPSALYSAPTYPKPGPVSPSTSSK........................................................................IIPHTRSTIHPSPAPVPSGLEDAGMGRL.VTFAE.P....QPLASVIDNIASGVGYP.........GG......IPIAIP...QSASVEDIKIR.....TVG..VCPGSG [...]
+Q4KMJ5_DANRE/5-334              GVLEVLEQLAPLSLA..E.SW.DNV.............................GL...LVE.........PSRPR..........................PIKTILLTNDLTAAVMDEAVG......MK.CDLIVSYHP...P.LF................RPFKRLLQK....DWKQRLAVRAIE.N...........GIGIFSPHTSWDSVEG.GVNDWLV.GGM.....GRG.........KVSVLSQAVSSGAQKHRVEFSCMDDGEVNSLLEQLRHTEGSETFQCTRINSES.............................GGQQVNLTCGSSALTGAVQILLSHPHASKSLNITQVQQPPLLGCGQGRL.SVLEE.P....VSVSTAVQKMKTHL.GL.........PH......LRLAL....GDQQTLDSMVK.....TVA..VCAGSG [...]
+A4IGP2_XENTR/5-334              SVVSRLNVLTPPALA..E.GW.DNV.............................GL...LVE.........PSPPH..........................QVHKLLLTNDLTEDVLDEAID......TG.ANMILSYHP...P.VF................KALKRITQK....SWKERLVVKALE.K...........HLAVYSPHTSCDALAN.GVNDWLA.RAL.....GPS.........KSVPLRASTSLTYPGGVGHLLEFRLDPAGNIMSRLNGIQGVSVCTSTARHDGD.............................NGTRVSLSCSQNALVEVLSILSEEPQVYNSLQLLTLQKPPLVDTGMGRL.CTLSE.P....VSIAAALERIKKHL.HL.........PH......LRLAL....GRGRTLESSVS.....MAA..VCAGSG [...]
+Q6P1B7_MOUSE/31-363             ALLSSLNDFASLSFA..E.SW.DNV.............................GL...LVE.........PSPPH..........................TVNTLFLTNDLTEEVMDEALQ......KK.ADFILSYHP...P.IF................RPMKHITWK....TWKECLVIRALE.N...........RVAVYSPHTAYDAAPQ.GVNSWLA.KGL.....GTC.........TTRPIHPSRAPDYPTEGAHRLEFSVNRSQDLDKVMSTLRGVGGVSVTSFPARCD..........................GEEQTRISLNCTQKTLMQVLAFLSQDRQLYQKTEILSLEKPLLLHTGMGRL.CTLDE.S....VSLAIMIERIKTHL.KL.........SH......LRLAL....GVGRTLESQVK.....VVA..LCAGSG [...]
+NIF3L_DICDI/12-341              EVLKKLGELIPLNLA..E.KW.DNV.............................GL...LVEP........SNTDS.........................MDIERIFLTNDLTEPVLQEAIN......EK.ASFIISYHP...P.LF................NQFKTVNQK....SISQRIAIKSIE.N...........RIPIYSPHSALDSCDG.GLNDWIS.NALIKLNSGKG.........RSKPITPYQESLKSTQKISIYLHTNQPLTAEILKQLELNSNFQFYSTDK.....................................IELSCDQQQLLILINLIKSFSNEIKNWDIINQEKVLSLNNGSGKL.VTLDDDG....IDIDVIVKGVKELF.NI.........EY......VRIGR.....PLSGESKKIK.....TIS..LCAGSG [...]
+Q8SV52_ENCCU/5-229              EVSKAIDRFASLRRA..KTDW.DNV.............................GV...IVD...........SGT..........................QDKKILLTIDLTEPVLEECIH......LG.VKNVVAYHP...I.IF................KAVKKLGSK.......ESIVIGCIK.N...........GINVFTPHSALDP....LMNTYVY.NMI.................NSGPFFYKKN..........................................................................................................................CGPNT......STIGNAIRILKERS.GL.........ES......FRIC........LAREHTME.....SVPEFMHVGVG [...]
+Q6FQE2_CANGA/13-283             KALEVIRAAFPEKYA..DKSF.DNT.............................GL...LIDCSS....NEESHAN..........................NAVKMLLTVDLTSRVADEAVK......QG.CNLILAYHP...F.IF................PSWNRLNPQ...TNVQHASAIKLIQ.N...........NISVYSPHTAVDAVDG.GVNDWLV.ESLVPKTVNIT.........TKECIESTANTAP............................................................................................................HDPITGYGRY.FKLDK.A....VTLQEVVDVLKKNT.GL.........SH......VQIASLP.YEISGNLHHEVQ.....TVA..VCAGSG [...]
+A3LS90_PICST/8-261              RAVKAVQKFYPIALA..DKTW.DNT.............................GL...LLDSS......SDNIKS..........................DQLNILLTIDLTQSVAEEAVK......KS.ANFIVAYHP...F.IF................RGLKSITTK....DPQQRSLIKLIQ.N...........NISVYSPHTAVDSAYG.GVNDYLV.DGITY.GFDIQ.........SREAIEKDENA................................................................................................................QDCGMGRI.VTLKK.P....APLSKLIGNVKCSL.GL.........KY......VQIAR....GSGTSKDHEVS.....TIA..ICAGAG [...]
+Q86F61_SCHJA/5-335              KIIQLLDMYCLPHLA..E.KW.DNV.............................GL...LIE.........PSPPH..........................RVNKIFITNDLTEQVLDEAIS......QK.SGLIVSYHP...P.IF................SSLKKLTQQ....HWKQRVVIRCIE.N...........KIAVFSPHTGLDAKFG.GINDWLL.EPL.....AVR.........EKKSLTRSPAINQATSRLNVVMNQNFGDFVMSTGVGVCTTNIMSDAG.........................................LTAVVTCAESDLKRVLDMAEALQIFVVSKDTIQQTREEGCGRL.VTLQF.P....VHLKAVIAAYKKFL.NV.........EH......LTVAP....GLGKTLDCSVQ.....TVA..VCAGSG [...]
+Q14P57_SPICI/5-233              KLYQEIETDFSLKVA..C.KW.DYS.............................GH...QYG............NKN........................HFVAKIMVCLDLTSEVITAAIA......KQ.INVIITHHP...F.CF................GKKKRIQRI....PYKQTIIELLNK.H...........QIAVYALHTNYD.....GLMNELILQEL.....NTQ.........KIVAFDDNL...........................................................................................................................TKIGHIS....LTADEIIMKLKAIF.KI.........TT......VQHN.......LPKLDQPIK.....TVA..LAAGAA [...]
+Q2SRY9_MYCCT/5-244              NIISYLNQLFNPKKA..S.NW.DHV.............................GF...QFE............YKKL.....................NNINISKVLVCLDLTNDCLEFAIS......NQ.IQLIITRHP...F.IF................NELKLEKKN....PNKKQMIKKLNK.H...........KILVFSIHTNYDSSIKQNLLEILN.KKL.................KINSFKKYGKDKE............................................................................................................SNL........FYLDQ.K....ISVNDLINDLKEIF.SL.........NQ......IRLN......SNISLDTKIK.....NFY..LTSGSG [...]
+Q6F1J4_MESFL/5-244              KLIKYLEKKFPANKA..Y.EW.DNV.............................GI...QKF............NKKVV...................NFDKEISNVLITMDLNNESLKQMEN......SK.IDFIITRHP...F.IF................NELKKEKEN....PFKKELIKYLTK.E...........DIYVFSIHTNYDICGYKAFIDLLT.NAF.................KIKSAKFPLFNKE............................................................................................................YLE........VNLNS.D....ISKDDLIQNLKNVF.QV.........KT......IQIN........SDENFKTS.....KFL..INQGSG [...]
+Q8EUT6_MYCPE/5-240              DFYYLLDSIYKIDSQ..D.EW.DNS.............................GI......Y.......EFGSDN..........................VLINPILSLDINLDVVDYAIE......NN.SNLILSHHP...V.FI................DPLDQKKKH......IKSIFQKLEE.H...........NISVISLHTCFDKNPK.GTTYQII.KRL.................KGFNISRSKKSPY.............................................................................................................LF........FGVSNSK....LTLADLVKKIKNNL.EI.........EY......VNVL.......SSKLDKNNNKPKHIKIA..AVGGSG [...]
+Q4A5V5_MYCS5/5-245              ELASFLEYLYPKDNA..E.EW.DPV.............................GF...SLS............YKN........................MLVRGVITCLDVTKEIVNFAIE......NN.YNFIVSHHP...FLFY...................EDLNEELNTYFYKKEIYELCKK.H...........KISLFSLHTNYDSDKN.GTSYQVA.KFL.....NLF.........DSPAHKELKTVSK............................................................................................................YAY........CFKDN......LSVSELAKAAKNSY.KI.........DS......LATN.......VSDLDAKFN.....SFC..IIAGSG [...]
+Q6KI02_MYCMO/6-252              DLINYLESFYPFEKA..E.LW.DKV.............................GFSFLSKN............LK..........................QIKKILICLDFDFEAFEKVMK......ND.IDLIITHHP...F.YF..................EDTLEEEFLKNPYKSKIESVFKKLN...........NKSIYTLHTNFDNHFE.GTSYLIA.EQL.................GYTNFLKTNNN................................................................................................................Q........AVITKVN....ENFKDIVDKIKSSF.NF.........TY......VISN.......LKETDEIVKTKKTWKIA..IFAGAG [...]
+A5IY53_MYCAP/5-248              KITNYLIKQYPLENK..E.EW.DPA.............................GW...SLK.........FNLSE..........................KINGIVVALDLTSEILEKALC......LN.ANLIITHHP...FKFY...................KTWEEEFINAPYKSQILKTLKQ.K...........RINVLCLHTNYDNHKF.GTSFQIA.KML.....DLE........QNIAHFENSNYP.........................................................................................................................IAIKNVN....FKFKELVLLINQKL.NL.........HQ......MRTNI....DFDESKNKIIK.....NIA..VFSGSG [...]
+Q601Y7_MYCH2/5-239              EVGDFLLEKFPLQNC..Q.NW.DKC.............................GWQFLFDT........................................KFLGATICLDLTNDVLDFALK......NS.SNLIITHHP...FFFY...................QTKKEEYAYSPYKKKLTFLLKK.K...........LISVISLHTNFDSKEN.QTAFSII.KQCGFDFEKIE.........KIDEF...............................................................................................................................NILFQTS....ADFNEILKKISLNT.NL.........TT......FRSN........VEKNFFPK.....KVA..ILPGSG [...]
+Y351_UREPA/10-250               DILNFLTKKYDLSKA..E.AW.DKN.............................G.....LFF........D..EQ.........................QTINNVQIALDITDDVVNDAIL......NN.ANLIISHHP...L.FT................N..QDSNDEV.NYFVNIDLIEKIKK.N...........KISLIHLHTAFDASAN.GMSMQMA.KRL.....GL..............LNLKQDEQNP..........................................................................................................YLVV........GELKL.G....VSVDYISRIIKQKF.LS.........PI......IKYN......NVFRLETNLK.....KIG..IIGGSG [...]
+Q7NB92_MYCGA/5-241              RITDWVLKEFPLRNQ..L.SF.DNA.............................KLINHKNL............TN..........................QLTKVLVCADYDRFNFELAKK......HN.ANLIISHHP.....MF................INHQDLKSD....AFIAKAYQDFYQ.N...........NRSFLVLHTAYDFSPN.GAHSYFF.KLL.................KIKKFDPNPINHY.............................................................................................................YR........FEID.......CSLEQLISDLKKI.............EYIDQVQYLSTA.........KFKKKLK.....KGL..ICLGSG [...]
+Q3F0L5_BACTI/6-294              EIVSKLDIELDIKSF....GK.DSAFSQFIPMVYEPLKFDWKSVFEKDFVELFNGL...MLK............GD.........................ANVKKIFLAVFPTDEVLERFIE.....ESNSGDLLFMHHP...L.LMEC...........GDPKGVWGKGFV....PIKEKYIKQIKE.K...........KLSFYTCHVPMDYHANLGTSVAIA.KQL.....NAE.........IIDGFLTSSIN.................................................................................................................NEDLVLI.CNIEE......KSTSELTSHLKEIF..D.................IPYVD.....FEGKNINNVK.....KIA..IVAGCG [...]
+Q0SN38_BORAP/5-237              DLFFKLNSIFDIKKYEHV.DK.NLN.............................GL...QVGD........L..SA..........................EVNKVAFAVDASYSTLKEAKG.........NDFLITHHG...I.FW................SKKERIISN......MYNKVKFLIE.N...........NLALYSVHLPMDAHSVYSHSKVFS.DFL.....GLT.........NPFAFANYE...................................................................................................................GFNLGII.ADSA.......FSFSE....ILEKI.............KKKNKHILFSK.........KFKEKVN.....KVA..IVSGSG [...]
+A9B0A0_HERA2/5-242              ELVRYLDSYLQTAKF..R.DA.SLN.............................GL...QVE...........GRD..........................EVKTIALAVDASLQAIEAAIA......GN.ADLLLTHHG...L.FW................GNAQPLVGW......LGRRIKRLMA.A...........DCSLYTSHLPLDAHGEVGNNAQLL.KLL.....GWE.........MVQPFGDYR...................................................................................................................GQMLGFI.GQLTT.P....LSIEGLVAHVKSTL.AI.........PEN....EIKVW.......G.QTSRGIK.....RVG..VVSGDG [...]
+Q1IWV8_DEIGD/21-255             TLVRWLNEYLNIGAY..P.DP.SLN.............................GL...QI.............EGT........................DTIRRVAASVDTSIKTLQDAAD......SG.ADLLLVHHG...L.FW................GKPLALTGP......HRTRVRTALM.A...........DLNLYAAHIPLDAHPEVGNNAMMA.RAL.....SLQ.........SLRPFGDWQ...................................................................................................................GHKIGLA.GELPF.S....QSLQD....FADRI............QKLTGEICLVHA.........GGQPQVQ.....RLG..IVSGSG [...]
+Q73KL0_TREDE/5-248              ELDLYFTELLNIDAFAAQ.DL.SQN.............................GV...QVQ............NSG........................KEIKKVAFAVDACLQSIKEAAE......RK.ADMLFVHHG...L.FW................SRSLRIMGN......HYHRIKALLD.N...........DIVLYAVHLPLDAHPLYGNNIGLA.RRL.....ELE.........NLKEFGMYR...................................................................................................................GLNIGFY.GSLPL.K....EGSEE.GLELDEIINKL.........FPQGEKPANILP.........FGPKKIK.....TIG..IISGGA [...]
+Q2LUC1_SYNAS/5-241              RITDYIDSYLDIHSY..H.DD.SAN.............................GL...QV.............ENT........................GNVKKIGLAVDACHESISRACR......AG.CDLLIVHHG...L.FW................GSQQLIVDN......HYQRIRALIM.A...........DLALYAAHIPLDAHPIIGHNRVIA.EHL.....DLE.........DIEPFALHH...................................................................................................................GKHIGVK.GRFRQ.S....GSRAE....AAIWI............EKELGACRGLLE.........FGPETIS.....TVA..VVAGSA [...]
+Y1777_ARCFU/5-234               EVVRFLDDFLEINSY..Q.DV.SNN.............................GL...QV.............EGS........................EEVKKVAFAVDASMESFRAAKA......VN.ADMLVVHHG...L.IW................GGIGYIRGI......VKRRIEFLLR.S...........NLSLYAAHLPLDAHREVGNNAVIL.RKI.....GAE.........PQEEFGEYK...................................................................................................................GVKIGFS.AKLEK.A....TAVGE....IAEKL..............G...PAMVLP.........FGEERVR.....KVA..AVSGKG [...]
+Y1424_PYRAB/5-239               EIVSFLDEYLSISSY..P.DK.SSN.............................GL...QV.............EGK........................EEVERIAFAVDACLDTIAKARA......FN.ADMLIVHHG...I.IW................GGVSYVKGL......FAKRLKALLS.S...........EMNLYVAHIPLDVHPEVGNNVQLL.KLL.....NLE.........PLEPFGEYK...................................................................................................................GIKIGYI.GEFEE.P....KPLPM....IAQIL..A.........EKLPVDYVRSYE.........FGLQEIK.....RVA..VVSGAG [...]
+Y1766_HALSA/5-242               DVTSRYNDRLRVTDY..A.DA.ATN.............................GL...QVG............PGD........................RSVERIAFAVDAAAATISDAVE......WG.ADLLVVHHG...V.AW................GGLDAVTGR......EYDRIAALVD.G...........ECALYAAHLPLDGHPELGNAAHVA.DVL.....GLT.........QRSPFGDHS...................................................................................................................GEQIGLQ.GQLPD.P....TSAPA....LSKSLAAA.........LPTGDQPVQVLD.........VGPAELT.....DVA..VVTGSG [...]
+A8B7G6_GIALA/7-257              QLLQFLSEVYEEQ....P.DG.QYN.............................GL...QV.............EGR........................KEIRTLVTGVSLCGDLIAEAVH......RN.ADAILVHHG...F.FG................KSFLRVTDS......IKKRLTPLLK.H...........DINLFAYHLPMDAHPIIGHNAQLC.KAA.....GLLLEKFYSCGCYCENPGNLSG..................................................................................................................LEIIRRL.SEFCD.RRAYEVDTRTP...QQNDLCSS.........TFYGTRVWPFNS.......SFAINSPPK.....RVY..ICSGGS [...]
+A5EYD5_DICNV/5-236              FLVSHLNELLQIRKF..R.DY.APN.............................GL...QI.............AGR........................AEIQTVVTAVSASQAAIDFAVA......NN.ADALLVHHG...Y.FW...............KGEAAELVGV......KRKRIATLLH.H...........EINLLAYHLPLDQHATLGNNALFG.QAL.................SAHNISQSS...................................................................................................................FDDFLWQ.GDIET......VSASQ....WIAAV............EKILQRSIIAVG.........NTQKMIQ.....KIA..WCTGAA [...]
+Q5WY60_LEGPL/6-241              ELSLFLLDFLNCSQY..Q.DY.APN.............................GI...QV.............EGK........................DKIKRICTAVSASEDVISQAIE......QQ.ADALLVHHG...Y.FW...............KGENPVISGM......KRRRIAKLLG.H...........NMNLFAYHLPLDCHPELGNNASLA.NLL.....LIE.........SPEMHKVNN...................................................................................................................TANLLWS.GKLSK.A....MNSEQ....FSSFL............ERKLGRYPVHIA.........GNEKMIH.....SIA..WCTGAA [...]
+Y291_BUCAP/5-236                LLEKIINKKLSSDQY..S.DV.VPN.............................GL...QI.............EGE........................KIIKKIITGVTACQELLDKALS......YG.ANAIIVHHG...Y.FW...............KNESQCIHNM......TRKRLTTILS.N...........NINLYSWHIPLDIHPKLGNNAQIA.KKL.................NIRIKGY.....................................................................................................................ILPYLFW.GTLEE.N....INAFD....FSKKI............EKKYEKKPIHIY........ANAPIYIS.....RIA..WCSGRG [...]
+Q1Z5P6_PHOPR/5-241              KLEAALNELLSPHLI..K.DY.CPN.............................GL...QV.............EGK........................TQVKKIITGVTACQALIERAIE......EK.ADALLVHHG...F.FW...............KGEPAEIRGM......KFRRIKALIE.N...........GINLYAYHLPLDVHPELGNNAKLA.QML.....ELE.........VIGGLEDGN...................................................................................................................PRSVAMY.GQLDK.T....ITGAE....LASRL............SIGLHREPLHIG........DNAPADIK.....TVG..WCTGGG [...]
+Q6FCJ5_ACIAD/6-241              EIVQWCDQTLSSNQF..K.DY.APN.............................GL...QI.............EGA........................SEVNHILCAVTASDAAIDAAIE......AG.ANVLLVHHG...Y.FW...............KGEPYPITGM......RGRRIKKLIQ.H...........NISLLAYHLPLDAHPSLGNNAAIA.DLL.....ELK.........HIEALDPNE...................................................................................................................KFPIGNI.GDLKQ.A....LSPEA....FKAKL............QDVFDFNIIHLP.........AQVESIQ.....KVG..FCTGGA [...]
+A2S764_BURM9/5-237              ELELYLNNTLEIGRF..K.DY.SPN.............................GL...QV.............EGR........................RKIEKIATGVTASLAFLDRALE......WG.ADAVLVHHG...Y.FW...............RHEAPQITGR......KYQRLKRLLA.N...........DLNLFAFHLPLDAHPEFGNNAQLG.ERL.....GLI.........GDARFG......................................................................................................................DQDLGWL.ATLPM.P....VSLEH....FTAKV............ENTLGRAPLVLG.........DLDQQLR.....RVA..WCTGGA [...]
+A5CVR4_VESOH/6-235              TLSEYCHDYLDVDTF..D.DY.CPN.............................GL...QI.............EGR........................QQIRKIIAGVSVNQDLIERVID......EK.ADALFVHHG...L.FW...............QNESLVITGI......KKNRIKILLE.K...........NINLFAYHLPLDAHLIVGNNIQLA.MHL.....NIV.........NPTPI.......................................................................................................................GDTLVWQ.GEVK.......LSLIE....VSQLV............QDITQRIPLVFG.........DLNQQIK.....KIA..WCTGDA [...]
+Q21U81_RHOFD/6-241              QLLQAFDALLQPERF..R.DY.GPN.............................GL...QV.............EGT........................DTVRKIVSGVTASRALIEAAIA......AQ.ADTIFVHHG...L.FW...............RAQDGRITGW......LKARLALLLA.A...........DINLFAYHLPLDAHAELGNNAQLG.LKL.....GLR.........ALTRFG......................................................................................................................EQELGFL.GEPMASAS..FASAET....LAQHI............EYVLNRPVALVG.........PAHSAIK.....KVA..WCSGGG [...]
+A6GMA8_9BURK/8-242              VLEHDLRELLDQARM..S.DY.CPN.............................GL...QL.............EGK........................PRIQRLLTGVTASRALIELAAE......LN.ADAILVHHG...L.MW...............KGDPQVVTGF......RKERLQLALA.H...........DLNVFAYHLPLDKHPELGNNAQLG.NML.....GWP.........STRVVG......................................................................................................................DKGLVHL.GVLPT.P....QPLSA....LVRQV............SDVLGHHVQVEG.......NSDPERSVA.....TVA..WCTGGA [...]
+A0L3K9_MAGSM/6-241              EIETHLRNILQCDRI..D.DY.CPN.............................GV...QV.............RGG........................HNITRVVSGVTACMALFEAAVA......VN.AQLIITHHG...L.FW...............NKDPRVVEGM......LKHRLKLLLE.H...........DITLMGFHLPLDMHPELGNNAQIL.NRL.....QLI.........AGEPFGVYK...................................................................................................................GSALSKM.GHWEQ.S....LSLDQ....VQQKL............QKLFGGEPLVLP.........YGPPNIR.....KVA..VCSGGA [...]
+A3YBU9_9GAMM/11-248             AFEKKLTAILKPNKF..K.DY.APN.............................GL...QV.............QGC........................DEIAKVVTGVTACQALIDEAIR......LN.ADAIFVHHG...Y.FW...............KGESQVITGI......KYQRISRLIK.N...........DINLYAYHLPLDAHPELGNNAQLV.KMF.....NLK.........NPRSLQSYLPL.................................................................................................................DESIGVI.AEFEQ.A....LEIEQ....VKERI............EKALGRDVLFEA.........SGKKLIK.....TVA..LCSGGA [...]
+Q6MC02_PARUW/7-241              NLKELLTQIFPEEGL..I.DY.CPN.............................GL...QV.............EGK........................SEIKILATAVSASLNTIQMAIE......KN.VDALIVHHG...I.FW...............QRDSYVIEGT......KREKLFTLLK.S...........GVSLFAYHLPLDKHLILGNNWKAA.HDL.....GWE.........KLEPFAFMN...................................................................................................................GIPIGVK.GKIKP......TKREI....VKANL............ERYYQHSANCAL.........GGPELIQ.....TLA..LVSGGA [...]
+Y108_CHLTR/5-240                DLLNILNELLHPEYF..S.DY.GPN.............................GL...QVG............NAQ........................TAIRKVAVAVTADLATIEKAIA......CE.ANVLLVHHG...I.FW...............KGMPYSITGI......LYQRMQRLME.G...........NIQLIAYHLPLDAHTTIGNNWKVA.RDL.....GWE.........QLESFGSS....................................................................................................................QPSLGVK.GVFPE......MEVHD....FISQL............SAYYQTPVLAKA........LGGKKRVS.....SAA..LISGGA [...]
+Q609U6_METCA/7-244              ALERFLAGLLNPGAF..A.DY.GPN.............................GL...QV.............EGR........................EEIRRIAFAVSATAHSIAAAAE......WQ.ADALIVHHG...L.FWK..............FHGARPLVGP......FARRVFPLVR.Q...........AINLFAYHLPLDAHPEIGNAAVLG.HRI.....GLG.........EQAPFGDHQ...................................................................................................................GCPTGVR.GRLRE.S....LPASA....LRERL............AEILEHPVLLAT........PDATAPVC.....TIG..IITGGA [...]
+A9VML6_BACWK/5-238              QFKEHITSLFEEHLN..KYGD.DEY.............................GF...TH...........ISKE..........................EFHKIGYTTNLTLETIEEAYQ......NG.VDMIVTHHA........................PWSFLFGM......EEACIEKLKE.Y...........EMNHFWIHLPLDFVKF.GTCTSLF.NEI.....GID.........TILEYSTYE...................................................................................................................EEELPGI.GEYKE.A....IPFSNLVEKLEERM..E.........EK......VKSW.......K.NHDRPVK.....RIA..ILTGAG [...]
+A6TKN7_ALKMQ/5-263              EIMDIALELAGLNEI....PA.DS..............................GI...IVE............GE..........................HIKKVAIGVDMELAEMLLARD......LG.VDLVITHHPSGGS.PRINLHKVMDNQIDSMIRAGVPINKAQKALKEKKDEIERGLHVSNYDRAVSAAKLLKMPFMGIHTPTDILAERKVQGLLD.EKL.....................................................................................................................................................KEQPK......ATLQDIIKALETLP.EY.........QRTMAKPAVRVG.........AKDDYAG.....KTFVTMAGGTG [...]
+A4J511_DESRM/5-303              EIYDLVIKMGIEH.........DPR.............................GLEVVQKQLTKEKKKIEDLKEDEKKEVDQDRLFNPYTDTRVLYGELNREVKRILVGVDMEVAEVLLADRLE..EKGKKIDLIMAHHPEGKA.MAGLYDVMH.LQEDLLAQLGVPINVAEGIMAGRIAEVRRGLMPVNHNRAVDAARLLDIPLMCCHTPADNMVT....EYVQ.KKI.....................................................................................................................................................AENNC......ETLGDIVKVLKQIP.EYAAAVKTGAGPT......IVVG.........SKDRSAG.....KVFVDMTGGTS [...]
+Q3Z2K6_SHISS/9-274              DLNCFLNSMVAVSQP....TV.DKII...........................FGA...EAT........................................LINKIGTCWIASMDVLRKAVF......EG.VNIIITHEP...T.FYSYADLEGDDLEFSWARKIMDYTRGELSYLKIIEQKKEFLHK.N...........NLVIIRCHDVMDREPTFGMSKALA.QQL.....ELD.........VTNIVA......................................................................................................................SDEMYCV.YAIDP......DSAINITKRFAKNL.............KIYNLPGIQFY........GDKARVVR.....TVG..IGAG.. [...]
+Q022B6_SOLUE/14-253             QVVERIQKNAGVPWQ..PESL.DTF..................................KAG..........DPAT..........................PVTGIATTGMATMDVLNRASK......AR.TNLVLTLEP...T.FF................GRLDPQAAN....DPVYAAKQEFIRKN...........ALVVWRFTDHWRARKPDPFPTGLA.AVL.....GST.....................................................................................................................................KYQVADDVFRYDVPP....ITLTVLAGDLAKRLKAR.........AG......IRVI........GDPQSRVR.....RIA..LLPGLS [...]
+A4IP70_GEOTN/7-250              TVMERLTACVETRSP....TV.DTL.............................KYGDSSM.........................................EVKGIAVSFMPTYRVIEQAVQ......AG.ANLLISHEG...L.FYS.............HAGDAETMKND....PVYQEKVRLICE.S...........GIAIYRFHDQWHRYQPDGIMVGLV.RAL.....GWE....................SY............................................................................................................VSEYQSAATI.VTIPR......ILARDMVKYVKERL..............GI..SFIRVA........GDLSTICT.....RIG..LLAGYR [...]
+Y1125_STAEQ/5-353               ELMEVLNNHVPFHQA..E.SW.DNV.............................GL...LIG..........NDKL..........................DITGILTTLDCTDDVVNQAIE......LN.TNTIIAHHP...L.IF................KGVKRIVED....GY.GSIIRKLIQ.N...........NINLIALHTNLDVNPK.GVNRMLA.DQI.....GLE.........NISMINT.NSSYYYKVQTFIPKNYIEDFKDSLNELGLAKEGNYEYCFFESEGKGQFKPVGDAS........PYIGKLDSIEYVDEIKLEFMIKDNELEITKRAILDNHPYETPVFDFIKMNKESEYGLGII.GQLNQ.T....MTLDEFSEYAKKQL.NI.........PS......VRYT.......G.QHDSPIK.....KVA..IIGGSG [...]
+A5KQA2_9FIRM/5-253              EIIQVIEASYPKEAA..L.DF.DNV.............................GL...LAG..........RLEK..........................EVSKVYLALDATEEVIDKAIA......LG.TDMLITHHP...L.IF................SPMKRVTDE....DFIGRRVVKLLQ.N...........DISYYAMHTNYDVL...GMAKLAE.DIL.....GIE.........KTYVLDVTMEKD..............................................................................................................GAEEGIGRI.GMLER.E....MTLEECCLYVKHKL.KL.........GS......VKVY.......G.DMKKNVH.....CLA..VSPGAG [...]
+Q8RE15_FUSNN/5-246              DIINILEKKFPKINA..E.EW.DNI.............................GL...LIG..........DYDK..........................EVKKIQFSLDATLESIENAIS......EK.VDMLITHHP...I.IF................KAIKDITEQ....NILGKKIRNLIK.N...........DINVYSIHTNLDSSIE.GLNDYVL.KKI.....GIS.........EYKILDFDEEK.................................................................................................................NCGIGRI.FKLNE.E....KNLKKFIEELKLKL.KI.........LN......LRVI.......SNDLNKKIK.....KVA..LINGSA [...]
+A0Q1P0_CLONN/7-258              DFKNIVEEFAPVKLK..L.SY.DNV.............................GL...MVG..........ELNN..........................EIGNILVTLDCTLDVIEEAKA......KN.CNFIFAHHP...L.LY................KKPSSITSE....TLVGRKILELIK.N...........NISLYSAHTNLDSVKD.GINDTVM.KLL.....KIK.........NCKTIEFSEGKDE............................................................................................................DDDVSGLGRV.GTLES.P....ITVKEMCNRVKEVL.NT.........PF......VRYI.......G.EDSKEIK.....TIA..VINGSG [...]
+Q0TNV6_CLOP1/5-249              DIINIIEDIAPVNLK..E.GF.DNV.............................GL...MVG..........DREK..........................NITKILLALDCTEEVIKEAKE......MG.AELILTHHP...L.LF................RKPSTITTD....TLLGRKIISLIK.D...........DINLYSAHTNWDSVKG.GLNDTLV.EIL.....GFN.........KGIIMDKSPVD................................................................................................................SEAGIGRV.VELTK.E....MTVLEIINLIKSSL.GI.........KN......LRYA.......G.DLNEVIK.....KIA..IVNGSG [...]
+B8CXH0_HALOH/6-355              NIVGVMNEIAPRFLA..M.DW.DNP.............................GL...QIG..........YFSQ..........................EINRVLVTLDVTEEVVEEAIE......EN.CQLIISHHP...L.LF................KGLKSIHDK....SYNGRVVLKAIK.N...........NIAVLSAHTNFDIVGS.GINDYLS.HLL.....GLS.........DIQPLKVTGEKPYIKLVVFIPESHFDVVRKEILDSGLAGFIGNYSHTSFSVKGEGTFKPLEGSN......PFTGQKGHLARVEELRLETIIPANNISKVIDIIKKVHPYEEVAYDLYPLNNTGEKYGLGRI.GLLEK.G....IKLVDFVDIVKEKL.GI.........RH......IRYT.......G.NYDNIVK.....RIA..VCSGSG [...]
+Y1073_LACLA/5-244               DFMLEYEKFCPKELA..V.EG.DPV.............................GL...QVG..........NPND..........................ELTKVLVTLDIREQTVAEAKA......LG.VNLIIAKHP...L.IF................RPLSALTSM....NDQEKLVLDLAR.A...........GIAVYTSHTNIDVVTG.GLNDYFS.QLL.....GMT.........DIEVLDD.....................................................................................................................EEGLGRV.GNIEL......TELSVLTEKVKASF.GL.........DR......LRLIT.....YDHNLTQKIG.....RIA..ICGGSG [...]
+A5LFS5_STRPN/5-252              EVIQAYEAFCPQEFS..M.EG.DSR.............................GL...QIG..........TLDK..........................GIQRVMVALDIREETVAEAIE......KG.VDLIIVKHA...P.IF................RPIKDLLAS....RPQNQIYIDLIK.H...........DIAVYVSHTNIDIVEN.GLNDWFC.QML.....GIE.........ETTYLQE....T..............................................................................................................GPERGIGRI.GNI.Q.P....QTFWELAQQVKQVF.DL.........DS......LRMVHY...QEN.DLQKPIS.....RVA..ICGGSG [...]
+Q4ETV8_LISMO/8-360              EYTAIMEKIAPKKLA..M.EG.DPI.............................GL...QVG..........DLSR..........................KVRKIMFTLDVLEEVVDEAIE......KK.VDLIIAHHP...F.LY................RPTQHIDTT....TKQGKMIKKLIK.H...........DITVFAAHTNLDIAQG.GVNDILA.DLL.....HLQ.........NTTMIEETYSEPYCKIAVYVPENELESVRLALVNNGAGQIGTEYTECTFHTTGIGSFKPGANAN......PTIGEKDALTSVPEFKIEAIFPQYLTETITKAVKIAHPYEEPAIDVYTLEMQTYKEGLGRV.GMLPK.K....LGMVSFIDKLKTAF.AI.........DN......VRFI.......G.DLKTTVH.....KVA..IIGGDG [...]
+Q038U7_LACC3/6-251              QIINRFEDFAPLSLA..W.ER.DPS.............................GL...QLG..........NPDK..........................PVKTVLVTLDVRPEVVTEAEA......IH.ADMIFSHHP...A.MF................RPVHNLDLR....VPQNAMYAQILK.D...........DLLVYAAHTNLDRVQD.GMNDWLA.EAL.....GLS.........QVVPFINEGE..................................................................................................................GANMGRI.GLLPD.K....IRLDAFVEQVKAAY.NV.........KG......LRVV.......ARDLDRLVQ.....KVA..ILGGDG [...]
+B3XRX7_LACRE/6-257              QLIVRFEKFANPQLA..E.KW.DHV.............................GL...QIG..........NPDL..........................QITRLMTTLDVRPEVVDEAIE......QN.VDFIFAHHP...I.MF................HPAKDLDTR....DPQNAMYAKLLA.N...........NITVYAAHTNLDAANG.GMNDWLA.DQL.....HLT.........NTVPLVPAGNDPI............................................................................................................SGEPVGMGRI.GELAE.P....LTPQKFAKYCMDVF.GI.........RG......LRLIV....NPL.DQEREIK.....RVA..VLGGAG [...]
+Q5FJU7_LACAC/6-251              DIVERLRKDFPEDIA..S.QG.DPV.............................GM...QIG..........SMES..........................DVTNVMTTLDVRPQVVEEAVE......KG.VNLIISHHP...V.MF................RPAKNLDYA....NPQNAMYGNIIK.N...........NITVYSIHTNSDKAQN.GSADWQA.EEL.....GLK.........DIEPFCLDDD..................................................................................................................GIAMGRK.GKLPK.T....MSAYDFAFYVKDKM.DI.........KM......ARLI.......TASNEKPIT.....TVG..FICGDG [...]
+Q03Y42_LEUMM/5-248              ELIDKIELFAPKQLA..E.EG.DPT.............................GL...QIG..........DPKQ..........................PVHRVMTALDVRPEVVQEAID......NQ.VNFIWAHHE...V.MF................FPAKNLDLS....QPQNRMYADLIQ.H...........HIVVYASHTNMDSAQG.GMNDWLA.EAL.....GIQ.........DVVPLVPNVDK.................................................................................................................KTGLGRI.GQLEQ.P....ISVQEYAVKIRDLF.HV.........QA......VRVI.......AKDVTKPIQ.....KIA..VLGGDG [...]
+A8MG99_ALKOO/7-357              EIINIIENLAPLRYA..Y.QW.DNV.............................GL...QIG..........SRSD..........................EVQRILIALEVTDEVLEEAVK......NN.VDMIISHHP...L.IF................SPLKKIIKE....DLKGKLLYKAIR.N...........NISVYSTHTNMDIAPN.GLNDYVA.NLL.....GLK.........DMEVLDVTEKSTYYKLAVFTPVGHEEKVAEAICSAGAGHIGNYSNCTFRVNGTGTFLPLEGTNP.......FIGAQGQGEKVEEIKIETIVPQGNLKSVVKAMLKVHPYEEVAYDIYPLENEGPVLGIGRM.GYLPH.A....VSIADLANKIKDIF.NI.........EH......IKIA.......G.DLKAHIN.....KVA..IINGSG [...]
+A4XK84_CALS8/6-353              EIATFLENYFPKKLS..Y.DW.DNV.............................GL...QVG..........SFSA..........................KVDSILICVDVTEDVLNEAKD......LG.VRLVISHHP...L.IF................QGLKSIKDD....TPEGRLIIDTIK.N...........DIAILSFHTNADVSKH.GINFYLA.KLL.....NLE.........NIEGLSVKQKNGYFKIVVYVPSDYKDEVLEAMAQEGAGFVGKYSHCFFAVEGQGCFKPQEGANP.......FVGKIGELERVDEVRLESIVPEEKLKNVIKAMLKAHPYEEVAYDIYRLENDISYECIGVI.GQ..R.S....IEAENLIKELKEKL.NL.........SF......VKAS.........LVKNQFK.....KIA..IVSGSG [...]
+B0K888_THEP3/7-356              VIASIMDKLAPRKFA..E.EW.DNV.............................GL...LVG..........DGSK..........................DVSKILVALDATFEVVKEAID......KK.VDMIVTHHP...L.IF................KPIKNVKAD....NPVGSLLIQLIK.N...........DISLYAAHTSFDIAPN.GMNDILC.NVL.....GIY.........DREVLDVTYSEGYKKIAVYVPQGYEEIVKNAMCNAGAGFIGNYSNSTFQTQGIGTYKPLEGTNP.......FIGEIGKIEKVEEVKIETVVPQKYLEKVINAMLNVHPYEEVAYDVYPLENLKEEYGLGRI.GTISE......TTLKELALQVKAKL.KI.........NN......LRVV.......G.DPNKKIK.....KVA..VCGGSG [...]
+Q18BX9_CLOD6/5-352              SLTRKIEKKYPLNLA..E.DW.DNV.............................GL...IVG..........DFDM..........................DVKKVLVSLEANEDVIDEAIS......KN.IDLIVTHHP...F.IF................GKINKINSG....DLKGRLIQKLIK.N...........DISLYSMHTNFDIAFD.GLNDYFM.EIM.....EFG.........NSKVLDITKSENLYKLAVYVPHNYSDELRKVLSNSGAGHIGNYSDCTFSIEGEGQFKPLEGSNP.......FLGSVNDIETVNEVKIETVVPQKLLGGVISSMLDAHPYEEVAYDLYKLENKGEIFGLGRI.SKLDK.S....MTLESLSRKIKEKL.NM.........KH......IRVV.......G.NLSTDIT.....KVA..VVTGAG [...]
+A0RIR2_BACAH/9-360              EIISLFESMYPKHLA..M.EG.DKI.............................GL...QIG..........ALNK..........................PVQHVLIALDVTEEVVDEAIQ......LG.ANVIIAHHP...L.IF................NPLKAIHTD....KAYGKIIEKCIK.N...........DIAIYAAHTNVDVAKG.GVNDLLA.EAL.....GLQ.........NTEVLAPTYAEEMKKIVVFVPETHAEEVRKALGDAGAGHIGNYSHCTFSSEGTGTFIPQEGTNP.......YIGETGQLERVEEVRIETIIPASLQRKVIKAIVTAHPYEEVAYDVYPLDNKGETLGLGKI.GYLQE.E....MTLGQFAEHVKKSL.DV.........KG......ARVV.......G.KLDDKVR.....KVA..VLGGDG [...]
+A4J7B6_DESRM/6-358              EIVSMLEQIAPRHLA..E.EW.DNS.............................GW...QVG..........DPAA..........................GVSKVLLTLDVDAVVVREAVE......KQ.VNLIISHHP...L.LM................KGIKNIRLD....EPKGELIAQLIK.N...........NIGLYAAHTNLDSAAG.GVNEQLA.KRL.....GLQ.........NIEVLHPAKGEKHLKLVVFVPVQQVEGVQRAISQAGAGWIGNYSDCTFSVQGEGTFRPLEGTNP.......FIGQQGQLEQVAESRLETIVPASKIKTVLKAMLEAHPYEEVAYDLYPLENQTSNAGLGRI.GHLAE.T....QSFADFIIAVKEAL.GL.........AS......VKVG.......G.SMWKDVR.....RIA..VCGGSG [...]
+Q0AZ81_SYNWW/7-359              DIIGIMEEHFPPWLA..E.AW.DNS.............................GL...QLG..........STNK..........................AVKKAAVALDLDESILNQALE......LK.VAMIITHHP...L.FF................KPLKQINYE....SPVGRLIQRIVK.A...........GISVYAAHSNLDAAEK.GLNQILA.ELL.....GLQ.........DIDILGNHKKEELYKLVVFVPASHYEEVRRAINAAGAGFIGNYSDCSFRVRGTGTFRPGAGTQP.......FLGQEGELEEADEFRLETVVRKRELAQVMQAMQEAHPYEEVAFDIFRLEQAGKGYSMGRY.GFLPE.E....TKLGDYARQVKETL.GL.........EA......VRVV.......G.DLNKVIR.....KVA..IVSGSG [...]
+Q3AEW6_CARHZ/6-353              EIAAVIEEKFPRKLA..M.EW.DNP.............................GW...QI...........YFEK..........................EVHKVLLALDITAATVDFALN......EK.VDLIITHHP...L.FF................KPLKSLTFE....RKETLPLLKLLE.K...........QISVYAIHTNLDVAFG.GINDYLA.ELL.....ELQ.........EVKPLGEEIFEKLYKLSVFVPESHWETVREAMGAAGAGFIGNYSHCTFNTRGIGTFLPLEGTNP.......YIGAVGKLERVEEVKIETIVPERLLAKVVKAMLKVHPYEEVAYDIYPLENKNYLGGMGRI.G.LTG.K....KSFKEFLALVAEKL.GI.........EN......LRYG.......G.DLNSVPK.....KVA..VVTGAG [...]
+B8I6N4_CLOCE/5-249              DIINFLNEIAPWRYA..E.EW.DSV.............................GL...MVG..........SRES..........................YVTKILLCMDVTSDVISEAAQ......CG.AQMILSHHP...F.IF................SKLKSIDME....TFKGEQIANLIK.N...........NISVVSAHTNLDTAPG.GVNDTLA.ESL.....HLT.........NSRNLKPYMPKGL.............................................................................................................ECDLGMGKV.GELQN.S....KSFDEFVIDVKKSL.CI.........EN......LRII.......G.VKPKKVK.....KVA..VFCGSF [...]
+A3DDU7_CLOTH/7-355              DIIKYMEELAPVSLA..E.DY.DNV.............................GL...LIG..........SRES..........................TVERIFVCLDVTSKTVDEAVA......KK.ADLIVSHHP...V.IF................KGLKRINED....DPKGNIIYKLIR.N...........NIGVYSAHTNLDVAHG.GVNNYLS.SIL.....GLK.........DIISLKDYKAEKLYKVVVFVPHESVDAVRDAMSRAGAGWIGNYSDCSFMTAGTGTFRPLEGTNP.......YIGTTGNLEKVDEYRIETVVSQRNLKKVIEAMIKVHPYEEVAYDVYPLEIKGRQYGMGNV.GVLDK.P....KSLDEFIAVVKEKL.GV.........KN......VRVI.......G.ETNKEIE.....KVA..VFCGSF [...]
+#=GC seq_cons                   clhphlcphhPhphu..p.sa.Dss.............................GL....ls............pp..........................plp+lhlslDso.pllccAlp......ts.sshllsHHP...l.ha................pshcplssp......htphlhpLlc.s...........sIslauhHTshDss.s.GhNshLA.chL.....slp.........shpsht......................................................................................................................thuhGhl.Gplsp.s....hohpphhthlpppl.th.........tt......lphs.........shspplp.....+VA..lsuGuG [...]
+//
diff --git a/demotic/examples/example.wu-blastp.out b/demotic/examples/example.wu-blastp.out
new file mode 100644
index 0000000..01071b3
--- /dev/null
+++ b/demotic/examples/example.wu-blastp.out
@@ -0,0 +1,7086 @@
+BLASTP 2.0MP-WashU [04-May-2006] [linux26-x64-I32LPF64 2006-05-10T17:22:28]
+
+Copyright (C) 1996-2006 Washington University, Saint Louis, Missouri USA.
+All Rights Reserved.
+
+Reference:  Gish, W. (1996-2006) http://blast.wustl.edu
+
+Query=  sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp.
+    (strain NGR234) GN=NGR_a00980 PE=4 SV=1
+        (181 letters; record 1)
+
+Database:  uniprot_sprot_wu.fasta
+           516,081 sequences; 181,677,051 total letters.
+Searching....10....20....30....40....50....60....70....80....90....100% done
+
+                                                                     Smallest
+                                                                       Sum
+                                                              High  Probability
+Sequences producing High-scoring Segment Pairs:              Score  P(N)      N
+
+sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhiz...   897  9.1e-90   1
+sp|Q07074|YH007_YEAST Uncharacterized protein YHR007C-A O...    60  0.74      1
+sp|Q8XVA0|Y2931_RALSO UPF0135 protein RSc2931 OS=Ralstoni...    74  0.995     1
+sp|P33890|TIR2_YEAST Cold shock-induced protein TIR2 OS=S...    74  0.995     1
+sp|A7HGP8|CH602_ANADF 60 kDa chaperonin 2 OS=Anaeromyxoba...    78  0.996     1
+sp|Q608F1|Y1541_METCA UPF0350 protein MCA1541 OS=Methyloc...    58  0.9999    1
+
+
+>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain
+            NGR234) GN=NGR_a00980 PE=4 SV=1
+        Length = 181
+
+ Score = 897 (320.8 bits), Expect = 9.1e-90, P = 9.1e-90
+ Identities = 181/181 (100%), Positives = 181/181 (100%)
+
+Query:     1 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT 60
+             MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT
+Sbjct:     1 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT 60
+
+Query:    61 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF 120
+             TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF
+Sbjct:    61 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF 120
+
+Query:   121 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP 180
+             AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP
+Sbjct:   121 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP 180
+
+Query:   181 N 181
+             N
+Sbjct:   181 N 181
+
+
+>sp|Q07074|YH007_YEAST Uncharacterized protein YHR007C-A OS=Saccharomyces
+            cerevisiae GN=YHR007C-A PE=1 SV=2
+        Length = 71
+
+ Score = 60 (26.2 bits), Expect = 1.3, P = 0.74
+ Identities = 16/33 (48%), Positives = 21/33 (63%)
+
+Query:   141 LSISTVAGAEVHFIATERSLRELENQLTLLLEQ 173
+             LS+ T+  A VH+I T  +  + ENQL LLL Q
+Sbjct:    31 LSLPTLL-APVHYIPTRLTHHQAENQLFLLLFQ 62
+
+
+>sp|Q8XVA0|Y2931_RALSO UPF0135 protein RSc2931 OS=Ralstonia solanacearum
+            GN=RSc2931 PE=3 SV=1
+        Length = 248
+
+ Score = 74 (31.1 bits), Expect = 5.2, P = 0.995
+ Identities = 37/131 (28%), Positives = 56/131 (42%)
+
+Query:    42 GKMAEIDAILITDVNGIGTTADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQ 101
+             G  A++ A+L   +   G   DD+L ++  + +   TT  AF   + +R+    +   G 
+Sbjct:   107 GNNAQLGALL--GIQPTGRFGDDELGWIGTLPEA--TTLGAFAEVVAARLDRMPLVIGGA 162
+
+Query:   102 LQ--HQIATRTGKEERKFKPFAAAGFSVRAGLAADGSNSGMLSISTVA--GAEVHFIATE 157
+              +  H I   TG  +  F    +AG  V     A    + +   S VA  GA  H  ATE
+Sbjct:   163 DRPVHTIGWCTGGAQGWFDAAVSAGVDVYLSGEASEQTTHLARESGVAYIGAGHH--ATE 220
+
+Query:   158 RS-LRELENQL 167
+             R  +R L N L
+Sbjct:   221 RGGVRALGNHL 231
+
+
+>sp|P33890|TIR2_YEAST Cold shock-induced protein TIR2 OS=Saccharomyces
+            cerevisiae GN=TIR2 PE=2 SV=1
+        Length = 251
+
+ Score = 74 (31.1 bits), Expect = 5.4, P = 0.995
+ Identities = 30/124 (24%), Positives = 49/124 (39%)
+
+Query:    29 SKVFYRVAWLLGRGKMAEIDAILITDVNGIGTTADDQLAFVSLIADQGETTTVAFGPEIG 88
+             SK+   V W   R  + E++++L T      +T     A  S +A   ETT+ A      
+Sbjct:    89 SKMLTMVPWYSSR-LLPELESLLGTSTTAASSTEASSAATSSAVASSSETTSSAVASS-- 145
+
+Query:    89 SRIAASFMAACGQLQHQIATRTGKEERKFKPFAAAGFSVRAGLAADGSNSGMLSI---ST 145
+             S   +S +A+  +     AT +          +    S +A  +   S+S + S    ST
+Sbjct:   146 SEATSSAVASSSEASSSAATSSAVASSSEATSSTVASSTKAASSTKASSSAVSSAVASST 205
+
+Query:   146 VAGA 149
+              A A
+Sbjct:   206 KASA 209
+
+
+>sp|A7HGP8|CH602_ANADF 60 kDa chaperonin 2 OS=Anaeromyxobacter sp. (strain
+            Fw109-5) GN=groL2 PE=3 SV=1
+        Length = 547
+
+ Score = 78 (32.5 bits), Expect = 5.6, P = 0.996
+ Identities = 32/116 (27%), Positives = 48/116 (41%)
+
+Query:    39 LGRGKMAEIDAILITDVNGIGTTADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAA 98
+             LGR K   ID    T V+G G  AD + A V  I  Q E TT  +  E      A  +  
+Sbjct:   317 LGRAKRISIDKDNTTIVDGAGQKADIE-ARVKTIRAQIEETTSDYDREKLQERLAKLVGG 375
+
+Query:    99 CGQLQHQIATRTGKEERKFK---PFAAAGFSVRAGLAADGSNSGMLSISTVAGAEV 151
+                +    AT T  +E+K +      A   +V  G+   G  + + ++  + G +V
+Sbjct:   376 VAVINVGAATETEMKEKKARVEDALHATRAAVEEGIVPGGGVAYLRAVKALEGVKV 431
+
+
+>sp|Q608F1|Y1541_METCA UPF0350 protein MCA1541 OS=Methylococcus capsulatus
+            GN=MCA1541 PE=3 SV=1
+        Length = 83
+
+ Score = 58 (25.5 bits), Expect = 9.0, P = 0.9999
+ Identities = 26/76 (34%), Positives = 35/76 (46%)
+
+Query:    34 RVAWLLGRGKMAEIDAILITDVNGIGTTAD--DQLAFVSLI----ADQGETTTVAFGPEI 87
+             R+ W   RG MAE+D +L   V+G    AD  ++ AF  L+    AD     T    PE 
+Sbjct:     6 RLLWSCRRG-MAELDRVLALYVHGAYQEADVSERQAFERLLDLQDADLWRCLTGLARPED 64
+
+Query:    88 GS--RIAASFMAACGQ 101
+              +   +AA   A  GQ
+Sbjct:    65 PALAALAAKLRALVGQ 80
+
+
+Parameters:
+
+  ctxfactor=1.00
+  E=10
+
+  Query                        -----  As Used  -----    -----  Computed  ----
+  Frame  MatID Matrix name     Lambda    K       H      Lambda    K       H
+   +0      0   BLOSUM62        0.318   0.129   0.360    same    same    same
+               Q=9,R=2         0.244   0.0300  0.180     n/a     n/a     n/a
+
+  Query
+  Frame  MatID  Length  Eff.Length     E    S W   T  X   E2     S2
+   +0      0      181       181       9.8  75 3  11 22  0.41    32
+                                                    31  0.40    35
+
+
+Statistics:
+
+  Database:  /misc/data0/databases/Uniprot/uniprot_sprot_wu.fasta
+   Title:  uniprot_sprot_wu.fasta
+   Posted:  9:42:10 AM EDT Apr 12, 2010
+   Created:  9:42:26 AM EDT Apr 12, 2010
+   Format:  XDF-1
+   # of letters in database:  181,677,051
+   # of sequences in database:  516,081
+   # of database sequences satisfying E:  6
+  No. of states in DFA:  569 (121 KB)
+  Total size of DFA:  245 KB (2103 KB)
+  Time to generate neighborhood:  0.00u 0.00s 0.00t   Elapsed:  00:00:00
+  No. of threads or processors used:  8
+  Search cpu time:  10.70u 0.06s 10.76t   Elapsed:  00:00:01
+  Total cpu time:  10.70u 0.06s 10.76t   Elapsed:  00:00:01
+  Start:  Fri Apr 16 09:13:43 2010   End:  Fri Apr 16 09:13:44 2010
+
+EXIT CODE 0
+

+BLASTP 2.0MP-WashU [04-May-2006] [linux26-x64-I32LPF64 2006-05-10T17:22:28]
+
+Copyright (C) 1996-2006 Washington University, Saint Louis, Missouri USA.
+All Rights Reserved.
+
+Reference:  Gish, W. (1996-2006) http://blast.wustl.edu
+
+Query=  sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus
+    oryzae GN=hacA PE=2 SV=1
+        (345 letters; record 2)
+
+Database:  uniprot_sprot_wu.fasta
+           516,081 sequences; 181,677,051 total letters.
+Searching....10....20....30....40....50....60....70....80....90....100% done
+
+                                                                     Smallest
+                                                                       Sum
+                                                              High  Probability
+Sequences producing High-scoring Segment Pairs:              Score  P(N)      N
+
+sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=As...  1765  9.6e-182  1
+sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Em...  1348  1.5e-137  1
+sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Tr...   303  1.8e-31   2
+sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS=Sa...   184  9.3e-14   1
+sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidops...   170  3.4e-12   1
+sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum l...   140  7.0e-09   1
+sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos tauru...   150  3.2e-08   1
+sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo sapi...   150  3.2e-08   1
+sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-bindi...   156  3.7e-08   1
+sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arab...   127  1.9e-07   1
+sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=Pich...   148  9.6e-07   1
+sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-bindi...   136  6.4e-06   1
+sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-bindi...   136  6.4e-06   1
+sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-bindi...   136  6.5e-06   1
+sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-bindi...   132  1.2e-05   1
+sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-bindi...   133  1.4e-05   1
+sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-binding...   131  2.3e-05   1
+sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper transc...   132  2.4e-05   1
+sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-bindi...   130  3.0e-05   1
+sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcriptiona...   104  6.0e-05   1
+sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcriptiona...   104  6.0e-05   1
+sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-bindi...   127  6.4e-05   1
+sp|O88778|BSN_RAT Protein bassoon OS=Rattus norvegicus GN...   136  7.2e-05   1
+sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-binding...   125  0.00011   1
+sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase 7 O...   127  0.00012   1
+sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-bindi...   123  0.00013   1
+sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptional...   100  0.00016   1
+sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-bindi...   121  0.00017   1
+sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS=Pe...   121  0.00020   1
+sp|P97876|BATF3_RAT Basic leucine zipper transcriptional ...    99  0.00021   1
+sp|Q5B3C8|NST1_EMENI Stress response protein nst1 OS=Emer...   125  0.00029   1
+sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-bindi...   115  0.00030   2
+sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-bindi...   120  0.00032   1
+sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcription f...   118  0.00032   1
+sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus norv...   116  0.00032   1
+sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcription f...   118  0.00034   1
+sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcription f...   117  0.00044   1
+sp|O35284|BATF_MOUSE Basic leucine zipper transcriptional...    96  0.00044   1
+sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=Fosb...   116  0.00053   1
+sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gallus ...   115  0.00059   1
+sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Coturni...   115  0.00059   1
+sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus muscu...   113  0.00071   1
+sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus norve...   114  0.00084   1
+sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-bindi...   116  0.00089   1
+sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=Magn...   121  0.00097   1
+sp|O57342|MAFA_COTJA Transcription factor MafA OS=Coturni...   112  0.0011    1
+sp|O60675|MAFK_HUMAN Transcription factor MafK OS=Homo sa...   103  0.0012    1
+sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sapie...   111  0.0012    1
+sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding...   115  0.0014    2
+sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus muscu...   117  0.0015    1
+sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=FOSB...   112  0.0015    1
+sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 OS...   117  0.0016    1
+sp|Q61827|MAFK_MOUSE Transcription factor MafK OS=Mus mus...   102  0.0017    1
+sp|P29747|CREBA_DROME Cyclic AMP response element-binding...   117  0.0018    2
+sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricetus ...   112  0.0019    1
+sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris GN=...   111  0.0019    1
+sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-bindi...   112  0.0020    1
+sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-bindi...   112  0.0020    1
+sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription fac...   111  0.0020    1
+sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprinus carp...   111  0.0020    1
+sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo sapi...   114  0.0021    1
+sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus muscul...   110  0.0023    1
+sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcription f...   112  0.0027    1
+sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcription f...   112  0.0028    1
+sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo sa...   109  0.0030    1
+sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A OS...   118  0.0032    2
+sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-bindi...   110  0.0033    1
+sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcription f...   109  0.0034    1
+sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcription f...   110  0.0035    1
+sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabidopsi...   108  0.0037    1
+sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-bindi...   109  0.0038    1
+sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding...   111  0.0038    2
+sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus no...   108  0.0039    1
+sp|A5PKJ4|MK07_BOVIN Mitogen-activated protein kinase 7 O...   113  0.0039    1
+sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus musculus ...   109  0.0040    1
+sp|O13024|INCEA_XENLA Inner centromere protein A OS=Xenop...   113  0.0045    1
+sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Macaca ...   107  0.0050    1
+sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiation f...   113  0.0050    1
+sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa GN=F...   108  0.0051    1
+sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS=FBJ...   108  0.0051    1
+sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schizos...   100  0.0057    1
+sp|Q90596|MAFK_CHICK Transcription factor MafK OS=Gallus ...    98  0.0062    1
+sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xenopus...   106  0.0062    1
+sp|Q1DQC1|PAN1_COCIM Actin cytoskeleton-regulatory comple...   114  0.0065    1
+sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus mus...   106  0.0065    1
+sp|Q5A2K0|NST1_CANAL Stress response protein NST1 OS=Cand...   113  0.0078    1
+sp|Q8VCH8|UBXN4_MOUSE UBX domain-containing protein 4 OS=...   108  0.0079    1
+sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-bindi...   107  0.0079    1
+sp|P10158|FOSL1_RAT Fos-related antigen 1 OS=Rattus norve...   104  0.0080    1
+sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS=Mus mu...    98  0.0081    1
+sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=Rattus n...    98  0.0081    1
+sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sapie...   105  0.0085    1
+sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gallus ...   104  0.0087    1
+sp|A1C9M5|KAPC_ASPCL Putative transcription factor kapC O...   103  0.010     2
+sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7 OS=...   109  0.011     1
+sp|Q15424|SAFB1_HUMAN Scaffold attachment factor B1 OS=Ho...   109  0.013     1
+sp|O60841|IF2P_HUMAN Eukaryotic translation initiation fa...   110  0.014     1
+sp|Q5RDE1|IF2P_PONAB Eukaryotic translation initiation fa...   110  0.014     1
+sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like pr...   105  0.014     1
+sp|A9V549|EIF3A_MONBE Eukaryotic translation initiation f...   109  0.015     1
+sp|Q9UKV3|ACINU_HUMAN Apoptotic chromatin condensation in...   110  0.016     1
+sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xenopu...   104  0.016     1
+sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containing prote...   110  0.018     1
+sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapiens ...   103  0.018     1
+sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norvegic...   103  0.018     1
+sp|P19880|YAP1_YEAST AP-1-like transcription factor YAP1 ...    96  0.019     2
+sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modulator OS...   108  0.019     1
+sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modulator OS...   108  0.019     1
+sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sapie...   101  0.020     1
+sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus muscul...   101  0.020     1
+sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Yarr...   107  0.021     1
+sp|Q498L2|SLTM_XENLA SAFB-like transcription modulator OS...   105  0.022     2
+sp|Q1E554|CGR1_COCIM rRNA-processing protein CGR1 OS=Cocc...    89  0.023     1
+sp|Q91496|FOS_TETFL Proto-oncogene c-Fos OS=Tetraodon flu...   102  0.023     1
+sp|Q9ESN9|JIP3_MOUSE C-Jun-amino-terminal kinase-interact...    98  0.023     2
+sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifugu rubr...   102  0.023     1
+sp|Q05682|CALD1_HUMAN Caldesmon OS=Homo sapiens GN=CALD1 ...   106  0.023     1
+sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus GN...   102  0.024     1
+sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodopus camp...   102  0.024     1
+sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kapC O...   100  0.024     1
+sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange fac...   107  0.024     1
+sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Droso...   103  0.025     1
+sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1 OS...   106  0.025     1
+sp|Q5R452|SAFB1_PONAB Scaffold attachment factor B1 OS=Po...   106  0.028     1
+sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-bindi...   102  0.028     1
+sp|Q9D439|CCD11_MOUSE Coiled-coil domain-containing prote...   103  0.028     1
+sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus muscul...    99  0.029     1
+sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xenopus...   100  0.029     1
+sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper transc...   101  0.030     1
+sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1 subunit...   109  0.030     2
+sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus gal...   100  0.030     1
+sp|A2R346|KAPC_ASPNC Putative transcription factor kapC O...    99  0.031     1
+sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catus G...   101  0.031     1
+sp|P26042|MOES_PIG Moesin OS=Sus scrofa GN=MSN PE=2 SV=3       103  0.033     1
+sp|Q2HJ49|MOES_BOVIN Moesin OS=Bos taurus GN=MSN PE=2 SV=3     103  0.033     1
+sp|A5FV21|IF2_ACICJ Translation initiation factor IF-2 OS...   105  0.034     1
+sp|A6SCT6|DBP3_BOTFB ATP-dependent RNA helicase dbp3 OS=B...   103  0.034     1
+sp|Q7PGE8|EIF3A_ANOGA Eukaryotic translation initiation f...   106  0.035     1
+sp|O77788|NFM_BOVIN Neurofilament medium polypeptide OS=B...   105  0.036     1
+sp|Q9JTB5|IF2_NEIMA Translation initiation factor IF-2 OS...   105  0.038     1
+sp|Q9JYD2|IF2_NEIMB Translation initiation factor IF-2 OS...   105  0.038     1
+sp|A1KV51|IF2_NEIMF Translation initiation factor IF-2 OS...   105  0.038     1
+sp|P0C5H8|KAPC_EMENI Putative transcription factor kapC O...    98  0.038     1
+sp|Q80YR5|SAFB2_MOUSE Scaffold attachment factor B2 OS=Mu...   105  0.039     1
+sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus robo...   100  0.039     1
+sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xenopus...    98  0.041     1
+sp|P26038|MOES_HUMAN Moesin OS=Homo sapiens GN=MSN PE=1 SV=3   102  0.042     1
+sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus norve...    98  0.043     1
+sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1 subunit...   104  0.044     1
+sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GYF domai...   112  0.044     2
+sp|Q8WYK2|JDP2_HUMAN Jun dimerization protein 2 OS=Homo s...    92  0.045     1
+sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-bindi...    99  0.046     1
+sp|Q9C0A6|SETD5_HUMAN SET domain-containing protein 5 OS=...   106  0.046     1
+sp|Q92575|UBXN4_HUMAN UBX domain-containing protein 4 OS=...   101  0.046     1
+sp|Q5R4I3|UBXN4_PONAB UBX domain-containing protein 4 OS=...   101  0.046     1
+sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-binding...    96  0.048     1
+sp|A9M1D5|IF2_NEIM0 Translation initiation factor IF-2 OS...   104  0.048     1
+sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper transc...   103  0.049     1
+sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like pr...   102  0.049     1
+sp|Q8N300|CCD23_HUMAN Coiled-coil domain-containing prote...    77  0.050     1
+sp|O81025|P2A03_ARATH Putative protein PHLOEM PROTEIN 2-L...   100  0.052     1
+sp|O35763|MOES_RAT Moesin OS=Rattus norvegicus GN=Msn PE=...   101  0.055     1
+sp|Q9Z220|TSG10_RAT Testis-specific gene 10 protein OS=Ra...   102  0.055     1
+sp|Q32N93|INCEB_XENLA Inner centromere protein B OS=Xenop...   103  0.056     1
+sp|Q95XZ5|NPBL_CAEEL Nipped-B-like protein pqn-85 OS=Caen...   107  0.056     1
+sp|Q6CT90|EIF3A_KLULA Eukaryotic translation initiation f...   103  0.059     1
+sp|Q5F489|TAF3_CHICK Transcription initiation factor TFII...   103  0.059     1
+sp|P42775|GBF2_ARATH G-box-binding factor 2 OS=Arabidopsi...    98  0.060     1
+sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase domain-...   103  0.060     1
+sp|Q54LU8|Y8646_DICDI Probable serine/threonine-protein k...    98  0.060     2
+sp|P94517|YSCB_BACSU Uncharacterized protein yscB OS=Baci...    94  0.066     1
+sp|Q2UKG6|EIF3A_ASPOR Eukaryotic translation initiation f...   103  0.067     1
+sp|Q9Y592|CCD41_HUMAN Coiled-coil domain-containing prote...   101  0.069     1
+sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF domai...   111  0.069     2
+sp|Q8X229|FCR3_CANAL Fluconazole resistance protein 3 OS=...    98  0.069     1
+sp|P26041|MOES_MOUSE Moesin OS=Mus musculus GN=Msn PE=1 SV=3   100  0.070     1
+sp|Q9TW28|MYOM_DICDI Myosin-M heavy chain OS=Dictyosteliu...   105  0.072     1
+sp|Q9NZ53|PDXL2_HUMAN Podocalyxin-like protein 2 OS=Homo ...   100  0.074     1
+sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-bindi...    99  0.075     1
+sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor TFII...   102  0.076     1
+sp|A0LE19|IF2_MAGSM Translation initiation factor IF-2 OS...   102  0.077     1
+sp|Q869E1|DNLI1_DICDI DNA ligase 1 OS=Dictyostelium disco...   103  0.078     1
+sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH P...   104  0.081     1
+sp|O70191|ATF5_MOUSE Cyclic AMP-dependent transcription f...    95  0.085     1
+sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS=Arabido...    96  0.085     1
+sp|Q68EL6|NFIL3_DANRE Nuclear factor interleukin-3-regula...    98  0.085     1
+sp|Q55FW7|GLE1_DICDI Nucleoporin GLE1 OS=Dictyostelium di...   101  0.086     1
+sp|Q3TLH4|BA2L2_MOUSE Protein BAT2-like 2 OS=Mus musculus...    89  0.092     2
+sp|Q04323|UBXN1_HUMAN UBX domain-containing protein 1 OS=...    95  0.092     1
+sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=Trit...    96  0.092     1
+sp|Q9C5Q2|AI5L3_ARATH ABSCISIC ACID-INSENSITIVE 5-like pr...    94  0.094     1
+sp|Q54TD7|DDX24_DICDI ATP-dependent RNA helicase ddx24 OS...   101  0.097     1
+sp|Q5F797|IF2_NEIG1 Translation initiation factor IF-2 OS...   101  0.098     1
+sp|B4RMZ3|IF2_NEIG2 Translation initiation factor IF-2 OS...   101  0.098     1
+sp|Q86AH4|Y8592_DICDI Putative uncharacterized protein DD...    99  0.099     1
+sp|Q8IIG7|YPF05_PLAF7 Uncharacterized protein PF11_0207 O...   101  0.10      1
+sp|B2KI97|THOC2_RHIFE THO complex subunit 2 OS=Rhinolophu...   103  0.11      1
+sp|Q9UM54|MYO6_HUMAN Myosin-VI OS=Homo sapiens GN=MYO6 PE...   102  0.11      1
+sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing protein 1 OS...   100  0.11      1
+sp|Q14244|MAP7_HUMAN Ensconsin OS=Homo sapiens GN=MAP7 PE...    98  0.11      2
+sp|P29596|ATF3_RAT Cyclic AMP-dependent transcription fac...    90  0.11      1
+sp|Q5TM26|BAT2_MACMU Large proline-rich protein BAT2 OS=M...   104  0.11      1
+sp|Q0IHP2|INCE_XENTR Inner centromere protein OS=Xenopus ...   100  0.12      1
+sp|Q9NQS7|INCE_HUMAN Inner centromere protein OS=Homo sap...   100  0.12      1
+sp|Q5HZY0|UBXN4_RAT UBX domain-containing protein 4 OS=Ra...    97  0.12      1
+sp|Q90595|MAFF_CHICK Transcription factor MafF OS=Gallus ...    87  0.12      1
+sp|Q6ZSZ5|ARHGI_HUMAN Rho guanine nucleotide exchange fac...   101  0.12      1
+sp|Q7PS12|MOEH_ANOGA Moesin/ezrin/radixin homolog 1 OS=An...    98  0.12      1
+sp|P12957|CALD1_CHICK Caldesmon OS=Gallus gallus GN=CALD1...    99  0.13      1
+sp|Q08DA8|ATF1_BOVIN Cyclic AMP-dependent transcription f...    93  0.13      1
+sp|Q94126|CES2_CAEEL Cell death specification protein 2 O...    91  0.13      1
+sp|O66547|Y157_AQUAE Uncharacterized protein aq_157 OS=Aq...    88  0.13      1
+sp|A6ZRZ0|NST1_YEAS7 Stress response protein NST1 OS=Sacc...   101  0.13      1
+sp|P53935|NST1_YEAST Stress response protein NST1 OS=Sacc...   101  0.13      1
+sp|A3BYC1|HOX25_ORYSJ Homeobox-leucine zipper protein HOX...    94  0.13      1
+sp|B1AZI6|THOC2_MOUSE THO complex subunit 2 OS=Mus muscul...   102  0.13      1
+sp|Q9H254|SPTN4_HUMAN Spectrin beta chain, brain 3 OS=Hom...   104  0.14      1
+sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kapC O...    93  0.14      1
+sp|Q9JJ50|HGS_RAT Hepatocyte growth factor-regulated tyro...    94  0.14      2
+sp|Q2KII1|ATF3_BOVIN Cyclic AMP-dependent transcription f...    89  0.14      1
+sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcription ...    98  0.14      1
+sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 OS=M...   103  0.14      1
+sp|Q4I877|NDE1_GIBZE Nuclear distribution protein nudE ho...    97  0.14      1
+sp|Q84WU4|GOGC3_ARATH Golgin candidate 3 OS=Arabidopsis t...    98  0.15      1
+sp|Q499N6|UBXN1_RAT UBX domain-containing protein 1 OS=Ra...    93  0.15      1
+sp|B4PPK2|FOSL_DROYA Transcription factor kayak OS=Drosop...    81  0.15      3
+sp|A4R8N4|PAN1_MAGGR Actin cytoskeleton-regulatory comple...   101  0.15      1
+sp|B2AWS3|PAN1_PODAN Actin cytoskeleton-regulatory comple...   101  0.15      1
+sp|Q92545|TM131_HUMAN Transmembrane protein 131 OS=Homo s...   102  0.15      1
+sp|Q38W81|IF2_LACSS Translation initiation factor IF-2 OS...    99  0.16      1
+sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Gallus ga...    94  0.16      1
+sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein delt...    92  0.16      1
+sp|P81269|ATF1_MOUSE Cyclic AMP-dependent transcription f...    92  0.16      1
+sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Avian mus...    94  0.16      1
+sp|P18846|ATF1_HUMAN Cyclic AMP-dependent transcription f...    92  0.16      1
+sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH...   102  0.16      1
+sp|Q4X1V0|NDE1_ASPFU Nuclear distribution protein nudE ho...    95  0.17      2
+sp|Q8R1H8|BATF2_MOUSE Basic leucine zipper transcriptiona...    79  0.17      2
+sp|Q66J36|NFIL3_XENLA Nuclear factor interleukin-3-regula...    95  0.17      1
+sp|P13816|GARP_PLAFF Glutamic acid-rich protein OS=Plasmo...    97  0.17      1
+sp|P38749|YAP3_YEAST AP-1-like transcription factor YAP3 ...    93  0.17      1
+sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mus muscu...    99  0.18      2
+sp|P23923|HBP1B_WHEAT Transcription factor HBP-1b(c38) OS...    93  0.18      1
+sp|Q9D5R3|CCD41_MOUSE Coiled-coil domain-containing prote...    97  0.18      1
+sp|Q9QXL2|KI21A_MOUSE Kinesin-like protein KIF21A OS=Mus ...   101  0.18      1
+sp|Q9UPT6|JIP3_HUMAN C-Jun-amino-terminal kinase-interact...    95  0.18      2
+sp|P16884|NFH_RAT Neurofilament heavy polypeptide OS=Ratt...    99  0.18      1
+sp|Q60765|ATF3_MOUSE Cyclic AMP-dependent transcription f...    88  0.18      1
+sp|Q9N0J3|CEBPD_SHEEP CCAAT/enhancer-binding protein delt...    91  0.18      1
+sp|A5DLJ8|NST1_PICGU Stress response protein NST1 OS=Pich...    99  0.18      1
+sp|A5DHL9|EIF3A_PICGU Eukaryotic translation initiation f...    98  0.19      1
+sp|Q6NXA9|UBXN1_DANRE UBX domain-containing protein 1 OS=...    92  0.19      1
+sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein delt...    91  0.19      1
+sp|O88735|MAP7_MOUSE Ensconsin OS=Mus musculus GN=Map7 PE...    97  0.19      1
+sp|Q99105|MYSU_RABIT Myosin heavy chain, embryonic smooth...    95  0.19      1
+sp|Q9M7Q2|AI5L7_ARATH ABSCISIC ACID-INSENSITIVE 5-like pr...    94  0.20      1
+sp|Q9HCM9|TRI39_HUMAN Tripartite motif-containing protein...    95  0.20      1
+sp|Q1XHU0|TRI39_PANTR Tripartite motif-containing protein...    95  0.20      1
+sp|Q7SHT5|PXR1_NEUCR Protein pxr-1 OS=Neurospora crassa G...    93  0.20      1
+sp|Q32LJ0|CCD23_BOVIN Coiled-coil domain-containing prote...    71  0.21      1
+sp|Q99LQ4|CCD23_MOUSE Coiled-coil domain-containing prote...    71  0.21      1
+sp|Q4KLG3|CCD23_RAT Coiled-coil domain-containing protein...    71  0.21      1
+sp|Q54XG7|DIMA_DICDI Basic-leucine zipper transcription f...    99  0.21      1
+sp|Q54CY3|Y4489_DICDI Putative uncharacterized protein DD...    86  0.21      1
+sp|B0KWH8|THOC2_CALJA THO complex subunit 2 OS=Callithrix...   100  0.21      1
+sp|Q7Z4V5|HDGR2_HUMAN Hepatoma-derived growth factor-rela...    96  0.21      1
+sp|P15205|MAP1B_RAT Microtubule-associated protein 1B OS=...   102  0.22      3
+sp|Q98UK4|MAF_DANRE Transcription factor Maf OS=Danio rer...    92  0.22      1
+sp|O75037|KI21B_HUMAN Kinesin-like protein KIF21B OS=Homo...   108  0.22      2
+sp|Q02040|SF17A_HUMAN Splicing factor, arginine/serine-ri...    96  0.22      1
+sp|P82179|TRDN_CANFA Triadin OS=Canis familiaris GN=TRDN ...    96  0.22      1
+sp|B0WYY2|MOEH_CULQU Moesin/ezrin/radixin homolog 1 OS=Cu...    95  0.22      1
+sp|Q556Q3|IRLF_DICDI Probable serine/threonine-protein ki...    99  0.23      1
+sp|P18847|ATF3_HUMAN Cyclic AMP-dependent transcription f...    87  0.23      1
+sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 OS=Pongo...    95  0.24      1
+sp|Q1RM35|CC104_DANRE Coiled-coil domain-containing prote...    92  0.24      1
+sp|A2Z0Q0|HOX25_ORYSI Homeobox-leucine zipper protein HOX...    90  0.24      1
+sp|P15336|ATF2_HUMAN Cyclic AMP-dependent transcription f...    94  0.24      1
+sp|O88453|SAFB1_RAT Scaffold attachment factor B1 OS=Ratt...    97  0.24      1
+sp|B0YC95|PAN1_ASPFC Actin cytoskeleton-regulatory comple...    99  0.24      1
+sp|Q4WG58|PAN1_ASPFU Actin cytoskeleton-regulatory comple...    99  0.24      1
+sp|A6NC98|CC88B_HUMAN Coiled-coil domain-containing prote...    99  0.25      1
+sp|A6R7X5|PAN1_AJECN Actin cytoskeleton-regulatory comple...    99  0.25      1
+sp|Q05D44|IF2P_MOUSE Eukaryotic translation initiation fa...    98  0.25      1
+sp|P54843|MAF_MOUSE Transcription factor Maf OS=Mus muscu...    92  0.26      1
+sp|O75444|MAF_HUMAN Transcription factor Maf OS=Homo sapi...    92  0.26      1
+sp|A7Z017|MAF_BOVIN Transcription factor Maf OS=Bos tauru...    92  0.26      1
+sp|A5PJN1|TAP26_BOVIN Thyroid transcription factor 1-asso...    89  0.27      1
+sp|O24160|TGA21_TOBAC TGACG-sequence-specific DNA-binding...    93  0.27      1
+sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper transc...    96  0.27      1
+sp|Q5FW38|NFIL3_XENTR Nuclear factor interleukin-3-regula...    93  0.27      1
+sp|Q39163|TGA5_ARATH Transcription factor TGA5 OS=Arabido...    91  0.27      1
+sp|Q90889|MAFG_CHICK Transcription factor MafG OS=Gallus ...    85  0.27      1
+sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcription ...    95  0.28      1
+sp|Q9QXL1|KI21B_MOUSE Kinesin-like protein KIF21B OS=Mus ...   107  0.28      2
+sp|Q5RG44|K1211_DANRE Uncharacterized protein KIAA1211 ho...    97  0.28      1
+sp|P48634|BAT2_HUMAN Large proline-rich protein BAT2 OS=H...   100  0.28      1
+sp|C0QTL9|IF2_PERMH Translation initiation factor IF-2 OS...    96  0.28      1
+sp|P53352|INCE_CHICK Inner centromere protein OS=Gallus g...    96  0.28      1
+sp|Q8BKJ9|SIRT7_MOUSE NAD-dependent deacetylase sirtuin-7...    92  0.29      1
+sp|Q5XIB5|CCD86_RAT Coiled-coil domain-containing protein...    91  0.29      1
+sp|O93602|ATF2_CHICK Cyclic AMP-dependent transcription f...    93  0.29      1
+sp|P16951|ATF2_MOUSE Cyclic AMP-dependent transcription f...    93  0.29      1
+sp|Q5QTY8|IF2_IDILO Translation initiation factor IF-2 OS...    96  0.29      1
+sp|Q6FUQ5|FYV7_CANGA rRNA-processing protein FYV7 OS=Cand...    84  0.29      1
+sp|P37934|MAAY3_SCHCO Mating-type protein A-alpha Y3 OS=S...    97  0.29      2
+sp|Q99089|CPRF1_PETCR Common plant regulatory factor 1 OS...    92  0.29      1
+sp|Q3ZBU9|UBXN4_BOVIN UBX domain-containing protein 4 OS=...    93  0.30      1
+sp|P34511|YMX3_CAEEL Uncharacterized protein K06H7.3 OS=C...    94  0.30      1
+sp|Q8C0Q2|ZHX3_MOUSE Zinc fingers and homeoboxes protein ...    96  0.31      1
+sp|Q5B5B0|PAN1_EMENI Actin cytoskeleton-regulatory comple...    98  0.31      1
+sp|A2AG50|MA7D2_MOUSE MAP7 domain-containing protein 2 OS...    95  0.31      1
+sp|Q4PBP6|NST1_USTMA Stress response protein NST1 OS=Usti...    98  0.31      1
+sp|Q7KZI7|MARK2_HUMAN Serine/threonine-protein kinase MAR...    95  0.31      1
+sp|Q03484|CEBPD_RAT CCAAT/enhancer-binding protein delta ...    89  0.31      1
+sp|Q80VM7|ANR24_MOUSE Ankyrin repeat domain-containing pr...    96  0.32      1
+sp|P54844|MAF_RAT Transcription factor Maf OS=Rattus norv...    91  0.32      1
+sp|B1ZDQ8|IF2_METPB Translation initiation factor IF-2 OS...    96  0.32      1
+sp|Q99LI8|HGS_MOUSE Hepatocyte growth factor-regulated ty...    94  0.32      2
+sp|Q6BUE3|PXR1_DEBHA Protein PXR1 OS=Debaryomyces hanseni...    90  0.32      1
+sp|Q7RWT1|EIF3A_NEUCR Eukaryotic translation initiation f...    96  0.32      1
+sp|Q6ZDF3|TRAB1_ORYSJ bZIP transcription factor TRAB1 OS=...    90  0.32      1
+sp|Q8NI27|THOC2_HUMAN THO complex subunit 2 OS=Homo sapie...    98  0.33      1
+sp|B1MTK1|THOC2_CALMO THO complex subunit 2 OS=Callicebus...    98  0.33      1
+sp|Q8N4C8|MINK1_HUMAN Misshapen-like kinase 1 OS=Homo sap...    93  0.33      2
+sp|P42776|GBF3_ARATH G-box-binding factor 3 OS=Arabidopsi...    91  0.33      1
+sp|A1D9Z7|KAPC_NEOFI Putative transcription factor kapC O...    89  0.34      1
+sp|Q4G091|MICLK_RAT MICAL C-terminal-like protein OS=Ratt...    94  0.34      1
+sp|Q6P788|ATF5_RAT Cyclic AMP-dependent transcription fac...    89  0.34      1
+sp|Q9Y2D1|ATF5_HUMAN Cyclic AMP-dependent transcription f...    89  0.34      1
+sp|P43273|TGA2_ARATH Transcription factor TGA2 OS=Arabido...    90  0.34      1
+sp|Q795Q5|YTTA_BACSU Uncharacterized membrane protein ytt...    88  0.34      1
+sp|Q32LP2|RADI_BOVIN Radixin OS=Bos taurus GN=RDX PE=2 SV=1     93  0.35      1
+sp|Q9PU45|RADI_CHICK Radixin OS=Gallus gallus GN=RDX PE=2...    93  0.35      1
+sp|P35241|RADI_HUMAN Radixin OS=Homo sapiens GN=RDX PE=1 ...    93  0.35      1
+sp|P26044|RADI_PIG Radixin OS=Sus scrofa GN=RDX PE=2 SV=1       93  0.35      1
+sp|Q2KHR3|QSER1_HUMAN Glutamine and serine-rich protein 1...    98  0.35      1
+sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_G028529...    91  0.36      1
+sp|Q99091|CPRF3_PETCR Light-inducible protein CPRF3 OS=Pe...    89  0.36      1
+sp|P30427|PLEC1_RAT Plectin-1 OS=Rattus norvegicus GN=Ple...   102  0.36      1
+sp|Q553B1|DDX46_DICDI ATP-dependent RNA helicase ddx46 OS...    96  0.36      1
+sp|Q5AXH3|TOF1_EMENI Topoisomerase 1-associated factor 1 ...    96  0.37      1
+sp|Q0V9K1|MAF_XENTR Transcription factor Maf OS=Xenopus t...    90  0.37      1
+sp|A6RW62|NST1_BOTFB Stress response protein nst1 OS=Botr...    96  0.37      1
+sp|A7EMM3|NST1_SCLS1 Stress response protein nst1 OS=Scle...    96  0.37      1
+sp|Q869T2|Y7634_DICDI Putative uncharacterized protein DD...    92  0.37      1
+sp|A1DC51|PAN1_NEOFI Actin cytoskeleton-regulatory comple...    97  0.37      1
+sp|Q960X8|HRS_DROME Hepatocyte growth factor-regulated ty...    94  0.37      1
+sp|Q5BJY9|K1C18_RAT Keratin, type I cytoskeletal 18 OS=Ra...    91  0.37      1
+sp|Q6BUT3|NST1_DEBHA Stress response protein NST1 OS=Deba...    96  0.37      1
+sp|A1CD74|PAN1_ASPCL Actin cytoskeleton-regulatory comple...    97  0.37      1
+sp|Q09202|YP23_CAEEL Uncharacterized protein AH6.3 OS=Cae...    87  0.38      1
+sp|B2GUV7|IF2P_RAT Eukaryotic translation initiation fact...    96  0.38      1
+sp|A5F4W4|ZAPB_VIBC3 Cell division protein zapB OS=Vibrio...    68  0.38      1
+sp|Q9KNP5|ZAPB_VIBCH Cell division protein zapB OS=Vibrio...    68  0.38      1
+sp|C3LSB5|ZAPB_VIBCM Cell division protein zapB OS=Vibrio...    68  0.38      1
+sp|P97820|M4K4_MOUSE Mitogen-activated protein kinase kin...    96  0.39      1
+sp|P34099|KAPC_DICDI cAMP-dependent protein kinase cataly...    93  0.39      1
+sp|O95819|M4K4_HUMAN Mitogen-activated protein kinase kin...    96  0.39      1
+sp|P11115|CPC1_NEUCR Cross-pathway control protein 1 OS=N...    88  0.39      1
+sp|P42777|GBF4_ARATH G-box-binding factor 4 OS=Arabidopsi...    88  0.39      1
+sp|A3KMR8|MAFA_DANRE Transcription factor MafA OS=Danio r...    89  0.39      1
+sp|O60132|TEA4_SCHPO Tip elongation aberrant protein Tea4...    94  0.39      1
+sp|Q7KQM6|PERQ1_DROME PERQ amino acid-rich with GYF domai...    97  0.39      1
+sp|Q9ZLW8|PGBA_HELPJ Plasminogen-binding protein pgbA OS=...    91  0.40      1
+sp|O25249|PGBA_HELPY Plasminogen-binding protein pgbA OS=...    91  0.40      1
+sp|Q13164|MK07_HUMAN Mitogen-activated protein kinase 7 O...    83  0.40      2
+sp|Q1DXU0|EIF3A_COCIM Eukaryotic translation initiation f...    95  0.40      1
+sp|O14964|HGS_HUMAN Hepatocyte growth factor-regulated ty...    90  0.41      2
+sp|Q0CUP6|EIF3A_ASPTN Eukaryotic translation initiation f...    95  0.41      1
+sp|A5DXA0|NST1_LODEL Stress response protein NST1 OS=Lodd...    97  0.41      1
+sp|Q4WA21|KAPC_ASPFU Putative transcription factor kapC O...    88  0.41      1
+sp|Q54GQ1|MTMR_DICDI Myotubularin-related protein DDB_G02...    96  0.41      1
+sp|P23614|BASP1_CHICK Brain acid soluble protein 1 homolo...    87  0.41      1
+sp|Q8SSQ0|GEFR_DICDI Ras guanine nucleotide exchange fact...    93  0.41      2
+sp|Q7Z4S6|KI21A_HUMAN Kinesin-like protein KIF21A OS=Homo...    97  0.41      1
+sp|Q2KI00|F107B_BOVIN Protein FAM107B OS=Bos taurus GN=FA...    80  0.41      1
+sp|Q08014|MEDB_GIALA Median body protein OS=Giardia lambl...    94  0.41      1
+sp|Q9M7Q5|AI5L4_ARATH ABSCISIC ACID-INSENSITIVE 5-like pr...    90  0.42      1
+sp|Q09458|YQ37_CAEEL Uncharacterized protein C09F5.7 OS=C...    90  0.42      1
+sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 OS=Rat...    98  0.42      1
+sp|Q9WU62|INCE_MOUSE Inner centromere protein OS=Mus musc...    94  0.42      1
+sp|P26043|RADI_MOUSE Radixin OS=Mus musculus GN=Rdx PE=1 ...    92  0.43      1
+sp|Q12234|RUD3_YEAST GRIP domain-containing protein RUD3 ...    91  0.43      1
+sp|Q98TA5|CA1AA_XENLA Chromatin assembly factor 1 subunit...    94  0.43      1
+sp|Q07E15|CTTB2_MUSPF Cortactin-binding protein 2 OS=Must...    76  0.44      3
+sp|Q1MTN9|RLF2_SCHPO Chromatin assembly factor 1 subunit ...    90  0.44      2
+sp|P07197|NFM_HUMAN Neurofilament medium polypeptide OS=H...    94  0.44      1
+sp|Q6IP50|UBX1A_XENLA UBX domain-containing protein 1-A O...    88  0.44      1
+sp|Q922Y1|UBXN1_MOUSE UBX domain-containing protein 1 OS=...    88  0.44      1
+sp|Q5JR59|MTUS2_HUMAN Microtubule-associated tumor suppre...    84  0.45      2
+sp|P14918|EXTN_MAIZE Extensin OS=Zea mays GN=HRGP PE=2 SV=1     73  0.45      2
+sp|C1D8X2|IF2_LARHH Translation initiation factor IF-2 OS...    94  0.46      1
+sp|Q7SAF6|CEF1_NEUCR Pre-mRNA-splicing factor cef-1 OS=Ne...    93  0.46      1
+sp|A6VLC4|ZAPB_ACTSZ Cell division protein zapB OS=Actino...    67  0.46      1
+sp|P72929|Y1021_SYNY3 Uncharacterized protein sll1021 OS=...    86  0.47      2
+sp|O14273|YET4_SCHPO Meiotically up-regulated protein C8C...    92  0.47      1
+sp|Q6DGM8|JDP2_DANRE Jun dimerization protein 2 OS=Danio ...    82  0.48      1
+sp|Q8GT73|BH119_ARATH Transcription factor bHLH119 OS=Ara...    91  0.48      1
+sp|C1FXW9|THOC2_DASNO THO complex subunit 2 OS=Dasypus no...    96  0.48      1
+sp|P12270|TPR_HUMAN Nucleoprotein TPR OS=Homo sapiens GN=...    88  0.49      2
+sp|P29176|FOSX_MSVFR Transforming protein v-Fos/v-Fox OS=...    86  0.50      1
+sp|Q9UPN4|AZI1_HUMAN 5-azacytidine-induced protein 1 OS=H...    94  0.50      1
+sp|P78559|MAP1A_HUMAN Microtubule-associated protein 1A O...    75  0.51      2
+sp|Q5AVK6|NOP16_EMENI Nucleolar protein 16 OS=Emericella ...    86  0.51      1
+sp|Q9H098|F107B_HUMAN Protein FAM107B OS=Homo sapiens GN=...    79  0.51      1
+sp|P20226|TBP_HUMAN TATA-box-binding protein OS=Homo sapi...    88  0.51      1
+sp|Q08E13|RNF10_BOVIN RING finger protein 10 OS=Bos tauru...    89  0.52      2
+sp|Q9VL63|U430_DROME UPF0430 protein CG31712 OS=Drosophil...    87  0.52      1
+sp|Q13061|TRDN_HUMAN Triadin OS=Homo sapiens GN=TRDN PE=1...    92  0.52      1
+sp|Q9ES64|USH1C_MOUSE Harmonin OS=Mus musculus GN=Ush1c P...    93  0.52      1
+sp|Q86AF3|BZPH_DICDI Probable basic-leucine zipper transc...    92  0.52      2
+sp|Q9Y520|BA2L2_HUMAN Protein BAT2-like 2 OS=Homo sapiens...    98  0.53      1
+sp|Q9LES3|AI5L2_ARATH ABSCISIC ACID-INSENSITIVE 5-like pr...    87  0.53      1
+sp|Q55E93|BZPE_DICDI Probable basic-leucine zipper transc...    89  0.53      1
+sp|Q15147|PLCB4_HUMAN 1-phosphatidylinositol-4,5-bisphosp...    94  0.54      1
+sp|Q9QW07|PLCB4_RAT 1-phosphatidylinositol-4,5-bisphospha...    94  0.54      1
+sp|Q9QWW1|HOME2_MOUSE Homer protein homolog 2 OS=Mus musc...    88  0.54      1
+sp|Q98UK5|MAFB_DANRE Transcription factor MafB OS=Danio r...    88  0.54      1
+sp|Q9JJ89|CCD86_MOUSE Coiled-coil domain-containing prote...    89  0.54      1
+sp|Q499E4|DZI1L_MOUSE Zinc finger protein DZIP1L OS=Mus m...    92  0.55      1
+sp|P34618|CEC1_CAEEL Chromo domain-containing protein cec...    87  0.55      1
+sp|Q75JP5|Y2471_DICDI Calponin homology domain-containing...    95  0.55      2
+sp|Q1E1H4|NST1_COCIM Stress response protein NST1 OS=Cocc...    94  0.55      1
+sp|P05661|MYSA_DROME Myosin heavy chain, muscle OS=Drosop...    96  0.56      1
+sp|Q9UPA5|BSN_HUMAN Protein bassoon OS=Homo sapiens GN=BS...    98  0.56      2
+sp|Q55D99|PAKA_DICDI Serine/threonine-protein kinase pakA...    88  0.57      2
+sp|A5PKL7|LZTS2_BOVIN Leucine zipper putative tumor suppr...    91  0.57      1
+sp|Q7RWR8|CWC26_NEUCR Pre-mRNA-splicing factor cwc-26 OS=...    88  0.57      1
+sp|P35710|SOX5_MOUSE Transcription factor SOX-5 OS=Mus mu...    84  0.57      3
+sp|P24152|EXTN_SORBI Extensin OS=Sorghum bicolor GN=HRGP ...    75  0.58      2
+sp|Q9Z2Q8|FOS_CRIGR Proto-oncogene c-Fos OS=Cricetulus gr...    88  0.58      1
+sp|B4GIF2|EIF3J_DROPE Eukaryotic translation initiation f...    85  0.58      1
+sp|Q8I1E5|EIF3J_DROPS Eukaryotic translation initiation f...    85  0.58      1
+sp|Q9R269|PEPL_MOUSE Periplakin OS=Mus musculus GN=Ppl PE...    93  0.59      2
+sp|P35711|SOX5_HUMAN Transcription factor SOX-5 OS=Homo s...    82  0.59      3
+sp|Q9ZJP4|TONB_HELPJ Protein tonB OS=Helicobacter pylori ...    86  0.59      1
+sp|Q6NY15|TSG10_MOUSE Testis-specific gene 10 protein OS=...    91  0.59      1
+sp|Q9Y4D1|DAAM1_HUMAN Disheveled-associated activator of ...    93  0.59      1
+sp|P28741|KIF3A_MOUSE Kinesin-like protein KIF3A OS=Mus m...    91  0.59      1
+sp|Q9PTD7|CING_XENLA Cingulin OS=Xenopus laevis GN=cgn PE...    94  0.60      1
+sp|O94685|UCP8_SCHPO UBA domain-containing protein 8 OS=S...    92  0.60      1
+sp|P20482|CNC_DROME Segmentation protein cap'n'collar OS=...    94  0.60      1
+sp|P56095|AP1_KLULA AP-1-like transcription factor OS=Klu...    90  0.60      1
+sp|P51984|CREB_CHLVR Cyclic AMP-responsive element-bindin...    85  0.60      1
+sp|Q00969|ATF2_RAT Cyclic AMP-dependent transcription fac...    89  0.61      1
+sp|Q29GR8|MOEH_DROPS Moesin/ezrin/radixin homolog 1 OS=Dr...    90  0.61      1
+sp|Q10PR4|HSFA9_ORYSJ Heat stress transcription factor A-...    88  0.62      1
+sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 OS=Homo ...    90  0.62      1
+sp|Q1LUE5|ZCH18_DANRE Zinc finger CCCH domain-containing ...    93  0.62      1
+sp|B0W6N3|EIF3A_CULQU Eukaryotic translation initiation f...    93  0.62      1
+sp|Q5XJV7|SETD5_MOUSE SET domain-containing protein 5 OS=...    94  0.62      1
+sp|B3EX63|CING_SORAR Cingulin OS=Sorex araneus GN=CGN PE=...    93  0.62      1
+sp|Q2UDY8|PAN1_ASPOR Actin cytoskeleton-regulatory comple...    94  0.63      1
+sp|Q5R7F9|MA7D2_PONAB MAP7 domain-containing protein 2 OS...    91  0.63      1
+sp|O88801|HOME2_RAT Homer protein homolog 2 OS=Rattus nor...    87  0.63      1
+sp|Q8R424|STABP_RAT STAM-binding protein OS=Rattus norveg...    88  0.63      1
+sp|Q6NS15|MED15_XENLA Mediator of RNA polymerase II trans...    91  0.64      1
+sp|Q6RFY2|PHAR3_RAT Phosphatase and actin regulator 3 OS=...    89  0.64      1
+sp|Q8C2B3|HDAC7_MOUSE Histone deacetylase 7 OS=Mus muscul...    71  0.64      2
+sp|Q54DE2|Y4323_DICDI Putative uncharacterized protein DD...    65  0.64      1
+sp|P41425|Y020_NPVAC Uncharacterized 8.0 kDa protein in E...    65  0.64      1
+sp|A3MZY9|ZAPB_ACTP2 Cell division protein zapB OS=Actino...    65  0.64      1
+sp|B3H152|ZAPB_ACTP7 Cell division protein zapB OS=Actino...    65  0.64      1
+sp|O88737|BSN_MOUSE Protein bassoon OS=Mus musculus GN=Bs...    98  0.64      1
+sp|B7GKC7|GRPE_ANOFW Protein grpE OS=Anoxybacillus flavit...    83  0.65      1
+sp|Q9CXK9|RBM33_MOUSE RNA-binding protein 33 OS=Mus muscu...    93  0.65      1
+sp|Q6CJZ6|MED2_KLULA Mediator of RNA polymerase II transc...    84  0.65      2
+sp|P14105|MYH9_CHICK Myosin-9 OS=Gallus gallus GN=MYH9 PE...    95  0.65      1
+sp|A1WLI3|IF2_VEREI Translation initiation factor IF-2 OS...    92  0.65      1
+sp|Q62736|CALD1_RAT Non-muscle caldesmon OS=Rattus norveg...    89  0.65      1
+sp|Q5F3P8|SET1B_CHICK Histone-lysine N-methyltransferase ...    95  0.66      1
+sp|Q96JK9|MAML3_HUMAN Mastermind-like protein 3 OS=Homo s...    96  0.66      2
+sp|Q5NVN6|CEP63_PONAB Centrosomal protein of 63 kDa OS=Po...    89  0.66      1
+sp|Q9ZKY5|PGBB_HELPJ Plasminogen-binding protein pgbB OS=...    89  0.66      1
+sp|P18850|ATF6A_HUMAN Cyclic AMP-dependent transcription ...    90  0.67      1
+sp|Q8N1L9|BATF2_HUMAN Basic leucine zipper transcriptiona...    85  0.67      1
+sp|Q9HD67|MYO10_HUMAN Myosin-X OS=Homo sapiens GN=MYO10 P...    95  0.67      1
+sp|Q0VF49|K2012_HUMAN Uncharacterized protein KIAA2012 OS...    89  0.67      1
+sp|Q9JM52|MINK1_MOUSE Misshapen-like kinase 1 OS=Mus musc...    93  0.67      1
+sp|Q90Z72|NFIL3_CHICK Nuclear factor interleukin-3-regula...    88  0.67      1
+sp|P23050|FOS_AVINK p55-v-Fos-transforming protein OS=Avi...    86  0.67      1
+sp|Q32PF6|DBP_BOVIN D site-binding protein OS=Bos taurus ...    86  0.68      1
+sp|Q10586|DBP_HUMAN D site-binding protein OS=Homo sapien...    86  0.68      1
+sp|Q60925|DBP_MOUSE D site-binding protein OS=Mus musculu...    86  0.68      1
+sp|P16443|DBP_RAT D site-binding protein OS=Rattus norveg...    86  0.68      1
+sp|Q66H89|CCD41_RAT Coiled-coil domain-containing protein...    90  0.68      1
+sp|Q54IE8|IRLE_DICDI Probable serine/threonine-protein ki...    93  0.68      1
+sp|B4RXT8|IF2_ALTMD Translation initiation factor IF-2 OS...    91  0.69      1
+sp|Q4R628|KIF3A_MACFA Kinesin-like protein KIF3A OS=Macac...    90  0.69      1
+sp|P46150|MOEH_DROME Moesin/ezrin/radixin homolog 1 OS=Dr...    89  0.69      1
+sp|A2QUR1|SFH5_ASPNC Phosphatidylinositol transfer protei...    88  0.69      1
+sp|P05411|JUN_AVIS1 Viral jun-transforming protein OS=Avi...    85  0.70      1
+sp|Q5ZIA2|MAP7_CHICK Ensconsin OS=Gallus gallus GN=MAP7 P...    90  0.70      1
+sp|Q09YM8|CTTB2_RABIT Cortactin-binding protein 2 OS=Oryc...    78  0.70      2
+sp|Q0CP15|NST1_ASPTN Stress response protein nst1 OS=Aspe...    92  0.70      1
+sp|A8MPH9|FOSLD_DROME Transcription factor kayak, isoform...    83  0.71      2
+sp|Q9QXS1|PLEC1_MOUSE Plectin-1 OS=Mus musculus GN=Plec1 ...    98  0.71      1
+sp|Q9WVE9|ITSN1_RAT Intersectin-1 OS=Rattus norvegicus GN...    97  0.71      2
+sp|A2QC41|MED21_ASPNC Mediator of RNA polymerase II trans...    82  0.71      1
+
+WARNING:  Descriptions of 665 database sequences were not reported due to the
+          limiting value of parameter V = 500.
+
+NOTE:  You might consider using a low-complexity sequence filter to reduce the
+       number of spurious matches that may be appearing in the output.  See
+       the filter and wordmask options at
+       http://blast.wustl.edu/blast/parameters.html#filter.
+
+
+>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae
+            GN=hacA PE=2 SV=1
+        Length = 345
+
+ Score = 1765 (626.4 bits), Expect = 9.6e-182, P = 9.6e-182
+ Identities = 345/345 (100%), Positives = 345/345 (100%)
+
+Query:     1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG 60
+             MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG
+Sbjct:     1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG 60
+
+Query:    61 QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 120
+             QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ
+Sbjct:    61 QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 120
+
+Query:   121 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD 180
+             QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD
+Sbjct:   121 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD 180
+
+Query:   181 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK 240
+             ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK
+Sbjct:   181 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK 240
+
+Query:   241 HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS 300
+             HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS
+Sbjct:   241 HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS 300
+
+Query:   301 EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 345
+             EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC
+Sbjct:   301 EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 345
+
+
+>sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Emericella nidulans
+            GN=hacA PE=2 SV=2
+        Length = 350
+
+ Score = 1348 (479.6 bits), Expect = 1.5e-137, P = 1.5e-137
+ Identities = 262/332 (78%), Positives = 293/332 (88%)
+
+Query:    13 DSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP 72
+             +SLP TP+ EVPVLTVSPADTSL + +V  Q  KPEEKKPAKKRKSWGQELPVPKTNLPP
+Sbjct:    18 NSLPTTPSLEVPVLTVSPADTSLQTKNVVAQ-TKPEEKKPAKKRKSWGQELPVPKTNLPP 76
+
+Query:    73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132
+             RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE+EKI MEQQNQFLLQRL+QM
+Sbjct:    77 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLESEKIDMEQQNQFLLQRLAQM 136
+
+Query:   133 EAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTP 192
+             EAENNRLSQQ+AQL+AEVRGSR +TP   SPA+ SPTLTPTLFKQE DE+PL+RIPFPTP
+Sbjct:   137 EAENNRLSQQVAQLSAEVRGSRHSTPTSSSPASVSPTLTPTLFKQEGDEVPLDRIPFPTP 196
+
+Query:   193 SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLS 252
+             S++DYSPTLKPS+LAES D+ QHPAVSV GLEGD SAL LFDLG+ +KH  T D+ APLS
+Sbjct:   197 SVTDYSPTLKPSSLAESPDLTQHPAVSVGGLEGDESALTLFDLGASIKHEPTHDLTAPLS 256
+
+Query:   253 DDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAH 312
+             DDDF RLF+GDSS+E DSS+ EDG AFDVL+ GDLSAFPFDSMV+FD+EPVTLE +E  +
+Sbjct:   257 DDDFRRLFNGDSSLESDSSLLEDGFAFDVLDSGDLSAFPFDSMVDFDTEPVTLEDLEQTN 316
+
+Query:   313 GLPDETTCKTSSVQPGFGASTTRCDGQGIAAG 344
+             GL D  +CK +S+QP  GAST+RCDGQGIAAG
+Sbjct:   317 GLSDSASCKAASLQPSHGASTSRCDGQGIAAG 348
+
+
+>sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Trichoderma reesei
+            GN=hac1 PE=2 SV=1
+        Length = 451
+
+ Score = 303 (111.7 bits), Expect = 1.8e-31, Sum P(2) = 1.8e-31
+ Identities = 88/209 (42%), Positives = 112/209 (53%)
+
+Query:     7 KTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66
+             + M + DS+ A   S + V+  S       S           EKKP KKRKSWGQ LP P
+Sbjct:    43 RDMMTPDSV-ADIDSRLSVIPESQDAEDDESHSTSATAPSTSEKKPVKKRKSWGQVLPEP 101
+
+Query:    67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL 126
+             KTNLPPRKRAKTEDEKEQRR+ERVLRNR AAQ+SRERKRLE+E LE       ++N+ L 
+Sbjct:   102 KTNLPPRKRAKTEDEKEQRRVERVLRNRRAAQSSRERKRLEVEALE-------KRNKELE 154
+
+Query:   127 QRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLER 186
+               L  ++  N  L ++L +      G    +  P      S TL+  LF   RD   +  
+Sbjct:   155 TLLINVQKTNLILVEELNRFRRS-SGVVTRSSSPLDSLQDSITLSQQLFGS-RDGQTMSN 212
+
+Query:   187 IPFPTPSLSDY------SPTLKPSTLAES 209
+                P  SL D       +PT+ P++L+ S
+Sbjct:   213 ---PEQSLMDQIMRSAANPTVNPASLSPS 238
+
+ Score = 61 (26.5 bits), Expect = 1.8e-31, Sum P(2) = 1.8e-31
+ Identities = 25/95 (26%), Positives = 45/95 (47%)
+
+Query:   253 DDDFNRLFHGDSSV---EPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIE 309
+             DDD+     GDS+     P  S ++  +   + +  + +A+   +  N+ +    L+ +E
+Sbjct:   361 DDDY---LAGDSAACFTNPLPSDYDFDINDFLTDDANHAAYDIVAASNYAAADRELD-LE 416
+
+Query:   310 MAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAG 344
+             + H   ++   + S  QP  GAS+  CD  GIA G
+Sbjct:   417 I-HDPENQIPSRHSIQQPQSGASSHGCDDGGIAVG 450
+
+
+>sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS=Saccharomyces
+            cerevisiae GN=HAC1 PE=1 SV=2
+        Length = 238
+
+ Score = 184 (69.8 bits), Expect = 9.3e-14, P = 9.3e-14
+ Identities = 69/214 (32%), Positives = 103/214 (48%)
+
+Query:    67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ-NQFL 125
+             K+ LPPRKRAKT++EKEQRRIER+LRNR AA  SRE+KRL ++ LE +   +E   N   
+Sbjct:    23 KSTLPPRKRAKTKEEKEQRRIERILRNRRAAHQSREKKRLHLQYLERKCSLLENLLNSVN 82
+
+Query:   126 LQRLSQME----AENNRLSQQLAQLA--AEVRGSRANTPMPGSPATASPTLTPTLFKQER 179
+             L++L+  E      ++     L +       RG+  +T    S  ++S T TP+      
+Sbjct:    83 LEKLADHEDALTCSHDAFVASLDEYRDFQSTRGASLDTR--ASSHSSSDTFTPS------ 134
+
+Query:   180 DELPLERIPFPTPSLSDYSPTLKPSTLAES-SDVAQHPAVSVAGLEG--DGSALPLFDLG 236
+                PL     P         TL P ++ +S SD      + +   E   + + LP  D  
+Sbjct:   135 ---PLNCTMEPA--------TLSPKSMRDSASDQETSWELQMFKTENVPESTTLPAVD-N 182
+
+Query:   237 SDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS 270
+             ++L       +A PL DD        D+S++ D+
+Sbjct:   183 NNLFDAVASPLADPLCDDIAGNSLPFDNSIDLDN 216
+
+
+>sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidopsis thaliana GN=HY5
+            PE=1 SV=1
+        Length = 168
+
+ Score = 170 (64.9 bits), Expect = 3.4e-12, P = 3.4e-12
+ Identities = 46/146 (31%), Positives = 69/146 (47%)
+
+Query:    10 SSVDSLPATPASEVPVLTVSP---ADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66
+             SS+ S     +S  P L +     +D  +        E   +E    +   + GQE    
+Sbjct:    12 SSLPSSSERSSSSAPHLEIKEGIESDEEIRRVPEFGGEAVGKETSGRESGSATGQERTQA 71
+
+Query:    67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL 126
+                   RKR +T  EKE +R++R+LRNR +AQ +RERK+  + +LEN    +E +N  L 
+Sbjct:    72 TVGESQRKRGRTPAEKENKRLKRLLRNRVSAQQARERKKAYLSELENRVKDLENKNSELE 131
+
+Query:   127 QRLSQMEAENNRLSQQLAQLAAEVRG 152
+             +RLS ++ EN  L   L       RG
+Sbjct:   132 ERLSTLQNENQMLRHILKNTTGNKRG 157
+
+
+>sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum lycopersicum GN=HY5
+            PE=2 SV=1
+        Length = 158
+
+ Score = 140 (54.3 bits), Expect = 7.0e-09, P = 7.0e-09
+ Identities = 35/95 (36%), Positives = 53/95 (55%)
+
+Query:    60 GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME 119
+             GQ  P   T    RKR ++  +KE +R++R+LRNR +AQ +RERK+  +  LE    ++E
+Sbjct:    66 GQAQPSAGTQ---RKRGRSPADKENKRLKRLLRNRVSAQQARERKKAYLIDLEARVKELE 122
+
+Query:   120 QQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+              +N  L +RLS ++ EN  L   L    A  +  R
+Sbjct:   123 TKNAELEERLSTLQNENQMLRHILKNTTAGAQEGR 157
+
+
+>sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos taurus GN=XBP1 PE=2 SV=1
+        Length = 261
+
+ Score = 150 (57.9 bits), Expect = 3.2e-08, P = 3.2e-08
+ Identities = 53/160 (33%), Positives = 81/160 (50%)
+
+Query:    60 GQELPVPK--TNLPP--RKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE 114
+             GQ+   P+  + +PP  RKR + T    E++ + R L+NR AAQT+R+RK+  M +LE +
+Sbjct:    42 GQQGASPEGASGVPPQARKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQ 101
+
+Query:   115 KIQMEQQNQFLL---QRLSQ----MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS 167
+              + +E++NQ LL   Q L +    +  EN  L Q+L  + A V    A T   G+   A 
+Sbjct:   102 VVDLEEENQKLLLENQLLREKTHGLVVENQELRQRLG-MDALVTEEEAETKGNGAGLVAG 160
+
+Query:   168 PTLTPTLFKQERDELPLERIPFPTPSLSDYSP-TLKPSTL 206
+                +  L    R   PL+++      L + SP TL   TL
+Sbjct:   161 SAESAAL----RLRAPLQQVQAQLSPLQNISPWTLMALTL 196
+
+
+>sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo sapiens GN=XBP1 PE=1 SV=2
+        Length = 261
+
+ Score = 150 (57.9 bits), Expect = 3.2e-08, P = 3.2e-08
+ Identities = 55/186 (29%), Positives = 92/186 (49%)
+
+Query:    16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR 75
+             PA    +V +L+  PA  +   A      + P ++  + +  S G    +P+     RKR
+Sbjct:    10 PADGTPKVLLLSGQPASAAGAPAGQALPLMVPAQRGASPEAASGG----LPQA----RKR 61
+
+Query:    76 AK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL---QRLSQ 131
+              + T    E++ + R L+NR AAQT+R+RK+  M +LE + + +E++NQ LL   Q L +
+Sbjct:    62 QRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKLLLENQLLRE 121
+
+Query:   132 ----MEAENNRLSQQL------AQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDE 181
+                 +  EN  L Q+L      A+  AE +G+    P+ GS  +A+  L   L + +   
+Sbjct:   122 KTHGLVVENQELRQRLGMDALVAEEEAEAKGNEVR-PVAGSAESAALRLRAPLQQVQAQL 180
+
+Query:   182 LPLERI 187
+              PL+ I
+Sbjct:   181 SPLQNI 186
+
+
+>sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-binding protein 3-like
+            protein 2 OS=Danio rerio GN=creb3l2 PE=2 SV=1
+        Length = 519
+
+ Score = 156 (60.0 bits), Expect = 3.7e-08, P = 3.7e-08
+ Identities = 51/156 (32%), Positives = 78/156 (50%)
+
+Query:     4 DMEKTMSSVDSL-PATPASEVPVLTVSP-ADTSLNSADVKTQEVKPEEKKPA-----KKR 56
+             D E + S V    PA+P     VL V+P A +SL+S+ + T   K +   P      +KR
+Sbjct:   210 DSEGSQSPVHPCAPASPTQTPAVLKVAPRAPSSLSSSPLLTAPHKLQGSGPLLLTEEEKR 269
+
+Query:    57 KSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKI 116
+                 +  PVP T LP  K     +EK  ++I R ++N+ +AQ SR +K+  ++ LE +  
+Sbjct:   270 TLIAEGYPVP-TKLPLSKA----EEKALKKIRRKIKNKISAQESRRKKKEYVDALEKKVE 324
+
+Query:   117 QMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG 152
+                 +N  L +++  +E  N  L QQL  L A V G
+Sbjct:   325 TCSNENHELRRKVENLECTNKSLLQQLHSLQAVVAG 360
+
+
+>sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arabidopsis thaliana
+            GN=HYH PE=1 SV=1
+        Length = 149
+
+ Score = 127 (49.8 bits), Expect = 1.9e-07, P = 1.9e-07
+ Identities = 25/71 (35%), Positives = 45/71 (63%)
+
+Query:    73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132
+             R+R +   +KE R ++R+LRNR +AQ +RERK++ +  LE+   +++  N  L +++S +
+Sbjct:    68 RRRGRNPVDKEYRSLKRLLRNRVSAQQARERKKVYVSDLESRANELQNNNDQLEEKISTL 127
+
+Query:   133 EAENNRLSQQL 143
+               EN  L + L
+Sbjct:   128 TNENTMLRKML 138
+
+
+>sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=Pichia stipitis GN=NST1
+            PE=3 SV=2
+        Length = 1234
+
+ Score = 148 (57.2 bits), Expect = 9.6e-07, P = 9.6e-07
+ Identities = 57/195 (29%), Positives = 95/195 (48%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+             + +E+K +E++  KK ++  ++    K  L   ++ K E+E++++  E+  +     Q  
+Sbjct:   727 RIEELKRKEEEHKKKVEAQQKKEEEAK-KLKEERKKKAEEERKKKEEEKRQKELLKKQKE 785
+
+Query:   101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160
+              ER+RL++E  ENE+++ EQQ       L +++   N+L  + AQL AE+     N    
+Sbjct:   786 EERERLKLEAEENERLEKEQQE------LQELQESQNQLELESAQLPAEL-AEEINA--- 835
+
+Query:   161 GSPATASPTLTPTLFKQERDELPLERIPFPT---PSLSDYSPTLKPSTLAESSDVAQ--- 214
+              SP + SPT    L +Q     P   +  PT   P +  ++P   P   A SS V     
+Sbjct:   836 -SPDSFSPTKNH-LLEQLYQARP-SSVSGPTTISPPIQ-FTPEAVPPVAAVSSVVPSVVP 891
+
+Query:   215 -HPAVSVAGLEGDGS 228
+               PA+S A L G GS
+Sbjct:   892 ISPALSGAILNGTGS 906
+
+ Score = 102 (41.0 bits), Expect = 0.11, P = 0.10
+ Identities = 43/168 (25%), Positives = 78/168 (46%)
+
+Query:    40 VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 99
+             V+ Q+ K EE K  K+ +    E    K     R++   + +KE+ R ER L+  A    
+Sbjct:   742 VEAQQKKEEEAKKLKEERKKKAEEERKKKEEEKRQKELLKKQKEEER-ER-LKLEAEENE 799
+
+Query:   100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRANTP 158
+               E+++ E+++L+  + Q+E ++  L   L++ + A  +  S     L  ++  +R ++ 
+Sbjct:   800 RLEKEQQELQELQESQNQLELESAQLPAELAEEINASPDSFSPTKNHLLEQLYQARPSS- 858
+
+Query:   159 MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL 206
+             + G P T SP   P  F  E    P+  +    PS+   SP L  + L
+Sbjct:   859 VSG-PTTISP---PIQFTPEAVP-PVAAVSSVVPSVVPISPALSGAIL 901
+
+
+>sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-binding protein 3-like
+            protein 2 OS=Homo sapiens GN=CREB3L2 PE=1 SV=2
+        Length = 520
+
+ Score = 136 (52.9 bits), Expect = 6.4e-06, P = 6.4e-06
+ Identities = 44/146 (30%), Positives = 70/146 (47%)
+
+Query:    14 SLPAT--PASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP 71
+             SLP T  P+   P    + + + L +A  K Q   P      +KR    +  P+P T LP
+Sbjct:   228 SLPQTHSPSRAAPRAPSALSSSPLLTAPHKLQGSGPLVLTEEEKRTLIAEGYPIP-TKLP 286
+
+Query:    72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+               K     +EK  ++I R ++N+ +AQ SR +K+  M+ LE +      +N  L +++  
+Sbjct:   287 LSK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEV 342
+
+Query:   132 MEAENNRLSQQLAQLAAEVRGSRANT 157
+             +E  N  L QQL +L   V G  + T
+Sbjct:   343 LENTNRTLLQQLQKLQTLVMGKVSRT 368
+
+
+>sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-binding protein 3-like
+            protein 2 OS=Pongo abelii GN=CREB3L2 PE=2 SV=1
+        Length = 520
+
+ Score = 136 (52.9 bits), Expect = 6.4e-06, P = 6.4e-06
+ Identities = 44/146 (30%), Positives = 70/146 (47%)
+
+Query:    14 SLPAT--PASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP 71
+             SLP T  P+   P    + + + L +A  K Q   P      +KR    +  P+P T LP
+Sbjct:   228 SLPQTHSPSRAAPRAPSALSSSPLLTAPHKLQGSGPLVLTEEEKRTLIAEGYPIP-TKLP 286
+
+Query:    72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+               K     +EK  ++I R ++N+ +AQ SR +K+  M+ LE +      +N  L +++  
+Sbjct:   287 LTK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEV 342
+
+Query:   132 MEAENNRLSQQLAQLAAEVRGSRANT 157
+             +E  N  L QQL +L   V G  + T
+Sbjct:   343 LENTNRTLLQQLQKLQTLVMGKVSRT 368
+
+
+>sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-binding protein 3-like
+            protein 2 OS=Mus musculus GN=Creb3l2 PE=2 SV=1
+        Length = 521
+
+ Score = 136 (52.9 bits), Expect = 6.5e-06, P = 6.5e-06
+ Identities = 71/291 (24%), Positives = 120/291 (41%)
+
+Query:    18 TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK 77
+             +PA  +P    + + + L +A  K Q   P      +KR    +  P+P T LP  K   
+Sbjct:   234 SPARAMPRGPSALSTSPLLTAPHKLQGSGPLVLTEEEKRTLVAEGYPIP-TKLPLTK--- 289
+
+Query:    78 TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN 137
+               +EK  ++I R ++N+ +AQ SR +K+  M+ LE +      +N  L +++  +E  N 
+Sbjct:   290 -SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNR 348
+
+Query:   138 RLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTL-FKQERDELPLERIPFPTPS--- 193
+              L QQL +L   V G  + T       T +  +   L F            P+P+ +   
+Sbjct:   349 TLLQQLQKLQTLVMGKVSRTCKLAGTQTGTCLMVVVLCFAVAFGSFFQGYGPYPSATKMA 408
+
+Query:   194 LSDYSPTLKPST--LAESSDVA---QHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVA 248
+             L    P  +P T  +  S ++    +H  +  +        L  +D GS L   S+   A
+Sbjct:   409 LPSQHPLSEPYTASVVRSRNLLIYEEHAPLEESSSPASAGELGGWDRGSSLLRASSGLEA 468
+
+Query:   249 APLSDDDFNRLFHGDSSVEPDSSV-FEDGLAFDVLEGGD-LSAFPFDSMVN 297
+              P  D   + L   ++S+E    +  +  L    LEG + L     +  VN
+Sbjct:   469 LPEVDLP-HFLISNETSLEKSVLLELQQHLVSSKLEGNETLKVVELERRVN 518
+
+
+>sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding protein 3 OS=Mus
+            musculus GN=Creb3 PE=2 SV=2
+        Length = 404
+
+ Score = 132 (51.5 bits), Expect = 1.2e-05, P = 1.2e-05
+ Identities = 54/194 (27%), Positives = 90/194 (46%)
+
+Query:    26 LTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQR 85
+             +T  P +      ++    +  EEKK  +K     + L +P T LP  K     +E+  +
+Sbjct:   138 VTPLPGEERAAEQEMSRLILTEEEKKLLEK-----EGLTLPST-LPLTK----VEEQVLK 187
+
+Query:    86 RIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQ 145
+             R+ R +RN+ AAQ SR++K++ +  LE+  ++   QN+ L  ++ ++E +N  L  QL +
+Sbjct:   188 RVRRKIRNKRAAQESRKKKKVYVVGLESRVLKYTAQNRELQNKVQRLEEQNLSLLDQLRK 247
+
+Query:   146 LAAEVRGSRANTPMPGSPATASPT------LTPTLFKQE-RDELPLERIPF-----PTPS 193
+             L A V    AN    GS             L P ++  + R  +P E +         PS
+Sbjct:   248 LQAMVI-EIANKTSSGSTCVLVLVFSFCLLLVPAMYSSDARGSVPAEYVVLHRKLRALPS 306
+
+Query:   194 LSDYSPTLKPSTLA 207
+               D+ P  KPS L+
+Sbjct:   307 EDDHQP--KPSALS 318
+
+
+>sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-binding protein 3-like
+            protein 2 OS=Xenopus laevis GN=creb3l2 PE=2 SV=1
+        Length = 525
+
+ Score = 133 (51.9 bits), Expect = 1.4e-05, P = 1.4e-05
+ Identities = 45/156 (28%), Positives = 77/156 (49%)
+
+Query:     4 DMEKTMSSVDSLP-ATPA-SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPA-----KKR 56
+             D E   S   SLP ++P  S+      + + ++L+++ + T   K +   P      +KR
+Sbjct:   218 DSEGGQSPTRSLPPSSPVQSQAGGKMAARSPSALSNSPLLTAPHKLQGSGPLMLTEEEKR 277
+
+Query:    57 KSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKI 116
+                 +  P+P T LP  K     +EK  ++I R ++N+ +AQ SR +K+  M+ LE    
+Sbjct:   278 TLVAEGYPIP-TKLPLTKA----EEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKRVE 332
+
+Query:   117 QMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG 152
+                 +N  L +++  +E+ N  L QQL +L A V G
+Sbjct:   333 NSSSENSELRKKVEVLESTNRTLLQQLQRLQAMVTG 368
+
+
+>sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-binding protein 3-like
+            protein 1 OS=Rattus norvegicus GN=Creb3l1 PE=2 SV=1
+        Length = 520
+
+ Score = 131 (51.2 bits), Expect = 2.3e-05, P = 2.3e-05
+ Identities = 68/222 (30%), Positives = 102/222 (45%)
+
+Query:    14 SLPATPASEV-PVLTVSPA-DTS-LNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTN 69
+             SLP  P+S V P+   S A  TS L +A  K Q    P      +KR    +  P+P T 
+Sbjct:   223 SLP--PSSPVRPMARSSTAISTSPLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TK 279
+
+Query:    70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             LP  K     +EK  +R+ R ++N+ +AQ SR +K+  +E LE +      +N  L +++
+Sbjct:   280 LPLTKA----EEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETYTSENNELWKKV 335
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF 189
+               +E  N  L QQL +L   V  S+ + P       A+ T T  +       L L  +  
+Sbjct:   336 ETLETANRTLLQQLQKLQTLVT-SKISRPYK---MAATQTGTCLMVAALCFVLVLGSLAP 391
+
+Query:   190 PTPSLSDYSPTLKPSTLAESSDVA--QHPAVSVAGLE-GDGS 228
+               P+ S  S T+K   +A  S  A  Q P+ S+   + G GS
+Sbjct:   392 CLPAFSSGSKTVKEDPVAADSVYAASQMPSRSLLFYDDGAGS 433
+
+
+>sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper transcription factor F
+            OS=Dictyostelium discoideum GN=bzpF PE=3 SV=1
+        Length = 631
+
+ Score = 132 (51.5 bits), Expect = 2.4e-05, P = 2.4e-05
+ Identities = 57/233 (24%), Positives = 101/233 (43%)
+
+Query:    46 KPEEKKPAKKRKSWGQELPVPKTN----LPPRKRA--KTEDEKEQRRIERVLRNRAAAQT 99
+             K EE K  KKRK +    PV   N    L P        ++E+ Q+R  R+++NR AAQ 
+Sbjct:   363 KKEEDKSIKKRK-FISSTPVKGENGGTTLIPTTDGGFNMDEERHQKRQRRLVKNREAAQL 421
+
+Query:   100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA-NTP 158
+              R+R++  ++ LE +   +   N     R+  + +EN  + +QL  L   V  + + + P
+Sbjct:   422 FRQRQKAYIQDLEKKVSDLTGTNSEFRARVELLNSENKLIREQLLYLRNFVTQAVSFSFP 481
+
+Query:   159 MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV 218
+               GS  T SP+     F        L   P P   L        P  ++  ++ A   + 
+Sbjct:   482 KGGSNGTNSPSGVADQFLNSILPPGLNS-PLPQGILPAGMNLQNPMIMSAIAEAASKNST 540
+
+Query:   219 SVAGLEGDGSALPLFDLGSDLKHHSTDDVA-APLSDDDFNRLFHGDSSVEPDS 270
+                 ++G+    P+    S L  +S ++    PL++++ N   + +++  P S
+Sbjct:   541 FRQNIQGNLLGTPIPSPQSSLTSNSGNNSPNKPLNNNNNNNNINNNNNNNPSS 593
+
+
+>sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-binding protein 3-like
+            protein 1 OS=Mus musculus GN=Creb3l1 PE=2 SV=2
+        Length = 519
+
+ Score = 130 (50.8 bits), Expect = 3.0e-05, P = 3.0e-05
+ Identities = 68/222 (30%), Positives = 102/222 (45%)
+
+Query:    14 SLPATPASEV-PVLTVSPA-DTS-LNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTN 69
+             SLP  P+S V P+   S A  TS L +A  K Q    P      +KR    +  P+P T 
+Sbjct:   224 SLP--PSSPVRPMARSSTAISTSPLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TK 280
+
+Query:    70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             LP  K     +EK  +R+ R ++N+ +AQ SR +K+  +E LE +      +N  L +++
+Sbjct:   281 LPLTKA----EEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETYTSENNELWKKV 336
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF 189
+               +E  N  L QQL +L   V  S+ + P       A+ T T  +       L L  +  
+Sbjct:   337 ETLETANRTLLQQLQKLQTLVT-SKISRPYK---MAATQTGTCLMVAALCFVLVLGSLVP 392
+
+Query:   190 PTPSLSDYSPTLKPSTLAESSDVA--QHPAVSVAGLE-GDGS 228
+               P+ S  S T+K   +A  S  A  Q P+ S+   + G GS
+Sbjct:   393 CLPAFSSGSMTVKEDPIAADSVYAASQMPSRSLLFYDDGAGS 434
+
+
+>sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcriptional factor ATF-like 3
+            OS=Homo sapiens GN=BATF3 PE=1 SV=1
+        Length = 127
+
+ Score = 104 (41.7 bits), Expect = 6.0e-05, P = 6.0e-05
+ Identities = 22/77 (28%), Positives = 42/77 (54%)
+
+Query:    69 NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQR 128
+             N P  +  +   E + R++ R  +NR AAQ SR+++  + +KL  E   +EQ+N  L + 
+Sbjct:    21 NQPQPQPQQQSPEDDDRKVRRREKNRVAAQRSRKKQTQKADKLHEEYESLEQENTMLRRE 80
+
+Query:   129 LSQMEAENNRLSQQLAQ 145
+             + ++  E   L++ L +
+Sbjct:    81 IGKLTEELKHLTEALKE 97
+
+
+>sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcriptional factor ATF-like 3
+            OS=Mus musculus GN=Batf3 PE=2 SV=1
+        Length = 118
+
+ Score = 104 (41.7 bits), Expect = 6.0e-05, P = 6.0e-05
+ Identities = 21/63 (33%), Positives = 39/63 (61%)
+
+Query:    83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+             + R++ R  +NR AAQ SR+++  + +KL  E   +EQ+N  L + +S+++ E   LS+ 
+Sbjct:    28 DDRKVRRREKNRVAAQRSRKKQTQKADKLHEEHESLEQENSVLRREISKLKEELRHLSEV 87
+
+Query:   143 LAQ 145
+             L +
+Sbjct:    88 LKE 90
+
+
+>sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-binding protein 3-like
+            protein 1 OS=Homo sapiens GN=CREB3L1 PE=1 SV=1
+        Length = 519
+
+ Score = 127 (49.8 bits), Expect = 6.4e-05, P = 6.4e-05
+ Identities = 66/223 (29%), Positives = 101/223 (45%)
+
+Query:    14 SLPATPASEV-PVLTVSPA-DTS-LNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTN 69
+             SLP  P+S V P+   S A  TS L +A  K Q    P      +KR    +  P+P T 
+Sbjct:   224 SLP--PSSPVRPMARSSTAISTSPLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TK 280
+
+Query:    70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             LP  K     +EK  +R+ R ++N+ +AQ SR +K+  +E LE +      +N  L +++
+Sbjct:   281 LPLTKA----EEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETFTSENNELWKKV 336
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF 189
+               +E  N  L QQL +L   V  ++ + P       A+ T T  +       L L  +  
+Sbjct:   337 ETLENANRTLLQQLQKLQTLVT-NKISRPYK---MAATQTGTCLMVAALCFVLVLGSLVP 392
+
+Query:   190 PTPSLSDYSPTLKPSTLAESS--DVAQHPAVSVAGLEGDGSAL 230
+               P  S  S T+K   LA       +Q P+ S+   + DG+ L
+Sbjct:   393 CLPEFSSGSQTVKEDPLAADGVYTASQMPSRSLLFYD-DGAGL 434
+
+
+>sp|O88778|BSN_RAT Protein bassoon OS=Rattus norvegicus GN=Bsn PE=1 SV=3
+        Length = 3938
+
+ Score = 136 (52.9 bits), Expect = 7.2e-05, P = 7.2e-05
+ Identities = 59/227 (25%), Positives = 102/227 (44%)
+
+Query:    15 LPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRK 74
+             LPA  A E P+ T +P    +  A V      P  +KPA    + G    V    +  ++
+Sbjct:  2294 LPAGGAREEPLSTTAPPAV-IKEAPVAQAPAPPPGQKPAGDAAA-GSGSGVLGRPVMEKE 2351
+
+Query:    75 RAKTEDE--KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME---QQNQFLLQR- 128
+              A  ED   K+Q ++ ++ R R   +  R+  RL+ E+LE E+++++   ++ Q L+QR 
+Sbjct:  2352 EASQEDRQRKQQEQLLQLERERVELEKLRQL-RLQ-EELERERVELQRHREEEQLLVQRE 2409
+
+Query:   129 LSQMEA-ENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERI 187
+             L +++  +++ L QQ  +  A+    R               L   L +Q  ++   ++ 
+Sbjct:  2410 LQELQTIKHHVLQQQQEERQAQFALQREQLAQQRLQLEQIQQLQQQLQQQLEEQKQRQKA 2469
+
+Query:   188 PFP-TPSLSDYSPTLKPSTLAESSDV---AQHPA-VSVAGLEGDGSA 229
+             PFP T       P    + LA++        H A ++VAG EG G A
+Sbjct:  2470 PFPATCEAPSRGPPPAATELAQNGQYWPPLTHTAFIAVAGTEGPGQA 2516
+
+ Score = 111 (44.1 bits), Expect = 0.039, P = 0.039
+ Identities = 47/191 (24%), Positives = 87/191 (45%)
+
+Query:    12 VDSLPATPASEVPVLTVSPADTS--LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN 69
+             V   PA P  + P    +    S  L    ++ +E   E+++  +K++    +L   +  
+Sbjct:  2318 VAQAPAPPPGQKPAGDAAAGSGSGVLGRPVMEKEEASQEDRQ--RKQQEQLLQLERERVE 2375
+
+Query:    70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ---QNQFLL 126
+             L   ++ + ++E E+ R+E + R+R   Q   +R+  E++ +++  +Q +Q   Q QF L
+Sbjct:  2376 LEKLRQLRLQEELERERVE-LQRHREEEQLLVQRELQELQTIKHHVLQQQQEERQAQFAL 2434
+
+Query:   127 QR--LSQ--MEAEN-NRLSQQLAQLAAEVRGSRANTPMPGS---PATASPTLTPTLFKQE 178
+             QR  L+Q  ++ E   +L QQL Q   E +  R   P P +   P+   P     L +  
+Sbjct:  2435 QREQLAQQRLQLEQIQQLQQQLQQQLEEQK-QRQKAPFPATCEAPSRGPPPAATELAQNG 2493
+
+Query:   179 RDELPLERIPF 189
+             +   PL    F
+Sbjct:  2494 QYWPPLTHTAF 2504
+
+
+>sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-binding protein 3-like
+            protein 2 OS=Rattus norvegicus GN=Creb3l2 PE=2 SV=1
+        Length = 521
+
+ Score = 125 (49.1 bits), Expect = 0.00011, P = 0.00011
+ Identities = 41/130 (31%), Positives = 63/130 (48%)
+
+Query:    29 SPADTS-LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRI 87
+             S   TS L +A  K Q   P      +KR    +  P+P T LP  K     +EK  ++I
+Sbjct:   244 SALSTSPLLTAPHKLQGSGPLVLTEEEKRTLIAEGYPIP-TKLPLTK----SEEKALKKI 298
+
+Query:    88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147
+              R ++N+ +AQ SR +K+  M+ LE +      +N  L +++  +E  N  L QQL +L 
+Sbjct:   299 RRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQ 358
+
+Query:   148 AEVRGSRANT 157
+               V G  + T
+Sbjct:   359 TLVMGKVSRT 368
+
+
+>sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase 7 OS=Mus musculus
+            GN=Mapk7 PE=1 SV=1
+        Length = 806
+
+ Score = 127 (49.8 bits), Expect = 0.00012, P = 0.00012
+ Identities = 71/258 (27%), Positives = 109/258 (42%)
+
+Query:     3 CDMEKTMSSVDSLP--ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR---K 57
+             C ME   S   +LP  + PA +   LT+ PA  +   A  K +    +  K A K    K
+Sbjct:   429 CAME---SPPPALPPCSDPAPDTVDLTLQPAPPASELAPPKREGAISDNTKAALKAALLK 485
+
+Query:    58 SWGQEL---PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE 114
+             S    L   P      P  ++  T  E+++ R E+  R +  A+  RE++R E E+ E  
+Sbjct:   486 SLRSRLRDGPSAPLEAPEPRKPVTAQERQREREEKRRRRQERAK-EREKRRQERERKERG 544
+
+Query:   115 KIQMEQQNQFLLQRLSQMEAENNR-LSQQLAQLAAEVRGSRANTPMPG-SPATASPTLTP 172
+                +   +   L  L  + ++N+R L ++  ++A     + A  P P  +P++A PT TP
+Sbjct:   545 AGTLGGPSTDPLAGL--VLSDNDRSLLERWTRMARPPAPAPAPAPAPAPAPSSAQPTSTP 602
+
+Query:   173 T-LFKQERDEL-PLERIPFPT--PSLSDYSPTLKPS--------TLAESSDVAQHPAVSV 220
+             T    Q    L P   IP P   P      P  +P+        T   +S +A    V  
+Sbjct:   603 TGPVSQSTGPLQPAGSIPGPASQPVCPPPGPVPQPAGPIPAPLQTAPSTSLLASQSLVPP 662
+
+Query:   221 AGLEGDGS--ALPLFDLG 236
+             +GL G G+   LP F  G
+Sbjct:   663 SGLPGSGAPEVLPYFPSG 680
+
+
+>sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-binding protein 3-like
+            protein 4 OS=Xenopus tropicalis GN=creb3l4 PE=2 SV=1
+        Length = 428
+
+ Score = 123 (48.4 bits), Expect = 0.00013, P = 0.00013
+ Identities = 36/129 (27%), Positives = 63/129 (48%)
+
+Query:    24 PVLTVSPADTSLNSAD-VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK 82
+             PV   +P    L  AD +    + PE     ++++   QE      NLP  K     +E+
+Sbjct:   160 PVCKSTPLPIRLTPADLIAVDALYPELHLTEEEKRLLSQEGVALPNNLPLTKA----EER 215
+
+Query:    83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+               +++ R +RN+ +AQ SR RK+  ++ LE+       QNQ L +++ ++E  N  L  Q
+Sbjct:   216 ILKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSSQNQELHKKVVELEKHNISLITQ 275
+
+Query:   143 LAQLAAEVR 151
+             L +L   ++
+Sbjct:   276 LRKLQTLIK 284
+
+
+>sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptional factor ATF-like
+            OS=Homo sapiens GN=BATF PE=1 SV=1
+        Length = 125
+
+ Score = 100 (40.3 bits), Expect = 0.00016, P = 0.00016
+ Identities = 28/90 (31%), Positives = 45/90 (50%)
+
+Query:    71 PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS 130
+             PP K+  ++D    RR++R  +NR AAQ SR+R+  + + L  E   +E+QN  L + + 
+Sbjct:    17 PPGKQDSSDDV---RRVQRREKNRIAAQKSRQRQTQKADTLHLESEDLEKQNAALRKEIK 73
+
+Query:   131 QMEAENNRLSQQLAQLAAEVRGSRANTPMP 160
+             Q+  E    +  L           A+TP P
+Sbjct:    74 QLTEELKYFTSVLNSHEPLCSVLAASTPSP 103
+
+
+>sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding protein 3-like
+            protein 4 OS=Mus musculus GN=Creb3l4 PE=1 SV=1
+        Length = 370
+
+ Score = 121 (47.7 bits), Expect = 0.00017, P = 0.00017
+ Identities = 41/138 (29%), Positives = 68/138 (49%)
+
+Query:    18 TPASEVP-VLTVS--PADTSLNSAD-VKTQEVKPEEKKPAKKRKSW-----GQELPVPKT 68
+             TPA  VP   TVS  P+D+  +    V T+   P    P+ +   +      Q L     
+Sbjct:   119 TPALMVPDACTVSGLPSDSHRHILPRVSTRAPAPPAAMPSCQHHLFLTDEEKQLLAQEGI 178
+
+Query:    69 NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQR 128
+              LP        +E+  ++I R +RN+ +AQ SR RK+  ++ LE+      +QNQ L ++
+Sbjct:   179 TLPSHLPLTKAEERILKKIRRKIRNKQSAQDSRRRKKEYLDGLESRVAACSEQNQKLQRK 238
+
+Query:   129 LSQMEAENNRLSQQLAQL 146
+             + ++E +N  L +Q+ QL
+Sbjct:   239 VQELERQNIFLMEQVRQL 256
+
+ Score = 92 (37.4 bits), Expect = 0.30, P = 0.26
+ Identities = 27/90 (30%), Positives = 49/90 (54%)
+
+Query:    70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE---------NEKIQ--- 117
+             LP        +E+  ++I R +RN+ +AQ SR RK+  ++ LE         N+K+Q   
+Sbjct:   180 LPSHLPLTKAEERILKKIRRKIRNKQSAQDSRRRKKEYLDGLESRVAACSEQNQKLQRKV 239
+
+Query:   118 --MEQQNQFLLQRLSQMEAENNRLSQQLAQ 145
+               +E+QN FL++++ Q++    + S + AQ
+Sbjct:   240 QELERQNIFLMEQVRQLQKLTAQTSSRAAQ 269
+
+
+>sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS=Petroselinum crispum
+            GN=CPRF2 PE=2 SV=2
+        Length = 401
+
+ Score = 121 (47.7 bits), Expect = 0.00020, P = 0.00020
+ Identities = 30/103 (29%), Positives = 50/103 (48%)
+
+Query:    80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139
+             D  + +R+ R+L NR +A+ SR RK+  M +LE +  Q+  +N  LL+RL+ +    N  
+Sbjct:   195 DPSDAKRVRRMLSNRESARRSRRRKQAHMTELETQVSQLRVENSSLLKRLTDISQRYNDA 254
+
+Query:   140 SQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDEL 182
+             +     L A++   RA   M          L P +F+    E+
+Sbjct:   255 AVDNRVLKADIETMRAKVKMAEETVKRVTGLNP-MFQSMSSEI 296
+
+
+>sp|P97876|BATF3_RAT Basic leucine zipper transcriptional factor ATF-like 3
+            OS=Rattus norvegicus GN=Batf3 PE=1 SV=1
+        Length = 133
+
+ Score = 99 (39.9 bits), Expect = 0.00021, P = 0.00021
+ Identities = 19/63 (30%), Positives = 39/63 (61%)
+
+Query:    83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+             + R++ R  +NR AAQ SR+++  + +KL  E   +EQ+N  L + +++++ E   L++ 
+Sbjct:    28 DDRKVRRREKNRVAAQRSRKKQTQKSDKLHEEHESLEQENSVLRREIAKLKEELRHLTEA 87
+
+Query:   143 LAQ 145
+             L +
+Sbjct:    88 LKE 90
+
+
+>sp|Q5B3C8|NST1_EMENI Stress response protein nst1 OS=Emericella nidulans
+            GN=nst1 PE=3 SV=1
+        Length = 1125
+
+ Score = 125 (49.1 bits), Expect = 0.00029, P = 0.00029
+ Identities = 60/227 (26%), Positives = 99/227 (43%)
+
+Query:    31 ADTSLNSADVKT-QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER 89
+             A  +   A  K  QE K EE++  K+ +   +E    +      +RA+ E EK +R  E 
+Sbjct:   515 AQKAAEEAAAKAEQERKLEEQRKKKEEQRKKREA---ERKAQEEERARKEAEKHKRLREE 571
+
+Query:    90 VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA---QL 146
+               R   A +  RE+K  E ++ E  K + E++ + L ++ ++ E E     +Q     + 
+Sbjct:   572 RERQEEAERRQREQKEQEKKRREEAK-RKEREERELREQKAKQERERKAQDEQSRRERER 630
+
+Query:   147 AAEVRGSRANTPMPGSPATASP-TLTPTLFKQERDELPLE-RIPFPTPSLSDYSPTLKPS 204
+              A+ +  RA    P SP +  P + TP + K      P + R P    S S  SP  + S
+Sbjct:   631 VAQEQAKRAPNLQPVSPVSPPPESATPVVSKAPT---PAKGRRPSQQGSHSS-SPRSQ-S 685
+
+Query:   205 TLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPL 251
+               AE+S V+   A      +  GS++P +  G  + H       +PL
+Sbjct:   686 ASAEASQVSPRSAPLS---QSSGSSIPKYGSGHPILHPHPGAPMSPL 729
+
+
+>sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding protein 3-like
+            protein 3 OS=Mus musculus GN=Creb3l3 PE=2 SV=1
+        Length = 479
+
+ Score = 115 (45.5 bits), Expect = 0.00030, Sum P(2) = 0.00030
+ Identities = 38/115 (33%), Positives = 59/115 (51%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             +EKK   K    G  LP   T LP  K     +E+  ++I R +RN+ +AQ SR++K+  
+Sbjct:   214 DEKKLLAKE---GVTLP---TQLPLTKY----EERVLKKIRRKIRNKQSAQESRKKKKEY 263
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS 162
+             ++ LEN       QNQ L +++  +E +N  L +QL  L A V  S +     G+
+Sbjct:   264 IDGLENRMSACTAQNQELQRKVLHLEKQNLSLLEQLKHLQALVVQSTSKPAHAGT 318
+
+ Score = 47 (21.6 bits), Expect = 0.00030, Sum P(2) = 0.00030
+ Identities = 12/42 (28%), Positives = 19/42 (45%)
+
+Query:    15 LPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR 56
+             LP+TP  E P   V  +  +++     T  + PEE   +  R
+Sbjct:   130 LPSTPCPEPPRTQVQESSVAIDLDMWSTDTLYPEEPAGSPSR 171
+
+
+>sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding protein 3-like
+            protein 3 OS=Bos taurus GN=CREB3L3 PE=2 SV=1
+        Length = 456
+
+ Score = 120 (47.3 bits), Expect = 0.00032, P = 0.00032
+ Identities = 63/240 (26%), Positives = 102/240 (42%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             +EKK   K    G  LP   T LP  K     +E+  ++I R +RN+ +AQ SR++K+  
+Sbjct:   213 DEKKLLAKE---GITLP---TQLPLTKY----EERMLKKIRRKIRNKQSAQESRKKKKEY 262
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS----- 162
+             ++ LE        QNQ L +++  +E +N  L +QL +L A V  S + +   G+     
+Sbjct:   263 IDGLETRMSACTAQNQELQRKVLHLEKQNLSLLEQLKKLQAIVVQSTSKSAQTGTCIAVL 322
+
+Query:   163 ----PATASPTLTPTLFKQERDELPLERIP---FPTPSLSDYSPTLKPSTLAESSDVAQH 215
+                      P+++P  F   R E P +  P   F     +D +  + P T A  S+ A  
+Sbjct:   323 LFSFALIVLPSISP--FASNRAESPGDFAPVRVFSRTLHNDAASRVAPDT-APGSE-APG 378
+
+Query:   216 PAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFED 275
+             P  +   L+      P      + +   T  +     D D + L  G+S  E D +   D
+Sbjct:   379 PGPNTGALQERSPGSP----PGEWESQDTRALDNSTEDLDNSTLVQGNSVKELDQATLLD 434
+
+
+>sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcription factor ATF-4 OS=Danio
+            rerio GN=atf4 PE=2 SV=1
+        Length = 339
+
+ Score = 118 (46.6 bits), Expect = 0.00032, P = 0.00032
+ Identities = 31/138 (22%), Positives = 69/138 (50%)
+
+Query:    18 TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK 77
+             TP  E  +   S +D+ ++   V        + +P+ + K + +  P     L  R +  
+Sbjct:   204 TPKEEQNISDCSDSDSGIS---VSGSPAHQSDLEPSSRAKPYSRPDPEASPALKGRVKTS 260
+
+Query:    78 TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN 137
+             +   K +++++++ +N+ AA   R++KR+E E L +E  ++E++N+ L ++   +  E  
+Sbjct:   261 SGAPKVEKKLKKMEQNKTAATRYRQKKRVEQESLNSECSELEKKNRELSEKADSLSREIQ 320
+
+Query:   138 RLSQQLAQL-AAEVRGSR 154
+              L   L ++  A+ R S+
+Sbjct:   321 YLRDLLEEMRTAKQRKSK 338
+
+
+>sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus norvegicus GN=Xbp1 PE=2
+            SV=1
+        Length = 267
+
+ Score = 116 (45.9 bits), Expect = 0.00032, P = 0.00032
+ Identities = 26/64 (40%), Positives = 42/64 (65%)
+
+Query:    73 RKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+             RKR + T    E++ + R L+NR AAQT+R+RK+  M +LE + + +E++NQ  LQ  +Q
+Sbjct:    52 RKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQ-KLQLENQ 110
+
+Query:   132 MEAE 135
+             +  E
+Sbjct:   111 LLRE 114
+
+
+>sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcription factor ATF-4 OS=Mus
+            musculus GN=Atf4 PE=1 SV=1
+        Length = 349
+
+ Score = 118 (46.6 bits), Expect = 0.00034, P = 0.00034
+ Identities = 42/148 (28%), Positives = 69/148 (46%)
+
+Query:    18 TPASEVPVLTVSPADTSLNSAD--VKTQEVKPEE-KKPAKKRKSWGQELPVPKTNLPP-- 72
+             TP+     + +SP ++ L S      T    P+    P   R S     P PK   PP  
+Sbjct:   212 TPSDNDSGICMSP-ESYLGSPQHSPSTSRAPPDNLPSPGGSRGS-----PRPKPYDPPGV 265
+
+Query:    73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132
+                AK + EK  ++++++ +N+ AA   R++KR E E L  E  ++E++N+ L ++   +
+Sbjct:   266 SLTAKVKTEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSL 325
+
+Query:   133 EAENNRLSQQLAQLAAEVRGSRANTPMP 160
+               E     Q L  L  EVR +R    +P
+Sbjct:   326 AKE----IQYLKDLIEEVRKARGQKRVP 349
+
+
+>sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcription factor ATF-4 OS=Homo
+            sapiens GN=ATF4 PE=1 SV=3
+        Length = 351
+
+ Score = 117 (46.2 bits), Expect = 0.00044, P = 0.00044
+ Identities = 31/98 (31%), Positives = 53/98 (54%)
+
+Query:    66 PKTNLPPRKR---AKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN 122
+             PK   PP ++   AK + EK  ++++++ +N+ AA   R++KR E E L  E  ++E++N
+Sbjct:   258 PKPYDPPGEKMVAAKVKGEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKN 317
+
+Query:   123 QFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160
+             + L +R   +  E     Q L  L  EVR +R    +P
+Sbjct:   318 EALKERADSLAKE----IQYLKDLIEEVRKARGKKRVP 351
+
+
+>sp|O35284|BATF_MOUSE Basic leucine zipper transcriptional factor ATF-like
+            OS=Mus musculus GN=Batf PE=2 SV=1
+        Length = 125
+
+ Score = 96 (38.9 bits), Expect = 0.00045, P = 0.00044
+ Identities = 26/90 (28%), Positives = 45/90 (50%)
+
+Query:    71 PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS 130
+             PP K+  ++D    R+++R  +NR AAQ SR+R+  + + L  E   +E+QN  L + + 
+Sbjct:    17 PPGKQDSSDDV---RKVQRREKNRIAAQKSRQRQTQKADTLHLESEDLEKQNAALRKEIK 73
+
+Query:   131 QMEAENNRLSQQLAQLAAEVRGSRANTPMP 160
+             Q+  E    +  L+          + TP P
+Sbjct:    74 QLTEELKYFTSVLSSHEPLCSVLASGTPSP 103
+
+
+>sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=Fosb PE=2 SV=1
+        Length = 338
+
+ Score = 116 (45.9 bits), Expect = 0.00053, P = 0.00053
+ Identities = 43/151 (28%), Positives = 65/151 (43%)
+
+Query:    72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+             PR+   T +E+E+RR+ R  RN+ AA   R R+R   ++L+ E  Q+E++   L   +++
+Sbjct:   145 PREETLTPEEEEKRRVRRE-RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAE 203
+
+Query:   132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPT 191
+             ++ E  RL   L       +      P PG  A        T  K++     L   P P 
+Sbjct:   204 LQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRDLPGSTSAKEDGFGWLLP--PPPP 261
+
+Query:   192 PSLSDYSPTLKPSTLAESSDVAQHPAVSVAG 222
+             P L   S    P  L  S  +  H  V V G
+Sbjct:   262 PPLPFQSSRDAPPNLTAS--LFTHSEVQVLG 290
+
+
+>sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gallus gallus GN=MAFB PE=1
+            SV=1
+        Length = 311
+
+ Score = 115 (45.5 bits), Expect = 0.00059, P = 0.00059
+ Identities = 36/137 (26%), Positives = 68/137 (49%)
+
+Query:    29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ-RRI 87
+             +P+ +S +S  ++T   +       + R S  Q + +    L    R  T+DE  + ++ 
+Sbjct:   171 TPSTSSSSSQQLQTSHQQHPPSSSVEDRFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQK 230
+
+Query:    88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147
+              R L+NR  AQ+ R ++  +   LENEK Q+ QQ + L Q ++++  E +    +  +LA
+Sbjct:   231 RRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVTRLARERDAYKLKCEKLA 290
+
+Query:   148 AE-VRGSRANTPMPGSP 163
+             +   R + + +  P SP
+Sbjct:   291 SNGFREAGSTSDNPSSP 307
+
+
+>sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Coturnix coturnix japonica
+            GN=MAFB PE=1 SV=1
+        Length = 311
+
+ Score = 115 (45.5 bits), Expect = 0.00059, P = 0.00059
+ Identities = 36/137 (26%), Positives = 68/137 (49%)
+
+Query:    29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ-RRI 87
+             +P+ +S +S  ++T   +       + R S  Q + +    L    R  T+DE  + ++ 
+Sbjct:   171 TPSTSSSSSQQLQTSHQQHPPSSSVEDRFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQK 230
+
+Query:    88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147
+              R L+NR  AQ+ R ++  +   LENEK Q+ QQ + L Q ++++  E +    +  +LA
+Sbjct:   231 RRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVTRLARERDAYKLKCEKLA 290
+
+Query:   148 AE-VRGSRANTPMPGSP 163
+             +   R + + +  P SP
+Sbjct:   291 SNGFREAGSTSDNPSSP 307
+
+
+>sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus musculus GN=Xbp1 PE=2 SV=2
+        Length = 267
+
+ Score = 113 (44.8 bits), Expect = 0.00071, P = 0.00071
+ Identities = 27/79 (34%), Positives = 45/79 (56%)
+
+Query:    73 RKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN-------QF 124
+             RKR + T    E++ + R L+NR AAQT+R+RK+  M +LE + + +E++N       Q 
+Sbjct:    52 RKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENHKLQLENQL 111
+
+Query:   125 LLQRLSQMEAENNRLSQQL 143
+             L ++   +  EN  L  +L
+Sbjct:   112 LREKTHGLVVENQELRTRL 130
+
+
+>sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus norvegicus GN=Fosl2 PE=2
+            SV=1
+        Length = 327
+
+ Score = 114 (45.2 bits), Expect = 0.00084, P = 0.00084
+ Identities = 41/158 (25%), Positives = 76/158 (48%)
+
+Query:    68 TNLPPRKRAK--TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             T +  R+R +  + +E+E+RRI R  RN+ AA   R R+R   EKL+ E  ++E++   L
+Sbjct:   109 TTVGRRRRDEQLSPEEEEKRRIRRE-RNKLAAAKCRNRRRELTEKLQTETEELEEEKSGL 167
+
+Query:   126 LQRLSQMEAENNRLSQQLA------QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER 179
+              + +++++ E  +L   L       +++ E R S   + +     T S  + P + KQE 
+Sbjct:   168 QKEIAELQKEKEKLEFMLVAHGPVCKISPEERRSSPTSGVQSLRGTGS-AVGPVVVKQEP 226
+
+Query:   180 DELPLERIPFPTPSLSDYSPT-LKPSTLAESSDVAQHP 216
+              E   E  P  +  +     + +KP ++A      + P
+Sbjct:   227 PE---EDSPSSSAGMDKTQRSVIKPISIAGGGFYGEEP 261
+
+
+>sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding protein 3-like
+            protein 3 OS=Homo sapiens GN=CREB3L3 PE=1 SV=2
+        Length = 461
+
+ Score = 116 (45.9 bits), Expect = 0.00090, P = 0.00089
+ Identities = 52/180 (28%), Positives = 82/180 (45%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             +EKK   K    G  LP   T LP  K     +E+  ++I R +RN+ +AQ SR++K+  
+Sbjct:   218 DEKKLLAKE---GITLP---TQLPLTKY----EERVLKKIRRKIRNKQSAQESRKKKKEY 267
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS 167
+             ++ LE        QNQ L +++  +E +N  L +QL +L A V  S + +   G+   A 
+Sbjct:   268 IDGLETRMSACTAQNQELQRKVLHLEKQNLSLLEQLKKLQAIVVQSTSKSAQTGT-CVAV 326
+
+Query:   168 PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG 227
+               L+  L        P    P  T S  D++P    S    +   ++  A +V G E  G
+Sbjct:   327 LLLSFALIILPSIS-PFG--PNKTESPGDFAPVRVFSRTLHNDAASRVAADAVPGSEAPG 383
+
+
+>sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=Magnaporthe grisea
+            GN=NST1 PE=3 SV=1
+        Length = 1319
+
+ Score = 121 (47.7 bits), Expect = 0.00097, P = 0.00097
+ Identities = 41/170 (24%), Positives = 85/170 (50%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK--EQRRIERVLRNRA--AAQ 98
+             Q  K EE+K  K+ +   +E    +      +RA+ + E+  EQ R  R  + +   A +
+Sbjct:   675 QRQKNEERKKKKEAQRKAEEEERQRKEAERLRRAQEQKERQAEQDRKAREAKEKEKKAKE 734
+
+Query:    99 TSRERKRLEMEKLENE-KIQMEQQNQFLLQRLSQMEAENN-RLSQQLAQLAAEVRGSRAN 156
+              +++R++   E  E E + + E+ ++  L++ ++++AE   R +Q+ A+ A++   + AN
+Sbjct:   735 EAKQREKAARELKEREARERKEKADKERLEKEAKIKAEKEAREAQRKAERASQKATTLAN 794
+
+Query:   157 TPMPGSPA---TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKP 203
+              P+P  PA   + +P   P L + ++  +   ++P   P+L       KP
+Sbjct:   795 VPVPTGPARRQSQAPNPAPALPQSQQASVASPQLPTAVPALPKLPTPQKP 844
+
+ Score = 87 (35.7 bits), Expect = 5.1, P = 0.994
+ Identities = 26/108 (24%), Positives = 52/108 (48%)
+
+Query:    35 LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR 94
+             L   D +T++ K +++K A+KR+    +    +     RK A+   E+ +R  E   R  
+Sbjct:   614 LAQEDRETEKRKAKKQKEAQKRRDKALQKKQAQAEEKARKDAEKAAEEAERLAEEQRRQE 673
+
+Query:    95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+                Q + ERK+   +K    K + E++ +   +RL + + +  R ++Q
+Sbjct:   674 EQRQKNEERKK---KKEAQRKAEEEERQRKEAERLRRAQEQKERQAEQ 718
+
+
+>sp|O57342|MAFA_COTJA Transcription factor MafA OS=Coturnix coturnix japonica
+            GN=MAFA PE=1 SV=1
+        Length = 286
+
+ Score = 112 (44.5 bits), Expect = 0.0011, P = 0.0011
+ Identities = 29/85 (34%), Positives = 48/85 (56%)
+
+Query:    83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+             +Q+R  R L+NR  AQ+ R ++  +   LENEK Q++ Q + L Q +S++  E +   ++
+Sbjct:   201 KQKR--RTLKNRGYAQSCRYKRVQQRHILENEKCQLQSQVEQLKQEVSRLAKERDLYKEK 258
+
+Query:   143 LAQLAAEVRGSRANTPMPGSPATAS 167
+               +LAA  RG    T  P +P T +
+Sbjct:   259 YEKLAA--RGFPRETSPPAAPKTTA 281
+
+
+>sp|O60675|MAFK_HUMAN Transcription factor MafK OS=Homo sapiens GN=MAFK PE=1
+            SV=1
+        Length = 156
+
+ Score = 103 (41.3 bits), Expect = 0.0012, P = 0.0012
+ Identities = 42/159 (26%), Positives = 73/159 (45%)
+
+Query:    47 PEEKKPAKKRKSWGQELPVPKTN---------LPPRKRAKTEDEK---EQRRIERVLRNR 94
+             P+  K  K +K  G+  PV   +         L    R  T++E    +QRR  R L+NR
+Sbjct:     5 PKPNKALKVKKEAGENAPVLSDDELVSMSVRELNQHLRGLTKEEVTRLKQRR--RTLKNR 62
+
+Query:    95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+               A + R ++  + E+LE ++++++Q+ + L +  S M  E + L  +   L    R + 
+Sbjct:    63 GYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMRLELDALRSKYEALQTFAR-TV 121
+
+Query:   155 ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS 193
+             A  P+  +P+  + T   T+ K    EL    +PF   S
+Sbjct:   122 ARGPV--APSKVATTSVITIVKST--ELSSTSVPFSAAS 156
+
+
+>sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sapiens GN=FOSL1 PE=1 SV=1
+        Length = 271
+
+ Score = 111 (44.1 bits), Expect = 0.0012, P = 0.0012
+ Identities = 54/184 (29%), Positives = 88/184 (47%)
+
+Query:    64 PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL------EMEKLENEKIQ 117
+             P P     P ++   E+E E+RR+ R     AAA+    RK L      E +KLE+EK  
+Sbjct:    88 PPPGVRRRPCEQISPEEE-ERRRVRRERNKLAAAKCRNRRKELTDFLQAETDKLEDEKSG 146
+
+Query:   118 MEQQNQFLLQRLSQMEA--ENNRLSQQLAQLAAEV-RGSRANTPMPGSPATASP--TLTP 172
+             ++++ + L ++  ++E   E +R   ++ + A E   GS + T  P +P    P  +L+P
+Sbjct:   147 LQREIEELQKQKERLELVLEAHRPICKIPEGAKEGDTGSTSGTSSPPAPCRPVPCISLSP 206
+
+Query:   173 -TLFKQERDELPLERIPFPTPSLSDYSPTLK---PSTLAESSDVAQHPAVSVAGLEGDGS 228
+               + + E    P       TPSL+ ++P+L    PST  E    A   + S +G   D S
+Sbjct:   207 GPVLEPEALHTPTL---MTTPSLTPFTPSLVFTYPST-PEPCASAHRKSSSSSG---DPS 259
+
+Query:   229 ALPL 232
+             + PL
+Sbjct:   260 SDPL 263
+
+
+>sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding protein 3-like
+            protein 3 OS=Rattus norvegicus GN=Creb3l3 PE=2 SV=1
+        Length = 470
+
+ Score = 115 (45.5 bits), Expect = 0.0014, Sum P(2) = 0.0014
+ Identities = 38/115 (33%), Positives = 59/115 (51%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             +EKK   K    G  LP   T LP  K     +E+  ++I R +RN+ +AQ SR++K+  
+Sbjct:   214 DEKKLLAKE---GVTLP---TQLPLTKY----EERVLKKIRRKIRNKQSAQESRKKKKEY 263
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS 162
+             ++ LEN       QNQ L +++  +E +N  L +QL  L A V  S +     G+
+Sbjct:   264 IDGLENRMSACTAQNQELQRKVLHLEKQNLSLLEQLKHLQALVVQSTSKPAHAGT 318
+
+ Score = 40 (19.1 bits), Expect = 0.0014, Sum P(2) = 0.0014
+ Identities = 11/42 (26%), Positives = 19/42 (45%)
+
+Query:    15 LPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR 56
+             LP+T   E P   V  +  +++     T  + PEE+  +  R
+Sbjct:   130 LPSTACPEPPRTQVHESSVAIDLDMWSTDTLYPEEQAGSPSR 171
+
+
+>sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus musculus GN=Enah PE=1 SV=2
+        Length = 802
+
+ Score = 117 (46.2 bits), Expect = 0.0015, P = 0.0015
+ Identities = 57/225 (25%), Positives = 97/225 (43%)
+
+Query:     9 MSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPK 67
+             M +++ L +  A++  V T +   T+L          +   + PA+ +    QE L + +
+Sbjct:   105 MHALEVLNSQEAAQSKV-TATQDSTNLRCIFCGPTLPRQNSQLPAQVQNGPSQEELEIQR 163
+
+Query:    68 TNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQ 127
+               L  ++R K E E+E+   ER+ R R   +   ER+RLE E+LE ++ + E   +   +
+Sbjct:   164 RQLQEQQRQK-ELERERMERERLERERLERERL-ERERLEQEQLERQRQEREHVERLERE 221
+
+Query:   128 RLSQMEAENN-RLSQQLAQLAAEV----RGSRANTPMPGSPATASPTLTPTLFKQERDEL 182
+             RL ++E E   R  ++L QL  E     R  R +   P S ++ S    P     +    
+Sbjct:   222 RLERLERERQERERERLEQLEREQVEWERERRMSNAAPSSDSSLSSAPLPEYSSCQPPSA 281
+
+Query:   183 P----LERIPFPTPSLS-DYSP-TLKPSTLAESSDVAQHPAVSVA 221
+             P     + I  P    + DY+  T  P T    +   +H A   A
+Sbjct:   282 PPPSYAKVISAPVSDATPDYAVVTALPPTSTPPTPPLRHAATRFA 326
+
+
+>sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=FOSB PE=1 SV=1
+        Length = 338
+
+ Score = 112 (44.5 bits), Expect = 0.0015, P = 0.0015
+ Identities = 42/151 (27%), Positives = 64/151 (42%)
+
+Query:    72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+             PR+   T +E+E+RR+ R  RN+ AA   R R+R   ++L+ E  Q+E++   L   +++
+Sbjct:   145 PREETLTPEEEEKRRVRRE-RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAE 203
+
+Query:   132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPT 191
+             ++ E  RL   L       +      P PG P      L P     + D       P P 
+Sbjct:   204 LQKEKERLEFVLVAHKPGCKIPYEEGPGPG-PLAEVRDL-PGSAPAKEDGFSWLLPPPPP 261
+
+Query:   192 PSLSDYSPTLKPSTLAESSDVAQHPAVSVAG 222
+             P L   +    P  L  S  +  H  V V G
+Sbjct:   262 PPLPFQTSQDAPPNLTAS--LFTHSEVQVLG 290
+
+
+>sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 OS=Magnetospirillum
+            magneticum (strain AMB-1 / ATCC 700264) GN=infB PE=3 SV=1
+        Length = 872
+
+ Score = 117 (46.2 bits), Expect = 0.0016, P = 0.0016
+ Identities = 36/107 (33%), Positives = 57/107 (53%)
+
+Query:    16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR 75
+             P  PA   PV   +PA  +      +T+E + EE++ AKKR +  +  PV +T  P R+ 
+Sbjct:   188 PVAPAQPKPVAAAAPAGDATAVPRARTEEEEEEEER-AKKRAAAHKPAPVKRTE-PRRRT 245
+
+Query:    76 AK---TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME 119
+              K   T+   +  R ER  R+ AA + +RER+RL+  +  +EK+  E
+Sbjct:   246 GKLTITDALTDDDRSERG-RSLAAVKRARERERLKHMQKGSEKVIRE 291
+
+
+>sp|Q61827|MAFK_MOUSE Transcription factor MafK OS=Mus musculus GN=Mafk PE=2
+            SV=1
+        Length = 156
+
+ Score = 102 (41.0 bits), Expect = 0.0017, P = 0.0017
+ Identities = 42/159 (26%), Positives = 72/159 (45%)
+
+Query:    47 PEEKKPAKKRKSWGQELPVPKTN---------LPPRKRAKTEDEK---EQRRIERVLRNR 94
+             P+  K  K +K  G+  PV   +         L    R  T++E    +QRR  R L+NR
+Sbjct:     5 PKPNKALKVKKEAGENAPVLSDDELVSMSVRELNQHLRGLTKEEVTRLKQRR--RTLKNR 62
+
+Query:    95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+               A + R ++  + E+LE ++++++Q+ + L +  S M  E + L  +   L    R + 
+Sbjct:    63 GYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMRLELDALRSKYEALQTFAR-TV 121
+
+Query:   155 ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS 193
+             A  P+  +P   + T   T+ K    EL    +PF   S
+Sbjct:   122 ARGPV--TPTKVATTSVITIVKSA--ELSSTSVPFSAAS 156
+
+
+>sp|P29747|CREBA_DROME Cyclic AMP response element-binding protein A
+            OS=Drosophila melanogaster GN=CrebA PE=1 SV=2
+        Length = 516
+
+ Score = 117 (46.2 bits), Expect = 0.0018, Sum P(2) = 0.0018
+ Identities = 45/147 (30%), Positives = 72/147 (48%)
+
+Query:     8 TMSSVDSLPATPASEVPVLTVS--PADTSLNSADVK--TQEVKPEEKKPAKKRKSWGQEL 63
+             T SS  S  A+ +S    +T +  P  T L S+  K  T  +   E++   KR    +  
+Sbjct:   370 TRSSSGSASASGSSTSSTVTTTRQPIHTPLISSQPKGSTGTLLLTEEE---KRTLLAEGY 426
+
+Query:    64 PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ 123
+             P+P+  LP  K     +EK  ++I R ++N+ +AQ SR +K+  M++LE     +  +N 
+Sbjct:   427 PIPQ-KLPLTKA----EEKSLKKIRRKIKNKISAQESRRKKKEYMDQLERRVEILVTENH 481
+
+Query:   124 FLLQRLSQMEAENNRLSQQLAQLAAEV 150
+                +RL  +E  N  L  QL +L A V
+Sbjct:   482 DYKKRLEGLEETNANLLSQLHKLQALV 508
+
+ Score = 38 (18.4 bits), Expect = 0.0018, Sum P(2) = 0.0018
+ Identities = 8/12 (66%), Positives = 9/12 (75%)
+
+Query:    10 SSVDSLPATPAS 21
+             S VDSLP +P S
+Sbjct:    71 SDVDSLPDSPKS 82
+
+
+>sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricetus auratus GN=FOS PE=3
+            SV=1
+        Length = 381
+
+ Score = 112 (44.5 bits), Expect = 0.0019, P = 0.0019
+ Identities = 54/176 (30%), Positives = 74/176 (42%)
+
+Query:    74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             +R K E    +E+E+RRI R  RN+ AA   R R+R   + L+ E  Q+E +   L   +
+Sbjct:   125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183
+             + +  E  +L   LA      +    +   P     AS  LT   P     E +E   LP
+Sbjct:   184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMFVASLDLTGGLPEATTPESEEAFSLP 242
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS-VAGLEGDGSALPLFDL-GS 237
+             L   P P PSL            AE  D    PA S  +G E    ++P  DL GS
+Sbjct:   243 LLNDPEPKPSLEPVKSISNVELKAEPFDDFLFPASSRPSGSETTARSVPDMDLSGS 298
+
+
+>sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris GN=FOSB PE=3 SV=1
+        Length = 338
+
+ Score = 111 (44.1 bits), Expect = 0.0019, P = 0.0019
+ Identities = 37/141 (26%), Positives = 60/141 (42%)
+
+Query:    72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+             PR+   T +E+E+RR+ R  RN+ AA   R R+R   ++L+ E  Q+E++   L   +++
+Sbjct:   145 PREETLTPEEEEKRRVRRE-RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAE 203
+
+Query:   132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDEL---PLERIP 188
+             ++ E  RL   L       +      P PG  A           K++       P    P
+Sbjct:   204 LQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRDLPGSASTKEDGFSWLLPPPPAPP 263
+
+Query:   189 FPTPSLSDYSPTLKPSTLAES 209
+              P  +  D +P L  S    S
+Sbjct:   264 LPFQTSQDAAPNLTASLFTHS 284
+
+
+>sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-binding protein 3-like
+            protein 4 OS=Homo sapiens GN=CREB3L4 PE=1 SV=1
+        Length = 395
+
+ Score = 112 (44.5 bits), Expect = 0.0020, P = 0.0020
+ Identities = 30/94 (31%), Positives = 55/94 (58%)
+
+Query:    54 KKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE 112
+             ++++  GQE + +P ++LP  K     +E+  +++ R +RN+ +AQ SR RK+  ++ LE
+Sbjct:   192 EEKRLLGQEGVSLP-SHLPLTKA----EERVLKKVRRKIRNKQSAQDSRRRKKEYIDGLE 246
+
+Query:   113 NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146
+             +       QNQ L +++ ++E  N  L  QL QL
+Sbjct:   247 SRVAACSAQNQELQKKVQELERHNISLVAQLRQL 280
+
+
+>sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-binding protein 3-like
+            protein 4 OS=Macaca fascicularis GN=CREB3L4 PE=2 SV=1
+        Length = 395
+
+ Score = 112 (44.5 bits), Expect = 0.0020, P = 0.0020
+ Identities = 30/94 (31%), Positives = 55/94 (58%)
+
+Query:    54 KKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE 112
+             ++++  GQE + +P ++LP  K     +E+  +++ R +RN+ +AQ SR RK+  ++ LE
+Sbjct:   192 EEKRLLGQEGVSLP-SHLPLTKA----EERVLKKVRRKIRNKQSAQDSRRRKKEYIDGLE 246
+
+Query:   113 NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146
+             +       QNQ L +++ ++E  N  L  QL QL
+Sbjct:   247 SRVAACSAQNQELQKKVQELERHNISLVAQLRQL 280
+
+
+>sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription factor ATF-4 OS=Rattus
+            norvegicus GN=Atf4 PE=1 SV=1
+        Length = 347
+
+ Score = 111 (44.1 bits), Expect = 0.0020, P = 0.0020
+ Identities = 30/97 (30%), Positives = 51/97 (52%)
+
+Query:    66 PKTNLPP--RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ 123
+             PK   PP     AK + EK  ++++++ +N+ AA   R++KR E E L  E  ++E++N+
+Sbjct:   255 PKPYDPPGVSVTAKVKTEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNE 314
+
+Query:   124 FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160
+              L ++   +  E     Q L  L  EVR +R    +P
+Sbjct:   315 ALKEKADSLAKE----IQYLKDLIEEVRKARGKKRVP 347
+
+
+>sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprinus carpio GN=fos PE=2 SV=1
+        Length = 347
+
+ Score = 111 (44.1 bits), Expect = 0.0020, P = 0.0020
+ Identities = 58/256 (22%), Positives = 109/256 (42%)
+
+Query:     6 EKTMSSVDSLPATPA-SEVPVLT--VSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE 62
+             E ++SS   +P   A S  P L   V P  +S+  ++   +   P    P  K +  G +
+Sbjct:    39 ELSVSSASFVPTVTAISSCPDLQWMVQPMVSSVAPSNGGARSYNPN---PYPKMRVTGTK 95
+
+Query:    63 LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN 122
+              P   +N   R    + +E+E++R+ R  RN+ AA   R R+R   + L+ E  ++E + 
+Sbjct:    96 SP--NSNKRARAEQLSPEEEEKKRVRRE-RNKMAAAKCRNRRRELTDTLQAETDELEDEK 152
+
+Query:   123 QFLLQRLSQMEAENNRLSQQLAQLAAEVR-GSRANTPMPGSPATASPTLTPTLFKQERDE 181
+               L   ++ +  E  RL   LA      +  S + +P+P +      ++T ++       
+Sbjct:   153 SALQNDIANLLKEKERLEFILAAHKPICKIPSSSVSPIPAASVPEIHSITTSVVSTANAP 212
+
+Query:   182 LPLERIP--FP-TPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSD 238
+             +        F  T S   +  T++ S L  + + +    ++ A LE    ++P  DL S 
+Sbjct:   213 VTTSSSSSLFSSTASTDSFGSTVEISDLEPTLEESLE-LLAKAELE-TARSVPDVDLSSS 270
+
+Query:   239 LKHHSTDDVAAPLSDD 254
+             L     + +  P ++D
+Sbjct:   271 LYARDWESLYTPANND 286
+
+
+>sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo sapiens GN=ENAH PE=1 SV=2
+        Length = 591
+
+ Score = 114 (45.2 bits), Expect = 0.0021, P = 0.0021
+ Identities = 35/112 (31%), Positives = 57/112 (50%)
+
+Query:    35 LNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRN 93
+             LNS +      +   + PA+ +    QE L + +  L  ++R K   E E+ R+ER    
+Sbjct:   111 LNSQETGPTLPRQNSQLPAQVQNGPSQEELEIQRRQLQEQQRQK---ELERERLERERME 167
+
+Query:    94 RAAAQTSR-ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA--ENNRLSQQ 142
+             R   +  R ER+RLE E+LE E+++ E+Q +   +RL + E      RL +Q
+Sbjct:   168 RERLERERLERERLERERLEQEQLERERQERERQERLERQERLERQERLERQ 219
+
+ Score = 102 (41.0 bits), Expect = 0.045, P = 0.044
+ Identities = 33/109 (30%), Positives = 55/109 (50%)
+
+Query:    37 SADVKTQEV-KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK--EQRRIERVLRN 93
+             SA +   EV   +E  P   R++   +LP    N P ++  + +  +  EQ+R + + R 
+Sbjct:   102 SAMMHALEVLNSQETGPTLPRQN--SQLPAQVQNGPSQEELEIQRRQLQEQQRQKELERE 159
+
+Query:    94 RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+             R   +   ER+RLE E+LE E+++ E+  Q  L+R  Q      RL +Q
+Sbjct:   160 RLERERM-ERERLERERLERERLERERLEQEQLERERQERERQERLERQ 207
+
+ Score = 96 (38.9 bits), Expect = 0.20, P = 0.19
+ Identities = 38/132 (28%), Positives = 66/132 (50%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE-QRRIERVLRNRAAAQTSRERKRLE 107
+             E++  ++ +   ++L   +     ++R + ++  E Q R+ER  R     Q  +ER+RLE
+Sbjct:   177 ERERLERERLEQEQLERERQERERQERLERQERLERQERLERQERLDRERQERQERERLE 236
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNR-LSQQLAQLAAE-----VRGSRANTPMPG 161
+               +LE E+ + E+Q Q  L+R  Q+E E  R +S   A  + E     V G  ++   PG
+Sbjct:   237 --RLERERQERERQEQ--LER-EQLEWERERRISSAAAPASVETPLNSVLGD-SSASEPG 290
+
+Query:   162 SPATASPTLTPT 173
+               A + P  TP+
+Sbjct:   291 LQAASQPAETPS 302
+
+
+>sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus musculus GN=Fosl2 PE=2 SV=1
+        Length = 326
+
+ Score = 110 (43.8 bits), Expect = 0.0023, P = 0.0023
+ Identities = 41/158 (25%), Positives = 78/158 (49%)
+
+Query:    68 TNLPPRKRAK--TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             T +  R+R +  + +E+E+RRI R  RN+ AA   R R+R   EKL+ E  ++E++   L
+Sbjct:   108 TTVGRRRRDEQLSPEEEEKRRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGL 166
+
+Query:   126 LQRLSQMEAENNRLS-QQLA-----QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER 179
+              + +++++ E  +L   ++A     +++ E R S   + +     T S  + P + KQE 
+Sbjct:   167 QKEIAELQKEKEKLEFMKVAHGPVCKISPEERRSPPTSGLQSLRGTGS-AVGPVVVKQEP 225
+
+Query:   180 DELPLERIPFPTPSLSDYSPT-LKPSTLAESSDVAQHP 216
+              E   E  P  +  +     + +KP ++A      + P
+Sbjct:   226 PE---EDSPSSSAGMDKTQRSVIKPISIAGGGFYGEEP 260
+
+
+>sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcription factor ATF-7 OS=Pongo
+            abelii GN=ATF7 PE=2 SV=1
+        Length = 483
+
+ Score = 112 (44.5 bits), Expect = 0.0027, P = 0.0027
+ Identities = 45/153 (29%), Positives = 72/153 (47%)
+
+Query:    26 LTVSPADTSLNSADVKTQEV--KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE 83
+             + V  A T + +   ++Q +   P+   PA+ + S  Q  P P T     +R +T DE  
+Sbjct:   277 MVVGSASTMVTARPEQSQILIQHPDAPSPAQPQVSPAQ--PTPSTG---GRRRRTVDEDP 331
+
+Query:    84 QRRIERVL-RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+               R +R L RNRAAA   R++++L +  LE +  ++  QN  L   ++ +  E  +L Q 
+Sbjct:   332 DERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRNEVAQLKQL 391
+
+Query:   143 L-AQLAAEVRGSRANTP-MPGSPATAS-PTLTP 172
+             L A     V   +  T     SP  +S PT +P
+Sbjct:   392 LLAHKDCPVTALQKKTQGYLESPKESSEPTGSP 424
+
+
+>sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcription factor ATF-7 OS=Homo
+            sapiens GN=ATF7 PE=1 SV=2
+        Length = 494
+
+ Score = 112 (44.5 bits), Expect = 0.0028, P = 0.0028
+ Identities = 45/153 (29%), Positives = 72/153 (47%)
+
+Query:    26 LTVSPADTSLNSADVKTQEV--KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE 83
+             + V  A T + +   ++Q +   P+   PA+ + S  Q  P P T     +R +T DE  
+Sbjct:   288 MVVGTASTMVTARPEQSQILIQHPDAPSPAQPQVSPAQ--PTPSTG---GRRRRTVDEDP 342
+
+Query:    84 QRRIERVL-RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+               R +R L RNRAAA   R++++L +  LE +  ++  QN  L   ++ +  E  +L Q 
+Sbjct:   343 DERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRNEVAQLKQL 402
+
+Query:   143 L-AQLAAEVRGSRANTP-MPGSPATAS-PTLTP 172
+             L A     V   +  T     SP  +S PT +P
+Sbjct:   403 LLAHKDCPVTALQKKTQGYLESPKESSEPTGSP 435
+
+
+>sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo sapiens GN=MAFB PE=1
+            SV=2
+        Length = 323
+
+ Score = 109 (43.4 bits), Expect = 0.0030, P = 0.0030
+ Identities = 42/152 (27%), Positives = 70/152 (46%)
+
+Query:    14 SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73
+             S  A+PA ++P     P   +  SA         E+      R S  Q + +    L   
+Sbjct:   174 SSAASPAQQLPTSHPGPGPHATASATAAGGNGSVED------RFSDDQLVSMSVRELNRH 227
+
+Query:    74 KRAKTEDEKEQ-RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132
+              R  T+DE  + ++  R L+NR  AQ+ R ++  +   LENEK Q+ QQ + L Q +S++
+Sbjct:   228 LRGFTKDEVIRLKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRL 287
+
+Query:   133 EAENNRLSQQLAQLA-AEVRGSRANTPMPGSP 163
+               E +    +  +LA +  R + + +  P SP
+Sbjct:   288 ARERDAYKVKCEKLANSGFREAGSTSDSPSSP 319
+
+
+>sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A OS=Homo sapiens
+            GN=CDK11A PE=1 SV=3
+        Length = 780
+
+ Score = 118 (46.6 bits), Expect = 0.0032, Sum P(2) = 0.0032
+ Identities = 50/173 (28%), Positives = 79/173 (45%)
+
+Query:    42 TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR 101
+             +++ K   +K  K+++ W +   V +     RKR + E +K +R  ER  R   A + SR
+Sbjct:    92 SRKEKVHHRKDEKRKEKW-KHARVKEREHERRKRHREEQDKARREWERQKRREMAREHSR 150
+
+Query:   102 -ERKRLEM--EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA-QLAAEVRGSRAN- 156
+              ER RLE    K E E+   EQQ +   Q+  +  AE  R  ++   +++A  R  R + 
+Sbjct:   151 RERDRLEQLERKRERERKMREQQKEQREQKERERRAEERRKEREARREVSAHHRTMREDY 210
+
+Query:   157 -TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAE 208
+                +  S  + SP   P    +ER EL   R     P  +  +P  KP+ L E
+Sbjct:   211 SDKVKASHWSRSPPRPP----RERFELGDGR----KPGEARPAPAQKPAQLKE 255
+
+ Score = 39 (18.8 bits), Expect = 0.0032, Sum P(2) = 0.0032
+ Identities = 12/45 (26%), Positives = 21/45 (46%)
+
+Query:   259 LFHGDSSVEPDSSVFED-GLAFDVLEGGDLSAFPFDSMVNFDSEP 302
+             LF G+S ++  + VF++ G   + +  G  S  P    + F   P
+Sbjct:   622 LFPGNSEIDQINKVFKELGTPSEKIWPG-YSELPVVKKMTFSEHP 665
+
+
+>sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-binding protein 3 OS=Homo
+            sapiens GN=CREB3 PE=1 SV=1
+        Length = 395
+
+ Score = 110 (43.8 bits), Expect = 0.0033, P = 0.0033
+ Identities = 39/129 (30%), Positives = 67/129 (51%)
+
+Query:    63 LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN 122
+             L +P+T LP     KTE E+  +R+ R +RN+ +AQ SR +K++ +  LE+  ++   QN
+Sbjct:   159 LILPET-LP---LTKTE-EQILKRVRRKIRNKRSAQESRRKKKVYVGGLESRVLKYTAQN 213
+
+Query:   123 QFLLQRLSQMEAENNRLSQQLAQLAAEV-----RGSRANTPMPGSPATASPTLTPTLFKQ 177
+               L  ++  +E +N  L  QL +L A V     + S ++T +     +    L P ++  
+Sbjct:   214 MELQNKVQLLEEQNLSLLDQLRKLQAMVIEISNKTSSSSTCILVLLVSFCLLLVPAMYSS 273
+
+Query:   178 E-RDELPLE 185
+             + R  LP E
+Sbjct:   274 DTRGSLPAE 282
+
+
+>sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcription factor ATF-4 OS=Bos
+            taurus GN=ATF4 PE=1 SV=1
+        Length = 348
+
+ Score = 109 (43.4 bits), Expect = 0.0034, P = 0.0034
+ Identities = 35/133 (26%), Positives = 65/133 (48%)
+
+Query:    19 PASEVPVLTVSPADTSLNSAD--VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR- 75
+             P+     + +SP D+SL S      T    P +   +    S G   P P    PP ++ 
+Sbjct:   210 PSDNDSGICMSP-DSSLGSPQDSPSTSRGSPNKSLLSPGALS-GSSRPKPYD--PPGEKM 265
+
+Query:    76 --AKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133
+               AK + EK  ++++++ +N+ AA   R++KR E E L  E  ++E++N+ L ++   + 
+Sbjct:   266 VAAKVKGEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLA 325
+
+Query:   134 AENNRLSQQLAQL 146
+              E   L  Q+ ++
+Sbjct:   326 KEIQYLKDQIEEV 338
+
+
+>sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcription factor ATF-7 OS=Mus
+            musculus GN=Atf7 PE=1 SV=1
+        Length = 413
+
+ Score = 110 (43.8 bits), Expect = 0.0035, P = 0.0035
+ Identities = 36/121 (29%), Positives = 59/121 (48%)
+
+Query:    26 LTVSPADTSLNSADVKTQEV--KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE 83
+             + V  A T + +   + Q +   P+   PA+ + S  Q  P P T     +R +T DE  
+Sbjct:   277 MVVGTASTMVTARPEQNQILIQHPDAPSPAQPQVSPAQ--PTPSTG---GRRRRTVDEDP 331
+
+Query:    84 QRRIERVL-RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+               R +R L RNRAAA   R++++L +  LE +  ++  QN  L   ++ +  E  +L Q 
+Sbjct:   332 DERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRNEVAQLKQL 391
+
+Query:   143 L 143
+             L
+Sbjct:   392 L 392
+
+
+>sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabidopsis thaliana GN=GBF1
+            PE=1 SV=2
+        Length = 315
+
+ Score = 108 (43.1 bits), Expect = 0.0037, P = 0.0037
+ Identities = 30/79 (37%), Positives = 48/79 (60%)
+
+Query:    79 EDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL---LQRLS----Q 131
+             +DE+E +R +R   NR +A+ SR RK+ E E+L+     +  +NQ L   LQRLS    +
+Sbjct:   218 KDERELKRQKRKQSNRESARRSRLRKQAECEQLQQRVESLSNENQSLRDELQRLSSECDK 277
+
+Query:   132 MEAENNRLSQQLAQ-LAAE 149
+             +++ENN +  +L + L AE
+Sbjct:   278 LKSENNSIQDELQRVLGAE 296
+
+ Score = 81 (33.6 bits), Expect = 3.9, P = 0.98
+ Identities = 38/127 (29%), Positives = 64/127 (50%)
+
+Query:    23 VPVLTVSPADTSLN-SADVKTQE----VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK 77
+             VP+  V+P  T+LN   D+ + +    VK E +   +KRK   +E    ++ L  RK+A 
+Sbjct:   191 VPMKPVAPG-TNLNIGMDLWSSQAGVPVKDERELKRQKRKQSNRE-SARRSRL--RKQA- 245
+
+Query:    78 TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN 137
+              E E+ Q+R+E +     + +   +R   E +KL++E   ++ +    LQR+   EA  N
+Sbjct:   246 -ECEQLQQRVESLSNENQSLRDELQRLSSECDKLKSENNSIQDE----LQRVLGAEAVAN 300
+
+Query:   138 RLSQQLA 144
+              L Q  A
+Sbjct:   301 -LEQNAA 306
+
+
+>sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-binding protein 3 OS=Bos
+            taurus GN=CREB3 PE=2 SV=2
+        Length = 368
+
+ Score = 109 (43.4 bits), Expect = 0.0038, P = 0.0038
+ Identities = 56/212 (26%), Positives = 97/212 (45%)
+
+Query:    20 ASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTE 79
+             A   P+    PAD  +    + T+E    EK+  +K    G  LP     LP  K     
+Sbjct:   105 AQMTPLRVEEPADQEIARL-ILTEE----EKRLLEKE---GLTLP---GMLPLTKM---- 149
+
+Query:    80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139
+             +E+  +R+ R +RN+ +AQ SR +K++ +  LE+  ++   QN  L  ++  +E +N  L
+Sbjct:   150 EEQVLKRVRRKIRNKKSAQESRRKKKVYVGGLESRVLKYTAQNLELQNKVQLLEEQNLSL 209
+
+Query:   140 SQQLAQLAAEV-----RGSRANTPMPGSPATASPTLTPTLFKQE-RDELPLER--IPFPT 191
+               QL +L A V     + S ++T +     +    L P ++  + R  LP E   +    
+Sbjct:   210 LDQLRRLQAMVIQTANKASSSSTCVLVLLFSFCLLLVPAMYSSDTRGSLPAEHRVLSRQL 269
+
+Query:   192 PSL-SDYSPTLKPSTL-AESSDVAQHPAVSVA 221
+              +L S+  P L+P  L +E    + +P +  A
+Sbjct:   270 RALPSEDPPQLEPPALQSEVPKDSLNPELQAA 301
+
+
+>sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding protein 3-like
+            protein 4 OS=Rattus norvegicus GN=Creb3l4 PE=2 SV=1
+        Length = 367
+
+ Score = 111 (44.1 bits), Expect = 0.0038, Sum P(2) = 0.0038
+ Identities = 29/87 (33%), Positives = 50/87 (57%)
+
+Query:    60 GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME 119
+             GQE     ++LP  K     +E+  ++I R +RN+ +AQ SR RK+  ++ LE+      
+Sbjct:   170 GQEGVTLPSHLPLTKA----EERILKKIRRKIRNKQSAQDSRRRKKEYIDGLESRVAACS 225
+
+Query:   120 QQNQFLLQRLSQMEAENNRLSQQLAQL 146
+             +QNQ L +++ ++E +N  L  Q+ QL
+Sbjct:   226 EQNQKLQRKVQELERQNISLVAQVHQL 252
+
+ Score = 37 (18.1 bits), Expect = 0.0038, Sum P(2) = 0.0038
+ Identities = 9/18 (50%), Positives = 11/18 (61%)
+
+Query:    19 PASEVPVLTVSPADTSLN 36
+             P S+VP L  S +D  LN
+Sbjct:    29 PPSKVPGLQKSESDDFLN 46
+
+
+>sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus norvegicus GN=Mafb PE=1
+            SV=1
+        Length = 323
+
+ Score = 108 (43.1 bits), Expect = 0.0039, P = 0.0039
+ Identities = 41/152 (26%), Positives = 70/152 (46%)
+
+Query:    14 SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73
+             S  A+PA ++P     P   +  +A         E+      R S  Q + +    L   
+Sbjct:   174 SSAASPAQQLPTSHPGPGPHAAAAATAAGSNGSVED------RFSDDQLVSMSVRELNRH 227
+
+Query:    74 KRAKTEDEKEQ-RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132
+              R  T+DE  + ++  R L+NR  AQ+ R ++  +   LENEK Q+ QQ + L Q +S++
+Sbjct:   228 LRGFTKDEVIRLKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRL 287
+
+Query:   133 EAENNRLSQQLAQLA-AEVRGSRANTPMPGSP 163
+               E +    +  +LA +  R + + +  P SP
+Sbjct:   288 ARERDAYKVKCEKLANSGFREAGSTSDSPSSP 319
+
+
+>sp|A5PKJ4|MK07_BOVIN Mitogen-activated protein kinase 7 OS=Bos taurus GN=MAPK7
+            PE=2 SV=1
+        Length = 781
+
+ Score = 113 (44.8 bits), Expect = 0.0039, P = 0.0039
+ Identities = 67/243 (27%), Positives = 94/243 (38%)
+
+Query:     3 CDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR---KSW 59
+             C ME    +    P  PA +   LT+ P   +   A  K +    +  K A K    KS 
+Sbjct:   429 CAMESPPPAPLPCPG-PAPDTIDLTLQPPPPASEPAPPKKEGAISDNTKAALKAALLKSL 487
+
+Query:    60 GQEL---PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKI 116
+                L   P      P  ++  T  E+++ R E+  R +  A+  RE++R E E+ E    
+Sbjct:   488 RSRLRDGPSAPLEAPEPRKPVTAQERQREREEKRRRRQERAK-EREKRRQERERKERGAG 546
+
+Query:   117 QMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPT-LF 175
+                  +   L  L  + ++N+R    L +     R +R   P   +PATA P   P    
+Sbjct:   547 VSGGPSADPLAGL--VLSDNDR---SLLE-----RWTRMAQPPAPAPATARPPSPPAGPA 596
+
+Query:   176 KQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG--SALPLF 233
+              Q    LP    P P P+     P   P T A S  +A  P V   GL G    S LP F
+Sbjct:   597 TQPTGPLPQPACPPPAPAAG---PAA-PQTTAASGLLAPQPLVPPPGLPGPSALSVLPYF 652
+
+Query:   234 DLG 236
+               G
+Sbjct:   653 PSG 655
+
+
+>sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus musculus GN=Fos PE=1 SV=1
+        Length = 380
+
+ Score = 109 (43.4 bits), Expect = 0.0040, P = 0.0040
+ Identities = 65/247 (26%), Positives = 101/247 (40%)
+
+Query:     2 SCDMEKTMSSVDSLPATPASEVPVL--TVSPADTSL-NSADVKTQEVKPEEKKPAKKRKS 58
+             S +   T++++ + P       P L  +V+P+ T   +   + TQ      +    K  S
+Sbjct:    57 SANFIPTVTAISTSPDLQWLVQPTLVSSVAPSQTRAPHPYGLPTQSAGAYARAGMVKTVS 116
+
+Query:    59 WGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQM 118
+              G+   + +     +    + +E+E+RRI R  RN+ AA   R R+R   + L+ E  Q+
+Sbjct:   117 GGRAQSIGRRG---KVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQL 172
+
+Query:   119 EQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLF 175
+             E +   L   ++ +  E  +L   LA      +    +   P   + AS  LT   P   
+Sbjct:   173 EDEKSALQTEIANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLTGGLPEAS 231
+
+Query:   176 KQERDE---LPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS-VAGLEGDGSALP 231
+               E +E   LPL   P P PSL            AE  D    PA S  +G E   S +P
+Sbjct:   232 TPESEEAFTLPLLNDPEPKPSLEPVKSISNVELKAEPFDDFLFPASSRPSGSETSRS-VP 290
+
+Query:   232 LFDL-GS 237
+               DL GS
+Sbjct:   291 DVDLSGS 297
+
+
+>sp|O13024|INCEA_XENLA Inner centromere protein A OS=Xenopus laevis GN=incenp-A
+            PE=1 SV=1
+        Length = 873
+
+ Score = 113 (44.8 bits), Expect = 0.0045, P = 0.0045
+ Identities = 35/137 (25%), Positives = 65/137 (47%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR-----NRA 95
+             + +E    +KK A+ ++   QE    +  L  ++R + E EKE+   E+ L+      RA
+Sbjct:   629 REEEELERQKKIAEAKRLAEQERE--RQLLAEKERLRAEREKERIEKEKALQLQRELERA 686
+
+Query:    96 AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA 155
+             A +  ++R+  E  K   ++ ++EQ+     Q   +++ E  R +++ A +AA       
+Sbjct:   687 AQEKEQQRREAEERKKREQQERLEQERLRKEQEAKRLQEEEQRKAKEQAAVAASAPVMNV 746
+
+Query:   156 NTPMPGSPATASPTLTP 172
+                M  SPA  S  +TP
+Sbjct:   747 TVDMQNSPACESYEMTP 763
+
+ Score = 97 (39.2 bits), Expect = 0.26, P = 0.23
+ Identities = 29/86 (33%), Positives = 52/86 (60%)
+
+Query:    67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE--KIQMEQQNQF 124
+             K N P +   KTE EKE++R++  LR +  A+  R++K  E +K + E  K++ E++ + 
+Sbjct:   484 KRNTPLKTDPKTE-EKERQRLD-ALRKKEEAELQRKQKIEEGKKRKQEELKVRREERLRK 541
+
+Query:   125 LLQ---RLSQMEAENNR-LSQQLAQL 146
+             +LQ   R+ Q+E E  + + Q+ AQ+
+Sbjct:   542 VLQARERVEQLEEEKKKKIEQKFAQI 567
+
+ Score = 85 (35.0 bits), Expect = 5.3, P = 0.995
+ Identities = 35/124 (28%), Positives = 58/124 (46%)
+
+Query:    38 ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA----KTEDEKEQRRIERVLRN 93
+             A  K    K EE +  +K++   + L V +     R+      K  +E+E  R +++   
+Sbjct:   584 AKKKMTAKKQEEVECRRKQEEEARRLKVKQMEEEERRHQELLQKKREEEELERQKKIAEA 643
+
+Query:    94 RAAAQTSRERKRL-EMEKL--ENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150
+             +  A+  RER+ L E E+L  E EK ++E++    LQR  ++E       QQ  +  AE 
+Sbjct:   644 KRLAEQERERQLLAEKERLRAEREKERIEKEKALQLQR--ELERAAQEKEQQRRE--AEE 699
+
+Query:   151 RGSR 154
+             R  R
+Sbjct:   700 RKKR 703
+
+
+>sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Macaca fascicularis GN=MAFB
+            PE=2 SV=1
+        Length = 323
+
+ Score = 107 (42.7 bits), Expect = 0.0050, P = 0.0050
+ Identities = 42/152 (27%), Positives = 70/152 (46%)
+
+Query:    14 SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73
+             S  A+PA ++P     P   +  SA         E+      R S  Q + +    L   
+Sbjct:   174 SSAASPAQQLPTSHPGPGPHATASATAAGGNGSVED------RFSDDQLVSMSVRELNRH 227
+
+Query:    74 KRAKTEDEKEQ-RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132
+              R  T+DE  + ++  R L+NR  AQ+ R ++  +   LENEK Q+ QQ + L Q +S++
+Sbjct:   228 LRGFTKDEVIRLKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRL 287
+
+Query:   133 EAENNRLSQQLAQLA-AEVRGSRANTPMPGSP 163
+               E +    +  +LA +  R + + +  P SP
+Sbjct:   288 ARERDAHKVKCEKLANSGFREAGSTSDSPSSP 319
+
+
+>sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiation factor 3 subunit A
+            OS=Cryptococcus neoformans GN=TIF32 PE=3 SV=1
+        Length = 952
+
+ Score = 113 (44.8 bits), Expect = 0.0050, P = 0.0050
+ Identities = 55/195 (28%), Positives = 78/195 (40%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+             K +E K + ++   KRK   +E  + +      ++ K E+E  Q+  E     RAAA   
+Sbjct:   747 KIEEEKAQLREKVIKRKREEKERKLKEAREAEERKRKEEEEAAQKAEEEA---RAAAALE 803
+
+Query:   101 RERKRLEMEKLENEKIQMEQQNQFLLQRL-SQMEAENNRLSQQLAQLAAEVRGSRANTPM 159
+              E    E  + E E      Q Q  L+R+ +Q E E   L ++ A+ AA   G  A  P 
+Sbjct:   804 AEAAAAEQRRAEREA-----QRQSDLERIRAQQEREEEALRRRQAEKAAATSGGSAYRP- 857
+
+Query:   160 PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDY----SPTLKPSTLAESSDVAQH 215
+             P    T  PT +P         L   R      S        SP   PS  A +S  A +
+Sbjct:   858 PARAGTTPPTASPAPSSGGPSWLA-RRKAMEAQSAGGAPVASSPKPVPSNSAAASAPASN 916
+
+Query:   216 PAVSVAGLEGDGSAL 230
+                S+AG E +  AL
+Sbjct:   917 GPESIAG-EAEKPAL 930
+
+
+>sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa GN=FOS PE=3 SV=2
+        Length = 380
+
+ Score = 108 (43.1 bits), Expect = 0.0051, P = 0.0051
+ Identities = 51/175 (29%), Positives = 73/175 (41%)
+
+Query:    74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             +R K E    +E+E+RRI R  RN+ AA   R R+R   + L+ E  Q+E +   L   +
+Sbjct:   125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183
+             + +  E  +L   LA      +    +   P   + AS  L+   P     E +E   LP
+Sbjct:   184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLSGGLPEAATPESEEAFTLP 242
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GS 237
+             L   P P PS+            AE  D    PA S  G      ++P  DL GS
+Sbjct:   243 LLNDPEPKPSVEPVKKVSSMELKAEPFDDFLFPASSRPGGSETARSVPDMDLSGS 297
+
+
+>sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS=FBJ murine osteosarcoma
+            virus GN=V-FOS PE=3 SV=1
+        Length = 381
+
+ Score = 108 (43.1 bits), Expect = 0.0052, P = 0.0051
+ Identities = 55/176 (31%), Positives = 75/176 (42%)
+
+Query:    74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             +R K E    +E+E+RRI R  RN+ AA   R R+R   + L+ E  Q+E +   L   +
+Sbjct:   125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDKKSALQTEI 183
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183
+             + +  E  +L   LA      +    +   P   + AS  LT   P     E +E   LP
+Sbjct:   184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLTGGLPEASTPESEEAFTLP 242
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS-VAGLEGDGSALPLFDL-GS 237
+             L   P P PSL            AE  D    PA S  +G E   S +P  DL GS
+Sbjct:   243 LLNDPEPKPSLEPVKSISNVELKAEPFDDFLFPASSRPSGSETSRS-VPNVDLSGS 297
+
+
+>sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schizosaccharomyces pombe
+            GN=pcr1 PE=1 SV=1
+        Length = 171
+
+ Score = 100 (40.3 bits), Expect = 0.0057, P = 0.0057
+ Identities = 40/163 (24%), Positives = 69/163 (42%)
+
+Query:    74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKR---LEMEKLENEKIQMEQQNQFLLQRLS 130
+             K+ + +DEK +R +ER   NR AA   R++K+    E+E+  N   +  ++ Q LL +L 
+Sbjct:     4 KKKEVDDEKRRRILER---NRIAASKFRQKKKEWIKELEQTANAAFEQSKRLQLLLSQLQ 60
+
+Query:   131 Q--MEAENNRLSQQLAQLAAEVRG-----SRANTPMPGSPATASPTLTP---TLFKQERD 180
+             Q     ++  L+ Q  Q + ++R        A+  +        P   P    + +    
+Sbjct:    61 QEAFRLKSQLLAHQGCQCSVKIRSVLTDFQTAHNALHSQHMAYRPVQPPPGDNMLESVVS 120
+
+Query:   181 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223
+               P +  P       +  P + PS+   +SD  Q    S AGL
+Sbjct:   121 VSPTQMHPSLQGLPPNQHPQMPPSSQQPNSDDVQQHMFSAAGL 163
+
+
+>sp|Q90596|MAFK_CHICK Transcription factor MafK OS=Gallus gallus GN=MAFK PE=1
+            SV=1
+        Length = 156
+
+ Score = 98 (39.6 bits), Expect = 0.0062, P = 0.0062
+ Identities = 40/159 (25%), Positives = 73/159 (45%)
+
+Query:    47 PEEKKPAKKRKSWGQELPVPKTN---------LPPRKRAKTEDEK---EQRRIERVLRNR 94
+             P+  K  K ++  G+  PV   +         L    R  T++E    +QRR  R L+NR
+Sbjct:     5 PKPNKALKVKEESGENAPVLSDDELVSMSVRELNQHLRGLTKEEVIRLKQRR--RTLKNR 62
+
+Query:    95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+               A + R ++  + E+LE ++++++Q+ + L +  S M+ E + L  +   L    R + 
+Sbjct:    63 GYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMKLELDALRSKYEALQTFAR-TV 121
+
+Query:   155 ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS 193
+             A  P+  +P   + T   T+ K    E+    +PF   S
+Sbjct:   122 ARGPI--TPTKVATTSVITIVKSA--EISSSSVPFSAAS 156
+
+
+>sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xenopus tropicalis GN=mafb
+            PE=2 SV=1
+        Length = 316
+
+ Score = 106 (42.4 bits), Expect = 0.0063, P = 0.0062
+ Identities = 35/137 (25%), Positives = 66/137 (48%)
+
+Query:    29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ-RRI 87
+             SP+ +S +S  ++    + +     + R S  Q + +    L    R  T+D+  + ++ 
+Sbjct:   176 SPSGSSSSSQQLQNSHQQHQNSSAVEDRFSDDQLVSMSVRELNRHLRGFTKDDVIRLKQK 235
+
+Query:    88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147
+              R L+NR  AQ+ R ++  +   LENEK Q+ QQ + L   +S++  E +    +  +LA
+Sbjct:   236 RRTLKNRGYAQSCRFKRVQQKHHLENEKTQLIQQVEQLKLEVSRLARERDAYKIKCEKLA 295
+
+Query:   148 -AEVRGSRANTPMPGSP 163
+                 R + + +  P SP
+Sbjct:   296 NTTFREAGSTSDNPSSP 312
+
+
+>sp|Q1DQC1|PAN1_COCIM Actin cytoskeleton-regulatory complex protein PAN1
+            OS=Coccidioides immitis GN=PAN1 PE=3 SV=1
+        Length = 1485
+
+ Score = 114 (45.2 bits), Expect = 0.0065, P = 0.0065
+ Identities = 69/271 (25%), Positives = 102/271 (37%)
+
+Query:    16 PATPASEVPV-LTVS-PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73
+             P  P+ +V   +T S  A  + +S        + EEK+ A K++   QE    +  L   
+Sbjct:  1009 PPPPSRKVRTDVTESVEAKKAEDSVVASKARAEQEEKERALKQEQEAQE--AERKQL--E 1064
+
+Query:    74 KRAKTEDEKEQRRIERV-LRNRAAAQTSRERKRLEME----KLENEKIQMEQQNQFLLQR 128
+               AK ++E+  R  E    R RA  +  R+ K  + E    K + EK   E++ +   QR
+Sbjct:  1065 DEAKRQEEELAREKEAAQARLRALEEQVRQGKIKKQEEKRRKQQAEKEAKEKEARLAAQR 1124
+
+Query:   129 --LSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT---LTPTLFKQERDELP 183
+               L   +A    L +QL  +  E   S    P+  +P T++PT   + P  F Q     P
+Sbjct:  1125 AELEAAQARERELQRQLENMGEEESSSDDEGPIEITPQTSTPTQSQVLPAPFPQPSP--P 1182
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHS 243
+                +P P     D     +PS    S      P       E + S  P F     L   S
+Sbjct:  1183 TAALPVPAIQEPDQDVAREPSPTLPSPVETPEPVKQTLPPETE-SRNPYF---RQLSQQS 1238
+
+Query:   244 TDDVAAPLSDDDFNRLFHGDSSVEPDS-SVF 273
+                 A P  +      FH  +  E  S S F
+Sbjct:  1239 APSAAQPTHEMQSTNPFHRLAQQESTSKSAF 1269
+
+
+>sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus musculus GN=Mafb PE=1
+            SV=1
+        Length = 323
+
+ Score = 106 (42.4 bits), Expect = 0.0065, P = 0.0065
+ Identities = 41/152 (26%), Positives = 70/152 (46%)
+
+Query:    14 SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73
+             S  A+PA ++P     P   +  +A         E+      R S  Q + +    L   
+Sbjct:   174 SSAASPAQQLPTSHPGPGPHATAAATAAGGNGSVED------RFSDDQLVSMSVRELNRH 227
+
+Query:    74 KRAKTEDEKEQ-RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132
+              R  T+DE  + ++  R L+NR  AQ+ R ++  +   LENEK Q+ QQ + L Q +S++
+Sbjct:   228 LRGFTKDEVIRLKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRL 287
+
+Query:   133 EAENNRLSQQLAQLA-AEVRGSRANTPMPGSP 163
+               E +    +  +LA +  R + + +  P SP
+Sbjct:   288 ARERDAYKVKCEKLANSGFREAGSTSDSPSSP 319
+
+
+>sp|Q5A2K0|NST1_CANAL Stress response protein NST1 OS=Candida albicans GN=NST1
+            PE=3 SV=1
+        Length = 1399
+
+ Score = 113 (44.8 bits), Expect = 0.0078, P = 0.0078
+ Identities = 42/189 (22%), Positives = 84/189 (44%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+             K +E K +E++  KK ++  Q+       L   +R K E+E++Q+  E+  +     Q  
+Sbjct:   800 KIEEQKRKEEEHRKKVEAQ-QKREAEAKKLKEERRRKAEEERKQKEEEKKQKELLKKQKE 858
+
+Query:   101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM- 159
+              E+++ E+ + + E+ + ++  +   +R   M  +++ L++Q+    +++  + AN P+ 
+Sbjct:   859 EEKRQKELLRKQREEEKEKEAARLEEERTKLMVNDDDELARQIEVEKSKLSAAVANNPLL 918
+
+Query:   160 -------PGS-PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL-AESS 210
+                    PGS P T S    P L   +     L    F        S    P T   +S 
+Sbjct:   919 NHLYQPSPGSAPTTPSTANLPALSPLQSASAKLMSQQFEQQHQQQVSQEKLPQTSNIQSP 978
+
+Query:   211 DVAQHPAVS 219
+             +   HP++S
+Sbjct:   979 NQQPHPSIS 987
+
+ Score = 86 (35.3 bits), Expect = 7.0, P = 0.9991
+ Identities = 28/115 (24%), Positives = 62/115 (53%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+             K +E+K  ++K   K K   Q+L   K     RK  + + ++E++R+++  + +A  +  
+Sbjct:   729 KERELKKLKQKEKAKEKKRLQQLA--KEEERKRKEEELKAKEEEQRLQKE-KLKAEQKKR 785
+
+Query:   101 RERKRLEMEKLENEKIQ----MEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+             +E  RL+ E+ + +KI+     E++++  ++   + EAE  +L ++  + A E R
+Sbjct:   786 KEEARLKKEEEKKKKIEEQKRKEEEHRKKVEAQQKREAEAKKLKEERRRKAEEER 840
+
+
+>sp|Q8VCH8|UBXN4_MOUSE UBX domain-containing protein 4 OS=Mus musculus GN=Ubxn4
+            PE=1 SV=1
+        Length = 506
+
+ Score = 108 (43.1 bits), Expect = 0.0079, P = 0.0079
+ Identities = 57/225 (25%), Positives = 92/225 (40%)
+
+Query:    19 PASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKT 78
+             P S+   L  +PA + + S      E    +    +      Q      T    R   K 
+Sbjct:   146 PESKNTELCETPATSDIKSDTATGGECTGHDSHSQEPHGCSNQRPAEDLTVRVERLTKKL 205
+
+Query:    79 EDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN- 137
+             E+ +E++R E   R     +   ER++   E L+ ++ Q E+  + +L+  S+ +AE+  
+Sbjct:   206 EERREEKRKEEAQRE---IKKEIERRKTGKEMLDYKRKQEEELTKRMLEERSREKAEDRA 262
+
+Query:   138 ---RLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP---TLFKQE---RDELPLERIP 188
+                R+ QQ+A   AE R +R         A A+  LT    T  K+E   RD   + RI 
+Sbjct:   263 ARERIKQQIALDRAE-RAARFAKTKEAEAAKAAALLTKQAGTEVKRESTARDRSTIARIQ 321
+
+Query:   189 FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLF 233
+             F  P  S ++    PS  A   +  Q  A +V    G+ S   +F
+Sbjct:   322 FRLPDGSSFTNQF-PSD-APLEEARQFAAQTVGNTYGNFSLATMF 364
+
+
+>sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-binding protein 3-like
+            protein 3-A OS=Danio rerio GN=creb3l3a PE=2 SV=1
+        Length = 428
+
+ Score = 107 (42.7 bits), Expect = 0.0080, P = 0.0079
+ Identities = 50/195 (25%), Positives = 86/195 (44%)
+
+Query:     8 TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK 67
+             T  + ++  A PA+  P LTV   D  L+       +V  +  +     +   + L    
+Sbjct:   138 TQCASETPQAQPATGFP-LTVK--DLLLSGTPETAAKVSQQSYQELILTEDEKRLLAKEG 194
+
+Query:    68 TNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQ 127
+               LP +      +E+  ++I R +RN+ +AQ SR++K+  ++ LE+        N  L +
+Sbjct:   195 MTLPNQFPLTKYEERILKKIRRKIRNKQSAQESRKKKKEYIDGLESRMAACSAHNHELQR 254
+
+Query:   128 RLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERI 187
+             ++ Q+E  N  L +QL +L A V    +N P+          L+ TL       LP  + 
+Sbjct:   255 KVFQLEKCNISLMEQLRRLQALVMNG-SNKPVQAGTCVLVLLLSFTLIL-----LPNLK- 307
+
+Query:   188 PFPTPSLS---DYSP 199
+             PF    +S   D+SP
+Sbjct:   308 PFTDTKVSQHGDFSP 322
+
+
+>sp|P10158|FOSL1_RAT Fos-related antigen 1 OS=Rattus norvegicus GN=Fosl1 PE=2
+            SV=1
+        Length = 275
+
+ Score = 104 (41.7 bits), Expect = 0.0081, P = 0.0080
+ Identities = 51/185 (27%), Positives = 84/185 (45%)
+
+Query:    64 PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL------EMEKLENEKIQ 117
+             P P     P ++   E+E E+RR+ R     AAA+    RK L      E +KLE+EK  
+Sbjct:    90 PPPGVRRRPCEQISPEEE-ERRRVRRERNKLAAAKCRNRRKELTDFLQAETDKLEDEKSG 148
+
+Query:   118 MEQQNQFLLQRLSQMEA--ENNRLSQQLAQLAAEVRGSRANTPMPGSP-ATASPTLTPTL 174
+             ++++ + L ++  ++E   E +R   ++ +   +  G  ++T   GSP     P   P +
+Sbjct:   149 LQREIEELQKQKERLELVLEAHRPICKIPEEDKKDTGGTSSTSGAGSPPGPCRPV--PCI 206
+
+Query:   175 FKQERDELPLERIPFPT----PSLSDYSPTLK---PSTLAESSDVAQHPAVSVAGLEGDG 227
+                    L  E +  PT    PSL+ ++P+L    PST    S   +  + S     GD 
+Sbjct:   207 SLSPGPVLEPEALHTPTLMTTPSLTPFTPSLVFTYPSTPEPCSSAHRKSSSS----SGDP 262
+
+Query:   228 SALPL 232
+             S+ PL
+Sbjct:   263 SSDPL 267
+
+
+>sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS=Mus musculus GN=Jdp2 PE=1
+            SV=2
+        Length = 163
+
+ Score = 98 (39.6 bits), Expect = 0.0081, P = 0.0081
+ Identities = 43/152 (28%), Positives = 71/152 (46%)
+
+Query:    16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR 75
+             P+  A  +P L   P  T L S+ + T+E+K  + +      +    L V K    P+  
+Sbjct:     9 PSVTAGSLPGL--GPL-TGLPSSALTTEELKYADIRNIGAMIAPLHFLEV-KLGKRPQP- 63
+
+Query:    76 AKTE-DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134
+              K+E DE+E+RR  R  +N+ AA   R +K+   E L+ E  ++E  N  L  ++ +++ 
+Sbjct:    64 VKSELDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLELMNAELKTQIEELKL 123
+
+Query:   135 ENNRLSQQLAQLAAE--VRGSRANTP-MPGSP 163
+             E  +L   L +      VR     TP   G+P
+Sbjct:   124 ERQQLILMLNRHRPTCIVRTDSVRTPESEGNP 155
+
+
+>sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=Rattus norvegicus GN=Jdp2
+            PE=1 SV=1
+        Length = 163
+
+ Score = 98 (39.6 bits), Expect = 0.0081, P = 0.0081
+ Identities = 43/152 (28%), Positives = 71/152 (46%)
+
+Query:    16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR 75
+             P+  A  +P L   P  T L S+ + T+E+K  + +      +    L V K    P+  
+Sbjct:     9 PSVTAGSLPGL--GPL-TGLPSSALTTEELKYADIRNIGAMIAPLHFLEV-KLGKRPQP- 63
+
+Query:    76 AKTE-DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134
+              K+E DE+E+RR  R  +N+ AA   R +K+   E L+ E  ++E  N  L  ++ +++ 
+Sbjct:    64 VKSELDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLELMNAELKTQIEELKL 123
+
+Query:   135 ENNRLSQQLAQLAAE--VRGSRANTP-MPGSP 163
+             E  +L   L +      VR     TP   G+P
+Sbjct:   124 ERQQLILMLNRHRPTCIVRTDSVRTPESEGNP 155
+
+
+>sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sapiens GN=FOSL2 PE=1 SV=1
+        Length = 326
+
+ Score = 105 (42.0 bits), Expect = 0.0086, P = 0.0085
+ Identities = 37/125 (29%), Positives = 64/125 (51%)
+
+Query:    68 TNLPPRKRAK--TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             T +  R+R +  + +E+E+RRI R  RN+ AA   R R+R   EKL+ E  ++E++   L
+Sbjct:   108 TTVGRRRRDEQLSPEEEEKRRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGL 166
+
+Query:   126 LQRLSQMEAENNRLSQQLAQLAAEVRGS---RANTPMPG-SPA-TASPTLTPTLFKQERD 180
+              + +++++ E  +L   L       + S   R + P PG  P  +   ++   + KQE  
+Sbjct:   167 QKEIAELQKEKEKLEFMLVAHGPVCKISPEERRSPPAPGLQPMRSGGGSVGAVVVKQE-- 224
+
+Query:   181 ELPLE 185
+               PLE
+Sbjct:   225 --PLE 227
+
+
+>sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gallus gallus GN=MAFA PE=1
+            SV=1
+        Length = 286
+
+ Score = 104 (41.7 bits), Expect = 0.0087, P = 0.0087
+ Identities = 26/79 (32%), Positives = 43/79 (54%)
+
+Query:    89 RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA 148
+             R L+NR  AQ+ R ++  +   LENEK Q++ Q + L Q +S++  E +   ++  +LAA
+Sbjct:   205 RTLKNRGYAQSCRYKRVQQRHILENEKCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA 264
+
+Query:   149 EVRGSRANTPMPGSPATAS 167
+               RG       P +P T +
+Sbjct:   265 --RGFPREPSPPAAPKTTA 281
+
+
+>sp|A1C9M5|KAPC_ASPCL Putative transcription factor kapC OS=Aspergillus
+            clavatus GN=kapC PE=3 SV=2
+        Length = 288
+
+ Score = 103 (41.3 bits), Expect = 0.011, Sum P(2) = 0.010
+ Identities = 33/159 (20%), Positives = 67/159 (42%)
+
+Query:    66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             P+ +L  ++  KT  ++     +R  +NRAA +  R+RK   +  LE +    E   +  
+Sbjct:    83 PQPDLSGQESPKTYGKRPLSTSKRAAQNRAAQRAFRQRKEAHIRDLEGKVKAYETMGE-- 140
+
+Query:   126 LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPATASPTLTPTLFKQERDELPL 184
+                +  ++AEN +L + +  L + +  ++   P +PG+   + P     +          
+Sbjct:   141 --AIKALQAENYQLREYIINLQSRLLDTQGEVPELPGNIDLSQPRGDIPVPAPPTSGTST 198
+
+Query:   185 ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223
+               +P P P+        +    A + D+     ++VAGL
+Sbjct:   199 SAVPVPPPTAPQQPQPAQNQASAPNDDMNSLNRIAVAGL 237
+
+ Score = 38 (18.4 bits), Expect = 0.011, Sum P(2) = 0.010
+ Identities = 8/17 (47%), Positives = 10/17 (58%)
+
+Query:   299 DSEPVTLEGIEMAHGLP 315
+             D+  +TL   E  HGLP
+Sbjct:   269 DASELTLPKQEPTHGLP 285
+
+
+>sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7 OS=Rattus norvegicus
+            GN=Mapk7 PE=1 SV=1
+        Length = 806
+
+ Score = 109 (43.4 bits), Expect = 0.011, P = 0.011
+ Identities = 69/258 (26%), Positives = 106/258 (41%)
+
+Query:     3 CDMEKTMSSVDSLP--ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR---K 57
+             C ME   S   +LP  + PA +   LT+ PA  +   A  K +    +  K A K    K
+Sbjct:   429 CAME---SPPPALPPCSGPAPDTVDLTLQPAPPASELAPPKREGAISDNTKAALKAALLK 485
+
+Query:    58 SWGQEL---PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE 114
+             S    L   P      P  ++  T  E+++ R E+  R +  A+  RE++R E E+ E  
+Sbjct:   486 SLRSRLRDGPSAPLEAPEPRKPVTAQERQREREEKRRRRQERAK-EREKRRQERERKERG 544
+
+Query:   115 KIQMEQQNQFLLQRLSQMEAENNR-LSQQLAQLAAEVRGSRANTPMPG-SPATASPTLTP 172
+                +   +   L  L  + ++N+R L ++  ++A     + A  P P   P++A PT  P
+Sbjct:   545 AGTLGGPSTDPLAGL--VLSDNDRSLLERWTRMARPPVPAPAPAPAPTPKPSSAQPTSPP 602
+
+Query:   173 T-LFKQERDEL-PLERIPFPT--PSLSDYSPTLKPS--------TLAESSDVAQHPAVSV 220
+                  Q    L P   IP P   P      P  +P+        T   +S +A    V  
+Sbjct:   603 NGPVSQSTAPLQPAGSIPGPASQPVCPPPGPVPQPAGPVPAPLQTAPSTSLLASQSLVPP 662
+
+Query:   221 AGLEGDGS--ALPLFDLG 236
+             +GL G G+   LP F  G
+Sbjct:   663 SGLPGSGAPEVLPYFPSG 680
+
+
+>sp|Q15424|SAFB1_HUMAN Scaffold attachment factor B1 OS=Homo sapiens GN=SAFB
+            PE=1 SV=4
+        Length = 915
+
+ Score = 109 (43.4 bits), Expect = 0.013, P = 0.013
+ Identities = 32/95 (33%), Positives = 52/95 (54%)
+
+Query:    50 KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEM 108
+             K+P K R S        ++    R +A+ E E E+ R+E + R R A Q  R ER+R+E 
+Sbjct:   609 KEPRKSRDSESHSRVRERSEREQRMQAQWERE-ERERLE-IARERLAFQRQRLERERMER 666
+
+Query:   109 EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL 143
+             E+LE E++ +E + +   +R+ + E E  R  Q+L
+Sbjct:   667 ERLERERMHVEHERRREQERIHR-EREELRRQQEL 700
+
+
+>sp|O60841|IF2P_HUMAN Eukaryotic translation initiation factor 5B OS=Homo
+            sapiens GN=EIF5B PE=1 SV=4
+        Length = 1220
+
+ Score = 110 (43.8 bits), Expect = 0.014, P = 0.014
+ Identities = 60/257 (23%), Positives = 109/257 (42%)
+
+Query:     7 KTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE--EKKPAKKRKSWGQELP 64
+             K+  +VD+    PASE    T + A+   N  D K ++ K +  EK+  +K K  G    
+Sbjct:   282 KSKVTVDT-GVIPASEEKAETPTAAEDD-NEGDKKKKDKKKKKGEKEEKEKEKKKGPSKA 339
+
+Query:    65 VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF 124
+               K       + K E+E+++R  E     R       E KR E E+LE EK + ++Q + 
+Sbjct:   340 TVKAMQEALAKLKEEEERQKREEEE----RIKRLEELEAKRKEEERLEQEKRERKKQKE- 394
+
+Query:   125 LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPL 184
+               +R  +++ E   L++  +Q  A  R + A   +  +     P+         +D LP 
+Sbjct:   395 -KERKERLKKEGKLLTK--SQREARAR-AEATLKLLQAQGVEVPS---------KDSLPK 441
+
+Query:   185 ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL-EGDGSALPLF-DLGSDLKHH 242
+             +R  +           L+   ++ES ++     V   G+ E + +  P+  +   D +  
+Sbjct:   442 KRPIYEDKKRKKIPQQLESKEVSESMELCAAVEVMEQGVPEKEETPPPVEPEEEEDTEDA 501
+
+Query:   243 STDDVAAPLSDDDFNRL 259
+               DD  A  SD++  ++
+Sbjct:   502 GLDDWEAMASDEETEKV 518
+
+
+>sp|Q5RDE1|IF2P_PONAB Eukaryotic translation initiation factor 5B OS=Pongo
+            abelii GN=EIF5B PE=2 SV=2
+        Length = 1220
+
+ Score = 110 (43.8 bits), Expect = 0.014, P = 0.014
+ Identities = 61/260 (23%), Positives = 110/260 (42%)
+
+Query:     6 EKTMSSVDSLPA--TPASEVPVLTVSPADTSLNSADVKTQEVKPE--EKKPAKKRKSWGQ 61
+             E+T+ S  +L     PASE    T + A+   N  D K ++ K +  EK+  +K K  G 
+Sbjct:   278 EETVKSKVTLDTGVIPASEEKAETPTAAEDD-NEGDKKKKDKKKKKGEKEEKEKEKKKGP 336
+
+Query:    62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121
+                  K       + K E+E+++R  E     R       E KR E E+LE EK + ++Q
+Sbjct:   337 SKATVKAMQEALAKLKEEEERQKREEEE----RIKRLEELEAKRKEEERLEQEKRERKKQ 392
+
+Query:   122 NQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDE 181
+              +   +R  +++ E   L++  +Q  A  R + A   +  +     P+         +D 
+Sbjct:   393 KE--KERKERLKKEGKLLTK--SQREARAR-AEATLKLLQAQGVEVPS---------KDS 438
+
+Query:   182 LPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL-EGDGSALPLF-DLGSDL 239
+             LP +R  +           L+   ++ES ++     V   G+ E + +  P+  +   D 
+Sbjct:   439 LPKKRPIYEDKKRKKIPQQLESKEVSESMELCAAVEVMEQGVPEKEETPPPVEPEEEEDT 498
+
+Query:   240 KHHSTDDVAAPLSDDDFNRL 259
+             +    DD  A  SD++  ++
+Sbjct:   499 EDAGLDDWEAMASDEETEKV 518
+
+
+>sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like protein 6
+            OS=Arabidopsis thaliana GN=ABF3 PE=1 SV=1
+        Length = 454
+
+ Score = 105 (42.0 bits), Expect = 0.015, P = 0.014
+ Identities = 47/145 (32%), Positives = 72/145 (49%)
+
+Query:    14 SLPATPASEV-P-VLTVS--PADTSLNSA-DVKT----QEVKP-EEKKPAKKRKS-WGQE 62
+             S PAT   EV P +L +   P + +L  A D KT      V P  +  P    KS     
+Sbjct:   291 SQPATQCQEVKPSILGIHNHPMNNNLLQAVDFKTGVTVAAVSPGSQMSPDLTPKSALDAS 350
+
+Query:    63 L-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121
+             L PVP      RK     ++  +RR +R+++NR +A  SR RK+    +LE E  Q+++ 
+Sbjct:   351 LSPVPYMFGRVRKTGAVLEKVIERRQKRMIKNRESAARSRARKQAYTMELEAEIAQLKEL 410
+
+Query:   122 NQFLLQRLSQ-MEAENNRLSQQLAQ 145
+             N+ L ++  + ME + N+L + L Q
+Sbjct:   411 NEELQKKQVEIMEKQKNQLLEPLRQ 435
+
+
+>sp|A9V549|EIF3A_MONBE Eukaryotic translation initiation factor 3 subunit A
+            OS=Monosiga brevicollis GN=33388 PE=3 SV=1
+        Length = 1052
+
+ Score = 109 (43.4 bits), Expect = 0.016, P = 0.015
+ Identities = 41/140 (29%), Positives = 65/140 (46%)
+
+Query:    39 DVKTQEVKPEEKKP-AKKRKSWGQELPVPKTNLPPRKRAKTEDEK------EQRRI--ER 89
+             D   +E   E +K    K   + Q +   K  L   +R +  +EK      EQRRI  E 
+Sbjct:   764 DAYIEEKTAERRKEYMAKLDDFKQRMQEQKIRLEREERERKREEKRRAEEEEQRRIKQEE 823
+
+Query:    90 VLRNRAAAQTSRERKRLEMEKLEN-EKIQMEQQNQFLLQRLSQMEA-ENNRLSQQLAQLA 147
+               R +   +  RE++R E  KLE  E+ +ME+  +   QR  Q+ A E  +LS   AQ +
+Sbjct:   824 EDRKQREREAKREQERQEQLKLEEAERKKMEEATKLQRQREEQVRAREQEKLSNLSAQTS 883
+
+Query:   148 AEV--RGSRANTPMPGSPAT 165
+                  R +R++ P   +P++
+Sbjct:   884 QPTWKRSARSDAPTTAAPSS 903
+
+ Score = 90 (36.7 bits), Expect = 1.9, P = 0.85
+ Identities = 35/141 (24%), Positives = 63/141 (44%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM 108
+             E+K A++RK +  +L   K  +  +K     +E+E++R E+    RA  +  R  K+ E 
+Sbjct:   768 EEKTAERRKEYMAKLDDFKQRMQEQKIRLEREERERKREEK---RRAEEEEQRRIKQEEE 824
+
+Query:   109 EKLENEK-IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS 167
+             ++ + E+  + EQ+ Q   ++L   EAE  ++ +            RA      S  +A 
+Sbjct:   825 DRKQREREAKREQERQ---EQLKLEEAERKKMEEATKLQRQREEQVRAREQEKLSNLSAQ 881
+
+Query:   168 PTLTPTLFKQERDELPLERIP 188
+              T  PT  +  R + P    P
+Sbjct:   882 -TSQPTWKRSARSDAPTTAAP 901
+
+
+>sp|Q9UKV3|ACINU_HUMAN Apoptotic chromatin condensation inducer in the nucleus
+            OS=Homo sapiens GN=ACIN1 PE=1 SV=1
+        Length = 1341
+
+ Score = 110 (43.8 bits), Expect = 0.016, P = 0.016
+ Identities = 53/190 (27%), Positives = 88/190 (46%)
+
+Query:    46 KPEEKKPAKKRKSWGQELP--VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-E 102
+             K  E    K+ K  G+E+P   P+  +  R + ++++++   R  R  R++  A+ S   
+Sbjct:   294 KSREAPILKEFKEEGEEIPRVKPEEMMDERPKTRSQEQEVLERGGRFTRSQEEARKSHLA 353
+
+Query:   103 RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN--RLSQ--QLAQLAA--EVRGSRAN 156
+             R++ E E      ++ E++     Q L +     +  RL++  + A L A  E   S   
+Sbjct:   354 RQQQEKEMKTTSPLEEEEREIKSSQGLKEKSKSPSPPRLTEDRKKASLVALPEQTASEEE 413
+
+Query:   157 TPMPG-SPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD--VA 213
+             TP P  +   +SP   P L  +E  E P+E  P P P L   SP   P+T A++ +  V+
+Sbjct:   414 TPPPLLTKEASSPPPHPQLHSEEEIE-PMEG-PAP-PVLIQLSP---PNTDADTRELLVS 467
+
+Query:   214 QHPAVSVAGL 223
+             QH    V GL
+Sbjct:   468 QHTVQLVGGL 477
+
+
+>sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xenopus laevis GN=stambp
+            PE=2 SV=1
+        Length = 416
+
+ Score = 104 (41.7 bits), Expect = 0.017, P = 0.016
+ Identities = 52/179 (29%), Positives = 77/179 (43%)
+
+Query:    39 DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR---KRAKTEDEK---EQRRIERVLR 92
+             D KT  V PE+K+  KK K    E+  PK     +   KR K E E+   +QR+ E    
+Sbjct:    79 DYKTANV-PEKKETLKKLK----EIAFPKAEELKKELHKRYKKEYEEYSEKQRKEEEERA 133
+
+Query:    93 NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL-LQRLSQMEAENNRLSQQLAQLAAEVR 151
+              R A Q   + ++  +  L+ ++ Q EQ   F  + R  ++EAE  R+  Q ++   E  
+Sbjct:   134 RRLALQQQLDAEKQRVALLKQQQEQQEQVQAFEEMMRRKELEAERLRILHQFSK--DEPE 191
+
+Query:   152 GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS 210
+                  +P+   P    P +TP L        P      P P   D S  LKPS+   +S
+Sbjct:   192 AEPLGSPL--IPGMNEPPVTPLL--------PSYGTVQPHPPAVDRS--LKPSSYGSNS 238
+
+
+>sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containing protein 88B OS=Mus
+            musculus GN=Ccdc88b PE=1 SV=2
+        Length = 1481
+
+ Score = 110 (43.8 bits), Expect = 0.018, P = 0.018
+ Identities = 49/182 (26%), Positives = 76/182 (41%)
+
+Query:     6 EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV 65
+             EK    +DS       E  +  +   +T   SA  K  E+  EE +  ++R      L  
+Sbjct:   281 EKAEQLLDSQAEVQGLEAEIRRLRQ-ETQALSAQAKRAELYREEAEALRERAGRLPRLQE 339
+
+Query:    66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+                    + +A  E  K Q   ERVL     A      ++LE+ +  + ++   Q+   L
+Sbjct:   340 ELRRCREKLQA-AEVFKGQLEEERVLSEALEASKVLLEEQLEVARERSARLHETQRENLL 398
+
+Query:   126 LQ-RLSQMEAENNRLSQQLAQLAAE-----VRGSRANTPMPGSPATAS-PTLTPTLFKQE 178
+             L+ RL +  A+ + L  QL QL  E     +   R+  P PGSP  AS P   P+L  + 
+Sbjct:   399 LRTRLGEAHADLDSLRHQLEQLVEENVELELELQRSLEPPPGSPGEASLPGAAPSLQDEV 458
+
+Query:   179 RD 180
+             R+
+Sbjct:   459 RE 460
+
+ Score = 92 (37.4 bits), Expect = 1.6, P = 0.81
+ Identities = 24/81 (29%), Positives = 42/81 (51%)
+
+Query:    74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133
+             +R + E E+ Q  +  V R R   Q  R   R  + +LE E+ Q+E Q+Q L +   Q++
+Sbjct:  1164 RRLQNEHERAQMLLAEVSRERGELQGERGELRSRLARLELERAQLEIQSQQLRESNQQLD 1223
+
+Query:   134 AENNRLSQQLAQLAAEVRGSR 154
+                 RL+ Q  +L  ++R ++
+Sbjct:  1224 LSACRLTTQ-CELLTQLRSAQ 1243
+
+
+>sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapiens GN=FOS PE=1 SV=1
+        Length = 380
+
+ Score = 103 (41.3 bits), Expect = 0.019, P = 0.018
+ Identities = 50/175 (28%), Positives = 72/175 (41%)
+
+Query:    74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             +R K E    +E+E+RRI R  RN+ AA   R R+R   + L+ E  Q+E +   L   +
+Sbjct:   125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183
+             + +  E  +L   LA      +    +   P   + AS  LT   P +   E +E   LP
+Sbjct:   184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLTGGLPEVATPESEEAFTLP 242
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GS 237
+             L   P P PS+             E  D    PA S         ++P  DL GS
+Sbjct:   243 LLNDPEPKPSVEPVKSISSMELKTEPFDDFLFPASSRPSGSETARSVPDMDLSGS 297
+
+
+>sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norvegicus GN=Fos PE=1 SV=1
+        Length = 380
+
+ Score = 103 (41.3 bits), Expect = 0.019, P = 0.018
+ Identities = 51/175 (29%), Positives = 71/175 (40%)
+
+Query:    74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             +R K E    +E+E+RRI R  RN+ AA   R R+R   + L+ E  Q+E +   L   +
+Sbjct:   125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183
+             + +  E  +L   LA      +    +   P   +  S  LT   P     E +E   LP
+Sbjct:   184 ANLLKEKEKLEFILAAHRPACKIPN-DLGFPEEMSVTSLDLTGGLPEATTPESEEAFTLP 242
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GS 237
+             L   P P PSL            AE  D    PA S         ++P  DL GS
+Sbjct:   243 LLNDPEPKPSLEPVKNISNMELKAEPFDDFLFPASSRPSGSETARSVPDVDLSGS 297
+
+
+>sp|P19880|YAP1_YEAST AP-1-like transcription factor YAP1 OS=Saccharomyces
+            cerevisiae GN=YAP1 PE=1 SV=2
+        Length = 650
+
+ Score = 96 (38.9 bits), Expect = 0.019, Sum P(2) = 0.019
+ Identities = 36/131 (27%), Positives = 61/131 (46%)
+
+Query:    28 VSPADTS-LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRR 86
+             VSP   +    +  +  E++ E ++   +    G++   PK      K +K +D   + +
+Sbjct:    13 VSPGSLAEFEGSKSRHDEIENEHRRTGTRD---GEDSEQPKKK--GSKTSKKQDLDPETK 67
+
+Query:    87 IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146
+              +R  +NRAA +  RERK  +M++LE +K+Q  +  Q       Q E E   L  QL  L
+Sbjct:    68 QKRTAQNRAAQRAFRERKERKMKELE-KKVQSLESIQ------QQNEVEATFLRDQLITL 120
+
+Query:   147 AAEVRGSRANT 157
+               E++  R  T
+Sbjct:   121 VNELKKYRPET 131
+
+ Score = 53 (23.7 bits), Expect = 0.019, Sum P(2) = 0.019
+ Identities = 25/114 (21%), Positives = 50/114 (43%)
+
+Query:   160 PGSPA---TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP 216
+             PGS      A+    P+L +  ++++P        P  +  +  L+P + ++S +   + 
+Sbjct:   438 PGSTGIGNNAASNTNPSLLQSSKEDIPFINANLAFPDDNSTNIQLQPFSESQSQNKFDYD 497
+
+Query:   217 AV-SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPD 269
+                  +  EG+     LF  G  L+    D  AA +SDD+ + + +   + EP+
+Sbjct:   498 MFFRDSSKEGNN----LF--GEFLEDDDDDKKAANMSDDESSLIKNQLINEEPE 545
+
+
+>sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modulator OS=Mus musculus GN=Sltm
+            PE=1 SV=1
+        Length = 1031
+
+ Score = 108 (43.1 bits), Expect = 0.019, P = 0.019
+ Identities = 30/84 (35%), Positives = 49/84 (58%)
+
+Query:    73 RKRAKTEDEKEQRRIERVLRNRAAAQTSR---ERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             R+R +   E+E+R  ER+ R R   +  R   ER+R+E E+LE E+I++EQ+ +   +R+
+Sbjct:   644 RERIRIIREREER--ERLQRERERLEIERQKLERERMERERLERERIRIEQERRREAERI 701
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGS 153
+             ++   E  R  QQL +   E R S
+Sbjct:   702 AREREELRRQQQQL-RYEQEKRNS 724
+
+ Score = 103 (41.3 bits), Expect = 0.069, P = 0.067
+ Identities = 33/117 (28%), Positives = 64/117 (54%)
+
+Query:    39 DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK-TEDEKEQRRIERVLRNRAAA 97
+             D + +E+ P EK   ++ +         K  +  R+R +  E E+ +R   R++R R   
+Sbjct:   597 DYRRKEILPFEKMKEQRLREHLVRFERLKQAVEFRRRKEIAERERRERERIRIIREREER 656
+
+Query:    98 QT-SRERKRLEME--KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+             +   RER+RLE+E  KLE E+++ E+  +   +R+ ++E E  R ++++A+   E+R
+Sbjct:   657 ERLQRERERLEIERQKLERERMERERLER---ERI-RIEQERRREAERIAREREELR 709
+
+
+>sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modulator OS=Homo sapiens GN=SLTM
+            PE=1 SV=2
+        Length = 1034
+
+ Score = 108 (43.1 bits), Expect = 0.020, P = 0.019
+ Identities = 30/84 (35%), Positives = 49/84 (58%)
+
+Query:    73 RKRAKTEDEKEQRRIERVLRNRAAAQTSR---ERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             R+R +   E+E+R  ER+ R R   +  R   ER+R+E E+LE E+I++EQ+ +   +R+
+Sbjct:   645 RERIRIIREREER--ERLQRERERLEIERQKLERERMERERLERERIRIEQERRKEAERI 702
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGS 153
+             ++   E  R  QQL +   E R S
+Sbjct:   703 AREREELRRQQQQL-RYEQEKRNS 725
+
+ Score = 100 (40.3 bits), Expect = 0.15, P = 0.14
+ Identities = 33/117 (28%), Positives = 65/117 (55%)
+
+Query:    39 DVKTQEVKPEEK-KPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA 97
+             D + +E+ P EK K  + R+   +   + +     R+R   E E+ +R   R++R R   
+Sbjct:   598 DYRRKEILPFEKMKEQRLREHLVRFERLRRAMELRRRREIAERERRERERIRIIREREER 657
+
+Query:    98 QT-SRERKRLEME--KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+             +   RER+RLE+E  KLE E+++ E+  +   +R+ ++E E  + ++++A+   E+R
+Sbjct:   658 ERLQRERERLEIERQKLERERMERERLER---ERI-RIEQERRKEAERIAREREELR 710
+
+
+>sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sapiens GN=HLF PE=2 SV=1
+        Length = 295
+
+ Score = 101 (40.6 bits), Expect = 0.020, P = 0.020
+ Identities = 39/151 (25%), Positives = 67/151 (44%)
+
+Query:     2 SCDMEKTMSSVDSLPA---TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS 58
+             +C M+  +     LPA   TP+   P     P     + AD+    +  +E    +KRK 
+Sbjct:   142 NC-MQSPIRPGQLLPANRNTPSPIDPDTIQVPVGYEPDPADLALSSIPGQEMFDPRKRKF 200
+
+Query:    59 WGQEL-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQ 117
+               +EL P P      RK    +D K+ +   R  +N  AA+ SR+ +RL+  ++      
+Sbjct:   201 SEEELKPQPMIK-KARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKENQIAIRASF 259
+
+Query:   118 MEQQNQFLLQRLSQMEAENNRLSQQLAQLAA 148
+             +E++N  L Q ++ +  E  +    LA+  A
+Sbjct:   260 LEKENSALRQEVADLRKELGKCKNILAKYEA 290
+
+
+>sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus musculus GN=Hlf PE=2 SV=1
+        Length = 295
+
+ Score = 101 (40.6 bits), Expect = 0.020, P = 0.020
+ Identities = 39/151 (25%), Positives = 67/151 (44%)
+
+Query:     2 SCDMEKTMSSVDSLPA---TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS 58
+             +C M+  +     LPA   TP+   P     P     + AD+    +  +E    +KRK 
+Sbjct:   142 NC-MQSPIRPGQLLPANRNTPSPIDPDTIQVPVGYEPDPADLALSSIPGQEMFDPRKRKF 200
+
+Query:    59 WGQEL-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQ 117
+               +EL P P      RK    +D K+ +   R  +N  AA+ SR+ +RL+  ++      
+Sbjct:   201 SEEELKPQPMIK-KARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKENQIAIRASF 259
+
+Query:   118 MEQQNQFLLQRLSQMEAENNRLSQQLAQLAA 148
+             +E++N  L Q ++ +  E  +    LA+  A
+Sbjct:   260 LEKENSALRQEVADLRKELGKCKNILAKYEA 290
+
+
+>sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Yarrowia lipolytica
+            GN=NST1 PE=3 SV=1
+        Length = 889
+
+ Score = 107 (42.7 bits), Expect = 0.021, P = 0.021
+ Identities = 43/157 (27%), Positives = 72/157 (45%)
+
+Query:    74 KRAKTEDEKEQRRIERV-LRNRAAAQTSRERKRLEMEKLENEKIQMEQ-QNQFL-----L 126
+             +R +   EKE+R  E +  R +      RE++RLE E++ENE+++ E+ +N+ L      
+Sbjct:   489 ERMRLAKEKEEREKEELRARQQQEEDERREKERLEEERIENERLEAERIENERLEKEREQ 548
+
+Query:   127 QRLSQMEAENNRLSQQLA-QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE 185
+             QRL + E E  R+ ++   Q   E R  RA+  +P S      T  P      +    L 
+Sbjct:   549 QRLEE-EKERQRIKEEREKQKLEEEREKRASMSIPLSKPLPGKTQIPA----SQPGTSLG 603
+
+Query:   186 RIPFPTPSLSDYSPT-LKPSTLAES--SDVAQHPAVS 219
+              +  P P  +  +P  + P + +      + QH A S
+Sbjct:   604 GLQQPVPQAAPVAPVAMMPQSPSPQLPPGLTQHVAQS 640
+
+ Score = 104 (41.7 bits), Expect = 0.045, P = 0.044
+ Identities = 43/158 (27%), Positives = 75/158 (47%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRL 106
+             EEK+ A+ R+   + + + K      +R K E    Q++ E   R +   +  R E +RL
+Sbjct:   477 EEKRLARIREM-EERMRLAKEK---EEREKEELRARQQQEEDERREKERLEEERIENERL 532
+
+Query:   107 EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA---NTPMPGS- 162
+             E E++ENE+++ E++ Q L +   +   +  R  Q+L +   E R S +   + P+PG  
+Sbjct:   533 EAERIENERLEKEREQQRLEEEKERQRIKEEREKQKLEE-EREKRASMSIPLSKPLPGKT 591
+
+Query:   163 --PATASPTLTPTLFK---QERDELPLERIP-FPTPSL 194
+               PA+   T    L +   Q     P+  +P  P+P L
+Sbjct:   592 QIPASQPGTSLGGLQQPVPQAAPVAPVAMMPQSPSPQL 629
+
+ Score = 91 (37.1 bits), Expect = 1.2, P = 0.70
+ Identities = 42/181 (23%), Positives = 72/181 (39%)
+
+Query:    44 EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER 103
+             E K +EK+  K  +    E    K      ++A+   EKE++R+ R+       + ++E+
+Sbjct:   441 ERKQQEKEREKAARKAASEA---KQKARQEEQARLAREKEEKRLARIREMEERMRLAKEK 497
+
+Query:   104 KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSP 163
+             +  E E+L   + Q E+  +   +RL +   EN RL       A  +   R         
+Sbjct:   498 EEREKEELRARQ-QQEEDERREKERLEEERIENERLE------AERIENERLEKER--EQ 548
+
+Query:   164 ATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223
+                         K+ER++  LE       S+S   P  KP    ++   A  P  S+ GL
+Sbjct:   549 QRLEEEKERQRIKEEREKQKLEEEREKRASMS--IPLSKPLP-GKTQIPASQPGTSLGGL 605
+
+Query:   224 E 224
+             +
+Sbjct:   606 Q 606
+
+ Score = 84 (34.6 bits), Expect = 7.0, P = 0.9990
+ Identities = 33/120 (27%), Positives = 59/120 (49%)
+
+Query:    37 SADVKT--QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR 94
+             +A VK   Q+++ E+K    ++++  Q+    K      ++A  E+EK +   ER  R +
+Sbjct:   368 AAQVKAELQQMEEEKKTLDLEKEARDQQRRERKKEKKRAQKAIKEEEKRKAAAEREEREK 427
+
+Query:    95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+               A+ + ER RLE E+ + EK   E++      R +  EA+     ++ A+LA E    R
+Sbjct:   428 REAEEA-ERLRLEAERKQQEK---EREKA---ARKAASEAKQKARQEEQARLAREKEEKR 480
+
+ Score = 76 (31.8 bits), Expect = 0.85, Sum P(2) = 0.57
+ Identities = 27/101 (26%), Positives = 48/101 (47%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102
+             +E + ++++  KK K   Q+    +     RK A   +E+E+R  E   R R  A+  ++
+Sbjct:   389 KEARDQQRRERKKEKKRAQKAIKEEEK---RKAAAEREEREKREAEEAERLRLEAERKQQ 445
+
+Query:   103 RKRLEM--EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQ 141
+              K  E    K  +E  Q  +Q +    RL++ E E  RL++
+Sbjct:   446 EKEREKAARKAASEAKQKARQEE--QARLAR-EKEEKRLAR 483
+
+ Score = 61 (26.5 bits), Expect = 0.85, Sum P(2) = 0.57
+ Identities = 25/91 (27%), Positives = 38/91 (41%)
+
+Query:   129 LSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIP 188
+             L+Q  A++  L  +L            +TP PGS  + + TL  +L +  +   P    P
+Sbjct:   633 LTQHVAQSQILLDRLTPDPTSRMTPERHTPSPGSTTSNAKTLLDSLLRPAQG--PSTPPP 690
+
+Query:   189 FP-TP--SLSDYSPTLKPSTLAESSDVAQHP 216
+              P TP  S+S  +P     T+     V Q P
+Sbjct:   691 GPGTPRSSISHVAPVGAIGTIGSPGQVNQQP 721
+
+
+>sp|Q498L2|SLTM_XENLA SAFB-like transcription modulator OS=Xenopus laevis
+            GN=sltm PE=2 SV=1
+        Length = 998
+
+ Score = 105 (42.0 bits), Expect = 0.022, Sum P(2) = 0.022
+ Identities = 26/84 (30%), Positives = 48/84 (57%)
+
+Query:    73 RKRAKTEDEKEQRRIERVLRNRAAAQTSR---ERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             R+R +    +E+  ++R+ R R   +  R   ER+R+E E+LE E+I++EQ+ +   +R+
+Sbjct:   607 RERERIRIMREREELDRLQRERERLEIERQKLERERMERERLERERIRIEQERRREAERI 666
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGS 153
+             ++   E  R  +QL +   E R S
+Sbjct:   667 AREREELRRQQEQL-RFEQEKRNS 689
+
+ Score = 47 (21.6 bits), Expect = 0.022, Sum P(2) = 0.022
+ Identities = 15/56 (26%), Positives = 25/56 (44%)
+
+Query:    29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP-PRKRAKTEDEKE 83
+             S   +S+   D ++ +    EKK  K+ K   +E     T +P P    K E+ K+
+Sbjct:   456 SKTQSSVKKDDRRSSD--KAEKKDGKELKKDSKEKSESATTVPSPESSKKNEERKK 509
+
+ Score = 44 (20.5 bits), Expect = 0.045, Sum P(2) = 0.044
+ Identities = 16/78 (20%), Positives = 32/78 (41%)
+
+Query:     6 EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV 65
+             E++ + V+ L     +E      S  D     +D++ +E + +EKK         QE+  
+Sbjct:   120 EESATFVNVLSTEEENETK--QTSHFDNPERGSDIQAEEAEEDEKKDVTGSGDVTQEISK 177
+
+Query:    66 PKTNLPPRKRAKTEDEKE 83
+             P  +       + ++E E
+Sbjct:   178 PLHSGDNESELRIKEEME 195
+
+
+>sp|Q1E554|CGR1_COCIM rRNA-processing protein CGR1 OS=Coccidioides immitis
+            GN=CGR1 PE=3 SV=1
+        Length = 130
+
+ Score = 89 (36.4 bits), Expect = 0.023, P = 0.023
+ Identities = 32/124 (25%), Positives = 60/124 (48%)
+
+Query:     9 MSSVDSLPATPASE-VPVLTVSPADTSLNSADVKTQEVKPEEKK----PAKKRKSWGQEL 63
+             MSS +  PA PA E  P    +PA  +     ++       + K    P K + S+ + L
+Sbjct:     1 MSSTEPAPA-PAPEPAPAPAAAPAAAAAAPKGMRKNGKNWHDVKTPFRPTKGQTSYARRL 59
+
+Query:    64 PVPKTNLPPRKRAKT-EDEKE---QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME 119
+                K     +++ K  ++EKE   QRRI+ + ++R AA+  +ER     EK+  ++++  
+Sbjct:    60 EERKAMAAIKEKEKEMKEEKEAERQRRIQAI-KDRRAAKEEKERYEKMAEKMHRKRVERR 118
+
+Query:   120 QQNQ 123
+             ++ +
+Sbjct:   119 KRRE 122
+
+
+>sp|Q91496|FOS_TETFL Proto-oncogene c-Fos OS=Tetraodon fluviatilis GN=fos PE=3
+            SV=1
+        Length = 374
+
+ Score = 102 (41.0 bits), Expect = 0.023, P = 0.023
+ Identities = 38/136 (27%), Positives = 59/136 (43%)
+
+Query:    15 LPATPASEVPVLTVSPADTSLN-SADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPP 72
+             L A+ AS VP +T       L          V P  +  P     S+ + +     + P 
+Sbjct:    47 LTASSASFVPTVTAISTSPDLQWMVQPLVSSVAPSRRAHPYSPSPSYKRTVMRSGASKPH 106
+
+Query:    73 RKRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQR 128
+              KR + E    +E+E++RI R  RN+ AA   R R+R   + L+ E  Q+E +   L   
+Sbjct:   107 AKRGRVEQTTPEEEEKKRIRRE-RNKQAAAKCRNRRRELTDSLQAETDQLEAEKSSLQND 165
+
+Query:   129 LSQMEAENNRLSQQLA 144
+             ++ +  E  RL   LA
+Sbjct:   166 IANLLKEKERLEFILA 181
+
+
+>sp|Q9ESN9|JIP3_MOUSE C-Jun-amino-terminal kinase-interacting protein 3 OS=Mus
+            musculus GN=Mapk8ip3 PE=1 SV=1
+        Length = 1337
+
+ Score = 98 (39.6 bits), Expect = 0.023, Sum P(2) = 0.023
+ Identities = 40/152 (26%), Positives = 69/152 (45%)
+
+Query:    62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRN-RAAAQTSRERKRLEMEKL------ENE 114
+             E  V K  L   K+AK + E   + +E  L+  ++ A T+R   R E+E +      E +
+Sbjct:   455 EQEVLKGELEAAKQAKVKLENRIKELEEELKRVKSEAVTARREPREEVEDVSSYLCTELD 514
+
+Query:   115 KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS---RANTPMPGSPATASPTLT 171
+             KI M Q+ +F    ++++  E N+  ++L +L   VR +   RA+   P        T+ 
+Sbjct:   515 KIPMAQRRRFTRVEMARVLMERNQYKERLMELQEAVRWTEMIRASREHPSVQEKKKSTIW 574
+
+Query:   172 P---TLFKQERDELPLERIPFPTPSLSDYSPT 200
+                  LF       P +R  +P+ ++   SPT
+Sbjct:   575 QFFSRLFSSSSSPPPAKR-SYPSVNIHYKSPT 605
+
+ Score = 57 (25.1 bits), Expect = 0.023, Sum P(2) = 0.023
+ Identities = 18/58 (31%), Positives = 25/58 (43%)
+
+Query:     8 TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV 65
+             T S+  +   TP S VP   V+P + SL          K   K+  +KR S   E+ V
+Sbjct:   266 TPSTTGTKSNTPTSSVPSAAVTPLNESLQPLGDYVSVTK-NNKQAREKRNSRNMEVQV 322
+
+
+>sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifugu rubripes GN=fos PE=3 SV=1
+        Length = 376
+
+ Score = 102 (41.0 bits), Expect = 0.023, P = 0.023
+ Identities = 63/245 (25%), Positives = 104/245 (42%)
+
+Query:    15 LPATPASEVPVLTVSPADTSLN-SADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPP 72
+             L A+ AS +P +T       L          V P  +  P     S+ + +     +   
+Sbjct:    48 LTASSASFIPTVTAISTSPDLQWMVQPLISSVAPSHRAHPYSPSPSYKRTVMRSAASKAH 107
+
+Query:    73 RKRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQR 128
+              KR++ E    +E+E++RI R  RN+ AA   R R+R   + L+ E  Q+E +   L   
+Sbjct:   108 GKRSRVEQTTPEEEEKKRIRRE-RNKQAAAKCRNRRRELTDTLQAETDQLEDEKSSLQND 166
+
+Query:   129 LSQMEAENNRLSQQLA--QLAAEVRGSRANTPMPGSPATASPT---LTPTLFKQERDELP 183
+             ++ +  E  RL   LA  Q   ++  S+ +T    S  + SP    L+ T+  Q +  +P
+Sbjct:   167 IANLLKEKERLEFILAAHQPICKIP-SQMDTDF--SVVSMSPVHACLSTTVSTQLQTSIP 223
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHS 243
+                    T S S ++ T   S  + SSD      +S A +    S + + DL S +   S
+Sbjct:   224 --EATTVTSSHSTFTSTSN-SIFSGSSD----SLLSTATVSN--SVVKMTDLDSSVLEES 274
+
+Query:   244 TDDVA 248
+              D +A
+Sbjct:   275 LDLLA 279
+
+
+>sp|Q05682|CALD1_HUMAN Caldesmon OS=Homo sapiens GN=CALD1 PE=1 SV=2
+        Length = 793
+
+ Score = 106 (42.4 bits), Expect = 0.024, P = 0.023
+ Identities = 33/148 (22%), Positives = 74/148 (50%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102
+             Q +K EEK+ A++R+   +E    K     R+RA+ E+E E+ ++E   RN+   Q   +
+Sbjct:   343 QRIKEEEKRAAEERQRIKEE---EKRAAEERQRARAEEE-EKAKVEEQKRNK---QLEEK 395
+
+Query:   103 RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS 162
+             ++ ++  K++ EK++ + + +++    ++ +A+ ++L   + +   E +G++        
+Sbjct:   396 KRAMQETKIKGEKVEQKIEGKWV----NEKKAQEDKLQTAVLKKQGEEKGTKVQAKREKL 451
+
+Query:   163 PATASPTLTPTLFKQER---DELPLERI 187
+                  PT      K E+   D+ P E +
+Sbjct:   452 QED-KPTFKKEEIKDEKIKKDKEPKEEV 478
+
+ Score = 97 (39.2 bits), Expect = 0.49, Sum P(2) = 0.39
+ Identities = 42/168 (25%), Positives = 66/168 (39%)
+
+Query:    73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132
+             R+R +TE E E  ++++  +  A      ++KR E  K+  E+ Q  +Q +    R  + 
+Sbjct:   541 RRRGETESE-EFEKLKQKQQEAALELEELKKKREERRKVLEEEEQRRKQEE--ADRKLRE 597
+
+Query:   133 EAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE-RIPFPT 191
+             E E  RL +++ +  AE    R   P  G      P      F  +   L +E R  F  
+Sbjct:   598 EEEKRRLKEEIERRRAEAAEKRQKMPEDGLSDDKKPF---KCFTPKGSSLKIEERAEFLN 654
+
+Query:   192 PSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL 239
+              S+   S        A  S +        + +EG  SA P     SDL
+Sbjct:   655 KSVQKSSGVKSTHQAAIVSKIDSRLEQYTSAIEGTKSAKPTKPAASDL 702
+
+ Score = 85 (35.0 bits), Expect = 4.7, P = 0.991
+ Identities = 23/91 (25%), Positives = 47/91 (51%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102
+             + ++ EEK+ A++R+   +E    K     R+R K E+++     +R+      A   R+
+Sbjct:   315 ERMREEEKRAAEERQRIKEE---EKRAAEERQRIKEEEKRAAEERQRIKEEEKRAAEERQ 371
+
+Query:   103 RKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133
+             R R E E  E  K++ +++N+ L ++   M+
+Sbjct:   372 RARAEEE--EKAKVEEQKRNKQLEEKKRAMQ 400
+
+ Score = 40 (19.1 bits), Expect = 0.49, Sum P(2) = 0.39
+ Identities = 13/53 (24%), Positives = 23/53 (43%)
+
+Query:    32 DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ 84
+             +  L +A +K Q  +   K  AK+ K    +    K  +   K  K ++ KE+
+Sbjct:   425 EDKLQTAVLKKQGEEKGTKVQAKREKLQEDKPTFKKEEIKDEKIKKDKEPKEE 477
+
+
+>sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus GN=FOS PE=2 SV=2
+        Length = 380
+
+ Score = 102 (41.0 bits), Expect = 0.024, P = 0.024
+ Identities = 50/175 (28%), Positives = 72/175 (41%)
+
+Query:    74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             +R K E    +E+E+RRI R  RN+ AA   R R+R   + L+ E  Q+E +   L   +
+Sbjct:   125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183
+             + +  E  +L   LA      +    +   P   + AS  L+   P     E +E   LP
+Sbjct:   184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLSGGLPEAATPESEEAFTLP 242
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GS 237
+             L   P P PS+            AE  D    PA S         ++P  DL GS
+Sbjct:   243 LLNDPEPKPSVEPVKSVGSMELKAEPFDDYMFPASSRPSGSETARSVPDMDLSGS 297
+
+
+>sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodopus campbelli GN=FOS PE=3
+            SV=1
+        Length = 381
+
+ Score = 102 (41.0 bits), Expect = 0.024, P = 0.024
+ Identities = 52/176 (29%), Positives = 73/176 (41%)
+
+Query:    74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             +R K E    +E+E+RRI R  RN+ AA   R R+R   + L+ E   +E +   L   +
+Sbjct:   125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDHLEDEKSALQTEI 183
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183
+             + +  E  +L   LA      +    +   P   + AS  LT   P     E +E   LP
+Sbjct:   184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEDMSVASLDLTGGLPEATTPESEEAFSLP 242
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS-VAGLEGDGSALPLFDL-GS 237
+             L   P P  SL            AE  D    PA S  +G E    ++P  DL GS
+Sbjct:   243 LLNDPEPKTSLEPVKSISNMELKAEPFDDFLFPASSRPSGSETTARSVPDMDLSGS 298
+
+
+>sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kapC OS=Aspergillus terreus
+            (strain NIH 2624 / FGSC A1156) GN=kapC PE=3 SV=2
+        Length = 286
+
+ Score = 100 (40.3 bits), Expect = 0.025, P = 0.024
+ Identities = 39/161 (24%), Positives = 67/161 (41%)
+
+Query:    66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             P+    P++  KT  ++     +R  +NRAA +  R+RK   + KLE    Q++ Q + +
+Sbjct:    85 PQPEPAPQESPKTYGKRPLSTSKRAAQNRAAQRAFRQRKESYIRKLEE---QVKHQ-EAI 140
+
+Query:   126 LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPATASPTLTPTLFKQERDELPL 184
+              +    + AEN +L + +  L   +  S+   P +PG+     P    TL   E      
+Sbjct:   141 TEEYKALHAENYQLREYIINLQTRLLDSQGEVPELPGNIDLNQPRADLTLSAPELQRGNA 200
+
+Query:   185 ERI-PFPT-PSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223
+                 P P  P      P      +  + D+     ++VAGL
+Sbjct:   201 ASAGPAPAGPGPQQSQPNQNQG-VGPNDDMNSLNRIAVAGL 240
+
+
+>sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange factor 18 OS=Mus
+            musculus GN=Arhgef18 PE=2 SV=1
+        Length = 1021
+
+ Score = 107 (42.7 bits), Expect = 0.025, P = 0.024
+ Identities = 61/246 (24%), Positives = 101/246 (41%)
+
+Query:     9 MSSVDSLPATPASEVP--VLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66
+             M S +SLP     E+   V T+S    SL +  +  Q+   E ++ A + +     L   
+Sbjct:   628 MPSTESLPTVLELELVHRVQTLSQLLLSLQAV-IAQQDSYVEMQRTAIQEREKQFRLQST 686
+
+Query:    67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL 126
+             + NL        E E+ QR  E+    RA  +  + + R E ++ E E+ + +Q+ +   
+Sbjct:   687 RGNL------LLEQER-QRNFEKQREERAGVEKLQSQLRQEQQRWERERARQQQELELAG 739
+
+Query:   127 QRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLER 186
+              RL + E E  ++ Q+L Q   E+   R            +         +ER+ L L R
+Sbjct:   740 ARLQEREGEARQMRQRLDQERTELERQRQAYQHDLERLREAQRAVD----RERERLELLR 795
+
+Query:   187 IPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGS-ALPLFDLGSDLKHHS-T 244
+               F   +       L P  LAE+   +  P+ +  GLEG  + A      GS + H +  
+Sbjct:   796 -RFKKQNT--VPGALPPEVLAEAQPASHPPSFNGDGLEGHSAPAKAPGTQGSAMLHGTGP 852
+
+Query:   245 DDVAAP 250
+             D+V  P
+Sbjct:   853 DNVERP 858
+
+
+>sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Drosophila melanogaster
+            GN=ImpE2 PE=1 SV=1
+        Length = 466
+
+ Score = 103 (41.3 bits), Expect = 0.025, P = 0.025
+ Identities = 45/186 (24%), Positives = 86/186 (46%)
+
+Query:     8 TMSSVDSLPATPASEVPVLTVS----PADTSLNSADVKTQEVKPEEKKPA---KKRKSWG 60
+             + + V +LP   A ++PV  V     P   SL   +VK +EVKPEE KP    +K K   
+Sbjct:    14 SQARVLNLPKE-AIDIPVAIVEDKEPPVALSLVKEEVKAEEVKPEEVKPIAQEEKAKDLK 72
+
+Query:    61 QEL-PVPKTNLPPRKRAKTEDE-KEQRR--IERVLRNRAAAQTSRERKRLEMEKLENEKI 116
+             +E+ P  K  +  + +   +DE KE  +  I+  L+ +   Q +       +E L+ + +
+Sbjct:    73 EEVKPEIKPEIKEQPKPDIKDEIKEDLKADIKEELKEKIEEQINELPNAKPLE-LKEKSL 131
+
+Query:   117 QMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLTPTLF 175
+             + E++ Q + + + Q E     + ++  ++  E  +    + P   +    +  L+P   
+Sbjct:   132 EAEEKPQEIKEEVQQPE-----IKKEATEIKEEPAQNILKSLPAEETVVVPAEELSPNPV 186
+
+Query:   176 KQERDE 181
+             +QE+ E
+Sbjct:   187 EQEQSE 192
+
+
+>sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1 OS=Mus musculus
+            GN=Map7d1 PE=1 SV=1
+        Length = 846
+
+ Score = 106 (42.4 bits), Expect = 0.026, P = 0.025
+ Identities = 37/143 (25%), Positives = 58/143 (40%)
+
+Query:     7 KTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66
+             K+ ++ +  PA PAS  P    SP           TQ +  E   PA            P
+Sbjct:   530 KSRAAEEKEPAAPASPAPSPVPSPTPAQPQKEQSSTQ-IPAETAVPAVPAAPTAPPTAAP 588
+
+Query:    67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL 126
+                 P +  A T D +E  R+    R +A  Q  RE +  +++  E +K   E+Q     
+Sbjct:   589 SVT-PSKPMAGTTDREEATRLLAEKRRQAREQREREEQERKLQA-ERDKRMREEQLAREA 646
+
+Query:   127 QRLSQMEAENNRLSQQLAQLAAE 149
+             +  ++ EAE  R  +Q A+  A+
+Sbjct:   647 EARAEREAEARRREEQEAREKAQ 669
+
+ Score = 95 (38.5 bits), Expect = 0.41, P = 0.34
+ Identities = 41/180 (22%), Positives = 81/180 (45%)
+
+Query:     6 EKTMSSVDSLPATPASEVPVLTVS-PADTSLNSADV------KTQEVKPEEKKPAKKRKS 58
+             E  + +V + P  P +  P +T S P   + +  +       K ++ + + ++  ++RK 
+Sbjct:   570 ETAVPAVPAAPTAPPTAAPSVTPSKPMAGTTDREEATRLLAEKRRQAREQREREEQERKL 629
+
+Query:    59 WGQ-ELPVPKTNLPPRKRAKTEDEKE-QRRIERVLRNRAAAQTSRERKRLEMEKLENE-- 114
+               + +  + +  L     A+ E E E +RR E+  R +A A+   E++RL+ +K E E  
+Sbjct:   630 QAERDKRMREEQLAREAEARAEREAEARRREEQEAREKAQAE-QEEQERLQKQKEEAEAR 688
+
+Query:   115 -KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA-NTPMPGSPATASPTLTP 172
+              + + E+Q Q   +   + E E     ++L ++    R S A  T    +  TA+    P
+Sbjct:   689 SREEAERQRQEREKHFQKEEQERQERRKRLEEIMKRTRKSEAAETKKQDAKETAANNSGP 748
+
+ Score = 92 (37.4 bits), Expect = 0.048, Sum P(2) = 0.047
+ Identities = 37/148 (25%), Positives = 67/148 (45%)
+
+Query:     7 KTMSSVDSLPATPASEVPVLTVSPA--DTSLNSADVKTQ-----EVKPEEKKPAKKRKSW 59
+             KT ++   LP  P +    ++  PA       S++ K++        P E KP++ R S 
+Sbjct:    58 KTATNPKQLPLEPGNPTGQISPQPAPPQEECPSSEAKSRGPTPTATGPREAKPSR-RSSQ 116
+
+Query:    60 GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME 119
+                  VP ++ PP K+   +   E+ ++ +  R   A   +  +K + +EK E  K   E
+Sbjct:   117 PSPTTVPASDSPPAKQ-DVKKAGERHKLAKERREERAKYLAA-KKAVWLEKEEKAKALRE 174
+
+Query:   120 QQNQFLLQRLSQ--MEAENNRLSQQLAQ 145
+             +Q Q   +RL +  ++AE  R + +  Q
+Sbjct:   175 KQLQERRRRLEEQRLKAEQRRAALEERQ 202
+
+ Score = 56 (24.8 bits), Expect = 0.048, Sum P(2) = 0.047
+ Identities = 20/72 (27%), Positives = 30/72 (41%)
+
+Query:   133 EAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTP 192
+             E +N+R S+   +       S A +P+P SP  A P       +Q   ++P E      P
+Sbjct:   524 EDKNHRKSRAAEEKEPAAPASPAPSPVP-SPTPAQPQK-----EQSSTQIPAETAVPAVP 577
+
+Query:   193 SLSDYSPTLKPS 204
+             +     PT  PS
+Sbjct:   578 AAPTAPPTAAPS 589
+
+
+>sp|Q5R452|SAFB1_PONAB Scaffold attachment factor B1 OS=Pongo abelii GN=SAFB
+            PE=2 SV=1
+        Length = 914
+
+ Score = 106 (42.4 bits), Expect = 0.028, P = 0.028
+ Identities = 32/95 (33%), Positives = 53/95 (55%)
+
+Query:    50 KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEM 108
+             K+P K R S    +   ++    R +A+ E E E+ R+E + R R A Q  R ER+R+E 
+Sbjct:   609 KEPRKSRDSESHRVR-ERSEREQRMQAQWERE-ERERLE-IARERLAFQRQRLERERMER 665
+
+Query:   109 EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL 143
+             E+LE E++ +E + +   +R+ + E E  R  Q+L
+Sbjct:   666 ERLERERMHVEHERRREQERIHR-EREELRRQQEL 699
+
+
+>sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-binding protein 3-like
+            protein 3-B OS=Danio rerio GN=creb3l3b PE=3 SV=2
+        Length = 428
+
+ Score = 102 (41.0 bits), Expect = 0.029, P = 0.028
+ Identities = 36/123 (29%), Positives = 61/123 (49%)
+
+Query:    80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139
+             +E+  ++I R +RN+ +AQ SR++K+  ++ LE+        N  L +++ Q+E  N  L
+Sbjct:   207 EERILKKIRRKIRNKQSAQESRKKKKEYIDGLESRMAACSAHNHELQRKVFQLEKCNISL 266
+
+Query:   140 SQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS---D 196
+              +QL +L A V    +N P+          L+ TL       LP  + PF    +S   D
+Sbjct:   267 MEQLRRLQALVMNG-SNKPVQAGTCVLVLLLSFTLIL-----LPNLK-PFTDTKVSQHGD 319
+
+Query:   197 YSP 199
+             +SP
+Sbjct:   320 FSP 322
+
+
+>sp|Q9D439|CCD11_MOUSE Coiled-coil domain-containing protein 11 OS=Mus musculus
+            GN=Ccdc11 PE=2 SV=3
+        Length = 514
+
+ Score = 103 (41.3 bits), Expect = 0.029, P = 0.028
+ Identities = 29/114 (25%), Positives = 55/114 (48%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102
+             Q+++ E  K  +KR+  G+E  +    L  R+  +   EKE  R+   ++ +  A+  RE
+Sbjct:   319 QDLQDEADKKKQKREEMGREQKIYNDYLMQRREEEKAQEKELNRLLEDIKAKKLAEKDRE 378
+
+Query:   103 -------RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149
+                    RK+L  E +   K+Q++++ Q  L+   ++     R+S+ L  L  E
+Sbjct:   379 LALQRAARKQLMNEVMNTRKLQVQERLQRKLREQEELALHEQRISESLKVLHQE 432
+
+
+>sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus musculus GN=Fosl1 PE=2 SV=2
+        Length = 273
+
+ Score = 99 (39.9 bits), Expect = 0.029, P = 0.029
+ Identities = 51/185 (27%), Positives = 83/185 (44%)
+
+Query:    64 PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL------EMEKLENEKIQ 117
+             P P     P ++   E+E E+RR+ R     AAA+    RK L      E +KLE+EK  
+Sbjct:    88 PPPGVRRRPCEQISPEEE-ERRRVRRERNKLAAAKCRNRRKELTDFLQAETDKLEDEKSG 146
+
+Query:   118 MEQQNQFLLQRLSQMEA--ENNRLSQQLAQLAAEVRGSRANTPMPGSP-ATASPTLTPTL 174
+             ++++ + L ++  ++E   E +R   ++ +   +  G   +T    SP A   P   P +
+Sbjct:   147 LQREIEELQKQKERLELVLEAHRPICKIPEGDKKDPGGSGSTSGASSPPAPGRPV--PCI 204
+
+Query:   175 FKQERDELPLERIPFPT----PSLSDYSPTLK---PSTLAESSDVAQHPAVSVAGLEGDG 227
+                    L  E +  PT    PSL+ ++P+L    PST    S   +  + S     GD 
+Sbjct:   205 SLSPGPVLEPEALHTPTLMTTPSLTPFTPSLVFTYPSTPEPCSSAHRKSSSS----SGDP 260
+
+Query:   228 SALPL 232
+             S+ PL
+Sbjct:   261 SSDPL 265
+
+
+>sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xenopus laevis GN=mafb PE=2
+            SV=1
+        Length = 313
+
+ Score = 100 (40.3 bits), Expect = 0.029, P = 0.029
+ Identities = 36/140 (25%), Positives = 67/140 (47%)
+
+Query:    29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ-RRI 87
+             SP+ +S +S  +  Q+ +       + R S  Q + +    L    R  T+D+  + ++ 
+Sbjct:   171 SPSGSSSSSQQLHHQQ-QHSSSSAVEDRFSDDQLVSMTVRELNRHLRGFTKDDVIRLKQK 229
+
+Query:    88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147
+              R L+NR  AQ+ R ++  +   LE EK Q+ QQ + L Q +S++  E +    +  +LA
+Sbjct:   230 RRTLKNRGYAQSCRYKRVQQKHNLEGEKTQLVQQVEQLKQEVSRLARERDAYKIKCEKLA 289
+
+Query:   148 ----AEVRGSRANTPMPGSP 163
+                 +  R + + +  P SP
+Sbjct:   290 NNNSSNFREAGSTSDNPSSP 309
+
+
+>sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper transcription factor G
+            OS=Dictyostelium discoideum GN=bzpG PE=3 SV=1
+        Length = 372
+
+ Score = 101 (40.6 bits), Expect = 0.030, P = 0.030
+ Identities = 24/80 (30%), Positives = 44/80 (55%)
+
+Query:    74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133
+             K     ++KE +R +R+++NR +A  SR+RKR  +  LE+   ++   +  + + LS +E
+Sbjct:   268 KELSQVEKKELKRQKRLIKNRESAHLSRQRKRERLTDLEHRVEELSSNSIDINKTLSSLE 327
+
+Query:   134 AENNRLSQQLAQLAAEVRGS 153
+              EN  L  ++ QL   +  S
+Sbjct:   328 NENLILKAEVGQLFEVINDS 347
+
+
+>sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1 subunit A OS=Danio rerio
+            GN=chaf1a PE=1 SV=1
+        Length = 863
+
+ Score = 109 (43.4 bits), Expect = 0.030, Sum P(2) = 0.030
+ Identities = 57/229 (24%), Positives = 99/229 (43%)
+
+Query:     1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS-LNSAD-VKTQEVKPEEKKPAKKRKS 58
+             +S     + S + S P  P+   P    +PA TS +N+A+ VK + +K  +++  K+R+ 
+Sbjct:   208 LSTGSTSSASVIASSPE-PSKSAPT---TPASTSRINAANKVKRRSLKSVQEQEEKQRQR 263
+
+Query:    59 WGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK-RLEMEKLENEKI 116
+               +E L         +K+ +    KE++  E+  +     +  RE+K R E EK +  K 
+Sbjct:   264 DEKERLKQEAKAAKEKKKEEARKMKEEKEREKKEKKEKDEKERREKKERDEKEKADKLKA 323
+
+Query:   117 QMEQQNQFLLQRLSQM--EAENNRLSQQLAQLAAEVRG-----SRANTPM-PGSPATASP 168
+             + EQ+   +  +L +   + E  RL ++  ++ AE         +  T + P + A+A  
+Sbjct:   324 KEEQRQMKIEAKLEEKRKKEEEKRLKEEKDRIKAEKAEITRFLQKPKTQLAPKTLASACG 383
+
+Query:   169 TLTPTLFKQERDELPLERIPFPTPSLSDYSPTL-KP-STLAESSDVAQH 215
+                P   K      PL R+      L D    L +P STL    D   H
+Sbjct:   384 KFAPFEIKAHMSLAPLTRVQCEDSVLEDLDRYLAQPDSTLNGLKDWTGH 432
+
+ Score = 40 (19.1 bits), Expect = 0.030, Sum P(2) = 0.030
+ Identities = 16/51 (31%), Positives = 19/51 (37%)
+
+Query:   236 GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGD 286
+             G  L H   DD      DDD +     D    P   + E   A +  EGGD
+Sbjct:   524 GESLSHSEGDDDDEAGEDDDDD-----DGFFVPHGYLSEGEGALEDEEGGD 569
+
+
+>sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus gallus GN=FOSL2 PE=1
+            SV=1
+        Length = 323
+
+ Score = 100 (40.3 bits), Expect = 0.031, P = 0.030
+ Identities = 39/146 (26%), Positives = 70/146 (47%)
+
+Query:    68 TNLPPRKRAK--TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             T +  R+R +  + +E+E+RRI R  RN+ AA   R R+R   EKL+ E   +E++   L
+Sbjct:   108 TTVGRRRRDEQLSPEEEEKRRIRRE-RNKLAAAKCRNRRRELTEKLQAETEVLEEEKSVL 166
+
+Query:   126 LQRLSQMEAENNRLSQQLAQLAAEVRGS---RANTPMPGSPATASPTLTPTLFKQERDEL 182
+              + +++++ E  +L   L   +   + S   R + P     +  +      + KQE  E 
+Sbjct:   167 QKEIAELQKEKEKLEFMLVAHSPVCKISPEERRSPPTSSLQSVRTGASGAVVVKQEPVE- 225
+
+Query:   183 PLERIPFPTPSLSDYSPT-LKPSTLA 207
+               E IP  +  L     + +KP ++A
+Sbjct:   226 --EEIPSSSLVLDKAQRSVIKPISIA 249
+
+
+>sp|A2R346|KAPC_ASPNC Putative transcription factor kapC OS=Aspergillus niger
+            (strain CBS 513.88 / FGSC A1513) GN=kapC PE=3 SV=2
+        Length = 283
+
+ Score = 99 (39.9 bits), Expect = 0.031, P = 0.031
+ Identities = 36/159 (22%), Positives = 69/159 (43%)
+
+Query:    66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             P+     ++  KT  ++     +R  +NRAA +  R+RK   + KLE +  + +  N+  
+Sbjct:    85 PQPEPTGQESPKTYGKRPLSTSKRAAQNRAAQRAFRQRKESYIRKLEEQVKEFDNTNE-- 142
+
+Query:   126 LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPATASPTLTPTLFKQERDELPL 184
+                + Q++AEN +L + +  L + +  S+   P +PG+     P    ++        P 
+Sbjct:   143 --TMKQLQAENYQLREYIINLQSRLLDSQGEVPELPGNIDLNQPRNDISV---PPPGAPA 197
+
+Query:   185 ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223
+                P P P  +     +     A + D+     ++VAGL
+Sbjct:   198 ATGPAPGPGGAPQQMQVPNPGAATNEDMNSLNRIAVAGL 236
+
+
+>sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catus GN=FOS PE=2 SV=1
+        Length = 381
+
+ Score = 101 (40.6 bits), Expect = 0.031, P = 0.031
+ Identities = 50/175 (28%), Positives = 72/175 (41%)
+
+Query:    74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             +R K E    +E+E+RRI R  RN+ AA   R R+R   + L+ E  Q+E +   L   +
+Sbjct:   126 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 184
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183
+             + +  E  +L   LA      +    +   P   + AS  L+   P     E +E   LP
+Sbjct:   185 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLSGGLPEAATPESEEAFTLP 243
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GS 237
+             L   P P PS+            AE  D    PA S         ++P  DL GS
+Sbjct:   244 LLNDPEPKPSVEPVKSISSMELKAEPFDDFLFPASSRPSGSETARSVPDMDLSGS 298
+
+
+>sp|P26042|MOES_PIG Moesin OS=Sus scrofa GN=MSN PE=2 SV=3
+        Length = 577
+
+ Score = 103 (41.3 bits), Expect = 0.034, P = 0.033
+ Identities = 26/103 (25%), Positives = 52/103 (50%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTNLPPR-KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             EKK  +  +   +++   K  L  R K+ + + +K Q+ +E   R   A +  R+R + E
+Sbjct:   326 EKKKREMAEKEKEKIEREKEELMERLKQIEEQTKKAQQELEEQTRRALALEQERKRAQSE 385
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150
+              EKL  E+ + E+  + LL+     +    +L+ ++A+L A +
+Sbjct:   386 AEKLAKERQEAEEAKEALLKASRDQKKTQEQLALEMAELTARI 428
+
+ Score = 102 (41.0 bits), Expect = 0.043, P = 0.042
+ Identities = 30/97 (30%), Positives = 51/97 (52%)
+
+Query:    66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             P T    + +A+  +EK Q+++ER L          E+K+ EM + E EKI+ E++   L
+Sbjct:   297 PDTIEVQQMKAQAREEKHQKQMERAL-------LENEKKKREMAEKEKEKIEREKEE--L 347
+
+Query:   126 LQRLSQMEAENNRLSQQLAQ-----LAAEVRGSRANT 157
+             ++RL Q+E +  +  Q+L +     LA E    RA +
+Sbjct:   348 MERLKQIEEQTKKAQQELEEQTRRALALEQERKRAQS 384
+
+
+>sp|Q2HJ49|MOES_BOVIN Moesin OS=Bos taurus GN=MSN PE=2 SV=3
+        Length = 577
+
+ Score = 103 (41.3 bits), Expect = 0.034, P = 0.033
+ Identities = 26/103 (25%), Positives = 51/103 (49%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTNLPPR-KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             EKK  +  +   +++   K  L  R K+ + + +K Q+ +E   R     +  R+R + E
+Sbjct:   326 EKKKREMAEKEKEKIEREKEELMERLKQIEEQTKKAQQELEEQTRRALELEQERKRAQSE 385
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150
+              EKL  E+ + E+  + LLQ     +    +L+ ++A+L A +
+Sbjct:   386 AEKLAKERQEAEEAKEALLQASQDQKKTQEQLALEMAELTARI 428
+
+ Score = 101 (40.6 bits), Expect = 0.056, P = 0.055
+ Identities = 25/80 (31%), Positives = 45/80 (56%)
+
+Query:    66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             P T    + +A+  +EK Q+++ER L          E+K+ EM + E EKI+ E++   L
+Sbjct:   297 PDTIEVQQMKAQAREEKHQKQMERAL-------LENEKKKREMAEKEKEKIEREKEE--L 347
+
+Query:   126 LQRLSQMEAENNRLSQQLAQ 145
+             ++RL Q+E +  +  Q+L +
+Sbjct:   348 MERLKQIEEQTKKAQQELEE 367
+
+
+>sp|A5FV21|IF2_ACICJ Translation initiation factor IF-2 OS=Acidiphilium cryptum
+            (strain JF-5) GN=infB PE=3 SV=1
+        Length = 887
+
+ Score = 105 (42.0 bits), Expect = 0.035, P = 0.034
+ Identities = 59/225 (26%), Positives = 89/225 (39%)
+
+Query:    48 EEKKP-AKKRKSWGQELP--VPKTNLPPRKRAKTEDEKEQRRIERVLRNR------AAAQ 98
+             E  +P A  R S G   P  +       R+RA  E ++E  R+E   R +      +AA+
+Sbjct:    60 ETGRPSAPSRASGGAAAPRGLTAAEQAARQRAVVEQQREAARLEAERREQEKISILSAAE 119
+
+Query:    99 TSRERKRLEMEKLEN-EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT 157
+              +R +   E    E  E+++ E++     +R  + EAE  R ++     AA    + A +
+Sbjct:   120 EARRKAEEEARAAEEAERLRAEEE----ARRREEEEAERRRAAEASQATAAPPAPAAAAS 175
+
+Query:   158 PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPA 217
+             P    PA   PT  P          P  R   P P  +  S TL+        D  +  A
+Sbjct:   176 PRAAMPA---PTAAPA----RPGAAPARRTA-PVPPATSASETLRLRAARTGRD-EEEEA 226
+
+Query:   218 VSVAGLEGDGSA------LPL-FDLGSDLKHHSTDDVAAPLSDDD 255
+                A   G G+A      +P    +G D +  +  DV A LS DD
+Sbjct:   227 SRPARRPGSGAAPSRKPSVPAPKKVGDDRRRGARIDVQAALSGDD 271
+
+ Score = 94 (38.1 bits), Expect = 0.56, P = 0.43
+ Identities = 54/219 (24%), Positives = 81/219 (36%)
+
+Query:    27 TVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRR 86
+             TV       + +  +++ V+ E +K  K+  + G E   P    P R        +    
+Sbjct:    27 TVDAGSVRQSFSHGRSKVVQVEVRK--KRGGAAGAETGRPSA--PSRASGGAAAPRGLTA 82
+
+Query:    87 IERVLRNRAAAQTSRERKRLEMEKLENEKIQM-----------EQQNQFL--LQRLSQME 133
+              E+  R RA  +  RE  RLE E+ E EKI +           E++ +     +RL + E
+Sbjct:    83 AEQAARQRAVVEQQREAARLEAERREQEKISILSAAEEARRKAEEEARAAEEAERL-RAE 141
+
+Query:   134 AENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDELPLERIPFP 190
+              E  R  ++ A+       S+A    P   A ASP      PT         P  R   P
+Sbjct:   142 EEARRREEEEAERRRAAEASQATAAPPAPAAAASPRAAMPAPTAAPARPGAAPARRTA-P 200
+
+Query:   191 TPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSA 229
+              P  +  S TL+        D  +  A   A   G G+A
+Sbjct:   201 VPPATSASETLRLRAARTGRD-EEEEASRPARRPGSGAA 238
+
+
+>sp|A6SCT6|DBP3_BOTFB ATP-dependent RNA helicase dbp3 OS=Botryotinia fuckeliana
+            (strain B05.10) GN=dbp3 PE=3 SV=1
+        Length = 592
+
+ Score = 103 (41.3 bits), Expect = 0.035, P = 0.034
+ Identities = 52/186 (27%), Positives = 84/186 (45%)
+
+Query:    32 DTSLNSAD--VKTQEVKP-EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE 88
+             DT LNS D  +K    K  +EKK  K++KS  +++  P T   P +  + E  KE RR  
+Sbjct:     8 DTELNSGDNDIKISSKKSRKEKKDKKEKKS--KDVEEPTTESTPIE-VEVES-KEARRER 63
+
+Query:    89 RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA 148
+             + L+    AQ + E++  E EK   E I+            +  +AE  RL + L +   
+Sbjct:    64 KRLKKEKKAQEA-EKETEEEEKSGVEAIEPASDANAAADAKAAKKAEKARL-KALKKEGK 121
+
+Query:   149 EVRGSRANTPMPGSPATASPTLTPTLFKQERD--ELPLERIP-FPTP---SLSD---YSP 199
+             E +     +    +PA+ +P    T + ++ +   LP   I  F T    +++D    S 
+Sbjct:   122 EEKADSTKSIETAAPASVTPQQNGTTYTEDPNLSGLPQSEIDSFLTTHFITITDPLSTSA 181
+
+Query:   200 TLKPST 205
+             TL+P T
+Sbjct:   182 TLRPLT 187
+
+
+>sp|Q7PGE8|EIF3A_ANOGA Eukaryotic translation initiation factor 3 subunit A
+            OS=Anopheles gambiae GN=eIF3-S10 PE=3 SV=4
+        Length = 1121
+
+ Score = 106 (42.4 bits), Expect = 0.036, P = 0.035
+ Identities = 47/146 (32%), Positives = 65/146 (44%)
+
+Query:    35 LNSADVKTQEVKPEEKKP-AKKRKSWGQELPVP-KTNLPPR-------KRAK--TEDEKE 83
+             L   DV  Q++K E     A+K K + Q L    K  L  R       +R K   E E+E
+Sbjct:   754 LPDRDVYWQQLKNERGNQFAEKLKQFNQALEEERKRRLADRVVKRREERRMKWLKEKEEE 813
+
+Query:    84 QRRIERVLRNRAAAQTSRERKRLEMEK-LENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+             +RRIE  LR +       E  R+E E+  E  +IQ E+  Q   ++L+  E    R  ++
+Sbjct:   814 RRRIEEELRKQ-----KEEADRIERERRAEERRIQDEKNRQLAEKQLAIAEEVERRRREE 868
+
+Query:   143 LAQLAAEVRGSRANTPMPGSPATASP 168
+             L Q+  E  G R   P  G PA   P
+Sbjct:   869 LEQMK-EADGRRERRPAAG-PAEPKP 892
+
+
+>sp|O77788|NFM_BOVIN Neurofilament medium polypeptide OS=Bos taurus GN=NEFM
+            PE=1 SV=3
+        Length = 926
+
+ Score = 105 (42.0 bits), Expect = 0.037, P = 0.036
+ Identities = 51/193 (26%), Positives = 86/193 (44%)
+
+Query:    39 DVKTQEVKP-EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA 97
+             +VK +E +  EEK+ A++     ++ PV K   P  K  + E E+E+ + E      AA 
+Sbjct:   488 EVKEEEAEEKEEKEEAEEEVVAAKKSPV-KATAPELKEEEGEKEEEEGQEEEEEEEEAAK 546
+
+Query:    98 QTSRERKRLEME-KLENEKIQMEQQNQFLLQRLSQ---MEAENNRLSQQLAQ-------L 146
+                 E    E E   E E+ + E++ +   +   +    EA+  +  ++ A+       L
+Sbjct:   547 SDQAEEGGSEKEGSSEKEEGEQEEEGETEAEGEGEEAAAEAKEEKKMEEKAEEVAPKEEL 606
+
+Query:   147 AAEVR---GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKP 203
+             AAE +     +A +P+  SP T SPT      K    + P  + P     ++  SPT K 
+Sbjct:   607 AAEAKVEKPEKAKSPVAKSPTTKSPTAKSPEAKSPEAKSPTAKSPTAKSPVAK-SPTAK- 664
+
+Query:   204 STLAESSDVAQHP 216
+             S  A+S + A+ P
+Sbjct:   665 SPEAKSPE-AKSP 676
+
+
+>sp|Q9JTB5|IF2_NEIMA Translation initiation factor IF-2 OS=Neisseria
+            meningitidis serogroup A GN=infB PE=3 SV=1
+        Length = 962
+
+ Score = 105 (42.0 bits), Expect = 0.038, P = 0.038
+ Identities = 41/169 (24%), Positives = 69/169 (40%)
+
+Query:    17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR- 75
+             A PA++ P  T + A+T+  +A+ K  E    EK  A K  S     P  K   P  +R 
+Sbjct:   151 AKPAAQKP--TEAKAETAPVAAETKPAEESKAEKAQADKMPSKKPAEPKEKAAKPKHERN 208
+
+Query:    76 AKTEDEKEQRRI------ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+              K +D K+  +       + V+     AQ   E +R    +   E +  E+Q +   +  
+Sbjct:   209 GKGKDAKKPAKPAAPAVPQPVVSAEEQAQRDEEARRAAALRAHQEALLKEKQERQARREA 268
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178
+              + +AE    + Q A+   +     A  P   +PA  +  + P   K+E
+Sbjct:   269 MKQQAEQQAKAAQEAKTGRQRPAKPAEKPQAAAPAVENKPVNPAKAKKE 317
+
+
+>sp|Q9JYD2|IF2_NEIMB Translation initiation factor IF-2 OS=Neisseria
+            meningitidis serogroup B GN=infB PE=3 SV=1
+        Length = 962
+
+ Score = 105 (42.0 bits), Expect = 0.038, P = 0.038
+ Identities = 41/169 (24%), Positives = 69/169 (40%)
+
+Query:    17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR- 75
+             A PA++ P  T + A+T+  +A+ K  E    EK  A K  S     P  K   P  +R 
+Sbjct:   151 AKPAAQKP--TEAKAETAPVAAETKPAEESKAEKAQADKMPSEKPAEPKEKAAKPKHERN 208
+
+Query:    76 AKTEDEKEQRRI------ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+              K +D K+  +       + V+     AQ   E +R    +   E +  E+Q +   +  
+Sbjct:   209 GKGKDAKKPAKPAAPAVPQPVVSAEEQAQRDEEARRAAALRAHQEALLKEKQERQARREA 268
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178
+              + +AE    + Q A+   +     A  P   +PA  +  + P   K+E
+Sbjct:   269 MKQQAEQQAKAAQEAKTGRQRPAKPAEKPQAAAPAVENKPVNPAKAKKE 317
+
+
+>sp|A1KV51|IF2_NEIMF Translation initiation factor IF-2 OS=Neisseria
+            meningitidis serogroup C / serotype 2a (strain ATCC 700532 / FAM18)
+            GN=infB PE=3 SV=1
+        Length = 962
+
+ Score = 105 (42.0 bits), Expect = 0.038, P = 0.038
+ Identities = 41/169 (24%), Positives = 69/169 (40%)
+
+Query:    17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR- 75
+             A PA++ P  T + A+T+  +A+ K  E    EK  A K  S     P  K   P  +R 
+Sbjct:   151 AKPAAQKP--TEAKAETAPVAAETKPAEESKAEKAQADKMPSKKPAEPKEKAAKPKHERN 208
+
+Query:    76 AKTEDEKEQRRI------ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+              K +D K+  +       + V+     AQ   E +R    +   E +  E+Q +   +  
+Sbjct:   209 GKGKDAKKPAKPAAPAVPQPVVSAEEQAQRDEEARRAAALRAHQEALLKEKQERQARREA 268
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178
+              + +AE    + Q A+   +     A  P   +PA  +  + P   K+E
+Sbjct:   269 MKQQAEQQAKAAQEAKTGRQRPAKPAEKPQAAAPAVENKPVNPAKAKKE 317
+
+
+>sp|P0C5H8|KAPC_EMENI Putative transcription factor kapC OS=Emericella nidulans
+            GN=kapC PE=3 SV=1
+        Length = 278
+
+ Score = 98 (39.6 bits), Expect = 0.039, P = 0.038
+ Identities = 36/147 (24%), Positives = 65/147 (44%)
+
+Query:    17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA 76
+             A P    P  T SP D +     +    + P  + PA+   +   E P            
+Sbjct:    49 AQPHHLQPTATTSPRDQNNIDPAISGGAMLPPSQPPAQPEPTVEDETP------------ 96
+
+Query:    77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136
+             KT  ++     +R  +NRAA +  R+RK   + KLE E+++   + + + Q    ++AEN
+Sbjct:    97 KTYGKRPLSTSKRAAQNRAAQRAFRQRKESYIRKLE-EQVK---EYEVMSQEYKALQAEN 152
+
+Query:   137 NRLSQQLAQLAAEVRGSRANTP-MPGS 162
+              +L + +  L + +  S+   P +PG+
+Sbjct:   153 YQLREYVINLQSRLLDSQGEVPELPGN 179
+
+
+>sp|Q80YR5|SAFB2_MOUSE Scaffold attachment factor B2 OS=Mus musculus GN=Safb2
+            PE=1 SV=2
+        Length = 991
+
+ Score = 105 (42.0 bits), Expect = 0.040, P = 0.039
+ Identities = 50/163 (30%), Positives = 81/163 (49%)
+
+Query:     5 MEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ-----EVKPEEK-KPAKKRKS 58
+             ME+T+  +D     P   V   + S  D S  S D K++     ++   +K K  ++R+ 
+Sbjct:   610 MERTVV-MDKSKGEPVISVKATSRSK-DRSSKSQDRKSEGREKRDILSFDKIKEQRERER 667
+
+Query:    59 WGQ-ELPVPKTNLPPRKRAKTEDEKEQR------RIE--RVLRNRAAAQTSR---ERKRL 106
+               Q E  + +T    R+R + + E+EQR      R E  R+ R R   Q  R   ER+RL
+Sbjct:   668 QRQREREIRETE---RRREREQREREQRLDAFQERREKARLQRERMQLQCQRQRLERERL 724
+
+Query:   107 EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149
+             E E+LE E++++E++ +   QR+ +   E   L +Q  QL AE
+Sbjct:   725 ERERLERERMRVERERRKEQQRIMR---EREELRRQQEQLRAE 764
+
+
+>sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus roborovskii GN=FOS PE=3
+            SV=1
+        Length = 381
+
+ Score = 100 (40.3 bits), Expect = 0.040, P = 0.039
+ Identities = 52/176 (29%), Positives = 73/176 (41%)
+
+Query:    74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+             +R K E    +E+E+RRI R  RN+ AA   R R+R   + L+ E  Q+E +   L   +
+Sbjct:   125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183
+             + +  E  +L   LA      +    +   P   + AS  LT   P     E +E   LP
+Sbjct:   184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEDMSVASLDLTGGLPEAATPESEEAFSLP 242
+
+Query:   184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS-VAGLEGDGSALPLFDL-GS 237
+             L   P P  SL            AE  D     A S  +G E    ++P  DL GS
+Sbjct:   243 LLNEPEPKTSLESVKSISSMELKAEPFDDFLFSASSRPSGSETTARSVPDMDLSGS 298
+
+
+>sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xenopus tropicalis GN=mafa
+            PE=2 SV=1
+        Length = 289
+
+ Score = 98 (39.6 bits), Expect = 0.042, P = 0.041
+ Identities = 26/85 (30%), Positives = 47/85 (55%)
+
+Query:    83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+             +Q+R  R L+NR  AQ+ R ++  +   LE EK Q++ Q + L Q +S++  E +    +
+Sbjct:   203 KQKR--RTLKNRGYAQSCRYKRVQQRHILETEKCQLQSQVEQLKQEVSRLAKERDLYKDK 260
+
+Query:   143 LAQLAAEVRGSRANTPMPGSPATAS 167
+               +LA+    +R + P  G+P  A+
+Sbjct:   261 YEKLASRSFTTRESPPQ-GNPGKAN 284
+
+
+>sp|P26038|MOES_HUMAN Moesin OS=Homo sapiens GN=MSN PE=1 SV=3
+        Length = 577
+
+ Score = 102 (41.0 bits), Expect = 0.043, P = 0.042
+ Identities = 26/103 (25%), Positives = 51/103 (49%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTNLPPR-KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             EKK  +  +   +++   K  L  R K+ + + +K Q+ +E   R     +  R+R + E
+Sbjct:   326 EKKKREMAEKEKEKIEREKEELMERLKQIEEQTKKAQQELEEQTRRALELEQERKRAQSE 385
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150
+              EKL  E+ + E+  + LLQ     +    +L+ ++A+L A +
+Sbjct:   386 AEKLAKERQEAEEAKEALLQASRDQKKTQEQLALEMAELTARI 428
+
+ Score = 101 (40.6 bits), Expect = 0.056, P = 0.055
+ Identities = 25/80 (31%), Positives = 45/80 (56%)
+
+Query:    66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             P T    + +A+  +EK Q+++ER       A    E+K+ EM + E EKI+ E++   L
+Sbjct:   297 PDTIEVQQMKAQAREEKHQKQMER-------AMLENEKKKREMAEKEKEKIEREKEE--L 347
+
+Query:   126 LQRLSQMEAENNRLSQQLAQ 145
+             ++RL Q+E +  +  Q+L +
+Sbjct:   348 MERLKQIEEQTKKAQQELEE 367
+
+
+>sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus norvegicus GN=Hlf PE=2
+            SV=1
+        Length = 295
+
+ Score = 98 (39.6 bits), Expect = 0.044, P = 0.043
+ Identities = 39/151 (25%), Positives = 66/151 (43%)
+
+Query:     2 SCDMEKTMSSVDSLPA---TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS 58
+             +C M+  +     LPA   TP+   P     P     + AD+    +   E    +KRK 
+Sbjct:   142 NC-MQNPIRPGQLLPANRNTPSPIDPDTIQVPVGYEPDPADLALSSIPGPEMFDPRKRKF 200
+
+Query:    59 WGQEL-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQ 117
+               +EL P P      RK    +D K+ +   R  +N  AA+ SR+ +RL+  ++      
+Sbjct:   201 SEEELKPQPMIK-KARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKENQIAIRASF 259
+
+Query:   118 MEQQNQFLLQRLSQMEAENNRLSQQLAQLAA 148
+             +E++N  L Q ++ +  E  +    LA+  A
+Sbjct:   260 LEKENSALRQEVADLRKELGKCKNILAKYEA 290
+
+
+>sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1 subunit A-B OS=Xenopus
+            laevis GN=chaf1a-B PE=2 SV=2
+        Length = 885
+
+ Score = 104 (41.7 bits), Expect = 0.045, P = 0.044
+ Identities = 32/114 (28%), Positives = 56/114 (49%)
+
+Query:    29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE 88
+             S +  SL+S DV+T         P+      G+      +N    ++ KT+D+ E+R+ E
+Sbjct:   216 SSSPVSLSSPDVQTGSKFTNGSSPSTSTTPTGKAT----SNKTSAEKKKTKDKAEKRQAE 271
+
+Query:    89 RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+             +  R   A + +R  K L  +K E E+ Q E+  +   +R  + +AE NRL ++
+Sbjct:   272 KEERE-CARREARAAKDLAKKKREGEREQREKDKKEKKEREDREKAEKNRLKEE 324
+
+ Score = 103 (41.3 bits), Expect = 0.058, P = 0.056
+ Identities = 47/206 (22%), Positives = 91/206 (44%)
+
+Query:     8 TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK 67
+             T  S  S   TP  +      S A+        + ++ + EE++ A++     ++L   K
+Sbjct:   234 TNGSSPSTSTTPTGKATSNKTS-AEKKKTKDKAEKRQAEKEERECARREARAAKDLAKKK 292
+
+Query:    68 TNLPPRKRAKTEDEKEQRRI-ERVLRNRAAAQTSRER-KRLEMEKLENEKIQMEQQNQFL 125
+                   +R K + EK++R   E+  +NR   +  +E+ + LE ++ E  K + E++ +  
+Sbjct:   293 REGEREQREKDKKEKKEREDREKAEKNRLKEEKKKEKLEALEAKQEEKRKKEEEKRQKEE 352
+
+Query:   126 LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM-PGSPATASPTLTPTLFKQERDELPL 184
+              +RL +   E  R+  + A++   ++  +  TP  P + A +     P   K+     PL
+Sbjct:   353 EKRLKE---EEKRIKAEKAEITRFLQ--KPKTPQAPKTFARSCGKFAPFEIKKGMALAPL 407
+
+Query:   185 ERIPFPTPSLSDYSPTLKPSTLAESS 210
+              RI F   +  +    L+  T +ESS
+Sbjct:   408 CRIDFEQEASEELDIFLQEQT-SESS 432
+
+
+>sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GYF domain-containing protein
+            2 OS=Homo sapiens GN=GIGYF2 PE=1 SV=1
+        Length = 1299
+
+ Score = 112 (44.5 bits), Expect = 0.045, Sum P(2) = 0.044
+ Identities = 40/140 (28%), Positives = 73/140 (52%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             EE++  ++ +   +EL + K      K A+ E+E+ QRR+E    NR   +    R R E
+Sbjct:   824 EERRREEEERRKQEEL-LRKQEEEAAKWAR-EEEEAQRRLEE---NRLRMEEEAARLRHE 878
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEA----ENNRLSQQLAQL---AAEVRGSRANTPMP 160
+              E+ + +++++++Q + + QR  Q EA    +  +  QQLAQ+   ++   G ++NT   
+Sbjct:   879 EEERKRKELEVQRQKELMRQRQQQQEALRRLQQQQQQQQLAQMKLPSSSTWGQQSNTTAC 938
+
+Query:   161 GSPATASPTLTPTLFKQERD 180
+              S AT S      L ++ER+
+Sbjct:   939 QSQATLSLAEIQKL-EEERE 957
+
+ Score = 39 (18.8 bits), Expect = 0.045, Sum P(2) = 0.044
+ Identities = 9/33 (27%), Positives = 18/33 (54%)
+
+Query:     1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT 33
+             M  D+++ +S + S  A+P   +P    +P+ T
+Sbjct:   429 MVADVQQPLSQIPSDTASPLLILPPPVPNPSPT 461
+
+
+>sp|Q8WYK2|JDP2_HUMAN Jun dimerization protein 2 OS=Homo sapiens GN=JDP2 PE=1
+            SV=1
+        Length = 163
+
+ Score = 92 (37.4 bits), Expect = 0.046, P = 0.045
+ Identities = 36/123 (29%), Positives = 56/123 (45%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKR---AKTE-DEKEQRRIERVLRNRAAAQTSRER 103
+             EE K A  R       P+    +   KR    K+E DE+E+RR  R  +N+ AA   R +
+Sbjct:    33 EELKYADIRNLGAMIAPLHFLEVKLGKRPQPVKSELDEEEERRKRRREKNKVAAARCRNK 92
+
+Query:   104 KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE--VRGSRANTP-MP 160
+             K+   E L+ E  ++E  N  L  ++ +++ E  +L   L +      VR     TP   
+Sbjct:    93 KKERTEFLQRESERLELMNAELKTQIEELKQERQQLILMLNRHRPTCIVRTDSVKTPESE 152
+
+Query:   161 GSP 163
+             G+P
+Sbjct:   153 GNP 155
+
+
+>sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-binding protein 5 OS=Mus
+            musculus GN=Creb5 PE=2 SV=3
+        Length = 357
+
+ Score = 99 (39.9 bits), Expect = 0.047, P = 0.046
+ Identities = 28/92 (30%), Positives = 49/92 (53%)
+
+Query:    52 PAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKL 111
+             PA ++    Q +  P+     R+R   ED  E+RR + + RNRAAA   R+++++ +  L
+Sbjct:   194 PATQQMQPTQTIQPPQPTGGRRRRVVDEDPDERRR-KFLERNRAAATRCRQKRKVWVMSL 252
+
+Query:   112 ENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL 143
+             E +  ++ Q N  L   +S ++ E  +L Q L
+Sbjct:   253 EKKAEELTQTNMQLQNEVSMLKNEVAQLKQLL 284
+
+
+>sp|Q9C0A6|SETD5_HUMAN SET domain-containing protein 5 OS=Homo sapiens GN=SETD5
+            PE=1 SV=2
+        Length = 1442
+
+ Score = 106 (42.4 bits), Expect = 0.047, P = 0.046
+ Identities = 45/204 (22%), Positives = 87/204 (42%)
+
+Query:     2 SCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQ 61
+             +C ++K   +   LP  P    P L    A+T    A  K  E++ + +   +      Q
+Sbjct:   410 NCPIQKRNPNATELPLLPPP--PSLPTIGAETRRRKARRKELEMEQQNEASEENNDQQSQ 467
+
+Query:    62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVL---RNRAAAQTSRERKRLE--MEKLENEKI 116
+             E+P   T     +     +EK +   E V+    N A ++ +RE +++E  M   EN + 
+Sbjct:   468 EVPEKVTVSSDHEEVDNPEEKPEEEKEEVIDDQENLAHSRRTREDRKVEAIMHAFENLEK 527
+
+Query:   117 QMEQQNQFLLQRLSQME----AENNRLSQQLAQLA--AEVRGSRANTPMPGSPATASPTL 170
+             + ++++Q L Q  S +E         + ++    A  +EV  S +N  +P +P +     
+Sbjct:   528 RKKRRDQPLEQSNSDVEITTTTSETPVGEETKTEAPESEVSNSVSNVTIPSTPQSVGVN- 586
+
+Query:   171 TPTLFKQERDELPLER-IPFPTPS 193
+               T    +  ++  E+ +P P P+
+Sbjct:   587 --TRRSSQAGDIAAEKLVPKPPPA 608
+
+
+>sp|Q92575|UBXN4_HUMAN UBX domain-containing protein 4 OS=Homo sapiens GN=UBXN4
+            PE=1 SV=2
+        Length = 508
+
+ Score = 101 (40.6 bits), Expect = 0.047, P = 0.046
+ Identities = 58/224 (25%), Positives = 98/224 (43%)
+
+Query:    22 EVPVLTVSPADTSLN--SADVKTQEVKPE---EKKPAKKRKSWGQELPVPKTNLPPRKRA 76
+             E+P  + + +DT+    SA   T   +P    +++PA+      + L      L  R+  
+Sbjct:   156 EIPPTSDTKSDTATGGESAGHATSSQEPSGCSDQRPAEDLNIRVERLT---KKLEERREE 212
+
+Query:    77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136
+             K ++E EQR I++ +  R   +   + KR + E+L   K  +E++N+      ++  A  
+Sbjct:   213 KRKEE-EQREIKKEIERRKTGKEMLDYKRKQEEELT--KRMLEERNR----EKAEDRAAR 265
+
+Query:   137 NRLSQQLAQLAAEVRGSR-ANTPMPGSPATASPTLTPTL---FKQE---RDELPLERIPF 189
+              R+ QQ+A   AE R +R A T      A A+  L        K+E   R+   + RI F
+Sbjct:   266 ERIKQQIALDRAE-RAARFAKTKEEVEAAKAAALLAKQAEMEVKRESYARERSTVARIQF 324
+
+Query:   190 PTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLF 233
+               P  S ++    PS  A   +  Q  A +V    G+ S   +F
+Sbjct:   325 RLPDGSSFTNQF-PSD-APLEEARQFAAQTVGNTYGNFSLATMF 366
+
+
+>sp|Q5R4I3|UBXN4_PONAB UBX domain-containing protein 4 OS=Pongo abelii GN=UBXN4
+            PE=2 SV=1
+        Length = 508
+
+ Score = 101 (40.6 bits), Expect = 0.047, P = 0.046
+ Identities = 58/224 (25%), Positives = 98/224 (43%)
+
+Query:    22 EVPVLTVSPADTSLN--SADVKTQEVKPE---EKKPAKKRKSWGQELPVPKTNLPPRKRA 76
+             E+P  + + +DT+    SA   T   +P    +++PA+      + L      L  R+  
+Sbjct:   156 EIPPTSDTKSDTATGGESAGHATSSQEPSGCSDQRPAEDLNIRVERLT---KKLEERREE 212
+
+Query:    77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136
+             K ++E EQR I++ +  R   +   + KR + E+L   K  +E++N+      ++  A  
+Sbjct:   213 KRKEE-EQREIKKEIERRKTGKEMLDYKRKQEEELT--KRMLEERNR----EKAEDRAAR 265
+
+Query:   137 NRLSQQLAQLAAEVRGSR-ANTPMPGSPATASPTLTPTL---FKQE---RDELPLERIPF 189
+              R+ QQ+A   AE R +R A T      A A+  L        K+E   R+   + RI F
+Sbjct:   266 ERIKQQIALDRAE-RAARFAKTKEEVEAAKAAALLAKQAEMEVKRESYARERSTVARIQF 324
+
+Query:   190 PTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLF 233
+               P  S ++    PS  A   +  Q  A +V    G+ S   +F
+Sbjct:   325 RLPDGSSFTNQF-PSD-APLEEARQFAAQTVGNTYGNFSLATMF 366
+
+
+>sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-binding protein TGA-1B
+            (Fragment) OS=Nicotiana tabacum GN=TGA1B PE=2 SV=1
+        Length = 242
+
+ Score = 96 (38.9 bits), Expect = 0.049, P = 0.048
+ Identities = 25/63 (39%), Positives = 40/63 (63%)
+
+Query:    80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139
+             DE E++R  R++RNR +AQ SR+RK+  +E+LE++   M    Q L  +++ + AEN  L
+Sbjct:   181 DEDEKKRA-RLVRNRESAQLSRQRKKHYVEELEDKVRIMHSTIQDLNAKVAYIIAENATL 239
+
+Query:   140 SQQ 142
+               Q
+Sbjct:   240 KTQ 242
+
+
+>sp|A9M1D5|IF2_NEIM0 Translation initiation factor IF-2 OS=Neisseria
+            meningitidis serogroup C (strain 053442) GN=infB PE=3 SV=1
+        Length = 962
+
+ Score = 104 (41.7 bits), Expect = 0.049, P = 0.048
+ Identities = 41/169 (24%), Positives = 69/169 (40%)
+
+Query:    17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR- 75
+             A PA++ P  T + A+T+  +A+ K  E    EK  A K  S     P  K   P  +R 
+Sbjct:   151 AKPAAQKP--TEAKAETAPVAAETKPAEESKAEKAQADKMPSKKPAEPKEKAAKPKHERN 208
+
+Query:    76 AKTEDEKEQRRI------ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+              K +D K+  +       + V+     AQ   E +R    +   E +  E+Q +   +  
+Sbjct:   209 GKGKDAKKPAKPAAPAVPQPVVSAEEQAQRDEEARRAAALRAHQEALLKEKQERQARREA 268
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178
+              + +AE    + Q A+   +     A  P   +PA  +  + P   K+E
+Sbjct:   269 MKQQAEQQAKAAQEAKTGRQRPAKPAEKPQAAAPALENKPVNPAKAKKE 317
+
+
+>sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper transcription factor J
+            OS=Dictyostelium discoideum GN=bzpJ PE=3 SV=1
+        Length = 787
+
+ Score = 103 (41.3 bits), Expect = 0.050, P = 0.049
+ Identities = 27/99 (27%), Positives = 52/99 (52%)
+
+Query:    80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139
+             +EKE ++  R+++NR  A  SR R+++ +E +E +  +  Q    +  +L+ ++ EN  L
+Sbjct:   546 EEKELKKQRRLVKNREYASQSRSRRKIYVENIETKLQKTNQDCASIKSQLNSVKEENKAL 605
+
+Query:   140 SQQLAQLAAEVRGSRANTPMPG---SPATASPTLTPTLF 175
+              +QL  L   ++ + +     G   SP   + T + TLF
+Sbjct:   606 KKQLYSLTNTLKSNPSLAEAFGKIFSPIGNNKTSSATLF 644
+
+
+>sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like protein 2 OS=Homo
+            sapiens PE=2 SV=2
+        Length = 650
+
+ Score = 102 (41.0 bits), Expect = 0.051, P = 0.049
+ Identities = 27/105 (25%), Positives = 56/105 (53%)
+
+Query:    43 QEVKPEEKKPAKKR-KSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR 101
+             +E++ +EKK  K+  K W QE       L  ++    E E++ RR E+ LR +      +
+Sbjct:   279 EELREQEKKIRKQEEKMWRQE-----ERLREQEGKMREQEEKMRRQEKRLREQEKELREQ 333
+
+Query:   102 ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146
+             E++  E +KL  ++ QM++Q + + ++  +M  +  ++ +Q  +L
+Sbjct:   334 EKELREQKKLREQEEQMQEQEEKMWEQEEKMREQEEKMWRQEERL 378
+
+ Score = 85 (35.0 bits), Expect = 3.7, P = 0.98
+ Identities = 25/93 (26%), Positives = 46/93 (49%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL- 106
+             EEK   ++ K W QE  + +     R++ +   ++E+R  E+  R R   +  RE++++ 
+Sbjct:   361 EEKMREQEEKMWRQEERLWEQEKQMREQEQKMRDQEERMWEQDERLREKEERMREQEKMW 420
+
+Query:   107 -EMEKLENEKIQMEQQNQFLLQRLSQMEAENNR 138
+              ++EK+  EK   EQ+ +   Q     E E  R
+Sbjct:   421 EQVEKMREEKKMQEQEKKTRDQEEKMQEEERIR 453
+
+ Score = 84 (34.6 bits), Expect = 4.8, P = 0.992
+ Identities = 21/108 (19%), Positives = 54/108 (50%)
+
+Query:    35 LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR 94
+             L   + K +E + + ++  K+ +   +EL   +  L  +K+ + ++E+ Q + E++    
+Sbjct:   302 LREQEGKMREQEEKMRRQEKRLREQEKELREQEKELREQKKLREQEEQMQEQEEKMWEQE 361
+
+Query:    95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+                +   E+   + E+L  ++ QM +Q Q +  +  +M  ++ RL ++
+Sbjct:   362 EKMREQEEKMWRQEERLWEQEKQMREQEQKMRDQEERMWEQDERLREK 409
+
+ Score = 82 (33.9 bits), Expect = 7.9, P = 0.9996
+ Identities = 26/108 (24%), Positives = 58/108 (53%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQ--ELPVPKTNLPPRKRAKTEDEK--EQRRI-ERVLRNRAAA 97
+             + ++ +E++  ++ K W Q  ++   K      K+ + ++EK  E+ RI ER  + R   
+Sbjct:   404 ERLREKEERMREQEKMWEQVEKMREEKKMQEQEKKTRDQEEKMQEEERIREREKKMREEE 463
+
+Query:    98 QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA---ENNRLSQQ 142
+             +T RE++  +M+K E E +  +++ ++  QRL + +    E  ++ +Q
+Sbjct:   464 ETMREQEE-KMQKQE-ENMWEQEEKEWQQQRLPEQKEKLWEQEKMQEQ 509
+
+
+>sp|Q8N300|CCD23_HUMAN Coiled-coil domain-containing protein 23 OS=Homo sapiens
+            GN=CCDC23 PE=2 SV=1
+        Length = 66
+
+ Score = 77 (32.2 bits), Expect = 0.051, P = 0.050
+ Identities = 17/54 (31%), Positives = 33/54 (61%)
+
+Query:    71 PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF 124
+             PP ++ KT+ ++   R+E+  + ++A Q  ++R+R E+  L     ++EQQ QF
+Sbjct:     3 PPARKEKTKVKESVSRVEKA-KQKSAQQELKQRQRAEIYALNRVMTELEQQ-QF 54
+
+
+>sp|O81025|P2A03_ARATH Putative protein PHLOEM PROTEIN 2-LIKE A3 OS=Arabidopsis
+            thaliana GN=PP2A3 PE=2 SV=1
+        Length = 463
+
+ Score = 100 (40.3 bits), Expect = 0.054, P = 0.052
+ Identities = 38/120 (31%), Positives = 65/120 (54%)
+
+Query:    41 KTQEVKPEEKKPAKKR-KSWGQELP-VPKTNLPPRKRAKTEDEKEQRRIERVL--RNRAA 96
+             K ++ K E+ K    R ++ G++   +P T    RK  K E+++  R  ERV+  +NRA 
+Sbjct:   174 KDEKKKVEQVKQLLARVENVGEQTGGIPYTYQLHRK-IKEENDERLREEERVIESKNRAE 232
+
+Query:    97 AQTSRERKRLEMEKLENEKIQMEQ-QNQFLL------QRLSQMEAENNRLSQQLAQLAAE 149
+             A+ +  ++ L MEK   EK+QME+ +N+ L+      ++L + E   NR   +LA +  E
+Sbjct:   233 AELAEMQQNLLMEK---EKLQMEEAKNKQLIAQAEANEKLMEQERAKNRAETELAAVMVE 289
+
+
+>sp|O35763|MOES_RAT Moesin OS=Rattus norvegicus GN=Msn PE=1 SV=3
+        Length = 577
+
+ Score = 101 (40.6 bits), Expect = 0.056, P = 0.055
+ Identities = 26/103 (25%), Positives = 51/103 (49%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTNLPPR-KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             EKK  +  +   +++   K  L  + K+ + + +K Q+ +E   R     +  R+R + E
+Sbjct:   326 EKKKRELAEKEKEKIEREKEELMEKLKQIEEQTKKAQQELEEQTRRALELEQERKRAQSE 385
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150
+              EKL  E+ + E+  + LLQ     +    +L+ ++A+L A V
+Sbjct:   386 AEKLAKERQEAEEAKEALLQASRDQKKTQEQLASEMAELTARV 428
+
+ Score = 95 (38.5 bits), Expect = 0.26, P = 0.23
+ Identities = 23/80 (28%), Positives = 45/80 (56%)
+
+Query:    66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             P T    + +A+  +EK Q+++ER L          E+K+ E+ + E EKI+ E++   L
+Sbjct:   297 PDTIEVQQMKAQAREEKHQKQMERAL-------LENEKKKRELAEKEKEKIEREKEE--L 347
+
+Query:   126 LQRLSQMEAENNRLSQQLAQ 145
+             +++L Q+E +  +  Q+L +
+Sbjct:   348 MEKLKQIEEQTKKAQQELEE 367
+
+ Score = 81 (33.6 bits), Expect = 8.9, P = 0.9999
+ Identities = 29/99 (29%), Positives = 49/99 (49%)
+
+Query:    73 RKRAKTEDEK-EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ-NQF-LLQRL 129
+             RKRA++E EK  + R E      A  Q SR++K+ + E+L +E  ++  + +Q  + ++ 
+Sbjct:   379 RKRAQSEAEKLAKERQEAEEAKEALLQASRDQKKTQ-EQLASEMAELTARVSQLEMARKK 437
+
+Query:   130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASP 168
+              + EAE      Q+ Q   E   +   T M  +P  A P
+Sbjct:   438 KESEAEECHQKAQMVQEDLEKTRAELKTAM-STPHVAEP 475
+
+
+>sp|Q9Z220|TSG10_RAT Testis-specific gene 10 protein OS=Rattus norvegicus
+            GN=Tsga10 PE=1 SV=2
+        Length = 712
+
+ Score = 102 (41.0 bits), Expect = 0.057, P = 0.055
+ Identities = 52/182 (28%), Positives = 76/182 (41%)
+
+Query:    44 EVKPEEKKPAKKRKSWGQELP-----VPKTNLPPRKRAKTEDEKEQRRIE-RVLRNRAAA 97
+             +VK E +  +KK      EL      V  TNL   K       +E   +E   L+N   +
+Sbjct:   361 KVKQENQALSKKLNDTHNELSDIKQKVQDTNLEVNKLKNILKSEESTNLEVNKLKNILKS 420
+
+Query:    98 QTSRERKRLEM--------EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149
+             + S  R+ +E         E  EN+  Q+E +N  L   L   EAE NRL +++  L  E
+Sbjct:   421 EESENRQIMEQLRKANEDAENWENKARQLEAENNTLKLELITAEAEGNRLKEKVDALNRE 480
+
+Query:   150 VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS-LSDYSPTLKPSTLAE 208
+             V     N         A  TL  +L K E +   L+++ F   S L+D S T +     +
+Sbjct:   481 VE-QHLNAERSYKSQIA--TLHKSLVKMEEE---LQKVQFEKVSALADLSSTRELCIKLD 534
+
+Query:   209 SS 210
+             SS
+Sbjct:   535 SS 536
+
+
+>sp|Q32N93|INCEB_XENLA Inner centromere protein B OS=Xenopus laevis GN=incenp-B
+            PE=2 SV=1
+        Length = 892
+
+ Score = 103 (41.3 bits), Expect = 0.058, P = 0.056
+ Identities = 38/144 (26%), Positives = 70/144 (48%)
+
+Query:    39 DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL-PPRKRAKTEDEKE---QRRIERVLRNR 94
+             +++ Q+   E K+ A++ +   +++   K  L   R+R + E EK    QR +ER  + +
+Sbjct:   651 EMERQKKMAEAKRLAEQERE--RQVFAEKERLRAERERERIEREKALQLQRELERAAQEK 708
+
+Query:    95 AAAQTSRE--RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG 152
+                +   E  +KR + ++LE E+++  +  Q + +RL   E +  +  +Q A  AA V  
+Sbjct:   709 EQQRREAEERKKREQQQRLEQERLERLRTEQEV-KRLQ--EEQQRKAKEQAAAAAAPVMN 765
+
+Query:   153 SRANTPMPGSPATASPTLTPTLFK 176
+                   M  SPA  S  +TP  +K
+Sbjct:   766 --VTVDMQNSPACESYEMTPKSYK 787
+
+ Score = 91 (37.1 bits), Expect = 1.2, P = 0.70
+ Identities = 26/86 (30%), Positives = 52/86 (60%)
+
+Query:    67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF-- 124
+             K N P +   K+E EKE++R++  LR +  A+  R++K  E +K + E++++ ++++   
+Sbjct:   502 KRNTPLKPDPKSE-EKERQRLD-ALRKKEEAELQRKQKIEEGKKRKQEELKLRREDRLRK 559
+
+Query:   125 LLQ---RLSQMEAENNR-LSQQLAQL 146
+             +LQ   R+ Q+E E  +   Q+ AQ+
+Sbjct:   560 VLQARERVEQLEEEKKKKFEQKFAQI 585
+
+ Score = 87 (35.7 bits), Expect = 3.3, P = 0.96
+ Identities = 32/132 (24%), Positives = 61/132 (46%)
+
+Query:    46 KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKR 105
+             K  E++  +++K   +   + +     +  A+ E  + +R  ER+ R +A  Q  RE +R
+Sbjct:   645 KKREEEEMERQKKMAEAKRLAEQERERQVFAEKERLRAERERERIEREKAL-QLQRELER 703
+
+Query:   106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPAT 165
+                EK +  +   E++ +   QRL Q   E  R  Q++ +L  E +  +A      + A 
+Sbjct:   704 AAQEKEQQRREAEERKKREQQQRLEQERLERLRTEQEVKRLQEEQQ-RKAKEQ---AAAA 759
+
+Query:   166 ASPTLTPTLFKQ 177
+             A+P +  T+  Q
+Sbjct:   760 AAPVMNVTVDMQ 771
+
+ Score = 83 (34.3 bits), Expect = 9.0, P = 0.9999
+ Identities = 34/129 (26%), Positives = 62/129 (48%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTN---LPPRKRAKTEDEKEQRRIE--RVLRNRA 95
+             K +EV+   K+  + RK   +++   +     L  +KR + E E++++  E  R+     
+Sbjct:   610 KQEEVECRRKQEEEARKLKAKQMEEEERRHQELLQKKREEEEMERQKKMAEAKRLAEQER 669
+
+Query:    96 AAQTSRERKRL----EMEKLENEK-IQMEQQNQFLLQRLSQM--EAENNRLSQQLAQLAA 148
+               Q   E++RL    E E++E EK +Q++++ +   Q   Q   EAE  +  +Q  +L  
+Sbjct:   670 ERQVFAEKERLRAERERERIEREKALQLQRELERAAQEKEQQRREAEERKKREQQQRLEQ 729
+
+Query:   149 EVRGSRANT 157
+             E R  R  T
+Sbjct:   730 E-RLERLRT 737
+
+
+>sp|Q95XZ5|NPBL_CAEEL Nipped-B-like protein pqn-85 OS=Caenorhabditis elegans
+            GN=pqn-85 PE=2 SV=2
+        Length = 2203
+
+ Score = 107 (42.7 bits), Expect = 0.058, P = 0.056
+ Identities = 58/197 (29%), Positives = 94/197 (47%)
+
+Query:    32 DTSLNSADVKTQEVK----PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRI 87
+             D+S+ S+  K  E +     +E+K  ++RK   QEL   +      KR +  +EK     
+Sbjct:   177 DSSVISSHQKLYEEQCRQIEKERKEQEERKR-KQELEEQRKRNEELKRLRIAEEKRLLEE 235
+
+Query:    88 ERVLRNRAAAQTSRERKRLE-MEKLENEK---IQMEQQNQFLLQRLSQMEAENNRLSQQL 143
+             ++ LR +   +   E KRLE   +LE+E+     +E Q Q +LQ+   M+AE N+   ++
+Sbjct:   236 QQRLREQMERERLAEIKRLEEAARLEDERRIAADIEAQKQAMLQK---MQAEQNKHIAEV 292
+
+Query:   144 AQLAAEV--RGSRANTPMPGSPATASPTLTPTLFKQERDELP--LERIPFPTPSLSDYS- 198
+              +  +E+  R +R + PM         TL  T F      LP  L+ IPFP  S+ D + 
+Sbjct:   293 ERQRSELEERFARVSQPM---------TLVGTHF------LPNFLDMIPFPYESMVDSTL 337
+
+Query:   199 PTL----KPSTLAESSD 211
+             P +    + S + ES D
+Sbjct:   338 PQVFDMERDSAILESCD 354
+
+
+>sp|Q6CT90|EIF3A_KLULA Eukaryotic translation initiation factor 3 subunit A
+            OS=Kluyveromyces lactis GN=TIF32 PE=3 SV=1
+        Length = 925
+
+ Score = 103 (41.3 bits), Expect = 0.061, P = 0.059
+ Identities = 28/102 (27%), Positives = 55/102 (53%)
+
+Query:    74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ---NQFLLQRLS 130
+             K A+ E+ K+QR IE+V + R  A+ +  +  +E E  E E +  E++    +   +R++
+Sbjct:   801 KEAQLEEAKKQR-IEQVRKERYEAKVAEIQAAIEAEAAEKEALAKEEELAKRRAERERIN 859
+
+Query:   131 QMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATA-SPTLT 171
+             +   E  R  +++ +L  +  GS  ++P+P +P  A +P  T
+Sbjct:   860 KERDEIARKQREIEELLEKKNGSSRSSPVPSTPTPAPAPAQT 901
+
+
+>sp|Q5F489|TAF3_CHICK Transcription initiation factor TFIID subunit 3 OS=Gallus
+            gallus GN=TAF3 PE=2 SV=1
+        Length = 930
+
+ Score = 103 (41.3 bits), Expect = 0.061, P = 0.059
+ Identities = 60/236 (25%), Positives = 98/236 (41%)
+
+Query:     4 DMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE---EKKPAKKRKSWG 60
+             D EK           P S  P L + P + SL      T    P       P    K + 
+Sbjct:   634 DKEKVKDKSKEDKIKPPS-AP-LVLPPKEMSLPLFSTPTAMRLPSMLPSLSPMLPEKLF- 690
+
+Query:    61 QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 120
+             ++   PK     +K  K + E+E+ + E+  +++   +  RE+K  E EK ++EKI++E 
+Sbjct:   691 EDKEKPKEKKKDKKEKKKKKEREKDK-EKEKKDKEKERKEREKKEKEKEKHKHEKIKVEP 749
+
+Query:   121 ---QNQFLLQRLS-QMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFK 176
+                    ++ RL+ ++ A  +++       A E + +   TP+   P T  P  +P    
+Sbjct:   750 VVPAPSPVIPRLTLRVGAGQDKIVISKVVPAPEAKPA---TPV-SRPKTPPPVPSPV--- 802
+
+Query:   177 QERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL 232
+                   P+   P P P  +   PT+ P+ L  +S     PAVS AG    GS  P+
+Sbjct:   803 ----PAPVHVTPPPAPVPAPPQPTVSPALLPPAS-----PAVSAAG----GSKAPV 845
+
+
+>sp|P42775|GBF2_ARATH G-box-binding factor 2 OS=Arabidopsis thaliana GN=GBF2
+            PE=1 SV=1
+        Length = 360
+
+ Score = 98 (39.6 bits), Expect = 0.061, P = 0.060
+ Identities = 29/81 (35%), Positives = 44/81 (54%)
+
+Query:    80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM--EAENN 137
+             +EKE +R +R   NR +A+ SR RK+ E E+L  +   +  +N  L  +L Q+  E+E  
+Sbjct:   246 NEKEVKREKRKQSNRESARRSRLRKQAETEQLSVKVDALVAENMSLRSKLGQLNNESEKL 305
+
+Query:   138 RLSQQ--LAQLAAEVRGSRAN 156
+             RL  +  L QL A+  G   N
+Sbjct:   306 RLENEAILDQLKAQATGKTEN 326
+
+
+>sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase domain-containing protein
+            DDB_G0269086 OS=Dictyostelium discoideum GN=DDB_G0269086 PE=1 SV=2
+        Length = 937
+
+ Score = 103 (41.3 bits), Expect = 0.062, P = 0.060
+ Identities = 41/145 (28%), Positives = 66/145 (45%)
+
+Query:    18 TPASEVPVLTVSPADTSLNSADVKT-QEVKP--EEKKPAKKRKSWGQELPVPKTNLPPRK 74
+             +P+S +   T S   T+  +      +E KP  EE KP  +        PV + + P  +
+Sbjct:   283 SPSSNINTTTTSTTTTTTTTTSSPVVEESKPVVEESKPVVEESK-----PVVEESKPVVE 337
+
+Query:    75 RAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS 130
+              +K E    D KE+   ER+ +  AAA+  +ER    +EK E E++  E + + +     
+Sbjct:   338 ESKPEPVVDDSKEKEEKERLEKEEAAAKLEKER----LEKEEAERVAKEAEEKRIKD--- 390
+
+Query:   131 QMEAENN-RLSQQLAQLAAEVRGSR 154
+             + EA+ N    QQ A  AA+    R
+Sbjct:   391 EKEAQENLEKQQQEAAAAAQAEKER 415
+
+ Score = 102 (41.0 bits), Expect = 0.079, P = 0.076
+ Identities = 44/176 (25%), Positives = 80/176 (45%)
+
+Query:    13 DSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP 72
+             +S P    S+ PV+  S  +  ++ +  K ++ + E+++ A K +    E    +     
+Sbjct:   324 ESKPVVEESK-PVVEESKPEPVVDDSKEKEEKERLEKEEAAAKLEKERLEKEEAERVAKE 382
+
+Query:    73 RKRAKTEDEKE-QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+              +  + +DEKE Q  +E+  +  AAA    E++RLE E  E +K++ E+      +  + 
+Sbjct:   383 AEEKRIKDEKEAQENLEKQ-QQEAAAAAQAEKERLEKE--EADKLEKERLEA---EAAAA 436
+
+Query:   132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERI 187
+              +AE  RL  + A  AA+    R    +    A A       L K+E D L  E++
+Sbjct:   437 AQAEKERLEAEAAA-AAQAEKER----LEAEAAAAVQAEKERLEKEEADRLEKEKL 487
+
+ Score = 90 (36.7 bits), Expect = 1.6, P = 0.80
+ Identities = 39/125 (31%), Positives = 58/125 (46%)
+
+Query:    67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER-KRLEMEKLENEKIQMEQQN-QF 124
+             K  L     A  + EKE+   E      AAAQ  +ER ++ E E+LE EK++ E    Q 
+Sbjct:   639 KERLEAEAAAAAQAEKEKLEAEA----EAAAQAEKERLEKEEAERLEKEKLEAEAAAAQA 694
+
+Query:   125 LLQRLSQMEAENNRLSQ-QLAQLAAEVRGSRANTP-MPGSPATASPTLTPTLFKQERDEL 182
+               +RL   EAE    +Q +  +L AE   ++A    +    A A+      L K+E + L
+Sbjct:   695 EKERL---EAEAAAAAQAEKEKLEAEAAAAQAEKERLEAEAAAAAQAEKERLEKEETERL 751
+
+Query:   183 PLERI 187
+               ER+
+Sbjct:   752 EKERL 756
+
+
+>sp|Q54LU8|Y8646_DICDI Probable serine/threonine-protein kinase DDB_G0286465
+            OS=Dictyostelium discoideum GN=DDB_G0286465 PE=3 SV=1
+        Length = 1221
+
+ Score = 98 (39.6 bits), Expect = 0.062, Sum P(2) = 0.060
+ Identities = 23/79 (29%), Positives = 43/79 (54%)
+
+Query:    73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132
+             +K+ K   EKE +  E+    +   Q   ER++LE ++LE ++++ EQQ +  L+R   +
+Sbjct:  1105 KKQEKENKEKENKEKEK---KQLEKQKQLEREKLEKDRLEKDRLEKEQQEKDCLEREKFL 1161
+
+Query:   133 EAENNRLSQQLAQLAAEVR 151
+             E E     Q+  +L  E++
+Sbjct:  1162 ENERLEKEQEREKLEKEIK 1180
+
+ Score = 52 (23.4 bits), Expect = 0.062, Sum P(2) = 0.060
+ Identities = 17/79 (21%), Positives = 32/79 (40%)
+
+Query:     7 KTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66
+             K   S  S  +T  S+V + + S + +S +S+   +            K K+        
+Sbjct:   536 KESPSSSSTTSTSTSQVLIKSDSDSSSSASSSSSSSSSSSSSSSSSLPKSKNKSNRSKDN 595
+
+Query:    67 KTNLPPRKRAKTEDEKEQR 85
+             ++ L P KR  T+ +K  +
+Sbjct:   596 QSKLDPEKRLLTKLKKSMK 614
+
+ Score = 46 (21.3 bits), Expect = 0.25, Sum P(2) = 0.22
+ Identities = 9/28 (32%), Positives = 18/28 (64%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNL 70
+             ++ K +EK+  K+++  G+E  +PK  L
+Sbjct:   755 EKEKEKEKEKEKEKEEEGEEGNIPKEKL 782
+
+
+>sp|P94517|YSCB_BACSU Uncharacterized protein yscB OS=Bacillus subtilis GN=yscB
+            PE=4 SV=2
+        Length = 221
+
+ Score = 94 (38.1 bits), Expect = 0.068, P = 0.066
+ Identities = 47/170 (27%), Positives = 78/170 (45%)
+
+Query:    29 SPADTSLNSADVKTQEVKPEEK--KPAKKRK--SWGQELPVP-KTNLPPRKRAKTEDEKE 83
+             S +  S     VKT    P+++  K  KK K  S   +   P  T L  RK AK E EK 
+Sbjct:    22 STSSESKVETTVKTTAAFPQKELEKELKKLKPVSLDMKFESPLATELGKRK-AKEEAEK- 79
+
+Query:    84 QRRI--------ERVLRNRAAAQTSRERKRL-EMEKLENEKI-QMEQQNQFLLQRLSQME 133
+             QR+I        ER  + +   +   ER+RL E +  E +++ + E+Q +   QR + ++
+Sbjct:    80 QRQIAAEKKLEKEREAKRKKQQEEKAERQRLAEQQAAERQRLAEAERQAELERQRQAAIQ 139
+
+Query:   134 AENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELP 183
+              E    +++  Q  A+ + + A +     P ++S     T+ +Q   ELP
+Sbjct:   140 KEQKANAEKKRQSQAQRQQTEAPSSNSQDPPSSSSQTDKTI-QQPASELP 188
+
+
+>sp|Q2UKG6|EIF3A_ASPOR Eukaryotic translation initiation factor 3 subunit A
+            OS=Aspergillus oryzae GN=tif32 PE=3 SV=1
+        Length = 1038
+
+ Score = 103 (41.3 bits), Expect = 0.069, P = 0.067
+ Identities = 30/127 (23%), Positives = 60/127 (47%)
+
+Query:    54 KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN 113
+             K+ + + +     + +   +K+ + ++ +++RR ER  R  A  +   E +R++ E+ E 
+Sbjct:   799 KRHEEFERRRKAAERDFEAKKKQRIKEVQDRRRRERAEREEAERRQKEEEERIKREE-EE 857
+
+Query:   114 EKIQMEQQNQFLLQRLSQMEAENNRLS-----QQLAQLAAEVRGSRANTPMPGSPATASP 168
+                + E++ + L +  ++ E E  +L      Q+  +  AE R +   T  P  PA A P
+Sbjct:   858 RAAKEEERRRVLAEEKAKREEERKKLDEIALKQKQREEEAEARRASRKTGFPEPPARAEP 917
+
+Query:   169 TLT-PTL 174
+               T P L
+Sbjct:   918 ERTAPRL 924
+
+
+>sp|Q9Y592|CCD41_HUMAN Coiled-coil domain-containing protein 41 OS=Homo sapiens
+            GN=CCDC41 PE=1 SV=2
+        Length = 693
+
+ Score = 101 (40.6 bits), Expect = 0.071, P = 0.069
+ Identities = 44/183 (24%), Positives = 79/183 (43%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE- 107
+             EK   +K+  W +E       +  R+  K    KE+ +   + + +  +    + KRL+ 
+Sbjct:   517 EKTLEEKQIQWLEEKHKLHERITDREE-KYNQAKEKLQRAAIAQKKRKSLHENKLKRLQE 575
+
+Query:   108 -MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATA 166
+              +E LE +K ++E +NQ L ++    E +  RL ++L  +       R+   +P  P TA
+Sbjct:   576 KVEVLEAKKEELETENQVLNRQNVPFE-DYTRLQKRLKDIQRRHNEFRSLILVPNMPPTA 634
+
+Query:   167 SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA---ESSDVAQHPAVSVAGL 223
+             S  + P  F Q    +P   +PFP P + +     + S L    E  +  Q   +   G 
+Sbjct:   635 S--INPVSF-QSSAMVPSMELPFP-PHMQEEQHQRELSLLRKRLEELETTQRKQLEELGS 690
+
+Query:   224 EGD 226
+              G+
+Sbjct:   691 SGE 693
+
+ Score = 83 (34.3 bits), Expect = 6.7, P = 0.999
+ Identities = 31/119 (26%), Positives = 54/119 (45%)
+
+Query:    32 DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL 91
+             +  L     + +++  E+    +K K  G E  V +     ++ ++ + E  QR   R L
+Sbjct:   192 NVDLTKDSKRVEQLAREKVYLCQKLK--GLEAEVAELKAE-KENSEAQVENAQRIQVRQL 248
+
+Query:    92 RNRAAAQTSRERKR----LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146
+                 A   S E ++    L  E+LE E     +QN FL+ +L + E E N LS ++ +L
+Sbjct:   249 AEMQATVRSLEAEKQSANLRAERLEKELQSSSEQNTFLINKLHKAEREINTLSSKVKEL 307
+
+
+>sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF domain-containing protein
+            2 OS=Mus musculus GN=Gigyf2 PE=1 SV=2
+        Length = 1291
+
+ Score = 111 (44.1 bits), Expect = 0.072, Sum P(2) = 0.069
+ Identities = 67/271 (24%), Positives = 111/271 (40%)
+
+Query:    13 DSLP--ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL 70
+             DSLP      +E  + T   +   L+   V+ + + PEE++   +    G+E     ++ 
+Sbjct:   284 DSLPEWCLEDAEEEMGTFDSSGAFLSLKKVQKEPI-PEEQEMDFRPVEEGEERS--DSDS 340
+
+Query:    71 PPRKRAKTEDEKEQRRIERVLRNRAAA-----QTSRERKR--LEMEKLENEKIQMEQQNQ 123
+                + AK  D+  +R  E+  R  A A     QTS    R     +    E  Q E++++
+Sbjct:   341 SHNEEAKEPDKTNRREGEKTDRAGAEASEEVPQTSLSSARPGTPSDHQPQEATQFERKDE 400
+
+Query:   124 FLLQRLSQMEAEN---NRLSQQLAQLAAEV--RGSRANTPMPGSPATASPTL--TPTLFK 176
+                +++ + E EN   N LS ++     E      + +TP+P  P TASP L  +P +  
+Sbjct:   401 PKAEQVEKAEEENRSENSLSAKVPSRGDETVPASQQPSTPLP--PDTASPLLILSPPVPT 458
+
+Query:   177 QERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLG 236
+                   P+E      P +S  S   +P        + Q     VA L+   SAL    L 
+Sbjct:   459 PSSASRPVETAAVEAPGMSSVST--EPDDEEGLKHLEQQAEKMVAYLQD--SALDDERLT 514
+
+Query:   237 SDLKHHSTDDVAAPLSDDDFNRLFHGDSSVE 267
+             S L+ H    V+ PL  +   + ++ D   E
+Sbjct:   515 SKLQEHRAKGVSIPLMHEAMQKWYYKDPQGE 545
+
+ Score = 111 (44.1 bits), Expect = 0.091, Sum P(3) = 0.087
+ Identities = 40/140 (28%), Positives = 72/140 (51%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             EE++  ++ +   +EL + K      K A+ E+E+ QRR+E    NR   +    R R E
+Sbjct:   825 EERRREEEERRKQEEL-LRKQEEEAAKWAR-EEEEAQRRLEE---NRLRMEEEAARLRHE 879
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEA----ENNRLSQQLAQL---AAEVRGSRANTPMP 160
+              E+ + +++++++Q   + QR  Q EA    +  +  QQLAQ+   ++   G ++NT   
+Sbjct:   880 EEERKRKELELQRQKDLMRQRQQQQEALRRLQQQQQQQQLAQMKLPSSSTWGQQSNTATC 939
+
+Query:   161 GSPATASPTLTPTLFKQERD 180
+              S AT S      L ++ER+
+Sbjct:   940 QSQATLSLAEIQKL-EEERE 958
+
+ Score = 39 (18.8 bits), Expect = 0.091, Sum P(3) = 0.087
+ Identities = 13/39 (33%), Positives = 20/39 (51%)
+
+Query:    10 SSVDSLPATPASEVPVLTVSPADTSLNSAD--VKTQEVK 46
+             S   S P  P +  P+L +SP   + +SA   V+T  V+
+Sbjct:   434 SQQPSTPLPPDTASPLLILSPPVPTPSSASRPVETAAVE 472
+
+ Score = 38 (18.4 bits), Expect = 0.072, Sum P(2) = 0.069
+ Identities = 7/20 (35%), Positives = 12/20 (60%)
+
+Query:   246 DVAAPLSDDDFNRLFHGDSS 265
+             +V +P    D+ R + GD+S
+Sbjct:  1169 EVESPYEVHDYTRAYLGDTS 1188
+
+
+>sp|Q8X229|FCR3_CANAL Fluconazole resistance protein 3 OS=Candida albicans
+            GN=FCR3 PE=3 SV=1
+        Length = 399
+
+ Score = 98 (39.6 bits), Expect = 0.072, P = 0.069
+ Identities = 21/62 (33%), Positives = 40/62 (64%)
+
+Query:    75 RAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134
+             R  +E  +E+ +++R  +NRAA +  RERK  ++++LE + +  E++ Q LL  L Q++ 
+Sbjct:   202 RDDSELTEEELQMKRKAQNRAAQRAFRERKESKLKELEAKLLASEEERQKLLDELEQIKK 261
+
+Query:   135 EN 136
+             +N
+Sbjct:   262 QN 263
+
+
+>sp|P26041|MOES_MOUSE Moesin OS=Mus musculus GN=Msn PE=1 SV=3
+        Length = 577
+
+ Score = 100 (40.3 bits), Expect = 0.072, P = 0.070
+ Identities = 25/103 (24%), Positives = 51/103 (49%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTNLPPR-KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             EKK  +  +   +++   K  L  + K+ + + +K Q+ +E   R     +  R+R + E
+Sbjct:   326 EKKKRELAEKEKEKIEREKEELMEKLKQIEEQTKKAQQELEEQTRRALELEQERKRAQSE 385
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150
+              EKL  E+ + E+  + LLQ     +    +L+ ++A+L A +
+Sbjct:   386 AEKLAKERQEAEEAKEALLQASRDQKKTQEQLASEMAELTARI 428
+
+ Score = 95 (38.5 bits), Expect = 0.26, P = 0.23
+ Identities = 23/80 (28%), Positives = 45/80 (56%)
+
+Query:    66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125
+             P T    + +A+  +EK Q+++ER L          E+K+ E+ + E EKI+ E++   L
+Sbjct:   297 PDTIEVQQMKAQAREEKHQKQMERAL-------LENEKKKRELAEKEKEKIEREKEE--L 347
+
+Query:   126 LQRLSQMEAENNRLSQQLAQ 145
+             +++L Q+E +  +  Q+L +
+Sbjct:   348 MEKLKQIEEQTKKAQQELEE 367
+
+
+>sp|Q9TW28|MYOM_DICDI Myosin-M heavy chain OS=Dictyostelium discoideum GN=myoM
+            PE=1 SV=1
+        Length = 1737
+
+ Score = 105 (42.0 bits), Expect = 0.074, P = 0.072
+ Identities = 57/223 (25%), Positives = 92/223 (41%)
+
+Query:    55 KRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL-RNRAAAQTSRERKRLEMEKLEN 113
+             KRK   ++  + +      +R K E E+++R  E+ L R R   +   ER+R E EK E 
+Sbjct:   941 KRKEEERKKELERQRKEEEERQK-ELERQRREEEKELERKRKEEERELERQRKEEEK-EQ 998
+
+Query:   114 EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA---TASPTL 170
+             E+ + E++ +   ++  + E E  R  ++  +   E   S  +  +  SP+   T + T 
+Sbjct:   999 ERKRKEEEKEQERKKKEEKEIEKKRKEEEKKKKKNEQNLSLPSLDITNSPSLINTTTTTT 1058
+
+Query:   171 TPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSAL 230
+             T T         PL     P PS         PS+ + SS     P+     L    S  
+Sbjct:  1059 TTTTTTTNTSSPPLSPPISPRPST--------PSSTSSSSSTTSSPSTKKQLLFKFNSIS 1110
+
+Query:   231 PLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSV--EPDSS 271
+              L  L   L H S+        D++ N   +GDS++    DSS
+Sbjct:  1111 NL--LSKSL-HGSSHSDKNSKEDNNSNNNNNGDSTIILSSDSS 1150
+
+ Score = 101 (40.6 bits), Expect = 0.20, P = 0.18
+ Identities = 46/164 (28%), Positives = 75/164 (45%)
+
+Query:    46 KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL-RNRAAAQTSRERK 104
+             K EE+K   +R+   +E    +     R+  K E E++++  ER L R R   +  +ERK
+Sbjct:   943 KEEERKKELERQRKEEEERQKELERQRREEEK-ELERKRKEEERELERQRKEEEKEQERK 1001
+
+Query:   105 RLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA 164
+             R E EK E E+ + E++   + ++  + E +  +  Q L+  + ++     N+P   +  
+Sbjct:  1002 RKEEEK-EQERKKKEEKE--IEKKRKEEEKKKKKNEQNLSLPSLDI----TNSPSLINTT 1054
+
+Query:   165 TASPTLTPTLFKQERDELPLERIPFP-TPSL--SDYSPTLKPST 205
+             T + T T T        L     P P TPS   S  S T  PST
+Sbjct:  1055 TTTTTTTTTTTNTSSPPLSPPISPRPSTPSSTSSSSSTTSSPST 1098
+
+
+>sp|Q9NZ53|PDXL2_HUMAN Podocalyxin-like protein 2 OS=Homo sapiens GN=PODXL2
+            PE=1 SV=1
+        Length = 605
+
+ Score = 100 (40.3 bits), Expect = 0.077, P = 0.074
+ Identities = 68/283 (24%), Positives = 109/283 (38%)
+
+Query:    32 DTSLNSADVKTQEVKPE--EKKPAKKRKSWGQELP-----VPKTNL--PPRKRAKTEDEK 82
+             D+SL+        V P+  EK  + +  S  QELP     +PK NL  PP      E+E+
+Sbjct:   107 DSSLDLGPT-ADYVFPDLTEKAGSIEDTSQAQELPNLPSPLPKMNLVEPPWHMPPREEEE 165
+
+Query:    83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ-NQFLLQRLSQMEAENNRLSQ 141
+             E+   E   R +   +   E +  E+  +   + + + Q   F L   SQ         +
+Sbjct:   166 EEEEEEE--REKEEVEKQEEEEEEELLPVNGSQEEAKPQVRDFSLTSSSQTPGATKSRHE 223
+
+Query:   142 QLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFK---QERDELPLERIPFPTPSLSDYS 198
+                  A+   G    + M   P+   P++TPT      Q+      E    P   L    
+Sbjct:   224 DSGDQASS--GVEVESSM--GPSLLLPSVTPTTVTPGDQDSTSQEAEATVLPAAGLG--- 276
+
+Query:   199 PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD---LGSDLKHHSTDDVAAPLSDDD 255
+               ++     E+S+ A   A  ++G   +  ALP F      S  +H   D + +  S   
+Sbjct:   277 --VEFEAPQEASEEATAGAAGLSGQHEEVPALPSFPQTTAPSGAEHPDEDPLGSRTSAS- 333
+
+Query:   256 FNRLFHGDSSVEPDSSVF-EDGLAFDVLEGGDLSA---FPFDS 294
+              + L  GD  + P S+   ++ L   +LEG    A    P+DS
+Sbjct:   334 -SPLAPGDMELTPSSATLGQEDLNQQLLEGQAAEAQSRIPWDS 375
+
+
+>sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-binding protein 5 OS=Homo
+            sapiens GN=CREB5 PE=1 SV=2
+        Length = 508
+
+ Score = 99 (39.9 bits), Expect = 0.078, P = 0.075
+ Identities = 28/92 (30%), Positives = 49/92 (53%)
+
+Query:    52 PAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKL 111
+             PA ++    Q +  P+     R+R   ED  E+RR + + RNRAAA   R+++++ +  L
+Sbjct:   345 PATQQMQPTQTIQPPQPTGGRRRRVVDEDPDERRR-KFLERNRAAATRCRQKRKVWVMSL 403
+
+Query:   112 ENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL 143
+             E +  ++ Q N  L   +S ++ E  +L Q L
+Sbjct:   404 EKKAEELTQTNMQLQNEVSMLKNEVAQLKQLL 435
+
+
+>sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor TFIID subunit 3 OS=Mus
+            musculus GN=Taf3 PE=1 SV=2
+        Length = 932
+
+ Score = 102 (41.0 bits), Expect = 0.079, P = 0.076
+ Identities = 55/202 (27%), Positives = 87/202 (43%)
+
+Query:    14 SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73
+             +LP    S V V  + PA + +    +  ++ KP+EK+  K +K                
+Sbjct:   664 ALPLFSPSAVRVPAMLPAFSPMLPEKLFEEKEKPKEKERKKDKKE--------------- 708
+
+Query:    74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ---QNQFLLQRLS 130
+             K+ K E EKE+ + ER    R   +  RE++  E EK ++EKI++E        ++ RL+
+Sbjct:   709 KKKKKEKEKEKEKKER---EREKERREREKREKEKEKHKHEKIKVEPVIPAPSPVIPRLT 765
+
+Query:   131 -QMEAENNRLSQQLAQLAAEVRGS----RANTPMPGS---PATASPT-LTPTLFKQERDE 181
+              ++ A  +++       A E + +    R  TP P     P   SPT L P L  Q    
+Sbjct:   766 LRVGAGQDKIVISKVVPAPEAKPAPSLNRPKTPPPAPVPIPVRVSPTPLQPPLLTQAA-V 824
+
+Query:   182 LPLERIPFPTPSLSDYSPTLKP 203
+              P   +P P P+LS       P
+Sbjct:   825 CPA-LMPSPAPALSGIGSAKAP 845
+
+ Score = 80 (33.2 bits), Expect = 4.4, Sum P(2) = 0.99
+ Identities = 38/160 (23%), Positives = 76/160 (47%)
+
+Query:    72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+             P+++ + +D+KE+++ +   + +   +  RE++R E EK E EK +  +  +  ++ +  
+Sbjct:   697 PKEKERKKDKKEKKKKKEKEKEKEKKEREREKERREREKREKEK-EKHKHEKIKVEPV-- 753
+
+Query:   132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPT 191
+             + A +  + +   ++ A       +  +P   A  +P+L        R + P    P P 
+Sbjct:   754 IPAPSPVIPRLTLRVGAGQDKIVISKVVPAPEAKPAPSLN-------RPKTPP---PAPV 803
+
+Query:   192 PSLSDYSPT-LKPSTLAESSDV-AQHPAVSVAGLEGDGSA 229
+             P     SPT L+P  L +++   A  P+ + A L G GSA
+Sbjct:   804 PIPVRVSPTPLQPPLLTQAAVCPALMPSPAPA-LSGIGSA 842
+
+ Score = 50 (22.7 bits), Expect = 4.4, Sum P(2) = 0.99
+ Identities = 21/87 (24%), Positives = 40/87 (45%)
+
+Query:     4 DMEKTMSSVDSLPATPASEVPVLTVSPADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQE 62
+             +M  T   + S   +P +  P+         L +S DVK +++K E K   KK++     
+Sbjct:   485 NMPPTFPYISSPSISPPTPEPLHKGYEEKAKLPSSVDVK-KKLKKELKTKLKKKEKQRDR 543
+
+Query:    63 LPVPKTNLPPRKRAKTEDEKEQRRIER 89
+                 + N   ++R+K +D+  +R  E+
+Sbjct:   544 ERERERN---KERSKEKDKMREREKEK 567
+
+ Score = 48 (22.0 bits), Expect = 7.0, Sum P(2) = 0.9991
+ Identities = 20/59 (33%), Positives = 27/59 (45%)
+
+Query:    17 ATPASEVPVLTVSP-ADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRK 74
+             A P+ + P+L  +P A + L  A  K  E K    K   K  S GQ+   PK  L P +
+Sbjct:   240 APPSPQPPML--APFAKSQLPIA--KPLETKSFTPKTKTKASSPGQKTKSPKAALSPAR 294
+
+
+>sp|A0LE19|IF2_MAGSM Translation initiation factor IF-2 OS=Magnetococcus sp.
+            (strain MC-1) GN=infB PE=3 SV=1
+        Length = 949
+
+ Score = 102 (41.0 bits), Expect = 0.080, P = 0.077
+ Identities = 34/144 (23%), Positives = 63/144 (43%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER-VLRNRAAAQT 99
+             K +E+  EEKK A K    G+E  + +   P    AK ++ + +R+ E    R +A  + 
+Sbjct:    70 KPEEI--EEKKEAPKSPKRGEERHILRPLTPEEIEAKQKELEAKRQAEEEAARQKAEQEA 127
+
+Query:   100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM 159
+             +R+++  E  + + E+ +  +Q Q       + EA   +  ++ A+ AA    +    P 
+Sbjct:   128 ARQKQEAEAARRKAEQ-EAARQKQ-------EAEAARRKAEEEAARAAAAAPAAPVAAPA 179
+
+Query:   160 PGSPATASPTLTPTLFKQERDELP 183
+               +PA       P +  Q   E P
+Sbjct:   180 EAAPAVPVAVAEPVVVAQPAPEAP 203
+
+
+>sp|Q869E1|DNLI1_DICDI DNA ligase 1 OS=Dictyostelium discoideum GN=lig1 PE=3
+            SV=1
+        Length = 1192
+
+ Score = 103 (41.3 bits), Expect = 0.081, P = 0.078
+ Identities = 45/187 (24%), Positives = 84/187 (44%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTN-LPPR-KRAKTEDEKEQRRIERVLRNRAAAQ 98
+             K +E K +++K  K+++   +EL   K   L  + K  K +++KE+   E+  + +   +
+Sbjct:   246 KEKEEKDKKEKELKEKELKEKELKDKKEKELKEKEKELKDKEKKEKELKEKEKKEKEEKE 305
+
+Query:    99 TSR-ERKRLEM-EKLENEKIQMEQQNQFLLQR-LSQMEAENNRL-SQQLAQLAAEVRGSR 154
+               + E+K  E+ EK E EK + E + + L ++ L + E +   L S +   +       R
+Sbjct:   306 KEKKEKKEKELKEKEEKEKKEKELKEKELKEKELKEKELKEKELTSPKKETIDISDLFKR 365
+
+Query:   155 ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQ 214
+             AN     S  T++   + T  KQ+ D  P      P+P L     T   +T   +S    
+Sbjct:   366 ANAEAKSSVPTSTSKNSKTNKKQKVDHKPTATTKKPSPVLEAKQSTTTTTTTTTTSTATT 425
+
+Query:   215 HPAVSVA 221
+               + S++
+Sbjct:   426 ISSKSIS 432
+
+ Score = 88 (36.0 bits), Expect = 3.5, P = 0.97
+ Identities = 44/189 (23%), Positives = 82/189 (43%)
+
+Query:    32 DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL 91
+             +  L   + K +E K +EKK  +++    +EL   K      K  K + EKE +  E+ L
+Sbjct:   227 EKELKEKESKEKEKKEKEKKEKEEKDKKEKEL---KEKELKEKELKDKKEKELKEKEKEL 283
+
+Query:    92 RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+             +++   +   + K  + EK E EK + E++ + L ++  + + E     ++L +   E++
+Sbjct:   284 KDKEKKEKELKEKE-KKEKEEKEKEKKEKKEKELKEKEEKEKKEKELKEKELKE--KELK 340
+
+Query:   152 GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS--------DYSPTL-- 201
+                       SP   +  ++  LFK+   E     +P  T   S        D+ PT   
+Sbjct:   341 EKELKEKELTSPKKETIDISD-LFKRANAEAK-SSVPTSTSKNSKTNKKQKVDHKPTATT 398
+
+Query:   202 -KPSTLAES 209
+              KPS + E+
+Sbjct:   399 KKPSPVLEA 407
+
+
+>sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+        Length = 1549
+
+ Score = 104 (41.7 bits), Expect = 0.085, P = 0.081
+ Identities = 29/104 (27%), Positives = 53/104 (50%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             E+++  ++RK   +EL   +  L   K+   ED ++++ +E+V   R   Q  RE++R E
+Sbjct:   736 EKRRQVRERKYLEEELQQEEDRLQREKQLLREDREKRQYLEKVELQREEEQLQREKRRQE 795
+
+Query:   108 MEKL--ENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149
+              E+   E E ++ E++     Q+L + E E  R  +   QL  E
+Sbjct:   796 RERQYREEELLREEERLHRKEQQLQREECEKRRRQELERQLEEE 839
+
+ Score = 97 (39.2 bits), Expect = 0.49, P = 0.39
+ Identities = 33/130 (25%), Positives = 64/130 (49%)
+
+Query:    30 PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQR---- 85
+             P D  L    +K QE++   ++   + K   +E  + +     ++    E+E +QR    
+Sbjct:   122 PQDRQLEERRLKRQELEELAEEEELREKQVRREQRLQRRE---QEEYGGEEELQQRPKGR 178
+
+Query:    86 RIERVLRN--RAAAQTSRERKRLEMEKLENEKIQM-EQQNQFLLQRLSQMEAENNRLSQQ 142
+              +E +L    R   Q  RER+RL++E+ + ++ ++ E+Q +  LQ+    E +  RL ++
+Sbjct:   179 ELEELLNREQRFERQEQRERQRLQVEQQQRQRGELRERQEEVQLQKRETQELQRERLEEE 238
+
+Query:   143 LAQLAAEVRG 152
+               QL  + RG
+Sbjct:   239 -QQLQKQKRG 247
+
+ Score = 96 (38.9 bits), Expect = 0.63, P = 0.47
+ Identities = 28/115 (24%), Positives = 61/115 (53%)
+
+Query:    35 LNSADVKTQEVKPEEKKPAKKRKSWGQELPV-PKTNLPPRKRAKTEDEKEQRRIERV-LR 92
+             L   + + Q  + E+++  ++ K + +++ +  +  L   +R K   E+E++ +E+V LR
+Sbjct:   428 LQREEEQLQREEREKRRRQEREKQYLEKVELWEEEQLQREEREKRRQEREKQYLEKVELR 487
+
+Query:    93 NRAAAQTS-RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146
+                  Q   RE++R E E+   EK++++++ Q  LQR  + +    R  Q L ++
+Sbjct:   488 EEEQLQRQEREKRRQERERQYLEKVELQEEEQ--LQREEREKRRQERERQYLEKV 540
+
+ Score = 94 (38.1 bits), Expect = 1.0, P = 0.65
+ Identities = 26/101 (25%), Positives = 55/101 (54%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTN-LPPRKRAKTEDEKEQRRIERV-LRNRAAAQTS-RERKR 105
+             EK+  ++ + + +++ + +   L   +R K   E+E++ +E+V L+     Q   RE++R
+Sbjct:   498 EKRRQERERQYLEKVELQEEEQLQREEREKRRQERERQYLEKVELQEEEQLQRQEREKRR 557
+
+Query:   106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146
+              E EK   EK++++++ Q  LQR  + +    R  Q L ++
+Sbjct:   558 QEREKQYLEKVELQEEEQ--LQRQERQKRRQEREKQYLEKV 596
+
+ Score = 93 (37.8 bits), Expect = 1.3, P = 0.74
+ Identities = 26/101 (25%), Positives = 56/101 (55%)
+
+Query:    49 EKKPAKKRKSWGQELPV-PKTNLPPRKRAKTEDEKEQRRIERV-LRNRAAAQTS-RERKR 105
+             EK+  ++ K + +++ +  +  L  ++R K   E+E++ +E+V L+     Q   RE++R
+Sbjct:   470 EKRRQEREKQYLEKVELREEEQLQRQEREKRRQERERQYLEKVELQEEEQLQREEREKRR 529
+
+Query:   106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146
+              E E+   EK++++++ Q  LQR  + +    R  Q L ++
+Sbjct:   530 QERERQYLEKVELQEEEQ--LQRQEREKRRQEREKQYLEKV 568
+
+ Score = 91 (37.1 bits), Expect = 2.2, P = 0.89
+ Identities = 25/109 (22%), Positives = 56/109 (51%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTN-LPPRKRAKTEDEKEQRRIERV-LRNRAAAQTS-RERKR 105
+             EK+  ++ + + +++ + +   L  ++R K   E+E++ +E+V L+     Q   R+++R
+Sbjct:   526 EKRRQERERQYLEKVELQEEEQLQRQEREKRRQEREKQYLEKVELQEEEQLQRQERQKRR 585
+
+Query:   106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+              E EK   EK++++++ Q   Q   +   E  R   +  +L  E +  R
+Sbjct:   586 QEREKQYLEKVELQEEEQLQRQEREKRRQERERQYLEKVELQEEEQVQR 634
+
+ Score = 89 (36.4 bits), Expect = 3.7, P = 0.97
+ Identities = 25/81 (30%), Positives = 42/81 (51%)
+
+Query:    75 RAKTEDEKEQRRIERVLRNRAAAQTSRERK-RLEMEKLENEKIQMEQQNQFLLQRLSQME 133
+             R + E+E ++RR     +     Q   E + RL+ EKL+ EK + E++ Q+   R  +++
+Sbjct:   366 RWQLEEESQRRRYTLYAKPAQREQVREEEQLRLKEEKLQREKRRQERERQY---REVELQ 422
+
+Query:   134 AENNRLSQQLAQLAAEVRGSR 154
+              E  RL ++  QL  E R  R
+Sbjct:   423 REEERLQREEEQLQREEREKR 443
+
+ Score = 89 (36.4 bits), Expect = 3.7, P = 0.97
+ Identities = 23/93 (24%), Positives = 50/93 (53%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTN-LPPRKRAKTEDEKEQRRIERV-LRNRAAAQTS-RERKR 105
+             EK+  ++ K + +++ + +   L  ++R K   E+E++ +E+V L+     Q   RE++R
+Sbjct:   554 EKRRQEREKQYLEKVELQEEEQLQRQERQKRRQEREKQYLEKVELQEEEQLQRQEREKRR 613
+
+Query:   106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR 138
+              E E+   EK++++++ Q   Q   +   E  R
+Sbjct:   614 QERERQYLEKVELQEEEQVQRQEREKRRQERER 646
+
+ Score = 89 (36.4 bits), Expect = 3.7, P = 0.97
+ Identities = 30/114 (26%), Positives = 59/114 (51%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+             + Q  + E+++  ++R+   +EL   +  L   ++   E E+E+RR ER  R        
+Sbjct:   631 QVQRQEREKRRQERERQYLEKELQRQEERLQEEEQLLRE-EREKRRQERE-RQYLEKVEL 688
+
+Query:   101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+             +E ++L+ E  E EK + E++ Q+L +   +++ +  RL ++  QL  E R  R
+Sbjct:   689 QEEEQLQRE--EREKRRQERERQYLEKE--ELQRQEERLQREKEQLQREDREKR 738
+
+ Score = 88 (36.0 bits), Expect = 4.7, P = 0.991
+ Identities = 28/117 (23%), Positives = 62/117 (52%)
+
+Query:    40 VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER---VLRNRAA 96
+             ++ +E++ +E++  ++++   +E    +  +  RK  + E ++E+ R++R   +LR    
+Sbjct:   711 LEKEELQRQEERLQREKEQLQREDREKRRQVRERKYLEEELQQEEDRLQREKQLLREDRE 770
+
+Query:    97 AQTSRERKRL--EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+              +   E+  L  E E+L+ EK + E++ Q+  + L + E   +R  QQL +   E R
+Sbjct:   771 KRQYLEKVELQREEEQLQREKRRQERERQYREEELLREEERLHRKEQQLQREECEKR 827
+
+ Score = 88 (36.0 bits), Expect = 4.7, P = 0.991
+ Identities = 29/125 (23%), Positives = 62/125 (49%)
+
+Query:    32 DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL 91
+             +  L   + + QE +   ++  +KR+   +   + K  L   ++ + E E+E+RR ER  
+Sbjct:   650 EKELQRQEERLQEEEQLLREEREKRRQERERQYLEKVELQEEEQLQRE-EREKRRQERER 708
+
+Query:    92 RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL--SQMEAENNRLSQQLAQLAAE 149
+             +     +  R+ +RL+ EK + ++   E++ Q   ++    +++ E +RL ++  QL  E
+Sbjct:   709 QYLEKEELQRQEERLQREKEQLQREDREKRRQVRERKYLEEELQQEEDRLQRE-KQLLRE 767
+
+Query:   150 VRGSR 154
+              R  R
+Sbjct:   768 DREKR 772
+
+ Score = 87 (35.7 bits), Expect = 6.1, P = 0.998
+ Identities = 31/111 (27%), Positives = 57/111 (51%)
+
+Query:    40 VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 99
+             V+ QE +  +++  +KR+   +   + K  L   ++ + + E+E+RR ER  R     + 
+Sbjct:   596 VELQEEEQLQRQEREKRRQERERQYLEKVELQEEEQVQRQ-EREKRRQERE-RQYLEKEL 653
+
+Query:   100 SRERKRL-EMEKL---ENEKIQMEQQNQFL----LQRLSQMEAENNRLSQQ 142
+              R+ +RL E E+L   E EK + E++ Q+L    LQ   Q++ E     +Q
+Sbjct:   654 QRQEERLQEEEQLLREEREKRRQERERQYLEKVELQEEEQLQREEREKRRQ 704
+
+ Score = 87 (35.7 bits), Expect = 6.1, P = 0.998
+ Identities = 29/115 (25%), Positives = 59/115 (51%)
+
+Query:    40 VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 99
+             V+ QE +  +++  +KR+   ++  + K  L   ++ + + E+E+RR ER  +     + 
+Sbjct:   568 VELQEEEQLQRQERQKRRQEREKQYLEKVELQEEEQLQRQ-EREKRRQERERQYLEKVEL 626
+
+Query:   100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+               E    ++++ E EK + E++ Q+L + L + E    RL ++  QL  E R  R
+Sbjct:   627 QEEE---QVQRQEREKRRQERERQYLEKELQRQE---ERLQEE-EQLLREEREKR 674
+
+
+>sp|O70191|ATF5_MOUSE Cyclic AMP-dependent transcription factor ATF-5 OS=Mus
+            musculus GN=Atf5 PE=1 SV=2
+        Length = 283
+
+ Score = 95 (38.5 bits), Expect = 0.088, P = 0.085
+ Identities = 30/93 (32%), Positives = 48/93 (51%)
+
+Query:    63 LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN 122
+             LP P    P    A T  +++Q++ ++   N++AA   R+RKR E E LE E   +E +N
+Sbjct:   192 LPSPARPAPYPSPASTRGDRKQKKRDQ---NKSAALRYRQRKRAEGEALEGECQGLEARN 248
+
+Query:   123 QFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA 155
+             + L +R   +E E     Q +  L  EV  +R+
+Sbjct:   249 RELRERAESVERE----IQYVKDLLIEVYKARS 277
+
+
+>sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS=Arabidopsis thaliana GN=TGA6
+            PE=1 SV=2
+        Length = 330
+
+ Score = 96 (38.9 bits), Expect = 0.089, P = 0.085
+ Identities = 20/55 (36%), Positives = 38/55 (69%)
+
+Query:    77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+             +++D+ +Q+ + R+ +NR AA+ SR RK+  +++LEN ++++ Q  Q L QR  Q
+Sbjct:    38 RSKDKLDQKTLRRLAQNREAARKSRLRKKAYVQQLENSRLKLTQLEQEL-QRARQ 91
+
+
+>sp|Q68EL6|NFIL3_DANRE Nuclear factor interleukin-3-regulated protein OS=Danio
+            rerio GN=nfil3 PE=2 SV=1
+        Length = 462
+
+ Score = 98 (39.6 bits), Expect = 0.089, P = 0.085
+ Identities = 42/152 (27%), Positives = 70/152 (46%)
+
+Query:    73 RKRAKTEDEKEQRRI-ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+             RKR    DEK+     ER  +N  AA+ SRE++RL    LEN+ + + ++N  L   L  
+Sbjct:    52 RKREFIPDEKKDNLYWERRRKNNEAAKRSREKRRLNDMVLENKLMALGEENASLKAELLS 111
+
+Query:   132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER-DELPLERIPFP 190
+             ++     +S   A  A EV+    +T      A     ++P+  K     +L   R+   
+Sbjct:   112 LKLRFGLVSS--AAYAQEVQNISTSTA-----ALYQDFMSPSATKDSYPSDLEPTRLTSS 164
+
+Query:   191 TPSLSDYSPTLKPSTLAESSDVAQ-HPAVSVA 221
+               S+  +SP    S  ++SS V Q  P ++++
+Sbjct:   165 CISVIKHSPHSALSDGSDSSTVTQGSPLINIS 196
+
+
+>sp|Q55FW7|GLE1_DICDI Nucleoporin GLE1 OS=Dictyostelium discoideum GN=gle1 PE=3
+            SV=1
+        Length = 837
+
+ Score = 101 (40.6 bits), Expect = 0.089, P = 0.086
+ Identities = 30/107 (28%), Positives = 55/107 (51%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKT--NLPPRKRAKTEDEKEQRRI-ERVLRNRAAAQT 99
+             QE K +++K  K+ K   Q+    +    L   K  K + EKEQ++  E+ L+       
+Sbjct:   390 QEQKEKQEKLEKEEKEKEQQEQQKQLLIKLAKEKEEKEKFEKEQQQQKEKELQKEKELLQ 449
+
+Query:   100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146
+              +E+++ E EKL+ ++ Q +QQ Q   Q+L Q + + N+ +  L  +
+Sbjct:   450 QKEKEK-EKEKLQQQQQQQQQQQQQQQQQLQQQQQQQNQQNNNLGYI 495
+
+ Score = 89 (36.4 bits), Expect = 1.8, P = 0.84
+ Identities = 26/98 (26%), Positives = 52/98 (53%)
+
+Query:    48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             E+KK  +K++   QE    +  L      K E EKEQ+  ++ L  + A +   E+++ E
+Sbjct:   377 EQKKREEKQRQLQQEQKEKQEKLE-----KEEKEKEQQEQQKQLLIKLAKE-KEEKEKFE 430
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQ 145
+              E+ + ++ +++++ + L Q+  + E E  +L QQ  Q
+Sbjct:   431 KEQQQQKEKELQKEKELLQQK--EKEKEKEKLQQQQQQ 466
+
+
+>sp|Q3TLH4|BA2L2_MOUSE Protein BAT2-like 2 OS=Mus musculus GN=Bat2l2 PE=1 SV=2
+        Length = 2828
+
+ Score = 89 (36.4 bits), Expect = 0.096, Sum P(2) = 0.092
+ Identities = 30/106 (28%), Positives = 54/106 (50%)
+
+Query:    43 QEVKPEEKKPA---KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 99
+             +E + EE++ A   +K K   ++L + +    P +  + E EKE+   ER L      + 
+Sbjct:   468 EERRMEEQRKAACAEKLKQLDEKLGIIEKQPSPEELREREREKER---ERELEKEKEREL 524
+
+Query:   100 SRER-KRLEMEKLENEKIQMEQQNQFL--LQRLSQMEAENNRLSQQ 142
+              +E+ K+ EME+   ++ ++EQQ +    LQRL + E E     Q+
+Sbjct:   525 EKEQEKQREMERARQQEKELEQQREKEQELQRLREQEKEGEPKEQE 570
+
+ Score = 70 (29.7 bits), Expect = 9.4, Sum P(2) = 0.99992
+ Identities = 33/143 (23%), Positives = 55/143 (38%)
+
+Query:     7 KTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66
+             K  SS D    TP S      V  A ++ +S+ + TQ   P  K P  K   + QE   P
+Sbjct:   345 KESSSEDQTAKTPESTENRKEVDEASSTKSSSQIPTQP--PVTKSPYGKGPPFNQERG-P 401
+
+Query:    67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL 126
+              ++LPP  +   +        +R +  R     S+       E  +  + Q  + +  + 
+Sbjct:   402 SSHLPPPPKLLAQQHPPPP--DRQIPGRQGPFPSKPPVPDNDEIWKQRRKQQSEISAAVE 459
+
+Query:   127 QRLSQMEAENNRLSQQLAQLAAE 149
+             +   + E E  R+ +Q     AE
+Sbjct:   460 RARKRREEEERRMEEQRKAACAE 482
+
+ Score = 67 (28.6 bits), Expect = 0.096, Sum P(2) = 0.092
+ Identities = 33/138 (23%), Positives = 52/138 (37%)
+
+Query:   140 SQQLAQLAAEVRGSRANTPMPGSPATASPTL-TPTL-FKQERDELPLERIP----FPTPS 193
+             S  +  LA+ +  +  ++P P   ATA P++ TP +        +PL         P P 
+Sbjct:  1816 SASIPILASALAPATVSSPTPVVSATAVPSISTPAVPASAPTASVPLAPASAASTVPPPG 1875
+
+Query:   194 LSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDD-VAAPLS 252
+             L    P   P T  ES+ +      +       G ++P       L     D  VAAP  
+Sbjct:  1876 LDSADPDPDPQTSPESTRLPSAQTSNGTDFVAAGKSMPTSQSHGSLTAELWDSKVAAPAV 1935
+
+Query:   253 DDDFNRLFHGDSSVEPDS 270
+              +D ++     S  +P S
+Sbjct:  1936 LNDISKKLGPISPPQPPS 1953
+
+ Score = 52 (23.4 bits), Expect = 3.0, Sum P(2) = 0.95
+ Identities = 15/53 (28%), Positives = 22/53 (41%)
+
+Query:   158 PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS 210
+             P+P S +   P  T +         P   +P PTP L+  S T+    L  +S
+Sbjct:  1768 PVPTSASAPVPASTSSPVTASSSSQP--SVPAPTPVLASASTTVSVPILTSAS 1818
+
+
+>sp|Q04323|UBXN1_HUMAN UBX domain-containing protein 1 OS=Homo sapiens GN=UBXN1
+            PE=1 SV=2
+        Length = 297
+
+ Score = 95 (38.5 bits), Expect = 0.096, P = 0.092
+ Identities = 35/146 (23%), Positives = 69/146 (47%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL-RNRAAAQTSRERKRLE 107
+             E KPA   +   QE       L  +K+ + E+ +E+  +ER   R R   + S  R+RL+
+Sbjct:    81 EGKPALSEEE-RQEQTKRMLELVAQKQREREEREEREALERERQRRRQGQELSAARQRLQ 139
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSP---- 163
+              +++       E++ +   + L+  +    ++ +  A+ A +  GS  + P P +P    
+Sbjct:   140 EDEMRRAA---EERRREKAEELAARQRVREKIERDKAERAKKYGGSVGSQPPPVAPEPGP 196
+
+Query:   164 ATASPTLTPTLFKQERDELPLE-RIP 188
+               +SP+  P   K+E D+  ++ R+P
+Sbjct:   197 VPSSPSQEPPT-KREYDQCRIQVRLP 221
+
+ Score = 77 (32.2 bits), Expect = 9.9, P = 0.99995
+ Identities = 44/142 (30%), Positives = 64/142 (45%)
+
+Query:    74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERK-RLEMEKLENEKIQMEQQNQFLL---QRL 129
+             K A +E+E+ Q + +R+L     AQ  RER+ R E E LE E+ Q  +Q Q L    QRL
+Sbjct:    83 KPALSEEER-QEQTKRMLE--LVAQKQREREEREEREALERER-QRRRQGQELSAARQRL 138
+
+Query:   130 SQME---AENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLER 186
+              + E   A   R  ++  +LAA     R    +    A  +     ++  Q     P+  
+Sbjct:   139 QEDEMRRAAEERRREKAEELAAR---QRVREKIERDKAERAKKYGGSVGSQPP---PVAP 192
+
+Query:   187 IPFPTPSLSDYSPTLKPSTLAE 208
+              P P PS    SP+ +P T  E
+Sbjct:   193 EPGPVPS----SPSQEPPTKRE 210
+
+
+>sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=Triticum aestivum PE=2
+            SV=1
+        Length = 349
+
+ Score = 96 (38.9 bits), Expect = 0.097, P = 0.092
+ Identities = 29/97 (29%), Positives = 49/97 (50%)
+
+Query:    59 WGQ--ELPVP--KTNLPPRK-RAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN 113
+             WG     PVP  +  +P    R +  DE+E ++ +R L NR +A+ SR RK+ E E+L  
+Sbjct:   223 WGATGSSPVPAMRGKVPSGSARGEQWDERELKKQKRKLSNRESARRSRLRKQAECEELGQ 282
+
+Query:   114 EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150
+                 ++ +N  L   L +++ E   L  +   L A++
+Sbjct:   283 RAEALKSENSSLRIELDRIKKEYEELLSKNTSLKAKL 319
+
+
+>sp|Q9C5Q2|AI5L3_ARATH ABSCISIC ACID-INSENSITIVE 5-like protein 3
+            OS=Arabidopsis thaliana GN=DPBF4 PE=1 SV=1
+        Length = 262
+
+ Score = 94 (38.1 bits), Expect = 0.099, P = 0.094
+ Identities = 23/65 (35%), Positives = 42/65 (64%)
+
+Query:    71 PPRKRAKTE--DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQR 128
+             P RKR   E  ++  +RR +R+++NR +A  SR RK+    +LE +  ++E++N+  L+R
+Sbjct:   176 PGRKRVAGEIVEKTVERRQKRMIKNRESAARSRARKQAYTHELEIKVSRLEEENE-KLRR 234
+
+Query:   129 LSQME 133
+             L ++E
+Sbjct:   235 LKEVE 239
+
+
+>sp|Q54TD7|DDX24_DICDI ATP-dependent RNA helicase ddx24 OS=Dictyostelium
+            discoideum GN=ddx24 PE=3 SV=1
+        Length = 940
+
+ Score = 101 (40.6 bits), Expect = 0.10, P = 0.097
+ Identities = 26/114 (22%), Positives = 60/114 (52%)
+
+Query:    32 DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQR-RIERV 90
+             D + N  + + +EVKP++K   +K++   Q+ P  +   P +K  K E +KE+  ++E  
+Sbjct:   168 DDNDNDFEDEEEEVKPQQKLQKQKQQEQKQKQPQKQPQQPNKKNNKKELQKEEEEQMEEE 227
+
+Query:    91 LRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR--LSQQ 142
+                    Q   E K ++ + ++ +K++ ++Q +   + ++++E    R  +S+Q
+Sbjct:   228 KEEEEVQQEEEEEKEIK-KPIKEKKVKTQKQIEAAKKNINKLEKIKKRKEISEQ 280
+
+
+>sp|Q5F797|IF2_NEIG1 Translation initiation factor IF-2 OS=Neisseria
+            gonorrhoeae (strain ATCC 700825 / FA 1090) GN=infB PE=3 SV=1
+        Length = 943
+
+ Score = 101 (40.6 bits), Expect = 0.10, P = 0.098
+ Identities = 43/162 (26%), Positives = 68/162 (41%)
+
+Query:    17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA 76
+             A PA++ P  T + A+T+  +A+ K  E K +  KP  +R   G++   P     P    
+Sbjct:   151 AKPAAQKP--TEAKAETAPVAAETKPAEPKEKAVKPKHERNGKGKDAKKPAKPAAPAVPQ 208
+
+Query:    77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136
+                  +EQ + +   R RAAA       R   E L  EK    Q+ Q   + + Q +AE 
+Sbjct:   209 PVVSAEEQAQRDEEAR-RAAAL------RAHQEALLKEK----QERQARREAMKQ-QAEQ 256
+
+Query:   137 NRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178
+                + Q A+   +     A  P   +PA  +  + P   K+E
+Sbjct:   257 QAKAAQEAKTGRQRPAKPAEKPQAAAPAVENKPVNPAKAKKE 298
+
+
+>sp|B4RMZ3|IF2_NEIG2 Translation initiation factor IF-2 OS=Neisseria
+            gonorrhoeae (strain NCCP11945) GN=infB PE=3 SV=1
+        Length = 943
+
+ Score = 101 (40.6 bits), Expect = 0.10, P = 0.098
+ Identities = 43/162 (26%), Positives = 68/162 (41%)
+
+Query:    17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA 76
+             A PA++ P  T + A+T+  +A+ K  E K +  KP  +R   G++   P     P    
+Sbjct:   151 AKPAAQKP--TEAKAETAPVAAETKPAEPKEKAVKPKHERNGKGKDAKKPAKPAAPAVPQ 208
+
+Query:    77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136
+                  +EQ + +   R RAAA       R   E L  EK    Q+ Q   + + Q +AE 
+Sbjct:   209 PVVSAEEQAQRDEEAR-RAAAL------RAHQEALLKEK----QERQARREAMKQ-QAEQ 256
+
+Query:   137 NRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178
+                + Q A+   +     A  P   +PA  +  + P   K+E
+Sbjct:   257 QAKAAQEAKTGRQRPAKPAEKPQAAAPAVENKPVNPAKAKKE 298
+
+
+>sp|Q86AH4|Y8592_DICDI Putative uncharacterized protein DDB_G0271982
+            OS=Dictyostelium discoideum GN=DDB_G0271982 PE=4 SV=1
+        Length = 629
+
+ Score = 99 (39.9 bits), Expect = 0.10, P = 0.099
+ Identities = 47/192 (24%), Positives = 80/192 (41%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+             K +E + E++K  +K K   +E    K     R+R +  + + +R  ER        +  
+Sbjct:   310 KEKEKEKEKEKEKEKEKEIEKEREKEKEREREREREREREREREREREREREREKEKEKE 369
+
+Query:   101 RERKRLEMEKLENEKIQMEQQNQFLLQRLS-QMEAENNRLSQQLAQLAAEVRGSRANTPM 159
+             RER+R E E+ E E+   E++ +F  +R   + E E  +L+    +    +R +  +  +
+Sbjct:   370 RERER-ERER-ERER---EREKEFEKERREREKEREREKLNITKDKEKQVIRETTIDETL 424
+
+Query:   160 PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS 219
+                     PT   T  K      P+     P PS++ YS +L PS     S  A     S
+Sbjct:   425 -NKETPHKPTPHITTKKSPNLTPPISSTASP-PSVTTYS-SLIPSIPTPQSAAATTTTPS 481
+
+Query:   220 VAGLEGDGSALP 231
+              A L    + +P
+Sbjct:   482 SATLTAVSATIP 493
+
+
+>sp|Q8IIG7|YPF05_PLAF7 Uncharacterized protein PF11_0207 OS=Plasmodium
+            falciparum (isolate 3D7) GN=PF11_0207 PE=4 SV=1
+        Length = 964
+
+ Score = 101 (40.6 bits), Expect = 0.11, P = 0.10
+ Identities = 33/134 (24%), Positives = 69/134 (51%)
+
+Query:    39 DVKTQEVKPEEKKPAKKRKSWGQELP--VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA 96
+             ++K +EVK E K+  ++ K   +E+   + +     ++  K E ++E + I+  L+N  +
+Sbjct:   616 EIK-EEVKEEIKEVKEEIKEVKEEIKEEIKEVKEEIKEEVKEEIKEEIKEIKEELKNDIS 674
+
+Query:    97 AQTSRERKRLEMEKLENEKIQMEQQNQFLLQR-LSQMEAENNRLSQQLAQLAAEVRGSRA 155
+             ++T++E K  E +K E EK +   +   + Q+ L + E  N +L +Q  +   E+R    
+Sbjct:   675 SETTKEEKNTEHKKEETEKKKFIPKRVIMYQQELKEKEERNLKLLEQQRK-EREMRLQLI 733
+
+Query:   156 NTPMPGSPATASPT 169
+              +   G+ +T  P+
+Sbjct:   734 RSKTQGTSSTFIPS 747
+
+
+>sp|B2KI97|THOC2_RHIFE THO complex subunit 2 OS=Rhinolophus ferrumequinum
+            GN=THOC2 PE=3 SV=1
+        Length = 1576
+
+ Score = 103 (41.3 bits), Expect = 0.11, P = 0.11
+ Identities = 49/188 (26%), Positives = 88/188 (46%)
+
+Query:    36 NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA 95
+             NS+   ++ VK  +K+  K+++   +E   P T   P  R   +D KE+ + ER  ++  
+Sbjct:  1257 NSSSNSSKTVKENDKEKGKEKEKEKKE-KTPATT--PEARILGKDGKEKPKEERPNKDEK 1313
+
+Query:    96 AAQTSRERKRLEMEK---LENEKIQMEQQNQFL--LQRLSQMEAENNRLSQQLAQLAAEV 150
+             A +T     + + EK    + EK++ E+    +  ++  S  E E  +   +   +A E+
+Sbjct:  1314 ARETKERTPKSDKEKEKFKKEEKVKDEKFKTTVPNVESKSTQEKEREKEPSRERDIAKEM 1373
+
+Query:   151 RGSRAN------TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS 204
+             + S+ N      TP+ GS    SP     + + ER++   +    P+PS   +S T+K S
+Sbjct:  1374 K-SKENVKGGEKTPVSGS--LKSPVPRSDIAEPEREQKRRKIDTHPSPS---HSSTVKDS 1427
+
+Query:   205 T--LAESS 210
+                L ESS
+Sbjct:  1428 LIELKESS 1435
+
+
+>sp|Q9UM54|MYO6_HUMAN Myosin-VI OS=Homo sapiens GN=MYO6 PE=1 SV=4
+        Length = 1294
+
+ Score = 102 (41.0 bits), Expect = 0.11, P = 0.11
+ Identities = 37/146 (25%), Positives = 69/146 (47%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102
+             +E++ E K+  +  K   +E    +  L    + K E+E+ ++R +   R +A  +    
+Sbjct:   931 EEMEKERKRREEDEKRRRKEEEERRMKLEMEAKRKQEEEERKKREDDEKRIQAEVEAQLA 990
+
+Query:   103 RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS 162
+             R++ E E  +   ++ E++++ L  R++Q EAE   L    AQ    +R S  + P+  +
+Sbjct:   991 RQK-EEESQQQAVLEQERRDRELALRIAQSEAE---LISDEAQADLALRRSLDSYPVSKN 1046
+
+Query:   163 PATASPTLTPTLFKQERDELPLERIP 188
+               T  P +TP    +E  E  L R P
+Sbjct:  1047 DGTR-PKMTPEQMAKEMSEF-LSRGP 1070
+
+ Score = 85 (35.0 bits), Expect = 8.2, P = 0.9997
+ Identities = 35/145 (24%), Positives = 69/145 (47%)
+
+Query:    11 SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL 70
+             S+D+L A   S +  +T        ++  VK+ E      +  K+++   + L   +  +
+Sbjct:   877 SIDTLMAKIKSTM--MTQEQIQKEYDAL-VKSSEELLSALQKKKQQEEEAERLRRIQEEM 933
+
+Query:    71 PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE--KIQMEQQNQFLLQR 128
+                ++ + EDEK +R+ E   R +   +  R+++  E +K E++  +IQ E + Q   Q+
+Sbjct:   934 EKERKRREEDEKRRRKEEEERRMKLEMEAKRKQEEEERKKREDDEKRIQAEVEAQLARQK 993
+
+Query:   129 L--SQMEA--ENNRLSQQLAQLAAE 149
+                SQ +A  E  R  ++LA   A+
+Sbjct:   994 EEESQQQAVLEQERRDRELALRIAQ 1018
+
+
+>sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing protein 1 OS=Homo sapiens
+            GN=MAP7D1 PE=1 SV=1
+        Length = 841
+
+ Score = 100 (40.3 bits), Expect = 0.12, P = 0.11
+ Identities = 53/211 (25%), Positives = 88/211 (41%)
+
+Query:    16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR 75
+             P TP+  +   T     T L  A+ + Q  +  E++  ++R    ++  + +  L     
+Sbjct:   583 PVTPSKPMAGTTDREEATRL-LAEKRRQAREQREREEQERRLQAERDKRMREEQLAREAE 641
+
+Query:    76 AKTEDEKE-QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134
+             A+ E E E +RR E+  R +A A+   E++RL+ +K E E    E+  +   QRL     
+Sbjct:   642 ARAEREAEARRREEQEAREKAQAE-QEEQERLQKQKEEAEARSREEAER---QRL----- 692
+
+Query:   135 ENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE-RIPFPTPS 193
+             E  +  QQ  Q   E R  R    M     T    ++ T  KQ+  E       P P  +
+Sbjct:   693 EREKHFQQQEQERQE-RRKRLEEIMK---RTRKSEVSETKQKQDSKEANANGSSPEPVKA 748
+
+Query:   194 LSDYSPTLKPSTLAESSDVAQHPAVSVAGLE 224
+             +   SP L+   + +   + Q P  S+   E
+Sbjct:   749 VEARSPGLQKEAVQKEEPIPQEPQWSLPSKE 779
+
+ Score = 87 (35.7 bits), Expect = 3.1, P = 0.95
+ Identities = 36/128 (28%), Positives = 51/128 (39%)
+
+Query:    16 PATPASEVPVLTVSPADTS-LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRK 74
+             PA P  E P    +P D + L S       V P +       +     L   K      +
+Sbjct:   555 PAPPQKEQPPAE-TPTDAAVLTSPPAPAPPVTPSKPMAGTTDREEATRLLAEKRRQAREQ 613
+
+Query:    75 RAKTEDEK------EQRRIERVLRNRAAAQTSRERKRLEMEKLE-NEKIQMEQQNQFLLQ 127
+             R + E E+      ++R  E  L   A A+  RE +    E+ E  EK Q EQ+ Q  LQ
+Sbjct:   614 REREEQERRLQAERDKRMREEQLAREAEARAEREAEARRREEQEAREKAQAEQEEQERLQ 673
+
+Query:   128 RLSQMEAE 135
+             +  + EAE
+Sbjct:   674 KQKE-EAE 680
+
+ Score = 83 (34.3 bits), Expect = 8.4, P = 0.9998
+ Identities = 34/136 (25%), Positives = 64/136 (47%)
+
+Query:    16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKP--AKKRKSWGQELP--VPKTNLP 71
+             P +P+ +V      P + S  S++ K++   P    P  A+  +   Q  P  VP ++ P
+Sbjct:    68 PESPSGQVGPRPAPPQEES-PSSEAKSRGPTPPAMGPRDARPPRRSSQPSPTAVPASDSP 126
+
+Query:    72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+             P K+ + +   E+ ++ +  R   A   +  +K + +EK E  K   E+Q Q   +RL +
+Sbjct:   127 PTKQ-EVKKAGERHKLAKERREERAKYLAA-KKAVWLEKEEKAKALREKQLQERRRRLEE 184
+
+Query:   132 --MEAENNRLSQQLAQ 145
+               ++AE  R + +  Q
+Sbjct:   185 QRLKAEQRRAALEERQ 200
+
+
+>sp|Q14244|MAP7_HUMAN Ensconsin OS=Homo sapiens GN=MAP7 PE=1 SV=1
+        Length = 749
+
+ Score = 98 (39.6 bits), Expect = 0.17, P = 0.15
+ Identities = 39/146 (26%), Positives = 67/146 (45%)
+
+Query:    14 SLPATPASEVPVLTVSPADTSLNSADVKTQE--VKPEE--KKPAKKRKSWGQELPVPKTN 69
+             S PA      P +  +P+ T   SA VKT      PEE  +  A+KR+   ++    K  
+Sbjct:   441 SAPAPAPVPTPAMVSAPSSTVNASASVKTSAGTTDPEEATRLLAEKRRLAREQRE--KEE 498
+
+Query:    70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129
+                R++ + E +K +   +RV   R   +   E +RLE E+   ++ Q+++Q +    R 
+Sbjct:   499 RERREQEELERQKREELAQRVAEERTTRR-EEESRRLEAEQAREKEEQLQRQAEERALR- 556
+
+Query:   130 SQMEAEN-NRLSQQLAQLAAEVRGSR 154
+              + EAE   R  ++ A++  E    R
+Sbjct:   557 EREEAERAQRQKEEEARVREEAERVR 582
+
+ Score = 92 (37.4 bits), Expect = 0.12, Sum P(2) = 0.11
+ Identities = 25/119 (21%), Positives = 57/119 (47%)
+
+Query:    75 RAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134
+             R + E E+ QR+ E   R R  A+  R+ +    ++ E E+++ +++ + +++R  + EA
+Sbjct:   556 REREEAERAQRQKEEEARVREEAERVRQEREKHFQREEQERLERKKRLEEIMKRTRRTEA 615
+
+Query:   135 ENNRLSQQL-AQLA-AEVRGSRANTPMP---GSPATASPTLTPTLFKQERDELPLERIP 188
+              + + S Q    +A   + G    + +P    +P    P  +P +    + ++ +E  P
+Sbjct:   616 TDKKTSDQRNGDIAKGALTGGTEVSALPCTTNAPGNGKPVGSPHVVTSHQSKVTVESTP 674
+
+ Score = 51 (23.0 bits), Expect = 0.12, Sum P(2) = 0.11
+ Identities = 22/70 (31%), Positives = 32/70 (45%)
+
+Query:    11 SVDSLPATP--ASEVPVLTVSPADTSL------NSADVKTQ-EVKPEEKKPAKKRKSWGQ 61
+             S+  LP TP   S +P  +V  A   +      N   VK + +V+PE+K P K+ +    
+Sbjct:   335 SLPHLPGTPRPTSSLPPGSVKAAPAQVRPPSPGNIRPVKREVKVEPEKKDPEKEPQKVAN 394
+
+Query:    62 ELPVPKTNLP 71
+             E P  K   P
+Sbjct:   395 E-PSLKGRAP 403
+
+
+>sp|P29596|ATF3_RAT Cyclic AMP-dependent transcription factor ATF-3 OS=Rattus
+            norvegicus GN=Atf3 PE=2 SV=1
+        Length = 181
+
+ Score = 90 (36.7 bits), Expect = 0.12, P = 0.11
+ Identities = 29/99 (29%), Positives = 48/99 (48%)
+
+Query:    62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121
+             E+ V K+ + P      EDE+++RR ER   N+ AA   R +K+ + E L+ E  ++E  
+Sbjct:    73 EMSVTKSEVAPE-----EDERKRRRRER---NKIAAAKCRNKKKEKTECLQKESEKLESV 124
+
+Query:   122 NQFLLQRLSQMEAENNRLSQQLA--QLAAEVRGSRANTP 158
+             N  L  ++ +++ E   L   L   +    VR     TP
+Sbjct:   125 NAELKAQIEELKNEKQHLIYMLNLHRPTCIVRAQNGRTP 163
+
+
+>sp|Q5TM26|BAT2_MACMU Large proline-rich protein BAT2 OS=Macaca mulatta GN=BAT2
+            PE=3 SV=1
+        Length = 2160
+
+ Score = 104 (41.7 bits), Expect = 0.12, P = 0.11
+ Identities = 49/196 (25%), Positives = 84/196 (42%)
+
+Query:    18 TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRK---SWGQELPVPKTNLPPRK 74
+             +P SE+P    + A+TS    + +     P+   P   R    +WG     P    PP K
+Sbjct:   380 SPNSELPPPKTAWAETS-RPPETEPGPPAPKPPLPPPHRGPAGNWGPPGDYPDRGGPPCK 438
+
+Query:    75 RAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134
+                 EDE E  R +R  R +++++ S   +R    + E E+   E++     ++L +++ 
+Sbjct:   439 PPAPEDEDEAWR-QR--RKQSSSEISLAVERARRRREEEERRMQEERRAACAEKLKRLDE 495
+
+Query:   135 ENNRLSQQL-AQLAAEVRGSRANTPMPG------SPATASPTLTPTLFKQ--ERDELPLE 185
+             +     ++L A+ AA         P P       +P   SP   PT  K+  E  + P  
+Sbjct:   496 KFGAPDKRLKAEPAAPPAAPSTPAPPPAVPKELPAPLAPSPASAPTPEKEPEESAQAPPA 555
+
+Query:   186 RIPFPTPSLSDYSPTL 201
+             +   PTP ++  +PTL
+Sbjct:   556 QCT-PTPGVAA-APTL 569
+
+
+>sp|Q0IHP2|INCE_XENTR Inner centromere protein OS=Xenopus tropicalis GN=incenp
+            PE=2 SV=1
+        Length = 898
+
+ Score = 100 (40.3 bits), Expect = 0.12, P = 0.12
+ Identities = 42/152 (27%), Positives = 71/152 (46%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTED---EKEQRRIERV-LRNRAAAQ 98
+             Q+ + EE+   +K+ +  + L   +     R+R + +    EKE+ R ER  +    A Q
+Sbjct:   642 QKKREEEELERQKKIAEAKRLAEQRQAEQERERQREQQLLAEKERLRAERERIEREKALQ 701
+
+Query:    99 TSRERKRLEMEKLEN-----EKIQMEQQNQFLLQRLSQM--EAENNRLSQQLAQLAAEVR 151
+               RE +R   EK +      E+ + EQQ +   +RL ++  E E  RL ++  + A E +
+Sbjct:   702 LQRELERAAQEKEQQRREAEERKKREQQERLEQERLERLHKEQEAKRLQEEQQRKAKE-Q 760
+
+Query:   152 GSRANTP-------MPGSPATASPTLTPTLFK 176
+              + A+ P       M  SPA  S  +TP  +K
+Sbjct:   761 AAAASAPVMNVTVDMQNSPACESYEMTPKSYK 792
+
+ Score = 85 (35.0 bits), Expect = 5.5, P = 0.996
+ Identities = 31/112 (27%), Positives = 56/112 (50%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP--RK-RAKTEDEKEQRRIERVLRNRAAA 97
+             K +E +  E+K  KK  +  QE    +       RK +AK  +E+E+R  + + + R   
+Sbjct:   589 KVREDRMAEEKAKKKITAKKQEEVECRRRQEEEARKLKAKQMEEEERRHQDLLQKKREEE 648
+
+Query:    98 QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149
+             +  R++K  E ++L  ++ Q EQ+ +   QR  Q+ AE  RL  +  ++  E
+Sbjct:   649 ELERQKKIAEAKRLAEQR-QAEQERE--RQREQQLLAEKERLRAERERIERE 697
+
+
+>sp|Q9NQS7|INCE_HUMAN Inner centromere protein OS=Homo sapiens GN=INCENP PE=1
+            SV=3
+        Length = 918
+
+ Score = 100 (40.3 bits), Expect = 0.13, P = 0.12
+ Identities = 39/136 (28%), Positives = 66/136 (48%)
+
+Query:    18 TPASEVPVL-TVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA 76
+             TP+S  P    V P  T L++   + Q +      P    KS+       K N P R   
+Sbjct:   478 TPSSPCPASKVVRPLRTFLHTVQ-RNQMLMTPTSAPRSVMKSF------IKRNTPLRMDP 530
+
+Query:    77 KTED-EKEQRRIERVLRNRAAAQTSRER-KRLEMEKLENEKIQMEQQNQFLLQ---RLSQ 131
+             K    EKE++R+E + R   A Q  R++ +  +  +LE  K++ E++ + +LQ   R+ Q
+Sbjct:   531 KCSFVEKERQRLENLRRKEEAEQLRRQKVEEDKRRRLEEVKLKREERLRKVLQARERVEQ 590
+
+Query:   132 MEAENNR-LSQQLAQL 146
+             M+ E  + + Q+ AQ+
+Sbjct:   591 MKEEKKKQIEQKFAQI 606
+
+ Score = 94 (38.1 bits), Expect = 0.58, P = 0.44
+ Identities = 28/116 (24%), Positives = 58/116 (50%)
+
+Query:    37 SADVKTQEVKPEEKKPAKKRK-SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA 95
+             +A  K +EV+   K+  + R+  W Q+    + +    ++ K   E+EQ R+ +    + 
+Sbjct:   627 AAAKKMEEVEARRKQEEEARRLRWLQQEEEERRHQELLQKKK---EEEQERLRKAAEAKR 683
+
+Query:    96 AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+              A+  RE++R E E+ E E+ + E++ Q   ++  Q+  +  R  Q+  Q   E++
+Sbjct:   684 LAE-QREQERREQERREQERREQERREQERREQERQLAEQERRREQERLQAERELQ 738
+
+ Score = 91 (37.1 bits), Expect = 1.2, P = 0.71
+ Identities = 29/118 (24%), Positives = 56/118 (47%)
+
+Query:    39 DVKTQEVKPE---EKKPAKKRKSWG-QELPVPKTNLPPRKRAK-TEDEKEQRRIERVLRN 93
+             D KT++ K E   E+K  KK  +   +E+   +      +R +  + E+E+RR + +L+ 
+Sbjct:   607 DEKTEKAKEERLAEEKAKKKAAAKKMEEVEARRKQEEEARRLRWLQQEEEERRHQELLQK 666
+
+Query:    94 RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+             +   +  R RK  E ++L  ++ Q  ++ +   Q   + E       +Q  QLA + R
+Sbjct:   667 KKEEEQERLRKAAEAKRLAEQREQERREQERREQERREQERREQERREQERQLAEQER 724
+
+ Score = 90 (36.7 bits), Expect = 1.6, P = 0.80
+ Identities = 40/144 (27%), Positives = 70/144 (48%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK-EQRRIERVLRNRAAAQT 99
+             K +E + E  + A + K   ++    +     R++ + E E+ EQ R E+  R  A  + 
+Sbjct:   666 KKKEEEQERLRKAAEAKRLAEQREQERREQERREQERREQERREQERREQE-RQLAEQER 724
+
+Query:   100 SRERKRLEMEK--LENEK---IQMEQQNQFLLQRLSQMEAEN---NRLSQQLAQLAAEVR 151
+              RE++RL+ E+   E EK   +Q EQ  + L ++  + E +     +L ++  + A E  
+Sbjct:   725 RREQERLQAERELQEREKALRLQKEQLQRELEEKKKKEEQQRLAERQLQEEQEKKAKEAA 784
+
+Query:   152 G-SRA-NTPMP-GSPATASPTLTP 172
+             G S+A N  +   SPA  S  +TP
+Sbjct:   785 GASKALNVTVDVQSPACTSYQMTP 808
+
+ Score = 84 (34.6 bits), Expect = 7.2, P = 0.9993
+ Identities = 35/165 (21%), Positives = 77/165 (46%)
+
+Query:    34 SLNSAD-VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL- 91
+             ++++ D V  +E++ E ++   +  S   EL +PKT  P +K     + +++RRI  V  
+Sbjct:    25 NMDNKDLVWLEEIQEEAERMFTREFSKEPEL-MPKT--PSQK-----NRRKKRRISYVQD 76
+
+Query:    92 RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+              NR   +    R++    +L + +++ +      +++L+ +  EN  + +++ + AA   
+Sbjct:    77 ENRDPIRRRLSRRKSRSSQLSSRRLRSKDS----VEKLATVVGENGSVLRRVTRAAAAAA 132
+
+Query:   152 GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSD 196
+              +      P SP   SPT+     K E +    + +P     +S+
+Sbjct:   133 AATMALAAPSSPTPESPTMLTK--KPEDNHTQCQLVPVVEIGISE 175
+
+
+>sp|Q5HZY0|UBXN4_RAT UBX domain-containing protein 4 OS=Rattus norvegicus
+            GN=Ubxn4 PE=2 SV=1
+        Length = 506
+
+ Score = 97 (39.2 bits), Expect = 0.13, P = 0.12
+ Identities = 67/279 (24%), Positives = 116/279 (41%)
+
+Query:    73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132
+             R   K E+ +E++R E   R     +   ER++   E L+ ++ Q E+  + +L+  S+ 
+Sbjct:   200 RLTKKLEERREEKRKEEAQRE---IKKEIERRKTGKEMLDYKRKQEEELTKRMLEERSRE 256
+
+Query:   133 EAENN----RLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTL---FKQE---RDEL 182
+             +AE+     R+ QQ+A   AE R +R         A A+  L        K+E   RD  
+Sbjct:   257 KAEDRAARERIKQQIALDRAE-RAARFAKTKEAEAAKAAALLAKQAEAEVKRESSTRDRS 315
+
+Query:   183 PLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD----LGSD 238
+              + RI F  P  S ++    PS  A   +  Q  A +V    G+ S   +F        D
+Sbjct:   316 TIARIQFRLPDGSSFTNQF-PSD-APLEEARQFAAQTVGNTYGNFSLATMFPRREFTRED 373
+
+Query:   239 LKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNF 298
+              K    D   AP +           +S+ P SS    G  + +L G  L  +PF ++   
+Sbjct:   374 YKRKLLDLELAPSASVVLLPAGRPATSIVPSSS----GDIWTLL-GTVL--YPFLAIWRL 426
+
+Query:   299 DSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCD 337
+                   +     ++  P +T+ + +S +P   AS+++ +
+Sbjct:   427 ------ISNFLFSNPPPAQTSARATSTEPSNSASSSKSE 459
+
+
+>sp|Q90595|MAFF_CHICK Transcription factor MafF OS=Gallus gallus GN=MAFF PE=1
+            SV=1
+        Length = 149
+
+ Score = 87 (35.7 bits), Expect = 0.13, P = 0.12
+ Identities = 32/106 (30%), Positives = 53/106 (50%)
+
+Query:    63 LPVPKTNLPPRKRAKTEDEK-EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121
+             L V + N   R  +K E  + +QRR  R L+NR  A + R ++  + E+L+ +K+++E +
+Sbjct:    32 LSVRELNHHLRGLSKEEVARLKQRR--RTLKNRGYAASCRVKRVCQKEELQKQKMELEWE 89
+
+Query:   122 NQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS 167
+                L +  + M  E + L  +   L    R   A+ P P   ATAS
+Sbjct:    90 VDKLARENAAMRLELDTLRGKYEALQGFARTVAAHGP-PAKVATAS 134
+
+
+>sp|Q6ZSZ5|ARHGI_HUMAN Rho guanine nucleotide exchange factor 18 OS=Homo
+            sapiens GN=ARHGEF18 PE=1 SV=2
+        Length = 1173
+
+ Score = 101 (40.6 bits), Expect = 0.13, P = 0.12
+ Identities = 42/154 (27%), Positives = 69/154 (44%)
+
+Query:    80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139
+             +++ QR  E+    RAA +  + + R E ++ E E+    Q+ +    RL + E E  +L
+Sbjct:   851 EQERQRNFEKQREERAALEKLQSQLRHEQQRWERERQWQHQELERAGARLQEREGEARQL 910
+
+Query:   140 SQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSP 199
+              ++L Q  AE+   R            +        ++ER EL L R+        + +P
+Sbjct:   911 RERLEQERAELERQRQAYQHDLERLREAQRAVER--ERERLEL-LRRL-----KKQNTAP 962
+
+Query:   200 -TLKPSTLAESSDVAQHPAVSVAGLEGDG-SALP 231
+               L P TLAE+   +  P+ +  GLEG   S LP
+Sbjct:   963 GALPPDTLAEAQPPSHPPSFNGEGLEGPRVSMLP 996
+
+
+>sp|Q7PS12|MOEH_ANOGA Moesin/ezrin/radixin homolog 1 OS=Anopheles gambiae
+            GN=Moe PE=3 SV=4
+        Length = 624
+
+ Score = 98 (39.6 bits), Expect = 0.13, P = 0.12
+ Identities = 26/118 (22%), Positives = 61/118 (51%)
+
+Query:    36 NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE--QRRIERVLRN 93
+             ++ DV+  + +  ++K AK+++    +L +       +K+ + ED     Q  +ER   N
+Sbjct:   299 DTIDVQQMKAQARDEKNAKQQEREKLQLALAARERAEKKQQEYEDRLRSMQEEMERKQAN 358
+
+Query:    94 RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+              + AQ +  R + ++ +++  K ++EQ+   L + + ++E   N  + + A+L  E+R
+Sbjct:   359 LSEAQDTIRRLQEQLNQVQAAKEELEQRQNELHEMMQRLEETKNMEATERAKLEEEIR 416
+
+
+>sp|P12957|CALD1_CHICK Caldesmon OS=Gallus gallus GN=CALD1 PE=1 SV=2
+        Length = 771
+
+ Score = 99 (39.9 bits), Expect = 0.13, P = 0.13
+ Identities = 41/144 (28%), Positives = 63/144 (43%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQT 99
+             + +K EE+K A + K   +E    K     R+RAK E+EK   E+R   +    R AA+ 
+Sbjct:   261 ERLKAEEEKKAAEEKQKAEE---EKKAAEERERAKAEEEKRAAEERERAKAEEERKAAE- 316
+
+Query:   100 SRERKRLEME-KLENEKIQMEQQNQFLLQRLSQME---AENNRLSQQLAQLAAEVRGSRA 155
+              RER + E E K   E+ + E++ +   +R    E   A   R   +  + AAE R  RA
+Sbjct:   317 ERERAKAEEERKAAEERAKAEEERKAAEERAKAEEERKAAEERAKAEKERKAAEER-ERA 375
+
+Query:   156 NTPMPGSPATASPTLTPTLFKQER 179
+                     A     L     K+++
+Sbjct:   376 KAEEEKRAAEEKARLEAEKLKEKK 399
+
+ Score = 98 (39.6 bits), Expect = 0.17, P = 0.16
+ Identities = 44/188 (23%), Positives = 81/188 (43%)
+
+Query:    31 ADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERV 90
+             A+    +A+ + +    EEK+ A++R+    E    +     R+RAK E+E++    ER 
+Sbjct:   278 AEEEKKAAEERERAKAEEEKRAAEERERAKAE--EERKAAEERERAKAEEERKAAE-ERA 334
+
+Query:    91 LRNRAAAQTSRERKRLEME-KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149
+              +     + + ER + E E K   E+ + E++ +   +R      E  R +++ A+L AE
+Sbjct:   335 -KAEEERKAAEERAKAEEERKAAEERAKAEKERKAAEERERAKAEEEKRAAEEKARLEAE 393
+
+Query:   150 VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSD-YSPTLKPSTLAE 208
+                 +    M    A         L KQE D+    ++     SL +   PT K   + +
+Sbjct:   394 KLKEKKK--MEEKKAQEEKAQANLLRKQEEDKEA--KVEAKKESLPEKLQPTSKKDQVKD 449
+
+Query:   209 SSDVAQHP 216
+             + D  + P
+Sbjct:   450 NKDKEKAP 457
+
+ Score = 82 (33.9 bits), Expect = 9.7, P = 0.99994
+ Identities = 44/196 (22%), Positives = 76/196 (38%)
+
+Query:    52 PAKKRKSWGQELPVPKT----NLPPRKRAK--TEDEKEQRRIERVLRNRAAAQTSRERKR 105
+             P +K ++  +EL  PK     N   R   K     E    +++   +  A      +++R
+Sbjct:   472 PEQKAQNGERELTTPKLKSTENAFGRSNLKGAANAEAGSEKLKEKQQEAAVELDELKKRR 531
+
+Query:   106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPAT 165
+              E  K+  E+ Q ++Q +   +R  + E E  R+ +++ +  AE    R   P  G    
+Sbjct:   532 EERRKILEEEEQKKKQEE--AERKIREEEEKKRMKEEIERRRAEAAEKRQKVPEDGVSEE 589
+
+Query:   166 ASPTLTPTLFKQERDELPLE-RIPFPTPSLSDYSPTLKPS-TLAESSDVAQHPAVSVAGL 223
+               P      F  +   L +E R  F   S       +KP+ T A  S +        + +
+Sbjct:   590 KKPF---KCFSPKGSSLKIEERAEFLNKSAQKSG--MKPAHTTAVVSKIDSRLEQYTSAV 644
+
+Query:   224 EGDGSALPLFDLGSDL 239
+              G+ +A P     SDL
+Sbjct:   645 VGNKAAKPAKPAASDL 660
+
+
+>sp|Q08DA8|ATF1_BOVIN Cyclic AMP-dependent transcription factor ATF-1 OS=Bos
+            taurus GN=ATF1 PE=2 SV=1
+        Length = 270
+
+ Score = 93 (37.8 bits), Expect = 0.13, P = 0.13
+ Identities = 20/58 (34%), Positives = 38/58 (65%)
+
+Query:    76 AKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133
+             +KT+D + +R I R+++NR AA+  R +K+  ++ LEN    +E QN+ L++ L  ++
+Sbjct:   206 SKTDDPQLKREI-RLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKTLK 262
+
+
+>sp|Q94126|CES2_CAEEL Cell death specification protein 2 OS=Caenorhabditis
+            elegans GN=ces-2 PE=1 SV=1
+        Length = 211
+
+ Score = 91 (37.1 bits), Expect = 0.14, P = 0.13
+ Identities = 33/123 (26%), Positives = 64/123 (52%)
+
+Query:    26 LTVSPADTSLNSADV--KTQEVKPEEK---KPAKKRKSW--GQELPVPKTNLPPRKRAKT 78
+             L + P D SL + ++   T+++K E++    P   R S         P+ + P RK +  
+Sbjct:    52 LGILPFD-SLPTTNLLTPTKKIKLEDELCASPVSSRSSTVSSSHFSSPQRS-PSRKMSVP 109
+
+Query:    79 --EDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136
+               E++K+    ER  +N  AA+ SR+ +R + E++ ++   +E++N  L  ++S +E E 
+Sbjct:   110 IPEEKKDSAYFERRRKNNDAAKRSRDARRQKEEQIASKAHALERENMQLRGKVSSLEQEA 169
+
+Query:   137 NRL 139
+              +L
+Sbjct:   170 AQL 172
+
+
+>sp|O66547|Y157_AQUAE Uncharacterized protein aq_157 OS=Aquifex aeolicus
+            GN=aq_157 PE=3 SV=1
+        Length = 162
+
+ Score = 88 (36.0 bits), Expect = 0.14, P = 0.13
+ Identities = 30/102 (29%), Positives = 60/102 (58%)
+
+Query:    34 SLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRN 93
+             SL+ A V T +V  E K  AK +     EL   +  L   ++   E +K+   +++ L +
+Sbjct:    21 SLDFACVDTNKVIRESKFIAKAQT----EL---RKELEKYQKLIQEKQKKLEALKKSLES 73
+
+Query:    94 RAAAQTSRERKRLEMEKLENE--KIQMEQQNQFLLQRLSQME 133
+             +A ++ ++E+K  E+E+LE+E  K+Q+E Q++ L ++ +++E
+Sbjct:    74 KALSEKAKEKKAKEIEQLEDELRKLQVEAQSK-LSRKKAELE 114
+
+
+>sp|A6ZRZ0|NST1_YEAS7 Stress response protein NST1 OS=Saccharomyces cerevisiae
+            (strain YJM789) GN=NST1 PE=3 SV=1
+        Length = 1240
+
+ Score = 101 (40.6 bits), Expect = 0.14, P = 0.13
+ Identities = 32/112 (28%), Positives = 61/112 (54%)
+
+Query:    35 LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR 94
+             L   +++ +E + ++ + AK++K   +E    K  L  ++R +   EK++++ E + R R
+Sbjct:   681 LEEREMRRREAQRKKVEEAKRKKD--EER---KRRLEEQQRREEMQEKQRKQKEELKRKR 735
+
+Query:    95 AAAQTS-RERKRLEMEKLENEKIQMEQQ-----NQFLLQRLSQMEAENNRLS 140
+                +   RE+KRLE EKL+ EK + E+Q     +    Q+L++ +   N LS
+Sbjct:   736 EEEKKRIREQKRLEQEKLQKEKEEEERQRLIAEDALRKQKLNEEQTSANILS 787
+
+ Score = 92 (37.4 bits), Expect = 1.4, P = 0.74
+ Identities = 47/193 (24%), Positives = 78/193 (40%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+             K +E K   KK  ++R+   +E    K     RK+    DE+ +RR+E   R     +  
+Sbjct:   669 KREEEKERLKKELEEREMRRREAQRKKVEEAKRKK----DEERKRRLEEQQRREEMQEKQ 724
+
+Query:   101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160
+             R++K     K E EK ++ +Q +   ++L Q E E     + +A+ A  +R  + N    
+Sbjct:   725 RKQKEELKRKREEEKKRIREQKRLEQEKL-QKEKEEEERQRLIAEDA--LRKQKLNEEQ- 780
+
+Query:   161 GSPATASPTLTPTLFKQERDELPLERIPFP--TPSLSDYSPTLKPSTLAESSDVAQHPAV 218
+                 T++  L+   F +     P+     P  T    D S ++    L   + VA    V
+Sbjct:   781 ----TSANILSAKPFTENGVGNPVSSQSHPNMTNYQEDNSCSINDEILKMVNSVAASKPV 836
+
+Query:   219 SVAGLEGDGSALP 231
+             S  G       LP
+Sbjct:   837 SPTGFNVHDLLLP 849
+
+ Score = 86 (35.3 bits), Expect = 6.1, P = 0.998
+ Identities = 25/110 (22%), Positives = 55/110 (50%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102
+             +E + + +K  KK+K   +E    +     ++  K + E+E+ R+++ L  R   +   +
+Sbjct:   633 EEKRKKREKEEKKQKKREKEKEKKRLQQLAKEEEKRKREEEKERLKKELEEREMRRREAQ 692
+
+Query:   103 RKRLE---MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149
+             RK++E    +K E  K ++E+Q     QR  +M+ +  +  ++L +   E
+Sbjct:   693 RKKVEEAKRKKDEERKRRLEEQ-----QRREEMQEKQRKQKEELKRKREE 737
+
+
+>sp|P53935|NST1_YEAST Stress response protein NST1 OS=Saccharomyces cerevisiae
+            GN=NST1 PE=1 SV=1
+        Length = 1240
+
+ Score = 101 (40.6 bits), Expect = 0.14, P = 0.13
+ Identities = 32/112 (28%), Positives = 61/112 (54%)
+
+Query:    35 LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR 94
+             L   +++ +E + ++ + AK++K   +E    K  L  ++R +   EK++++ E + R R
+Sbjct:   681 LEEREMRRREAQRKKVEEAKRKKD--EER---KRRLEEQQRREEMQEKQRKQKEELKRKR 735
+
+Query:    95 AAAQTS-RERKRLEMEKLENEKIQMEQQ-----NQFLLQRLSQMEAENNRLS 140
+                +   RE+KRLE EKL+ EK + E+Q     +    Q+L++ +   N LS
+Sbjct:   736 EEEKKRIREQKRLEQEKLQKEKEEEERQRLIAEDALRKQKLNEEQTSANILS 787
+
+ Score = 92 (37.4 bits), Expect = 1.4, P = 0.74
+ Identities = 47/193 (24%), Positives = 78/193 (40%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+             K +E K   KK  ++R+   +E    K     RK+    DE+ +RR+E   R     +  
+Sbjct:   669 KREEEKERLKKELEEREMRRREAQRKKVEEAKRKK----DEERKRRLEEQQRREEMQEKQ 724
+
+Query:   101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160
+             R++K     K E EK ++ +Q +   ++L Q E E     + +A+ A  +R  + N    
+Sbjct:   725 RKQKEELKRKREEEKKRIREQKRLEQEKL-QKEKEEEERQRLIAEDA--LRKQKLNEEQ- 780
+
+Query:   161 GSPATASPTLTPTLFKQERDELPLERIPFP--TPSLSDYSPTLKPSTLAESSDVAQHPAV 218
+                 T++  L+   F +     P+     P  T    D S ++    L   + VA    V
+Sbjct:   781 ----TSANILSAKPFTENGVGNPVSSQSHPNMTNYQEDNSCSINDEILKMVNSVAASKPV 836
+
+Query:   219 SVAGLEGDGSALP 231
+             S  G       LP
+Sbjct:   837 SPTGFNVHDLLLP 849
+
+ Score = 86 (35.3 bits), Expect = 6.1, P = 0.998
+ Identities = 25/110 (22%), Positives = 55/110 (50%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102
+             +E + + +K  KK+K   +E    +     ++  K + E+E+ R+++ L  R   +   +
+Sbjct:   633 EEKRKKREKEEKKQKKREKEKEKKRLQQLAKEEEKRKREEEKERLKKELEEREMRRREAQ 692
+
+Query:   103 RKRLE---MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149
+             RK++E    +K E  K ++E+Q     QR  +M+ +  +  ++L +   E
+Sbjct:   693 RKKVEEAKRKKDEERKRRLEEQ-----QRREEMQEKQRKQKEELKRKREE 737
+
+
+>sp|A3BYC1|HOX25_ORYSJ Homeobox-leucine zipper protein HOX25 OS=Oryza sativa
+            subsp. japonica GN=HOX25 PE=2 SV=2
+        Length = 320
+
+ Score = 94 (38.1 bits), Expect = 0.14, P = 0.13
+ Identities = 62/269 (23%), Positives = 107/269 (39%)
+
+Query:    24 PVLTVSPADTSLNSADVKTQEVKPEEK----KPAKKRKSWGQELPVPKTNLPPRKRAKTE 79
+             P LT +  +  L   D+  +    +E+      A+KR+   +++   + +    KR K E
+Sbjct:    48 PFLTTTHDELELQMEDLVDELYGVDEQGSSSAAARKRRLTAEQVRALERSFEEEKR-KLE 106
+
+Query:    80 DEKEQRRIER--VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN 137
+              E++     R  +   + A      R R + ++LE +  ++   +  LL   + + A+N 
+Sbjct:   107 PERKSELARRLGIAPRQVAVWFQNRRARWKTKQLELDFDRLRAAHDELLAGRTALAADNE 166
+
+Query:   138 RLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDY 197
+              L  Q+  L  +++ +   +P P SPA A  T  P    +      LE        L D 
+Sbjct:   167 SLRSQVILLTEKLQAN-GKSPSP-SPAPAEQTAVPAA-PESAKSFQLEE----GRRLYDA 219
+
+Query:   198 SPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP--LFDLGSDLKHHSTDDVAAPLSDDD 255
+             + +   +T      VA  PA  VA      +  P   F         S DD     SDDD
+Sbjct:   220 AGSTT-TTNGGGGGVAM-PAARVAAARAASNDSPESYFAGARSPPSSSEDDCGGAGSDDD 277
+
+Query:   256 F---NRLFHGDSSVEPDSSVFEDGLAFDV 281
+             +   + L   D+++  D+  FE  +A  V
+Sbjct:   278 YPSSSVLLPVDATLVGDA--FEHAVAATV 304
+
+
+>sp|B1AZI6|THOC2_MOUSE THO complex subunit 2 OS=Mus musculus GN=Thoc2 PE=3 SV=1
+        Length = 1594
+
+ Score = 102 (41.0 bits), Expect = 0.14, P = 0.13
+ Identities = 44/182 (24%), Positives = 83/182 (45%)
+
+Query:    36 NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA 95
+             NS     + VK  +K+  K+++   +E   P T   P  RA  +D KE+ + ER  +   
+Sbjct:  1257 NSGSNSNKAVKENDKEKVKEKEKEKKE-KTPATT--PEARALGKDSKEKPKEERPNKEDK 1313
+
+Query:    96 AAQTSRERKRLEMEKLENEKIQMEQQNQF-----LLQRLSQMEAENNRLSQQLAQLAAEV 150
+             A +T     + + EK + +K +  +  +F     +++  S  E E  +   +   +A E+
+Sbjct:  1314 ARETKERTPKSDKEKEKFKKEEKAKDEKFKTTVPIVESKSTQEREREKEPSRERDVAKEM 1373
+
+Query:   151 RGSRAN------TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS 204
+             + S+ N      TP+ GS    SP     + + +R++   +    P+PS   +S T+K S
+Sbjct:  1374 K-SKENVKGGEKTPVSGS--LKSPVPRSDISEPDREQKRRKIDSHPSPS---HSSTVKDS 1427
+
+Query:   205 TL 206
+              +
+Sbjct:  1428 LI 1429
+
+
+>sp|Q9H254|SPTN4_HUMAN Spectrin beta chain, brain 3 OS=Homo sapiens GN=SPTBN4
+            PE=1 SV=2
+        Length = 2564
+
+ Score = 104 (41.7 bits), Expect = 0.15, P = 0.14
+ Identities = 51/210 (24%), Positives = 80/210 (38%)
+
+Query:     6 EKTMSSVDSLPATPASEVPV-LTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELP 64
+             E+    +D LP  P    P  L  +P D    +A+        E+ +P  +R    QE  
+Sbjct:  2186 ERLQPRIDRLPEIPGRVEPAALPAAPED----AAETPATPAAAEQVRPRPER----QESA 2237
+
+Query:    65 VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF 124
+                  LP R+R + ++  +Q   E   R R   Q S E +      L   + QME++ + 
+Sbjct:  2238 DRAEELPRRRRPERQESVDQSE-EAARRRRPERQESAEHEAAHSLTLGRYE-QMERRRER 2295
+
+Query:   125 LLQRLSQMEAENNRL---------SQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLF 175
+               +RL + E+    +            LA +  +++   A   +P  P+   P   P   
+Sbjct:  2296 RERRLERQESSEQEMPIRGDLVKGKATLADIVEQLQEKEAGPGLPAGPSLPQPRELPPGR 2355
+
+Query:   176 KQERDELPLERIPFPT-PSLSDY-SPTLKP 203
+                  ELP ER P P  P   D   P  +P
+Sbjct:  2356 LPNGLELP-ERTPRPDRPRARDRPKPRRRP 2384
+
+
+>sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kapC OS=Aspergillus oryzae
+            GN=kapC PE=3 SV=2
+        Length = 284
+
+ Score = 93 (37.8 bits), Expect = 0.15, P = 0.14
+ Identities = 49/213 (23%), Positives = 86/213 (40%)
+
+Query:    16 PATPASEVPVL---TVSPAD-TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP 71
+             P  PA++ P +   T SP D  +++ A      +    + P +   + GQE P       
+Sbjct:    44 PQPPAAQPPHMQPNTTSPRDQNNIDPAISGAAMLSGPPQTPPQPEPT-GQESP------- 95
+
+Query:    72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+                  KT  ++     +R  +NRAA +  R+RK   + KLE +  + +  ++        
+Sbjct:    96 -----KTYGKRPLSTSKRAAQNRAAQRAFRQRKESYIRKLEEQVKEFDTMSE----AFKA 146
+
+Query:   132 MEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPATASPTLTPTLFKQERDELPLERIPFP 190
+             ++AEN +L + +  L + +  S+   P +PG+   + P  T     Q            P
+Sbjct:   147 LQAENYQLREYIINLQSRLLESQGEVPELPGNIDLSQPR-TDLNVPQPGAGPATTSSSAP 205
+
+Query:   191 TPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223
+              P  S       P   A + D+     ++VAGL
+Sbjct:   206 APP-SGAQQAQPPQGAASNDDMNSLNRIAVAGL 237
+
+
+>sp|Q9JJ50|HGS_RAT Hepatocyte growth factor-regulated tyrosine kinase substrate
+            OS=Rattus norvegicus GN=Hgs PE=1 SV=1
+        Length = 776
+
+ Score = 94 (38.1 bits), Expect = 0.15, Sum P(2) = 0.14
+ Identities = 34/100 (34%), Positives = 52/100 (52%)
+
+Query:    82 KEQRRIERVLRNRAAAQTSRERKRLEMEKLE--NEKIQ--MEQQNQFLLQRLSQMEAENN 137
+             +E+ R E+ LR RAA +  R+R+    +KLE   +K Q  +E Q Q  +QRL + E E  
+Sbjct:   487 REEHR-EK-LR-RAAEEAERQRQIQLAQKLEIMRQKKQEYLEVQRQLAIQRLQEQEKERQ 543
+
+Query:   138 -RLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFK 176
+              RL QQ  +   ++R      P+P +   A PT    L++
+Sbjct:   544 MRLEQQ--KQTVQMRAQMPAFPLPYAQLQAMPTAGGVLYQ 581
+
+ Score = 48 (22.0 bits), Expect = 0.15, Sum P(2) = 0.14
+ Identities = 23/79 (29%), Positives = 35/79 (44%)
+
+Query:     6 EKTMSSVDSLPATPASE-VPVLTVSPADTSLNSADVKT-----QEVKPE----------E 49
+             ++ M    +  A P SE  P+ + +P   SL S+ V +     +++ PE          E
+Sbjct:   277 KERMRQKSTYTAHPKSEPAPLASSAPPAGSLYSSPVNSSAPLAEDIDPELARYLNRNYWE 336
+
+Query:    50 KKPAKKRKSWGQELPVPKT 68
+             KK  + RKS     PVP T
+Sbjct:   337 KKQEEARKSPTPSAPVPLT 355
+
+
+>sp|Q2KII1|ATF3_BOVIN Cyclic AMP-dependent transcription factor ATF-3 OS=Bos
+            taurus GN=ATF3 PE=2 SV=1
+        Length = 181
+
+ Score = 89 (36.4 bits), Expect = 0.15, P = 0.14
+ Identities = 29/99 (29%), Positives = 47/99 (47%)
+
+Query:    62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121
+             E+ V K  + P      EDE+++RR ER   N+ AA   R +K+ + E L+ E  ++E  
+Sbjct:    73 EMSVTKAEVAPE-----EDERKKRRRER---NKIAAAKCRNKKKEKTECLQKESEKLESV 124
+
+Query:   122 NQFLLQRLSQMEAENNRLSQQLA--QLAAEVRGSRANTP 158
+             N  L  ++ +++ E   L   L   +    VR     TP
+Sbjct:   125 NAELKAQIEELKNEKQHLIYMLNLHRPTCIVRAQNGRTP 163
+
+
+>sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcription factor ATF-6 beta
+            OS=Homo sapiens GN=ATF6B PE=1 SV=2
+        Length = 703
+
+ Score = 98 (39.6 bits), Expect = 0.15, P = 0.14
+ Identities = 39/135 (28%), Positives = 62/135 (45%)
+
+Query:    17 ATPASEVPVLT--VSPADTS---LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP 71
+             A P S   +L   V P   S   L    ++ Q   P    P  +RKS     P+P  + P
+Sbjct:   260 AVPPSTTVLLQSLVQPPPVSPVVLIQGAIRVQPEGPAPSLPRPERKSI-VPAPMPGNSCP 318
+
+Query:    72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN-------EKIQMEQQNQF 124
+             P       D K  +R +R+++NR +A  SR +K+  ++ LE        +  Q+ ++N  
+Sbjct:   319 PEV-----DAKLLKRQQRMIKNRESACQSRRKKKEYLQGLEARLQAVLADNQQLRRENAA 373
+
+Query:   125 LLQRLSQMEAENNRL 139
+             L +RL  + AEN+ L
+Sbjct:   374 LRRRLEALLAENSEL 388
+
+
+>sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 OS=Mus musculus GN=Bat2
+            PE=1 SV=1
+        Length = 2158
+
+ Score = 103 (41.3 bits), Expect = 0.16, P = 0.14
+ Identities = 58/227 (25%), Positives = 93/227 (40%)
+
+Query:    18 TPASEVPVLTVSPADTSL--NSADVKTQEVKPEEKKPAKKRK-----SWGQELPVPKTNL 70
+             +P SE+P     P  T+   N+   +T+   P  K P          +WG     P    
+Sbjct:   378 SPGSELP-----PPKTAWTENARPSETEPAPPTPKPPPPPPHRGPVGNWGPPGDYPDRGG 432
+
+Query:    71 PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS 130
+             PP K    EDE E  R +R  R +++++ S   +R    + E E+   E++     ++L 
+Sbjct:   433 PPCKPPAPEDEDEAWR-QR--RKQSSSEISLAVERARRRREEEERRMQEERRAACAEKLK 489
+
+Query:   131 QMEAENNRLSQQL-AQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF 189
+             +++ +     ++L A+ AA         P P +PA  +P L P + K+      L   P 
+Sbjct:   490 RLDEKFGAPDKRLKAEPAA---------P-PVTPA--APALPPVVPKEIPAAPALPPTPT 537
+
+Query:   190 PTPSLSDYSPTLKPST-LAESSDVAQHPA-VSVAGLEGDGSALPLFD 234
+             PTP      P   P    A S  VA  P  VS  G   + ++   F+
+Sbjct:   538 PTPEKEPEEPAQAPPVQAAPSPGVAPVPTLVSGGGCTANSNSSGSFE 584
+
+
+>sp|Q4I877|NDE1_GIBZE Nuclear distribution protein nudE homolog 1 OS=Gibberella
+            zeae GN=NDE1 PE=3 SV=1
+        Length = 583
+
+ Score = 97 (39.2 bits), Expect = 0.16, P = 0.14
+ Identities = 46/161 (28%), Positives = 74/161 (45%)
+
+Query:    80 DEKEQRRIERVLRNRAA---AQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136
+             + K  + IER +         +  RE+ R+E ++L  E   ++ + + L  +  + E+ +
+Sbjct:   137 ESKYNQAIERAVMMEEEIKIGEQEREQLRIESQRLREELGDLKIEAELLQDKFKKQESRH 196
+
+Query:   137 -NRLSQQLAQLAAEV-RGSRANTPMPGSPATASPTLTPTLFKQ-ERDELPLERIPFP-TP 192
+              + +S  L+ LA+    G  A+   PGS A++    TPT  K    D   L  +P P +P
+Sbjct:   197 LSTISTDLSVLASPTFDGHPAS---PGSTASSPLITTPTDSKSMTEDGDTLSELPDPPSP 253
+
+Query:   193 SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG-DGSALPL 232
+              +SD S  L P  +A S   A    VS + L   D S  PL
+Sbjct:   254 PMSDVSAPL-PK-VAASRPSAHRRTVSRSRLPSTDISTTPL 292
+
+
+>sp|Q84WU4|GOGC3_ARATH Golgin candidate 3 OS=Arabidopsis thaliana GN=GC3 PE=1
+            SV=1
+        Length = 712
+
+ Score = 98 (39.6 bits), Expect = 0.16, P = 0.15
+ Identities = 35/122 (28%), Positives = 64/122 (52%)
+
+Query:    74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME---QQNQFL---LQ 127
+             +R ++E  KE+    R+ +N+ + + S+ R  L+ + LE + +QM+   Q++  +   ++
+Sbjct:   218 ERKRSESFKEELESMRLDKNKTSMEISKMRSELDAKLLEIKHLQMKLTGQESHAIGPGME 277
+
+Query:   128 RLSQ----MEAENNRLSQQLAQLAAEVRGSRANTPMPGSP-ATASPTLTP-TLFKQERDE 181
+              L +    +E ENN L  + ++L A +  SR  T     P AT S T  P TL K++ + 
+Sbjct:   278 HLKEVNKALEKENNELKLKRSELEAALEESRKLTNSKVFPDATESLTRHPSTLDKEKPES 337
+
+Query:   182 LP 183
+              P
+Sbjct:   338 FP 339
+
+
+>sp|Q499N6|UBXN1_RAT UBX domain-containing protein 1 OS=Rattus norvegicus
+            GN=Ubxn1 PE=2 SV=2
+        Length = 297
+
+ Score = 93 (37.8 bits), Expect = 0.16, P = 0.15
+ Identities = 43/181 (23%), Positives = 78/181 (43%)
+
+Query:    19 PASEVPVLTVSPADTSLNSADVKTQEVKPE-------EKKPAKKRKSWGQELPVPKTNLP 71
+             P  + P+ T  P    L      +++V PE       E KP    +   QE       L 
+Sbjct:    46 PDVDEPLET--PLSHILGREPTPSEQVGPEGSGSAAGESKPVLTEEE-RQEQTKRMLELV 102
+
+Query:    72 PRKRAKTEDEKEQRRIERVL-RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS 130
+              +K+ + E+ +E+  +ER   R R   + S  R++L+ +++     +  ++    L    
+Sbjct:   103 AQKQREREEREEREALEREKQRRRQGQELSAARQKLQEDEIRRAAEERRREKAEELAARQ 162
+
+Query:   131 QMEAENNRLSQQLAQLAAEVRGSRANTPM--PGSPATASPTLTPTLFKQERDELPLE-RI 187
+             ++  +  R   + AQ      GSR++ P   PG P  +SP   P   K+E D+  ++ R+
+Sbjct:   163 RVREKIERDKAERAQKYGGTVGSRSSPPATDPG-PVPSSPRQEPPT-KREYDQCRIQVRL 220
+
+Query:   188 P 188
+             P
+Sbjct:   221 P 221
+
+
+>sp|B4PPK2|FOSL_DROYA Transcription factor kayak OS=Drosophila yakuba GN=kay
+            PE=3 SV=1
+        Length = 552
+
+ Score = 81 (33.6 bits), Expect = 0.16, Sum P(3) = 0.15
+ Identities = 20/73 (27%), Positives = 36/73 (49%)
+
+Query:    72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+             P +      E+EQ+R  R  RN+ AA   R+R+  +  +L  E  Q+E++   + + +  
+Sbjct:   201 PNRSTNMTPEEEQKRAVRRERNKQAAARCRKRRVDQTNELTEEVEQLEKRGDSMRKEIEA 260
+
+Query:   132 MEAENNRLSQQLA 144
+             +    N+L   LA
+Sbjct:   261 LTMSKNQLEYCLA 273
+
+ Score = 53 (23.7 bits), Expect = 0.16, Sum P(3) = 0.15
+ Identities = 21/59 (35%), Positives = 27/59 (45%)
+
+Query:   183 PLERIPFPTPSLSDY--SPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL 239
+             P +RI  P  S   +    TL   T A S  + Q P  S A + G GSA P+   GS +
+Sbjct:   382 PSKRITLPPMSTMPHVHMSTLMTPTGASSGSL-QTPITSTAPV-GFGSAFPVTTNGSSI 438
+
+ Score = 42 (19.8 bits), Expect = 0.16, Sum P(3) = 0.15
+ Identities = 13/34 (38%), Positives = 20/34 (58%)
+
+Query:    10 SSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ 43
+             S V+SLP  PA +V +   S ++ S N++   TQ
+Sbjct:    95 SGVNSLPIQPAYDVNLAQGSDSEDS-NASYNDTQ 127
+
+
+>sp|A4R8N4|PAN1_MAGGR Actin cytoskeleton-regulatory complex protein PAN1
+            OS=Magnaporthe grisea GN=PAN1 PE=3 SV=1
+        Length = 1431
+
+ Score = 101 (40.6 bits), Expect = 0.17, P = 0.15
+ Identities = 48/191 (25%), Positives = 79/191 (41%)
+
+Query:    37 SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA 96
+             +A     E KP    P++K     +E    K      +R   E E++QR++  +    A 
+Sbjct:  1022 AASAPKTEAKPPPPPPSRKAAP-DRETAAKKAE---EERLAQEQEEQQRQMREM---EAK 1074
+
+Query:    97 AQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRAN 156
+             A+   +    E    E     +E+Q   L  R  ++EA   R  +   QL  E      +
+Sbjct:  1075 AKAEEDALARENSAAEARLKALEEQEAKLAARRQEIEAAKRREEELQRQL--EAMNEEGS 1132
+
+Query:   157 TPMPGSPATASPTL-TPTLFKQERDELPLERIPFPTPSLSD-YSPTLKP--STLAESSD- 211
+             +     PA  +P   TPT+  QE     LER P P P +++  + +  P    L++SS+ 
+Sbjct:  1133 SSDDDEPAQITPQASTPTVGSQE-----LERKPSPPPQVAEPKTESRNPYFRMLSQSSEG 1187
+
+Query:   212 -VAQHPAVSVA 221
+               +  P  SV+
+Sbjct:  1188 PTSVSPQASVS 1198
+
+
+>sp|B2AWS3|PAN1_PODAN Actin cytoskeleton-regulatory complex protein PAN1
+            OS=Podospora anserina GN=PAN1 PE=3 SV=1
+        Length = 1441
+
+ Score = 101 (40.6 bits), Expect = 0.17, P = 0.15
+ Identities = 48/180 (26%), Positives = 80/180 (44%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRK---RAKT-EDEKEQRRIERVLRNRAA 96
+             K  + + EE+  A+K +    E    +     R+   RAK  EDE  + R E   R +A 
+Sbjct:  1024 KVDDRRAEEEAAARKAEEGRLERERGEQERQTRELEERAKDQEDELAKERAEADARLKAL 1083
+
+Query:    97 AQTSRERKRLEMEKLENEKIQM---EQQNQFLLQRLSQMEAENNRLSQQLAQLAA-EVRG 152
+              +  R+ K  + E+   +K  M   ++Q   L QR +++EA   R  +   QL A +V  
+Sbjct:  1084 EEQVRQGKLKKEEEKRKKKAAMAEAKEQEAKLAQRRAEIEAARKREEELRKQLEALDVED 1143
+
+Query:   153 SRANT---PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES 209
+             S ++    P   +P  ++PTL  +     ++  P    P P P  S   P +  S+ AE+
+Sbjct:  1144 SSSDDDEGPEQITPQASTPTLGGSQVGGSQELEPAPPTPVPAPVQSP--PQIVTSSPAET 1201
+
+
+>sp|Q92545|TM131_HUMAN Transmembrane protein 131 OS=Homo sapiens GN=TMEM131
+            PE=1 SV=2
+        Length = 1834
+
+ Score = 102 (41.0 bits), Expect = 0.17, P = 0.15
+ Identities = 45/200 (22%), Positives = 83/200 (41%)
+
+Query:    21 SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTED 80
+             S++  L +   D   +  D    EV  E+  P+   KS G+  P+ +   PP+K+ + E 
+Sbjct:  1296 SDITSL-IEAMDKDFDHHDSPALEVFTEQP-PSPLPKSKGKGKPLQRKVKPPKKQEEKEK 1353
+
+Query:    81 EKEQRRIERVLRNRAA----AQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136
+             + + +  E  L++  A    + T+ E    + E L  E  + ++  Q + ++     ++ 
+Sbjct:  1354 KGKGKPQEDELKDSLADDDSSSTTTETSNPDTEPLLKEDTEKQKGKQAMPEKHESEMSQV 1413
+
+Query:   137 NRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSD 196
+              + S++L  +  E+       P    P++     TP L  ++R  LP  +IP PT   S 
+Sbjct:  1414 KQKSKKLLNIKKEI-------PTDVKPSSLELPYTPPLESKQRRNLP-SKIPLPTAMTSG 1465
+
+Query:   197 YSPTLKPSTLAESSDVAQHP 216
+                     T   S  V   P
+Sbjct:  1466 SKSRNAQKTKGTSKLVDNRP 1485
+
+
+>sp|Q38W81|IF2_LACSS Translation initiation factor IF-2 OS=Lactobacillus sakei
+            subsp. sakei (strain 23K) GN=infB PE=3 SV=1
+        Length = 937
+
+ Score = 99 (39.9 bits), Expect = 0.17, P = 0.16
+ Identities = 48/198 (24%), Positives = 75/198 (37%)
+
+Query:     4 DMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL 63
+             + EKT+ +     ATPA+  P    +P       A  K++  K +  K A +R+    + 
+Sbjct:    41 NQEKTLRAAFQTKATPAASKPATPAAP------KASEKSESGKIKINKTAIRRRPEADKK 94
+
+Query:    64 PVPKTNLPPRKRAKTEDEKE--QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121
+             P   +N  P+  A    +    Q R      N  +A+ +  R         N + +    
+Sbjct:    95 PAQHSNNRPQANANRNGQASNGQNRTNNARPNNNSARPNNSRPNTNSRPNNNSQNRSTSA 154
+
+Query:   122 NQ--FLLQRLSQMEAENNR----LSQQLAQLAAEVRGSR--ANTPMPGSPATASPTLTPT 173
+             N    L +++SQ  A   R    + QQ  Q  A+ +  R  AN P P +   AS    P+
+Sbjct:   155 NHPMSLQEQISQANARRQRTQERIQQQREQREADEKKRREQANRPRP-TRNNASNN-RPS 212
+
+Query:   174 LFKQERDELPLERIPFPT 191
+               K      P    P PT
+Sbjct:   213 NGKPTNGARPTTNSPRPT 230
+
+
+>sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Gallus gallus GN=MAF PE=1 SV=1
+        Length = 359
+
+ Score = 94 (38.1 bits), Expect = 0.17, P = 0.16
+ Identities = 25/82 (30%), Positives = 47/82 (57%)
+
+Query:    83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+             +Q+R  R L+NR  AQ+ R ++  +   LE+EK Q+ QQ + L Q +S++  E +   ++
+Sbjct:   276 KQKR--RTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVEHLKQEISRLVRERDAYKEK 333
+
+Query:   143 LAQLAAE-VRGSRANTPMPGSP 163
+               +L +   R + +++  P SP
+Sbjct:   334 YEKLVSNGFRENGSSSDNPSSP 355
+
+
+>sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein delta OS=Homo sapiens
+            GN=CEBPD PE=1 SV=2
+        Length = 269
+
+ Score = 92 (37.4 bits), Expect = 0.17, P = 0.16
+ Identities = 32/130 (24%), Positives = 57/130 (43%)
+
+Query:    19 PASEVPVLTVSPADT--SLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA 76
+             P S +P    + A T  SL +A   T    PE  + + ++       P P       KR 
+Sbjct:   131 PGSLLPAQVAACAQTVVSLAAAGQPTPPTSPEPPRSSPRQTP----APGPAREKSAGKRG 186
+
+Query:    77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136
+                   E R  +R  RN  A + SR++ +   ++++ + +++  +N+ L QR+ Q+  + 
+Sbjct:   187 PDRGSPEYR--QRRERNNIAVRKSRDKAKRRNQEMQQKLVELSAENEKLHQRVEQLTRDL 244
+
+Query:   137 NRLSQQLAQL 146
+               L Q   QL
+Sbjct:   245 AGLRQFFKQL 254
+
+ Score = 88 (36.0 bits), Expect = 0.49, P = 0.39
+ Identities = 29/98 (29%), Positives = 48/98 (48%)
+
+Query:    60 GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE-RKRLEMEKLENEKIQ- 117
+             GQ  P P +  PPR   +        R E+    R   + S E R+R E   +   K + 
+Sbjct:   153 GQPTP-PTSPEPPRSSPRQTPAPGPAR-EKSAGKRGPDRGSPEYRQRRERNNIAVRKSRD 210
+
+Query:   118 -MEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+               +++NQ + Q+L ++ AEN +L Q++ QL  ++ G R
+Sbjct:   211 KAKRRNQEMQQKLVELSAENEKLHQRVEQLTRDLAGLR 248
+
+
+>sp|P81269|ATF1_MOUSE Cyclic AMP-dependent transcription factor ATF-1 OS=Mus
+            musculus GN=Atf1 PE=2 SV=1
+        Length = 269
+
+ Score = 92 (37.4 bits), Expect = 0.17, P = 0.16
+ Identities = 20/57 (35%), Positives = 37/57 (64%)
+
+Query:    77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133
+             KT+D + +R I R+++NR AA+  R +K+  ++ LEN    +E QN+ L++ L  ++
+Sbjct:   206 KTDDPQLRREI-RLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKTLK 261
+
+
+>sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Avian musculoaponeurotic
+            fibrosarcoma virus AS42 GN=V-MAF PE=1 SV=1
+        Length = 369
+
+ Score = 94 (38.1 bits), Expect = 0.18, P = 0.16
+ Identities = 25/82 (30%), Positives = 47/82 (57%)
+
+Query:    83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142
+             +Q+R  R L+NR  AQ+ R ++  +   LE+EK Q+ QQ + L Q +S++  E +   ++
+Sbjct:   276 KQKR--RTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVEHLKQEISRLVRERDAYKEK 333
+
+Query:   143 LAQLAAE-VRGSRANTPMPGSP 163
+               +L +   R + +++  P SP
+Sbjct:   334 YEKLVSNGFRENGSSSDNPSSP 355
+
+
+>sp|P18846|ATF1_HUMAN Cyclic AMP-dependent transcription factor ATF-1 OS=Homo
+            sapiens GN=ATF1 PE=1 SV=2
+        Length = 271
+
+ Score = 92 (37.4 bits), Expect = 0.18, P = 0.16
+ Identities = 20/57 (35%), Positives = 37/57 (64%)
+
+Query:    77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133
+             KT+D + +R I R+++NR AA+  R +K+  ++ LEN    +E QN+ L++ L  ++
+Sbjct:   208 KTDDPQLKREI-RLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKTLK 263
+
+
+>sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2
+        Length = 1943
+
+ Score = 102 (41.0 bits), Expect = 0.18, P = 0.16
+ Identities = 28/120 (23%), Positives = 65/120 (54%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+             + Q +K E+++  ++R    +E+   +      +R K E+ +E+RR +++L++    +  
+Sbjct:   586 RQQRLKREQEERLEQRLK-REEVERLEQEERREQRLKREEPEEERR-QQLLKSEEQEERR 643
+
+Query:   101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160
+             +++ R E ++   ++++ E++ + L QRL + E E  R  Q+LA+   E    R  + +P
+Sbjct:   644 QQQLRREQQERREQRLKREEEEERLEQRLKR-EHEEERREQELAEEEQEQARERIKSRIP 702
+
+ Score = 101 (40.6 bits), Expect = 0.23, P = 0.21
+ Identities = 31/116 (26%), Positives = 59/116 (50%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA-KTEDEKEQRRIERVLRNRAAAQT 99
+             + Q +K EE+K  ++ +   +E  + +     R +  K E+E+ Q+R++R    R   + 
+Sbjct:   546 REQLLKREEEKRLEQER---REQRLKREQEERRDQLLKREEERRQQRLKREQEERLEQRL 602
+
+Query:   100 SRER-KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+              RE  +RLE E+   ++++ E+  +   Q+L + E +  R  QQL +   E R  R
+Sbjct:   603 KREEVERLEQEERREQRLKREEPEEERRQQLLKSEEQEERRQQQLRREQQERREQR 658
+
+ Score = 100 (40.3 bits), Expect = 0.30, P = 0.26
+ Identities = 30/112 (26%), Positives = 61/112 (54%)
+
+Query:    40 VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 99
+             ++ +E K +E++P ++R+   +E  + K      +R + E+E++Q+R+ R  + R   + 
+Sbjct:   253 LRKEEEKLQEEEPQRQRELQEEEEQLRKLERQELRRERQEEEQQQQRLRREQQLRRKQE- 311
+
+Query:   100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+               ER+  + E+ E ++ + EQQ +   Q+L + + E  R  QQL +   E R
+Sbjct:   312 -EERREQQEERREQQE-RREQQEERREQQLRREQEE--RREQQLRREQEEER 359
+
+ Score = 90 (36.7 bits), Expect = 3.7, P = 0.97
+ Identities = 31/108 (28%), Positives = 57/108 (52%)
+
+Query:    48 EEKKPAKKRKS-WGQELPVPKTNLPPRKRAKTEDEKEQRRIER--VLRNRAAAQTSRERK 104
+             EE+K  +KR++   +E    +   P R+R   E+E++ R++ER  + R R   +  ++R 
+Sbjct:   241 EEEKEWRKRETVLRKEEEKLQEEEPQRQRELQEEEEQLRKLERQELRRERQEEEQQQQRL 300
+
+Query:   105 RLEME-KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151
+             R E + + + E+ + EQQ +   Q+  + E +  R  QQL +   E R
+Sbjct:   301 RREQQLRRKQEEERREQQEERREQQ-ERREQQEERREQQLRREQEERR 347
+
+ Score = 90 (36.7 bits), Expect = 3.7, P = 0.97
+ Identities = 29/119 (24%), Positives = 59/119 (49%)
+
+Query:    41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100
+             + ++ + ++K   K+ +  G+E P  +      K+ + E+E +Q   E++LR     +  
+Sbjct:   956 RERQYRKDKKLQQKEEQLLGEE-PEKRRRQEREKKYREEEELQQEE-EQLLREEREKRRR 1013
+
+Query:   101 RE-----RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154
+             +E     RK+ E+++ E E++  E++ +  LQ   +   E   L Q+  QL  E R +R
+Sbjct:  1014 QEWERQYRKKDELQQ-EEEQLLREEREKRRLQERERQYREEEELQQEEEQLLGEERETR 1071
+
+ Score = 90 (36.7 bits), Expect = 3.7, P = 0.97
+ Identities = 32/119 (26%), Positives = 59/119 (49%)
+
+Query:    43 QEVKPEE-KKPAKKRKSW-GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR----NRAA 96
+             QE + +  K+  ++R+ W  +E    +     RK+    D++E+RR ER L+     R  
+Sbjct:   440 QERREQRLKREQEERRDWLKREEETERHEQERRKQQLKRDQEEERR-ERWLKLEEEERRE 498
+
+Query:    97 AQTSRERK-RLEMEKLENEKIQMEQQNQFLLQRL---SQMEAENNRLSQQLAQLAAEVR 151
+              Q  RE++ R E E+   ++++ +++ + L QRL    Q+  E     +QL +   E R
+Sbjct:   499 QQERREQQLRREQEERREQRLKRQEEEERLQQRLRSEQQLRREQEERREQLLKREEEKR 557
+
+ Score = 89 (36.4 bits), Expect = 4.7, P = 0.991
+ Identities = 33/111 (29%), Positives = 55/111 (49%)
+
+Query:    43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102
+             ++++ EE+K AK+R    QE           KR + E +++ R  E++L+ R   Q  R 
+Sbjct:  1297 EQLEREEQKEAKRRDRKSQEEKQLLREEREEKRRRQETDRKFREEEQLLQEREE-QPLRR 1355
+
+Query:   103 RKRLEMEKLENEKIQMEQQNQFLL--QRLSQMEAENNRLSQQLAQLAAEVR 151
+             ++R + +  E E    EQ  +FL   QRL + E E   L ++  QL  + R
+Sbjct:  1356 QER-DRKFREEELRHQEQGRKFLEEEQRLRRQERERKFLKEE-QQLRCQER 1404
+
+
+>sp|Q4X1V0|NDE1_ASPFU Nuclear distribution protein nudE homolog 1
+            OS=Aspergillus fumigatus GN=nde1 PE=3 SV=1
+        Length = 621
+
+ Score = 95 (38.5 bits), Expect = 0.18, Sum P(2) = 0.17
+ Identities = 39/131 (29%), Positives = 63/131 (48%)
+
+Query:   107 EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP-GSPAT 165
+             EM   E E+ ++  +NQ L   LS ++ E   + ++L    AE++ SR   P+   SP+T
+Sbjct:   178 EMRAGEQEREKLRIENQRLRDELSDLKIETEIIHEKLRN--AELQNSRRRKPISLRSPST 235
+
+Query:   166 ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP-AVSVAGLE 224
+                  TP LF +     P   I   +P  S  +PTLK S ++ ++     P + S + L 
+Sbjct:   236 PQ---TPDLFNRS----PASSI-VSSPLFS--TPTLKTSLMSATATPPSPPISESSSSLR 285
+
+Query:   225 GDGSALPLFDL 235
+                +A+P F L
+Sbjct:   286 KSMNAMPGFPL 296
+
+ Score = 84 (34.6 bits), Expect = 4.6, P = 0.99
+ Identities = 33/134 (24%), Positives = 62/134 (46%)
+
+Query:    80 DEKEQRRIERVL---RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136
+             + K    IER +       A +  RE+ R+E ++L +E   ++ + + + ++L   E +N
+Sbjct:   162 ESKYNVAIERAVLLEEEMRAGEQEREKLRIENQRLRDELSDLKIETEIIHEKLRNAELQN 221
+
+Query:   137 NRLSQQLAQLAAEVRGSRANTP-----MPGSPATASPTL-TPTLFKQERDELPLERIPFP 190
+             +R  + ++  +     S   TP      P S   +SP   TPTL   +   +     P P
+Sbjct:   222 SRRRKPISLRSP----STPQTPDLFNRSPASSIVSSPLFSTPTL---KTSLMSATATP-P 273
+
+Query:   191 TPSLSDYSPTLKPS 204
+             +P +S+ S +L+ S
+Sbjct:   274 SPPISESSSSLRKS 287
+
+ Score = 44 (20.5 bits), Expect = 0.18, Sum P(2) = 0.17
+ Identities = 12/40 (30%), Positives = 22/40 (55%)
+
+Query:    81 EKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 120
+             +   R +E  L     A  S +R+RL  EK+++ K ++E+
+Sbjct:    40 QASSRELEAELEKDIEA--SEKRERLLKEKVDSLKYEVEE 77
+
+
+>sp|Q8R1H8|BATF2_MOUSE Basic leucine zipper transcriptional factor ATF-like 2
+            OS=Mus musculus GN=Batf2 PE=2 SV=1
+        Length = 277
+
+ Score = 79 (32.9 bits), Expect = 0.18, Sum P(2) = 0.17
+ Identities = 15/59 (25%), Positives = 35/59 (59%)
+
+Query:    77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAE 135
+             +T+  + Q+++++  +NR AAQ SR++   + + L  +   +E+QN  L + +  ++ E
+Sbjct:    12 ETDLGESQKQLKKKQKNRVAAQRSRQKHTSKADALHQQHESLEKQNHALRKEIQALQTE 70
+
+ Score = 52 (23.4 bits), Expect = 0.18, Sum P(2) = 0.17
+ Identities = 20/68 (29%), Positives = 27/68 (39%)
+
+Query:   137 NRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF----PTP 192
+             N   +QL          RA    PG  +  SP L P+L      +  + R P     P+P
+Sbjct:   117 NGCQEQLGLFQTPGSSPRAQHLSPGPCSHESPGLLPSLLPSLAFDPLMVRTPLAQLSPSP 176
+
+Query:   193 SLSDYSPT 200
+              LS  SP+
+Sbjct:   177 VLSASSPS 184
+
+
+>sp|Q66J36|NFIL3_XENLA Nuclear factor interleukin-3-regulated protein
+            OS=Xenopus laevis GN=nfil3 PE=2 SV=1
+        Length = 456
+
+ Score = 95 (38.5 bits), Expect = 0.19, P = 0.17
+ Identities = 35/132 (26%), Positives = 62/132 (46%)
+
+Query:    31 ADTSLNSADVKTQEVKP-EEKKPAKKRKSWGQELPVP-KTNLPPRKRAKTEDEKEQRRI- 87
+             AD+ + +  V +  +    E   +     +   LPV  K++   RKR    DEK+     
+Sbjct:    11 ADSRMENILVLSSNIPDMSESMDSSNDMLYSDGLPVKNKSSSCRRKREFIPDEKKDAMYW 70
+
+Query:    88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147
+             E+  +N  AA+ SRE++RL    LEN+ I + ++N  L   L  ++ +   +S      A
+Sbjct:    71 EKRRKNNEAAKRSREKRRLNDMVLENKLIALGEENASLKTELLSLKLKFGLISS--TSYA 128
+
+Query:   148 AEVRGSRANTPM 159
+              E++   ++T M
+Sbjct:   129 QEIQKVTSSTAM 140
+
+
+>sp|P13816|GARP_PLAFF Glutamic acid-rich protein OS=Plasmodium falciparum
+            (isolate FC27 / Papua New Guinea) GN=GARP PE=4 SV=1
+        Length = 678
+
+ Score = 97 (39.2 bits), Expect = 0.19, P = 0.17
+ Identities = 33/142 (23%), Positives = 65/142 (45%)
+
+Query:    36 NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA 95
+             N ++ K ++ + EE      +K   Q+    K      K+ K ++EKE+++ E+  +   
+Sbjct:   242 NISEDKKEDHQQEEMLKTLDKKERKQKEKEMKEQEKIEKKKKKQEEKEKKKQEKERKK-- 299
+
+Query:    96 AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA 155
+               Q  +ERK+ E E  + +KI+ E++ +   ++  +   + N  + Q     +E   +  
+Sbjct:   300 --QEKKERKQKEKEMKKQKKIEKERKKKEEKEKKKKKHDKENEETMQQPDQTSEETNNEI 357
+
+Query:   156 NTPMPGSPATASPTLTPTLFKQ 177
+               P+P SP T     TP   K+
+Sbjct:   358 MVPLP-SPLT--DVTTPEEHKE 376
+
+
+>sp|P38749|YAP3_YEAST AP-1-like transcription factor YAP3 OS=Saccharomyces
+            cerevisiae GN=YAP3 PE=1 SV=1
+        Length = 330
+
+ Score = 93 (37.8 bits), Expect = 0.19, P = 0.17
+ Identities = 17/67 (25%), Positives = 39/67 (58%)
+
+Query:    76 AKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAE 135
+             A  E+  +  + ++  +NRAA +  RERK   M++L+++ ++ E+  Q LL+ + ++   
+Sbjct:   137 AHNENVPDDSKAKKKAQNRAAQKAFRERKEARMKELQDKLLESERNRQSLLKEIEELRKA 196
+
+Query:   136 NNRLSQQ 142
+             N  ++ +
+Sbjct:   197 NTEINAE 203
+
+
+>sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mus musculus GN=Rnf10 PE=2
+            SV=2
+        Length = 804
+
+ Score = 99 (39.9 bits), Expect = 0.19, Sum P(2) = 0.18
+ Identities = 51/209 (24%), Positives = 87/209 (41%)
+
+Query:    80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139
+             D+ E+R+ +R  + +A  +  RER R+EME  EN++     +    L+ L Q  A N+  
+Sbjct:   588 DDIEKRKRQR--QKKAREERRRER-RIEME--ENKRQGRYPEVHIPLENLQQFPAFNSYT 642
+
+Query:   140 ---SQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSD 196
+                   L   + E  G+ + +P+  SP + +  L   L        P     F   SL D
+Sbjct:   643 CPSDSALGPTSTEGHGALSLSPLSRSPGSHADFLLTPLSPTASQGSP----SFCVGSLED 698
+
+Query:   197 YSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDF 256
+              SP L  + +              A  + D S +P   + SD +  ++D V  P   + F
+Sbjct:   699 DSPFLSFAQMLRVGKAKADGWPKTAPKKDDNSLVPPAPVDSDGESDNSDRVPVPSFQNSF 758
+
+Query:   257 NRLFHGDSSVEPDSSVFEDGLAFDVLEGG 285
+             ++     + ++ D+    D L+ D   GG
+Sbjct:   759 SQAIEA-AFMKLDTPATSDPLSED--RGG 784
+
+ Score = 42 (19.8 bits), Expect = 0.19, Sum P(2) = 0.18
+ Identities = 11/57 (19%), Positives = 27/57 (47%)
+
+Query:     1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRK 57
+             MS D+ +    +  LP T    +  L + P   S  + ++ + +++  +++  KK +
+Sbjct:   546 MSEDVRQRHRYLSHLPLTCEFSICELALQPPVVSKETLEMFSDDIEKRKRQRQKKAR 602
+
+
+>sp|P23923|HBP1B_WHEAT Transcription factor HBP-1b(c38) OS=Triticum aestivum
+            PE=2 SV=1
+        Length = 332
+
+ Score = 93 (37.8 bits), Expect = 0.19, P = 0.18
+ Identities = 24/59 (40%), Positives = 36/59 (61%)
+
+Query:    73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131
+             R R K  D+K  RR+ +   NR AA+ SR RK+  +++LEN ++++ Q  Q L QR  Q
+Sbjct:    37 RSRDKNGDQKTMRRLAQ---NREAARKSRLRKKAYVQQLENSRLKLTQLEQEL-QRARQ 91
+
+
+>sp|Q9D5R3|CCD41_MOUSE Coiled-coil domain-containing protein 41 OS=Mus musculus
+            GN=Ccdc41 PE=2 SV=2
+        Length = 692
+
+ Score = 97 (39.2 bits), Expect = 0.19, P = 0.18
+ Identities = 44/182 (24%), Positives = 78/182 (42%)
+
+Query:    49 EKKPAKKRKSWGQELPVPKTNLPPRKRAKTE-DEKEQRRIERVLRNRAAAQTSRERKRLE 107
+             EK   +K+  W +E       +  R+    +  EK QR      + ++  +   +R + +
+Sbjct:   516 EKTLEEKQIQWLEEKHKLHERITDREEKYNQAKEKLQRAATAQKKRKSLHENKLKRLQEK 575
+
+Query:   108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS 167
+             +E LE +K ++E +NQ L ++    E E  RL ++L  +       R+   +P  P TAS
+Sbjct:   576 VEVLEAKKEELETENQVLNRQNVPFE-EYTRLQKRLKDIQRRHNEFRSLILVPNMPPTAS 634
+
+Query:   168 PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA---ESSDVAQHPAVSVAGLE 224
+               ++P  F Q    +P   + FP P L +     + S L    E  +  Q   +   G  
+Sbjct:   635 --ISPANF-QSAVTVPGAELSFP-PHLQEEQHQRELSLLRKRLEELETTQRKQLEELGSP 690
+
+Query:   225 GD 226
+             G+
+Sbjct:   691 GE 692
+
+
+>sp|Q9QXL2|KI21A_MOUSE Kinesin-like protein KIF21A OS=Mus musculus GN=Kif21a
+            PE=1 SV=2
+        Length = 1672
+
+ Score = 101 (40.6 bits), Expect = 0.20, P = 0.18
+ Identities = 39/164 (23%), Positives = 77/164 (46%)
+
+Query:    35 LNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRN 93
+             L +A  +   +   + +  K+ K   Q+ + + KT +   K+ K E EK   R+    RN
+Sbjct:   737 LQTAQKEHARLLKNQSQYEKQLKKLQQDVMEMKKTKVRLMKQMKEEQEKA--RLTESRRN 794
+
+Query:    94 RAAAQTSRE-RKR-LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA-QLAAEV 150
+             R  AQ  ++ RKR  ++  LE +K   E   +   + ++ +  +   +S ++A ++  ++
+Sbjct:   795 REIAQLKKDQRKRDHQLRLLEAQKRNQEVVLRRKTEEVTALRRQVRPMSDKVAGKVTRKL 854
+
+Query:   151 RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIP-FPTPS 193
+               S +  P  GS A +    T     Q++  +P+ R+   PTP+
+Sbjct:   855 SSSESPAPDTGSSAASGEADTSRPGTQQKMRIPVARVQALPTPT 898
+
+
+>sp|Q9UPT6|JIP3_HUMAN C-Jun-amino-terminal kinase-interacting protein 3 OS=Homo
+            sapiens GN=MAPK8IP3 PE=1 SV=3
+        Length = 1336
+
+ Score = 95 (38.5 bits), Expect = 0.20, Sum P(2) = 0.18
+ Identities = 38/152 (25%), Positives = 69/152 (45%)
+
+Query:    62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRN-RAAAQTSRERKRLEMEKL------ENE 114
+             E  V +  L   K+AK + E   + +E  L+  ++ A  +R   + E E +      E++
+Sbjct:   454 EQEVLRGELEAAKQAKVKLENRIKELEEELKRVKSEAIIARREPKEEAEDVSSYLCTESD 513
+
+Query:   115 KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS---RANTPMPGSPATASPTLT 171
+             KI M Q+ +F    ++++  E N+  ++L +L   VR +   RA+   P        T+ 
+Sbjct:   514 KIPMAQRRRFTRVEMARVLMERNQYKERLMELQEAVRWTEMIRASREHPSVQEKKKSTIW 573
+
+Query:   172 P---TLFKQERDELPLERIPFPTPSLSDYSPT 200
+                  LF       P +R P+P+ ++   SPT
+Sbjct:   574 QFFSRLFSSSSSPPPAKR-PYPSVNIHYKSPT 604
+
+ Score = 51 (23.0 bits), Expect = 0.20, Sum P(2) = 0.18
+ Identities = 18/58 (31%), Positives = 25/58 (43%)
+
+Query:     8 TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV 65
+             T S+  +   TP S VP   V+P + SL          K   K+  +KR S   E+ V
+Sbjct:   265 TPSTTGTKSNTPTSSVPSAAVTPLNESLQPLGDYGVGSK-NSKRAREKRDSRNMEVQV 321
+
+
+>sp|P16884|NFH_RAT Neurofilament heavy polypeptide OS=Rattus norvegicus GN=Nefh
+            PE=1 SV=4
+        Length = 1072
+
+ Score = 99 (39.9 bits), Expect = 0.20, P = 0.18
+ Identities = 57/248 (22%), Positives = 93/248 (37%)
+
+Query:     6 EKTMSSVDSLPATPAS-EVPVLTVSPADTSLNSAD-VKTQEVK-PEEKKPAKKRKSWGQE 62
+             EK  S V      PA  + P    SP      S +  KT +VK PE K PAK+      +
+Sbjct:   784 EKAKSPVKEEIKPPAEVKSPEKAKSPMKEEAKSPEKAKTLDVKSPEAKTPAKEEAKRPAD 843
+
+Query:    63 LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN 122
+             +  P+    P K      EKE+ R E+V   +   ++  E    E++  E  K ++E++ 
+Sbjct:   844 IRSPEQVKSPAKEEAKSPEKEETRTEKVAPKKEEVKSPVE----EVKAKEPPK-KVEEEK 898
+
+Query:   123 QFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDEL 182
+                  +    E++ +   ++  +  AE +      P   SP  A         K+++   
+Sbjct:   899 TPATPKTEVKESKKDEAPKEAQKPKAEEKEPLTEKPKD-SPGEAKKEEA----KEKKAAA 953
+
+Query:   183 PLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHH 242
+             P E     TP+        KP   AE +  A+ P+      +     +P      D K  
+Sbjct:   954 PEEE----TPAKLGVKEEAKPKEKAEDAK-AKEPSKPSEKEKPKKEEVPAAPEKKDTKEE 1008
+
+Query:   243 STDDVAAP 250
+              T +   P
+Sbjct:  1009 KTTESKKP 1016
+
+
+>sp|Q60765|ATF3_MOUSE Cyclic AMP-dependent transcription factor ATF-3 OS=Mus
+            musculus GN=Atf3 PE=2 SV=1
+        Length = 181
+
+ Score = 88 (36.0 bits), Expect = 0.20, P = 0.18
+ Identities = 29/99 (29%), Positives = 47/99 (47%)
+
+Query:    62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121
+             E+ V K+   P      EDE+++RR ER   N+ AA   R +K+ + E L+ E  ++E  
+Sbjct:    73 EMSVTKSEAAPE-----EDERKRRRRER---NKIAAAKCRNKKKEKTECLQKESEKLESV 124
+
+Query:   122 NQFLLQRLSQMEAENNRLSQQLA--QLAAEVRGSRANTP 158
+             N  L  ++ +++ E   L   L   +    VR     TP
+Sbjct:   125 NAELKAQIEELKNEKQHLIYMLNLHRPTCIVRAQNGRTP 163
+
+
+>sp|Q9N0J3|CEBPD_SHEEP CCAAT/enhancer-binding protein delta OS=Ovis aries
+            GN=CEBPD PE=3 SV=1
+        Length = 255
+
+ Score = 91 (37.1 bits), Expect = 0.20, P = 0.18
+ Identities = 28/104 (26%), Positives = 51/104 (49%)
+
+Query:    64 PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE-RKRLEMEKLENEKIQ--MEQ 120
+             P P  +  P +R+         R ++    R   + S E R+R E   +   K +   ++
+Sbjct:   142 PTPPASPDPPRRSPAPPAPGPAR-DKAAGKRGPDRGSPEYRQRRERNNIAVRKSRDKAKR 200
+
+Query:   121 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRAN-TPMPGSP 163
+             +NQ + Q+L ++ AEN +L Q++ QL  ++ G R     +PG+P
+Sbjct:   201 RNQEMQQKLVELSAENEKLQQRVEQLTRDLAGLRRFFKQLPGAP 244
+
+
+>sp|A5DLJ8|NST1_PICGU Stress response protein NST1 OS=Pichia guilliermondii
+            GN=NST1 PE=3 SV=2
+        Length = 1107
+
+ Score = 99 (39.9 bits), Expect = 0.20, P = 0.18
+ Identities = 42/202 (20%), Positives = 91/202 (45%)
+
+Query:    39 DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQ 98
+             D + +  + EE+   ++ +   +EL   +       R K E+EK +R  E  L+  A  +
+Sbjct:   632 DEERRRKEEEERAREEELRLKQEELRAEQKRRKEEARQKKEEEKRKRIEELRLKKEAEKK 691
+
+Query:    99 TSRERKRLEME-KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT 157
+                E++R E E K + E+   E++ + ++++  Q++ E     +Q  +        +   
+Sbjct:   692 KQEEKERKERELKEKKERESKEKEEREMMEKKEQLKKEQQPKVEQTQE--------KPQA 743
+
+Query:   158 PMPGSPATASPTLT-PTLFKQERDELPLERIPFPTPSLSD-YSPTLKPSTLAES--SDVA 213
+             P P   + ++P+++ P   +Q+     L+    PT  L +  S  L+  +L +   S ++
+Sbjct:   744 P-PSQTSQSNPSVSDPISSRQDNSVSSLD----PTHDLQNAISSGLEQLSLGQQPMSHIS 798
+
+Query:   214 QHPAVSVAGLEGDGSALPLFDL 235
+               P+ S++ L     + P  D+
+Sbjct:   799 SQPSQSISQLPIQPPSQPFLDM 820
+
+WARNING:  HSPs involving 915 database sequences were not reported due to the
+          limiting value of parameter B = 250.
+
+NOTE:  You may want to consider using a low-complexity sequence filter to
+       reduce the number of spurious matches that may be appearing in the
+       output.  See the filter option at
+       http://blast.wustl.edu/blast/parameters.html#filter.
+
+
+Parameters:
+
+  ctxfactor=1.00
+  E=10
+
+  Query                        -----  As Used  -----    -----  Computed  ----
+  Frame  MatID Matrix name     Lambda    K       H      Lambda    K       H
+   +0      0   BLOSUM62        0.309   0.127   0.355    same    same    same
+               Q=9,R=2         0.244   0.0300  0.180     n/a     n/a     n/a
+
+  Query
+  Frame  MatID  Length  Eff.Length     E    S W   T  X   E2     S2
+   +0      0      345       345       8.6  80 3  11 23  0.50    34
+                                                    33  0.45    37
+
+
+Statistics:
+
+  Database:  /misc/data0/databases/Uniprot/uniprot_sprot_wu.fasta
+   Title:  uniprot_sprot_wu.fasta
+   Posted:  9:42:10 AM EDT Apr 12, 2010
+   Created:  9:42:26 AM EDT Apr 12, 2010
+   Format:  XDF-1
+   # of letters in database:  181,677,051
+   # of sequences in database:  516,081
+   # of database sequences satisfying E:  1165
+  No. of states in DFA:  594 (126 KB)
+  Total size of DFA:  363 KB (2145 KB)
+  Time to generate neighborhood:  0.00u 0.00s 0.00t   Elapsed:  00:00:00
+  No. of threads or processors used:  8
+  Search cpu time:  26.59u 0.08s 26.67t   Elapsed:  00:00:04
+  Total cpu time:  37.32u 0.15s 37.47t   Elapsed:  00:00:05
+  Start:  Fri Apr 16 09:13:43 2010   End:  Fri Apr 16 09:13:48 2010
+NOTES ISSUED:  2
+WARNINGS ISSUED:  2
+
+EXIT CODE 0
diff --git a/demotic/fasta2profmark b/demotic/fasta2profmark
new file mode 100755
index 0000000..c972ff1
--- /dev/null
+++ b/demotic/fasta2profmark
@@ -0,0 +1,11 @@
+#! /usr/bin/perl
+
+use demotic_fasta;
+
+while (&demotic_fasta::parse(\*STDIN))
+{
+    &demotic_fasta::profmarkout(\*STDOUT);
+}
+
+
+
diff --git a/demotic/fasta2tbl b/demotic/fasta2tbl
new file mode 100755
index 0000000..f840da6
--- /dev/null
+++ b/demotic/fasta2tbl
@@ -0,0 +1,10 @@
+#! /usr/bin/perl
+
+use demotic_fasta;
+
+while (&demotic_fasta::parse(\*STDIN))
+{
+    &demotic_fasta::tblout(\*STDOUT);
+}
+
+
diff --git a/demotic/h22profmark b/demotic/h22profmark
new file mode 100755
index 0000000..84c8b01
--- /dev/null
+++ b/demotic/h22profmark
@@ -0,0 +1,10 @@
+#! /usr/bin/perl
+
+use demotic_h2;
+
+while (&demotic_h2::parse(\*STDIN))
+{
+    &demotic_h2::profmarkout(\*STDOUT);
+}
+
+
diff --git a/demotic/h22tbl b/demotic/h22tbl
new file mode 100755
index 0000000..f30be04
--- /dev/null
+++ b/demotic/h22tbl
@@ -0,0 +1,10 @@
+#! /usr/bin/perl
+
+use demotic_h2;
+
+while (&demotic_h2::parse(\*STDIN))
+{
+    &demotic_h2::tblout(\*STDOUT);
+}
+
+
diff --git a/demotic/hmmer2profmark b/demotic/hmmer2profmark
new file mode 100755
index 0000000..19e1830
--- /dev/null
+++ b/demotic/hmmer2profmark
@@ -0,0 +1,10 @@
+#! /usr/bin/perl
+
+use demotic_hmmer;
+
+while (&demotic_hmmer::parse(\*STDIN))
+{
+    &demotic_hmmer::profmarkout(\*STDOUT);
+}
+
+
diff --git a/demotic/hmmer2tbl b/demotic/hmmer2tbl
new file mode 100755
index 0000000..08e8d8a
--- /dev/null
+++ b/demotic/hmmer2tbl
@@ -0,0 +1,10 @@
+#! /usr/bin/perl
+
+use demotic_hmmer;
+
+while (&demotic_hmmer::parse(\*STDIN))
+{
+    &demotic_hmmer::tblout(\*STDOUT);
+}
+
+
diff --git a/demotic/infernal_tab2gff.pl b/demotic/infernal_tab2gff.pl
new file mode 100755
index 0000000..058d933
--- /dev/null
+++ b/demotic/infernal_tab2gff.pl
@@ -0,0 +1,269 @@
+#!/usr/bin/perl -w -I/groups/eddy/home/jonest/Demotic
+
+# TAJ 6/23/08 last mod 7/10/08
+# Purpose: flexibly convert "cmsearch --tabfile TAB.out" output to GFF format
+# Based upon my "blastn2gff.pl" script. 
+#
+# OUTPUT GFF2 format:
+# ------------------
+# CONTIG   METHOD      TYPE            START      END      SCORE    ORI   FRAME  GENE "genename"; note "free text"
+# $contig  $method     $type           $GFFstart  $GFFend  $score   $ori  "."    $gene_name       $note 
+# na       "Infernal"  "Infernal_hit"  na         na       na       na    "."    ::$cm_name[i]    ""             # Defaults
+# na       -m          -t              na         na       na       na    na     -g               -n             # Options
+#
+# Todo List
+# -----------------------------------------------------
+# (1) Allow for GFF3 format output
+# (2) Possibly all switch to produce separate GFF files for each report
+# -----------------------------------------------------
+
+use strict;
+use demotic_infernal_tab; 
+use Getopt::Std;
+getopts ('E:s:G:l:m:t:g:n:u:d:b');
+our ($opt_E, $opt_s, $opt_G, $opt_l, $opt_m, $opt_t, $opt_g, $opt_n, $opt_b, $opt_u, $opt_d);
+
+(my $script = $0) =~ s/^.*\///;
+my $USAGE = "
+Parse cmsearch tabfile output, filter hits on user-supplied cutoffs, and output hits
+in GFF2 format. 
+======================================================================================
+   USAGE: $script <options> tabfile.out > foo.gff
+======================================================================================
+     tabfile.out ==> Output file created by using cmsearch switch '--tabfile tab.out' 
+                     from Infernal rc1.0
+
+OPTIONS
+--------------------------------------------------------------------------------------
+ -E  Eval_cutoff       (E)-value cutoff -- reject hits with E-value > Eval_cutoff
+ -s  score_cutoff      (s)score cutoff -- reject hits with bitscore < score_cutoff
+ -G  GC_cutoff         (G)C percent cutoff (0..100) -- reject hits with GC < GC_cutoff
+ -l  len_cutoff        (l)ength cutoff -- reject hits with length < len_cutoff
+ -m  method            (m)ethod. Default is 'Infernal'        # for GFF output
+ -t  type              (t)ype. Default is 'Infernal_hit'      # for GFF output
+ -g  gene_name         (g)ene name. Default is CM query name  # for GFF output  (1)
+ -n  \"a short note\"  (n)ote. No default                     # for GFF output
+ -u  X                 (u)pstream pad   -- add X NTs to BEGINNING of all hits   (2)
+ -d  Y                 (d)ownstream pad -- add Y Nts to END       of all hits   (2)
+--------------------------------------------------------------------------------------
+
+NOTES:
+ (1) == Default behavior obtains a (non-unique) 'gene name' from the CM name. For 
+        multiple CM queries having the same name, Infernal differentiates the models
+        by adding a '.N' version (eg CM.1, CM.2, etc). Specifying the gene name by '-g' 
+        results in the same gene name being used for all hits in all reports contained 
+        in that tabfile. 
+ (2) == The values always add to the length of the feature. X and Y cannot be negative!
+        It's highly recommended that you use the '-n NOTE' feature to annotate the 
+        changes made to the GFF start and end sites due to these flags. Script warns
+        when padding beyond the 5' end of the contig (and sets it to 1), but cannot edge
+        detect for the 3' end of the contig. 
+
+*************      While this script can parse 'tabfile' files with output from 
+*  WARNING  *      multiple queries (possibly containing very different CMs), only one
+*************      GENE name, METHOD and TYPE will be added to all GFF lines created!
+";
+
+my $CMs          = 0;     # number of CMs in tabfile
+my $hits         = 0;     # number of hits within current CM
+my $Eval_cutoff  = 10000; # arbitrarily large E-value default cutoff
+my $score_cutoff = -1000; # arbitrarily low bitscore default cutoff
+my $GC_cutoff    = 0;     # minimum %GC cutoff 
+my $len_cutoff   = 0;     # minimum length cutoff
+my $up_pad       = 0;     # add X NTs to upstream/start of hit   NB: applies to all hits!
+my $down_pad     = 0;     # add Y NTs to downstream/end of hit   NB: applies to all hits!
+my $pass_filter  = 0;
+ 
+# get cutoff & coord padding options (NB: opt's m,t,g,n  obtained during sub print_GFF2)
+$Eval_cutoff  = $opt_E              if ($opt_E);
+$score_cutoff = $opt_s              if ($opt_s); 
+$GC_cutoff    = $opt_G              if ($opt_G); 
+$len_cutoff   = $opt_l              if ($opt_l);
+$up_pad       = $opt_u              if ($opt_u);
+$down_pad     = $opt_d              if ($opt_d);
+if ($up_pad   !~ /^\+?\d+$/) { die "Illegal pad: '$up_pad'; must be a whole positive number.";   }
+if ($down_pad !~ /^\+?\d+$/) { die "Illegal pad: '$down_pad'; must be a whole positive number."; }
+if (($up_pad > 100000) || ($down_pad > 100000)) {
+    die "Whoa, whoa! Slow down their Feyman. You're being a bit excessive with your pads. --mgmt";
+}
+
+
+#  =========================================================
+#  |   demotic_infernal_tab -- Parameters                  |
+#  =========================================================
+# 
+#  Returns SINGLE STRING; applies to entire tabfile (regardless of no. of CMs)
+#  ----------------------------------------------------------------------------
+#    $model_num     # number of CM's used in the search                               # check
+#    $command       # command line used to run search                                 # check
+#    $date          # date search was run                                             # check
+#    $db_recs       # number of records in target DB                                  # check
+#    $db_size       # DB size (in MB)                                                 # check
+#
+#  Returns LIST; 0th position in list corresponds to 1st CM in the tabfile 
+#        EX:  $cm_name[2]      # name of the CM query used in 3rd report
+#  ----------------------------------------------------------------------------
+#    @cm_name       # Covariation Model(s) name; 1st model is 0th in array            # check
+#    @time_expect   # expected run time (quoted, not converting into hr:min)          # check
+#    @time_actual   # actual run time   (quoted, not converting into hr:min)          # check
+#    @num_hits      # tracks number of hits for each model                            # check
+#
+#  Returns 2D ARRAY [i][j];
+#     "i" = list of CMs in report (as above); frequently only 1 report, or i=0
+#     "j" = list of _hits_ for each CM (0th -> 1st hit), in order appearing in report
+#        EX:  ${$GC[1]}->[3]   # GC value of 4th (3+1) hit in the 2nd (1+1) search 
+#  ----------------------------------------------------------------------------
+#    @t_name        # (2D); target fasta record name                                  # check
+#    @t_start       # (2D); start location in fasta target \___   For "-" ori hits,   # check
+#    @t_stop        # (2D); stop  location in fasta target /      t_start > t_stop    # check
+#    @q_start       # (2D); start location in CM query     \___   Regardless of ori,  # check
+#    @q_stop        # (2D); stop  location in CM query     /      q_start < q_stop    # check
+#    @bitscore      # (2D); bit score                                                 # check
+#    @Eval          # (2D); E-value  // can be in scientific notation                 # check
+#    @GC            # (2D); %GC                                                       # check
+#  =========================================================
+
+
+# Parse infernal 'tabfile'; possibly involving multiple query CMs
+die $USAGE unless (@ARGV == 1);
+my $tabfile = shift;
+open (TABFILE, "$tabfile") || die "Can't open $tabfile. You fuckin' wif me?"; 
+&demotic_infernal_tab::parse(\*TABFILE); 
+close TABFILE;
+
+$CMs  = $demotic_infernal_tab::model_num;                  # number of query CMs
+
+# For all hits, for all CMs in tabfile report -> print in GFF2 formt if passes all cutoffs
+foreach my $rep_num (0..$CMs-1) {                          # looping over i CMs
+    $hits = $demotic_infernal_tab::num_hits[$rep_num]; 
+    foreach my $hit_num (0..$hits-1) {                     # looping over j hits from ith CM 
+	$pass_filter = &filter_hit($rep_num, $hit_num); 
+	if ($pass_filter) {
+	    if ($pass_filter) {
+		&print_GFF2 ($rep_num, $hit_num);
+	    }
+	    else  {  next;  } 
+	}
+    }
+}
+
+
+############# Validation -- Make sure I'm parsing hit list for all CMs properly  #############
+if ($opt_b) {      # Thouroughly embarassing parse dump, for manual validation // not complete
+    foreach my $rep (0..($CMs-1)) {
+	my $name = $demotic_infernal_tab::cm_name[$rep]; 
+	$hits = $demotic_infernal_tab::num_hits[$rep];
+	print "------------------------------------------------\n";
+	print "Model \#", ($rep+1), " ==> cm_name: [$name]  containing $hits hits\n"; 
+	print "------------------------------------------------\n";
+	foreach my $j (0..$hits-1) { # looping over all hits for that CM
+	    my $contig  = $demotic_infernal_tab::t_name[$rep]->[$j];
+	    my $start_t = $demotic_infernal_tab::t_start[$rep]->[$j];
+	    my $stop_t  = $demotic_infernal_tab::t_stop[$rep]->[$j];
+	    my $start_q = $demotic_infernal_tab::q_start[$rep]->[$j];
+	    my $stop_q  = $demotic_infernal_tab::q_stop[$rep]->[$j]; 
+	    my $score   = $demotic_infernal_tab::bitscore[$rep]->[$j]; 
+	    my $e_val   = $demotic_infernal_tab::Eval[$rep]->[$j]; 
+	    my $gc      = $demotic_infernal_tab::GC[$rep]->[$j]; 
+	    print "#", ($j+1), ": ",  $contig, 
+	          "  Tar:S-E: ",      $start_t, "-", $stop_t, 
+	          "  Que:S-E: ",      $start_q, "-", $stop_q, 
+	          "  Score: ",        $score, 
+	          "  E-val: ",        $e_val, 
+	          "  %GC: ",          $gc, 
+	          "\n";
+	}
+    }
+}
+
+################# Subroutines  ######################
+
+sub filter_hit {
+# INPUT:  Index to _i_th CM in tabfile, _j_th hit for given CM
+# OUTPUT: 1 if hit passes command line criteria, 0 if it fails the filter
+    my $CM_i   = shift;
+    my $hit_j  = shift; 
+    my $evalue = $demotic_infernal_tab::Eval[$CM_i]->[$hit_j];
+    my $score  = $demotic_infernal_tab::bitscore[$CM_i]->[$hit_j];
+    my $gc     = $demotic_infernal_tab::GC[$CM_i]->[$hit_j];
+    my $begin  = $demotic_infernal_tab::t_start[$CM_i]->[$hit_j];
+    my $end    = $demotic_infernal_tab::t_stop[$CM_i]->[$hit_j];
+    my $len    = 0;
+    if ($begin < $end ) {  $len = $end   - $begin + 1;  }
+    else                {  $len = $begin - $end   + 1;  }
+    if (($evalue <= $Eval_cutoff) && 
+        ($score  >= $score_cutoff) && 
+        ($gc     >= $GC_cutoff) && 
+        ($len    >= $len_cutoff)) {
+	return 1;   # passes all cutoff criteria
+    }
+    else {
+	return 0;   # does not pass all cutoff criteria
+    }
+}
+
+sub print_GFF2 {
+# INPUT:  Index to _i_th CM in tabfile, _j_th hit for given CM
+#         e.g. $demotic_infernal_tab::foo[$i]->[$j]
+# OUTPUT: Infernal hit in GFF2 format (see following)
+# contig    method   type     start     end      score    ori    frame   gene "genename"; note "blah blah"
+# $ctg      $method  $type    $GFFstart $GFFstop $score   $ori   $frame  $gene            $note
+
+    my $CM_i   = shift;
+    my $hit_j  = shift; 
+    my $ctg    = $demotic_infernal_tab::t_name[$CM_i]->[$hit_j];
+    my $start  = $demotic_infernal_tab::t_start[$CM_i]->[$hit_j];
+    my $stop   = $demotic_infernal_tab::t_stop[$CM_i]->[$hit_j];
+    my $score  = $demotic_infernal_tab::bitscore[$CM_i]->[$hit_j];
+    my $frame  = ".";  # used only for CDS
+    my $ori    = "";
+    my $gene   = "gene \"$demotic_infernal_tab::cm_name[$CM_i]\"";     # default
+    my $method = "Infernal";                                           # default
+    my $type   = "Infernal_hit";                                       # default
+    my $note   = "";                                                   # default
+    my $GFFstart = 0;
+    my $GFFstop  = 0;
+    my $over     = 0;
+    if ($opt_g) {  $gene = "gene \"$opt_g\"";  }                       # change default?
+    if ($opt_m) {  $method = "$opt_m";  }                              # change default?
+    if ($opt_t) {  $type = "$opt_t";   }                               # change default?
+    if ($opt_n) {  $note = "; note \"$opt_n\"";  }                     # change default?
+# Note: Unlike blastn, target start/stop dictates ori; while query_start is always <= query_stop.
+###########################################
+#      ========>>>>>>>>>>>>>=========
+#              |           |
+#     (target) start       stop  
+###########################################
+    if ($start <= $stop ) {             
+	$ori = "+";                     
+	$GFFstart = $start - $up_pad;   
+	if ($GFFstart < 1) {
+	    $over = ($GFFstart * -1) + 1;  # distance beyond 5' end of contig
+	    $GFFstart = 1;
+	    warn "(${ctg}:${start}-${stop}) couldn't be padded the full $up_pad NTs! START set to 1.";
+	    print "\# For following hit; pad overshot $over NTs beyond 5' end of hit; START set to 1\n";
+	}
+	$GFFstop  = $stop  + $down_pad; # Can't warn against overpadding; I don't know end of ctg!
+	print ("$ctg\t$method\t$type\t$GFFstart\t$GFFstop\t$score\t$ori\t$frame\t${gene}$note\n");
+    }  
+###########################################
+#     ========<<<<<<<<<<<<<=========
+#             |           |      
+#    (target) stop        start
+###########################################
+    elsif ($start > $stop) {            
+	$ori = "-";                     
+	$GFFstart = $stop  - $down_pad; 
+	if ($GFFstart < 1) {
+	    $over = ($GFFstart * -1) + 1;  # distance beyond 5' end of contig
+	    $GFFstart = 1;
+	    warn "(${ctg}:${start}-${stop}) couldn't be padded the full $up_pad NTs! START set to 1.";
+	    print "\# For following hit; pad overshot $over NTs beyond 3' end of hit; START set to 1\n";
+	}
+	$GFFstop  = $start + $up_pad;   # Can't warn against overpadding; I don't know end of ctg!
+	print ("$ctg\t$method\t$type\t$GFFstart\t$GFFstop\t$score\t$ori\t$frame\t${gene}$note\n");
+    }
+    if ($GFFstart > $GFFstop) {     # meager error checking...
+	die "Illegal GFF coords: GFFstart ($GFFstart) > GFFstop ($GFFstop)\n!"; 
+    }
+}
diff --git a/demotic/regress/fasta-profmark.out b/demotic/regress/fasta-profmark.out
new file mode 100644
index 0000000..4c1656c
--- /dev/null
+++ b/demotic/regress/fasta-profmark.out
@@ -0,0 +1,180 @@
+2e-70	265.5	sp|P55685|Y4WG_RHISN	sp|P55685|Y4WG_RHISN
+3.6	33.0	sp|Q7SY73|ABH6B_XENLA	sp|P55685|Y4WG_RHISN
+2.8e-111	403.1	sp|Q1XGE2|HAC1_ASPOR	sp|Q1XGE2|HAC1_ASPOR
+7e-84	312.1	sp|Q8TFU8|HAC1_EMENI	sp|Q1XGE2|HAC1_ASPOR
+1.6e-13	78.7	sp|Q8TFF3|HAC1_TRIRE	sp|Q1XGE2|HAC1_ASPOR
+9.7e-06	52.0	sp|P41546|HAC1_YEAST	sp|Q1XGE2|HAC1_ASPOR
+4.5e-05	49.2	sp|O24646|HY5_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.0013	45.1	sp|Q3SZZ2|XBP1_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.0015	45.8	sp|A1L224|CR3L2_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.0022	45.6	sp|Q54WN7|BZPF_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.0026	43.3	sp|Q9SM50|HY5_SOLLC	sp|Q1XGE2|HAC1_ASPOR
+0.0062	43.8	sp|Q66HA2|CR3L1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.0079	43.4	sp|Q9Z125|CR3L1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.01	43.1	sp|Q96BA8|CR3L1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.013	43.9	sp|A3LYI0|NST1_PICST	sp|Q1XGE2|HAC1_ASPOR
+0.016	42.4	sp|A2VD01|CR3L2_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.018	41.9	sp|Q08CW8|CR3L4_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.018	42.2	sp|Q70SY1|CR3L2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.018	42.2	sp|Q5RCM9|CR3L2_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.026	41.7	sp|Q8BH52|CR3L2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.029	40.6	sp|P17861|XBP1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.031	40.8	sp|P13346|FOSB_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.056	38.8	sp|Q8W191|HYH_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.064	39.8	sp|P53539|FOSB_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.069	40.3	sp|Q6QDP7|CR3L2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.08	39.9	sp|Q3SYZ3|CR3L3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.091	39.3	sp|Q9TUB3|FOSB_CANFA	sp|Q1XGE2|HAC1_ASPOR
+0.11	39.1	sp|Q06507|ATF4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.13	39.2	sp|Q5FVM5|CR3L3_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.16	38.4	sp|Q90370|MAFB_COTJA	sp|Q1XGE2|HAC1_ASPOR
+0.16	38.4	sp|Q90888|MAFB_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.2	38.3	sp|O97930|FOS_PIG	sp|Q1XGE2|HAC1_ASPOR
+0.22	38.5	sp|Q91XE9|CR3L3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.22	38.1	sp|P18848|ATF4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.23	38.1	sp|O88479|FOS_MESAU	sp|Q1XGE2|HAC1_ASPOR
+0.26	37.9	sp|P01101|FOS_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.27	38.2	sp|Q68CJ9|CR3L3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.27	37.9	sp|Q8TEY5|CR3L4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.27	37.9	sp|Q99090|CPRF2_PETCR	sp|Q1XGE2|HAC1_ASPOR
+0.28	38.2	sp|Q5R9C9|ATF7_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.28	38.2	sp|P17544|ATF7_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.3	37.8	sp|Q5UEM8|CR3L4_MACFA	sp|Q1XGE2|HAC1_ASPOR
+0.37	37.2	sp|Q9Y5Q3|MAFB_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.37	37.4	sp|P01102|FOS_MSVFB	sp|Q1XGE2|HAC1_ASPOR
+0.38	37.2	sp|P51145|FOSL2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.4	38.4	sp|Q9UQ88|CD11A_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.41	38.4	sp|Q9WVS8|MK07_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.41	37.4	sp|Q502F0|CR3LA_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.42	37.0	sp|P15408|FOSL2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.45	37.3	sp|Q8R0S1|ATF7_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.47	37.5	sp|P29747|CREBA_DROME	sp|Q1XGE2|HAC1_ASPOR
+0.47	36.8	sp|Q2PFS4|MAFB_MACFA	sp|Q1XGE2|HAC1_ASPOR
+0.52	36.4	sp|Q9R1S4|XBP1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.53	36.6	sp|P54842|MAFB_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.54	36.7	sp|P47930|FOSL2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.55	38.0	sp|Q2VZV0|IF2_MAGSA	sp|Q1XGE2|HAC1_ASPOR
+0.55	36.4	sp|Q0CEI3|KAPC_ASPTN	sp|Q1XGE2|HAC1_ASPOR
+0.56	36.9	sp|Q61817|CREB3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.56	36.7	sp|Q9ES19|ATF4_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.6	36.5	sp|P54841|MAFB_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.6	36.7	sp|O77628|FOS_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.62	36.3	sp|A1C9M5|KAPC_ASPCL	sp|Q1XGE2|HAC1_ASPOR
+0.67	36.3	sp|Q504L8|MAFB_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.7	36.1	sp|O57342|MAFA_COTJA	sp|Q1XGE2|HAC1_ASPOR
+0.72	36.3	sp|Q3ZCH6|ATF4_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.75	36.3	sp|Q5UEM7|CR3L4_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.77	36.4	sp|P12841|FOS_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.77	34.7	sp|Q16520|BATF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.84	35.7	sp|O35426|XBP1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.86	36.2	sp|P01100|FOS_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.93	36.0	sp|Q8K1L0|CREB5_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.95	37.9	sp|A4R2R1|NST1_MAGGR	sp|Q1XGE2|HAC1_ASPOR
+0.96	36.0	sp|Q9D2A5|CR3L4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.98	36.0	sp|Q8HZP6|FOS_FELCA	sp|Q1XGE2|HAC1_ASPOR
+1.1	34.2	sp|Q9NR55|BATF3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.2	36.1	sp|Q02930|CREB5_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.2	35.4	sp|P42774|GBF1_ARATH	sp|Q1XGE2|HAC1_ASPOR
+1.3	35.2	sp|A2R346|KAPC_ASPNC	sp|Q1XGE2|HAC1_ASPOR
+1.3	35.2	sp|O42290|MAFA_CHICK	sp|Q1XGE2|HAC1_ASPOR
+1.3	35.7	sp|O43889|CREB3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.4	37.1	sp|O60841|IF2P_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.5	36.7	sp|Q5KGK5|EIF3A_CRYNE	sp|Q1XGE2|HAC1_ASPOR
+1.7	33.5	sp|Q9D275|BATF3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.7	35.4	sp|Q1LYG4|CR3LB_DANRE	sp|Q1XGE2|HAC1_ASPOR
+1.7	34.9	sp|Q6DE84|MAFB_XENLA	sp|Q1XGE2|HAC1_ASPOR
+1.7	37.7	sp|Q7TSC1|BAT2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.7	36.1	sp|Q99941|ATF6B_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.8	36.3	sp|Q54Y73|BZPD_DICDI	sp|Q1XGE2|HAC1_ASPOR
+1.8	34.9	sp|P18625|FOSL2_CHICK	sp|Q1XGE2|HAC1_ASPOR
+1.8	35.1	sp|Q56TN0|FOS_PHORO	sp|Q1XGE2|HAC1_ASPOR
+1.8	33.5	sp|O35284|BATF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.9	34.7	sp|Q16534|HLF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.9	34.7	sp|Q8BW74|HLF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.9	35.2	sp|Q63ZM7|STABP_XENLA	sp|Q1XGE2|HAC1_ASPOR
+2.1	35.2	sp|P29681|IMPE2_DROME	sp|Q1XGE2|HAC1_ASPOR
+2.2	35.7	sp|O35451|ATF6B_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+2.3	33.6	sp|Q09926|PCR1_SCHPO	sp|Q1XGE2|HAC1_ASPOR
+2.3	36.0	sp|O13024|INCEA_XENLA	sp|Q1XGE2|HAC1_ASPOR
+2.3	36.0	sp|A0JMT0|CA1AB_XENLA	sp|Q1XGE2|HAC1_ASPOR
+2.3	36.4	sp|Q5RDE1|IF2P_PONAB	sp|Q1XGE2|HAC1_ASPOR
+2.3	34.4	sp|Q4U1U2|MAFA_XENTR	sp|Q1XGE2|HAC1_ASPOR
+2.4	34.4	sp|Q64709|HLF_RAT	sp|Q1XGE2|HAC1_ASPOR
+2.4	34.8	sp|Q54NF3|Y6434_DICDI	sp|Q1XGE2|HAC1_ASPOR
+2.5	35.1	sp|P15336|ATF2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+2.5	36.2	sp|Q553B1|DDX46_DICDI	sp|Q1XGE2|HAC1_ASPOR
+2.8	37.0	sp|P48634|BAT2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+2.8	37.0	sp|Q5TM26|BAT2_MACMU	sp|Q1XGE2|HAC1_ASPOR
+2.9	34.2	sp|A3BYC1|HOX25_ORYSJ	sp|Q1XGE2|HAC1_ASPOR
+3.1	34.7	sp|P16951|ATF2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+3.1	35.4	sp|Q96RN5|MED15_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+3.3	33.8	sp|Q2UNX4|KAPC_ASPOR	sp|Q1XGE2|HAC1_ASPOR
+3.5	36.6	sp|Q80U35|ARHGH_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+3.5	35.2	sp|P0C865|MK07_RAT	sp|Q1XGE2|HAC1_ASPOR
+3.5	32.9	sp|P97875|JDP2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+3.5	32.9	sp|Q78E65|JDP2_RAT	sp|Q1XGE2|HAC1_ASPOR
+3.6	34.1	sp|Q8SQ19|CREB3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+3.6	33.6	sp|P48755|FOSL1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+3.7	35.3	sp|A2AJI0|MA7D1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+3.7	34.6	sp|Q00312|RBF1_CANAL	sp|Q1XGE2|HAC1_ASPOR
+3.7	35.7	sp|O35413|SRBS2_RAT	sp|Q1XGE2|HAC1_ASPOR
+3.9	32.5	sp|P97876|BATF3_RAT	sp|Q1XGE2|HAC1_ASPOR
+3.9	34.4	sp|O93602|ATF2_CHICK	sp|Q1XGE2|HAC1_ASPOR
+3.9	35.3	sp|Q5F489|TAF3_CHICK	sp|Q1XGE2|HAC1_ASPOR
+4.3	35.1	sp|Q6CBW0|NST1_YARLI	sp|Q1XGE2|HAC1_ASPOR
+4.3	35.6	sp|Q9CXK9|RBM33_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+4.4	34.9	sp|Q554P0|BZPJ_DICDI	sp|Q1XGE2|HAC1_ASPOR
+4.4	35.1	sp|Q55EQ3|Y9086_DICDI	sp|Q1XGE2|HAC1_ASPOR
+4.7	35.8	sp|O75037|KI21B_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+4.8	34.5	sp|O14273|YET4_SCHPO	sp|Q1XGE2|HAC1_ASPOR
+4.8	34.5	sp|P19880|YAP1_YEAST	sp|Q1XGE2|HAC1_ASPOR
+5.1	34.5	sp|Q6IPM2|IQCE_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+5.3	33.4	sp|Q98UK4|MAF_DANRE	sp|Q1XGE2|HAC1_ASPOR
+5.3	35.4	sp|Q556Q3|IRLF_DICDI	sp|Q1XGE2|HAC1_ASPOR
+5.4	32.9	sp|P14233|TGA1B_TOBAC	sp|Q1XGE2|HAC1_ASPOR
+5.4	35.0	sp|Q8CH25|SLTM_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+5.4	33.8	sp|O81025|P2A03_ARATH	sp|Q1XGE2|HAC1_ASPOR
+5.4	33.4	sp|P20226|TBP_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+5.5	35.5	sp|Q4WG58|PAN1_ASPFU	sp|Q1XGE2|HAC1_ASPOR
+5.5	35.5	sp|B0YC95|PAN1_ASPFC	sp|Q1XGE2|HAC1_ASPOR
+5.6	33.9	sp|Q00969|ATF2_RAT	sp|Q1XGE2|HAC1_ASPOR
+5.7	34.1	sp|Q8N8S7|ENAH_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+5.8	35.9	sp|Q6MG48|BAT2_RAT	sp|Q1XGE2|HAC1_ASPOR
+5.9	33.0	sp|P0C5H8|KAPC_EMENI	sp|Q1XGE2|HAC1_ASPOR
+6	33.7	sp|Q9M7Q3|AI5L6_ARATH	sp|Q1XGE2|HAC1_ASPOR
+6	34.8	sp|Q6P9R4|ARHGI_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+6.1	34.8	sp|Q9NWH9|SLTM_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.3	34.6	sp|O60308|K0562_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.4	32.8	sp|A2Z0Q0|HOX25_ORYSI	sp|Q1XGE2|HAC1_ASPOR
+6.4	35.1	sp|Q6Y7W6|PERQ2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.7	32.8	sp|Q4WA21|KAPC_ASPFU	sp|Q1XGE2|HAC1_ASPOR
+6.9	35.3	sp|Q9QXL1|KI21B_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+7.2	34.2	sp|P21127|CD11B_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+7.2	33.0	sp|Q789F3|MAF_CHICK	sp|Q1XGE2|HAC1_ASPOR
+7.3	34.4	sp|Q6A000|K0753_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+7.4	33.1	sp|P23091|MAF_AVIS4	sp|Q1XGE2|HAC1_ASPOR
+7.4	33.8	sp|Q5RCJ1|CIP4_PONAB	sp|Q1XGE2|HAC1_ASPOR
+7.5	32.8	sp|P23050|FOS_AVINK	sp|Q1XGE2|HAC1_ASPOR
+7.5	34.5	sp|Q80YR5|SAFB2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+7.5	34.7	sp|Q6ZSZ5|ARHGI_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+7.7	32.6	sp|O70191|ATF5_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+7.9	34.9	sp|A6NC98|CC88B_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+8	33.6	sp|B0WYY2|MOEH_CULQU	sp|Q1XGE2|HAC1_ASPOR
+8.3	32.9	sp|P11939|FOS_CHICK	sp|Q1XGE2|HAC1_ASPOR
+8.4	33.1	sp|Q9XUS2|MED29_CAEEL	sp|Q1XGE2|HAC1_ASPOR
+8.6	32.4	sp|A1D9Z7|KAPC_NEOFI	sp|Q1XGE2|HAC1_ASPOR
+8.7	32.2	sp|P29176|FOSX_MSVFR	sp|Q1XGE2|HAC1_ASPOR
+8.7	32.9	sp|Q09458|YQ37_CAEEL	sp|Q1XGE2|HAC1_ASPOR
+9	32.7	sp|P23922|HBP1A_WHEAT	sp|Q1XGE2|HAC1_ASPOR
+9	34.1	sp|Q5R452|SAFB1_PONAB	sp|Q1XGE2|HAC1_ASPOR
+9	32.2	sp|O02756|CEBPD_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+9.2	33.9	sp|Q03173|ENAH_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+9.4	32.7	sp|P54843|MAF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+9.4	32.2	sp|P49716|CEBPD_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+9.4	33.4	sp|Q15642|CIP4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+9.4	32.7	sp|Q54RZ9|BZPG_DICDI	sp|Q1XGE2|HAC1_ASPOR
+9.6	34.3	sp|Q5AXH3|TOF1_EMENI	sp|Q1XGE2|HAC1_ASPOR
+9.6	34.1	sp|Q498L2|SLTM_XENLA	sp|Q1XGE2|HAC1_ASPOR
+9.6	34.6	sp|P0CB49|YLPM1_RAT	sp|Q1XGE2|HAC1_ASPOR
+9.7	32.5	sp|Q39140|TGA6_ARATH	sp|Q1XGE2|HAC1_ASPOR
+10	33.4	sp|Q8N9W4|GG6L2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
diff --git a/demotic/regress/fasta-tbl.out b/demotic/regress/fasta-tbl.out
new file mode 100644
index 0000000..8aa88fd
--- /dev/null
+++ b/demotic/regress/fasta-tbl.out
@@ -0,0 +1,180 @@
+2e-70	100	1	181	sp|P55685|Y4WG_RHISN	1	181	sp|P55685|Y4WG_RHISN	Uncharacterized protein y4wG OS=R 
+3.6	24	41	164	sp|P55685|Y4WG_RHISN	65	189	sp|Q7SY73|ABH6B_XENLA	Monoacylglycerol lipase abhd6-B  
+2.8e-111	100	1	345	sp|Q1XGE2|HAC1_ASPOR	1	345	sp|Q1XGE2|HAC1_ASPOR	Transcriptional activator hacA OS 
+7e-84	78	13	344	sp|Q1XGE2|HAC1_ASPOR	18	348	sp|Q8TFU8|HAC1_EMENI	Transcriptional activator hacA OS 
+1.3e-14	31	7	344	sp|Q1XGE2|HAC1_ASPOR	43	450	sp|Q8TFF3|HAC1_TRIRE	Transcriptional activator hac1 OS 
+1.3e-06	32	63	270	sp|Q1XGE2|HAC1_ASPOR	16	216	sp|P41546|HAC1_YEAST	Transcriptional activator HAC1 OS 
+4.5e-05	31	6	167	sp|Q1XGE2|HAC1_ASPOR	3	167	sp|O24646|HY5_ARATH	Transcription factor HY5 OS=Arabid 
+0.0013	29	16	206	sp|Q1XGE2|HAC1_ASPOR	10	196	sp|Q3SZZ2|XBP1_BOVIN	X-box-binding protein 1 OS=Bos ta 
+0.0015	32	4	152	sp|Q1XGE2|HAC1_ASPOR	210	360	sp|A1L224|CR3L2_DANRE	Cyclic AMP-responsive element-bi 
+0.0022	24	46	270	sp|Q1XGE2|HAC1_ASPOR	363	593	sp|Q54WN7|BZPF_DICDI	Probable basic-leucine zipper tra 
+0.0026	36	60	154	sp|Q1XGE2|HAC1_ASPOR	66	157	sp|Q9SM50|HY5_SOLLC	Transcription factor HY5 OS=Solanu 
+0.0062	25	4	290	sp|Q1XGE2|HAC1_ASPOR	214	499	sp|Q66HA2|CR3L1_RAT	Cyclic AMP-responsive element-bind 
+0.0079	26	4	232	sp|Q1XGE2|HAC1_ASPOR	215	445	sp|Q9Z125|CR3L1_MOUSE	Cyclic AMP-responsive element-bi 
+0.01	26	4	232	sp|Q1XGE2|HAC1_ASPOR	215	445	sp|Q96BA8|CR3L1_HUMAN	Cyclic AMP-responsive element-bi 
+0.004	26	41	332	sp|Q1XGE2|HAC1_ASPOR	727	1001	sp|A3LYI0|NST1_PICST	Stress response protein NST1 OS=P 
+0.016	31	4	152	sp|Q1XGE2|HAC1_ASPOR	218	368	sp|A2VD01|CR3L2_XENLA	Cyclic AMP-responsive element-bi 
+0.018	26	24	200	sp|Q1XGE2|HAC1_ASPOR	160	330	sp|Q08CW8|CR3L4_XENTR	Cyclic AMP-responsive element-bi 
+0.01	23	14	297	sp|Q1XGE2|HAC1_ASPOR	228	517	sp|Q70SY1|CR3L2_HUMAN	Cyclic AMP-responsive element-bi 
+0.013	23	14	297	sp|Q1XGE2|HAC1_ASPOR	228	517	sp|Q5RCM9|CR3L2_PONAB	Cyclic AMP-responsive element-bi 
+0.0021	24	18	297	sp|Q1XGE2|HAC1_ASPOR	234	518	sp|Q8BH52|CR3L2_MOUSE	Cyclic AMP-responsive element-bi 
+0.0011	28	16	187	sp|Q1XGE2|HAC1_ASPOR	10	186	sp|P17861|XBP1_HUMAN	X-box-binding protein 1 OS=Homo s 
+0.031	25	9	222	sp|Q1XGE2|HAC1_ASPOR	76	290	sp|P13346|FOSB_MOUSE	Protein fosB OS=Mus musculus GN=F 
+0.056	35	73	143	sp|Q1XGE2|HAC1_ASPOR	68	138	sp|Q8W191|HYH_ARATH	Transcription factor HY5-like OS=A 
+0.064	25	9	222	sp|Q1XGE2|HAC1_ASPOR	76	290	sp|P53539|FOSB_HUMAN	Protein fosB OS=Homo sapiens GN=F 
+0.018	23	18	297	sp|Q1XGE2|HAC1_ASPOR	234	518	sp|Q6QDP7|CR3L2_RAT	Cyclic AMP-responsive element-bind 
+0.0081	26	48	275	sp|Q1XGE2|HAC1_ASPOR	213	434	sp|Q3SYZ3|CR3L3_BOVIN	Cyclic AMP-responsive element-bi 
+0.091	28	72	237	sp|Q1XGE2|HAC1_ASPOR	145	332	sp|Q9TUB3|FOSB_CANFA	Protein fosB OS=Canis familiaris  
+0.11	28	18	160	sp|Q1XGE2|HAC1_ASPOR	212	349	sp|Q06507|ATF4_MOUSE	Cyclic AMP-dependent transcriptio 
+0.045	26	48	284	sp|Q1XGE2|HAC1_ASPOR	214	438	sp|Q5FVM5|CR3L3_RAT	Cyclic AMP-responsive element-bind 
+0.16	27	29	163	sp|Q1XGE2|HAC1_ASPOR	171	307	sp|Q90370|MAFB_COTJA	Transcription factor MafB OS=Cotu 
+0.16	27	29	163	sp|Q1XGE2|HAC1_ASPOR	171	307	sp|Q90888|MAFB_CHICK	Transcription factor MafB OS=Gall 
+0.1	28	9	237	sp|Q1XGE2|HAC1_ASPOR	55	297	sp|O97930|FOS_PIG	Proto-oncogene c-Fos OS=Sus scrofa G 
+0.073	27	48	258	sp|Q1XGE2|HAC1_ASPOR	214	432	sp|Q91XE9|CR3L3_MOUSE	Cyclic AMP-responsive element-bi 
+0.22	31	66	160	sp|Q1XGE2|HAC1_ASPOR	258	351	sp|P18848|ATF4_HUMAN	Cyclic AMP-dependent transcriptio 
+0.23	25	2	237	sp|Q1XGE2|HAC1_ASPOR	57	298	sp|O88479|FOS_MESAU	Proto-oncogene c-Fos OS=Mesocricet 
+0.26	25	2	237	sp|Q1XGE2|HAC1_ASPOR	57	297	sp|P01101|FOS_MOUSE	Proto-oncogene c-Fos OS=Mus muscul 
+0.16	26	48	236	sp|Q1XGE2|HAC1_ASPOR	218	404	sp|Q68CJ9|CR3L3_HUMAN	Cyclic AMP-responsive element-bi 
+0.27	29	54	199	sp|Q1XGE2|HAC1_ASPOR	192	329	sp|Q8TEY5|CR3L4_HUMAN	Cyclic AMP-responsive element-bi 
+0.27	28	80	198	sp|Q1XGE2|HAC1_ASPOR	195	312	sp|Q99090|CPRF2_PETCR	Light-inducible protein CPRF2 OS 
+0.28	26	26	168	sp|Q1XGE2|HAC1_ASPOR	277	424	sp|Q5R9C9|ATF7_PONAB	Cyclic AMP-dependent transcriptio 
+0.28	26	26	168	sp|Q1XGE2|HAC1_ASPOR	288	435	sp|P17544|ATF7_HUMAN	Cyclic AMP-dependent transcriptio 
+0.3	29	54	199	sp|Q1XGE2|HAC1_ASPOR	192	329	sp|Q5UEM8|CR3L4_MACFA	Cyclic AMP-responsive element-bi 
+0.37	28	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|Q9Y5Q3|MAFB_HUMAN	Transcription factor MafB OS=Homo 
+0.37	25	2	237	sp|Q1XGE2|HAC1_ASPOR	57	297	sp|P01102|FOS_MSVFB	p55-v-Fos-transforming protein OS= 
+0.38	23	12	216	sp|Q1XGE2|HAC1_ASPOR	38	261	sp|P51145|FOSL2_RAT	Fos-related antigen 2 OS=Rattus no 
+0.4	28	42	208	sp|Q1XGE2|HAC1_ASPOR	92	255	sp|Q9UQ88|CD11A_HUMAN	Cell division protein kinase 11A 
+0.075	27	3	236	sp|Q1XGE2|HAC1_ASPOR	429	680	sp|Q9WVS8|MK07_MOUSE	Mitogen-activated protein kinase  
+0.41	26	8	199	sp|Q1XGE2|HAC1_ASPOR	138	322	sp|Q502F0|CR3LA_DANRE	Cyclic AMP-responsive element-bi 
+0.42	24	4	222	sp|Q1XGE2|HAC1_ASPOR	39	253	sp|P15408|FOSL2_HUMAN	Fos-related antigen 2 OS=Homo sa 
+0.45	27	26	143	sp|Q1XGE2|HAC1_ASPOR	277	392	sp|Q8R0S1|ATF7_MOUSE	Cyclic AMP-dependent transcriptio 
+0.47	30	8	150	sp|Q1XGE2|HAC1_ASPOR	370	508	sp|P29747|CREBA_DROME	Cyclic AMP response element-bind 
+0.47	28	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|Q2PFS4|MAFB_MACFA	Transcription factor MafB OS=Maca 
+0.41	27	51	190	sp|Q1XGE2|HAC1_ASPOR	23	183	sp|Q9R1S4|XBP1_RAT	X-box-binding protein 1 OS=Rattus n 
+0.53	27	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|P54842|MAFB_RAT	Transcription factor MafB OS=Rattus 
+0.54	24	4	216	sp|Q1XGE2|HAC1_ASPOR	39	260	sp|P47930|FOSL2_MOUSE	Fos-related antigen 2 OS=Mus mus 
+0.55	33	16	119	sp|Q1XGE2|HAC1_ASPOR	188	291	sp|Q2VZV0|IF2_MAGSA	Translation initiation factor IF-2 
+0.55	23	14	223	sp|Q1XGE2|HAC1_ASPOR	37	240	sp|Q0CEI3|KAPC_ASPTN	Putative transcription factor kap 
+0.017	26	1	207	sp|Q1XGE2|HAC1_ASPOR	107	318	sp|Q61817|CREB3_MOUSE	Cyclic AMP-responsive element-bi 
+0.56	30	66	160	sp|Q1XGE2|HAC1_ASPOR	255	347	sp|Q9ES19|ATF4_RAT	Cyclic AMP-dependent transcription  
+0.6	27	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|P54841|MAFB_MOUSE	Transcription factor MafB OS=Mus  
+0.6	24	2	237	sp|Q1XGE2|HAC1_ASPOR	57	297	sp|O77628|FOS_BOVIN	Proto-oncogene c-Fos OS=Bos taurus 
+0.62	20	66	223	sp|Q1XGE2|HAC1_ASPOR	83	237	sp|A1C9M5|KAPC_ASPCL	Putative transcription factor kap 
+0.67	26	29	163	sp|Q1XGE2|HAC1_ASPOR	176	312	sp|Q504L8|MAFB_XENTR	Transcription factor MafB OS=Xeno 
+0.7	34	83	167	sp|Q1XGE2|HAC1_ASPOR	201	281	sp|O57342|MAFA_COTJA	Transcription factor MafA OS=Cotu 
+0.72	27	19	154	sp|Q1XGE2|HAC1_ASPOR	210	342	sp|Q3ZCH6|ATF4_BOVIN	Cyclic AMP-dependent transcriptio 
+0.75	33	60	146	sp|Q1XGE2|HAC1_ASPOR	170	252	sp|Q5UEM7|CR3L4_RAT	Cyclic AMP-responsive element-bind 
+0.68	27	8	237	sp|Q1XGE2|HAC1_ASPOR	54	297	sp|P12841|FOS_RAT	Proto-oncogene c-Fos OS=Rattus norve 
+0.69	28	71	172	sp|Q1XGE2|HAC1_ASPOR	17	125	sp|Q16520|BATF_HUMAN	Basic leucine zipper transcriptio 
+0.59	27	51	190	sp|Q1XGE2|HAC1_ASPOR	23	183	sp|O35426|XBP1_MOUSE	X-box-binding protein 1 OS=Mus mu 
+0.33	28	9	237	sp|Q1XGE2|HAC1_ASPOR	55	297	sp|P01100|FOS_HUMAN	Proto-oncogene c-Fos OS=Homo sapie 
+0.93	27	52	168	sp|Q1XGE2|HAC1_ASPOR	194	315	sp|Q8K1L0|CREB5_MOUSE	Cyclic AMP-responsive element-bi 
+0.14	22	43	227	sp|Q1XGE2|HAC1_ASPOR	675	868	sp|A4R2R1|NST1_MAGGR	Stress response protein NST1 OS=M 
+0.2	29	18	146	sp|Q1XGE2|HAC1_ASPOR	119	256	sp|Q9D2A5|CR3L4_MOUSE	Cyclic AMP-responsive element-bi 
+0.68	26	9	237	sp|Q1XGE2|HAC1_ASPOR	55	298	sp|Q8HZP6|FOS_FELCA	Proto-oncogene c-Fos OS=Felis catu 
+1.1	28	69	145	sp|Q1XGE2|HAC1_ASPOR	21	97	sp|Q9NR55|BATF3_HUMAN	Basic leucine zipper transcripti 
+1.2	27	52	168	sp|Q1XGE2|HAC1_ASPOR	345	466	sp|Q02930|CREB5_HUMAN	Cyclic AMP-responsive element-bi 
+1.2	30	31	149	sp|Q1XGE2|HAC1_ASPOR	176	296	sp|P42774|GBF1_ARATH	G-box-binding factor 1 OS=Arabido 
+0.48	22	16	223	sp|Q1XGE2|HAC1_ASPOR	44	236	sp|A2R346|KAPC_ASPNC	Putative transcription factor kap 
+1.3	33	85	167	sp|Q1XGE2|HAC1_ASPOR	201	281	sp|O42290|MAFA_CHICK	Transcription factor MafA OS=Gall 
+1.3	30	63	185	sp|Q1XGE2|HAC1_ASPOR	159	282	sp|O43889|CREB3_HUMAN	Cyclic AMP-responsive element-bi 
+1.4	24	7	183	sp|Q1XGE2|HAC1_ASPOR	282	455	sp|O60841|IF2P_HUMAN	Eukaryotic translation initiation 
+1.1	30	48	230	sp|Q1XGE2|HAC1_ASPOR	735	930	sp|Q5KGK5|EIF3A_CRYNE	Eukaryotic translation initiatio 
+1.7	33	83	145	sp|Q1XGE2|HAC1_ASPOR	28	90	sp|Q9D275|BATF3_MOUSE	Basic leucine zipper transcripti 
+1.5	25	25	199	sp|Q1XGE2|HAC1_ASPOR	161	322	sp|Q1LYG4|CR3LB_DANRE	Cyclic AMP-responsive element-bi 
+1.7	26	29	163	sp|Q1XGE2|HAC1_ASPOR	171	309	sp|Q6DE84|MAFB_XENLA	Transcription factor MafB OS=Xeno 
+1.1	27	18	222	sp|Q1XGE2|HAC1_ASPOR	378	571	sp|Q7TSC1|BAT2_MOUSE	Large proline-rich protein BAT2 O 
+1.7	24	17	241	sp|Q1XGE2|HAC1_ASPOR	260	503	sp|Q99941|ATF6B_HUMAN	Cyclic AMP-dependent transcripti 
+1.8	26	10	157	sp|Q1XGE2|HAC1_ASPOR	315	458	sp|Q54Y73|BZPD_DICDI	Probable basic-leucine zipper tra 
+1.8	24	68	271	sp|Q1XGE2|HAC1_ASPOR	108	311	sp|P18625|FOSL2_CHICK	Fos-related antigen 2 OS=Gallus  
+1.4	23	2	291	sp|Q1XGE2|HAC1_ASPOR	57	353	sp|Q56TN0|FOS_PHORO	Proto-oncogene c-Fos OS=Phodopus r 
+1.8	28	71	160	sp|Q1XGE2|HAC1_ASPOR	17	103	sp|O35284|BATF_MOUSE	Basic leucine zipper transcriptio 
+1.9	25	2	148	sp|Q1XGE2|HAC1_ASPOR	142	290	sp|Q16534|HLF_HUMAN	Hepatic leukemia factor OS=Homo sa 
+1.9	25	2	148	sp|Q1XGE2|HAC1_ASPOR	142	290	sp|Q8BW74|HLF_MOUSE	Hepatic leukemia factor OS=Mus mus 
+0.51	29	39	210	sp|Q1XGE2|HAC1_ASPOR	79	238	sp|Q63ZM7|STABP_XENLA	STAM-binding protein-like OS=Xen 
+2.1	25	8	181	sp|Q1XGE2|HAC1_ASPOR	14	192	sp|P29681|IMPE2_DROME	20-hydroxyecdysone protein OS=Dr 
+1.7	23	16	241	sp|Q1XGE2|HAC1_ASPOR	259	500	sp|O35451|ATF6B_MOUSE	Cyclic AMP-dependent transcripti 
+0.23	25	74	223	sp|Q1XGE2|HAC1_ASPOR	4	163	sp|Q09926|PCR1_SCHPO	Transcription factor pcr1 OS=Schi 
+2.3	25	41	172	sp|Q1XGE2|HAC1_ASPOR	629	763	sp|O13024|INCEA_XENLA	Inner centromere protein A OS=Xe 
+2.1	22	8	210	sp|Q1XGE2|HAC1_ASPOR	234	432	sp|A0JMT0|CA1AB_XENLA	Chromatin assembly factor 1 subu 
+2.3	23	7	183	sp|Q1XGE2|HAC1_ASPOR	282	455	sp|Q5RDE1|IF2P_PONAB	Eukaryotic translation initiation 
+2.3	30	83	167	sp|Q1XGE2|HAC1_ASPOR	203	284	sp|Q4U1U2|MAFA_XENTR	Transcription factor MafA OS=Xeno 
+2.4	29	16	148	sp|Q1XGE2|HAC1_ASPOR	163	290	sp|Q64709|HLF_RAT	Hepatic leukemia factor OS=Rattus no 
+2.4	18	22	170	sp|Q1XGE2|HAC1_ASPOR	171	321	sp|Q54NF3|Y6434_DICDI	Uncharacterized protein DDB_G028 
+2.5	27	15	143	sp|Q1XGE2|HAC1_ASPOR	278	412	sp|P15336|ATF2_HUMAN	Cyclic AMP-dependent transcriptio 
+2.5	21	16	275	sp|Q1XGE2|HAC1_ASPOR	149	410	sp|Q553B1|DDX46_DICDI	ATP-dependent RNA helicase ddx46 
+2.8	27	18	228	sp|Q1XGE2|HAC1_ASPOR	380	575	sp|P48634|BAT2_HUMAN	Large proline-rich protein BAT2 O 
+2.8	25	18	251	sp|Q1XGE2|HAC1_ASPOR	380	589	sp|Q5TM26|BAT2_MACMU	Large proline-rich protein BAT2 O 
+2.9	23	24	294	sp|Q1XGE2|HAC1_ASPOR	48	314	sp|A3BYC1|HOX25_ORYSJ	Homeobox-leucine zipper protein  
+3.1	27	15	143	sp|Q1XGE2|HAC1_ASPOR	260	394	sp|P16951|ATF2_MOUSE	Cyclic AMP-dependent transcriptio 
+3.1	19	5	221	sp|Q1XGE2|HAC1_ASPOR	119	331	sp|Q96RN5|MED15_HUMAN	Mediator of RNA polymerase II tr 
+1.4	24	16	223	sp|Q1XGE2|HAC1_ASPOR	44	237	sp|Q2UNX4|KAPC_ASPOR	Putative transcription factor kap 
+3.5	24	19	214	sp|Q1XGE2|HAC1_ASPOR	838	1039	sp|Q80U35|ARHGH_MOUSE	Rho guanine nucleotide exchange  
+1.3	26	3	236	sp|Q1XGE2|HAC1_ASPOR	429	680	sp|P0C865|MK07_RAT	Mitogen-activated protein kinase 7  
+3.5	27	16	163	sp|Q1XGE2|HAC1_ASPOR	9	155	sp|P97875|JDP2_MOUSE	Jun dimerization protein 2 OS=Mus 
+3.5	27	16	163	sp|Q1XGE2|HAC1_ASPOR	9	155	sp|Q78E65|JDP2_RAT	Jun dimerization protein 2 OS=Rattu 
+0.59	25	20	221	sp|Q1XGE2|HAC1_ASPOR	105	301	sp|Q8SQ19|CREB3_BOVIN	Cyclic AMP-responsive element-bi 
+0.53	26	44	232	sp|Q1XGE2|HAC1_ASPOR	72	265	sp|P48755|FOSL1_MOUSE	Fos-related antigen 1 OS=Mus mus 
+3.7	24	4	149	sp|Q1XGE2|HAC1_ASPOR	527	669	sp|A2AJI0|MA7D1_MOUSE	MAP7 domain-containing protein 1 
+2.3	23	36	229	sp|Q1XGE2|HAC1_ASPOR	263	449	sp|Q00312|RBF1_CANAL	Transcription factor RBF1 OS=Cand 
+3.7	26	18	229	sp|Q1XGE2|HAC1_ASPOR	220	425	sp|O35413|SRBS2_RAT	Sorbin and SH3 domain-containing p 
+3.9	30	83	145	sp|Q1XGE2|HAC1_ASPOR	28	90	sp|P97876|BATF3_RAT	Basic leucine zipper transcription 
+2.4	25	13	143	sp|Q1XGE2|HAC1_ASPOR	275	394	sp|O93602|ATF2_CHICK	Cyclic AMP-dependent transcriptio 
+1.2	26	14	232	sp|Q1XGE2|HAC1_ASPOR	662	845	sp|Q5F489|TAF3_CHICK	Transcription initiation factor T 
+4.3	28	48	194	sp|Q1XGE2|HAC1_ASPOR	477	629	sp|Q6CBW0|NST1_YARLI	Stress response protein NST1 OS=Y 
+4.3	27	5	169	sp|Q1XGE2|HAC1_ASPOR	749	921	sp|Q9CXK9|RBM33_MOUSE	RNA-binding protein 33 OS=Mus mu 
+4.4	27	80	175	sp|Q1XGE2|HAC1_ASPOR	546	644	sp|Q554P0|BZPJ_DICDI	Probable basic-leucine zipper tra 
+4.4	27	18	154	sp|Q1XGE2|HAC1_ASPOR	283	415	sp|Q55EQ3|Y9086_DICDI	Uncharacterized abhydrolase doma 
+4.7	26	41	173	sp|Q1XGE2|HAC1_ASPOR	723	857	sp|O75037|KI21B_HUMAN	Kinesin-like protein KIF21B OS=H 
+4.8	22	26	217	sp|Q1XGE2|HAC1_ASPOR	1	186	sp|O14273|YET4_SCHPO	Meiotically up-regulated protein  
+4.8	23	28	297	sp|Q1XGE2|HAC1_ASPOR	13	259	sp|P19880|YAP1_YEAST	AP-1-like transcription factor YA 
+5.1	22	34	268	sp|Q1XGE2|HAC1_ASPOR	455	686	sp|Q6IPM2|IQCE_HUMAN	IQ domain-containing protein E OS 
+5.3	31	83	175	sp|Q1XGE2|HAC1_ASPOR	243	326	sp|Q98UK4|MAF_DANRE	Transcription factor Maf OS=Danio  
+5.3	17	6	186	sp|Q1XGE2|HAC1_ASPOR	661	844	sp|Q556Q3|IRLF_DICDI	Probable serine/threonine-protein 
+5.4	39	80	142	sp|Q1XGE2|HAC1_ASPOR	181	242	sp|P14233|TGA1B_TOBAC	TGACG-sequence-specific DNA-bind 
+5.4	35	73	153	sp|Q1XGE2|HAC1_ASPOR	644	724	sp|Q8CH25|SLTM_MOUSE	SAFB-like transcription modulator 
+5.4	29	4	149	sp|Q1XGE2|HAC1_ASPOR	135	280	sp|O81025|P2A03_ARATH	Putative protein PHLOEM PROTEIN  
+5.4	24	91	212	sp|Q1XGE2|HAC1_ASPOR	43	161	sp|P20226|TBP_HUMAN	TATA-box-binding protein OS=Homo s 
+5.5	23	38	257	sp|Q1XGE2|HAC1_ASPOR	1078	1294	sp|Q4WG58|PAN1_ASPFU	Actin cytoskeleton-regulatory com 
+5.5	23	38	257	sp|Q1XGE2|HAC1_ASPOR	1078	1294	sp|B0YC95|PAN1_ASPFC	Actin cytoskeleton-regulatory com 
+5.6	26	41	143	sp|Q1XGE2|HAC1_ASPOR	288	394	sp|Q00969|ATF2_RAT	Cyclic AMP-dependent transcription  
+2.2	31	35	142	sp|Q1XGE2|HAC1_ASPOR	111	219	sp|Q8N8S7|ENAH_HUMAN	Protein enabled homolog OS=Homo s 
+1.5	24	18	229	sp|Q1XGE2|HAC1_ASPOR	378	575	sp|Q6MG48|BAT2_RAT	Large proline-rich protein BAT2 OS= 
+0.42	22	17	274	sp|Q1XGE2|HAC1_ASPOR	49	268	sp|P0C5H8|KAPC_EMENI	Putative transcription factor kap 
+2	31	14	145	sp|Q1XGE2|HAC1_ASPOR	291	435	sp|Q9M7Q3|AI5L6_ARATH	ABSCISIC ACID-INSENSITIVE 5-like 
+0.99	24	9	250	sp|Q1XGE2|HAC1_ASPOR	628	858	sp|Q6P9R4|ARHGI_MOUSE	Rho guanine nucleotide exchange  
+6.1	35	73	153	sp|Q1XGE2|HAC1_ASPOR	645	725	sp|Q9NWH9|SLTM_HUMAN	SAFB-like transcription modulator 
+6.3	25	70	317	sp|Q1XGE2|HAC1_ASPOR	217	472	sp|O60308|K0562_HUMAN	Uncharacterized protein KIAA0562 
+6.4	24	53	294	sp|Q1XGE2|HAC1_ASPOR	21	254	sp|A2Z0Q0|HOX25_ORYSI	Homeobox-leucine zipper protein  
+5.7	31	48	180	sp|Q1XGE2|HAC1_ASPOR	825	957	sp|Q6Y7W6|PERQ2_HUMAN	PERQ amino acid-rich with GYF do 
+4.7	23	66	216	sp|Q1XGE2|HAC1_ASPOR	75	214	sp|Q4WA21|KAPC_ASPFU	Putative transcription factor kap 
+6.9	25	41	169	sp|Q1XGE2|HAC1_ASPOR	724	856	sp|Q9QXL1|KI21B_MOUSE	Kinesin-like protein KIF21B OS=M 
+7.2	27	41	208	sp|Q1XGE2|HAC1_ASPOR	96	272	sp|P21127|CD11B_HUMAN	Cell division protein kinase 11B 
+7.2	30	83	163	sp|Q1XGE2|HAC1_ASPOR	276	355	sp|Q789F3|MAF_CHICK	Transcription factor Maf OS=Gallus 
+7.3	25	39	269	sp|Q1XGE2|HAC1_ASPOR	542	766	sp|Q6A000|K0753_MOUSE	Uncharacterized protein KIAA0753 
+7.4	30	83	163	sp|Q1XGE2|HAC1_ASPOR	276	355	sp|P23091|MAF_AVIS4	Transforming protein Maf OS=Avian  
+1.1	25	29	186	sp|Q1XGE2|HAC1_ASPOR	294	463	sp|Q5RCJ1|CIP4_PONAB	Cdc42-interacting protein 4 OS=Po 
+7.5	22	2	291	sp|Q1XGE2|HAC1_ASPOR	12	294	sp|P23050|FOS_AVINK	p55-v-Fos-transforming protein OS= 
+2.3	26	5	245	sp|Q1XGE2|HAC1_ASPOR	610	858	sp|Q80YR5|SAFB2_MOUSE	Scaffold attachment factor B2 OS 
+7.5	25	80	267	sp|Q1XGE2|HAC1_ASPOR	851	1029	sp|Q6ZSZ5|ARHGI_HUMAN	Rho guanine nucleotide exchange  
+6.8	28	8	155	sp|Q1XGE2|HAC1_ASPOR	155	277	sp|O70191|ATF5_MOUSE	Cyclic AMP-dependent transcriptio 
+3	28	6	186	sp|Q1XGE2|HAC1_ASPOR	276	466	sp|A6NC98|CC88B_HUMAN	Coiled-coil domain-containing pr 
+8	23	36	151	sp|Q1XGE2|HAC1_ASPOR	294	411	sp|B0WYY2|MOEH_CULQU	Moesin/ezrin/radixin homolog 1 OS 
+8.3	22	2	291	sp|Q1XGE2|HAC1_ASPOR	57	339	sp|P11939|FOS_CHICK	Proto-oncogene c-Fos OS=Gallus gal 
+8.4	26	112	243	sp|Q1XGE2|HAC1_ASPOR	13	152	sp|Q9XUS2|MED29_CAEEL	Mediator of RNA polymerase II tr 
+5.3	23	66	223	sp|Q1XGE2|HAC1_ASPOR	75	231	sp|A1D9Z7|KAPC_NEOFI	Putative transcription factor kap 
+4.2	23	2	222	sp|Q1XGE2|HAC1_ASPOR	33	242	sp|P29176|FOSX_MSVFR	Transforming protein v-Fos/v-Fox  
+8.7	23	30	227	sp|Q1XGE2|HAC1_ASPOR	29	229	sp|Q09458|YQ37_CAEEL	Uncharacterized protein C09F5.7 O 
+9	29	59	150	sp|Q1XGE2|HAC1_ASPOR	223	319	sp|P23922|HBP1A_WHEAT	Transcription factor HBP-1a OS=T 
+6.3	26	23	143	sp|Q1XGE2|HAC1_ASPOR	572	699	sp|Q5R452|SAFB1_PONAB	Scaffold attachment factor B1 OS 
+5.6	26	19	163	sp|Q1XGE2|HAC1_ASPOR	119	245	sp|O02756|CEBPD_BOVIN	CCAAT/enhancer-binding protein d 
+9.2	25	9	254	sp|Q1XGE2|HAC1_ASPOR	105	350	sp|Q03173|ENAH_MOUSE	Protein enabled homolog OS=Mus mu 
+9.4	30	83	163	sp|Q1XGE2|HAC1_ASPOR	287	366	sp|P54843|MAF_MOUSE	Transcription factor Maf OS=Mus mu 
+9.4	25	19	163	sp|Q1XGE2|HAC1_ASPOR	131	258	sp|P49716|CEBPD_HUMAN	CCAAT/enhancer-binding protein d 
+1.4	22	29	272	sp|Q1XGE2|HAC1_ASPOR	294	542	sp|Q15642|CIP4_HUMAN	Cdc42-interacting protein 4 OS=Ho 
+9.4	32	80	146	sp|Q1XGE2|HAC1_ASPOR	274	340	sp|Q54RZ9|BZPG_DICDI	Probable basic-leucine zipper tra 
+5.2	25	48	270	sp|Q1XGE2|HAC1_ASPOR	936	1166	sp|Q5AXH3|TOF1_EMENI	Topoisomerase 1-associated factor 
+9.6	31	73	153	sp|Q1XGE2|HAC1_ASPOR	607	689	sp|Q498L2|SLTM_XENLA	SAFB-like transcription modulator 
+8.5	20	19	227	sp|Q1XGE2|HAC1_ASPOR	858	1076	sp|P0CB49|YLPM1_RAT	YLP motif-containing protein 1 OS= 
+9.7	36	77	131	sp|Q1XGE2|HAC1_ASPOR	38	91	sp|Q39140|TGA6_ARATH	Transcription factor TGA6 OS=Arab 
+10	24	41	154	sp|Q1XGE2|HAC1_ASPOR	277	386	sp|Q8N9W4|GG6L2_HUMAN	Golgin subfamily A member 6-like 
diff --git a/demotic/regress/h2-profmark.out b/demotic/regress/h2-profmark.out
new file mode 100644
index 0000000..6328f82
--- /dev/null
+++ b/demotic/regress/h2-profmark.out
@@ -0,0 +1,170 @@
+3e-47	173.5	sp|O29458|DCDA_ARCFU	Orn_DAP_Arg_deC
+1.2e-46	171.6	sp|Q9UQW9|DCOR_SCHPO	Orn_DAP_Arg_deC
+8.4e-44	162.1	sp|O27390|DCDA_METTH	Orn_DAP_Arg_deC
+2.3e-43	160.6	sp|Q9I8S4|DCOR2_XENLA	Orn_DAP_Arg_deC
+2.5e-43	160.5	sp|P09057|DCOR_RAT	Orn_DAP_Arg_deC
+3.8e-43	159.9	sp|P14019|DCOR_CRIGR	Orn_DAP_Arg_deC
+3.9e-43	159.8	sp|P00860|DCOR_MOUSE	Orn_DAP_Arg_deC
+3.9e-43	159.8	sp|P27119|DCOR_MUSPA	Orn_DAP_Arg_deC
+8e-43	158.8	sp|P27118|DCOR_CHICK	Orn_DAP_Arg_deC
+2.8e-42	157.0	sp|P27120|DCOR1_XENLA	Orn_DAP_Arg_deC
+3e-42	156.9	sp|P11926|DCOR_HUMAN	Orn_DAP_Arg_deC
+2.1e-41	154.1	sp|P27117|DCOR_BOVIN	Orn_DAP_Arg_deC
+1.6e-40	151.2	sp|P07805|DCOR_TRYBB	Orn_DAP_Arg_deC
+2.6e-40	150.5	sp|Q9X1K5|DCDA_THEMA	Orn_DAP_Arg_deC
+3.7e-39	146.6	sp|P49725|DCOR_PANRE	Orn_DAP_Arg_deC
+6.6e-39	145.8	sp|O22616|DCOR_SOLLC	Orn_DAP_Arg_deC
+7.3e-39	145.7	sp|P27121|DCOR_NEUCR	Orn_DAP_Arg_deC
+8.2e-39	145.5	sp|P50134|DCOR_DATST	Orn_DAP_Arg_deC
+4e-38	143.2	sp|P08432|DCOR_YEAST	Orn_DAP_Arg_deC
+9.1e-38	142.0	sp|Q8A2B1|SPEA_BACTN	Orn_DAP_Arg_deC
+1.9e-37	141.0	sp|Q9HUX1|SPEA_PSEAE	Orn_DAP_Arg_deC
+2e-37	140.9	sp|Q7NU27|SPEA_CHRVO	Orn_DAP_Arg_deC
+2.5e-37	140.6	sp|O69203|DCDA_ACTPA	Orn_DAP_Arg_deC
+2.6e-37	140.5	sp|Q8S3N2|DCOR_CAPAN	Orn_DAP_Arg_deC
+3.1e-37	140.3	sp|P00861|DCDA_ECOLI	Orn_DAP_Arg_deC
+3.1e-37	140.2	sp|Q7NE10|SPEA_GLOVI	Orn_DAP_Arg_deC
+3.8e-37	140.0	sp|Q58497|DCDA_METJA	Orn_DAP_Arg_deC
+5.4e-37	139.5	sp|Q5LIQ3|SPEA_BACFN	Orn_DAP_Arg_deC
+5.4e-37	139.5	sp|Q64ZT8|SPEA_BACFR	Orn_DAP_Arg_deC
+1.3e-36	138.1	sp|Q87VU3|SPEA_PSESM	Orn_DAP_Arg_deC
+2.2e-36	137.4	sp|P40807|DCOR1_DROME	Orn_DAP_Arg_deC
+2.3e-36	137.4	sp|B0U1H6|SPEA_XYLFM	Orn_DAP_Arg_deC
+2.3e-36	137.4	sp|Q9PH02|SPEA_XYLFA	Orn_DAP_Arg_deC
+4.1e-36	136.5	sp|O05321|DCDA_PSEFL	Orn_DAP_Arg_deC
+4.7e-36	136.3	sp|B2I6M1|SPEA_XYLF2	Orn_DAP_Arg_deC
+4.7e-36	136.3	sp|Q87F25|SPEA_XYLFT	Orn_DAP_Arg_deC
+6.1e-36	136.0	sp|Q8DHY6|SPEA_THEEB	Orn_DAP_Arg_deC
+6.8e-36	135.8	sp|O67262|DCDA_AQUAE	Orn_DAP_Arg_deC
+1.3e-35	134.8	sp|Q88QC7|SPEA_PSEPK	Orn_DAP_Arg_deC
+4.2e-35	133.2	sp|O14977|AZIN1_HUMAN	Orn_DAP_Arg_deC
+4.2e-35	133.2	sp|Q5R7K3|AZIN1_PONAB	Orn_DAP_Arg_deC
+5.1e-35	132.9	sp|O35484|AZIN1_MOUSE	Orn_DAP_Arg_deC
+5.2e-35	132.9	sp|Q50140|DCDA_MYCLE	Orn_DAP_Arg_deC
+5.5e-35	132.8	sp|A6L012|SPEA_BACV8	Orn_DAP_Arg_deC
+6.8e-35	132.5	sp|P19572|DCDA_PSEAE	Orn_DAP_Arg_deC
+7.9e-35	132.3	sp|Q8YRP3|SPEA_ANASP	Orn_DAP_Arg_deC
+1.2e-34	131.7	sp|P23630|DCDA_BACSU	Orn_DAP_Arg_deC
+2.2e-34	130.8	sp|Q9ZBH5|DCDA_STRCO	Orn_DAP_Arg_deC
+2.4e-34	130.6	sp|Q8K9C4|DCDA_BUCAP	Orn_DAP_Arg_deC
+2.7e-34	130.5	sp|Q0ACK8|SPEA_ALHEH	Orn_DAP_Arg_deC
+6.8e-34	129.2	sp|Q949X7|DCDA1_ARATH	Orn_DAP_Arg_deC
+8.1e-34	128.9	sp|Q94A94|DCDA2_ARATH	Orn_DAP_Arg_deC
+9.9e-34	128.6	sp|P0A5M5|DCDA_MYCBO	Orn_DAP_Arg_deC
+9.9e-34	128.6	sp|P0A5M4|DCDA_MYCTU	Orn_DAP_Arg_deC
+1.7e-33	127.8	sp|P41931|DCOR_CAEEL	Orn_DAP_Arg_deC
+1.9e-33	127.7	sp|O50657|DCLO_SELRU	Orn_DAP_Arg_deC
+2.4e-33	127.4	sp|Q9KVL7|DCDA_VIBCH	Orn_DAP_Arg_deC
+3.1e-33	126.9	sp|Q6ZG77|DCDA_ORYSJ	Orn_DAP_Arg_deC
+3.6e-33	126.7	sp|Q55484|DCDA_SYNY3	Orn_DAP_Arg_deC
+8.1e-33	125.6	sp|Q9JXM2|DCDA_NEIMB	Orn_DAP_Arg_deC
+1e-32	125.2	sp|Q8P448|SPEA_XANCP	Orn_DAP_Arg_deC
+1.2e-32	125.0	sp|Q54UF3|DCOR_DICDI	Orn_DAP_Arg_deC
+1.3e-32	124.9	sp|Q9Z661|DCDA_ZYMMO	Orn_DAP_Arg_deC
+2.6e-32	123.9	sp|Q9JWA6|DCDA_NEIMA	Orn_DAP_Arg_deC
+3.6e-32	123.4	sp|P40808|DCOR2_DROME	Orn_DAP_Arg_deC
+5.1e-32	122.9	sp|Q8PFQ5|SPEA_XANAC	Orn_DAP_Arg_deC
+9e-32	122.1	sp|P56129|DCDA_HELPY	Orn_DAP_Arg_deC
+1.4e-31	121.5	sp|Q89AC6|DCDA_BUCBP	Orn_DAP_Arg_deC
+1.4e-31	121.5	sp|P78599|DCOR_CANAL	Orn_DAP_Arg_deC
+1.8e-31	121.1	sp|Q8DA54|SPEA_VIBVU	Orn_DAP_Arg_deC
+1.8e-31	121.1	sp|Q7MK24|SPEA_VIBVY	Orn_DAP_Arg_deC
+1.8e-31	121.1	sp|A4Y5Y9|SPEA_SHEPC	Orn_DAP_Arg_deC
+1.8e-31	121.1	sp|A1RKK8|SPEA_SHESW	Orn_DAP_Arg_deC
+2e-31	121.0	sp|P57513|DCDA_BUCAI	Orn_DAP_Arg_deC
+2.1e-31	120.9	sp|Q9RTK2|DCDA_DEIRA	Orn_DAP_Arg_deC
+2.2e-31	120.8	sp|B8CR70|SPEA_SHEPW	Orn_DAP_Arg_deC
+3.2e-31	120.3	sp|A3QDD8|SPEA_SHELP	Orn_DAP_Arg_deC
+4.1e-31	119.9	sp|B8EAI2|SPEA_SHEB2	Orn_DAP_Arg_deC
+4.1e-31	119.9	sp|A3D3G2|SPEA_SHEB5	Orn_DAP_Arg_deC
+4.1e-31	119.9	sp|A6WM65|SPEA_SHEB8	Orn_DAP_Arg_deC
+4.1e-31	119.9	sp|A9KY70|SPEA_SHEB9	Orn_DAP_Arg_deC
+4.5e-31	119.8	sp|P27116|DCOR_LEIDO	Orn_DAP_Arg_deC
+6.6e-31	119.2	sp|Q083L6|SPEA_SHEFN	Orn_DAP_Arg_deC
+7e-31	119.1	sp|Q8EFU5|SPEA_SHEON	Orn_DAP_Arg_deC
+1e-30	118.6	sp|B1KRD4|SPEA_SHEWM	Orn_DAP_Arg_deC
+1.1e-30	118.5	sp|Q7V3M9|SPEA_PROMP	Orn_DAP_Arg_deC
+2.2e-30	117.5	sp|A8FWJ3|SPEA_SHESH	Orn_DAP_Arg_deC
+2.5e-30	117.3	sp|Q0HJY2|SPEA_SHESM	Orn_DAP_Arg_deC
+2.5e-30	117.3	sp|Q0HW78|SPEA_SHESR	Orn_DAP_Arg_deC
+2.7e-30	117.2	sp|Q63764|AZIN1_RAT	Orn_DAP_Arg_deC
+2.9e-30	117.1	sp|Q9ZME5|DCDA_HELPJ	Orn_DAP_Arg_deC
+3.1e-30	117.0	sp|A0KVN8|SPEA_SHESA	Orn_DAP_Arg_deC
+3.1e-30	117.0	sp|Q8ZHG8|SPEA_YERPE	Orn_DAP_Arg_deC
+3.5e-30	116.8	sp|B5XUB1|SPEA_KLEP3	Orn_DAP_Arg_deC
+3.5e-30	116.8	sp|Q12LW6|SPEA_SHEDO	Orn_DAP_Arg_deC
+3.6e-30	116.8	sp|A2BNH3|SPEA_PROMS	Orn_DAP_Arg_deC
+3.8e-30	116.7	sp|Q87JS8|SPEA_VIBPA	Orn_DAP_Arg_deC
+3.8e-30	116.7	sp|A8H5G3|SPEA_SHEPA	Orn_DAP_Arg_deC
+4.1e-30	116.6	sp|A3PA96|SPEA_PROM0	Orn_DAP_Arg_deC
+4.6e-30	116.4	sp|P41023|DCDA_BACMT	Orn_DAP_Arg_deC
+4.8e-30	116.4	sp|B0TQX3|SPEA_SHEHH	Orn_DAP_Arg_deC
+4.8e-30	116.4	sp|Q31DD8|SPEA_PROM9	Orn_DAP_Arg_deC
+4.9e-30	116.3	sp|Q96412|SPE1_DIACA	Orn_DAP_Arg_deC
+5.9e-30	116.1	sp|A1S712|SPEA_SHEAM	Orn_DAP_Arg_deC
+8.8e-30	115.5	sp|A8G243|SPEA_PROM2	Orn_DAP_Arg_deC
+1.1e-29	115.2	sp|Q7VEG4|SPEA_PROMA	Orn_DAP_Arg_deC
+1.3e-29	114.9	sp|C4K6F4|SPEA_HAMD5	Orn_DAP_Arg_deC
+1.3e-29	114.9	sp|B5F5L1|SPEA_SALA4	Orn_DAP_Arg_deC
+1.3e-29	114.9	sp|Q57K30|SPEA_SALCH	Orn_DAP_Arg_deC
+1.3e-29	114.9	sp|B5FUJ7|SPEA_SALDC	Orn_DAP_Arg_deC
+1.3e-29	114.9	sp|B4THH1|SPEA_SALHS	Orn_DAP_Arg_deC
+1.3e-29	114.9	sp|A9N4N1|SPEA_SALPB	Orn_DAP_Arg_deC
+1.3e-29	114.9	sp|B4TV55|SPEA_SALSV	Orn_DAP_Arg_deC
+1.3e-29	114.9	sp|P60659|SPEA_SALTY	Orn_DAP_Arg_deC
+1.3e-29	114.9	sp|P60658|SPEA_SALTI	Orn_DAP_Arg_deC
+1.3e-29	114.9	sp|B4T5J3|SPEA_SALNS	Orn_DAP_Arg_deC
+1.4e-29	114.9	sp|P44316|DCDA_HAEIN	Orn_DAP_Arg_deC
+1.4e-29	114.8	sp|P22220|SPE1_AVESA	Orn_DAP_Arg_deC
+1.5e-29	114.7	sp|Q9X5M1|DCDA_MYCS2	Orn_DAP_Arg_deC
+1.9e-29	114.4	sp|Q9KLD1|SPEA_VIBCH	Orn_DAP_Arg_deC
+2.2e-29	114.2	sp|Q8XCX9|SPEA_ECO57	Orn_DAP_Arg_deC
+2.2e-29	114.2	sp|B5YQD6|SPEA_ECO5E	Orn_DAP_Arg_deC
+2.2e-29	114.2	sp|Q8FE34|SPEA_ECOL6	Orn_DAP_Arg_deC
+2.2e-29	114.2	sp|B1LDE8|SPEA_ECOSM	Orn_DAP_Arg_deC
+2.6e-29	113.9	sp|Q0T0V3|SPEA_SHIF8	Orn_DAP_Arg_deC
+2.6e-29	113.9	sp|Q83Q93|SPEA_SHIFL	Orn_DAP_Arg_deC
+3.3e-29	113.6	sp|B9M6H6|SPEA_GEOSF	Orn_DAP_Arg_deC
+3.4e-29	113.6	sp|P21170|SPEA_ECOLI	Orn_DAP_Arg_deC
+5.7e-29	112.8	sp|B5EIW4|SPEA_GEOBB	Orn_DAP_Arg_deC
+5.7e-29	112.8	sp|C6E3V4|SPEA_GEOSM	Orn_DAP_Arg_deC
+8.2e-29	112.3	sp|A1AS90|SPEA_PELPD	Orn_DAP_Arg_deC
+8.6e-29	112.2	sp|A2BU00|SPEA_PROM5	Orn_DAP_Arg_deC
+6.4e-28	109.3	sp|Q8RQM6|DCDA_COREF	Orn_DAP_Arg_deC
+8.9e-28	108.8	sp|B4F1A4|SPEA_PROMH	Orn_DAP_Arg_deC
+1.5e-27	108.1	sp|P74576|SPEA1_SYNY3	Orn_DAP_Arg_deC
+2.6e-27	107.3	sp|A5GB52|SPEA_GEOUR	Orn_DAP_Arg_deC
+2.9e-27	107.1	sp|Q7U3S0|SPEA_SYNPX	Orn_DAP_Arg_deC
+3.9e-27	106.7	sp|A0A4W3|SPEA_GEOSL	Orn_DAP_Arg_deC
+4.8e-27	106.4	sp|Q39X78|SPEA_GEOMG	Orn_DAP_Arg_deC
+5e-27	106.3	sp|A1TY02|SPEA_MARAV	Orn_DAP_Arg_deC
+6.4e-27	106.0	sp|Q9RXR4|SPEA_DEIRA	Orn_DAP_Arg_deC
+1e-26	105.3	sp|P09890|DCDA_CORGL	Orn_DAP_Arg_deC
+1.5e-26	104.8	sp|O82475|SPE1_BRAJU	Orn_DAP_Arg_deC
+1.6e-26	104.7	sp|Q39827|SPE1_SOYBN	Orn_DAP_Arg_deC
+1.6e-26	104.7	sp|Q7N121|SPEA_PHOLL	Orn_DAP_Arg_deC
+1.8e-26	104.5	sp|B3EAF3|SPEA_GEOLS	Orn_DAP_Arg_deC
+1.8e-26	104.5	sp|A5GWM2|SPEA_SYNR3	Orn_DAP_Arg_deC
+2.5e-26	104.0	sp|Q7UTS2|SPEA_RHOBA	Orn_DAP_Arg_deC
+3e-26	103.8	sp|Q9KCM5|DCDA_BACHD	Orn_DAP_Arg_deC
+3.1e-26	103.7	sp|Q96A70|ADC_HUMAN	Orn_DAP_Arg_deC
+6.5e-26	102.6	sp|Q43075|SPE1_PEA	Orn_DAP_Arg_deC
+2.6e-25	100.6	sp|P72587|SPEA2_SYNY3	Orn_DAP_Arg_deC
+3.7e-25	100.2	sp|Q7TUJ9|SPEA_PROMM	Orn_DAP_Arg_deC
+1e-24	98.7	sp|P49726|SPE1_SOLLC	Orn_DAP_Arg_deC
+1.1e-24	98.5	sp|Q9PII5|DCDA_CAMJE	Orn_DAP_Arg_deC
+1.5e-24	98.1	sp|A2CDK1|SPEA_PROM3	Orn_DAP_Arg_deC
+1.7e-24	97.9	sp|Q8BVM4|ADC_MOUSE	Orn_DAP_Arg_deC
+8e-24	95.7	sp|Q9CL60|SPEA_PASMU	Orn_DAP_Arg_deC
+1.5e-23	94.8	sp|O23141|SPE2_ARATH	Orn_DAP_Arg_deC
+1.6e-23	94.7	sp|Q9SNN0|SPE1_ORYSJ	Orn_DAP_Arg_deC
+8.9e-23	92.2	sp|P31851|TABA_PSESZ	Orn_DAP_Arg_deC
+1.2e-22	91.8	sp|Q9JT25|SPEA_NEIMA	Orn_DAP_Arg_deC
+1.2e-22	91.8	sp|Q9K0U3|SPEA_NEIMB	Orn_DAP_Arg_deC
+1.8e-22	91.2	sp|Q7XRA1|ADC2_ORYSJ	Orn_DAP_Arg_deC
+1.5e-21	88.2	sp|Q9SI64|SPE1_ARATH	Orn_DAP_Arg_deC
+2.2e-21	87.6	sp|C4L9A9|SPEA_TOLAT	Orn_DAP_Arg_deC
+1.3e-18	78.4	sp|A0KIP8|SPEA_AERHH	Orn_DAP_Arg_deC
+3.6e-17	73.6	sp|A4SPD6|SPEA_AERS4	Orn_DAP_Arg_deC
+0.0018	23.1	sp|P55709|Y4YA_RHISN	Orn_DAP_Arg_deC
+1.1	-9.6	sp|O81160|SPE2_THECC	Orn_DAP_Arg_deC
diff --git a/demotic/regress/h2-tbl.out b/demotic/regress/h2-tbl.out
new file mode 100644
index 0000000..0dbc01e
--- /dev/null
+++ b/demotic/regress/h2-tbl.out
@@ -0,0 +1,170 @@
+3e-47	0	1	123	Orn_DAP_Arg_deC	285	391	sp|O29458|DCDA_ARCFU	Diaminopimelate decarboxylase O  
+1.2e-46	0	1	123	Orn_DAP_Arg_deC	307	426	sp|Q9UQW9|DCOR_SCHPO	Ornithine decarboxylase OS=Schi  
+8.4e-44	0	1	123	Orn_DAP_Arg_deC	292	398	sp|O27390|DCDA_METTH	Diaminopimelate decarboxylase O  
+2.3e-43	0	1	123	Orn_DAP_Arg_deC	284	405	sp|Q9I8S4|DCOR2_XENLA	Ornithine decarboxylase 2 OS=Xe  
+2.5e-43	0	1	123	Orn_DAP_Arg_deC	285	408	sp|P09057|DCOR_RAT	Ornithine decarboxylase OS=Ratt  
+3.8e-43	0	1	123	Orn_DAP_Arg_deC	282	402	sp|P14019|DCOR_CRIGR	Ornithine decarboxylase OS=Cric  
+3.9e-43	0	1	123	Orn_DAP_Arg_deC	285	408	sp|P00860|DCOR_MOUSE	Ornithine decarboxylase OS=Mus   
+3.9e-43	0	1	123	Orn_DAP_Arg_deC	285	408	sp|P27119|DCOR_MUSPA	Ornithine decarboxylase OS=Mus   
+8e-43	0	1	123	Orn_DAP_Arg_deC	275	398	sp|P27118|DCOR_CHICK	Ornithine decarboxylase (Fragme  
+2.8e-42	0	1	123	Orn_DAP_Arg_deC	285	409	sp|P27120|DCOR1_XENLA	Ornithine decarboxylase 1 OS=Xe  
+3e-42	0	1	123	Orn_DAP_Arg_deC	285	408	sp|P11926|DCOR_HUMAN	Ornithine decarboxylase OS=Homo  
+2.1e-41	0	1	123	Orn_DAP_Arg_deC	285	408	sp|P27117|DCOR_BOVIN	Ornithine decarboxylase OS=Bos   
+1.6e-40	0	1	123	Orn_DAP_Arg_deC	283	406	sp|P07805|DCOR_TRYBB	Ornithine decarboxylase OS=Tryp  
+2.6e-40	0	1	123	Orn_DAP_Arg_deC	257	362	sp|Q9X1K5|DCDA_THEMA	Diaminopimelate decarboxylase O  
+3.7e-39	0	1	123	Orn_DAP_Arg_deC	294	416	sp|P49725|DCOR_PANRE	Ornithine decarboxylase OS=Pana  
+6.6e-39	0	1	123	Orn_DAP_Arg_deC	308	424	sp|O22616|DCOR_SOLLC	Ornithine decarboxylase OS=Sola  
+7.3e-39	0	1	123	Orn_DAP_Arg_deC	326	471	sp|P27121|DCOR_NEUCR	Ornithine decarboxylase OS=Neur  
+8.2e-39	0	1	123	Orn_DAP_Arg_deC	308	424	sp|P50134|DCOR_DATST	Ornithine decarboxylase OS=Datu  
+4e-38	0	1	123	Orn_DAP_Arg_deC	329	460	sp|P08432|DCOR_YEAST	Ornithine decarboxylase OS=Sacc  
+9.1e-38	0	1	123	Orn_DAP_Arg_deC	346	558	sp|Q8A2B1|SPEA_BACTN	Biosynthetic arginine decarboxy  
+1.9e-37	0	1	123	Orn_DAP_Arg_deC	354	567	sp|Q9HUX1|SPEA_PSEAE	Biosynthetic arginine decarboxy  
+2e-37	0	1	123	Orn_DAP_Arg_deC	343	556	sp|Q7NU27|SPEA_CHRVO	Biosynthetic arginine decarboxy  
+2.5e-37	0	1	123	Orn_DAP_Arg_deC	309	415	sp|O69203|DCDA_ACTPA	Diaminopimelate decarboxylase O  
+2.6e-37	0	1	123	Orn_DAP_Arg_deC	312	428	sp|Q8S3N2|DCOR_CAPAN	Ornithine decarboxylase OS=Caps  
+3.1e-37	0	1	123	Orn_DAP_Arg_deC	279	397	sp|P00861|DCDA_ECOLI	Diaminopimelate decarboxylase O  
+3.1e-37	0	1	123	Orn_DAP_Arg_deC	346	557	sp|Q7NE10|SPEA_GLOVI	Biosynthetic arginine decarboxy  
+3.8e-37	0	1	123	Orn_DAP_Arg_deC	305	410	sp|Q58497|DCDA_METJA	Diaminopimelate decarboxylase O  
+5.4e-37	0	1	123	Orn_DAP_Arg_deC	346	558	sp|Q5LIQ3|SPEA_BACFN	Biosynthetic arginine decarboxy  
+5.4e-37	0	1	123	Orn_DAP_Arg_deC	346	558	sp|Q64ZT8|SPEA_BACFR	Biosynthetic arginine decarboxy  
+1.3e-36	0	1	123	Orn_DAP_Arg_deC	354	567	sp|Q87VU3|SPEA_PSESM	Biosynthetic arginine decarboxy  
+2.2e-36	0	1	123	Orn_DAP_Arg_deC	276	391	sp|P40807|DCOR1_DROME	Ornithine decarboxylase 1 OS=Dr  
+2.3e-36	0	1	123	Orn_DAP_Arg_deC	343	555	sp|B0U1H6|SPEA_XYLFM	Biosynthetic arginine decarboxy  
+2.3e-36	0	1	123	Orn_DAP_Arg_deC	343	555	sp|Q9PH02|SPEA_XYLFA	Biosynthetic arginine decarboxy  
+4.1e-36	0	1	123	Orn_DAP_Arg_deC	285	390	sp|O05321|DCDA_PSEFL	Diaminopimelate decarboxylase O  
+4.7e-36	0	1	123	Orn_DAP_Arg_deC	343	555	sp|B2I6M1|SPEA_XYLF2	Biosynthetic arginine decarboxy  
+4.7e-36	0	1	123	Orn_DAP_Arg_deC	343	555	sp|Q87F25|SPEA_XYLFT	Biosynthetic arginine decarboxy  
+6.1e-36	0	1	123	Orn_DAP_Arg_deC	353	564	sp|Q8DHY6|SPEA_THEEB	Biosynthetic arginine decarboxy  
+6.8e-36	0	1	123	Orn_DAP_Arg_deC	290	396	sp|O67262|DCDA_AQUAE	Diaminopimelate decarboxylase O  
+1.3e-35	0	1	123	Orn_DAP_Arg_deC	354	567	sp|Q88QC7|SPEA_PSEPK	Biosynthetic arginine decarboxy  
+4.2e-35	0	1	123	Orn_DAP_Arg_deC	282	406	sp|O14977|AZIN1_HUMAN	Antizyme inhibitor 1 OS=Homo sa  
+4.2e-35	0	1	123	Orn_DAP_Arg_deC	282	406	sp|Q5R7K3|AZIN1_PONAB	Antizyme inhibitor 1 OS=Pongo a  
+5.1e-35	0	1	123	Orn_DAP_Arg_deC	282	406	sp|O35484|AZIN1_MOUSE	Antizyme inhibitor 1 OS=Mus mus  
+5.2e-35	0	1	123	Orn_DAP_Arg_deC	336	449	sp|Q50140|DCDA_MYCLE	Diaminopimelate decarboxylase O  
+5.5e-35	0	1	123	Orn_DAP_Arg_deC	346	558	sp|A6L012|SPEA_BACV8	Biosynthetic arginine decarboxy  
+6.8e-35	0	1	123	Orn_DAP_Arg_deC	284	389	sp|P19572|DCDA_PSEAE	Diaminopimelate decarboxylase O  
+7.9e-35	0	1	123	Orn_DAP_Arg_deC	395	606	sp|Q8YRP3|SPEA_ANASP	Biosynthetic arginine decarboxy  
+1.2e-34	0	1	123	Orn_DAP_Arg_deC	301	409	sp|P23630|DCDA_BACSU	Diaminopimelate decarboxylase O  
+2.2e-34	0	1	123	Orn_DAP_Arg_deC	286	403	sp|Q9ZBH5|DCDA_STRCO	Diaminopimelate decarboxylase O  
+2.4e-34	0	1	123	Orn_DAP_Arg_deC	275	393	sp|Q8K9C4|DCDA_BUCAP	Diaminopimelate decarboxylase O  
+2.7e-34	0	1	123	Orn_DAP_Arg_deC	345	558	sp|Q0ACK8|SPEA_ALHEH	Biosynthetic arginine decarboxy  
+6.8e-34	0	1	123	Orn_DAP_Arg_deC	351	459	sp|Q949X7|DCDA1_ARATH	Diaminopimelate decarboxylase 1  
+8.1e-34	0	1	123	Orn_DAP_Arg_deC	356	464	sp|Q94A94|DCDA2_ARATH	Diaminopimelate decarboxylase 2  
+9.9e-34	0	1	123	Orn_DAP_Arg_deC	311	424	sp|P0A5M5|DCDA_MYCBO	Diaminopimelate decarboxylase O  
+9.9e-34	0	1	123	Orn_DAP_Arg_deC	311	424	sp|P0A5M4|DCDA_MYCTU	Diaminopimelate decarboxylase O  
+1.7e-33	0	1	123	Orn_DAP_Arg_deC	286	407	sp|P41931|DCOR_CAEEL	Ornithine decarboxylase OS=Caen  
+1.9e-33	0	1	123	Orn_DAP_Arg_deC	266	371	sp|O50657|DCLO_SELRU	Lysine/ornithine decarboxylase   
+2.4e-33	0	1	123	Orn_DAP_Arg_deC	286	391	sp|Q9KVL7|DCDA_VIBCH	Diaminopimelate decarboxylase O  
+3.1e-33	0	1	123	Orn_DAP_Arg_deC	356	463	sp|Q6ZG77|DCDA_ORYSJ	Probable diaminopimelate decarb  
+3.6e-33	0	1	123	Orn_DAP_Arg_deC	332	440	sp|Q55484|DCDA_SYNY3	Diaminopimelate decarboxylase O  
+8.1e-33	0	1	123	Orn_DAP_Arg_deC	276	381	sp|Q9JXM2|DCDA_NEIMB	Diaminopimelate decarboxylase O  
+1e-32	0	1	123	Orn_DAP_Arg_deC	343	555	sp|Q8P448|SPEA_XANCP	Biosynthetic arginine decarboxy  
+1.2e-32	0	1	123	Orn_DAP_Arg_deC	328	450	sp|Q54UF3|DCOR_DICDI	Probable ornithine decarboxylas  
+1.3e-32	0	1	123	Orn_DAP_Arg_deC	289	394	sp|Q9Z661|DCDA_ZYMMO	Diaminopimelate decarboxylase O  
+2.6e-32	0	1	123	Orn_DAP_Arg_deC	276	381	sp|Q9JWA6|DCDA_NEIMA	Diaminopimelate decarboxylase O  
+3.6e-32	0	1	123	Orn_DAP_Arg_deC	276	390	sp|P40808|DCOR2_DROME	Ornithine decarboxylase 2 OS=Dr  
+5.1e-32	0	1	123	Orn_DAP_Arg_deC	343	555	sp|Q8PFQ5|SPEA_XANAC	Biosynthetic arginine decarboxy  
+9e-32	0	1	123	Orn_DAP_Arg_deC	270	377	sp|P56129|DCDA_HELPY	Diaminopimelate decarboxylase O  
+1.4e-31	0	1	123	Orn_DAP_Arg_deC	275	393	sp|Q89AC6|DCDA_BUCBP	Diaminopimelate decarboxylase O  
+1.4e-31	0	1	123	Orn_DAP_Arg_deC	324	468	sp|P78599|DCOR_CANAL	Ornithine decarboxylase OS=Cand  
+1.8e-31	0	1	123	Orn_DAP_Arg_deC	355	571	sp|Q8DA54|SPEA_VIBVU	Biosynthetic arginine decarboxy  
+1.8e-31	0	1	123	Orn_DAP_Arg_deC	354	570	sp|Q7MK24|SPEA_VIBVY	Biosynthetic arginine decarboxy  
+1.8e-31	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A4Y5Y9|SPEA_SHEPC	Biosynthetic arginine decarboxy  
+1.8e-31	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A1RKK8|SPEA_SHESW	Biosynthetic arginine decarboxy  
+2e-31	0	1	123	Orn_DAP_Arg_deC	275	393	sp|P57513|DCDA_BUCAI	Diaminopimelate decarboxylase O  
+2.1e-31	0	1	123	Orn_DAP_Arg_deC	253	357	sp|Q9RTK2|DCDA_DEIRA	Diaminopimelate decarboxylase O  
+2.2e-31	0	1	123	Orn_DAP_Arg_deC	350	566	sp|B8CR70|SPEA_SHEPW	Biosynthetic arginine decarboxy  
+3.2e-31	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A3QDD8|SPEA_SHELP	Biosynthetic arginine decarboxy  
+4.1e-31	0	1	123	Orn_DAP_Arg_deC	350	566	sp|B8EAI2|SPEA_SHEB2	Biosynthetic arginine decarboxy  
+4.1e-31	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A3D3G2|SPEA_SHEB5	Biosynthetic arginine decarboxy  
+4.1e-31	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A6WM65|SPEA_SHEB8	Biosynthetic arginine decarboxy  
+4.1e-31	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A9KY70|SPEA_SHEB9	Biosynthetic arginine decarboxy  
+4.5e-31	0	1	123	Orn_DAP_Arg_deC	509	682	sp|P27116|DCOR_LEIDO	Ornithine decarboxylase OS=Leis  
+6.6e-31	0	1	123	Orn_DAP_Arg_deC	350	566	sp|Q083L6|SPEA_SHEFN	Biosynthetic arginine decarboxy  
+7e-31	0	1	123	Orn_DAP_Arg_deC	350	566	sp|Q8EFU5|SPEA_SHEON	Biosynthetic arginine decarboxy  
+1e-30	0	1	123	Orn_DAP_Arg_deC	350	566	sp|B1KRD4|SPEA_SHEWM	Biosynthetic arginine decarboxy  
+1.1e-30	0	1	123	Orn_DAP_Arg_deC	355	574	sp|Q7V3M9|SPEA_PROMP	Biosynthetic arginine decarboxy  
+2.2e-30	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A8FWJ3|SPEA_SHESH	Biosynthetic arginine decarboxy  
+2.5e-30	0	1	123	Orn_DAP_Arg_deC	350	566	sp|Q0HJY2|SPEA_SHESM	Biosynthetic arginine decarboxy  
+2.5e-30	0	1	123	Orn_DAP_Arg_deC	350	566	sp|Q0HW78|SPEA_SHESR	Biosynthetic arginine decarboxy  
+2.7e-30	0	1	123	Orn_DAP_Arg_deC	282	406	sp|Q63764|AZIN1_RAT	Antizyme inhibitor 1 OS=Rattus   
+2.9e-30	0	1	123	Orn_DAP_Arg_deC	270	377	sp|Q9ZME5|DCDA_HELPJ	Diaminopimelate decarboxylase O  
+3.1e-30	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A0KVN8|SPEA_SHESA	Biosynthetic arginine decarboxy  
+3.1e-30	0	1	123	Orn_DAP_Arg_deC	372	588	sp|Q8ZHG8|SPEA_YERPE	Biosynthetic arginine decarboxy  
+3.5e-30	0	1	123	Orn_DAP_Arg_deC	345	561	sp|B5XUB1|SPEA_KLEP3	Biosynthetic arginine decarboxy  
+3.5e-30	0	1	123	Orn_DAP_Arg_deC	350	566	sp|Q12LW6|SPEA_SHEDO	Biosynthetic arginine decarboxy  
+3.6e-30	0	1	123	Orn_DAP_Arg_deC	355	574	sp|A2BNH3|SPEA_PROMS	Biosynthetic arginine decarboxy  
+3.8e-30	0	1	123	Orn_DAP_Arg_deC	354	570	sp|Q87JS8|SPEA_VIBPA	Biosynthetic arginine decarboxy  
+3.8e-30	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A8H5G3|SPEA_SHEPA	Biosynthetic arginine decarboxy  
+4.1e-30	0	1	123	Orn_DAP_Arg_deC	355	574	sp|A3PA96|SPEA_PROM0	Biosynthetic arginine decarboxy  
+4.6e-30	0	1	123	Orn_DAP_Arg_deC	301	409	sp|P41023|DCDA_BACMT	Diaminopimelate decarboxylase O  
+4.8e-30	0	1	123	Orn_DAP_Arg_deC	350	566	sp|B0TQX3|SPEA_SHEHH	Biosynthetic arginine decarboxy  
+4.8e-30	0	1	123	Orn_DAP_Arg_deC	355	574	sp|Q31DD8|SPEA_PROM9	Biosynthetic arginine decarboxy  
+4.9e-30	0	1	123	Orn_DAP_Arg_deC	491	605	sp|Q96412|SPE1_DIACA	Arginine decarboxylase OS=Diant  
+5.9e-30	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A1S712|SPEA_SHEAM	Biosynthetic arginine decarboxy  
+8.8e-30	0	1	123	Orn_DAP_Arg_deC	355	574	sp|A8G243|SPEA_PROM2	Biosynthetic arginine decarboxy  
+1.1e-29	0	1	123	Orn_DAP_Arg_deC	355	574	sp|Q7VEG4|SPEA_PROMA	Biosynthetic arginine decarboxy  
+1.3e-29	0	1	123	Orn_DAP_Arg_deC	346	562	sp|C4K6F4|SPEA_HAMD5	Biosynthetic arginine decarboxy  
+1.3e-29	0	1	123	Orn_DAP_Arg_deC	345	561	sp|B5F5L1|SPEA_SALA4	Biosynthetic arginine decarboxy  
+1.3e-29	0	1	123	Orn_DAP_Arg_deC	345	561	sp|Q57K30|SPEA_SALCH	Biosynthetic arginine decarboxy  
+1.3e-29	0	1	123	Orn_DAP_Arg_deC	345	561	sp|B5FUJ7|SPEA_SALDC	Biosynthetic arginine decarboxy  
+1.3e-29	0	1	123	Orn_DAP_Arg_deC	345	561	sp|B4THH1|SPEA_SALHS	Biosynthetic arginine decarboxy  
+1.3e-29	0	1	123	Orn_DAP_Arg_deC	345	561	sp|A9N4N1|SPEA_SALPB	Biosynthetic arginine decarboxy  
+1.3e-29	0	1	123	Orn_DAP_Arg_deC	345	561	sp|B4TV55|SPEA_SALSV	Biosynthetic arginine decarboxy  
+1.3e-29	0	1	123	Orn_DAP_Arg_deC	371	587	sp|P60659|SPEA_SALTY	Biosynthetic arginine decarboxy  
+1.3e-29	0	1	123	Orn_DAP_Arg_deC	371	587	sp|P60658|SPEA_SALTI	Biosynthetic arginine decarboxy  
+1.3e-29	0	1	123	Orn_DAP_Arg_deC	345	561	sp|B4T5J3|SPEA_SALNS	Biosynthetic arginine decarboxy  
+1.4e-29	0	1	123	Orn_DAP_Arg_deC	285	391	sp|P44316|DCDA_HAEIN	Diaminopimelate decarboxylase O  
+1.4e-29	0	1	123	Orn_DAP_Arg_deC	355	532	sp|P22220|SPE1_AVESA	Arginine decarboxylase OS=Avena  
+1.5e-29	0	1	123	Orn_DAP_Arg_deC	336	449	sp|Q9X5M1|DCDA_MYCS2	Diaminopimelate decarboxylase O  
+1.9e-29	0	1	123	Orn_DAP_Arg_deC	354	570	sp|Q9KLD1|SPEA_VIBCH	Biosynthetic arginine decarboxy  
+2.2e-29	0	1	123	Orn_DAP_Arg_deC	371	587	sp|Q8XCX9|SPEA_ECO57	Biosynthetic arginine decarboxy  
+2.2e-29	0	1	123	Orn_DAP_Arg_deC	345	561	sp|B5YQD6|SPEA_ECO5E	Biosynthetic arginine decarboxy  
+2.2e-29	0	1	123	Orn_DAP_Arg_deC	371	587	sp|Q8FE34|SPEA_ECOL6	Biosynthetic arginine decarboxy  
+2.2e-29	0	1	123	Orn_DAP_Arg_deC	345	561	sp|B1LDE8|SPEA_ECOSM	Biosynthetic arginine decarboxy  
+2.6e-29	0	1	123	Orn_DAP_Arg_deC	345	561	sp|Q0T0V3|SPEA_SHIF8	Biosynthetic arginine decarboxy  
+2.6e-29	0	1	123	Orn_DAP_Arg_deC	371	587	sp|Q83Q93|SPEA_SHIFL	Biosynthetic arginine decarboxy  
+3.3e-29	0	1	123	Orn_DAP_Arg_deC	346	561	sp|B9M6H6|SPEA_GEOSF	Biosynthetic arginine decarboxy  
+3.4e-29	0	1	123	Orn_DAP_Arg_deC	371	587	sp|P21170|SPEA_ECOLI	Biosynthetic arginine decarboxy  
+5.7e-29	0	1	123	Orn_DAP_Arg_deC	425	561	sp|B5EIW4|SPEA_GEOBB	Biosynthetic arginine decarboxy  
+5.7e-29	0	1	123	Orn_DAP_Arg_deC	425	561	sp|C6E3V4|SPEA_GEOSM	Biosynthetic arginine decarboxy  
+8.2e-29	0	1	123	Orn_DAP_Arg_deC	425	561	sp|A1AS90|SPEA_PELPD	Biosynthetic arginine decarboxy  
+8.6e-29	0	1	123	Orn_DAP_Arg_deC	355	574	sp|A2BU00|SPEA_PROM5	Biosynthetic arginine decarboxy  
+6.4e-28	0	1	123	Orn_DAP_Arg_deC	324	437	sp|Q8RQM6|DCDA_COREF	Diaminopimelate decarboxylase O  
+8.9e-28	0	1	123	Orn_DAP_Arg_deC	347	563	sp|B4F1A4|SPEA_PROMH	Biosynthetic arginine decarboxy  
+1.5e-27	0	1	123	Orn_DAP_Arg_deC	396	615	sp|P74576|SPEA1_SYNY3	Biosynthetic arginine decarboxy  
+2.6e-27	0	1	123	Orn_DAP_Arg_deC	346	561	sp|A5GB52|SPEA_GEOUR	Biosynthetic arginine decarboxy  
+2.9e-27	0	1	123	Orn_DAP_Arg_deC	351	570	sp|Q7U3S0|SPEA_SYNPX	Biosynthetic arginine decarboxy  
+3.9e-27	0	1	123	Orn_DAP_Arg_deC	425	561	sp|A0A4W3|SPEA_GEOSL	Biosynthetic arginine decarboxy  
+4.8e-27	0	1	123	Orn_DAP_Arg_deC	425	561	sp|Q39X78|SPEA_GEOMG	Biosynthetic arginine decarboxy  
+5e-27	0	1	123	Orn_DAP_Arg_deC	350	566	sp|A1TY02|SPEA_MARAV	Biosynthetic arginine decarboxy  
+6.4e-27	0	1	123	Orn_DAP_Arg_deC	372	586	sp|Q9RXR4|SPEA_DEIRA	Biosynthetic arginine decarboxy  
+1e-26	0	1	123	Orn_DAP_Arg_deC	310	423	sp|P09890|DCDA_CORGL	Diaminopimelate decarboxylase O  
+1.5e-26	0	1	123	Orn_DAP_Arg_deC	390	585	sp|O82475|SPE1_BRAJU	Arginine decarboxylase OS=Brass  
+1.6e-26	0	1	123	Orn_DAP_Arg_deC	401	596	sp|Q39827|SPE1_SOYBN	Arginine decarboxylase OS=Glyci  
+1.6e-26	0	1	123	Orn_DAP_Arg_deC	347	563	sp|Q7N121|SPEA_PHOLL	Biosynthetic arginine decarboxy  
+1.8e-26	0	1	123	Orn_DAP_Arg_deC	346	561	sp|B3EAF3|SPEA_GEOLS	Biosynthetic arginine decarboxy  
+1.8e-26	0	1	123	Orn_DAP_Arg_deC	355	566	sp|A5GWM2|SPEA_SYNR3	Biosynthetic arginine decarboxy  
+2.5e-26	0	1	123	Orn_DAP_Arg_deC	460	592	sp|Q7UTS2|SPEA_RHOBA	Biosynthetic arginine decarboxy  
+3e-26	0	1	123	Orn_DAP_Arg_deC	301	409	sp|Q9KCM5|DCDA_BACHD	Diaminopimelate decarboxylase O  
+3.1e-26	0	1	123	Orn_DAP_Arg_deC	286	409	sp|Q96A70|ADC_HUMAN	Arginine decarboxylase OS=Homo   
+6.5e-26	0	1	123	Orn_DAP_Arg_deC	494	609	sp|Q43075|SPE1_PEA	Arginine decarboxylase OS=Pisum  
+2.6e-25	0	1	123	Orn_DAP_Arg_deC	375	587	sp|P72587|SPEA2_SYNY3	Biosynthetic arginine decarboxy  
+3.7e-25	0	1	123	Orn_DAP_Arg_deC	355	574	sp|Q7TUJ9|SPEA_PROMM	Biosynthetic arginine decarboxy  
+1e-24	0	1	123	Orn_DAP_Arg_deC	291	492	sp|P49726|SPE1_SOLLC	Arginine decarboxylase OS=Solan   
+1.1e-24	0	1	123	Orn_DAP_Arg_deC	270	375	sp|Q9PII5|DCDA_CAMJE	Diaminopimelate decarboxylase O   
+1.5e-24	0	1	123	Orn_DAP_Arg_deC	355	574	sp|A2CDK1|SPEA_PROM3	Biosynthetic arginine decarboxy   
+1.7e-24	0	1	123	Orn_DAP_Arg_deC	286	408	sp|Q8BVM4|ADC_MOUSE	Antizyme inhibitor 2 OS=Mus mus   
+8e-24	0	1	123	Orn_DAP_Arg_deC	357	573	sp|Q9CL60|SPEA_PASMU	Biosynthetic arginine decarboxy   
+1.5e-23	0	1	123	Orn_DAP_Arg_deC	481	596	sp|O23141|SPE2_ARATH	Arginine decarboxylase 2 OS=Ara   
+1.6e-23	0	1	123	Orn_DAP_Arg_deC	401	598	sp|Q9SNN0|SPE1_ORYSJ	Arginine decarboxylase 1 OS=Ory   
+8.9e-23	0	1	123	Orn_DAP_Arg_deC	278	383	sp|P31851|TABA_PSESZ	Protein tabA OS=Pseudomonas syr   
+1.2e-22	0	1	123	Orn_DAP_Arg_deC	343	559	sp|Q9JT25|SPEA_NEIMA	Biosynthetic arginine decarboxy   
+1.2e-22	0	1	123	Orn_DAP_Arg_deC	343	559	sp|Q9K0U3|SPEA_NEIMB	Biosynthetic arginine decarboxy   
+1.8e-22	0	1	123	Orn_DAP_Arg_deC	381	547	sp|Q7XRA1|ADC2_ORYSJ	Arginine decarboxylase 2 OS=Ory   
+1.5e-21	0	1	123	Orn_DAP_Arg_deC	385	584	sp|Q9SI64|SPE1_ARATH	Arginine decarboxylase 1 OS=Ara   
+2.2e-21	0	1	123	Orn_DAP_Arg_deC	433	566	sp|C4L9A9|SPEA_TOLAT	Biosynthetic arginine decarboxy   
+1.3e-18	0	1	123	Orn_DAP_Arg_deC	348	564	sp|A0KIP8|SPEA_AERHH	Biosynthetic arginine decarboxy   
+3.6e-17	0	1	123	Orn_DAP_Arg_deC	348	564	sp|A4SPD6|SPEA_AERS4	Biosynthetic arginine decarboxy   
+0.0018	0	1	123	Orn_DAP_Arg_deC	324	439	sp|P55709|Y4YA_RHISN	Uncharacterized protein y4yA OS   
+1.1	0	1	123	Orn_DAP_Arg_deC	341	406	sp|O81160|SPE2_THECC	Arginine decarboxylase (Fragmen   
diff --git a/demotic/regress/hmmsearch-profmark.out b/demotic/regress/hmmsearch-profmark.out
new file mode 100644
index 0000000..a0ae509
--- /dev/null
+++ b/demotic/regress/hmmsearch-profmark.out
@@ -0,0 +1,930 @@
+4.2e-39	138.8	sp|P06485|US02_HHV11	US2
+2e-38	136.6	sp|P13292|US02_HHV2H	US2
+1.6e-35	127.2	sp|Q05106|US453_GAHVG	US2
+2.3e-35	126.8	sp|P32517|US02_EHV1K	US2
+3.3e-33	119.8	sp|P28964|US02_EHV1B	US2
+2.1e-31	114.0	sp|Q08099|US02_BHV1S	US2
+1.8e-17	68.9	sp|P24382|US02_SUHVN	US2
+1.4	14.3	sp|Q9ZK80|ATPG_HELPJ	US2
+1.4	14.3	sp|P56082|ATPG_HELPY	US2
+1.5	14.2	sp|B2UUP1|ATPG_HELPS	US2
+1.5	14.2	sp|B6JMX3|ATPG_HELP2	US2
+2.6	13.4	sp|Q17Y79|ATPG_HELAH	US2
+3.6	13.0	sp|B5Z8D1|ATPG_HELPG	US2
+3.9	12.9	sp|Q1CSD4|ATPG_HELPH	US2
+3e-40	142.2	sp|A7Z4E5|MURG_BACA2	Glyco_transf_28
+3.6e-40	141.9	sp|Q65JY0|MURG_BACLD	Glyco_transf_28
+7.6e-40	140.8	sp|P37585|MURG_BACSU	Glyco_transf_28
+3e-39	138.9	sp|A8FCY1|MURG_BACP2	Glyco_transf_28
+7.6e-39	137.6	sp|Q812W5|MURG1_BACCR	Glyco_transf_28
+1.1e-38	137.0	sp|A3MY90|MURG_ACTP2	Glyco_transf_28
+1.5e-38	136.7	sp|A0RHT1|MURG2_BACAH	Glyco_transf_28
+1.5e-38	136.7	sp|Q636B6|MURG1_BACCZ	Glyco_transf_28
+1.5e-38	136.7	sp|Q81JG5|MURG1_BACAN	Glyco_transf_28
+1.8e-38	136.4	sp|Q732F8|MURG1_BACC1	Glyco_transf_28
+2.7e-38	135.8	sp|B7GGI2|MURG_ANOFW	Glyco_transf_28
+2.9e-38	135.7	sp|A7GRN6|MURG_BACCN	Glyco_transf_28
+3.7e-38	135.4	sp|B0BRH7|MURG_ACTPJ	Glyco_transf_28
+3.7e-38	135.4	sp|B3GZK8|MURG_ACTP7	Glyco_transf_28
+3.8e-38	135.3	sp|Q6HEQ4|MURG1_BACHK	Glyco_transf_28
+9.4e-38	134.1	sp|O07670|MURG_ENTHR	Glyco_transf_28
+1.6e-37	133.3	sp|A7FM66|MURG_YERP3	Glyco_transf_28
+1.6e-37	133.3	sp|B1JK81|MURG_YERPY	Glyco_transf_28
+1.6e-37	133.3	sp|B2K4E6|MURG_YERPB	Glyco_transf_28
+1.6e-37	133.3	sp|Q66EK5|MURG_YERPS	Glyco_transf_28
+2e-37	133.0	sp|A1JJJ3|MURG_YERE8	Glyco_transf_28
+2.2e-37	132.8	sp|A9MQC2|MURG_SALAR	Glyco_transf_28
+2.3e-37	132.8	sp|P64869|Y1526_MYCTU	Glyco_transf_28
+2.3e-37	132.8	sp|P64870|Y1553_MYCBO	Glyco_transf_28
+3.1e-37	132.4	sp|Q65RY6|MURG_MANSM	Glyco_transf_28
+3.5e-37	132.2	sp|B2VD91|MURG_ERWT9	Glyco_transf_28
+3.6e-37	132.2	sp|Q4QLF8|MURG_HAEI8	Glyco_transf_28
+3.8e-37	132.1	sp|A5UIR2|MURG_HAEIG	Glyco_transf_28
+4e-37	132.0	sp|P45065|MURG_HAEIN	Glyco_transf_28
+4.7e-37	131.8	sp|A9R124|MURG_YERPG	Glyco_transf_28
+4.7e-37	131.8	sp|Q1C214|MURG_YERPA	Glyco_transf_28
+4.7e-37	131.8	sp|Q1CMM7|MURG_YERPN	Glyco_transf_28
+4.7e-37	131.8	sp|Q8ZIE9|MURG_YERPE	Glyco_transf_28
+5.7e-37	131.5	sp|O07109|MURG_ENTFA	Glyco_transf_28
+5.8e-37	131.5	sp|A3QIM1|MURG_SHELP	Glyco_transf_28
+6e-37	131.5	sp|A8G9S7|MURG_SERP5	Glyco_transf_28
+6.3e-37	131.4	sp|B7LWF6|MURG_ESCF3	Glyco_transf_28
+7.1e-37	131.2	sp|A7MIE5|MURG_ENTS8	Glyco_transf_28
+7.4e-37	131.2	sp|C6DEU3|MURG_PECCP	Glyco_transf_28
+8.3e-37	131.0	sp|Q88V81|MURG_LACPL	Glyco_transf_28
+8.9e-37	130.9	sp|Q8Z9G9|MURG_SALTI	Glyco_transf_28
+8.9e-37	130.9	sp|B4F111|MURG_PROMH	Glyco_transf_28
+9.9e-37	130.7	sp|A0L1P2|MURG_SHESA	Glyco_transf_28
+9.9e-37	130.7	sp|Q0HZR6|MURG_SHESR	Glyco_transf_28
+1.3e-36	130.4	sp|B5BLC2|MURG_SALPK	Glyco_transf_28
+1.3e-36	130.4	sp|Q5PDC8|MURG_SALPA	Glyco_transf_28
+1.3e-36	130.4	sp|Q9K9T0|MURG_BACHD	Glyco_transf_28
+1.4e-36	130.3	sp|Q8Y5M2|MURG_LISMO	Glyco_transf_28
+1.7e-36	130.0	sp|A9MZL9|MURG_SALPB	Glyco_transf_28
+1.7e-36	130.0	sp|B4TJ87|MURG_SALHS	Glyco_transf_28
+1.7e-36	130.0	sp|B4TXH8|MURG_SALSV	Glyco_transf_28
+1.7e-36	130.0	sp|B5F7W4|MURG_SALA4	Glyco_transf_28
+1.7e-36	130.0	sp|Q8ZRU3|MURG_SALTY	Glyco_transf_28
+1.7e-36	130.0	sp|B4SU50|MURG_SALNS	Glyco_transf_28
+1.7e-36	130.0	sp|A1REZ6|MURG_SHESW	Glyco_transf_28
+1.7e-36	130.0	sp|A4Y2N6|MURG_SHEPC	Glyco_transf_28
+1.7e-36	130.0	sp|A6T4N3|MURG_KLEP7	Glyco_transf_28
+1.7e-36	129.9	sp|B5RH64|MURG_SALG2	Glyco_transf_28
+1.8e-36	129.9	sp|A8ALK6|MURG_CITK8	Glyco_transf_28
+1.8e-36	129.9	sp|Q57TD0|MURG_SALCH	Glyco_transf_28
+1.8e-36	129.9	sp|A6WID1|MURG_SHEB8	Glyco_transf_28
+1.8e-36	129.9	sp|A9KY29|MURG_SHEB9	Glyco_transf_28
+1.8e-36	129.9	sp|B8E698|MURG_SHEB2	Glyco_transf_28
+2e-36	129.8	sp|B5Y1U7|MURG_KLEP3	Glyco_transf_28
+2.2e-36	129.6	sp|A3CZM1|MURG_SHEB5	Glyco_transf_28
+2.4e-36	129.5	sp|Q7U336|MURG_HAEDU	Glyco_transf_28
+2.4e-36	129.5	sp|B7VJ03|MURG_VIBSL	Glyco_transf_28
+2.5e-36	129.5	sp|Q0I1D3|MURG_HAES1	Glyco_transf_28
+2.5e-36	129.4	sp|B5FI72|MURG_SALDC	Glyco_transf_28
+2.6e-36	129.4	sp|A2RJQ4|MURG_LACLM	Glyco_transf_28
+2.6e-36	129.4	sp|Q02XY0|MURG_LACLS	Glyco_transf_28
+2.7e-36	129.3	sp|B7MNU9|MURG_ECO81	Glyco_transf_28
+2.7e-36	129.3	sp|B7NHJ6|MURG_ECO7I	Glyco_transf_28
+2.7e-36	129.3	sp|B7UIE0|MURG_ECO27	Glyco_transf_28
+2.7e-36	129.3	sp|Q0TLP9|MURG_ECOL5	Glyco_transf_28
+2.7e-36	129.3	sp|Q8FL64|MURG_ECOL6	Glyco_transf_28
+2.9e-36	129.2	sp|A1A7D5|MURG_ECOK1	Glyco_transf_28
+2.9e-36	129.2	sp|B7MAL3|MURG_ECO45	Glyco_transf_28
+2.9e-36	129.2	sp|Q1RGA5|MURG_ECOUT	Glyco_transf_28
+3.1e-36	129.1	sp|Q6D0I3|MURG_ERWCT	Glyco_transf_28
+3.1e-36	129.1	sp|B5YZC6|MURG_ECO5E	Glyco_transf_28
+3.1e-36	129.1	sp|Q8X9Y8|MURG_ECO57	Glyco_transf_28
+3.1e-36	129.1	sp|A7ZHI1|MURG_ECO24	Glyco_transf_28
+3.1e-36	129.1	sp|B1LG27|MURG_ECOSM	Glyco_transf_28
+3.1e-36	129.1	sp|B6HZ67|MURG_ECOSE	Glyco_transf_28
+3.1e-36	129.1	sp|B7M133|MURG_ECO8A	Glyco_transf_28
+3.1e-36	129.1	sp|B7N7W3|MURG_ECOLU	Glyco_transf_28
+3.1e-36	129.1	sp|Q326E5|MURG_SHIBS	Glyco_transf_28
+3.1e-36	129.1	sp|Q3Z5R9|MURG_SHISS	Glyco_transf_28
+3.2e-36	129.1	sp|Q32K02|MURG_SHIDS	Glyco_transf_28
+3.2e-36	129.1	sp|B2U295|MURG_SHIB3	Glyco_transf_28
+3.2e-36	129.1	sp|B1IR88|MURG_ECOLC	Glyco_transf_28
+3.2e-36	129.1	sp|B1XC67|MURG_ECODH	Glyco_transf_28
+3.2e-36	129.1	sp|C4ZRI5|MURG_ECOBW	Glyco_transf_28
+3.2e-36	129.1	sp|P17443|MURG_ECOLI	Glyco_transf_28
+3.2e-36	129.1	sp|A7ZW42|MURG_ECOHS	Glyco_transf_28
+3.2e-36	129.1	sp|A4TQ83|MURG_YERPP	Glyco_transf_28
+3.5e-36	129.0	sp|Q9CF92|MURG_LACLA	Glyco_transf_28
+3.7e-36	128.9	sp|B5R2M4|MURG_SALEP	Glyco_transf_28
+3.8e-36	128.8	sp|Q0T8A7|MURG_SHIF8	Glyco_transf_28
+3.8e-36	128.8	sp|Q83MN4|MURG_SHIFL	Glyco_transf_28
+4.1e-36	128.7	sp|Q8CX35|MURG_SHEON	Glyco_transf_28
+4.3e-36	128.7	sp|B8DBP8|MURG_LISMH	Glyco_transf_28
+4.6e-36	128.6	sp|A0AKD5|MURG_LISW6	Glyco_transf_28
+5.2e-36	128.4	sp|Q9ZBA5|MURG_STRCO	Glyco_transf_28
+5.5e-36	128.3	sp|Q929Y2|MURG_LISIN	Glyco_transf_28
+5.8e-36	128.3	sp|B8F3B6|MURG_HAEPS	Glyco_transf_28
+5.9e-36	128.2	sp|Q0HE83|MURG_SHESM	Glyco_transf_28
+6e-36	128.2	sp|C1KWY8|MURG_LISMC	Glyco_transf_28
+6e-36	128.2	sp|Q71XX8|MURG_LISMF	Glyco_transf_28
+6.4e-36	128.1	sp|A1S2F9|MURG_SHEAM	Glyco_transf_28
+9.6e-36	127.5	sp|A5UCW8|MURG_HAEIE	Glyco_transf_28
+9.8e-36	127.5	sp|Q03QH5|MURG_LACBA	Glyco_transf_28
+1e-35	127.4	sp|Q8DEL0|MURG_VIBVU	Glyco_transf_28
+1e-35	127.4	sp|Q7MNV1|MURG_VIBVY	Glyco_transf_28
+1.3e-35	127.2	sp|Q3IFY0|MURG_PSEHT	Glyco_transf_28
+1.3e-35	127.1	sp|B7LFW0|MURG_ECO55	Glyco_transf_28
+1.4e-35	127.0	sp|B1KKX7|MURG_SHEWM	Glyco_transf_28
+2.3e-35	126.3	sp|Q49929|Y2348_MYCLE	Glyco_transf_28
+2.3e-35	126.3	sp|Q7N147|MURG_PHOLL	Glyco_transf_28
+2.3e-35	126.3	sp|A8H984|MURG_SHEPA	Glyco_transf_28
+2.6e-35	126.1	sp|Q820F6|MURG_STRAW	Glyco_transf_28
+2.8e-35	126.1	sp|Q1WTA0|MURG_LACS1	Glyco_transf_28
+3e-35	125.9	sp|Q9X4H4|MURG_STRCU	Glyco_transf_28
+4e-35	125.6	sp|Q12SC6|MURG_SHEDO	Glyco_transf_28
+4e-35	125.5	sp|P57817|MURG_PASMU	Glyco_transf_28
+4.3e-35	125.4	sp|Q87SG4|MURG_VIBPA	Glyco_transf_28
+4.4e-35	125.4	sp|B0TQN7|MURG_SHEHH	Glyco_transf_28
+4.7e-35	125.3	sp|C4L5U5|MURG_EXISA	Glyco_transf_28
+5.3e-35	125.1	sp|A9M2H3|MURG_NEIM0	Glyco_transf_28
+7.1e-35	124.7	sp|Q6LMF6|MURG_PHOPR	Glyco_transf_28
+8.4e-35	124.5	sp|Q5E2Q0|MURG_VIBF1	Glyco_transf_28
+8.7e-35	124.4	sp|P64865|Y1524_MYCTU	Glyco_transf_28
+8.7e-35	124.4	sp|P64866|Y1551_MYCBO	Glyco_transf_28
+9e-35	124.4	sp|B5FB35|MURG_VIBFM	Glyco_transf_28
+9.6e-35	124.3	sp|B2GB78|MURG_LACF3	Glyco_transf_28
+1e-34	124.2	sp|B6ELH5|MURG_ALISL	Glyco_transf_28
+1.1e-34	124.1	sp|B8CWJ6|MURG_HALOH	Glyco_transf_28
+1.1e-34	124.1	sp|A7MXR6|MURG_VIBHB	Glyco_transf_28
+1.2e-34	124.1	sp|A5VJ33|MURG_LACRD	Glyco_transf_28
+1.2e-34	124.1	sp|B2G6K5|MURG_LACRJ	Glyco_transf_28
+1.4e-34	123.8	sp|Q182Y6|MURG_CLOD6	Glyco_transf_28
+1.4e-34	123.8	sp|Q2NVV1|MURG_SODGM	Glyco_transf_28
+1.4e-34	123.8	sp|Q07WI5|MURG_SHEFN	Glyco_transf_28
+1.4e-34	123.8	sp|A1KVL3|MURG_NEIMF	Glyco_transf_28
+1.5e-34	123.7	sp|Q9K0Y2|MURG_NEIMB	Glyco_transf_28
+1.8e-34	123.4	sp|B8CNL1|MURG_SHEPW	Glyco_transf_28
+2e-34	123.3	sp|C4LA25|MURG_TOLAT	Glyco_transf_28
+2e-34	123.3	sp|Q9F1N0|MURG_SHEVI	Glyco_transf_28
+2.6e-34	122.9	sp|A5F5M9|MURG_VIBC3	Glyco_transf_28
+2.7e-34	122.9	sp|Q03W35|MURG_LEUMM	Glyco_transf_28
+2.8e-34	122.8	sp|A3Q1L8|MURG_MYCSJ	Glyco_transf_28
+2.8e-34	122.8	sp|A1UI54|MURG_MYCSK	Glyco_transf_28
+2.8e-34	122.8	sp|Q1B6X1|MURG_MYCSS	Glyco_transf_28
+3.3e-34	122.6	sp|C3LQU6|MURG_VIBCM	Glyco_transf_28
+3.3e-34	122.6	sp|Q9KPG7|MURG_VIBCH	Glyco_transf_28
+4.3e-34	122.2	sp|A8FQA0|MURG_SHESH	Glyco_transf_28
+6.8e-34	121.5	sp|B4RQC5|MURG_NEIG2	Glyco_transf_28
+6.8e-34	121.5	sp|Q5F6L8|MURG_NEIG1	Glyco_transf_28
+7.6e-34	121.4	sp|B1I4C4|MURG_DESAP	Glyco_transf_28
+8e-34	121.3	sp|Q6A9Q2|MURG_PROAC	Glyco_transf_28
+8.6e-34	121.2	sp|B3WDY2|MURG_LACCB	Glyco_transf_28
+8.6e-34	121.2	sp|Q039R7|MURG_LACC3	Glyco_transf_28
+9e-34	121.2	sp|A4J2B1|MURG_DESRM	Glyco_transf_28
+9.5e-34	121.1	sp|Q47VQ9|MURG_COLP3	Glyco_transf_28
+1.1e-33	120.9	sp|B2A2H2|MURG_NATTJ	Glyco_transf_28
+1.7e-33	120.3	sp|Q6NGC8|MURG_CORDI	Glyco_transf_28
+1.7e-33	120.2	sp|B4RWX9|MURG_ALTMD	Glyco_transf_28
+1.8e-33	120.2	sp|Q9JSZ7|MURG_NEIMA	Glyco_transf_28
+1.9e-33	120.1	sp|B0KFS6|MURG_PSEPG	Glyco_transf_28
+2.5e-33	119.7	sp|A4XQS4|MURG_PSEMY	Glyco_transf_28
+2.5e-33	119.7	sp|Q48EF8|MURG_PSE14	Glyco_transf_28
+2.6e-33	119.7	sp|Q8R9G6|MURG_THETN	Glyco_transf_28
+2.8e-33	119.6	sp|A5W8Q0|MURG_PSEP1	Glyco_transf_28
+2.8e-33	119.5	sp|Q1I5B8|MURG_PSEE4	Glyco_transf_28
+2.9e-33	119.5	sp|Q87WY5|MURG_PSESM	Glyco_transf_28
+3.4e-33	119.3	sp|C3L230|MURG_CLOB6	Glyco_transf_28
+3.5e-33	119.3	sp|A1WC06|MURG_ACISJ	Glyco_transf_28
+3.5e-33	119.3	sp|B9MFR2|MURG_DIAST	Glyco_transf_28
+3.6e-33	119.2	sp|B8ZQQ0|MURG_MYCLB	Glyco_transf_28
+3.6e-33	119.2	sp|O69552|MURG_MYCLE	Glyco_transf_28
+3.7e-33	119.2	sp|Q893R7|MURG_CLOTE	Glyco_transf_28
+3.8e-33	119.1	sp|A7GGX9|MURG_CLOBL	Glyco_transf_28
+3.8e-33	119.1	sp|B1IKH3|MURG_CLOBK	Glyco_transf_28
+3.8e-33	119.1	sp|C1FUF9|MURG_CLOBJ	Glyco_transf_28
+3.8e-33	119.1	sp|A5I5J5|MURG_CLOBH	Glyco_transf_28
+3.8e-33	119.1	sp|A7FX11|MURG_CLOB1	Glyco_transf_28
+3.8e-33	119.1	sp|Q4ZNZ0|MURG_PSEU2	Glyco_transf_28
+4.3e-33	119.0	sp|A4XI04|MURG_CALS8	Glyco_transf_28
+4.6e-33	118.9	sp|A0R016|MURG_MYCS2	Glyco_transf_28
+5.1e-33	118.7	sp|A8YUN9|MURG_LACH4	Glyco_transf_28
+5.6e-33	118.6	sp|A1SL80|MURG_NOCSJ	Glyco_transf_28
+5.8e-33	118.5	sp|Q88N76|MURG_PSEPK	Glyco_transf_28
+8.3e-33	118.0	sp|B1KYH7|MURG_CLOBM	Glyco_transf_28
+8.7e-33	118.0	sp|Q24TE6|MURG_DESHY	Glyco_transf_28
+9e-33	117.9	sp|Q3K744|MURG_PSEPF	Glyco_transf_28
+9.4e-33	117.9	sp|B1J3L2|MURG_PSEPW	Glyco_transf_28
+1e-32	117.8	sp|B0K3H0|MURG_THEPX	Glyco_transf_28
+1e-32	117.8	sp|B0K8K7|MURG_THEP3	Glyco_transf_28
+1e-32	117.7	sp|A3DE27|MURG_CLOTH	Glyco_transf_28
+1.4e-32	117.3	sp|A1TAW8|MURG_MYCVP	Glyco_transf_28
+1.6e-32	117.1	sp|B8FT56|MURG_DESHD	Glyco_transf_28
+2.3e-32	116.6	sp|Q9RWP0|MURG_DEIRA	Glyco_transf_28
+2.5e-32	116.5	sp|B2I1J5|MURG_ACIBC	Glyco_transf_28
+2.5e-32	116.5	sp|B0V9F5|MURG_ACIBY	Glyco_transf_28
+2.5e-32	116.5	sp|B7GV73|MURG_ACIB3	Glyco_transf_28
+2.5e-32	116.5	sp|B7ICE5|MURG_ACIB5	Glyco_transf_28
+2.5e-32	116.5	sp|A5D145|MURG_PELTS	Glyco_transf_28
+2.9e-32	116.3	sp|A3M9Y1|MURG_ACIBT	Glyco_transf_28
+2.9e-32	116.3	sp|A9KK83|MURG_CLOPH	Glyco_transf_28
+3.6e-32	116.0	sp|C3KCT0|MURG_PSEFS	Glyco_transf_28
+4.5e-32	115.7	sp|Q03EY2|MURG_PEDPA	Glyco_transf_28
+4.8e-32	115.6	sp|A0QF52|MURG_MYCA1	Glyco_transf_28
+5.3e-32	115.4	sp|Q04B72|MURG_LACDB	Glyco_transf_28
+5.3e-32	115.4	sp|Q1GAT5|MURG_LACDA	Glyco_transf_28
+6.7e-32	115.1	sp|Q4K6J3|MURG_PSEF5	Glyco_transf_28
+7.5e-32	114.9	sp|B0VNZ9|MURG_ACIBS	Glyco_transf_28
+8.8e-32	114.7	sp|Q5FKV2|MURG_LACAC	Glyco_transf_28
+1.1e-31	114.5	sp|A0KPX2|MURG_AERHH	Glyco_transf_28
+1.2e-31	114.3	sp|A1WYU3|MURG_HALHL	Glyco_transf_28
+1.2e-31	114.3	sp|Q73YQ8|MURG_MYCPA	Glyco_transf_28
+1.2e-31	114.3	sp|B1MXW0|MURG_LEUCK	Glyco_transf_28
+1.3e-31	114.2	sp|Q604V7|MURG_METCA	Glyco_transf_28
+1.3e-31	114.2	sp|B2V1X5|MURG_CLOBA	Glyco_transf_28
+1.7e-31	113.8	sp|A1U3F8|MURG_MARAV	Glyco_transf_28
+2.1e-31	113.5	sp|A8MH36|MURG_ALKOO	Glyco_transf_28
+2.1e-31	113.5	sp|B2TLE0|MURG_CLOBB	Glyco_transf_28
+2.6e-31	113.2	sp|A4SI56|MURG_AERS4	Glyco_transf_28
+3e-31	113.0	sp|C4Z1B5|MURG_EUBE2	Glyco_transf_28
+3.1e-31	113.0	sp|C1DQ99|MURG_AZOVD	Glyco_transf_28
+3.1e-31	112.9	sp|Q6F703|MURG_ACIAD	Glyco_transf_28
+3.2e-31	112.9	sp|B1YIT7|MURG_EXIS2	Glyco_transf_28
+5e-31	112.3	sp|C1CW40|MURG_DEIDV	Glyco_transf_28
+5.1e-31	112.2	sp|Q47QW9|MURG_THEFY	Glyco_transf_28
+5.3e-31	112.2	sp|A0Q182|MURG_CLONN	Glyco_transf_28
+5.3e-31	112.2	sp|A1KKJ6|MURG_MYCBP	Glyco_transf_28
+5.3e-31	112.2	sp|C1AQ69|MURG_MYCBT	Glyco_transf_28
+5.3e-31	112.2	sp|Q7VEP8|MURG_MYCBO	Glyco_transf_28
+6.3e-31	111.9	sp|B0S0Z5|MURG_FINM2	Glyco_transf_28
+7.7e-31	111.7	sp|B7UZJ0|MURG_PSEA8	Glyco_transf_28
+7.7e-31	111.7	sp|Q02H28|MURG_PSEAB	Glyco_transf_28
+7.7e-31	111.7	sp|Q9HW01|MURG_PSEAE	Glyco_transf_28
+7.8e-31	111.6	sp|A0PTI7|MURG_MYCUA	Glyco_transf_28
+8.2e-31	111.6	sp|A6VB85|MURG_PSEA7	Glyco_transf_28
+8.5e-31	111.5	sp|A9KER3|MURG_COXBN	Glyco_transf_28
+8.6e-31	111.5	sp|A9NA44|MURG_COXBR	Glyco_transf_28
+8.6e-31	111.5	sp|B6J2Q3|MURG_COXB2	Glyco_transf_28
+8.6e-31	111.5	sp|B6J5K3|MURG_COXB1	Glyco_transf_28
+8.6e-31	111.5	sp|Q820X3|MURG_COXBU	Glyco_transf_28
+9.1e-31	111.4	sp|Q042P9|MURG_LACGA	Glyco_transf_28
+9.6e-31	111.4	sp|B2HGR6|MURG_MYCMM	Glyco_transf_28
+1e-30	111.2	sp|Q0VS02|MURG_ALCBS	Glyco_transf_28
+1.1e-30	111.2	sp|Q0RNP1|MURG_FRAAA	Glyco_transf_28
+1.2e-30	111.0	sp|Q2RK79|MURG_MOOTA	Glyco_transf_28
+1.3e-30	111.0	sp|Q1IXV9|MURG_DEIGD	Glyco_transf_28
+1.3e-30	111.0	sp|Q74JY4|MURG_LACJO	Glyco_transf_28
+1.5e-30	110.7	sp|A5MZ55|MURG_CLOK5	Glyco_transf_28
+1.8e-30	110.5	sp|A1TKD1|MURG_ACIAC	Glyco_transf_28
+1.9e-30	110.4	sp|B7J0L2|MURG_BORBZ	Glyco_transf_28
+1.9e-30	110.4	sp|O51708|MURG_BORBU	Glyco_transf_28
+2e-30	110.3	sp|Q15Q17|MURG_PSEA6	Glyco_transf_28
+2.1e-30	110.3	sp|A7A179|ATG26_YEAS7	Glyco_transf_28
+2.3e-30	110.1	sp|Q1D0T0|MURG_MYXXD	Glyco_transf_28
+2.5e-30	110.0	sp|Q1QVG7|MURG_CHRSD	Glyco_transf_28
+2.6e-30	110.0	sp|A4VIH8|MURG_PSEU5	Glyco_transf_28
+2.7e-30	109.9	sp|Q38XM8|MURG_LACSS	Glyco_transf_28
+3.3e-30	109.6	sp|A1SU19|MURG_PSYIN	Glyco_transf_28
+3.4e-30	109.6	sp|Q31I59|MURG_THICR	Glyco_transf_28
+3.4e-30	109.6	sp|Q04ET0|MURG_OENOB	Glyco_transf_28
+3.4e-30	109.6	sp|Q2KVG0|MURG_BORA1	Glyco_transf_28
+3.6e-30	109.5	sp|Q5R0M1|MURG_IDILO	Glyco_transf_28
+3.7e-30	109.5	sp|Q5WAE4|MURG_BACSK	Glyco_transf_28
+3.7e-30	109.5	sp|Q2JD50|MURG_FRASC	Glyco_transf_28
+3.8e-30	109.4	sp|B5ELC3|MURG_ACIF5	Glyco_transf_28
+3.8e-30	109.4	sp|B7J3V2|MURG_ACIF2	Glyco_transf_28
+3.9e-30	109.4	sp|Q0SM88|MURG_BORAP	Glyco_transf_28
+4.2e-30	109.3	sp|Q4FQV9|MURG_PSYA2	Glyco_transf_28
+4.5e-30	109.2	sp|Q730T5|MURG2_BACC1	Glyco_transf_28
+4.8e-30	109.1	sp|Q1LSW5|MURG_BAUCH	Glyco_transf_28
+5.4e-30	108.9	sp|Q9WY74|MURG_THEMA	Glyco_transf_28
+5.5e-30	108.9	sp|B1L9S1|MURG_THESQ	Glyco_transf_28
+5.5e-30	108.9	sp|A5IKI9|MURG_THEP1	Glyco_transf_28
+5.9e-30	108.8	sp|A4FLW0|MURG_SACEN	Glyco_transf_28
+6.6e-30	108.6	sp|Q9RNM6|MURG_ZYMMO	Glyco_transf_28
+7.1e-30	108.5	sp|Q06321|ATG26_YEAST	Glyco_transf_28
+7.2e-30	108.5	sp|Q9PF81|MURG_XYLFA	Glyco_transf_28
+7.9e-30	108.4	sp|Q5GW41|MURG_XANOR	Glyco_transf_28
+8.9e-30	108.2	sp|B2S3B6|MURG_TREPS	Glyco_transf_28
+8.9e-30	108.2	sp|O83535|MURG_TREPA	Glyco_transf_28
+9.2e-30	108.2	sp|Q0AJE1|MURG_NITEC	Glyco_transf_28
+1e-29	108.1	sp|B3PCM0|MURG_CELJU	Glyco_transf_28
+1.2e-29	107.8	sp|A5G8K0|MURG_GEOUR	Glyco_transf_28
+1.2e-29	107.8	sp|A5U4I0|MURG_MYCTA	Glyco_transf_28
+1.2e-29	107.8	sp|O06224|MURG_MYCTU	Glyco_transf_28
+1.3e-29	107.7	sp|Q4JW95|MURG_CORJK	Glyco_transf_28
+1.4e-29	107.6	sp|Q97GY4|MURG_CLOAB	Glyco_transf_28
+1.5e-29	107.4	sp|Q9Z702|MURG_CHLPN	Glyco_transf_28
+1.6e-29	107.4	sp|Q1Q944|MURG_PSYCK	Glyco_transf_28
+1.7e-29	107.3	sp|C0RE70|MURG_BRUMB	Glyco_transf_28
+1.7e-29	107.3	sp|Q8YI66|MURG_BRUME	Glyco_transf_28
+1.7e-29	107.3	sp|Q3BXF2|MURG_XANC5	Glyco_transf_28
+1.9e-29	107.2	sp|B2S6Q4|MURG_BRUA1	Glyco_transf_28
+1.9e-29	107.2	sp|Q2YLY5|MURG_BRUA2	Glyco_transf_28
+1.9e-29	107.2	sp|Q57C78|MURG_BRUAB	Glyco_transf_28
+1.9e-29	107.1	sp|Q660A8|MURG_BORGA	Glyco_transf_28
+1.9e-29	107.1	sp|B8I6H3|MURG_CLOCE	Glyco_transf_28
+1.9e-29	107.1	sp|A5VRH7|MURG_BRUO2	Glyco_transf_28
+1.9e-29	107.1	sp|B0CHM0|MURG_BRUSI	Glyco_transf_28
+2e-29	107.1	sp|A0JV94|MURG_ARTS2	Glyco_transf_28
+2e-29	107.1	sp|A6TS61|MURG_ALKMQ	Glyco_transf_28
+2e-29	107.1	sp|C5D4C2|MURG_GEOSW	Glyco_transf_28
+2e-29	107.1	sp|A9M690|MURG_BRUC2	Glyco_transf_28
+2e-29	107.0	sp|Q8PPA8|MURG_XANAC	Glyco_transf_28
+2e-29	107.0	sp|Q8CY39|MURG_BRUSU	Glyco_transf_28
+2.2e-29	106.9	sp|A1WRL1|MURG_VEREI	Glyco_transf_28
+2.7e-29	106.7	sp|Q812T8|MURG2_BACCR	Glyco_transf_28
+2.9e-29	106.6	sp|B0U4Z7|MURG_XYLFM	Glyco_transf_28
+3.1e-29	106.5	sp|A4IJS4|MURG_GEOTN	Glyco_transf_28
+3.2e-29	106.4	sp|Q2NZB8|MURG_XANOM	Glyco_transf_28
+4.6e-29	105.9	sp|A5FIY3|MURG_FLAJ1	Glyco_transf_28
+6e-29	105.5	sp|Q39JX0|MURG_BURS3	Glyco_transf_28
+6.9e-29	105.3	sp|C1A0X5|MURG_RHOE4	Glyco_transf_28
+7.3e-29	105.3	sp|Q748D6|MURG_GEOSL	Glyco_transf_28
+8.2e-29	105.1	sp|Q820Y4|MURG_TROWT	Glyco_transf_28
+8.2e-29	105.1	sp|Q83HK1|MURG_TROW8	Glyco_transf_28
+8.3e-29	105.1	sp|A4QFM3|MURG_CORGB	Glyco_transf_28
+8.5e-29	105.0	sp|Q39YL9|MURG_GEOMG	Glyco_transf_28
+8.5e-29	105.0	sp|A1R0I9|MURG_BORT9	Glyco_transf_28
+8.7e-29	105.0	sp|Q3AAE6|MURG_CARHZ	Glyco_transf_28
+9.1e-29	104.9	sp|Q8NNN5|MURG_CORGL	Glyco_transf_28
+9.1e-29	104.9	sp|Q0TNP7|MURG_CLOP1	Glyco_transf_28
+9.1e-29	104.9	sp|Q8XIQ1|MURG_CLOPE	Glyco_transf_28
+9.4e-29	104.9	sp|Q0SRB4|MURG_CLOPS	Glyco_transf_28
+1e-28	104.8	sp|Q5YYX9|MURG_NOCFA	Glyco_transf_28
+1.1e-28	104.7	sp|A7HH67|MURG_ANADF	Glyco_transf_28
+1.1e-28	104.6	sp|Q82VS3|MURG_NITEU	Glyco_transf_28
+1.2e-28	104.6	sp|B0RVA5|MURG_XANCB	Glyco_transf_28
+1.2e-28	104.6	sp|Q2SZI3|MURG_BURTA	Glyco_transf_28
+1.2e-28	104.5	sp|Q11GS5|MURG_MESSB	Glyco_transf_28
+1.3e-28	104.5	sp|Q4UQX0|MURG_XANC8	Glyco_transf_28
+1.3e-28	104.5	sp|Q8PCK0|MURG_XANCP	Glyco_transf_28
+1.3e-28	104.4	sp|A3NZL5|MURG_BURP0	Glyco_transf_28
+1.5e-28	104.3	sp|Q98KB3|MURG_RHILO	Glyco_transf_28
+1.5e-28	104.2	sp|Q0A6K2|MURG_ALHEH	Glyco_transf_28
+1.5e-28	104.2	sp|A5IGA6|MURG_LEGPC	Glyco_transf_28
+1.6e-28	104.2	sp|Q5L3H6|MURG_GEOKA	Glyco_transf_28
+1.7e-28	104.1	sp|A0LTM3|MURG_ACIC1	Glyco_transf_28
+2.1e-28	103.7	sp|Q3A2G6|MURG_PELCD	Glyco_transf_28
+2.2e-28	103.7	sp|Q0AYQ8|MURG_SYNWW	Glyco_transf_28
+2.5e-28	103.5	sp|Q1LIM6|MURG_RALME	Glyco_transf_28
+2.6e-28	103.5	sp|Q92NL9|MURG_RHIME	Glyco_transf_28
+2.8e-28	103.4	sp|Q72JP9|MURG_THET2	Glyco_transf_28
+2.8e-28	103.4	sp|A1R5F8|MURG_ARTAT	Glyco_transf_28
+2.9e-28	103.3	sp|Q87AF9|MURG_XYLFT	Glyco_transf_28
+3e-28	103.3	sp|B2I9B3|MURG_XYLF2	Glyco_transf_28
+3.3e-28	103.1	sp|A6WZQ6|MURG_OCHA4	Glyco_transf_28
+3.3e-28	103.1	sp|A1V0R8|MURG_BURMS	Glyco_transf_28
+3.3e-28	103.1	sp|A2S5U5|MURG_BURM9	Glyco_transf_28
+3.3e-28	103.1	sp|A3MR63|MURG_BURM7	Glyco_transf_28
+3.3e-28	103.1	sp|Q62GS7|MURG_BURMA	Glyco_transf_28
+3.3e-28	103.1	sp|Q63QJ7|MURG_BURPS	Glyco_transf_28
+3.3e-28	103.1	sp|A3NDW4|MURG_BURP6	Glyco_transf_28
+3.9e-28	102.9	sp|Q3J789|MURG_NITOC	Glyco_transf_28
+3.9e-28	102.9	sp|Q8K9T4|MURG_BUCAP	Glyco_transf_28
+4e-28	102.9	sp|B9M172|MURG_GEOSF	Glyco_transf_28
+4e-28	102.9	sp|B5EBQ1|MURG_GEOBB	Glyco_transf_28
+4.2e-28	102.8	sp|Q3JND8|MURG_BURP1	Glyco_transf_28
+4.2e-28	102.8	sp|Q1IKH0|MURG_ACIBL	Glyco_transf_28
+4.2e-28	102.8	sp|P74657|MURG_SYNY3	Glyco_transf_28
+4.4e-28	102.7	sp|B1YSS4|MURG_BURA4	Glyco_transf_28
+4.4e-28	102.7	sp|Q0BIK1|MURG_BURCM	Glyco_transf_28
+5.7e-28	102.4	sp|Q6HDR3|MURG2_BACHK	Glyco_transf_28
+5.7e-28	102.4	sp|Q81JE6|MURG2_BACAN	Glyco_transf_28
+6.2e-28	102.2	sp|Q0K6M4|MURG_RALEH	Glyco_transf_28
+6.4e-28	102.2	sp|Q5WY98|MURG_LEGPL	Glyco_transf_28
+6.5e-28	102.2	sp|A0RIN0|MURG3_BACAH	Glyco_transf_28
+6.7e-28	102.1	sp|Q7W4B4|MURG_BORPA	Glyco_transf_28
+6.7e-28	102.1	sp|Q5X6U5|MURG_LEGPA	Glyco_transf_28
+6.7e-28	102.1	sp|Q5ZXC4|MURG_LEGPH	Glyco_transf_28
+6.9e-28	102.1	sp|A6M1F0|MURG_CLOB8	Glyco_transf_28
+7.7e-28	101.9	sp|B8D7B9|MURG_BUCAT	Glyco_transf_28
+7.7e-28	101.9	sp|P57311|MURG_BUCAI	Glyco_transf_28
+8.3e-28	101.8	sp|Q7VUQ3|MURG_BORPE	Glyco_transf_28
+8.4e-28	101.8	sp|Q7WFS2|MURG_BORBR	Glyco_transf_28
+8.7e-28	101.8	sp|B2SYX6|MURG_BURPP	Glyco_transf_28
+9.7e-28	101.6	sp|B0B8Y7|MURG_CHLT2	Glyco_transf_28
+9.7e-28	101.6	sp|B0BAL6|MURG_CHLTB	Glyco_transf_28
+1e-27	101.5	sp|B8D914|MURG_BUCA5	Glyco_transf_28
+1.1e-27	101.5	sp|Q47AA4|MURG_DECAR	Glyco_transf_28
+1.2e-27	101.4	sp|A4JB94|MURG_BURVG	Glyco_transf_28
+1.3e-27	101.2	sp|Q2Y638|MURG_NITMU	Glyco_transf_28
+1.5e-27	101.0	sp|B2JHG0|MURG_BURP8	Glyco_transf_28
+1.5e-27	101.0	sp|O84766|MURG_CHLTR	Glyco_transf_28
+1.5e-27	101.0	sp|Q3KKT1|MURG_CHLTA	Glyco_transf_28
+1.8e-27	100.8	sp|A1AU61|MURG_PELPD	Glyco_transf_28
+1.8e-27	100.8	sp|Q2LR48|MURG_SYNAS	Glyco_transf_28
+1.8e-27	100.7	sp|Q2G995|MURG_NOVAD	Glyco_transf_28
+1.9e-27	100.7	sp|A5EY03|MURG_DICNV	Glyco_transf_28
+2e-27	100.6	sp|Q8FNU0|MURG_COREF	Glyco_transf_28
+2e-27	100.6	sp|A9AI96|MURG_BURM1	Glyco_transf_28
+2.3e-27	100.4	sp|Q21SW9|MURG_RHOFD	Glyco_transf_28
+2.6e-27	100.2	sp|B5YFT4|MURG_THEYD	Glyco_transf_28
+2.7e-27	100.2	sp|A7KAK6|ATG26_PICAN	Glyco_transf_28
+3.1e-27	100.0	sp|Q46WZ4|MURG_RALEJ	Glyco_transf_28
+3.1e-27	100.0	sp|Q13TZ2|MURG_BURXL	Glyco_transf_28
+3.3e-27	99.9	sp|C6DZK6|MURG_GEOSM	Glyco_transf_28
+4.4e-27	99.5	sp|A8GVJ7|MURG_RICB8	Glyco_transf_28
+4.4e-27	99.5	sp|Q1RI55|MURG_RICBR	Glyco_transf_28
+5.2e-27	99.2	sp|B5ZWJ4|MURG_RHILW	Glyco_transf_28
+5.4e-27	99.2	sp|B0JFZ1|MURG_MICAN	Glyco_transf_28
+5.8e-27	99.1	sp|Q31KS7|MURG_SYNE7	Glyco_transf_28
+6e-27	99.1	sp|Q5N140|MURG_SYNP6	Glyco_transf_28
+6.4e-27	99.0	sp|Q14I26|MURG_FRAT1	Glyco_transf_28
+6.4e-27	99.0	sp|Q5NGM4|MURG_FRATT	Glyco_transf_28
+6.5e-27	98.9	sp|Q493Q1|MURG_BLOPB	Glyco_transf_28
+6.5e-27	98.9	sp|Q92I58|MURG_RICCN	Glyco_transf_28
+6.5e-27	98.9	sp|C3PND5|MURG_RICAE	Glyco_transf_28
+6.5e-27	98.9	sp|C4K2A6|MURG_RICPU	Glyco_transf_28
+6.6e-27	98.9	sp|B2S1A8|MURG_BORHD	Glyco_transf_28
+6.6e-27	98.9	sp|A8GRZ6|MURG_RICRS	Glyco_transf_28
+6.6e-27	98.9	sp|B0BXF6|MURG_RICRO	Glyco_transf_28
+6.7e-27	98.9	sp|Q3SMH3|MURG_THIDA	Glyco_transf_28
+6.7e-27	98.9	sp|Q21MG9|MURG_SACD2	Glyco_transf_28
+8.7e-27	98.5	sp|B1IAM4|MURG_STRPI	Glyco_transf_28
+8.7e-27	98.5	sp|Q04LK0|MURG_STRP2	Glyco_transf_28
+8.7e-27	98.5	sp|Q8DQM1|MURG_STRR6	Glyco_transf_28
+8.7e-27	98.5	sp|B2IN77|MURG_STRPS	Glyco_transf_28
+8.8e-27	98.5	sp|C1CQG5|MURG_STRZT	Glyco_transf_28
+8.9e-27	98.5	sp|C1CD52|MURG_STRZJ	Glyco_transf_28
+9e-27	98.5	sp|Q634T3|MURG2_BACCZ	Glyco_transf_28
+9e-27	98.5	sp|A1VST6|MURG_POLNA	Glyco_transf_28
+9e-27	98.5	sp|A6UB85|MURG_SINMW	Glyco_transf_28
+9.2e-27	98.5	sp|B9DNZ7|MURG_STACT	Glyco_transf_28
+1e-26	98.3	sp|B4E6J2|MURG_BURCJ	Glyco_transf_28
+1.1e-26	98.3	sp|B1JV78|MURG_BURCC	Glyco_transf_28
+1.1e-26	98.2	sp|C1C649|MURG_STRP7	Glyco_transf_28
+1.1e-26	98.2	sp|Q2S9Z2|MURG_HAHCH	Glyco_transf_28
+1.1e-26	98.2	sp|B5E2Z9|MURG_STRP4	Glyco_transf_28
+1.1e-26	98.2	sp|C1CJF3|MURG_STRZP	Glyco_transf_28
+1.1e-26	98.1	sp|A9I4V2|MURG_BORPD	Glyco_transf_28
+1.3e-26	98.0	sp|B0RIJ3|MURG_CLAMS	Glyco_transf_28
+1.4e-26	97.9	sp|P0CB60|MURG_STRPN	Glyco_transf_28
+1.4e-26	97.9	sp|B8ZMZ7|MURG_STRPJ	Glyco_transf_28
+1.4e-26	97.8	sp|B3PTW0|MURG_RHIE6	Glyco_transf_28
+1.5e-26	97.8	sp|Q0SHS1|MURG_RHOSR	Glyco_transf_28
+1.5e-26	97.7	sp|Q313Q3|MURG_DESDG	Glyco_transf_28
+1.6e-26	97.7	sp|A8F1I4|MURG_RICM5	Glyco_transf_28
+1.6e-26	97.7	sp|A6H195|MURG_FLAPJ	Glyco_transf_28
+1.7e-26	97.6	sp|A0K486|MURG_BURCH	Glyco_transf_28
+1.7e-26	97.6	sp|Q1BZG3|MURG_BURCA	Glyco_transf_28
+1.7e-26	97.6	sp|Q12EL5|MURG_POLSJ	Glyco_transf_28
+1.8e-26	97.5	sp|Q8UDM8|MURG_AGRT5	Glyco_transf_28
+2e-26	97.3	sp|B7K5Z6|MURG_CYAP8	Glyco_transf_28
+2.1e-26	97.3	sp|Q2NCZ0|MURG_ERYLH	Glyco_transf_28
+2.1e-26	97.3	sp|Q9Y751|ATG26_PICPG	Glyco_transf_28
+2.1e-26	97.3	sp|Q5P6Z6|MURG_AZOSE	Glyco_transf_28
+2.3e-26	97.1	sp|B6IRG2|MURG_RHOCS	Glyco_transf_28
+2.4e-26	97.1	sp|A7TF84|ATG26_VANPO	Glyco_transf_28
+2.4e-26	97.1	sp|Q2S528|MURG_SALRD	Glyco_transf_28
+2.5e-26	97.0	sp|B2SGS8|MURG_FRATM	Glyco_transf_28
+2.6e-26	97.0	sp|A4IX64|MURG_FRATW	Glyco_transf_28
+2.7e-26	96.9	sp|Q67Q48|MURG_SYMTH	Glyco_transf_28
+3.1e-26	96.7	sp|Q6C8M8|ATG26_YARLI	Glyco_transf_28
+3.1e-26	96.7	sp|C1AU55|MURG_RHOOB	Glyco_transf_28
+3.2e-26	96.7	sp|B3E3Y2|MURG_GEOLS	Glyco_transf_28
+3.2e-26	96.7	sp|A0Q766|MURG_FRATN	Glyco_transf_28
+3.2e-26	96.7	sp|B1WVP7|MURG_CYAA5	Glyco_transf_28
+3.8e-26	96.5	sp|B0TY93|MURG_FRAP2	Glyco_transf_28
+3.8e-26	96.4	sp|Q68WW7|MURG_RICTY	Glyco_transf_28
+4.1e-26	96.4	sp|Q6GGZ0|MURG_STAAR	Glyco_transf_28
+5e-26	96.1	sp|B9JH51|MURG_AGRRK	Glyco_transf_28
+5.6e-26	95.9	sp|Q6BN88|ATG26_DEBHA	Glyco_transf_28
+6.1e-26	95.8	sp|A7NDC0|MURG_FRATF	Glyco_transf_28
+6.1e-26	95.8	sp|Q0BL37|MURG_FRATO	Glyco_transf_28
+6.1e-26	95.8	sp|Q2A2I7|MURG_FRATH	Glyco_transf_28
+6.5e-26	95.7	sp|A5CS51|MURG_CLAM3	Glyco_transf_28
+6.6e-26	95.7	sp|Q9ZDC0|MURG_RICPR	Glyco_transf_28
+7.1e-26	95.6	sp|Q9ZK59|MURG_HELPJ	Glyco_transf_28
+7.7e-26	95.5	sp|B7KGH1|MURG_CYAP7	Glyco_transf_28
+7.9e-26	95.4	sp|Q4L6C8|MURG_STAHJ	Glyco_transf_28
+9.3e-26	95.2	sp|B4UES1|MURG_ANASK	Glyco_transf_28
+9.8e-26	95.1	sp|B9JY54|MURG_AGRVS	Glyco_transf_28
+1.3e-25	94.7	sp|Q1ME33|MURG_RHIL3	Glyco_transf_28
+1.4e-25	94.6	sp|A8EZ14|MURG_RICCK	Glyco_transf_28
+1.6e-25	94.5	sp|Q5A950|ATG26_CANAL	Glyco_transf_28
+1.6e-25	94.4	sp|Q2IG27|MURG_ANADE	Glyco_transf_28
+2e-25	94.1	sp|B8J8E8|MURG_ANAD2	Glyco_transf_28
+2.1e-25	94.0	sp|C3MEM9|MURG_RHISN	Glyco_transf_28
+2.1e-25	94.0	sp|Q1CSB1|MURG_HELPH	Glyco_transf_28
+2.3e-25	93.9	sp|P59424|MURG_BUCBP	Glyco_transf_28
+2.3e-25	93.9	sp|Q2K6C1|MURG_RHIEC	Glyco_transf_28
+2.4e-25	93.9	sp|O25770|MURG_HELPY	Glyco_transf_28
+2.4e-25	93.9	sp|A0M527|MURG_GRAFK	Glyco_transf_28
+2.4e-25	93.9	sp|B2UUR4|MURG_HELPS	Glyco_transf_28
+2.4e-25	93.8	sp|Q3K2P3|MURG_STRA1	Glyco_transf_28
+2.4e-25	93.8	sp|Q8CX15|MURG_STRA5	Glyco_transf_28
+2.4e-25	93.8	sp|Q8E6P0|MURG_STRA3	Glyco_transf_28
+2.4e-25	93.8	sp|Q7U346|MURG_BLOFL	Glyco_transf_28
+2.7e-25	93.7	sp|Q5HPC0|MURG_STAEQ	Glyco_transf_28
+2.7e-25	93.7	sp|Q8CMM3|MURG_STAES	Glyco_transf_28
+2.9e-25	93.6	sp|Q01Q48|MURG_SOLUE	Glyco_transf_28
+2.9e-25	93.6	sp|B5Z8F1|MURG_HELPG	Glyco_transf_28
+3.1e-25	93.5	sp|Q5L524|MURG_CHLAB	Glyco_transf_28
+3.2e-25	93.5	sp|Q255W4|MURG_CHLFF	Glyco_transf_28
+3.2e-25	93.5	sp|Q820E0|MURG_CHLCV	Glyco_transf_28
+3.3e-25	93.4	sp|Q8XVI7|MURG_RALSO	Glyco_transf_28
+3.6e-25	93.3	sp|Q4ULT6|MURG_RICFE	Glyco_transf_28
+3.9e-25	93.2	sp|Q49XM9|MURG_STAS1	Glyco_transf_28
+3.9e-25	93.2	sp|Q119X8|MURG_TRIEI	Glyco_transf_28
+4e-25	93.2	sp|Q03L97|MURG_STRTD	Glyco_transf_28
+4e-25	93.1	sp|A0L5N1|MURG_MAGSM	Glyco_transf_28
+4.2e-25	93.1	sp|B8H091|MURG_CAUCN	Glyco_transf_28
+4.2e-25	93.1	sp|Q9A5A1|MURG_CAUCR	Glyco_transf_28
+4.4e-25	93.0	sp|A8GNC7|MURG_RICAH	Glyco_transf_28
+4.7e-25	92.9	sp|B5XMA2|MURG_STRPZ	Glyco_transf_28
+4.8e-25	92.9	sp|B6JMZ5|MURG_HELP2	Glyco_transf_28
+5e-25	92.8	sp|A7ERM5|ATG26_SCLS1	Glyco_transf_28
+5.1e-25	92.8	sp|Q7V466|MURG_PROMM	Glyco_transf_28
+5.7e-25	92.7	sp|A2CDG1|MURG_PROM3	Glyco_transf_28
+5.8e-25	92.6	sp|Q5M0D4|MURG_STRT1	Glyco_transf_28
+5.8e-25	92.6	sp|Q5M4Y1|MURG_STRT2	Glyco_transf_28
+5.8e-25	92.6	sp|A6QGX0|MURG_STAAE	Glyco_transf_28
+5.8e-25	92.6	sp|Q2FYL5|MURG_STAA8	Glyco_transf_28
+5.8e-25	92.6	sp|Q5HG02|MURG_STAAC	Glyco_transf_28
+5.8e-25	92.6	sp|Q6G9E3|MURG_STAAS	Glyco_transf_28
+5.8e-25	92.6	sp|Q8NWR4|MURG_STAAW	Glyco_transf_28
+5.8e-25	92.6	sp|A5ISU9|MURG_STAA9	Glyco_transf_28
+5.8e-25	92.6	sp|A6U1N8|MURG_STAA2	Glyco_transf_28
+5.8e-25	92.6	sp|A7X2A2|MURG_STAA1	Glyco_transf_28
+5.8e-25	92.6	sp|P65481|MURG_STAAM	Glyco_transf_28
+5.8e-25	92.6	sp|P65482|MURG_STAAN	Glyco_transf_28
+6e-25	92.6	sp|Q2YY01|MURG_STAAB	Glyco_transf_28
+6.2e-25	92.5	sp|Q7MAW5|MURG_PORGI	Glyco_transf_28
+6.3e-25	92.5	sp|A2RDL0|MURG_STRPG	Glyco_transf_28
+6.4e-25	92.5	sp|Q5XB05|MURG_STRP6	Glyco_transf_28
+7.5e-25	92.3	sp|Q1JAT5|MURG_STRPB	Glyco_transf_28
+7.5e-25	92.3	sp|Q1JKY5|MURG_STRPC	Glyco_transf_28
+9.4e-25	91.9	sp|B2RIF1|MURG_PORG3	Glyco_transf_28
+1e-24	91.8	sp|C0M6J2|MURG_STRE4	Glyco_transf_28
+1.3e-24	91.5	sp|A1UTC5|MURG_BARBK	Glyco_transf_28
+1.3e-24	91.5	sp|C0MD54|MURG_STRS7	Glyco_transf_28
+1.4e-24	91.3	sp|B4U1U4|MURG_STREM	Glyco_transf_28
+1.4e-24	91.3	sp|A5CWW1|MURG_VESOH	Glyco_transf_28
+1.5e-24	91.3	sp|A1A2E9|MURG_BIFAA	Glyco_transf_28
+1.5e-24	91.2	sp|P65483|MURG_STRP1	Glyco_transf_28
+1.5e-24	91.2	sp|P65484|MURG_STRP8	Glyco_transf_28
+1.5e-24	91.2	sp|Q48SK9|MURG_STRPM	Glyco_transf_28
+1.6e-24	91.2	sp|Q1J5S6|MURG_STRPF	Glyco_transf_28
+1.6e-24	91.2	sp|A8Z3Z7|MURG_STAAT	Glyco_transf_28
+1.6e-24	91.2	sp|Q2FH20|MURG_STAA3	Glyco_transf_28
+1.6e-24	91.2	sp|Q1JG11|MURG_STRPD	Glyco_transf_28
+1.8e-24	91.0	sp|Q17WB5|MURG_HELAH	Glyco_transf_28
+1.9e-24	90.9	sp|C6BYG6|MURG_DESAD	Glyco_transf_28
+2.3e-24	90.7	sp|Q6G2Q5|MURG_BARHE	Glyco_transf_28
+2.3e-24	90.7	sp|A9IWA5|MURG_BART1	Glyco_transf_28
+2.8e-24	90.4	sp|Q8CUL4|MURG_OCEIH	Glyco_transf_28
+2.8e-24	90.4	sp|A6LEU3|MURG_PARD8	Glyco_transf_28
+3.1e-24	90.2	sp|Q6AE64|MURG_LEIXX	Glyco_transf_28
+3.3e-24	90.2	sp|A1K3U6|MURG_AZOSB	Glyco_transf_28
+3.9e-24	89.9	sp|Q9PLG2|MURG_CHLMU	Glyco_transf_28
+4.1e-24	89.9	sp|Q1GRX9|MURG_SPHAL	Glyco_transf_28
+4.2e-24	89.8	sp|Q751Z4|ATG26_ASHGO	Glyco_transf_28
+4.4e-24	89.8	sp|A4VTK4|MURG_STRSY	Glyco_transf_28
+4.4e-24	89.8	sp|A4VZT9|MURG_STRS2	Glyco_transf_28
+4.6e-24	89.7	sp|B3QWT7|MURG_CHLT3	Glyco_transf_28
+4.6e-24	89.7	sp|Q6AJ53|MURG_DESPS	Glyco_transf_28
+5e-24	89.6	sp|B9K6P7|MURG_THENN	Glyco_transf_28
+5.9e-24	89.3	sp|Q8K6R7|MURG_STRP3	Glyco_transf_28
+6.9e-24	89.1	sp|Q54IL5|UGT52_DICDI	Glyco_transf_28
+7.5e-24	89.0	sp|B3DQN1|MURG_BIFLD	Glyco_transf_28
+7.5e-24	89.0	sp|Q8CY50|MURG_BIFLO	Glyco_transf_28
+7.8e-24	89.0	sp|Q6MIG1|MURG_BDEBA	Glyco_transf_28
+8.4e-24	88.9	sp|Q7U3U6|MURG_SYNPX	Glyco_transf_28
+8.9e-24	88.8	sp|B7GQ78|MURG_BIFLI	Glyco_transf_28
+9.3e-24	88.7	sp|Q0UY53|ATG26_PHANO	Glyco_transf_28
+1.2e-23	88.4	sp|Q8DVE2|MURG_STRMU	Glyco_transf_28
+1.2e-23	88.4	sp|Q6N411|MURG_RHOPA	Glyco_transf_28
+1.2e-23	88.3	sp|Q6CUV2|ATG26_KLULA	Glyco_transf_28
+1.3e-23	88.3	sp|Q1MPB9|MURG_LAWIP	Glyco_transf_28
+1.3e-23	88.3	sp|Q8R5N5|MURG_FUSNN	Glyco_transf_28
+1.4e-23	88.1	sp|Q3ANV3|MURG_CHLCH	Glyco_transf_28
+1.4e-23	88.1	sp|A8AW15|MURG_STRGC	Glyco_transf_28
+2.2e-23	87.5	sp|B8DP79|MURG_DESVM	Glyco_transf_28
+2.4e-23	87.4	sp|Q728U8|MURG_DESVH	Glyco_transf_28
+3e-23	87.1	sp|Q8NJS1|ATG26_LEPMC	Glyco_transf_28
+3.4e-23	86.9	sp|Q5KK25|ATG26_CRYNE	Glyco_transf_28
+3.5e-23	86.8	sp|Q8YZI3|MURG_ANASP	Glyco_transf_28
+3.6e-23	86.8	sp|B9DUV6|MURG_STRU0	Glyco_transf_28
+3.8e-23	86.7	sp|Q3M935|MURG_ANAVT	Glyco_transf_28
+3.8e-23	86.7	sp|Q7VDZ2|MURG_PROMA	Glyco_transf_28
+3.9e-23	86.7	sp|Q0I6M0|MURG_SYNS3	Glyco_transf_28
+4.2e-23	86.6	sp|B2J8J9|MURG_NOSP7	Glyco_transf_28
+4.2e-23	86.6	sp|A5GPC2|MURG_SYNPW	Glyco_transf_28
+4.5e-23	86.5	sp|B4RFS0|MURG_PHEZH	Glyco_transf_28
+5.2e-23	86.3	sp|A1VBE8|MURG_DESVV	Glyco_transf_28
+6.2e-23	86.1	sp|B7IHN7|MURG_THEAB	Glyco_transf_28
+6.3e-23	86.0	sp|Q7S1I0|ATG26_NEUCR	Glyco_transf_28
+6.7e-23	85.9	sp|Q3AVX2|MURG_SYNS9	Glyco_transf_28
+7.2e-23	85.8	sp|Q4WID6|ATG26_ASPFU	Glyco_transf_28
+7.2e-23	85.8	sp|A1CYS1|ATG26_NEOFI	Glyco_transf_28
+7.8e-23	85.7	sp|Q8DHY4|MURG_THEEB	Glyco_transf_28
+8.1e-23	85.7	sp|Q11RH5|MURG_CYTH3	Glyco_transf_28
+8.2e-23	85.6	sp|A9BDG0|MURG_PROM4	Glyco_transf_28
+9e-23	85.5	sp|Q73L91|MURG_TREDE	Glyco_transf_28
+9.7e-23	85.4	sp|C4XK69|MURG_DESMR	Glyco_transf_28
+1e-22	85.3	sp|A1BAL5|MURG_PARDP	Glyco_transf_28
+1.2e-22	85.1	sp|A3CLN6|MURG_STRSV	Glyco_transf_28
+1.2e-22	85.1	sp|A4SV74|MURG_POLSQ	Glyco_transf_28
+1.4e-22	84.9	sp|O67238|MURG_AQUAE	Glyco_transf_28
+1.6e-22	84.7	sp|Q2U0C3|ATG26_ASPOR	Glyco_transf_28
+1.6e-22	84.7	sp|Q3STS8|MURG_NITWN	Glyco_transf_28
+1.6e-22	84.7	sp|A1BJX8|MURG_CHLPD	Glyco_transf_28
+1.7e-22	84.6	sp|A1AWE8|MURG_RUTMC	Glyco_transf_28
+1.7e-22	84.6	sp|A1CFB3|ATG26_ASPCL	Glyco_transf_28
+2.1e-22	84.4	sp|B8IN64|MURG_METNO	Glyco_transf_28
+2.2e-22	84.3	sp|Q6G124|MURG_BARQU	Glyco_transf_28
+2.2e-22	84.2	sp|Q2W0H3|MURG_MAGSA	Glyco_transf_28
+2.8e-22	83.9	sp|Q0CKU4|ATG26_ASPTN	Glyco_transf_28
+2.8e-22	83.9	sp|B1ZU31|MURG_OPITP	Glyco_transf_28
+2.9e-22	83.9	sp|A6L071|MURG_BACV8	Glyco_transf_28
+2.9e-22	83.9	sp|Q1QNU3|MURG_NITHX	Glyco_transf_28
+3.8e-22	83.5	sp|B2V7Y8|MURG_SULSY	Glyco_transf_28
+4.9e-22	83.1	sp|Q3AGT7|MURG_SYNSC	Glyco_transf_28
+5.2e-22	83.0	sp|Q5B4C9|ATG26_EMENI	Glyco_transf_28
+7.1e-22	82.6	sp|A5GW69|MURG_SYNR3	Glyco_transf_28
+7.4e-22	82.6	sp|A4YZK3|MURG_BRASO	Glyco_transf_28
+7.6e-22	82.5	sp|Q2RVU4|MURG_RHORT	Glyco_transf_28
+7.8e-22	82.5	sp|Q2JW21|MURG_SYNJA	Glyco_transf_28
+8e-22	82.4	sp|A5EPK4|MURG_BRASB	Glyco_transf_28
+9.4e-22	82.2	sp|A7KAN4|ATG26_PENCW	Glyco_transf_28
+1.1e-21	82.0	sp|Q2JJR4|MURG_SYNJB	Glyco_transf_28
+1.2e-21	81.9	sp|A2QNQ5|ATG26_ASPNC	Glyco_transf_28
+1.3e-21	81.8	sp|Q0AMW7|MURG_MARMM	Glyco_transf_28
+1.5e-21	81.5	sp|Q812Y1|MURG3_BACCR	Glyco_transf_28
+1.8e-21	81.3	sp|B4SH49|MURG_PELPB	Glyco_transf_28
+2e-21	81.2	sp|B4S6Q9|MURG_PROA2	Glyco_transf_28
+2.5e-21	80.8	sp|A8G2K3|MURG_PROM2	Glyco_transf_28
+2.7e-21	80.8	sp|Q89FU7|MURG_BRAJA	Glyco_transf_28
+3.5e-21	80.4	sp|A0RHC3|MURG1_BACAH	Glyco_transf_28
+3.7e-21	80.3	sp|Q6MBS7|MURG_PARUW	Glyco_transf_28
+3.9e-21	80.2	sp|Q0BXU2|MURG_HYPNA	Glyco_transf_28
+4.2e-21	80.1	sp|Q8KGD4|MURG_CHLTE	Glyco_transf_28
+4.2e-21	80.1	sp|B3QLW4|MURG_CHLP8	Glyco_transf_28
+5.4e-21	79.8	sp|A6T2F8|MURG_JANMA	Glyco_transf_28
+7.8e-21	79.2	sp|A5CEL6|MURG_ORITB	Glyco_transf_28
+7.9e-21	79.2	sp|Q8D2Z6|MURG_WIGBR	Glyco_transf_28
+9.1e-21	79.0	sp|B0UFC7|MURG_METS4	Glyco_transf_28
+1.2e-20	78.6	sp|Q163J0|MURG_ROSDO	Glyco_transf_28
+1.2e-20	78.6	sp|A4G8T8|MURG_HERAR	Glyco_transf_28
+1.3e-20	78.6	sp|Q28NN5|MURG_JANSC	Glyco_transf_28
+1.3e-20	78.6	sp|Q31CY4|MURG_PROM9	Glyco_transf_28
+1.3e-20	78.5	sp|B1ZGP4|MURG_METPB	Glyco_transf_28
+1.5e-20	78.3	sp|Q5LU63|MURG_SILPO	Glyco_transf_28
+1.6e-20	78.3	sp|B3CRE9|MURG_ORITI	Glyco_transf_28
+1.8e-20	78.1	sp|Q1GIV1|MURG_SILST	Glyco_transf_28
+2.1e-20	77.8	sp|Q1GZ01|MURG_METFK	Glyco_transf_28
+2.3e-20	77.7	sp|B3ET95|MURG_AMOA5	Glyco_transf_28
+2.4e-20	77.7	sp|Q8A258|MURG_BACTN	Glyco_transf_28
+2.6e-20	77.5	sp|Q211T8|MURG_RHOPB	Glyco_transf_28
+2.9e-20	77.4	sp|Q2IYK8|MURG_RHOP2	Glyco_transf_28
+3.9e-20	77.0	sp|B1LXZ4|MURG_METRJ	Glyco_transf_28
+4.4e-20	76.8	sp|A2BNZ2|MURG_PROMS	Glyco_transf_28
+5.1e-20	76.6	sp|C0R2W7|MURG_WOLWR	Glyco_transf_28
+5.1e-20	76.6	sp|Q73I55|MURG_WOLPM	Glyco_transf_28
+5.9e-20	76.4	sp|A9VWV3|MURG_METEP	Glyco_transf_28
+6.1e-20	76.3	sp|B7KSC1|MURG_METC4	Glyco_transf_28
+6.5e-20	76.3	sp|A2C027|MURG_PROM1	Glyco_transf_28
+6.7e-20	76.2	sp|A3PHS8|MURG_RHOS1	Glyco_transf_28
+7.9e-20	76.0	sp|A4SH02|MURG_PROVI	Glyco_transf_28
+7.9e-20	76.0	sp|Q3J4M2|MURG_RHOS4	Glyco_transf_28
+9.5e-20	75.7	sp|Q7V388|MURG_PROMP	Glyco_transf_28
+9.9e-20	75.7	sp|A3PAR5|MURG_PROM0	Glyco_transf_28
+1e-19	75.6	sp|Q07PT3|MURG_RHOP5	Glyco_transf_28
+1.1e-19	75.5	sp|Q133X1|MURG_RHOPS	Glyco_transf_28
+1.2e-19	75.4	sp|Q5LIJ7|MURG_BACFN	Glyco_transf_28
+1.2e-19	75.4	sp|Q64ZM1|MURG_BACFR	Glyco_transf_28
+1.3e-19	75.3	sp|A6LLF1|MURG_THEM4	Glyco_transf_28
+1.6e-19	75.0	sp|Q46HH6|MURG_PROMT	Glyco_transf_28
+2.4e-19	74.4	sp|A4WQD5|MURG_RHOS5	Glyco_transf_28
+3.2e-19	74.0	sp|A2BUH4|MURG_PROM5	Glyco_transf_28
+6.6e-19	73.0	sp|Q5GS79|MURG_WOLTR	Glyco_transf_28
+1e-18	72.4	sp|Q7NPZ9|MURG_CHRVO	Glyco_transf_28
+1.2e-18	72.2	sp|Q1AVX3|MURG_RUBXD	Glyco_transf_28
+1.3e-18	72.1	sp|Q7MBC4|MURG_GLOVI	Glyco_transf_28
+1.6e-18	71.8	sp|Q7U322|MURG_HELHP	Glyco_transf_28
+2e-18	71.4	sp|Q3B129|MURG_PELLD	Glyco_transf_28
+4.3e-18	70.4	sp|Q30PK0|MURG_SULDN	Glyco_transf_28
+7.3e-18	69.6	sp|A2SCY5|MURG_METPP	Glyco_transf_28
+1.2e-17	68.9	sp|A0RP87|MURG_CAMFF	Glyco_transf_28
+1.6e-17	68.5	sp|B3CM87|MURG_WOLPP	Glyco_transf_28
+3.5e-17	67.4	sp|A5FUL0|MURG_ACICJ	Glyco_transf_28
+5.3e-17	66.8	sp|Q7MAD4|MURG_WOLSU	Glyco_transf_28
+8.9e-17	66.1	sp|B2KE54|MURG_ELUMP	Glyco_transf_28
+1.2e-16	65.6	sp|B3EIK8|MURG_CHLL2	Glyco_transf_28
+1.4e-16	65.4	sp|A5UZT7|MURG_ROSS1	Glyco_transf_28
+3.1e-16	64.4	sp|Q5FUJ5|MURG_GLUOX	Glyco_transf_28
+6.5e-16	63.3	sp|A6Q722|MURG_SULNB	Glyco_transf_28
+1.6e-15	62.0	sp|B8E325|MURG_DICTD	Glyco_transf_28
+2.2e-15	61.6	sp|A6Q579|MURG_NITSB	Glyco_transf_28
+3.4e-15	61.0	sp|Q0BV25|MURG_GRABC	Glyco_transf_28
+4e-15	60.8	sp|Q5PB22|MURG_ANAMM	Glyco_transf_28
+4.1e-15	60.7	sp|A7I265|MURG_CAMHC	Glyco_transf_28
+6.3e-15	60.1	sp|A9FI55|MURG_SORC5	Glyco_transf_28
+8.2e-15	59.7	sp|B5YEL3|MURG_DICT6	Glyco_transf_28
+1.2e-13	56.0	sp|A8FM88|MURG_CAMJ8	Glyco_transf_28
+1.5e-13	55.6	sp|Q5HU62|MURG_CAMJR	Glyco_transf_28
+1.5e-13	55.6	sp|A1W027|MURG_CAMJJ	Glyco_transf_28
+1.5e-13	55.6	sp|Q9PNQ2|MURG_CAMJE	Glyco_transf_28
+3.5e-13	54.5	sp|A7H2Z9|MURG_CAMJD	Glyco_transf_28
+7.2e-13	53.4	sp|A8F4X1|MURG_THELT	Glyco_transf_28
+1.8e-10	45.7	sp|Q72R84|MURG_LEPIC	Glyco_transf_28
+1.8e-10	45.7	sp|Q8F4J1|MURG_LEPIN	Glyco_transf_28
+4.2e-09	41.3	sp|Q4FPK5|MURG_PELUB	Glyco_transf_28
+7.7e-09	40.4	sp|Q04V94|MURG_LEPBJ	Glyco_transf_28
+7.7e-09	40.4	sp|Q04Y82|MURG_LEPBL	Glyco_transf_28
+3.4e-07	35.1	sp|Q8TTI1|Y452_METAC	Glyco_transf_28
+2.3e-06	32.4	sp|Q8TTI0|Y453_METAC	Glyco_transf_28
+2.4e-06	32.3	sp|Q8PWF3|Y1636_METMA	Glyco_transf_28
+7.8e-06	30.6	sp|O34539|YJIC_BACSU	Glyco_transf_28
+2e-05	29.3	sp|Q53685|OLED_STRAT	Glyco_transf_28
+2e-05	29.3	sp|Q8PZB2|Y582_METMA	Glyco_transf_28
+7.8e-05	27.4	sp|P21686|CRTX_PANAN	Glyco_transf_28
+0.00056	24.6	sp|Q54387|MGT_STRLI	Glyco_transf_28
+0.00067	24.4	sp|Q01330|CRTX_ESCVU	Glyco_transf_28
+0.012	20.4	sp|O31853|YOJK_BACSU	Glyco_transf_28
+0.013	20.2	sp|B1YIY4|MTNA_EXIS2	Glyco_transf_28
+0.016	19.9	sp|Q0WW21|UGAGT_ARATH	Glyco_transf_28
+0.021	19.6	sp|Q9Z565|ILVC1_STRCO	Glyco_transf_28
+0.022	19.5	sp|O05496|YDHE_BACSU	Glyco_transf_28
+0.022	19.4	sp|Q9FBT8|ILVC2_STRCO	Glyco_transf_28
+0.023	19.4	sp|Q9SBL1|HMNGT_SORBI	Glyco_transf_28
+0.067	17.9	sp|B1I2P1|MTNA_DESAP	Glyco_transf_28
+0.08	17.6	sp|A8AZU1|MUTL_STRGC	Glyco_transf_28
+0.085	17.6	sp|Q01198|LIGD_PSEPA	Glyco_transf_28
+0.087	17.5	sp|Q83RR8|NPD_SHIFL	Glyco_transf_28
+0.089	17.5	sp|C5D7U5|MTNA_GEOSW	Glyco_transf_28
+0.11	17.2	sp|A3CR14|MUTL_STRSV	Glyco_transf_28
+0.12	17.1	sp|Q88M09|MTNA_PSEPK	Glyco_transf_28
+0.13	17.0	sp|Q5L1E6|MTNA_GEOKA	Glyco_transf_28
+0.14	16.9	sp|Q8X8E0|NPD_ECO57	Glyco_transf_28
+0.14	16.9	sp|P75960|NPD_ECOLI	Glyco_transf_28
+0.14	16.9	sp|Q5V467|MAMA1_HALMA	Glyco_transf_28
+0.14	16.9	sp|C0MAS4|MUTL_STRE4	Glyco_transf_28
+0.14	16.8	sp|P0A2F2|NPD_SALTY	Glyco_transf_28
+0.14	16.8	sp|P0A2F3|NPD_SALTI	Glyco_transf_28
+0.15	16.8	sp|C0MGC4|MUTL_STRS7	Glyco_transf_28
+0.15	16.8	sp|Q65KK2|MTNA_BACLD	Glyco_transf_28
+0.15	16.7	sp|B0KTX5|MTNA_PSEPG	Glyco_transf_28
+0.16	16.7	sp|B1J5G5|MTNA_PSEPW	Glyco_transf_28
+0.16	16.7	sp|A5W7G2|MTNA_PSEP1	Glyco_transf_28
+0.17	16.6	sp|A4ILL1|MTNA_GEOTN	Glyco_transf_28
+0.18	16.5	sp|B4U0J7|MUTL_STREM	Glyco_transf_28
+0.2	16.4	sp|Q8FIM4|NPD_ECOL6	Glyco_transf_28
+0.21	16.3	sp|B2GFJ7|ILVC_KOCRD	Glyco_transf_28
+0.21	16.3	sp|B1VZ72|ILVC_STRGG	Glyco_transf_28
+0.22	16.2	sp|Q59818|ILVC_STRAW	Glyco_transf_28
+0.26	16.0	sp|Q731R7|MTNA_BACC1	Glyco_transf_28
+0.29	15.8	sp|B1GZW3|TPIS_UNCTG	Glyco_transf_28
+0.33	15.7	sp|Q2IWS4|GLYA_RHOP2	Glyco_transf_28
+0.36	15.5	sp|A7GS56|MTNA_BACCN	Glyco_transf_28
+0.37	15.5	sp|B7KF23|ILVC_CYAP7	Glyco_transf_28
+0.39	15.4	sp|A5W1E8|RNZ_PSEP1	Glyco_transf_28
+0.45	15.2	sp|B3QSP0|ILVC_CHLT3	Glyco_transf_28
+0.46	15.2	sp|O31662|MTNA_BACSU	Glyco_transf_28
+0.51	15.0	sp|C1F6Z5|ILVC_ACIC5	Glyco_transf_28
+0.55	14.9	sp|Q2G3S7|PYRB_NOVAD	Glyco_transf_28
+0.57	14.9	sp|Q96LB3|IFT74_HUMAN	Glyco_transf_28
+0.58	14.9	sp|A9AZM5|ILVC_HERA2	Glyco_transf_28
+0.64	14.7	sp|B8HSQ9|SURE_CYAP4	Glyco_transf_28
+0.68	14.6	sp|Q3SPL2|UVRC_NITWN	Glyco_transf_28
+0.68	14.6	sp|A7Z3X0|MTNA_BACA2	Glyco_transf_28
+0.69	14.6	sp|Q38W65|EFTS_LACSS	Glyco_transf_28
+0.69	14.6	sp|C3JYK1|TIG_PSEFS	Glyco_transf_28
+0.71	14.6	sp|Q1GZA6|BIOB_METFK	Glyco_transf_28
+0.71	14.6	sp|Q635P7|MTNA2_BACCZ	Glyco_transf_28
+0.71	14.6	sp|O48676|HTGT_ARATH	Glyco_transf_28
+0.72	14.6	sp|Q8YRC9|THIOG_ANASP	Glyco_transf_28
+0.73	14.5	sp|Q8DW43|ILVC_STRMU	Glyco_transf_28
+0.73	14.5	sp|Q81MJ6|MTNA2_BACAN	Glyco_transf_28
+0.74	14.5	sp|Q6N693|GLYA1_RHOPA	Glyco_transf_28
+0.75	14.5	sp|B0C915|MURD_ACAM1	Glyco_transf_28
+0.76	14.5	sp|Q2KA25|GLYA_RHIEC	Glyco_transf_28
+0.77	14.5	sp|Q214H7|GLYA_RHOPB	Glyco_transf_28
+0.79	14.4	sp|B9DW70|MUTL_STRU0	Glyco_transf_28
+0.8	14.4	sp|A0RI38|MTNA2_BACAH	Glyco_transf_28
+0.81	14.4	sp|Q6HED3|MTNA2_BACHK	Glyco_transf_28
+0.83	14.4	sp|Q1QIR5|UVRC_NITHX	Glyco_transf_28
+0.84	14.3	sp|A8AVN4|ILVC_STRGC	Glyco_transf_28
+0.86	14.3	sp|Q7V5V5|MURD_PROMM	Glyco_transf_28
+0.9	14.2	sp|Q47SB6|ILVC_THEFY	Glyco_transf_28
+0.9	14.2	sp|A4FMQ5|ILVC_SACEN	Glyco_transf_28
+0.91	14.2	sp|Q5V3R4|TRM56_HALMA	Glyco_transf_28
+0.91	14.2	sp|B8GW68|ENO_CAUCN	Glyco_transf_28
+0.91	14.2	sp|Q9A7J9|ENO_CAUCR	Glyco_transf_28
+0.92	14.2	sp|Q5V3F0|MAMA2_HALMA	Glyco_transf_28
+0.96	14.2	sp|B1LZ88|GLYA_METRJ	Glyco_transf_28
+0.98	14.1	sp|P94966|BIOB_METSK	Glyco_transf_28
+1	14.1	sp|Q3SHE4|ILVC_THIDA	Glyco_transf_28
+1.1	14.0	sp|Q07MT9|GLYA_RHOP5	Glyco_transf_28
+1.1	14.0	sp|A9VRK3|MTNA1_BACWK	Glyco_transf_28
+1.1	13.9	sp|A9GW78|ILVC_SORC5	Glyco_transf_28
+1.1	13.9	sp|Q5YRW2|ILVC_NOCFA	Glyco_transf_28
+1.2	13.9	sp|A3CQ86|ILVC_STRSV	Glyco_transf_28
+1.2	13.8	sp|Q21AW5|UVRC_RHOPB	Glyco_transf_28
+1.3	13.7	sp|Q81IK7|MTNA1_BACCR	Glyco_transf_28
+1.3	13.7	sp|Q5FNN2|PYRG_GLUOX	Glyco_transf_28
+1.3	13.7	sp|Q2S9V9|ILVC_HAHCH	Glyco_transf_28
+1.4	13.6	sp|Q17QH8|D39U1_BOVIN	Glyco_transf_28
+1.4	13.6	sp|Q2J6V2|ILVC_FRASC	Glyco_transf_28
+1.4	13.6	sp|A1WUW3|ILVC_HALHL	Glyco_transf_28
+1.4	13.6	sp|A8LMD0|PUR9_DINSH	Glyco_transf_28
+1.4	13.6	sp|C5BAT0|GCSP_EDWI9	Glyco_transf_28
+1.4	13.6	sp|C1B2M1|ILVC_RHOOB	Glyco_transf_28
+1.4	13.6	sp|Q0S2H3|ILVC_RHOSR	Glyco_transf_28
+1.4	13.6	sp|A0R946|MTNA1_BACAH	Glyco_transf_28
+1.4	13.6	sp|Q81ZC2|MTNA1_BACAN	Glyco_transf_28
+1.5	13.6	sp|Q6HP54|MTNA1_BACHK	Glyco_transf_28
+1.5	13.5	sp|Q1MIU5|GLYA_RHIL3	Glyco_transf_28
+1.5	13.5	sp|A8FCG5|MTNA_BACP2	Glyco_transf_28
+1.6	13.5	sp|Q63CV4|ILVC2_BACCZ	Glyco_transf_28
+1.6	13.4	sp|A4J179|ILVC_DESRM	Glyco_transf_28
+1.6	13.4	sp|Q9V030|PAAD_PYRAB	Glyco_transf_28
+1.7	13.4	sp|Q81F27|ILVC2_BACCR	Glyco_transf_28
+1.7	13.4	sp|Q03IJ9|ILVC_STRTD	Glyco_transf_28
+1.7	13.4	sp|Q9F0I7|ILVC_STRTR	Glyco_transf_28
+1.7	13.4	sp|P26166|YBCC_RHOCA	Glyco_transf_28
+1.7	13.4	sp|B8I1T8|ILVC_CLOCE	Glyco_transf_28
+1.7	13.3	sp|A4VXL3|ILVC_STRSY	Glyco_transf_28
+1.7	13.3	sp|A4W3V8|ILVC_STRS2	Glyco_transf_28
+1.8	13.3	sp|Q3B594|ILVC_PELLD	Glyco_transf_28
+1.8	13.3	sp|B1I8F2|MUTL_STRPI	Glyco_transf_28
+1.8	13.3	sp|B2IS10|MUTL_STRPS	Glyco_transf_28
+1.8	13.3	sp|B8ZKC9|MUTL_STRPJ	Glyco_transf_28
+1.8	13.3	sp|P0A3R1|HEXB_STRPN	Glyco_transf_28
+1.8	13.3	sp|P0A3R2|HEXB_STRR6	Glyco_transf_28
+1.8	13.3	sp|Q04MR4|MUTL_STRP2	Glyco_transf_28
+1.8	13.3	sp|C1CI68|MUTL_STRZP	Glyco_transf_28
+1.8	13.3	sp|C1CP43|MUTL_STRZT	Glyco_transf_28
+1.8	13.3	sp|Q8ZQE4|MACB_SALTY	Glyco_transf_28
+1.8	13.3	sp|Q57R58|MACB_SALCH	Glyco_transf_28
+1.8	13.2	sp|Q64550|UD11_RAT	Glyco_transf_28
+1.8	13.2	sp|B9JCX4|GLYA_AGRRK	Glyco_transf_28
+1.9	13.2	sp|Q8Z824|MACB_SALTI	Glyco_transf_28
+1.9	13.2	sp|O94475|YC67_SCHPO	Glyco_transf_28
+1.9	13.2	sp|P59837|RDH12_BOVIN	Glyco_transf_28
+1.9	13.2	sp|Q5PGK9|MACB_SALPA	Glyco_transf_28
+2	13.1	sp|Q02CM4|ILVC_SOLUE	Glyco_transf_28
+2	13.1	sp|Q669P6|NPD_YERPS	Glyco_transf_28
+2	13.1	sp|Q8ZFR1|NPD_YERPE	Glyco_transf_28
+2	13.1	sp|B9KYS1|ILVC_THERP	Glyco_transf_28
+2	13.1	sp|B4UAN4|ILVC_ANASK	Glyco_transf_28
+2	13.1	sp|B8J829|ILVC_ANAD2	Glyco_transf_28
+2	13.1	sp|Q2IJB7|ILVC_ANADE	Glyco_transf_28
+2.1	13.1	sp|Q0RDI8|ILVC_FRAAA	Glyco_transf_28
+2.1	13.1	sp|P0ABQ0|COABC_ECOLI	Glyco_transf_28
+2.1	13.1	sp|P0ABQ1|COABC_ECOL6	Glyco_transf_28
+2.1	13.1	sp|B2J2U6|ILVC_NOSP7	Glyco_transf_28
+2.1	13.0	sp|Q89DG9|UVRC_BRAJA	Glyco_transf_28
+2.1	13.0	sp|Q2S0M9|ILVC_SALRD	Glyco_transf_28
+2.2	13.0	sp|Q7NH80|ILVC_GLOVI	Glyco_transf_28
+2.2	13.0	sp|Q8G6V1|ILVC2_BIFLO	Glyco_transf_28
+2.2	13.0	sp|Q2W698|ENO_MAGSA	Glyco_transf_28
+2.3	12.9	sp|Q63GN3|MTNA1_BACCZ	Glyco_transf_28
+2.3	12.9	sp|B0JRP2|ILVC_MICAN	Glyco_transf_28
+2.3	12.9	sp|C1CBX8|MUTL_STRZJ	Glyco_transf_28
+2.3	12.9	sp|Q3SLY0|BIOB_THIDA	Glyco_transf_28
+2.4	12.9	sp|B5E6C5|MUTL_STRP4	Glyco_transf_28
+2.5	12.8	sp|B2J6I3|MURD_NOSP7	Glyco_transf_28
+2.5	12.8	sp|Q5LXV0|ILVC_STRT1	Glyco_transf_28
+2.5	12.8	sp|Q5M2F2|ILVC_STRT2	Glyco_transf_28
+2.6	12.8	sp|C6A5E6|VATD_THESM	Glyco_transf_28
+2.6	12.8	sp|Q2RIS6|ILVC_MOOTA	Glyco_transf_28
+2.6	12.7	sp|Q3M859|THIOG_ANAVT	Glyco_transf_28
+2.6	12.7	sp|Q5GS59|RLME_WOLTR	Glyco_transf_28
+2.7	12.7	sp|B8G7X1|ILVC_CHLAD	Glyco_transf_28
+2.8	12.7	sp|C5C2I2|ILVC_BEUC1	Glyco_transf_28
+2.8	12.6	sp|Q5SJ03|ILVC_THET8	Glyco_transf_28
+2.8	12.6	sp|Q72JC8|ILVC_THET2	Glyco_transf_28
+2.9	12.6	sp|Q4JUN9|ILVC_CORJK	Glyco_transf_28
+2.9	12.6	sp|Q2J0X3|UVRC_RHOP2	Glyco_transf_28
+2.9	12.6	sp|Q02YY8|ILVC_LACLS	Glyco_transf_28
+2.9	12.6	sp|B9EBF4|ILVC_MACCJ	Glyco_transf_28
+2.9	12.6	sp|Q43716|UFOG_PETHY	Glyco_transf_28
+3	12.6	sp|A5GUT4|SURE_SYNR3	Glyco_transf_28
+3	12.6	sp|Q1ARE4|ILVC_RUBXD	Glyco_transf_28
+3	12.5	sp|A6W7N6|ILVC_KINRD	Glyco_transf_28
+3	12.5	sp|Q11039|DEAD_MYCTU	Glyco_transf_28
+3	12.5	sp|Q13BM0|UVRC_RHOPS	Glyco_transf_28
+3.1	12.5	sp|Q8YMT3|SURE_ANASP	Glyco_transf_28
+3.1	12.5	sp|Q319M0|SURE_PROM9	Glyco_transf_28
+3.1	12.5	sp|A9VFD5|MTNA2_BACWK	Glyco_transf_28
+3.2	12.5	sp|A1JRP2|NADA_YERE8	Glyco_transf_28
+3.3	12.4	sp|A2RKQ6|ILVC_LACLM	Glyco_transf_28
+3.5	12.3	sp|Q32DZ9|MACB_SHIDS	Glyco_transf_28
+3.5	12.3	sp|A5CPY6|ILVC_CLAM3	Glyco_transf_28
+3.5	12.3	sp|B0RIN6|ILVC_CLAMS	Glyco_transf_28
+3.7	12.3	sp|Q8K5J6|MUTL_STRP3	Glyco_transf_28
+3.7	12.3	sp|Q99XN7|MUTL_STRP1	Glyco_transf_28
+3.7	12.3	sp|B5XJ09|MUTL_STRPZ	Glyco_transf_28
+3.8	12.2	sp|A2RGV3|MUTL_STRPG	Glyco_transf_28
+3.8	12.2	sp|Q5X9H5|MUTL_STRP6	Glyco_transf_28
+3.9	12.2	sp|Q3JYM6|MUTL_STRA1	Glyco_transf_28
+3.9	12.2	sp|Q8E2R5|MUTL_STRA3	Glyco_transf_28
+4	12.2	sp|Q9MB73|LGT_CITUN	Glyco_transf_28
+4.1	12.1	sp|A8G678|SURE_PROM2	Glyco_transf_28
+4.2	12.1	sp|A9WP08|ILVC_RENSM	Glyco_transf_28
+4.8	11.9	sp|A9WC26|ILVC_CHLAA	Glyco_transf_28
+4.8	11.9	sp|B9LGM7|ILVC_CHLSY	Glyco_transf_28
+4.9	11.9	sp|A2BSJ2|SURE_PROMS	Glyco_transf_28
+5	11.8	sp|Q9LR44|IABG1_ARATH	Glyco_transf_28
+5.2	11.8	sp|O57731|VATD_PYRHO	Glyco_transf_28
+5.6	11.7	sp|A3PEA4|SURE_PROM0	Glyco_transf_28
+6.8	11.4	sp|P75831|MACB_ECOLI	Glyco_transf_28
+7.6	11.2	sp|Q83LR7|MACB_SHIFL	Glyco_transf_28
+7.7	11.2	sp|Q3Z3Q4|MACB_SHISS	Glyco_transf_28
+9.5	10.9	sp|Q8XED0|MACB_ECO57	Glyco_transf_28
diff --git a/demotic/regress/hmmsearch-tbl.out b/demotic/regress/hmmsearch-tbl.out
new file mode 100644
index 0000000..b979e53
--- /dev/null
+++ b/demotic/regress/hmmsearch-tbl.out
@@ -0,0 +1,972 @@
+4.5	0	88	116	US2	50	78	sp|P06485|US02_HHV11	
+1.1e-43	0	2	126	US2	111	247	sp|P06485|US02_HHV11	
+9.8e-43	0	1	126	US2	110	246	sp|P13292|US02_HHV2H	
+5.9e-40	0	1	124	US2	1	116	sp|Q05106|US453_GAHVG	
+1.1e-39	0	1	124	US2	111	265	sp|P32517|US02_EHV1K	
+1.7e-37	0	1	112	US2	111	245	sp|P28964|US02_EHV1B	
+9.8e-36	0	1	110	US2	105	208	sp|Q08099|US02_BHV1S	
+8.8e-22	0	1	125	US2	135	255	sp|P24382|US02_SUHVN	
+7.1e-05	0	51	107	US2	208	262	sp|Q9ZK80|ATPG_HELPJ	
+7.1e-05	0	51	107	US2	208	262	sp|P56082|ATPG_HELPY	
+7.8e-05	0	51	107	US2	208	262	sp|B2UUP1|ATPG_HELPS	
+7.8e-05	0	51	107	US2	208	262	sp|B6JMX3|ATPG_HELP2	
+0.00013	0	52	107	US2	209	262	sp|Q17Y79|ATPG_HELAH	
+0.00018	0	51	107	US2	208	262	sp|B5Z8D1|ATPG_HELPG	
+0.0002	0	51	107	US2	208	262	sp|Q1CSD4|ATPG_HELPH	
+1.3e-42	0	1	138	Glyco_transf_28	3	142	sp|A7Z4E5|MURG_BACA2	
+4e-41	0	1	138	Glyco_transf_28	3	142	sp|Q65JY0|MURG_BACLD	
+4	0	13	106	Glyco_transf_28	203	234	sp|Q65JY0|MURG_BACLD	
+4.9e-42	0	1	138	Glyco_transf_28	3	142	sp|P37585|MURG_BACSU	
+2.4e-41	0	1	138	Glyco_transf_28	3	142	sp|A8FCY1|MURG_BACP2	
+7.9e-40	0	1	139	Glyco_transf_28	3	143	sp|Q812W5|MURG1_BACCR	
+7e-41	0	2	138	Glyco_transf_28	6	142	sp|A3MY90|MURG_ACTP2	
+7.9e-40	0	1	139	Glyco_transf_28	3	143	sp|A0RHT1|MURG2_BACAH	
+7.9e-40	0	1	139	Glyco_transf_28	3	143	sp|Q636B6|MURG1_BACCZ	
+7.9e-40	0	1	139	Glyco_transf_28	3	143	sp|Q81JG5|MURG1_BACAN	
+7.9e-40	0	1	139	Glyco_transf_28	3	143	sp|Q732F8|MURG1_BACC1	
+3.2e-40	0	1	138	Glyco_transf_28	3	142	sp|B7GGI2|MURG_ANOFW	
+7.5e-40	0	1	139	Glyco_transf_28	3	143	sp|A7GRN6|MURG_BACCN	
+2.5e-40	0	2	138	Glyco_transf_28	6	142	sp|B0BRH7|MURG_ACTPJ	
+2.5e-40	0	2	138	Glyco_transf_28	6	142	sp|B3GZK8|MURG_ACTP7	
+2e-39	0	1	139	Glyco_transf_28	3	143	sp|Q6HEQ4|MURG1_BACHK	
+7.1e-40	0	1	138	Glyco_transf_28	3	142	sp|O07670|MURG_ENTHR	
+4e-39	0	2	138	Glyco_transf_28	9	145	sp|A7FM66|MURG_YERP3	
+6.1	0	38	108	Glyco_transf_28	266	342	sp|A7FM66|MURG_YERP3	
+4e-39	0	2	138	Glyco_transf_28	9	145	sp|B1JK81|MURG_YERPY	
+6.1	0	38	108	Glyco_transf_28	266	342	sp|B1JK81|MURG_YERPY	
+4e-39	0	2	138	Glyco_transf_28	9	145	sp|B2K4E6|MURG_YERPB	
+6.1	0	38	108	Glyco_transf_28	266	342	sp|B2K4E6|MURG_YERPB	
+4e-39	0	2	138	Glyco_transf_28	9	145	sp|Q66EK5|MURG_YERPS	
+6.1	0	38	108	Glyco_transf_28	266	342	sp|Q66EK5|MURG_YERPS	
+2.5e-39	0	2	138	Glyco_transf_28	9	145	sp|A1JJJ3|MURG_YERE8	
+4.8e-39	0	2	138	Glyco_transf_28	9	145	sp|A9MQC2|MURG_SALAR	
+5.2	0	38	108	Glyco_transf_28	266	342	sp|A9MQC2|MURG_SALAR	
+8.1e-40	0	1	138	Glyco_transf_28	3	144	sp|P64869|Y1526_MYCTU	
+8.1e-40	0	1	138	Glyco_transf_28	3	144	sp|P64870|Y1553_MYCBO	
+1e-39	0	2	138	Glyco_transf_28	8	144	sp|Q65RY6|MURG_MANSM	
+3.7e-39	0	2	138	Glyco_transf_28	7	143	sp|B2VD91|MURG_ERWT9	
+1.3e-39	0	2	138	Glyco_transf_28	7	143	sp|Q4QLF8|MURG_HAEI8	
+1.3e-39	0	2	138	Glyco_transf_28	7	143	sp|A5UIR2|MURG_HAEIG	
+1.3e-39	0	2	138	Glyco_transf_28	7	143	sp|P45065|MURG_HAEIN	
+9.8e-39	0	2	138	Glyco_transf_28	9	145	sp|A9R124|MURG_YERPG	
+5.3	0	38	116	Glyco_transf_28	266	350	sp|A9R124|MURG_YERPG	
+9.8e-39	0	2	138	Glyco_transf_28	9	145	sp|Q1C214|MURG_YERPA	
+5.3	0	38	116	Glyco_transf_28	266	350	sp|Q1C214|MURG_YERPA	
+9.8e-39	0	2	138	Glyco_transf_28	9	145	sp|Q1CMM7|MURG_YERPN	
+5.3	0	38	116	Glyco_transf_28	266	350	sp|Q1CMM7|MURG_YERPN	
+9.8e-39	0	2	138	Glyco_transf_28	9	145	sp|Q8ZIE9|MURG_YERPE	
+5.3	0	38	116	Glyco_transf_28	266	350	sp|Q8ZIE9|MURG_YERPE	
+6.2e-39	0	1	138	Glyco_transf_28	3	142	sp|O07109|MURG_ENTFA	
+4.3e-39	0	1	138	Glyco_transf_28	7	144	sp|A3QIM1|MURG_SHELP	
+6.2e-39	0	2	138	Glyco_transf_28	9	145	sp|A8G9S7|MURG_SERP5	
+6e-39	0	2	138	Glyco_transf_28	9	145	sp|B7LWF6|MURG_ESCF3	
+7.6e-39	0	2	138	Glyco_transf_28	9	145	sp|A7MIE5|MURG_ENTS8	
+7.1e-39	0	2	138	Glyco_transf_28	9	145	sp|C6DEU3|MURG_PECCP	
+2.4e-38	0	2	138	Glyco_transf_28	4	142	sp|Q88V81|MURG_LACPL	
+1.5e-38	0	2	138	Glyco_transf_28	9	145	sp|Q8Z9G9|MURG_SALTI	
+3.5e-38	0	2	138	Glyco_transf_28	9	145	sp|B4F111|MURG_PROMH	
+4	0	38	116	Glyco_transf_28	271	355	sp|B4F111|MURG_PROMH	
+2.5e-38	0	1	138	Glyco_transf_28	8	145	sp|A0L1P2|MURG_SHESA	
+2.9	0	54	117	Glyco_transf_28	285	357	sp|A0L1P2|MURG_SHESA	
+2.5e-38	0	1	138	Glyco_transf_28	8	145	sp|Q0HZR6|MURG_SHESR	
+2.9	0	54	117	Glyco_transf_28	285	357	sp|Q0HZR6|MURG_SHESR	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B5BLC2|MURG_SALPK	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|Q5PDC8|MURG_SALPA	
+4.1e-39	0	1	138	Glyco_transf_28	3	142	sp|Q9K9T0|MURG_BACHD	
+5.2e-39	0	1	138	Glyco_transf_28	3	142	sp|Q8Y5M2|MURG_LISMO	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|A9MZL9|MURG_SALPB	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|B4TJ87|MURG_SALHS	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|B4TXH8|MURG_SALSV	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|B5F7W4|MURG_SALA4	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|Q8ZRU3|MURG_SALTY	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|B4SU50|MURG_SALNS	
+2.6e-38	0	1	138	Glyco_transf_28	8	145	sp|A1REZ6|MURG_SHESW	
+2.6e-38	0	1	138	Glyco_transf_28	8	145	sp|A4Y2N6|MURG_SHEPC	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|A6T4N3|MURG_KLEP7	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|B5RH64|MURG_SALG2	
+1.1e-38	0	2	138	Glyco_transf_28	9	145	sp|A8ALK6|MURG_CITK8	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|Q57TD0|MURG_SALCH	
+3.9e-38	0	1	138	Glyco_transf_28	8	145	sp|A6WID1|MURG_SHEB8	
+8	0	54	116	Glyco_transf_28	287	356	sp|A6WID1|MURG_SHEB8	
+3.9e-38	0	1	138	Glyco_transf_28	8	145	sp|A9KY29|MURG_SHEB9	
+8	0	54	116	Glyco_transf_28	287	356	sp|A9KY29|MURG_SHEB9	
+3.9e-38	0	1	138	Glyco_transf_28	8	145	sp|B8E698|MURG_SHEB2	
+8	0	54	116	Glyco_transf_28	287	356	sp|B8E698|MURG_SHEB2	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B5Y1U7|MURG_KLEP3	
+3.9e-38	0	1	138	Glyco_transf_28	8	145	sp|A3CZM1|MURG_SHEB5	
+8.1	0	54	116	Glyco_transf_28	287	356	sp|A3CZM1|MURG_SHEB5	
+1.6e-38	0	2	138	Glyco_transf_28	6	142	sp|Q7U336|MURG_HAEDU	
+8.7e-39	0	2	138	Glyco_transf_28	8	144	sp|B7VJ03|MURG_VIBSL	
+1.1e-38	0	2	138	Glyco_transf_28	8	144	sp|Q0I1D3|MURG_HAES1	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|B5FI72|MURG_SALDC	
+2.4e-38	0	1	138	Glyco_transf_28	3	142	sp|A2RJQ4|MURG_LACLM	
+2.4e-38	0	1	138	Glyco_transf_28	3	142	sp|Q02XY0|MURG_LACLS	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B7MNU9|MURG_ECO81	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B7NHJ6|MURG_ECO7I	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B7UIE0|MURG_ECO27	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|Q0TLP9|MURG_ECOL5	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|Q8FL64|MURG_ECOL6	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|A1A7D5|MURG_ECOK1	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B7MAL3|MURG_ECO45	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|Q1RGA5|MURG_ECOUT	
+2.2e-38	0	2	138	Glyco_transf_28	9	145	sp|Q6D0I3|MURG_ERWCT	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B5YZC6|MURG_ECO5E	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|Q8X9Y8|MURG_ECO57	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|A7ZHI1|MURG_ECO24	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B1LG27|MURG_ECOSM	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B6HZ67|MURG_ECOSE	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B7M133|MURG_ECO8A	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B7N7W3|MURG_ECOLU	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|Q326E5|MURG_SHIBS	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|Q3Z5R9|MURG_SHISS	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|Q32K02|MURG_SHIDS	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B2U295|MURG_SHIB3	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B1IR88|MURG_ECOLC	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B1XC67|MURG_ECODH	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|C4ZRI5|MURG_ECOBW	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|P17443|MURG_ECOLI	
+1.7e-38	0	2	138	Glyco_transf_28	9	145	sp|A7ZW42|MURG_ECOHS	
+6e-38	0	2	138	Glyco_transf_28	9	145	sp|A4TQ83|MURG_YERPP	
+5.3	0	38	116	Glyco_transf_28	266	350	sp|A4TQ83|MURG_YERPP	
+4.7e-38	0	1	138	Glyco_transf_28	3	142	sp|Q9CF92|MURG_LACLA	
+5.8e-38	0	2	138	Glyco_transf_28	9	145	sp|B5R2M4|MURG_SALEP	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|Q0T8A7|MURG_SHIF8	
+2.3e-38	0	2	138	Glyco_transf_28	9	145	sp|Q83MN4|MURG_SHIFL	
+1.2e-37	0	1	138	Glyco_transf_28	8	145	sp|Q8CX35|MURG_SHEON	
+2.6	0	54	117	Glyco_transf_28	285	357	sp|Q8CX35|MURG_SHEON	
+1.7e-38	0	1	138	Glyco_transf_28	3	142	sp|B8DBP8|MURG_LISMH	
+1.9e-38	0	1	138	Glyco_transf_28	3	142	sp|A0AKD5|MURG_LISW6	
+2.3e-38	0	1	138	Glyco_transf_28	3	142	sp|Q9ZBA5|MURG_STRCO	
+2.1e-38	0	1	138	Glyco_transf_28	3	142	sp|Q929Y2|MURG_LISIN	
+2.1e-38	0	2	137	Glyco_transf_28	6	141	sp|B8F3B6|MURG_HAEPS	
+2.5e-38	0	1	138	Glyco_transf_28	8	145	sp|Q0HE83|MURG_SHESM	
+2.2e-38	0	1	138	Glyco_transf_28	3	142	sp|C1KWY8|MURG_LISMC	
+2.2e-38	0	1	138	Glyco_transf_28	3	142	sp|Q71XX8|MURG_LISMF	
+2.3e-38	0	2	138	Glyco_transf_28	10	146	sp|A1S2F9|MURG_SHEAM	
+3.5e-38	0	2	137	Glyco_transf_28	7	142	sp|A5UCW8|MURG_HAEIE	
+1.9e-36	0	2	138	Glyco_transf_28	4	142	sp|Q03QH5|MURG_LACBA	
+1.6	0	63	130	Glyco_transf_28	295	355	sp|Q03QH5|MURG_LACBA	
+3.9e-38	0	2	138	Glyco_transf_28	8	144	sp|Q8DEL0|MURG_VIBVU	
+3.9e-38	0	2	138	Glyco_transf_28	8	144	sp|Q7MNV1|MURG_VIBVY	
+4.4e-38	0	1	138	Glyco_transf_28	5	142	sp|Q3IFY0|MURG_PSEHT	
+6.7e-38	0	2	138	Glyco_transf_28	9	145	sp|B7LFW0|MURG_ECO55	
+4.2e-38	0	1	138	Glyco_transf_28	10	147	sp|B1KKX7|MURG_SHEWM	
+7.4e-38	0	1	138	Glyco_transf_28	3	141	sp|Q49929|Y2348_MYCLE	
+1.7e-37	0	2	138	Glyco_transf_28	9	145	sp|Q7N147|MURG_PHOLL	
+1.4e-37	0	1	138	Glyco_transf_28	10	147	sp|A8H984|MURG_SHEPA	
+1e-37	0	1	138	Glyco_transf_28	3	142	sp|Q820F6|MURG_STRAW	
+3.4e-37	0	2	138	Glyco_transf_28	4	142	sp|Q1WTA0|MURG_LACS1	
+1.4e-37	0	1	137	Glyco_transf_28	3	141	sp|Q9X4H4|MURG_STRCU	
+1.3e-37	0	1	138	Glyco_transf_28	10	147	sp|Q12SC6|MURG_SHEDO	
+1.1e-37	0	2	138	Glyco_transf_28	9	145	sp|P57817|MURG_PASMU	
+1.9e-37	0	2	138	Glyco_transf_28	8	144	sp|Q87SG4|MURG_VIBPA	
+2.5e-37	0	1	138	Glyco_transf_28	10	147	sp|B0TQN7|MURG_SHEHH	
+3e-37	0	1	138	Glyco_transf_28	3	142	sp|C4L5U5|MURG_EXISA	
+2.1e-37	0	1	138	Glyco_transf_28	6	143	sp|A9M2H3|MURG_NEIM0	
+2e-37	0	2	138	Glyco_transf_28	8	144	sp|Q6LMF6|MURG_PHOPR	
+3.1e-37	0	2	138	Glyco_transf_28	9	145	sp|Q5E2Q0|MURG_VIBF1	
+2.8e-37	0	1	138	Glyco_transf_28	3	143	sp|P64865|Y1524_MYCTU	
+2.8e-37	0	1	138	Glyco_transf_28	3	143	sp|P64866|Y1551_MYCBO	
+3.1e-37	0	2	138	Glyco_transf_28	9	145	sp|B5FB35|MURG_VIBFM	
+4.4e-36	0	2	138	Glyco_transf_28	4	142	sp|B2GB78|MURG_LACF3	
+9	0	72	114	Glyco_transf_28	201	243	sp|B2GB78|MURG_LACF3	
+3.6e-37	0	2	138	Glyco_transf_28	9	145	sp|B6ELH5|MURG_ALISL	
+4.3e-37	0	2	138	Glyco_transf_28	4	140	sp|B8CWJ6|MURG_HALOH	
+4e-37	0	2	138	Glyco_transf_28	8	144	sp|A7MXR6|MURG_VIBHB	
+5.8e-36	0	2	138	Glyco_transf_28	4	142	sp|A5VJ33|MURG_LACRD	
+5.7	0	64	129	Glyco_transf_28	299	357	sp|A5VJ33|MURG_LACRD	
+5.8e-36	0	2	138	Glyco_transf_28	4	142	sp|B2G6K5|MURG_LACRJ	
+5.7	0	64	129	Glyco_transf_28	299	357	sp|B2G6K5|MURG_LACRJ	
+5.6e-37	0	1	138	Glyco_transf_28	4	143	sp|Q182Y6|MURG_CLOD6	
+6.3e-37	0	2	135	Glyco_transf_28	9	142	sp|Q2NVV1|MURG_SODGM	
+6.4e-37	0	1	138	Glyco_transf_28	11	148	sp|Q07WI5|MURG_SHEFN	
+5.3e-37	0	1	138	Glyco_transf_28	6	143	sp|A1KVL3|MURG_NEIMF	
+5.3e-37	0	1	138	Glyco_transf_28	6	143	sp|Q9K0Y2|MURG_NEIMB	
+9.9e-37	0	1	138	Glyco_transf_28	10	147	sp|B8CNL1|MURG_SHEPW	
+2.5e-36	0	2	138	Glyco_transf_28	6	142	sp|C4LA25|MURG_TOLAT	
+1.1e-36	0	1	138	Glyco_transf_28	10	147	sp|Q9F1N0|MURG_SHEVI	
+1.2e-36	0	2	138	Glyco_transf_28	9	145	sp|A5F5M9|MURG_VIBC3	
+1.7e-36	0	1	137	Glyco_transf_28	3	141	sp|Q03W35|MURG_LEUMM	
+7.9e-37	0	1	138	Glyco_transf_28	7	146	sp|A3Q1L8|MURG_MYCSJ	
+7.9e-37	0	1	138	Glyco_transf_28	7	146	sp|A1UI54|MURG_MYCSK	
+7.9e-37	0	1	138	Glyco_transf_28	7	146	sp|Q1B6X1|MURG_MYCSS	
+6.9e-37	0	2	138	Glyco_transf_28	9	145	sp|C3LQU6|MURG_VIBCM	
+6.9e-37	0	2	138	Glyco_transf_28	9	145	sp|Q9KPG7|MURG_VIBCH	
+1.4e-36	0	1	138	Glyco_transf_28	10	147	sp|A8FQA0|MURG_SHESH	
+2.9e-36	0	1	138	Glyco_transf_28	6	143	sp|B4RQC5|MURG_NEIG2	
+2.9e-36	0	1	138	Glyco_transf_28	6	143	sp|Q5F6L8|MURG_NEIG1	
+2.8e-36	0	1	138	Glyco_transf_28	3	142	sp|B1I4C4|MURG_DESAP	
+1.4e-36	0	1	134	Glyco_transf_28	4	137	sp|Q6A9Q2|MURG_PROAC	
+1.2e-35	0	2	138	Glyco_transf_28	4	142	sp|B3WDY2|MURG_LACCB	
+1.2e-35	0	2	138	Glyco_transf_28	4	142	sp|Q039R7|MURG_LACC3	
+1e-35	0	2	138	Glyco_transf_28	4	142	sp|A4J2B1|MURG_DESRM	
+4.1e-36	0	2	137	Glyco_transf_28	17	152	sp|Q47VQ9|MURG_COLP3	
+3.6e-36	0	1	135	Glyco_transf_28	3	139	sp|B2A2H2|MURG_NATTJ	
+4.2e-36	0	1	130	Glyco_transf_28	6	135	sp|Q6NGC8|MURG_CORDI	
+5.1e-36	0	1	138	Glyco_transf_28	5	142	sp|B4RWX9|MURG_ALTMD	
+6.5e-36	0	1	138	Glyco_transf_28	6	143	sp|Q9JSZ7|MURG_NEIMA	
+9.2e-35	0	1	130	Glyco_transf_28	8	137	sp|B0KFS6|MURG_PSEPG	
+7.8	0	34	55	Glyco_transf_28	209	258	sp|B0KFS6|MURG_PSEPG	
+8.9e-36	0	1	137	Glyco_transf_28	5	141	sp|A4XQS4|MURG_PSEMY	
+9e-36	0	1	137	Glyco_transf_28	5	141	sp|Q48EF8|MURG_PSE14	
+4.6e-36	0	2	138	Glyco_transf_28	4	142	sp|Q8R9G6|MURG_THETN	
+8.3e-35	0	1	130	Glyco_transf_28	8	137	sp|A5W8Q0|MURG_PSEP1	
+5.5e-35	0	1	134	Glyco_transf_28	8	141	sp|Q1I5B8|MURG_PSEE4	
+1.2e-35	0	1	137	Glyco_transf_28	5	141	sp|Q87WY5|MURG_PSESM	
+1e-35	0	1	138	Glyco_transf_28	4	141	sp|C3L230|MURG_CLOB6	
+1.2e-35	0	2	138	Glyco_transf_28	52	188	sp|A1WC06|MURG_ACISJ	
+1.2e-35	0	2	138	Glyco_transf_28	52	188	sp|B9MFR2|MURG_DIAST	
+6.3e-36	0	1	138	Glyco_transf_28	31	175	sp|B8ZQQ0|MURG_MYCLB	
+6.3e-36	0	1	138	Glyco_transf_28	31	175	sp|O69552|MURG_MYCLE	
+3.6e-35	0	1	138	Glyco_transf_28	5	142	sp|Q893R7|MURG_CLOTE	
+1.2e-35	0	1	138	Glyco_transf_28	4	141	sp|A7GGX9|MURG_CLOBL	
+1.2e-35	0	1	138	Glyco_transf_28	4	141	sp|B1IKH3|MURG_CLOBK	
+1.2e-35	0	1	138	Glyco_transf_28	4	141	sp|C1FUF9|MURG_CLOBJ	
+1.2e-35	0	1	138	Glyco_transf_28	4	141	sp|A5I5J5|MURG_CLOBH	
+1.2e-35	0	1	138	Glyco_transf_28	4	141	sp|A7FX11|MURG_CLOB1	
+1.3e-35	0	1	137	Glyco_transf_28	5	141	sp|Q4ZNZ0|MURG_PSEU2	
+7.7e-35	0	1	138	Glyco_transf_28	8	147	sp|A4XI04|MURG_CALS8	
+2e-35	0	1	138	Glyco_transf_28	17	161	sp|A0R016|MURG_MYCS2	
+3.5e-35	0	1	137	Glyco_transf_28	3	143	sp|A8YUN9|MURG_LACH4	
+9.9e-36	0	1	139	Glyco_transf_28	3	143	sp|A1SL80|MURG_NOCSJ	
+1.3e-34	0	1	130	Glyco_transf_28	8	137	sp|Q88N76|MURG_PSEPK	
+2.4e-35	0	1	138	Glyco_transf_28	4	141	sp|B1KYH7|MURG_CLOBM	
+2.7e-35	0	1	138	Glyco_transf_28	3	142	sp|Q24TE6|MURG_DESHY	
+3.1e-35	0	1	137	Glyco_transf_28	5	141	sp|Q3K744|MURG_PSEPF	
+3e-34	0	1	130	Glyco_transf_28	8	137	sp|B1J3L2|MURG_PSEPW	
+2e-34	0	2	138	Glyco_transf_28	4	142	sp|B0K3H0|MURG_THEPX	
+2e-34	0	2	138	Glyco_transf_28	4	142	sp|B0K8K7|MURG_THEP3	
+2.7e-34	0	1	138	Glyco_transf_28	3	142	sp|A3DE27|MURG_CLOTH	
+4.1e-35	0	1	138	Glyco_transf_28	32	175	sp|A1TAW8|MURG_MYCVP	
+1.3e-34	0	1	138	Glyco_transf_28	3	142	sp|B8FT56|MURG_DESHD	
+4.1e-35	0	1	137	Glyco_transf_28	4	141	sp|Q9RWP0|MURG_DEIRA	
+3.1e-34	0	1	135	Glyco_transf_28	12	146	sp|B2I1J5|MURG_ACIBC	
+3.1e-34	0	1	135	Glyco_transf_28	12	146	sp|B0V9F5|MURG_ACIBY	
+3.1e-34	0	1	135	Glyco_transf_28	12	146	sp|B7GV73|MURG_ACIB3	
+3.1e-34	0	1	135	Glyco_transf_28	12	146	sp|B7ICE5|MURG_ACIB5	
+4.4e-35	0	1	138	Glyco_transf_28	3	142	sp|A5D145|MURG_PELTS	
+3.1e-34	0	1	135	Glyco_transf_28	12	146	sp|A3M9Y1|MURG_ACIBT	
+1.1e-34	0	1	134	Glyco_transf_28	4	137	sp|A9KK83|MURG_CLOPH	
+1.3e-34	0	1	134	Glyco_transf_28	5	138	sp|C3KCT0|MURG_PSEFS	
+1.7e-34	0	2	138	Glyco_transf_28	4	142	sp|Q03EY2|MURG_PEDPA	
+2.2e-34	0	1	138	Glyco_transf_28	34	178	sp|A0QF52|MURG_MYCA1	
+3.7e-33	0	1	137	Glyco_transf_28	3	143	sp|Q04B72|MURG_LACDB	
+7.8	0	71	102	Glyco_transf_28	204	235	sp|Q04B72|MURG_LACDB	
+3.7e-33	0	1	137	Glyco_transf_28	3	143	sp|Q1GAT5|MURG_LACDA	
+7.8	0	71	102	Glyco_transf_28	204	235	sp|Q1GAT5|MURG_LACDA	
+1.6e-34	0	1	134	Glyco_transf_28	5	138	sp|Q4K6J3|MURG_PSEF5	
+1e-33	0	1	135	Glyco_transf_28	12	146	sp|B0VNZ9|MURG_ACIBS	
+8.8e-34	0	1	137	Glyco_transf_28	3	143	sp|Q5FKV2|MURG_LACAC	
+1.3e-33	0	2	138	Glyco_transf_28	6	142	sp|A0KPX2|MURG_AERHH	
+2.4e-34	0	1	132	Glyco_transf_28	6	137	sp|A1WYU3|MURG_HALHL	
+5.5e-34	0	1	138	Glyco_transf_28	34	178	sp|Q73YQ8|MURG_MYCPA	
+3.9e-34	0	1	137	Glyco_transf_28	3	141	sp|B1MXW0|MURG_LEUCK	
+6.1e-34	0	1	138	Glyco_transf_28	5	142	sp|Q604V7|MURG_METCA	
+4.2e-34	0	1	134	Glyco_transf_28	6	139	sp|B2V1X5|MURG_CLOBA	
+6e-34	0	1	137	Glyco_transf_28	9	145	sp|A1U3F8|MURG_MARAV	
+4.4e-33	0	1	138	Glyco_transf_28	3	142	sp|A8MH36|MURG_ALKOO	
+9.3e-34	0	1	136	Glyco_transf_28	6	141	sp|B2TLE0|MURG_CLOBB	
+2.7e-33	0	2	138	Glyco_transf_28	6	142	sp|A4SI56|MURG_AERS4	
+2.2e-33	0	1	137	Glyco_transf_28	4	140	sp|C4Z1B5|MURG_EUBE2	
+1.2e-33	0	1	136	Glyco_transf_28	5	140	sp|C1DQ99|MURG_AZOVD	
+3.2e-33	0	1	137	Glyco_transf_28	12	148	sp|Q6F703|MURG_ACIAD	
+9.4e-34	0	1	138	Glyco_transf_28	3	141	sp|B1YIT7|MURG_EXIS2	
+2.1e-33	0	1	137	Glyco_transf_28	4	141	sp|C1CW40|MURG_DEIDV	
+3.3e-33	0	1	132	Glyco_transf_28	3	136	sp|Q47QW9|MURG_THEFY	
+1.6e-33	0	1	138	Glyco_transf_28	6	143	sp|A0Q182|MURG_CLONN	
+9.4e-34	0	1	138	Glyco_transf_28	38	185	sp|A1KKJ6|MURG_MYCBP	
+9.4e-34	0	1	138	Glyco_transf_28	38	185	sp|C1AQ69|MURG_MYCBT	
+9.4e-34	0	1	138	Glyco_transf_28	38	185	sp|Q7VEP8|MURG_MYCBO	
+1.8e-33	0	1	138	Glyco_transf_28	3	142	sp|B0S0Z5|MURG_FINM2	
+8.7e-33	0	1	137	Glyco_transf_28	5	141	sp|B7UZJ0|MURG_PSEA8	
+8.7e-33	0	1	137	Glyco_transf_28	5	141	sp|Q02H28|MURG_PSEAB	
+8.7e-33	0	1	137	Glyco_transf_28	5	141	sp|Q9HW01|MURG_PSEAE	
+1.4e-33	0	1	138	Glyco_transf_28	22	166	sp|A0PTI7|MURG_MYCUA	
+8.7e-33	0	1	137	Glyco_transf_28	5	141	sp|A6VB85|MURG_PSEA7	
+2.6e-33	0	1	135	Glyco_transf_28	4	137	sp|A9KER3|MURG_COXBN	
+2.6e-33	0	1	135	Glyco_transf_28	4	137	sp|A9NA44|MURG_COXBR	
+2.6e-33	0	1	135	Glyco_transf_28	4	137	sp|B6J2Q3|MURG_COXB2	
+2.6e-33	0	1	135	Glyco_transf_28	4	137	sp|B6J5K3|MURG_COXB1	
+2.6e-33	0	1	135	Glyco_transf_28	4	137	sp|Q820X3|MURG_COXBU	
+5.2e-33	0	1	137	Glyco_transf_28	3	143	sp|Q042P9|MURG_LACGA	
+1.7e-33	0	1	138	Glyco_transf_28	22	166	sp|B2HGR6|MURG_MYCMM	
+4.8e-33	0	1	132	Glyco_transf_28	5	136	sp|Q0VS02|MURG_ALCBS	
+1.9e-33	0	1	133	Glyco_transf_28	5	139	sp|Q0RNP1|MURG_FRAAA	
+3.7e-33	0	1	131	Glyco_transf_28	3	135	sp|Q2RK79|MURG_MOOTA	
+2.2e-33	0	1	137	Glyco_transf_28	4	141	sp|Q1IXV9|MURG_DEIGD	
+9.8e-33	0	1	137	Glyco_transf_28	3	143	sp|Q74JY4|MURG_LACJO	
+6.9e-33	0	1	138	Glyco_transf_28	4	141	sp|A5MZ55|MURG_CLOK5	
+6.5e-33	0	2	138	Glyco_transf_28	8	144	sp|A1TKD1|MURG_ACIAC	
+7.6e-33	0	1	139	Glyco_transf_28	7	148	sp|B7J0L2|MURG_BORBZ	
+7.6e-33	0	1	139	Glyco_transf_28	7	148	sp|O51708|MURG_BORBU	
+7.4e-33	0	2	138	Glyco_transf_28	16	152	sp|Q15Q17|MURG_PSEA6	
+1e-32	0	2	138	Glyco_transf_28	743	878	sp|A7A179|ATG26_YEAS7	
+8.5e-33	0	1	137	Glyco_transf_28	4	142	sp|Q1D0T0|MURG_MYXXD	
+4.5e-33	0	1	138	Glyco_transf_28	9	146	sp|Q1QVG7|MURG_CHRSD	
+4.6e-33	0	1	132	Glyco_transf_28	5	136	sp|A4VIH8|MURG_PSEU5	
+1.5e-32	0	3	138	Glyco_transf_28	2	143	sp|Q38XM8|MURG_LACSS	
+1.5e-32	0	2	138	Glyco_transf_28	8	144	sp|A1SU19|MURG_PSYIN	
+1.3e-32	0	1	138	Glyco_transf_28	4	141	sp|Q31I59|MURG_THICR	
+1.5e-32	0	1	138	Glyco_transf_28	3	142	sp|Q04ET0|MURG_OENOB	
+6.1e-33	0	1	138	Glyco_transf_28	6	143	sp|Q2KVG0|MURG_BORA1	
+1.3e-32	0	1	138	Glyco_transf_28	4	142	sp|Q5R0M1|MURG_IDILO	
+1.8e-32	0	1	136	Glyco_transf_28	4	139	sp|Q5WAE4|MURG_BACSK	
+2.4e-32	0	1	131	Glyco_transf_28	5	137	sp|Q2JD50|MURG_FRASC	
+1.6e-32	0	1	138	Glyco_transf_28	5	142	sp|B5ELC3|MURG_ACIF5	
+1.6e-32	0	1	138	Glyco_transf_28	5	142	sp|B7J3V2|MURG_ACIF2	
+1.4e-32	0	1	139	Glyco_transf_28	7	148	sp|Q0SM88|MURG_BORAP	
+1.9e-32	0	1	138	Glyco_transf_28	6	143	sp|Q4FQV9|MURG_PSYA2	
+5.1e-32	0	1	138	Glyco_transf_28	4	141	sp|Q730T5|MURG2_BACC1	
+4.6e-32	0	2	138	Glyco_transf_28	7	143	sp|Q1LSW5|MURG_BAUCH	
+1.7e-32	0	1	139	Glyco_transf_28	4	146	sp|Q9WY74|MURG_THEMA	
+1.7e-32	0	1	139	Glyco_transf_28	4	146	sp|B1L9S1|MURG_THESQ	
+1.7e-32	0	1	139	Glyco_transf_28	4	146	sp|A5IKI9|MURG_THEP1	
+2.6e-32	0	1	138	Glyco_transf_28	22	160	sp|A4FLW0|MURG_SACEN	
+2.3e-32	0	2	138	Glyco_transf_28	8	142	sp|Q9RNM6|MURG_ZYMMO	
+3.5e-32	0	2	138	Glyco_transf_28	743	878	sp|Q06321|ATG26_YEAST	
+2.2e-32	0	1	138	Glyco_transf_28	15	152	sp|Q9PF81|MURG_XYLFA	
+1.4e-32	0	1	138	Glyco_transf_28	21	158	sp|Q5GW41|MURG_XANOR	
+2.5e-32	0	1	139	Glyco_transf_28	15	154	sp|B2S3B6|MURG_TREPS	
+2.5e-32	0	1	139	Glyco_transf_28	15	154	sp|O83535|MURG_TREPA	
+3e-32	0	3	138	Glyco_transf_28	2	137	sp|Q0AJE1|MURG_NITEC	
+1.8e-32	0	1	138	Glyco_transf_28	6	143	sp|B3PCM0|MURG_CELJU	
+3.6e-32	0	2	139	Glyco_transf_28	4	143	sp|A5G8K0|MURG_GEOUR	
+2.2e-32	0	1	138	Glyco_transf_28	38	185	sp|A5U4I0|MURG_MYCTA	
+2.2e-32	0	1	138	Glyco_transf_28	38	185	sp|O06224|MURG_MYCTU	
+2.3e-32	0	1	130	Glyco_transf_28	13	144	sp|Q4JW95|MURG_CORJK	
+5.8e-32	0	1	137	Glyco_transf_28	6	142	sp|Q97GY4|MURG_CLOAB	
+4.5e-32	0	1	137	Glyco_transf_28	8	142	sp|Q9Z702|MURG_CHLPN	
+5e-32	0	1	138	Glyco_transf_28	6	143	sp|Q1Q944|MURG_PSYCK	
+9.8e-32	0	1	137	Glyco_transf_28	10	145	sp|C0RE70|MURG_BRUMB	
+9.8e-32	0	1	137	Glyco_transf_28	10	145	sp|Q8YI66|MURG_BRUME	
+6.7e-32	0	1	138	Glyco_transf_28	22	159	sp|Q3BXF2|MURG_XANC5	
+9.8e-32	0	1	137	Glyco_transf_28	10	145	sp|B2S6Q4|MURG_BRUA1	
+9.8e-32	0	1	137	Glyco_transf_28	10	145	sp|Q2YLY5|MURG_BRUA2	
+9.8e-32	0	1	137	Glyco_transf_28	10	145	sp|Q57C78|MURG_BRUAB	
+7.2e-32	0	1	138	Glyco_transf_28	7	147	sp|Q660A8|MURG_BORGA	
+6.7e-32	0	1	137	Glyco_transf_28	3	141	sp|B8I6H3|MURG_CLOCE	
+9.8e-32	0	1	137	Glyco_transf_28	10	145	sp|A5VRH7|MURG_BRUO2	
+9.8e-32	0	1	137	Glyco_transf_28	10	145	sp|B0CHM0|MURG_BRUSI	
+7.1e-32	0	1	133	Glyco_transf_28	8	142	sp|A0JV94|MURG_ARTS2	
+7.2e-32	0	1	138	Glyco_transf_28	3	142	sp|A6TS61|MURG_ALKMQ	
+7.1e-32	0	1	137	Glyco_transf_28	5	142	sp|C5D4C2|MURG_GEOSW	
+9.8e-32	0	1	137	Glyco_transf_28	10	145	sp|A9M690|MURG_BRUC2	
+1.1e-31	0	1	138	Glyco_transf_28	21	158	sp|Q8PPA8|MURG_XANAC	
+9.8e-32	0	1	137	Glyco_transf_28	10	145	sp|Q8CY39|MURG_BRUSU	
+8.9e-32	0	2	138	Glyco_transf_28	8	144	sp|A1WRL1|MURG_VEREI	
+2.4e-31	0	1	138	Glyco_transf_28	4	141	sp|Q812T8|MURG2_BACCR	
+8.4e-32	0	1	138	Glyco_transf_28	15	152	sp|B0U4Z7|MURG_XYLFM	
+9.4e-32	0	1	137	Glyco_transf_28	5	142	sp|A4IJS4|MURG_GEOTN	
+5.8e-32	0	1	138	Glyco_transf_28	21	158	sp|Q2NZB8|MURG_XANOM	
+1.3e-31	0	1	137	Glyco_transf_28	6	144	sp|A5FIY3|MURG_FLAJ1	
+2.8e-31	0	2	139	Glyco_transf_28	9	146	sp|Q39JX0|MURG_BURS3	
+1.7e-31	0	1	138	Glyco_transf_28	10	155	sp|C1A0X5|MURG_RHOE4	
+3.3e-31	0	2	138	Glyco_transf_28	4	142	sp|Q748D6|MURG_GEOSL	
+2.4e-31	0	1	137	Glyco_transf_28	4	140	sp|Q820Y4|MURG_TROWT	
+2.4e-31	0	1	137	Glyco_transf_28	4	140	sp|Q83HK1|MURG_TROW8	
+2.3e-31	0	1	129	Glyco_transf_28	3	132	sp|A4QFM3|MURG_CORGB	
+3.1e-31	0	2	138	Glyco_transf_28	4	142	sp|Q39YL9|MURG_GEOMG	
+2.2e-31	0	1	139	Glyco_transf_28	7	148	sp|A1R0I9|MURG_BORT9	
+3.5e-31	0	2	137	Glyco_transf_28	4	141	sp|Q3AAE6|MURG_CARHZ	
+2.3e-31	0	1	129	Glyco_transf_28	3	132	sp|Q8NNN5|MURG_CORGL	
+3.5e-31	0	1	135	Glyco_transf_28	6	140	sp|Q0TNP7|MURG_CLOP1	
+3.5e-31	0	1	135	Glyco_transf_28	6	140	sp|Q8XIQ1|MURG_CLOPE	
+3.5e-31	0	1	135	Glyco_transf_28	6	140	sp|Q0SRB4|MURG_CLOPS	
+3.4e-31	0	1	138	Glyco_transf_28	17	162	sp|Q5YYX9|MURG_NOCFA	
+2.6e-31	0	2	138	Glyco_transf_28	4	142	sp|A7HH67|MURG_ANADF	
+4.7e-31	0	3	138	Glyco_transf_28	2	137	sp|Q82VS3|MURG_NITEU	
+2.4e-31	0	1	138	Glyco_transf_28	22	159	sp|B0RVA5|MURG_XANCB	
+5.2e-31	0	2	139	Glyco_transf_28	9	146	sp|Q2SZI3|MURG_BURTA	
+3.2e-31	0	1	137	Glyco_transf_28	6	141	sp|Q11GS5|MURG_MESSB	
+2.4e-31	0	1	138	Glyco_transf_28	22	159	sp|Q4UQX0|MURG_XANC8	
+2.4e-31	0	1	138	Glyco_transf_28	22	159	sp|Q8PCK0|MURG_XANCP	
+6e-31	0	2	139	Glyco_transf_28	9	146	sp|A3NZL5|MURG_BURP0	
+2.9e-31	0	1	137	Glyco_transf_28	6	141	sp|Q98KB3|MURG_RHILO	
+6.2e-31	0	1	138	Glyco_transf_28	5	142	sp|Q0A6K2|MURG_ALHEH	
+6.1e-31	0	1	137	Glyco_transf_28	5	141	sp|A5IGA6|MURG_LEGPC	
+4.7e-31	0	1	137	Glyco_transf_28	5	142	sp|Q5L3H6|MURG_GEOKA	
+5.2e-31	0	1	135	Glyco_transf_28	3	139	sp|A0LTM3|MURG_ACIC1	
+7.6e-31	0	2	137	Glyco_transf_28	4	141	sp|Q3A2G6|MURG_PELCD	
+9.8e-30	0	1	136	Glyco_transf_28	3	140	sp|Q0AYQ8|MURG_SYNWW	
+1.3e-30	0	2	138	Glyco_transf_28	7	143	sp|Q1LIM6|MURG_RALME	
+3.7e-30	0	1	137	Glyco_transf_28	6	141	sp|Q92NL9|MURG_RHIME	
+3.9e-30	0	1	135	Glyco_transf_28	2	134	sp|Q72JP9|MURG_THET2	
+5e-31	0	1	138	Glyco_transf_28	14	153	sp|A1R5F8|MURG_ARTAT	
+8.6e-31	0	1	138	Glyco_transf_28	12	149	sp|Q87AF9|MURG_XYLFT	
+8.8e-31	0	1	138	Glyco_transf_28	15	152	sp|B2I9B3|MURG_XYLF2	
+9.9e-31	0	1	137	Glyco_transf_28	6	141	sp|A6WZQ6|MURG_OCHA4	
+1.5e-30	0	2	139	Glyco_transf_28	9	146	sp|A1V0R8|MURG_BURMS	
+1.5e-30	0	2	139	Glyco_transf_28	9	146	sp|A2S5U5|MURG_BURM9	
+1.5e-30	0	2	139	Glyco_transf_28	9	146	sp|A3MR63|MURG_BURM7	
+1.5e-30	0	2	139	Glyco_transf_28	9	146	sp|Q62GS7|MURG_BURMA	
+1.5e-30	0	2	139	Glyco_transf_28	9	146	sp|Q63QJ7|MURG_BURPS	
+1.5e-30	0	2	139	Glyco_transf_28	9	146	sp|A3NDW4|MURG_BURP6	
+1.6e-30	0	1	132	Glyco_transf_28	5	136	sp|Q3J789|MURG_NITOC	
+1.1e-30	0	1	135	Glyco_transf_28	6	140	sp|Q8K9T4|MURG_BUCAP	
+1.4e-30	0	2	139	Glyco_transf_28	4	143	sp|B9M172|MURG_GEOSF	
+1.9e-30	0	2	139	Glyco_transf_28	4	143	sp|B5EBQ1|MURG_GEOBB	
+1.9e-30	0	2	139	Glyco_transf_28	9	146	sp|Q3JND8|MURG_BURP1	
+1.5e-30	0	2	137	Glyco_transf_28	4	140	sp|Q1IKH0|MURG_ACIBL	
+2.6e-30	0	2	138	Glyco_transf_28	8	141	sp|P74657|MURG_SYNY3	
+1.7e-30	0	2	139	Glyco_transf_28	9	146	sp|B1YSS4|MURG_BURA4	
+1.7e-30	0	2	139	Glyco_transf_28	9	146	sp|Q0BIK1|MURG_BURCM	
+3.9e-30	0	1	138	Glyco_transf_28	4	141	sp|Q6HDR3|MURG2_BACHK	
+3.9e-30	0	1	138	Glyco_transf_28	4	141	sp|Q81JE6|MURG2_BACAN	
+2.3e-30	0	2	138	Glyco_transf_28	8	144	sp|Q0K6M4|MURG_RALEH	
+2.6e-30	0	1	137	Glyco_transf_28	5	141	sp|Q5WY98|MURG_LEGPL	
+3.9e-30	0	1	138	Glyco_transf_28	4	141	sp|A0RIN0|MURG3_BACAH	
+2.9e-30	0	1	138	Glyco_transf_28	6	143	sp|Q7W4B4|MURG_BORPA	
+2.6e-30	0	1	137	Glyco_transf_28	5	141	sp|Q5X6U5|MURG_LEGPA	
+2.6e-30	0	1	137	Glyco_transf_28	5	141	sp|Q5ZXC4|MURG_LEGPH	
+2e-30	0	1	136	Glyco_transf_28	6	141	sp|A6M1F0|MURG_CLOB8	
+2e-30	0	1	135	Glyco_transf_28	6	140	sp|B8D7B9|MURG_BUCAT	
+2e-30	0	1	135	Glyco_transf_28	6	140	sp|P57311|MURG_BUCAI	
+3.6e-30	0	1	138	Glyco_transf_28	6	143	sp|Q7VUQ3|MURG_BORPE	
+3.6e-30	0	1	138	Glyco_transf_28	6	143	sp|Q7WFS2|MURG_BORBR	
+6.3e-30	0	2	139	Glyco_transf_28	10	147	sp|B2SYX6|MURG_BURPP	
+2.9e-30	0	1	137	Glyco_transf_28	7	141	sp|B0B8Y7|MURG_CHLT2	
+2.9e-30	0	1	137	Glyco_transf_28	7	141	sp|B0BAL6|MURG_CHLTB	
+2.6e-30	0	1	135	Glyco_transf_28	6	140	sp|B8D914|MURG_BUCA5	
+4.2e-30	0	1	138	Glyco_transf_28	5	142	sp|Q47AA4|MURG_DECAR	
+4.1e-30	0	2	139	Glyco_transf_28	9	146	sp|A4JB94|MURG_BURVG	
+4e-30	0	1	138	Glyco_transf_28	5	142	sp|Q2Y638|MURG_NITMU	
+4.6e-30	0	2	139	Glyco_transf_28	10	147	sp|B2JHG0|MURG_BURP8	
+4.6e-30	0	1	137	Glyco_transf_28	7	141	sp|O84766|MURG_CHLTR	
+4.6e-30	0	1	137	Glyco_transf_28	7	141	sp|Q3KKT1|MURG_CHLTA	
+6.2e-30	0	2	138	Glyco_transf_28	4	142	sp|A1AU61|MURG_PELPD	
+6.3e-30	0	1	138	Glyco_transf_28	5	144	sp|Q2LR48|MURG_SYNAS	
+5.6e-30	0	2	138	Glyco_transf_28	9	143	sp|Q2G995|MURG_NOVAD	
+7.5e-30	0	2	138	Glyco_transf_28	9	145	sp|A5EY03|MURG_DICNV	
+3.6e-30	0	1	130	Glyco_transf_28	10	140	sp|Q8FNU0|MURG_COREF	
+8.1e-30	0	2	139	Glyco_transf_28	9	146	sp|A9AI96|MURG_BURM1	
+6.9e-30	0	2	138	Glyco_transf_28	36	177	sp|Q21SW9|MURG_RHOFD	
+8.8e-30	0	1	138	Glyco_transf_28	3	142	sp|B5YFT4|MURG_THEYD	
+1.2e-29	0	1	138	Glyco_transf_28	790	924	sp|A7KAK6|ATG26_PICAN	
+1.2e-29	0	2	138	Glyco_transf_28	8	144	sp|Q46WZ4|MURG_RALEJ	
+2e-29	0	2	139	Glyco_transf_28	10	147	sp|Q13TZ2|MURG_BURXL	
+1.9e-29	0	2	139	Glyco_transf_28	4	143	sp|C6DZK6|MURG_GEOSM	
+1.4e-29	0	1	138	Glyco_transf_28	4	135	sp|A8GVJ7|MURG_RICB8	
+1.4e-29	0	1	138	Glyco_transf_28	4	135	sp|Q1RI55|MURG_RICBR	
+9.1e-29	0	1	137	Glyco_transf_28	6	141	sp|B5ZWJ4|MURG_RHILW	
+1.8e-29	0	2	138	Glyco_transf_28	9	142	sp|B0JFZ1|MURG_MICAN	
+2.3e-29	0	2	138	Glyco_transf_28	9	141	sp|Q31KS7|MURG_SYNE7	
+2.4e-29	0	2	138	Glyco_transf_28	15	147	sp|Q5N140|MURG_SYNP6	
+2.9e-29	0	1	137	Glyco_transf_28	8	143	sp|Q14I26|MURG_FRAT1	
+2.9e-29	0	1	137	Glyco_transf_28	8	143	sp|Q5NGM4|MURG_FRATT	
+2.6e-29	0	1	138	Glyco_transf_28	7	144	sp|Q493Q1|MURG_BLOPB	
+1.9e-29	0	1	138	Glyco_transf_28	4	135	sp|Q92I58|MURG_RICCN	
+1.9e-29	0	1	138	Glyco_transf_28	4	135	sp|C3PND5|MURG_RICAE	
+1.9e-29	0	1	138	Glyco_transf_28	4	135	sp|C4K2A6|MURG_RICPU	
+1.8e-29	0	1	139	Glyco_transf_28	7	148	sp|B2S1A8|MURG_BORHD	
+1.9e-29	0	1	138	Glyco_transf_28	4	135	sp|A8GRZ6|MURG_RICRS	
+1.9e-29	0	1	138	Glyco_transf_28	4	135	sp|B0BXF6|MURG_RICRO	
+2.7e-29	0	2	138	Glyco_transf_28	9	145	sp|Q3SMH3|MURG_THIDA	
+3.1e-29	0	1	138	Glyco_transf_28	32	175	sp|Q21MG9|MURG_SACD2	
+1.2e-28	0	1	138	Glyco_transf_28	4	143	sp|B1IAM4|MURG_STRPI	
+1.2e-28	0	1	138	Glyco_transf_28	4	143	sp|Q04LK0|MURG_STRP2	
+1.2e-28	0	1	138	Glyco_transf_28	4	143	sp|Q8DQM1|MURG_STRR6	
+1.2e-28	0	1	138	Glyco_transf_28	4	143	sp|B2IN77|MURG_STRPS	
+1.2e-28	0	1	138	Glyco_transf_28	4	143	sp|C1CQG5|MURG_STRZT	
+1.2e-28	0	1	138	Glyco_transf_28	4	143	sp|C1CD52|MURG_STRZJ	
+4.3e-29	0	1	138	Glyco_transf_28	4	141	sp|Q634T3|MURG2_BACCZ	
+3.1e-29	0	2	138	Glyco_transf_28	8	149	sp|A1VST6|MURG_POLNA	
+6.1e-29	0	1	136	Glyco_transf_28	6	140	sp|A6UB85|MURG_SINMW	
+9.8e-29	0	1	138	Glyco_transf_28	4	143	sp|B9DNZ7|MURG_STACT	
+4.6e-29	0	2	139	Glyco_transf_28	9	146	sp|B4E6J2|MURG_BURCJ	
+4.6e-29	0	2	139	Glyco_transf_28	9	146	sp|B1JV78|MURG_BURCC	
+1.2e-28	0	1	138	Glyco_transf_28	4	143	sp|C1C649|MURG_STRP7	
+5.3e-29	0	1	135	Glyco_transf_28	6	140	sp|Q2S9Z2|MURG_HAHCH	
+1.3e-28	0	1	138	Glyco_transf_28	4	143	sp|B5E2Z9|MURG_STRP4	
+1.3e-28	0	1	138	Glyco_transf_28	4	143	sp|C1CJF3|MURG_STRZP	
+4.4e-29	0	1	138	Glyco_transf_28	6	143	sp|A9I4V2|MURG_BORPD	
+2.3e-29	0	2	137	Glyco_transf_28	5	142	sp|B0RIJ3|MURG_CLAMS	
+1.9e-28	0	1	138	Glyco_transf_28	4	143	sp|P0CB60|MURG_STRPN	
+1.9e-28	0	1	138	Glyco_transf_28	4	143	sp|B8ZMZ7|MURG_STRPJ	
+2e-28	0	1	137	Glyco_transf_28	6	141	sp|B3PTW0|MURG_RHIE6	
+5.8e-29	0	1	138	Glyco_transf_28	10	155	sp|Q0SHS1|MURG_RHOSR	
+5.4e-29	0	1	139	Glyco_transf_28	4	143	sp|Q313Q3|MURG_DESDG	
+5.4e-29	0	1	138	Glyco_transf_28	4	135	sp|A8F1I4|MURG_RICM5	
+4.5e-29	0	1	138	Glyco_transf_28	6	145	sp|A6H195|MURG_FLAPJ	
+4.6e-29	0	2	139	Glyco_transf_28	9	146	sp|A0K486|MURG_BURCH	
+4.6e-29	0	2	139	Glyco_transf_28	9	146	sp|Q1BZG3|MURG_BURCA	
+6e-29	0	2	138	Glyco_transf_28	35	176	sp|Q12EL5|MURG_POLSJ	
+7.9e-29	0	1	137	Glyco_transf_28	6	141	sp|Q8UDM8|MURG_AGRT5	
+6.1e-29	0	2	138	Glyco_transf_28	5	138	sp|B7K5Z6|MURG_CYAP8	
+1.4e-28	0	2	137	Glyco_transf_28	9	142	sp|Q2NCZ0|MURG_ERYLH	
+1.3e-28	0	1	138	Glyco_transf_28	763	897	sp|Q9Y751|ATG26_PICPG	
+7.5e-29	0	2	138	Glyco_transf_28	5	141	sp|Q5P6Z6|MURG_AZOSE	
+7.6e-29	0	1	137	Glyco_transf_28	6	140	sp|B6IRG2|MURG_RHOCS	
+7e-29	0	2	138	Glyco_transf_28	760	895	sp|A7TF84|ATG26_VANPO	
+3.1e-28	0	1	138	Glyco_transf_28	8	147	sp|Q2S528|MURG_SALRD	
+1.2e-28	0	1	137	Glyco_transf_28	8	143	sp|B2SGS8|MURG_FRATM	
+1.2e-28	0	1	137	Glyco_transf_28	8	143	sp|A4IX64|MURG_FRATW	
+1.1e-28	0	2	139	Glyco_transf_28	4	143	sp|Q67Q48|MURG_SYMTH	
+1.2e-28	0	1	138	Glyco_transf_28	997	1131	sp|Q6C8M8|ATG26_YARLI	
+1.2e-28	0	1	138	Glyco_transf_28	10	155	sp|C1AU55|MURG_RHOOB	
+1.2e-28	0	2	139	Glyco_transf_28	4	143	sp|B3E3Y2|MURG_GEOLS	
+1.4e-28	0	1	137	Glyco_transf_28	8	143	sp|A0Q766|MURG_FRATN	
+8.7e-29	0	2	138	Glyco_transf_28	5	138	sp|B1WVP7|MURG_CYAA5	
+1.2e-28	0	1	137	Glyco_transf_28	8	143	sp|B0TY93|MURG_FRAP2	
+1.5e-28	0	1	138	Glyco_transf_28	4	135	sp|Q68WW7|MURG_RICTY	
+1.3e-28	0	1	138	Glyco_transf_28	4	143	sp|Q6GGZ0|MURG_STAAR	
+2.4e-28	0	1	136	Glyco_transf_28	6	140	sp|B9JH51|MURG_AGRRK	
+2.1e-28	0	1	138	Glyco_transf_28	1050	1184	sp|Q6BN88|ATG26_DEBHA	
+2.8e-28	0	1	137	Glyco_transf_28	8	143	sp|A7NDC0|MURG_FRATF	
+2.8e-28	0	1	137	Glyco_transf_28	8	143	sp|Q0BL37|MURG_FRATO	
+2.8e-28	0	1	137	Glyco_transf_28	8	143	sp|Q2A2I7|MURG_FRATH	
+1.2e-28	0	2	137	Glyco_transf_28	5	142	sp|A5CS51|MURG_CLAM3	
+2e-28	0	1	138	Glyco_transf_28	4	135	sp|Q9ZDC0|MURG_RICPR	
+2.2e-28	0	1	138	Glyco_transf_28	3	142	sp|Q9ZK59|MURG_HELPJ	
+2.5e-28	0	2	138	Glyco_transf_28	9	142	sp|B7KGH1|MURG_CYAP7	
+2.4e-28	0	1	138	Glyco_transf_28	4	143	sp|Q4L6C8|MURG_STAHJ	
+1.6e-28	0	2	137	Glyco_transf_28	4	141	sp|B4UES1|MURG_ANASK	
+2.4e-28	0	1	137	Glyco_transf_28	6	141	sp|B9JY54|MURG_AGRVS	
+7.8e-28	0	1	136	Glyco_transf_28	6	140	sp|Q1ME33|MURG_RHIL3	
+4.5e-28	0	1	138	Glyco_transf_28	4	135	sp|A8EZ14|MURG_RICCK	
+6.7e-28	0	1	138	Glyco_transf_28	1017	1151	sp|Q5A950|ATG26_CANAL	
+2.9e-28	0	2	137	Glyco_transf_28	4	141	sp|Q2IG27|MURG_ANADE	
+3.6e-28	0	2	137	Glyco_transf_28	4	141	sp|B8J8E8|MURG_ANAD2	
+9.3e-28	0	1	136	Glyco_transf_28	6	140	sp|C3MEM9|MURG_RHISN	
+7.3e-28	0	1	138	Glyco_transf_28	3	142	sp|Q1CSB1|MURG_HELPH	
+7.9e-28	0	1	134	Glyco_transf_28	4	137	sp|P59424|MURG_BUCBP	
+2.4e-27	0	1	137	Glyco_transf_28	6	141	sp|Q2K6C1|MURG_RHIEC	
+7.3e-28	0	1	138	Glyco_transf_28	3	142	sp|O25770|MURG_HELPY	
+1e-27	0	1	135	Glyco_transf_28	7	143	sp|A0M527|MURG_GRAFK	
+7.3e-28	0	1	138	Glyco_transf_28	3	142	sp|B2UUR4|MURG_HELPS	
+8e-28	0	1	138	Glyco_transf_28	5	144	sp|Q3K2P3|MURG_STRA1	
+8e-28	0	1	138	Glyco_transf_28	5	144	sp|Q8CX15|MURG_STRA5	
+8e-28	0	1	138	Glyco_transf_28	5	144	sp|Q8E6P0|MURG_STRA3	
+8.6e-28	0	1	138	Glyco_transf_28	8	146	sp|Q7U346|MURG_BLOFL	
+8.5e-28	0	2	138	Glyco_transf_28	5	143	sp|Q5HPC0|MURG_STAEQ	
+8.5e-28	0	2	138	Glyco_transf_28	5	143	sp|Q8CMM3|MURG_STAES	
+1e-27	0	1	138	Glyco_transf_28	14	149	sp|Q01Q48|MURG_SOLUE	
+8.8e-28	0	1	138	Glyco_transf_28	3	142	sp|B5Z8F1|MURG_HELPG	
+1e-27	0	1	138	Glyco_transf_28	8	144	sp|Q5L524|MURG_CHLAB	
+1e-27	0	1	138	Glyco_transf_28	7	143	sp|Q255W4|MURG_CHLFF	
+1.2e-27	0	1	138	Glyco_transf_28	8	144	sp|Q820E0|MURG_CHLCV	
+6.1e-28	0	2	138	Glyco_transf_28	14	150	sp|Q8XVI7|MURG_RALSO	
+1.2e-27	0	1	138	Glyco_transf_28	4	135	sp|Q4ULT6|MURG_RICFE	
+1.2e-27	0	1	138	Glyco_transf_28	4	143	sp|Q49XM9|MURG_STAS1	
+1.2e-27	0	2	138	Glyco_transf_28	29	162	sp|Q119X8|MURG_TRIEI	
+2.3e-27	0	1	138	Glyco_transf_28	7	146	sp|Q03L97|MURG_STRTD	
+1.3e-27	0	2	138	Glyco_transf_28	9	147	sp|A0L5N1|MURG_MAGSM	
+7.5e-28	0	2	138	Glyco_transf_28	6	141	sp|B8H091|MURG_CAUCN	
+7.5e-28	0	2	138	Glyco_transf_28	6	141	sp|Q9A5A1|MURG_CAUCR	
+1.4e-27	0	1	138	Glyco_transf_28	4	135	sp|A8GNC7|MURG_RICAH	
+2.6e-27	0	1	138	Glyco_transf_28	5	144	sp|B5XMA2|MURG_STRPZ	
+1.4e-27	0	1	138	Glyco_transf_28	3	142	sp|B6JMZ5|MURG_HELP2	
+1.8e-27	0	4	138	Glyco_transf_28	945	1076	sp|A7ERM5|ATG26_SCLS1	
+2.1e-27	0	2	137	Glyco_transf_28	5	137	sp|Q7V466|MURG_PROMM	
+2e-27	0	2	137	Glyco_transf_28	5	137	sp|A2CDG1|MURG_PROM3	
+3.6e-27	0	1	138	Glyco_transf_28	7	146	sp|Q5M0D4|MURG_STRT1	
+3.6e-27	0	1	138	Glyco_transf_28	7	146	sp|Q5M4Y1|MURG_STRT2	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|A6QGX0|MURG_STAAE	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|Q2FYL5|MURG_STAA8	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|Q5HG02|MURG_STAAC	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|Q6G9E3|MURG_STAAS	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|Q8NWR4|MURG_STAAW	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|A5ISU9|MURG_STAA9	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|A6U1N8|MURG_STAA2	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|A7X2A2|MURG_STAA1	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|P65481|MURG_STAAM	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|P65482|MURG_STAAN	
+1.9e-27	0	1	138	Glyco_transf_28	4	143	sp|Q2YY01|MURG_STAAB	
+3.7e-27	0	1	137	Glyco_transf_28	12	150	sp|Q7MAW5|MURG_PORGI	
+3.8e-27	0	1	138	Glyco_transf_28	5	144	sp|A2RDL0|MURG_STRPG	
+3.8e-27	0	1	138	Glyco_transf_28	5	144	sp|Q5XB05|MURG_STRP6	
+4.4e-27	0	1	138	Glyco_transf_28	5	144	sp|Q1JAT5|MURG_STRPB	
+4.4e-27	0	1	138	Glyco_transf_28	5	144	sp|Q1JKY5|MURG_STRPC	
+3.7e-27	0	1	137	Glyco_transf_28	12	150	sp|B2RIF1|MURG_PORG3	
+4.2e-27	0	1	138	Glyco_transf_28	5	144	sp|C0M6J2|MURG_STRE4	
+4.9e-27	0	1	138	Glyco_transf_28	7	143	sp|A1UTC5|MURG_BARBK	
+5.3e-27	0	1	138	Glyco_transf_28	5	144	sp|C0MD54|MURG_STRS7	
+5.8e-27	0	1	138	Glyco_transf_28	5	144	sp|B4U1U4|MURG_STREM	
+4.7e-27	0	1	137	Glyco_transf_28	8	144	sp|A5CWW1|MURG_VESOH	
+7.3e-27	0	1	135	Glyco_transf_28	7	143	sp|A1A2E9|MURG_BIFAA	
+9e-27	0	1	138	Glyco_transf_28	5	144	sp|P65483|MURG_STRP1	
+9e-27	0	1	138	Glyco_transf_28	5	144	sp|P65484|MURG_STRP8	
+9e-27	0	1	138	Glyco_transf_28	5	144	sp|Q48SK9|MURG_STRPM	
+9e-27	0	1	138	Glyco_transf_28	5	144	sp|Q1J5S6|MURG_STRPF	
+5.4e-27	0	1	138	Glyco_transf_28	4	143	sp|A8Z3Z7|MURG_STAAT	
+5.4e-27	0	1	138	Glyco_transf_28	4	143	sp|Q2FH20|MURG_STAA3	
+9e-27	0	1	138	Glyco_transf_28	5	144	sp|Q1JG11|MURG_STRPD	
+7.1e-27	0	1	138	Glyco_transf_28	3	142	sp|Q17WB5|MURG_HELAH	
+6e-27	0	1	138	Glyco_transf_28	4	141	sp|C6BYG6|MURG_DESAD	
+1e-26	0	1	136	Glyco_transf_28	7	141	sp|Q6G2Q5|MURG_BARHE	
+9.9e-27	0	1	135	Glyco_transf_28	7	140	sp|A9IWA5|MURG_BART1	
+1e-26	0	1	137	Glyco_transf_28	7	144	sp|Q8CUL4|MURG_OCEIH	
+1e-26	0	1	137	Glyco_transf_28	6	144	sp|A6LEU3|MURG_PARD8	
+5.6e-27	0	2	133	Glyco_transf_28	5	138	sp|Q6AE64|MURG_LEIXX	
+1.2e-26	0	2	138	Glyco_transf_28	5	141	sp|A1K3U6|MURG_AZOSB	
+1.1e-26	0	1	137	Glyco_transf_28	8	142	sp|Q9PLG2|MURG_CHLMU	
+1.6e-26	0	1	138	Glyco_transf_28	7	142	sp|Q1GRX9|MURG_SPHAL	
+1.6e-26	0	3	138	Glyco_transf_28	781	913	sp|Q751Z4|ATG26_ASHGO	
+2.4e-26	0	1	138	Glyco_transf_28	4	143	sp|A4VTK4|MURG_STRSY	
+2.4e-26	0	1	138	Glyco_transf_28	4	143	sp|A4VZT9|MURG_STRS2	
+1.6e-26	0	2	138	Glyco_transf_28	4	146	sp|B3QWT7|MURG_CHLT3	
+1.4e-26	0	1	137	Glyco_transf_28	9	147	sp|Q6AJ53|MURG_DESPS	
+1.7e-26	0	1	139	Glyco_transf_28	4	146	sp|B9K6P7|MURG_THENN	
+3.3e-26	0	1	138	Glyco_transf_28	5	144	sp|Q8K6R7|MURG_STRP3	
+2.2e-26	0	1	138	Glyco_transf_28	1166	1303	sp|Q54IL5|UGT52_DICDI	
+3.3e-26	0	1	135	Glyco_transf_28	8	144	sp|B3DQN1|MURG_BIFLD	
+3.3e-26	0	1	135	Glyco_transf_28	8	144	sp|Q8CY50|MURG_BIFLO	
+3.3e-26	0	1	137	Glyco_transf_28	7	145	sp|Q6MIG1|MURG_BDEBA	
+2.7e-26	0	2	137	Glyco_transf_28	5	137	sp|Q7U3U6|MURG_SYNPX	
+4e-26	0	1	135	Glyco_transf_28	8	144	sp|B7GQ78|MURG_BIFLI	
+6.8e-26	0	2	138	Glyco_transf_28	956	1089	sp|Q0UY53|ATG26_PHANO	
+6.4e-26	0	1	138	Glyco_transf_28	6	145	sp|Q8DVE2|MURG_STRMU	
+2.3e-26	0	1	138	Glyco_transf_28	7	143	sp|Q6N411|MURG_RHOPA	
+5.6e-26	0	2	138	Glyco_transf_28	739	872	sp|Q6CUV2|ATG26_KLULA	
+3.6e-26	0	1	138	Glyco_transf_28	5	140	sp|Q1MPB9|MURG_LAWIP	
+3.5e-25	0	1	135	Glyco_transf_28	7	135	sp|Q8R5N5|MURG_FUSNN	
+6.7e-26	0	1	139	Glyco_transf_28	3	147	sp|Q3ANV3|MURG_CHLCH	
+1.2e-25	0	1	138	Glyco_transf_28	4	143	sp|A8AW15|MURG_STRGC	
+1.1e-25	0	1	138	Glyco_transf_28	4	142	sp|B8DP79|MURG_DESVM	
+8.2e-26	0	1	138	Glyco_transf_28	4	142	sp|Q728U8|MURG_DESVH	
+1e-25	0	2	138	Glyco_transf_28	960	1093	sp|Q8NJS1|ATG26_LEPMC	
+1.1e-25	0	4	138	Glyco_transf_28	1039	1170	sp|Q5KK25|ATG26_CRYNE	
+1.8e-25	0	2	135	Glyco_transf_28	9	139	sp|Q8YZI3|MURG_ANASP	
+1.8e-25	0	1	138	Glyco_transf_28	5	144	sp|B9DUV6|MURG_STRU0	
+1.4e-25	0	2	135	Glyco_transf_28	9	139	sp|Q3M935|MURG_ANAVT	
+1.4e-25	0	2	138	Glyco_transf_28	5	138	sp|Q7VDZ2|MURG_PROMA	
+1.4e-25	0	2	139	Glyco_transf_28	5	139	sp|Q0I6M0|MURG_SYNS3	
+1.7e-25	0	2	137	Glyco_transf_28	9	141	sp|B2J8J9|MURG_NOSP7	
+7.5e-26	0	2	138	Glyco_transf_28	5	138	sp|A5GPC2|MURG_SYNPW	
+8e-26	0	2	137	Glyco_transf_28	6	140	sp|B4RFS0|MURG_PHEZH	
+1.8e-25	0	1	138	Glyco_transf_28	4	142	sp|A1VBE8|MURG_DESVV	
+1.8e-25	0	1	139	Glyco_transf_28	4	144	sp|B7IHN7|MURG_THEAB	
+2.3e-25	0	4	138	Glyco_transf_28	1016	1147	sp|Q7S1I0|ATG26_NEUCR	
+2.1e-25	0	2	138	Glyco_transf_28	5	138	sp|Q3AVX2|MURG_SYNS9	
+2.7e-25	0	4	138	Glyco_transf_28	907	1038	sp|Q4WID6|ATG26_ASPFU	
+2.7e-25	0	4	138	Glyco_transf_28	916	1047	sp|A1CYS1|ATG26_NEOFI	
+3e-25	0	2	138	Glyco_transf_28	8	141	sp|Q8DHY4|MURG_THEEB	
+4.2e-25	0	1	137	Glyco_transf_28	9	147	sp|Q11RH5|MURG_CYTH3	
+2.9e-25	0	2	138	Glyco_transf_28	5	138	sp|A9BDG0|MURG_PROM4	
+6.4e-25	0	1	139	Glyco_transf_28	4	151	sp|Q73L91|MURG_TREDE	
+1.7e-25	0	2	138	Glyco_transf_28	5	141	sp|C4XK69|MURG_DESMR	
+4.1e-25	0	1	138	Glyco_transf_28	7	144	sp|A1BAL5|MURG_PARDP	
+7.3e-25	0	1	138	Glyco_transf_28	4	143	sp|A3CLN6|MURG_STRSV	
+4.4e-25	0	1	136	Glyco_transf_28	6	141	sp|A4SV74|MURG_POLSQ	
+4.6e-25	0	1	139	Glyco_transf_28	2	137	sp|O67238|MURG_AQUAE	
+5e-25	0	4	138	Glyco_transf_28	897	1028	sp|Q2U0C3|ATG26_ASPOR	
+7.8e-25	0	1	138	Glyco_transf_28	7	143	sp|Q3STS8|MURG_NITWN	
+5.7e-25	0	1	138	Glyco_transf_28	3	146	sp|A1BJX8|MURG_CHLPD	
+6.4e-25	0	1	137	Glyco_transf_28	5	141	sp|A1AWE8|MURG_RUTMC	
+5.7e-25	0	4	138	Glyco_transf_28	913	1044	sp|A1CFB3|ATG26_ASPCL	
+8.9e-25	0	1	135	Glyco_transf_28	8	141	sp|B8IN64|MURG_METNO	
+9e-25	0	1	135	Glyco_transf_28	7	140	sp|Q6G124|MURG_BARQU	
+8.8e-25	0	1	138	Glyco_transf_28	8	144	sp|Q2W0H3|MURG_MAGSA	
+9.4e-25	0	4	138	Glyco_transf_28	903	1034	sp|Q0CKU4|ATG26_ASPTN	
+1e-24	0	1	138	Glyco_transf_28	4	141	sp|B1ZU31|MURG_OPITP	
+1e-24	0	1	136	Glyco_transf_28	7	144	sp|A6L071|MURG_BACV8	
+1.2e-24	0	1	138	Glyco_transf_28	7	143	sp|Q1QNU3|MURG_NITHX	
+1.8e-24	0	1	139	Glyco_transf_28	4	141	sp|B2V7Y8|MURG_SULSY	
+1.9e-24	0	2	138	Glyco_transf_28	5	138	sp|Q3AGT7|MURG_SYNSC	
+1.8e-24	0	4	138	Glyco_transf_28	901	1032	sp|Q5B4C9|ATG26_EMENI	
+2.5e-24	0	2	138	Glyco_transf_28	5	138	sp|A5GW69|MURG_SYNR3	
+1.3e-24	0	1	138	Glyco_transf_28	8	144	sp|A4YZK3|MURG_BRASO	
+1.3e-24	0	1	136	Glyco_transf_28	19	153	sp|Q2RVU4|MURG_RHORT	
+3.1e-24	0	2	138	Glyco_transf_28	15	147	sp|Q2JW21|MURG_SYNJA	
+1.4e-24	0	1	138	Glyco_transf_28	8	144	sp|A5EPK4|MURG_BRASB	
+3.1e-24	0	4	138	Glyco_transf_28	889	1020	sp|A7KAN4|ATG26_PENCW	
+4.7e-24	0	2	136	Glyco_transf_28	15	145	sp|Q2JJR4|MURG_SYNJB	
+3.9e-24	0	4	138	Glyco_transf_28	902	1033	sp|A2QNQ5|ATG26_ASPNC	
+4.6e-24	0	1	134	Glyco_transf_28	6	138	sp|Q0AMW7|MURG_MARMM	
+9.2e-24	0	1	135	Glyco_transf_28	5	137	sp|Q812Y1|MURG3_BACCR	
+7.1e-24	0	1	138	Glyco_transf_28	3	146	sp|B4SH49|MURG_PELPB	
+7.7e-24	0	1	138	Glyco_transf_28	3	146	sp|B4S6Q9|MURG_PROA2	
+7.8e-24	0	2	135	Glyco_transf_28	8	137	sp|A8G2K3|MURG_PROM2	
+1e-23	0	1	137	Glyco_transf_28	7	142	sp|Q89FU7|MURG_BRAJA	
+1.5e-23	0	1	130	Glyco_transf_28	5	132	sp|A0RHC3|MURG1_BACAH	
+1.5e-23	0	1	135	Glyco_transf_28	5	140	sp|Q6MBS7|MURG_PARUW	
+1.7e-23	0	1	138	Glyco_transf_28	10	146	sp|Q0BXU2|MURG_HYPNA	
+1.3e-23	0	1	138	Glyco_transf_28	3	146	sp|Q8KGD4|MURG_CHLTE	
+1.4e-23	0	1	138	Glyco_transf_28	3	146	sp|B3QLW4|MURG_CHLP8	
+2e-23	0	2	138	Glyco_transf_28	5	141	sp|A6T2F8|MURG_JANMA	
+2.4e-23	0	1	138	Glyco_transf_28	4	140	sp|A5CEL6|MURG_ORITB	
+2.2e-23	0	1	133	Glyco_transf_28	8	140	sp|Q8D2Z6|MURG_WIGBR	
+4.2e-23	0	1	134	Glyco_transf_28	8	140	sp|B0UFC7|MURG_METS4	
+3.9e-23	0	2	137	Glyco_transf_28	2	137	sp|Q163J0|MURG_ROSDO	
+6.9e-23	0	2	138	Glyco_transf_28	5	141	sp|A4G8T8|MURG_HERAR	
+4.4e-23	0	2	137	Glyco_transf_28	7	142	sp|Q28NN5|MURG_JANSC	
+4.3e-23	0	2	135	Glyco_transf_28	8	137	sp|Q31CY4|MURG_PROM9	
+5.6e-23	0	1	133	Glyco_transf_28	8	139	sp|B1ZGP4|MURG_METPB	
+2.7e-23	0	2	137	Glyco_transf_28	7	142	sp|Q5LU63|MURG_SILPO	
+4.8e-23	0	1	138	Glyco_transf_28	4	140	sp|B3CRE9|MURG_ORITI	
+4.2e-23	0	2	137	Glyco_transf_28	7	142	sp|Q1GIV1|MURG_SILST	
+9.1e-23	0	2	138	Glyco_transf_28	6	142	sp|Q1GZ01|MURG_METFK	
+1.4e-22	0	1	137	Glyco_transf_28	3	143	sp|B3ET95|MURG_AMOA5	
+2.2e-22	0	1	137	Glyco_transf_28	7	145	sp|Q8A258|MURG_BACTN	
+9.7e-23	0	1	138	Glyco_transf_28	8	144	sp|Q211T8|MURG_RHOPB	
+9.8e-23	0	1	137	Glyco_transf_28	7	142	sp|Q2IYK8|MURG_RHOP2	
+7.2e-23	0	1	137	Glyco_transf_28	8	143	sp|B1LXZ4|MURG_METRJ	
+1.4e-22	0	2	135	Glyco_transf_28	8	137	sp|A2BNZ2|MURG_PROMS	
+1.8e-22	0	1	137	Glyco_transf_28	3	130	sp|C0R2W7|MURG_WOLWR	
+1.8e-22	0	1	137	Glyco_transf_28	3	130	sp|Q73I55|MURG_WOLPM	
+2.5e-22	0	1	133	Glyco_transf_28	8	139	sp|A9VWV3|MURG_METEP	
+2.5e-22	0	1	133	Glyco_transf_28	8	139	sp|B7KSC1|MURG_METC4	
+1.7e-22	0	2	138	Glyco_transf_28	5	138	sp|A2C027|MURG_PROM1	
+6.3e-22	0	2	137	Glyco_transf_28	7	142	sp|A3PHS8|MURG_RHOS1	
+4.9e-22	0	1	138	Glyco_transf_28	3	146	sp|A4SH02|MURG_PROVI	
+6.3e-22	0	2	137	Glyco_transf_28	7	142	sp|Q3J4M2|MURG_RHOS4	
+3e-22	0	2	130	Glyco_transf_28	9	133	sp|Q7V388|MURG_PROMP	
+3e-22	0	2	130	Glyco_transf_28	8	132	sp|A3PAR5|MURG_PROM0	
+1.8e-22	0	1	138	Glyco_transf_28	7	143	sp|Q07PT3|MURG_RHOP5	
+5.3e-22	0	1	137	Glyco_transf_28	7	142	sp|Q133X1|MURG_RHOPS	
+4.4e-22	0	1	137	Glyco_transf_28	16	154	sp|Q5LIJ7|MURG_BACFN	
+4.4e-22	0	1	137	Glyco_transf_28	16	154	sp|Q64ZM1|MURG_BACFR	
+4.4e-22	0	1	139	Glyco_transf_28	4	144	sp|A6LLF1|MURG_THEM4	
+4.2e-22	0	2	138	Glyco_transf_28	5	138	sp|Q46HH6|MURG_PROMT	
+1.4e-21	0	2	137	Glyco_transf_28	7	142	sp|A4WQD5|MURG_RHOS5	
+1.1e-21	0	2	130	Glyco_transf_28	9	133	sp|A2BUH4|MURG_PROM5	
+2.7e-21	0	1	135	Glyco_transf_28	3	128	sp|Q5GS79|MURG_WOLTR	
+4.4e-21	0	1	133	Glyco_transf_28	6	138	sp|Q7NPZ9|MURG_CHRVO	
+3.8e-20	0	19	139	Glyco_transf_28	2	121	sp|Q1AVX3|MURG_RUBXD	
+2.8	0	1	24	Glyco_transf_28	165	188	sp|Q1AVX3|MURG_RUBXD	
+4.2e-21	0	2	134	Glyco_transf_28	7	136	sp|Q7MBC4|MURG_GLOVI	
+5e-21	0	1	137	Glyco_transf_28	2	140	sp|Q7U322|MURG_HELHP	
+3.5e-21	0	1	138	Glyco_transf_28	3	146	sp|Q3B129|MURG_PELLD	
+1.2e-19	0	3	136	Glyco_transf_28	5	140	sp|Q30PK0|MURG_SULDN	
+2.4e-20	0	2	137	Glyco_transf_28	7	145	sp|A2SCY5|MURG_METPP	
+5.3e-19	0	1	136	Glyco_transf_28	2	139	sp|A0RP87|MURG_CAMFF	
+6.7	0	2	41	Glyco_transf_28	171	210	sp|A0RP87|MURG_CAMFF	
+1.1e-19	0	1	137	Glyco_transf_28	3	127	sp|B3CM87|MURG_WOLPP	
+1.4e-19	0	1	135	Glyco_transf_28	9	145	sp|A5FUL0|MURG_ACICJ	
+1.9e-19	0	1	131	Glyco_transf_28	3	135	sp|Q7MAD4|MURG_WOLSU	
+4.9e-19	0	1	135	Glyco_transf_28	4	139	sp|B2KE54|MURG_ELUMP	
+4e-19	0	1	133	Glyco_transf_28	3	141	sp|B3EIK8|MURG_CHLL2	
+2.5e-19	0	3	138	Glyco_transf_28	20	177	sp|A5UZT7|MURG_ROSS1	
+1.3e-18	0	1	134	Glyco_transf_28	5	142	sp|Q5FUJ5|MURG_GLUOX	
+7.8e-18	0	1	135	Glyco_transf_28	3	137	sp|A6Q722|MURG_SULNB	
+5.5e-18	0	1	138	Glyco_transf_28	4	135	sp|B8E325|MURG_DICTD	
+9.9e-18	0	1	138	Glyco_transf_28	3	142	sp|A6Q579|MURG_NITSB	
+2e-17	0	1	133	Glyco_transf_28	10	144	sp|Q0BV25|MURG_GRABC	
+2.4e-17	0	1	135	Glyco_transf_28	4	137	sp|Q5PB22|MURG_ANAMM	
+3.4e-17	0	1	137	Glyco_transf_28	3	141	sp|A7I265|MURG_CAMHC	
+1.1e-17	0	1	138	Glyco_transf_28	4	145	sp|A9FI55|MURG_SORC5	
+3e-17	0	1	138	Glyco_transf_28	4	135	sp|B5YEL3|MURG_DICT6	
+3.8e-16	0	1	136	Glyco_transf_28	3	140	sp|A8FM88|MURG_CAMJ8	
+5e-16	0	1	136	Glyco_transf_28	3	140	sp|Q5HU62|MURG_CAMJR	
+5e-16	0	1	136	Glyco_transf_28	3	140	sp|A1W027|MURG_CAMJJ	
+5e-16	0	1	136	Glyco_transf_28	3	140	sp|Q9PNQ2|MURG_CAMJE	
+1.1e-15	0	1	136	Glyco_transf_28	3	140	sp|A7H2Z9|MURG_CAMJD	
+3.1e-15	0	4	138	Glyco_transf_28	6	142	sp|A8F4X1|MURG_THELT	
+7e-12	0	1	138	Glyco_transf_28	4	142	sp|Q72R84|MURG_LEPIC	
+7e-12	0	1	138	Glyco_transf_28	4	142	sp|Q8F4J1|MURG_LEPIN	
+1.3e-11	0	1	138	Glyco_transf_28	5	138	sp|Q4FPK5|MURG_PELUB	
+2.7e-10	0	1	137	Glyco_transf_28	4	141	sp|Q04V94|MURG_LEPBJ	
+2.7e-10	0	1	137	Glyco_transf_28	4	141	sp|Q04Y82|MURG_LEPBL	
+1.8e-09	0	10	103	Glyco_transf_28	13	111	sp|Q8TTI1|Y452_METAC	
+5.5e-08	0	10	113	Glyco_transf_28	13	118	sp|Q8TTI0|Y453_METAC	
+2.2e-08	0	10	112	Glyco_transf_28	13	117	sp|Q8PWF3|Y1636_METMA	
+4.8e-08	0	6	93	Glyco_transf_28	11	104	sp|O34539|YJIC_BACSU	
+1.2e-07	0	1	59	Glyco_transf_28	10	75	sp|Q53685|OLED_STRAT	
+8e-08	0	10	112	Glyco_transf_28	13	117	sp|Q8PZB2|Y582_METMA	
+3.9e-07	0	11	126	Glyco_transf_28	14	131	sp|P21686|CRTX_PANAN	
+2.2e-06	0	9	54	Glyco_transf_28	33	78	sp|Q54387|MGT_STRLI	
+2.9e-06	0	15	125	Glyco_transf_28	18	125	sp|Q01330|CRTX_ESCVU	
+0.00065	0	1	53	Glyco_transf_28	4	56	sp|O31853|YOJK_BACSU	
+7.7	0	30	98	Glyco_transf_28	189	270	sp|O31853|YOJK_BACSU	
+8.6e-05	0	19	70	Glyco_transf_28	201	251	sp|B1YIY4|MTNA_EXIS2	
+7e-05	0	2	55	Glyco_transf_28	15	74	sp|Q0WW21|UGAGT_ARATH	
+0.00011	0	1	54	Glyco_transf_28	20	70	sp|Q9Z565|ILVC1_STRCO	
+9.1e-05	0	2	49	Glyco_transf_28	5	52	sp|O05496|YDHE_BACSU	
+0.00011	0	1	54	Glyco_transf_28	20	70	sp|Q9FBT8|ILVC2_STRCO	
+7.8e-05	0	1	55	Glyco_transf_28	13	83	sp|Q9SBL1|HMNGT_SORBI	
+0.00034	0	18	62	Glyco_transf_28	199	242	sp|B1I2P1|MTNA_DESAP	
+0.015	0	55	127	Glyco_transf_28	194	265	sp|A8AZU1|MUTL_STRGC	
+6.1	0	105	136	Glyco_transf_28	315	346	sp|A8AZU1|MUTL_STRGC	
+0.00034	0	20	91	Glyco_transf_28	173	244	sp|Q01198|LIGD_PSEPA	
+0.0021	0	2	31	Glyco_transf_28	209	239	sp|Q83RR8|NPD_SHIFL	
+0.00042	0	19	69	Glyco_transf_28	205	254	sp|C5D7U5|MTNA_GEOSW	
+0.017	0	56	127	Glyco_transf_28	195	265	sp|A3CR14|MUTL_STRSV	
+8.4	0	105	136	Glyco_transf_28	315	346	sp|A3CR14|MUTL_STRSV	
+0.00066	0	19	69	Glyco_transf_28	211	260	sp|Q88M09|MTNA_PSEPK	
+0.0008	0	18	69	Glyco_transf_28	203	253	sp|Q5L1E6|MTNA_GEOKA	
+0.0033	0	3	31	Glyco_transf_28	210	239	sp|Q8X8E0|NPD_ECO57	
+0.0031	0	3	33	Glyco_transf_28	210	241	sp|P75960|NPD_ECOLI	
+0.00037	0	1	50	Glyco_transf_28	10	61	sp|Q5V467|MAMA1_HALMA	
+0.0012	0	50	127	Glyco_transf_28	189	265	sp|C0MAS4|MUTL_STRE4	
+0.0025	0	3	36	Glyco_transf_28	210	244	sp|P0A2F2|NPD_SALTY	
+0.0025	0	3	36	Glyco_transf_28	210	244	sp|P0A2F3|NPD_SALTI	
+0.0014	0	56	127	Glyco_transf_28	195	265	sp|C0MGC4|MUTL_STRS7	
+0.00085	0	18	70	Glyco_transf_28	204	255	sp|Q65KK2|MTNA_BACLD	
+0.00089	0	19	63	Glyco_transf_28	211	254	sp|B0KTX5|MTNA_PSEPG	
+0.00072	0	19	64	Glyco_transf_28	211	255	sp|B1J5G5|MTNA_PSEPW	
+0.0009	0	19	63	Glyco_transf_28	211	254	sp|A5W7G2|MTNA_PSEP1	
+0.0015	0	18	69	Glyco_transf_28	203	253	sp|A4ILL1|MTNA_GEOTN	
+0.0014	0	56	127	Glyco_transf_28	195	265	sp|B4U0J7|MUTL_STREM	
+0.0033	0	3	31	Glyco_transf_28	210	239	sp|Q8FIM4|NPD_ECOL6	
+0.0013	0	1	55	Glyco_transf_28	20	83	sp|B2GFJ7|ILVC_KOCRD	
+0.0012	0	1	50	Glyco_transf_28	20	66	sp|B1VZ72|ILVC_STRGG	
+0.0013	0	1	50	Glyco_transf_28	20	66	sp|Q59818|ILVC_STRAW	
+0.0052	0	19	65	Glyco_transf_28	205	250	sp|Q731R7|MTNA_BACC1	
+0.0011	0	10	85	Glyco_transf_28	119	194	sp|B1GZW3|TPIS_UNCTG	
+0.011	0	13	108	Glyco_transf_28	25	121	sp|Q2IWS4|GLYA_RHOP2	
+0.0025	0	19	66	Glyco_transf_28	205	251	sp|A7GS56|MTNA_BACCN	
+0.0015	0	1	61	Glyco_transf_28	20	76	sp|B7KF23|ILVC_CYAP7	
+0.0018	0	23	126	Glyco_transf_28	138	237	sp|A5W1E8|RNZ_PSEP1	
+0.0028	0	2	52	Glyco_transf_28	20	67	sp|B3QSP0|ILVC_CHLT3	
+0.008	0	19	63	Glyco_transf_28	205	248	sp|O31662|MTNA_BACSU	
+0.004	0	1	60	Glyco_transf_28	20	75	sp|C1F6Z5|ILVC_ACIC5	
+2.3	0	63	125	Glyco_transf_28	93	143	sp|Q2G3S7|PYRB_NOVAD	
+0.09	0	22	47	Glyco_transf_28	199	225	sp|Q2G3S7|PYRB_NOVAD	
+4.2	0	56	96	Glyco_transf_28	349	387	sp|Q96LB3|IFT74_HUMAN	
+0.044	0	28	87	Glyco_transf_28	505	562	sp|Q96LB3|IFT74_HUMAN	
+0.0028	0	1	57	Glyco_transf_28	20	73	sp|A9AZM5|ILVC_HERA2	
+0.0069	0	18	59	Glyco_transf_28	19	69	sp|B8HSQ9|SURE_CYAP4	
+0.0043	0	14	73	Glyco_transf_28	601	661	sp|Q3SPL2|UVRC_NITWN	
+0.005	0	19	63	Glyco_transf_28	205	248	sp|A7Z3X0|MTNA_BACA2	
+0.078	0	21	118	Glyco_transf_28	40	134	sp|Q38W65|EFTS_LACSS	
+2.5	0	27	122	Glyco_transf_28	177	262	sp|Q38W65|EFTS_LACSS	
+0.0033	0	44	126	Glyco_transf_28	121	199	sp|C3JYK1|TIG_PSEFS	
+0.003	0	11	97	Glyco_transf_28	131	219	sp|Q1GZA6|BIOB_METFK	
+0.0044	0	19	66	Glyco_transf_28	205	251	sp|Q635P7|MTNA2_BACCZ	
+0.0032	0	1	73	Glyco_transf_28	12	87	sp|O48676|HTGT_ARATH	
+2.5	0	16	33	Glyco_transf_28	15	32	sp|Q8YRC9|THIOG_ANASP	
+0.25	0	87	133	Glyco_transf_28	315	361	sp|Q8YRC9|THIOG_ANASP	
+0.019	0	1	54	Glyco_transf_28	21	70	sp|Q8DW43|ILVC_STRMU	
+0.0041	0	19	66	Glyco_transf_28	205	251	sp|Q81MJ6|MTNA2_BACAN	
+0.014	0	13	107	Glyco_transf_28	24	119	sp|Q6N693|GLYA1_RHOPA	
+0.0035	0	16	73	Glyco_transf_28	14	69	sp|B0C915|MURD_ACAM1	
+0.0061	0	13	108	Glyco_transf_28	20	116	sp|Q2KA25|GLYA_RHIEC	
+0.011	0	13	107	Glyco_transf_28	32	127	sp|Q214H7|GLYA_RHOPB	
+0.0067	0	65	127	Glyco_transf_28	203	265	sp|B9DW70|MUTL_STRU0	
+0.0046	0	19	66	Glyco_transf_28	205	251	sp|A0RI38|MTNA2_BACAH	
+0.0046	0	19	66	Glyco_transf_28	205	251	sp|Q6HED3|MTNA2_BACHK	
+0.0042	0	14	73	Glyco_transf_28	602	662	sp|Q1QIR5|UVRC_NITHX	
+0.0085	0	1	50	Glyco_transf_28	21	66	sp|A8AVN4|ILVC_STRGC	
+0.024	0	17	68	Glyco_transf_28	40	90	sp|Q7V5V5|MURD_PROMM	
+0.0043	0	1	50	Glyco_transf_28	21	67	sp|Q47SB6|ILVC_THEFY	
+0.0032	0	1	47	Glyco_transf_28	21	64	sp|A4FMQ5|ILVC_SACEN	
+0.0022	0	30	121	Glyco_transf_28	11	103	sp|Q5V3R4|TRM56_HALMA	
+5.1	0	24	67	Glyco_transf_28	105	146	sp|B8GW68|ENO_CAUCN	
+0.066	0	13	48	Glyco_transf_28	184	219	sp|B8GW68|ENO_CAUCN	
+5.1	0	24	67	Glyco_transf_28	105	146	sp|Q9A7J9|ENO_CAUCR	
+0.066	0	13	48	Glyco_transf_28	184	219	sp|Q9A7J9|ENO_CAUCR	
+0.0049	0	1	54	Glyco_transf_28	4	59	sp|Q5V3F0|MAMA2_HALMA	
+0.0086	0	11	45	Glyco_transf_28	24	60	sp|B1LZ88|GLYA_METRJ	
+0.0038	0	11	97	Glyco_transf_28	128	216	sp|P94966|BIOB_METSK	
+0.0043	0	1	70	Glyco_transf_28	19	81	sp|Q3SHE4|ILVC_THIDA	
+0.015	0	13	107	Glyco_transf_28	25	120	sp|Q07MT9|GLYA_RHOP5	
+0.0047	0	17	63	Glyco_transf_28	202	247	sp|A9VRK3|MTNA1_BACWK	
+0.01	0	1	54	Glyco_transf_28	20	70	sp|A9GW78|ILVC_SORC5	
+0.0079	0	1	59	Glyco_transf_28	21	75	sp|Q5YRW2|ILVC_NOCFA	
+0.01	0	1	36	Glyco_transf_28	21	51	sp|A3CQ86|ILVC_STRSV	
+0.013	0	14	72	Glyco_transf_28	611	670	sp|Q21AW5|UVRC_RHOPB	
+0.0061	0	17	63	Glyco_transf_28	202	247	sp|Q81IK7|MTNA1_BACCR	
+5.6	0	15	31	Glyco_transf_28	21	37	sp|Q5FNN2|PYRG_GLUOX	
+0.34	0	2	45	Glyco_transf_28	137	183	sp|Q5FNN2|PYRG_GLUOX	
+0.0076	0	1	55	Glyco_transf_28	19	82	sp|Q2S9V9|ILVC_HAHCH	
+0.0042	0	2	79	Glyco_transf_28	3	75	sp|Q17QH8|D39U1_BOVIN	
+0.0057	0	1	47	Glyco_transf_28	20	63	sp|Q2J6V2|ILVC_FRASC	
+0.038	0	1	54	Glyco_transf_28	19	69	sp|A1WUW3|ILVC_HALHL	
+0.0093	0	15	70	Glyco_transf_28	20	71	sp|A8LMD0|PUR9_DINSH	
+0.0091	0	1	37	Glyco_transf_28	215	251	sp|C5BAT0|GCSP_EDWI9	
+0.011	0	1	48	Glyco_transf_28	21	65	sp|C1B2M1|ILVC_RHOOB	
+0.011	0	1	48	Glyco_transf_28	21	65	sp|Q0S2H3|ILVC_RHOSR	
+0.0062	0	17	63	Glyco_transf_28	202	247	sp|A0R946|MTNA1_BACAH	
+0.0062	0	17	63	Glyco_transf_28	202	247	sp|Q81ZC2|MTNA1_BACAN	
+0.0062	0	17	63	Glyco_transf_28	202	247	sp|Q6HP54|MTNA1_BACHK	
+0.011	0	16	108	Glyco_transf_28	23	116	sp|Q1MIU5|GLYA_RHIL3	
+0.0078	0	19	65	Glyco_transf_28	205	250	sp|A8FCG5|MTNA_BACP2	
+0.013	0	1	68	Glyco_transf_28	19	79	sp|Q63CV4|ILVC2_BACCZ	
+0.0084	0	1	68	Glyco_transf_28	20	81	sp|A4J179|ILVC_DESRM	
+0.0039	0	1	55	Glyco_transf_28	3	76	sp|Q9V030|PAAD_PYRAB	
+0.014	0	1	54	Glyco_transf_28	19	68	sp|Q81F27|ILVC2_BACCR	
+0.05	0	1	52	Glyco_transf_28	21	68	sp|Q03IJ9|ILVC_STRTD	
+0.05	0	1	52	Glyco_transf_28	21	68	sp|Q9F0I7|ILVC_STRTR	
+0.0082	0	14	90	Glyco_transf_28	88	168	sp|P26166|YBCC_RHOCA	
+0.0067	0	1	54	Glyco_transf_28	20	70	sp|B8I1T8|ILVC_CLOCE	
+0.066	0	1	35	Glyco_transf_28	21	50	sp|A4VXL3|ILVC_STRSY	
+0.066	0	1	35	Glyco_transf_28	21	50	sp|A4W3V8|ILVC_STRS2	
+0.0079	0	1	59	Glyco_transf_28	19	73	sp|Q3B594|ILVC_PELLD	
+0.026	0	65	128	Glyco_transf_28	203	266	sp|B1I8F2|MUTL_STRPI	
+0.026	0	65	128	Glyco_transf_28	203	266	sp|B2IS10|MUTL_STRPS	
+0.026	0	65	128	Glyco_transf_28	203	266	sp|B8ZKC9|MUTL_STRPJ	
+0.026	0	65	128	Glyco_transf_28	203	266	sp|P0A3R1|HEXB_STRPN	
+0.026	0	65	128	Glyco_transf_28	203	266	sp|P0A3R2|HEXB_STRR6	
+0.026	0	65	128	Glyco_transf_28	203	266	sp|Q04MR4|MUTL_STRP2	
+0.026	0	65	128	Glyco_transf_28	203	266	sp|C1CI68|MUTL_STRZP	
+0.026	0	65	128	Glyco_transf_28	203	266	sp|C1CP43|MUTL_STRZT	
+0.016	0	16	59	Glyco_transf_28	184	248	sp|Q8ZQE4|MACB_SALTY	
+0.016	0	16	59	Glyco_transf_28	184	248	sp|Q57R58|MACB_SALCH	
+0.0064	0	15	92	Glyco_transf_28	45	123	sp|Q64550|UD11_RAT	
+0.011	0	13	108	Glyco_transf_28	20	116	sp|B9JCX4|GLYA_AGRRK	
+0.016	0	16	59	Glyco_transf_28	184	248	sp|Q8Z824|MACB_SALTI	
+0.0047	0	43	134	Glyco_transf_28	80	181	sp|O94475|YC67_SCHPO	
+0.39	0	19	73	Glyco_transf_28	56	108	sp|P59837|RDH12_BOVIN	
+1.7	0	34	79	Glyco_transf_28	211	265	sp|P59837|RDH12_BOVIN	
+0.016	0	16	59	Glyco_transf_28	184	248	sp|Q5PGK9|MACB_SALPA	
+0.032	0	1	48	Glyco_transf_28	20	64	sp|Q02CM4|ILVC_SOLUE	
+0.019	0	3	21	Glyco_transf_28	208	226	sp|Q669P6|NPD_YERPS	
+0.019	0	3	21	Glyco_transf_28	208	226	sp|Q8ZFR1|NPD_YERPE	
+0.009	0	1	69	Glyco_transf_28	20	82	sp|B9KYS1|ILVC_THERP	
+0.023	0	1	48	Glyco_transf_28	20	64	sp|B4UAN4|ILVC_ANASK	
+0.023	0	1	48	Glyco_transf_28	20	64	sp|B8J829|ILVC_ANAD2	
+0.023	0	1	48	Glyco_transf_28	20	64	sp|Q2IJB7|ILVC_ANADE	
+0.0091	0	1	45	Glyco_transf_28	20	59	sp|Q0RDI8|ILVC_FRAAA	
+0.013	0	18	54	Glyco_transf_28	24	61	sp|P0ABQ0|COABC_ECOLI	
+0.013	0	18	54	Glyco_transf_28	24	61	sp|P0ABQ1|COABC_ECOL6	
+0.0085	0	1	64	Glyco_transf_28	20	76	sp|B2J2U6|ILVC_NOSP7	
+0.011	0	14	73	Glyco_transf_28	598	658	sp|Q89DG9|UVRC_BRAJA	
+0.009	0	1	63	Glyco_transf_28	17	73	sp|Q2S0M9|ILVC_SALRD	
+0.0086	0	1	59	Glyco_transf_28	22	76	sp|Q7NH80|ILVC_GLOVI	
+0.0081	0	1	54	Glyco_transf_28	21	71	sp|Q8G6V1|ILVC2_BIFLO	
+0.059	0	15	53	Glyco_transf_28	186	224	sp|Q2W698|ENO_MAGSA	
+0.0097	0	17	63	Glyco_transf_28	202	247	sp|Q63GN3|MTNA1_BACCZ	
+0.0096	0	1	54	Glyco_transf_28	20	70	sp|B0JRP2|ILVC_MICAN	
+0.027	0	65	128	Glyco_transf_28	203	266	sp|C1CBX8|MUTL_STRZJ	
+0.0097	0	12	80	Glyco_transf_28	114	184	sp|Q3SLY0|BIOB_THIDA	
+0.027	0	65	128	Glyco_transf_28	203	266	sp|B5E6C5|MUTL_STRP4	
+0.011	0	16	55	Glyco_transf_28	14	60	sp|B2J6I3|MURD_NOSP7	
+0.05	0	1	52	Glyco_transf_28	21	68	sp|Q5LXV0|ILVC_STRT1	
+0.05	0	1	52	Glyco_transf_28	21	68	sp|Q5M2F2|ILVC_STRT2	
+4.1	0	66	100	Glyco_transf_28	13	47	sp|C6A5E6|VATD_THESM	
+0.17	0	29	87	Glyco_transf_28	104	160	sp|C6A5E6|VATD_THESM	
+0.014	0	1	67	Glyco_transf_28	20	80	sp|Q2RIS6|ILVC_MOOTA	
+0.13	0	87	135	Glyco_transf_28	315	363	sp|Q3M859|THIOG_ANAVT	
+0.013	0	24	93	Glyco_transf_28	58	124	sp|Q5GS59|RLME_WOLTR	
+0.0049	0	2	54	Glyco_transf_28	21	70	sp|B8G7X1|ILVC_CHLAD	
+0.016	0	1	52	Glyco_transf_28	20	68	sp|C5C2I2|ILVC_BEUC1	
+0.022	0	2	54	Glyco_transf_28	20	69	sp|Q5SJ03|ILVC_THET8	
+0.022	0	2	54	Glyco_transf_28	20	69	sp|Q72JC8|ILVC_THET2	
+0.019	0	1	49	Glyco_transf_28	21	66	sp|Q4JUN9|ILVC_CORJK	
+0.013	0	14	72	Glyco_transf_28	607	666	sp|Q2J0X3|UVRC_RHOP2	
+0.028	0	1	36	Glyco_transf_28	21	51	sp|Q02YY8|ILVC_LACLS	
+0.016	0	1	57	Glyco_transf_28	20	70	sp|B9EBF4|ILVC_MACCJ	
+0.011	0	10	43	Glyco_transf_28	23	56	sp|Q43716|UFOG_PETHY	
+0.0099	0	15	56	Glyco_transf_28	20	60	sp|A5GUT4|SURE_SYNR3	
+0.012	0	2	64	Glyco_transf_28	20	76	sp|Q1ARE4|ILVC_RUBXD	
+0.033	0	2	48	Glyco_transf_28	21	64	sp|A6W7N6|ILVC_KINRD	
+0.25	0	23	52	Glyco_transf_28	129	158	sp|Q11039|DEAD_MYCTU	
+0.017	0	14	72	Glyco_transf_28	607	666	sp|Q13BM0|UVRC_RHOPS	
+0.0085	0	18	105	Glyco_transf_28	19	127	sp|Q8YMT3|SURE_ANASP	
+0.015	0	16	54	Glyco_transf_28	20	58	sp|Q319M0|SURE_PROM9	
+0.017	0	19	66	Glyco_transf_28	205	251	sp|A9VFD5|MTNA2_BACWK	
+3.5	0	47	107	Glyco_transf_28	15	73	sp|A1JRP2|NADA_YERE8	
+0.37	0	85	132	Glyco_transf_28	226	276	sp|A1JRP2|NADA_YERE8	
+0.032	0	1	36	Glyco_transf_28	21	51	sp|A2RKQ6|ILVC_LACLM	
+0.019	0	16	110	Glyco_transf_28	184	298	sp|Q32DZ9|MACB_SHIDS	
+0.018	0	1	59	Glyco_transf_28	20	74	sp|A5CPY6|ILVC_CLAM3	
+0.018	0	1	59	Glyco_transf_28	20	74	sp|B0RIN6|ILVC_CLAMS	
+0.024	0	57	127	Glyco_transf_28	196	265	sp|Q8K5J6|MUTL_STRP3	
+0.024	0	57	127	Glyco_transf_28	196	265	sp|Q99XN7|MUTL_STRP1	
+0.024	0	57	127	Glyco_transf_28	196	265	sp|B5XJ09|MUTL_STRPZ	
+0.024	0	57	127	Glyco_transf_28	196	265	sp|A2RGV3|MUTL_STRPG	
+0.024	0	57	127	Glyco_transf_28	196	265	sp|Q5X9H5|MUTL_STRP6	
+0.019	0	63	125	Glyco_transf_28	201	263	sp|Q3JYM6|MUTL_STRA1	
+0.019	0	63	125	Glyco_transf_28	201	263	sp|Q8E2R5|MUTL_STRA3	
+0.021	0	1	54	Glyco_transf_28	9	63	sp|Q9MB73|LGT_CITUN	
+0.02	0	17	54	Glyco_transf_28	21	58	sp|A8G678|SURE_PROM2	
+0.046	0	1	48	Glyco_transf_28	20	64	sp|A9WP08|ILVC_RENSM	
+0.0085	0	2	54	Glyco_transf_28	21	70	sp|A9WC26|ILVC_CHLAA	
+0.0085	0	2	54	Glyco_transf_28	21	70	sp|B9LGM7|ILVC_CHLSY	
+0.02	0	17	53	Glyco_transf_28	21	57	sp|A2BSJ2|SURE_PROMS	
+0.026	0	1	32	Glyco_transf_28	6	38	sp|Q9LR44|IABG1_ARATH	
+0.068	0	26	86	Glyco_transf_28	101	159	sp|O57731|VATD_PYRHO	
+0.027	0	17	50	Glyco_transf_28	21	53	sp|A3PEA4|SURE_PROM0	
+0.019	0	16	110	Glyco_transf_28	184	298	sp|P75831|MACB_ECOLI	
+0.02	0	16	110	Glyco_transf_28	184	298	sp|Q83LR7|MACB_SHIFL	
+0.02	0	16	110	Glyco_transf_28	184	298	sp|Q3Z3Q4|MACB_SHISS	
+0.029	0	15	108	Glyco_transf_28	183	296	sp|Q8XED0|MACB_ECO57	
diff --git a/demotic/regress/ncbi-blastp-profmark.out b/demotic/regress/ncbi-blastp-profmark.out
new file mode 100644
index 0000000..002fb9f
--- /dev/null
+++ b/demotic/regress/ncbi-blastp-profmark.out
@@ -0,0 +1,19 @@
+1e-88	325.0	sp|P55685|Y4WG_RHISN	sp|P55685|Y4WG_RHISN
+3.8	31.0	sp|B2VCH7|MTLD_ERWT9	sp|P55685|Y4WG_RHISN
+7.3	30.0	sp|Q9CZP0|UFSP1_MOUSE	sp|P55685|Y4WG_RHISN
+0	602.0	sp|Q1XGE2|HAC1_ASPOR	sp|Q1XGE2|HAC1_ASPOR
+0	416.0	sp|Q8TFU8|HAC1_EMENI	sp|Q1XGE2|HAC1_ASPOR
+2e-15	84.0	sp|Q8TFF3|HAC1_TRIRE	sp|Q1XGE2|HAC1_ASPOR
+1e-07	58.0	sp|P41546|HAC1_YEAST	sp|Q1XGE2|HAC1_ASPOR
+0.01	41.0	sp|O24646|HY5_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.12	38.0	sp|Q9SM50|HY5_SOLLC	sp|Q1XGE2|HAC1_ASPOR
+1.5	34.0	sp|Q61817|CREB3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.6	34.0	sp|A1URL3|PYRD_BARBK	sp|Q1XGE2|HAC1_ASPOR
+1.9	34.0	sp|Q3SYZ3|CR3L3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+2.1	33.0	sp|Q68CJ9|CR3L3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+2.6	33.0	sp|Q5FVM5|CR3L3_RAT	sp|Q1XGE2|HAC1_ASPOR
+2.9	33.0	sp|Q91XE9|CR3L3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+5.7	32.0	sp|Q8W191|HYH_ARATH	sp|Q1XGE2|HAC1_ASPOR
+5.8	32.0	sp|Q3SZZ2|XBP1_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+9	32.0	sp|Q5UEM7|CR3L4_RAT	sp|Q1XGE2|HAC1_ASPOR
+9.3	32.0	sp|Q9D2A5|CR3L4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
diff --git a/demotic/regress/ncbi-blastp-tbl.out b/demotic/regress/ncbi-blastp-tbl.out
new file mode 100644
index 0000000..283ddf4
--- /dev/null
+++ b/demotic/regress/ncbi-blastp-tbl.out
@@ -0,0 +1,19 @@
+1e-88	90	1	181	sp|P55685|Y4WG_RHISN	1	181	sp|P55685|Y4WG_RHISN	Uncharacterized protein y4wG OS=Rhizobium sp.
+3.8	32	42	93	sp|P55685|Y4WG_RHISN	52	97	sp|B2VCH7|MTLD_ERWT9	Mannitol-1-phosphate 5-dehydrogenase
+7.3	34	111	154	sp|P55685|Y4WG_RHISN	129	172	sp|Q9CZP0|UFSP1_MOUSE	Ufm1-specific protease 1 OS=Mus musculus
+e-171	87	1	345	sp|Q1XGE2|HAC1_ASPOR	1	345	sp|Q1XGE2|HAC1_ASPOR	Transcriptional activator hacA OS=Aspergillus
+e-115	67	13	344	sp|Q1XGE2|HAC1_ASPOR	18	348	sp|Q8TFU8|HAC1_EMENI	Transcriptional activator hacA OS=Emericella
+2e-15	88	58	100	sp|Q1XGE2|HAC1_ASPOR	93	135	sp|Q8TFF3|HAC1_TRIRE	Transcriptional activator hac1 OS=Trichoderma
+1e-07	68	63	100	sp|Q1XGE2|HAC1_ASPOR	16	56	sp|P41546|HAC1_YEAST	Transcriptional activator HAC1
+0.010	33	60	139	sp|Q1XGE2|HAC1_ASPOR	65	144	sp|O24646|HY5_ARATH	Transcription factor HY5 OS=Arabidopsis
+0.12	32	60	139	sp|Q1XGE2|HAC1_ASPOR	66	142	sp|Q9SM50|HY5_SOLLC	Transcription factor HY5 OS=Solanum
+1.5	28	80	150	sp|Q1XGE2|HAC1_ASPOR	182	252	sp|Q61817|CREB3_MOUSE	Cyclic AMP-responsive element-binding protein
+1.6	40	227	292	sp|Q1XGE2|HAC1_ASPOR	205	267	sp|A1URL3|PYRD_BARBK	Dihydroorotate dehydrogenase OS=Bartonella
+1.9	28	80	150	sp|Q1XGE2|HAC1_ASPOR	235	305	sp|Q3SYZ3|CR3L3_BOVIN	Cyclic AMP-responsive element-binding protein
+2.1	28	80	150	sp|Q1XGE2|HAC1_ASPOR	240	310	sp|Q68CJ9|CR3L3_HUMAN	Cyclic AMP-responsive element-binding protein
+2.6	26	68	150	sp|Q1XGE2|HAC1_ASPOR	224	306	sp|Q5FVM5|CR3L3_RAT	Cyclic AMP-responsive element-binding protein
+2.9	26	68	150	sp|Q1XGE2|HAC1_ASPOR	224	306	sp|Q91XE9|CR3L3_MOUSE	Cyclic AMP-responsive element-binding protein
+5.7	26	73	143	sp|Q1XGE2|HAC1_ASPOR	68	138	sp|Q8W191|HYH_ARATH	Transcription factor HY5-like OS=Arabidopsis
+5.8	29	68	143	sp|Q1XGE2|HAC1_ASPOR	52	137	sp|Q3SZZ2|XBP1_BOVIN	X-box-binding protein 1 OS=Bos taurus GN=XBP1
+9.0	26	80	146	sp|Q1XGE2|HAC1_ASPOR	186	252	sp|Q5UEM7|CR3L4_RAT	Cyclic AMP-responsive element-binding protein
+9.3	26	80	146	sp|Q1XGE2|HAC1_ASPOR	190	256	sp|Q9D2A5|CR3L4_MOUSE	Cyclic AMP-responsive element-binding protein
diff --git a/demotic/regress/phmmer-profmark.out b/demotic/regress/phmmer-profmark.out
new file mode 100644
index 0000000..16e0686
--- /dev/null
+++ b/demotic/regress/phmmer-profmark.out
@@ -0,0 +1,221 @@
+1.9e-115	387.7	sp|P55685|Y4WG_RHISN	sp|P55685|Y4WG_RHISN
+1.7	13.5	sp|A1VDW9|HEM1_DESVV	sp|P55685|Y4WG_RHISN
+2.1	13.1	sp|Q72C23|HEM1_DESVH	sp|P55685|Y4WG_RHISN
+2.8	12.7	sp|C0ZYA2|RIMP_RHOE4	sp|P55685|Y4WG_RHISN
+2.9	12.7	sp|Q98G87|UBIG_RHILO	sp|P55685|Y4WG_RHISN
+3.6	12.4	sp|B2VCH7|MTLD_ERWT9	sp|P55685|Y4WG_RHISN
+4.5	12.1	sp|A1WE19|RLMN_VEREI	sp|P55685|Y4WG_RHISN
+4.6	12.0	sp|Q2J713|RLMN_FRASC	sp|P55685|Y4WG_RHISN
+5.4	11.8	sp|Q9CZP0|UFSP1_MOUSE	sp|P55685|Y4WG_RHISN
+7.4	11.4	sp|Q21KT6|RLMN_SACD2	sp|P55685|Y4WG_RHISN
+7.5	11.4	sp|Q7W7U1|NADD_BORPA	sp|P55685|Y4WG_RHISN
+7.9	11.3	sp|Q8C6Y6|ASB14_MOUSE	sp|P55685|Y4WG_RHISN
+8	11.3	sp|Q8Y3H7|Y003_RALSO	sp|P55685|Y4WG_RHISN
+8.1	11.2	sp|A4G4J9|RLMN_HERAR	sp|P55685|Y4WG_RHISN
+8.8	11.1	sp|B8F3W8|LEUC_HAEPS	sp|P55685|Y4WG_RHISN
+9.6	11.0	sp|Q07074|YH007_YEAST	sp|P55685|Y4WG_RHISN
+9.7	11.0	sp|A6SZX3|RLMN_JANMA	sp|P55685|Y4WG_RHISN
+9.7	11.0	sp|A2SHB8|RLMN_METPP	sp|P55685|Y4WG_RHISN
+2e-228	762.1	sp|Q1XGE2|HAC1_ASPOR	sp|Q1XGE2|HAC1_ASPOR
+1.2e-169	568.8	sp|Q8TFU8|HAC1_EMENI	sp|Q1XGE2|HAC1_ASPOR
+1.5e-26	98.4	sp|Q8TFF3|HAC1_TRIRE	sp|Q1XGE2|HAC1_ASPOR
+1.3e-12	52.6	sp|P41546|HAC1_YEAST	sp|Q1XGE2|HAC1_ASPOR
+6e-11	47.1	sp|O24646|HY5_ARATH	sp|Q1XGE2|HAC1_ASPOR
+4.6e-07	34.3	sp|Q3SZZ2|XBP1_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+7.8e-07	33.6	sp|Q9SM50|HY5_SOLLC	sp|Q1XGE2|HAC1_ASPOR
+1.7e-06	32.5	sp|P17861|XBP1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+9.6e-06	30.0	sp|Q8W191|HYH_ARATH	sp|Q1XGE2|HAC1_ASPOR
+2.2e-05	28.8	sp|A1L224|CR3L2_DANRE	sp|Q1XGE2|HAC1_ASPOR
+6.8e-05	27.2	sp|Q9D2A5|CR3L4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+7.1e-05	27.1	sp|Q9R1S4|XBP1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.00017	25.8	sp|Q54WN7|BZPF_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.00023	25.5	sp|A2VD01|CR3L2_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.00023	25.4	sp|Q99090|CPRF2_PETCR	sp|Q1XGE2|HAC1_ASPOR
+0.00028	25.2	sp|Q5FVM5|CR3L3_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.00029	25.1	sp|O35426|XBP1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00031	25.0	sp|Q61817|CREB3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00058	24.1	sp|Q91XE9|CR3L3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0006	24.1	sp|O57342|MAFA_COTJA	sp|Q1XGE2|HAC1_ASPOR
+0.00063	24.0	sp|Q5UEM7|CR3L4_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.00077	23.7	sp|Q08CW8|CR3L4_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.00091	23.5	sp|Q90370|MAFB_COTJA	sp|Q1XGE2|HAC1_ASPOR
+0.00095	23.4	sp|Q68CJ9|CR3L3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.001	23.3	sp|Q1LYG4|CR3LB_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.0011	23.3	sp|Q502F0|CR3LA_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.0012	23.1	sp|Q90888|MAFB_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.0013	23.0	sp|Q3SYZ3|CR3L3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.0014	22.9	sp|Q5RCM9|CR3L2_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.0014	22.9	sp|Q9Y5Q3|MAFB_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0016	22.7	sp|Q70SY1|CR3L2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0017	22.6	sp|Q6DE84|MAFB_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.0018	22.6	sp|Q9Z125|CR3L1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0018	22.6	sp|Q8BH52|CR3L2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0021	22.3	sp|P54842|MAFB_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.0021	22.3	sp|Q6QDP7|CR3L2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.0021	22.3	sp|Q16520|BATF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0023	22.1	sp|P54841|MAFB_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0027	21.9	sp|Q2PFS4|MAFB_MACFA	sp|Q1XGE2|HAC1_ASPOR
+0.0029	21.8	sp|O42290|MAFA_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.003	21.8	sp|Q9NR55|BATF3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0037	21.5	sp|Q96BA8|CR3L1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.004	21.4	sp|Q66HA2|CR3L1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.0043	21.3	sp|P17544|ATF7_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0053	21.0	sp|O43889|CREB3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0054	20.9	sp|Q8R0S1|ATF7_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0057	20.9	sp|Q5R9C9|ATF7_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.0068	20.6	sp|O35284|BATF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0084	20.3	sp|Q8SQ19|CREB3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.0089	20.2	sp|Q8TEY5|CR3L4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0097	20.1	sp|Q9D275|BATF3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.012	19.9	sp|Q504L8|MAFB_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.012	19.8	sp|Q5UEM8|CR3L4_MACFA	sp|Q1XGE2|HAC1_ASPOR
+0.016	19.4	sp|Q4U1U2|MAFA_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.018	19.3	sp|P23091|MAF_AVIS4	sp|Q1XGE2|HAC1_ASPOR
+0.018	19.2	sp|P81269|ATF1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.019	19.2	sp|Q789F3|MAF_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.02	19.1	sp|P29747|CREBA_DROME	sp|Q1XGE2|HAC1_ASPOR
+0.02	19.0	sp|P18848|ATF4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.024	18.8	sp|P54844|MAF_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.024	18.8	sp|O75444|MAF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.024	18.8	sp|P97876|BATF3_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.025	18.8	sp|Q06507|ATF4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.025	18.7	sp|A7Z017|MAF_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.026	18.7	sp|Q0V9K1|MAF_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.028	18.6	sp|Q08DA8|ATF1_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.029	18.5	sp|O60675|MAFK_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.03	18.5	sp|P54843|MAF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.036	18.2	sp|P18846|ATF1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.039	18.1	sp|P42774|GBF1_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.039	18.1	sp|Q61827|MAFK_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.046	17.9	sp|P14233|TGA1B_TOBAC	sp|Q1XGE2|HAC1_ASPOR
+0.051	17.7	sp|Q6NW59|ATF4_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.067	17.3	sp|O24160|TGA21_TOBAC	sp|Q1XGE2|HAC1_ASPOR
+0.07	17.3	sp|Q98UK4|MAF_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.071	17.3	sp|A3KMR8|MAFA_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.078	17.1	sp|Q90596|MAFK_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.079	17.1	sp|Q3ZCH6|ATF4_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.086	17.0	sp|P97875|JDP2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.086	17.0	sp|Q78E65|JDP2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.092	16.9	sp|P12959|OP2_MAIZE	sp|Q1XGE2|HAC1_ASPOR
+0.093	16.9	sp|Q8K1L0|CREB5_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.093	16.9	sp|Q39140|TGA6_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.098	16.8	sp|P23923|HBP1B_WHEAT	sp|Q1XGE2|HAC1_ASPOR
+0.11	16.7	sp|Q00322|CEBPD_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.11	16.6	sp|Q39163|TGA5_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.12	16.5	sp|Q54RZ9|BZPG_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.12	16.5	sp|Q8CF90|MAFA_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.13	16.4	sp|Q9ES19|ATF4_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.15	16.2	sp|P43273|TGA2_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.16	16.1	sp|Q98UK5|MAFB_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.17	16.0	sp|P16951|ATF2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.18	15.9	sp|P27925|CREB1_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.19	15.9	sp|P15336|ATF2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.19	15.9	sp|O35451|ATF6B_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.19	15.9	sp|Q2VZV0|IF2_MAGSA	sp|Q1XGE2|HAC1_ASPOR
+0.21	15.7	sp|Q6ZDF3|TRAB1_ORYSJ	sp|Q1XGE2|HAC1_ASPOR
+0.22	15.7	sp|Q6P788|ATF5_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.22	15.6	sp|Q02930|CREB5_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.23	15.6	sp|Q66J36|NFIL3_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.29	15.3	sp|Q8NHW3|MAFA_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.37	14.9	sp|O88479|FOS_MESAU	sp|Q1XGE2|HAC1_ASPOR
+0.38	14.9	sp|P23922|HBP1A_WHEAT	sp|Q1XGE2|HAC1_ASPOR
+0.39	14.9	sp|Q90595|MAFF_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.39	14.8	sp|P53450|FOS_TAKRU	sp|Q1XGE2|HAC1_ASPOR
+0.43	14.7	sp|Q00969|ATF2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.43	14.7	sp|O97930|FOS_PIG	sp|Q1XGE2|HAC1_ASPOR
+0.51	14.5	sp|P79145|CREM_CANFA	sp|Q1XGE2|HAC1_ASPOR
+0.52	14.4	sp|Q99941|ATF6B_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.53	14.4	sp|P01101|FOS_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.54	14.4	sp|P15337|CREB1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.54	14.4	sp|P16220|CREB1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.54	14.4	sp|Q01147|CREB1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.57	14.3	sp|O93602|ATF2_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.63	14.1	sp|Q90889|MAFG_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.64	14.1	sp|P79702|FOS_CYPCA	sp|Q1XGE2|HAC1_ASPOR
+0.64	14.1	sp|Q8X229|FCR3_CANAL	sp|Q1XGE2|HAC1_ASPOR
+0.65	14.1	sp|P12841|FOS_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.71	14.0	sp|P49716|CEBPD_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.72	14.0	sp|Q554P0|BZPJ_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.74	13.9	sp|Q55E93|BZPE_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.75	13.9	sp|P51984|CREB_CHLVR	sp|Q1XGE2|HAC1_ASPOR
+0.77	13.9	sp|P01102|FOS_MSVFB	sp|Q1XGE2|HAC1_ASPOR
+0.81	13.8	sp|O77628|FOS_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.82	13.8	sp|Q8WYK2|JDP2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.86	13.7	sp|Q60925|DBP_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.9	13.6	sp|P14232|TGA1A_TOBAC	sp|Q1XGE2|HAC1_ASPOR
+0.96	13.6	sp|P16443|DBP_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.97	13.5	sp|Q68EL6|NFIL3_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.98	13.5	sp|P01100|FOS_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1	13.5	sp|Q9C5Q2|AI5L3_ARATH	sp|Q1XGE2|HAC1_ASPOR
+1.1	13.4	sp|Q5FW38|NFIL3_XENTR	sp|Q1XGE2|HAC1_ASPOR
+1.1	13.4	sp|Q8HZP6|FOS_FELCA	sp|Q1XGE2|HAC1_ASPOR
+1.2	13.3	sp|Q9SJN0|ABI5_ARATH	sp|Q1XGE2|HAC1_ASPOR
+1.2	13.2	sp|P42777|GBF4_ARATH	sp|Q1XGE2|HAC1_ASPOR
+1.3	13.1	sp|P15407|FOSL1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.3	13.1	sp|O15525|MAFG_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.4	13.0	sp|P40535|ACA2_YEAST	sp|Q1XGE2|HAC1_ASPOR
+1.5	12.9	sp|A7YY73|MAFF_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+1.6	12.9	sp|Q8PY58|PSMR_METMA	sp|Q1XGE2|HAC1_ASPOR
+1.6	12.8	sp|Q56TN0|FOS_PHORO	sp|Q1XGE2|HAC1_ASPOR
+1.7	12.7	sp|P23050|FOS_AVINK	sp|Q1XGE2|HAC1_ASPOR
+1.8	12.6	sp|Q9LES3|AI5L2_ARATH	sp|Q1XGE2|HAC1_ASPOR
+2	12.5	sp|Q84JK2|FD_ARATH	sp|Q1XGE2|HAC1_ASPOR
+2	12.5	sp|A5PJV0|MAFG_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+2	12.5	sp|O54790|MAFG_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+2	12.5	sp|Q39234|TGA3_ARATH	sp|Q1XGE2|HAC1_ASPOR
+2.2	12.4	sp|P07049|CPPB_NEIGO	sp|Q1XGE2|HAC1_ASPOR
+2.2	12.3	sp|P11939|FOS_CHICK	sp|Q1XGE2|HAC1_ASPOR
+2.5	12.2	sp|P29176|FOSX_MSVFR	sp|Q1XGE2|HAC1_ASPOR
+2.5	12.2	sp|O54791|MAFF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+2.7	12.1	sp|Q8TI88|PSMR_METAC	sp|Q1XGE2|HAC1_ASPOR
+2.8	12.0	sp|O08750|NFIL3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+2.8	12.0	sp|Q76MX4|MAFG_RAT	sp|Q1XGE2|HAC1_ASPOR
+3	11.9	sp|P20482|CNC_DROME	sp|Q1XGE2|HAC1_ASPOR
+3.1	11.9	sp|Q90Z72|NFIL3_CHICK	sp|Q1XGE2|HAC1_ASPOR
+3.2	11.8	sp|Q9VWW0|CREBB_DROME	sp|Q1XGE2|HAC1_ASPOR
+3.2	11.8	sp|Q8BKJ9|SIRT7_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+3.3	11.8	sp|Q56TT7|FOS_PHOCM	sp|Q1XGE2|HAC1_ASPOR
+3.3	11.8	sp|Q6IMZ0|NFIL3_RAT	sp|Q1XGE2|HAC1_ASPOR
+3.5	11.7	sp|P38749|YAP3_YEAST	sp|Q1XGE2|HAC1_ASPOR
+3.7	11.6	sp|Q08D88|NFIL3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+3.8	11.6	sp|Q16649|NFIL3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+3.8	11.6	sp|Q9C7S0|BZI60_ARATH	sp|Q1XGE2|HAC1_ASPOR
+3.9	11.6	sp|P78962|ATF21_SCHPO	sp|Q1XGE2|HAC1_ASPOR
+4	11.5	sp|Q1LZH5|CREM_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+4.2	11.4	sp|B1MX63|THIE_LEUCK	sp|Q1XGE2|HAC1_ASPOR
+4.6	11.3	sp|Q5AVK6|NOP16_EMENI	sp|Q1XGE2|HAC1_ASPOR
+4.6	11.3	sp|Q9ULX9|MAFF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+4.6	11.3	sp|P53567|CEBPG_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+4.8	11.2	sp|Q2V2M9|FHOD3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+4.9	11.2	sp|Q03060|CREM_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+4.9	11.2	sp|O68007|BACB_BACLI	sp|Q1XGE2|HAC1_ASPOR
+5.1	11.2	sp|Q5VPE3|HOX2_ORYSJ	sp|Q1XGE2|HAC1_ASPOR
+5.1	11.2	sp|Q84U86|HOX2_ORYSI	sp|Q1XGE2|HAC1_ASPOR
+5.4	11.1	sp|Q65US7|THIE_MANSM	sp|Q1XGE2|HAC1_ASPOR
+5.4	11.1	sp|P07948|LYN_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+5.4	11.1	sp|Q16534|HLF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+5.5	11.1	sp|Q9XGJ4|GGM13_GNEGN	sp|Q1XGE2|HAC1_ASPOR
+5.8	11.0	sp|P27921|JUND_CHICK	sp|Q1XGE2|HAC1_ASPOR
+5.9	10.9	sp|Q5XHX8|THEG_RAT	sp|Q1XGE2|HAC1_ASPOR
+6	10.9	sp|P18847|ATF3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.1	10.9	sp|P24068|OCS1_MAIZE	sp|Q1XGE2|HAC1_ASPOR
+6.2	10.9	sp|P20393|NR1D1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.3	10.9	sp|P13346|FOSB_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+6.4	10.8	sp|P42775|GBF2_ARATH	sp|Q1XGE2|HAC1_ASPOR
+6.5	10.8	sp|Q09926|PCR1_SCHPO	sp|Q1XGE2|HAC1_ASPOR
+6.9	10.7	sp|P24813|YAP2_YEAST	sp|Q1XGE2|HAC1_ASPOR
+7	10.7	sp|Q64709|HLF_RAT	sp|Q1XGE2|HAC1_ASPOR
+7.3	10.6	sp|Q02100|SKO1_YEAST	sp|Q1XGE2|HAC1_ASPOR
+7.7	10.6	sp|P50198|LINX_PSEPA	sp|Q1XGE2|HAC1_ASPOR
+7.7	10.6	sp|Q6DGM8|JDP2_DANRE	sp|Q1XGE2|HAC1_ASPOR
+7.8	10.6	sp|A2Z0Q0|HOX25_ORYSI	sp|Q1XGE2|HAC1_ASPOR
+7.9	10.5	sp|Q9UPR3|SMG5_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+8.1	10.5	sp|Q41558|HBP1C_WHEAT	sp|Q1XGE2|HAC1_ASPOR
+8.2	10.5	sp|O02756|CEBPD_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+8.6	10.4	sp|Q63315|CAD22_RAT	sp|Q1XGE2|HAC1_ASPOR
+8.7	10.4	sp|Q9WTP5|CAD22_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+9.3	10.3	sp|Q5FUV3|ATE_GLUOX	sp|Q1XGE2|HAC1_ASPOR
+9.5	10.3	sp|Q99091|CPRF3_PETCR	sp|Q1XGE2|HAC1_ASPOR
+9.5	10.3	sp|Q8BW74|HLF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+9.9	10.2	sp|Q9JLC6|TEF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+10	10.2	sp|Q92172|TEF_CHICK	sp|Q1XGE2|HAC1_ASPOR
diff --git a/demotic/regress/phmmer-tbl.out b/demotic/regress/phmmer-tbl.out
new file mode 100644
index 0000000..a85d3a9
--- /dev/null
+++ b/demotic/regress/phmmer-tbl.out
@@ -0,0 +1,261 @@
+7.5e-120	0	1	181	sp|P55685|Y4WG_RHISN	1	181	sp|P55685|Y4WG_RHISN	
+0.00026	0	63	108	sp|P55685|Y4WG_RHISN	39	86	sp|A1VDW9|HEM1_DESVV	
+1.8	0	36	50	sp|P55685|Y4WG_RHISN	185	199	sp|A1VDW9|HEM1_DESVV	
+0.00033	0	63	108	sp|P55685|Y4WG_RHISN	39	86	sp|Q72C23|HEM1_DESVH	
+1.8	0	36	50	sp|P55685|Y4WG_RHISN	185	199	sp|Q72C23|HEM1_DESVH	
+0.00077	0	36	76	sp|P55685|Y4WG_RHISN	93	131	sp|C0ZYA2|RIMP_RHOE4	
+0.53	0	40	65	sp|P55685|Y4WG_RHISN	167	192	sp|C0ZYA2|RIMP_RHOE4	
+0.016	0	101	123	sp|P55685|Y4WG_RHISN	44	66	sp|Q98G87|UBIG_RHILO	
+0.02	0	71	103	sp|P55685|Y4WG_RHISN	122	156	sp|Q98G87|UBIG_RHILO	
+0.00046	0	44	96	sp|P55685|Y4WG_RHISN	54	100	sp|B2VCH7|MTLD_ERWT9	
+2.8	0	40	77	sp|P55685|Y4WG_RHISN	248	282	sp|B2VCH7|MTLD_ERWT9	
+0.0004	0	56	119	sp|P55685|Y4WG_RHISN	304	362	sp|A1WE19|RLMN_VEREI	
+6	0	77	108	sp|P55685|Y4WG_RHISN	135	156	sp|Q2J713|RLMN_FRASC	
+0.00027	0	42	119	sp|P55685|Y4WG_RHISN	324	395	sp|Q2J713|RLMN_FRASC	
+0.0004	0	107	155	sp|P55685|Y4WG_RHISN	126	173	sp|Q9CZP0|UFSP1_MOUSE	
+3.6	0	17	37	sp|P55685|Y4WG_RHISN	192	213	sp|Q9CZP0|UFSP1_MOUSE	
+1.4	0	74	156	sp|P55685|Y4WG_RHISN	105	129	sp|Q21KT6|RLMN_SACD2	
+0.0011	0	67	115	sp|P55685|Y4WG_RHISN	324	366	sp|Q21KT6|RLMN_SACD2	
+0.00035	0	105	152	sp|P55685|Y4WG_RHISN	146	193	sp|Q7W7U1|NADD_BORPA	
+0.02	0	124	158	sp|P55685|Y4WG_RHISN	216	249	sp|Q8C6Y6|ASB14_MOUSE	
+0.26	0	131	166	sp|P55685|Y4WG_RHISN	320	355	sp|Q8C6Y6|ASB14_MOUSE	
+0.68	0	149	178	sp|P55685|Y4WG_RHISN	522	553	sp|Q8C6Y6|ASB14_MOUSE	
+0.00044	0	64	101	sp|P55685|Y4WG_RHISN	22	59	sp|Q8Y3H7|Y003_RALSO	
+0.77	0	93	133	sp|P55685|Y4WG_RHISN	14	53	sp|A4G4J9|RLMN_HERAR	
+0.46	0	136	153	sp|P55685|Y4WG_RHISN	101	118	sp|A4G4J9|RLMN_HERAR	
+0.0085	0	67	117	sp|P55685|Y4WG_RHISN	321	365	sp|A4G4J9|RLMN_HERAR	
+0.00057	0	88	168	sp|P55685|Y4WG_RHISN	135	218	sp|B8F3W8|LEUC_HAEPS	
+0.00041	0	142	173	sp|P55685|Y4WG_RHISN	32	62	sp|Q07074|YH007_YEAST	
+0.76	0	93	133	sp|P55685|Y4WG_RHISN	13	52	sp|A6SZX3|RLMN_JANMA	
+0.49	0	136	153	sp|P55685|Y4WG_RHISN	100	117	sp|A6SZX3|RLMN_JANMA	
+0.0066	0	67	117	sp|P55685|Y4WG_RHISN	322	366	sp|A6SZX3|RLMN_JANMA	
+1.3	0	95	116	sp|P55685|Y4WG_RHISN	135	156	sp|A2SHB8|RLMN_METPP	
+0.00042	0	66	139	sp|P55685|Y4WG_RHISN	319	387	sp|A2SHB8|RLMN_METPP	
+8.7e-232	0	1	345	sp|Q1XGE2|HAC1_ASPOR	1	345	sp|Q1XGE2|HAC1_ASPOR	
+5.8e-173	0	11	344	sp|Q1XGE2|HAC1_ASPOR	16	348	sp|Q8TFU8|HAC1_EMENI	
+5.8e-30	0	47	119	sp|Q1XGE2|HAC1_ASPOR	82	154	sp|Q8TFF3|HAC1_TRIRE	
+7.1	0	209	234	sp|Q1XGE2|HAC1_ASPOR	287	308	sp|Q8TFF3|HAC1_TRIRE	
+0.52	0	315	344	sp|Q1XGE2|HAC1_ASPOR	421	450	sp|Q8TFF3|HAC1_TRIRE	
+5e-16	0	67	119	sp|Q1XGE2|HAC1_ASPOR	23	75	sp|P41546|HAC1_YEAST	
+2.7e-14	0	59	153	sp|Q1XGE2|HAC1_ASPOR	64	158	sp|O24646|HY5_ARATH	
+2.4e-10	0	68	145	sp|Q1XGE2|HAC1_ASPOR	52	139	sp|Q3SZZ2|XBP1_BOVIN	
+3.7e-10	0	72	148	sp|Q1XGE2|HAC1_ASPOR	75	151	sp|Q9SM50|HY5_SOLLC	
+9.4e-10	0	72	186	sp|Q1XGE2|HAC1_ASPOR	58	185	sp|P17861|XBP1_HUMAN	
+4.9e-09	0	72	144	sp|Q1XGE2|HAC1_ASPOR	67	139	sp|Q8W191|HYH_ARATH	
+1.5e-08	0	14	155	sp|Q1XGE2|HAC1_ASPOR	221	363	sp|A1L224|CR3L2_DANRE	
+4.1e-08	0	76	147	sp|Q1XGE2|HAC1_ASPOR	186	257	sp|Q9D2A5|CR3L4_MOUSE	
+4.2e-08	0	73	127	sp|Q1XGE2|HAC1_ASPOR	52	106	sp|Q9R1S4|XBP1_RAT	
+1.1e-07	0	46	175	sp|Q1XGE2|HAC1_ASPOR	363	498	sp|Q54WN7|BZPF_DICDI	
+1.6e-07	0	60	157	sp|Q1XGE2|HAC1_ASPOR	281	373	sp|A2VD01|CR3L2_XENLA	
+9.1e-08	0	77	162	sp|Q1XGE2|HAC1_ASPOR	192	277	sp|Q99090|CPRF2_PETCR	
+2.2e-07	0	77	154	sp|Q1XGE2|HAC1_ASPOR	233	310	sp|Q5FVM5|CR3L3_RAT	
+1.7e-07	0	73	127	sp|Q1XGE2|HAC1_ASPOR	52	106	sp|O35426|XBP1_MOUSE	
+1.7e-07	0	80	151	sp|Q1XGE2|HAC1_ASPOR	182	253	sp|Q61817|CREB3_MOUSE	
+2.3e-07	0	77	154	sp|Q1XGE2|HAC1_ASPOR	233	310	sp|Q91XE9|CR3L3_MOUSE	
+8.7	0	156	180	sp|Q1XGE2|HAC1_ASPOR	69	93	sp|O57342|MAFA_COTJA	
+2.3e-07	0	85	167	sp|Q1XGE2|HAC1_ASPOR	201	281	sp|O57342|MAFA_COTJA	
+4.8e-07	0	78	148	sp|Q1XGE2|HAC1_ASPOR	184	254	sp|Q5UEM7|CR3L4_RAT	
+3.5e-07	0	24	151	sp|Q1XGE2|HAC1_ASPOR	160	284	sp|Q08CW8|CR3L4_XENTR	
+1.8	0	115	178	sp|Q1XGE2|HAC1_ASPOR	15	81	sp|Q90370|MAFB_COTJA	
+1.4e-06	0	53	149	sp|Q1XGE2|HAC1_ASPOR	195	292	sp|Q90370|MAFB_COTJA	
+6.1e-07	0	77	161	sp|Q1XGE2|HAC1_ASPOR	237	321	sp|Q68CJ9|CR3L3_HUMAN	
+7.4e-07	0	78	160	sp|Q1XGE2|HAC1_ASPOR	205	286	sp|Q1LYG4|CR3LB_DANRE	
+8.1e-07	0	78	160	sp|Q1XGE2|HAC1_ASPOR	205	286	sp|Q502F0|CR3LA_DANRE	
+1.8	0	115	178	sp|Q1XGE2|HAC1_ASPOR	15	81	sp|Q90888|MAFB_CHICK	
+1.7e-06	0	52	149	sp|Q1XGE2|HAC1_ASPOR	194	292	sp|Q90888|MAFB_CHICK	
+5e-07	0	77	161	sp|Q1XGE2|HAC1_ASPOR	232	316	sp|Q3SYZ3|CR3L3_BOVIN	
+9.1e-07	0	54	159	sp|Q1XGE2|HAC1_ASPOR	270	370	sp|Q5RCM9|CR3L2_PONAB	
+8.3e-07	0	72	148	sp|Q1XGE2|HAC1_ASPOR	226	303	sp|Q9Y5Q3|MAFB_HUMAN	
+1e-06	0	54	159	sp|Q1XGE2|HAC1_ASPOR	270	370	sp|Q70SY1|CR3L2_HUMAN	
+0.52	0	115	182	sp|Q1XGE2|HAC1_ASPOR	15	86	sp|Q6DE84|MAFB_XENLA	
+1.7e-05	0	70	143	sp|Q1XGE2|HAC1_ASPOR	211	285	sp|Q6DE84|MAFB_XENLA	
+1.3e-06	0	59	160	sp|Q1XGE2|HAC1_ASPOR	271	366	sp|Q9Z125|CR3L1_MOUSE	
+1.1e-06	0	55	159	sp|Q1XGE2|HAC1_ASPOR	271	370	sp|Q8BH52|CR3L2_MOUSE	
+9.1e-07	0	72	148	sp|Q1XGE2|HAC1_ASPOR	226	303	sp|P54842|MAFB_RAT	
+1.3e-06	0	59	159	sp|Q1XGE2|HAC1_ASPOR	275	370	sp|Q6QDP7|CR3L2_RAT	
+9.3e-07	0	71	135	sp|Q1XGE2|HAC1_ASPOR	17	78	sp|Q16520|BATF_HUMAN	
+9.1e-07	0	72	148	sp|Q1XGE2|HAC1_ASPOR	226	303	sp|P54841|MAFB_MOUSE	
+1.1e-06	0	72	147	sp|Q1XGE2|HAC1_ASPOR	226	302	sp|Q2PFS4|MAFB_MACFA	
+8.7	0	156	180	sp|Q1XGE2|HAC1_ASPOR	69	93	sp|O42290|MAFA_CHICK	
+1.1e-06	0	84	167	sp|Q1XGE2|HAC1_ASPOR	200	281	sp|O42290|MAFA_CHICK	
+1.3e-06	0	70	143	sp|Q1XGE2|HAC1_ASPOR	22	95	sp|Q9NR55|BATF3_HUMAN	
+2.6e-06	0	60	156	sp|Q1XGE2|HAC1_ASPOR	272	362	sp|Q96BA8|CR3L1_HUMAN	
+1.6e-06	0	59	160	sp|Q1XGE2|HAC1_ASPOR	270	365	sp|Q66HA2|CR3L1_RAT	
+4.4e-06	0	46	141	sp|Q1XGE2|HAC1_ASPOR	310	401	sp|P17544|ATF7_HUMAN	
+3.6e-06	0	77	150	sp|Q1XGE2|HAC1_ASPOR	169	241	sp|O43889|CREB3_HUMAN	
+2.1e-06	0	46	140	sp|Q1XGE2|HAC1_ASPOR	299	389	sp|Q8R0S1|ATF7_MOUSE	
+5.4e-06	0	46	141	sp|Q1XGE2|HAC1_ASPOR	299	390	sp|Q5R9C9|ATF7_PONAB	
+3e-06	0	71	135	sp|Q1XGE2|HAC1_ASPOR	17	78	sp|O35284|BATF_MOUSE	
+4.8e-06	0	79	151	sp|Q1XGE2|HAC1_ASPOR	149	221	sp|Q8SQ19|CREB3_BOVIN	
+5.5e-06	0	78	150	sp|Q1XGE2|HAC1_ASPOR	212	284	sp|Q8TEY5|CR3L4_HUMAN	
+4.6e-06	0	81	143	sp|Q1XGE2|HAC1_ASPOR	26	88	sp|Q9D275|BATF3_MOUSE	
+1.3	0	116	182	sp|Q1XGE2|HAC1_ASPOR	16	86	sp|Q504L8|MAFB_XENTR	
+1.2e-05	0	54	147	sp|Q1XGE2|HAC1_ASPOR	201	295	sp|Q504L8|MAFB_XENTR	
+4.8e-06	0	78	150	sp|Q1XGE2|HAC1_ASPOR	212	284	sp|Q5UEM8|CR3L4_MACFA	
+1e-05	0	85	167	sp|Q1XGE2|HAC1_ASPOR	203	284	sp|Q4U1U2|MAFA_XENTR	
+1.4	0	114	168	sp|Q1XGE2|HAC1_ASPOR	15	68	sp|P23091|MAF_AVIS4	
+0.00013	0	85	148	sp|Q1XGE2|HAC1_ASPOR	276	339	sp|P23091|MAF_AVIS4	
+1e-05	0	75	131	sp|Q1XGE2|HAC1_ASPOR	204	259	sp|P81269|ATF1_MOUSE	
+1.4	0	114	168	sp|Q1XGE2|HAC1_ASPOR	15	68	sp|Q789F3|MAF_CHICK	
+0.00015	0	85	148	sp|Q1XGE2|HAC1_ASPOR	276	339	sp|Q789F3|MAF_CHICK	
+1.6e-05	0	64	149	sp|Q1XGE2|HAC1_ASPOR	427	507	sp|P29747|CREBA_DROME	
+1.3e-05	0	75	155	sp|Q1XGE2|HAC1_ASPOR	270	346	sp|P18848|ATF4_HUMAN	
+1.2	0	113	168	sp|Q1XGE2|HAC1_ASPOR	14	68	sp|P54844|MAF_RAT	
+0.00013	0	85	148	sp|Q1XGE2|HAC1_ASPOR	286	349	sp|P54844|MAF_RAT	
+1.3	0	113	168	sp|Q1XGE2|HAC1_ASPOR	14	68	sp|O75444|MAF_HUMAN	
+0.00017	0	85	147	sp|Q1XGE2|HAC1_ASPOR	290	352	sp|O75444|MAF_HUMAN	
+1.2e-05	0	81	143	sp|Q1XGE2|HAC1_ASPOR	26	88	sp|P97876|BATF3_RAT	
+9.7e-06	0	63	155	sp|Q1XGE2|HAC1_ASPOR	254	344	sp|Q06507|ATF4_MOUSE	
+1.4	0	113	168	sp|Q1XGE2|HAC1_ASPOR	14	68	sp|A7Z017|MAF_BOVIN	
+0.00017	0	85	147	sp|Q1XGE2|HAC1_ASPOR	294	356	sp|A7Z017|MAF_BOVIN	
+1.2	0	113	168	sp|Q1XGE2|HAC1_ASPOR	14	68	sp|Q0V9K1|MAF_XENTR	
+0.00021	0	85	146	sp|Q1XGE2|HAC1_ASPOR	267	328	sp|Q0V9K1|MAF_XENTR	
+1.9e-05	0	74	131	sp|Q1XGE2|HAC1_ASPOR	204	260	sp|Q08DA8|ATF1_BOVIN	
+1.2e-05	0	78	166	sp|Q1XGE2|HAC1_ASPOR	45	134	sp|O60675|MAFK_HUMAN	
+1.3	0	113	168	sp|Q1XGE2|HAC1_ASPOR	14	68	sp|P54843|MAF_MOUSE	
+0.00019	0	85	148	sp|Q1XGE2|HAC1_ASPOR	287	350	sp|P54843|MAF_MOUSE	
+2e-05	0	74	131	sp|Q1XGE2|HAC1_ASPOR	205	261	sp|P18846|ATF1_HUMAN	
+1.5e-05	0	77	142	sp|Q1XGE2|HAC1_ASPOR	216	281	sp|P42774|GBF1_ARATH	
+1.5e-05	0	78	165	sp|Q1XGE2|HAC1_ASPOR	45	133	sp|Q61827|MAFK_MOUSE	
+2.3e-05	0	80	140	sp|Q1XGE2|HAC1_ASPOR	181	240	sp|P14233|TGA1B_TOBAC	
+3.4e-05	0	47	144	sp|Q1XGE2|HAC1_ASPOR	230	327	sp|Q6NW59|ATF4_DANRE	
+6.1e-05	0	82	133	sp|Q1XGE2|HAC1_ASPOR	165	215	sp|O24160|TGA21_TOBAC	
+5.2	0	115	165	sp|Q1XGE2|HAC1_ASPOR	16	65	sp|Q98UK4|MAF_DANRE	
+8.2e-05	0	85	144	sp|Q1XGE2|HAC1_ASPOR	243	302	sp|Q98UK4|MAF_DANRE	
+4.2e-05	0	85	165	sp|Q1XGE2|HAC1_ASPOR	225	305	sp|A3KMR8|MAFA_DANRE	
+3.5e-05	0	84	164	sp|Q1XGE2|HAC1_ASPOR	52	132	sp|Q90596|MAFK_CHICK	
+5.2e-05	0	75	145	sp|Q1XGE2|HAC1_ASPOR	267	337	sp|Q3ZCH6|ATF4_BOVIN	
+3.5e-05	0	77	145	sp|Q1XGE2|HAC1_ASPOR	65	134	sp|P97875|JDP2_MOUSE	
+3.5e-05	0	77	145	sp|Q1XGE2|HAC1_ASPOR	65	134	sp|Q78E65|JDP2_RAT	
+5.8e-05	0	85	159	sp|Q1XGE2|HAC1_ASPOR	227	301	sp|P12959|OP2_MAIZE	
+2.9	0	141	170	sp|Q1XGE2|HAC1_ASPOR	19	48	sp|Q8K1L0|CREB5_MOUSE	
+3.7e-05	0	51	143	sp|Q1XGE2|HAC1_ASPOR	193	284	sp|Q8K1L0|CREB5_MOUSE	
+6.4e-05	0	77	131	sp|Q1XGE2|HAC1_ASPOR	38	91	sp|Q39140|TGA6_ARATH	
+7.3e-05	0	73	131	sp|Q1XGE2|HAC1_ASPOR	37	91	sp|P23923|HBP1B_WHEAT	
+8.1e-05	0	98	169	sp|Q1XGE2|HAC1_ASPOR	195	263	sp|Q00322|CEBPD_MOUSE	
+7e-05	0	79	131	sp|Q1XGE2|HAC1_ASPOR	40	91	sp|Q39163|TGA5_ARATH	
+8.4e-05	0	80	149	sp|Q1XGE2|HAC1_ASPOR	274	343	sp|Q54RZ9|BZPG_DICDI	
+8.2e-05	0	85	168	sp|Q1XGE2|HAC1_ASPOR	262	348	sp|Q8CF90|MAFA_MOUSE	
+5e-05	0	74	155	sp|Q1XGE2|HAC1_ASPOR	265	342	sp|Q9ES19|ATF4_RAT	
+0.0001	0	79	131	sp|Q1XGE2|HAC1_ASPOR	40	91	sp|P43273|TGA2_ARATH	
+1.5	0	132	182	sp|Q1XGE2|HAC1_ASPOR	36	86	sp|Q98UK5|MAFB_DANRE	
+8.5e-05	0	73	144	sp|Q1XGE2|HAC1_ASPOR	259	331	sp|Q98UK5|MAFB_DANRE	
+0.00015	0	64	125	sp|Q1XGE2|HAC1_ASPOR	316	376	sp|P16951|ATF2_MOUSE	
+3.2	0	140	211	sp|Q1XGE2|HAC1_ASPOR	20	94	sp|P27925|CREB1_BOVIN	
+0.0002	0	78	131	sp|Q1XGE2|HAC1_ASPOR	262	315	sp|P27925|CREB1_BOVIN	
+0.00016	0	63	125	sp|Q1XGE2|HAC1_ASPOR	333	394	sp|P15336|ATF2_HUMAN	
+0.00018	0	38	137	sp|Q1XGE2|HAC1_ASPOR	283	383	sp|O35451|ATF6B_MOUSE	
+0.00014	0	13	118	sp|Q1XGE2|HAC1_ASPOR	185	290	sp|Q2VZV0|IF2_MAGSA	
+0.00015	0	64	139	sp|Q1XGE2|HAC1_ASPOR	210	287	sp|Q6ZDF3|TRAB1_ORYSJ	
+0.0002	0	73	141	sp|Q1XGE2|HAC1_ASPOR	200	265	sp|Q6P788|ATF5_RAT	
+8.3	0	141	171	sp|Q1XGE2|HAC1_ASPOR	170	200	sp|Q02930|CREB5_HUMAN	
+8.8e-05	0	51	143	sp|Q1XGE2|HAC1_ASPOR	344	435	sp|Q02930|CREB5_HUMAN	
+0.0004	0	63	130	sp|Q1XGE2|HAC1_ASPOR	44	113	sp|Q66J36|NFIL3_XENLA	
+7	0	29	51	sp|Q1XGE2|HAC1_ASPOR	196	218	sp|Q66J36|NFIL3_XENLA	
+0.0002	0	85	167	sp|Q1XGE2|HAC1_ASPOR	255	335	sp|Q8NHW3|MAFA_HUMAN	
+0.0003	0	79	234	sp|Q1XGE2|HAC1_ASPOR	134	294	sp|O88479|FOS_MESAU	
+0.00024	0	64	137	sp|Q1XGE2|HAC1_ASPOR	232	306	sp|P23922|HBP1A_WHEAT	
+0.00018	0	84	167	sp|Q1XGE2|HAC1_ASPOR	52	134	sp|Q90595|MAFF_CHICK	
+0.0003	0	73	144	sp|Q1XGE2|HAC1_ASPOR	112	182	sp|P53450|FOS_TAKRU	
+2.3	0	17	42	sp|Q1XGE2|HAC1_ASPOR	316	340	sp|P53450|FOS_TAKRU	
+0.00044	0	64	125	sp|Q1XGE2|HAC1_ASPOR	316	376	sp|Q00969|ATF2_RAT	
+0.00031	0	79	146	sp|Q1XGE2|HAC1_ASPOR	134	200	sp|O97930|FOS_PIG	
+0.00033	0	80	131	sp|Q1XGE2|HAC1_ASPOR	299	350	sp|P79145|CREM_CANFA	
+0.00045	0	37	138	sp|Q1XGE2|HAC1_ASPOR	285	387	sp|Q99941|ATF6B_HUMAN	
+0.00033	0	79	146	sp|Q1XGE2|HAC1_ASPOR	134	200	sp|P01101|FOS_MOUSE	
+0.00021	0	78	131	sp|Q1XGE2|HAC1_ASPOR	278	331	sp|P15337|CREB1_RAT	
+0.00021	0	78	131	sp|Q1XGE2|HAC1_ASPOR	278	331	sp|P16220|CREB1_HUMAN	
+0.00021	0	78	131	sp|Q1XGE2|HAC1_ASPOR	278	331	sp|Q01147|CREB1_MOUSE	
+0.00044	0	66	129	sp|Q1XGE2|HAC1_ASPOR	319	380	sp|O93602|ATF2_CHICK	
+0.0003	0	84	165	sp|Q1XGE2|HAC1_ASPOR	52	134	sp|Q90889|MAFG_CHICK	
+0.00039	0	66	145	sp|Q1XGE2|HAC1_ASPOR	97	175	sp|P79702|FOS_CYPCA	
+0.0004	0	81	140	sp|Q1XGE2|HAC1_ASPOR	208	267	sp|Q8X229|FCR3_CANAL	
+0.00052	0	79	145	sp|Q1XGE2|HAC1_ASPOR	134	199	sp|P12841|FOS_RAT	
+0.00052	0	82	159	sp|Q1XGE2|HAC1_ASPOR	192	253	sp|P49716|CEBPD_HUMAN	
+0.00028	0	79	148	sp|Q1XGE2|HAC1_ASPOR	545	614	sp|Q554P0|BZPJ_DICDI	
+0.00029	0	85	146	sp|Q1XGE2|HAC1_ASPOR	248	309	sp|Q55E93|BZPE_DICDI	
+0.00043	0	76	131	sp|Q1XGE2|HAC1_ASPOR	184	239	sp|P51984|CREB_CHLVR	
+0.0004	0	79	146	sp|Q1XGE2|HAC1_ASPOR	134	200	sp|P01102|FOS_MSVFB	
+0.00052	0	79	144	sp|Q1XGE2|HAC1_ASPOR	134	198	sp|O77628|FOS_BOVIN	
+0.00035	0	78	145	sp|Q1XGE2|HAC1_ASPOR	67	134	sp|Q8WYK2|JDP2_HUMAN	
+0.00092	0	38	135	sp|Q1XGE2|HAC1_ASPOR	210	307	sp|Q60925|DBP_MOUSE	
+0.00058	0	85	125	sp|Q1XGE2|HAC1_ASPOR	74	114	sp|P14232|TGA1A_TOBAC	
+0.00092	0	38	135	sp|Q1XGE2|HAC1_ASPOR	210	307	sp|P16443|DBP_RAT	
+0.00059	0	71	131	sp|Q1XGE2|HAC1_ASPOR	50	111	sp|Q68EL6|NFIL3_DANRE	
+0.00069	0	79	144	sp|Q1XGE2|HAC1_ASPOR	134	198	sp|P01100|FOS_HUMAN	
+0.00059	0	70	133	sp|Q1XGE2|HAC1_ASPOR	175	239	sp|Q9C5Q2|AI5L3_ARATH	
+0.00083	0	71	132	sp|Q1XGE2|HAC1_ASPOR	60	122	sp|Q5FW38|NFIL3_XENTR	
+0.00076	0	79	144	sp|Q1XGE2|HAC1_ASPOR	135	199	sp|Q8HZP6|FOS_FELCA	
+0.00076	0	70	141	sp|Q1XGE2|HAC1_ASPOR	340	411	sp|Q9SJN0|ABI5_ARATH	
+0.00074	0	77	134	sp|Q1XGE2|HAC1_ASPOR	181	238	sp|P42777|GBF4_ARATH	
+0.00072	0	64	202	sp|Q1XGE2|HAC1_ASPOR	88	234	sp|P15407|FOSL1_HUMAN	
+0.00059	0	84	152	sp|Q1XGE2|HAC1_ASPOR	52	120	sp|O15525|MAFG_HUMAN	
+0.00098	0	85	133	sp|Q1XGE2|HAC1_ASPOR	427	475	sp|P40535|ACA2_YEAST	
+0.00069	0	84	174	sp|Q1XGE2|HAC1_ASPOR	52	139	sp|A7YY73|MAFF_BOVIN	
+0.075	0	110	154	sp|Q1XGE2|HAC1_ASPOR	26	70	sp|Q8PY58|PSMR_METMA	
+0.15	0	115	194	sp|Q1XGE2|HAC1_ASPOR	255	332	sp|Q8PY58|PSMR_METMA	
+0.0012	0	79	142	sp|Q1XGE2|HAC1_ASPOR	134	196	sp|Q56TN0|FOS_PHORO	
+0.0011	0	79	140	sp|Q1XGE2|HAC1_ASPOR	88	148	sp|P23050|FOS_AVINK	
+0.0011	0	68	126	sp|Q1XGE2|HAC1_ASPOR	207	268	sp|Q9LES3|AI5L2_ARATH	
+0.0014	0	66	133	sp|Q1XGE2|HAC1_ASPOR	197	264	sp|Q84JK2|FD_ARATH	
+0.0009	0	84	151	sp|Q1XGE2|HAC1_ASPOR	52	119	sp|A5PJV0|MAFG_BOVIN	
+0.0009	0	84	151	sp|Q1XGE2|HAC1_ASPOR	52	119	sp|O54790|MAFG_MOUSE	
+0.0014	0	77	131	sp|Q1XGE2|HAC1_ASPOR	90	144	sp|Q39234|TGA3_ARATH	
+0.0013	0	108	151	sp|Q1XGE2|HAC1_ASPOR	147	194	sp|P07049|CPPB_NEIGO	
+0.0015	0	79	140	sp|Q1XGE2|HAC1_ASPOR	133	193	sp|P11939|FOS_CHICK	
+0.0011	0	80	144	sp|Q1XGE2|HAC1_ASPOR	111	174	sp|P29176|FOSX_MSVFR	
+0.0011	0	84	168	sp|Q1XGE2|HAC1_ASPOR	52	133	sp|O54791|MAFF_MOUSE	
+0.075	0	110	154	sp|Q1XGE2|HAC1_ASPOR	26	70	sp|Q8TI88|PSMR_METAC	
+0.28	0	115	190	sp|Q1XGE2|HAC1_ASPOR	255	330	sp|Q8TI88|PSMR_METAC	
+0.0021	0	69	129	sp|Q1XGE2|HAC1_ASPOR	58	119	sp|O08750|NFIL3_MOUSE	
+0.0013	0	84	149	sp|Q1XGE2|HAC1_ASPOR	79	144	sp|Q76MX4|MAFG_RAT	
+0.0025	0	85	152	sp|Q1XGE2|HAC1_ASPOR	1197	1264	sp|P20482|CNC_DROME	
+0.0021	0	70	130	sp|Q1XGE2|HAC1_ASPOR	59	120	sp|Q90Z72|NFIL3_CHICK	
+0.0022	0	78	131	sp|Q1XGE2|HAC1_ASPOR	296	348	sp|Q9VWW0|CREBB_DROME	
+0.0019	0	74	164	sp|Q1XGE2|HAC1_ASPOR	19	111	sp|Q8BKJ9|SIRT7_MOUSE	
+0.0025	0	79	144	sp|Q1XGE2|HAC1_ASPOR	134	198	sp|Q56TT7|FOS_PHOCM	
+0.0023	0	69	129	sp|Q1XGE2|HAC1_ASPOR	58	119	sp|Q6IMZ0|NFIL3_RAT	
+0.00037	0	81	140	sp|Q1XGE2|HAC1_ASPOR	142	201	sp|P38749|YAP3_YEAST	
+0.0022	0	70	129	sp|Q1XGE2|HAC1_ASPOR	59	119	sp|Q08D88|NFIL3_BOVIN	
+0.0023	0	70	129	sp|Q1XGE2|HAC1_ASPOR	59	119	sp|Q16649|NFIL3_HUMAN	
+0.0026	0	80	142	sp|Q1XGE2|HAC1_ASPOR	137	199	sp|Q9C7S0|BZI60_ARATH	
+0.0022	0	74	143	sp|Q1XGE2|HAC1_ASPOR	261	327	sp|P78962|ATF21_SCHPO	
+0.0027	0	80	130	sp|Q1XGE2|HAC1_ASPOR	299	349	sp|Q1LZH5|CREM_BOVIN	
+0.0029	0	189	227	sp|Q1XGE2|HAC1_ASPOR	139	177	sp|B1MX63|THIE_LEUCK	
+0.0026	0	29	114	sp|Q1XGE2|HAC1_ASPOR	136	219	sp|Q5AVK6|NOP16_EMENI	
+0.0022	0	84	152	sp|Q1XGE2|HAC1_ASPOR	52	120	sp|Q9ULX9|MAFF_HUMAN	
+0.0023	0	90	147	sp|Q1XGE2|HAC1_ASPOR	58	112	sp|P53567|CEBPG_HUMAN	
+0.0081	0	56	167	sp|Q1XGE2|HAC1_ASPOR	412	524	sp|Q2V2M9|FHOD3_HUMAN	
+0.0028	0	80	130	sp|Q1XGE2|HAC1_ASPOR	299	349	sp|Q03060|CREM_HUMAN	
+0.0045	0	181	256	sp|Q1XGE2|HAC1_ASPOR	353	428	sp|O68007|BACB_BACLI	
+0.003	0	106	251	sp|Q1XGE2|HAC1_ASPOR	160	302	sp|Q5VPE3|HOX2_ORYSJ	
+0.003	0	106	251	sp|Q1XGE2|HAC1_ASPOR	160	302	sp|Q84U86|HOX2_ORYSI	
+0.0026	0	135	238	sp|Q1XGE2|HAC1_ASPOR	95	196	sp|Q65US7|THIE_MANSM	
+0.0034	0	36	87	sp|Q1XGE2|HAC1_ASPOR	15	67	sp|P07948|LYN_HUMAN	
+0.00042	0	21	145	sp|Q1XGE2|HAC1_ASPOR	163	287	sp|Q16534|HLF_HUMAN	
+0.0026	0	74	147	sp|Q1XGE2|HAC1_ASPOR	92	165	sp|Q9XGJ4|GGM13_GNEGN	
+0.0036	0	71	139	sp|Q1XGE2|HAC1_ASPOR	230	298	sp|P27921|JUND_CHICK	
+0.0034	0	117	205	sp|Q1XGE2|HAC1_ASPOR	218	300	sp|Q5XHX8|THEG_RAT	
+0.0034	0	76	158	sp|Q1XGE2|HAC1_ASPOR	82	163	sp|P18847|ATF3_HUMAN	
+0.0034	0	84	149	sp|Q1XGE2|HAC1_ASPOR	25	90	sp|P24068|OCS1_MAIZE	
+0.0043	0	83	197	sp|Q1XGE2|HAC1_ASPOR	173	288	sp|P20393|NR1D1_HUMAN	
+0.0039	0	69	164	sp|Q1XGE2|HAC1_ASPOR	142	236	sp|P13346|FOSB_MOUSE	
+0.0051	0	80	152	sp|Q1XGE2|HAC1_ASPOR	246	322	sp|P42775|GBF2_ARATH	
+0.0079	0	74	145	sp|Q1XGE2|HAC1_ASPOR	4	73	sp|Q09926|PCR1_SCHPO	
+0.0045	0	64	121	sp|Q1XGE2|HAC1_ASPOR	29	80	sp|P24813|YAP2_YEAST	
+0.00076	0	24	145	sp|Q1XGE2|HAC1_ASPOR	166	287	sp|Q64709|HLF_RAT	
+0.0047	0	79	120	sp|Q1XGE2|HAC1_ASPOR	425	466	sp|Q02100|SKO1_YEAST	
+0.0045	0	138	190	sp|Q1XGE2|HAC1_ASPOR	164	217	sp|P50198|LINX_PSEPA	
+0.0039	0	76	141	sp|Q1XGE2|HAC1_ASPOR	62	128	sp|Q6DGM8|JDP2_DANRE	
+0.0036	0	53	173	sp|Q1XGE2|HAC1_ASPOR	21	140	sp|A2Z0Q0|HOX25_ORYSI	
+0.0052	0	112	173	sp|Q1XGE2|HAC1_ASPOR	800	860	sp|Q9UPR3|SMG5_HUMAN	
+0.00044	0	77	131	sp|Q1XGE2|HAC1_ASPOR	183	236	sp|Q41558|HBP1C_WHEAT	
+0.005	0	74	164	sp|Q1XGE2|HAC1_ASPOR	171	246	sp|O02756|CEBPD_BOVIN	
+0.0068	0	254	299	sp|Q1XGE2|HAC1_ASPOR	713	759	sp|Q63315|CAD22_RAT	
+0.0068	0	254	299	sp|Q1XGE2|HAC1_ASPOR	713	759	sp|Q9WTP5|CAD22_MOUSE	
+1.4	0	177	224	sp|Q1XGE2|HAC1_ASPOR	2	49	sp|Q5FUV3|ATE_GLUOX	
+0.0033	0	137	193	sp|Q1XGE2|HAC1_ASPOR	48	102	sp|Q5FUV3|ATE_GLUOX	
+0.0068	0	77	132	sp|Q1XGE2|HAC1_ASPOR	190	248	sp|Q99091|CPRF3_PETCR	
+0.00051	0	23	145	sp|Q1XGE2|HAC1_ASPOR	165	287	sp|Q8BW74|HLF_MOUSE	
+0.0066	0	52	134	sp|Q1XGE2|HAC1_ASPOR	201	282	sp|Q9JLC6|TEF_MOUSE	
+0.0059	0	54	139	sp|Q1XGE2|HAC1_ASPOR	214	299	sp|Q92172|TEF_CHICK	
diff --git a/demotic/regress/psiblast-profmark.out b/demotic/regress/psiblast-profmark.out
new file mode 100644
index 0000000..df2b96b
--- /dev/null
+++ b/demotic/regress/psiblast-profmark.out
@@ -0,0 +1,139 @@
+2e-73	276.0	sp|P78283|SECY_VIBCH	A3CM55.1
+3e-73	275.0	sp|P43804|SECY_HAEIN	A3CM55.1
+1e-72	273.0	sp|Q9HWF5|SECY_PSEAE	A3CM55.1
+4e-71	268.0	sp|Q59912|SECY_STRGB	A3CM55.1
+5e-70	264.0	sp|Q05217|SECY_STACT	A3CM55.1
+1e-68	260.0	sp|Q59916|SECY_STRGR	A3CM55.1
+3e-68	259.0	sp|O33006|SECY_MYCLE	A3CM55.1
+4e-68	258.0	sp|P38376|SECY_CORGL	A3CM55.1
+5e-68	258.0	sp|P77964|SECY_SYNY3	A3CM55.1
+2e-67	256.0	sp|P27148|SECY_LACLC	A3CM55.1
+3e-67	255.0	sp|Q8CNF3|SECY_STAES	A3CM55.1
+3e-67	255.0	sp|Q5HM19|SECY_STAEQ	A3CM55.1
+3e-67	255.0	sp|P46785|SECY_STRCO	A3CM55.1
+4e-67	255.0	sp|P49977|SECY_STRLI	A3CM55.1
+4e-67	255.0	sp|P93690|SECY_SPIOL	A3CM55.1
+5e-67	254.0	sp|Q7A086|SECY_STAAW	A3CM55.1
+5e-67	254.0	sp|Q6G791|SECY_STAAS	A3CM55.1
+5e-67	254.0	sp|Q6GEK3|SECY_STAAR	A3CM55.1
+5e-67	254.0	sp|Q7A468|SECY_STAAN	A3CM55.1
+5e-67	254.0	sp|Q99S39|SECY_STAAM	A3CM55.1
+5e-67	254.0	sp|Q5HDX8|SECY_STAAC	A3CM55.1
+5e-67	254.0	sp|O08387|SECY_STAA8	A3CM55.1
+7e-67	254.0	sp|P58118|SECY_LACLA	A3CM55.1
+9e-67	253.0	sp|P0A5Z2|SECY_MYCTU	A3CM55.1
+9e-67	253.0	sp|P0A5Z3|SECY_MYCBO	A3CM55.1
+9e-67	253.0	sp|P43416|SECY_STRSC	A3CM55.1
+2e-66	252.0	sp|Q9XQU4|SECY_PEA	A3CM55.1
+2e-66	252.0	sp|P0AGA5|SECY_SHIFL	A3CM55.1
+2e-66	252.0	sp|P0AGA2|SECY_ECOLI	A3CM55.1
+2e-66	252.0	sp|P0AGA3|SECY_ECOL6	A3CM55.1
+2e-66	252.0	sp|P0AGA4|SECY_ECO57	A3CM55.1
+8e-66	250.0	sp|Q05207|SECY_BACLD	A3CM55.1
+8e-66	250.0	sp|O63066|SECY_MAIZE	A3CM55.1
+2e-65	249.0	sp|P16336|SECY_BACSU	A3CM55.1
+7e-65	247.0	sp|P38375|SECY_BACHD	A3CM55.1
+7e-65	247.0	sp|Q38885|SECY_ARATH	A3CM55.1
+1e-64	246.0	sp|P0A4H1|SECY_SYNP6	A3CM55.1
+1e-64	246.0	sp|P0A4H0|SECY_SYNE7	A3CM55.1
+2e-64	246.0	sp|Q6ZG25|SECY_ORYSJ	A3CM55.1
+8e-64	244.0	sp|P51297|SECY_PORPU	A3CM55.1
+1e-62	240.0	sp|O66491|SECY_AQUAE	A3CM55.1
+1e-62	240.0	sp|Q4UMQ9|SECY_RICFE	A3CM55.1
+3e-62	238.0	sp|Q68W98|SECY_RICTY	A3CM55.1
+4e-62	238.0	sp|Q92GY6|SECY_RICCN	A3CM55.1
+6e-62	238.0	sp|Q1RHP1|SECY_RICBR	A3CM55.1
+7e-62	237.0	sp|P38397|SECY_PYRSA	A3CM55.1
+9e-62	237.0	sp|Q9ZCS5|SECY_RICPR	A3CM55.1
+1e-61	236.0	sp|P28539|SECY_CHLTR	A3CM55.1
+1e-61	236.0	sp|Q1XDJ1|SECY_PORYE	A3CM55.1
+2e-60	233.0	sp|P28527|SECY_GUITH	A3CM55.1
+3e-60	231.0	sp|Q89A85|SECY_BUCBP	A3CM55.1
+6e-60	231.0	sp|P57571|SECY_BUCAI	A3CM55.1
+2e-58	226.0	sp|Q8K969|SECY_BUCAP	A3CM55.1
+9e-58	224.0	sp|Q59548|SECY_MYCPN	A3CM55.1
+2e-57	222.0	sp|Q9PJN1|SECY_CHLMU	A3CM55.1
+3e-57	222.0	sp|P33108|SECY_MICLU	A3CM55.1
+7e-57	221.0	sp|O52351|SECY_MYCGA	A3CM55.1
+2e-56	219.0	sp|P10250|SECY_MYCCT	A3CM55.1
+3e-56	218.0	sp|P47416|SECY_MYCGE	A3CM55.1
+9e-56	217.0	sp|Q9Z7S5|SECY_CHLPN	A3CM55.1
+6e-55	214.0	sp|O25879|SECY_HELPY	A3CM55.1
+7e-55	214.0	sp|Q9ZJS9|SECY_HELPJ	A3CM55.1
+6e-54	211.0	sp|O59442|SECY_PYRHO	A3CM55.1
+7e-54	211.0	sp|P49976|SECY_BUCAK	A3CM55.1
+8e-54	210.0	sp|Q870W0|SC61A_NEUCR	A3CM55.1
+1e-53	210.0	sp|Q9V1V8|SECY_PYRAB	A3CM55.1
+1e-53	210.0	sp|Q8U019|SECY_PYRFU	A3CM55.1
+3e-53	208.0	sp|Q54XK2|SC61A_DICDI	A3CM55.1
+5e-52	205.0	sp|P49461|SECY_ODOSI	A3CM55.1
+8e-52	204.0	sp|O51451|SECY_BORBU	A3CM55.1
+1e-51	203.0	sp|Q5NVM7|S61A2_PONAB	A3CM55.1
+2e-51	203.0	sp|Q96TW8|SC61A_HANAN	A3CM55.1
+2e-51	203.0	sp|P78979|SC61A_YARLI	A3CM55.1
+3e-51	202.0	sp|Q9JLR1|S61A2_MOUSE	A3CM55.1
+3e-51	202.0	sp|Q9H9S3|S61A2_HUMAN	A3CM55.1
+3e-51	202.0	sp|Q2KHX4|S61A2_BOVIN	A3CM55.1
+3e-51	202.0	sp|Q90ZM2|S61A1_DANRE	A3CM55.1
+3e-51	202.0	sp|Q8AY32|SC61A_GADOC	A3CM55.1
+4e-51	201.0	sp|Q98SN8|S61A2_ONCMY	A3CM55.1
+5e-51	201.0	sp|Q5EA68|S61A1_BOVIN	A3CM55.1
+5e-51	201.0	sp|P61621|S61A1_RAT	A3CM55.1
+5e-51	201.0	sp|Q5R5L5|S61A1_PONAB	A3CM55.1
+5e-51	201.0	sp|P61620|S61A1_MOUSE	A3CM55.1
+5e-51	201.0	sp|P61619|S61A1_HUMAN	A3CM55.1
+6e-51	201.0	sp|Q7T278|SC61A_HARAN	A3CM55.1
+6e-51	201.0	sp|Q7T277|SC61A_DISMA	A3CM55.1
+7e-51	201.0	sp|Q8AY36|SC61A_PAGBO	A3CM55.1
+7e-51	201.0	sp|Q8AY35|SC61A_NOTAN	A3CM55.1
+8e-51	201.0	sp|Q8AY34|SC61A_HEMAM	A3CM55.1
+8e-51	201.0	sp|Q90YL4|S61A2_DANRE	A3CM55.1
+9e-51	200.0	sp|Q8AY31|SC61A_BOVVA	A3CM55.1
+1e-50	200.0	sp|P38377|S61A1_CANFA	A3CM55.1
+1e-50	199.0	sp|Q9P8E3|SC61A_CANAL	A3CM55.1
+2e-50	199.0	sp|Q6FRY3|SC61A_CANGA	A3CM55.1
+2e-50	199.0	sp|Q752H7|SC61A_ASHGO	A3CM55.1
+2e-50	199.0	sp|P25014|SECY_CYAPA	A3CM55.1
+3e-50	199.0	sp|Q6CPY9|SC61A_KLULA	A3CM55.1
+4e-50	198.0	sp|Q6BN08|SC61A_DEBHA	A3CM55.1
+4e-50	198.0	sp|Q8AY33|SC61A_BORSA	A3CM55.1
+5e-50	198.0	sp|Q98SN9|S61A1_ONCMY	A3CM55.1
+1e-48	193.0	sp|P46249|SECY_CYACA	A3CM55.1
+2e-48	193.0	sp|P32915|SC61A_YEAST	A3CM55.1
+4e-48	192.0	sp|Q25147|SC61A_HALRO	A3CM55.1
+5e-48	191.0	sp|O26134|SECY_METTH	A3CM55.1
+5e-47	188.0	sp|P38379|SC61A_PYRSA	A3CM55.1
+8e-46	184.0	sp|Q37143|SECY_ANTSP	A3CM55.1
+1e-45	183.0	sp|Q60175|SECY_METJA	A3CM55.1
+3e-44	179.0	sp|P28540|SECY_PAVLU	A3CM55.1
+5e-44	178.0	sp|P79088|SC61A_SCHPO	A3CM55.1
+6e-43	174.0	sp|P28541|SECY_METVA	A3CM55.1
+5e-42	171.0	sp|Q9YDD0|SECY_AERPE	A3CM55.1
+7e-42	171.0	sp|O28377|SECY_ARCFU	A3CM55.1
+3e-40	165.0	sp|P28542|SECY_HALMA	A3CM55.1
+4e-39	162.0	sp|Q9HPB1|SECY_HALSA	A3CM55.1
+2e-37	156.0	sp|Q977V3|SECY_HALVO	A3CM55.1
+2e-32	140.0	sp|P49978|SECY_SULAC	A3CM55.1
+9e-30	131.0	sp|Q9UX84|SECY_SULSO	A3CM55.1
+7e-29	127.0	sp|P38353|SSH1_YEAST	A3CM55.1
+1e-25	117.0	sp|O42965|YGMH_SCHPO	A3CM55.1
+5e-20	99.0	sp|P72179|SECY_PARDE	A3CM55.1
+1e-12	74.0	sp|P28620|SECY_BACST	A3CM55.1
+1	34.0	sp|P0C6V7|R1AB_BEV	A3CM55.1
+1.1	34.0	sp|P0C6F3|R1A_BEV	A3CM55.1
+3.2	33.0	sp|Q49VR4|LTAS_STAS1	A3CM55.1
+3.6	33.0	sp|Q5HR16|LTAS_STAEQ	A3CM55.1
+4	32.0	sp|Q8CQ10|LTAS_STAES	A3CM55.1
+4.4	32.0	sp|Q6P6T5|OCLN_RAT	A3CM55.1
+5.7	32.0	sp|P94493|YNCC_BACSU	A3CM55.1
+6	32.0	sp|Q7A1I3|LTAS_STAAW	A3CM55.1
+6	32.0	sp|Q6GBB1|LTAS_STAAS	A3CM55.1
+6	32.0	sp|Q6GIS3|LTAS_STAAR	A3CM55.1
+6	32.0	sp|Q7A6U1|LTAS_STAAN	A3CM55.1
+6	32.0	sp|Q99VQ4|LTAS_STAAM	A3CM55.1
+6	32.0	sp|Q5HHV4|LTAS_STAAC	A3CM55.1
+6	32.0	sp|Q2G093|LTAS_STAA8	A3CM55.1
+6	32.0	sp|Q2FIS2|LTAS_STAA3	A3CM55.1
+6	32.0	sp|Q2YSL2|LTAS_STAAB	A3CM55.1
+6.7	32.0	sp|P0C6V8|R1AB_BRV1	A3CM55.1
+7.6	32.0	sp|P0C6F4|R1A_BRV1	A3CM55.1
diff --git a/demotic/regress/psiblast-tbl.out b/demotic/regress/psiblast-tbl.out
new file mode 100644
index 0000000..b956383
--- /dev/null
+++ b/demotic/regress/psiblast-tbl.out
@@ -0,0 +1,139 @@
+2e-73	25	1	307	A3CM55.1	76	400	sp|P78283|SECY_VIBCH	Preprotein translocase subunit secY OS=Vibrio
+3e-73	21	1	307	A3CM55.1	76	397	sp|P43804|SECY_HAEIN	Preprotein translocase subunit secY
+1e-72	22	1	307	A3CM55.1	75	394	sp|Q9HWF5|SECY_PSEAE	Preprotein translocase subunit secY
+4e-71	22	1	299	A3CM55.1	73	391	sp|Q59912|SECY_STRGB	Preprotein translocase subunit secY
+5e-70	19	1	299	A3CM55.1	69	383	sp|Q05217|SECY_STACT	Preprotein translocase subunit secY
+1e-68	22	1	302	A3CM55.1	72	393	sp|Q59916|SECY_STRGR	Preprotein translocase subunit secY
+3e-68	20	3	323	A3CM55.1	74	418	sp|O33006|SECY_MYCLE	Preprotein translocase subunit secY
+4e-68	21	1	305	A3CM55.1	73	397	sp|P38376|SECY_CORGL	Preprotein translocase subunit secY
+5e-68	21	1	302	A3CM55.1	79	397	sp|P77964|SECY_SYNY3	Preprotein translocase subunit secY
+2e-67	22	1	308	A3CM55.1	69	397	sp|P27148|SECY_LACLC	Preprotein translocase subunit secY
+3e-67	21	1	289	A3CM55.1	69	373	sp|Q8CNF3|SECY_STAES	Preprotein translocase subunit secY
+3e-67	21	1	289	A3CM55.1	69	373	sp|Q5HM19|SECY_STAEQ	Preprotein translocase subunit secY
+3e-67	21	1	302	A3CM55.1	73	394	sp|P46785|SECY_STRCO	Preprotein translocase subunit secY
+4e-67	21	1	302	A3CM55.1	73	394	sp|P49977|SECY_STRLI	Preprotein translocase subunit secY
+4e-67	19	1	302	A3CM55.1	190	497	sp|P93690|SECY_SPIOL	Preprotein translocase subunit secY,
+5e-67	22	1	306	A3CM55.1	69	391	sp|Q7A086|SECY_STAAW	Preprotein translocase subunit secY
+5e-67	22	1	306	A3CM55.1	69	391	sp|Q6G791|SECY_STAAS	Preprotein translocase subunit secY
+5e-67	22	1	306	A3CM55.1	69	391	sp|Q6GEK3|SECY_STAAR	Preprotein translocase subunit secY
+5e-67	22	1	306	A3CM55.1	69	391	sp|Q7A468|SECY_STAAN	Preprotein translocase subunit secY
+5e-67	22	1	306	A3CM55.1	69	391	sp|Q99S39|SECY_STAAM	Preprotein translocase subunit secY
+5e-67	22	1	306	A3CM55.1	69	391	sp|Q5HDX8|SECY_STAAC	Preprotein translocase subunit secY
+5e-67	22	1	306	A3CM55.1	69	391	sp|O08387|SECY_STAA8	Preprotein translocase subunit secY
+7e-67	22	1	308	A3CM55.1	69	397	sp|P58118|SECY_LACLA	Preprotein translocase subunit secY
+9e-67	20	1	323	A3CM55.1	75	421	sp|P0A5Z2|SECY_MYCTU	Preprotein translocase subunit secY
+9e-67	20	1	323	A3CM55.1	75	421	sp|P0A5Z3|SECY_MYCBO	Preprotein translocase subunit secY
+9e-67	21	1	302	A3CM55.1	73	394	sp|P43416|SECY_STRSC	Preprotein translocase subunit secY
+2e-66	17	1	302	A3CM55.1	171	478	sp|Q9XQU4|SECY_PEA	Preprotein translocase subunit secY,
+2e-66	23	1	307	A3CM55.1	76	399	sp|P0AGA5|SECY_SHIFL	Preprotein translocase subunit secY
+2e-66	23	1	307	A3CM55.1	76	399	sp|P0AGA2|SECY_ECOLI	Preprotein translocase subunit secY
+2e-66	23	1	307	A3CM55.1	76	399	sp|P0AGA3|SECY_ECOL6	Preprotein translocase subunit secY
+2e-66	23	1	307	A3CM55.1	76	399	sp|P0AGA4|SECY_ECO57	Preprotein translocase subunit secY
+8e-66	20	1	303	A3CM55.1	68	388	sp|Q05207|SECY_BACLD	Preprotein translocase subunit secY
+8e-66	17	1	302	A3CM55.1	195	502	sp|O63066|SECY_MAIZE	Preprotein translocase subunit secY,
+2e-65	19	1	306	A3CM55.1	68	392	sp|P16336|SECY_BACSU	Preprotein translocase subunit secY
+7e-65	22	1	300	A3CM55.1	68	385	sp|P38375|SECY_BACHD	Preprotein translocase subunit secY
+7e-65	18	1	303	A3CM55.1	193	501	sp|Q38885|SECY_ARATH	Preprotein translocase subunit secY,
+1e-64	21	1	301	A3CM55.1	83	394	sp|P0A4H1|SECY_SYNP6	Preprotein translocase subunit secY
+1e-64	21	1	301	A3CM55.1	83	394	sp|P0A4H0|SECY_SYNE7	Preprotein translocase subunit secY
+2e-64	17	1	303	A3CM55.1	198	506	sp|Q6ZG25|SECY_ORYSJ	Preprotein translocase subunit secY,
+8e-64	22	1	309	A3CM55.1	62	376	sp|P51297|SECY_PORPU	Preprotein translocase subunit secY
+1e-62	23	1	307	A3CM55.1	71	393	sp|O66491|SECY_AQUAE	Preprotein translocase subunit secY OS=Aquifex
+1e-62	19	1	325	A3CM55.1	70	407	sp|Q4UMQ9|SECY_RICFE	Preprotein translocase subunit secY
+3e-62	18	1	325	A3CM55.1	70	407	sp|Q68W98|SECY_RICTY	Preprotein translocase subunit secY
+4e-62	18	1	325	A3CM55.1	70	407	sp|Q92GY6|SECY_RICCN	Preprotein translocase subunit secY
+6e-62	18	1	325	A3CM55.1	70	407	sp|Q1RHP1|SECY_RICBR	Preprotein translocase subunit secY
+7e-62	22	1	303	A3CM55.1	68	370	sp|P38397|SECY_PYRSA	Preprotein translocase subunit secY (Fragment)
+9e-62	18	1	325	A3CM55.1	70	407	sp|Q9ZCS5|SECY_RICPR	Preprotein translocase subunit secY
+1e-61	21	1	303	A3CM55.1	73	405	sp|P28539|SECY_CHLTR	Preprotein translocase subunit secY
+1e-61	22	1	309	A3CM55.1	62	376	sp|Q1XDJ1|SECY_PORYE	Preprotein translocase subunit secY
+2e-60	19	1	303	A3CM55.1	68	378	sp|P28527|SECY_GUITH	Preprotein translocase subunit secY
+3e-60	20	1	307	A3CM55.1	77	400	sp|Q89A85|SECY_BUCBP	Preprotein translocase subunit secY
+6e-60	23	1	307	A3CM55.1	76	397	sp|P57571|SECY_BUCAI	Preprotein translocase subunit secY
+2e-58	23	1	307	A3CM55.1	76	399	sp|Q8K969|SECY_BUCAP	Preprotein translocase subunit secY
+9e-58	21	3	303	A3CM55.1	85	406	sp|Q59548|SECY_MYCPN	Preprotein translocase subunit secY
+2e-57	20	1	303	A3CM55.1	73	405	sp|Q9PJN1|SECY_CHLMU	Preprotein translocase subunit secY
+3e-57	19	1	303	A3CM55.1	73	394	sp|P33108|SECY_MICLU	Preprotein translocase subunit secY
+7e-57	25	3	303	A3CM55.1	82	401	sp|O52351|SECY_MYCGA	Preprotein translocase subunit secY
+2e-56	21	1	303	A3CM55.1	93	424	sp|P10250|SECY_MYCCT	Preprotein translocase subunit secY
+3e-56	22	3	302	A3CM55.1	83	403	sp|P47416|SECY_MYCGE	Preprotein translocase subunit secY
+9e-56	20	1	303	A3CM55.1	73	405	sp|Q9Z7S5|SECY_CHLPN	Preprotein translocase subunit secY
+6e-55	23	1	307	A3CM55.1	62	382	sp|O25879|SECY_HELPY	Preprotein translocase subunit secY
+7e-55	23	1	307	A3CM55.1	62	382	sp|Q9ZJS9|SECY_HELPJ	Preprotein translocase subunit secY
+6e-54	16	1	304	A3CM55.1	72	431	sp|O59442|SECY_PYRHO	Preprotein translocase subunit secY
+7e-54	21	1	265	A3CM55.1	76	356	sp|P49976|SECY_BUCAK	Preprotein translocase subunit secY (Fragment)
+8e-54	15	1	319	A3CM55.1	76	460	sp|Q870W0|SC61A_NEUCR	Protein transport protein SEC61 subunit alpha
+1e-53	15	1	304	A3CM55.1	72	431	sp|Q9V1V8|SECY_PYRAB	Preprotein translocase subunit secY
+1e-53	16	1	304	A3CM55.1	72	431	sp|Q8U019|SECY_PYRFU	Preprotein translocase subunit secY
+3e-53	13	1	304	A3CM55.1	75	441	sp|Q54XK2|SC61A_DICDI	Protein transport protein Sec61 subunit alpha
+5e-52	22	1	303	A3CM55.1	66	383	sp|P49461|SECY_ODOSI	Preprotein translocase subunit secY
+8e-52	18	1	303	A3CM55.1	72	381	sp|O51451|SECY_BORBU	Preprotein translocase subunit secY
+1e-51	15	1	321	A3CM55.1	75	462	sp|Q5NVM7|S61A2_PONAB	Protein transport protein Sec61 subunit alpha
+2e-51	15	1	304	A3CM55.1	76	442	sp|Q96TW8|SC61A_HANAN	Protein transport protein SEC61 subunit alpha
+2e-51	13	1	303	A3CM55.1	76	441	sp|P78979|SC61A_YARLI	Protein transport protein SEC61 subunit alpha
+3e-51	15	1	321	A3CM55.1	75	462	sp|Q9JLR1|S61A2_MOUSE	Protein transport protein Sec61 subunit alpha
+3e-51	15	1	321	A3CM55.1	75	462	sp|Q9H9S3|S61A2_HUMAN	Protein transport protein Sec61 subunit alpha
+3e-51	15	1	321	A3CM55.1	75	462	sp|Q2KHX4|S61A2_BOVIN	Protein transport protein Sec61 subunit alpha
+3e-51	13	1	321	A3CM55.1	75	462	sp|Q90ZM2|S61A1_DANRE	Protein transport protein Sec61 subunit
+3e-51	13	1	321	A3CM55.1	75	462	sp|Q8AY32|SC61A_GADOC	Protein transport protein Sec61 subunit alpha
+4e-51	13	1	321	A3CM55.1	75	462	sp|Q98SN8|S61A2_ONCMY	Protein transport protein Sec61 subunit alpha
+5e-51	14	1	321	A3CM55.1	75	462	sp|Q5EA68|S61A1_BOVIN	Protein transport protein Sec61 subunit alpha
+5e-51	14	1	321	A3CM55.1	75	462	sp|P61621|S61A1_RAT	Protein transport protein Sec61 subunit alpha
+5e-51	14	1	321	A3CM55.1	75	462	sp|Q5R5L5|S61A1_PONAB	Protein transport protein Sec61 subunit alpha
+5e-51	14	1	321	A3CM55.1	75	462	sp|P61620|S61A1_MOUSE	Protein transport protein Sec61 subunit alpha
+5e-51	14	1	321	A3CM55.1	75	462	sp|P61619|S61A1_HUMAN	Protein transport protein Sec61 subunit alpha
+6e-51	13	1	321	A3CM55.1	75	462	sp|Q7T278|SC61A_HARAN	Protein transport protein Sec61 subunit alpha
+6e-51	13	1	321	A3CM55.1	75	462	sp|Q7T277|SC61A_DISMA	Protein transport protein Sec61 subunit alpha
+7e-51	13	1	321	A3CM55.1	75	462	sp|Q8AY36|SC61A_PAGBO	Protein transport protein Sec61 subunit alpha
+7e-51	13	1	321	A3CM55.1	75	462	sp|Q8AY35|SC61A_NOTAN	Protein transport protein Sec61 subunit alpha
+8e-51	14	1	321	A3CM55.1	75	462	sp|Q8AY34|SC61A_HEMAM	Protein transport protein Sec61 subunit alpha
+8e-51	14	1	321	A3CM55.1	75	462	sp|Q90YL4|S61A2_DANRE	Protein transport protein Sec61 subunit
+9e-51	13	1	321	A3CM55.1	75	462	sp|Q8AY31|SC61A_BOVVA	Protein transport protein Sec61 subunit alpha
+1e-50	14	1	321	A3CM55.1	75	462	sp|P38377|S61A1_CANFA	Protein transport protein Sec61 subunit alpha
+1e-50	15	1	304	A3CM55.1	76	442	sp|Q9P8E3|SC61A_CANAL	Protein transport protein SEC61 subunit alpha
+2e-50	14	1	304	A3CM55.1	75	442	sp|Q6FRY3|SC61A_CANGA	Protein transport protein SEC61 subunit alpha
+2e-50	13	1	304	A3CM55.1	75	443	sp|Q752H7|SC61A_ASHGO	Protein transport protein SEC61 subunit alpha
+2e-50	20	1	310	A3CM55.1	109	441	sp|P25014|SECY_CYAPA	Preprotein translocase subunit secY
+3e-50	13	1	304	A3CM55.1	75	443	sp|Q6CPY9|SC61A_KLULA	Protein transport protein SEC61 subunit alpha
+4e-50	14	1	304	A3CM55.1	76	442	sp|Q6BN08|SC61A_DEBHA	Protein transport protein SEC61 subunit alpha
+4e-50	13	1	321	A3CM55.1	75	462	sp|Q8AY33|SC61A_BORSA	Protein transport protein Sec61 subunit alpha
+5e-50	13	1	321	A3CM55.1	75	462	sp|Q98SN9|S61A1_ONCMY	Protein transport protein Sec61 subunit alpha
+1e-48	18	1	303	A3CM55.1	62	368	sp|P46249|SECY_CYACA	Preprotein translocase subunit secY
+2e-48	14	1	304	A3CM55.1	76	443	sp|P32915|SC61A_YEAST	Protein transport protein SEC61
+4e-48	15	1	321	A3CM55.1	75	461	sp|Q25147|SC61A_HALRO	Protein transport protein Sec61 subunit alpha
+5e-48	15	1	298	A3CM55.1	73	413	sp|O26134|SECY_METTH	Preprotein translocase subunit secY
+5e-47	16	1	304	A3CM55.1	78	447	sp|P38379|SC61A_PYRSA	Protein transport protein Sec61 subunit alpha
+8e-46	19	1	303	A3CM55.1	62	364	sp|Q37143|SECY_ANTSP	Preprotein translocase subunit secY
+1e-45	14	1	304	A3CM55.1	69	399	sp|Q60175|SECY_METJA	Preprotein translocase subunit secY
+3e-44	19	1	320	A3CM55.1	66	396	sp|P28540|SECY_PAVLU	Preprotein translocase subunit secY OS=Pavlova
+5e-44	13	1	304	A3CM55.1	76	442	sp|P79088|SC61A_SCHPO	Protein transport protein sec61 subunit alpha
+6e-43	14	1	304	A3CM55.1	68	400	sp|P28541|SECY_METVA	Preprotein translocase subunit secY
+5e-42	13	1	304	A3CM55.1	73	417	sp|Q9YDD0|SECY_AERPE	Preprotein translocase subunit secY
+7e-42	11	1	304	A3CM55.1	73	452	sp|O28377|SECY_ARCFU	Preprotein translocase subunit secY
+3e-40	13	1	304	A3CM55.1	73	449	sp|P28542|SECY_HALMA	Preprotein translocase subunit secY
+4e-39	12	1	304	A3CM55.1	72	450	sp|Q9HPB1|SECY_HALSA	Preprotein translocase subunit secY
+2e-37	11	1	304	A3CM55.1	73	449	sp|Q977V3|SECY_HALVO	Preprotein translocase subunit secY
+2e-32	12	1	304	A3CM55.1	74	426	sp|P49978|SECY_SULAC	Preprotein translocase subunit secY
+9e-30	13	1	304	A3CM55.1	73	432	sp|Q9UX84|SECY_SULSO	Preprotein translocase subunit secY
+7e-29	15	1	304	A3CM55.1	78	448	sp|P38353|SSH1_YEAST	Sec sixty-one protein homolog OS=Saccharomyces
+1e-25	10	1	300	A3CM55.1	76	442	sp|O42965|YGMH_SCHPO	Uncharacterized protein C19G7.17
+5e-20	18	186	297	A3CM55.1	1	111	sp|P72179|SECY_PARDE	Preprotein translocase subunit secY (Fragment)
+1e-12	35	247	303	A3CM55.1	1	57	sp|P28620|SECY_BACST	Preprotein translocase subunit secY (Fragment)
+1.0	11	135	232	A3CM55.1	3061	3154	sp|P0C6V7|R1AB_BEV	Replicase polyprotein 1ab OS=Berne virus GN=rep
+1.1	11	135	232	A3CM55.1	3061	3154	sp|P0C6F3|R1A_BEV	Replicase polyprotein 1a OS=Berne virus GN=1a PE=1
+3.2	13	70	149	A3CM55.1	11	91	sp|Q49VR4|LTAS_STAS1	Glycerol phosphate lipoteichoic acid synthase
+3.6	9	60	149	A3CM55.1	1	91	sp|Q5HR16|LTAS_STAEQ	Glycerol phosphate lipoteichoic acid synthase
+4.0	10	60	149	A3CM55.1	1	91	sp|Q8CQ10|LTAS_STAES	Glycerol phosphate lipoteichoic acid synthase
+4.4	8	42	155	A3CM55.1	142	270	sp|Q6P6T5|OCLN_RAT	Occludin OS=Rattus norvegicus GN=Ocln PE=2 SV=1
+5.7	13	44	146	A3CM55.1	332	436	sp|P94493|YNCC_BACSU	Putative metabolite transport protein yncC
+6.0	11	70	149	A3CM55.1	11	91	sp|Q7A1I3|LTAS_STAAW	Glycerol phosphate lipoteichoic acid synthase
+6.0	11	70	149	A3CM55.1	11	91	sp|Q6GBB1|LTAS_STAAS	Glycerol phosphate lipoteichoic acid synthase
+6.0	11	70	149	A3CM55.1	11	91	sp|Q6GIS3|LTAS_STAAR	Glycerol phosphate lipoteichoic acid synthase
+6.0	11	70	149	A3CM55.1	11	91	sp|Q7A6U1|LTAS_STAAN	Glycerol phosphate lipoteichoic acid synthase
+6.0	11	70	149	A3CM55.1	11	91	sp|Q99VQ4|LTAS_STAAM	Glycerol phosphate lipoteichoic acid synthase
+6.0	11	70	149	A3CM55.1	11	91	sp|Q5HHV4|LTAS_STAAC	Glycerol phosphate lipoteichoic acid synthase
+6.0	11	70	149	A3CM55.1	11	91	sp|Q2G093|LTAS_STAA8	Glycerol phosphate lipoteichoic acid synthase
+6.0	11	70	149	A3CM55.1	11	91	sp|Q2FIS2|LTAS_STAA3	Glycerol phosphate lipoteichoic acid synthase
+6.0	11	70	149	A3CM55.1	11	91	sp|Q2YSL2|LTAS_STAAB	Glycerol phosphate lipoteichoic acid synthase
+6.7	11	108	241	A3CM55.1	2926	3042	sp|P0C6V8|R1AB_BRV1	Replicase polyprotein 1ab OS=Breda virus 1 GN=rep
+7.6	11	108	241	A3CM55.1	2926	3042	sp|P0C6F4|R1A_BRV1	Replicase polyprotein 1a OS=Breda virus 1 GN=1a
diff --git a/demotic/regress/ssearch-profmark.out b/demotic/regress/ssearch-profmark.out
new file mode 100644
index 0000000..748a56a
--- /dev/null
+++ b/demotic/regress/ssearch-profmark.out
@@ -0,0 +1,165 @@
+1.4e-78	292.6	sp|P55685|Y4WG_RHISN	sp|P55685|Y4WG_RHISN
+4.1	32.9	sp|Q7SY73|ABH6B_XENLA	sp|P55685|Y4WG_RHISN
+1.6e-109	397.3	sp|Q1XGE2|HAC1_ASPOR	sp|Q1XGE2|HAC1_ASPOR
+2e-82	307.2	sp|Q8TFU8|HAC1_EMENI	sp|Q1XGE2|HAC1_ASPOR
+1.7e-15	85.3	sp|Q8TFF3|HAC1_TRIRE	sp|Q1XGE2|HAC1_ASPOR
+4.9e-06	52.9	sp|P41546|HAC1_YEAST	sp|Q1XGE2|HAC1_ASPOR
+0.00016	47.5	sp|O24646|HY5_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.0042	43.3	sp|P17861|XBP1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0048	43.1	sp|Q3SZZ2|XBP1_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.0068	43.6	sp|A1L224|CR3L2_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.0083	41.6	sp|Q9SM50|HY5_SOLLC	sp|Q1XGE2|HAC1_ASPOR
+0.0097	43.1	sp|Q8BH52|CR3L2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.01	43.3	sp|Q54WN7|BZPF_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.021	43.3	sp|A3LYI0|NST1_PICST	sp|Q1XGE2|HAC1_ASPOR
+0.028	41.6	sp|Q66HA2|CR3L1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.035	41.1	sp|Q3SYZ3|CR3L3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.036	41.2	sp|Q9Z125|CR3L1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.045	40.9	sp|Q96BA8|CR3L1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.045	40.9	sp|Q70SY1|CR3L2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.058	40.5	sp|Q5RCM9|CR3L2_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.071	39.9	sp|Q61817|CREB3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.074	40.2	sp|A2VD01|CR3L2_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.076	39.9	sp|Q08CW8|CR3L4_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.082	40.0	sp|Q6QDP7|CR3L2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.12	38.9	sp|P13346|FOSB_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.14	39.2	sp|Q91XE9|CR3L3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.14	40.7	sp|Q5A2K0|NST1_CANAL	sp|Q1XGE2|HAC1_ASPOR
+0.17	37.2	sp|Q8W191|HYH_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.17	38.3	sp|Q9TUB3|FOSB_CANFA	sp|Q1XGE2|HAC1_ASPOR
+0.19	38.7	sp|Q5FVM5|CR3L3_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.2	37.8	sp|P0C5H8|KAPC_EMENI	sp|Q1XGE2|HAC1_ASPOR
+0.25	37.8	sp|P53539|FOSB_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.29	37.6	sp|P79702|FOS_CYPCA	sp|Q1XGE2|HAC1_ASPOR
+0.3	39.3	sp|Q0D9R7|ARFS_ORYSJ	sp|Q1XGE2|HAC1_ASPOR
+0.32	37.1	sp|P15407|FOSL1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.37	39.0	sp|Q5B3C8|NST1_EMENI	sp|Q1XGE2|HAC1_ASPOR
+0.38	38.5	sp|Q9WVS8|MK07_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.4	37.3	sp|O97930|FOS_PIG	sp|Q1XGE2|HAC1_ASPOR
+0.41	37.1	sp|Q06507|ATF4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.59	36.5	sp|Q90370|MAFB_COTJA	sp|Q1XGE2|HAC1_ASPOR
+0.59	36.5	sp|Q90888|MAFB_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.7	36.8	sp|Q68CJ9|CR3L3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.73	35.3	sp|Q09926|PCR1_SCHPO	sp|Q1XGE2|HAC1_ASPOR
+0.74	39.8	sp|O88778|BSN_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.77	36.8	sp|Q8VCH8|UBXN4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.79	36.3	sp|Q9D2A5|CR3L4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.79	38.1	sp|A4R2R1|NST1_MAGGR	sp|Q1XGE2|HAC1_ASPOR
+0.85	36.1	sp|P18848|ATF4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.92	36.1	sp|O88479|FOS_MESAU	sp|Q1XGE2|HAC1_ASPOR
+0.94	37.1	sp|A5PKJ4|MK07_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+1	37.9	sp|Q1DQC1|PAN1_COCIM	sp|Q1XGE2|HAC1_ASPOR
+1	35.9	sp|P01101|FOS_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1	35.8	sp|Q6NW59|ATF4_DANRE	sp|Q1XGE2|HAC1_ASPOR
+1.1	37.9	sp|Q76LL6|FHOD3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.1	35.9	sp|Q8TEY5|CR3L4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.1	35.9	sp|Q99090|CPRF2_PETCR	sp|Q1XGE2|HAC1_ASPOR
+1.2	36.1	sp|Q5R9C9|ATF7_PONAB	sp|Q1XGE2|HAC1_ASPOR
+1.2	36.1	sp|P17544|ATF7_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.2	35.8	sp|Q5UEM8|CR3L4_MACFA	sp|Q1XGE2|HAC1_ASPOR
+1.3	35.4	sp|P51145|FOSL2_RAT	sp|Q1XGE2|HAC1_ASPOR
+1.3	35.6	sp|P01100|FOS_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.4	36.6	sp|Q03173|ENAH_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.4	35.3	sp|Q9Y5Q3|MAFB_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.5	34.9	sp|Q9R1S4|XBP1_RAT	sp|Q1XGE2|HAC1_ASPOR
+1.5	35.4	sp|P01102|FOS_MSVFB	sp|Q1XGE2|HAC1_ASPOR
+1.5	34.9	sp|P10158|FOSL1_RAT	sp|Q1XGE2|HAC1_ASPOR
+1.6	37.1	sp|Q6Y7W8|PERQ2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.6	35.1	sp|P15408|FOSL2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.7	35.4	sp|Q502F0|CR3LA_DANRE	sp|Q1XGE2|HAC1_ASPOR
+1.8	34.7	sp|A2R346|KAPC_ASPNC	sp|Q1XGE2|HAC1_ASPOR
+1.8	34.9	sp|Q2PFS4|MAFB_MACFA	sp|Q1XGE2|HAC1_ASPOR
+1.8	35.2	sp|Q8R0S1|ATF7_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.9	34.6	sp|P48755|FOSL1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.9	36.1	sp|Q9UQ88|CD11A_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+2	33.4	sp|Q16520|BATF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+2	34.6	sp|Q0CEI3|KAPC_ASPTN	sp|Q1XGE2|HAC1_ASPOR
+2	34.7	sp|P54842|MAFB_RAT	sp|Q1XGE2|HAC1_ASPOR
+2	35.4	sp|P29747|CREBA_DROME	sp|Q1XGE2|HAC1_ASPOR
+2	34.7	sp|P47930|FOSL2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+2.1	35.1	sp|Q63ZM7|STABP_XENLA	sp|Q1XGE2|HAC1_ASPOR
+2.1	34.9	sp|Q91496|FOS_TETFL	sp|Q1XGE2|HAC1_ASPOR
+2.1	34.4	sp|O35426|XBP1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+2.2	34.7	sp|Q9ES19|ATF4_RAT	sp|Q1XGE2|HAC1_ASPOR
+2.3	34.2	sp|O02756|CEBPD_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+2.3	34.6	sp|P54841|MAFB_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+2.3	34.4	sp|A1C9M5|KAPC_ASPCL	sp|Q1XGE2|HAC1_ASPOR
+2.3	34.7	sp|Q8SQ19|CREB3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+2.4	34.7	sp|O77628|FOS_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+2.4	35.7	sp|Q6NS15|MED15_XENLA	sp|Q1XGE2|HAC1_ASPOR
+2.5	33.9	sp|P94517|YSCB_BACSU	sp|Q1XGE2|HAC1_ASPOR
+2.5	34.4	sp|Q504L8|MAFB_XENTR	sp|Q1XGE2|HAC1_ASPOR
+2.5	34.2	sp|O57342|MAFA_COTJA	sp|Q1XGE2|HAC1_ASPOR
+2.7	34.6	sp|P12841|FOS_RAT	sp|Q1XGE2|HAC1_ASPOR
+2.7	34.6	sp|Q8HZP6|FOS_FELCA	sp|Q1XGE2|HAC1_ASPOR
+2.7	34.6	sp|Q56TT7|FOS_PHOCM	sp|Q1XGE2|HAC1_ASPOR
+2.7	35.7	sp|Q2VZV0|IF2_MAGSA	sp|Q1XGE2|HAC1_ASPOR
+2.8	34.4	sp|Q3ZCH6|ATF4_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+2.8	34.9	sp|Q5HZY0|UBXN4_RAT	sp|Q1XGE2|HAC1_ASPOR
+2.8	35.6	sp|P0C865|MK07_RAT	sp|Q1XGE2|HAC1_ASPOR
+2.9	33.9	sp|Q9N0J3|CEBPD_SHEEP	sp|Q1XGE2|HAC1_ASPOR
+2.9	34.4	sp|Q5UEM7|CR3L4_RAT	sp|Q1XGE2|HAC1_ASPOR
+3	35.6	sp|A0JMK9|CAF1A_DANRE	sp|Q1XGE2|HAC1_ASPOR
+3.2	35.9	sp|Q96JK9|MAML3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+3.2	32.7	sp|Q9NR55|BATF3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+3.2	36.2	sp|Q9C0A6|SETD5_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+3.4	35.2	sp|B3DM43|SOX5_XENTR	sp|Q1XGE2|HAC1_ASPOR
+3.5	35.4	sp|A5FV21|IF2_ACICJ	sp|Q1XGE2|HAC1_ASPOR
+3.6	34.0	sp|Q8K1L0|CREB5_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+3.6	36.9	sp|Q9H254|SPTN4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+3.6	36.0	sp|B2AWS3|PAN1_PODAN	sp|Q1XGE2|HAC1_ASPOR
+4	32.7	sp|Q61827|MAFK_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+4	32.7	sp|O60675|MAFK_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+4.2	35.9	sp|Q4QRL3|CC88B_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+4.3	33.9	sp|P53450|FOS_TAKRU	sp|Q1XGE2|HAC1_ASPOR
+4.4	37.2	sp|Q9UPA5|BSN_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+4.4	37.2	sp|O88737|BSN_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+4.5	33.5	sp|P42774|GBF1_ARATH	sp|Q1XGE2|HAC1_ASPOR
+4.6	34.9	sp|Q7ZVN7|MED15_DANRE	sp|Q1XGE2|HAC1_ASPOR
+4.6	33.4	sp|O42290|MAFA_CHICK	sp|Q1XGE2|HAC1_ASPOR
+4.7	35.2	sp|A9V549|EIF3A_MONBE	sp|Q1XGE2|HAC1_ASPOR
+4.8	32.0	sp|Q9D275|BATF3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+4.8	34.4	sp|Q5RCJ1|CIP4_PONAB	sp|Q1XGE2|HAC1_ASPOR
+5	33.7	sp|O43889|CREB3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+5.1	32.0	sp|O35284|BATF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+5.1	33.2	sp|Q2UNX4|KAPC_ASPOR	sp|Q1XGE2|HAC1_ASPOR
+5.1	34.0	sp|Q02930|CREB5_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+5.2	35.0	sp|Q6P9R4|ARHGI_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+5.3	34.9	sp|Q5F489|TAF3_CHICK	sp|Q1XGE2|HAC1_ASPOR
+5.3	34.9	sp|Q5HZG4|TAF3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+5.4	35.4	sp|Q9UKV3|ACINU_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+5.4	34.9	sp|Q5KGK5|EIF3A_CRYNE	sp|Q1XGE2|HAC1_ASPOR
+5.5	33.5	sp|Q56TN0|FOS_PHORO	sp|Q1XGE2|HAC1_ASPOR
+6.1	34.5	sp|Q3KQU3|MA7D1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.1	34.0	sp|Q15642|CIP4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.2	33.5	sp|Q1LYG4|CR3LB_DANRE	sp|Q1XGE2|HAC1_ASPOR
+6.4	33.0	sp|Q6DE84|MAFB_XENLA	sp|Q1XGE2|HAC1_ASPOR
+6.6	33.0	sp|P18625|FOSL2_CHICK	sp|Q1XGE2|HAC1_ASPOR
+6.7	36.0	sp|Q3UHR0|BAHC1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+6.8	32.9	sp|Q8BW74|HLF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+6.8	32.9	sp|Q16534|HLF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.9	33.9	sp|Q9NZ53|PDXL2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.9	35.7	sp|Q7TSC1|BAT2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+7.1	34.0	sp|O35451|ATF6B_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+7.2	34.0	sp|Q99941|ATF6B_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+7.3	34.2	sp|Q3UIW5|RNF10_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+7.5	35.2	sp|Q6C908|PAN1_YARLI	sp|Q1XGE2|HAC1_ASPOR
+7.8	35.0	sp|Q9W705|NCOA2_XENLA	sp|Q1XGE2|HAC1_ASPOR
+7.9	34.7	sp|O60841|IF2P_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+7.9	35.7	sp|P15205|MAP1B_RAT	sp|Q1XGE2|HAC1_ASPOR
+8.3	33.2	sp|Q9M7Q3|AI5L6_ARATH	sp|Q1XGE2|HAC1_ASPOR
+8.3	33.2	sp|Q69022|EBNA2_EBVA8	sp|Q1XGE2|HAC1_ASPOR
+8.3	34.2	sp|Q9ES64|USH1C_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+8.4	32.5	sp|Q4U1U2|MAFA_XENTR	sp|Q1XGE2|HAC1_ASPOR
+8.5	33.2	sp|P29681|IMPE2_DROME	sp|Q1XGE2|HAC1_ASPOR
+8.6	34.0	sp|Q54Y73|BZPD_DICDI	sp|Q1XGE2|HAC1_ASPOR
+8.6	32.5	sp|Q64709|HLF_RAT	sp|Q1XGE2|HAC1_ASPOR
+8.8	35.3	sp|Q6MG48|BAT2_RAT	sp|Q1XGE2|HAC1_ASPOR
+9	34.2	sp|Q54HX6|MYBI_DICDI	sp|Q1XGE2|HAC1_ASPOR
+9.1	31.5	sp|Q90596|MAFK_CHICK	sp|Q1XGE2|HAC1_ASPOR
+9.2	33.7	sp|Q4VYS1|FOXP2_XENLA	sp|Q1XGE2|HAC1_ASPOR
+9.5	32.8	sp|Q54NF3|Y6434_DICDI	sp|Q1XGE2|HAC1_ASPOR
+9.5	34.7	sp|Q0CPW4|PAN1_ASPTN	sp|Q1XGE2|HAC1_ASPOR
+9.7	33.3	sp|Q8N8S7|ENAH_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+9.7	33.2	sp|Q00312|RBF1_CANAL	sp|Q1XGE2|HAC1_ASPOR
+9.9	35.2	sp|P48634|BAT2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
diff --git a/demotic/regress/ssearch-tbl.out b/demotic/regress/ssearch-tbl.out
new file mode 100644
index 0000000..f0ec10d
--- /dev/null
+++ b/demotic/regress/ssearch-tbl.out
@@ -0,0 +1,165 @@
+1.4e-78	100	1	181	sp|P55685|Y4WG_RHISN	1	181	sp|P55685|Y4WG_RHISN	Uncharacterized protein y4wG OS=R 
+4.1	24	41	164	sp|P55685|Y4WG_RHISN	65	189	sp|Q7SY73|ABH6B_XENLA	Monoacylglycerol lipase abhd6-B  
+1.6e-109	100	1	345	sp|Q1XGE2|HAC1_ASPOR	1	345	sp|Q1XGE2|HAC1_ASPOR	Transcriptional activator hacA OS 
+2e-82	78	13	344	sp|Q1XGE2|HAC1_ASPOR	18	348	sp|Q8TFU8|HAC1_EMENI	Transcriptional activator hacA OS 
+1.7e-15	31	7	344	sp|Q1XGE2|HAC1_ASPOR	43	450	sp|Q8TFF3|HAC1_TRIRE	Transcriptional activator hac1 OS 
+4.9e-06	32	63	270	sp|Q1XGE2|HAC1_ASPOR	16	216	sp|P41546|HAC1_YEAST	Transcriptional activator HAC1 OS 
+0.00016	31	6	167	sp|Q1XGE2|HAC1_ASPOR	3	167	sp|O24646|HY5_ARATH	Transcription factor HY5 OS=Arabid 
+0.0042	28	16	187	sp|Q1XGE2|HAC1_ASPOR	10	186	sp|P17861|XBP1_HUMAN	X-box-binding protein 1 OS=Homo s 
+0.0048	29	16	206	sp|Q1XGE2|HAC1_ASPOR	10	196	sp|Q3SZZ2|XBP1_BOVIN	X-box-binding protein 1 OS=Bos ta 
+0.0068	32	4	152	sp|Q1XGE2|HAC1_ASPOR	210	360	sp|A1L224|CR3L2_DANRE	Cyclic AMP-responsive element-bi 
+0.0083	36	60	154	sp|Q1XGE2|HAC1_ASPOR	66	157	sp|Q9SM50|HY5_SOLLC	Transcription factor HY5 OS=Solanu 
+0.0097	24	18	297	sp|Q1XGE2|HAC1_ASPOR	234	518	sp|Q8BH52|CR3L2_MOUSE	Cyclic AMP-responsive element-bi 
+0.01	24	46	270	sp|Q1XGE2|HAC1_ASPOR	363	593	sp|Q54WN7|BZPF_DICDI	Probable basic-leucine zipper tra 
+0.021	26	41	332	sp|Q1XGE2|HAC1_ASPOR	727	1001	sp|A3LYI0|NST1_PICST	Stress response protein NST1 OS=P 
+0.028	25	4	290	sp|Q1XGE2|HAC1_ASPOR	214	499	sp|Q66HA2|CR3L1_RAT	Cyclic AMP-responsive element-bind 
+0.035	26	48	275	sp|Q1XGE2|HAC1_ASPOR	213	434	sp|Q3SYZ3|CR3L3_BOVIN	Cyclic AMP-responsive element-bi 
+0.036	26	4	232	sp|Q1XGE2|HAC1_ASPOR	215	445	sp|Q9Z125|CR3L1_MOUSE	Cyclic AMP-responsive element-bi 
+0.045	26	4	232	sp|Q1XGE2|HAC1_ASPOR	215	445	sp|Q96BA8|CR3L1_HUMAN	Cyclic AMP-responsive element-bi 
+0.045	23	14	297	sp|Q1XGE2|HAC1_ASPOR	228	517	sp|Q70SY1|CR3L2_HUMAN	Cyclic AMP-responsive element-bi 
+0.058	23	14	297	sp|Q1XGE2|HAC1_ASPOR	228	517	sp|Q5RCM9|CR3L2_PONAB	Cyclic AMP-responsive element-bi 
+0.071	26	1	207	sp|Q1XGE2|HAC1_ASPOR	107	318	sp|Q61817|CREB3_MOUSE	Cyclic AMP-responsive element-bi 
+0.074	31	4	152	sp|Q1XGE2|HAC1_ASPOR	218	368	sp|A2VD01|CR3L2_XENLA	Cyclic AMP-responsive element-bi 
+0.076	26	24	200	sp|Q1XGE2|HAC1_ASPOR	160	330	sp|Q08CW8|CR3L4_XENTR	Cyclic AMP-responsive element-bi 
+0.082	23	18	297	sp|Q1XGE2|HAC1_ASPOR	234	518	sp|Q6QDP7|CR3L2_RAT	Cyclic AMP-responsive element-bind 
+0.12	25	9	222	sp|Q1XGE2|HAC1_ASPOR	76	290	sp|P13346|FOSB_MOUSE	Protein fosB OS=Mus musculus GN=F 
+0.14	27	48	258	sp|Q1XGE2|HAC1_ASPOR	214	432	sp|Q91XE9|CR3L3_MOUSE	Cyclic AMP-responsive element-bi 
+0.14	20	32	334	sp|Q1XGE2|HAC1_ASPOR	788	1145	sp|Q5A2K0|NST1_CANAL	Stress response protein NST1 OS=C 
+0.17	35	73	143	sp|Q1XGE2|HAC1_ASPOR	68	138	sp|Q8W191|HYH_ARATH	Transcription factor HY5-like OS=A 
+0.17	28	72	237	sp|Q1XGE2|HAC1_ASPOR	145	332	sp|Q9TUB3|FOSB_CANFA	Protein fosB OS=Canis familiaris  
+0.19	26	48	284	sp|Q1XGE2|HAC1_ASPOR	214	438	sp|Q5FVM5|CR3L3_RAT	Cyclic AMP-responsive element-bind 
+0.2	22	17	274	sp|Q1XGE2|HAC1_ASPOR	49	268	sp|P0C5H8|KAPC_EMENI	Putative transcription factor kap 
+0.25	25	9	222	sp|Q1XGE2|HAC1_ASPOR	76	290	sp|P53539|FOSB_HUMAN	Protein fosB OS=Homo sapiens GN=F 
+0.29	21	6	291	sp|Q1XGE2|HAC1_ASPOR	39	319	sp|P79702|FOS_CYPCA	Proto-oncogene c-Fos OS=Cyprinus c 
+0.3	22	1	237	sp|Q1XGE2|HAC1_ASPOR	530	774	sp|Q0D9R7|ARFS_ORYSJ	Auxin response factor 19 OS=Oryza 
+0.32	28	44	232	sp|Q1XGE2|HAC1_ASPOR	72	263	sp|P15407|FOSL1_HUMAN	Fos-related antigen 1 OS=Homo sa 
+0.37	24	43	340	sp|Q1XGE2|HAC1_ASPOR	528	798	sp|Q5B3C8|NST1_EMENI	Stress response protein nst1 OS=E 
+0.38	27	3	236	sp|Q1XGE2|HAC1_ASPOR	429	680	sp|Q9WVS8|MK07_MOUSE	Mitogen-activated protein kinase  
+0.4	28	9	237	sp|Q1XGE2|HAC1_ASPOR	55	297	sp|O97930|FOS_PIG	Proto-oncogene c-Fos OS=Sus scrofa G 
+0.41	28	18	160	sp|Q1XGE2|HAC1_ASPOR	212	349	sp|Q06507|ATF4_MOUSE	Cyclic AMP-dependent transcriptio 
+0.59	27	29	163	sp|Q1XGE2|HAC1_ASPOR	171	307	sp|Q90370|MAFB_COTJA	Transcription factor MafB OS=Cotu 
+0.59	27	29	163	sp|Q1XGE2|HAC1_ASPOR	171	307	sp|Q90888|MAFB_CHICK	Transcription factor MafB OS=Gall 
+0.7	26	48	236	sp|Q1XGE2|HAC1_ASPOR	218	404	sp|Q68CJ9|CR3L3_HUMAN	Cyclic AMP-responsive element-bi 
+0.73	25	74	223	sp|Q1XGE2|HAC1_ASPOR	4	163	sp|Q09926|PCR1_SCHPO	Transcription factor pcr1 OS=Schi 
+0.74	26	15	236	sp|Q1XGE2|HAC1_ASPOR	2294	2524	sp|O88778|BSN_RAT	Protein bassoon OS=Rattus norvegicus 
+0.77	22	19	337	sp|Q1XGE2|HAC1_ASPOR	146	459	sp|Q8VCH8|UBXN4_MOUSE	UBX domain-containing protein 4  
+0.79	29	18	146	sp|Q1XGE2|HAC1_ASPOR	119	256	sp|Q9D2A5|CR3L4_MOUSE	Cyclic AMP-responsive element-bi 
+0.79	22	43	227	sp|Q1XGE2|HAC1_ASPOR	675	868	sp|A4R2R1|NST1_MAGGR	Stress response protein NST1 OS=M 
+0.85	31	66	160	sp|Q1XGE2|HAC1_ASPOR	258	351	sp|P18848|ATF4_HUMAN	Cyclic AMP-dependent transcriptio 
+0.92	25	2	237	sp|Q1XGE2|HAC1_ASPOR	57	298	sp|O88479|FOS_MESAU	Proto-oncogene c-Fos OS=Mesocricet 
+0.94	27	3	236	sp|Q1XGE2|HAC1_ASPOR	429	655	sp|A5PKJ4|MK07_BOVIN	Mitogen-activated protein kinase  
+1	23	5	265	sp|Q1XGE2|HAC1_ASPOR	989	1264	sp|Q1DQC1|PAN1_COCIM	Actin cytoskeleton-regulatory com 
+1	25	2	237	sp|Q1XGE2|HAC1_ASPOR	57	297	sp|P01101|FOS_MOUSE	Proto-oncogene c-Fos OS=Mus muscul 
+1	22	18	154	sp|Q1XGE2|HAC1_ASPOR	204	338	sp|Q6NW59|ATF4_DANRE	Cyclic AMP-dependent transcriptio 
+1.1	25	7	235	sp|Q1XGE2|HAC1_ASPOR	509	759	sp|Q76LL6|FHOD3_MOUSE	FH1/FH2 domain-containing protei 
+1.1	29	54	199	sp|Q1XGE2|HAC1_ASPOR	192	329	sp|Q8TEY5|CR3L4_HUMAN	Cyclic AMP-responsive element-bi 
+1.1	28	80	198	sp|Q1XGE2|HAC1_ASPOR	195	312	sp|Q99090|CPRF2_PETCR	Light-inducible protein CPRF2 OS 
+1.2	26	26	168	sp|Q1XGE2|HAC1_ASPOR	277	424	sp|Q5R9C9|ATF7_PONAB	Cyclic AMP-dependent transcriptio 
+1.2	26	26	168	sp|Q1XGE2|HAC1_ASPOR	288	435	sp|P17544|ATF7_HUMAN	Cyclic AMP-dependent transcriptio 
+1.2	29	54	199	sp|Q1XGE2|HAC1_ASPOR	192	329	sp|Q5UEM8|CR3L4_MACFA	Cyclic AMP-responsive element-bi 
+1.3	23	12	216	sp|Q1XGE2|HAC1_ASPOR	38	261	sp|P51145|FOSL2_RAT	Fos-related antigen 2 OS=Rattus no 
+1.3	28	9	237	sp|Q1XGE2|HAC1_ASPOR	55	297	sp|P01100|FOS_HUMAN	Proto-oncogene c-Fos OS=Homo sapie 
+1.4	25	9	254	sp|Q1XGE2|HAC1_ASPOR	105	350	sp|Q03173|ENAH_MOUSE	Protein enabled homolog OS=Mus mu 
+1.4	28	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|Q9Y5Q3|MAFB_HUMAN	Transcription factor MafB OS=Homo 
+1.5	27	51	190	sp|Q1XGE2|HAC1_ASPOR	23	183	sp|Q9R1S4|XBP1_RAT	X-box-binding protein 1 OS=Rattus n 
+1.5	25	2	237	sp|Q1XGE2|HAC1_ASPOR	57	297	sp|P01102|FOS_MSVFB	p55-v-Fos-transforming protein OS= 
+1.5	27	44	232	sp|Q1XGE2|HAC1_ASPOR	74	267	sp|P10158|FOSL1_RAT	Fos-related antigen 1 OS=Rattus no 
+1.6	24	13	267	sp|Q1XGE2|HAC1_ASPOR	284	545	sp|Q6Y7W8|PERQ2_MOUSE	PERQ amino acid-rich with GYF do 
+1.6	24	4	222	sp|Q1XGE2|HAC1_ASPOR	39	253	sp|P15408|FOSL2_HUMAN	Fos-related antigen 2 OS=Homo sa 
+1.7	26	8	199	sp|Q1XGE2|HAC1_ASPOR	138	322	sp|Q502F0|CR3LA_DANRE	Cyclic AMP-responsive element-bi 
+1.8	22	16	223	sp|Q1XGE2|HAC1_ASPOR	44	236	sp|A2R346|KAPC_ASPNC	Putative transcription factor kap 
+1.8	28	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|Q2PFS4|MAFB_MACFA	Transcription factor MafB OS=Maca 
+1.8	27	26	143	sp|Q1XGE2|HAC1_ASPOR	277	392	sp|Q8R0S1|ATF7_MOUSE	Cyclic AMP-dependent transcriptio 
+1.9	26	44	232	sp|Q1XGE2|HAC1_ASPOR	72	265	sp|P48755|FOSL1_MOUSE	Fos-related antigen 1 OS=Mus mus 
+1.9	28	42	208	sp|Q1XGE2|HAC1_ASPOR	92	255	sp|Q9UQ88|CD11A_HUMAN	Cell division protein kinase 11A 
+2	28	71	172	sp|Q1XGE2|HAC1_ASPOR	17	125	sp|Q16520|BATF_HUMAN	Basic leucine zipper transcriptio 
+2	23	14	223	sp|Q1XGE2|HAC1_ASPOR	37	240	sp|Q0CEI3|KAPC_ASPTN	Putative transcription factor kap 
+2	27	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|P54842|MAFB_RAT	Transcription factor MafB OS=Rattus 
+2	30	8	150	sp|Q1XGE2|HAC1_ASPOR	370	508	sp|P29747|CREBA_DROME	Cyclic AMP response element-bind 
+2	24	4	216	sp|Q1XGE2|HAC1_ASPOR	39	260	sp|P47930|FOSL2_MOUSE	Fos-related antigen 2 OS=Mus mus 
+2.1	29	39	210	sp|Q1XGE2|HAC1_ASPOR	79	238	sp|Q63ZM7|STABP_XENLA	STAM-binding protein-like OS=Xen 
+2.1	24	15	248	sp|Q1XGE2|HAC1_ASPOR	47	278	sp|Q91496|FOS_TETFL	Proto-oncogene c-Fos OS=Tetraodon  
+2.1	27	51	190	sp|Q1XGE2|HAC1_ASPOR	23	183	sp|O35426|XBP1_MOUSE	X-box-binding protein 1 OS=Mus mu 
+2.2	30	66	160	sp|Q1XGE2|HAC1_ASPOR	255	347	sp|Q9ES19|ATF4_RAT	Cyclic AMP-dependent transcription  
+2.3	26	19	163	sp|Q1XGE2|HAC1_ASPOR	119	245	sp|O02756|CEBPD_BOVIN	CCAAT/enhancer-binding protein d 
+2.3	27	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|P54841|MAFB_MOUSE	Transcription factor MafB OS=Mus  
+2.3	20	66	223	sp|Q1XGE2|HAC1_ASPOR	83	237	sp|A1C9M5|KAPC_ASPCL	Putative transcription factor kap 
+2.3	25	20	221	sp|Q1XGE2|HAC1_ASPOR	105	301	sp|Q8SQ19|CREB3_BOVIN	Cyclic AMP-responsive element-bi 
+2.4	24	2	237	sp|Q1XGE2|HAC1_ASPOR	57	297	sp|O77628|FOS_BOVIN	Proto-oncogene c-Fos OS=Bos taurus 
+2.4	20	30	297	sp|Q1XGE2|HAC1_ASPOR	282	540	sp|Q6NS15|MED15_XENLA	Mediator of RNA polymerase II tr 
+2.5	26	7	183	sp|Q1XGE2|HAC1_ASPOR	28	188	sp|P94517|YSCB_BACSU	Uncharacterized protein yscB OS=B 
+2.5	26	29	163	sp|Q1XGE2|HAC1_ASPOR	176	312	sp|Q504L8|MAFB_XENTR	Transcription factor MafB OS=Xeno 
+2.5	34	83	167	sp|Q1XGE2|HAC1_ASPOR	201	281	sp|O57342|MAFA_COTJA	Transcription factor MafA OS=Cotu 
+2.7	27	8	237	sp|Q1XGE2|HAC1_ASPOR	54	297	sp|P12841|FOS_RAT	Proto-oncogene c-Fos OS=Rattus norve 
+2.7	26	9	237	sp|Q1XGE2|HAC1_ASPOR	55	298	sp|Q8HZP6|FOS_FELCA	Proto-oncogene c-Fos OS=Felis catu 
+2.7	23	2	291	sp|Q1XGE2|HAC1_ASPOR	57	353	sp|Q56TT7|FOS_PHOCM	Proto-oncogene c-Fos OS=Phodopus c 
+2.7	33	16	119	sp|Q1XGE2|HAC1_ASPOR	188	291	sp|Q2VZV0|IF2_MAGSA	Translation initiation factor IF-2 
+2.8	27	19	154	sp|Q1XGE2|HAC1_ASPOR	210	342	sp|Q3ZCH6|ATF4_BOVIN	Cyclic AMP-dependent transcriptio 
+2.8	24	73	337	sp|Q1XGE2|HAC1_ASPOR	200	459	sp|Q5HZY0|UBXN4_RAT	UBX domain-containing protein 4 OS 
+2.8	26	3	236	sp|Q1XGE2|HAC1_ASPOR	429	680	sp|P0C865|MK07_RAT	Mitogen-activated protein kinase 7  
+2.9	26	19	163	sp|Q1XGE2|HAC1_ASPOR	118	244	sp|Q9N0J3|CEBPD_SHEEP	CCAAT/enhancer-binding protein d 
+2.9	33	60	146	sp|Q1XGE2|HAC1_ASPOR	170	252	sp|Q5UEM7|CR3L4_RAT	Cyclic AMP-responsive element-bind 
+3	25	1	215	sp|Q1XGE2|HAC1_ASPOR	208	432	sp|A0JMK9|CAF1A_DANRE	Chromatin assembly factor 1 subu 
+3.2	22	8	250	sp|Q1XGE2|HAC1_ASPOR	390	619	sp|Q96JK9|MAML3_HUMAN	Mastermind-like protein 3 OS=Hom 
+3.2	28	69	145	sp|Q1XGE2|HAC1_ASPOR	21	97	sp|Q9NR55|BATF3_HUMAN	Basic leucine zipper transcripti 
+3.2	21	2	331	sp|Q1XGE2|HAC1_ASPOR	410	760	sp|Q9C0A6|SETD5_HUMAN	SET domain-containing protein 5  
+3.4	23	95	327	sp|Q1XGE2|HAC1_ASPOR	224	436	sp|B3DM43|SOX5_XENTR	Transcription factor Sox-5 OS=Xen 
+3.5	26	41	255	sp|Q1XGE2|HAC1_ASPOR	41	271	sp|A5FV21|IF2_ACICJ	Translation initiation factor IF-2 
+3.6	27	52	168	sp|Q1XGE2|HAC1_ASPOR	194	315	sp|Q8K1L0|CREB5_MOUSE	Cyclic AMP-responsive element-bi 
+3.6	22	6	203	sp|Q1XGE2|HAC1_ASPOR	2186	2384	sp|Q9H254|SPTN4_HUMAN	Spectrin beta chain, brain 3 OS= 
+3.6	23	16	333	sp|Q1XGE2|HAC1_ASPOR	1015	1335	sp|B2AWS3|PAN1_PODAN	Actin cytoskeleton-regulatory com 
+4	26	47	193	sp|Q1XGE2|HAC1_ASPOR	5	156	sp|Q61827|MAFK_MOUSE	Transcription factor MafK OS=Mus  
+4	26	47	193	sp|Q1XGE2|HAC1_ASPOR	5	156	sp|O60675|MAFK_HUMAN	Transcription factor MafK OS=Homo 
+4.2	28	6	180	sp|Q1XGE2|HAC1_ASPOR	281	460	sp|Q4QRL3|CC88B_MOUSE	Coiled-coil domain-containing pr 
+4.3	25	15	248	sp|Q1XGE2|HAC1_ASPOR	48	279	sp|P53450|FOS_TAKRU	Proto-oncogene c-Fos OS=Takifugu r 
+4.4	25	16	189	sp|Q1XGE2|HAC1_ASPOR	2328	2510	sp|Q9UPA5|BSN_HUMAN	Protein bassoon OS=Homo sapiens GN 
+4.4	24	16	189	sp|Q1XGE2|HAC1_ASPOR	2336	2518	sp|O88737|BSN_MOUSE	Protein bassoon OS=Mus musculus GN 
+4.5	30	31	149	sp|Q1XGE2|HAC1_ASPOR	176	296	sp|P42774|GBF1_ARATH	G-box-binding factor 1 OS=Arabido 
+4.6	20	58	297	sp|Q1XGE2|HAC1_ASPOR	322	573	sp|Q7ZVN7|MED15_DANRE	Mediator of RNA polymerase II tr 
+4.6	33	85	167	sp|Q1XGE2|HAC1_ASPOR	201	281	sp|O42290|MAFA_CHICK	Transcription factor MafA OS=Gall 
+4.7	27	41	231	sp|Q1XGE2|HAC1_ASPOR	770	966	sp|A9V549|EIF3A_MONBE	Eukaryotic translation initiatio 
+4.8	33	83	145	sp|Q1XGE2|HAC1_ASPOR	28	90	sp|Q9D275|BATF3_MOUSE	Basic leucine zipper transcripti 
+4.8	25	29	186	sp|Q1XGE2|HAC1_ASPOR	294	463	sp|Q5RCJ1|CIP4_PONAB	Cdc42-interacting protein 4 OS=Po 
+5	30	63	185	sp|Q1XGE2|HAC1_ASPOR	159	282	sp|O43889|CREB3_HUMAN	Cyclic AMP-responsive element-bi 
+5.1	28	71	160	sp|Q1XGE2|HAC1_ASPOR	17	103	sp|O35284|BATF_MOUSE	Basic leucine zipper transcriptio 
+5.1	24	16	223	sp|Q1XGE2|HAC1_ASPOR	44	237	sp|Q2UNX4|KAPC_ASPOR	Putative transcription factor kap 
+5.1	27	52	168	sp|Q1XGE2|HAC1_ASPOR	345	466	sp|Q02930|CREB5_HUMAN	Cyclic AMP-responsive element-bi 
+5.2	24	9	250	sp|Q1XGE2|HAC1_ASPOR	628	858	sp|Q6P9R4|ARHGI_MOUSE	Rho guanine nucleotide exchange  
+5.3	26	14	232	sp|Q1XGE2|HAC1_ASPOR	662	845	sp|Q5F489|TAF3_CHICK	Transcription initiation factor T 
+5.3	27	14	203	sp|Q1XGE2|HAC1_ASPOR	664	845	sp|Q5HZG4|TAF3_MOUSE	Transcription initiation factor T 
+5.4	25	46	283	sp|Q1XGE2|HAC1_ASPOR	294	535	sp|Q9UKV3|ACINU_HUMAN	Apoptotic chromatin condensation 
+5.4	30	48	230	sp|Q1XGE2|HAC1_ASPOR	735	930	sp|Q5KGK5|EIF3A_CRYNE	Eukaryotic translation initiatio 
+5.5	23	2	291	sp|Q1XGE2|HAC1_ASPOR	57	353	sp|Q56TN0|FOS_PHORO	Proto-oncogene c-Fos OS=Phodopus r 
+6.1	24	16	258	sp|Q1XGE2|HAC1_ASPOR	555	812	sp|Q3KQU3|MA7D1_HUMAN	MAP7 domain-containing protein 1 
+6.1	22	29	272	sp|Q1XGE2|HAC1_ASPOR	294	542	sp|Q15642|CIP4_HUMAN	Cdc42-interacting protein 4 OS=Ho 
+6.2	25	25	199	sp|Q1XGE2|HAC1_ASPOR	161	322	sp|Q1LYG4|CR3LB_DANRE	Cyclic AMP-responsive element-bi 
+6.4	26	29	163	sp|Q1XGE2|HAC1_ASPOR	171	309	sp|Q6DE84|MAFB_XENLA	Transcription factor MafB OS=Xeno 
+6.6	24	68	271	sp|Q1XGE2|HAC1_ASPOR	108	311	sp|P18625|FOSL2_CHICK	Fos-related antigen 2 OS=Gallus  
+6.7	23	8	338	sp|Q1XGE2|HAC1_ASPOR	860	1230	sp|Q3UHR0|BAHC1_MOUSE	BAH and coiled-coil domain-conta 
+6.8	25	2	148	sp|Q1XGE2|HAC1_ASPOR	142	290	sp|Q8BW74|HLF_MOUSE	Hepatic leukemia factor OS=Mus mus 
+6.8	25	2	148	sp|Q1XGE2|HAC1_ASPOR	142	290	sp|Q16534|HLF_HUMAN	Hepatic leukemia factor OS=Homo sa 
+6.9	25	32	294	sp|Q1XGE2|HAC1_ASPOR	107	375	sp|Q9NZ53|PDXL2_HUMAN	Podocalyxin-like protein 2 OS=Ho 
+6.9	27	18	222	sp|Q1XGE2|HAC1_ASPOR	378	571	sp|Q7TSC1|BAT2_MOUSE	Large proline-rich protein BAT2 O 
+7.1	23	16	241	sp|Q1XGE2|HAC1_ASPOR	259	500	sp|O35451|ATF6B_MOUSE	Cyclic AMP-dependent transcripti 
+7.2	24	17	241	sp|Q1XGE2|HAC1_ASPOR	260	503	sp|Q99941|ATF6B_HUMAN	Cyclic AMP-dependent transcripti 
+7.3	24	80	285	sp|Q1XGE2|HAC1_ASPOR	588	784	sp|Q3UIW5|RNF10_MOUSE	RING finger protein 10 OS=Mus mu 
+7.5	26	16	311	sp|Q1XGE2|HAC1_ASPOR	1113	1403	sp|Q6C908|PAN1_YARLI	Actin cytoskeleton-regulatory com 
+7.8	22	61	333	sp|Q1XGE2|HAC1_ASPOR	1188	1460	sp|Q9W705|NCOA2_XENLA	Nuclear receptor coactivator 2 O 
+7.9	24	7	183	sp|Q1XGE2|HAC1_ASPOR	282	455	sp|O60841|IF2P_HUMAN	Eukaryotic translation initiation 
+7.9	21	12	323	sp|Q1XGE2|HAC1_ASPOR	595	900	sp|P15205|MAP1B_RAT	Microtubule-associated protein 1B  
+8.3	31	14	145	sp|Q1XGE2|HAC1_ASPOR	291	435	sp|Q9M7Q3|AI5L6_ARATH	ABSCISIC ACID-INSENSITIVE 5-like 
+8.3	24	10	209	sp|Q1XGE2|HAC1_ASPOR	236	424	sp|Q69022|EBNA2_EBVA8	Epstein-Barr nuclear antigen 2 O 
+8.3	23	15	333	sp|Q1XGE2|HAC1_ASPOR	386	687	sp|Q9ES64|USH1C_MOUSE	Harmonin OS=Mus musculus GN=Ush1 
+8.4	30	83	167	sp|Q1XGE2|HAC1_ASPOR	203	284	sp|Q4U1U2|MAFA_XENTR	Transcription factor MafA OS=Xeno 
+8.5	25	8	181	sp|Q1XGE2|HAC1_ASPOR	14	192	sp|P29681|IMPE2_DROME	20-hydroxyecdysone protein OS=Dr 
+8.6	26	10	157	sp|Q1XGE2|HAC1_ASPOR	315	458	sp|Q54Y73|BZPD_DICDI	Probable basic-leucine zipper tra 
+8.6	29	16	148	sp|Q1XGE2|HAC1_ASPOR	163	290	sp|Q64709|HLF_RAT	Hepatic leukemia factor OS=Rattus no 
+8.8	24	18	229	sp|Q1XGE2|HAC1_ASPOR	378	575	sp|Q6MG48|BAT2_RAT	Large proline-rich protein BAT2 OS= 
+9	17	36	252	sp|Q1XGE2|HAC1_ASPOR	628	845	sp|Q54HX6|MYBI_DICDI	Myb-like protein I OS=Dictyosteli 
+9.1	25	47	193	sp|Q1XGE2|HAC1_ASPOR	5	156	sp|Q90596|MAFK_CHICK	Transcription factor MafK OS=Gall 
+9.2	20	10	321	sp|Q1XGE2|HAC1_ASPOR	36	373	sp|Q4VYS1|FOXP2_XENLA	Forkhead box protein P2 OS=Xenop 
+9.5	18	22	170	sp|Q1XGE2|HAC1_ASPOR	171	321	sp|Q54NF3|Y6434_DICDI	Uncharacterized protein DDB_G028 
+9.5	24	16	268	sp|Q1XGE2|HAC1_ASPOR	1032	1284	sp|Q0CPW4|PAN1_ASPTN	Actin cytoskeleton-regulatory com 
+9.7	31	35	142	sp|Q1XGE2|HAC1_ASPOR	111	219	sp|Q8N8S7|ENAH_HUMAN	Protein enabled homolog OS=Homo s 
+9.7	23	36	229	sp|Q1XGE2|HAC1_ASPOR	263	449	sp|Q00312|RBF1_CANAL	Transcription factor RBF1 OS=Cand 
+9.9	27	18	228	sp|Q1XGE2|HAC1_ASPOR	380	575	sp|P48634|BAT2_HUMAN	Large proline-rich protein BAT2 O 
diff --git a/demotic/regress/wu-blastp-profmark.out b/demotic/regress/wu-blastp-profmark.out
new file mode 100644
index 0000000..0ae92c3
--- /dev/null
+++ b/demotic/regress/wu-blastp-profmark.out
@@ -0,0 +1,506 @@
+0	897.0	sp|P55685|Y4WG_RHISN	sp|P55685|Y4WG_RHISN
+1.34707	60.0	sp|Q07074|YH007_YEAST	sp|P55685|Y4WG_RHISN
+5.29832	74.0	sp|Q8XVA0|Y2931_RALSO	sp|P55685|Y4WG_RHISN
+5.29832	74.0	sp|P33890|TIR2_YEAST	sp|P55685|Y4WG_RHISN
+5.52146	78.0	sp|A7HGP8|CH602_ANADF	sp|P55685|Y4WG_RHISN
+9.21034	58.0	sp|Q608F1|Y1541_METCA	sp|P55685|Y4WG_RHISN
+0	1765.0	sp|Q1XGE2|HAC1_ASPOR	sp|Q1XGE2|HAC1_ASPOR
+0	1348.0	sp|Q8TFU8|HAC1_EMENI	sp|Q1XGE2|HAC1_ASPOR
+0	303.0	sp|Q8TFF3|HAC1_TRIRE	sp|Q1XGE2|HAC1_ASPOR
+9.30367e-14	184.0	sp|P41546|HAC1_YEAST	sp|Q1XGE2|HAC1_ASPOR
+3.39995e-12	170.0	sp|O24646|HY5_ARATH	sp|Q1XGE2|HAC1_ASPOR
+7e-09	140.0	sp|Q9SM50|HY5_SOLLC	sp|Q1XGE2|HAC1_ASPOR
+3.2e-08	150.0	sp|Q3SZZ2|XBP1_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+3.2e-08	150.0	sp|P17861|XBP1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+3.7e-08	156.0	sp|A1L224|CR3L2_DANRE	sp|Q1XGE2|HAC1_ASPOR
+1.9e-07	127.0	sp|Q8W191|HYH_ARATH	sp|Q1XGE2|HAC1_ASPOR
+9.6e-07	148.0	sp|A3LYI0|NST1_PICST	sp|Q1XGE2|HAC1_ASPOR
+6.40002e-06	136.0	sp|Q70SY1|CR3L2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.40002e-06	136.0	sp|Q5RCM9|CR3L2_PONAB	sp|Q1XGE2|HAC1_ASPOR
+6.50002e-06	136.0	sp|Q8BH52|CR3L2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.20001e-05	132.0	sp|Q61817|CREB3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.40001e-05	133.0	sp|A2VD01|CR3L2_XENLA	sp|Q1XGE2|HAC1_ASPOR
+2.30003e-05	131.0	sp|Q66HA2|CR3L1_RAT	sp|Q1XGE2|HAC1_ASPOR
+2.40003e-05	132.0	sp|Q54WN7|BZPF_DICDI	sp|Q1XGE2|HAC1_ASPOR
+3.00005e-05	130.0	sp|Q9Z125|CR3L1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+6.00018e-05	104.0	sp|Q9NR55|BATF3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+6.00018e-05	104.0	sp|Q9D275|BATF3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+6.4002e-05	127.0	sp|Q96BA8|CR3L1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+7.20026e-05	136.0	sp|O88778|BSN_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.000110006	125.0	sp|Q6QDP7|CR3L2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.000120007	127.0	sp|Q9WVS8|MK07_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.000130008	123.0	sp|Q08CW8|CR3L4_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.000160013	100.0	sp|Q16520|BATF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.000170014	121.0	sp|Q9D2A5|CR3L4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00020002	121.0	sp|Q99090|CPRF2_PETCR	sp|Q1XGE2|HAC1_ASPOR
+0.000210022	99.0	sp|P97876|BATF3_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.000290042	125.0	sp|Q5B3C8|NST1_EMENI	sp|Q1XGE2|HAC1_ASPOR
+0.000300045	115.0	sp|Q91XE9|CR3L3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.000320051	120.0	sp|Q3SYZ3|CR3L3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.000320051	118.0	sp|Q6NW59|ATF4_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.000320051	116.0	sp|Q9R1S4|XBP1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.000340058	118.0	sp|Q06507|ATF4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.000440097	117.0	sp|P18848|ATF4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.000440097	96.0	sp|O35284|BATF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00053014	116.0	sp|P13346|FOSB_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.000590174	115.0	sp|Q90888|MAFB_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.000590174	115.0	sp|Q90370|MAFB_COTJA	sp|Q1XGE2|HAC1_ASPOR
+0.000710252	113.0	sp|O35426|XBP1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.000840353	114.0	sp|P51145|FOSL2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.000890396	116.0	sp|Q68CJ9|CR3L3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.000970471	121.0	sp|A4R2R1|NST1_MAGGR	sp|Q1XGE2|HAC1_ASPOR
+0.00110061	112.0	sp|O57342|MAFA_COTJA	sp|Q1XGE2|HAC1_ASPOR
+0.00120072	103.0	sp|O60675|MAFK_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.00120072	111.0	sp|P15407|FOSL1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.00140098	115.0	sp|Q5FVM5|CR3L3_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.00150113	117.0	sp|Q03173|ENAH_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00150113	112.0	sp|P53539|FOSB_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.00160128	117.0	sp|Q2VZV0|IF2_MAGSA	sp|Q1XGE2|HAC1_ASPOR
+0.00170145	102.0	sp|Q61827|MAFK_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00180162	117.0	sp|P29747|CREBA_DROME	sp|Q1XGE2|HAC1_ASPOR
+0.00190181	112.0	sp|O88479|FOS_MESAU	sp|Q1XGE2|HAC1_ASPOR
+0.00190181	111.0	sp|Q9TUB3|FOSB_CANFA	sp|Q1XGE2|HAC1_ASPOR
+0.002002	112.0	sp|Q8TEY5|CR3L4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.002002	112.0	sp|Q5UEM8|CR3L4_MACFA	sp|Q1XGE2|HAC1_ASPOR
+0.002002	111.0	sp|Q9ES19|ATF4_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.002002	111.0	sp|P79702|FOS_CYPCA	sp|Q1XGE2|HAC1_ASPOR
+0.00210221	114.0	sp|Q8N8S7|ENAH_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.00230265	110.0	sp|P47930|FOSL2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00270365	112.0	sp|Q5R9C9|ATF7_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.00280393	112.0	sp|P17544|ATF7_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.00300451	109.0	sp|Q9Y5Q3|MAFB_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.00320513	118.0	sp|Q9UQ88|CD11A_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.00330546	110.0	sp|O43889|CREB3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.00340579	109.0	sp|Q3ZCH6|ATF4_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.00350614	110.0	sp|Q8R0S1|ATF7_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00370686	108.0	sp|P42774|GBF1_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.00380724	109.0	sp|Q8SQ19|CREB3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.00380724	111.0	sp|Q5UEM7|CR3L4_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.00390762	108.0	sp|P54842|MAFB_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.00390762	113.0	sp|A5PKJ4|MK07_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.00400802	109.0	sp|P01101|FOS_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00451016	113.0	sp|O13024|INCEA_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.00501254	107.0	sp|Q2PFS4|MAFB_MACFA	sp|Q1XGE2|HAC1_ASPOR
+0.00501254	113.0	sp|Q5KGK5|EIF3A_CRYNE	sp|Q1XGE2|HAC1_ASPOR
+0.00511305	108.0	sp|O97930|FOS_PIG	sp|Q1XGE2|HAC1_ASPOR
+0.00511305	108.0	sp|P01102|FOS_MSVFB	sp|Q1XGE2|HAC1_ASPOR
+0.00571631	100.0	sp|Q09926|PCR1_SCHPO	sp|Q1XGE2|HAC1_ASPOR
+0.0062193	98.0	sp|Q90596|MAFK_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.0062193	106.0	sp|Q504L8|MAFB_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.00652122	114.0	sp|Q1DQC1|PAN1_COCIM	sp|Q1XGE2|HAC1_ASPOR
+0.00652122	106.0	sp|P54841|MAFB_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00783058	113.0	sp|Q5A2K0|NST1_CANAL	sp|Q1XGE2|HAC1_ASPOR
+0.00793137	108.0	sp|Q8VCH8|UBXN4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00793137	107.0	sp|Q502F0|CR3LA_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.00803217	104.0	sp|P10158|FOSL1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.00813298	98.0	sp|P97875|JDP2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.00813298	98.0	sp|Q78E65|JDP2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.00853633	105.0	sp|P15408|FOSL2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.00873807	104.0	sp|O42290|MAFA_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.0100503	103.0	sp|A1C9M5|KAPC_ASPCL	sp|Q1XGE2|HAC1_ASPOR
+0.0110609	109.0	sp|P0C865|MK07_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.0130852	109.0	sp|Q15424|SAFB1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0140989	110.0	sp|O60841|IF2P_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0140989	110.0	sp|Q5RDE1|IF2P_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.0140989	105.0	sp|Q9M7Q3|AI5L6_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.0151136	109.0	sp|A9V549|EIF3A_MONBE	sp|Q1XGE2|HAC1_ASPOR
+0.0161294	110.0	sp|Q9UKV3|ACINU_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0161294	104.0	sp|Q63ZM7|STABP_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.018164	110.0	sp|Q4QRL3|CC88B_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.018164	103.0	sp|P01100|FOS_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.018164	103.0	sp|P12841|FOS_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.0191828	96.0	sp|P19880|YAP1_YEAST	sp|Q1XGE2|HAC1_ASPOR
+0.0191828	108.0	sp|Q8CH25|SLTM_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0191828	108.0	sp|Q9NWH9|SLTM_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0202027	101.0	sp|Q16534|HLF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0202027	101.0	sp|Q8BW74|HLF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0212236	107.0	sp|Q6CBW0|NST1_YARLI	sp|Q1XGE2|HAC1_ASPOR
+0.0222456	105.0	sp|Q498L2|SLTM_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.0232686	89.0	sp|Q1E554|CGR1_COCIM	sp|Q1XGE2|HAC1_ASPOR
+0.0232686	102.0	sp|Q91496|FOS_TETFL	sp|Q1XGE2|HAC1_ASPOR
+0.0232686	98.0	sp|Q9ESN9|JIP3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0232686	102.0	sp|P53450|FOS_TAKRU	sp|Q1XGE2|HAC1_ASPOR
+0.0232686	106.0	sp|Q05682|CALD1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0242927	102.0	sp|O77628|FOS_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.0242927	102.0	sp|Q56TT7|FOS_PHOCM	sp|Q1XGE2|HAC1_ASPOR
+0.0242927	100.0	sp|Q0CEI3|KAPC_ASPTN	sp|Q1XGE2|HAC1_ASPOR
+0.0242927	107.0	sp|Q6P9R4|ARHGI_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0253178	103.0	sp|P29681|IMPE2_DROME	sp|Q1XGE2|HAC1_ASPOR
+0.0253178	106.0	sp|A2AJI0|MA7D1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0283995	106.0	sp|Q5R452|SAFB1_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.0283995	102.0	sp|Q1LYG4|CR3LB_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.0283995	103.0	sp|Q9D439|CCD11_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0294288	99.0	sp|P48755|FOSL1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0294288	100.0	sp|Q6DE84|MAFB_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.0304592	101.0	sp|Q54RZ9|BZPG_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.0304592	109.0	sp|A0JMK9|CAF1A_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.0304592	100.0	sp|P18625|FOSL2_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.0314907	99.0	sp|A2R346|KAPC_ASPNC	sp|Q1XGE2|HAC1_ASPOR
+0.0314907	101.0	sp|Q8HZP6|FOS_FELCA	sp|Q1XGE2|HAC1_ASPOR
+0.0335568	103.0	sp|P26042|MOES_PIG	sp|Q1XGE2|HAC1_ASPOR
+0.0335568	103.0	sp|Q2HJ49|MOES_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.0345914	105.0	sp|A5FV21|IF2_ACICJ	sp|Q1XGE2|HAC1_ASPOR
+0.0345914	103.0	sp|A6SCT6|DBP3_BOTFB	sp|Q1XGE2|HAC1_ASPOR
+0.0356272	106.0	sp|Q7PGE8|EIF3A_ANOGA	sp|Q1XGE2|HAC1_ASPOR
+0.036664	105.0	sp|O77788|NFM_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.0387408	105.0	sp|Q9JTB5|IF2_NEIMA	sp|Q1XGE2|HAC1_ASPOR
+0.0387408	105.0	sp|Q9JYD2|IF2_NEIMB	sp|Q1XGE2|HAC1_ASPOR
+0.0387408	105.0	sp|A1KV51|IF2_NEIMF	sp|Q1XGE2|HAC1_ASPOR
+0.0387408	98.0	sp|P0C5H8|KAPC_EMENI	sp|Q1XGE2|HAC1_ASPOR
+0.0397809	105.0	sp|Q80YR5|SAFB2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0397809	100.0	sp|Q56TN0|FOS_PHORO	sp|Q1XGE2|HAC1_ASPOR
+0.0418642	98.0	sp|Q4U1U2|MAFA_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.0429075	102.0	sp|P26038|MOES_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0439519	98.0	sp|Q64709|HLF_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.0449974	104.0	sp|A0JMT0|CA1AB_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.0449974	112.0	sp|Q6Y7W6|PERQ2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0460439	92.0	sp|Q8WYK2|JDP2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0470916	99.0	sp|Q8K1L0|CREB5_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0470916	106.0	sp|Q9C0A6|SETD5_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0470916	101.0	sp|Q92575|UBXN4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0470916	101.0	sp|Q5R4I3|UBXN4_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.0491902	96.0	sp|P14233|TGA1B_TOBAC	sp|Q1XGE2|HAC1_ASPOR
+0.0491902	104.0	sp|A9M1D5|IF2_NEIM0	sp|Q1XGE2|HAC1_ASPOR
+0.0502412	103.0	sp|Q554P0|BZPJ_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.0502412	102.0	sp|Q8N9W4|GG6L2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0512933	77.0	sp|Q8N300|CCD23_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0534008	100.0	sp|O81025|P2A03_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.0565704	101.0	sp|O35763|MOES_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.0565704	102.0	sp|Q9Z220|TSG10_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.0576291	103.0	sp|Q32N93|INCEB_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.0576291	107.0	sp|Q95XZ5|NPBL_CAEEL	sp|Q1XGE2|HAC1_ASPOR
+0.0608121	103.0	sp|Q6CT90|EIF3A_KLULA	sp|Q1XGE2|HAC1_ASPOR
+0.0608121	103.0	sp|Q5F489|TAF3_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.0618754	98.0	sp|P42775|GBF2_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.0618754	103.0	sp|Q55EQ3|Y9086_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.0618754	98.0	sp|Q54LU8|Y8646_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.0682788	94.0	sp|P94517|YSCB_BACSU	sp|Q1XGE2|HAC1_ASPOR
+0.0693501	103.0	sp|Q2UKG6|EIF3A_ASPOR	sp|Q1XGE2|HAC1_ASPOR
+0.071496	101.0	sp|Q9Y592|CCD41_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.071496	111.0	sp|Q6Y7W8|PERQ2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.071496	98.0	sp|Q8X229|FCR3_CANAL	sp|Q1XGE2|HAC1_ASPOR
+0.0725707	100.0	sp|P26041|MOES_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0747235	105.0	sp|Q9TW28|MYOM_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.076881	100.0	sp|Q9NZ53|PDXL2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0779615	99.0	sp|Q02930|CREB5_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0790432	102.0	sp|Q5HZG4|TAF3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.080126	102.0	sp|A0LE19|IF2_MAGSM	sp|Q1XGE2|HAC1_ASPOR
+0.0812101	103.0	sp|Q869E1|DNLI1_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.0844692	104.0	sp|P22793|TRHY_SHEEP	sp|Q1XGE2|HAC1_ASPOR
+0.0888312	95.0	sp|O70191|ATF5_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0888312	96.0	sp|Q39140|TGA6_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.0888312	98.0	sp|Q68EL6|NFIL3_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.0899247	101.0	sp|Q55FW7|GLE1_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.0965109	89.0	sp|Q3TLH4|BA2L2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.0965109	95.0	sp|Q04323|UBXN1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.0965109	96.0	sp|P23922|HBP1A_WHEAT	sp|Q1XGE2|HAC1_ASPOR
+0.098716	94.0	sp|Q9C5Q2|AI5L3_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.102033	101.0	sp|Q54TD7|DDX24_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.103141	101.0	sp|Q5F797|IF2_NEIG1	sp|Q1XGE2|HAC1_ASPOR
+0.103141	101.0	sp|B4RMZ3|IF2_NEIG2	sp|Q1XGE2|HAC1_ASPOR
+0.10425	99.0	sp|Q86AH4|Y8592_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.105361	101.0	sp|Q8IIG7|YPF05_PLAF7	sp|Q1XGE2|HAC1_ASPOR
+0.116534	103.0	sp|B2KI97|THOC2_RHIFE	sp|Q1XGE2|HAC1_ASPOR
+0.116534	102.0	sp|Q9UM54|MYO6_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.116534	100.0	sp|Q3KQU3|MA7D1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.116534	98.0	sp|Q14244|MAP7_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.116534	90.0	sp|P29596|ATF3_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.116534	104.0	sp|Q5TM26|BAT2_MACMU	sp|Q1XGE2|HAC1_ASPOR
+0.127833	100.0	sp|Q0IHP2|INCE_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.127833	100.0	sp|Q9NQS7|INCE_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.127833	97.0	sp|Q5HZY0|UBXN4_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.127833	87.0	sp|Q90595|MAFF_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.127833	101.0	sp|Q6ZSZ5|ARHGI_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.127833	98.0	sp|Q7PS12|MOEH_ANOGA	sp|Q1XGE2|HAC1_ASPOR
+0.139262	99.0	sp|P12957|CALD1_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.139262	93.0	sp|Q08DA8|ATF1_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.139262	91.0	sp|Q94126|CES2_CAEEL	sp|Q1XGE2|HAC1_ASPOR
+0.139262	88.0	sp|O66547|Y157_AQUAE	sp|Q1XGE2|HAC1_ASPOR
+0.139262	101.0	sp|A6ZRZ0|NST1_YEAS7	sp|Q1XGE2|HAC1_ASPOR
+0.139262	101.0	sp|P53935|NST1_YEAST	sp|Q1XGE2|HAC1_ASPOR
+0.139262	94.0	sp|A3BYC1|HOX25_ORYSJ	sp|Q1XGE2|HAC1_ASPOR
+0.139262	102.0	sp|B1AZI6|THOC2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.150823	104.0	sp|Q9H254|SPTN4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.150823	93.0	sp|Q2UNX4|KAPC_ASPOR	sp|Q1XGE2|HAC1_ASPOR
+0.150823	94.0	sp|Q9JJ50|HGS_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.150823	89.0	sp|Q2KII1|ATF3_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.150823	98.0	sp|Q99941|ATF6B_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.150823	103.0	sp|Q7TSC1|BAT2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.150823	97.0	sp|Q4I877|NDE1_GIBZE	sp|Q1XGE2|HAC1_ASPOR
+0.162519	98.0	sp|Q84WU4|GOGC3_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.162519	93.0	sp|Q499N6|UBXN1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.162519	81.0	sp|B4PPK2|FOSL_DROYA	sp|Q1XGE2|HAC1_ASPOR
+0.162519	101.0	sp|A4R8N4|PAN1_MAGGR	sp|Q1XGE2|HAC1_ASPOR
+0.162519	101.0	sp|B2AWS3|PAN1_PODAN	sp|Q1XGE2|HAC1_ASPOR
+0.162519	102.0	sp|Q92545|TM131_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.174353	99.0	sp|Q38W81|IF2_LACSS	sp|Q1XGE2|HAC1_ASPOR
+0.174353	94.0	sp|Q789F3|MAF_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.174353	92.0	sp|P49716|CEBPD_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.174353	92.0	sp|P81269|ATF1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.174353	94.0	sp|P23091|MAF_AVIS4	sp|Q1XGE2|HAC1_ASPOR
+0.174353	92.0	sp|P18846|ATF1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.174353	102.0	sp|Q07283|TRHY_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.18633	95.0	sp|Q4X1V0|NDE1_ASPFU	sp|Q1XGE2|HAC1_ASPOR
+0.18633	79.0	sp|Q8R1H8|BATF2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.18633	95.0	sp|Q66J36|NFIL3_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.18633	97.0	sp|P13816|GARP_PLAFF	sp|Q1XGE2|HAC1_ASPOR
+0.18633	93.0	sp|P38749|YAP3_YEAST	sp|Q1XGE2|HAC1_ASPOR
+0.198451	99.0	sp|Q3UIW5|RNF10_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.198451	93.0	sp|P23923|HBP1B_WHEAT	sp|Q1XGE2|HAC1_ASPOR
+0.198451	97.0	sp|Q9D5R3|CCD41_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.198451	101.0	sp|Q9QXL2|KI21A_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.198451	95.0	sp|Q9UPT6|JIP3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.198451	99.0	sp|P16884|NFH_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.198451	88.0	sp|Q60765|ATF3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.198451	91.0	sp|Q9N0J3|CEBPD_SHEEP	sp|Q1XGE2|HAC1_ASPOR
+0.198451	99.0	sp|A5DLJ8|NST1_PICGU	sp|Q1XGE2|HAC1_ASPOR
+0.210721	98.0	sp|A5DHL9|EIF3A_PICGU	sp|Q1XGE2|HAC1_ASPOR
+0.210721	92.0	sp|Q6NXA9|UBXN1_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.210721	91.0	sp|O02756|CEBPD_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.210721	97.0	sp|O88735|MAP7_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.210721	95.0	sp|Q99105|MYSU_RABIT	sp|Q1XGE2|HAC1_ASPOR
+0.223144	94.0	sp|Q9M7Q2|AI5L7_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.223144	95.0	sp|Q9HCM9|TRI39_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.223144	95.0	sp|Q1XHU0|TRI39_PANTR	sp|Q1XGE2|HAC1_ASPOR
+0.223144	93.0	sp|Q7SHT5|PXR1_NEUCR	sp|Q1XGE2|HAC1_ASPOR
+0.235722	71.0	sp|Q32LJ0|CCD23_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.235722	71.0	sp|Q99LQ4|CCD23_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.235722	71.0	sp|Q4KLG3|CCD23_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.235722	99.0	sp|Q54XG7|DIMA_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.235722	86.0	sp|Q54CY3|Y4489_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.235722	100.0	sp|B0KWH8|THOC2_CALJA	sp|Q1XGE2|HAC1_ASPOR
+0.235722	96.0	sp|Q7Z4V5|HDGR2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.248461	102.0	sp|P15205|MAP1B_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.248461	92.0	sp|Q98UK4|MAF_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.248461	108.0	sp|O75037|KI21B_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.248461	96.0	sp|Q02040|SF17A_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.248461	96.0	sp|P82179|TRDN_CANFA	sp|Q1XGE2|HAC1_ASPOR
+0.248461	95.0	sp|B0WYY2|MOEH_CULQU	sp|Q1XGE2|HAC1_ASPOR
+0.261365	99.0	sp|Q556Q3|IRLF_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.261365	87.0	sp|P18847|ATF3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.274437	95.0	sp|Q5RCJ1|CIP4_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.274437	92.0	sp|Q1RM35|CC104_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.274437	90.0	sp|A2Z0Q0|HOX25_ORYSI	sp|Q1XGE2|HAC1_ASPOR
+0.274437	94.0	sp|P15336|ATF2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.274437	97.0	sp|O88453|SAFB1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.274437	99.0	sp|B0YC95|PAN1_ASPFC	sp|Q1XGE2|HAC1_ASPOR
+0.274437	99.0	sp|Q4WG58|PAN1_ASPFU	sp|Q1XGE2|HAC1_ASPOR
+0.287682	99.0	sp|A6NC98|CC88B_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.287682	99.0	sp|A6R7X5|PAN1_AJECN	sp|Q1XGE2|HAC1_ASPOR
+0.287682	98.0	sp|Q05D44|IF2P_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.301105	92.0	sp|P54843|MAF_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.301105	92.0	sp|O75444|MAF_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.301105	92.0	sp|A7Z017|MAF_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.314711	89.0	sp|A5PJN1|TAP26_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.314711	93.0	sp|O24160|TGA21_TOBAC	sp|Q1XGE2|HAC1_ASPOR
+0.314711	96.0	sp|Q54Y73|BZPD_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.314711	93.0	sp|Q5FW38|NFIL3_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.314711	91.0	sp|Q39163|TGA5_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.314711	85.0	sp|Q90889|MAFG_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.328504	95.0	sp|O35451|ATF6B_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.328504	107.0	sp|Q9QXL1|KI21B_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.328504	97.0	sp|Q5RG44|K1211_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.328504	100.0	sp|P48634|BAT2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.328504	96.0	sp|C0QTL9|IF2_PERMH	sp|Q1XGE2|HAC1_ASPOR
+0.328504	96.0	sp|P53352|INCE_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.34249	92.0	sp|Q8BKJ9|SIRT7_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.34249	91.0	sp|Q5XIB5|CCD86_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.34249	93.0	sp|O93602|ATF2_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.34249	93.0	sp|P16951|ATF2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.34249	96.0	sp|Q5QTY8|IF2_IDILO	sp|Q1XGE2|HAC1_ASPOR
+0.34249	84.0	sp|Q6FUQ5|FYV7_CANGA	sp|Q1XGE2|HAC1_ASPOR
+0.34249	97.0	sp|P37934|MAAY3_SCHCO	sp|Q1XGE2|HAC1_ASPOR
+0.34249	92.0	sp|Q99089|CPRF1_PETCR	sp|Q1XGE2|HAC1_ASPOR
+0.356675	93.0	sp|Q3ZBU9|UBXN4_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.356675	94.0	sp|P34511|YMX3_CAEEL	sp|Q1XGE2|HAC1_ASPOR
+0.371064	96.0	sp|Q8C0Q2|ZHX3_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.371064	98.0	sp|Q5B5B0|PAN1_EMENI	sp|Q1XGE2|HAC1_ASPOR
+0.371064	95.0	sp|A2AG50|MA7D2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.371064	98.0	sp|Q4PBP6|NST1_USTMA	sp|Q1XGE2|HAC1_ASPOR
+0.371064	95.0	sp|Q7KZI7|MARK2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.371064	89.0	sp|Q03484|CEBPD_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.385662	96.0	sp|Q80VM7|ANR24_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.385662	91.0	sp|P54844|MAF_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.385662	96.0	sp|B1ZDQ8|IF2_METPB	sp|Q1XGE2|HAC1_ASPOR
+0.385662	94.0	sp|Q99LI8|HGS_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.385662	90.0	sp|Q6BUE3|PXR1_DEBHA	sp|Q1XGE2|HAC1_ASPOR
+0.385662	96.0	sp|Q7RWT1|EIF3A_NEUCR	sp|Q1XGE2|HAC1_ASPOR
+0.385662	90.0	sp|Q6ZDF3|TRAB1_ORYSJ	sp|Q1XGE2|HAC1_ASPOR
+0.400478	98.0	sp|Q8NI27|THOC2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.400478	98.0	sp|B1MTK1|THOC2_CALMO	sp|Q1XGE2|HAC1_ASPOR
+0.400478	93.0	sp|Q8N4C8|MINK1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.400478	91.0	sp|P42776|GBF3_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.415515	89.0	sp|A1D9Z7|KAPC_NEOFI	sp|Q1XGE2|HAC1_ASPOR
+0.415515	94.0	sp|Q4G091|MICLK_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.415515	89.0	sp|Q6P788|ATF5_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.415515	89.0	sp|Q9Y2D1|ATF5_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.415515	90.0	sp|P43273|TGA2_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.415515	88.0	sp|Q795Q5|YTTA_BACSU	sp|Q1XGE2|HAC1_ASPOR
+0.430783	93.0	sp|Q32LP2|RADI_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.430783	93.0	sp|Q9PU45|RADI_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.430783	93.0	sp|P35241|RADI_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.430783	93.0	sp|P26044|RADI_PIG	sp|Q1XGE2|HAC1_ASPOR
+0.430783	98.0	sp|Q2KHR3|QSER1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.446287	91.0	sp|Q54NF3|Y6434_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.446287	89.0	sp|Q99091|CPRF3_PETCR	sp|Q1XGE2|HAC1_ASPOR
+0.446287	102.0	sp|P30427|PLEC1_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.446287	96.0	sp|Q553B1|DDX46_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.462035	96.0	sp|Q5AXH3|TOF1_EMENI	sp|Q1XGE2|HAC1_ASPOR
+0.462035	90.0	sp|Q0V9K1|MAF_XENTR	sp|Q1XGE2|HAC1_ASPOR
+0.462035	96.0	sp|A6RW62|NST1_BOTFB	sp|Q1XGE2|HAC1_ASPOR
+0.462035	96.0	sp|A7EMM3|NST1_SCLS1	sp|Q1XGE2|HAC1_ASPOR
+0.462035	92.0	sp|Q869T2|Y7634_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.462035	97.0	sp|A1DC51|PAN1_NEOFI	sp|Q1XGE2|HAC1_ASPOR
+0.462035	94.0	sp|Q960X8|HRS_DROME	sp|Q1XGE2|HAC1_ASPOR
+0.462035	91.0	sp|Q5BJY9|K1C18_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.462035	96.0	sp|Q6BUT3|NST1_DEBHA	sp|Q1XGE2|HAC1_ASPOR
+0.462035	97.0	sp|A1CD74|PAN1_ASPCL	sp|Q1XGE2|HAC1_ASPOR
+0.478036	87.0	sp|Q09202|YP23_CAEEL	sp|Q1XGE2|HAC1_ASPOR
+0.478036	96.0	sp|B2GUV7|IF2P_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.478036	68.0	sp|A5F4W4|ZAPB_VIBC3	sp|Q1XGE2|HAC1_ASPOR
+0.478036	68.0	sp|Q9KNP5|ZAPB_VIBCH	sp|Q1XGE2|HAC1_ASPOR
+0.478036	68.0	sp|C3LSB5|ZAPB_VIBCM	sp|Q1XGE2|HAC1_ASPOR
+0.494296	96.0	sp|P97820|M4K4_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.494296	93.0	sp|P34099|KAPC_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.494296	96.0	sp|O95819|M4K4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.494296	88.0	sp|P11115|CPC1_NEUCR	sp|Q1XGE2|HAC1_ASPOR
+0.494296	88.0	sp|P42777|GBF4_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.494296	89.0	sp|A3KMR8|MAFA_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.494296	94.0	sp|O60132|TEA4_SCHPO	sp|Q1XGE2|HAC1_ASPOR
+0.494296	97.0	sp|Q7KQM6|PERQ1_DROME	sp|Q1XGE2|HAC1_ASPOR
+0.510826	91.0	sp|Q9ZLW8|PGBA_HELPJ	sp|Q1XGE2|HAC1_ASPOR
+0.510826	91.0	sp|O25249|PGBA_HELPY	sp|Q1XGE2|HAC1_ASPOR
+0.510826	83.0	sp|Q13164|MK07_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.510826	95.0	sp|Q1DXU0|EIF3A_COCIM	sp|Q1XGE2|HAC1_ASPOR
+0.527633	90.0	sp|O14964|HGS_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.527633	95.0	sp|Q0CUP6|EIF3A_ASPTN	sp|Q1XGE2|HAC1_ASPOR
+0.527633	97.0	sp|A5DXA0|NST1_LODEL	sp|Q1XGE2|HAC1_ASPOR
+0.527633	88.0	sp|Q4WA21|KAPC_ASPFU	sp|Q1XGE2|HAC1_ASPOR
+0.527633	96.0	sp|Q54GQ1|MTMR_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.527633	87.0	sp|P23614|BASP1_CHICK	sp|Q1XGE2|HAC1_ASPOR
+0.527633	93.0	sp|Q8SSQ0|GEFR_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.527633	97.0	sp|Q7Z4S6|KI21A_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.527633	80.0	sp|Q2KI00|F107B_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.527633	94.0	sp|Q08014|MEDB_GIALA	sp|Q1XGE2|HAC1_ASPOR
+0.544727	90.0	sp|Q9M7Q5|AI5L4_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.544727	90.0	sp|Q09458|YQ37_CAEEL	sp|Q1XGE2|HAC1_ASPOR
+0.544727	98.0	sp|Q6MG48|BAT2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.544727	94.0	sp|Q9WU62|INCE_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.562119	92.0	sp|P26043|RADI_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.562119	91.0	sp|Q12234|RUD3_YEAST	sp|Q1XGE2|HAC1_ASPOR
+0.562119	94.0	sp|Q98TA5|CA1AA_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.579818	76.0	sp|Q07E15|CTTB2_MUSPF	sp|Q1XGE2|HAC1_ASPOR
+0.579818	90.0	sp|Q1MTN9|RLF2_SCHPO	sp|Q1XGE2|HAC1_ASPOR
+0.579818	94.0	sp|P07197|NFM_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.579818	88.0	sp|Q6IP50|UBX1A_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.579818	88.0	sp|Q922Y1|UBXN1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.597837	84.0	sp|Q5JR59|MTUS2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.597837	73.0	sp|P14918|EXTN_MAIZE	sp|Q1XGE2|HAC1_ASPOR
+0.616186	94.0	sp|C1D8X2|IF2_LARHH	sp|Q1XGE2|HAC1_ASPOR
+0.616186	93.0	sp|Q7SAF6|CEF1_NEUCR	sp|Q1XGE2|HAC1_ASPOR
+0.616186	67.0	sp|A6VLC4|ZAPB_ACTSZ	sp|Q1XGE2|HAC1_ASPOR
+0.634878	86.0	sp|P72929|Y1021_SYNY3	sp|Q1XGE2|HAC1_ASPOR
+0.634878	92.0	sp|O14273|YET4_SCHPO	sp|Q1XGE2|HAC1_ASPOR
+0.653926	82.0	sp|Q6DGM8|JDP2_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.653926	91.0	sp|Q8GT73|BH119_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.653926	96.0	sp|C1FXW9|THOC2_DASNO	sp|Q1XGE2|HAC1_ASPOR
+0.673345	88.0	sp|P12270|TPR_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.693147	86.0	sp|P29176|FOSX_MSVFR	sp|Q1XGE2|HAC1_ASPOR
+0.693147	94.0	sp|Q9UPN4|AZI1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.71335	75.0	sp|P78559|MAP1A_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.71335	86.0	sp|Q5AVK6|NOP16_EMENI	sp|Q1XGE2|HAC1_ASPOR
+0.71335	79.0	sp|Q9H098|F107B_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.71335	88.0	sp|P20226|TBP_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.733969	89.0	sp|Q08E13|RNF10_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.733969	87.0	sp|Q9VL63|U430_DROME	sp|Q1XGE2|HAC1_ASPOR
+0.733969	92.0	sp|Q13061|TRDN_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.733969	93.0	sp|Q9ES64|USH1C_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.733969	92.0	sp|Q86AF3|BZPH_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.755023	98.0	sp|Q9Y520|BA2L2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.755023	87.0	sp|Q9LES3|AI5L2_ARATH	sp|Q1XGE2|HAC1_ASPOR
+0.755023	89.0	sp|Q55E93|BZPE_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.776529	94.0	sp|Q15147|PLCB4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.776529	94.0	sp|Q9QW07|PLCB4_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.776529	88.0	sp|Q9QWW1|HOME2_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.776529	88.0	sp|Q98UK5|MAFB_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.776529	89.0	sp|Q9JJ89|CCD86_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.798508	92.0	sp|Q499E4|DZI1L_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.798508	87.0	sp|P34618|CEC1_CAEEL	sp|Q1XGE2|HAC1_ASPOR
+0.798508	95.0	sp|Q75JP5|Y2471_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.798508	94.0	sp|Q1E1H4|NST1_COCIM	sp|Q1XGE2|HAC1_ASPOR
+0.820981	96.0	sp|P05661|MYSA_DROME	sp|Q1XGE2|HAC1_ASPOR
+0.820981	98.0	sp|Q9UPA5|BSN_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.84397	88.0	sp|Q55D99|PAKA_DICDI	sp|Q1XGE2|HAC1_ASPOR
+0.84397	91.0	sp|A5PKL7|LZTS2_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+0.84397	88.0	sp|Q7RWR8|CWC26_NEUCR	sp|Q1XGE2|HAC1_ASPOR
+0.84397	84.0	sp|P35710|SOX5_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.867501	75.0	sp|P24152|EXTN_SORBI	sp|Q1XGE2|HAC1_ASPOR
+0.867501	88.0	sp|Q9Z2Q8|FOS_CRIGR	sp|Q1XGE2|HAC1_ASPOR
+0.867501	85.0	sp|B4GIF2|EIF3J_DROPE	sp|Q1XGE2|HAC1_ASPOR
+0.867501	85.0	sp|Q8I1E5|EIF3J_DROPS	sp|Q1XGE2|HAC1_ASPOR
+0.891598	93.0	sp|Q9R269|PEPL_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.891598	82.0	sp|P35711|SOX5_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.891598	86.0	sp|Q9ZJP4|TONB_HELPJ	sp|Q1XGE2|HAC1_ASPOR
+0.891598	91.0	sp|Q6NY15|TSG10_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.891598	93.0	sp|Q9Y4D1|DAAM1_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.891598	91.0	sp|P28741|KIF3A_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.916291	94.0	sp|Q9PTD7|CING_XENLA	sp|Q1XGE2|HAC1_ASPOR
+0.916291	92.0	sp|O94685|UCP8_SCHPO	sp|Q1XGE2|HAC1_ASPOR
+0.916291	94.0	sp|P20482|CNC_DROME	sp|Q1XGE2|HAC1_ASPOR
+0.916291	90.0	sp|P56095|AP1_KLULA	sp|Q1XGE2|HAC1_ASPOR
+0.916291	85.0	sp|P51984|CREB_CHLVR	sp|Q1XGE2|HAC1_ASPOR
+0.941609	89.0	sp|Q00969|ATF2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.941609	90.0	sp|Q29GR8|MOEH_DROPS	sp|Q1XGE2|HAC1_ASPOR
+0.967584	88.0	sp|Q10PR4|HSFA9_ORYSJ	sp|Q1XGE2|HAC1_ASPOR
+0.967584	90.0	sp|Q15642|CIP4_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+0.967584	93.0	sp|Q1LUE5|ZCH18_DANRE	sp|Q1XGE2|HAC1_ASPOR
+0.967584	93.0	sp|B0W6N3|EIF3A_CULQU	sp|Q1XGE2|HAC1_ASPOR
+0.967584	94.0	sp|Q5XJV7|SETD5_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+0.967584	93.0	sp|B3EX63|CING_SORAR	sp|Q1XGE2|HAC1_ASPOR
+0.994252	94.0	sp|Q2UDY8|PAN1_ASPOR	sp|Q1XGE2|HAC1_ASPOR
+0.994252	91.0	sp|Q5R7F9|MA7D2_PONAB	sp|Q1XGE2|HAC1_ASPOR
+0.994252	87.0	sp|O88801|HOME2_RAT	sp|Q1XGE2|HAC1_ASPOR
+0.994252	88.0	sp|Q8R424|STABP_RAT	sp|Q1XGE2|HAC1_ASPOR
+1.02165	91.0	sp|Q6NS15|MED15_XENLA	sp|Q1XGE2|HAC1_ASPOR
+1.02165	89.0	sp|Q6RFY2|PHAR3_RAT	sp|Q1XGE2|HAC1_ASPOR
+1.02165	71.0	sp|Q8C2B3|HDAC7_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.02165	65.0	sp|Q54DE2|Y4323_DICDI	sp|Q1XGE2|HAC1_ASPOR
+1.02165	65.0	sp|P41425|Y020_NPVAC	sp|Q1XGE2|HAC1_ASPOR
+1.02165	65.0	sp|A3MZY9|ZAPB_ACTP2	sp|Q1XGE2|HAC1_ASPOR
+1.02165	65.0	sp|B3H152|ZAPB_ACTP7	sp|Q1XGE2|HAC1_ASPOR
+1.02165	98.0	sp|O88737|BSN_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.04982	83.0	sp|B7GKC7|GRPE_ANOFW	sp|Q1XGE2|HAC1_ASPOR
+1.04982	93.0	sp|Q9CXK9|RBM33_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.04982	84.0	sp|Q6CJZ6|MED2_KLULA	sp|Q1XGE2|HAC1_ASPOR
+1.04982	95.0	sp|P14105|MYH9_CHICK	sp|Q1XGE2|HAC1_ASPOR
+1.04982	92.0	sp|A1WLI3|IF2_VEREI	sp|Q1XGE2|HAC1_ASPOR
+1.04982	89.0	sp|Q62736|CALD1_RAT	sp|Q1XGE2|HAC1_ASPOR
+1.07881	95.0	sp|Q5F3P8|SET1B_CHICK	sp|Q1XGE2|HAC1_ASPOR
+1.07881	96.0	sp|Q96JK9|MAML3_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.07881	89.0	sp|Q5NVN6|CEP63_PONAB	sp|Q1XGE2|HAC1_ASPOR
+1.07881	89.0	sp|Q9ZKY5|PGBB_HELPJ	sp|Q1XGE2|HAC1_ASPOR
+1.10866	90.0	sp|P18850|ATF6A_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.10866	85.0	sp|Q8N1L9|BATF2_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.10866	95.0	sp|Q9HD67|MYO10_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.10866	89.0	sp|Q0VF49|K2012_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.10866	93.0	sp|Q9JM52|MINK1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.10866	88.0	sp|Q90Z72|NFIL3_CHICK	sp|Q1XGE2|HAC1_ASPOR
+1.10866	86.0	sp|P23050|FOS_AVINK	sp|Q1XGE2|HAC1_ASPOR
+1.13943	86.0	sp|Q32PF6|DBP_BOVIN	sp|Q1XGE2|HAC1_ASPOR
+1.13943	86.0	sp|Q10586|DBP_HUMAN	sp|Q1XGE2|HAC1_ASPOR
+1.13943	86.0	sp|Q60925|DBP_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.13943	86.0	sp|P16443|DBP_RAT	sp|Q1XGE2|HAC1_ASPOR
+1.13943	90.0	sp|Q66H89|CCD41_RAT	sp|Q1XGE2|HAC1_ASPOR
+1.13943	93.0	sp|Q54IE8|IRLE_DICDI	sp|Q1XGE2|HAC1_ASPOR
+1.17118	91.0	sp|B4RXT8|IF2_ALTMD	sp|Q1XGE2|HAC1_ASPOR
+1.17118	90.0	sp|Q4R628|KIF3A_MACFA	sp|Q1XGE2|HAC1_ASPOR
+1.17118	89.0	sp|P46150|MOEH_DROME	sp|Q1XGE2|HAC1_ASPOR
+1.17118	88.0	sp|A2QUR1|SFH5_ASPNC	sp|Q1XGE2|HAC1_ASPOR
+1.20397	85.0	sp|P05411|JUN_AVIS1	sp|Q1XGE2|HAC1_ASPOR
+1.20397	90.0	sp|Q5ZIA2|MAP7_CHICK	sp|Q1XGE2|HAC1_ASPOR
+1.20397	78.0	sp|Q09YM8|CTTB2_RABIT	sp|Q1XGE2|HAC1_ASPOR
+1.20397	92.0	sp|Q0CP15|NST1_ASPTN	sp|Q1XGE2|HAC1_ASPOR
+1.23787	83.0	sp|A8MPH9|FOSLD_DROME	sp|Q1XGE2|HAC1_ASPOR
+1.23787	98.0	sp|Q9QXS1|PLEC1_MOUSE	sp|Q1XGE2|HAC1_ASPOR
+1.23787	97.0	sp|Q9WVE9|ITSN1_RAT	sp|Q1XGE2|HAC1_ASPOR
+1.23787	82.0	sp|A2QC41|MED21_ASPNC	sp|Q1XGE2|HAC1_ASPOR
diff --git a/demotic/regress/wu-blastp-tbl.out b/demotic/regress/wu-blastp-tbl.out
new file mode 100644
index 0000000..3ee41b8
--- /dev/null
+++ b/demotic/regress/wu-blastp-tbl.out
@@ -0,0 +1,369 @@
+9.1e-90	100	1	181	sp|P55685|Y4WG_RHISN	1	181	sp|P55685|Y4WG_RHISN	Uncharacterized protein y4wG OS=Rhizobium sp. (strain
+1.3	48	141	173	sp|P55685|Y4WG_RHISN	31	62	sp|Q07074|YH007_YEAST	Uncharacterized protein YHR007C-A OS=Saccharomyces
+5.2	28	42	167	sp|P55685|Y4WG_RHISN	107	231	sp|Q8XVA0|Y2931_RALSO	UPF0135 protein RSc2931 OS=Ralstonia solanacearum
+5.4	24	29	149	sp|P55685|Y4WG_RHISN	89	209	sp|P33890|TIR2_YEAST	Cold shock-induced protein TIR2 OS=Saccharomyces
+5.6	27	39	151	sp|P55685|Y4WG_RHISN	317	431	sp|A7HGP8|CH602_ANADF	60 kDa chaperonin 2 OS=Anaeromyxobacter sp. (strain
+9.0	34	34	101	sp|P55685|Y4WG_RHISN	6	80	sp|Q608F1|Y1541_METCA	UPF0350 protein MCA1541 OS=Methylococcus capsulatus
+9.6e-182	100	1	345	sp|Q1XGE2|HAC1_ASPOR	1	345	sp|Q1XGE2|HAC1_ASPOR	Transcriptional activator hacA OS=Aspergillus oryzae
+1.5e-137	78	13	344	sp|Q1XGE2|HAC1_ASPOR	18	348	sp|Q8TFU8|HAC1_EMENI	Transcriptional activator hacA OS=Emericella nidulans
+1.8e-31	42	7	209	sp|Q1XGE2|HAC1_ASPOR	43	238	sp|Q8TFF3|HAC1_TRIRE	Transcriptional activator hac1 OS=Trichoderma reesei
+1.8e-31	26	253	344	sp|Q1XGE2|HAC1_ASPOR	361	450	sp|Q8TFF3|HAC1_TRIRE	Transcriptional activator hac1 OS=Trichoderma reesei
+9.3e-14	32	67	270	sp|Q1XGE2|HAC1_ASPOR	23	216	sp|P41546|HAC1_YEAST	Transcriptional activator HAC1 OS=Saccharomyces
+3.4e-12	31	10	152	sp|Q1XGE2|HAC1_ASPOR	12	157	sp|O24646|HY5_ARATH	Transcription factor HY5 OS=Arabidopsis thaliana GN=HY5
+7.0e-09	36	60	154	sp|Q1XGE2|HAC1_ASPOR	66	157	sp|Q9SM50|HY5_SOLLC	Transcription factor HY5 OS=Solanum lycopersicum GN=HY5
+3.2e-08	33	60	206	sp|Q1XGE2|HAC1_ASPOR	42	196	sp|Q3SZZ2|XBP1_BOVIN	X-box-binding protein 1 OS=Bos taurus GN=XBP1 PE=2 SV=1
+3.2e-08	29	16	187	sp|Q1XGE2|HAC1_ASPOR	10	186	sp|P17861|XBP1_HUMAN	X-box-binding protein 1 OS=Homo sapiens GN=XBP1 PE=1 SV=2
+3.7e-08	32	4	152	sp|Q1XGE2|HAC1_ASPOR	210	360	sp|A1L224|CR3L2_DANRE	Cyclic AMP-responsive element-binding protein 3-like
+1.9e-07	35	73	143	sp|Q1XGE2|HAC1_ASPOR	68	138	sp|Q8W191|HYH_ARATH	Transcription factor HY5-like OS=Arabidopsis thaliana
+9.6e-07	29	41	228	sp|Q1XGE2|HAC1_ASPOR	727	906	sp|A3LYI0|NST1_PICST	Stress response protein NST1 OS=Pichia stipitis GN=NST1
+0.11	25	40	206	sp|Q1XGE2|HAC1_ASPOR	742	901	sp|A3LYI0|NST1_PICST	Stress response protein NST1 OS=Pichia stipitis GN=NST1
+6.4e-06	30	14	157	sp|Q1XGE2|HAC1_ASPOR	228	368	sp|Q70SY1|CR3L2_HUMAN	Cyclic AMP-responsive element-binding protein 3-like
+6.4e-06	30	14	157	sp|Q1XGE2|HAC1_ASPOR	228	368	sp|Q5RCM9|CR3L2_PONAB	Cyclic AMP-responsive element-binding protein 3-like
+6.5e-06	24	18	297	sp|Q1XGE2|HAC1_ASPOR	234	518	sp|Q8BH52|CR3L2_MOUSE	Cyclic AMP-responsive element-binding protein 3-like
+1.2e-05	27	26	207	sp|Q1XGE2|HAC1_ASPOR	138	318	sp|Q61817|CREB3_MOUSE	Cyclic AMP-responsive element-binding protein 3 OS=Mus
+1.4e-05	28	4	152	sp|Q1XGE2|HAC1_ASPOR	218	368	sp|A2VD01|CR3L2_XENLA	Cyclic AMP-responsive element-binding protein 3-like
+2.3e-05	30	14	228	sp|Q1XGE2|HAC1_ASPOR	223	433	sp|Q66HA2|CR3L1_RAT	Cyclic AMP-responsive element-binding protein 3-like
+2.4e-05	24	46	270	sp|Q1XGE2|HAC1_ASPOR	363	593	sp|Q54WN7|BZPF_DICDI	Probable basic-leucine zipper transcription factor F
+3.0e-05	30	14	228	sp|Q1XGE2|HAC1_ASPOR	224	434	sp|Q9Z125|CR3L1_MOUSE	Cyclic AMP-responsive element-binding protein 3-like
+6.0e-05	28	69	145	sp|Q1XGE2|HAC1_ASPOR	21	97	sp|Q9NR55|BATF3_HUMAN	Basic leucine zipper transcriptional factor ATF-like 3
+6.0e-05	33	83	145	sp|Q1XGE2|HAC1_ASPOR	28	90	sp|Q9D275|BATF3_MOUSE	Basic leucine zipper transcriptional factor ATF-like 3
+6.4e-05	29	14	230	sp|Q1XGE2|HAC1_ASPOR	224	434	sp|Q96BA8|CR3L1_HUMAN	Cyclic AMP-responsive element-binding protein 3-like
+7.2e-05	25	15	229	sp|Q1XGE2|HAC1_ASPOR	2294	2516	sp|O88778|BSN_RAT	Protein bassoon OS=Rattus norvegicus GN=Bsn PE=1 SV=3
+0.039	24	12	189	sp|Q1XGE2|HAC1_ASPOR	2318	2504	sp|O88778|BSN_RAT	Protein bassoon OS=Rattus norvegicus GN=Bsn PE=1 SV=3
+0.00011	31	29	157	sp|Q1XGE2|HAC1_ASPOR	244	368	sp|Q6QDP7|CR3L2_RAT	Cyclic AMP-responsive element-binding protein 3-like
+0.00012	27	3	236	sp|Q1XGE2|HAC1_ASPOR	429	680	sp|Q9WVS8|MK07_MOUSE	Mitogen-activated protein kinase 7 OS=Mus musculus
+0.00013	27	24	151	sp|Q1XGE2|HAC1_ASPOR	160	284	sp|Q08CW8|CR3L4_XENTR	Cyclic AMP-responsive element-binding protein 3-like
+0.00016	31	71	160	sp|Q1XGE2|HAC1_ASPOR	17	103	sp|Q16520|BATF_HUMAN	Basic leucine zipper transcriptional factor ATF-like
+0.00017	29	18	146	sp|Q1XGE2|HAC1_ASPOR	119	256	sp|Q9D2A5|CR3L4_MOUSE	Cyclic AMP-responsive element-binding protein 3-like
+0.30	30	70	145	sp|Q1XGE2|HAC1_ASPOR	180	269	sp|Q9D2A5|CR3L4_MOUSE	Cyclic AMP-responsive element-binding protein 3-like
+0.00020	29	80	182	sp|Q1XGE2|HAC1_ASPOR	195	296	sp|Q99090|CPRF2_PETCR	Light-inducible protein CPRF2 OS=Petroselinum crispum
+0.00021	30	83	145	sp|Q1XGE2|HAC1_ASPOR	28	90	sp|P97876|BATF3_RAT	Basic leucine zipper transcriptional factor ATF-like 3
+0.00029	26	31	251	sp|Q1XGE2|HAC1_ASPOR	515	729	sp|Q5B3C8|NST1_EMENI	Stress response protein nst1 OS=Emericella nidulans
+0.00030	33	48	162	sp|Q1XGE2|HAC1_ASPOR	214	318	sp|Q91XE9|CR3L3_MOUSE	Cyclic AMP-responsive element-binding protein 3-like
+0.00030	28	15	56	sp|Q1XGE2|HAC1_ASPOR	130	171	sp|Q91XE9|CR3L3_MOUSE	Cyclic AMP-responsive element-binding protein 3-like
+0.00032	26	48	275	sp|Q1XGE2|HAC1_ASPOR	213	434	sp|Q3SYZ3|CR3L3_BOVIN	Cyclic AMP-responsive element-binding protein 3-like
+0.00032	22	18	154	sp|Q1XGE2|HAC1_ASPOR	204	338	sp|Q6NW59|ATF4_DANRE	Cyclic AMP-dependent transcription factor ATF-4 OS=Danio
+0.00032	40	73	135	sp|Q1XGE2|HAC1_ASPOR	52	114	sp|Q9R1S4|XBP1_RAT	X-box-binding protein 1 OS=Rattus norvegicus GN=Xbp1 PE=2
+0.00034	28	18	160	sp|Q1XGE2|HAC1_ASPOR	212	349	sp|Q06507|ATF4_MOUSE	Cyclic AMP-dependent transcription factor ATF-4 OS=Mus
+0.00044	31	66	160	sp|Q1XGE2|HAC1_ASPOR	258	351	sp|P18848|ATF4_HUMAN	Cyclic AMP-dependent transcription factor ATF-4 OS=Homo
+0.00045	28	71	160	sp|Q1XGE2|HAC1_ASPOR	17	103	sp|O35284|BATF_MOUSE	Basic leucine zipper transcriptional factor ATF-like
+0.00053	28	72	222	sp|Q1XGE2|HAC1_ASPOR	145	290	sp|P13346|FOSB_MOUSE	Protein fosB OS=Mus musculus GN=Fosb PE=2 SV=1
+0.00059	26	29	163	sp|Q1XGE2|HAC1_ASPOR	171	307	sp|Q90888|MAFB_CHICK	Transcription factor MafB OS=Gallus gallus GN=MAFB PE=1
+0.00059	26	29	163	sp|Q1XGE2|HAC1_ASPOR	171	307	sp|Q90370|MAFB_COTJA	Transcription factor MafB OS=Coturnix coturnix japonica
+0.00071	34	73	143	sp|Q1XGE2|HAC1_ASPOR	52	130	sp|O35426|XBP1_MOUSE	X-box-binding protein 1 OS=Mus musculus GN=Xbp1 PE=2 SV=2
+0.00084	25	68	216	sp|Q1XGE2|HAC1_ASPOR	109	261	sp|P51145|FOSL2_RAT	Fos-related antigen 2 OS=Rattus norvegicus GN=Fosl2 PE=2
+0.00090	28	48	227	sp|Q1XGE2|HAC1_ASPOR	218	383	sp|Q68CJ9|CR3L3_HUMAN	Cyclic AMP-responsive element-binding protein 3-like
+0.00097	24	43	203	sp|Q1XGE2|HAC1_ASPOR	675	844	sp|A4R2R1|NST1_MAGGR	Stress response protein NST1 OS=Magnaporthe grisea
+5.1	24	35	142	sp|Q1XGE2|HAC1_ASPOR	614	718	sp|A4R2R1|NST1_MAGGR	Stress response protein NST1 OS=Magnaporthe grisea
+0.0011	34	83	167	sp|Q1XGE2|HAC1_ASPOR	201	281	sp|O57342|MAFA_COTJA	Transcription factor MafA OS=Coturnix coturnix japonica
+0.0012	26	47	193	sp|Q1XGE2|HAC1_ASPOR	5	156	sp|O60675|MAFK_HUMAN	Transcription factor MafK OS=Homo sapiens GN=MAFK PE=1
+0.0012	29	64	232	sp|Q1XGE2|HAC1_ASPOR	88	263	sp|P15407|FOSL1_HUMAN	Fos-related antigen 1 OS=Homo sapiens GN=FOSL1 PE=1 SV=1
+0.0014	33	48	162	sp|Q1XGE2|HAC1_ASPOR	214	318	sp|Q5FVM5|CR3L3_RAT	Cyclic AMP-responsive element-binding protein 3-like
+0.0014	26	15	56	sp|Q1XGE2|HAC1_ASPOR	130	171	sp|Q5FVM5|CR3L3_RAT	Cyclic AMP-responsive element-binding protein 3-like
+0.0015	25	9	221	sp|Q1XGE2|HAC1_ASPOR	105	326	sp|Q03173|ENAH_MOUSE	Protein enabled homolog OS=Mus musculus GN=Enah PE=1 SV=2
+0.0015	27	72	222	sp|Q1XGE2|HAC1_ASPOR	145	290	sp|P53539|FOSB_HUMAN	Protein fosB OS=Homo sapiens GN=FOSB PE=1 SV=1
+0.0016	33	16	119	sp|Q1XGE2|HAC1_ASPOR	188	291	sp|Q2VZV0|IF2_MAGSA	Translation initiation factor IF-2 OS=Magnetospirillum
+0.0017	26	47	193	sp|Q1XGE2|HAC1_ASPOR	5	156	sp|Q61827|MAFK_MOUSE	Transcription factor MafK OS=Mus musculus GN=Mafk PE=2
+0.0018	30	8	150	sp|Q1XGE2|HAC1_ASPOR	370	508	sp|P29747|CREBA_DROME	Cyclic AMP response element-binding protein A
+0.0018	66	10	21	sp|Q1XGE2|HAC1_ASPOR	71	82	sp|P29747|CREBA_DROME	Cyclic AMP response element-binding protein A
+0.0019	30	74	237	sp|Q1XGE2|HAC1_ASPOR	125	298	sp|O88479|FOS_MESAU	Proto-oncogene c-Fos OS=Mesocricetus auratus GN=FOS PE=3
+0.0019	26	72	209	sp|Q1XGE2|HAC1_ASPOR	145	284	sp|Q9TUB3|FOSB_CANFA	Protein fosB OS=Canis familiaris GN=FOSB PE=3 SV=1
+0.0020	31	54	146	sp|Q1XGE2|HAC1_ASPOR	192	280	sp|Q8TEY5|CR3L4_HUMAN	Cyclic AMP-responsive element-binding protein 3-like
+0.0020	31	54	146	sp|Q1XGE2|HAC1_ASPOR	192	280	sp|Q5UEM8|CR3L4_MACFA	Cyclic AMP-responsive element-binding protein 3-like
+0.0020	30	66	160	sp|Q1XGE2|HAC1_ASPOR	255	347	sp|Q9ES19|ATF4_RAT	Cyclic AMP-dependent transcription factor ATF-4 OS=Rattus
+0.0020	22	6	254	sp|Q1XGE2|HAC1_ASPOR	39	286	sp|P79702|FOS_CYPCA	Proto-oncogene c-Fos OS=Cyprinus carpio GN=fos PE=2 SV=1
+0.0021	31	35	142	sp|Q1XGE2|HAC1_ASPOR	111	219	sp|Q8N8S7|ENAH_HUMAN	Protein enabled homolog OS=Homo sapiens GN=ENAH PE=1 SV=2
+0.045	30	37	142	sp|Q1XGE2|HAC1_ASPOR	102	207	sp|Q8N8S7|ENAH_HUMAN	Protein enabled homolog OS=Homo sapiens GN=ENAH PE=1 SV=2
+0.20	28	49	173	sp|Q1XGE2|HAC1_ASPOR	177	302	sp|Q8N8S7|ENAH_HUMAN	Protein enabled homolog OS=Homo sapiens GN=ENAH PE=1 SV=2
+0.0023	25	68	216	sp|Q1XGE2|HAC1_ASPOR	108	260	sp|P47930|FOSL2_MOUSE	Fos-related antigen 2 OS=Mus musculus GN=Fosl2 PE=2 SV=1
+0.0027	29	26	172	sp|Q1XGE2|HAC1_ASPOR	277	424	sp|Q5R9C9|ATF7_PONAB	Cyclic AMP-dependent transcription factor ATF-7 OS=Pongo
+0.0028	29	26	172	sp|Q1XGE2|HAC1_ASPOR	288	435	sp|P17544|ATF7_HUMAN	Cyclic AMP-dependent transcription factor ATF-7 OS=Homo
+0.0030	27	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|Q9Y5Q3|MAFB_HUMAN	Transcription factor MafB OS=Homo sapiens GN=MAFB PE=1
+0.0032	28	42	208	sp|Q1XGE2|HAC1_ASPOR	92	255	sp|Q9UQ88|CD11A_HUMAN	Cell division protein kinase 11A OS=Homo sapiens
+0.0032	26	259	302	sp|Q1XGE2|HAC1_ASPOR	622	665	sp|Q9UQ88|CD11A_HUMAN	Cell division protein kinase 11A OS=Homo sapiens
+0.0033	30	63	185	sp|Q1XGE2|HAC1_ASPOR	159	282	sp|O43889|CREB3_HUMAN	Cyclic AMP-responsive element-binding protein 3 OS=Homo
+0.0034	26	19	146	sp|Q1XGE2|HAC1_ASPOR	210	338	sp|Q3ZCH6|ATF4_BOVIN	Cyclic AMP-dependent transcription factor ATF-4 OS=Bos
+0.0035	29	26	143	sp|Q1XGE2|HAC1_ASPOR	277	392	sp|Q8R0S1|ATF7_MOUSE	Cyclic AMP-dependent transcription factor ATF-7 OS=Mus
+0.0037	37	79	149	sp|Q1XGE2|HAC1_ASPOR	218	296	sp|P42774|GBF1_ARATH	G-box-binding factor 1 OS=Arabidopsis thaliana GN=GBF1
+3.9	29	23	144	sp|Q1XGE2|HAC1_ASPOR	191	306	sp|P42774|GBF1_ARATH	G-box-binding factor 1 OS=Arabidopsis thaliana GN=GBF1
+0.0038	26	20	221	sp|Q1XGE2|HAC1_ASPOR	105	301	sp|Q8SQ19|CREB3_BOVIN	Cyclic AMP-responsive element-binding protein 3 OS=Bos
+0.0038	33	60	146	sp|Q1XGE2|HAC1_ASPOR	170	252	sp|Q5UEM7|CR3L4_RAT	Cyclic AMP-responsive element-binding protein 3-like
+0.0038	50	19	36	sp|Q1XGE2|HAC1_ASPOR	29	46	sp|Q5UEM7|CR3L4_RAT	Cyclic AMP-responsive element-binding protein 3-like
+0.0039	26	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|P54842|MAFB_RAT	Transcription factor MafB OS=Rattus norvegicus GN=Mafb PE=1
+0.0039	27	3	236	sp|Q1XGE2|HAC1_ASPOR	429	655	sp|A5PKJ4|MK07_BOVIN	Mitogen-activated protein kinase 7 OS=Bos taurus GN=MAPK7
+0.0040	26	2	237	sp|Q1XGE2|HAC1_ASPOR	57	297	sp|P01101|FOS_MOUSE	Proto-oncogene c-Fos OS=Mus musculus GN=Fos PE=1 SV=1
+0.0045	25	41	172	sp|Q1XGE2|HAC1_ASPOR	629	763	sp|O13024|INCEA_XENLA	Inner centromere protein A OS=Xenopus laevis GN=incenp-A
+0.26	33	67	146	sp|Q1XGE2|HAC1_ASPOR	484	567	sp|O13024|INCEA_XENLA	Inner centromere protein A OS=Xenopus laevis GN=incenp-A
+5.3	28	38	154	sp|Q1XGE2|HAC1_ASPOR	584	703	sp|O13024|INCEA_XENLA	Inner centromere protein A OS=Xenopus laevis GN=incenp-A
+0.0050	27	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|Q2PFS4|MAFB_MACFA	Transcription factor MafB OS=Macaca fascicularis GN=MAFB
+0.0050	28	41	230	sp|Q1XGE2|HAC1_ASPOR	747	930	sp|Q5KGK5|EIF3A_CRYNE	Eukaryotic translation initiation factor 3 subunit A
+0.0051	29	74	237	sp|Q1XGE2|HAC1_ASPOR	125	297	sp|O97930|FOS_PIG	Proto-oncogene c-Fos OS=Sus scrofa GN=FOS PE=3 SV=2
+0.0052	31	74	237	sp|Q1XGE2|HAC1_ASPOR	125	297	sp|P01102|FOS_MSVFB	p55-v-Fos-transforming protein OS=FBJ murine osteosarcoma
+0.0057	24	74	223	sp|Q1XGE2|HAC1_ASPOR	4	163	sp|Q09926|PCR1_SCHPO	Transcription factor pcr1 OS=Schizosaccharomyces pombe
+0.0062	25	47	193	sp|Q1XGE2|HAC1_ASPOR	5	156	sp|Q90596|MAFK_CHICK	Transcription factor MafK OS=Gallus gallus GN=MAFK PE=1
+0.0063	25	29	163	sp|Q1XGE2|HAC1_ASPOR	176	312	sp|Q504L8|MAFB_XENTR	Transcription factor MafB OS=Xenopus tropicalis GN=mafb
+0.0065	25	16	273	sp|Q1XGE2|HAC1_ASPOR	1009	1269	sp|Q1DQC1|PAN1_COCIM	Actin cytoskeleton-regulatory complex protein PAN1
+0.0065	26	14	163	sp|Q1XGE2|HAC1_ASPOR	174	319	sp|P54841|MAFB_MOUSE	Transcription factor MafB OS=Mus musculus GN=Mafb PE=1
+0.0078	22	41	219	sp|Q1XGE2|HAC1_ASPOR	800	987	sp|Q5A2K0|NST1_CANAL	Stress response protein NST1 OS=Candida albicans GN=NST1
+7.0	24	41	151	sp|Q1XGE2|HAC1_ASPOR	729	840	sp|Q5A2K0|NST1_CANAL	Stress response protein NST1 OS=Candida albicans GN=NST1
+0.0079	25	19	233	sp|Q1XGE2|HAC1_ASPOR	146	364	sp|Q8VCH8|UBXN4_MOUSE	UBX domain-containing protein 4 OS=Mus musculus GN=Ubxn4
+0.0080	25	8	199	sp|Q1XGE2|HAC1_ASPOR	138	322	sp|Q502F0|CR3LA_DANRE	Cyclic AMP-responsive element-binding protein 3-like
+0.0081	27	64	232	sp|Q1XGE2|HAC1_ASPOR	90	267	sp|P10158|FOSL1_RAT	Fos-related antigen 1 OS=Rattus norvegicus GN=Fosl1 PE=2
+0.0081	28	16	163	sp|Q1XGE2|HAC1_ASPOR	9	155	sp|P97875|JDP2_MOUSE	Jun dimerization protein 2 OS=Mus musculus GN=Jdp2 PE=1
+0.0081	28	16	163	sp|Q1XGE2|HAC1_ASPOR	9	155	sp|Q78E65|JDP2_RAT	Jun dimerization protein 2 OS=Rattus norvegicus GN=Jdp2
+0.0086	29	68	185	sp|Q1XGE2|HAC1_ASPOR	108	227	sp|P15408|FOSL2_HUMAN	Fos-related antigen 2 OS=Homo sapiens GN=FOSL2 PE=1 SV=1
+0.0087	32	89	167	sp|Q1XGE2|HAC1_ASPOR	205	281	sp|O42290|MAFA_CHICK	Transcription factor MafA OS=Gallus gallus GN=MAFA PE=1
+0.011	20	66	223	sp|Q1XGE2|HAC1_ASPOR	83	237	sp|A1C9M5|KAPC_ASPCL	Putative transcription factor kapC OS=Aspergillus
+0.011	47	299	315	sp|Q1XGE2|HAC1_ASPOR	269	285	sp|A1C9M5|KAPC_ASPCL	Putative transcription factor kapC OS=Aspergillus
+0.011	26	3	236	sp|Q1XGE2|HAC1_ASPOR	429	680	sp|P0C865|MK07_RAT	Mitogen-activated protein kinase 7 OS=Rattus norvegicus
+0.013	33	50	143	sp|Q1XGE2|HAC1_ASPOR	609	700	sp|Q15424|SAFB1_HUMAN	Scaffold attachment factor B1 OS=Homo sapiens GN=SAFB
+0.014	23	7	259	sp|Q1XGE2|HAC1_ASPOR	282	518	sp|O60841|IF2P_HUMAN	Eukaryotic translation initiation factor 5B OS=Homo
+0.014	23	6	259	sp|Q1XGE2|HAC1_ASPOR	278	518	sp|Q5RDE1|IF2P_PONAB	Eukaryotic translation initiation factor 5B OS=Pongo
+0.015	32	14	145	sp|Q1XGE2|HAC1_ASPOR	291	435	sp|Q9M7Q3|AI5L6_ARATH	ABSCISIC ACID-INSENSITIVE 5-like protein 6
+0.016	29	39	165	sp|Q1XGE2|HAC1_ASPOR	764	903	sp|A9V549|EIF3A_MONBE	Eukaryotic translation initiation factor 3 subunit A
+1.9	24	49	188	sp|Q1XGE2|HAC1_ASPOR	768	901	sp|A9V549|EIF3A_MONBE	Eukaryotic translation initiation factor 3 subunit A
+0.016	27	46	223	sp|Q1XGE2|HAC1_ASPOR	294	477	sp|Q9UKV3|ACINU_HUMAN	Apoptotic chromatin condensation inducer in the nucleus
+0.017	29	39	210	sp|Q1XGE2|HAC1_ASPOR	79	238	sp|Q63ZM7|STABP_XENLA	STAM-binding protein-like OS=Xenopus laevis GN=stambp
+0.018	26	6	180	sp|Q1XGE2|HAC1_ASPOR	281	460	sp|Q4QRL3|CC88B_MOUSE	Coiled-coil domain-containing protein 88B OS=Mus
+1.6	29	74	154	sp|Q1XGE2|HAC1_ASPOR	1164	1243	sp|Q4QRL3|CC88B_MOUSE	Coiled-coil domain-containing protein 88B OS=Mus
+0.019	28	74	237	sp|Q1XGE2|HAC1_ASPOR	125	297	sp|P01100|FOS_HUMAN	Proto-oncogene c-Fos OS=Homo sapiens GN=FOS PE=1 SV=1
+0.019	29	74	237	sp|Q1XGE2|HAC1_ASPOR	125	297	sp|P12841|FOS_RAT	Proto-oncogene c-Fos OS=Rattus norvegicus GN=Fos PE=1 SV=1
+0.019	27	28	157	sp|Q1XGE2|HAC1_ASPOR	13	131	sp|P19880|YAP1_YEAST	AP-1-like transcription factor YAP1 OS=Saccharomyces
+0.019	21	160	269	sp|Q1XGE2|HAC1_ASPOR	438	545	sp|P19880|YAP1_YEAST	AP-1-like transcription factor YAP1 OS=Saccharomyces
+0.019	35	73	153	sp|Q1XGE2|HAC1_ASPOR	644	724	sp|Q8CH25|SLTM_MOUSE	SAFB-like transcription modulator OS=Mus musculus GN=Sltm
+0.069	28	39	151	sp|Q1XGE2|HAC1_ASPOR	597	709	sp|Q8CH25|SLTM_MOUSE	SAFB-like transcription modulator OS=Mus musculus GN=Sltm
+0.020	35	73	153	sp|Q1XGE2|HAC1_ASPOR	645	725	sp|Q9NWH9|SLTM_HUMAN	SAFB-like transcription modulator OS=Homo sapiens GN=SLTM
+0.15	28	39	151	sp|Q1XGE2|HAC1_ASPOR	598	710	sp|Q9NWH9|SLTM_HUMAN	SAFB-like transcription modulator OS=Homo sapiens GN=SLTM
+0.020	25	2	148	sp|Q1XGE2|HAC1_ASPOR	142	290	sp|Q16534|HLF_HUMAN	Hepatic leukemia factor OS=Homo sapiens GN=HLF PE=2 SV=1
+0.020	25	2	148	sp|Q1XGE2|HAC1_ASPOR	142	290	sp|Q8BW74|HLF_MOUSE	Hepatic leukemia factor OS=Mus musculus GN=Hlf PE=2 SV=1
+0.021	27	74	219	sp|Q1XGE2|HAC1_ASPOR	489	640	sp|Q6CBW0|NST1_YARLI	Stress response protein NST1 OS=Yarrowia lipolytica
+0.045	27	48	194	sp|Q1XGE2|HAC1_ASPOR	477	629	sp|Q6CBW0|NST1_YARLI	Stress response protein NST1 OS=Yarrowia lipolytica
+1.2	23	44	224	sp|Q1XGE2|HAC1_ASPOR	441	606	sp|Q6CBW0|NST1_YARLI	Stress response protein NST1 OS=Yarrowia lipolytica
+7.0	27	37	154	sp|Q1XGE2|HAC1_ASPOR	368	480	sp|Q6CBW0|NST1_YARLI	Stress response protein NST1 OS=Yarrowia lipolytica
+0.85	26	43	141	sp|Q1XGE2|HAC1_ASPOR	389	483	sp|Q6CBW0|NST1_YARLI	Stress response protein NST1 OS=Yarrowia lipolytica
+0.85	27	129	216	sp|Q1XGE2|HAC1_ASPOR	633	721	sp|Q6CBW0|NST1_YARLI	Stress response protein NST1 OS=Yarrowia lipolytica
+0.022	30	73	153	sp|Q1XGE2|HAC1_ASPOR	607	689	sp|Q498L2|SLTM_XENLA	SAFB-like transcription modulator OS=Xenopus laevis
+0.022	26	29	83	sp|Q1XGE2|HAC1_ASPOR	456	509	sp|Q498L2|SLTM_XENLA	SAFB-like transcription modulator OS=Xenopus laevis
+0.045	20	6	83	sp|Q1XGE2|HAC1_ASPOR	120	195	sp|Q498L2|SLTM_XENLA	SAFB-like transcription modulator OS=Xenopus laevis
+0.023	25	9	123	sp|Q1XGE2|HAC1_ASPOR	1	122	sp|Q1E554|CGR1_COCIM	rRNA-processing protein CGR1 OS=Coccidioides immitis
+0.023	27	15	144	sp|Q1XGE2|HAC1_ASPOR	47	181	sp|Q91496|FOS_TETFL	Proto-oncogene c-Fos OS=Tetraodon fluviatilis GN=fos PE=3
+0.023	26	62	200	sp|Q1XGE2|HAC1_ASPOR	455	605	sp|Q9ESN9|JIP3_MOUSE	C-Jun-amino-terminal kinase-interacting protein 3 OS=Mus
+0.023	31	8	65	sp|Q1XGE2|HAC1_ASPOR	266	322	sp|Q9ESN9|JIP3_MOUSE	C-Jun-amino-terminal kinase-interacting protein 3 OS=Mus
+0.023	25	15	248	sp|Q1XGE2|HAC1_ASPOR	48	279	sp|P53450|FOS_TAKRU	Proto-oncogene c-Fos OS=Takifugu rubripes GN=fos PE=3 SV=1
+0.024	22	43	187	sp|Q1XGE2|HAC1_ASPOR	343	478	sp|Q05682|CALD1_HUMAN	Caldesmon OS=Homo sapiens GN=CALD1 PE=1 SV=2
+0.49	25	73	239	sp|Q1XGE2|HAC1_ASPOR	541	702	sp|Q05682|CALD1_HUMAN	Caldesmon OS=Homo sapiens GN=CALD1 PE=1 SV=2
+4.7	25	43	133	sp|Q1XGE2|HAC1_ASPOR	315	400	sp|Q05682|CALD1_HUMAN	Caldesmon OS=Homo sapiens GN=CALD1 PE=1 SV=2
+0.49	24	32	84	sp|Q1XGE2|HAC1_ASPOR	425	477	sp|Q05682|CALD1_HUMAN	Caldesmon OS=Homo sapiens GN=CALD1 PE=1 SV=2
+0.024	28	74	237	sp|Q1XGE2|HAC1_ASPOR	125	297	sp|O77628|FOS_BOVIN	Proto-oncogene c-Fos OS=Bos taurus GN=FOS PE=2 SV=2
+0.024	29	74	237	sp|Q1XGE2|HAC1_ASPOR	125	298	sp|Q56TT7|FOS_PHOCM	Proto-oncogene c-Fos OS=Phodopus campbelli GN=FOS PE=3
+0.025	24	66	223	sp|Q1XGE2|HAC1_ASPOR	85	240	sp|Q0CEI3|KAPC_ASPTN	Putative transcription factor kapC OS=Aspergillus terreus
+0.025	24	9	250	sp|Q1XGE2|HAC1_ASPOR	628	858	sp|Q6P9R4|ARHGI_MOUSE	Rho guanine nucleotide exchange factor 18 OS=Mus
+0.025	24	8	181	sp|Q1XGE2|HAC1_ASPOR	14	192	sp|P29681|IMPE2_DROME	20-hydroxyecdysone protein OS=Drosophila melanogaster
+0.026	25	7	149	sp|Q1XGE2|HAC1_ASPOR	530	669	sp|A2AJI0|MA7D1_MOUSE	MAP7 domain-containing protein 1 OS=Mus musculus
+0.41	22	6	172	sp|Q1XGE2|HAC1_ASPOR	570	748	sp|A2AJI0|MA7D1_MOUSE	MAP7 domain-containing protein 1 OS=Mus musculus
+0.048	25	7	145	sp|Q1XGE2|HAC1_ASPOR	58	202	sp|A2AJI0|MA7D1_MOUSE	MAP7 domain-containing protein 1 OS=Mus musculus
+0.048	27	133	204	sp|Q1XGE2|HAC1_ASPOR	524	589	sp|A2AJI0|MA7D1_MOUSE	MAP7 domain-containing protein 1 OS=Mus musculus
+0.028	33	50	143	sp|Q1XGE2|HAC1_ASPOR	609	699	sp|Q5R452|SAFB1_PONAB	Scaffold attachment factor B1 OS=Pongo abelii GN=SAFB
+0.029	29	80	199	sp|Q1XGE2|HAC1_ASPOR	207	322	sp|Q1LYG4|CR3LB_DANRE	Cyclic AMP-responsive element-binding protein 3-like
+0.029	25	43	149	sp|Q1XGE2|HAC1_ASPOR	319	432	sp|Q9D439|CCD11_MOUSE	Coiled-coil domain-containing protein 11 OS=Mus musculus
+0.029	27	64	232	sp|Q1XGE2|HAC1_ASPOR	88	265	sp|P48755|FOSL1_MOUSE	Fos-related antigen 1 OS=Mus musculus GN=Fosl1 PE=2 SV=2
+0.029	25	29	163	sp|Q1XGE2|HAC1_ASPOR	171	309	sp|Q6DE84|MAFB_XENLA	Transcription factor MafB OS=Xenopus laevis GN=mafb PE=2
+0.030	30	74	153	sp|Q1XGE2|HAC1_ASPOR	268	347	sp|Q54RZ9|BZPG_DICDI	Probable basic-leucine zipper transcription factor G
+0.030	24	1	215	sp|Q1XGE2|HAC1_ASPOR	208	432	sp|A0JMK9|CAF1A_DANRE	Chromatin assembly factor 1 subunit A OS=Danio rerio
+0.030	31	236	286	sp|Q1XGE2|HAC1_ASPOR	524	569	sp|A0JMK9|CAF1A_DANRE	Chromatin assembly factor 1 subunit A OS=Danio rerio
+0.031	26	68	207	sp|Q1XGE2|HAC1_ASPOR	108	249	sp|P18625|FOSL2_CHICK	Fos-related antigen 2 OS=Gallus gallus GN=FOSL2 PE=1
+0.031	22	66	223	sp|Q1XGE2|HAC1_ASPOR	85	236	sp|A2R346|KAPC_ASPNC	Putative transcription factor kapC OS=Aspergillus niger
+0.031	28	74	237	sp|Q1XGE2|HAC1_ASPOR	126	298	sp|Q8HZP6|FOS_FELCA	Proto-oncogene c-Fos OS=Felis catus GN=FOS PE=2 SV=1
+0.034	25	49	150	sp|Q1XGE2|HAC1_ASPOR	326	428	sp|P26042|MOES_PIG	Moesin OS=Sus scrofa GN=MSN PE=2 SV=3
+0.043	30	66	157	sp|Q1XGE2|HAC1_ASPOR	297	384	sp|P26042|MOES_PIG	Moesin OS=Sus scrofa GN=MSN PE=2 SV=3
+0.034	25	49	150	sp|Q1XGE2|HAC1_ASPOR	326	428	sp|Q2HJ49|MOES_BOVIN	Moesin OS=Bos taurus GN=MSN PE=2 SV=3
+0.056	31	66	145	sp|Q1XGE2|HAC1_ASPOR	297	367	sp|Q2HJ49|MOES_BOVIN	Moesin OS=Bos taurus GN=MSN PE=2 SV=3
+0.035	26	48	255	sp|Q1XGE2|HAC1_ASPOR	60	271	sp|A5FV21|IF2_ACICJ	Translation initiation factor IF-2 OS=Acidiphilium cryptum
+0.56	24	27	229	sp|Q1XGE2|HAC1_ASPOR	27	238	sp|A5FV21|IF2_ACICJ	Translation initiation factor IF-2 OS=Acidiphilium cryptum
+0.035	27	32	205	sp|Q1XGE2|HAC1_ASPOR	8	187	sp|A6SCT6|DBP3_BOTFB	ATP-dependent RNA helicase dbp3 OS=Botryotinia fuckeliana
+0.036	32	35	168	sp|Q1XGE2|HAC1_ASPOR	754	892	sp|Q7PGE8|EIF3A_ANOGA	Eukaryotic translation initiation factor 3 subunit A
+0.037	26	39	216	sp|Q1XGE2|HAC1_ASPOR	488	676	sp|O77788|NFM_BOVIN	Neurofilament medium polypeptide OS=Bos taurus GN=NEFM
+0.038	24	17	178	sp|Q1XGE2|HAC1_ASPOR	151	317	sp|Q9JTB5|IF2_NEIMA	Translation initiation factor IF-2 OS=Neisseria
+0.038	24	17	178	sp|Q1XGE2|HAC1_ASPOR	151	317	sp|Q9JYD2|IF2_NEIMB	Translation initiation factor IF-2 OS=Neisseria
+0.038	24	17	178	sp|Q1XGE2|HAC1_ASPOR	151	317	sp|A1KV51|IF2_NEIMF	Translation initiation factor IF-2 OS=Neisseria
+0.039	24	17	162	sp|Q1XGE2|HAC1_ASPOR	49	179	sp|P0C5H8|KAPC_EMENI	Putative transcription factor kapC OS=Emericella nidulans
+0.040	30	5	149	sp|Q1XGE2|HAC1_ASPOR	610	764	sp|Q80YR5|SAFB2_MOUSE	Scaffold attachment factor B2 OS=Mus musculus GN=Safb2
+0.040	29	74	237	sp|Q1XGE2|HAC1_ASPOR	125	298	sp|Q56TN0|FOS_PHORO	Proto-oncogene c-Fos OS=Phodopus roborovskii GN=FOS PE=3
+0.042	30	83	167	sp|Q1XGE2|HAC1_ASPOR	203	284	sp|Q4U1U2|MAFA_XENTR	Transcription factor MafA OS=Xenopus tropicalis GN=mafa
+0.043	25	49	150	sp|Q1XGE2|HAC1_ASPOR	326	428	sp|P26038|MOES_HUMAN	Moesin OS=Homo sapiens GN=MSN PE=1 SV=3
+0.056	31	66	145	sp|Q1XGE2|HAC1_ASPOR	297	367	sp|P26038|MOES_HUMAN	Moesin OS=Homo sapiens GN=MSN PE=1 SV=3
+0.044	25	2	148	sp|Q1XGE2|HAC1_ASPOR	142	290	sp|Q64709|HLF_RAT	Hepatic leukemia factor OS=Rattus norvegicus GN=Hlf PE=2
+0.045	28	29	142	sp|Q1XGE2|HAC1_ASPOR	216	324	sp|A0JMT0|CA1AB_XENLA	Chromatin assembly factor 1 subunit A-B OS=Xenopus
+0.058	22	8	210	sp|Q1XGE2|HAC1_ASPOR	234	432	sp|A0JMT0|CA1AB_XENLA	Chromatin assembly factor 1 subunit A-B OS=Xenopus
+0.045	28	48	180	sp|Q1XGE2|HAC1_ASPOR	824	957	sp|Q6Y7W6|PERQ2_HUMAN	PERQ amino acid-rich with GYF domain-containing protein
+0.045	27	1	33	sp|Q1XGE2|HAC1_ASPOR	429	461	sp|Q6Y7W6|PERQ2_HUMAN	PERQ amino acid-rich with GYF domain-containing protein
+0.046	29	48	163	sp|Q1XGE2|HAC1_ASPOR	33	155	sp|Q8WYK2|JDP2_HUMAN	Jun dimerization protein 2 OS=Homo sapiens GN=JDP2 PE=1
+0.047	30	52	143	sp|Q1XGE2|HAC1_ASPOR	194	284	sp|Q8K1L0|CREB5_MOUSE	Cyclic AMP-responsive element-binding protein 5 OS=Mus
+0.047	22	2	193	sp|Q1XGE2|HAC1_ASPOR	410	608	sp|Q9C0A6|SETD5_HUMAN	SET domain-containing protein 5 OS=Homo sapiens GN=SETD5
+0.047	25	22	233	sp|Q1XGE2|HAC1_ASPOR	156	366	sp|Q92575|UBXN4_HUMAN	UBX domain-containing protein 4 OS=Homo sapiens GN=UBXN4
+0.047	25	22	233	sp|Q1XGE2|HAC1_ASPOR	156	366	sp|Q5R4I3|UBXN4_PONAB	UBX domain-containing protein 4 OS=Pongo abelii GN=UBXN4
+0.049	39	80	142	sp|Q1XGE2|HAC1_ASPOR	181	242	sp|P14233|TGA1B_TOBAC	TGACG-sequence-specific DNA-binding protein TGA-1B
+0.049	24	17	178	sp|Q1XGE2|HAC1_ASPOR	151	317	sp|A9M1D5|IF2_NEIM0	Translation initiation factor IF-2 OS=Neisseria
+0.050	27	80	175	sp|Q1XGE2|HAC1_ASPOR	546	644	sp|Q554P0|BZPJ_DICDI	Probable basic-leucine zipper transcription factor J
+0.051	25	43	146	sp|Q1XGE2|HAC1_ASPOR	279	378	sp|Q8N9W4|GG6L2_HUMAN	Golgin subfamily A member 6-like protein 2 OS=Homo
+3.7	26	48	138	sp|Q1XGE2|HAC1_ASPOR	361	453	sp|Q8N9W4|GG6L2_HUMAN	Golgin subfamily A member 6-like protein 2 OS=Homo
+4.8	19	35	142	sp|Q1XGE2|HAC1_ASPOR	302	409	sp|Q8N9W4|GG6L2_HUMAN	Golgin subfamily A member 6-like protein 2 OS=Homo
+7.9	24	43	142	sp|Q1XGE2|HAC1_ASPOR	404	509	sp|Q8N9W4|GG6L2_HUMAN	Golgin subfamily A member 6-like protein 2 OS=Homo
+0.051	31	71	124	sp|Q1XGE2|HAC1_ASPOR	3	54	sp|Q8N300|CCD23_HUMAN	Coiled-coil domain-containing protein 23 OS=Homo sapiens
+0.054	31	41	149	sp|Q1XGE2|HAC1_ASPOR	174	289	sp|O81025|P2A03_ARATH	Putative protein PHLOEM PROTEIN 2-LIKE A3 OS=Arabidopsis
+0.056	25	49	150	sp|Q1XGE2|HAC1_ASPOR	326	428	sp|O35763|MOES_RAT	Moesin OS=Rattus norvegicus GN=Msn PE=1 SV=3
+0.26	28	66	145	sp|Q1XGE2|HAC1_ASPOR	297	367	sp|O35763|MOES_RAT	Moesin OS=Rattus norvegicus GN=Msn PE=1 SV=3
+8.9	29	73	168	sp|Q1XGE2|HAC1_ASPOR	379	475	sp|O35763|MOES_RAT	Moesin OS=Rattus norvegicus GN=Msn PE=1 SV=3
+0.057	28	44	210	sp|Q1XGE2|HAC1_ASPOR	361	536	sp|Q9Z220|TSG10_RAT	Testis-specific gene 10 protein OS=Rattus norvegicus
+0.058	26	39	176	sp|Q1XGE2|HAC1_ASPOR	651	787	sp|Q32N93|INCEB_XENLA	Inner centromere protein B OS=Xenopus laevis GN=incenp-B
+1.2	30	67	146	sp|Q1XGE2|HAC1_ASPOR	502	585	sp|Q32N93|INCEB_XENLA	Inner centromere protein B OS=Xenopus laevis GN=incenp-B
+3.3	24	46	177	sp|Q1XGE2|HAC1_ASPOR	645	771	sp|Q32N93|INCEB_XENLA	Inner centromere protein B OS=Xenopus laevis GN=incenp-B
+9.0	26	41	157	sp|Q1XGE2|HAC1_ASPOR	610	737	sp|Q32N93|INCEB_XENLA	Inner centromere protein B OS=Xenopus laevis GN=incenp-B
+0.058	29	32	211	sp|Q1XGE2|HAC1_ASPOR	177	354	sp|Q95XZ5|NPBL_CAEEL	Nipped-B-like protein pqn-85 OS=Caenorhabditis elegans
+0.061	27	74	171	sp|Q1XGE2|HAC1_ASPOR	801	901	sp|Q6CT90|EIF3A_KLULA	Eukaryotic translation initiation factor 3 subunit A
+0.061	25	4	232	sp|Q1XGE2|HAC1_ASPOR	634	845	sp|Q5F489|TAF3_CHICK	Transcription initiation factor TFIID subunit 3 OS=Gallus
+0.061	35	80	156	sp|Q1XGE2|HAC1_ASPOR	246	326	sp|P42775|GBF2_ARATH	G-box-binding factor 2 OS=Arabidopsis thaliana GN=GBF2
+0.062	28	18	154	sp|Q1XGE2|HAC1_ASPOR	283	415	sp|Q55EQ3|Y9086_DICDI	Uncharacterized abhydrolase domain-containing protein
+0.079	25	13	187	sp|Q1XGE2|HAC1_ASPOR	324	487	sp|Q55EQ3|Y9086_DICDI	Uncharacterized abhydrolase domain-containing protein
+1.6	31	67	187	sp|Q1XGE2|HAC1_ASPOR	639	756	sp|Q55EQ3|Y9086_DICDI	Uncharacterized abhydrolase domain-containing protein
+0.062	29	73	151	sp|Q1XGE2|HAC1_ASPOR	1105	1180	sp|Q54LU8|Y8646_DICDI	Probable serine/threonine-protein kinase DDB_G0286465
+0.062	21	7	85	sp|Q1XGE2|HAC1_ASPOR	536	614	sp|Q54LU8|Y8646_DICDI	Probable serine/threonine-protein kinase DDB_G0286465
+0.25	32	43	70	sp|Q1XGE2|HAC1_ASPOR	755	782	sp|Q54LU8|Y8646_DICDI	Probable serine/threonine-protein kinase DDB_G0286465
+0.068	27	29	183	sp|Q1XGE2|HAC1_ASPOR	22	188	sp|P94517|YSCB_BACSU	Uncharacterized protein yscB OS=Bacillus subtilis GN=yscB
+0.069	23	54	174	sp|Q1XGE2|HAC1_ASPOR	799	924	sp|Q2UKG6|EIF3A_ASPOR	Eukaryotic translation initiation factor 3 subunit A
+0.071	24	49	226	sp|Q1XGE2|HAC1_ASPOR	517	693	sp|Q9Y592|CCD41_HUMAN	Coiled-coil domain-containing protein 41 OS=Homo sapiens
+6.7	26	32	146	sp|Q1XGE2|HAC1_ASPOR	192	307	sp|Q9Y592|CCD41_HUMAN	Coiled-coil domain-containing protein 41 OS=Homo sapiens
+0.072	24	13	267	sp|Q1XGE2|HAC1_ASPOR	284	545	sp|Q6Y7W8|PERQ2_MOUSE	PERQ amino acid-rich with GYF domain-containing protein
+0.091	28	48	180	sp|Q1XGE2|HAC1_ASPOR	825	958	sp|Q6Y7W8|PERQ2_MOUSE	PERQ amino acid-rich with GYF domain-containing protein
+0.091	33	10	46	sp|Q1XGE2|HAC1_ASPOR	434	472	sp|Q6Y7W8|PERQ2_MOUSE	PERQ amino acid-rich with GYF domain-containing protein
+0.072	35	246	265	sp|Q1XGE2|HAC1_ASPOR	1169	1188	sp|Q6Y7W8|PERQ2_MOUSE	PERQ amino acid-rich with GYF domain-containing protein
+0.072	33	75	136	sp|Q1XGE2|HAC1_ASPOR	202	263	sp|Q8X229|FCR3_CANAL	Fluconazole resistance protein 3 OS=Candida albicans
+0.072	24	49	150	sp|Q1XGE2|HAC1_ASPOR	326	428	sp|P26041|MOES_MOUSE	Moesin OS=Mus musculus GN=Msn PE=1 SV=3
+0.26	28	66	145	sp|Q1XGE2|HAC1_ASPOR	297	367	sp|P26041|MOES_MOUSE	Moesin OS=Mus musculus GN=Msn PE=1 SV=3
+0.074	25	55	271	sp|Q1XGE2|HAC1_ASPOR	941	1150	sp|Q9TW28|MYOM_DICDI	Myosin-M heavy chain OS=Dictyostelium discoideum GN=myoM
+0.20	28	46	205	sp|Q1XGE2|HAC1_ASPOR	943	1098	sp|Q9TW28|MYOM_DICDI	Myosin-M heavy chain OS=Dictyostelium discoideum GN=myoM
+0.077	24	32	294	sp|Q1XGE2|HAC1_ASPOR	107	375	sp|Q9NZ53|PDXL2_HUMAN	Podocalyxin-like protein 2 OS=Homo sapiens GN=PODXL2
+0.078	30	52	143	sp|Q1XGE2|HAC1_ASPOR	345	435	sp|Q02930|CREB5_HUMAN	Cyclic AMP-responsive element-binding protein 5 OS=Homo
+0.079	27	14	203	sp|Q1XGE2|HAC1_ASPOR	664	845	sp|Q5HZG4|TAF3_MOUSE	Transcription initiation factor TFIID subunit 3 OS=Mus
+4.4	23	72	229	sp|Q1XGE2|HAC1_ASPOR	697	842	sp|Q5HZG4|TAF3_MOUSE	Transcription initiation factor TFIID subunit 3 OS=Mus
+4.4	24	4	89	sp|Q1XGE2|HAC1_ASPOR	485	567	sp|Q5HZG4|TAF3_MOUSE	Transcription initiation factor TFIID subunit 3 OS=Mus
+7.0	33	17	74	sp|Q1XGE2|HAC1_ASPOR	240	294	sp|Q5HZG4|TAF3_MOUSE	Transcription initiation factor TFIID subunit 3 OS=Mus
+0.080	23	41	183	sp|Q1XGE2|HAC1_ASPOR	70	203	sp|A0LE19|IF2_MAGSM	Translation initiation factor IF-2 OS=Magnetococcus sp.
+0.081	24	41	221	sp|Q1XGE2|HAC1_ASPOR	246	432	sp|Q869E1|DNLI1_DICDI	DNA ligase 1 OS=Dictyostelium discoideum GN=lig1 PE=3
+3.5	23	32	209	sp|Q1XGE2|HAC1_ASPOR	227	407	sp|Q869E1|DNLI1_DICDI	DNA ligase 1 OS=Dictyostelium discoideum GN=lig1 PE=3
+0.085	27	48	149	sp|Q1XGE2|HAC1_ASPOR	736	839	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+0.49	25	30	152	sp|Q1XGE2|HAC1_ASPOR	122	247	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+0.63	24	35	146	sp|Q1XGE2|HAC1_ASPOR	428	540	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+1.0	25	49	146	sp|Q1XGE2|HAC1_ASPOR	498	596	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+1.3	25	49	146	sp|Q1XGE2|HAC1_ASPOR	470	568	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+2.2	22	49	154	sp|Q1XGE2|HAC1_ASPOR	526	634	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+3.7	30	75	154	sp|Q1XGE2|HAC1_ASPOR	366	443	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+3.7	24	49	138	sp|Q1XGE2|HAC1_ASPOR	554	646	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+3.7	26	41	154	sp|Q1XGE2|HAC1_ASPOR	631	738	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+4.7	23	40	151	sp|Q1XGE2|HAC1_ASPOR	711	827	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+4.7	23	32	154	sp|Q1XGE2|HAC1_ASPOR	650	772	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+6.1	27	40	142	sp|Q1XGE2|HAC1_ASPOR	596	704	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+6.1	25	40	154	sp|Q1XGE2|HAC1_ASPOR	568	674	sp|P22793|TRHY_SHEEP	Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2
+0.088	32	63	155	sp|Q1XGE2|HAC1_ASPOR	192	277	sp|O70191|ATF5_MOUSE	Cyclic AMP-dependent transcription factor ATF-5 OS=Mus
+0.089	36	77	131	sp|Q1XGE2|HAC1_ASPOR	38	91	sp|Q39140|TGA6_ARATH	Transcription factor TGA6 OS=Arabidopsis thaliana GN=TGA6
+0.089	27	73	221	sp|Q1XGE2|HAC1_ASPOR	52	196	sp|Q68EL6|NFIL3_DANRE	Nuclear factor interleukin-3-regulated protein OS=Danio
+0.089	28	43	146	sp|Q1XGE2|HAC1_ASPOR	390	495	sp|Q55FW7|GLE1_DICDI	Nucleoporin GLE1 OS=Dictyostelium discoideum GN=gle1 PE=3
+1.8	26	48	145	sp|Q1XGE2|HAC1_ASPOR	377	466	sp|Q55FW7|GLE1_DICDI	Nucleoporin GLE1 OS=Dictyostelium discoideum GN=gle1 PE=3
+0.096	28	43	142	sp|Q1XGE2|HAC1_ASPOR	468	570	sp|Q3TLH4|BA2L2_MOUSE	Protein BAT2-like 2 OS=Mus musculus GN=Bat2l2 PE=1 SV=2
+9.4	23	7	149	sp|Q1XGE2|HAC1_ASPOR	345	482	sp|Q3TLH4|BA2L2_MOUSE	Protein BAT2-like 2 OS=Mus musculus GN=Bat2l2 PE=1 SV=2
+0.096	23	140	270	sp|Q1XGE2|HAC1_ASPOR	1816	1953	sp|Q3TLH4|BA2L2_MOUSE	Protein BAT2-like 2 OS=Mus musculus GN=Bat2l2 PE=1 SV=2
+3.0	28	158	210	sp|Q1XGE2|HAC1_ASPOR	1768	1818	sp|Q3TLH4|BA2L2_MOUSE	Protein BAT2-like 2 OS=Mus musculus GN=Bat2l2 PE=1 SV=2
+0.096	23	49	188	sp|Q1XGE2|HAC1_ASPOR	81	221	sp|Q04323|UBXN1_HUMAN	UBX domain-containing protein 1 OS=Homo sapiens GN=UBXN1
+9.9	30	74	208	sp|Q1XGE2|HAC1_ASPOR	83	210	sp|Q04323|UBXN1_HUMAN	UBX domain-containing protein 1 OS=Homo sapiens GN=UBXN1
+0.097	29	59	150	sp|Q1XGE2|HAC1_ASPOR	223	319	sp|P23922|HBP1A_WHEAT	Transcription factor HBP-1a OS=Triticum aestivum PE=2
+0.099	35	71	133	sp|Q1XGE2|HAC1_ASPOR	176	239	sp|Q9C5Q2|AI5L3_ARATH	ABSCISIC ACID-INSENSITIVE 5-like protein 3
+0.10	22	32	142	sp|Q1XGE2|HAC1_ASPOR	168	280	sp|Q54TD7|DDX24_DICDI	ATP-dependent RNA helicase ddx24 OS=Dictyostelium
+0.10	26	17	178	sp|Q1XGE2|HAC1_ASPOR	151	298	sp|Q5F797|IF2_NEIG1	Translation initiation factor IF-2 OS=Neisseria
+0.10	26	17	178	sp|Q1XGE2|HAC1_ASPOR	151	298	sp|B4RMZ3|IF2_NEIG2	Translation initiation factor IF-2 OS=Neisseria
+0.10	24	41	231	sp|Q1XGE2|HAC1_ASPOR	310	493	sp|Q86AH4|Y8592_DICDI	Putative uncharacterized protein DDB_G0271982
+0.11	24	39	169	sp|Q1XGE2|HAC1_ASPOR	616	747	sp|Q8IIG7|YPF05_PLAF7	Uncharacterized protein PF11_0207 OS=Plasmodium
+0.11	26	36	210	sp|Q1XGE2|HAC1_ASPOR	1257	1435	sp|B2KI97|THOC2_RHIFE	THO complex subunit 2 OS=Rhinolophus ferrumequinum
+0.11	25	43	188	sp|Q1XGE2|HAC1_ASPOR	931	1070	sp|Q9UM54|MYO6_HUMAN	Myosin-VI OS=Homo sapiens GN=MYO6 PE=1 SV=4
+8.2	24	11	149	sp|Q1XGE2|HAC1_ASPOR	877	1018	sp|Q9UM54|MYO6_HUMAN	Myosin-VI OS=Homo sapiens GN=MYO6 PE=1 SV=4
+0.12	25	16	224	sp|Q1XGE2|HAC1_ASPOR	583	779	sp|Q3KQU3|MA7D1_HUMAN	MAP7 domain-containing protein 1 OS=Homo sapiens
+3.1	28	16	135	sp|Q1XGE2|HAC1_ASPOR	555	680	sp|Q3KQU3|MA7D1_HUMAN	MAP7 domain-containing protein 1 OS=Homo sapiens
+8.4	25	16	145	sp|Q1XGE2|HAC1_ASPOR	68	200	sp|Q3KQU3|MA7D1_HUMAN	MAP7 domain-containing protein 1 OS=Homo sapiens
+0.17	26	14	154	sp|Q1XGE2|HAC1_ASPOR	441	582	sp|Q14244|MAP7_HUMAN	Ensconsin OS=Homo sapiens GN=MAP7 PE=1 SV=1
+0.12	21	75	188	sp|Q1XGE2|HAC1_ASPOR	556	674	sp|Q14244|MAP7_HUMAN	Ensconsin OS=Homo sapiens GN=MAP7 PE=1 SV=1
+0.12	31	11	71	sp|Q1XGE2|HAC1_ASPOR	335	403	sp|Q14244|MAP7_HUMAN	Ensconsin OS=Homo sapiens GN=MAP7 PE=1 SV=1
+0.12	29	62	158	sp|Q1XGE2|HAC1_ASPOR	73	163	sp|P29596|ATF3_RAT	Cyclic AMP-dependent transcription factor ATF-3 OS=Rattus
+0.12	25	18	201	sp|Q1XGE2|HAC1_ASPOR	380	569	sp|Q5TM26|BAT2_MACMU	Large proline-rich protein BAT2 OS=Macaca mulatta GN=BAT2
+0.12	27	43	176	sp|Q1XGE2|HAC1_ASPOR	642	792	sp|Q0IHP2|INCE_XENTR	Inner centromere protein OS=Xenopus tropicalis GN=incenp
+5.5	27	41	149	sp|Q1XGE2|HAC1_ASPOR	589	697	sp|Q0IHP2|INCE_XENTR	Inner centromere protein OS=Xenopus tropicalis GN=incenp
+0.13	28	18	146	sp|Q1XGE2|HAC1_ASPOR	478	606	sp|Q9NQS7|INCE_HUMAN	Inner centromere protein OS=Homo sapiens GN=INCENP PE=1
+0.58	24	37	151	sp|Q1XGE2|HAC1_ASPOR	627	738	sp|Q9NQS7|INCE_HUMAN	Inner centromere protein OS=Homo sapiens GN=INCENP PE=1
+1.2	24	39	151	sp|Q1XGE2|HAC1_ASPOR	607	724	sp|Q9NQS7|INCE_HUMAN	Inner centromere protein OS=Homo sapiens GN=INCENP PE=1
+1.6	27	41	172	sp|Q1XGE2|HAC1_ASPOR	666	808	sp|Q9NQS7|INCE_HUMAN	Inner centromere protein OS=Homo sapiens GN=INCENP PE=1
+7.2	21	34	196	sp|Q1XGE2|HAC1_ASPOR	25	175	sp|Q9NQS7|INCE_HUMAN	Inner centromere protein OS=Homo sapiens GN=INCENP PE=1
+0.13	24	73	337	sp|Q1XGE2|HAC1_ASPOR	200	459	sp|Q5HZY0|UBXN4_RAT	UBX domain-containing protein 4 OS=Rattus norvegicus
+0.13	30	63	167	sp|Q1XGE2|HAC1_ASPOR	32	134	sp|Q90595|MAFF_CHICK	Transcription factor MafF OS=Gallus gallus GN=MAFF PE=1
+0.13	27	80	231	sp|Q1XGE2|HAC1_ASPOR	851	996	sp|Q6ZSZ5|ARHGI_HUMAN	Rho guanine nucleotide exchange factor 18 OS=Homo
+0.13	22	36	151	sp|Q1XGE2|HAC1_ASPOR	299	416	sp|Q7PS12|MOEH_ANOGA	Moesin/ezrin/radixin homolog 1 OS=Anopheles gambiae
+0.13	28	43	179	sp|Q1XGE2|HAC1_ASPOR	261	399	sp|P12957|CALD1_CHICK	Caldesmon OS=Gallus gallus GN=CALD1 PE=1 SV=2
+0.17	23	31	216	sp|Q1XGE2|HAC1_ASPOR	278	457	sp|P12957|CALD1_CHICK	Caldesmon OS=Gallus gallus GN=CALD1 PE=1 SV=2
+9.7	22	52	239	sp|Q1XGE2|HAC1_ASPOR	472	660	sp|P12957|CALD1_CHICK	Caldesmon OS=Gallus gallus GN=CALD1 PE=1 SV=2
+0.13	34	76	133	sp|Q1XGE2|HAC1_ASPOR	206	262	sp|Q08DA8|ATF1_BOVIN	Cyclic AMP-dependent transcription factor ATF-1 OS=Bos
+0.14	26	26	139	sp|Q1XGE2|HAC1_ASPOR	52	172	sp|Q94126|CES2_CAEEL	Cell death specification protein 2 OS=Caenorhabditis
+0.14	29	34	133	sp|Q1XGE2|HAC1_ASPOR	21	114	sp|O66547|Y157_AQUAE	Uncharacterized protein aq_157 OS=Aquifex aeolicus
+0.14	28	35	140	sp|Q1XGE2|HAC1_ASPOR	681	787	sp|A6ZRZ0|NST1_YEAS7	Stress response protein NST1 OS=Saccharomyces cerevisiae
+1.4	24	41	231	sp|Q1XGE2|HAC1_ASPOR	669	849	sp|A6ZRZ0|NST1_YEAS7	Stress response protein NST1 OS=Saccharomyces cerevisiae
+6.1	22	43	149	sp|Q1XGE2|HAC1_ASPOR	633	737	sp|A6ZRZ0|NST1_YEAS7	Stress response protein NST1 OS=Saccharomyces cerevisiae
+0.14	28	35	140	sp|Q1XGE2|HAC1_ASPOR	681	787	sp|P53935|NST1_YEAST	Stress response protein NST1 OS=Saccharomyces cerevisiae
+1.4	24	41	231	sp|Q1XGE2|HAC1_ASPOR	669	849	sp|P53935|NST1_YEAST	Stress response protein NST1 OS=Saccharomyces cerevisiae
+6.1	22	43	149	sp|Q1XGE2|HAC1_ASPOR	633	737	sp|P53935|NST1_YEAST	Stress response protein NST1 OS=Saccharomyces cerevisiae
+0.14	23	24	281	sp|Q1XGE2|HAC1_ASPOR	48	304	sp|A3BYC1|HOX25_ORYSJ	Homeobox-leucine zipper protein HOX25 OS=Oryza sativa
+0.14	24	36	206	sp|Q1XGE2|HAC1_ASPOR	1257	1429	sp|B1AZI6|THOC2_MOUSE	THO complex subunit 2 OS=Mus musculus GN=Thoc2 PE=3 SV=1
+0.15	24	6	203	sp|Q1XGE2|HAC1_ASPOR	2186	2384	sp|Q9H254|SPTN4_HUMAN	Spectrin beta chain, brain 3 OS=Homo sapiens GN=SPTBN4
+0.15	23	16	223	sp|Q1XGE2|HAC1_ASPOR	44	237	sp|Q2UNX4|KAPC_ASPOR	Putative transcription factor kapC OS=Aspergillus oryzae
+0.15	34	82	176	sp|Q1XGE2|HAC1_ASPOR	487	581	sp|Q9JJ50|HGS_RAT	Hepatocyte growth factor-regulated tyrosine kinase substrate
+0.15	29	6	68	sp|Q1XGE2|HAC1_ASPOR	277	355	sp|Q9JJ50|HGS_RAT	Hepatocyte growth factor-regulated tyrosine kinase substrate
+0.15	29	62	158	sp|Q1XGE2|HAC1_ASPOR	73	163	sp|Q2KII1|ATF3_BOVIN	Cyclic AMP-dependent transcription factor ATF-3 OS=Bos
+0.15	28	17	139	sp|Q1XGE2|HAC1_ASPOR	260	388	sp|Q99941|ATF6B_HUMAN	Cyclic AMP-dependent transcription factor ATF-6 beta
+0.16	25	18	234	sp|Q1XGE2|HAC1_ASPOR	378	584	sp|Q7TSC1|BAT2_MOUSE	Large proline-rich protein BAT2 OS=Mus musculus GN=Bat2
+0.16	28	80	232	sp|Q1XGE2|HAC1_ASPOR	137	292	sp|Q4I877|NDE1_GIBZE	Nuclear distribution protein nudE homolog 1 OS=Gibberella
+0.16	28	74	183	sp|Q1XGE2|HAC1_ASPOR	218	339	sp|Q84WU4|GOGC3_ARATH	Golgin candidate 3 OS=Arabidopsis thaliana GN=GC3 PE=1
+0.16	23	19	188	sp|Q1XGE2|HAC1_ASPOR	46	221	sp|Q499N6|UBXN1_RAT	UBX domain-containing protein 1 OS=Rattus norvegicus
+0.16	27	72	144	sp|Q1XGE2|HAC1_ASPOR	201	273	sp|B4PPK2|FOSL_DROYA	Transcription factor kayak OS=Drosophila yakuba GN=kay
+0.16	35	183	239	sp|Q1XGE2|HAC1_ASPOR	382	438	sp|B4PPK2|FOSL_DROYA	Transcription factor kayak OS=Drosophila yakuba GN=kay
+0.16	38	10	43	sp|Q1XGE2|HAC1_ASPOR	95	127	sp|B4PPK2|FOSL_DROYA	Transcription factor kayak OS=Drosophila yakuba GN=kay
+0.17	25	37	221	sp|Q1XGE2|HAC1_ASPOR	1022	1198	sp|A4R8N4|PAN1_MAGGR	Actin cytoskeleton-regulatory complex protein PAN1
+0.17	26	41	209	sp|Q1XGE2|HAC1_ASPOR	1024	1201	sp|B2AWS3|PAN1_PODAN	Actin cytoskeleton-regulatory complex protein PAN1
+0.17	22	21	216	sp|Q1XGE2|HAC1_ASPOR	1296	1485	sp|Q92545|TM131_HUMAN	Transmembrane protein 131 OS=Homo sapiens GN=TMEM131
+0.17	24	4	191	sp|Q1XGE2|HAC1_ASPOR	41	230	sp|Q38W81|IF2_LACSS	Translation initiation factor IF-2 OS=Lactobacillus sakei
+0.17	30	83	163	sp|Q1XGE2|HAC1_ASPOR	276	355	sp|Q789F3|MAF_CHICK	Transcription factor Maf OS=Gallus gallus GN=MAF PE=1 SV=1
+0.17	24	19	146	sp|Q1XGE2|HAC1_ASPOR	131	254	sp|P49716|CEBPD_HUMAN	CCAAT/enhancer-binding protein delta OS=Homo sapiens
+0.49	29	60	154	sp|Q1XGE2|HAC1_ASPOR	153	248	sp|P49716|CEBPD_HUMAN	CCAAT/enhancer-binding protein delta OS=Homo sapiens
+0.17	35	77	133	sp|Q1XGE2|HAC1_ASPOR	206	261	sp|P81269|ATF1_MOUSE	Cyclic AMP-dependent transcription factor ATF-1 OS=Mus
+0.18	30	83	163	sp|Q1XGE2|HAC1_ASPOR	276	355	sp|P23091|MAF_AVIS4	Transforming protein Maf OS=Avian musculoaponeurotic
+0.18	35	77	133	sp|Q1XGE2|HAC1_ASPOR	208	263	sp|P18846|ATF1_HUMAN	Cyclic AMP-dependent transcription factor ATF-1 OS=Homo
+0.18	23	41	160	sp|Q1XGE2|HAC1_ASPOR	586	702	sp|Q07283|TRHY_HUMAN	Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2
+0.23	26	41	154	sp|Q1XGE2|HAC1_ASPOR	546	658	sp|Q07283|TRHY_HUMAN	Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2
+0.30	26	40	151	sp|Q1XGE2|HAC1_ASPOR	253	359	sp|Q07283|TRHY_HUMAN	Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2
+3.7	28	48	151	sp|Q1XGE2|HAC1_ASPOR	241	347	sp|Q07283|TRHY_HUMAN	Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2
+3.7	24	41	154	sp|Q1XGE2|HAC1_ASPOR	956	1071	sp|Q07283|TRHY_HUMAN	Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2
+3.7	26	43	151	sp|Q1XGE2|HAC1_ASPOR	440	557	sp|Q07283|TRHY_HUMAN	Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2
+4.7	29	43	151	sp|Q1XGE2|HAC1_ASPOR	1297	1404	sp|Q07283|TRHY_HUMAN	Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2
+0.18	29	107	235	sp|Q1XGE2|HAC1_ASPOR	178	296	sp|Q4X1V0|NDE1_ASPFU	Nuclear distribution protein nudE homolog 1
+4.6	24	80	204	sp|Q1XGE2|HAC1_ASPOR	162	287	sp|Q4X1V0|NDE1_ASPFU	Nuclear distribution protein nudE homolog 1
+0.18	30	81	120	sp|Q1XGE2|HAC1_ASPOR	40	77	sp|Q4X1V0|NDE1_ASPFU	Nuclear distribution protein nudE homolog 1
+0.18	25	77	135	sp|Q1XGE2|HAC1_ASPOR	12	70	sp|Q8R1H8|BATF2_MOUSE	Basic leucine zipper transcriptional factor ATF-like 2
+0.18	29	137	200	sp|Q1XGE2|HAC1_ASPOR	117	184	sp|Q8R1H8|BATF2_MOUSE	Basic leucine zipper transcriptional factor ATF-like 2
+0.19	26	31	159	sp|Q1XGE2|HAC1_ASPOR	11	140	sp|Q66J36|NFIL3_XENLA	Nuclear factor interleukin-3-regulated protein
+0.19	23	36	177	sp|Q1XGE2|HAC1_ASPOR	242	376	sp|P13816|GARP_PLAFF	Glutamic acid-rich protein OS=Plasmodium falciparum
+0.19	25	76	142	sp|Q1XGE2|HAC1_ASPOR	137	203	sp|P38749|YAP3_YEAST	AP-1-like transcription factor YAP3 OS=Saccharomyces
+0.19	24	80	285	sp|Q1XGE2|HAC1_ASPOR	588	784	sp|Q3UIW5|RNF10_MOUSE	RING finger protein 10 OS=Mus musculus GN=Rnf10 PE=2
+0.19	19	1	57	sp|Q1XGE2|HAC1_ASPOR	546	602	sp|Q3UIW5|RNF10_MOUSE	RING finger protein 10 OS=Mus musculus GN=Rnf10 PE=2
+0.19	40	73	131	sp|Q1XGE2|HAC1_ASPOR	37	91	sp|P23923|HBP1B_WHEAT	Transcription factor HBP-1b(c38) OS=Triticum aestivum
+0.19	24	49	226	sp|Q1XGE2|HAC1_ASPOR	516	692	sp|Q9D5R3|CCD41_MOUSE	Coiled-coil domain-containing protein 41 OS=Mus musculus
+0.20	23	35	193	sp|Q1XGE2|HAC1_ASPOR	737	898	sp|Q9QXL2|KI21A_MOUSE	Kinesin-like protein KIF21A OS=Mus musculus GN=Kif21a
+0.20	25	62	200	sp|Q1XGE2|HAC1_ASPOR	454	604	sp|Q9UPT6|JIP3_HUMAN	C-Jun-amino-terminal kinase-interacting protein 3 OS=Homo
+0.20	31	8	65	sp|Q1XGE2|HAC1_ASPOR	265	321	sp|Q9UPT6|JIP3_HUMAN	C-Jun-amino-terminal kinase-interacting protein 3 OS=Homo
+0.20	22	6	250	sp|Q1XGE2|HAC1_ASPOR	784	1016	sp|P16884|NFH_RAT	Neurofilament heavy polypeptide OS=Rattus norvegicus GN=Nefh
+0.20	29	62	158	sp|Q1XGE2|HAC1_ASPOR	73	163	sp|Q60765|ATF3_MOUSE	Cyclic AMP-dependent transcription factor ATF-3 OS=Mus
+0.20	26	64	163	sp|Q1XGE2|HAC1_ASPOR	142	244	sp|Q9N0J3|CEBPD_SHEEP	CCAAT/enhancer-binding protein delta OS=Ovis aries
+0.20	20	39	235	sp|Q1XGE2|HAC1_ASPOR	632	820	sp|A5DLJ8|NST1_PICGU	Stress response protein NST1 OS=Pichia guilliermondii
diff --git a/demotic/test.pl b/demotic/test.pl
new file mode 100755
index 0000000..38d60d0
--- /dev/null
+++ b/demotic/test.pl
@@ -0,0 +1,15 @@
+#! /usr/bin/perl
+
+use demotic_blast;
+
+$swiss_wu = "/misc/data0/databases/Uniprot/uniprot_sprot_wu.fasta";
+
+open(BLAST, "blastp $swiss_wu example.fa 2>/dev/null |");
+while (demotic_blast::parse(\*BLAST))
+{
+    for ($i = 0; $i < $demotic_blast::nhits; $i++) {
+        printf "%.2g\t%.1f\t%s\t%s\n", $demotic_blast::hit_Eval[$i], $demotic_blast::hit_bitscore[$i], $demotic_blast::hit_target[$i], $demotic_blast::queryname;
+    }
+}
+close BLAST;
+    
diff --git a/devkit/00README b/devkit/00README
new file mode 100644
index 0000000..2ea1648
--- /dev/null
+++ b/devkit/00README
@@ -0,0 +1,5 @@
+
+
+Generating a list of all keywords (functions, macros, etc) in a codebase:
+ find . -name \*.[ch] -exec ctags -x {} \; | ~/src/easel/trunk/devkit/ctags-fix | sort | tbl-pretty -f3 > 00INDEX
+
diff --git a/devkit/autodoc b/devkit/autodoc
new file mode 100755
index 0000000..d865277
--- /dev/null
+++ b/devkit/autodoc
@@ -0,0 +1,315 @@
+#! /usr/bin/perl
+
+# Usage:
+#   ./autodoc <C file>  
+#   ./autodoc -t <C file>
+# 
+# Input is a C .c file with my structured function header convention.
+# Output is .tex file suitable for inclusion in my LaTeX documentation.
+#
+# Requirements:
+#    1. .tex file needs to have \sreapi environment defined;
+#       see hmmer, squid, infernal, etc. "macro.tex" to get a copy.
+#
+#    2. .tex file needs to have \ccode command defined, to produce 
+#       courier (or whatever) computerese font for variables, macros,
+#       etc.
+#
+#   3. Functions must use headers according to my conventions, for example:
+#      (defined as sre-insert-my-function-header() in .emacs LISP)
+#
+#             /* Function:  function()
+#              * Synopsis:  A short (half-line) description.
+#              * Incept:    SRE, Tue Nov 30 19:36:17 2004 [St. Louis]
+#              *
+#              * Purpose:   Given an <argument>, carry out an important
+#              *            function, and return an answer.
+#              *
+#              * Args:      argument - some text, or NULL
+#              *
+#              * Returns:   <SRE_SUCCESS> on success; <SRE_FAILED> on failure.
+#              *
+#              * Throws:    <SRE_MALLOC_FAILED> on an allocation failure.
+#              *
+#              * Xref:      STL8/p.159.
+#              */
+#              int
+#              function(char *argument)
+#              {
+#                 etc.
+#
+#     The Function and Purpose blocks are required.
+#     Only the Function, Synopsis, Purpose, Returns, and Throws blocks are used.  
+# 
+#     The exact spacing of the beginning of each line is important;
+#     for example, the parser depends on seeing "/* Function" at the beginning,
+#     " * \S" on a line starting a new block of info, and " *  " or
+#     " */" on a line that continues a previous info block. The exact
+#     spacing style of "int\nfunction(char *argument)\n{" is also essential.
+#     
+#
+# SRE, Tue Nov 30 19:43:47 2004
+
+use Getopt::Std;
+
+&getopts('n:t');
+$cfile = shift;
+
+if ($opt_t) { $show_api_table = 1; }
+if ($opt_n) { $modulename     = $opt_n; } else { 
+    if    ($cfile eq "easel")          { $modulename = "easel"; }
+    elsif ($cfile =~ /esl_(\S+)\.c/)   { $modulename = $1; }
+    else                               { $modulename = "foo"; }
+}
+
+$text      = `cat $cfile`;
+$nfuncs    = &parse_function_documentation($text);
+$nsections = &parse_api_subheads($text);
+
+if ($show_api_table) 
+{
+    $j = -1;
+    printf("%% Table generated by autodoc -t $cfile (so don't edit here, edit $cfile:)\n");
+    printf("\\begin{table}[hbp]\n");
+    printf("\\begin{center}\n");
+    printf("{\\small\n");
+    printf("\\begin{tabular}{|ll|}\\hline\n");
+    for ($i = 0; $i < $nfuncs; $i++) 
+    {
+	if ($insection{$function[$i]} != $j)
+	{
+	    $j = $insection{$function[$i]};
+	    printf("\\apisubhead{%s}\\\\\n", $apisubheads[$j]);
+	}
+
+	if ($synopsis[$i] ne "") {
+	    printf("\\hyperlink{func:%s()}{\\ccode{%s()}} & %s\\\\\n",
+		   $function[$i], $pfunction[$i], $synopsis[$i]);
+	} else {
+	    printf("\\hyperlink{func:%s()}{\\ccode{%s()}} & [Description]\\\\\n",
+		   $function[$i], $pfunction[$i]);
+	}
+    }
+    printf("\\hline\n");
+    printf("\\end{tabular}\n");
+    printf("}\n");
+    printf("\\end{center}\n");
+    printf("\\caption{The \\eslmod{%s} API.}\n", $modulename);
+    printf("\\label{tbl:%s_api}\n", $modulename);
+    printf("\\end{table}\n");
+}
+else
+{
+    print "\\begin{sreapi}\n";
+    for ($i = 0; $i < $nfuncs; $i++) 
+    {
+	printf("\\hypertarget{func:%s()}\n{", $function[$i]);
+	printf "\\item[%s %s(%s)]",
+           	$returntype[$i],
+	        $pfunction[$i],
+	        $args[$i];
+	printf("}\n");
+
+
+	print "\n";
+	print $purpose[$i], "\n";
+	print "Returns ", $returns[$i], "\n" unless ($returns[$i] eq "");
+	print "Throws ",  $throws[$i],  "\n" unless ($throws[$i]  eq "");
+	print "\n\n";
+    }
+    print "\\end{sreapi}\n\n";
+}
+exit;
+
+# Function: parse_function_documentation
+#
+# Purpose:  Given <text> from a .c file, parse it for my structured
+#           function documentation. Returns <n>, the number of 
+#           documented functions found; and it populates the following
+#           global arrays:
+#              function    - verbatim name of the function 
+#              pfunction   - name of the function, protected for LaTeX (\_ not _, for example)
+#              returntype  - C return type; for example, "int"
+#              args        - C argument list, from the func def'n
+#              purpose     - Text documenting the function
+#              synopsis    - OPTIONAL: short half-line description, else ""
+#              incept      - OPTIONAL: date/name/place, else ""
+#              argdocs     - OPTIONAL: table documenting the args, else ""
+#              returns     - OPTIONAL: documentation of returned
+#                            information or codes; else "";
+#              throws      - OPTIONAL: documentation of returned 
+#                            abnormal error codes
+#
+#           Each of these is an array indexed <0..n-1>, for the <n>
+#           documented functions.
+#
+sub
+parse_function_documentation 
+{
+    my ($text) = @_;
+    my ($comment, $n, $first_funcname);
+
+    $n = 0;
+    #                   /*   Function:   text      \n double \n foo  ( args )   \n{
+    while ($text =~ m|(/\*\s*Function:\s*.+?\*/)\s*\n(.+?)\s*\n(\S+)\((.+?)\)\s*\n\{|gms) {
+	$comment        = $1;
+	$returntype[$n] = $2;
+	$function[$n]   = $3;
+	$args[$n]       = $4;
+
+	# Delimit end of each block in the comments with a \n@*, for 
+	# convenience in getting out the individual blocks.
+	$comment =~ s|\n \* (\S)|\n@\* \1|g;
+	$comment =~ s|\n \*/|\n@\*/|g;
+
+	# Remove leading comment symbols and spacing.
+	$comment =~ s|\n[ \t]*\*[ \t]*|\n|g;
+
+
+	# Now, grab all the individual blocks of info from a structured
+        # function header comment. Required fields:
+        #       Function:
+        #       Purpose: 
+        #       the function and its args.
+        #
+	if ($comment =~ m|/\* Function:\s*(.+?)\n@\*|ms) { $first_funcname = $1; }
+	else {next;}
+	if ($first_funcname =~ /^(\S+)\(\)/) { $first_funcname = $1; }
+	if ($first_funcname ne $function[$n]) { die "parse error; $first_funcname != $function[$n]";}
+
+	if ($comment =~ m|\n@\* Synopsis:\s*(.+?)\n|ms) { $synopsis[$n] = &process_comment_text($1); }
+	else {$synopsis[$n] = ""; }
+
+	if ($comment =~ m|\n@\* Incept:\s*(.+?)\n|ms) { $incept[$n] = &process_comment_text($1); }
+	else {$incept[$n] = ""; }
+
+	if ($comment =~ m|\n@\* Purpose:\s*(.+?)\n@\*|ms) { $purpose[$n] = &process_comment_text($1); }
+	else {next;}
+
+	if ($comment =~ m|\n@\* Args:\s*(.+?)\n@\*|ms) { $argdocs[$n] = $1; }
+	else {$argdocs = ""; }
+    
+	if ($comment =~ m|\n@\* Returns:\s*(.+?)\n@\*|ms) { $returns[$n] = &process_comment_text($1); }
+	else {$returns[$n] = ""; }
+
+	if ($comment =~ m|\n@\* Throws:\s*(.+?)\n@\*|ms) { $throws[$n] = &process_comment_text($1); }
+	else {$throws[$n] = ""; }
+
+	# protect _ characters. $function contains original name, for use as
+        # hypertarget tag; $pfunction contains the protected function name, for output.
+	$pfunction[$n]  = &latex_safe($function[$n]);
+	$returntype[$n] = &latex_safe($returntype[$n]);
+	$args[$n]       = &latex_safe($args[$n]);
+
+	$n++;
+    }
+    $n;
+}
+
+
+# Function: process_comment_text
+#
+sub
+process_comment_text
+{
+    my ($text) = @_;
+    my (@s);			# old text, as chars
+    my (@s2);			# new text, as chars
+    my ($newtext);
+    my ($n);
+    my ($i);
+    my ($state);		# 0 = text; 1 = math; 2 = code. Finite automaton.
+
+    @s = split(//,$text);
+    $n = $#s + 1;
+
+    $state = 0;			# start in text state
+    for ($i = 0; $i < $n; $i++)
+    {
+        # State transitions in the text/math/code mode automaton
+        #
+	if    ($state == 0 && $s[$i] eq '$') { $state    = 1; push(@s2, '$'); }                  # enter math state
+	elsif ($state == 0 && $s[$i] eq '<') { $state    = 2; push(@s2, split(//, "\\ccode{")); } # enter code state
+	elsif ($state == 1 && $s[$i] eq '$') { $state    = 0; push(@s2, '$'); }                  # back to text state
+	elsif ($state == 2 && $s[$i] eq '>' && $s[$i-1] ne '-') 
+	{ $state    = 0; push(@s2, '}'); }                  # back to text state on >, unless it was ->
+
+        # No state transition; deal with processing other characters according to state.
+        #
+        elsif ($state == 2 && $s[$i] eq '_') { push(@s2, '\\'); push(@s2, '_'); }
+        elsif ($state == 2 && $s[$i] eq '%') { push(@s2, '\\'); push(@s2, '%'); }
+        else  { push(@s2, $s[$i]); }
+    }
+    	
+    $newtext = join('', at s2);
+}
+
+
+# Function: latex_safe
+# 
+# Purpose:  Given a <string>, substitute any unacceptable characters
+#           for LaTeX, as follows:
+#               _    becomes \_
+#               %    becomes \%
+#               #    becomes \#
+#      
+sub
+latex_safe
+{
+    my ($string) = @_;
+
+    $string =~ s/_/\\_/g;
+    $string =~ s/%/\\%/g;
+    $string =~ s/#/\\#/g;
+    $string;
+}
+
+
+# Function: parse_api_subheads
+#
+# Purpose:  Given <text> from a .c file, parse it
+#           for structured API subheading documentation:
+#
+#           /********************************************
+#            *# 1. The <ESL_RANDOMNESS> object.
+#            ********************************************/
+#          
+#           Keys off of the /***** line, followed by a line
+#           starting with " *#" followed by a number and a period;
+#           the rest of the line is taken to be the title.
+#
+#           The title is processed, so <> and math mode are allowed.
+#
+#           Returns n, the number of subheadings found;
+#           and it populates two global arrays:
+#              apisubheads<0..n-1>  : one-line section subheadings
+#              insection{$funcname} : which api subhead $funcname is under
+# 
+sub
+parse_api_subheads
+{
+    my ($text) = @_;
+    my (@lines) = split(/^/, $text);
+
+    $n     = 0;
+    $armed = 0;
+    foreach $line (@lines) 
+    {
+	if ($armed && $line =~ /^ \*\#\s*\d+\.\s*(.+)$/) 
+	{
+	    $apisubheads[$n] = &process_comment_text($1);
+	    $n++;
+	    $armed = 0;
+
+	}
+
+	if ($line =~ /^\/\* Function:\s*(.+)\(\)/) 
+	{
+	    $insection{$1} = $n-1;
+	}
+
+	if ($line =~ /^\/\*{12}/) { $armed = 1; } # can expect a subhead line next,
+	else                      { $armed = 0; } # or not.
+    }
+    $n;
+}
diff --git a/devkit/c2optlist b/devkit/c2optlist
new file mode 100755
index 0000000..8770daf
--- /dev/null
+++ b/devkit/c2optlist
@@ -0,0 +1,58 @@
+#! /usr/bin/perl
+
+
+# c2optlist <main .c file>
+#
+# From one of our "standardized" main C files containing an 
+# ESL_OPTIONS block, print a table listing each option.
+# Only the first block in the file is parsed, if multiple
+# ones exist.
+#
+# Crosscomparisons with man2optlist and sqc2optlist allow verification
+# that the options in a main .c file are documented in a .man page
+# and tested in a .sqc unit test file.
+#
+# Options are looked for following a line 
+#   static ESL_OPTIONS ...
+# until a bare  
+#   }
+# is found on a line by itself.
+#
+# SRE, Tue Sep 15 10:04:30 2009 [Janelia]
+# SVN $Id$
+#
+
+
+while (<>)
+{
+    if (/^static ESL_OPTIONS/) { $in_optionblock = 1; next; }
+
+    if ($in_optionblock) 
+    {
+	if    (/^\s*{\s*"(-\S)",\s*([^,]+),/)   { $option = $1; $arg    = $2;  } # short option
+	elsif (/^\s*{\s*"(--\S+)",\s*([^,]+),/) { $option = $1; $arg    = $2;  } # long option
+	elsif (/^\s*$/)                   { next; }                            # blank line
+	elsif (/^\s*\/\*/)                { next; }                            # comment line
+	elsif (/^#if/)                    { next; }                            # allow conditional compilation of options
+	elsif (/^#end/)                   { next; }                            # allow conditional compilation of options
+	elsif (/^\s*{\s*0,\s*0,\s*0,/)    { last; }                            # empty vector: end of options
+	else                              { die "unrecognized option line:\n$_"; }
+
+	if    ($arg eq "eslARG_NONE")     { $optarg = "-"; }
+	elsif ($arg eq "eslARG_INT")      { $optarg = "<n>"; }
+	elsif ($arg eq "eslARG_REAL")     { $optarg = "<x>"; }
+	elsif ($arg eq "eslARG_CHAR")     { $optarg = "<c>"; }
+	elsif ($arg eq "eslARG_STRING")   { $optarg = "<s>"; }
+	elsif ($arg eq "eslARG_INFILE")   { $optarg = "<f>"; }
+	elsif ($arg eq "eslARG_OUTFILE")  { $optarg = "<f>"; }
+	else                              { die "unrecognized option argument $arg on line:\n$_"; }
+
+	printf ("%-20s %s\n", $option, $optarg);
+    }
+
+    if (/^};/) { die "Reached end of option structure without seeing empty 0,0,0,... vector"; }
+}
+
+
+
+
diff --git a/devkit/cexcerpt b/devkit/cexcerpt
new file mode 100644
index 0000000..b1da0c0
--- /dev/null
+++ b/devkit/cexcerpt
@@ -0,0 +1,100 @@
+#! /usr/bin/perl
+
+# cexcerpt <file.c> <dir>
+#
+# Extract tagged code chunks from a C source file for verbatim
+# inclusion in LaTeX documentation.
+#
+# Processes C source file <file.c>; extracts tagged excerpts, 
+# and puts them in a file in directory <dir>.
+#
+# An excerpt is marked with special comments in the C file:
+#
+#   /*::cexcerpt::my_example::begin::*/
+#      while (esl_sq_Read(sqfp, sq) == eslOK)
+#         { n++; }
+#   /*::cexcerpt::my_example::end::*/
+#
+# The tag's format is "::cexcerpt::<tag>::begin::" (or end).
+# We match it with:
+#    ^\s*\/\*::cexcerpt::(\S+)::begin::\*\/
+#
+# The tag is used to construct the file name, as <tag>.tex.
+# In the example, the tag my_example creates a file my_example.tex
+# in <dir>. 
+#
+# All the text between the cexcerpt tags is put in the file.
+# In addition, this text is wrapped in a {cchunk} environment.
+# So in the example above, my_example.tex will contain:
+#   \begin{cchunk}
+#      while (esl_sq_Read(sqfp, sq) == eslOK)
+#         { n++; }
+#   \end{cchunk}
+#
+# This file can then be included in a LaTeX file, with
+#   \input{<dir>/<tag>}
+#
+# For best results, the C source should be free of TAB characters.
+# "M-x untabify" on the region to clean them out.
+#
+# Cexcerpts can't overlap or nest in any way in the C file; only
+# one can be active at any given time.
+# 
+# SRE, Fri Feb 25 08:40:19 2005
+# SVN $Id: cexcerpt 1531 2005-12-13 20:53:46Z eddy $
+
+
+$usage = "cexcerpt <file.c> <dir>";
+die("Wrong number of command line arguments.\nUsage: $usage\n") unless ($#ARGV+1 == 2);
+
+$cfile = shift;
+$dir   = shift;
+die("C source file $cfile doesn't exist.\n")  unless -e $cfile;
+die("C source file $cfile isn't readable.\n") unless -r $cfile;
+die("Directory $dir doesn't exist.\n")        unless -e $dir;
+die("$dir isn't a directory.\n")              unless -d $dir;
+die("Can't write files to directory $dir.\n") unless -w $dir;
+
+open(CFILE,$cfile) || die("Couldn't open C file $cfile.\n");
+$in_cexcerpt = 0;
+$linenumber  = 1;
+while (<CFILE>)
+{
+    if (/^\s*\/\*::cexcerpt::(\S+)::begin::\*\//) 
+    {
+	if ($in_cexcerpt) {
+        die("Can't start $1 at line $linenumber; $tag started at line $startline.\n"); 
+	}
+	if (($n = grep(/$1/, @taglist)) > 0) {
+	    die("Already saw tag $1 in this C file ($n); tags must be unique.\n");
+	}
+	    
+	$tag         = $1;
+	$in_cexcerpt = 1;
+	$startline   = $linenumber;
+	$outfile     = "$dir/$tag.tex";
+	push(@taglist, $tag);
+	print ("   extracting $tag.tex...\n");
+	open(OUTFILE,">$outfile") || die("Couldn't open $outfile for writing."); 
+	print OUTFILE "\\begin{cchunk}\n";
+    }
+    elsif (/^\s*\/\*::cexcerpt::(\S+)::end::\*\//) 
+    {
+	if (!$in_cexcerpt) {
+        die("cexcerpt $1 can't end (line $linenumber) because it never started.\n");
+	}
+        if ($tag ne $1) {
+        die("tried to end $1 at line $linenumber, but $tag is active (from line $startline).\n");
+        }
+
+	$in_cexcerpt = 0;
+	print OUTFILE "\\end{cchunk}\n";
+	close(OUTFILE);
+    }
+    elsif ($in_cexcerpt) 
+    {
+	print OUTFILE $_;
+    }
+    $linenumber++;
+}
+close(CFILE);
diff --git a/devkit/cexcerpt.man b/devkit/cexcerpt.man
new file mode 100644
index 0000000..d04a075
--- /dev/null
+++ b/devkit/cexcerpt.man
@@ -0,0 +1,73 @@
+.TH "cexcerpt" 1 "@SSDK_DATE@" "SSDK @SSDK_VERSION@" "SSDK"
+
+.SH NAME
+.TP 
+cexcerpt - extract tagged code chunks for verbatim inclusion in documentation
+
+
+.SH SYNOPSIS
+.B cexcerpt
+.I file.c
+.I dir
+
+
+
+.SH DESCRIPTION
+
+.I cexcerpt 
+processes a C source file 
+.I file.c,
+extracts tagged excerpts, 
+and puts these excerpts in a file in directory 
+.I dir.
+
+.PP
+An excerpt is marked with special comments in the C file, as in
+this example:
+
+.nf
+/*::cexcerpt::my_example::begin::*/ 
+  while (esl_sq_Read(sqfp, sq) == eslOK)
+    { n++; }
+/*::cexcerpt::my_example::end::*/
+.fi
+
+.PP
+The tag's format is "::cexcerpt::<tag>::begin::" (or end).
+The tag is used to construct the file name, as 
+.I <tag>.tex. 
+In the example, the tag my_example creates a file
+.I my_example.tex
+in 
+.I dir.
+
+.PP
+All the text between the cexcerpt tags is put in the file.
+In addition, this text is wrapped in a {cchunk} environment.
+So in the example above, 
+.I my_example.tex 
+will contain:
+
+.nf
+ \\begin{cchunk}
+   while (esl_sq_Read(sqfp, sq) == eslOK)
+    { n++; }
+ \\end{cchunk}
+.fi
+
+.PP
+This file can then be included in a LaTeX file, with
+\\input{<dir>/<tag>}.
+
+.PP
+For best results, the C source should be free of TAB characters.
+"M-x untabify" on the region to clean them out.
+
+.PP
+Cexcerpts can't overlap or nest in any way in the C file; only
+one can be active at any given time.
+
+.SH OPTIONS
+
+Currently none.
+
diff --git a/devkit/ctags-fix b/devkit/ctags-fix
new file mode 100755
index 0000000..22c041f
--- /dev/null
+++ b/devkit/ctags-fix
@@ -0,0 +1,25 @@
+#! /usr/bin/perl
+
+# To be used in an idiomatic pipe for listing all keywords in a codebase:
+#
+#  find . -name \*.[ch] -exec ctags -x {} \; | ~/src/easel/trunk/devkit/ctags-fix | sort | tbl-pretty -f3 > 00INDEX
+#
+# ctags apparently prints a %15s %4d format
+# on keywords >15 long + linenumbers > 3 digits long, ctags merges the
+# first two fields, as in:
+#   esl_msa_FormatDesc1221 ./easel/esl_msa.c esl_msa_FormatDesc(ESL_MSA *msa, const char *desc, ...)
+# We try to detect this as best as possible; the possible ambiguity
+# is when the keyword name itself ends in a digit. To dismbiguate, we
+# assume no files have >=10000 lines.
+#
+# we also assume ctags has been called in a pipe from 'find',
+# so all filenames start with './', as in:
+#   find . -name \*.[ch] -exec ctags -x {} \; | ctags-fix > foo
+# This allows us to unambiguously find the true third column.
+
+
+while (<>)
+{
+    if (/^(\S{16,})(\d{4})\s+(\.\/.+)$/) { printf("%s %d %s\n", $1, $2, $3); }
+    else { print; }
+}
diff --git a/devkit/esl-dependencies b/devkit/esl-dependencies
new file mode 100755
index 0000000..a4dc126
--- /dev/null
+++ b/devkit/esl-dependencies
@@ -0,0 +1,155 @@
+#! /usr/bin/perl
+
+# esl-dependencies  ::  determines module dependencies in Easel source code
+#
+# Usage:  esl-dependencies [options] <Easel .c file> [<additional Easel .c file>...]
+#
+# Options:  
+#      -1  : show one-line summary of module # required, # required in testdriver, # augmentable
+#      -r  : list of required modules     (used in Makefile to construct test driver compilation lines)
+#      -a  : list of augmentation modules (used in Makefile to construct test driver compilation lines)
+#      -f  : list of augmentation flags   (used in Makefile to construct test driver compilation lines)
+# 
+# SRE, Mon Jun 11 11:15:31 2007
+# SVN $Id$
+
+require "getopts.pl"
+&Getopts('1afr');
+
+if ($opt_1) { $show_summary_table = 1; }
+if ($opt_a) { $list_augfiles      = 1; }
+if ($opt_f) { $list_augflags      = 1; }
+if ($opt_r) { $list_reqfiles      = 1; }
+
+while ($cfile = shift) {
+    $past_start       = 0;
+    $in_testdriver    = 0;
+    %included_module  = ();
+    %with_module      = ();
+    %driver_module    = ();
+    %required_module  = ();
+    %augmented_module = ();
+    %driver_required_module = ();
+    $nrequired        = 0;
+    $ndriver_required = 0;
+    $naugmented       = 0;
+
+    if    ($cfile =~ /esl_(\S+)\.c/) { $thismodule = $1; }
+    elsif ($cfile =~ /(easel)\.c/)   { $thismodule = $1; }
+    else { die "Can't open $cfile\n"; }
+
+# Set $included_module{} hash to 1 for every module that this .c file 
+# includes (both required and augmented), except easel itself.
+# 
+    open(INCLUDES, $cfile) || die;
+    while (<INCLUDES>) {
+	if (!$past_start &&  /^\#include [<"]esl_(\S+).h[>"]/) { 
+	    $module = $1;
+	    if ($module eq $thismodule) { next; }
+	    if ($module eq "config")    { next; }
+	    if ($module eq "mpi")       { $with_module{"mpi"} = 1; next; } # special case of HAVE_MPI instead of AUGMENT_
+	    $included_module{$module} = 1; 
+	}
+
+	if (/^\{/) { $past_start = 1; }  # Stop looking at headers when we see the first function start.
+
+	if (/^\#ifdef (esl.+_TESTDRIVE)/) { $in_testdriver = 1; $flag = $1; }
+	if ($in_testdriver && /^\#endif \/\*\s*$flag/) { $in_testdriver = 0; }
+	
+	if ($in_testdriver &&  /^\#include [<"]esl_(\S+).h[>"]/) { 
+	    $module = $1;
+	    if ($module eq $thismodule) { next; }
+	    $driver_module{$module} = 1; 
+	}
+    }
+    close INCLUDES;
+
+# Set $augmented_module{} hash to 1 for every module that this .c file 
+# might be augmented with.
+# 
+    open(AUGMENTS, "cat $cfile | grep \'^#ifdef\' |") || die;
+    while (<AUGMENTS>) {
+	if (/^\#ifdef eslAUGMENT_(\S+)/) {
+	    $module = $1; 
+	    $module =~ tr/[A-Z]/[a-z]/; 
+	    $augmented_module{$module} = 1; 
+	}
+    }
+    close AUGMENTS;
+
+# Set $required_module{} hash to 1 for every module that this .c file 
+# requires, except easel itself.
+# 
+    foreach $m (keys(%included_module)) {
+	if (! $augmented_module{$m}) { 
+	    $required_module{$m} = 1;  
+	    $nrequired ++; 
+	}
+    }
+
+# Set $driver_required_module{} hash to 1 for every module that the .c 
+# file includes inside a TESTDRIVE ifdef, but is not an augmentation
+# or a module requirement.
+    foreach $m (keys(%driver_module)) {
+	if (! $augmented_module{$m} && ! $with_module{$m} && ! $required_module{$m}) { 
+	    $driver_required_module{$m} = 1;  
+	    $ndriver_required++;
+	}
+    }
+
+# Count the different augmentations
+#
+    foreach $m (keys(%augmented_module)) {
+	$naugmented++;
+    }
+
+
+    if ($show_summary_table) 
+    {
+	$req    = join(',', sort(keys(%required_module)));
+	$dreq   = join(',', sort(keys(%driver_required_module)));
+	$augreq = join(',', sort(keys(%augmented_module)));
+	
+	printf("%-12s %3d %3d %3d %-20s %-20s %-20s\n",
+	       $thismodule, $nrequired, $ndriver_required, $naugmented,
+	       $req, $dreq, $augreq);
+    } 
+    elsif ($list_reqfiles)
+    {
+	foreach $m (keys(%required_module))        { print "esl_$m.c "; }
+	foreach $m (keys(%driver_required_module)) { print "esl_$m.c "; }
+	print "\n";
+    }
+    elsif ($list_augfiles)
+    {
+	foreach $m (keys(%augmented_module))       { print "esl_$m.c "; }
+	print "\n";
+    }
+    elsif ($list_augflags)
+    {
+	foreach $m (keys(%augmented_module))       { $m =~ tr/[a-z]/[A-Z]/; print "-DeslAUGMENT_$m "; }
+	print "\n";
+    }
+    else
+    {
+
+	print "Module requires:\n";
+	foreach $m (keys(%required_module)) {
+	    print $m, "\n";
+	}
+
+	print "Driver requires:\n";
+	foreach $m (keys(%driver_required_module)) {
+	    print $m, "\n";
+	}
+
+	print "Augmentable with:\n";
+	foreach $m (keys(%augmented_module)) {
+	    print $m, "\n";
+	}
+	foreach $m (keys(%with_module)) {
+	    print $m, "\n";
+	}
+    }
+}
+
diff --git a/devkit/man2optlist b/devkit/man2optlist
new file mode 100755
index 0000000..82084cd
--- /dev/null
+++ b/devkit/man2optlist
@@ -0,0 +1,41 @@
+#! /usr/bin/perl
+
+
+# man2optlist <.man file>
+#
+# From one of our "standardized" .man pages, generate a table
+# that lists each documented option. 
+#
+# Crosscomparisons with c2optlist and sqc2optlist allow verification
+# that the options in a main .c file are documented in a .man page
+# and tested in a .sqc unit test file.
+#
+# Options are looked for as a two-line sequence:
+#   .TP
+#   .B <-option>
+# or
+#   .TP
+#   .BI <-option> " <optarg>"
+
+
+while (<>)
+{
+    if (/^\.TP/) { $nextline_is_option = 1; next; }
+
+    if ($nextline_is_option) 
+    {
+	if     (/^\.B\s+(-\S)\s*$/)                    {  $option = $1; $optarg = "-"; }
+	elsif  (/^\.B\s+(--\S+)\s*$/)	               {  $option = $1; $optarg = "-"; }
+	elsif (/^\.BI\s+(-\S)\s+" (<[nxfcs]>)"\s*$/)   {  $option = $1; $optarg = $2;  }
+	elsif (/^\.BI\s+(--\S+)\s+" (<[nxfcs]>)"\s*$/) {  $option = $1; $optarg = $2;  }
+	else                                           { die "unrecognized option line:\n$_"; }
+
+	printf ("%-20s %s\n", $option, $optarg);
+    }
+
+    $nextline_is_option = 0;
+}
+
+
+
+
diff --git a/devkit/rmanprocess.pl b/devkit/rmanprocess.pl
new file mode 100644
index 0000000..bde3a77
--- /dev/null
+++ b/devkit/rmanprocess.pl
@@ -0,0 +1,77 @@
+#! /usr/bin/perl
+
+# rmanprocess.pl <rman LaTeX2e output>
+# 
+# Example:
+#    rman -f LaTeX2e foo.man | rmanprocess.pl > foo.tex
+#
+# Converts a man page to a HMMER User's Guide section.
+# Written to operate with PolyglotMan v3.0.5, by Thomas Phelps
+# Obtain from ftp.cs.berkeley.edu:/ucb/people/phelps/tcltk/rman.tar.Z
+#
+# - removes document declarations
+# - removes See Also and Author sections, if present
+# - converts sections to subsections
+# - adds a subsection declaration for program name
+# 
+# 
+# SRE, Mon May 25 11:06:58 1998
+# SVN $Id: rmanprocess.pl 1531 2005-12-13 20:53:46Z eddy $
+
+while (<>)
+{
+    if (/--/) { s/--/{-}{-}/g; }
+
+    if (/^\\documentclass/) { 
+	print "\\setlength{\\sresavei}{\\parindent}\n";
+	print "\\setlength{\\sresaves}{\\parskip}\n";
+	next;
+    }
+    if (/^\\begin\{document\}/) { next; }
+  
+    if (/^\s*\\section\{See/ || /^\\end\{document\}/) {
+	print "\\setlength{\\parindent}{\\sresavei}\n";
+	print "\\setlength{\\parskip}{\\sresaves}\n";
+	print "\\newpage";
+	last;
+    }
+
+    if (/\\begin\{itemize\}/ || /\\end\{itemize\}/) {
+	s/itemize/wideitem/;
+	print;
+	next;
+    }
+
+    if (/^\\section\{Name/) {
+	while (<>) {			# get one-line "foo - a program to do bar"
+	    if    (/^(\S+)\s+-\s+(.+)$/) { print "\\subsection{\\texttt{$1} - $2}\n"; }
+	    elsif (/^\\section/)         { last; }
+	}
+    }
+
+# 	while ($line = <>) { 
+# 	    if ($line =~ /\\begin\{itemize\}/) { last; }
+# 	}
+# 	while ($line = <>) {			# get item
+# 	    
+# 		
+# 		last;
+# 	    } elsif ($line =~ /^\\item\s*\[(\S+)\s*-\s*(.+)/) {
+# 		print "\\subsection{\\texttt{$1} - $2}\n";
+# 		last;
+# 	    }
+# 	}
+# 	while (<>) { 
+# 	    if (/\\end\{itemize\}/) { last; }
+# 	}
+# 	next;
+
+    if (/^\\section/) {
+	s/section/subsubsection/;
+	print;
+	next;
+    }
+
+    print;
+
+}
diff --git a/devkit/sedition b/devkit/sedition
new file mode 100755
index 0000000..4037075
--- /dev/null
+++ b/devkit/sedition
@@ -0,0 +1,67 @@
+#! /usr/bin/perl
+
+# sedition <keyword> <replacement> [<key2> <replace2>]... <file>
+#
+# A wrapper for "sed", allowing editing a file in place
+# instead of in a stream. 
+#
+# Replace all instances of @keyword@ with <replacement>,
+# @key2@ with <replace2>, etc.
+#
+# Note that all keywords to be replaced are enclosed by @@ in
+# the text where they are to be replaced, but the @@ delimiters
+# are not in the sedition command line. This allows you to run
+# sedition on scripts and Makefiles that themselves contain sedition
+# command lines, without inadvertently clobbering those command lines.
+#
+# Replacement strings should generally be one-liners.
+# See sedition-pp for a paragraph-wise replacement script.
+#
+# Note the restricted command line use: sedition, unlike
+# sed, must be run on a single specified file.
+#
+# Example: 
+#   sedition FOO "foo replacement" BAR "bar replacement" myfile
+# converts all instances of
+#     @FOO@
+# to
+#     foo replacement
+#
+# Moved to ssdk, SRE, Mon Mar 31 19:24:19 2003
+# SVN $Id: sedition 1531 2005-12-13 20:53:46Z eddy $
+
+sub choke {
+    my ($mesg) = @_;
+    
+    if (-e "$filename.sed.tmp") { system "mv $filename.sed.tmp $filename"; }
+    die ($mesg, ", stopped");
+}
+
+
+$filename = pop;
+if (! -e $filename)           { die   "$filename doesn't exist"; }
+if (  -e "$filename.sed.tmp") { die "already have a tmp file $filename.sed.tmp"; }
+
+$sedargs = "";
+while (@ARGV) {
+    $key      = shift;
+    $replace  = shift;
+    $sedargs .= " -e 's!\@$key\@!$replace!g'";
+}
+
+if (-w $filename)   { $writable = 1; }
+
+system("cp $filename $filename.sed.tmp");
+if ($? != 0) {die "failed to make tmp copy"; }
+if (! $writable) {
+    system("chmod +w $filename"); 
+    if ($? != 0) { choke "failed to make $filename temporarily writable"; }
+}
+system("sed $sedargs $filename.sed.tmp > $filename");
+if ($? != 0) {choke "sed failed"; }
+if (! $writable) {
+    system("chmod -w $filename"); 
+    if ($? != 0) { choke "failed to make $filename temporarily writable"; }
+}
+unlink "$filename.sed.tmp";
+
diff --git a/devkit/sedition-pp b/devkit/sedition-pp
new file mode 100755
index 0000000..8d2b3f6
--- /dev/null
+++ b/devkit/sedition-pp
@@ -0,0 +1,89 @@
+#! /usr/bin/perl
+
+# sedition-pp <keyword> <ppfile> <source file>
+#
+# Replaces occurrences of @<keyword>@ in the source file
+# with the text found in <ppfile>. <ppfile> may contain
+# multiple lines of text. In the <source file>, the @<keyword>@
+# must be on a line of its own - it may have leading and
+# trailing comment delimiters, but that's all. That's because these
+# delimiters will be replicated in the multiline substitution;
+# see below.
+# 
+# Note that the <keyword> is surrounded by @@ in the text
+# where it's to be replaced. These delimiters do not appear in the command
+# line; this allows you to run sedition-pp on scripts and Makefiles
+# that themselves contain sedition-pp command lines, without clobbering
+# those commands.
+#
+# sedition-pp preserves and replicates leading and trailing context,
+# permitting language-independent substitution within comments.
+# For example,
+#     sedition-pp FOO foofile foo.c
+# finds in foo.c (C code) a line like
+#     * @FOO@ 
+# and replaces it with the text of "foofile", which might 
+# result in:
+#     * An example license for foo.
+#     * Copyright (C) ...
+#
+# Whereas a (shell or Perl script) line like
+#     # @FOO@
+# would become
+#     # An example license for foo.
+#     # Copyright (C) ...
+# 
+# And an HTML section like
+#   <!--  
+#     -- @FOO@ 
+#     -->
+# is replaced with
+#     <!-- 
+#       -- An example license for foo.
+#       -- Copyright (C) ...
+#       -->
+#
+# modified from licenseadd.pl in ssdk; SRE, Mon Mar 31 19:39:50 2003
+# SVN $Id: sedition-pp 1531 2005-12-13 20:53:46Z eddy $
+#
+
+$keyword     = shift;
+$ppfile      = shift;
+$sourcefile  = shift;
+
+if (! -e $sourcefile) { die "no such file $sourcefile"; }
+($dev,$ino,$mode) = stat($sourcefile);
+
+open(PP,$ppfile) || die;
+$nlines = 0;
+while (<PP>)
+{
+    chomp;
+    $ppline[$nlines] = $_;
+    $nlines++;
+}
+close(PP);
+
+open(TMPFILE,">/tmp/tmp.pp.sedition") || die "Fatal: can't open /tmp/tmp.pp.sedition : $!\n";
+open(SOURCE,$sourcefile) || die;
+while (<SOURCE>) 
+{
+    if (/^(.*)\@$keyword\@(.*)$/) 
+    {
+	$start = $1;
+	$end   = $2;
+	foreach $line (@ppline) 
+	{
+	    print TMPFILE "$start$line$end\n";
+	}
+    } else { print TMPFILE $_;}
+}
+close SOURCE;
+close TMPFILE;
+
+# Replace the original file with the new one, and restore the original
+# file's mode.
+#
+unlink $sourcefile;
+system("mv /tmp/tmp.pp.sedition $sourcefile");
+chmod $mode, $sourcefile;
diff --git a/devkit/sqc b/devkit/sqc
new file mode 100755
index 0000000..5a1980d
--- /dev/null
+++ b/devkit/sqc
@@ -0,0 +1,701 @@
+#! /usr/bin/perl
+
+# sqc ::
+# quality control script for exercising code, regression testing, 
+# and benchmarking.
+#
+# Usage: sqc [options] <level> <command file> <top_builddir> <top_srcdir> \
+#                  [<old_top_builddir> <old_top_srcdir>]
+#
+#    level          - an integer >= 0. Higher = more testing, more time.
+#    command file   - an sqc command file. See below for format.
+#    top_builddir   - top of the build directory - where executables will
+#                     be searched for. In .sqc command files, any path
+#                     @foo@ is looked for in ${top_builddir}/foo.
+#    top_srcdir     - top of the src directory - where scripts and datafiles
+#                     will be searched for. In .sqc command files, any
+#                     path !foo! is looked for in ${top_srcdir}/foo.
+# [The other two arguments are optional, and are only used if the
+#  command file contains regression tests:]
+#    old_top_builddir - top of the build tree for an old version of
+#                       the same software distribution, for regression tests
+#    old_top_srcdir   - top of the src tree for an old version for regression.
+#
+#
+# Available options:
+#    -v             - print verbose output, including each command
+#                     after various substitutions.
+#
+#    -x <n>         - only run test number <n>, where <n> starts from 1.
+#                     Useful when debugging individual failed tests - saves
+#                     having to rerun the whole testsuite.
+#
+#    -V             - Run 'valgrind' test types. Caller asserts that valgrind
+#                     is installed on this system. This option may also be
+#                     set by setting environment variable SQC_VALGRIND nonzero.
+#
+#    -M             - Run 'mpi' test types. Caller asserts that mpiexec is
+#                     installed on this system. This option may also be set
+#                     by setting env variable SQC_MPI nonzero.
+# Examples: 
+#    % sqc 2 exercises.sqc .. .. 
+#
+# (Allowing -M, -V to also be set in the environment simplifies life when
+#  we're calling sqc via a 'make check', where we don't really have control
+#  over the cmdline options, but we can control our system environment.)
+# 
+# For each (non-prep) test in the command file, a one-line summary
+# of the result is printed. The format of this line is:
+#     <testtype> <test #> [<test name>]...   <status>
+# where <testtype> is exercise, valgrind, mpi, regression, benchmark, or
+# fail; <test #> is a counter, separate for each type; <test name> is
+# the one-word name for this test; and <status> is the result of the
+# test. The format for <status> is described later.
+# 
+# Format of sqc file:
+#    Blank lines are ignored. Lines beginning with # are comments and
+#    are ignored. All other lines have format:
+#    <level>  <type>  <name>  <command>
+#
+#    level:   an integer >= 0. If the sqc level is less than this test's 
+#             level, the command is skipped. This allows quick, less
+#             extensive tests and long, extensive tests to be configured
+#             in one command file.
+#
+#    type:    One of the following keywords: 
+#             prep, exercise, valgrind, mpi, regression, benchmark, fail
+#             See below for description of each.
+# 
+#    name:    One word, <=20 characters, naming this test.
+#             Makes it easier to track down a failed test.
+#             sqc does not verify that names are unique, but it's
+#             a good idea.
+#
+#    command: Command template to run. (remainder of line, usually
+#             more than one token/word).
+#
+#             A command template is subjected to three types of
+#             filename substitution (@@ = executables in the build tree;
+#             !! = scripts and data in the source tree; %% = temp files
+#             managed by sqc).  
+#
+#             No token may contain the string REGRESSION; this is
+#             reserved for regression tests (see below).
+#
+#             valgrind prefixing, regression filename substitution, 
+#             path substitution, and output redirection:
+#             
+#         @@ path substitution for binaries (in build tree):
+#             Tokens enclosed in @@ in the template are interpreted
+#             as executables to be found in the build tree. The token is
+#             prefixed by ${top_builddir}. 
+#             
+#             With no token at all (@@), the ${top_builddir} is
+#             substituted; this special case is used to pass the
+#             ${top_builddir} as an argument into integrated test
+#             scripts that sqc is running. This leads to an
+#             idiomatic incantation for integrated tests:
+#                  !testsuite/ixx-test.pl! @@ !! %TMPPFX%
+#             by which the builddir, srcdir, and a tempfile prefix are
+#             passed along to a script, which is responsible for
+#             printing "ok" and returning 0 on success, and die()'ing
+#             on any failure.
+# 
+#         !! path substitution for scripts and data (in src tree):
+#             Tokens enclosed in !! in a command template are
+#             interpreted as scripts or datafiles to be found in the
+#             source tree. The token is prefixed by ${top_srcdir}.
+#
+#             As above, with no token at all (!!), the ${top_srcdir} is
+#             substituted.
+
+#         %% tempfile substitution for output generated during sqc:
+#             Tokens enclosed in %% are interpreted as a tempfile to
+#             be created during the sqc run. sqc is responsible for
+#             deleting the temp file. Each token in an sqc command
+#             file maps uniquely to the same file name throughout an
+#             sqc process, so the same token may be used in more than
+#             one command; for example, a "prep" command can create a
+#             file that subsequent "exercise" commands need as input).
+#
+#             It is a common idiom to pass a tempfile name into a test
+#             script, where the script then uses the name as a unique
+#             prefix to create a number of temp files with different
+#             suffixes, a la %TMPFILE%.1, %TMPFILE%.2, etc. Such a
+#             script cleans up the suffixed temp files it creates; sqc
+#             cleans up the original %TMPFILE%.
+#
+#         output redirection:
+#             ">/dev/null 2> <TMPFILE>" is appended to the command
+#             template, to redirect all output away, and save 
+#             STDERR diagnostics to a <TMPFILE> (for instance, valgrind
+#             report goes to this file).
+#             If the command template already includes a ">", only
+#             the STDERR redirection is done; it is assumed that the command
+#             is deliberately keeping its output (probably in its own tmpfile).
+#             If redirection is done explicitly in the command template,
+#             the template is responsible for stdout. sqc always handles
+#             stderr itself.
+#
+#         regression filename substitution: ["regression" test types only]
+#             In a "regression" test, the same command is run twice;
+#             once under a "new" build and once under an "old" build
+#             of the same software distribution. Any tempfile tokens in 
+#             the command template that start with REGRESSION (such as 
+#             %REGRESSION.OUT1%) are considered to be outputs that 
+#             should be absolutely identical between the old and new
+#             software versions. These are compared by "diff", and
+#             the regression test fails if the diff isn't clean.
+#
+#             
+# Types of tests:
+#
+# prep:       Creates tmp files that other tests will need.
+#             If a prep command fails for any reason with nonzero
+#             exit status, sqc dies at that point. 
+#             prep commands create no output lines in the sqc report.
+#
+# exercise:   Run a command that is expected to succeed with zero
+#             exit status.
+#             Return status is tested; if nonzero, a failure is
+#             recorded. Crashes versus clean failures are reported 
+#             differently in the output message.
+#             The format for the status in the output line is:
+#                ok.
+#                FAILED [command failed]
+#                FAILED [crash!] 
+#
+# fail:       Run a command that is expected to exit cleanly with
+#             *nonzero* exit status (for example, testing that a program
+#             successfully detects bad input, rather than crashing).
+#             Possible results for output line status are:
+#                  ok.
+#                  FAILED to fail
+#                  FAILED [crash!]
+#
+# valgrind:   Check for memory problems and leaks. 
+#             Like exercise, but the command is run with "valgrind
+#             --error-exitcode=99" prepended, so valgrind runs the
+#             command. 
+#
+#             Return status is tested; 99 indicates an error detected
+#             by valgrind, other nonzero codes indicate a failure code
+#             reported by the application.  The stderr that sqc
+#             captured is examined for valgrind leak reports.  The
+#             format for the status in the output line is:
+#                ok. 
+#                FAILED [valgrind reports error(s)]
+#                FAILED [valgrind reports leak(s)]
+#                FAILED [command failed]
+#                FAILED [crash!]
+#
+#             Valgrind tests are only run if -V cmdline option is used,
+#             or if SQC_VALGRIND environment variable is set nonzero.
+#
+# mpi:        An MPI-specific exercise.
+#             
+#             The command includes 'mpiexec'; for example, 
+#             "mpiexec -n 2 ./my_mpi_unit_test"
+#
+#             MPI exercises are only run if the -M cmdline option is used,
+#             or if SQC_MPI environment variable is set nonzero.
+#
+#             Output line format is the same as for an exercise.
+# 
+# regression: The same command template is processed and run twice;
+#             once under a "new" build (<top_builddir> and <top_srcdir>)
+#             and once under an "old" build of the same software 
+#             distribution (<old_top_builddir> and <old_top_srcdir>).
+#
+#             Any tempfile tokens in the command template that start
+#             with REGRESSION (such as %REGRESSION.OUT1%) are
+#             considered to be outputs that should be absolutely
+#             identical between the old and new software
+#             versions. These are compared by "diff", and the
+#             regression test fails if the diff isn't clean.
+#
+#             Possible outputs:
+#                 ok.
+#                 FAILED [regressions differ]
+#                 FAILED [new command failed]
+#                 FAILED [old command failed]
+#                 FAILED [new crashed!]
+#                 FAILED [old crashed!]
+#
+# benchmark:  Runs a command and measures how long it takes.
+#             The output status field is the user CPU time in seconds.
+#             Like a prep command, if a benchmark command fails, sqc
+#             dies immediately at that point.
+#
+#
+################################################################
+# SRE, Tue Aug  6 11:16:39 2002
+# SVN $Id: sqc 1796 2007-01-03 22:36:44Z eddys $
+
+use Getopt::Std;
+
+# Parse our command line options
+#
+getopts('vx:VM');
+if ($opt_v) { $verbose          = 1;      }
+if ($opt_x) { $only_do_test_num = $opt_x; }
+if ($opt_V) { $do_valgrind      = 1;      }
+if ($opt_M) { $do_mpi           = 1;      }
+
+# Parse our environment
+#
+if ($ENV{"SQC_VALGRIND"} != 0) { $do_valgrind = 1; }
+if ($ENV{"SQC_MPI"}      != 0) { $do_mpi      = 1; }
+
+# Trust but verify
+#
+if ($do_valgrind) 
+{
+    $output = `valgrind --version 2>&1`;
+    if ($?) { die "couldn't run valgrind. Don't set -V cmdline option, don't set SQC_VALGRIND env variable."; }
+}
+if ($do_mpi)
+{
+    $output = `mpiexec -V 2>&1`;
+    if ($?) { die "couldn't run mpiexec. Don't set -M cmdline option, don't set SQC_MPI env variable."; }
+}
+
+# Parse command line arguments
+#
+if ($#ARGV == 3)
+{
+    $setlevel     = shift;
+    $commandfile  = shift;
+    $top_builddir = shift;
+    $top_srcdir   = shift;
+    undef($old_builddir);
+    undef($old_srcdir);
+}
+elsif ($#ARGV == 5) 
+{
+    $setlevel     = shift;
+    $commandfile  = shift;
+    $top_builddir = shift;
+    $top_srcdir   = shift;
+    $old_builddir = shift;
+    $old_srcdir   = shift;
+}
+else   
+{ die "Usage: sqc [options] <level> <commandfile> <top_builddir> <top_srcdir> [<old_top_builddir> <old_top_srcdir>]\n"; }
+
+$tmp = &tempname;
+$|   = 1;
+
+print "sqc: running $commandfile.\n" if $verbose;
+
+open(COMMANDS, $commandfile) || die;
+$nbench = $ntest = $badtest = 0;
+$tot_benchtime_cpu = $tot_benchtime_wall = 0.;
+$linenum = 0;
+
+COMMAND:
+while (<COMMANDS>) {
+    $linenum++;
+    if (/^\#/)   { next; }
+    if (/^\s*$/) { next; }
+
+    chomp;
+    ($testlevel, $testtype, $testname, $cmdtemplate) = split(' ', $_, 4);
+
+    # Skip test is it's harder than our set level.
+    if ($setlevel < $testlevel) { next COMMAND; }
+
+    # Make sure it's a valid test type;
+    # print the first part of the output line.
+    #
+    if ($testtype eq "exercise"   || 
+	$testtype eq "valgrind"   ||
+	$testtype eq "mpi"        ||
+	$testtype eq "regression" ||
+	$testtype eq "fail"       ||
+	$testtype eq "benchmark") 
+    {
+	# In verbose mode, if any test calls for valgrind but we're not set up to run
+	# valgrind, issue one warning. Ditto for mpi tests. It's easy to forget
+	# the need for -V/SQC_VALGRIND, or -M/SQC_MPI.
+	if ($verbose && $testtype eq "valgrind" && ! do_valgrind && $valgrind_ntests == 0)  
+	{ print ("[WARNING: valgrind commands not running: use -V or export SQC_VALGRIND=1 to enable valgrind tests]"); }
+	if ($verbose && $testtype eq "mpi"      && ! do_mpi      && $mpi_ntests == 0) 
+	{ print ("[WARNING: mpi tests present but not run: use -M or export SQC_MPI=1 to enable mpi tests]"); }
+
+	if ($testtype eq "valgrind") { $valgrind_ntests++; if (! $do_valgrind) { next COMMAND; } }
+	if ($testtype eq "mpi")      { $mpi_ntests++;      if (! $do_mpi)      { next COMMAND; } }
+
+
+
+	$ntest++;
+	if ($only_do_test_num && $only_do_test_num != $ntest) { next COMMAND; }
+	printf("  %10s %4d [%21s] ...     ", $testtype, $ntest, $testname);
+    } 
+    elsif ($testtype ne "prep") 
+    {
+	die "No such test type $testtype at line $linenum of command file\n";
+    }
+
+    print "sqc: evaluating line: $_\n" if $verbose;
+
+    # Filename substitution.
+    $cmd = $cmdtemplate;
+
+    ($status, $cmd) = &build_substitution($tmp, $cmd, $top_builddir); 
+    next COMMAND if &check_status($status, $testname, $testtype, "FAILED [@@ substitution]");
+
+    ($status, $cmd) = &src_substitution($tmp, $cmd, $top_srcdir); 
+    next COMMAND if &check_status($status, $testname, $testtype, "FAILED [!! substitution]");
+
+    $cmd =  &tempfile_substitution($tmp, $cmd);
+    
+    print "sqc: after filename subst, cmd is: $cmd\n" if $verbose;
+
+    # Valgrind prefixing.
+    $cmd = "valgrind --error-exitcode=99 $cmd" if ($testtype eq "valgrind");
+
+    # Regression substitutions, $cmd splits into $cmd (new) and $cmd2 (old)
+    if ($testtype eq "regression") {
+	$cmd2 = $cmdtemplate;
+
+	die ("FAILED;\nno <old_builddir> argument on command line; can't run regression tests\n") if (! defined($old_builddir));
+	die ("FAILED;\nno <old_srcdir> argument on command line; can't run regression tests\n")   if (! defined($old_srcdir));
+
+	($status, $cmd2) = &build_substitution($tmp, $cmd2, $old_builddir); 
+	next COMMAND if &check_status($status, $testname, $testtype, "FAILED [@@ substitution]");
+
+	($status, $cmd2) = &src_substitution($tmp, $cmd2, $old_srcdir); 
+	next COMMAND if &check_status($status, $testname, $testtype, "FAILED [!! substitution]");
+
+	$cmd2 =  &tempfile_substitution($tmp, $cmd2);
+  
+	($nregressions, $cmd, $cmd2) = &regression_substitution($tmp, $cmd, $cmd2);
+    
+	print "sqc: after filename subst, regressed new cmd is: $cmd\n"  if $verbose;
+	print "sqc: after filename subst, regressed old cmd is: $cmd2\n" if $verbose;
+    }
+
+    # Output redirection substitution.
+    # stdout is sent to /dev/null unless command already is handling it.
+    # stderr is saved in a tmp file.
+    # (stderr from the old cmd2 of a regression test is sent to /dev/null)
+    #
+    if ($cmd !~ />/) { 
+	$cmd  = "$cmd  > /dev/null";
+	$cmd2 = "$cmd2 > /dev/null"  if ($testtype eq "regression");
+    }
+    $cmd  = "$cmd  2> $tmp.stderr";
+    $cmd2 = "$cmd2 2> /dev/null"     if ($testtype eq "regression");
+    print "sqc: after output subst, cmd is: $cmd\n" if $verbose;
+
+    # Run the commands;
+    # collect exit status in status1;
+    # additionally, for regression test, old executable's status is in status2.
+    #
+    # If our command fails "cleanly" it has an exit code of 1 by Easel convention.
+    # Because of the way Perl handles status codes, this becomes 1<<8 = 256.
+    # All other nonzero codes are called "crashes" because they probably are.
+    #
+    # The `(true; $cmd)` stuff is because a segfault gets reported by shell,
+    # not the process itself; we want to redirect that output too.
+    $startwall = time;
+    $startcpu  = (times)[2];
+    print "sqc: running cmd: $cmd\n" if $verbose;
+    `(true; $cmd) 2> /dev/null > /dev/null`;
+    $status1 = $?;
+    print "sqc: return status $status1\n" if $verbose;
+    if ($testtype eq "regression") {
+	`(true; $cmd2) 2> /dev/null > /dev/null`;
+	$status2 = $?;
+    }
+    $stopwall = time;
+    $stopcpu  = (times)[2];
+
+    # Deal with exit status and output.
+    if ($testtype eq "prep") 
+    {
+	if ($status1 != 0) { die "prep command [$testname] at line $linenum failed with status $status1\n"; }
+    } 
+
+    elsif ($testtype eq "exercise" || $testtype eq "mpi") 
+    {
+	if    (($status1>>8)    == 1) { print "FAILED [command failed]\n";   $badtest++; }
+	elsif ( $status1        != 0) { print "FAILED [crash!]\n";           $badtest++; }
+	else                          { print "ok.\n"; }
+    } 
+
+    elsif ($testtype eq "valgrind")
+    {
+	($has_valgrind, $has_leak) = &check_valgrind_status("$tmp.stderr");
+	if    ($has_valgrind == 0)    { print "FAILED [no valgrind output?]\n";       $badtest++; }
+	elsif (($status1>>8) == 99)   { print "FAILED [valgrind reports error(s)]\n"; $badtest++; }
+	elsif (($status1>>8) == 1)    { print "FAILED [command failed]\n";            $badtest++; }
+	elsif ( $status1     != 0)    { print "FAILED [crash!]\n";                    $badtest++; }
+	elsif ($has_leak)             { print "FAILED [valgrind reports leak(s)]\n";  $badtest++; }
+	else                          { print "ok.\n"; }
+	# Important to check for leaks last above. On app failure, we're allowed to return a nonzero 
+	# exit code without scrupulously free'ing everything.
+    }
+
+
+    elsif ($testtype eq "regression") 
+    {
+	if    (($status1>>8)   == 1) { print "FAILED [new command failed]\n";  $badtest++; }
+	elsif (($status2>>8)   == 1) { print "FAILED [old command failed]\n";  $badtest++; }
+	elsif ( $status1       != 0) { print "FAILED [new crashed!]\n";        $badtest++; }
+	elsif ( $status2       != 0) { print "FAILED [old crashed!]\n";        $badtest++; }
+	else 
+	{
+	    $nregress_failed = 0;
+	    for ($i = 0; $i < $nregressions; $i++) 
+	    {
+		system("diff $tmp.REGRESSION.old.$i $tmp.REGRESSION.new.$i > /dev/null");
+		if ($? != 0) { $nregress_failed++; }
+	    }
+	    if ($nregress_failed > 0) { print "FAILED [regressions differ]\n"; $badtest++; }
+	    else                      { print "ok.\n"; }
+	}
+    }
+
+    elsif ($testtype eq "benchmark") 
+    {
+	if ($status1 != 0) {
+	    die "benchmark at line $linenum failed with status $status1\n";
+	}
+	$cpu_elapsed  = $stopcpu  - $startcpu;
+	$wall_elapsed = $stopwall - $startwall;
+	printf "%6.1f cpu  %4d wall\n", $cpu_elapsed, $wall_elapsed;
+	$tot_benchtime_cpu  += $cpu_elapsed;
+	$tot_benchtime_wall += $wall_elapsed;
+	$nbench++;
+    } 
+
+    elsif ($testtype eq "fail") 
+    {
+	if    (($status1>>8)  == 0) { print "FAILED [0 status]\n";  $badtest++; }
+	elsif (($status1>>8)  != 1) { print "FAILED [crash!]\n";    $badtest++; }
+	else                        { print "ok.\n"; }
+    }
+
+    last if ($only_do_test_num && $ntest == $only_do_test_num ); 
+
+}
+
+# Summarize output.
+if ($badtest > 0) { print "\n$badtest of $ntest exercises at level <= $setlevel FAILED.\n"; }
+else              { print "\nAll $ntest exercises at level <= $setlevel passed.\n"; }
+
+if ($nbench > 0) {
+    printf "\nTotal of %d benchmarks: %.1f cpu  %d wall\n",
+            $nbench, $tot_benchtime_cpu, $tot_benchtime_wall;
+}
+
+
+# Print info on system, date, etc.
+#
+print "\n\nSystem information:\n";
+print `date`;
+print `uname -a`;
+
+
+# Clean up.
+#
+foreach $tmpfile (keys(%used_tmpfile)) {
+    unlink $tmpfile if -e $tmpfile;
+}
+unlink $tmp if -e $tmp;
+unlink "$tmp.stderr" if -e "$tmp.stderr";
+
+
+sub check_status
+{
+    my ($status, $testname, $testtype, $errmsg) = @_;
+    if ($status != 0)
+    {
+	if ($testtype eq "prep") { die "fatal: prep command [$testname]: $errmsg\n"; }
+	print $errmsg . "\n";
+	$badtest++;
+    }
+    ($status);
+}
+
+
+# build_substitution(tmppfx, cmd, builddir)
+# 
+# Perform @@ substitutions for builddir;
+# check that token exists and is executable.
+#
+# Return (status, cmd).
+# status != 0 means token doesn't exist or isn't executable.
+#
+sub build_substitution
+{
+    my ($tmp, $cmd, $builddir) = @_;
+    my ($status, $token, $newname);
+    
+    $status = 0;
+    $cmd =~ s/\@\@/$builddir/g;	# special case of "@@" replacement
+    while ($cmd =~ /\@(\S+?)\@/) 
+    {
+	$token    = $1;
+	$newname  = "$builddir/$token";
+	if (! -x $newname) { $status = 1; }
+	$cmd =~ s/\@$token\@/$newname/g;
+    }
+    ($status, $cmd);
+}
+
+
+
+# src_substitution(tmppfx, cmd, srcdir)
+# 
+# Perform !! substitutions for srcdir;
+# check that token exists.
+#
+# Return (status, cmd).
+# status != 0 means token didn't exist.
+#
+sub src_substitution
+{
+    my ($tmp, $cmd, $srcdir) = @_;
+    my ($status, $token, $newname);
+    
+    $status = 0;
+    $cmd =~ s/\!\!/$srcdir/g;	# special case of "!!" replacement
+    while ($cmd =~ /\!(\S+?)\!/) 
+    {
+	$token    = $1;
+	$newname  = "$srcdir/$token";
+	if (! -e $newname) { $status = 1; }
+	$cmd =~ s/\!$token\!/$newname/g;
+    }
+    ($status, $cmd);
+}
+
+
+# tempfile_substitution(tmpprefix, command_template)
+# 
+# Uses a global, %used_tmpfile, which is a hash
+# that is TRUE for each tmpfile names that we'll 
+# try to delete upon exit.
+sub tempfile_substitution
+{
+    my ($tmp, $com) = @_;
+    my ($token, $newname);
+    
+    while ($com =~ /%(\S+?)%/ && $1 !~ /^REGRESSION/) {
+	$token    = $1;
+	$newname  = "$tmp.$token";
+	$com =~ s/%$token%/$newname/g;
+	$used_tmpfile{$newname} = 1;
+    }
+    return $com;
+}
+    
+# regression_substitution(tmpprefix, new_command, old_command)
+#
+# Any tempfile token that starts with REGRESSION is
+# now substituted by <tmpppfx>.REGRESSION.{new,old}.{n},
+# where {n} is an index {0..n-1} for <n> regression
+# tmpfiles in the command template (usually 1).
+#
+# Unlike normal tmpfile substitution, these constructed names 
+# ignore the exact %token% used by the command template;
+# but there is no possibility of name clash, because the
+# entire token namespace prefixed by REGRESSION is reserved.
+#
+# The reason to do it this way is that now the caller can
+# enumerate (and diff) all regression files just by knowing <n>.
+#
+# Returns (<n>, <cmd1>, <cmd2>).
+#
+sub regression_substitution 
+{
+    my ($tmp, $cmd1, $cmd2) = @_;
+    my ($token, $newname1, $newname2, $n);
+    
+    $n = 0;
+    while ($cmd1 =~ /%(REGRESSION\S*?)%/) 
+    {
+	$token    = $1;
+	$newname1 = "$tmp.REGRESSION.new.$n";
+	$newname2 = "$tmp.REGRESSION.old.$n";
+	$cmd1 =~ s/%$token%/$newname1/g;
+	$cmd2 =~ s/%$token%/$newname2/g;
+	$used_tmpfile{$newname1} = 1;
+	$used_tmpfile{$newname2} = 1;
+	$n++;
+    }
+    return ($n, $cmd1, $cmd2);
+}
+    
+
+# Function: check_valgrind_status
+# 
+# Look at a file containing stderr from an executed command.
+# Find valgrind report, and look for a memory leak report. 
+#
+# You'll see below that code for checking "still reachable" has been
+# commented out. System libraries may do harmless global allocations
+# without deallocating, and these show up as "still reachable", yet
+# are outside our control. This is especially noticeable on Mac OS/X.
+#
+# Return ($has_valgrind, $has_leak):
+#    $has_valgrind:  1 if report is present; else 0
+#    $has_leak:      1 if valgrind report shows an unsuppressed memory leak.
+#
+# If $file isn't present at all, returns (0,0).
+#
+sub check_valgrind_status
+{
+    my ($file) = @_;
+    my ($has_valgrind, $has_leak);
+
+    open(VALGRIND, "$file") || return (0,0);
+    $has_valgrind = $has_leak = 0;
+    while (<VALGRIND>) {
+	if (/^==\d+== Memcheck/)                             { $has_valgrind = 1; }
+	if (/^==\d+==    definitely lost: (\d+)/ && $1 != 0) { $has_leak     = 1; }
+	if (/^==\d+==    indirectly lost: (\d+)/ && $1 != 0) { $has_leak     = 1; }
+	if (/^==\d+==      possibly lost: (\d+)/ && $1 != 0) { $has_leak     = 1; }
+#	if (/^==\d+==    still reachable: (\d+)/ && $1 != 0) { $has_leak     = 1; }
+    }
+    close VALGRIND;
+    
+    if (! $has_valgrind) { $has_leak = 0; }
+
+    return ($has_valgrind, $has_leak);
+}
+
+# Function: tempname
+#
+# Returns a unique temporary filename. 
+#
+# Should be robust. Uses the pid as part of the temp name
+# to prevent other processes from clashing. A two-letter
+# code is also added, so a given process can request
+# up to 676 temp file names (26*26). An "esltmp" code is
+# also added to distinguish these temp files from those
+# made by other programs.
+#
+# Returns nothing if it fails to get a temp file name.
+#
+# If TMPDIR is set, that directory is prepended to the
+# name.
+#
+sub tempname {
+    my ($dir, $name, $suffix);
+    if ($TMPDIR) { $dir = $TMPDIR."/"; } else {$dir = "";}
+
+    foreach $suffix ("aa".."zz") {
+        $name = "$dir"."esltmp".$suffix.$$;
+        if (! (-e $name)) { 
+            open(TMP,">$name") || die; # Touch it to reserve it.
+            close(TMP);
+            return "$name"; 
+        }
+    }                           
+}
+
+
diff --git a/documentation/Makefile.in b/documentation/Makefile.in
new file mode 100644
index 0000000..5ea0b8d
--- /dev/null
+++ b/documentation/Makefile.in
@@ -0,0 +1,205 @@
+top_srcdir     = @top_srcdir@
+srcdir         = @srcdir@
+VPATH          = @srcdir@
+SHELL          = /bin/sh
+
+AUTODOC  = ${srcdir}/../devkit/autodoc
+CEXCERPT = ${srcdir}/../devkit/cexcerpt
+
+# Installation targets
+#
+prefix      = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+bindir      = @bindir@
+libdir      = @libdir@
+includedir  = @includedir@
+mandir      = @mandir@
+docdir      = @docdir@
+pdfdir      = @pdfdir@
+mandir      = @mandir@
+man1dir     = ${mandir}/man1
+man1ext     = .1
+
+# Each module in this list obeys three documentation conventions:
+#
+#  1. It has a .tex file documenting its API.
+#     These are handwritten, in the source directory with
+#     the .c and .h files.
+#
+#  2. It can be processed with autodoc_functions to
+#     produce the function documentation appendix to 
+#     each module. These appendices go to the 
+#     autotext/ subdir.
+#
+#  3. It can be processed with cexcerpts to extract 
+#     verbatim code fragments for inclusion in the 
+#     documentation. These fragments go to the cexcerpts/
+#     subdir.
+#
+MODULES = easel\
+	  esl_alphabet\
+	  esl_buffer\
+	  esl_cluster\
+	  esl_dirichlet\
+	  esl_distance\
+	  esl_dmatrix\
+	  esl_dsqdata\
+	  esl_exponential\
+	  esl_fileparser\
+	  esl_gamma\
+	  esl_getopts\
+	  esl_gev\
+	  esl_gumbel\
+	  esl_histogram\
+	  esl_hyperexp\
+	  esl_keyhash\
+	  esl_minimizer\
+	  esl_mpi\
+	  esl_msa\
+	  esl_msacluster\
+	  esl_msaweight\
+	  esl_normal\
+	  esl_paml\
+	  esl_random\
+	  esl_randomseq\
+	  esl_ratematrix\
+	  esl_regexp\
+	  esl_rootfinder\
+	  esl_scorematrix\
+	  esl_sq\
+	  esl_sqio\
+	  esl_sse\
+	  esl_ssi\
+	  esl_stack\
+	  esl_stats\
+	  esl_stopwatch\
+	  esl_stretchexp\
+	  esl_tree\
+	  esl_vectorops\
+	  esl_weibull\
+	  esl_wuss
+
+#	  esl_mixgev
+#	  esl_msafile
+#	  esl_swat
+
+TEXFILES = \
+	codestyle.tex\
+	copyright.tex\
+	doctricks.tex\
+	format_a2m.tex\
+	format_ncbi.tex\
+	format_stockholm.tex\
+	format_wuss.tex\
+	install.tex\
+	installation.tex\
+	intro.tex\
+	macros.tex\
+	main.tex\
+	statistics.tex\
+	titlepage.tex\
+	typography.tex
+
+
+.PHONY:  pdf install uninstall clean distclean 
+
+pdf:    current.pdf
+
+current.pdf: symlinks.stamp autodoc.stamp cexcerpt.stamp apitables.stamp
+	@for prog in pdflatex bibtex; do \
+	  command -v $$prog >/dev/null 2>&1 || { echo >&2 "The $$prog program is required to build the Userguide, but it's not installed. Aborting."; exit 1; } \
+	done
+	@echo "     LATEX current.pdf  (see latex.log for output)"
+	@pdflatex -interaction=nonstopmode main  > latex.log 2>&1
+	@bibtex   main                          >> latex.log 2>&1
+	@pdflatex main                          >> latex.log 2>&1
+	@pdflatex main                          >> latex.log 2>&1
+	@mv main.pdf current.pdf
+
+# symlinks.stamp: if we're in a build tree, symlink the tex files.
+#                 if we're in a source tree, no-op.
+symlinks.stamp: 
+	@if test "x${srcdir}" != "x."; then \
+	   for texfile in ${TEXFILES}; do \
+	      if ! (test -e $$texfile); then \
+	         ln -s ${srcdir}/$$texfile . ;\
+	      fi ;\
+	   done ;\
+	   if ! (test -e figures); then \
+	      ln -s ${srcdir}/figures . ;\
+	   fi ;\
+	fi
+	@for module in ${MODULES}; do \
+	   if ! (test -e $$module.tex); then \
+	      ln -s ${srcdir}/../$$module.tex . ;\
+	   fi ;\
+	done
+	@echo "symlinks created:\c" > $@
+	@date >> $@
+
+autodoc.stamp:
+	mkdir -p autotext
+	for module in ${MODULES}; do\
+	   ${AUTODOC} ${srcdir}/../$$module.c >  autotext/$${module}_functions.tex;\
+	done
+	@echo "autotext created:\c" > $@
+	@date >> $@
+
+cexcerpt.stamp:
+	mkdir -p cexcerpts
+	for module in ${MODULES}; do\
+	   ${CEXCERPT} ${srcdir}/../$$module.c cexcerpts;\
+	   ${CEXCERPT} ${srcdir}/../$$module.h cexcerpts;\
+	done
+	@echo "cexcerpts created:\c" > $@
+	@date >> $@
+
+apitables.stamp:
+	mkdir -p apitables
+	for module in ${MODULES}; do\
+	   ${AUTODOC} -t ${srcdir}/../$$module.c > apitables/$${module}_api.tex;\
+	done
+	@echo "apitables created:\c" > $@
+	@date >> $@
+
+install:
+	${INSTALL} -m 0644 current.pdf ${DESTDIR}${pdfdir}/
+
+uninstall:
+	-rm -f  ${DESTDIR}${pdfdir}/current.pdf
+
+clean:
+	if test "x${srcdir}" != "x."; then \
+	   for texfile in ${TEXFILES}; do \
+	      if (test -L $$texfile); then \
+	         rm $$texfile ;\
+	      fi ;\
+	   done ;\
+	   if (test -L figures); then \
+	      rm figures ;\
+	   fi ;\
+	fi
+	for module in ${MODULES}; do \
+	   if (test -L $$module.tex); then \
+	     rm $$module.tex ;\
+	   fi ;\
+	done
+	-rm -f symlinks.stamp autodoc.stamp cexcerpt.stamp apitables.stamp
+	-rm -rf cexcerpts
+	-rm -rf autotext
+	-rm -rf apitables
+	-rm -f latex.log
+	-rm -f x.log
+	-rm -f *~ TAGS
+	-rm -f main.log main.out main.pdf main.aux main.toc 
+	-rm -f main.bbl main.blg main.brf
+	-rm -f typography.log typography.aux typography.out
+
+distclean: clean
+	-rm -f Makefile
+	-rm -f current.pdf
+
+################################################################
+# @LICENSE@
+################################################################
diff --git a/documentation/codestyle.tex b/documentation/codestyle.tex
new file mode 100644
index 0000000..8a63dc2
--- /dev/null
+++ b/documentation/codestyle.tex
@@ -0,0 +1,1872 @@
+
+This chapter describes Easel from a developer's perspective. It shows
+how a module's source code is organized, written, tested, and
+documented. It should help you with implementing new Easel code, and
+also with understanding the structure of existing Easel code.
+
+We expect Easel to constantly evolve, both in code and in style.
+Talking about our code style does not mean we enforce foolish
+consistency. Rather, the goal is aspirational; one way we try to
+manage the complexity of our growing codebase is to continuously
+cajole Easel code toward a clean and consistent presentation. We try
+to organize code modules in similar ways, use certain naming
+conventions, and channel similar functions towards common
+\esldef{interfaces} that provide common calling conventions and
+behaviors.
+
+But because it evolves, not all Easel code obeys the code style
+described in this chapter. Easel code style is like a local building
+ordinance. Any new construction should comply. Older construction is
+grandfathered in and does not have to immediately conform to the
+current rules. When it comes time to renovate, it's also time to bring
+the old work up to the current standards.
+
+For a concrete example we will focus primarily on one Easel module,
+the \eslmod{buffer} module. We'll take a bottom up approach, starting
+from the overall organization of the module and working down into
+details. If you're a starting developer, you might have preferred a
+bottom-up description; you might just want to know how to write or
+improve a single Easel function, for example. In that case, skim
+ahead.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Table: Easel naming conventions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{table}
+\begin{minipage}{\textwidth}
+\begin{tabular}{l>{\raggedright}p{3.5in}l}
+\textbf{What}        & \textbf{Explanation}              & \textbf{Example} \\ \hline
+Easel module
+  &
+    Module names should be 10 characters or less.\footnote{sqc assumes
+    this in output formatting, for example.}
+    Many modules are organized around a single Easel object
+    that they implement. The name of the module matches the
+    name of the object. For example, \ccode{esl\_buffer.c} implements \ccode{ESL\_BUFFER}.
+  & \eslmod{buffer} \\ \\
+
+tag name
+  & Names in the module are constructed either using the module's full
+    name or sometimes with a shorter abbreviation, usually 3
+    characters (sometimes 2 or 4).
+  & \ccode{buf} \\ \\
+
+source file
+  & Each module has one source file, named \ccode{esl\_}\itcode{modulename}\ccode{.c}.
+  & \ccode{esl\_buffer.c} \\ \\
+
+header file
+  & Each module has one header file, named \ccode{esl\_}\itcode{modulename}\ccode{.h}.
+  & \ccode{esl\_buffer.h} \\  \\
+
+documentation 
+  & Each module has one documentation chapter, named \ccode{esl\_}\itcode{modulename}\ccode{.tex}.
+  & \ccode{esl\_buffer.tex} \\ \\
+
+Easel object          
+  & Easel ``objects'' are typedef'ed C structures (usually) or
+    types (rarely\footnote{\ccode{ESL\_DSQ} is a \ccode{uint8\_t}, for example.}).
+  & \ccode{ESL\_BUFFER} \\ \\  
+
+external function 
+  & All exposed functions have tripartite names \ccode{esl\_}\itcode{module}\ccode{\_specificname}().
+    The specific part of function names often adhere to a standardized API
+    ``interface'' nomenclature. (All \ccode{\_Open()} functions must follow the same standardized
+    behavior guidelines, for example.) Functions in the base \ccode{easel.c} module
+    have a bipartite name, omitting the module name. The specific 
+    name part generally uses mixed case capitalization.
+  & \ccode{esl\_buffer\_OpenFile()} \\ \\
+
+static function 
+  & Internal functions (static within a module file) drop the
+    \ccode{esl\_} prefix, and are 
+    named \itcode{modulename}\ccode{\_function}.
+  & \ccode{buffer\_refill()} \\ \\
+
+macro 
+  & Macros follow the same naming convention as external functions,
+    except they are all upper case.
+  & \ccode{ESL\_ALLOC()} \\ \\ 
+
+defined constant
+  & Defined constants in Easel modules are named
+    \ccode{esl}\itcode{MODULENAME}\ccode{\_FOO}. Constants defined
+    in the base \ccode{easel.h} module are named just 
+    \ccode{eslFOO}.
+   & \ccode{eslBUFFER\_SLURPSIZE}\\ \\
+
+return codes
+  & Return codes are constants defined in \ccode{easel.h}, so 
+    they obey the rules of other defined constants in the base module (\ccode{eslOK},
+    \ccode{eslFAIL}). Additionally, error codes start with
+    \ccode{E}, as in \ccode{eslE}\itcode{ERRTYPE}.
+  & \ccode{eslENOTFOUND} \\ \\
+
+config constant
+  & Constants that don't start with \ccode{esl} are almost always 
+    configuration (compile-time) constants determined by the autoconf
+    \ccode{./configure} script and defined in \ccode{esl\_config.h}.
+  & \ccode{HAVE\_STDINT\_H} \\ \\
+\end{tabular}
+\end{minipage}
+\caption{\textbf{Easel naming conventions.} }
+\end{table}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{An Easel module}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Each module consists of three files: a .c C code file, a .h header
+file, and a .tex documentation file. These filenames are constructed
+from the module name. For example, the \eslmod{buffer} module is
+implemented in \ccode{esl\_buffer.c}, \ccode{esl\_buffer.h}, and
+\ccode{esl\_buffer.tex}.
+
+%%%%%%%%%%%%%%%%
+\subsection{The .c file}
+%%%%%%%%%%%%%%%%
+
+Easel \ccode{.c} files are larger than most coding styles would
+advocate. Easel module code is designed to be \emph{read}, to be
+\emph{self-documenting}, to contain its own \emph{testing methods},
+and to provide useful \emph{working examples}.  Thus the size of the
+files is a little deceptive, compared to C code that's solely
+implementating some functions. In general, only about a a quarter of
+an Easel module's \ccode{.c} file is the actual module implementation.
+Typically, around half of an Easel \ccode{.c} file is documentation,
+and much of this gets automatically parsed into the PDF userguide. The
+rest consists of drivers for unit testing and examples.
+
+Module files are organized into a somewhat stereotypical set of
+sections, to facilitate navigating the code, as follows.
+
+The \ccode{.c} file starts with a comment that contains the {\bfseries
+  table of contents}. The table of contents helps us navigate a long
+Easel source file. This initial comment also includes a short
+description of the module's purpose. It may also contain miscellaneous
+notes.
+
+For example, from the \eslmod{buffer} module:
+
+\input{cexcerpts/header_example}
+
+None of this is parsed automatically. Its structure is just
+convention.
+
+The short description lines in the table of contents match section
+headings in comments later in the file. A search forward with the text
+of a heading will move you to that section of the code.
+
+Next come the {\bfseries includes} and any {\bf definitions}. Of the
+include files, the \ccode{esl\_config.h} header must always be
+included first. It contains platform-independent configuration code
+that may affect even the standard library header files. Standard
+headers like \ccode{stdio.h} come next, then Easel's main header
+\ccode{easel.h}; then headers of any other Easel modules this module
+depends on; then any headers for modules this module can be augmented
+with, surrounded by appropriate \ccode{\#ifdef}'s; then the module's
+own header. For example, the \ccode{\#include}'s in the
+\eslmod{buffer} module look like:
+
+\input{cexcerpts/include_example}
+
+Next come the {\bfseries private function declarations}.  We declare
+all private functions at the top of the file, where they can be seen
+easily by a developer who's casually reading the source. Their
+definitions are buried deeper, in one or more sections following the
+implementation of the exposed API.
+
+\input{cexcerpts/statics_example}
+
+The rest of the file is the {\bfseries code}. It is split into
+sections. Each section is numbered and given one-line titles that
+appear in the table of contents.  Each section starts with a section
+header, a comment block in front of each code section in the
+\ccode{.c} file.  These section headers match comments in front of
+that section's declarations in the \ccode{.h} file. Because of the
+numbering and titling, a particular section of code can be located by
+searching on the number or title.  A common section structure includes
+the following, in this order:
+
+
+\begin{description}
+\item[\textbf{The \ccode{FOOBAR} object.}]
+  The first section of the file provides the API for creating and
+  destroying the object that this module implements.
+
+\item[\textbf{The rest of the API.}]
+  Everything else that is part of the API for this module in its
+  baseline (unaugmented) form. This might be split across multiple
+  sections.
+
+\item[\textbf{Augmented API, if any.}]
+  Any functions that are only available with one or more augmentations
+  are split out into one or more separate sections. 
+
+\item[\textbf{Debugging/dev code.}]
+  Most objects can be validated or dumped to an output stream
+  for inspection.
+
+\item[\textbf{Private functions.}]
+  Easel isn't rigorous about where private (non-exposed) functions go,
+  but they often go in a separate section in about the middle of the
+  \ccode{.c} file, after the API and before the drivers.
+
+\item[\textbf{Optional drivers}] Stats, benchmark, and regression
+  drivers, if any. 
+
+\item [\textbf{Unit tests.}]
+  The unit tests are internal controls that test that the module's API
+  works as advertised.
+
+\item [\textbf{Test driver.}]
+  All modules have an automated test driver is a \ccode{main()} that
+  runs the unit tests.
+ 
+\item [\textbf{Examples.}]
+  All modules have at least one \ccode{main()} showing an example of
+  how to use the main features of the module.
+
+\item [\textbf{Copyright/license information.}]  Each file ends with a
+  \ccode{@LICENSE@} tag. This placeholder is automatically replaced by
+  the correct license statement at packaging time. This gives us the
+  ability to package specially licensed versions, in addition to the
+  usual open source version. Automatically generated Subversion
+  \ccode{SVN \$Id\$} and \ccode{SVN \$URL\$} information often appears
+  here too.
+
+\end{description}
+
+%%%%%%%%%%%%%%%%
+\subsection{The .h file}
+%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%
+\subsection{Special syntax in Easel C comments}
+%%%%%%%%%%%%%%%%
+
+Easel comments sometimes include special syntax recognized by tools other
+than the compiler.  Here are some quick explanations of the special
+stuff a developer needs to be aware of. 
+
+\begin{table}
+\begin{tabular}{l>{\raggedright}p{3.5in}l}
+\textbf{Special syntax}  & \textbf{Description}  & \textbf{Parsed by}\\ \hline
+
+\ccode{/* Function: }\itcode{funcname} 
+  & Function documentation that gets converted to \LaTeX\ and included
+    in Easel's PDF documentation.
+  & \emcode{autodoc} \\ \\
+
+\ccode{ *\# }\itcode{x.\ secheading} 
+  & Section heading corresponding to section number x in a \ccode{.c}
+    file's table of contents. This is automatically extracted as part
+    of creating a summary table in the PDF documentation.
+  & \emcode{autodoc -t} \\ \\
+
+\ccode{/*::cexcerpt::} ...
+  & Comments that marking beginning/end of code that is extracted
+    verbatim into the documentation.
+  & \emcode{cexcerpt} \\ \\
+
+\ccode{ \$}\itcode{keyword}\ccode{\$} 
+  & Subversion keyword substitutions
+  & \emcode{svn} \\ \\
+
+\ccode{@}\itcode{keyword}\ccode{@}
+  & Configuration variable substitution
+  & \emcode{sedition} \\ \\
+\hline
+\end{tabular}
+\caption{{\bfseries Summary of special syntax in Easel C comments.}}
+\end{table}
+
+%%%%
+\subsubsection{function documentation}
+%%%%
+
+Any comment that starts with
+\begin{cchunk}
+/* Function:  ...
+\end{cchunk}
+will be recognized and parsed by our \prog{autodoc} program, 
+which assumes it is looking at a structured function documentation
+header.
+
+See section XX for details on how these headers work.
+
+We want all external functions in the Easel API to be documented
+automatically by \prog{autodoc}. We don't want internal functions tp
+appear in the documentation, but we do want them documented in the
+code.  To keep \prog{autodoc} from recognizing the function header of
+an internal (static) function, we just leave off the \ccode{Function:}
+tag in the comment block.   
+
+%%%%
+\subsubsection{section headings}
+%%%%
+
+The automatically generated \LaTeX\ code for a module's documentation
+includes a table summarizing the functions in the exposed API. This
+table is constructed automatically from the source code by
+\prog{autodoc -t}. The list of functions in this table is extracted
+from the function documentation (above). The table is broken into
+sections, just as the module code is, using section headings. The
+comment block marking the start of a section heading for exposed API
+code has an extra \ccode{\#}:
+
+\begin{cchunk}
+/*****************************************************************
+ *# 1. ESL_BUFFER object: opening/closing.
+ *****************************************************************/
+\end{cchunk}
+
+Section headings for internal functions omit the \ccode{\#}, and
+\prog{autodoc} ignores them:
+
+\begin{cchunk}
+/*****************************************************************
+ * 10. Unit tests
+ *****************************************************************/
+\end{cchunk}
+
+%%%%
+\subsubsection{excerpting}
+%%%%
+
+This book includes many examples of C code extracted verbatim from
+Easel source.  These {\bfseries excerpts} are marked with specially
+formatted comments in the C file:
+
+\begin{cchunk}
+/*::cexcerpt::my_example::begin::*/
+   while (esl_sq_Read(sqfp, sq) == eslOK)
+     { n++; }
+/*::cexcerpt::my_example::end::*/
+\end{cchunk}
+
+When we build the Easel documentation from its source, our
+\prog{cexcerpt} program extracts all marked excerpts from \ccode{.c}
+and \ccode{.h} files, and places them in individual files in a
+temporary \ccode{cexcerpts/} directory, from where they are included
+in the main \LaTeX documentation.
+
+%%%%
+\subsubsection{subversion keyword substitution (\$\$)}
+%%%%
+
+Comment lines containing Subversion \ccode{Id} and \ccode{URL}
+keywords appear in the table of contents section:
+
+\begin{cchunk}
+ * SVN $Id: esl_buffer.c 662 2011-02-22 16:33:08Z eddys $
+ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/trunk/esl_buffer.c $
+\end{cchunk}
+
+These started out as
+\begin{cchunk}
+ * SVN $Id$
+ * SVN $URL$
+\end{cchunk}
+
+and their contents get substituted by Subversion, our revision control
+system.
+
+If you add a new file to Easel and it has Subversion keywords in it,
+you have to manually activate keyword substitution. 
+
+\user{svn propset svn:keywords "Id URL" }\itbfcode{myfile}
+
+%%%%
+\subsubsection{configuration variable substitution (@@)}
+%%%%
+
+At the bottom of every source file is a comment block:
+
+\begin{cchunk}
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+\end{cchunk}
+
+When we build a distribution package, the \ccode{@LICENSE@} tag is
+replaced with by the appropriate copyright and license text by our
+\prog{sedition} program. The command line appears in
+\ccode{Makefile.in} in its \ccode{make dist}; it directs
+\prog{sedition} to replace \ccode{@LICENSE@} tags with the contents of
+the \ccode{LICENSE.tag} file (which is itself constructed
+automatically at \ccode{make dist} time).
+
+For example, the standard Easel release uses the Janelia Software
+License (functionally identical to the BSDL), so in distribution code
+this comment block something like:
+
+\begin{cchunk}
+/*****************************************************************
+ * Easel - a library of C functions for biological sequence analysis
+ * Version 0.42; February 2011
+ * Copyright (C) 2011 Howard Hughes Medical Institute
+ * Other copyrights also apply. See the COPYRIGHT file for a full list.
+ *
+ * Easel is distributed under the Janelia Farm Software License, a BSD
+ * license. See the LICENSE file for more details.
+ *****************************************************************/
+\end{cchunk}
+
+Autogenerating these license tags allows us to package distributions
+under other licenses without having to edit every source file.
+
+\ccode{@LICENSE@} is the only configuration variable that Easel
+\ccode{.c} or \ccode{.h} files currently use. It's possible we would
+add others in the future.
+
+
+%%%%%%%%%%%%%%%%
+\subsection{Driver programs}
+%%%%%%%%%%%%%%%%
+
+An unusual (innovative?) thing about Easel modules is how we embed
+{\bfseries driver programs} directly in the module's \ccode{.c}
+file. Driver programs include our unit tests, benchmarks, and working
+examples. These small programs are enclosed in standardized
+\ccode{\#ifdef}'s that enable them to be conditionally compiled.
+
+None of these programs are installed by \ccode{make install}.  Test
+drivers are compiled as part of \ccode{make check}.  A \ccode{make
+  dev} compiles all driver programs.
+
+There are six main types of drivers used in Easel:
+
+\begin{description} 
+
+\item[\textbf{Unit test driver(s).}] (Mandatory.) Each module has one (and only one)
+  \ccode{main()} that runs the unit tests and any other automated for
+  the module. The test driver is compiled and run by the testsuite in
+  \ccode{testsuite/testsuite.sqc} when one does a \ccode{make check}
+  on the package. It is also run by several of the automated tools
+  used in development, including the coverage (\ccode{gcov}) and
+  memory (\ccode{valgrind}) tests. A test driver takes no arguments
+  (it must generate any input files it needs). If it succeeds, it
+  returns 0, with no output. If it fails, it returns nonzero and calls
+  \ccode{esl\_fatal()} to issue a short error message on
+  \ccode{stdout}. Our test harness, \emcode{sqc}, depends on these
+  output and exit status conventions. Optionally, it may use a flag
+  to show more useful output when it's run more interactively.
+  (usually a \ccode{-v}, for verbose).
+  The test driver is enclosed by
+  \ccode{\#ifdef esl}\itcode{MODULE}\ccode{\_TESTDRIVE} for
+  conditional compilation.
+
+\item[\textbf{Regression/comparison test(s).}] (Optional.) These tests
+  link to one or more libraries that provide identical comparable
+  functionality, such as previous versions of Easel, the old
+  \prog{SQUID} library, \prog{LAPACK} or the GNU Scientific Library.
+  They test that Easel's functionality performs at least as it used
+  to, or as well as the 'competition'. These tests are run on demand,
+  and not included in automated testing, because the other libraries
+  may only be present on a subset of our development machines. They
+  are enclosed by \ccode{\#ifdef
+    esl}\itcode{MODULE}\ccode{\_REGRESSION} for conditional
+  compilation.
+
+\item[\textbf{Benchmark(s).}] (Optional.) These tests run a
+  standardized performance benchmark and collect time and/or memory
+  statistics. They may generate output suitable for graphing. They are
+  run on demand, not by automated tools. They typically use 
+  \eslmod{stopwatch} for timing. They are enclosed by
+  \ccode{\#ifdef esl}\itcode{MODULE}\ccode{\_BENCHMARK}  for
+  conditional compilation.
+
+\item[\textbf{Statistics generator(s).}] (Optional.) These tests collect
+  statistics used to characterize the module's scientific performance,
+  such as its accuracy at some task. They may generate graphing
+  output. They are run on demand, not by automated tools. They are
+  enclosed by \ccode{\#ifdef esl}\itcode{MODULE}\ccode{\_STATS}
+  for conditional compilation.
+
+\item[\textbf{Experiment(s).}] (Optional.) These are other reproducible
+  experiments we've done on the module code, essentially the same as
+  statistics generators. They are
+  enclosed by \ccode{\#ifdef esl}\itcode{MODULE}\ccode{\_EXPERIMENT}
+  for conditional compilation.
+
+\item[\textbf{Example(s).}] (Mandatory). Every module has at least one example
+  \ccode{main()} that provides a ``hello world'' level example of
+  using the module's API. Examples are enclosed in \ccode{cexcerpt}
+  tags for extraction and verbatim inclusion in the documentation.
+  They are enclosed by \ccode{\#ifdef esl}\itcode{MODULE}\ccode{\_EXAMPLE} 
+  for conditional compilation.
+\end{description}  
+
+All modules have at least one test driver and one example. Other tests
+and examples are optional. When there is more than one \ccode{main()}
+of a given type, the additional tags are numbered starting from 2: for
+example, a module with three example \ccode{main()'s} would have three
+tags for conditional compilation, \ccode{eslFOO\_EXAMPLE},
+\ccode{eslFOO\_EXAMPLE2}, and \ccode{eslFOO\_EXAMPLE3}.
+
+The format of the conditional compilation tags for all the drivers
+(including test and example drivers) must be obeyed. Some test scripts
+are scanning the .c files and identifying these tags
+automatically. For instance, the driver compilation test identifies any
+tag named
+\ccode{esl}\itcode{MODULENAME}\ccode{\_\{TESTDRIVE,EXAMPLE,REGRESSION,BENCHMARK,STATS\}*}
+and attempt to compile the code with that tag defined.
+
+Which driver is compiled (if any) is controlled by conditional
+compilation of the module's \ccode{.c} file with the appropriate
+tag. For example, to compile and run the \eslmod{sqio} test driver as
+a standalone module:
+
+\begin{cchunk}
+   %  gcc -g -Wall -I. -o esl_sqio_utest -DeslSQIO_TESTDRIVE esl_sqio.c easel.c -lm
+   %  ./esl_sqio_utest
+\end{cchunk}
+
+or to compile and run it in full library configuration:
+
+\begin{cchunk}
+   %  gcc -g -Wall -I. -L. -o esl_sqio_utest -DeslSQIO_TESTDRIVE esl_sqio.c -leasel -lm
+   %  ./esl_sqio_utest
+\end{cchunk}
+
+
+\begin{table}
+\begin{tabular}{llll}
+\textbf{Driver type}     &  \textbf{Compilation flag}                       & \textbf{Driver program name}                     & \textbf{Notes}\\ \hline
+Unit test                &  \ccode{esl}\itcode{MODULE}\ccode{\_TESTDRIVE}   & \ccode{esl\_}\itcode{module}\ccode{\_utest}      & output and exit status standardized for \emcode{sqc}\\
+Regression test          &  \ccode{esl}\itcode{MODULE}\ccode{\_REGRESSION}  & \ccode{esl\_}\itcode{module}\ccode{\_regression} & may require other libraries installed\\
+Benchmark                &  \ccode{esl}\itcode{MODULE}\ccode{\_BENCHMARK}   & \ccode{esl\_}\itcode{module}\ccode{\_benchmark}  & \\
+Statistics collection    &  \ccode{esl}\itcode{MODULE}\ccode{\_STATS}       & \ccode{esl\_}\itcode{module}\ccode{\_stats}      & \\
+Experiment               &  \ccode{esl}\itcode{MODULE}\ccode{\_EXPERIMENT}  & \ccode{esl\_}\itcode{module}\ccode{\_experiment} & \\
+Example                  &  \ccode{esl}\itcode{MODULE}\ccode{\_EXAMPLE}     & \ccode{esl\_}\itcode{module}\ccode{\_example}    & \\
+\end{tabular}
+\caption{{\bfseries Summary of types of driver programs in Easel.}}
+\end{table}
+
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Writing an Easel function}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+Documentation of functions, particularly in the structured comment
+header that's parsed by the \emcode{autodoc} program, is described in
+a different section of its own.
+
+%%%%
+\subsubsection{conventions for function names}
+%%%%
+
+Function names are tripartite, constructed as
+\ccode{esl\_}\itcode{moduletag\_funcname}.  
+
+The \itcode{moduletag} should generally be the module's full name;
+sometimes (historically) it is an abbreviated tag name for the module
+(such as \ccode{abc} for the \eslmod{alphabet} module); on occasion,
+it is the name of an Easel object or datatype that has not yet budded
+off into its own module. Long versus short \itcode{moduletag}'s are
+sometimes used to indicate functions that operate directly on objects
+via common interfaces, versus other functions in the exposed API. The
+long form may indicate functions that obey a common interface, such as
+\ccode{esl\_alphabet\_Create()}.\footnote{This is a clumsy C version
+  of what C++ would do with namespaces, object methods, and
+  constructors/destructors.} Miscellaneous exposed functions in the API
+  of a module may be named by the three-letter short tag, such as
+  \ccode{esl\_abc\_Digitize()}.
+
+The function's \ccode{\{funcname\}} can be anything. Some names
+are standard and indicate the use of a common {\bfseries interface}.
+This part of the name is usually in mixed-case capitalization.
+
+Only exposed (\ccode{extern}) functions must follow these rules. In
+general, private (\ccode{static}) functions can have any
+name. However, it's common in Easel for private functions to obey the
+same naming conventions except without the \ccode{esl\_} prefix.
+
+Sometimes essentially the same function must be provided for different
+data types. In these cases one-letter prefixes are used to indicate
+datatype:
+
+\begin{tabular}{ll}
+\ccode{C} & \ccode{char} type, or a standard C string \\
+\ccode{X} & \ccode{ESL\_DSQ} type, or an Easel digitized sequence\\
+\ccode{I} & \ccode{int} type \\
+\ccode{F} & \ccode{float} type \\
+\ccode{D} & \ccode{double} type \\
+\end{tabular}
+
+For example, \eslmod{vectorops} uses this convention heavily;
+\ccode{esl\_vec\_FNorm()} normalizes a vector of floats and
+\ccode{esl\_vec\_DNorm()} normalizes a vector of doubles.  A second
+example is in \eslmod{randomseq}, which provides routines for shuffling
+either text strings or digitized sequences, such as
+\ccode{esl\_rsq\_CShuffle()} and \ccode{esl\_rsq\_XShuffle()}.
+
+%%%%
+\subsubsection{conventions for argument names}
+%%%%
+
+When using pointers in C, it can be hard to tell which arguments are
+for input data (which are provided by the caller and will not be
+modified), output data (which are created and returned by the
+function), and modified data (which are both input and output).  
+
+For output consisting of pointers to nonscalar types such as objects
+or arrays, it also can be hard to distinguish when the caller is
+supposed to provide pre-allocated storage for the result, versus the
+storage being newly allocated by the function.\footnote{A common
+strategy in C library design is to strive for \emph{no} allocation in
+the library, so the caller is always responsible for explicit
+alloc/free pairs. I feel this puts a tedious burden of allocation code
+on an application.}
+
+When functions return more than one kind of result, it is convenient
+to make all the individual results optional, so the caller doesn't
+have to deal with managing storage for results it isn't interested in.
+In Easel, an optional result pointer is passed as \ccode{NULL} to
+indicate a possible result is not wanted (and is not allocated, if
+returning that result required new allocation).
+
+Easel uses a prefix convention on pointer argument names to indicate
+these situations:
+
+\begin{table}[h]
+\begin{center}
+{\small
+\begin{tabular}{cp{2.5in}p{3in}}
+ \textbf{prefix} &  \textbf{argument type}                  & \textbf{allocation (if any):}\\
+none           & If qualified as \ccode{const}, a pointer
+                 to input data, not modified by the call. 
+                 If unqualified, a pointer to data modified
+                 by the call (it's both input and output). & by caller\\ 
+\ccode{ret\_}  & Pointer to result.                        & in the function \\
+\ccode{opt\_}  & Pointer to optional result.               
+                 If non-\ccode{NULL}, result is obtained. & in the function \\
+\end{tabular}
+}
+\end{center}
+\end{table}
+
+
+
+%%%%
+\subsubsection{Return status}
+%%%%
+
+%%%%
+\subsubsection{conventions for exception handling}
+%%%%
+
+Easel functions {\bfseries should never exit except through an Easel
+  return code or through the Easel exception handler}. When you write
+Easel code you must {\bfseries always} deal with the case when the
+caller has registered a nonfatal exception handler, causing thrown
+exceptions to return a nonzero code rather than exiting. The Easel
+library is designed to be used in programs that can't just suddenly
+crash out with an error message (such as a graphical user interface
+environment), and programs that have specialized error handlers
+because they don't even have access to a \ccode{stderr} stream on a
+terminal (such as a UNIX daemon).
+
+This means that Easel functions must clean up their memory and set
+appropriate return status and return arguments, even in the case of
+thrown exceptions.
+
+
+%%%%
+\subsubsection{Easel's idiomatic function structure}
+%%%%
+
+To deal with the above strictures of return status, returned
+arguments, and exception handling and cleanup, most Easel functions
+follow an idiomatic structure.  The following snippet illustrates the
+key ideas:
+
+\begin{cchunk}
+1    int
+2    esl_example_Hello(char *opt_hello, char *opt_len)
+3    {
+4      char *msg = NULL;
+5      int   n;
+6      int   status;
+
+7      if ( (status = esl_strdup("hello world!\n", -1, &msg)) != eslOK) goto ERROR;
+8      n = strlen(msg);
+
+9      if (opt_hello) *opt_hello = msg; else free(msg);
+10     if (opt_len)   *opt_len   = n;
+11     return eslOK;
+
+12  ERROR:
+13     if (msg)        free(msg);
+14     if (opt_hello) *opt_hello = NULL;
+15     if (opt_n)     *opt_n     = 0;
+16     return status;
+17  }
+\end{cchunk}
+
+The stuff to notice here:
+
+\begin{itemize}
+\item[line 2:] The \ccode{opt\_hello} and \ccode{opt\_len} arguments
+  are optional. The caller might want only one of them (or neither,
+  but that would be weird). We're expecting calls like
+  \ccode{esl\_example\_Hello(\&hello, \&n)},
+  \ccode{esl\_example\_Hello(\&hello, NULL)}, or
+  \ccode{esl\_example\_Hello(NULL, \&n)}.
+
+\item[line 4:] Anything we allocate, we initialize its pointer to \ccode{NULL}. 
+  Now, if an exception occurs and we have to break out of the function early,
+  we can tell whether the allocation has already happened (and hence we need
+  to clean up its memory), if the pointer has become non-\ccode{NULL}.
+
+\item[line 6:] Most functions have an explicit \ccode{status} variable.
+  Standard error-handling macros (\ccode{ESL\_XEXCEPTION()} for example) expect it to be present,
+  as do standard allocation macros (\ccode{ESL\_ALLOC()} for example).
+  If we have to handle an exception, we're going to make sure the status
+  is set how we want it, then jump to a cleanup block.
+
+\item[line 7:] When any Easel function calls another Easel function,
+  it must check the return status for both normal errors and thrown
+  exceptions. If an exception has already been thrown by a callee,
+  usually the caller just relays the exception status up the call
+  stack. The idiom is to set the return \ccode{status} and go
+  immediately to the error cleanup block, \ccode{ERROR:}. We use a
+  \ccode{goto} for this, Dijkstra notwithstanding.
+
+\item[lines 9,10:] When we set optional arguments for a normal return,
+  we first check whether a valid return pointer was provided. If the
+  optional pointer is \ccode{NULL} the caller doesn't want the result,
+  and we clean up any memory we need to (line 9).
+
+\item[line 13:] In the error cleanup block, we first free any memory
+  that got allocated before the failure point. The idiom of
+  immediately initializing all allocated pointers to \ccode{NULL} 
+  enables us to tell which things have been allocated or not.
+
+\item[line 14:] When we return from a function with an unsuccessful 
+  status, we also make sure that any returned arguments are in 
+  a documented ground state, usually \ccode{NULL}'s and \ccode{0}'s.
+\end{itemize}
+
+%%%%
+\subsubsection{reentrancy: plan for threads}
+%%%%
+
+Easel code must expect to be called in multithreaded applications. All
+functions must be reentrant. There should be no use of global or
+static variables. 
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Standard Easel function interfaces}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Some function names are shared and have common behaviors across
+modules, like \ccode{\_Get*()} and \ccode{\_Set*()} functions.  These
+special names are called \esldef{common interfaces}.
+
+\begin{table}
+\begin{minipage}{\textwidth}
+\begin{tabular}{l>{\raggedright}p{3.0in}ll}
+\textbf{Function name}        & \textbf{Description}              & \textbf{Returns} &  \textbf{Example} \\ \hline
+ \multicolumn{4}{c}{\bfseries Creating and destroying new objects}\\
+\ccode{\_Create}
+  & Create a new object.
+  & \ccode{ESL\_}\itcode{FOO}\ccode{ *}
+  & \ccode{esl\_alphabet\_Create()} \\
+
+\ccode{\_Destroy}
+  & Free an object.
+  & \ccode{void}
+  & \ccode{esl\_alphabet\_Destroy()} \\
+
+\ccode{\_Clone}
+  & Duplicate an object, by creating and allocating a new one.
+  & \ccode{ESL\_}\itcode{FOO}\ccode{ *}
+  & \ccode{esl\_msa\_Clone()} \\
+
+\ccode{\_Shadow}
+  & Partially duplicate an object, creating a dependent shadow.
+  & \ccode{ESL\_}\itcode{FOO}\ccode{ *}
+  & \ccode{p7\_oprofile\_Shadow()} \\
+
+\ccode{\_Copy}
+  & Make a copy of an object, using an existing allocated object for space.
+  & [standard]
+  & \ccode{esl\_msa\_Copy()} \\
+
+ \multicolumn{4}{c}{\bfseries Opening and closing input sources}\\
+\ccode{\_Open} 
+  & Open an input source, associating it with an Easel object. 
+  & [standard]
+  & \ccode{esl\_buffer\_Open()} \\
+
+\ccode{\_Close}
+  & Close an Easel object corresponding to an input source.
+  & [standard]
+  & \ccode{esl\_buffer\_Close()} \\
+
+ \multicolumn{4}{c}{\bfseries Managing memory allocation}\\
+
+\ccode{\_Grow}
+  & Expand the allocation in an existing object, typically by doubling.
+  & [standard]
+  & \ccode{esl\_tree\_Grow()} \\
+
+\ccode{\_GrowTo}
+  & Reallocate object (if needed) for some new data size.
+  & [standard]
+  & \ccode{esl\_sq\_GrowTo()} \\
+
+\ccode{\_Reuse}
+  & Recycle an object, reinitializing it while reusing as much of its existing
+    allocation(s) as possible.
+  & [standard]
+  & \ccode{esl\_keyhash\_Reuse()} \\
+
+\ccode{size\_t \_Sizeof}
+  & Return the allocation size of an object
+  & size, in bytes
+  & - \\
+
+
+
+ \multicolumn{4}{c}{\bfseries Accessing information in objects}\\
+
+\ccode{\_Is}
+  & Return \ccode{TRUE} or \ccode{FALSE} for some query of the
+    internal state of an object.
+  & \ccode{TRUE | FALSE}
+  & \ccode{esl\_opt\_IsOn()} \\
+
+\ccode{\_Get}
+  & Return a value for some query of the internal state of an object.
+  & value
+  & \ccode{esl\_buffer\_Get()} \\
+
+\ccode{\_Read}
+  & Get a value in the object and return it in a location provided (and possibly allocated) by the caller.
+  & [standard]
+  & \ccode{esl\_buffer\_Read()} \\
+
+\ccode{\_Fetch}
+  & Get a value in the object and return it in newly allocated space;
+    the caller becomes responsible for the newly allocated space.
+  & [standard]
+  & \ccode{esl\_buffer\_FetchLine()} \\  
+
+\ccode{\_Set}
+  & Set a value in the object.
+  & [standard]
+  & \ccode{esl\_buffer\_Set()} \\
+
+\ccode{\_Format}
+  & Set a string in the object using \ccode{sprintf()}-like
+    semantics.
+  & [standard]
+  & \ccode{esl\_msa\_FormatName()} \\
+
+
+
+ \multicolumn{4}{c}{\bfseries Debugging}\\
+\ccode{\_Validate}
+  & Run validation tests on the internal state of an object.
+  & [standard]
+  & \ccode{esl\_tree\_Validate()} \\
+
+\ccode{\_Compare}
+  & Compare two objects to each other for equality (or close enough).
+  & [standard]
+  & \ccode{esl\_msa\_Compare()} \\
+
+\ccode{\_Dump}
+  & Dump a verbose, possibly ugly, but developer-readable output 
+    of the internal state of an object.
+  & [standard]
+  & \ccode{esl\_keyhash\_Dump()} \\
+
+\ccode{\_TestSample}
+  & Sample a mostly syntactically correct object for test purposes
+  & [standard]
+  & \ccode{p7\_tophits\_TestSample()} \\
+
+
+
+ \multicolumn{4}{c}{\bfseries Miscellaneous}\\
+
+\ccode{\_Write}
+  & Write something from an object to an output stream.
+  & [standard]
+  & \ccode{esl\_msa\_Write()} \\
+
+\ccode{\_Encode}
+  & Convert a user-readable string (such as ``fasta'') to an
+    internal Easel code (such as \ccode{eslSQFILE\_FASTA}).
+  & [standard]
+  & \ccode{esl\_msa\_EncodeFormat()} \\
+
+\ccode{\_Decode}
+  & Convert an internal Easel code (such as \ccode{eslSQFILE\_FASTA}) 
+    to a user-readable string (such as ``fasta'').
+  & [standard]
+  & \ccode{esl\_msa\_DecodeFormat()} \\
+\end{tabular}
+\end{minipage}
+\caption{\textbf{Standard function ``interfaces''.} }
+\end{table}
+
+
+%%%%%%%%%%%%%%%%
+\subsection{Creating and destroying new objects}
+%%%%%%%%%%%%%%%%
+
+Most Easel objects are allocated and free'd by
+\ccode{\_Create()/\_Destroy()} interface. Creating an object often
+just means allocating space for it, so that some other routine can
+fill data into it. It does not necessarily mean that the object
+contains valid data.
+
+\begin{sreapi}
+\hypertarget{ifc:Create} 
+{\item[\_Create(n)]}
+
+A \ccode{\_Create()} interface takes any necessary initialization or
+size information as arguments (there often aren't any), and it returns a
+pointer to the newly allocated object. If an (optional) number of
+elements \ccode{n} is provided, this specifies the number of elements
+that the object is going to contain (for a fixed-size object) or the
+initial allocation size (for a resizable object). In the event of any
+failure, the a \ccode{\_Create} procedure throws \ccode{NULL}.
+
+The internals of some resizeable objects have an \ccode{nredline}
+parameter that controls an additional memory management rule. These
+objects are allowed to grow to arbitrary size (either by doubling with
+\ccode{\_Grow} or by a specific allocation with \ccode{\_Reinit} or
+\ccode{\_GrowTo}) -- but when the object is reused for new data, they
+can be reallocated \emph{downward}, back to the redline
+limit. Specifically, if the allocation size exceeds \ccode{nredline},
+a \ccode{\_Reuse()} or \ccode{\_Reinit()} call will shrink the
+allocation back to the \ccode{nredline} limit.  The idea is for a
+frequently-reused object to be able to briefly handle a rare
+exceptionally large problem, while not permanently committing the
+resizeable object to an extreme allocation size.
+
+At least one module (\ccode{esl\_tree}) allows for creating either a
+fixed-size or a resizeable object; in this case, there is a
+\ccode{\_CreateGrowable()} call for the resizeable version.
+
+\hypertarget{ifc:Destroy} 
+{\item[\_Destroy(obj)]}
+A \ccode{\_Destroy()} interface takes an object pointer as an
+argument, and frees all the memory associated with it. A
+\ccode{\_Destroy} procedure returns \ccode{void} (there is no useful
+information to return about a failure; the only calls are to 
+\ccode{free()} and if that fails, we're in trouble).
+\end{sreapi}
+
+For example:
+\begin{cchunk}
+   ESL_SQ *sq;
+   sq = esl_sq_Create();
+   esl_sq_Destroy(sq);
+\end{cchunk}
+
+%%%%%%%%%%%%%%%%
+  \subsubsection{opening and closing input streams}
+%%%%%%%%%%%%%%%%
+
+Some objects (such as \ccode{ESL\_SQFILE} and \ccode{ESL\_MSAFILE})
+correspond to open input streams -- usually an open file, but possibly
+reading from a pipe. Such objects are \ccode{\_Open()}'ed and
+\ccode{\_Close()'d}, not created and destroyed.
+
+Input stream objects have to be capable of handling normal failures,
+because of bad user input. Input stream objects contain an
+\ccode{errbuf[eslERRBUFSIZE]} field to capture informative parse error
+messages. 
+
+\begin{sreapi}
+\hypertarget{ifc:Open} 
+{\item[\_Open(file, formatcode, \&ret\_obj)]}
+
+Opens the \ccode{file}, which is in a format indicated by
+\ccode{formatcode} for reading; return the open input object in
+\ccode{ret\_obj}. A \ccode{formatcode} of 0 typically means unknown,
+in which case the \ccode{\_Open()} procedure attempts to autodetect
+the format. If the \ccode{file} is \ccode{"-"}, the object is
+configured to read from the \ccode{stdin} stream instead of opening a
+file. If the \ccode{file} ends in a \ccode{.gz} suffix, the object is
+configured to read from a pipe from \ccode{gzip -dc}. Returns
+\ccode{eslENOTFOUND} if \ccode{file} cannot be opened, and
+\ccode{eslEFORMAT} if autodetection is attempted but the format cannot
+be determined. 
+
+Newer \ccode{\_Open} procedures return a standard Easel error code,
+and on a normal error they also return the allocated object, using the
+object's error message buffer to report the reason for the failed
+open.
+
+\hypertarget{ifc:Close} 
+{\item[\_Close(obj)]}
+
+Closes the input stream \ccode{obj}. Should return a standard Easel
+error code. There are cases where an error in an input stream is only
+detected at closing time (inputs using \ccode{popen()}/\ccode{pclose()}
+  are an example).
+\end{sreapi}
+
+For example:
+\begin{cchunk}
+    char        *seqfile = "foo.fa";
+    ESL_SQFILE  *sqfp;
+
+    esl_sqio_Open(seqfile, eslSQFILE_FASTA, NULL, &sqfp);
+    esl_sqio_Close(sqfp);
+\end{cchunk}
+
+
+%%%%
+  \subsubsection{making copies of objects}
+%%%%
+
+\begin{sreapi}
+
+\hypertarget{ifc:Clone}
+{\item[\_Clone(obj)]}
+
+Creates and returns a pointer to a duplicate of \ccode{obj}.
+Equivalent to (and is a shortcut for, and is generally implemented as)
+\ccode{dest = \_Create(); \_Copy(src, dest)}. Caller is responsible
+for free'ing the duplicate object, just as if it had been
+\ccode{\_Create}'d. Throws \ccode{NULL} if allocation fails.
+
+
+\hypertarget{ifc:Copy}
+{\item[\_Copy(src, dest)]}
+
+Copies \ccode{src} object into \ccode{dest}, where the caller has
+already created an appropriately allocated and empty \ccode{dest}
+object (or buffer, or whatever). Returns \ccode{eslOK} on success;
+throws \ccode{eslEINCOMPAT} if the objects are not compatible (for
+example, two matrices that are not the same size).
+
+Note that the order of the arguments is always \ccode{src}
+$\rightarrow$ \ccode{dest} (unlike the C library's \ccode{strcpy()}
+convention, which is the opposite order).
+
+
+\hypertarget{ifc:Shadow}
+{\item[\_Shadow(obj)]}
+
+Creates and returns a pointer to a partial, dependent copy of
+\ccode{obj}. Shadow creation arises in multithreading, when threads
+can share some but not all internal object data. A shadow keeps
+constant data as pointers to the original object.  The object needs to
+know whether it is a shadow or not, so that <_Destroy()> works
+properly on both the original and its shadows.
+
+\end{sreapi}
+
+%%%%%%%%%%%%%%%%
+  \subsection{Managing memory allocation}
+%%%%%%%%%%%%%%%%
+
+%%%%
+  \subsubsection{resizable objects}
+%%%%
+
+Some objects need to be reallocated and expanded during their use.
+These objects are called \esldef{resizable}.
+
+In some cases, the whole purpose of the object is to have elements
+added to it, such as \ccode{ESL\_STACK} (pushdown stacks) and
+\ccode{ESL\_HISTOGRAM} (histograms). In these cases, the normal
+\ccode{\_Create()} interface performs an initial allocation, and the
+object keeps track of both its current contents size (often
+\ccode{obj->N}) and the current allocation size (often
+\ccode{obj->nalloc}). 
+
+In at least one case, an object might be either growable or not,
+depending on how it's being used. This happens, for instance, when we
+have routines for parsing input data to create a new object, and we
+need to dynamically reallocate as we go because the input doesn't tell
+us the total size when we start. For instance, with \ccode{ESL\_TREE}
+(phylogenetic trees), sometimes we know exactly the size of the tree
+we need to create (because we're making a tree ourselves), and
+sometimes we need to create a resizable object (because we're reading a
+tree from a file). In these cases, the normal \ccode{\_Create()}
+interface creates a static, nongrowable object of known size, and a
+\ccode{\_CreateGrowable()} interface specifies an initial allocation
+for a resizable object.
+
+Easel usually handles its own reallocation of resizable objects. For
+instance, many resizable objects have an interface called something
+like \ccode{\_Add()} or \ccode{\_Push()} for storing the next element
+in the object, and this interface will deal with increasing allocation
+size as needed.  In a few cases, a public \ccode{\_Grow()} interface
+is provided for reallocating an object to a larger size, in cases
+where a caller might need to grow the object itself. \ccode{\_Grow()}
+only increases an allocation when it is necessary, and it makes that
+check immediately and efficiently, so that a caller can call
+\ccode{\_Grow()} before every attempt to add a new element without
+worrying about efficiency. An example of where a public
+\ccode{\_Grow()} interface is generally provided is when an object
+might be input from different file formats, and an application may
+need to create its own parser. Although creating an input parser
+requires familiarity with the Easel object's internal data structures,
+at least the \ccode{\_Grow()} interface frees the caller from having
+to understand its memory management.
+
+Resizable objects necessarily waste some memory, because they are
+overallocated in order to reduce the number of calls to
+\ccode{malloc()}.  The wastage is bounded (to a maximum of two-fold,
+for the default doubling strategies, once an object has exceeded its
+initial allocation size) but nonetheless may not always be tolerable.
+
+In summary: 
+
+\begin{sreapi}
+\hypertarget{ifc:Grow}
+{\item[\_Grow(obj)]}
+
+A \ccode{\_Grow()} function checks to see if \ccode{obj} can hold
+another element. If not, it increases the allocation, according to
+internally stored rules on reallocation strategy (usually, by
+doubling). 
+\end{sreapi}
+
+\begin{sreapi}
+\hypertarget{ifc:GrowTo}
+{\item[\_GrowTo(obj, n)]}
+
+A \ccode{\_GrowTo()} function checks to see \ccode{obj} is large
+enough to hold \ccode{n} elements. If not, it reallocates to at least
+that size.
+\end{sreapi}
+
+%%%%
+  \subsubsection{reusable objects}
+%%%%
+
+Memory allocation is computationally expensive. An application needs
+to minimize \ccode{malloc()/free()} calls in performance-critical
+regions. In loops where one \ccode{\_Destroy()}'s an old object only
+to \ccode{\_Create()} the next one, such as a sequential input loop
+that processes objects from a file one at a time, one generally wants
+to \ccode{\_Reuse()} the same object instead:
+
+\begin{sreapi}
+\hypertarget{ifc:Reuse}
+{\item[\_Reuse(obj)]}
+
+A \ccode{\_Reuse()} interface takes an existing object and
+reinitializes it as a new object, while reusing as much memory as
+possible. Any state information that was specific to the problem the
+object was just used for is reinitialized. Any allocations and state
+information specific to those allocations are preserved (to the extent
+possible).  A \ccode{\_Reuse()} call should exactly replace (and be
+equivalent to) a \ccode{\_Destroy()/\_Create()} pair. If the object is
+growable, it typically would keep the last allocation size, and it
+must keep at least the same allocation size that a default
+\ccode{\_Create()} call would give.
+
+If the object is arbitrarily resizeable and it has a \ccode{nredline}
+control on its memory, the allocation is shrunk back to
+\ccode{nredline} (which must be at least the default initial
+allocation).
+
+\end{sreapi}
+
+For example:
+
+\begin{cchunk}
+   ESL_SQFILE *sqfp;
+   ESL_SQ     *sq;
+
+   esl_sqfile_Open(\"foo.fa\", eslSQFILE_FASTA, NULL, &sqfp);
+   sq = esl_sq_Create();
+   while (esl_sqio_Read(sqfp, sq) == eslOK)
+    {
+       /* do stuff with this sq */
+       esl_sq_Reuse(sq);
+    }
+   esl_sq_Destroy(sq);
+\end{cchunk}
+
+%%%%
+  \subsubsection{other}
+%%%%
+\begin{sreapi}
+\hypertarget{ifc:Sizeof}
+{\item[size\_t \_Sizeof(obj)]}
+
+Returns the total size of an object and its allocations, in bytes.
+\end{sreapi}
+
+
+%%%%%%%%%%%%%%%%
+ \subsection{Accessing information in objects}
+%%%%%%%%%%%%%%%%
+
+\begin{sreapi}
+
+\hypertarget{ifc:Is}
+{\item[\_Is*(obj)]}
+
+Performs some specific test of the internal state of an
+object, and returns \ccode{TRUE} or \ccode{FALSE}.
+
+\hypertarget{ifc:Get}
+{\item[value = \_Get*(obj, ...)]}
+
+Retrieves some specified data from \ccode{obj} and returns it
+directly. Because no error code can be returned, a \ccode{\_Get}
+call must be a simple access call within the object, guaranteed to
+succeed. \ccode{\_Get()} methods may often be implemented as macros.
+(\ccode{\_Read} or \ccode{\_Fetch} interfaces are for more complex
+access methods that might fail, and require an error code return.)
+
+\hypertarget{ifc:Read}
+{\item[\_Read*(obj, ..., \&ret\_value)]}
+
+Retrieves some specified data from \ccode{obj} and puts it in
+\ccode{ret\_value}, where caller has provided (and already allocated,
+if needed) the space for \ccode{ret\_value}.
+
+\hypertarget{ifc:Fetch}
+{\item[\_Fetch*(obj, ..., \&ret\_value)]}
+
+Retrieves some specified data from \ccode{obj} and puts it in
+\ccode{ret\_value}, where space for the returned value is allocated by
+the function. Caller becomes responsible for free'ing that space.
+
+\hypertarget{ifc:Set}
+{\item[\_Set*(obj, value)]}
+
+Sets some value(s) in \ccode{obj} to \ccode{value}. If a value was
+already set, it is replaced with the new one. If any memory needs to
+be reallocated or free'd, this is done. \ccode{\_Set} functions have
+some appropriate longer name, like \ccode{\_SetZero()} (set something
+in an object to zero(s)), or \ccode{esl\_dmatrix\_SetIdentity()} (set
+a dmatrix to an identity matrix).
+
+\hypertarget{ifc:Format}
+{\item[\_Format*(obj, fmtstring, ...)]}
+
+Like \ccode{\_Set}, but with \ccode{sprintf()}-style semantics.  Sets
+some string value in \ccode{obj} according to the
+\ccode{sprintf()}-style \ccode{fmtstring} and any subsequence
+\ccode{sprintf()}-style arguments. If a value was already set, it is
+replaced with the new one. If any memory needs to be reallocated or
+free'd, this is done.  \ccode{\_Format} functions have some
+appropriate longer name, like
+\ccode{esl\_msa\_FormatSeqDescription()}.
+
+Because \ccode{fmtstring} is a \ccode{printf()}-style format string,
+it must not contain '\%' characters. \ccode{\_Format*} functions
+should only be used with format strings set by a program; they should
+not be used to copy user input that might contain '\%' characters.
+\end{sreapi}
+
+
+%%%%%%%%%%%%%%%%
+\subsection{Debugging, testing, development}
+%%%%%%%%%%%%%%%%
+
+\begin{sreapi}
+\hypertarget{ifc:Validate}
+{\item[\_Validate*(obj, errbuf...)]}
+
+Checks that the internals of \ccode{obj} are all right. Returns
+\ccode{eslOK} if they are, and returns \ccode{eslFAIL} if they
+aren't. Additionally, if the caller provides a non-\ccode{NULL}
+message buffer \ccode{errbuf}, on failure, an informative message
+describing the reason for the failure is formatted and left in
+\ccode{errbuf}. If the caller provides this message buffer, it must
+allocate it for at least \ccode{eslERRBUFSIZE} characters.
+
+Failures in \ccode{\_Validate()} routines are handled by
+\ccode{ESL\_FAIL()} (or \ccode{ESL\_XFAIL()}, if the validation
+routine needs to do any memory cleanup).  Validation failures are
+classified as normal (returned) errors so that \ccode{\_Validate()}
+routines can be used in production code -- for example, to validate
+user input.
+
+At the same time, because the \ccode{ESL\_FAIL()} and
+\ccode{ESL\_XFAIL()} macros call the stub \ccode{esl\_fail()}, you can
+set a debugging breakpoint on \ccode{esl\_fail} to get a
+\ccode{\_Validate()} routine fail immediately at whatever test
+failed. 
+
+The \ccode{errbuf} message therefore can be coarse-grained
+(``validation of object X failed'') or fine-grained (``in object X,
+data element Y fails test Z''). A validation of user input (which we
+expect to fail often) should be fine-grained, to return maximally
+useful information about what the user did wrong. A validation of
+internal data can be very coarse-grained, knowing that a developer can
+simply set a breakpoint in \ccode{esl\_fail()} to get at exactly where
+a validation failed.
+
+A \ccode{\_Validate()} function is not intended to test all possible
+invalid states of an object, even if that were feasible. Rather, the
+goal is to automatically catch future problems we've already seen in
+past debugging and testing. So a \ccode{\_Validate()} function is a
+place to systematically organize a set of checks that essentially
+amount to regression tests against past debugging/testing efforts.
+
+\hypertarget{ifc:Compare}
+{\item[\_Compare*(obj1, obj2...)]}
+
+Compares \ccode{obj1} to \ccode{obj2}. Returns \ccode{eslOK} if the
+contents are judged to be identical, and \ccode{eslFAIL} if they
+differ. When the comparison involves floating point scalar
+comparisons, a fractional tolerance argument \ccode{tol} is also
+passed. 
+
+Failures in \ccode{\_Compare()} functions are handled by
+\ccode{ESL\_FAIL()} (or \ccode{ESL\_XFAIL()}, if the validation
+routine needs to do any memory cleanup), because they may be used in a
+context where a ``failure'' is expected; for example, when using
+\ccode{esl\_dmatrix\_Compare()} as a test for successful convergence
+of a matrix algebra routine. 
+
+However, the main use of \ccode{\_Compare()} functions is in unit
+tests. During debugging and development, we want to see exactly where
+a comparison failed, and we don't want to have to write a bunch
+laboriously informative error messages to get that information.
+Instead we can exploit the fact that the \ccode{ESL\_FAIL()} and
+\ccode{ESL\_XFAIL()} macros call the stub \ccode{esl\_fail()}; you can
+set a debugging breakpoint in \ccode{esl\_fail()} to stop execution in
+the failure macros.
+
+\hypertarget{ifc:Dump}
+{\item[\_Dump*(FILE *fp, obj...)]}
+
+Prints the internals of an object in human-readable, easily parsable
+tabular ASCII form. Useful during debugging and development to view
+the entire object at a glance. Returns \ccode{eslOK} on success.
+Unlike a more robust \ccode{\_Write()} call, \ccode{\_Dump()} call may
+assume that all its writes will succeed, and does not need to check
+return status of \ccode{fprintf()} or other system calls, because it
+is not intended for production use.
+
+
+\hypertarget{ifc:TestSample}
+{\item[\_TestSample(ESL\_RANDOMNESS *rng, ..., OBJTYPE **ret\_obj)]}
+
+Create an object filled with randomly sampled values for all data
+elements. The aim is to exercise valid values and ranges, and
+presence/absence of optional information and allocations, but not to
+obsess about internal semantic consistency. For example, we use
+\ccode{\_TestSample()} calls in testing MPI send/receive
+communications routines, where we don't care so much about the meaning
+of the object's contents, as we do about faithful transmission of any
+object with valid contents. 
+
+A \ccode{\_TestSample()} call produces an object that is sufficiently
+valid for other debugging tools, including \ccode{\_Dump()},
+\ccode{\_Compare()}, and \ccode{\_Validate()}. However, because
+elements may be randomly sampled independently, in ways that don't
+respect interdependencies, the object may contain data inconsistencies
+that make the object invalid for other purposes.  Contrast
+\ccode{\_Sample()} routines, which generate fully valid objects for
+all purposes, but which may not exercise the object's fields as
+thoroughly.
+
+\end{sreapi}
+
+%%%%%%%%%%%%%%%%
+\subsection{Miscellaneous other interfaces}
+%%%%%%%%%%%%%%%%
+
+\begin{sreapi}
+\hypertarget{ifc:Write}
+{\item[\_Write(fp, obj)]}
+Writes something from an object to an output stream \ccode{fp}. Used
+for exporting and saving files in official data exchange formats.
+\ccode{\_Write()} functions must be robust to system write errors,
+such as filling or unexpectedly disconnecting a disk. They must check
+return status of all system calls, and throw an \ccode{eslEWRITE}
+error on any failures.
+
+
+
+
+\hypertarget{ifc:Encode}
+{\item[code = \_Encode*(char *s)]}
+
+Given a string \ccode{<s>}, match it case-insensitively against a list
+of possible string values and convert this visible representation to
+its internal \ccode{\#define} or \ccode{enum} code. For example,
+\ccode{esl\_sqio\_EncodeFormat("fasta")} returns
+\ccode{eslSQFILE\_FASTA}. If the string is not recognized, returns a
+code signifying ``unknown''. This needs to be a normal return (not a
+thrown error) because the string might come from user input, and might
+be invalid.
+
+
+\hypertarget{ifc:Decode}
+{\item[char *s = \_Decode*(int code)]}
+
+Given an internal code (an \ccode{enum} or \ccode{\#define} constant),
+return a pointer to an informative string value, for diagnostics and
+other output. The string is static. If the code is not recognized,
+throws an \ccode{eslEINVAL} exception and returns \ccode{NULL}.
+
+\end{sreapi}
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Writing unit tests}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+An Easel test driver runs a set of individual unit tests one after
+another.  Sometimes there is one unit test assigned to each exposed
+function in the API. Sometimes, it makes sense to test several exposed
+functions in a single unit test function.
+
+A unit test for \ccode{esl\_foo\_Baz()} is named \ccode{static void
+utest\_Baz()}. 
+
+Upon success, unit tests return void.
+
+Upon any failure, a unit test calls \ccode{esl\_fatal()} with an error
+message, and terminates. It should not use any other error-catching
+mechanism. It aids debugging if the test program terminates
+immediately, using a single function that we can easily breakpoint at
+(\ccode{break esl\_fatal} in GDB). It must not use \ccode{abort()},
+for example, because this will screw up the output of scripts running
+automated tests in \ccode{make check} and \ccode{make dcheck}, such as
+\emcode{sqc}. \emcode{sqc} traps \ccode{stderr} from
+\ccode{esl\_fatal()} correctly. A unit test must not use
+\ccode{exit(1)} either, because that leaves no error message, so
+someone running a test program on the command line can't easily tell
+that it failed.
+
+Unit tests should attempt to deliberately generate exceptions and
+failures, and test that the appropriate error code is returned.  Unit
+tests must temporarily register a nonfatal error handler when testing
+exceptions. 
+
+Unit tests should test all possible combinations of augmentations that
+may affect a function.
+
+Every function, procedure, and macro in the exposed API shall be
+tested by one or more unit tests. The unit tests aim for complete code
+coverage. This is measured by code coverage tests using \ccode{gcov}.
+
+Write unit tests. Remember that the purpose isn't so much to test
+whether your code works; the purpose is to test whether your code
+\emph{still} works, months or years from now when someone who didn't
+take the time to understand it fully has to make modifications. If
+that someone breaks your code and the unit tests fail, they know they
+need to do more. If someone breaks your code and the unit tests don't
+help them notice, it's your fault as much as theirs.
+
+
+%%%%%%%%%%%%%%%%
+\subsection{Using statistical sampling or randomization in unit tests}
+%%%%%%%%%%%%%%%%
+% First instituted in stats: SRE, Sun May 27 09:31:12 2007
+
+Some routines are tested on statistical samples. For example, we test
+a maximum likelihood parameter fitting routine by fitting to samples
+generated with known parameters, and testing that the estimated
+parameters are close enough to the true parameters.  The trouble is
+defining ``close enough''. There is always a finite probability that
+such a test will fail. We don't want tests to fail due to expected
+statistical deviations, but neither do we want to set p-values so
+loose that a flaw escapes notice.
+
+Easel tests drivers that use statistical sampling assign a
+\emph{fixed} random number seed by default, to make the statistical
+sample invariant across runs. This makes statistical tests more like
+regression tests. Manually, we use the test driver to determine that
+the test passes; in subsequent automatic use, we just check that we
+get the same answer.
+
+To facilitate the manual testing phase, these test drivers often take
+optional arguments. A \ccode{-v} option toggles verbose mode, so unit
+tests display internal information. A \ccode{-r} option toggles
+``random'' mode, seeding the random number generator with the current
+time. A \ccode{-s <n>} option sets the random number seed to
+\ccode{<n>}.
+
+%%%%%%%%%%%%%%%%
+\subsection{Using temporary files in unit tests}
+%%%%%%%%%%%%%%%%
+
+If a unit test or testdriver needs to create a named temporary file
+(to test i/o), the tmpfile is created with
+\ccode{esl\_tmpfile\_named()}:
+
+\begin{cchunk}
+   char  tmpfile[16] = "esltmpXXXXXX";
+   FILE *fp;
+
+   if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal("failed to create tmpfile");
+   write_stuff_to(fp);
+   fclose(fp);
+
+   if ((fp = fopen(tmpfile)) == NULL) esl_fatal("failed to open tmpfile");
+   read_stuff_from(fp);
+   fclose(fp);
+
+   remove(tmpfile);
+\end{cchunk}
+
+Thus tmp files created by Easel's test suite have a common naming
+convention, and are put in the current working directory. On a test
+failure, the tmp file remains, to assist debugging; on a test success,
+the tmp file is removed. The \ccode{make clean} targets in Makefiles
+are looking to remove files matching the target \ccode{esltmp??????}.
+
+It is important to declare it as \ccode{char tmpfile[16]} rather than
+\ccode{char *tmpfile}. Compilers are allowed to treat the string in a
+\ccode{char *foo = "bar"} initialization as a read-only constant.
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Easel development environment; using development tools}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Easel is developed primarily on GNU/Linux and Mac OS/X systems with
+the following tools installed:
+
+\begin{tabular}{ll}
+{\bfseries Tool}  & {\bfseries Use} \\
+\emcode{emacs}    &  editor   \\
+\emcode{gcc}      &  GNU compiler \\
+\emcode{icc}      &  Intel compiler \\
+\emcode{gdb}      &  debugger\\
+\emcode{autoconf} &  platform-independent configuration manager, Makefile generator\\
+\emcode{make}     &  build/compilation management\\
+\emcode{valgrind} &  memory bounds and leak checking\\
+\emcode{gcov}     &  code coverage analysis\\
+\emcode{gprof}    &  profiling and optimization (GNU)\\
+\emcode{shark}    &  profiling and optimization (Mac OS/X)\\
+\LaTeX            &  documentation typesetting\\
+Subversion        &  revision control\\
+Bourne shell (\ccode{/bin/sh}) & scripting\\
+Perl              &  scripting\\
+\end{tabular}
+
+Most of these are standard and well-known. The following sections
+describe some Easel work patterns with some of the less commonly used
+tools.
+
+%%%%%%%%%%%%%%%%
+\subsection{Using valgrind to find memory leaks and more}
+%%%%%%%%%%%%%%%%
+
+We use \emcode{valgrind} to check for memory leaks and other problems,
+especially on the unit tests:
+
+\begin{cchunk}
+  % valgrind ./esl_buffer_utest
+\end{cchunk}
+
+The \ccode{valgrind\_report.pl} script in \ccode{testsuite} automates
+valgrind testing for all Easel modules. To run it:
+
+\begin{cchunk} 
+   % cd testsuite
+   % ./valgrind_report.pl > valgrind.report
+\end{cchunk}
+
+
+
+
+%%%%%%%%%%%%%%%%
+\subsection{Using gcov to measure unit test code coverage}
+%%%%%%%%%%%%%%%%
+
+We use \emcode{gcov} to measure code coverage of our unit
+testing. \emcode{gcov} works best with unoptimized code.  The code
+must be compiled with \emcode{gcc} and it needs to be compiled with
+\ccode{-fprofile-arcs -ftest-coverage}. The configure script knows
+about this: give it the \ccode{--enable-gcov} option. An example:
+
+\begin{cchunk}
+  % make distclean
+  % ./configure --enable-gcov
+  % make esl_buffer_utest
+  % ./esl_buffer_utest
+  % gcov esl_buffer.c
+  File 'esl_buffer.c'
+  Lines executed:73.85% of 589
+  esl_buffer.c:creating 'esl_buffer.c.gcov'
+  % emacs esl_buffer.c.gcov
+\end{cchunk}
+
+The file \ccode{esl\_buffer.c.gcov} contains an annotated source listing
+of the \ccode{.c} file, showing which lines were and weren't covered
+by the test suite.
+
+The \ccode{coverage\_report.pl} script in \ccode{testsuite} automates coverage
+testing for all Easel modules. To run it:
+
+\begin{cchunk} 
+   % cd testsuite
+   % coverage_report.pl > coverage.report
+\end{cchunk}
+
+
+%%%%%%%%%%%%%%%%
+\subsection{Using gprof for performance profiling}
+%%%%%%%%%%%%%%%%
+
+On a Linux machine (gprof does not work on Mac OS/X, apparently):
+
+\begin{cchunk}
+   % make distclean
+   % ./configure --enable-gprof
+   % make
+\end{cchunk}
+
+Run any program you want to profile, then:
+
+\begin{cchunk}
+   % gprof -l <progname>
+\end{cchunk}
+
+%%%%%%%%%%%%%%%%
+\subsection{Using the clang static analyzer, checker}
+%%%%%%%%%%%%%%%%
+
+The clang static analyzer for Mac OS/X is at
+\url{http://clang-analyzer.llvm.org/}. I install it by moving its
+entire distro directory (checker-276, for example) to
+\ccode{/usr/local}, and symlinking to \ccode{checker}.
+My \ccode{bashrc} has:
+
+\begin{cchunk}
+test -d /usr/local/checker         && PATH=${PATH}:/usr/local/checker
+\end{cchunk}
+
+and that puts \prog{scan-build} in my \ccode{PATH}.
+
+To use it:
+
+\begin{cchunk}
+   % scan-build ./configure --enable-debugging
+   % scan-build make
+\end{cchunk}
+
+It'll give you a scan-view command line, including the name of its
+output html file, so you can then visualize and interact with the
+results:
+
+\begin{cchunk}
+   % scan-view /var/folders/blah/baz/foo
+\end{cchunk}
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Documentation}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%
+\subsection{Structured function headers read by autodoc}
+%%%%%%%%%%%%%%%%
+The documentation for Easel's functions is embedded in the source code
+itself, rather than being in separate files. A homegrown documentation
+extraction tool (\prog{autodoc}) is used to process the source files
+and extract and format the documentation.
+
+An important part of the documentation is the documentation for
+individual functions.  Each Easel function is preceded by
+documentation in the form of a structured comment header that is
+parsed by \prog{autodoc}. For example:
+
+\input{cexcerpts/function_comment_example}
+
+\prog{autodoc} can do one of three things with the text that follows
+these tags: it can ignore it, use it verbatim, or process
+it. \esldef{Ignored} text is documentation that resides only in the
+source code, like the incept date and the notebook
+crossreferences.\footnote{Eventually, we will probably process the
+\ccode{Args:} part of the header, but for now it is ignored.}
+\esldef{Verbatim} text is picked up by \prog{autodoc} and formatted as
+\verb+\ccode{}+ in the \LaTeX\ documentation. \esldef{Processed} text
+is interpeted as \LaTeX\ code, with a special addition that angle
+brackets are used to enclose C code words, such as the argument names.
+\prog{autodoc} recognizes the angle brackets and formats the enclosed
+text as \verb+\ccode{}+.  Unprotected underscore characters are
+allowed inside these angle brackets; \prog{autodoc} protects them
+appropriately when it generates the \LaTeX. Citations, such as
+\verb+\citep{MolerVanLoan03}+, are formatted for the \LaTeX\
+\verb+natbib+ package.
+
+The various fields are:
+
+\begin{sreitems}{\textbf{Function:}}
+\item[\textbf{Function:}] 
+  The name of the function.  \prog{autodoc} uses this line to
+  determine that it's supposed to generate a documentation entry here.
+  \prog{autodoc} checks that it matches the name of the immediately
+  following C function. One line; verbatim; required.
+
+\item[\textbf{Synopsis:}] 
+  A short one-line summary of the function. \ccode{autodoc -t} uses this
+  line to generate the API summary tables that appear in this guide.
+  One line; processed; not required for \prog{autodoc} itself, but
+  required by \ccode{autodoc -t}. 
+
+\item[\textbf{Incept:}] Records the author/date of first
+  draft. \prog{autodoc} doesn't use this line.  Used to help track
+  development history. The definition of ``incept'' is often fuzzy,
+  because Easel is a palimpsest of rewritten code. This line often
+  also includes a location, such as \ccode{[AA 673 over Greenland]},
+  for no reason other than to remember how many weird places I've
+  managed to get work done in..
+
+\item[\textbf{Purpose:}] The main body. \prog{autodoc} processes this
+  to produce the \TeX documentation. It explains the purpose of the
+  function, then precisely defines what the caller must provide in
+  each input argument, and what the caller will get back in each
+  output argument. It should be written and referenced as if it will
+  appear in the user guide (because it will). Multiline; processed by
+  \prog{autodoc}; required.
+
+\item[\textbf{Args:}] A tabular-ish summary of each argument. Not
+  picked up by \prog{autodoc}, at least not at present. The
+  \ccode{Purpose:} section instead documents each option in free text.
+  Multiline and tabular-ish; ignored by \prog{autodoc}; optional.
+
+\item[\textbf{Returns:}] The possible return values from the function,
+  starting with what happens on successful completion (usually, return
+  of an \ccode{eslOK} code). Also indicates codes for unsuccessful
+  calls that are normal (returned) errors. If there are output
+  argument pointers, documents what they will contain upon successful
+  and unsuccessful return, and whether any of the output involved
+  allocating memory that the caller must free.
+
+\item[\textbf{Throws:}] The possible exceptions thrown by the
+  function, listing what a program that's handling its own exceptions
+  will have to deal with. (Programs should never assume that this list
+  is complete.) Programs that are letting Easel handle exceptions do
+  not have to worry about any of the thrown codes.  The state of
+  output argument pointers is documented -- generally, all output is
+  set to \ccode{NULL} or \ccode{0} values when exceptions happen.
+  After a thrown exception, there is never any memory allocation in
+  output pointers that the caller must free.
+
+\item[\textbf{Xref:}] Crossreferences to notebooks (paper or
+  electronic) and to literature, to help track the history of the
+  function's development and rationale.\footnote{A typical reference
+  to one of SRE's notebooks is \ccode{STL10/143}, indicating St. Louis
+  notebook 10, page 143.} Personal developer notebooks are of course
+  not immediately available to all developers (especially bound paper
+  ones) but still, these crossreferences can be traced if necessary.
+\end{sreitems}
+
+\subsection{cexcerpt - extracting C source snippets}
+
+The \prog{cexcerpt} program extracts snippets of C code verbatim from
+Easel's C source files.
+
+The \ccode{documentation/Makefile} runs \prog{cexcerpt} on every
+module .c and .h file. The extracted cexcerpts are placed in .tex
+files in the temporary \ccode{cexcerpts/} subdirectory.
+
+Usage: \ccode{cexcerpt <file.c> <dir>}. Processes C source file
+\ccode{file.c}; extracts all tagged excerpts, and puts them in a file
+in directory \ccode{<dir>}.
+
+An excerpt is marked with special comments in the C file:
+\begin{cchunk}
+/*::cexcerpt::my_example::begin::*/
+   while (esl_sq_Read(sqfp, sq) == eslOK)
+     { n++; }
+/*::cexcerpt::my_example::end::*/
+\end{cchunk}
+
+The cexcerpt marker's format is \ccode{::cexcerpt::<tag>::begin::} (or
+end). A comment containing a cexcerpt marker must be the first text on
+the source line. A cexcerpt comment may be followed on the line by
+whitespace or a second comment.
+
+The \ccode{<tag>} is used to construct the file name, as
+\ccode{<tag>.tex}.  In the example, the tag \ccode{my\_example} creates
+a file \ccode{my\_example.tex} in \ccode{<dir>}.
+
+All the text between the cexcerpt markers is put in the file.  In
+addition, this text is wrapped in a \ccode{cchunk} environment.  This
+file can then be included in a \LaTeX\ file.
+
+For best results, the C source should be free of TAB characters.
+"M-x untabify" on the region to clean them out.
+
+Cexcerpts can't overlap or nest in any way in the C file. Only one tag
+can be active at a time.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{The .tex file}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Portability notes}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Easel is intended to be widely portable. We adhere to the ANSI C99
+standard. Any dependency on higher-level functionality (including
+POSIX, X/Open, or system-specific stuff) is optional, and Easel is
+capable of working around its absence at compile-time.
+
+Although we do not currently include Windows machines in our
+development environment, we are planning for the day when we do. Easel
+should not include any required UNIX-specific code that wouldn't port
+to Windows.\footnote{Though it probably does, which we'll discover
+  when we first try to compile for Windows.}
+
+
+% xref J7/83.
+\paragraph{Why not define \ccode{\_POSIX\_C\_SOURCE}?} You might think
+it would be a good idea to define \ccode{\_POSIX\_C\_SOURCE} to
+\ccode{200112L} or some such, to try to enforce the portability of our
+POSIX-dependent code. This doesn't work; don't do it.  According to
+the standards, if you define \ccode{\_POSIX\_C\_SOURCE}, the host must
+\emph{disable} anything that's \emph{not} in the POSIX
+standard. However, Easel \emph{is} allowed to optionally use
+system-dependent non-POSIX code. A good example is
+\ccode{esl\_threads.c::esl\_threads\_CPUCount()}. There is no
+POSIX-compliant way to check for the number of available processors on
+a system.\footnote{Apparently the POSIX threads standards committee
+  intends it that way; see
+  \url{http://ansi.c.sources.free.fr/threads/butenhof.txt}.} 
+Easel's implementation tries to find one of several system-specific
+alternatives, including the non-POSIX function \ccode{sysctl{}}. 
+
+
+
+
diff --git a/documentation/copyright.tex b/documentation/copyright.tex
new file mode 100644
index 0000000..d0917cb
--- /dev/null
+++ b/documentation/copyright.tex
@@ -0,0 +1,20 @@
+\vspace*{\fill}
+\begin{flushleft}
+Copyright (C) 2016 Howard Hughes Medical Institute.
+
+\vspace{2em} 
+
+Easel is open source.  Easel's source code and documentation are
+freely redistributable and modifiable under the terms of the Berkeley
+Software Distribution License (BSD 2 Clause;
+\url{https://opensource.org/licenses/BSD-2-Clause}).
+
+\end{flushleft}
+
+
+
+
+
+
+
+
diff --git a/documentation/doctricks.tex b/documentation/doctricks.tex
new file mode 100644
index 0000000..895d598
--- /dev/null
+++ b/documentation/doctricks.tex
@@ -0,0 +1,49 @@
+\section{Tricks used to produce the documentation}
+
+\subsection{autodoc - extraction of function documentation}
+
+
+\subsection{cexcerpt - extraction of verbatim code examples}
+
+This guide includes many examples of C code from Easel. These examples
+are extracted verbatim from C source files using SSDK's
+\prog{cexcerpt} program. The \prog{cexcerpt} program extracts tagged
+code chunks from a C source file for verbatim inclusion in LaTeX
+documentation.
+
+The \ccode{documentation/Makefile} runs \prog{cexcerpt} on every
+module .c and .h file. The cexcerpts are stored in the temporary
+\ccode{cexcerpts/} subdirectory.
+
+Usage: \ccode{cexcerpt <file.c> <dir>}. Processes C source file
+\ccode{file.c}; extracts all tagged excerpts, and puts them in a file
+in directory \ccode{<dir>}.
+
+An excerpt is marked with special comments in the C file:
+\begin{cchunk}
+/*::cexcerpt::my_example::begin::*/
+   while (esl_sq_Read(sqfp, sq) == eslOK)
+     { n++; }
+/*::cexcerpt::my_example::end::*/
+\end{cchunk}
+
+The cexcerpt marker's format is \ccode{::cexcerpt::<tag>::begin::} (or
+end). A comment containing a cexcerpt marker must be the first text on
+the source line. A cexcerpt comment may be followed on the line by
+whitespace or a second comment.
+
+The \ccode{<tag>} is used to construct the file name, as
+\ccode{<tag>.tex}.  In the example, the tag \ccode{my\_example} creates
+a file \ccode{my\_example.tex} in \ccode{<dir>}.
+
+All the text between the cexcerpt markers is put in the file.  In
+addition, this text is wrapped in a \ccode{cchunk} environment.  This
+file can then be included in a \LaTeX\ file.
+
+For best results, the C source should be free of TAB characters.
+"M-x untabify" on the region to clean them out.
+
+Cexcerpts can't overlap or nest in any way in the C file. Only one can
+be active at any given time.
+
+
diff --git a/documentation/figures/evd_basic.pdf b/documentation/figures/evd_basic.pdf
new file mode 100644
index 0000000..55044ce
Binary files /dev/null and b/documentation/figures/evd_basic.pdf differ
diff --git a/documentation/figures/evd_location.pdf b/documentation/figures/evd_location.pdf
new file mode 100644
index 0000000..9dd1e9b
Binary files /dev/null and b/documentation/figures/evd_location.pdf differ
diff --git a/documentation/figures/evd_scale.pdf b/documentation/figures/evd_scale.pdf
new file mode 100644
index 0000000..4561412
Binary files /dev/null and b/documentation/figures/evd_scale.pdf differ
diff --git a/documentation/figures/gev_density.pdf b/documentation/figures/gev_density.pdf
new file mode 100644
index 0000000..e22b759
Binary files /dev/null and b/documentation/figures/gev_density.pdf differ
diff --git a/documentation/figures/gev_logdensity.pdf b/documentation/figures/gev_logdensity.pdf
new file mode 100644
index 0000000..c9885d7
Binary files /dev/null and b/documentation/figures/gev_logdensity.pdf differ
diff --git a/documentation/figures/rna_elements.ai b/documentation/figures/rna_elements.ai
new file mode 100644
index 0000000..346167c
--- /dev/null
+++ b/documentation/figures/rna_elements.ai
@@ -0,0 +1,851 @@
+%PDF-1.4
%����
+1 0 obj
<< 
/Type /Catalog 
/Pages 2 0 R 
/Metadata 47 0 R 
>> 
endobj
2 0 obj
<< 
/Type /Pages 
/Kids [ 5 0 R ] 
/Count 1 
>> 
endobj
3 0 obj
<< 
/ModDate (D:20030327085622-06'00')
/CreationDate (D:20030327085620-05'00')
/Producer (Adobe PDF library 5.00)
/Creator (Adobe Illustrator 10.0)
>> 
endobj
5 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 2 0 R 
/PieceInfo << /Illustrator 7 0 R >> 
/LastModified (D:20030327085620-05'00')
/ArtBox [ 107 312.92773 459.53711 477.16699 ] 
/Group 38 0 R 
/Thumb 39 0 R 
/Contents 41 0 R 
/Resources << /ColorSpace << /CS0 32 0 R /CS1 33 0 R >> /Font << /T1_0 34 0 R /T1_1 36 0 R >> 
/ProcSet [ /PDF /Text ] >> 
>> 
endobj
7 0 obj
<< 
/Private 8 0 R 
/LastModified (D:20030327085620-05'00')
>> 
endobj
8 0 obj
<< 
/CreatorVersion 10 
/ContainerVersion 9 
/RoundtripVersion 10 
/Options 9 0 R 
/AIMetaData 10 0 R 
/AIPrivateData1 11 0 R 
/AIPrivateData2 12 0 R 
/AIPrivateData3 14 0 R 
/AIPrivateData4 16 0 R 
/AIPrivateData5 18 0 R 
/AIPrivateData6 20 0 R 
/AIPrivateData7 22 0 R 
/AIPrivateData8 24 0 R 
/AIPrivateData9 26 0 R 
/AIPrivateData10 28 0 R 
/AIPrivateData11 30 0 R 
/NumBlock 11 
>> 
endobj
9 0 obj
<< 
/OptionSet 3 
/Compatibility 5 
/EmbedFonts true 
/SubsetFontsBelow true 
/SubsetFontsRatio 100 
/Thumbnail false 
/EmbedICCProfile true 
/cCompression true 
/cCompKind 3 
/cCompQuality 2 
/cResolution false 
/cRes 300 
/gCompression true 
/gCompKind 3 
/gCompQuality 2 
/gResolution false 
/gRes 300 
/mCompression true 
/mCompKind 3 
/mResolution false 
/mRes 1200 
/CompressArt true 
>> 
endobj
10 0 obj
<< /Length 1144 >> 
stream
+%!PS-Adobe-3.0 
+%%Creator: Adobe Illustrator(R) 10.0
+%%AI8_CreatorVersion: 10.0
+%%For: (Sean R Eddy) (Washington University)
+%%Title: (Untitled-2)
+%%CreationDate: 3/27/03 8:56 AM
+%%BoundingBox: 107 312 460 478
+%%HiResBoundingBox: 107 312.9277 459.5371 477.167
+%%DocumentProcessColors: Black
+%AI5_FileFormat 6.0
+%AI3_ColorUsage: Color
+%AI7_ImageSettings: 0
+%%RGBProcessColor: 0 0 0 ([Registration])
+%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) 
+%%+ Options: 1 16 0 1 0 1 0 0 0 0 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 2 3 4
+%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () 
+%AI3_TemplateBox: 306.5 395.5 306.5 395.5
+%AI3_TileBox: 18 20 594 776
+%AI3_DocumentPreview: None
+%AI5_ArtSize: 612 792
+%AI5_RulerUnits: 2
+%AI9_ColorModel: 1
+%AI5_ArtFlags: 1 0 0 1 0 0 1 0 0
+%AI5_TargetResolution: 800
+%AI5_NumLayers: 1
+%AI9_OpenToView: -85 619 2 1578 917 26 0 1 10 73 0 0 1 1 1 0
+%AI5_OpenViewLayers: 7
+%%PageOrigin:18 20
+%%AI3_PaperRect:-18 776 594 -16
+%%AI3_Margin:18 -16 -18 16
+%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9
+%AI9_Flatten: 1
+%%EndComments
+endstream
endobj
11 0 obj
<< /Length 6430 >> 
stream
+%%BoundingBox: 107 312 460 478
+%%HiResBoundingBox: 107 312.9277 459.5371 477.167
+%AI7_Thumbnail: 128 60 8
+%%BeginData: 5978 Hex Bytes
+%0000330000660000990000CC0033000033330033660033990033CC0033FF
+%0066000066330066660066990066CC0066FF009900009933009966009999
+%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
+%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
+%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
+%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
+%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
+%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
+%6666006666336666666666996666CC6666FF669900669933669966669999
+%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
+%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
+%9933009933339933669933999933CC9933FF996600996633996666996699
+%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
+%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
+%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
+%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
+%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
+%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
+%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
+%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
+%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
+%000011111111220000002200000022222222440000004400000044444444
+%550000005500000055555555770000007700000077777777880000008800
+%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
+%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
+%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
+%524C45FDD2FFA8A8A87DFF7D527D7DA8A8FF7D52A8FFA8A87DFFA852FFFF
+%7DA8A87DFF7DA87D7DFFFFA87D527DFF52A87DFF7D52FD52FF7D7D7D527D
+%7D7D52FF7D7D52FF7D7D527DA852527D52FF527D7D7D527DA87D527D52FF
+%52FD067DFF527D52FD52FF5252527DA87D527DFF52527DFD0552FF527D52
+%52FFA8527D527D7D7D527D52A8FF7D5252527D527DFF7D5252FD6FFF7DA8
+%FD61FF7DFD7FFFA8FD34FF7D52FF52FD3DFF527DFF7DFD06FFA8FD34FF7D
+%7DFD3FFF7D7DFFA8FD05FFF852FD34FFA852A8A8FD3DFFA87DA87DFD05FF
+%277DFD37FFA8A8FD3FFFA87D7DA8A8A827FD3AFF527DFD3EFF7D527DFFFF
+%7DFD3AFF7D7DFD0BFFA87DA8FF7DFD2EFFA87D7DFFFFA8FD09FF7DA8FF7D
+%FD2DFF2752527DFD0AFF7DA8FFA8FD2EFF7D52277D7DA8FD09FFA87DFFA8
+%FD05FF52A8A8FF52FF7DFF7DFFFF7D7DFD04A87DFD18FF7D52FD09FFA87D
+%7DFD30FFA8FFFF527DA8FD09FF527DFD07FF7D7D7D527D7DFF527D52FF52
+%7D7D7D527DA87DFD17FF2752FD08FF52FD33FF7DFFFF5227A8FD07FF7DA8
+%FD09FF277D5252527D527D52A8FF7D527D5252527D7DFD18FFA87D52FFFF
+%FF5252A8FD34FFFD05A85252FFFFFF7D27A8FD10FFA87DA8FD08FF7DFD1A
+%FF7DFFFFFFA852FFA8FD39FF52FFFFFF7D7DFFA8FD09FFA87DFD2DFF7D52
+%FF27FF5227A8FD39FF527DA827A87D27FD08FFA87DFD7CFFA87DA8FD2FFF
+%527DFFFFFF7D52FD3AFF527DFFFFFF7D52FD05FFA8A8FD30FF7DFFA8A852
+%FF7DFD3AFF52FFA8FF52FF52FD04FF7DF8A8FD31FF7D527DFF7DFF7D7DFD
+%39FFA8527DA87DFF7D52FFFFA8F852A8FD39FF5252FD3EFF7D275252FD3B
+%FF7DFD14FFA87DA8FFA8FF7D7D7DFF7D7DFD04A87DA8FF7D7D7DFF7DFFA8
+%52FF7DA8A8FF7DFF7DFD09FF52FFA8A8FD10FF52A8FF7D7DFFA87DA8A87D
+%FFFF7DA8A8FF7DA87DFD17FF7D5252FD12FF7DA87D527D527D527DFF7DA8
+%7DA87D5252527DA852527D5252527DFF7D527D527D52FF7DFD08FF7D527D
+%7DFD10FF52527D527D52FF527D527D52FF527D527DA87DA87DFD2BFF7DFF
+%527D527D52527D7D527D7DFF5252FD087DA87D52FF7D7D527D527D52A8FD
+%08FF7DA87DA8FD10FF7D7D527D7D7DFF527D7D527DFF7D527D7D7D527D7D
+%FD10FF527DFFFFFF7D27FD35FF7DFD04FF5252FFA8FF5252FD1AFF7DFD0A
+%FF7DFD11FF7DFFA8FFF8FF7DFD3AFF7DFFFFA827FF7DFD38FFA8527DFFFF
+%FF7D52FD33FF7DA8FD04FF7D5252FFFFFF527DFD17FFA8FD1FFF7D27FD04
+%FF5252A8FD33FF7DFD04FFA827FFFFFFA85252FD17FF7DFD1FFF7D7D7DA8
+%7DFF7D52FD35FFF852FFFF7DA87DFF52FF527DFD16FF7DA8FD1FFF527D52
+%FF52FF527DFD35FF5227FFFF527D52FF52FF7D52FD16FF27F8FD5DFF7D52
+%A87DFD07FF7DA8A8FD13FF277DFD1EFF7D7DFD07FF527DFD35FF7D527D7D
+%A87DA87DA8A852527DFD13FF7DFD14FF527DFD09FF527DFD06FF52FFA8FD
+%05FFA87D27FF5252FD07FF5227FD17FF527DFD07FFA8A87D52FD06FF7DFF
+%A87DFD04FF7D52277D52277DFD05FFA827277DA87D7DFD11FF7D7DFD09FF
+%5252FD06FFA8527DFD05FF7DFFFFFF7DFD07FF7DFD19FF7D7DFD08FFA827
+%52FD06FFA85252A8FD04FF52FFFFFF7DFFA8FD05FF52FFA8FFFFFFA8FD11
+%FF5227FF527DFF7D527DA85252FD09FF527D52FF5252FF7D52FF527DFF7D
+%27FF5252A87D27A8FD16FF27527D5252A85252527D27277DFD07FF7D5252
+%7DA85252A8527DFF7D52A85252FF7D277D5227A8FFFFA8FD14FF7D52FF7D
+%FFFF7DFD0BFF7DFFFFFF7D7DFD07FF7DFFFF7DA8FD1CFFA8527DFF7DFFFF
+%7DFF7D7DFD07FF7D7DFFA8FF7D7D7DFD05FFA87DFFFF7DFF7DFD05FFA8FD
+%14FF2752FF7D52A8A852A8FD09FF525252FF52A8FD07FF7D52FF5227A8FF
+%FFFF5252FD16FF7D5227FF527DA8A8527DA8A8FD05FFA8A852277DFF527D
+%A8FD05FFA8527DFF52277DFFFFFF7D27A8FD0EFF7D7D7DFD2BFF7DFD12FF
+%7D7D7DFFFFA8FD08FFA8FFA8FD05FFA8FD07FFA8FD05FFA8FD05FFA8FFFF
+%FF7DFFA8FD0EFF52FD05FFA8A8FFFF7DFFFF7DA8FD0AFF7DA8FF7DA8FD07
+%FFA8A8FFA8A8FD04FF527DFD11FF7DFD04FF7DA8A8FFA87DFFFF7DA8FFA8
+%FD05FFA8FFFF7DFFFFA8A8A8FD05FFA87DA8FFA87DA8FFFFFF7D52A8FD0E
+%FF7D52FD04FF7D7DFFA87DFFFF52FD0BFF52FFFF52A8FD07FF7DA8FFA87D
+%FFFFFFA85252FD11FF527DA8FFFFA87D7DFFA852FFA8527DFF7DFD05FFA8
+%A8A852FFFF52A8A8FD05FF7D7DA8FFA87DA8FFFFFF52527DFD13FFA85252
+%A87D27FF527D52FD09FFA85252A827FD08FF5227FF527D52FFFFFF527DFD
+%16FF7D5252A85252FF7D5252A8A8FD06FF7DA8527D7D27FFA8FD05FFA852
+%52FF7D5252FFFFFF7D52A8FD14FF7D7DFF7DFFFF7DFD0BFF7DFFFF7DA87D
+%FD06FF7DFFFFFF7DFD05FF7D52FD16FFA87D7DFF7DA8FF7DFF7DA8FD07FF
+%A87DFFFF7D7D7DA8FD05FF52FFA8FF7DFFA8FFFFFF527DA8FD11FF7D7DFF
+%527DFF5227FF525252FD09FFA852A8525252FFFF52A852FFA85227FF527D
+%7D5252A8FD16FF527D7D7D52FF5252A85227527DFD07FF7DA852FF527D52
+%A8FF527D7DFF7D5227A87D527D5252A8FFFFA8FD11FF527DFD0AFF527DFD
+%04FFA85252FD08FF7DFF7DFD08FF527DFD17FF7D7DA87DA8A8A87DA8A8A8
+%7D527DFD05FF5252A8FD05FF7DFF7DFF52FFA8FD05FF7D7D7DFFFFFFA8FD
+%11FF5227FD0AFF7D52FF52A852FF527DFD08FF7D7D7DFD08FF5252FD17FF
+%2752FD04FF27FD04FFA8527DFF527D52FF7D52A8FD05FFA8FFA852A8FFA8
+%FD05FFA85252FFFFFFA8FD1DFF2752FF7DFF7DFF7D52FD31FF5252FD04FF
+%7D5252FF7DFF7DFF527D7DFD05FF7DA8A87DA8A8A8FD05FFFD06A87DFD20
+%FF7D7D7DFD33FFA8F827FD04FF7DFFFFFFA852A8FFFFA8A8FD08FF7D52FD
+%65FF7DFD06FFA87DA8A8FF7DA87DA8FD0AFFF852FD63FFA87DFD0AFF7DFD
+%0EFF5252FD63FFA8FD1BFF7DFD80FF7DFD5FFF7DFF52FFA8FF7D7DFD78FF
+%527D7D5252527DA87DFD0FFFA8A87D52A87DFF7DFD05A852FF7DFF7DA87D
+%A8FD53FF7D7D52FD047DFF7DFD0FFFFD067D52FD057DFF7D7DFFFD057DFD
+%6BFF7D527D52A852A8527D525252FF52A8527D527D527DFD7EFF7DFD8EFF
+%FF
+%%EndData
+endstream
endobj
12 0 obj
<< /Filter [ /FlateDecode ] /Length 13 0 R >> 
stream
+H��W�n�}7�P
� �%�")A J�&2c×]l�!�8��j�W��u�>���-�=A�}\�
y�Tu�ݟ�nNe�=�Szx�G��e�.Ǯ?��w�4�0�f����g�ђ�����k��{��>��e�]{����{'?��S�>�]�ݵ�c2>�7ڷ��h�ߵ�y�N���1�6/G�R�?�^|θ'?����
+.��wZx4$^�/���{}�����"���QB]��\���L[ݎW}��ÐuM��^ڔ�_��E׎X�}]6o�Ο����Z�k�OZW������u��ٶ
=n�����G��>�uq��ҍ
G�
+n-������j���k�X����wy����ޕn΀
��^�?�S3���A
��{�
�rgVk�(�_NB'�~a����
�^?�g�Q/rq��r�8�Z�m2���K�Co�v׀=6�4�g̣	3��Ep�=x,�<!��y`��R��νO]����~����q�O$d^��݃�&�n-q��*� ���h�G���J�}ָ-�G=��]3����`��4m�Y>kC�pr���m��=�i�p����D�%���Vx��r�84��v�j��
+|���Ǻ=��8���r��k��O��,l�!_>�����Q
+�L�}]
8,��7{�x�J��|A�5������*�&9�m	�{�Jh��y����!�;>����&��S7�Gh��p��/�h/��j�
��y�[�Z=�5�4�n�կ��G����o�
�����} 4>u�P���)��������y�/�F��6
�g���ӸiU�n�a����Bc������>��۲G�򇯂:�N�U�^;
5���?UhF����î� 
����u�y��?��/�}(хB
�����vϳϾ���u[�0����l�n�wO��{ی`X��rc�X��oXN�?��
@����z�����4j;�B�oת
�n�mtU7M	O(̽�-����ű��u*{ؘǧ���b̋�&ė�p%]D�ʦt�����/���G�5��5��2W{�
�u�B\�t.�:j|�?ـps�
.�����ҝ�ro�E�wͳ94�w˅�����no��ۼ}�z�E㻨��t���>�ʺt�˽���Qj�����v�����ޮvZ�ӪW!꽎
�
�9�n9S�2�f��]U�͂cr���4�8ϴ�yvۣ�yY>>�U�O����JX}�{�_T��̸q����������e�_��7������޻�'}��� �<S
f
���eϵ���a��y�G�+$u�u�	�3�^ڮU>�&�-&�;&����
�w��������O+ۉ����x�c?�7�8�G�B�J��V�g��V#�r��Jɭ(Ha�
���D!�p���a����a���!!�B"�'��H����D���@iD�TИ&TҔf4�`)-p�0"���E<Q
%���(�TT��Q1��Y�R����4�3�y���+ ��BP�� [...]
+)e&�4L�T�I��EF2��L
0���,R�� )���H��ȋ���o�EQ(|ΰ*�C�
�a�B)��L�J�����+UD�*ȋ\�y��i.�$���@d�G9�	`�"SY�eY��,�b���QFq�0
�"Ui�ӧ��-b܅�
w�)��@]YH%s�5ō��
���A���HT���$I
�8Њ�rA\�
+(f�RQ��r�e�Q�3�"	�
��B����W�%2s�
2
!���Y�r�!���y�8@���Qf�`H
+�$� o�C��0
+hAؕ�el��;�E�!R��98���	8+�^S�9$AX��9����	j@�*���RL@:QG�
�XP{
���(��
��9��9��'"��}ڻc
�ܿ��c�vo0�ܿ���U8o�
����ն�L�yFˆ�LHߘ��n�X̠4?��Xf#�ڂ�$�EX�0+��i 6N��Ʀ��ÁI�K�y�D9�V�Yb+b>
�#Gd��~0d�Y��8v,	l�
�d���-&�&�&�Nb;��Y�L ��G�X*	,!
%
-
1��3A�Ė(�,�[̒�YZċ"Z�Ѿ�^��Be(�ץD]9a,2�S��:��@Y��r���K+Gi���$�k]`8�Rf�B�V�v(��Pr��;^b�Ǒ�%gt��\��"\��^��R�jF
x/Xέ�6.۶M˵�5�/q~�U�o5���վa��b�4�}���Wx���%�
+�_ayhar������X.�l����
��������r���U�D+O�7'+����_ʫ,�n
�O��E
%��Z���L $��U�M��

.ID�t۱)z���$j
-=Y��Z��pN/
>�J�����ڕ�,<���>j~��D���
�o�pfL�VxvL��<!�&�.�>��a�	r�2b�W�u�0o�g
�3�5�
�
� ty�wmr���Q>F�/���� )_���K	6�W����� Հ���|,�,��������ф)Iz.VV��V`\v���v��05� �x��g�۳��Hq0Bl	/����襂��Q1��".�
/<��qTlL
+�d>��]���k

��'�Ȥ ��텭��3Pވ�Ft��$��
+�� ᎖���1s�0O �$�qs�l�B7��
�Ux:���#�ő#j��bF�F!���*���Cd�� Tf�#
�"
��
�o��
l�㵧4����X�\���28���
����t����?{�����Ϯ'�ɟ]���/���m�����G���}��e��e���u�SI
���V���Q׫Ώ:j��
�Wj�J�`�c�mv���S�i�ԊzuK�.� (9¦�{�/lg�������U\/��̴�itْ����
���jZ���c8��wy�Ɋ=�&����Xd���D�� ����_���1����w��ŕ�'Y�lʑ�('r.ٗ
 .�+�t$��$A}4��=+N2J����!���(BP���(	+�����YǗ�_U��jf��׼�6�6�`+Mj��ݳ
�X���i%rʧ��=W��ycj~
�	�+:����/����B��^��$W���rmŲ�g�$�]��M�T�3���1
�%r�Xص/x������؉�A�]ݿ���<@��	����$/
+O��K��&�S��!��]R at f�G����$54=\4/Y��i�v��iꈩ��E�?�/���)ۅ�9x"��n���ܬ�[s�$9s�\[�4���^�Cg��ቢw��,7^D����%���C�
Z��`+�j���)a
�St�S_]�� ��Ġm��'f���}E־�r�s��N���oT�=*�3w!\B8s
��k�Y*M���?��j
.��7>��&��,�Ev��Ew���m��%O���:��U�
�m������'��k��ٚcC���αՄ"
C���V_�܁=/����_0�3�`D�z�'�bwl`�P%|���?�
+|�KZW@y]�{w��'ޭ&���;(����/�-�ݳo�M��{)�Zݔ;-qΑ4�//ϓ�ң���a���9�����T�3׭�����?���e��*2߼�o�mj쪕6�;�����AO&�d�e�l����j�)�N�ש
�>y��xt6~�p��ƾkǿ��%���0�L|:;'[��+�9��8ڎS	@Z��W�q��;��Ȇd�H��8:�/�ҋM
P4Fm|�T\&oXrF�Yu��zWn�C��f���x84�kq�bJe�#ac"�9#S�|gL�8���9��z����ݽ�<�>��y�ԥ?
���π]
+���'� ��`M��A>P�1
��w�m�[}�@�t�x���Oe�
��i
�
n��x��{����9֎��p���M3N��(|��*l�\dEE�4<�
+�

!1�
l�g����UeM[CM���O&�c?O
�ք
/0���q��.Vd>�_{�?��������ߚ~q_Ձu�H�7�{�ޙ��,fp�O��
�p��z�E�mf���P��ܩFyi����i�f{�j����zQ^z�Z(><44���B����p=\\.:#
m
	���u�P��ˑy�q��)�����C;H{iw��,�x`�����]>
ۍ���e�F��U�E�
~<?���Ȟf��"�UQ���
&���F�N���x���~�`%��d��`G�Kr&)���]@FC�����|���n��K�('�JHr�3��Y��y�t�7yy~<_�_.<�\rV�\Z����Q��B�0�*Z��$�J�f����=�G`Q��!�j���Sݶ^g�:��=�D�պ��~���S���Y�J��R{5�K�ЭEw��sʽWnn����1�g�^
��{��ܳ��T��g8h��,��ź��JA'ƅp�2Cx��T0�4�(�
Aǯ�װ
�
���;���V`H
����(r|�
�@'���TT��.p�������N/��#��z}o]���8�p,�X��lc�殩�n 2
MM3ȃN��
��3q����l��-6?��)����.�7%ؔ~��K�8�ѬTdegP>z\�L�N�J���S�L��1I?�����sMs�\�����'���D/�DI�4E���G�;=�W>�a���I��z�����r�|-����
���5�
Ow���C���@D+�G�R���
�����;l]��7����.�������w�4��_������zS� �e�;u^R�!e3-DQ}�
��iSQ�N�z�g�
$��
�E{D+o1�q	%ʖ�QQQ��f��2�A|�S�������Mo G9�`�&�D�����K�x� W2�u���
+
6S���]{�_ꭋ���;�vv��w�w��캇ݡ~?Xy��/`j��K�~po������n�w���p;��v;���U�7���m�.v���n��_�J�A|ǣ`笄e�t��٭�ZcWma4b�(����ut��7�6U�jU���E�>��ԕX�[ק��L���k�U�ֽ���&���Ske����_�O�\,@1#@8�
������ՙ
����U�ݓ=��o�;�������{��e5��KP~qc��~����`��c�x"�|����/�
¦�{��(��?��T77z:����Żѹѷѵm�ktk��}]<�
+�̟m����
z2�%������܉x�pbۯ.�wƮ��
����C�oŵ�{9�/n,�vc���͓���n�Z�Է����R�����I����:�R}٧'[ݷ,/g������ܭ�G��}[�n^P[��;�V壶���Z���k�T�xSv].�El���F]�U�F�vUR�J��d|�D�X�]�!�#5�H�Tir�M�E
+�J���j�Za�=�8\��]���6���
f4�n��]+�lꝥp�f�\�Z~H�Ϫ�,3
+���$�������DVV�R�d#��
��K|�@F��,�X at U�R��{a�p
�i�?I��Ɔ-�Ѡ3an��R:`�&�P�~�ش
W ́�^�D���:a?֐'co
�;�
�(�2JZf�l��g����	N�Ey0V#�bo/�
)�� ��P_.�rG�
�;�F��ؼ��fH
o���Y
+$�
���~�����
����vX�h��bwW�a�7h����Q5�Ӳ�^0M4�
��f�bO��r�-Y�P�.��8�Ez��;zz��'�v�V�jc���p�
S;�ϒ��ß�_���,�k*�N4{�YY��^�j��**�*�<�Ne���U���U'�&W�j
+s�KY��&e=�jP
�5U�Z
��?8��|��r���4r��f�Fږ���Vݥ�t��S�^�z���	�_��z�׺�V��k�Zz�
�j�5������
���/L�_o�9F���x_��6�ᥡy;���
�_��q�t��o
؏��o
l���o߾x
����3?�W_s�;�g���6Au�U��_�9��"�
ߏ�5�:��w8��8s�Z�!�F����<�����8��o��u�nO�����O�~�����~���������_��;��1����z6uT5�h
ܺD�'b?�|�w��J%�DWT��|�]0�|���x��
+	�}!�g��,j���Q���'�ݪK��щ|����/�,�
�s��Z2>gO��yd<��;��`�����
�;����P8�-2�}����
��ȡqX� �,�������H�N�@F$�ғܚ>#�vbߩ=�;w�)�^t��.��6ˮ!Jw^X�(�K��di�Q�/Q���v��;	n	m��.���vA�B�$�	h-V�A�u��m��'��Q�ׯnr���._�#�q�/��6���_c��R�.���-�s4�h���̻���ί��̢��������F�6n���t˷j�R���^�Ǖ���g�-���xǍ��
�̙ѵ���Yv�j��<�l̍�_���Z�X����TJF)�27�j�D3����*�SsI�.��͎u�Of�e�s�?=��2N5�%g�Q�����}}8Б��fC��
T�b��
�|��'z{��e-Zz���E��]͵�|l2cW37rF
s,���m�6Z�5yӉ��A��c[f�f:ษi��EM�O�(����p��^3��TQo4����a#,��+m��j@�
njNpE�0ΰ�9 {�A�F
�T�N�V����9W�
�4��e��
t�G�.`̃�iY
����BB
+8 �mk3r�����_8(0S��X 
0�f�hq�W�$��Ԭ��U�|v��7#�6z���v��\�r�

$G�`�`��ν���HN��J�p�p�'�p��xW�'�������ц�#X���D �r�
%�hi-��
Z�$h0S� 1!�D���f�/��_
���A��ݡ�a
�t
�
�� y�p��`� ;q��� �1ة#z_$�L�Z�r�9����n
b���L.�dž	� L�_ at K�>�3��X�i��U���8���aL�O���R�o��S���K���9ǯ�MQ
p/*�E�0/꬙W��lT+�m��J�E�����X��
��Z@=�I��	 �t��F+X7zQl0�B��
�L<��V )��V�IQW�YxL�6"��
 g�р1�b0

jBw �A��ϊ/�c6A � N�搶�]
��R�G��p���4
��I�;n�
��
#h�����u<K��Q-����9c�*�n��������ڟ�Y9]TvZ�{&�#9t�
1$JX#\
K�u�^N��<�lƜ?"zN�g�
H��
��r��N�:`�v�:�s�9��1��.oXc�7Y�di��M�5.j��q9�bƥ�
�hB�e���!
�:J�[����������d���lI�S����!�T��A̧XN��e�O�1��8J8_X��2�S�)���S������
z��zg�zG�����%ԆGLp����Z�6���N�9W�9�p��I�&�ѐ�JWI���6S9��k�ta/o���t��a�OQ:v��Z$��Ju�كH�>��,t��r3m���R7�9��Fy\&g6s�2K�����
�f%�k����
�^������T�@T��Ҍo9͚��^�z���/̿X�F=�Wc�pew�e����L��7<?�ROU�VT�nU�����0j�T���A��k/{_ߞ�7��w������ç�O��_�?~zJ�}s���o����?=������쪿�������程9��4-_)�xKb��$R�H&�L �>�<$��<�:"q8m8i4&�DN�
+'��%�5�,N*،D
N
+F	�
$2p*HD�4I� �gȮ���0�߁_^u0	&�Lz�&���E�B�ɭ$�$
:,Tk.s���9�)ˆ�&�I�a-���
�Tx��,�����32~�ڎA����q��w��n�MB� �C
9�
�ào�>E���lj����n�
+[Ů_~ݝ��5ޟ�ݩYOT�_"P�O'O�N'N�M'�6��󚉲��3��2ң��S���I�)�	����ЩPDHg:
:	�F�NN~!�Ӟ��S�^��n`�FuNtFs���zdG��T���kZ��%G�Z����̀�m@�Y;�Y�5�`+8�1�Tk�
7 �'oF0��߆�
+�a�w`#kDbO��
j�`�
�x�v � �N��
ޮ
܆�
+�p
w�� FO��
vk7�`=��
��,
۰��
������4���|��Ɍwց�g;����'®�hI�CZ��p�_�M.&<�E�ֶ޸��y{k\o�kt��ܐ�Ⱦ�$G3 �V���|`��o
��w�7�
-g���C���&|�Y %4e)4��NZ|7���g����b 5���h�5"��
KBl��^2�Z�A���������k�7�p0�$d�i�d��8��
�6F���q8�Nt7(����m��6(�����Dd�������j#���k1��+���JD�4�$%�A��DN��DLNK;)�$BZh-QQ
���F@������c��Ǩ�r���fD#��'ы�K��XB1�D��c�/1L

�_V�����y�?ɘ���E�q�
eZ������n��_�t���n4a�!��:��5Ή>w�ٺ��M��\��
��l�z͍��5��,hMhm6t3#�������hk�4��6�@�t6S��1mݚ��ܜ.ٞ٠�Ѣ޲I��M�Q�Y���Uv9<�]�Ͱ6ѲnѴ�f[�h\[���E7�K���1Z��M,N�m����V��V�hd�ƺ�UO��]̾�u�Ͱʦ��G������GJ�
J6����~��Hn[A�>�|��H.�DQ�C �
rvn9F�6��|�T�#)�[Rώ��X=`a�h�l�^�_�c����ʝV<�����]zYf�O]� �昆�.�ݧ���!RK$ J{gkl�M�@���#�M�b�*���y�����6��sK;��`��NԸ�k���J��\�]��F%�4""!ѳ�-'EF
����J^����A�9��l�d8 zYr2�1�X��Lp����Yt1©\�á
+��g
+p%G*���N$��At��C�i�;t�wH���5�>#��/tz
���BW���wy
+
�~B7	p�\D
B��{�w�s$�ػƥgD�(����%��� A���i��,J��
���	�Z�v	�UP]���B�
�8@��� T��i��P-T�v�#B�}&��A�`V.(1g+e��7(
��3�w�^r�(���*-��
SL
e�
�RCPn�
fe�R����b�7�mRDP��
aQ�p`vi�):�Ơ\1w�#�E�E
�E�d���ML
�((i
�3�F��Q)q4#��b<��=|N�.q�(j�Mt��,�Rns�L���0�S���a�XU���F_�6��q��#e�BT�񹺈��i�]� m
)b����9��ˠ�7�a+"K��->F�L�.�-Wզܦ���/L�늿ʊI'���ԁ��MV�'��C|��byU
�Q��B�.Vo�v5��tP���
++^��a�}
V����}������Ad�1�A���M^�"s
+��R����s��.b-�w��7=�
Gj[
��6�a���mB3�x�!�0� �n`�
��0�
hh�����
�
`�
����
����f ˆ����bC�Q�12�����0LE���`�x�ľ��'ʼn
�)(R�WcE�=*ZLh��EP��1�BƢ�1*ht�����S�X7F���
1hŎ��>��1)|�m
 U� K
!C�!�MY��H"�biP܏�T�]5�/~{9����_�=��U�j}/�%V���n�ؗVܯq��.Wٮ��0_x��u��unֲu6w]Ű�_%�a"S����
��H���
{�u��!��ޱu����o�|�g�8��q��ǎq�r
�\��q��c��/���Єy����F���9L�ЕU+��Y�FփȺ*�^��
/�M�U�ğ�/���_�����^���tX7
�t�כ��^
+��߳���~���:��i�k]�����6
�կ�nKg��
+л��e׼X�����
���e��m��}�H/�}�.�
@������?}�����ç��O����S��_~��������/����O?���移a��e� ռ�F.x��
M��O֧c��O=���ŧջ_�ݮ>i�7���gT���>���
�D
W���1��ϻ�-y��c���?@ �1�J!�QH�D"�E�F����J��"������Q�R�)F*d��|CZ!��X�Y0�5��
��B�!Ðb�1$�L#�!ѐi*q
ɆU�oP�O���Hg�
"�^�c��4m���7�SaE�k��;|K�g�O��?��{<�����n8/�8hb��tQV�gym�K�J
Q�{/~�Sn
+�����]��~+
~��t���{Yv3��7D�����D��b!�!b�k�@� �Z�X���D
+)R�Pa�"�-,\(^��,bXȰ�aACQCa�↓{Y3���ew
+
����
&�_BCD�F�W
��˭BIP0a4�5H��I��Q�G\)YJ���R)�Xժ��]VaS�р�n�%v\d�U�*��c�H��؍�rUj�^kKH�O'��h?��uȍ�h��]�t�}�T
��b~
[
�c�x�y"�One	f
+f
��5$s8�l�������h�%$CHv`F ���
�h M6�!5�Z�Y۫�Clw5zlrkp�V�ݩ��ֳڹT#{�p���ղl�E
�Ԕ�Z�
׃(G�%�v���JP��+5� &���#(u �:��6� 
���#xw

w	���5��
F���0b�
+�I�p���<-s�vpU�e
hl�-]d�1�H�H at dO�7�_��i��*���,��i�a����(5T�	EL������rv:�\���rA�I�8�d��A�)��R
�N�,
X�$�!����H�M$�߈�h{�ע|2~!��D��x��{�{)n'����Ndވ�+��l�G
�
���l�h���=���
\Œ�7B�=��GO8�F���+#z�G�`�����Y
V�Zgt܈���}ؠ=�ҡ?
\��~
ѷ=�7���G_;t8)׉�Ǒ�:͋&N	G�9*f���¬;L�k}7
�)���Fԙe
���Ͻ
1�+�U
7�{���oOV�

�A]H��zt^|����0
i����n�pk�5"/�q�zj>k�I��
g��b)t
+�ы��5�ڑ
9�!�%;[+z#�U��26'���-��6e�Z��Y�]ٰhY�$�Z�Mkm�Ƶ�e�}���U
/��I5�f^ۙ
���5�""fc����;~���lqkr{��Z��Ά��gӳ�[��5���j,x5,�@
0��4Z����
��B9rVM2�� �衉^����FQ�=�#S��'!g�N�8)�9�
e:a����I1�0�tJ4��R�Bh�+�Cb�$DI�B8�@sb	��W� ����D�"�!!�  ���G��9�G��cŎ:�
�!�Q�5����8M�V&��R�A�0 �<?	C��U�ձ�1��	͐m����ʜ�|�h�.�����&�5���lMfk*��,&1aO�
�����ц�~��@ �tv�CAފ�
o{$��xK��+DޘA"1�@�a�wh�ț�
q�<~
�(�t TM�Y�[�.�v#��-��̛���m��|��[�����F����Q�)�ܡfL����� �uLR���_��+t�sC���:*7i7D�ѩ$z�}/]��dD
�
+�9SV�i��@=��/
g��S��\��y�����'i%*:1��F��
+u����y�8�5m\��H��[5@��^
{-�JX���� �0=`~FM$U4�Ps^�M��mO�/���(%%r	�Jl&{�ª��يWz�D��b.RK���p���إ3�◀�%e�x)�
á<�2n��O<C���
�.���h��^D6%4E��D�C$��ԍY\��mj����[R��)�9��N󹏳Y��"�T�,Ns���3yL�8�E��a�����2&
�Ńa=aR!η�'\�
A�v�����_�:�
G�	��! 9����zȫ� [�%� �ACkH��ƍGf�t/�+�� w9�ӝ�q㜃���Rb{�Ši�O:�yҤF;g1�8�'��Nz��������������Gr�2Q=��(H	������x�\�0�p�G���p�ܐ�ٰf&�L�����ّX�q'�h���R�3}��y�Cz2H&Ld���!ԁ=�9�7
+IC)C	�N'�c'��F3�DH��Y��7��69g3��@:�?F�Q&%
�!$e��3�N%�%��Ej���8����S)&�A^܌]d&a�$����I���'N(e��|��U�W9��i��M/�N�H��ͱ�d��''�g����ӽQ�Ŏ>�ۛM�EZަ��Ȥ�A�
'�μ������}}�0e���^�vq1�㤍���6�F�D_㟈��n��[��m�cɽ��uiy���{�J��Y%���������K��-}?�;ǎ�i�{�^�3�w�Mz+�;&���{~;	�&�闱����T���m���~�>��d'#߬{y��/ߙ3�"=|�׼]?yF��=�}����.��|��'��a\�����x~������ן?��~���˯��gy��?>��_?z��~����������}b���,8��Y�&RP+���?��������
���(\�&-�#][��s(*F�^_�]���'��� j�C	D

+R�R}�T&R��0�L�R��
�YY��T
���X��\Űk2�Z�_+l#�
1YqL��'�'
���
+!m4P�	k
�M�ƥ�,�vf�B!��Q���"]"�	��k4���y�8'��xb{k��"�A#���o(
6��h�!X�HGH�Ȋ����
+��
aAI����\���!#���򎓈������0�(I�$FV����'b+�����
+���p��&:
+<����56��a���%�u��L��3[���$�Y�Y�U�{\
Z�f�����S�k�[_/챾�=�[��欴�m܊܆�أ��
�l�1սŎx
~�gkx�ҋ�m!��%�ج����f�Ƶ7y��xj."�&�HǤA󐑒���$s���[N�r"�L<%+�e�hY9[V�����.���c�|��";]L���ˎ�Yh��8Ȝ��%W%�G��. �hiԩrD5B�V5�
{(F�=���.��ː�

+�D
+:
��� ����lF�Fȥ҈O�T�Dž�u'9,.
��2�MUr\q\p��'( ���+��V��Ƚ��o�;L�x��p�����г/����*#����t��a���L|ԁ���9dy}��}
�
+�

+"
+%�A�K&�&
��c���.E���c� 
+H
+K���h0�y���%a��P/
�ɰ����/���=��tz�
�
�a\�G���O
G4�]C����:.���x
DՐ�#�n���[k]�\� ��ږD��
��q,
E��u�{�}U��^��aѶ_�!�I4-�&���h�h�hE7��k;zC�-�F=OV��iLo�ڜw���
h
�hZhpl�tpxXm��
����HsÚW�x�x= ��49�� 8�,�_�QH`�
���;_!ᗁ���nv��
��J� ����֠	�zD2H"̑�P�Y��,j�����h���.�Ʈ,f�i�) ��Z̖�̂
y�
�,,�
Ș��݀�!#�
�Z�0H<���#>�E����R�
(T�T�)�K�I��V�T�F�\�\�N����
+�+�K�j������u�����
ZC~]<6/U/�/ـ
+�*�J�
��XB(��1�u�͚������I�e�݈���Z�i"j�Y�Ka���	�#��Y�T]z-K�j�DGqH�鑨��w��E��텸>�7⹢yO$W
G.�+�;���o��=��7�.��
+�;����%b��M�)<�\ۆ>pJ�G�%�xA�O����!�d����1k���ۣڴ�rԙV�
�Օ����v�)Ԋ�T�z�j�Z�:�*�QA��'�t3�5<K
Ko���[UkT���j��h���� d0��D5��LJ�p{�)MY�
+BO�j0��J���l �P�~�%�2��<�p �[f!��5�9�)�,����ٯ���@��,����X>9�SAT��U�u�Q�(�Z�V���޾�4����(
��i[�^�^��\sD��������9i@�'e{���p�e�B~(�e���[�i�y�-onlj�Dlee�I�I�eƗ�n#���@��t����O
O��E�p�h��*H{�Ѱ���р��th����a�O��]��G�q(S Sp�N�G��9�ٞc�{�
t٨x:�_
��b9L +�4Z�p$Q at i�P!fo�P3��\D�uM2������ȉx�)�*z�4'u�!�l�
D�lcN�r��\c�
�:�z��d������E&^v,�B����A�D?؍��� ڎهi���
d	�1
哃C����k'v� ��
+8K2*H�T
T!܀5
G�� �P 
�!�TQQ%Q�IEQU�dlzQU]M�K��&���H�
+�+�J�i$E�
�4�DvV��U(��g(�J� �*%���!�箽�׉�]{��U|�'ڛ�=�CwMvMuQ1T�*���*�Uqg���ȭ����i-����K�
��z�M�T�\��B��P}�=�ٍ�3Ss
+�F����
T���2QM2�����0
H�x
���|��G
���Tx4�O>�A_�
6
=D��ǑG#KM2�M�7j����_���r��-v�SXf��g�4)Z:CZ���/曓�f1�����/���|s5T��g�JJXf��M��ze�deD�m0�x�8�0C� ���ؑȑ�A�X�H� `(0I��Be����W5���~M�]m����GӂhBX��a4b�"����6cmGoȶ%Qè���65��Y�3�Ӛ��{�q|��i���an���a�Q�w�f��W �
k^��
����4���أ���~�F!�17 at S��|��_B�c���G�zD�*�[����v[�&D�� �0G
dC	fR��
�I�Z����n&�
����e���H�jY0[X0
r�A2��T�\Ps c: �w����r�k��� ��V���%���SH�{�P�RͦT.U'�
+ZeR��r�r�:�V>�W*X�X.Y�Y.Z�Z*[�-��
+j
�u��T�T�T�d*`�`*ar�*b	�PB�D��
7kZ�b&$r&���w#
^
j�����KdM.U�MW&8�@H�R��f=Ru�,a��
�!�G��B�߉�!~ ���LL߈��=�\q
�d �� >z�
�� ��P�j+h���3#�P�=27a���bXpm��Q\(�
-���y>!�����?��ʻ�H�9T
��+n�j�Z�QgZe��د�
��#x���.�@r8
27~99�`�`�
�����{f��U�+ �aِzZΛ��St�Y��U1�8���'E�`Iq�(�3���g��O��6��h>M���z���F�
�=b����{��ᇟ��k˿������44��M��q��#�u�b?5H���7
����
��i
+��\��7��}o����}SW��
���o���������߾|��}�|������_
?����_�����W���N?}�p��}�����٤>�gl��SG�������7Lr��p�Nܧ5�4�S�c�1sKfR`õ����e����B%'NC<�J�ƸG#E�1=�H>F�X�L�Mp�R�a_�\��
+�0zt�$��b���N1�X^��&�8q;G������6�.j�����ƎjO���Wt��9�!%vx��!]^����[OǞ�%�wt
HU�'�r��J-��	
�T��w���ڜ�c�b�P�X:�j��Ėc!�oN�|b
�������Wu��л��ǹ�%�v�n>�����9��tn�S;�ɽ�8�I>�6X���q�vػ�{

�>�N�{]��{^�
2?��o<�p�L�N�|�UXC%�r�k��Ã'�=��E�*F����
+�s��5;��
G1�G�t�t�]pGC_�
*$*GC��\��� ]��O
{G�����^>юAo�P�#T� 5�j
o�"|��>Cɏ���@X�Ala���m�g�/���a��j
��M��#��g�P��;	=�V�
�of{�L|%�x����&q5DR����eK#C ����"tJ�<� ��`d��c�9
>ni�I�;��e��G[F^`�a�?���VZ�(���ho�)��s�w�c�
�t�da�"<�
jħ�<����?���׿�G�����}}���Ј�h���.ʇ��N�������o>�{m^w��h$��(+�������A1.,��A���K��-�˶2�*-�l�l�4�D��nE`n��d��eq�gq�,(,!#ka�fQ�,&�dmN�sQ��t���Y���
+�٘:�
h���pt����Ŝv�� �w�͛
+��z�S�kܰ�USQ�&Mk|�چ���d:�Ha����UNk�[��Uf�j�
+��d,%�q���5E�n3G�}�つ[BC��0$p���m؇�W`#
�I��;�%�iK�:
� ���{|� �
A�3�u��げ����p e���T����H
,��`���=�ʟ�;F���T6��Un��ڍE˭��;�<��h��
4�
94���
+$xϥ�3[N��.�KGr�t$�ȅ�9�,���\=[�f����f��u9͇,L
y�A�G4D�;�W��Kw8E�w�H�rN�����{�?@6-�ǀ
Hs���ſm�H� ��D!���m?�؈@A�w����d���<�5���y�ص�Q+֬�d�i��	�,��z�M��V6[����*�X�l�,�6�C��Lf+KL'�pN>*�(��X�܋��=v��q
;���6����t��D��c���]�m���A������$����J�
(07
+̅x���Df��T�(5[i �&n�%��N�N���"<k�qD|��(?#�KP�
E�~�ߐ���Z��B��Z~�����T�Y�JM��IK������ݩGڟ��I��I�~l֋oI{���Z���>��J�kU]�k5S�0�Z�n�5�^Z��U�BZ���٭*��O�GO
�����m�Q��=��{0y��k �
@Z��3�v�&�z���	���f+ 0�9#���1,
��wl��:�q#ĀE�c�:
y�!��Й1S�cH�#GB�o�0�t��?�����f�+��^����K�%瞳?�_*�5(U(u(��Z�j�
�����*�}���t`�FX
+T�aLe�fљ���d� �J�5 Ѯ2�
Fm"��ޕ�� ��,܀�w��*�~�.�"��U�7F*t���+Fdl�_�O-��Z�6&jwx|Ye1���)l
�Cm+�� S�h���Nw��u/|�uI����ʼ������]K�����W�Pbb���z6�<�2�:�y�yHY�Y(�x{��
�1(rY#�f�l���Y�����T�i�uP�
+�u�DuI�e*�j���d�Ձ"�,T!UA&U��j�.��hrUŪ�o��p��	UHUZ�X5��4׵���S �_��ʼn�dE�Mf�\�Lٖ.9�
٠�D��lS�
k
�2�F��ΐ��ƴ�[˚�Qu�ak�Ťf{z1�������S�	���>�(]
��M�p��� �d��$��${�T1Ix����\�ڗcͱ]�'�E
��d�gg\�3���ᄟ�g�n���A
*�*�u��R'����CI�"d+�T��S�X	�BlԸX��
��BA�2���P �5��{��_8����_c������զ��|�����ĉ�
�X��b	c���3�� ��
:���X!�ѻ�l_�|��Q3{n�}���hK��l�#�r�
A��C$#�"X�,����,��sL9�
ɂ�Éb7��9�t�l]gҘ�+�WOL��<�&f� ���Vd2|n����j�����_6~.��[�w6}�|fq.�?�bu���o�����*�DŽez�e{^0>�S��yG�; [...]
!U9�R[�u���p�ºN��T;���&�׸�����dG�����3�hƛ3�v�D�����nh����
+ک�u���ք���Z�6�3�ޑk����.��vqB
"Vo��nC����
�2�:	�=b�l��k����3�
s:t6F�q(S�h8:�a�yHy
N��D
OS�s1q6���_{�G��:':+�1��3�1�l�F�$�����&
�O�
+7��Md�ɉ|1���66�? \	a
endstream
endobj
13 0 obj
18391 
endobj
14 0 obj
<< /Filter [ /FlateDecode ] /Length 15 0 R >> 
stream
+H��WM��6���e����(2X,@�d��"�=
��`�C6�[�Hɲ���E
�jlM�E�z�W��n
����
�8
�
s��\�� :��u.��9�
~�fX� P��!�O@$��	9&��0���cjD�8
�2-y m�aü��a;0�
�
+v�܄~
Q�\�����/o���rH!�g� �
��
��vv��^���3�gFwlnL���9�.��k�`�^p����HV����
�
+���%0b���]����w~yV~Hk\b���Q�
+؞��
��&�*;֒�J��{OX*d�l
=�Q�1\�jRC���
�@;�m�Xl�)
6�Pp�
�x��� PV�FT�
��DD�{<ȷ��0�bۺ
�5`�ۇ�.�m`�;��
+��ꆷ��am3�
���!vqt��G���<4p��p;���[p������6�
�G�8�9�E&"�h�-T�Fuրa�H�v(��HMmȄ� �6i�4�IcbPmܐ 
t<PT�#
ā�Cް\�\#֛h�CP�e�������������N�>�?���A�`N8�����u���1'��|R�俎�O���`�����C>�N:�E�\�:�ӤN~��yz�wv~���rr�HM-3׳�:���g���p��~gfyڪ(q�nb���!��7g��~�?�9#?�ߦ�����?�<~{z�k\�O_�=��~9�����?�
O_ǥS�?7/��ɝ�#3b��Ҁ�r�
�-����������M�a��󬃎:�](8�KL��	��4d�
��+=�VJ�^x(=";���𬲳�L�)Cp�b3QfDb2e��2c#QL
�c
B�)�y�4x=��=~�#���hkJ�@�*j�Bq�݄��� ��m1���a�6�Ŗ̄`�S�U���כ���p� [...]
+�a^�,zA�|�CC��[F����
�鐡��Т5d.Y���Y=K�E�;�A�+���.�PJ�
���9]�v�q6u�?Jw�@��l��h�$*ڼʝ)� ���c/�/d at 8��A��d#�j���Df�K~�!����V�Uș���\"{�_ �¢'�¥#���
+�
FT�\���\g�-�
�
�'�3�1
l�+�
ف����̌��X�!�Y��)���1�3�y31w:�#�"�{V䒀i�G0{ ��y}v ��D
��V	�`]{Fg��sH�)��
�\�U��T�DL�bQ�`:X�,~F@"� h��-����|���3B	j�"�L�"�V�nS)T�*��-~��^��aF9�������&��d��zXO��$=�|.�����t��=-jd��G�C�Cal�w�2(�PJ�C)�R�K�BYK(o��9�h09�}P�_
�cB�
(�
E�a0�%(쐊�[PZjT��
�p��(o�VaU�l�
f0k�����z�.��0�2W-�����I��$��ie�3�8�aףtY4ܶ2D�����r�
+�H
E�+
+_���]�)�]!��`�U
+E
�
jV�FQ�ܥː�U
�O��t,�[��f��Y�����f������B�B�!�F
�]i��
e��t=������BG�b�ꊈ#��X�1&�y����w!��oK�nYD���b��,������1#Yݛ�{�-#�I���ŵU4�I\}�ι�
�tm�œV��u86��tl��īu���K���ę��ы��͔>�v��ԭC߁�{	��wv/
ޛ}�
+��x��l������wE�Ǽ9����!�<Bw	{�@� o�݂��Bn�~�^����L�@�P�βG�C����7�߅�h��;��
�مt�:��E�n�~#^;�
O�#y�G�t��i�#nds"��{��?��U��کS�&����T���X�s{��m҆�qD��ܬ��v���i�
j�%g������g�;��
w=�c��aZ��j�;��A���u�zl�	�����v<�6�cD*8�g#��oz�c�&qa��o������_
�==�5�䧯ߞ�k��~�����O�����)�������f��s�=���S�M�0�}}��i�J�v��Ewy֩���ոm�m�kݤ��,��K��0�p��]Q
e�v�ҞMÜ��
�#ƬѐZ��&�W�
)���M��9�g]�О:TGU�P(�Z�Ya5�Z6a7�Q�X�����Y�l���5�neV-�XR���*DzNI�j0F�a���K��y�s�uA�
t�C�"���������}�; [...]
+�>�7x�P���
�РVhT�hX��Qx�6���,ښG{����9A�;@$��,�G��h�k0
:�P��*4S�cĈ��5Z�	Z�)�&ъ5Z�[=.��z��}��}
+HJ4s
>[4wfC�����o6���9X���h ���q���6����-&n1q����
����@r��j�0���O������ׯy&=���Ȉ�����
�f�
�Ri��[�4}�1���|�������j�?�zwy�g߃��?�uu�}3�_n_���ѝ�NK�/r.���3x�߇��r�c�^
�z�t��`��J$뒤Q�b��%�������
��mQ4�J
�,�I)����T���N�<��y_���Ob>$�_���̬g�g�߉��ub:�|C
�ubx ��٧`��=ؼ�O�:
���1�!�W
����S�Ӏ��<-4�
+�%���2>
#i
+�!�D��dꣷ�ۋZwQ���-&n1q���a�����f?���9��������p�����V?�O����[z�����aw���Z����nx�1�IY���h�
�"}sD��>{���߿��v0�����p��={Bϧ����=#�.ߘi�Y?7���lZU�Ѻ8�KE3L|���r�vx��Ьe��y2
L\"�FcD
�3m�~�H
��Qf�i&^/
#�,#��S���ү4��J��&ϚL_s�S’�oc�!/".N�QGր�M��{�.7�gM������}�S%��
@}�d�XR�E�)w�U�伊&�iA�y��u�
�8M�^�I�X$�̚E�L�2Ϛ�?a�wK�4�gM1�aO�H&W��]�^͓yʬ ��{�Y�
� x�`��<\�1O��r S�<k֜yчݠ �Þ˳��5�
)�\�R�T�����E޸w���} 4Ic&��nɓ>x�4�{BH2��5��"h�����&}+h�t��.C)�5��<!$}���hB�@ڶ3�k�
B���x��<k�����Ѧ��8�˹����x{���//��;:i+��^���xU�x������ɴ^�)�/�?�!��|�:���(Rt�BZ�K(��b�!���X�g�
R� ����&ӾM0S��P
#d��}heln,Y���[�%(S����1qڬ�e#�F���u�iv���(E
�
+�SH��(���#�P
RՌӌ^��Yj5� 5[@
�k�LqI��������c�
{��.�a�wa+9�,��fL���"�-��YS'���ƒ�U�.L7
+��;h���
�jK�,^on����	��(�s��Qc�M�
��(� �h�q{Y�
�q%���sI at 8��´H���;8J\Z�%l-��6�r�����>l�x� ��I]����Y�B1�8��^�:��+
.Z���
����E�4vi7�b�Jܛ�v
��,�Qn��؅��:34�;_X�-���Pԟ�{�B�YH�Ep��
�%)�
+��΅�lʌ��!4=%*騑�6��'���r;Cg�Ϥ�sk1`	�n�,ŢM�7 ���
R�f5�j;�A�{�ð���Z���ՙ� 9��L�.agƄ#@I~/�XՙЗyk�v���+(7Y�nawT���'C� ��[R��v��*ĥݵ
v�
Q��-���qlh�t����FI�?���%��l;7:��s_d��Ė��3K��<����B�;	A
wf�UC(�g'��4�u��
�)E٧:���CT��M�Gj�g�����e�I�S
[E�zh���.�A��pn��{;�\ ŭB_�yn[�%W&U�
���H�7N.l 8[��|z�>
\e�)�f�7�K�v��5�w���w/^]�Lt2H�� <Ili�a� @T�yX��a�������)/��g�4��u���sM���S�'9�'Y�j�"I�$0�������-�^c�����(��2�V�J3��YG�Q�"/��@�:+�O�%�^SX�
�d��4�}݂����qus8�zq�z��޼
���±��ٖ�j��p���
�>ݽ�n{�"p�n
��NC������p����j��|�=lۉ�l~����}�:0frY�M����?dHw j
\
�dQ5�ڣ%m��p#�.�Ir��"�>w%u ���֎c/�'ހ���i���WC��T��$�dv(R�&
�� ��ʆnO1�Y�e�8	���I�f'v�4���+���l&�{K�s�hRͨ��򜻖���:��ķԘo�eP�3)�3� [...]
�]1ۭ�4pk��=�HIW����"pftFW���CJ5?���,�.�������/��%U7�.����/��-$�-�'��@�S�xS�y������<���������ۻ��_�����W)�iM!��$�협<�Z��9T_���Ї�ۜ6X;a����y-�����N�O��^�ULx�C�z�ݵoM�5އv�\G�{⦋��d+&#P8r��Yt���i,Y`�)�fД�
^劥԰�n�~��M��u�A���0�;[�L8�ɡ�Vɸ`�
]�0;x��m�h��tO���%a��/A��̀"��I�T)�Q��e��|���
o��׺�F�|������G�(AŤ+э����bƆ�s��!�I��20=�,<�ȡi��$vRZ�h�\r���lˇ'I2�X�w�5�_J
w�m�ɔ��H'߮�f�a���w����Ø�-#���t��F�tN�t*
V�
���T��.��[~��ǻ��oJCi�W�͘�����t��BgU���qɿ�/c+8tJE���# [...]
� � 5-�������Tc���Py>��	e4�Ԧś�O18�!Т�
����3$���3Dd�3
�1���
)�@�� IHDU�D۔ũ���Cet�{Q���DG�4�
���,��*�?���q^�C9t��`�@�+oJ�޼Fo�>���|�Lsü��EJ0*8t
4W�.pF�*X�G�L���G�T
o���%�VC�d
��\x�h
+��?����@Ԑ:9��G�
d������>]��|}����]�c�(㐄^�C��d�[���e=��L
:6;��O�k`�&~8�Ҳ
�-���p���XB
�"�!Ay���"��X��5.K]Y�a�\'XSe$�nT��~�����45�*-U[�%m@,��ONY�^
��D�n�>)��
CX���קD4�&�L��-˒n戀���#�{Y��j`a_�i���#��,w
Q�0�O��@�'W$߯�(l
+C�T���$9�Fp�EBx)��3��{�5�;�6Wo���d�X�!`p��U4G�0������5_�#���p'E=p^�)q�t	�]�"�[���Z�����I��q^�x��t^@{x���$!�em2��5-���
2��y
>Z�(18����@
y^{
L�?j�>���YtA/�"ߢ]0�
c�J�]-Y��4�x��	���=������?���
�˜:���ë���R��?~��?�Y?�z��ͫC���D�{���ç����;�ƑPV�n
Y���"&�h�x�Ad	�	���^!�!���z���'��.a���(S��f���&�0�|(sf}��mc�5�"���6 K&g
��%��e���rqY����-�T@	2�����	�����}�r��E�n�:F���%�2;x�}ab�O�u�������O��ƃh��8>����`����I�^�(�l��
:��
+�Jh��s��z1R1FI��VГ��+#��PM�g�6�X���+f�-���D[S��T��;��FzXTL'��F�˵*�ğ^�!�5�ԲnU
�u�x2|_ڼe
\{w�����)@�Ay]%E
_@)"���D�"���W�Y�T3
+y彞"`�
AE�$Q48F�2����*�
��~�hbi�h`L����Z����u�� ΅��-����^�V<�
wm3����H�a�dIN�&
+�n����S��s���s������rE�wi��?C��&���,�Q��.4�ϷĞb�	l�.��,�)t�Fc��E	0��$H���e
"Ă��r�˜B���
�3h��Ɨj/`�wD׈���٢��rE ͗��|3���$�}o#Qԇ���\�,
�c
+5b�L�����\�DzKx
靑*w�J���$�
+�
�J<���V�r���V�X���iK�-]oq{[���F�fZ6�[R�a�P
;%�K�Nߞ�DŅ���V�/���}��n�t�u���|,R3+�>6��A�^����"�R�\Ǖ:�ѠF�~�:2O�A�A�ѳz0���3l�!�7��)���f���u�A]��D.I���HF�,���.1���d�����
Dr+�_%�̶-/w׹u��������D�x~CXcNr�fZ5t&7��U.��:�����R0��}s1�C{�)&_�LQns$�v���W;���&L�b�Z�����ss�
����|�~I2_`)�z�6�Ilk]C��
����f�jƜ�.;
�!Y[y�
+�"�s��(m��#�
Nn��#�6ȷ2��ݒ�%��&���poU�Y�x ���S-�ԏU���XaC�9�c�
�
�Z�!�k���6�K���m��#����M�)
�d�)�m��i'50�&�q����Ѥ��s��K����
n9�'�iٟ��]�t��
b{ɭ�yCa�j���E�W��1�hK�[�ܒxK�]�oed��%ϛ�]m�Av�fӔ���m<bN�R?S�X�Հ���T<���l�
U����WNk�?W���pY(�[��&:W�-۹قU�q��?I����K�Pט��
�_�י�}`S�'�Tmi
e$�3��[>�d�% ���B��
+�fe&	�P(oԓ
+�cҵ<���I���!j�&BP�!?c�4�P؂X�ĉr�>񠯵��MP��7.�9N�k
%��C>����A��g��}�?�-|G����Tf��jL��
�ͬ؁�|^��U),���ڎ:eϭ,k_�I ׬}��\m���^R�
DC��'�:
�cM'����䃄����!/��
䆏G�2��:�a�t~#����`'>��>���m���U�bWrC���o3`C�S_��de;Y$t&a�C�x<��:m������Tu���%̳\W������ɻ�(g�:bpےׄ���%
{_������	[�
�Q����,�7A�aidxE���U�/���Z��mpR�7��Ѝ�j
K�%����Y�/�f�
�4��
hY
$lɖ�Qy�=S�|8��,نɨB
�����2����I��L�~�#�D�U
+`��!I+�pn��a�{�+xh����
�B�R�'�U3++HE��t�֝���ϩ��`���,.L�
e�l>?��,���� &��������*s�g�o�
����%�
wMg1ݤ^C6����:䩃g��E�/TiU�E�9��� �s��rGPr�
9;=�Ƹ-v��O�ZqOY��<� �MO,����_�����.��;�
b�۶�I�Ij��f�M�3���W6��dܡ�h��]�G�0����mz��43u	�T�l��~��1(6t�H���1z����8��^*Ūl����m}���<=�ړ�?޽J�!��f��e��O�=$��TH)Z�*D�H],�B����(�]�_^��_���/��qf,fɄ�%�W]�j��Q`��4
+9U����qM���
+Ǒ)��\����l��-�}+�n���Z2�Ъ�KX�z�`����=5AnD�5:���\�0������v��u
+��q$��tF��P*��4�, �
�R��V���
�5zW�v�&.E�-f�|+
j5������G)�
+#�̸
��I��2l��9W�nT��	BO��޳8w��Xw�%h
%D򮀊@*�w��Q�T1c�_���KX/�s���
})�ms�ges��fL1��*������ ܶq�
�?
�G�i*n�5�
p�C")�i�N������0��K]B�[z����D�b2��*��MV�'���f�;Y��{\'5m��q�e�c�U{y�t�p�a�05

�O��mU�'$
R�y&�]�
�(/��j��u��^fU�C�w��0���R
w��v�8�7䮯7���6��U�a,�����Qk1
0���Hkȭ����r��wo�;�	ui�-g�rJ
&꾫7�_ÒB.�͒��$�l��}���c�
J�Q�a�
�+
��͏7�������o��x�͋?�7���������o
����<i֗�?|��ڟ~����u����szQ�z���ɧs1�?���?�׿a�|
+�?���Os�	g^��kW��m@������~����%�,�T�`_��԰�R�����Ĕ�n
���\�X}L���6
�!"�r[S�͛�^�?��㻇��ܽ����[����o!"��&}v��o��>���|��ݻO�~yx[?;��
�]��߀y�*03/@
&)���9�(�_
�5��h����|7B�S?�K�R�v��A�o����I)�{t�e8�v���d*����S��CF�KI<�B~D��
+��p��y�Y���d��L�g�C�����i��zc�
���ۤ_���!�kv�QUd��Ԟ��Q"5u1q��	[4خ�pIć�w�+�?�Bxu�7&�(����GW����J4�:�<Rc����`CSՀ�-
�^�l�6r�C^s�ZԀ����P
���t7�T�=8�#�K]
�'�c��8���a.{Cӭg����-L6���QگH�.?2�����6	]���d�&`�aC��`�2
�f��΀�����3,�
-&x��3�c#��X�6Ј�
+��'
K���ث*�F���b,�L��
x�~@�R�D�P@��-�MF}�+r��Y�JEC��
FkyH��A+^��|�	
��m�';�[/W�
+���lT�Y�A�ᠲ����:�<Ġ:��ܡ؎YxM�!�
QfL4y���,
��*TÎ��	��5�A˷]��}�j�:#�jnJf�9O�
��nL֊1gv0�؝�l��Fx�Yݺ�*�k�+
_�q 61�H���1j�Έj
^
+�Z
�1�5Ÿ�W*��
�512 at r�R}yy^��~y%�1���AP$��)��
cZ����
C���
���p��pI�V�Q�`�hΐpe�l�֐!v�B�_h�g'.0[՜��p�����#�8 1\,x+=�o>N
T���e�ö%�[�=��d�*:��Mx0�	at^ԁ�]_��?@l6�����j/l�4�Y���Tkutrm�uh
����.� E�)�2U�M""�����Ҝt؜���_�� ��G7:�}ØNUՈzs�e����
۵9M�<]M�K�DY�M^=�q�tUj��Y
 ��R`c��w��3Lu�Ś>�Y��l�J
_��O���=��2wq#�j���/j]�(V��E��-�K.{�B9��
�q�JE
X|>��
��BW
�t�ps�B;����3���/i
e�Y�[헢����ب��X8�� ��B�D)Xe��ZQt���
�耺�2:�o
�F����W����B�i#�
+	}!��L�bסK��oV�8m�����^�IX�<��+�����2��߶�%�O�]������o/Z[��:��^uT�0��d"�.ͣL�\�0iNY���\��XM!h�ˤ�Ί蓐8��
�&��=�I��I�2�r�^5Z��B
k�8�M���3�4��p0�!:�yg
y�}'=��+�m� V�"��^
7�aQ
�}jyL�nī�:

+n��K::
����i���ea��0@��<�zrVb�ƶ�pj�gc������`t)�/�
�-�<��� y⫈���Ɋ���n
��X&���������s�Ո�HW5�Ӎ�(t�+��"�:
 8
�����b��Z�ix �ꁹ���(���R簣~�� �|
V���^���H3eҘĞ[�3D+sy�����7 ��Һ�P�/�U�,׮���@���������A���G�?pč����y\Y4�j������y}J�v��<L�����zG�[OI������t�5?�*hB���d"[��#WnϢUa����N�y6���<d�a��r.p��J�X����i�\�q]
��0�Cp;�!P����� �0�[#F�
@�z2�Y����Mp�KW�7�z,�{
+�$wk^��Zg���<_��O3%���s���Z�ȍ�+G�s�;���)i�UC�ly��Q���풣
N���Ǥ�p�b�֚<�������-ȓ�\�0��Ρ�gn4��m��-�4h�y��ݧ�!��_Ms�4H��p
p~[���0��7�Wo�I�7�q��~�/��L)I����
s�{�=�\}�t�/�
]K�Ϳۑ�N$�[j�rg��'��_{���4�K�r7�
+���p�͠ͅV�lE{�G����xE�[d�\2|#�|]� �|kԌ
+H@�3xDZ��l�_ڄ�����;{}���[�{�:z����@�
+�9��w%�V`�@����ç����ǟ��9wb����Σ�[, ��VJ�{��4\�[f7
���
U��=�:�,zH�
�ǔ+��⫒P�0�y��Χ[N����$;UOI�w���Buu�5
�X�n.��z�q��6��
+�hZ��$�
x�3ĶP�,'��{��~86�DM�{���+�{����
Rü��$,׏�[+�a�#C�FU��ԅ�
+
g
x��$���ĭ!ܖo�VJ�m��s��Hv���<}����e���U8V��Σiƥ=��Aq�C
t�
6-����&�dE��'j+�_��MC[L(@�ӫ6�˕~����?��ub���De'���~pS
G���{}�f� ��˷���9�<�^�5V�0
E$�o�	Y�8�*�'�u�Dל1ȯE~�V�)ck{t��y�G�^��O�~܏��bNZ��hcV7m

���x/�6��X��q��cV��:�jБR��zw��l�WC������֚m%hۘ��
+"�I�a
d�xp��6��p���X�oN4͍UȄR��3L1��b��0��1R��b��=�
ֺ�†sO�dZ�m�!"z7��{W@�P�t�ϠTЬ��z�e��@�,���CAGd��l p�&��z��k�KY��S���
�'CƏ�����|+�	��ߺ�s��A㡎�4�s���")��E�b+$!_��_.Vn�
�
���ΙHN&�J��m�	� r�a�f��(��
��ERl>T��o+z�j{)����
�
+
f�@�����!*R
+�F|�|�Ҟ
c1xVB���?
��r>��=�Z��j�!��
P�n����XL�\�m��x�
+Gdb�����P{P�az'��
+m`��b�%J�C�(k��a���
+^y䆭#*l���ûZ�@2�{>^$=b,
lLy����[G����� yg���( }��Bu�����E��qR�&���Lf��E4�x�oQ��k����t�ˀ
�
��:� ª���̩�F�
��{����c;z4#�����\�3����q�&Xt�_/�
ls�"����ǥ��{�5��P�u��N�Jc��q���Y75ɎfBa�JM$ %lfΨ�4\'�[���anД1n�f�����~����Ѭ�r<L��ߛ;��NҔF�_��^�},rF�g��ME� �&���l����h��pDC�u���/��{\�
�0
\P狿������ε�ݐ�
�
�f���3lK��nz�H�㍎�
ޫ����E��J��m�����~�~ [�
�>�?��\U
�~|�ŏ�Ɍ�qP�Os�)���CRn$z'F�'hn8igL
�gGiS*�/�❵R��ܩ��{w�~֡���@�Hw���
_����0��p��{h_�dR�yօ~�Z��Ȭ��
�c[�������W�������N5�5�e�
\
��]�q�'M
(�`��81.t"^��$��`�
++:��s�jD���n$�������
+{"L)$}�3��u孠2���U|n�ߌ[Xq�fv�������G�4I��<� �˜�
+�b'd��W����YI���
+�ώK}e݂,�Tq@���vV�#)L�zrF�
�6 at U<���(ǐ����zxO:���(0UJg(�:Y�?��$�	"8^1
̩���e6�V͗�;"��quhr��[�jS�)��5߄92f�9�c��v���E�[w����Fak3E`�]Q�����q�!j�[J(�"�lbQ�

���y��pBE�sd��X��x�Ȇ���s�N���"��
.!�+p̶瀠`'1x�3*�lE�m?��v:����f�+��ȷ�72�b���-[�
�p
�M:��M%��}�r����lR�փ
DL�$�B�aI�?�8L�M�ؑ�>;䅇V�X7(�ߔ�jD? �<�Lp����z���o®[�� �'_kC�g�DkN��vB^���

���j�#8;2��7h�,��KA��F�I�͛{u����'�aO��d����rz��N&�Z
+iT�懸���ak}�_��]�),���2����E*���!K^�YA����~��+��������q!T�R�M���
[>k*�/s�GO������P�Q�w��H{�O'��l�n �E���5*���~[�$�~om��h�i��UJ�z���:!�D���
�9��[����>��3 �穇
+�c���g�-��^�g.�+�}�>�o��x������� ��@����b�^k$4�
|���}���P�Ik��G{��Xu���0	HF�V����D� �d�`@B���S]u�/�@4N^pԯn/Uga�bջ��sB��`1�ŵ�b<-���K�GR�S�Q뉶
�w4QX8rL�
�V��ǫ�>u��`	M'_r���
V�� ^�r�� f�����#e��v+�/M:&�'w�GMB�k�o��gj�2Y{F���m�޺��iiq�"�/z��9 Tqp���6vk�5��L@#QYE_��a����
�����J&��
�|
�/G�|��&�DM�p8�X��r�.ϒ
/��v	KL-eK(�����C-�\��k
���� �W
��,���
+���k�K�
+��:%2p\�f7�F���؈P�͇HR���4TY���%�ɬ��=��i��A�[
ƛt�����A�Sz� wB�`���o[a�`��� 
(KqёD�]��r�jZ츺�D�y_"�Kx���)�%<�x���N?.����-�3���8�v�5f��Y�
+�-�����hG�<,r�"굂�UΞ�B�=
��-s���1�
+J�v�n��%-F�it��z&/�����M8@�8����\��yG�]�<Z�^(=��,f]8y'C��� |���9�_H���
G��V"s�"�n7p������ >U�%&%Tƞlv
+�+�$۽�y���P1#�b��^ln]
D#D��S }�/f
A���%�?�
#���]�j�}�$�*�#�8��1�M���]��S������L�K�����+L���K���_Ť�Đֽ[�RaVg��<Y��Ɗ@���`|�k
+�@�>�n��0��栄���m�++�2�>�A����O���)wRM�K�C�����N8[�'�5�u�?6��Zp�ĩ �.8��c��2O<r
��hdo����+��N=/�"mښ}N��-�P��$Z�Y|),����3�nK �#�+>+�k-��
�4��p���QH�}
�����xѦ���Q)֨ O��0��F��[*���NqV��y+
+���:�
�/�6�����^a�&HoI��T�$�U����N�*m����
Jy��!|�����m�ue];
+H����&�Ӫ�m��O�{�fN5
+�	�����=������v�*3�B�La8��������x�.a�
��h��<
������#�
�s�z��<�8��Q��
lmp��
�"4������50�
 �'�h���RcrY��%�O3^uYV��S�Q��L>���]ӗ͙�
�3�ֵ�������q��]�"F��Ų$0�T	J���AY�	M��!�-@�NY3ߘV��2�g\4�1�g�}�t�J�t
��kD��ڜ�Kpb���n� �m���p����\FQv�Nw {�z�	xZ-��
�^�I�+*�.���wc��a�r�ro�pf��O,>�J*� cT1�j 侳�"����
���y�Ԩ�m
�)�������tK��t
��3��>�m����1�\��Ԣ0r��Xh=��ճ��j�y�V{�
J�9Y�s��l�d1��l�.��K�
��[�_��mږs�ge�݃q0_��'�qi��v�G����Ѡ�p�9=��Bz�lb &�eghb[z�4�bT,j��;R
+A�kS�U N3tҟ@�@Ƽut˔ž��=L_ܬ��#5�oɅ��LG�_��z�x�5z��82�L)*st-��h3�`>
)�9""�N��[e8/�O={����/���p����_�����O�߽x��
��������_>~����۷o>|������u�˛�u���~��`[ԁ�#.��V�t�=RX<}�%TC>��� �\n
���p�{<G�z�
�5e��V�GK���[.� �
ۢ�
*�
+X�������ң�]'��\�!�\2�>}����F{��ћyD���7X�yUQ������u�3�'��
�T�Q��oyx�
�����ߩ���1T����6:0�u9<4q��nԐ���PbR��+;V&ɭ�poC�=� �J�A
endstream
endobj
15 0 obj
16389 
endobj
16 0 obj
<< /Filter [ /FlateDecode ] /Length 17 0 R >> 
stream
+H��W]�
�
}7���
ٻ��R}$O�$	�6���1����g�����T�s��f��x*�H:R��q˧�RY����~���B40���5������*G�@����N��
N�VNT��+
7���@ž�3-7����n�u��o��fK��҉9����3�N5䢇C-�
�S(I��Im�S�Ŝ�J
+ҩ�
+��
\���1K��y��D�l1��
˙��ʴ��>p
��v#"���N�����fc��BJ�	��-ה�0[�a��n�e
����Yn��p
+-mh��Tc��2G��ϙ�ٍu���,6=m1{ܐx;˹�� �^��bP����8+y΀'�v?�P�0N��	y �� ��VB�QqO���,,��1D���Q“� �̷@^8��{��ɥ����-^	��5;��@�'��Rbt�bQl��bHdTPlݮ�3i���z��9�K��
d0o�"Ǣx�����F%�b
8b��
y�f��~��cs���UU��JڴU1=̑X��퓹:ؼц_Ӆ��Љ8�`P���P��О��J$�V/K�\e��5n
�T�Uʢ��&x q&8$��P��BZ=%%�g,�b	�9-�-��-=�p�uEk�MA7y��V�g.ћŤ�@ج6/��)�i
-n
��֢�P��:�*
`$�Iu
UF�yg�
�����Aw4��@ӹ��'4Zv�����y��ᐌ�`RV	��3pH��VH����q4�0)�3���Y�v=�eh��9j�g�)q`��+!�d���s�E�ϫ���~�����n���x���O˯��<}��+���jz�|�����~X��|������o~�#��/������E����dX�w��HBЦ7�|"�żd���j�ŒmM�)g���J�!��3�x0�ݡ��qX�.����w'T����4}
�L�GB�(}
EcZ�(���6���2e�brT����jC�:u�VB
���X^�
+x�v����ho[�� v?��
W\�c�\w��Ɋ\�tOv
+lNخ	v}��	1+�k��]��\]Y'�^�n]
�Y]
��t�(��ksq24�ԧ�H��8EԼ�)�s4��c1��䂶
���m��ȫ_(z�`��1Æ<��z� �9G�ո$;�<{
Q�Ώ�8W��(H�����@T�o�k���)E��
u
+����(8Xlk�+�Z���iK�(]��ׇ�Xs�T�x} s�cU[��)u�a����T��
eVj3���%zU�a�w�1���c
�{�ڛ%)G��}��z1�3�h���s�+{XYd� /N�
�ݶ���|q-#�ѕ\N)˨�x��lٶ+%���i�.�&�G�m���h}
4j<����{՗gϗW�_���}{����_~���������w8&�˷?��{�?���O�}Z��'ay!?^}�z����O�����O�����
��Ӓ�?.�GX���_��f��Qk�r�7��
+���B��Cp�廫��N]�3~`&�[<.�*O� ���؎𷂎�ɆA���Փ�0H���|��[��0}W���T�*E��ZG��Kx��Ꚗ�u�:����xB�q�k]�v̤��h�2�i>S��*B
�gh���R�" ��\t9͢Hl`�.a���@��qR�C��W}���1�C/�{���[q��׍5�V9���ƻ�핰'�V�B
���'�w���G�|`��W�"�x���"+�L
�����P�����6E
wO� �v>�T�YR
�l1`L��J_d1�Q�طO� �졫
�\i��Xu;B��*�|�u�qt����҇UJ	��S�f`��px�'�\&�y�����mX[�N�<3�h��}F?�G���U���Ɂ�mV 0qb�a_֮NJ�,p�
x�g�e{Ui�Jy�a[�htI���Yf�	
���`�
^� /2��ʵ<�s�G��x
�
+ۛ��Y�{Ҽ�"�m5(n%?X_u��4K��(��f
+*��o��K�l�}
�3~�%Z�	<'� #7�$l���{�tl֙����츂cH
�dphI�<ʷJ�%_ȁ�����8Bq���ק�`�nK^��ӿ9,��ǵ/�
�:Tk���������p["v�9�*2pBZ�S��p�����8�>��3{]8���\�ڜ���
��0�G�^b����/���	�#$?m�d�7��i���X���A�c�`���a��
��dc�q��x��5hI��!N�uEz�U��xP�X�b]��C�fŚ
��6�]Џ��]_N����a����
�1;� 
�	;
+�+���s�K�)�.�9�C5�
Ŗ��Q��yҏ�
K��� y2��
Qۺ��!�%QCª�F���.r��Z՘�-�U5�e+[�Xl���ܽ~�T���Rf�{�]?� �ђ3���=���׏�/d9�N�&l,�	@O�X5��d�v��\�ᬩ�\)5:f�
{�:x�����ix��Xd:�/����o7Nl3!t5\�™� m":�E�b�~�|����b'�
����j�,�pa۰��Ԏ�
c.�\h�s��?S8��ܦd2L��0kX�!�+^�Yí
J ��M\Z��L�����7��}��w2^knG�SW�e�څB��x
<O��&�� ��b�\j�
]xԮg!f`
l��ƖRW�G
.�۸˜�)!�Q�,�e
hq~
���joI
���$�4*
+V��G at V�c����X����tB�	���ȋox�W�Nh���b5��m�L�.s��_�z�P<\,����^%��
Gt�P�P��y�<,��
��A��cZ-�z!K��O
�u�f�g�
�{��f�p�ĉ�,j��W�}�����r�?��"
�x�?������X�F��P�U�gv�%S����I5r��I�`�y�C�l��C�T��G��:w��Wf����%�wT>��;C;��N�5P`������w����I�K [8��]ⴐRT'���'�,]&D�FZh[�Ig9�҆�y/k��gH�|���ęC}
���i�����O���6/�q�
�t�yp<�<h�� ��)�rXY�}�V�`�[N]���F�dT����$.�JD���JF׆W�
+.�
��\W�}�Y�%���|�ވ���%ъ��S&)�E-�r*B�$iKc,��0�[����F�$)-��d��k� Pڼs
I�^
s��*����Qd��W��zH�&_�̾�c<���
+{�?Z��:�=�^���k��Q�ò�6���F�(�ٻ�\��ő
+�$�/F'mm����B�6e[�r�B_��v���؟��f����!L:���d�7)QLs)!������$Z��}+1�	�}���B��ի����=�
�S�_yU��=aL†��n�C�D*���
�i��qqi����[`t{-I-Kyޓ^+�=�V�:�KՋ=�LAm9v5FQ�57
+H�/�Ȅ�8��a���{i�5��hI*���hV��9���
5����(b���,�ŝrrE��3У���{%�Yn���J�[-����<%
q�N
+�ӿ&;B��"p�Yu�d�.�BbN�1�͒s�)��ŠgSԣͧ��:Q#E������d`�
UW��ڻ$|
^���ۋ#m*$=�?�s
+"Pe݌9�S��Z��_�{��
#
����'�is8.
�0.M[冹?�ί���Λ���0��+�SRs��6Ļ�+�ɶ
c�p��ā.R%wU^HU1�$TV�߻��@��gw�n�h��=ċ��fxO�A����D��{��qA�fw�En�d��D��e���R�'s��3�2:{װ�a���d�1Lv1y���Q��-���R
�K_n&�1��1���S?����קw?���+$^�4�x�Ҫ�,c$
�u�C/�g�f���b����P�z�a�7��ܓ�B��b��p0FU�աnF.o at 2�����SjP
+ʗ3 ��YUc
+r�6�2��)�S%��]��P��'ٵ#�!����,�d�Ec��]'ܒ�7�S��s�n%
��S����NhC���w��MT+��B�
�"��1U��۔�u�ש��Ȫ�h7�a
�?F(;
Y�6�>ߑ����AL^d�Z"�<#V�e�8o�J�8�j�XKҤ88�Ƣ�֝�2�W��|q���2l���
+0F��0������?L�TӮi��c�v!?3�W�L��2�����h���Y�\k��d��ߒ���cm�kF�
c�כ��*j�)�w��
)��8م�T�8��͋�؂����]�{+R-H/�
�{}j����<1ej�nci��W׹�p���*eHr��-��(j���� �z#)ú�
����
^����cU[ݽ<���j��r
ۮ����e\���u�W\� \<~��K�������k��Qro,�fK|Vd���.@��J��k3 $�oI&�B��"��~,�
�M.���� ��5P�
o:I���r�F�����o����b���@?c߷��DK�]�}��Q8�7H���݆�I�+�2�I
+^�u5���>�B�\||h]�zF�?����Q['�n��o��|}���W&�
�H�׺s��!��@�gff se7�c6���olyڣ�M��Y�|
���/7u;	�a,u0U$�cc���M��jy]ޘ��@/!Y;�IN����֑�"3<b�����7֍�
�J�FW�>"*�iY%q�O$��
+�"�Eн�[d�(�Z��a���!����
�L�\\�2*�(m���Jb�pE�Qל�u����JH��*i�\<����k}<�bw
���|�+�8���u�	���0�,Y�� �k�u��ͼx�k����%+G�{H��@H\�.��P��+R�a�׍ �)����K_K�^��J���% �,�XKsݥb{�������G(�	�
j�۰�&�F=�$
][9�P}5���R:E���m at g=k�B3'e=��M���ъ�r�|�:Z�W�Ei��
>�'Ȧ�����
+��PN���"s�����9ӛ�SG[&�7�c�9&��G>	��˜���8E�D�g1�h��R|xb�o�
+"�.���P��N�M�,��L�v�k���HG�B��Y�
u�H���K�Q�*]hB��zu>�_I�.����G��I�&���:,h���RT�j���	���²�\縉��+��2�HǓ�wX�0j�i���y���4��J;���3L�wMY�
e��<
E3���R=G��&/���|sU3�9*N�t4�-�	�#��9�
S��R&��V�G��3�lV�56[��$�#F5�����z�$
+�Rl�z�G�_lA���Q��r0�!G;��R?���U����C���Yɢ
$K�;�WM󘺁�D���#/y	q7䡎�5�")U��/�
�6�x�
H���n{v�v*6ЯgCSf�`�ab�����
\�(K'VE����]�/��<<X��J�u;��u�M�,ߏ�
s�y���g|)��lzvyFL�I!Ps��R��:د�
�й�{��0��J�f���w{��ɀ}D��Rb׻iiJ��"'s�6a_x%�-��
��0��VЗ'T
qc��ó� +=u�k�Y��� �'Ov4sv,O�@�r�Yz|M�جB�,���ʵ���+��Fj
2�Xka��
��ר�A
͢���� o����I}+�Dk�򷧯N������_��}u���k��o����������ᇏ�:�c����O�������v���;w������ӻO�
@��?�����?��tN�?���7w�g���È
|���,��p���n�rz�}h�6~:�G"G��tM�#�1@�+~iy��� �l	:<Q�#�X�� ���~wp�w
+d��c��_:��x5���Y8�
��mFmJ����y�#�%Q�y������==���^--�^7po��p7�dc�����,nHB3䁧	����}�Tҹ��۫�����|:��T*�
+7��M���
+�gL�ض�s�R�_U�(q�k�w��L�9�7�����t|�:�V����}��;
Ƙ\tb}i;.�������0]�Br�����^��U� <BBS%q3�����F��Z�^��œ������(������$���C�|�o��K�R��3!c-eM]e�B:
�N� ̪��b� ���M�mq�IL�Lt�wqXNT>��[P��e�X�_7xx[]�1��8��Z!�[����d!�%4F޵�:�%���K�c���8���Tm��>�F-�r���<Ī�P�[�
�5���b^
/
5Ѩ�:�nƗl��*�ލ�Gx���d��C
 �����k���c�
S�-@��^d �n�Q���t[q	0�2��F<�H&�A�$��/�7�*�U";����%(���
 v3�� V2��k[�;&^&��e$���% J��Y�
+d�nc1 ��h[=p>����)!��RWh�綛WC�C��Tw�-Ņ?W=�8��_'ʌ��=1Å]��h!� 
+�.
�W�b�I9U�Üg��9s՛�"y�˶�JGӀ�sN�;���	.��Ne �u��J�m
:���rD��r
萒�b��2��$�f0����2�
�R�-s�i��Qq#�&�Vԯ��2jw.���w��<)|��tz�HJY�a����&

��Ýq�'�M�M����yS�
�*;�O�޴�b��T
�����|��O2�&'!����^CF��W�Y�����%Co�?��s����GQ���x�����X+P��y�j:�coX�
&
+�Ϣ�:!��HQ������}���
�j
���IK)ێںᇒ�90$r�"42b��~�<z��r:��s�4B
��T���x�iq�/���d�5�<s/���FV��N*�=���E���`�q�(�[^���r�;�d�*d�^��

C
gKM�:
.�7�DA��U�W2�ڂ��vƞ护�b�N��u�ڂ�n3�4�ς�ɡ
㥗bi@��C&$\n�W at 2iT�X�,6���%@N0���Ŭ�&��=,�	�bH1�03k��.�f�W2�g�饌(?��
��2��
�eM���IK��ڂu3/� dڶ�c��]ժ��˶<u0�u
Tq��
;��E.�-�
��b['i��w
�<�<�f�w��y���
��2���T]�DŽ9��p�K�@[M�LY*�u6�3�am���ŲK����;���i>��ʿGDÄ
Ա�*��E�0E&p�;Li
��(��"(I���-
�KA��@���b��Pw������!�
+�$�YA�;V�R����g\g��I�z
c�y"($�U+n*64q
��U.~�^���T�
�l�c:tFl���9�rX�=�F� ��98�A#�u���?eC)���
`?T
�d�����a>�2IU��TmM�[�b�~Bֺ��'G�}?AW�SE�N�c���:da��0��;
7���Ӄ����W)�bX#�
�b/r��$^
+�#�tbJ���
+.x�&G�,9it�:�b7��gy�m,<�z0=ʥ',��?��/��1��3l�Y���:���
���2
?E�K3Ƨ����\�1�m���"AlU-��˥�b�&<w#�}�o�
�0?�ӗ�
�
��v �0؏`�\^��
(��S
��FW|��\⊓��}��ƛ��^?�c�
�e!�Va�jof[��x���;��to���_}����>}������ǟ������
�2�ۏ���K���==�����%��<|���~������.���߻�����ӿ��ti�?\���t�����
��%p:�9��@
��0w8r 
o��%> (M�\_��%���Ӄ��#����{���U0�� �=%���Ȱ\
+�8��xdC6�B��:��c|�I�s���k
��
lP
���
�	�$�,0�5�A��u������.�z%1�֣1�e����,�C��)����bK���-�1V{��!�ǰ Bp��QX�;��ª? �B��
�U�h��rF���f i���+^��ۄ�5m�

+t�
̩;�ɦZ��s��S1
|�t\
�@ �*�8义�.Qkx�i�^=�
g�l���M,���XKx!N¦y;A}n�CBa�5
����Y;����F��(�7Rx�z��5r�	�G_R������6��ԅ����q�+e:�ah���uf���6�a�j�Mi6e$:�
ӱc87���Dҟda�kwӞS`��������k�9�y�ٟ���L��bښ��nn��M�0�h�SPk��� b���&�erg��՚0��0��}�
J����(�(�F���s��r�}ԟϻ��p5��r=(
���

k�0��[������$�b1`��
�\����]�O�
+���~4V�M��Y�\��y�
�[%:X�Vl��2�O��J?�����&��ᗁ���X�K��Z4V-���jZ����o�u{٩l�)�q�u���k>'�)޴�S�!g�O,
Dž�f{�b,���,~�	2�:|�ï+=;kmYڒq
XS�@�7Fe�F
(�J
ã�`���%��x_�����M�8���
�D�޼�Y�ͫ�ؾh�uT,���{�G���=
��N�D`��ۣ�����jo7
>�й�
�����ʈ���<�m���,a{�e`h'�:w��!����N
+�2<j��
���)�`w7 ��wIly��
g�q	|�p!�|Oߏ1nv�����]��=�z�
�����(1��
��E�\6�Z����M'4�U��ڈ��X)݃�X_F[�&� �)2�m�
�/�U�$�®������z�s��s��F�zzz��Dq�0I4
�ëm�aD�w�
�z�x��
+���`����m���$��d ����j�t�=��NI��b�
�6"��
��q�;�Z7{"l�(�5�D
%
L��0�2z�9F��}��)�5
�.���*D��.�
�����Xkp�8N�� ���6q�y����
~���/�, 
>yv��l�r�
zV8b\s��D�n��UaV; 4'���a�a�5@:�4����D�F����U�&9��F��B�]?�ʻ�3�/ҳ�5I�#pAk
ֱݯ���N�H���]�ȗ��I�� ��*1c�^\�$�m����k��`�+A�ƽ���G�9������0��9�� �2�	vj�掚�T�
xw�������O�Я��譐�~���PZ��	
F ���\67�9t��wF>�1����is/;��KCH߹G�+WGм8)�NV�͒�y;#�w����k ��%�h)��_'_d���̝�>_�qG_� ʵ�z�iQ�y���b��'�� ߊP�q�|<��j�5�����n=|?�� Y�_�Y���,���
a��
��Ne�<�;���2¡/�������0���A來{�a�N)�~7Pv�Œ$a����h'��d��s蠖i�HY�0
9�.���Y�펕α��_�PNJ�Y���y��hW
��O�P����"{��h0�BL|� :��x��k
=A,5N*MkQt���]��ug�!h �1�����u.#�+�
#�k�"*̦&gdZ{�^��Xy\OA��;����\���5��T�(�F�ca���0��hsI�;�ʊRE�����־��?d,��5L����@�2��3碉����t�KN���Ǿs���൐���bb0�y�aeb�(%btM�>��r�������
0�
�s���!��I.���ݨ�p��n�	�81��e�Q
��K�
V�k�k�b�zd]>֡*���X�Km�X,���xg<o��
[��&���gn��.`i�vв�T-_}&�@)B�Y_��g
`R�6�����$Ly,�s��j��N�:�u��R�[�����}�!�=�Az ���IK�
b� ����_�eʆ��b�sU��p|\�u\�]/x��A:��7�&��b��y���w�vsq��sq�&혚���Zv��96x��T��rY��.�>�}��雁�^�
+�%8$4��v7������˨��T���f5���2(K����RX�M����l��[
p���6z��

P���Lo������ !1���
 �p��S]E�KH�E���dP����X$����+��
�J!	��U��_|Lᤞ �}zۻ[D���K
 �I(�.! �I�=<�w>���^���ﰻ�/�	[��h ����w
Z7ݪ��
��=@���
�F����o�n���"�=2��u$˭g)A��A�>Y���A���њ��{�_��g�m��UP,W W
v�e�f�|�P�
V/���.�M{O��A�Z@4�_ۃ
m��3�����ȶ�"���2��
`i
j\6tŭ�4�����m�gQ���ot���ɨ�ӏ[��\U,�w�%m9NR�㻧�9e�=
}:�ٿ��)��Z�8ez}�쩷/f.�L�}�:��z��sL>�7>����VN�G�P�ͽ����������ˢ��9x�[�կU��������r�p�
H^���ۍ+������
\��o	�<"�'��t=�ޒ�
����֗�6�M���HM�Ã���냕
+h3{�C12X�p	��xB'%e
��	}��C��R�n��\.��J5���Jk����ce^�-
_z;{#x�
̃g�+<3�;���<���

�v�.�wb/)���?����(����:Fż$���Ow��R�}��o�)��]
x
��"�Nܧ�Q�
�B���1��Zqm�%�q�<<�`��3�v��ݿJ-��'�\F 
Q�E�5	bו���X6�][#�ux�5�'8��e
�s�mA��y���dt
ё���n�TDž:���n)_�#<<*5Kq�[#V.g-7��%�Z'��-�����VU��B�<Ӭ�J�8~�N�w@�X\��6}<.f���N

7|'"�f�o)TrH�)��wK�3܌
+��IoS��/�.��&F���_ "�γ�@]4�~��l2��<-�N�I��;���>^!/g.%ܟ�� �m�ͣ
���MͰ��*�� ��B��Ȧ0���W��B��
�us�Il�s� �_�f&�7j�

�$����y�h�<zk���X��3
H�
7pF�<��G'�[xb�'
��
}�q�
�y6B�˘D��"�DCXUvv���
+���
 =�>Z�{��#�'�-?u���/��`�v����͞�}�L��O
�����ᵄ��m(t߬�����d�WV�p��|&k�޶����wv�f?满�q�2��;d��-Ӣo_$[t��|��=���d�&�+�;��o}��X=
s��)�������GUؑ���K�ˏ��0�΀�3�����h
���3���	�/u�K�?�dx�5L�?�U$�o�>�ˆg ��g��v���DΔ�ux3�*�gŲo����ד\J��؎<�-�R1��l�p�a�#xZ*����ݴ
˗S%���Y�-Nh:;G�y
�����lc� ��e%�a8��pa] �Y��LpeZ`�������h~�\�Q/}AɁ�ʔL
+8�����(|

��-�T}���S�|ϡ���]�ȕ�8�*:A	��]�?@�e���N	��e:�H)>psq{`r�(�(#����T����gC���M���>����<��������܉�18$� ���Α0To*{��UM��؉��e�>��x'���]r��f.+� ��SaI�.nz�6�		S�λ^玄y��s?ь�1}�$
O]v�
���u
��)�c
+A8���Y7Ȝ�Vg�Mg�UL8
�[㆑Jl������~S��g����i=�_����i�
po3�s�`[ɥ�#V� w���`^|��%����h^��X]�$="	��.�!�c��P4�zT@��R؎d�Fm��bK}��?I����E��M*�
�\�����S�1�v_�W��J��չ~_��m
+��ŝP���k���^	�t�$o�7����f�_�׼X�B+Z���9��e-����l���
�>��Vx��a����l�
?.������1�}JV���y�%�e�멤�

�Q���q�dl1*�ۀ�R��LJ��h��Z7��d��
x���sE���Ńv����bR{<���o��2�u��"
[鎙����OC냹v4�'� ��3G�b�������w`��?����A��O�z@��En�^�gl��9��?������ou.�BN�A;�{�Ю� �G!tb�Ct��d]�
��J��u��0w������0��<al�\�G�����b��0c$�u;�.{s6
J�`o���xv�!��Λ69���[�I
7��iMf�6(WW>g�.�@��]�w�&�D�c�u��
�6qH�
+C-�v��O�f�vI<���� �-X�Es�
y�^Uz0��
+��E�3?+�e|�87\�S ^Y>߅�x/V�����q�g>����+���,dQ>�{��PX��]�c1��۩��V!��n�'3F��
o
�����w�rj����
�nk��q��&'�C�s.�P�&��(����N���$�G�b	��Uq�(AӶ�
+�g�r{B	0���S��ǟ؞��k�ep�����o��o����Y�S�uU�{?�z��r}����M��Xĝ�_��P9~��"����fp��
��y�Y4�
o�8c�u�Js���
��ʵb� 
v�E{�0(���\�ӟ��LG$mQ]��
�
��X�
o�'pW�*�>��
�Gٓ#m�`	н�3��\��
+u�_ΰ,(�\�uG�'�%tU�۠*�� ㎿�
� ?�4P�5�
L��/�A@�y
�"����/���(�鮡uPF�H��6��Q�
/��֟K��=����zY�-��܋ۓ8��KI=
��K�����^̏�w~�^�]���J
21
+�b/?.�؏�W��u"����݊.W�K
0�iE�/�O����f��\�DL*�6%8�
+ ���ΧCp'ӺF���җ>�om���^Њ*���fշ(��)��,�%{�j4���+�/�%
7�[��TfV�=آ���� -
�>}[����ܠ������ݎ��W`���tg}�rn�NJ
�'���� Oi�
֦ۅ��v�[��?�c�ѹN�
�蔻�KFW/�
�����5�w��+8bO
�_3|�F
	+g���[jr�.-O��@�"!�I�wp��Gþx×��UÉ�Ϲ9غ0�%� l�b�Hk�T�qr�����=�����O�Ow�p���.
j-�'Vb�RQԭ4�W�Y��.<��IP��
+L2
]:|V��O4�0��
+l�2��_��������;����Fp��LW>��2eDݓ=w]R<�4�>UW���T�
q��X�~1��3��
�I��;��I����@ޜ&
���;yL�nk��)�ҕ�C�}��Dl��*3 |�l���E_i�G�G�$ث�y
%�%c�lB�mU �=
F�)a�)����ڶ��A��Ie%;T|l�=.���v�i�v�O�$Z�y�
,��/�������͒�����x��u�
+F��'���E��Ƭ�P؏o��>�s�0��R�G�:ȷ��8�O9�G��+�V��݇���b�e"��18V�+H�TF�մC�&w�g��;()�������$8E[P�e���'
#�I�ߣa4�h�l;�ٶ=�o68?"�̹l�?�.��Xʊ��~VPd?�p����I�_��X:��s
�
��ڠ��'u��eS��}�{��<p/'�1��z���Ӟ�-.�t
���j��	�t����|�
ή�1�ݻ�S�L]@8<�������
�� ��Ԏ���6��}�_]�
�a���W.��i��GP�oz��Ћ�� �n���mPbS�S���5��5�Tb�N���Y�:�*��~�
+�{����e�h��{��8��E�/�طv⌂n���S��&�n
Q86��6���߱+B���sr"��?��
�0�=��n9v��_vp��>�ߟ�� ��Ig
�ax�����h��=�;g��3YvE*(��9$4hf^
� �z
w������<���<�.4�ϳ��!�
@Xl�U
�S�ж������!��Ct���Ǒ�M
+B���u���x�ۛ�x��E�n�
��S&s���2�JR{J=���1����C��,�Of�x#3�&}
�o��~[�

��%�(�W���>G�e���"Z?��a�j3�=�y�P��M0AI]���v	��|4tpGB�M��B
K��7���hr4>F$��ݲ�
�!���>J�����r���!Y�;�� .�.��5��%�������b�G6�
/�_ʫ�ծ����8/��K����Ǚ��EDd��Q!�a�a�߻�{����H�:���VUW�bP^_���Y�ɚȆk�v�HQAHf��}vQʪ�דi@�K=�/��Ɯ�f����`��
y�RPF�ƅv]c!d߯ϻ
k�ʚ:?0�;e�E�i��
��"F� ܟ��\��;`ɀ4�b9���y��JTtH�񰵀�1�A�d$j‹�S���[��m ̳�rY����c�g�~�Mu���͟M��Eɮ��7��,�j7��QX>yuu� ��A)8N
��`�ٞ��f��J#�c���p%��1�^�lP�&��*�.2\  �.�)P����R�
��<�*��
��� 4�ar��{��5Af�������<Cp����0#��rFk�<V/ �/��������~
��V��);�kY��
�5\	�0�JS�x�-��S�n�:x�q&�7�f�vF���D�s��;�t�z���7�Z�z��;/&ۻ�#a����qzQ�z�Ж\���M�?J3_�
�
��!�6fa�Z
H
��Xk7��w�pn5�nO���Fҝf](�ݑ}���
+%�2�EF��1F;
ZL��x!gN;�WETt(MrE��W��c�ä�OO%t�r�S�,"�c˫N�t]&�*��\���C����
a؊�ƪJo ^�(S�
K�Y��<��|�~o���
�A<��[�Z��yj^ޚ�wK2gu�v��P�m.S-χr=����� x4DSLP�A3n�
x���jgހgS��hiwv�Ė��,N�0�	Š���J�i�	l����t{d0w��m�¡hۨ6ר&Z��9�J�2ƥ�b�jz7`}����`b�	7�����j��χ
��f��\���F�5B6�
��5B9|>%�fZ �Y��I�tK�����+�._1L3��Jh�>���8~:(>��Y�)
����
+�:߮h�b8����*�V� 

?ٟ/1�N
�c�k�T�%v���^+{���fs��F��J�ٗǜJ9XV0u��XTm_]8,W5�k�_B��[d�)�oh��C`�v�B��˨k�iv2���71�:dj���?��e�i���r -�`D#)Yx�,��C&
���Y����X�OvY��Wܓ�+�>��]�<}K��	>�x
�ro�(��Xm^6-��\��GS5�	

��������;�*�6��d�ծ,m�Ev;��N�-�N�_ɪY�����
I|�9��(�'~o�`��z�7�؏/(��	��Z#�4��';~CS�5�B�� ��6C��AG�g�Z� �d�H8i�[������6̨H��K+��Lg�4�f�H<Y��?5A�ڹ8��W ��� ;X�RG�t����
�X�v��5���'��.&�ߍ5��0w+<лsb60G�:
vF*b��6���u�L��.L߂����f=Šڝa\8u/�m�{3RN���oo�����S���-ȟ��~z'�~zzWב��_}����_�}��ǟ���?���O�|{z'�������
�����_?���-[������ӻ�qm�����?��r˷�����p��3��8���[/6�ZO�T�!z9A	��������ߞ؏���_�R�� 8��A/�+�$ [...]
KD�u�x�
|����p���f�J������% 	-�`����ɏC�F&���\�FH
�����>xg��g�\!!�jU�
��u��x�Jf��
0�O�6��d�8{V^!���z��h��נ�{�/u(�iޝZ�
+��K��{_'/u���.���^
DG-�C#g�L���$g��GߖǶ�Τ�:�y�8��\��
S�{�������L3,�o���J$��b�:�m��Rk�à��˝�t�0��{@���.���%?�$s��G5�-�m�]h�T���쩵Lh 1�һ%�� gϰ�a�#��@fN�L3�u1i�����V��d�X�����
�;��d�[F*
o���m*ޛ{�JK�ѓ�ź�
+f�R	+㗲�أjܖ���Y��6�ɇ1zG�	�wiy�BH�ܥ�1�
+�* q�
��ѩ�ca�Y�dA�����w�WQoY���b)t:

��d�Q)��5�aq7y���\�t����Ѧ䶵�-d�[��*���'[�
3M�)��C�K�� B��a�j��W߷�9׊<m
�A�7�܍ӚN�ذ�^i!��BR>��3(�Wo��h����c���Q�w5�/�]���� 
d��+[�
ѫ9�h��ɵ>0���� Nz�����~��Nf��nS���&�(�J
+�����2';$)��֠�����}�;��HNH
dX%��i�~ g���kܻ�^<~�i��%kq�8����ҾAp⍕�^D����VA�S���k�����X�^�ٱ\ӡ
O�L]���J�.1gM}	��F�N�8u)רQQ|?r��5�SN��;8Y!y�dz�r���
�E_�x�vfk��av��G���v[�6�����5���#ͤ��.���z�E�!��
[�B�'�
|u�����0�K�d,��>ĺ�VNԯ>_2��k:wyT#�z�ޅ卤�0��%$��V�W�;
�)�DkU

��X��,��֔#jԐ�4���	C�����
�	����a�;ÍF1��K?q �H
`��9H
0�D�
º�
�R	��_�f[`��q[��"��m��/~�.u�{��G)d��@F���}���2D�hdV�'@�ۜ住��S79���лR�|���Y�B=
�����,�����N������
��8����*�Uܾ4wu|�ԗ8g�6�l��
�GF�b��y	�
'l2��;‚0��Z)0�������x�#�u����*$A2�tcW9v<�O��qVC<�3Uk�h4�ƶoM�{��uf���o�%
��I�� ���G��{�NP�˯��J��H���퇫�R|E��td�=Q
�����Ѵ�c� ���-j��d_(?���V�x���$Y�:��5vNQ�)��v,Z����p����`bW��v5z㐽�%�dU�{sc9�a� 8�L�&i<7o������)��|�klOm.��’j-Ʋ��P�ۣ!n����QB#8�?|rO���yJ=�)e���Թ �)
\�fLŲ#��Ͱy����}���éoƹ�&�/�_{�~M ;Y@�L��rQVO�cg7?
�[ؒ���>}�c"��
�v�[1лQU�98�:��Қ_ڸIy���"�6�w���RF/�O���N�
A
����\�o|�1��dN+��썎c�A��mQ�Ʉŕ����j/`���,
��h�^B�\���r
^D�WDv��R�d�0�wZ��2�.b��TMĆ5>��3a
9L4�.(+~�Y 7�x�
<q	�s��ĺB�c6�Y�i����J��-���i��	]+�V7+;j�uGb����,�zws���?�?
d��H����:8�ܢ��i��Q�ٿN]n�RR
+��c66�N����(��n6G��
����Y�a�5ؾ�J�*#�Qk�h�汽;�G��(�꽏ǽX��^@�(8�����`�xu�"�R���rp�H��*����L��&��べ��*7a໑
�W�v�	���F^'�U����)�lRar�1V�`E�^(
�J�R�as�+��V
+�d��y��g����E�c�6ְ.��Щ*R��R{;�+�W�p����0D�)`��u�KnO��>v	�k��2N/


��{.A�����e�9N
�U.)��PO
kM� ��q��Y�ٻO�	
2Ÿo)���?}�����c���F(�A�U_�qJMe��S;^څ��+��v�cW݌t�L�W�:x���Mٙ�,��-�&�@|7h���
xh�R�J��5�ئ������6�~���݉�9
+Ӛ��v՟_pR�/��[��cҀw��6 3
 ����!8�/�W�3�c3�Z�����1�k`զ��$��W�Q��PAR�\%O�=��_����;�֩7�M������
�����U��mW煊NLy|6����~�͉�<)̜9��-C��2ȳ*l�
g��|��	UN��נ��Y�����*eZ�}dRz���_���iyE�	�l��+��]�?�ZkF��vM�;�!P|��m� m:(7�y�{ѕ�Tʈ��5�(N�[T4]���1��Y PL�`�� [...]
+/5�����1" �C����ebd)�֫��eA^��O
+Wq�#�D	�dRy}��;�W�p���T �襽(%�ky�{��D�g3�t�P
�y��������7���X�Ŧk��'sf�,�=��5miٹ��8��'������7uX�7{ZOH��	+��0�9����d�_�u����6���
�j��1��K#��J�X6� �`s��:��)N�V.+��/���+�6�5�����O�[���iE��=��Ga�/���
�/
�5
[�p
GN�{L�
WI,
�M�S�6^ �!�3<��� ��(>���
�#͜�.�㈀�>%�ڴ�M
�4��s��ݬ������j��
�v��N��������.EȿS�
pJoZ���eN��A��e�o�X�b~_�7�������_�a��klk`����t�a�>�l2-4���؋5#�i�@�:��1�
+�	�<�NVƼ�>
����m�o���;�����{��:�J�g��|�4�����Gc ֯�!����f��=���}l���
���O#�(��ҥ��V�a���
<�eR�'�<���E�m�/V^'
fT_e1Z��K������\���e��	7������Ԩ��ɦ�
��4�^�
+��M�?
+�iY	����эf��E��l
�)a�Dr}�:`��
E����l���R[����� C
�<�Y��zn�6
+�:.���[��p�

7+V�œ��H*��
+ƫ	�Ӕ	9��T��cF�����6,~X�j�
1�(ݒ�
��
���`��y�o�m�0�Y�كgQ�j������q1
Ù�<Pr�눓���H���.��mp'��6HXI�{"��z�
d.SL6�����
���E�� 6t���!��n��E��Z��E
�L�D�>B1��1
���=���R�u�S�` {<VO
endstream
endobj
17 0 obj
19451 
endobj
18 0 obj
<< /Filter [ /FlateDecode ] /Length 19 0 R >> 
stream
+H��WM�e�
���p7��@.�,��r�&��
+	�&
!��?&	T-&3
��9��{_��Mv��y�򕥣c}(��J���$�oj���"���s�<@ޥ+9(J}{�<N{�Ln!I雃�)�r�M�`�3��}�<|������Ҹ
��<��s󯸱�*{�j�J�k�g��
+�afz�7P�h��,�
�f��xύ�9�xJ��w������,m��
Q�,Ԧ
9yy��9hVj��	���X
���/��u/�>O\�H��Z��\
��9�R);�R�il�,m����4�&�3�v��V
peO���ڶ��C�I����é}Ϲ���x���8X
j�����iO-YvTw$�F*�s���b&uD
2B9@͵:HYf&o�;XY��L�-/�@��ל=:�
��[��Wp�9��Yd�P�M���D �	��*��+%S�k�I�n�kq^
+�礐�J
PS)��I�
�O_�f��e—긧�7���M'�7�(\��V�J�r���쬓�J�|������X���b�8
A �4�L�� ̨��U���:N���g���Ò����
�2���ߑ�
9-�wCr$Of"n��Dh����KBu
��:
 \�%�Qv�]5��a��=N1|��܇4
UO@o��Ϻ����{����/��H�
),e��
iA,x�'�o����Z�z���J%�Z���2�`�?
ݻ�[Tk�^8u���/,��2���^�5�;;Y���$iɗ�D`.)���1mg%�[S~��>b+�G��i���>
���.jձ^E#�G�Ī���h�:q+��W��Ԣ���&���4n�Zqz����t3�={������pH]�Q�L=�Ŋ0`9<��n���]둟�������qX4RX)�7`�w��+�Q�@
+
S��HB��P�
]�h�o�{����%m�8.Sa�
#��H���]�H �8
 �6_�e?
Ik�<�iI�*�/1��Ž�ݤ����?]
h����
`��8����/sQs���2�:��Y{y
����(\�6ٍGqZłQZ�.L�
�3R�ׇ�3f����ʃ+�t��z�-
�4|7I�T#�ij��T�xwy�9��8��X�s�C5.�sc+J�BYXŷA
N1&�\�
Dn���ր��k��9
��^���#)s�����cM��L��5W�
+\S�.W����([�^zq����V4ܥl��:ˤ��T’�CS�t�v��!e���)�<]�>�M��k��͓�0Og
�
+�Y5a6'���ރ
E[EK

��,'
[A
��C�e�R�l�
�;}z2|j!����
�T�
Vʺj·W>ϰ�-#����%���_�i��U�w9Z����Uͪ�
Yld��B���+�_�2�
� �'�1~�K�3F퍣�wdmj
B�=�
�>,�A)��+��
�1-XR��2e#�!�}�+gZ� �;���74
�:�6����8��t��������<����ߵ����ӷ?�����Ï?~����0�o?�ϗ��W�^^><����x��7����/?]�_�hK�����_~�_���&����-m�p���\e+�eC7DŽm��r��K�+��5�������=���
�<K��G�Cµl�'�
�^����k]�����?�/�i���-���wB�i�w��/,%�j�~������Xwy
^�2��`����Pw

%h��i����.�
����
í:H(���n�j{@�  ���@�}��(5,^�aM��0���eɍ�+�X��?�Gk���g��?.S'M�

��ԽM\�[�]S�h�9��ý^�
����X�Vm��,��!Vsi� 2V�㽌x���;��Å1ަ
���s��Q�d<�:|�!�
:i�m�Hە��B�JR�!�8),�`��b��W9?W$�q˪�#�؈�v
���ÂyۉC����#��$໔����$hNH��]
�jX��F6���L��S.d���s]�ec���w�O�!�x�i�_	C!��6_̆�Lb��2Zô�G���\F"�ى�8�f�&-
-if�p
u���<
����SDe��x�1f�+��

-�@LJ���0��y�}U��Z����Ēlm>f�
/�NN��q5�j=��"9E���"Yyj^l���θ8I��~)�
�ϾZ�{
�`����y
�8�-
lub��
��

+^�'�
�s�Sݦٰpϡ��3����8�%
+%�zX�G�t�(�10g'
�eNC�
�h0�TG":&a�hC#�=M!@�ƧQ�0��f��0�l4�P|Fn"
�'��J�ٙ�RH�3����0P�i��T��l�N"nq� ?�V��̮r��#�D5�ф�&
ϙbU�gE����	Հ�i���`�(��:���n����
��ԢӦq�xά�e
����/����������E͒f8�-s
�K���vK%�
�gׯ�~�
���:�>0����,���
�Vs��
[���bx0z���&Z����'�
+�+Y���Z]�T�N'	�w���wmT%��ߩx�Gk��a�9�($l
�`c/*
F���^--z]Gpo������Jg����`"���q�	������}Ҍ���G5���ӏ���`0
�Zu�wF��?-
]�5}z��}������kE C+8)���I�!w��{A�6{U�I�l�Ƽ�~,5+ ٟ 
ۓ���lK�il4�:B�X2�q�ش'����Q1
pP�M��V<5�6���a�;�r�`�o���QY�Y��za��ǻr�0�"��1���)U���h�����i������Hh�d��h��̞�x�Ei���~%>�\���,	Ul��!����s��P��N�EG�����ka��
�C���ңJB�������`[:�U�T��i��TI�}(��XK��<
R{M����
8���>
�D�U��E���}������ܾ��ݫw?��J����aZ��V~r|�������p<~����퇷����?9~ˣ�_�оv%I�T]�oM0�|B~����6t���/0��>��}�'�>��$�󪲺}�..Yñy�z!l���U6Ɵf��4�y��5P���ݡ
\ۛ���ېP���
�$��RoA,�{�M�']6
%$��XB����T���T��Ķ�=*�MI���q���v�’� ��
��g��� �=��k9
��aڢgtUs�#p4����>�'�<{�D�w�DyY�0M��|���C>��'��������C
&S��j��f���%��S���eg:�6��<�E�P�
�P��W�g��_5�
+	aw?9F�Tc��B�!n�H��V���ZP!��<��\=������l�6t���c��i�Y�n�{��t�5�S�̝�O�h�+O֘%Q8[�%��-�����be
�h�Rc���X��,O��Hrb��U�u靶>{��9�
 �83��!SH7a )�m-
�u��nݯ��JM���7b�l*UD��%�k��2�@pG��=�QP:
+Ÿ2�¥�)�l X�א�{c�LmFi�-�s�l�ѥ-�)3���V���
1��;W�>{�Ԟ��7p�F�ꔄ�l�b`�
*L�
4W�E������v���NZr�
[�
KTQ��9��(_@�ǩ�
~�|��(�����n"�
x
�(���j��'�j���b�lyV�y�ߑҹ��+��ͧ}�cgf�c�z{V	C���t��&�����Z���M��쳝�������1v$��ױ
���Τ/�ϱ^�٠���l���rr�o[�j��U�(�PG�s�����k#�:q� �[ia��FY�̈́�0PW��J��1�.K�'�s��-7�F�p���K��XA��֧��F��;�����A��GS�As�7���Mߏyn�А�\O�AHl
�����R����zWڔλ"�U���Q��'q;|B�P��I�:�e�!N}ax�%�V�T�e�+ at Q
+��w� ������H�u
�;%T�:90�a�� *k]`��nJ�n��J��S
���,cX�����"u4��
+6�8��
�P�M,I\s<���,��µѽ
l����pJQX�Hf�`d�%��z��\#�5�x�j��ZsR�'�����S�ɪ�۶�X�y`Q��
lx;Κ�
ދ۔ʻd.f-%�D�ڶD
������H
�7���)C7

�� ��a�+��у��g�.��,�1�.:@�i/}�������:h�S)�^
�M|]��;
�U��!�{�9���
f]6Ss5I]L�h�����E��
,��@��Bʡ���IP��G<�9O52�?J�jr�`�HQE=K.t��Ϧ����}���O�����,<��y��/���}1.G�N��O�?޽~������W����F�>���7w㏿��{����G}B����˟
}���ܛ?�����?�~:����J�k�y�
"7B
�՗�dW{�xap���~���l�3����r��<�rp5T�%o�k
�����u��Mfr�k���xI�p�����r��v<聭�

�
,|CE�"�lGq35�`ݿ�[���+3VM�ڪY�lo,�]8���
j��>�U�Z�>R����|��ֺ
�4��~b��N���.��|IV��8�t:��l�:�����y� �1(�T�M��xi�qp��@r
�,�+��K��!�畜v���Oܫ+1�
�h���1<� ��s�"5�i?ܫ,`��#̎8\g���!o�,HdP����B�D;nPq|Z�,�����ƍ� ���ұ��F�s��8�#{z�P_v�EJC ��r0
+��$r
l:�qgF��� |��G��pP�X�"W��X�#�S�+:�l�t�{��%��2|s)L63=����+n9�(�aIؚ�4�4yV����atG���Vd�������_Q�m��gQn�E|��Ӳ`�v���`v
j&X
0F��2_n����UP6Z�qث�kg�d�T
fn����̎�:�	�H�(ZdGa�hnu�37�����.a �,
{�y<��G%�z����5p�}+ǽ���ǧ��]R�Z�I<`������-Y�IQ1$y�>�Vq�
�K���f
�-�aSբVau��P6��N�7/Uo胓���C�_"�.��,�=�#†�IX���5�	�m�4�w��e/�_�r��\]kΧE�	w	0q���ů#XCs�݃���ĸ�8
aQe���A�5��j|AFn�J�a�|3�Qk}&uo��ʅ`?�Ҏ
ǕX�:����D��;�XRjj5�{ 
e���FT�G�G��]+����x�s�7�������)��X5&����j]|1��ɛlHkn���
+;�B
+���+��k�+W���;d'��&]�95�v
p�Eû����J��aX+)�5���]��
��t�$�
=^�

\Zi0k
+�cv�s���-		
�t�������fl}mK�,�q�q^�F�r]�Uӂ�㱸��M���q�QT]3J5�|�pw6,/����p�w�>�A'|����J�b��H��Z�D1���
u"#q̉�4^�� ��
���m�y�"pM���wؙ��n��a�
K� R�	��4!LD*����;v$�S���A
p8����v�U},�qp�)�ae9@c��]�L�z�w��%&
+� ,+6�./@垏��� 8P�� t��w�N�ӊRp�G[w
�$���N��V.1�8����h�$�Gx�2��xx-.i���}��w��F�ؓ�W'���ki
+��n��[���
�L_8i-�ZY��N���*sk����o\6��“G��IH«�v�)q�>
f�ܷO
�cK႙��G!��ʀ��qA@
�����SL�w��6��ff���U���Oaˑ8���Sw
��	Zk���^	��ݠ��Ɲ<\ˡ5
�%�S��$m���F(�n��G��4i�"<AK�&��[DȪ�Û�j�q�c�Slb�����X��pn|q{
7���jɗ���{G/R�r

�����ٸ�Q�<���x���<�i��h��ec�^�;4��܍����W�ˡ�m�����ы����e�B��gE�1��
���T�c��������^G��)�E.�y]�37^�`x��G�+�u�
� K���e\�V�l���v���y�6u�Q]"B��멅=d�P�@Blzَ�*�Z����V�e��G��$,k�+􀧳��+]y��J��[#z{m���h�~�
Hy��
��D�%��L��
��mV�7֦$7�H�ͽ��t�����\�\�|�r�[�
F2��an�A_��[��/��:u����˹�anf�z�*P��GK���IU���h3zG}@Q�hسs��ؚ��"���A~�h��Vb��.>]�-�F��nM
J���
[6¤�O^�"hwn���V;��ij ���ˮ�[c�„d��
+��O@g���i%�"jt���ED�^�j`���K�~����
Mشo���m�67��q�'��Vo�'�m���/�E��K�S���� R[�+T�7����L#
	

�N�K���a�yWD��߻A��ʷ����4x�:��7�~|	���ÃU���e�*�)j��SQ�c�~��i��
'c�oV��H�-��S�٥���x�fʠP�G�`l�6��
�Vͮ�(�i�#��`��*�
#x���BK��`+i_j
��^�T�7�\��sLT9}�
X�ڬ�$�QBp0�Q
+
x&��TM#hį�N������Fog�P�h�
���Iq
"ʙ剷g�o�O%���1:	v
�fy�>",�n�^y�[��k
TA9vV����b�ț 1�M4o-Ǫ��v[�n��d
j��@�Ts�;&��Ư6��&�hA�<s��b���o��	�9�D>i��gQS�\���fs�n�]{���s\��-w
�[���8���W[
�
+���O�&ձ�ʳP8SQ똃��̲.�E���<|s+��!�Z���
d ؠ2�t�.P��S|\A�M4���m�
�fe,E@�4���oJ�ن�0
���
{��`�
�rQҤ������՛Y�Ѥ��qn�>TM
+��ņ����Uc=f_��>��,D9W8���<N�@�B�;�*�,S��G<7���WS���8�j����
y��B&��b;�
�G�p��H6�-��
ˋ�r�sP��Cߛ�dG����h�
���r�2
��^��Ʒ��듍6ʣ��O�%
+ү![ �[�}/\?6I� ��B���
Qqކ��
h���Gٺ�q�e�n��a�a��o�U��Q�0
���LNke�U�U�6���q{�W��)�"��&&KKD��#��7TKC��2NM����^h5o7��O��Y/Y��J
�j_���(7cGՕf
`�Z���a�K����⭽t%�
i���^�
ۊe<�}CqW�5eM9{�JG�I\K�8�yw�r${��6d�Īm����f�
�ֺ�{]��'>l*��I�~b����	/@�.
+�ȏ�q=n�p��5m}��ʺyx���5�xc��%�R��ϰq��] tx&��J��$��
a߇Í��h������ʾM_�^��I�{^��LD�>dV#	��Ͱ�[ld��f�� 7n�xq�W�:,oO��o�>� �#��������\��
+�]��N�:9�#
/���)��p�l��h!�Ķ~O�m�@�Z�X�|�q*b���ʟR��m��b�9�����X��h�.��)���3n�W˵P�;V�z`�ʂB
,��$�����;�r������^�~���Đڟk�A�8�÷�u��9,�`���Z
`��h�`�|�\�����~��m_w
#��k���
C
�� �4���g��'{�l�y��v�����&9�Fh��1�E0��[��sP���U��`�j1B�� _5S.�N�����(��9��s�,�ɗ��w�ս���3;0�Ւ�5�4�˝5�c�U�W��2�ͫ��^q�F�����_���\��[lܶ��q�u�X��7����DFj�W��e��JePBʲw8�V�Rx��ӧ�:ʎ�:
+��r����ʩj�]q�
���܌v5�C�Wm
U��Y4���Il0�xD� ����s �Z�^H& �\2� �����^-ɑ�8�}��@W�KI뚥o������ _��<�q��z��
+��؛z�!�b.�ZnX6ra���kc
x
9����n��� W�����C±ȣ�˓K.�!1�3�
���[1{?��[M~?z�f\� �YL"W?|cP�
X�a1�/x�*�{���1\�����^8�bX#g�-�_0�~p�Eo먚�8����x8��Q"��;���f
<�-��3
��g��+ԅ�����r��1����ӂ,�-F�R~�e��B}�a��:}(/MLUm�1	�iq��ǭn��˅���զ|

��$��YЖ�|��K��6�fM3#u&`p�Tdr��U��<�eW���R�ݡ�:�y[;k�̃��j��g
�
A��t_���D�Y�6tݼ35j�(��4�6R`yڦ�|�*u���4
�b�P�>�RK�Wؼj
+^��Tύ�!��
+�W�;�^Z
rBv�Q��6�i��I36Y��X�Al;W'��.�ۅo���l�
�s/D�X�J��]�x.�v���-6O�K2|l�˷�r^
3�b�;�&xH#��;<=m�X�u�	覡�6�n.9��!~u9��?UR�!�Nl�R-j !s��hG��&���eP
A���L	ZHt�ݦ�х����J
RA��}R���u\���eDZ	ڑ���z�Ql8ȶ�]������
B�=��e������=��R��Zr��L����<��glt^ m�)
��pF��L�t
/*�[�C�����*
�bz�T�����w�]'��r�,�R�Z�(w�
�� �@py�|∀�e̦{x"wϙrh�>�8Y{v���¨yv��H�Z��m�R�RN߅/�Y�.�q#'�N�/��?�\�Ǟ��~��Q��s#Hx�%'�Ōg��20�T�0#
���]�8���Np���>c�j�O�j�ӌg��,H�wpa�{,<��W�<���.|b
Q���xC�M�:sa�
{h��M�|�?���s�t�
}@���3d��]�����"��9�-�
+,좈
�GZ�رPk��Ι
�S���- at pD�M�ʡ5�/
<�X?�+���^�Px7�!c��F�
��$��7x�t�H�l
7Ё�)/Ћ(�m)`�ۘ2�j��
�xʃ����%6�wVYF\
�A�bs�͛Z�Ǒ
�$X��‘W5:g���8Я��p��m ���gO�x ���Խ/
xSo
����`���c��ӫ]L؝6�Y�
���*�$
�\�TBvj*z��7���ݜ�65�樸�x>�F�0�)���J3�H�h��.�������
P�Q��Rp��{��9�0�[=����:f���p	�

�^d\�\ca��T��!�u)@!� �Ǚ�
s�zT�=���g'���+�*�
+f�����O"6���Y0�G���XQ��Rj �l�]B
���M�-1\���̿Lb�m{P3��h���]��
	�K��!42�Z�XW��
�5,]@��
�RDnfY�#�
��I�
A\v�!Z��N�
Z
BX���7:>�~T�
�mv^	'ń�*1�w����X��U����PS����Vr��RD�
,Cm
�M�2t�8�[��_l�f�MCZ~|f���v�/}���yW�R&@���5h�^%�����]�i�2�t�����}J���Ύ��a }j����[�ӱֹQV�z"��is{�e�B��/�[�XWV��~���u��u��v��Q�TX?૦�w�j�Wo��o�|0٠�����b�熻�|$�
+
�c·�ͮ�����ىO2
�Qiq|�T�1�
L�h��u����z؃��D�5j%��
${�
�
+����c>_�5���Ar��_�v��
�)�
х�'K�B/~�Lݠ�8��n|
X}�R�����<?�
��&`)
+�+i�ׇ'�i`fx֌B���d?,$Ҡi�\�S(�wC�k
28^���]�|J��Q���!�殺^ϊ�fG��{
�#s `qv#����4ѵ0՘�`��E��ٱ
���Z-�dC�
��
�6��E�bc�
�Xi�!m��P 1�%S���>�
v���fX�
�
+�QXX2 ��_L_G��^�+}GS%�
B8|�}�ﰏ*�e�RPf��RGoO�#��p�)9Ȇ
�+df�J���{�1Z��Se��)������"�mop�$��c���-Y�;A�||���JaH�������i7t�E��� {�����w�v�E3���X��Ip��؟�+p�E�b7k<
�u[�ͭ��oo�x��nk��o���N�
+Y�jrG��N`n�3�n�z�Du��^N��7�"��u
+pN������/�~tM\��	�S8�������]�͠��<5����/YYY ��X��
�$�F�|Ȧ��(MĨ����֛K8�"�6�Օ
�`#1e��o��Ύ0lf�.@�F��s����*۽�X�
䂊��=��lU5���S��r�]�s��z�E(h���T�D(6���M
+�ݎ&��d�8�?%��
w'�u�γTl�v�t^w�`5~Y��>!/n��ly7�(pO���f�]�p�&Wր�9�y5�g��n�
+d�Q�ŅQK��U����%�ʩ]~��X�S�`Ϯ�}��N�Ć;��1��|�D]u̩u�.P�A2 �)]u���H�x�^֋n���}�U'W@��Q�,m��vm�B��C>bNE�y�|��S�rpF7+�i���ܧ��
�i�
�/R �IoE�����I�[���K�	��
�Ξ&0���у��j��
F-趭����O��Ehք���c�3��|=���?«�����
��&0��P/�c9�d��!!`�!�`l�t/&c���
IG���޶�i�էR����������8q�pd"�)�s	�&�
+N�v���6�
���Q��x<M{PRa4+�({�Q��v�C�}n���n8�hS�{$a����W�
�&U'):8�p��:U������
~$H"����{JT�
��Tk9��D�jDE�����Ϣ�q����]ӭ���Uz�УKIì����ope��n{ہaXO�ɀC�p�6
��3�Z����W|*Ώ�a4�s�C$�f�����0��qsz�$M��y�!}-%�z�Ä�ԑ�76�9O�% 6���͙�%5��qy��SF�x]�<���`��I >�I^
��'Y�|� [�6��1N�8n���7���NL��[�ӄ�s�s��]�����~v�t{acA���b�X����[�*�C}X�4e(���1���{L�De� �N���[��
h���=�p����
~�b�)
2j�i
'�j�
x�>�,���Ӫ��t�{�^-�Qx���V�qc����⮠Q��1�a?�Y�vI�a*d �w��d
߯�rk�e��l1Tr�4g\ul-���&��)'��T	0�(�̴K>rP�߬��|�+X�V�į�0&cV-
�mIv�uy�cH%n@h�[��69�)�T�͐0#o�;$_b�A�I�I���ͫ��I'�ER�vy-��a9�m����pH&أ��Ξ�}�0ʩ�
��2j�|����e删��B;ZYqL�Ep���D:b��]
ۈ7���"3}T� �8�e���"�J�qj���b�;�95]ƈg�q���������'j����F�
+Iq��g�u[�Ko{��U��qN_c���,�Nv�
߽�Ģ�����e��`H�UL
i�yi�L0��<t�y*�hp�k����}����pTK��<�A����–/��'�y�즓�B>
+� �K"���ѳ�_���k�%&o-���N�%s�+B��^�Kx���Ntm�e�:;[mp�����[��iEJ��TXuA�w��J��l�m0����ĩ�#+U�3"IٙA1(j}<�NL�o[|��$�h��z�@��p`ˏߛ5Pj4^λ�6�K5�W��-z���9��J��K�u{d���Q��`+q��<�j���z��1F�/�#�Y��Wo��V�K��ݻ	ҕ�,Pd��P!
+�.94�пI/�rޢָU%
z�ř���ٞN���
+�b��Mnذڔ\�A�ߋ&�1�8����8�O�~療�wXu�J�Zy2�O�`b��oA�G
��IJ�_��ju�y���"XP�F�C����� ��Yb�,�Y�Y�� �_{�G
f��y�;?���
z�؊r����#'����]
��X�� ��y�ц�[�ȇ�>\.����>�M���*�ܻ
n�*�S��z6�w�] m��� ,9�=3A�*\�V��=�wp}�Nu
{5[N;�,��u
+nH
#��Qks�3�/
܅BHk+�=�S��
ؽ��U�ǟ_���d4g��w�l���c�n�ig扜x��f}��{��߾}xs�aeJ��u�.���=2�jH�ơ��Ϸ�Q�{#
+b�D�X�G�n��/p�������p+�X��n2 ���W}��-Ą�Թ����R����;0�b�_��PP���/Z�=SA��1�拏Z���.��w
���eR}EЋW����Ȃ�ʸZ[l)���e)�ީ�d�.���rX�þb�$�r�!Z0N�p�+c��o�
��C��c�>��F��P�
B|�
��+�#�
�Ñ9�J	�9��YU�o�:@�Y����F�Y�ْ��d���W������Y��BfG� �,�����Ϟ�@
�?�q�5�v���i#
��@�d�$�'%.b��X��P|v܇)���q]Hy	�}��-���¶�uqiFa
���
D���
+m�����}�Gl#K��m~�����`�57`
+Y<0͔	�Ѩջr�n��ʦ1
D%�.���^���%v�ҽ�5���+�˫����2
��-+&PK�!�/�d��6򓍟 S�Ρ�����T��~
+
�i��5��<"
n���
h�����"jd��(F�� �V*�c�-�on��xnd�Zf,����
.N�#�h��&ɔ4k�v����/�
+N�
}/7�TJ��S����;�z5nj���+c��gjO
+�>�
���J���K��أ�w7�2Y���aߤ�<�q�7n����E�*c(�D�Q�"� ���yt�#ׁ���
.�;����5(0S}�[I$AI.� nb,}7x��g^���W�5W�W#x<���
ͱ�ؔ��=ҫ����W��A�k��q���̷��ͷ�w}xs��7��~��w/�������?��駗�7�����~9�߼}yy����E�U�����7�>C��K���������ri�?^���t��w�}Z�`�	��F��8^�PP+��tƱ���|��r����˃G�'
N��p��G	+h��?���
+��N��jP
=@;������S 8�R4{4Um���Z1e��^�ACպ!z�@l��gƦ�����n�uK20�䖨=;�Ah�yx�0펧R=h����锷�����o�H��k0�����m=���c�ex35�q�L�����}-
3+"ع�q�e����	�r�yE����{<?"Ь
+��(#��"uXy>�%� p���J��(
\%/�CcRL�\G s5:�Y�XX 6�`
+�*�?��S�!�2����m��T7W c U*ߙ�6�j����5S�d�}�o
�C\i�
�{
,+;֥��4����bZ��݃��Zv$�m��&�
e��D)^��e��0�^�hL��
>t�{�;�BÀa�f�"yx��Y��(w*�r���x,%������� ��yH�`��Q��2
.c{ݓ_n��
Þ>
A��T�k&�����
f	�8"	��ks���0*e�S"&����᠊4A�:'�
g������5#ǹw7�LW�S�Y��Xӣα��+dg;��+�xf-�'��4��W��
DZ�
n5f29?HMZ�I%�[����:2���X�;ܯ
X�ձ:��,�0ѣ���6Ug�3 ���[���sz�@q�=ZsKɍ��P�u��Cf��6��_k��k�P�mȎ�.���A��
��T���E�?�ѧ��WI0�)��ti�;}'w��LU����#\	�%?

��
��Q�A�ǾJЬ9
��JnKX�B+m.���z�!��@�������h��:Lc�:|�
+���=������B��6��rI#�B�GI�/xp�X5��
oa��$ڝp��v;��09���ӫ`Q���V
����2�ꆜ_ �[����6�ɖ��|��k��UO}2Zq���s���\-X�-3���3I2��+�^U�����~������߿�����{�4��?�
��?�~���o_����_����?o����j����j���k�BU����B�ߝ7Y{҃�
+�&>dbn�ۥ�2q_�s�
?�yyz"��=�sTL ��:���>R�
�V��ٌu�w�/�*Fekq��2-M�@�=� ��M])�7����_�
|c�=.:{ގ���L��IdN�by��|zC-
�j�;�]�pUK�\��i�؝<��\k���)�)k-Hn</�e�G����Q�"��%�戲�`MA���,��
���G����aR��՜>?E�O�y�

���z���<�Wݘ�����zle��i�B
���q
�·@�|2)w(!ߢP�����
�=�d�F5�� �Ad;�$p��X�z�
Ƥ�@���v�Zr�]0=`t��j�#��a-����Cw������-\�y_��Jzx�Ogd�T;_����C���~6��~���V�R�t��>Fh���j,�~�5BD-�ݏr��Z�;H=�KA��[�#/�N��Vc���=�<t��[(oo����ĉf@����rM���>�_���o��k'�ڳs�M�G{l
�\.����Y��?`�֎
�˘
�|%��ڻ!<9G�������v�*�yi�A
��v�
M�v��V6�
>}��I��q�|��&46<$��

+�!�����ťϓlw��(��f�n�.$�
{z����{�=��G�!���|�O?O����=�o�F�}��mT��`Snn
��Q�c�����U��O=}�_
C+،�\n̙#��]a�c�Ȁ�A�ԁ�:��t�_ql�,Kkn
L�PeK�&��U
,�����V
�{��^Zy��tW��X5Z�:��<�P.P�5	[4��EŔ�d��F�!k?k)�L��H�F	b��qK��S֘
	�r�c+r�����g��5�0H�y�nG"���jl~�)g�m�Z!�Ğ���u�%*�,� /K��#*]V�2�F�} �Б�Y��
�C �j5Y�9��su���<����(����0�1w�0f�
y���ϟ|i�U>dFwH��z�$[�&
	�落�H��-�2
��LQ������,�N)%�R}�x��׭�m�~���u����P���X[��-�w#�d�>q�3Q�R{����k���Mr�F���)����?CY���<��@�9�w�qΰR�SH��
Ƶ�0N�,{/k!
�g~�;�
�����Ij9G��ef�[���b� �
$[0D�i�A�m+�H�.��:��cT[�]l��PK�Uj�X
p�bb=t.�5=�Nk��
+ϖsX�)�-£�R������g����S���9�=Wz7 ��d�\[8�&/����e�bW�
2C��8�i[�h�2��
+�D�r&0
�LcK���	~
ţQP���ٓSo��$�P)4��e���J"�Xfݽ@0��9����p�
+�9g����� ��mR��H�X��Oj��q0t�
+Y�j8�������8k �n,
Ü����U緎��
+.�
4
p��i�-/%1���%�&lT���=��9� �CW���aF�
+s`28�jrP#YO`���*-�x,r��q�X�����'�BQF�¾TS�I�Á�� �Z�/
+�th{���00�x_�lzY9�ċ7N=͢�b�"*�V�G*�3;%�W�&x<#@��t�� �T�1������?����<
@b��Tgߥ̲��}'z
���X���[�J-���[Z� �1��ѹ����ٹ��ak�s7��	ms


*�
�?e'ma[�{Rp}$>Z��oJ���������on���5�v�p*��#�3��H��
+J��qHeF ��
�ᾱ�4��?}��K�o<�45v��� �6�kEs,��s%�n�|�*�g�o��M�n���8G���Ѵ�j9OB���uβ7��Zz��?}����	�
?��*�DS��R�|�O�S�*��^�qa���~�E+�F�xh
�pCyd0�ZiUj��t#�r� J�kUp�
 *���U��CŜ��ð>�0V�pmԽ5��̂z
}
	J�6#e�4s�V²Pyx
1�6D
�~sr�D\��

 [=�i�;
��N1vp:.�
W#�ʭ	�9�p��"ș�J��
��9��_--�
7to��p7{s������E�
	�	!��g�n/
&�>�JR���/>�
�4���T*��Muq���
��ob�4C��b�I+E at 4��$<kBc�\��L�Hy�
l�c�� �9��Pt
��2��Q�mj(��z*�,������(�N�[�$E�
+ �[�
+E�(P
r�MF�6��ZX	���Ж+��Y5�D4
�0��%e�W��n���q�Sl�":�T�|��X*�		�[\Y�T��\Y�NH�d}�Xv]�֭W�b�����SQ&?��Y�����y�l���D�p��AF�>k���*`�21��1�g>���?����А���{�=�͐���ք�=+U�ˤ fdVU��%ފ�"��iD2� ��=;}�ʜy��Z�+�Z
&
ދ4�"
+����i��m��k�K�H	��Yp���F��:���w�g����ƶ
/K&����E,���9->NbG
 �j�`����@�seVFM��\dш�R����
j
K�и2V̧"2�yTm]�Ӧ�������`g
1H�� ��XYAr�� gNm��q0'Nòb!�lL��9|�RglA���
f� �n�
�&}�Q4�-3

+�d�+�-��������_�p=
�#�Κ
+�
+�<���,�h�.�[��Ӛ}�a_�������2�Po)d	�W>�+u5L{Ka�6ژ�> h��~�&��"�q)ë@�:��F�a�ulQ,�U��*�����
�=l��Үk���}��,
+}�\��?�;0��zNz����"UU2���H�ٳKf.����"���e7�JV3h�o��nL�H
+*w��޵ʹs��,�φ��ۓ�q"��,hl�&FH�=,s�
5��ρ#��W�aɻIc�����s
+��V	��Ut
���1�U�����`�v���4���5\ܜ);+s�
�y��+%�P�;�����"�&��D
���/R-B��^:>V�飼�f@����
ƙ�u �F��5R�[�
M���
N�8j|FS1�h��i*a�?�I�O�M+��w"�עo2(`2JѦ�x
�`�I1�]��[o�|EWi��x��
+N��eA�&M�
���5W��/[g��u���)�C�*� 
tO�M9�2mR9�P]�E�Qfn�(Bk��0�v�'�߻��齫�J��7r�v���~޼׃Kq���$�]�٣F�Ⱐ�ƞ���Q
{���w��|�p��꩸�8aV�l���e�͖�m�=�I��M{���n7�ufpv֕��nN�I��g�禪��C%X7�聆�
�����z�7�%�i��O�����$-�> iNoo�a���ua�v�=��;�Вd
/
%�d���⺝P�q�=&�jKaЖ����U�l�ï������-H���y�~�ۨ���5� c�-G���N�{�WR
e��|r!��
u�sH�]�d�,y�R��-�(�	
O@\״�U�u} ��
Y�SpjkB�������˕,��^�<�6����f��(;�*Y/����bj��{Hv���>Fu�L�$�����D�<j��������
"c��.Xӳ ���VHm2Ʋ�,1
����v�b�o�x��]���M_*M�?NeG�[5�Z���o�R�)ea����ԃ�xWi�X��\H
+��v���*�O����a��U��`����6� r{#��
�Pr�nB�~SܥűMf}<Qp���/ݣ~?(#7
+E��w\"!޽S�������V�H-tS8\w�
�V��gpYB59�)��a-�Zq�͉�^�i�^�DZ�����4�w�jY�
�&�Z�~ɀ�xwP|��h���c	_����ݱG�ukCm�v��.;YU�.�.����5$�$�X
���&
 �v-�ϛ��h����q}c�
�k�N���Y
���6��#z��+nΖ�*���{�ё�(W��#�����3A��K3A�X�9����-`oe8�o;�g�|ТC���a�篁�$�3z��0��� ��ܻ�b���j5
5��OrQv�S���P���Ɂc�pQI{�|,S�+(5�d���SO�-'Qf�FH���%�ŧ)��.FF���������-�A�o����1lL}ܚ�ֶ���k��q�|���@��x���f���+p�r����h�R�Q&��+NeocƋQ~�|�~�~9�W�t.T�w?š�U�����_�]}4��˜�[�w�B�!.�Щ����2�;4�˲ A
jV����G8+ [...]
�Ah%�|I'�<D�im5	�B��F��͚�v
���?wX]d8F϶(�\����N���m4 T+�Ek�]�<�
M�٦oR�%1x<Z�ϗJeඹ�^�R_�\M)��(��'
��
+��7Uf�>Iܶ한��`Z����{A0�5��"OY\�z�br�
ue"2F
�swMA>'gX��(��(���CIv|�P�
�5��&>��Ftj�Xu���h��:��
`�˳
2x�
}�T._sy���k
#�� ���ǧ�Ұ�������}��ݏ����?}��O?��kE�������߿�|��x)�T����~����秕��������~���.���|���?#q����FE������/�i�|����'���5|�yi!�����'4�
�P�^(��R(�uw�{�u�vYm=���X"��J��D1�	�}b��5�*���]�5�J�ϓY�S�^
������K��~1
 lHr����y���`��U3V����)A�ZM��d<� ��2�H��.�ܐ�8�Kl}NN��C�npv�06�����rS�����R��+Ch��d 

cPm�
3�r#3`�

%��!�XT'P?�X�$�ꄧs3h���?� 77������
�R��]��!�mn�)O  �c��
endstream
endobj
19 0 obj
19606 
endobj
20 0 obj
<< /Filter [ /FlateDecode ] /Length 21 0 R >> 
stream
+H��W]���
�7�xo
kH��C3%W�-))I
J1��q��kخ1��}4��=^;7��8'��j�G��?�=��G����ḣ��f��D��!��
��ˮ`H�K�[hM�@�:��p�='R
��=~��������뷷�w���
=~y�M��d{��������ٳ���w7���_�����^�S
<px��}dnL��-
́e2HoW�u]�!0���k�E�?"�+
�J�W��lpNB��\zS0
2-�(����I��<�BT#�S�
Z�-�N�� �dx��y<���>
��,����
� ΩZ�J��iq�
wJw�yj�!̒���lP��}A��]�
�V!�V�Y }��0ҡ�f#�ȡ��1̽d��e
�(���e3�5r��dr��
��dװ[��?���BT�8�F5h��=H�xk%�:y��A��
��*��8��ȩY���C*cx�e�g=T�ӛq�Z{��,
uoG�b� ��?�;�vh���d�x�"�窘rwٚF6��#32n ���׸���0������!��R��BT��=��b��aa�쒩.ʡ�
�jq�^cz	U�N��guV����1n/��ֳCս��
���M����\Cx4�����6v>�@�^%L(-̲�X���F4ʮ �
x����![K�N��k���Y���9
|�k�vw��ܨ9٬���9�2�N^/�Q�x��u�+����
+2w{��%jGl�cl;
�,�mfl�L�ѩƄ^�=H�<�:7�M����($u�����G�,�[��	
,��]%
+���!K�Gtt�AYc�
_3���Zļ�
��\e��WkY/ro���fw��0�0�U�a�2 U�<`g����:��@�Ÿ�)\h���6���E�� �В��v�Ϳo���"�*[���מ�#�3�.��-�~P�_���=
X��3��j��rN�w
U�zu+{4�;r5L{3vsp_V�ah�t
GG��*H��UvCA��+<(U��
ؘ\�, �
&po݅ї!ܚ8(�r��= ���#��`��w�Q�]����"B\�.-��n���VuD��
|�T�
�� '}sfޗ��(_��;uH
�6�e�.q4
��FA��
����Rs���9p���X��`�B�>�Md�_�v,�T7,7X�Q�HjF�L���G�|3f�8��ЮV�
ʞT�
N�{ұ�G!�YSM��#Q�vF�e�~)��&��Z����`����L�'����yPe���%y�x?W�|��1��%(vK{ �%+l�$+َ�
v�U���

��!�m8�b
D`��qеa�C�&yè�9�v2ךMd��F
3��A�.w�d��r�(�d[%��L��
�ŬTP�Esc�8���bul�
d��l�
ZKq#x\����ubB�
p������8��+f���iH|��L�bg[6��e��1�1A�*���]l��O&2��3�j�0�c�Uk��if�v4��}K����=hy�ɳ50ӈ�#Й:
h誤9�+�E bm os�yѿ����b�O�Kߗ�m�T

g�=�ھ�9����S��ǀ(�H잘`]�
{��O�k�%?���ԫ�G����CU�	,A	f�tsNa°C �9T{Ku�D�˗^-l��|�m"�&!;Z��`?_�1����\)��]'h�w��
�)�ߠy�����ZP+G�i�8�5���.�չ�[~l}kGCX���$��a�
��d
+I3��
�̸=�1l�����~a���hq_�ݦ��)	Sk�p	B�=�Ζڢ�;�+�g��>bgd�@����"�~��Ր-�i]y
+�5!��<(�P��G��N�a����h���OeO����'�=����s��s�/uh��7������	�
���Çu�Č��jR��Z](�Tn[n����Zg5��q#�$��W+]��8x�`����p~p�vH;�������Pj�v�+/J�뮀Z�c
5�>pα�z����������%6ވT����a��!\S�� 
+�i2�ΗB��%�l%\�+`<�1��
���,���ݵ�S��z��{�~���Ӌ�������^�}ؾ;{���y:��ޟlO����}��?{vqu������K�}�}����k�;�-��&p0��q��-+uݲ
nТaCcMT�@��`C�"�k�6�g#�޲_��7�I�
V�6}��^\}�0�r&�����?
�||���Ϸ��ݽ���~y���_(�����ۏ��_no/o^��&�9���Q�.���
�;{w�����ϋ������F�߶�+m� ��������̱�
m>�?�I+�����׷x�'�rJ���C��\0aͥZ�\E��)�
����L�?>�Z��J�%�텺��
+O�?����c����E!�S�)�͙��i�(��BH��:��:����nl���J�8OOQ5eV����V�q��U�
V��b
+��L<��,�U���,��i�\��h;����e���qD�����sS�/����^ZInS
+N�J)�$�[6���o�s�e)��J��}��;;s�w� 5���� ��ڢ!*|�*��s�� ���烤W�a@�2�s�~�4-
����t�NK�7-oh�k�=�E	���F�_���u�ݶ��z�M��H�(��C�
+`�)��t���R��R�͜b$i�7z���B"Q寐�d7Ŏ}����4l"��i���1��N�c��I)�Zo8�v�`M�Qz�NQ]
fb9�u� ��q�f��[�����NP����tĜ൥)7�Gv��~��T�����N��fe�?����؋*%�5֞t�?׺�K�1�Aق�	
4�36O�Y�Nl�A����a�9Pr��ϑsB���h/�e�,T\W�v-�
+:�
h��:~
+��8f m�
*�Kr-
��
+W5v�3��zV�bħ��@�N3b\ܛ�

�Zg�Ȏs�x������
'�
+B�ָzy)Tz�QU9 v���N��Yn T��e�#m�	��[eG�
����Pn�n��a�5�/_��7�ϩ'�/L�t|����q��������>��
�}����������H�*UK���-
`��#@\�i�ԨB՘GC���PY��N5
�!��k��i� �Y�9*7s.y�t���؁x��6��Y�6��m��1��
+�h���ΐ�����q�Y�S�N�Cc��T�]AJ�Λ�A�&�6*��L�6oj�� S���[Cm
T��+��ê

�w��$R��L��;��9ZQ�M_��@>�jB]fC�Ќn[��}5�W%6��R���Bu�ai�ކ�!^��ǩ�+�e�����Q�*������4 ;�����nG���P�m�d�-łv��o�/�P��LI�H:
p�>tl4J��r��	&##���9,3�4}a�Ѽ������v\ġ���v��(��g���
����M"BM��W]���e
���Dc�-P�6�6 
D��Q��<�Gx,�(�΄g��kc6�}i����� Ӊ)j3��`��A{�[�iYQ�Gy��Q�YE�!<�dž>
4 ��*
�&��1�{X�Z!��]Xr� ��A����"��KF|�j
`���>�/�+�6�V�
:+���`5m�
{:��V�� �xD
j�9�Zv��ioC�Tm1��D�LS�����e��@�O(/�t1�K�;�>����̄|p
�N�M�:�aY+��
��������{�sb�ԕ�1Й��1��H����j��.�8��Ğ�jCK��Z�1�c��
��<�_�^۠��݉��"�s�[1�������7����0�T
B��*� (�F�I,g�M��Ӈ��A��r�j,���U�0]'���
��f'á����<���zKwS���������^\������o_�����g󟿿�Q��
����?�=�_���{��������C��N�
/����[Nb�=��_�F엣
:���t�`���6�!]E�
u�u��^5���q��./t�����R��>w/�����3����g~���O�Ou;���o����6�)q�E�ji�ll�J�ب��r0�
+���Z������p˂1f��t.uD��cT���㰅ߩ�<	x(Ӵ
l�z@
+R��S�P��]Bkװ>䔶��t9A�gv�ޫ����S��V��EgZN��71�C��A�����m�6��j"6X0���%
+�D��{�

+�k���Ǩ���
��n<ϔ#�js�;�G4��jܻR��%�S�A��݆ԥ�v`L�M��Ω���$f^��f��,��LݳP���p�o��y$/��"��Ԋ�TL=�q\��
�m�[f�08c�u��͞����S��O0���̬�lΤI
������M�Y�;�)U�1��Y���m:wA)��^6<`�XJ�x��ٔW�
Yu���jd�
+E����q4�
+�
�^�.(^"<�
�?�����	��!X��i��9>��Ҭk0��>���M���(GI�D'R�G�JՊ�g\�f+��2�%�W�vb)W\��X
��.+�j�����4taq�w_𨗿ev
+��������ݏ�������o����?���]=Bq=�����ba\��G�/��C�Ҝ� ��
+o��t*���g,�D�P� �uz���V��W�Sw�<:{g��P쁆�C>aB2.�qt�P�.H��
i��ȩ�v@"_�o�
}�ekCsz'�9�56��A�SM��/������q�?zy�`��_���zs{wDx���X��/������_�Kێ����L+�Ȁ�j�� �Q��6��\��n�
Bog�)0L
�*�*����w$�R:�^��]i�$�l�^Y� �R-��˜" ����2<�/^����H@��D �Sr��BBQV\�*Q���
3kn	e<��\���C"��{����80��8���<����-�)[�Q�z)&Lx
�
j�
t
����y�M��9-��s�w(����A!|8�T"؆L�}�`�(���+�O�u�]9�(��2���)�'��b�
(ui-G���N�:^<��U\T��
��w�'��<Nt�+��lQGI�����a��t��f
�BP2�ľP#���a��d`�
e���
�ک6N?�mή�HJv�lFg�ik0��} YJ�l�H�6���u��5Fs�R��k���\������f�s����t@Б� X��D��p��b���[Q"����߳
��C�
���ѩ�
�𔽴=
���hul8&&�%�	?c������h��M?lv����:N�RX�V4b���`��x)�z�`�
љ�F��&��H6ʬ�ꋻ�!=H�b	��c�~�C��A=�h��5m�-U�Y��{�Ÿ����T4P% ��c���
)�}��Ә�G�$zS�|6�@l69&Ϥ\ήM֠�j��/���c��Z�<��{`��y	�Y��gzf
e�@BB��� �`V���Z�mI�ߧ�6�^$ǂ�h��ΙKwuu�ڱj
!A{�2
�Zh��W�G����Դ��]'ke�v�_P9��wms�{�kՔ�����kK:4��t�ỏMDžj�a�	�	�}{6ܐK�rs��l;��C��j:t�A[cs�)�M�f�,g
+ ��a�R�Na
B#��r[W
=-6�~C^�j��,!dd��Z�1��#��ris�
��kgal:���l�eKC��:}���tg��و	mH� �>WԌT���D�z�N�Ż�̐U
�/.�V
�Q���A��
��}~}����2���̱��g
+�:�_$��Ǧ��Yȩ6�H[v;B���u
+�%#VWu��9�
�ͥPDK�|�IU����1r�L6W��c).��}��!ɶ�P���u��O����&��c
���|�=J�����a���vK��
ܗ���ZAǾ:�iE�S-*AX!m�&��u=*Kި2|`��
�`S#Ր^9
UI�̞
���#ě��:�P�ڬ��Z	�
��p�UO�N�1\Z�J
^��4v@���̅X
���R�Q>����i����P�H��K��1W���DcA�Kɪ)� Q�k$.C�� _*i`Uj-���
���#6a��m�[
9� �ŦClq�G�Ğeq�� z�:���+{V�`=㲘����ͪY�:�1
���Y\���2�T�|�M�2�x��֪�T����7��A��A�7�N���z���o�V�up<�M���Ez01���
+b.��
Zi�u����W�m�W�-̆=�Y붼|�"Q���Ʉ��N?�SP��\��&E��Ѯ#�K-�k�fU��GR���->�z�7�ʺ��b-��
�×�@��=�wnn�"(\=x��ձ�j����t�:M�m�m��wSt���,͚j�,���{�9nI�pVm\��1�g�iT��gS�U�R@���Ns��|,�Uw}
�]�&�n�w��7[�M�Y�|�c�1�y��M^C��d|j��Ӄ;���}�����؉
���8!{�
07��<�
P)��!<��}?�n�e7����vd�8䗨��Ř��o5IW"s�Apu7&Ȑ����aҼ�;x�. 
���I-n,.uq,�[T�	X�r��~;Tcj7ە�1^�E�
T���ラ�s���f���4�q#��������
�K�F��㻔HYAJ��k薘�Z�ټ-�/���`o��+U��;+'�m�3���!�ux9w~��*Λ��"�U9�U��u�ۙj:X��
6!�i�{����E9����l- at O��i|PJ=T
9Ҁ��S�I)�4�R!SŦ����ԳTJ[#[�0����Xud_̓����E��G$+�ɮ S7F]
�kXo�ދ]�I�P���f:�{�
�����E�ƺ�k5F*D�ߡt<Ӕє8���W�����]���<�_�����,� ��.yte�k��aΫݸJ�UТW�
<�s���S��ȿ_�+�> �)w�k�8��j��΍N�G����>N�X�� ��4B�  8����8�Xq�׋�g�8�p�^�JN_|yz򭏡?'���,B]�/(cKV�R<L|�B��H ]���6JZ(�Q M�`Ҷ JL�
+�`
x
��qQ���)5d�۸�غA.{u���t�X�^KTn�E�
��D�[�f��|,��e�����ЏXg/����5���� �
�
�Zm�b�Կ���NU�J�_�[�s�DSO�<(0�'O
�5�
á$�75[��h5�~��A:?C�Z�
j�{���ʷ���
+�ĵ� �bWx�-��хH j���oi�#�.���<�Ie��m���*�/9� :�6l��v$S7CG��
���e S��N$�հX
o_ս�h%gǽ�Yd~��������0��`�aI�
��"��Ƌ=V�ET��
m�K�S!�[Nv�H�=]3�
U��W��H@�sq��Um6Cʯ�If� v��{�C���� ��p at M`^B��2sg}
+�uE;��igU��^�ޓ�>������u|���������W?������p��j�g����n���77߽x��d�S�OD_j���O^;q�)����o�^���O������b͓o6�H��y��?ލ��+(>������{7//��.WkJ��iG�m��`�_|��t���z܄G�}N�n�SA�\
�����;W���#�b���;����r��5'�A[
�d��z�U�
�P�e�2�|Kȃ�zNG���|�@��j�l�ƈr`
��
F���aܟ1ȼ��;���cm�a�L�P����*7�C�
p�|��V�D��5�PEK|%���j�q5�'���I aN���L�hе
��\�߯k�����
� O�3&�φ-f`gZ�/�0&½	�$7��>{�
�8�S3R\zͱ5�kR�]UZ>����ur>K�������
S~\������ϒFA�\�ijzw�� B�w�-��[i&3�8Gu�)>dn鉃��A�94b��J��4 at W��?��
�@>k�l�&8t��L���-Rۚ
7���|�C\��
j}D��b
+�U�DűiT��~t�Ӛ�3�,�
T݌���^0�qb!Q��#�F��Mƞ�(�
>o��tf�����v|�Y(�ˮБ�f��
x;��d
+���>��"��'EP�'
�n�
ƒ�^�;��}�
+�|u�^�p˘]�O)���r�A�a^�

QE��#;c�(k��U,c���k֧2I����h�̅�ƫ2��#� �u�@2dNc�#� ��NE�d�xBйa,[=���a,^rp���Vq�
Z�Yhy�M�):j���'���
usv�S�

:=�����\�n#xݡOP�<,�
�'0
x!��|}G�9���vI���+�/��!2R�kzO�,"��<�
+��88��	|�R:���5��2���<�k��&Q���Q*�(�����xh���$s<�K��:���h7B��f"��Ⰿ�I���2H�.�+�O�oO�s0�f^��1���
��z�N9�r�p�����e� 퍐xH'@|}�O��џ[c	VB�7�g��t��c�v5K� n�`>0�w���C�p7k��Ý�f�=툃Li��F�S="$��ј�[�8���
�f�[t�^�=�g

�q���fU����j�?�x�D��E��
� f�Du��_� ���3�
k�_#�B����a����ժbW
VWդ���32R�wϬ��gV��T�í��Y�h�U�5���ܙ5����a3�v�aE��ʫz�W���h�
�84?
��t?e'����a�T�<+E]�y9J�"0�g!���R�忙��C �ٵ�B�{�`����
�qm/O�?�����5,0__��uO�!�G�g������1PXi��M�S
�jw��|���VG��7�ay�و]��U�X�������K�	N�S���s3�[���
cM))���#f��Ҵ�:~z�v��Mem?XJ���U�	�ʎ5�Z|�f^����(G��
�x�k����K8���>�Q�����j֭�.e
+Cׂܱ����=\߁��7��o��d� YR�x-����
H>~������
���7�#�Pܖ�U�K���1�2�K*+�'��/Q
+���R��kc^ϼyci���r��-w���4�������^GC����qM8��zZ�\q3Oͧ����Y�e��S�bS��I�r�
�b�h�~6�7h�_��.�څWD>}Մ��G�ҍo�v{���8�6M��Ї�S����N�j,
�V�J�`̍���-2�G�^�B<Ot��2�\<�/����2L�R���N���;���۷@nRz'�UrngBy�9Q� ��|}���oS��,��T��n�+W]�vJ�G�Y��-����[�Υ���C���!/1���xW(X
�,j(����IIV������]�GP��a�O��
�GK��O�
,�O��)P�=�GR~)v����:{\�#��"�Ӈm��bfbk&
���ס|��5>��Ѧ�݈X/]�7HJi�����dA��2�6S׶��b�i.��m�4#	��P�V#>�]�OJE3��� �
�
>l˥1>�
�>��0�I�6�=���A�,�eaxjN=�%i�ž'��!�,�%���U�^�ue�'sJ�����%S�s�eL�����kG�<\�S3q¦Xݧ'��t!%���L��m�c��.h֋UlsFr̝u�:}_�O��|�����Ʈn�E=�Z��wf
�	�y��aOm�9���N�EL���.��
u�����k�j%�
D%
]�lO,���C� `��#�\�}�!
�b|.���ʄފ~�V���9,�\���̜�һ�ǥ\�i)�2��z�.��yY
'`͢�
���o$��LL�^%e�_'N�
��Zy$�gm��p,�Z�Q��4<��T�VVS�J�=�u
�y��+����eT�m�7�!5n֓�q�[�pD�BV�
r%��˜Q��'[�$?
�5��6a,�9J�SSǕZ˸cf{i�"
��R��3]�`�$vq�X����IECX�O\��
-�o71�8)��a�S���a�~)�Oio5�W�?� �PU�
��J��9l��lJ��M�ܥ��e58G�Lj�`L;e���J(S��z��?��j�ڭo�����*?5�rxE��^q^���~��N��bX��(�nj\=6���o�-��7bT%��l�Y\�]
+_R���0�Q»��ퟓ��c���0\����� 4QP.�@-.����Iy�5����ލ��X
{�P�0g�/�M9D8��P�K�3n(9�M�M��gpz��aG�S⇿�^I�j��$v���	+�z���(�m-ʛ�a��@4���y��}���zQ��P�b,C�q�/>�N��<W������
/fwĘz��VH���
������f�⏟�m�Wn��������]l�S��"Č���T;��)Ӿ���*�)N
��3�T
N��-'�A�C`e��a�s�U
@[P#��O���o�
��h
\��K��-�sRV���}�?��xT�1:ZA�)m|�U��L��I�aMs
0�H+,v*�kVD0�^���$mMz=����)��Ƃ$>�Sc���+t'_5���3M��b�L=�gm	2iZu�g;i��Ү� ��2��#>Q�>X��D��Dm���F�<�%���T�)���b�U�T#&�D
s6��L����P=���}����\y���d(��z��js��w˅�
_���ӹ������H�S�w�R���F�<@{�Õm
2X�:ݨ���kT�}�5?��rH� �!L�Y��]���X�q�K�;
+iU
�4�4�a4��4��U�7V�-p�-WS7	O�{8�ķ
R�1�]�)|���wX5�™T�3B;Q�F��ݳC�"w	��5*2R
���6'�u�X�I(�g�n۸CКhBM�����rr���Ғ�b��q�k9��#�R�7_�M��>�c�&�W=��-��(G�m�!w2����h��f�>� '7�
�����@�!p����>���\�AS3��<C�Q]"j舘�d�[q}
+�����ʲ�eLW�O]Ʀ��︢�#�
w1#�?����wU���{�����{���t��U�]~5�hY勻�Gb�&g�Puh�o���(���C0�e`�KD
ڄ<n��I�\ַSK��Y�;i�)�� �Q��u�'b��s֮�.���y[C�u���=5�qO�XJe[��A"�'%���N�{�J�������#7�z���_�Kq�u�a����?	_Ҷ)�_�5
_�t���i<�ɫ��f�)7`Fƥ���~���m,�� �z	��5��l�l�	$q ��}3hie��H���_�ٝ�%)������Kb
��9;3g΀jr�h_�n� ��	���2дg�Ȣ�q�TX`�9�<��Q{Kch�����<
F���/D�j=
���"�i��b�X��u�v����ڭ���u�Mhb���A�Z���CR.����l���䜂��K��`�J�݅�w�[����&)~�J����y�����M����i�|��K!���6'$���a�4����oW�'d� ͅ
�;�eH��^�T��m���!T7(�	�t�����{��]�����<�ٖ�E��Ѐd��o�K
���W����-
��Z�'e�M�"W�u8R�#�eQh���T,��B�^!x��.�=須�*UB�Cf�y���;,�:�f`�p��T)��
���J';�e��P�&�T)Q���-���
 v
���,0!G�Z�Z�]�z:K�-t=`��A�� PD�;�����-D���mh	�O�&
+�^t�� / Pb
+|�n�X�j+�	=�t/ C
׀�Ŭ����
��T��Ѝi-'�(�PĀ6U��Ɓ:�T��'�ޝ�G���"z�”�&�c �a�Hbm_F ��xQ=�nx>}�F-�bQ
+>��P��k�`���
+�ɻ��O9C�@޵H��x�Ff�t_�L��m������0�ۊ�S
 �g�(���/>�e]bf\_f!puc����h
j}
z̉T�Qi�w��-!��١ה��úF`*����Z!�%=��.B��O�)P
�E�C�nk���P�G5la`7�����A�&�R6��R�ŨxT��Mf�S#�%�D��r ����=��5w�PV�=�z�@�y,B�}��-��9�bv#�
VA�
��i�*�n�cn�?4]�<U�M��v���1�W�0�FX�4*^;^��pL��	
��PV�Z"K(�"���)�pK�	G
RROR�B!�.S�\�@ZB�AuPR%,m]��!^�}4r��!-*�%WQ�fE4���J��v�F�a���=��� }$A9��"Q�ѫZN�ހ
ɫ�/*|-��n�����x6�~�`�Hӱ�ՈQ�Z�r at W
��6�H�h4S1�]�$t]$hK�|������7P�B�Z�ȼLWs!�q [...]
+����B�Uh�8ƹO"j\�p��5������xb
0��N�TL�m�i�ݸB�
���;�E ԍ�t�c���'m�2з�
�x���`C�IH�}2%z#�'y,�/�8#�[�
��$qHb����	�d���Tkw=*�[��t��Q���i�N�D�3k��dԴ�����Zm4�7�6��ի8�ٕ
��V^�F���R��緳�o��_��UQ��qU�";{VOXo��ه"ɪ$�??'��O����g�7������ׯ�\�=��O~�_���}����Ki�ir1�������:����'������g�v?��5>g��7Y�}Z=n���eQď�/�uqW�<�����͉�*I���u2��<��~����ὨƐ4���5��1(�"��+^ʃ�q�T�N�� �F��
�..����U��?����Ꙅj+�mpY���W�'��2�$X�1�UR�W�tPY>��M�։��/�ƾ��|��ˤ2��l41��.��uoV�ܤ�$Y��l�9̥;�6�|Ë��G��p���	{�]��=h��I�������>��ɢ"���BQo�Y��~5.�LC���1�b����t��o�I�D�!*W�߲���|^]�u��SW�P�
\�5^\����i���W�e�rM��IyZ�L_���˹&�:�r�]�˝v��.w��0L�~N���.g��8�rOc�{
�e���UZ���Ue#[��Z٥k�\��sb�"WV�k�)������t#���f�,�h
�nӊ��%�����5�q�kT�,v��Ÿ�5
��]>��y���[!� �q��<ɪ����#��xI���,�j⠥��3
Ŏ���q�i��{��<M�1(%P�M=tΨ1XV�)�����4/~��J����$$%�
��X�s>��{`�ԉ���F��<��xA2�X���i��U�@�5�� [...]
/�*
���<
+�&��*`��.��*����o�4�>���TzrD` �}	�ER�ּ2��:d���;
+�('��a�`�b`;08OKh�x{���,
���
/��`��i��i��|�,yu��Clz̡|@1<����*���w���^:��8z���ܤ}�3�Ó���9YT�����������j|0
�
+��,F�\����x:[ŋ��Q
+A�?BB�|9y	ng��~��/��[����b����~���8��x���x��oH`
g泌�{�(�Y^s~�nV�I�h�vs��:
'$�p�����^�U>ڊ/IWC��(����X������'3��̪�����$
'�289���rY��*<"q���fe�Zݨ�b���i
��P_t@,Fg��s�$"�n�uqW�<�1�	
�nF��,�y���4jz4n����j�o -�� i��%U�jh��ַ�R�[�oc���
4�'>.�=�`����TVI5_}L�=@e�L�6	['�C&�Qx���N�M���gջxc�:��� ��E\
endstream
endobj
21 0 obj
14146 
endobj
22 0 obj
<< /Filter [ /FlateDecode ] /Length 23 0 R >> 
stream
+H���n�H���w�� `��d+��,k"�� �{g�Ȣؙf7�ٔ�<��ԑ�uذFb�jS��U�W��a�D������^��4���R��*�Ϭ���7�Z�U�߿�2؟�\.l
r}b�-Õd:{���,4$�w��O�3y���Ϸ5�0��n��i9O��[�h�nK�����ᲇ��
�)$�
���
�B�
\&%�)���(�=%���,��X�O����|���P��p#���˂:���[b�m���)��� ��GQKP��M;��Y���Hi��tH�5�DH��tZۯV��n�GJ�[���m�� �LE���
\J�<�%Լj�V�
�f����QԒk�ـ��=&����#Xp&%�
E.���P�.%���,�Q(E�E�7�`��r-��,F4=Z���"�V�\
�^z�
,+�BQ�~�RIR�v(=�e�����̢ŵ�^0P�񉒉g�"UP;�Y��+��
R0���uʨQe�5g����j]�l>�@�6�
+c
ѹ(��������b��E����3��"�Xg�;-��z�W(ī7� b�G�ߡ��d� G��׏A��hf&
H
���
�Y�J�
��Q)3�
୆��Q1���W��ĒQ�����!�����K�ס��Dƍ���E*���iJl)���PRu��ǵ�|�,�@�	�	��eط�@J�LY��dK$V|J���GѰ�zp�� � �2J�H�����|�c�>Q�˫ϵR�	|�&��l$�r
�Pz¢sK�����}��ʖ
ZwFCR�;+4
R EM'������k�[�#%�-���6fap&�"D��y�V��	}J �x)�"O�=�g�3P
R�ZZ��e?=G'�
�{�Gǯ��nh%��Ip���5� 	v}���'UJ�>W�u����F�FW�Z�N
@�I1,�
��6.������Q��q��]|��K������wOJ���V�dN�
����D��+Xf�BiG�����j�K� 6{3�5��?�2~��]~,L~]�@���*��#��}5�y���-�
�j�5>ILU�-k�ܢĴ�*R<�͌Bӷms�
)��K�بt���{y"���n|��������5�v���J��� [...]
+t�

[�+��fZk\���W��\�T�^���Y�ɡ��S2$0���rG)E��묟�P?�����(�џ�R�h���k/#&��L��C�~��h�h�Ԃ������G)���mu�N�ۏ�ﴢ����� z�E�r˓�ܝ|L��u�*��Z�2YBo:�n�Q"9�a1aMT�	|�%��Kϥ�e�^(*[[*ZP��sX��
/��C;��hq�g�4�i�B1��V�
+j�<�4�9LJ=Z�ќ��̌*�
�68\�Ң�)F;��{�F�T��P[p/|�Q
+Nq����`V
��� ��ũ��PC��4/t��x���|��ڕ �
;��mD>�e�i9��U��f��-JP��,��A3����X��_�
P-�
�A���v at p\;�
������2��)�����78J$��
CYIPe�0ܢ
�
+?֛c�k�C�&9=�Q
����?O&����t�O��������޿{�ȗ >
+�z�u�v�0
.
�ϒ� %S��`��
+�
��%%�H1�'���V�T�:������ z����m�WyK~]�u2�=Fz���F���S�2���C�>�R1��N�����-C�mw�1�@�ү-��%�C|��vH%��
֤°�\+c��g/=�~�z��`fm�$)�8��òmnx��
Z�/�E�k�=K�!0L��g�"UP;�Y��+L���a�9
�Up;.mpx4ܑʻ�G/�cgr(p|���T�ڂ{ỌRp�.�������,N�m�J�{
��g�@R�I+?�F�q� ��k"�f/k��5�
+�P���a5@>W�W�@�=P��9)��,lbS
�,%)����'5�5[[V��5[[��5[[���W�db#<3��>��8��C)4�sN��{�q����N6�j������ 
-e��"(�z_�D�U�%���룉UgI�P;��0�f+|��S�I+ύ���P2�t�X(���WT���"K	�RU�
�`+B=S��
=�L}��]@��<�
!�V,�Wa��q�q�V"O�nN�d�Zv6艔�� 5l��5�
�3�~,�`��L�I!o�r����c��W�z�4G�	Uآ�}R[��Y�R
�][��E�HI`�"����A�
+��lq�kK%I�ա�
�ms�K��� }�O��v�

�4>�1��V�
+j�<�4�y���C
+f�9
�Up�����%/-��b����6�Ɍ�Ll�g�
+���}D�%~ ��C��@wα�q/4.>)�!E�����I	�G8�I���/�(J�Y�>��*p�>K�ډf�i4]�F�O	)-=���_K?��$
8bp9�e�J&}
$e:y�Y�J���\�k�˪?z
yP�������,�[;Q?|9�eE��P[p/|�QBJ�gy���
+�P�����e�T'X'�X3���М������6߫3�;N�%�� �ܸ
Z�2��?w(�1.֛c��()�n���ᶀ�wZ
���
)6�
�ERu~Nc$:�7͑����
i1��
I��͑�)�qz��c�Gǯ��L*6�Ʌ
|R�����F�����G��Q��SY)�s�v�,
.
�ϒ� %S��`��
+�
��%%�H1�'���V�T�:������ z����m�Wy�J~]�m�Y�ɡ����sNU�-���(e�Kͬ<&�����#Xp?�"�i�G�;
' 4��ˆZ��Q/*	G�dlrFPV=�
++[Ck���ʆ�
�f���khh�-���zxk�ܺ��P_=�.���S��;�����Ș
U�o6�
�kJD͆F.ɚ
-��lj-�fCk6�fCk6��74ܼ_u��Q����ݛ�2��m�?�˧7m
�_��I
����6�'��a��+2�i\96s��}����^O�Ȼ�9�������A��s�F��3��É'��E�����
D��Ҝdj5��D�V
�>���M	?y�gF�PY��QC�v�:�k� .{9b��[7�x7��
sJ�s7	ij��
+&i'	�H^�9���aլP/m]�P^�ݸI%
j��dc�~Zw:ڞ�N�<��f�*@���LHo�}�"8�`�X+J���w��"tSs׊}
J�����\2҆�	O-=pJmaE�����,n_z��e��VK�w� �o_7\;�>�f�!N�D��/Tj�<DZ2bF�e��E.T���ȁ����T���YhB
�KT�SO�(5�	&
.�E+�HQ���h&&額N�x�M�⇻
/
�I׾p�4��|�E�Ti5[C��?v�ւa�ov�MKU�?g;X4yW�?vj\;q���l�XS��j�b�\8W!�Z2M��IL�Xj�'(E���~�b8Ŵ.�h���va{W�gF�PY��QC��	����-.n����ݸ�.���d��_O��[�2fÎj
"A�"c�	�{�����b�:��}��;�S�ɦ����i=�|[�Ċ�"�xf�l��H��@6�}���
�H�h��#��qu�]c�:��s�;n�[h�«�(^
���` �Y�
endstream
endobj
23 0 obj
3636 
endobj
24 0 obj
<< /Filter [ /FlateDecode ] /Length 25 0 R >> 
stream
+H��W�n�H}��K�3��f7�<�26��ă�'��bPd�b�"5���_����P���6
r�Y�Su�Tu�i�G��������(ˋD
Fu]����[��M}?��O�}�3�7����~�����z�@�ɣ�~�Mݔ��C7Q��S�y�1������,��(�a�%�����tc0�����J����F��}'*�R�@-��-oFq
��:�Yk>�eLU����2�6 �=u�&l
����������*�E�.���"^�2��N
�|�hiN:q􊦌�Q6
Fv�!�x��(��(;A���I����n�mغ�濶)kd�n� ܭB�M��M�g00�
��z�P����
�64��W�0�r���%Hz��
"��6��ѯ��4�E�g���;D��&���h�N
m��$��t��S1p>��ޗ�3�܊jw��Z,m6�QSUi�g�cE�����x��6�eݖ��m��^�nsh�mP�	TU'��&������-F�����`P�N:����l��/T9�$�"����52�t_N�j�d��$龝؅�n
�:ˊ��tO�Z�{\d�UҵC�[�e����D'��dס�E�_
m*�Q����kU
Tb4.���̈���>�=� '{�L!X�U�Eխܚak%�`�����W�()nO�k�d
};M������`<�ʭQ�Q^� l��njdB[�[3�E�H�x�	�\�ː�����
vžo�i�ݍ��6�>L�2��b�h-�	��
Ѭ�.4� �E/�6�5X�{��/�2�?)r5����&h+���͊f����Qef�9��ug�v�~�{p��?x��E�dQ�����u�&��ls/��3��*�e�U
ض����A�2�z7.r��"d�Ȭ� [...]
��~�
y����A�2m��_f��z��l�
�v�Ѯ���l�
�6��(�k.�{����r1T�>��Q6
F6��
�-H����q�ج
?�M�U�l�~��<����MGae�Q��H���ORܙ�2�W4e,l�m��N�Y����J��������"�&PK�/c˛�tˍ|�k��j��|TU�u<�L�
P�EO��	�B���'EV��"8w��R>�
��q;%o
?�0�8ʬ��&�*�
$�A�gݧ��&�d��󨩪4����b�x�����Ŷ����Tܤ���	�ڄh1�7��`P��z��>��m���e�X[%ݗ�C��ɚ
Eҹt�9�Jd�[�أqQ�u�
+kw�[������,���m���Os��Z�,�*Ƣ��s�l��`�����i[[��B[�Y%
Z��k�N��B�k.�����j 
����8k���Y��`F
���3�
Xd�_d<U'$� � ͇�`�K�����:���A�U�v���
���k1{��n�|^�
s��VA��=��Ъ���Y��96�eG������m��.:i�v��҈@��4�	�
+~Q1eT�זv�>	�Y�փO��~,-X�j���K��}k��'lJ���Q�ٔ��'�6�����!F�m����
+��
��U�iR;�`�. &�e0C�^���64��W����ǯ�,�二��2�)�f�(��Ӻ��X��>.�<�S�E[�=	� 
��T
��^}���y��r~��W6_��~.��[
���X\���7�>�'~ԗ��Q�� Yǐ�2ʯ�
�BΑ�su{�9�?ȹ�&����U$-�خ����O��v�P���� '�G��8xuȃ0t}yN���(pF3Ba � t�sG)f���*w)��~
3���y�rߣƭO�Y��@����9��0w}�+;qI�0
rC��B�
�ϔ�
�h|�8
�� ���\ڱ˱�^�����<�^qqm�2�|�D=ϑ�#e�!b*����?n蹄�227��м��.
+8թ�0��K<cbD?����9D������ts8�|g��`�� ���C(�u1U�
�	��L�
`
��uee^��D�}bB`:R��ˈo�B9R1T
��
p9P!p��a�&
p%"���>
%�L:�����QH����%�>�
�O�`�؟</K*)� 6
�p`�=� �sN�
+C�"�62
�$0�茡�(.@&�O�(��ύ>
�����O��$����7Fn��ih�</�1�~�
Š�Ae>�P*�8 ��"D at S�� ڈ�~d��Ì"��4�Ȉ":�ແ�	P����N�B@�Bt���������5�nZm�#��
��\ 
�D�?�~5Vb���yYZ�0���r���%�C(&J&e��Qj�~ŔiUb��i	TqQ�J
�Q8	6��ax
)�H���@`D�$I�)��CӒgM}Ė��5h�&v._1!��SV�	6���|!|]\
�j���s�Yȶ��i0� =�6��a��
�v�:k�h���e &R=��'��x
����
�S��H���A�X�zb:�0�ui0Cd2]6e��T[�9J�]�n��{�
�H�����!�*#i�s���(h3
}��0Te� 
�XG m;�*�.
�Q&��
��3L�t< �`"3��잖���$�"S2$S�_Ō��q0��Aݹ�
 y��
�J��6$�h��
$u� t!�T
.��,_A<O�����ֺ�#�ݠ�p�$H����J>IviZ�J�b�X�2��>k^��{e�FX�F���̚5kE�l�^��9�6��
ـ�'�6�[�v(:b�9
I9x�|��Xȁ0�GQ�
�{�.H���`$
r��C
�R>���rѶ���r���I+ƃ!Q��G�M�
+�P���\��6���"�=�$nf�I[7l6��6pr�n�
�Cy�8���(>�r�6�;Q�`��,hS�U���4
(T��)��H���
���w��i� Ұj��z��2e"�YUԦ��c�h�%h���B&g���'�s/XL�9ĩt[[ Ob�����7����i4Ĕ��҃�����*y�)�\�&e����ks84�_0$�
��# �y�&�eA3�J�^��:�F7�5̾��+Q��|\H�([ۄ�\��� z"��SC�������А���@B���s_?��C@嬿
�}���VA����*$�D2�b	Ocj�T�i�V�߁j�r�ܲ
0j��=��F�����<(L��8:m^ыM�P�_��5@�s���^�QN˕o���
U�&�AiEGKH�+cJ%�B๼vC,�;�>)D7D��
���uHM(��O(#��J�
�'l�Y�8J�n�y��+
��N†'l�.M��м�fPp��)�Hʌ1�hw��P�
��넋����h
#T��B�E!
+��fPs� T���N�y>jpZ2�ˌ
m>��F�̪T��h�<d����L�Pї��׼�
+�ZvS,}v$�
���
8�
;�T{#�	��L�j�T>��L� ���
+��L-��u�!����.�����"�u�֦��=�e�3O���Rl� ��I
��+f��gZ}r�͠���Y1IhO 7�
�|1	�8�/���?���=\��^�^~8zr|q�=���٫����w�����n������%/>]��?�y�}�x�IJ�e�3�,�Œ��-�2��"WYE� �dH,(�4�5��	��k�1z���1˄�*ÂI7�d�5���[=ղ�jP)jo�� U�8Y�y�)R��<���Lj.6�1��?
٭@��1|�-L�&Bdo�=���N��PP�[�G5���[�z)h�,	�h�Y�B77�݁U�h
n{^����T��,A��L�	���
������U?�dC`
��sX�����l)��Y�׬�i
+U���u�����z
+�.IN#���9�4�I��&`�9�d�3�%2KJF^hy �mf,�ٍ.��FrOJ2^9�M|!c:8�
&�b֡�ʊ��
1"<
�0̉��.7��4ư��'d�߁$��0e�:k�ơ�&�l�3S���4�3����1�a,9o�jm�|ld�C&ƆQt���&'~"mql��
�4��	(��
��,6�c��,�
�5uqK��f���q�
ƍO`�kr
����I�
A�)_ at .�ϣ���.��u���Qa9�_ig�$UE��N��Y�E0��2��G�k1�:/4���
+x�Q&�P|�Փ�H)��r [��î��ϒ'�E`�_D�r�)w����Wh��ļ X�pAs���
��h���Ld7���F�%��&�ŸC�f"���
>�*;@�5�>�N���4
oCjh��C�����:$�!D���`�8v���
@�%��
�\�� ��&�
+�����o<�.h
[�LE�б�\�H���-��XT1��Y=[�c�4e��f�S�u)��N7
�
�3�c&��ܹ��.i}ȝת!�M��\�Z��>Hʭ1wR�N�aP�<`q�C�

ڠ��>��n��~j'�!��x�.⡧���ӣ�6=3��Q�
�������ǃ�CK
��v��Ľ	�&
_�M^��|ķae�~~<8��.��
Wʹ����q����ɫ+#�1��������}dF���_6Sx��x�
�Y�5o��<�ɹ��6������Z���*h�s��������i�M�Mq��.���u��f���ͦ�3��	�nB0��j��3����|��ȱ:XU4xp2c�B��t��6(7�;X
�ᑷ��`
+ܿ��fv��:�f�ç�
M��ud5ּ��Oe�}�q��Y���q�ރ�襒�r�ָm�D�3>~��3-�9�\iM��8���Y��s����h�9�H;T
�Z����m
+F���[���8�-&�u
�M�#:D�[HLSD��(
�ă�!'PƎm%�lR9��7e6�l7�U3�$��A
&K��L����P�^���K��N�47��>�L���^����k�LN�h�R]�@�'
f�'X�#�F���4)�����a�<آ��`N�;��K�K&@�

)D
�Nu�R�����^\�
��n/�?/?
=9�8aOP�;N�g�
�o�-'��g�ݧ��w���t��W��߼�~�~	��Y9x�V$���,f�5�	�n�j������[�
�&Z
�!�\
}�J�X��z,
�q"+
�]��]F�
��0n��u�� =���>�P3DP�� EA% 3�Oe0R�F��}f������Z���q�BT���j�
+�����))
�mW���i7�;whtPT��'�Tb�V�l��~<>�9���ܾ}�����l!��w׷
:9���͇�S�{�s=
_�?��a������؎���Eध�X���
ޟ5�W��_��c������	��#��~���
e:Ԫ0��c��i
+����e�ug�
l@���P�¶������kl�3�0�oV�������~�Ͳ��u��;�_�����_~�:�pu����~a�8��W����㕯:��/����a���������q&U<�Zٴ_Z��Lh�
�s��/
u��}�&�&{�T�*z
zZ�Ix�?�/�
��#
+�#�8/H %�_��bʼn�X�(HQ�0�
�k<�ſϪ����ǎ�C�A�̚:����ݵ����(8�aO�D�c�X�A�.�l�Ⱗ��2�c���j�6�,}%>���}��z�W��^ߜ�g��敡�\:N�����~��>�|�G�C��
�=�z��?��qq�ۛ
X^.)���ּyż��
�*��2E�+(^�6ȍ�Xp^��E�N���8�j
�n�h�0w1mY��%���zg_k����l��^3k"עV�# �)a/�4v�d�
�
�2�[mgJ�H�q��)�
qu��3S��$c���@��+�;�8AG
IkD-A�N
 J�̊9���,@�5�ZW�\�JwX��txƎ�	'�T��`L8lj
��>�Jk����F{��s0B�!�	<]�8���{w#k��Qk�@E�ԫ?ٴ*J{�T[Ls�[�Z��y� \��頻q��׈9�p�!
���:����͙N�ewm��1_�F��r�7m
*
+Wd�c
+\�����oi��5ש�A�l�gڂ��
�Y��Q�
^K3i�
-�*�3���;��/
ZL=���)�O~��旦�j�m��8`U���-mr��G�]��e\�>\������)g$J%x�=}�)Wj�גL����`�!�a4*�[
Ҁ��#��i\,
ۧL�1u����ɴy�7�#/+���(T#��-�;�K1lI��V��~�y�ՔJ���OqQ
���*���@�⤇�j9��Z���R4���B�q!
��%eA�B}�q�ɚB�F�D]La��0�
wҖՈZ�@�z���Vg�k��|����M�\��]
3Y��jI�W{Q�b���5`]j�訍S���+:&�.�`˘����!�&\�M�{(�����g5��0���e�%X�6�)aj
l�g�ka&둂���
1+XqV��H���\�2���
+v�@�S�6{?va��56YU
�[�(d�e�5��
���k`�]�� �51���hy_�V�'Z.�����G�V\�@
�;��Փ�[�0
Lώ�-4�𪎤j\sN�{ݴ�����6�V�P�t���F���ǧ E�̜��
��Oqq�|o��&��@��ڒ�*f���":Q7\�q��ߍ['&}qU
����TKw;pE:�eBî�g�������i�(5H�����LK�b�q�a�
�(�����G�W�߯�ǰ݇��D�����oQrἾǴ���<h#+i���΍
��h��7
#kb� =|+����w
�H���Z
�W��)N�\�
^
3Y����.����\
����v��A�n�
q䍵(�%{�[I�Yi�p�%��|JF�!]M�,���l��K�S��Ԭ�x����x�Vf�
(\�sa�JO��v֩���흑M���_p�Z�.��vep4Mڙ�Κ�8Ѣ��=si*%�i�(5۩���崄
KM[
S�l�`��f�
9(�\�]p��N׃����[��yG�|s��et
p�ti�ɲ�����,5�=p̥��+����s�
��S[69
F4| ٧OmA=�\�1)�KW�t�W'�Hف�
�N���d��#ț�d�ߜ�h�rۣ�6��JwT�>F��qu���C�{0�>v\ٳQ*�3��@��d�/�vi�a�����u��BO�An��֫g�����|�@{*t�ƴȊ>H�=
�*�R�5]Vu|��(h+�+[�
Z�q�XY��%L���ďӴ�˻��0Ņ6�=�,xe=RP�4s)���0je�n��.F�V�
}�:YG��:��ղ+�����8�:�c��c㛬S���qND2FM�r��г"����).��VlֺҞP�b��!���b�v��J��
+�VΚj,
��-�9Dm`țd���ʼL�"
+؂�������v�Z�
;T/��kZs�[
S�t�`l�\�5q�A�� V��ǺX�
l
�s����f/k+7ɛ3
 �e&�B`�#�i���Մn�̒�P<�F]9��L_�:F�,�_�GK�y�`�
n�g�f�+�€�OW?
n�?��6�w�~�b��
n�/������\���p��u�'C,��Ѝ8IF2)[05l�=���i�T����i��_�j���Ԃm�Y�J{�0P�������/n_�{�������?{p���ї�7��~wz���?\?�����ϟ߾������F�_1��?\k�է��������zw��������������S�K/q�̗������ӿ_�{p���7�'z�i�����\��s�H	+
�c̜_�����U��Ě/��~Hq�����%�o���u��S8�7����RU��;��d���7���v��Eq&�� ��z�}���-
+-�Ti���"���c��m������3���:�A�M���—���:���g�Vd`{
~
���8F���;%T�O�u�k�m3�rp\C���ZN�m����gᆒ&30TƐ��F0܎/����9��
�ߣ	��+�l�G��^�����n�S����N�
��w�υ���XY�
�r�,͸�`��j�M�
2ȼR�&3_�j��uT6-	O���`3S� ���QZE.N7|.��^̅���F�
���x< �5�4������닮gh����'�=��ۗ_��ͻ�<�G�߽~�҃�7�~���g��
�3H�<����O��
G��o
Go΢;���
�ϧt�����K|����e��=
r�U}�2����Ğ��t2nE�K⹊<��2A�{��;�
�m�<V4T�A
+l	"�^������,���Q�ޙ���X]nB��Ǒ���B�09�&������k:�H|��]����`
㶉r�v�����h����߿�.���(���ঝ׷Աp
=+]U^ {�|
{uu�ω'�JW�
Z
����`1�
X�>�)���jk��(���֋�����K�<ƍ���x at D�	�x�hȿ���zf�}6�d��5�t���&����^�ڍ݋�MI�!�m��
A�j$����{
U�o��X��]�
��8T���)���U�2��ɎŔw���Bf���G;��;�L�ڃC�ȶ%
4c���-�!oS����=Zgiy��“��G	�����w&QB �g=
���Vcf�cGB*���ȥX�2\o|-j'�
i=�8 ϝR/s�Qۢ�����:���Y9HNH
+�)��<ڗϫG+���Q��cБ5ʔF����=�F����Y;���T�*ʠ��K�ۈ�
f��l�l�i_(�������]	\��L�38�ǻ8���9lý7Y�f/��Јf�1�ykeA|�)�r.�Z�9
���ڷ/8
�u��x`%{b�&�A>�&J.74-N����`�@EEv�
Z'�B9��p�Ji�3VB�Y���=�N�h"1�C�p���1W,�R��T�e��lX{0�	E��2׽��. �߿��$�����m�����&�)����e1
���lO)G��b�QJ��%1�рb
��й�=�+�D&*�[V򶌜����g��GlŃKOA1J"�Z��6j�@�두
}��������'��
ҽ[ڇ�}��S
��dրޚ?2�M�\lX/�eا��8�]͠ ��a�w�w܋��'ߐS�2�5I*�0O���;.p�h�_��j�OZ�>�V�ŭ��׈�s�G΂�wA�?
?L��
�ӛ�
;t$��,���4�
*P k
����
��ʶlD�j��D//Q�O�*q��j65YMi�F;A)�ec
&�]:ä����E#�	���I �󖬮9"��
��h�k߅����
��t��
}���eq��T��$D�)��Y�wc�Z���m
��^��&&R��m-�WR�sK�}��Cリ�9�����(�B�6cs��x7�^ǟ昃P,S��/\[�4��C��,���Ŷ�H��.�+-�2w��H�;l�;l��-l�Ӛ�9��p���uU�ds�
�:)%1�{O
�:�.{�}ù�M��k��O�*:\�z�\��8lI��1
]-��7/�?�"N����݅�qv=�1v ��7�P��
h�a8���z�6z
+��;�W�k�������tg��9���A
)�Nq&
6����ߐJ�x86�'�d?JI¤
���
+�^+a�����`Tw�BW�;w�a������^����v�0��
j����
#�{s�?�
o`87���l]L"�jI'�ʒȬ��5�H�o�B�1�D��F�j��NYl2冋`����<	g<1��W�LS�/8P�k�-
+Z�amk��4h��; ?���h83�B
wXWQ�
܄�\���t 6�?G�7|?�qps�ݲ/�4��kL���cf8E
��ʺE��,k tk
��œ'�L
M���4qP��6c 
�16a�����=
��pj�ċ
bA[��YJ�M*��F��P���&���%-g�#&���.�G?�R�b��:�n<��5D.\h
~]�r,|D_��kƣ-�	0�Zy
ԥt&��saW��2X���5�g
���7e�tXsRr	��2Y*m�H����I���zn�AgG at x���d4�D�-�*r6F��f�hI���6;$)9[��Q�/����V�
[���x�I�5Xn[�,b���&�5.p�|�����
�?|؏/�z|��/^���o~U�_~��w����_�����������������������������<~��ץ"�b����Gş�|~���l������~����s?>��7�?��<�Í����]�QW��
[!i�x���9�
�F�L�d�}3y�,b�Yy;i�$|1suߟ��o�f�
x�

s�ZLoE�7�]�Ŭ�#�j���<r��ENP�[:��*
;��mJ>dt�hyAc3�3a����9�=���9�g-�1�Fpw=��<
>7�,
�� �ЫyàO4�#�5y��=��UZ���l+��o(a L2��2RU'��
B�(����K�)�!��p�����Ð8K�������ö
{ZR  �.aw�����
3.�$��`�/.\ �q�_�^�T	��y�����^4U�qP��6��Զ�Ө�yP���W$
P��M���=g��Tu0Ҍ�
+�ex��+�m�~ �)K��No{svR˳�sҞӟu��w�S����Fݭ_n_��8	��Ɏ�x�{(�i2{��T��&=�	
W�\�E�
��lJOj����Dx��0�i+ք
���2�>	 �Ib����n�$��_yC�2]�5�Cs���H,*�V%��.�k�}��b�j�4H��
�P���3�,ht��XU
� ����m4kx���K�%��=s[hH��Tӈb�ў �t_�
�
�?�T�QX�
j
pq�h�lc��792�
�ԝ�͆��\^���Vb��uYGE
+&�[�+т�dp���}n%��2mDm�>�7���{��x��m��c
�7�T�jWל�\�ԫ>T
{6� �����	�X��c�'���2UA�
F��`K{���\����îfYGS"����%�&ON��%������ˏ��s*�z`^	�P�r5j�Dz���{(��� |�
�c:�jhˬ���2p�T+��N��J��
+��"@�5>��2��I��
ly�R�	4L���.�ʔ
7XC�{AJ7,�>ü��l�;���L!y����֒�x�F0�	�x���m��|³���/w�D��g-���-SCc�
&c�	�vcжPg�=m
E��IԘs���jY�fl-�9V�{Igz��[�y5�c���"N/�N�R�'��
m=z���sf��TV�w���ji��(��@�÷	D���ݥ+M6�F����0�f at c�ɿ�T�S��(2̭�~���r�
��F��i��87.u���z��qɌnKy�-��z�Y�_�;��Q�Z�ب1e���ȑ
��*�yk�7�^ 0�H"l���U��~Ԓ��_������$>;�^
�},�4r4���� ��
�u�&<�qЭKo�����]�4ѸIa9-_�
+�D�c�j���W[�t����+�Ɖ߹$�o��ZT0�v3��
rp� i+�?I��b�(j
v�`ğ
j�řͬ����j/�����]�DepXk��C��s�M2�\�Kh9w
D�b����\������VX�
�v�h��/��l��52
\M4*
x�+m������%��7��Y��E"�6%`_�#1ü���)��6�kR�9�od��i+��sA
�� AB�KJ��<"l=����o
|uŀ��%8���������8��Pl��@4��
F+���R7�p?q;����'��} c�z���Vv�$���ʝ�D24��ͦn��!�ǖ��
B��(��	���d
'�厄������q�<�����:}[6#���	a�,
5��#3��ȼ��7������}���۩�z��nN6�r[8w[�qK���*b)�v^���nls�^�gh
��Dg�ۙl�Fo�і@.R�<��afQN
~����'�W,��ǻSz�8^t����VKYI���4��`�G e�Yq���~����&Ż�_���#�X�Q
wFՍ���lX�QF�O��׭���
Y���0�Еf���̠��2��0����r�
��;-ʡ��b�txX, �En�xU�_7��a���C���g��Jz���\�n,
���rCJ}�H.�(�0�\;��4tY�ܾUh�R��m�%��dtp_�vd�;���H#|�{�e$���e3�N<Z|��x��n\� [...]
+����pLw�ϩx^�gh�^�������<a �������sP��lL�˅�
ST=�6c���Yf:|��jK� W���=����[��Qa1Y��h���H�*��[��khI�ԦV.
�$L����� ]#�kş��P klr��O"(�#� e��SIVm��-i13��d�f	�l����(5�d�椦�
 mO� 
�`/5��|�p�C�U�qF��PGҀ�^`
�L9
l��ӗdy�=H�\�i�R{v��D�_�
�q�ܴ��'��d��Q�|$�=��5�u��X�����h�&���<��"�
1�2e�g���&^��Q j0徹X�K-��mm+jS7���٨e�/�Y���//
'ԍ �p�/�
�Ŏq��z�	uc��1��[�zI
�{���fQ%V0��Ug|Y3>���Ό9U慎��>e�4���N��u�GW�����J�q׭��
+
sJ�GvM?��-�"����6�=oX3 �:=��=.
�*hƥ�?O!�m��߮A��pߣ����,G��YFP>aֽTE�p�W�Lqw���R�>��ue�>tԴ
�ܝd���\�v�*�H�]�6R�xu����}��ٵ�?�n�Rrz��Ͽ���?���ۏ�?}��O�~���w���_~��������ǟ����w?������᧿��ݧ���6�������?Щ���V�
�7`�@-@ �WA������
����;|����į�M��fUbkŮ�W�퐘^�R��/��+��%�sޑ�3���\��C��H$�)�C��
B��CH6�A��:yP�&m��U,`��2��h��B�
�d�g/%
�E�~��8ȅU)F�U�
���(���xVYe>��/�
+%�f�g^��f;��⁆Ѻ�Y3u3K���
+y����B�e�!�5�i���	�ېq��y  
Nc��h�z��%ǹ��9zV,�
�"�y�
��h
{%J
�b4̃'63Z=�Yz�풋��8x�L��#)g\@*�Zr�@��"��K�
+q��`�e�`�1�6Z�I2�s�
D
+�ܨ���&L;K�h����
�XPd��}�<�}�0�:T��U�|���=o8�hFv�m�l�S3-�=0��|?�	��/~��Mk�����b�� ���
 m�m{:��)�ظ���$I�a�<�$�r� k�c��Av�5e�@�g�9�N��^6Ӥ�:��� [Rڤ۝���`jx^k$Y/I����8\��o��In�v|
��=���SL�h��-���
~��k�z`	(-�.|by�m���{?�5ɘkO�}�MU�

��
l:p�<[������8�	���p�
+�a
+�S�����
2��G���pb��1OȄ�m�L3RH
�ۃ�-GOG�{�J^����!c{d|6E�z*�8+���2���sf 03TLM#v�T46ɏ|EJ� �%Ks�H�={w]�
�Qk�A��lط��}��Э+�u�!c�xF�a'{�\T��wZ�e�VZ;��W7�E)t��*��
�"&�R,CX'�ɮ�Ia7�R��Y�� ;���
endstream
endobj
25 0 obj
13987 
endobj
26 0 obj
<< /Filter [ /FlateDecode ] /Length 27 0 R >> 
stream
+H�\WK�$7��
�� �)���
�n0���̬6�i�S1�
�֟��������;>g�L�?g����Q�
'�O�L��ܟ�f�k�|t�ϯ6�'f���o���Ď7��ח|�z=�C�|��=�WG[�
+2��+��t~�Њ�l܂�h^y�K�6 s�R�G��@�̖,�����ˍ`�|"���R�9֏e	�r�Ep��
�8�u!
�1��z	�j�� o�O�f~
+����,��C?R�**�v��Q�ޠ�Hp~���U8.Z�����*�0U	�K�YP�ׇ^��Ɋ����#�70��_�)��]��ϒalEeh��Z�
�e�ު��8�!���LCX
�'�I����VeuM:�&k�>�W��Rz+Qm�o!��~��5p���ѹ��8�C�g
�r�
J��"PF�n��$���1=�4��F�w'�@��~;{F�I�/�����rV��A0�N�	A�9���>����QO�������)���c�A'м��1n��,�0ʈ��lC��}�1�$�i���
9~<��أ��� b!�����3(yė�.E2�
t���J	�Y���ZU/�>�S��Ŀº���P�N�����ɵ�ˁ짋c�'�����g��f�>5���S0�v�N��h���H����љ���-�H�`��|��e�x�`�ì��7�����LkbX]�Y1,�+c�Sp�u�,�ox|�.lN������s��3\F�X�Zd�+/
��k [...]
+
+�
�j��6�{��
.�m���j���t������� m�
��@e!5B16��B�DW�낎{s�b��͑�����m��r`2�
y-�}�-)�GW~����@&�����A
��;x at Vα,����XQ`.P
{G�Ԙ�������x�{,�]�	�0���ܣ
��
uwM1ӵZs�>�����0T��[�_�,O�k at o�J���ƺ=�o�H\"G�:��B=ɛ�:�p��1�
������p���X�f�lxg;ku���k�d��T
ۻ ��9G�
�w�r<5Z,L�ؗZ�Н�m
oeU�u��@~
i�o�Hi������8K
+�FIN|o�h�5UIK���Õ_C�� r��Hg�v����:��R��1��Ly����"o�Wpu�����2�Vb8����X�
t{
�Z������ݠ^��
���stҖ���]��VH��%�s|�����U艫z����{2��@i[j$�%������{t��_prD|��p$h�����5�W���U�.h�$������9�w!&Hes�̮�J7W��5���Y7`��+��<��0A�2�FN�j���R�{���"�C��=��4���^�n�r#A���'NG�W��D�i�� :��8�@K��Fyx��fop�<\~�#�d7���¸gm�7
�ܼVj�o�U�'�6��d��
�g-��
B)��˦i����%���̈́�w��m�rx�3�{�0�:_u�$`m;/����l�.��F(P�o�#�&y}����	
+��f�P�\ION�M�y@�nV(������~U��@�oW	 �ο����A��6'FM��%��?�k�=���8�ܣ-~Ə��J�?���?��K�_�����u6�P�o�C���4���S�jP��ν�ޜ��*ҜO㑖w���)-��}
�3vs�N
�73
"7�7VO5��

�Ԡ>���^�����Ř��z�&�X
	�*� ����s-1��^�y-���^Ͳ]ݒYٵ�[u����Ϲ�7E*�5�%0j�s5��zd��.g�yʃٻ�E

�3����hkl��{s�n��*�ĖU��Dr�WX:y��[��ͮ
+�Xo�
)���O���[��*U��L�^�P7���O������ai���z��?.���0Ћo�;e�(��*4�Kܿ� �O�[#6�,>�Hu����E��"Y��t�{�T�S���K�>1x]
��Pta�vm��rd�9鲎˵�Q�on�_6�n=x����jɵ섁�H���@"0���m��Q�̲��>U�
�[�t�q
ǘ���w
3D��D{�c�9}�HR��yX�;���rJ��ߚ~��Zi�j!�Y�Y<{�u��f�ŒdD�ױ���CHk�,P��0
g7�� �(;?K��~��`�&�s�,Cm�ݮZ�G�7��� ٽF
�i��hq0h�@��Ľ��{�|Ok}�B�5t�/��1
�
��)��=2����z*(A��
�x��t�$䖝�Lm��L`ɬ�=����E"���4(�j@
h���UL��S�z|���
Vf��Ý�M .ǰq�Z�����{YRn�Vr
+w�U��
	�=!�E&���"p��D\'x����
�%h)�6�|`fg2c�3�?/1
Bll�;���=�c����ZH�=��|<��y�
�
xs>fX�i�������G��e�=��M]��Ct|���
�鉲`�>�
��dR)&�)4s�ypr�Y��B�F
h��ă�d�ѻ?��Dw��x�2Xʼn$��<u�۫0�i�q+� �C� h��
#��𥹼Ĵ�a�Pb��{t���P�����~����8v
�I��A!q6�+�[�	jd�Z=ZJ��	��h���;�%C�c�p
5^-{6
�q�|���z��k׎̌�����C�}��
��VT8;�DSP��P���>a�Ȯ�����~��w�9t��w(�/��yVXa�8���Weͻ}KU��y�?��}
Ԙ���s��Dc+��緺3��
�
�9����@
�X�B����No�
Բd�9:�
+8�X������=�
�g]	��l7�'�gf|k|3G`��Z�W`�b����[�Nn�BqV���+��mIR0����G�>~�h�
k�9�Py
`�\d^nI�{�ߗ�*4*t�b8�(��1����Gd\���� �l�5T�㞇�4�ݎRƫ�d�8�8Vڅ�h�&u
�_�	�%�1	u�t�}��+t���
�3��NJ-y�Y`-
���8�5ʠ��	���L���+o���͍�,F
xkz����n��C��b
 �F
Ɠ�,mZa��^-ϕ��^n�W�Ϊ��6rq�%��
�EY)i��%�ކ�\��3hi_ETw�
�w+d����r�E�X�� V�)4�0+��s�`�y�@�>l��v�q��ו�t*DƂ[�3A8��|Fg+�TH~4_*;ë��kVe�9X�m�#�y�t�F$��z^p
�O����@cJ9!@Qi<yg�8�)�>@�4	=e=�g�G�q*���
�dz���[��+��uM���{�r,�+���1r��𮸘�@��"����v��w{�]�է^���(��-���Xش8Y	�|��`��j��8;�lª�/>�H1,p����|�#n�5�LmԜ�q��5}$7��2Ј��z��@��'X�V����]��"-�%
45�fV�wb$bQ�x^$��<��H�j8x�n)�LR�-JEf�fa�]�b����D�x#M��k�<�Sm�BKoCW|��r at K�E{�:�z_P��lL��
Z/J2E!����n��u�;��>� [...]
+��w��I�p
^��� ^��0��I���� /�'쩕��hBp�Z�vQ���8I0�%ӜG�%L܇g�nj/���
����{�;|t����M�%�X�Y���*N�
+���.�W�5l,Ah���*��8����@�"@Q
+��w1�3f�
!L7 at Q0w�c�y����c���cH�ު
+�ȴ$�n��5�����w
<��Z�-��"�����4�c�5�0g��|��|��4a�5E?{�[�y&	+Ƹ-��	�E�w������!�>���[OO����L�W
<�?��5�O3�
`ٞ�a��9�}?�WX>��X�����v��y_��M�����\�#����G�����i{HGx��3���#�n��Rڄ�5A$�Y��Ւ�#��-�^㆖Ε=�#!8�_��xc{%Kp���[؛6@�[�f
�DZ�
�إ��%�%�V��*bP��zN�1���<
+�fR�] �K��v��d�3�V�J0�
���	q}颜!<`9JAbi;��z�d��{�+��Qr��=�/G��'ʨ��3��3f��r
�CX_��N�.�����w��s*D
�ֳ�T�.I&l"��
Yˆ��Er�D|OO�{#@�� D&�2�8������d���z�( ��!	�=���������$;Ϗkԍ�9՝���

6�{0����
Tފ�
�6kN�ȴ������:G[��Cq����~�r���2��;
xY�
>5t����r�+�����l���q��ǡd��
+�2����9>�`rf�P���.�K2�d�
+�f.0G_M	�Y~V�o`�).��.��`��kc	wA-
+��W�?����%�u��<ó��~/��^�P:
L^����W�r������ӎ��?��Ï9޸�/Tȃ����y}J

++��P
�m�)xD��ZE�j2j����Pf{4}
����k$؆i���
@��Fn�J�� LY4�����F٪|pɷa/{D�
+�	�377��ZH00a'����5�b���|�
�I �"��L����{.���{y�!\".⸌[�Ϊ�jEWɨӖ��!��4��R�)���K^ d����&�v��z?.�1�-
��Rؚ:�@�<�����<lXe���=����mp�]��=8/+���DT�[�T`�^���#Ȱ����xp5�幯[ �Ђ�ܾ��f�5�u���}���0v94��]Ÿ��6�0{��eKv=�H�&]�݇�H�S�����,K��${�Շ�:ʠ��s�����_*B�\�jg��`?�����;dp���Z�3K|����ӳ$~8
XY�u���t}�����|)\yH���^o
+��V��I`)۶��d�m�=�
u�
?W�`p��9����`V^�<�sw�� 7��=�
&�5�@(dA��ChU���'��
��1�0�����eqV�1^�_��>��	l��5�P�1k����%B��\D�Z�ך�
蚲G�½�Q�L������! T�~�KŎ��b'�=�t����\�N�o|���tn�A`>Tj�����k�I�|p_���E��C��"�K�n.b�vI��Pԥ�ԑ�M^
�������>?�
�e���w
ҋ@���%�;����Ct-��%
��.�w�y�s���~����o&N�J<�M�п�� �P!���ˈ�h����
+�G,� �og���7�*�
w��(�6���WY�e_.�}zR

����
��:� ;�d��S�� W�.��2@����c�����A�A�_3E���bm�ei\������G���	BWb3)/� y�I�͎�e�%:�?+x�����&�
d�K|5�K��(���I�Q��rSVT��(�"p��ľ�\��� g��R`
����뵦���|=5�n��Rj���а�K��v���N�э����9��!�h4v	�1߁��� 뱐̻Ĭ*�vg�r:���]b���m|)�[�o�*6� ����@?W��g�}4Uq�-a�yۋ�8���5�R%L�9����
�,2����"�„��#�}Am�+��O i���P,\���c���yҞdN��g�)Y(!]+J��
u��k�AJ7��=K��o�]�a����~�ż
�|B{%��m
Q��<!���
+��i�,�p�y����j���
 j��8{�*9ƭ?3���AF����
8��}z
}��*ci�)MQ�����6��.��MW�;�w;��"�H&���*�9��xp@��{^`�}�`_l��>�׾\`�<Z�|��DS�=�8�%��U�R��N%�u
Ԁ�p?!�RmV�_�C1>c/
֌b0w�0�[n�i`�!��"
c����L/*�)��|ԣ@�0f��b�4 �����;��B�k�s��n�[a'��E�ʸ�K��L�ٜT`gW�����׋T
�:�AQ�Kݏֿ }) ��>6���M��l%߾�eM�W
0�K�m
��v�;x�+�R�8��V�	�"�{>bM|�����b� �*�i�{����w��Ѧ| �@7#��,�
��F1���bx�
J�w���1�?>R�{�u1�ӨVW���ֵ�ڻp� ]b�t��
+�
;J�JLR��!蝋�E�*���h5+�h ¶��
+�_�У]3H5�e?���_/I(Gk�,��Qި�Z��7�X%�O�M����/o
D��r���O�$��F8�eהZf�J
S�l�7�
�gq%�N�<�g*��:W{�QJ��;Ô9�Xl�Q���/�!$!�y���f�]`��;i��)7�d}$�a���$~�����Y�
w����z���fB�

t��b��~���*�'@T���@l��{�/E�eB�K
�^��E�:��m�z52�b���~�;�]��$g��x)�0W:������ �` lN�R(g�W��̴���O��}��M'����Vr�yg�^�dia���fu��ٷ�D�Yd8��e}��N����1��5?ڱ�
�r �W� [��	�^+m�I0zz���#۫^1A��)��
kޯkȖ�!fN_���p�> f�:�ݪ�(�|���_����l-.� j�Dh����z2����ג!���WlU�}�6��
�C�)��
+�C��w=�
�J0
+t��o;�-
7��Ǵ ����%�����u�G�I
�ؚ��
�
n��I��w�����
sZT��Þb�ic6�E��Eʙ?Tf� �ź⦱�g�� _�/�0���i��$#��"d
U��N'���. ��`�VA�˽��J��[�x���^�a@�/�b�ı�]8#�5����c[�! ܹh��`?�[5ݽ�=:.E�[�dg`,�
e`�Q�2<L��Di�Jr@��.^�!��6����_�v�
�5�fj勓�P�v�`��'g�r�v @OI�"̸�&��C��+bGX������"��E?p�g{k��k�)���Ԯty/�${�[�p��
W%�)�iy�5 \�?9�x9A6(&���]��.����l����]��FlԾB��a��z_��g���
<ܳ�ke��-T�嶗i�sPNmǎ�Q��N�i��Iw'A.���ٲ�vLp-%X�~R���E/y�/�Q
	Pn&�ſ����^�lOug���V�!�`:�4�w�� ȡδrb!�5JM[K�Ro��(\f;4��5m����n��~B�9���jH�,��l]V���Z�?��h,X
��5;v�i�ڟ���k	�����e�0e
����(x���
��V�)�|��
�+����&f�)�q�ۨ�V’
%�/
��^N$t�
�.C��;h��ȓm�,�V�z�Zn�J(�rh
���՗(��s88�S�4
�����(��֊�F��K�Bޝ>���]�
��h��I[:)�1���O�������7Y�%����k]D�Z�8"}����+ Ʋ�1�h��I��.��JO��LLj���i{��MgY�B�N=UR|�/w�1�)��."��6h
�*b�F>Ċ:?�(|.3G��tp�0L�}]��.�
�n%���	��b���Ɋ
we�������fÿ����>sC��x<>vw=Uw���(�Q����
�ț��2-�ueZ��(7�f�h�aV!
e
�h���r�#Of�i��=Ʊ��
�!�Ŷ�\�W{D�pC���jO� C�;`U$}G?�
r��
�^S��R�t^v�z�doE�8I�q�$$(�[
�kjz
3|
6cόJ9��k؝��S����cB���H��
�1�c�o�j�*�tq]e�R�*#o�
V#�q.�G����&��޾|��������}z������O��}����o
�|�������>�����~����^��}�k~��5�~����~�? �PH
P�L��6��)��9���0
f
	���&����C�
�BD�1��}G��
ޥiW:5s!%�h��
+���~-n�H���B��8�o)-M
+���������7
����L
�|��#�n����7S��
�<�����܇��Y�r��֩��Hz�V���j�jv�.�F��q9�y�S�T�&��SYq����V/^0^�V�R	�MɇM
+
�
���IGF'�e��>B��jufq�ty�n�:4_�&��Z��h��5����OL�@����o0��?�j�_�J1����rI��+����6� ��NG�,P�
��l����$4��H�v�������&k����

I�t��5Y�^v F�k=�xg�t�--
��F
�a����3XEr@�!%m��G��<���sʰA
e#��ˮ��f[����_�{��9ȍ����}
�{
�l�"Q�A�"if�j=�5��R�e�s
���\�|F3��sNgcM׵ ���R��
��$=H���XY��S ���p��1��]z,�� �&�vV�s_1#�Z�/aף�R����eGS��*+�u�1b�LZ��
�ӤE��Ђ�*��<��}��c)����uY
+~�U�V�+�5.��g찎��N�s��#/���d�I���=S�-0\:��f��z��p$
1va��>���<�
��F
A���Bx)�߬G$�����^�6�Ai[҉G�
۶���B�����ǂ�6F�5�u�$:�
�$q�P$祿���UI^F���7�2^�^ �k����Y<�� qvh!
�a*�hđ�ƙP���
P�~Y[�O
kll=�?��k|-�WND��,O	10bּ��G�Wm;�k&�;���7�l��~��F���w^ma'��;sC��
0�f/G_[������+���<��йR�{�p�?2�X��GiN
�*��D���J
���5�����f���&a�fMd����|���(V���PvQB
׺/�h&K%Y̡�[kt��s�s�hI�b_~(��X鉚&o��}}�-;��jy�$�
�bb�;����[]4��<pg��5���
�,�q���d[Ao��(��ˑ�?3��B�GW`�C�;�1Y���w��ˋ��١FLsuϱ=�z��m�M�$��0�N��%���kZt�E�;��k&47�z
��u��X\RY�
C�sN�0�k��4;�W���5Fv���p*�#
�W3�Nw���!e��bd����hL�j�\�3N����GWt�/���|YAH�.Z�o	w�
�_�[�+�
�$
�C�I<>1Y��Nؒ�����`��@ҥ��0΃��y&ҦwE�}툅����c��&Mr�L6)W�
��o�����&�Q�5�0�

Z�����i
+3�T�!ڸ$B
���DWE� ���Q�����Y�����)'Y���v���Wxd�����xg�����	��!����m�%�+c똕Y
�jS�u�� ������ȑZ�Q��--����̲x����J��K�zL�nݏiݒ��+�Vj���Q�cM���%�9(S�
�{�,8��a0�ymP��d�֙��u��v�+��ֿ1n�w2��� �:_�
Á�zܻ���3&Ǯ�P�n
�[��ӕ�n����T�
|;����mF�oa��Z�Ej�	G�
L*�c�+0��Ɇ�S��Nm[�+�tpD�̚ظGس�8	,�ʭ�h��?\�X�/��%˓��%�f.V6���
�����4�|9�
>?�6_�8�C��|�;ޢb��
&����-��WV�����U���e�kX#��,�Vr>4<�!�Gr1ڠ���ɏ�r�
+���!�8"��6���&L]O����g��
�3
��%ֶ�%��.� WS��3ly�@'N۲���5��Uk(�p�&+���XtL�~��GL�b�37u�u &-I��H9"��\�8��6��㾨nn��s2q�J����A�87�<�T;;��p�i������e��F
�-9��
րv�G\v�l�[�Y{2�\�����/j�V#S��
�tK-5{vD�����@��Q����X �e4��*�
��~����cp���0��6������(��D�{UX���[g��l�#@���k�����9$����O7��3���y�����3
=?���1.��P{�n1�SGO��f���=�w��2�n��
�ZS��-QC��K���fsh
�mȨ4$93p��s�����W_
^���קw_�޾�����^�^�y������o>�����?���w~z�������_�����{����x��X+U|���W���_�o�+N�F�?sf���x��a�٣��$�g[I�u��
�cJ���@d2ٔ����W�Գ�I7@�i|�PW
wt��.�19 �iܑ�u��`�K�4k;�6R]cD 1e_�)��x�|X<-1����e)���yn�f'�-]`�9<��
E�(��&�u at Z��LK����[-;�J[�HJ�+S���	~�^Y�?֫����
���}�ٝ�D���"�i)�VJ���̙�=i�+	I������3�u���~��+;l�P6��gzƈ� ~ک� ��m-��\�W<䙟}���Q��ll_,i
������6
�r��"|*�U/�HzVrb��BR�<mJِ� ���~G [...]
+��`�K�d�C�u��l%�j�N�'=Zwr��d��G�= �9��s�_�E����7���K�[�z�K��g&6[6����6�ۓn�$��|�1d�������t
���
���RR��d_W�ui���~
��4�̀�m���Y��l��e쏸[,
(Inwg��ⓢЮYu�j��w�����
1D}��yn��>O\��D�Q�����y��B

������9����ϩN� ��0����L�9g۳��İW:+ at dh|��z�rt9�"��E��4�T8��3�N6�*SbpK?
�r�x%
3�
�����Lo�^"�����G��l��
���@x&�:��{��PR=]="�%��=c���8�������zu�1ԸSsҤWE<�
�zu�3������T[�����{�njY�M�M?3��gp�L6�P�"V�p��SH�}+C��^JK�W�:������K�:p�6.t�Ƽ����
+���
=9Z=�d	|v���veֶa�����
�Ԝu��j]�����	Х�ޡ�q\U�
���`>DKk���恾ܽA3.����<��	�f����;��x����ew�Tg q� xΉ��v�r1�.87hk�� Ę�ӭ{w�AQ\���2N%����7��O����"�P�����`\���v�y�x������/y���C���K!��4CW��~<�oc�_�W�_5�8M��Gp�/��p��)�8��
3����P;T�մM\<�bC��$��]��:a���b
Z���������"h;?�ُ��"���sD�⍿J�~�="����O����^������O>�uo��7_���������⫯��MA��꫿��3��s���wo>��ͷo~����w�Gg7���?��w/��/�s{�gz�{�����
+�� 
o��(�A}� �=�H]
����I�S��r4��#q �w��X���@�͵�V�(Pf�~� ��y���q
+��=��E�͝���5
�ms�>z��9/��0��}��Srx�W�d��_P�.u��t���+� V��
�]�+f��:c_��@l�|zzJ���H�&�!M��9��ә���	�ʳ���9׹X�w��N�t�L�'O�SZ�Tj9s�����
��+��17��q}[�v��v��l޷���~�{�9�}�;�{5c1����
VO�?>,JxM��fi�$�x-��1�و&�M�+�>N�^P�:�v�G/��Dg����� �d&x�
!��Xi.1S�f�V ��P���7<��������E���WY�i1ͯ>����1[�w�7}�^F��ɿ`3���|%x�������
�M;ʀ]9Į6g�Ձ����h�T���+
�e����Y9S�Z
qT ����ص��X�iT�c�\��h$9�q��Zը�i�p�����"A�^B�tf�2�m���cW\�VnϤ�m��P�-�PaU�h 8�ce��d^C4�A
�[R0H~���W���d�dos��m� ��ls�d�z8���k�Y���-9�_K��vջ���mm
�Qt\

�)������0	����.e�1V���){���#����r��� V��
��j�o�p7�t�r$C� ���g�Npj6%�M�l!-,���&� ���\�uX#�;>�(?����<+
�w����5�(Z�󓦎����7�-O0��n�j��+�
`�>DN���̧�F�EGs�A�m݄�]m�4^��PX�|���Ķ÷}W�>9Z���g@'�3��g��:Ok��r�uÙ?��Z��(4��w�-L��fXk?�
<
�>u�V9$�ҙ/	��愩�h����X���E��
�W��
b���X��d�n�}�

���:&VNk%i�����`��f�M<�*qY;6Q
2�ԙ����z6�Ze.����'�����BR����o�{y��U'��X
���4�Uu�I"L�~�v��2��H@ ��Af|
	�3���� =~5�ZX,����u�\0/'�S��&ڼ�T1��n�f��W�b}4����= W�#��}��3`.ݻ����l�C����6�k��w��je΀	Vv�?$�� u�y@�݀aJ��g��>�Y�9�f�-J�	�
0����\��ѹXf� ����
f��|ĝ���t���;�&>
�>���}�Rp���w�[�N�:�����~�~��
l��փe}�


c��F�b ]
m�h�Ļ�R�}�F��Ѕ�`��h!�2�$�"#��ڢ��܄�n}�8�����qP���6�Q
̌�!�z�a�n�w���8�O�|a{�
v�e��3Y���(|���4�;?�
���A��ڪy&�&�绂��x�UY�6��T1���&��}
_z�{kJwXŝE��I��xeZ�)����Z�����5�t�y ��Zg[����1�"�UW?���h`ߓ�*e�
+����xcl�8�Â��u��E�i��>׷�}q��(�O

�:��7��]�w����	b�+�G��X�
�ӲyG�"�4`ѧ�>
́�d��5+����0P� 	7P|Am {��|�?i�pH��N�{�
�cO�,�Y����j���k�ʚ�]�3�2���I�m38�`�`�cė���]THK�_���7���
��R���=��g�"D@E�LD� (������ݽ;��y0�
k�棧����ܺt���3��6�0o#�& $))�)(#�BV��A�i�*;�m��vq.`���n�d��ml��~kx肩�!g=���\���sj����q���gV�E��e���T�	�&��ָ��X�h�b%U��6�mCӆIN�-R7!`�jY�|K�<�y�S5��<r�
F��$z���nW\h �n!���܍�^�Xt�J%��
fh�$B�������"�kf ��DA*
zP���E��Qs2���sO��G���|�M�0ʙ���8S)A��(��h ��*T��>��T���b�~qL��Y����
+�8�
x��	NQ�oL\"�~��S
񝪣9�#���&����J
O\��B���� w�c#��]�wGOϾ:�����������ݧ�wGO�������������v�������l
�|�m�GOh:��?���O��,%4���Z�7�Ԡ
�%(�$g���X�,����$S���W��!$�YG^:݈Rc.C]X��h�f�jN�N��uS�:_�IWg1���G/
���C,���!��7o9F�^�ޞ�\������]_��O��t
h�c(@(��=�0p�x��
+�OE�,
C��Pdt����Ib���t�D�̀�!�I�<Zd�m܃�� 
�������]0y
�Ye�C����+7X�p+4m.
����
#a���
���f�s�M�M���~f����'���������o����O�NO�����_��pw#�l?_��GO
����,ow�Yk�P�.���ԁ�;X������ U
,���w�J�����
+�DR�XV5Y�^XQ��l��/&��"�(�!�M���������3�&��e�@gY��K����T=SL� ���;�hR$�X㓴G�C
wc
�:�Dl
w����B�z�t��?K��l0`&���0 �E�V���0����2
{�[,��Шl{��, 3 2��h�Р~[	�E�B1ׅNC�]w��u
��;ss�^���
N!-}�-D�.�nf��د%����/�$`7\��|��~��6‹� �
*F�?^k����_A��ddD���Og �`��to�s+F��
^(���^~���n�x��؅d�}JM�\��O��u��W����=9	
苿I�R"���]^r]��5�`��/"�s&R-3��<���!Z�|�2G>�t��P1Y�����N��l�
���!(5>����A�LC��35�~/���:�V�FI�;
���{��������
���W���I�q�n
�*#��9.�_��T���
Q4.��w��KA�z!E-�,€�:�����LZ�C�*aܱ
��E��MTm�\�R7�+�fp�t�!T��),��A�
Y�TJ�-&N"�I\�k����b���/
(/��yӃ�j�`����
e�dž�v$��/Z��Gb�%1��TZ���.��0�;�#	XZ]���[�&\X��U�� �4p(�(��Ŕd]�V�ѺSa���v�\�=��g�V0.����N?;������1��gOˤ�
CJe|
+�P�=�2!��k� ن�{Ԛ���٨ Cs���
����l��Gmz�|z�7����rg�}������1��˫�[���������۫���݇]>g;�7?
=�x�a8�aP�K�������'�����OаOӏS�����7��Do^jy2u�.�o��J-C�a[����$�����~|�v�
|���m��s[���F�e�)'��
e�:��
�
��eRaJ��
��\���1'Dr(m�A:����
�3�j�Ɲ��,��1����[3�����
L3�zk-�Ŷfx>�<�|���

;�#=cz)��G�dJ��A�U$�byw�_�
sBS��|^cFI��jF,Y]�Y]�SkTvW�owRe�c��y�[�jF���3��\������c�9�{u�锔G�����	��R�ܼك)Ƥ�#T�Lc��n/
�0���Kxk0���
ݢ��l��w6jf���h_I-ɼ
bD���:��9�lg�'�Y,�������u�=�j5VG�Wp�A�OJԴ�T�ki�{hi���X�z
+D�S���V`]F}
owaP��4�C66Q������c(�5؎<O�μ�^ O�Y-��O���� "�j�Gb'�
�@X~����h
�B��0p��L��v�B�'��8��o�9�AC°@�v��X��P$��Mk,^�˚�zĮ��� �Tz�!X)��J�z�~ލKkX/z�
��h�1���ʮ�8�%Z6�Q,�Y�o
O��v����ELD�7�%Z`3�61A�����zpZ��I-VH�9�5�9#��G����Y�
Ga�XcϜU,щ��X�a����'��*��"nPoSg�ͧ��v�K���`��2��,e��,��%�vؿR �Ǩᩝ�2E�>g�a���Ŷ�H��9��V�c=��1��������.׷V�cY�#�>�t��z�V�{"Q9<�$�7P3�O���*V|��xl�'I���
��I_{�/�b[�7��X7,7p���u�yz���d��1� ���i�B�.,g|z&�j�z ;*�덽��K���
�h6���9�A˚�2���/2�i�ً�{!���ƥ�
 "F�8i��'*��S�
W�M�}
`2.,�� Y���9Prl�����v~��1��Y�rR��p���
b�A���&Z���
��K�P8)�Z�	���ߘ�hX�H��� ��
N���A;�e��=����P�΅1W��-�ẃĔ�����	�?�d)�f�TClD�ļ�)2���2�'��u� [...]
Զ
��qԚ$G
�j� �'-�ְ������_�y��Ϳ߾|���sӟ|����7�߽y��ۓo�{����������_}������o
}��ͧ~a�������
<�d�9�}�
px6
p
I
+�+�$�OnO��V�h^�[_��}ѠC|u�u���ӓ�j�f��X(\?6���5Ҍ����k	xtrϼ�(��M^�!>��ܞ���J��QYe
�xy��^��qj���O�U��fu��a�a:p�v��1�w҃�����^Q�O�ۓ��6��1����/~�/vֽ���:��{?�����7�������۷��/��!�!Ǻۯ
q�{��~�z̧�v��<�n�zğ�v����1g�ۗ�u��=�~G����Nݟbu�=h�S$q$�Y�WY�
��ƨ��k�h |�bϜq�ueqPRk��VyRw�[[I]S�|�:�{�XK>+�f௣ڋxw�h��;s�J�uφ�T��[���8%���"q��e)�B�4��k
<y���Uz�\T
�^!���9vӛL3��9�"�8�(}�Ao#{�	Hs�jT�s�*��f�"���[���g�{J%F��k�-�yr�U3V��C����*�$�:r4}� l_-�����͢"�o|#���B��&��aJ-�	��� [...]
��iL=�8u���C\]g�l"�"��h��
8P��L�C{q��m�E�^&�7�f�R�՟_�i8#�'l�>�;��Iֳ��_煿@�Jq�p�^+X����R�
+͢8+�k
+L7nq�k�����GE�x������nj� ��"��� *z��?�4�>W+��qT�6`0��d�c�!��ڦ�����J.!7�h����	i�j%v���]s]��\:s�Ѩ�F�昗���_!m�Z�i��F�3��Ł���
 �J�4cS��XE�ᦅWS7���B��
+�A��
ݢ����	������JI��KE
a��
�6�a��i��qx5#,�
�V�/�J (O�K,���p���Y ]�6�Zw�ᢔ���ٙ`f�%O��T�1����2r�j��C,�@	]4B���#�*E��A�<
%�P@)�(P���M|P:ۅ��ǮF���T"q�Y�<L�FuݽШ���*Z��F]m�ďV |��`
6ˣ�d�X=����KNG�|"�O�{|��"�x!�v�:�;R�eG4�
Q�y�>BB�İW�Doq�[I�n٢��X7�0!����x�k��L��T+�$�����u
&o~ӫ[<9��g�v�
�;�ۧJ6�8SJ�3��xX�8��KX��P*��NbRuV��.pXBX��s=@��T�i�iS#��T�3�S�I���8��֭�]��L�G�/�u.
L
?���&Zam^L8����
+�1þ�)k�0o/�FRbX[���h���6G
&��Z�x�N�i���-5�I�V����$D���
�J A{k�ȞZ��m�s�<
%�����J�����
6��w��
?�
4��� �Qfؓ�kp�9!i<:���.�
̴9*��+�8���\1�q�ᜈ�/��K8�����6�0^Lc�+XY�(Q-3X�"� �h��!V�3��w�I6���
1�2�,�5� ��
\�2����ͥLe���Ke#Ş�0n�F����\Z0���&�Ԙ�y��D㒕 q@��J-;�vF����k��l,I�뮢v&�x��Ve:�:���*�
+���|]� 4k9Zj�׳@Qᕋ������v:]�>�n(�T!
4�Խ<��؝z���0s������W�J�0QW7/1]�?體m�3
�}�E�E7�F�lQ�q�0	�<��{c*C
x��ЇR4�XܭyCn�ݣ�ZU<�~������I��6��@�j�� ׿U-�8�Y)�� ��4Q�����ä�\o3V`E�g�c!
�ȩ��3�֢�۠#����
+ĕՠ�S
++�L�vd�~
~��G��LҮ��
'
+$m��0��̓�[�A��e
������*
h�P��$��0�M%s�*ي�9n�l����>>�,q�^!�0��r�\��$��o�3*��B��KY	�V/i�XRj���!I��%�
%QnB�e�.�K-�҉��v)��j#�G��7���)ic�����C�YA���aA3 8��,Uȥ�8d��o8�A3���3��E�{�F���e��
������T��wr�
��{�E.\�\�݇�7�JL
����{����p�d�4S5f5�D�
	��yP�*9�M�9��W�ZT�"?�ʧX2
��#��b�y���]]6�r��EsF�.A����r�f� ���
���f��	Դ^B���H��/�|w�A'G�A��!��x#y�Bn��d�	q:�9s��5̭R��%�I�j��5ߖ5�� ]΁��.
�鍇�p)ev�[޴��
>�m"��kN��ĉ�>��D%=�Hm��[�C$d�I�{3�z��F���������98���B��~������LjR���IM�G-���+�
�&;j#��� �C�$>
�ġ��z’��i���I	���"g56C��L�J*�烤�53B�1��g"x[&�-���uJ� iէɣz�������2H����UrII�s�����PHN�w�1�ݶ
�WZi,m7�b�G�,��L-�Ԃ�S��k���1����X�
�����>�0Q=�x��9�@h�F�)�G��(�_���M
�&���h���Lz����aȫ�{�գh.�t��2���_p�ۭs�P�3�
:� [...]
�4���yS��O3|��b�s�]���S��4F��#�(EB�
+H����v��@¬V�6 Mc[��䑮��SI�F��8>��4AF2�x���;,���hG��
��$
6�<Z��k������d/D�=���%��$A��!q�O������5F�@��ж�C8zNg���{�����	{+#�����t�l�l�8��
�Rģޮ�4]����z.~/�~�4��>0�gt%���t0w���a���[x�h
�ϸ����4��C�#ρ��7��ʥ�>,,���’�pKaY�r�����e���(o4E�]�w� ����(�l��ݦ�nk��,�.�d�H�I&
m�R��\e�V���)m��I0�β*I�E�s<��p?��%��[Y/���od��k��v�|n�i'�O��iӴ�!צ/۩4�%�å�7@�l ���B��}Q-����z��#�
X���v�`-�A��N�
���&�N,]Ҡ�K1�K6�l���r�&<����u3��R��=���aȤ
o�4)��1>w��hǫg��������u�6�T�{�A� [...]
�Y��{9J��py�M�`P�i�|[πf%u���Į�I�҉O|o�m�W|*
�ο�~�M��ȌY< C� �rN���]�RO|ѳ a��Qhݻ��J�Ĝgq�� v�G����Szwд|2��|�9��'�<���h�LZ9ށ�����ѕZ����ZH��L����M%�����&�d
�1�G��$��%�IEG�H<��� �u�Pm�+)��h�� �Qa�+x�`�,��`�3K2j�&��=
.k��3�A�Ĕ,�ͱu�;�=4;	�Z���)}�ݐ��U�#z�
W�G�6󄻯�Sa3
bj�bJU��`�tH�L�&�2�<Ki(����W'a��͂RϙG֮����!�AIy-Ƨ�㙇A���'S.�$�O�dt|��$x�ez�������I��p����׮Q5��H/�x}�
+@���
�ea_�3���N�TBg��f�y�v]�$�ͱ�_��Ff�3�߇G<
+*�;��kC绁kL��ֺ�l&~�ںE!��x�`�]>|�C�ر�83o��IM�H�O
�IgN��b�_�$&���}f�v���SI�X�Yl�5�`������e��N(�0��N��.,Y�������eK��t�����W}z��c����
��M�whJM�`ꦧ�ȇ*#��Vd�>�N}΂���^j�Du���f��ε6�;�58�P�t�}��N�
c�V�<'վC��P��(�V ˸��W"�������R�6�5֜7I�p>֦}�DP8`O'�d��[�e�W"�C��4
O�Hx:��� ��K���{�
�j��U,�
�:�2A�Ǥ��F-u��	p��^pCm��F�������@�VɄ��{�\R:��i�����n��>G6�q�MZ��
��V�w0��`�g�&�S?P�e�ǏMsXg�-F��y� �$A�p\M&i(�K+&��Ȥ0�ˤh�����Z��8�GK�K��T>T�:�E���Զ�,! �1��qЏJ���g��$�?ib��H�/$&*���K2�5)*ɦU!��w�tt��z�������f�-�I�~�{^J�
R�

�w�#�w�r�\*��8j�\)���^Zgk2z�'�a�kZϮ�3;\��Wq��
�ɍ�w��/���1�� 9��ч� e�7�—�:�p�?���&�lM��
+M�g��ǵ=�]4�Ye�_Bj�DH������k/|��L�["�\��]})Fm����4~��2\~-U
�3�m�ɞ�5��L��Y���E¨��K~
q2,�p?c$�u�9t�3��Ι9
��
2'a���vA�`�I%��[�t�3�����q�������5���)�J;�4w��ׇ��{1���0�Z�5��l�\��R��`rC�Y�I�
{H�|Y���2��`�
�}�\��
+OVߕ�L/�Tg-�������VY�'u�:�U�}i��
�.����L�.��0�
p�m��!�H�yZ�%H;3 M-:Ṫ8��V�����
3"`��
�����R��t��pf���/8%�h(�Of[��+�-�%�������
j
�z����5�O�7��uЃ� ~f2c8�ɫ����q(-9ʅ,,��er��x�0�y[>��PG��鴈|X���֨Վ��}��l��v��46�J��=��S��zb�r ڹ��$��*� ��v��C��Z����p�/je��sV�v>�^V�D�b�2K��ńM�S�B��Ɯa���x$��m������S�b4�$�Cw�f�e����њ�؅�X��b��@8
+:���imڤ�K
+F�+��xb��`��w���[����b��7���h����].9 � ��O��"2j�e'
�Vo��Q0�6�M�.wq-� )�%O��>n��o���F.T+<����y�	���K��@R3H�;�X85A�ǻRtTQU0���?�i}S�L����UV�:��e-Q�Q�0�&I��%]{
+P���
+��V
*���W�� hvdV���O.�� �����(&�>T�ͪgI⋵m���]�> ��fg
endstream
endobj
27 0 obj
22447 
endobj
28 0 obj
<< /Filter [ /FlateDecode ] /Length 29 0 R >> 
stream
+H�l�K�(�	E�z���?��	O-K�y�SDf�[�ׯ�U8\�]���G��?�\�zU����Jg�:<�
z�R-��MG3��c�Peh��b=Q�AqQ�K��-H�n������	�����Ź<�����W ���b|��B<�y[\w_�(L��,Gi��`�c�@'�y��Z��wS��#b�/�K7}�
+���E�yH���;$`B�N|���edu5�V�	2��O�u�
+T�ŨT"K"E at mq!}" @��0��A9*sl��H��a�X,�R�[�� uɥ[����}3�~r3+l~=S9Z�^��t�fQ�OQ�� ��d��9K�h;�KD^V�'�Rg�^,T���⾰-�
���#��
��2|ґը�`F-��)@=v�����H�����_��%����e�����������}�wKo �3r)�"-��pެ�RGd(
pA/&�gTQ�}���!�e͝�uEs�r

A��2����%���1
{q�w�qMT?�q�>�
�
+
�%��[l~䵘\Q�JZ�ق�Y,�g�agai?]ai��
���Y���z�p�19!2X�j�"��\�'鈭����Ԉ���%�h�-�o�X�Ź"��b�K��]�kQc	X>\
+ZXGN
�P����l
���?��H�<h�MG��&�F\Q�����o�e� ���i���W��!��OP7�>��R��T�(�@cA`K�Pn���2�֍|�DB%�#7���?�/�2��&׺`ƪ��Ok��L���C֗�}E�LFB}4i.���L��)���7s��o��S��I�
/�2e�ä�6����e�7T4d ��բ���qλ ����90��?�:���L�bЇk���97\P(�P�j֦�a� �;��<�M���<�ʸ���V';��PY� �Q�U�=mQ�
��d�
�6����KM%ꦗ�_M%
�T��c]��?��EC҆Ru�-�B{��Q6#��A��jY�c��d��>
�8�ߺ[��ܞ
�F�6!�\!w|MQ�D��k�+���KY6�m
^
$d�r)�q��,�A.�к�$
��ў�����Cg�5	�
����_ӻu��O�Պ�y��W�($�
+1X���1{UN<`��ИG�[{3q�Ŧ���+�%
C�46��7 �W�e���ښ&�(4DS
���&ѐ&�_�Tl$�\��/���L�$�H�|�AR�Ӂ6r�A���z���oQ�>}8�p
+�Ε���H�U.uYC���}�q�Z#:�j�՘�m\U�@�L�\Q�	�\Ϟ�:O�"sK��P
+�}qeZ;��0%3��R�,�D���F�խ<�2��A�
+�o>���1��
\�����#��[���T�Ө6h��S��P⾲d�I�9��,�qJ��||��4GF�w|3�ys��)�:��;���@M��cS�*u�,^�K�(�n��(M��W�o�c�i$�O:�V������-[ђ�N霞e�,��P�+�ݪ�r؜aU�Fӫ�f�
N�W���5�Iv�
��k�A���J0��e�.��6�N�V�xM�
��
+d����;�R��q�G$�u�D��I9��'
s����{k����eRz��I+�~����
%�:�՗.�H�o
�
+6��,�&'7� 
��G���Z�Ylm|�G�L�
�_��
ZY at C������-[�&�.��xy���j�|�Xx�=;J́U?D�m{��Ѫ�w���r|l-n
���G~�Z���eq|��|C�����]��-(�S��ͬ�$	vi�M������D��H�f���Md�h n;>8��ѹ��`�@,��Q�}�8��?=�ܗ��H��aL�
����~

����5��O �-��]
���P��\�'����D
o���A��֜�b�3~�^��H�~�H��$��1Y���3�%ߢ���N
+m�� i]���3����䳸|�w�l�t�_��I7rg�zD{�=��(�Hپ/�p#z��&S.��YE�E��KJ�>e�L

�^#\o ��3d^"�3h��nJ� \ϻ���݁V���L�
Q:���Qd�FU�8�X���j9�5R`��{@�d�kQT������ 6�I'l��A�E-�t}޾�F��d�E�C (Vi]Ґ��b�XJ�U�w��#3��`��5���R	�de*s�DŽG�R�N ��2�vow��N�3g�d@��y|LR�B\W`ؓ��?T�A"Q�Ծ't}��=c�OA���GjNK)W�3��f\pz�1j&ҭLE�Ne����~�P�˯C�/�z� i7r3��$T�2���0Rwx�*�m�Π{��A�dT:Х�Yc�`m/�����1�G
G��d�2ߠ�q{��$
� �i������雿���L:�i����ä���9
+](��8^��l@�5��|�&��M�ZL݄��p=��+U��G�1z;-�"	�{
[�C`����B��%N
���t����ڏd��E�v��P���ӎS��l����Z��ն[ՑD�-��/Hv4��_f�|	̠ �E2�q�mD� �����ݻ���
�{�v�Z��J
�Z%k[)Q0B>�4��Y�ShED��IxFe���h7�N���$TZ�Va�f��g�eY
��
+�*�j����8�*�b��eQu�U�D{%�?�kf���J
�Ek3W�2�+��>�ft2	˼H!WcU׶<+��b室;F���r!5D]Jݸ��e+���ف����'���x5ٷ�L$�8�N(�*x�u�î�
U��6���qf��]ȸkƘ��X�Jj��(ԜJ]��QSUO��
�H"�䛥�
)�����K
+]�2\m�T
+)�����`�&�Q͕�/Q�m�gT���
q�"ZWsQ�BL!��$�B�8�[�
�SH�Y at hx/�ʸOk� ��<KC�,W�S� (��MhT�7M@�+�KsB�v��]ιt��}[�MC��e� "
�ċ��p�gI\7��U&v��Go�
�;���]�ޜz���9x����hz������������/O>\�\�<�������b��/�����R��A�6o6T����ϋ�A����/�����w�==?
c���%|8�<�W+��WRN���x���rv���}_FL�޿���E����Y�'u�Z|�(�J޾�Ίi�����}ti
���	JC
+35��[!啛	�M֞
�,r��R�Ս��V0)��Iu<.�l�U�7	t���OF@X�C�gfZ���
�,' �&f��	i�֠U4LI�Լv F��"�<�Zigߦ
.�T�$� ���=7.i.+��.�~�
�'��EIw�~rr���_���;'�e��lt�7��+

j�:�
s��v�`��XPh.��^����Ǒ+	�
�%I�$[/���l��mc
R�����!�i�(���
H�)
+cO<@=HUi�k
��ř$#t��_��f�k-~|t�L��?�\�~�~w��8�|uS���.�zy���҄�m�ysp���|w�9��YmK4�0
+<
��H����郌�iuײjz��� �yrӋ����t"ܾ���މ��$u�x�^�fG�2��E?{�� ��b��4/A��ƙ�㹄Q��Z��
�՘ܮo6�+e��'�n�C�鴻��x{s1�I�g����\�bq�"�R�і��
�E�&��
2�m�R�rV�yĔ��R��x���=
��u3M��tXuilW�Z",M]�7Ph/_<M��K�4�RՀ�ּ�M��>��a}u��(���x�*��QF1
+Fi,
y��C3
�46��y|�ۓ]�si����͞�������q
R�ծLyJG�fpR�b�k�L����A���Kcgm��t����z5K�崤�a��N�0�!�����4tE�����x>;au���ҝӃqKw��c���rCZ�B�{��`ts�s`��G��|(Wh������j���úh��׊f!�a�E�a��$�h/r�
+�H�[��{B{s��״(��PI}	��*K��J�A�ے�wF+�\߆9�0��i��EG�
�ț��]ӱ�z˸V��ऒ��
]hڸ�X���yi�����1��� �
9��SL茣���R�
�U�V`Ȋ����M�����7�s_.�`oE��P5VHLA�̛A�?K�1ȁ��0���3u,j
'@��>c���YŭJ#�3nfc���*�Rc�5]�ӣ�k�����@�%�NQ��c���6.d1N��
*\8���
ؘǸI�=���#(y����i0�c0�3,<��rbR����̓X�5�K���
S�lZ�� [8�z�Y���\u��+�\���e��D�� A�ݮz�8��Sف(��(guXy /%��
+�c5�m��em�j��1�Ry��{g���`Q���D�X�|3t2 "�$����謐|��]_ٶ#���6k*Ʈ�R�����=Xъ��:��<�:�t�L.M"�`�C^�X��z݁���@\�[T�6�0���]cc�#Ռ�Kc��I����Cf\(6rdh��sy�;�=o���}>�P��8C���Fp�"���
�ϱu:W��K���^ci1ͭ�z Ij=�/��a\@e�t4�K�7��i� ��t
ZdQ���P���@9�/���2	����Mz�����4�
%1�u �F�=$Zc�c�f�i��FpWgTZ�#��\��9����tF�^�J
l�H{|�K(�]c!��d�=�
���d����4s��6|y�
��@�|������&O�G�������#:��n.^?\����8�|uS��W�����#:�1}�~�
�o�7j��Ύ2�C[�(�#d ]��F�߷��@���o�@�=�O �<�����oj�����0�X�$e���T!e
�8�TZ%LzY3�#9�<���Q�7�A��6̎ϥ��3:�y�*��>���j��b�9
2x�
+X|
+��\�z�Rn��
ZS�f��9�`MȾ��#M����Hn8�x]V�]XFa����-kT�ry
�B���٦�eI@}[����淡묏_��9��;�
�4=��`�Nw�i�Pq
l[8�;�]v�.
�
a ~*/�{s�R
���$C�y
+&�O,�C��.�k�k����A���i��܁d��z0��Ve��A��1
+��NfG���%g�
�4|����ء₀F.��B�0�*֌�##���
+�Ŷ
+���޸��������
`yW����37`q���\Fl��5�
R��I���M��>����8�a��]c�D���������j�����%�]��/�l#@Q	��u�
W�k�AU
+���pH�p�U�4�. �t�ˏCr�s
n��O����V
����FX��A$Ჭ�$�
,�
��Sw���xl���� 
Km��q�	����1f
(��yXb��24"@��c��fV׏_,�me�h/	�-&c��q3֊Lɥ3��
(!T,2��7:��=�l�.j�b�i�
Ą2B���{��<(2�2>D�d�Q3�
�ϗʴe���J��G	)��=�8NiB]_0a��[�t:3ۏc��Lʠ���a鳐��X����0
�+.�:)9F>9d��C�l��:CX8|<�
G���JJG4e�)p�@<"��醡]
�һ�T��k�[�����m3n��8��G�b�����n
��ٵ["�p�y²�
V.rf�g1
ӹZ
��
q�QHE�Iv�����)�8�_�'�h�l�`�� ��Pig�b��cB$V�ɀg�y-�W�
���\L��Y<����~;��թ����[�,��980p')��p4ŏ�q?�Z^��b�����Z L�''��l�Y���f]��=
�G3
f���Z{DJ��{kS��� ���f]��J��^"�!>A�Z�K�c]���$��L~ݫ���_�N?�ܞ�^����}�P�F��%h)�Q��E-���Ԩ���+D*��w*	ʘ#T㻹��8&�]��2�� ���$��R�!K�=�^���ӕ>�:W������~��G���tJO7W b���^4:(���s����s;6����TZ�C;0
��'��Hl(����ۃ�W6��A?��L�
�竇�1;���z�B[2	������+Rk9��\��x�,~uy{����ݛ�_�~:������������
~�
������߾�{����N�6�I��?}�Q�˫�{��������
߼�p���_��O��
Ս�<��_EFu�����{>��d&���?��K�)/u���C
+nL�^ԫPsL;�����+MZ�
�aL���&N�_�����0T+jc��g
�e��k}�[���&ڱ����t�����a�_o��4���3
>w|�
��)��9֕�%S�V�T�w��X�Ty�5C�!H~p������	�t�a�Gb�	��@u�/
��Ū-���
>���`��-
�e�=�Go�Wn!|Ż�ړ�ga�w��K��pIe�u�k�M%�$'�ԃ�
(��r583�X�IM鴰F�/�Ŷ�$�j8Y���A�l�@����4�
4����¶���.��S�y
�zʒ�Vq�4�9Qf�y屵8�rg��N	%�h483h�0)��A���cX�^�*���y
+�T�-%�
�����5�._7��b0�	x�5G;��Lf
ɤ��hbzM&]l$�c�d&
�h
ϐd��d`V
�x�PD�
�9rtF�W��a<��E{R"Pp�Y7
,��*����¶ l�]>ͱ�S�y�hU�
�_�M�4R�@1
+�d���G���Y��8��f��0m([�i@�Ku���r�y��
��Ւ�4B��Z7��H���5���W���:�Yy���ƅ
y�"�hT�<�RF��T<E���
��������DѨ�S�
+�#C����7_�!%%�#��͸;H(W��ր[
_/��h�y8�rl�A���k�"SNM2C������&����)=�"S�sI� �*
Es9q�Ё�1���ݴ)%%�hk��͸c%���[�p
��+��֜�<
3�cE�c)	zHSIK��-�RYZ��zUTq
�+g���ffA����^��ҹq���!�y��WL��{�l��x6^^-h#0��v�5�:K�!����4�|D�Ӆ7i�.�rsG�<bV��^�0�ԇ,���q����58�<�r�E��ڵ'%%��QBߍ�Rvawk�-�����[s��<�dvZ-B���}P"tr�ԼxV����Lf�=�7o�
�C�.r�R��u�+
��ln����K�AAI����g�2�V�1�ݭ�n^n����0��Y�Δ��2)e�+��
�q�@��p@{nˆ-�\�N�
+J�PNA7���#�7���C�KG`˚����+��Dž�CPP�9�5��d��Y~N�^�V������.a��`\�����L�/|QN�����/_~��͉�t���h�LϾ����B�λ��sOƫ>u�n{������}� ���O�������͛{����W)*y�=g�ݏR���S���~���u��.Мw�6i@�Z�Nn��W'�e*����)�~Њ-DZ��\�0�9͉ ����#�@3�b���%XsэOcRdL`?
SG�@���`������"��xP�+�
��s`�
,J�f5GVkm
�/ы_�&a�C����Cfd�
��qF�2�2]�+b�{�$�:�q��U=�W�*��eq�AH�8�,#���xm#>q���F��+����y&��僂<�h,*��(
���b9�)R�r
R �
+ãIB��.>
+����]b�
~i�Ȳ�А4蠞Q �2�mϨʕ�d�ad��.���s*fӦ'�F`|�Pj�4��N�����
ij�w���i�&k^�”	� ����Z��=" u�Q�:k�ct�j�4y�=�>25O
�E�;�s��/�O�'����50$Z�%���{`pt���]��E/�k ӣ��N?�"�h�
��Jy�k9q9��A�t���s�� =�Ú`�j$!�Lٙ9V��3*Icb<�Q��w鉊&��S5�J��.��S�
ă��*$"��LX,I���{�V�\��s:_Sdd��zqh���Ёy_���K<q\YV2���،7ϭ�p��㚳0z�����U�K������oDRjA�|Q�����TI�c���`
1LI�+����q�Pf�����̅�l T�?lWK�^��
�?|������w-�!�B Ɠ1!gl�Cd'
a��sN=�~3i�շ���<d4�F"'�����Z�P�l��&Я�cK�FO���ӓ�E �5-,�*��ea�ˆ>�
�%{�w�ԥ����F$�&l�\��gb��mMq���|k�b�
+
A�A�-
}Ԡ����S��K�	�l�L�3�<!j	��{�~��z�6�=;?��T�c��n΃+J�_=CLa�33-����W�Z]}��*�@
F��x�;�k���wX�4l��w�
U�6�؁��N�ٝ
M+��(�eEw���c�]�����w��!i���x�,	>��<��O�ӓ�<4���TO�_�X�'	��D
$2#�ʅ��V@��e�[��U��$��-x%�U���|�Z]Z�����Z��8wu��-_HY���:�y����XQù�F65&�0��[^�q�j����̞;Ȭ1$y	�ݯ!�ō��m��Sd��I������2��-�W�\&>iL��MÈ�BUo2#����2���
{���
��@ ��p(.Ns��>e@�x{�h�p�+nC�_���t
�y`�!�|H
��s/p���Ә
���x�,�;gM����U3�Al�:�W�� �3]Bk�aKC�S;x�~$^`$���	~�HU�Kv�:O+Fat��'�9���
?�������2�������7o��Of����(�ÅA��Q

�@vwORHISb
+��q
�c�W��s���ٖ.q��h'HJY�
$x�T1�*#��A�n��W����D��+qӯ̚mE���^=@>
7���A�I>�W�Ů."�h�i�r���(�y��4Y%�~��Զ�����TO����8чe���g�x��
+2+���u%
�Ңu30�����n{��A䙗��4T��J�@T�`ȴ��{`�"
NqX���с~�[�ϔ�gg�(���U��MC�
��l$f>U�AL�8ie�+ Au���
W �L�m,�T��)o����@֎�F��C ��TA�Ff��u-B"w��C158(d`z&���2,s�%H
#�
8d�!īkM
/F��vŹN�k0
�T�?��+~�V��~��Nn������aP0
Y�j�/EЍ�e��
�~��/�v��n�]Eyq�|
Vp�g��+���\"���K���d"����A��g�W����%�
d�wS�K
+��{�HZ�[��ne���)���gsFA�<��6��p�1.0.ő���/�M�_���%Hp�
_����+ZnHs� O��q��w��ia�>y����-=
�*��E��?�a+�[��H�b�a����I
�q��oq�0��
����D��:\��4�VCF���pJ<t��r+u�Z��{��%vv^%h�5��l�ItQ�M�v}��x��b:��fi��W�
��	.
ǝ���M]����q�f��
+�y���j���a�P{b҃Ͼ��0��7ث�
��ƕL��t��Ʊ^��Ao_|y{��ûW?�������?}�����3������J苯��ǟ��K4��=�x����LJ���?�����ͻXGe�7#�8�^m[o���Ͽ�?����o������=�}����
߇lg-���S��<+A�y�p�61�,����XL�'�Mi;��J���tI
�Qg d�3$-	��-�ҞD�[�0fc:�0O �;KM{�:a%,Oo����\�.�q �Xs2���e�%y���;�
�.��K�.�-,��*缾-�37vВ�R�>g��ɥ�g�^T�ϰ�+���l.7ں����� P<�1�ժ�7��9|��x�!һ�k
o�Z
��+��dS8�<'h_+:�v��}��`V
+��za^,����_�n���#�;iC4bA:Rl�[x�
+ǥ[�UJX�Z��1�8q��;�Y�_'f��D^SlUJ�ky0�a��Š�Hr:�I#�(I|
֣:��1�
F�۱�x�`[�P�KiG��5\.p9�:4���b���$�w
�_u�3�k��^�0�#y�� >e�c�x�>{p1����`��ER
�k�A�ߤ� �\,��k���*�9�/J�
��¹�X��Kx+����(�x]
FwkB1ƕ�H���/q|��3P>Z�q��;CWӻgbZ�n>qc��mx�C�v"x�D��{�p0�
�E�
+Y�b��/��a���:SC�h�3�#C�	�i;��(3Mns�-��*��Y��2�QrVG`���G�Tq|�/�l�1
W�gRPD4�U�&5��ul1~��l�rY���x/t�
���|1W~��
+�1�6�A�y�
Һ��s`��rJY{`x����dl
�َ'A���*Ѥ�r�I�̘	jD� R�������ؔ]QZ�m�D����cZ���f��f�/%�W�@�ЦN"IU)R%������MS��#��
�KV�7@�
�k�%�Xv`��^��Xa5�����tV��0F�Ŧ����=�akY��̤��
+�Ⱥv -w��=w(�E�u
Y�#&|���qM��{.~�������
+C&��M��	dfBԋ�U6�aɌ�,�V��� V
+���GK$!�-D_�K�t:�s�2���<e/�y_�	��49 �����$R�ۚ���Я��0@�栨}�S�F'��t�����J2l�J���zi���Q���A!���9�n��E-���a�5?��Zn�?m
+x"t��X��ly�Q�3��y���3L�l
�-� llk���o��>X�: 5n����֎@�P���n���z57�!�!n�������Fc���������7fk1
�G���|0��hx�N�Y����C�t� ��*f)7�����'RR+d���y��V��"�} ��|	$ LwW?��SfAE�ŀHw�1c��{ת���2��	��S�O���X��1�&}����yM�0h�zd��N
�xZ�%#�r0��g��)��e��0C�1���&��@*0����2����k�0��#&
��%���b�uT�vf�z��(n�~�Y��A�
m�S=M~v�aQ��}Fק���~ˉ�u��!y�,�䫚����z�bM���� M��c���m�Q���+��
3����S�ՠ�p�TZ�
��f
��[2�ΝRO��tZ��;P�ww��f���x���X���w����o��)�Z;kP(�N:moh_8HL�zt�2XFTK�* 
pP��<\�2��&Fdi�{p�UG�sD�]T�F�x�3+�$Z�}f'7�u���&V�ni�z�
	V
qV�A`߈}@"�V9�԰����h����ɖ���O�b���;�#y�~�eWD�#8|ĆAߊ
2s'�A���y���(�G?�H:cBf0܂�5������܀
���]���ݍ�x��u��U�dz� t �<΅jTW
��n=A���
S�5�ou�
�Є(��8�q��s����jX���}��j��~�������&�
�u����W4�f���ސ!�JQ�+�2]����xPV;<
i+C0|5�:\25ؠ���� ����g��>
+
��gA�/�z*�6�<uc
�;,h֓��qL���0gw �,�r��#U��Rbj� n�}�L�=��
�3E
��z�IM�
��k�,��_�~�\$;pA@�@G��:�S
ι,�x��t<Ҥ\d�:���*T�e�ܠ��Cd���
+��<����$�~(�.�v�ur�#�ꁴt'sx��ׇ[jX�]��|8���A
r� ֥Y0-0W�^K����t^�e#�r�	z�)h�tmu8|��b:��Bi;5���cxD���bއ�Kw��>
P�S
+[���&c�&��F�2vƟ+dh^J}� ���i#�
n7�����s
�+�(
hb���OV�JF���V8el��ϗn�
��:�,
���f��Vb�e��=���ՕϚ5se��'�!�'.A��µ���S�`F��=q���������@6�m�-�j�m8:��5a��D��/S���)lM�;��ap�
�,�x�)�
�J�H(������
��-��R��'�$�7 Ir���`Y�>��J���Z��J6=�]
�\�@����w��9�)E���|����OF�ڀA�K�iW�'�D?D�r�w���e6Qk�X at I��/��=�#�:��fs��uI`P�L���F^�s@�a3ߨ�D�a
e���L�ưe�Ȁ?L냡{(��b�G��Ul��q���wr4ʻ�S�+jIYЀg
���Y%
� (!�io���>��rS�O
+��́�o�T��`�X�9�pq��3�i��I�
�v�?uz]3���`:��5�����%EZ�V
��[.ܧ�C�D[�NCϦ�M�qB�qx9�;-��q3��g�.�R,�����)��)���.hR�P��d@�
+Lj+Rb�1"����X��|�a<����|���ǯ�>||���_�t�9�Ͼx~�����~��۳o�{����x������_}���3;�{��޿�S���/,��&�����q))���Wl1ݗ�l�|�B�{�n��%^h1��	ve:���z�BM�
+��t9G� ���"�4�&H�n6�Q���C��&�2��3�:c�A0����a{�a�m�A҉��uH;Lk�`t�#5�;����;ju��-FJd� M�?���#�w��I��I���`��Z�} ce�>Y�z�:����`Kq=4�iAoed�
�x�[���eE�%�Y�mRH��j1��2*���y=�9ʁ�s�����ڥ�h����
+�㣹D
9d���?�'A����U�X�嚙�Y���(�guK�0k�iهSӀ
n�e��l?�
7���cC��X2Sk�K�
��R�ԗ�J�jփ:3�Wj�b@^���!�im��"�Y p���>?Z�e�hJw5dž�� �nEG���,�%�mf��Z(R��[GK���
!�
W��c�=���ȶ���/.g�@��$��da�C<aD$e���k4=��k���*�Xc�J�H��V��5��l:�M��
�؛P����DY�;E
��3���s��#
�oϞ�^���g����䏗?>��'��;|�o�_���{���~����؏�~����)�o���ׇ���@�W
�+�
��e����nIx� �W�+�7!ȶ�ˢ
+Ɣ�չ�
@�Ou���ۡ�~i�]N
�A��
R���
�R�
AȄ��M� ��<��+�5���@j�q��"�-+U�
�����fȘ#�����뾑�����T�
+ɔ	��1GJ����Tg$m�g
�
Q�ޚ*�i���b62�ä�Fˎõ�a6)�wam�VlJ�>6
/{��l�e�kd�!'>yph��yZ5�`q{���kf�� �u1��j���9g���k�˳��
�JCS_�虠�S�����A�@�`� �&�`O���FWj Q	��(�bԐ����\��5��i� �q����D��cL��)O�,�#��@a48��E@Ν�����`n�N�H?wLm
-�t+Xc��О
۪�5(�P��ar�i� 8|��t�5�
ߟ�8NJ�4{M`P���X�K��lj+y�	]�&FF�+�VWHXm�� +��V�N)��[���v+br�㘺����(٭!�'�X�t at N@,=/ T���!�P�n�I�ZER�,�	�Xi9���=[
�����|
�
�dp���M?�qciā�;c�#؇WƂ.����Ƞ��T�;C�Yص�oQB)�~gB�����.�!B�^�#@HY{��k�G��r2=4
I�*d��0���Z�0gJz;Ż~:]w�
+�c�r����s���#�[�
+�yV��^��E��mHx��S�����{}�RY��ֈ�q	/?��&��ʣp�'������X�zU�<T�z,�v0��Bi�(
d K����}L&��[�2�$�g�;�,m
�ڢg����;�˦e��5s������P���Ͻ
��d!ﮒ�YF�83V��+)4�}�c�e����<��ɱ�b"�9��|W�
�슪Q�OMok���p(�:|���z��ݣe�[�
�'�/��u��Gϟ!���~PŞ/?�UI�q��+?҆���-*,I�s��m�E�m��Y�Й݉��ݴ�d�+B������/4.�m�2V�CS�1�iO�[�O��uf�)m%X�@ULK��cڇ���gH�|/ڪߒ��;;{=��Vah�GQN_����2�����&���T 
G}����a�
��{����)EJ�,IZ�i�dF:�4G����=��Ӳ*����es��t�0�>jz���-��r���}�
��B�{�~���m\�����g�Z?3�F_'�媞�\������"ŦP�b [...]
+:��c��
+o�<��(D�2_i��^`t����у9Ol�o�p\]G
_��"�b��h��؛�lE� �l�8�x�e���U,��[�]|h ��c
t�Q
+����o[F��{˹��Lw=
+�Y������vo�,��h���
פ�}k�`&p��l�gw�Np)�_�R�&�<��4�E؉fE��Sf����!O�L� ��j�(
4T�t�3�"�b�؟�����-G�w8�S���7�i���W�v3 �Ql]`��A�� U,y�#y��<ū
��=�l��	$d����ϰ�\A��[9�{Z��^dz��p��e$Ƒ�M�"��ޏ�DUga3�'}�
+��'ZL�K�<��@of��0��[�a����G\�5*�k�J�"k��%��pI��O6�/	�+���S�����'��2+��|n
�"\���j�˂"�����Q�$U�:j;O*�f��h�V��Cz���E�u�
���4-Pd�,^d�oH
�vw;����!�"��Nq�s-����x�<�>!��� s�
+���=nXJ�;�@��8I5�s?��b�X5�a�����S��X3�"Ӫ��T�\\:�묕����&�Z	1�f^O
+Ϫ��B/nH�*JY?�!7IeQ�u_���g����np9)W���gق���A�9̜�/�M�l6ʫ6��H
8�Oꡋ3�ةY�2��c+����;���:y�v?�NgP����3�w !���ط@�fPL��w�2�UQC}b��B�2�dk?L3���v:���#
|�@�ʯ/��Y��>��/F�ͪ}��ɢ����{6۰ɕZ�-wbB�U8��,=\Xjv�{.n�����$u�sI}�s73����n���A�x��S���(.m�
X�V9�i��Wv
S�WY���
�G*J��E�hZ���	~,q֑]5�P8�������E ���ˍ���
���y.O����v<"k;&9
+��
+��8��UJ$ي�7X��ck�;���h`�I�a����l�������v����!�n
ٯ�����JJ\�b�s�����!�nQjLE?:b8���Y�
+���t�l}�;-/����;38�VH�
t�e|�hj�\�o��U)�y�N��s��r
����v�橫1u�'��h,7�����Z��_L�T΢ޜ�Sx�qq�eP�;%�s�(�^�8�X�!=�$h��/���}�N
�����:�\7S��3
+I!Dţ��3��R���ȵ�u�V<��^�$��6緇
N�
)2�/��q�v��6�3<��ұ���h7s�#k��-ps�����t�
����D	�!Ae�,�3
=!8j)���ųO�$k?�ʋV�2{v0J7�a��HǪ��}qV�;�'X�l�����nI�Ε�1��W5�oL\���V��u(�fE#��*J��»��ͦ����T�'�$'§�J�Р��Y�����~���hJ��\E:8�ɫ8ų�e�.k���T�
+��#u�I��ܐٌ/n
�Y�l�,+�e=Luo���Q�$j�c�Y!#�#h��p9�ƣH��Q��$��"KX�r���D���R/ I;�h����X0d
�g5���x�[�&W��c��FV�
�����$�4%�u��P�6��F�4Z`!���T�@�
�eq��h���C�v�w�H������z�\�N
(j
+�[�n�j�@�]��S'u�a�(Ֆ��"�a)�q���Y	���T)� 7
��\�R��K� �ߴr~-X
GU�
���
+
α����G�c���}��7%�����"�S at z)Y�}���c����c�ˌ�����y�꼽L�A���RB[
*C�|�n2BN�V.���q����F�Ȭ��'�rt4��gw׎�V�z�5U;ZR�4�H��Мmɋj�{��f׆N��o�0��R(�Q�t�����
�]a���K��rR

�rWM
��9�Ҽ�Y}ZI��S1d�l���
%�M�q�cz`)���'�]�ǃI���V ��
��
���ؘ�1>�x�rUP�2A��Go>�������?_�|�����v7�Vܡ�g�s8ًI������ѳ*�� ���]���ʧ&#3�)��!��Z-K�MG+i�������t�ԨKѐ�D&7� 
��.qC\�Q�?���c��tf
+I�I�y{�yι�9�}]��Q
LjAl�
��J�Bp�lT#�I��;U����Ś(i���K@�H"s�-Ⱦ����;�ܽ��5�ܽR����U8-�<~
�)\�������ȣ�
�sU� ���<BWe��;&9�d�f��Av��|
iR��HL�x�v�3�oe~5$�%(,SNKُqJh���r��|R�5���( hD�����?<w���'/�>n����������×/�>�\7sxi����gϝzz��ҁ}�ݗx�����ƕ
�:���1�:22
����_M�}j4����n��hjf����
���<�fy0�~�i��

ڒ��暽��}&��=�����t���_�~}�z����^����}��~�=��>�D����B�D�
�>&���$��{�ީHR�P���&��~��@�j�o���wx�v�s���! Q�݋���Ԃ��^6�ˮ������E�.j���^(C��~0[9�zch�dL.�B>B~�^�<�	
��AS7�seT�T
/ĽZ��a�ĭ4�M�15
��F8��ݤ�-(�#n�.!3,=�nhf��/<2�x*����%(�;r�J9vʜeV
+�A h�h�4�s�H,��`�T���hR��=�'�mar��~l ���H~��
�����׈���F�'q�%���Ti]qV94 �̾K⿛�c�›�/a
�Y)�پ^1�,�Vs�	j�k��g@��z��m4�Y(��%7�ľ���l?�d� z���P�I�V�fRG���f݁-|���dʻII���r\p��A�
8(�����뀻�� ����ܞ!��y0��FV>B��������Fq�X�����%JH1�t؞�
�8`�ci�UJRo�
��%�$�qG�%�=��λC��	F14�/kk<AU�9��ߑ�{p�IV�c�f�o�d
&�N����M����m��������,F�
\�r�$���D���F&�cal%�q���	��Jߛ�l�P�L�C�v6�?"
�2m� ������,V�\L�hZC�%g
ݹ �[�ћ@���f)�+�n�eg�ʡυJ���tc� ȋI�Re} ��� Ŋk��Wh<1��V2/�>���Wn�8�70h[R
j����VV$��K���9�NJ��P�mG �0|���)+b�ICix�/ژk��ĉ�q���U�:->쯸$�TձE
F��l�7&Fl����


������X�
l
n�
Ɓ�$g~�brQ!��2�6�q��O����fi�e�Y��^���6N�H2��ׇ��n��E|��B�8"i,�JTߤq�`7�p I�ӱ�Ig	X��l�njs%�ϫ�
��m��q0���X^
+�8��x#%(�#�ܭ��
��10��n�dO<�,%�����@,���
���{�&д�$�Z%$c�`
��k;�@�
Odv(d�9�U9��pIl8f�
+��?4@�����2���"}��
�"f81|(5J��lai~��u�<r�Vݧk�B\BE����嫙�6ۑJ��VR 
�Լ��Q�
+eKe�8�7�"م��n�ڿ�A�۾%�Sia�2�
�,�HQ�a� E��;XtcQ��R-^Gr�jk�D�:"�
š$VչZ�"��Rן!f��H$�D��X����t-�.�Ak��z�T�Pc^�"���}�S&+�,L���VѰFߙl��05�7�$�U�I�\�����\�$�5�4�jg�
+q�j�2I����NW�:��xH(�:�،=Q�.\1�
�z�rr�)���P<z��\�6A�AWu%v���c�dI��]BT/�
��bdUc+b����
+�K����*>q�R\y��
��BG����K�N��q
s�A�]�phe���6
�V]v-�>�聾CR�A�p$^�����MP�9�
+� �8�Ũ�SU�w�!p����9�a������DGR�*�Ac���V�Ft�ߛ�D*%���TI83�ܚΪ��0N,7*)��rZ��0^�)�Vn���~��~/Gȉl��qQ����V�m�F�J�
+��ڨ(e}�I`���k|���I��/a�D{�8#^��$���[`���֦��K��<2���l7t4ud4=w���_9w��'ΟMI����N�k���K��gN.-���͝<�x���h�ts�1��h���n�E���� 
+�e��#�,g��o	�_��=�o�#�b���cϚ��{����D[Fb�v8{M��7�t�F��v"8��ǂ�>�����'%�fX�I*<
�U_m,֐��}�M��N<�s�8,F7_
���>�<�v�ǟ�x���$��
����ޛ��*/��V�#�ō|k��
���?}f���Y��¥ˋ�5�4쫣�cz��V0x�=ہ���t�K7
B!&������?
O��./<�ec�?0��Ϟ�g��k���s�l��l �I �7��1����b��bX' ��XW ���  �c� w1L�a#�}`���¸�aի��� 6x���
P�	��0���06 ��0V|��bX�SZ�!�-��
���U̫��O ��'_ ���g��_o �*w1�Y��X5�O
�I`���$�O��V����U��f����I L��q k�v �	��p�0�
+��a�-�[��
�Of���4�lƳi�g��m�Ѷ���޲m�t)�;�mYy�gv�]z饥�_��J ��:��?�����W�y��G���{���_^��m�c޲��/��χ���o����+����o����w_?��� ni,0����&€�������ߓ�
gv쵿��ooNpf��ܿ��o�q~��w�i�=
}�����	�'q��מ����Ύ'~���>t�$c7o��߽��
+�c�{��_�rp�=[�Y6�>x��/�}�;�y`���l�����}����y�k�s�l�|��?�����������I"㻻!H�XP��u����qܯ�6
[ڦI�N�5�I
+Z3���j�k�6�)Q�N���fm��M�Q��ݡ(
+�}�=�y���<w1�R�k�z������\0��gg��?

��5
;�����E�'��YںGF/��do�j�
�t�/R�B#��Su:�Y<����|��զ�Ռ����訥#�P��ۼ�OoE��
xٚ��1��	e)ⵙO�̕�Bh
�;O
�$c�
i#��f�Oo���R�t:����ʉBL�h����7��f4n:�.�a}�e�
����
 H�I����k���Ͼ䣮�� Fg�{
mh:�gu����
+/���N``qy;rh��\,��?Y��:S�
ܕݖ��������W����Q�@V�W7K��0�W#:7�����ih�����/�%��D�ɀ
>� n��|��#Z�8͹�v�P}|��V?j��WO���UWqeȱ1a��Lq�ejtE�?��.6���檓SCd@��%ey���h�����1�lUb$����p���~��~����X!?��Aͧ=�m���
Nn-C���
�=�䆤�mhl�P�?h�%�_�	B����Ȓ��u;V�����
�u;�&���pcI%>p�C����b<��nuwMɅ�D�s����ߥ�r<�V��yI�8�] �~Xz_���䊛�i�����X&Bq9�ͼ���:k�F�Sg��@���Z�֪�W��\͚t���w:{gƃcsc�Y�����}�m���
�ݝ�͗�G���n�ڡ�#vC��1�	n��>��� ��?��� )�<OL�f��ɲ
�3<M
+4�q�$G
��3��8+�4E��� %e�%��J�7r

��8Et?������|���iM
ϑ,��:�x�.���i �5Ɍ�@�"���@�
C�Bw���и�Ȑ��� 6�4�
endstream
endobj
29 0 obj
20725 
endobj
30 0 obj
<< /Filter [ /FlateDecode ] /Length 31 0 R >> 
stream
+H��W�o���.@��^[�"��Zr7A
X~$���\�
c%Rc�(*>�C����"��-�N�F�D������㷖I��[�k1�4\Ʃ�LK�ƙc�^�2Kg�iٶ�4�9�
]ө�H����(��z�5�[��,s5�������[���Z�n��*�dk�
V3ʘ�ڎA��T�9E��1n�N\���i"��(��,�u5�릲�Lוb���n`!��'.��^Y�U"fޚ����a��2\{Vm�X��LGwX&k3ws��tC �\
+2]��9�V:գ��q���4�#�<����эN�QJj��Nz�pO"��b�a��u�
+���W�bj���,؆f9&�
�n[��6���K���T�V'ן���G7�Q���R�X��
�P��@p�s�4�(E͒�ڐ�R
�]w�q8D�� �1���G�\�B%�d����\��1��ZH�f2H�{e�b�N-.8EE�yō�"�H�L���J�E�m�R�a�:�þK�
�t�E�i��g�X���S͢�]�V��[ݪ�ܩrUN�^�G7��U^V���e���T5H�S�����E��%r�U+��2?B#o�"��0�ƨ�����͇8j'A��m���[�m�9�ʇ��1�k����~�{i�R;��OZ�d< �E$n��\&���71�➈0
n1�L�c
�Mb�QJ�0��5�u�����"%�HQ85���&²�ҵ|��/جܤ �t)�7/�zn{.��4�p��ҕ˶ �� ����L8�^  G;�HJrJׂ��PD�����K����b�O�����/�;�I�:�(�t�&�(������"
�ȶ����e����Hz�� {>��uJW��B郝땽���a�L)W;�$C��.�@ [...]
+� ����iP�C�m"@�,$Q�(��X[�
+�
+s�Tf��]S�׻�xfks��P~PN���خ���
��g>1*=ɼ�(#0�\�4

��˔/
<d
+��ݩ�-e}��n8��C~�Jԧ����!,Þ��jm���@M׭<��ǦL��XsT�m�c�(;x&�8r
�X��q�I�9CUT���8�ɫ�N�E21�J�
�@�)G�ލ-O�9k
S��
��yx����ͨy�l0q��g��LA��
>T�Y��onc�S�/ ��j�%6�?���{KȔ���y��೮�z�k桧ӽ1���n_�?�=x�(��[e��.Ps�7a|#�[���*Y��J�.+}�׾�$�Gu,Y�j
��U�d�p��l	tM����Hv���qQx��x~K�U!���
^šՈ��f)�
+�C��X��\��eaJ��[��9�i����
!��"ّ��9�u���֒k�z?�2v���
G�Y�[
Y���Y�"��Is>'�'�9�6
�}c��C��H��{��)��Ҏ�9
��%MՔS��<�t�0��]�q7ԎS����e1smj���(��U��Ak��?�V��F�}$��kt���s����+
n{�y�ǽ4��Oś'�p�h�<��ZA� "JD��kf2��/��D���˶٭%�#���c�a�i �Ƒ l�܏�+�'
�+rQAXwY��w�&�R�����O_�v��=��N�*�䵇{�}�T+�6�_�����'�}�g�����$�
�f�7���I���V�G�N�J
����~��)4�6|�*׻aʗ�2Ʉ7{�
׮򓜞���I�
�K<F���,��3;�#o��
}D��~�y{���Ú�?��mQL�b�E�B�?�σ ����AZ�|$���x$a]F�$\�8�CD��Q�$��.%��An����q�a�]�j_D�kS�
���l�1�,�-r�bn������i-�l,���n�=���B�v���]lw�=1����,�v��=��p�g�u��;B&�}O���QJj�HE'��<k��\��srq��)�񤾣���_X'����'�?���7���A��W�fc ��X>����ƿ����;="�B�`�bh�&ЀWF��!,��/�p��K��+��M�_2,�	�~yZX��8�|��@ދ��bD$��t�z���pcyL˜���^0�$lܶ�
+
&>y�?΅�e��=��x�Ynk�����bi
�
j��r�#�	��݇u��5��M�5��H���914��n���nݢ�V�yF�j@�I<"������Tb��@3��BS;�����7?I%��Zx7��Y�n8I����4O$w�2E�G��ST�F"H
ݢ����I�D~2^��
{u��l
�i�M��v]���#�����w?N������)i�`_L�su��h�6�Sd�Ǫ�2
�a=�4�&�F�臼Si�A]�=��N
�RWs\fÏnqs�ek�w�&&w0�4
��)���Y������sv��l����L�l�����)����7��=$���
\�
��]Gw���6�U��D������$��w`�|T�
����{�l(ي�zXK���t�,
��W@�
�[R;
ƣP<�י1��V��F�qw
��TQ-�D�
x������v��*���B�L-	�@��&��D�׋�3�d�L`&s{:'�5C����k|LD4���p� ����_�Mm#I��U�PR�)�J�Fﺫ�*���l��I6�T�Kc[AH*i��_ό�ep`C����VO�>-���
+�ZS�n
���� w�a�Lʋ��r6�
��d^/av1�b���������f��zхӪ�$����C2KI��R���r��.��#��H����:��%mC��?$�5~X���b�	�г>.����	2��s	�%���n�
3�
��
��$�|QhZ{��5�J��xg��'�]e
C�5C�?�?~<l��������\/s�\��HVtK]��hy�#�.	���{[��}cٶ�wL�!JE�
�S�w#�;/3m�L�
�Z�v��;X��3
�Y �d[(Ҭ
�*�k�8�NSB%(�y7j��S��a���%MSZ�x���SԼ迆4�8�?��<��	��'<[~��a��Wt�
+T}���I%�I���$h����W�Qժ|o�7�G��|#�K��j7�m�>~�*G�{��M+
+�2��G܌�"�
+ �FWan뺘&~D}W��IB��{Ѓ�\���a�ňi�Q�$��V�xy����[g��	��lU-,��b��N�
� �g	����~��s�
dj��K�;�+P��ʕ�ɘ&��:�U���LC�f��T��L�)�[V� ��9�a��k���DS�(�p N�p&�
�i
�k����O'_G��RC�6��~a���%���x�kU*Z1�eVDQ�E��FQv
����R�U��x���|��5S��>�����@�� cF C�$���q
�@@^�+����s�Z�B�=���J��ҟ'"Ք
P�"k��J�9
���0�4�Ø�O��צm� �gLO��P��7�X��w��h/�K�e�ٱ�0�!b
+*B)*/�~?�b�E��
��ǡe�9܉��G���&W�e)�_�5`�
+l���F�x_z�Ⱥ���SS,�nȺ ɚ�Z߶��=��t�
���Zw�=N �=�.�g�q}�]�^T�<���d�	̻=S<�o���~!�NNl�tx\�O�������ӛ��/m�=��O�3�z�����΁�e�c�������������Kw��E�~,��+�[���YJ}W��頏jO���-=/��4���K3
��>�NSB�20��/.�uk}C9�eI׶0?Xn])��Y�t0"ZPZ���xEg��%^H�t?�^��'id��'�R���]�����g��㭓��}o��;v2	��#|������ft�
)��M$IzA�w�܇D
�>�^�˳��%�B�Ɨ�G�h%�$�h"�8t�M
+CR��0�I�2��Iw
��7/e9��Ȫ��𡙊-�S��f���h� շ9H�1lk���Zۼ�SA�<5T�`�!2İm>EsD~X��3�6���.k�nn�qnES*
pJ��
{���Y
����Ju
ՁZtT�����^n��I1X������P at j
.l��8�(!D:�S1(�FX���ت�c]\� 02q�4U�/F��-�D9gC�*8UC���qj��Qe�B�^/������H���I��ѠJ����2]Ӂ�5�;��k:#^n��q��1<��<�gǓ`�ͅc����C�d�lO������A6�<��} �'!��`��Śq��
��xprb�����z?��y�u~~ӳ��ύ�
\̈���������/<�Y�4�6�d��>
!�<�rv��F,�����1d�(.1u�����؆�
z���(��oP.	Ղ���$�&˄�o� �+&
N΅����-$��b�
��x���@(u��a�
��z�����m�3�q�/�.8�/�ꂵ 0�ٯ ��V�m"T�h
�6���w✽�^B�)'�t�6
+�	���ի��'��C
J�0j8i��y\)M0�ʗ}~��9�u0t�w���OI���!2���SY;�j��C���c�|���;N�u!�l�AF��v&���T��K��gs*�em�Ф��ª�3�"�m��e%� KJ�7
��&E�
��i
��
�
�{CDQ,f�Xs?����b4�c���4�% 6G�G�M\�n�Ґ�
��";H�r���k��+D���͂�Y�)^�E4n\.e֬j
+��	ޗ-kG7;2����Z&V[FC0"�,űy 
5O�Ke^�G�� ��.<�
y�G5
U��*�Zv
����6����O�P
aV�#���
C�	yz�b*�i&����q-+rD�*�x����E�Ұ���BȰ�����[(�U�o8�,
r4K���
a���U+!�+�<��|[|)B�}��-l`:y�k�����Fi
+�R)o5N�Pm	��W	������#<}�Y��+��4s�p�yЅX��A�T!CGj��I/I�+?<ڹ���P
+#��**F��o4��2T�<T��i��i����8�n�
MK��v!|��O�s襔���W#�?c#��/�V�\h)��?���K��J#��8�U�B����(�
��BM�V�

�A�NX��E����vo�K|�"�T��
�g��:�”
�[t����߈�I ���;���~C���\S�E��	r���_�ޚz*n.�K�k7���']c�����Y�6�ď׽I[�+�(����:J��\A�&K � �iFC���+PYB�
+M�q����6�A)?+`�@�
�2��c���~Q'ҋ�P�!>'�|��0˒���&Ή��}�I2��M�{p-
�+N(c!���|?���qq�hJ��1�o|@C�b*�f4�=��H�ze�9<��,eo
��6�7�
{/�R�������q#�Ϟ���͵�MB� H��'Ŏ]_����Ɲ��(:bC�:�r����o�D1V͍'�v�X�>� 
�<�'Q���TD=�SM���
eT�q�$�n��P<�5��
ߍe�8�L�99Y��cيC���?w3٣�̝d
2��]�����_E�{,OH ›����<�O��"xȸ�w� �އ+�����rq!��ć>���N�L$��^�Rs��q�K���"�
��GQX��
�r(x6g�EJ�`�I�O�0
>��r����1^.�f�6��x���C�b���A ��u@��O�"�h��V�)n�%���\��&~8��x�`.��~-�J_j\X�/�Gn� �W�(���6�`c�J8R,����g�|y���H���K?ߝ
+�"/
��?��7Wo#8�t��47?&'ؗ�P9�:`�
?
8{��3��6xp�;DZ8�������b�dM�;����S�`Q�
Ń.
�7~��M$��������p��Y'�S8�રJ1�g�س��^$�

V�g~@���
�m�џɝ��h�r��:�e)R�*�
z�e���d���T�m����� \~+��n-
�}�MM��"a�}��[$���¾&Y$��Ɛsc�����5`H���n�����j�2��h{�+���qr���#e�
j����w�=�
+�k�gZ���}���K0Mg[ˤ��lc/S�s�Jo��f[��
�k�9l/�+��Jp�p����wq ������WQ�o9��د�
��ҷw۲v��O��[��E�t�4���9�t���ȍ�ċ�(&���]���/��5�T�4)�b�-Ub�5Uc�5��vۮA:4Hcw�,]���+S��
+Oz���r�.�F���2'��� Z�[��UJ��$����$�~�+e�a�&��Yߔ;x�dV$f�M�����
�������"��h�N�w�蒌ViT�W�m�����=���
@(���|/��L��]x
���D�4
>I��閦IG��VF
k/
�P��2��>�}S�����O�?^��3�›��
��V m�H��?l6�ϣ��n
�#`���O��(
�#p�7�q���j���4}����P�̯�B���N�P���}�=�g�7k�v����І &���-�"�KL͋�?�`=9y��qCݡ���	��Q�~���%|`�����,?N����Ϡ����RZ�w��=�+�я
����_�!�O�4A0Q{59<8���8&W����]-���$�Y߁�ˌ�w`C�U�w�:���
~����G
+�&y�������W��w�)bƿ[5��ү��?��B8yC��o�La�Z��dv��

�ܝ�;+��
"`U��T��p��^.�@p at V�7�&5iƱL��nW��w��r�$N_�������;�׿���?���pn�о}�eg��i�2��?

PP_�9;O��#����
���َC���0?
��W���_q�k
�:���~lՄ��ٖ�t�ZS��-�S���9�^lv��o�[��5�V��M�14F�U)

�B�M����Qv4��Ts
��+�"N0
�k��tRP��r�x9�������pر�
,3��g�L��ָ�$��.N����|����s0ʤh�L�RV�A�l��er$Ƽ*��b.�/E�L�
V�t!�.g�W%�U���2ZS&n�
�)��0�H�J�V�$
+*�ܰ�H��d!֐,m �ʅ�����\���l Yj�!I7"Y#�0��iə������e�
��ۓ�v���.�P�5Te
m���XC묡]��*k���`
m���YC[��Xc��߅���6�L�4
�dƍ�N��B�
or�W\�֨��LG�h,�-4��R�
+[!p:��h��`�e�r
ՠ��
�&sT��+�4K�a+Ffˏٱ�ي�pT�����ȷ����-~�M�B��\_�ml��
���y�Щ��pަ7t����
JGS��:q֠�-?�c5ڊ�5�����ȷ�N��N��ubf�N�j�	
L*M�\�+�-
%(WS��x�N������X+&ިS37�#߮:Q�[�a���=�w��1ž�s�ڻ<�t��vO�&t�5��ש�w�:
*ME�JWP�tT��\M�&\
�Ԥ��w��[1�
j6s�:����:9V/5�q]�Ss�C��&5���S
^_��\��\�I.�"�� �h�K4�%:�%��-r�r��D�\�ܼ�|;�Eu�G��
iP��Ο֫�a�jF
Z�*��(�EE�c]9��Q�VՌz�fTw�~*M�Z�+c��5k��u��U3���	���j���
����I����{��0��2�)\�z���hp

^U��}���h騠q���u��u���S4��j>+Ge�z��M���/+��?����#|�AVܶg�K
�dVSs
���DӴ���!�
������$�5�[��,��܂@u3���C��ei�a��-
ם��Z��P`�/��
�KMK����l����ye��>������(�Ƕ4�[�n
r��C�q�`Ϟf���`�^��(ø�1��VJ�Q�n
+��xh�2��S�u�|n�qR�6
�F(.�����l�rn[=~��QG;�<q�
l
�-��K��q���A
K�u�i�!׌F����P�J8��m�����L�ĘWe⺞ϕ�KQ-�b#RP��r�xUb[�_�^+�5e��q��L
��d�D��aUH��"�
��$t�B�!Y�Ņ���e��Z;��{��A/C 0�����	I`!!�&
y
�F�4� ������J�[�6

S�]���NMƧ��\��er�\�$]��oC:����+�o����o�cw!���L=��)j�54C
5��s�P5t�:E
�PC
j�
5Ԡ���ƻ�eݎ�:�}�vDY�|
Qv>44�y�nc
e"8�|'����*}�U�9Y�h�����:ύ
�X��'NC�ض�x�#�,��s��zu]��m�
���o'�{NK����
NԔ�:���)��8���\G�sC��Қ�n�NsYN־1�D�+�d����y� ��d�L��dC~GEC	Fk'u�9���Fu�Q㓛�i
۶o�N��tS?Q�u�o����B�oR�
�7�J$��Okz4�o�i�
��`0I&�L�R��u��h�v9��q�
ױ��x�yl�N�=h�ehކ���y���мMa4K�$�����We�K�
+
p�9�B��Wh���
+
p�9�B��Wh���Ƕ���W�K�:��n�U����*��f��j����;[>7\`T4�c�vR��g5Ki�g�L�&��Өht۴5��z5��m�6˻��eKr���@��_w�tB^X~�)���Wa=7Xgcα.�s\�HF��*F'E#�s���fX��Y�;�_nN�Qш���z�`���׿�G�l���r�!*N+vvM�r�Wy�3�;\����˝C"V���;����5� ��,S����T˯S����'�ύ���}�q�z�3�:�%���8���r����H�W��|*DJb��I�e��x��xIx�s�.#SJ��P�}��a��H=��x�xIx� �N<Kk�xC�k�n
bI<�N Ʒ�f%
+��Ȗ$<ҳ/� ���(� E8
˛�c�֎� a䠗�1�D��*`գ�B�9�j,V�����TSip�k��D�gk��'p��;��*/&�>NZ�9/nS��s����''Q�������>TcT_��Ģ�\)B&Ynqʂ(��Z�mS�}Or��v�V���}���<7��=���7��`=
�`7��Q�a��0 {��v����x�d֎�;�<�&+lP�/�&���
�co��Zi��څ!���?

6��~]Y+��$Q8���/����������:><��w+H6��F�o
�*I
+�ì�eV\���_�������'�?=}�ŎK�&��]���mZ�1.j}���n��� /��.)?>�>��5N��.V��և������p��Rɺ(����������o��R� q�םBuy7�/w`�M�I�T#�ǵ�-+yI�J/�+��ҘdA������L_l\�T�
��!�)��e�b�F�U���)�l
��e�[�
�-!
�'e6������~x�e��g�M��T=u��c��Q/�~�c��B2�ă��࢝��#ZH<8g�ly
,�WU&�\Y��$tW(��N%�"��oD/���+���	g�8��:ȑS���X�4נ�X�Tp"���cR�)[?�ހ�Y"G�!rU��)���qJ�`�>ād�
+�3,e��K����T|8{��ŵ��G�r9���d�G,c)b;${5��`e$<�)q�{a2�<)��C���
j`��>���l
�k���"�*ts�b�k�z�� � ,LI�P](!S2R�����3<$�_�IFN���0�;�+����*MV{m
򶓆���Jb.i�
�� �
a}趫��'���R2�~�%���RL� S!#�Q��bqr��_sl*�	0�1!��Y���K
1�H�9ey(�4W�E��/Du� 7N'
$�М���H���<�Ӆ�̝<�ڰ��\\M����u���$҃�z�c������5���h0�b�x�‘�\�4�L,� �>I�����J�\ƌ��$
2#�
a4R*HJ)�
+g�W	A���st�W��
�	�,AlK	���:e���0<�
+	�y�4d=�+JT��p
󶗈�y�vM�
]6 3J���I�L
A�
��E�
F5`k$���5�nvƔ��$R����W'�8/}�Cy'_틬
v�
�n9�b�-�j
\J�ɕԋE��"��88�8��^��2�0mg�$_S(��"a*F4�y��N
4�?~{�ջ��������v���!x��������a�Y�?n��[m
��7ϻ/�����;>?
��?=�%y4>x��������
 @��
endstream
endobj
31 0 obj
10400 
endobj
32 0 obj
/DeviceRGB 
endobj
33 0 obj
/DeviceGray 
endobj
34 0 obj
<< 
/Type /Font 
/BaseFont /HRJEYJ+Courier 
/Subtype /Type1 
/Encoding /WinAnsiEncoding 
/FontDescriptor 35 0 R 
/Widths [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] 
/FirstChar 0 
/LastChar 255 
>> 
endobj
35 0 obj
<< 
/Type /FontDescriptor 
/Ascent 803 
/CapHeight 572 
/Descent -249 
/Flags 34 
/FontBBox [ -6 -249 639 803 ] 
/FontName /HRJEYJ+Courier 
/ItalicAngle 0 
/StemV 56 
/XHeight 434 
/FontFile3 45 0 R 
>> 
endobj
36 0 obj
<< 
/Type /Font 
/BaseFont /FTJXWN+ArialMT 
/Subtype /Type1 
/Encoding /WinAnsiEncoding 
/FontDescriptor 37 0 R 
/Widths [ 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 
278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 
278 355 556 556 889 667 191 333 333 389 584 278 333 278 278 556 
556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 
667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 
778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 
556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 
556 333 500 278 556 500 722 500 500 500 334 260 334 584 350 556 
350 222 556 333 1000 556 556 333 1000 667 333 1000 350 611 350 350 
222 222 333 333 350 556 1000 333 1000 500 333 944 350 500 667 278 
333 556 556 556 556 260 556 333 737 370 556 584 333 737 333 400 
584 333 333 333 556 537 278 333 333 365 556 834 834 834 611 667 
667 667 667 667 667 1000 722 667 667 667 667 278 278 278 278 722 
722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 
556 556 556 556 556 889 500 556 556 556 556 278 278 278 278 556 
556 556 556 556 556 556 584 611 556 556 556 556 500 556 500 ] 
/FirstChar 0 
/LastChar 255 
>> 
endobj
37 0 obj
<< 
/Type /FontDescriptor 
/Ascent 922 
/CapHeight 716 
/Descent -250 
/Flags 32 
/FontBBox [ -222 -250 1006 922 ] 
/FontName /FTJXWN+ArialMT 
/ItalicAngle 0 
/StemV 88 
/XHeight 518 
/FontFile3 43 0 R 
>> 
endobj
38 0 obj
<< 
/Type /Group 
/S /Transparency 
/I false 
/K false 
/CS /DeviceRGB 
>> 
endobj
39 0 obj
<< /Height 60 /Width 128 /BitsPerComponent 8 /ColorSpace /DeviceRGB 
/Filter /FlateDecode /Length 40 0 R >> 
stream
+H��W=N�@L��8�t))B��	�"U:J((R"D!���.m
+J�pN�r��o�QF�]{�;�²����ٷog�h�
~_K<??�q����lG#
��z������9�'
W�s(��_�?��:��7&A���O�&KP"���gggP�j;��~
}p����#�Y�A�J::�D������	�A <�>F�Ed�q(��:ڠp
)�a���C�Ә�fM��-SM�R
+����󳁘rC�Nl
�F������
�f�����M�R���������b*��S@ ���ǹ���I�A ,}oӁ�4�^^^���(���a
p�6n�o)�g;)��ȳ
+�cD-۸!��6�
+8�~-���h��,�;v�M�u#sp�ka����� ���'b
C�
h�p
+�Bio��a���G�C��B����-��
���*Y�#N�^UN�����Z+> �)�3�N�D*M�r	�u�����M-jY��D	
+p��9/pM-�^��j��v�k
+
+Q�	(�_oPP��#`������v���@&hު�#�Z"7F�QԦCJNdR@�omm���5^��<\�Q�CA�������
�U��v@����`����f#��](O�H˯%xxщo���Q��6Z:m��
�y��P���H{*���b�
߲��f��Z��>g`:6Z�
g�}�#��W �æ�� �����PNƠ�Y:�qB�6
��Vsq
���/ϡL~f����̽D���c�����O*�E���K,�:��d
��C�(d
+[��L��
����D��?�P���z��v�/)�R��f�����v��,bM.m~~���1�X+����Q�u��_u����Q�Z{{{[}� �rqE��(��-_k�Pp��c}vww���W�R���&��%��WtD������j�k�U�_�l�@�Q�uH}J��W�?y��:)G��|Gk
���oU�;@�3F&g���ü


r�p��h�x��ϩ,7����Y
��wt0���S�}
+S�,���
+�#/Z�P!��-�X
+~�<��ʢ�
��ٱ�w4}%e���a+�R }$������N�h�F�&�/..

+ht(�š��

+���Vj��U�L�@
�1k:5P�D
+��v���$�������Y��e���
+:���A���#;f`�(�O��\���F���ӧ�����1

+��W�(N�b������W�36OOے�G೦U�bW,C��\�v1?������J����Q��4��C!��C��?�j��wJ�k
�yyI8*���}�U��Y��R�-(�)8X�)��Ϣ�SH�ߡ�>�`+RQX
�F����H(�0i����1�*���F�-�L�)$��Pp<j���a̓�@���%
�+�O<9�y;��J����05��@�O!���jO
+����(��A
�g1e��n�}||�.;i�����������`�>)<==9��g�k��̺�<\�9��/���G�����D
+�~ߧ@%-��#�_�<s&��gJ�D7VԴU��ȣ���v@��y֡p}}��,��
�RX��`�5�V(`����^϶��(�����/�"r��=���
+��Ս&gkk��_g�ȣ���
����A& �c5)2A�t%£u:��`PS����
�
�������v����(°O��k�:�)h:�V�^�(쭸>Ǩj�M�����
n�3��yV-4��
�3�+�u�|��6�º�� ğDK�_h
�
 y�KhL
ܸ�l{�m��N�N
+��j�
q��y�#�p����O� P�U�
endstream
endobj
40 0 obj
1810 
endobj
41 0 obj
<< /Filter /FlateDecode /Length 42 0 R >> 
stream
+H��Wێ7}�W�[��Y��{����lm^�`�����&���-RR��F}#���<U�:�X\^?6O����������7��Ϳw���C���
+X������fw2�
+M/_^�,��Z����M���nS�8���˟�߶��e�{�T˛�������ͧ�~���}�o>
W���{\|^�}�������
@V���VJ(
���zpw�v�[?|�m��<4
m/_���Z,o
��j���G�n��m���*���b����B8��?mv�m���@�~�^�;���qw�X����p W_ֻ�����6���������������ֿ$h�����~��l*�}�Oͪ���oߪ��Cg!��-�����<���pT��
f�T����
+��}���
~L����~�����_oV�7�ߛw�K�J]
���x^g��PFD���W�l���?�ps�E������3��\��ΚZXm��G
�X�+׀+[3e�kW6��,kW.���������v�{����¥_!v�V����CܟD��Ґ��_��؅"�����=���E������C�+�0pp�Z5UGF'�m�^\
�drZ��x'�N���~
s� r����!�k4�+~;2�f`#��%c�~�%�S�%_yE��J�
�����K\7$��
�\�

k��g���P�h���\'��r�Z9n�ʵ�r�+�R���Y�����Eu*-�++��׭P1H*6��(��sk
2�v���C2�n�]����;���n �
d���n�������L7��:���n�� ��A�18I컖����"��
+�}��;
+�{t�k���3B���d(�jL����r�iIjl��JH��f‡��8z�Ԅ�
_5��5r7�¡�w�ۚ�^]Kõ�>TO��*_
��A�mJ�Ћ˒���
�T�K��7�@�.Ј.�����Jg����N�S�R�3���,�I*�'I�*K����.ʤ���I
+�'	J~��'��h�M�z�I�lzʠF���Μ
�s�*0Gh�
�u+MI���t���h����2G�'J~�OR��|��!�bNs1'��s��r*s2�=�g1��ʈ(|f򕔡����^kӢ�P.i'i�e
����@��J4%���V{.J���jt�e�O��J��Z��6�C�e;��mW����
Z�PFt;��mW��p|���W_ֻ����u [������m���7�0Y

iV��*=7��}Pܳ��%�ق�,՝-��R�ق�lIw��;KugK��Tw��;�oS:�>�f��\�١�Y������Z�?Y9ʅ��բ��]�֩^b�UN�'6$p-i�߄]�a0G�)��1>F�Uȷ)
B/vq3WWϡJ5�
+�1��(��)��JL�"C�?��*�PFh�s�Q��D��P��RGV�(�iGA[W�є(;��b�h�f
�ю�-�P���,�(�v�oS:�CGa�L����������W���ǟY�	o{_li������I:�U;���"�1)�R��
T8�Ѫ�\�o��5�PI�1l&
~����J��	|x�î�ON
+艣¸�ݰ1͘Zi���h��v��;W��%F�%�U'�C}�F��
�Hl�Lk9!�eDR�q���/���,2�R�M�
FZc��ZXm ($�X.��km�]D�ve�o���۟K�e��
;�?xi׸���pk��l�V����C����Ґ���E��.q�̭�8?uc��}Ye^ۚ

�|�%��Bg��`'��Q?��P�2����!�k4�+~;2�f�0L2v���uʰ�+��U��>Ɛ0�d^�!��e���o`X��<�H�$W��E����:��_�������t�U�]g�K��)NX�rI
�~��:���ޕ���c��V�$�
�N�SX�`��X[��*���C
+2�n�]����;���n �
d���n�������L7��:���n�� ��A�Q>_��
��d�C�P�T�R.�1�%�S��H멱d(��4}�
+e�Uj�H���yD&���L��Gi׾]���+�"�\�$œ%��Ƨ�#��oS:�~w ���T�f�B15n���]�]ߣ*����tpF�ɟ�t=e(�>��	o�'�TO@�
+%^���2i��z�zN�x�/���ͷ)
B/=�F:��2�z���3'C��
.
����0m��DSR�hl+
�"!Z�)s�y@�Á�A�/��eͷ)
B/�0��9��N�~9�99ʈ
쳘��
ex!
3�J�QFDF[ô(2�KZf��e������J4%���V{.J���j�I�e&(�(�4>I�L�mJ��K�z>-뮖�Ȩ�����b�,Z�]-�°Z^^}Y��>���l�[7_��p��^�t�d5p�Y�j���XG�Aq��N�t�
��Tw��;Mu�
��%���4՝.�NS���h�M�z�Κ�;W`v(oA��S��݈	��
�RWw��.�)�
��]i�vt�p�4�ߔ]�QvYK�)��m|.I��۔������gP��=�dsLh9��~*9�c%�F�����Nϡ�
e���YN�s�Q��D��P��bGq��H�HG�bSTvb<u�.�(��Q��
�ڡL����l���|��!
:�P���LURp��:�p���c Ъj��2� [...]
+�����$W��<�#Q�p��ǿ���?�~�o��-�˯���ѿO��ϋϿ�{]�?=8�e��7=(��+�M�3�+��HGO��˒�u�;��ÿ
d�=?�+�}]���8A�y����;�=1�o��Ģ��w���^�ץ�>�#�e�Ȣ����z%��bk�G�_ކq��M3����}醑�]���}�����}0g�M5�{�Ĭ�����D���T��煈�;��ɩTTe�Vv���[��C@�	�����%�䷑���}Y���vI
�
+6�����Cߨ�ⶑ:��խ�$u#��
+�S�lᰪIq�H��{�K�,]8lb�AY��A��ͣT
[n��!F�b�n.�|eK�@HC����<B��4g(��=��
eLn>J��*�̘�F�%Y.=LS��M
ag%�$�U��B
u@[���Բ:�����B �$��a+n�8�1���&(�E�]�)�?���֦z��1Z�č9FԐ=���[w�����������JM
$�Q�t?e^
�l�=���� �o\ ����T"$Qf�K���
�:�<{
+g��'
�%0T�i�-w	���]�����v'\�	}�Y�W�6�:�Z&D
c4s�c�'�X�çO��
���d��s�?y�467��(���l�r���Cbs�9���v�,fx(X
g�hq
Ȩ	��QҐ(�e"������� >��
{�o
��[$0��5
+U�PH�H�\Y�IS����ՙ�4
^1h�'θC[~6�)���1{ zB�%Y�
�/�W��+e'
 P��`B�#z]臻AJCY�Xِ@�7��9���t��v��D:)�n�8]�҇O6,�1x������4�Gq����:�z4��s���-
L��8��7�/�&�%���dDV�i��<��f���ʜ02Ȱ�{���MqD�~@�c�z��W�-:��D5��IS8
/
=�&�|�a;g��4r��9�<9�'S�L�}��W�&�s5h݆4_]�3H�Юj>�&+^���>8u�
ZBll�����Xyu�h�aeMq?Y��ٚI���|�x!�V��g��S����:�"�x�J�K�$���X�Њ�+�1i����O��N
+��<�` *�1�
endstream
endobj
42 0 obj
4213 
endobj
43 0 obj
<< /Filter /FlateDecode /Length 44 0 R /Subtype /Type1C >> 
stream
+H�L�{Tw�3I�AK�2���-(Zm�T��૥ p�Q ����HLR
.B�Xb�PԊ�E��"h�"[��6x��
]O�xz�����$u��̜���7��{��b"�X�a؄�i	骵�Ǚ�Ii~)��(�)���~��P�;~}#�&�7�����CEb
��0�M��y6*{6�`��s�Q��qI �
�K�8�a��M-7[�Ef���l��h0i-z�,WXȦ�if6Eo֛J5`��7�Z�b���EZSk�a���l���`)7��/)��⹬I��/�Mz
�_�Z��֧���V[�c���I�����D}�Y_�'��2��&<"�H/�'%IE��d�g"�(DĊNb�X:�.
'��#�^rF�I3������5]�n�a�`��>��
�/�@9pY�Pn	?��_�Ў��8G��$�:p���k�S�̆��+��)�h�VD+�J��fí�4Ya������zmga��>�s��6�����gh��tivm���Y [...]
g�eU
]	�遵��
4�HY��H��N�]�|�
��`��р#v�VU^�X�N����^8"��{����Ӥ
�X��*un�9�`���ӜB�Vy`����I�(H�o���5$�P�
���l�i0���h�Q�a�.��Z�dDRShj**D�M�w/B�X����r��8�e>*��
��[��FuK��F�XFp�γ0�q�6z�����;��"��s�L��+
���`	-pa�f
6�	=����}l\E��_���
?�3��Ɔ,
+-\�ơ�譿�k��'��&�<��n�S�V�.�(So�d/
��
�
>�SUz�
��'_i�(jD���{N|�Ŵ���R�^>�
�|�d%�KK�-���D4
�"v
M���}�_����hVDյS��J�ä[�ћ�P��O�
]`�oQS��'�LLA�m�Bv��W���	#�q��0����c
t[��S.
+0ۜ"}ρ��qY��W�V
K�r�v&�0P�$d� 9\
+�	?�?�ğJ�gJ��BS�R����݁�B�n��wr8�u
y
xwmG��y�b�%�ў5j�8�#:��~q�v
�n�~�-�p��50
�5'3�PN�(Q��Q�U�
c�I�'���/� 5
92(�uw��tg㕓��l�2$�{�k�vK�_���z*oYul��=,`�<�
���u��	��%��鵮a�
jh��������+ Q�)�[�|K�&:+uG|��1O[�����K
(MR�l�XZ�V�@���
�ݟ�\O�F9{�x�ɞ�o(�A�!2
dh�<]���o�;M���r�	�z������L�l��U4�M�9���Bባ����
�~[��	�Z���O>n�[�AuE��T�qCv�94M6�_g�C�铴›rU]"`
���_⏣p'�ؑSQq}d��9�3� ��`й�ϑ�T��_
�D?�ʘ��}U��*�
翭�
�A�ҫ��
b^N�cr��m�
+Jmk��@?7��B�� $�`�mt�Xdj>��S{Xؼ{��
+��+Gv�e�ܰ1Ⴁa<9ּ����2�QMei
��ON�
}
+8�Dw�M�5'4��y��O��}�7Ǝ�LM/4Q�AXi������?H��K�<�W<
!!ܾ�W������
 <(X	
endstream
endobj
44 0 obj
1672 
endobj
45 0 obj
<< /Filter /FlateDecode /Length 46 0 R /Subtype /Type1C >> 
stream
+H�T�[HSq
���c%m.a'w�]��dV�
+Qf�Դ��T.���V�ɶ4!S,A���*S��E)��VT;��f���/��
1_���
=������� &F� ��������xw��N߸�B�LE$QC�$!f
��8��&z`�8���f=x'��F�Plu�պ �j��x�j}�rW at J.�%�efd��̴F��(�G�
��(3�l�w�SZ[�8+�Rne��W��m	8
�����HE��~���w��U�_e��)�4f�̤3.&V]�h�f %�r�5�ٺz

��Wv��߈RM��.��Z����w�K�g�-���=6��:�.�6��;]~*|
+��[_V ���I�����e�y���v�l�ͳ��Y��Vj���Ա�ȋ�N���0��x�a
Y�
C��%Ͱ�����N�h���f�uЋ���C�����ˆ�2?��8����Cd�&�lנ �� vPԵb�0�Ď��	\���a�s
+.橃Y�"�t��������V�p,\��(�Β��0���&� �ۃ�n=�O�j7%b��b
%��5��
+� ï�<��{�,�Ņ|�i�ܖ
'J�6���\���΄��o��"ѽ�1��Ĉ��
��0=&C
+M����e���Xڡ��Wi���[�寕�8�&''ѩt!M�@���ի���E��UkR�ш�j�aT}�ʿ�
��l���<�Qi�xio�b�0 L�����`v�ݲ��=�pg �
����<1�K^G�j
����dȔ�u�>�.��
���tN>w��
4
m��s��_���O��$2
�W�  ��e
endstream
endobj
46 0 obj
800 
endobj
47 0 obj
<< /Type /Metadata /Subtype /XML /Length 936 >> 
stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d' bytes='936'?>
+
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
+ xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description about=''
+  xmlns='http://ns.adobe.com/pdf/1.3/'
+  xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+  <pdf:CreationDate>2003-03-27T08:56:20-05:00</pdf:CreationDate>
+  <pdf:ModDate>2003-03-27T08:56:22-06:00</pdf:ModDate>
+  <pdf:Creator>Adobe Illustrator 10.0</pdf:Creator>
+  <pdf:Producer>Adobe PDF library 5.00</pdf:Producer>
+ </rdf:Description>
+
+ <rdf:Description about=''
+  xmlns='http://ns.adobe.com/xap/1.0/'
+  xmlns:xap='http://ns.adobe.com/xap/1.0/'>
+  <xap:CreateDate>2003-03-27T08:56:20-05:00</xap:CreateDate>
+  <xap:ModifyDate>2003-03-27T08:56:22-06:00</xap:ModifyDate>
+  <xap:CreatorTool>Adobe Illustrator 10.0</xap:CreatorTool>
+  <xap:MetadataDate>2003-03-27T08:56:22-06:00</xap:MetadataDate>
+ </rdf:Description>
+
+</rdf:RDF>
+<?xpacket end='r'?>
endstream
endobj
xref
0 48 
0000000004 65535 f
+0000000016 00000 n
+0000000087 00000 n
+0000000151 00000 n
+0000000006 00001 f
+0000000318 00000 n
+0000000000 00001 f
+0000000691 00000 n
+0000000770 00000 n
+0000001172 00000 n
+0000001582 00000 n
+0000002780 00000 n
+0000009264 00000 n
+0000027737 00000 n
+0000027760 00000 n
+0000044231 00000 n
+0000044254 00000 n
+0000063787 00000 n
+0000063810 00000 n
+0000083498 00000 n
+0000083521 00000 n
+0000097749 00000 n
+0000097772 00000 n
+0000101490 00000 n
+0000101512 00000 n
+0000115581 00000 n
+0000115604 00000 n
+0000138133 00000 n
+0000138156 00000 n
+0000158963 00000 n
+0000158986 00000 n
+0000169468 00000 n
+0000169491 00000 n
+0000169519 00000 n
+0000169548 00000 n
+0000170762 00000 n
+0000170982 00000 n
+0000172203 00000 n
+0000172426 00000 n
+0000172518 00000 n
+0000174472 00000 n
+0000174494 00000 n
+0000178785 00000 n
+0000178807 00000 n
+0000180574 00000 n
+0000180596 00000 n
+0000181491 00000 n
+0000181512 00000 n
+trailer
<<
/Size 48
/Info 3 0 R 
/Root 1 0 R 
/ID[<bd63a2b892ece086f7bc09074fb768c6><8c2ae81d3a89b7e1aaf1a83323203ad6>]
>>
startxref
182532
%%EOF
\ No newline at end of file
diff --git a/documentation/figures/rna_elements.eps b/documentation/figures/rna_elements.eps
new file mode 100644
index 0000000..de8491b
--- /dev/null
+++ b/documentation/figures/rna_elements.eps
@@ -0,0 +1,6594 @@
+%!PS-Adobe-3.1 EPSF-3.0
+%%Title: rna_elements.eps
+%%Creator: Adobe Illustrator(R) X
+%%AI8_CreatorVersion: 10.0
%AI9_PrintingDataBegin
%%For: Sean R Eddy
+%%CreationDate: 3/27/03
+%%BoundingBox: 0 0 353 165
+%%HiResBoundingBox: 0 0 352.5372 164.2393
+%%CropBox: 0 0 352.5372 164.2393
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%ADOBeginClientInjection: DocumentHeader "AI10"
+%ADOEndClientInjection: DocumentHeader "AI10"
+%%Pages: 1
+%%DocumentNeededResources: 
+%%DocumentSuppliedResources: procset Adobe_AGM_Image (1.0 0)
+%%+ procset Adobe_CoolType_Utility_MAKEOCF (1.13 0)
+%%+ procset Adobe_CoolType_Core (2.12 0)
+%%+ procset Adobe_AGM_Core (2.0 0)
+%%+ procset Adobe_AGM_Utils (1.0 0)
+%%DocumentFonts: 
+%%DocumentNeededFonts: 
+%%DocumentNeededFeatures: 
+%%DocumentSuppliedFeatures: 
+%%DocumentCustomColors: 
+%%CMYKCustomColor: 
+%%RGBCustomColor: 
+%%EndComments
+%%BeginDefaults
+%%ViewingOrientation: 1 0 0 1
+%%EndDefaults
+%%BeginProlog
+%ADOBeginClientInjection: DocumentProlog Start "AI10"
+%ADOEndClientInjection: DocumentProlog Start "AI10"
+%%BeginResource: procset Adobe_AGM_Utils 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright (C) 2000-2000 Adobe Systems, Inc.  All Rights Reserved.
+systemdict /setpacking known
+{
+	currentpacking
+	true setpacking
+} if
+userdict /Adobe_AGM_Utils 60 dict dup begin put
+/bdf
+{
+	bind def
+} bind def
+/nd{
+	null def
+}bdf
+/xdf
+{
+	exch def
+}bdf
+/ldf 
+{
+	load def
+}bdf
+/ddf
+{
+	put
+}bdf	
+/xddf
+{
+	3 -1 roll put
+}bdf	
+/xpt
+{
+	exch put
+}bdf
+/ndf
+{ 
+	
+	exch dup where{
+		pop pop pop
+	}{
+		xdf
+	}ifelse
+}def
+/cdndf
+{
+	exch dup currentdict exch known{
+		pop pop
+	}{
+		exch def
+	}ifelse
+}def
+/bdict
+{
+	mark
+}bdf
+/edict
+{
+	counttomark 2 idiv dup dict begin {def} repeat pop currentdict end
+}def
+	
+/ps_level
+	/languagelevel where{
+		pop systemdict /languagelevel get exec
+	}{
+		1
+	}ifelse
+def
+/level2 
+	ps_level 2 ge
+def
+/level3 
+	ps_level 3 ge
+def
+/ps_version
+	{version cvr} stopped {
+		-1
+	}if
+def
+/makereadonlyarray
+{
+	/packedarray where{
+		pop packedarray
+	}{
+		array astore readonly
+	}ifelse
+}bdf
+/map_reserved_ink_name
+{
+	dup type /stringtype eq{
+		dup /Red eq{
+			pop (_Red_)
+		}{
+			dup /Green eq{
+				pop (_Green_)
+			}{
+				dup /Blue eq{
+					pop (_Blue_)
+				}{
+					dup /Cyan eq{
+						pop (_Cyan_)
+					}{
+						dup /Magenta eq{
+							pop (_Magenta_)
+						}{
+							dup /Yellow eq{
+								pop (_Yellow_)
+							}{
+								dup /Black eq{
+									pop (_Black_)
+								}{
+									dup () cvn eq{
+										pop (Process)
+									}if
+								}ifelse
+							}ifelse
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+	}if
+}bdf
+/AGMUTIL_GSTATE 22 dict def
+/get_gstate
+{
+	AGMUTIL_GSTATE begin
+	/AGMUTIL_GSTATE_clr_spc currentcolorspace def
+	/AGMUTIL_GSTATE_clr_indx 0 def
+	/AGMUTIL_GSTATE_clr_comps 12 array def
+	mark currentcolor counttomark
+		{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
+		/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def} repeat pop
+	/AGMUTIL_GSTATE_fnt rootfont def
+	/AGMUTIL_GSTATE_lw currentlinewidth def
+	/AGMUTIL_GSTATE_lc currentlinecap def
+	/AGMUTIL_GSTATE_lj currentlinejoin def
+	/AGMUTIL_GSTATE_ml currentmiterlimit def
+	currentdash /AGMUTIL_GSTATE_do xdf /AGMUTIL_GSTATE_da xdf
+	/AGMUTIL_GSTATE_sa currentstrokeadjust def
+	
+	/AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
+	/AGMUTIL_GSTATE_op currentoverprint def
+	/AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
+	/AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
+	currentcolortransfer cvlit /AGMUTIL_GSTATE_gy_xfer xdf cvlit /AGMUTIL_GSTATE_b_xfer xdf
+		cvlit /AGMUTIL_GSTATE_g_xfer xdf cvlit /AGMUTIL_GSTATE_r_xfer xdf
+	/AGMUTIL_GSTATE_ht currenthalftone def
+	/AGMUTIL_GSTATE_flt currentflat def
+	end
+}def
+/set_gstate
+{
+	AGMUTIL_GSTATE begin
+	AGMUTIL_GSTATE_clr_spc setcolorspace
+	AGMUTIL_GSTATE_clr_indx {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
+	/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def} repeat setcolor
+	AGMUTIL_GSTATE_fnt setfont
+	AGMUTIL_GSTATE_lw setlinewidth
+	AGMUTIL_GSTATE_lc setlinecap
+	AGMUTIL_GSTATE_lj setlinejoin
+	AGMUTIL_GSTATE_ml setmiterlimit
+	AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
+	AGMUTIL_GSTATE_sa setstrokeadjust
+	
+	AGMUTIL_GSTATE_clr_rnd setcolorrendering
+	AGMUTIL_GSTATE_op setoverprint
+	AGMUTIL_GSTATE_bg cvx setblackgeneration
+	AGMUTIL_GSTATE_ucr cvx setundercolorremoval
+	AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
+		AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
+	
+	AGMUTIL_GSTATE_ht /HalftoneType get dup 9 eq exch 100 eq or
+		{
+		currenthalftone /HalftoneType get AGMUTIL_GSTATE_ht /HalftoneType get ne
+			{
+			  mark AGMUTIL_GSTATE_ht {sethalftone} stopped cleartomark
+			} if
+		}{
+		AGMUTIL_GSTATE_ht sethalftone
+		} ifelse
+	
+	AGMUTIL_GSTATE_flt setflat
+	end
+}def
+/AGMUTIL_str256 256 string def
+/AGMUTIL_src256 256 string def
+/AGMUTIL_dst64 64 string def
+/AGMUTIL_srcLen nd
+/AGMUTIL_ndx nd
+/rdline
+{
+	currentfile AGMUTIL_str256 readline pop
+} bdf
+/rdcmntline
+{
+	currentfile AGMUTIL_str256 readline pop
+	(%) anchorsearch {pop} if
+} bdf
+/filter_cmyk
+{	
+	dup type /filetype ne{
+		0 () /SubFileDecode filter
+	}if
+	[
+	exch
+	{
+		AGMUTIL_src256 readstring pop
+		dup length /AGMUTIL_srcLen exch def
+		/AGMUTIL_ndx 0 def
+		
+		AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
+			1 index exch get
+			AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
+			/AGMUTIL_ndx AGMUTIL_ndx 1 add def
+		}for
+		pop
+		AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
+	}
+	bind
+	/exec cvx
+	] cvx
+} bdf
+/AGMUTIL_imagefile nd
+/AGMUTIL_imbuf nd
+/read_image_file
+{
+	AGMUTIL_imagefile 0 setfileposition
+	dup /DataSource {AGMUTIL_imagefile AGMUTIL_imbuf readstring pop} put
+	exch
+	load exec
+}def
+/write_image_file
+{
+	begin
+	{ (AGMUTIL_imagefile) (w+) file } stopped{
+		false
+	}{
+		Adobe_AGM_Utils/AGMUTIL_imagefile xddf 
+		Adobe_AGM_Utils/AGMUTIL_imbuf Width BitsPerComponent mul 7 add 8 idiv string ddf
+		1 1 Height { 
+			pop
+			DataSource dup type /filetype eq{
+				AGMUTIL_imbuf readstring pop
+			}{
+				exec
+			} ifelse
+			AGMUTIL_imagefile exch writestring
+		}for
+		true
+	}ifelse
+	end
+}def
+/close_image_file
+{
+	AGMUTIL_imagefile closefile (AGMUTIL_imagefile) deletefile
+}def
+/consumeimagedata
+{
+	begin
+	currentdict /MultipleDataSources known not
+		{/MultipleDataSources false def} if
+	MultipleDataSources
+		{
+		1 dict begin
+		/flushbuffer Width cvi string def
+		1 1 Height cvi
+			{
+			pop
+			0 1 DataSource length 1 sub
+				{
+				DataSource exch get
+				dup type dup 
+				/filetype eq
+					{
+					exch flushbuffer readstring pop pop
+					}if
+				/arraytype eq
+					{
+					exec pop
+					}if
+				}for
+			}for
+		end
+		}
+		{
+		/DataSource load type dup 
+		/filetype eq
+			{
+			1 dict begin
+			/flushbuffer Width Decode length 2 div mul cvi string def
+			1 1 Height { pop DataSource flushbuffer readstring pop pop} for
+			end
+			}if
+		/arraytype eq
+			{
+			1 1 Height { pop DataSource pop } for
+			}if
+		}ifelse
+	end
+}bdf
+/addprocs
+{
+     2{/exec load}repeat
+     3 1 roll
+     [ 5 1 roll ] bind cvx
+}def
+/modify_halftone_xfer
+{
+	currenthalftone dup length dict copy begin
+    currentdict 2 index known{
+    	1 index load dup length dict copy begin
+		currentdict/TransferFunction known{
+			/TransferFunction load
+		}{
+			currenttransfer
+		}ifelse
+	    addprocs /TransferFunction xdf 
+	    currentdict end def
+		currentdict end sethalftone
+	}{ 
+		currentdict/TransferFunction known{
+			/TransferFunction load 
+		}{
+			currenttransfer
+		}ifelse
+		addprocs /TransferFunction xdf
+		currentdict end sethalftone		
+		pop
+	}ifelse
+}def
+/doc_setup{
+	Adobe_AGM_Utils begin
+}bdf
+/doc_trailer{
+	currentdict Adobe_AGM_Utils eq{
+		end
+	}if
+}bdf
+systemdict /setpacking known
+{
+	setpacking
+} if
+%%EndResource
+%%BeginResource: procset Adobe_AGM_Core 2.0 0
+%%Version: 2.0 0
+%%Copyright: Copyright (C) 1997-1999 Adobe Systems, Inc.  All Rights Reserved.
+systemdict /setpacking known
+{
+	currentpacking
+	true setpacking
+} if
+userdict /Adobe_AGM_Core 205 dict dup begin put
+/nd{
+	null def
+}bind def
+/Adobe_AGM_Core_Id /Adobe_AGM_Core_2.0_0 def
+/AGMCORE_str256 256 string def
+/AGMCORE_src256 256 string def
+/AGMCORE_save nd
+/AGMCORE_graphicsave nd
+/AGMCORE_c 0 def
+/AGMCORE_m 0 def
+/AGMCORE_y 0 def
+/AGMCORE_k 0 def
+/AGMCORE_cmykbuf 4 array def
+/AGMCORE_screen [currentscreen] cvx def
+/AGMCORE_tmp 0 def
+/AGMCORE_&setgray nd
+/AGMCORE_&setcolor nd
+/AGMCORE_&setcolorspace nd
+/AGMCORE_&setcmykcolor nd
+/AGMCORE_cyan_plate nd
+/AGMCORE_magenta_plate nd
+/AGMCORE_yellow_plate nd
+/AGMCORE_black_plate nd
+/AGMCORE_plate_ndx nd
+/AGMCORE_get_ink_data nd
+/AGMCORE_is_cmyk_sep nd
+/AGMCORE_host_sep nd
+/AGMCORE_will_host_sep nd
+/AGMCORE_avoid_L2_sep_space nd
+/AGMCORE_distilling nd
+/AGMCORE_composite_job nd
+/AGMCORE_producing_seps nd
+/AGMCORE_ps_level -1 def
+/AGMCORE_ps_version -1 def
+/AGMCORE_environ_ok nd
+/AGMCORE_CSA_cache 0 dict def
+/AGMCORE_CSD_cache 0 dict def
+/AGMCORE_pattern_cache 0 dict def
+/AGMCORE_currentoverprint false def
+/AGMCORE_deltaX nd
+/AGMCORE_deltaY nd
+/AGMCORE_name nd
+/AGMCORE_sep_special nd
+/AGMCORE_err_strings 4 dict def
+/AGMCORE_cur_err nd
+/AGMCORE_ovp nd
+/AGMCORE_current_spot_alias false def
+/AGMCORE_inverting false def
+/AGMCORE_feature_dictCount nd
+/AGMCORE_feature_opCount nd
+/AGMCORE_feature_ctm nd
+/AGMCORE_ConvertToProcess false def
+/AGMCORE_Default_CTM matrix def
+/knockout_unitsq nd
+/AGMCORE_CRD_cache where{
+	pop
+}{
+	/AGMCORE_CRD_cache 0 dict def
+}ifelse
+/AGMCORE_key_known
+{
+	where{
+		/Adobe_AGM_Core_Id known
+	}{
+		false
+	}ifelse
+}ndf
+/flushinput
+{
+	save
+	/CompareBuffer 3 -1 roll def
+	/readbuffer 256 string def
+	mark
+	{
+	currentfile readbuffer {readline} stopped
+		{cleartomark mark}
+		{
+		not
+			{pop exit}
+		if
+		CompareBuffer eq
+			{exit}
+		if
+		}ifelse
+	}loop
+	cleartomark
+	restore
+}bdf
+/getspotfunction
+{
+	AGMCORE_screen exch pop exch pop
+	dup type /dicttype eq{
+		dup /HalftoneType get 1 eq{
+			/SpotFunction get
+		}{
+			dup /HalftoneType get 2 eq{
+				/GraySpotFunction get
+			}{ 
+				pop
+				{
+					abs exch abs 2 copy add 1 gt{
+						1 sub dup mul exch 1 sub dup mul add 1 sub
+					}{
+						dup mul exch dup mul add 1 exch sub
+					}ifelse
+				}bind
+			}ifelse
+		}ifelse
+	}if
+} def
+/clp_npth
+{
+	clip newpath
+} def
+/eoclp_npth
+{
+	eoclip newpath
+} def
+/stkpath_clp_npth
+{
+	strokepath clip newpath
+} def
+/stk_n_clp_npth
+{
+	gsave stroke grestore clip newpath
+} def
+/npth_clp
+{
+	newpath clip
+} def
+/graphic_setup
+{
+	/AGMCORE_graphicsave save def
+	concat
+	0 setgray
+	0 setlinecap
+	0 setlinejoin
+	1 setlinewidth
+	[] 0 setdash
+	10 setmiterlimit
+	newpath
+	false setoverprint
+	false setstrokeadjust
+	Adobe_AGM_Core/spot_alias get exec
+	/Adobe_AGM_Image where {
+		pop
+		Adobe_AGM_Image/spot_alias 2 copy known{
+			get exec
+		}{
+			pop pop
+		}ifelse
+	} if
+	100 dict begin
+	/showpage {} def
+	mark
+} def
+/graphic_cleanup
+{
+	cleartomark
+	end
+	AGMCORE_graphicsave restore
+} def
+/compose_error_msg
+{
+	grestoreall initgraphics	
+	/Helvetica findfont 10 scalefont setfont
+	
+	/AGMCORE_deltaY 100 def
+	/AGMCORE_deltaX 310 def
+			
+	clippath pathbbox newpath pop pop 36 add exch 36 add exch moveto
+	0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
+	0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
+	0 AGMCORE_&setgray
+	gsave 1 AGMCORE_&setgray fill grestore 
+	1 setlinewidth gsave stroke grestore
+		
+	currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
+	
+	/AGMCORE_deltaY 12 def
+	/AGMCORE_tmp 0 def
+	AGMCORE_err_strings exch get
+		{
+		dup 32 eq
+			{
+			pop
+			AGMCORE_str256 0 AGMCORE_tmp getinterval
+			stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
+				{
+				currentpoint AGMCORE_deltaY sub exch pop
+				clippath pathbbox pop pop pop 44 add exch moveto
+				} if
+			AGMCORE_str256 0 AGMCORE_tmp getinterval show ( ) show
+			
+			0 1 AGMCORE_str256 length 1 sub
+				{
+				AGMCORE_str256 exch 0 put
+				}for
+			/AGMCORE_tmp 0 def
+			}
+			{
+				AGMCORE_str256 exch AGMCORE_tmp exch put
+				/AGMCORE_tmp AGMCORE_tmp 1 add def
+			} ifelse
+		} forall
+} bdf
+/doc_setup{
+	Adobe_AGM_Core begin
+	
+	/AGMCORE_will_host_separate xdf
+	/AGMCORE_ps_version xdf
+	/AGMCORE_ps_level xdf
+	
+	errordict /AGM_handleerror known not{
+		errordict /AGM_handleerror errordict /handleerror get put
+		errordict /handleerror {
+			Adobe_AGM_Core begin
+			$error /newerror get AGMCORE_cur_err null ne and{
+				$error /newerror false put
+				AGMCORE_cur_err compose_error_msg
+			}if
+			$error /newerror true put
+			end
+			errordict /AGM_handleerror get exec
+			} bind put
+		}if
+		
+	/AGMCORE_environ_ok 
+		ps_level AGMCORE_ps_level ge
+		ps_version AGMCORE_ps_version ge and 
+		AGMCORE_ps_level -1 eq or
+	def
+	
+	AGMCORE_environ_ok not
+		{/AGMCORE_cur_err /AGMCORE_bad_environ def} if
+	
+	/AGMCORE_&setgray systemdict/setgray get def
+	level2{
+		/AGMCORE_&setcolor systemdict/setcolor get def
+		/AGMCORE_&setcolorspace systemdict/setcolorspace get def
+	}if
+	/AGMCORE_distilling
+		/product where{
+			pop systemdict/setdistillerparams known product (Adobe PostScript Parser) ne and
+		}{
+			false
+		}ifelse
+	def
+	/AGMCORE_in_rip_sep
+		/AGMCORE_in_rip_sep where{
+			pop AGMCORE_in_rip_sep
+		}{
+			AGMCORE_distilling 
+			{
+				false
+			}{
+				userdict/Adobe_AGM_OnHost_Seps known{
+					false
+				}{
+					level2{
+						currentpagedevice/Separations 2 copy known{
+							get
+						}{
+							pop pop false
+						}ifelse
+					}{
+						false
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+	def
+	level2 not{
+		/xput{
+			dup load dup length exch maxlength eq{
+				dup dup load dup
+				length dup 0 eq {pop 1} if 2 mul dict copy def
+			}if
+			load begin
+				def
+ 			end
+		}def
+	}{
+		/xput{
+			load 3 1 roll put
+		}def
+	}ifelse
+	/AGMCORE_GSTATE AGMCORE_key_known not{
+		/AGMCORE_GSTATE 21 dict def
+		/AGMCORE_gstack 32 array def
+		/AGMCORE_gstackptr 0 def
+		/AGMCORE_gstacksaveptr 0 def
+		/AGMCORE_gstackframekeys 8 def
+											
+		/AGMCORE_&gsave /gsave ldf
+		/AGMCORE_&grestore /grestore ldf
+		/AGMCORE_&grestoreall /grestoreall ldf
+		/AGMCORE_&save /save ldf
+		/AGMCORE_gdictcopy {
+			begin
+			{ def } forall
+			end
+		}def
+		/AGMCORE_gput {
+			AGMCORE_gstack AGMCORE_gstackptr get
+			3 1 roll
+			put
+		}def
+		/AGMCORE_gget {
+			AGMCORE_gstack AGMCORE_gstackptr get
+			exch
+			get
+		}def
+		/gsave {
+			AGMCORE_&gsave
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gstackptr 1 add
+			dup 32 ge {limitcheck} if
+			Adobe_AGM_Core exch
+			/AGMCORE_gstackptr exch put
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gdictcopy
+		}def
+		/grestore {
+			AGMCORE_&grestore
+			AGMCORE_gstackptr 1 sub
+			dup AGMCORE_gstacksaveptr lt {1 add} if
+			Adobe_AGM_Core exch
+			/AGMCORE_gstackptr exch put
+		}def
+		/grestoreall {
+			AGMCORE_&grestoreall
+			Adobe_AGM_Core
+			/AGMCORE_gstackptr AGMCORE_gstacksaveptr put 
+		}def
+		/save {
+			AGMCORE_&save
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gstackptr 1 add
+			dup 32 ge {limitcheck} if
+			Adobe_AGM_Core begin
+				/AGMCORE_gstackptr exch def
+				/AGMCORE_gstacksaveptr AGMCORE_gstackptr def
+			end
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gdictcopy
+		}def
+		0 1 AGMCORE_gstack length 1 sub {
+				AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
+		} for
+	}if
+	/currentcmykcolor [0 0 0 0] AGMCORE_gput
+	/currentstrokeadjust false AGMCORE_gput
+	/currentcolorspace [/DeviceGray] AGMCORE_gput
+	/sep_tint 0 AGMCORE_gput
+	/sep_colorspace_dict null AGMCORE_gput
+	/indexed_colorspace_dict null AGMCORE_gput
+	/currentcolor_intent () AGMCORE_gput
+	/customcolor_tint 1 AGMCORE_gput
+	end
+}def
+/page_setup
+{
+	/setcmykcolor where{
+		pop
+		Adobe_AGM_Core/AGMCORE_&setcmykcolor /setcmykcolor load put
+	}if
+	Adobe_AGM_Core begin
+	/setcmykcolor
+	{
+		4 copy AGMCORE_cmykbuf astore /currentcmykcolor exch AGMCORE_gput
+		1 sub 4 1 roll
+		3 {
+			3 index add neg dup 0 lt {
+				pop 0
+			} if
+			3 1 roll
+		} repeat
+		setrgbcolor pop
+	}ndf
+	/currentcmykcolor
+	{
+		/currentcmykcolor AGMCORE_gget aload pop
+	}ndf
+	/setoverprint
+	{
+		pop
+	}ndf
+	/currentoverprint
+	{
+		false
+	}ndf
+	/AGMCORE_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def
+	/AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
+	/AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
+	/AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
+	/AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
+	/AGMCORE_plate_ndx 
+		AGMCORE_cyan_plate{ 
+			0
+		}{
+			AGMCORE_magenta_plate{
+				1
+			}{
+				AGMCORE_yellow_plate{
+					2
+				}{
+					AGMCORE_black_plate{
+						3
+					}{
+						4
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+		def
+	/AGMCORE_composite_job
+		AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
+	
+	/AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
+	
+	/AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
+	
+	/AGM_preserve_spots 
+		/AGM_preserve_spots where{
+			pop AGM_preserve_spots
+		}{
+			AGMCORE_distilling AGMCORE_producing_seps or
+		}ifelse
+	def
+	/AGM_is_distiller_preserving_spotimages
+	{
+		currentdistillerparams/PreserveOverprintSettings known
+		{
+			currentdistillerparams/PreserveOverprintSettings get
+				{
+					currentdistillerparams/ColorConversionStrategy known
+					{
+						currentdistillerparams/ColorConversionStrategy get
+						/LeaveColorUnchanged eq
+					}{
+						true
+					}ifelse
+				}{
+					false
+				}ifelse
+		}{
+			false
+		}ifelse
+	}def
+	/convert_spot_to_process where {pop}{
+		/convert_spot_to_process
+		{
+			dup dup (None) eq exch (All) eq or
+				{
+				pop false
+				}{
+				AGMCORE_host_sep
+				{ 
+					gsave
+					1 0 0 0 setcmykcolor currentgray 1 exch sub
+					0 1 0 0 setcmykcolor currentgray 1 exch sub
+					0 0 1 0 setcmykcolor currentgray 1 exch sub
+					0 0 0 1 setcmykcolor currentgray 1 exch sub
+					add add add 0 eq
+					{
+						pop false
+					}{
+						false setoverprint
+						1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor
+						currentgray 0 eq
+					}ifelse
+					grestore
+				}{
+					AGMCORE_distilling
+					{
+						pop AGM_is_distiller_preserving_spotimages not
+					}{
+						Adobe_AGM_Core/AGMCORE_name xddf
+						false
+						currentpagedevice/OverrideSeparations known
+							{
+							currentpagedevice/OverrideSeparations get
+								{
+								/HqnSpots /ProcSet resourcestatus
+									{
+									pop pop pop true
+									}if
+								}if
+							}if					
+							{
+							AGMCORE_name /HqnSpots /ProcSet findresource /TestSpot get exec not
+							}{
+							gsave
+							[/Separation AGMCORE_name /DeviceGray {}]setcolorspace
+							false
+							currentpagedevice/SeparationColorNames 2 copy known
+							{
+								get
+								{ AGMCORE_name eq or}forall
+							not
+							}{
+								pop pop pop true
+							}ifelse
+							grestore
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+		}def
+	}ifelse
+	/convert_to_process where {pop}{
+		/convert_to_process
+		{
+			dup length 0 eq
+				{
+				pop false
+				}{
+				AGMCORE_host_sep
+				{ 
+				true exch
+					{
+					convert_spot_to_process and
+					}
+				forall
+				}{
+				false exch
+					{
+					convert_spot_to_process or
+					}
+				forall
+				}ifelse
+			}ifelse
+		}def
+	}ifelse	
+	AGMCORE_host_sep AGMCORE_will_host_separate not and {
+		/AGMCORE_cur_err /AGMCORE_color_space_onhost_seps def
+		AGMCORE_color_space_onhost_seps
+	}if
+	/AGMCORE_avoid_L2_sep_space  
+		version cvr 2012 lt 
+		level2 and 
+		AGMCORE_producing_seps not and
+	def
+	/AGMCORE_is_cmyk_sep
+		AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
+	def
+	/AGM_avoid_0_cmyk where{
+		pop AGM_avoid_0_cmyk
+	}{
+		AGM_preserve_spots 
+		userdict/Adobe_AGM_OnHost_Seps known 
+		userdict/Adobe_AGM_InRip_Seps known or
+		not and
+	}ifelse
+	{
+		/setcmykcolor[
+			{
+				4 copy add add add 0 eq currentoverprint and{
+					pop 0.0005
+				}if
+			}/exec cvx
+			/AGMCORE_&setcmykcolor load dup type/operatortype ne{
+				/exec cvx
+			}if
+		]cvx def
+	}if
+	AGMCORE_host_sep{
+		/AGMCORE_get_ink_data
+			AGMCORE_cyan_plate{
+				{pop pop pop}
+			}{
+			  	AGMCORE_magenta_plate{
+			  		{4 3 roll pop pop pop}
+			  	}{
+			  		AGMCORE_yellow_plate{
+			  			{4 2 roll pop pop pop}
+			  		}{
+			  			{4 1 roll pop pop pop}
+			  		}ifelse
+			  	}ifelse
+			}ifelse
+		def
+		/clip AGMCORE_key_known not{
+			Adobe_AGM_Core/AGMCORE_&clip /clip load put
+			/clip
+			{
+				current_spot_alias{
+					currentdict/InksUsed known{
+						[
+						InksUsed{
+							dup map_alias{
+								/Name get exch pop
+							}if
+						}forall
+						]
+						/InksUsed xdf
+					}if
+				}if
+				AGMCORE_&clip
+			}def
+		}if
+		/eoclip AGMCORE_key_known not{
+			Adobe_AGM_Core/AGMCORE_&eoclip /eoclip load put
+			/eoclip
+			{
+				current_spot_alias{
+					currentdict/InksUsed known{
+						[
+						InksUsed{
+							dup map_alias{
+								/Name get exch pop
+							}if
+						}forall
+						]
+						/InksUsed xdf
+					}if
+				}if
+				AGMCORE_&eoclip
+			}def
+		}if
+	}if
+	AGMCORE_in_rip_sep{
+		/setcustomcolor
+		{
+			exch aload pop
+			dup 7 1 roll inRip_spot_has_ink not	{ 
+				4 {4 index mul 4 1 roll}
+				repeat
+				/DeviceCMYK setcolorspace
+				6 -2 roll pop pop
+			}{ 
+				Adobe_AGM_Core begin
+					/AGMCORE_k xdf /AGMCORE_y xdf /AGMCORE_m xdf /AGMCORE_c xdf
+				end
+				[/Separation 4 -1 roll /DeviceCMYK
+				{dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
+				]
+				setcolorspace
+			}ifelse
+			setcolor
+		}ndf
+		/setseparationgray
+		{
+			[/Separation (All) /DeviceGray {}] setcolorspace_opt
+			1 exch sub setcolor
+		}ndf
+	}{
+		/setseparationgray
+		{
+			AGMCORE_&setgray
+		}ndf
+	}ifelse
+	/findcmykcustomcolor
+	{
+		5 makereadonlyarray
+	}ndf
+	/setcustomcolor
+	{
+		exch aload pop pop
+		4 {4 index mul 4 1 roll} repeat
+		setcmykcolor pop
+	}ndf
+	
+	/has_color
+		/colorimage where{
+			AGMCORE_producing_seps{
+				pop true
+			}{
+				systemdict eq
+			}ifelse
+		}{
+			false
+		}ifelse
+	def
+	
+	/map_index
+	{
+		1 index mul exch getinterval {255 div} forall
+	}def
+	
+	level2{
+		/mo /moveto ldf
+		/li /lineto ldf
+		/cv /curveto ldf
+		/knockout_unitsq
+		{
+			1 setgray
+			0 0 1 1 rectfill
+		}def
+		/level2ScreenFreq{
+			begin
+			60
+			HalftoneType 1 eq{
+				pop Frequency
+			}if
+			HalftoneType 2 eq{
+				pop GrayFrequency
+			}if
+			HalftoneType 5 eq{
+				pop Default level2ScreenFreq
+			}if
+			 end
+		}def
+		/currentScreenFreq{
+			currenthalftone level2ScreenFreq
+		}def
+		level2 /setcolorspace AGMCORE_key_known not and{
+		
+			/AGMCORE_&&&setcolorspace /setcolorspace ldf
+			/AGMCORE_ReplaceMappedColor
+			{
+				dup type dup /arraytype eq exch /packedarraytype eq or
+				{
+					dup 0 get dup /Separation eq
+					{
+						pop
+						dup length array copy
+						dup dup 1 get
+						current_spot_alias
+						{
+							dup map_alias
+							{
+								begin
+								/sep_colorspace_dict currentdict AGMCORE_gput
+								pop pop	pop
+									
+								[ 
+									/Separation Name 
+									CSA map_csa
+									dup /MappedCSA xdf 
+									/sep_colorspace_proc load
+								]
+								dup Name
+								end
+							}if
+						}if
+						map_reserved_ink_name 1 exch put
+					}{
+						/DeviceN eq 
+						{
+							dup length array copy
+							dup dup 1 get [ 
+								exch {
+									current_spot_alias{
+										dup map_alias{
+											/Name get exch pop
+										}if
+									}if
+									map_reserved_ink_name
+								} forall 
+							] 1 exch put
+						}if
+					}ifelse
+				}if
+			}def
+			/setcolorspace
+			{
+				dup type dup /arraytype eq exch /packedarraytype eq or
+				{
+					dup 0 get /Indexed eq
+					{
+						AGMCORE_distilling
+						{
+							/PhotoshopDuotoneList where
+							{
+								pop false
+							}{
+								true
+							}ifelse
+						}{
+							true
+						}ifelse
+						{
+							aload pop 3 -1 roll
+							AGMCORE_ReplaceMappedColor
+							3 1 roll 4 array astore
+						}if
+					}{
+						AGMCORE_ReplaceMappedColor
+					}ifelse
+				}if
+				AGMCORE_&&&setcolorspace
+			}def
+		}if	
+	}{
+		
+		/adj
+		{
+			currentstrokeadjust{
+				transform
+				0.25 sub round 0.25 add exch
+				0.25 sub round 0.25 add exch
+				itransform
+			}if
+		}def
+		/mo{
+			adj moveto
+		}def
+		/li{
+			adj lineto
+		}def
+		/cv{
+			6 2 roll adj
+			6 2 roll adj
+			6 2 roll adj curveto
+		}def
+		/knockout_unitsq
+		{
+			1 setgray
+			8 8 1 [8 0 0 8 0 0] {<ffffffffffffffff>} image
+		}def
+		/currentstrokeadjust{
+			/currentstrokeadjust AGMCORE_gget
+		}def
+		/setstrokeadjust{
+			/currentstrokeadjust exch AGMCORE_gput
+		}def
+		/currentScreenFreq{
+			currentscreen pop pop
+		}def
+		/setcolorspace
+		{
+			/currentcolorspace exch AGMCORE_gput
+		} def
+		
+		/currentcolorspace
+		{
+			/currentcolorspace AGMCORE_gget
+		} def
+		
+		/n_color_components
+		{
+			dup type /arraytype eq{
+				0 get
+			}if
+			dup /DeviceGray eq{
+				pop 1
+			}{
+				/DeviceCMYK eq{
+					4
+				}{
+					3
+				}ifelse
+			}ifelse
+		} def
+		
+		/setcolor_devicecolor
+		{
+			dup type /arraytype eq{
+				0 get
+			}if
+			dup /DeviceGray eq{
+				pop setgray
+			}{
+				/DeviceCMYK eq{
+					setcmykcolor
+				}{
+					setrgbcolor
+				}ifelse
+			}ifelse
+		}def
+	
+		/setcolor
+		{
+			currentcolorspace 0 get
+			dup /DeviceGray ne{
+				dup /DeviceCMYK ne{
+					dup /DeviceRGB ne{
+						dup /Separation eq{
+							pop
+							currentcolorspace 3 get exec
+							currentcolorspace 2 get
+						}{
+							dup /Indexed eq{
+								pop
+								currentcolorspace 3 get dup type /stringtype eq{
+									currentcolorspace 1 get n_color_components
+									3 -1 roll map_index
+								}{
+									exec
+								}ifelse
+								currentcolorspace 1 get
+							}{
+								/AGMCORE_cur_err /AGMCORE_invalid_color_space def
+								AGMCORE_invalid_color_space
+							}ifelse
+						}ifelse
+					}if
+				}if
+			}if
+			setcolor_devicecolor
+		} def
+	}ifelse
+	
+	/sop /setoverprint ldf
+	/lw /setlinewidth ldf
+	/lc /setlinecap ldf
+	/lj /setlinejoin ldf
+	/ml /setmiterlimit ldf
+	/dsh /setdash ldf
+	/sadj /setstrokeadjust ldf
+	/gry /setgray ldf
+	/rgb /setrgbcolor ldf
+	/cmyk /setcmykcolor ldf
+	/sep /setsepcolor ldf
+	/idx /setindexedcolor ldf
+	/colr /setcolor ldf
+	/csacrd /set_csa_crd ldf
+	/sepcs /setsepcolorspace ldf
+	/idxcs /setindexedcolorspace ldf
+	/cp /closepath ldf
+	/clp /clp_npth ldf
+	/eclp /eoclp_npth ldf
+	/spclp /stkpath_clp_npth ldf
+	/f /fill ldf
+	/ef /eofill ldf
+	/s /stroke ldf
+	/sclp /stk_n_clp_npth ldf
+	/nclp /npth_clp ldf
+	/gset /graphic_setup ldf
+	/gcln /graphic_cleanup ldf
+	
+	currentdict{
+		dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and {
+			bind
+		}if
+		def
+	}forall
+}def
+/page_trailer
+{
+	end
+}def
+/doc_trailer{
+}def
+systemdict /findcolorrendering known{
+	/findcolorrendering systemdict /findcolorrendering get def
+}if
+systemdict /setcolorrendering known{
+	/setcolorrendering systemdict /setcolorrendering get def
+}if
+/test_cmyk_color_plate
+{
+	gsave
+	setcmykcolor currentgray 1 ne
+	grestore
+}def
+/inRip_spot_has_ink
+{
+	dup Adobe_AGM_Core/AGMCORE_name xddf
+	convert_spot_to_process not
+}def
+/current_ink
+{
+	dup length 0 eq{
+		pop true
+	}{
+		Adobe_AGM_Core/ink_result false put
+		{
+			dup /ProcessCyan eq{
+				AGMCORE_cyan_plate ink_result or Adobe_AGM_Core/ink_result xddf
+			}{
+				dup /ProcessMagenta eq{
+					AGMCORE_magenta_plate ink_result or Adobe_AGM_Core/ink_result xddf
+				}{
+					dup /ProcessYellow eq{
+						AGMCORE_yellow_plate ink_result or Adobe_AGM_Core/ink_result xddf
+					}{
+						dup /ProcessBlack eq{
+							AGMCORE_black_plate ink_result or Adobe_AGM_Core/ink_result xddf
+						}{
+							dup /sep_colorspace_dict AGMCORE_gget dup null eq{
+								pop false ink_result or Adobe_AGM_Core/ink_result xddf
+							}{
+								/Name get eq{
+									1 setsepcolor
+									currentgray 1 ne ink_result or Adobe_AGM_Core/ink_result xddf
+								}{
+									false ink_result or Adobe_AGM_Core/ink_result xddf
+								}ifelse
+							}ifelse
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+			pop 
+		} forall
+		ink_result
+	}ifelse
+}def
+/map255_to_range
+{
+	1 index sub
+	3 -1 roll 255 div mul add
+}def
+/set_csa_crd
+{
+	/sep_colorspace_dict null AGMCORE_gput
+	begin
+		CSA map_csa setcolorspace_opt
+		set_crd
+	end
+}
+def
+/setsepcolor
+{ 
+	
+	/sep_colorspace_dict AGMCORE_gget begin
+		dup /sep_tint exch AGMCORE_gput
+		TintProc
+	end
+} def
+/sep_colorspace_proc
+{
+	Adobe_AGM_Core/AGMCORE_tmp xddf
+	/sep_colorspace_dict AGMCORE_gget begin
+	currentdict/Components known{
+		Components aload pop 
+		TintMethod/Lab eq{
+			2 {AGMCORE_tmp mul NComponents 1 roll} repeat
+			LMax sub AGMCORE_tmp mul LMax add  NComponents 1 roll
+		}{
+			TintMethod/Subtractive eq{
+				NComponents{
+					AGMCORE_tmp mul NComponents 1 roll
+				}repeat
+			}{
+				NComponents{
+					1 sub AGMCORE_tmp mul 1 add  NComponents 1 roll
+				} repeat
+			}ifelse
+		}ifelse
+	}{
+		ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
+		aload pop
+	}ifelse
+	end
+} def
+/sep_colorspace_gray_proc
+{
+	Adobe_AGM_Core/AGMCORE_tmp xddf
+	/sep_colorspace_dict AGMCORE_gget begin
+	GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
+	end
+} def
+/sep_proc_name
+{
+	dup 0 get 
+	dup /DeviceRGB eq exch /DeviceCMYK eq or level2 not and has_color not and{
+		pop [/DeviceGray]
+		/sep_colorspace_gray_proc
+	}{
+		/sep_colorspace_proc
+	}ifelse
+} def
+/setsepcolorspace
+{ 
+	
+	current_spot_alias{
+		dup begin
+			Name map_alias{
+				exch pop
+			}if
+		end
+	}if
+	dup /sep_colorspace_dict exch AGMCORE_gput
+	begin
+	/MappedCSA CSA map_csa def
+	Adobe_AGM_Core/AGMCORE_sep_special Name dup () eq exch (All) eq or ddf
+	
+	AGMCORE_avoid_L2_sep_space{
+		[/Indexed MappedCSA sep_proc_name 255 exch 
+			{ 255 div } /exec cvx 3 -1 roll [ 4 1 roll load /exec cvx ] cvx 
+		] setcolorspace_opt
+		/TintProc {
+			255 mul round cvi setcolor
+		}bdf
+	}{
+		MappedCSA 0 get /DeviceCMYK eq 
+		currentdict/Components known and 
+		AGMCORE_sep_special not and{
+			/TintProc [
+				Components aload pop Name findcmykcustomcolor 
+				/exch cvx /setcustomcolor cvx
+			] cvx bdf
+		}{
+ 			AGMCORE_host_sep Name (All) eq and{
+ 				/TintProc { 
+					1 exch sub setseparationgray 
+				}bdf
+ 			}{
+				AGMCORE_in_rip_sep MappedCSA 0 get /DeviceCMYK eq and 
+				AGMCORE_host_sep or
+				Name () eq and{
+					/TintProc [
+						MappedCSA sep_proc_name exch 0 get /DeviceCMYK eq{
+							cvx /setcmykcolor cvx
+						}{
+							cvx /setgray cvx
+						}ifelse
+					] cvx bdf
+				}{
+					AGMCORE_producing_seps MappedCSA 0 get dup /DeviceCMYK eq exch /DeviceGray eq or and AGMCORE_sep_special not and{
+	 					/TintProc [
+							/dup cvx
+							MappedCSA sep_proc_name cvx exch
+							0 get /DeviceGray eq{
+								1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx
+							}if
+							/Name cvx /findcmykcustomcolor cvx /exch cvx
+							
+							AGMCORE_host_sep{
+								AGMCORE_is_cmyk_sep
+							}{
+								Name inRip_spot_has_ink not
+							}ifelse
+							{
+		 						/pop cvx 1
+							}if
+							/setcustomcolor cvx
+						] cvx bdf
+ 					}{ 
+						/TintProc /setcolor ldf
+						
+						[/Separation Name MappedCSA sep_proc_name load ] setcolorspace_opt
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+	}ifelse
+	set_crd
+	setsepcolor
+	end
+} def
+/setindexedcolorspace
+{
+	dup /indexed_colorspace_dict exch AGMCORE_gput
+	begin
+		/MappedCSA CSA map_csa def
+		AGMCORE_host_sep level2 not and{
+			0 0 0 0 setcmykcolor
+		}{
+			[/Indexed MappedCSA 
+			level2 not has_color not and{
+				dup 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or{
+					pop [/DeviceGray]
+				}if
+				HiVal GrayLookup
+			}{
+				HiVal 
+				currentdict/RangeArray known{
+					{ 
+						/indexed_colorspace_dict AGMCORE_gget begin
+						Lookup exch 
+						dup HiVal gt{
+							pop HiVal
+						}if
+						NComponents mul NComponents getinterval {} forall
+						NComponents 1 sub -1 0{
+							RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
+							NComponents 1 roll
+						}for
+						end
+					} bind
+				}{
+					Lookup
+				}ifelse
+			}ifelse
+			] setcolorspace_opt
+			
+			set_crd
+		}ifelse
+	end
+}def
+/setindexedcolor
+{
+	AGMCORE_host_sep{
+		/indexed_colorspace_dict AGMCORE_gget/Lookup get 4 3 -1 roll map_index setcmykcolor
+	}{
+		setcolor
+	}ifelse
+} def
+/ignoreimagedata
+{
+	currentoverprint not{
+		gsave 
+		dup begin
+		1 setgray
+		0 0 ImageMatrix itransform 
+		Width Height ImageMatrix idtransform rectfill 
+		end
+		grestore
+		}if
+	consumeimagedata
+}def
+/add_csa
+{
+	Adobe_AGM_Core begin
+			/AGMCORE_CSA_cache xput
+	end
+}def
+/map_csa
+{
+	dup type /nametype eq{
+		Adobe_AGM_Core/AGMCORE_CSA_cache get exch get
+	}if
+}def
+/add_csd
+{
+	Adobe_AGM_Core begin
+		/AGMCORE_CSD_cache xput
+	end
+}def
+/get_csd
+{
+	dup type /nametype eq{
+		Adobe_AGM_Core/AGMCORE_CSD_cache get exch get
+	}if
+}def
+/get_csd_by_name
+{
+	dup type dup /nametype eq exch /stringtype eq or{
+		Adobe_AGM_Core begin
+		/AGMCORE_CSD_Name xdf
+		AGMCORE_CSD_cache
+		{
+			dup /Name get AGMCORE_CSD_Name eq
+			{
+				exch pop exit
+			}{
+				pop
+			}ifelse
+			pop
+		}forall
+		end
+	}if
+}def
+/cachepattern_level2
+{
+	4 dict begin
+	/comparebuffer exch def
+	/holdbuffer exch def
+	/readbuffer 1024 string def
+	/LZWFilter holdbuffer /LZWEncode filter def
+	{
+		currentfile readbuffer readline not
+			{pop exit}
+		if
+		dup LZWFilter exch writestring
+		LZWFilter (\n) writestring
+		comparebuffer eq
+			{exit}
+		if
+	}loop
+	LZWFilter closefile
+	end
+}def
+/cachepattern_level3
+{
+	3 dict begin
+	/comparebuffer exch def
+	/readbuffer 1024 string def
+	/DoEOL false def
+	{ 
+		DoEOL
+			{
+			(\n)
+			/DoEOL false def
+			}
+			{
+			currentfile readbuffer readline not
+				{pop ()}
+				{
+				dup length 0 eq
+					{ pop(\n)}
+					{
+					dup comparebuffer eq
+						{pop ()}
+						{/DoEOL true def}
+					ifelse
+					}
+				ifelse
+				}
+			ifelse
+			}
+		ifelse
+	} /ReusableStreamDecode filter
+	end
+}def
+/add_pattern
+{
+	Adobe_AGM_Core begin
+		/AGMCORE_pattern_cache xput
+	end
+}def
+/get_pattern
+{
+	dup type /nametype eq{
+		Adobe_AGM_Core/AGMCORE_pattern_cache get exch get
+	}if
+}def
+/make_pattern
+{
+	dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
+	exch 3 index /XStep get 1 index exch 2 copy div cvi mul sub sub
+	exch 3 index /YStep get 1 index exch 2 copy div cvi mul sub sub
+	matrix translate exch matrix concatmatrix
+	makepattern
+}def
+/set_pattern
+{
+	dup /PatternType get 1 eq{
+		dup /PaintType get 1 eq{
+			false sop [/DeviceGray] setcolorspace 0 setgray
+		}if
+	}if
+	setpattern
+}def
+/setcolorspace_opt
+{
+	dup currentcolorspace eq{
+		pop
+	}{
+		setcolorspace
+	}ifelse
+}def
+/updatecolorrendering
+{
+	
+	currentcolorrendering/Intent known{
+		currentcolorrendering/Intent get
+	}{
+		null
+	}ifelse
+	
+	Intent ne{
+		false  
+		Intent
+		AGMCORE_CRD_cache {
+			exch pop 
+			begin
+				dup Intent eq{
+					currentdict setcolorrendering_opt
+					end 
+					exch pop true exch	
+					exit
+				}if
+			end
+		} forall
+		pop
+		not{
+			systemdict /findcolorrendering known{
+				Intent findcolorrendering pop
+				/ColorRendering findresource 
+				dup length dict copy
+				setcolorrendering_opt
+			}if
+		}if
+	}if
+} def
+/add_crd
+{
+	AGMCORE_CRD_cache 3 1 roll put
+}def
+/set_crd
+{
+	AGMCORE_host_sep not level2 and{
+		currentdict/CRD known{
+			AGMCORE_CRD_cache CRD get dup null ne{
+				setcolorrendering_opt
+			}{
+				pop
+			}ifelse
+		}{
+			currentdict/Intent known{
+				updatecolorrendering
+			}if
+		}ifelse
+	}if
+}def
+/setcolorrendering_opt
+{
+	dup currentcolorrendering eq{
+		pop
+	}{
+		begin
+			/Intent Intent def
+			currentdict
+		end
+		setcolorrendering
+	}ifelse
+}def
+/cdndf
+{
+	exch dup currentdict exch known{
+		pop pop
+	}{
+		exch def
+	}ifelse
+}def
+/cpaint_gcomp
+{
+	convert_to_process Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
+	Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
+	{
+		(%end_cpaint_gcomp) flushinput
+	}if
+}def
+/cpaint_gsep
+{
+	Adobe_AGM_Core/AGMCORE_ConvertToProcess get
+	{	
+		(%end_cpaint_gsep) flushinput
+	}if
+}def
+/cpaint_gend
+{
+	newpath
+}def
+/AGMCORE_ctm_stack bdict
+	/push_ctm {
+		stack length size le{
+			stack dup length 2 mul array 
+			dup /stack exch def
+			copy pop
+		}if
+		stack size 3 -1 roll put
+		/size size 1 add def
+	}
+	/pop_ctm {
+		/size size 1 sub def
+		size 0 lt{ 
+			/size 0 def
+		}if
+		stack size get
+	}
+	/stack 1 array
+	/size 0 
+edict 
+def
+/save_ctm
+{
+	matrix currentmatrix AGMCORE_ctm_stack begin 
+		push_ctm 
+	end
+}def
+/restore_ctm
+{
+	AGMCORE_ctm_stack begin
+		pop_ctm 
+	end
+	setmatrix
+}def
+/path_rez
+{
+	dup 0 ne{
+		AGMCORE_deviceDPI exch div 
+		dup 1 lt{
+			pop 1
+		}if
+		setflat
+	}{
+		pop
+	}ifelse 	
+}def
+/rdcmntline {
+	currentfile AGMCORE_str256 readline pop
+	(%) anchorsearch {pop} if
+} def
+/set_spot_alias_ary
+{
+	/AGMCORE_SpotAliasAry where{
+		pop pop
+	}{
+		Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
+		true set_spot_alias
+	}ifelse
+}def
+/set_spot_alias
+{
+	/AGMCORE_SpotAliasAry where{
+		/AGMCORE_current_spot_alias 3 -1 roll put
+	}{
+		pop
+	}ifelse
+}def
+/current_spot_alias
+{
+	/AGMCORE_SpotAliasAry where{
+		/AGMCORE_current_spot_alias get
+	}{
+		false
+	}ifelse
+}def
+/map_alias
+{
+	/AGMCORE_SpotAliasAry where{
+		begin
+			/AGMCORE_name xdf
+			false	
+			AGMCORE_SpotAliasAry{
+				dup/Name get AGMCORE_name eq{
+					save exch
+					/Adobe_AGM_Core currentdict def
+					/CSD get get_csd
+					exch restore
+					exch pop true
+					exit
+				}{
+					pop
+				}ifelse
+			}forall
+		end
+	}{
+		pop false
+	}ifelse
+}bdf
+/spot_alias
+{
+	true set_spot_alias
+	
+	/AGMCORE_&setcustomcolor AGMCORE_key_known not {
+		Adobe_AGM_Core/AGMCORE_&setcustomcolor /setcustomcolor load put
+	} if
+	/customcolor_tint 1 AGMCORE_gput
+	
+	Adobe_AGM_Core begin
+	/setcustomcolor
+	{
+		
+		dup /customcolor_tint exch AGMCORE_gput
+		
+		current_spot_alias{
+			1 index 4 get map_alias{
+				mark 3 1 roll
+				setsepcolorspace
+				counttomark 0 ne{
+					setsepcolor
+				}if
+				pop
+				pop
+			}{
+				AGMCORE_&setcustomcolor
+			}ifelse
+		}{
+			AGMCORE_&setcustomcolor
+		}ifelse
+	}bdf
+	end
+}def
+/begin_feature
+{
+	Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
+	count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
+	{Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
+}def
+/end_feature
+{
+	2 dict begin
+	/spd /setpagedevice load def
+	/setpagedevice { get_gstate spd set_gstate } def
+	stopped{$error/newerror false put}if
+	end
+	count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
+	countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
+	{Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
+}def
+/set_negative
+{
+	Adobe_AGM_Core begin
+	/AGMCORE_inverting exch def
+	level2{
+		currentpagedevice/NegativePrint known{
+			currentpagedevice/NegativePrint get Adobe_AGM_Core/AGMCORE_inverting get ne{
+				true begin_feature true{
+						bdict /NegativePrint Adobe_AGM_Core/AGMCORE_inverting get edict setpagedevice
+				}end_feature
+			}if
+			/AGMCORE_inverting false def
+		}if
+	}if
+	AGMCORE_inverting{
+		[{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
+		gsave newpath clippath 1 /setseparationgray where{pop setseparationgray}{setgray}ifelse 
+		fill grestore
+	}if
+	end
+}def
+/lw_save_restore_override {
+	/md where {
+		pop
+		md begin
+		/pmSVsetup{} def
+		/endp{}def
+		/pse{}def
+		/psb{}def
+		/orig_showpage where
+			{pop}
+			{/orig_showpage /showpage load def}
+		ifelse
+		/showpage {orig_showpage gR} def
+		end
+	}if
+}def
+/pscript_showpage_override {
+	/NTPSOct95 where
+	{
+		begin
+		showpage
+		save
+		/showpage /restore load def
+		/restore {exch pop}def
+		end
+	}if
+}def
+/driver_media_override
+{
+	/md where {
+		pop
+		md /initializepage known {
+			md /initializepage {} put
+		} if
+		md /rC known {
+			md /rC {4{pop}repeat} put
+		} if
+	}if
+	
+	Adobe_AGM_Core /AGMCORE_Default_CTM matrix currentmatrix put
+}def
+/driver_check_media_override
+{
+	Adobe_AGM_Core /AGMCORE_Default_CTM get matrix currentmatrix ne
+	{
+		Adobe_AGM_Core /AGMCORE_Default_CTM get setmatrix
+	}if
+}def
+AGMCORE_err_strings begin
+	/AGMCORE_bad_environ (Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. ) def
+	/AGMCORE_color_space_onhost_seps (This job contains colors that will not separate with on-host methods. ) def
+	/AGMCORE_invalid_color_space (This job contains an invalid color space. ) def
+end
+end
+systemdict /setpacking known
+{
+	setpacking
+} if
+%%EndResource
+%%BeginResource: procset Adobe_CoolType_Core 2.12 0
+%%Copyright: Copyright 1997-2001 Adobe Systems Incorporated.  All Rights Reserved.
+%%Version: 2.12 0
+userdict/Adobe_CoolType_Core 60 dict dup begin put/Level2? systemdict
+/languagelevel known dup{pop systemdict/languagelevel get 2 ge}if def Level2?
+not{/currentglobal false def/setglobal/pop load def/gcheck{pop false}bind def
+/currentpacking false def/setpacking/pop load def/SharedFontDirectory 0 dict
+def}if currentpacking true setpacking/@_SaveStackLevels{Adobe_CoolType_Data
+begin @opStackCountByLevel @opStackLevel 2 copy known not{2 copy 3 dict dup
+/args 7 index 5 add array put put get}{get dup/args get dup length 3 index lt{
+dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args
+exch put}{pop}ifelse}ifelse begin count 2 sub 1 index lt{pop count 1 sub}if
+dup/argCount exch def dup 0 gt{exch 1 index 2 add 1 roll args exch 0 exch
+getinterval astore pop}{pop}ifelse count 1 sub/restCount exch def end
+/@opStackLevel @opStackLevel 1 add def countdictstack 1 sub
+ at dictStackCountByLevel exch @dictStackLevel exch put/@dictStackLevel
+ at dictStackLevel 1 add def end}bind def/@_RestoreStackLevels{
+Adobe_CoolType_Data begin/@opStackLevel @opStackLevel 1 sub def
+ at opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt{{pop
+}repeat}{pop}ifelse args 0 argCount getinterval{}forall end/@dictStackLevel
+ at dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end
+countdictstack exch sub dup 0 gt{{end}repeat}{pop}ifelse}bind def
+/@_PopStackLevels{Adobe_CoolType_Data begin/@opStackLevel @opStackLevel 1 sub
+def/@dictStackLevel @dictStackLevel 1 sub def end}bind def/@Raise{exch cvx
+exch errordict exch get exec stop}bind def/@ReRaise{cvx $error/errorname get
+errordict exch get exec stop}bind def/@Stopped{0 @#Stopped}bind def/@#Stopped{
+ at _SaveStackLevels stopped{@_RestoreStackLevels true}{@_PopStackLevels false}
+ifelse}bind def/@Arg{Adobe_CoolType_Data begin @opStackCountByLevel
+ at opStackLevel 1 sub get/args get exch get end}bind def/doc_setup{
+Adobe_CoolType_Core begin/mov/moveto load def/nfnt/newencodedfont load def
+/mfnt/makefont load def/sfnt/setfont load def/ufnt/undefinefont load def/chp
+/charpath load def/awsh/awidthshow load def/wsh/widthshow load def/ash/ashow
+load def/sh/show load def end userdict/Adobe_CoolType_Data 6 dict dup begin
+/AddWidths? false def/CC 0 def/charcode 2 string def/@opStackCountByLevel 32
+dict def/@opStackLevel 0 def/@dictStackCountByLevel 32 dict def
+/@dictStackLevel 0 def end put}bind def/doc_trailer{currentdict
+Adobe_CoolType_Core eq{end}if}bind def/page_setup{Adobe_CoolType_Core begin}
+bind def/page_trailer{end}bind def/unload{systemdict/languagelevel known{
+systemdict/languagelevel get 2 ge{userdict/Adobe_CoolType_Core 2 copy known{
+undef}{pop pop}ifelse}if}if}bind def/ndf{1 index where{pop pop pop}{dup xcheck
+{bind}if def}ifelse}def/findfont dup systemdict begin userdict begin
+/globaldict where{/globaldict get begin}if dup where pop exch get/globaldict
+where{pop end}if end end def/systemfindfont/findfont load def/undefinefont{pop
+}ndf/copyfont{currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{
+dup length}ifelse 2 index length add 1 add dict begin exch{1 index/FID eq{pop
+pop}{def}ifelse}forall dup null eq{pop}{{def}forall}ifelse currentdict end
+exch setglobal}bind def/copyarray{currentglobal exch dup gcheck setglobal dup
+length array copy exch setglobal}bind def/newencodedfont{currentglobal{
+SharedFontDirectory 3 index known{SharedFontDirectory 3 index get
+/FontReferenced known}{false}ifelse}{FontDirectory 3 index known{FontDirectory
+3 index get/FontReferenced known}{SharedFontDirectory 3 index known{
+SharedFontDirectory 3 index get/FontReferenced known}{false}ifelse}ifelse}
+ifelse dup{3 index findfont/FontReferenced get 2 index findfont ne{pop false}
+if}if{pop 1 index findfont/Encoding get exch 0 1 255{2 copy get 3 index 3 1
+roll put}for pop pop pop}{findfont dup dup maxlength 2 add dict begin exch{1
+index/FID ne{def}{pop pop}ifelse}forall/FontReferenced exch def/Encoding exch
+dup length array copy def/FontName 1 index dup type/stringtype eq{cvn}if def
+currentdict end definefont pop}ifelse}bind def/SetSubstituteStrategy{
+$SubstituteFont begin dup type/dicttype ne{0 dict}if currentdict/$Strategies
+known{exch $Strategies exch 2 copy known{get 2 copy maxlength exch maxlength
+add dict begin{def}forall{def}forall currentdict dup/$Init known{dup/$Init get
+exec}if end/$Strategy exch def}{pop pop pop}ifelse}{pop pop}ifelse end}bind
+def/scff{$SubstituteFont begin dup type/stringtype eq{dup length exch}{null}
+ifelse/$sname exch def/$slen exch def end{findfont}@Stopped{dup length dup 21
+add string dup 4 3 roll 0 exch 128 string cvs putinterval exch 1 index exch
+(_was-malformed-so-was)putinterval cvn{findfont}@Stopped{pop/Courier findfont}
+if}if $SubstituteFont begin/$sname null def/$slen 0 def end}bind def
+/isWidthsOnlyFont{dup/WidthsOnly known{pop pop true}{dup/FDepVector known{
+/FDepVector get{isWidthsOnlyFont dup{exit}if}forall}{dup/FDArray known{
+/FDArray get{isWidthsOnlyFont dup{exit}if}forall}{pop}ifelse}ifelse}ifelse}
+bind def/?set{$SubstituteFont begin/$substituteFound false def/$fontname 4
+index def/$doSmartSub false def end 3 index findfont $SubstituteFont begin
+$substituteFound{false}{dup/FontName known{dup/FontName get $fontname eq 1
+index/DistillerFauxFont known not and/currentdistillerparams where{pop false 2
+index isWidthsOnlyFont not and}if}{false}ifelse}ifelse exch pop/$doSmartSub
+true def end{exch pop exch pop exch 2 dict dup/Found 3 index put exch findfont
+exch}{exch exec exch findfont 2 dict dup/Downloaded 6 5 roll put}ifelse dup
+/FontName 4 index put copyfont definefont pop}bind def/?str1 256 string def
+/?str2 256 string def/?add{1 index type/integertype eq{exch true 4 2}{false 3
+1}ifelse roll 1 index findfont dup/Widths known{Adobe_CoolType_Data/AddWidths?
+true put gsave dup 1000 scalefont setfont}if/Downloaded known{exec exch{exch
+?str2 cvs exch findfont/Downloaded get 1 dict begin/Downloaded 1 index def
+?str1 cvs length ?str1 1 index 1 add 3 index putinterval exch length 1 add 1
+index add ?str1 2 index(*)putinterval ?str1 0 2 index getinterval cvn findfont
+?str1 3 index(+)putinterval 2 dict dup/FontName ?str1 0 6 index getinterval
+cvn put dup/Downloaded Downloaded put end copyfont dup/FontName get exch
+definefont pop pop pop}{pop}ifelse}{pop exch{findfont dup/Found get dup length
+exch ?str1 cvs pop ?str1 1 index(+)putinterval ?str1 1 index 1 add 4 index
+?str2 cvs putinterval ?str1 exch 0 exch 5 4 roll ?str2 cvs length 1 add add
+getinterval cvn 1 dict exch 1 index exch/FontName exch put copyfont dup
+/FontName get exch definefont pop}{pop}ifelse}ifelse Adobe_CoolType_Data
+/AddWidths? get{grestore Adobe_CoolType_Data/AddWidths? false put}if}bind def
+/?sh{currentfont/Downloaded known{exch}if pop}bind def/?chp{currentfont
+/Downloaded known{pop}{false chp}ifelse}bind def/?mv{currentfont/Downloaded
+known{moveto pop pop}{pop pop moveto}ifelse}bind def setpacking userdict
+/$SubstituteFont 25 dict put 1 dict begin/SubstituteFont dup $error exch 2
+copy known{get}{pop pop{pop/Courier}bind}ifelse def/currentdistillerparams
+where dup{pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known{
+get/Error eq}{pop pop false}ifelse}if not{countdictstack array dictstack 0 get
+begin userdict begin $SubstituteFont begin/$str 128 string def/$fontpat 128
+string def/$slen 0 def/$sname null def/$match false def/$fontname null def
+/$substituteFound false def/$doSmartSub true def/$depth 0 def/$fontname null
+def/$italicangle 26.5 def/$dstack null def/$Strategies 10 dict dup begin
+/$Type3Underprint{currentglobal exch false setglobal 11 dict begin/UseFont
+exch $WMode 0 ne{dup length dict copy dup/WMode $WMode put/UseFont exch
+definefont}if def/FontName $fontname dup type/stringtype eq{cvn}if def
+/FontType 3 def/FontMatrix[.001 0 0 .001 0 0]def/Encoding 256 array dup 0 1
+255{/.notdef put dup}for pop def/FontBBox[0 0 0 0]def/CCInfo 7 dict dup begin
+/cc null def/x 0 def/y 0 def end def/BuildChar{exch begin CCInfo begin 1
+string dup 0 3 index put exch pop/cc exch def UseFont 1000 scalefont setfont
+cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont
+/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end}bind
+def currentdict end exch setglobal}bind def/$GetaTint 2 dict dup begin
+/$BuildFont{dup/WMode known{dup/WMode get}{0}ifelse/$WMode exch def $fontname
+exch dup/FontName known{dup/FontName get dup type/stringtype eq{cvn}if}{
+/unnamedfont}ifelse exch $deepcopyfont exch 1 index exch/FontBasedOn exch put
+dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont}bind def
+/$Underprint{gsave x abs y abs gt{/y 1000 def}{/x -1000 def 500 120 translate}
+ifelse Level2?{[/Separation(All)/DeviceCMYK{0 0 0 1 pop}]setcolorspace}{0
+setgray}ifelse 10 setlinewidth x .8 mul[7 3]{y mul 8 div 120 sub x 10 div exch
+moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave
+Level2?{.2 setcolor}{.8 setgray}ifelse fill grestore stroke}forall pop
+grestore}bind def end def/$Oblique 1 dict dup begin/$BuildFont{currentglobal
+exch dup gcheck setglobal null copyfont begin/FontBasedOn currentdict/FontName
+known{FontName dup type/stringtype eq{cvn}if}{/unnamedfont}ifelse def/FontName
+$fontname dup type/stringtype eq{cvn}if def/currentdistillerparams where{pop}{
+/FontInfo currentdict/FontInfo known{FontInfo null copyfont}{2 dict}ifelse dup
+begin/ItalicAngle $italicangle def/FontMatrix FontMatrix[1 0 ItalicAngle dup
+sin exch cos div 1 0 0]matrix concatmatrix readonly end 4 2 roll def def}
+ifelse FontName currentdict end definefont exch setglobal}bind def end def
+/$None 1 dict dup begin/$BuildFont{}bind def end def end def/$Oblique
+SetSubstituteStrategy/$findfontByEnum{dup type/stringtype eq{cvn}if dup
+/$fontname exch def $sname null eq{$str cvs dup length $slen sub $slen
+getinterval}{pop $sname}ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch
+putinterval/$match false def $SubstituteFont/$dstack countdictstack array
+dictstack put mark{$fontpat 0 $slen 7 add getinterval{/$match exch def exit}
+$str filenameforall}stopped{cleardictstack currentdict true $SubstituteFont
+/$dstack get{exch{1 index eq{pop false}{true}ifelse}{begin false}ifelse}forall
+pop}if cleartomark/$slen 0 def $match false ne{$match(fonts/)anchorsearch pop
+pop cvn}{/Courier}ifelse}bind def/$ROS 1 dict dup begin/Adobe 4 dict dup begin
+/Japan1[/Ryumin-Light/HeiseiMin-W3/GothicBBB-Medium/HeiseiKakuGo-W5
+/HeiseiMaruGo-W4/Jun101-Light]def/Korea1[/HYSMyeongJo-Medium/HYGoThic-Medium]
+def/GB1[/STSong-Light/STHeiti-Regular]def/CNS1[/MKai-Medium/MHei-Medium]def
+end def end def/$cmapname null def/$deepcopyfont{dup/FontType get 0 eq{1 dict
+dup/FontName/copied put copyfont begin/FDepVector FDepVector copyarray 0 1 2
+index length 1 sub{2 copy get $deepcopyfont dup/FontName/copied put/copied
+exch definefont 3 copy put pop pop}for def currentdict end}{$Strategies
+/$Type3Underprint get exec}ifelse}bind def/$buildfontname{length $str 1 index
+(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname
+length add $str exch 0 exch getinterval cvn}bind def/$findfontByROS{/$fontname
+exch def $ROS Registry 2 copy known{get Ordering 2 copy known{get}{pop pop[]}
+ifelse}{pop pop[]}ifelse false exch{dup/CIDFont resourcestatus{pop pop save 1
+index/CIDFont findresource dup/WidthsOnly known{dup/WidthsOnly get}{false}
+ifelse exch pop exch restore{pop}{exch pop true exit}ifelse}{pop}ifelse}forall
+{$str cvs $buildfontname}{false(*){save exch dup/CIDFont findresource dup
+/WidthsOnly known{dup/WidthsOnly get not}{true}ifelse exch/CIDSystemInfo get
+dup/Registry get Registry eq exch/Ordering get Ordering eq and and{exch
+restore exch pop true exit}{pop restore}ifelse}$str/CIDFont resourceforall{
+$buildfontname}{$fontname $findfontByEnum}ifelse}ifelse}bind def end end
+currentdict/$error known currentdict/languagelevel known and dup{pop $error
+/SubstituteFont known}if dup{$error}{Adobe_CoolType_Core}ifelse begin{
+/SubstituteFont/CMap/Category resourcestatus{pop pop{$SubstituteFont begin
+/$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt
+and{$sname null eq{dup $str cvs dup length $slen sub $slen getinterval cvn}{
+$sname}ifelse dup/CMap resourcestatus{pop pop dup/$cmapname exch def/CMap
+findresource/CIDSystemInfo get{def}forall $findfontByROS}{128 string cvs dup
+(-)search{3 1 roll search{3 1 roll pop{dup cvi}stopped{pop pop pop pop pop
+$findfontByEnum}{4 2 roll pop pop exch length exch 2 index length 2 index sub
+exch 1 sub -1 0{$str cvs dup length 4 index 0 4 index 4 3 roll add getinterval
+exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus{pop pop 4 1
+roll pop pop pop dup/$cmapname exch def/CMap findresource/CIDSystemInfo get{
+def}forall $findfontByROS true exit}{pop}ifelse}for dup type/booleantype eq{
+pop}{pop pop $findfontByEnum}ifelse}ifelse}{pop pop pop $findfontByEnum}ifelse
+}{pop pop $findfontByEnum}ifelse}ifelse}{//SubstituteFont exec}ifelse/$slen 0
+def end}}{{$SubstituteFont begin/$substituteFound true def dup length $slen gt
+$sname null ne or $slen 0 gt and{$findfontByEnum}{//SubstituteFont exec}ifelse
+end}}ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont
+load put}{/scfindfont{$SubstituteFont begin dup systemfindfont dup/FontName
+known{dup/FontName get dup 3 index ne}{/noname true}ifelse dup{
+/$origfontnamefound 2 index def/$origfontname 4 index def/$substituteFound
+true def}if exch pop{$slen 0 gt $sname null ne 3 index length $slen gt or and{
+pop dup $findfontByEnum findfont dup maxlength 1 add dict begin{1 index/FID eq
+{pop pop}{def}ifelse}forall currentdict end definefont dup/FontName known{dup
+/FontName get}{null}ifelse $origfontnamefound ne{$origfontname $str cvs print
+( substitution revised, using )print dup/FontName known{dup/FontName get}{
+(unspecified font)}ifelse $str cvs print(.
+)print}if}{exch pop}ifelse}{exch pop}ifelse end}bind def}ifelse end end
+Adobe_CoolType_Core/findfont{$SubstituteFont begin $depth 0 eq{/$fontname 1
+index dup type/stringtype ne{$str cvs}if def/$substituteFound false def}if
+/$depth $depth 1 add def end scfindfont $SubstituteFont begin/$depth $depth 1
+sub def $substituteFound $depth 0 eq and $doSmartSub and{currentdict/$Strategy
+known{$Strategy/$BuildFont get exec}if}if end}bind put}if end end
+%%EndResource
+%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.13 0
+%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated.
+%%Version: 1.13 0
+systemdict/languagelevel known dup{currentglobal false setglobal}{false}ifelse
+exch userdict/Adobe_CoolType_Utility 2 copy known{2 copy get dup maxlength 25
+add dict copy}{25 dict}ifelse put Adobe_CoolType_Utility begin/ct_Level2? exch
+def/ct_Clone? 1183615869 internaldict dup/CCRun known not exch/eCCRun known
+not ct_Level2? and or def/ct_UseNativeCapability? systemdict/composefont known
+def/ct_MakeOCF 35 dict def/ct_Vars 25 dict def/ct_GlyphDirProcs 6 dict def
+/ct_BuildCharDict 15 dict dup begin/charcode 2 string def/dst_string 1500
+string def/nullstring()def/usewidths? true def end def ct_Level2?{setglobal}{
+pop}ifelse ct_GlyphDirProcs begin/GetGlyphDirectory{systemdict/languagelevel
+known{pop/CIDFont findresource/GlyphDirectory get}{1 index/CIDFont
+findresource/GlyphDirectory get dup type/dicttype eq{dup dup maxlength exch
+length sub 2 index lt{dup length 2 index add dict copy 2 index/CIDFont
+findresource/GlyphDirectory 2 index put}if}if exch pop exch pop}ifelse +}def/+
+{systemdict/languagelevel known{currentglobal false setglobal 3 dict begin/vm
+exch def}{1 dict begin}ifelse/$ exch def systemdict/languagelevel known{vm
+setglobal/gvm currentglobal def $ gcheck setglobal}if ?{$ begin}if}def/?{$
+type/dicttype eq}def/|{userdict/Adobe_CoolType_Data known{Adobe_CoolType_Data
+/AddWidths? known{currentdict Adobe_CoolType_Data begin begin AddWidths?{
+Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode
+exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put
+stringwidth 2 array astore currentfont/Widths get exch CC exch put}{?{def}{$ 3
+1 roll put}ifelse}ifelse end end}{?{def}{$ 3 1 roll put}ifelse}ifelse}{?{def}{
+$ 3 1 roll put}ifelse}ifelse}def/!{?{end}if systemdict/languagelevel known{gvm
+setglobal}if end}def/:{string currentfile exch readstring pop}executeonly def
+end ct_MakeOCF begin/ct_cHexEncoding[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09
+/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C
+/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F
+/c30/c31/c32/c33/c34/c35/c36/c37/c38/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42
+/c43/c44/c45/c46/c47/c48/c49/c4A/c4B/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55
+/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68
+/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B
+/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E
+/c8F/c90/c91/c92/c93/c94/c95/c96/c97/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1
+/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4
+/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7
+/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA
+/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED
+/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def
+/ct_CID_STR_SIZE 8000 def/ct_mkocfStr100 100 string def/ct_defaultFontMtx[.001
+0 0 .001 0 0]def/ct_1000Mtx[1000 0 0 1000 0 0]def/ct_raise{exch cvx exch
+errordict exch get exec stop}bind def/ct_reraise{cvx $error/errorname get
+(Error: )print dup(                    )cvs print errordict exch get exec stop
+}bind def/ct_cvnsi{1 index add 1 sub 1 exch 0 4 1 roll{2 index exch get exch 8
+bitshift add}for exch pop}bind def/ct_GetInterval{Adobe_CoolType_Utility
+/ct_BuildCharDict get begin/dst_index 0 def dup dst_string length gt{dup
+string/dst_string exch def}if 1 index ct_CID_STR_SIZE idiv/arrayIndex exch def
+2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub{dup 3 index
+add 2 index length le{2 index getinterval dst_string dst_index 2 index
+putinterval length dst_index add/dst_index exch def exit}{1 index length 1
+index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval
+pop dup dst_index add/dst_index exch def sub/arrayIndex arrayIndex 1 add def 2
+index dup length arrayIndex gt{arrayIndex get}{pop exit}ifelse 0}ifelse}loop
+pop pop pop dst_string 0 dst_index getinterval end}bind def ct_Level2?{
+/ct_resourcestatus currentglobal mark true setglobal{/unknowninstancename
+/Category resourcestatus}stopped{cleartomark setglobal true}{cleartomark
+currentglobal not exch setglobal}ifelse{{mark 3 1 roll/Category findresource
+begin ct_Vars/vm currentglobal put({ResourceStatus} stopped)0()/SubFileDecode
+filter cvx exec{cleartomark false}{{3 2 roll pop true}{cleartomark false}
+ifelse}ifelse ct_Vars/vm get setglobal end}}{{resourcestatus}}ifelse bind def
+/CIDFont/Category ct_resourcestatus{pop pop}{currentglobal true setglobal
+/Generic/Category findresource dup length dict copy dup/InstanceType/dicttype
+put/CIDFont exch/Category defineresource pop setglobal}ifelse
+ct_UseNativeCapability?{/CIDInit/ProcSet findresource begin 12 dict begin
+begincmap/CIDSystemInfo 3 dict dup begin/Registry(Adobe)def/Ordering(Identity)
+def/Supplement 0 def end def/CMapName/Identity-H def/CMapVersion 1 def
+/CMapType 1 def 1 begincodespacerange<0000><ffff>endcodespacerange 1
+begincidrange<0000><ffff>0 endcidrange endcmap CMapName currentdict/CMap
+defineresource pop end end}if}{/ct_Category 2 dict begin/CIDFont 10 dict def
+/ProcSet 2 dict def currentdict end def/defineresource{ct_Category 1 index 2
+copy known{get dup dup maxlength exch length eq{dup length 10 add dict copy
+ct_Category 2 index 2 index put}if 3 index 3 index put pop exch pop}{pop pop
+/defineresource/undefined ct_raise}ifelse}bind def/findresource{ct_Category 1
+index 2 copy known{get 2 index 2 copy known{get 3 1 roll pop pop}{pop pop
+/findresource/undefinedresource ct_raise}ifelse}{pop pop/findresource
+/undefined ct_raise}ifelse}bind def/resourcestatus{ct_Category 1 index 2 copy
+known{get 2 index known exch pop exch pop{0 -1 true}{false}ifelse}{pop pop
+/findresource/undefined ct_raise}ifelse}bind def/ct_resourcestatus
+/resourcestatus load def}ifelse/ct_CIDInit 2 dict begin/ct_cidfont_stream_init
+{{dup(Binary)eq{pop null currentfile ct_Level2?{{cid_BYTE_COUNT()
+/SubFileDecode filter}stopped{pop pop pop}if}if/readstring load exit}if dup
+(Hex)eq{pop currentfile ct_Level2?{{null exch/ASCIIHexDecode filter/readstring
+}stopped{pop exch pop(>)exch/readhexstring}if}{(>)exch/readhexstring}ifelse
+load exit}if/StartData/typecheck ct_raise}loop cid_BYTE_COUNT ct_CID_STR_SIZE
+le{2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put
+}{cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1
+exch{2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop}for 2
+index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch
+1 index length 1 sub exch put}ifelse cid_CIDFONT exch/GlyphData exch put 2
+index null eq{pop pop pop}{pop/readstring load 1 string exch{3 copy exec pop
+dup length 0 eq{pop pop pop pop pop true exit}if 4 index eq{pop pop pop pop
+false exit}if}loop pop}ifelse}bind def/StartData{mark{currentdict dup/FDArray
+get 0 get/FontMatrix get 0 get .001 eq{dup/CDevProc known not{/CDevProc
+1183615869 internaldict/stdCDevProc 2 copy known{get}{pop pop{pop pop pop pop
+pop 0 -1000 7 index 2 div 880}}ifelse def}if}{/CDevProc{pop pop pop pop pop 0
+1 cid_temp/cid_CIDFONT get/FDArray get 0 get/FontMatrix get 0 get div 7 index
+2 div 1 index .88 mul}def}ifelse/cid_temp 15 dict def cid_temp begin
+/cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt{
+ct_cidfont_stream_init FDArray{/Private get dup/SubrMapOffset known{begin
+/Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2?{
+currentdict dup/SubrMapOffset undef dup/SubrCount undef/SDBytes undef}if end
+/cid_SD_BYTES exch def/cid_SUBR_COUNT exch def/cid_SUBR_MAP_OFFSET exch def
+/cid_SUBRS exch def cid_SUBR_COUNT 0 gt{GlyphData cid_SUBR_MAP_OFFSET
+cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub{
+exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch
+cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll
+GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put}
+for pop}if}{pop}ifelse}forall}if cleartomark pop pop end CIDFontName
+currentdict/CIDFont defineresource pop end end}stopped{cleartomark/StartData
+ct_reraise}if}bind def currentdict end def/ct_saveCIDInit{/CIDInit/ProcSet
+ct_resourcestatus{true}{/CIDInitC/ProcSet ct_resourcestatus}ifelse{pop pop
+/CIDInit/ProcSet findresource ct_UseNativeCapability?{pop null}{/CIDInit
+ct_CIDInit/ProcSet defineresource pop}ifelse}{/CIDInit ct_CIDInit/ProcSet
+defineresource pop null}ifelse ct_Vars exch/ct_oldCIDInit exch put}bind def
+/ct_restoreCIDInit{ct_Vars/ct_oldCIDInit get dup null ne{/CIDInit exch/ProcSet
+defineresource pop}{pop}ifelse}bind def/ct_BuildCharSetUp{1 index begin
+CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin/ct_dfCharCode
+exch def/ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge{pop
+0}if/cid exch def{GlyphDirectory cid 2 copy known{get}{pop pop nullstring}
+ifelse dup length FDBytes sub 0 gt{dup FDBytes 0 ne{0 FDBytes ct_cvnsi}{pop 0}
+ifelse/fdIndex exch def dup length FDBytes sub FDBytes exch getinterval
+/charstring exch def exit}{pop cid 0 eq{/charstring nullstring def exit}if/cid
+0 def}ifelse}loop}def/ct_SetCacheDevice{0 0 moveto dup stringwidth 3 -1 roll
+true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto}
+def/ct_CloneSetCacheProc{1 eq{stringwidth pop -2 div -880 0 -1000 setcharwidth
+moveto}{usewidths?{currentfont/Widths get cid 2 copy known{get exch pop aload
+pop}{pop pop stringwidth}ifelse}{stringwidth}ifelse setcharwidth 0 0 moveto}
+ifelse}def/ct_Type3ShowCharString{ct_FDDict fdIndex 2 copy known{get}{
+currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup
+maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known{get}
+{pop pop ct_defaultFontMtx}ifelse/FontMatrix exch dup length array copy def
+/Private get/Private exch def/Widths rootfont/Widths get def/CharStrings 1
+dict dup/.notdef<d841272cf18f54fc13>dup length string copy put def currentdict
+end/ct_Type1Font exch definefont dup 5 1 roll put setglobal}ifelse dup
+/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put
+rootfont/WMode 2 copy known{get}{pop pop 0}ifelse exch 1000 scalefont setfont
+ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold{
+currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth
+setlinewidth stroke}{ct_str1 show}ifelse}def/ct_Type4ShowCharString{ct_dfDict
+ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup
+ct_defaultFontMtx ct_matrixeq not{ct_1000Mtx matrix concatmatrix concat}{pop}
+ifelse/Private get Adobe_CoolType_Utility/ct_Level2? get not{ct_dfDict/Private
+3 -1 roll{put}1183615869 internaldict/superexec get exec}if 1183615869
+internaldict Adobe_CoolType_Utility/ct_Level2? get{1 index}{3 index/Private
+get mark 6 1 roll}ifelse dup/RunInt known{/RunInt get}{pop/CCRun}ifelse get
+exec Adobe_CoolType_Utility/ct_Level2? get not{cleartomark}if}bind def
+/ct_BuildCharIncremental{{Adobe_CoolType_Utility/ct_MakeOCF get begin
+ct_BuildCharSetUp ct_ShowCharString}stopped{stop}if end end end end}bind def
+/BaseFontNameStr(BF00)def/ct_Type1FontTemplate 14 dict begin/FontType 1 def
+/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-250 -250 1250 1250]def/Encoding
+ct_cHexEncoding def/PaintType 0 def currentdict end def/BaseFontTemplate 11
+dict begin/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-250 -250 1250 1250]def
+/Encoding ct_cHexEncoding def/BuildChar/ct_BuildCharIncremental load def
+ct_Clone?{/FontType 3 def/ct_ShowCharString/ct_Type3ShowCharString load def
+/ct_dfSetCacheProc/ct_CloneSetCacheProc load def/ct_SyntheticBold false def
+/ct_StrokeWidth 1 def}{/FontType 4 def/Private 1 dict dup/lenIV 4 put def
+/CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def/PaintType 0 def
+/ct_ShowCharString/ct_Type4ShowCharString load def}ifelse/ct_str1 1 string def
+currentdict end def/BaseFontDictSize BaseFontTemplate length 5 add def
+/ct_matrixeq{true 0 1 5{dup 4 index exch get exch 3 index exch get eq and dup
+not{exit}if}for exch pop exch pop}bind def/ct_makeocf{15 dict begin exch/WMode
+exch def exch/FontName exch def/FontType 0 def/FMapType 2 def/FontMatrix
+matrix def/bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if
+def/Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{
+2 copy bfCount put pop}for def/FDepVector bfCount dup 256 lt{1 add}if array
+def BaseFontTemplate BaseFontDictSize dict copy begin/CIDFont exch def CIDFont
+/FontBBox known{CIDFont/FontBBox get/FontBBox exch def}if CIDFont/CDevProc
+known{CIDFont/CDevProc get/CDevProc exch def}if currentdict end
+BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if{FDepVector
+exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul
+def FontType 3 eq{/ct_FDDict 2 dict def}if currentdict end 1 index 16
+BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put}
+for ct_Clone?{/Widths 1 index/CIDFont get/GlyphDirectory get length dict def}
+if FontName currentdict end definefont ct_Clone?{gsave dup 1000 scalefont
+setfont ct_BuildCharDict begin/usewidths? false def currentfont/Widths get
+begin exch/CIDFont get/GlyphDirectory get{pop dup charcode exch 1 index 0 2
+index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore
+def}forall end/usewidths? true def end grestore}{exch pop}ifelse}bind def
+/ct_ComposeFont{ct_UseNativeCapability?{2 index/CMap ct_resourcestatus{pop pop
+exch pop}{/CIDInit/ProcSet findresource begin 12 dict begin begincmap/CMapName
+3 index def/CMapVersion 1 def/CMapType 1 def exch/WMode exch def/CIDSystemInfo
+3 dict dup begin/Registry(Adobe)def/Ordering CMapName ct_mkocfStr100 cvs
+(Adobe-)search{pop pop(-)search{dup length string copy exch pop exch pop}{pop
+(Identity)}ifelse}{pop(Identity)}ifelse def/Supplement 0 def end def 1
+begincodespacerange<0000><ffff>endcodespacerange 1 begincidrange<0000><ffff>0
+endcidrange endcmap CMapName currentdict/CMap defineresource pop end end}
+ifelse composefont}{3 2 roll pop 0 get/CIDFont findresource ct_makeocf}ifelse}
+bind def/ct_MakeIdentity{ct_UseNativeCapability?{1 index/CMap
+ct_resourcestatus{pop pop}{/CIDInit/ProcSet findresource begin 12 dict begin
+begincmap/CMapName 2 index def/CMapVersion 1 def/CMapType 1 def/CIDSystemInfo
+3 dict dup begin/Registry(Adobe)def/Ordering CMapName ct_mkocfStr100 cvs
+(Adobe-)search{pop pop(-)search{dup length string copy exch pop exch pop}{pop
+(Identity)}ifelse}{pop(Identity)}ifelse def/Supplement 0 def end def 1
+begincodespacerange<0000><ffff>endcodespacerange 1 begincidrange<0000><ffff>0
+endcidrange endcmap CMapName currentdict/CMap defineresource pop end end}
+ifelse composefont}{exch pop 0 get/CIDFont findresource ct_makeocf}ifelse}bind
+def currentdict readonly pop end end
+%%EndResource
+Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end
+%%BeginResource: procset Adobe_AGM_Image 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright (C) 2000-2000 Adobe Systems, Inc.  All Rights Reserved.
+systemdict /setpacking known
+{
+	currentpacking
+	true setpacking
+} if
+userdict /Adobe_AGM_Image 65 dict dup begin put
+/Adobe_AGM_Image_Id /Adobe_AGM_Image_1.0_0 def
+/nd{
+	null def
+}bind def
+/AGMIMG_&image nd
+/AGMIMG_&colorimage nd
+%%don't initialize AGMIMG_&customcolorimage, it wrecks havoc in a nested environment
+%%AGMIMG_ccimage_exists not {/AGMIMG_&customcolorimage nd} if 
+/AGMIMG_&imagemask nd
+/AGMIMG_mbuf () def
+/AGMIMG_ybuf () def
+/AGMIMG_kbuf () def
+/AGMIMG_c 0 def
+/AGMIMG_m 0 def
+/AGMIMG_y 0 def
+/AGMIMG_k 0 def
+/AGMIMG_tmp nd
+/AGMIMG_imagestring0 nd
+/AGMIMG_imagestring1 nd
+/AGMIMG_imagestring2 nd
+/AGMIMG_imagestring3 nd
+/AGMIMG_imagestring4 nd
+/AGMIMG_imagestring5 nd
+/AGMIMG_cnt nd
+/AGMIMG_fsave nd
+/AGMIMG_colorAry nd
+/AGMIMG_override nd
+/AGMIMG_name nd
+/invert_image_samples nd
+/knockout_image_samples	nd
+/img nd
+/sepimg nd
+/idximg nd
+/doc_setup
+{ 
+	Adobe_AGM_Core begin
+	Adobe_AGM_Image begin
+	/AGMIMG_&image systemdict/image get def
+	/AGMIMG_&imagemask systemdict/imagemask get def
+	/colorimage where{
+		pop
+		/AGMIMG_&colorimage /colorimage ldf
+	}if
+	end
+	end
+}def
+/page_setup
+{
+	Adobe_AGM_Image begin
+	/AGMIMG_ccimage_exists {/customcolorimage where 
+		{
+			pop
+			/Adobe_AGM_OnHost_Seps where
+			{
+			pop false
+			}{
+			/Adobe_AGM_InRip_Seps where
+				{
+				pop false
+				}{
+					true
+				 }ifelse
+			 }ifelse
+			}{
+			false
+		}ifelse 
+	}bdf
+	level2{
+		/invert_image_samples
+		{
+			Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
+			/Decode [ Decode 1 get Decode 0 get] def
+		}def
+		/knockout_image_samples
+		{
+			Operator/imagemask ne{
+				/Decode [1 1] def
+			}if
+		}def
+	}{	
+		/invert_image_samples
+		{
+			{1 exch sub} currenttransfer addprocs settransfer
+		}def
+		/knockout_image_samples
+		{
+			{ pop 1 } currenttransfer addprocs settransfer
+		}def
+	}ifelse
+	/img /imageormask ldf
+	/sepimg /sep_imageormask ldf
+	/idximg /indexed_imageormask ldf
+	currentdict{
+		dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and{
+			bind
+		}if
+		def
+	}forall
+}def
+/page_trailer
+{
+	end
+}def
+/doc_trailer
+{
+}def
+/imageormask_sys
+{
+	begin
+		save mark
+		level2{
+			currentdict
+			Operator /imagemask eq{
+				AGMIMG_&imagemask
+			}{
+				AGMIMG_&image
+			}ifelse
+		}{
+			Width Height
+			Operator /imagemask eq{
+				Decode 0 get 1 eq Decode 1 get 0 eq	and
+				ImageMatrix /DataSource load
+				AGMIMG_&imagemask
+			}{
+				BitsPerComponent ImageMatrix /DataSource load
+				AGMIMG_&image
+			}ifelse
+		}ifelse
+		cleartomark restore
+	end
+}def
+/overprint_plate
+{
+	currentoverprint{
+		0 get
+		dup /DeviceGray eq{
+			pop AGMCORE_black_plate not
+		}{
+			/DeviceCMYK eq{
+				AGMCORE_is_cmyk_sep not
+			}if
+		}ifelse
+	}{
+		false
+	}ifelse
+}def
+/imageormask
+{
+	begin
+		SkipImageProc not{
+			save mark
+			level2 AGMCORE_host_sep not and{
+				currentdict
+				Operator /imagemask eq{
+					imagemask
+				}{
+					AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get /DeviceGray eq and{
+						[/Separation /Black /DeviceGray {}] setcolorspace
+						/Decode [ Decode 1 get Decode 0 get ] def
+					}if
+					image
+				}ifelse
+			}{
+				Width Height
+				Operator /imagemask eq{
+					Decode 0 get 1 eq Decode 1 get 0 eq	and
+					ImageMatrix /DataSource load
+					AGMCORE_host_sep{
+						currentgray 1 ne{
+							currentdict imageormask_sys
+						}{
+  	 						currentoverprint not{
+  			 					1 AGMCORE_&setgray
+  	 							knockout_image_samples
+  			 					currentdict imageormask_sys
+  			 				}{
+  			 					currentdict ignoreimagedata
+  			 				}ifelse
+				 		}ifelse
+					}{
+						imagemask
+					}ifelse
+				}{
+					BitsPerComponent ImageMatrix 
+					MultipleDataSources{
+						0 1 NComponents 1 sub{
+							DataSource exch get
+						}for
+					}{
+						/DataSource load
+					}ifelse
+					Operator /colorimage eq{
+						AGMCORE_host_sep{
+							MultipleDataSources level2 or NComponents 4 eq and{
+								MultipleDataSources{
+									4 {pop} repeat
+									/DataSource [
+										DataSource 0 get /exec cvx
+										DataSource 1 get /exec cvx
+										DataSource 2 get /exec cvx
+										DataSource 3 get /exec cvx
+										/AGMCORE_get_ink_data cvx
+									] cvx def
+								}{
+									/DataSource /DataSource load filter_cmyk 0 () /SubFileDecode filter def
+								}ifelse
+	
+								/Decode [ Decode 0 get Decode 1 get ] def
+								/MultipleDataSources false def
+								/NComponents 1 def
+								/Operator /image def
+								AGMCORE_is_cmyk_sep{
+									currentoverprint InksUsed current_ink not and{
+										currentdict consumeimagedata
+									}{
+										invert_image_samples
+						 				1 AGMCORE_&setgray
+										currentdict imageormask_sys
+									}ifelse
+								}{
+										currentdict ignoreimagedata
+								}ifelse
+							}{
+									
+								MultipleDataSources NComponents AGMIMG_&colorimage						
+							}ifelse
+						}{
+							true NComponents colorimage
+						}ifelse
+					}{
+						Operator /image eq{
+							AGMCORE_host_sep{
+								/DoImage true def
+								HostSepColorImage{
+									invert_image_samples
+								}{
+									AGMCORE_black_plate not{
+										/DoImage false def
+										currentdict ignoreimagedata
+					 				}if
+								}ifelse
+						 		1 AGMCORE_&setgray
+								DoImage
+									{currentdict imageormask_sys} if
+							}{
+								image
+							}ifelse
+						}{
+							Operator/knockout eq{
+								pop pop pop pop pop
+								currentoverprint InksUsed current_ink not and{
+								}{
+									currentcolorspace overprint_plate not{
+										knockout_unitsq
+									}if
+								}ifelse
+							}if
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+			cleartomark restore
+		}if
+	end
+}def
+/sep_imageormask
+{
+ 	/sep_colorspace_dict AGMCORE_gget begin
+	/MappedCSA CSA map_csa def
+	begin
+	SkipImageProc not{
+		save mark 
+	
+		AGMCORE_avoid_L2_sep_space{
+			/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
+		}if
+ 		AGMIMG_ccimage_exists 
+		MappedCSA 0 get /DeviceCMYK eq and
+		currentdict/Components known and 
+		Name () ne and 
+		Name (All) ne and 
+		Operator /image eq and
+		AGMCORE_producing_seps not and
+		level2 not and
+		{
+			Width Height BitsPerComponent ImageMatrix 
+			[
+			/DataSource load /exec cvx
+			{
+				0 1 2 index length 1 sub{
+					1 index exch
+					2 copy get 255 xor put
+				}for
+			} /exec cvx
+			] cvx bind
+			MappedCSA 0 get /DeviceCMYK eq{
+				Components aload pop
+			}{
+				0 0 0 Components aload pop 1 exch sub
+			}ifelse
+			Name findcmykcustomcolor
+			customcolorimage
+		}{
+			AGMCORE_producing_seps not{
+				level2{
+					AGMCORE_avoid_L2_sep_space not currentcolorspace 0 get /Separation ne and{
+						[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
+						/sep_tint AGMCORE_gget setcolor
+					}if
+					currentdict imageormask
+				}{ 
+					currentdict
+					Operator /imagemask eq{
+						imageormask
+					}{
+						sep_imageormask_lev1
+					}ifelse
+				}ifelse
+ 			}{
+				AGMCORE_host_sep{
+					Operator/knockout eq{
+						currentoverprint InksUsed current_ink not and{
+						}{
+							currentdict/ImageMatrix get concat
+							knockout_unitsq
+						}ifelse
+					}{
+						currentgray 1 ne{
+ 							AGMCORE_is_cmyk_sep Name (All) ne and{
+ 								level2{
+	 								[ /Separation Name [/DeviceGray]
+	 								{ 
+	 									sep_colorspace_proc AGMCORE_get_ink_data
+										1 exch sub
+	 								} bind
+									] AGMCORE_&setcolorspace
+									/sep_tint AGMCORE_gget AGMCORE_&setcolor
+ 									currentdict imageormask_sys
+	 							}{
+	 								currentdict
+									Operator /imagemask eq{
+										imageormask_sys
+									}{
+										sep_image_lev1_sep
+									}ifelse
+	 							}ifelse
+ 							}{
+ 								Operator/imagemask ne{
+									invert_image_samples
+ 								}if
+		 						currentdict imageormask_sys
+ 							}ifelse
+ 						}{
+							currentdict consumeimagedata 
+ 							currentoverprint not Name (All) eq or{
+								gsave 
+								knockout_unitsq
+								grestore
+		 					}if
+ 						}ifelse
+		 			}ifelse
+ 				}{
+					currentcolorspace 0 get /Separation ne{
+						[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
+						/sep_tint AGMCORE_gget setcolor
+					}if
+					currentoverprint 
+					MappedCSA 0 get /DeviceCMYK eq and 
+					Name inRip_spot_has_ink not and 
+					Name (All) ne and {
+						imageormask_l2_overprint
+					}{
+						currentdict imageormask
+ 					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+		cleartomark restore
+	}if
+	end
+	end
+}def
+/imageormask_l2_overprint
+{
+	
+	currentdict
+	currentcmykcolor add add add 0 eq{
+		currentdict consumeimagedata
+	}{
+		level3{ 			
+			
+			currentcmykcolor 
+			/AGMIMG_k xdf 
+			/AGMIMG_y xdf 
+			/AGMIMG_m xdf 
+			/AGMIMG_c xdf
+			Operator/imagemask eq{
+				[/DeviceN [
+				AGMIMG_c 0 ne {/Cyan} if
+				AGMIMG_m 0 ne {/Magenta} if
+				AGMIMG_y 0 ne {/Yellow} if
+				AGMIMG_k 0 ne {/Black} if
+				] /DeviceCMYK {}] setcolorspace
+				
+				AGMIMG_c 0 ne {AGMIMG_c} if
+				AGMIMG_m 0 ne {AGMIMG_m} if
+				AGMIMG_y 0 ne {AGMIMG_y} if
+				AGMIMG_k 0 ne {AGMIMG_k} if
+				setcolor			
+			}{	
+				/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
+				[/Indexed 				
+					[
+						/DeviceN [
+							AGMIMG_c 0 ne {/Cyan} if
+							AGMIMG_m 0 ne {/Magenta} if
+							AGMIMG_y 0 ne {/Yellow} if
+							AGMIMG_k 0 ne {/Black} if
+						] 
+						/DeviceCMYK {
+							AGMIMG_k 0 eq {0} if
+							AGMIMG_y 0 eq {0 exch} if
+							AGMIMG_m 0 eq {0 3 1 roll} if
+							AGMIMG_c 0 eq {0 4 1 roll} if						
+						}
+					]
+					255
+					{
+						255 div 
+		
+						mark exch
+						dup	dup dup
+		
+						
+						AGMIMG_k 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+							
+						AGMIMG_y 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+		
+						AGMIMG_m 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+							
+						AGMIMG_c 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+						counttomark 1 add -1 roll pop
+					}
+				] setcolorspace
+			}ifelse
+			
+			imageormask_sys
+		}{
+	write_image_file{
+		currentcmykcolor
+		0 ne{
+			[/Separation /Black /DeviceGray {}] setcolorspace
+			gsave
+			/Black
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 1 roll pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		}if
+		0 ne{
+			[/Separation /Yellow /DeviceGray {}] setcolorspace
+			gsave
+			/Yellow
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 2 roll pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		}if
+		0 ne{
+			[/Separation /Magenta /DeviceGray {}] setcolorspace
+			gsave
+			/Magenta
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 3 roll pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		}if
+		0 ne{
+			[/Separation /Cyan /DeviceGray {}] setcolorspace
+			gsave
+			/Cyan 
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		} if
+				close_image_file
+			}{
+				imageormask
+			}ifelse
+		}ifelse
+	}ifelse
+} def
+/indexed_imageormask
+{
+	begin
+		save mark 
+	
+ 		currentdict
+ 		AGMCORE_host_sep{
+ 			
+			Operator/knockout eq{
+				/indexed_colorspace_dict AGMCORE_gget /CSA get map_csa overprint_plate not{
+					knockout_unitsq
+				}if
+			}{
+	 			AGMCORE_is_cmyk_sep{
+					Operator /imagemask eq{
+						imageormask_sys
+					}{
+						level2{
+							indexed_image_lev2_sep
+						}{
+							indexed_image_lev1_sep
+						}ifelse
+					}ifelse
+				}{
+					currentoverprint not{
+						knockout_image_samples
+		 				imageormask_sys
+		 			}{
+		 				currentdict consumeimagedata
+		 			}ifelse
+				}ifelse
+			}ifelse
+ 		}{
+			level2{
+				imageormask
+			}{ 
+				Operator /imagemask eq{
+					imageormask
+				}{
+					indexed_imageormask_lev1
+				}ifelse
+			}ifelse
+ 		}ifelse
+		cleartomark restore
+	end
+}def
+/indexed_image_lev2_sep
+{
+	/indexed_colorspace_dict AGMCORE_gget begin
+	begin
+		
+		currentcolorspace 
+		dup 1 /DeviceGray put
+		dup 3 [
+			currentcolorspace 3 get 
+			{
+				exch 4 mul 4 getinterval {} forall
+				AGMCORE_get_ink_data 255 div 1 exch sub
+			} /exec cvx
+		] cvx put
+		setcolorspace
+		
+		currentdict 
+		Operator /imagemask eq{
+			AGMIMG_&imagemask
+		}{
+			AGMIMG_&image
+		}ifelse
+			
+	end end
+}def
+/OPIimage
+{
+	dup type /dicttype ne{
+		10 dict begin
+			/DataSource xdf
+			/ImageMatrix xdf
+			/BitsPerComponent xdf
+			/Height xdf
+			/Width xdf
+			/ImageType 1 def
+			/Decode [0 1 def]
+			currentdict
+		end
+	}if
+	dup begin
+		/NComponents 1 cdndf
+		/MultipleDataSources false cdndf
+		/SkipImageProc {false} cdndf
+		/HostSepColorImage false cdndf
+		/Decode [
+				0 
+				currentcolorspace 0 get /Indexed eq{
+					2 BitsPerComponent exp 1 sub
+				}{
+					1
+				}ifelse
+		] cdndf
+		/Operator /image cdndf
+	end
+	/sep_colorspace_dict AGMCORE_gget null eq{
+		imageormask
+	}{
+		gsave
+		dup begin invert_image_samples end
+		sep_imageormask
+		grestore
+	}ifelse
+}def
+/spot_alias
+{
+	/mapto_sep_imageormask 
+	{
+		dup type /dicttype ne{
+			12 dict begin
+				/ImageType 1 def
+				/DataSource xdf
+				/ImageMatrix xdf
+				/BitsPerComponent xdf
+				/Height xdf
+				/Width xdf
+				/MultipleDataSources false def
+		}{
+			begin
+		}ifelse
+				/Decode [/customcolor_tint AGMCORE_gget 0] def
+				/Operator /image def
+				/HostSepColorImage false def
+				/InksUsed [] def
+				/SkipImageProc {false} def
+				currentdict 
+			end
+		sep_imageormask
+	}bdf
+	/customcolorimage
+	{
+		Adobe_AGM_Image/AGMIMG_colorAry xddf
+		/customcolor_tint AGMCORE_gget
+		bdict
+			/Name AGMIMG_colorAry 4 get
+			/CSA [ /DeviceCMYK ] 
+			/TintMethod /Subtractive
+			/TintProc null
+			/MappedCSA null
+			/NComponents 4 
+			/Components [ AGMIMG_colorAry aload pop pop ] 
+		edict
+		setsepcolorspace
+		mapto_sep_imageormask
+	}ndf
+	Adobe_AGM_Image/AGMIMG_&customcolorimage /customcolorimage load put
+	/customcolorimage
+	{
+		Adobe_AGM_Image/AGMIMG_override false put
+		dup 4 get map_alias{
+			/customcolor_tint AGMCORE_gget exch setsepcolorspace
+			pop
+			mapto_sep_imageormask
+		}{
+			AGMIMG_&customcolorimage
+		}ifelse			
+	}bdf
+}def
+level2 not{
+	/colorbuf
+	{
+		0 1 2 index length 1 sub{
+			dup 2 index exch get 
+			255 exch sub 
+			2 index 
+			3 1 roll 
+			put
+		}for
+	}def
+	/tint_image_to_color
+	{
+		begin
+			Width Height BitsPerComponent ImageMatrix 
+			/DataSource load
+		end
+		Adobe_AGM_Image begin
+			/AGMIMG_mbuf 0 string def
+			/AGMIMG_ybuf 0 string def
+			/AGMIMG_kbuf 0 string def
+			{
+				colorbuf dup length AGMIMG_mbuf length ne
+					{
+					dup length dup dup
+					/AGMIMG_mbuf exch string def
+					/AGMIMG_ybuf exch string def
+					/AGMIMG_kbuf exch string def
+					} if
+				dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
+			}
+			addprocs
+			{AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf} true 4 colorimage	
+		end
+	} def			
+	/sep_imageormask_lev1
+	{
+		begin
+			MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
+				
+				{
+					255 mul round cvi GrayLookup exch get
+				} currenttransfer addprocs settransfer
+				currentdict imageormask
+			}{
+				/sep_colorspace_dict AGMCORE_gget/Components known{
+					MappedCSA 0 get /DeviceCMYK eq{
+						Components aload pop
+					}{
+						0 0 0 Components aload pop 1 exch sub
+					}ifelse
+					
+					Adobe_AGM_Image/AGMIMG_k xddf 
+					Adobe_AGM_Image/AGMIMG_y xddf 
+					Adobe_AGM_Image/AGMIMG_m xddf 
+					Adobe_AGM_Image/AGMIMG_c xddf 
+						
+					AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
+						{AGMIMG_k mul 1 exch sub} currenttransfer addprocs settransfer
+						currentdict imageormask
+					}{ 
+						
+						currentcolortransfer
+						{AGMIMG_k mul 1 exch sub} exch addprocs 4 1 roll
+						{AGMIMG_y mul 1 exch sub} exch addprocs 4 1 roll
+						{AGMIMG_m mul 1 exch sub} exch addprocs 4 1 roll
+						{AGMIMG_c mul 1 exch sub} exch addprocs 4 1 roll
+						setcolortransfer
+						currentdict tint_image_to_color
+					}ifelse
+				}{
+					
+					MappedCSA 0 get /DeviceGray eq {
+						{255 mul round cvi ColorLookup exch get 0 get} currenttransfer addprocs settransfer
+						currentdict imageormask
+					}{
+						MappedCSA 0 get /DeviceCMYK eq {
+							currentcolortransfer
+							{255 mul round cvi ColorLookup exch get 3 get 1 exch sub} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 2 get 1 exch sub} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 1 get 1 exch sub} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 0 get 1 exch sub} exch addprocs 4 1 roll
+							setcolortransfer 
+							currentdict tint_image_to_color
+						}{ 
+							currentcolortransfer
+							{pop 1} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 2 get} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 1 get} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 0 get} exch addprocs 4 1 roll
+							setcolortransfer 
+							currentdict tint_image_to_color
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+		end
+	}def
+	/sep_image_lev1_sep
+	{
+		begin
+			/sep_colorspace_dict AGMCORE_gget/Components known{
+				Components aload pop
+				
+				Adobe_AGM_Image/AGMIMG_k xddf 
+				Adobe_AGM_Image/AGMIMG_y xddf 
+				Adobe_AGM_Image/AGMIMG_m xddf 
+				Adobe_AGM_Image/AGMIMG_c xddf 
+					
+				{AGMIMG_c mul 1 exch sub}
+				{AGMIMG_m mul 1 exch sub}
+				{AGMIMG_y mul 1 exch sub}
+				{AGMIMG_k mul 1 exch sub}
+			}{ 
+				{255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
+				{255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
+				{255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
+				{255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
+			}ifelse
+			
+			AGMCORE_get_ink_data currenttransfer addprocs settransfer
+			
+			currentdict imageormask_sys
+				
+		end
+	}def
+	/indexed_imageormask_lev1
+	{
+		/indexed_colorspace_dict AGMCORE_gget begin
+		begin
+			currentdict
+			MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
+				
+				{HiVal mul round cvi GrayLookup exch get HiVal div} currenttransfer addprocs settransfer
+				imageormask
+			}{
+				
+				MappedCSA 0 get /DeviceGray eq {
+					{HiVal mul round cvi Lookup exch get HiVal div} currenttransfer addprocs settransfer
+					imageormask
+				}{
+					MappedCSA 0 get /DeviceCMYK eq {
+						currentcolortransfer
+						{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						{4 mul HiVal mul round cvi       Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						setcolortransfer 
+						tint_image_to_color
+					}{ 
+						currentcolortransfer
+						{pop 1} exch addprocs 4 1 roll
+						{3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div} exch addprocs 4 1 roll
+						{3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div} exch addprocs 4 1 roll
+						{3 mul HiVal mul round cvi 	   Lookup exch get HiVal div} exch addprocs 4 1 roll
+						setcolortransfer 
+						tint_image_to_color
+					}ifelse
+				}ifelse
+			}ifelse
+		end end
+	}def
+	/indexed_image_lev1_sep
+	{
+		/indexed_colorspace_dict AGMCORE_gget begin
+		begin
+			{4 mul HiVal mul round cvi       Lookup exch get HiVal div 1 exch sub}
+			{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
+			{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
+			{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
+			
+			AGMCORE_get_ink_data currenttransfer addprocs settransfer
+			
+			currentdict imageormask_sys
+				
+		end end
+	}def
+}if
+end
+systemdict /setpacking known
+{
+	setpacking
+} if
+%%EndResource
+%ADOBeginClientInjection: DocumentProlog End "AI10"
+%ADOEndClientInjection: DocumentProlog End "AI10"
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndProlog
+%%BeginSetup
+%ADOBeginClientInjection: DocumentSetup Start "AI10"
+%ADOEndClientInjection: DocumentSetup Start "AI10"
+Adobe_AGM_Utils begin
+2 2010 true Adobe_AGM_Core/doc_setup get exec
+Adobe_CoolType_Core/doc_setup get exec
+Adobe_AGM_Image/doc_setup get exec
+%ADOBeginClientInjection: DocumentSetup End "AI10"
+%ADOEndClientInjection: DocumentSetup End "AI10"
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndSetup
+%%Page: rna_elements.pdf 1
+%%EndPageComments
+%%BeginPageSetup
+%ADOBeginClientInjection: PageSetup Start "AI10"
+%ADOEndClientInjection: PageSetup Start "AI10"
+Adobe_AGM_Utils begin
+Adobe_AGM_Core/page_setup get exec
+Adobe_CoolType_Core/page_setup get exec
+Adobe_AGM_Image/page_setup get exec
+%ADOBeginClientInjection: PageSetup End "AI10"
+%ADOEndClientInjection: PageSetup End "AI10"
+%%EndPageSetup
+Adobe_AGM_Core/AGMCORE_save save ddf
+1 -1 scale 0 -164.239 translate
+[1 0 0 1 0 0 ]  concat
+mark
+/0 
+[/DeviceGray] add_csa
+/CSA /0 
+/1 
+[/DeviceCMYK] add_csa
+/CSA /1 
+/2 
+[/DeviceRGB] add_csa
+/CSA /2 
+cleartomark
+800 path_rez
+% page clip
+gsave
+newpath
+gsave % PSGState
+0 0 mo
+0 164.239 li
+352.537 164.239 li
+352.537 0 li
+clp
+[1 0 0 1 0 0 ] concat
+%ADOBeginClientInjection: BeginPageContent "AI10"
+%ADOEndClientInjection: BeginPageContent "AI10"
+gsave % PSGState
+0 0 mo
+353 0 li
+353 164 li
+0 164 li
+0 0 li
+clp
+false sop
+0 0 0 rgb
+%ADOBeginSubsetFont: Courier Initial
+%!FontType1
+16 dict begin
+/FontInfo 15 dict dup begin
+/Notice (Copyright (c) 1989, 1990, 1991, 1992, 1993, 1996, 1997, 1998 Adobe Systems Incorporated.  All Rights Reserved.) def
+/version (004.000) def
+/FullName (Courier) def
+/FamilyName (Courier) def
+/Weight (Medium) def
+/ItalicAngle 0 def
+/isFixedPitch true  def
+/UnderlinePosition -224 def
+/UnderlineThickness 52 def
+end def
+/FontName /Courier def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+ def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ] def
+/FontBBox { -6 -249 639 803 } def
+/XUID [6 44052 ] def
+/StrokeWidth 0 def
+currentdict end
+currentfile eexec A0B00ED5187D9C0F1ECDF51878C3AA5CAA3EC9EBBC6A5E
+2825687306A156DACC32FBF07CD53FCFA5F8BEB4C85C022641C2817904D210EE
+C1B9CB391931A7DA79E981F6D449067CB22BBBC1C7E17F31494A030C64C3D168
+01AD7EA9844289C5FBF13E87EB38D47EFECDFD90987CE63AEE2F73A41DE9D88E
+47972B7D71DFE3C0971C15A0A2EA71DB75E8BDC8C575FCE75767F0757BD4C3C5
+8EF2FE5165B8546C92942358A58A418D001D670BAC478494625C3F163F0CD28E
+7A310B1DCF9DE24EAA3915D162715D989E4195F752D98AA3F931758A7593B8D3
+EC8B0E6F0595582B46C09C38DE491876FDE8215B3EE34EDD4786C0C7A3CE5DF1
+8A700014C8A22ABA9A86068E22E576F8F99D9E02926B326829224A29008B6A42
+68E0572B16A9483D4982E08663803B6B595CE202EC34889AD55E68C1517B0147
+AAD37FD80C565A7442B8F0EB1481B8237F6BFE35261E22DC029FEE4D3F209D80
+2EF7B2A2864A8B0A54139C8EBAEDBF9E51A55C608E32A4923E2C1FCA43DCD5C1
+779278E12954773FFC02D1AC37E82896B5600D237CDF49D06665F52AAC93A099
+EFC6D65BD9857E2326543E4C47F9CAC6F3585FB5A3669036ECF0F6C47CA5A928
+5E52478ABFFDF5B789B97FB56E47A38537631B551770393C1118D978F755B1F7
+4E8DA30A09AA5EB90487A9405862EA007BF66633C9F580B996E8D0A275B43BE8
+1189FE61073FC03A9B1F3CEC85EC476BF67B6C47746321F58F096D099F9B11EA
+1A831B62ABEC9959ACE371407E1CB3C0FD111DE17536B349BA959E0BEABDCE76
+3683EB04F536BFDAFDCD692AA7019CEFDDB9D8BA507FA146D8BD2A2A55FC80F6
+6637AD8EA0CEB1BDD84A60BD5C13B07F9A0B4036A0EFCC76A9511C476D839F68
+3323611F9D9EA6F9724485B677B50B645AE76E53584D93A7CD7573E43D0FFBF2
+74F321FD07CF320580AD97B00988306FCD048D6087241B4034BFF6672B8E649C
+84F1C4A6CE4C8A5AF0DB83D8CFF7689E8698F7A29A60E951FA4397A9A53702C9
+2C21745DDE740EC662DEC80CF9B610531B7CF950A029E51A236B17C9E9F3FFAA
+0AF4C58A51B1E01EBC8C990EEE5C9B9ED9F97FA152087C87997AF19E9600C4B9
+8CCB0DB1DFF49F41E6C74B96D496BF9AC15254F424F86FA2958DF294EB62F4FB
+4D9E274C00EFDC6BAB7E4D7F2C4CE074BBD7FD6D03304D718AD80FEBBDA6BE1B
+6422CDA2B7143B6FB19A24A1B4155C3F289A692A41430A3B00AADBBB832E1CF9
+65E2BBEACDED81B3E7D3F7C0EA441754AD2419D6F7B9FB92A9EB440E60431A99
+A2909BF6280F444E04D15F8ADF0F355A53C3B1A27DDB57388E194357F2F872FF
+8CCFEAB306C4004426398C2A6EA105D100192328D5C0F7FDCA875F673927EB95
+4D88E506BD3E184BDF09551E01FD095818CED7AE3FE4C9BFE1810F02ABCB97F1
+8892C6EA45D3611DF6736FDBD05BE05C269120B0F0721C756C028060050A2F53
+005C8406D99AE74D9A82CEB53399FCDB0E34EC3FFCD1853EEF964FF3E79365AE
+2F074713342E1DE752D1FE3B62481D6003BDDB64535A61B22C44D432004DA354
+352C585641C5D50553C105B50C5335043686AB9B62E88A0ACC26B45A85BC8153
+A096C00968110C1D5FAA7C106CAE657BA442022B722BF32A2B84250F34A3CF22
+5B33D0746E3BC4C30D3993A2B2011F23203AFD0DBE639D13A9E8F51C411B046D
+15E72C38C42D2D99E004E0A2688F5C8B6FDE40D784CAB4BBF31C973B353D893C
+FE510F88EDE3858228EEB7DE76F0865068704569F04FDAF9FAC67ABE36D36ED1
+D656D61D00160365F4F65F3EE22ACAFCF456E8121BEC649985EE7A0E2A555B95
+A862A3F7A2F88E6A13715B605FCC01A0B1DA2AED0528D0FAD252917C23C4BC4B
+EA1F35CCA75FD34CBE7FAC66DE590E32CF3FB5E534D3B8D49CFD4D6EF1947C1A
+1DDBF061B43537C973C8862CD3F9374419BA451D6BC80AA72EED19F9AEB0302E
+777C3AED7FDD18F0C69652182A0CF97067AE10167AB30134D691DD67C451DA00
+A88CB867940EE3C7BD7BFB3595CAFE3D85EAD141D8FD04D825E9430448666AD7
+32C50CDD1A19DFE58A023670A3D6494316BA229AC33FA5156AAEF81CDDAF9A88
+33FDAEA2351DF58D8994855A8B40660B88FFCB204BF8BB4212D25E96C45241C4
+B12702D5139739EA0D8DA9502846EAB7C945ED385BEB01FF11433E055DC9DC1E
+5E775594DA9CFB49056F25EC15609C12C4B91661D8572CAE917A35066D4AC3D4
+4E4E9A309F66FC5DD4C520FE1F4B7363DC608EC00A50BB5C63D141A54E75C347
+0284637F3AD1A6717CBFB4EE47A166E581A1C78EE225F6A292C548315FAE75CE
+A0EDE520FB1F350E10260F63DDA78F57
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+/Courier findfont /Encoding get
+dup 65 /A put
+dup 71 /G put
+dup 85 /U put
+pop
+%ADOEndSubsetFont
+/Courier*1 
+[
+65{/.notdef}repeat /A 5{/.notdef}repeat /G 13{/.notdef}repeat /U 170{/.notdef}repeat
+] /Courier nfnt
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+43 91.333 mov
+(A) sh
+38 100.86 mov
+(A) sh
+57 91.333 mov
+(U) sh
+62 100.86 mov
+(G) sh
+53.5 89.7803 mo
+54.3286 89.7803 55 89.1084 55 88.2803 cv
+55 87.4521 54.3286 86.7803 53.5 86.7803 cv
+52.6714 86.7803 52 87.4521 52 88.2803 cv
+52 89.1084 52.6714 89.7803 53.5 89.7803 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+%ADOBeginSubsetFont: Courier AddGlyphs
+
+
+currentfile eexec A0B00ED553D88C5C0C79D03A57EC9671B1D399F226CD7C
+D65ACF5F52191B6189AD006088DC248B070400A2FF50090550BDD59C4446787C
+36C6E6DF3FBF7A9A4DAD53ACCA57616FFD3E7C1C1A87B388892CC4BDF41FF3A4
+C6F6848B0EFB4E4E3A271A45CE29514393F5A9592F4992EFD9218BDCA0823462
+B1F6698B4CF7C2F36BEA9C60E9BE5A785D6DF5030D473A344B60FD225DD93A0F
+6A2EBF54692182D3BB513E143D45245281160E4B2F6FF2E195EB8EA18496277B
+A659A2E8378FAC658A98331B480590028B0FF2914BF42BD1AFA9811122DADACB
+F1B1F7A8E131A05CDC992607B19E4150F4588170D1E81B5E8F6F8B5665F1BF5C
+0C57648A28EC35FEAEE4D4BEB632DA54170FA33130E3B8351E81E7EB5EC921E1
+EC88BA82C86B3A3BF7D479964DA514A8E06214893CC325D112345F6E79534221
+78B554FBF4C1EB0BC924326E30CB02D1984819F32AE9F6590A0F097954E446C3
+719D5B25858EDC6CDB11DA317EEF88C0DC6AD70824905387662FF0002DB58D4E
+8DA4CC64
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+/Courier findfont /Encoding get
+dup 65 /A put
+dup 67 /C put
+dup 71 /G put
+dup 85 /U put
+pop
+%ADOEndSubsetFont
+/Courier*1 
+[
+65{/.notdef}repeat /A /.notdef /C 3{/.notdef}repeat /G 13{/.notdef}repeat /U 
+170{/.notdef}repeat
+] /Courier nfnt
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+43 81.3335 mov
+7.403 0 (GC) ash
+62 72.3335 mov
+(G) sh
+53.5 79.7808 mo
+54.3286 79.7808 55 79.1094 55 78.2808 cv
+55 77.4526 54.3286 76.7808 53.5 76.7808 cv
+52.6714 76.7808 52 77.4526 52 78.2808 cv
+52 79.1094 52.6714 79.7808 53.5 79.7808 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+43 63.3335 mov
+7.403 0 (GC) ash
+53.5 61.7808 mo
+54.3286 61.7808 55 61.1094 55 60.2808 cv
+55 59.4526 54.3286 58.7808 53.5 58.7808 cv
+52.6714 58.7808 52 59.4526 52 60.2808 cv
+52 61.1094 52.6714 61.7808 53.5 61.7808 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+43 53.3335 mov
+(C) sh
+38 45.3335 mov
+(A) sh
+33 37.3335 mov
+(A) sh
+57 53.3335 mov
+(G) sh
+53.5 51.7808 mo
+54.3286 51.7808 55 51.1094 55 50.2808 cv
+55 49.4526 54.3286 48.7808 53.5 48.7808 cv
+52.6714 48.7808 52 49.4526 52 50.2808 cv
+52 51.1094 52.6714 51.7808 53.5 51.7808 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+67 127.386 mov
+(C) sh
+59.667 135.386 mov
+(U) sh
+67 110.386 mov
+(G) sh
+70.2998 117.333 mo
+71.1284 117.333 71.7998 116.661 71.7998 115.833 cv
+71.7998 115.005 71.1284 114.333 70.2998 114.333 cv
+69.4717 114.333 68.7998 115.005 68.7998 115.833 cv
+68.7998 116.661 69.4717 117.333 70.2998 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+34 127.386 mov
+(G) sh
+41.25 135.386 mov
+(A) sh
+50.5 138.386 mov
+(U) sh
+34 110.386 mov
+(C) sh
+37.2998 117.333 mo
+38.1284 117.333 38.7998 116.661 38.7998 115.833 cv
+38.7998 115.005 38.1284 114.333 37.2998 114.333 cv
+36.4717 114.333 35.7998 115.005 35.7998 115.833 cv
+35.7998 116.661 36.4717 117.333 37.2998 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+25 127.386 mov
+(G) sh
+25 110.386 mov
+(C) sh
+28.2998 117.333 mo
+29.1284 117.333 29.7998 116.661 29.7998 115.833 cv
+29.7998 115.005 29.1284 114.333 28.2998 114.333 cv
+27.4717 114.333 26.7998 115.005 26.7998 115.833 cv
+26.7998 116.661 27.4717 117.333 28.2998 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+16 127.386 mov
+(U) sh
+8 132.386 mov
+(A) sh
+16 110.386 mov
+(A) sh
+8 105.386 mov
+(A) sh
+0 118.886 mov
+(C) sh
+19.2998 117.333 mo
+20.1284 117.333 20.7998 116.661 20.7998 115.833 cv
+20.7998 115.005 20.1284 114.333 19.2998 114.333 cv
+18.4717 114.333 17.7998 115.005 17.7998 115.833 cv
+17.7998 116.661 18.4717 117.333 19.2998 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+76 127.386 mov
+(A) sh
+89 132.386 mov
+(U) sh
+76 110.386 mov
+(U) sh
+84 105.386 mov
+2.39799 0 (CC) ash
+79.2998 117.333 mo
+80.1284 117.333 80.7998 116.661 80.7998 115.833 cv
+80.7998 115.005 80.1284 114.333 79.2998 114.333 cv
+78.4717 114.333 77.7998 115.005 77.7998 115.833 cv
+77.7998 116.661 78.4717 117.333 79.2998 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+101 127.386 mov
+(G) sh
+101 110.386 mov
+(C) sh
+104.3 117.333 mo
+105.128 117.333 105.8 116.661 105.8 115.833 cv
+105.8 115.005 105.128 114.333 104.3 114.333 cv
+103.472 114.333 102.8 115.005 102.8 115.833 cv
+102.8 116.661 103.472 117.333 104.3 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+110 127.386 mov
+(C) sh
+118 132.386 mov
+(U) sh
+126 123.386 mov
+(U) sh
+110 110.386 mov
+(G) sh
+118 105.386 mov
+(G) sh
+126 114.386 mov
+(C) sh
+113.3 117.333 mo
+114.128 117.333 114.8 116.661 114.8 115.833 cv
+114.8 115.005 114.128 114.333 113.3 114.333 cv
+112.472 114.333 111.8 115.005 111.8 115.833 cv
+111.8 116.661 112.472 117.333 113.3 117.333 cv
+0 0 0 rgb
+f
+1 lw
+0 lc
+0 lj
+4 ml
+[] 0 dsh
+true sadj
+64.7476 45.9541 mo
+68.9902 41.7114 li
+27.3906 26.4238 mo
+31.6333 30.6665 li
+0 0 0 rgb
+s
+0 0 0 rgb
+%ADOBeginSubsetFont: Courier AddGlyphs
+
+
+currentfile eexec A0B00ED553D88C5C0C79D03A57EC9671B1D399F226CD7C
+D65ACF5F52191B6189AD006088DC248B070400A2FF50090550BDD59C4446787C
+36C6E6DF3FBF7A9A4DAD53ACCA57616FFD3E7C1C1A87B388892CC4BDF41FF3A4
+C6F6848B0EFB4E4E3A271A45CE29514393F5A9592F4992EFD9218BDCA0823462
+B1F6698B4CF7C2F36BEA9C60E9BE5A785D6DF5030D473A344B60FD225DD93A0F
+6A2EBF54692182D3BB513E143D45245281160E4B2F6FF2E195EB8EA18496277B
+A659A2E8003D3837B9825544141CA39B39A028185D0F1B9A8ACE9E8D362B13C3
+0C748D2820FE7BC93228B8D35EE6B0963141FAB1C762DA897ACB3E2AEF7365F5
+E0972CF7FBDC589114AC452C374059C4DFB83382251758E4571694D9D39BE593
+CCBD0CBBD944E8C0D94F977749D66725D3DA5BD9D4785C0500607106B2903596
+583DEA9A9E75A8FAB1F4AD1D4AFF356D6EB6B56801A054C52BDB02F7EA12E992
+3FAF115542E6B8248CC6CCBA1970AA52D6E7CD0B9DD90F78ACB18EE89ACCC68A
+94FF17C652111D4EBD77A6D6247DF4065B9501BA65FF1D1A7ED3E4FF00D2A468
+4B3B45DF6C72AAF8A3B528542D12A6963EBE28884AAC7303CBFEB1D85AA2B6C1
+C17D480798EF976114861B37F7BD8D632635995628525F4AC853ECF262B36B0B
+EABC18BA1B763E3639C8E2814E498DC9AF35AF278628592ABEC9D8AC975369B2
+1031687BFD8D207563B5553EFA65ECA30A6B688E7068C6092DD2C1305276D188
+FC24070DA4FA78EDEEE54D3E7DB74DF13EDFA659DB8A783B3CC77D59329B0023
+B0D00BA26992175DD1015B3C4FEDDAE2C7AD006435128E7211B5831E1F5C1797
+D816125DF6970B565688AF0218E1694D9737A5164998
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+/Courier findfont /Encoding get
+dup 51 /three put
+dup 53 /five put
+dup 65 /A put
+dup 67 /C put
+dup 71 /G put
+dup 85 /U put
+dup 169 /quotesingle put
+pop
+%ADOEndSubsetFont
+/Courier*1 
+[
+51{/.notdef}repeat /three /.notdef /five 11{/.notdef}repeat /A /.notdef /C 
+3{/.notdef}repeat /G 13{/.notdef}repeat /U 83{/.notdef}repeat /quotesingle 86{/.notdef}repeat
+] /Courier nfnt
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+19.8931 26.6665 mov
+(5\251) sh
+70.5601 41 mov
+(3\251) sh
+222 91.333 mov
+(A) sh
+217 100.86 mov
+(A) sh
+236 91.333 mov
+(U) sh
+241 100.86 mov
+(G) sh
+232.5 89.7803 mo
+233.328 89.7803 234 89.1084 234 88.2803 cv
+234 87.4521 233.328 86.7803 232.5 86.7803 cv
+231.672 86.7803 231 87.4521 231 88.2803 cv
+231 89.1084 231.672 89.7803 232.5 89.7803 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+222 81.3335 mov
+7.403 0 (GC) ash
+241 72.3335 mov
+(G) sh
+232.5 79.7808 mo
+233.328 79.7808 234 79.1094 234 78.2808 cv
+234 77.4526 233.328 76.7808 232.5 76.7808 cv
+231.672 76.7808 231 77.4526 231 78.2808 cv
+231 79.1094 231.672 79.7808 232.5 79.7808 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+222 63.3335 mov
+7.403 0 (GC) ash
+232.5 61.7808 mo
+233.328 61.7808 234 61.1094 234 60.2808 cv
+234 59.4526 233.328 58.7808 232.5 58.7808 cv
+231.672 58.7808 231 59.4526 231 60.2808 cv
+231 61.1094 231.672 61.7808 232.5 61.7808 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+222 53.3335 mov
+(C) sh
+217 45.3335 mov
+(A) sh
+212 37.3335 mov
+(A) sh
+236 53.3335 mov
+(G) sh
+232.5 51.7808 mo
+233.328 51.7808 234 51.1094 234 50.2808 cv
+234 49.4526 233.328 48.7808 232.5 48.7808 cv
+231.672 48.7808 231 49.4526 231 50.2808 cv
+231 51.1094 231.672 51.7808 232.5 51.7808 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+246 127.386 mov
+(C) sh
+238.667 135.386 mov
+(U) sh
+246 110.386 mov
+(G) sh
+249.3 117.333 mo
+250.128 117.333 250.8 116.661 250.8 115.833 cv
+250.8 115.005 250.128 114.333 249.3 114.333 cv
+248.472 114.333 247.8 115.005 247.8 115.833 cv
+247.8 116.661 248.472 117.333 249.3 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+213 127.386 mov
+(G) sh
+220.25 135.386 mov
+(A) sh
+229.5 138.386 mov
+(U) sh
+213 110.386 mov
+(C) sh
+216.3 117.333 mo
+217.128 117.333 217.8 116.661 217.8 115.833 cv
+217.8 115.005 217.128 114.333 216.3 114.333 cv
+215.472 114.333 214.8 115.005 214.8 115.833 cv
+214.8 116.661 215.472 117.333 216.3 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+204 127.386 mov
+(G) sh
+204 110.386 mov
+(C) sh
+207.3 117.333 mo
+208.128 117.333 208.8 116.661 208.8 115.833 cv
+208.8 115.005 208.128 114.333 207.3 114.333 cv
+206.472 114.333 205.8 115.005 205.8 115.833 cv
+205.8 116.661 206.472 117.333 207.3 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+195 127.386 mov
+(U) sh
+187 132.386 mov
+(A) sh
+195 110.386 mov
+(A) sh
+187 105.386 mov
+(A) sh
+179 118.886 mov
+(C) sh
+198.3 117.333 mo
+199.128 117.333 199.8 116.661 199.8 115.833 cv
+199.8 115.005 199.128 114.333 198.3 114.333 cv
+197.472 114.333 196.8 115.005 196.8 115.833 cv
+196.8 116.661 197.472 117.333 198.3 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+255 127.386 mov
+(A) sh
+268 132.386 mov
+(U) sh
+255 110.386 mov
+(U) sh
+263 105.386 mov
+2.39799 0 (CC) ash
+258.3 117.333 mo
+259.128 117.333 259.8 116.661 259.8 115.833 cv
+259.8 115.005 259.128 114.333 258.3 114.333 cv
+257.472 114.333 256.8 115.005 256.8 115.833 cv
+256.8 116.661 257.472 117.333 258.3 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+280 127.386 mov
+(G) sh
+280 110.386 mov
+(C) sh
+283.3 117.333 mo
+284.128 117.333 284.8 116.661 284.8 115.833 cv
+284.8 115.005 284.128 114.333 283.3 114.333 cv
+282.472 114.333 281.8 115.005 281.8 115.833 cv
+281.8 116.661 282.472 117.333 283.3 117.333 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+289 127.386 mov
+(C) sh
+297 132.386 mov
+(U) sh
+305 123.386 mov
+(U) sh
+289 110.386 mov
+(G) sh
+297 105.386 mov
+(G) sh
+305 114.386 mov
+(C) sh
+292.3 117.333 mo
+293.128 117.333 293.8 116.661 293.8 115.833 cv
+293.8 115.005 293.128 114.333 292.3 114.333 cv
+291.472 114.333 290.8 115.005 290.8 115.833 cv
+290.8 116.661 291.472 117.333 292.3 117.333 cv
+0 0 0 rgb
+f
+243.748 45.9541 mo
+247.99 41.7114 li
+206.224 25.6323 mo
+210.467 29.875 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Courier*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+198.894 26.6665 mov
+(5\251) sh
+249.56 41 mov
+(3\251) sh
+224.633 46.6665 mo
+224.633 29.396 li
+210.633 29.396 li
+210.633 46.6665 li
+224.633 46.6665 li
+cp
+248.3 73.3335 mo
+248.3 64.396 li
+239.967 64.396 li
+239.967 73.3335 li
+248.3 73.3335 li
+cp
+231.344 140.667 mo
+226.677 139.333 217.795 139.147 219.011 134.667 cv
+221.633 124.999 229.633 105.999 216.011 100.333 cv
+214.472 99.6924 214.01 94.333 217.01 92.999 cv
+219.344 91.999 230.677 94.667 233.011 94.667 cv
+231.967 94.667 li
+234.3 94.667 245.633 91.999 247.967 92.999 cv
+250.967 94.333 250.473 99.6201 248.967 100.333 cv
+236.3 106.333 244.3 120.999 245.967 134.667 cv
+246.528 139.274 238.3 139.333 233.633 140.667 cv
+231.344 140.667 li
+cp
+219.967 128.667 mo
+219.967 102.999 li
+194.3 102.999 li
+194.3 128.667 li
+219.967 128.667 li
+cp
+279.633 133.333 mo
+279.633 97.333 li
+262.3 97.333 li
+262.3 133.333 li
+279.633 133.333 li
+cp
+313.32 133.333 mo
+313.32 97.333 li
+295.987 97.333 li
+295.987 133.333 li
+313.32 133.333 li
+cp
+0 0 0 rgb
+s
+0 0 0 rgb
+%ADOBeginSubsetFont: ArialMT Initial
+11 dict begin
+/FontName /ArialMT def
+/FontMatrix [1 1000 div 0 0 1 1000 div 0 0 ] def
+/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
+/PaintType 0 def
+/FontType 1 def
+/FontBBox { 0 0 0 0 } def
+/FontInfo 1 dict dup begin
+  /OrigFontType /TrueType def
+end readonly def
+currentdict
+end
+
+systemdict begin
+dup /Private 7 dict dup begin
+/BlueValues [-15 0 600 650] def
+/MinFeature {16 16} def
+/password 5839 def
+/ND {def} def
+/NP {put} def
+/RD {string currentfile exch readhexstring pop} def
+2 index /CharStrings 1296 dict dup begin
+/.notdef 
+<10bf317005b6d50bd3b903bc9f60e6e804630266f839393d56ae50a85fbe
+ffec110deebde9f8a007323688ac> ND 
+/space 
+<10bf317079c7734bf7> ND 
+/hyphen 
+<10bf31705995db6ed81c8e93e5d1d568f767c41aee4b2647d0> ND 
+/a 
+<10bf31705d64e193f9f1f8a567d03549fa73483ae9b672d7b7797200c526
+6d55e0abf05d082c89da2ef3d2f91996aeea18b52bf494757c5251c9374c
+9401f98b0cace0d4875f7ed6fd1c3b2afb70e988b112b201a9d47e0c13f4
+1047852d209bb94beef969307b8c216c427c9903125ecb96a03389115b44
+edc7e2e2478a1fd25f07acc3624f3ed1b5defe5adc0d2b5c9f2461afba44
+82f331b79ca3a770e50164bc5ea7976dee8e016d390d83fcc1fa4202137b
+503516f93235eba4c56226d091ad7f8be6c874f34a5fb2592031776db147
+88325910cfdd12dfbef218194f528860b4df22c468e92140ddaed77110f7
+ac35f3eb45ccb9aa77fa9fad75c6eb6c0fb7ca> ND 
+/b 
+<10bf31703e65fd7e1217c9f29c64bb1b9e17851bf25dd0466fa484e27564
+2ef62da05fc0e561425aa7c0cf759f2df2fed9f5cab4e563d9d485ca6e49
+6a23023cc7d5336a38ed163f6d25eac0416c891913363ad8aab5312feed7
+de0b0bbcc0db8b66958d96174480f5040af2cfb1590a9410022fc6398cb1
+d4435f6325a11aad4c77347983eb4748b4ada02263a3> ND 
+/c 
+<10bf317040c2e74a5fc1787aadb34082a8ba9190bcda4e6309e8a2068a81
+15bfd146d0733468211951e54d63b47a4bb20769a10fe2c7ab6af1003e92
+c307e62580c4fc4fcb30f321670fe8ea6fc382860db4ab478167543744c2
+7eee42bb190b50ff8a3de3702b096b5a0dbc687d9934d27330861f8f151c
+46c0261f0a9972bb3873263c80a2161987b9c9> ND 
+/d 
+<10bf31705fc19346123ea144938c3fcda937cd4a672f67877e80be643ef8
+5a01cff57f62859595ad9c2a1ef16f4c22144c6fc4d200f23642de52d57f
+47e47c78a8b6713f5cb6dcd4a475047f70e7386f0baddd9f1c37f1598f60
+1bc5b6005acf2115ed4aa52ed6ed621e5045f115e6c8ed146247e81ce086
+3c881ef71e6e234403d5f37c528c6ebb0616bbdc05a29ca9d830ed27448f
+> ND 
+/e 
+<10bf3170422fdb64737aa996af2c16aa574465e2c930c2d6c70f2c72ffe1
+f5ae975a706a2cc8ae00b6163837b6e50d4221eaf76eb409c442c6352c58
+b6f53cd585b0d4d507cc48acee66f883df189a3c8bf101622dd4022876bd
+14603c08f3944b80e2f5e4e7a62999282a391fd9d657c5f0af2673747752
+c83501ca742ca70911b84f52143e873794bcaff697373392d39b09bb> ND 
+/g 
+<10bf3170599a82ae9f38a9e935b4e0f3d7776326ecd8d725592828643987
+c2e996bcd7d71545c3eb62141100b3029b5db47d5a1c74ff1f384da4be0e
+6cf0ee7a06a6ed308265b547c61245dd74ea50abb0d2d3cd2399420ee06e
+7956a28a86fe6b998b8722a5746802f533a367725615f062015db919f3df
+3c1161274e44726519555c137d48159ae02477eb468fd9fc7a3d8570c8a3
+e043f93c86fb8138e2b07c9d11fc45f70eb798bfa21ffadc315e7d76733b
+5b2c49936a2059f2200afe935aa8ae6d77bf03212f2cde46> ND 
+/h 
+<10bf31703f932f5ecb68c849e33d1fed17c766a03dcb89fd4259247501b2
+92adfc2297be69c7091e34ced000096d0ca29850717d0ee8abe567011317
+96a4072dab7df40090735d5712990fb13b0847093cc929cc1cd64c87dd80
+565b94c081eb> ND 
+/i 
+<10bf31703f9c43ec382ac71b0be91f29c503cae1b1e6095503cc0fe0ac65
+3b18436e1776> ND 
+/l 
+<10bf31703962bf7b2e903c47f674adcdf4f2bfaa638a> ND 
+/m 
+<10bf31703f92f56d921ff977e5d6963369571a0659b0c0d4b90a5d6fb9cf
+6faeef66a6b161cb3d25beb050c083e79f2022ade1c13065af4f750db4fe
+1ad2e1c991cb72a1a606eb51e0d41e91fb4441b42920d1b3a1093a55a67e
+1a1fd7d653f510dbcf49e0790e917a5508d455454558a59585ba63bcbeb1
+95200dede71b995b075a583acbe0294673e1e62af20184e1e4ef7c875961
+9374c008bd7ea0a3f8> ND 
+/n 
+<10bf31703f932f5ecb68c849e33d657776fc326fe2f54f4bc03b7f3fa95b
+3e37550287a3822f66bab52dc802d77dcc608442caba0a099550a895735f
+067f96366abd71cd4bfcf52bc4da085550e8eac7df2e04a58377ae472993
+06a8805e14d9bcbf32aaef31> ND 
+/o 
+<10bf31705e921373942a1df751ebc6db4ec72c05404f7de2844dacd3e4cf
+31126a38f288b6ae9b7d8f2dfbc6da8ac0d7c81b1e33f3b0d42a36c4711f
+eaf8cb9fa6d4a4a92b6ac2214800466fb64367d9087f85fe66540f2cdace
+637f2d8f1a779e763ea7643d7ab1f37b5e7c3da5a24dc2e927da3937c07b
+4fef169bc767237647c3151dea42fc9d1c> ND 
+/p 
+<10bf31703f932f5ecb85f9f26ec0d7d79e55a006319a903b4934e0296676
+bb7a5df970714192f29a85860f4cb191aa4b83ebc5b58328ecf58ed9d6ff
+d0d3a63dd21733d64450e3abce2a149390b0894b2fb0fce1ee78d045f446
+04c31c787e13fdae7e79785a1956f734ed54b976e123646b63ce5bee0b68
+59b26a26c2ad993325ab7bd77cdd1be893a8ccd1451854fed772889a0d7d
+7791ac97d81ac7> ND 
+/r 
+<10bf31703e6aa4be08d01c511eaadd0473a3483c7b936ed6e6cf91cffcbd
+a815b8df60ae150c20432c17a46c0682480f6226770a8905e960aec3fe5e
+934f4cc994b08abf0fc9d432168086e4> ND 
+/s 
+<10bf3170586c182310772ef569c52e8a28e70ab0d8a07df40f23a570f6b8
+110b6ca531096c401daf049a20dcabf79d56164e73db3a474a30573096a7
+404eb97e5ce29f730842fc393ad09b95ed0671e10fb71efb1a363521b013
+915cc88b3ac6f0ba589395594814da911281623368756fb16579fa9358a8
+75b177830c9cbc6555453d35bc648383a53ae4cf9040fc62716099ee082d
+9b7578cf9dde30b64249b8b9795ff42c9c8ae9907909c29f306594b1c23c
+555bcd231348fd1800442f0eb86aff30c0e412f71e22a228c30832473ba4
+3b655be973df9c78943b851583a400b4a0e41168da8a907e9f2f> ND 
+/t 
+<10bf31706fd71d386b6c99b1d09bb1ad104eda9ab80d9f94a735d54116f5
+9c58b6bda429b5392910a11f88b68881d1c7fdb07e40a06d14aa641d6e68
+4a64544555b97e482a6c7cb4aa6fb83472e09b52ff42b290b85900fae15f
+7904eb69f44b98bcd014> ND 
+/u 
+<10bf3170396d6c263643d7ba7494b52feb74e74b6fa68562a82a97fbbf5e
+bed8907781d8ac84572229182c5c4b88be68c16550f8f2c56a1aafc9bc96
+2dd9615eeaed29124f4b67a26151f4cd2e0ab6ff1b11f4d5d3a9d63d9288
+f75e43ea4479033e77ce4d726627ff6cb14d9150> ND 
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+end
+/ArialMT findfont /Encoding get
+dup 32 /space put
+dup 45 /hyphen put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+pop
+%ADOEndSubsetFont
+/ArialMT*1 
+[
+32{/.notdef}repeat /space 12{/.notdef}repeat /hyphen 51{/.notdef}repeat /a /b /c 
+/d /e /.notdef /g /h /i 2{/.notdef}repeat /l 
+/m /n /o /p /.notdef /r /s /t 
+/u 138{/.notdef}repeat
+] /ArialMT nfnt
+/ArialMT*1 findfont [11 0 0 -11 0 0 ]mfnt sfnt
+225.967 11 mov
+(unstructured single strand) sh
+119.633 75.3335 mov
+(multi-branched loop) sh
+274.967 43.8335 mov
+(b) sh
+281.348 43.8335 mov
+(ulge loop) sh
+189.633 156.001 mov
+(stem) sh
+256.967 160.667 mov
+(interior loop) sh
+294.967 75.3335 mov
+(hairpin loop) sh
+226.967 14 mo
+225.3 24.3335 li
+0 0 0 rgb
+s
+225.936 26.8286 mo
+226.691 25.2759 227.317 24.2881 228.054 23.063 cv
+223.074 22.2603 li
+223.221 22.7646 223.672 24.7886 223.9 26.5 cv
+224.146 28.332 224.252 29.9746 224.216 31.0225 cv
+224.51 30.0161 225.126 28.4902 225.936 26.8286 cv
+0 0 0 rgb
+f
+272.3 47 mo
+254.279 60.3345 li
+0 0 0 rgb
+s
+252.963 62.5474 mo
+254.597 61.9849 255.737 61.7295 257.124 61.3853 cv
+254.174 57.2939 li
+253.92 57.7544 252.807 59.5034 251.758 60.8755 cv
+250.636 62.3438 249.548 63.5791 248.78 64.2935 cv
+249.7 63.7905 251.216 63.1484 252.963 62.5474 cv
+0 0 0 rgb
+f
+307.331 79.5049 mo
+305.664 89.8389 li
+0 0 0 rgb
+s
+306.3 92.333 mo
+307.056 90.7803 307.682 89.7939 308.418 88.5674 cv
+303.438 87.7646 li
+303.585 88.2686 304.035 90.2939 304.265 92.0049 cv
+304.511 93.8369 304.616 95.4795 304.58 96.5283 cv
+304.874 95.5205 305.49 93.9951 306.3 92.333 cv
+0 0 0 rgb
+f
+205.244 79.9995 mo
+211.74 88.2061 li
+0 0 0 rgb
+s
+214.01 89.4229 mo
+213.375 87.8174 213.068 86.6885 212.663 85.3174 cv
+208.707 88.4482 li
+209.179 88.6807 210.976 89.7158 212.393 90.7021 cv
+213.91 91.7568 215.192 92.7881 215.941 93.5244 cv
+215.397 92.6279 214.688 91.1416 214.01 89.4229 cv
+0 0 0 rgb
+f
+200.245 145.54 mo
+203.499 135.591 li
+0 0 0 rgb
+s
+203.259 133.028 mo
+202.271 134.444 201.499 135.321 200.581 136.417 cv
+205.375 137.985 li
+205.309 137.464 205.179 135.396 205.218 133.669 cv
+205.26 131.819 205.411 130.181 205.611 129.151 cv
+205.163 130.101 204.317 131.513 203.259 133.028 cv
+0 0 0 rgb
+f
+279.886 148.997 mo
+274.867 139.812 li
+0 0 0 rgb
+s
+272.835 138.231 mo
+273.189 139.921 273.301 141.085 273.47 142.503 cv
+277.896 140.085 li
+277.472 139.776 275.875 138.454 274.645 137.243 cv
+273.326 135.946 272.236 134.714 271.623 133.862 cv
+272.007 134.839 272.456 136.421 272.835 138.231 cv
+0 0 0 rgb
+f
+grestore % PSGState
+%ADOBeginClientInjection: EndPageContent "AI10"
+userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse

+%ADOEndClientInjection: EndPageContent "AI10"
+% page clip
+grestore
+grestore % PSGState
+Adobe_AGM_Core/AGMCORE_save get restore
+%%PageTrailer
+%ADOBeginClientInjection: PageTrailer Start "AI10"
+%ADOEndClientInjection: PageTrailer Start "AI10"
+Adobe_AGM_Image/page_trailer get exec
+Adobe_CoolType_Core/page_trailer get exec
+Adobe_AGM_Core/page_trailer get exec
+currentdict Adobe_AGM_Utils eq {end} if
+%ADOBeginClientInjection: PageTrailer End "AI10"
+%ADOEndClientInjection: PageTrailer End "AI10"
+%%Trailer
+%ADOBeginClientInjection: DocumentTrailer Start "AI10"
+%ADOEndClientInjection: DocumentTrailer Start "AI10"
+Adobe_AGM_Image/doc_trailer get exec
+Adobe_CoolType_Core/doc_trailer get exec
+Adobe_AGM_Core/doc_trailer get exec
+%ADOBeginClientInjection: DocumentTrailer End "AI10"
+%ADOEndClientInjection: DocumentTrailer End "AI10"
+%%EOF
+%AI9_PrintingDataEnd
+
+userdict /AI9_read_buffer 256 string put
+userdict begin
+/ai9_skip_data
+{
+	mark
+	{
+		currentfile AI9_read_buffer { readline } stopped
+		{
+		}
+		{
+			not
+			{
+				exit
+			} if
+			(%AI9_PrivateDataEnd) eq
+			{
+				exit
+			} if
+		} ifelse
+	} loop
+	cleartomark
+} def
+end
+userdict /ai9_skip_data get exec
+%AI9_PrivateDataBegin
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Adobe Illustrator(R) 10.0
+%%AI8_CreatorVersion: 10.0
+%%For: (Sean R Eddy) (Washington University)
+%%Title: (rna_elements.eps)
+%%CreationDate: 3/27/03 8:56 AM
+%AI9_DataStream
+%Gas/p>H]?pFe/ED!<.b%*XG:rLK%M6DZ*%^VG5uF,"Tk*0FT*[,EaOT=OjRWQGk*4^Rsu<l6[t%Y\B6U<I:p7)):<AA&Q$u%tFB'
+%O5GCgmlp[;V]Ys7X1&r">E7t8W8[,Wr<KMJrp[\8qt9sNJ+l;p*iZQVUPp:]g`eu>IN3.p=+9l5qY'[\_rkBTqKVCG^A7)Umlu9t
+%k,Yt`^7X"ArqYIOr8WRYr:s,P]pnJ?q-3m]s*jk2O5GD4[m0ieO8\4qYJ5PdDQj*3O8n8WjmR]umf!.\a%sIBTASpp_t/ZZn"6f`
+%]5Qj#p/c1Y5C`Fj^\Dc]s*!d:nPjl6iqNBL2p^Bg^OQ7E2uE2ZhO#sTIatY%o2#DaFhW/0c[YrR^]/W[mbKgo5L%OC5(<8KJ*E$n
+%j;7L4Qi:TH4hpmu+3*L5T>0;;hgW$&q<e(*?_6EI:Huf_If at O"0/*%.?i)5.4MOnlUA3REIJH\:nt5p%5PY4B5DoI?5Q05ar$VM)
+%^#c``bP1r"=$Q:<d[)%pgC&M%^AEWZ+26ZYl/s3q_r'n>J,OhFhN(t':k)a,ngOM3TDnZ`+(]B)Qqr3)iN8(!XgS#]?iJ/Vp-67F
+%s6H_ps0Chaj0nsJe*#W$qu><_MJ9M]^AHqtJ,=\EqR[:,1l<r92SQ9i00cW<rl`$(pZk%n5G+MEZ^6";qn&KqmJQUgr>@]sq#4Ka
+%rN!CK^Akg[q=aR_n,1*&oZd+P3<&nq^YU&]qshEb&,N&-Gc]k]Q.Fh^CiAR]I`:g-nt5=#pE/U;qn(a8lJjY7_W(Rge%=MNqs`.B
+%5%!Y)s8B.`fDF%#p\"?_+7\MFfX#N]MY6igpa)"#jd5b[2h*7,n'(PkIsSU'AAp.6oe6@<]_RWcTDd[Brr9]Z6'gj.kPa@$e,N2c
+%emEq)^"]<7r:$U$r!.W.rQ!fDpU>YKQfmi4c>UJsDI];'q";730<]:YIH!W."pK7I\'L\\h/D3;n,N?I^TO&Uok0<`J,SXk5PiLu
+%G]*Q at 8+FXYO+6s@_XZ[%:As[;J,O(G0(^rYnZ0/![b'80^AXTa&aNLEHkk:a0fhPo?[qn=(F[A0eFAiO$0;D at o$?0@@[TH0qSQZg
+%s69RYiT't7n1T:hfDFBZFn:6(leAW#rX-:7TAT'Dr9V%fqR:s/0teSt.-YUKcaWl!f0?qHQ!a(95CC/:^Pi*er361n?bZO7p"MXe
+%J$]1Jh7`WV[ibOk2tN[8ZT/!]07Ws[s7Y?!&EDMkGC=p%?*YP7+9.60pID at Rq/[YA]>+4jbY3-SMsltt0Afm5p$ors5J4+Hs5:*[
+%k2YWKf7*UT^]+$$+#(N\q#'h%f3bgiIJc=4>'U$.56%1Fs3Ar?fB9p'oABN6fqGn4r8F-kqtK!\JZU"YIJja[gZumuDa/OIrpA<d
+%ni(JHg&CV>r9:tGMP#Cqrr(`uh`oHW/GO_iJbf1en,Mm,r/q#f^HDKKpNlT$n,N at D^AI'Un, at U9?bQ?\L-4&]r:)F(chHn2T7$Fi
+%qi,)JJ+Rq,0\H-g53uX)r8ugfbWe_apih5^gOFHlrSn+a_AiC=?gSBih`im.niZC`NTg2us2=1>:#CEk)'bN at efXqMq<MD4GMh(G
+%ps[8GruV44n%YBb5J?sW\,RN%dI0p.qg\GaDr3eDGNS\>'`[s/56ZfAj[Xhi3lYCK"0fuKqJRGQ4&:85M7<?\hesY8D=;u2f+2mM
+%+l>/:E:+s at 4cd2"lWuHM*:>hI at u'Z7UE+(A4_ at 8s*b0s;O*'H(?D4cMe8pj\i[hWpI?tN6Hd6p/H.7#'1E?!KoB+Lo3EM/$c#o#S
+%Y0t>BAYtcrI\^8p,P7:_^!",jQjZ7/q<DqU@=uYmbk\8q:Q5+ZY8WE86KW3,Da!V+iGN5i<^Npr:O]P(EJ1p?;-+h%jJUJPleM$k
+%Q#hB@],n;t]M#kOkG_U;=_j%+SB!U(4VuFcm=!j3^hlu\7p%4"\6J2\XZG1]kL&9u6/jA2h/aSg`),#7lY^q&j1au(V^&!#G.h&)
+%A&`N,G.5tJM"+.pVMchJM,cQ>jq23#Ze^1&8L9==p,)3kNoOR`g2XRV/llJSB:8L>SG0u]#$-b^>dIG=@a6"JCAXGOm)`W*A)irs
+%e_A=@8n5T<Oo%=3\ajb0#3fCEd>jJr=T(q*cFAm_p6+*kej at RC5'K'M*CE!- at Mr<_Ck\LRI0LH:O/n?=W5l(>#RBLUcb"tuMX4*N
+%#QIogW[qGWPNUVHc>J'tHlWt"=[tX_4$Q*\aqc(iC)o_)SpJ?g$I at I"l?q$b=cOA%gY1;kWuboGH/'pVS24P%]8SONH^)[uc;OI_
+%bbIq)4eLt]Z.CQIKl&BD#ki;'\?Y:CT;`n`6,l6P^167T6Vgco=3o)4Z)"Y#fJ!:b7V+sTX*<.gb_tA[]3]^8W<Ia6a69!/EGKh]
+%I-Xo!hD)E@=fs9/CU*VB?*0F,E+QbJDoq76GfuV^i>SPbf=oQj at ucJVO4[o&l[:YIYHi--cL]UoY-VUf/FHnCYD]7E0kBX"oR:0`
+%jY$:I^KB*9ACp6Ok8j"pYAt0OHAN!&`+/Leijj2-XL.'@feY/^gWY1;kPI$npUJeGlqKHW/ET,K>_tTaf,[=T)+R6L\b;9r4"qTj
+%cj&W1bB;&l!K;3Y^1<81iE>*ZiD8ifFWUNmhsR8`H-OSmVMNKmY.'EP&jM+`Zgk/+es/Zefa<1ANMBK=A?WAX"C=^6#%%WehJ9NG
+%^G&J(YV"8ik1;l"G3%NOabsJ5.`dG7`4.]ea6"I&YeqRS^ZCuF4k5]uq6OQ!f9m9&R*#`RXj)_[+=a4TnPFD7A#PC;mbt6_n:RiJ
+%A+r"9 at Wjr]*\lO,5iC3cAALb<^X at CXQ1kku3'6JI<*T\^)eG9Plcu!O%3*'t2"Al$lWA"'d(#]1ed65P7u]rU+<bZbC0oqSD1Pm%
+%6p at etGPHE@@+3 at uD14Pe)cR9OT.Q?t8 at WX0`.RT)2dWfcVfZ6-)ig?Eb_1_n+"\V4kF+Z.]J#kVM%Jj4A)$ia=r4,m?Y*JthhqeV
+%MJ$baD"UJ5"&`4;$%^b8L>4.R"F+O(N$?3%feA,,h*=XrYqhtkVGo8IElC.:N,)jr=2iQr]Q+3mer!s4!+GD/i7P)9G8lVlhL@/p
+%_;.c)VDVsZ4\bVr0C48RKV)Q?A.-_tneG%Uf^"f<mU1=T(Q6*J6_W6!o=iXq't+5*aYukEP6R*iRlQLsn_,5]eBZ.E?'3YcBnKmm
+%@h'<Ha$6Fh\A9<pBjnD9C`Jp=i2m8[qZ$s5/XCY!qLXH9efF%k:Xd2$9-Gp<0Dqa=7KJ0Y"CU!u-AX15CU_o$F1LRY&3CO*=9Oa*
+%fYl,DRpJlQoh9aK4TLbQ1tJnV"uN+rGmi!iWi$r$"5Xk$ehQQ??W_O2_+//d*nU5FIBa/9iedl>Y+NprkJB5g*Ocu6&g5rJ_\%%O
+%c+_N1Je8gO`_N]6!YT6Z9o.nR@:-r7re`qRL^hDPHOUj.-]Wk=1\%dfoHaU:l.UM9FCF%AFQ0d54^Z#r$`rVXBn:M4BEDUn't+hR
+%44nkR^oWZb::Gc.HJWo8fSbe4B3YJd"L:t+3-2_Fk]cR*`9R[Q&FU!8J at GiEn\1A]!pacV-,u=mXLXqs$Gb`5Lc-uIF0oq;Pl+Rs
+%Z)0\t`m&sLE;Uc)-Veac1Z/n3"7"hnJFD=0Q2H"MO3(16$m`"fDI*[ADuocW at 1JQ!=XLk4n7Sd8biUn:&[=7,k,<>$m-pMQH^P'*
+%<ZrB6Q*!&/nU>+Q>gQ,I4g"dL_X:/#4$Omh)?&\rj'lT:Yp-H>kb$-p1uO-"8DnL,cJK:T3m\/h,i8B"@H88HP9`EuE!['lUk\Mu
+%!W:k(`3[#-,l[!7F^>.O&YXm`AqkfPfm!KjVNdi]K_<<1YS_S>(?#!7G(=?Kf;jlM4!?H,&`@_S4rY++,/2(n`M/3DKLkn#C25a1
+%3KIA`mk]1-eY/1N5);4="-=?J.g2OJAT8RF!g\F:>gP_E%n,EpE*=GM1`=`rO1d.G\Q<9H#$fcK at rM-3N@]";cj?3^^m"(IN'$Q-
+%$1?70URa2PU(/,4:kocn\2P+WaG^c55%EV%V0(Q!C9edbSgC[e9Y+P`Mc'UWdBFWTW/l'B'k`'>!j!q8%&EK?EC7Ak^3p,,*W0<C
+%,\\rL4X=k])*kiY0W87t-c)\<Ud4^;5l^-Q=MZ^S)Lqo7Lml3$>_N#H\;-LA6>L+@>@[nVB;c\4I#Dh!fYbQ11&-P,pe at 2<S9RDC
+%JWgPO6=+(#E&r]k#(,i%\-"'5mi+rRq-MYnrR$Obd9[qigCOhaOE_lsKC?Uh0#!oRE:SDS)*ni7"9S+pTn$:X7m(>B<-e"r:eJ8S
+%+]'jVDF.4#:jYld([dF[!O_]FW54%1UC4:nQM/HnTE7QM$3#<c""V5%>65DhDVi+;e2Q#_qN)>A*>d&ZNgBIGJ1D=MMFE1RZf/"C
+%)$)6`E!L8%KDum`%$T>$p;5$VkBUC;E>$f!&\q3doEPX/33H13Su?9a)LNnT!S\GP>TA#f0l_Aod$b_38:8+s]g->VY!M$l2&F2E
+%&cIR&E+#VQ-pTL!KqRZSL2e$6^@GdTV32rVfI*I*s24hS`$4DO+SFA0"9U295r-/r)Cs0&Hm-l<"!Q7":*V"3i40F)J;-=0)Gblo
+%!WK at 5Id]A91\c1R2-ajjrl47*Yct&(B[a=rXRIUM!J_m^*108m)&k2S3*XS8+UrJ-j.naZEN+"&,6LIGiu\jP`kDFWCh5nW_-WW6
+%ZQidWHkR:%M)JE]3eF(;GITn(>o$9-#'&8t!-`s^1 at ZJg-6*co*@^=JXp]9+dICLP.t',i6G^5.?BB&4o::Xc1B=bkbCJ5G[O*1t
+%Dg^`:OEGq_`##/;bm&tJk\q_M&h'T8=a-"O*:Y.pUB(WSq;0g\4;bl(-R.e%5$]9uX!"3M'[$bA"'VuL at 3D9-!>^c9aLa8Lr<_<A
+%Jt_*W*G.ZtK_HZ^fJ<(;(dZ)+!O6If.7,59&7BGG2!F(ibM]4!cQYZ*cL"%SgaDU7=&^"?%%'`mpXW/e&:>'p/*$/=9#Ag_f+ at k+
+%IITq=Ee7YP!+?qt[=gN`de=2H#V$#)"rHCMiFAtJ%B<*()mfm:JLqHGZX9Ooa++F)),UJ/_j83"?q%ER"iEJ!>qS\g9S,6Z^^"g4
+%N'!mTn?8<0]%Lnuk^@@nI03C;qt&f5Ns`5-fX659@@E\#h-EKkUY$Lt&C-^_6Bfd13ZihAL%#ho)!(+:OCWp)fSd6'GqTI%LrWW(
+%AGcP%`\6k@'CuIo#8)iD7?#*U1MH48$bM8('%kLdI7 at O?q#n1\aPH2uThG/Cf&-[j449:YJDETl#p!`c+`cKFM62D$eH,%;=L/OZ
+%AY^VJ)5%*9i9<FCXBjf=0rd!3'YG\X7j/C^R4Z9bXlBNj>:;@\'djcP<>mP```>s[#Ef_PeC7Sln8,eRBi_:=/e`?W`$Xho?4 at 0+
+%/@,:("l]h>(]1d!KF[n at 7HsmY>QG\e!'ZhPA-rMj'G'=7iD(L>[)7t-/Ir,!SfM`0,rC:hkiifF=D&-?'^H#;!)2<8Tgm;Jg[HP?
+%,CfgJ\Wd18m0n^NBh6nb-CJ7(2ut"/6^ee/p$gnB&SQ.u=]R-?``:&if8'9V[38)Bp-S,D$RI[%co25%&=$(qlSt_8&/W1f$5f&\
+%Hh,+6:[<]&M>!Ef5O*jNL&daj'V8pqqJg/"l/61sMte`ea<qSV"rL/K6!+=^("l/f"!.^@V?USV=kLlV0SPKRX-!gP8*F-mhNJ1%
+%h;aT1m+]<0mKJVG?\6VV(`K[g'-oE=h[%JsAjOfE#9>"-&^C)jUi255g%QC]?78nhm0AN$Imb7GAHcIr+qAcD\JI>cKK!mMgXe(c
+%/.e,&dBR'J/9j(]L_'T%0%L#M4o:WK5`Zc@<?fN&[TlWs_!UEcjlQRX at 0XUN/4p;eb5ntm at PohMLBWtj9MCem8NRi4&cSIVU)Kml
+%O]Z8,k(:G>H;VW"V$PBp%RhKDX,3R-:k]C;#BhKs',+#gFafIn-7Ip2KP6DLH=9#E4[C]F9&(X5#Rj$]D`Cce!Uu(.kgJ8+NCZC!
+%^^1=sV&EFX*<?A_c at kTf.g8e_C98'S`3SCu\E)Z$&Gi:K!F*'QN[F#0'=$_PO+AK2GL;sOKF"cCVr34469i8rmMl-B+Wc_aggV<D
+%,Jj!Yd,:"D[oAXsl]&u$oZ:,s at VQ12S-aS"E8$,Yr)ErKi(+t%9FF><P\4F!l2);_0<VRRos-Db!['6;oGo"6qhN`/3NC=0pXu,E
+%`WP*d0L\dTY>CIn3(\I13/[uP%0O_.+Q/1DXEY)>l]K.AnA40H.KE2Qo>htMGVTNH1nn*,e3biBT/=Mqp&nJ5i6*>F19XI2"Xf.9
+%`+i*Wh^&QcKPRqj](8D\[^^lc[cEA\j<TO%(OhDX_/X5`j='O'fO/+7@`knX&;$8Vm6D^ZUJZH$??@nGi(Om2ai6UG:/<==.!?.S
+%,.sY@=t]g.9-D$P#&h^XlQmn`=%ZqSq"9h1LH-W3r`$LQ^>m@`f*O$&j$3o$&Wa:7TX[,I<j<ltJ26Jo[[B9j,jZ^gM44culjbti
+%mT;mldtm%<e4X0"Y%&K&+1h!*\?h:$f1<+tfFbJR at 0Jna3_k(l`0LXXeo#p=L25F'$0or+e1R!?,NLpr,T at p=!%k8`%ti@@ec;lq
+%E+uC(&:cPV#XWLgDn#l[^UnIfceHTd!XQM]'g<*bK)081695NDBSUlNU]J%E_XOr#K"@RM0O7N;_%3sX8SrE=eE:*mA/4R#4Q#Z1
+%d6p3[eG+d_E at cSAgBH=.!knu6g;LtUG[cE1Q']fs at I4>Rfs(`pK*6<:JceYHDRNVtm<X*>#8H2&)tJ(>&N=,\Zj^Rm?qBD\6$*-^
+%_j=^AM9Y)Ob-9q0,iC$=(FX[J#!k1ikX)PH7&2kg?bgQ_l8^=jK4FMNlrfT._.2K[TG2t4:he&Z04aN5!3eDr?guJg7NNP?*\P+c
+%`]k$K;[WgaENR(g+ at -:1<>TZ<QRDD5DK-j,\e:D'!]2f)6gt)Q.t<m^#g&88Q,kuEkq4I%*7ok"_%55[+>3a>clG4^Tc^1a#8!ga
+%IKub>:t6gfb^q&8%(tWT;3C at tIXo*E]+]5lYbTBoj(f9(fQG%p'H!B``,ZN;QV"/$iYESd]R\Qf+:?Ojb\Gu/=i7t1F[Wu at UXkWq
+%#D3:6G%`3*0_)_mP6)lGp8FQr^LX-R-DGA\0O^Oo!CD:pU-sA%SA.E-(#B$9e,\83J&Y%"=Um0Ti7 at s8BJh!I_jg.!j]O5JKVF43
+%:Bf;YD/MH:;*P+pHsPt'\.8G&TU?+u":!F!$UT#fO2Sbu7BUaNedS'&'cd$uNBl9,)s2O$h_`5m:0)rhK=qAUB7ldOS;7Ed'G6gY
+%kNcM?CsB^@'Sl<f!pPh"Cd-$pJh3i<]Ko[24(6+teE8YO7M"5+"r'bR")Vun0Z:la'67D&c/@62=eRUu,/h%NBc42_2RG3N.EEde
+%*<u,*3O7)7%9?/U!S&*.Pb<nl at r;.L#CXC<E@\0^Ju8am(bC;PIJal?]SLR)<*$RPn[81o$&qDl#OHS"<gK/n![n_;HH2[&UsJ)=
+%7$*0R2E2;r)61W at 24/h3W[S(]Nm_@\">uoCfu!?4N1Yq4!3TZ0)[!Wind2]H55)o^+k:hcHCAUQjKY^UO9&<K4ePh%%4YdTVaOr;
+%VKq8 at 4Vi]7AK25X)j&tT$aCX&'%74\Nch8#agU+saBIfHQ$Irsd"a.RlC')OWZ7*EEPkH\ke\-%_KAC5i]43B'k!&@+si$B*D9 at 7
+%'#3DsSNr7%n*E.lVl\T7DF`HB,AYrEIJ*gT@!6fH&eRY.7Jt*FC5+SXG>PPKFdeoBBtSjT#29Yq%el"GGS`odU,H-Qo!Fpp_&6h%
+%r5P9$`chEH&^U>s&]8$KSgNt7)-sl6J/Z9Jm]lo^2kdP`@C%Xa>`W/;;/5)c4.WbZ-6C2o:VhDE!dS*8ZSM3kYFC(&@9Iq8aRbDp
+%TV-:DM#sJ1Q5;`IiB.r`JDe6&_,>lg.>2S>Ii'Cs^iojWLcq-F+F`485-PR2gjfOnN/Oo!T]^=@%VnL8Su at 1^1\V']@p'^F262HE
+%5lJGQ7`]Z.0EtH6GQg9#+G]d_bBR&HlO.F:49:8"kc?ZCGq)E>b2k9t=?no<^2et#5^S>E+TTi:'j]cPnUn<E1b,PY=0^9^4jal#
+%lna(nJ(bi at A(CC.fDn>Wb4ZqlecZPY7fYlaMZl4]ph[T;+5YfupIP'tZa:a7- at cru(/P*_<X!^hOatRk?pARB&u:@Pm8`pX?dh,<
+%35OAr-\5%JX<Nc/'u`6Ie-Rg:*muo."OT"ZikFs96NJtbJt?\5L.>nOOo^E+!"kkqGnlVI?13VG2BU*tYf=W/5bK3^HbLQUL90ot
+%(ejNlRSP^;aO^GAf2-]%+rFaL4^qL@%9+"ADE\G&%@9.H!ku*7^NM,l+^/lbL0Ym/*HfP(Rd[;\"-(.NTIV?cX%0_=kp\lS*oM_Z
+%!Q;T<0p&N,m-E%dG(L%t!Z!(bNR(Wgke at gVYTmE#O(3B(KK.Ka$S!#C6%E2X\&D8]+g:BjM84:Y81El@)?L^knsZ/X'+M`#hY(>[
+%<[?O0Osd]K=Sr6n_Zj6_0\Nfb)RU05Y(N?=9(!?c0+%W6%LpfQ_dHeo2 at jfZ$VN6NN1.tDH8C-):"`F&_H4)?pH_n/*f86<@YAia
+%*gdQ<GCq+l1LaGEQ0&:fd"YCGih[;]MNRK0M";\Wh"aR@:8Jq;k%QdcLOqpG*O&$Rh!AD4%=Qds2FAACSc:r%;"sklgml.s_$)M+
+%["ZaiCFV'j'7N3SH+o:1i_MAAcU6_<(P.!.(`P(:(-kRhqEWt#EKPXU6UKMOrEdVP^^@@_YdNL@;"5ic4/(eeC5%#\CU6\BP.c%`
+%QffH,2;uQ-VdL6r8auiYl,AEEa+9EF.<@M@\q/X[PT>'BSUf/(rpUQa])ZiaJIUP%%>VqI-tXSSpV at WkVi^0ZZ.T[T16JN]-_a'Q
+%n5pVS5R4"7(@Mqo5u\+/cUU<$%mYW'KGj4JRM[/3ld>#!#s3n4^[pHe_Ng-$?of<4>fC4in(<KAF*PpB#Z3/hXHpX3gRW:fkr!eq
+%49n1u]5%ln#mT1T(2uFE'AFMN>"H+K$T/NVMEmFOF\k1II.W/O@"$=Klj]&K5T)o?.\J/1Y>caXj)?%[HJ6aXE<%5&LPEbR!WIG3
+%CaL(cKEsPWARbuiBAH;4Q!\pjk!^p?"L6+^/F9tpUd;)C7LM`EPrqZ+"Ue5HX;D33`)@8F&`bq[Rt.so.cu["JsB4=!Wh;Ujl(U]
+%-$BmVPJo%kO6E",a#MTX=(p`SNu:(T3RSMjnVA,7ER&jr at 6k>T=A(hm$AI:r4;eU.G8S'71LRrm."W"<=S[n'n^O3``%>@6B`go`
+%/.19)gogV+&ZQk%/Pn_Ib_dr&g]g;69lga$&L5DerJ2k8cPinH\pYQi:Tn]#s#Gmaa\uE8)>F5m#:Prh0qH?Z%4-Q2kUP&'@#%dZ
+%=GR/]\taiT#(<1=/-t1@@#C-j'2>YuK#DXMIN:^*!VeZXe:YUp]3tjIgLP?#QNl2MLR#S=)"*m4[T!)JYQIHN&hq_O\lCNk^(2+s
+%hMK:t4<-%H>UhU8g7hXsh;N7i!UIS_h>dn1qdB*TdkE_H4_(lKoGa)rJ9W.3_YVV(i7S9J"1e9RBF?(5rWe/<'/=%DH!$5eT/8Y8
+%GQDD=/hjlqfmHDC6D1K;g-!.@!O+/C:rZCsad?f`eoTQ"4]lM7M*XPhLd>0FQdtW=3OZ6pZ3(8b21ggm\(;(^68=h[(fNeX(=0/l
+%\BMs]a>_n$cj\?q(b32.RW8m",h]p;_ at RVJb[eSIPi1:@3gMIU0CMlE+p8X$)/.$^4C">n.,JmfF_m-O-S]+JOLe,<&bmP*#j:p1
+%T]`mO3S%roLks>02uCfH6/HmHD>4RgPR)[-]ANi`eq#&kiur27FcW4pA`F)M$D;X_"Yf#f/e97a%#"Bce\<Eu.kZE'ZlI11]e!3O
+%gk>.sS0%epRq at 1>X/W$RYK;]k;M$Kj1(\Vph=)\Bk5c+G*YeJDAFk(t"`6c:Xtq7ai"QH=<V?kuF\@cHV/)sd at 1aM[igH1Q3!`+.
+%.^ih%.?jft?WiB@@'5?j$gen)MW[8r,t\c?>]]h,:b*G6SQgB5$lT7fY25,s"Eql4mBH]5Kh1Td3=E>R1h_6!Ed4g?"_'W2hIrMC
+%&X,9h(Hb(FTbaBU@[Q82CQ1MQef at b9b7aRWX)(oAp^W2f"s":21!^"b8[(#(i!E0[c)Uc(X5F#9')_>Tn'`i%,ZlCm:"@DX+@#pA
+%^3I%2AB3k,IL[#7`M0150o"!1T_Jg6Wl`37.h:%G[qVKJ/Q*JpMnr"g_h^a,pg>*i*j^g!9tISKA22&==iS?C=B>d`k'lkl[>8-8
+%DqBc0lHhE([O6S+W$@$=4;LV9?QO0RegAHK0HDc_F^$YSmZX(uQ?rdr`.2CVbn*c\^*n at q4Kr.Y3FmXVf?)T6KCJuO<$1WW&:Z,5
+%Ls#aMM*BG"6,H\nr59C,KU<be+m+=B_oa]1,!$QF;pQ5:+FEkk$Tepbk!J3 at I>VHB)E*D$5TobTZ9-Q=;=&WW1ggMockJGtN"sds
+%/U'\YiPDI;,!6P]5+4V/YrmrrR[=8Ofl@"TpBdirLbAebl;l+7*K=p/MI;GV.%G++V:D5IW`GBfeOaEbgB*8u[b?XIZ`sq,[\k(2
+%?F[1>?_*O=1SP$#FWug\OoZ#^Z*9FYq8-niV at ZdY4t7&k[h at t6=ZR+QM)J.iiV*GdlrNDkD"rXD-:1`t>-<4EL+ at jl:6qP at Jg$9m
+%7aNeW5.V&sdhT)Y+6lu3l$*ma6I7U9Ea+>0-LYFo4V)$b,^!`mW/qCkDIap[>08(:-WYugM$d.%pBb;P,bE9iL4u6rYNlAj7HDMr
+%LlXuj'ID_kMO'M/HtF!Zf"M6l]A=/GZd#'I@>?sT$b3b/]C7*tlSO4/56t#s!mGH?<6*Pm2XI7V(&]Uo=c4Y&RIJAmQ'=D\-(87/
+%WBlPa*r,,^([$61746#Ka_Acd/2AJ!!WoTS((lB2%^9!O&:r'MAn1 at KAJhH.]F*5$$c*8Q7YUmW*Y5q8Y1u.dEg849 at L`+i:%Xm/
+%Uuohmq\YB][SiN4B,(QCV]C"bnRNtiP^D'V7&[qGkd=R9"N at peGL-[6K%iG$,83HOkA1 at u+l/7DXn02t3d/^f#mj2M[2%86mOf-5
+%#2LJbK,Tjg7uMXJ'Oj<bVJ8.$/WA.2.5c>Q4<rA%C*?]Od.)qtM^DS=!c:Xl]M&M26=B(F/)[J0-(L%k.\5\/+WJcJCK!R],M==j
+%Ob`E3qZV<krnTgi`.`?RVUS7A(_)6W#9NquO/EE=_Wer/:TN>*:EE3jG5`&T_I'#C&H_)<NO5)F[P0#(3.*9aJij;g!s=+5'b$8@
+%:j/qdYp9-S\^tBr?;r,5-Z<ChiZ481r"V2X]>a4V;%BjV=_*sPKH\2P-^9(KABX+:TK1U,7h+-BiTimA2bQA#mqU_()E9-7KIuX3
+%I(dL2,#6-1idG>=5K6q'e6U_$Kcs16-<[_$\itFcHHOom)&$NS`o!!c_<d8Pd\ETU7lA*fGXR6Ere)E5ln8`VLgqi!":^D34`SH.
+%m>Aa[fRXMb at Lc0gQ@p)HAIZs'Cj>0I^!)7!F=c&!T),1T$K`PU/\I7EM?*!A)7;6(@rD%d`">!&]g2(--Z*TaUbCS=(p^aYV!0"l
+%RT<^\j;(LM%"^)]Q;4fekDD7)H=A3T!DW1T+KPmKAOo#l;%[0T,Zng&3bqXP`?"=q?a=pnN:a]+;191Y"d5X<0!!,AWu:_\?ssug
+%5]kLn[lukp$*ZHt7h<7bUA2sB1lN5M>\.,H&*BWI!JdfkK?P^40`p:NdieXGRCI0'O;1o0Z=KhFPm9T4"d=`Ob%K:N at 7ef(<BEjF
+%3E52KW!P+petUk4Z$8QU at 4]lU[r%H5qe"<0#JR(]$*hG_W"TO.UsL5^W).T/:=]eG_59.l$LIM'2h at _P%"pa1,5QRu\?1EKY%#*%
+%MpMPChq=1t(s at GHoMX=N_ at t>WC"0BoA""1j$_=h)1ui6j88`N*EW_n*YX6A2a32\ta.rlROL,8^B\HGiYWns>QYGFj+L]Y%lH*hH
+%pA9C7gqXFOpTt>/- at J1t:LqA[oBlVWW#jT_nE=TND at d5;@>@P=q[*Ub>oZlG at 4c<;;32K.`+GLSZ;r+mg/(A-Fm=XG(Bb(<"\oU9
+%Qoc5G-o^u,n:=9$`89,`T6h'o]M+a2^?oir(OVTP!5X2n5gV5A)"il?JAB"1!Q at J]]p&^6dbCdCZl<DEZUJluH:m]snHZL8eSQVB
+%g23Z1iWN%4YucR\Cl)'MbDJGf#O!rJl4_-\q(k.[Q_![q'2O.c@?Z>oL)P0g9hbE=/":WN[1.pUJ+dn+P2U at i>_pbSk"tV;PAd*&
+%^Na>62BnoQ($OG/7H6Sq"Ca9)4TkI=L1#NB6K&/m7sMq\@4G88YZV5U)_joRClIQ#LmiQ#I$#.;`?XBZ)Ia&l!N_/499dUXY2!Uk
+%3j(@n)0p%PFgC3A8-uThANRs;*U@:m$EFS(:<2V6f'<tI/eJ4N`X/""3 at s,"0=HY<c;nqGg_#nCe6(9IP/IhQ,o_Fu(<<qd at .fc%
+%L8CYQLC#R:P[_`l<u61Yj`,.C)8qtQCjVq"P^p[.)I$]&3kF-dJi&s*"5U)>p^\)dk*]%#%E6_6D%g=%KI7I02M:HT1i^6+a>YYo
+%-EEj.13c\IBJ&S/QI+Yr`>F?G=9&Ib=5p*9m+!3_*HJt at fPlE#YlFn-'[J,MoB&"*HLn@/'*IU`%osX at p_#2#,0(2/cF"I_-TVk^
+%jeGZ&nXcWD9pl4O(bb9mdOh`[`"qE=V^<*X;p17i?j!'l`;^*VG7R9+g[_Q\D.JJ]pLGM.2=>Z^TEoiLJ3.-kFtGt^7bK-r*8u8R
+%o*Wj:WQrP]TF;!sQ.5;'ksZHK489q/hITEnrC%_]%#)-OS1o.S)'CYG*;%;pFB`a+R*Zb[SW65<U"OL;bucl,0k]h`WX^_-1*!"]
+%33]g)J-6Bp5/]?BA/%qKD4ncBrIDf=\[Wg.BVq4"J;bb_>j3r7TT2,d]-3DW@%LJ5Xe9F?*S0ON4#+r4()M%\/_7[R''$;lC!LuG
+%-84ie$G=M8B%do^0q.OXd/[4(,BjT3cpK.EN&`21MEj;8=Vj(*5-V+0a0;G]SW\+t;)c=;Z&r(\+kWJ(r'7WUL<oEigf1?9T_QrD
+%.)6Ds6HXr`d`bn9gNjWa]:``I4fKgt0-jj[f]@5\WJWQH!&f<0ZNE3]K\b1]j&t^UiFel(c:\>BbOYUf('Yr/<Tus!JWeeB!S.$d
+%&XN<n7nJige8. at XVW1<pNV-%3q/)S]I,J)&_.&(s&M7CRm=lhhTnr(GW/kMR at Gi#[X9U6\1;]HkN=R_YnoQt^Vfn7XLX@^0Vg.(8
+%dYn1V"-3po!\8Ge;\?g_'^JlE7SgXML=+!c*hFC(8-lh([*dmB$q8(!5Y`3Ac"<t4fZ(7)l'8?(CJB7:fElNlp2fpYQ:qJBZ&+-I
+%k4*tq"1u?-IW9UqAKPBm\h/sH.;RsM6m[/FcDhO<4^Yo'\')Zu/XQtIAMJYiVm>=dPQmH#-d]2K%4".(3Wh/ZKo+J:2oPT==]p>R
+%,4)LT*XS*>9.CHs'b at 8LC@EbOcE:eN*+!11ARHO=Va at +_`'YMsn<jlE-7`EEDPG#a'1gmR*00H/>'7R5/7<NV at i$N$1nfWF4pDe[
+%][g?@+.4\9=e87NfbPZ!?p3q2=RG$)O;h;.S<+bC79Yj17,aGB/8&&Li5JM=$t at kRBjV<524k4u^>lLC1YZPlg)0lD^Rdlu;Q#@Z
+%2ARH^MQN_n<_F=B[3i-S`5>9-?IsopD$qV!]<0MiXQS-8`)E?mjVJ%Sp8epq&n!pR!HM98T5D-tFSJ\)83h7 at -krI+8mhYUgVg=5
+%TA?fYDUjr!coK_^_Zj88!3lum84hGf,b,K%^_WVXh;bd89S,/4 at Tc0eoGM/"gRna+YkC-TPJE`T4kV#_$?4$9?FIfUGB0VuE!XrS
+%mj!#<AB=u_K2k5Vfc&p.J]7-Q>-,J/_??)_D36-!R5KOB9Xu-=-[Lei*lO#!#:a*g5_b^/?D%o2+u[58U'oT%NG[[RJ6X[2Q6nt[
+%dI23\1i<Xlh8#U8-rVA7#bqD at 5hm[*.'$(;_3gR+C2a[<-fK3(P8O!_FVj`n1%fVk)gde)BqsCuJgsFX5T$n&K^+U+g&+p'8V#`]
+%j$;NL]BTaEmjT/j2F(i=_+mM7S*I>*n7sBt[WpNWQf[!McNh!pB-R\Uh$LS8)M-2h1L!iFI=`+u;aZ5>'B[]0Au7[39)()`!<8)4
+%^5p/a<ZYUGL$kEG)rpfqV0;Rc]AS_r-L?jSF:eU,X?fedS#;N\js(-mp&Ifpn?foY:JBZ#0`:8+7,0O,'MFVdGV0YlEp8P$IJ at Fc
+%"[ZuL55k`G"Jj`e8M8?Q^q at 8G4H52I:>95(^9Im8&WQi59$="#gG?:5SfJC+adtu3q&077,t_B&#tLrWiX*0sQCY4b9ir['QN2mI
+%-YO1AXK>!g6AI;LBK%_31Hej2r2&R%`HJRbVo=5CDRXG-l<unF[<iX42,ht#?H>5KaT<GAhK$(aDH7O3o7aLnok\G5$_Fpjg/mr?
+%^q9!/G)X4#Sm:UCq)_&X8*bhZmYu[--*dCQpI!004P2g8(9(7q3<]H/GhM3;(l`;D\U[M$-TeRq4DQVOih0R5R(?q;Ca=t^6CdCV
+%H*WPd=pLMNj#YZ<Iu?B>'hJ-LpUB7]JX*ZhO/K!1Ta_:;h-t%rD".FC6*3!l at V@E=^3Y$t73HGZIm$=L1'&!1:7qdtB7is;DhD\I
+%[MO_T8$)p@`3-GjRg=R0ibt^8D!RQLo^P<h!mlHdLpekhARc,&jAuXoD3u*.G#@l&I+N4UbL<4ZFcQ*s.RMMHlupG&$b%j6]EMY[
+%7l5X(.krH,FkK<3 at tHSmLTG:HQLNnPP.kp>b6AED8-dcc0ce)LapGt5D,8VmoK4.O$="46&iaD at eR>AYVe`3n+92dR(%#VZqaiB2
+%e"Hr#h3G4kDQ/U1I40)V]>YVYXMC:Z[UBU/d3k(T[LTZjJ2mi_dJ.KuUQCbSDi!J.T1g]`$1Ed'q!HIa9P7T()K9K@`.b=PBF.5(
+%e97A4:*gjUi;h.k\8;ue+PCoT!lc-"CkFbnN201O069#;U'TR-m@(6A'Js('NNROiEYJ8g?OW_6^Lld at Or-I(_Rf[og\f75[dI_i
+%+RoWTL=oNVq_BQgfX$qP%+r3C+orN>\IHZ6Nm3PJjJVep/\<PtO^p&3O?c8$W,%b#4]:rDX2+X at Q?KO,<K6dug^0]FDZn!$Urc*E
+%b6I'u+fMl8.?K>5XW$]V at m:Hbs,opn_!_\m>pd`dN!PU&b<ngB'&hn*cO:CoV:[b3_QhF!XWga8K(JAA0cs&C)-)`*q45)?C=-QG
+%[RSasfJZ-aca%o[3HTi4=Kr.dLANC+^lEd351$78%VtFm#H0MD8*G;-2\JS5iaZ at .n`^*7Zt$p:Oj&aFB9Clk*jIB1/W8Ff:'7c=
+%c168n`_eSS]O!:F<KksDWZ\niME7QcZ88)TJ>Xlq_j"4]1_P9]FP4Sji\hCCp^n(jA!j/^'q^(T0+5/SS$esV3/*KoAj7%(SqiY?
+%k:D3%N5AVLpVY!T&3ZqgrkUXgBZ/dJD8G.SLb:)PQ37EsUs+X$$,C+DY6^>C)@b[nZSnfUM#e3(/H3(-[9*J7>Ji*(+;lh,j5kj(
+%4O(3uql,Na'd7+t9.8.%pgBA`>E'"45U=5EcJ/1HhAG>WaE\o6cbje;j)dO_29Tl3pH!+d2eD=.%mMAl_I&q2$L`ga[AU=M6C9`n
+%-i/Cf&J%T$G`CuMRrHak`*.>ao4m)=ZnJZFG++I/$98fUI'mmA!_i:MDj.;CRaHRp9HWSg+9]YPK&?GOCOL6R0HN.+Nm[)ZNHRI"
+%ebM689oaP;h)hEW=[$V2Moh]pVV\Ob at M;.<[L=.$eni,Y=%u?mK;E4Hi&)%O6%lVL%]I=&Bj_QkV#1ZH?M;2Z['2ZO]EE:$!8iKu
+%?)YU;e9DP>,LIf!OU,L9SWiXKEk9X<//Qg[PO9[#%&nLH1bQ+9>K2TK*Qaa=<bo@(VorV]NR]pWTOYbuB/W`TkO-6V9IHC at G[M9c
+%]"5afHY<nc,Bg\4^n9Ybp,5OGe!UiZ>*4Wj<XT,d53'3[hO^2B/d.A<:CA;S?ZTBj28<+]r0o<)Qnu"^GX17#\6*t.%LX;BT9&(R
+%VmAF0_9.YfT6cM!Jo9/YhDn^bgcl_P6c(Zcnp)@&eR59mIlM1aHpQS%`c?gW9JkC&*VRr5<-';f8<"9BVi33of'f`,.JCr3(5s."
+%DE<OXJ?cB__$W)P5KY0QF_pfkJX)l1Z!!,A*TfW*5Bhl23C:if_Xj;q/>sXRZ*gZ'$L'QRH\r4."-?=Z_D&Lm#e8QEYc`p6$ChjN
+%%LuT/K4+dIG*edr!>-Z+3<nXMVnc:c35!_RdPg90fYE/58!"rRqf4E>a<SV'-r!KKp#SKC[DAa,T",t3e=jm#YQPF"4L,'ao!0qa
+%E>qcFa9'Cjm*eR:()$UgWZec7Z]1qF&HLo%kao4h&GtdWd\o[K4ijn#?fNH:*r1cR)+YKs;_7VgTg11o at 1$&uZlc)j/pAZQ&/:"]
+%RO(5kD/jIfG]i23H%'7on<\Gi.nUE1:]hXGTsPK6[P7kfN1J]gBo="h",5.%M3F8%!XJ3N4-0ii?*%IY*"f@)\pa13,^UQjP;&u6
+%C";_^VUk-Y+?C1WM%M;Jh8u7achfK"BNJF'&$0'[pIDC\j*CoR+T7J$MZp<Te6s"4:F1pScKGEFd?*psb1hb)dNg[72F"YHX$,Q8
+%LB=#s6ZAEpH(s7;PA&QqZMP=!mZrU[d0XblX*<a2Hse+hc]UGq\I)]#BYLTM5G9n^h[riKOJX=I>Hi,h`/&66ZMM\,^qC_mJ]sQ`
+%6!gJLW,O(6B@!.9!4eF"?)Nl5*!0bMA[5AFqE"%tcO[JcS)?";BZ=P^!kO("Hu<rd(I%u#XjbE8Q7^i>FhB%(%p<Pi&G4Ecq`Sf(
+%BC"5mhA/TH?oFB1N[Ss5D-eqc at d62I'(Aih(C-'[*l4:m.r_8SE?,Mr\*o?[1>ujV*bl7H'a8)VFa:9#GfbD060nV3QEAuPF'UC/
+%9ju'"T;HiIbNBG%J7^5i,ru/B\bS4T<fPDQ>(C:MLZcY]5#j$-*gM/h&Z6AfH(#B#m=i?Sc(a;r"96\20f*";MT_"oLB?+'GrL?!
+%D7mq4$',kHD;WW-KA`k>P'u9Ch4gZ[UitVYbO'sNGQO"Q&JVFlZ&LGm3]meBp-TSD5C30L/.O at B6QKr`=jtk@!d!"jpb\p/1X3)S
+%IOgJB':1C-=>ttJ="@/?7W-lQ(/51nT'2IJSckinH%+L9!95FlFObSbR=_Cr3ph6*Hak8QH@#:Sjo21dr/;HY/2,MK4c)?*2T0dm
+%EG*<<MDdOZkim<Jcf>preQFHl?3D+2Y<#W,3B!"r4.g$38"?(7j]sDl#C-j^-hPs;QSi%"]@cAbMqN:qpg5#KAu?O[R=^,BRZ2_T
+%b97f`,VVd:MK/2B[H9"rbM^Wf_L^\5NpFmUg+7,j3BP+\I`#=!,Su-sqQuLGh\daH,'Z`*:3=R?<?!7sU932i997BGJ2uX)d&Y&?
+%:e3K+M%JhPM=n)Vp];VT;2l'V6mJ(W1QO/)in_G78E]!"ie77M8ll'l:d#mj#9?K=3Sk+FE1(ngFt%d<k--p?^Ese#D1ip*Tb+Kd
+%@U)6e^/&9u&UR:/%e,<`2V9:<#KV+QrElIEGRBYC*W++e+N/kEliuMRC,CZ4a`+Y!.CjoqBLMWB=%P[^M>HJBnD3V\#HDEh"1IG3
+%>bb;hLhmj-=9lZ0H2n(r\&L:T3E?R]p07q<KF:Li.i">ZesV^l#(3RRQ)?"[ODJ-IJ/15[q5DkB\'5:o_`\%!OEi_L,>KTr?;;"r
+%>#n-"B'TP*po9#Y._Z6Rg-dGW_L*Ad at O7.FjocI.D;^e[_t%V%@e]5ML*[X?ACNBCf+e&0ASG_1s5 at 0?i,;CjSbqX0`6$Jmere0^
+%9?Q)S;,$nTG9l0MI=p+ZLgiB8i3msUj<[4Z6od6f"Jp^@T-qHa>*9n60$]c(r_"ngED2TG>F6'Shb?H\0mNG1Se':0&kqCuWC1o[
+%7j#_8V_8 at rl@]3AhG]pYO(!ke:.bYu4/=j5A(d3aQJuH=[V$f>Bb_#+G"/"<S2n0c''!@pV*=-%BN-*<3Np?2H1SkLHm-r7SpI*P
+%]J]644F'j/Q"Lr&)BZjp!R_d1F""u#YBu(W*h#5\K?YjFQ(MA=HbKd9!UbJ2gTUQ4l\P<f?G5CrG&n4.IC^BcM>%FqK;V%?.(;/@
+%l`b9uMJUij*YI'K8s%s>/7DpKWuZ2>=F8_#EB&UUYBn-AAHc0MS8=0'L<Y;H);**7Qr^F?\N$W'EoYFhA6OBWT<Ikq?:."fouQV;
+%D.AXX^AtSh+<gUC'I#@KTj/MXF'L(\g-Ia\R5ZD0Rhj01TbD^@D)/s6Cb7o0'C/sRphGgR"IFj<_E[(QO/3N`H%:peh,#qEn2:LP
+%JHi5P4s-U*@U1$LZU\%0ld$/`2Ebun.jjG<8d-X>eElX82e>SIWAP_mL(BlU=sAJJc]LXcbfS9VidsNoiD,qn6pV0G2c:qbV&Og6
+%+C[BWdn5&O%t'fDb?q,I#iI:E?6e1TL(`e#JS"#n_OQhc[b%fLG$(nZPqVJ-%uJR9S>)S;_p3dI:HG!7EU;c5\Nk*f8eJ+],;JP'
+%3^BX(=L>fgOWJ!+Z0_"2fh:g#$6*"dnDnkdo.Q":g<Mqt_-(L9BXU%GSef6qcbr/cm%MI[R^B-g1ehqr3hMj*V]/o;NEP0&["+E%
+%c56_ at DF:1l9?[UnU4_[;4ODA-K"AWtj*o710PX=`pTl$MGe5cGoX3[8PlS^P^Gt53f-?)'ff-QVJkW(P5HLJ&@[aZY<u&>c)D(jO
+%Z9c;G,+XeYGr(V2H;^JDJ.KQ2/3pS3JhV at 2>oCiE1mio<W?*-_:Mi%BgF?=OT^m+gbuJb:1Rua`7-6QDg8qZ`f%0m\ck`3cU=(0u
+%NaB.-jg*Od[W9^RgR,1nEPKm6;AnhX&,8FdVbAi at 3acA6=.-tDrF5)JAc(gpF5h,C*VudNNpmGeW))_N$P$ikk++;_#?9(j$t0k6
+%\MC$$1 at JS99-ju9pu>JbYZSmdiXk7GiRZ*k(;`'WAnEUHEunsY3fs#KFgGBnN5AM2e$2._./?j2L1e\jC_A(A%br[[bmZlJ.m7aC
+%YDU6:`,eW=#hd at YncTJYiM0hqc_q7VCg_6]Y&^>90EMt-eR^9b at 4"B4JdmK.D:Ssu0?=#J"(`Y:\8e5.k4Ok\c>L.DofQhoUSASV
+%g-F<Ei011I`iSAp:QNC"diWb?5!=Y<[R,G'*F5(8NC:"Ilp@,*'4\Nm='7Zb!dT&.9;l:[Wq-AsGn>.Enqf7+H/n4p]ch1gc8BUO
+%U(KTZB[nTQM#@I_J'Y>aK!WL^Vpbn4a@%E>FuNV?(0_Wu&SJ=ZW7_Yc/IZi*B6UEk*1"9m[G=YY:P_l?f\,4'5!,erm54KL-]V\r
+%+a=KUngFY at cHjnY?op^H"n'&JEag'7 at W?(C_V:)qqu09o"dD>DEFs`VX`2'A`%dG$k9MpH\WtdTF$aRNNo/S8(IuS8b>fN2"id>!
+%LNQ+r!6]R5#`fD1;d_0>.3:i*?]HmGVu_;+2L1"69__jU&-/dpQt(9A-O[/rbAl<15?O#G*kMM:*H$4+3eh>g]Sr+m)QbT="CX7n
+%e?#'B+80hXP_k0[*b#^>.Tg;[ANGSM/T;bCj^8CM"^(sHcdi)(\0TY%l=o5-Z0;X*@1egSB5BQDO,LDj+]o9ZYZq/`ll>U!ol.Dp
+%:\gdiX;GaH['!lti6:K2nWsLGa*,nE:R.MaR8$t9];`U[6V(j8b083P&<5iA9_RoD&;Cqm,nT'r,]M1C#?@';![^Sc>Tc&B5GC<%
+%hR4*6[ajco).f.uARm%r#+aJ^VtHA*5TriI,(^,)#aBAD#`.%QS<d$YqREsOA;n`F5E\I>hEgY<1U>PS5P4tXa2ni(BTX+@?,)h#
+%fg9mG+.cA8iaO"ubW==#?7%B:TWFkR+J>D+Z6R:0^i1*kG<!b#+g:CQ<k#KN<k9=&3Gc`*#!8&4"f\eLLJ,&CfIY"U__\KR1pI?&
+%rr at YAL:K2$dt9TdK"U"Vm9>:/i8<'0:(Z8#Eb?X1 at YbW\bLq_5.2m8tn__P6'<RQ at A'm^231W@"<?0QZfZtre*NrNLBNb#[fS8X<
+%(f^NSBII3Mba at Ksr961Oe&QD9[W>QoDI&"'Bq71'T(+_\_7B&:O"R!)>te_C"85Y?"[60L6?st;SKj<QeEV$!^GMrBHM7UFX at RMl
+%cok^8U=6Xn-E-BlSe5u0 at a=^fk(A.ABaqi[h2^BSmitP0 at 9@!D;\#f^&OJFkDS)'#Z*4Q(D49O#erZT&T:5XtHG)WN[c*on:@$Xd
+%:$4135#NnrhuRWKG+J^sY\H[5&7$l$Y5[tQ-m[e*Rn7:Dg;0WQQKZ`KlINat^hGUf:(L*c^`LlQs6,7OVsZN]HT@]?Ef"OjLdpj2
+%\=hJ%TH9XEJ\C)^:<[o5CFB/q'&)1hN!m7XT'Js[X(j[PLkW1Q])r2.Z5ljV#X5aG^B;[`a'd]SG1)b5FJ-5*i^^8MS^gqt8:Z"L
+%N,r4OHk<lI4iGE_F0Sc32SC?hg'=I6`VDJ;,'r!`'g/Cl+2m at OmoYT&1-np1P^oL4.stGq'HD>pP.<R,Jt;*8F!pHG$(:s@:>;Aa
+%X*Bm164,qE>nCfY$NtFhXAmqR<J at M6"N`33>#%D)[%Rr%2J1sZg>-=0bP<37F5WXA at k6$*FU<8r("4=LcqX;];'Efud\)9Nn2:i2
+%$uH<tTPD45Ol=7<p<8]PGr]@I3YmT3M`AZ+ER=FS34n^n4ndRP(5[IoT*mqj+i!0gct7o[m*6oi]dR9kg\SM>XTreY?3qGq>dN$Q
+%L*I@=Tm at kbmQ1:rUb>RIFLN9kh121Tg9&,r!J&7CG8=s?dtE)'4L'$=[f7rj<j(f],:sfTD!h!Q`A)rrML^L7<eTID^Od+]drOgP
+%nj#CpfP2[6Z3%\'2jOmG``k\.e/7;jcQlQl`>MKJbPZKNF%kpUUploud&2F:f5\ap$'DHK]%D'b&>91CKNL=7@<qa/4nC09I&42G
+%.KQh2GnLjs77YN=M&DU'5 at 3Ko6r8Y;<<A8g(u$iHiUdb7H8P(]RU_E(hOWnF&9Lh1XX<[Fh2L[a(_rrXC[T[1i+;rrlX5q$1QUYa
+%SgAV,6e(^$*0ZlF`kc&p':R"S,@$BGT\<6BQQ"T.LUIUXWekDBLfmrOn0"ukZ*jeU5]#1r;,A<'!]6GZLSi>\[Y!*;G&<W?ojeTE
+%k4(-VAj?bYH6rB at W)omDM8sdoF*Ei['^p'Q_m72ok6Ce at hhRc[E!^'RMf0Q)*J?D>I4gh(<f\NMnCi"Jd;ZoX;(/,H!KI;,C-1&V
+%,3A<;#$06154N[=]4W&BV5"8#@hD3`jRr(SlgeX(4?>GJl10(%f'Zp!.qhbJ[O%ul*Ff?[GIXZ4WZ?0-`n;6o\O1`6LWf*kk at IEO
+%7"sTIc^;u'm;4_dq;6scY^P*5#7HjOl(o46ZZ at 0MZZ3_(j7X$Na(^7/??Z@>$=q7-I!(5M:fAL2hHmhQ![P)[&/0F3g$W5Wd1=CL
+%Xr#C:V?`UoGDHfbK,0),ZX3.7B,]ZE];XbR at AP#7+hl<"LBXM:-mH<lYB@)1n/<H:QZMK*LrB4I8O#:b:ANccaV%%_\oa=1QfQZW
+%*@m0'4\S.S,?j#D+BN1frN^igQ;E0gcI%(F+:$j0>d at N$0XZ'H`X1S$SK]sKN2PC43<?iRI*tkLWcuNr9\:n4Un[VNa$4AU;E(n]
+%eSBe4gNoJ=%WL0-9W=>;5(/5Ap!^pAA+j at 2lFjG>k?WXV:_!_F2+[MBcAo33G-Len:3fPJTc^+aeJAm^kYS2,bN)1G<r^n'8n9rZ
+%D8J\K&*0e.dDLD at 3h:>aSc at SC!>`o_1+`>!UQGcu2gRKq2&a]>1*,qKbj:^UYm.AcYCVDZR9nRQlX4X8+dQ?1;_EuQ*O\Znka*8#
+%c>=LI1qk':R=09Y2P3X(aQa+U%M6Asd+rYFX7855GWiG>^-.8ak6uMbD_0@'Kf1'JV?li(`8a/SG.uLj%^dW7R at X:c(0-J=UaV+&
+%2A)h7SA]VrJ34jQ,G"/LAm`)=G4Z#*f'*Uk:gt7uhV+HXDdcu7+4C,A8jI.n/PiXK8+MYL9Ql5j`J$[;K=p>TGb`2@*6/&RPih1i
+%ncVMi- at EWNa)i;Qm;i7hCW$CV([>BN^o[^"*#8n9BFaKeNffNE!%*_D_E)L"KWa)mTC^0k2n)neFPB4$$_uOJ`3ld]jtlG0%$9ke
+%4U=Y=/6$_WS(oPUo$7B<o<8bBqGVK902C>=5^%W_N`NCF>=n8iI<&S&lV<XTq],CN_K^A4I:,!ij@#;3+X>h=Q-,1=52,]Y=Dm]j
+%6U<ehZcJpLqlg1A8[LB[@N(o*OaU=u at V;$1'/7t!R*Ol!:?B4[!M&'#I%=)D1SJ;O:I,Q0P("Xk&U*l"J5iFH-\FQp"]1<;?Z9,1
+%G1KoNLXs^rWCHCM3$#eYa?7ILXICF]/7`s1<j5f"-Qc2XB;^>a))VC1<Y]@t3D(C1l_%l%hE+01/LgLL=Zj*YC7Sl'=Ip*-\!N^Q
+%$;e<HZ"4Y#jEpZ95JRYSE)b2M!7[NblnFmOWqQ]V[c,WRA'9;fi9hWi5s)ukHGD7MQfjgZ\qfWS/B>nW.i96S%.u$/$I=$2[5</4
+%^MLMfF^WC.^o8>a[1:5mGqA-gi1l[aYV@>HgONVAJQ at jZZEo4)82;4pP^4m_#R$8#Dptp,ela(Q7\7rJg3,)'L^21S-Aji;c.T?=
+%$W6fCS$)$YB2;9Z"5AaGXNL+>"D\JAmUqK4\(=dJ)c+(Gd6HK4"\D-,_CdGGBNP[H]L.S_E&qXP*e/:SiKO^cP\m=ej2p=g0]a*1
+%l/a*C5klVGa-&IH'8kt at j_84J7H^+^Kkik0&C\hu!*PBi,6i>nEQd at RSt=>T/G2s0^Q=@6g at ULYVlEc:?u`&rD5cdO^3Y<076<.F
+%*8Vcl!DbSlEp1NlomkmUhk)Q+%@q?"]XPu*`/`E at 4/r(qk>j]F02Eo3XkB'"G^mg,Q[)ib28u7JNhiUee2&:nX[gVi</Y=Fh/h+m
+%\O+AOQ:qmdg2lQsIT;?%(>Tg[]au<U)mj\T3/9:u=H[)#UiQbOq#\<]`S+,,CH-prdCdp<OPq1;?2,LsZ"6_ZSMGb\'C>*8[b,GD
+%daXl278#pbY:&(WXfIJf!]nu53P6C6q0Y=]>_/S*O^g'\`"F8M^r1HL(r_ at uOI?6k]><q3'"$9]P)7r`qsBfqe-TVcNe&+/]NS+;
+%)ZEr=G1*Qmd8P-"T.?8B/Br3`n&7p2U2MF0>u%mTqA-E6$f^CkPKq=*Kjt&43q>brIa;n;UNbLD=L.>8g)!<LkoGF.iD?a(cQ$#n
+%I&_BpE#lj2bo7GNURX2'(FrYbJ$:lu>4tuAJj!=,3%e7MBXu4?@-pd95tA%mF%.G`&t`;K.9hW=i8_Bl=b^QB*)KsmgQan#`YhVZ
+%Aum$DKT\eM5t[lRg=Bk1n#K'P'jluHF$c8=r8-!26@//(L.KNE<1ur)8cX]BcKjh'h[!4=?8s(Ko(72KN^4lcL$-IV-S^jiXm9LN
+%c=m;ikSH'p9TZ^ln$RN-C5`<M<UUCt#tqaula0Y9#.VV[p$[iE1ITSlT\5IA?5u71o0t_.E%H1k3+300YocC-&0K0HSpL^E.k(^j
+%H`6Jf2"-BEne&'PGSiXp=FNSRm.iB"MmKj5QlLa_1l'3.G)W1O:N*&8dP=/:MoQ/[Af\f:?]!!j.8(FRH]U,jV?;Y1\N\)tdc9AS
+%Do;$:<oAJFC0T"3fQ;5=pQ\l?(LO%=8+Z9U8B7sBg4\70_d-5b(>j>_QlU;f0#Wl"lY(FbZ.l2QS5tC?gf+:SSdkm5O$R/ul@%D#
+%kB/uliF/L-3[]F=2*s8L^0u3?$1"]R at _doilihRn:l75T0936)h.+`?S9Qmqi3cpP)fuLl2lBi(dElI*H_lUqf'6>[i%ah<'gEtB
+%)g)0%9D$IV3UCWYF+!I#0;Wupgd+jX*=_>VRmF,fE at bacms3K/GI5tV>t,'HXm1"P&'/VU[C\(2:^K'e-0&9eL"5^2$1i27S3!Tr
+%H)L#?9$,phJg6u(]Q5nAA(i_ciorO,c?Du2M"D+Wod2m.4aDG_"M`TH.,"(D]5)?2?a<UULXUik1?G?*%hA[I_^Nm.!4#FWQ#lZQ
+%Geq8Aom/QXA$6%5ndHU/"5mT)mnDO>mKfos?>iKO0./t&pXji&X2>.SajTPT:t.S,rNb80'MrF^cqf%08O9==D-^"/-;t>_^DH5L
+%nf8UkZY&mZ3kno]iu,o?%-F?+%;d0&;=7aj`kHeuEI+7Gh(lgooDl/)*6^>h8&<"U=_t8GJqH:/''s.aoO at Eqjt1_9=^`&#*Oetm
+%G'H/Sp%G`Wh7Dcj,j+2Rd-];O"!%[ai![GcNY67lo[)O*1Rh/&fAQ'>S:b14"*fm)UcNC+'Ysp8F$^m&qV3sn/@kXl`<2E]B at b-J
+%Voi.F?tG*PT6M+2PAZ%d at -gq33d`r4InPLle7rX?EtFEr9<BLu;#CUWN6H56KL5sdOc$j/Q,eIKeRsi]Gp`-t0OaFe9D3M4cn]3O
+%7-)2NZF.rd%gWTRiKY\-/+L:FF=E"GCs^H/5Z7m5WLN!VBcdl'Zr><X,n?)D`2GJ=Q-6U?1cTa&+tf)U_db.r$gD25,Ceu9D8Ed8
+%c3d,a4l7\lo&(Ac4*t+_'+_I.f++HeV_`/692$usn at iT2)b-*`02!94N$iD)_g5%\+aY,mVPW<R"?8m#.5\]JpII:j^]=Ek>6Ha?
+%GANY7L=5P.o3=iDE*@iToC12mLb/]_g8'$&1SWHHK<*^JM>MT*(/jUC+>-Or<al-eM_OOOKNEb.\##k^%s3^C%W<*<F8/E3^FW<)
+%6 at L$.0S(=Yb`/fSmUm@`E!jksSo&$(%E$#FDsmo"3XG3HZD:pt(GUg:_7IM7H[dg1;C9HKKKU@>hM#,s#CHNA4Uf at P<M?N)X9EEj
+%loCH4LMeo)KkB#H\_:fl_E-3mCLpg5=7<,G2D.(Dk-W^8=@>:e'*sZj1=p2&&4VO\-%NiJ^%;\FS'Ck`=f9gd4)DHk\d";U1fsmc
+%GB4M&:gRboYr%saGsfB!JjJk=_%'A&)/j(WI,X,:O58[V;%Z5m[BD>XS$K6dZ9R6R6hH6A(ur'feDdEG=*pMsZKjKB8a-DTM>J)n
+%M&l,'\d5'\B&f7i;Dp*c)*ZH?qG;f/,2@/q`Bk/l;=$d!N.si,m2^NP2"n3rO<qg2YoF%>]X#Qck+%)UmbKd1G`ZdKl<.A`dg88f
+%jRM#rZ+XM)e[/QAGhD4q4;Ye&Z+*!(:7[R)r at Wp#"C;;h`nm'mpMOVJq_7j2+=IcWRMC1^WJ/(8$RI?lF:`ilhCE9=j#s#jCHgCF
+%JZ6j at qHOer]*7H`Ylt9qiQMQ<(n at PJ^S1].-@"H)(X^fg]o7+hA?bWJgr5HuW<>Wt^tWq`bMYPRiYA9M)^XaF/2j,/4i-u<.kD]?
+%II%a]C-AL)eJN.QNnI+'^b`&'joP!f.+&+1H(+"8^Z]5D[oIk=+Xd:oRlC/Z/J[2%M)gn);jpE9]Y+9n"E2"UhVKq_^%+:42=GDY
+%bfY0cs0D!qPA*$d,r/T\mk)%np9G"ks1*mDk0_$'gTdXql at 5a7*MmZ at dOf7g%d!D)i$U,M>g, at t_0)':o[3e6e-ucZjT+rE\NG`d
+%lfLBZDn]Fs+MYlXhDf^`-0]t&T at tGNp-p)5)(A?GQ,BG#IY=oVQf-aL-caPZGmJ*K/=^GbRgA9G!qlabmlGQL7#aTLDr]lCVq4`#
+%`ED8^c*S9,]?,i(b41PO\KSc^_Ao]I*ZK^dZIt`7^%*#(L\1g:*PIfZF'i_!m2C+jjN=s\i?2lXTrF)SG4W3+4!<U)U1EfV[B$fc
+%fg/JqX[io_BL at Eh':(2Mhp&3BTCZQ2-,+Cj?9CB`^@dnD@#h8A at 5FL;"=s^+r$\Ce=^:Rt_X/(Y#>Tik]?]s=$Wlee$c'l//hJ5_
+%S"[6nO>X at l)PFk4(d%,]ZJ68%6u4E_.O!l/5t0m8Y3GW1bN<-lY2)9a3@=t_"gtUcc;$!b"A6^8?K&HI2L9:n9koGro][6=R%O8L
+%'EkqZ=3NYMB`%d;>4$+jf5i)@3aCrj<n76L2U94c>J>*4kJgNb<YkGpRW]%RgOj89EnZ:-59o'MK;1QHik=_VA+NHJk8(RVHf'^'
+%7]_r)i#+6YhHcIn0upDUODGqI-#W/epV9!TI`&^9OHK at EIb8pR]VS+u%PPk$!2AM^?18=dENoM_6!tS^XHeV+,hg-3'`0pgSTdW6
+%,6tJNMZp-Rs1o1'f]/RC7FqBW3XB^FD4Z at .fmGAbJqJX`2bp>(cM&Stg=ZPs5VsHbhJWOm'nb?iCb$RT!(4H5kW!2'aVKms+S%^X
+%TLKUA>TC9o"1Z%A7R0LF_SE5A7[*b`^RT6$'`,rOG?PO7&tO78Zq?.`FZqA]-]gZaVY/+7%r0EUc"J1<&T[)i?E`?OQX21+]I(rt
+%i+5+.Mj#]`^p1PE>Vge=K at e$$J"BV!9t7ZF>)SXko=:^6S!I27,%1$-h/mtY&sIs]ih:>Q'o38-QCho=#.a3FgKO-[]itgGZN`s/
+%oTZ5\bLr4g+aSKr0*L:rD8`"WUXmdb*ach*<V.=@SC=_O:t+crUX>9:3s\M1T_l<Vk_t8XOYCb<UnWb-H&gtpe,u$(]m)7jRn+j[
+%dt-S-a\&.UHHS(U=M<\SL?f;E1)^t*V_%4OK@@iP#=2bnMG=U2,C;EW^EruH%<pQpW\Zq'aRZpLf!46+b+?KP4ot5_TCOFdQ6.[a
+%jkb1UJh"pjOe)E=aie'dlg`1d6H66foA954AYO?@FIT"j:71C,a]:m4m+_a4W/VU>6um^$EfMRW]3H>;F^>>8fKin2.o+uEamO8*
+%l2>`J/'C4I_OsW[*_a.hVaY:-,sURc]6d#40C&[tSaFCT:O5KX.P2m7D+&gc$4'9X(sS'C/%-OpZ-7DcQFbieZ^0Vt*a>It#@,Oq
+%GQp4toiu").,_MO9<\%5C0MtI"Hb5kE]EaV5QmmpP@>'Y]F]4tQNO!rptO!8UoYDr$Iih5&GJFEfG90WYX+<,#7j23i*HLYFpduX
+%2p)+m9AI!ta,4FpSF^;S'O9e#YYDb#c+87dj]ta,Mgq6^[;GU)?6-MW`F&R(>)?$Ad6DUNF$K,[;q%@9I@@_p,IYeGo=9b3)fgP4
+%A:U:@gsr"dgDcZ7e"d`,+ at 13t*=G]mYg_jI.G&mPgS>UWb\-##-rWH]M'bi?juo74e09S#91pG/4#aF+=Q\0-_'okS02M:CL?@kr
+%CgW\*oL&oc)6nUa$aa9lY!>3&Y7,WXhB8,c<;,H+7j+ at gJ3N--?:8(614]NtJ"`E9+T#BfHGND8;-&\u%R;d3:1%s./c%KV$=9%Y
+%r+g5?G$)CenNE6fK,).'T[TBi)`Zc;G6dJZOo=tt^P4Ffm[Wkg%;)9AcfHURYgV$8kN4)tbg&H/"k?8-T4ZlEX]9qu\*81p[]V`6
+%#,N0abM'ii%)a+][TR)F!SN]schc(+O\Z8=0O*U. at QAeL,')BEnn*cP&]8D\DFg0h`QN2t/X?T)$&,TUgqB:m3fU176G7Xc[#`Zs
+%qD1VqH>euU at 68T36<0X7QF1peQdWHikpk*bc9&[,9,i&ue$-1?IYcl9g@\-fldg\<^I'^bgRC-i=W(s?,7o7!AQN3Lg=%O2HU/Qg
+%k5t"c2Pf?M&1,P_5)70R>rnbZ;Qm]XU?uVB*mI!"_qP^[C:C2>#84>17_m+bVJi.!G!*RKFjGsr#k^q73\:i%cYT;M5/f&99l+c3
+%oGo)Ji&g%o?>=Y0X#32o"+A$;K(nmm32b5NDoQlIEIR>"F-`DmeTGIWRd*7H<KW;a!uUsfH>:Ef[AOepQ?XXdq3O7:BbcC>`nSp<
+%U:2i^OoN"p8;-,rYLF[_c^!-[a/rD/Alpe3!$G023n2Y4]Y(htS#,pg:N/&-,<4KM1?@-U$*=5/[XiH\VUOc;DU]-b=Is0)6aK,P
+%)-:UW&'-cE-)E^k0qlZp)IAs[AKcR6k63BmA/W12ielPglUoHr9&=^GT52*8#)5cOi:+;hpj-/1QCcBN+o[N<:Z<J]f at u<Y(sbA)
+%7snV!/8UM,f'eHP41U!aOks8;3$Q at GeSk(&`i.jYU7!rreZ?4T361S4po^MLpG0`Fja+<.bK?pM$o:EQ4(@Bo:SD^l&=2\`Olc(V
+%DhpeZ>.7t=hmC$r?+$8.k(pRn[!Z'*f2a%,!/Ze\nTYMr[eeIu1WNl9n!#iN;f at OjP@^qraA,I]VP$U`=ZCQkI+<X<$THEq:2;.;
+%YZd.>LK@^Jdo(FpdVC#\[R/MN0l2oACUP#^M3fM<(GF/)$UdiH:LP"Y:aC at W&>3p?DK'2=kepB=;[QR<3BVpr:4$Vf5VuK9'?@aK
+%H8l5]b;'eQ"kEeL<bFJ#jXhAAW=#kXcS1QGB6YcC7AAkEX(pJ)<FQ!Sk5!'bC^gWDjqS,.^L&;k+l85#6fMQ#?HQ.e'*rg'c,p>s
+%O4_%ad&*X\ft,G+\j'FX=.-faSVb[j4nVLG,HqO at lRdaLZ6#pEYR&?_i8H1G]GA^D\<94X!@4BY:;35,h!ngR!:+^C0V)P\-Hq1O
+%JgfBi&>hYXb&n4M$Ne6_qrA&s,C0pZBl:pkVAEt:;Usj]oZ1E'.:i'7%+fTa'-k//qf3[h7gRBK)Q/??k*r)8b>1s`jd]$H7Tb(^
+%44f^n21n;)n?C]k0>-W$,&Rd(lZ88n=1hP2-U3:j<\pI(]#C$H61RM=n6Gps4fp&?2(,4MgB`I7\oi4i5ZIh0^`;eFQUV7*.k3qK
+%3IqQFK=k<*qck$Zc0Y98*cT'r>je1,*i[uASQtZ=(JsHHJ1oH\?E[?Qk2SI+N)(1VF,@'pe=^#)Idlo70jn at m;ZRlWB\gUQm^4>d
+%55.cSR&[%c%o2"MgH;9u4\^;XIWetn;Uc0$NGm*mFio+g<T6j8mMM,cgm3V'S!e=khJN/f at G].(-dcg4B3:_uU3Z`bH&.Y)mV$P.
+%rEN9::')&_FD8p6_5e5c%0k)sH^X08a_[o\7(uI8s'\J@&f)C9/o^k2nL8]aY+lF:$ib$,$t^UtbD!a?72.9:XI]%K-A^;q93Zp1
+%LJu1PWTbjVYOZ[;<-Z6(*6 at g.n7\;XF)\#K'Nh\O)1,es9]Z-Om(HP_/6R"aqlBe_5K!p1$.*,WT!o at L(WaZ`BG"b_ at M=?2j.bIA
+%eH*#%.A!6T!n%$Rla,t"&NNgsWhh):/%Rd:11P:\K at r$7Ao"4EeIMKgP7SFJ2Aaggik9etQ#E0er/.pV.$EZ#(gn%k')_M3]B.ps
+%AE:FHC+C>I%KSI(9hh4 at WN7j:MQ[e+$&&"[:/K<<&XK?Z39?$O(jsksEMuDQZpffn8[cStm36iX\LuejjCpTpm5&@]K;";-=mArH
+%6qCO`FM[$1CC<XNN[cQt.7`3u:bg2J6A5QG;-u*-$(O!qJWcX at o;4AT[lqrR!`*6EjM)MP4=fQ0!%9#,5ZFRn6'3)VPHlub;sAf^
+%r(+SiK0 at .S)$9Y<@+hK?W&mc$Xa4-kO$4HVfC<kEp^.!/KMKn<2$0`eD`d,_ci\-F2bIRASO`EB_7VHb&q+/!\NScTXp8G0*rRGk
+%'bcP/'DgZD,ni$lKCbra)Bugnl\bP3mM8D`\es?0Ur+6L1r5eW_[Lcf>Fiq2DFHFH>'6V"'E4sBaD(^q_hd\^iME>m=N`%&,Kuo&
+%)Ate$9e(IuEo`,7.=HiOOBq2Vh.cOJ9G(uL%5aK7H0nIF/$s7jKPR*Z#bA-JlqtX;)'$dWK%?B03k#agY9fpE7&loSJVV*Y0X;pl
+%(`'4SI8[9+;c616$Y!i/7?%UQX]i]p[ZM-kOdi5'?gabPoRZ%s)[moCaFS(</92F4j:qiY'kECd"kABlJ#q]_'RQ$J&7Y$?169;d
+%PuID?+;KXh61L;#d7D/DG%<K8Qurdr>Om/aM7O>ObM'`8WL1k\Ch$!k4h"OjOObkEZL!o\;lWQY!o3!jqBVJDU at l=LMf?*T!nD8Z
+%6(F\mS<OcRQQ`G$fg^Y1[,R4Lcpq"(6UdQ@*T'JO:_SG2)8N;Lh'8k?a;I/Ra<NcT-p^+3^S)fl"OC9A\isC^o#OJie1Fjb'`Du-
+%[ihB#[HEcM!D7or;.&`-H8B4?Vn#OSN*r<6^D2Uf!McU$Qr-k_-pDW?W&Hfj/S?m]"FIb>'MCkBd?2jC;c_O9Rt\E<@ACu$QI<*,
+%:Q9a*,qT`!!f/u>S1+eq/0mTon*+A=Z[tNYG.tcJ!R+70f at 3%nX[D00F)D##qE"o;._:T\Oao]5/<=-f9[U.q/'?*l<\n%[>3]YD
+%>ZQA#!53\,`Fl3P.KZRd4eLYs6)msi""e0ind7BgF=BqM;1Kes[ci6DFOpoG(7HX_BIM\&b]kfs:F\%=RSuU_1ARkEcD=JS"!$D6
+%<0u(>K;P<hK;'q`5r_9LA+?+k at 9D!0,#o=T(X<Yp0@=B;*kr(f2arf8DJE67Kr;eoo)4ZQ/W`g=d(,k0m,0*_(=-t5]pK!PnoF5S
+%_8)p]U37Lr\4gqA at c(6X!YgtdB:gQ^RZ-_V,eBa/'.)?N'3P>mdH0KR3OUUYK&:BWQUOc<J>0:$N;1jqY!he&"NSBD'0RUuO6Nj1
+%l!$\Z.dU0r3\'&X/oEcWTT5i`mgGh"cgdKt!bLdF$KY2ta^t+#_iqr:R\4e[!uKN?!V0)<-L`cLS1S`"=f[9X4,]j,8pQa)>KgE9
+%=/(ieR%m`.qNho2Xrb9$)&.LU`PLSF[T0 at uiJG?7$CGLd-pgOg`#l)+BPA?4N^,02^`@&e#m!L"P4B"l9t1jMGIZap('B>T$"UtX
+%[T*u\kh1721/5!f&`Mr-U$,rd.)ct&(sW0F!FIAL0!MuTSC)&_qLOk9dNH+b$W+3AW%RIJ?ZFIKN00n0L%A_`ZF#'<&)b`%fL)8F
+%7YS,:]M[i\2L2.r8:f\U+O=ARd8_%4PiO1DQSM<:AhKeIbjj'dIhsE0Z4-dZ9cdO[&2AM8WN^stM,R[s;)X$J?3+4>q&iJMBo#Hn
+%5Wh_Qh5[aPne3cIa?M>*[A+\.i#Z2!9Elf3VE#;^0dYMB/6k4\Yr=1RX&P>n'G_DTT95T9M0e5o"?n=gP9lLW_3Z>jg6Fo2[L<2%
+%%[kbq7-U=8R:J/=JkV1?(h'q5l3)Zu4B<0SaRoAYcq?OBUhE!dErQejba>9k4qU>?94f?m9lSHW'gK_ at q'Bo3+:R[7[q(0M)=Zk4
+%b';7dDQn4k.u$W(0k*\HJS5`W6AgY]'$t0ZdL*a.a5L^'+YKH<!WG2uX\(j^Ds8`TXm!edCAA'(^V+?L$8,7^XMM8ib^sLW5+FE5
+%f8>&8ln\D/g^+Ju.$%Im3k7eFH<WX<*eX00LF3_i7V#[>Ha3u"2[flh?.iNNlEM<WX[bhklJ;UB]3I5S+HmP%l2MRlikQe'8O>/W
+%)5@&K&-muB!ei,r@`gh_Y'$PljlU5]+(_^T,TQ,?%>nJpD;.qF.H&)-^d:sI`2Ag`q<1]]m/0OKTqIA90u,ssX$NRe0lA+"e at a#S
+%XB:>Q?#?E1GX5#++Nm`+Zd?"??l%,o'4@:aO"7=TMYaEI7]VWV)suMbSOipo3o,Ccb'Zh&>'6&Cam6j^2cDW5"mQB!;a8MRODE>Z
+%UI#_5er$!X0GoZ^,[@aFKk<0cR7^>4S$Y$TXno=T'RFGd\71&"EXS*Xl at oih_W%KD`8%$H(CW7)77H:777DKFU"t:Z9DWcDTg,%S
+%MS;65+Nk$RS6!(N`!!eObu`n7($I6c<6iT.=4U55+69hK4]&@u)X1[b^5V)nD)rqiHADb.2Kd3$2N=SJ*fJ7W(0s_BCI(7=-9Qul
+%O;>pX%9cmj\1*RW6r5llk#ik)lUOK@,=3'W*0LMZgrY)6_2&Hr9I3K3p_amDa;SpR?8eqrPV at 0]>&dm)$l9Vg:rr9]!9SfL9QIF@
+%FVGT6%90#!$=$,'1icRM'hIO$2'>TmGbC$_Y#,e%LKddj<Bs-J%qd`^$jsCEe at P@9g:e^s<t">^2MGN]XZ=p"e1'7;JTn8r/tbk6
+%AI7Ba?MmD"@tr$ETbRcS*s!85A at 4tT2o,-1)(o5CLe`u#-JqLo&9`_pj$/=AUi8\u1(VY?`=7`&Kc%qI/3d;hGl]AFXMLZn1'p_A
+%W\gm"&MM#c*E'L4FL[O$j3nC7i=`MSZk[dJPLZkHpPaJZ9Hr!+dDA&i4iRQF7u45Qa'#N`*0uqC.)e7P5`?s&jtGq;'[h9jKd\Y;
+%BH'Mq$D0-^Lp3R#:P:RRUs`giKGEj]B%:3'#2)**#_?*6joc+j82Vc at YU^>$KL<6Lq-51g6+e(a1"tUk(s>t4^59:"]"gAOW5CmI
+%FF'#^Uma0_1jX94.5?o?L#Jr(k5_iZ$'F^8g?o-?+Y<_0djRBnfQ9Yg]?*TJ"5S!RKd1;$OgS#9k2(?H'Y+5D*FP!#Bj,pE?($[%
+%'U:)_4*\=bGG\9C-S_f?Q5A\8&F;`2,HYoX_TII,gb;&&3KNb7XmAXhp"J_m>++*)*-%1eFHMb8"fA&(5WeSeF;tSTi,2%Z'D=<I
+%(9=M]>>&0hVDc%Oc#BOqfHW__Q0Tmn5lhh?7e_Ul8O2DE;P,R96F`P7/Y#&-n?HbK0*3Z8>jWmKSl`;("OL#M=fG*^oc;$#^Ba]k
+%>Z`EI_%8]Qf!Po^MroQBEjALU*iKQtp5seK#bDT_6G"<4=O<Xk9d3q52lP6<T^P]&$Xs%g5u><;'$1m)0TT%NVAaZ1b'"LX6^A5U
+%O;\$(q at bk<e(XDXda:894"h"u=-<kC,SF/!$PnVfTN,)bS"T0YBqn!oc41G+Ph"gP_XaF0T'.(CBXBW8M?-";qM%\(Fu:1I9e3-`
+%1<6c&nl>>UaCT%AEWdCSda8nlS2B;U;$6/nK@&4q<-(UapK%,.;dPubWoW[MT.d5jdJ#qVf7I6s?"#YaA-ZVmMUhcpSoIW[+X!4%
+%5;G;[d(?)4B%WaZB@*$m)A/A*.0nI.PL4t$7#4q=Tq+XrW'KQEpe547d<)=Ym^W`V4o-U]QrZZVrmdEC+K-SLH;"Dh<VAtlRp_OS
+%g6K*RZL3jS(pN$XB^t<rb;=fXomV3aB^lr/eJ%W2?'%!*N:O&1(t2Eho,GNG&cP<im@'JO4UKgI)CcF at i-s7OipH6Q6.\R,`<,4!
+%Zj;[q2dCodV5D.h;8A>Dk!e6bnB6hJ4N-hA7+qu*1D5":P6oEh9N[a^cOFt%`i7(.F)\HhFC'=Sa0WpP64sk[P6$$i""eA<Rd6m_
+%eYaiA+^G/Y9p(,aM2f?hDnZR(f5dP9RAtN<OOdaXD/f>p-iXqpLFhpWT_(EmHH+=+2f[e:NS`seL6Q](YdJ78(;umBY&]9.+RoG*
+%f$``37/2CJgNC>geQ5%V`Nk-(PJ^JbTcKS]]Etl1<4lbmMO!;E+E2Ke_C at u]C0ZLR<_pY<-WF4g#8ef\XO'AIR%u)B;D:RS,>QT!
+%_);l:2dIH`!5b/I_$+:)ep%`cV'9cIKgX3,&qYmn;BNY-D\Ysj8Q/Cg$7D+m6*TnO0P)QOTs]@EiY=ci0=\e`MKV0H9q?>Je.M6#
+%JN<euonn5k*Anm[]%"Glh+aN#ra-7A+ at AAGrfLlifF7GR.>-62(`%RbU?OL at bJhA52W-_1.2AT*!`#8E+_C#M[$djgf!\5UFU4HV
+%oH!!?T\,=pO=/MaUV75/"+<%p=peW8`1asb!N!%;]%&bH83(4$kjhJ3Gm-V[P^I5_-;*M(N2('UY50OM.$T82R"Ch<)J-^'l\;-\
+%!*^g<ZZ:j3qsFUGqCK8.d6o1J)<j0P*$q^,n.b11l=b[$^/:rDdgQNsamC5/a0q7Qadr@]&5YG*ji.V:6/R5-_#\F&`2>qf,GOg1
+%cCWUjM at qHs#T!>Y:npk),G\12J2/5j']o$JSHF`Y'JO,c,UC`HB2[p4rdmVP6]$ImS[PC>f*in%+?:X`L%Z');!;7pE'fm.WLG#k
+%.$uefg:dXVO;D/!Ju at s-8.WOD..GWI9NCDJcE\"5d?MGl^ENnNTd0J2'@ff\/P57<JU=<P*`bCRepHKeS!`#!PW5ikEg%d*3L4*;
+%"iP\n9!eVGMJ$I\6!l>6F#6O]_itiLUQON=ZjV!FV?TZ(+VTI(_Jp9]CE]SUi?'DoK/L>>\D^^CGXI%H`laE^RW. at fMTgeG$j`6P
+%!ZoeV7saB5qU,%'*Ju\`S[sN4G*sP`MI\bn,#T]o**`r0KScHHANZ&.&9nVL6<<`OrScus5olf".h"]YoPcoJ<1/V;i>Q.i;A\Zh
+%-;A$)oR3?g/5Vak3PcSEmDOol-5eL`2c/idirj'QI(:<P1$IX0Sf>R("NUi3A6n9)7geRp0<dqnNZ`[(p5%W2`JPmG9?G<s,(_S8
+%>_Cu(8jgk'3HRe`HUM,s8('7?4.#)#cm:.^]E5ElbQMb]'*;k:(<]LqFY)6r.r at fbi(r9cb"4ECAE$2,^fueYaKiTSAR$j.>D;p<
+%RN3,0R"*(s&=NlON0%g()C1S?=-KN^QQB#6g0i2tFA0lF"]-9e"S;ei6q,qMMS_%F06k;>EaT#8a^b&8H,;J9K;cT%#.P?kIrl>\
+%(L#K1V;MLPBgOATGE3_);\4R&d:%WSe:]qX<AAQr'*aC0jY,=eg8PJNXdmPN.%m''\S2gC0`<pjRgRrOk[->D[r?\b33:)'3om!B
+%#8JON[j;-/lCSG@,*(T@:+K't9HKjeX3 at 2&?%l]3!G9<P<B:t1lo(7mMD6Lef'_%#b%3k+j/p*lVFhq#d3fO"g`-'!1sQmuTL+2,
+%H9p%\/s1!<9AUhd3br,qQ;s?FR7'Gs[i5NNg66%Sjc^#qFI4 at CTRs6J5a:LJ"XZK5>+K>jV`>[+m#G'Tp%2ef8i/6>4ptHcP`<8]
+%Vq5E1CEYK".9MrKQC'ZR9(753csjoRWiO\LP!u&3`)BDiHJORXfaF;ac2pSN;t,@'P>NkfnKBU:#D#b>PpIQM2*fg$d/#"D0khRJ
+%d+.Xm:32hU at 3-ut?%CN6;^al.?!RpI('S5tSK3Q#qI+OP)Tej!0fmcg1<\a"\j6fk@>1;<C@)oHF">4P<JFobAA`(;5eN"%LosFm
+%NY?Z0K"adl0rRU^4,stEb]9eB1D)]R1lNqA&[Ge2&)DoYgOcWVVU[67DE9:[EBnLN%(*8^<=>&gcNoQQY:@ua+=*!;T[f1PWLAWq
+%7[j9V)Z!J9!aTa*0F!f;$5;.[45hDSOV#/\qI6E%(&U>'$>UuZB?Nh=#pD\iVlqV1eoD1OUjN;9U8$eO&9NT_-;Yl9;h,B%]\LfZ
+%8.tPhJVHYH30K,%&XdC;Oo(:2T,gs&B"]$sgosP"%b5P`P>tZ52Goqg"R_3K`<AVq8:q2r3gru6Iitj!][W1eX?/r67p*l4<k&WM
+%]`oD1BMff%LlOl!2,<BmM_rhFT0\K;315r,c5;\ND.'`6H&%dp(=N9o4Tnln:q%WZ at 6jC\g8oSX4GE^"J1usDZn_mPrL"Aid"CQi
+%7Aga*i)*Dqd,94Y=+t#T"pFdmOcgm)&pld<Cs2.md#!k_-%Tc1A/$(_O0G?T-LZ4&ZEQXr=:eWl4U9+Ch]T!doajPD'p`^'3<1$-
+%0FaI4D(lh561pA_7W\nOqE2+b=L_<XG*ToL\@O%E<OC$Q<>'(M'"Kbfc5^:l`?A9^K_3WcGR/=p)T4"W\K9]l\52A5MDFrOa5;\G
+%.J!$I5("62g"DM-]"gJsd:>c5HRp-J6D!(;oaO%bJp&qa3L;VT#FZ&Q[kZ>%13q6#O>"ZMMC(Ee5 at I:-VDMkj(98Pr>TptX)#[U2
+%dtjgZ8je/"Wa;/g0dE0cc5fJe).OgE!J\<2h4-5jOpUD)?#ZKbIhd3rB^0'ONl\O-.hKj*TLbCqQ&kPOEfR_`L^\J4O%/M&Z at XQ[
+%jOC--6G-3.e9WiNR(j$l;IP+d7WEb*g6l1_bqpp2ap3KZ*kGK0(R=,C=_=>#YW+LSZM?:s9*ba^p%26*7\1+M(fg_o32#9ppGFFT
+%\8nrAD9*!e.[:']R;WS0FFbKiNe,boP_VC,W.?b>"WBT.?o\T)E$S0]6[;l!P+VV;3.]oj^M4bk\S'&u!hgA4#7-Y&jZAo^ZnW+.
+%?9=%<Jc#n?da5!:g8Eo)[$0SC#YjiBpt!*>\R'FSS9u(ZIVIMk'-PX[5jP4X?VlUoNN at 2kLek>9/Xa/Wd[o\;Xr!2RP,!2U6KLI\
+%6QI]B*)ImMm=g/b3QWgK*eq%aG(jg(e"R4:_-0^?LEXE:=gE<pKZ at R]kZcD\-9$SZ7%j'M^+#5B-\\#Mp>TPqKLXD2k2Dh!@@$Vq
+%k-\"3a/6t=+)/PTJH(AL:U3I\W$VY,,^;gJ?+/e+;)X#@&0X^Xab#fl=YQ3^(?jO5+9mW]mI at Tj\4a<l9G8+LfSMk0+bpL5-:Hc+
+%c1r*j at kE&<*PlQU7N#W`9Q40S_I"F;R:5J'"d0EIJe^9uE>8ZgUo?N?C\$lRi$c[N<,rg+q at 6J*6e3#U<o%L:fSKC^[5ceG$Z*N^
+%F:9SR?S%_%nC27:+L+&nMWNnSBdaXjoPi)W).O0OLf+Rsb31dI5.,-1GmZSLb$$B^)rU>IBRY!8i/f[t_f;:gh$Ak/lp:+B-%!]O
+%oOS]d+W_p8b973L"=-%h+,S8'cQTl&WOSe;UnGE?iNf6%V<:e^6*LAN4W4d/;_"$i+<N7MWW<_&j6UR09!-ogON!X/VG\*s#X#oP
+%el-W?7g#`3KKMgs8^M+Cfbe:0q.S8DWH)9"0qqu9bnc:i(YK>+;pj!jiMOh3?p5:*laO/56DgRG-URBWrfQU^OodVD4G>]Cg,$1n
+%C2t'G;$.`tO]EBt(PNUq0GNl]<[J^2.3cQ3[.0h#7,u?SVG55kB:oi+">\.`*_u%+Vc.:9#EM'KhPp1[:b`"9dFsqPp!DL6*aske
+%4='<*4bp;hg-D8S"Qk(-_\<a[5R,f5V)%h&$J$98GD]?&@Cr5^V6err95$dF8DtgjaFN](DtMP.OsQ?"eZ<F:"I=_'@!eY=-Yc(F
+%&AQ\k%:2uo5D at c0j,f"cf(1p8nBE8sQi\G6.CKMEU91A](s3[Iigtg%[DKWQTR.cBKI.)0BR:./+WuSB7[1UI[O?ptje6X at ZD^<r
+%jq3l/Ps0:u+^2?7DM$\D,:qJ*=#lp"BH<b0-]8:bqLkcq_Vc(J?023*$*P\^mn!%S<k0'EQ3!*_aU2IUS1qe]:E$FRIn"ml+q)_B
+%m]**+F</RG_Wii%l!5&&^n)JndTN<]?IU"3FPnOWklCZKR1BkWP at rmF6A$em/V=15.`Yt#6b<ndJXq.lM]eZ.D'uujC[O0cXkH2`
+%=XsVU33&'PVMI2S`7'jB=t"flXuoOS.`e5P1pX&A,:XMn,k[gt$G*f+5\Q[%r.V+kL%uut$?!]Qd?E,jJQ"$4C=%g++:(:i at eK:C
+%<6`QLNAQ?%k[Go7&*^o_Hc,'AAr]mMqOnG_TGU at qS8u&so;J1a\g/Z^r6.`?7iAAL>bGRu`DN.bfNMCB0M,cjq(Vm^D>&A+9YDoU
+%7hZb]3`n at m`WX.^7 at +>:2l%r-_.3qpk>;\[JVPrEBiW?/$R*J8aB6RI#k.)F,:\8i+W?Ho>.c2:'8!&G?!5"\*=>%%RIWg6jdbKd
+%aAT*:)j[.N^1f1!&Sil.Oq(Y)Pf[%US2,9QN`&sk]:NG9+%[VMoAE1"NMJ[`[*"mr,<:$4aMX*r)Qc8dWeT::eoX'lK-MRQ`Mf+8
+%VP=Y;GX.,/6?2*t^&1]QlRaCR.$IS[-e(ScNZ;Fnn-'^[as">;VlcqLWZn_7#PniOnK)E&n$O?P>n"uF"&,Z,2Unc*+il3!%PK)-
+%T2olscndZbfcKE#lO;ZE#;ae;EWZ?BfkP1"aHU_LePj+s78%/BF?R>80t+Al&G)RL)F:-7H$_T^.=fd2es><k1t%6A:u85%+ at U/P
+%$N,Fo at okB?d%XAnU8sb[4I>^nI^.E"-u\6>WMKUXP!JYI4YCj,d+,lR"R"ll*7]'`La_C>/IoaK>/9^ABG6kkMl0_f[\(HR9VZ8T
+%3G4fpRa,C!J\4_DN0"%qH@\3_M6K^sYE`30bdkftoG#fM.AoE3dB@\G5S-@/9g4^jQ%ME`jr05M23?c+qV;;-`Ms)rk()^%Fcb+n
+%%O)M\",A<VUf!$dhE[!sLCITUdSl#S\BIOP_C\aM'P(oX.H"AYY::+?BTBnT`;^O2Buh\B;%/h'SHL)HkUp>Aj[+*N!pR:MC@^]-
+%RKBu&$=/Nq:e9j8YF$cQ>G8$\@n_PPI4-kIpjW:LJ/"0LENX6macl?q8$Gd;Zp%_k7Cu,.,12\4dG!!j(82%8$r(BM8E$\`*NAiq
+%c5`73K):f*5_,3R/"'(.?YF,Gc=REJg1p6#UKbW`&9o1ATX]1W\N*as([CRiUdXB0P]D;,#,-m,rZM,hZ<h5CU+.r9rU^)65*6Wa
+%V]=kgaK/lSN4s&"W'<uXBJjL$7O5kc#BE at 3.#VCldaU%Ye+qcDWZd-:aWZU1V?]^_;E/'[#9:QK6-#ZORQGb<4WTJtq#P)s^*cPV
+%8X(oPU)Qu'S+oI]76u$k&0O:[W*feF>aSe%[SB:lP;[WrI0@(p)8WiBqLd+nRnuTtfqIf=FqB_WL6_o>?SPW_!O6)h:JH]d/fN2\
+%?uWX[_3fcc'pR[928O:6@#8u1VO8/?Ig(u*ou3kjOd>=k$kp at 1<brgSJhipWKa&H;fV$^][?3?BV(UsdR/8M7SnjJ^kh^EF_PG`)
+%VIZ"q*-T"M3g+>O8:`9nP^c9c;(:L#i,JAuk5n!umrDMEF[;PPV-[P/d%X9=FN>U/3J#^)Hq4I8T[@3bGaT[@-([VYS-XB`cX)\8
+%)fnNP%X$DA!KRTN*o1pA%Fg$(j.cTqTeU;A/3hD98mpq,3N5?D!)[Q<kYFI?;*0_/#EF<'XU5ijDBX$MJiT?)drVNK&5m^4.h*HW
+%mu"J7d:o`bMZrBr9J-'2`s[QM1h"fO,1@>a/6A\Kg1b3pXT)"tp)lQPE>%a21()`_P)kpBe..7,H)@RMeZI7++Ohk#(QF[k68N,"
+%MK#--dt,&`JZ-%762HG"LK'o9'QkYCAVeR36PC30"/"^;p=oq?Y&(]0//NUP6'l!kI.(2*PVdP$<oSh1-n8Qa')D\*QV9LmmP9^A
+%]=T,EgoN1g"Cn[fN]kJF>OGH&.U<5KD32\ZLj1?uFGM-ZNqbEXME)6U#/hi81`ll3a:5=>QPpbNYADZ9^BON^U?R?Z<m4`V'k*Le
+%0g0Ad*PLUlEgVkr<e2M61ck+_jD0^Y`.`ZeBLAU'GCUI1^bK[4'+An\IL0p:cp5\q>]V3",\Yk.W8_I#9'W24U]dL#p,UlcNnOXb
+%;,"sq:gl@(aaIsL:`HdgaKBlR3smhCUf?Qp+CdY]3b27])M1,Ceu8^C5nlBQACGl`WZEunbc"&t"WM\.r#A*/S<<Pfj="i6C"0q-
+%Y$lu2S;MVb3&@'Z$6KFK$;5"%R2etDSO:@1lqu`7JPR:!*8rjafU%*k`jGBKUF[/&9E?r&[\:W*^IM%)_'`-(86#b58j%?u^#?lQ
+%\7NXNH-/ZeacWgmB\NSgF2B<jJi<<J(q-Z]:le)&\rV0:i_n`,R$&Y^TgDYa`66b$9)".'3'389S.hE4PMl=?"ScH`CRZU:!o7!/
+%$X7e)]+/&R5g7*-&0i at Y?YCEKJ27j?dt*;2$J%_*5V'U)4PR\c]6'A*eJah.=6*4-mE0J'"f\JW:h02(.(WJ3 at hes9iU4MU;'Rfj
+%s$@>2-L)'kdNQ%A.huc&YB52*7mqqR<-Umi$71]f2aA`]Sn?-donuFXJa>6cFsO9sk1(s).+Y"?.DJ,X#H.G=p<c]hpYtOIJ>SC9
+%*Jug(X[e9D#05l/"e'1 at g#ZNOZP/#6N5\&a+-l[ZgWF1;oFs-b$>5nuqe+I==[iI!IFk3-d>is-"N=H at mX4+9/`W/Tel]OqP4t-G
+%'6G at iV@jN4[Z'k96Df[Z*:X)%1qJo/Pn=`33DeFoW-KQU#**E)+hA^;+RDR2f-9O5:0hOjkc`Sr&DiNS!Ljmg4pg@==EDUP,#h*$
+%^\1Y+2S*iFOCYA4 at 1lb"k!HKKEl*>#jJ&RX-h0G&5,&_6U!.NbZkq(,(7hiq'i3e[mLpIP.-ChM"(`QDK&I"_7h*(HD4nWTNXAL4
+%r%7"81FYF9r8fKoMp,H9BP?UY6<]@6*$XT3\!8kY0Er-po\F7l_8%eBj%Fhn(gYPRO;<P#YVAglk<T*N6HUL>36J.ed]9d5$ab"P
+%Sg)mGIYRQS/-BaZ!B+f6mLTCLejG<4f(`"%2BFWeb^'^Tj>g[6VTs'*L4Jh^="EpKE_bX76\-LZ?5\K:81]GU+F6KS$FX*N+8Ub-
+%,m#c_b1L_123K^0XQY"+[UJ8G9KD5'EjIodf2JQagE at _NZqmo>opgHODYQ'0;::Dr"bT%*jX[WT"%7%PfGP7Q.uHn]bnHISrLuZ/
+%Xj6"s4<dp'@44aIZD#(eZB!`AM9Qp\IGKY/_72fU5j+Jm!=Ue)lh4<14#4#1=bPNb58hnT#Zi*Z';YtDXW at 15fB&r4d!A9.k%pQ)
+%HFkC[?B#:oj+*m9+QZWoEbEa+])Ztda8S=+1."`5Bp0*ql02h'_%DCD3+,UVeRK,g;5TXY!Bar\MX,u0oZp2[+eT,[fH,QCW(fZt
+%Ood?F(oD>H#,:-;:^1*#NWYeLDhV at gTklF"/-bu44R*Y&]W&fRa\9dRB%0HfS1,3WF=FAC``b)A2.;s25kdc]anA"+LNU$JljFms
+%LPZA\ktt]EU2#sATrnYaW^*kI.Mk)eV?>X1Z5aaTLmLC`A+Ac/d&AATdnR+OOF1`#"B\L#l%F>m(JDUY^Er0pSA$.432#"rl<[?(
+%\GBss7S at BJCJjLkOhdbM,FCcZ&2 at NX;k0k1aFH>h&4rtta?douNKEk/d]$&.OeJ(?7>tKp,(hAP";d(sft:ad%89$=&$I7#oab'&
+%ML/q,oJW*qm37qG]*1)#3XSH>:i&0:LnS*J-Ai9RcV`5C'UZbd`HO.QE`e\;"b7)A.&]E*:$\H1E&=DLI,MYt/l9N7g9"$A;pD(K
+%dc&94]BPuoQ*1S&$843(j>20DEXl:+'e-!dl'F(;*Q[L9!eg^oM.#r]O<!UA>r9UCP[nXU at Go?h&BFL&XGar]+WAZ^.cfF,TnYh]
+%$pB?#Cg5j4>fl>"%ZKQO"l"SX>:X<\C(b6r_Ioa6atAEfK)0%$RDc7ik>'b0oO&.S=G=t\-g:EGB_4r)M_;.7)UHFZYq@"K#H16W
+%"p-,kLMEeX(K-X#`S4Ol[,Q!p+p:PP1*f7,E`TgV\Xt'u,oC*W)q(mS?(m;"aW3"];*keD#]O`7=hg(fj+KnL593[+h:-.PGA->(
+%f:`(mDp[@h>7)(R/:IU5La1#1/<FG[2MWutQL\j;S>b?QZ*,3,d".?5J+*`\Gc7Z+pQ.s?b/WX7TLrC%Hgg=*JNSui*CP[g,)$_a
+%OH6IE-"q;($N!CK`m5@)bJ3$lAbY<Gk.GA-b;ICUc95hmAMX+?S_@!s_V#^dO53?Lq7t[ZQbu,<K?Su+9C*IPKCjWgh8sfnb_%8n
+%:,ae/H?6J4P=XYd28](@k&aR!BVM>S/0hq>JLDEN'Z_lDJWj--&/<6jpiFHVW.8qPJHYfMLIc!GgnsRtJ.OIDZ59Q<dmDXgKJpb]
+%Sa\X&BQ47E;X7"2[_N"sedr`S+Z;BCaC^JE&QOqoou)qcB#RXAKshVIc\"gK!N5&,;5ieWj%[6#LQ1fY$F7m+9J$5O0Tjt=&B4LC
+%'HL18/XIuU2ElH0ak4(+JuH$>WXldn3"d?U(+Sg-Z$V#'/>:-Gg"CVEZb*-Q',;e"gh>f<cuLn&9jJFl4!U&0.]=@URSC\98$4"^
+%l83(gW]jc%["aYl-RrR\"R-8R8*YS8oK=T47[ju-m2=mH$Kdlo2TleDRF'2]W"#H%7dF2j+NQ<_jOIo/[M*%%<0PF\cP.dh[HP^M
+%dJbQ,M=;#RW3QP]&QM:;k]Bts^<BF1(:[k](/Ph*!)guG.mskd6>%=`!qnq><'4>K^>LYeO>0jW7$Q)'iW,7/K=c%gTLceXU`(4K
+%E,3$b(.!RHoi!-:8X!YW\;QN24<#4O$MU@^$5g_!oKj4fQG?,N>"SA6/f\9*Tn>qh3)Erj!i1fcTN.K$aouoC#WG9;:]bZm_LRC_
+%"3iI`A1fm1U!Zg?qbfqb5"3LJcoOW'&%36]%CGm\aW:e>.;Kn/^$3h(^SSM&b.]&(#fC#"]\T]s/1()roHYG'5@[Ki&fa=oocn._
+%6t6 at Qn;V65N]j$I6#S4bnk*Qg+SR/J2](Zt'uEnF#AN7p5`,1kABlTtTMfIn"nai8g,'Zp6'kt`9HBRc#ko=GTqGRVokT+Keocd,
+%%MZYZ1BK>`>0\r=bLuZ*WR)@tCTg0'+j6Vq-I9NN[`BdEne)p=86Rg?HmnHb%Uut6?]F%t+cQY:,tbn`Fk)1dTJYkJA at 6A_)W;8h
+%7X;b:-%g^_faL/ia(]L'T=H#_3sl->rJ"UE at k'm(7oH2UjZ#6aTht/=c37)1CfAoIC6Mj]oEkHso"@lT$DUN`Q>&8inu%up))kYI
+%d0]nP#Tpr at kH+EQ&0L/2[FZcAbDJ,<atSJM\odKWI=P"eP.-1%cNtfW"B at Hj47IHOFL]X&FAQd7<#N<uOZ*j(=lG/)NCQOO7V4lY
+%;Qpjh&/"?J at 6c&aU,YeQ0(U`g\]3;P(+/\'!(20?F(L*ii^@g>Jfej(je0H at c9Od1JeJnt!SMCBgE[=e"`g==KTdIJnNTm`%mN&%
+%4UM3HAtuPS1fVX]$5o&EBc-RpPt".^Kd;1IYcNsj1o[j@;(D"-!ubl4nd&q4PN:FCZ^62#$kdQ5inC'H+N#<k14ZHRKXhs=V1f"p
+%XK-0$&@.e->GGp?jdPj7ZB6YsG7GoUC6fTNbMj]sclZZOJnmeV4i-B_SOSMQ,\o(7F/T7.Gd-HWR?WhV!KS5R%^O#0s",-)fp7:8
+%REQFM$(=AaZfH)QBGCHE">(i,B--TpEJ99>!BL<BU+*qc8l"\=RAPm=H1[N=Prr2&5mQ)+m$aj>%TPJ3a[q5L6E@<n,i5D<OY-!S
+%=5Y1`6jN[\RJ(n$7(IsSq^*sPiAbs-nN\geQA]4fS7 at 4gVU@`D"tGq0[?YMj6SUiP<i^B$c3jjd`@\#!$!5FEJO&-TE2&E9!(ulH
+%M=t(lLE[)SBdML`^G"2hGV8>QFMlM/9_L^uR.Eug3#":YLrhl(5a;L&Xbsb4B;k;LoULuN(1M%EC&D"RV,aI*4t&\E73SWBGWYm$
+%1+e>4)0B\nYbk>Wkg$aA8KLj"KT]k:M%);T,`]R"fVl7_9=2R"1;QC665W#g!(?r0\U:o[oP"fS#$BSh(?kHB#mRjQJm]uOFdE7`
+%3QOc.3*'^^<WIj%Off]Z$B57!*P-8h)"c-g#E04`A98Kjd&CWG$q,W>!C^q)GX6$"oV(q"$e8@`p.tN!6ohXCW^>CdWc<DckTH*I
+%YnSCEE]gF3U-O[AZpt=,[N)/P>".5.0b at OJAV$Xr+MHe=:oJ9S&@cG"AP*[uGs4hC[)eCFd:s:ALeHtkQB,*4UkK+*,*X*K8q<cP
+%JTS0"=\sF;RLS+oJbQ>!rQTAUe:\S/*W&_``u7D[EJ&nsTTdd$3LtU(=]J02[A7KU0BeeN$:mH>%'GHpdHi:#Z*r`0.8,ga3qOY#
+%V at urT6CDm]6BSc]S!<WO:mqG#Egjkr/8?pE%OOt.6l-'aHFW&$AK3-f6Z^3SkKuCJ5cm<QO'</[MA2.(k\u[-`9.;>6HN9?,l8_2
+%,;`GpgRHndOL^'t%J^Z^^Yu`QKli2Ej;ee1-G,aXC1JjR5_A$T-Lq2:6mNZTPWic+8,e'WJ40RN:q/ECLFO+D+lff#a+o;l[0P[J
+%"8TH!BdP,2!c4Am6^*o\@"C-8.6%aEP<UDO!6pM9,4[0*A9pS`apTI#`@f_!!rnW'cp0%!2pVUEn=^&YB]Vb"@:m9:(7.atEmB9O
+%V+9J!Od8;f<IdA4,"7`Y!cAKS1Vupu123Le&KZQK436(]5Yp6(bF=@QTR.n^9kBbHLT%F at XDlmVKo#mO0pLqD^gVId'TSmL0iM"B
+%nlWneU;oY^:?WCS%1.JH88./BkgZ.,F6ll:po0PB_a_ur)bt8AU<%':AbA47.72Xj\;bo>:oTrN-q$%S'S,n'Ogc+CdU*Z9^C`^S
+%Iu:8N!6KoL\DH3V*MpP86&ZB=(D1')S"SDq?1<_,]L"abH?f%7<.n`&_Z8B*.R<,=nq0!01L4U;DWP,rIF1#,<47#P:q?04V%_'?
+%&,Qr=fap"kILMZGPft<,.WF]ecDF9/[RN[]gmhH6.qH7TIJ=^f4.03)F?DG#<%N/J at mTQ2'MO+]m&cGaWL+#6b`(/,*%;fL*<`aJ
+%A]dHXL.u]qJ;mU`MC(<Q.9`B;O+X>_&brQ@'?IWdBb'/+(G,Q/'pr)84^Nj,/8GXjTtELC64%57"eEm\W'Q^\R38X+5_=:@TW`TR
+%\4=\#?plc,.hA>FYSj/NJui/G8FPe0A3K-E',IUd6!^0>R/SZcj]Ci,9R1_MfVKVN&??LE+<Tk4Q\a"Q<p1QcK%#mKcXtI24'Uo[
+%lSr?>:1QXIQECpM(p1id=?Qtd/F,&48:?m7S<c1d=U8u at fr;3aHUV[g_oQL"qD($KKmGgf:p6^96u\SOktnajW[A\E4X.TOHI,ks
+%WHX=MW at 9/,<3B9p,*,9A1mXT!m)^@XP48ltBoFAb6m4bddY2ug5,qGel<k2RLu"#IV\&QlN#*q-.!%`\AVA:[e)d6FTX_2'HG0W@
+%Y!E.YF@$_)$noh8LHtq[Us]@iB;RI;B5Fm>IFbU_GNn4CC3u[X7:?hJ:`?=uAJjCQ#p]#*7-(4N)25T3C>;c:bbW51*?iWm#*>2h
+%g'oXM_F(R7J[A)e*$=bK`cFV89FJMU?GRR?+=0Cr28`Y]+_l`RNCFif7_kn<&(t@=+fJj`>_9\QZ7-]XUQH:4mZ+8A$G"3^C5"()
+%37-[kLU^%-%-?>\[3?!V,EP+SV$b,^h*eV0MOaZ\-fHR='@nXeC+F[5*@/!qn:MiJj_GklEY./OIRK4+(<V't$b[Fl#;&u)lU!t2
+%(\1VV-'o/$2pmp98ZX=QN00t=:*o*.Q,VA-BKe-&&-kP2%bm#@*%#;4R'bFt-Xbe#i$]68E84tJ'FOYHhFiN/EKj`h\B2pr/_Z=u
+%Oh^OM&AWQsH\e%i)-G6%keL+i6H3G';LiqcZ-Zs>WjT_<.P(Xnr^*OL!aCBPQ],'t2O]piWkJg6!]1-7_+Fc_8[Vm"`c&<BeOZkt
+%eZhFZOD5r-SY2s8-*n-O+M_,31o=hMAlsOTNY="`EnW0tg)<C6Ofg*`2%#XQIr]_0dma(R,cUupP]E.bf=*Y39d3P$@iYU66AU4:
+%oSI<[-K5V5m<M+kQI`\KDcSPETnts3:X>k-1mLD=1adT/+Glq\[3grf0MFH`j2^?qW7L7RqIGWIj>lJAe#cL at _>0N>'t'DlT*Rfq
+%`ahJd9JK3Ri.hA,pG@"4rOR!&i_8m..596>#;mn7l97RtWc4+Q;Q9U.S6-?*7=V[/Mub]<JoiR:[K(\RS>C["i/IjQALe*_ at Frni
+%R'_)F"gGQAmA&'tqc at Mgj`=uM'Hkfq*opHJ>+sY1Yia(&'oIB4IRTSQ0.D\CN=?k#U5NJ^'pI74_9eVb>+M>alg#757^F8]-Rfnu
+%_:S03#_l<WX@@FQi*:kVQ6R)4'_GJ/(qe.9?36"Z\7c#CKR>8&`pQ)5U3L2n'OZs7L/6Z\L,/iFJ^b"+T0/g-%SO2R**5kJO7o]4
+%XtC3pWbFCX&22M/*M_qS`>L3ug+4GcckA_XL6'j5dL+K8q-#V7kk^^pYbG]RU'MKn!W(S!"bMslNEeD*D3YS:b%V*<(=4Yk/:gtN
+%R%!Q5R;PWB4pV8VWlspi#cS(<a]c%0.R7bQ+\Wa-'R8:3qU5$^a&WYd6HX]go'8"RirI$ILBgog+=^;0UMXVE>/&IO^h[">BrGSK
+%W+foIodEh7:Z+82(_D.=AC?<=JGp.cDPDHdaEuMo:F*;D46]meYT_=VURg.d$?oc at LM2d7R>`Q.Vd`,hW)G77.f:N%:19mh,GuJ[
+%p*f4WT8Ru.\FpYF.hjNKk)f9$%MTIAgQQ292"5!*6#]sB/Qam6<db5GZ,1fD*?tm`3$CO at p9q5>+bA2lbBqi$U?=L%*smVeBO3%Y
+%_.ir)0s6,d<S0U\<qA>faZh#?N?K?;pm)R[EXjLY,:=bL.poFrA]3tsW2,j?,+%7.R3nkOWCX,(O]4f(Au*l6):XZlQO0/[BZpYp
+%Y3D]9f!6>%l<5Ygk`IItmjMf\^bnm8?62q**3_i8=/K_aXse?h5^+AaR$7^Ie4+^O\7!gW;,+(sk.2U7C^rK`!\=$RM at SV+.*Fou
+%.&$d$G394UCp1s8JQ/C1.DG3cJOJ#8'^"U(,E1e>pqk at 5#8*th'UYa.e5JGNc:1Re, at iPE'p&^WK84#r2Yu+S>+s9))kle#>OXmR
+%M2XIJbEsa:Om.S at ELe:jP&bK:X0kna'r8J^*g!B&5nWol.%VmXSLOg'F15%p`')HW.R-B_9Fh<h1^c$mQ#A-.`([+hNg031Kld&H
+%F7(%;;WOc(MYMi*&fbs5#X]Y[JGNc;&Oao%BZg3t622hE?'Ps,(g;EQ,"p1DGLbn$,F(#iKhN;F&I,&+^4XQ\'MtM]q$Xd^Y5got
+%oW9Pb7[1p/cI*h'So^jaE<V67:?[WdDfcG%+46V,."ZHe4i$jsd>_Uc.aq"`3]uG[?"MTKE?Rt:5usWS*m0h*10l)08hs$TRT`LU
+%odScHW1RV>661dFGhIr5:gMBU(Q+qKC5"VcV1H/:4NOhjHnXPh17`O`%&?N4`*m*0ng&SA6&<%g>\G"+k4E,6<)"OT[E&U]8u"[J
+%!Kc5&$:41WN2`;ZY[SHD6<^t["gjF++IOX+N[W&qe5Ip:`\^l=%P at j^Guq$e!8Semgj:G:OB[g%+$Bdc>,W\S4(B<s(Lf.ZACTg'
+%kL;DApAfNB;KXADeG-C,2)fL<U(*!pdOeW!W$2?f?9uP]-9S#=)<sWS at Tj7F9F-F4@n&Fd0olC;W4A\[UR*5%[_R_@!F(?aaaX^u
+%chX@?UW$2HUm\V6(6a]a-DD5Bbi(<>FqYL$8UCO7'-\[DPc3"eDQQ+rREfAIhW>*O"sUL6r)I2Vp6;<\@m]:WX at _&B?@Q:UE5?)_
+%grSp*m)!/b_<!pC*:p!L6^FV"^-UI`*![n&bA,JZX^O5_\04+2`<UckMYH0U.Pr5Y>tMCh0.&1p88ELW$$fl-mV2XK!6?@+BP%q=
+%c]t8b6*O[5G+9p>^P.Vgh\hG![,U3=TM=cbPP at W4QK/q::DkmhgW6AnBRF"'NCu?tTJG=JSbADYG1%)M7WYCk3`4$-dsO)hPP#3P
+%:`="`kfsdjFK=qNU%9H-Z3Za^/BXre$q`OaV:i)'ZoDLX-um\`'<!)XYB5'Tni.p at HsCFJ\;lkrPa#r=/SX268Zn91:(Y;M?)E5*
+%JH>l>#S(&rhV-SDjFF#=0.<P^/>]'m1fL.0i;f`d",cn")sXcKLUpu9,4_e+Y#FWR&GZWOU7c)@am>t6+Y4$?la8C*r'S7V;hU#J
+%'D0Rh96pcr)G2tR@;5u+_&s+FNLg2ZWlgI:8)#^:lXQZ;7E\$s8'ZbH'tR'&(W&qBDG'gj3Z)2(?]k&'-6]MmRjNHMjUS>T&PuTP
+%o9^/GhnA$7E<. at a[G%+1Ra<L[KeW4`Om at j)D#mOJM1*oS(*Xbb;Eg&7e"EYjdo:2RMZg8C%I4UCH7J808s[AmeQ$i(!<G0F_fA"4
+%d)/$OYo`[),e2E&:<%C=(j0#2n51NCIo5j]P_sdt"sgrs6(ud?RGS&NK[AD8lp.)0P:5U#8"*[=jO5mtjh[//7^ns#:N:s/`Zs5:
+%]Lf25,)W\("Eq)S;oO`ZaR)([Wfs:c!Tose1.p#,p8N:eBhOgp_atn9L/PN['0qr+Tq7B)8%D;l<5AdK6Uh64mZTbm)G at RC".aj'
+%SU9';=Z]]#7UKH^B4Y%%hf&ZY.Zfb.UbF!>lm]-5Vb-2HE(?L(%KsIR)6t\"kaS=0V%on&V\'W?1L8/%cV2m`S:!Y]mHNG][?g;_
+%RqeVi2c,:Y_ps at Y.1%(d<uqhHX.nCg&V5mCi<[Cr'WT6qoFM6>cVf4H?sf]<=hA!uX+pu3*>2r3)V"'39^dTmH"`R).1@?f:52QQ
+%@Wp7\b(%R\H/X!:?SXUO@`M:cilFsD1<K0",3VA:(2[0eF+tH;2EjU4</U=3]UPh%a*<n`:XI$Knpj_(XtXXQ].I!",;1/U0L/)S
+%1UGG5BtEI at FP$,7CegD0JR/A7D+qu8-3qrZ6rRXD^9i?p+P]X at 5u/H^W3qcu_QCYs<&fG.qujZUnD$joD&b>d_lrJCTdme.Sm.;'
+%btu%YOnQA/C5>TMQ#iCcL*Kq\(.quA:cL4=ac42:fWi^u4dOL*ZUt#O(eCJt,b27L'@kS5:<lH;n&VrYER`>qe?4.m#mD?k7+5e^
+%`eqla(.90&Tr2C2,cRIc"7cXV*JB$"L&Q9*O at q2:d*[OLI1auC5a2CQXl:D?a9Fr_<&i=GP>81--u3RkOq+8$SWhW2U"BX]410<`
+%,/KshqWh.R#Tq<aI;Tt5F at 4JF,/:#:6*IJK6'A/a-H4e(X_a6Qk8C+oXE=l61?Ua=M,(-E.lP<V<2O`08BI#=Ti'd+I$=q3d2<GK
+%"-o&?^6":e?^0'-A8'A7:h%m)$]XhZfbY,)>(RJ<"NA55 at A>.b16d5^Z<BE9c3RhePfaBtHcg&U.MWe^Pk7dQ,01?$P?``)Km(1(
+%c0^<t(km[T?93tNiWa'5d$,AG0nmH<_-OIbOp,P?,X31+?9(X0,6ZI]K0W0Z:EBsX5!sK4Pc:M9BfD?nVp[ee3WqmCZ;hlZ6LQ`'
+%$6+*%1KB\b75Q#R^8pMgl!jhg3aPb$d0"goKL&GG-L`R4UTdb?Z<,P,(#L;\3`HU%217k@*JgmJY(us?pFEN_Q%o4!-8&GRC.>VR
+%TQ?-bU4Z,Q'[Tds9rFkp'Drmh"^&5++&8u+VCsH+lEi!Cbd at CbD$ffYh5'I-TFh3q[5n=qb2NT#3<UjQT+IP9[l;4Z8.s^r?Y2pH
+%[1sE(*+4]H9-.6R"+5MIHGQ%r`GG+?V/ecSR>.Kc?#qpdd$*WU!`BlhdC`'=Jpp(RB'$sOKF3ZZ4u`]mrC(s6=HBEuOkT+9U?W[H
+%.+L4_(S=/"C-555OYF&'O at -D]8jN3R).H4sH&XAtMA./R*j1=-3kBnkHQP8b6)TT-'((..a,):m[aeEBP>3BA8kO'SCOQc!fH<Xg
+%999/i=<\HJ.DCnE66KCW4M[%Qek\BG,6q\*3OCTeRU%a]kd](O-:6.4mUt+0[RmpY\W.FGri<5aa==]/*!E5UT4f.ACY#YY7eh*t
+%Ig+a:J+i)^on9-p(s\"-=^;*:cpFgI$IFkOl'D#`1kn=)1sQ[WS+N"*qF&"ik*J`;1VjGH#7(DmIooN'(e?$lS$gZiX7'2s-Hcnq
+%OmnphX^>b*df,6F)B7e;+bJ<q#`T-_+q?uB_IQB5CX>!IEYF6T7"Q06&IT='0qho["ktK8Xt0.t_q\2 at YORbBd$69@`"0[lnnOa;
+%3Z77O1+Lr^F;rTo/[D5uC,V2M'DBrTe]&p]UX+0%afiQp#BLNS#ZRp7;HK7)aI7:-N_m>1VSmfE\q8(c1T'ee/Y$Hcpg at X?[.k>6
+%ac=hemnmHXd-9+V'Pa"KpdXP1UMDOm<%1!$^756Km5_tk4DVnATrc,PPR(=,&4^jlJnd*m.VMPolCd[ts)[*gc(iVo"ZocU,\Q?*
+%eef##]aUHdIa"i)`%&'c?^_ItJJta$#:``uK\Z_F5=;<D6Jq"71ZeeQ"i<<b=:17qSZk,k-49E$W`7^3PZjF$Ji-*n?&t_LN.BC<
+%@"\mk!(&/hg^a`5!k>HK$7Bi1.1#>VOs>?cMA5+3NO6'5&;![;M!1tlSBsEYF7@^n4ijeA\W)IZOu(R?5b%3WN=g(7.;B]$P1I^m
+%%KiOD,e*"e;1+8*./^`^CWmBW.,,+7s"_tRP=*]=eXR,$RIhnB'@A,,GP6n/'W>W.[cI,F3 at fo__a4Wm1Yn!09L_boRkT^RK_8AK
+%;a3;_PjB"+GW;6%gmVp-,h'tZe;)*IDuagUGN*X"b at FFNjF'!F)n;`$A;AOr/52c$\'g>4XV$Zdd%ja`-5.puoinI([1!g\5q`N)
+%_7;8n6aK]#SAKh?TsmXM%]Jh1n2d5VX>J'ERPIX)A/6R<PmQW8V:-D]:ec\rUPoP:Hfku1Mr_Y67VMGPfGlm[:%8>pTWo-kC0<42
+%YCn;.W"0S95k^%odUo0##XNA4.]?)V6sO;BSLG_lDP1$6k+m2 at s-[PtV5jp8i)53O[n_S2JV"7-U+U5U&5\ZHonm1Alqp9:$M5VO
+%2S>+Y1>8Ds?6T/r_g$L&iLKPVkf+1mT_soN#K8,T9t6Y_7DKZN?tbJYCf;;:pd[/>@u>Th#Z1)*+"f'dWHmFg8A8'kB1*,0Y[g1q
+%,]_2$'ohrZ0b\3u'^Fo9Hp^@7KP(;mI2(Hk[*HaScHp&N?6:T3#q-BuFrI4IPaA&q3b`^ELak51$J-]D_=Vuf.+QO:d87:pVZaRG
+%l>rC7"UgE4#rdR#oDkcp*MPhcD]5::l=F9;\sSSk('rCC,Q"N<(C=[TGq*;8(g%ajSl(Unh>!N4+P#BVUP4;$f_df9,6Y]se\m,$
+%_%N?&It9bJ_\-55(p%m$^VN4ls5#utr8e%[YP<Y4Bc0*_q=qksl(>]c[nk310-<D1Isf"[F82fNHMB0YIf/]sS&<M<Vt\*Xhu3!<
+%rU>SReZXuT5(5Nk)m;7RhnB'*X8_7k^$,%XD[nB?kP*Glj8ASjj2`bD7pc,f_[jr\r2K7+g[BXdduV[,>lE[NL+f1Us6K4La6p-R
+%Z&6he*KTOdq#@O(If"CoFEObXn`mUX9DeBDKqqebreKaeq]ET:'/%$\SNbbo*T+se[#_KlgV;e-_t7qts5CSbOSs1ooP+*BDQPu]
+%r?`Qbm<J6S)B$6^puBtLf7,oc+$Ucqr:o=G#uAU2VtV:!0-?6N+,>.=jU]D$+$T\_`@n.Lc1L\XbMSo*^42U?^)oNnr;Y`!r\uOf
+%roWJ0lfTpn##3p_\%bMlraGToq7- at go_n=Bg[Y6/ViTk6?^CBn?.LZWS'COXH]u/BqtKeA?$j-=E:r$>+6-4:A*BdSkT()Ve+2J0
+%0AdlOj59j6X8g]HplBZIkDl/u5!9pAH/@HSM_=n!QCk=`g7I`IT0E8LPKh(Q(P_O*kq2?gHs&Z3@<gM/hZi%onc$-h(GU>%I^a^8
+%I,5r/fRIt]?Walu[O-7A=9#TB`*dZ,GCEl49Z-M9E5<XQ:Wr9hHH!X5[.q$mra4O.)N-g$hlk5PkN17's+?<HgY]aClS<m0pu?@A
+%s']+XhS%chIs]@r\UN)Rhql-IQ1*T)S\7euqlp"ANrsGKKR-T_EVuLn%F,tO at _lD7j3LMf=6f&Bo^VP$hZ(X`U=]-8:G9I7]9hCj
+%ol9\2alfFI<0C\;LSh3oUXtQObjhXX93lbC>&/OL]$T2-3D0:f;n5QXCeq+`?hJ<gl"AMD,^WOna-cM"U,NnebkePIlq`Hk$:b9V
+%a2E;TF5]po,bKKY5p*+V;[c1R#Q(Jb$,a/Xkt4l&7p#=3hQGDn5L%>aaLDAd8P#2_'O?dVVh'Ya[iL)RLNc.1%(U<f0'SF&d`0FQ
+%7?5!?ftOc@;n^fKo4->OE%h(0L$G.QWXqe3\W&phJ*Q\W%9:o3"pTgS\[+B\C"e"Nqt;g^GHNCHcm`;J^R>gAJmrB)%#o)eFF,l[
+%5`/hr"(V)!je3'*RR1BRZd[H:qi`YRC]&==?FF#aeN4]_%AE+\JaIOR&\E2ea$):I\g)W#YSTC(6nacBfD#]lgJ=t$`V(fVkrX<P
+%X%0d&m`I7()IG&r(V'O[eZhGW>kB1V),C'TI(l<m'JB3:p=- at E\9k@$d-G>'m;hkgY)R8D.#)6>.q?r9Bi^BTN,C9 at D)1JpY#PDE
+%/_0G(C;pB0om,<<[c6Xf at f<dd-?uP;ZdnGbqi7ep<-7u9q\;Z25A:hFb_C)5rmc^A'uB?s`j>5nQ>pAfkbU<..ta>j'q<smgtW7$
+%\M]?c=/i5t`6]i&"16<WfVXh"EOl3W>[&iII-8.Z6s&,t<6T*,daMTRdLqPnR*OB2hlMJB[WXQuL+Q9r*>8%fW;2=^l,3qs2?(jP
+%KZl(#WmULEV-2U:?/@J%Z_!NoTn?Hp)tSG.D2 at cU1L!*!qtWh<fN7+sH43&MBX"-H+;V2uIG7<jjK^U84QZ,X[Xpa>[SHK_EL%BC
+%(1Bc-F.^"iQ3&^ZOY&4*ijSaV7kN3J[H,si4[89[Sc(mabsW;D at _9Uf17cDpj't;Hf9U-YnT&qcW-i0gV<O="R./8mBVmU:\/m5=
+%/]o2OCffoq/(N)*Y#P;<Bhu9O7CX>GM6jfip2_/aB4KFD?9sh4Q1n_Z>%ERC]@$mj\%`HfCJTT]8Y_9iNc!%l[Ycc9JW\MY%dj+%
+%O%I[[M^l'`gQKSQ at qo,;p&QpbqNF7Uk!J?E^$.l0lV3SY,"pZB@^7h'k/]@f]knZlo_M<P?ScI^Huk^%`X$:K*HhfTeXVU]%(ib0
+%2j<LP].pbMa=ulP4niQ\Ukup1 at I?8'dbCA#mg(i.:Rc at b>'Q;ZDO\mXYor$VGbFdM4Q+>i_\hdAVtb;J8-K[b6oCdu(2a&!GAGs=
+%]=n2[URh8QBPWcJ[*?jBF$71*60amR.FkjSZetb4IDA]KF#(2J;B%^hBTXkYCs]jiS&WQT"3X5BT^-:2>\go,r+'l1_g)_Kl8AkN
+%=/bA*B:%_K8SOsj_P1H%FJB[W*#'0BklW6mH:A3H!t:,`9Gi4s5f='p(+%V%$DFeu5&FZ>D=7s-i6>PH5L[&:X'nB(V*8eSVh&JU
+%Nf9IZ*4^6:!$)9[@Fi7)R.W at f4N3U@$1*cPQ@?dS9!9e'p0om@)`/am*>7a3qm/_Jc(aENYUELQg0JlY0#]@KAl/iP[q0'`.,#<@
+%V^XOuPl:<^SD=m/@O6;<<b-i6\1"urfW,m?Hs)WW(-%D:()YeL1J+Z6Zho'@rUAJtF40cmXr#\#hIn5sH/%L7CgP_af2ucl*i,hc
+%B1]Sg/5qX_D#lg)39rJu#SJ]uA8B#K:$p]9[P<4p:!ThIo5O%'n6SeXOY*b">]39dXJn8`1gDjZJoQbcJs9loZTZ:>#2[R;V7&Lq
+%YPf2OVS%L4*?24"i5:,[_qX*Hhg(Q*bjC6iQIqd]]&2HhK>?&"&Gq2.h\h=7Y84JZrn>?I;nOWJ)eR(Bca$srrE!rTW9a+T at MWcc
+%+hZ1kppOok*p;(;Y7-lS$sL=][)@E@@F0BXBVAj_5&Zo1Zg9+X)X,G)D(&@jlm`!j-/T,^a#F7YO@:)Ap03&ul*InZSM.G.hR-I?
+%\U at Pb"[MPQ[M at Z0D-RMtL'GTQ3V-pe4lII\p.O$7p+i!3o6].L)WM$jhpl,^ik&`NduJl)bP,O";_R]3HQt4jTCWl"(t6$"e_I5U
+%[P9]XZs-P^D,rO%<K*tpL<DIl=OaaoMP%UWZTSJAE31l/KUQfM=B]kB12U:pd`Z6ee?!E*1M-ee8(b%+'C8]XrP8I#BA'A$2Or0r
+%.WDQi>,th6m19FEk*C;PqhB.u3cUi2s!YJ[Hu!?12PgEaNDo$lDN?Aa,,unnjW:2@\&SJbr\Ob)C;<L:(2 at J9GE6G-NB$dg(,?/6
+%>B$'q]R%HAmnXB at 1b016aL3pm5=96Toumb)cYmJ+r1FEg%4hX+1"Idi3Il"*%]TPmWK"q>'3ma`&([pVSFg_o5n<'LGjCjoo@)fd
+%0CZjO'Q,6E?U+GZY4M)SFlrXLr`$7hnuqq^=(s0/Q0ipUAKIGse)7\H,rbi=>07*B`KC at U@&H0=27?3`i+GXD[f-Prp*FEZ>V!Wk
+%mC"i=q\)8L9*V(Vh0udCjCqhTjm!.KCk'Sd&UBI^_Nm"``gS,38[o=[CM$_X$ctT??c?EW,.$^#=iY>--D?nIm=TH:fq%]3^,`.9
+%2UI2bTC)4@^0=4CH:$Q#4XH"e8qYlPg[EC?'\asF0H-%p543bBV7'+BSUiXL1Y',>W@%NS$+J2ahB=bG`%JOD(@)`n?bh!@2Ht:s
+%'(R!r]C<=@nAr_UMfILVJQJH2X8;Zq\$(m#[I,)bYpgqo"1m'ZRGIHdl%9WphujFV]t7HQS%Z/8`?'!,6*[\p(0M5=Rf2PU=qf6`
+%TY^j&U&<^:U2QMfIkcZ0]REK\&i?t7Or-!p/Q3#IZ:nuMXX&buE\_lOJ,tLP^IHYE5gs<klQq>7(54!5,aMj7S(Zofs#KE:p_q9Y
+%Yj`1jMk7o#QZt#s0lI(e1e4t0/9ooe]sM@``A$ADL^o4X/W7ZqL)kMRTYB0$Y)M7uq=B@:2q1m3:g4khB)tE)kW.5(@t$m)RT$mF
+%2$cfbE`1S"qljN.CD1&-8Z'e$IILYQ$1W+aijere-(+lsC`tV@:6#E4!ltl=Vr*YO+:?:Ba">Dt/kMr4/BJUO+^t6O31#`rS<Y:o
+%r0&:4BMg-KVXeMd9Vm)Oa1_Y#mEX$oSA>qG6]X%T![u+;QEDI'b[%[hWa:uc^F^B?.AhULFbq,Kd"39(9[`oJp`R&aO6%DWfs$(i
+%JiNBF]#.-_i=+"I_j"arH&dGmJA0tTB8QLt.aPO>"Q)maf2<]l]aZHS"Tal%En0#%2DK.'^@'7jBVY6B20(@6RGj=Q,_[3)%$`BC
+%-\*`H%-MTF7.p=M4.9kSfXHf<ZkR>]TA.FTS!2]8aVl<+qI6!!pEH8+m2*>X!rBVmV[/+m at l$@18GMGY4-/c]/>nR/fP]qTXL$O3
+%n)oM&Se6h&%?[G,OgKDMg62'I?aBkAf3/rUlofUHLZUmNWk0YOL1&bU$nnkqTQX:DE7MpNAk+WHEdDjK0ZKDr at -00#B$]1f=YnZ<
+%>:J+nV]3_8l2NK9>$g<A3Ao5trm4Eg]T%bb^N;[.$!g29E%q#=)4Y\N`6"FeQ?b>I^R8G'/\qV$/"bSB%Jo\GEY<1&^I<Eb1P_:P
+%YuluJ7?9lQ;#t;j"DRX@%3!h6g3R at T>A>,`KlPR'2CrMLN/8oUjRafH97BuJ?-Sa=C5%Y(`U2AuLDE]!dXjF6"WD?-'[<`1Q<_88
+%[L`#<SLBSij4)G]HLZA4`\Ij)(4a**SY3?B#$WtoSqTc&8Tlr[\"&M7$p)mOCP7Ah[VX"ffLi/`ZU*PM]%&>J2Q/X^WT=<Z!)"uO
+%6ZbPl*B.j:)n8pU%T_G\H#K"#MZepqK\?b]jspb;URa>u"qid$*'Eo-9qg%&D9gAYT#/if!H<S2G]#J#SE8(a7SbS-g at 9aq*bX^a
+%&1aHarJY:mYn#qghQr,pM-A]N*0;E0mHB7`]GW;6=\/+BV8^fp3sYJ^ZR'D-Ibl*S1kcq[Zl$Y=!'l?Zh"K$sY["B;mTu5db+?0p
+%jm9<2$OrAO[qe':`/q9>\!:-#0#cL%9C:nS1J4l_pk4!Of2"@&_$dE;QBpJ35NK%3g]*eISo#QK_ppPdp at aG$/WFW06FSPa#]W8K
+%<4:T5^'`_BbFH6r[\)D6#iP*<\)^CJe8?ls*c&BABV'sr9ua1BhK0gY?XX4IV6=C$p[aI;/K<id4=,Kj5IF=f-&1d9YO+A+,b--d
+%amIrme[F"aO2NVp"piH'^nj?)L)QFDD46d<`(.A@/U'^&R\2_<4l+Nbc->FKCh3rP$gr3TEW(j>D9oGD)9\@`of'plU!n-a_H$<r
+%[YW/g[mT\#\`n9GmF7a92Eqd,0[8u=NO/1#+M?2ENc.52YK8pYHLe.Ra6JW_<,'YHMo at KtoD^i)^K]+=\`QRIS<mDb'=Bp:kWRnG
+%9=OX$1&RWlbAMgBI(>QR]kW&1^4_3e*OgVAP*l+?jkJjgm)@`61uZ2FV6a->93\kFoZO^Xak2OG\,#u>H%0$A#P@:uok6#8h\PiB
+%k7(d:8b2B5\+N7<nc#tA^;su+gJ/8dO#k1]=7>TNkP*LkF`V at CHhIBPEdhBR4<V&%a'3ImcLg]+NV,Cb(.<+Fp=<fpUV1i#=0JT@
+%/&N,o9E2\S(Ghu at mdI_K^FLD\rd=<C2?S0dGA3Jp'_^uF[D%&r2?B.Eo'kqYhKkNjHG+KOfAhd'_c4;E4raLArI'"8jkD=M+X?[B
+%)qb>T]E_t_[QS$FFj'6fIM]n/cASuu(T!\k3.mB4^5iRKk>`rq]BrFr<%A6;O*gi6I'a^YD`]VpS@?IR7eHBNfQ(P-P\2e[f/?sZ
+%PlC="6-nD;B_B)(If/_=750FQh]+g5?[`ulJ'o_1O12k1hs0\1rVaBVqW at 9o'(@j[r:T*:jg4scZlJsjoA->'%uY7%GP-`2pq5C`
+%:EO-rgMc8[rGHn,HN3$gpRcSXoC1R[bGX`_rdHZ:s"o0&@=;>Yp#a<Ve!KMfIf2BVQuDt4)ErTIE:_o;pJ:M9:WrUrk-kj$kk<^-
+%6D%o:5J@*bq_.-9[$U4\dJbtOeSi4XBIJV]hqotLfT.]STB>7tbGScTXCV0HoD- at l[Pr\@DW[!eSsI]phh/^^roa3.q4p+OI(]9V
+%0r$!P;W%@cq(Vb8aF?!pqY3k0LN3*"-V?>plYe1Th*1GZ]IlF]s.Dq,.(jj%ptbg]Gl$q"bK]cGrV6?^iT?=db%KPa1>i!`9O--r
+%S",riT>#d*4266Yq=60\5C_4V^&Rllk0*LkQKA$O_t<WFEq at 1M!:,XCDPh7(5&FJ8H+?55o^Ti\*P.mcL<n?#-bH*Vq;X\h*Br^N
+%4T0_R>2+7;^\l;igs)rQ"3SR:2r7lck%u'pg[j7YEW\80%l\^e-/:W8gM\/"c.$92^&?pf^>H;!rMG"^Dm!F<S+CD:^3kG%p\'=;
+%R,>>2r3j;t[o[MCD7c\&T&9:[f;C:jIsh+Wk-ptT=;1_Ehp=Tr2uhpgS,`$VY5d2Spq,uZIaVt655h,h4$J),);5l;qu$q)miL1a
+%&*FH at CcI12B%i#MBl at A4V_=Aql_Bd;qqee`]l1*#J+XQFc`^J.*$<lNIV^\;\6m_*X#GF]??1MPr;I5qq*c6]YO/H!gGaP/G!03Y
+%n+is]q25^%:]%?13W/<]/4iJ6p"SAPrqaP'2oi\b6JAN!oc!2*lu.pAmem7NG(\]0m(YXV(,V]U]Dq>hh*.BHiU8sY?%-FOg;!Cj
+%mll4!Ue<jg5OAifk;W:q3pQuplO0hBrUPs8e%aGbrARI9(Ybj;s!)O]natf:-3*'?o1t.\Ilom9h#?Kss7lTlQf\#"p$:T$5CITt
+%o at L>p*)EnDibneRs.fVoFoStDIJEN_-i.J:E:o%5*pMsP[n#*meK-jaI:D*iDNBuEme"#ua+GFo4R=9G5BLZG4X-%kF@`0H78'Hu
+%[sFQ$W$cfPme(gDO*6qO%OsM44\@+k&":^[rQ3smHiN"G&_0;7/!uiM.%uAZgkJb;$hlrf1d(&h at .t"jVXkc8Zi]bUhSoBe&0DQ0
+%VZC7uKJ7)3:?aCeVaoRMLVYS*9M=RuhrP*QV%h*$r$],*Ea.tSI<hn((?u5Ym&Ajn8)4Z,e"shHn+m7u::O$-jnAEAme623:@V:Y
+%rTWbBGj"PD?+ITGk+DaupEpDQI&IR")DqI2+7iufllT#apQ(Bm*<';L'9A38&,P`VrUs9AX*R3`9R:R&45=??nG)MBE;snOE-f$B
+%kk/*?+[76#C3]4Ym\.7B]RRH+^V at BFh;@)`pJp*UoZcVahM6H]@INV*miLobn*]U=GIMep?.JUZ?"LYV\ls=0SK:Q;VgD_Jl#`u<
+%W4J=C9"Lp>o"$b3h:p!)LYI13lUc<UhcAQYf)8*uK%D8lrF>lSheQat)BVp;@(/`65kJA-f@@q<TM`AN=Pdd\Fc?YYBmc[Ffk[\$
+%nlQqimW[cg)<`pg7C/,6O;iKVV9=qq+l@(L:AIpH=#6B80F.ihGdFP-4f/J/nX\h=<\n&>o/T+^7,'5^+cfeEpKA^fXcm)WV.e[M
+%@2!%*Md:Q9%pE7_>%P0HD3b$]em8^Ql$9DOc9H&\hJ8+BZrVOU=ZVh3<cRW-Bm/oA/,W^hrM4R3>;7+-8NR%.#%;65/PW/:ObR,Q
+%9>dL;QV at r:5RZIlIp!G7=VH9f'7X-u^M$?[j'R4]C=1n0;f_T)r*02p^]&kYbdVNinaq*VQeVLUIj!_ at r-bdJbWAVp)b(IYg(DcZ
+%TVf>^5:U%A-uI:$;XE%,bM!024mM_hp;ku5fjk%0fJIiBMY>]lND7TkJHMdI9bIC\;=/@=O+)FTH^*o[[mr3p&T';X5Mc`3Qrn"*
+%UpCAVZq4kumgZWXfh==<hB(3t:#6q*>6+R?X?r)H^n\4>_3/KTJq_SnVeq!l8%"'!(/$QiQ#+i]g$C'Ffd=;a7d!M<HlG4^)r53I
+%^"uATD(!.D<o1aEQF^n5!r\'pXL>O01MU.[?<c`+gZoXNe>j#oXCfV`g!rR(]@q(fm1q?ZmV:3V2I:=.QT7Okjt,l*Zu*VE9t8M>
+%HF=R_c1nN&]#K(=bKY-siA.`^0j;h4?'"[MEIQA9;5Ek@`p,-sFZ*>?dmkA+h-cdJQH%@mo[S2XY"VpMG#3E<Q5:3X]Bt;1QFe<P
+%*m<B0m;)WGFmnWWCb'g=b;Q*l=?_*+mC#[QWuVhV5&'o$p:0tCqt at S`h/ReL40!uUYBG[a]U;gPU8JdFR#u4rR554im^>UnI.f7m
+%5<nG`UKftQeRJumoSMs<I.7Kg*raF))^4*aO/F$S)f8]Z`7jh/X]FRUlgmlSoj00ATmsEWB6Y80-98 at L[A("YFcg1:EmOZYn4_,2
+%ra'JH\3UW&d;GQ7ok$*b:2FPp;)s"UFhUNLi:b)RG6.o)EqBnqZ,+nS1>*LNgY,i at Je=@g)'ght0,):^+/'94%Rim3NuEHo(PA`a
+%.8UYbkh-s06 at p[(ZsLQ0QET=cp\aV*;"J@!aR[+h#6CDEfTS!mQoG*iL4l&V1ASNYI4QsHFBb[LBBL<ghJNAS]fq7Fd95*=/TAZ!
+%&NnoRpis!GH*g#uMRP8p=s-tTgO"ZY]:XWE5p9g;-0ibB^g!?[9VfA!ihV.a"s4OkG$<*r`\#n,lcs@=gDo,(m-\r\[ops6TA+1"
+%oCuuT\BeO9Ar^$CI%TS\q/SAldH2k3*;/(Q0Jeb*pH+k.2BTp#Tso;T%Nb>KHn/%nfeEAH'r^T]s'kV3h;04Of42"HIl6Yt7m.2Q
+%^)lr+`r(hdIVZ;Jf%N438,L8-gIT(#kI3q6`qUFQe!T:chg:`7psY:Zb<oe9nD\HfluDdZEB6=%c]<O%i7S9_bo9q0"q"9*Va7er
+%q'^01au*O;h?nc*?p<n*_Z5!",.r0Z?i!Ru1QUAG[7;sd?FJbRX2f[9d2m#.RIPG&NLSZXLXYs(gP>a&G3EGB\[G]0cMrAL`,OG3
+%o;uF+r[eoZ<*O)(hhEMAJRAXJqF(5\2?F6OIf8<cg%5.aREGi;J]mZPkOXHHA@%Q`&BoH07Br^@R:$&la6$iZYlJADDCqs>VUIlK
+%>'P+eO1*&(>49GI8OCPE6HOTA%t[@G9<o,7PP;U8FOVkp>dY/g[45NJ:2`74T0<%o]!XEM*r4K8rOEZteuPm;XjkNt^"m.a8eL8I
+%Ak?42(q(jS3T at Wi>\+9_pNXS_n<Pbl0\8Jiq;;4M]^_rH*rYo.nNAQ'e+U<+*p.JPn]SB3fR0/E/*j[s+I]]4p,2bH%Gg_jO4UK%
+%]u:hL#+)R1Aq`2$\(flNrL^0rG(KA*'nZ?pO,'?Q4C16=7sX+iiN=5NHgLdNmBJ7#/P9iscm$OH9kmAHn"%\siVi2h!tpe])XqOi
+%W]+kKr*co(;TpXl>=l<4Y3qa&e>grcgIL2J3\5OQBYZ7`S&;RBJa3DhX5e^hNWHRUJFaAgq#J2KEq^f/C.A8I!+:r>^#A]U9E)Em
+%J$]ZNYEJphdf5OtL at inE4r^>Fo,s*K,Wa\^hXEqcp2\l+7BugJ/ASA2N72B#mPgrXit8qD7bZ-s]S6i<FKd!C*@:&CTqR/L0q;)C
+%rs&'=ngUkZq2?ElgTusiNT:NfT>1P`\\-n'@TX$(.\o]MDaV%fn80mbMk.T:XL\;9=no<.\Cs:\D=tY'>kpD0p*OC`+>t-o1q$JA
+%m2VhtCdRU8FPacrb`fG\(*?o1qh?/p,Mma,GiQaEZNnbShS3cS2sX*cg,XM!AUUake*@9`:Z,NVn1I9pB2Rg/(/nPfGe,>^%-&-#
+%]hIRrSaOcb2P,,*3Ub+=:VO4]?gZ#-^>/JFIR$uD4kb'ngSt'V^#+k9a at SO8a4mkiCOs%XYM'$6rb-Yh4kbHn[2?Zf^"mjUgYmA&
+%m.=nP2gamLC])rp?eaLNIIia&XlkZ"%bAi2lP"J8I(.egArem?g`GX_I(.A4I;UsSrNhn)X&.,TRsf._S*dr'7]pB^gh&=5B6(Jd
+%fCQMsiNp(Qc`Ci!*Kg:VHi!Ns3;%<bH>QY8a/TY_gM.M>3^2Ph4j2T)p7!?fSO]f-Y\W-]2W)IZoOmK/MV9e3>dmksAgoA&?*hHc
+%)go-6*IF<#*U?.%%6Y(<HGOj_?,qBi[pbGE(&dY53950%"('%)e/TG&/'h\@F#;N'aGX36T#9A[?LPkV:42II[iK^]8*fTRpr3,3
+%Ids7Igiq,ZF"S5UZf0/!?J4lJCA&]->OKe(,@=UGgDt!ukN^d(2kPA`VgXSqc-NSN`e=npa5_)N5VA2omU_l+h7[N\_""&+>Lr)U
+%%c<,UM7\VUM7JJQ*RXR6`_O:S'LSMf-d+:%GWa=K^!$dhZA$U41p2`n0$*AtTCl:I)EUj'or([!'Q2]u1S&mTo=;??p)',RS">me
+%'^Ji5G`D]jcZnP/Y,mi!>2/$&/bCaSHL3B^BDuB3'itX5Ns9:cm22(?:l[k&%-9I5"4:R$9<r'TBEm>JiMa(nmiDpV;6Fldo-h*%
+%TkUdi-eZm]4 at d$/cr\gC?9:]k[k-U^N`0j*VcCo=(->RA>=p3qnS5;dK]-W"nY69 at pNG33EU1_eU:hSYeh'e^kVX5=N0[-0FpREB
+%kkWU9 at im7cG@sFO-d0X*(/o92>:d!OG!I"k,r2E&],]@)XSlhAIW#J"*8-pdE[d;+YqqJhcAV%7O=^^SYVU)^I.rADn#eDd]k++b
+%3PU\_*+N=cZEK=pc\L1Ta4]&Lg6X&Oo:`V4r,T$T*GqE]+J)*;4-02d]R;fu^)V.I+h'r)iB4-LkOHdZOn at fKg^h"Ma5*'an#I[O
+%NR6e>qf;1S3Vn4%h!Tc\Y7Pcmbd+2AG'^VBkNAae4*nU\L0pS->n4gOq:+iKU7f+MDfRiR^Dr3edJ.(+&cQ\s7X,ejR$GBLLVB:e
+%h47?;gNhQHWE\rsqmfqASA&8t*7%F=p/<qp5)%b:hl]`3:0Y*4T==2B;r19u_McKlZ\SO-MGK0BY0MX&ijfjQR$Y[K=!sBHrl=Vu
+%n>/gR?Ceh!pZ8kTmlK%SYJ6[T#1F at Z?(sOWm/$H:4M;c'lI!:+M7pU6LW`uU4W'a*5)Z>>..oVrNRt)&kIGhc&+s]8TARK\qO_2_
+%5PNCnlK%PLn^Zak/,sl6"7FdUSS2<S(AH9H4(!AT_W]8Am&,fokDXOJCD='fViBGVj#PjHUUe8qi"8f"KqX/m,bJ8_Q%4QR`#a(I
+%.uSa0b]DAgL_%(]OD^sjkOYSBM:5[AHi(A&jlGZH^:0[&)33Crq!QirlS\tEh5@=&ebs$$]19KFG&MB4-Xk'_IW"O:g-(t0s5gfF
+%s6ckT:t+OoStB8ZcRnOEgm1`OGI-1"]9E1Wln3DYfk0>d#Q+1$B-shJQM/It9DqbuH<a>qmcnfF0X`OV1 at 1)!/Ut/m:03MB\u(gZ
+%9pb.B6nWW*@p^j"X)bdtZq at 7>G.hG3+3l`>pKQaC`d4tkVlTZSri-<?YOf8'HK5P8?NqZYf6pbEl!,0McB@>7pWNG at q>Sj.mgnRZ
+%h&2WObkGI,s4R-bR-`4>lgF_Dqu>gbi0(i#)%eM=T\*jn.);S4>K]4CNQ*"j7Xg@&MOiV"Xbt8.<DhT*))qW1hl<WH at fuH6+'_lD
+%AW-0/FoBgM'K#i6QPFR2F)HnrY2c;+)qYV\#&XON<PrUF[EajP3";+<LqD!>eF6VsYaHZ at D/O7YFS8sL-$RhbfEI1M8;p[_p=bY]
+%gH">AX(;)f%*#6</;&%6 at G`%W3)!i]n>sX0DC=+=8F-Kq]@9oQchiZ]B?+QG\qmDPT?`M`<I\0ImS`Rs7Ut%m:\M$HVhW4ba6ckI
+%eFQkB$RX'ClCrG)&@_T,F+j6,WP,I'HAUCZ/#Vg\\VJZ0EI7BB?TdV37sXXWZ64ldcIGqXPD6d5BrcP8#Lbi:II^T?3,TI-Bfl)@
+%=*7@<<^"p;9!'#scJmha'6U:3lF%l1>A[*8Nk3_1AW+0)Q'BfjaZ&+KCSacA;r4,sVB/n\hl<R?iLa+F`U.n3DtR%06)D9FWi1)J
+%IbJP90%Eo3)c5b,l5d@%lYoj,Q+#tXCt2P)lDq"lkIb[c=l\f]UZW(H0@,TKfD7Tk3R[>??LdX"k,5u>1VTmcH(Ja*EfF+j\t;T%
+%nr:u]J"BX?=X<rXf%2[<c73K\F[48'JY(HprTW%:1NLn@?Rk78B3Af\SaPS1Bu#01d*;[c1Oq(WJ'Jo"fj]HQpVS9JCDs/NrOOQT
+%=+ at A.ld)WTg+!6^XN^P4lE[d$Y:?kbQ,N]F-ej%8rYg4trkGW`>nhV`d)SWSW3S)VMnO?#d3Q12"Q(/ss,`:"0V&^1ak`l-e]nSD
+%49KrC, at IbnZqE!3G.UpI>8Lt&rUO3=aP`DQQ'ErEE`PHjqG'I5)!'Yd?f4/1k^<qjJ*d4Q>(>oY5*h(]0lhk`"4s\dpskd6kl1rG
+%Ud(M1#s;LWH2B)sTXP0;%lOW($h_:s0HY7\e8b=P-!WC1l="&uR]#>Pmb#nd;s6I#8RlTjQu`b,O8cHJ7l%uHjUgEM3=u-rC!I4"
+%8+fs\JH(2#97<G+e55&U"@!7LOeGMmD6k,UQ-]&JPmRn&kR1V5gDs7_laK6LQ2V.-JY)IVWP8#P0210rgY_r.4%S,As7Skh->>gb
+%ojGqCP!9qXB/dheaYS9>C1<Qi"QD,'>pC.U;h8 at iMDtjS4>So at JuiREot'4mH!7.lDUdM+(WPngScdEmGO/AkdL$H(eFTrD0>(8K
+%gW$S6n=!t4ThMZ%_X?\6Sfl&&2-dq>E<1t"fK/O-"5g>%XRDL7]D`eGZ\i"SfJkSUcGhk08fdHGaMe2[FGTh<cAA5^!0.A+B9ka:
+%]6eO50_W?:2:Sh1F"28dMdM1@<U:o1+'%[U0Id^f3>?fU^Oh@*L!<,)8Qua)R8^@p"E"dX)]P#Z`E[!Vir,CATOIA$7,0+:I/$0*
+%LMMda85ctNQk&TJJ?GT"U$Af;ee-ea]&F)MN#(k,0(ItXq$6EbJn5AGf/nL@/g,>.XtHBFS3WFr5jSdAb`5splKGn83pOAh1NuST
+%%Eh66J4r9?06>QIFO>qb!Yapd,d>fn(RObTE>OJ*@Q%4OJt4sg(?:JcONVC%Hoaf$>Y8e)nsg].9+Mu`?#sJA,PQj_]X.%&)jBPh
+%N6u+E>IG$;.=H!!*3>!*PulCj"70;)Za8SW,PC2d+GgB8*RR+l at 51AbBKXlZbCqKu4`R5VL+SHp at q<o*5[fP2dmu*N9"rc!/fTj6
+%U60:T1)8618C,?hT!t7o!L!d+ND at GKmZAXm43/7]2+hM+,lL"%D`"c?,Dfd&HFih$8[lY21sr%_KT"q6a>OZI[99 at Uc=97g3&XU8
+%q%)X.L["*B=oLTUmb)*VH>BUck!h"_7d5!$nL-._1Wp.d)S:A*43-+;]%LEWFOejjkD0O;/r>+HY:Q%&Ur\@X@?#QhC=YpF<p)JA
+%j;qGKjG64H%mdXMMl\h3IG^O<OOj.hU<WHu9AD+2m!uL2/B,)gM&Z9tV]8sHc?BoV$1#WlMnfd:-b2LY+HIC60bphX^/KT01^KD-
+%j.0_$FpF+$b!f[3LnX$kadWG88Nmn5MNSkVJ1(!UT8c8<E:\YAos<=#!"_16E'W-5Ue09i7>bPBq^%Qq\`g at mnRd\OJ`?Gtir7Oh
+%j!DimMK(c!rdQb*/$W<<.+K:7J%Jb"0%c*<7hd:)1C(0q$Y*:%nMcYkfr/8Al:"C^7M]7M]mYrfq9qjICgoA2&pJV%l5%>LQ,`!O
+%m(K.,qCHIIXBeff3BhLhGGf6O<$WuB6uP8Zj#Bj)SDu[1n^+LK\\dSdStRG;HH80h%/XU]8(:nN@&!eYB5u3$RVBW&k1Qe0gIA:%
+%TU[e^ej[=CS#Bu)Eo0INOCesT*:SP_Jod/;WQCqaMqqT:A[-ZAoipe?N\fhE#2XXRW\UdJl,HB$Z"HE[41-Vk5/me$0^aX at h,i'4
+%:%mn>4[>=SK1q#ZXLrkcQ@::Ig at l&c_nY[I)S_sDR`rAKfZVg2c8OR4m$S/rV&NqBl^n,CS*/]-+1G=$pYE$&r5[^m!DK-Z-^8g4
+%(/WSMc^K#2Jt<_O<%skJm3;%&d;C%d49`Fl8!JiY!tk5mbQEMJ at NN@=9G#s?E!ak%0ej&D'uVMjMHDeeAG&sjXPb>/#%.k:e-Ro6
+%@0aXXL_U1?+?%#/!#\$Ls8A&8+SeeYKOL<$&:Vu+.F\qs(c]a%_W+0'`;i+4La-=9KDElc2QA=1Fd at mkhO?mimTK%j<R&pG*a2e=
+%.?%!?ij8.R<S%UJI.#=D(f'>VBAP at KIVVNd?o>fbYcBjIVlT#]okN6^@]7obk0H*JI,``+FY'H6W)]?!q78f6$EDp!?+FOs`*.,m
+%4+)N)L[SH#%!"&@VA.'dK*DoD1i2Yjd,<Y(-+tG>ouTGE"PLL3%/1.55KaWTe_sJ+pT(L\7mrkdPAP;-j"^\m9/Ns:+H7otb'fCW
+%,e7eer%:t5YfN<ajWFWF55WHk]Vgfh1c2a!&fuVYrdp2ep6##Vf88TPNkLn\a$kahSnFD1P`^*p[9Qj-Q*'AZZ\$S\'$]b=XN#gU
+%B^1=g-F3WR\RB5W'76CX!aCfK'[%M`2fP:nrjgX^23Y;"Z,J5_>F=cl$HY7LO]dn)\C&h-4`k7DF:Xq]L!JOIB5P,KXaTOe/[4Q)
+%*M48tG(UC-pW1.K,(\IGqdR1_Y*)ten!Hf]P6)NM0PC/%R?QeHcbPp(/a`++)d9<bO;.r,<s&P6CNX8Q`-?/V"1>=BB0*hK$F1UY
+%2BS(/6nAOJRDAlM+m'srgG0OWc9u9Vm#'iC6G3XAIstr$?Xq$HpH8?m)=cNdq3R2<pG3KlSct(D'C=d`>1r0S//_$F\r*l3>[4FN
+%\h;QMl6BX52blcP*)/0C;Bmc-k\Xt7=,qnQ#b,k)Vdsb9$4c=@,)E at qfXOCCR3n2e\<)hLL&-IBYFQ\Yef*V/E-<ZV*UH-</R;9'
+%ZUn!69:1QHftZL<-Une)8d*=!c0?BrrL;#[1cY]9 at Q%;8VIc)BfuO_+8d<NYqQ#=5&KLs'k0t>QfFnS2Z5`F(`_N3;XS#(Q18kHe
+%Sk(]!+WUXU(f6k1c:obOM=g"g"FAPL,W6'?5[T&Q!,W<X(f6Jm;m?*,ckN-$@LT=(IhYfu:_99AibntR6'Ob#`_87]U_tE<iQjkq
+%rGrhGhguF3Z]?NYjP@'5DV07Z)g3/A48T;Y_2AIQrp4UaC!:f?2g1SY_TKb:2nftZ(b6r'\<J!s0Z)h&@"ll&[X%<cC9b"^,0Lt?
+%3bbZ3.KqpTNd[o8E1AbtJ"pi at IDfXZW>C6DNAYXnW[0pa=Qh(DIs,Ck at -=NKJoshF1Q(5gYkisbm[!0fF0511=!-tSIt./Q]s!KA
+%YI,P!f at rpcYPe"iLpJ;rDSC?S?VKU?;u$%"SDHH^n_$%%-SptWPAG#Q&@]K@(UD1iSFa.#G^[\)cf^83A*gtsa\hC1RZD#_pc0_k
+%q4'MUc<TqFcD/l</:=s&k0WTp"Rp6jag90KWQ/kR)RI8q;@]B>DacNi75J]9_,o$C$PW^,Kdd3b(W4m(N6Ci[b#q<*VNka%MXaSj
+%TjbZM^:;XZ*A&'SGdtq%3o3lfGEp^YXN)5l$0h(&D(q6D65g0m[RC7(E&U3N[Zj;H!6n$3]R;m$e+_6l[:>O#,K2r`?@0+j4aeEu
+%$a\;BEmmVPAt5`?kn]:"I4ESXEmJ)4PtF!M/0ac^JlpMUNWf=L5Q0`:TtgKThuE,bJ,0)Q&.Q4&qOksm`4nb[GsWQt7N0s"rMMHB
+%D3<f?6JQeU`C at jl-7Ad=_=[U5p?00^$a(:VYWk4Mh&KcJEBGOgYgh&HNdF^Gp+1Dia^^W"L at d4]O"Q!*`%P:$R&#g$.omo->:Rmu
+%4 at 0\&]b^B[+221*KObaZ:.RPl$"[YhhI2fmacrW,=ilth=K)d at QHkpZCR,l;hJ;QG/QQV$RR(/f]1p^I=t6f>\_>TMKl91bf(oL3
+%f%tJ;RiBYWV2H8PN.s at Q:GS9fo>?`"nJS[PF4WTYmtQ`i^@p9pld^'hGV+ZaQX4=.Z<eOA[IZhj-Cu$n5ARXpMq_g6ih;]s]Z,Hl
+%@e(IZkKEl&R at +;hht/:ej&^NC?L.!)8pOh;!UJW-dJmlX+_E$0W"InK3+40ilKrQfI#aE4E1/;\R:7;0kh3,*2UCWZHA!G;*8SGI
+%B<\u5$J(K)#L.QUYZRUN^6hfn%9/Kgktfdf+]P_+\qSrbMa;D9'P>/(EBt3'+GQ5iB;*mPUBt,OX-u]]+G4IAPlJ4oI$BsY7:EHg
+%]YaBJXbQEK/'uBB[$U?TPF5`*X\H+gF&M1Bd]K)#9-iYdad,_&'me&l5T@=%-OZi05VFb+368p at I.?/p$0^JOKoJg#+6"YOXhMfP
+%!!RYUb0O9o'W?W0%5h-aCVjgZ==jic/O?HEpEWORr7JQ)[lTe'L2&a;^5Tfh?cKr^L6$]+?@Q.TT0;?%.mFiRiNZH"FbsYs=hsjH
+%Hdfum8FD7O[dVq>94"Es:QCASj4KWCH]g\SM!&USMcGY,J)=4J@/!+TaAA.Kf/7.ggj&HjjhAbr-sLi++%K2;7u8_\^*m`>1M*RW
+%_&eKAFH`C#MB-94Ml`l)7FgN[C7/l;l$MgGH_\9L`Ml+?"Y<g\L2ZGeD0t[,R,`#KZ8g=hEKmW;Q-rZY^nl9Uct`=#e8'?f>4tk/
+%^+H1^\1\+f,Ji(;UM/1+=Z'rWf\R`gl*'WMKrVL<G/jnnVe!dr5(.p4r1A&Va`9LFirQkNF%4Ir#VfV,EN%WB?IM`G!TD"khuZ5<
+%6ZM2g3sp<#,m])0Lai(gd6dsBoq%pBn..(;J62k>#rt$f\GmX`ok=<'#Hg<,9Ld>[$QtHk$^:A5g9/11#TcA"pc)9JU?JV(mP*g2
+%,\YD>$^8QMV*(8k(,=e7+26\^X#st+N?0=ERlKXD?*`j^BQ^Zee&>I3ZtR'1)]e=kk\)')hT]KWcDp-d/6^`Ekb'>PS43>?X.E>K
+%Oog]>`8`9:39k9LY1 at KK4`\)'#ik=sbG`WKC9in8lp[qYCXL0aY.SYq5'jB?:>OL,e6+a'eOO3DO/AZJW273Y!QbBBQlba:'1Fhm
+%(.KY2a>[Z$eWO.X!p3I)$l?_?)O^fhGG4V6ka[=O27lsP!-%md_VI;N<0GJ"h$m(k6g8;5r<sc%VGo8.7f+$7mB7>:D2l#Q%(VS\
+%"*ZN5diO5a;a,T(77tX(EGrG!,gO,K%Qb^c+(N9L[gA7C^s:n7A&Sp*<fEsm)mBS?Z!bJ.$bO^5JdmYL[eFma%GQpp+*/MW;nh=*
+%PqHD;B4m=^ebE;MPsB3fFoj']jql(k`sLia28"GrLP'l<=u)RQmSIpIfu9Z/BT4Wg.)S0c;.V4K^C)U-4Sn=Q]B_/]gho4=;P+?&
+%Z/2d>o0A<em;i\@]<GS+/?8HaoKm[Z,Bl)L`r'jIS/H1>rUW''[O%9Znp.#/<$'o>Qb8*t4C,\^U[?#^1A42GhPe`"c>_6 at C)";>
+%A5Z,D9r?R.XZg/,*;;R0E$aR<I<B at uh:mWBQ&.GFj$<XCr(-\LE`ZOiU^pNfpXD)!F at S:Gd7JQSd2cM7\VDe\+a[>Hl_>QTE3G>*
+%AC!6fRELSAe7Xbj37iq$]r9L8:3A5XoWDJI<(HeU]$[!.ch!T29OUn"UodGI at t+jK7gRO_XaMXaBW@C`oR\3ZOKL[Y$!4*2G6/Fb
+%)DAH]p9Gg=Pcf'Lo]:X!quDdQ@:U6ojtO(hTis2EV$Q`6FnYIpk>8DqrT2`j;!eXa at d!X&0RW.-If/`JcencnlCSo8jWK.i"3&55
+%AbFo&Q?Sm216``@!WdKQ_&+:[:e*aj^FS6Cd5UOa2kQfElVd`Tes(<*cr-uNN`?Ii-7ti@`Sn at 4.^o5LepenndM>QB1@\6jhNj$@
+%`Sqt!#HFsZWYeW+<W%\O:pmOkeP*.Y><Mmn.3OZP#h\o+9SMO at LJ/HL3)J99J&<(Fbp+C"6PR%/a[)U-*J$e$p=q,m!Z1']oJ*$^
+%#.hmnYN:@3c02/>);!^n!Qtc9S'eM)fU8BoQ$jBGRg)5n."k.u?$`=%9=`Z'm)c372Pm2<L6!u\&%1D--V]diGnMK;@?O%#d5lIW
+%O^c$U=?1uO7k%;'K&\C?EchiW(L>2UgKK]ICqkgj1udIBKE"o=rdC<h_eD;cKio"#7A-L<^94[pUKK*Bc7tk_l2I[-Ub1O)Ygf/t
+%7 at DhtO`Nm at U&t&uV\u4Bh<-3'ohl497%?:_A4sl*]didR(oMdF\nt6=WUNuZ,(Fg^\[@h&bu4'-IO]2oq&Ja'OM^R`1j.kInNeBG
+%@9gt!heK-9D5LaqBh6Ws.5 at B];G-J)9.(gI[Mi)TktX</0jVssgL.+m:n1:%oK92Yi9'_EkAhmnk_Q/n<<@V/TWFcc7^j9p/GVmW
+%;r+5Z%7=E1+Xg1Y?8g)g=CMktl4cl2N;=dAcRG;")gi18BCsn4&]LUJZ]-:q<*[!nM at PG9F4Ztjn'8UdC6$S$?%gXlknh:Mf*Z_8
+%;Rqm]ofD'7F.=U5ZsG!4FfosT]R-c"f?`dena7,h&F:?Rb0g[l]G<^dq2-C)"CAa\eF!S_miS\+\.;?kj'24"P8CcL)^Or#9:tq*
+%U##ER5E(*&'6`cZ/j6S<n%/-qc_eIgoMm!Ik)ZRX)>idg=sf4MdFnu!]0Y>\p\C,AIdoVr/J24Vn3BY8k2C`SUcHmN8P.DlJO+*1
+%6B"IuU:r6XMB#.s-RorRX'I,AIQ*N9+33h=LT_f.bIZ4o,o64LV*QAge)-W>fFK-[Zd$b*Nf1$M7\%B!0c*>>FF5^"\%s'.?,-)9
+%pX3q(.aWQ"^-FW2SZQ1RArkl at Z-!gJ8$j)HSgg:[\Kpk^Pno[oE`8M4gF[,JKd\YCWd>2Kn>TB<NBi<cW:N2QCn92*MPqG9_)0*u
+%f$ZTR$0o3\5H.7U8)t!)Jke`[mUT.G)^_pl]AT1uV]?b0ZF3K>`D/a at la5%]-YbcdkjcB$Tf.+8s6u#-:t`9TgW*JD&eE;#:eM/i
+%?LYU4DQ<0Ce94`+o:f2IQrjM2WF5ZIU0=fLUf.lGET3+U_aeg#ND18W-`-:@=RS]7]!W+V(E-+N[H<tPPMH%`DE^)?&,OS?pk-tA
+%19cI>D#AA1*jP>Z;gH3TjTV]A2IHm0VrG"fFSkURp^,ik62ui!TRBkX]@H0%lL\t:HFGrK>FjWQ:@D5]GH93)e`koToPSet[lV3,
+%S_gJDmoH?1X4+]2l.tXsQ<#AlnI/OmNf2e7`O]jB+>g@,;&f2[js\P/H>JJQoSM9%;qr]Y!:Kb#_F.&S3pf(8YE/\Ik at i'm*J!#G
+%iX)N%h1EtVq,Ve5<T!,Wp3Zc(^@tX>q?Go'D'+eirqacC"UW5%T$T4NJ&/W"CBD$W#8KCDq>=Tp(MkMA9M6^IE`24[SfEB[?iebS
+%b at al>+'?$6e:9N;RTVC=e<J(p6nIV3NL41doPD)Y7a%l&bJlDhW:#^Grh0_B^-8dZ,V7Md2'An(,T!F6M2d\YNtbKmI'p+P[ctBN
+%lh82<\%,2aU- at T8Hmsi<qb*Hkcjqr,fZhN[_n4&\DCi\gG^kYFV'!+6Uc\O-G,RW-i:2^C-fM?GN1q?iDiNSjZnkD4_rs5lhdZ"^
+%_fs-%q3)R-\6RQhZU&sU`Q*,AqWkZZofDd:ip0K\BYO>!-OB1.)!H^T6AjmKcAJ/9:<[Zh0/5Ec6!Y795HQAP(upA26;Hr_?TSaF
+%1adS*gVDPdqjZ9,;9]To0'aR"5Ke2IkIn>$/UK[)I5jB/hu!8Il,qb]>el3 at KiQ&,aHRqE<8"WO9l at F0>uP9JXZ<\jpJE:On*K[5
+%Cr1QiC\5;))h$6\/sE_nr+ZH(=;@BqHsG7'kZ-.egsh<AY1r'L6hf<*dN<g!R*0Xh^UU at eU!\.:YWi(lVSo#S2EET>k$/4V/V,qQ
+%, at eT[S>i($2GYZ(\)^,SdC.5obnt?]4K2c#[<YY.;p+5pYp$UB=HO,dk"M0m.1^7KV<k0CXt,8 at i'MDRVsotV`4BJZ8b(6-,u!Fk
+%k&Qs7P`VSjV_dC^a52%,IE-g1*LkLl]8CQ])T!4<#ZrPse:H^GkF1F<p`qA507PGk=7LG%_^F\sOY\Ht<5eX-JQCp;T)3Xkr:L#b
+%$)W1'@9(EN&+R&BT&4:.ISC_kEStFA-gt*5Dcj^GnKoJ_E[/0 at T"!]*)F-eTbYS at X9T0]>7;:s1ZA9q:,'eW=jl'#:e#RF*<OaS<
+%;PoA7<j958TlLkp<rp`!$^5P^cc$G(gSA^Zgs"TK$7t^'MZOg.3]UBqYE_sTXir[P!Oc0Di0"P=#(\2f0BI9l<I>M1S\=?!9h/@B
+%^5aV/h\k>JWOV at CRccsODd-D3'^\Y;;8p8AN.7F!kH"i0D^PYFE at UWh%"KG65u36QQ at _mO!NElPC'#C&4)Ffs`ZTWH1UI`aC['^q
+%<m]IX^Jb%i)KRp,0C)g at f,-8u0lq`cpmrEV?D3(LYg>$@3/<Vp^2\P^h8t0ge_F;>o/WW<!lJ!4VjKW`n9HgI7VTC]MHqEIq2NBI
+%IH8faiP&fL59O>VQVpZSpCAARFFbQJ*"s4,n(#5Y#Bn&F/</j9%d2)oZtsM_?VoVQALO[4[Y_RMCAh9A1Fh%QHHf(6*-p!:K8l<W
+%PcMDF#3Wh$9C<LL_o<ZQribISH_nh+%D<Sm,OMFaQu+nWG^,r>7PjJP4?5e'Ke[JP0EuZ#QPc7#n+R`SA)hOZ8=U9M6fjd)9KZ)!
+%Or4"(8W8!JM/d%D:QEW_N;d&nj5C]CF%HLWVUGZ:\qmt(`6WidN4JTBSI1eJ?5%b1+SP?=381!STn00GlCIab3EBo06[>&N0:LSi
+%36IkXO'Hr/hNU3d_C*G>4crX?UY&/%67:OtKYN!4rilN)6SN$c`]B'DYiSQ<>JG[f-t[3UW/XoY&M5m"V/FhG?]5 at 7h=k:qdUEW[
+%*.u1)NTd>R5;aX`k+Z9Mb6r5&WB^rcg^,OCQk"6<`8FHJ+P"<)Eks!qjUX"E=g4Jj-ojk]'e55af%OI(^t5S=AZr^fE.:kEb0-W[
+%fBH1]Kp;aUK=6Y(^X1<6.L^I)8^E:3&n\>]./$+^JbHu7Q.;0_LY;,`lqM/A5;kl6(B7 at aIM=_E+mn+h_i$IrWt.h8:]4sMiO,\@
+%kuL5f'iWep^36K[I4D=kg-sOe/6Gl:d.o!1,AE3r[R>GsRjtA6#--7FAT:_kS9LmsWBUIgip">A<POftU-feM-3Ujsc\M9ZLB$;Z
+%"t0-W9e+2:OfLFZMFhCFm6]%_=S`Z,2/H:DiP?)<lWgc+ktk8X4Zt6lJXn'-6:[SoUUPo+=P],0:OStg(Fk<t=[`rLks:R[`4_10
+%2G#,$##*m*^!C*W+6[j`J"V7pabMR,`Fh<&nLDdC`1:WIrmV7(<nn;)`bO3](t14tlp%!0V-Putm-k.+Tk>o235Vp]8t-64bR$Lm
+%)&Q(.j2IRfo at b_8Zaq+mA[r[i=g<Km3 at YM4k)ni0kBd6nFg27s;qJ0Is',q]p;*k[\CDBSPeaC[%NDoQ*kB6/\#P,4s(7HL1`ZZ#
+%_hU!,H[u at 0B7KmpZ#OZfJfaefXG3_O3QH_Ce^$Tsc)CFER.CnX7`:Y3[6AL4"7FHaDGSlD?;7W'=5aOL%XeUS.idt,n4L9GXhfA1
+%YI\:&:MV%]7GbmI)O-%d'g>h(EE;q]C7co'SK at 3!^SM9HB!l5Nqb at G9;t\%"oN+KEmZa:T-[!HZ4=L"!r>J;S3>LO&[HE/$KCY7(
+%IGQ^:*<Y.Qi#Mo9o\h5;gmYQ4S$Rl9]4u8;gDe,/bM=29MU>c-m[:5)Rka78dMkNE?DHB)E3F-_XC[AH0_O_0go9<Y\hTjF#P at 3S
+%Le`lX-OY'q+8WI$)pO+^->DhgPd*HR1!C]..`#"-=AK*"[q>g#3G!4$_iGH3c4TahfMcd*4RVQM2u[siWN5d+YQk5'AZPup<kQk@
+%pL\0_>F3pRUHu(g;5sut&VIV^.<V+q,^auelI%T*lZN6]lPs at 0V9]gX9IAu$.+):PfiDLPH8"6DhK))dd&*\[8_\eF18P=o!-"A\
+%o20ii4^boUR4b<t'@ASGg6*=Vm?ZH9adOU1c`?2$g+,kMPO%>%\hL2E<S,FS;8;JGr>jR?<S\(40s%!Ac,+8Y^06bIC\Mu<lI\t?
+%S%=eo,o\pZG-8#S4mc=>Fsp%2 at orZBP+A(^bdh!Qb at T^gf>qF3DWV?(-1%f.m.KB%eM"OFJ,;Qe:4;RleLd?33m@,1rBs"RVo.?(
+%l+<Ch:E&T\"7BO8*M]qG]0nEkaN]Yp+^"Qulk#O>rR<-4DfU at W#Xho"P4:JOr[qa^hm8=)<r8HDYU-2VTSd7_gIpmhp=KkU at sI;(
+%,OYT%Xe+kOi`Oec]@?*M!@3iI+ao_Jp;Wq6Y_OZ'_s%,VaemEXZ<`gG*#^ST?%,W)ion"5f'T<;=#5+8,7%f3[h%Vk?EN"63Nq/J
+%;5,;'Y,L0gC,=oiF5?,(2dQ1L`D3i4p$oS.f3!#7[J+7aqu4=un,*+`)rKPp[Ho;Kd?0XF at B_1BE6&"V<R04,9[;KJI#qUU&4[\]
+%&M=$V(*4MYA5*"hDfN4hI*L.<?Ae2GR$DqkH(,g3_)(I`aif23Q%s"UPC<0U7sJU at nEe#Ae`1$&B!;*G+s">+foOM^fes-UZ)9L:
+%qupfq>mMTTJk[G=5oTPJM4 at fUP'Ankc^[IB'?TE:ni<-9G.8QdE=W\G;%X9D`@[QcL-p;>=J52M)Jc>:j<)*=)L1+YbHM5QXYC`=
+%qO90-/C)Xs];BF,(Y%/N)<h7CHeYSAB/c&t8BLnhnGf],+_#FNY',<,0kG-$pQkce>PWc/JNR<5rDME[r;U`0aoC8 at 09)to]@H$N
+%B37X at 2K/JV7(U&YekMpq3XN<$"7(!?gSI5!&+tBLc=[g7Ck0&R`g:`\fY]BGF0k2[kh;DUeJQMF\;;p[OeDGP=&7!!N0mFG>Ap[I
+%B57HDi>[ai]mgkne0nX&>H(KL.,2Q`DDZC*.7K:YWT0jQU^s?=)F]jM2JX"*>$5<raO8"1J)FiaN%s_PiOGW*7rH(2[GUC"LPBqZ
+%%*(ffL7uUqn_ot.b<ha8enoEA2Bi5Tr^*H>WQmrkcH[Za>C&@IXGDHS.Oi.P_n4mfV7.Mq51,D9]U87S>#\\XnV?'!$uEf1"'U!Q
+%<t#e`:iReYG8Qi/_PntmiaI)Y9qbXD@=;og_o\7*Fh;HBCW6>0?q9Zi$lO_T*@PV`NX_,,+rgKS"^`E_H:hbRO[0uI0b^Lp$69k>
+%4 at YY30C2SZYtl)LM*.&g.s"8BTj#Rf2c)VLAa13O[iVm'3H03H.[F.AI:f at +i$N+*@`FuR3:'=DoCYd)6/,'%Aoj'$dd4-+j_EqX
+%QS'lse4fIL.1LB;b%A2`[$T-.>I@@%L2$1`om2uuED8;i9j'2onVj\0>G)#<S-5c^/lg=B,76*8kE%J,rZIK2U(Oi=\gXSQKFHNb
+%+I:g8;)[upDQqCO"&!I(7SK&B`qFW?32:Z_,c+ at WTsV4OkU]E_dN0@]T3AijRj7K7CB"pBKV;*&J>B)1NOEl!>UZ.K9_[Ft(eoQN
+%C90XtSsCfii2KbF\!*>4P!YM;P;2-&\+,9?YPAkgIOa&Qff0MFP;DJ#K"-(NF*ps/j2&eY,_6 at Q6u*AR=l`PEQqQIBM.Dc at Ss2dk
+%njrfQIS,gH,EjsYP/q>/C0SBGr,FJ%R"gmQZ8-T'^)sAUFq$A%WDVRe\$6!p3ORHDC<W&M)c?k\\j.?8I&pWrV1W6e#.A,Dmk9-U
+%hT:&T*8F:b-@$lElctFJ<H6X+c->RgkV7Nb-Yd$"W0uCfE[J%=o0e:?qi+eZ7?;l)3kp`EYF+lBl8h'u^L!H/G,B,)`67f?1/3+i
+%%eZW'%QZK<iBEi*hTU\3Cjga at FQ>-rHaQBaIcMYFGiKST[tCcG$g$bl8E2V$E=QWG:_.[?T7];Te);@=:B?f6Cs7^#j6pkMG#:AE
+%0t`DiIDKrjc]:g_lGHn71uIO1A5'F,bO1_JeF0qRJ!RWNs!g`Rhf7Wr-f/k&*@IGr$'?a!fmJ,'&YpRj`/Y[)7u5l]i98peqhR1Z
+%;cB=Aa1dO0=ZlC<I-_eqe$gh"D)sM.,XE,9hZ/HW\M]Kp+"tWs1lWhb at S&PB"QN$,SnZ-*]\#u"H#Z&r at hq$p'kj]O03-r,p at DP`
+%=mA.GeXh$gUu(_!;Wl`%_s;<FofNC&/K$1EXRD,"o]LL.o">h/T1:JBD'gN.XP$YOi>\b(X\FMFEcom3eW!c at 8\Jl=<ZS#7p!dHL
+%cV[D5;6*VSDNf,Pp7uo&GfPYbS9W)2(ZE<SE5fhkNT"IKcY1I(Cg$_/,*^`oB^F.d`maOpf?T0LjK%O*0/W.qO8nn=hgYSIY&8aa
+%maM1DG+Im,Xl8tkd!7S6]GktL't&8Ir>d9BET.udhV=dqf(.Dgh"$NPa at REC5QCF95Q8-aIf8;FJ,SClIJ^.3TBs=?puZMp)?2;8
+%^\tY1If%mgJ,6F.<]C'9msb-4lL4R4rrS at KrH[N'Fe\n/Q2_A,qR[7l>PZ-Cr/kUkTDROGT+:h;<P8/]=9$nPI9c^`n,()]_7u&)
+%53kuaoFZQ;nE)+Tni/jl5C^U[s,NY-j;Xp:0tMtO\:K-Pf-O`$U#-k$)'3.F5 at a`HQ&)L!Y at B]K'a!nOppX$Y5l[7@,=jX%72ZVS
+%K3u1_ at 9gI.7nT*+n8EQD]F#fAVE?^_Lc><kb]t`VrkuY?S9;uP))G*\coZBe3/3jjme`oi_>f^s`ng6>nc-U^__Fr3m,WCl-D2G)
+%&&i68\E([mkCG!jmGq7QTliNBSB$.6kCIiL(%5[onZh?=c,(Hu7H:;3g#,ZZAU/%Ws1f(h)aa%>H"tQCT(]r/r$a_0e(.Zo-7obO
+%,Kki"hdiL[03qUe=s9Dh4>eHFcZu/gh1!Rh*p>PSPmNC at b#8\Rd`N['Zjdf#FkU>6jf*7/:4)=4:7J\PpDS6hqL4("osAU'46G5?
+%FJ'N\_0ZB at aP.8Xs!LU%]B<l=%)JRAh)]DDokDi0B-eYkT$4"GId+-FdgG%ZjJalMH-QLZkk8MXo/L&g2UrEO96M(uSZ+n4(p]Yd
+%H/$sPH"tQ#Vu7,J*gj9WDTmKNcYDp_qtur at rT]1,rondf[,r0Fr"?0*We"`brl+4=#5ClAl/NnU`:<K'NrJ2%0>p9Y.u,*A1H,PI
+%57j`F8O!GmiDANtg]B(\IdnFQBpJbgc(Co#N;&d_N#DW["(qG;kcRD$[n&5>OR5H>`#>,,"%9>8I8=<gj(8.X?PN*SWPPc&p#Y4J
+%1BgA<U4f;!s*nEAPU:T_SeKGcFf>HFUd!P*n[c70$16G6>u6#VWseL!@ndbG$"k+9+EK&T4M:B%q%9cF$-MrA;Qdjq$+GJfk4IE?
+%l_AT-- at RG[G`<*YLHb#"X"Qh8;',d?5FLIYrBOU8J#(Q>I!rpcC(UV\=M$2 at n%7u`a7dh`Im\Teb5;m'Q0T[VI+>tS"(@RHp1)Yg
+%"C<L-`Jt6ZoSJ+UoCTB_!MYp++Y7iR0;AN0F)\%LWA!,%b=f'_mCL_d-%"<p#?R]"mc\\H4Jm3lZd2Fo7t/Y[SHKs=443Tj[sb.U
+%H!YnTVKp>Ql-g?fTC5]CM^b0GgD(EqXE#DY\sUdXbsi"52RC`\FhR&;gEM:P)/4K4%P=R,mg8Fs8>t5AdriBNqIsqRJ8tWPd&4,D
+%D3'b[q2k88\pfu@^[30Z(a!8 at B0PAHdh,UhJm`97'NZ_H/>_kDV)1[<2cohf-diY).Hsfu.1?0-QND$fCY:R]RSq\.G1H^nEmbh*
+%MjrT;Kb5H2@=N&onbq_HZk3Y at c0>S!@u[CY\D<)g![O;WJ5EE at o6pIP&PI\2I<\\ACt/-e`F+BSQH.KVV<-1pl)6"lcVjsick54.
+%gE&rf.Y[,7dar[A4cp]b16(3t()"JKL#SoZOX:MA-GTHFdCTUr??,2WVpbDWbATp>G(&48(Bs$+S*R7OWAD)0rnRhJpaQd\0O^\m
+%s/+fVK"LsIT3<bK]E#Q[jW](]7kLBUVr(dqF9fQNJ\ZO=bb=i1et8X at ql4aEJ>(/*STUc(8TOO&hnF5:VG'X5)5=%n$QANOolnHs
+%+>c]@?#I`k+7\DR>l]ntr_?a*b5@>&h0&48jM#.NAp=)W3[3X\X,X?&h+GAD?&j#;j<rCqV%QC<?7pm0a5?gir?"9&k4:fh#WdEb
+%Uu,q--eD^n3ecrL>E=581?=$Sl3YS/mcrr,GJ`6Ynu3$F_gc:CIsU:Q"nIQX\BJOh:65F2PJ!eRZ&L0I=Tm+b"\]__kQ[2+UP-=E
+%`Q4gb-ijM`\*>o![:eRQ=1sg6d#Q?0,m-4n3'*=NjP at kS?0An`:Ml+tT#;WkpBbXSE..DSBGl;@o@%XHJ,SW@^])K=hu32fX8`Xe
+%Irb\Hr:JH^r-*Y`2ui-_hd66dq"t)?oiHYCr=Aqu]AN<J3q3$=rmUh\i2qK's)+J+X7k.HJ+NELrTVourmU]%qsT"2SUJlagOK7k
+%++O&,AgIB\s$ur/3()HK:J(U>Qq?eF%Df at G!JlNt"XmMe]^&'3JS`md?L8ZIB4`Irlj*HeDI0s-O3k^9f+Fk[7C2^p9Eq"'55$et
+%(n&rV^OA,YT?V8p$'msL`M^V+PT>ms]@cY>NcG9iW=^mI;)T9t=Pl!-7i"\dBfmEKbal2_1>g(o*,^%"hYVaYr[3M8c7_[TJ/76X
+%mHi4+I<S;RO+tFsK\(pe7q6u??cLK<jcSah/([<)APHL4+C32O5Up?O#?[g3C<G].&Kgl/2Gkk!$KnkQ.6nlTk4s"Bj'Tf7GTD:t
+%?sc/@Ea;"Bp-:;c2C?0i=]aIkA6aA!]6or:;&sif:kkJ]O86A09q3*>r9f'dLS0Q8\]aUO,.p%EKs#YW=&Inrr]#rSfWi(iQ&t4o
+%NpJAt`odCYIrY(>!lQ6TS=Z$js#WCRW at s>$,eg$a=/))s$*[obBeIX\?:`(E1G&pjdu=En+mm`aV[c&o>Mf>IqDa-47&1Di#'"u+
+%6JCZd#]N+OH$hXa5jdTX+9XYEM"U08N_`&nP[j1E'-Y-td<3^m83#`C*Q)@qFhUe)0]iqFpi/D09dHb#m=-!dif-on!X_8NZO2il
+%ntd[B&d(5AW*,.39!\]B]du!S%+C1ERmpZ?rKhLZhF*>'1M%3M/O2!`Q+/AO_JK3SB:*R)@.?;=]_'7PDb$62M<W<8mfu7^&^pam
+%A(-+V!hAad/Ksh<LqRN6;h3>aleC<XLg#D-,9jo0o4 at IY&J9rMFJAg``7Lip7q@&D?c!D#\]+D0s6dpWqVh<%Gl'^TO"lM"jJjl>
+%6^N7*_ at p8t5=%Yak.`7.I-k:3d'fZu"`*_uVJnr';TaGPY'<9U at RiFYoEd:%X[*YdA/9-/E#;9!^]"4_rHiW;1>UmJZVjL$9]/0@
+%.fNq.8.Kr5HY1'C5_JkS5#;7E07JbVH1b6gIJ&NunR_Ui?bZR%YPV[VqX2Dm^\dQd^]4-8g8l;3lqjsN+Qm-(4F$BY=?$r)2Wm5N
+%\W:/:oWs,=a==*U[nSQ%p2Mm[DRbAE9_#\,'D$g[e at n)QhUaA<N/]=P&aB1=e3G]"J\^1DRg,1Q!<TOT#C$=a)18l81kkf1#SB-g
+%,?V&T1[dcZ5CVNV0`VL=ZH%>R#Iu<,KuGFrZ^m6)f@;geEOBbA\.D2k`[CZcm-j3(b'5riNJ;Cho9qDSC$oJj/h\Nd&rJ@<W+J^W
+%k]H4"Djks^n#$kMjTo@^[@ko!41>4K4^s52&#[ab\;`36FZDWm>e&U_]9f:b]d/===+W*n4,=E&"c0>o'*(5QJN+eRDE$r)58[(t
+%(bLK,aAM#N"(EV__[..(Ya<#I_F,!E`J8)gA/Ptfi"00qnFKT5!f4I at D3o_R_Q2`[n/3+b[l]KZL9cBtcBj7`lGM6khWrL2ZaL_H
+%/=J19c<iDgc?,SRUVi=,#<Ns<jX>SGfD<8\nYbh>s8&)';"X3EGoMF9[P]eu<KWJ)(<orN[6MWj^Peb4;0hq0EK`ApX>39J-K<B^
+%,!VHAIukCu:_G%9&]FbK:T9J/.-Z5/#jF,t]W(phH)5pZ5fpm,JDoaH#LpE8YgA@/PGA,q/*rVT=2]hd(-:OqWY$&%Mu#[8):,G<
+%G5],`l_JhH6a!;LEWc*?*kc>VGDcpdD;L$8_P7%2TtBrh209X&iBL?+DF<7I'Y=b"pXn<rf\Q;Sh=oRX=2aO4_Tf?t`*4O2(Dt_M
+%m-]5emX+<gHgL/>a6pYg]t;_-h>[&YJ,*G4emJCCpO?"b("sWJ=3q-5l5+sFnBLDcOL&C3#t87p?%fO..g`<7QEKU^6Z&YMW5A`@
+%DZY&ZQH1N/_0lW5&.2rO8*Z`h5Q're_,L36fWpF2fU+/0Ei!Q?5_]"M)':%O,7]+\5`C,`^&oqg$uPq`SLf$lZDnq_]"A^s:H?qM
+%`>VLUmo#ccLZO%YC'W9aVY[Cp"4=HiE'4.,T.caUFd3?m:2d;+A)R+&]`8EKlgO),%akRi#-:Ht(8u??d[CDc-haOC(X/QQ4uEE<
+%e.E.?l.SWK+M`snY7<`=[h7R9/H`f6Md#84^%[53&I`C[FG/!@#/bJ#oO/=_LE-YifT&54"Org)E-t"GZ8/+P:&%JR/Mrp6HU2ms
+%":O-OL[FQ2*,'+KF$,K*"*?Lj^`aQ>=9N^<i5l`_*j58Obp)!^]S^=GBlS]8.3,+l!#YTj=3ob32fGsu:[M4*^b^UX:BjfaS9fTm
+%n0?>14SEPX>b'.LM6(@V_tCrRb(m\FU,_ph?j/ZA at n/tU8OZPeXV#@ecaoliU/*5c]M-%8&P_,hi*StVn$="UdSZ"n0*`]PKN!7&
+%qRHK038;`3";jDi$o5/dn>J95!$cu3h`fB]dq"sE#f.=05af at 2bTZW'Oni$bQMm/2=SH1:H/3tVl=9kka!(E=D&[En.gXT"Tf#\8
+%d(CiIY)rpVj\*1idon+!l<tL=+':5*0Ie!om05+FO8sZg"pq;=B at Yf>2_boW/u&R+!Agus[kN/To6N3W$=dI'"R$MjFp':DQd.H\
+%+>B%55qM;q:#@H$Jp^.GdCC`V)8eY[_3;8IpF6eA;Zg4*JLe#1-QJ"Q,+[)b$_FSd1VSkQ5OZ-Z&2MTXlCh;dG7GrMBZXZ:%GE[_
+%(kh4#_OtnO[O:RmES[5R/JU6BN&)Upla0*t/\59*mHm3lSXAe:?egslrggKDK)t+VlmU8QAF8U8CRBpP\=b6g^)dN1T+4V'YU9q6
+%V$"7k])-Q_,77ZGE?[7j"`i4Cftp;h.\O%YcN9$;XO>?=Y)pj3Jf<FCoYZg4eDZZA7@)E[(VQ'Oe:S?*J1L2XRmDkhS%[5a6U:D[
+%<qMf:l\5TQ>%KV_[-<0)`*X-f%Vn=lj8LOX(,g+W!ZQQ36up6h6R9.:pI/V]Z#,Dc]?e%[kq=70T:TE7B=PnG)7mX&5ETHp0X%B_
+%@&!J6J[MQlo5PZchQAZ at o5PKBR20u`gp\?%%+RBsLFEgdKNH"HG"'(H_][;lk8LG+fa/NjX%SgHMUS7H,icR+Sok+pE=B':&U)qi
+%7'SqRPYR^l+)j85oXQHsaY!^-?0:(*4ZMo^f.c5 at buf1>OGk2#\j3R0jD at Nq:IK9[I_/3Vr7N7I"e=B-mgdaSMgT5/[X35PkL9-#
+%9O^YT[tK*$j^5u`%>((?T?`%+]fe6qY3ZHNr+8!MRD6^W*?2VV6QXDGkVl[?Q/q&je\TI^^+1X%$ur<^Unk[#8PBY,!*E"02i=t@
+%'j.Sgff*HW):_'8*Nb at iS[Y$%iO&RU`N(aq+LI;-^EkbKqs1,-'dm9Xg]de:C3!seH%EhMWUZ9lT4n.joT(l`,1%+U0&bn-M7;]_
+%>NJL>ZJE.A5&[meE4%8&fs-tT;u-i$^0I"*"/10rNFLUk(q:t0e)?E<:'W?ZFiBkCrm(37ap@^BDfkf(UsL@&.$4)"*TZR>G;\4D
+%VXIFKB-4o"hHtt8e=[m!Wt$$_1Nf7(1s[E2NLl`f8Sp(']1VO4Y)#WqkqE3La'18'2Y-liGUN8 at W'-5=YR[_i5SX<k:oIN&hGPLo
+%-DU"h=RbpZJ#2pj_;@Wlo<8Ppp%(IU%H.f$r-^/,jc+lAGM844:1'V&\CqgO\qga5Ka?)t;&0:LB,8om at Oj[IF`bMg*#lsa=(a'Z
+%])L&3P0kbC.8?39 at 90">A[CIk^hah`iiWE:ftQM<M2?n\T$997Et)=nE4(Pq%tY8\D6f8d?2Ie;U./V+]_g_[,o)6[iJYi+m5_Sc
+%K0@[mQ^CSK69]or^jRa3\E'5a:Dc:n-mj:j*+%QgAA#h8/=bT*lX6)tE0NBQSO7"iEC_/:ik5XKB7b9[LdBe(<,bVe\$U9NKhiD0
+%h2">1 at C<%V=sDHgoZ5<-+O(@HSblD&meL[":U)n%bB[^ub>LN);P'u#rj9n9[\V)j%RNn[D9rB:cXq^iYm;mUVpNt:k[$RErb)sf
+%+%gG!iZ>-Q#g6%&iW-,b9S.i*fYTe%%e@[Ih+hoF]:B"()2\WsJndO/FhSa[#-fr\_O.\nVgB^9+:hfY9=9G'G:@^X>&p5)0,?Rg
+%_crNUK<FW_*;\O-^DIZ1L1`9)'YiR5Ca=nDlh20'QE2DT-o96/0BN(1\l%(ZYhJ&e2+1^jDq!ad8Tt_UQm=p^ioKZh2_t>q:QW=l
+%.2S$rn;21.TXq1gF9uo[?0:!gk^EuGH/7qmTj=R=3dJ-RRVp^U_Ck46FL1E`$ooPmn[e.Yi`kmI-!0uh/\cAaDk4<mne_o+c51kO
+%*,ch>k"KSGE0%%=]RIO010,Z`5kTDbeY,lt#\Ad/FcnnA`oTl=+pm@)i;FKo1ffOkl0tU7O:FFLp=/T66SJN,kKTLA+p.-e9,NMY
+%O(-WL`m:j":8`+Fdp^@l at bSDB?fdb]=6&n//F[-8QM8g.m'\KWEN5H*c"[D<+7h(qAn"uYHac8<[9O766nSl*In;I`8Yh;f.ASiW
+%jJGh2+Ch_>^lG4]UD@<M6?'D-DaQ02Ok(N^^.>GO`-of5c9,US9+:f:OaVF'FpI5rd3WV"_$Cs=a,4,9I3u.Gi63IU at ohM^g;X-;
+%nNr at KbpfrsM+;am+_;Gom[8U%lkX@`VP1UU@@tILXjL![;+90EM".$`!6-3Jh at pR\@86!A`peSU<_=6T3btr,@\ZaY;MmlsQ(.Q3
+%H#C/RnQ<&J$G^-d7H@`)qT)/;;5?%.EKV.f'+:)Dp9BUH!df0fjUF5+2oMW05gX5S8Foi5a;P1n!h at hlZ#+1-'4GQ)[VjK=q`1!,
+%rObHm/`mtU[Z>7Z7)=;*IBa,jk]i"J6LB]Ye#,^W]6%LhKLf'1Y`A.i,`6&[Z3%PfA]ebC1ZrHPa4Vsg6EWhaOTs$"17FR[iDUs\
+%Xm.(!!ne%u)GJL^d6/N/EUpD,jF]GOaZ(OH>fY29]XdhXkTRajJ`KU-=1t-hU8EI$"=$Ob&;t,S^.P+ZIH_Y-BKg1GJG[=BDTlu'
+%:Rf&;qFkmOgUP.<K]7]!`dQq./k0jtQoF&U$0']nqjh4!:H1&epD/nb.(@+??[^S4'(m06q9G9n?".GNhRDU0-]Yd0l3['kKOIM?
+%/s)PSC"a3)mErIhc?:T+I!e^o3_9ofB"_jC3uQsX+9(4dP:@IMn,Xd&++F.L*-_FgGl1K*r]V%Rm/ul/>OA)_11=-R:`U$o#QfK\
+%i=8I$e0uGg!uas6:d0Qm?iAG7<e.ac<Se03"+jQ]R#_:X\Y&sT)KY%QPXej0I:8V[qA+Z)N\6NU=u:_OH[GAKe*fL#h/@c>*S`bY
+%R=R:n$iub=2=S at g#^p4KBT4UeKKLTad/5\_6+@^L:(skT7H',A%'?gdfXH</mplDd?i&2Ib7uZ;>;cimj5Z"R%'ThT-R:A$a\(Z>
+%0K]QX5TCINC2$lMjN at shN0%6N at g;mVZ-ALD4q(Y$'js9;#JQ+ED1T?8 at g&5RW2bX).29KT*3h1/o,>_5S"go)b_uJ_]@uFEphPbF
+%FmNj^RFeF=V=$sa3m5afT))]:k*QNrV^"Hm&)H#5igY#Y4 at 3+P_UWN2GAmM@Ki'Zl-s_pqm!+eM1"s`c0M-li(\1lLfReLoU"]qn
+%FV]I)Uk0$0(V]^RFY;V)Iff5'07jToh@#])JWfedX7M0V8>cb28sA`.pP-o]#-*65RH.k68"AK:k'P\TE]B5-lXtbj\M1ENlJZtG
+%29YN*Z=fLg&kfVd$&Do*G"'JP5C`h-79244!BL<m*/;*r^(oGFFFH<*At[b>!F!*E9s&Fk>fnm-n-liU-_knjVHUp%"3qdT_%FX,
+%e3['Ae7XmRJV-oq_#@E,>0a6UD3t"A2t/#GL4Q(`HUS=-KET4Eo4IlS!;5B#PFI-Lnu,-MI"ct"If^UDm1Da<E,R$Q5u=P6W#Q^l
+%?:&L,&7=mOPW,KT?&G[TNIX<D(3ifsn72q.`#&`Q.4ddL.O'^0.YfVs%>AiCjp5T-)'"JJq at jh"pP0=ogQ(J'%Ee1&n5'g[.i"nT
+%'-_80H8+lA[bpf at RnS\ScHlZSpoNDnNn4heSLXGC$!<]2@')PAjW,B04o9NXH at hpSWl+\6h#uU2$R&5+$)9+n:c"H"+jjemEBY(P
+%]^c=.`ZQ5?Z5Nk].Mqa8[(__9>\):C_(83_,A0K-g("bHg,45H4]H8t!mnM4V?\R8!)YJM2'O45VX,0:7gLB!:liOcSdn5deqnM/
+%H,U[G07KsQ[hQ`2FSDL[,'1ab&6F,"ZtP75!p<[]K'CL1#P!qUF]4^W,7E*@q^Om9#u$1<J4=Qf?in*CdII at QKks4T3BbKpCjIlO
+%-HWQ33ClgMedT/(4CN at G!lnCilp)X\3]Jn:(FquR$lE1Z_9ES_L%*+?cAdIL/AuSMP3QAE#C1+%$Y`55.\oEh437D8+ol_==B$Vt
+%K40ZA!to)dJ#Fc\k!e_m+*c0XPfUG"!Fg*+8/qcN*+sTP6)4j<[0klp^5`f258^PY'-]mcF4[1KdY-:b'#N[$ck1f!0tD%<9_i",
+%+T6/V6j>Pn#[oh"RK]Y.`F)d/hX$bei%SgaPh>8G\jhO&jG4Y?'@rVFHRT,rJH$odTFIJrrIF$`^p/7fWG/HDZBED+Ag'1uhr+SK
+%<&RTO,g#n-IhZTL-72St-P=lQl#JA#oB$;!6\pXKioBt+Shjr;Jh!IZE@^(;'6+E[VUuPiETl7WS`68h@;`aQlNH)B$PNbk_BsTV
+%*WUKh-[Y/",D&k\^d8]1 at 7MNDK?1"Jl\+9_="j#loC%;E1Eq/Ln&+q;c?:`FGSIYC?.A$Z#Hl5:l-SHg<HUfWDu7D\rhLG]0TAgV
+%d'q=.B;5K38H9$R?K(i3XR!_^V!JQfV+j<GNA6Mhk;]KIlGg\VNCGua7#aTUM,u79aj!E/PiWI\@JT+TYtE,35nC_L>-oW4HkHf_
+%%)++2+WRp9TKF^2TJ_jM<b84/_EEhi9`2T3<F#f:kGeis6>He5ZRaoQNrq,J1oiEmFXYKG#[VTYl;\1W at n[:nSB*Tc#m:Ai2pimk
+%-BY3N0G'*q"c>>@&*is\GCi0+kHFQfna[_R.I1e>rsl-[6`c0Hm_LYWLC"+adT+>l+fQ'9!^?^A=q*,Z$k2JpZm\(4>jMGT<"iu&
+%?3[M:SJo^-c)N9b+n;TGdftCs/8$(`:;F]VRU^qLPl,h_<p0gokf="neeorIaf2:VDTl@,N:(MY%-f1u`3@##!4&&`LK+BCN3]t]
+%#\f6Z<0.n9_]78PBC3bA7%Z?!c),[=%e'9B$;YYu?e8;M,U^2.!QJ),<&i)oMM9U0+_P<s=dc`(P1QG\>[5<8_,=*7`4U[p7S$Q"
+%qp81KU9dlch[qt6R]?ju.`920o_?5,'+(+Z?f=NaQIJp!aM<G[L*]5N5O at i+F?!e6ZTkORPsgpSH55Y<3Wb&ldPh82j_r?-D4l,U
+%J05#k-2.`tLDmPm=D(Y&)&`5#.*L^D3 at Pq\`>BM8!/pa,."Q'Q0V0XQP"9Bl(k[uQJGUZU39nc!*[9R0<Z!gg=&99HJ=;,[':s';
+%#R9":0rPDSc@`J]aljLN@\@MRO=3!oJVOn&f at 7#.Gm9*Q()#:8+hX at UbQD#7#ag5akn]0I(^P[@@]!02*RK3nLa+Sn!pWOTO at kHV
+%.M]lMoYGiQ(33q5QN6hqE at V`J(Oq.D'L<X('dO;@2V$cE!FpluhM(i&B at en'd<IcRHm<#4F%]q.!FI7pfu'f6'lGV'.f1^^[uE[V
+%Im-LKD_C4STD2R)_D49Z&n]gj0O>im^Cet#U:oo.*;hr)EBuKcUERZ!JTNhqD\Oc6<C0t;VtT/'rGqsL$4"9?_PLQ7PKAF,aZd"'
+%%R$LP<eJIollIH\QFoBqd+D^EN^j:C71X":5<gL1M/T-P at 25rk!cMg'7ZP=#/2jqAP7X+`TN7c_XUsA`FJg0Len;r;dq>rlQ!3`o
+%1UFPKN^,d2'U9_M/,aSAP]mokKX_>fi=M$I35I;cU-XikC4t]]^[hljI!_Uqk<N.ip-N;1P4)gh-eo[EkXDq?C5RXbVSZpGDiriA
+%=;Lt2_9;.l:-.`(LS'-f%4[6'j0ND];6=iZ&0FmcdN'C.K:?l;)Wb-Z;D2cO1t*5i$6%$V7R44!G<3NS9`s?@]T:-oBg8%"F)WCr
+%7eaniN-+:?U)S_U?Pj'Mc\q]7YFPfJQ$,uB4;sOqDmele7s3Qcd'r)K8&GrH[SA#lMpbT+L0Y;RCqE%>n/<,URMc)OCP&nhd"+1`
+%9An%';F*,RBaZ7H7c;Wn<1#Gu)qjoip2aid=\!$V/e=&_q$r>;6t5Ok=4L0eqE'qF(!?aj7Wc:CYr/3U8iZqGVVj?'9h')r`ebtp
+%mtCHrQ7B]J_]tuC6O#M:'GJ>;*u:1*+n\]m6AjpqR)B&0f[s at Nm#.\i-<0q:O/hX)3'L_`ELsNlHG6Dj(R(pO*l+fD#9=qfE.B8W
+%?.pH($&3#6]7U'ubF[<QF>];UFC9+0Hd^aW&]Dj#De!!?+gsi.Wm)E_8Rb(VDYGRK+f?hS<\q5/L at Ya4&<%^pA`nUpWQ'=(eShT%
+%m86:pQ;EUqJ/F4+2j7U_"&fkke<)Gl*"Har.lj*cn+7/A6ATmuDH9?0Ybf&S<((tILQ2pti8g"l#]*>]>3t-<BLAPVD;HP9RR'kX
+%b`cea'2p2U3+ZrKR-7@??]eA*5_EMjU, at g$W<8:WY[4!"L$!JbY_YaqOo?bLI`T"G]W-dZ9_nV!f)Ra*0)e?ahM4.iQ-<ujVig=M
+%0ET`9,Z>Z?_]@boIfSE[#ltjMWI\>C9gWABC[kSueJM)3-f!j'6MEIfoeNa3#,:KP7rT)Y-$JMgc2L806dqJX8A*Dr^3K0G2RZrn
+%'-*-?ZBNptkNq/_)/'-]`BrU$fttWm:KuEHk$ge72C-LSq"u,*)!3,,CHP-&"#1RMhi at WcF)P!Q71M`h&)ba=R3M"+E]oY68(P*Y
+%.r$"O5rh1t'8`a$AE%FE7+3:Mjq/jdg^[/Rd'c!Kafa2Eob"%FA8S82#d_NQ%A-FsB'7,Ccj#UA.W5DcUR=pneId\DS</EN)K`Y*
+%E\)9F`WL&dgG"3t]KKC&lZ#`ccDicZ)?Do]1SSZh.?5rsClU'c&_Nlu7JR/GY]WN>&]9l)9=^/eW^M[)-*_Ts^T2(Q`/p0D\>X88
+%AU5?(WTba-*o1h7'cl at d-7*F;8"l\X4U1ri*0;gK/eJY2>Zi?/G3B3<K6O&+-31^d@$0f6!#3%3,XSFSYZ:rWHW4&bn!/+toV9iF
+%S&PbKeVk!_7H<lnh-Tk/#LP4tgk<EE>`?.Sm&?&O58'mpj\#bOLQ!m at K9dg"/5fH%Ss4[jAR#f&*sI+LqkOOra^jaJ8X<o&VKJVJ
+%YZCW2`t2)p!ZL=ZZADr\rfG619F'BI65WI"I2Bf_e=`1_g;9j`@W5tra/les-@:2*)'P#WFraVhfNH2,hLRsmmc_ZRAVkmV_'Lca
+%Y=_+mg,'54-A)+g2W%aa9TfEX3EkCJ^p at ud5Jh['6bSkjd?a?J@@3ZqU10"?<"MMH>+Ol:CikERlPX5c*Pe\b]imQMN[TH6H\<Ra
+%d66=\AHHeo,iRZ&b-2gE$pH15d$Sh&Z5s0%W!i`VZZ'K*LCcQQR?tcj'4l<WhtZ?k`2,kXSfX?"F>.Dp36$O_V/@:)(9(.?!P:24
+%A7p,pJYjdU9iB*ui*mtUS![UfPtk3*k3#%AY8W*bRBQ\`C2]cT2un-)*T^!uB+U'LM<ZerOnUSqA5Wko[brC/WB,PaA at -<`_H82C
+%XQ#`<;ZRDq-kQRSWWmg'_9Ju$FqpDF=M0`q&ZH6/>R(^514\(!\8&fVNV<]Y4FLN["T4?2.Wt#e8\rk"2c??L)A@>uW94c3=j/=$
+%L\5gJ at Hj&OrFcZ]/&qoI8<KT8M)53+_nf^Db8_eiatgOXZ%i<$&eB?P45#4GlKY[QKJ_l5M- at l9bl]rcM.8I]!(YBb;J?,k&14T3
+%m0q<U_F\E"J.X'<F3$fV'L"[]/_*/_-kS3p6i_b/<S/_f'``:Q#-kc(#Ycn&.>>VtO&(u1cn:E'6?aJ_J?1qo7bVKt5V+bkK"Q.)
+%<*(s"MEF/B?mL%>2N:6S[-^`PSdS\D=OBA?cJRkaMi#P?e at kqPK11, at B8CNVjg2[l9<(@%Q/j]l"][p/c1o\WfIm7V]"-'<Wuaq\
+%,5lf0XFc"u-=I'aL_2Tcm'5dD."7t\%[f]79Jf8-*Uoq*ACTV>-93.^Vd,3.:EugN:BB6iViU+`BC\L\&cEr>^AL:m[T./F"Dla?
+%&JpoBc9]>\d<H-d8);jc'N*$mmu5D>AhtLEX0g+4,Td3HKH.8]UO#,9KN*LV_XB50ZdQj$rjJJh(5Y-b:t.>1+n,aI%LWqu'T;4.
+%%q1qJ at h\=B6rl_`ETS:EjBSTY$]`MJJLW/o`H0.P%MZ*((LaiflkPFJ,21ot5s5BWNbni.3I-EMF=>M#;DhI<a"1]cBiT_?5s0_J
+%`X'-`REPa5PJA,L^^R;2L.hnG30ur'3Aq'!bstp`gh!m767mqfPS]R76e/%b`AJX5%96DlLidr#LiZB6Z5(cbd)Ig8P$.rA2tBgk
+%XsU5-Ah40<OI0]@;m.5[nh4R-6ePH\2Cha"*X+*g1IaT)VAu/n#2JGRIp,OUR=4T:Oa+qQih6Gt7Yd6_687 at -ofAL32oM[cJZ!![
+%"H!V^Q9oCVal3o_,fM4n1.3S[KKtd>Gog?!.dU]^q)TgbI[Ddq(/i\a2uj`akf=ftW+9CDNLV2-*I#6]GE/=,e2_]8eshS<=Y2au
+%8CqL.ZQgtm#RYHl'%;T^b)?.hQ#B)_gr3\^<]6sWE1XsOJ)uORIMT/4;`\#oD at umh`rlH_GkZ&hE00p]@Re$iBK.IL#<Ssc[_'&L
+%%&u6D4]eBM=BJr^^O/dEi*1(7otlaC":5j?"Zh9;itbs--Na*5lZqeR6J"[Aqi7fkQVh<ic(fg0!CtH0\0'gl9c)=^_b)+pC5]uG
+%ih8ka!5d8/i>`S7#+uVUQM_St at GcBR6W@pX;l6/;TduWn9C[Xq$J#?^dYKK!+BS=TcH=DIDa!bM6:h5.em'98B%_2jKSnI!)Bk3!
+%!^_rE'k9aa+i6YM!cPrN5Y(/uf2TO\2Ojk-AA+4-_i/-?cuJ at oU@;b8faV)>'rHYtPo(oLUJfMoQUkGH48EKFBS1&K>l?Mujafc(
+%YVN_0EaFqt+4S5@>o*5cQP#kc8;\<h"YIT[GrQ*B at Il_!Hr5fA+Rpt-l3g@&QrHS+11b8h:#`;@s,<g^k3F:J5`*cpUfY<JL%:TN
+%9cYOi*e9E%dr2CbQGokl,=&K?IPOq1Ps+/bk7P?ua0N;t=?67+?>BfRJ at j#M+_I.b!%3cHJo\n:72'L\>,jjTfMKg`1/B)!''$YQ
+%9,CWV/>A*d*6/'Ckar(3%2q)K/WrCcTC9t>-kIi:'WW[OZmICs4.5Sqg('c<A5X-co-+D0r%fPDH&TQVJe2L<"ATSAES3tcbj<9Q
+%_G2idMHqOV1"R!I;6WJWKDsDV=qSHsFsKM at p8VQo!:LP``!rs_%X$Pq6ciZ+2d%_ at lm$c#7SOK3ASA]HQ!HiCok0M<aL7cCTF:H:
+%`jA/.iq$X-W"dM`2\m-`0j8hG5W.32Au%D\/cr:Kr`5&;jG6_TTq?4"HQ7l at fHim1&2q=WC)0+Qbb651<Np0'_.p46q$UjJ<!4d_
+%J;slI at ru3=jWkJ.4i.K]B5sLbcg&?&(q at cE/"&+O,RdhEW3719#_g at 1W<-hmC*O/7jRZg0"p:>q6BEss_+%p#DZ:R4E'h=HlJ0H@
+%F'=;t%,uitX8$sYoL\LCD[aon!ui?RE0u_XoJ,nB8"YhjKBu9%?rC=Rk73&`-`2Cb#d-t:Lp]0gR=f%I%tuodZ38]<O:Vf2Mp7u9
+%R4ieh('D4;_Q^seS<n[mW.H,2rTROQkQNSdTEC*Q-jbZpDJ`6ViD)TIqM'78W.0bt8007HA[Q35):g08&>Epo5*"RA&Rl#RY at 0\q
+%HG6ee_V_kR/HD8nXW,m(LKl*e"A&^5DWXZWWJE6R)dkWlPFdq+7qPurA0$3H<U2fG`;jj"+"@qJZ8O.grC+qp\6qXo&t>UWYY!gt
+%l<?;7?Uj#I?>Js<Z7eZu"A2)8.!GdJ.G;e4T_(35Q?]J\-GHLW/9)21'j_A;K#"ErnNh7f;1(N[;/"aMi;,`?0cD0G1I+rbNMD/S
+%]:LgC(u=k$EeY/9X at 4KnI1*h^CNG;A$4aaN""6r(!(R\C,&>^\4G>8Yf-VeX-.FYC<R3Pd,A9=L^qJ>F,Kf*Kb3-1NQ[D,],N1)L
+%PFiBJ9Y"?&8tqP!iuKISN0<dB)H`]%,/QP?cABb<VK3RXQ'4b&*Y!79_ at _fj`_W01cs0&:[rbcBiDE,ER4/o=Xp6`PJH2&a>&]3U
+%!]@E/\<<eLTd4E[9lq)47Cnt!J.g0,0E=c"!(R:s/>Y]HS1&iN#0deAX>tO at 6:Wl8=B#?4=ir22j at nR`'">`[,F!ro780LiW/[1p
+%n:+!(UtV>0>ZqR>mT%^Y8!N$)?3b%=/lXVY;iMcSm#D44b4sYG7+!J>\a.%>;$qq0Fh%(;i`K3k=WC"BnHPse at ZNCl#=L]!e<WO^
+%#MEjZh&fPUZF]!4*GW^Wqd>IK![VT_3Yh-F]9`dh/aip"T%A5[S4)e'>-`lY%>_Mk%V\WhNou=Ap,"piT^@W&7$/6=?CJB)/J&-'
+%^;OK$MPI0Zl at HluRRbn<M?N2Y`Y$^RKR3oh]HZR\,&/&#*ie8D3T3)*d*K:@,+8\3O<[Smqj>m8",Nd(:^f/]0uK7<gK6/UPc)^s
+%;WG*ViJNbg=S"!HE=P9i6??[$WHC`t;)JLZaj^BWE7M+m?#$&87Sqj*njM\&iP\s(4c)Gb(YmsLG6!@Ad=*<a!8o%0%IGf7.K-b+
+%FH&6f]rN2d%[CrR_1ePa+&V)&7`e-&K"@>ETke$I'h,].6]2A<Xt+j9TfT"WON5]sTp5=#0/j_%ejci8q1=tcW`Kon26hMPQDV,L
+%AT]OZ`A6C;CN!>"S7iqnjb.0hVuStAZiTW)M/Yg2l3u5i%Bs??an^WT_^@$W*1rIKWd?a]+IWZ:BbR=97gi)d<18>m<PH9EN];e:
+%MFn0:FJ"ogD,$3s&Y/[XB=.`NTJio!^"4Ru-O^D:`g\$/V6?ge-$<s9e5>la#]Q3KS(h;.#u/[^HNE";KLR,q=#4J.Sna5bh2LsV
+%gJNL/M*i;"(c9Y"WC@;JdFe(>E/Dl";M>O*&#CJigX;l>Ofq+,7M2q0\E5$Qn_ASOjj#U?)M+E-#=-D&9-g=jaV55m.lS6NTPQQf
+%/R:IidZBq%c"Q4Z4JHR8'sjQ/bG3c:Q#HR9>:JWZYa(A%B4 at dY,\GIaK!1jQ%\m#Jqq7a[R>E4N;VtsFmh'0VEW6d>OX4<i:#\FB
+%32_oWenKPfW%oIq4_s7*7mkh8-kUSkqT4h>.!%rPE+ at fnNDY614"03W-#t5,!A=G17m5;bifUM=Kc'#6NY)W1CPF(c2oVX.C7*6j
+%2?:o,MNa%-+/f`QK3 at ndYlgUdh*p'Y$Ru9KM:Ko*-WYk/\UXt&FJd&M#%d_>Yoa_S!LP,Z-SZH*Xih9/>o*s*1?C,3_Vu,A2NebB
+%@"g[B/0&4^i,+*GaS)(fJmA81^;9,t658!.&A::@GC(%6jDcHQ<l0H&.Mu5_V#APi#o]+h4/!ll'Flb!fZk"iT)-&Uj4p^h+@?^&
+%;g^'?<+Cb_rrTH)UTZ?mFC=R9m4CmoGQ>*#NMK3T<BssoNiXQ*"A5$"THU-75LdX=aB8PiHS&An).rXj%ID#88tFV5E$BXn7qi2V
+%0L_FO*X9eYo?o&jNI,-d8G3t]+!p4\qZe,#g.>K6!oRQ3`Q>e at 3IVh+7\N<PF$Y:@*A9jIJ<Y?(m?!X)6g>H=?OisK;0J,NM%ii$
+%>dW><Kb4Non4p92!'U`lTd>ODpBWC:m#ml5d'?^l-58g>_Q-'jc'\X)BE1=:#iSTSWHp at N(94?MO+VaG>dlH9h\`<SdP)m5TV at VW
+%j4_VQ;ARQrI>3L$Lqj*lid4)c7b83M<oo%&auYbSWs_5#(m2,LonW&tBV$ZgeThn:V/L?QbEdE676Ega,hL[%H*A>l]P31Z\1]t6
+%.5Al3(%(r-5`RW\M'?jiPsNZJ6X1_1$OkNeE0A=r;7Va659!.g<5F3IDgZ#gR\c]+'DjAFFW6X/Q-!?G(3]=^@BT\'.Q]Hr=2CA_
+%m3YDd7:;;-fr9#'g4%g]0- at QlF?2pJQ)<ZD:(tI,,g7M&E$Fq93Y/G?2hnDE!IBP<@B@:&D:F$Ud]k*s%&\.j(D.0SY(qq*lK/(?
+%WkUqNDcFoas$mFmjT.h.Jn28YW.<tt%&S>3\Chl$OYd?P,dfErl^.Zs;)t)YKi!>YWG<[f5d))(<u\u7!'b3]9B,bN"XbQ_$4bd+
+%H'ETmjes)Nae=VhN/LEN8V;Da/[DO5ZYM\mb8ug]$=Y9h at R.=9V&9'^SNO/),;.^mUVoo=%M=KE/=Q4ZM8K9A[n:s>PkH7#m#.eS
+%*aX3RAVh!RS.3WsE%Y"N1/^)`PGj]sMpjooPj(*6bh#3toL>i^!'m_rmV0&'p-qmrV0)d`Ed*[M+Vg!qO`?a=LKCiTaLN/U1=9:i
+%ASaq+gSeRrjY99$g8H>`_hp!PfWP\BOskM,lhcGJDkJB070J$AcpPEPk4s)c_R]8tI_/Q_ag,m.,fSYdVDN3dbFFk89N[i`8X[(Y
+%T]ZJ]O+D,P[%#.Io`Qk!JI`pV9H9`&2&B7cC at J;L*^A>6rmT*J<9&J/7SA3tZfJ9,rY^1P\h/'@F5LmB68u'OT.8h1mm/e'`rW2s
+%oTD`AkS at hQVHunP2<_RBRO3X#Ig5Nun++UCT_V^>qWc]Jfh(BZQt'"fN_o>nMd:p>CU%VuG+cDlVSu":?-;IH\Wp&o+hD\<@U8*U
+%QCOg#V'n65B\^[D$N)stTu?WJ5Dd4I]QU0o at ak`aVB$o"m0%-`Bj*G^4:jNXd4d+XR6iMWm&c\oqni0?a]jW]i,^8]m/&F)E2`)S
+%UGGSfl1:X!H<l;-Y`I6`\_is47^BMO['i?.*.:R^U6Z=\M=%eXC*+%!/G2f9arK*N"M/hgdneAoXj(t"68K58aCeOq+,;<)?oXJV
+%KDfH_7Fm(1@(#/tcJ3a1PIO8q3"Dl_OBb at McQ#T84\ts>3I,]%^U[/!fKZ]WA,icU+ at hj&bPpaARX._9CA\$"n]'aS7KK%t.8_CP
+%apq6^T2$-&abWq:m6j4_3iX8;g5rSl'PM'3640CM$jnF[>.3oDN,f1-pdqFe,M9MOC]\9\gsK!N)H=35*^mq.h#c8"BS"&RVm58Z
+%&biqOEeIcJ;Y,i`\cj%sgu7`?iRR_-ClKKho02SdI.sJ(Q=[g]lXFf+!;GW_$0Er/NnsDf^5 at q"SdCi6+le_3![hA!><#U4VQ/C$
+%d[WI)%\)hn4i#,i"m(l;k%,hJoDlCg0-dN(!+U.2"[R83Y01a$N_s`gj'7O!i2jujHoBRK+6R;W34fa"<KlNo9rmFJ=k>erdtK at S
+%3Dl8-Tf1*F4NbI/IGF8cmR&Y0b0.lQV\^oWF+j$58:E7;@d+>nE+e,$DCu6M^aMI.b!;UYDKO/8!9JJc_81%^G&ksGF!eXN`,6];
+%.U3Ko?E7m0YRI&530#BsrY/,ARLb2LNmgLJ(!/Y19-r9S1V>m;-d$BU""Yt''P"HYgC;nckbV;4YMZqBV_):KEnUU_G'4"'9?gd1
+%YsJ".X*i$"p\cZ&3CWj4OkV!1cnGsGe$3fB7FE,#s7"AHC%I&'VXdGP)$X+HWFu<7*PB<Q:`4[0!\\QlVs3&d%B2H1ZHj=&`Pcbt
+%1YPTPrQNO<]91[Y5JOgoI\-)cf?c1,VkVJW at +o@aX;@(tSjSOQ<&FfgKQS?kXoMj-kPro9V)Z%01 at UKTWROZu2\2s;<u.!(a;7r.
+%Nfe<j1!<+Xi")N/-n&*2:",:13??g4qu"]_?U;D$kN)5gL"-@^b\55VWSc*Ns)C?Y at -pp-a#Jf;Ar3fR*S5GNGHW83LP-p&aZ.f(
+%QA=kFPfap$?I[H37Z,,D at H.EG@-*3;-tQm/)$',#07Wm,!cZ0Nca&r0CGgccZt\Y.K)&?t#<IA/86.\poqU.p,TtuY"O$eG>WPt'
+%:>tWN/t`&6"FqmIU5$<aZuckC5rN4t]D/+je6hM)(Hm$VdEmp_3[W$V_4a2eL_utn$Q6\+<=gAi')<<fP)[\N*LO3B!0"]>e2nts
+%qCZNi,&%j&2)R?K;[$;p.#c#_fpEDA0r>d$OBLRO/?5Mr:"p("ST*c6iY6)E`c7Z6"[6cfI'Esr]);^.2!@[-o?GDC!cs1[DVMlp
+%f/Tn^0KQ at p\lnq%2Q:n7YsmsOSa;Y(qrZH\2fG at oiGG]F-e%"nA;D1O1)Uu]f]('Y[pICqM[GEIR4roGPiK\B3:7%53>JrF6#a9"
+%S=2DR+Sg.ZM#jpb75Mj+8`I6^dZ00qR!_PX5()33Q0S1 at lDERo+\^^d.7Za#.%QC)UgS)Jk="!X4]D^">M)e#gEOCA*)Sl8f_,VS
+%Y$h-S'Yb]U!en/jdF,7 at Lk`*$;pX4f<>s8!76c\b\*B8uH#M=_%^5(]agJghW=U+:dN`?bZV(lc8^X at OPLObGO6rSQr'fM;&!_Rk
+%0rRV2OSJjS%Hjae'-Ju>4[G7]L%'J#&WFMV8b'U#Y2V+:8g#Cda%Qp>I/S>^fV,[TL]q20MK\X\'!9qeeVb\t9<YghrPSmulsZ$B
+%c=jsS*uBsck1"7/kOpJ,lGJrDqor/HgpZeaD_^402X6Z7,QL!>B5q?5=Bq"UFs>+f0a\`aHji4iY+>phSn.9qb=*nfUK;*fVXF$:
+%I-N^S+6MCY^ITNVjCCc*[T)NlP,QA5UPH&l'+u+6luuFoAI_$0#GriGV(9@)8b&>/jn-t,*eVZb%Q8;^+A3n]no)=4PVeVk;nirh
+%)Yqrf+]Fo4rgDfE;kb1E,XlYi2ZOo"/."giV[&,eeYlNd"Y-K\>eCJNV<%3ZkZ<b,^]R>6?F<Wu!t()K[dfs?rN#;9-V(H0in:BF
+%F$H:&e\d)(Dm"t]B2$t;bk=CWXic+kSlk?ca*Zhbhn%4M_Jnmq;fq;YjBiAJ*&@r1<\?%m22Noi6:jT3+SlB;IoVYhpA[\=dZK%o
+%LR++SN%9ZO]`Bekof*bERn_FfFQFoW$#mFpdA!]L3CKaNUM]RU+3FbHhn3VW]&@'n:&SnG/Y(Oj at h0[P1$hlegjJhF$1N%M$]UhU
+%K:MipoS6lqrFde<DVS<MR\qfE!tXb(lk]*- at dc6f]7m0]<]jJ.&ekl%d0n\_LOD_32LJsUBX*C(R'C$e''s*<:&t\L/E#&a[7H3J
+%4/CV?-jaW9Ie-^,MDK>-ZEZ43]9AGl*8!c4mgf)X$LB1\QF^nsckc@/*L-Mb3h=%7NhjXm]&C^Lf"GYd^\V=^gOAmC,sQ'9;[tAU
+%/7t'@iLM=R%%J!+\dW5r@)G,16EGE2$QS'WpBH=7'e_R@):ARYP1X>(-:3/Ydbnd'-P, at +=:EC73`s2(Teh<*Y?/#-!XTI\2bFO<
+%4>L_F'Q5l'@ohiWCD9$[6rPP&bD\c26Rj8hE&5mHBPO/M27]4W2Ws3^Fg&44*9:$1LHDX8/*54gol<3f<fk4$Gm[dg(4n/Z248aH
+%7?5aYUeS^(\6''a^J%0'&LpcO,tGRq=Za\jo59lQ+b59B+OH+:AcQP(HIJ1p0]?Ms=jTV7+BN(uI&EHJ%%uZd)ZTHK?fe-$bTXne
+%q9I:fY>H&]E4,'!-'KKBl)t1SY#(]mVn<]AQ&<OkDH<LRBO!^03/sHm(b7&(:,D;.If5f124N2.d^VnSp-;9Ibe(91o%1,A1SQ9%
+%DR!r7Il"6B<7J4VqOuY<fP]=:6_ at JGc2*tH>N[p5ND=>3%^m`sGJ%7YT,*T5.-RHIiap)Z)KIX?;1q?"6e_3)<ZdRIjC0%V-_A[\
+%'=?)Q\jP]qqVPSGn)IL6)G0M"b!?4-5)TnK*PNT=*(.83;?-k_P[\,_Uuo5Mb9(2C=Ona2QH-WdJc-+%1_V!<c+\O%e]uYB)ZT<G
+%]g'2!UJj'Lg<KTgSJioci/1!<SagHQJ>X:"ejE\&=0Y`kpS4="WKu\F/j9;'QGe0K&\HHrFoK2(]PRS_j'%A\%H at i&+j.IfU.LQP
+%'iX at c<gd'eq_`iao/kGV[[GKcila:G[kC:UhnC.mh'"g"\@W-TrMoH!JLa]F!A'D/Qpr&)_46h#6"?fNpaoLgW3QkPrd<(HG'k%l
+%b`^rL=C-^@4^8cTBi7s4dNKY_c_KsUH-VIX',5J5MrO_J8g),HP*8X)$PQiITWBZ=/!.,,Lf]erq4K<1IWo57O'`h?12/5BT3Om#
+%SoleW+C*uhO(90[9%"SZLaBPWCW#]6qn=g&A:B;/IP[U0b8\OHK2s^t2_A`tgA1=rd=<,/\#8;?Sp1&\^N/3sl_/7 at CtAV;DA<)E
+%Ht\AqW^We89X+eUJMN$uJ@\,(!]\`.5X0:P\.*>X)3_L"WnL,q:)-&e)1_m'He$nK0#IkcCF\"bi8-#**-LiV-'sJ.U?!X,PKHt-
+%7Q`^EX6s4\m%!ebdKGK/VgUF:PE)*do?H at IJl$6#OE+\%YHaam^\"k8i+Z1D/`3qb\c]:%Y</sG#]*0>Qg>,V)^XhdS893,[:O+p
+%Q_gp=4MBceDQd]%JApjjX(5P`,gJqpY at tO0,c-_t).UK<8jK at Z<Yt+r_5ZJmOQ+[`d!>p._F<lgcuuoYf/RfLHt@;;;\'SNLe.:F
+%()2]I;D"T?22M&<"9PgQnd%O-)aY`rbE=,5pl+iDWMAA(Ht4N%@Q?.i/0em1.S*,XWsmY>3it)T.Q at Mb&#CU9?\isB$a7!CnMNA7
+%=k-9gi"UR)IAp0Y(it*p8;'@%%]3_GeTbP9`GZLAH4=kEK\541$;J6jQ";qJ9J1QUO at mQ%R(p"!bDN;=IA+?8!oFXU/P3]Fs3Jmj
+%fF$jqq9Zu7E'd[_jone]'8>6OFqZ,_TP1Te1HAJk^#5WZOYd:3dV,6#cl6E'<!n*>3)C>'#Sm\;et&-9Wi'C(o*b,F^&Ir[KCeMs
+%L^S:<N:R6$;/hQ_e50+ped1R[OnE5-Kc"%8"TsTHgf!\eF.8MFXO([N[emViHs*-@\_F:YG"8-uAgc$9-'FTClB_?S+Olb'rg$As
+%8BN!-^0K4kh2a*QTF\nd1hMhjs1oRpN,g-]@KV(d-I,t1gebd8-3<ZtbO!;Y;dSK2>d2GhF[p/'K at Cuhe#6hiR=*A-q_OH1>&&/b
+%g2fVuCYt0cmBS\R,+j%#*+X%/E$.<T(aM<+JiA:-OFTW\]7PZnj/D<ROoU+*RbrOQS9OP,I(lhk_s=UtdVeK>5',n[\_tVuB(f5Z
+%s$D09ndGSgZe9YX>qfc<'Y(YrMUmlAdTDa\$RK(6<IKFJO83U"!'7$cB<9LjM'ufZFT<T"Q:Wp'$kaqmg7KDf^jVq-WD[e%!cjrT
+%ibeq3O8^'h,LApFmLF\jA,0IP1`Ftfp>oOuqA_SBr4K6pn9,W#_1qX+Lt8/1I)hc89OBWHDF9A+<9ls2me1=kNpY*Z>hI*aVJe2"
+%O%Uk=e#=oE;+]Z5IVoJZN[R\`l)uVJEiQ[UYI<Ha[8qmFB7uQS=Y%0p5pcUq%T(]%rM-OU).Xea;CbRS"fJ.p;f`[0OT%1TDp9W$
+%:;!MQ!Z7:MOqQIa@>k39POEP1eK7cl+?<*Oqnn-(IukM,^6Oq8"aLVB%<iBXc\>*rG.c?J>lZU#THDiOW]F#fN<p*cf$i:Bd]ko2
+%?4i"'Ao2O9=)cl5it*Y2M.-d+X+(h_PWL^2<1]GcSd.43=rh7_Ft2Uo\#,oS>Uo/NS\r7YIbrfRf&XddLqX8qep2(W.@/>YHCJYq
+%AH<6*g?OQ7.T6]nI2<Ydiq0g2W.,AC(dn;lQ:E>F?Zh%ClH<U"Kh)L(aRE9X^]M#erl')u+W87^/fg6S\RfD9S@*0d/imFAXEY`7
+%($8_8k_*M%3^N$Z6Y4rEnH at Q3]2VHE$U2\R</3:eVo:RaciA+m[<4Oc[-%IEItS$(X,8#0!RK:b)F:a,aL*kpFb,1 at -/'4a(*OOe
+%PMc\B`PGVH=[b=KfJoj''e9!Kf0N at Nd(UO=Qc&4Ca(mXuYf7ZuYnQZ:BY&$caJkjjm/_o at d0n8Q7qVlt.IB($Une$m)@[%GL;k7m
+%!=2!L^uO at JZ/OOenaSm'IN7;(`n)?.<A<UOgUu#gko;)J9_1m'[,dF^Qm-scE3_Y.[+`I9FJUt!JOZMfD?f_h6=8^1"3-/P%d^bE
+%CN2p,[D<\^md=:Qd%H-K\3Y"cFc$gY,mi$+&QBnNge?NXLg7mJphQR(]*8D4m1&$N6udgQ+9X>R*?M3D4^pcLj*<*Z&"eBC_e9+V
+%dW]8>qS'%]/ki&:V at gBS&&Oj0'@MI$JnYAkUIt;8Jd/*fnMp[<"6Q?K`%(NRL-7%ne$U+=lVNur6]6dGnd,M!Y6JumXRc`#`$7go
+%&9VlD[u((pFc/!1!l#/jMan?5"FNSra=JatN+rQEE",_0H!UTtTn&:a5Vo,:SL13G\q7V\&0ANN*i:j\nS"]oGTcGkc9X.Ii"Vr<
+%CWYW\-S>l0Rjn$?6.h/R!gNWtU'!GdV)+6g$s&a:_V67V8i.iI6M#dQZCb)E`[[GH%8nr9-^h./H77+?5fu<Slu0-`'/gTBQU4sd
+%-I'*)YB+fO*?QQ"-(4HPU\F!HEkX7_"6UM+O8t,r'iPkBHVl;lY9(n8YidKWn]qJXQm%ukmu>g3W1Q%i6P+!1Sa-P6h>Z!_.mjhl
+%_B9lb.+/q5MkNXsG(E>YhlF,;i.=h"in^FHnm0P;AuWN])(3f98jQD87MT,CG'/ISD0.SBIDYHo:.nJPNXPVNa38cDOenr]@[Le+
+%V+]K+)7P6rObhBY(%S,Z?DXM[d8dJ\n1;)`IWTS:N`pZ&pSSj,-Pum/kK'mWDtZK/mJ8$?-BG7a/tj.%BkMC^S!SSC7'.)`$@!S"
+%Xj:*9Z?)J/h)q?a*gFb5^na\>4L>.."n"e2O+ZU+G!,jGlYI,o,-W;r6T2T'7o:]pYJY)2Kni$WkSk#7g$&V#I,G6fAb3PA6<@D-
+%K,d]-Y<eSZ5>8a[J6J&kfQS[*RhZDoBBM?A+#KB-Cg[)c"*j*_!lU>fUJ%7?=8KMR:'_+oaU6j[*Mdo[c-/3YC at DBl%n/&Mk1*Ds
+%K%-=pZ33Zn#N.R'^_7L)>a!sc5]g.n3A5t:&%%usEOYu8J9%^'4=HT7'+R'n;INkoV,9c*VJFDIJRl*>4]61b*$u?ZU5?27%Q;0)
+%>F#3\Q"3)Ti1M./UIZT^_1 at CF`0T2g&7Y2t at Sckt8B0R"[$MoLQehp<hPbZYC/qNE!Ekm:O^c];-'/F`4.JZ\QqH;(8RUp>DNkEC
+%MLtR5/.$sdcq"o1R=RCdE+m!OB--oBo0Qui[=)_lAiR_(;c""N;4:!UVl'g"pbjS/NcJfqDl`$rOqDa8$'UPj+=Z]n8.tN;%<Q_&
+%m]5K#s,FuprQ,d+7LsR8m[l*\WBIWDXUC#N1b`M;4)S]b'q>J7P"^4ZOfSP`;LHe2eBS8j0+Hppd/!iKgT^*kC"afU6/fRP,8?kk
+%nA3bd9aBkh0MX/ddghdsbZ:RIdh44U>'m`q4,6PUZ\[+T$>MQl0e-T+_[1WE7JpI%H(p$i/o&_>^;GYN"q0qp1iq$`AEJkD1u[WE
+%(4(d*o>7@#m(#[tpA-'[huSSK_W`;4+Rse=9o4bLK=!)jNfD$53Tg'VEZ&1=nPZ)Rh"&*STa86]#F5IrrX.hMHI.X*I0<4J=bR%j
+%KceBj=BGlLm5i at Rq!B(gRD7,)P="?M&dGd$o$URE;"fUBBH&6e_PT[2m373THYHO0hjCrEm!3qZ2Q]Z!dbSR7I+I+d]mePg^W$cR
+%%mU'gh<46VH0*grK,>>\?YkYa=orYu^7AOV"(U"M`g=tp.Rc*%pu;e/\WSZ;30/+eDT<pd`?i,b=(rd$Xu#@WVbl3<*Jb^GdI$nn
+%,.rHh%I`\RN"@P,6[(iUAqtquP;?GTNn'=)%a#nW%=/J8\tCRX%'guW;q/i42(V-L)Q"PZSq4o.lTFAQ#fIYT33Ru]`cdtCG&gh6
+%m#2l>G0&g/D?rJ">n4`.=sB&`_+ONrr=UgB^-LNIaF+t at jQ%0eb`Q;,1]dG?7cb)4;%G9iMf9`&>4^2&\7XBR`!L8U!;SGo6[1C^
+%Yf]_HMN.+E1n7Y1:^'OK"N6n$#Y[KX&Vu47[t?cMFuV=pol>,O;iQ;fd+j/nK-l=<lt#l_k)_i`7!JgaT7G:$JaUMN<!_eL:G?TO
+%T[0D/"6%bG]`Z+;PA.H/Eh-l7?kW*7Sr:B.4O^EmF?Y;eL,]M\7R9Ap/>6Ot6,d-Fn(4C&-cZAJJMt3)2#/Qh89e(<,!:Ln157LJ
+%h2FUXX[$8adioHC&8FmHlpgLn?kh@/)G!a<Lg6AQ7`gI:OO6T$_o-Y)0ZPEJ1r;!j1r/WC:_[=@@NTgt*\H[$5ShXmF+Q4C-ueA1
+%rdrrEEJqX19u'Gp$plEe;^2dNj1:$sg^Z.cd&l635u<M1'Gu7#"$`F0&*qY3`Kb8pgk=Q",Jh_09!F&jV`AK2XNq]s'>*)jO<>oo
+%T][dIoR:&Gk"!5g"=IBUk,DVVUVJ\XIn"YqP1=ITW?$O-$oL.$`1I^I\S+I88\hnCdGm/NIDsoN:e.kR5/-mk&HdT:kB2?+5u2!R
+%N_+>eGePg63I,"SE;V\)+p1!q'ccff,ULobC(MV/UiH*55kG1H1O.U[Lir_/=Q*KZPiaO$Z*YCK#6]YM at 2b%*2OGtPP)mW/+3ACp
+%.C at e?T5r"2U)qRcD1Q]`*D!'c:":k)K/?keQ``%+'IjW_;A3GNb<4B+rBKL&*Ctas_Mk?U"T%0r-5_Z]1(Y"^$lo<Y'uH_FGfK>K
+%,TF`7"pH>A)*#YZPU=fOEf4bf?]atSiX&P50*ITZ4%>);_CCofE6i#0QK9f0*eB\\6a/1K$c^%>r-4Cr&R?=$UXP`n'7:)eA+4k.
+%&m1tJ8>H at u=@dFj^mkhh,LJ<."Ke,!k-OPOa6;JO7sc5+cN9KVMS-#KcU9+E-9uD$9U%&]1mTgM,D3FR[IS>G;/XmlLk%)I!"Q<R
+%a!-*oKB[;KEc47t"U$qLR0*4W#Pl(IG(X[!iYOk]Gm_D(jG]W)QjO@#5"'9P6n15W0UEYP+<9bj%*Bnkm23Wk^\?)N44%,-#tu+W
+%"?)=>A:Yf$5/D9fK**';0F,E`bm]PbGmHDQ#j<1V>(rOH,U3H/4Q+12aUH187G at BV"[:&N`+qehr7]IHN$]^L%>Y/gUH=jGp!kZ=
+%q)T[BGY1rZ%E+3VJm^\^!tV(JN&V&#L170%\=CSFQ,tHH0+FKZETa,#o0TOO&6a$nbZu4L]n"g-;fGS<#gBWJ?QR\oFVP1%TQ=*t
+%\4 at U=LMp\1VEnEka7:6RHk9C9$abZoYnLR-?ti_HqpMu/+Vhfl>`aDipBKV>fLMp^TWO;D$n[">(bC^*^giDojEZEWkg4ku#X?#'
+%nGj_&4+KlU,gpcOZje6B_);CTJUQne!RY,i"2M&b(6XMoi2D$L!eiII(K$O.#gFcm!?Qj?aF`VJ7f\,9i5:HNM>5(X,g"8`Qb^Pf
+%:h\p\TG!D]>loY1='0(i7<j\A$R#Pk"TiaR=?nU1DU\\lA<hZLVBZMobDNs(n.&i>U"at0/kc at mLM:i7!J+=LJNGq**'<d)YS2u>
+%;Bqnm!?L,Z'RO]nD2mo7a:]JG:(ZppkO*25D+U&ZYW7:/+*qB]143=%SQYYW3ZO`R%1D)b+Kcl>K-LC"3UjfXN`^'c<pcp9,gEAJ
+%?o7ZR??Danq&(%f+)B,PRl6H=^kE"t0H*EVA(b:qgbTpZbBIO+.)1O`0Y!9$UZG0*(OR&qUH<=KP*b#;Mr6uUVt"4gd=WVq9J*EE
+%G"?dUWS]^3>GCgbXkI'K?qV5<qt&0lG`8,AT2/Z8e\lX3q.f^[1mHg5,KH7-W]j0JhSS;NbN?n-a&;UIiS,WroU,2f>eFr3%puSM
+%BBB"u9V,IHV]K*XiSecm_o<5al?dV5`()8F8k7dU$c2`_&AETpQATr;@rt5cPZP>>ftp%e-oRqCc:.Uo='DodLJiLWbQb,CF/O]I
+%Nd(bOp:qoP^qB[!B-SEPN/G't3Y#=ii0JFm.55;Ws21 at Lr*!Hl>>?ZG*)AVZl+Gg&+Y4'in&JQN_"%k;UF*_q?Ll_J`=j^')9;.V
+%6lff?9ZYfC6eJ_)>e')Y@@=1uBq_/lr6 at eA"'Up89_s>_.4c#896<2"-/?>u.46_VmmffQYR<VR(Z)C8QDYZnB_>qQ%`jO at oc[Rf
+%!tSq/ln7p_E[SW9fK1Er;pE&$D4HOCq&MHMR;Q"@QX4s)8*eek#-"d>D at p:5EC\?&TVoB1oftnT&,4mHJHO7.k`RC%<upp<D5RSE
+%H^,'8gR_$;F=QX_A\Cs-"GGU#*:FndF]Jh)KRB5AP7]#EeU`P1<u<)Nk7rQHP7*ErEH$G.p?Bu"b6#O4D\Jf62.TI@<b4\g'YTqU
+%WDVl9PA&OkNG(Vl]%=121o:i,`"]PEkFgKH)LUXF$Q5hAbsgf,mGs83aF4']3"I`28M7 at N56`J`\[0)jn8Gn^X4CRd-82_?08XE)
+%0O\H;gNF-p1t9<m=uIOB/UR=N)?RI6:e4a\CHlDoL+ktD/l4l!%H+-R<a_0P&_gKV=G:ss)4bC*5aHboE,o0KYcTG*hhV1Per]jD
+%8on:ndm6X<B]WQ;Ui]/fe#pB,9O/^Wnp>1.'`pXe9j[e,20m#]F^`3#BXsM7\G^$dj/$Fi=H7`P0 at HN,p_iXb'QhF#>YO at P2OPA;
+%4EX@[aKQG!C_ftKctNl*XetJ`IBb-i5('VH2d9;DRbSW`O._ipE!%TE4h/,+oG(uY"IOh`#4IL.EN8j/,94$'eQWS#pd!';`gk<@
+%nht\%^!eU+A+6Jcom@;\\@p\5Ka'AO at 713p^!1+mR(2?_Nsm!bJ1JY,StuYH=Trlh<*clXAs&k]J<mJ>Q6__pn,bCSSQ)[hDE81m
+%lKbB[6l2Y]L:NAt=hJ,.Qs,VF1r,cD28!<\:*stsPih(8TYgU^>;WbSKih<)))gBM(:`9;A[[D-1V%JP=-le`O"GsFJ2L^uP7R%7
+%?:Oa7._6Md)E2tsG$)rQJGYMhn)[`\UsQ!rl7:!MpUl<Kd*/9$Y3'&ejlV#VA at T!1\%H^0$K#+J2F\qRML^d=Dps/QfWnX6l$SIo
+%--DbJ!lF!?.8E>rX^s?)42\5iM;)UHWfjh!:A_>-cc!Lup at 1-O.o9HuJgM&3apgLGaH!80h=ftq/Gc):fA&/LYJ=UJ0F!G^`D#M3
+%o9'GVH9^!5c)/^'7>0]Zp<mY;JT_Ik-"bo]O$b`fl)N*>2Kh3':T7icYH3Z+<*"rfhbQ`_IETg^,oKn0*_u!l5F*C@;15]\JrOV#
+%Y+nXb\ib\uXYqdR*tMs'fV,*[XXoB=lGQd4!uL1;PVj8ceq_HTgsu-_S0"\YRLYp$/LtFf-]c4T>i+:,`cn.;$LtCV&Z0gs.d'kW
+%*msRjm<[!8NERu?[dD&C%\+=)[=;_%/`sNNgTDa4X>'.&X\Um&![RZ/a5JIeHFFqHdbD5QN377kqCM6FC6G)SrnqtjBF]`U=,Q1A
+%6'`CYS\LN*<GCGmjXB`3;%<_+-R*@;^E24:U4 at mY;IgP15%O0)[[Z6^[(T.;gWLlhCLIsk`(eLFV>7Zu#Zkmoc at jR!-DZoSn(=V_
+%0*=u[OF$!DjWV*$>'9k>f>U$mR?HCsGS%i"gcW%[10sCYT8S_3KK`^7()^ROMVcX%8K7SX$12l:LJHWd<b<JXpR3OQD:TrLUC'F3
+%[jp:$_\PM)&Cj<h!;#ZM.tM.m7_Fm[%^S"M\!^R#?*pq6*Cu"c@`';Q/^cE@^1f`'fFin9`u:uH,d1EJB$3<th48\"R%M)o?(5N[
+%bjD7]dF.$'C3EYb]7fU;=V/<`Xf'@ASBREW_Fh$628.M8QgE<Z2//FH\+P`G+#.OaF"3I(C$pr]3OfXGAuE>DgQK6,kfk!D\W69_
+%(oVH7c*21rG9.dXC6)YVc6^FPbnHS%PhnA6Y;<^X`$#PuZ'Q)"[M0nlGVCs.jIu0EEr9,9P$^"i8-X:ko&R?p-01.E#8cbB;n6pF
+%k9FbD^(!A\1G"(#pQOcVEbs8=#8CmUE/>OT-(^8Hm*I7`*P6"0*M[@J(ksCZ(\[K:S;:YH(3H`'5j?-7Q^]ajph`DdGqg17-Prr*
+%M)5,R`@O/oaM6'd=(NY?T2tgdjNDoWCJd4J%?P72jN8lLV.q#4RVT`TfYf#`eaAQtg33Y".O'$%(SPl59Y.5NnRY*B:bI`EaJP67
+%1sf)S?OY-Pha7hii[LI[k"qbNm at WtEPa3V"6U,]A<pqQ1i-_cebJ=q&pN,HOaJ!1^6QJ_XW4RbtPXcjOZdlt;_TAbt]%[QfE[27h
+%EpOP[@^dCE6JuN:o`o]sd5X)RgG\bHMnBX$eSm`37+<q+#M\(`86aCO>>&S>JbPHNl_2$SE\o2'i1aQO%D_4qRhBn`LaZY$d1/67
+%1lZ*^5BT31A[j78ITeb[;Y4F/q$%3>^HNsHgj935O=e4*o=9 at D*"$fA3BjjS,SE&FG=,O_[p27ID+2\gh#8`],,.ig)5=MR.[Io$
+%lA(BFZEbXtm"cGZIAh_KA]UIM%Y''.g<dQ&El(`k5'H+2"kq/u.(aQmKt?:VbN9mZIf(s.#),Rq:$#OMd6$Ht>ZtNgp0\kD]ph,I
+%@n$=6^aP461su)a`@_oR at j*n_h72Q?N#W2BjAQ]se"oQNaCOpeR;f01nps0R(Rjf,CjrF'9G&+SPhKlOF<F0^9km*s*("l(QClaE
+%#rCTO18PS*+@,PeHUJ7d.=Cn^Z+A,X[F%EW0XY2g[Sk^pJM+pUl+pW;PCmB]g96bq,o at 0"0B'o4#4/hTn5tk&@qsfH$tR&)"b(Tl
+%+isTPAPeq$GWdN4j:-=CdfRm06#?a8a2)XRAAIWLOXZpVl?4t^]8($V\58')CbuEV%EYL`;Amjcju1p$ZYI`"Yopm6?D!ql:`d32
+%XFul/-hBU_fk]C4$eP5A0EXYP`YJiap;Wdnk!6<_[c>HoKerWn..>pl#=+fNbcPO:G4$"?4#iuOOudR]E`Q^cL6oou%'D=+Ll*h(
+%F_Tl$01IukgcT`bTbckO^penq3i6`PMS?2kRtNtjO^MI(6`+^0=U7=*]#Oot5%g$%b6urYhT['`993g`IWFJRTV^8Eh7o`moS0SS
+%3NS;=pRf&D`M;.&oO0j$^"H/7X>-pQn)K"'N#>DA]<L%W2q1/g46/u9#=ElYqpE>'?.a2m9+5+#N\,]qrH$!fej;_;>:<qbbMTSR
+%;dbg+"(jU)C^i@*X\RJR'%:X9[^AKS!C!Y?s+c!7rbLZIHgF)S>`m_.a].5!F2B at 0;1+:O9)eP_kAI9=Age84Z]aq:6_e\^GW$qY
+%(iLZU"/JQF#Pt./h^TE2r9.Fg;mp:8UXp!G`d%!_%chAR8aW>1WFiid.`SD at A,!;$/\X+V6at.bLg8c8f;B?01&n>06#.RKn!-=+
+%/l\pa,3JBg(3K7#Eg%s==p'h`4SBqQ?R&n5h64lE=nWZg9c[$@:W`9Gl$-`or7Xi'5"G8D5a6d`@#fJjreU&=[iBCoR]!"IGi%d[
+%BT at tF5j/3f*51HSG).+9NJ8:t(1__X!kX[=XqDYYK4b0nk/A/ARI?;Qkm\MKG=- at h:To3"7H*:tiqX]DInbfH^^P]3=3%SX:P,J$
+%aF`Gil4LcgSmC&'Moi"Pj?)2c1!cJ7+[Q6r>Z$7dL'-ZoQ%I`I$I-+9()*iVaKcP%e`OrX1X,5WN]<E at d_$Q[\$d?E(ZESDb@?@*
+%EJ5j`am/Zs!*S:F19++SP1DYPX''tPEJl4ND*Ne'J-/<@?]@SH5S7H^^hgU2>-s)e>)!JbHVEY#30s+PHQ)[:1P[&o;*3jV46"oh
+%1?+$tkU;a*Ri%$LZm/mKAh%2T>)cmXS=.)s9XYVu3)WL&R\d(/nlu_/^MTgrqnpV0.cAt=n_rpW'.X>+Ns$-]\*OET1RY;A+,8m?
+%4O_^#g>r+9Vap=$dLcIk4LYl(:]Xh.E5]eC=q1;%9ITe6Q/-$TW.m&DXBu at 4Z.U\!A+crpR at b$!Wh8XI]I;(L:9bV'H^RU,r0XtX
+%Mj%pWDPpc%;j-9bfUKu&W4=*S at Cr$^UPT<ob&?ZpDUf0Qla2h. at r#\s-#dQ]i:?)sL8YFWC5*:#R0cAu at C9-h@nj$9Qc$J3#m3UK
+%#epKPb/2ieSRI9h;1Us_Y\T]O+]Qq&YV[19#B5^`dOqr5"7\!YoTT(VA;iSg'#/O)RcqWShHQKP960(Ce.PuA'n)Rh0L6A1l=M4]
+%n<YaBY7NL0UMIKbmWKbG4*Fpd/d:j&Ku9Q(HuSo%]RKgt[nbmMEf$i<9M^EfqC.uA(c:8ON'HJ0XU.Xe*g&1tkAjgd8.tP!oUnot
+%=IRH2.6%VT/,)WV at 636m7pE8?n_bieNQ/?94O[$)K4Db5[3b=)eq:L^-F9]Ld,4:A.kc;JPe>(a>Gu=3`X at R0?B6*7mDm+Kle1Pk
+%HG(gncEN_2mQGaT_8LNs;T67^-asqG8o'[3EH+X.Z4[[RGfj8N0(8)j4#j]g?op<>2!mW`Wl];C(j]JcB=4dW.e'H>I.7gi=))NU
+%e^FYSp. at q5o9Ao!:So<$Z-L0l'+suRJ$1G4+E_#gk]W?4 at b?iTdn\UuSW4248sdN(khKnVGHAnu$P.ZdoZ"Kp2ehXna")*Hb"c2b
+%A6NV3rTN8"rWkG%RDWI(b+1bo*00n%,*K^ad5iK?N9"3/M]NPCr%-6(-<5[TM38j4T)\DU^CQsiCKF;\gVPs%LTL`@):P<A*BM'c
+%qSJYt4;gN@*;%s!"#&D,WdMu96C+[YY-LLAo,>:*iQ5#V<Q0UYTT?i/X+bn\8II]Pp3Wa*QS:-7Vnp%f/L\TMj&S*IMc=MN.,YkD
+%Q`&a7ComtgRsT]Xi`<[rj=!alq`2C!$?,dh*F]a(4ZrA\"LHhL#X/r793D9hd9F]BiU0!C@^LO+X")m]i2G`jnP(r)R'\r*=qME(
+%5%fA+CjkomdICq9fL77AIXOTlZcNlZ\B]+F#mXH7Z9r,&T&/>@a(*RUkZX0ccK]';+u%1N/i6p>(n<EG5I:q7^"(-QL*r(":6aQS
+%8%d&.%:[]NDQ07g6CDu]@pG":5-fij78]F_ at lm=RZnV,f?5mae(%0GVqmF<6b3X(*E1 at sq$H7;$=eU].U&c;3Ffm+_9L-h=N2P_<
+%3ZQ@,B&Be?F\OjAU'Jbs11)&?'C0M%Y:`;PlcR42NV6ang5+/Tn<N1d1okQK9R<j&:9P!</>&B_]%IFM=7'I3Mg^PoZ3_>EVL$5h
+%0D6VZFJ*eGCe,lD).Kap!HJ2%/OCXF at B]]*TE\'f4-52*OCCTQKO0eVh^ZB21*701*Sn00YHpQr<@a:R*7YY8UmIGpBGT'n@;V*<
+%8KhNnW`:QZAaJ#WlJq>qZt"QO<:p%n\%CZ)lD0TP_M):s)Vn2:au^Hkcu5V\c1H47bHI41gpHb\"'Q4%ft2n3;_>&'UI?MciP8+j
+%TMIm7n2eG`d5OL9bl7n)JN'W6:cdAm]Okj(8Cjm1WsT(DhNkPR\j2<3#@$'F'S5E(Rtlp2UL/8N at 8`Bn;+[%<ke^<p#fs`54jl)J
+%e,2QboVg:M)A1l$8S:aNJ\%U-7_[R94 at IH*qmeq5G[<<K<s+7s/nEPBm1Q3CgeV9ZBpC\HQ9XQ8X"W-q=AY?jUp(`P<gh%09 at 0*/
+%1/dABA%RN_=lb=26'CIq!@g=T1(>SB at PSnI4)W\#CB6Q(O%G,Op2alXT-mN$No=JPNZ(?@Q4M.n06jX at 49Z[k;-bMkC9k)m4I_ at b
+%D?.S&m:#)7](^+j*hCU3F6JDAe-i at N*lZ'h1Vu%Od^LJ#rbVc[5g9q?O8\+#5-ItpRYa>Rg/IXX,aT`t!X\PkS*rRcgD@@Bhc813
+%'<d!ahu4,%*Ak,(S, at R7c]5U*lfg90HiNY?R0];Pcg)b?U.TV-ofngs!mjDQobec%86^VS8(M&'3A,I'HU-Ff$LOgaT?kd^_3C at U
+%FKd%6X+e85B*DL0-@=sES5]TVG,G&JR<U2o'`]"W'RctH8_&QqF#I1_VfLhLXIB:u9VLFAfa?,cn7e[]d9sTbqT#R>9Im+3^p7=5
+%=a6lQECH2nrVQ0dM64W%nJIsWn64=ieJ-Pm/S^hM=<b:bXOARtc,c+s%fItbWWkp\4-bKM/<@<Ske!^*V`uU#GoqP`.F1P_[8PK[
+%#3H1ARX%FUPTt'_fl%9#)b=42U3naM%6A-BR)*CB0uB'bE%Mhmg_:*/_Oid75YaqqD_*unSbYmD!D\,6DDFi/lE'[."+OV9j2`/q
+%E at n1M*4YGG9+Wgc'/&(d\\W^9.YR;JfFRQ9-<!b.n+WG-rV=:@U'&`kq"$@CY=M%$3lU8NdVW\3^`,+=Nq^I[_5!#[m\*mLeD3d;
+%"PU,ef<_<&1_n`_0=<3k8O\,V,SejU<$VDA8-dUNQ*t1\4Tp50,%-%'SLRBQ3s46G;,`XiOt*bC%T*@&q_c\jGd.>G#`.SrJerNr
+%eOG;?>Embj2bIDd+?cRPia"e!^kaUB3bG]"i4^n(24+rR/ZM^-/lX!Ea9?23Jd,@>gi5Pe+5=bj4<\c0H at ei#(rI`#KPY]KVF&%t
+%r"pc^o#s#`8qrDST=upZd]&EqbUUpi0=_0"-YSeM)<J5DH?bgZ=Z>qW8=.bQ&/nlC%$@4".3*9F_Y)VJXu/EiJ,;G%D`B;m6.WpC
+%<opK'q23T91NX0'^4Np9En4_G63,F`mR)sE$/^1d(9K??h#<9\"FS=+?bW:?^@V5:;quML]i0KR$U5aA1b(gRpm,X&pYYi"1QoTr
+%oTJ"n`@0q=6&s1']]lI]H*,>s:&NZ8e9Lr at 2SPsfS$g&u&10q7kXeur)DcN;2J.hnX6i^lg#U2*=O7'qo*9tnpLnm%+>;*^(-X-N
+%V[hTq7KNY3PoIur\,pT4'=XM[;mLpb<ETI%Hs+3Y3fJJc,ZRLgY_6nrSG"CL(,s;*CjVeOkk[EMEG)qQ7@&8f-f;^D48OYQW75;)
+%J0K[0JIF/t47'e]j=Pm5"4H,,S^SEtFt0_;pK;:aTG<%$gKES2C<>pI5ngi5k=a8_<5e(d5,W2lo(hHT[1X70LJ4G9)TII-aCBXc
+%cXlY[LZ%#ar'FDJGqku3?a(4WTbV1*>MI1mjU-]M5nbjg.jnDT`A`tLWta75Eh.NWW)gKRiO!=\,tJ:B`pd&7=$;6T,L`ABic!R/
+%Wt_Ju"(gB<A!A1CA&9kQU,#UEhLgm<)Gae.mDuLL*`_m5\gbkETXC:]@/tZBo]KXl<'!Zm<$@]]'?.m?ACmIRfF'2#Q))KJ6).Jf
+%ln$*PpSZ9V^[T+N;GOh at kYc#sNB"Of)[9]&H)3kl#iCe171f%!p>[Ead)>U9Qr-kI1`cO\>.;lIm6^V%$f3fpFJmU]E>A:;H4KsZ
+%=e/QTXip2+eqMT5$?`H<DM`0NJ#Cfc[Y,UhOCtG4fOZC&XL;(3'?!g5*'P6T-ENtL11TUqY<RO%f/aI%ZZ'L?Vb'Ok(gA8,qBHoM
+%P,<VA)fioZgGqRQh33P%k2?*n(]IO^9i'QR*dm;XeKoSlBf,9&NNb]D!XMG.;Ia4EL-$t'o+ufg7H]!(XGYM"@U8oe9%kY2I5pm0
+%Y6o("OV":3p.iM$p)3aZ&]]_j1&g%J9eaoD=ndYHn*2ctU?QL8gIIDV)fklo%s4VN]6r4>gmU7259&#Q-M"66-ReL<4=`3+R^9#l
+%q)J>g><D\8EeGl#&ON4OHWY8a$iq/79uNt#WFQR_KLkn`WlTsc'I`/6L?V+7?TZo=''epKpt3$,*rT.!);"#*osX'MDLL7BE\Ni)
+%h-1M1+N8YE#d')]dSbSZ:3G8GJVbh?bubq_(kH?:o#ZCMgZc-koDk)S6J\Z1o at T(U`jA-pW%GNCS@>7Ar-!BBb#%Voknl]U(On(1
+%B_L/6kZa48APpM_qoQ*$R9+i(&?sKE!aBU6CGVSA`k#\+U).M;fDklcrpj-#J+<tdjo92iOB6i- at X425>n]Ku>>uMU#>Y?q&#.<m
+%8%eW3q[9rf5d.PEllu<(Q\n1Vk_8[_ at 0HfRS*UUr%Il_.U^hK+(\UQ%+SqP9n>C_p$jbIG=*D05F0cOWbjN?g^LgHS!IU'L\%UW2
+%J+q2H*$j?i:/#E:RqNGI=tX,hkOEqi7%/m![dMW&.?))qKBN1"'IBZd$5/:MDCY9D'_h>NM=EgSh`!@i]I]+Zpq56tF7qn7?]4j]
+%h=LPa>-%GG%3qgWKZ$*YI>G)@`c$40Y7#\qo at eNtJ&]-O"6f[QZ?4-`AjISNKX]6]Ld"LPR,97g;[krBcI47l\)NJ'j)H<W:E&E(
+%^$I/llYQ]5 at Op)U%;t?OV5j8<AU]It`qgRtN(uAua[cKqlY<(,1Y&u1VD./e$\tl,^S]TX/'lIDfb&Ic]al at MqgdFi>n-qkqtc!D
+%@5/jjrOY5`\=jtQhJJ^l'Rd]MpNOq^bEYWDEUXU1krm!aH5;_<a(689b%-Zcct:RW!A<P"QO?8d4 at KL'pOp&CbY+Y]gZU*aWVNUQ
+%rAf:BWR)c'nl@,`'\t:`*q6QDq3pS#f]NH+Y8e at Wk:]/o"#b,Q$%'X0gZEd6ICC.;\*i9'IpY&clngNoFH'TR0^aULfm[+jn!5XN
+%M8Pa`4WsG#N2G`<IJp5na+?Y18k-+MQ&gVAF)6G*SKc:N*/rnsrA"n<s-fGMf.g)=Rt*%lkDp.o+(q?V(%T4,k81c(_!8&LY]mQi
+%_*(hZJ[O&-E#UrV\];DZ\<1X1XMt'?jo%%4AkjBpn,&N]OHOZBNsT.<:A-jf-;rQ#mX#^he,Jr.g0a^kL`]Ii@$u$`^UMsbZ;@_/
+%iHkIP-`Oee\RJBi-aIlqQVCe4C?5mbYNqRi>N_nIn[s.=G1qHEbC+q$O>%mI;t2h[hb>cTbS\1%-C9&6J.5`;ZeP%B(t4rakM/7N
+%4 at +gLD>&7(+.(u$boW2&dLWdOPaj_9%&Ct`m!'<C]CBh4crQ=C^CR[#^%!][@h%c7k?9^qW%qB/RC at mD5HeP;]Ro(qkcMlI:H%n#
+%O6hY>6\c_/IN.FXI?Q2>Ee%7TVPSo!YT0<@Q9"8iC*mb>]oAZ$)#nRK]CWL+p4g&F[2k`ID3WLuI%-G+CEMa/51r^>o57LaLAr!C
+%;0Vjpo,q0E/hGV5;4/N(V)YW;16?IFIpBjXQ0QEgr,%]Z$u_sp<RU&U%oU'hhIe?Nj^DbnQJfC:H<f4F?#Z:>#FkQJIke-P3PD6a
+%JWCG%HAK#81?Q1XeF&Z`L&8<)oRN276)o!oE!h)0^0\6pH2G)o8:>>5_aDL/jKYm?YPbp'q6iWe+`Lf6Vfi#WO$)g-a,P;4jTh"G
+%2R?aG)5_[QS`3HXmrpcOE?H6=:t<H\paGHW at ouaXA3Hpl@!+i=:/j<KpY\9<YGGH2.Qrc__H8Kf4Lfj18He@=P'Heal/s'0V[_^[
+%Loa,9U3^C;>I159?%bBH*5ZP?S6#QrD&tXgGJ!BblTT4WgU]OMe[Ht9Ie`e^5:k!%95"ORoELbh.=pj9?5iUDQ9e$#<dgQG+qaD@
+%Ga;>tqOc at s`(saAlGS1Q9X(.]#!cV`JND8)qq0oXmNFPKCDh&mhn"p1rU\<X/b]8RcA#?ggAPn*4mfcBXnf>bhbECj3+JX'-KT7D
+%*[gda>O>'g?C)iAV2a1c3 at Uo).YFY1c^6dE7QHKWrF;a-ipJ at D&=Ur&Ir"b(>R)]d>\CPgcJMZeg0GXL0rSjm$505>]lgufTlKU&
+%n]aZjmY]'`o<d1G<qU<ciU4BTa4%DD2oPlpO"Yc'D^Wa`W,j2=Y?`0EM(2q-1,"m``te)?f4Mdeji8Zm>.^\ThSurLSMos19VBiC
+%s*LNM+X+,rKitPSg\juZTe[kR'qWt7"n(6>C8dYf_O"GlY[`0A"2u$?e\]8Jj?S.oA.D]'^$qrHA!cZ8FY,RXK0Vd@<39'Aep1=4
+%eWOtap83pLfMe4%Cl#[1V]Ur(5P4Ml38Y2DELn4aoPOH"CG.gc0>J:FimCYRQq\0cS';$:oJ%ANqI.,+G4keM at SV3T$nhmK]?7FA
+%-E*WMkdm*dOkig<]dPZAg&Tdb_UES,ZIfN_UiNreWh_#I-RhCW;WnQgQ"N3=DX/-FHX-0shRHA(pX=>Yk1bRFNU$Df^Ee;rVoK[g
+%9n*TMBWerUeM61<&D^#OmsPDo=NIC)-4NF"_aA)0$'p,,D4hHrKh(`MFEFb"EE\=STP,_heMcBl>\q^/>/c1IKa2,TRRjfU3u>0!
+%=KU?;LAYI-4RSW8%JFC5hhUkNq8417:"F/j5;Y#g_X7ioOeCi8"#$j79:;<QA-K.Jk,(/GPV8A_ at k[=>@eo?a'%u44A'iq^W3%Bl
+%W?AZ:Q!%uOdqG8;N#l)4:`Aui<P!#5N]J<R82H6G!s4[YD]T?'Hj,J.$^!L06GmTS6-A/b\F5';RJWk,hHj!)n]dfBO8^Z\jZZ\*
+%PPWN*=9PK2a;qc.^W&'EI^0;D at Mf+$DgN.XrN&R='n"+Ti?7Ap\oeuDZt!:GUQ0Y-f9Cd1(5mW'U#,XOA:A=,LDb"V.m<P[%)X_-
+%068q"\L_r4JrcUJJ??Ep#t3\=J]I0KYcf,Bi1!=:500oj8[nNjB',\_g"tLWEdDF?jZr"T:H184B;K(:8)L(Pgn]:C\k^DkNZHb%
+%UMueT8iOGi[\LB0<Lt$p'ZTaZFl^$C/9XY\oEMEYp;!m]4W<5acq!'8V*V4d^019LKmqelO8J+Se[@np)rHu/k[?(bBC20+DFim\
+%Df\D?[okaNf(0/g[WS5ZiMTS7Zd;"ljunWhhuI;n$XZs,+4'K;Jip0j_]j#Og4H3Pmt')>oTp'MBI141m<hUcgtDEkLEZQmYb_eS
+%mept26^Ylf&;5u at MdAs>6:XQFWLgW'#qoo&:a$h-:V7^7!iOticZb<$fPK?3Z'1 at q=2CQf:%>eW_jt^V6[/\lE>-'>mYr1t.TlWD
+%gRjWnG4]cFcf9MFXDb!/D%5.,l"c:a=klg%ndZT\\-e<Z5uWOIbd at s[G.4L/It<euChTthrJZMoB!b)2NdskI3u<4rQa\^=&2Z-I
+%4i(3h$LLVu3P-8fe1[L=B2lG^>*^^,45)5+6O*43&O3Z2*`i2aCYYfJ]@m'nRP48T2lZ7e(N\ju$ncb&<Hd1`Mm2njk:aDOYOP10
+%=VmCb)UfV&(Le.*1]+2JSOtTBA^>G+PnRYd'>8?aC#J-B#tDX)9?fn?d?kf7VYao*hj7u:jgLD7C];TXGhPdIm('Ss^:UB5e+0>1
+%50VtEZi.<h+.CjK#q?^>hC10;[;/[s$4J[EHpC6Sr?OT[KJUm/n7\COAk67-X+b`4=0m("PMB#a20X>l?;HfCa_F(p1mu87d=pVi
+%T*YrMAC;WEP]5./\&'3AIG[0TYc$m`Aea.7s.s(J)!g4`Ho$Hl#j8$iJR)nTo7-V#fg5C*j0YoIQa?LnC0S<("IFM^NiN._JN(OZ
+%i=9\`Z'5pMS/FoeRc,l$N.6!FhM8uqd5uP#"37pNEA[O3!-Pgs]#-U"Vm'"uE+(6+>J*ss*aqoDGVJTEql-/Mm"C-Go=2KjbiS`k
+%^GLENF7hAhh^sB?p\S+#-)<V<FSS%G!R_U62#f/D8#Rfl6634!m+8c'q0Xub4gV/Ie1#CDSUtE2X(>0F%!qc*\O:iGL2OTl>]UQ9
+%E=/#*X75kCGSYUAK\^97)T2L]DBs:*hedqbrUR>#Si5OcR."P_P5K#XhIl5fq/%65o.MI3=9CLVb=[M'2!j>kJMW'.%0,q'i]:<q
+%#A_%.CI_f?Vq5PY_%],:a5b<*/b?E;G?22d;%21I4TX@"=nhU(>lNCNIqIQGq/#6P)%VB]QS6"Ylo<Q??S6Bq?8BjCKWN4;nd<D(
+%b;E$Fgm>Zmba3*dkJEQcWtrA3"rf=^a1]h!nc?IXIhOI!lgX=Fh;:sn7?o[++Do_[ec)ofk:3B?Rf9NM?UA%=LT]u=1Oj53?)J0G
+%kjjR3SlI--Ufirk>qRE3S-c-q%s@\/ANT\V1qeqXn_L3.Xmk at OGal($];tifJ`08gl!Q?hMe9j#H?Aj%e=S@'DQV^p"4r,j.o"Z5
+%<j4Gl5'u6F1t.'F#/Z*_Xg[/>KTMU&(*stYS6<<-O8-QOl9$ZYo9)?+O)K3igT3R5bAT0R1V9O6osssQ8;A*jlf;MsG#>2YHM\/\
+%ZZ62(*;bp+Nb/gp.F[.$dS9!G<5C2'Sn?B4QVLC.Zp)Y^P13<#l/-)oR!_O*[QG^_>g%n&s)*aBZ_-Y)ml&./e,D6UgSK4g_5F9H
+%/^&q)94K77$W_aEm_B$gYO.cMM]WbGL[82*32B_UZs97ETfAR5c5hYC<ES&3L#Y*oMR'GhALF`^')pg<jeaug]rN at c:HQ^j2p`%1
+%iN^aF$Q!&25SrR':ggl]T@"4YTbdD-YQRe-R)7mR>YF`'l-n*6g[b5rI+Yq>S,D\CJ")_mcJGJgH*Y1h)5g9iF606)jf_^ratU1c
+%q)e20NcJm=BVBVAIn!"),8Hd\WXn0nRO8qqTk0FP8;r&??i#KjR!91dR5FjW@$u8!Nb=7b\GCD%T<+kD%o`"F`MnX^4D7=#8l+aM
+%B=>k@?@(=I:E/ro8q.dn3,0OIj`1:6S*XR\-X/"'1<mlmK:>JU"X`SToc/c3KU^L(k?P0F6u0T=oDSdq*Brf=0m6>L%VIh."hd;l
+%cBJ?WJ<iXOR1.YU(>:*)6GobRZ?)7lH"Y3I]l=4,@/G`&rNJ5pfgYWeGB0XsO7>m&L\Z1b\aQD@\?bc34OF\F=n"<c4s30"U[hhp
+%/_]ns%=$P_?AAr-2.HNoE%qLom5.&1alDYLXRprb/-EgkE;fFU?09LbDk7^''HVrgrV:t:A<htq)X1%&_^d2T,*udSLRE4'al+ON
+%Kpae#@9\NpQG_aTGYd2nqX\<ChgXQXmcmu@/UskOG9C:h8U74(`L*4.KR0C4IIg at f^o=&DJ]ufdBjn=dq).HX7YbL6#@eI3;507E
+%i')WF/!#nm\1IB"q1D7dR-a./h6$,Br1,#G74A7[#@8bT;](bhe3MXt6aYHiTaPtB\tUEM&b2-QMY(g+dRt]nC9`&H7T7sVe\;K5
+%3#V/5r at .R&g,ptHj+9M`Npl\hgS?uWe8H!;*d)+e6;Y0]2<B4"dT%`GNArgOJc(WAP9VWCOrFt-'>r4OnFE'D,DF\8<GRS>(UYI2
+%p_)0?$$)f.(/^HMp@:b!cUC)hF\J+?P at H8Y02RHH(\;(g^Y'ggCo<&JGFRXuO8<^&_rKo6\Lqg4Y/2sgL.ZSRL$%g^QeH;k0bTGD
+%8sRTH_TT at q,$pM7 at dad.9OV@/<h]8%/64r`.nJGuMYD7LGgYQG4Y6%\>N'SV4DqCXUj_%SiOA?,.>2]5X/AP&YJ>p@['-BnFQ!g#
+%&AsoP()l^*XWR&E_Pe;]Hc^-^1aRRP\ou9<B-7'leo:Uf,Qoek`W?B9?a23?6U_h)/FG`DM(ErK*QQ?uo3N>j<h7Cbf/@j`&VWNT
+%aQgDW'&R>Al4TG/*!!=7%p.Vf'*$=[^MTFd'DDt0\.bLCm@,DL)u`ol=`.121oK6V^S0H&`h]kPLYi1[k'(\7WZ"W4iDt0TNpr/]
+%B;4ApL`U(0^$Xk1'^(j+15j!#B?-H=iSj@/:k%1(QZ1(Vr7^t.W9f&0mB22&-B\B=MiMGm<203o)rP/6I'^"oHgp)@^Q%\TnqY>3
+%S at 7nK\8-j[l$'4kPo+fPO28,Y%^%]`V0T%h7N`pMk--PY`X*t*LHS,KIl,%RC[p5\h3RiNroJY/Vn`.0rp?ohnlOH>T,stN7O#Mr
+%#7j(PDYXh;hg5jIO!%]u>A+m0TbL8mi\bG:<gtK`c<ZMC%9T!,[!_h^*O>3YX!cSs#:K?8mV_\SYkp!@dI>bVU]V at .<k>poC't<"
+%R1Y,>Bg+NO/"DBSi"[\IF%..Wqo;ZSMiI65A]$jId)_qp-MWdSdeiT=gSh;XbR:nH*V7-"ZgGP"HM)48SSpRjIrA)HE2^AIlV)_*
+%b+@()<t7l!_qPl5:]6o8q5_uY]%.oc:>&S#O1k>&a7mtE9uFG=p,'P1/+L,_cg1J<'-=&&p=*OH at Z(=N,.5 at tC-fVd?BQ1oTOs0R
+%q=S3QcUdt'<#/PX`oPi>79[#N0Y%&MiY]\4<WC5XC_2jqNL12KS=,oC;n8ij/\kT#2?JeJfJ\1`["f,;'6F6U50_!ocFOca^&;L"
+%Yrq[IE?sENqf.W;BCia7IpAnl'n%"o[r_1$Rnlt4d93P0ErNcm2.\#dC=%Y/!G,hEV0#R/.IqeTjEhknN.`,>P5Zp.(JVu0&@]ms
+%*_9>KR*J]?RaMB!J01kVF>t;I(61bYcSPW<V9FUK/\Yts.kR'p`Itm?pUmk2Dpo9P.lPoS35>Im1<tC at Ek`d4rP-9k]0X"+dpN)S
+%E,Mk^((ksVY\k*G??4ucI$/tcjT^A(-ICq`SaYY&Fq!_SWuso\Z]'S:>66ID3K.8l566`j\M\F,:NB\cYJMR9V3?3;R;W7qaT5Z-
+%*tC-A^cn,DQ=-9"&8>[MS#ba(&)beP0W,;8*=r\n='?s;Aeu&5Ss+eiiiB6>,q=POeV9l>ODWM=rqQ4gFun7XB,:@&/;5ahDaG;2
+%Ii7_&#1iEiikS]\&>#h;I`_EmTs@[<((5&.T"2lnm;E8le+'5.fLS740(hL7S/_g*a6%uX-q4k/Be!$iKoS3QRI+HCXCS/6TEb1j
+%#!@"rF47F>E[L<NO!'SW<:<9Pq,t>Va":-9Mca=XHf2Qt#<s7I@)m0A-A$Y,q?=n.H>s31FMX74_r,qp)X_t+$lr`W)D at Z1!5q>s
+%$V%\i!1Uh"$bebrg&Mf'1<Om_1cKg*f:.0fq5@"M`!s'ap at 7*/aS#3MWY.5:d2K0-*l>.PS_U'Ua*ATC?H7fM[i]"l9u,q/i%)c'
+%HJ[<\E*I at 3><_"R$`/I_ciJs,l'at<IAh]gMXtT9"^l/S>8Gtj,6-PRVE]o)5?^`i[lo$KL]1st"'p/=&Y-LG$Jbpsgu/o\XRXj_
+%_C4h<]c?7uOCYS"USBshn4X<Ue5V(Fh1XRl(#>'-EE!/V:+7O(E$["&?k0UQrJE>'Q"?:.@>P2W31HFm`$>Gcllsb/25,8(?+Aj<
+%/_dK;[.m1Z5_%f(p1f^_d=alV?jT3b[CmR/HU6>J+3I`B!3*To^i%7T=N%u at 0s(u$$+r:G2$4-D-$4qH&j&0qTZbK>3cMLP#.iHr
+%P9\p!ILHEDhqb_Rfg7)_h]pMM#c"&TC4&-)($4bt18BOsKO2^,qhZ(>fk?KBii(f20qd.7)08V3P at YBL3jA=o"HSm3Bd4J8)2RD`
+%qE?e))3iZ2Rirr,=m!S4=Km0XhD6R4S^(c'3e5u.pbWJRALA$ATS9/!Os._EihHR#V)'lo[_d@@,4[B'`]=GJ4Q@(NPaocSo;RO'
+%O)ItZP-qfV',%aJi<,s/ouER,&<6baoaCs/]qc"P*3/]DEFHnVRJ%m%3/F[dk0"a7UQJ/lkaCGq$OGA07^seK9K+XkF*HQRYhI.)
+%8XP)SaDUqo1f2qE+L5tDf=q(J8;$d88MS^o#Fcm3R?oBjGgn(;ZiN'klbSrW_A1jDm6nE9Y0NW$<ns2N<P!J\V=[)7j\KU5,?;lT
+%4C?#p[/lIClZI5VSBR:f`kp(i36Fs1ojn1:Z<<XAJ.`BUXdkcVc!`,Ek=#Khi*X:@E-R3W9G-9k?k_0tEs<&j,*@DPMi#j&35g.&
+%/nHgF8+;<[,Z"?&rCBCaeh`\p"P%K$D<n8cKB*6+q)/E.P]7apgGCVmN1[tKfZ(:LEgIuq7RO40 at f,js>^ef(pr4,o#$:bU4DH)G
+%kA/?j#%o>AE$]'iUD$_],^=1*cFt0OgkqA-8Z($iV(`j3%Q0N`fs)*28g>?.f&7aV0dpHu233CQ12Y:cH*a-%:ZGLh-bolTO_)%]
+%[B>k#AQq-lZ:"O?!QNH at oWPMP#J at ddlKp;c3W==9L-I-[qB\mmq,,Q6/#e:'=N,u.<b)5EHUEZJ(X_R)3.[KV at s1G/b)a6A$Gq0A
+%nh-1>g;#>?=hFOGT3G4"cG-pBKsui!#LECIs7.92j$3J%?iU)NJ,K3Drnm_K+9(`drn#bco"Y+7+%GG`H4&hbs4`%u5Q:0prr0\2
+%h/E>]5Q.M[q"*Z5IJrX7r?)'j55t;kr at dm/s(;:>0=8KK-0`>t<7('&_0]r9M\l5#WDn+CbT8<"(<"#kAi@<BE4WN(1<nc*?/Y-]
+%(t:QZb7 at jc7^4gBgGJ)MmCTGdnt8IXm4<#LPSqqu)Sn(t.._lb!2"C<+q(OSB>5uXXHEUnd0R(qaqhY$jFN\!O^4mcMG,.ZV_j+Y
+%hn]gXI<,t$^L6\TF09,JAGqGk]"n/6_JVS]'ToUG4>ADZ9D+l86C2mTPgD.q.,!JC+rj?FXPhCe"*IW8M&-";M3ES9,-3XL_=VP+
+%M,NdVH5ni77,hH17l>#1/'@e;LR]W;>DSodEk/HK.k.MT/57\g(uj:S1RPlB'sk\*2h>@,9a;/Sj!V-j,p'gs/J=@Q2(%/9ROEH+
+%1R08XF_<U+>3]R1SV+"&Xr0r9\Q=_(]L&e;$b at A>Cs4?"ShKoTXhU1RX?ZtR0!JaB)RL"_M6qZ$Id6B/B5c3Ee6l#dkIH>+)Qbt,
+%f\(C8'qPD6H5WhN$<5A:9nH2N%V)qoWOg"FfiZm22m]_FS4'8`mnuh(OcO//^Ak1oSc0%:q#pMJ#t]K2ipCPKSKYJ(51I at b8Yei9
+%:]jJ*"pUiSDV]Nb03(a%4bI6d`u=2uPPN0Hn%;S')'#<9lgsCbE]ihpp60RU2><?aAi:kDr3`tYl1lKc!<1hS)BZCVUh%MXi\S%O
+%M:j\dgE6DMD-_364;o%1\Z&'\i4!UUK5NAc4`*>9#+ZOd#o at eg@="HY)JH at n$id\S/8EiU^M^$:dQ="K50")Xr,nf>_mRl\C['sh
+%-SUC:A1<i0VdFiC)7A8ga+)`RqU!+1'c`Sc\@fpeS<ubMfrEIBgILA_MN+XU\"Hk, at 4A@:gD9Y9qUBRch!3)i:8b;J-*>R/f-ee6
+%Z&m4)[i_2!dqKfW%9CcMfe^^]Es^:N$-4'0R3bUkiH+%9T8>W(;[p,%/qI9Db7.n-[o-(eQuDc(KJ'K&%QIF/Jtj%_"7)?]AZ/g6
+%:3J!][[5H,CI>PAacCCHij;ksA7g83.d3giG%S\9`8jSK<dK-%CDM*$c2"/VmC!S at HDssVEh<iQO"]1<Mm&AjoGlJCYL`N*-N!4M
+%T.]r%4gXB?GOJ.7[SP<V/bk,_+CfCbNVER)cPeNogD&V[hV07Wn^3&=@d5V`;W8!D[ND37>9LUb4Y)Bn;Pq%s1].]Qeh!!Eg2ZbP
+%*er[MT'WN$U>2poPEXb1_T;m_Khea at cII]0NHuEmk!6kt-/MfHnIfOphpCL[T/9O'Fio^+9EIS%?45m/lP-)#L-cfY?LAc8R"P&#
+%B#qmO@'-k at FTZ/s@!*slf>/L)X;l*B><]Q6%1ZO[N$qf&/fd&#GRbnC]Kus`ls3^(WV]S_KUobV"e'ul-[F2Cp?V"Tk!e`DO^[n"
+%+&K8oX$:BKb#Iecq`?@jp%uq$,[Yhne(Jpe-J"]H>n%cS1_>"op[DT'Xi0U4*+7;[J-5/87NcSE&,JBPC4P*r&bHKl,+"\o+C at H^
+%5#8TuNpE$Z_;XXVfdEI>;a+Rk4XM^Q%hr's#KK/FgWp-J at OEgR(EhanY2Ctl8+YE at 6QTTM's+&]\L4+:84*-+GSOcW\jZ^IR<hpJ
+%XU>osfU+!QDSp+3a^r,0_#)ElHc`UqrhC&KV]H)6O%@dj(!Lso+?Pf"S[G?pK0_\8$P]18dtJ2:h6cE"e^o:79j,/b[f:J4A^rHO
+%'7EtRljVV&R0D=S*8'/lK7rRGk*<9sre\r!/cOUJ(J');T'%cK/N])86Gf1qGs[,i%p"[6`!'D5Mp`ob at 7^\ZRnYdrq49]-oW\WC
+%/?;!p/\t6]V(kagfrRS^BQ&VF-SDL at +8:bKaS(f8O9`apA_sH_Gqr8Pmp1apFldT[?dW,VM'Jamf)Z"6\9TcpGK"O!%Znu'YZ;Af
+%_,L0Zo'&)G!mAibE73e^S)`.3j"<Pm;IeTg5toAWg'IsEbE_\i]iB&n"N;#DPDk$.B/PuB++"kK^W_>#Ah-LPmL at 34B%?i293:MC
+%.[]0TFLb61?G]!O[!YX>RK^oA6tZHq$_pe3&:&iXm*Nf6<4_fi;f6L5/rI)J.EF'?A&YLlF4"uDLG3ZEo@]L:aN>#,2W_3X[B!Xk
+%*6R[Q4"Gs!1s480o\/KiXq6.bG,/&@SJ)$lXAfue9ND`_f*N+5E=n+J>>3WDA'iY"4](%[Zj3\gm&7dZUbWMmF[5a*9aJ?.&hb$m
+%RLH.cectHDmgXd5m30J%!'nQl:b)X$fb=p''WVs_6YPH.A<T3BfH'DAKflPHJLXql8H9lJD49_`YrcpmQhGK)Gl%4e4)u$ZN"sGU
+%Os_##HfaT;+fe+-Qm$OlnddTCZ5[/b.%G'GQ,0MO8ssNQY9EV#R4*LL>0O94pSUQn$nO:B3Qgh*C+GIH;\8L"!Ad5kmR!bR^j at fN
+%OhGBkU4ENOU)(/\^c5m566Nd^iN`VbfD1Gqbmrnj`?`=1I%(3lIXel$^J*FOP_fTRH-,m=kVij'aCVMI6:L.%biG1@)T'PG\CiBd
+%D0sO+=6PM15UL)SX/f:DOIkF:f=!\7k90CKFgK!MFlfJ6!mVhL9>LAT%fEYjBYp9oZ4qb at dJdn7N[><rS>C^hXj1jSApm2Z*J]rT
+%ASdS!oha<n-Wo!5#j:Z1k)&+d5fB[\[8D1l`%0Al_)m^mk;"?Jo^Tu!QhOSi!5#ab5[C^sY_$Z!J/fj$3l8:oHmA0KHmYFkTp;(N
+%LChF/pP/@)L1?%`kL[I/[[gt",(e62HE;t_'"bPR<+L-*F6RFW!B,B%F6sbCXegB*'dr_cI&Q&cLR3"WSoq:#0)7%bRW&DF-,@&[
+%<m?tr(XRRJQ^#T+`-43rT-s0;U1Ub5B at S5PA";T[q3W0KpE:p.S at +QXlMlY_@lG#42QXRq/jnr1^lFj)>e8 at D>r1/6nn3::</#2!
+%.\.T"_^XYSiTuL?Go`ZlZ(Z^2;OQgdG.YN%fSuRU@]uX<cu]((fVSRg6pJ)"d1MS)[CT8[*Al]Z'k62#L5hAIF<%q6r;MF)80gV)
+%3A$Z,'PX>%f6R][c4gmgd&`0C!)-_hR<NLfVk3MVX_>OX!364q;\6%%\qN=MH6%])(NDmQqPau1B$I:#=[@Cj(Y/t1L\bE26kGB<
+%LMW"W=SAV at Z:<%>Bq#Xqn_8hO:B9"gnb7]j[g#IP51Yq8jcrglY-?9+?7o:T^"Cq2>AU9Xd-D at 0_>#bf+4h<A8GIKdE5bRsgh&D7
+%Sf`'3\<*]ML6Tl=2mZFDT0+'u_/o^eh*MDYKLB^GRh9ZU6o8/IH=aN(C>(%C6Np.H:0#O$`mWimSQWr/&l)h#YCq<%BGln'VUC%a
+%D#+S$\>Y),'RK`t+/c[;^F.O'l$klK(,%OBMOHTnPNLGQ5O#>mpJjK;!oB&<5\GQ1Q97B)1*g4FQ+i_nF3;".V[J55/LU/:"q+BQ
+%RiruAgL0h>[h@?,$rte<es9<57a!Wh>#_>co)Y66QKcS5RI-,MOU+GoLLWCq\?Mp:>Wp4Q<rjFo$QJE$D#jWFC-JJ9DD]tbhtQIr
+%#Ra`V<fbs+HUU57>@PUdp?WrU;n#H@#;2OgLMp'0`;hN\#nrn64V16!"fto-IFiE7<UT$lD2mk>9j+Jbp_;e+>+S2&InnAAeb03h
+%Wr9ABCL6OC/_-]n%_Om`_WH8af,1ZA'm6uY8_Peu72s&V3Hkj:%BCi4!@BL-L)<#U0Tl6/BC-`L<Te*</q]9^\0NVqZBK!:ldVV^
+%gTHejaR'=OD0rOIP8;apW1M]9>kLe5$[ZNX)$&1^<+Q at D."l1"I&M`+5U&.)K)EQ[)\UK_U3SH36>RUohJh?i8!4[[f1B^-'B[TL
+%+6l'uTG>0'gP4gp>9W[=0e`49iIZ%(#net#="KT[L:'9gIliIS<f]P:aq)@%LD^8L<k+ at .`8?V"0:\uO9Sht;4*1%:fU\'^i4:%l
+%R]c]Mo%M'UH=a^-X@#=BU'1.G(9$dZn3eG;M)*tS=dq+l?@.c`T/KBXR87(W%,Dc!!V9E`RoJnb1lJS2_'2Ge_Bl,(a<umb4)5=#
+%A4,G[`X=7)PL[SmoQC$-eE"joHupJjb`.j%fZUeeD8X<9`q<A/?3&XjDLt8ph(58"bT.<l1ujE&Ii+0FXbQ.2^b6lH[SsF!U)?t^
+%[c]Pelng#g.hP?!..[\?Nh(hjd,p7Q6U?=KLDj8pO2nd6+2-iKA`4&.J=YB4Ir$V$6]Ao5#O%BqDCkcNC5;jGc%TTC)B2eVr@,)c
+%LH<eO<b at c-R`F(b*\GHK?s9iAX9#31G8H^c0FNV1fM(H48.'3\VNDXCiU;$if)VM;VnAO6I16SKd.Ql'!h[jqE:$s0J8rUJ at 4:&c
+%,N5L[^,2XNBR*RbXLNiE'Zf3(FP&\M;WaMF)i$#h\0C:,"Y#rB-6Im.02ZJ?$Q<6IF?qF\B]0)(B"1a>l!kkW%jGW_9t1=k9WSE`
+%6ArVIYUIk.4'%u:ZYnD);k+7`p])/Zg,s6taGFcqe8,fCPUY5o^eAbUG<-!e>cr4m:u6Si/QQ_TZl:k4NR&;dfd=WF`jT"V#eCUM
+%RF[&r1W3+X_27:BQ6P7&faB'1N#$Z]fi;pj_mq55Ts8SWYf at 0MVe_cIU"p6R!,uZmE/G+fn=*s]RmM at Y)Wis*<QkQZ3'I6ZN>=#<
+%#Yd8l)IA.B6h>hcZ\j3V,]%bSp at TK)>:gN#a.Nk#$jd!j$Fn*KH.)CtD_3NNDC\Ql%ai,Fof[mb2_1uf=&]#[h;(_l+mq'2s,Cqq
+%*36eK[[UcbCe&:o$okca^F>E;L,T46A?iBl)E0Ni'/+6hrL!/Q_k#d_nqTpM!p&`MZ7K6AqNj8pE8_j4%JrRg"!oLW9i^KA9g(S<
+%ma[Na\FnV<DFcU>mV>cV@:X($G0!n3GZJOO,TmUf$VaZWJ=JdPTiU8-kTeB\-2WETFFn>^I\#=%/+M3GVN$.IJ25XJ9e-f61X*;,
+%9=KbFPOEYGa2-jhF^l@<T[dCi]`e`U)VG0W3rSum7d:d_A3V$7KrI&e_;!?ecTsa6?AA^n;P)$U2Ad>a*\%*$*uY:h?/-tHAk*jK
+%:q=T&"r',?]84/\i=0)4B;$Jk'HLsZI>rs-gLl;:D':[iE2KtQ,#P=3G]p$0\Zearjr(#j':t6ei1<0GBO<Yt6N%'lW3Jol\3B9>
+%XItS1R:WECl=)jL(oJ-?8F7d>8]f]\=dQC#k7A9RfoP6gT9Cq?rdO9<Sam+l4?Ap*$r0eBGS:jWXPdURA&CO)I8+p/1n5`s20(p$
+%UT[h\8M\ddO8$^(Q@&+7qON+(LWeqM,gB/AQXr[hjSgcQUE]]-1c0+49Td'4IoP>1K91%^IXpU<QWR+=!\G3?.)&l["j8:V=kfn2
+%(7]8?)+#Z+,`f$N8g0>WpX(LG.S];IBG:,?;j/eeZsJVb_2A2ClhR=qMYNlDBUf^lf6d/h'\/i*3e"b1(gQ#PYOXl2a&dXAVn.<#
+%J/QJUIQYR#5L]ZFK70d)@=s9_A+9];j8A:=YF%\Yn--=<$@#'[Q"3k.qrBppEU4BJ0)E&_,P at 3T5)Q2uLdK[J?u at gfklFTbe>gc%
+%)Do#34/5Nd&G\fKpu\bQ$]#n5?Q$7Jobk1\+gYdV)UM11%5ca,$iD_r$Lur3Derha?siG;let.6O7S6SfSe,\/adrFkU60LK:n,J
+%PWi`OUaC'>g'VbIGNJE4?Q+9o:r9`e5bK<jTQ)I+J#M,GQ0jA'0[s[EjUIc*HX^.Y,Wh at 7H@&%>o76`hW8D_@=o@@1KTOEnI[e:Y
+%a(fa at +oo$;JMcP<:D9%o`Gd?_0l3OP$]N_(8G%,8.ti6IH=P,JfS$tnd`iU&`EQrfk[DpIOkV"l-T>5cB\5m8OZTnE at DXsMoRL`)
+%"ENdVE'cupj_Dlq]"<.4R*02Z%a,E$9Nd7*\@o'`](Lg\V6A0fbDst1'd_U70Z/ceMk6SqJAG8L\n#,m<WF(0nSBksCVc'_WFD-P
+%;4#5XmabdA$Q)rTd5/YMeUgn4L%6^8WuA?ldFngYnDWJ0ZtNYtR925,?IGs4W&HX2 at VUM:NZ-LCR=/,fE<`@FFH#0&>7AqOh&F2W
+%oE<ILqY$#ej_#Yc5KS"oSSDRl)k/,<X+5P(_CUd\2igb/(3d,]#`fu at 9&Y[`G!QZ]H.)\c%eKOfa*BON/sr2U`:M:Z8(0,..LLg)
+%OBMK:7PM-=F^nT<ZJT!Z>j.-Ps2+#kYLSd:97NOud3mTYXTk7cdEX8ES_0SANbu+1pcd*.Zk<$fKNSMkYg*.i6)3sT^%OCkm&[ZB
+%E>C#u$R\- at oX:@24-c+DKqkK#D-act$?3<a5B_ at m4H43J6@YPGDp*;+V=c:(_c,LS.<,`a/VFeX\i,2]B&==X]uD7tj:e`Y?jg!<
+%WnU!B"LVsk[^3up;^*0V.5)SK.ij?%^;_A3nlu$u<`-E\Q`C5uHKAYg+s at uqVHVslV,IpINd,!'U*<&[T:,`D/jkh*&1?)YI(b3p
+%#`!U*E<[(cNgR!a]]^.T0+!hN*Bh[h55lIG9Eu[^+Bsu1b3P^4OHUeMG3uE!Qptn#(rh9"N%+:R2Y`Xqg*RrAq?7I,OIDEfBb[^E
+%*LO/kac7+QKAl)oo[=_o*"q+`UOqkjQe1G0#+2N',M90gC8oX6]fef2Ml#JUHoiC^YfdXK4M1TS&5h"RV*:k)/#`]O_BR=$^?%DM
+%nq/^r;O"r+S>MY;3s*Nh.4o:%4-]+h3J4L2j3PosmW&RR%P3uob\sHPm-/M5atcEC-"5>p,u0+o'<\(_Z=k).NDk;AU[_87m#8&O
+%i#jZt9U:>c-A3UKlm(l@@`0OgCM)R3;hglQ.IKRL)%5$to3&3-9oD3D/&XV8PSUR'R]TTRCKmEVW4RHR\fYCgh#^NmS<CDHkO<T%
+%`0?k#l8oTkm&VX?[]Y&H&*9I;gV#",H^`5J9/i85HZU?oSAIqZHT*aCk('qVA;)%fs3"qGq(ceO_2L:3$(qY2"aYaNL(,^<B at pu9
+%;_*)nC+/EW%P!B>RN`9J3BjM2%$q5K\DGKS[&7JNFCK3b=Y+XtSJ^Yu/8AA[l%WUBY/qQU2W9cXkS+pVY<^;#alu4LV2gOk55;O\
+%eQf3[f,F6 at kLmCO=crjjaUG1QH.]2!5&tHF:&9"Ef:<=D]0uHnFm#m/Gc4bF/UT2"0CjNg1WA+YG,qRC8l]o?87'Pah&4tBT;en%
+%k+ at O``=,P>1l]R_[K^.<3q79e]i at iA@,BZWLMZI?LTG>J)B1$aYoXk5$)[[N1-!#2&&'9Q!X<0GfU-Uk=KLDGDSIg$p:eu&m<PtH
+%kgIe3K;]br^CTAnl/D7KYjh"eW)g-G>I`h^j\tuc`uDK)Pm/;cNsrg)Pj*"`!7^Y\T!L9F,"6DZW;8.=Q at Ho<1W>LiMVXk^0R'W<
+%bRSRMM7,$@RS,d0B'aZ:b1LJJ8Hb%Wdc>>FI;nkMQp"dUZ)a*6h!Dd&AepCB%sh9Wpj0q\F,%NL&c4&+8hME"N?%KPSB0\T43+&]
+%I"k!?EUoJh\"E!5[+5,5M^[/?7#$jnPlcAh-:@jL(ZRJ$rMtTaZd5'V%"T!(mS*+S*]M&@.@)/l1MH*NIZ5CD^+FFbqe0C[>S#s_
+%\>L[$SOrf2S)8M67Geo6HWiTZ5 at Ph$KP%;[LUN9<#K#qE38td>n at -];M?PrVI[o6N[LSd)`#R[IVFR"'k+#28Z(hIhYDf#lNhfke
+%1cp%H.*SZ_[$XL_9,1;2s0?IEJ44 at +M=9_FqoE!cE(<MraHoda43\Tg8#pI.P;pR9rnc9nN2/X^;Ds27/$mOcc^fk(k\W?#E^oA0
+%?mtljbH\l^L at 76edtN3_*VEgHSo&]/*/n]!R@=sQCJ%bo\ZSW?&jPe at 8M$%2Fr(j)9434S@?o=!/&#NPr1]ij6Z1fJE+e^-&BgX*
+%QG<+.%e\8jF:6etg9PKo<&?jl"u#$C\hFLZ,(4;$T`!H9=SjtQrB8`S5[NqL(S;=ng^B['^b-iJSTEe\"0Qlf)WG-=R9HPY\!&*l
+%7!rZ:"]`V"NmF,sjq at l=e,[m1$8rH7rpXS[WUG3h,Nis?dlrb5R&iE,$$L()(sY!MS2R-aNbb=5B-kt<4KY.f1mO(t%j(,DE)2Op
+%TXL]0n&NNuMWib)dLYTZW`fEAWKt%j$S**`V*@2OJ at QO+Wk:_nCA`Xa%dkagU^^8?dP@]\nm%0SFK)hB;#SSUPs=*CQ3BV$8;fQN
+%1^,*%>)PR8mkt/r74(^fdBKRSGZ,;Nh8K?u^DN=!ge"qa!-<fT.bI63c<t[j\Lk;4mZ4l17'UfhB at tR-R/\j=,jDdZp"W5g\p9>]
+%X4N/_OG[MYBBM/l1K.<<`aDrpbfmb=RfSF%3G=g!M6=18$#%$&CRZ:eDP,=Ue2e4\gTG)bp0KZKZ&A;1q1Y6FXFOTXa.Z_+F$H3o
+%D6FF'?`F[;baiKc_C3;aRfM?T]IR`]9kW:G]';oaGjFi(3.(X.SiUKTfGh]%@SuZ![fnr>UV3*WeoT+c_:T#&V&<DJFXSQW%"u#`
+%hF7:VA6-#?\6_n.!o$r:4t\Ao9*Hke#KBXM(k1UEcXDY(Fikmf"^^WaW1;@8SK^YV*OfD(E;LHkXsZ"cj(TASV3&Hg9PsU5rV5JF
+%YV7:V*Ej4K)t.2e#;ao5a#+n=b,VVI=iuRmM+;P.*.;Ue5.u:R6 at 5N%G?ggPe5XJM/]]<"-20")LHHOk%HOV--$dReo*ak*(jUSb
+%"e7n*NLE=/;'"n1=j]i$GOi#Ud<VQ,KFD>"DQKa at 0sK?@4]p266hUG'Y0lN>rA9Ya5`b/,Lsga36QV at FEJ0H4/h'#?6UglO:0rb6
+%?0^$%pt-n), at 2C.qF&H.HotG2F[R"6"Y-g<o\<5q><=4.!aUik;])k^:?@](]6L<3WWs20<o(0*-p8].^Zh!IA+D`KP;"2/SDM4W
+%,.%K*P[cQ)7QhRVc=gT9P0!X5%71_Ai(>h)-QjnRA3DX*eXPOK0.MEi4GPCpWY'kdlX[i].HaI2if7joEMkH0WfZNT9d%4<mh)o\
+%7q at Cmd(1SXeWP&s)i=i6M$9TZNt`Cu]uL`Z[ZtQ*M$!)V?NAGdRoqd;3s_*D3Q$1oC51G%7A]Y1COCG+\:]5T8e]fGEYoD%g#[GP
+%;4P\Iip;Asm[*hYZDWbS5Vg;Fks"8_+TqCDbn+%ANJ5ZA5jS@?OD at Gp:emM-3;7'p_A%""9r=l?Vf3mYa*'qn[9G at MDe&Z,hs&_C
+%dWYAQMP6(Z<m35'Ge7,r"8A"p[;el[p2WuH[Z)[hcb=ooBN^42`]eOjN?e@?9o1WDID4M0jtEJcBB&pdP'g8T?=kdePQeT\`hq!=
+%/3g\3JH5SsnqUC^Z*TtS+^/42,De7W\uS*X#_$S,>B>O'BYkIEUW71HCW8-V_aPm_inOcRMDEgAAaI=DQK'nUj[0MTIr*%+ZM8pp
+%SI<u4kquP\>"m!BlKeB@)V_fZeBR`@aMG?d2EZW$/uWhKb3K`WTb/1lGodacHBH^Y<4;%m'bPi.[A+\a*9^$-9#%mNAH'aKI,I`q
+%.65e=4MDRHgV'0$ag:>k3gA<Z"0n^-Z^?MRZ^gS[%J0]_`!^AAhK^Ml>Kqr?gbr]/G'i)#1pHlkOaJnj$bRFW8sbgX\40)_2)$5$
+%jh!//?%;2\JjW+u?6)#U0;doZ^NNdGY`a;TV!;IP0q'l@)M>EU3eol#JYL$ud?PFQOstFr/K5r:6,u$agU*jDbt3Y>+Hn#9(1uTP
+%g;osN2VT[OUh>DH<"2YqE55W/WA`AQ&;+AbQ\A at Bbi=`2d\U.mW97%,.%p:1N!9CdEaD at H>Wm8hUfCV5DC3:^^EdGka.gJoZYN0J
+%8n!@\-K[)fAToV-N=f3>bL!VOASIR?\9\X0R%aVL$V,GQm+3FRHL*K#n%-;DGoHj,`iWBDKaF"/4pdo=6aJek9[$7uiTQQsjcmQ)
+%,W4XP;P[XeR(D6lCiL^T,n^`8%\M1)VR#4<qf-nt^Y7q7+I2MsQQo!RqbAs6;)2tX[$J3!g<:<_fupMa\<>!2^=VV/rRB!S`GR;X
+%/`=e^%_BCnKki\&,C2*@0P)K7_Uaps,OKWTF&r*7mRA^^ZI0VRp0rPC'R+jO#Y-pePq+q(B<'Y2<Fp'==_t]RE'i[BLS::&DL2Y[
+%%L>F&<k7<`B-,5Neo%.I8Bsf]5uEmFkSOi3f;O#]HKkSQf!bt"Cm at 1[L^NQ5&%Y202uucaqo!-'2sAf*REI(LCTpW\]O(1*Og/]1
+%EZ"J(XIW>-bNt.,lm1#ddp!8g]1'kKcDhpcqH3T"'lNKTJ!gE!QHqmonB`p&EGEu=V6fo;7\53SOfI79M?inO.T>HIKYF^OV_F.U
+%fr1NIr,Bt(?]=_s>r8t&hFcrjh,"TK+kDT.0CUb]B57XjqY[4Yc])Gq8K5a!1llq[5bpUOmW"hV],\[!_A;8!VYi[NpM]G*$mns^
+%ioKi$SfI'&PheFA5es[A5`L&?CO'\c"*6.F<HrgT4+9Ia>Js^=0FK@(&OjGbfYA=O1kiTCb_aL+pT_"AjWSU,)XX2#_jGF,_t-\-
+%3Fmt_JW at OQ7kXl`ltVGt#a5-7h,$88ku(CX(2Q_TFj;cE&>Ge'00Gu<7;*6HB!pRmTpYPpS?SDI7)o>-!p>;o3hF5prceoq1M3?l
+%F2<1hh&/Hof2^<Hm4'h)5Sk?,4"lh<7[)+K^/M$Z&)N0u,WoO#e3L!b,<H,^<ZKsiJd_op+C8sTe?`hu7G0mmC%bf"\n>!pAYuZV
+%Yid[Xhs1[ij<?=B(4o4Dl)pI7KW3[f1[<CdcrjNFlp<sd:?M/;3D=hQZFNKQLF>gICLjR]*.k(LEY)*uIL=I6=.+@\E'48:apip!
+%GrScRfV%6=T,OCkA69'Nej at W]g3'%W6sFLLVmTCHB_#O]B5=F[>=kbhCV.!^n"_BG at k/P1?i;ZhDX5]7!i[qnqrn`-h%@>EUN/fg
+%DEhRijJ#;9Y,<#=;P"R34nR=+l`HOr_#7P#oferskjU.e,^9PoKr53oc6UTN'P!%n3C>cuHJ!I!3F[@hP>96EPur2Yi.!YFnB:oS
+%OmmO(bBEgUFAUK(>%g7/P&KSK\G%tGe11mAG=54Y.9j/4+h#,]7hh+--o]`RfoMc#+G-S8*jS]r6IbbCs89LN`e)dB)q3k:r^(h"
+%6FbO/UsdBl!sQQ$V9rqK^)g%f8f;R!['NW,9)*7pCL+OQq)j_j at oi>0Q1:sX'l,^CV*)Pt]9!*?XL<-9KDR*Dq.Bp%>2>n*M2H=B
+%doY%ph<4=6#;"Mf>L3<A^.&;lSDX[Zb99\0.M*g%RTSO8^GQZ*^%M8!khm.0EQAUn+c`dV$&mo)mMn]u&EW$aVOBK"[shm3O"B;`
+%/YEgJQ[h-ZQW9tH#<uW!/cM@'iKN,]+2hJ_g:^i8qsTp`B=kbZU'^o22n&E%oO&YjYS/Y6=@0Zg1NLbo_Vfj]cP6HmRL:k^<AY5X
+%_7mAU\e\]WGG'\o82R(WZtqWhX9I3h8E!RaJ\q5>C.;"Ah"OG(($;b^,[OX3Oa;IEjk.6O(N!PB&l[Q(+n<(%jJQTH_1>VIP<J[\
+%*[=G2!np$FA6J;3Rs`uEA#M0&WtDYk@)gqH`M<lE.PmX2. at MP*f4g],"<EU,-d`/1d"Fk'a=ScE>=M>^?!=?Oi@>fcm6c*b(NoFg
+%[XMQ><6Ao+iV4&D0=jH"+cH10(:D%i!oXV3T>@!$(gIk4%1dkl,<s\k>jjn,?0)06f..u4iruR;10JZ_-26Nnh`ReQ5d at N6chdR:
+%H/JWk9t7)*mW2KjVs!1R.U7gXeene,Ne55Cq]"%k%H#Qhio^uCofs4/g[4_[\36Qgl at K?"A$]A3C_iPZ'["Cp+o2BoKRS`Of7IWB
+%lKNX(U3GCA5!%8i!n(J&Ne#RH!VKJ<G[nVIoBB`l^VM'RW\B$M8bT*CWuD,6#FkrX?M<8`HR=/bWqOPZPQ[4l38*B6.Xn_i$($k6
+%R6@!)@BI-Ikj`.+LM$>+*kS'O[2PLejfGk).!Eli>ud%6r!FsU;'i!c at Z#I#AZa2ko3pP=J7L&q+)cP)EuE<3$U=C0omdTm']GE>
+%\u8V,q1E6a12FSum>lQP;7qdH0N;$6M7fU@^uEq#Lo9?uO4PUL$q"V%3;k:j<DUZnLVHYlRe^monZFa0!p$_:(3hdhZk5&o]^P3R
+%KYp!aK1m&R at p(+C\$#_c6,D.%0/##?TO8e at 8<-54M-BcjM*E>gWiOA at AT&#ks2aY,97U`P:tt^cS-#!4$fTBD.Ji1`10>1Oqc3e&
+%3`Q$s3q^(jiX_9*7-E-WJ-[n!?U?bl&s,&dlQ&4HfT=#h[LPfe.4CaY7M1cD,W";N5#u2*Uc8pNr*1j"4Fhd0TZgZ.Uia&iDrj/g
+%W!L,oT9?PMaq-g6L#R[!P]s\8>Ml1,-/c-=eLn_[c)S>9fcX%\Of&]"\TI66LB8:^?18F8j<,tWLhN%H]`"K[Wtb_*BoM3_YUf/g
+%85VIEU:LpjMC)TFL=YDI?=ic&(>aKo\l)>ufK<^afHm5,`FB(6i#ib8G:lMlR"@7 at X`SJA<l3#ai[Pn0>\(p%6Em)'LQd$P\EYq>
+%p=;nGC'5;H61NjX?>9OJnuD"H7+o'l%O3'8XLEB4_,^Y4Y$=ZfF0(8\H)$nC[e*d_Z5'.Ha<Ce("&=Zsa-+e:IjrHXn%m%nVmoTb
+%Iku^:b*/+PH7aJi*Re=;T;*T]%KQ;k2A#NDX_%OW$XMB!S[kg$S!^h'g#ds%`h2M.NZa)#PJhSes1HL0,=CIAF)'hVn[TBEo(ns$
+%b=V%?Zk,?lQ+*%+KD_=2i]T(/#faA/'+%4A_5BW`=]*K"=lo?%5@"AD.E^RTZ4(,+"0aLP\Oh627k"[=IHH:UO54+D8%_@:6#`.u
+%KlI"fQcmK#S\/9K8XG'pdGu]p&B!@?LV,O0H&p8BQ7<Maj3JN$l3jg^0/BT8i85L?<]fgFr]KuO(D?([:8g)Opl*B1,fEs56T+H0
+%W at RL$[j_>n"2]1?KkecO47Ukl*;ttI>Sf-Bh2DO368EJcFRTL'Yk%PMBS>$3lHh31RJ'*c9DmH45TuZC?%!\SDq)bLYZb9AYT4N@
+%&NX#$r=Ru)!j6GJIpVlIF!;MR5?J8RY%@^Blp>?mfg>C at TH)Wh!,.f/o1C2k>U2P at r<FCkZ-aOrmd<llh(*IW;YNFIC?!K/`Et.V
+%V=]Za<0IdHibq/H4W:XlNJ2>97.G5.c at S3V;\]u<BGC/C]D0+h4LK-M&gY4#)0E>kIPIgdrT+6Wji`0p=o%[7Q[.X[ibCF1Xps$9
+%\N+/2ZGPQmDGKrL6jm!oSmHmNR2@"R/.i0:"?.T1N<]4^j^gnenFbg0J+odBb<Tf`[u`-u(,XEsoTk4P4%N<;^.alUkB\irL^dm.
+%#g at lbik3f9ME;7%!5,)-+(>["6bJu3lcC;neniE45Cg8n6Xq`BB!UAg`NY<GlZGD^5n`)>r3I^`LG0nk0'eF+_]JO6T6nidpZOBV
+%'@<^";ui1+r at _SLW](2dbsTMe#2H;XhKlLSiT&lm.*0s>JaGj(d=p&YNecZ0-<ft+KPMqG4VlVLmo3id6?4F=BGnYj[bHXo.4AU<
+%$,d]/A-7Pe;4n%JR@$\^'^*\83U"TrF0IoCBP:[6`7?$.D0DbJ_:WNR9nb)oB,>lKK7E,STPU=4a2Y<G669TK3:-n,(2&0j/e"t%
+%gX-]L4r2E=[Ef;LgGFsMTdIU/a67<BK0J]3_-n,A3a],D1QYQ:VOXQGjY#2,i+dCC!se=(Ie)03_)J-=M)FdSA![_h5B1,:**j@%
+%jFuDSFa?-Z387*Abm?YD>[!\f7bI-h1*Q!?f@)Y9bh,p>bj,[2U6/fk_.4)i_bGSofq0?c4nd=sjgM5(/8;HqZc/<`Q0\aiiU37b
+%ak[KH$]D+JQ@\X at V#C2n$=#s]H`>it04hpn^WA7<J'9N%)VfWoCG5CSAZV]?c,=EEh^!K>RC6d6k:Wr+9mC at 6o9U!KCuAX%F&9(O
+%HU[`kHGs5fZQEn#O#d at 9p#CTA7h[LSr9Z(rj'XTt.a&NVl:uhgHcUk8Z>)]6RuDZ.Q7Ws8`I'`X?6k3;^\>6&U!JA,G-lM5KVmG7
+%fs6$AU<kKXa(b>Ddl5db6`6:.In<n9ESS-0Nn@/)C\L'M`G"=6DC9I8-bLQSSWm:CSZI(n?U$dLo%(r:m\O(IGe\4T6n^-Xl!c;/
+%N[*c5. at 3+5_WPtj^V6'3G9%LbhT`pjH2kO)e, at 5Qs5GmX]RtLeID%kbGjmrdhfiLH4LOd]-T#]Edl<6]iWpD5/sK+*a$)%YId6.1
+%SNg7+)mpAtd>i5Mki?=E.^Cb(;4$Be<iuMPfUOn7o$4ue3,8PthrOik"Ne:oW:1RIaOQbCbZ]VSF<&\[L$'SL[&/fXCS=te`%j6W
+%-!,^Hq0m!jP+T=$#k2tAXea\sr95+[4&]4/>6i7D3cKS]J$0=\fZl/+pqA/Ya`R6uNX[e&(=BV-qo>X/E+*AqgQ#aQgs)nUFU6/_
+%lYRI2nA;Pl62K*JVrVT'gXZ";\@?("hadDkG65?>bG_>AHq?M6cDMh68m[B9"EYn**pnA87_+W+BCeJ"D#*=*rRs^8f!SjJp)1TY
+%ldhKp<h9ftq:i(&g%smmCP84,]nU at 0pQ(I5s3ua04 at X[9;9r>)P^L0Z[jl>s+Dc+0#e_qjrQ at P^16A]e:@am9qXiX"?TL`F at .hU=
+%pNK^Qnq?:6Ie#IQL\>3GckZIuDZI\+Hda*qgY$Lmn%u878BV+'k:V3T^;`;0k4:3Lq";s[45\01c7e%2HD$VV6bDcGaSR6$E.Ej.
+%_C,L]dYZ#)9.td%:tt[8;nr>.r'MF#!5ZjL:S'iG-*]c7?9DN4i2[fE>,^M(=j-;J[nYNEP'7-DhG-J]kQ$jZnKkQjk>#YqO@[(G
+%Y>[S&4i\\MGmR-RqiW?%6.QWI=pOVHfK_auPKOuB`F[5u_7#OF_U at P:oe^tWCPuV)%D$dMFo2kU0`8HUY$[B)--PfOdD_%sj96;c
+%FOsgE0!r"`mBf$3bDrsq7D.Gd_&FrW2&`Umie[9AVM[)F5+UR(2RHF#(g'O[kqcQ-87gX,QGMN]i.UH*7i&-YKJRg-;!u2/3AE/Y
+%]Z6q0oI%7sE$\V:e[sbT-ZAb"3!<LP64Zau$lKFu(!`!:rUJJ0TD[+sN9kQ?7qN&RfF+"bcnL:N<^@goFiG/@SiO%?'eq>D<(Qo8
+%8ZJ>:huAn"r&<O1TbK#D-QN/=:d8TJqJ!Y)#kdZ)p5Yf]EVnCs0EPu/mpcn-A6"%\`:F[&>>IHmmIQh9J+5C!4%f'e8-U*71*94Z
+%3U`%9Qffi:4o^[*Gt=gt%Eba'\&?U:H$:)=s1#Oj*s9j<^K_,?mFSO-*3;nhl3RD$3f8[l^":qDHBgEm]T41r`S5%pp+_L5.bPh,
+%1/)G;RX$Eh"X`a*0U<"sDe1>O2>p!!%.;_F@?hg]J.3 at a%5'n7H<n%@I_D'9X73173A3g*V]Njl9<HOB4[-XVr)[*8qfa^Jc9ohO
+%3(;gJ3g>XJNL1;?NA1-+bJ/?Q^$;&+_'oXQQ]L at T3-F%;Dr62=ApHcIheN9ukjct^a:G[te6]?K9k.+;DaV;4lk^1\R)LrK.;"X7
+%%mq"SZgqZ=q2#qpl"boXMnp\UH9(Uj3$\/,Ed5"3H7:k0PC2U,LIQj=oA!#O9Z.gSJA->d-SiSFma^V7Ak^2g5(j6)Msha6%1jIt
+%j?)+%k#uIq9>-ff\3T8(!5b?#V&,[l$P#hu^ZHER&C0R at _NR+Rq!Hd<$JC#Vm9Pc6J(MMTB<@DD[[G<"Oomsp*E1l8-Q$@,6,Y.*
+%'@\5-jG:@LI4TMga$WY98jJg?<3I4G?+^/YXXu1@^R2lbe31 at r)K@#+f_4,5]ca@)K&B\GQebtkfHFpK.gt_#Wg0ZfUd\YiS0)(*
+%[>,_hnaI>o_Oe_3i&XZ/f;0Od8`LR at 8,uGK_G""&$*T66(rl2q"r4a<"-.E`o$Xr7*/\N]HersIbE?>pGH6ns$ir#;=bBrF[F>jV
+%5kFl>^/nXX[]-Yf*uf_#d*<Yc1 at WqfGI%D%N`-&8cj!C\\7Pr`X,g25\&PpF4`32j7I_-tBFOI"*0no(I,43*6KD:C=kE$F"_$Kb
+%Gi9LAUUqmj^d(_G#npA#,qRJi9o^6XbnPV&UG>6/euU9t2PHC7@,j,qB)@q:1;km*U["+V+2\/&!.G&#4YLuM((E#_d]P+R9]>Qg
+%or55RL3&4$hp.ign8e&[S)/s%NlHK\,]qkkg:YK<DF%ctRqsi&T"NaFkBV]TX)7D%K*hc<kam[Y#r.&;*_2OJ$:Wu_OeYeLe0SNt
+%MqZ?!\j+`\KOOT&J!on at d$=!u&e4KZh*`Ru>_gd5Rp)BPSf><_9[Jt)DXdob'gCs;/#\O'*FO,>"Wqroqd$ee2s%1QX[q8<(CWh`
+%Z+GJ7Yr1bJZ*@JP<pX>XD,gT3R*_"O4XWu,2PKq39=rH#*O,Z1Lo;5267;X66A;a,=C[\.?1'6O.]pQtkI=7<Mp*r6Gi_!H$-09^
+%lT?VeA*D!=>=?Pb&E`d]k-mAj0INc2g9!fp,4AQ!MP^WoqREO23IQ?k&t3TgFcaPq>GWdP>XACmp-M8I:k5,"i8f%O)DpO_<iVq)
+%g[lXN+Nq[hWJ/Ca+CCcL;<@ae%fKj`$ag_>U+#2Naj!Y`oU!rYer3R.o<r3N[dZ;@d,jm[/BaU/qKP_[[0j$qHOkS58NC6.[dGS<
+%b-N(l'J:B]T8H+Y$g49P-KBn_a%N+#l1!EI`LIiYQV5L2AB5Vqr/fUn"KMCsk4Q:A.]DuE2CC=ON>raeQ:E8Q2;_4.IP%e<aGU(m
+%Da"t`=XSm'$n6f4Y8[[HEmIehf#i''R[#qEcf(Mag9Km#Qk8^Q3VFX at D>0hh:"EmBo;43hCu//$,T%X"qicCY"V2T#S!VLLjX[mK
+%>dWM_2eZg51eY9'=MV@*;ST?ce7@#VGTZ.Am6=K:,.8U9T1XPP;'CS%7&r0$#CR>Lj>bFEP:)-T`'7!_)E1>Z7]YYZWVpAo6rn'+
+%qA:?986%6j9aE-Da!lKqm-a((kqF#'TT(-rPaal*o]4-*\]X1sBEmR8*k;rlXj]odg1;5X_V-%tB1a/dJu++i9La2rZ_D at cWn$!\
+%bXT=\K%r44\R%taKC(4 at 4]5d(b-7CUVc6%9QukTM8gLU0L4:.F["uJcr"rEoXI1DEfnliYJ#U?OY8>^d>^u(H&LRoA_Rt7l#C"Jc
+%n_7WW]\`TJqc;k3juj=RUn^`&GV\a[DR!K^j\ZNnNblaI at l`^r+4kRA'jbKdIp=q0"-5>$/(9pR[;JWsEbB`UF#g)'X5T"*Zg/<9
+%jLfFEOSF:j!lIC":VadDH%_6D7NCU?=dS.TH'nh[$%,A%Q<G=J80!*!J/T'Oh!#5d<1 at Qh8c7;6d;hPRc=&VHs6]dF/7ir>.OW-p
+%OdgiC9-!>CN8'A\:/3aX_t3-5LF#fo[.(mO`a=Y%/0AR#e/e)rQ\'YM\Q.UffI]?@572lKYsm=_>bc;ej0>+R@<%'JCb&kPNr(^'
+%s2BsNZ_b6MrUk%65l>mDG7ahh[ITlYc2?SnL;e?b]l6%I"g7s/a`m]Y/EU6GimkO(F<b&FrNi8XZ!4/U at pHT//m=gTO7_FS#,jW?
+%$YRbB>o2FCb0p4m]4?RNG5:p#=22Xi"TJQZ>EYlC4 at SF^B-ncdIfJ`#oUcM]D?\4dID%./iFuUtoQCGnQ\MYj]0<ZT^"a>!it?S"
+%>8R9dbEmC;HM[:WcVY9$iFub1 at pOIh[]pFk43uN(\"Csh>8Mb]f%b#2=)Nt:[!(c/N2K?Smd#W[7=7I7g<%LjqVWPsPLiOGS>XOO
+%ELK+04WoqQp&EX9h)B*scE?N7'8b5.h!;R:n*PKM=$(p.=`7mDP>V>PXom><GFL5BD6s^DZhF^Yp#F1[h0'Ihqs^Z<nSA5t#KaQq
+%2s]]Vl`Gde=VeR?`@SY17b[2aEGllmo at 4^S.RtC)I at k6rfirpb>C>kibce2 at 0LS)&Y.G74l=s2!Egj^<M),3EDt7*g^YYPT7l`_*
+%im?'NYS,)R+C'k+-R*o-b]1p<*1?b>e<KA+e*.>6hLT$]@V-ll>.L<fIXarW']GD1M4prq`chjdG$`%c"??#!*)1UE`R94IKKpoI
+%O12_'6:Pk<i(G]k[D'?/Aj(L435n at 5\`VWdZ+#"l]dXtNYHcc5O5Tm\r5o.2>K('>Y)HCCC.G(r+F!5fTK at tCk'jNXIoi?\d<U$3
+%4$Uh+*)*mq9MIfC:taI<*:eB\Kj_90q#Fq-?ikh&1!stLonqV:A`Q4'_QIt)GSD$dpPFZ=+uldkMV#U=Mj$8!j[]W^X0-b*!>5HO
+%_hpK(cf6Jcrd`("3?Pm8:ro]Hla@;<HD,Id[@+edmXN:?/U?(Sf?\rSqN>PRNSg\+&gM\1X?3lJ5G(1?o<"7Q8;8+Q?]mJYp*G@/
+%%L(iEB:#Q:T_,Ro-B<uEVi@\j_=RKWX\ouFD#%meK,R'HVL(?ddJF>BN..[:?1m9@'o\5:o",mA.XXf2L4+GI_:Aj9281$MaVU3V
+%V$J?Qb92NaCg<#Dfc-];X^5Ue3m4p&:LVj\E>n8:ne$Bd-7b![9o-o:nCAfpC at nC-0%4s.;f/,5hD`<Yg)a<jI9n;ko'MRs7_=-,
+%D^#!uQ?cAif1B(A8$lpeij6+44Yg];@u>EV at SpLGT7rST-Mgjd?:r,se5<ELKt<h\?Yi_E:cDa!qCfs3RN/,t+Kp]3Xmp!=]S(@G
+%ESUU<<Yi;(qpE:JkPjU>[^rTr,3RG7`Oga5#?u[./dm.ahBNrWk;UZ`C9q.,[=7j#bih7JH?oI8WPn(qO^EK/4PU7sf*dOt?gi1B
+%j_oo1 at W2-SY:+.tC,j@#h_i5VLA)d;3213+gYBC<5LtljrKf?]5;7*<UqnZLb5:qJg at g>\l@%3)eLWrj>qEVZ;XTJ5U&o3As5K&C
+%)If&]54s:f5#.Z]$FqNr'ggA,[IbXbHS$k0-u&A&%40ofqtB?^d$mp:]n_`'/n8EfqU=WB\h)^DKBg+O`T8;k>$Qb1m#ZWSS:^LY
+%8j:DjfNJB-IQL:"V:C$@q:rRTlOV>^a/S+fo`/o6lh(!3 at W1AS#/\Fs83BZDk=bAk]H:Y)l-ds'IX]bkTDpl*^gZ%,_BsOACPo;"
+%s1A3_bb)Qm-*k_aOSP',=HdY>`VFQc?9cO,*r<ji>WSbT]A'24oM,gIS:2"JZTD7Al#+5Cqb'qfgIJ"eVgd`Lnni-YQtmf;PU=+]
+%nBmR6%U1g]f^c4@$rrIJZ+*m>_3`)qK92%#o]/8b0t:h+`!kX<6g3kT0!)*D.XHaM/0>AD`iZpbppNV'WPN8ZRu&i79EQrO#@\ii
+%E:6e`V%"/X(=ccSRT`PRA0'=U]?NV&h:6Q6XX3!'beM0`d%inO8ZXS=f1iL\eS$CJq1eEXNC^]p&r?(=*_PS0cJgL#178BNZ.Dak
+%7JgU$a7H]2,pR3KOep+u_qpk?f6(>4U at 4,hJ&$seg_#nBc8i6(,XJ9<^.f,8E`Ka3`XN(SJekot6Hqg)lIXqkes(Fa&;L63D3DpL
+%>L[,RgmKZKf0&Q2Zc!ZT1J(DJ:scHb9Y%as3$WP#jJ]e_/2;1$0f%*,[Q2LV21^4DI.^DHj=GFqMF"pQqn;bo1E+!g/b<p6glRJG
+%P^c":Lr!midqVaa5PRq]2!K+d#D;L:KJoiNK8oO%%g#H)I.l63o(suth&]S7]2Z]Z2=:bgqiOErLXNiCM.Q2*/MN4?<GMkTZeP^+
+%e%Bou"n2EooU#7!YD?@HhC-$gKJM>&*uHJO>-q.'j*lmoor""9:?/Ma:'K<qL1J&c(0"7)KKmso2W9B^.eF=C4:0eMM<rXnbfpML
+%H7J0nB+&XQeS#k!9?mc at J\Gru*Ak%=d7gsc"1K:&7>p.-eoW>7^K]KP+O)lVGg"O<8m=G3DV>MqV?jCQB`P>:R<aCQlH\$Y[Jc:^
+%[Y1b']PeL0/efMS_R/&!C+e8X[6ZZ"3BQVS`Ao[V>k0)[#U*u=#F')1Q##Q/9UhbXT[RU6Qgjum!I7]?6FnJ'>>UWec+u0E>R)tI
+%DVR3TH-CM2dPPVNb"W6,]M%%6mC`TJ3dmp]2\7:7S+cHJEcc4eYk3.*e)2Q>Mo:rS_m?A0BF=jU*/5oHO;m+H7<$=oc0Mn9:+uf$
+%Risa.2Rj0H]Y,N$k*"90`!6)VE7[A?Q0lUB+_@%1CS5 at P!.C/.8R24GJ<:e!;A3L)2iZAjFjYBHJNFC:,aWZ/KtICf6t?+i^oZA#
+%:n,]ED3ca?JP_`[>4!^G5\@#KM`R6J"Bj'')EVqK5h%_e7=*=b8C<!`2`A=*+mV-7IQcIeL3jN+_Qe9m-"j<lo+GUB+^*,kS=VU:
+%Dn.@<M?6CC;]aqNdh_LWN;=P)j1)NHFd.AH5bU"72AZP\IFMRqeq47tYl\VbMU*k+8S]PC at q(HuV$dp0I;hl`*F#N8,]@I\'3dFn
+%E8O*1^D at W*LNXLd6a8uD#um0+dS6^k":HqT,>3g(pV1r(,.Y&.IVq[`TX7N:n#de7aVn;[K4MeGjN/Y\8*\h4(o=E.QVYI1J?Da^
+%A?mO6Fs,2$9igXB6U8J.j\AE'_kJ+<8oGS'GTh`RP3e(m3;OgaC?*>_PQ&?7\HH+=AG%-^n1f/*4>fCcp3:qGrr,]YDC)'q91:gl
+%9:OV79q_o*=itWlm`A\BQs('n;irF.$GXFsWeR=D9jXetR*?2)s!BNY?%Pk`/1)FE5[:4qa:,Q?Xk[*ApT%f'!7!bJ]Pe^\=g-uZ
+%*Y$n$5?Aa1<t<>(rJ[/qb2"I6o?blsOo+-9<"eYus+RnjNSLAbH#<^.8ESdL:5\-=Nm]aOeR$&@1P]D`-D1Du!(rN%#&54lJr=Fq
+%L$omK9jSZ=>S(:9;+DsKKB=AE%$JG#b8eskSSi]2/l3%c&@CmY7ISq=4sbj5AqNb,(VL5b1U?)BYSi3uV32PU?IoaGQN`.&ekk];
+%9.)2lE)&.j2-H9JAK>#X%KdV[<OGAkFrhO.M_^W`jZ,t4P*0%]B*!!D9(&J[26-V9k/32uJ%A11FlY/Y92Z"-WD9+'k?JqONDk-/
+%Q at _:Zhb7_%=KbfMeYr6]V`k.M=@"]aBsUOf="@LAnLZ[c`9qAg2<ee+gU`Aa]$=K#JlehY7eUSc>>$N_396g5p<f2r(c-)LYR:Yu
+%[97+'A'#i`'5P5,$)kQ<n&ia=&Hik\s#r7CApGGOgM"_BqS-TI6HS$?cTr=I=dMcn&<P+T,!HM?=G'A>=b''iIh(RM+SSB)&UMYD
+%_E_C[+sA4!^Ql>[,%+!QS`Qsc4;i=Q5u\(]p]V&adM(:k(>hM8cSbmB=VTu/>!K)&<C/\O-lk6tn8)n0$TgIr'@I6C0,umjT7[[I
+%5BJSZI?\6./u8jF?&U>?Ic78q=krtGius&)n[-gN(X[6-0^E^B[64(8X"9*]6nV!OGVCF='L'C%5+K&`QeHjtpJ1RN($o)khMp?N
+%"iYC+gG<6.^MOBjfT:oj=pi*&JJ"DE,fuk$$q>qf%<#CcSjV7Z]K:>rm2'F$QMiHW]R(t!?J`;33bD,eqhcoL*!1^l`(nK at A<E#(
+%E1YD3=(FTgqebbTeo?KY*a+"N1Z+(Ml[BD,*1T,YPYP*Zk<-ruXCtBqCIm#h1qBT23)O4X!B$WSR6at"l'e.f-\g(-+:<Fgl9Sn<
+%V!)6Y!>UJAbF2b;PB:3oH7oE^'\ZHY#r@&B'.G037fL!-K;CJfWZqdUOYLAd, at se.Oi!Q`d3KMKVf.d=_+Gf=:GBI='D3S;^V^H&
+%/?H9?(>"F&?ID<pqF2LDBn at I%P<-'$hi8X"F0A9=Vb$8l0!R^%YGE[i`6"t15o$*g\'a9.jRmQFBKO)i0cNH-LKO6"`P?%13uk>b
+%%18f-7Te%rOt at 3YYucTk0_#Y_[^i#H<!Blu!+hTif at 77Y61e[05AXajH`Er3n0I!<*c3I^RiI\Oq%Yd<-O:P_p-M2*D$nR"Z%s2t
+%^/A]0(We$sk>s/<9H7u-g'^*EPX&P[3UYlB>s`*k[<djj^+^VfK5@\NmZe6Y-f'35FqnRhO,-91EssK;Cg5+/U:p[EX-9E[IZ[3!
+%5#^T[=qmDO'!o^0XKl2m79d;pMgG]"=Dt8/G at _DWCgijA:V\IYV58#Z"*;j2`(cJu-`f/gb)48h*ZYj"^Nk[9anXN<p(>:[?sRVY
+%Wi;7t0A9g>=W,C$)O<'=@&mgBJakYbc&8*tFK/>PYZHA]DbLUM+doG:Tqtm=+>o.06=MNnM1 at p%@@(^UI\B_'lILd1Csg)<7BsD&
+%Q3UeU$3;NHbn-@@SjfbkNEQRlBhCFk0*j&W0(1()?g-s&a6oSkY4(gbm+uUH`rX%7]R8$&"1caNAh[usr.M/(ZpXs.LHJM9TkH$;
+%M]F4)-2V;8FHOGE%.q at _aBW)?-^McuPjO]WL;9ACQQ^@DTOBY*-eZaU%83!)MTYmWHY5-.4VVb_\L"`mi_>;G&S`)h&XrC$Z40]"
+%\fA]m0r[2\^,#&K37Y(O<\1k*:-Q(]S-KsR;iXrP.&$U=aeGI'g4/>EYc*e]6A$/6O[d3^_4;tr`jTL(TGK64`4.7tfIt-kf1+R-
+%T"q/2MEW.Yp).2n(7P.$b7<`B<'/cPPnK>iC=Vg3WT15edq+Fe\1/82g3032TNN4%$E"rROkJ77Z`734+51+kbV6:Rb/5Vo6Z.G%
+%jK2_#bp37kBR7uVZO)"'nAfk3j`6N$N")E?.*uU%n>DcFLg1^#r22Hl*mjiN(ZK4#_u$J%p/?Hm6?A\IC7s4o at 7Ue);(g5fnb3J<
+%)L_ed9.)n<@<#SI!\F$mq_r>^%I*of%$o+k_b=f3LMO:R(/tR`,^WFA.5J-&fPW#<4'Hl*R>;=]TYu(Cn0Wg_ILmuck\-mmep+Xc
+%U&ZJ76"5aENXB;33+AU_e2(;['g(aN+EbTTNuPEQNKQl#[u/g)X>`i.R;!a2OQ_u+MOjio9l*k[", at .(`2]ui%)*ng&R?R4QUHh0
+%#VhG.6qM at sPdLqb!ZpnD:gB`QdJpRECO<?T!RrjNj?Y.'Ic6Qd%E*rmWYCfKf*.3U;`LDZG=,)UXKFBos.^g)&Gq`L=XdS]Cb=uB
+%8B".#K=lqoMb9CRg@;,YN,q]$72s=/SQ]"'fI-&C^edZ<5,'b\F!R]6FG%2A:L.F at K#fCJ"BS#/(!\tu2\\/eb\De&oTF?scSYn:
+%eaEle;MM)V6<jP-.Dn'_JpKi\+?!=FOP^1`hma;(LQ;bg2*I)Wf_*=E5`21-S?*uZFkqhcO=^?fISQ^e]7fo#.QccXP`dNbZ5&ig
+%*Ou\Wd$H4OP*_11"$7&A^=:9L(W`K,B6Mt5Z_C9f8V\H?:*@I`#R;V8?DpLGA^Z,SB8alq@:^TCY2]j3U0$T"6HRY6eEjtC'Nc#V
+%cP3QpV$&:igS27h1Wup%`D]caVR<^+N+2W7SA;*Med)[rHQm-^=CcE"E\i3i_Mt8r:*&Sk.\$X8+IU@\,3pc\Qcr3%A7..'JnLhZ
+%is(dc1EDoSF`]D*J5Fq2-/"DhA?dE>7nuPt?B*^2&=e&\F;PGW8]Ct1S*ZoAI0&6]_$-0hhuDZSl]^4SnHZOn>hn36E;Se:Z]eJJ
+%TDrkUEc_-EE[raZ8pgclmM?Z2+(s2]%<NI9#n(]=`1`-PU?_<KQ3S^3nDYiQ-of=P-\[X_:DYC:I6GAY9^J9ATUUKM'o<#eN7sGK
+%aX'Aod]oKjZKKl5.e]X3D%fNq><3<84m&[p9E.mi#=F6K`t,(H$;UdQHZh9go*qWBT^PI"$0Dpg4R417(Ki=K+`lCTGpK'QZiV>o
+%d0t4)WA+l#lg1N;dL?I6QkbkkkeI/oZ\=VFe27KJ+fuCV&W$dI&?I`6L4Fp7@)S]Z5"%(r%H1fQ:=U+ZeYNsP13aB<'::90'k+&#
+%eG"pq;5R_iW<Gc\,S=L-11[$#!KenWJ4(r/@&K), at q?S*B?1__!rC*'DXO\rNX$8gGsPaRBV\bi8.o+&b$`OA=,E)p_BuaJ\:7s,
+%M'Isi!k`4oQkC[]QU,*7P39>O7O.5.Z#OQj$cT7SjsWdfR61T59,!tEgih$&if<W at L<M,VFsR)6r#mYl\$`uJb`O-Q%Im[#a@'=F
+%MQTEUkNH*el3)CP=L\jd;OOcl+ZqPfD^K(CMQP,sbds==!A2$)T+Rfr>X"WO at pWhm(2Hu_X:Xp".Z at uDV%T68><<KNo!(Ld(Q65a
+%d]*paO6CJMNP\1?Z_3>fp_;+JMTISAQ$_?'P)971#pF_5f0q0A)b8T?pIj!>1i]Z`qoCN(2:jJQpEGJa1i:@GJ<Gas+]?"ZpCtEa
+%Zp=cbD2-9C;%c]oIZ<@C3tS+J$6sm*iQt"$.e6FGIc-JTnmDSX#N:.NGY((*P'J15_.kj_,smHmiJ!7XBVE]!?-_ScG)8b]g\*Qf
+%P"cpoTSON=RU4]Qe9/<EPD?o!'/"JN*1K*a&I]Zs\P`'\5'DIOB!g12Z-\*Dhgmd<C&RBN>nX&<RUIV+K,YRIC-p8?Ld\CR/Dg\4
+%qI at t0%IoKq!KNkaRd_YYHal%m=8C[joIt*W:us3a6Va^=:FM`m9\jTRcCmiUP%e>B_*JG&JC)Wd*S#rjb;+$U&BX4mPoA#Si75Ii
+%42,JY3eO=G57CjTlA+EN#i1a;^$cBjpH*=T[J-g;T=Aa?pmlM9pice/Y4?7>cXrom;)/3&\d=.,8!_)kS+GD=TBAL*\i]]pMq]29
+%cJ%e8p^?e(GW+p\2]=./o1$QUV8iM+a\0sqKj?)pC"^(cW"kqdK.9H`$n(pOLGuX^19bO*NIf5aV.`'WCLiP?mn,QNb?cPf:"WlP
+%I4+%:3>ES\3]ft.M'4<-$>MtYMM2iHo#BBp/CK-&\MOhMF_:se:/-Af]lI&3hBFt]U4dFSXMp=c%$ac7FqC9I,4;7Y!qH*'Suem(
+%:HK,iGF5X#CNd:GOOWo\7=(@FW8fY__>SujLB6V__%m6t4'Z&bNoM&aW;bq0RR0<#QXWpQi0.`;"\K(1n'm')YFSD;,TJ&!Z7cNu
+%U(l*$mB]EqE:pS;<(V!RIrq@%Z2k>t_a$#&Do=FS9Vi'."il67nmt4o=iAS;1#CQ2MtWR\(k4q65fXLoHF/d#Q']YQ#^q\`'O=.*
+%ZLsI at Mo4s&T=DB`"0(*(!ECA[A]QFLAEFU^6dcf,?d*Tt0nN\,*W%`^;(3eZ:/$rkWoe4&1_JgWR7LY$b[a9ih=mp2(;B,l$5<Pf
+%2]9YD!J<P:P',"AF'1I2R'K3o*A4XFP2o4J--5p.Z@$/SV$J\B([i!ORRA`tIo:PJETCMDA#!EX.S<P%s.:!*+_FU#1#Ub6!ac%:
+%UnnN=Q(J_m1*U.UeA78QX(2e#3s2eN]fbOS(E*L-I@$f(#usLZn)WF)<OFfl\nYriK#`?7.,ohPCZOGd4F28CM?qV+Yd^Cbh_$='
+%^519Kod>0INnnLoTrKmQ*^WDj&9>U5k,;?B$k7"<>Ha;$9NXc6fnOX+3Q9I!Q2=_kBkGO/kQ21R![jaE(:jJfXW/!*)$K[\OFr;Z
+%![7-NSarPibNt0GLmJf&\0bZ,21#0t-.ba]SeJe:;<e:\']8k<%eOsP:.)aH=lRWjb88L9M"(?b^="b9j3BB/rTT(X'1N_+1^'q7
+%:"W8g@*<L.GD,2]"j'_lC'`R.<J[1a3^';fa;#:+1k;1=!E9d>=(XXh'EY"$94n&%5/sHhO<icoR#A(Id$A,XWn67\njR-PR#9Kl
+%"PDi9+IA3/lHm5;&oM?.)6'A?h7LZ-`C*$C3?c:Zl6)3IHETGH%[ZZ^fbV'q&R]Scm*,2O)dH?Gd02o5GN at n@<!$,1",2/UKVW$(
+%@+c=&abrk:Z.k<F;fQ8.JAk]k'tp7JI8<J'MYTqU;Yp]$rk`+R*bPs=DJb,i"KXpSP'5N%cq/RdJcZTUU;6O?7sInZ\<G3EFKZjN
+%*oJPa=!HmJreO&tUH6LM*8V*!#2t/BSi'?k-.[SK_L0H$fl%R=65Ot-92'AAPm.I;fO@?!fq/+.641gL,J5<Im7J4FLn`R7p2KS1
+%[2>PIPY=+H/`>0tMHr+"*8UiJ,'[SBgI!B2.Yu$d*#8sP=,-_o+M:ZcN*UCS,ndAYnS1qF?HjT,6#ra(Xt*&7`=^?7"9mu<$9UpL
+%J17^/g;96H<D!li.uNL2Wd/J+\O_#IJ2(!T&0<WR7+oK&*$H'0`pAlh)#2+);[I>m4dqqEGekUo#T&aOU4A^$C^6$]pUH90LdU_m
+%!lQZ(SMK^X!je5H at 5IC#)p8FA]GV<A,6bM)LTek<6BL(@.(3`V/+Vm3o+(SEiIthlI*J?d9ckRRg2$hrZOrSC?3.@&'kSil5!L9Z
+%p.`XTPG'*<jffN,,P(GXOKOa]&;*7;Z^qZ#<&V0U*]tB9$Q0;aA]I(8PuLnV\+a;:bF&IVnS0?g.R:`YI#HFidOWVN$E'O4(Dl?a
+%e)*MIbA(O&CmBO,i[$iI.li>HZ^A'-*/5O`"_mOJa\%l<0[U<k(U7?.r]DN]K;fW4_M_VN9)KS2M&(M1Pc;g/:0]5m[>DR#'qnb-
+%C*Up7S$*T"=_>W"EGtUk-$uA[Oj>_\YHIH0n</),26;m)&fdfp$3I2eBB1;5i.NIgGuPD\NVRjAjn#L'TY\FPPn22J\.fuIRi0':
+%>qe>d>87^Z>4Q4"MaGddplWVt.T_lXL-%f(2TDfK'GVP0EP"D*]+s1).\[l9cnsNXll'u_c*1$'*+]L+$-:P!9JlCA;H$!h_W/l=
+%*$Sh0;jN.>T5'QGdi^A9QRU![-AC)YUX)q."*),=L<#m40\bTPSo%beM`\)_oijaEhEemRidK":HR]VXoLf<1<Y)on at l@^QjV(4(
+%qA at 209@?;-81&NO%10,^?)p6EEfna[T"7s_a&bL2-m[/.Gs9r>6]*h4RN)BYPC_]n%tTrAIoNbZB*TaNM:c_$*!*:Zi at KVF-=-8[
+%C32^UQ4.r,3qB$`PQ`.e78LHFZ(?L)<rT%8OA8jAf#2M5WZ"Y_PmnM86^&iG*%X_MGqWX+TpbhjKM[pL5p5A#"XJA:UAX$lkPBXF
+%jTs)q%on4R5jqQ)d7C&(,'k\^$tQCNb-!cB1SSX8*1Y!UJgDZV-NBrE":cjjVJpL>3?&Ht'@..AIuOO_/doU.$&'TUK[,/.^ToF;
+%lBS(H1+%E'U(@QQ&deH1)U(5o%h,WS2?u^e at C(k;k/^r8l]GI[A$(C:MO]<k:)-le>-)*Vg9r[KK2 at j:7_60*/E$RL:=^O7^b(Wf
+%6A&bdR-kbFl*7I[9L_,tJNUmm`pUs_f=TMP,=[1jb<o#WCgQ\r/88p&'OQVFoZE(T5A;lp;U"?a_ at u)k68B1Ok+KkYpE8G0B/<;>
+%jQiZuq$>\#c(0HP&FCF-B^H1OM&ffV[>;4L3g1mU9uRU=3XBGN'Zp^92"EitE&8W0nq__crqLpQ/4+\i+IM0D)BW=a72aeh7G'm;
+%,teCCn:pEX,S,4([(9_30bJ,OX\aCCYk!I?A%b_F8Gc^FoI?pi]s]Z#Jimk$XCK*j\eI"g3=YVW#`b#(qE;ci(C:*eKhm4Z8A*LF
+%!i*(46=Ub0*Ea"]cD&MHD%)^Aco=]R4",F$#=m/q$Y?^Wf'QKRIX at 4G/XaoWe0HuE%DuB8QV=ra;g6(l,s2XVBf9m^Rj12r8"E$t
+%3.Tkc/Nd`b*+UabhI2-NGHk'g*uQd7Mt;X8pdpeq@:pWUVV-sA]B5a:nCgaAJT\i_E<b3s[med0i:UP,:67d_@\Slf^RCu'22H+q
+%]8G38mHC#FC*_`mW3',qB3r0Kdbr4"Z$l-68Dm":=\Mn3HV3-I=lI at _5O%)XUmVmhM:ND$(AhrUFIXl$Ae%C?8]YHLi^R(*I2O:h
+%/J<W4QEe;@$++6;(dI<"F'_82cXOoK7FM&s46E#Q?25S<.7;E,DiQ4F%=<0gkSC<Z_$F8B(SA3^&W%f&1CmX$K2spaBfLDa@&'.(
+%J,kfZ(4E29nY<?NG)8eko4pdt`5 at 8I@V*rrSs,1Rf5$l^N$NKg(_2.\GoV\Z6p8c=2L/@;A;ercGMg-llX:nc@(Y\R%UcH*pOl49
+%P'`'o)(SJs[>Y=XG"F0e8LeD at gn_.cW9pVp;gLjCLYBBkH_Fkfim8A&hJ2h*>b@=4A3)KHTOS`TVHd?/aWUpDP<`FWS?V$KLm/%i
+%3"6Q&o at B"F$OB&J?4*-K6l%Nb8>\(F$Y^3*#((hKY+(r&\Oa,X%[\Fl/Ak&FlK!q4$YUH$%1jPGRmbUTRE[)>U7bUOa+_,X<76q-
+%3pa")X!C2&P>abLrq6pr397r0[""V->iN`>2&\tR_I`gh.WeY<(68.L;n*qH,AsqVM-rnCd.6]JI%9rhS'V*4]l>$F\*qgRh5E\e
+%5;1`J[bsd_],pk8 at H3ZT7c1_K!N/n]79(bGgmgi;MesET0bQShfgfW=?/u:XPcXohZoS]V5l:V&Uh"F.V/-_\!n]RGdD3Cd#0189
+%KY<`nZ]0Zh]mCuAs8Jth-\o6VVI,r2L0h"KAP8:':ipBP2s-*1Rk!K1.7$P!3)qNi<N8q?eVpn28GF=7(3*bL^:LV#HFA*F8I/hE
+%<A#"O*pY*]#Ds5%+O>A^-p at +k\e3#;))s:eKfSTREmkRp^(bL27M;i$Csm,$J$.;pPO^/N0NT$$R%dBK6ti?qGNI&n3XV`pbn`Yj
+%9JSh9Ng^`CP[rGtb(4M`&-ZRMc&#?U(]ioY9j*BU_Yijk`Ie&R]j6c\eb1'BHPSAtfAgAR*q)dtO4W<b]*@R60mASlQLuV/">[;C
+%;2!/)/kXKT2rbDu13(-Y?s]XMZq=_a&;5^sIN at c8nq,]4@[Vh)ct`h2A^[!oc:MCJC/Ama8$r+]RWr[m/?.+>$!FlEH`n(EVh_d+
+%,[R)[Jpqn=nn6%5H<fHo,Y+nFTq4l!,>FCX87'rt5#i!D"0.Y(V$-/P_>-1Ah]+?K_$b\jR616Af(ar_QDa1"B`8M$H%Y#MfH&m)
+%!Tim4V52pAV-Pn^pAJjsisp$s[eF<s!MmSGnf\YJ9'-Ti:T3>]CK`"6M9cH=Ml^t)jb5L7V"VQ(H!*IIVui^C.Z2M#_kpBN:;$<r
+%6\osFP"4\+(Tc14Kjb[h_"AZtf*<d%&@q(7Arjrc:7r>VP3i]cj7lCm68H94</BM]NE4S@%pYETW9l(b)ft$(H"cpk\Y=H!X9t2h
+%il3=@po;03/lqEu9!]muaBB%rTM`(pfN5Er%f+slJtTK32TZ-mC9Rn&."]8J+eLc"iIPQ<(;$qC<T6F9)l9Lo7[G.B$?A+kL,OnS
+%g+f!j>]>:@4]t)oH=(ZX5IMm&LUhFc(>b at qC?ENIpip/jKKRbnN*L.J at D<GI!XG4W;0`OdQaiDPQ at egR)_!\!9ojk?L/LHS&US$s
+%I%O8HZ<!BZ![/#\$i:49'EDX9A4GWl at 3=#<:ggQRicD0PMn<)905=rO(G(ASi)JQjp6JQNOTZ<OKOe/W,c54T1 at WW#8Z3P+AS:u6
+%q7n3;B#m9FN[V&U6+,$r*/(BHZUO[9H=V$N'pU#PU89kbFOO3,RgM;\]j%X^;GgjGC at Tjf9Om9c84)73iiNM4+p<>/Cog>D1<llE
+%<lH4b2BCYDBJ&keT[/skY^;uq[`L&5!/hpoNC1Vi_&Dm+*PX9lp`pe2EY-[+d'-HY83,M3.%"fY@>lh,bh4hWS1^3ucB^md_s*>h
+%TMlW'X)c>WeB4LgEcfF)8jGZaO/eP*aV``pEPrl'Z=N6b*4o.M2fD"'H#AqVOM0f%nf8Bs0?Q8q__DY!/FqAe&.9I2LOGG]'TFo)
+%>fqfBd*GiOmDSg;6-#ODnUnuerkLYd1lFGb1'R\^13To!DcmICnTPKTV-RGg48IdPW2V*l1)Xul&"M&q8=t8_=:--0QJr[GlHb'Y
+%pkoI'DF\;^mn[J;3th/AaU_\<o0)%I/D68AG[_I/Lka`%_,5+f[M>CE'4!4,EsGf[H$[Nt]TTa6!Hgc+c;7uiHF!e4'^PYOSl;QT
+%K'PNpn!JSlT-tBe-VSi$N`&]cZd!H$rS$6=.Of"+9Yem&LeLQ?Gibc=:()6\cIZb>!k^2f<uU6rKDj="a/0lmbr#q)[,<\+['^o:
+%.$l!)"8a)orjFPWn;U/;AS9j$2<oe&K:YL>,#6cV,;*SJe&hg'K:Q`Gf^P9Y@%.N@?sBX*3H&VEs,%\M([UeO`!iFG&O=>m\S4m+
+%I;T,2$QJ$/LG at ntg%##8bk-hM3%04s*45jm1onGN(GNY5<1 at pbda%i90r$]%Ap\+L7SbNR2gPOCguo&.DY,dQ\C&bD`f8hCjYV5?
+%I%#3Y2qKbAdt5WIe(/^3E3W>`kIldTBt#Y\/34cl)H!Ul/pZT?"-g;jpJ]VaUmoOJ@,k3*F'9ej?5f0/NPVTEJ`>m-eC5%Q5uU=f
+%@]HUhC-WL!mf^.r\MT"=B7asq=%t2pDLaH'B/2bE7nVk8ri]XdnX;gn3L5mFc+Iqu2u9?eHd>[4%gcW<(P(l+XUje"Dp5Lm]]m[C
+%NC-\]XlW4;*\6M`O0l@<FienffY#jgZbl;ha.C-]'B1XW"Mpd,F00VCB^NY`GZqIj):[AVoe@"-Y\3b!.M'NZI47d`%8rZIPp@^R
+%P1M6G6pMHq#JN"=5,@(cAS^)3Y#Luq48qt+2*6dLgUrkaQpWdiC-S/ilGhEc7N"?iQK^<1.84:M at Q,s98uXU[B8YLHA+,u>jnD+-
+%;UMoTW97pSK*DNc6[n\RO7*,6O.Yj4o3q9oj&0V[Dm!r/4#U!j.4f;bliQ]`G_qsNG-, at YY5_h)PjS,aT0;s!;,a3tWH\Vaha>Xr
+%mGek-Ht at Y^LHR[c^V8qO;dI=$](+ at N]d[#??+?!A[0[54<jE#RdlT0T[1+1`+%W_qqS9FJZC9<&EamoA;:[Df!H1['$Tu;3qZu)s
+%1X'ao1GgE-?K!5!J%G(\1AJhINK)P7^tm:FDTcuHj>I-i9!B,A-0<QodA\n$H<p!37;g3Je=]tARQT(R.3g\eo)K(]1%#Z!"n'fo
+%CRm+QfF-hNWs,aPhPQ\WnST.*n53#=\ERt/!=;oU9q.2K/:-VIX&`5kbo[:UR at ipIi7"<thIV*WD'1`rFKjXH/qS7u1=IgjD</D"
+%]%7Lif:&L"'F;i\5V!PR$Z/H`$i.2@'e!e]7?=>:Ok2&n3,o0U*7&M(cK3d"1d^,s)D+%Lr.ahDAUb,I)a at oO6g8%_#sIj>DY3dN
+%YE#/13*+E..58oVM'*QdEmc<QUNbkOO2?NXdgW8s1+rBtYl7_!pRWUHg&=1F_tG?:46=@+q/!<H1.8dQTY;mCMRSU@,u(B<EL]ap
+%OLd6WIP_HLmR"mM7R?<;'T][KPZO$qlmO_FQgif6n'%mU7G^A%%5HFT=;SMEHNKdN62%)!^=Xkdj%L[l,2d'G3eJ%,[R=9/+5lOO
+%kRs49SIuob2tj9"p._-Oe$VVQj/(uHNDJud]LaE_7Q2LRO;,&'L]0&sBp7"`7cWLg1!+u(SWu](\]SbU.B'VD%#PR0_KSU52r*23
+%l>bV34A?Gbj],#f at t1Et_^bcNZfCWR_%&V0K)0M)--iZ5SmS@!F=$,[?n:d@?t&E,k8ip52b&"^;D'\G9cG*io,FJMH$b![H;J<\
+%q0 at N?feF1hB?[UbGcZRfKnp+\]]#D+^=EqN8Y)L7K.Ze9["L?.KRJ!Bq at kj(."i.s>j9\aP(RM)ngU>7YeYHH.Mp["6inu>Krl/j
+%^IXn'B&um9 at Ss5mn1$i^qH051&Zm$r1#5noZGmqhU[*40lU7Uje7aZ^9eu+[KYG5L*+Km70+Sf8gOKN7,OX^(<m;m9'Zsd!GVM*1
+%o.u&r7eJK43eZ;qDo8RKYjG$Lb\88/#b&.W?H-'S*sP/n>jk1n&c4DY&_ZD-qG%6>4<He/a71u`/'Bor5VA3kjGNhk:$m>VmP<dc
+%3-:ffZ3<RRKn7PQ$cUBq_6TC_Wg&c,iQ<gn)p:oS%#"t^d+a0ClW"!5Uc>Too at .,kL-r8pQI"'O?jGPu0nSqHc(3#SiTe4'5nqps
+%Jf]u$X]c?'V0ZYQMAm[A(^(b!7!/tJ8Ljs^1s4#Q;$M1K\JGoSd]h=NOa(f3ON&j+T/6SF)7IrO,3o+uJW#BS#00eB*15nZYM!pe
+%;7*n_Hs at DNSos=0)QR,3<%,]F*/gVa1E,1[YALLQ.-J"K*H7Gr at 9,:rnRBn+X,=#/2>a*U])?W6q$rG.[W1j1-ji$FN1"Q,;:00A
+%K-pFLUs;qI32,X0%RBuGMp;a8KUDiNTce4qK)EI`l;jo\_:E!p1BSn`=UdpG0]po>Go>!XA"9JVR%g66bk_C`$8[PNZfI at H9ntT#
+%5+l"G(_U(P%55tj+^.!K#>`:J.K0lLA=o[M65r+.ib?j\a+OZ%fZ5$o&a-jD=Nc%\pYkWcoE+49h\\SYCNmT8QYJ6q/#Yr,@@=,Q
+%a?DMt)f*1eR8i#9Nonp0;.0:'4^HRqrd1I#X"@n58_K)@_qq^-OrlpE5NgKUJ7UY0]N#1!<`lRW"QLEaJS[6_m$a#>.\u`:\\/-C
+%6`1'01O+!#o3Ar#!uAP\XJkl\_&)_3lc(>)]86cMMWW*:\!Qk(-i`=:eq6dXNiMD=]PZlbbT8MuHn_]H4jLi-U7"/c;g8U"+rG<_
+%P(O$sX_EC]C[/noR:M\4X#o78'dmFd7<'iI70Nl0i[tGmhUD-O-r;`Bb:hO^0Q]5c8DIpIUp7!UHt<ptm5-&s,8P7L;aUmjSLiGu
+%T at Cj@6KO&kdi`PZ0JE$RAo2'[EI]fX6f)ZZRuZV.12*>o"(Ejod$[<HZndPTT+_%gYW!B.9iMU2.FW&:M&jkL<DVPu8nJp"h#*3^
+%HE_`!5Ck?IL!"jrF-B"F"UqF7_Y^la=HQ?!A,HtXdmo[^%BaR'NN]Y+YmD9t1522:]I")^TMk&b#4<jn#&5PT4Kbg)4%n7C_7-dS
+%&QWW;:T$*,ibcp)]p_Kbj)To"\1L,5nihCU+KQ7`nferIQEt6/*u_X^QR at ON8hN_X49W8SGY.aVh/GKMpD`FaC<;b0(@A6.#L;p/
+%Y!KY4hb>`9]3g]6ml,S[$!'BDka*7%KZWQnE?Zp_Nf.Tn7LptW#-_grP[bjq&1'`'8dK,tg$P2PCb3M<KG<)e$C<(m<]'d!1#-`M
+%j-P&U"%QnN)Q&Goch#]37f!a!&[r]/UbC!b2Ab%]oeUm=XG:U*F!kr<Ro$:-6K#U720Ti;fC*19R.e!tR@)oDk,*B2MfrF)\GE,s
+%1qfo;K\*+oa/$Tk;&2*A,?_]=SJTtj;!bt8Y>pInC^W&1qPQQ==LSqtoEb1[g$m8U^MRRnV>[QS^!Xg6GguC-=6<uoMQ&&JVRO]5
+%9T\S+Ge4D_"Dp-6/\Y>e&U#3d`>5<B,1g'n<%BkI#6q203';1j$'ZWOX-H)q`6hH+2'f.(_8T8t#$%e^%h/n5_O7]m,qANK._69a
+%.l?s,9?gggDl\#j:1US=E+_P.:BJ.#P[:Y[.'\!pB1afnmVKd65dn[ldR>>De8`tn`U]`D!-d@*o/tPVF<9[;`eQ at XRXK#T::9jc
+%B]g"S#WkR^.Qok1Z),5lQ,3mk]Bd[b:-/MY*>7WPJOfe#;Xu$Z)0M'r[b7pY[^2$W@'[2NZa"AH2s%Odr<Q0VApX:UqkRc\l$.i!
+%::![AX:=%k+cr5_\s4k.>M:oqP?K><rXbd'E_kZX,n$\'*,u^qZNZH5ot;JnU:ee)f)"@lP,f"<**7N at 4.nS;f$`&E31Zo_nIZ70
+%WFu9'W(Cra<gfh804%]:%1^X3Y9.Q8LL*1,Gf-!K-d>B^N"hq.VW*.``58>(BfVjG4E27GHBPMh-maLR8q>uNAdjWjh)mU#i^&3\
+%Qh54'Y#8a4,t"7Qa"6!J!r7";PlWL@/k/Qd5=lOGEa2#(UpkMZMGU,bH1TskNsDtFS0F4[djtYG#:sRKZ'1+m5^QrSU5/IU1f$n;
+%"r:Z"pJnFB@"tpd[P$,p#W=ZYN9:P;QCp:sPdAOuQ'6hufjZPPTSXBM+%/sNWG_*(UFtj\Y>1Bk4U!c*hGITq?naHukHR at d+kKAD
+%h*+Y2`cF-gS%u@!DOs-_>Bh3ajY_!aG6E.n-PNf%o,4:NC9^H;(8_Y6&rYl]e0IA.ZA)@u"E6]eKRaE,`bGLaYb$rj-dBbm(ubeU
+%";%k>aI6,/#j"3'9Q+\,T$B6FNZC'4E^JM-m][a\6\HZZrCGCTbQ`;ZKe'8lS(&_#VCeL!KSsd;*d4Et$%jq0ZRdq1(0h#\W^(Q:
+%f"@/O__SRb(D:Q49Q=VK)kWkC>aljn>EHc'7Y1/hU_i@/`(=uiU_6As^!gRQ8.q2pJSDM`?N@#p;G[>bLrmRal%rT@$sE*\BTfm7
+%.j-)JAf7 at 2e$m]pW9KGNUk&b'm4cQqJt=oIGYK9$HuGWr0"9<Z'5d2I+Y:\V5#]&p^HVnF67$qH2VnTJZ at o^962q0V at J:RM"+jsQ
+%O!n<#TJ-OL.0o7?:.\&"]==(aXtTTEPEcg>3s(&\&E[rZ4RmrlXn:C*3&@!^JVd)<4#9:b+u%tQXEDg at qD<&6ZoJ0XQmJJorULA$
+%\8s,:RQdce,#7(iR7;[Z]2H+bH#>%9`%HmSH191r3?O]k\B,#LdP^6%Osu[gn0'-gVBltQ[#k\u7R3gG5TZ?/>2*FP+p/9e3i&LA
+%0bKPj+X'<XY#Aqm22EelHr(%d,?;S.gF^WD]DKF(j.,8D#\?KpkTFH)BU-00d?'!K\aF\EfWUP]0<EnT%L=qH(J\Xm:<En%KW??b
+%VhNqQQpdY^o;ns^+B23YR]IKf?@3EDjPCSL74=p7mFh-g2Po?S:$%+[hBXD:9!7bf6$XJrh?IaB6o.pqF=c!m'1Ol4'*b5>gnk"D
+%c8?oRT?;lB!p&?U+bh?oh$5!;<?5l`nG7b*g'j^;^hb=^e5.*Ae?dd3#.PUh#$kH;1R"ZA;n"BJR(al:T<YK4CmD]fWN<G=[1W..
+%kpN!:dStLa6Q%dol/A[^\M;2-Z\59.^*PLo;/=LaXU,\*O2Zgp6#W9BWA:faQ`G(D+/=uEWGVdRAs4tlRar_a)6E<hJQ;G`f*&t2
+%Qj`,tU2=^MJuD!P8qWrA.>3e3a-?oh^0ba(Uo)](M3lr6!up/>#@LP#V3k^GC0 at gHY3P0rllWlQf"4r_kpEDM*Mec;`@D(RK;n=T
+%"r;BJYWI*u[!/YRJQa6gGC2FdHFZdE*Q=.lAo:(+LKFDt8MolrVT"c+c`ZELc5/u&RooCA7tn"+DL4Ke(_qOk4eE&E2kEXJRGIel
+%j at ZlN<",)UPtfT1N8K]j=3(2rZh0-;7U9Tb3597"FZbmoEcH94;)JCNm at S9'r8m%jMq;#`rr1u8^raGQs352kq9olHGAcBSr8p6C
+%p$8[E51O;\q7Z_E--:W9[m*(Te*XJ7r:tQ_#s;37qrc5sMuK&=n:*,o;JEH8J,SF'oc*mWGOkVq]Qh-c\$*4&h=&+'q==H]h(N.7
+%p!(\KhHXF%\@DHj^An!GEUj"Xos:!O>^>`2Rl/qYQH at UgI<iSSIG[f>;Z1rJl85SLS!R46]m5&%M?`dh):QkMH?o>Oc1UCT[^;pV
+%kd%\,oA05CbHG8Zrgu+iq`ioK/&WX5BieN>hqm.H2`H6#G^]Q9IW3WYr0k&OYBtUlY?kSL^A.]2=4[[nlG`-L1jVlCgK=LUp%H5V
+%H[gKiG'ihumAm;>CF4=.0CCujDf4IF]X[mkQfgS\Is&#ne%'e0HfM88h"<YX9C?K<gDd^%iUZ++le?d>p"_"jX6aCKqu5dLOSa>(
+%g&LH.n?Ibqs76?I_EW7Rn;jV_YO<[b at iK;gf1'<$gRJ$<o'5]$h_-7WD)]&m*=DT.hQ;1qLMsr;ro*bGDr$j?KSAkK;,UQrrPd=Q
+%qZVf1n,E(C`To0qhn43b7t#Z0f/rk02RfrRHV!2c^UefAo(c.Jqq4u[k:b/njEgd&gT+CGAT$nXgo>&<qpXZdR^R at gjc6q-;3sB0
+%E^sF'W69$q at r9rG;4$%gj]3Zu*-Je&6^R]%o/EjZ?(Jb*o(pTa[=Y#NZD"2#VRs-0XuT=@qsNl.=d:3*lLhKe/q:Nsk#NRe]!Js<
+%GLd*"r;?AkbBqQTh9T\MQg>=Qjd(qe/X1'OYNFO:ddO3mb-O7Zn$Do1hf\>FT+?2.hu%G=n`K]Gj\ptKI3636U]/I(eVi$T%hW]/
+%7='%TQ%%.-mq#YNSTp5opEZkW(OPecs13[rIVjl1?U'mViR?e>Y<'f%o:*A3XbmS%HMu=crJm=^TtO5SDQdtcrqCniJ%$Tp<tZcm
+%(H\+5oCD_Q`T9#pk6L?n<O$;./)T$HYf)%ek7>$T/mfT-DctWQG*[X0#1%0o]R#!Ta9L8+^TmWZ(4&.WGK1$siMSum%rpF,eme5b
+%H>l&C$Lg>A4:e4if2o0UEdi-Y=8Lh\_$]G\j+tMHbH'7Phd!m%f8\N-"reNYcb$88P8eR;42H5ep2H?([amUO4aRGVQCs*-md/p3
+%pV*dnp]iLn5 at 2)%q_,o*pO*t[raGE[FW0SL*o[D#85<]T;T3)-nK,DdpaklKnFl1*1jPJ!HY&[kGSF(]f1$f!`O)r,4>)NUbKCt\
+%YJ9o4r7UI%<gf<F!Cut`nb2&Thqqbtrr$/Lodd>HQfl\thV91jk"]!CrN*'VeU'Mcqq$H0'<Bj->o&9L[J4B9fB;I?1Yo1L+$a::
+%FZ9WQe3/EWOc6E(N32DP4X/[%:&?m_Y8&/)K8A,L&M1Mn;g?5Z?^6([VsEDoB<eIrlq at 17+O'N#\me'WHGJQ)VSrMia0IoUrXbO+
+%Xs`cGU9uV)nNCIVYA.#)0<9S&_0hkQ<rY7&crFAe#>(4g?+p*nqY]@Dk46LW5G%nZ at Li$%OmBW,q5Y^kLP4ilm"t(ebW4aXYNe7D
+%M98&RI=M7U`T?bOQe.Q?LZnM?XD(2:X5Ddk5MpU5s0eg'mB1nnPo^Y%^T))Eb2W<UNTHZR%HEN4IGDN]j0^C"2fIHi#H$dfl>Ab>
+%GHT(4n/2&HW]%/Dl-Mcb(]B[6rU7kR+5OpYf<euBgcNuo?_K$j`X:!u>i"1P^0^tZI=?<eI=O':o('OrAObZjD]cKKq\(R[^2WcB
+%lWsE<He[8ncE2P at Hh1["k44D=p[S+R_m7!a^"[mYG!B.*?+PqDs#Oc^2gZh,/j3P=nb2stfABk@]sp13<M](cq at 56i\9N)djt5H=
+%fc]ut<RbklqTcO at 4hH#gp#H"?H?i*5UfHg*f"OYII!u"bJB4PPJ"6PGWX!)chqle*B]sNP5dm];aI;RaZ[OO-iO\+:7qb)e at U5&B
+%HrdY;I at AJDPq?4*>]_N$p<c:&>cd4"4lX/YCEj at L7&atU`%_ndj,-6-fb8W6d9;f&nCT;]*mnP!-J;l[b(oPjNj0uS&&DS;A+24X
+%-nBWg%u`q[f6J?G;*NN4PZ=\Ea&nRe.2HK+,jl8WF&f+!a&m"U[?:2$MrKc%.).rs4+nr^lNTP)-EP?hn/.UuWf8"31t/cqQC*"U
+%\QRPGIdeZYn5!M)cJVLn,h?)!j8FXir!\-(LSV)VWrh#XS(XlX%hC>]kLObma5VP_)uRU_B=GA%?`l""r7IiFroR=tnF><.^qsHZ
+%ZAUlWHJo+W=Q*a=S+SQC3JZ#NY6Zf=Y3PR!la![MY2qNHN?_^jd^=:mCTG%Z8%Q,U]!a)SGGK"Y]=NB8H`'I''..Mp!jirD[3J[5
+%8o$qsp5r4[<F+DkT;m;^i?dq,#I(3fPBVugq"`dmI+7&V$:i-L[)Q`XeoX>]qM\I/UC[;@I3`C-?=)LDhH=N'7:iY4N43pWmW6.5
+%\CCP.3U-S@]`5PBoCMqt-YqGt'Oprqnm6_Bs6WS"XKf4c+n_Yd\k9t)Y+X:F+&GjM:&?pdPe*>(*XbU=&lt6XZ_5h!l25LGrq`Yt
+%W86!^B:$rJ?<jVUkr#UCIL5_ce1a).`g>SbXH30e$?rUg/!!F4=d=a8aJ=p(gRB:&?enH+4qIe"\i]VA<%pIt5JOaEn at C$`!C[c)
+%lr;Y:DrG*-b+0>ioe)MjP7"Dal+ABYYc;6Pa-2,jMJJ7r#3RYC?@RHGq0H<Lmd;.,s*9sGB%#VgZkKNbB+K2LM7)cfmFfB_5rC1;
+%6H4=qp2L&$?e6 at s".8.(J,4Tak>g>n[HEMjk!o9leNY^js)NPee$nX0m\c9_[qD%O4+='X*6UoW'rRLdIa>nkqL=S*?erqWra38(
+%n,W at Io@;[pUX/[unbF5q#lQO1mca8Ub at Y_cq>QnR3Vn,a52T^=Ps"nj=1+<gcZc)a?X5gEroVbm;j?2()`m7q8%jkjo@)gop$Ft-
+%s81!_b86fF-[b`8B7O'5^]")NX4us`f:TgjI.mC'bOZNoRR'/GL$`&M_ikI-s'F1RhM9[*D#J\0g5]@k;/87.D85'J4^;e"lDgKF
+%Mq:`8WUom8b"S/RrAt7 at ds4q?heCn.PjZ;hDVc at 2.^Z?n8%.d]YM.<uT!(lkI(3M^N:j#)mH,"\q$M>P=$(p'np-QA^,`.Zd&O*s
+%Dm"IX>\E]$h7b"praEdjln!VcM`U4O<jf8nKl?GF+Ph!@NF(*%[Q!^$!m!;b>[DMXi8r?uFL2qQ#huQpZ->fJ87XbBg5M%MUSH)t
+%BJ[4_g5M%MURulh8"7n]C,7n9A%d?7(0736*c58"g!S4 at oc@sWY=.nb=[qLYp9/\G)S$C"Co$7`0E:sDbC#)tNRkMJS`Sb:_8?^l
+%X!0U:bMV173uX6mhRo`a4kbM[OeeAJPTG97'`O<@00^5A=;N8cED;W%dt6ndf7,fq\s)r=E.hVY^<U5NM9RWS8rS+)Obm)K1*9V/
+%@U80dYTabHg;?:89RJ,0EK,q<4n-Ej^%98u`g$o08*7<rJp+62[#R9h.kpq=Tgp2!"f>9TZB)-adToXg2874CoqfnrY-%uR7oFd"
+%=DhNk9$Q)&e9Cb2h^)'J<ODL_H2<#>rqt=.Wag6:WDJCT3Y"ulQ^?$!7gSO/4jWQ`/\J7KQ<<V$*psY%f"-Wd*gN4%J_$q"JKC]M
+%I%2RjG$jJ=Y'PQgrV<eSIiPNgrb?cB;+"OsO]a3j5AFl;WP#)K*At4S?*^5[[_&fUVL:R'6X/.`NZ-VK6T]$r7h+k5)VY/.qh[t\
+%>n]^%ORN(GpY%OqceV=nj6G;@abk(@eOF*"gRJ$<nrUN?hmotoh<;/R\+<@<N)f[mNcp?l_iF9=2_VpmF+*lDcGC16g-d#YD5)5)
+%e+;DkX37\R?N-QUrH?u8Y1HdPkP<<US,8s2:KNhFbA5tkam7[`p9CV1qcNBKP']G7O^le7T6!6;U.KQ-mUOY??cIi0^M)%C<GCY?
+%ncuAq*o&l-H%,;[r;'3u=6iK4*7MWs=lj*u51t^\eh:(#PhfnC5=Eq(Xm!."q!Gc.G]WK>r]#?h+J*jaV,?B/Df=pkl`8VRhuEB7
+%qLDkb\G_.OYA%nol[OH4 at pRDQC`VtV!<5SF<`aGWHRSQlo#WBTnh-2'*ctHo1R5[<?Wiudd82<BF#9+FSmWY9/\Jf9-S*U[%MZ7S
+%V)<,PI0nWN7k/5V.]DH-'!skp)0KfGi@(OOZ;Trg7/s`3_T.:\?IlN<LPNMnle9E)6XEg%S&^5q$u,Xo];j3t[CN%jpBbMS+-uBY
+%'A)DJQ#?R"e at ARrl_r)Le[_G9G?!aclJ,7->I+BQ<9NtTF/uTk+4[n46_4,,W\LS6U$uQpa)D$\>2**O&ZBn'/$USSm9!CuI2D6K
+%.k>T>&\*8D4^/@53*%a25jDj,I=6Hhn"omrWRdc:mVh at 9pn>Cjea6p4TE"/+DQV6)]=@h#J,es5r8Kq*5 at Mq+&*Fa1YCHE;/$hjk
+%Y28shI3chWp"d8V:&m8hFM$t3IC'dFG9u:QW%c6ElCQKmnjU:PSr?IAU%#6qBDLhM\hlW7`'jE:db4N$"uU"!=743P(4UVcf5au=
+%aAq?):$^ZmdeSAuh7Pbd>T[!X$+=F&s)=$bJbum]_Z$j%:_m*AS%\+(S!VII0.t#M3'TZD=Ol0\>ksD>JC/jiqgs(ArIe`V>ME<Y
+%rYK_0Tri'B)[kQ[e[7q&:Yqu:N/derqj!FpfO"S>968u],LN8GpE%;a2;O at h1j>2H4qVLHV+m*@XLeFob!C=^s74JXDI6Wi+pb<.
+%aQtPZXpoiIP2>WlO$_77Bu44+4oBCMr%[tm'mk4mi9QGf&q#YSI+epU:"sq%+]tN4mSQC1r8lJpmr'g[<p&U`5MgnH'n.iJ+KT9)
+%=RXNVmLhBY.Z at iM4+"IfOa=.m&GGJLrqF.04nqg>3NeL,*;SUJAc<om>W"Zk(iN[2*Zi<?f>ZVh`Z*O;LPPB=A$<_hZK8KL2Epb2
+%I/#(q7LA+ACbp;eiU[F!mXs7QXOaoX at -R[IbI/nrrnY^0IC*!dfB(pQeg7o^TQ,DWnrMs^gqDs$CFA4&Dqi6d7E!eLnfC*7s0XN?
+%eQ\b3<^jl>0aEfMP=>J_mnX-jduJQ`mn>&l[NZe8PC0`<IIYT*Y[`ZO&,5n$os-a?rVUrk<gUF)d/bO?SubPnG[QMf-``sA%k9@)
+%OZ3eO.Dn=.h;_W,lMnH$R\l/9*3Pcs*@'o711>L2:Zsr=KiR65^DCnDXfHs<,6_gkX at QIglc\l9YFbbt'emCOoA\ce<rA$iZC\`n
+%s)),4ID><2QMDVX)//riWf5:D97Q-:N_B)La%NkP96OK6QBP<cl-\,LbMtHah_fHs1bh(lU^%:"J*V.!f2jV,[A?Igr$4uYCH\"S
+%?8_G1XDLms:G#g_f%8=AEJtKX:S_Zpn+OH7,<gdVd0Y;BID$u'*6pPdJsZXf5]0l at C*(k.Bl0>aGTW`gY)PQL&(8UDo=-tTs7>sX
+%g#$/.YD^pPRioi1BG73!IdmZPI/>QMSlmipJgGr]rR:.l^\#3:+d=>Us75aL="i^Nq<U%iqEa;<^\m5lS*t6u3O[o;jKI`"rr1e=
+%qos0P"odt/s7kq>Da*4]/gl,Q8-?QphnP]aU-W.9q[*;rs7APSmgf688Nch/aoD8</LSm@:]L-,TDdnDWND_g["OX3g2^A_H?,e=
+%ASJQ)CHJXk.OPX`/d#-Mqu7SNb%WEKnaBc/-Pu^XHs0F(12ZSE2P8"35^2Ku#U_k,i,Y9,,.Kl127l&^/^%l"#qK]R[$?ki#5g+I
+%e`Qk_\`>64lO.I4'u8X>EIg;TrFp)- at Au*->"`4(U".`C*-4/$UYhF"1bAjM&m`H&>Yk7s at Cn+]qGICro4\S$[ae!6n)nf(e.NWV
+%_%iOaT)'S&m.oi'["KR^QC.%5r<o;1\k=-MUm#Y'5E%//gbI-Ze<_?m`)@Id#CnJ8aoYJboX2Cbn!X6/j-'XQh)*$tP%T%1Z at q#"
+%^<g8;RXGg]`3R`Tf2&I)*M/r!NWWHOl).As%5+XK+_-+%q at WOJo"TEg5Ossl8O&?E6p at j-O\9ntcdhImTr_UXKa4L(i;9/-K(Xta
+%rZ4Re/(<,!pVn_)_,\%=0$j`LqGLeX\Y4GdFK$+E>nnVq\&<8RMl4260j-lkX'b2 at VXsVG#PXu&=jEb:O"Nd)qH=#hCJ"Y%c52nW
+%f[BW@$T0V_aY(\^892]G;033ZYhuA0O,A*c]p#d99>@?O:MYGLRGL;83[X^94?1A-TCBqSG\@#_/^\0$VcBlk^KR&?eh;,RP]`]s
+%I?b+rpR\!KXtf5FrL34Kl$"Pu"IU>`"8aqji1b..$-T]+i1oK0?i#,7'..0V5bE[lV+hTRht6NdQIEhGOis_2qXuudU at T?8gJR,'
+%8'jm-:inEJ<QZ`o- at rP,aAaV\GLU`>/b%]tZ\<9+AoNk:p'\NXgO\faU<D&:\AaK at hc[d(>4NH5A$%u<E=imkn-Qc6^;t^\R%r9d
+%@H#_4Gm1>"`/!Y>Fd:L#H<$h(Z[lu;:h%rmqO=Hj^6X-UEpMq+#dqkGA1nk_(imn]L40d\Z_dXJ+s8%n+=rEmFGc*.hH+HN./.pa
+%*V5$@l&!&8T9mDbj7;2p]4<;0O;=UnrHBst%R/5G8.e`uJf!P\3]SBneTV[BB("$)13UOp.UCd-Er5+Mcq^'?96+fPULPj'j/tCK
+%6%?=8X#bGRN`d7VWu!hRs/cVa/]Jk.p8a at ER6>Y:@'ZS8b8gn/OX"(\HN$kZC=fZ%X#`W4e at j5QI?UK^IfM8Mq?>U.[j3rsc_`BM
+%FJS1)mBg at c1;PP9Rdg\+!lGd$Qq^uI=U6q4.4i&+&0"=TR82[V!hQjEOI4#\MnjG;IklaI:SB"?=fgpW0h&b]NS\>5d'3!H2CLZC
+%7&0N_C_.f)K^**&gp3Tc2.[Z-',Q+@`1.$;:Af-bk7[r-=Qh+*A'BYq&^_qS$6;JW&.6/NCbm2 at Y'iOg(8ESZl8k';Yp5>-V#(LW
+%nEpd._Jhi$<FBt.(CG&T"Iu9KUeE0r-bR46=;^73n,a<,$RnAB.l'gHTo?u0]o!MqWBI&47BS4SDut.<<mX:Qb\6Ws#qRb'LXV;5
+%n3u].RAI2AD=[YnQOXY&>a\>"jO+fm:OH_?O at f?&\!+KFpIl+AH+J&;*`J?/Xt3G4\C^q4'nVg%Q9#&l,W3S9M'c'/+?*n at d0"Tn
+%5C,U]?V2/E9#k2q7g_8E#u[+0Kb#hj:B:i.]\k*5TIcc9>G@\]=6"S2S]pkrZFo;ApGfW\-^VGDf#?K_Qf+%ee+Lj9keLYhB<s-q
+%"[eTX!UO_K%-!J;TSL_*mlMX1JJ2e:gG,cC+i-FGToPalGp/`C6iN7,>jWsqDl&rYpjqP at e1Mru9o_jZK_oAeX\VN!gQJ,1+m)4S
+%$[bTZkU[j')-du?UcYf\Gb(U2+AkISNig<8(GuMS?BWb at X*i_V<=N(H`ptT]H*k2RYtC>^TMX`$U3%bsM-8$]>nX0m\Wg_ZeEL3T
+%YJDO?448QTi`%)DM8bUij<u\"O\A;T8%#B7EK_#V+V3Z'rTn9XW*ZX'+KlrA-?<G0"h!M]e<&Un$eQr@'L)8?"m](Y4W0 at LopM!$
+%NX=$rd<Y1k%@J:P,R6!>[I4K%kpodV#9/N1MHZs#OU)*uRtF-s#KX_9YY.\_'L6lTo(/.`,tfHMJtb?cO3=Man]6r[-cdG1:>#@T
+%Qn2g1TH`Ak9Y@]\kWAmk]VKN^Q7U\]/ld7\;8`L%P)9?G]\ro9eHUrt?R+!FA+Zc\OeV^@of,)U#YRhNKL.+3/M173+$?]926pU7
+%!\S at .o]L\p+RJ\&V3k*.TR1:e:'I3RO,:"g*B#6HT]gV#]+gT"-%_^;k7a. at 0mZnDRO&OPAIDA#$m57pGEG-'kAS-6r>.+oDd%R<
+%qsEjD5U!pYRg`&!Iegt%`LE?H]6ugDrdO_rN&okM;Dr[<)b#oC.X!4/Joj8p+2kG'@'ur]f%"Qj,HajB.4_Y]LeH/%[d\EL/8%cT
+%IO>O%4R9e'B0BCnWFj3#)(I?K&7)K0a^q[2,1#gZ#u">8(.DdF92]U\AsIAEY](\UZZiYoMWa*^mtT>RKJ@\R9m?I"cX^%9p#.Mk
+%G']u'g1#)'+SuW6-=,SOI!]U%WcsW>MCpdReT=cQhEZS^_R`^5r<"2O0;'jbJ8qQ_NQs=F$6g>mcQ4<5Bi7sEbEQ`2U4&4?L`(1M
+%1DJ at P@8?(PZ$oHdL';UjWh)r1M[5sQI[C+/e`Zh++!Z)G[oS3QcLqKGpM.\jl\CRWk1*]K]M9$m,,1ri&n&3%7D]lm3&'p-8fED.
+%:%jGs*4_m6+fM-Y<X>liBlp at j#8+[2`gAE`<\>=9?=E"n7*9Pa2E:rKCk.O^*=QUj91-ni.hoGA>*Gd at +\s,rSb_S?U9B3;6:nR@
+%FFiCVhQo9k$m-;5=!s3[,:6gf_q5Q/H`8c?bY9dYJeu!==k:T`n*7Gg\;lD(;&&0hi7Us6IuHsX\4b>(h0M_qVXMu.3lr!4Y&e).
+%`ni*KFWJXf#K`Ds=A<>j<3<9IN(rXOS_Y\!mdl;q(=`s"APtsOc at T/qgg'n3p>8)M-boOs-\)#c0SP9n3Vh[r+<r2:8BMQ>Qdg0*
+%hOZT84I/?CZh,SU'\4A<I(_MYHY7>^)D;F0,^ANM+q+SfTUZAsA=]g<,hXNd!?*hJMc^UX0&AEfD^W7o7JoQZ.=f<L3N[KVTg7HZ
+%jTQuogf0s"6Go54%bO5d1>>Bl.\&1jGS.6>E**r664uY]O3EOZ)KIAQA>`rFIfEm&9H at NbAF@pWPK6Am2$#%PL(OWi1S(6#36TUQ
+%3u1 at pAT]QfpGKlXFYKOLZA*Y@[Y at OD;\6'TiQ&?a"[Z"MbJ[?P$R'.">Mo=;_B%n&$5VER'Fc\1CpU(a6`6LQE&Flf"JJEr.JQpQ
+%Ee:#q'lROm_[O^t?C?Okc&K9'K6CQZ@@^dWbn-[Y]NikK$16#S(g2E#6"_,Y9Mot&61pm%QF at K#PA9HKfETbIgBIcjTs1dK"ab_n
+%E=8g/-ZCfCn0Vo;$?s<mm4LT'&DuS`rE`lKHNQ7&a5HG8[B/[r&kdCRaD\e1*fgBiKo1_!@r.,nm^3D[G9XO]pfrOEWih5_j[BTo
+%?'T8rped]$6D)jHgdt:P6NXfn6tmOSNADLBNZNWC+C6p]RD$/Mhf[&5J*'M?pgKe-;J'>V/&Y_4^mf1#KX.>u.XB!$:u\S-CB5 at 1
+%Ri66^Ck.irCsG%KnpS-9!`tlI4=RY:OP8gu'KD&aa`!1[S!k\[`P;Xui4n"]>]bBJA_l^'6S-3<06aN%V`*amKa%]!APDI8fGr]!
+%A3S=#").osK>@@r6;[q1Z][OpErc\)m-mon38Mq<g\02OG. at KkpWY1LH)kUC)$9Mk_E79!<Csl]!0UcqZ\cV4'E!;&JZ[k`1qQoO
+%$NS07J$QmZm at aDj/M&BSPitMMGOP`?W4XAC$F7p]m0E)E0q*ZD/4=j,FQ*(or+*EX29BV3'%N,8iC]d!<nC;ToNbR3@$ltW-iq2E
+%?C^Fb<Cg6/U*3qYM=dIu*:Cir7*QS'V9;_'Aut?,.V[NHWk'VeoIm`YrN/QZ9%7O/#oGuF&fUY>ZM84o at W:W4$oK!i;cm++bJZD0
+%^[."9AJJh,^P*IRnjsqfRK-V0E$ksI`IC2fe'J0j-IDp3X@<ANE<OR^11hqNZY"9]A*XlJC%g?rG8<]o2B(JMF$h<G?1'[Wjk_BP
+%Hde>"E-%edDR%>-OVNU0\0Ue="EN,`k.73gj[(,"_bSM=7!jKuRk6rIK<?q`*"3F*q]l^Ui[[-`k'Uo:'--n:eS3C1;i_VSLhVU^
+%E<2m<CE53m#0BmWLt94q'T:b&.&q>[Ao.`@=0;r6?4\;g7pc]]n>V;je)rAeNjp4!`NYHg<^PTYJMP6`a[>N^Pm<Brhh5=\O#V at U
+%B).mM(#Z*\p7J\?9>,J2DneENqrA6qf1bi3J3T(`-jaYB)s?kU46/p!$$,n0\+h&g'>OL3!hT6QqYTaU%-gqZ8>\hH-Cn2265\>]
+%eJ&,iaM'>V^_$kFgM`^gpOE](A74,Ei>m8D84ZRuku9b]jC4I*]oZU<e6OteOnE,Po4.r&MuIb4aEj4KVTJBq<)C?/s/Ou+V+njD
+%"(SW^TCg;gYK!)VpW`Hq5?rY_IJMmU?d<#.s+df=;Z,s4gc=N#)PktTIIZsohJn$-8#a;Y0/&sT^:`76B69#8Cn=GRD]Z"dX?f"P
+%<UA[KIoH5)6ud6;3$HNKB+udRh^5"j'e[1agZIuXU\)Uq2^]Y3?&-ZZrh_JkM=@g-aec>":o<P4TH13gHQG at fI8%;3O1-5'(VeHc
+%J+<I0jid%4mSr1M,8hui9nYd^#t-l3oCTL6r]SYi>>P6l&,r9KrLo;NThg*-%p_q8,g212omIeXDugj>)r^?/8'K^=FV--fX$2T^
+%'R31b5QK"?F3L$SBV'0&:aF_$JTe'QV\t-/f'LKH1hN;/\qFLZAp at grG+KG(kLf<@.o=kXk+"A"N_PKNG7hVO-2_D)$`=Pn(8qXe
+%`[Rk?-;L7mLa,"jC!aX,8![UN#b-)O*\63U26,B,5`:FHm"H:/@=X\Ph_FL$e0UKi?6b*79]\-FLhH+$eg]L)>C_6Y(-lXU")U\@
+%\t.(r3Y>E$M9_-.TG'8,67:Q4gZ[u,=c=5t?f?Q3JO:?@+C?ZT&M)!04:QU(4DU8j1k^2$GLm$$7kS`tQVBOBFUa(%JN!m"S>QOb
+%K!71>K#.^ePA_C-a1eE2GEF"mNJN1:K at VJX;dU.+)S-tJiALG at K3*&S;WP3C"0^uL/aV at qBpnT$">OPLkG_b%@0=.D/RCb#lnK?;
+%)@6uqdnW/6K6_T/4CKWhSD1E=*.!P\>Cuq]Anf*Qi3B\(g0HfhC-biV(m\%B1nin^-Id4 at B*YihW=Q3nZ[`QGoTuRG22"ShD5X,a
+%,N=PCbQ9T5\j4)<2AC_B''5oF%Zl-EE2m:Q#tTqOSe5)IhRSWL)phF(/"Hp+/PX^^mU&i6J]0E;M^Lstg,bqWpVYlVBpSs+'T;#R
+%s3/_'*762J&r)ZP-hnqFOgcVs'FGPU#)]%Ca23C0f]lt1%[\k6d&LK,a#V^]F\3cKEFPP!i4phEFWNYg29i^j!l8WEW9bD&q1R8L
+%18>O%n2<m#o+Jqq3MgZ&i"SKoeZoiO)uf^+NHOFl_iU?qL=%<O`QH1u<XO1g`iKhMQZ/Yg#m*Vm;%";WaO=`.`3rU@,oCIn8nbd,
+%fWh\qem0gT<nTsOJDCT67Ap:0SIc2'o/:("Wl!W&m+O_+^gTN&B$H:FLcHgeO_H6AI"DZ6@;\c.A'(o+p)oiI!pUC,Yl[G2PMjEW
+%"gVTI4-_G7?j![EClKGSRqCKqJg(t-W#`-,,Xne*<fdRk at KU__9uJ6/JO=dHKOc.V!J_C?(A$QI-`1)T)rY';+7fULbW98^V9Qit
+%g00BkS9=mT%2MDUE5W!<Z-T9N[[bNi at grW!eFJ4S_..90[(CQZe;BJZW9qH&BT-:1[GV@]n at PG(R*8ke#@?2%_u$5Z\>Btj0(/A[
+%;BUM+%(2e[Z8!'a,00T8N"\`G5/QS12#op#=n0XUAu&Q4$*)VG)fX^m1#3\!a.B/BG7bsBoqfY7Y9IdK566US_"r`9]R+KOLDdnN
+%gP,9N=,"Q..Rm)>59Q_HeLT\Yi[:BALZH+Z3>cZg34Cp8"I(cG0Uok?O'!]L9W&'6JcnHp)@SUP9+.<rO0).*mc$O[/!:[s=63q2
+%$%]9;@!P(W._GG`03S4)%RI0TgMkalpWCQ*E/'@jX_G^hha3]\L0r90U+mDaDt<\CX:nEr at -AWW=$mXDer8N5aW@]%(iX^pBY!`m
+%Z*A#o>q at CI7HdY91-^E at Jq*4riQTP5<tr*I4-JJ>\_D#1_627hW6?eoQ3`T*-$00EV(k_1hHHPS`4.ZAVRR?#k-Pe`QXD]U!@+'[
+%<&GrlXI56R>hE/1!=*d`fGZkq2GLf9"[T:Y"QD\Ln?c,uZN`TP@@#R&(1p&J60aMETN:$c'Chmb9VTI_A-qb>,]g#&U^k`\TP0p2
+%0I#j7X$ikVJ?fC.N<N'[)d[O-dfNf]>Yhd4!uc'&_=QTi[;"?#4=G5Yin]5lrccLXSFGk#[YA"Rgs`pS4)_Rd?L<nXXXO.2Xc&k#
+%V%&Mo((>D.+R,_=*3eZSR!a3XNJf'+[`\,83[[8,q[_]aFb:.!DN,XJRAScq\tTnbI;gr/.8+%X`eXqtYkMt.'Ia$&;@N^$bn_-.
+%Jk[+ce]ahN$hH+C*tP#QQ-t1A"uc[N[(JEb"I'Xgc67/LPS!d]VZjd_'k1L%!Cn+;X28AJm;&/4#6f]^,lLL_Jl(.CU/s]7pctp!
+%AQupOLud1c%bU;h[c!rH0$;)3VD5WXlF%%TD_"X\>;ue1 at k]4?0Wu>"%\PGj:oeO<3-)N]9ac&'ae,gq(iZ-+jit'ZL<$C-=A\(Y
+%R1![K&jd64%'49^DGAlc0$5eWM72qki)ZMT,&%H9EiGKq95'bK]\MM/&>11J!aDS=?(GFTbquK;q"pr6#nV\c<P7m]<0'>Y?2AgK
+%%_U4nkJ>VRa0aS,:peLpXs)CT&\R%&R*Z3>[uJu<5D`L"-00VZJ]!_Ri;nahE0?f],esq!,,4>1.5&7WTe^WU`>FR3B$XUZA(gt5
+%243*kn3#RA:.r^P.AVq\(soMA/H&]V:Ku+#RFoB/i`?l";J1EZM<G-9H,;4VjA#P16orHHElq>%T>6RITE.&=K:NPh'f7J;`>L#T
+%9c>iQL*F9(Z<G8<"/lS]\QIf.N`\cRc3bq7/*nIa'c:m4\#-:Ddsf?E]1BGV>GU>?S,:;J:@8SdK3[2-*pqnBKKmDg4YQS=cL"WC
+%[f?:^Nj<]fNUHgop=XAi3kKn9`O"=f/l1u5':S7;J"shcYPR!\qA^)En34FdB%h_q3Esem5NOC3)<UM\`Kq)!H=L4[q6KHRT)TDY
+%hS3 at 1QN-=IH1\_dlgj/hgHWZWjQCm`]M.2[6gd*;Z&m0=ag&ES\:cjcKN+*XOH,cf7]A:aoejZFNZ2J;CfNhJGh=bu=Gdl0=L.$1
+%[NKk(0%['H5UV>]]/e,OKWBi#,'Blm3d"7gB5*KIg72=$5`AUOaG]5W+k55&LNBmZ9;hj?n_q1QAe0q#BBH*9gDbnmF+W?l7)&'I
+%4Fp?hFV9"F_B_=WB\kF`qem/eq7Ekupo;G-%6TANenPdaG*7S:;b$F>.1)MXVe3!.F<X],,HCER.8EdnS^jI.Cc2djmD;O,Jtam:
+%E at r#!RqVAbn$Juam0L9.k/pmZV,&n[]N4?kA7dEQZ at RP8+W-YVkN0ls"7H^,Yrd;Xqs)_Rrs_l60@"H]NcS=d4-^GR*%r[[F)kl&
+%!QLY.HVRJfi)/MA"K40>\@P`^Ba5MUY0ml5RWD@/VFc(C&tiJC+2+KbRstYaPpo(?gd&gOEb5S,8M!`E#*nLk!Cu95<=@1"WG*@j
+%S!o;B81k9f-s&tAq[\URJ17bXBdAMpZj]npn<%^c"TX(ne-%`TIK5+.EhIV0c@<Le/?U:C#(IlG2MKqbH!F;Df[f<"QE"ms&ef\W
+%'FM^i-?5?nZ0TXolRfH@"-Y!M5YkcH*!*AG.=_3<Ug9k2eNu!@:.aY<WgAMb6,M-VM&>TV!)B"+G]N(S;r8kNctXqTd4f1bKH&qI
+%$)K,W#SH/;'qR0n^EPPfoH1cOrKTkR2D0,<=,7?5=:iY"KiTJ3*tgR)&=?E!(K1E6S/1jmRrr>oS<,VCJ>j1_fm&7mi$IRq`A/%r
+%j>_b`RcSrK;9H/;CdJjY;3<CP.]cKXB>hhaKIjZJEhr2&`/>m8jY(B&oV:8E9]eX\5+ at FU\d-P- at Mn3),\cumA:bi3SfEnVfEg'H
+%jaX&?.'bsJZ9hnSfqdgg650f=<kAbS3G5d)b4"Ih#UIbV*@th.F]u8;[F?.GGR%l-h\'i>g7TLo8*kaufn)o?:W]oW0M7NCd$moJ
+%EC#6;Kb.-R]Auc]ik]6ZJh,tE2+0J^F$71L)n#_9&Lpmj>hGs7ZN?5(N[XD at -K)5a)U&]cH.qX#(d[$^gPQXlFqY8/aPF@'dNVd;
+%EMKIij.n#%QajnAYrIYUpbe(aP"^?+o3J&IFmK*m(]u82-5$&PaTmt7]]Ale`>!TAaf71SE_])>5'q='T:%,iM#O>+'M7A#T$=BO
+%7@,S/N%hM2\=q-9dF$3dS*7E\JF_3C'h>),_,XLHS!DeQg[3Y!PW):+mB9;7M4IefY,[d!-?h$[;%SKt_b8Or`Aac2f9WEKSBVBm
+%;3&$:[a``_#g5Y("hYRPCg,m&bZ6G\MGO??K&lfC\-&EuP5pGqmD\,DMjs2Bo8CpmKOr:\VK+E650U`IX>V at Ws.V,G#m\=Q"OAr7
+%..J,](OG6Y==%pfHIXkYKrtl:*i4$f at S]4l6!r"fU]`?Wa9.Z<1RSAj!oapVP3$4'Wp`kd7$-\>."2^sm4?SKQ5H4;"=[+V^luH&
+%*'`>6)^fR$%T]apBkWk07T=M,mV=u9&gO6/J;,U-3R2<giMaDS-9PptG/=Ec>1#"cXT#BF&Y%^U6V<&^Y6k.X2<Y&o<WZ1JQQ\5#
+%Zu=+)8=iiU78:Usb?&8^?\I-47!2C_'5H+bbB0#m8YQ,Rf!7+7>FMh2Mo,#F2rTM`CdB>,93dj-cuC@@YpLebVXfWZhk7!Q]^*Kn
+%M=Kek_Kog1ghEY`FP"Q-,JEqD^"2%U;(!#+qWFjpfseJ)Cg9\]Fd+6TOr(O40(K?HclrciMnACpGfU;_n4CLH3lmSeT\SbE+PD?8
+%o;6`Q="TI_KkDf,N at UqN,SH at bN56<-8YXeHTn46#;5+esJ/)2u+8LKAe^Vq<C[S8"(6cs=LQq,tEhb8QdO'jI+u*om9nR;'d896X
+%WTq*/YSjn--K#?`8r=/fiYF-k_%NiL>lAe;iiU[mHE[Bg9abLhiSL(Rs%-,;3%GH=;K,3B2`['?R0Fj\G\#5iL2IVCUD5\VQ(sG2
+%fI)mi.'baGTFJ(>jhO?:>@"PW`E[]#\]0iH305#$i.a+B>!rtJI.2-3`LM5]Y?G at h#6lgRRVPut^"$m68]e<%AmAOe7a?7\MDe>)
+%OYlKX.L<;!FIQc)K]-3M2fPkehk</gGZ(;U`Bs6U*OD`UDB`WP.-ukp+TmYP:]c1iq3IL`YSjn-L,b9Q//XgjFs:s(b##[3=qWBr
+%$/+)(bhOW`NC!.$d%KnbVIW+D*!85"LetIG=.f/qi\icP<rrjJ]51</6I#a2<&D%EE,]de;ms:T%RDp>ALj1,V=V]a,jV=+ETqdY
+%2J0t,Uhr""BV'"fij$:R-Hbaa;.eI3)gtBuhFM72_*S2>WM!<n6IodM\8X-:W7 at cQ'k<*[F7*"T\h-dSHH"Jql5:bi<s`]?]"e`4
+%QICH@?@Iu$CZ:_G\u=Qh/e=qo8M!%56(!7[JlUBFS8g077au`KPk%Ln5[o*17]<Ut&iIcb9Wt5SMBI7c31O]Pn<kf3>`9K]nt<*o
+%ql7MK(_KAZ@<O8L;:I5ZpkbU,6!(%A#'^dabJU68eV82rHbaFgUQc20eZ_+cN2O(NSs at rQV*]&5I?TPiRHPdd-io[AE'g8IntrFq
+%Ch$oCU^aP:c.U<=>/b0nY]+AD<tpkFdTIdgTiQl7RjZ>ckb at XWr]4cpG)2,Pb:\o!TB10]-[(Z*Q=C9,R7FD>%;;h7RBX^!09i;Q
+%[RFR0S.mnkVLeMD(F='*#V[1+"i&ooo'u.fmB<_>D_>DQD:d?pM[&99j"72DquT#r1"T>5LRYn!+I+:6+t1SmVPdL<.Tt[tf(qNT
+%NCl<@&ojQ9kFnbcDR.Y*ZNn>2`:`@c'ebkD`8qa7N2*g,_C8H$c^)^N]b[>>'.B,.92[=*Wofl:"=aj*:XEfXNLIEje)Ci#oii_t
+%BaJ6M+e*,mc\Yb$LT)M;H<iBQ^+EdC444JR,j\XT?R_TOK1'TT?FW]6,#lT5o$4=eTsN1YMj6Du&;r(@;Ad\FLY at hfEn%HlB-)qD
+%!X,`lXf,SH8%Gi*5pbO`=b3QPYtf)B;2ng.?:;)2SZ+C+3 at bi\7H1_ji2Qra6hR>'EHqqlMAt]l.#]/t9j*!7gX at LV&ftbGWXTNK
+%Z5G]*i)Gt?Altjl0GtC3!j@(%jR")T-oC7XS[2G"Korl:$c=go^iT+8&Y6l%\%"Q))Nd?%*F+RZ:tVS,hElq`c]kaf<SsBKPs^]S
+%B;(L9hQ*O"*_A=nLN#Kq-crcI],M+PQ)U(ePB)M,o&[Gof(d2Xlco;pVA,&C5a%aUJC'/bF:*FShHj]RGh(kkZcQoX+R)](Cf)CX
+%g*f.EM//?+Td=>?60 at 1jXg*,k^lY9m!:#@aUAbgh+_lD1J'E<X40&;s.8P_M6Qm!q+-'U6JjdifJ at dm#[A\,bG$=.+1rIbAg\"J4
+%)o`VU2$l#&4c at D-dklo4JiI<HFig?1f.n_U"Y$<=ShnJ,-E5E1I7T9,@[m*$fdME%.)50aaH#ZS=Q_bEH&:6(crbY(M^Ti-JI&6:
+%&LABt9P'tJ0r.AQB'E7p;'fri%`rVrjNQH$hJA[3$S10S(T[:0P28NB&O\KYq8.\tGk4qN92Yo%Wju"d#0jHPl7Z"t#b[e(S4-,\
+%pfpgXK?JqdB5 at -Qbi#H%Y"_/i<bsng5tqiIGjK1I792:I%<Z^.3q]mXU$JMcOOGHn.tgp1oNOb?f-KVHZ5-47i'jn2%DX[_!3qBJ
+%ipMD<="&oGNXKKb1,(=HqHB#a.3l0\Sa*>Z!YQ$Wm&Wj'qCrq(/P6?kYY7&W6A"a5M60B3F(sDWk at Z%ln/Zn<9URrSNS;I1`th77
+%.,sH!J$ZWTXcAt!N`&GCg$08T=0"2E@>M+-#hiC4.S"1`Tp-n7T3&h:Y=1*1 at 3kqPM56N$$RUe&IO&u3N@)%Y>!8i>/#BIaKsHr^
+%g.X"Vdk)tTogjqkE_p=EfiVJ/i.6/*Y$"7#4HY82P#'X3O/S$JQ9f#.dmd#R"InGo\>E]LiXUKY7KV]S;]uA-`JZ0UY/FJ.M:QK<
+%$t)@@$4p%H!js0O)PYH"M+_,?QP%4C=ODdn236_A3#)]jMQj]<l3&@I>lpOX??028'_O(U!,].'e`/Dfh-/bggn at 1g2qfXUR&_"&
+%Y-2F'+ZKoV;IP:e%qi^g'fT3V&$qE^'(a*G?E51+4\@L=B+?8'4J5HPrn=6lG1(&]C3V>1o5YF)>Th]c;J-i`;=jR2YXg7r'Gf4@
+%WI?q49!+&/MpATE*(OkOA.bUk]IhjK9`dZ>3D2Da(2ugNX+loUe=S6/-)C;$Xc[9,HqBVM5msRBC>Y#jmW%*Nk1Q#5C2q=0-REuV
+%0KUk$maqAe!msb1&tE(+,,b._.rS(Ll[NsBHq;E18n%QIrZGKGDFS7G at nj,s at YJ,D4/QE`F;c"Ug*irE+h1 at TTU5/oqm7hH6'`CF
+%"J\J>[=)LeNeh/Lp3f at sglMj-25eGqm3JFF%C6eE"C%;j"i9;pOYbC!#=DB#3@&grnh\F>WKWdR5Dc'Q_F8'&"u)rm'c#GC&t4Ab
+%`K>Y<do<MSIDom(P-)BqQ_l4l>&?7&qJJ_&+ldIhb05Hh3g?j2BX2:!H!t at DX9sB[TQoIJAGUD+:7ums$V.DR"L/Yd[2NS+l2`2f
+%V3NH_!6&DLjrcBn3MI"=WU_\7PU'Y`g9O_li'aZJ>\St/P&2pr-UWu#bjK0_Jq<1$ehW=)Z52A7>T9)>6G(CE&bV at W;X.(VlKg,;
+%m`gB at UGV>Z)K&,0T%F0sb:(WP$:fd%'"E3p)3.gXeYGlQb<W&P*3;ME0ML_!N\5OS6NO#32nq/B:aJ20/\8K4p+*&bO+\b5&c.la
+%K@*gIj:^<Q`E$al/8Y-IF*'tMUS9Nl`=,#8cI"0`':A87.H`E)UnbSc4Op,pAcgR_WMAB_&M#uhI<&Ye8u3:,b+WJOdDDKQN;T3I
+%U:T\VJS((28.U;"e^<'5Mm$h3je=J@\7NKU2Af8b_PMeb[IoY^Ksk(o352V!lE\WVNO%&!C>M"mk.4*cT!!3Ld'-SN+`:/+hDe)b
+%0e:CT#DsLQ_:`h#KuFg(VZJ!j:6_fjUB"*u>*_Xf,4-lB'9*.G;^cdqFn!VbBFWCCNT,t$]Ks6k]]c^B;$Ak`N+t:HK/:<#=Lb#-
+%/NbOu;012J!]!L9[u<p>gC.6MC'7;fOfumeki\ZJcql.A!,MmVV4_S#I,acM(*gWhK6=4+knc7*j3.p=Uqi8&,bbGFcBQPA2aak%
+%?@74_+I!2,>/@.BY_KV[gc\XlNeYHG@?C*p>6-\W-08!!bc._#!flUYL7a$%e:n+WLT.tC2GO^UL-ZYeT+_sfC/-gUd&1E+Cc--_
+%p-,9aW(D=Q6oO1+(X8nDa/2Had6tW>mI(1t<^TF86/pLkhIS1U5IM-VE^]E:"]#EF2U]%<Y>b;>8Ae.OmOb.om4BW(#`.RTK<)l-
+%.nn at i<P+9M$4GXJ<;5=\<?gNR1lWlHfF@,#@a4]-ghNa%>K<RP]?*r,S754S4_q$<E?#FF^p+>NJ/4RE at Vhb*B'EkF,X%U-:":pu
+%+9lMdFQ'Gtgn`NNih]cX0_:.RKHu:.]nb<'[Z-;&?;hVI)I&^a8hH'WHSN\FJorE^UYCm$6"3K at S,l-t2%bda!biGe<=IeT4^NFf
+%Li'=mpp?BLHT/7;g9=ot,o?.*<([VEP#^".c8!T7rC&8\eA#'e)!2g[2/#S!5iLYJnRM0#!Rg]QgXXS=c'!N2?P3BsRA"TUGFKa;
+%X\-!WUePX_PHbt>VF8+S>WAl`e%hUnX<T=?;KJ&TVRe4,jL-eg`k!]=9@@:[p21JKMO#M3*tstuN3&#2%Gt(sZ^h:O@>:S#%@36c
+%(TD2.,SO#P]rchp@:Yi>"#epC:!CXW3LtAkfm;[-E+_nQNtl$O9r4Y\QldAj$4u#4%0sk`.mltVcC3.n'c(dm1h`"tBpQ<jMte%8
+%W-)(;Qp:1`_9o9lhPW%RDb2&_V2Z2&GLGi:/3DOR`)c7G"Q<*gJ/O/mDmq'-qucRaa["dLHX=N&h1Nb91ikqK4j=[bbcXYU[@(e\
+%)i6:_fi]UIbhA3b<oaPDih6N,8eT,4d7G/g']*4$*u8RT(5L*L<NEqk:tFL;Ss\E`cUJWU;m411\*YTWGY:ra=77YF;iAh6d_1t*
+%Ob0N:79CPH^hnk#C8-!*b>&u8,)m%_=QcdO$tMtE;e+BL%+a_bfsE9Z:V9_ZA!)a#W_($JVb/;Z>2%)6]K#!QMMoVsPg#L<MEB$R
+%9gb09;T#7f2Ql=MV at Z`d^#l-u)qY'PjSt(bkX^$-;f\]/dN%FsfEB@$*%Rd>X0=M&Q3Me19bJ+%LEbGncFVbeW+re<1p0LV/D?Gm
+%95e^F#P&]h at A[c2*Nl6Y`ts)qM),q6pM,4MAjaU10A8D49C+2%Xjf%5nf_6HU9'&raK-gDMSi;)JVt8EAC6ImZ.2.k70ofV0?OAB
+%!Z:Q,ipgugj=8T3)>$=dP&#P%lpa(T=pA'"LbB2oH7%nl<h`SP5`cbl[38Y_h*hg9oKZn99jG3<#":ag!g[H95^\^6DJo%5J71pT
+%bA0-J+^+]f<)jjCpl%`^%Hd!t]de#eQ+<5Q,'Do0,k$#Aj9]RACO;.>M;"b*%5:Vc*E&-u`l)_:=]C.'c9Sq"is[K8hc[pq*4HVh
+%$A4^=H)g'a8HKZB!L+BN,9nd7+JfN_.c<nQBk?Z9(ae<9ljsb>H2(;P2k*8_ZW0`'9auSW_-l?j,gCm7UVIEu)]!L4$X(H$c6Yn<
+%dHGU5R]HtJafJtcL`pR_#)#I+67,c\e//gXFXlk\9UjCt1M+5uTZSOj/AreWoNN4ET'=RT[rMb-R4k#;enRst;D]r49T;%5f4#,A
+%T/?_Of6dSQJX9;#'Hb2uc>3OgDZ^l?L`'jqQ&-_m`RL&.jt.+=0Pog9;.[f+VTraRV9#WD::K)>#s+W=W#mV9_O\EJhcu@(Z=kqU
+%B+?1#/Cq]Jk\usrfrQ:c8<+\,(`XUVEc)Y_'1Ubs1XTce=A__+Goq*2 at 6<#h!&"OeMFeF!,q^S95%Pm8UKnC8G/A##&N83bSWe6t
+%TWg:NV/6En32ST8:1k,V$"Bm^W:D4eTf<(Z,hCpMK,W/p9LE*3c(_INS."=[U!O67 at HNTlXJ@L8Q_5'm-0(PI\Z0mPk583K4-;#T
+%FfZAV84I(X.'!,/VUROmp,)=,;Jg1%6IMUg8\BFnORGY:fpPSXQFJiapJePJ65Kr&o92#^Vf:(bX[(DOM!RtdW06[e.L>sAeV)pC
+%*C:H97PsQj]dZZ%WFFM8a&2b-EUl(6QW.j#iiGBLE^`9M)&e0mN1^q].?k.5h9]$lQWh7AmYou``'";2LKt(P,(.oh;3E7REI1[m
+%[aE%W3,,[pNQ`FhWcDp<+.5r3RO(fBP9u-30g7j:V=Z#n79E0Pf2r\:A]mS:1W3.u=%5NjLm(Q%\jCC1K`kSPd!*q%Mp-@@!MgQb
+%i27HM*H70>'NCiI&W8mm=niug_Vn)H3Vi]I]m&eMofB5Xh[T'>S/243JUKZL(\ABO'rN'g_grLN2B!$Vg7i/&o14U&`UU^hWi at eR
+%k-rng7Inf[+/0mT<;cGphmI'%7ZCi\,.0 at _\hSqpW7u,:_99_V#4'2 at A\Rq'1rE)EFEKbfR.#h8qb.79TC-3n0e7t"l23Vj&9/$4
+%eBrYph'rWp3&)DKFt0 at P".t8A3<bpG$KdR2ee$PQU8jeh9M(mbp(Y;Sj'VU/E6>*aQH9`.&tYCa(_?qgL:rr"E=-4[8G%dkULgET
+%XIHN4VPE_M5bQ^ddHq'''8+^>B[\C9S8"%+7</=&/"F8'FYKb<&_P>lOS0o2$PX.Y_hD^m at eqiCrt.MQ?f^1-kAn4KpN_7&[@pjU
+%Nfusj=Z=KKS3<O_]/U!c>F?bCi$`q=%OoM'J?Z>7SY9Q+]Fl_V*Ck;$R;hl`[dS;;63psYF9_S$".=J=PhVah6^K]C-/%GOp/^^B
+%QUS0i\M;;$GjlFn3b08_YJd`O67g!*:'Xl\T787FCu?r]+l]F2,-n6od?F`@!Sj=$E<hZOR]9UNVB<7QbX?GL*\8-bL/fl)(/R7O
+%i_).PoFDp_YaBj[QKO&l!Ta;B4[YBP;RoWt4 at b!GruG`)d-8#n1-<lYe+#q["0$1^KJb1ei0=]27G]es`m^F*'$:]YLO_[Va&:5l
+%#&C<D)!08R,&i=]$(fkO7pO(9W"=kc#A?F!,nm3#W!E\ahdp:HmD.^-4Ib\'N'NOAAHc5Qe%lgj/RJ[L/J],g(NMYZQf9I`e``SP
+%<RYg*hffm at Pb?8kZT.,kRC>Mm,H]ch0";S/Y#G,;Ir6mogC6,u)B3#/gP^$DIn3s&m.o[nI;h3/c+Z:1 at U:aJ4[N6MEgmFk0$ES)
+%L_8m"(.)RJN<QED&dI)/:-[O%&4mpCK!`6hQW%q0hPn:2M"ZN0Bg at 9=;2.KR+(H8!dtUnYaB]Pi$NT6OP at rIkL<#q^pB(G2FcKLf
+%dB)iYY.._a-pY#<nMR6=h$6AG[iV"ldK*8dmWk&:_]_uhnT0l7Q'qu1*@)(AO^Z]$8+?c*Roj)sls6%afl8*mo4J>)&%64![#t4;
+%1KR,:A&boA1$"/4=jU2#a5lXY6KVC9%9^7Z<2-3Hgk?6'=b0WHN?n5/6>H^kOl/Qbk_9C^1Z1(4e"Ur+h"Bjs?.-Zj3VLC\T+&8"
+%TEM08 at XSF*Xpj1njjN'=LBm/9G^uFQk?OLL="Hn-D`qauQratoUgENdh'8VQIJ!>'6bJS,UUQ>khOFYdGcTIXktX&mo.prV]\+qG
+%&?/b>GdFmF9rF2>EdGE)2Kjb\WZ\nS"us at RX0IOPYPS;uKlD'&dNq-@[^u:*J:9oZTH.\sT1UE'ZR1c0!+%\$MO^<5\mfnY8T=ig
+%2!GnnrTWt5TO/6Ye6YOF;>XD:hVCDQ6,95]U\K3`pF+j5bVSL`Fs&+Or"Ms9SB>,nA+BMSQUNC$$Q.G^RYp?3J06 at nQ<7?f5)G4!
+%jBGU%>Dm2JEJMFNmrHT+jdgc79A_GRN!#HtCeF;:W2V"Db4J$k_M?8c+TCpX6Erhl.h;&/;=C(T=h^ZrOC2#n'k0!;/@8#/;SZ*C
+%:-U],83T*!O+#5N\f!f;gu`p;N!O8'@>?&2`2CW$TeCpp1SD3+`ou(^`ka^tC*0O&=MIYWQX/LmBL>O<PuAgFSqM^q=HX)c=3b,'
+%7aYRoV(l6-\Kr\,bLI((Qj/f'6*@1>[3+d[U:#<n"<4$"-q50 at fK.6=nb9Ha"42_s2oVF9_E\Y_aD#ce@:0jBrV%QG6f+;M<]!5:
+%mt\T"@lZ4FKcGYXH)RFh%L]f/JV,ENl!t8k)l*h5aQOu]#)-XAb"J0%CGt9]9P"cJ"gtB,5-5G*OC([RV4FP?W`:pOe0?ljNbh0+
+%lM#7%=a,%L=5#N.K`Oc=,23kr9oQG.8dN^fEhZ3F\/QTnVS?]7WMW1*)`!>'R^X$3P?!]*-F2/MK$6++7k+8DO[)oX#oe+(bW&$%
+%TFfR_iLq<[*)Ug`90&S6C/u5D!/W@=FnWl14tCHEIN.e=.YWhV!D-_Uc^/W_&r8"Yh_0S0NqkjNrI]nto!7Df6e$,l*1O^f'uT\X
+%;@\$>U)%-2Mhnj-]^rB)nJlce"BaIdk3E<0-#6%HQte at UPSj-IE>(=#;(]lp#]%jZ.'s]/5f;8-XdY=V(^qClf1h\J1j&E'#0Z7B
+%+.j6Zragc7ArBY7XKe,&.L!fZHMGg^3*.hp at 9A(j5eO,FKYml0F'M8HV>-!U"9PD1hGQj(,TDdmN9DuH\Lrl3J_BLem]R$mSP`oD
+%O7DkhP-\Ln6->F at e*o72^mhU!TL!%+N#dlkU;N;[ZiZ&m at f]erpLnp2'VKn$0Q>eYJ<NmVMInWR#*pd/8m%,TP(89[ajLPUB*W:(
+%9K*5:FH at P<>>AmGopha78$,kZ?@:0D'u/it>"=JgFVj:OHJ"on*]B4+gMFnDG9l"JaprEMdd%AYNE#?s3MNK62QeIBd;0i1B#W2C
+%mm7Y&+EO`:AlLVeDenpC<)*NdSLfG\Pa)iqT0t0RCqYu?J2It9Hh'X+=sjXrRD]SH/`i3a^@#s$`d)$=hh!%^'?\%dO/QfJ=]ktP
+%.\^GHf14i['M="9 at qAgnT@p8C]/e!A&Qp_oet9JSWlQ\I5BeKgiNPm`Zgkmd=V0EQbn:f4:)/2BE!cmt=33tc+Kk>&W:s&]"6t:2
+%FN_PHBZBNG`rNKhQUJgb^2\Ns.MVoMf*0nP)\?n]QMkVsU1]*'k;WRsg(-_?`Ld70W]#@6:;C1="H]eBMH4cjNHl)rAD[WUg-/cm
+%`CfPr"?hF5X7)99U^8QKWjO*0*7_j&fPU-5DZM`,]-0Mc3/7H<n/f't,tfD4pQdo`j7#A2*F#bPg_Leg[b3;fV;gB22_ZFV!'bc#
+%5qOsWQr.3$5DQn!'1M4fE#tYVDI.W$?Nd72Aph]$$Rd:&.3\8<bZ^ubBVT4Jgsc:p3;FG>gtDSV.u9dFZpOR$l:Huoj*o-/A4@!n
+%MB=Js+'`,_dIeLrYRiO*p0T_a&8 at AmN--p%PogA2lIlJg$=ZMZ&6*Oa]/\\;[F$G&9ucq'I+aL`&U_9YK>#77rJOcjrEIRgMkM(G
+%65o2Ep1%`O*Cu?T9p?Z_OWt1E("0q'@Q"B(Da3_Ln$n/%&Q$p^>k)$d+<=;?lUa)X81Q!+&+U_sa!0RS9NO3Q9UO6jGiGSR>9.L[
+%3!b&/\77"m#67_o^@;RRIrcpS;&M*hR at Nqr3]t(/-L/A'd at Dgh"2mc^X.f_C6W?1S0d$/tKY(h,B at IesHbl[(41F14Cj[3^/a$4V
+%hR+q!Q7]fWV;NR5>hV.\BSM#o=\k6n76ZBR^blfMm0aKCd%,0i4"dWsDGrY$ie(ZLh-Q9&_)&[2?A4MdZ[#38S at Qfco$?1B\+DuV
+%h_*'sE+C_p2*,_8?+&GHk:iQ9hh*JN@>?=NXK/=kc,_U%TNr#<UM@'Odoh.1Z2mLj3.+K1H:K#Yb_*#6"3nESs*XLUiG,F1aKX"D
+%8o?Og)n=^j)%1EW=m-Wl;&Pe/cF(0e'U#pUfn&#]p>Z><T:JdZ\@-f at c_>E['0kgDk(K(=b8\<7]Ls&#\4JHl8=FDlhp48<P"lc&
+%aXXCF5nTY`X.H6u(?=LQr`64e@:P4<q.;4Prc&SZC[lFRjSmCDA6!_]-9VaqRH^5LQD-?X*BC'hZ=aQm=B^R/YD+^H2B")FQ6*De
+%^@3IG,ZQkm(/fYb.[E'N^CNGf>gC1i4'cPUd"?W>R(6JdfN'j2ZI<9mYes1J\h:eAr?f`\oC4.-OefWcgM&5U@?^@LbU&VFJBWuj
+%=epjY<bPPI\0GP0s-Zkf#0PD?7[3t?K\nT,6'uSH]P(]+P,i#6S'Aqn"8&s'(S3-2'T38 at KiaA8RrGcf=JKnO;]G]AGqO^mEY2?1
+%P>Vc8EHK8_0m$s,GB%7.\"36oOQZ[8%-./[dAPs^VuerQ1a'?I$G>Q>Qse-/`jaoj#0IgP&aLo53rfIuHM(t;qC&oX`__,Pe#>mL
+%228d-:*u%i<Kua35MDTu1m5,=)/j52kj;:\k6DKKK;55'A`A at SPLrk/iMcWPA24[)3g_*+ at t'/PY\UG=2Eq;VVStr^Cf+7)MN*$K
+%9k.>nUu:SE3QD3HU'/\K&;.%<BD$^C7M_,-86ZTXW\u(qJ.X!aNC=,\0b$-T`KYKFIif at T/D5+e,sQW8]1LZMhchC%1G&NQ!L-uZ
+%hRQo at 7O^3CT1AKb\GpM&Msan#-j#[lKU@<-2Og8^hR.r at 7.;Lr1d/oU;ES<Rm at Y8()a'ZhOJLZnEOj at 4J+UPML%SYbr>oP*DT'Q2
+%pnBWr0'm at njs4.KjI%NCK:bJ=dMJi-1`U1*cJn$u!C,*L(^!gIY:[636(1;I1?m%lp*cE?NAjfMp9G%B2X0'a;li%9lL6W$,+U-\
+%8O(`j;\?6,bK%n#l7&C?PpY='^`mG(j-cHX%*TFk=D=gTj()4r!N6M#`oNm at bQ1[?lmPWK@=,*,\3L&VEbk6k%%jfP"qOWp[eH[u
+%"fSX?>Z19!k<*jVKZ4lShBSUpp(t3Yl]E3seVmPc=5^![UOk0O$LAC'/e at k&!-TDBC"XC:L,AX?,Hc]bPiCb&PDjFNeC8IO&t8ep
+%!LEX69qG*Ta)B*)H@)+`XhnOBZ76]MQqU%OI5<)l6eQ;e`h5_-TCu91(W\>F'Jfe0qFpMYU,.2N$rn_W6eG-^$rS3TOm\iqZ!pu6
+%GaE:6=s*p'3/'W;RN>qVX#RQJ(r1q#b'+`0,^KgN at 4?B-nn\";-6X-3=f;R-AhQ(/p44ZtS6!1hb&Uu\]3g2256\jS7"(7e/[CQe
+%^];.iU-H'%/tkZq^&UcunuahT86G#L\;X%I#Uq"H8I-aE$Ou`4cntZdUY[.(""inb_mOP*_3PI>aF3(A;NJOS?_lh+*qRkiRu.qM
+%s-m]QkoC4e,WQ>I_`Q;^hlcl#6'3I*@g&dh6I"M'ePAl1N,bPkho;rIAl]%9!We>.k-2@[rM#%Gc:@^=]YOjsD6iejnb+qiEX2 at .
+%_AT.<8W=;"?B7-$cjDs at go*=X[j at pS(4\H%E_^2+H6U(('TBp2aP\gJ+3%^i(_i."EcKeJq7bRq)[tDWEDVVP<_ml`ZmBAo+o2C&
+%oa41@'EqCIM->%Ng#+10]<LM,aTn?2_d,jc1M1T)'OI'7$\Lm8Q=L'E$_Tt8?MH^:oi\ElMSQo:9+H>=R'=%0HQmVUNM at 3ue?41k
+%ZZ6611%I>,k^1/_:=aigXN2N16.07R2ZskGPg#SuK:meuQ;@m1(O'Dt:BP3>34XZ*VU<H'.q$X%kl`\soGR^,/<0_rJJQN[e>=5o
+%JG<V8mBlk]c,N<Z2Z+8NR0`R1*GdZ^@bX at 1L^g&@ngJ=OPA at 7)hLj&?U*,H],Q`S6ILWTO";Ha3mg!&l at Z<l4HIE1Xgt9)gAh(XC
+%3Wo-#"hK\%-n'D*U*G9gAor^[+%MVH9u<)9!th6jIrN8d,C at Uh6hKt<qZejrE>,9Ji+2$*7N9sYj<ZDC9Y*i-#K&"76e/3B)*sQh
+%8OpTA]slJc9S95<D+kojec(-u(l-1c*iP5`lE5R8I*k&X9bN:>'EoV0J8X!>#6a[ENsHSo*"FK1I>Dc!;4W7)keo;U*as0DCiUoL
+%h=G`g9&gM5LO)B_<s'9,W#\#4Oab'Dk&k-QF;QPiWK:P%VN,(S%"lXh;?Eg at 1[Z$Q8Xf&6?r#'l6WKM9,$4^WD9s"5TesYY0+=np
+%cu(aG?r5!,#HYaYUI01<1%?LUNeeCE$_ng6o+#;VGMKqMJST3G*ALSik%^.>$a;a7jk+N9-_P?NOERA.U&udjcLl''n\A>o,t;Rd
+%FE6 at Bb@<as'S1PF=LF(GB99%/ql#aHN\U8H3B=-;Ej?H1lPT/dO\NcCejZCpi!$AQB:p)!R<Tfq"(Lb)$g$DbkS at g873Wu"U97V?
+%8[Z>Q at ca&2Fe\_,W9/f+cr+3B?7qM)i3'+,\^16p'E6jXVTnFi,m[bUf:f3ehkR;<Gdc[%f:1,`0oFreZoKa\.O>dI=uMT'iHp)n
+%Nsu\8;g8*8,6Hat4XYC_ at k5qi7lj9*$3WjUUP\YFWVIuVGR,NdGOhma0&%>SVPC-9ca4SM(lXi?Bn8>pNY?2o at 7FJ8E-#0L&<M7c
+%r.[LmBRBN\^l72%0Uo-EQ?%7q<S*XDTb]8-dNK at S@9,/s#+9a(8%]a-KS at c@WrmbFbapd+/KiV!,8G*2TUg,9bUpn+Fddqs4f^*e
+%7-u8d`Vd;EY99 at fhEBN:/?=Rgn)0Cs[s4(8_u?fYI6<>0o$"ruqkRMC1 at mEYULA7iaTF$,I>E!u7#ordEs<j0e;dAG"uSl25OV!b
+%lr<fD`CosNJrj5F"Pq.3/qEb9i\kap->::%p,=e]Ku"OCBqq8rI8hR6LqSatI45^[mWqq at 7(,?70*Pj`OfTZ4?/VT&CpMKQ_<0*m
+%-nKI)('r=3=BQ\0(dnjE5rUfF1Lde!iL>9'I,s*38Y7#-:hb,>WI;]2,AncR+B&o'HCi#D+%FH4=J6BJ`7IlZ8B:dOkahU8X/]35
+%_@*lG*a2!-AtY*8X2IF at N//7,:G8?EgnBD+==dG,a/PZIq4*(\@/8Zo]G0_*"bf"5K6CWagU5r0aV"1,.?-Y+.T\Ts\UtIP?rL,@
+%8'a<$9(<J<encRhG)QGnZpT_>@sm%/RDbI!n]6K;b[?^+P2p3XjA\A)`3UYmF?5htq(5h0H7m&@0P/)2?8LI+!El4m/_\=HWVZ+/
+%k1ug.CpctnOt at q^dDJb2*-*LX>.W1G-$sVb7em=&["i-4EeT`tpR0=gif&0n9Ki5cE=o);TPu(2ZCk<,:7JDr0^!(/YU81Ib>W;T
+%A?&fd%UG^H;3"9L0si_"o.CZ(7jP(('2Ut^`CAmkSPqcC(,cDCpGdX.YW/60X&Mo];(P>6ge5HW[P,eslS+pV=MS'[k^4<5C$"_,
+%^IpXSS/sGDg#o:o)^p%O]#DQ+EB52br88.dd*U#BQJ'<]5-3M0W`ccRhd*PVDmD)"\i1T_'aR9&g,r(C;'dDjbG#Jfi)JP)HE1f-
+%2=dRVF&dV?Dq]kmi#EkB5)`(sBpr4_-PJ+W`rU=n[<2UC!EEc,:0k._7:R4pk$g_lg5VZA:OtUFYntFUp)qN"?Mj1lYB,qZJYKOQ
+%]OQ,Wdg7`tj]elDeOpiiE+[#@GLFk`eNO.q</+6EHf+uE'5"!.V-r$qoMa=0L01GdBD6(QDMLY]l`Z_=+%We75)bJd)nk"?!p;A/
+%BmQ//he6NEo-"!t4K\7N]h_4[B'g]XO_m"S<EMaZUidkgJFBH+aEZ5SUu-27QRf+U8l^sVrPU*82Y&l>-H=!X:C at X8b#?eiO3[Ta
+%\HF$!d[X4*8Y^:&-Qi<2#Vgq4;[%%fP!PKr=/&iJK10^nErc>qF=<6%3)`WW:.uoH#G8-":rsTkiC^)!FrEAT/*!61qp3CUiH%04
+%A\@.bdRp.&*UZ&DV):E_<7SHi:ks,fXRL0h+4=OUV.T3]-RW)=*f(X=kuMp\j"LXeF^Z;\Xs59#mWJaL%(U)nm?\RU?J-oXKlCcP
+%IZaWDELnXlIoeRL&jW-?!AUOC\]Q]iK7N!">t:b6#hrjD8VnEHDF987ff\%p0'GB.I)?'@jR at 8rq[,`4c?__l37k at T"3(d_=1,UQ
+%>#_mCI0#F7X<<G#mV>3NC7c>q`TD at +_^qrdj5ZOgP)B_YC1>TH7\$ejZ9oSa)uL,_e4'OALMgR#2]WIG3=!13!9=Ab\MXmh7$j]%
+%)pMs70Xp8c(Pe_`cZ/g:VEWtSm!+jd?P at p,*30`mBlk(5h]Qk%JU".6g=?OFOjG<4*UCF2c?B!LP9EH1`J)Xo#pI+\W at 1AG[+Xbb
+%!@H!^<sfM8Sp>.[nS1K"\pQ&f_A6)Q8(Uk:1_(aj<u7kQql5?d5W[EP%\1H-`kB.af`s#-(GI($:3khH:4X$Z8J-EUi>#-9r8Qj9
+%Ys8d:&:I,)@bR9',1)m at QsDah<m)0o=[+SACr$8\=l1IU>p2!r,)f\gh`0O at K:3(kmZNt6LcZip96,0>nc#7LJj!.;=uq#pd&QP0
+%#cN>!)$_Y5h_Q&KEK,)>nIuL;KBCEq'uZIV2XXEV)N/m;%,>@D9<\fT=Y,SpPQT;abf7(2$Xg>E(a<o#^^&+p"1`R_5S#=Rf,5)R
+%\SB9-$H_OC at FE87rYg<a>8keBA!I$s93<t.?MGjW3`4Vc,RSScl7joi+mHJ_c;=tCKWrrl-']sTQ\&9;8S,0Z)A#!=o?A>9a<XV+
+%#+qP,&$\'Q=`lA2D&kr^'?\82R?F at 5C"`>BlY7'*/K9c>#-!'Wl:>R:?Y>h"Ch*hG<H*6^W6lf_&NBm"aLA2YN)9J9Q3hdK+Bn*E
+%-ZV9sC\j7'q6155aT1P52MoeFIN]f7qn.W7!A&%q#$1o0lfc0bnJlX?7JY(<co6s<32K6a!r9\'Gn[FbO#90DX+qJ]:#Njd&T>ZI
+%Kbs3>K6:Z`U0`fp]*OWR%A"?hK!NFVIc(?*I9$@t(OuMWhXiO&K/sDh(b+H-<e.)/`+'-3`MRiq:S^<;VK0'd5)CCQ0li9j=#FP9
+%i<+&Bo!P<C?k"7NdO7_h_rYRF2lf??c+Y1 at FAbA3+I"]_BW,.]R+P<^O=rTO0odm`G#X'oTfDkhS1FiBER8rjm3g1a9LoYdbru.m
+%-m[-rS62+r36)G5%#$""dZG<S_/!'cgI.2KF)sDgH2$<3gcEq'(3A=PUrCO;mVHaeB.h!,/Gjt<Fu\V>fc7?'O".N+-Z-Mq'$(CO
+%&7\%H0h7.I3Mo$q at ua1^GWcq;b.If.I94bqaqR\CF58RB4I!-sSRcT[1KBhTc/I at hk\W4fkms_DA(7&oIN/pDRU"+tY-3>/$5B6H
+%fM]=S-FG+DJLN#anH/Ln(!t+G`#[>[n-@\C*b<mEdV9Ui/A)TheNL/X/Vm0DCn7l!/9O5t6`N[@Nl0YdSCg6+*X-N4kt!Tb\N6'U
+%mNte33P[m`q4N1KL2u5-7r+GY(g=72,t*7Ig$9SP<d/NEYe(nR.5<k<?<thZYI'/C]jn//_gS!>P+IatLAgIn8Qs:%ea;ZMLE9f]
+%DV,N=g4O7CK0<uG=I>-@'dckE5iGBdUuGXDe*?b#NE+"$368g[dCI">%(s8$-KD1FF at Rf*Za?dEh(;/s3Q?2&RQoP]LD;.="XK".
+%b6;4CQO=3PC:(RuKWnX]@!-NBPmkrQ!8]M3"?i\.l+]+!I-+G].k]q=\VP2p5c4XHe+Ks],?[Fq[$@ICja0T&\J"13S;CbPP``b#
+%UUoA.gCcYDT=(oP)PBF(<tS@^U5ZV)0dUQX<N'NQ:nlE&Tj/ub3HBO6W%K:o<<3R+?(n^)$5NZ1[mMg$BO&C8mL,(G!aa12S_\A/
+%!]F\F[92!`9O>k=%O#UWEG$T/#XV0SWsicFl,W4e`fct+6_^Tb2!\!%5=VZIRKW2OB5_:2A$Y>7B/V64($"t7e#0p/MqlO+qXNZZ
+%9N`_"Ef,(@=&Ig':/!\N,'88A)C,m(V$jRTfRr*!=u$Qji5M/:-B`eA\A@)c9`\Crg`3_,*"iIYC`mQ%QiU1q"k%f7R2#$Sh9s3!
+%X2k\mr>tVngRd!/1E60Y(s4ba:]>eS-Bo>X?6o@^+1*^T4#npnZa]<=o&_r3D6h$5]255S0R]Oj=<#0p?pQf.`;P)PK*HVmc!+nU
+%?BIS/=ODGSTMRBI]2FN$0k4nMIB+:4emY6eFKkTS(VHU$'U:7('qT,(8]r(50:*i\:AZ7n'pp3=;W*Z*k*+0q!Id(=<Y.<jYH]Z#
+%*-_7I"s>(h2KFI0B-JCI(nH[Y%X8=$^\=<-fkZM4`0H`PiAIRlkL$SsK1DCeD\tDY=6Rko4(hl;.?o$,-<i)m"':c8M-.kE9'UrY
+%[+L?C5q%o<7]G8[E$]V!4FB5P)J%8mXRmX[aDrXVfoDhHdnHhSZg_55PbRba%?l=bR2U4(`ij2*B,9V\DmlBm?!/E^-(;Wi0"\5#
+%K7aF%HA<"JJhTIS.+;%.7h\/Q+.RKC at _M]KQmOrjjGkEA[Hkapk$eXYC$E!5$8W1?amBrR'Oj=\m1JGc.:47I9<P*<Q0ZZ\?E*WB
+%1,C&rke;&X]IW7LJYZMDj4hjoL3t)/Y)8dE)N[r>c*_9IA`_cu11(G(+iW4V;MBq"CH'hQL?\jg,=nT=&(W5JAG,lNkp=18 at j)"K
+%/3<4e+U-T%;?jA0b#H;/Jr3f8N^6TQ?FYGaP+^k6i!kc5"/T/+#X%NmYK30n!*. at 2%<:62.Krpec(o6;K=g/'#[^SomXsts(@?*r
+%g,;9^S;fFu<@Y_$nr at r>>K)j3$f':3K46?R$*E4K!m00F_8I#`f96k+OKm2n+n9kXjBb;CMa*QqPD+396u;>iac;er=sCmMM*VZ2
+%(7Gpd,ZpAMF]2+T`8#RB7)E"RjuR+9bUjj1iZ1ODYadXI>XT"#]B5&Y=sa2?nX,r:drH)r\P<X(iVM6N+iarAiLLiS84f"jEQ=(/
+%/SFO>@$uEE/nK)S8*`rta1Seb$bYi;Mg7Z::ISh8<8Ze0=qed<P"C/urlT*hoFB(N6$mat%Z-kV<47gpj#TeEN8iJ(dIcG4bq2S&
+%RKolW,2q^hN:'C3PtWg`OYFa3YdKf!gJKcR]:';1;=eRL>@Ee)QX<M.02oCJR$?LP/3,FDW2QEGmEIgOWpGn8(692kRIG6;oV+s[
+%0i;A'qJ6SbUQ^[P`7usRFmN5bitS'GCj;Q_^Fj]!K[Y4AaqI78Hd:h83U<>!`fk*RQRkWL2O.$sJSF8CR)!gGT58Z!&bkn4G%;tV
+%mI'FTAt`AYOqOlUcFWEBo&%LuO?!%^I?_#s_iEHDc4kTO/!5Q4bsQf;L%5o`d74S_gp+aG/1\Gkblo)i<B9"q0M%#`elj$;A>.hc
+%!/*3 at LV^\#W$@R?6pnt%=jh<R-\J:]-\k?'kW"uS at _a7kS"q3l[;U.8?8F+SHlm4V&1-_LHoPl8)Qdjbs*;Ooo)8V;WY at sJ]+Fg$
+%mVom-DNu]:G=rfqZ=T31<FR4Fb2V+Kb/l at C*C%7imup8oKBM;`YKlK.oKdm*V=@#K#U)>e'h.INJQT.YP"gQt&e-/eX8K'!(NED4
+%QU?!JnFbj9n&G$:7Y%lmi6ED9m?m\_19F#V2[J.`8F;U;CQ%*3_NpO>PgG.HF!8D9*t.F0YW#BIe3`]M1*U07)(5aE_SINV9*hSs
+%`(<2P^r9er1qsiL9?"=QLNbJ)-`^PZdl<7<&!CWW$MI(K&p7Vm6d_gt9^K'kDEcoO`%+$NM(li+B_R?<?tY(Y6S>uE^V_s18.mDm
+%N<:\jLJ>4=Fmdh7]/<6E3XrqkCpp"Zo$BdWr+GHKq#5HPo.+fkB/3dRU8`LU(pO'QiAEE[c8=Xad=)G=0:f6[8!]F]7N4BYN$5JO
+%%CECXO[guS*]n5G;`8'1XM&0S$Z2XB]k=bl[o^#[LRO0Wff!3]VTYN9%u&SW%/ZLa%\=j]aE=Q'pG)U^be`k0r5mU37Z.j+h(TKK
+%<A:L0%J9LM9Qjj*4#gNBC.Sh$$,IDdim/1.<apZ;\`Db]OONB;FOYfFIQIR&+FBk/K5e!T*"A#'.Isqg#Wk4Qfgh^$1*)?+WFAg/
+%VJelQ*EjkYNC-%WRI!C+ at hkt&?o&ONeg>JVAa+3.SR_E.>"S at O*Y"A&UUjik37UGMJm<_^.>b2$<0$qu4qX')-lfDP+T>c at 8U&7u
+%;?#YpODL%(+mDIglIn0$mRLo_NG2F7mjLnK8j)Et0YC]Dq0)QZe&1<k[nZ!:;Vp4VFldu"!\F>u"E&g.;EUgFk1Y8$/@at5X,i<?
+%?(q*;Cj'4EnsLmQT3c'>SIFg,Tpi>NEpLn1(gKA"i_EQ$@$ILZ?O@\pgenFW.*KGka>r;b4FiB[E6qJX&OtV4MN-KI>sL\L%eS2j
+%-E3HHCD;CL9F[5[JuS`_Hm;O^pS=X$NH*r:0S>G'"Gb;Ro#:^D_cOQJL]t9($c0LeEL':)=(<T05V.R.Q?MsF2,]ETdpB?2#WP'U
+%H-^FpkNNKm;)A>d#m49jeT.-123>aaRAR at c8o0!I:9e>775uZs_:Wc*+KDiRU8 at q%!h#fc/@gBu<C9HtM^sLo;_+Yb#0r#*<!Hso
+%:i#6o'1QEMVt[$e)4oBWDt3S?:J1p#T>h.7e;*MVgH$pYrqN$"62,[/8]qc[Hu/g"dYGku0=r5q>qeV9J_pn/8#5dcRI#G\<ZkI"
+%a;Ad85^%dJ&+2q],2\Ouceg701.H>6E30f:aWm@!@?KtbMMK,J,^@oq at N;^0q&],Qi7sl3N=)up&gA"KjT)DoSCkZXiiX-b)(LCE
+%- at s/,Zm+on<^e*;lDpm+FT$/Ad\H5eliLQiS(3^K)=>c*]gJ.)7d/OUADX>fh3f9k!$AXb=jb]E`sQs--*7PlC4#Ah%]"TP@'t$R
+%XW1[YiLN<a\<nTsT5ID&0(WA)\@PRuqY.nM6F0EHN7;;+d^#p#C(HsW[*1Ye(+Q26;1s=^_rp+_Fd`dmdtSGkeRn%S6OMRsM5%8C
+%1ZbX+jkKhc`&[<s]e<8?@MVJ:X&\S)/@\YhTRUNtKl,Yq]neMbE:0*";g\Eh\ZK5QDH/g(5&)P:O"$P(^[>r0CfR?I%]+/F;o.ft
+%j,rW-dcUiZ@&64pBuaJeihm*hjEQ=lpBl(S<HY^]NnW at R(P_!:R$GGl[[1^eI:^H;m\]OBWG9mGk- at 9V2l:d7 at R+6Xi8lD5F7lT$
+%,#u569eN3O8P*<A!"pNSTIp5ZOR]*ZE`:sf*0iN)=L[3!"'n]8UOO'V=?W`n-?>1fD[4lOPI\R0KA[:1QodiH;._'::Xec!?j'<A
+%=r&dL65jtg,L&dB`!bqr_mlkF<7tN2LK4\.aB(k8]=D=&B&jgL9Dg9j.AWiXOcEkc#e0Yrb^!&T^l at CE3Zlf^Y\]q(O:!m2LYWPI
+%(&NaHDp+Q<d:ebRjE-\?Q$=VkI/8 at 2+0Db3,RW466_*i)A>X.7#gsEeDt:f]/8ol^hY7pN<q#]e?mIj82fJmS&sD0/<[Ymi\H-Ur
+%mpEJb/Jr&k?O7(F.HEOt&W^Td*U#<gNf:eP[DEq'CqL0fomh*u+dop/]h5#Dd&n<E9Zi?2!mID?Gm_)V(UUffJ875j58;FU<+6VC
+%>NJn?,bBtNRu\VGJAG\46<+LGQc5b\:*Z;#oq7&$o&fXI(H45Wp$m-)XK6a.dJC]6=F=1Mi`:NkSjPp]Tq2pNni\*JYMOiZR9b%P
+%jFbVFd-,24X+^aO;Wj>M8"*S10CQB"A'k"4+,W+if"NJ\5E<].7O@;h)NDa7N0<5u!WX<_3!aF-MMd[8>Dj%?F#A^aKb#^"pZL?%
+%IDOHJ3bTTm#Y%c1G8u<[\gsa:/.V;1:G9hW)e.UOo[#^7A\Tn1$dj\U"mldLo'=?kXC!h=X]bZG^Y>EF.u$js_!2m9/&cLDd@$3C
+%+isL7\K^K_-lT5Q$1;ae8]A,9muVi^$?6sYT)/!:-4bX)mtTi+XH9J;JW#QkJ05mZSV3!$IK`r7U]<;YH!]1AD>:ORl1mhEOad+_
+%+c\>ia,3"YbpS!!hYm)mhu2A\QNMF/f:RHef/\9YT76O(?i95F?iU,+gCe8rm*";ce*guHl$r^'Ma.-MXRrLiT>18i:]B^ATD\5C
+%^\FT%YJ7b at 32_!#jn at U2^ROUthR.QWoBuYSJ()$egs50QIP1Zg[oW![=o4)Rhp!2372[RHJBfB>.7[>9BW]6q"L4,\<T9`1?Ed4(
+%=@+MWU.T+q69?;S_A6rBa3Z8N*6WVDS^Aj!i2Y-?()BIZ_AlV$<05)3^WZ\>%p)-9AI[sO:u at SOM97&!BR5^B at lrSG1<`KmDs)*A
+%dos#bkNC+uS*$k)-)t#B;4^R8E#RHjJhBb$5"B7X?FdpV$+3gq#.49(TN1&fXs&5jDlcj$@%GUZRHr1u]\JF3CY/-uA[;T<n:!0F
+%6<?9hVi%V-&\TW>MekE3`jsN41^nON4*Y'fK;X1D1MU&4NY[8SblCq'e2!##-=!gGTUu7H;oqkmIVCl`]T!(rgJ9;/U3Sn))&8S]
+%fP4#MEEb3llI1>D,5%2KC2St@$+]l<Q_I!&s)*EaI#3#/@sRT?M!Vot-]\U^KDKn^;pKtkFm-5t`l[<-?nls*Br([31a;)S\03&&
+%JW8[=14W-jeSp1U!O\ge$U(VPU\`m*m[NhChE:98m;jI(RuKt at CAq:l34hWf-_lL8U9SPZ\uAhPB/s[]_T&_K4^%ct/V9qh&->d`
+%#p6BL#/*D6\U`k1$J.%7YSikoA?m*-Frf6NbY,g^KE]@R&=-3k%?=73-fHN:LQj!0*;O2^Hr5r>mm+E."Y%t%WTV2VP:&CKD[+X(
+%16Q5FT?&O_d:29K/(m(M1(\T#bNj6Pb?6>@lg:heQ8q at cK(SB;j`?W(_;(u-1:eFshQ!<k.6u\im)Zjf^,G(0nNM!>Lhfu:kf(f'
+%'YFp6c<bcG:@Kp<E316"XTFIR_JPdpre^, at i)k\QOgDE at 0j!N#*$_N_FG=F#\FO/QnB*LdT!#HA<sPO=cRclfIMj6:Nh3lp(NB96
+%OTFYkf998/d`Uq4N5=b\$/]IpZsFZPD8MPtP[T2C at tIh0rr0?70HTXGOh[SWX57'qn)MV)m#tobP!>Y?<Cei*:#]B:qYL$)@rSrq
+%,s%qMIF9Br:DYQQbp^ddS+<np^f%uiS$ERKD5&&,iKICJ1td"Z)?$bU\5Q#XZKqtdF(LRZ($KLoN3OktEp27Ma!2klIIu<jM(?CW
+%*/F0;+tCg0PEL`I<)i(fG=&=I_rp$I-0??h0)=jECCB(c9N4\@p0X<ck]t.aUH$;68JKpmrNt$kOrmdTWRRf%7@[MYC/,e+^mmaj
+%SM?%$2^e11W7))]%`\IZ!NC'U.b@%bRLVLD at E>q>!]_r8ddD9+G#`lBj:gA]%@1(=JiP#@*P=D1krP7dHHO^I1/d)!q;rsUGUR("
+%Z=$)/XuE8?5=;E"r2,n;J9&)@,(A]O[#M(/qcsF.<@Zcf7pupW5UI^sF?":'(C+X+EQ(K%BKW4CYs at E<RqdLl^[$l'SSY6<$u_$M
+%@:VZb[!Z((?2N%B_`+61aO>pCXd6L&P:USJ9cA-]jd?Sc^/J'u.dmc4b0"Jm*)=X#>/=99H:&7S9#G*A89e"jE&c\3<X-'B7\,Z#
+%T7_UN`n'8^WnV]j,HQS>'Io;@)m.*eer\_Ri]B()3el(-H[I3*gfc*HqPdQm.=6JtN4X!e<loQ@;OP"h<BHBY01KufEk@?*A+Gc;
+%XBnq.d*L_)Rnd,O at r_p6@<c4o=o,LK`e<b;UD5Uq$c'4=$bATB[7Q_.:*Nj'o7W-<R<E;$#Vt^2MFk'8d6sPYbWWMVWXY&GE<dko
+%j_/sKTo^H%DlJ5He;YU2L$#M$lXG&BmXcfKdKgQ^[+d>fcL`=U*bI"Y>>s7cd6Cq[Zdqpb'f.<ASl`/(/0p9GUX'`0jRo%fY+HFr
+%ZW-E6Z&:1c6K1OYh&c)h/20t\l[!nZNG(m5#:g>?_6hl-.Hr:SMQE>DH/X.G4D3?8(q!B4!VNCji@`8hJ-XTXJ^V0-%9Z*\>2[-j
+%<+B^P=Pjs$eX0,XC at 6M<SHEC?I4JI.1;oHG%X[KYL;KS9!U>McB2#KSE(J/)g9V at NEKM(&G.3jp9Z8[reW0teRil_b%X),.!H?]7
+%$P$c)=obGgC%_e0_mU<K00/F_nr#"Al*OF*f7%H<Q;$F5Z6%c%If2V1D6$q8VYcGbBY2dXb!XEO4L#(:E5m[h6Q=54Yk>I^>;2P@
+%qt)3n%h]R![O0d`IMb&LN[fh:g"]O`)-nCP&tQ,XVB3;8NUi>bh#I(]=AE@>ksIEI!5-b6Bn]'K#<]V#%^JI=?K1ike>4[_IYqh>
+%X&7=gY9<6"V^nA<Km!V6RQ!Xl<Jghk^6DUR>3*&-BqN%idP`'YQUY:%WV1.u7'<#;ArYAPs/CRL9/b4P>qkfe1i:mt0N"Im0e8G/
+%CT$N"SWN6eDG%"b';C&2jDb1OBd-ufZKS/Q7OBJu%Rpe#h/7Nn&e$S]=G.TLQBU<#[;./pKYRrNJ$'VIljN2Aq.HFk#!*I:GuiGS
+%Natm8P14'40iBA69Y3=,57.G9j2[;n((,A':g?r<H+]`X[`_E=4Q2Pt*ktrE8$^fAY$qaCX!/0:hNXNfC7s7ifr%+6 at YFjb]*.?u
+%0pW<LJK>71Bf[iOJ9!V=:<^"3eP at mf.9GKE\!Ce,^1Srl.91Wd3c)-(alY%aeU[kHQH2`p`oY5Rn[B4[s75%9J%baDVn`'+YJ:#5
+%e%ab3hu;OM?iTFn?[a%d>ta>Uh5C9(s7^0_hO,o1/!f at NG;iP(ZIdL%!a0<_J0n.,2bsige:Xu3Wk?;bRFgN,%^KoTdG+AM]-PVn
+%bDFemmY\T]"(/IK<n#!WP75Md_Ed661>sOR5O$6f-q;6]ScDDKDWpTZ]3B7Oo?Vk;pZSNir8$hUq!dB`hYm-Y?i9&Y^AQg=n&h9;
+%HP.IbmJ->AknX:l&LM at 1m:tZ_Rp#M6X>eHLp[De0]qJ>aD=9[cm3dD7-/"P9WoBi8`N/s'8]Y&"gD1[,ohD*n\!KJqVd&$QGIL(A
+%'.-_Nl;5K]rRP>ZP"[D$(*G7T at JK3^L]?jVht`%G0+905XM,t]b\,KMJ+qW/qA0,+Dt[Q9niJN&I37'Jrqsqm^A=<P^Ac#7r at e!<
+%G<^NToWS9NhMM:+&&8.^#Q&^-TC7!Xg04>U1lNL5k7=XG5/-r5IjX(F9tg)q^%n at Nb?+Z#!T%o5DgkZ(IXZ3aV/Lh2s(2c2B<3T?
+%p/2O#:t%t8 at Elf!ZIeOl8mF0_S6puo$IXT/mcfIah?VqX\!ECmIUfVgh^pCbd0QoZ)mbi`[(1>B\h[,5_7\sT8gR)?Ee@:T^use+
+%LWJM>k,F2>"\&I(EUeP,"\ST\*cMAsb7F,n2'LVP>*Z[)MYp\L^+--L1\!A=f4g6"N+uEV?kEg1\=k7EUB76=r7dL%QW5*a/K>C1
+%=4IcYd,4fg49"Z\`G`6[H_A6UnbW9*J)B)\JH^PWkh691TeT'5*PA"!g?faA2&cF27SUDJq`u0!W[C(sN]rjr@&XjPj[^j(XEr)J
+%h',Ac589oZP:,Vm7.DJ:,*.GT?i`h#j1:'"9Y/#93+=rGE#\cs4J7Z!(7)IkNMdgS>GZPp!Ep]Uq*`n3GCYPnqr%<N![Y-?&&LmG
+%R/iIUVu'l6[Ad,bURkuf'QM,lWsP&qAB]."3M:ZX<"m^KI*W[HB,+rEbBZBQA3:G2Fa"e=K/_!]6`K&T<F>QW\AP3q0>btLA?#F]
+%[[Jbdi*2k?A\ZPZMPUn0V74VZBD>H;+AHd$DbYi/^?r1dIliOP4J]Jg"McB\6(H at 6qpj$,l`]Rn9qTYmjE(5`Y40'7_JPek[]N2R
+%k6(&(b$elSH#UB00/ka(_6XZ4<f8m,8T(7Bn#W5s`@09)1skE)7daeRoueTb`rU_*766g5FLIiV"L$BGmG>iq+'&`6:AHEWk<<I^
+%fHj0kaZ'39Db]*EL4:"HLt8/\(u.m?-Y^_,S6b>Up+nC]&hj;n.&HQi)n0=-6g=@Mau!sQk6BH*9A?t/>QW?B at rZB,H#5.erfs^+
+%5`0fJLL3PIE8u>!D1Q'XPqAJgI@(g9.S1A&:m']#a4p)2I:3d#0R]Y[)J#Kgjo;?QX-,j,_H$TAW,gtgJ+?=^g1IP.OJ71V9*0-T
+%@Jo:-J(^ZsUp4lU-D[_LmK`^QBA`)8GBU at bLA^%\,TldZ(B4;paoD6rY@%<,n=%,eq at C@@s1`qL:F<2(_6s6s@%%=^o$_N/<Q\:b
+%)otX"0A4iZ?EsX\6YGP"VtGsD^AjJ2r6oTan`sQ^nZ-"]?@uM%h`dS,"6]'\+[YQ21\?Kf9'&/7E+^6KVj('5hH3%2*:!VM*K?(u
+%IQZ35S3A;92AtaQ#7IQ$SabO'gb(O4r;8a(hmVPfBQq[_Fi07t`6I at drN4OlS5u$;$=_,edc9LDGNI(ZIEf:N at DbICs7mGSbJ%M0
+%?H;*h at D)X9j&f[[Qka^I3B10ZRVd,VXI'F:HMqt'*SSSI"oHL!WtK3do8hc9gNch.NUr2Gj#W6.^YG#3O7bBj5!OEBl:s/5aP1\3
+%<1I`3cDY6bR3Dtn4ClD_)&>`o6.gRbiDF$*TV(b#e*K%Y&d?5mR\KB<phL[UnC,'ZJ%<$IT.sV!0+l50r63lGiB=?]bV(gERUZB5
+%2ocHbho=ign*Z)r%XZKBnJb\]gFm1+&3^tberYaZm;[/9- at j-Fo@o:6@@7#%F!NH*OCFoCXW9WL0s:,N?d17uAg+utAFD\B'LGR%
+%Ee%#(hWQ$F4Od6@]]<2S\2j(h%la(TnO>.fGhZ#0])D423[YDh#b*t]!WpuI1T<"L5FQ+>dPM?S6*1Kt>9[oO:`l'C(lbg$$-IE"
+%f/ARTHg_(UB'L=&=:PcBM3>6%Kq-@!H#+KOf,7Fjm)0*VQF*M&HCuQ)p`RZE$,kqu(P$*rIZNJSfHu:.*UJB=6E?Sk"knYQru;/u
+%fbJ3Rm(Y_VWjZlPRo"%2]9CJ>D8mL:<AW8"f9CD)NT8M.[\/5(E at EPbp:+oFH9 at t\r=NSH0r\LIjk(%PMq^FcRO9/<NfhO?Ni2+N
+%;^S,]qCbp^]dQ!!;qm0GatO'H*+(m*8X1"gB!8Ag,, at Hg\"j5oU8#bE5pQ,^C*?DLC1"rF/t50^7ijD6g5Ob at D6NBnFThY*G#s=n
+%lPWO-naQ_0rFte[HjCAD_hTFP#:Q!)YV:dtp6N8a/DPb^AY76O`j9jC/$!`*kt?LIRlQLL/kWNAT"sqVSCiarf71I3Il\IHPW5A9
+%o$D2edY#nGYOO!4g[3EDeCtYo7[<Xts+Z]JMFa0=4kn_m==KGg3K5dHDQg2p0gR9>"V?&ur"l[R^^Zj%@7&@<OHCY<PP;Zi$IOR5
+%ni>!u(qm[,o0DiBZegO"QugQR;1]Z7UA,W]j"Y at Pq^)59h])b+g$t:dY2ahs6Ia^b,8V.t1J"C9s+ZF>nB'qua$S at J)OFeF#?:O\
+%cHd<!\1P at hQhu8Pg]6<OYR1*b<[gncW,LHoEH]@HG<?*NYo%Zq9RLCqRV9U^g)A)_ET37.H2KVOr/^fPBcJ4uR]=/_o>Q+=&jjKk
+%Dg>_G:"t+qNAB+i3$#$*dc-o<[!$Np`Qss5W$[ah85+4jD'+lW^&dik7UJO0-*(;^(LDc*Y-&VLesi;!Y47K=Q_45t6^L%5gu at gq
+%I(h5Y!@1Z'po]8;?oq]R*g at VE&:?"Dp(*5a-A<j^j+O/B^js=bJHOZ"BmboLFjG2SoZ$&Dlh^7BkZH>0poWo`p)"&Z[oP$bkB/u;
+%.]^[ZB5+HE[WoFor&9CeEl-tBf\#1mZkbj8n[O_baR+!BJ7,W+8?'Y\0uBea>0)QjNZ.l&S-O92j#/jnP2:R9hu6+DfM"e"q>?Sg
+%TCQG#b=+r"`FE2U_>L:'k^/S*hV>A"HGB<2h<JMEWfQ&:^1j59k[!JCp8F&/TtXrbqWQc"j7fEhg6k-N?i&D\l/VN6O5H*!h=dUd
+%jM;YAO;+O(H]W, at N5QN4Ns,[CHm2o/!%)KTeCTO.Eb(%>[7;m]OfMRU'?A3g2opL7MDg<4qC9q)M]4%r?^jmip^0W'AeSM(Q&Me)
+%<-=^r(?1ESMb<?/33hD2ag*hGDC at l,gR6MEZ7 at .f6D!CI$`k%WpXpY$+t?,$@SC2mL,?lpq1i>p1^7`Do4(P&^pn5DhA]^@XDI?-
+%c'8E[X]<$[:,5hC>@9qP*#H%fh9U!$8Z%u9fdnk$5j5U at _c9M/f;0sop6IX=$ob1*:&9YNDij7GCRG!\#3M/uN*6(SPX0V&aGJ7o
+%A!:C4?V!A/![*8"1;L?BgZM,2X4[t2\P>S7LT.U>`MU&^2Y^Y'0,d:>L329.>En%WQUW[fnC(eXc)7h*B:$J/.rb2;s%.bDL$4o/
+%:3'4Dde?-Zm7(H6%!pA.e?ERn7XOp_PWgV'7AsIq5Jsf#h3dS72Rqk%EX36^GpSVE0?/1$-].7_4MC*n11PK:UH=P-I&@">*bk!W
+%;/r&,+!-8$"EKQ at m`%E<D2UfG]lMapROK8s%D`#r<_cJ9m\h at e]d![4:e'0\[MIC/W.SW3'`Ub)3>>J.E(LFq(YTF[<..BNk,Pp!
+%huP"aC[MYmD. at F>Wps;]HguiRMHL"MNKK8;F&Qh^2Yd!EA:Vs9U_!`-A&6cm&o>9IXVf2Pe-H`N=phu>n&$Q:;*SV$527/-iMAR;
+%NYAM9[,U4->`GJ0TM(:9R*TM*Su?7]@VN2WeLo#1,bQi6Ih-tkaZ7FI9K/EsBYk^":nF\7qHCC^j;q=\+(aAlbB6/="NjZV0fcLT
+%BZ_TQF4B/IEeUhIJnsZL/I.9H4/HZhY0'@`XoR0*eNYWb\HWe^]H*g\3KZ&J"F18s9Agm+kX^LsJ`^>0.1W6U4,N$(BpQXg[8(dU
+%UPiXob6n5&<_DX*H_E)XBjaC#iRfkVVsh9\PJ]B6b&Wq9j!+fdGfrb__2feCDIkjYar=-?[;`$cqhc0VmXOf%B at R=B2kA+G:.b?p
+%S^JtA[jJk'ELNVli<;lGY)@"NUB8GJq_Xh+ at ISGU_)n)IqOsA67ls&Ume6W6dGQ:2n?\W8^]b'^BQ at sFZk?]+M*%J%N'5W31aiWJ
+%Q0)M&6=`2+i)N"i.$(a*&:%Po*FJ.EpJ_L]SN4rM13%O1<O)od?_J98b$EW/5mBeCdH0b-PJNFN=fH)I;Jl;jI/F\>297)V:I6"%
+%lJK^Cc)GLo[Fu3Q-&BT>?HrBY[MpAqn::O8I%Mtak7Z4F"'hWH-_mImVh@`3/gA==APjb!]j<$F$'D7`C(M_Kj05\NG%#\V'VcpS
+%Hh':92hn_nV5c6pGZ$so:]D%_4lODZPaq!*"WS,&($b">X at S?8dR)qkg%>R1K7ra$5[<!=;^]=aSZ5tN7mXf4Bj3A;=OXm3B_`rh
+%=@sVH5,l'9eqfW at _6I^$"@nnuEGBWM:U9e)e%!QelB>UofhB's(O5;4c)-4o.Wbu6qCM>ndb+-D]LSmj[Snq5(cWgmk_E)goX33<
+%j;Qf&-!/0LVZ@<Qq\]s5*E$<R2)a$l(d3'lMOG$`8]*`\VC68-6+Lr([7;*c(+0]n,jK]bap3LeWu`MuB:&2O$kfN]<*IA%@$XcK
+%EMpjnn at m\e:hsk)iDk4,QU<Qs)FJh&^i>!\?>MVi/B&#'C!85'`C+JhqOnZ+;7(>FT6(N&ALS&("_Emp0u%7Pn)>d.n;`t(TGmF$
+%1o;WCf&G1`)rX_XJJ_H4m^k2#>">[$Ca<@M,ES/PQEn%INtE:"9'$u`fsk87g6PST%#-4aWj+.'<Q<=Y2c_',iD`'"+>Df at cNUC_
+%>/HS%a&_In?N;;.gI.LT#169/+E&fR<?&!(m45U]<Mep3#[JfG2G3JQGlB\IlRe;?9nu4n`bI5L$@_hBD"\<*$ZOUUcr-8b!#?65
+%0D"1pQJU-TMBnq)Z13Yl<9m0'9;PdO8VqL[<6-$'<@oR0\\aCHc<[DY at 32RUA>-Z=>)NoR>[>M,/kL?"l&oR(0%;eD;VuADbYiq`
+%Wu<U$QUo!*9Ie?mj,f8AbX/&D]Y^Q%-UDQ at lsk*jk5)9jS'7i:W!j#S7*m;LF'6%t#PgK:;/SsGL1(EDC9/`j2=W/PZbkXS`6!^e
+%)ohj"\^mQUYW1C at SE%?#$?hd&eD.N-%hikb:o(?J(eZs9_3EO#/Wo at 0p54OCP<(2Zaqq/_`NO_(*-"4q*mJ=8^Sl%1Got4,e0m.-
+%?;+XjDs!es,bgkDAL`tl0u%6[_"(\kL6(CY[mF();MW^Q2(*_6JD4n(E-8A&B$P at LF.jf%)qZ.q&`mDTd7M,m.O#12/tW\PCirdk
+%:/NFnX?P_g$IVnu_I7CHQuO#0^/Y&-Q'68Xi7rrk8N#nY-<1ZB)MRP%G2mj_.K\XNMdC$[W&ust85\Z\)k.'9*&C1f=u+6rq[/=*
+%:$XcfF^*Ms;IS^]W!P7XNEt]Ef'/Md[O"4NA$/:)Y,"pJfnO9X*B-9Of/SmaXTqF,HA/ud^uIYjQ$^"4QEKT at LKeMP?.?Kr=+Y7/
+%EAI7P192^S5UNnAUoKP?KpD]k=-00d5X=l+Znt<MWK%r4)Wgj=Q^!CkYjJPe8T_8e?;^&I)tB^miZ[5(YUu&AcsGEK7j;KKV&5Y,
+%XY28B`I14K<8ReW,TX'T@/rA at V,Sr4k]3Pid\-#15T;H#pbdoq(&9EX6DJm^"E7Kjk8q`u+uE's$<m3[/_ST6P>>6jID+/jjtY(>
+%]G5Mr5$W$=("@p3*pNAgUJBg\8".?N=*CtOF\1`ZP&')S]gJu4[1ItR/V at -;:^9s2c:/Wfps!q"BYZ._J5#a&[aArq6mH=uEbP81
+%JgJ%aPj[a[]8<D'^t$Yb>]%1[GI>ksGC,OrEir*HK#2CsgW\Lmkso?/3EA,2Aj_F6O=EcP3BBAB`?3!\@Pj3a2*-_qQ>d%uf:qK@
+%f9g)8P1'Dpj&Z$4k'Y_a4(:'fe<:527<*B]lnhV_1e*US)/ZJ.lZ2.<8`u5*dq)f*$N6+"-K1"R<mLZk.<I6lk,-SE*2o%#"o1u"
+%G\3*C;L'!=N at GBL"/dpf2rV5d4$Gdo(1e&e:o7tnRT)s)8EPC43d`N&-RLh"XqMWPr1qD=V[<X at SUq\Y3/%TVYIn)VYcnb?8'WMd
+%TMV[8MdR,t3]HK;/,VuhAT`0W1niV8K.SA3?)UuA\qY&ncI]q4 at 59l>^b6Xl)Ka39fkXRu9p#V`+0;-4\PsJh8B.j7`ceB'&87Jk
+%=l12sgIT=T?_ju+NS)>fhIKeNNS;bl+uOP0aZ1RKRKg!Y8Ak`?Vf7f"Yf]ZGTM!NnD<,S6_j#8C,s(puj-0!cW#_&P at UrM&,=o*m
+%OI!fI30HK@'Xp!V*i&fq$G<O1CuF>':?VsPAp6f[bZ,mfo"u=ANML&8hOA*++2UO4]oJcNJHM+]e at h!/cKYZj at h'YbD<^.SA&#f2
+%&jAoP at 4=!DI$@fI0]V@\.im[(;/-`!#:`!("Kj`:F]9.!$YK%6NKpGU-g+j71r;Rcns3d2dk;.VX>%+_--rAkl4S&;\s:j`0,YsH
+%2,C_^M:T22]$k at an2<l;EGuYnTN.hZR]QZ/AYl9h`PK:>.hL`_V62\8og:kUV%R>jIW?snGSQGU5tQO5j4hI+,tur!Io^&Y"_b,2
+%;aULWaF4m46M^7i-4m;&H8aI8'7:?XG%I!][)i;7/20+?'K4ciZG/25R++-bXWp_A5rSI1L>3BE:j48$NK.Y?$ZS(U4CC4-b_hQ*
+%X at SHV$3GhUk:ELOLG`I%7,tYd;s5(q;,F:Agld"&WLe7B-2gBj/XbIg>ct+?AIrKi"Gs3^ZRPI\B_:[uA`_V/p"bB@^jd3W0`@11
+%">reifN0b[N`Nq=Hna4UcpH4NjA!%[OO<.l'<oOk><Q'kBJ"LL;p%d'0eXVAY`c&nZ<kmsA`i5\3YM><b?1Z?:&V#R;lR9r,5`+S
+%9F:(-X4#Q^-9L=6-PKL:eOVa33*;on)q>>R\RZW!+\I-/Fq#s4FDO$mW0H>e#peqDb1duZ']7i3,]!gSPhQ6cS[MQYiJO<g0fP`,
+%2[8R[C=@g"^u at VR\gqsa5LCHi;iI[.Mm7jr;2ik??M]J+!AHM^rG*_K@"NoRH;@P", at ebu,%KhU!_gp5\3;71(MQtdNPem[U\!*]
+%5kHm\KeYY/%D+DCIgA57;R!+IH:d342V:8'QqIJ`6r(6,KF[(JQRm"BbRZaLe:V'#S89V1I$13?e9s/?KQj#Y/nH(\>\Pn^8rZ:-
+%#_&*2m8]CLPU-%n86UrfNsLVLF[uZG8^V-h8<SMeq3PTB$G;:%/G!3X;X at k&c:*\B8O3$gSO!<cCaPII(e,'jV\4JTq?_jW`SVnW
+%gJQ3.mZ:&TKAKj"AN$bc.u1"*YZ"a7T,LWeV9H at WP<r'>@$X[c<f0WG8/(g;FR`3[4_51sWTlTn;PEJ[?lkph,uLQJP%p<A?i[E>
+%9)p3Hbm8SVBdO&bLJ$$6hfO'+@&Ygt?`+a9OteDt.1;6g\8cC`fZ8"R++9%DUtPp[5I-D1Qqn?+C&0(uq<;R2. at A8+;Xq0sB5'qW
+%-H>!O+]+C9=@+8c$du at nhgVkHgLd_:fFL;5 at dN.%*5nqLP%?`IJ;!5I#Ln-Y2OU4jm!#b_#+E=7JBC:Jj0^6*X;-NX[`Nr"lNP#<
+%Rd`lg1`+mV7e&=j=Q-3C>qm+.`$c);a=O69((D*V at 6o_[&[,9m7eFcbE\LB''b0`(N0_bZc`lQ*(rn(rG`1hFJL7o^PBGh9pmGIJ
+%/iZVf'Du.E8rPdL71F23&*Xa.:)hhTWcZcX]&[b.!+Id<"H)*OM3_mc>;D2IpQWU at CEF;RCiNl5^6?VFM3W!4-PbPQD&YLJMP at ng
+%+O6)UT+[F3,0%45s3+1#_!VFM^kVIq8)$%uJT>unEbr?D<g?T$KclSM"8^s0]1tI(g<48X.nakXrfN2HGGjtng++*#MC/Cp,%Ub^
+%bf&/m"J3qq1,Kn,RjmrCV:o]YV%).1$$j(V(bWrVOjkr[Xj/*64-/s08*VRB&!,5Y4bZCXNjs8NniT>.$b6g15TM>@_5c at lh+?>9
+%1+ at k%1$sG<(q]JfAJnH]]YiAU#n+,Ts#j<XlL[-cJ'/MA[X1X:6O=(QMOp69.21ArH,I)B6;i3kRuj2*X^;WYK]u&Hfq:5Who_'V
+%)R^+9KGk at YfT"-T^-"N"j^4I4*6*$S&Xh"4O[?QRWnToSG*M\M?sXV^,j1>s\au=DCj??@2qB,;X<00s8l<^_&>W=p'0pO(m1=W_
+%=fdN_9%4ntS9 at HP5iqF!C*2N\cS"S8i0o^CU-Ree=QrVJ;"]`EHh/s,4iC5Z at MoQAd'Li>7R&!T(%OM4BEi at PI7/GqfhGEiQ+?kH
+%,<gYSVfs&ka64fTh1[F&H`Z3sh(+JMn3rEd:LR"XQ#\4f;JIbN`cT(f:k)Y]Xh82f<)ru@"W(n0:9(;d,cNMP;Pa at H/?CLW`N-.W
+%@p2Cpk;;:,G>6!-e4GG7:!ur\T<u=R/T87uZddeVS"jb^*rJL<:.\pN2.9g*^NX*_n=!#?\P;gWVOtBI8[BXbCD0;M;n0WKM%clS
+%CgRp at BA",%gb5W6Y2O$8e2re at C",ii`Q;_CPVM>\'V^63^UQob9G,oZ<gmBq2B3[C`dSjU)0F*pd8S7T\Hurnph$m/*t)2BFSkQT
+%`d`<PBR%0M0T)a"o._#'q_NWFgGCSNH0)u3-oG(n4^:VMTNu<d-H.*NUsW,'TY:KV2oEpVm5gLWIl!4'onu>5PYaI4M$j?aDR^s/
+%7Cc(.]P$mKkN6),X)*fjf'G\@@:)NQ=h3b@*(Mc,UStI>f=8)]IAD<=_57qo5U!N*cB6lk4MB)L%q(u,"?7-*GS6CMmaWbr[9[E5
+%J,ueLbME_)A9?@2cC"\GC/3Nq-X$\GKuOc-T_\]Oij-T`./%N`fh!Lqf<Pj[&mG]0M=#n;$5_X#*rR_Ci7a'Y$TA3>1<`DF/(i59
+%hZ65mn0;lKTlddf!M"i_WY>'96[2X>6c4d8a_J6W>pQ2RQ*/M*A3_c%i7t2fr>]_!RN,5&A:W9Jc!ggS0UfAEA7dP/U6/dbDN.O>
+%bP5ocAFJY=mW$;99>$)39;*#7^^UO$eXAs3@`aoP;mcum0[6_WaE/R?_c`5NOh^(`Y9G?(J],f_Zf7g$4+*.TTUWhVFUJ(tK>DOb
+%a6d[bne:?nb/`8A.=qdj%o8RCb!k39iS]u+\CA5%4daK at c4S]"83at=V%pGg/3 at l4glR"k%6tUB-jm5WWM1^fitm_s(&(jjH>Dde
+%.*XPL3a5mG-B!FS@;KGXD!0*"+BD)#`jnEOaR*lW&47u!gJ_?[V2i*HWmnp,J\>B9[js1AK7:7f%jZ?i!(8=H><cRA64gHGFc/aF
+%`D2]:MM@\\_UTJOJ78INmBcVe>L%je^iU8UJXTk"c,4$al(h5FcCnk8B51,3p$Ka9U;l8ocCiOfet-,caq(@?mt4]P05dgdC,191
+%Vpo:M$DOtG[:STaNu3#??5bHq-l;N?N%24j?lOo2auOjP_X!2)EmIdZ\omF&E?o"QNV)QSE>#aH.Ac2Vdi`[@lc_p;2Ze#bCA(O>
+%]3RE.49K7i's*lgW\H<dk?H_\Pitj+fY3SJr*ZRK<+E8tOW+d'&_OgLp9W"(/OpTDaV9K8%F&EForHZkRTI7`J1,)(N_P#H;q5$(
+%kSMQ\)na4>dk*(>hUbk`h+,i0mYUR\;,>pn;Wb/=PG at M1G%JG at 5Ts,WCc?W;#a#8CkH8MOU*]J0R?@#A1IhaaJXicC5pbeUKhocE
+%eDXPf3>!);&4(K$=<V<loJIEe97tkDl5XSs3O-inL>op=:X,%_.V)aAW\[Dfd/htSe2Ml9""r8bG,rU+C=kdo8(@[%n;/&-8j4)@
+%aYGS:\8[J\.FVl"VbFW'#'N1;-I(X1%dp_ahd\CnHM. at j8`Zsd/]O1WeBsE,\\`@qb+L7K(`_uabOZ`\dN"I*:39/b]bQQa:;7]:
+%bpaoV)[$Hn3YM]2qZ9QtR>CTO<g%I3<([60hh.I,BTF"`<*o6F[],jYX^E3lji"c^e4^?)b#+F;`u.DT.Bu5D1]*E6Ph=CR0?sZ0
+%QtSl]4).?X1DLN.FU&0!IoP#*eKYGnEFL[l:;NUO+u]ha[fr1HF%aG!2)e-t<XuT<)@PG>-5,q>HPDbfB0!<%5uHPdOLs9;l.]YQ
+%1YS at sY-9kN#GgV:#/LVT<7t':bDW\U/\!)2Y+jmA#Z&d?mO]W1Lf6fCSgor`(.*\+7Q%)A/Id^+.<Wd3L5K>5K=_FWVWtgRQa33/
+%_1dtbZ0@;eAD=V;j#PnB*&9[":qhOh5IH=U4`d;?Z:9oa2hHNa?qZ^#\`9X;%n,PpT9[gO0N+<E]nn8BWS>U'O&!&s:1ns<.Cis2
+%A;L^)jGZ]I\TUg>96.dL8Ff;=q]cB>N1aL91WU"Zj(<cOi.J\#E$$Aah?T\DVGF2nQ(h%mK%N+dD;1kYW1h:00RopB;Nhlck#^Ts
+%Me?Gb*X1BO5WonJTIUkoF8Q(..cK]dS4Xq998in`XR>YWKu6]b>]G'0F[ic5"@Y>DEloR\YOA0Nkm&sIN`1fIKadcTf$QNPY4\e?
+%N'*IY)k8[mAaqY&(p at YF)MNhli?;6/_58T".!R;@FX^\r/t-Df-Ek7gIg;CmbtC=`?3Zr:O'Kf''d[Dn".8^,S3,D at PM@;h4U!]8
+%REf/N$_,+aI!;I at TZ++YEc3^`Vk?>NRaF5Gl<XnG0>&KcS*XriL0\`l9U?0&j5uN,7?,ON]VJLeRK at o[=J.[#"5BgQ>0Ca//PkB;
+%F1JCYHGr(p/L`5=G9?_u0QSCi)T8eJEVY8P.b+#9[u>u9X0>^k!/&C-hr at F17_1doa"P"VLcR#rMB`-W'u;^s3M']Xo#>G$TGsFQ
+%/D]hjA'h'pdYCVuoJE'$,\$<:]E$W4oI4_UU_`#_6`+kfP-S("e/`5-m/u_`'d2m41P&6Xmi)Hg2'^,#Q*&-DL,+pPZI#gi6l9oV
+%j<ee at 7j,l:C`ka.)HAV!F0\+6:#DAp\f6K!))35/4CX!JC0&Cpg4B)QkN$S(bYqN2r/W,/:W,jM<OtV9-8-SGgV-"Pde&PKVptcX
+%'\:"b1+p at 3Mc6?p;8FZC%H\]F[!<uVZANkYN,V4LVd2iQBY>=BWQ#4A7"",(!:^9&Z5r93]"WuFbX\2!4,o\W0M[$/k%\1sTQ<;0
+%30U*t-(Q%'Hb`3d.5uD?$Vr[="EdE#67mCOMukZ8j3&uE>M>_h8]43FA]40@"fMX(Z`T$sKZYa.llej+q#qFFO'+>#>Lj6Q+n,Nj
+%+oqq575n-ViH-#1Fe?P'8MgSiA#'s8Wt,(H7_5M+$^/<*ij-IGT)uH3<D0OERqN?dkuPEVa-[YY8:cHrOh;N at 35o&1C2?D6gX:=(
+%,IeNY)j!'CE%qku`I3nIRaWX\"2m?5ZO3Up%8EP#M`np+)1kW"XFkpAhSXsr-"CsfB82."5#nG]!=_[&F."$oRNJLF!P4$TcNeC&
+%0q9\uLu(e56+0u[DQ,h8;=nAl.'$cUX[G-I]s''lTgfil;^Q6a.AEX'UK at +Od"6#ukSN?tZ5WMg`4#V-e>s?pVG9'K%(s-PnpBSN
+%DGI,OPI$c"P;$tflo5$P=n-*@Ddk;.hfE^H2,CW`6H?Ek_HVu:a.B@>WlC3^h)-k8Y;JeI4!L_VhB6l0W8pKDGNWp8`o<ZZ#W'g@
+%Ha;K]c?r5B1\"k;T_37.DWfr13t?NSc+25[=7t-*(?dQ#V"9U;>rF3f4k0UXICV10oG%c_-m^5"9:H?t"0==\j,F)fH4L,RL-L9!
+%pb:PQ"A[$kL5dLp+h9r(FaWrGhb_Cmb at c7*[\1Y"&-+Dql*t%\nht'j14*<PhdkH=@O.`9K`=!k4<OX3DI7[0C_ at F$,63B-*lU:j
+%a`C_*7FNL;K$:/?-1BeGS[88[1Zi-l6j]Bf6"dUP#=>j6e>19N9_V)'R7iA\KMFNa<"P0&PK1UX,98CRcAiNJ7f'/hN1I-]kJ%A6
+%7gq!a:9f'(#F,N2Oe at M"LkdCG4V^/QA$Vqm-r$4+pLJP+[Z5+''I4Q]]=ujUI0F_j]?-AT"/1?*lmC,d"&p-8N693q_#NP"*]bBX
+%S0VCs!oYoh.eV:MB99O4K6.RJX2a;@Uq10s![e<t at sE/dN]$=c)sstE116oDcXn7b&s-)%>Mt4f7YY%89$81D$Y"V&4IH\OYSuhR
+%MG&Z.0[4Zij6 at 2Zl8\s[%AR<G$*1,kfZK^4TL+5tpU;m&;rA2pgJ0N]LJmD`muA_rEq7KUUe(,7#"QKSaD%"\T8'I9k[[AA@[uTi
+%YE at tGSK(HC!`1+u2^EQ]"0k*),rgC;C%9gu2_G9*Q(PULU<k<nV>DNj\>gRuG1o at KLa[YNp"l[\m?9A=U//AfKniI0(diXQ_Y2q`
+%WO\bD+gTK%H6r>g&/X]\YF(8OSB9.&"ajBlY&tsj:ETu[,>$=(:pm5W05H_3a+0PWU+oS5?P^*8PR&s=DO[3qoP at -rp=;0H[1XM,
+%a/m1ZY+?4;2#pa1og=&YjD)g*0k8pR<]%IhO[S'?7X[;@a?%J*H7lnTk4$><#HC<b$hVV,Le0O72^.Tp%Wu"^W3hueb.!2t/(5l3
+%Fm+1XFcYt4%)A/#oDA>)n'$l,c:?0*B/:1I5A\Igj;pl;4M;!LU6f,fnV1o'H_#%H,se0:)HE;jEXha;QoS1`30?i0@\/"4!5tJB
+%/]#GR`B8^F4$8jN.)*\OYs;lQ%dCI4>%!K$n\F,/-kOP^3Tgu&fe-gr3"G\c-s/,IWI[\l/>Sp2jalZ,[5U<PoioZHIL?<>0q>b*
+%4,b.Y4Xfihe%Rgu/lr0dI:ZRN'2GOsf1$qS(1]`MAMekaG>@8qOD=[AZ4M8r&#'V:q[\gBYcIX,5mY'7+"RY:[Jpdm#X$:kOFj]@
+%p+\lFs)'S'^\l$')mTi1h#@,=:]>0,(rBfWhoT6?drkZ1TBj<[mJ^I2CC'IHc1U4`PQ,9lQCdb6o4PO_lggZKj1jLN4MCE[Jj].!
+%s#0fjrZco!mT)!%LTg@'?eo2]bFcp[iRctsAr:$pm9 at G_U@QkFWJ`-8?RNeq)S7V7YrT'j+WV\uR*E+pQ%YpaOf]a;Dir]2Ru:4I
+%Lp>?9BCa;K&?9G`^<;<IaJOS=h^:*ZLhV3]6%MH.#i"@tWjMFNm1 at 8-<1V-mI20KM6KXGeG<%!Sp2Imq*g1SrK0rndjR;U[IbSN)
+%Ug1dGIJS3=5Psfrf at N69q"aBnr^%+/^?>1tFZ0"6FnQnjT,:V79=NYFp<mNic":K7\./)ppR'iaZLNi#E$I)3O,"F<DcCo"_jdah
+%%Gmn34/s`X%0Zd:a3TZ]l3'J1N^clUFZ=D(L[s]I?21l*/0X%*DFraY2IGNp^TS:>hgFtEQVW,(jbMST*jpMeW'-W=Z-(H2Y<,Ul
+%fbh8/VGa+,;Feqq5b2L*WL5p4mU(%M1LEAMluOM/Z't4A>O6?KoLYr2*2j.c`J>9&j2!2Gfc!IoAZpGj25@<ng+s7?$-7lP]>"[0
+%nsZ at uJ,.^2qtf,EjdEi0rV_M$rr!pgpR?C,6aiS1++F6Z0-<AHSQ4kj+d&M5;t%'5P_8X7@/`Os:^/07n"h6Fg`+?GmI*E at 3,JNa
+%m!h4E5L4fBnjCT/j-')\p<*,>B3'k6B[_ at h@N,7+QbSgpU!;nslg at Tun@[JHq-5!P/J$I>;gmu[`I*0%hR9i()iqJ.4ZoJk'bWXh
+%mC%$/h!sRF%ip,_FBa+Pcen`p<?G$9=L-f^3j-0/EM at C+GjXblk8@rob^.La!C0:60TL(k%^P_C=;l[4+MQGdYdT=>Rn8*cEIQ at c
+%'F[-,W[5+rB.IuqmEiV_HV\&KlHVLMYkY- at DV+p$5BIkuV2[g"G4`WOXQ1]t1J))hkr-\'*pesB=$:Elr)1DE%1RY=lM+f!>@?.i
+%E503DmmC1^qCMr=[HspJjKeL@$3Y\N`kgbr<Qj,E;#Fk3X`Q9-R3[#2hVEc;(U/L-#=$:X7 at -g6Y3cj8`!T3hK%FMuEPE_0HLi#a
+%H0.W+Lf`nLl-unKf)Z)N^CK/2<;W+,?W&`2YP;l>A-(,cbWK)ra/-T4$\/5 at hjqfm_r57N'o63i`4rl[bP at DFO3GAO(%1m7>POTG
+%cUkFGmKhSRZ&?Ghg"gtl`@3V,_kI&B.'>[e!:LooO0`X%`@p>F5JfI2[/;n/.kbV9h'.BSm`],ZBUMG(5Ubu-ChC$nFkB'`I&qsb
+%,pA]nc'57 at R<s5Fi9&io?r*uGAk(,FBeOIFH+^G<S+'q-=JOM1%CUo7ToZGHO<Q`EBKKLZbuT)'?X^HBf-meM4e)W53-&>+W0lbt
+%Wn+K8hIq\, at iqK')tBF%)F2OR5?LDP9>*-!5DRDh6I3'\5f/.bJ=s6Q[XBFnC.#D3^N$3Z at 2%4f'V$@S$ON2$45aT[Y*6-7l?n!s
+%K9dO7`"c]s7e#O4BA/8DXfk2Crq3l<Q at d]-_[80n#ARegs)7CM<VEAC0X%$(h(lIiqYe7d=[-33Ju3fO7boQcE39"gSCi!-OrMBV
+%f'D3P`*"&f&68>Ai6,-L\hV*WdECG$T"?'!*(O*t4>VrL#`+NV.UpA<"afQiNDX#!qF-.NTNOJl*""=K0qq$)n<k6o:"B=7H>oVB
+%a-_EA$fa:K6t)]:.)jXY)a]kEMfHG at _DXJ\lm0V0Ti27D/_^-kb8Z5f\(7Y<E!!BSiZsf$K+Ib[2a6#Ml?@&>6c_fSWVmRB\"o`8
+%b67"FkY<Qk*]u,^U!$pCkV+XT;Y]qh]CJj158YBMa`<BA0qUi`LHQh%0fnb+=VqA%3,ZYpF<Wc, at llS;L#:o[*l`#Ui+%>`H#ZOD
+%LJ`(+!(@FY1i;.I'kC]`>1IY8c9&3FhS%_a?b&\/a+IkpSBb@=\53*ZMj]aY]mfrDlX$2U`U(@P/+<K!P:%R,TVnG!mmEb@^)ku&
+%Y\tuL00]42jh(Qh`BW02l"=B$qQY:#RU*7>eZ.?N!`g,-Td"B5md'echn*X$b^2(N<G$?[%+Xe>-Zg=G_Al$cP/6 at qG1G-J@W44_
+%=Ga5:8LI8G`RrF!74T[>_N#%[<)T^iiUUPPUhlm;&>2d.!N=Y;2oPpC#]8V=.<-eMW)S`+bf==X6mj,F<nI_+UZ]s?@Dg`ND)?M\
+%R^?p?e4=F`mZ/2"CS:nTE%IPMl3#tJD21eBZ=HR%7n5bWa]NCb!\8r[-`k6WTs0GP>L[)/jpJJj_K%XkeS3.cH5gOF]t4`36QKC\
+%88N<O-h"E5\Q(_sR8(^NnFt2K5h-8(Tl0J3NRAS"(*Rrab$&PLD;$N.!j4gh#%tY3GaRj at e^tE3QudsV)VX48Wq].kQT%D\_k"^-
+%CA3?";*]^k^dV4d:N>,>b>VH43r`HPF%/BQW%JB>`iO at hT17`V:?2"ns2;b2 at +=*)'d,t0A+rhY%-7bU'8s'bHH32^2\1Ad=Ia7r
+%*"BjB!l:RiWq5qQ^KAM7EOgh)rN0QOD=s]p;&H9u at V1Qp\9%L9UJd+tk:c1UMBRJd=:@IX"a+mJ@]/-84m?O/0\V*(=0LrUIKs at G
+%aT\JMA!-uXY at Si]0.RT[`Dc9;NR\PN%'Pj<Z5VVePg2f8.$`#`n,HX3fG:s8*K[M7l[7f6:<.pPa*9V3:J<Is/[Yg.G[+s)."k at 6
+%>S!DQ(OC?i-[(A$7VH_oC'q8Or+K'iZFd3bVd[F']/q^1I2P0 at FEb25-f[UVV5 at S<aG,q<T0cA%g>=kl#.t_'6#2P/L1jJ(T5>\,
+%fqNnY!XR+'RDCS4:G!bAYc7I75$s8n&<"^,RAdct]E)Gg^:T<D_.-D/nRB+7eP@@TK[:^YCk\7+AP-Y^U_ea/C-m;_SAQZO&9c/,
+%</qQBdgg-A_cEl_rBH^hhd5eufY93=0`$')i.[VrHo9+.&%[fS`f7cbIa)cM<diVTJVNT/MH]U1Qd5a,YO:f,G[eBrob(eRZs/uq
+%"K#7q^]$&Ro0q,*nE[p8?mHPXOJ)@=\A2fK<U-e?Et_*L.Z;p!&Ckb)a2.aX*32EOq(?8?5"m-K"Z#a1GWRi[I"4iY)/j8pH at FL"
+%GO.0WcJ1!jQk_j]e_R(h:l2j_(pOls]fblYcAt@]H*0u6=_\Y0!,4r&?p9$V>e)ilk?.Fe//EA6U>"qUA0*]_m9%2s4-,?e]!@0^
+%^lf>6WM!+SQelEjD."GRNu))j5%)(pNsLTX`JmDN1"&pGeKGZ%4*'r_j1FsLc)a[6N^"dNrT>j6nF#CrhgPIb++EsOTmD`fPGOqh
+%l(UnN;mfg6:QV=udJiq?8ZE3?.thRM!sa>FNBZZ>hDRGrE]8T)RrKCBUBQ5%Gk8Fs[ff]^m:L8`hYG#q"=)HLrU*@nZEhLmDuW&T
+%/3C\C65j8$G!V3:^$MA=0&QLZ;)`@)$aK&RqgY<N@"XIu'b.WBnVM/fnah7Fg0\W'5#]!3\[.rfk at Mc>nb9SGs,68:19mhc?'FL1
+%pttl437IIi^SG!&nbRB^Da[NPp1&Y4J,8EQbF?QNbnja%ro8M*rF]L:_sdVE=%)o,kCsMuVu*A'_Km/5,H%T&9,)lea1j%JMCbHu
+%F]6=9C>gN\X<n,O7c%YFfK,OC*\LhKKLrH<@C4MQ-2_,kXELon_cU!]A\69:;t1JiXq>;p*$3^U/GsHG^AV47BL(B<orLCVLRUfG
+%J(-ETq"_XZZQ9SecL+JWjkn7l^#]\e`YX$(-hnNCn?H<X5GesI:OWeQ`,;!7`"TUC/dXEmf\W_fVDUl3mJXg>ZcNkSKt/hbHNdXk
+%'=bn5b4K^t>,\[O:u134IFJf:p?!?Sr`YsI(C*SBNlel9H5J<5E7j2uA(gIr*q-rr-G\u.A`4.5+U=)^Wq*5,[Y;fk\<W_q"3'ec
+%BUb-ISD4*mHXk],Vm'%$g7rN;7:$#+352EJ*mP5l.CdbUb9.%GK=+0_6JfFkfIgeJju?LNo";!C>OZq^f$-N`.GDA[*Y<. at n=`An
+%r=gA.@;DDd.?5A_D8=D93"JQdQ_q*/Tj<W"*p(;9@@tM]k$m#kSBiA(JO[\f-'Rt\K=*2p'c\cO(bb&kfT-]+AWKK2]FV1^7aPs'
+%(@;4_B$,mW]:%(b4`4jVjA`,:57dj*,g8=ei^Y`?.F!\2K2DrBdZNV+5(h;&=-Y`Z7Fa@")C(V,DMgDUC=]B7bG&FWS3WI&PDqG\
+%bBgf)Y?,2)I8T3jKKt?cV3<[\gR*eEO\s42%'X4]*_L/;@Mm1QW48l_T5qhXQX4Y*6!p]S\r0k6):7RnfPJ4*ENfF1<Tj<cp+Tgu
+%iO$W3a0K\r%l`J850h]C]mo'+DPUFp.M''7bS>=@\rHud.gE'1E`f([<6^&PE^1Jj3LUb-O`dU/\AGNQJ]s<2,gLs101G''<R<^M
+%/)/EaQXp]fjW%$BS8^$+>h\4d\@\*Yj)+WYgWe5br-_ at fSN#"3=`fn)P$(^l0]auQBd"-h1'06OL4_UIZB[FB,4)<]T8:"^<JU)(
+%03;,W1SE-BTcc=UK;BTATupL10O at N5[)`!^ZH&4nhM'Q3a,TSe885+#HRYFB'QE&4!oI:"q"FlKP8P%/`>O,C5n"G<ATSVt0&!\R
+%mlfV`(RG_l2$M$VhLPViD6N;#'^I`sYra7`d::_UGb2`[5L)0Q4YH'Z(>R_8qa]0Wghrn^7hu!WkAA-cX at T-6ng_e`APMj%,D'VK
+%Q!Z![LJc5@^@<7f&7Sn1*Rh!GiuDaN]p'O+b:goP_A8js<TgZCnT#+J5>F2(4YH-l5.k2>"Y:WC&Pm9RM69f*bs29P6t:P(S%4OV
+%QZh,/gU;/:AEqB?j+R!\.lVt3Ma\kWA]HVBm`RW;Lg,uP*#0"@:.0.SHPeF!&GG.;A(fnj*q.#4&"&$!W,d95NT6ca*$8PFpuq"_
+%J&p?`^\PZcqXiZe@(BVDeMdshfB]'O=afnWZ at M5Bb&`S6)E@*W\k#s/U2IgN]p,9[*H\bO5c%Su[GGDe]Rm[/6)f8;e,W%Y-2:MY
+%q#VVFR6gfBDeo?pj"KLXdq5dOjtCQ;6JHjATP0r/lKB_eP1UY,7'Xno\\qJi81J047REpfRR&MQp25,U0"pb7-$hfnk<rf>L]!Kl
+%-AEdI_7AuH%,ER(&>F'=B:PWd`N;8J=G>k,9tF,E`^8m0bL0a2mj85`G-LO.0?mn?U0:V=q$Ap!l!UZh6#<W at b5<X00/$!DPf?*9
+%o*ts28bGf6<RN'"O%>22;R*=SZ(iU)0FGC5C<.24OM"c"E-T!g8onEVTFj&f(GoYN at il\n`c%a(`A2oA_HdRo=ibH5anCEP=Tp*n
+%EEBY'Y/]!d7f-8GF=10KH6f3TRP_7jW_D*0+u76aW[9ti3`Q)2LCRD0B\pd/-(N4!T:N9'K(W@$gW8#+9`J3J/IBW"ht(6]CI;.K
+%/m2MPR_[@MH?(Ztr[<l]NTJkl>iQpXq=88`4IJUA7ZRt62&@'1/Z;'K<_0Z\937b,m5b,.2^6kpl_ at pB94s*P0<(dNBG^177T)D9
+%`DF2a"H4,<Pmg(#=(jVl8^ksSKbuDT^<g2Z2_n)0=\XujRH2]Fn]SA&N at L9ZA)WC8_ZW)I+TgooaNC2',;r9eX^c4[[iUnkR\4CA
+%ci!ZES?qT=^"j9-2tOqLmC-2//[KpSVdTGQ$HL&M4H*.kcaWeSXO'"8)#.bV6!IXs8#K/HN^dA4U-Rab?t+eTK-UT:^\U8Y<6S?'
+%`6M(,V8dX==/6OM@`.X1_[-i at Yi3D5BZkOh`M.KAIRuF601A\<>`;J[fuipD at H/2eNYj8iYc_`XEq2sCAjk&F\,Z.Pk21M#L9MQ:
+%d<(&G8oF;P#,#q?i]Y9LqH(_a[[Ol$$U9`Y;>DI(Q*Qc'jDCn0pa_EjD!CB38h.5I:oMdKj[hrC'mZRTC6e(P/g8pCCpAs'Smh\2
+%.Fg at c`-e7gWCj*8V[REYEAj5m3*l>]>XI!&bap.-,:4JfTp+7o&8itI!hYnI[4sI_IYQ1XoM?ta4d=`m_eBJK9=^k*ncrksU$49D
+%8LaBA4j)[Ri,!f"\t9Gh-SiV0FUhpXbc/6;Gc\gX\mALf8 at E5(qNmqnAC:9r9qFXF%@r5Z0m$:k#<-d0+![[jBq?[QRQZ9(8oPs&
+%=tZX%A01t$McDPNp.6K/NVD_n[UAZfT?JU$W,OrTB.4=^o0!uXAI@(WJMbPHQW,6Oj9-coLP;W09tY0.%--,kp(S,A;*>&MKnHF8
+%+<s5[BFWfC0d`Mff$W%U4.4bM(2=(A78O_?2iWTUY*@?Rc7M?0?/GJ'P"f8 at A$gFj64kQ!H\QY+0EIFLoOXQ$Dm!:f<R5P2YA+/_
+%QE)lQKFm[BJBs#l1NV5[%aBg&B8.+d(f>-c<\3ab)a.2nDNXPM$THoii;7d+3Y`_RBfBrD[CBIYUF=mW*Um9s(hj6iW0<?MljY"H
+%OX!i=X=9W2,.ojO`N!+b"T'0cNHdsdP_2h"2$j;[V(4*,F7533CVIc#A,Oi/.GQKU=94/acKVer03!o at B`ol, at l+RPVXF=UXBhC>
+%5WV]daY>5>ou=\]?.7RL=bX)^#>5a41em$#1^%>O#[M7SHKbpAS#5<4qd at R"gas1aQ5/,N1s%SC-b[25lVQZ/_p(og6KuSM\!8-;
+%Te]KS!pM3S_\s\K[VaC@^+2_aLq%?#J9b>*?#BX\N%AA)LO:Lj-6N!t at iTA$T?roF/U:D8J-,Bh2JH$?$!Wp[DQ at 6Bcpk8e^&AdI
+%`cUcl"&u9[fOsU\c041fkJ.Td5mbM"GM:E6!p,sLdV70To-h:H^0sWI]j*2o6O0K\pWDlR!EBR\L<6>97VpQ.]1"SD,W-fEm/#pc
+%[k4<f&l;3G4?N[p3'L=o>IC+4rS_jFBs_P7l&O"83T'8MBok. at rFq9_O<?E\>*Fd\<_qpA;mJ[W9gUF,);4uY'!5GE^/MUqQ>!3n
+%_;nXN0i"S7Sb/Zi2d2 at m.qbn_:'rqY&&L4JY[bUF,"<NIN?+aDl5$t;2F7X6,)/hbYFHs(3Jn>ebMEPdf=dY#qk)]u@@-cOF3l9[
+%6\_[dIW+^"+u(K^AReqf8><\C9rt:[[ZaRa>67hPbICTNoG,#tCMq7=UjF3p8PAth^7<5F<YmDi`9h_bBH1W$_[a3eiERm:k*=+R
+%XpXc at c+``ZpNDDH>eD$`,U'?=E.p17 at J&i.Bp:??`ro&0fEfH0%V+,h3:9B_)6G7dZ0L_A,<9t<!f[-4j)j>6j17^A#s?uGCGk$e
+%Bt1E5Ijs$E=aupIR8tV5:r1QHed9CPXH`<"_V'C*mCQ`YN$V*HDA9qBJ>!tV)%+Io)H at e#GPZg'<o%"ie6=\rHSq&Y$tpGL'QB(<
+%S6*tF\!dA(NRr5mq^q?hYtk16QRYPKe[\MVh]:@RJ4(7GmSJYkQUT_TG6VJ_-MM/mPnG`d\ocS,M4DMXc>qQkFfFl:><rNBA0.5W
+%1EbbD^gPsN/na>/o,2'/r;&>,^GrD-5jn*!l2KT-I9Ve<a*F6V=<^IT--'Pt.#ofF3?S?hYW1He\kaDFP)Ti8;$%%0!(BEmK,VrD
+%J0ANKf!D]U^kY$3:/st8FJ=quFH7urQE3'Q,:P&hjWmU$o&^0=ISClS(KVZ@#H'%Hm.>enm[5kt]`K\k$Nf,ZVb`r!r8%>GJ,0)e
+%h-\eSo\)+]NGC4cYd4Pt%<S-RRM:uSK3UOImHTLIqDI*rMWDdJip8rGXuO5P!Icb1"N??>F98Q*/guf:HM;Ib!H:869`R0D/'A0o
+%ie/@lF=FJnAWaj4juf_i.-cJ9;fN3o$OgufPCa0-W/@Mi"K at _?gF1q*TaGNG`?J+"i)YB[_HJ5+G?ne-(E>Vq!D&Iu&?nt>XNV7M
+%%UJqalND9H7j!B;)i55;$u]scdrN>U"iGjJ(4Jr&$YM3Y:>e=\C(GP040qnNYED at E>8Ec,b)J;jZ+\]XaoH_k,I&F02b!9AWMU7'
+%a_.Sd2(/8'AR1NpN8];GYi8(m'fES"Zq28uWN;:3NL4I6'+AAZ8MgVF70[ej[%JF:U[(7Z?aH8!WXs;sPXn)WAOJ,Q?%umc8kE;f
+%aQDCd`>rLiYuG*X8]<T>,(hh`&Lol=Ohl]WU^0_Aq9!t`IuiX^gIa2>[-/MqTqj,V^;'li1^8X/Jmd"UBfkB[EK5\<M]ua97Y_9l
+%'=KTW!UVaU(Q7lM/;EBNI'^#prsghC8D87qo>_?YW_T>IQ;,S,_qHC:#'[?na.2O)"/;TcNkk,D0N&M`7%P0PXcHU$6(MX7*JOh9
+%<HNJZ)T\f^Z\D%8*ko?2;&)9lgT.<]O=_bFEhI3*G&dXe8R*M9e9l;cE0>7G%YA`4M`FPCi%P.;a])0`G!%sI&^YVe2(22`E7-FB
+%KkHB:Gl=^V5[mF)m[9VrQsU\FJ/6^`#]XbQWfF!(R?3qRnQ&YO=#S61U+E0';(fE:C%.^+U?$;KA7H$)!-a=W:REXGO'C_fook23
+%JKWs`88b;U)/@CTUhU6CN5>j76\&K_Jh;Mg,9BcaFT8"6AnFkW9`5)f?Z=nMXX'p7N&Er>0QS"&H+[s*QcNqj.2\L[8(gIb(f:a[
+%fGMi;V-%FJV-j?a!pM'j(`\0b=KoIAB\"(kX0,&B3s-]'.7oRQ3ZSkiZ$XnDT--9d.4JluN8PVkVT<Hi4D1u$=GjClU*re<F/poQ
+%7fu(u746V`8RgXtHphde6`\Y`(-ug!.0DRmk'0?TBLssdf+GCCF4tiZYU[pSP/1B:N)=[.0j54KM4ZZDoMq_Q&pr2.WT?HSMR2V%
+%YY?]O+d*P at 2TqWD\=e(ql;h"VC_t$*;]J05AciAY*tWQ4o+KZNVP78[R.(60nm`,n[MdK?>`?^9Kffp35j>:nR(u7i5nIgA'pI at g
+%gH:+p'T>jiUQpmm&Q-V1'/*ktY#a/Kee8nB1 at C*/jlYo+Aul">V:Uf,PDEX6q5BW*4.ti='[$VmQ\[6_'o06K<q&dc/+'+B'UpBs
+%-0X_-Ff'fu%doFCSI2W>l0JZ45"^;/6ns0po(%^QWIfs./%6:9$s,-)M=k?+dc-QmVn>iFij3G+L.*Xrb62;>dh_0mPo$Q$$2SLf
+%3EVP;<%C at DK1I1s4,;YF)/0[4!Dq^]2H`TP)^.Z5CG>nuTIVuX<2)2ZngLR'&Gr49mD>_7/R'NO*t5-/q0Eo*T>OZ#Q'G7?J-k%%
+%r!#>P_"(5`",dHHVa1d&&c]GH.:iFoSF6T&L6Ob9bat8_VL1ASS5IWHph^U;Tglhq*?8]qo,(:>(Ne*)X["irc&OlAhB,Gn(#^#k
+%0/=-tig<oU]o*QJ at _`5jrMZ5YelYap3VJS))\`laTu<YY)mSP2N=1Os,7r:o at MP<[4D0c<<!oB at Pm>;9eh*K7E?_ef*#QU3d1CfI
+%3,sQebD;<<jldYU>[ht"iFRa&Ngd;*!3rW5jonN5Mni/G\HLr15l++ZX0m)'D([BoB!(#,W_#r3U+30"PFM[g_SRas)L at HC%gqlX
+%&<<_M4BP+9([.5H51&9$;R6-K<%pUgZ(_A0aGU`FA1J;8j2k>3SoC?hJg8Ki1uNCc9*)WeJ[(^h2i9")P>MI&/7h7'$/uO)A(%n$
+%BJ9qeL#\?<+W!S_Jnp21AQl/9er[<,"C?:4C-7a!FA<k(m%VW+aH?rN3#g0iBE;='SYUde^7p6S\q?1AhL[MkR(0QYPaW;B'Q"S@
+%5)fX!qrn:j1#4C%_ic016^V0L.`0ptl'=WhM7\Y//BGmVI(EchLr=(3hNsl>G"a;U)%^Rk>6u/-3MOba`oX35en%W:Z1\GT<kr<*
+%KP)k>%Y?h-aF-fmJNS3Y+a@?f3U_&hVRu&HKn'D'L_?j:^q8fh!B:Ek"/&39X:.T$m0WED6\%W!IO>muml];X.rq!@8. at a3<AaLh
+%_WV`5A:U6#R=rbNlZLL7%_AOq1dbAfr!==&RO#c2$bK at F<!+9^F)P_dWEl9j[)@n':+LqS3^HqlFC<-^JQF&j.M?\8_bk#\:6]`u
+%):q`Fp_k[mM`MNY!EO58 at lea=hR1i5H.**6F2ugYGDuS*-DIWm,gf-8Rlu`r]OHD$JBs;[>(SgBk!JWrY;t]S[!A>1,PbtTp2$nN
+%klu#<S;7cjf1>0/baBZp/h#.<&B[O at M/KlpJmBS'.\JpR72"#t:DJ*^EoAe-M1A+t,FE_6;n7G-TOpWZM3]);a&6ksjiEdLV+^r)
+%`>"Ct_NG^m<Ie(AXpT"j8NBtd;8hrM>KaEO,(%H=;GfcO3"2*KGg;r!VK#p5L+r8P/m_)I?#j4:D[%_#Tj%BW?qiZ8O1ZIC?pDSL
+%Zo'9Ui[Ac789F$sj`"^k&m1>]#5R3QNPm(CiZ'Hp#?_ojnC$gg=c,.k'4WBUZmdRSgeQ5+#G/GqmgB/"%.3_^[IJWQVS,/>lN.Fp
+%@F<!$:(Def;'p-'i(k4<nU_MEl-SX]=k"[2Hqaif/J2T61aroLpBa@#;Bhe[irs$n,L7Q$CR)>"b7US.'M:cp[:*O!Q3LR,(\8dH
+%+JE"Fc!.1f@\Bs,%',uk7"C^@9!BH_:A"om4\MdVn6DfL"Us>!25*[9MfJoGglW7D&L6E=n<Za>g0-akYma$SVd2gLDdn6:<+l<f
+%ZbT5oSoK?^VKA)BG\)f%]!.2 at g4==m!ba at d6PU3(LXN"S&b2Ee[]kX>g?=ekF"?403^Rk>_O=L^gigkObuL:KQTS'/,lD^'56Z;^
+%<Q#5gOouLEI*Y24Q]YO-iE at HA'u'MEOjT.O\>U0LS9:Tu$l\KblDJkC`-g at 9^=/fW!.C]0o]:YsUXMQSknZOh;(@EM.4+_41n(.&
+%'f at sR<mI)/(R0+Vk?IQ#VZX(5X8^$L)4H%-,1%/^hDbjUk.!NJ;9U>?PL9J*iF`b1"O2 at PF]7M-.^13V\g5W?)=p\VU/NVKE47l;
+%9i:>]NmnNP60*Vue)cQIG:Nq$7Q,Wbc-'4ZBX!U;5XjTg];LPIKD@)K?IG/$'@`PG]"s\c,p2H/a_<;.MkZq?"FNWtCih">LB[uf
+%crbD<.!`NP'N)aKYmrX_^h"N4<chV71j'1i6GB$j7uWJ;&DC?Fp6U1YbF28UM#0"Td^1KE.cIRe:)Du5`Q;A8[?*+WTD&tN7^1AJ
+%N+H:$"^bq++Zp;LE\o3.X]6'T"E_lor]50i9BKVNmL at Z+[^i(EX-D\N:9u8Yc$S,?81N==IsE>#q%WXfdK*h(M[ZCBn;<)\36<JI
+%:l3$JP:d3ia`:k?N5&*"GTOPADVkIb,.J'XJDf.7e:=cS<fW=e!rok807omVBjka['<"d;j at 2OEJ1n.'%O".RNDm?i38-iDkp-\F
+%oP!:d?sYa:;AGkJ/ZcHH`:u_uqjJ at eK/j9R<c2CAG@!W[E@[=<nA>:EHb=kO!msnf2BX6-WD'n>2c63m3`)E1Q_?YR&<Y4SSc^HO
+%*T=G"=p<PtfgH.0L_DmSUBk?3M1Q519&jqeib0948$NaBIXGpQ0j?f<'GgM?Ed91VaoTpajZ#3+AMlHg6QFVW7%,H%$\/:.X+QZi
+%E.b at R)[YWUQ>uN6HI7@(h!,832AT>W<2O0:4P6B!]XB<X3?E8*nMVcCZ-93oh'hW'1973CYq5hbCKAIEDO at 1u!RqDZ^;:\6-NTJZ
+%krXGE:c1j-aaiU)fJZ<f.+gaEaT^=Z1gZkm6(1p0T at gaqLkO_:2&%q@:IW&_YbSNYX<[uQ[iCo8X%?L<)Spf79lt@[,$F1_(h]"5
+%M%a@^P0O:WLf[40C_i5B(nYXb at 4cqV&;oE%fLF%=7uhSMGs^^!!Wi\+m.!pj!1PdFWhg1mH&$qeFS)&bQrY;?*Z,:mIAe$%0HZ9P
+%N8Tkm!+&VtE06sDn:lr-1kqs'auN+21+'T^K:#\"L6f.!8"paqO_?&:.i.gsPc>-:1*_TS`@aE1X`N^s+R*$7A]Am6b3BFZ1rco@
+%2]DBK'#P?@)aOo^%`OldDX;MCi at T\Fm6L0qQLE*u!HGU.iGO at eh2@$"(CYL@(@GKWgpK\_>Cgb&io"^._-MtNpIl,dV.I)3.En<)
+%Td>D\CIXT4@=Ac=gJakUd%b&,E.ahoC'Go>3Z&hZ#(WSt!HMp_M1[/";:9Z9?I!97^Yi*k`a"?>@R6n^R^8HR<_tg!77f(8<%'O.
+%c*>[2MXFq=2C)@UW#3i&MIgi4a&$eJ6D4I9=(QHEO_>+o-Na37RMq,"k?:/K>B4Nok/ZI"$F2J:<l9*1!7&t,#E%(IUNt?ulDppI
+%O#>_i.5i%p/Tm#ce!*nMYmQ&<S=J*6>C7g0CN1I;1gNZ^*:f%mQkMt9a56;87q+b,&CqdmBL:fl at g'>0.tPNLTbui`T at 3IZ_-F5k
+%V5.Rp&u%!fU,5_P)@?S+22(:PVHpQ at DdC-eTU7Xi>/_Ua8Wk7?VRi_CW at Hb0K?PkV7=e[2LtT[jc:X3E0b>jU"3Lcm#Y$HlN[KOd
+%S/9F[i*doH7+ZdIi+ip<,<o88LY3lRVHP7bJuf9+PSBjG#*IW[&2i%FZKt/ig3YJ_:rJSWMX@()n.%;$"!.t4`P-1C29+D;Gs[OG
+%,Hdu`,f2iW0Xj.N5U9p:L!ZBX8djj1N'R#:+Y at XKUKkY^`ioa]/.5W<gDD1UCC"!5!@;kl6?SQdL)EGiX0pU*.MB5MEQhYm>(>ci
+%@YD3=3[Fei-PQo0abpT6]/k:)Li<Tr*cK`d6L_`Up8Au6[$N,b!efElI21nIN(HA3Fm-nEMQ;/*H]FkfqkVSS#)*W4"YfE]9%!o`
+%cjLIZ2YQ'nA_(7/5*C.>?oqSs%BAoOoV,_bfi-+3WhDcHUFHONKMTOD]\C6okiAaK>L.9pk^7 at S:.3_Q&Z*qgKGpI_S;=0j223HB
+%+ at K@*B,+R;:c4qE>Zq95:hc,Eb:RVjGV[AmXlR_04lo;&)%8!:?pIN+RTlseE'[X at Y]>)`cslWsZe5gcQf>V[QLXf;rlK+e+mUkf
+%U-SrMFj(cfdI:)`OeoIK(6H*LO0$LEAf8^*=^.`o6dIGE7GQ=!N=*]t+H"3R at s;akP,9-RCGE\g/S.]dlUXoO3"CaRSJ16Vas:^:
+%A:MNB$hI<F<i]>a:0)[+1b^d/9m*!HKPSl,Kh%PfnIN;%cj-<YEt3s__`;=F<eL'm!Cj5")LEc0#S"Qs!6+M`N=*S"j*=QB3o3I`
+%!Wm=>`<*d?e8R6j\\a\ecTn)KR/sd#0i[,*>;/q*(Q=pDRfL%nSrjB&;@X)X<Y+Bp+"Oc4?O]MAJ;T:J2MLnY,2m9grD,L8mAsu(
+%C3%)l at e-osbDtb\;7uQak(Kr6d_UqK&;W]_Thr&;gi>\_./A#P_hV>8FKd19+\P4X(Vi+fb-ANM/Rt`=KPt?e;\BX>"Is.Yb$9J7
+%L]B1ig6gh&M:Tk7>Lt"O_U`uA1^mAXg^7nk\8m*Qo#d$&_%jMQGTCj at 3q+.AjLhEA!COYY4uuh+:)!P9;D;R^,`G`#^a,QK,dKa;
+%;B'&cd"e*b7!r5J226L_EDP at M@:*Zf`H#,@?+hLtok`cNHTaFEdI!tI_1f_&^_^'d8\eDkIidakMTf$Sr(#"5=eXC4:5]!^U,Hgc
+%b:qD<!?=S+aEO/1Ui\qi#nsk3>[-F?:hE3EgWoldV(1Q/L9;<Q]IqqW>Qq7(;kP?0)a(5>5*8Vkni at q=7Gor>#=QeYn^GXtc'D-U
+%FK8U\H<:H#eqhZTKhFi1!Hic-+XK7M`tc0'AerA$)XNSnF6j?BP<JTE:dmJr0[:GhUe:3VAl'<7[e;a_+:cnQ58gkJkWg.O*G at sB
+%"JoBL=o]HnfW(>giPZN:U:]tX)Q1o`3FIS#0 at oZG(,as\=B5YSI-n8h`fZ`=p]3(3M2t:9:K/j5Kj*s\;MJ>Id^lQTG9S):?B>`X
+%7"F&g5#3(?\'c:XJ\?17bQFSK/I9Y5d);[f_i)roX4RMAOu<,g1fJKs0q9]tjH)"J;@](9f[V64Qf?.Y&JUN7HdBQX3cIC=05PgT
+%,b`%h#(uCHV2;giQO at +?2*QmMZ,s^RRD3SN\"a9n(?BL8Z8`SS)p]Ig0nOI-Wp1ffQ_dYs at OrfEq4V2]pn20I3B44T&c_uV<.OS_
+%7&U/WZ#l:^(ZGW2[La`j.n"dIgu347Wf?@,5)pE8LZ<q5f/!\dM=J$c-s;W[I#>V at q3nB`n,grC]>`LfVgq1S2Oh5LjYbOqP"JHI
+%`L02':f)bA4*?qi,)6"far4+*-TBGAj,`-.'(nrCYr([`OqGlpiH=W4NYN\<3I+oB;L6ROegWJegiA>:,*#MeE@*(`(*aC>X9juS
+%V-KW\7$.Xq0h&r?`uBenq3FYS0u/nq4:T^9TF-Sf*-B2W-WWN>Mr<>%Zca,[!<@UY(Jt4ch%ne^<-k(]*(\7Pa4;^K])fAmnd at f"
+%S#.=4ggM%8W!Y_l0JahoJRf'H$DN6sE`;MbUFGLG*a%@)%_ErTPh4h!)=Lg`Xpc?m\f".9Ni;FWoQsgX3m+Em/n-Ls>mp/=A4f]c
+%=,?O"GJME'fh`:IOhc/8(ki(>74QHU"AFOsQo^;\`e[3t8jt*IN0?sp.3dL,9UY;`GepF at CbSE!Ji$RX\r5faJWENVfu9=$"G%5P
+%E?!pI&+.=fG"&^2KiXYecA3/J[sGJ0 at e.,tb*Jmb.a`i>W$6O=l_Do,:=iu)??&ae<#NLB&PjH:!Yc\K):UUl$#%8^c^>@/][P8R
+%'SrRL`'_aZ9u'fXI_q[T5U7.,>K-@]+/9H"_dCDli(*mq08V[ufTAR@,?HK>@=)BT/[F-%(d3#cLBmY=9+pr,6K3u]_;oDeL&lp5
+%WM92%,\h"11nS_63=Ll_]<]bjJXk!fkbTu>fYPU-KS9)M`.Y#s)KSgON*CF,XG6m.\JgS!%HeI:7>X)/)(J2K-ehdcGZYneF$(gd
+%SQ7:<GQZ5Z@\Rq"1(tDq+VX18,bI?IW;Lq,7`>.UO&t[pTTn&j8EZEdjO\K*+?Us+IjfHpkR$\h'RuX+'Z'<1lN^:Iq&#cs0tG^o
+%klHQN5if(E]ORbSdcV/SjQqVI59FeY"[c+sR$Re`#4g%E#q?+tqhd*4;(=#i'+!V[6VqqTF')PhU$IMq&TtrsK$V,mk9]oKdUe`#
+%'(kS3Obi5<J2)=)Khaa!!4Gkh!"]:s%L-W]P;3cXApdFsjjHfk"RN)h,)ZU6h]acB+fiEM5pc9*^aFMj#m76HbGT<T[OXpV.*!$1
+%+HQCO)9+ogT-ab:*]p7;K:HCQ[H'm[dsG@]0u"G)`Q_ULh"*L*/=IBo8rmCpnXNL"`=>W+l75N>P[dmI5r<bF at Sg'6MKIGN^LA^?
+%6eKNV8Fg>6arpFq;Rf3+#WRu<6&BJWdB%kuGWMa)*J3PqC)7:^<4&F4.>Lnqn,g2;((<bWOoMZ!OdAeeXuGTK6kZ!-2XmS684-c2
+%'g8:O&:c57D,Jml7`1-W6U`P!06j+b9]`#S2k5!>C<_Wb_]H!P[&%$DU5qj=A,&fi[=FMXi9m2$Z.@(*WebOBCdBLA_jap?7<20O
+%/]bQ:AbtI36s5%+:R+`uiF])0do#o`B2$R^[^ZFtd8u6G$5CBjim#i-$8":E'g1Sg?Ad`/i$l3#<Oj046$L_SM7:"1TNZ/?>$T/l
+%oW<:>aiKA[FpmJt.E077D<l:=PtDN>G(Rc@[`Z%G1@"TXrYS&)=WSP/hEDL/le&fX,9pY,hGnT_[7[m<^r,LP(#.[)WoE9A_(0o5
+%JZ^\G"L0%1&e. at G=[D\#&sH`EH#CP=3<'#hg2U"DkaFmVPYOjTMurBgT(j\,9Oep7On5#:>F4G9W^L>&G\sJ)N_=.5e\&[j_iSl`
+%mOBEbaJM_[]4H0<e:h#("NF/tH1<(f,:ZM53I*@?1Q!aE.0qY!/79V0S,d;j at WOiJ"?^F<^>nPL at S_".Ea,b&*='O.l8fPnXs#aF
+%>OZ(*m,+XnlR823*TP,`'On!J#"HId:DHiN=&K0^_qh=0X9/&CHjEQa4e,Of`P'Z5[660IhB41oD!;\Hn??I1El\0er;;SgCRMmE
+%hccV`?$Op-IA_P%]TMTuX-W!3p8MWo/j*l[aEQcB.mhJ*]kR</fs*1^Q/.-A/IOJKn=sPLC<'Yf9](O7/^\e&6-C;*\c45Nd;HU0
+%RD''d=f1ZCF7u4$c0g(u)nV^KDdid;"UT)oJ"TfJ'AfsoYikpZPfC51r(`X0bXqL_a;e9fPOKk$"_;BeI`D_Fk\jQK2e0d']m?^;
+%=M.nH?3Nl)`(&:Y\3u0/ja:#Rhn32/oo91IJ-Tr>UlnW3/p(EokMW!a7Dq`9_6+Pa9YSW!P:X;&5cP7Yb%uP`L2V?Dd'+K_cu>J4
+%):g>D<[/kd65Be7ZDqA)TP0h!*.j6pQuTH/H/R=b#_D;N(O5PlHmFD64#0nlJDI#'=Dp=&+(BO'e?3e'&r:K[`L2qg!U;Eh$=`iQ
+%5RaY++Ec+JW/,)G\jT=N(GRMpFTNT$P"UKP"?<-^=p'SLp.+?I?nF.V4Q+>WeBsRuhZTf]8hSf6PCI0fLcjPiQu/rLfI!c:M>ou/
+%:3FJ[Ae[eVg/Pj:?qd(5j!F.8GcV\=pmQ%:,.=heN#.6i8bul:o/*G)'ORkg'fAX+:Ib'Y-&3Q_aVELp42OI#pdDD;,ANeo',Md2
+%YfdW1 at T%4O0`B%5188T;DN2J,!J<]nb!j.W-fHNJOD!&?RJ=FY4;e=?F$]"N-(JsD9UC]EH_+q(?=C_38i"C1RdhQLT06Ge_"?Pm
+%PO4Dd>1njofSQkj2 at ESZ[R0;T6QIjY):b%pNt^aD\8#MC?uO"D%#RhXfgMKP:iKGfe!Y4R1H:K+>/Yg<3E*H!=F;f(3\*B-]G+Z+
+%`(DC,GTZOf(ifdB5s?HWV!09@(am+9<@l4!ib/NKd%47 at CidI@0Qcc+"eh2h$P9b'Ei6cs<W`1&Ii"N(SN=OuNSd`5apW*=Tnm^j
+%p(1=I9:0 at f+qh[8"3@'],=_0[%^eSU'2h14dj"iB"$pHtA`SR!aYg[S_42GerdG,C`S6.b#>s#U.)qE.N$=,0Quo0Yqf-1M!A%?2
+%E$Hd*e$iRi5[Pg*":IC</"1ZNfV1BA&0f/[r&S*h<eU#p2jSU1oF:5XN%%fI>nJd8pgoI`EH&t*&8fWNjhNI4""QK\0EX-9?,$cq
+%Ys:ZlQIlbqeEICc^:'!C-Fbk!,gikp+GR?B(,+(o7jfZ9*=LK at dgYa$9*(?BXfdOpjKLsmR at 6sH_A4!@bKHoQXGd`3Z%4d-L\h4%
+%!\d6<r$r5MW7&n9XV_UT5VN4bd>M9Bh#Y"i0PCg1Va*:Ng+G"Y[2/BNjASjYf.QYe2Y8n-UjIG_`ufqTH5RPtE.N]/FciLR5pIY:
+%75n/gM2O\1qpEnJf"t=6YfOqN:/&3s/;;_*HkXN1`7-EB@%b\Z%)I"d6 at 8m;P5>DBG2^5O'A`,i+>3i65[n8g:rmISFTdE;$oE&J
+%89dCmRrP%Y3c/J/KQ%CD^:nSo7cu<W3tU9''N$U7E.'1WU#^jMJgdHDN<sal]8.u5=SgNfXAfodHBp`&n``;,k;oKEpM<P:)]L+d
+%dB']R)6gb")\1u+1"(M3ZGA3'8d8c\9u@`HAJT($$:4E]ki0U2OVi6c2NjNY6/]AT9Vs,qm!R/7EE"I,0cbXF<HM"\^L9t$31Yb`
+%=]_hja)JHq&:bV=YDTVbEst.#m_YY*Mr8B%N\6?pR&CIFV:"K6^6V at T%^ftbo;FF/.30YG<9t6&7_$#bDVsB\@Ob,:VBaFt_?dJ7
+%+<<bHj#?lk8Q4_rJ\ltB="Z9sEukfJJ&KjN'WV9qXB;G*D\C:sXQ%/>>)Pc`j'#jVdHi at -r]1@,"\bjIg0"F/O=]AS6#B$dEjZSs
+%PmkIYeGLYX:8:KQre]8_<b-de.p9Po#WT?7OWB0F&^ib2j&@h)_%F'@YRABc-EQ#jcf7 at i270MHeRm;YJ.mkee]g5dXJ"EYnu6<I
+%Xd,[dFX`)@V1n'Oc?Cr&;@ZTZh=EfK#S at 8t,/Djd_>A7%TM(sE'_bs6DK0+*(dcJ5kV1<8Q7p9Uhi&msMKsa5U="UK;F=p'U5d`]
+%YRVPHfR!'Z$EHM?b\U2,Z1O*;7Ukkr;)rK6"Y/X07]>Ja9a_jo7Wep*-/Q)CGT2nf$g5JH)`@1Uk>(]8Q"o!S$aV%CChp3=;OeOd
+%k,Lfk?KX+O9uc.GdnfZFE1_5GXPsj>s%=3HCc;P#@*Q`&aa$4W$`(sdnP[i+KMEc"_NsaA]QgL3m<<HUHc+F6:8b_/dEJ\r.CliH
+%_ZG+0Q'A?is,`@KD*KWl,-kt:8ME6nl3&,FDiAn-S9<bu_`=),WLL43Ofo9q[(S2bdneNr8Xq9HS=L@](uLY,Uh*MFUnc9=*j"NP
+%kp<reV3`@h[Ou\QDcn at V4srLMFA>d`h9IKAj-/>ce$rt%ArQ8*@$OI.$.HHl;F[ob^kOP$GEGnl[<'$1pB1=TEm:HS`i(s->Q`^"
+%X3W=[ne+_V>q="Me9\Y?2C]8M>$#Xe/-7(H7fW=NJLp1'Q7g&scibE/\"7Gtg)k!.W"luAlm%"fKqG!`I^W.'Dh!4b`m9'O^ccJQ
+%r!(r/Ao+:Eqq[45[pf<*nXp=%g at 0aLL4*gPesiqJ%G49/mQgs;\)H1#i'A<jdY<,%]S"RiS[DmES+3-\4+@'5[GaCRmd]Udfms$7
+%l97(5lcn)6#&LO^pRhueS$DJ!qqHig+/PM;_VR1\B7k.6R^([,mpJHm?lPQ"mn!V)er66Y!mg=Z"6*N+[,L3BDE;srJ01"6Co&!W
+%+5]]P>ArnP]0F'kNX'X;KdY`_Iri2d#&Nhm^,KF1S$AFelq'!VhgeujA$6fTj(@Xp"1HsCrHS2T)m`W=^Ff=C'RnoIV4U+F*a2`n
+%kf?ds++EG$UY[)@oV'0\MuMAhB5[\=0Aeh^^3:W$e:<;qJ)R$tRm6_4J,<#+FmPY,C-M9m&,s]nrn3qDq4IVPYC6!3LZZ)An=q*&
+%et;r6^\l:Tq`k,E++<Wa$d(YVn]a;qIpicci_P'q at m;]_&_ecSg at 4#"iiff?L=!DZr5\j'0E1]HqA.*;V/Q at bs7+uqIg]c[[_qQ=
+%*rc-\I=#pVnQ``oD*RUJ(Ou$`DOAJQ0ZRTI/q!&U0E:E`Cl*?WrTG'4F8O(7[o2qH]0>l`G at 1BsK(7j+%mTm4Dggk[O8[..qO,P#
+%8)F-[YC5H--[tV at r:u1n]jjeb6g&pcqnMdf$dZ`:F!%Z:@nnu#2#l8OreGEAm42NR5@=9;gZk>Nb.dbj^\W_8r3*i>\85985Q:Yi
+%n,M8%J*FhE2B720-iWh'-XQYhYJ:"r:G1kcO`s!<l;K@,H0K*OJ+9Gn5(Ce:]^se+J,&,4](DsTs4/\.B(!`%O+7"I^\a!lc[PLf
+%^AIb^J,ICHoJ9YIiHH@?o]P*/6LX(Y5B6Rms0JarGrFUDd<CSVh4]V\GP-#qIfAFBO$<+n?hidXIZXhdB&qXC>!J;h54[q%f73N&
+%0-=O^EobW/IcV*S7g&\N07W(6?hruRrkXkI73-^LM4<E!p?`Md7fo_kYC?<5?_t&8q<G/3o/D0^]>&aid3Df%BA`L`)eU6#PXFna
+%DtU3Es5MR5_ne#)Mf7F!+qDhjLQ:6hm5LHR&&7.15Jb&0lT\rE^%UH`5Pr,QcGk_DMnecehn8S&qL%Lg%+^Pbqn&KfI;J<*=iGs(
+%^A\@UI/)N]'7+?6s5Itsb(WL'RT4b1Z0/n$B"p?/ZqN+&]l.>uLUc\P^\RFr^V)@iDu]'gJ,Ll6T02kfpYL/k-\(dI[i_'PHpbTV
+%^[oF*rRA*Ahu9b.lA;9s"V0YUgM$'7G9d'i4a-OYhttE+DLCa1dNNGYGJ<e at pIoHu8)Ek-YC>Z"-Q`97-Z6ZoTE"Sfs5MB'pgIFA
+%he[HGX8$G.,&k=NJ+(W8%dh[f*jj6WrRcA68&DmCBnmaE4hnRKTmAAnW3Gm-rpP:@q&q9"FQ3#'^NJRMi1%WFr2o#JHOm6WYk*>7
+%$fCt.n6):U,>6'arke-<:2G"H*C'C\,DYMF at .hhJs$$-1O:E9po'g-:?N0klT=aq`B#gu'\:i`:ipEY9I*]DHIf%%OIa=3jDh$`j
+%c[C-)"qQDPs8CjND#_q=TD[q$5P4JIhY?g5IdY\*Vf2'$p^@-$5CMuZhWV_%qt7. at kI]VtrT^XjB0fYlT7$Sr^@r`Li6?1hkI]XI
+%g?U[m5<ets#b/p at 0D45tqU`LYV:T)MpkS!i#)=9-IJV;\T7?j8++3'2mp7,W^f\;9;:lL&QI24,r6YAds6.k.f2fZlC$Cb\+(9)d
+%5S7A%F6Fc;JVNOdVXRA;Q4P5PHq=h(&A2%H%XbAZ(2?j$%1"Ng6?<-uW%YD]Pp%Ou6T>U)#o4^5"q3l#CEYdbX?^2DPl^aC0gEDB
+%[Y!N\pkKc&*<6^l+9;VU3Kl3V#i1.<H#_oS'F.I5ATjH[O9Ln?0dNZoN.S#O340Ve?=QIcf>g\pU&14>,?>0@"WR^e?SAdH$nf"G
+%/"?2\<SADmEoG%>`*=B6c6K&OOp<[+.WAu;0CoISO#lD+Vhd!`E;&<[bfl0#NtT.!MV/H+1G^/.73$f!LQ06*OlMuO09!(&<B4B&
+%7a0VKe"\ELPjfDLpW$eP'd1tE(dN=#qArt7&M@@r:-Q9JC)mCpe5g4d\j"bO>A7q>9QY&mYVHdu4go#<!DH=OO>. at 7[KuJ.eeoL]
+%IEWXRg96`bEn4uioT,")81=hBX[rA%g7"fjVQJ"9f3k+^A]!))T`7`h:.W4AlVis,2HT,'2qqZ6P-8ohX- at AObrV+uhp"bVHL3a=
+%']hW?lW*)Y\ROfm?*.8.@^iC=;M=FLh+E:C?*%;jaka/VUY"MjNS.DQl^.H1D$<io?3nU&Ynu!Bg8j%p<`R<eLA>Xn">'1pa.rOc
+%o7OH/_qs+G[s%A]M;5p-s(:MXkL]5c:Z#IEDh``p>^rU))+=[_e&0Fi>HR)BC[IVI at I(dLV)pfRkfX`iH`#WfpMLJqlaM0\/p_(_
+%kau[Zf(u=f#mU+aS>+&.U#j>a!='.*laKBdGn4<10PdBKKfe[N?Bj`Drd^:>(0 at YU-qe\[q\MJ+$Yd3e^"d=_Jma;/W%KNG3Xk(Q
+%]61jB^+lao'YDk$l*UVS?66M0=ZNL_;>MN,X6m=G\ScV+"/OGWr`oNl3$!nL]<.:Pa4]RH?+\q(]T2W0eNu!jlg/Sp/g\E@]<FcO
+%*a.0Sh6g"]5JIWWFll_OfGV%4PWcLdd[aHkl8mTZ)jYqdkPWJoC%pAS\N@,k`iGFf_a2$J]kMnh4m]S[L[dLa?+W,.,u7mdEE\k&
+%QEYI,0RjO,KFb2km>Y=Y;n+q.%W6J,5C]ATHb9p?26H)]63$@VG9\fiibHg3gD_(pWiM><IJ*c0gT,s'naY0cmk:@fj1EJulr6^Y
+%K=r[;;t*Yl:<H=)jgYt4TgCFM7#>T2&C4d!A)Ik$N[Xg*nSO&9,"O@&;OE0E#9p,49%2D`]=n.qN3CKO]kAk[LTNok+Ni9HZ77Pq
+%.K&)Sga@$F-esVklW\m[!<Fa5S0iV31k+qfLRr%`4muA(QFK<.G at -?cE!>q;s.!UKZ&#.cIqnnbfT2?7ScuaVgjuW<JJ`+GK,oG)
+%M<kk0)dBuABV<Na^ol$44.)5I3$@:\Q8ACo`n;\%d2>TP8e#nIiQ^oedd]Q('?D#aQ-ctT"iLnt83 at ga]Wq:32UP^)M/TeG6-PSP
+%jjDWN$T+3L_BTGW\C^W($kWL:&qpt`=niYt_r?0C^qY1G:#>.#PDDTpY94=W[.#0MF[+cC+qk>Wh"d[EL-?FGGJE%-A5*qf)rD)5
+%XnVS_8c5 at 8LRu+E@KXMt>N4-Q^,np2r9fl+_,mphDQ2N?]h5.o@[Tp19>;cghjeN)+53u%AIoT;4!2%:9jrTlZ6_PM$)!4o8;qL@
+%)?c5iA8CIW5;"2`:GtV?Hf#II.S*3Qal.]UB"#WBXbAgrUEnm,b][1#f8F[8,``<HL&XnhAPPdfC?@J:j>S>NjPQlOi$g2MB$07Y
+%$nkg`Y$(AnBrS?n\uNfbTml.]Rg)s^qXBp)`Gcoh\k#Rknmn6kJ.AB>T`ESY#TCS^B!^\(m`jgglfeJZo5eN=Q>R:d-?UHRkkCr!
+%F;8-/#s7aJC;JVDC$&CV+KJ1el(\s[.bj7J:3Mnk^'e0*jjDn5G at Tm"P94!J]Xiii5biX!SH.>aF0s>!l,j>@\%U-7d%m6qeJ\&J
+%FCXj)B3=8AY1JFj_?WUgkcM7k#a(1sY/t835Q.j+Om(TWraT/XgZ`n6&[Q,eYPeWcjEft8rP@\q[kel(KR&8iT`Q9feh$.KQ=38p
+%iaN)JftGdZWjVIilWC51e^pL+VZV:SNkM[EIJQ]_mD@!Qd[t8_1L!Y/7o!B,%nBP[Mf?>@l7LSK\m'!U?WhkV%C7!;^DFhFo=L^d
+%6iY#b$SUoc'hhnk2Y/nP%@am84]\8sH:j51*dN,[ZSu]1cHZjL<]5<"=WQ><\F'+YO2F6Ojm7b8T)MEmZO(KB0<pDs(3R2!42hl8
+%(N8t9JL/n$qm&XbN[1/9='k8'qh/gW'g<DS)^@I5QJ9+Gcl1W?!O,&I7:j>;=*gMU>WD5'hcJFgjL`oYLUH#G]/c43G.==(kB/];
+%2aqu7"l?Q#>?,H'<n`,X=5mDhpMj]2hlX#o at ZM&OXe2>I+kjma3kpRh0:uE^YD5p*eo@*b]@_n(4h3"Hm%[5)ZG1iuqMr>p[_=+k
+%c0"GZp8EDMpDW_kjQW8#5BZeGZd3rE2E\<toc8HCr4L?_*rbO'?TZa6O?!N;m8Gr=I%lrks%IjgruE3(^&JfG<^52aq8D1f0T6IT
+%Bc at K3(n,)hf\7C7B80gsSine&ofX.X.o3g&,7VPsmSh;iY at POM%=92/Ku8MW_*9$tfs&i^EGkBUfC$)=CN&!GNX1+.oSjeU\t=D(
+%SEknKbB=^lbOGVuHE^c65I#4/$[H(_LWs`&RDIh>>\NQOEO:WeFoURVHZE?FmbR7%od$f4^'/Qh4b.D[_p[h)h8cSV at +I(=Z\]!<
+%I-UoGmO at IfJcml06ls9]DF0Vd:Z%WdM`)]^PI<+$C9J%PD=0[BQa:n/Yo:'^$Ul64emS:,nM/1WmVmgn`EW-1rn>M>OmDtj+VcF5
+%Trk\W\)f?=%+a/RU!TI7[sQ#0Dp`+k3\qVUFb^p\0cKq8p*`YbZ=T0U8oKFp[d-GDI:TS5^"XF+?>j-;oktqB9m]YhPS\5mf]\>L
+%F&J4XZ7fiHgK4nhA[N1K1)Sg!TG:Q9A[UE"4jGDaY/sbr7dC<M:'J1tWsle84FtjNU at KU^fL#kCfpAg(]PAOT0en@=c`kJJ.[M;A
+%%X:Va;jde*:j5_M>6e6aRs([h;2:;+U+^)Ur6)58\#q45n)GS]"!A+LP6$q1Nh0h?UP6RW.P7eiL^:M?dbe8+3dA*^D4TN'U.Y+8
+%k^G6Z at Z0[<;e/8nHI30C$Z5j055'*5hco"%B"8i+p,:M!mCW"1m$QqHM08#15BVBad,,fTe[US9 at W)G2Kh:i*]"OTB7cTb=lLn0@
+%S=11qKhOi%6?U0eh3W>.Z+Pj)1.`g_g7fn)i7Wm)\X/*@hASY6mBqomKAl)0,D^`tHFhq#,Htc[Cipc:]l57CZ:TISS1.MEGIem,
+%G&]?mr/$r&lXapSoupgWfA.#.(TH`6[>T[og1YjE%^0.UXGUaI<]h@\g8")DZe_+gDKfUUGN:0qh^ukfhF=F!%o#4=mYh?l9sqsY
+%G8Im/:3Wueptbc&>'G:PT9rR;-`5KTm,$r]4mVB4l6j&hK>+k+G.SJYX*)!<BM[*7Dg$#R?XnrGI)72%OIEV*[t04!OMFMR"kRXf
+%0tAr,$r.LP9t'icYFE=[*TFmFnR..)`=DEgf- at K2H-?coe1*V:j4.spcP4+J@!FPuh'X`.DgpT)@mkll-Uf])s3U"/idMpg.<"0V
+%B',[6b>tO!gk17@#PVWZO$06l$FSim7V*9Kb?8WV(>U_5QWYUeM7kjK:rbcM]D5Y-B!Y9ahYL4Kk3W(dJSf7RZC?MM=bB\4A)oQ6
+%QJsicleAK!M:";"f^5;'A<jU'hTF+2FtB3]U&H'Rbr[<]ieL=+)qN`I2]23KX\6 at nf*?*c9XFVK at eJV'Xm,a[e401F'V%;tbm3ge
+%fJCu0`]_kTnG/J1hm`ul`cn:`bsR-H.H=2fF5csGQU3POBT50\B[BQ;nNEQTa*?CJGs)"4:MQaHS#78[QHKN>G]7;8gXZjfCjBgA
+%k<\Zd4G^04DacDC;@l2r^eaOL1T(bDf at g=.j*eO[m`1T'V]NuQ]4G1sLbL`uehb")<IHtkD>2 at 2A\V<Zh8^91f&i3B^?h,6^`<[&
+%74h83`.0hoY(o5pL]1]Qk,m".DR]Y`IcbPrg@^$'nNGR`T-)j&@rtUOBoGe:9i8;nP]jU=!D7=a(qmZoWWsbH1^43@*0?S'D^%\i
+%9gk$@h'nJ]kB7V$]#T//q*83=_.oDWmWZE6U^%:jJa&sZIV`nPh;i$h5E$r`2breV#qc#m+iWU0bu)6bQ2nF<B#1(;A?0KoS+3dC
+%DZS<]Z'iEEF00$GjAqa]U.:&V2po"H12?P2>q9uc[@1g9Ng5 at U]scDebQB0[&)W+g\MNSX^YZ`[3nJiRSf4WteT/!UjedoLl]$>1
+%<_(n'F7C)jd3Iu"X53I`>a/ig3Pe]np'I^8gRX<0"d+rm'Mr/kCRn\i'Tf-15&Wtj`p&-#dJdAEmqMPS3g=?^_7e'c.3?C1.gjA+
+%&:AkdU7;]UP$)p8F<1+oj\T$GU4YGDAkpOj+-f;'L%F`j3*cE$S6LUbUXkk,`[IOj*0BL'!s at Z`=fJgZjK2j18brM_o#eeH!l6*l
+%/`0oCgB4NU)S7pL,k,0\SJuaaXg>^#d9nrQ.mEuV%eSOY*EuP`"c5L_aC2")J9,#Y`&f4hq'%&`BdFL\*33":8SrTFS5uPU<mjgd
+%=teW&`HkTD7bh$]l=Es6SU\PBf-[R3V6Y$hb\*A=&&`)/J_4X^+?#]!`&kS/)IDl>R\DWTDf,Q4Hg>d'Et30N=L"DI&TtW?-/qkL
+%^2iQ5CSuRCL%j8]TBW_6q"TD:Y:Ih2[/UL,+$R4]:Up3c at el^_=:V'Olb6gYWeTY&:"*@+ at k5PC&R2MtqMki`LgIWMd1p<;6aq7g
+%#]4\[_m/oZ_L[.8p3,_Z^;&F\97bsVm#PJuGJVJ9eb+CF"_VGCfX52n:XR.cUQ3?_M5`q8?<bMaM_*.MEj=HhN^d;heA^a;NB?j^
+%V,1o:1i1(.]R1^6])!<R_Sd6,44F%Q%.aS^hrZ+DAJ*j=QOVc%1gm_Gs%t,6_DtG%\bHu5HY1pE/!"[$[R*LYAH71=E at L-*5'7p.
+%P$7[f;rL!%SK;6+5Uqe2o-G/W0)1:MP$%^2U\M_$n7+0?@uh<mKeYDD#VF0gJ7Usm)h^eO.-OL,6Nrh"nYSuB5W;2%OG)+1I*.L-
+%B&]N[dAk5Ng$SNBMj.;iAC7VC.2pp*[;+\5Gl_JO_T)+E/o0#46eZ&0c&1YP at 20MG+#uq_.oSD-MZD'-'sPV`<De*/V'Pbb\ho@\
+%5+?g$4:3BoHqDYB)U1T@]@^,PfDOSFJJc?)C&T,'kof(=(;a\&M*9IFrGW+).8!iE6rkCVTZLee,.?F79APlOBZRlIHVI28@`,Lf
+%ar_f]d#t!NQsGOr2,<LZmEI_t5rG?E8fsQ[jP4.qh14&0mDbjlbk%P(SpleNe?U`<V5Xo#-gi.jB#eP!liGPKA<%r2DD5,>8_"P=
+%65)42.aoH76t(lTb52IMcQq,7Da%lkc0 at .AN[LA=gDmBjj.M^:pK'D at 7$<f%%XYDQeo(40H&7IbbTf6U0&&VF5t6KSp#?uaCmc2?
+%0?9Kn0PmrKlqV at 3]GoOW(@*?FB&^(LgBER>j&'t?_K4r>/O".%L7aL%j>/Vi=DEu;bO0cQmJAmE%\c)X(KNZkRB2Zd#4(S!+jHuU
+%MIfRiHKK;W at U?4TB"?jiZ*H038'Zu".\]74/$9$>)=eiW/oRn0^gXOAJjt$ale$:7PqYD>0T"WZ>3eclcSr;nBKc;[XRbB,@=,Dk
+%ZGh,fBmb/P8@*S]I/Kb/O>[A,5^Ma#mE+EF=OA"Bl+bVa")DhOP.WnXE9ajU at Gna?"E(I^@h1g>(JcEP15_+HbBJ.o8<%+Go[6.7
+%f$a3W;G0%*kgG\\onGiL;?OX\.Eaq1bmq':4nmg]\81oMX&i6hVB5.Z4.n(ebKG*2Y7LJ+e_?nM=2M+p?._QG2U(Z0Yd)UP8:/js
+%79T)sD.Eb?c?:W]3.;&$R&MIC:L;rF?U'Q at EPHk[>^*SMp!KVqD#68A#b+NRI![Fr.2q%105M,EmGk]DL4SRD$MVltWD3[<H)0u(
+%a(%j$EU$Q8S3JeLCp$"7G%7b at AWFFR_COG3N#eaU/UA[=chHi5&[2%hWuOi.7bJ\5+IOS<2)2`1<aIO='lGOM\Z<kc#1(To5/(]:
+%r:5Hk:.\+9Reg$3=n at LGmstMLd0$?mS.U"2PTI*@Yf2F1=Ro]tE\$MfHOuiNV(kL*dqa0=rP<e=d3Af7?s[X[f=*Rr\.![&X(b6_
+%9)O)f<J?,ibaO/+jo=T@=mM#*i3S']k%]*WFLF=>o$Yp$-\VQs$M^!f@?>I$\b"."c6#7kqjA0OScsChB!oAh8t:E]5W+MsQ(us.
+%(V%r6HO,q9=dtY*5J"HZ?_9Fq%e8f.=RD.&A7*u;/(BS`EJK`Y?g\!&fE#^._.^p'*fm3sWGpA[=,,Ng.5f5p=jaG]"]8]L`3;c$
+%h>=*ml2quBd-JN:\IWbpNP8+D*$3j$CQCW`[W/D_KUK[A;_q&/:"T,J>,3[tV?am4^n!(N1N;Qt_=$CimYhhAEU(hp,E,"Jjl^W*
+%((T-mE283ilCa/AhO/(/dN<RKK6h9 at 8(YUXiLk?l3jJ^tZ(6='i30&\O4_B)Cts:.rgou+rEeZhFd-?r/e9jqSaL2'g^eAe-<bkB
+%ED);>bI+K^^:XQU'^j7+4;W37'aM'8T:+Q2="-MZ_T at C_OJYn\Z>6Y`/2*"Nh;VBe$YR_LbM(J.5kaYIb#d'Ui:Xo7#bpLo2b"U<
+%4hU&4m&IQ^*2l%Zqf/hMmVobN<R1!F4gOda)k",;8^:LLGs"kc>IW>(dIfeP\C0XNqL`3L[>%Pm>?LMEf`eicpj/B)X%VhmQdo4X
+%()G0LYd!Wik(2>>2o0T4!&<B_gL1jYGJbAH/$0WnGP#'\*eTXAW2ne=X`!j[+[pSNP\U7k?.^.!DiS"f0]RNK2([FleAZCVoT6 at g
+%%mAP#\@(O_#'Yl%D<RC0XGYF%lb2E%5.(4#NChhRjs[-V7&]8 at p.BK=3;%+ReE1EUS!VFf+qC at t=uZ;NFBo8!1rOtnmW8I@]lh$E
+%Dm+;\%-Z>"!tJ`\F[%\9 at aPXl2Df_:;7b6FXbXFlrQ8aSn(eBS\EK(J@<\J.][L^,mW=6MT]VIdb)C8a;0ggL5/%nhG'(39^3cd4
+%NrsS]pFr)(^4lkrG03)3CP29M<c8F/0\GTK\uGBm"dsScKGO80fLrfN9sT)L7HAjnDKeXc?Ff=-W`pr(1ibU\5WsT;c17QM.pUHI
+%YOT%`RW_`EnEa:ChSdjo6KtC]E3FuTiN)"<U"@(BMb[tf?\O!5$n+RTc%Y,a`nP'C^mX9kU0Cp6Zh2>(Mtl%GbjfO_d2519a51,#
+%psLB7YFPt9L)tG4[=!5"Y$3:GEb0XS\oIm[\Nq*%i9ur_O>8!a+r^Bm\k.Ni5C2^brn[6OQT)*dN'>T\^HWgCr[iNk'Yj\5H2RG/
+%r:^klT.^bnBO<ns]sFgkB@<8,]_t8)%VT-n7_4)GLJN!SFnfHM=)K2K(VoK'r;S+/^!]D#qT)rf't!t\>?=!%>'0,[6iQJq"j$.V
+%m!.j]MiB_GD9GmrfbD`VR$;GgkfO'mI-cRSeQ4D?i%ssTKT5mD/-uQqrPhp^`k/7Y$5Bma[!.A*>Sq2DQO=b2o"i4&*@MDilfCa(
+%^6P:l$[ENRQ]LWdXd<<ASX$I&<X!rnlK?Lco([$9gK=>7N?/6u\?Rl%c.+Kgk^bU.pfqBlmji@'6:O$0baIin;-B.ThE`Zmi7d?q
+%0#NL9dc8e%7%B)P7]LM!K84AURVEi&1/1\M'_3g)+$\o:Pfgd8`%(7D<^2)2Q_u:8o(qCe:8:<8VQ!O,O/Ih]Wbc`%,7t-\<%a.U
+%I)ng`<7U&#.R,hSno8IkA!o#QW=&R]`^V_s4?[K#laINP)(Dm];U6B*0kT2^Vha*61hp at YgYI<GCJDKt'o)+"62.jsr^o>5CNRiZ
+%3p.DE_)8g?20td.oJE_u3S3JbC\.b]kQ]Z&EN[[uY0h=#V@!^@%-u_"1MbXO\L4t"n/O<^RTo%Mc9c2UW-DX&M^Gp5Q??L1QE`<=
+%d4i8!?OjAM)/2 at 7Y`N at mif!q8K-cOmU?UbnkGjds$5BL2hSo\GbUo0HWj4t";3.:=2VVo/<"tfbdC7Dcr_As\;D"F:"iEB(TjJ;X
+%gnM@:hSQ]9S0>o at +Zi!)(U2A_';d=Mlr;[FFt+G0=&,1AZG?aM,2nd][Z$bL1Vlh_DUbGZ]M1?=A1#rCZ>Z9_rLLr'7di&n6%uq@
+%-Y&Y;ADG*c"iA3F,YAuc7$I/#(!.0.[q5/Ab)(C!VGWDBni"s1;`QR.PC;ajl0l!)dUqH#D/VQd=S(VqY'F^>Jr/AkL![\O06a5o
+%jrs)7]3rm&OuHK!*<"p!$*q?+)^J$bQ:)CPMA6HL`OBE[)$GS3f$n9+SoW!.b!qle"D^d+XYZfgdob'PB$K_f;sb at +k4X&U04rJr
+%<EQ:jXJqITa^$QTgD<NOMjV[`@4jdd>e\$ZIL:/l#'9T3k42H<b>0m[D_RNM_Hagk>^hjH-MuA^dbcLtV$k%o\[HQbT2PLQc75qq
+%A'VI0j)YEXnaX^LE>12IO*.IYV^&l,c'_VOpmgTCSua;:db>Bd[](+9ZUWh5;u/RmcCg32]UrlNpoN3#qUHp/#hJ?NKfK(D]'N,T
+%nq+btHPJl6"%2F0f6,L%Ffd!84V/t8.T$iQ-(==:X at Uu'^+JO at H@jc!jL$V8A1MHdMO5lNbq>Ht5"S+Js4L*`YGoA*$7;h_pO#fL
+%KZ.0EL".g-FeJmlm"s:SW93X`8;<uo6<RNGLCEE"_Mu[*0N2QI6:2,RAUjE-VQf0JI;KZ^N<Nt^NDj[.a6]#E]?5opS1DJ25^:9[
+%e#E7T[T+iF3#3q"[j<p4I++Zj#>Ak*e2gu0^ME.cW at +bKVM*Gl?6u=sS$FI)jb%76kqfC4e$Ge=kP@!8!*nMhV<Y^Pc`4bk=oJ8d
+%?65_uD&[DCVpV7g`sM=Y5$J1uCA-"(+N'SJ!ngC+&SFEEoC>2SL at gm6qXN7;nYc5)X$@ZiXGkK*^^jTHr0^l_VRXe7c`I6^PSqrW
+%pJq=_BkA)NUEN#BXJhMQ&,AacQ%&G.*ui>G.Zd+TQ17ulpq_rLA9rNIerJ@#-Ur-J<<,O0^T7L at 9CAcZ^d*,<dOG7OmOkUC4N;[c
+%fBA`?FNuaiJnoI\C\0U<k\4:sF0<nNfB<ODd1*8+j'8>u>VjDM!&+e-.Wq6/m_)U#>Icg]g">FEfiYc?<ct2=@9hm:-rD\BBIl?E
+%MHI_hDbFQ<YnP`"@jeJ%)'sXaj>Aqt'V!pk-9#U:[u=d7e[QrFmTs*$9TU=ifIDFMhVAXtKWV,f::cs'VhY&l9Mr*`L+4fU,b,M)
+%QEcY)'C=5Y*LS@#.+>\?V2A`g9p;+pC"(^+mBMc[/)95KWM]@.-p'.ZC=7El;:<Ob8aB*N8>\X0XZ&^D=Dpl#@q2D"F\G1"P:DI7
+%DH^rsZt],2/@ODO:QJA>HYXA3(@J#!!*ct"<WR<mfpu-Y'MX3[\E$AgAhe#(as`*LMFiG#W^sY&BH!sG0k%:A`MC="UL\;41g$T3
+%@^DO.Ws3DZCV%Kd\NN]fp/hWW/_j""J>nESYR24+Kt5taF1DKr\LGba)U.:iREJ<5/iUmWY/+@\$?N`^F1Fm)Rd=6k8q3`nQX?\"
+%hTg7l9'*ZIX6QRZeC85BcK`FF>u*KBl\6r%/!B.qS!m5Od#?;=T at B*;Pk6juW@:OV`F_%dV%).c3CBk(*o9]8 at e!U/Xn<(+DL6+5
+%^b5)P<<0YDQW=.Ro'WR\TOXGOF\kDanN%6$q'r.-m`T:fUT(!/lZJECCHoZ$FlQY,:V$DRN at SJ>..V[IL"GYX=To3`q#-RW!3UoP
+%Muk+=C2La7TU)]/8].U/jjL\95mcsfHBq8*:1[cOGAh:!E%A?)G.Y-g^qcr#g"E,:7a2e[_oKGoc&#k"W_1*h^bF$1ai"'k29mC`
+%/AVK1-bCp3+gjqoIj0JTcYk;hEfH8>N@#21o7n+o2o5cFQ8D73"FVk.T<\-&fi8M1<H^GUCV3jfWXaUnka'TQV:=HI]_6X9+N+C5
+%8(A1pCa_g[(INMGEp9m.GXYS_$*2M59san.=lXXP3>5#d#9S$BAoIKV'fXf5HU+>qYO^,ScuL*VU>Y6lV3rA2c)0VqQ*>r*M=b+Y
+%V-67r<*#IADbESM(FkU at ZBQkZ<UaMGb3et8R\,Jt)%I"S_6F+iU"0_HAb;'X9B[ZZ)/$,$R*5Icb/P&H#8fdVUZZ?PP_qL1Nu-6k
+%Bf(4Chl(<?-1JJ^L+#b1=sC)+S"4Q)!D]E[Zi0gTq6Z-X;M0S/0_q1O/\Ru3_CYIs"teBXW,DlWA(iPMGc"+mDdT!=M4VA'C=m=r
+%T=Y/5>iEF2L,-G-#hQ?+[>iRQZSU;TFs4R5EA%>o*+8?D/b80NcN)!DiaTV;Is&(^lCGFKKEQncL&JhqI66mP?L^:6mDd at qch6\U
+%$N+41$Z"Sbhs>6mc+4\a!cN\D<n<7-GBI,l%TaNO0$5clCiU'U,C>(%[[R^^aTof_.0UR2p"nDg?81h=28\>W=WGa%bpSV'nH?G9
+%1kX%mObB8>7?+O*Q17tV+h/]^T"YDg+8 at f\)us#CGrVJ`Ea_\0rigaMJp-$jiYGOnO]E9/"9tUO"VhG]*;8';XX'Sq;h:i;T[ZD-
+%@Omt9PJb>*0!q^5-q[;pLY^<lPR:A!/cmGU=cY`^W[t87B&O<=@c99$#?9 at +TcQC6-i;\e2 at t9-R6L*Tmuef(aM8%31^LUGN/C(X
+%)#,4peda:6,lsud'gWJ5d&<m*?H442Znb0$;01_^&P_4V6.i*?$I>[Ym?_6C%Ae%h#H[R/7Tp*#J7:-U/:\&V3CDN+b#W'Ie?uT&
+%oXaN&[`iOV!XB%:XN2l-I77dejU6]-;L"lMo0u`1.'*h'JjXApc;:I>:nHAphX/UqZ'[KD:ro:J\qY*U6%VHN[)9G;SL;4k2fJ2Z
+%JLlqJnX+nT=ppLP,7aupNE7*s.<D0'/]-)gp(Dc?Jg<_8CLHTp&M;E4ldd+(90jI#NKnjl.PQb_.1Cp'cj?d(9Krh^Ybcr@:7sS(
+%rsZ[;as+h$!]gZDM6Gu+%oGAa$J.rgNY64U:m3(bp-b6/;he^5bD.Qi=jjMZQ7#6.r3=Cri`0b1<nglN:D.:Om%H$GL*17SNLqZY
+%Suj/iL*upf=hucr%M&D/$56c%dfBF.=G8(M:BFI&@o[duQB6=lmL=;MBb&%(VQhn/;I5`JdZlBG_IC?1^_F[>>4X?[`l?qs(FXE_
+%Og/>A/@?.L:DaY$`N6&\^uIOPIZW?m/R-J;GG^A=gqbY\Kb7_bnTL]'2 at 4XLC:*?\b3A^hY96JppS__%^c&.E%_GhC=HnLi%Dm8H
+%A"C>e`=Q?l4W9G:Y7Fi'E5E`'*A!78dgC12Wl(nTZCfKCJDmbb#QS8*5XN!j&lN[Sg7krg8X]WO?tX^m&8Z%f_pVT.TS-Mtlf:?c
+%/.o>dYc!'67F;^$entj:?]@6nV at CK!EJNZ@@3!.\9=^Lor*bkErB]K:+RFah2L:U,a]aQ,%+YFS$fH2@?sXkUAlBCcHRQNr6Fc,V
+%GkC"@L.].`:2<AG6)d&qk[Fe!!C&ub10&._<TonWgHnJ1<bk&i%r]tY5!]E1*bkmK4Kq1e@;r8dA87:79i9==L/LIV(FX<W$C&t"
+%jq6t)A=kq^`W=-YHj7lV0Fs!>Hh:eEB(sHPh<P0?`6F;8*IokN)iWLGmX"X8TNiV7A<=B@%:02F4;8ksHM$G0kE[1bs5f!h-i~>
+%AI9_PrivateDataEnd
diff --git a/documentation/figures/rna_elements.pdf b/documentation/figures/rna_elements.pdf
new file mode 100644
index 0000000..e3654a7
Binary files /dev/null and b/documentation/figures/rna_elements.pdf differ
diff --git a/documentation/figures/rnaseP-bsu-alignment.ai b/documentation/figures/rnaseP-bsu-alignment.ai
new file mode 100644
index 0000000..013f684
--- /dev/null
+++ b/documentation/figures/rnaseP-bsu-alignment.ai
@@ -0,0 +1,592 @@
+%PDF-1.4
%����
+1 0 obj
<< 
/Type /Catalog 
/Pages 2 0 R 
/Metadata 31 0 R 
>> 
endobj
2 0 obj
<< 
/Type /Pages 
/Kids [ 5 0 R ] 
/Count 1 
>> 
endobj
3 0 obj
<< 
/ModDate (D:20030327114710-06'00')
/CreationDate (D:20030327114707-05'00')
/Producer (Adobe PDF library 5.00)
/Creator (Adobe Illustrator 10.0)
>> 
endobj
5 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 2 0 R 
/PieceInfo << /Illustrator 7 0 R >> 
/LastModified (D:20030327114707-05'00')
/ArtBox [ 115.56201 306.38086 497.55957 661.31592 ] 
/Group 24 0 R 
/Thumb 25 0 R 
/Contents 27 0 R 
/Resources << /ColorSpace << /CS0 20 0 R /CS1 21 0 R >> /Font << /T1_0 22 0 R >> 
/ProcSet [ /PDF /Text ] >> 
>> 
endobj
7 0 obj
<< 
/Private 8 0 R 
/LastModified (D:20030327114707-05'00')
>> 
endobj
8 0 obj
<< 
/CreatorVersion 10 
/ContainerVersion 9 
/RoundtripVersion 10 
/Options 9 0 R 
/AIMetaData 10 0 R 
/AIPrivateData1 11 0 R 
/AIPrivateData2 12 0 R 
/AIPrivateData3 14 0 R 
/AIPrivateData4 16 0 R 
/AIPrivateData5 18 0 R 
/NumBlock 5 
>> 
endobj
9 0 obj
<< 
/OptionSet 3 
/Compatibility 5 
/EmbedFonts true 
/SubsetFontsBelow true 
/SubsetFontsRatio 100 
/Thumbnail false 
/EmbedICCProfile true 
/cCompression true 
/cCompKind 3 
/cCompQuality 2 
/cResolution false 
/cRes 300 
/gCompression true 
/gCompKind 3 
/gCompQuality 2 
/gResolution false 
/gRes 300 
/mCompression true 
/mCompKind 3 
/mResolution false 
/mRes 1200 
/CompressArt true 
>> 
endobj
10 0 obj
<< /Length 1618 >> 
stream
+%!PS-Adobe-3.0 
+%%Creator: Adobe Illustrator(R) 10.0
+%%AI8_CreatorVersion: 10.0
+%%For: (Sean R Eddy) (Washington University)
+%%Title: (E:\\src\\infernal\\documentation\\userguide\\Figures\\rnaseP-bsu-alignment.ai)
+%%CreationDate: 3/27/03 11:47 AM
+%%BoundingBox: 115 306 498 662
+%%HiResBoundingBox: 115.562 306.3809 497.5596 661.3159
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%AI5_FileFormat 6.0
+%AI3_ColorUsage: Color
+%AI7_ImageSettings: 0
+%%RGBCustomColor: 0.0039 0.5765 0.4667 (Aqua)
+%%+ 0.0392 0.3137 0.6314 (Blue)
+%%+ 0.502 0.4823 0.5333 (Blue Gray)
+%%+ 0.2078 0.6667 0.8039 (Blue Sky)
+%%+ 0.498 0.1176 0.0078 (Brown)
+%%+ 0.0588 0.0667 0.4667 (Dark Blue)
+%%+ 0 0.2392 0.098 (Forest Green)
+%%+ 0.949 0.7804 0.0667 (Gold)
+%%+ 0.251 0.6157 0.1529 (Grass Green)
+%%+ 1 0.549 0 (Orange)
+%%+ 0.851 0 0 (Red)
+%%+ 0.549 0.0941 0.5333 (Violet)
+%%RGBProcessColor: 0 0 0 ([Registration])
+%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) 
+%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1
+%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () 
+%AI3_TemplateBox: 306 396 306 396
+%AI3_TileBox: 18 20 594 776
+%AI3_DocumentPreview: None
+%AI5_ArtSize: 612 792
+%AI5_RulerUnits: 2
+%AI9_ColorModel: 1
+%AI5_ArtFlags: 1 1 1 1 0 1 1 0 0
+%AI5_TargetResolution: 72
+%AI5_NumLayers: 1
+%AI9_OpenToView: -90 624 2 1578 916 18 0 1 10 73 0 0 1 1 1 0
+%AI5_OpenViewLayers: 7
+%%PageOrigin:18 20
+%%AI3_PaperRect:-18 776 594 -16
+%%AI3_Margin:18 -16 -18 16
+%AI7_GridSettings: 80 5 80 5 1 0 0.7529 0.7529 0.7529 0.8765 0.8765 0.8765
+%AI9_Flatten: 1
+%%EndComments
+endstream
endobj
11 0 obj
<< /Length 11690 >> 
stream
+%%BoundingBox: 115 306 498 662
+%%HiResBoundingBox: 115.562 306.3809 497.5596 661.3159
+%AI7_Thumbnail: 128 120 8
+%%BeginData: 10982 Hex Bytes
+%0000330000660000990000CC0033000033330033660033990033CC0033FF
+%0066000066330066660066990066CC0066FF009900009933009966009999
+%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
+%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
+%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
+%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
+%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
+%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
+%6666006666336666666666996666CC6666FF669900669933669966669999
+%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
+%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
+%9933009933339933669933999933CC9933FF996600996633996666996699
+%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
+%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
+%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
+%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
+%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
+%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
+%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
+%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
+%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
+%000011111111220000002200000022222222440000004400000044444444
+%550000005500000055555555770000007700000077777777880000008800
+%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
+%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
+%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
+%524C45FD5CFFA852A8A852FD28FFA852A852A8FD44FF7DA8FD08FFA87D7D
+%7D52FD28FF7D7DA87D7DFD41FF7D52A87D52FD07FF52A8FD0CFF52FD08FF
+%A8A87DFD12FF7D52FD46FF5227A827527DFF527D527DFF5252FFFFFFA852
+%FD07FFFD057D27FF527DF8A852FD12FF7D52FD04FF5252FD30FFA87DFF7D
+%52FF52A8FD09FF52FF52A8FFFF7D7D7D52FFFF7DFFFFFF7D52FD07FF7DFF
+%52FFFF7DFF7DFF7DFF7DFD18FF5252FF52FD2CFF527DA852A85252FF5252
+%FF52FD0BFFA852FFFFFFA827FF7DFD0CFFFD047DA852FF52FF52A852FD13
+%FF7D7DFFFF7DA8FF5252FD2CFF527DFD08FF5252FD09FF7DA87D52FFA87D
+%FFA8FFFF7D7DA852FD08FF7DFD09FFA87DFD13FF527D7D7DA8FFA8A8FF7D
+%52FF52A8FD24FF7D527DFD0CFF5227FFFFA852FF527D527DFFA87DFF7DFF
+%5252FF527D7D52FD29FFA87DFFFF7DFFFF7D52FF527D7D7DFD23FF527DFD
+%0CFF5252FFFFA87DA8527DFF7DFFFF7DFF7D527D52FD30FF527DFFA8F8FD
+%05FF527DFD21FF7D52FD10FF7D52FD04FF52FF7DFFFF527D5252FD32FF52
+%5252A8FD10FF7D27FD17FF527DFD10FF7D52FFFF52FF7DFFA8527D527DFD
+%35FFA8527DFD06FF7D527D5227FFFFFF527D5252FFA852FD12FFCABCCAFD
+%13FF7DFF7DFFFF527D527DFD41FF527D5252FFFFFF527DFFFFFF7D525252
+%FD10FFCAC3C3FD13FF7DFF5252FF527DFD3AFF527DFD07FF7DFFFFFFA852
+%A8FD07FF5252FD26FFA8527D52FD3DFF7D52FD06FFA8A8FF52FF7D7DA8FD
+%09FF527DFD0EFFBCCAFD14FF7D52FD41FF52A8FFFFFF5252FFA8A8FF7DFD
+%0BFF7D52FD0EFFBC9AFD14FF5227FD41FF527DFF7D7D527D527DFFFF7DFD
+%1BFFBCFD15FF5252FD44FF527DFFFF52527D27FD0DFF52A8FD0DFFC3BCFD
+%60FF5252FD0DFF5252FD23FF527DFD43FF27A8FD1BFFCABCCAFD06FFBCFD
+%14FF7D52FD42FF5252527DFD05FF7DA8FD0CFF7D7DFD05FFCAC3C3FFFFFF
+%A8FFC3C2FD58FF7DFFFF2752FD04FF527DFD0CFF525252FFFFFFBCC3FFCA
+%BCFFA8277DFFC3C3FD12FF5252FD45FF522727FF52FFFFFF52A8FD09FFA8
+%7DFFA87D7D7DA8BCC3FFC3BC52F8A852FFCAC3FD12FF7D52FD46FF7D7DA8
+%52FFFFFF5252FD08FF527DFFFF7DFFA852A8FD04FF7D277D52FFC2CAFF7D
+%FD0FFF7D527DFD48FFA87D7DFD05FFA852FD04FF52FF527DFFA8A8FFA8FF
+%7D7DFFFFBCCAA852FFFFBCC3FFFF52FD0FFF527DFD50FF7D52FF52A85252
+%FFFF7D527DFF7DA8FF7D52FFFFBCC2FFC3BCC3FFFF7DFFCABCCAFD0BFF7D
+%7DFD55FF5252FD05FF525252A8FFFF7DFFFFFFBCFFFFFFBCC3FFFF7DC3BC
+%C3C3A87DA852A8A87DFFFF52FF527DFD5DFFA8527DFFA8A8FFFFBCBCFFC3
+%BCFFFF27A8FF9ABCFFFF7D7D7D527DA852A85252FD63FF52A8FD06FFBCC3
+%FFFFA8C3C3FD71FF5252FD04FFC3B5FFFF52FFFFC3BCFD72FFA87DFFFFFF
+%BCBCA8FFA8CABCFFFFFFBCFD5BFFA852A8FD12FF7D7DA8FD04FF7DA8FFBC
+%BCFFFFBCBCFD59FFA852A87D7DFF52A8527D52A8FD0DFF7D27FD04FFCAC3
+%FFFFFFBCFD5BFF7D52FFFFFF5252A87D52527DA852FF527D7D527D7D7DFF
+%FFFF5252A87DA8FFC3C3CAFFBCBCFD61FF7DFFA8FFFFFF7D7DA8527DFF52
+%7D527DFFFF5252FFFFA8A1C3FFFFFF2727A852277DFD58FF7D52FFFFFFA8
+%A8FF7DFF27A8FF7DFFA8FFFFA8FFFFFF52A85252FF7DFFC3C3CA7D522727
+%FF272727FD58FF7D52FD06FF7DFFA8FFA8A8FF7DFFFF7DFFFFFF527DFFFF
+%FFA8A1C3FF52F85227FFA827277DFD5AFF7D52FF527D527D527D7D527DFF
+%A8FFA8FFFFFF52FD06FFCABCFD64FF527DFF52FD047D52FF527DA852A87D
+%A8FFFF7DFD0DFF52A8FD46FF52A8FD0AFF7D52FD10FFA8FD04FF7D52A852
+%A85252FD08FFC3C3FFC3BCFD0452A8FD44FF7DFF52A87D527D52FF7D7D7D
+%527DFD10FF52275252FD06FF7D52FD08FFCAC3FFBCC37DFF7D52FD06FFA8
+%275252FD0EFFF87D277DA8FFFFFF52A8A852FD21FF52FF527DFF7DA87DFF
+%7DFF7D527DFD10FF277D5252FD10FF7DFFFFFFC3C3CA7DFD08FFF82752FD
+%0EFFF8525252FFFF7D7D52527D52FF527DFD1EFF7DFF7DA87D52527DFF52
+%FF7D7D52FD11FFA8A8FD08FF5252FD06FFA8FD04FFCAC3CABCCAFD06FFA8
+%27A827FD0EFF27FF277D7DFF527DFD05FF7D52FD1EFF52A8FD0BFF52FD1B
+%FF5252A87DFFFFFF5252FD04FFA8FFCAC2A1C3C3CA9ACABCC3C3BCC3CA9A
+%C3B5FFCABCFFC2C3FFBCCA52A8FD047DA8FD09FF527DFD44FF7D27FFFF7D
+%7D7DFF7D52FD04FF52FD04FFBCC3CAFD04C3FFBCC3C3C3BCC2FFC3BCFFBC
+%C3FFC2C37D7DA87D7D7DFD0AFF527DFD44FF5252A8FFFFA852FFFFFF527D
+%5252FFFF52FFA8FFFFFFA8FD07FFA8FFA8FD26FF52FD08FF7DA852FD28FF
+%272752FFA852FFFF7DA87DFD04FF527D7D52A852FFFF7DA8FFFFA8FFFFA8
+%FF7DFFFFA8FFA8FD09FFA8FFFFA8FFA8FD0AFF7D52FD0BFF527D7DFF27FF
+%FF52527DA87DFD27FFA852277DFF7D527DA8FF7D7DA8FD07FF7D7DA8FFA8
+%FFFFFFA8FFFFA8FFA8FFFFA8FFA8FD09FF7DFFFFA8FFA8FD0AFF7D52FD0B
+%FF7D277D7D52FFFF527D52FF52FD27FF5252FFFF7D7DFFFFA87D7DFD0CFF
+%7D7DFFFFFFC3CAC3BCCAC3FFC3C3CAC3FD09FF7D27A8527D52A8FD09FF7D
+%7DFD0BFF7D7D7DA827FFFF7D7D7DA87DFD28FF5252FF527D7DFFFF7D52FD
+%09FF527DFF527DFFFFFFBCC3BCBCC3C3CAC3BCCABCFD09FF5252A87D5252
+%7DFD09FF527DFD0BFF52FD0AFF52FD29FFA852FFFFFF7DFF52FD07FFA852
+%7D527DFD11FF7DA8FD0EFF52A8FD05FF7D27FD42FF7D7DA8A8FFFF5252FD
+%07FFA8527DFD04FF527DFFFFFFC3C3FD06FFCABCCA7DFD07FF5252FD05FF
+%52527D52A852A85252FD09FF5227FD36FFA8527DFF7D5252A8FD0DFF7D7D
+%7D52FFA8FFBCC3FD06FFCAC3C3A8FD07FF7D52FD07FF7D52A87D7DFD09FF
+%52FF5252FF7D52FD31FF527DFF527DFFFFA8527DFD08FF7D52FFFFFF527D
+%FD10FF7DFD1CFF7D7D5252FFFFFF5252A852FD2DFF52A8527DFFFFFF7D7D
+%7DA8FD09FF527DA8527DFFFF7D27FFA8FFBCFD07FFC3C3FFA8FD08FF52FD
+%05FFF852277DA8FF27FD07FF527DFD07FF7D52FD2DFF5252FD07FF527DFD
+%0BFFA8527DFFFF5252FFFFFFC29AFD06FFC39AFF7DFD07FF5252FD05FFF8
+%522752FFFF27FD05FF527DFD0BFFA852FD46FF7D7DFFFFCABCCAFD06FFCA
+%C3FFA8FD0EFF27FF277D7D7D27FD05FF527DFD0BFF7D52FD2AFF527DFD08
+%FF7D527DFD0FFF527DA8A8A8C3C3FD06FFC3BCFF7DFD08FF527D7DA8A852
+%FF527D527D7D7DA87D527D52FD39FF527DFD09FF527DFD0BFF522727FD11
+%FFA8FD08FF527D527DA87DA8527D7D52A87DFF527D7D52FD0EFF7D7DFD29
+%FFA852FD09FF527DFD0BFFA8FF52FF527DA8A8A1BCC3FD06FFCABCFF7DFD
+%0DFFA8FFA8FD07FFA8FD10FF7D52FD29FF7D52FD09FF527DFD0BFF527D27
+%FF7D7DFFFFFFBCC3C3C3FD04FFCAC3CAA8FD0AFFA8FFFFA8FFA8FFFFA8FF
+%A8FFFFA8A827FD0EFF7D7DFD41FF52277DFD08FFC3BCFD07FF7DFD0AFFA8
+%FFFFA8FFA8FFFFA8FD04FFA8FF7DFD0EFF7D52FD2BFF7DA8FD05FFA852FD
+%0DFF27F827FF7D52FFA8CABCCAFD06FFC3C3FF7DA8FD09FF52527D52A87D
+%7DFF52A852A8A8527D52A8FD3AFF527D527D7D527D7D52FD0DFFA8FFA8FF
+%527DFFFFCAC2A1FD04FFC3BCCA9AFF7DA8A8FD08FF5252A8527D527D5252
+%A8527D7D52A8527DFD0CFF7D7DFD2EFF7D52FF527DFD13FF7D27FFFFFFBC
+%FD05FFC3C2FFFFFFA8FD1AFF52A8FD0BFFA87DFD46FF5252A8A8A8C3BCFD
+%06FFCABCCA7DFFFFA8A8FD06FF7D7DFD0EFF5252FD0AFF7D7DFD46FF527D
+%FD05FFC3C3FD05FFCAC3C3A8FFFFFFA8FD06FF527DA87DFD0DFFA852A8FD
+%08FF527DFD46FF527DFD05FFC3BCFD08FF7DFD04FFA8FD07FFA852A852A8
+%5252FD08FFA8527D5227FF52A8FF527DFD56FFCAC2FFA8FD05FFA8FD04FF
+%7DFFA8FFFF527D7D52FF52FD09FF5252FF7D7DFF527DFD48FFA852FD04FF
+%CABCCAFD05FFC3BCFF7DFD06FFCABCFFFFA8FF7DA8FF7DFFA8FF5252FF52
+%7D7D52FD54FF7D52FD04FFCAC3C3FD05FFCAC3FFA8FD06FFC3BCFFC3C3FF
+%A8FFA8A8FF7DFFFFA8FF527D7D52FD56FFC293FFBCCAFD07FFC39AFF7DFD
+%08FFA89AC3BCBC527DFFFFA8FF52FFA8A8FFFF7D527DFD54FFBCC3FFC2C3
+%FD09FFA8A8FD06FFCAC2CAA8FFC3BC7D52FF52FD05FFA8FFFFFF527DFD60
+%FFCABCFD09FFBCC3A8A8FD05FF52527D527D52FFFFFF527DFD61FFC3BCFD
+%0CFFA8A852527D7DFFFF7D527D52FF7D7D7D52FD05FF53FD66FF9ACAFFFF
+%7D27527D7D5252FD05FF527DFD06FF5354777EFD59FFCAC2CAFD08FFC3C3
+%FFFFA8A8FF7DFF5252FD0AFFA87EA8FFFFA253FD5AFFBCC3FD0CFF7DFD04
+%FFA87DFD0BFF537EFD04FF5354FD57FFC3C3CAFD08FFC3C3FFFFA8FD10FF
+%7E7EFD05FF7E53FD57FFCA9AC3FD08FFBCC3FFFF7DFD10FF7E53FD54FFA8
+%27F827FD15FFA8FD12FFA852FFFFFF7EA8FD13FF5252A8A87DFD08FF52FD
+%07FFA8527DA8275227A85252FD1CFFF85227FD06FFCABCFD09FFBCCAFFFF
+%7DFD0FFF5353FFFF7D7E4DFF537EFD13FFFD047D527D5227527D52A87D7D
+%527D27A87D7D7DFF277DFF52527D7D7D527DFD1AFFA827A827FD06FFC3BC
+%FD09FFC3C3FFFFA8FD0FFF7E53A8A8FF7878FD16FF52527D52527D52F852
+%52527D7D52277D27A87D27A8A852FFA8527D277D525227FD11FFBCCAFD1B
+%FFCA9ACAFFFF7DFD0DFF7E547EFFFF7D7E7EFD18FF5252FD04FFA8527DFD
+%07FF7DFFA8A87D7DFFFFFF7D7D527D7DFD0FFFBCBCFFC2C3FFBCCAC3C3CA
+%C3FFC3C3C3BCFFC3C3CAC3BCBCFD08FFCAC3C3FFFFA8FD0EFF53A87DFFFF
+%A97EFD18FF277D27A8527D7DA85252FD047D5227277D7DA87D7D52FFFF7D
+%52A85252FD0FFFC3BCFD04FFBCC2BCC3CAC2CABCC3BCBCFFBCC3C3BCC3BC
+%FD0BFFA8F85227FD0CFF53FFFFA87D7EA8FD18FF527D2752527D5252527D
+%52FD057D527DFD04527D7DFFFF5252527D52FD0EFFC3C3FD05FFA8FFA8FF
+%FFA8FFA8FFFFA8A852FFA8FFFFA8FD09FFC3C3FFF87DF8FD0BFF7E7EFFA8
+%FFFF787EFD45FFA1BCFD05FFA8FFA8FFFF7DFF7DFFFFA8A87DFFA8FFFF7D
+%FD09FFBCC3A827A8F87DFD05FF52277DFF5353FFFF527E53A8FF7E53FD44
+%FFC3C3FFFFFFC3C3FFBCCABCBCFFC3CAC3CAC3BCFFC3C3BCC3FD14FF5252
+%7D7DFF7E53FFFFFFA97E7EFF53A8FD44FFC3BCFFBCFFC3BCFFBCC2C3BCFF
+%BCC3BCC3BCBCFFBCC3C3BCFD08FFC3C2FFFFFF7DFD05FFA852A87DFF7EA8
+%FF7DA8FD06FF777EFD46FFC3C3FD14FFC3BCFD05FFC3C3FFFFFFA8FD05FF
+%5227FFFFFF537EFFFFA87EA8FD04FF7E53FD5CFF9ABCFD0AFF7DFD06FF52
+%52FF53FFFF52A8FF537EFD65FFBCFFA8A8CAC3CAFFFFA8FD08FF7E7EFFFF
+%FFA853A9FD05FF7E7EFD5FFFC3BCFFFFCABCC3FFFF7DFD0AFFA852FFA87E
+%7EA97EA853A97E54FD5FFFC3C3FFFFFFC3C3FFFFA8FD07FF7E7EFFFFFFA8
+%7E7EFFA27EA87E7EFD61FFBCC3A87DFFBCC3FFFF7DFD05FF7E54297E7DA8
+%FFFF537EFD67FFBCCAFFFFFFC3C3FFFFA8FD06FF78A2FFFF7DFF53FD69FF
+%BCC2A87DFFBCC3FFFF7DFD05FF53A9FF7DA8FF7E54FD64FF27277D52FD0A
+%FFA8FD05FF787EFFFFA853FD66FF2727527DFFC2C3A87DFF9AC3FFFF7DFD
+%07FFA8FFFF7E53FD0AFFA8FFFFA8FD08FFA8A8FD4DFF27A8527DFFBCC3FF
+%FFFFC3C3FFFFA8FFFFFFA953A9FFA87E7EA8FD04FF78A97E53FF537E53A9
+%FF7E537E7E7EA97EA954537EA8FD047EFD4DFFC3BCFFA8CABCCAFFFF7DFF
+%7E7EA87E7EA8FFFF537EFFFFFFA8537EFF7EFF7E7E7EFFFF7E7E77FF7E7E
+%777E7E7E777EFF7EFF7EFD3FFFF85252FD0BFFBCC37D7DCAC3C3FFFFA8FF
+%7E7EFFFFFF7DFF53A9FD04FFA854A87E78FF7E7E7EA9FF7E7E7EA87E7E7E
+%A87E787EA27E7EFF7EFD28FF52FD16FFF85227FD14FF7DFD08FF5453FD46
+%FF27FD17FF27FF27FD0AFFCABCCAA8A8CAC3CAFFFFA8FF7E7EFD4DFF527D
+%FD23FFCAC3C3FFFFCAC2CAFFFF7DFF537EA8FFFFFF7E7EFD48FFA852A8FF
+%7D527D7DFFBCFFFFFD04C3FFBCFFBCCAC3C3CABCC3C3C3FFC3C3BCFFFFC3
+%BCCABCCAFFFFC3C3CA7E537E7EFFFF7D7D78A2A253FD48FFA8527DFF527D
+%7D52FFC29AFFBCC3A1BCBCBCFFBCBCCA9ACABCC3A1BCFFBCA1C3BCFF9ABC
+%CAC2A1A87DCA9AFF5354537EA8FFFFFF537EFD59FFA8FFA8FFA8FD07FFA8
+%FFA8FFA8FFFFFFA8FD0AFFA8FFFF52FD5AFFF8A8FFA8FFA8FFA8FFFF7DFF
+%7DFFFFA8FFA8FFA8FFFFFFA8FD0AFF7DFFFFFF7E78A27E7EFFBCCAC3C3FD
+%3DFF7DFD15FFA8FFA8FFA8FD07FFA8FFA8FFA8FFFFFFA8FD0AFFA8FD04FF
+%53A2537EFFC3C3CAC3FFBCCAFD38FF7D7DFD12FFCA9ACACABC9AC3FFC39A
+%C3B5CA9AFFCABCFFC3BCBCC3FFBCC3FD0AFF7DFD0EFFBCBCFD38FF7D52FD
+%12FFCAC3C3C3BCCABCFFBCCABCC2CAC3CAC3BCFFBCC3BCCAFFC3C3FD0AFF
+%A8FD4AFF7D52FF527DC3C3CAFFBCCABCFFC3C3CAFFBCFD16FFC3C3FD0BFF
+%7DFD0FFFBCFD3AFF7D52FF527DCAC3FFC3C3CAC3CACAC3FFC3C3FD16FFBC
+%C3CABCFD09FFA8FD0EFFC3C3FD64FFC3BC7D7DA87DA87DA87DA87DA87DA8
+%7DA87DA87DA87D7DFFFFCABCFD67FF9AC3FFC3C3CAC3FFBCBCCAC2CAC3C3
+%FFBCCACAC3A8FFBCC3BCFD67FFC3BCFFBCC3C3C3CAC3BCFFBCC3C3BCFFBC
+%BCCAC2CABCBCFDFCFFFD1FFFFF
+%%EndData
+endstream
endobj
12 0 obj
<< /Filter [ /FlateDecode ] /Length 13 0 R >> 
stream
+H��W�o��
 ���a�m">�WP�^{9t7A
{؞�@�GXY��{�_�!)ۊŶ@/���p~3��̐~����
]���^����ݻ�3��vW�c�u=�CgYgw�F��J�k�4I~2]_���~-��{S4�]����<8���_�f5�M��T_-d؞[�j�
�gW�E�-��y1]SԋE�.ǵi�b ���؛n5V�Y,�j5v�_,@�7���xQ�ժ��Eu��	 �b 4$"D4��*��`%�vlJp+n�1
(�A�d�9��?Uw�?�d�X�K*�iqɘ� ��3eq���m�.M�'m�v�U�l!$���R���u�-��b�e���f ٟL��
ղ�k
���/�.���6��s��u���}4�4��G��fOyU8�u1�
���On��=�
6i?;�x�^��
�̻�{'�Q��	�!�``�3"�Ep��s�PE`��
+8�Qpף�
0d�#I��PJ�z�+�{!���p�]Jk�K�9��G�
�
�Yܵߚ�/LZ	�xgӢ��
�ּ��A�L?�7�
��nZH�ԝ���8�˰�3k3��v���+¬���+��!$��-��
t:Q�)��8}���
�������AïwfU�
 ���s_�����~���
�Լc=�lR�q8�?7��

+�m7�
F 9yq�

�^��mj��o�� b�s�
�mǙ�Y�`֛z�+l[��xw"���e at P�T�[<T��Z�oW�Ƕ1S��n�����1	�"�n�M
���)�mij0s��u�򱙅h�x(���=��8��+vF>��[c;�l�lL��~r^^(�l�䷂ػ(�~:��Y�Z���
+�[(훮ZU͕
�O
�t[lLwg����!Z.j��>��
��
+a>���]U
څ���n���� }ט
Ӗ!~�`���dM��k{Z�k���
${ݮ���ĭ�����������v0=8U�@�p�_M�)�-<�5��AV��Ϟ]���X
�b�2�4�z��:Ƞ���
B̆�v싦
�E�6!\u��]��!��
1��2@��
'�:�M:���/=��
BӔp�f톡�KBI�f
�
��GF=�5a�����d�
+?���^V�A�o�%D�G�r�:�,�0��s�~1�sW �2�ɇ�v��tv�YWM� \��7RݴC��ݼ�&�\�`���u
�
+gn�-ȱ�om?BЪ�
�W��Y�
�GHj:^��cwږ���n�*u� ��E�
k瑔v��0��kQ�x��"�vi ����g��}|�~��n �Y�L.�������l���k/u�M\�d��2��~tA͍�x��
p�}�����M�
o�����nC�
�8?�Q����k�A�x4�j}Xx��n?�
]x��^I��Q�p�
��p㵛T�=��R���f&����p4�`��۝O�
�N"{\Y}�,�c���[��3�1[�<�`lw�ӓ��wN���Cw��j�O��dͲ��ʫ�i�(�?�~
�� �{��?N�&h[;=����ݘ�������)��p&�GX��ͣ����߈�^������7�r��������\��
+�A��E�e���
��}!�K��k5����9&A\��鯧'y�gy�'y��\�29�Y
�4'9�Q�gY�fIg:S��D�3�E�H�3��i��i�ƩNU*OOR��QJS��%y�%i�$q���D$<aI�Є$8Aq
gq'q
�X�21�Y
�4&1���չ�t�
k���Zh���4�Dc�T�2��D�J+���+x2(x at +���e&S��Xj�$�(���HRI$�H�"�HD,�PB
+xt&"AX ��<�1�\q�|`<��9��r���%,f�)&�`�11���P�GY�FIG:R��D�#E�H�#Ds�є&4��*
+>RA9e4�76��-��$#)IHL4QDA8a$"��	�9�p�
c��X`x��SL0��#��Dp (F4�F
�k�#�@�o �{�;�
6I�)r�{ȶ�+�.���g��8��{���!e�׮]�d�>���,MaS;�? uD�;��bF���(���-�7D���

���~@�)�h�������H�!1���FyDLjc�[-��KDG�����i�8��4�)�;�

Aye����r�]�iWvʕ�->�
+���F��ӓ��PG����^Kr�:��*��PE��]DQ�����5 Eiv�^���&q�

+�@7؞�Rc��l�ʆ=ش��Ȅ4�6Nl�
�m���g�������$*q~�@�+vC&6�ġ�r0D�E��Q)�8,b��$*���ruڳ����C�X��qbW�i�Ҫ*�Qg�
\(;4�
������Ү.b�}��������}`djc������Ğv7�n_f^ݺ`gj^Y�gƅ_ܶ�L��?��Mk���HT��S�>	o�E�zZ�
~���i`O
�L�fc�&�e�����.;��͓���	�GM~��������1�	N|7��·O���������L4<0=0?��M�������@~Î����
�'�;�3r��7�#�>�X��oHlp��=?�?P�p<P
8Q�����qM�N��%.Db%!c8����.P��/Y\,��aK<�8����c2���s�P�qS��Z���� 
;�$�J`��O	2���P}������L-�1��C#���H�L���Ȅ��^G�1����PK?v��S�{�c�ް.�C���/e�
+���ʼ�8*nsmA��.�tet�xa���^�+So��PP�J
�.��f������p�r*^�a,��
��p;�?|/Ch�U���\r�[F�f�{fH��Ԋ"5XL`]�T
8C�tW�7����6½|<C�R�(mC�
+�����	9 C�"�({C�
+�
3rCD~�
�$2_ �
+J�Y�a��
$!�d4C��*�jo�eFr�H0)o�2;�|@
g�
aӁݵ��;ig�H�H�����H쇝] �oT�D���qG�z����ʝ��H�nTf�Oj0Py
Ֆ����=���D�Djf��)��i�Xd���ڰTTl�𽂻��#�
^��N�ʐ�<-�Cl#軀e&MM��-�O=�{�/�^0�H�}e��� ����� A���K4�l�؜� Z���hc��Q>�7f�d9R�J)�̏.&�o��=W_^�Z��H���2�����'�~K~[N�%0jc�s���Ao^�7
j�m�zVߓ�i�S�{�6$XͰ�L.a�~t���}7�製(�
?�?�9t
\�Þ�~�u
Z�M�7>q8s�����sG'��
�>?�	�3ȧ��!�DZ��W�k���[[s�
��#��j$l4�L#؍���P�J��h ��h�V!f!v��2��J�H�F����4��nOy��8Q����,��P9N�
1
i��D�J�ɴ"1#�MZ�nb?hNՆ�8v�(j���'����?u|-be
f�"�>g0��"4s������܍:z�
�/-�d�;ڥc�q:6h�4SG�8h�����׹Q�2\�E���t-,�W�� w
�ʠ�ν���`0֝����X�?�mg��&��1�=u���,�l�a6���i�51?)�
,�L4G�i1���$F�i��E
gD>Mb\��Ï��@��F�H#J��̏��,�0k�թ�aX�h�����&�O1��	��ĭO�	m�
W�v������c#ٓ^-Wp�E�1<���G�
Cd6�3FZ
�c$�H��D���G2�+G�v!q�#�=F� ��(c�=Dv3 [...]
�L���:��^�������P�K�D<-���
��+�-uF�aR�L��7���ĉ:=
��9}��sN}���\�tu�"�=��E9Q�;h���Pd��U�
�5s)MaW���c�{���+aU���m6��'�;��Di�T�J8�珪r
z��#h��l%iL�� ƨ�,�!���*�&�!X��!O!Ъ��=(�88�e �X?hbE�9���H|5�C�Q�A�-Ls����	�/�mDF���A�AJ��H�jr!,Ir�.O&�'%�
i�3�b��!WE%�\hc��D��&�A���ؙ��b=��&FE�A
��U��W�G��94���6����ߋ��b�wN�M�r����g�9�M���ٝ/���IY�����
+T^.N�����C� #
+cB�Xc�H!�Jt#��چU#��ѯ�Vi��}L���W)����K�_�:�r���B	Kǔ�pM��)�+7MTS�*a5
�r_�;97��Y9��.����.�T�<�G�0{���8;�c�x���A��9ȋr�|�ʃqpX�7���<X��҅5�E.��
kXW�i�jj%��VO*W ��D�"�HV�Ԇ;2�U&���/1	J.���b~�̔�07�Nɠ�H�dU&Wɱ�jqGз"-�q�$dnF3tf�^�e�ܿ^���
��
į��fXL��{�A��t���/����	�I_�_����z.S�C6�\�a}4��p>����@6�)��dT0�S2(�
�#��^��\�XF�@8�o�r
+$�=�r�J�]OFz	�;C��;�#W��w�t���D_����#��,���ʷ���l�Y3��K]�O.������8�uȶ�nV��X�6���Q̟�5SHx����i���zkZX�B��`��10&H����|�-FL��s�L�(�y�#��C����J

� ��W|Ά͸Vx(נ[!�s׀]�/"�����x���۶۷߉훇�k�y_�e!��ՠ'�zp_�����[���
�z�}��ǫv_���h��	'�o�ot��@~�;�?�����y^~�0�O|.t�W�kP�s!�z����T�үW���)1������<v���o N��z����)!R�ړ�Y2����9
eB�̔Izʔ�ܝ9�eRo\v�,������
!�%�/vx�?9�_0H'x��Y�D\i�CU�U���v��jp��mCp������
�0��
��	.����^��

��3l.��R at F(	wD28SC;��
3��	9"#O䊊|��v�4�0#�GB
+�H#��"�44j at Z�w��wE�ِdv$�����<��f䞈����2�PA��HG
�, -�HM�)!Ee��r��V��0�,sF��_	;IF"+Hf	�a�����2]F�+�zٯ�v@�
w�′`��ձP�p,͕�jM\K��ʥe���\hd��Z?VPj�U�:.\���	ilcE��RՃ+*�ھh�Rߙ+Xd���״ݪ}p��cZե�k�̵/��Z��_u-r
I�]��0/������u����
?�b9��������ꏝYl�׉h��vuUFfdD/c8:
+�L#%��hT2��a��d;;dž茲���*��8�(K�8^��n�7L���,��
+?C�EÑHKC�xQb*T�k�|J�7B�0&ʽ�(E?	m�-ĉ���I��H=*�`5�*`

*A#��reٲ�5���Y��1s�g�d�r�,"��eS��ϫe�rk�e~-�-ϖi�'�+���>{�}�?����``�o�.����B���4�n��u�+��
�͐+���14{�b�G���v �h���qt�
i���6�;G�]?8�c� �0m5`U�Wx%7�+��%\R�
�_���՛�7�wL�wUH�%�����
]�������D���"������Y{'�
~jB���'�X�-���5Z�
�W~��|����g�N�W7�W���'
�R�sۅN���P/?n�۞��ƟӇ�������ק?��|���T������/����K���돯_�>*!�A5��(:�>��s�=g�s�ZU�1ZH��$�M{��;4��Nj�Q$'�BփS��k�
��	���?ۀ�[��фG
+�A��5aT[
�ޤV��-��(� ��K�VdW|&�v�u�^��z�ت-J~�����Z%�Z��
�\!f��

�uИ_1����@�Q�
TED5���?k�F��r�6a��d>������9 �V�Z���'�Go�)�E�������������b5�آ�
��I�P�j��j8�'q�R'th(����#}F���L��dh���E�1�*#�=��"���p�E�n:
pB��X8����5�(��c+��U��Q!�������zn���gn�������J
hVϪ�R�V��VK���:��C�z�ٞY3
+� X�S�2�g ���N��W� �hY����(8C:���f*-[@
+E
�� 1l��ǃ���� 	#���I�&@�B�AW��

;�\��a�n�B�f���y�G�<@6�tU�"
2I[���h*p�6_�G����J�`�e��I��ր�2c��/Q�Dd��R�`<�"G��(�z�Ϻ�s[Ƀ�r��&�H��\���+#����H{&��tƂ�������C%$��far�K
t��`�^]���,R�;��3zl@�u0#	���A+����&���B��:�j�����B��I�EG�03�
+�	(Q���1lة����"$��P��
�
�U����15����ٚ|�r'��3co����D�fU�6�##{s���Q	R�Y�b�F��"�=�2���g�2��1,���p�%�Ą2�n�t#(8�n����I�b��[0S�M�y��%�$mP�Gq�+�4k%�*�A�@-��bş*��=�}��ۗ�O��o/���������c��
�0�`�!R����
+�2A+Qo
@��5��
+���{U�Q3�(�թ�#ٟ�lyB�H�X$�����EM👅�+�0�2Hm�FRɳ�;�)�|Q�6�Z�\��Qu(�	*-�<�(M�0�d�@C
�i�;���E��ũ32��]��-�b���Z�Cs�م!H¥a�$� 7
DL�d��}���@a�*	Y_��"dB�dn�n�Ղ�3vڀ3v߀�(/�C�䶈،�Hi$�ERc�%�AB#Kf$P�d�D�X��J

Ց�9�Ej��و�З��k��(,��"R�Ƥ�T�

0m(��ӄ�-B���j$��&~v�s�h_���6��v���~YTߕ(�j#k�j�g��Qd�.����������U0*�U�\m�
R�D�q��0�^k����5���v3�6��\\��X$�&�ATD��4��
�2�����S~_���n��
�!���j�٠Ә+C�̆��8p
n��E�}̃����UڻR
��J���+�jى7uhY:I�S=Z��1��. ����S-�QRԤDRut�j����(U�ܢJ����dx��e�x��.�ʬ2��
�
+b�$�0�q
PK��2��p�TX��4�I�q WN2�A�ݠ!:p�L$�,< �5���=�6O���BJ0p'6'���WS��ܙ���΁I��r�y��#{�
� �{�A�kPJ�
0HV*.fJ�E���y�x�VXy��������n$�j�j
+k���&�M`��6�
��N�\j��6�-��K�ݺ����LCU������B�,n��b���2�5l���Vr�e��,�z��Y�U�:�L�цu'+�lv�B�`
�[����:��%
�QӞ�q��
+^�r���]�ML[�-L@
��;v�=&�f��O�9ER���VL[طǿ�������<z����˾�!�����n�r:�9���0��Y���O��g�,�O�`W�B�Sԇh<Lo�
���D��0�.�O�i���`�̈Ze��:]����iZ�b	'��U�S�y�O�&���+ ϊI���Z�(K�#3k�`�k�"���,��"�1KmLR
�]�Q�c�Ɋi�B�ז��#
��BX<@��_�e��i�0+��%PG��	��Y�8�;����Jj�<
��W�!����8�Sf¬A�=(��5HU|Z��j���Zy�Z~�\�y��^	NI>��Gr����I�kr$M��I�1k2p*`��Is at 3@�?��G���9?:�/����s|-V'��*���@��Ϣ=Q=g�yO{�S����Ug�:-�7���_
����g�6|M��|��8|�e�NL71߉e���>��!q{��7~?Gs'�M�7�6��:GÝo"[`�|��&�;��ĺV\����m��]u�����C�w��n�)�R��VU��c}Y���_�%�
�(����7����;�=Ī�/15��!Eު�悡k�`ݵ��ڞNǗ���k������{� k>�Q`O
���-S���s��<=�����������
��w?]~���ӿ�^�y���������r�>]~|����X���a��m7��K%kQ5��+�U�
+�W	g�B�&��@�
&�L -.~�	�<�K
�9�R��0����_v-zY�����Fj�[R�}��-�Uȅq�!�dq���oU��ZR�=����`�;����:��)�� Ӛ`^
LlS��ak
�ͦ��C��1�Z^�"��I�wU�a����:�'ܿ0�������i^L�'
��+&�.�
e�'w�.�1|j�'��^�Ie�O��R�,��5{�����b��Y_��s�zR>k���;=���5�%K
�a���S6�?1��Y�c�ю�*�ۦ���-�A�!
+j/Y�q�'w�iW������x.ї]b����q�'n��3|�T.T��O5�SM��n�%�
8C����n�&T��6
0�ʅ�R���Pc�)�f��I�+|��+_�Z��X1�I$��,�Y���Ҋ�i���گs%�pXq_��*�{��!�|����Ȼٹ�<
+�q�U�ٚ�վF'�qa��\�Y���ҦF
X���Ԁz����U��*Ժ�McIm at g}�
+�5«D�T�純�p��fCR۳���]�kyb�e�Cj��ͧ���BjK�
����1���-Oo>�]қ��
#%���֐���3�G
��Ó��m�/����C;:ę�,��p���
"FԞ3�
+� ك4_ �EM�A}��D��B@�v��Ƚ��0�-,vUS�rzON �V	��&�v)�xQx�=
+͇^���4���\�=:tҀ~��W�
�SÙ	�C����I��Ҙ�p=�jqc�l,�N���f`Өs:ɟ�s��O
��i��A��@����F��`'Á`d�?Rӳ%'Š�b���Zn�����̥�Ky����O({)w��R��0����SM��O�

+^��q����������[��U�w��}�O��E��v��
�3��s�'i����B�KG�#Gb�PH����F�a5}6$�}8�x�0

�Q���0"
I
��0 l�Mb4 ҅1"��$�H�Á!��1+l���� �,
��
��	���u7x{
]m�-��S>h2��.v�:�Q9u

"��Q�"��-�����̶0���4!/M��ڠ�����\�7+�i�����.�]�;ި�����d}Vo
���,p���i���:�#ٍRIC�-���~Vę�S�̑���"�I�b�M
�r҆
���.!ꭺݨ�+��l����
�}z�2PZ(ݨ
+F�f
+�
�����f������$~t�
�
+l���{�1C37[��<����Wo>��wW������w�*C_�<ş���2/?'\���zW����m
u��GSY�
���i�*��g���M�W�������݇��
���L���{��}{���������~x|������������]�k,�ܦ�RI[,{)w��X����o����K׊L\^��n���c
���J�Y�Ϝ�����O���;��Vi��2��9��O��?�����^Qd���VO ����c�L�I�sО�` ��x��C
`���Y���MTp��1�@(���������+lg�����
��e-
�0��6%�Y���'C��4�H�ǐb\H0&%�%K/x[!�x��e�eO-^��<�)�tA����Mi%��1�ĔB��)�
�5�HT!�Vŧ�Q%�Aņ|R"���P��P�Q�����j.�.�R�2���=�Š��"X���NyY�� 
+�s�j
eS�UbE���8V��tO���x��*��
�w\��i;�wDr��ɬ=���x�1!�W��x��I�d��~�,�\��,��|�Š_t�l�R��KUH"_r�/r`��o^���e.�l��6 �'����
+b &-D�A\z�����+�����Q
Qr�
+� T��!Y+f���HY
Qs��
B7B�f�̊)� ���B�A`�R9A2�7�k���(����|NcJ�	���g�.�2��|&��<�{T
�i,f�:�=��
�'�<
�l*�����ɫ���O]/�\���(Sy��
R���
+�
+eca��n/��*;�b<�kUۥ�B-y�����PS��K
�Š
+��z)��p1!๚B�B]�
++b��qHk�����s+�q�u	�"�y��!�Xq�o
ެ��Fp#�ڈl6�a��f�h 4L�4��L`F,�1�2�A��A)`į9��+&\e\l�)�ܐt�d;�uJ�!�B�f�g^ �yH렇6�����k;�Ed��汭؆�U�l
=օ~i�
���_�39�,�Š�c	��
r���t%�xŨ��T{
���ZB��L�v�B�l`�
M������ۈby؉Е#�s�u��˝F!�=��>P��w���
�r�蹵t0jd+���'�σ�xD7��x�<L�J�ܨًѕ�r��Z��ȝ[�w'��G�̝�z�|pJ4/F��h��|�i���(����7��oӵ��ptz6
��N=˩��\�d�<�U������Q[���������D�n�
�C
�9�|�I� �9ڼA���bЬ�5C�6n$���[��кQ�Ɇp[�wW�]#=.�t�VZ�s�����&zP�'�֦
�]r�Sg��j��f��j�Z��;����\��+�g��Nj͑����g���������wǎ��'�Sϙ��>�{���ya�›)�B���R�
�*%���e`�O�����,�˕"�#�K�:P�z�y�,e�+C��6|�-�ty��@�e�,S�s�i�y��o�ݡwi/�T%����+z|�ޣ�����M./p�>+o�EQ�(4X��W��"'�ą���“�4Kf���)�pkh�hG�)��<cj'�.Ir����<���5�K��S�27� �
z0��FQ'��D�'�|�>s�L
+On�F�$X4�� E[)~�t��+�Tm�M��B=d���_�z�~4���(~����*~47�߫���x���g�2��`��ag�������S��"/?�_��}�v�~oU��ں��u��[wΟ�_ﯜ��N`�W�������݇��
���L���{��}{�ꇷ�~��ϯ���G,�nӃ�FJx��Mh[
gW�+�|������ǘ7(�1�}��:>�M�^a�QϠ/�E��0+�!�͇�׎X�X�&WE�	��+���6�f������BQK 	C
+�{
+A����O�^��j�W�I��+��Z#�hTG
)�F��PV�YC�t;\�1[4`
�\�x��C���M��G�%�9�V
��/�
�q$���;䦶Q%r��u�^������'E
���Z�ѝ�h�������
5�-��*�&1
�E�X�^ή�v�����o_qKeW�?���T�.n1v6Vܞn7��g۟�x��u1���<[�{�p{���}��\Jw���֨���u/�/�>^���>U�Y�Uhymn�V�������x~�o���S{21�\Aa˂֨�e�je)�X�)P
��
����^�������^����
4ދ���A㽘�r�
4���曯7V|w^?2�\����9�o�;wS�{�	F-�����bŧ��Y}i��U����_�}�
t�鍿�},�Tc��<�O+���qe�AY��kW+��V��b�e��.+o��K�R�+Z2U��Oݩ�^�;����t��\Y�6�B��X�W��ʔ*�TV)�(��ӦN�MR&�d�d�d�d�d�4J�L�Zt�T(k��菩π��<�
S�t&Ii
��i�)���T�Ŕ�t�Te�����hI����d
1A?~�(�1�
+����3���P�b
-��bg;�s
UĞu����N�����
��c�N��h)V\���7Y=�r��=/�׽��0
��{���~��n��z��p�_^�/~~w�WGg?U����4>]���]�}.:Vy�=3
+^*=ո+����'�kJ��b�Xq��FR�W�T~�
�8�	'�����	84�9ڶB�
s5ő	����y똺��@
�ef
G�22��@��Sϴ:Z��
fxb�=0���rG�W����O���i�<���
+O�t�b��&�c�����)��8���`��7
� 
y���nZ`�	O���b����u;l��
_p�����
��Wl�Ӗ�BSAoV-TOot�O����0<T�L��<م�Ż&�NJ����pQ��v������x^�a2:1����/+[�.Z�E�m�7[q��]����^
��
Czm�db�����y����
�Á!�
��a^�
+:#|�z�Q(1�Da��bx1�f
5���D���?�n��{~�����o��{��R����>WSڮ�TY��K���?��޽��+濥���uȖ��3~��3

�a���za�

��h�)��Ay�r���3��v����}�d����;ϫv�k��}��:�

���JK�3Ğt�!���ΌY�=s�j�m�G��kJ�̟?h��b��&�i�fM�MR��4j��|DM� �?��Al���s�H	��Fc�V4Nl�Ņ
�,؈'�Ը�����1
7��\�1��
�[8��p���h�R���Uz|��|���b�o��On=�o��x�?|����+'�+�j<�t��T˩Hd':\�u�e�T��V(�}�NN՟j8���t��v���N5��N�I��
��)�+G�9I���e�Fi�+O�JT	昔�8)%+�l�)]
%_M9as��JY=�y�QYkA�W4�)qu0n}��ޤ�<t�N��������9�Q��b�hi,�`&%2��T��:�P�l�����%4?wW�P����ꢳ:��
9�5�Ζh�o�i[�ڀC4ִl;*�.%ߺ�p�2�';D^���
�i��ѧ:��Ѓ
R~ߝnh�����/��e^i�[Z�5��㛰��2�P���=ZԸ{p(��(߳;��u�Չ-WO��Q��f;����]���������]����dPV�I����b�m���\�{
�ߝ�]u�Ig����O;��Je.Ŋ翌�����u�i��
/3���Fi��Y�5^<�\�V�C��
 
+
Z!ߕ�kqƄ�L�x�Π"�j
�Z��9X�&���j�i�j˞�V�t�������J����BYg��X������}�/��
��lw�~�++n'�����w6���7������9+���:��]�5_�����
��e����Y�Q�.cb]ȲΚ�$
��_���L%M�VP�lѲ����Ѻ���eP�l��FsA
'�̨�PO��:�͇��&�v at s��g[��
+U-ʟ#:
ǜA;�E�%�m��F��h@�=
�A�+�`�Lx��<����*N�a�
8��1�4"���{tJ�qY�%
�d§$�ʠ���aZ�Lc�A�;)�F\O���f
�*��ʴ	�4�BI�AZ�ng|ֈߊ��=�É��e�mV�M�x�o��s[�]�{Gg�w��|��:g����G.��R� 5���
0�J!ð1U&���7�٘�2���T�!�,r2��&�N���O/<�
S^�2d97ۀ�i�f�
��2C[R@�8�\�
y�=C�3��G(�i
���Qa�"�.
��MC���ju�$׎A����X��X�Mv
��_x
�
ǭ��L�%
+!�0m����Q�)
+߆pø����:�`xw2	�Po�_��Y�5I�l�
����5��� eP;��E�sҔ��v�f�
OL��/����8��7����p6��T���
Ou=M�>�����|��V(��J�Z�(s:n7՚k-�
�֭���ʹ�"m�Z]�P��5Ԋ�R���b�I�m��ԣV�]�U�����.�
��+��K
VO����������j�����}�󊯳���w{��Y�9A\�y��'{��q�����q^�+�>n{�f��U*_�|�����a����.��b*���8z��Y|������t�K��Oa�_q��U�{��
�<�9
+�;h�Ϯb��:
+y
+�a0�]E��YĊ�L4'g����MQ���	C�
I0��W�z+�bj��Q
l���_[�1'K�%G����*�3f��`'�8��3Y8�H;��sf��8��IN�����dl�q֞��@���ɂiYy at G�<]
to���nN؈�ޮ
��מ�z�
AA
�X@��Q9��AM =8J�iW
�Z�G�<�
�o �	<N�r��#w փ� ~p�����"��{����IHL��d,L�J�
㙜���L��T���c^�_Ǽy�.0}S���	3�0�+��V���w`��<1�
3�
M�M�`��l˃a��9�����o�K�
�������~5�{��{�o���Wh~F��~���?_���_at���s.�z�O�m�V�b�����l�g���;�5�����9{��+�?��k
���!�
����~��m�A�n������ �"��̢͔�E���i�ԇ ���k?ȥH
+:
+4�X�W�f��
�%|��t��ŷ�4u����
��[yM��>"����U��L��'��
�]էO��١�ϥ3L��^�h�y�������_�?~�#������oO������������LJ�
䞆��hYV���^S=���󑒱�L�DL�0OCZA��HE�C�%�)d��Y*��r�����R2����Y2R.��d��ɈTD6r2�xJ��ۜ�HFr�\
4=���1G����{
��0��$
��i�ŇU�����#�G�m���A�������CO5��(��;�Vз��3w����~������'��
}�F�-<J�7�Ja��U�t�TYw��\¾
����.^]~�D����4y���:\���np������N�'.��v�=_�df'���/\��SJ�
.V&�B~R?����,�������o�}/��-��.�W�W��$Z
+/#1�	V*5sfN�����΁�W�@K���--�!_fe���X��r��BɌ�FHx"e�Q҅�R��Eg�Z��QoR{`�Ie�
+�T]Ҷ���� Iӎ�$-II�QTT
���������t����L�]�NQ�4�R��
+F
UE(x$%UGI=�=�S���Ot%eE[Q���Qՠ��,�HjK*R.�ꤻ(_��#���
����$��M`^���D�	ɓ�p���p�{�'B;M~j�I�h����ڴ��/=}�ټ�$�+�[y�˪ۤF���J]̟��RŎgm��Iy\��n�Ԭ8�=�����w��x(ޏ�`R��9�k�AE�R 
+`���8��N�`�%
��
+%
 !� &7	A0��
���+�
+�I�cC�G
"hfEO��0F
�/\lN쐳V���Rqj�A\p���5��\��Ug�X����渌�\̼���#
+._YPITEE�E��]��
���R��ݶ+��2��4�R�E���$��g�2D\F
����.�9�cW
�(HҰ��Ip�xȱ�=9�|��!��t:>l���::�0��3 ��#�Pjy�6:^e��l]�6Y1^�ъ����~�p��������Jӵ�=�v�v��0����X��[ƫ���iu�:a}>b!���lĶ:V��z����'B
}FPI|>v��[;o4�����iW����N\jK�>t��%wíj��6�x&N��Lw��ى�g�
׼SΚb����ɵu7���S�li�$vIg��R+[F�7g�:F�Eƀ-J��1������j������>��l)�e��qE��1ňO�L1���]
+��V��NՎz���L*;U��꒶
t%U(H�v�'iIJ����j4�$
L��
�T�f��ʄ��t�ʥ���7W0j�*BAjɽ�()�9�zJVXZ���;y���qW�Ua�
n�gn�7������O�x4�*V��p�\9�xa'�����Ɖ����niŠ]۰^W�Pڱ�<�2��;�%�6m�ْ=�k[v불k+c�.��Y��gі*Z�۳ز=/��h�ݛ�-�Y۲
/X|h�xc�xqt��q̶��wO�'B;M~j�I�h����ڴ��/=}�ټ�$�+�[y�˪ۤF���J]̟��RŎgm��Iy\��n�Ԭ8�=�����w��x(ޏ�`R��9�k�AE�R 
+`���8��N�`�%
��
+%
 !� &7	A0��
���+�
+�I�cC�G
"hfEO��0F
�/\lN쐳V���Rqj�A\p���5��\��Ug�X����渌�\̼���#
+._YPITEE�E��]��
���R��ݶ+��2��4�R�E���$��g�2D\F
����.�9�cW
�(HҰ��Ip�xȱ�=9�|��!��t:>l���::�0��3 ��#�Pjy�6:^e��l]�6Y1^�ъ����~�p��������Jӵ�=�v�v��0����X��[ƫ���iu�:a}>b!���lĶ:V��z����'B
}FPI|>v��[;o4�����iW����N\jK�>t��%wíj��6�x&N��Lw��ى�g�
׼SΚb����ɵu7���S�li�$vIg��R+[F�7g�:F�Eƀ-J��1������j������>��l)�e��qE��1ňO�L1���]
+��V��NՎz���L*;U��꒶
t%U(H�v�'iIJ����j4�$
L��
�T�f��ʄ��t�ʥ���7W0j�*BAjɽ�()�9�zJVXZ���;y���qW�Ua�
n�gn�7������O�x4�*V��p�\9�xa'�����Ɖ����niŠ]۰^W�Pڱ�<�2��;�%�6m�ْ=�k[v불k+c�.��Y��gі*Z�۳ز=/��h�ݛ�-�Y۲
/X|h�xc�xqt��q̶��wO�'B;M~j�I�h����ڴ��/=}�ټ�$�+�[y�˪ۤF���J]̟��RŎgm��Iy\��n�Ԭ8�=�����w��x(ޏ�`R��9�k�AE�R 
+`���8��N�`�%
��
+%
 !� &7	A0��
���+�
+�I�cC�G
"hfEO��0F
�/\lN쐳V���Rqj�A\p���5��\��Ug�X����渌�\̼���#
+._YPITEE�E��]��
���R��ݶ+��2��4�R�E���$��� 2,�
endstream
endobj
13 0 obj
17353 
endobj
14 0 obj
<< /Filter [ /FlateDecode ] /Length 15 0 R >> 
stream
+H��Wˎ
Kܷ���#،��@)����
+��,]��J�A���dfuUw��6;ϙ{g<]u*3#*ND�1�)�8ǚdR�C��$�|
+)��J���2�l��!ǜs��$&5��N~�S��i�j�E[\	%�\J�g1��aV��
���B/<�x��� �\����:�R��k���ꫫ����������\�i�s���
:<C�r��Ϟ���u��x����)�QL�-Xs�������IcOr��{��ӄ���s���pXi�i��L8��"N���,�M'�S�b[�q�1�裋6����2�P����C
+1`��l0Ad�␊�|��G���[o���K/\�Q7�쒋.8�8픓k��ζ��f�l��z묵�j����T at R�d�I&�`�q�c�QF���uѓ�:騱F��V���R
Uլ��TVIE�WNYe�VJI%d��,r�Y&e�^:i��Z*)%�( �  "

����X�@s!�`f���N\rœ޽�_p�2���D�)�j"�{\

��(s���r�B�����n�y�K.��}�t�~�y�m�����؛{�s2W
�g�w�]��z/(F���m�pQ�N-W����㙺�h�-��d��R\�k
�Kӗ����hKW���\(�
�r<��|���
�%|_u9
p���eOY�Ӗ��<ҕ�*M�N�5e��^ޥ��J�����h��&�3�L(����%lp%T3$L
�IX��cC�c� 8�k�a��L�
v�p{i&,����z.��F�aGFB��ئD�
�6+ƴh��
ۆ.���P����&�ݦ͑�:�ސ�
je�g� ��,�b��
�0b�Ė�;�UV�R9V��N]
�Pq�ij5Va�
��E�2c�+�h+�#��Y��
+{��}�)�G��H���iY����E�gZp�˓8�s�@��L2�)@	g�MH���
�F ��r��8b
X�����`I[*C
Y�	k�"ؕ���U
��4h`�FNFp3��L�8X	85�k�B
l���GҀ[�68k؞6"獉G��9����s�HPlj�G��Q�8�3���Fx6J"o`�4"���h8�xN%	o�DɤT�&=�XN%�Ev��.3�� 0L�	�c��DH�Es
�:��'~pbÉŝ����^�Q�M۰k���u�9�6?+õ�[[
��n6j��>��۫��޳��^OZݕy|le�����׸��ݨ�Yu4���1��jL�#Qi��#(H�"(k9yFLv�䑘�*%
��*)�!$$#��($$"����*"giB2S��b"{�h��
D��v9�։������L̐�-Oe�6C����Y�K���V*��*l�jg�d�ٌY6f��i
(
Q`Y��TmT��ufؙc�,[�
Bɣ�sm�m/
/�lp�rt��v��`ZY�g�eU`q�1��v1��Y�Y��Q�D1��I`Q�f�{21�x��јӸ�z�Q���ZA���1�"���P�
cU�-���z#��Ȋ�	�����^	�upF_\�^t
X����k\b�Zw��3�Uo���0��
a�6��
c7!����
+�?8�N
��w\��QN�-:�?��'q��O����\������g���z�����W�7�+�q�m�O�$��P�n��ܺ]���Y��%�ɍ)�S�l���ڿzf����gv�v��}�
V�zfO�v/���!�{̳{���<�ϒ��̳�[��y�%<�ٽ�#����-�
�D����]��}?��_>�������������oO����O����ӯN�����O�'>��x��	�!��Oi!p.�<
��t�5G�]����:���S��)3J�D��w���^��*�
+
ݦ�3;��)�|��U�*W�D���<e9I�U��
�|�	��'˩)��TzZjY�pVZ'���FR�9	��rҒ�V�h��m>z����F:Z���JGb���HH��(��
+�|mꕗ�Z����򫮫
+.�K]�fNj����fU�3�
q+�9�7.�'��yY�j�Xc�d�Ve9��Ks��d��o��%�

�����F�m��i�Ż��^�|�]��kG&:�߷���&���:^���|�J�ȅKF�	�x'%bLnr�NJ|1'"^$��s��{z�JuQ�3vL�s�e�؋Y�?��E�M�tJ蘖�5m�\Լ�!���e�t��~��ҭv2'�$�@��$�f��IƵ�z|q7j
+�R�a�᳷�&t�ۢ�?���7v׻}]���s�ϗ~ڵs�ONWvnkClu�d���k+�ٸX���ؐ�
!C�7���nK�1�lL�5!s��'dPȢ��
<]E�*ݬ�U�&,vemX�e��ʲ���
۲6.d]J7.dZ�e�x�ɬ�U�lS^���DF��� R1A2*�CAH,%@^2�f�+l��
��!Ns�+��[HX��e�Z���B���@�<d0A
��B$��@6
�3��!SSٮ��/Ca�$�Cjv��4��'�Ix6siOB�a�L&P�
ׁl��ۧ�%���!�nʎQ
8cz
�3ք6�>
66umT7V��lj3�����Ԭ'��
+�!�=0O
s�u�<.���Q�1��j��p/@\ �-�/�b��
g���rG7a���cm��Fí}ťڨ�}��ȳ<�Zi
�dS��w�
�]��\�a��ƣ�i�(����$�I��%F%���qix\J#�8y��66-�M
N�D���+��5�4�(� _
������	

+�݁%ڲ<q�$_BL*�
ĭD�f�f��Hd���K�TZ�����lN�k�8

*p_��	���/�((�a�xg
�S�(���c�lv$7� |7�w��C�ş⑿W�t�aal������UŞ�ٖ�v'vZ��f���_�?��H
⸠�QM]�� G���s	����OP�
\~��*p�
+-FTd�xP��}o��
+�����n��q��:�m�O�?�x����1�ݷL�G��ծ⿴�̺�9�{�}�"�q�:tw������Mo�
#g(��
�s�(
��3�M
��YG�#�œ�+b?�+�.p]��mp�s����X
������N�6Vc4:w��n���
=�[��a������
��2��N0�	�l�M�{�T�s�L��f.k�F)��f�?4a6_1[%���w;�=�f�� �›=|����_��~��!<��.��C8�]�?<�^���:��^�e:�NV���T}MMͥ����BQkS[���������
Օ�J�������+�^����Zjkj/u4E 5����dݮ��Tjj(U��8��6���K-MU�ښ"��GW
�&A�Qľc>M�<y4
^�ط>fqv�'�Q(��'�e�i�a@
�Sze�ć�T����������o�����������?j����������**-��%9�L%�~�B�����D���VAȱ�9��@
+ at X[�"�4᧍?��y�]�݈A��YFX�����$-�R�r�%
�E�G�)�X�9<5�-��"��!�XRC� /y�7B�"��H;B���P�=�Z�������+�%�CոZ���|(��Z���Z��,
��sy��3k-���V��\�'��6Al-�n��g}ߛ���p�������o��X-m'�A�~�@��>�� ֡��  ���>x����e/���v
Q
bb�I$/���{<f/˖�j�:Y�m�"��Q>�A�d�ԉ����!p��
Y�5���{�&[���,|*>� �MJ<�_��}Թ� x�����j.8Q�>n"?D\��J$��0��DD �.�
+�H(
����A@ ��Ck|�dm�@ ����vo p�h���%�vJ"r�Grǔ�G��c".|r�N�<��3IA�bU at RV���;�_R�
�i
P���?h#F�#l	��bl�{��{"6E�h�����
l
���C��Ӄl�����쑵�ճ�I;��bR��}����{��]�����ftt%{F��~�7���G^����{���ޝ��nj�n	��sa��
[t���m��������G�����y*���}
�W+
'��#���ps���`a�w������O=�Q��O��V��Uvg�u&P�{��tF�
3\��Ѿ����椛N�랺�
�����3
]̓N�
��i�0���)�����M�Y�
���\|z*y�
žD/q��I�R�^�jW9b�u�*{Y��H?oy܉�K���g
����i����k8nx�g��y�كګ�c�6��һ������wLP�����E������A��@]P!p_R=
+�(���N�� �'��Za,p�E�
#E
��K9���8��T0Hfx#�%��`��-Q��G�c�#�<��.�.�Y�~���A�`�׈~�}�|��7��
r�
O1��}�9�&��ܥ��4=Q��v5��C)}�
���}�ru�P��\7���|$����g������ݦ<X��½��Ц��*-�܀��p�^q����>ܴW6��b+N��n��f<I��l��E$<kGrKN�uə�B�H���6��i�n�.ܢY�c�6�d�El��a":�K=�$�{���h�.��&�p���p/;*�A
c�R��<�^B�{p`&���;�]I>`D�K�xZ��9��c�6�����ԻbB��%R�;��I]Ӎ&��=�B��ӂf^������;Z|�)��o��N�:��d��p�8{%�A�laC;�
Fi�kBⱄ�+	��%���Tʗ��(Ȯ�_��-W��gg��������������ƮMB�~���wRQU!���MUU���z��%alt�Ů-����B�?)����ċ<������r�Q^��ew��%g���S�H+��τ60+
B�y0/L:�_W
Ď6sr
��
�CeL�j�ڡ)N�G�c��DtZ
+]0b�|Rٰ�^z5WY�@w8���{$9�đ�|m�0ܣ&�ӄ
��~E�°˜�����&.B.$?n
v��#	\e�~�
+ӗ�p�T� ��5_�
+_��8�#)8'8%`|� ��9A� �Q<�8�5%'|J	d�8?O�)"U�\�ɢd��."_D�P��D?H�2"gԤY#�F��8"sx���v%y����t<:������6)�w2z|���y��N6���X�9���mm�f���b
b�S(��=��jS87s�x4�z����¥0�}�И�ʳ��l�j��:��m5��w��|~��6�96�m���rû�eЛ�r�d�$gM����E���U�I���-��-���NE)�pʅ������{=��q&��)�+��|�L��
�M�a��]���ϥ�bxIW\�z3��N�o�g`����	�q��;����|aө23\��Nwj6Ӫlp��M�R�%������R�c�i�V�N��������.m�D8k�p�\�TH$�h�ض�el�|�c��ϳX9����-vP��)������5�~����n�L���q_
t#�ro����؈�آ�yzG'��/֞����%)S@

��:/��mĻ݂�I��Ys��$�L� [...]
+^
	��0��Tv�ݴ'��x�\H&kO-�hb�����wJ����t�(S�(�7Q���t���W9�;ө3�|o}ڣ�tkO]�-O%�d;��gGoa�|8.����V7)�Z�Jg锉eP�q�J�� _���5�V͆jM���Y*�/�,d�bݸn9�w�Q<�^�L
S�Lgm굼�<�Zֵ�{��� �~̶5�2�\|tW;���_���&�8���N��Ȁk
�D/X�)�2��9�8 ���9�"�]NAv�=~4��
Y)�E�#+I�%Ko;��Ꮋx/��ḧw/��|6Y��S�:a=��v��rW�nX'�
�;�U�>����D�m'm�l'l���\O����~�v�v�g�7���;�[���
�m�m�
�igec���R�������?s�\x:����x8A��8���֨>�����6���l�?yX�b������h
��JR3'��j5�}��p.�l���-�=��ɭ�nڷ���Wێ�F�G�w�M��"^��;w�"D���"�.;Y�g5
����ꪶ�ʞp�%(c�����|��
�6�Gx���W�W{~a��l��'f���>��L� M؍�tG�]�\�T��~x���w�Έ�u@�BϠ��-�6-3���X|I�X�
5x��i�SZ����[�<�bw����t�-~Z&o��!=�D�W~�)��
i( R��p�eM�"�JG��������ຨ	��[�K?��vQJ~�A����7�L��^޿z����t�Q��������t}qz���L�s���$9����o�~{�����������������vq���֎^pShd~�6��@#tQ����� ��)N?M�~[��
��1���.�ep|����&:�t���>&�
�R��S��nO�?JF�BEO�����p
��DB-$^�c�<
�o���BfO>�X���䬃}k+�3PBY����8��Y0����:�������3��i�c����=v/�;�#�~w��\y�6_ǯ��xH�:�f�K��}�!OFHģ��Q�Q��鮹su���C�������/ [...]
+F
# ���:�CMV�#
+�G�#�%�(GRK
Q,��v�kE�A�F�-$�(�"
Q
�%0�	�
�rFoعB��8�����Hf�#�ő�G�c�}w��#u���1�aF
	��0Y�8�4�%00
�,�U��
Ɣ�w� 5�)
+�
U���P`ĤQLQ(�Y��1o���%<��N~�
$�

� �Z � Ytd
+�>�,R
�D�� 2�Y d��@G�Y	�$I9筈9H���A2H�]"� Iz	d�ә��s���`��C�K�H
+�d�%r$�A��9�� Iz	��H�`����S�M)����cHA�@Y|
4e�t�
�4PH&�^'Sl��}�_�<|�mB�oi<����
+1G�4{M<^�x�^h�nK���K
+5;��Ǽ=�o`
�g�C}�3�$`sX���Q�LJȃ���
�!q<����&��l���Z�#��ky�M�M�6�ˏH]�
?$��]Cs��
��D§_�Ӱ�Z!a���eGPBK
��'��q��i~�r^*9�Wn�❞�i��m�+�<�LmP��T��BpH�h�
Ɖ�����#�J��N
��-�b##~sܠw�m������Z�Ă�s!l���R���p0�4�m��HP�f��w�ٿ̒M
��X;c
���j�K�]
ֳ�������|�;��2Sv9�����5q8SW(Sqn��[���_*���a
9r��LU��By\R�ő7V�Útؿ�����
6�]�ڹ���gER����w
�P�W�7��=�:�����x������`&��^~ �/�K����X���I	!�o1����׺�f�Ǥ�������f������GqQ�b�k���&R�.kH���T��X?���0�А`sN�ȕ�`�7��gc�g	ZO1�d�SH�Nd�P0�A5
�;,IZ2T�y�\Т�)ఋ�jy;(/I�g�3߭V7=3������ĪG����s-�G]�~i=�d�Lb�K��Y��

�tq�s�m��:���&d,s����9��t���%`%�T_%iQ�9JU,�0�@�,�&�fP�I(���\
+
�
+�D�d�r�B�@���e��1ބ¡�M<�O(�bC��'c�B��QT=���Ai-slB�B��s�ox��`����RG��K�Tȼ�d,!������R
�^���+�
+BcY0KE��覲�Lwf�c���HQ%zvV���
^����-n�+�Fە�g��00,H涐���x?�<�8`�5Pɍ�R����/M=ds��)N$w� UV%r����8QN%�(�1��
+�l��X�:憸JWO��m����uPkR�|c��=�D�u��[�c�5(��pÈ�9�F�7J`�l� PdbҼ�A���#�Q�%T
�?Zf���*��0dˢ+Х�@4�Im!� �-���
�n�
x����V�V��
)�����4�겈�Ersh����/�ơ��IP׉[�=,v{x9٠=|ک�Q��H1��S�)%V�[�u!(6�6���u.������(��L
�쐁䚠�lv�8nh���K=��
+��Xc�zJU�ʔ�k�+�z8
�N��T|��ѪS� ��xa
/Ђ�BW�!B����`-���
+�F�M�ȻQ��nw�H���r�V�r]0֩k�1&cT��{�	f8�:T������B��œ��TWpfKތ��=���|"Ϲ�zXz�s���
U2Q��3;�@�IY6J"
�4���H��{S�ʜU�
k4�V

�5���RJ��m���22&[��p�[��vp��HգIF�� ��L��o�e¡Dݪ@�؇�*��`@
0�y�
WP	�����(iȓ&��br
:����b�
�` �=�f\�#R����`Jw6˘?�Ţ]���&fl��l��x�^e�6���)�m�
4^H`o�I)�+	 �N@���
+l���Z"x9(i�
 O�
��@3�N��4Σj����@ߧfUtx��;,�  �}�kdbVz�931{F_L�
`���0��H�!
"���}u%�<�J|B9����=x��cx~���ы����81��ۿ���Ë�9��|q:�_}wvkO� �PI_ at 7zf��=\��OK����-�x�
��8�4=�m�^v���='������ϒ�&:�t�������C���3��>
l��X
+>RH��^-;r�F�
��.��8���>Y���@�YPK�����;"�(fu�d����a�LFF�����ݳ��f2�ۤ��`��С�tj�s�{` [�����A�{��փ;5��Ͱ�����Yp�x]�*��zX�6ǫ
%���
�u��ײ���?���ld[
ppA~�O0��[ig�3�S�BI�~�~����|�R�
��
��0^W���3��1�bɨ��vfS�Wv	wJW4���]���C�0^�C����������MbZ�+��ҕ΍�^�4w�eȢaArkGU8cOmc�u]��O�V]@�VMi�v{f��V���������gI����kI���V�����z�ڽ6~3�N��stT��lLr5��S���d�ε������_�ū�I"��E-{��W� M�85�`b���u��ѭƤg>I+l��+��! 5WlE;=����,�C�b
E�n3�v{\���P%C�;��P���uc�c���>=T���M���C�������]�/���s_�0��.I�'�na7�|�{
c��d{�K�4���qC����2kAA��;��֣�;����K蜺���G�G0�Ng�:��N�
�c���UV;^��\)��N�I������� ��^�pV��2r*8g95�
�jۙ�)�Y^'Y�AD�9eÝ�
��Ǯ˿?���/�y[�q���с�m�y�ſ��
��4tW=�ջ2q�u_{]��� [...]
+o}�j��a�*c�{��ٞ���u�tn�s��%k��	�#�jm���"�#J��Q[���s(B����%�]��!���1<{���eQ7�-Eԏu�
�Pc�I��G۬po���[;X�.�U(���هz�adpt�I�����oT?L�/_�P�mc�v�9��KK����N_�[��ύ}�Uy��D&k$�	�{|�8%ħp?�K�j�j|
y��e`'w�"V�H�����U��R(�h�

+�
T�������K⣢� pp͕K���m�a�:q��]���}��C���>��`1^]�#����?<.�!9R�k�[���V��ﶌ�R�n���5�˯��u�%����*��Q2a�y�Mcɩq]�*�:�]<�r�0t0�_����
%s�*\ �T#Is@�����B.-5DBɐ}�Y:���Q�Cva,ݘg��^�j,
�������Ǧ����������ånzt�8 N����>��
)k*!
+
��qi,I4������k3�ZW�> Z�O�:����4X8��XQ��+\�+�%*�B�*p��
)`��@m�ĉ�/�\o_�'�U���@}+@� !�ɢ|:B���TA��01BnCLy�D�
�i��1(�X��!t�
!@��Ara��yh���@	�w���>�ϒixS����7��7�Z�o��
p��+pl����'b�b�d�'f�h��|��������<=|�$��2�v=:`�/�"��
��樿�V����F�H�X��
/
c|�*��\L[
|�;ݾ��w#$���JiEˋ����PlvKy[�ԅ.���td��-�s�+�0W8hL�)�A#�g[�P�
R�TiN<
'V�E'.��<~�����
+��
V
�xn
l3���������w�[����6�B�qܳ"�ڈ���b1����c��8,,U�E�b �D�œl��?
h
g1�����'
+V�:
�y�<�ŏ��@�,�p�	�{HD���1=BV�fAG�����n:7�}�"#EY5�OQ�tl5�qT��w��R���'r�Ÿq���rBh�|��yC��8�����w������� Kٷ6�왡��l�/mb�#��i��
�d�ʶfl���ԞS�#�^Q��T�F�BI�Pz˸ₚ��)^��z4qz�.����A�
��^��9ݶ`*}ˍě�:��d���NJ� y���3s
⨧��RN��
+�?�܇�{���r.�1�bxcF!��;@Pp� <#W*����vsl�1ϷWO�4��
���{�%���\B�LٶLPKs��S+�-3?�#c�8�{��b�U�W'[�$eP$�›�
��p(�@��xz ����0N��e�kD&��{��9̠�0�,�M`ofsf4c�%����hR����
�D���������M�+����B&ש��\\�L��#
)b�h�La^�z���bE�����`� j*�
+-�٭&ۍ���x��mGUz0�
u%�Ҁ��hSq�֑22위��{]gpBO at Fj5�2��Z�ԡ
�.Å��FB�Y��},�<�t�c��I�����Z��‚�K�j'�+�Ol?F�4��h�Dl�SS�,:N�yV\V:;CA�&1Q�I��9J!؎��ͮ��؈�gg\�V[��
�o��
�Rhٴ�
����}
vL
r�.��Z.?`3�3*X�	g�:��[���Y'��fx^�
��[��o�(��(���
�ql� C�������ri��8��>��p�����
ŋ��� � F�8���1��yߺt�7�b!М�/�U�U��O+�I�[/
+���TP�X��$�^���"��&L\Z�Y5��“��0�e>�U��%�|�򄘑5^�YӪ�U��΢W���evS2�z�B]�.�e��H ��EJj��P��,?�:��(E�-6b�ğ���(W�ɢ��	i�$������,5�b)���	��O�+�/)���N��sso�
+�Eo�W�EM,��
1�F��=�<15~%YE�Y.ۂ%�¼��z4הP��"*4(b) �e,<�L�ك�@�A��Zq�硂0dL����
2a 
+���8p�{7w�
+M�޸s�*7�
�`A�f�e�"!V�)i_��9No�|{4C��(�8���KXL��vZ�HIaCS���n_"W�x&V��:$[L>�cM؃�$4�,�XSXM����*jW"E�%��ƽ�	�;ƙEz��m0�tQ���c��7'0~`�2$�I�V�D!_gZX���
+����	E����g�xA!�_TtZ��FE#��5����P�A��h=(d`��vʘ�
��ҷݝ3��ꠁ�+42Ґ��]8Q������<OF�MW^�Y�0D3+k�f�r�
�m^�,=aB	�y������1��FŶ}:oTԝ�7�`?q#)V�
H�7�&���:%�n���S���#�80a���� �y��py%t�Fӎ�x��stޠ4n���)݁��
8*#�g+qPWV6%*F�Q���T�$���#9q@�;q4v�ލ�[��ā�qF
8��==�2���fh���9��g�
���i���qZݠ��Ӱ�����
"�lŎʆ9:v x��V�@�1jN�@�1B�; �����
%
;*+Fs�2R��
�<:
B�!��y����w~�G����<"�'�6�T��!>j%����Q����zi�F"R���T���Z�
ت�$+z@�ʒ)�p*���D��G#t$C���]
�њ�
�
�:�4Ω: C��{ &'
����z͓=,�=���gu
���NB
ؓ�P�BN'y�$oQ�A�h!���̣�aQ�� ���0�=�s�C1��(9:|T��lSe�ae�.��g�a/�����w`0)|��;~��T�/�J19}@�w�O�hQ���F��飱���9�C%�Hl��>���
V�>
-;}@*)9} �\��c��=9| z���ƌ�+}`h(��>���F���)S飳'HN�.7��o��q��U�n3�c��E2��X��h�ѵ�<��gi$�?:3:@Z���N�-9t
��)~k��(�t���2pW6 Z�
+��+J �dm
��C�m}��B
 ��ds �I=� ���1 ̾�d0e�5� �!���HH�d�U>]���W:
@ ��
@�y�^^����T��"���S��~OaW�2��!z��2�j:�`:{#����c�� �]rW��z��A�6�� �X�A,N�P�#�A$r�C��*��^�!�3$�C"���
B8D*��"�� A�eG���9Gt���¨Oy�9�r
+!�= ���|��BHg`L�V��B��رE
+���PHW
2
+�gR
�
U�$��.i:�@��݊q���9�V�C�M+o|��K|~����/�}�����?>������
�����?������ǟ~��w�t!ᱽ�
gp㟱q���π߂�{�����a�\����p���o^K껼��-��F�7?Ĩ��?
d����#N�Eli�d؅#�i�;6Ψ��V�������?�Va"��?
qXhM�RGQhy��
+zvԓ,�i�u��Q�����N�����`��ɩw�N%�g����W���
�۸�%���w��!t����lt5ѹ]�_��: ��
+��n[ф-]S^UU���*���Pm���p�5uUFƘQ�\����<���8�U*p��5HUJ���HV�)���8�M��E[���6�qE�X˝�=�!iZ���.�vTUDے�
z��"
+肥�#mwP��.�]�)GX��:�J�*�3MG�-��#8�<��
���K�Ͽ��u�^����.�W?��]W�~C])��P�����H����)"�,�]����}���u��mz��H�l�-��M�k1Y��no+��m5��4��Cw��s
�.�r�~���>�|v�8ͷ�t�E�6m�>ֿ��g��ZM&��kE����iY���=ʔ�c�/w
S��6�����>��ld����v�>�d���9b@?��4Z��I	��ٖRY���{����U�����ϫ�Fw6��D���������-���>�qu?a�yvy�u
���>�_w��x��{i��\�4�x&��`�
+d��e�u�����
�=��
�����{<��C�l�c�lڋ��죭�
 B4�h�5���4��s���H
+�N)�@� m�ҩbH�^o����W`[Vv�@��5R��.��D6fp�DF"�P�]��T�F�M/G�\ۻ�B��

+�qBkrTaq���Z��%
e�$�J�r��2���
�M��a[�qõ�S��<Ƥ�B(ݏ�PP���[�n�ZHuH�/iϞ�\��N뤗�k�ZK�Na���ԴD�X6s�=_��m'��sB�
+��`�\�?Td��Rm�h7�`���M*,I
�&�B��L�Lò�wu����yS�����~��`|q���L+!܃�>_��]�Iy�`�{���,
�EJ2�V�*֐ :�L_�¡�
o��R)���H7���$�B�Т��_n7���y��bV!��5J�kOͷ��m
�	
o�+���I�k����C��h��?�����}4��lgG������&��
o���}�K"2<Kѓ�X� ��U��%EIHw6݆�[
t��N�/�Ap�k������6���޼PdF��n���%
+��K�
��Y���NF�k�xC�B�8�Ҍ�(��"C3ȫ�Uz��ň�"M���F�?q
�$����!S*\{���Odi�O[0:��i��VK�"�.�?�G}9���[
A
#�!D�d
	f	�{�Z��}� s���U]�]�jU�J��5�(�*r"у�
f�L��-�@E���:}�.��.�©Nt B�+U�
q at r4

yn	�T8��3�������f	��}UQ��'��,xHLbHD�ݺ�.� ��� ����f��T諦�@����H$�;�0ֺ&3�`�E`�D���pA-�W6
�lB+��
�R`�76���T�R
�%�t1�%����t�,��䡚N�iYV/%��G=


����#�2�zw,�e�T($:�x;�
0՘D�x�)Ii4�	�������uH�]�h��v�^"
� ٟ���w�GG��d
���}� �u�
M����9�y�����8��~�S4���1% sk�� B���&iM1 ��ۮ�vH�.oO���B儫�sIT���αd�?�ӄtYO*#����^����z�n����_���5
��S�3�,](�=/�d�*G
��^�k�7�4�e!R
��66 󐀸�nNtf^��W^�A}�@ O�\}�!O��םUxY��^�]
�1� U�+V5.i]�\ʳ
�\LyX/��ep`,��)
��������)Qj�Qk :f�r�Dhex�e�M�'�p%
+�~�Ԛ��!)�6���@���EU��(�ȴ
�`k��d�$�sC�����cZnj3RDLE�*�%�9�DsI
 �N�zA&R�,Z��JM�����
i2�/;C�P��m�!c���r��H2D
)�#ж�X~�ƼF�u����
�$^�U�M�ڮ��]/^�TPX���I��j��1��$F^T�lc�,<����’yW�A#�<�HY92��,��i,M@��4���W� #����e�7��3


�md�7�52����+�h��[��p�92�p{���Ή�9c��
+cA��"�=�*�����N4,1���
}؃��C!Bd�NY{#�
�2��f�=,�ӌT��:�An*����.P���1,8�o+L�f��'��c�3���
�:۳�o�
+�v}�O��l5�g������
+�fa2Ӡ�.I{�`}jK
5�u��l]pZ?�$e�
�Rv�������/�O}�e^�9l���O8FD2	O:��+�/�p�����%��FӪ��9�v�2N܈��͚E߫F'��� ;i
�KX�dz;���
>8��x��X
�ل�x�΄����
0
��xp�a܈�|j��{A<%��t��jѾW<4�`��<��Z�݇��}p_��7}3ܪ�6@(�<c��͘�LzdK��bJ���]`��k����z_۫��M<�$�ǎ���L���T�k�]1B�A[�{�����i��=^#!��HqH�i�k�J���\�L7l���-�����Ӥ̆�;Fo�rx���{q9>ώ��IT`f�v|�3�ȖW���O�O�7�,�n�be�[7���
�b��&�͡��5�*�,�&�	M����f
��&��F������gI�e
c�*Q��+���iD��  [�ba;��ZL��+��傂H���
(6����w
���eӍv�d�h���|��j>�	��ܨ�
��x��1�C���\lL#�X��fc�^ba��ƴ���ķ��	��&:o�
2=Z���a��A�8��9i��1�$m�E�C �wY����M��] �3j!2g�wOo7�Y���~��>˗he_4�FU}��l���6͎�W��J>�âU<�1D+x\9b�*���F�w�S�G�#������.�ϴ�����u����Ƒ��kQ�J1�(͛���
�2�c��³�p
:�a�=0�G}�.�PN�u[��
���*�H
�������
�]��C!\���c�FZ��Y�9��ن��X�E����Vf��
�u[~Ǯ�V�f)${���\$m�B�W�~������x������P�m̩�ڤX���E
e)
��HZ4��'��"����duA�[4���������ԋ�V�y��
o_w�K3ę�R�`[�ʴ�̠
Ī�1�
S�,�#�\�v(
aY
�
7����gj
3GR�BT6���1�ls�錁B�zL��Z(�Ny�W��Lg
ۿ�g�4f�#�)��b�KXS�XS�)���
����"����x
;�i�i�H�:l�T
k�&+a����*%�
�����Lo�������y۝��`�O|aW\���ph���ia
q"
;�
,�7
W�.ӂЗr����t��)��g����>>�K��

��N��0�b��L�0Q�l�r�*��<!}�z>Ά���j�|��R�)���v‚츝/|}�~o��
���s�Y
:r7�B
���,0��=H�6w���8Q8n�I����	��h n�ړeNׇ	�+��j(�m� �jRpN'��܎_|+i9�xH��
�KdF^��"0.?����Q�1,%�C�/��
yL癤]Zq��Ʃ
�^X��	3
�')ž$�%�&�
��
/���Ĺd,��حiN[�w��8&X�T�R��MZ��on�rxe}/�8�vYo����~G�++�`Ob��
+��P4_��3���T̯���ء�N�OQ��O�����_>����������0~���o?��_?~����x��÷_���G�8��� 2�
��������N���7���3|�՟
���Ǘv������q���x#�����f���̾�S�oy���
+�=P���� ��[���,�����ԁ��
�p}r��	w~����Tb�DN	�Y5D� [...]
~?�aҊ�>�Zzo��
5���o��'�������KT!�^\�O��ؕ0��
Y[�O�kݿ��4>?�n�q�B
�
+v��K�$#
�a�\ A z%�������Z�o0�NA�}?U
�A=&O�f�ZCQp�|]ˡ$�y�#;���X�8T5��a��%/��xo
��Ȑ���������h�p瓞C�+�Q
�M����a3�]3�+�K
�A�|,��t�EH��
.�g����6
ؗ  sX�e
endstream
endobj
15 0 obj
18399 
endobj
16 0 obj
<< /Filter [ /FlateDecode ] /Length 17 0 R >> 
stream
+H��W[�]�
~�?��B[�0�K�'-���
5��}ZN9�.�$���ӌ4k��J�w��`��
m-�􍤕����'���fB,i
���ږL-�lњZ؜��{W�h���6�n5����%9����d���blK��y^}�{��M��m�n͛겟B��	%9�GUt������|���f�wU�
�$J�䉏*:N�l�Čn<Put���|���Y&x9��]�(]w���[�r�3
1�b��~W�!��cH3�^�C�1�j�B��	_�k�G
bl�{�N\�̨��3
+1�B
�\�8�q誨�eUT���};�ZUu*����[s�ZRU�zbT�O��g
l�ӱ�*V��gr9�c�UYEI�*FN\��JbT�*e�J
�8DtՉ�GHIw"rwHބ�����HT���<�}��l�s�m�V��I5d�.GՊD(���1�+֪�"��#�k��4]	�
���V��*Xa�%1r���Z��V��
	��%�ZQ֊�SW0���U�
+k��Al
"��~��+|��ữ^������߾f���|x͢�o�~����ճ�/ޚw���䳣d��B0ֹ"����X�d����!��������-n���w���zϿ���d�O�w=5ڼ�qt��5��������al�Z���[ć���)����.˹l�_�CŴ\�\Q��*Ê&���4*��p��hW�
4����J�6��4�?�
���l�E��j��vb���S�(���g�Q8��R丕A�
N�g2�"! ��N���i
��u��/�q |�q�є�w�q�o�ݰ7�+JtF��5��+�*1��N,p�>R�B3k��6���'�(���~`�{�k| �&�N{�����]w
��4$
+��>��R���.:���2�ı�������Z)��yhyah��n��H ��ãh�V%a�%"a�!�h� 
�@���p]5
�
_��~�B�T
�����5�U���E���
��ۢ�dCwt�`C(���:p ��j�3$��\e�
`=
���
{4hjT`IKa]
���+T,A#E3�fw�d��Ŀ>�	�Ĉ�(��O��T��3F�1K�
c6�0��D��lyty�O�^
+�0������eP"�4���Gy0�F����<c�c�B?�b��Eb��d_%L��FL��$��E��t-�ӥJl{�_ӵJ��T�
�b�LI��ypYR����K��t�Ig�����Jm�.zwsw�x�v0>;�+Ɇ�iWwK9-X�1�1
��9=a�D�`b^x�94
a�)�S�t�A�x�	)'�=Q���
�'Wz���:J�L�^�zE5���+�p�ʢ5N)���x(lų�M�,z��	�����fS\��&��=2���;�5��j�3�������J)�?�T!ƎN
��/j8�
�^Y��\~�
��m[�ڬ�c
��58>j��5Mm+����qkV���Du�GNM����X�O�į#g��tC�
����
�䝡Ť�w۵�h�����}��=�������lmo���J:�����iom����сZ�YEq�
�m�������pE鍭EG�R��~Xz���ް�矏j��"U!��
{,�ԍ?�A�9��D���ZkWK"Qj�zq��G���r'�撲ӏv;��R�QEߏp=�/�V�1|�L��g�_�>|q����y�"�A�9���w�y�,�Rt�����jkZ���)+
;�
���fbg�DK�q������z����0*�p�ǀ�����̦�ڹ)���Ne�ulsK���V�Th��/Z�kI՚�oۆ�e�l'�hXv��:�t�AF�‚3�kQS
���Q��G�
+X�3��<��TYt��{�<�."��e^�D<��S��M��L���o$B����iM[F�C(
�p*Xwu$L��@ۏ��?�B��3���΢ت�_�3;��[>�4 Ex�
Yda�!a���ޑ/�����,
+����e/"�[d+c((B�O�'�`̚>�8�uz�
	i���B�o���v�lj,{�K�ݝ����)yW����O!A�7�L�m��aI�zw�q�`�_����go��h���
>�-8c�D�	k����m��U�?;�0�=��WC�
��j��3��(�.�IX5����PتN?qrN���y�=#�4d,��z�
L��'Ϲ�˞�4z{Z�r-: =
��j�;&'}|Ap&; =��ֹtı��ּø�
��Fus�Q(`�GA^���ܓ�n���k�W�>�խ��
��F�im�/����w/߾y|����p�Q�����gxu�澤L^Ѱ;�P������5[�۾
H�S�A,��=�hc-F��с'�s�7'`N ��i#��]7
�A�ћ�̃T�e�`�
�������w� �������T%�s1K5N��F����B%Q

+t��S�L�F�KR/�$��0�^��
�	S���T�І��9`べ�>`�<���rX;z�
ʹ
UD�r<#���2#���tDP豎�p@)��At at 1#�A�)�PL�H�w�̀�#3 ����R������K��3
�V��x:at<��f<ԁ�ăk�bR�xg�
ǃ����x\3���\�3 p�2�:
��}-������E��[6���ץ`a�v
�ղCt,��n������T$X�=�M�c���L�D;)Nv�����1��S��2�E�9~H}#+�,Ziw�ٸ����@�@K��c�(Ў�Y�,����2�Ĵ3���Q�d���
���y�
+���ܳ��G�_�B~(�#+	a:/YI@	¯Y�wۚdz�����.t*-�.�����8+8DJ���l����
�z
o]kZ /S�FZ�Q��dD�&Y:��*�qZJ�/�U��6���s���[�@^�jI-�!n�^�ijċ�E�
�E/%�I��
I�R�Z���Ƣh�3g�y#���J
v%-V0� �=l����y�
+�G`����.P�:�
�u8�'�
�Hh��]�I0��e�ᢁYC� 
��Ã@CM��H�
+E��4�L •�>�2�,�2����j
��b�8x�P�`���aFG�
+R�xU�D�8��P5>�$�6'�2:Q�7�X4
'�u�"LH�������)��c�� �`jV ��,V@ �V@�KV��d�f% ҆�r�
+��6+��,׬�!qhX������~�x�b���ZhX�>;l�B�
|��b*��n�
��:��:6����/<]�� n���RL�=q=������Mc����Coơ�JS#Q'��3����C��
���K@=u5�`X�щ!T4�N�/�
)�p�JS�'��4��^/h��
3*#�r�
�����ߢ�殡G2r����
����n��y�PA�6���#IBRT at S��6!�_`��^��TDz�)*�eo(�
+��h*�b�T���PAw��
+���K���[aC]��TЍ�PA���
+���%z1�(A). Ń9ms1��p�x5\@�
zQ+-&�zED�pq&ʱ��:/����:�.읧OΖ߭���#YO껂WO�
�V�/%}9����_�UQ~�
��w�@f�/�o��
��G�G��O�o��_0G�b�g6�f�[��28o��n���'�!�����e�v
+Ƭ���2j<�7�tRU-Y��
ƭ?�"	���l���W/]�
���{��r����<�H�	�g�w����;�&p�����rhg^9a�Pn�j�X �F����DhL�F	P>u	&�������#E]p��N�a�)�ՇK�-4L��A�߽�7P���
+A�����r>����L
,$��K>����؀ރƐs�7
�8�&@
s<�TLC���`���T={
+��
����>�\��m�Ea��%Ƈ�`��w4T���
�!�2T�hּ�k�|�RU*��dL椮��Y;���8AO#�^�őɄN
�O.��t q5�EB�88�k�t����l!E���Y��
+� �b�
FŊ[P�SA��
+TE�JF��Ǐ0�c0�:o%����5����ҩ��5�)��!�ҟ\߃�%���D�!�M�RU�
��s0�жm8���Sں��ħD�d&[ZT�8
3y�t���������J�fL{#$�j��s�����:�t��
+J
c�kkoE�Y��S��X�#�Z: t�PE�C�ʪ�gak�th"M�PJ1������d�M�Y��C����O�al�"
�!18�W��
7Q���e�z�Nb��?r��B2
6���c
�����a��d�h�5��6Q���ʫ����F��$n��T��zK��P
�9z��7�
вp�y	�~�E!�h9g+�f%u%���@X��v�M:�9\��=p9KwRs^8#&�j[�F�܁Fs¢�p~E;�s���
+�I�t�8Ȫ��=�!�m�(�}JG�b�$�J�=�d`����2�28����@��ü|�T�>Y蟝�&�6T�g��@J�`F2�]W��,)���ފFV)����yO�F�����i^rt"/K.����������`�#rOIA�l!ʬ'�kiR��eW�gj5¤z�V��!��a�<�ж�
ҟȖ����W���(zB�
+1�5s2Q���-O ���™�rV� ]
$��lX�>����Y�(�<��L>����(Q�&�eoˍ0��.��y\&vu�@�)��ʮj&E߄lk ��̿�N���e6�0�5�
#~��g�
˼����ْ�R�w$�I}W�Ӽ���1�d����L
b[Ĝc���o=�s���n1B�ˬXw�{NH.��
+6�J�Z���'[&���zӖS3�k��Q*�z�ߘ��/�m��L(ߗ
+[����E���Vs
p�t�
�o: 6��+�g��d�y>ۄ�a�9��>�BAb6���j����s��˼�@e����H,�bUf�dΖ���o,�>�C}��8���%T54��z�m����9Ty�Xsb�4��zS0i�C���Z��:���X�V
^�Ǭf�~qh���3�չ(���
�;=W_�_2-��9�&\^9��EQ��>�(>)�Pv��
�+2I���	
�گ�f�.�l�
^�
<�Vx�m�
�9�|���#��!�o>^��f��$/�T7�-Q�B2�����/�Nǩ�[�3k�'���u
G�
�~-��٪����Ҷ��O�qeSxh��MO?!C���]�뙩ߟ�������)�T�v�7ۙM)R��5�z8Z��!>~��Ɖ�}n<�o�~=�g�CCu���NӪ�g��QJ
M�J��/�;�\����� H\�֞sV�X)�=0<���y�A4�wҫ��^}ɳz�#`�w���p']�>lro��y��~�iy;�qb��SQ�e�_��eN�ݭI�
���5���[�&�?ev�ر����%�Ղ�&ӇQD�ϣ��a��
+&3g&
+!
ϑ�
o���][���xF~�'���
[Em�
+O���r��C�Z��Z2���N�3�ʿ$ה>J.ْK�]�
+�ajF�k� J�_��U휳��2�J��9�D�������W�m*��#�^�gƱ�x�-��ȫ�ڂU�ƏfV-Yf��N��U-���oM��:�@J�K`H���
���)+X9�@hKG��"/�S�ۺ�hUKq��yԑ��b�X�r�
+ܦ�����;��%���Z'�Ҹ>:3	

�^/�<;�/�ն�DvE�]��T��s����	C���SI�e���`y���}.}���nI��r!��ӧ��׵��8������o��]͗�����kә��]Ǐ(/����My�����b>p�����ǵ���~���S��;_�/��Ix����Dmv������T.
��\��ΛewqY�8����:_����.x�<{�����R�|v�<�;@o�����>}���xy�m�er�����C��
MGhM #����a8^��ˋ4�������.�>���1�Nq
zP[z:9`��q�urp=a���vp�Kn/祲� �~���_'���/��g������!շo��'��o`_
U�\����x?���Q؇X��t����������ã�Og^,
+_:)m�P��:UL?�_�P�3�_@�1�"F�N����O�/�>��^���u�r����8y��-|�ur \�#"'�ɓH4��im@���u1}�}1=�$O�x_L?�?8�\1���@�RxE��.��f��8<:wyq=[�Ϯ��������a��?�w�'�m
+����Aq�6<�1|���j������ӳN�<y��lv�X\_W��硻���ے)�oj�P&$�
+n\�����Y*.� %)�yW~�L@��a���
�1&�?o�O��C�?:��|��|y>;+,,װ܋�!����,օ�եa�$��
%��`�s���TqS
+.�Y�ɳ��P��P7��E�0�j���`��+�T
!���,�ծ�S�7	rke�0񣵫������	���F
+0��
8BZYj#
%]�.c,qN�f���e�*$
t6��m05��t>p�P\$�"e�C\:��'��$���1u((�
]�x+;�V�:?�o��M�.��8�F��sE�h��pd�,�
ߙ��E)��52��0��T�c��ʘ�E��
�@]j�lѸ
+	�n�1!�hh0�:T^]���=_�!�ȡ�h�k5�!*a}�
j�h�
!�@�]N��
+3�+���r�����4M�d
�����
HzUJ#\�d
��Ds�d�}��Mj��3
�v�c�uS�L߬w��bw�L���C��;"�sۑ\����CR�;j;��
׶H�`I{Gmg���l��4�
�x�n"�{M�
S���Tw5%w'�E죊�JdGm�
�rTzX%��)m��'�y�hW�߬�l�_	R:)�O-P��9~1�`��$V闰*UȌ
�����ܱ�*���
��*W4����X$oLHx�2�:V_]��q�Үcd�j�J{��4��I	�J�
�������8���
�r��O�����&3�����m��C�=�i?�duo�;������pnk����*�
�b�%£�PL֑ɠ��O.��v+l�R�.�"��^��vp�$�cm�q�Ga�
��
+ȘC��w���&��Ճk��^7���=5�j � �AQZ�P��U���Ƅ̢�ɰ�Xe|u�*�M�A^r�c��۽����i�^�rO�oq�����}�����
S������"Xx��(+����w�Cv��p=KI�d{IZW2.�w0
�c��4I&��$K�.���w+Ftp����0����$�U��Dٱ�
+��:�&ѕ&��R��ʌ�����Ҏs=d+��%^ɽ�I�	�j:��ʊ�p��z����q��b�T~)�<sc
��w8��Jɻ�b�QG��4�c�B�4g��e�VO��=ݚ}���u����O�a�%m��Z�y��E�*���V=�l<�aM}{귐��s��gd�g�ʲ�Me|j�2 qgg���󠜍A?3�MbT?��[�]{�����R��K�ťv��|�'�o:��h����yD�	�V�)V����E��QMh,�
J?6�
rJvӾ�$�ă��+H�@FI���
+�ል1L�[�{
�R�nQ�Xü��:Ý��Y�`�3�Ǒ�!D�wE4�0P[
+��c֚�!{7oSĘ�p�.R�3��Q�t��Ʊ"���)�$Y�I�� 8{�
�A�EI�&�*��C2
�H:٨�L2��G^������I\b5VvU&*�[{�*"��eo�=o�5I�����F�.�(�-2J���,"�S)O��e�-������|��
��"�����v��� ������y~�5C8����H�
�p�aϔ���H�К�:�����
�]���I#Qu��#��

jB�}z4�0��{ڴ�
�{QJo�vIk)i%��K�e�.
�f�B4e�T?�e^��8'�73$+��Dg2��ښh�f�>��S@�mF�'��N�>�R��A�hl}��m���ㆶ%a�+H�a��2a�6�ǚ�
�F�zI`k5]���>Ye��N#zU��DT4ii��ԟ�R
�s��7zD�H[5y��ʫa��Y�k��ڠ�˥��k\�R1�|5�8r�8��8x\HGɅb�RWB��Nf��K�|�޴Z`�� ��>h���U���TԔʍ�p���@��K�/|C�J&U`��f:�vV �˲vHl����$
+�
��̶9,d�)�c��F�fp���4��[��V>i��e���R� �d
g�l�"���j$0�5��*�� ��V��c�\���k(�#݁r��7��T�Z��fJ�Ȁ�Crflw��A$Bh���e�}��
�Ƽ�A����
(UǼrMC
���T

�?�#��HŸ�$
��iĔ��q�r�a,4׹���7�F��i�8N���I�RB�,
`׹ꌋڗb�&���+j���$y�����$G���l䭴�4I෽U(�ƈf��T*M�
.V�Z���2-0Ϋ.�S���}�=2Q,�# �M�k�)8��eJlxPY��dA�$ŠI
�Y�CrJ
~FvhU/R5��{[��& !N��W�ed��h�4R���*Yq69�O�w��Q�rl
���
���G���;�v-)u}
�'��*+�����t��E�	4{�� ��y�Yn
+T�n5�
���ͧ��n<��-'M!S�8�_`�((�2�&Q�s�����Uן�TX�v}��M�����p�`{jN]��)���x��E��Jn:�(U[sBG,QZ��Y6��[QV*�x<�L{���R+Y@�#�E(:Sdު�&)�ls���/��Q�D�R��<D�&-F4�jO�"[�{
�͒<6Ǎ���P@��
ţ8�s����IJ�"������lly�%+U�ñ��jDsdrpv>u�$B�5f��~U����t
�&_cc, lW.����A��@ �~H��|
+]}�!Bo
,O�}������oW��b������S�f��v��"U�� �+A �!G�ͬ��
�s
�)օ���
�~_�S<w�,c�;X+�>��
�L��L�
|���$ʒ|t�5ֶ �=��`-����~m/�lfP�p����݄
+
��/�<,��偤e{$Z����C>i���IC�(�S�U����ڼ�l�)�s|�v����c>Ei�E���un|
t��Xs�
�� }���z���hƝ���׭6�F
�XTg]�y�y��tW��� ���ou`��.�e��`�c�+�����Lc�_�O���ؙA�P[���<@�CtDn�NHU����-$p��j�웶�x�d :3z�[�Y{҅Ո�C:zڂ�
9;��W���	�@c4'"&F
I
�I:8,8�O������̀r�[�H�X.`v�r*
B}�ؐ��������Q���ǯ;%�{I�֠�JJc+Ĵ��l��:�}��G���Sk��{$�SW.����Py������Ԅ�E�|�=��+p>���j������8esK�����~nn
Up���N 9��uO6�r��!�tB����x6?�Ѯ���SɃ�V��e�{��]%�J����x۔O��TR�5S�b
+G?���=�Ї�(�b5YT�91�	�2ė%�u8Eq1߆[��F�'�;`���B�R��3�T��J�0�2��� ҇��J����j3����[�HG_S+��WV
�K�	m袕,\6۞��=M`F#�D��P�-))��X�r��(�&J��mƉ����1N���-q�e��*cX��N�(�ޥT,(
܊�cj�'��
�%����6!���b�1@��	��W�I9����x��!t��z>� �fG�=JGM�R�Q:�p�\���g	�
+�4ݞ	O)䐮�i޴��q�,xxȸ�KD
�d�R`R-N�.�{�f����������4����z9@�	R:�C�.�����
+[�@8�{�
+�
+��']?z_c=��Mh W�g��-�X�$�'�@��@y��ӱ��|�#�����]Zn@3��50��G{ϛ��Y�;R�w�����MW����Ld��R��1!{<�(�
��+B:���Is.&�8�m�y��Z�y�X$X�:�� 
�ց���bFl ��� 9�=�{�g��{�3��8n� �����=jU2���G��GF�q�u�(�o*jsr�
�p�O������3:rq��e+�V1&�s����s�*���Ʋ�;������6k�
+
�$�o�(b>>-lʸC"�:�n��S���?���{R����
�w&r]$����&���
hɂ��Mi\��P
�5��d�P3��j�X�Z�����&�L����s*l��04ԍW���yR+#�]�,W>�И�6�J�n:T�R�K�tr��
+CV�*�1:!^jB�B0�`٨�e*�)��3��,��K���:���p����Y�Q
+Y.�*�n��+%�
�� R�
���,�E��i&
���
#WB���
��+�

��Mc(�
�ub�lND�Um\dp����.N��p��+�?
����4��� q+��r�?�����Uڞ5�O7]{xG��#��)x����>�J)�V�'�	�\+�-IΦ��]V��b�����M#
����S��NO�J�D�g�t{h�;��RmX�Ȃ�x�u�D��i�安c������¥��ƶp��PHV
&�l��y��LiP��KrWl^��h]������Xh�8��X\Jͽgch���ō�2�{E���i,%b���W0�����Y+����&�J�E*Ä��~�G��F>���o��|>�l�Y)K��
���1x%���̯«�ƫ�D�����΅FP*�|ﴄ�5��=Hm�#��
&�7Kr�r �	R���01��Pǒ�LK��-zw��&�躒f0�4[��
D7&��?,hţ�ɉ�qV埔C	��Ǯ�&1�ڵ8j�ւ�4�z0鬕R1�T�V���[M��U��~���մ��� ����~���A1��=���[���d���^]cM��!�T~�)n���Gd��L�R\�3
|8K��y��h���_fF�[��ș=��
�X���Z����+AB#�
9�MFv%�xAM��8P�&@A%)�u�s��"��8TQ��^e�x�N�_�\	����ӈ�b�6������1�������T{l�-D�49��9������NZ�����g
e�Q1��kPs���/�s��x���,J}�N���r�8�GM��r��QJ
��7����8�lb���c�h!ޒv�������Kc����u���y��d�=[���Y��ɤ�`]��	
Z
��$#�ҥ�?��Ji%���5��W���Hῤ�=�Q�ZB��>�$�z�mbl�}fB
��l��1:�l�µ�2��JU�٭7���@ȼ���V�eH^�b
�So�H��
�M�
��G7� N�8���J
։�<
�@�Qp�ї�����r����{l��p��ơtί�m� �Q�?��ʛ��g�����>��3{���rUG��rn���c܄e1$��4ؑ��������O���C������7x��
�KBr/���
�5Q��{�q������-���p�s�ҧ*1[���,�?�ծ�� ��2��X(��Q�芴Q�TN�"��Y^��9��w{汳��,O����p��� �QMֳ�i�F��!�O�� gq4�'�lBa4`B�
�
����C�ߖ]�Ä�

��
+���΁֙���K���\�h\�1j��x��,�x��-9L��?<5��"�=��s�#�tWGk�ёC.޿F�QZ�W���Ë�BIA����UmՒ��5?�}�
+
���Zx�<����Mr qB?P�����R�J�n̑���*�r����ςN,����P��-A}$Ot�.���<Oy��q�^
�,X�k�Jv����|�
+~c�
�"+E
���w�9u��`��ׇ[
a2e�2R�z���1�S	3���Q�XjZ����l� Xj�� |�'3�U
�A��c���)gT�qJ*�z�<
As�4�v�]GUҿ
�m���9�wB���fek��dq��ԃ]�r5�ذ�`�˫
��k�L=u3�He�,�t��k�M3��Xv3�8��EmG�jF��p�3ft��(�N�x$=g���:�괌�L
�a	��\����J���G
aj�w

�{`o�6�0�L�2^ Hke��3�]�+�:�΍�2���J�
�ʐiL>bPV�J�R���ځ�16��J�!��O�<�����K���\��m��`��J�1fݰwx�5o�.B� ��v���]+
�H|Fx�,W��9QN�����nq�l�Gw2��k���,�
+:I���H�8-W"%!��g����
(�s�^�D9!h"�Xy��2L^�m�5�N�(�+'��IBn�'�/��6�7s���ǛW��p�|(҉z��G��Y�%�2�?����Bj��
Ar�b�[�t����
���쎩�+�!/L���Yw�R����b����u|�
wܷ��~�k��߃V�/(z�= I�gHӘӂ'�G�:žR�U��G��F~�B�3c\�5�$���j�������������+���ݪ}�ݼmu� ��l�� $�"���{ݥ��܋�
���q�ޒ� AT��
endstream
endobj
17 0 obj
12647 
endobj
18 0 obj
<< /Filter [ /FlateDecode ] /Length 19 0 R >> 
stream
+H��WɎ
����P7
����Q2@�

�4�<� MӠ����"��隮j��C5�dFD���������7��~|��_O�����.N�o��wjz�t�ӓ�?=qt���N��L����L�����H����,/�~:��fv̐�f�-O3�
S��

��]�
֜�~��
+Z�'ؠ��~wX>SMn�@�7�<S͑=O�a�(�F>��Ƭ5{��5�(=�������
����5a֎u�qZ���_<��[�AU�5�]��/}c�EZ��k��'�F��k�RqW�#���@�D�V�b�R�lHl����𵶾�
�
2�F
+����
���i`��A�Ϡ˹�E�����ޣ����q�oJ:m�Db�M���㸔���9l�ø����z� ()]
����f�e3{�
�Q�7
D
9��	�XI at K��Y��
y��4�34
ӳ5ތ�*R5>gP��?uQ@�/�Ɗ<gS�a�X{Qu���saAh��o
�}�/�	���mZג���V��C
,<nɧ�
+�P�(�2��f8ڎR���盦B�(�k*�
c��b��,TxQ�H��y�p����W ��#2���WT��]U�o("�	�
*R�Y�4�X�TQ*F��o3x%�UtI��^�4�f_��@�\�.��m�ߩ"H�UFk*�y�S��-<���(�G�t]�bT!� �
��V�}��
B��F�:p~5�v�,)`4pH}�����6�����
���*��Q%5k �a�ڽL�}�QR�Z�#�Za?��
+�o4�6[Hq�>��;�� �J8�Z�����$��p���`�C��``Y���Ƶ���� �/K
�Cpjm̃�c���Y��
�;��l\�-(nb+T�X-ec�J�s
*��'��Ҳ��4��f���yjo��a���B�uk���ټ0�4A�0h�ֺ:r�J��9j=�U����a�� GA�����EWas�^R���+G���%�;
+J�e._����`�{��KB�u
�荾�T����
�/V��,���n5nv,l�ReA�0,����Ls P�R
sDH��4n�_Y?I2LV,��~.9�>�	���	�n��}�^	�.ʿ�z!d�E�
ƥ��
&	U"{Y�.�RԳ�uA�Z�`6m�T���"tHu7v��ʋ�f��v}/
��
B�̕�����(������R���e��<��?:��J����-����+�wgZ��a	�����^�4^;�w�j�ہ-����(O�9���EG��H��5}{�e��H
+�|�-c�%Qi_��[���x�&���s vWo��J�?�"��w�
o��[��\�E���+��
+�MLyk�F��L�垟���0��֣����by6&�4�*��
+
�
-f�S��&������e��
+�i<�
�"`�\��3h,}�{f
 �x�
v'ࠨ^w���[25�N�oQ^
)be��*�
��d{�S���<�EB/�s���(�!Ec�X at y
Jg��k8�
�M-��c��&��)~h��;&��I
9=}�\&�r��,���$҈L
��2Ό���t4��H�ҽ�
�`�&�(O��+lH�X��5ӛ������$���+�nj����9)-��$zj�%aH�l	�k�/�AO�����t(���6SO�5� 1�˘Ϛ�-#���y��@(G�H�g��"
����<��͢X-2n���U��•�+��\�A<����!Eq[�,�xP�#;n8���Q��.��X�9
m��>c@�GUv���]
�
D�;︞-	�<[���
ő��F�Y!��J����:x\�\M��
WM����YPg�S~����&a���>�����l6�w���I�\
+f
4
-�w����UU��]�M�3E?��g��s��GC�څ�T��
��o�b�I��/AZ�,�G�N�\���*�co�;u����~�
�nS
��zT������D����Xӭ%�:
Rc6�9�-Ҏl�5M7#m� 5�d�9����j
�aϠ���nAX5��VsF����ĺk?
v�s,ʥ��U�ĺr_.�� f��@XT�[]�ؔ&���+x<DŽ�ץT�L,����$��6����+=��" ����d����,�A��m� �Q��Z1L�F
���l� ��8*��9��89�!�2p��4P�y�v`���<XUq�KpP����
+��򶥝_a����o���w�>��)�)F;�YV��἞
M��%��}�_0��~�{�:᠊���J�7�����3~=��#�c���LO?����
+Y�X
ٜ��
�q�1D�+�yσ
c������|qI����4:Yl55*;�nX�
@Y�΃�X��DҘ9E�b�̕U��BfL������c�(+���&�p1+
�@ZjF|����+	q��+�,�	
lb'
��5�f]C�@��	�)ُd}�&�(��Kb�o�x�����5�e�Z���
3ʶ�w�a��_O�W��%(�L�ׂy���+0�2���g��U��-bE�[�M����v��k��yS&	�Ax��[ }�'�$��FTȘ��R�k�
\Jn$fJnH��N}�
m���o��`��QAʥ|
*�-@�c*���l�<;�
U���¼�ͼ)م��OBI	m
6��!�Յ1�XL���
��;�b�UF�X>	�(	 j��Չq�Bqժi�eC��j[V��T!V塼�{g��A�0n�3=��\�1O�
j�z���7Z
W愌�Z�]I�x�E
�+2O���oA;�AOCX��p���O�O}\ZyaƐ�B -uJ�媱r�6)�I��뙪��?֫h�a��
���|�Hr��}�(
�OC�h���J[&��'i�F׎
��u�ќ���s����v�>8�]��Hg���9��)�&J5�9)��k~
���-u��ܢ�D��:{�G����O��5mZ~
��θ�pw�0����XR�OH��8�H���-�VY��nh�ij��5"�SIx��I+Aqz�AF��[a(�yO�S4%7*�`XM�w[��Lp��$����l��6{�辙
]�8��ۍ�O�=j��j�SM��:� �p��4��%#�C�`u
PH\��iCz�!�E�|
+sh
�#��O������ԵM�CR�\�/���x�O]��-o2CG��i
y����w�1�Z���/�U�I��`�D��#:A^Ԫj�8��i2�u���Ww�eQ�-�oUM�(��F��,�*p���NYQ�M֨O�l*U7e�������P�@.�o&?
 �5J�
endstream
endobj
19 0 obj
3254 
endobj
20 0 obj
/DeviceRGB 
endobj
21 0 obj
/DeviceGray 
endobj
22 0 obj
<< 
/Type /Font 
/BaseFont /DAAXHI+Myriad-Roman 
/Subtype /Type1 
/Encoding /WinAnsiEncoding 
/FontDescriptor 23 0 R 
/Widths [ 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 
212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 
230 337 497 513 792 605 188 284 284 415 596 207 307 207 343 513 
513 513 513 513 513 513 513 513 513 207 207 596 596 596 406 737 
612 542 580 666 492 487 646 652 239 370 542 472 804 658 689 532 
689 538 493 497 647 558 846 571 541 553 284 346 284 596 500 300 
482 569 448 564 501 292 559 555 234 243 469 234 834 555 549 569 
563 327 396 331 551 481 736 463 471 428 284 239 284 596 282 212 
282 207 513 356 1000 500 500 300 1156 493 255 894 282 553 282 282 
207 207 354 354 282 500 1000 300 802 396 255 863 282 428 541 212 
230 513 513 513 513 239 519 300 677 346 419 596 307 510 300 318 
596 351 340 300 551 512 207 300 319 355 419 759 759 759 406 612 
612 612 612 612 612 788 585 492 492 492 492 239 239 239 239 671 
658 689 689 689 689 689 596 689 647 647 647 647 541 531 548 482 
482 482 482 482 482 773 447 501 501 501 501 234 234 234 234 541 
555 549 549 549 549 549 596 549 551 551 551 551 471 569 471 ] 
/FirstChar 0 
/LastChar 255 
>> 
endobj
23 0 obj
<< 
/Type /FontDescriptor 
/Ascent 831 
/CapHeight 674 
/Descent -250 
/Flags 32 
/FontBBox [ -46 -250 1126 831 ] 
/FontName /DAAXHI+Myriad-Roman 
/ItalicAngle 0 
/StemV 88 
/XHeight 484 
/FontFile3 29 0 R 
>> 
endobj
24 0 obj
<< 
/Type /Group 
/S /Transparency 
/I false 
/K false 
/CS /DeviceRGB 
>> 
endobj
25 0 obj
<< /Height 120 /Width 128 /BitsPerComponent 8 /ColorSpace /DeviceRGB 
/Filter /FlateDecode /Length 26 0 R >> 
stream
+H��W�n��/�
��\��$Pc�+C.l���gUz�����{?x)X�`v�4��@V�:�G��p�y|9�;;K�H��A�,g����9�\�Vqqq���|_]]a0�m���h3���m�£�W�~xxxvv�ן;��̼�� ��o�A��lf���Ÿxv�`�}�xLv�"�noo��m�'#`���wOH��g
x�Q�j���d��Ӄ;��i����W���v�y����߾r�������|��w#����稇��*$7����g����zkk
�^����U}O��n\���~�%�a�T"@�>/2�e��������~:�	�w>����őd��
+M~�j
+�̘�Le#7O�q������-|���8������I8�b]ˌI��y�+�n�?Q�ɼ�eq ��������z��mcʻ����y��d���x����m�8Mhklx�///�H�����4H
|H at u�W�x��o��<���nw#���Į��ϗ��Th�#
�k�d����Ǜ�}��7I�����5��
1l�bKv�C�"�<}�,�(�_���柨[I��ӈ�[��eJ�_AA�(�4lM�����~[w�
ڀ�B�i{4�5�a�_��	wZy
+a˫���c�9JcX|���o�rl�d��ma�<OW��P������i�\��,2���v��#�)SU
+2���2�gJ��	�
��I��*0KXypp`�d���
������PL\���X��V�����
�z�����Gb�p~~�~ah2}�3�qqmm
kb�?�
Z>�C at TI�ͮ� �^���F!�&���J��?��`��C�/�h�9�����M9M
4kP!
���/�vmX�?qKNg��O�v 2I8�HS7���n)���������2��V�����9��(@R�En�jv����o���_�
�é+:k+İ� 	�9c5e�����S����C�߽{�税س�B%�TBv�� �p�� b�&��#�www9@,V-�-!����}x?VVQ�0��.l�v����x72*��2
������'�>���4�����
���u&n�d��S\g��&&����*�3����FUW$/��g�q���&?����#�M܈5�v{�����Pl��짶�����k0ψ0�>e>���s���f�jwLcM
nD8y�
@X8%����ʿ��%e��Ç���{����`��1t
+8 �R�Ǐ[Q�����U*���
+9��k@�y4bkd�&e*P���.b�
��������mZ�8o{����

hݝ,2��.�#č�$0*�`��w!�$��^I<��c'����[�V:�e�`{4 vcH��̧M��nt
4�O�6�ņ�@���X$� 2�Z����3���L�����3�AW�`Q2A�b;� ek
�����k��
���@i��hh5�]�1
^�������_S�.=�� (��P�^|-�7���1���1�R�p�f�ї��?Àwi@�a1
+,A!n��
�g4
$�Յ��]gz�aE`i��N1�¿��SݥO4��"��_��"xA5��ׂ$T����;��qle�Y"���s<D`bKg%w�m�
�#����kR-ʦ����v�i2���Je���k�
`oۃ���̴̓�_m].�0��Z�r�U�f�ʦ��@΋�l��%���嗶`尒z�G��Ge����
T6�tzz�S��׉e�,l��i���θ;j�R�2��?�E�����+���fZ�L*-���1���5���_d���"%A�'�L&'�'�
q��[P��u�Dž��-j3c09�
$��#S;P&셬��~�s
���9o��>}Z��LN�
+��	���v ��������2>jaA�7�|� �U>j���L����.2p9Ni6�>�:�ha�$���S�F9�5����
r���,�J�բI�����V�
	E�=�
��
�1	t�(��.ȕ�_����a����s4s�NA��QS���
�?�
0����o9v��e�2�� ݳ’	�O����=�l�l�T�/
��N
����Z��/Ҿ=�`a�@��9H��LV�J��gZ�‹�=�xUj`��:�:.��7�K����t��(;HOk�n�G�fj)��P
]��#�/�#�,��_
8HLa����+w+�=��8��$N��N�J���
�������?Q��kٳ������|�2-
l(d�*r��`�����P]����w�����"�?�~?5�4�DnO�iΞe�|�Z�P����$��Q1�!����# ��ȟ.���h�0��+/��L�]�L>�
�P��w��"6?�H����! ��䢲d��;�†.a~\�XbÈH.������j�<Ʋf~]
��%&<���t���t�L]����
�
+�5��|��T�?��_~ё�(���<0p�C!�Ƭ^�~jbĮ�Ђ�d�7��v0��



��P,H?5w��G
6_�*���}z�lX>�mz�vI�
rG[�f1��s;d��|
+�����w�*�ULu(8p��6�>��O�^���

S��[��2A�S	� Ķ�mZJ^�qС` b��y����n|�K[;�B��������u��� ���
��7>��黃2_*���YR�0~�#���W�
ߜ�����X���B
��#}
d����^ĕ���k�t9Q��r�.�Q�P(8�u
+������x�W��ny�tN��	�'�lmmi��WE� 4 �>�Z��ʡ`�%
��
Kl'ȧo�J���Z�ku
�jJ#T�Q�� �do�w{�
�l0~ŋ�
+�ћ�.x
�t1� �E�c��_���S믩�^��[S�/�ī�E��y�7�p�Tw���L+
]!l�6��:����n��q�Οyk�0
+e���4l< �θ0X:
� �7;���R���7�0Z��W�<�X��:��/ۉ����^�p&?����H� 

�Բ3�
�
ןx��ɐ�q�` hZ�?y�T�9��	e��������ب\
��3P
� �h�y�:9����'#����
+�[����.(;>���\���p
+����k� ec_[[�������A�Y
S:J]J��"�jB��
<P,�<qϋ��\0����t:z�^��������Lگ�a4���*0����Mu�E&G��y����@G��~��
+X�Q
T�4�A|�B
�>H:�����w��Ӹ���m['��ʡ��\�#-��!�V
+vC�󠾃7u��m�R����/y
�ߖ�`�*"iX)��As��*�l���p��A͕�w��۬
x�
+������}�Ǎ���gb�n�n{
��|Vsf�	�ƏC̿�� ���x�	����r���D��[�x!^!�
��0��1��a"����4P�
���̍�G����i��% S���|;q�WWWH�/������G���

����,�p�5�,D�WP>0f��7/ҵ�G���Ts&<�Y]��U^^

+���A�֩ک����;;
+�һ�jm{T.f�C̏��
+���[v�]KY-`�2Y��P���1忛+�P���Qa!��<�L��x!^&L������;�R��������WQn�0;�������i���8 ��уp�N���}
-��X
X(JD����v��sLv2@���A 8
��y�UVէ�,�N�:�E�cV���4y
>?�*I�
V��<Ɏ�����.0\��!�o_�h�e�}�����
��]���TԪ'��������K�[6�h��	��W���Öw,��Rvl�<�2b�G!���u�|��E	!E�m
�H�o�t�R�r���
��v��wF|�<���|��AU�V�I�;,���Xw�Y��me
h� |�n_4>d�
 Ӥ��
V�3�;�V/J����P�d'(���V�=q�V\��P�6&�
�3����b�R�������m> c8X}�@�$�ni��Q�X�W��ヵo�g��ډ:�)vG�*,�wC`���yy��f~������ mD'

endstream
endobj
26 0 obj
4047 
endobj
27 0 obj
<< /Filter /FlateDecode /Length 28 0 R >> 
stream
+H��Wio��>��?�H�}�"$l� yLxP5��d�
'�~�����{
�9�9u��w}u�>����}zz�����:�K��gw�!�HM�H�����.�k�D =~u�Z�I��9~i��vi��L�[��O���4Z_���Y�O���MvJڿ����t�����6��ç���GaLD�ie"%%� �v���몳�<9�I���Vaϟ_\]���G�a�~=�ҷ�)Ͼ��"|�(�1U��HP
-��i~ʶ����6�x[���1�'���ͫ
��H	0V�~__~N�/n*����憛A��l���<
����)�;��ۗ��!s���}d-�����&;�m�}I�{�鑽��>����,Z�I<
	3+0�x8
_����=H�I>5
x�*�?%�m1B�~| �$Z�?
��GKǓ�x�
��E�����
we�,���lu��K�h���W��}�_={������R������YVBL�*�S	IYC��ZYA�ԃm�/
+�n��7���ć�K�����
���u�K*�?0ί%�sR_ �r�z	���� �d�$@7��+
[�@ϻ
����(%�ka�{J>
�9H[�x 8�Y' �֩��j�^ @O����7R��ǹ��F��b2����п[R�Jʇ̨�r�TP�
�


�֢��v-��"
+6��_��3JK����A1���
NǮ�
+F�m��R���X4�ySt"R
+�bF���m���+��
�mt�F5��Rh�F[
�W���X[Pp6\����89��VQ��̙%ϭ�bI��UQQ���
���¿_����&Zq�c�8�=��j���R1�Ƃg��`=8�,��{
���4�3 at e��S�Y	JP(��cύ���
+���� �?$8�`,C�������
��jtz"
��/G%3��R�B������3BU�`
+.D3��%x
�(�BA�p.be��1m��,e(���)��!F,刱�
����
����䅒]����o7���O6�������]�5�s�S:����bM�	�2a��9��v����!���*,z��2%�
�Ok#��35�iO���B�������o��-�V��Q��[s��#����%
�ʅ�{d���pqB�����F���D�M����\���7��iv�;p�z�Tr�S��6:B?#��n�,��qHS
�:�[��z��
����@�����a9��d�����FG�
�� YP�du�Y藪���1��
8����������7#�_<ɫ�|�~����%s��B����
PƂV����#�Tn
�]��F[�=�
+CC�@n~k�0�⺆N���
ܾ���@w�y�c�;`�k��n��_���F�V��ɝ�s��S�ʸ%�ϑ����;;�
:F�
/�,��Z�u�x9t�~C(^
Y����3�>�]�`	�T���
���Ѝ���7F�ܒ��a��=k���ƒ�FAx
���EFk;X:?l�QNT5����z��~�x�O����Q]%��-�� �3��!@L������*�E�L�B[�9'���E�B�V�`,��T`cKu��
+ڮ��ܹ���{�&FT��ʹ&���?mm�V�����B\��
]�,��H���]c��.��#
%
�2P�t�~#�K� Y���(O0�w���(��Ą2F��`
]f�K��jt�
H�p��a��S��Ə
�V2:��B�SD��Kd�͌q5K��6ECS5�
&�i���Q��*1Q��%b�!
�r~J%a�G�Q�-�R6Zo�d�"@
Nq�0�f��������4?�]��CZ4LQ����G�榊

�T$W���$��4��XB���D���q�g�����8}cGs
E��X/`�3�J�o����
.��͂�BET�*��Jq�6mͩY,�P����m�&gmX匲tN���|G#���?3�#�;��G4��ڨd��
��Cm1|
0j�
��0�
+������QۿgJ����0!1U�l׵�&&
+	�ik�� ?c���\�0�����2G��6~|h�Z�`4g���}m

�
)��fi2X4Y(�
۬|�uKh5k�
�M����H��̓tF6���$ň3[���&�i��I&`S�l��(5U��_�0�K3W*2�d�����AuQN:�
8F=�쾈z�,h}���ܑߠc���~�,ќ������;t�~\1�ZH�G�?�k9�t�7�(�<V�q(t��~�,Tw�յ����*a�C��
+��/l���7d!�7�Օ�Z�p�|Vl٨�F�G���|R��
��
�#��_ZD~M�#��V���
8�v��F-��
ل�N�ĩ	� 7�����s��t��IA�&Mn��]��0���{�޽���bށcRV�b�#�IY����w�����Bj�4��żG6%h�
BA�	�����G�F��Zj��ƿq���,�It�(����٤Op�	zM5]�63�	ع23)����7��g����@��Ƈ.3������c�ئ�v�J"����g
U�����(Ĝ-+�6O�P��T�M��"�����g�O�T,Թ!vjئ�
��+����Z�bn��m�'�0�U�sW,�
c�j+Be�j�	�Wz��
f��v�xB��Q�i�2�
�;`�$�l,�U�0I�
+6+�lS2	"�h;/��C+1����MФ

�0� 
X�P2�w��
ک�YV2���ᆀ�T
��Awgh=y3Xݬ��pK
�����z�����2�\$���ȦT� ��Bq���>ل��op�,�3wA
�M��DS�L�Ì�?�ծ$In����e���tΑB�
�ؘ�N��"��
%�H{
+�UM�5�Q�A �ѫ�J9q��q��)lB�3�Ѹ����G▹��e
j;�)��iu�|@�m.
�y�ܡ�������lJJA��~R����%��a�C{*?��ʑMsD�Ӳ�$o�L���6𶦪|i��6���%�G���k��m,rY�ݜ\
�4�p�>�����
���5Q�K����#�J�����)��� �sƮ�q��LN�l� v�Q�)߽����
�k��iȩ��rWU%�w`;K
����ZI?���d�����.�ᕂxs{.��� ��3	7��/�o�i���bvT6�E����_l��<�ʉ�aLf��ۜF��5����d��긺r*'��X�޽ЌObR���H
%ߟ!Y
+���x<V��	�Eaȓ�rfb�c"��EFaQ
�lGjn��\��6�&M�6��!L�td�;
s��T�y�So��
�8\G09r�c�THG���
f���fʳ��ۈ{�y�3vo����S1
�Fb�%����Isy:��A����7���o��
ܷD[~
�
X
�C���� ��Y$ӃDai|H����XF����S)l#��W����N
�#�@I�Jl�
��h+l�@"�
J�#v��U���E�g�y�_N$D��P1�
�뱷/���C��2->Ęz��g˯w�"1|=c�m��?�b�ue���McT��v�`VQ� ���M�B���3^� ��c��:=ؤĸ%G�D�$d):z
n)��96����Uc���Y�5��X��ZR����>�v�I����zZR�.2]*
+��~�r�(�u,Ef�31)l#1�	L�i}�k{䳘�l���0������RS%���>
l�m%;�,��%��#�?������������o�������W��̰8�����?m��#�-\�5VZ
�*��� l����i�ʁ#Ø!��o��
��<��6��V��W<��i9���;�
C�:r�M��6��q��o ��2w
+�����_~��m`2�N�@9q�{ahk��($�������,�ǭ�8P��v��[��K�~z���

+P������n�bg�6'�l�`������~~�AҺ��-E;�Z25%�-���� �3�
��Ru��KTS�(��whT%8�J��"��2��#�@��m²c���t�m@,|��q3���L	�M�
췛�O�&DQ�'��o����P��Q(1�n}�����I�x�d
��<��60�
tƚ W�5+�s]6��lZ�8�k��m�_ѭ}x�Aڻ߷��nUdd{�G`}���v����ot�m���
���<x�e�
�r��wR�9�n	����>
8��eQ
g���t�jl#1�%k�yz(kl#1�
q��X(�h�Ʀ�����D�JE�pU�
�����q�hwK!`�R]�<��Dm��F�:IQ�4��/D*!3��.+��*wYi`�b�]�
X�TAz!+��ĂŘU�M�
+�����|_��
�݃u~X��R*|�L= /O�(6k����%f�rd���㵞��e�n����Ĥ�
�
��VIw;�)�����-��{
Rȵ��,���|Xgr	gd �$�ܡ�lf��`��
�z�b�l
�ρ|��}��-ݗ&!Ǹc�l�u���}�!Q�{v�޾�Q�_�w���{�]h/j
��ͼёMk/��S�i�5`���>�MKP���ڂa��=�>��%�*��ϻ�M�b
+���g��"/�
+����t��k
f�f@�l=k^��s}a��Q��؋X�Sh�����䩐b��dX2��:�����?§�~{u���K̘�!�\>$Γ�C;M���ka���4*ױ����A�a1��ӅI;q`BG��3iU����"�0�d�/�~|�C ��;@dSš�����u�����&�RL/^0!MΠq<|L�\�2���.L�7Ɋ����X��i彮xk��f�����'�ŭ�8��f���i4j�`����x��ՙ O)�����
+E��Ud�,j����c����^��y�<�Ia{��Ѭ���U�j(�s�9��\*'�.��E�Q6��f�����D;q �X;PI�����8,V��y�ʉ���`���
,~F��q�8P'`��2�%87�s
+�H.៱W8�ȋX�?�v�t
���B	[b��3�<p
�#{�s�J����^z��6��Ϡk��LG�'�MX�A/ ���-&xh��ߟ^��ȕX
�r^\�vjl)l2Ŵ1*_n�0C�� GL�-��8 GQ�6�{�dĝwI���&�
��XC���W�Fr� �Vn3X�ã4��.��x�H�Jx�p��%��y.'�r��f�$��3��	bѰн� EG
x��E�M���-?��R8�XP�hw�a����,��&���l��Y�$�x���{�Mz
+YR��)D���C6��\�8{lp+�Q;
�R���ג-K�_��R�|Ǹc�����
Q���ˆ��W��n���E�}��fg<����3�8
�˯>��
��$[`XݟE$��
+��^Z�DN�gۛPY���=
DKaB�FK�7e�ƽ��nw`w���Dm��ӧ>����uE#%���yL�m��v
���B�dY���3�O�6�»�d�.�A��κ,+��*�-�,�#�U�v�	�1zB;Bg�
$
����’�UKa{����

W
R
+�f򤱽�|�:�q���q��
�IL
+��o�t
y�B�
ZE�ٜZE�ā�u	�'q
|A7
���9\��x�@�
�2�t��
�d uga+�	�
��z���
oB�Dc�<�ʉ�\�@�ǀ���@pQL��0%0�;z��۠�^�=oh]0���4n�o�d��D�˹�$Ӵȓ�)�uoBb�����
�mʓo�bݝ��5=���o^�!�NW珘ˉ�
�Ԋ��
Ȯ�{bR�@�SM��h�Z�5�UL����jY�䶁���>;�%� A����G�|W�
����w��^=d7Y�
�+A�HH �
�O$F��*�8/<���ڙa{�Ҏ!�$8<;Ѿ)��Ow4[��ƽ@�H�7+ʑ6N�4�qo��[�֝����3HSef�����
)oI����݊�e�FCiZ��jH�5	G��Op}�#扂Q|y
+4�5� �Q�pվ
_<x���
+UEOT1�`Q�R<�-N.H9���kxY��K�bH,
wۊ��ޭ�>�xG�q���G�����������c�"�y�(g"]�H
o��ƁR08��W��Hŭ��+~�6<���p��
p�
�Vk?5�/�5��%V;;/���9xѥ��Y��)(�Ψn�ǁ��(/S
^J�@zv��`\wŴ-qo��l1g[cO�
+f8C6�q³KΟ}�Հ��ܛAq�z�h�ٙ���+"�����	{ӎ�,�C��'ȫW{�Ĥq��
��p)�ڛ����vA��+
�2��O\R��5�!�P�BE��׵��4J��0p
+B���+S@_beÛ!�z�R������A�|2��\�
QV�I^��8�\-ď�
)����&�4.�.Q�r��'�
���6`
�@5lO"�-�"&v��_���f�I�z^
^Fl
�P����������H�%a����
+�i؈a��
DC��x�Q��`k�d��԰�~.l�qB(����q��k�kw\%M���'H�|�}���cFۃJ�}��263�T��p���p[@����qZ���Khlz4�,A��R�t�fnD����h!��y8
+�I%��J��Oq �
+���îĤ*D�*ӂ�3�iؐ
#a׈��S��$��=8@���U���/��a�	�K	8�bd=���5�YbR%ݛ!�e�\}Q�����-QkgGe~ 
�Ŭ�Tq
�s����Y9��|�
+_h��5�a�
8Q!ˌvu�GR��M�%�&��ɬ��Odh�}D4��2�]AW{�K�?�^��ڛa֖��,������ܟ�~���߳

+M1D&4�׷���P�$��߿�G��������&�h�Gn������2���$��4�\�-ߟ���'�=d�S���
4|��Q|
s���A!C<�O<��@ �Tv¨L��$�ߎV�'I�����Ͻ�D�$Χr���鉱������������w
��F�c�
ɟ~c5��-g���Z�
�;N/wc������
~R��
�e7d6�a�S�x~�Rf��y�+��r��h�w��+�A@`{���J~�~�5�|;/|e�6�Y"����Є�'�h�䠊j!��#\�6r��ⰱě�;�p-DC�Y��\���ú�:ϐ�ȿʐ�K�!'�L�z��#Z��e��]�x<�WH�h�J����וx0>$G2+
���E��1�0=|��|�dLW�CaD4�@�9�dz	
H�!�'?����uGSQ/A���5��:�U��q���n"����K��/�W����W
�!غS�"���T4B�~;ZS�zI��
G�ِ�����\�h{ï��(��)q���q�m��룵H����cv�@����޾
�<|y|��~�ۗ?��G�ę
+ܧ���
���v�����I�'J"�}�-qkS���8\Ҿ
o[����Q�nJ�ɧ���"����+g�&ڰ�v��!�+o�v�
�����9��
t<p�5
��ڔB�/�9��yա���ۏ�F��]T�a���r";M����|׈���.�ݨ�Nؓ��5—�̷�b7��mS���a�DדAt`Q4+A�gDR5 
4
�c���Q$���m�	�;�j at C؜�
FC�4I'֨��%�~�k@E���^.͢��^#f�."� ��
��7CLN�/E�
�!9_Z�
o��H�-Ν��Y}��m`.*|Nޏ�b���,��g':!pgeIv���
9�ަ
@C*������k��!�$��J��� �CM/����ٕ���i�I�����Z�g<���e������nba���V�6�n�)�ׂa
�N�C��u���_������O|�?	%
bsы���h�x�X
4����K�G�?�.C������%=�?x=/8�CNr4��A}�BlR
+3g'�F)X!-8?��Ѻ�
֕&t��]~a=P��Ahkc�}�
*g��Kd
���̉)~{�j}��=]e��p��Bk�X��w 1z��/Y���ڛA�SX���
�T��*g���-�e+�Z�
�z��P�� ���t�k
/�]���r��-o��_N�nY%
���5��V@纔�ü�c�i�0sa׈�{��r�=��`�|.��H?����&q)�8�����@<7��^/�՝)˥�X{3Ĕ<
��� ��Lǖ7�8IE�%P;x
	��T;3d)�����D��X��̄�
�E*�߁]艻�r-�!�P���
6��R��p�E}�M1U*�/���~�ƃ��=��#B<�Ea�a!n�^�s^��N�Ma�!��z
u�
+���88Y�(;���5n��B�%�;��[��i�qd�
i��B �>Yp�-�Fc8G+U�6���<�m�����j���>��
�J����L
�?*�;��ߛ����2pG^����q��
�Y&g�[���G��
Y�I(Yi\n'�D2�t��'�DW�Җ�KU
q��Cyڼ}��ܰ��onhrZr�/��H�DU/���J���-yp�Hh5}��4#��C_`��<n��$�VH���:fyb��b����k1�u^B" eʜY��ʀ�{��W*�Ʊ�9x�����1Yz�m!ZNF���̃�4�
_����V�r�	�a�FYr����B>3�N�RN�
��N%L�����/j%�<|�<���Vl��n��
ه����[�ثM�G���f�X��
G���*�>�D�ҀW�T93h���m�Y�H/�KC�vf���mpY���N�B����k��h
r��V�2P7�;�<�0��U�#�qC��+�����b}^
�s����1�I�fw��8���<J���GRu��6ޖ�W,���9U����6	�ev��ޒ�MM�Ϧ�Z���W�Ԇ�V�U��)J���H�B�%��)7��J<hjQ�T�h�V�t��#vؔh|�>4xk?������(���ֶ�W'�a
p���м���èa���$ъPm�B��im������<� Oy���i�*(rV�9�e�͙�@��#���~��ޒ��8OG��Gf}��F�R�s�:`��%�((��I
$qrLh�)'�X��7s at 3�S�M�S|H�~��V�1�s�@��ρ�lq_`��,ɑa
�xScg|��P��4X�yi1c���T�4�
؀*����W�3v>U,��������=�d"
$��C�q�CkY�l`�
|�e�oY��Z��-���
a��Gȓ�9~c=j9<�
ð����H��!�J�͵��#���1��u�XF���'Md��$��( �[�ސi���&k�=��"�].�wj{��Bt��p7<vL�P�~)3��7�Gg��a뤒2�b]�m�{4�X�ˀ�����۞o��}I���H�K�
������lO�[�w'��c� ������m���
��VsOb���^ˮ��R����cGrc�D�A�:G�M�½C&V{d����
 ���s�=Jkk=+���%����G+n�cG���6
"鬽i�lX�&%��d�ð�8vK�^�jx��%
�
��iܞ�5wo4<vԓtl�m�-
;�A?o�%�
��s�c��
+�J��
�{�S���
��g�3XW�ޮ�+�
� ͛�\�;^o
$���3&|�{��ٽZ
;�?��+��N���aXz���)m��������A�
z4�l��'��L5Ġ[t8����a2o_7��K�fI�j�'7��>FuDij�1$Y%V,���]�{G��ǞC7iL1��,֝��YoS^9�id"����cm�'k�`�����S�{�g�B�vd��co���n歶�}
�3��������:�7��U�.��:�3�;�)��pjX�h�.
����5��p҃l
G*�=Nkk
9ǹE7��pjX��'��	��éa��VYI�6u�\��os�kx��

�ZcrD�6����0֑q���ؙe���>xmy숤vC��
��	�vء9Z������^z�11��]�ue���r��&ޅ������1��
w�憱���#
N*�
|.L
Wi
��l���V���k[��Y�(6�]�a�#�hs��f�U�W����Ye;�9g��[io�j�W�r`
+2��
`����N
p3<�}85�u�,�`(w'Nkk
q�<(� x���}��
����#�+���	X�Z�[=X�Q+����x��t�їӧ����F�X��
�H�
+|���^��

�8��d8_�ŏ��~8q����~�ڦx]�4D����)͑GL{�0�F����;cg|��Ջ�-��ł%��uAy0&h�re1������fYN����{�O��$F�e3���/m�uD�7��
PL��Ҋ}y��
lA�@�_���d��La�B��	�
+�HG��F��2�*���%�v���7}�8	�vL�b�@���qB������
+
{�p���&YN����[�k聦�g�V5��J,�k�hT_�&8>�ak�G�#��0�I���I,
+
/,���[�.(fC�C1h�
4��\L>N$��2����s�%-B�o͘�$�&�I(
�5�A��s�RN�Z�JD9��3چ"���Y�
+�R�Vx�	�7d��t����Q��\i�*�)f�J��r�fn1q3nNW�&�R�*$�A�@T(ȧ��9>��lF��R s���Z�Ń�9Th}���
��
.NR�AAg�G+��;��k���w�_?��hF���N��E�q�d
+Z䋴�
+}Y���阉�lW�t����l|b�%Ͱ ZN�A�d*�e	fb���>��SN���N%�&a�A���+��
0�uf&��ƙt�	b`��%�3��$��!�@&p�D��.Q�8�,Ԩ�|����L%L�1����L��,�ҋ-��I��JO��

(�[T�D3��(h�6h���+�2�M������^t�f�&r��P�<i��V�`]��9���6h�+A
�L���h��{pL$D(2���e��-$|���:S����u3
K�nꝑaMЩj3���̜�I�LL�rB"�b
+��nֿ
�F�D�O
foi�X����N%�#1p��2(J�
�VԳ�3���X;��_hy��K�4�&����R)��c}M�8	���Uj����|���m��?������~{}
-~���/3dĈ���������
+�?���X`��Y�������������˃��-�s�]W=<��M!�~7���ke�U�UJi�~�|��&��R4C��OAy:��{���Q�nd�v.���������E<N��{6<�Ey}�t���KW�c���$)�t��k�U˟:.WP���O'f��]l�Y���ऊ4Ԙ��
5�i�IX�I�4X����h7�J����H�8�X���k�5M'�9\\)}��"�ۛ>
�W.����"�a��<
���7�^!�d�A��}�����qیn~�i��D_*�(�3�Xh���o۲*��k
�)5~���x߆�+13�2��zY�Ng��Gy��^!kw�U���
+
��P�ƫ�A��3��c!ް�
ݥ��|D0d�Ѡ�!��ӏ�Z
=b�}Dy��O��5;���q0�؇G3X���%��t
>47��D��QE�LA"5�5��`�"�x��v�^�a�ƾ

�)�Xj���0X̥��1�H�pI�Jf��A�������ݸa�+��5L�z�
z齇"�	� y i���ޕ�Ѯ�����MQ#��
+�^�	c6��̃�����)o�/g��
�V ����1O�=�'`��z
F
�6��"������
+���]��"Lgΐm/I����<�V�K��}�gL���̌<�'�
�֡��O�������#&v�&Ϩ����N��ԙwN�
0��EO%�q�q��]�	bUݞw��WA�0r��=z�
����D+�ĨH+�ʫ�����Y3�
�,ƌ�{�\
�2ɞ>ƽ���ff�e�q1<�p�e�u��5�윌��v�a0

+�c�~#p8=��b1�J�
�h��V��p���X�-ƹ�9u
�D�6���;�T��ֳhQg�ִ�q)��\v�ra���5�+c+��u�T�+��<�5���!4��CDŽXl��1����7����}Z� ᵫ���8z�kq����������ݥ��j�+��5�d�v�A?

A�l$7�������eئ6��9�j2]�
+rř6��	��TA�IIc�h��x�%�$W�uCz�*b�׃.c��E��7;���iiL�����g0s���4�·��'Z�WH����<?W'��e�����
� �x{�����>'xď�
�F��al`N
�T?Ч]R��
[�Z;U���v��zט�9��ĵi�}��o��ߺ���f^F����ԑ�=��n@$���n<\1]��bE���IW���𻁇��5�;<ȥs���������H
�1��N������Ɗ�T�RIvo�
5NO��|���dJ�7ޣI�����F�÷�������C� c�@R
endstream
endobj
28 0 obj
12482 
endobj
29 0 obj
<< /Filter /FlateDecode /Length 30 0 R /Subtype /Type1C >> 
stream
+H�|UiPI����a1ڕ�
�b�ZtUfX�C
AQdו�����uluQ at h���`�X�C` /p$ԕZAE��]q��U���Ll���Ȍ̌��}������1�����o7n
����?Y��+��_
=#_���8�͸��|�.�����/����7g��2�
+�x��&Ϙ�m�:^�La+spuu��Y�e�1{T���x��8�O�"F{ F+�W)�e��QQ���8Y�*N�M䥿� ����x�\��/�����?H���d�Ӫ"4�V�K4�2�J/����&N�Q�kb����K���1
�6��X`6f�2
[�a�a.���a���	�|1�ö�X� Sc�b�<L����X,v���c�3�-f�f&A��^�L-��DZ���$�&|�F�R�Z|W
�32?k>l�d�l�j1��If���;`) ���.�GuM\�Z�=Q|���躹�n������� �XP�	�F��%�aѾ�Qd	$���v| �,V���l��9#�pGF��D�c�t��F���11�٬���Q!9m�.p�.|�]���(��`��$̒�|��
��{w3��E%W��ܣ'�|lׯBnȑ��-
+Kt}p��}V0:�3N�n��+��
4,
�y����\6KLN=-�o�>�:��z�h�j��OTx�v�
z�r׎un�~l�OA�
V��d�eF|���PI���c�n0��c�y.��������]�vA
�#
�SYbp�؂�˅�
�D�&C����_
�놕�p0�	8/C�vB�
�����4P��+Y�L�Wz��¼l��(��^R

���B�z�-V�]�㎤�fK�U��3h��x�(���&[�PBƩX���gd�vs_߿,As��}
a�����,�r{��4�(&���
+�K%�EY��n��Z��٧
6/���Lc��fz�9��>t�F�G�����x at _�UM��^P͍���x۹��V5��/!�4����{�g�����
�&&��j�]�v�k�~?��';��*��
|Vs�~�t��	�bȱ�鏔�ζ=����.1Fm��]�
��!�\��<dG`�"� ��p����u�F� �.h��댐3&x��
+3ʲ*�{����n4o��
Ia��'� -p@� �c'��Sz���G�E�+�F�)14u���������]�&V!a{$�ة�2nWt �>�uh���+i�KF�
��x	�@��5ՏԢ�J1��l��Ņ'�Ԣ�n�v�P��܏|ŜW�W���B��K�K톜����1�	��@u����4�
^��^�,��&}���/w�3���zk��9�N]�T�	�u���
W��[)}N���6������]K�
+�	��ۧ���#
��2�ɬ�D���i��'\�8��х�h��Gp��S�x���C�>������4R�E���l�,���+g%�퇘^��!*ɪz������F���^`�vǒ�'�h���)X�>���GS�Yr�G&'s����i��X��vh
f7w���@�?���#+��i ���O�30
o��?��<��Q �:9��3+=n���aD��"���Ud��,׳LZFT��7���ވ���BH�����BY�s�j
�㛉8YX�QJ�<.i⩾Z��@z?�ioS��\���ږzBΎ�S�ܲ�Z���p��w,��f�9�JRx���}�oo
O�jԅ��r�^8h�����PG›�ި��s������Qڜt3�����Ӂ~��w��T6I=�P�.0Ԟu$$�>�s������&jz���ٝ��%�� �1NӋ�h���2�v����%�	[L�-�P� �jA�������7j��
+M�m@|�D�6�3�j]Gd"�~ ���F�m$�8G�MMFL!ۀ���)
U���&���


+�11ڒ��YH�no�WOsUm)�V�����������[�t<�X�qfϑ=
+?z����
����YI��W�ȭ�}IV#\
#�
0�"�g��E2�t����մ
����KV�G�܃5!Ql:�u"����������C����kݻ�u�ݮ�.�[�P�A������ {H5�ь��2�6f�,ul�Ѯ[��YY��5k�R�hf:�֛D�=�z��O��E�����s�\��^s��tg^
R�$�ԯkn���(j�	XRE��	�hT#�l+��N[�F~
��v}�Pş��T���E
+�b>G����x��R<

+�†�
a0�C��
�^�l����asUj��G�h�l���=�}4D���q�q����7
zV�臈R����oz��Z�[k�)����
+ 4 �$��D�fݠ�u���\}��n�٭[�r���w���0�!I��
:�����'�-�~�q�.������>�}��²
]��Y
&]KZ�&--��;�H �2m���a�K��R��J����
+ƾ�$���
��	�Q
��}D��.&n��_}_~��N��F���bnf�dV�`�5i���ۇ���I����:+n�z�V��Z
<�|���퇊l����=|	I_(�L,"��l��Z
+�0��NE[/��U^;�m,�@_(�y^
���U��6�^l�]����³;�i`'�X��ʻQ��?�=��Ikܑ�OO�tgs�B�{��AM�ݏ��MLz�<*��jGFM6�WU_�eΗ�{�� Q���4�5X<�@D�����qxl�n	�I�OΑ͌�IKI��B.3�hLf�wv|��5�pJg<�km�Z��I�|,�xI�4Yo��R�Jy=)
t+[�7*"�n("(A
�Qj��"	�c�[ʳO���G��GsUK
�Gs^


�"��j�tT=Fv��[��
 ?�]
endstream
endobj
30 0 obj
2864 
endobj
31 0 obj
<< /Type /Metadata /Subtype /XML /Length 936 >> 
stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d' bytes='936'?>
+
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
+ xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description about=''
+  xmlns='http://ns.adobe.com/pdf/1.3/'
+  xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+  <pdf:CreationDate>2003-03-27T11:47:07-05:00</pdf:CreationDate>
+  <pdf:ModDate>2003-03-27T11:47:10-06:00</pdf:ModDate>
+  <pdf:Creator>Adobe Illustrator 10.0</pdf:Creator>
+  <pdf:Producer>Adobe PDF library 5.00</pdf:Producer>
+ </rdf:Description>
+
+ <rdf:Description about=''
+  xmlns='http://ns.adobe.com/xap/1.0/'
+  xmlns:xap='http://ns.adobe.com/xap/1.0/'>
+  <xap:CreateDate>2003-03-27T11:47:07-05:00</xap:CreateDate>
+  <xap:ModifyDate>2003-03-27T11:47:10-06:00</xap:ModifyDate>
+  <xap:CreatorTool>Adobe Illustrator 10.0</xap:CreatorTool>
+  <xap:MetadataDate>2003-03-27T11:47:10-06:00</xap:MetadataDate>
+ </rdf:Description>
+
+</rdf:RDF>
+<?xpacket end='r'?>
endstream
endobj
xref
0 32 
0000000004 65535 f
+0000000016 00000 n
+0000000087 00000 n
+0000000151 00000 n
+0000000006 00001 f
+0000000318 00000 n
+0000000000 00001 f
+0000000684 00000 n
+0000000763 00000 n
+0000001018 00000 n
+0000001428 00000 n
+0000003100 00000 n
+0000014845 00000 n
+0000032280 00000 n
+0000032303 00000 n
+0000050784 00000 n
+0000050807 00000 n
+0000063536 00000 n
+0000063559 00000 n
+0000066895 00000 n
+0000066917 00000 n
+0000066945 00000 n
+0000066974 00000 n
+0000068196 00000 n
+0000068423 00000 n
+0000068515 00000 n
+0000072707 00000 n
+0000072729 00000 n
+0000085289 00000 n
+0000085312 00000 n
+0000088271 00000 n
+0000088293 00000 n
+trailer
<<
/Size 32
/Info 3 0 R 
/Root 1 0 R 
/ID[<d1bd0c2021c77ff39552c1d51c3f779d><1ef3a610dd2481b3e295166dd4ceadbc>]
>>
startxref
89313
%%EOF
\ No newline at end of file
diff --git a/documentation/figures/rnaseP-bsu-alignment.eps b/documentation/figures/rnaseP-bsu-alignment.eps
new file mode 100644
index 0000000..434e1d5
--- /dev/null
+++ b/documentation/figures/rnaseP-bsu-alignment.eps
@@ -0,0 +1,11407 @@
+%!PS-Adobe-3.1 EPSF-3.0
+%%Title: rnaseP-bsu-alignment.eps
+%%Creator: Adobe Illustrator(R) X
+%%AI8_CreatorVersion: 10.0
%AI9_PrintingDataBegin
%%For: Sean R Eddy
+%%CreationDate: 3/27/03
+%%BoundingBox: 0 0 382 355
+%%HiResBoundingBox: 0 0 381.9976 354.9351
+%%CropBox: 0 0 381.9976 354.9351
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%ADOBeginClientInjection: DocumentHeader "AI10"
+%ADOEndClientInjection: DocumentHeader "AI10"
+%%Pages: 1
+%%DocumentNeededResources: 
+%%DocumentSuppliedResources: procset Adobe_AGM_Image (1.0 0)
+%%+ procset Adobe_CoolType_Utility_MAKEOCF (1.13 0)
+%%+ procset Adobe_CoolType_Core (2.12 0)
+%%+ procset Adobe_AGM_Core (2.0 0)
+%%+ procset Adobe_AGM_Utils (1.0 0)
+%%DocumentFonts: 
+%%DocumentNeededFonts: 
+%%DocumentNeededFeatures: 
+%%DocumentSuppliedFeatures: 
+%%DocumentCustomColors: 
+%%CMYKCustomColor: 
+%%RGBCustomColor: 
+%%EndComments
+%%BeginDefaults
+%%ViewingOrientation: 1 0 0 1
+%%EndDefaults
+%%BeginProlog
+%ADOBeginClientInjection: DocumentProlog Start "AI10"
+%ADOEndClientInjection: DocumentProlog Start "AI10"
+%%BeginResource: procset Adobe_AGM_Utils 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright (C) 2000-2000 Adobe Systems, Inc.  All Rights Reserved.
+systemdict /setpacking known
+{
+	currentpacking
+	true setpacking
+} if
+userdict /Adobe_AGM_Utils 60 dict dup begin put
+/bdf
+{
+	bind def
+} bind def
+/nd{
+	null def
+}bdf
+/xdf
+{
+	exch def
+}bdf
+/ldf 
+{
+	load def
+}bdf
+/ddf
+{
+	put
+}bdf	
+/xddf
+{
+	3 -1 roll put
+}bdf	
+/xpt
+{
+	exch put
+}bdf
+/ndf
+{ 
+	
+	exch dup where{
+		pop pop pop
+	}{
+		xdf
+	}ifelse
+}def
+/cdndf
+{
+	exch dup currentdict exch known{
+		pop pop
+	}{
+		exch def
+	}ifelse
+}def
+/bdict
+{
+	mark
+}bdf
+/edict
+{
+	counttomark 2 idiv dup dict begin {def} repeat pop currentdict end
+}def
+	
+/ps_level
+	/languagelevel where{
+		pop systemdict /languagelevel get exec
+	}{
+		1
+	}ifelse
+def
+/level2 
+	ps_level 2 ge
+def
+/level3 
+	ps_level 3 ge
+def
+/ps_version
+	{version cvr} stopped {
+		-1
+	}if
+def
+/makereadonlyarray
+{
+	/packedarray where{
+		pop packedarray
+	}{
+		array astore readonly
+	}ifelse
+}bdf
+/map_reserved_ink_name
+{
+	dup type /stringtype eq{
+		dup /Red eq{
+			pop (_Red_)
+		}{
+			dup /Green eq{
+				pop (_Green_)
+			}{
+				dup /Blue eq{
+					pop (_Blue_)
+				}{
+					dup /Cyan eq{
+						pop (_Cyan_)
+					}{
+						dup /Magenta eq{
+							pop (_Magenta_)
+						}{
+							dup /Yellow eq{
+								pop (_Yellow_)
+							}{
+								dup /Black eq{
+									pop (_Black_)
+								}{
+									dup () cvn eq{
+										pop (Process)
+									}if
+								}ifelse
+							}ifelse
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+	}if
+}bdf
+/AGMUTIL_GSTATE 22 dict def
+/get_gstate
+{
+	AGMUTIL_GSTATE begin
+	/AGMUTIL_GSTATE_clr_spc currentcolorspace def
+	/AGMUTIL_GSTATE_clr_indx 0 def
+	/AGMUTIL_GSTATE_clr_comps 12 array def
+	mark currentcolor counttomark
+		{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
+		/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def} repeat pop
+	/AGMUTIL_GSTATE_fnt rootfont def
+	/AGMUTIL_GSTATE_lw currentlinewidth def
+	/AGMUTIL_GSTATE_lc currentlinecap def
+	/AGMUTIL_GSTATE_lj currentlinejoin def
+	/AGMUTIL_GSTATE_ml currentmiterlimit def
+	currentdash /AGMUTIL_GSTATE_do xdf /AGMUTIL_GSTATE_da xdf
+	/AGMUTIL_GSTATE_sa currentstrokeadjust def
+	
+	/AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
+	/AGMUTIL_GSTATE_op currentoverprint def
+	/AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
+	/AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
+	currentcolortransfer cvlit /AGMUTIL_GSTATE_gy_xfer xdf cvlit /AGMUTIL_GSTATE_b_xfer xdf
+		cvlit /AGMUTIL_GSTATE_g_xfer xdf cvlit /AGMUTIL_GSTATE_r_xfer xdf
+	/AGMUTIL_GSTATE_ht currenthalftone def
+	/AGMUTIL_GSTATE_flt currentflat def
+	end
+}def
+/set_gstate
+{
+	AGMUTIL_GSTATE begin
+	AGMUTIL_GSTATE_clr_spc setcolorspace
+	AGMUTIL_GSTATE_clr_indx {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
+	/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def} repeat setcolor
+	AGMUTIL_GSTATE_fnt setfont
+	AGMUTIL_GSTATE_lw setlinewidth
+	AGMUTIL_GSTATE_lc setlinecap
+	AGMUTIL_GSTATE_lj setlinejoin
+	AGMUTIL_GSTATE_ml setmiterlimit
+	AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
+	AGMUTIL_GSTATE_sa setstrokeadjust
+	
+	AGMUTIL_GSTATE_clr_rnd setcolorrendering
+	AGMUTIL_GSTATE_op setoverprint
+	AGMUTIL_GSTATE_bg cvx setblackgeneration
+	AGMUTIL_GSTATE_ucr cvx setundercolorremoval
+	AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
+		AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
+	
+	AGMUTIL_GSTATE_ht /HalftoneType get dup 9 eq exch 100 eq or
+		{
+		currenthalftone /HalftoneType get AGMUTIL_GSTATE_ht /HalftoneType get ne
+			{
+			  mark AGMUTIL_GSTATE_ht {sethalftone} stopped cleartomark
+			} if
+		}{
+		AGMUTIL_GSTATE_ht sethalftone
+		} ifelse
+	
+	AGMUTIL_GSTATE_flt setflat
+	end
+}def
+/AGMUTIL_str256 256 string def
+/AGMUTIL_src256 256 string def
+/AGMUTIL_dst64 64 string def
+/AGMUTIL_srcLen nd
+/AGMUTIL_ndx nd
+/rdline
+{
+	currentfile AGMUTIL_str256 readline pop
+} bdf
+/rdcmntline
+{
+	currentfile AGMUTIL_str256 readline pop
+	(%) anchorsearch {pop} if
+} bdf
+/filter_cmyk
+{	
+	dup type /filetype ne{
+		0 () /SubFileDecode filter
+	}if
+	[
+	exch
+	{
+		AGMUTIL_src256 readstring pop
+		dup length /AGMUTIL_srcLen exch def
+		/AGMUTIL_ndx 0 def
+		
+		AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
+			1 index exch get
+			AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
+			/AGMUTIL_ndx AGMUTIL_ndx 1 add def
+		}for
+		pop
+		AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
+	}
+	bind
+	/exec cvx
+	] cvx
+} bdf
+/AGMUTIL_imagefile nd
+/AGMUTIL_imbuf nd
+/read_image_file
+{
+	AGMUTIL_imagefile 0 setfileposition
+	dup /DataSource {AGMUTIL_imagefile AGMUTIL_imbuf readstring pop} put
+	exch
+	load exec
+}def
+/write_image_file
+{
+	begin
+	{ (AGMUTIL_imagefile) (w+) file } stopped{
+		false
+	}{
+		Adobe_AGM_Utils/AGMUTIL_imagefile xddf 
+		Adobe_AGM_Utils/AGMUTIL_imbuf Width BitsPerComponent mul 7 add 8 idiv string ddf
+		1 1 Height { 
+			pop
+			DataSource dup type /filetype eq{
+				AGMUTIL_imbuf readstring pop
+			}{
+				exec
+			} ifelse
+			AGMUTIL_imagefile exch writestring
+		}for
+		true
+	}ifelse
+	end
+}def
+/close_image_file
+{
+	AGMUTIL_imagefile closefile (AGMUTIL_imagefile) deletefile
+}def
+/consumeimagedata
+{
+	begin
+	currentdict /MultipleDataSources known not
+		{/MultipleDataSources false def} if
+	MultipleDataSources
+		{
+		1 dict begin
+		/flushbuffer Width cvi string def
+		1 1 Height cvi
+			{
+			pop
+			0 1 DataSource length 1 sub
+				{
+				DataSource exch get
+				dup type dup 
+				/filetype eq
+					{
+					exch flushbuffer readstring pop pop
+					}if
+				/arraytype eq
+					{
+					exec pop
+					}if
+				}for
+			}for
+		end
+		}
+		{
+		/DataSource load type dup 
+		/filetype eq
+			{
+			1 dict begin
+			/flushbuffer Width Decode length 2 div mul cvi string def
+			1 1 Height { pop DataSource flushbuffer readstring pop pop} for
+			end
+			}if
+		/arraytype eq
+			{
+			1 1 Height { pop DataSource pop } for
+			}if
+		}ifelse
+	end
+}bdf
+/addprocs
+{
+     2{/exec load}repeat
+     3 1 roll
+     [ 5 1 roll ] bind cvx
+}def
+/modify_halftone_xfer
+{
+	currenthalftone dup length dict copy begin
+    currentdict 2 index known{
+    	1 index load dup length dict copy begin
+		currentdict/TransferFunction known{
+			/TransferFunction load
+		}{
+			currenttransfer
+		}ifelse
+	    addprocs /TransferFunction xdf 
+	    currentdict end def
+		currentdict end sethalftone
+	}{ 
+		currentdict/TransferFunction known{
+			/TransferFunction load 
+		}{
+			currenttransfer
+		}ifelse
+		addprocs /TransferFunction xdf
+		currentdict end sethalftone		
+		pop
+	}ifelse
+}def
+/doc_setup{
+	Adobe_AGM_Utils begin
+}bdf
+/doc_trailer{
+	currentdict Adobe_AGM_Utils eq{
+		end
+	}if
+}bdf
+systemdict /setpacking known
+{
+	setpacking
+} if
+%%EndResource
+%%BeginResource: procset Adobe_AGM_Core 2.0 0
+%%Version: 2.0 0
+%%Copyright: Copyright (C) 1997-1999 Adobe Systems, Inc.  All Rights Reserved.
+systemdict /setpacking known
+{
+	currentpacking
+	true setpacking
+} if
+userdict /Adobe_AGM_Core 205 dict dup begin put
+/nd{
+	null def
+}bind def
+/Adobe_AGM_Core_Id /Adobe_AGM_Core_2.0_0 def
+/AGMCORE_str256 256 string def
+/AGMCORE_src256 256 string def
+/AGMCORE_save nd
+/AGMCORE_graphicsave nd
+/AGMCORE_c 0 def
+/AGMCORE_m 0 def
+/AGMCORE_y 0 def
+/AGMCORE_k 0 def
+/AGMCORE_cmykbuf 4 array def
+/AGMCORE_screen [currentscreen] cvx def
+/AGMCORE_tmp 0 def
+/AGMCORE_&setgray nd
+/AGMCORE_&setcolor nd
+/AGMCORE_&setcolorspace nd
+/AGMCORE_&setcmykcolor nd
+/AGMCORE_cyan_plate nd
+/AGMCORE_magenta_plate nd
+/AGMCORE_yellow_plate nd
+/AGMCORE_black_plate nd
+/AGMCORE_plate_ndx nd
+/AGMCORE_get_ink_data nd
+/AGMCORE_is_cmyk_sep nd
+/AGMCORE_host_sep nd
+/AGMCORE_will_host_sep nd
+/AGMCORE_avoid_L2_sep_space nd
+/AGMCORE_distilling nd
+/AGMCORE_composite_job nd
+/AGMCORE_producing_seps nd
+/AGMCORE_ps_level -1 def
+/AGMCORE_ps_version -1 def
+/AGMCORE_environ_ok nd
+/AGMCORE_CSA_cache 0 dict def
+/AGMCORE_CSD_cache 0 dict def
+/AGMCORE_pattern_cache 0 dict def
+/AGMCORE_currentoverprint false def
+/AGMCORE_deltaX nd
+/AGMCORE_deltaY nd
+/AGMCORE_name nd
+/AGMCORE_sep_special nd
+/AGMCORE_err_strings 4 dict def
+/AGMCORE_cur_err nd
+/AGMCORE_ovp nd
+/AGMCORE_current_spot_alias false def
+/AGMCORE_inverting false def
+/AGMCORE_feature_dictCount nd
+/AGMCORE_feature_opCount nd
+/AGMCORE_feature_ctm nd
+/AGMCORE_ConvertToProcess false def
+/AGMCORE_Default_CTM matrix def
+/knockout_unitsq nd
+/AGMCORE_CRD_cache where{
+	pop
+}{
+	/AGMCORE_CRD_cache 0 dict def
+}ifelse
+/AGMCORE_key_known
+{
+	where{
+		/Adobe_AGM_Core_Id known
+	}{
+		false
+	}ifelse
+}ndf
+/flushinput
+{
+	save
+	/CompareBuffer 3 -1 roll def
+	/readbuffer 256 string def
+	mark
+	{
+	currentfile readbuffer {readline} stopped
+		{cleartomark mark}
+		{
+		not
+			{pop exit}
+		if
+		CompareBuffer eq
+			{exit}
+		if
+		}ifelse
+	}loop
+	cleartomark
+	restore
+}bdf
+/getspotfunction
+{
+	AGMCORE_screen exch pop exch pop
+	dup type /dicttype eq{
+		dup /HalftoneType get 1 eq{
+			/SpotFunction get
+		}{
+			dup /HalftoneType get 2 eq{
+				/GraySpotFunction get
+			}{ 
+				pop
+				{
+					abs exch abs 2 copy add 1 gt{
+						1 sub dup mul exch 1 sub dup mul add 1 sub
+					}{
+						dup mul exch dup mul add 1 exch sub
+					}ifelse
+				}bind
+			}ifelse
+		}ifelse
+	}if
+} def
+/clp_npth
+{
+	clip newpath
+} def
+/eoclp_npth
+{
+	eoclip newpath
+} def
+/stkpath_clp_npth
+{
+	strokepath clip newpath
+} def
+/stk_n_clp_npth
+{
+	gsave stroke grestore clip newpath
+} def
+/npth_clp
+{
+	newpath clip
+} def
+/graphic_setup
+{
+	/AGMCORE_graphicsave save def
+	concat
+	0 setgray
+	0 setlinecap
+	0 setlinejoin
+	1 setlinewidth
+	[] 0 setdash
+	10 setmiterlimit
+	newpath
+	false setoverprint
+	false setstrokeadjust
+	Adobe_AGM_Core/spot_alias get exec
+	/Adobe_AGM_Image where {
+		pop
+		Adobe_AGM_Image/spot_alias 2 copy known{
+			get exec
+		}{
+			pop pop
+		}ifelse
+	} if
+	100 dict begin
+	/showpage {} def
+	mark
+} def
+/graphic_cleanup
+{
+	cleartomark
+	end
+	AGMCORE_graphicsave restore
+} def
+/compose_error_msg
+{
+	grestoreall initgraphics	
+	/Helvetica findfont 10 scalefont setfont
+	
+	/AGMCORE_deltaY 100 def
+	/AGMCORE_deltaX 310 def
+			
+	clippath pathbbox newpath pop pop 36 add exch 36 add exch moveto
+	0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
+	0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
+	0 AGMCORE_&setgray
+	gsave 1 AGMCORE_&setgray fill grestore 
+	1 setlinewidth gsave stroke grestore
+		
+	currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
+	
+	/AGMCORE_deltaY 12 def
+	/AGMCORE_tmp 0 def
+	AGMCORE_err_strings exch get
+		{
+		dup 32 eq
+			{
+			pop
+			AGMCORE_str256 0 AGMCORE_tmp getinterval
+			stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
+				{
+				currentpoint AGMCORE_deltaY sub exch pop
+				clippath pathbbox pop pop pop 44 add exch moveto
+				} if
+			AGMCORE_str256 0 AGMCORE_tmp getinterval show ( ) show
+			
+			0 1 AGMCORE_str256 length 1 sub
+				{
+				AGMCORE_str256 exch 0 put
+				}for
+			/AGMCORE_tmp 0 def
+			}
+			{
+				AGMCORE_str256 exch AGMCORE_tmp exch put
+				/AGMCORE_tmp AGMCORE_tmp 1 add def
+			} ifelse
+		} forall
+} bdf
+/doc_setup{
+	Adobe_AGM_Core begin
+	
+	/AGMCORE_will_host_separate xdf
+	/AGMCORE_ps_version xdf
+	/AGMCORE_ps_level xdf
+	
+	errordict /AGM_handleerror known not{
+		errordict /AGM_handleerror errordict /handleerror get put
+		errordict /handleerror {
+			Adobe_AGM_Core begin
+			$error /newerror get AGMCORE_cur_err null ne and{
+				$error /newerror false put
+				AGMCORE_cur_err compose_error_msg
+			}if
+			$error /newerror true put
+			end
+			errordict /AGM_handleerror get exec
+			} bind put
+		}if
+		
+	/AGMCORE_environ_ok 
+		ps_level AGMCORE_ps_level ge
+		ps_version AGMCORE_ps_version ge and 
+		AGMCORE_ps_level -1 eq or
+	def
+	
+	AGMCORE_environ_ok not
+		{/AGMCORE_cur_err /AGMCORE_bad_environ def} if
+	
+	/AGMCORE_&setgray systemdict/setgray get def
+	level2{
+		/AGMCORE_&setcolor systemdict/setcolor get def
+		/AGMCORE_&setcolorspace systemdict/setcolorspace get def
+	}if
+	/AGMCORE_distilling
+		/product where{
+			pop systemdict/setdistillerparams known product (Adobe PostScript Parser) ne and
+		}{
+			false
+		}ifelse
+	def
+	/AGMCORE_in_rip_sep
+		/AGMCORE_in_rip_sep where{
+			pop AGMCORE_in_rip_sep
+		}{
+			AGMCORE_distilling 
+			{
+				false
+			}{
+				userdict/Adobe_AGM_OnHost_Seps known{
+					false
+				}{
+					level2{
+						currentpagedevice/Separations 2 copy known{
+							get
+						}{
+							pop pop false
+						}ifelse
+					}{
+						false
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+	def
+	level2 not{
+		/xput{
+			dup load dup length exch maxlength eq{
+				dup dup load dup
+				length dup 0 eq {pop 1} if 2 mul dict copy def
+			}if
+			load begin
+				def
+ 			end
+		}def
+	}{
+		/xput{
+			load 3 1 roll put
+		}def
+	}ifelse
+	/AGMCORE_GSTATE AGMCORE_key_known not{
+		/AGMCORE_GSTATE 21 dict def
+		/AGMCORE_gstack 32 array def
+		/AGMCORE_gstackptr 0 def
+		/AGMCORE_gstacksaveptr 0 def
+		/AGMCORE_gstackframekeys 8 def
+											
+		/AGMCORE_&gsave /gsave ldf
+		/AGMCORE_&grestore /grestore ldf
+		/AGMCORE_&grestoreall /grestoreall ldf
+		/AGMCORE_&save /save ldf
+		/AGMCORE_gdictcopy {
+			begin
+			{ def } forall
+			end
+		}def
+		/AGMCORE_gput {
+			AGMCORE_gstack AGMCORE_gstackptr get
+			3 1 roll
+			put
+		}def
+		/AGMCORE_gget {
+			AGMCORE_gstack AGMCORE_gstackptr get
+			exch
+			get
+		}def
+		/gsave {
+			AGMCORE_&gsave
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gstackptr 1 add
+			dup 32 ge {limitcheck} if
+			Adobe_AGM_Core exch
+			/AGMCORE_gstackptr exch put
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gdictcopy
+		}def
+		/grestore {
+			AGMCORE_&grestore
+			AGMCORE_gstackptr 1 sub
+			dup AGMCORE_gstacksaveptr lt {1 add} if
+			Adobe_AGM_Core exch
+			/AGMCORE_gstackptr exch put
+		}def
+		/grestoreall {
+			AGMCORE_&grestoreall
+			Adobe_AGM_Core
+			/AGMCORE_gstackptr AGMCORE_gstacksaveptr put 
+		}def
+		/save {
+			AGMCORE_&save
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gstackptr 1 add
+			dup 32 ge {limitcheck} if
+			Adobe_AGM_Core begin
+				/AGMCORE_gstackptr exch def
+				/AGMCORE_gstacksaveptr AGMCORE_gstackptr def
+			end
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gdictcopy
+		}def
+		0 1 AGMCORE_gstack length 1 sub {
+				AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
+		} for
+	}if
+	/currentcmykcolor [0 0 0 0] AGMCORE_gput
+	/currentstrokeadjust false AGMCORE_gput
+	/currentcolorspace [/DeviceGray] AGMCORE_gput
+	/sep_tint 0 AGMCORE_gput
+	/sep_colorspace_dict null AGMCORE_gput
+	/indexed_colorspace_dict null AGMCORE_gput
+	/currentcolor_intent () AGMCORE_gput
+	/customcolor_tint 1 AGMCORE_gput
+	end
+}def
+/page_setup
+{
+	/setcmykcolor where{
+		pop
+		Adobe_AGM_Core/AGMCORE_&setcmykcolor /setcmykcolor load put
+	}if
+	Adobe_AGM_Core begin
+	/setcmykcolor
+	{
+		4 copy AGMCORE_cmykbuf astore /currentcmykcolor exch AGMCORE_gput
+		1 sub 4 1 roll
+		3 {
+			3 index add neg dup 0 lt {
+				pop 0
+			} if
+			3 1 roll
+		} repeat
+		setrgbcolor pop
+	}ndf
+	/currentcmykcolor
+	{
+		/currentcmykcolor AGMCORE_gget aload pop
+	}ndf
+	/setoverprint
+	{
+		pop
+	}ndf
+	/currentoverprint
+	{
+		false
+	}ndf
+	/AGMCORE_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def
+	/AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
+	/AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
+	/AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
+	/AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
+	/AGMCORE_plate_ndx 
+		AGMCORE_cyan_plate{ 
+			0
+		}{
+			AGMCORE_magenta_plate{
+				1
+			}{
+				AGMCORE_yellow_plate{
+					2
+				}{
+					AGMCORE_black_plate{
+						3
+					}{
+						4
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+		def
+	/AGMCORE_composite_job
+		AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
+	
+	/AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
+	
+	/AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
+	
+	/AGM_preserve_spots 
+		/AGM_preserve_spots where{
+			pop AGM_preserve_spots
+		}{
+			AGMCORE_distilling AGMCORE_producing_seps or
+		}ifelse
+	def
+	/AGM_is_distiller_preserving_spotimages
+	{
+		currentdistillerparams/PreserveOverprintSettings known
+		{
+			currentdistillerparams/PreserveOverprintSettings get
+				{
+					currentdistillerparams/ColorConversionStrategy known
+					{
+						currentdistillerparams/ColorConversionStrategy get
+						/LeaveColorUnchanged eq
+					}{
+						true
+					}ifelse
+				}{
+					false
+				}ifelse
+		}{
+			false
+		}ifelse
+	}def
+	/convert_spot_to_process where {pop}{
+		/convert_spot_to_process
+		{
+			dup dup (None) eq exch (All) eq or
+				{
+				pop false
+				}{
+				AGMCORE_host_sep
+				{ 
+					gsave
+					1 0 0 0 setcmykcolor currentgray 1 exch sub
+					0 1 0 0 setcmykcolor currentgray 1 exch sub
+					0 0 1 0 setcmykcolor currentgray 1 exch sub
+					0 0 0 1 setcmykcolor currentgray 1 exch sub
+					add add add 0 eq
+					{
+						pop false
+					}{
+						false setoverprint
+						1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor
+						currentgray 0 eq
+					}ifelse
+					grestore
+				}{
+					AGMCORE_distilling
+					{
+						pop AGM_is_distiller_preserving_spotimages not
+					}{
+						Adobe_AGM_Core/AGMCORE_name xddf
+						false
+						currentpagedevice/OverrideSeparations known
+							{
+							currentpagedevice/OverrideSeparations get
+								{
+								/HqnSpots /ProcSet resourcestatus
+									{
+									pop pop pop true
+									}if
+								}if
+							}if					
+							{
+							AGMCORE_name /HqnSpots /ProcSet findresource /TestSpot get exec not
+							}{
+							gsave
+							[/Separation AGMCORE_name /DeviceGray {}]setcolorspace
+							false
+							currentpagedevice/SeparationColorNames 2 copy known
+							{
+								get
+								{ AGMCORE_name eq or}forall
+							not
+							}{
+								pop pop pop true
+							}ifelse
+							grestore
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+		}def
+	}ifelse
+	/convert_to_process where {pop}{
+		/convert_to_process
+		{
+			dup length 0 eq
+				{
+				pop false
+				}{
+				AGMCORE_host_sep
+				{ 
+				true exch
+					{
+					convert_spot_to_process and
+					}
+				forall
+				}{
+				false exch
+					{
+					convert_spot_to_process or
+					}
+				forall
+				}ifelse
+			}ifelse
+		}def
+	}ifelse	
+	AGMCORE_host_sep AGMCORE_will_host_separate not and {
+		/AGMCORE_cur_err /AGMCORE_color_space_onhost_seps def
+		AGMCORE_color_space_onhost_seps
+	}if
+	/AGMCORE_avoid_L2_sep_space  
+		version cvr 2012 lt 
+		level2 and 
+		AGMCORE_producing_seps not and
+	def
+	/AGMCORE_is_cmyk_sep
+		AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
+	def
+	/AGM_avoid_0_cmyk where{
+		pop AGM_avoid_0_cmyk
+	}{
+		AGM_preserve_spots 
+		userdict/Adobe_AGM_OnHost_Seps known 
+		userdict/Adobe_AGM_InRip_Seps known or
+		not and
+	}ifelse
+	{
+		/setcmykcolor[
+			{
+				4 copy add add add 0 eq currentoverprint and{
+					pop 0.0005
+				}if
+			}/exec cvx
+			/AGMCORE_&setcmykcolor load dup type/operatortype ne{
+				/exec cvx
+			}if
+		]cvx def
+	}if
+	AGMCORE_host_sep{
+		/AGMCORE_get_ink_data
+			AGMCORE_cyan_plate{
+				{pop pop pop}
+			}{
+			  	AGMCORE_magenta_plate{
+			  		{4 3 roll pop pop pop}
+			  	}{
+			  		AGMCORE_yellow_plate{
+			  			{4 2 roll pop pop pop}
+			  		}{
+			  			{4 1 roll pop pop pop}
+			  		}ifelse
+			  	}ifelse
+			}ifelse
+		def
+		/clip AGMCORE_key_known not{
+			Adobe_AGM_Core/AGMCORE_&clip /clip load put
+			/clip
+			{
+				current_spot_alias{
+					currentdict/InksUsed known{
+						[
+						InksUsed{
+							dup map_alias{
+								/Name get exch pop
+							}if
+						}forall
+						]
+						/InksUsed xdf
+					}if
+				}if
+				AGMCORE_&clip
+			}def
+		}if
+		/eoclip AGMCORE_key_known not{
+			Adobe_AGM_Core/AGMCORE_&eoclip /eoclip load put
+			/eoclip
+			{
+				current_spot_alias{
+					currentdict/InksUsed known{
+						[
+						InksUsed{
+							dup map_alias{
+								/Name get exch pop
+							}if
+						}forall
+						]
+						/InksUsed xdf
+					}if
+				}if
+				AGMCORE_&eoclip
+			}def
+		}if
+	}if
+	AGMCORE_in_rip_sep{
+		/setcustomcolor
+		{
+			exch aload pop
+			dup 7 1 roll inRip_spot_has_ink not	{ 
+				4 {4 index mul 4 1 roll}
+				repeat
+				/DeviceCMYK setcolorspace
+				6 -2 roll pop pop
+			}{ 
+				Adobe_AGM_Core begin
+					/AGMCORE_k xdf /AGMCORE_y xdf /AGMCORE_m xdf /AGMCORE_c xdf
+				end
+				[/Separation 4 -1 roll /DeviceCMYK
+				{dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
+				]
+				setcolorspace
+			}ifelse
+			setcolor
+		}ndf
+		/setseparationgray
+		{
+			[/Separation (All) /DeviceGray {}] setcolorspace_opt
+			1 exch sub setcolor
+		}ndf
+	}{
+		/setseparationgray
+		{
+			AGMCORE_&setgray
+		}ndf
+	}ifelse
+	/findcmykcustomcolor
+	{
+		5 makereadonlyarray
+	}ndf
+	/setcustomcolor
+	{
+		exch aload pop pop
+		4 {4 index mul 4 1 roll} repeat
+		setcmykcolor pop
+	}ndf
+	
+	/has_color
+		/colorimage where{
+			AGMCORE_producing_seps{
+				pop true
+			}{
+				systemdict eq
+			}ifelse
+		}{
+			false
+		}ifelse
+	def
+	
+	/map_index
+	{
+		1 index mul exch getinterval {255 div} forall
+	}def
+	
+	level2{
+		/mo /moveto ldf
+		/li /lineto ldf
+		/cv /curveto ldf
+		/knockout_unitsq
+		{
+			1 setgray
+			0 0 1 1 rectfill
+		}def
+		/level2ScreenFreq{
+			begin
+			60
+			HalftoneType 1 eq{
+				pop Frequency
+			}if
+			HalftoneType 2 eq{
+				pop GrayFrequency
+			}if
+			HalftoneType 5 eq{
+				pop Default level2ScreenFreq
+			}if
+			 end
+		}def
+		/currentScreenFreq{
+			currenthalftone level2ScreenFreq
+		}def
+		level2 /setcolorspace AGMCORE_key_known not and{
+		
+			/AGMCORE_&&&setcolorspace /setcolorspace ldf
+			/AGMCORE_ReplaceMappedColor
+			{
+				dup type dup /arraytype eq exch /packedarraytype eq or
+				{
+					dup 0 get dup /Separation eq
+					{
+						pop
+						dup length array copy
+						dup dup 1 get
+						current_spot_alias
+						{
+							dup map_alias
+							{
+								begin
+								/sep_colorspace_dict currentdict AGMCORE_gput
+								pop pop	pop
+									
+								[ 
+									/Separation Name 
+									CSA map_csa
+									dup /MappedCSA xdf 
+									/sep_colorspace_proc load
+								]
+								dup Name
+								end
+							}if
+						}if
+						map_reserved_ink_name 1 exch put
+					}{
+						/DeviceN eq 
+						{
+							dup length array copy
+							dup dup 1 get [ 
+								exch {
+									current_spot_alias{
+										dup map_alias{
+											/Name get exch pop
+										}if
+									}if
+									map_reserved_ink_name
+								} forall 
+							] 1 exch put
+						}if
+					}ifelse
+				}if
+			}def
+			/setcolorspace
+			{
+				dup type dup /arraytype eq exch /packedarraytype eq or
+				{
+					dup 0 get /Indexed eq
+					{
+						AGMCORE_distilling
+						{
+							/PhotoshopDuotoneList where
+							{
+								pop false
+							}{
+								true
+							}ifelse
+						}{
+							true
+						}ifelse
+						{
+							aload pop 3 -1 roll
+							AGMCORE_ReplaceMappedColor
+							3 1 roll 4 array astore
+						}if
+					}{
+						AGMCORE_ReplaceMappedColor
+					}ifelse
+				}if
+				AGMCORE_&&&setcolorspace
+			}def
+		}if	
+	}{
+		
+		/adj
+		{
+			currentstrokeadjust{
+				transform
+				0.25 sub round 0.25 add exch
+				0.25 sub round 0.25 add exch
+				itransform
+			}if
+		}def
+		/mo{
+			adj moveto
+		}def
+		/li{
+			adj lineto
+		}def
+		/cv{
+			6 2 roll adj
+			6 2 roll adj
+			6 2 roll adj curveto
+		}def
+		/knockout_unitsq
+		{
+			1 setgray
+			8 8 1 [8 0 0 8 0 0] {<ffffffffffffffff>} image
+		}def
+		/currentstrokeadjust{
+			/currentstrokeadjust AGMCORE_gget
+		}def
+		/setstrokeadjust{
+			/currentstrokeadjust exch AGMCORE_gput
+		}def
+		/currentScreenFreq{
+			currentscreen pop pop
+		}def
+		/setcolorspace
+		{
+			/currentcolorspace exch AGMCORE_gput
+		} def
+		
+		/currentcolorspace
+		{
+			/currentcolorspace AGMCORE_gget
+		} def
+		
+		/n_color_components
+		{
+			dup type /arraytype eq{
+				0 get
+			}if
+			dup /DeviceGray eq{
+				pop 1
+			}{
+				/DeviceCMYK eq{
+					4
+				}{
+					3
+				}ifelse
+			}ifelse
+		} def
+		
+		/setcolor_devicecolor
+		{
+			dup type /arraytype eq{
+				0 get
+			}if
+			dup /DeviceGray eq{
+				pop setgray
+			}{
+				/DeviceCMYK eq{
+					setcmykcolor
+				}{
+					setrgbcolor
+				}ifelse
+			}ifelse
+		}def
+	
+		/setcolor
+		{
+			currentcolorspace 0 get
+			dup /DeviceGray ne{
+				dup /DeviceCMYK ne{
+					dup /DeviceRGB ne{
+						dup /Separation eq{
+							pop
+							currentcolorspace 3 get exec
+							currentcolorspace 2 get
+						}{
+							dup /Indexed eq{
+								pop
+								currentcolorspace 3 get dup type /stringtype eq{
+									currentcolorspace 1 get n_color_components
+									3 -1 roll map_index
+								}{
+									exec
+								}ifelse
+								currentcolorspace 1 get
+							}{
+								/AGMCORE_cur_err /AGMCORE_invalid_color_space def
+								AGMCORE_invalid_color_space
+							}ifelse
+						}ifelse
+					}if
+				}if
+			}if
+			setcolor_devicecolor
+		} def
+	}ifelse
+	
+	/sop /setoverprint ldf
+	/lw /setlinewidth ldf
+	/lc /setlinecap ldf
+	/lj /setlinejoin ldf
+	/ml /setmiterlimit ldf
+	/dsh /setdash ldf
+	/sadj /setstrokeadjust ldf
+	/gry /setgray ldf
+	/rgb /setrgbcolor ldf
+	/cmyk /setcmykcolor ldf
+	/sep /setsepcolor ldf
+	/idx /setindexedcolor ldf
+	/colr /setcolor ldf
+	/csacrd /set_csa_crd ldf
+	/sepcs /setsepcolorspace ldf
+	/idxcs /setindexedcolorspace ldf
+	/cp /closepath ldf
+	/clp /clp_npth ldf
+	/eclp /eoclp_npth ldf
+	/spclp /stkpath_clp_npth ldf
+	/f /fill ldf
+	/ef /eofill ldf
+	/s /stroke ldf
+	/sclp /stk_n_clp_npth ldf
+	/nclp /npth_clp ldf
+	/gset /graphic_setup ldf
+	/gcln /graphic_cleanup ldf
+	
+	currentdict{
+		dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and {
+			bind
+		}if
+		def
+	}forall
+}def
+/page_trailer
+{
+	end
+}def
+/doc_trailer{
+}def
+systemdict /findcolorrendering known{
+	/findcolorrendering systemdict /findcolorrendering get def
+}if
+systemdict /setcolorrendering known{
+	/setcolorrendering systemdict /setcolorrendering get def
+}if
+/test_cmyk_color_plate
+{
+	gsave
+	setcmykcolor currentgray 1 ne
+	grestore
+}def
+/inRip_spot_has_ink
+{
+	dup Adobe_AGM_Core/AGMCORE_name xddf
+	convert_spot_to_process not
+}def
+/current_ink
+{
+	dup length 0 eq{
+		pop true
+	}{
+		Adobe_AGM_Core/ink_result false put
+		{
+			dup /ProcessCyan eq{
+				AGMCORE_cyan_plate ink_result or Adobe_AGM_Core/ink_result xddf
+			}{
+				dup /ProcessMagenta eq{
+					AGMCORE_magenta_plate ink_result or Adobe_AGM_Core/ink_result xddf
+				}{
+					dup /ProcessYellow eq{
+						AGMCORE_yellow_plate ink_result or Adobe_AGM_Core/ink_result xddf
+					}{
+						dup /ProcessBlack eq{
+							AGMCORE_black_plate ink_result or Adobe_AGM_Core/ink_result xddf
+						}{
+							dup /sep_colorspace_dict AGMCORE_gget dup null eq{
+								pop false ink_result or Adobe_AGM_Core/ink_result xddf
+							}{
+								/Name get eq{
+									1 setsepcolor
+									currentgray 1 ne ink_result or Adobe_AGM_Core/ink_result xddf
+								}{
+									false ink_result or Adobe_AGM_Core/ink_result xddf
+								}ifelse
+							}ifelse
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+			pop 
+		} forall
+		ink_result
+	}ifelse
+}def
+/map255_to_range
+{
+	1 index sub
+	3 -1 roll 255 div mul add
+}def
+/set_csa_crd
+{
+	/sep_colorspace_dict null AGMCORE_gput
+	begin
+		CSA map_csa setcolorspace_opt
+		set_crd
+	end
+}
+def
+/setsepcolor
+{ 
+	
+	/sep_colorspace_dict AGMCORE_gget begin
+		dup /sep_tint exch AGMCORE_gput
+		TintProc
+	end
+} def
+/sep_colorspace_proc
+{
+	Adobe_AGM_Core/AGMCORE_tmp xddf
+	/sep_colorspace_dict AGMCORE_gget begin
+	currentdict/Components known{
+		Components aload pop 
+		TintMethod/Lab eq{
+			2 {AGMCORE_tmp mul NComponents 1 roll} repeat
+			LMax sub AGMCORE_tmp mul LMax add  NComponents 1 roll
+		}{
+			TintMethod/Subtractive eq{
+				NComponents{
+					AGMCORE_tmp mul NComponents 1 roll
+				}repeat
+			}{
+				NComponents{
+					1 sub AGMCORE_tmp mul 1 add  NComponents 1 roll
+				} repeat
+			}ifelse
+		}ifelse
+	}{
+		ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
+		aload pop
+	}ifelse
+	end
+} def
+/sep_colorspace_gray_proc
+{
+	Adobe_AGM_Core/AGMCORE_tmp xddf
+	/sep_colorspace_dict AGMCORE_gget begin
+	GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
+	end
+} def
+/sep_proc_name
+{
+	dup 0 get 
+	dup /DeviceRGB eq exch /DeviceCMYK eq or level2 not and has_color not and{
+		pop [/DeviceGray]
+		/sep_colorspace_gray_proc
+	}{
+		/sep_colorspace_proc
+	}ifelse
+} def
+/setsepcolorspace
+{ 
+	
+	current_spot_alias{
+		dup begin
+			Name map_alias{
+				exch pop
+			}if
+		end
+	}if
+	dup /sep_colorspace_dict exch AGMCORE_gput
+	begin
+	/MappedCSA CSA map_csa def
+	Adobe_AGM_Core/AGMCORE_sep_special Name dup () eq exch (All) eq or ddf
+	
+	AGMCORE_avoid_L2_sep_space{
+		[/Indexed MappedCSA sep_proc_name 255 exch 
+			{ 255 div } /exec cvx 3 -1 roll [ 4 1 roll load /exec cvx ] cvx 
+		] setcolorspace_opt
+		/TintProc {
+			255 mul round cvi setcolor
+		}bdf
+	}{
+		MappedCSA 0 get /DeviceCMYK eq 
+		currentdict/Components known and 
+		AGMCORE_sep_special not and{
+			/TintProc [
+				Components aload pop Name findcmykcustomcolor 
+				/exch cvx /setcustomcolor cvx
+			] cvx bdf
+		}{
+ 			AGMCORE_host_sep Name (All) eq and{
+ 				/TintProc { 
+					1 exch sub setseparationgray 
+				}bdf
+ 			}{
+				AGMCORE_in_rip_sep MappedCSA 0 get /DeviceCMYK eq and 
+				AGMCORE_host_sep or
+				Name () eq and{
+					/TintProc [
+						MappedCSA sep_proc_name exch 0 get /DeviceCMYK eq{
+							cvx /setcmykcolor cvx
+						}{
+							cvx /setgray cvx
+						}ifelse
+					] cvx bdf
+				}{
+					AGMCORE_producing_seps MappedCSA 0 get dup /DeviceCMYK eq exch /DeviceGray eq or and AGMCORE_sep_special not and{
+	 					/TintProc [
+							/dup cvx
+							MappedCSA sep_proc_name cvx exch
+							0 get /DeviceGray eq{
+								1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx
+							}if
+							/Name cvx /findcmykcustomcolor cvx /exch cvx
+							
+							AGMCORE_host_sep{
+								AGMCORE_is_cmyk_sep
+							}{
+								Name inRip_spot_has_ink not
+							}ifelse
+							{
+		 						/pop cvx 1
+							}if
+							/setcustomcolor cvx
+						] cvx bdf
+ 					}{ 
+						/TintProc /setcolor ldf
+						
+						[/Separation Name MappedCSA sep_proc_name load ] setcolorspace_opt
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+	}ifelse
+	set_crd
+	setsepcolor
+	end
+} def
+/setindexedcolorspace
+{
+	dup /indexed_colorspace_dict exch AGMCORE_gput
+	begin
+		/MappedCSA CSA map_csa def
+		AGMCORE_host_sep level2 not and{
+			0 0 0 0 setcmykcolor
+		}{
+			[/Indexed MappedCSA 
+			level2 not has_color not and{
+				dup 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or{
+					pop [/DeviceGray]
+				}if
+				HiVal GrayLookup
+			}{
+				HiVal 
+				currentdict/RangeArray known{
+					{ 
+						/indexed_colorspace_dict AGMCORE_gget begin
+						Lookup exch 
+						dup HiVal gt{
+							pop HiVal
+						}if
+						NComponents mul NComponents getinterval {} forall
+						NComponents 1 sub -1 0{
+							RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
+							NComponents 1 roll
+						}for
+						end
+					} bind
+				}{
+					Lookup
+				}ifelse
+			}ifelse
+			] setcolorspace_opt
+			
+			set_crd
+		}ifelse
+	end
+}def
+/setindexedcolor
+{
+	AGMCORE_host_sep{
+		/indexed_colorspace_dict AGMCORE_gget/Lookup get 4 3 -1 roll map_index setcmykcolor
+	}{
+		setcolor
+	}ifelse
+} def
+/ignoreimagedata
+{
+	currentoverprint not{
+		gsave 
+		dup begin
+		1 setgray
+		0 0 ImageMatrix itransform 
+		Width Height ImageMatrix idtransform rectfill 
+		end
+		grestore
+		}if
+	consumeimagedata
+}def
+/add_csa
+{
+	Adobe_AGM_Core begin
+			/AGMCORE_CSA_cache xput
+	end
+}def
+/map_csa
+{
+	dup type /nametype eq{
+		Adobe_AGM_Core/AGMCORE_CSA_cache get exch get
+	}if
+}def
+/add_csd
+{
+	Adobe_AGM_Core begin
+		/AGMCORE_CSD_cache xput
+	end
+}def
+/get_csd
+{
+	dup type /nametype eq{
+		Adobe_AGM_Core/AGMCORE_CSD_cache get exch get
+	}if
+}def
+/get_csd_by_name
+{
+	dup type dup /nametype eq exch /stringtype eq or{
+		Adobe_AGM_Core begin
+		/AGMCORE_CSD_Name xdf
+		AGMCORE_CSD_cache
+		{
+			dup /Name get AGMCORE_CSD_Name eq
+			{
+				exch pop exit
+			}{
+				pop
+			}ifelse
+			pop
+		}forall
+		end
+	}if
+}def
+/cachepattern_level2
+{
+	4 dict begin
+	/comparebuffer exch def
+	/holdbuffer exch def
+	/readbuffer 1024 string def
+	/LZWFilter holdbuffer /LZWEncode filter def
+	{
+		currentfile readbuffer readline not
+			{pop exit}
+		if
+		dup LZWFilter exch writestring
+		LZWFilter (\n) writestring
+		comparebuffer eq
+			{exit}
+		if
+	}loop
+	LZWFilter closefile
+	end
+}def
+/cachepattern_level3
+{
+	3 dict begin
+	/comparebuffer exch def
+	/readbuffer 1024 string def
+	/DoEOL false def
+	{ 
+		DoEOL
+			{
+			(\n)
+			/DoEOL false def
+			}
+			{
+			currentfile readbuffer readline not
+				{pop ()}
+				{
+				dup length 0 eq
+					{ pop(\n)}
+					{
+					dup comparebuffer eq
+						{pop ()}
+						{/DoEOL true def}
+					ifelse
+					}
+				ifelse
+				}
+			ifelse
+			}
+		ifelse
+	} /ReusableStreamDecode filter
+	end
+}def
+/add_pattern
+{
+	Adobe_AGM_Core begin
+		/AGMCORE_pattern_cache xput
+	end
+}def
+/get_pattern
+{
+	dup type /nametype eq{
+		Adobe_AGM_Core/AGMCORE_pattern_cache get exch get
+	}if
+}def
+/make_pattern
+{
+	dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
+	exch 3 index /XStep get 1 index exch 2 copy div cvi mul sub sub
+	exch 3 index /YStep get 1 index exch 2 copy div cvi mul sub sub
+	matrix translate exch matrix concatmatrix
+	makepattern
+}def
+/set_pattern
+{
+	dup /PatternType get 1 eq{
+		dup /PaintType get 1 eq{
+			false sop [/DeviceGray] setcolorspace 0 setgray
+		}if
+	}if
+	setpattern
+}def
+/setcolorspace_opt
+{
+	dup currentcolorspace eq{
+		pop
+	}{
+		setcolorspace
+	}ifelse
+}def
+/updatecolorrendering
+{
+	
+	currentcolorrendering/Intent known{
+		currentcolorrendering/Intent get
+	}{
+		null
+	}ifelse
+	
+	Intent ne{
+		false  
+		Intent
+		AGMCORE_CRD_cache {
+			exch pop 
+			begin
+				dup Intent eq{
+					currentdict setcolorrendering_opt
+					end 
+					exch pop true exch	
+					exit
+				}if
+			end
+		} forall
+		pop
+		not{
+			systemdict /findcolorrendering known{
+				Intent findcolorrendering pop
+				/ColorRendering findresource 
+				dup length dict copy
+				setcolorrendering_opt
+			}if
+		}if
+	}if
+} def
+/add_crd
+{
+	AGMCORE_CRD_cache 3 1 roll put
+}def
+/set_crd
+{
+	AGMCORE_host_sep not level2 and{
+		currentdict/CRD known{
+			AGMCORE_CRD_cache CRD get dup null ne{
+				setcolorrendering_opt
+			}{
+				pop
+			}ifelse
+		}{
+			currentdict/Intent known{
+				updatecolorrendering
+			}if
+		}ifelse
+	}if
+}def
+/setcolorrendering_opt
+{
+	dup currentcolorrendering eq{
+		pop
+	}{
+		begin
+			/Intent Intent def
+			currentdict
+		end
+		setcolorrendering
+	}ifelse
+}def
+/cdndf
+{
+	exch dup currentdict exch known{
+		pop pop
+	}{
+		exch def
+	}ifelse
+}def
+/cpaint_gcomp
+{
+	convert_to_process Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
+	Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
+	{
+		(%end_cpaint_gcomp) flushinput
+	}if
+}def
+/cpaint_gsep
+{
+	Adobe_AGM_Core/AGMCORE_ConvertToProcess get
+	{	
+		(%end_cpaint_gsep) flushinput
+	}if
+}def
+/cpaint_gend
+{
+	newpath
+}def
+/AGMCORE_ctm_stack bdict
+	/push_ctm {
+		stack length size le{
+			stack dup length 2 mul array 
+			dup /stack exch def
+			copy pop
+		}if
+		stack size 3 -1 roll put
+		/size size 1 add def
+	}
+	/pop_ctm {
+		/size size 1 sub def
+		size 0 lt{ 
+			/size 0 def
+		}if
+		stack size get
+	}
+	/stack 1 array
+	/size 0 
+edict 
+def
+/save_ctm
+{
+	matrix currentmatrix AGMCORE_ctm_stack begin 
+		push_ctm 
+	end
+}def
+/restore_ctm
+{
+	AGMCORE_ctm_stack begin
+		pop_ctm 
+	end
+	setmatrix
+}def
+/path_rez
+{
+	dup 0 ne{
+		AGMCORE_deviceDPI exch div 
+		dup 1 lt{
+			pop 1
+		}if
+		setflat
+	}{
+		pop
+	}ifelse 	
+}def
+/rdcmntline {
+	currentfile AGMCORE_str256 readline pop
+	(%) anchorsearch {pop} if
+} def
+/set_spot_alias_ary
+{
+	/AGMCORE_SpotAliasAry where{
+		pop pop
+	}{
+		Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
+		true set_spot_alias
+	}ifelse
+}def
+/set_spot_alias
+{
+	/AGMCORE_SpotAliasAry where{
+		/AGMCORE_current_spot_alias 3 -1 roll put
+	}{
+		pop
+	}ifelse
+}def
+/current_spot_alias
+{
+	/AGMCORE_SpotAliasAry where{
+		/AGMCORE_current_spot_alias get
+	}{
+		false
+	}ifelse
+}def
+/map_alias
+{
+	/AGMCORE_SpotAliasAry where{
+		begin
+			/AGMCORE_name xdf
+			false	
+			AGMCORE_SpotAliasAry{
+				dup/Name get AGMCORE_name eq{
+					save exch
+					/Adobe_AGM_Core currentdict def
+					/CSD get get_csd
+					exch restore
+					exch pop true
+					exit
+				}{
+					pop
+				}ifelse
+			}forall
+		end
+	}{
+		pop false
+	}ifelse
+}bdf
+/spot_alias
+{
+	true set_spot_alias
+	
+	/AGMCORE_&setcustomcolor AGMCORE_key_known not {
+		Adobe_AGM_Core/AGMCORE_&setcustomcolor /setcustomcolor load put
+	} if
+	/customcolor_tint 1 AGMCORE_gput
+	
+	Adobe_AGM_Core begin
+	/setcustomcolor
+	{
+		
+		dup /customcolor_tint exch AGMCORE_gput
+		
+		current_spot_alias{
+			1 index 4 get map_alias{
+				mark 3 1 roll
+				setsepcolorspace
+				counttomark 0 ne{
+					setsepcolor
+				}if
+				pop
+				pop
+			}{
+				AGMCORE_&setcustomcolor
+			}ifelse
+		}{
+			AGMCORE_&setcustomcolor
+		}ifelse
+	}bdf
+	end
+}def
+/begin_feature
+{
+	Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
+	count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
+	{Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
+}def
+/end_feature
+{
+	2 dict begin
+	/spd /setpagedevice load def
+	/setpagedevice { get_gstate spd set_gstate } def
+	stopped{$error/newerror false put}if
+	end
+	count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
+	countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
+	{Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
+}def
+/set_negative
+{
+	Adobe_AGM_Core begin
+	/AGMCORE_inverting exch def
+	level2{
+		currentpagedevice/NegativePrint known{
+			currentpagedevice/NegativePrint get Adobe_AGM_Core/AGMCORE_inverting get ne{
+				true begin_feature true{
+						bdict /NegativePrint Adobe_AGM_Core/AGMCORE_inverting get edict setpagedevice
+				}end_feature
+			}if
+			/AGMCORE_inverting false def
+		}if
+	}if
+	AGMCORE_inverting{
+		[{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
+		gsave newpath clippath 1 /setseparationgray where{pop setseparationgray}{setgray}ifelse 
+		fill grestore
+	}if
+	end
+}def
+/lw_save_restore_override {
+	/md where {
+		pop
+		md begin
+		/pmSVsetup{} def
+		/endp{}def
+		/pse{}def
+		/psb{}def
+		/orig_showpage where
+			{pop}
+			{/orig_showpage /showpage load def}
+		ifelse
+		/showpage {orig_showpage gR} def
+		end
+	}if
+}def
+/pscript_showpage_override {
+	/NTPSOct95 where
+	{
+		begin
+		showpage
+		save
+		/showpage /restore load def
+		/restore {exch pop}def
+		end
+	}if
+}def
+/driver_media_override
+{
+	/md where {
+		pop
+		md /initializepage known {
+			md /initializepage {} put
+		} if
+		md /rC known {
+			md /rC {4{pop}repeat} put
+		} if
+	}if
+	
+	Adobe_AGM_Core /AGMCORE_Default_CTM matrix currentmatrix put
+}def
+/driver_check_media_override
+{
+	Adobe_AGM_Core /AGMCORE_Default_CTM get matrix currentmatrix ne
+	{
+		Adobe_AGM_Core /AGMCORE_Default_CTM get setmatrix
+	}if
+}def
+AGMCORE_err_strings begin
+	/AGMCORE_bad_environ (Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. ) def
+	/AGMCORE_color_space_onhost_seps (This job contains colors that will not separate with on-host methods. ) def
+	/AGMCORE_invalid_color_space (This job contains an invalid color space. ) def
+end
+end
+systemdict /setpacking known
+{
+	setpacking
+} if
+%%EndResource
+%%BeginResource: procset Adobe_CoolType_Core 2.12 0
+%%Copyright: Copyright 1997-2001 Adobe Systems Incorporated.  All Rights Reserved.
+%%Version: 2.12 0
+userdict/Adobe_CoolType_Core 60 dict dup begin put/Level2? systemdict
+/languagelevel known dup{pop systemdict/languagelevel get 2 ge}if def Level2?
+not{/currentglobal false def/setglobal/pop load def/gcheck{pop false}bind def
+/currentpacking false def/setpacking/pop load def/SharedFontDirectory 0 dict
+def}if currentpacking true setpacking/@_SaveStackLevels{Adobe_CoolType_Data
+begin @opStackCountByLevel @opStackLevel 2 copy known not{2 copy 3 dict dup
+/args 7 index 5 add array put put get}{get dup/args get dup length 3 index lt{
+dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args
+exch put}{pop}ifelse}ifelse begin count 2 sub 1 index lt{pop count 1 sub}if
+dup/argCount exch def dup 0 gt{exch 1 index 2 add 1 roll args exch 0 exch
+getinterval astore pop}{pop}ifelse count 1 sub/restCount exch def end
+/@opStackLevel @opStackLevel 1 add def countdictstack 1 sub
+ at dictStackCountByLevel exch @dictStackLevel exch put/@dictStackLevel
+ at dictStackLevel 1 add def end}bind def/@_RestoreStackLevels{
+Adobe_CoolType_Data begin/@opStackLevel @opStackLevel 1 sub def
+ at opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt{{pop
+}repeat}{pop}ifelse args 0 argCount getinterval{}forall end/@dictStackLevel
+ at dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end
+countdictstack exch sub dup 0 gt{{end}repeat}{pop}ifelse}bind def
+/@_PopStackLevels{Adobe_CoolType_Data begin/@opStackLevel @opStackLevel 1 sub
+def/@dictStackLevel @dictStackLevel 1 sub def end}bind def/@Raise{exch cvx
+exch errordict exch get exec stop}bind def/@ReRaise{cvx $error/errorname get
+errordict exch get exec stop}bind def/@Stopped{0 @#Stopped}bind def/@#Stopped{
+ at _SaveStackLevels stopped{@_RestoreStackLevels true}{@_PopStackLevels false}
+ifelse}bind def/@Arg{Adobe_CoolType_Data begin @opStackCountByLevel
+ at opStackLevel 1 sub get/args get exch get end}bind def/doc_setup{
+Adobe_CoolType_Core begin/mov/moveto load def/nfnt/newencodedfont load def
+/mfnt/makefont load def/sfnt/setfont load def/ufnt/undefinefont load def/chp
+/charpath load def/awsh/awidthshow load def/wsh/widthshow load def/ash/ashow
+load def/sh/show load def end userdict/Adobe_CoolType_Data 6 dict dup begin
+/AddWidths? false def/CC 0 def/charcode 2 string def/@opStackCountByLevel 32
+dict def/@opStackLevel 0 def/@dictStackCountByLevel 32 dict def
+/@dictStackLevel 0 def end put}bind def/doc_trailer{currentdict
+Adobe_CoolType_Core eq{end}if}bind def/page_setup{Adobe_CoolType_Core begin}
+bind def/page_trailer{end}bind def/unload{systemdict/languagelevel known{
+systemdict/languagelevel get 2 ge{userdict/Adobe_CoolType_Core 2 copy known{
+undef}{pop pop}ifelse}if}if}bind def/ndf{1 index where{pop pop pop}{dup xcheck
+{bind}if def}ifelse}def/findfont dup systemdict begin userdict begin
+/globaldict where{/globaldict get begin}if dup where pop exch get/globaldict
+where{pop end}if end end def/systemfindfont/findfont load def/undefinefont{pop
+}ndf/copyfont{currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{
+dup length}ifelse 2 index length add 1 add dict begin exch{1 index/FID eq{pop
+pop}{def}ifelse}forall dup null eq{pop}{{def}forall}ifelse currentdict end
+exch setglobal}bind def/copyarray{currentglobal exch dup gcheck setglobal dup
+length array copy exch setglobal}bind def/newencodedfont{currentglobal{
+SharedFontDirectory 3 index known{SharedFontDirectory 3 index get
+/FontReferenced known}{false}ifelse}{FontDirectory 3 index known{FontDirectory
+3 index get/FontReferenced known}{SharedFontDirectory 3 index known{
+SharedFontDirectory 3 index get/FontReferenced known}{false}ifelse}ifelse}
+ifelse dup{3 index findfont/FontReferenced get 2 index findfont ne{pop false}
+if}if{pop 1 index findfont/Encoding get exch 0 1 255{2 copy get 3 index 3 1
+roll put}for pop pop pop}{findfont dup dup maxlength 2 add dict begin exch{1
+index/FID ne{def}{pop pop}ifelse}forall/FontReferenced exch def/Encoding exch
+dup length array copy def/FontName 1 index dup type/stringtype eq{cvn}if def
+currentdict end definefont pop}ifelse}bind def/SetSubstituteStrategy{
+$SubstituteFont begin dup type/dicttype ne{0 dict}if currentdict/$Strategies
+known{exch $Strategies exch 2 copy known{get 2 copy maxlength exch maxlength
+add dict begin{def}forall{def}forall currentdict dup/$Init known{dup/$Init get
+exec}if end/$Strategy exch def}{pop pop pop}ifelse}{pop pop}ifelse end}bind
+def/scff{$SubstituteFont begin dup type/stringtype eq{dup length exch}{null}
+ifelse/$sname exch def/$slen exch def end{findfont}@Stopped{dup length dup 21
+add string dup 4 3 roll 0 exch 128 string cvs putinterval exch 1 index exch
+(_was-malformed-so-was)putinterval cvn{findfont}@Stopped{pop/Courier findfont}
+if}if $SubstituteFont begin/$sname null def/$slen 0 def end}bind def
+/isWidthsOnlyFont{dup/WidthsOnly known{pop pop true}{dup/FDepVector known{
+/FDepVector get{isWidthsOnlyFont dup{exit}if}forall}{dup/FDArray known{
+/FDArray get{isWidthsOnlyFont dup{exit}if}forall}{pop}ifelse}ifelse}ifelse}
+bind def/?set{$SubstituteFont begin/$substituteFound false def/$fontname 4
+index def/$doSmartSub false def end 3 index findfont $SubstituteFont begin
+$substituteFound{false}{dup/FontName known{dup/FontName get $fontname eq 1
+index/DistillerFauxFont known not and/currentdistillerparams where{pop false 2
+index isWidthsOnlyFont not and}if}{false}ifelse}ifelse exch pop/$doSmartSub
+true def end{exch pop exch pop exch 2 dict dup/Found 3 index put exch findfont
+exch}{exch exec exch findfont 2 dict dup/Downloaded 6 5 roll put}ifelse dup
+/FontName 4 index put copyfont definefont pop}bind def/?str1 256 string def
+/?str2 256 string def/?add{1 index type/integertype eq{exch true 4 2}{false 3
+1}ifelse roll 1 index findfont dup/Widths known{Adobe_CoolType_Data/AddWidths?
+true put gsave dup 1000 scalefont setfont}if/Downloaded known{exec exch{exch
+?str2 cvs exch findfont/Downloaded get 1 dict begin/Downloaded 1 index def
+?str1 cvs length ?str1 1 index 1 add 3 index putinterval exch length 1 add 1
+index add ?str1 2 index(*)putinterval ?str1 0 2 index getinterval cvn findfont
+?str1 3 index(+)putinterval 2 dict dup/FontName ?str1 0 6 index getinterval
+cvn put dup/Downloaded Downloaded put end copyfont dup/FontName get exch
+definefont pop pop pop}{pop}ifelse}{pop exch{findfont dup/Found get dup length
+exch ?str1 cvs pop ?str1 1 index(+)putinterval ?str1 1 index 1 add 4 index
+?str2 cvs putinterval ?str1 exch 0 exch 5 4 roll ?str2 cvs length 1 add add
+getinterval cvn 1 dict exch 1 index exch/FontName exch put copyfont dup
+/FontName get exch definefont pop}{pop}ifelse}ifelse Adobe_CoolType_Data
+/AddWidths? get{grestore Adobe_CoolType_Data/AddWidths? false put}if}bind def
+/?sh{currentfont/Downloaded known{exch}if pop}bind def/?chp{currentfont
+/Downloaded known{pop}{false chp}ifelse}bind def/?mv{currentfont/Downloaded
+known{moveto pop pop}{pop pop moveto}ifelse}bind def setpacking userdict
+/$SubstituteFont 25 dict put 1 dict begin/SubstituteFont dup $error exch 2
+copy known{get}{pop pop{pop/Courier}bind}ifelse def/currentdistillerparams
+where dup{pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known{
+get/Error eq}{pop pop false}ifelse}if not{countdictstack array dictstack 0 get
+begin userdict begin $SubstituteFont begin/$str 128 string def/$fontpat 128
+string def/$slen 0 def/$sname null def/$match false def/$fontname null def
+/$substituteFound false def/$doSmartSub true def/$depth 0 def/$fontname null
+def/$italicangle 26.5 def/$dstack null def/$Strategies 10 dict dup begin
+/$Type3Underprint{currentglobal exch false setglobal 11 dict begin/UseFont
+exch $WMode 0 ne{dup length dict copy dup/WMode $WMode put/UseFont exch
+definefont}if def/FontName $fontname dup type/stringtype eq{cvn}if def
+/FontType 3 def/FontMatrix[.001 0 0 .001 0 0]def/Encoding 256 array dup 0 1
+255{/.notdef put dup}for pop def/FontBBox[0 0 0 0]def/CCInfo 7 dict dup begin
+/cc null def/x 0 def/y 0 def end def/BuildChar{exch begin CCInfo begin 1
+string dup 0 3 index put exch pop/cc exch def UseFont 1000 scalefont setfont
+cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont
+/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end}bind
+def currentdict end exch setglobal}bind def/$GetaTint 2 dict dup begin
+/$BuildFont{dup/WMode known{dup/WMode get}{0}ifelse/$WMode exch def $fontname
+exch dup/FontName known{dup/FontName get dup type/stringtype eq{cvn}if}{
+/unnamedfont}ifelse exch $deepcopyfont exch 1 index exch/FontBasedOn exch put
+dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont}bind def
+/$Underprint{gsave x abs y abs gt{/y 1000 def}{/x -1000 def 500 120 translate}
+ifelse Level2?{[/Separation(All)/DeviceCMYK{0 0 0 1 pop}]setcolorspace}{0
+setgray}ifelse 10 setlinewidth x .8 mul[7 3]{y mul 8 div 120 sub x 10 div exch
+moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave
+Level2?{.2 setcolor}{.8 setgray}ifelse fill grestore stroke}forall pop
+grestore}bind def end def/$Oblique 1 dict dup begin/$BuildFont{currentglobal
+exch dup gcheck setglobal null copyfont begin/FontBasedOn currentdict/FontName
+known{FontName dup type/stringtype eq{cvn}if}{/unnamedfont}ifelse def/FontName
+$fontname dup type/stringtype eq{cvn}if def/currentdistillerparams where{pop}{
+/FontInfo currentdict/FontInfo known{FontInfo null copyfont}{2 dict}ifelse dup
+begin/ItalicAngle $italicangle def/FontMatrix FontMatrix[1 0 ItalicAngle dup
+sin exch cos div 1 0 0]matrix concatmatrix readonly end 4 2 roll def def}
+ifelse FontName currentdict end definefont exch setglobal}bind def end def
+/$None 1 dict dup begin/$BuildFont{}bind def end def end def/$Oblique
+SetSubstituteStrategy/$findfontByEnum{dup type/stringtype eq{cvn}if dup
+/$fontname exch def $sname null eq{$str cvs dup length $slen sub $slen
+getinterval}{pop $sname}ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch
+putinterval/$match false def $SubstituteFont/$dstack countdictstack array
+dictstack put mark{$fontpat 0 $slen 7 add getinterval{/$match exch def exit}
+$str filenameforall}stopped{cleardictstack currentdict true $SubstituteFont
+/$dstack get{exch{1 index eq{pop false}{true}ifelse}{begin false}ifelse}forall
+pop}if cleartomark/$slen 0 def $match false ne{$match(fonts/)anchorsearch pop
+pop cvn}{/Courier}ifelse}bind def/$ROS 1 dict dup begin/Adobe 4 dict dup begin
+/Japan1[/Ryumin-Light/HeiseiMin-W3/GothicBBB-Medium/HeiseiKakuGo-W5
+/HeiseiMaruGo-W4/Jun101-Light]def/Korea1[/HYSMyeongJo-Medium/HYGoThic-Medium]
+def/GB1[/STSong-Light/STHeiti-Regular]def/CNS1[/MKai-Medium/MHei-Medium]def
+end def end def/$cmapname null def/$deepcopyfont{dup/FontType get 0 eq{1 dict
+dup/FontName/copied put copyfont begin/FDepVector FDepVector copyarray 0 1 2
+index length 1 sub{2 copy get $deepcopyfont dup/FontName/copied put/copied
+exch definefont 3 copy put pop pop}for def currentdict end}{$Strategies
+/$Type3Underprint get exec}ifelse}bind def/$buildfontname{length $str 1 index
+(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname
+length add $str exch 0 exch getinterval cvn}bind def/$findfontByROS{/$fontname
+exch def $ROS Registry 2 copy known{get Ordering 2 copy known{get}{pop pop[]}
+ifelse}{pop pop[]}ifelse false exch{dup/CIDFont resourcestatus{pop pop save 1
+index/CIDFont findresource dup/WidthsOnly known{dup/WidthsOnly get}{false}
+ifelse exch pop exch restore{pop}{exch pop true exit}ifelse}{pop}ifelse}forall
+{$str cvs $buildfontname}{false(*){save exch dup/CIDFont findresource dup
+/WidthsOnly known{dup/WidthsOnly get not}{true}ifelse exch/CIDSystemInfo get
+dup/Registry get Registry eq exch/Ordering get Ordering eq and and{exch
+restore exch pop true exit}{pop restore}ifelse}$str/CIDFont resourceforall{
+$buildfontname}{$fontname $findfontByEnum}ifelse}ifelse}bind def end end
+currentdict/$error known currentdict/languagelevel known and dup{pop $error
+/SubstituteFont known}if dup{$error}{Adobe_CoolType_Core}ifelse begin{
+/SubstituteFont/CMap/Category resourcestatus{pop pop{$SubstituteFont begin
+/$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt
+and{$sname null eq{dup $str cvs dup length $slen sub $slen getinterval cvn}{
+$sname}ifelse dup/CMap resourcestatus{pop pop dup/$cmapname exch def/CMap
+findresource/CIDSystemInfo get{def}forall $findfontByROS}{128 string cvs dup
+(-)search{3 1 roll search{3 1 roll pop{dup cvi}stopped{pop pop pop pop pop
+$findfontByEnum}{4 2 roll pop pop exch length exch 2 index length 2 index sub
+exch 1 sub -1 0{$str cvs dup length 4 index 0 4 index 4 3 roll add getinterval
+exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus{pop pop 4 1
+roll pop pop pop dup/$cmapname exch def/CMap findresource/CIDSystemInfo get{
+def}forall $findfontByROS true exit}{pop}ifelse}for dup type/booleantype eq{
+pop}{pop pop $findfontByEnum}ifelse}ifelse}{pop pop pop $findfontByEnum}ifelse
+}{pop pop $findfontByEnum}ifelse}ifelse}{//SubstituteFont exec}ifelse/$slen 0
+def end}}{{$SubstituteFont begin/$substituteFound true def dup length $slen gt
+$sname null ne or $slen 0 gt and{$findfontByEnum}{//SubstituteFont exec}ifelse
+end}}ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont
+load put}{/scfindfont{$SubstituteFont begin dup systemfindfont dup/FontName
+known{dup/FontName get dup 3 index ne}{/noname true}ifelse dup{
+/$origfontnamefound 2 index def/$origfontname 4 index def/$substituteFound
+true def}if exch pop{$slen 0 gt $sname null ne 3 index length $slen gt or and{
+pop dup $findfontByEnum findfont dup maxlength 1 add dict begin{1 index/FID eq
+{pop pop}{def}ifelse}forall currentdict end definefont dup/FontName known{dup
+/FontName get}{null}ifelse $origfontnamefound ne{$origfontname $str cvs print
+( substitution revised, using )print dup/FontName known{dup/FontName get}{
+(unspecified font)}ifelse $str cvs print(.
+)print}if}{exch pop}ifelse}{exch pop}ifelse end}bind def}ifelse end end
+Adobe_CoolType_Core/findfont{$SubstituteFont begin $depth 0 eq{/$fontname 1
+index dup type/stringtype ne{$str cvs}if def/$substituteFound false def}if
+/$depth $depth 1 add def end scfindfont $SubstituteFont begin/$depth $depth 1
+sub def $substituteFound $depth 0 eq and $doSmartSub and{currentdict/$Strategy
+known{$Strategy/$BuildFont get exec}if}if end}bind put}if end end
+%%EndResource
+%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.13 0
+%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated.
+%%Version: 1.13 0
+systemdict/languagelevel known dup{currentglobal false setglobal}{false}ifelse
+exch userdict/Adobe_CoolType_Utility 2 copy known{2 copy get dup maxlength 25
+add dict copy}{25 dict}ifelse put Adobe_CoolType_Utility begin/ct_Level2? exch
+def/ct_Clone? 1183615869 internaldict dup/CCRun known not exch/eCCRun known
+not ct_Level2? and or def/ct_UseNativeCapability? systemdict/composefont known
+def/ct_MakeOCF 35 dict def/ct_Vars 25 dict def/ct_GlyphDirProcs 6 dict def
+/ct_BuildCharDict 15 dict dup begin/charcode 2 string def/dst_string 1500
+string def/nullstring()def/usewidths? true def end def ct_Level2?{setglobal}{
+pop}ifelse ct_GlyphDirProcs begin/GetGlyphDirectory{systemdict/languagelevel
+known{pop/CIDFont findresource/GlyphDirectory get}{1 index/CIDFont
+findresource/GlyphDirectory get dup type/dicttype eq{dup dup maxlength exch
+length sub 2 index lt{dup length 2 index add dict copy 2 index/CIDFont
+findresource/GlyphDirectory 2 index put}if}if exch pop exch pop}ifelse +}def/+
+{systemdict/languagelevel known{currentglobal false setglobal 3 dict begin/vm
+exch def}{1 dict begin}ifelse/$ exch def systemdict/languagelevel known{vm
+setglobal/gvm currentglobal def $ gcheck setglobal}if ?{$ begin}if}def/?{$
+type/dicttype eq}def/|{userdict/Adobe_CoolType_Data known{Adobe_CoolType_Data
+/AddWidths? known{currentdict Adobe_CoolType_Data begin begin AddWidths?{
+Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode
+exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put
+stringwidth 2 array astore currentfont/Widths get exch CC exch put}{?{def}{$ 3
+1 roll put}ifelse}ifelse end end}{?{def}{$ 3 1 roll put}ifelse}ifelse}{?{def}{
+$ 3 1 roll put}ifelse}ifelse}def/!{?{end}if systemdict/languagelevel known{gvm
+setglobal}if end}def/:{string currentfile exch readstring pop}executeonly def
+end ct_MakeOCF begin/ct_cHexEncoding[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09
+/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C
+/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F
+/c30/c31/c32/c33/c34/c35/c36/c37/c38/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42
+/c43/c44/c45/c46/c47/c48/c49/c4A/c4B/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55
+/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68
+/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B
+/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E
+/c8F/c90/c91/c92/c93/c94/c95/c96/c97/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1
+/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4
+/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7
+/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA
+/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED
+/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def
+/ct_CID_STR_SIZE 8000 def/ct_mkocfStr100 100 string def/ct_defaultFontMtx[.001
+0 0 .001 0 0]def/ct_1000Mtx[1000 0 0 1000 0 0]def/ct_raise{exch cvx exch
+errordict exch get exec stop}bind def/ct_reraise{cvx $error/errorname get
+(Error: )print dup(                    )cvs print errordict exch get exec stop
+}bind def/ct_cvnsi{1 index add 1 sub 1 exch 0 4 1 roll{2 index exch get exch 8
+bitshift add}for exch pop}bind def/ct_GetInterval{Adobe_CoolType_Utility
+/ct_BuildCharDict get begin/dst_index 0 def dup dst_string length gt{dup
+string/dst_string exch def}if 1 index ct_CID_STR_SIZE idiv/arrayIndex exch def
+2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub{dup 3 index
+add 2 index length le{2 index getinterval dst_string dst_index 2 index
+putinterval length dst_index add/dst_index exch def exit}{1 index length 1
+index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval
+pop dup dst_index add/dst_index exch def sub/arrayIndex arrayIndex 1 add def 2
+index dup length arrayIndex gt{arrayIndex get}{pop exit}ifelse 0}ifelse}loop
+pop pop pop dst_string 0 dst_index getinterval end}bind def ct_Level2?{
+/ct_resourcestatus currentglobal mark true setglobal{/unknowninstancename
+/Category resourcestatus}stopped{cleartomark setglobal true}{cleartomark
+currentglobal not exch setglobal}ifelse{{mark 3 1 roll/Category findresource
+begin ct_Vars/vm currentglobal put({ResourceStatus} stopped)0()/SubFileDecode
+filter cvx exec{cleartomark false}{{3 2 roll pop true}{cleartomark false}
+ifelse}ifelse ct_Vars/vm get setglobal end}}{{resourcestatus}}ifelse bind def
+/CIDFont/Category ct_resourcestatus{pop pop}{currentglobal true setglobal
+/Generic/Category findresource dup length dict copy dup/InstanceType/dicttype
+put/CIDFont exch/Category defineresource pop setglobal}ifelse
+ct_UseNativeCapability?{/CIDInit/ProcSet findresource begin 12 dict begin
+begincmap/CIDSystemInfo 3 dict dup begin/Registry(Adobe)def/Ordering(Identity)
+def/Supplement 0 def end def/CMapName/Identity-H def/CMapVersion 1 def
+/CMapType 1 def 1 begincodespacerange<0000><ffff>endcodespacerange 1
+begincidrange<0000><ffff>0 endcidrange endcmap CMapName currentdict/CMap
+defineresource pop end end}if}{/ct_Category 2 dict begin/CIDFont 10 dict def
+/ProcSet 2 dict def currentdict end def/defineresource{ct_Category 1 index 2
+copy known{get dup dup maxlength exch length eq{dup length 10 add dict copy
+ct_Category 2 index 2 index put}if 3 index 3 index put pop exch pop}{pop pop
+/defineresource/undefined ct_raise}ifelse}bind def/findresource{ct_Category 1
+index 2 copy known{get 2 index 2 copy known{get 3 1 roll pop pop}{pop pop
+/findresource/undefinedresource ct_raise}ifelse}{pop pop/findresource
+/undefined ct_raise}ifelse}bind def/resourcestatus{ct_Category 1 index 2 copy
+known{get 2 index known exch pop exch pop{0 -1 true}{false}ifelse}{pop pop
+/findresource/undefined ct_raise}ifelse}bind def/ct_resourcestatus
+/resourcestatus load def}ifelse/ct_CIDInit 2 dict begin/ct_cidfont_stream_init
+{{dup(Binary)eq{pop null currentfile ct_Level2?{{cid_BYTE_COUNT()
+/SubFileDecode filter}stopped{pop pop pop}if}if/readstring load exit}if dup
+(Hex)eq{pop currentfile ct_Level2?{{null exch/ASCIIHexDecode filter/readstring
+}stopped{pop exch pop(>)exch/readhexstring}if}{(>)exch/readhexstring}ifelse
+load exit}if/StartData/typecheck ct_raise}loop cid_BYTE_COUNT ct_CID_STR_SIZE
+le{2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put
+}{cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1
+exch{2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop}for 2
+index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch
+1 index length 1 sub exch put}ifelse cid_CIDFONT exch/GlyphData exch put 2
+index null eq{pop pop pop}{pop/readstring load 1 string exch{3 copy exec pop
+dup length 0 eq{pop pop pop pop pop true exit}if 4 index eq{pop pop pop pop
+false exit}if}loop pop}ifelse}bind def/StartData{mark{currentdict dup/FDArray
+get 0 get/FontMatrix get 0 get .001 eq{dup/CDevProc known not{/CDevProc
+1183615869 internaldict/stdCDevProc 2 copy known{get}{pop pop{pop pop pop pop
+pop 0 -1000 7 index 2 div 880}}ifelse def}if}{/CDevProc{pop pop pop pop pop 0
+1 cid_temp/cid_CIDFONT get/FDArray get 0 get/FontMatrix get 0 get div 7 index
+2 div 1 index .88 mul}def}ifelse/cid_temp 15 dict def cid_temp begin
+/cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt{
+ct_cidfont_stream_init FDArray{/Private get dup/SubrMapOffset known{begin
+/Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2?{
+currentdict dup/SubrMapOffset undef dup/SubrCount undef/SDBytes undef}if end
+/cid_SD_BYTES exch def/cid_SUBR_COUNT exch def/cid_SUBR_MAP_OFFSET exch def
+/cid_SUBRS exch def cid_SUBR_COUNT 0 gt{GlyphData cid_SUBR_MAP_OFFSET
+cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub{
+exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch
+cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll
+GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put}
+for pop}if}{pop}ifelse}forall}if cleartomark pop pop end CIDFontName
+currentdict/CIDFont defineresource pop end end}stopped{cleartomark/StartData
+ct_reraise}if}bind def currentdict end def/ct_saveCIDInit{/CIDInit/ProcSet
+ct_resourcestatus{true}{/CIDInitC/ProcSet ct_resourcestatus}ifelse{pop pop
+/CIDInit/ProcSet findresource ct_UseNativeCapability?{pop null}{/CIDInit
+ct_CIDInit/ProcSet defineresource pop}ifelse}{/CIDInit ct_CIDInit/ProcSet
+defineresource pop null}ifelse ct_Vars exch/ct_oldCIDInit exch put}bind def
+/ct_restoreCIDInit{ct_Vars/ct_oldCIDInit get dup null ne{/CIDInit exch/ProcSet
+defineresource pop}{pop}ifelse}bind def/ct_BuildCharSetUp{1 index begin
+CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin/ct_dfCharCode
+exch def/ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge{pop
+0}if/cid exch def{GlyphDirectory cid 2 copy known{get}{pop pop nullstring}
+ifelse dup length FDBytes sub 0 gt{dup FDBytes 0 ne{0 FDBytes ct_cvnsi}{pop 0}
+ifelse/fdIndex exch def dup length FDBytes sub FDBytes exch getinterval
+/charstring exch def exit}{pop cid 0 eq{/charstring nullstring def exit}if/cid
+0 def}ifelse}loop}def/ct_SetCacheDevice{0 0 moveto dup stringwidth 3 -1 roll
+true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto}
+def/ct_CloneSetCacheProc{1 eq{stringwidth pop -2 div -880 0 -1000 setcharwidth
+moveto}{usewidths?{currentfont/Widths get cid 2 copy known{get exch pop aload
+pop}{pop pop stringwidth}ifelse}{stringwidth}ifelse setcharwidth 0 0 moveto}
+ifelse}def/ct_Type3ShowCharString{ct_FDDict fdIndex 2 copy known{get}{
+currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup
+maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known{get}
+{pop pop ct_defaultFontMtx}ifelse/FontMatrix exch dup length array copy def
+/Private get/Private exch def/Widths rootfont/Widths get def/CharStrings 1
+dict dup/.notdef<d841272cf18f54fc13>dup length string copy put def currentdict
+end/ct_Type1Font exch definefont dup 5 1 roll put setglobal}ifelse dup
+/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put
+rootfont/WMode 2 copy known{get}{pop pop 0}ifelse exch 1000 scalefont setfont
+ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold{
+currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth
+setlinewidth stroke}{ct_str1 show}ifelse}def/ct_Type4ShowCharString{ct_dfDict
+ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup
+ct_defaultFontMtx ct_matrixeq not{ct_1000Mtx matrix concatmatrix concat}{pop}
+ifelse/Private get Adobe_CoolType_Utility/ct_Level2? get not{ct_dfDict/Private
+3 -1 roll{put}1183615869 internaldict/superexec get exec}if 1183615869
+internaldict Adobe_CoolType_Utility/ct_Level2? get{1 index}{3 index/Private
+get mark 6 1 roll}ifelse dup/RunInt known{/RunInt get}{pop/CCRun}ifelse get
+exec Adobe_CoolType_Utility/ct_Level2? get not{cleartomark}if}bind def
+/ct_BuildCharIncremental{{Adobe_CoolType_Utility/ct_MakeOCF get begin
+ct_BuildCharSetUp ct_ShowCharString}stopped{stop}if end end end end}bind def
+/BaseFontNameStr(BF00)def/ct_Type1FontTemplate 14 dict begin/FontType 1 def
+/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-250 -250 1250 1250]def/Encoding
+ct_cHexEncoding def/PaintType 0 def currentdict end def/BaseFontTemplate 11
+dict begin/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-250 -250 1250 1250]def
+/Encoding ct_cHexEncoding def/BuildChar/ct_BuildCharIncremental load def
+ct_Clone?{/FontType 3 def/ct_ShowCharString/ct_Type3ShowCharString load def
+/ct_dfSetCacheProc/ct_CloneSetCacheProc load def/ct_SyntheticBold false def
+/ct_StrokeWidth 1 def}{/FontType 4 def/Private 1 dict dup/lenIV 4 put def
+/CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def/PaintType 0 def
+/ct_ShowCharString/ct_Type4ShowCharString load def}ifelse/ct_str1 1 string def
+currentdict end def/BaseFontDictSize BaseFontTemplate length 5 add def
+/ct_matrixeq{true 0 1 5{dup 4 index exch get exch 3 index exch get eq and dup
+not{exit}if}for exch pop exch pop}bind def/ct_makeocf{15 dict begin exch/WMode
+exch def exch/FontName exch def/FontType 0 def/FMapType 2 def/FontMatrix
+matrix def/bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if
+def/Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{
+2 copy bfCount put pop}for def/FDepVector bfCount dup 256 lt{1 add}if array
+def BaseFontTemplate BaseFontDictSize dict copy begin/CIDFont exch def CIDFont
+/FontBBox known{CIDFont/FontBBox get/FontBBox exch def}if CIDFont/CDevProc
+known{CIDFont/CDevProc get/CDevProc exch def}if currentdict end
+BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if{FDepVector
+exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul
+def FontType 3 eq{/ct_FDDict 2 dict def}if currentdict end 1 index 16
+BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put}
+for ct_Clone?{/Widths 1 index/CIDFont get/GlyphDirectory get length dict def}
+if FontName currentdict end definefont ct_Clone?{gsave dup 1000 scalefont
+setfont ct_BuildCharDict begin/usewidths? false def currentfont/Widths get
+begin exch/CIDFont get/GlyphDirectory get{pop dup charcode exch 1 index 0 2
+index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore
+def}forall end/usewidths? true def end grestore}{exch pop}ifelse}bind def
+/ct_ComposeFont{ct_UseNativeCapability?{2 index/CMap ct_resourcestatus{pop pop
+exch pop}{/CIDInit/ProcSet findresource begin 12 dict begin begincmap/CMapName
+3 index def/CMapVersion 1 def/CMapType 1 def exch/WMode exch def/CIDSystemInfo
+3 dict dup begin/Registry(Adobe)def/Ordering CMapName ct_mkocfStr100 cvs
+(Adobe-)search{pop pop(-)search{dup length string copy exch pop exch pop}{pop
+(Identity)}ifelse}{pop(Identity)}ifelse def/Supplement 0 def end def 1
+begincodespacerange<0000><ffff>endcodespacerange 1 begincidrange<0000><ffff>0
+endcidrange endcmap CMapName currentdict/CMap defineresource pop end end}
+ifelse composefont}{3 2 roll pop 0 get/CIDFont findresource ct_makeocf}ifelse}
+bind def/ct_MakeIdentity{ct_UseNativeCapability?{1 index/CMap
+ct_resourcestatus{pop pop}{/CIDInit/ProcSet findresource begin 12 dict begin
+begincmap/CMapName 2 index def/CMapVersion 1 def/CMapType 1 def/CIDSystemInfo
+3 dict dup begin/Registry(Adobe)def/Ordering CMapName ct_mkocfStr100 cvs
+(Adobe-)search{pop pop(-)search{dup length string copy exch pop exch pop}{pop
+(Identity)}ifelse}{pop(Identity)}ifelse def/Supplement 0 def end def 1
+begincodespacerange<0000><ffff>endcodespacerange 1 begincidrange<0000><ffff>0
+endcidrange endcmap CMapName currentdict/CMap defineresource pop end end}
+ifelse composefont}{exch pop 0 get/CIDFont findresource ct_makeocf}ifelse}bind
+def currentdict readonly pop end end
+%%EndResource
+Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end
+%%BeginResource: procset Adobe_AGM_Image 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright (C) 2000-2000 Adobe Systems, Inc.  All Rights Reserved.
+systemdict /setpacking known
+{
+	currentpacking
+	true setpacking
+} if
+userdict /Adobe_AGM_Image 65 dict dup begin put
+/Adobe_AGM_Image_Id /Adobe_AGM_Image_1.0_0 def
+/nd{
+	null def
+}bind def
+/AGMIMG_&image nd
+/AGMIMG_&colorimage nd
+%%don't initialize AGMIMG_&customcolorimage, it wrecks havoc in a nested environment
+%%AGMIMG_ccimage_exists not {/AGMIMG_&customcolorimage nd} if 
+/AGMIMG_&imagemask nd
+/AGMIMG_mbuf () def
+/AGMIMG_ybuf () def
+/AGMIMG_kbuf () def
+/AGMIMG_c 0 def
+/AGMIMG_m 0 def
+/AGMIMG_y 0 def
+/AGMIMG_k 0 def
+/AGMIMG_tmp nd
+/AGMIMG_imagestring0 nd
+/AGMIMG_imagestring1 nd
+/AGMIMG_imagestring2 nd
+/AGMIMG_imagestring3 nd
+/AGMIMG_imagestring4 nd
+/AGMIMG_imagestring5 nd
+/AGMIMG_cnt nd
+/AGMIMG_fsave nd
+/AGMIMG_colorAry nd
+/AGMIMG_override nd
+/AGMIMG_name nd
+/invert_image_samples nd
+/knockout_image_samples	nd
+/img nd
+/sepimg nd
+/idximg nd
+/doc_setup
+{ 
+	Adobe_AGM_Core begin
+	Adobe_AGM_Image begin
+	/AGMIMG_&image systemdict/image get def
+	/AGMIMG_&imagemask systemdict/imagemask get def
+	/colorimage where{
+		pop
+		/AGMIMG_&colorimage /colorimage ldf
+	}if
+	end
+	end
+}def
+/page_setup
+{
+	Adobe_AGM_Image begin
+	/AGMIMG_ccimage_exists {/customcolorimage where 
+		{
+			pop
+			/Adobe_AGM_OnHost_Seps where
+			{
+			pop false
+			}{
+			/Adobe_AGM_InRip_Seps where
+				{
+				pop false
+				}{
+					true
+				 }ifelse
+			 }ifelse
+			}{
+			false
+		}ifelse 
+	}bdf
+	level2{
+		/invert_image_samples
+		{
+			Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
+			/Decode [ Decode 1 get Decode 0 get] def
+		}def
+		/knockout_image_samples
+		{
+			Operator/imagemask ne{
+				/Decode [1 1] def
+			}if
+		}def
+	}{	
+		/invert_image_samples
+		{
+			{1 exch sub} currenttransfer addprocs settransfer
+		}def
+		/knockout_image_samples
+		{
+			{ pop 1 } currenttransfer addprocs settransfer
+		}def
+	}ifelse
+	/img /imageormask ldf
+	/sepimg /sep_imageormask ldf
+	/idximg /indexed_imageormask ldf
+	currentdict{
+		dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and{
+			bind
+		}if
+		def
+	}forall
+}def
+/page_trailer
+{
+	end
+}def
+/doc_trailer
+{
+}def
+/imageormask_sys
+{
+	begin
+		save mark
+		level2{
+			currentdict
+			Operator /imagemask eq{
+				AGMIMG_&imagemask
+			}{
+				AGMIMG_&image
+			}ifelse
+		}{
+			Width Height
+			Operator /imagemask eq{
+				Decode 0 get 1 eq Decode 1 get 0 eq	and
+				ImageMatrix /DataSource load
+				AGMIMG_&imagemask
+			}{
+				BitsPerComponent ImageMatrix /DataSource load
+				AGMIMG_&image
+			}ifelse
+		}ifelse
+		cleartomark restore
+	end
+}def
+/overprint_plate
+{
+	currentoverprint{
+		0 get
+		dup /DeviceGray eq{
+			pop AGMCORE_black_plate not
+		}{
+			/DeviceCMYK eq{
+				AGMCORE_is_cmyk_sep not
+			}if
+		}ifelse
+	}{
+		false
+	}ifelse
+}def
+/imageormask
+{
+	begin
+		SkipImageProc not{
+			save mark
+			level2 AGMCORE_host_sep not and{
+				currentdict
+				Operator /imagemask eq{
+					imagemask
+				}{
+					AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get /DeviceGray eq and{
+						[/Separation /Black /DeviceGray {}] setcolorspace
+						/Decode [ Decode 1 get Decode 0 get ] def
+					}if
+					image
+				}ifelse
+			}{
+				Width Height
+				Operator /imagemask eq{
+					Decode 0 get 1 eq Decode 1 get 0 eq	and
+					ImageMatrix /DataSource load
+					AGMCORE_host_sep{
+						currentgray 1 ne{
+							currentdict imageormask_sys
+						}{
+  	 						currentoverprint not{
+  			 					1 AGMCORE_&setgray
+  	 							knockout_image_samples
+  			 					currentdict imageormask_sys
+  			 				}{
+  			 					currentdict ignoreimagedata
+  			 				}ifelse
+				 		}ifelse
+					}{
+						imagemask
+					}ifelse
+				}{
+					BitsPerComponent ImageMatrix 
+					MultipleDataSources{
+						0 1 NComponents 1 sub{
+							DataSource exch get
+						}for
+					}{
+						/DataSource load
+					}ifelse
+					Operator /colorimage eq{
+						AGMCORE_host_sep{
+							MultipleDataSources level2 or NComponents 4 eq and{
+								MultipleDataSources{
+									4 {pop} repeat
+									/DataSource [
+										DataSource 0 get /exec cvx
+										DataSource 1 get /exec cvx
+										DataSource 2 get /exec cvx
+										DataSource 3 get /exec cvx
+										/AGMCORE_get_ink_data cvx
+									] cvx def
+								}{
+									/DataSource /DataSource load filter_cmyk 0 () /SubFileDecode filter def
+								}ifelse
+	
+								/Decode [ Decode 0 get Decode 1 get ] def
+								/MultipleDataSources false def
+								/NComponents 1 def
+								/Operator /image def
+								AGMCORE_is_cmyk_sep{
+									currentoverprint InksUsed current_ink not and{
+										currentdict consumeimagedata
+									}{
+										invert_image_samples
+						 				1 AGMCORE_&setgray
+										currentdict imageormask_sys
+									}ifelse
+								}{
+										currentdict ignoreimagedata
+								}ifelse
+							}{
+									
+								MultipleDataSources NComponents AGMIMG_&colorimage						
+							}ifelse
+						}{
+							true NComponents colorimage
+						}ifelse
+					}{
+						Operator /image eq{
+							AGMCORE_host_sep{
+								/DoImage true def
+								HostSepColorImage{
+									invert_image_samples
+								}{
+									AGMCORE_black_plate not{
+										/DoImage false def
+										currentdict ignoreimagedata
+					 				}if
+								}ifelse
+						 		1 AGMCORE_&setgray
+								DoImage
+									{currentdict imageormask_sys} if
+							}{
+								image
+							}ifelse
+						}{
+							Operator/knockout eq{
+								pop pop pop pop pop
+								currentoverprint InksUsed current_ink not and{
+								}{
+									currentcolorspace overprint_plate not{
+										knockout_unitsq
+									}if
+								}ifelse
+							}if
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+			cleartomark restore
+		}if
+	end
+}def
+/sep_imageormask
+{
+ 	/sep_colorspace_dict AGMCORE_gget begin
+	/MappedCSA CSA map_csa def
+	begin
+	SkipImageProc not{
+		save mark 
+	
+		AGMCORE_avoid_L2_sep_space{
+			/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
+		}if
+ 		AGMIMG_ccimage_exists 
+		MappedCSA 0 get /DeviceCMYK eq and
+		currentdict/Components known and 
+		Name () ne and 
+		Name (All) ne and 
+		Operator /image eq and
+		AGMCORE_producing_seps not and
+		level2 not and
+		{
+			Width Height BitsPerComponent ImageMatrix 
+			[
+			/DataSource load /exec cvx
+			{
+				0 1 2 index length 1 sub{
+					1 index exch
+					2 copy get 255 xor put
+				}for
+			} /exec cvx
+			] cvx bind
+			MappedCSA 0 get /DeviceCMYK eq{
+				Components aload pop
+			}{
+				0 0 0 Components aload pop 1 exch sub
+			}ifelse
+			Name findcmykcustomcolor
+			customcolorimage
+		}{
+			AGMCORE_producing_seps not{
+				level2{
+					AGMCORE_avoid_L2_sep_space not currentcolorspace 0 get /Separation ne and{
+						[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
+						/sep_tint AGMCORE_gget setcolor
+					}if
+					currentdict imageormask
+				}{ 
+					currentdict
+					Operator /imagemask eq{
+						imageormask
+					}{
+						sep_imageormask_lev1
+					}ifelse
+				}ifelse
+ 			}{
+				AGMCORE_host_sep{
+					Operator/knockout eq{
+						currentoverprint InksUsed current_ink not and{
+						}{
+							currentdict/ImageMatrix get concat
+							knockout_unitsq
+						}ifelse
+					}{
+						currentgray 1 ne{
+ 							AGMCORE_is_cmyk_sep Name (All) ne and{
+ 								level2{
+	 								[ /Separation Name [/DeviceGray]
+	 								{ 
+	 									sep_colorspace_proc AGMCORE_get_ink_data
+										1 exch sub
+	 								} bind
+									] AGMCORE_&setcolorspace
+									/sep_tint AGMCORE_gget AGMCORE_&setcolor
+ 									currentdict imageormask_sys
+	 							}{
+	 								currentdict
+									Operator /imagemask eq{
+										imageormask_sys
+									}{
+										sep_image_lev1_sep
+									}ifelse
+	 							}ifelse
+ 							}{
+ 								Operator/imagemask ne{
+									invert_image_samples
+ 								}if
+		 						currentdict imageormask_sys
+ 							}ifelse
+ 						}{
+							currentdict consumeimagedata 
+ 							currentoverprint not Name (All) eq or{
+								gsave 
+								knockout_unitsq
+								grestore
+		 					}if
+ 						}ifelse
+		 			}ifelse
+ 				}{
+					currentcolorspace 0 get /Separation ne{
+						[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
+						/sep_tint AGMCORE_gget setcolor
+					}if
+					currentoverprint 
+					MappedCSA 0 get /DeviceCMYK eq and 
+					Name inRip_spot_has_ink not and 
+					Name (All) ne and {
+						imageormask_l2_overprint
+					}{
+						currentdict imageormask
+ 					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+		cleartomark restore
+	}if
+	end
+	end
+}def
+/imageormask_l2_overprint
+{
+	
+	currentdict
+	currentcmykcolor add add add 0 eq{
+		currentdict consumeimagedata
+	}{
+		level3{ 			
+			
+			currentcmykcolor 
+			/AGMIMG_k xdf 
+			/AGMIMG_y xdf 
+			/AGMIMG_m xdf 
+			/AGMIMG_c xdf
+			Operator/imagemask eq{
+				[/DeviceN [
+				AGMIMG_c 0 ne {/Cyan} if
+				AGMIMG_m 0 ne {/Magenta} if
+				AGMIMG_y 0 ne {/Yellow} if
+				AGMIMG_k 0 ne {/Black} if
+				] /DeviceCMYK {}] setcolorspace
+				
+				AGMIMG_c 0 ne {AGMIMG_c} if
+				AGMIMG_m 0 ne {AGMIMG_m} if
+				AGMIMG_y 0 ne {AGMIMG_y} if
+				AGMIMG_k 0 ne {AGMIMG_k} if
+				setcolor			
+			}{	
+				/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
+				[/Indexed 				
+					[
+						/DeviceN [
+							AGMIMG_c 0 ne {/Cyan} if
+							AGMIMG_m 0 ne {/Magenta} if
+							AGMIMG_y 0 ne {/Yellow} if
+							AGMIMG_k 0 ne {/Black} if
+						] 
+						/DeviceCMYK {
+							AGMIMG_k 0 eq {0} if
+							AGMIMG_y 0 eq {0 exch} if
+							AGMIMG_m 0 eq {0 3 1 roll} if
+							AGMIMG_c 0 eq {0 4 1 roll} if						
+						}
+					]
+					255
+					{
+						255 div 
+		
+						mark exch
+						dup	dup dup
+		
+						
+						AGMIMG_k 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+							
+						AGMIMG_y 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+		
+						AGMIMG_m 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+							
+						AGMIMG_c 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+						counttomark 1 add -1 roll pop
+					}
+				] setcolorspace
+			}ifelse
+			
+			imageormask_sys
+		}{
+	write_image_file{
+		currentcmykcolor
+		0 ne{
+			[/Separation /Black /DeviceGray {}] setcolorspace
+			gsave
+			/Black
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 1 roll pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		}if
+		0 ne{
+			[/Separation /Yellow /DeviceGray {}] setcolorspace
+			gsave
+			/Yellow
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 2 roll pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		}if
+		0 ne{
+			[/Separation /Magenta /DeviceGray {}] setcolorspace
+			gsave
+			/Magenta
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 3 roll pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		}if
+		0 ne{
+			[/Separation /Cyan /DeviceGray {}] setcolorspace
+			gsave
+			/Cyan 
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		} if
+				close_image_file
+			}{
+				imageormask
+			}ifelse
+		}ifelse
+	}ifelse
+} def
+/indexed_imageormask
+{
+	begin
+		save mark 
+	
+ 		currentdict
+ 		AGMCORE_host_sep{
+ 			
+			Operator/knockout eq{
+				/indexed_colorspace_dict AGMCORE_gget /CSA get map_csa overprint_plate not{
+					knockout_unitsq
+				}if
+			}{
+	 			AGMCORE_is_cmyk_sep{
+					Operator /imagemask eq{
+						imageormask_sys
+					}{
+						level2{
+							indexed_image_lev2_sep
+						}{
+							indexed_image_lev1_sep
+						}ifelse
+					}ifelse
+				}{
+					currentoverprint not{
+						knockout_image_samples
+		 				imageormask_sys
+		 			}{
+		 				currentdict consumeimagedata
+		 			}ifelse
+				}ifelse
+			}ifelse
+ 		}{
+			level2{
+				imageormask
+			}{ 
+				Operator /imagemask eq{
+					imageormask
+				}{
+					indexed_imageormask_lev1
+				}ifelse
+			}ifelse
+ 		}ifelse
+		cleartomark restore
+	end
+}def
+/indexed_image_lev2_sep
+{
+	/indexed_colorspace_dict AGMCORE_gget begin
+	begin
+		
+		currentcolorspace 
+		dup 1 /DeviceGray put
+		dup 3 [
+			currentcolorspace 3 get 
+			{
+				exch 4 mul 4 getinterval {} forall
+				AGMCORE_get_ink_data 255 div 1 exch sub
+			} /exec cvx
+		] cvx put
+		setcolorspace
+		
+		currentdict 
+		Operator /imagemask eq{
+			AGMIMG_&imagemask
+		}{
+			AGMIMG_&image
+		}ifelse
+			
+	end end
+}def
+/OPIimage
+{
+	dup type /dicttype ne{
+		10 dict begin
+			/DataSource xdf
+			/ImageMatrix xdf
+			/BitsPerComponent xdf
+			/Height xdf
+			/Width xdf
+			/ImageType 1 def
+			/Decode [0 1 def]
+			currentdict
+		end
+	}if
+	dup begin
+		/NComponents 1 cdndf
+		/MultipleDataSources false cdndf
+		/SkipImageProc {false} cdndf
+		/HostSepColorImage false cdndf
+		/Decode [
+				0 
+				currentcolorspace 0 get /Indexed eq{
+					2 BitsPerComponent exp 1 sub
+				}{
+					1
+				}ifelse
+		] cdndf
+		/Operator /image cdndf
+	end
+	/sep_colorspace_dict AGMCORE_gget null eq{
+		imageormask
+	}{
+		gsave
+		dup begin invert_image_samples end
+		sep_imageormask
+		grestore
+	}ifelse
+}def
+/spot_alias
+{
+	/mapto_sep_imageormask 
+	{
+		dup type /dicttype ne{
+			12 dict begin
+				/ImageType 1 def
+				/DataSource xdf
+				/ImageMatrix xdf
+				/BitsPerComponent xdf
+				/Height xdf
+				/Width xdf
+				/MultipleDataSources false def
+		}{
+			begin
+		}ifelse
+				/Decode [/customcolor_tint AGMCORE_gget 0] def
+				/Operator /image def
+				/HostSepColorImage false def
+				/InksUsed [] def
+				/SkipImageProc {false} def
+				currentdict 
+			end
+		sep_imageormask
+	}bdf
+	/customcolorimage
+	{
+		Adobe_AGM_Image/AGMIMG_colorAry xddf
+		/customcolor_tint AGMCORE_gget
+		bdict
+			/Name AGMIMG_colorAry 4 get
+			/CSA [ /DeviceCMYK ] 
+			/TintMethod /Subtractive
+			/TintProc null
+			/MappedCSA null
+			/NComponents 4 
+			/Components [ AGMIMG_colorAry aload pop pop ] 
+		edict
+		setsepcolorspace
+		mapto_sep_imageormask
+	}ndf
+	Adobe_AGM_Image/AGMIMG_&customcolorimage /customcolorimage load put
+	/customcolorimage
+	{
+		Adobe_AGM_Image/AGMIMG_override false put
+		dup 4 get map_alias{
+			/customcolor_tint AGMCORE_gget exch setsepcolorspace
+			pop
+			mapto_sep_imageormask
+		}{
+			AGMIMG_&customcolorimage
+		}ifelse			
+	}bdf
+}def
+level2 not{
+	/colorbuf
+	{
+		0 1 2 index length 1 sub{
+			dup 2 index exch get 
+			255 exch sub 
+			2 index 
+			3 1 roll 
+			put
+		}for
+	}def
+	/tint_image_to_color
+	{
+		begin
+			Width Height BitsPerComponent ImageMatrix 
+			/DataSource load
+		end
+		Adobe_AGM_Image begin
+			/AGMIMG_mbuf 0 string def
+			/AGMIMG_ybuf 0 string def
+			/AGMIMG_kbuf 0 string def
+			{
+				colorbuf dup length AGMIMG_mbuf length ne
+					{
+					dup length dup dup
+					/AGMIMG_mbuf exch string def
+					/AGMIMG_ybuf exch string def
+					/AGMIMG_kbuf exch string def
+					} if
+				dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
+			}
+			addprocs
+			{AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf} true 4 colorimage	
+		end
+	} def			
+	/sep_imageormask_lev1
+	{
+		begin
+			MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
+				
+				{
+					255 mul round cvi GrayLookup exch get
+				} currenttransfer addprocs settransfer
+				currentdict imageormask
+			}{
+				/sep_colorspace_dict AGMCORE_gget/Components known{
+					MappedCSA 0 get /DeviceCMYK eq{
+						Components aload pop
+					}{
+						0 0 0 Components aload pop 1 exch sub
+					}ifelse
+					
+					Adobe_AGM_Image/AGMIMG_k xddf 
+					Adobe_AGM_Image/AGMIMG_y xddf 
+					Adobe_AGM_Image/AGMIMG_m xddf 
+					Adobe_AGM_Image/AGMIMG_c xddf 
+						
+					AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
+						{AGMIMG_k mul 1 exch sub} currenttransfer addprocs settransfer
+						currentdict imageormask
+					}{ 
+						
+						currentcolortransfer
+						{AGMIMG_k mul 1 exch sub} exch addprocs 4 1 roll
+						{AGMIMG_y mul 1 exch sub} exch addprocs 4 1 roll
+						{AGMIMG_m mul 1 exch sub} exch addprocs 4 1 roll
+						{AGMIMG_c mul 1 exch sub} exch addprocs 4 1 roll
+						setcolortransfer
+						currentdict tint_image_to_color
+					}ifelse
+				}{
+					
+					MappedCSA 0 get /DeviceGray eq {
+						{255 mul round cvi ColorLookup exch get 0 get} currenttransfer addprocs settransfer
+						currentdict imageormask
+					}{
+						MappedCSA 0 get /DeviceCMYK eq {
+							currentcolortransfer
+							{255 mul round cvi ColorLookup exch get 3 get 1 exch sub} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 2 get 1 exch sub} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 1 get 1 exch sub} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 0 get 1 exch sub} exch addprocs 4 1 roll
+							setcolortransfer 
+							currentdict tint_image_to_color
+						}{ 
+							currentcolortransfer
+							{pop 1} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 2 get} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 1 get} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 0 get} exch addprocs 4 1 roll
+							setcolortransfer 
+							currentdict tint_image_to_color
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+		end
+	}def
+	/sep_image_lev1_sep
+	{
+		begin
+			/sep_colorspace_dict AGMCORE_gget/Components known{
+				Components aload pop
+				
+				Adobe_AGM_Image/AGMIMG_k xddf 
+				Adobe_AGM_Image/AGMIMG_y xddf 
+				Adobe_AGM_Image/AGMIMG_m xddf 
+				Adobe_AGM_Image/AGMIMG_c xddf 
+					
+				{AGMIMG_c mul 1 exch sub}
+				{AGMIMG_m mul 1 exch sub}
+				{AGMIMG_y mul 1 exch sub}
+				{AGMIMG_k mul 1 exch sub}
+			}{ 
+				{255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
+				{255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
+				{255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
+				{255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
+			}ifelse
+			
+			AGMCORE_get_ink_data currenttransfer addprocs settransfer
+			
+			currentdict imageormask_sys
+				
+		end
+	}def
+	/indexed_imageormask_lev1
+	{
+		/indexed_colorspace_dict AGMCORE_gget begin
+		begin
+			currentdict
+			MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
+				
+				{HiVal mul round cvi GrayLookup exch get HiVal div} currenttransfer addprocs settransfer
+				imageormask
+			}{
+				
+				MappedCSA 0 get /DeviceGray eq {
+					{HiVal mul round cvi Lookup exch get HiVal div} currenttransfer addprocs settransfer
+					imageormask
+				}{
+					MappedCSA 0 get /DeviceCMYK eq {
+						currentcolortransfer
+						{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						{4 mul HiVal mul round cvi       Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						setcolortransfer 
+						tint_image_to_color
+					}{ 
+						currentcolortransfer
+						{pop 1} exch addprocs 4 1 roll
+						{3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div} exch addprocs 4 1 roll
+						{3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div} exch addprocs 4 1 roll
+						{3 mul HiVal mul round cvi 	   Lookup exch get HiVal div} exch addprocs 4 1 roll
+						setcolortransfer 
+						tint_image_to_color
+					}ifelse
+				}ifelse
+			}ifelse
+		end end
+	}def
+	/indexed_image_lev1_sep
+	{
+		/indexed_colorspace_dict AGMCORE_gget begin
+		begin
+			{4 mul HiVal mul round cvi       Lookup exch get HiVal div 1 exch sub}
+			{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
+			{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
+			{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
+			
+			AGMCORE_get_ink_data currenttransfer addprocs settransfer
+			
+			currentdict imageormask_sys
+				
+		end end
+	}def
+}if
+end
+systemdict /setpacking known
+{
+	setpacking
+} if
+%%EndResource
+%ADOBeginClientInjection: DocumentProlog End "AI10"
+%ADOEndClientInjection: DocumentProlog End "AI10"
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndProlog
+%%BeginSetup
+%ADOBeginClientInjection: DocumentSetup Start "AI10"
+%ADOEndClientInjection: DocumentSetup Start "AI10"
+Adobe_AGM_Utils begin
+2 2010 true Adobe_AGM_Core/doc_setup get exec
+Adobe_CoolType_Core/doc_setup get exec
+Adobe_AGM_Image/doc_setup get exec
+%ADOBeginClientInjection: DocumentSetup End "AI10"
+%ADOEndClientInjection: DocumentSetup End "AI10"
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndSetup
+%%Page: rnaseP-bsu-alignment.pdf 1
+%%EndPageComments
+%%BeginPageSetup
+%ADOBeginClientInjection: PageSetup Start "AI10"
+%ADOEndClientInjection: PageSetup Start "AI10"
+Adobe_AGM_Utils begin
+Adobe_AGM_Core/page_setup get exec
+Adobe_CoolType_Core/page_setup get exec
+Adobe_AGM_Image/page_setup get exec
+%ADOBeginClientInjection: PageSetup End "AI10"
+%ADOEndClientInjection: PageSetup End "AI10"
+%%EndPageSetup
+Adobe_AGM_Core/AGMCORE_save save ddf
+1 -1 scale 0 -354.935 translate
+[1 0 0 1 0 0 ]  concat
+mark
+/0 
+[/DeviceGray] add_csa
+/CSA /0 
+/1 
+[/DeviceCMYK] add_csa
+/CSA /1 
+/2 
+[/DeviceRGB] add_csa
+/CSA /2 
+cleartomark
+72 path_rez
+% page clip
+gsave
+newpath
+gsave % PSGState
+0 0 mo
+0 354.935 li
+381.998 354.935 li
+381.998 0 li
+clp
+[1 0 0 1 0 0 ] concat
+%ADOBeginClientInjection: BeginPageContent "AI10"
+%ADOEndClientInjection: BeginPageContent "AI10"
+gsave % PSGState
+0 0 mo
+382 0 li
+382 355 li
+0 355 li
+0 0 li
+clp
+false sop
+0 0 0 rgb
+%ADOBeginSubsetFont: Times-Roman Initial
+11 dict begin
+/FontName /Times-Roman def
+/FontMatrix [1 1000 div 0 0 1 1000 div 0 0 ] def
+/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
+/PaintType 0 def
+/FontType 1 def
+/FontBBox { 0 0 0 0 } def
+/FontInfo 1 dict dup begin
+  /OrigFontType /TrueType def
+end readonly def
+currentdict
+end
+
+systemdict begin
+dup /Private 7 dict dup begin
+/BlueValues [-15 0 600 650] def
+/MinFeature {16 16} def
+/password 5839 def
+/ND {def} def
+/NP {put} def
+/RD {string currentfile exch readhexstring pop} def
+2 index /CharStrings 230 dict dup begin
+/.notdef 
+<10bf317079bb21e4> ND 
+/space 
+<10bf317079c757bf91> ND 
+/one 
+<10bf317005ace4116f46739a291c133ef5c0ce2c8299d65de3756bb6940c
+b4355dc475faba14c0bd0d8c1136c951297252e0da77fbc30bfee79150d7
+5cee48> ND 
+/six 
+<10bf31704faaa95022859bfa4d40a634d16b5c6e27e8179786696c20efcf
+f2088b8d3116daaeb3f47f771c5b59cc0afd89139a7c37c605cf8b53dc27
+380249aa5ea705e51497228cbe7f92dfdb05cb2c745bfad479a4a6102917
+98805f1e4ffd1913dac316084a3ad05d6714a918c36f9d6d45844ed149be
+369d7108e7fb694a36f8c56232e1bee9c1bea2fe67ff99030d5c6f5a581f
+b878427e68d526f4869e604a9c89abace85b55824dfe246365ef13eb1536
+bf4a0f83> ND 
+/eight 
+<10bf31704ab2181850c1a88d3f8fa202c5e0a8894b70ce17f00448b7f184
+829e93577c1d58c14cc019460ebe7600631f8f4acc93b4dd884803c9e3f1
+eb26f7c2cd1094133dc32c948b33940b19fa747b701ca51c9ee927a38f52
+04f2614165cbc422ca4714c03eef07c163ee39fa7bbff5cde214fd39a16b
+09cf85564b587c881bfef98a02ad1cc0a265a943373623af31c74485a733
+18d0f6f7f1d5ed232a51a44983dace620c95820f016744af813aa536566c
+47af1e2278efd37fbb5379807dfaa2e69d27f2b4a59d46b7d8d8efdb20e9
+60c77ba7077adbe4d33c0181893b161aacd6499116f6cdc8c2ee52d69d4b
+91aef33a637784e5f5c64baf9cca7942dfc3> ND 
+/A 
+<10bf31706d7ae346bffe29e0fb34e18312ccbb6302af22689ec4f2127a0d
+d6baf4773826f8362914832b0b84ca343a443e2c16a9118637ad6f1a2e1f
+aa1ebb04f7f1ef2a790258bcc86d11f5b7f6caa72bc1d0e46a538a95ab48
+ad3395878de6486f82> ND 
+/N 
+<10bf3170586d3968505ff87264be7ec883920688cca7d9d7ebef6b14adb4
+12cf47613ab238b5314909eaae4b807ef31a587fe4a79c426c98f895ee29
+85238abac441a7e05459a2603f6d28e75fb6badfa6e81418c0a638> ND 
+/P 
+<10bf3170599a82ae9dc9593cad300b7f3884414bb0569fe483f3acb617a1
+5ef395ef32cf0d220dc8440aff02a21bdf7646dba480081013ff057e6243
+9a50cbea5f9cb9a46c125151fa2dc458d75a798f192be2eb1f436a0d9567
+1d70b037f2931437b8312c06f4962bec94fe952154308850b7049bbc3ac6
+9301> ND 
+/R 
+<10bf3170422e6230a952872b5ad1dc4f16e3fc1704a02c61c5e992942e1e
+814f5a036cc714a19b83d8f9ec92957b9cc9c81e547da8ae77f074c9bd10
+73009734e431fccfd615ceda2428e8dccd0571a77f416f593adb1cae7381
+f103392cf96199bef077b31adee38fb7ba883b119f4671e1c9bf208bfda7
+5a094838b33f6ae85649043746a99b52c2cd46025fa2b9d4b4471e> ND 
+/a 
+<10bf3170599a125eccdb6ec27d3afe07da389ecbb305faf429012f717ba5
+d7a504001b7d2cf7722bd949e4b4b2e77bccdf0b2b1586d9915715766da7
+59741fe65bc64d6863ec1039a27d8da5681073bc991e2c740d0bf14aed2b
+81d80e811057a7a261d77619d9bcb0c3ef91c90a394016d3a96727d1d488
+dda1e7b4d3ff0a77767d899306fd13aca7aad2910e6e3aad69f172e3d8e3
+85dff5319dcca32104c930e0a4e2e49b8750bab4a9149ef2d730bda10f91
+592a2a46cc0c629469d818798f634569b83f99cf> ND 
+/b 
+<10bf31705374882f7387637dcbb704d72f8bd63b0bf65f4612fe0f27d529
+60722d7a45438cfde1168810ce04c91811250545cdbd6c10a87a474df160
+24b3215bec7af3c0b61e074082f1ba3141f39f480c2c5a76fd396a487a9d
+6a25d6aa36deda9c976e791661015e179d4f36b29dae4f0f04128d0e5ac3
+dde66d561d7806d481796866491fb9de890bfe> ND 
+/c 
+<10bf3170435d9d6bdc818a55004ae1aad80b146ef4640b9f7a82d0286ef2
+5db6c5bd65a97018eac616ec8d7499054c6ff6544566113eb456a3efeddc
+ccc8eb022ae4ed32a1cae1639526dcd4d63a5e0b6438bcaa9089a840ecbe
+5f5d623e9d44cd8703af9d371c430fcdb02e500bdbbffe37e3e86fac9735
+d4759aa66b0f12007edc114a586e0532e684a856c1> ND 
+/e 
+<10bf31705d647142da77f80383b39a2be6c45bc647b72e319ff73d610d1e
+62332d342ae09e16e6dc01192625d1af66f730c2b02413523b998639a5ab
+b7a878766d5d5ccb302e4a2339fd457ff9223aaf50bbf100079c44acb716
+0f80282571552fa2e287b218275ab71b88c3093968065977f1def2e827fa
+b94e763732c48dfc9ec49ad18a7a0f2ba5d9d70264> ND 
+/i 
+<10bf31705fce6507854bfd5453e743735818d40d67ec1532d846ec6eb57b
+a379fb65a427f99b32d98a51f57658ac9b227989b26d151d43cea1c989bf
+f139f48a1383fdef993f3563bc63dd976a127ddf8d3d4d> ND 
+/l 
+<10bf31705863e503408ecf9ecbcc5d318bb6318525c5b52ab08ec840ccd6
+ad0d498b316284b1f457be2054e4989ef3a09e1de6c846> ND 
+/n 
+<10bf3170573e563cfd092bc7aac9e949b8f7a4827fe0f5ce67cfeb547cc4
+0324c0c45558a88f1ea6ca3d00c7850dbdd4b3c992012bc75b427cf6ac8c
+46f4b1290c6a0924e21bd8fe2684be248ea4bd907856e7ca65331eac2fb6
+c7d64a4c51041fcdcbf442862c40d772e99c9a3d2660da8f8d1225eb9a38
+a0939af5d1> ND 
+/o 
+<10bf3170422f93576c717ee99d6736f12ef20213595672a3889f39fd79b8
+f8e03db4067972748506dd3e394e1ed21612adf9955de5d344645439263d
+16fe05d9f8432033df436bdbe971bdd0b4ca20ec935003ac05958f3374d5
+be4f84a5e6c035be86b4155b925e09a04220f0eb68246a69ca538a270f95
+b47c12aaed3b0426c82ce7bd8f92> ND 
+/s 
+<10bf317050d9b80120c19d821533341643354852ea9df97a99fd4ba774b7
+08c1fae708745f9328a1a9a5d21e169ff77ecdcd42f945703d067165d10e
+35df5f72d35341f01fb3026c906bf5dc9a4d1bcd00cb4fd389804aaed0c5
+179606cadf715c7fa2d902f17112979a83434b773005e3a14720c0ac9ccf
+50f62928be58f2d774787655c3e51c4ad2772c2dacd3e4a9b3e3d07c0e79
+b3bf6755ddd2a9f85c3008b885abd5da2aea4dd26daf39a061> ND 
+/u 
+<10bf31705374882f7c934ecd3b5e82940591cc2da5136b726bd97deea59d
+b5951369571544034f93f6e9e9bef396feae60a5b9c3456da1182921d60f
+51a03c79c508334f1146b564507198b89948780cf4b60418521ed73bbe7d
+3e228dcb5a9c016f8058dab9750074512ee3321a1b934119d8b6bef7f816
+c990fbfb206a15a63a5b88> ND 
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+end
+/Times-Roman findfont /Encoding get
+dup 32 /space put
+dup 49 /one put
+dup 54 /six put
+dup 56 /eight put
+dup 65 /A put
+dup 78 /N put
+dup 80 /P put
+dup 82 /R put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 101 /e put
+dup 105 /i put
+dup 108 /l put
+dup 110 /n put
+dup 111 /o put
+dup 115 /s put
+dup 117 /u put
+pop
+%ADOEndSubsetFont
+/Times-Roman*1 
+[
+32{/.notdef}repeat /space 16{/.notdef}repeat /one 4{/.notdef}repeat /six /.notdef /eight 
+8{/.notdef}repeat /A 12{/.notdef}repeat /N /.notdef /P /.notdef /R 
+14{/.notdef}repeat /a /b /c /.notdef /e 3{/.notdef}repeat /i 
+2{/.notdef}repeat /l /.notdef /n /o 3{/.notdef}repeat /s /.notdef 
+/u 138{/.notdef}repeat
+] /Times-Roman nfnt
+/Times-Roman*1 findfont [11.2 0 0 -11.2 0 0 ]mfnt sfnt
+9.6001 249.84 mov
+(Ribonuclease P RNA) sh
+%ADOBeginSubsetFont: Times-Italic Initial
+11 dict begin
+/FontName /Times-Italic def
+/FontMatrix [1 1000 div 0 0 1 1000 div 0 0 ] def
+/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
+/PaintType 0 def
+/FontType 1 def
+/FontBBox { 0 0 0 0 } def
+/FontInfo 1 dict dup begin
+  /OrigFontType /TrueType def
+end readonly def
+currentdict
+end
+
+systemdict begin
+dup /Private 7 dict dup begin
+/BlueValues [-15 0 600 650] def
+/MinFeature {16 16} def
+/password 5839 def
+/ND {def} def
+/NP {put} def
+/RD {string currentfile exch readhexstring pop} def
+2 index /CharStrings 230 dict dup begin
+/.notdef 
+<10bf317079bb21e4> ND 
+/space 
+<10bf317079c757bf91> ND 
+/B 
+<10bf31705d64d6cdd42bb9779be0e86f5463c50d39de4503a32a38432ef8
+03a82a198b57beba7d0e2cf1d169145c2fca29b941cd17eafb5127041a74
+4a42576c7ff804f144d8bac08830b984ff926f24c5ddc9d00af1f894ec60
+3a2f23b643e29ac1f79dcce3af9e0ba10b5f5ff9b631da0c21a11f0df8a9
+4a828ab5b3643d53851b0ff3fa42263b6174cf356840266da421770fb34e
+5a8782a1be3b9bd73e011ad0d21ddfd98f7bdba645cbc23007be2f42f4ec
+cd3eceec9d8357ad5017a49b620b8c4e3fa80f69ef> ND 
+/a 
+<10bf317040c2e74a508d6139dce14e3948d239d0634bbfaabf9e8d3c7573
+ed6fbf5dbea53ff369f531ee4a35d5d774411d751e898d06a82fb104c24e
+2e288c130578a51898d70e768e70e25015126de9836190adddf115525009
+d0b5cf5799cade59015ed746a61eea4e41b65101d4ece488aeb0eae27176
+fd995d93360fcb186f66fe5f540946011237ad8713367061b7184db6a67a
+996b98e53ecb5c8feb0582a80d88d56027b3ffcc55dfb4dc1ac3446fc8ff
+d6878cc714f800a67c3909395a6179cde4244303983fcb7be7e1a5e7> ND 
+/b 
+<10bf317050d929b04597d2887aaa3cb39da082bdf3ea60f85b72994c4851
+f08f3ee5204ae05f7d492a066ff24f84ba90afa1a601eeee0fe55a909ade
+2457ed9ad90a8f8cd020799924efeb4529d822d4bddca197310d22f8a6ff
+e732ca9da8e33fee470039f98bbf7aec1427462ba404fd435cadc484857c
+2cfd58ba2803a7f732e93dff70aa0b49357be72109830dc30de601> ND 
+/c 
+<10bf317040c23fc2eee4f57240df62f1391a1250ca71eb42052c6832a234
+04baa9e4ef1dec279a752431a80f654f5e0351e445249e6beb05a973cc41
+d8ead12d95f7556c161073e2684409ef6f29244cba09a6bb43b3bcffdfba
+d18d8daa29a3daa3e72edebd8ca6c6c1ffadc0e7cfd675d1eb71cae83aa4
+bb0d1ad30e10be4b78f720e6585f94cee8adb3f7cfca78> ND 
+/i 
+<10bf31705c397059959e269bc482cc232fb2cd355b1741c991d08977a1c7
+62a5e2889a63c2e040e22ffbaf41c04400cc31c3de7dcf350f3cdfb3edfa
+828dc964cb2f6eb442e0262df25f627edd720f9619db59fd5a8cd100c968
+4c5f4db9889b35c63fc8c08e> ND 
+/l 
+<10bf3170599590e4eca19c589f591b28c79c3ad915d374f9f929618cfd7b
+7292a0b167075ca805f5ad895e8e3b1ab4dbdd185639273e5baedc164de3
+0d0ee9bfd604> ND 
+/s 
+<10bf317050d9b8012f166408318a0ef0c2b3fc2c4bf046f43a31a13138cb
+3edd33b1e05a71393e8603bde246c06cf021e377498e36cd112cac2862cb
+d733c3012351e466a2c60874be76f3ffb0e88de0326be4951815ceb6e2b4
+a1c764b8b4750919db41ba568a843704ee79cbe791dd797a967fc4bf780b
+33396195d9608a7596aadb157b1c31c1f97e4cad9c00804f33d10c4f9e5f
+1e6e986043994c17686677d39f7196085e4700caad44794150> ND 
+/t 
+<10bf3170524a2d224620d65b924216aad176698198f7dbdeefeee3b7e580
+1e8252c00721d9a34af4c93982914cf535dd1a9978155b129f9b67696bf0
+657d3fef2c6bfe965ee59c94b9f93fb72b6a44> ND 
+/u 
+<10bf31705374882f7cad45500b0e5fc1923f9474edf8ae7c2afa92f5965f
+0bcd11cd39523ee039e5e47c732c2518eda5c63dbd537ee19396aa26dd3c
+9ca855b0af8601c8b03b7e99bc36c7e0756956abf922576b217fe237e605
+762d82cb64db160c556120838a3052e5b985f50e155c87442e0844e52fd7
+d391d6a97d97f2cb7c5822b12cf29083fbc643424ffc38d228> ND 
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+end
+/Times-Italic findfont /Encoding get
+dup 32 /space put
+dup 66 /B put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 105 /i put
+dup 108 /l put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+pop
+%ADOEndSubsetFont
+/Times-Italic*1 
+[
+32{/.notdef}repeat /space 33{/.notdef}repeat /B 30{/.notdef}repeat /a /b /c 
+5{/.notdef}repeat /i 2{/.notdef}repeat /l 6{/.notdef}repeat /s /t /u 
+138{/.notdef}repeat
+] /Times-Italic nfnt
+/Times-Italic*1 findfont [11.2 0 0 -11.2 0 0 ]mfnt sfnt
+9.6001 261.041 mov
+(Bacillus subtilis) sh
+/Times-Roman*1 findfont [11.2 0 0 -11.2 0 0 ]mfnt sfnt
+81.4819 261.041 mov
+( 168) sh
+.980392 .0509804 .0431373 rgb
+%ADOBeginSubsetFont: Helvetica Initial
+11 dict begin
+/FontName /Helvetica def
+/FontMatrix [1 1000 div 0 0 1 1000 div 0 0 ] def
+/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
+/PaintType 0 def
+/FontType 1 def
+/FontBBox { 0 0 0 0 } def
+/FontInfo 1 dict dup begin
+  /OrigFontType /TrueType def
+end readonly def
+currentdict
+end
+
+systemdict begin
+dup /Private 7 dict dup begin
+/BlueValues [-15 0 600 650] def
+/MinFeature {16 16} def
+/password 5839 def
+/ND {def} def
+/NP {put} def
+/RD {string currentfile exch readhexstring pop} def
+2 index /CharStrings 230 dict dup begin
+/.notdef 
+<10bf317079bb21e4> ND 
+/A 
+<10bf31706c4d8e6db23e4e7dd1042123534442eb7f8cee32689ada63ee09
+58823f2b2bd80b8cb54f7e8af1e8d4f10b0e131d22e003ae536d56abc669
+c65da4f461c503d44126b09469> ND 
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+end
+/Helvetica findfont /Encoding get
+dup 65 /A put
+pop
+%ADOEndSubsetFont
+/Helvetica*1 
+[
+65{/.notdef}repeat /A 190{/.notdef}repeat
+] /Helvetica nfnt
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+184.851 217.841 mov
+(A) sh
+300.651 200.04 mo
+307.051 200.04 li
+307.051 191.24 li
+300.651 191.24 li
+300.651 200.04 li
+1 1 1 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+301.451 197.64 mov
+(A) sh
+.5 lw
+0 lc
+0 lj
+10 ml
+[] 0 dsh
+true sadj
+222.201 185.64 mo
+258.001 223.24 li
+258.001 344.641 li
+0 0 0 rgb
+s
+0 0 0 rgb
+%ADOBeginSubsetFont: Helvetica AddGlyphs
+
+systemdict begin
+/Helvetica 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/G 
+<10bf317035a2615cb512b1acd8c36b3946ad235417226e7c6feda1fdef74
+15451c61806a71e65b7a339d50f1974c1bc4c34c3f930da0a6e9e3c37b22
+0a6e14e87efbddbec74bbcb62a658f0ec4a2c98ab177326480af33b18698
+75870b1cf019> ND 
+/U 
+<10bf31701b9d2e0e75dc1c6f9b5aea75bc3cfacfd128a955802855ea36c9
+10f8a868d77a647ceb09c04b8925af88dc46f95d195f8683dbe20f41ec> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Helvetica findfont /Encoding get
+dup 71 /G put
+dup 85 /U put
+pop
+%ADOEndSubsetFont
+/Helvetica*1 
+[
+65{/.notdef}repeat /A 5{/.notdef}repeat /G 13{/.notdef}repeat /U 170{/.notdef}repeat
+] /Helvetica nfnt
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+121.65 322.44 mov
+(G) sh
+130.449 322.44 mov
+2.80081 0 (UU) ash
+.980392 .0509804 .0431373 rgb
+%ADOBeginSubsetFont: Helvetica AddGlyphs
+
+systemdict begin
+/Helvetica 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/C 
+<10bf317030aa083cc281922089bc4994328331af6a654615083cfa8a590d
+c2a9c54536c70731aa752343a37dd604c4c28cec579aa316cc528b15cac7
+afb36b45f7a20bc9d34701f1c9f2574363d062989f34915e0d1f708b6ecd
+63a000a0329329f07c> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Helvetica findfont /Encoding get
+dup 67 /C put
+pop
+%ADOEndSubsetFont
+/Helvetica*1 
+[
+65{/.notdef}repeat /A /.notdef /C 3{/.notdef}repeat /G 13{/.notdef}repeat /U 
+170{/.notdef}repeat
+] /Helvetica nfnt
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+146.447 322.44 mov
+(C) sh
+154.454 322.642 mov
+(U) sh
+158.385 326.625 mo
+158.385 327.508 157.668 328.225 156.785 328.225 cv
+155.901 328.225 155.185 327.508 155.185 326.625 cv
+155.185 325.741 155.901 325.024 156.785 325.024 cv
+157.668 325.024 158.385 325.741 158.385 326.625 cv
+0 0 0 rgb
+ef
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+161.65 322.641 mov
+(U) sh
+164.401 324.44 mo
+164.401 329.641 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+168.851 322.641 mov
+(A) sh
+171.601 324.44 mo
+171.601 329.641 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+176.05 322.641 mov
+(A) sh
+178.801 324.44 mo
+178.801 329.641 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+183.25 322.641 mov
+(C) sh
+186.001 324.44 mo
+186.001 329.641 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+189.65 322.641 mov
+(G) sh
+193.201 324.44 mo
+193.201 329.641 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+197.65 322.641 mov
+(U) sh
+200.401 324.44 mo
+200.401 329.641 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+204.851 322.641 mov
+(U) sh
+207.601 324.44 mo
+207.601 329.641 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+212.05 322.641 mov
+(C) sh
+214.801 324.44 mo
+214.801 329.641 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+220.851 322.641 mov
+(G) sh
+224.401 324.44 mo
+224.401 329.641 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+228.851 322.641 mov
+(G) sh
+237.001 319.84 mo
+241.401 319.84 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+228.851 315.44 mov
+(G) sh
+237.001 312.641 mo
+241.401 312.641 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+229.65 308.24 mov
+(U) sh
+240.801 305.024 mo
+240.801 305.908 240.084 306.625 239.201 306.625 cv
+238.318 306.625 237.601 305.908 237.601 305.024 cv
+237.601 304.141 238.318 303.424 239.201 303.424 cv
+240.084 303.424 240.801 304.141 240.801 305.024 cv
+0 0 0 rgb
+ef
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+229.65 301.041 mov
+(A) sh
+237.001 298.24 mo
+241.401 298.24 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+229.65 293.84 mov
+(A) sh
+237.001 291.041 mo
+241.401 291.041 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+229.65 286.641 mov
+(U) sh
+237.001 283.84 mo
+241.401 283.84 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+229.65 279.44 mov
+(C) sh
+221.651 275.437 mov
+(G) sh
+212.853 269.835 mov
+(C) sh
+215.801 257.84 mo
+215.801 262.24 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+205.651 269.84 mov
+(U) sh
+208.601 257.84 mo
+208.601 262.24 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+197.65 269.84 mov
+(G) sh
+202.401 259.424 mo
+202.401 260.308 201.684 261.024 200.801 261.024 cv
+199.917 261.024 199.201 260.308 199.201 259.424 cv
+199.201 258.541 199.917 257.824 200.801 257.824 cv
+201.684 257.824 202.401 258.541 202.401 259.424 cv
+0 0 0 rgb
+ef
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+191.25 269.84 mov
+(C) sh
+194.201 257.84 mo
+194.201 262.24 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+184.05 269.84 mov
+(A) sh
+187.001 257.84 mo
+187.001 262.24 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+176.05 269.84 mov
+(G) sh
+179.801 257.84 mo
+179.801 262.24 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+169.65 269.84 mov
+(A) sh
+172.601 257.84 mo
+172.601 262.24 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+162.45 269.84 mov
+(U) sh
+165.401 257.84 mo
+165.401 262.24 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+155.25 273.041 mov
+(C) sh
+148.05 269.844 mov
+(U) sh
+144.854 262.644 mov
+(U) sh
+147.251 255.443 mov
+(G) sh
+155.25 252.247 mov
+(A) sh
+163.25 255.443 mov
+(A) sh
+170.449 255.443 mov
+2.0016 0 (UCU) ash
+191.25 255.443 mov
+(G) sh
+199.249 255.443 mov
+2.0016 0 (UA) ash
+212.85 255.443 mov
+(G) sh
+213.65 247.444 mov
+(A) sh
+213.247 239.445 mov
+(G) sh
+213.247 231.446 mov
+(G) sh
+213.65 223.447 mov
+(A) sh
+212.601 217.84 mo
+219.001 217.84 li
+219.001 209.04 li
+212.601 209.04 li
+212.601 217.84 li
+1 1 1 rgb
+ef
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+213.451 215.44 mov
+(A) sh
+213.652 207.441 mov
+(A) sh
+213.249 199.442 mov
+(G) sh
+207.251 194.64 mov
+(U) sh
+213.652 189.837 mov
+(C) sh
+213.652 181.838 mov
+(C) sh
+213.652 173.839 mov
+(A) sh
+213.652 165.839 mov
+(U) sh
+213.451 157.84 mov
+(G) sh
+213.652 149.841 mov
+(C) sh
+216.401 137.24 mo
+216.401 142.44 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+206.451 149.84 mov
+(U) sh
+209.201 137.24 mo
+209.201 142.44 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+199.25 149.84 mov
+(C) sh
+202.001 137.24 mo
+202.001 142.44 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+191.25 149.84 mov
+(G) sh
+194.801 137.24 mo
+194.801 142.44 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+184.851 149.84 mov
+(C) sh
+187.601 137.24 mo
+187.601 142.44 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+188.05 159.44 mov
+(A) sh
+181.801 156.64 mo
+186.201 156.64 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+188.05 166.64 mov
+(C) sh
+181.801 163.84 mo
+186.201 163.84 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+187.25 173.84 mov
+(G) sh
+181.801 171.04 mo
+186.201 171.04 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+187.25 181.04 mov
+(G) sh
+181.801 178.24 mo
+186.201 178.24 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+195.25 185.84 mov
+(U) sh
+187.251 190.642 mov
+(G) sh
+181.801 187.84 mo
+186.201 187.84 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+188.05 197.84 mov
+(C) sh
+181.801 195.04 mo
+186.201 195.04 li
+0 0 0 rgb
+s
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+192.851 204.24 mov
+(U) sh
+190.453 212.239 mov
+(G) sh
+176.053 217.841 mov
+(G) sh
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+171.25 212.239 mov
+(A) sh
+169.652 204.24 mov
+(U) sh
+172.849 197.839 mov
+(G) sh
+173.648 190.639 mov
+(C) sh
+173.648 181.042 mov
+(C) sh
+173.648 173.842 mov
+(C) sh
+172.849 166.642 mov
+(G) sh
+173.648 159.441 mov
+(U) sh
+166.448 161.839 mov
+(A) sh
+159.651 167.441 mov
+(G) sh
+152.048 163.841 mov
+(U) sh
+153.445 154.243 mov
+(G) sh
+161.048 152.242 mov
+(U) sh
+169.645 148.238 mov
+(U) sh
+163.244 144.235 mov
+(C) sh
+169.601 133.64 mo
+170.001 133.64 li
+170.001 134.04 li
+168.401 137.24 li
+168.001 137.24 li
+168.001 136.84 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+156.05 141.04 mov
+(G) sh
+148.85 140.241 mov
+(U) sh
+143.249 133.84 mov
+(G) sh
+136.049 136.237 mov
+(C) sh
+132.852 142.638 mov
+(C) sh
+129.655 149.039 mov
+(U) sh
+123.4 142.04 mo
+123.801 142.04 li
+127.4 143.84 li
+127.4 144.24 li
+127 144.24 li
+123.4 142.44 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+126.45 155.44 mov
+(A) sh
+120.201 148.44 mo
+120.601 148.44 li
+124.201 150.24 li
+124.201 150.64 li
+123.801 150.64 li
+120.201 148.84 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+121.65 161.84 mov
+(G) sh
+117 154.84 mo
+117.4 154.84 li
+121 156.64 li
+121 157.04 li
+120.601 157.04 li
+117 155.24 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+119.25 168.24 mov
+(C) sh
+113.801 161.24 mo
+114.201 161.24 li
+117.801 163.04 li
+117.801 163.44 li
+117.4 163.44 li
+113.801 161.64 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+121.65 175.44 mov
+(G) sh
+121.65 183.439 mov
+(A) sh
+117.647 190.639 mov
+(A) sh
+109.648 193.836 mov
+(G) sh
+102.448 193.836 mov
+(U) sh
+95.2476 190.639 mov
+(C) sh
+90.4453 183.439 mov
+(A) sh
+89.646 175.44 mov
+(U) sh
+92.8428 168.24 mov
+(A) sh
+98.4448 163.438 mov
+(A) sh
+105.645 161.839 mov
+(G) sh
+109.648 155.438 mov
+(C) sh
+113.651 149.038 mov
+(U) sh
+116.848 142.637 mov
+(A) sh
+119.245 136.236 mov
+(G) sh
+122.442 129.835 mov
+(G) sh
+120.044 121.836 mov
+(G) sh
+128.201 110.84 mo
+128.601 110.84 li
+128.601 111.24 li
+126.201 115.24 li
+125.801 115.24 li
+125.801 114.84 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+112.85 119.44 mov
+(C) sh
+105.65 118.641 mov
+(A) sh
+97.6509 117.841 mov
+(G) sh
+91.25 117.042 mov
+(U) sh
+95.9844 106.64 mo
+95.9844 107.523 95.2676 108.24 94.3843 108.24 cv
+93.5015 108.24 92.7847 107.523 92.7847 106.64 cv
+92.7847 105.756 93.5015 105.04 94.3843 105.04 cv
+95.2676 105.04 95.9844 105.756 95.9844 106.64 cv
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+84.0503 116.24 mov
+(C) sh
+87.8003 103.84 mo
+88.2007 103.84 li
+88.2007 104.24 li
+87.4004 109.04 li
+87.0005 109.04 li
+87.0005 108.64 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+76.8501 115.44 mov
+(U) sh
+81.0005 102.84 mo
+81.4004 102.84 li
+81.4004 103.24 li
+80.6006 108.04 li
+80.2002 108.04 li
+80.2002 107.64 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+68.8501 116.24 mov
+(U) sh
+63.2485 110.638 mov
+(U) sh
+64.0474 102.639 mov
+(A) sh
+70.4482 98.6357 mov
+(G) sh
+78.4473 101.033 mov
+(A) sh
+84.8481 101.833 mov
+(G) sh
+92.0483 102.631 mov
+(G) sh
+100.047 103.431 mov
+(C) sh
+107.248 104.23 mov
+(U) sh
+115.045 105.029 mov
+(G) sh
+122.447 103.431 mov
+(A) sh
+128.048 109.032 mov
+(C) sh
+134.449 106.635 mov
+(G) sh
+142.601 106.04 mo
+143 106.04 li
+147 108.44 li
+147 108.84 li
+146.601 108.84 li
+142.601 106.44 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+137.65 100.24 mov
+(G) sh
+145.801 99.6396 mo
+146.201 99.6396 li
+150.201 102.04 li
+150.201 102.44 li
+149.801 102.44 li
+145.801 100.04 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+133.65 94.6396 mov
+(C) sh
+128.048 88.2388 mov
+(A) sh
+120.849 84.2358 mov
+(G) sh
+129.4 73.8394 mo
+129.801 73.8394 li
+129.801 74.2397 li
+127.4 77.4395 li
+127 77.4395 li
+127 77.0396 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+115.25 79.4395 mov
+(G) sh
+109.648 75.4365 mov
+(A) sh
+117.801 65.2397 mo
+118.201 65.2397 li
+118.201 65.6396 li
+115.801 68.8394 li
+115.4 68.8394 li
+115.4 68.4395 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+102.45 78.6396 mov
+(A) sh
+94.4512 79.439 mov
+(A) sh
+87.251 77.041 mov
+(A) sh
+80.8501 71.4395 mov
+(A) sh
+77.6533 64.2397 mov
+(A) sh
+75.2559 56.2402 mov
+(G) sh
+82.6006 45.2393 mo
+83.0005 45.2393 li
+83.0005 45.6392 li
+81.4004 49.6396 li
+81.0005 49.6396 li
+81.0005 49.2393 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+69.6499 53.8394 mov
+(C) sh
+76.2002 42.2393 mo
+76.6006 42.2393 li
+76.6006 42.6392 li
+75.0005 46.6392 li
+74.6006 46.6392 li
+74.6006 46.2393 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+63.25 50.6396 mov
+(C) sh
+69.6006 39.4395 mo
+70.0005 39.4395 li
+70.0005 39.8394 li
+68.4004 43.8394 li
+68.0005 43.8394 li
+68.0005 43.4395 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+56.0498 53.0396 mov
+(U) sh
+48.0508 50.6421 mov
+(A) sh
+42.4492 45.0405 mov
+(C) sh
+40.8511 37.041 mov
+(G) sh
+50.4321 28.2554 mo
+50.4321 29.1387 49.7153 29.8555 48.8325 29.8555 cv
+47.9492 29.8555 47.2324 29.1387 47.2324 28.2554 cv
+47.2324 27.3721 47.9492 26.6553 48.8325 26.6553 cv
+49.7153 26.6553 50.4321 27.3721 50.4321 28.2554 cv
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+36.0498 32.2393 mov
+(U) sh
+44.8003 22.4395 mo
+45.2002 22.4395 li
+45.2002 22.8394 li
+42.8003 26.0396 li
+42.4004 26.0396 li
+42.4004 25.6392 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+31.25 27.4395 mov
+(C) sh
+39.2002 17.6392 mo
+39.6001 17.6392 li
+39.6001 18.0396 li
+37.2002 21.2393 li
+36.8003 21.2393 li
+36.8003 20.8394 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+24.0498 23.4395 mov
+(U) sh
+22.4517 16.2393 mov
+(U) sh
+28.0532 9.83838 mov
+2.0016 0 (CG) ash
+39.2563 17.0386 mov
+(G) sh
+45.6572 21.042 mov
+(A) sh
+51.2588 25.8442 mov
+2.8008 0 (UA) ash
+65.6587 30.6465 mov
+(U) sh
+68.0562 37.8467 mov
+(G) sh
+75.2563 40.2441 mov
+(G) sh
+82.4565 43.4409 mov
+(C) sh
+88.8574 38.6382 mov
+(U) sh
+96.0571 37.04 mov
+(G) sh
+104.855 37.8394 mov
+(A) sh
+110.457 41.8423 mov
+(G) sh
+116.858 48.2432 mov
+(U) sh
+119.255 56.2427 mov
+(A) sh
+118.457 64.2417 mov
+(U) sh
+124.058 68.2446 mov
+(C) sh
+130.459 72.248 mov
+(C) sh
+136.061 76.2515 mov
+(U) sh
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+137.061 68.252 mov
+(U) sh
+142.058 62.0527 mov
+(G) sh
+148.055 68.0503 mov
+(A) sh
+146.054 76.2515 mov
+(A) sh
+144.052 84.4521 mov
+(A) sh
+146.45 91.4502 mov
+(G) sh
+152.051 86.6479 mov
+(U) sh
+158.601 86.8398 mo
+159 86.8398 li
+161.401 90.0396 li
+161.401 90.4395 li
+161.001 90.4395 li
+158.601 87.2397 li
+0 0 0 rgb
+ef
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+157.65 80.2397 mov
+(G) sh
+167.793 82.6396 mo
+167.793 83.5229 167.076 84.2397 166.193 84.2397 cv
+165.31 84.2397 164.593 83.5229 164.593 82.6396 cv
+164.593 81.7563 165.31 81.0396 166.193 81.0396 cv
+167.076 81.0396 167.793 81.7563 167.793 82.6396 cv
+0 0 0 rgb
+ef
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+164.05 74.6396 mov
+(C) sh
+168.853 69.8374 mov
+(C) sh
+175.201 70.8394 mo
+175.601 70.8394 li
+178.001 74.0396 li
+178.001 74.4395 li
+177.601 74.4395 li
+175.201 71.2397 li
+0 0 0 rgb
+ef
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+165.65 62.6396 mov
+(A) sh
+164.052 54.6401 mov
+(C) sh
+164.052 46.6411 mov
+(A) sh
+165.65 38.6421 mov
+(G) sh
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+169.654 32.2412 mov
+(U) sh
+174.456 25.8403 mov
+(G) sh
+181.656 21.8374 mov
+(A) sh
+189.655 18.6406 mov
+(C) sh
+196.855 17.8413 mov
+(G) sh
+205.653 18.6406 mov
+(A) sh
+212.854 21.0381 mov
+(A) sh
+218.455 25.8403 mov
+(G) sh
+224.856 31.4419 mov
+(U) sh
+229.801 33.2393 mo
+230.201 33.2393 li
+231.801 37.2393 li
+231.801 37.6392 li
+231.401 37.6392 li
+229.801 33.6392 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+231.25 28.2393 mov
+(C) sh
+236.201 30.0396 mo
+236.601 30.0396 li
+238.201 34.0396 li
+238.201 34.4395 li
+237.801 34.4395 li
+236.201 30.4395 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+238.451 25.8394 mov
+(U) sh
+242.801 27.0396 mo
+243.201 27.0396 li
+244.801 31.0396 li
+244.801 31.4395 li
+244.401 31.4395 li
+242.801 27.4395 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+244.851 22.6392 mov
+(C) sh
+251.251 19.4429 mov
+(A) sh
+256.201 21.2393 mo
+256.601 21.2393 li
+258.201 25.2393 li
+258.201 25.6392 li
+257.801 25.6392 li
+256.201 21.6392 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+257.651 16.2393 mov
+(C) sh
+262.601 18.0396 mo
+263.001 18.0396 li
+264.601 22.0396 li
+264.601 22.4395 li
+264.201 22.4395 li
+262.601 18.4395 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+264.051 13.8394 mov
+(U) sh
+271.185 17.0234 mo
+271.185 17.9067 270.468 18.6235 269.585 18.6235 cv
+268.702 18.6235 267.985 17.9067 267.985 17.0234 cv
+267.985 16.1401 268.702 15.4233 269.585 15.4233 cv
+270.468 15.4233 271.185 16.1401 271.185 17.0234 cv
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+271.251 10.6392 mov
+(A) sh
+275.401 12.4395 mo
+275.801 12.4395 li
+277.401 16.4395 li
+277.401 16.8394 li
+277.001 16.8394 li
+275.401 12.8394 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+276.851 5.83936 mov
+(G) sh
+284.85 7.4375 mov
+(A) sh
+288.047 15.437 mov
+(A) sh
+284.85 22.6367 mov
+(A) sh
+276.851 23.436 mov
+(U) sh
+269.651 26.6328 mov
+(G) sh
+263.25 29.8291 mov
+(G) sh
+256.849 33.0259 mov
+(U) sh
+249.649 35.4238 mov
+(G) sh
+244.047 38.6201 mov
+(A) sh
+236.848 41.8169 mov
+(G) sh
+231.246 44.2148 mov
+(A) sh
+230.447 52.2139 mov
+(G) sh
+230.447 60.2131 mov
+(U) sh
+226.444 67.4131 mov
+(G) sh
+222.44 74.6128 mov
+(G) sh
+216.839 79.4155 mov
+(A) sh
+209.639 83.4185 mov
+(A) sh
+201.64 85.0166 mov
+(C) sh
+192.841 85.0166 mov
+(G) sh
+186.44 83.4185 mov
+(C) sh
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+178.441 80.2217 mov
+(G) sh
+172.839 85.0244 mov
+(G) sh
+168.44 90.2227 mov
+(U) sh
+173.639 96.2202 mov
+(A) sh
+168.037 101.822 mov
+(A) sh
+162.436 96.2202 mov
+(A) sh
+156.834 101.822 mov
+(C) sh
+151.232 107.423 mov
+(C) sh
+148.036 113.824 mov
+(C) sh
+150.433 121.024 mov
+(C) sh
+158.432 121.823 mov
+(U) sh
+163.235 128.224 mov
+(C) sh
+168.836 131.421 mov
+(G) sh
+176.037 134.618 mov
+(A) sh
+184.036 135.417 mov
+(G) sh
+192.035 135.417 mov
+(C) sh
+198.436 135.417 mov
+(G) sh
+206.435 135.417 mov
+(A) sh
+212.835 135.417 mov
+3.19681 0 (GAAA) ash
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+244.832 135.417 mov
+(C) sh
+247.601 138.24 mo
+247.601 142.64 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+252.051 135.44 mov
+2.0016 0 (CC) ash
+264.852 129.039 mov
+(A) sh
+271.253 125.036 mov
+3.19681 0 (AA) ash
+287.251 128.232 mov
+(U) sh
+292.054 133.834 mov
+(U) sh
+293.652 141.833 mov
+(U) sh
+292.054 149.833 mov
+(U) sh
+286.452 156.233 mov
+(G) sh
+279.252 159.43 mov
+(G) sh
+272.052 159.43 mov
+(U) sh
+264.852 156.233 mov
+(A) sh
+259.25 149.833 mov
+(G) sh
+252.05 149.833 mov
+(G) sh
+244.851 149.833 mov
+(G) sh
+244.851 158.631 mov
+(G) sh
+245.254 167.033 mov
+(A) sh
+246.65 175.234 mov
+(A) sh
+253.649 176.832 mov
+2.0016 0 (CCUUCUU) ash
+301.377 181.232 mo
+301.377 182.115 300.661 182.832 299.777 182.832 cv
+298.894 182.832 298.177 182.115 298.177 181.232 cv
+298.177 180.349 298.894 179.632 299.777 179.632 cv
+300.661 179.632 301.377 180.349 301.377 181.232 cv
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+300.851 169.64 mov
+(A) sh
+306.453 163.239 mov
+(A) sh
+313.652 160.042 mov
+(C) sh
+320.053 159.243 mov
+(G) sh
+328.052 160.842 mov
+(G) sh
+336.052 164.845 mov
+(A) sh
+340.854 170.446 mov
+(A) sh
+344.051 178.446 mov
+(U) sh
+344.051 186.445 mov
+(U) sh
+341.653 193.645 mov
+(C) sh
+336.851 200.045 mov
+(A) sh
+330.45 204.848 mov
+(A) sh
+322.451 207.246 mov
+(C) sh
+313.652 206.446 mov
+(G) sh
+306.453 203.25 mov
+(G) sh
+296.855 191.247 mov
+(G) sh
+290.454 191.247 mov
+(A) sh
+282.455 191.247 mov
+(G) sh
+276.054 191.449 mov
+(A) sh
+268.854 191.247 mov
+(A) sh
+260.855 191.247 mov
+(G) sh
+253.655 191.247 mov
+(G) sh
+253.655 200.845 mov
+(A) sh
+255.401 202.64 mo
+255.801 202.64 li
+255.801 203.04 li
+255.001 207.04 li
+254.601 207.04 li
+254.601 206.64 li
+0 0 0 rgb
+ef
+259.851 204.84 mo
+267.051 204.84 li
+267.051 196.04 li
+259.851 196.04 li
+259.851 204.84 li
+1 1 1 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+260.851 202.44 mov
+(C) sh
+268.051 204.837 mov
+(A) sh
+269.001 206.64 mo
+269.401 206.64 li
+269.401 207.04 li
+268.601 211.04 li
+268.201 211.04 li
+268.201 210.64 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+274.451 206.44 mov
+(G) sh
+276.201 208.24 mo
+276.601 208.24 li
+276.601 208.64 li
+275.801 212.64 li
+275.401 212.64 li
+275.401 212.24 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+281.651 208.04 mov
+(A) sh
+288.851 210.438 mov
+(A) sh
+289.801 212.24 mo
+290.201 212.24 li
+290.201 212.64 li
+289.401 216.64 li
+289.001 216.64 li
+289.001 216.24 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+296.851 210.44 mov
+(U) sh
+300.854 216.841 mov
+(G) sh
+299.256 224.84 mov
+(C) sh
+292.056 228.037 mov
+(U) sh
+284.855 224.034 mov
+(U) sh
+278.455 222.435 mov
+(U) sh
+271.255 220.038 mov
+(C) sh
+264.055 218.439 mov
+(U) sh
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+256.855 216.841 mov
+(G) sh
+250.454 214.443 mov
+(U) sh
+242.601 214.84 mo
+249.001 214.84 li
+249.001 206.04 li
+242.601 206.04 li
+242.601 214.84 li
+1 1 1 rgb
+ef
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+243.451 212.44 mov
+(A) sh
+243.451 221.642 mov
+(G) sh
+243.854 229.842 mov
+(A) sh
+243.652 238.439 mov
+(U) sh
+243.652 246.438 mov
+(A) sh
+243.249 254.639 mov
+(G) sh
+243.652 262.638 mov
+(A) sh
+243.249 270.839 mov
+(U) sh
+243.249 279.436 mov
+(G) sh
+244.048 286.636 mov
+(A) sh
+244.048 293.836 mov
+(U) sh
+244.048 301.036 mov
+(U) sh
+243.249 308.236 mov
+(G) sh
+244.048 315.436 mov
+(C) sh
+244.048 322.636 mov
+(C) sh
+.113725 .054902 .501961 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+251.248 322.636 mov
+2.00162 0 (GC) ash
+265.801 322.84 mo
+266.201 322.84 li
+269.001 324.84 li
+269.001 325.241 li
+268.601 325.241 li
+265.801 323.241 li
+0 0 0 rgb
+ef
+.113725 .054902 .501961 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+263.051 315.641 mov
+(C) sh
+262.453 307.44 mov
+(U) sh
+270.056 303.638 mov
+(G) sh
+280.633 304.641 mo
+280.633 305.413 280.006 306.041 279.233 306.041 cv
+278.46 306.041 277.833 305.413 277.833 304.641 cv
+277.833 303.868 278.46 303.24 279.233 303.24 cv
+280.006 303.24 280.633 303.868 280.633 304.641 cv
+cp
+0 0 0 rgb
+s
+.113725 .054902 .501961 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+273.851 296.84 mov
+(A) sh
+276.853 290.641 mov
+(G) sh
+280.856 285.04 mov
+(U) sh
+284.801 290.641 mo
+285.201 290.641 li
+288.401 293.041 li
+288.401 293.44 li
+288.001 293.44 li
+284.801 291.041 li
+0 0 0 rgb
+ef
+.113725 .054902 .501961 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+284.851 278.64 mov
+(A) sh
+292.201 278.041 mo
+292.601 278.041 li
+295.801 280.44 li
+295.801 280.84 li
+295.401 280.84 li
+292.201 278.44 li
+0 0 0 rgb
+ef
+.113725 .054902 .501961 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+289.251 272.64 mov
+(C) sh
+292.851 266.441 mov
+(G) sh
+297.048 258.644 mov
+(A) sh
+300.85 252.243 mov
+(G) sh
+308.201 252.44 mo
+308.601 252.44 li
+311.801 254.84 li
+311.801 255.24 li
+311.401 255.24 li
+308.201 252.84 li
+0 0 0 rgb
+ef
+.113725 .054902 .501961 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+304.051 246.64 mov
+(G) sh
+312.201 246.04 mo
+312.601 246.04 li
+315.801 248.44 li
+315.801 248.84 li
+315.401 248.84 li
+312.201 246.44 li
+0 0 0 rgb
+ef
+.113725 .054902 .501961 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+308.851 240.24 mov
+(U) sh
+319.186 241.04 mo
+319.186 241.923 318.469 242.64 317.585 242.64 cv
+316.702 242.64 315.985 241.923 315.985 241.04 cv
+315.985 240.157 316.702 239.44 317.585 239.44 cv
+318.469 239.44 319.186 240.157 319.186 241.04 cv
+0 0 0 rgb
+ef
+.113725 .054902 .501961 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+309.651 232.24 mov
+(G) sh
+316.851 227.438 mov
+(A) sh
+324.051 229.036 mov
+(U) sh
+328.054 235.437 mov
+(G) sh
+328.054 243.436 mov
+(A) sh
+320.055 248.238 mov
+(G) sh
+317.658 253.84 mov
+(C) sh
+313.654 260.241 mov
+(C) sh
+309.651 266.642 mov
+(G) sh
+318.248 266.843 mov
+(U) sh
+323.85 272.445 mov
+(U) sh
+323.05 280.444 mov
+(U) sh
+315.051 284.447 mov
+(G) sh
+308.65 282.05 mov
+(C) sh
+304.453 273.849 mov
+(A) sh
+300.054 280.25 mov
+(G) sh
+297.656 286.65 mov
+(U) sh
+293.653 292.252 mov
+(A) sh
+289.649 298.653 mov
+(C) sh
+285.452 304.852 mov
+(G) sh
+282.45 311.051 mov
+(A) sh
+281.65 319.454 mov
+(U) sh
+273.651 323.457 mov
+(G) sh
+270.051 330.455 mov
+2.00162 0 (GA) ash
+.980392 .0509804 .0431373 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+285.654 330.657 mov
+(A) sh
+293.653 331.456 mov
+(C) sh
+300.853 335.459 mov
+(A) sh
+303.25 342.659 mov
+(A) sh
+300.054 349.859 mov
+(A) sh
+293.005 353.056 mov
+(A) sh
+285.208 353.056 mov
+(C) sh
+277.604 353.056 mov
+(A) sh
+269.807 353.056 mov
+(U) sh
+261.21 353.056 mov
+(G) sh
+253.412 353.056 mov
+(G) sh
+246.616 353.056 mov
+(C) sh
+238.818 353.056 mov
+(U) sh
+231.071 353.056 mov
+(U) sh
+224.468 346.655 mov
+(A) sh
+221.668 337.058 mov
+(C) sh
+216.865 343.458 mov
+(A) sh
+211.264 337.058 mov
+(G) sh
+204.863 337.058 mov
+(A) sh
+197.663 337.058 mov
+(A) sh
+190.463 337.058 mov
+(C) sh
+182.464 337.058 mov
+(G) sh
+176.063 337.058 mov
+(U) sh
+168.863 337.058 mov
+(U) sh
+161.663 337.058 mov
+(A) sh
+153.664 337.058 mov
+(G) sh
+146.867 342.861 mov
+(A) sh
+139.264 342.861 mov
+(C) sh
+130.861 342.861 mov
+(C) sh
+123.258 342.861 mov
+(A) sh
+115.856 342.861 mov
+(C) sh
+0 0 0 rgb
+/Helvetica*1 findfont [7.2 0 0 -7.2 0 0 ]mfnt sfnt
+107.454 342.861 mov
+(U) sh
+99.8511 342.861 mov
+(U) sh
+237.001 277.24 mo
+241.401 277.24 li
+0 0 0 rgb
+s
+269.651 316.241 mo
+270.051 316.241 li
+272.851 318.241 li
+272.851 318.641 li
+272.451 318.641 li
+269.651 316.641 li
+0 0 0 rgb
+ef
+284.089 298.641 mo
+284.089 299.413 283.462 300.041 282.689 300.041 cv
+281.917 300.041 281.289 299.413 281.289 298.641 cv
+281.289 297.868 281.917 297.24 282.689 297.24 cv
+283.462 297.24 284.089 297.868 284.089 298.641 cv
+cp
+0 0 0 rgb
+s
+288.651 284.84 mo
+289.051 284.84 li
+292.251 287.24 li
+292.251 287.641 li
+291.852 287.641 li
+288.651 285.24 li
+0 0 0 rgb
+ef
+303.289 267.873 mo
+303.289 268.645 302.662 269.272 301.889 269.272 cv
+301.117 269.272 300.489 268.645 300.489 267.873 cv
+300.489 267.1 301.117 266.472 301.889 266.472 cv
+302.662 266.472 303.289 267.1 303.289 267.873 cv
+cp
+307.657 260.48 mo
+307.657 261.253 307.03 261.88 306.257 261.88 cv
+305.484 261.88 304.857 261.253 304.857 260.48 cv
+304.857 259.708 305.484 259.08 306.257 259.08 cv
+307.03 259.08 307.657 259.708 307.657 260.48 cv
+cp
+0 0 0 rgb
+s
+295.851 272.44 mo
+296.251 272.44 li
+299.451 274.84 li
+299.451 275.24 li
+299.051 275.24 li
+295.851 272.84 li
+0 0 0 rgb
+ef
+262.451 205.04 mo
+262.851 205.04 li
+262.851 205.44 li
+262.051 209.44 li
+261.651 209.44 li
+261.651 209.04 li
+0 0 0 rgb
+ef
+283.251 210.64 mo
+283.651 210.64 li
+283.651 211.04 li
+282.851 215.04 li
+282.451 215.04 li
+282.451 214.64 li
+0 0 0 rgb
+ef
+292.651 179.04 mo
+292.651 183.44 li
+285.251 179.04 mo
+285.251 183.44 li
+278.051 179.04 mo
+278.051 183.44 li
+270.651 179.04 mo
+270.651 183.44 li
+263.451 179.04 mo
+263.451 183.44 li
+256.051 179.04 mo
+256.051 183.44 li
+254.851 138.24 mo
+254.851 142.64 li
+262.051 138.24 mo
+262.051 142.64 li
+0 0 0 rgb
+s
+176.05 137.04 mo
+176.45 137.04 li
+176.45 137.44 li
+174.851 140.64 li
+174.45 140.64 li
+174.45 140.24 li
+0 0 0 rgb
+ef
+163.25 130.64 mo
+163.65 130.64 li
+163.65 131.04 li
+162.05 134.24 li
+161.65 134.24 li
+161.65 133.84 li
+0 0 0 rgb
+ef
+150.25 122.84 mo
+150.65 122.84 li
+150.65 123.24 li
+149.05 126.44 li
+148.65 126.44 li
+148.65 126.04 li
+0 0 0 rgb
+ef
+127.05 136.64 mo
+127.45 136.64 li
+130.85 138.24 li
+130.85 138.64 li
+130.45 138.64 li
+127.05 137.04 li
+0 0 0 rgb
+ef
+130.25 130.04 mo
+130.65 130.04 li
+134.05 131.84 li
+134.05 132.24 li
+133.65 132.24 li
+130.25 130.44 li
+0 0 0 rgb
+ef
+102.05 105.44 mo
+102.45 105.44 li
+102.45 105.84 li
+101.65 110.64 li
+101.25 110.64 li
+101.25 110.24 li
+0 0 0 rgb
+ef
+109.85 106.44 mo
+110.25 106.44 li
+110.25 106.84 li
+109.45 111.64 li
+109.05 111.64 li
+109.05 111.24 li
+0 0 0 rgb
+ef
+116.85 106.64 mo
+117.25 106.64 li
+117.25 107.04 li
+116.45 111.84 li
+116.05 111.84 li
+116.05 111.44 li
+0 0 0 rgb
+ef
+123.85 69.6396 mo
+124.25 69.6396 li
+124.25 70.0396 li
+121.85 73.2397 li
+121.45 73.2397 li
+121.45 72.8394 li
+0 0 0 rgb
+ef
+135.85 78.4395 mo
+136.25 78.4395 li
+136.25 78.8398 li
+133.85 82.0396 li
+133.45 82.0396 li
+133.45 81.6396 li
+0 0 0 rgb
+ef
+170.45 75.4395 mo
+170.851 75.4395 li
+173.25 78.6396 li
+173.25 79.0396 li
+172.851 79.0396 li
+170.45 75.8398 li
+0 0 0 rgb
+ef
+153.25 92.4395 mo
+153.65 92.4395 li
+156.05 95.6396 li
+156.05 96.0396 li
+155.65 96.0396 li
+153.25 92.8398 li
+0 0 0 rgb
+ef
+248.651 24.6392 mo
+249.051 24.6392 li
+250.651 28.6392 li
+250.651 29.0396 li
+250.25 29.0396 li
+248.651 25.0396 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+%ADOBeginSubsetFont: Times-Roman AddGlyphs
+
+systemdict begin
+/Times-Roman 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/three 
+<10bf31704d4d67992b9ed68788587e5040da2286f83510cfc80f4a1e6fe6
+b09f97c944a087c4717928d782a2fb1bf0c721dd38a24ac2067564597d96
+92f97bc0abd49771e30c9491f8e5eab740a467cca2d53dd7c7249046b7bb
+4481eefce39557f10e129ce1987210441b69a70dd258cb6743bf9d7d1704
+979d6e3b6b3885eb27d4d4e5451b96ed7dfd7ce9e64ca73b4c877d5863ad
+c8641b65d41f66c4fc61f9c17255ecd286dcdef4a9a113d36ecac701c7a9
+417b48f1ad6bcdbabde10f6ff50ed870147c0d4cea98b8630a6ff4466ad4
+2983d01ca76121874525ba586aec14> ND 
+/five 
+<10bf31703bca56f2b2f1649faf9ba9948c035e867a5c8948b33268dbbfaf
+455551fd125b019c10a69d4b25668e31b838df4ee36a0f050ddfb933a970
+96a275ed8a7222f12ff901e86c1d4781a2a4d533d3dc87c499fdb840f1a4
+8285d60f1f88ace01bc52eacc7865a40753471dc909f282c74ed77f33b02
+ce7e21940182217d317dbb078d97be05356c56d5596c7eb8d464dec1827e
+46a37273fc66> ND 
+/quotesingle 
+<10bf317031d6cb38314a48a25f917a0bc84fa8560a9dde3392b0598a064d
+d972a4e02d28ccddbc17> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Times-Roman findfont /Encoding get
+dup 51 /three put
+dup 53 /five put
+dup 169 /quotesingle put
+pop
+%ADOEndSubsetFont
+/Times-Roman*1 
+[
+32{/.notdef}repeat /space 16{/.notdef}repeat /one /.notdef /three /.notdef /five 
+/six /.notdef /eight 8{/.notdef}repeat /A 12{/.notdef}repeat /N /.notdef 
+/P /.notdef /R 14{/.notdef}repeat /a /b /c /.notdef 
+/e 3{/.notdef}repeat /i 2{/.notdef}repeat /l /.notdef /n /o 
+3{/.notdef}repeat /s /.notdef /u 51{/.notdef}repeat /quotesingle 86{/.notdef}repeat
+] /Times-Roman nfnt
+/Times-Roman*1 findfont [9.59949 0 0 -9.59949 0 0 ]mfnt sfnt
+115.65 316.641 mov
+(5\251 ) sh
+93.4468 335.839 mov
+-2.39987 0 32 (3 \251) wsh
+230.401 348.44 mo
+230.401 344.641 li
+291.401 344.641 li
+291.401 348.44 li
+0 0 0 rgb
+s
+218.251 151.44 mo
+222.051 151.44 li
+222.051 217.24 li
+218.251 217.24 li
+0 0 0 rgb
+s
+0 0 0 rgb
+%ADOBeginSubsetFont: Times-Bold Initial
+11 dict begin
+/FontName /Times-Bold def
+/FontMatrix [1 1000 div 0 0 1 1000 div 0 0 ] def
+/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
+/PaintType 0 def
+/FontType 1 def
+/FontBBox { 0 0 0 0 } def
+/FontInfo 1 dict dup begin
+  /OrigFontType /TrueType def
+end readonly def
+currentdict
+end
+
+systemdict begin
+dup /Private 7 dict dup begin
+/BlueValues [-15 0 600 650] def
+/MinFeature {16 16} def
+/password 5839 def
+/ND {def} def
+/NP {put} def
+/RD {string currentfile exch readhexstring pop} def
+2 index /CharStrings 230 dict dup begin
+/.notdef 
+<10bf317079bb21e4> ND 
+/one 
+<10bf317016a461215dc2bc58955b35661fa832109bbf588b04481bf3cd7d
+6757617e8c0c9816948b05a2f38fa7d575d87daf4173819092e8a31c5c40
+e448> ND 
+/two 
+<10bf31704e7ce76dc21d92ed768461702e89179315ec586ed23b84b600e7
+3a8f14adaeefbd1a8ef4ea75ecc881acaee461c169f9135deb6066d93b22
+ee96d26cb12918588e0f074cbe4a50dbd8dee265fdf797758e390f627882
+1a348c2c9d448eec97692b7ef491db5d02d45177dd87c13938d098649ebe
+a4cc2faaaed0c7a2761825de7c345f0bfb9041ae2e00092351fa02c4> ND 
+/three 
+<10bf3170448bf7f9ab87993b613b3ec6872bb5d966efcdf9c783f7efc718
+a4be64d1751f3265cb60d9b5276469b557ce9ac8e0b3e36526e436641c45
+b03e0bbf21c62cc9320f6e43ee7f4cf80e4ba99cbef004b4c841b62fef40
+eb9e06429ecc6610f2f9981d2ba816746969ed66b8d8f4a43f88a0481912
+4ea05d3482e732407a96b011398ff3c43e92014a09adb230efe31fae5890
+b709d22daa136899f6cee93c165c965053839c1761be399dc17d19e6190c
+d1189af61ffb99fcba33a54bf70a760eb14d549829e16b73f3286e65e570
+e9c68df30501c2fc3708531fc7b7a7> ND 
+/P 
+<10bf31705ac93459811df9cbd49c2bf4b1dedea8f02dfae7024000d592d8
+626efab6b45ce7d12609750117a8b9f45cec5fbc19dabdf498132ae3871f
+7b30c381d86c65ed3471fcdb55def6123a3407152978bf6a0a519b305da6
+114f0efe0bd3c68f68cac1672ee085498a8e6fd32638d9a60604b744ec7d
+adf8080c> ND 
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+end
+/Times-Bold findfont /Encoding get
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 80 /P put
+pop
+%ADOEndSubsetFont
+/Times-Bold*1 
+[
+49{/.notdef}repeat /one /two /three 28{/.notdef}repeat /P 175{/.notdef}repeat
+] /Times-Bold nfnt
+/Times-Bold*1 findfont [9.59949 0 0 -9.59949 0 0 ]mfnt sfnt
+186.851 313.041 mov
+(P1) sh
+215.246 301.041 mov
+(P2) sh
+184.047 246.641 mov
+(P3) sh
+252.001 265.041 mo
+264.001 265.041 li
+264.001 255.44 li
+252.001 255.44 li
+252.001 265.041 li
+1 1 1 rgb
+ef
+0 0 0 rgb
+%ADOBeginSubsetFont: Times-Bold AddGlyphs
+
+systemdict begin
+/Times-Bold 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/period 
+<10bf317031d60d0d96d24999f918f780e1d8a9a0f7af8ae84fc38c94ec58
+3135f88e9212> ND 
+/zero 
+<10bf31705e925b80b4c8f1fcfb5b2fe440a74f62c796f3c02eb2da9ee8cf
+3e749c77619068400ca89c7ff72323032874cc719b493cec13438cfd7c60
+1a938141b249a6344fe7adba210563b145c5c7fdeb53dd40d430a2aa7888
+168bd4bf2698d90932777f16b7e6a801d452cb01444444badd4929588478
+5c2db1fce381dd65450cfad1ad35a39b11fd66b6c6b2> ND 
+/four 
+<10bf31705e925b80b4d4cbc4e928debcbc9ca1ce5a446752e420eab5615d
+cef61aee7d97d9eff1670763252051f2be6419a384475d66237624abe7df
+bf6e4102d5fa21a734cd00f0c9525ffcfc3a0b5db0af7e642e07c3025b71
+28> ND 
+/five 
+<10bf31704c1fb570da2787659fe061824d11502990202c6ca9b1b5da7d96
+0cdc349fd36ba74c839bb1f6ad5b2036aeda9f35d253d86da9773dd61de0
+422dfd536357960cb12f0db9ec77f07242af63d3096a64c3445c4655da1d
+3f19cb4456eb43ca711a9ea13df4ad219690fec0405819e631b49a78e94e
+67647654af6c2c1b1a75609742d0f8441ecfc35136febc44d8aae59aaf7d
+8b88b3651059> ND 
+/seven 
+<10bf31704e7ce76dc241686bc20501ea6e7c96a17170122b38ebad2a9949
+f6af8d4a89b98118652167542a74de2ba301ca2bc45e339e3ae683f4931f
+043d89fd8fa9850065> ND 
+/eight 
+<10bf3170599acabf992f0757d5e6110d0b202583f1f37eaa3993e2f1cd0f
+6e2622e3038d71367894f4d7032548bfcfce20f6b689fcb6b5a6254cd40a
+57f3279a61197186e879de36aa303e142e3645176933121430692e7d7ebb
+506cc17ee9a0b5fcbbc35b4e0ca4bc539673a52c07e974690d1b4e3e7b30
+414514c9c4a69719fb0eb20a52293f89414475f52809d90dbe81091c74fb
+4c4dadbb0d931073181f5593d9dca742706d4ab9098d680bf1c84eb32b33
+f14a05583e424b60d3cbfbb323701a5b41e6da60d0f26788ef39cc3d0958
+7823ca82721fbddff3435b5a34de0e71ff21dda5df3656efd4419938b2c4
+470fe8e64677cb89eb7c4f1b21ac33694d> ND 
+/nine 
+<10bf31705d64a97b18e1d0c26252f36d43809f58e8523f9ddf78e8047717
+f29066dc4d29840ee57ae4b42a94d32fb40701e46b2363001bb79897b78f
+07a6186b92686a103837d7cdc6e3e3744245ff59de2a1d399ca8540f1c30
+c9a8541a5212f9caf65fbd8253c13d1a37e50b3c931f53d63eebadb9b257
+d82f4a0ddd6c07d70303ef7dcaedbf224ad7acf31f562053f842644420fd
+b779b2493077d34338a3116b99be03d0552359238e501a8016fcea411abd
+1d0406> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Times-Bold findfont /Encoding get
+dup 46 /period put
+dup 48 /zero put
+dup 52 /four put
+dup 53 /five put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+pop
+%ADOEndSubsetFont
+/Times-Bold*1 
+[
+46{/.notdef}repeat /period /.notdef /zero /one /two /three /four 
+/five /.notdef /seven /eight /nine 22{/.notdef}repeat /P 175{/.notdef}repeat
+] /Times-Bold nfnt
+/Times-Bold*1 findfont [9.59949 0 0 -9.59949 0 0 ]mfnt sfnt
+252.051 262.64 mov
+(P4) sh
+196.451 127.451 mov
+(P5) sh
+/Times-Bold*1 findfont [0 -9.59949 -9.59949 0 0 0 ]mfnt sfnt
+171.601 190.64 mov
+(P5.1) sh
+/Times-Bold*1 findfont [8.43655 4.5777 4.57771 -8.43655 0 0 ]mfnt sfnt
+166.698 119.245 mov
+(P7) sh
+/Times-Bold*1 findfont [4.40726 -8.52861 -8.52859 -4.40726 0 0 ]mfnt sfnt
+108.938 148.31 mov
+(P8) sh
+/Times-Bold*1 findfont [9.5262 1.17877 1.17879 -9.5262 0 0 ]mfnt sfnt
+89.8564 125.389 mov
+(P9) sh
+/Times-Bold*1 findfont [8.29105 4.83913 4.83914 -8.29105 0 0 ]mfnt sfnt
+51.8052 62.5894 mov
+(P10.1) sh
+/Times-Bold*1 findfont [9.59949 0 0 -9.59949 0 0 ]mfnt sfnt
+165.25 111.04 mov
+(P10) sh
+/Times-Bold*1 findfont [7.0179 -6.55133 -6.55132 -7.0179 0 0 ]mfnt sfnt
+155.015 75.9165 mov
+(P11) sh
+/Times-Bold*1 findfont [8.74768 -3.95201 -3.952 -8.74768 0 0 ]mfnt sfnt
+240.226 16.2783 mov
+(P12) sh
+156.65 108.64 mo
+162.05 106.24 li
+162.45 109.84 li
+156.65 108.64 li
+0 0 0 rgb
+ef
+162.05 106.24 mo
+162.25 106.24 li
+162.25 106.44 li
+156.85 108.84 li
+156.65 108.84 li
+156.65 108.64 li
+0 0 0 rgb
+ef
+162.05 106.24 mo
+162.25 106.24 li
+162.45 108.04 li
+162.45 108.24 li
+162.251 108.24 li
+162.05 106.44 li
+0 0 0 rgb
+ef
+162.25 108.04 mo
+162.45 108.04 li
+162.65 109.84 li
+162.65 110.04 li
+162.45 110.04 li
+162.25 108.24 li
+0 0 0 rgb
+ef
+156.65 108.64 mo
+156.85 108.64 li
+162.65 109.84 li
+162.65 110.04 li
+162.45 110.04 li
+156.65 108.84 li
+0 0 0 rgb
+ef
+0 0 0 rgb
+/Times-Bold*1 findfont [9.59949 0 0 -9.59949 0 0 ]mfnt sfnt
+246.851 127.64 mov
+(P15) sh
+264.446 169.033 mov
+(P15.1) sh
+/Times-Bold*1 findfont [9.28151 2.44775 2.44777 -9.28151 0 0 ]mfnt sfnt
+261.931 225.923 mov
+(P18) sh
+/Times-Bold*1 findfont [4.92249 -8.24107 -8.24106 -4.92249 0 0 ]mfnt sfnt
+282.65 274.964 mov
+(P19) sh
+%ADOBeginSubsetFont: Helvetica AddGlyphs
+
+systemdict begin
+/Helvetica 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/space 
+<10bf317079c7734bf7> ND 
+/zero 
+<10bf317040c2af124ea0a49a7bf41805b177f7c4498811bf81dd3becc7ca
+7a1e61bf5af20f14d3ba25cb845719681beff0dff1a88dee7823f826e8f0
+739d88e303e838311be2a57d9230228fb7> ND 
+/one 
+<10bf31702ce19e53b6f609b518076fe734884313e5cd7a86613dc6f2450b
+061a1ad1> ND 
+/two 
+<10bf31703a9b9e75ea81f4b86404c8c5b0ed48d346c9f9e1e61d1793fdf1
+09ba72c7c73f875dce1fed070846350ddda457812602713b0534321d272a
+eafbfd522ef367dbdfbcee610ab8b5> ND 
+/three 
+<10bf31703e65fd7e38478bb8cdc815f2e0f3a21edd060d037e033213cc37
+fb113e86d3e99697f293fc1e5b8128b557be09627a0c26ff6b1d5f3ab710
+a440daae1f921170ca40a3017a7e6559500868f56ea75da7c8a99018d093
+7b39791cb8dcd57666a113cd8b1bba494f8c69> ND 
+/four 
+<10bf317031d92f340665f9d57abf5ced23436d6488bc83fc9796703022f0
+1e775102213885082db74038803d6498914e3031d93bfd3b1dfe31f0e50f
+d402c8473500b13ddfa3fc45fa> ND 
+/six 
+<10bf317031d92f3425eda9786fee0115802f83ee2bdc48b38e5dc519e1dc
+c6118ccdf0f2a993ca95234f42293633db35d04ead9322d56bd4640afe6e
+cf0a84796425fe5cfb964a1b2eb8674fb6753c7544b8406bb3b18dd4e069
+08dc126a28d499cefa9312cde8e70aaf4f> ND 
+/seven 
+<10bf31702094ca827fc7642099017663cef908cd301efa28ee1bfc120575
+9bf89f8b49c3c14274> ND 
+/bracketleft 
+<10bf317010725340705c81366dc59ce1165f0649bc1a5038b23bc770834a
+d2c494e303> ND 
+/bracketright 
+<10bf317054ad3ad6de103c2ea88e0729d320fbf5c609d558099ba537941b
+a08d02> ND 
+/n 
+<10bf31702094ca827fd8441c0957d83ffd389f80f745b17010cbaca850e4
+b5efc2c5c2791c4590a7de7a9402e7d11d5027e291035e04625f59b98678
+9ec2395f091b27a1f72e02bb3010b5af4e13d941a458bc1fdf210f5db8e5
+879f> ND 
+/t 
+<10bf317065f8e1c4514de29c8c0648dd97151e5185bd64bac354fa8d1cf3
+eb2247ee5cd86f648e7a19bc8381fd380e262f145408a19e3e35c8745c47
+2d1157413020406b> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Helvetica findfont /Encoding get
+dup 32 /space put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 54 /six put
+dup 55 /seven put
+dup 91 /bracketleft put
+dup 93 /bracketright put
+dup 110 /n put
+dup 116 /t put
+pop
+%ADOEndSubsetFont
+/Helvetica*1 
+[
+32{/.notdef}repeat /space 15{/.notdef}repeat /zero /one /two /three /four 
+/.notdef /six /seven 9{/.notdef}repeat /A /.notdef /C 3{/.notdef}repeat 
+/G 13{/.notdef}repeat /U 5{/.notdef}repeat /bracketleft /.notdef /bracketright 16{/.notdef}repeat 
+/n 5{/.notdef}repeat /t 139{/.notdef}repeat
+] /Helvetica nfnt
+/Helvetica*1 findfont [12.8 0 0 -12.8 0 0 ]mfnt sfnt
+0 127.44 mov
+([102 nt]) sh
+313.601 17.8394 mov
+([37 nt]) sh
+330.401 145.84 mov
+([64 nt]) sh
+.113725 .054902 .501961 rgb
+%ADOBeginSubsetFont: Helvetica AddGlyphs
+
+systemdict begin
+/Helvetica 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/e 
+<10bf31704ab2503030fec2f45e7e5cf47fc11d962739122c4e54474eff0e
+1255b3d1b22aec657aaa4e7d1bfca6994595e2e49e2858d732f38a805696
+e0fca4d794509958e8d5ada6b628c05ea9d2142ac2e719bc3979eacbf36c
+3a74f5814616cda1f804403494184f51057654c0eede1c814f65> ND 
+/i 
+<10bf317027e610bfa7f58864b8a844d682ae31b94e523457aa42d5ac0fca
+407a62ede509> ND 
+/o 
+<10bf317047276c4999ccbb3f4b024eb7736fff85ee898fa8dc5c493d73de
+8f82f4b642c44d2a87361f6250688ccf63358fd216a840baa63411d79901
+d9fada0454d7f87cd033ea90c8fac0d323> ND 
+/r 
+<10bf317036de1a736fd7044d328eb56610489f58e06f422d5d8826e2d999
+7d6966a26c649da538df984b0bc9f0adb2b3db3855728badd951de41862e
+1b15565642d18788d50ce6c0c354fae871a5368c291e4f40af513579> ND 
+/s 
+<10bf317040c2e74a50db8320b72aa362422c5115d7e36f2a575bee6ef5a9
+5b7f1ec07cceb340b8eafc033516a6d135450caf6b182cd4d156d706dadf
+7b0d04532d42adc5f90e3e8d4d7190e1e817490bbb6dc111a5ff60467263
+6f73f40380972f48fccf2a1a1743a966452a2354835f236c08012007bc24
+28ac92747a4323c158f91e70df679842ba2879a730649268d53d90ae684f
+619220009223761a805f27384176224b326fc5f1d462619e9a> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Helvetica findfont /Encoding get
+dup 101 /e put
+dup 105 /i put
+dup 111 /o put
+dup 114 /r put
+dup 115 /s put
+pop
+%ADOEndSubsetFont
+/Helvetica*1 
+[
+32{/.notdef}repeat /space 15{/.notdef}repeat /zero /one /two /three /four 
+/.notdef /six /seven 9{/.notdef}repeat /A /.notdef /C 3{/.notdef}repeat 
+/G 13{/.notdef}repeat /U 5{/.notdef}repeat /bracketleft /.notdef /bracketright 7{/.notdef}repeat 
+/e 3{/.notdef}repeat /i 4{/.notdef}repeat /n /o 2{/.notdef}repeat /r 
+/s /t 139{/.notdef}repeat
+] /Helvetica nfnt
+/Helvetica*1 findfont [12.8 0 0 -12.8 0 0 ]mfnt sfnt
+301.601 308.24 mov
+(40 nt insertion) sh
+grestore % PSGState
+%ADOBeginClientInjection: EndPageContent "AI10"
+userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse

+%ADOEndClientInjection: EndPageContent "AI10"
+% page clip
+grestore
+grestore % PSGState
+Adobe_AGM_Core/AGMCORE_save get restore
+%%PageTrailer
+%ADOBeginClientInjection: PageTrailer Start "AI10"
+%ADOEndClientInjection: PageTrailer Start "AI10"
+Adobe_AGM_Image/page_trailer get exec
+Adobe_CoolType_Core/page_trailer get exec
+Adobe_AGM_Core/page_trailer get exec
+currentdict Adobe_AGM_Utils eq {end} if
+%ADOBeginClientInjection: PageTrailer End "AI10"
+%ADOEndClientInjection: PageTrailer End "AI10"
+%%Trailer
+%ADOBeginClientInjection: DocumentTrailer Start "AI10"
+%ADOEndClientInjection: DocumentTrailer Start "AI10"
+Adobe_AGM_Image/doc_trailer get exec
+Adobe_CoolType_Core/doc_trailer get exec
+Adobe_AGM_Core/doc_trailer get exec
+%ADOBeginClientInjection: DocumentTrailer End "AI10"
+%ADOEndClientInjection: DocumentTrailer End "AI10"
+%%EOF
+%AI9_PrintingDataEnd
+
+userdict /AI9_read_buffer 256 string put
+userdict begin
+/ai9_skip_data
+{
+	mark
+	{
+		currentfile AI9_read_buffer { readline } stopped
+		{
+		}
+		{
+			not
+			{
+				exit
+			} if
+			(%AI9_PrivateDataEnd) eq
+			{
+				exit
+			} if
+		} ifelse
+	} loop
+	cleartomark
+} def
+end
+userdict /ai9_skip_data get exec
+%AI9_PrivateDataBegin
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Adobe Illustrator(R) 10.0
+%%AI8_CreatorVersion: 10.0
+%%For: (Sean R Eddy) (Washington University)
+%%Title: (rnaseP-bsu-alignment.eps)
+%%CreationDate: 3/27/03 11:47 AM
+%AI9_DataStream
+%GatkKCTec!Q)=A*"8i[BJ2UeF`_tSI1=P-.Bihi"mP8T[oaD8HLl at .S#udXWUg/'VqX=#<\^05';Uom`N+Ik$\%G,1ore%K=DR"/
+%Idj[F?b[T,?[hOO=+C+h6]B2U%eZO^gI&+-g$K#/prDR4SSu7 at V9bHrr8M@7$Tm6P5?jGenrriONm$kZIdsFfrT/G&p,B0^p%dap
+%cX4A1p%lp/*e++_p@@1om0c*l&-)BOn`&*64oFY8l[Sa*2nsb5nh&bta8+_uoBl/+r9So_q#0e;kF3Rnm+%$an`sPqD(hLTO5Kd#
+%X"W5NNt:usYJ9r!`Uc+hs#KFAJ$o4=Qd9$_?bUjbAUF;N57?)4q+oTorpq)sNSF*oO73,6AUj7CR(qT4kP3SoI/`:)AGt!Mick"]
+%>DAFOMk9 at Gs7!@eJ,SNsX"UYDr8]#K(.-mR at p/-7+/RQ]iJ0Yrf<<qimT7FFnt,V$a1Ut5c*9D/n7ODgT'sFu"@"PDb.bqWh`lVc
+%LY(q^n%Y+(](pE.+$SFAl2=i$qoaaJBc,g8(tX(>(r,k)cX+B_\!J2>A_HuN\0'g]Z+jtUs75[L"aRQR2$]096Ul+1H-=a^q;FSc
+%nYXniPc)Ftn/n$m&!smrY;S#)-SC7Vj`]Lnq;a5YAar"r5Q%G2mH#-+L1Ko=^Als`iL&4u\Y^"sO41j+J+[9brR'ZLHu."k\UMj:
+%rp\\<`Uc$,?amMj?bQBtp!o]6Wnu"ZGOqkYs+"fqLAC"fI/*2hH+'n`]Y3(A_hW1#f=*tj\6mQHIH<P/Y$Wp=hTU+m%tF/rp37;o
+%rqUQps7[c9ju:'EfBIab2*@,b+n<nWFo9N\YM6T_YMK2,IehNPp3'b;0.LL;r:/+2YM]Y09\:CaGZa\1Yc^bDIR&GZfB;b_FM'No
+%lUMcfl0GgnHiDoBPoA,h\u3TXJ,Ansq>-^j51`[#n*Tk3r:R*F?eg(jn`RZ7dD!,Oc:<N(/NeLBp[.Vio.AnnlG_?bjA-iJVj%&1
+%YJ:!"gY_2[2c%KKs7B)oc'Q1poe4p>rci([;K8?F/:;+&YAr_"iF0ulK6NmRnUUVmh``''Fo6`AF8s_Tk?g?$q3,T=mY6l(oUGR)
+%I/VgQhu;]W][(h.j7_M8T>'f1Y5J8DhL+fcYs'AO5J2G/4oiUBOPg(Zh=tW`DXd$X[QAASoZ,uD1Oa9"cBjU%o:KBMT>16Nq%B6I
+%n2"nW-0G3deJF:=IX#j\``7Ebe`0>1DuB>)27`\Of<73U=$Se_q=+)8#kDRk]mg!&Z1q6Grni1r]-%&p]K2o3rA]6AIe%Hkr*=[F
+%k1@@s#_BHOHM2t5r;?6#I,u0sk"d%Icgh#C0a0(bod?a<,VpA9^@T<nq=W?`1p1TqqR-r&I?r=!Gi%=A*+$UjcTTsb?Cn>A!6sj.
+%nb#sZTDb%ce0fb at GjZY:E9?]Ujbpl<N-RVar4fu*dc\LYJ,\`6^GF2cIf&WPrZb41rt#-6Y5dqa]6O,,hqu);?bUe.)SCCpeLTF'
+%NmAafIer'C_f,M at Rg2W0^A]YOIeu7Br;+Bjs4Y3J9TOs<6lpgUlgK5'IJNf[hu<qqptt64 at QF1l5C3=kQd>[ia)@Qam=0REgP\#^
+%rr,&#rq,:g0.*!.^%K])RI:s<?d at QAHLq'OXrk^RmE^7]kNDds07h?&jmf+<]pLIn0BSbe?bCd_iL>Te4T#6WrStd;iq6[6lhW^C
+%rSr*Np$;>%_]SmILW(A5+dU)#s7+jI5Q9>3s7ZB8n,NC;j>9ZArqV%j52Q;7n_efVgEVPP>iYVT`tioJoUhO8RF&k?hR8cG]cQY"
+%\3BmdHiET<-[QaX%s>RGpXf.dp_URbh#B`E_o%eW+.qoaop;;":70cnTdqtik8up[^^je(F'TAAk&Pl1DtcJ+/K]H6T<?"TGj!["
+%^ARiH_u(Hpm$FnWD2bB:!1g$3r:c\9j#K>OIlkD_DdPa/S*.aDmSW$/Dh!.ZRfDRNqXsd:0-3_W+R&LTs7O^NAlA)9V,.IfgK)m\
+%[%o7[DDD1]_c_FX>^6SJXe.lnI[jf3_Jic>B8!UnVU$@hhg at J%pD_?6n`0A!HhZQ3_+LI-gd'Gt/e?jPoAC.Or$V#P+TQIBcC)-^
+%8)>G.DD;b6\8KC8cJ3j>c$e/M5Q<85quK/+Xm5cPc(EbV3Ni,VmEbCsI.m!eX&iXk4Q>H#dt`-VjQ#.4Gn6@)DgZY[Dts";D]ZUs
+%.IOA]StGWF;S`)!0ABjri?6?aEmOLO4hU[;qo$HhI,8V*T>)Qi2(\!<2?3 at .h(u8'ErL!eYjecuA)Qs:H2mS2mcNO_1H[>I5$cY7
+%CZ>NckaVImBA^CoGL-%-a*Esl3`u6o7pk2GQT9M0ls at i`VuOnAGZj#)`HTu"2\.:W$Db[s2d[X;m<J5ARH>=[Oh8X+l*>R4SI=\3
+%rS,5;rVG&mE'M)cA,l/eJ%8<:s#0cIo4QY]4h(H?g&C\i8KS!A[rb-dGG"mJZiAqpG;jJGo)i;Vs5o,Y at o$2*m,;h'rp.$ITat6&
+%r_*!\4HA!"?:)Hb4aWWoa(n8-LOX^9E81]aMmr.=>lWi^m57Mo3njP-`ui'sbED=%d/Ws4/&'='e^n`CbDW+42ie'd)u#9%*u`&s
+%k2#'G4O*bIhI$DV4Qf'Ok,+bV=8&YRs+0/-T,H at D7eY;^IK,Q[YIr0QjMC;7n'uf#Npgo[qWJN"Y;cK#+3==ZqU]@%%JS[>Ik65j
+%oH,a[UX-9=6+:0*hd^,f4kf^qF$BQbh<3BmY-H+[pYT3[qRPM[jDAepSO\Og;4N>Qn'^qMVL3cYV]XqJfYAlTqd>[20#hSph.sQ]
+%mIa`PkGqAfqRRmuo)5bq?iBM87`Y5YpRoC`hd:gS\p_bY"fb at H)#JZ'kOA:G-b7RHh>YQ\%=,P^0DhA+=Ots5O+Hll:>XmndpEsQ
+%GOM6s#r"QXh!GDcmjKPJT&Z"FYci8s*ZdM:DqsDrT<;2LD;bN\J,eRo]Ust7n%GLjoDef\Haphlj(XAlm`t at lSQk-<oUX2%rL]5C
+%J+i_$*3ae1%%[7Nqht=3)P+a#pG(`Ls7^]R-gq<.PIU45fH:/I5'_o6KpR5Wq%#+W'O8)-Du,(X$^[FhEd@[>L at X]epESeK4oF\b
+%=RRl3]?Kt1?N(e4io:JR?hfWrI:=E#1Zi\&FEfoQrTM]*D#a8]qo?1bKjIjXIKJCg2;%ophja*/6[><Q:Oqd&h]ZldpTf5?NutP#
+%l)fI2jD$n:br`)Acj&XiT"k4XL3KTe45UpWmru^jfmOBn:UcYH4, at l,h!`u2?:SX_s&[M>m#sB"?JLT\+0VmHcH"o7ao">WYPSi:
+%]_,_dp at A.Z5b;;p\d,9+m.X]O,P;`Z/pf at FIlqt:;>K76odqM0rU)DCkYn\bg0T02M"d,"AMZB>$_m*X at D1R9HZOHs5j;4Nq-Uqu
+%%jBor!oC8V%i"&fJ%p:&EO<I#hN+l#fscS/ZUZ2!gjK*ncJs:s-gUQHo at I%tQiDI3o'P15?b0L10._JX_\^:$jSOkg?9`o!_CU`1
+%rI+9tG]aPlO71k2I;9\f1uZ,WI([2ZlQ=u+6l^S@*s2<8g&!N"j;5SsmDXGe at ok)<ACi1WLW?#Mh=&=?4q-Z8dB5dH<%$])^X#]O
+%-UHe("6?ht&rY3;q-X/mGFs;b&V'fFj^5jgD]^UGpQDFGndrgepZD,7>9?'-j?$^p3n!bOr-4j[*`qUs_n5ftT)@RSM`nrkg\Kn7
+%rmR3 at T')_P]mft"qq6?r;NKf3:&CuIjf8!SfCRJ-Q"MPnSf$U:_uBRdTR/fT#?'X7TAnbgf0;0"c0!9YIWW7[A7AIR<ecBR++NmW
+%Ds=HL1jHOEr(`4GM"-?UcT_B[*I:.u(A$sh6X?5Z)t*I$g"q/h&)TF9XPr"6X,m#E4^WL\Hf%`9n%NcE^*S,uL?)iUr;QOWBOV5E
+%HR82frHmHmc0u%OIriZ&muG%urr;NRSo!>[d=*j&n$/u*F7 at 8A5D$*MTA<rU;o#tVikhQ_.Ju=NM[U\.TmW+[TPkm$n at S#7s'Lf_
+%msaNY5PF,h^o%P at cea*EmOq(UN5/4e'gr]Us8(m:LO].4"5I3ibc1X8jnl7\HWPUpl[O:`G:mp<8DFNmj*B8"=!#\:O0LqIJ_0[L
+%+,Q[eZ1=*G=s(IQ&3mc&O+6e^&),dAhd?eA``HMQ(A'?K-2-2dj5YV20CjH[PHTIs1#5Q0q"qrBL&P`s2+oRholmRuEOk%4!p1/C
+%^;'RCmDHCejRE^D./50koEXjBr:X%Ta(lJ%pVi'2!W4naV`U[Mf8iMepB7eBdJMckp?[.COlGqADX`(JqI@,1 at 6sZO\bcr/]qUR5
+%_=pXGLPU;^OE[>@nUL',pYYq1Nqq(hY7UCVIXIb<BWWA3TVo2pE*m&Lp])CrIUCddS\#ni&&!95-dNs8oD6J803asCLS_q!P^Vo[
+%m!UG>P&f6:R?irc]kf^jSC:eK4_?3iSiNn,\a3t]C>-_\it?^`0oTTagR;?K at nh6@]l!)DbrC`JC>5&NorW+QSYI14Q>Q'5loE*L
+%VsUR$l=%lDS1U at S3F^>+fOIND9kA4%0 at mroQ4UK(\%$?Lf\7!uA)GEMp;i/5h72Auf6F0=Sfr(,ftr'$QtP*q;YIKk4m&R\2\%Zk
+%B]7/a/7[2W7N*^rHeZ+_CX3r,5$L83?LrWc*"E0dl2<`n/8=IY*.ag:3C,`9:<Qi7aq1)F*Eu[5()bu:KXQ%.C!<)[c/iVa%qe$%
+%QM[!!Xc7C5BU:k%@@uL\di?E:T3L,=nZCLaIn_5D=E:TRZn8JlN$F"eV!U^`Qa6)8f!_b,Q+WX-XB\l]p>4*JpS70cm<1#h9\bYS
+%p:];9R_?=87Z?;:BKHlVm-.b8IO_HRC#SCin];qHi+SX+)d!//=P'l+Y462-Sbnh8AP9#qdb9]rCcUjic<+9-cchcQ^('g-q"DOg
+%KK-H'(lm)Z-Qfm?KJE at dqRN/D$@Op]h3W_APoY3D]1`'7):O]gqn]Jj^>uSb(lqYnJRKN,o9%)93K>DoPuhH'$O8nV/M\((*^WO`
+%Es9&+YcNFJ`K'1kVKEp6;<h&gA*1edpgO]+e?u,R_A\L,=F3/s4QAJ`a<6Pdr3YkH2Q"&-q7nZWhAOh=$#DbEl;;?blaiCe6uHfO
+%YqO`lUN^a(^$XVO\qE-6-&+R%^p7ne1\]RL37em(?$Au:?q$nF8!kI?N/]X,#=DE&o at pOW"WKV0?[VO^4sGI&pa*Z]PM&N9PhP.Y
+%Na"ZanBHMKj>eCd\ZG`"Qq*R$;_I5sYfQF+,;7)X?k7So$s<f`QC8\qI at c)e_gCCW(2RF!rMXejpQE*id$a4HnUqA?MO73$?mB\<
+%[0A_t1rreS(gOr'X)W.pgPK(k=#&YLN"),8[Y:Ddk5)lFifP061RBs0"qD#Vl_3'.:HWikC7jf)O)8^p//<D5ehf_Hf5PPiq-7hT
+%ok4pOMSL5L'Y+)-ED#I%F2J]3Z5ir3Z,I<"F5VlYa!euc"3!(gbQ-dJL=U=n\W=77;gDr9_TL+*05"QK]Ho6B2<U`QN?:P2YFdCA
+%Yc2-/SaXm&MRUQ]FMqJqVAoj*@+^kO(:R^0N8lX[Y,-%Vf=A^pZ,:YBoK("-A`FESTS#!L(eJ9o-9e`T*g\e9%Htt=]?>F506)qJ
+%dW#CZZS%G?*WTi4I1%$EbtD9/YEkU.in:dN&pHJAUoRnK&R+!+7R#>=]ak*j:MIu[A$pNb\)ek&qiYDn)tQ13pcb,0Yb*<2G9hnP
+%]NaDS at b<rnHBpgdM%!EKc=Lk*a5M*],9?*U*g8j/%Sfsn(4^2;`u-4)^MlV7gc")cb]n^Df[5]uQ>ITh0l>[j(#oO+#[,43/Rn"Y
+%?8d$TJU7I6NJTmF34UN!1k?/!m_F'5]UfHIOVVnK`?9=nmu4%72Abe"a%NYe<b at C)/EE73Abu.MJkV-g;K5Wp\U\#A8QqONZ=4>H
+%3F4p(hGaSBJWF6'K.*r[-W;5o&GY_:_6Jejqi26rMAXOJ*/)VISd[tt">N:!R>G3(M$8Oc(nh,r?>hpcXhU2k5jf5>iG(9PBN?+]
+%0NQi`1,30QQ^KuBOi4JWIC.)A,"?t2N\R+CoEPFUm,uSc,]GE,$C9'!`5Y]m!CJA*3Xd!<\W:=Uo3!cg at perN0t>MWXGf)8Xt\B#
+%DIn3)`6&t^dYuAss)I-N5QZnijd_c?-[]tiKUjj+$rWTteH#jfp_fB at n;GsbC19/_<C)(mA]LU6pD3$sVid+?\9E<N&B9>gDI:`*
+%eV-O"l#Cg,QY at fU$m9qV+Sd./@ciS.85R7Ieir%*O;!/SEeqa$,/4-5''KS//s1,]+;8iFbpDlVcJ6ufCYUc!`jIWS-1=L!r3:8k
+%3<6M.69m0MW&D/H&^CTXjtgK[ZfPB\V32-oV8,IPS/ZVg[^D>UZl.<n)ZqC)-^0"&,:#MFHuUk/Ggs9X\LkVYIK1N6:.[j:[0J$?
+%6Q8dP:>`YXMb=ULR'Zp79(3"SG6Jb;_'r14j2fO!<era)4G0/o&u)b)]g3Q]^RZ*'f]SDRFK"S83Np6(nEH*7>=nu5lEQj=21Er0
+%OBpK?GOi!Nn"<E at IUEHUK6[[\J at u[2,%Bo<QIrXCHNj`XDMY>[HN9GL(p at n2-Et8i_%7s+_*ddU+a\@d2hJh+b<5>hI':W[(na_D
+%*1WPh99EFLV/d1S1o%F:!--g=G0)=F4rDA0*H$7A-U)M-AMPE5P\]u&4U;ld&W7bInT;S3/DMri_-g`6Ge/Q at JYZ$b/cQI&-;834
+%_9bjmALmkHRi*i=-V]>:3:##/4TO6 at gqge'Kn+R%)aF]b0<l/11Iqu*R98um6*^RNQ?jWo1+S$k"+Gkpi#4;b[d45-0a#Q1g68uP
+%*l*R]9W[XN!<ObMMP3SZ.Wu=/>o4q#0qHJl=..:MAqnE*&#hV*"#'*P&&mh,=p=@(mE!K``X#MYgDPBf4X-cC=XQ<KXt]ED`EDO^
+%nL$L0>o at V\!P[WVCR5R?*ggO6#=F6)8 at O5&KmG:HZE]tf>R0JLo>(h/e=!=/<"O&"krNAP#0:AZ;%O8"Q:\/=A- at l'[W&\f[_.Pc
+%86]I_N!.Od0U^3'5^o at A(m]9Z!j[,f%IeLZ\e+.WT*><V&Ogq)C8r/#Yo8.B%;e*07lg7>70D="*!9+>D2<7'f0G2i:d2a/JgG=`
+%2Y>!qk./<R)gAOuJ1!)TK=^#C\B at DVN.b<2YVe:C4f!mqC.S=J[YU"C>f#S<`/,ir$0!lrE]Gg0e/Q3^26X8!I1.278=FBK#D%WA
+%`@I??a:"468pnE,lVRj7a*5#!86<=_/V3dg%q=<C7gKA>"I$_fq((/2Xoitj5gmZ^*g!!+LmS227!>sOg5tFR"]pU061NaG%>],F
+%NDLbQ*&Dliit`7/12dJh4O]JZKHs?r$8$c6g2M"9H3:(Ll].YY]SR'4Yq+n at E-(LNKZJ^;-dZe8qb#@lYArT4/OtX*-jsHP>AY6f
+%+%Y.\j.H7TEW:\^e.:'$o5MTl#Lg5!FU1C0,DltZM5`l.&1'jS>b=jrOd*e,-;[Ya9]\M_0d;E8,O6XG at ESrs%;<ogpkL'PMQeD;
+%pi_kuKuO:I;+^P:mk at W>*pT/<g\GD(Q9p!3Eg8^OGB2SnOGqTplUju?%W=M)3Rai2EPXnG&Fbm:T]\4A'qQ6Sa>fpP:t'h]_JT[3
+%58.H.3F=T$V/2RPNY,=;=usQL*agd+NE"W>%Ktrm$'S1_Ls!,+!3GR<44Z-Se]\F1q':M0`ekUeU(r3-Y'Y!/&Ve,a5kE_::k2(_
+%8!%5:g]Q4bM!@A'e.K_$/7-J)!4W;8cGOkRLlCXCD*c(BE!8eW4J3M/='ua,Wc]r at R$/+oeeo^0(e2LBb.m^8erel1GV"GW-XJQH
+%#TsV^J7r=,4tq!CV%ojMau$>g*I>celi9-k&=(U(gh'JuA%b\pf0,E+'W`meV[.''=U6-REEQ_6^B)Orj:>(?W9hEWiHt,H!#&pu
+%/r]Qa+U<??@Mt%g0'Em&W\lb$+ at K6/Ft>=Zr4ELi9 at -9MY/C/]i#D6GCW#QH`uX!cVLm4RL0iY/CaN\4Gh3.cOB5Zjh$H[12I]75
+%aqF@,8EU96re0\NUl/*1M-<ipqp1;u&OlKf!OmdMa+-B*LtO>8B/nW-r5)<M<r`S!7._s;^J0M.Jr*#!k+u>75TIRSn9Sm_k^_-Q
+%KQ]V#+p8JD*"PtR&k:Wk<6-FL5gl;!#+0=eMONJ#@5?2#dZncpBcm['o'X:d/&Z*gr*g5An.erTMF+1\f1Zpt=<3Qu5$/B)1E[?!
+%-J/uD5*5'6qA"hjL.\7C=9SDZ=YRV5,sI#VF,^>.Fs],+&\)Dt#sHECbb?ZOD(XrsINYm!F6-Sa1*5?JahA1^&A]#D,eY99TgaK%
+%";t/@J6mH\,RP at g7RD'Ean<44`h:frRa7tL_B!'=r7ogVM^#i at AmNgdD]@&&1^%^55rNfd;p%ea"Z=D'#(dm$WpnVk-am;6CJ4^O
+%#]kr`_2c<..`J"-J/A[pM^Z at LKA^mh927#C1]eMfh&I5Mb,*q`?%qMIItADeU/3WMDB7nl/4@!_PC6FX9ip`o'6nlJ(L8UuYToNP
+%L at 4Ds#.c&/"NFGA7`$Ao+IEud.*jpbmLQ54EuM,)#*.htg<"HsD+=ea)[@[*iEohV!Tc$Xi\Ik^b#I<\KJ2Bh01Eo;-qa)S1'N:$
+%SmbGD(MjY2JB.s;&kk-*6heu:!=V+JZkAY4>K'aTC=aW&>O0KJ_^Cu57&q4Gqa("On:=I?1Hr\/J8jQU&d@=??-<CP5R6bHW"/N0
+%M1[f63hE=@Z<Mnij!VXLi?CUC5/Q-\[fsWG,;silTnnISh[(6g_/C*fkE[T>O=4^/J=g]^/I3m!LrmX^\`q&KF2/3(RD$3l!``f<
+%ER;!??<h.QP02DiG"g,u!(+=!Y"5+K>Jf2TQN[p&82>iN_Qe0hQ%Kb)%\OjZSpX#;h?P0/OW6nnL4'V$0ZK+9^9?=("dXuR_e%hb
+%DH\dO8>$3S1/sEm:Fq0B6Q)@GbdEEj0#=_X3aemG1sh!O&K`@VJV:&6n3,d32"Hesl_^W)d?UG`3tj8kQp,m>Z%,kD3^V$JY6Z?U
+%o#1)3^h2)">bAQ8mjNl!h]UL?!II<`1ao:L4OG.&R>ufFG&^4dkk`>WhG&DeI1b\/4WRYWRPDc%nV)GHcjY/ZMo^Fh!\LUK-a$'X
+%cs at B=EHd7S:)"q;R,9X;$OFN?de<laLVmp/!8i)k@%?hA,Vn*Xoo)!u2(tI1\[Y<afS,<470DO$)G<rm\d*s\!::1rOk9:5K/p-E
+%M<!oA"/rbp*`YIm/LF*^KA/_jN`]Su6&Hib(`GC#^>oCjE\SZFD:8at&E8EU2/J]eg/QCK?ZSf_7;I,]Sd7odE-Z+=To2H^d>/D\
+%D+&Ktp-Aol/IY0#UllQ!P6foLd0^^OEucrYJue3V#S2Rl30Um9F:LSL>mGe3Va9r7`-+IUTf@]G^d!GW,pIXSUVI=Hia>pQ2qQi:
+%<W[maQjg>(\:Nf[.b6kP@%tP<E47.=MUVY>ATGq(TJRkBpqV"Y/.*-4$rrYY,8*4,k_Me5^q*\W!P8ST;5FGm8.=4G+fYr-UT4B.
+%VYppC.,]UaJ;^2<$WAlC2sC`gf<HaD"9;mLOOJk;GW!qcQ5X-?81/87\\OLXE)U#:KOo\EY*%l5Os:`&dg`;b$=S3G+hZg!&8&Y_
+%+>+-iDBr:a-0ZenI%3aG8aIWf at +1lgeTJ>1IXi\O"u3(pZ]Q<s!P1'o-0+A#"$WA+!],LE6bgE`(Xr[DdSUo#$@Yqs)/\V9G/5^`
+%Ea4be"".;K(kWc;/tq6'+=7(c&]XEOHUKJC+*J-CG:jrO"n[!-V6:c"ILq#qNj*JYcmDfo_VQJ&&YaFM7q[lVN0&t\"'4Um`WiEM
+%2CNuDlI7Xq;$P0D=&ZUl=!nhtVL.=l8DPL%ILkWE#R?b%eDPHQ8c`ou2]`Mqc?;n:)Y-.\hE__fo<t;g))BeLcQ1>UN<cFVTL<<7
+%%/:Et$QTL&i at fk&K'!)FJY$p3KS2AT]+*MY>s^g9<fUte&oSf#SZ?B.m#K8(Y*m+LD[ZuOlCQnih&.FWY/$Mppu"'=a_V&RSHC!f
+%dB"?\"6G(GF;Io_$SP?8NF8<5)b_WVMB9U/GF)rC8.OSt8iKT%DJp\iO<i$&d!'^HF>-=b0ic:Var$-O6/sH)&,.4F&L!LN.m>kC
+%/]PH'S28cpaFK"7i*N_meYgTJ8p+.r'S5'WE9lH97p=`'W.^*fDoCst?7Bb,K(+T^Zf#8JE<)nGo$0-q<.b"T#3a>AiCUgX*_c6_
+%"hprqJ5,E&ED>AAUbJ3-+%?e$6b*FA)bCuGHWsE*Y97S3aq><hecqQs.GWFgj]t\O#eP21Goj0rS0)a6)X-67%"*4#i">N6*Ve$:
+%OPoild9R+"q7s15-;F]^m-oFZ(,ni6hiJu%/a+VAm0:P3i$VdI"]g=5E&t64_QjQlWde.>FEr6#7"R<((Cfe)Nb1Rhe0P=n>MVR*
+%3]j.-_'UF9:Fip-Fns/s?jgt=PlPJ_]65q9k(S<hCOr6He0iHm^b[)f/j;`Q:a6b:M3H#Ec>0J3&:pQg,("GWL5BlE.MC'4#JBcB
+%$'U0AL1O?)V8JPVcu(C0B/VET;fO#p'#"^=L#isL+[F+E#U"-qH8uOp(oJ>;YU0qQk\cFuY6L<#p+-Fs#b&!0#dS8kRmDFAKmlNF
+%Do*J(_Ogf5OT`*i$)-i]IKm-/4=0?'Feee$m1PW!@U',Na%lfeUEDT(?@.M4,"E>PiG8\*:Xjug1/e>l&h__a!)cQ`"<3^ICc)5F
+%FhiBV>Ie,S at 2WQ=Yg.W3I3BG%dCZT8+W$5U>d8N)LDeet`=H2qnRIHm\H1DI1LFY1"\`.+41&Y$`:rN5o?-P2GPT-f="oVe*P56P
+%<?_kHhD#+CBA1QI.*S\1rmqW%n9k)OKipQi%rN$B\(!Ds>WUn:96*%o77\*aO-:g_!5D.]Kp`S!nYsp/'&?QR!B]bj30W]=J\;22
+%!LsP at jEn@ZX\g\kD?.a%]s6ne:=\%F<.HT)JV1`a4#;"O.CgNSRsB./e(lbR%i81G#\MEY,Fh+a,VTs*B^CI2,?7$0/-r//OoR^^
+%^%Re$#65>J'm5B6jI0jLVG3E6*9?A$.`3+"=6;LcYb;Gq'*+V.`GuEQTK/G_\D.U(0:EdlGZ7@/M-V6BbUES6(kEgn*EI@=i'XLF
+%T_0iJ0Ea_GnHWVX'lqg4mY%&>>#17[0QG!A8egX+,;rX$P];@!<#7TqmL&KOn@/d#BDdQC&3$9P695;e&N7Ll(]63))OKGME'1Vl
+%[P[nJ`=)U;I\XgcEb]1g(=*iDQ+NWiG#0(t&6B\lVa6a<fm',3:U6)AjoN7'eKmfs1H9QTKd_HV!lIj=GjHP;H4p/cJ@#_ at J7-/s
+%[gaL7i0$-C=#XNW>0[H^+>B,)+V9F_:?DbShjEMU*^bel-Nl(1rW%(8$p@\LOP()\#=Ce$m`DTRc at eY#1:$n1/h_f-ILEJa`c.Vr
+%`TK>*&qNASL.)cfcZltoa?(Du`>g^dbY at GT=H%b9Y&Kcj_B?ZAd@\T)qSbn'GR2?0^r#ek,Nck+i/e7^',m7D1A!19*XKWh1LkGe
+%m^>Ru?CEtM$!8<fKPS=2X-N*,?`@e@\,t'%`OZJ<E9BX%PFq4GSqKJI]D-k`#W`0C2Sm]ur*dQc&5Z;#O5bAu3[OOR3N*.un0^m7
+%L>K5"h-o9F(,)"X`-)YC<2;Ie]-LPm'_<FM at j*OWXWq0I0&3.Z*BFdNS,:l,^]^j]aVU<,RI+n?7U<3o2\7Pf(R5j/"o14.jt:M(
+%p8efT[lVfmAUqXkms'`uQ5El02.1IC7G`#mfZ@#IlWS7#_V]Ne4RNnboZFb#Nm[9HlbS6p89d*Xd5mNC/UV#4*,&qt+/'K1JDq2.
+%h%jd>IJs\0BRsVF8@?iG5k'qK/t8[G-a.DsBZQS2ZJGj`[;d/OG!R$k"IUAb"%nJc!B<boGEn7g07A^m%bS+GA%et^,N'V_K*rGn
+%atf%bN\d7<M.o;?+X\us6lO\Rg9oDW)X_\I/pK>8LKU1NjdmADJHK.Ip['St.*(%pX%WeB7BPV+pbk_NQ*N`iRGL+6B3F***bQdn
+%66FRepbEGNZ^O#Wlji&32Tq1JR[CVFL at pqU"W),^S63'Q44sb>ju+BV":<UDZ/oqqX2-_7a>*:Hou!AYc?N`Ei%In0]*N#%FdM<r
+%%*2%A^W.l&U(Itf%B$uZJ8n\<WE92L@[\%='/2-7'/cU:&Wd>@JL=q60#rT\kRlm:C_NuPC81#'BHY6*0\pOfE^396!#CPs9S+L0
+%X1;Zb@?0G;UV_.K;bq:X3;:\YK]j3(SE at X",pi[(!5K+>.=tbJ9(3MH(W41^NT#0nngdFudfSMB4$t?T9k$.h(]\j/Hd!]_"^P=o
+%@=G^!lNSh_NBVQ5P$_\oVp(T4#:??1C.2NO]7b,+_2ZpV\7A27WZ6`I!$?/r<seMDn-2YR2b-%L!`/rGLYjI'?J-)3r3?lnFI`ls
+%>CkVDhsfe3'0qAip65:Yh-is<3kr&3ktWpemTaI1(eIrmS%I2/6tNm at h`F5E?N:dZpPA_VF\a8ji6Y_r1a"j7dMrPfi1_!r^tI[h
+%:a`EUC:pSb4']"H+6^06\U_9%Rt[)!QRIle2?=:cN"9Hh()jN]Wac_lh`_BH&#pDWW\6fI-^K[YT"+">h;\P^QN/7c<R9ES&B7LA
+%:9&&5d84V"kAacRr`IKmiqq*+'0C;a\!o'=[-.$eYB;ejn.Gm-4 at H9o[SWk2EHPZiOL\e_S=;uZ]CH[q2dP6L""'aXeIWe/-=4)*
+%7=Ke?K$]n".=2fC`2%@]"sK1rLi^QT&9;]lB"L+<UDZ+s>-F4*"!5RsS=V`mJkLe+enX>`^"au8("]t+LU2Na\CFG<SFKEEAciOK
+%Ub+#\%lW(_3YWLQFB;rmE6fgOmQQ/f."9s#SqIu*3qI1W[R=dN/h1aVq#LLME'I*o\=^XF`7W$_UdgcB)bCWCZaV'ndUOIL=@9S&
+%qt;N^C(eq`$!8C)PUPaI=s0%]@E4Y.3M._QL5]6%^]hPJSA=(n at P<ss5DXc-"m!e)H%khojCE]Kq5E%u at hSkNd9?X(@D^8p3p4us
+%k>(7&IdoCZEk&AP)?3u8#@2ojVG(Jhk4(VT*#2nNDqljOQHR7[X!'\ZZ<t*Qd9Y6IP$hY,+`rn+3)*rtQNqL6cS:0jjgb)9"QoE6
+%Ip<81PcGu6-XuV7.UF-14'a;\kc4sj\pXVfG4G8uCr9eW[9+n&!YVr.>@G`a/Sc13#_4Y><FXN]ci?lrg_gG2Q\8plgRW=e.Q"$*
+%#Vho=8fV,`'Q=Tcg_R^^Rd#B)D=Q>j*`qo'Bs=gia2?_dC]n)H,3EUd&DQ, at 83o1mY3i7??,jtJ;p5=VBrW&%Ek!6rVlE1,0c3,I
+%G7`AagQ*<C:u&86o@(P4aq2o#!Mh]f#+atp at r65#[BL-mgZFB8ONnX2k<rp:d^Yn67TLpcEX4W32M02cd%tOKk/Q$%1c&djYS[G!
+%dpUZO35Ec_(He_P[O+acbR[(aA7?F\boLMVU;3'+Q8!*'S:I%7PNBMTaOr[S-l9T[>ms'604#khcQ2MOlk+!o$8DWB9EIJ:*LJRm
+%57]Ig*'!4I+niSrf1fL/ldnH)5'b'%nIue"TN4T=_XGQb-FF&eC0%Nc`pD.9C,S0YIoq%RZZ-4#OM\.q7phYJJX('6"[f9s^-qlj
+%0qW#,Ag*jG-jWIeG:WaO/h\=Y\>.l>I=33'F4=``1LLV<&UB8G>D/j4Xt'qHKNCd1CMD-66747,T]:iug#R;7*pc'u8ZTpjQ,&)D
+%JmrBeC>7l#j#CpQ$`aRpUaZCMbTLX)7Y44A`reXO*\.R8EXhAj"E+D_g]AOq3A]&LE(T/Ah!K!q1h4PI#Q<@G`GJGjh7Oco!=1CA
+%laS[AZQoan,ncu!9b<6cHDm4I[*gkK/g)(%5C/bdhA)HG.fhHj8D"bSkSb?"FCLs,j[0UVF;/BqA..e0a+:K"k-K1D@^i`T2ol6(
+%[bkHs)dotgld5YZ.N%I%#X?6H(rM_qmqqFYgkhqE^__`6c=D'pTj7u at cq:Cd^#5YpNPl$u#fSYO9EAgJXV3jECi5l]NkIN73+o1-
+%K=W1/ZeY3R*/GL[G`V:<*b`="'*>^q)Fl!\PSQES>gtZd\E8AWJ`gJ*&?k.=1Vr?uC\HP=)ckT.o*r)t$R#<QEXWdD3GrM2oE+BA
+%\-;lD1N-G0PX=MlA3>oTh-iX)+fWi2)7W&BiSsocFX[`_jPG_I&3a/eE'fM#_.(24CD[O at 4'pZLQip8&j%uYuKdMBPLl""#buJKs
+%W!M.HeH)(*e.W`o.6h6m4b/"e,Ra1W[>CC?Y/A&FJ]NJ[F?^>q5R\VnBsE>!YLh4giY!TIZDVb[a'n6jR(Ft01K[M7-fe&Tb2f'@
+%]_/M_U;Ko(RRLL%OA#^^Qi^XL&)_%hmKg0f\V>gq2LQhj'>j$H/p75l%*NmYq%)7nS;"e6W\o"<ghS,i2H*YLFn+0(AEL,7c4RT.
+%"?IW1#.kWr&4$nT_S6qg93d)B(r=(3RHe:fhMEu5LiTg)"r+q??oFLBR<(<,*Ber'3`9R#h_*51of9Q[Os0hG%R;"$+o:1Ed[9"A
+%?K$f]V!8!l$8&ie%0^:,gjfIXns./P/d8lq\F-50TQLf at -D+^HbW`DS%.e=k4oq?r<c+$\ge>'X\GKFp.fL=]qD^B,q/k<&=C_HN
+%_ossG3j#n7rh=Zp*\Ll<:n:n.7d)e5R,;lD\s]I<@,J-M@?qAORcos^DI2jbKJ<:h8A1C%La]`/i5k'AeS?UE3thYFE11%%`FZ)s
+%=t$lirrol/m/*UmLkS+"l,uJW$!'A#Vj[f:i;Nn$flf]N960M<Agne(oU3iC)o1S[d"X)B1:_;ng0lT\Oc0:c-s*>ZpB at EZrLg<T
+%#(XYQd<Y0B2\I?k.o'\G%)Q`(CJB%"q at ErQ+Q/=%:TV82ZBFX,ambWXn6=+S6hE(GkI!mgXWUk\Y0ca_3]R:Ih=Z&T<E]t:HH3:J
+%Ld\"!$kQW!XT/ZQcBP(!fqpE3)=]F](X6^SXRUD"O2Wct*K%B_:gB(YV:cPer"=gE!Iuq*dflgneK!cWeq0;M29UjX+GR&c<)A6V
+%gS4@!34J!`Mua\&5\#M8h0SV1[bXcV"^</`mr0sI)8QVom;b'jR'-d%Yd_Vl2V1=Y$>4.9j5)0_)M9B\E;.(AjR-uF`/Q'\(h/%>
+%+!uI1bfMDTgS<25QQ\.a[YcA;U+i`$]UZ'?amO19<1lV<f<IXgJdWUMDB1&:90il.Y4]lS](KP^X:P`#SXG,LN(!RR&GbQO7Sd**
+%iMbK#81o:!ZYd5bojA=7q2OX.&Ct.?`D;;t$fR#R$QhT/64$%,R>05V7$S<!30Yra0H3>:?qE=;3Y^t'fq^6<.KM;tY#u9gXT39p
+%!g\MA%Q%QNhZJ^F$?h<rnfc521V(J at hVD$':?[%go*q`G&]mG1 at o4QQRKH=D*XKEZR2t-&6O=67l[r#"-XL8Mje=6L%:BLi'RqVO
+%J5o//l$fD.Mq1Vm)lu"=E!2LrR7R94 at Q&'upK9D"6FS:V8!ei".-%EAqhC$AX5u_a[YP'+]uUpXUaQL^BI9;QnGjc+L+G;i at l*;r
+%`K)/MkOt?icbLh at 0P^:mrFr*1[XdM76KjhGg+hU_aQEo6bR.+$l,M8B>%#n^oI]F[<Te'?)8]SZ!QQ2rM%+&k/U&^9D3J+.p]oGF
+%_ui at l]JVHOKVRh0$NgHN&BN4.e]J$X"$)hp0]r.tW+QD`nU]GQ+NJ29l3WWI_#QN,i!(s*1WSh!'_#XN36&GEF20gR(2-FPCoXmk
+%cGPG>$5]56#?-@#)`=+giKh<q]oNc,?eZ\K]t=3#,'4EO)8?fr at l?s^Y(fK2AdrFH)C"d<%I^npW=,)G8Y->%r!X7S<C^#6R1Bf[
+%YaPSi=4];cTX[-u9lL5ic0CMED5LdZd at bMR2?)4&F;^G&-0G*1>cEc\UFTit4EE53)Pr#)L1Uk^W`sJbCg*6<QA]Jo?44*c0(IQG
+%?._D'>@3"90BZ0ZR5E\*!lQ?u20#KgpM<VS!oY5O`_MXt_:6b&9O)!K#FBNgs%lR0\HfS,Ag7s\W49ua_cSpNgBTA+Tn:PfK&2uQ
+%F/U)?[7TYkQq7M1VPYJWELLZRU&kfXQ-0Pj.gpM*2.,Kgn]^c/OP$Ma]ItR9Q&c()ZWXqV9qjXZ7V.B0#=I"N0=rLr'm(cZLL>B6
+%MUZ33F&X]LKm`%5"eQ46Zu?CU%U$cpqIuNOS?[,Y"H[41-W-/H#89P&o_X^M%j].=%mp%&;aM`d%\8B54)7()bcbS(6 at p.<W]=YB
+%2E$b&>Y8I)n7e-&=]IcXg*N2C79 at .Ah4W;s2)g.'f6/)YEnR\fX$DfP?cMASO\-^s71konMJul/0R-\-C(>3KCTWpi1J=.g*8Fkg
+%d4u%F'q-#NY3;B8JGU<6q?OZUpYUYtlr(f2md8E]3%o/D^u^&YWH&n"F(Yo$D^#Bb%KQnCma3:$@.P3pdU at QdFUH)m5^[lu>H$P$
+%=eHMn\I9]d2Z)64)iG0!9*DK(+QG50j?ai0A_#6B6.@\ppagWBiLC`DGS/,U!\%P^c.02lg7p6-N$Tb3>7eK6U=UWO/Ytn31LQor
+%$!66jf+P9P&Ss=#DBF4Yd;t$",:=:.E+nYK$@fQaL>SL?^jJn`b7IM$3?2396kKP4"TuV%(6j"Kn4_fSE,TDlY3l99+CE^I=f`.N
+%_S-@^'(%D)].XU\[plb6g!T866d=`<^>Yf74/HV9ZgOT^-?3h.Sbr&@SU_bDXio_e"S-N6cuX[_"d^CqZ8(:bkR,EXk*c>j]A%,*
+%^OBsWEJ@@K$geMYD0MP'TC5GT<umc/_D$/VMiZ]*9CiV?7?oMN"0fj)@2?p_e2CJB9)qd_0+DNBlHHD']0`ilb_bj1nApL("iu4h
+%h6I\Q2U!ja$N+a/[iTZP#r.>aWq\VGC[dh8ZF'soi:DjH,8$`Xl)4HqXRO,c:BJ`-b$`-o$ZJ8+l3Z:K]=\a]F1hnPVtE3=!(''"
+%(5&A:DGXBrbY0QHJbdQF6!9`GG"K)HDn(c6X4\[PDCuJi+p"2H:5g>T$`/L!5"a"nPcWOMn]lPG@#D0A,]:,6,f,?tY%TAhhZ,>T
+%1A,nR1t*M#K9 at c.=W#B5Tc,=a^'f6(KM9]TCY'=\3HR+J5T'V>beUg`NI_e`auW"gQaO_R\P8E1M,#Q,N@(2(Vh*>;br-*ps7+>C
+%_cs]DPls7L#<9W_KTX,ndraJAEO<a,&i.O/$$,4X`@W4jS4%sO2gmNmh6a\k,UZ;S`s+DU.^+(:)S"+/PPRn0g+ep]i'q33)o-0R
+%;M?E5QA.ZUi`1oQ<'XGFg:1>2bdii at ApZhGjN!uZ%\?-EK6(m)e`kfKf'3]F0cG%?m8cB#i!3MF_aK(gY'iA-k'@LNCS[!1^MlR]
+%c[=N>XS&ff$k,Lc";m#1)YSH2?57-D?m+htECh9hdBjSqU#94%0rq?\C`?)`*A^`Lnq*(X:;GrgXp)?'#EM[G"/JFPg2j7gSr:r%
+%^n+(t<"dF6WX3Y;UbA5Ko5h06dL6q`<p#mbZ[7\>goaXDJijAr016ld]U=L8G=`ZIMr8;O$ccH3NQ&ss&#%U6gl@^-q//e-;[6)T
+%@DN4#TEZ*dZdh0MPLT@/kiFM6]&g1pp>N%>?98+m1=%9le(r\?*cpcY>VmY-/U?(R)$7[[C,6tq.NWp#Ar=SfFmjuj0 at 6Q3QSrD$
+%T`sY2#.O`$qGlaB2%QY6kVouAP8o/&F]WpF9h%lZinY3!%"^J:PR4hUK:B^f3:7[RI3P=%P1(Fk4mOe9!%e:Q)Q#_3(lY'2cjfkV
+%>^s6'KmaYs:Mh'gP/Y5gqEo=t"D1Z;6 at JtDL23Z>4(+a.8%)O<bk]CfM(:C%h&W9Y^/@M)63/.S.`MYe`YE\WG]dd*)hBPNie3DI
+%5[tW;nM_6dV1n'uAS^B#oe_j:. at IIl&%FT8j\#IT!o1LX5 at HtW3/Q?C at 8&u5KBo_D^tREF4b:<5(?nmF/pCh9"Q]&Emr=6eZ?a$b
+%"3:SO'i/o&XAr&=@f;ZP+fi/.'9*jR4#WY`%-osX]p1EL%*$[Lb7SImVUuT98VYJD)X3-0$V8pOo&VPZ8:iGY%#ir,HjeM:'+VLj
+%E[u_H(3HCZRZ&'$`FEt9()C,V",3?e`@]5U2)IknNFnUc1"o</n0GPk.g&g at TkGT^'*\TO4,`?uRi?DqQ;(RT"?.1.ZkPX:m9^W-
+%3*hTO$kBLIj-=l/4WT0"i'q at La)61+9-+k,JA`"3G_1X5kUc$-\@hKLpOa`kfJS:igA<^k%C[(hE?)H/`QKb;NRKRLeMU+.7>C[k
+%FdQ*]cQi$iFqG57Ej at a?O-Q*J:tFZ!9i85jCT)EAM+Ti?p\ud=ldHYnpMnl^W%T6$_Ml16fP;ijZ5C6V:9(:#&8$,(!/_d+ZC$?(
+%75p#XemjtDMs`6m%&PUs>-X/8Q7Z;LNa=kSd=K*W'9-UphJ%g$T%C8.#$Zs;2lsK0R*g%.J7\&!LH?%p!m<bflSqUa9fn54<`S\N
+%2%_qN"7%HN>i5`<lF#B;YEIDK2OtEfjo<0ADFb-9"MJQIEPFOd\D7@;"7!Zt7L1K%0!GM at p!-9Q-?as=S!hl)p'dLTJ(sLdccso*
+%XF`LZ!l&8H;SnuK1P&eK>ATp>0j.Y1P;KDAcS19#&<Khr536bHj#/I^+?Jg`3+B4C('d;UE>d#%&W?_0[<7g:o2RLM/Hn(A,m?TK
+%Ea)c^HiUO))n>?pm_VI4C_m8/3.N]n)+)u[Tnu2&glLGe9/S)H<KY=93t?iKb!'d_]HJfJ#pmDYLq^Kdp0^Qpp_T15C40NAk4AX#
+%UGSWBm`2%31>MW:g3FB]ZIkAW3^C1H&I"i/oE<C<2`GH4?3FW>)bIgoTU?@6S=KA;0HDdeS7onHNjdK=Q9(D?N]9-$NbJ7N?p)%M
+%@K`"A]c)n at gG>`bf=B#=b[X)3o\'Y"$8%Cr:<LW*$eS%dL*^d+l.\J?6HF&B'5St^Jl6Hs"lKRrm^*&S1qs#S=RBTTVlA!5Y\iqk
+%1QSQU-C)B9pV(bUs5D*9(HiQ2!<Lj9c+ZS>)7l\IbS4>RFt^N?88PAX*NNf-)(nu"@Dr$mZ#lW3CiLE34sJA.-?sAcD1N`0b,_qg
+%@C=e><?p?rlZu6NJ_Co!r6F_&;DAgNAg^\iL*T$^VIM6$fLM[2/N8TG(FKItB*n[5JUtrm>!HQ79U(;cRR+2q:pm,<(4n^:LJ4J4
+%2VB*J)hFeuM$[/<Ut4U5S(oRJ3XWHK**M*l9PU5k^dY1dJO7#BjMAg0J]nkX852^4afSk0#(0uh&J%=8NBLaHS&I>WNNI:9EIquK
+%(-09tibl4APu;U5Ces"^#q"0S:<)ZURq*rM/Y+=hDFS0Ck*`_s2.1G8l"\4W&1",7Te5Z3<b/'VWa!-EWnk<V*$0ilCF>KB__.:!
+%6^h"VZ^:(eg0uk;juRq&qU-tU@)C_^asCh_;i0o0&n?iMm#i]Z]r[Gff^'!>,2,!8C5BlL&;R6g2Dd.qNI8=nj;-6q4_fhN2H]rd
+%:E9 at V/*g<@,pUJfiXSo(VG>_Mc)cK/6e>T+XJSB12aDBDi7P=)mKuL*-2_`Ded_`Oa'tlL3i2O`!(hl[[8?O:Zb]Qq<P$2pH4.+K
+%^6IkkC5b-IiP5p]L[>uQV1O)a2<C\RRddp+UZQ_O>2sMrE(e;)lm&ZV;)3]0!Y!ggpSkO_$E*@q>R*4(Fr?$GquUrEO24XoF5QEN
+%Zsn.Z*%sY5U^m32 at SWj1.*uM)=MB3\i5O>PYi+BN.B#!9+,Y\l>Otc*'ZE1[66\@7bgZ3<)^fiDA5Ofl/;djqOt--X2rH._OJ00b
+%egK(^Qka1>"LIJNRKa>@JA;cB"HS'O034<>RnCbD/Nqa:. at 8I#`s.9cf[:(qJEjBNQZ5F?Tc*G-LC9d<ejZj&#"Jg$/ZuI?8seH=
+%/g#XnLfNS3S at 0&d)>XaU7JCB_d1$UiR`0KW8ul^;Efm,tA'rg?mU<(;qQ5(Ah*i0I>9Nu`D/C5h4>=qo*iLqs$`itV/1*F%fBSa/
+%rCJo:,"<N.L#hZO%i`E3<T^m*bnT(:<tS27CrLp7 at Wp<fS$7dQ*%oZY/;Vif6,],R_JEE2Ha"F67L^I\0d8D&DQ&5)M-$rk*2U-t
+%)T+%SI&pT?6u8Y#`s5<?I*'V&C)]%3$#Y at sgc*<-NJDO<Dl*R"NUH0Z9B+bn*:C#-M at .9S2R`g`70A4&eVspGIG<(^,+nm(k%AS,
+%G9Ke%6$V-\'#nC5Vg1\^+KXll:I6P at 4B-`p at ifJ0S&[3q;"6VK'GT\ap2n3hgk3MA*7]9uZV.'4BnhAcYZ%!58s*eKc'VWg7I(^a
+%HRK`kP0%I[h9#`"b?a,eG)ub!"O.=hfeF('3MEJhAD&BMZFL`PXE6IHPVOCFA$_91`-`c:Mj27A[ru*j6gT=oCbmptD>,(lc)rnU
+%!q:PAHO,D/h9<=7rZAS'kIMR@&fT88eabM*U:R!.Dn=MFKjKZX0rt]+Y/'%/Ws[1-5_S,JG5YZ3`YGG([1G7Tq1gsu2Bi9)VgEa`
+%G at 832k&P(?p5qLkm$gHZ(N.FA>"D5io>Ghh5i'[G&9%mC\&j<WEWaINXU7D13 at .3pa9u1D:nM_1-8?P\Hkfil/t"L:h"0g.\%N>\
+%QaSar`X!"VZ=o91BE\F^3h09/%GT8S(3f^C0.qOVJs#LEM\jI.D^%X.Jt:lF[`M.r$7W at P$K8.?.LS'Dp>YrE;/dabgaH5)io@]?
+%^"f8(a;s7\,^Nji-4IcJU1p)jj="o_F(XFP(/2MYX36%,Q`FuBQ.fBbp2TD8j!^Q0QbD+s'eEecFR$b<@BM<#a9ZmRT-?hm)2GoZ
+%$Y[e^I#R8#cbi4+X8T8[gPt]`28Fg46 at d^;N5C!:]eZ$3!G=lI0%i.QeX\#i+b(MM-S\@pg6dM$C",?AYV'LhL6m0qln&+a0[KDa
+%ZReN;FW*lX$,hdWCTLk:@@=_jBP`rJbFkm<;'c]Pd&bnX!?Hhl>5c/$I<486)B:d*cA%n\(AJP*Hp:nE"&SB@\(GY18*[_$eN&5n
+%Y%ql^IG\R\p9HNe$2R;^gMm7=$EV((O]Q=bc*D"!SoA7Q_RdBk[AckV0Dul[l!TuBoG*UD^C8A+].MfTWYkuZ+E3b2.Ul'g(do?Y
+%_WP4o+:*O$X3'\L.S/n6cUAP:R#)S+qJi2oI7*"fc7Jrq&9IeNO^;UrnD%?]M%&(m)&j(PS!@Q_"n#b7eDNI*&'Kr65fc(g'.eug
+%gNhN%C_]9QM.5?E[m&MGn[hEYK?<kC+CN?%Yd"4X5L&I>;A*[?\e/B,CcfQF)"A%r>gX\3<5j2j9O:CNKdlPS=r,t-Nk^:Pkt7Fs
+%f8[FI#\JoU(7;9/"r(f<)+(X>8M>=+@&0W)BX9Ir&!7(fI>D)Geg3':fIs^K at i=o6Z/uT!]35Aq!AX[&I=n*c2:C'gRR*`9An79Q
+%l`HY>B9TM.X(LoR`kY?(%1&dPX%IH at p<@`)[i<T:FMj_l/]UQoMY7jm.05BnTOt2jZ'B-k:KN2_-tV6X5hcheY'G%B7&]Bgd12p>
+%dm/]Y*!H1OpY'CEpRHt9ZeHWX83Znb?JP&n,$`Ac/9j7e$e1KCX2Z*&>k%=?`\+E,>Q&&0eIKb(G@:pDQ7h]i:WQ8"%12AV#XL_C
+%!UGM%#)W_UZjcd^pT-+E$o6<9n)b++3SNjg9PqhX-9I@$JbXao+d<9\Lrb;)?+ISB6<ENQ<JlXVh7]iU.`Ji.e(-h[1&crWM^Rk@
+%_sDPn^N;P!_JHhIm-MEPd#'MX\F5P=Gs'$rXpk[G"U5j0<Hj?hHdc\lrA59o4RR(o<E")-`eSsBB/9T_c.rHU=1e9@<HGcQ7h?Wj
+%Bq0Fql at uV2#c>-Z(G$ds^$Xb_/]n2R(nnVK@:gXh^"\FM*8"e,k(3K`/9'.F]'Y!k6NGBC^p]JDkK2!&!>'#648d7lZ<YU>\C-3E
+%gq''0.c?DjbEtONES/!%@;<1t[L;uZo866oU.Yb4kj>5^>ogRpq%7H7gnB5_&Pcr7-oA:7-*mF"dHqZt3i:a"LiB:nP6\.faVI'L
+%eD)e:J`PR(`AC0P:0g/;]t"kD=KkAX/\Y(3F)`9+(4fp%a44_)Wi8rE],`n;3HRh1_Wd&R8ZEMeM^_KjL_I<MGd+a`mV3OK_;',h
+%S'@I]'lH=cR\=uZHY_:ieXZ at SoA7_%LODEN:WjY!IL`8jWi:=O8\bA%#Qp.^4g['$%88b]PrTgh$e`)t1*pqZGlWG5_K'R<&6\B4
+%?sNs1B7hbIBO,o+=/K%ca4f>hcn>#^`M_iuVmRE7Lu=JQ(-(5]I^A?cm4@'+WR>WcbM9r6bVZW>47&4MQcM[Ud9MQ>JgYa+MS8u/
+%llXp)>)(>^5,XJZ//tr:pVs1dOE4u^G.3go)9K$&'E)4TCu-Ze[b;:i\H]q>&$tfA=BG_c%#$sg![7I.U,`un(rbmU]u=bWc7U44
+%G2b-@;i/+D^-N<a1-3IF#RZP]?J,?C1c*,_=fZ[Z#4j>OKWDKbg3"=rc=@YO8OminiX'uSB%>jEfle149qG*>nP9"g"1:c6eU at dK
+%($A`UGUQBu[g:RiBO0G8M9]/=0It(J@\YrfY1oHH_0!NWlIpO6o.g.9=cUJKJSq;'ZD-#jNH%2M3,W5&QeAReT4r,E_h;n6Ik;Ws
+%R3ZjBLQtoA"+#Kb>->5PXG8%R)Tt=&^c/`T%RfBEAMIDIpPqC>A:_MYWuL6\eq6ni-dH,C>PinU%?IVsl1QMu2O'<*7Pk`gI$N=s
+%*$>7TOMqBs(Zmh4U"L7o_2HJPK+4W/5U),qpN+,cYj1=L$cC0.bm]tK(#*n8$toH"CmY6`SChGDE)nd,3$.%V_JjHu':1!2j,D),
+%Fi9&O?7+\7C7Od\4kfn$EC?mp<_SZHGU-5IX>EH;6)3UWiES9Bh\CM8[$nPUXi0-EA235#mMM!6MsbgI44^NW2ICP/R"D_;qc.eI
+%TBo*EE7\&"T52eN]%EQm"bIAmL8*N^NKXXiJDN6io&,$o#XhdfQ4JB/\)SqqZ[(`:mcQf/<cW$g5kt[4(-Pr'fXB^XUN*PJ(Jb<[
+%jXlrIHF'F]ndg1GUu[=BPa-%>KO5[AEN`F:\[uap\+B<&7^,T),h:, at L%iZV_u2pPnS.m`DY#3Z4[B(m4>Yd)fEK3l+u&"t1PlpB
+%@WF9#[b(h4FX%k`JXROeXlc[>&Uk1t9sZcpXQP$_(5m.:phME=UfiNBp]mCCmT+Q at qu8Ej``4VkS2q"/#bl=MA_Mq[Rm#,Ek61Rq
+%@[jW2^dRZQfrMN8f%!b>dk%r56m"'<itg#)@YkL0`mc10CPZ&Uo4?Q+G1tEphQY,a9hVm94t+2TLepG8'0qX4]FWHT`/LT(;0=g[
+%9/&M:]cj]R.-hIB+jJTXVP;cW')*J+db;oPZnOE\DX?%ebUV0h_OP!EdPE[S.pCQm)tr83;Crjq\snURd]e_PJ8i:Sgi!@.]Y?/[
+%EV1]uS;8e0!=aAtQgBS2ZLbGuIG4'Sd[<cbE`C9lOW?-@<@<HfW*Tk)CO7H(ePRrU3*\lscG4#M:%j9CYNsk>-%HUh(r'9Cj<)Q_
+%JTu=p&hQlBgClBc#c&6*JVP(Nkqrqb'=!a:kd+Joh;!S^[]oeliYkj5\9C<EEP6l&HLCLVi!dNc,%Fk^fLiWG`*1Fb!"KSD:m(1W
+%):El:Y/G.QMddhXg`US)Q4k5b;md'd=Q!"inLoboN#34`ZgUsO&nVS]C/<AjO6.#NY^A];F"rPTk3?m6VSkIc5bk'V>)`I%.c\M!
+%McT0%$:kBe(6Ial$S"gk6,k0>GO5la!A]7A\k\i5cog\m2sbS&[/%4b%X0#9]Yg$[8#a,&K\*S>:q")YqjLnS)BYA.m"26_1WAV[
+%3t#/^"dY[Z\JYiGJ4niek3&gh::DhbmS@)%k$!C*()&6/if_lA\)sK;@J1DA=4'-YI_orQ',B-$dp18Zh+e3o[5!GR//MbbnM=Dq
+%?1nh(<DSoSj8<Qq6ZY=oV&I9/GC'!8g*ms^K5q5%Fk[Z+<.`$]j/[#$I%lRFHGM'%)%dI<cY3DP!dPms*F0=F<VM^nMbl"_WgcG#
+%B=CFD0lPVtO2UhOl]BuH:q+?_KNpD%(_^Mc<$06aK%Y_qI<=*dh27b-Q6,/*PYG,n-/4H"g/oEU3Z at 1iUN,`T&iME$]M]iTlAuEO
+%WE6t]KYH8YKJuR1W=6Mo:"G)KS?<^%SS^]1\_DGAoRGH0MA?9f*d0?eo9IkMcS8C.g*6D<m(+G0 at q4:2W)nrm0lCr1H!("WM'[?(
+%:W5gp\;KG^lX?,gb9$#H=@!$n(Ii=\]cJ_Eb.<u$IOj"oSQf*HkYPNK8b76fMEN'g0$/Fj@%ZL.Lmr\Fg1L'c[p]f>&TM-B$,K;X
+%KTJk*mMV"72e!;Efk#XMFkYZlZ"[i/H-=3Y0N5i055<bm&@brQhU_D.mX2482M,`'9&)&GN"ni4aAdcU at QNE'P&&,#PF/<cO&W:9
+%95DCF"8H=eG>+,2Z..$ge=iO$C$j(QM9a-o%\eX8k/GnNHn at Z9\MJ%?_!5OL73>h;$"^c?GEd$TnYZmh_V_'qPB4&6Dm7Lg11OSs
+%ENX>]!DG9cbGpuiMZ:)>[JNW"(I;lcZ^U;FMG!AQ%;pg(;aPE?kO-[U0puVm+[t<1U:o:!`f?qsr9!Tj(9;RV[Xbj?!GH#u9m?"8
+%.KiC)YC49g/$oIDEPHd6WsN(3;gkk%1:,+ at K,%W"U7IILG>U=%'#]J0(CDpEJg702b(+s9lkMM00XEb7KV!(HB*?tI&!C\e?a)Ir
+%!UXmD`EqB=T7/YE]R'90,nV+YW&EI/Wbr#1HY,`_;XGG25V`ZHOc'RVeIpXZ?o[KlZ,7giY\:K&iI=U3G'"W60YO3!#a'0chI7Ge
+%bu(oS+BsW3+<KGP`Y+1B=)/J-q0KmMm2/MjpDH[#C2dea%VT:m%s5_06ssN)_paT/gZ4\0Tq##d1V5o.nXJc)gq. at G%Au3ugSNG.
+%=gQ<9)1=WleSNf[[LhhH;$_cXC[fke30\:kOV9=2m-8Ic4n]c_=-+-V;V`EfE"mX#6#7l%OdKd$0BR5cd"\^jkdRh(X#hdcc7Ss)
+%,NMkZK)lT;nOPV0!6o6?P,l:n\QI<pH'&O_m9Ajr>'K-V]=$rLZ\$AAE%rUL@\R,lF64#9s#.S1QF1*<et/Gu at 8h2j]+S1@&8V at S
+%fIUdO;@HAPKJ0"d1s;$I!E&4kK`s`3D5i<q+K,I-o5#/&Ql9Sm)9FIC%f7<jikfcOZMUZT0W<[8h/"1cXZMt8VZ>h'oe;:rlUGt_
+%rZ2*tn`a`iM$rFQpt"kge!t%RNk at 9&7D!CY=-]PjZt12K]$dpDlVV<6/3XOK+I78fb^@.M@<FXWc,KS1FrH$K)irK'A4B(2_\W'P
+%.:Om07;JV6/<>^O>9uPERYuL:[S+iro-s%?j%aNPX*GsSkG1dhco`gf80q*#O`cE?\>AN]8aY"f"o at G3'Y%d8TD%BF]8o:r/qRA3
+%c&2.%:KCOuPI+T]4s:ilU+C[#H"@"a\=U.h at P"5kG"j5M];Yh,aq_IK!<@)oVcb#uW0PXO:CaioLA at UB);#9LbcSB!?ojE3G.,j*
+%be$j`S#'Ajc.K'6CBfkk;Tr:PKR.S[4oh/aT1KTq'H/mN"YLqV\*aTllf5fn%+[?h[LNFcP%ADUnn)s.!@aN4'D_uU_=>\rHA*G9
+%jjQNn0fRWS*B!rkWABo9?L8e8h'r[W_Q?"\-fO$m[[_MeZ57t#p+7-%J5%SSAd_`RB5o7hJ\"0.7QW"t[t.u:N%8qqr+-ukd'2uD
+%-"[=5!;JJ\a".Oabe4<\=$8%q_k8pi=ZpTQe@/ZUd4;,`e".OC7'!h_ln_dPL>0[jOa>iHLg$qJ%i\S2Y at gO:B(cdE#[KZ5L=F\-
+%lWb1.6k0$b\uTZa4-Lq;!.rPNfM**5o@`lZ7ic_r0!*+$=Ydg40p0;$h\MJ])mZB_f5(UF&!^rO[PTjGA4L_T5UmNXST&@hnHh5,
+%g:BmR"C%(`U4'Io([To;gVN-,oqcQ49V9acD;2o_JZbu:Q"-RfggHR)D7>H7meaA(eok<#7fmjUFo48'V8"YV<aC0Zje>>4p:_iE
+%6B5nMQI/42d4p]_f_bp^\p&ogf>j7>M*?Hs=k4!Fn:'pDUle:mbk`<Gkg=V'cmooHdZPn%C+F:+QFeYcVb8FZ(?hcDq"'#l=OWmj
+%9V\lHkIhFNDPrcp@@55K$(R"0\90TVd0A#A+<`+hIlC@/Z]Z[KiEbo+Lb_gkdf at 2D0?N]n/OhJZV.-iM^"\a'$aT4ViQJD'josKG
+%^a?]^#7FPC>H[`Q8nPRu2%f1KjC["Jq`-@)c0,%bl]EjVm`c`q#F1\8&>fsQEM%%@kr(`dbe;'@d4c[^&A"<&PXYsa"_KjT(g2(S
+%l'cJ^H'@"Ud%`+Rcf]cl@)Ulge*`TR^g\(NmHe6>f9<K?Xk^+]G%d*+h;*NL`_Nij[(L\(A at A)SlR$F^('q,"DpPKCd>BPeI_--/
+%o@\qX%8UhqCaG".QC*sU53oKI,FJIiX4dn,=hO,h0Unc[rOH4am=PD_$q>@%$M4na9JM)D''2Ch7^&96BPj9qBNr!WblE&1fM:kP
+%<`mHJP-u2Hh8Q at nF?AkpU'fO(U`99>/db6Njd6Plpp!D^'hXPsa9StIJNrP=L2$qO0j<o'MbSOalKfR+gpP)[@qqn.K+c!7""""9
+%=$NO#a98+t_-&:9$=I3,&e0lggLA=O%Kf)%7\>dQ/G?lAO`/9t+YCigi?Oq]1=q*rF$=A%M8,8CCq!hA>mIDaY8l/Wc"H9Ba.kX*
+%b8C:RI*-&-_Zta%fI2[.Q?HN-4mT=*D?-t$:7mR,P76fh_jKfXC>t-8FuMiaL"/=P8:+5nqt8[8aG)"fjL)+%k at FJS`HBng$Mdg`
+%f3_8f+7ABW%$8pT6s35b!6N'+^^K9sn?O-/XpcMW=mXU;D9%Rb10LJX_CMak$Pq&`eF:^8,C$R+]h67uhq?5\\m'MiN?PNc3q[5`
+%Rr(V.q5)"L_-47[p`p-=c4(*8gS_$>[Nt0h[JG81H-*EcHF#o7q+AR(CF1OCD/1_NN\3rdZ<iTJF?Ef&9t&j0P_n,AWik,_[>4FE
+%iGN]S+%MY5HkFCQ at 6o=uh/uQ#1d"l0@=lMl(c`6K',/Er))Q!<7A%W0qN*H0D1W?8>VK+0Z=':SiF8+6e\Zf:VHGZp87_(;F4IkQ
+%a,]c00ANq-Q8lqMUBSlFc8P\fH/m?]I+qAX"07Ls&$,02Gp#9b$UKV8Y%(66U/oLN;ZmX:G+[\pI3shO.R&<u?:eiIfmV6.I[qol
+%.UY?T`E$7u\o(`.dpBTYcKIH5&4s8rjg],K]W(Y70s2m*1:b]l4P[`'T,*$t3,L;ib4V8qVA"j#inV3lbMs3KQ9P&d8MDM"4/u(F
+%b)<5 at Q8l!13Q=M>Wc<+\P>E#<rGHoWG^u?3]0%-GFi?J4A,,OucssPUYAN<D"<Xo`O2F5?SS<u-``u56ZP`)f9,=$QQ9HS]C.>ql
+%CLDa--t=49UQ1NIJ_drIrbN=^TJl&sp1CNtksdonn&`V;fb<ra.H]NuXES!s,Z.Ms;;HZ<:"FG=[3%!S=s<Mn/UObi6t*aYn]:?:
+%^VQu\+e)l!j!r6,";69&B4m;(X2GZ^o$IIR[U'[i0)F8Q(=UGj$>!iqRr*,ASc;d_;_acGgEPAbgV^CBS"U8t$R.6.3=jd0BI"#<
+%]f\AE(E`!pM_.u`h[6k6d>QRjV=&DaJXnu]N>Y<Kq'4-8L at Kh&OuPDBCdo$'k#$Q[XB0B._2?Z,OD`%f4(n5.q.'$$*K.U$0Gjik
+%Z"'as"L0(2\B>PsijQ)/6M0KEPnr+qA_ZkQ%(1+=Hj*k%!e<jU.[4#AE5b<0(5)C4hX"/B&W-QL;e5%k+8;89)fO]X(_,(l6;hZi
+%P#fSB)pR.H"<)s7j<eC&V<:[#mVR!lc#&MN8n5*;][+`/O:t#$U[X1*\&@X;DHD>OJ7VS1i(UB1<pR`,Cm]mt!2`0\4?E'abtR_k
+%AJTr'%*r%d$juAUo8M'P_3EO\K^Uf7e0073T:JlHT!,%I at 3:78j?4)[Ks>8'X;k'g&W_;pUO-J>E`Y2XO/DJn$XCgCWD(oB6[_e!
+%%h2FaSl[u(E>?_`&:eiF+f3V[6=BSlC95t0%[3_*)oMHthRT*U$F]AUs%l!>=$D11,J6OK`Drb_GPL$[GEPWU`gDQ=p at EEVB2n)P
+%V/]S7OPT'GF$G)!cXLY[H-Ng8/ZpIGF)HmlloqWR;K7EX=u,Ko>?=/h at JctIjg)icZ_b&;4j6,UF6sq%:7HKar5EJ^+2m,q"T[&#
+%507eHodk84]*J3]kI;J%lLcQ;Xq,nX`i\D6+.Xfg+.%$[!AETuI^@eUY+jSJfRb5ec_Ng`=pm8#U!XpV#L7XeZ::=h$k)a%mT58P
+%@!+W<]3$D!fHee=7i.c`#@)]*2'gi!LVlFu#%cN3_tJb6qI34q8FC^N9)ok(.Z+r)<_SH0mEXYO,>hVMVqi$t+*ZHT+7l'Cf:A(#
+%0!Z"6]b3B</\.Tia4k$Hj)W7PRn6`;C#3;X1,1u79$7B)lKo0$WX\aiP<[l*],J8%JTrX]\QQ*F'VoH_).Ve9aD)fUG3(o1P6-qD
+%?hHDaH*q;XYe.SCT/kA#.k"t^3c2=Fc!&>[?'mDe(7La'6[HGO'Q-b%X[s^FIde(?#f>KmdFnNHM^d=sMI-_m-l3sqA5oc?gA^IC
+%+_c9`=G%L at G*])0HOtB@:7m6WQpOKD?/$3BTDspP2A:ku%jsuXooH!.M+_'.Gnqo.3*`eGasV#87Ci8n!V^GZ:h$b%h^0;C:LMH0
+%LuQZ-o`>R_SFqLZg-QkR)m7a1AccQbI5.(8MYu4K4'Z[j=1_'H)$f%R?NLSI>)\j;bm*PoR;29F)iIK9&PHreO-81Sch_[?1;n.c
+%A'p`[T.5V,4j,O=om5DGI7fg1\t^"BHV.?\/!dVLS"b-KLu\YTO_'</M)51/]4pUa7n:i0_RStYCo(Mu;nR,dih9-mb?1C8Jn2/S
+%A[g5l_1/WA4Oh\4mRa'@!1.H_og8F7HlD$),A8i0LZJTJAs_OkRB*;\5,>taeXNc`[V:.fZ\*uo.Ao=H?j[!N%/WJcHckZj::>1,
+%I:g=bic<fMk(?ak5jIM+gG'MW3NpK12Z*H-Bu3<lh3rP$2E1PN,!o[gm8XEKpha;HM?gY14ZguKEZk(_+-4(aNj:"f+\i<gY2Ku3
+%m%80M\U?r'NBS0`ca7<`7eDE,DJmtRCDEls#Ttao,ssYsCVipUggaZ=m$9)<AtY[FK87Fo/"=?Oj<U?K(ef\<%i?b,X.,0r'V[K^
+%Y, at d!+2LcdYbI%A#2#rdme1^<VpC/iW5C'LcN)C%4qjV:WVEUtj)$Src0*^Oki0Fdb^:V?lmpu<.do"9i:a15kS)rpLibedUDCHi
+%Qo\UY,5P`_=oP.VR`I;S$9JV3T3\`\Jpk3+1:]Rc9P.[[Y(FlF%b'R&ipJ+"]qcN(eVuX-?kpt#b9Y]s:ZB0!eSYdjqZ"I`*Ml>b
+%/'.jAO4Aal+I3*8m=,FR^TsJX^,pD^l)r0f!6O'Ph;!rOlplj"B("88)dVp"`k>K:qXXh'*We;:(>]G8qeG^rn!rtX7e/>gXL0Q5
+%5,fV]25lm,0_ at eq]+$gtPiS1OSPCG(pb^f5W73.^jq65&;t`e]bUL<.-=R3eO&Z>3+1BP,S`?/ZakWWJP)m'49Rd:a^ILROacHP#
+%5rsik.1""sk(URVM1PO:Ur*Q(h/*!En/rr!f&gco[3s3KMG>Dlgoo4j/-ZB9%duQ#XD1buBB;BnL*d8g]-i)H=T,cOY"m:1E?bK*
+%c(OHu:5pkn4ZqE[$"Q^,/%A)]']eS0WBuf+MhRqnrr.#oO8RNYg%XK73!S"&LDccQO!_bY_7J`<kE?q[8Bc at BU<'Mclqt'ekNN at n
+%=ZqrAM<<m8-:oundbnP'nD[SkFD^5TJJ)IM3Ws(!SM'un@]/b^e^eSf=l($Z'Ft#_*gU/B$3H^boq"pX[iC,HRi'LdS[V"IUdU\q
+%<&dQ%2q/?G=4dCT7%5LcBTgk"n,mmIKh7>mD>^El;Mj39IQ<3dSj=r!q%]eNW6A*-3\7P&+J-shK*(qn[j*Y0DJA;ELP]W#7NF"2
+%5Kf9#"gnX"mjsgpjAL#o,[hmN0pO5Z1##1Hkf`q<I,+f)nHl)[rE6d1"'PYu\,<4lQW2[i6rqr<ClH[gQM#I+q3Q/&;R,lOFH:&4
+%Q^j at cSC#-QUOEI%IZf9Lc+o#CVXHnuYKAP3 at 2_IC]moKMN\emodapdq3<>\gMS23:oDq/=,Xt#,:6Q`?r<"2RNXPOZk`5p/:F0;P
+%M0A'Z)#%[+4]n.MJ>6]Z'Nof3(2-NlL69JgXEdT&C1Wq+E[82NeT?^Fp/;V2N$8ISajoJP?.S3<=_h6-,I%l"^FPKc`&6DJ8_EB^
+%T]&Vko3di*jm\d^`h#RL=s.H\pBS4rXcY7$B2?`2%(LARVhS=1`gt"LOYd,?8Jk\+2*'HoL9s_IMF7",cJ=RIg*AW72im$aD.oqt
+%L_J'?l49CiqVUI8$s!=/4*ortVV>4En!TCu!dF,QkAYOi(?O54OCfO5gO:ZP_+sEqa=X#i.KU at n7E"8MeXff*bY98RkSBR)#I_Nm
+%b['LaT!a^qffRaZj4^r5iXTlD)$je<&W9b=!X@(Yb=UO\2pWb'kH[*^M^=.kV?il7QcIQe,K773<:jdfRjs<*T&Jb4T>W6*22sV*
+%K%"a;1FakHQI=C7fZYFMkX"F$QM:rIh65KuDYNZBlgI+9Enf.d`,QWXjAQTD4</W_rc[9m?Y+F%Ugh.epoRE\bAk*kbS.Q+kGls(
+%=?kB0MTu:QigW]BXk=m9#4gi2-YfHKjaGo"V"@aF-eK+YRXeMiei^'N1d4'6Frm09;M&u<)ijd;om4b!Um0Phh\(PO9Y)?WI5GM_
+%c+3,>'AV^ts#k"]cJ?>ZPZLROSg-JK'kq at .Gpaq$\M`<;hq<TXb%XA4dU;()`J^o4^IkJ\L^q>bpm;+c_cpGpod%DCb5]R at Y09Dh
+%#@5g)o3H/",lPbl-"Ts20iPXa&!VdZ8kbUM6)dYsjp-;(@%!l_LugoW'H,S$P%@2[:j!p[-="Y":l>B6V]Nf,BKaa_%9-'m[a(LD
+%:K!T at B`I2,mp6"b:4c$)gWi+W45k'X%I9#g)oQ-^QaBQF3+HT+S3km]JH`<B^X/V_>BR4Hg]lH%Pjo\%W7tS0I`gS-HmG#PBQ^m+
+%*Jtl-2!s^?.lTh&- at 5?TH\Vm&H(J]3L")_hZ,N&8rIpU)l9df2bk&HDOL1H.^[e7g1^(0JN[Jc7%e at 0<]'"TQr&16m>$[QR9=f3?
+%%tR&dC?S>=h7l<Q$292+i0o^g"H0$12:jJ7?&Z>dYm\J*GA^>,_?:n(>#reK1O(1^SlRSiS[$adXiO(O;dq8EmZgf?>[N's1<5!0
+%1"DaR at D/YHhb)/8g+)p=b;@l'fCI+o8 at C$#06E[Hj*M-,X at +,TBBfg/36L>o)aBW&[VbkmEBa)1CeS[4it[`1P2*SeP-&l7):4Oo
+%oZQF0*/1E#SglVd`]D/o?_V^m$u4g2_/LVhMquDa3-!oPEa#A@'^<@PN185tSKf3C_-SCP"$;I$XN*IG9rQ#,<'2Upo"m!6mF,bT
+%,HPqG3=H%0*R!M/Dj.^rO6!'@@09qFNt#>m:S:^(59+HrV"]4u"'8K:L-M&cO/_Pq*B^9-D]sY7)mS-1`'g101flic":DMPZc6U)
+%!f$pEH(#:LDFJ#,VeL'NCnG=LQ.a+&c8p,cQ9<EFJ->\'\/@<Q]Rm3.n)'9?PMl%))&:"EIJ`&\kAl[Ba7<OI%=@<Q1C#L1e,O#)
+%&sUPi[BM1P]K^/H.J&lJl;G>Q*OqWu<!=#I^nSZ!]1,#/?o`-SP>Z#DI!Q18$/Z-"Q..tYIOI8=jt9A!Vp.i5Z*A2MJ_KR=g\g3E
+%Z)[14Eu.QueRJ"Lr?c1>ME^i4g7!TJ8_,2c+K1d7&Wt4dED[3ok"YP at riI)h3KHbU=5Ha@`'FSV+*2CR\Eo39_r=44:7I0&-qVl3
+%ARI^e>2EVS'!$T@/C6&R+L#!#k51**e:b'Gbj]#.Xi^/\':o4faeQrd5oR4":YtZFe"/;0GdTh"f+1fZ='e7nU"RjZSZ<(;]$Cl=
+%Z6tNPO2[FXZpRO8$7lIGfE:kVWNAJ*"G9nc,`%)thqWqH.8AC"G1AD"6cpSLd0YUh_5!at-)p=5!FAQ-Y"?p)-snQ]rg/"W>G\Ed
+%kX5nnip>Jb7P-pr)!giXofR9E!W`A^nDPn?fln9+*N#/sa9(Fc at SdNe0*]bfIrXTlR_3KrbGIUdHX"j.&KN86fVZ?O[q6I64/(hY
+%+`L3d*tkPu)QA3m:8Pc-',#2k;u-Eoq56OM&'"K\m.U:$rDPLM.AD5uIH[J(okqG/a<M9L:2'O\QUU?CCLr=Y+l2>IV+cU4D]&JO
+%Cj756?4Kiho-fpoo-RNXIY?HRm&^#bm'g!u8Z+H(V2WT:E!pp7lb(N_U*dupAZ<Z[1c[N;\s/F^G<p>YP_OW\@t__;a/8d=!M>k%
+%bn#[-:\-1bs7ifI"7C27p1ZIOS at o&cCZoO9er;;CWR[KAQ_^>\AT]JP=M;Jq73=%1q1>K\jjB,]?J675S at Z\2S(;eQioA0 at IDCu/
+%_?H*F;#nkj-oh+rmFo)KFrVsRC'S[/IN7gJ7lIU<H6@/OpCmb#%/I06KbY7CK,2e%[$L?(,ZY(\l'a:\ddPe^d3E('7V[spm,7ik
+%EaHib>J)(eS*H<]q4$Ta7q"Q%dD!/':"NcI$;$Y1No/;MW5kW#6LZ[4cX0I>3g\n0cX2iJUsW(Y#?1#s`_RU^jqW/GeB(A<m[*(p
+%3Xp702B,M%$B2e6a[c%8h`6^*!KtA'@WN^+k6dMlrPC)L\-TtbLOX6aCU(4qV\W$Zp4GSp4$U3SMQ(aTs'Qh3pXF#oTU"Y?k:&V8
+%fPd:79ugWPqR*/bE^o)"\SgNdcZ`Pf15Y-0$%pup>?CCZS*^S6WgN!?RI3]'?CCcgc4r0U\rfb48$C]a[@RH5?l+\t8\tk9QkTrT
+%GOUp!T)0gKW3bf4jmhIWCXTX65?h8pGlrm"e<FJ&N*:Ct;Hdrs0!TMq#Elms66"RWNs709N#LO&gVhBXnIcqXWE.\cJ!snOYY7B*
+%U_E$CHoP^?AX.;GG9rC>>U%>C(`_c.ZOKS3O)Em&1.D^t-!fi=g_qo'[R;OB'="'SEG,u(K-i3dW*Zg<JF9H!)E"=J`.T9m=HM=(
+%C%i8\X"U."cXRJ*lu-?Wj4mS,q1Un,%g9Cue6I:s$e8&_&/6Q"/4IB`fp6L)ESITi<$X-n0M,kHq\DQbrZ8h=)0OgM7VO_+FH`:k
+%(@IFS;_3-E'=gn%34^\->^>CKJp"IB]i^m*F4dT_]:"Y_HH_-Oj:B,V]&u_7O1+-hjgq&Uc*u_>cnib_j+1OINE"qFCC[tqf8GHZ
+%KAJSX)AqYhP*o99W!OF1d>(Y0*baP]gX]lpcp>mQj97+M**rU\`9NCm`]ZBl_HKBL:>Pb>d\9!K0Ml"$c!^::OdN9K/5u]BTr2;6
+%PE9r/ZkB6/;37N3lBKCV4bHnt+)O4aRY=)nU$lCo=9FcX^^JCi2Vl\P8+:+.`Bf[\8SV-n-YMp"(BnZU`^t5/kCTB%_)Q4!Q"NVX
+%c/!f<)HoQJ:c2[M'u6i(qSon1D,Vk3^<&'!;jC at P6mnJ0fns_"YB$eMC6C&'F`%[Pon8O&qBh!2i:F>j%UN\h8Q)e at 9mBG<7ua?e
+%Ia(K%A*?G<TmS4oi_)!Vop<<V7pJ]C<]k.]hrd\19bLs6PZg5Jh$tK47ma$&G%%"W>bslAVdFTT$_OQ\93^Q?2+!stV<=9KmCZj=
+%p1X.-PDjM;P<8@=c`,K\[slLX3BX/d5B`IT]]M[Y&5F?'jb4qH,j"F8M(&Zp$@_,q%[,SD9Jk"S,`Q<CfDcu6j<W__#IEMhjM-Ui
+%3OZc=g7+:lPER\;Y$]B94]h(4dX at f=kAaPOrN2Wsf9*6p.^SJY%Dp;n]D(?R!qBA at Q8:JR`Np4E=b-WXB2e?^d8=ULWC;4R<@!WZ
+%7n0Mu</:J/Fj.9n/O+[m9<'7h`dt>5HCr[:CSH*)c[B!#f*nt%Xc_hP*notiQ0/"&,`%\CYLS8:UEOb7?@;I2T9d^U>kTH-OFV:E
+%h%k- at 8ZKF?_5A%pbF^F_)_8HPQuC`V=3R&<1-:JP[A5a[HX)IOr$=i<R[Fa=F+s^1QjVnCo,_BGMKqAeVk0RP0;!HTOI3g&X$661
+%Itc\#RZc:PpKJ%Wo2IS\(`Y]-OKY at 4K0=q8;[2JR%U-H#NGXhdDW8kgJE8Uf:=3m5HUF#*B),=u&<k2K7Id-lG>DrcV/8QKN90R6
+%l*HVCUi^j+8Lh<?2@[s%8FfEo[-T'&)e<8gM6_anP3WUd7B'1E^::CDk*eV5?>B&ONbhi=jdlSj368)lrm;'uDN7,OAK[k.f#Wpc
+%at\NC%Le+So!gtP5ns!%5]2TGKu7b1j`bkJF0cR\Y<_Gq/oFgr\^?8Z,WE#$m;0*@oPj5K2W&jI.K<*42rr[X4)KU^8Xk1W_C-oo
+%^t:G_+>IU7BnDN^.2$ir4,50im9lqD#:)1fQ*N8"QFi4,$8q9)VNY:L\##R=^AQP4O`]jjm<P[h^+4M'J$FDsH<s25JSR2*1*I>N
+%*i9iIWN<Xu^q8d)>jUdXOX,aQ5!2"D^T<^6`G*c8fpp.,-5VQXNiK<ejO!!]*?8H:+pZ#u1t*tQ&eatU4Tf/*Q`MC]cj4u/3V80g
+%=f44?c17oK(_!J;,l7$M?KZ[D91[4gdi5M4di3*&e\`aE+?3.i:QmiVbp6:Y@%qsT_sBu8:NfIgDk3)sb_,ONQ0-6Dp`<Zn1,[e-
+%>a=LD at d&YNUE;>iAC_W=;Y,S4QTbiLEYB6Nheuq6KpGE9C3-0E0;rV<46:-%$X/RqArm\rnbsN`*@A1j-"Ls6c7N#=PilG0P!VHa
+%.-KqB>Rg;TG1f!^%bmjS`pY8HJ"7XYdEqR>(0LTTlnJpq&ur2A)(t(O;-kLVLj3pJr'ZDc_'<9)h=X%d):3%6PL?3.hI)b?_k1[^
+%T]>@);J`*eKAHgVPHE]>A7]XtZ at VV5Dtlqa42K=^'#AE]ocOjP;^;L25J;Qu]3,o]4s"&19sg*s"7f$N?\Tb2+rsY\jklTKD3Vcl
+%gh,c<%o\W%[;&01Ft]uMjA#B&5]iS:^"`UPI?R/B/rD$s(2TbA;!'b7gu$9s9$,]T)W0dMQWHQ*9WN!Lp+;F#\KR:mf]97eR:pp8
+%*(;8f>"#:5[Tk'jg11)g5D(Q5M:3;@S1@^V/Qdk&($S4DWCkL[Sp]t;DLLH1;+%LnqC^[uqKV1n^MA_1W_Ld/."c73bCfgH7m$S0
+%7JHAHg_:<lhe%rH$pJlsh)#0mWFP1p%*]9Fe?nbsBaM^$W!?G/T?0_`XE^_V"a94"nmP_hQ_D&g8+EiT#b35*2hl4moK5 at U=r,c@
+%k(5<phEl,ROkTDSG1IJAWMu:S6H;^`gR8-`d9M?8[2kgX^^V0AVabXHn*MXepr)A9WFYA7'fdXCINFR at 9t7B?I/&^>ioGFsHX:o:
+%(.T!<9*pJ=n"^*t-^c7M*IlKLB<ZC at NeGHg/+<4Dj"pohPOOc<=:-\MehbuK(f?+1>rs2Q5&eNJdBO'sSaZ:fl[r"]4)57FKSZnh
+%N!kG8!p!edmReo(nTjdZs#CY#mq,F(U7Y-L"S2jFl44k(`HJtY=7)e/0\;OXrM;hUP`-MlSuZ1f:+tY1 at J^0H_P`ekC@)"S#X.;"
+%#6cLP^H>j1qgnrU"M*>6Y78.#Q"@&n2e?>B4`8(aTq+276?QZ%!p!9,*c&"<LN);'c:U(?EFTcoTj?c,jf5']PO.#sPJ^%dC at 5-*
+%;m, at nOntU6(q^;:hg<j[Js+(Q.O^/03s3`l<sdM0>%MT^Xj*Yp$M5%uE6 at E[s*hRm3_>0cPL/Z(P3KA+>SeZkQdQ, at S3[f<Brt06
+%1Muc410jXr*TrYuVKjrkBK-?FFp`;F0F<jV2m7USCd]-d?'=FWm_sUVXC=9[J3^5GaWtNu(qH6maWO^R,jiW%?B/ALGoJp4KYsG$
+%7T5>COH_`Na]jbl+fB:3?hB.5%mOV\qcF8K?>;#o=CC6"Dh%OB-#Fi36?oi/FIX!,nJsU2><^DFcY;JpRR<TY@,@$7j&Dopcm?,h
+%WkNA6]a6o+$ogca,`Bm_cA.-UF5j^rBSm#Bh$e]5CsFC3p,\:]?L#r1^QYq-U$U6Pjm/BdBiBoAABrCZ34!"+*"rQ^<Km".bUEjd
+%iD/'S9k$o>0qb)EmD/=6heWL6A5iuDi3u%Ld,oT=>\nuuLNSS(nRAo1N!TB)-tVS[au4sH-Pd&ME*mk+XOpHtE>6Jkc6:c^Gdg>2
+%?5W;u\]>04X':&?-O9sTjm<hTegDJli5(q02P\q"JO7K0q$h!9A1G85(Y3F_p)ej#Q8ILAcSd.$#;Z;^4Y$]o15Hk`.^KL,dtS8N
+%aGSc@\1[,"T5E)*g!d[YK$1G7efWK.;^1^BaG2XL:M*lbUp:\Y6/<i at kFt>4lCN08cRTHX*Vj2.Ge4+pdUD,WRpq.25'#elc6\fh
+%Snj,S/D.fG#+o`.n?W0o=GpLbHq]:[B:.,L^o+h;!+0/#MgrKHQlPIm_fV$]?W\L!"FbnppcLWHqX5[?=t`rT^R^SXPk6>=P/<HN
+%&To3RkofS%nmXKBm=uD3>!%$+_/4L+-[G*5k9;A!*4&Vo.$:QqXH\uorbAns_p*BMWNp5Xk6V90-QC[U^Dr,846#6QBV#)n&mQ39
+%Pr[o)H at B^DigT>$"A/aXR3&_.5rq<l?[_kUW]bh5?&UtV[XQL4rbflEcBd'=1I7-KdAn.GIX0 at aTWFD'Rf#qjF*RgDWpR!MgQurX
+%;4t7T+-^#J!d8k5VoEFPj`L&o4(\9HRC.ND#BM>kL7K,6s4g-]Kq#nm2.C+tSA0tCoB=0s466D7eBabIqTrWR,k2/Z*E<'&2`<bM
+%-\jpWMl4kRI3R??a,]5-i64n>SK_l682:LC.Rr"+M.o?OVG;7%p^-a"$V/TpEUCL at MN4Fg-ugTAXk,jC1$HjhC_J_6ds3qFBjRuu
+%P>;r.:FWBVV0W(L)L-k1Wr:N)l=7OG&s>\T4#^U(E5*p$;I/1SHYO#"j:;uk2;1jmSWf9,%h0Z`hAX=QVXf9PZl>Pp?+BJ&Jsjpu
+%Bf9D%J&I/3iRerg;E.=P.C, at XFO!lfZ$`qlDf50MS]d:&'1e6 at LE0:8l%%(o@%b;eI9`_>*[`idYHjqhbiSH`N.RqW`?>%Ze3kW=
+%.805r((X=%]cn-ZVkEm/e(@1lDS!rdo!/:sc"=l[@W4u;6C7I<Pc*EH9DeP:!JeS:qZ3434!l-n?h43nY(h1#9^QF,V.>T6SYrWM
+%]cdPA/Cp"&*pt,(H"`B5r at lLG(VCDoPM;2W:J0rPi]=(YVkt.t6((1]4J\5IL%/[<K6$1T^C93GQBH>4Eh#])*B`1Y9ICG at i0Og/
+%ka@/M3<pOhp4Y!I7<J,YqRJ/D0"H9W9%mRPMBnmiAHFHfaI=PrK62D()r7g3roaU%"T=1lg\;-,:=8]653OPUheJYFFrg2!7Uga/
+%nB30FSmaH!HCAhp5A`ig6/3;0S"cE_ at IAq(3]$Kf at a@7QBcncP%n''\$3uE3%[n2>Qe.,OP^X'r%q'YSD(*741bO at 73GfHBO&XF#
+%Q!30!n1PpDDo7"*H[["jZ<9rcoM3N6Pf\n;'o at ZV.H>%i[,/IF5G[R&="m1t-X at 6@k2lCKl:LZ;9D/\l95^,SqCr[W%@Jk+AJI1u
+%*WtAN/31Je`/,p;\Ea9?XV5qF"9L[]F8j[LAGk,4?45"1CAcUY\"8HMr$9&!#n#0SBtQ*6DiDo$Yu)UBQfs4VH(mlEOqpi-aep7O
+%ia!16mZ\_--rU5 at am6(ij.q:%YP5Z^_&^Tp_:h'*RLL_WZ2iP,_$OntD%MnISuZPNaXYGn",aIT;r"QlqIo at EisK1qQ0`[B$98VD
+%QTF*;^7(e^?2]qO<V\Q-@!)7U"$Qi1??/@mil"pK3WZP^"bAG-I+9RoFs8O08Q7u$8"XtHDb^,7CXo'm=?LktKfdeFCDsocF35qG
+%dmbn)39BN^I\j%s8Y3XQWAYt;_mbDrG"u at M+oH?Cra,gpAP$`5B.o)c?f8SrRcY7q;kB3Da-f\m=Q[ZAI_#@J&/(`"ORD=j,%nL4
+%I#1E:Y/ReCg[,!J'^K:9a!6P='Q(:+bAnmloG$=Cd3k2f2+b^lc.*4@;1n!Ah/6OX<I@=%TP5Aa>a(m3l-/P(#8*&a4*)A(r>q0s
+%SWD?>kll:oj+\?IOGY:'Qc at E7j!mZU*0q,$3"W`B->EaS#1iR20,*+G4o4[4?Y6!'7dA@=nC*D[4e_e4LWpUlJ,gT?*[uo,=[l-u
+%F*/JNQf/-%grmQKh/BeZ)<[eO[m4LU([8'X#PgbulAH%hG5h%')LbB:&/eu<\L,4h'*2iY,HcsC;YdHD4J7.?[ag"H at D!h!0UO"c
+%03O4\>Cq(u[#k9Q</]8`9ChXs59)U79Sf%bB!D#tgRXjCq'jnsF^/e![J+)1Rno7uoF$&i)dM:R$Jm^9Q=.u3 at T$>ng?mp!A^T/D
+%(c6K>[\.X!.MFZX'aOVO3i-m`l_'SYJ^!#u&#3LfEiIf+o/hGs?jc=6".R9Ej8'e/ke$A?N=g4e<q/VFBc$3W_qU'M5r3V33Bc^K
+%c6%$$S3D7`2/+X,;`.pS4l9`Z\QGuZ at E$CVGb7b*af^Kcg)1`d=7/uOZU at E[/ipWO?O*0L.MZ](YNp6omcYcb7M6%uaa,MHo`-3A
+%/VJPCp2JfXs+K,3DtXm,O4j!iPMhMa?/,a\=?"RPG&4HFo`qq/H0BB'bu>YV9&2sT,=gP?bt09IGGiic\KCFeA$EUN=;5GU/kNM]
+%)6bas\@&^7Kb;@g?>*[^Rp*hppg!o#f$bH@"\pCeV>S6fc4*4Gb?GMs;JU]*olX&u*-b)ADOKcf-P`1W[2#&Y#+WT,3+sh91U*!E
+%dRA:`!KuFZ/t`GmPP7YW)*`JTmp*N>p3`"@'k9':m[t]+]<e4^g]#ptfb7fN^J.f[b)AjrKcW!lM&/a^G,/q3?Y!/NbQKN4[Q*UL
+%=o,B!SQ#7,eS=k4F\E>k=kVW.D3BR[n0=RkeEu8YAeA.$\"d=JJfV>ic$h6D;OkR'3 at q`QS?p/aa*5Wn8OWOQ37G4uS]5NV2gL-W
+%]m`7:.2*4rZ5`s_qW:qBiOSGX>(Ste at s^MP<1U[:OF at P)5Xq_232t>0S;sZO)$cam%T[&U8#'9/]i6N!lb'oPAe:cf%*R"@:>Ega
+%l- at DFbjG2K`eZd at lVRe[[r"NpT?k[?9bnujA;JdW5Ui%VQE2%"olSpJVgqH!MP]H]?8CP&[4Cg"\`(3dL&+F`o4SrK&j]7n2OpS8
+%D*2Z_2iM_[6G4)"!tBoLm!@t'!J6A=D32W(bEI-bXX5Hc\Uu2bb0k=T.G8ll]*(0qd`l_e[p2e`(j7#:X>Yo\.ZPrhoXtD'OD'^l
+%Jcl0#?i-83W at sftl'/ocL(T!1>ambhkW;/*n(+fJ\HiF'*49*@a!?O7W[],<Q, at EHrWYN^eDFL4'>fru:F9r%8utp!@]_ at MNr*95
+%0\]88K6TCl[:@NCKmY/Z7&9Q8j%P=0+[:"-bf`.0ZQrCj3jnjBiiR"iN)NZ;2Z=F6 at .Y:4ph+IbaDm at 4lA/$`HSfQF0*MYJpOdUT
+%rTs]._9,/2ZN[=Yg9]V7.MbZl'pG&Y"IW<UGMA^>T"6_F3k7=s at GJUPL#,>6SRqs#no#s<MS\dBFhph;Jl2oNLgtOs^Rq$A>IfC>
+%P$"XdemK5M'-)GeeQGgee"VoM%]TleOMM?\8MmcM'!rpERDS&^2_Rj20JV4R[id$qMu0"!Bj1huC+r012XT`(5)f`6bsX.=Gcm2g
+%e6*^>O#Cqnjarj8N at k&#q)G?G'"eMr-5l`qN<`fCr-_<b4Y!ss*JHZO1I#ql="$V%i7<OfCm<79Rm!HW3J6`SIEFkPFVS^?[Oa7(
+%&L<VL%/Hd#K;sj$oSP\M89PF,"%SXl(=@WH&tuaC,(,j3'8^7,cY.5k!;i/;Bb<;J072EO#->3bK2B_OpPD:<mpu<4MUYrTA!$O]
+%Qp%@UHZ6VB;t<WYXHDu,0R`('+Os.u;9G\u.RsJ8T\6SYpQ7&O[pTT*:nY\H\_U?8n\h!nCOUs'<Zq-J"n`H[HrPh>r'2e&JOkNe
+%`C8 at 7+65`TUd:E_H6T;r/_)s]9h3&h1AsDGp'M9bYE0d>_fd1IGm^fd+a\P>X/Gs)"Ff+JaMlgF0#](s,^BqK7DWU1k-njjfQIOr
+%kJ9^UL)u\h2e!=^4*.u.\!&P0f(h=c_H(:n%qT&@qp*+"]t1r,Wq0U'7$*MKdm?*^CGS!!lX;+1Z-_K,L!eSOV"-R9*nrsdkm3)t
+%X5?NEi'K!N.c$+8J\fp,O*\,5A7'V[/kTQMhqr>$3>@Ldk0sLT4:=N_G#m]#S at r0WW:GMY^\6]6K%\.oV<0khgJ1L8iq1q;oY4jn
+%4:cBF6BDs%q*8,1?E>[<9<l&Z[bDGMp-ee9!e!i.Mm2;iN%[b3mG%tFKcfuXcR_kDYI8;e#<aK.EL<?38[PIJO[F/5Bm_J\\Q/mU
+%D<si>`5G#1K:[^P85WY3/dCdcaoTAi7H7fm2W2C:`dN)`pR1d`#sA=MGCD%let!(RnbA)UK'5-koM^Yhj/@!'dG#]m=0G#MJ/!u%
+%gXSkB8Yl#e1_W-b^8fHNU!(`:Y4A>O_;8.A*!QY!\D3a?r%_$!&FU7MEI*(mb$N@'7$%2)RmE=V,n&?73$LAF](qrADHl21$[L$n
+%mTJ,*cL3e1":CcWNMlnF/KWP$$U=;)L%s/F?U"!5&Wm*8*d+\9AY!A0A"'n$9#6$*q`.FB$egDn*BdEIM`R3rQ"1RS]6m*[+\kl\
+%#iESC^tUu)OW$CE*[_27^b]WSeO>le-u at hSYCFP.00AEYRV[POd=5=RJV#FUVBcM^R!Jo\&b6>i_=&d&pStllZ05`X?Om$g;7D=O
+%7nt;<0nNEK(Sk:1,h83UN!9'QSp\3<,-%s^@=G.jSo^@:JajLg8.(]Q#32T)q52H8L;99K8kjEV`_7#DCp%?N'5N`L=eF.7Ws-;n
+%5UmAm5R9[<47r"T;s?*6(rG;>HJ'$H;Vdubg1QaF9-Hk#@uUuO"YKsYW:Ja'+J+_D@%E<6.DJd_lVSP*k<kE'bOJ'SU1\3+Nhpnh
+%ci+)kD@;*hK^(hZ;3J60OA'J(&:n.5>]>KL`Vs'8nZBo#qp#ObB3J"3^KGA0lqqBVZ_\r0Q'QnSY&,ePbXe%/l_U;$,t&9'di<cT
+%V/1EG?;B'F0W`aU/D&1h8_F0V/YqK5?C&J1=>^JM;6XRDb6CY-!4M!MVp+MVj"2 at 5blABW]nElY,4K8.\rHaerD=61$,B'j)gr3[
+%r]hm3k5"=^lKY6A:P'd-kF,LI+Z7K$Xr%F.]:r_DoU?4dfb3`,,<<np0(X1Bg'i@,L7G5/BG4.L%aV+;`FeVOAs2]UUl]^Lm#RQm
+%Q2#\e8Bo_je"!>'fC[`FTm(6,rO0T--jAa)dei8&L#o1WNb*?OC><(ceF(0ON>Y?gX8Osiie\Jt`S0YUF*ST_=Lc=!($XSD at 3m<K
+%QL%#(Qbai*Wl$@N22`X^^Q$/3MR<2K]o`GY%k"IM$-mg&.G>OUKYdD./d(?GRmf/?#77"3(4&`M%t,:=V+=."P<=7GWq)BE*6g]B
+%*,]n'!q^;S]SD1jlcZ07oJB5GQ at .YeMcJs#_P7SlAO;lmY[L-&;GH76j<U4*hNfB>Z?P1,+dP\Ze*c(\g"t2cVS$3`2MG:/U&J\9
+%06"SM]hci1auT!fnrUW;;g?BfaeU06KCl,lAZf^l4M/g*oGqoqdHj^;/[Q*'oIkO%]]4?HOB%J)1b8%:+G\eEg_(O_RPWHcleSo^
+%&qAbG[jNhok7R^\o^oZ<jdp\]XF1C%r!;kdhqr8\6632uL3`:0Ek[B%d65PuYW?L>Qo_,B25I(oK%YDhG4$I+lM2US^(LQHb3Ls5
+%P>dS[Moi8a at .>hX2(o,4hoA1!-ZMJLE\RVeSEYB#e0Hj:,DUXrU)C&^i/ns#kC)&sG;CCmoP(Pfq3%"i2*!TFV:TQfT7:kg4S3'q
+%K]L$*QRMJ[!n"/^:Jo*OpX^dX2:\7(rf%-*TU_G%MP4'*'iS?!Js>&Je7OQF)R6/S*s%2IAjI<GSO%^/T&e02LerBR+"Q3#1476>
+%K\EQf_XV9kkO^+)6Y at Y\o6_sZd$R@'a!Wp)cO:#V5r9GVB<(bm"3'Xce^\T<Bj+$;H2BlnH7Rq/MBe?>S.'92'W;\(R^0tWn&oh:
+%R`]Y@?t')sS#._m$s"]&9/#IM=[Ao[Q8aWa>\Io$i*?t%/<B?E.adN=mm"d$15G!&bO"/a+PPksh=gInc($QNG8m<HS$u=:;3L'J
+%=B-t[Dmb+`2ggdsd`olk1aRO(_)KX)(J0da=UrPB4($`e>o5u=3`R;p1=V$"r[Z5.H5tc.\.7l-P*/&_KnX]A5?,8MmJE_f&kj,e
+%.e?R%C7(01?FY(j:OD;^EF/u"lcU at 1Q-dG0M5bgWNqI].$5d at MMIu*B1GAuO9CB=P.atJ(8Fg[m(9jJm;jhN:P3(S-6kB'Tp^#Xb
+%^Vn8_Y(-NX\R.eaQq)'cE\J"4:g"GG"/q+I>RNS;&!E``RuGJ^E&kUPW]'l,jT&V_`DUI1V%^prJ,(IO'jVpr>kqd>&\PJSLGJT.
+%h at TZl>*6M"I&%bLS5C&JkP=&V7@%uilp[O^mR[C/;9,IjSeI))/V at M?j0F$%pf.'.kN0H1=LN0a7HR9Aa@!pamAHdgG-]5Ae?lGT
+%o at Bg@pLQMMcF_l6(?T<Q<Q?>\'&hj;4JeX)nG\&;!R%A$2jHL-EP5P)<WgY?2tD\A,2?Wj)C)9EdBEC;+0B(ZOE]\j$Ei0u+Gq/-
+%gZg6\;VK"hVZE`K100:;j.*3G-,n9>9FgN?d&db--r:>Sk5:"*ST)m%aH'DQfJdDMGS/gVQaK`!cP+uj!(c<TC$F>'HKO]E5CZY;
+%er%"$/])R0<fI"tm(jHTpRlTDP_Oi]]01aTX]o^1)eCnfl at 1@Y"W,l40PN3EEDU6'fRqtq6"q]13KP6N4e3q4&,RN^R0,M1kX"@1
+%+Y3AB'NUh7OKa%.`=8]3c!fq>K*KjU6eN#D6(USt[M+nu.QB&lV]0L6<?$)29H.Z)@$Y!:-23tU`o(Q(kj^<DE`6Qhp5ll]3_%"4
+%^!Z.=:hK=@g4OJWgX2eH?[c1A4V8ob+"<0&;3E*Mi`af"2MC4j_CiFP4hhiO[-aGX\bGGOZiO;`5tM([?WEsC<o.^FGJ,Nu:N")i
+%&N(T#/Kb!:E;Al+iQ8mD8+F7hdr1E>.o at -1kCYYIP6B+JmN=P(I`3jNTgJ.:\Oh,]1/-#@9*q)WU*c;j;<LZ-kZOd=f9%P%F?0J\
+%^E;j*jdoB8#Z!KUD$q8[DcEhG)Ils;$NBhs9WKM:<"Gl,a8Kk#H at +":dP^K>b?)4b6rMBC''&5P1\8Htek)g"p^]No3m#e0_mA$Y
+%!ppkAcd[CSSB)#lK,Mj)'`8Ppnk'0u#6*b\Derl()^iIjg_l\.R93KN&gFjT;Z3rEG1P2GEQ;;i.%--?a_SJ:gV[0b_YPu8/gQpk
+%ENbW..M(tA9(]h1m1Q<\\MN\a6cc?@70h..ebq?A]T1!%NeCt*ks)!e%lF1GhZP8".IjoGZsW"Iq=A6m]B$X]O_#qO#+i_A"s;?.
+%D<-5"pJe*%Y=U9)JdMD5\dt56<n]b9*FP)#(>2&i:FAX>rS0.)7J0A)i`FFi4=MmZWVk,E=\YRI%r9NPMCYT>?G6kASQ(V*Rno./
+%b$;%r``.Df']]pF;sB;9D`NOd#E!2h*6[r#m`U'9ibpHG"h/$ae1A`VX&tj-rrhW(NRt&V4So9=R_'a#j>j=;Du&K8,PniM?eHmj
+%:D<gA8>bR:aHSVlD4*`pj7*g^)d`1!jCoPQ#ptCO0.hF+/Bd_p/nM/R02H47e_b6H\KH2$.oV>JCE?Kn.BkjXs'"dA#Scac^T"91
+%+)<Smi)//k0]?_!.\nGo0-rtXcCtg;oaY;&qUt_'5_/p?cbf33D7!.p$\l;+S#:l`o5??/pge-Rjrb^==)NYV**A)CSKcg?FqK+a
+%lBEl<?`nd12gDE&a%>Bkl"?iSipr1ehHt_OY\UfE at OK4Z#R3EcjI5PtFgM>HgKis`Z>bN'UGX!&hjX^mih%4OE$*bR_R(R$eF'uh
+%e05t.Sg[=`pG#O]JF4N@$k4OVC?7_(9F*2l0!:$QU3gVf!KH>s0he3liOQak,3mT;Aj&=*?7`u3`Os]i&hGr881FB%BY at Z#K&2r-
+%,'It(%R?\$:*Escq[1I'Di1q"ggec$#=[eRh"Er?cX_uBg"cOS'rk0(SB+oq^Sq'(I>.'aKGom9];@9-56;+;^.r#4Af?jG.5bh2
+%YPM//ZIf.iNO!W_9f56_/#CZD at O>;W<B6YIi0i86VOC][hP]k6iGt&\Y1 at E_doO"1L';;qYe>++$qK5^[rlFL-6s*rg-6(lPnTd9
+%5D at CG!l;dc;cEm4I%71MIB!.;>KSbmK?Tf,(F\fd')B\a(+%Lo69:7Y^-\Q1]=GX-/=HX`G2g`IoZ.hCLW=ecS7a\?Dc<!u"FF&M
+%jR9!am4[kK4G0Ud at s<*uk;G3E^NY#%mN:6k?)"d*rjHIX5IX\QHM:$L]Sr*Miq>qbgu>^B(2S)tj%]3lonS/AB9lf.eb\X(O6Q_5
+%MnV99q30Q*]!E'G=PuZ+7:0eoma1*-6KTn',%>Tb2&7AcQ$0s.W,Na^qW0p:ULV`$K4\q.N7kMY)fIDXV&cN`Islf$cWP171qZ`+
+%+HpmS$qLmY$R.V*MBf]9=D5(,<#pCq\PfU8_iT&`a",Wu-[.7g6)S_f!OLr[Q&[/X'`-9"!bk4XD@@?&/^_s5<-[U#\-&HhgfpnA
+%`,]=8=qQJ6l:t>mqV]*B7mZ.MNI0cN'<4L'CNF^e9.c8e^Jk0XF'6\KOJIK?lP_IL at e:Zbn;=T>UOF^1WhrhOoR=LWQ(U3.K.4ER
+%nk:,bq+\'TQPKIfKL$]gR/So,].,tSaTJg<RbolW`?+lDVfMea9]<b5]Tgok`;9UY?U-^Cg]D-8k^>4;$:;P2.00`^JAk#KR%PJ1
+%ON[LGH01Y$FW,[J+Apd^Nulm*^PD+09o?JVmJVfR00?MUNUtBM:cB>#ItX<^$]+L?S at E69gV+05kH>`<Q^F9bH<YX,d8ngjF!A.b
+%]?D2b@[SAs9S^hu3g%s]BYgAO;UNP,-2E\Yfli*CdfPup:TnD+fSf<i6VXlH];\]NY'CL!:)oh07es9,8N(k(5n.ATq\4qDZ.O,O
+%oA'u+HdDiNL=MNl:K%V7*@@F>s)_W=,#Vi%Z`0*]FMNME#0_,n4%Mcg)aImHmUTB"/(hYUIA.\X":n""X6^)B8M9hCdiE\s/8\_'
+%I(1MF-R8gmh`p\S.4"JB/&lY%5`2Fib)#qbLEF`=bEBJ1k9_)-enD,[F8MD6W\:1#k'-if<.1YW7:9.(mPhU`O",IQEj:+U(T#s1
+%T64lS,c`#:P?d4p at B44o,N[3Ocd!Aeh[MrMp>$84\rYq-`MA\YCn_rl+R at 7&J at BTF0c"TO*#7T0;U0S*M^=rHWDiS!Ihb:'e!!E`
+%&@MM);B.f?LW-\eWZ#8;f7</[RIgM6>n"S--dR3USQ"4s/H1lWCX_G#)m3PNE`jd, at Nr-M4[EK;, at d)0X\%.l2fJ0)008L$&R<]/
+%[@`9W6(,R,acFrj;dHcGOIO.2JokC#l3Pnaj^Dc-eiIr!'7m07r9[l(o^$--YI]KL]++S!2dK`rJmZ-=8%$$U/;Z:8fJptCZN0+t
+%/bC5#k>oTK=HRhfSKtIO65>)@RKKae&LI=Y1(R^5a%<tf+qUL<Q(q_LJ[1jHl4OiVb,NX=F)'9mB+Qb-$*g?g9IQC"/4'=3.aoT*
+%b]8;m at .p=Z&^VRGSV,1(W]\j(RW(2SM_b[]$LZiZG$LunB20;#,c[ZHeNC8^#]f,N1j_F[aj*JK[BZ*`&X6<u2LWs>r[+WRc9<aQ
+%$mJIBbVkV$M3Z&?kI"/liRDa1Ni8.VS9:=W.*A.gbFcJNFXgJaE.2GX1a+*s]?]M$^2Q*N\HhmX"H9p'M'SgrE4^UY1j1(YlWaWd
+%1.K/<AgdHk\3C at o5.L_G)jb1b\mGhQPS,pQ9oia at i82R?XjuA<+=Km^>[=J^l1?e2?<`#%^-b*K_:/gEm$W9SBb"hTe[hP"flWBj
+%5n'7)@_"H(di[jRaF*TB"0ld%Hc at 2=r&b_]aQHQE57;i]ig=hHQ^>$\rI:2^ArVjk+N:n%#L$U/[77t2/ME/H0^,0>`C^.-fWmAc
+%VP"oXADJ:6a4u'L#1igqf?[a"<,fe.VTr2W%fIc%/LfiJAKT0$9bCBC4R'fMCIPb`2nGjgRJj`s.'snU*hJU:o[8V<aR2KT+[t)0
+%.FB*s[egX'a[*42Dp\p,,CnpMAp<>#-O`.Z"$%)0e#%hV5ecPrZRTWCfku]>EaI%dYqfS<FLpkfYKDA+@,7\'89.T.dBj?T-*eTf
+%$0.?gHKs\M03.Y^r&ITSP:Xi!HBYqC]QP1_Y"n*0/6M![/;5pTU<q8ijt-gp%7\[#Pe$EUc1uu;X;S/t9%WnF>GI)-=LI6s0$4'K
+%,PcNY?d;:i`jE^&DEZ*'fCXT2aho^<;T%L#d2Ah4\L,iLh+%Rc0Kap.5`l$RNga+Fe^<.\90##R!=/E.7rldFCbDsT&(VX0S[<Fh
+%1WM7YP2?j75#&*`Npl<^HRbNffrRoSlelim3TU+(!&G2uX(_.9ZV9le]Uh^H`D''-YsDU?kH8\K:k;3^3SanebB`(2b^4s9;\U^1
+%cAt*UARBbFoglO(.UW%TPW'fdW,2tc3hP<?ZZ<FP>d)75=INgjn(hu:/]]i]MMWEV&t^6;`Mt7,\.Q=]#]$E&q at f*0^=9AI!#-I?
+%6a[ejrI-2I;`!m-h9stT^2)TL-hegh][k7 at hj;%&f:i8V9+CXs'PhZreY&.fH+k^XR;V.ii*S$?Ulr9E[@sL$&)Gn%<K$<]e&DYs
+%CfF*9VN7^#SZami#hQbXR8[E$51-E"<8cOsMNZqMeT(:tM-<+Ps1(HPEnK-3(i7`1j'J;GS$8'Z=coR&_[f4m01 at k4%GQ<4djF-6
+%!mp'7Oj>=B4q@=+F\VFgFZ><uk2,K!@S?hP)Wj-Knjfl.(o/0nb.Z$,96R!X#OhNOY1d/VkhH!b[E=\8PVd[-**(:X]&-C;DOc?K
+%Pq)6i%JDh'["BTd]FOKfHnkrF:<#6s_9^mc2s@#e[<7Koab]UnG8k4Vf[I:^F:SGHO^5=[jTr6//MJM;Wj<\?%@iJd;_I.UUopA4
+%Y:H"C&JUL at s.[e'lq^O.:is'@?CZ[+l"G7f:.HZLMT=lg$[V%r244FcnH_2o-S8ce(75jV_K;9>7c<EUDY@&/YY(VrX`JQM:':o.
+%J"n!nFJXR8h!=n*Ukf*k;H`*B*^jh.dlPp+Em]JqMA+]rVlm2U_6kG[_b+7p??4bg:o1&6WF1l&=>jK/i!1!$LF_O:TIMg59-QEo
+%4#.PS]d,C0%@+r)r[*`R8U"LN[<Wu2J7tXHe2Ya<lQneOIfX at qp9DMN];>O=MU`\4h-Ah5*[#$*,N1fkT+u=,F09WMWdqLqASgm%
+%Y\j=#>`H``:1!@%!ilVY<E:C/r1j1K`9*=#*nQE&:oiE.5qU]X9nnW9N(7b$fJa,XaZ at o)GJI8bPobSa0!REoSQXaV[Q/'C*M57X
+%IKTi.)6%WmPF-00+lZm0/D+\<4T+X!<%Yr6g`\0nEEIgU4Gn`)/R7#r3o1DE6A,()3[Pb at eanX0)k<8CF87,0:'mc:].VVWoeHSS
+%"=^=1S9`nrq?Z:VD26Lkh3Ekudholl4>Ta(COE2DYFC:/7<&GDU"'"oe4d]a6*cPoC,B=&q%P`5YnhTt8UNNEQ5lfug`XGE=rG%K
+%do, at W.?"mTm^5j.iWY\<5&F41Bu/Fo?2N1S8.a1nKA\DK\+8oK"]E`rHnX`Vm4!n^+P'oW;s]^(?*m#s]3#9Md"[^Eh:?0>5HJhL
+%iXg%ih9G%0Des#Po:hmD??8X4RkC`W#IR0rj]aTs;o.O"OpF'B-$OMWp\RhDL?,K0,89J:LAF>hB9M+(CRh]hSJU"WiB#pope)]r
+%,fQnFT[L@(;;`\l,*D"@kLCo;Rt\6bC"O\a4\;jfhkKYC^O2l+>43$r7]Kn=W;aNfjDB>p-#)9#N&=aQgh%(acn:?!6McE!D`a)`
+%$5G#XVb$rd4]BH\2f>,K1HulLAlC8/L&4X3TmV90.X=OPe at 9ak=B]/[i].f?o17`eIa_fJK!2F/-W<8Vj5_>ZpoV)FhagAkY9<XW
+%qgkLGCB$ADL[(C01>`?I0fAjB7/jph<j7=lal<_Om&!e[*/=YccU?21P$Coq%7;8JU(GNmcCG*GM4COo;JRj at _)@a4kHWL5qlZo&
+%qHiJ:O;>9 at EsW9Z-Kt3#:TE*2URW]8X;%*$XgZOI(M\Eo'&^i4A at I^XZlF+*GPh.TKS0!n$EpdqQC8jP._g\-=UNqH==2C[RrKKS
+%E^L at BVT*[pj_%JZi0f)o=_P:GAf/fmSRGjNfDLS![cA*F$F',4d%$/^K3+NKi2l&UL2[G(WP7cI=FVPi)=0M,RHA+D-0foY'qW"8
+%<]<r8d#q,rhmG'G,Z#up_MoGbqkmL6Cli\m;bicTI6$Sf$$#$o"l^Q$H%n'r1-ON/)AYs76"/q7QHKBfkaLeIWRc-0IU=D>P+(me
+%pL_]`r4ogT:2fLD#>d/]#pLY/@!?H4PVugP8`+RQ8I"r(JbeF](KkoDa]^?/^>u%7Z0!+hjj@[.k!ZqkG,lJ-a5m at t*VAoJ=[CAV
+%I$j_6f',4_7(Z9`g63S27uOUT?aRM$_iHpUj+-->nXHQES6"6\62oE!`m5[53hRJ&TANZ]1%Pt11;,pG9p\m],5kYb]"Z2_H:Oq_
+%DKb='*(@$eG4:u4J:-O$.TGk0Z7O`c<GL]I9slfHD4*/%<S&^MDo'<:(Lp%*GK0qZ\a^<<AURQA',2%j38^ff(MU(J at g8je7kV&\
+%?9SBcJE9+++eE[$JlDs*]US8%DT4CFW[D<a]O*?S.C80"SNhP.!:RTK)Ai at mq#g8S\oOIOe93m`]4$.B!eM@]nbee4 at K#18\!";E
+%j%kb3YT_027lW`bb(Om^Adh\=&]i1h(ZR-9NE&e=377I_/0a^PIDbh:a&%D!"KWA&DGr99lp3*(3TsL=V32Y\n^H5EDnE*'V%DJ<
+%]:dfhGnM-J9lYUpKHA,D[3Z!KZk_?UmdG,^JrQ#`ei;-^jH6\O$JPmj`roF at 9.L.l`<)&LQ0ph-XLf]>k]VD[bY+TA;`b.8VF50U
+%Q!T&GJR8W,0l+;[ec9;D!$fJ&AH^j-9Q3fQ3I0f.l#<aE at .VEZZO*q at 0?XokOWZ%e/#g\lf9D[2;:XbJrVM2*Eo?Z-BCIcsbu',^
+%*iiJ$h^Yc)>M>_6i)C7ps-1QA3li8$ao%sHS9%#Oan;_tI^UM6:)P>3E.k<qO(-J,5Bj17>7'J_O"Xe:2`I9Kh6MAXPdqFP(PTZB
+%"P-mqOsYRAr:ppV%Y1NX]G!NQ9+STVGE%M!D@&W`\\`XWQ$<k:eb@^77H!h6QqPJFkKUduO$2)O%mHDl?di.l=C%Vk2te>_[\\sG
+%`fh>D.Vt!'SEkQ[KZ?$=oUrL;RK,&h5#]qk/.XqB61)c\j%84?*N7]3n+[\H-ZM$VNPc,sV(6gCq-4GBFV+*Q"#XeuQkdB.-M0(T
+%[?F:::6(jrH(0Y/OfBp%DL=_,]22;O&td=]gn6gsX^:tZ[2aG]dJ=2$q"AW`n9kf`__n.&@4_X3*Xlc/r_)=a!s"Jg9bH`:XrEK;
+%S?C@`M:U!ca1>sXmaM-ec6Skhr1oh;d/g/^MRMG?&^23P%3nn)X+_Dh_b'U6R<1I+P-r9;I;ZeIEouBoG;WKtd.Gb`ZQG,q]#Yu'
+%?P>i)(=A<kGXa3)J+=$FG[B-Uq0#Gp)C[JT6lO8dRqSYDE"4bNESu%ub2[[Rc8fWW?_T;<[1af'[TV7\NdR6;`>"?F?$PJ-R'tca
+%Lsf?OkSsDV7DIfgK\D5+Jtjt[M7&"N\TU^XFjfGEm&B/lS_[LE&_;qXX\Y`0S!d\]E6k_(B?HXg=QHujQWF6?$)$TQem-+3I1j_Y
+%N`]%&-1i#Fp<i<N;g)g!2rO'sR:@^iS at S47,BhaP^OM4`k!_%sL(ji4-^>dl#%uLOA#>NU^-2Z9Z$c;aVhEVD/Z's'`7B:6 at nc%X
+%KsemV67[e>g2>qr93"idQ?WIQSm'EL10Yl*8iXK:-U3#*>Is/s]2+R[>NVA&](`Kn:J,O7mq\VMP0sa(ksIRX;iZ-C(KJAa9jJn/
+%1QoVN&1^IXc4GucaMTNuG[5jpqHFc;[3QcS1I6E3r?k7/i4Et$16To<`hH<Jj;;<,g']a0qq1KeF/?b-45JE9%'.ZMEoa8;R+EG@
+%L60!j6tVI(Qg&:s2k>CI"kI^kbh,7SeQQ4,`(MkBR'1hEbi[O6G6TkX(:4qJSF at 4@^PcTD-7c"!"X/L.:P)=P_HLX"dKWE##@cdP
+%5"VU3h,9+'?[g;L9Gmo5BbtW!_!g+t;rqKm#W>rCHnW\oigd0$?M\fgA8fq5$O4ot'*-p"b0mte.<_Vb[U=1G0#_PV"$;^]aJccl
+%;9kijje-abT2"WO[;ujrF2p$-$*Vhp3H-GO2_W3.W)O,M#KR'/(Y\Z+MVJa/7L)DGb0*5]Vn!O?1?Y%,S&PI%l7Zp_p4J1.k5/b_
+%LnF?LjHjM)lKGVL6(&8Q)HMInon2q-XWHcg-qjn2?ZI_A2N4CuF.(6[@/_p<3Q.U$C:<k'B?eK2bRTgf%tq)3V4ACpDPE^fHVCQg
+%gjtK/]HVAlT_e612+e^aijmXr>_jDV1#S8FD'<;U at 4X8h1+-TXHK6or2H2'#4i-oJ'b2kZocuNl46B(mMe!drm]I#18S<a%0_duQ
+%RLK`/MEG]:fi0iSWKNR.B-khUPt'%CrB;;P"U<,MQ0T.q]J="?A9`I=Zt/S^De9,W]m4XDgUaCEbr=8HN<V`/b.9cT:<T:^n57NF
+%\Fi_bh`s%S/,AOW`q3N8^ttBn5Mfp];lKq&=Su:2):C,r<KdQ[PX`4H^G!qYn&<;*Ysf9`l'2B`IOBDTm*H,3KN&R,_]Tm<8:A;R
+%L#qZd3kmOGTS36m;n](uW[;eR?.\-bRPrmG1p_6eg!:uS09\l39Uk++#jGXW<[^G'Q++7H95p`I402,#D/B"n3 at 5tQC/'DOs'YE7
+%oYZr\\>S37"Uj$q4]jSV]&1$6Uf*'5,gD>hp+HS&.Wa;0Z!W`Bm^u'-EmB>=U@@f=#-I/*ngjo/Til,HH,tB?a^h^jq6%NKVj]RM
+%r>Q<<V:,95$s7e7/W>$<K9W0ddh%<FF.Nk at K&rD5E`lPWo*5obpAf.1]q$?46KaOkQ>/;]c=(.)_cEGo(a'^c5_kBR7'\%t_T)HN
+%W++Qt@$-O+BUGPQj:!<b&.SFi^8bH8o\E^]5'mZ48/r2p^#8S.$?/Rf9B9&:k0+X<bK%.FkdJm'1X<6)OZKJ*d7U2aH(rK6^icN)
+%:Co[3G$0.S0I8A'cY/8>hmnhD^EOIK\,_:1M7OPFjoHe at kPXMZ,r698S(,dH9SQcj<YS\n>7t6qp.<@3].M\bZcgHDOj`MgnBdCW
+%D#ms'dj][1?d<2!P\*E,9-/'C7mNKVa%/pV[ZLp^iHgceQG8"q%;7mbnG3o)i*%1&OP&1/(p!Vs,SL5o3S;<(LT]g3\u]7an:AJ$
+%FABT1p5^8UG$Mn21)/5b>ANGpL+i4`e.,mEj$j8tjEm;E"pdtb%n+UQ-<#+n`72r4GVsu""/O7]D@)U/;&o.sB4<?EIs8N(I/Qgr
+%+tIn;%.`SE/_CN1mcBV`gJm7F)TMHDgJ>1l*7J%cHs`ke-5o'KeIiHoc3M2$63Rk at I/SZa4.l:kNbPrY+/2:+q3bWqj<*65qr$SV
+%96;hU-%BN(*N97`3KT\Pe^0SQoYp-`\iKSXK78',L%cKV7)h0A.n:M9f60S8?F&2"$6Y%U?+nd3hcn[hSO0LKDmPe"qIC.4aID3i
+%'9'ki44o2j(7rI[<t>5)d'6b9\G"Zcdu>El7NXD#DU/Q??jP3;#=4VfH9:#-p2]KeGBu\3;t2gLZ1!`pEaDp@?<a?#FM:jr3/&st
+%6GX%>"TB;^]Ld[f4dW8bNc#/=Mkch:\$.FpfR9`R-\qmSDFs>O=#fa$D05*F*g5WBo4OhS at 7r)bPj2L'K![U/*=!U3V+^e[6HG:>
+%q!mn?]X78N'+S8NS4c7r!\;<?OaV3(;_IaCO_Nn]`G&b=MYNO9QCj'[^V5LI)lqFuWJcj)i@*N\%oSXu.7aE&eE-FDTOn])h*DJe
+%,UJ7&"`%OF;_d?3TV&kG/%^c`C&T9.O)HLXI`+7ce(rJ*=^o^fs8)Fa"pe6a3m6O(-@:.<H8\e*'LR]i!19R;'#%.FDGJi%X5ks8
+%gE.=;lCj9D(<"=jRomNnP9Eq"J7p]F at rciMB)-8\mad;Tm0QF(JI[!ZNiFhL at 8H=<qQ)cPcHXI\FI!]h3SB4F>&KIf8P2dNXk,M!
+%R.tXc@"\aL4-cFJ8ie5K*0h5\Pg0'rbI:ad at VZHrC8j-'n=XK+$DYS1 at heESR=65'e'.BG:BPG(X&Cl$2DKD8q&[BrPA"5^jOOQq
+%[2OR[<$;RdY8SRXq9(_V6(Tpf"*gFss#trm83Fq#[1?V,q7TV.lm.`U%MAA%+=($2Uc'>1[Bm8)emhDiV%#mkK&^+,'>Hj-r(59?
+%Xp8k"ZnkH]m)^C:F,s[gda5BA?*>[lA1lg=NmdFmo8fcM?uY'1N.^I1#MuT/rUW at 8m@?^N9Ep,SDqn=XPamQm<_i5U@^#:f(XnB2
+%j-H0lFQCOh/u9h/aY>/`$ILiYUDuof38Febk`a- at T!FE+c1J/OBR40o#7$@!,T__Ygpu#i>KrW]KGLeNmIVE3)7VB6+f%pe^+$B+
+%=$JpVOlPF4T,8T]W:EZj\4k'CEG\9(n/9\k?I/FN.go)UH61l7ZHjF;E]2\(5f)BVAmaf at X<:<KBFcKGPYlS"B\7g5qPaG&+a6mo
+%m-)*$[Z=rp&eU;MDF1,Rg'>ZnkmqBBnCc,ZeD9]835V2A(,a_e^G>R-;>chce<=;n&oQe3PS5X$#kkpa);>HYr*Bb\k;:FdN'S)A
+%D<?=XEiH.egRl0gKQE\>RKE'50Vs#kB4Je`b#KXO2\2Ub*Ne43^$M<TSO#/f])?r(l48KXT:KJT=uf9SWHb"DNXIX"Ll$bk_E)tV
+%a[C4DTA5rQMb)2$,+fYHVAj3^EiUcc-8dJ0%E95P0.H-UJT`:`O?+VDZ#Nhhm80DA3e$g,XN2ZI,%*OF*oM("<30&7/f].O48HJ9
+%`B4$$p5<WV+^8f=@Fr.bD?`]'[i=^%ip4KS:RRfVKJa)c4,.05]OdXK"aeZb=gUOI<SRQ"*@UY]ii9%.)7`EICPRkLnORBr]?[l_
+%%)QcYPR+67bGfnp?,A_E`@!Ul8Un0BU[jh/Ms8T[Cm2';r%-_g7KXG\Rj=6Mj_1bt?I2!_q?CToeUSD*q\\J3$jer+S%FVa458Yr
+%;inl5KI)o\)c/1[ools*[SjZ5X+Aa6'pHUEO/(J(,R]<M^d01V58i\P3/N=t at .:$Jfo?'h`=U<5,LIfk at tN_1@"^Y$If1MEM3RER
+%=6J;7MEQ!-\N>4"qF_jK>,d1P^AT^=Q!((5C[OrH[&p["/Xak^@-A^m)i->M.(LUZ'\di2/\SoCY*e1<?7C11]R__eqb7ti$T?U&
+%:3IWP=Z1&m"=Ksd&ff_bfmYON8r30SiAK1Go87E*(2F\Qf!gS,$,)tFbLAsn,\nBNk*mP.ZUf\X(u/U0/\/$_<'.gD1=Le/T3"M\
+%&tsY0BDG[I\>Q2SQ.]\_H6D*EhB>p0W8%\Z;<M?hK]dSq^[`jFO at V4CeL2@AFc,M29eQ04*_<A&S,Q7^G&f"?o1+8;E+dHra^7.g
+%D9NrZ+3^lP4SXU&I&Vdk]`q1a8:JZ367ZAEJj$YI&e@:3f2ltE2YP3rio'SOm3&M!XF^8MOkr>=5c8lCVJqck^Kg6jGH"9)5Pc!s
+%1H&l0\.YL&_I]9;fNO]E@`U6VUF/D7+U=Sa4Akgfc]boUB at aJm^+f[)IIi)0FO!`Y64-Q6pdBu>M0u=O4Zc!O8uP1Yeu"i,`Osa_
+%R`eCF;PaD'Xif3_gD!`pBq9qhe?r,T5Oq[']Ri9ZJ%m<0B:hWgHCUrt-p&"gVRMX?T3o^JB'n4E at mp(^=/)1p0IKpV-#lek(t2H5
+%hbl/c><lGt:sN]hU244UGL2Qm_XFD)WTeFW=Njj.9iJ]Lml>l"<^+e#oL:5(2GR[kj;2:5M$3PcA@\-K#!<&_>JJC_0/g3[)W6Hj
+%$DBT@,8UjO]TK%8%=4'aH?f!16Gaph]H.C=2M"pW3g^D<'r7G=PuT[;;(jj`hX.B,ajMpJ]0>l;m0_8[KsAO93T`tBM%-c'AY[EX
+%QTiBfhir>b4(3Ea>\ei87fD?V4J:e/:&a+47b`fUj\7Vn8k$VSKf54q##Z at .e0FHjS!F`ga#RFA`4^jJA[7!5\Sa(P=Qh.]EM)1O
+%U\qAhiGTU"QF8h;jn#`UpK]+RgbU!`bi6b5gCgHJL5n%Tb>dHEm9Z88;dCWG2-"\^'1Y)`/;s8F+dMe+&-I4UKiOHk]2#qgDHJ%2
+%D;/XM)VW]OS=5pm+uahk9,iY%9>9VhXsT.*rCd6A,e\(%nLnDC^;9+>IOUdca/#4Lq5c8@$s0PnKURP\E(sFh?flaF#q*U6RdC'F
+%S(97DK]qsO]ecRjrpkIM&Sf""?k1&HkPHG=?/OEfa;+:*a0aC at Ke\01gaf!lrbVGaBPMF+U+Wd#1>GJZs8?/D;AU[Sd[!Ie0ke$7
+%WTIMOeWs-Sp8jfL(F:6Y^-G\*V':Ad!M4#HL=X'aHCY=Hk8jaB-psSU4BS[6%+'\t%]#5Foajbe>iho;9NNJT:^=5.OnY:Ss6*hO
+%[3FD"Je5ZbV$8bV)j9E_Ze74P+`ee/5 at -i<!Wi8TTa)bM;R0a.Yj6YX6j/<_H)*A^m?W6O'i'MbMdN5=hE,tNlP-GNW4_7EC%Cn3
+%b<I(ilM2a9-;3FPi],K)1&/_<PFL6]'tOY+B#$o[a9Thnbkq=l`T$d&'RZ"Gm8s<o"`ND2p"R>OrG+]IM7QJ!Y4?*2MqsrCFo_8W
+%&5#Y;dAO]s:e/[WjRkS_O$=&5o#=dc.K"e)dKXRfr2K`cZF(X$]i8_nD.U/%#C>o3_^kL2^WA'5V at I^jb at C*bpCpZ#&RZ=r1c4YM
+%\cEG'Os!99GN]K7;IGuYJ=G/7BW4!M%&_tu!)<+[f%s+6r2*_t&_'c]cc%XJqXoP_s%18kSX],.W,+1e_$St774+,RBMHC-"sW%4
+%k*^C%NHk\!FfmJ94/iB^3&PkNHm+eE)4PFkD,&.T,K7^g9$u=<o%RhEjfb9PVYM27%.5Reo]<=\4V&4RKZ[eq`*5!Zk%dVb@^7c;
+%B).*pL=f2Qn+hS)m'kD-Z9YbYA*#Kh\YQ0(TK[e+Hp<)c9?92=]qMXr#[>VAG7/>$qJeY\Cs$?oPlY2hF!90Y'd]Bsrsi_d$fEBm
+%p)MY=BL:#I at sOMbHEr%E4.63^S&0e!j$A<`Z3Ga#Hnq#*]@_Ne=JrZtc\U'Mg4-(IWgLhr5\TrT>#4G:9eeh>W$F1Z.G^bn2smTq
+%;Ym;%U1S,QL:bEuX&)GSAEo&QD#Hjg3B8jOARCJQNhlH%i[[CpXj(!]B?<8Y7[9_j)0\6OTFcb<;VT'9Ff!5p%<>m+2sDGjpW?NV
+%*^GUX4R:!%1Kcq-!EkIh''@$!lB!K9J79^FhUH"k6.%PiW$r#31[')tJ]B7^&\@6%,W$IRTRbt:#r"@R%jG<ELu=JG5VX at 1`?ZA_
+%qaMPl:%>jXQIE]ErL6F'NJ006Z&/`LQ+Lj^jg]f>WCk<&9\J.D7!%]+2a8kDL,_^Agk)2Yj:j\4V^Z95-&57A\'nH%g"N<G4j8*O
+%(.U':JbV]8r1<%E-p?;CH!tt/Pu\$7b.7M8]5]umUQ..^XM&lhg`s:U:srW3YOJrc<<"K=pLJs?826NF7/5.>L1Y=d^qTaMUX[aN
+%fTO<^HRWc=K,*_SVMn+_;$Xj%YXs$as7-?q)"Sscj9OoM;L$]FbJG['9lZGAFXsq*IVZ^G#*O4TrW-%NVL6b9R'52AUFA'b:E,#X
+%I.9KR.L2s%HceinWJ?Wer-ck*)VgS-]mG>GR!gNEK#`\RoZ].7\SU3+HHc;g``uoUQKY)kH$lStNaEpV5!'+n:5K.54g(e+%)RC4
+%/?.\TOUr9CFQTN3&?k=6^?HgF/d/G\F9K6*buS,Qb8boSgUBV[#'!uTE^uUJ at esVB/UADI4k.^*BY"/=&-am1WbF-j16oPT at 629\
+%]+[h3GbLe9O)MXOQ:e/c&rLd+P:(aa'gF#_VfG%Pn!D+1=ha&mc8bS#V<U_1mf?b<:%#2K1GYMgKBnLHOH9.u9PjoNEjC]Ns5_O:
+%@BQ3R2M\RD$15s3j^!TXdhnLfHQSGq)+=1#JMu?0UNl/5#nN('qIQRV3V&;.:"O5p5L1*%htl$jC(nBU,,6U8nY':K3HU0IGE^T0
+%(pN*0fcW;B>u7*kD#>p>9]m[>cQ/Ld-75Qa,u]5f9Zu6@^S&X at f>8^+*Jg'N^bbCH6b?>SM%'3SM>ILSL9^V<I4Iki2"&h=pK.K1
+%EXFZM:SR(n_JX.18Q]j*P$O5:*s#eF/`c]FitX$p]="O>`+Fg<3ZMC#R]K?u25MNgRVT's0^S#7<L35mNN+QGNK$&M(-k#:0L'US
+%8"WM5bR[*U`@XWp[@^`(LIkMCY:SBj%k:l\.u&15F8ksN4LdgU:qha2RpU!!.$[3X at ZBf`C%GX^F-9j-P7D-X at EI0UOia-6Ojakd
+%E8.;VkV`af3M6D_8KIn(:S--#(Q^(:82b[l??>c+S.rXmZ$`]WNT>9-dY!B`r_G.Y,5jGI6&FKLbEEWNUR%^sUc at I:hfNp:Ek'@t
+%K':B_S`%B_:>=Q9<1;]5</mI3mVMJiXafmCq4'!OnJi1SY6QlRU[V+umJ67[2d=!p^-TW at Ou:oZcc?AHT:Y4M3Me,m at rcLqQJ/ke
+%o#OR7KrWBTR3tqM!VIc\BZQo/JpSVG=*"tuai,F89%=^c0Y%IBTRd\'.cg%lc7-9G*Rf:UbW\;?iG/m\D]D7@/aY@'\>`WnF&nOP
+%G>3$9;FhLZqQQ^W1&[stdAG@"/YIN2fBFs7.sfP3c%2a<pQ5enIJYS+O3LW699hGPdDjFXhGT;2[0uQlS<FQup>D-q$s]87oT(.Q
+%YGju0-b')CB&"?bV$o/I9?=RF*.ei@>k3X3TO?(n"]$abh5H_'K'oV2)%bkoNI6cHp_>oeP'#K\pYN'a<FqnmP.\u`%Qrq5VN7Mc
+%`eJ+SBL7K@[-"?)LH7/P3Jm4uqp0[Kne.O08dGBibLJ'3/1#7?k0((ooHfNU(*i at 9d/o*\AL$(g)bfn"qn\RPkLo.YV[]11SDV?"
+%imCNi<'-68pL&.R[f#XfAC5fieFIdK^pK`k]UIV<`I;iW?1[`1DH"p;b+W?59lU["kX9^l_(>C0k;6N!F=LU5/#E2iO,)d<H- at Pc
+%O"=;(m75r'+3c!=c$?'bg?)tIq-#kRK>?#!E at 1qQ`,L"6#p\RD&g3H3r_aN&2:2LEM!$uLg&V4%,nJj;8'_KO*k(V*_5YRQ?I6T6
+%KULX2`6ZVl%jlZ&p@'/MqY3,IG*]n7+."sM4kI6X1h,@';"9IEs5DGTN]ia44q&*FBaY^eP;Gbp+(`1,#4muB+PD/dY<XnJj<%S.
+%)Juq?l8Q>GPk<W2'#Ue6iF9 at gE\JDqoj1SE7$'kr,WBaKC7V#tmJ2oMWUZbkc=u`pgW#g\Vner6D5STH3nIf.eeSu2Bhs%.GS?Mp
+%:Cc?K.OQqq0.82u!=BY*r"t:uVTI;8[+4R@=Qnm<kKI8K4U6jW\(O9M>"S5Sr at IS,%VC at gV>3W[HLsh]S_WJPdsW1a;BrI80l9.a
+%B:j4 at cBHAS2At)dJbC%YL3Z,>V5KdKF$o&qlMbU3_`>)n-%f0:ZkK':jd`5sU\.*?LuH<0>+N8(!>T\SkBP8Kb".cKeAnr at 6R%kC
+%rrVQab=n=VD8%dES=*Gn+_*M-^hT4*QILWIRd0u at DCI5k/CjaUf'H%rm8K$oMY)+$$hOud3q-D+_3HE5m;.SHr#BP>bWZmdqtf,/
+%=O(nO7fqVd,.?!,eDJRlS=EHNYUSZI"nOs(LSHOrbo=9`7?a4D)Wo"3H\N8*8+a%S,0]/5Uh3 at Ai[.[V@=e?C;K%t`mroCb6;(*+
+%d^:iRWhi#6=("=*.$c!qo4Bo^$\Y&rgJlk<NPS at eIArO4!Xn3WjN7YD1/1<9I$KW.2i[(X:;lFp<J"4.B6!+hP);.?Go0&dB9F'l
+%"oS at -P&:<t)GU+GXS,'1V>'KQB:F&Q$(aW!9bDWF31a5h4Oaq?^P"_+/B)]WF.<T-rfNH79AQhdf!U<`-0d^JQS$B,)s/d7adssF
+%2M1LXasCVMflW*E9'SQiRh]\DNkEKAG9+iSSFm#O,(ccnmZdN)Oa9C2^8>%J6MW=YHc[Z,PZ.60G#.(^2qUggDgc6ra^^aMCH7Z=
+%B$U?qU:6?s>NLdOG2#4:.!OSeP&X-SaA4`:*n)BIcU9@(Z#KD/->!+er<@$JJreV*.C7lSVmt_h7U,=Sij!+09lSH.LT4kAKLZXU
+%pTA"pghcI;GURJEHZg6S8ifgTg>BHOa[#>q%4.'s.RhG5=[q:8*3o4(.i8GsJBdnl;XU!I\b^ukN_2KG2aRFpP*TZ*C:A at 9Rtk;!
+%j9Ice[T.npK9YqQ.*_?,9cD6p9QEe"?!2;d1p)8!iqp7B+!F;6#8ADHM=.S"%\9FUD,+un\^.rD3q$Ts=@VJRVKb8br;b14*IWgq
+%nQ'oV<aNF[c115dD0V_W&lUh1;^fV7=`f-k%5lYE*43=Q_7TEdIl3[dDR%-q`dM"S$'6.Oq9>,C4 at YT=Dt];4c[b'XE=5]#QSG+K
+%b15cDP.t4GW4s67_5+iAjOB]gf)(eshSSN+ThEj6)bI%@-rJ"$8U+F8ICV^UO<Kb)R[:+m6Q\'Z2:W7-?^p=MM&uau8QVGnmeTL'
+%.F`Enm#b!d5#YBbZMa$PWaa7VK!]tg)\77"q<Ii3BpM'"2d5"lT=,l166jkIZ+-.aQ)')4OgD^`TXWhl7:D&oA`6DYO:l=b4^W52
+%K4*PRLNdbid,Ai"DH2,0"fj;"NjtY_2`,'P6N]jG,`Qlc$I;4784o=Q/<)"_-*R;F)_B@=J0pCpD2_>U#D3g'h7M:GB%AZHJZQuc
+%fh+F4aXBq at 8!4&_jgi=oP<klHGJVF*'Qj'FN[,BlYaSmrXj/.ed8cI`MXCCN^juWWZOl>(Nl7rFlfYQJB++_5dT,+$$DrC`7XrU@
+%Pa)#>(P44n!7A6397d7DWBCWg(4,%`J^r)'gZ14&^kU,t)o1N7"o6]H\kJO?CXY9u"\e)X1EBhT9J8iO2ZUPP%LjH0&2mU,Pin2R
+%rY4-o'>#i0/u^b\q&W#h)]G\neZhnq&jD"Cj7 at .-s03:'ls"X;/^'B`:Dlh@,=QFki*Xn=B&thUFn?SY9RKVdV-+kYeEK-"PBL`Y
+%_8;Gu,bSHIi6LG`c.:F6-[VQp":"C"Gc#H=MSQQYe[NN12XGk">nVS]L%U!I++SHA!Vh&AJl<<C0HLp?p?`6tV"D%<'Ts#ub"D$1
+%a]nF4n(l!BIDZ2rNl]X.6.jq$=dGtU?^W\J%>M5YEi5E5!\?XWgTRL.?2E5Hs/t/$I%.s\r-GIhjA=3ljpkJCFFiYZMjm=aU[q]O
+%N)Em-o1i"g&4OVu[:M)&HhHh^^_=khIO>;m%\3/mEi2I,-bjNj]Fk>:%<A[$+sfK<XKPMK'!r:5D-"`GaTFO>+2sPVKL)QrYX(/*
+%!F0&q*-HQ&L at PMHdHfCk;E?P;h<"K\6+]80ld)9X':T?\C"&c'gXZUoSpsL=GF'hgW?bZ9SH3,p:K-W8k"Po(F&i*BMTFbiNsi'@
+%Qd:cY_lCsW%l?tK89 at ItfiF,cJJ]2#T'<+dRqu:@b#!^'<E!WPJO^]!.:A5*g at Ttq@jb[I[_k6VPrn6CD97dNWGP[QeG$1[HhZ"l
+%L-&ZCcB$<31c<S]W6<Mqe3S/i3'+UEh_]c;0S\2YLWZ/QA$qC,,CnR=)50?2-bsM"B71o%JX'&;9Tr4p'WEPqK,64Yfr'Dqr?.Et
+%k+fV[7r;XuZ_`/Q9pF_9[:BAu.j^4sbqOmM&^I/cdKqhgq=/okSMjYeq4^o4;tZ_\IZc0"6Gck`UdXP7 at k*/mUg<Tr5;j/+O. at 7R
+%juh+gE[i7 at 45c;H(KZq"]<<Y<DR]VLZn%%epGD5SS^KDph5QCJm8K'*_'*HPmlg,mIEMDZH4\TOJ]Jqc-`&YRHqht at f5EKU=q&S/
+%k_IY'=J[QDi3QH]-a[0Ne0#&fI9Ud/G\'.FW&)Km?!*4HL]<enU$%gDimI-bB;t^PSeH5-[oF#a8^Mc]3WJ5PRZu=6@:WT7f_8dA
+%TZTdI8l</5"UdqA:7!E2]\nSd<!?"$#e`uXAKrbZd]s<p1Bl-gL[q92HQPlc2m&!Bf?seJ;ope--fBA[.TF]E-e%*T6HP&p?<H&b
+%-"Nbns+nnVMX>tFktp(OcC5j*F/b"oCt$3\kOe7T;g#G5HSht.MC7lR17^E=_</M at V!>0T:.$J&/rq,fqTe[mYi6]EQsA$S.\g)m
+%9msRi)3m%!Z`!b-3$jcqQctP@[j8uT%4:EM]=8YG/3'P"e>rqbKd1MMp4I6Dq<T7Xj"OA692.#II(VWWDH_kZ4f=.d%G/DW!<;s*
+%n13I*DZ/rJ^D:&;$/Zu:PmnY>9a3D7%GKT[o"T:\:HI:V=BU-4S:dk$?`W>P*i'\?`_'t+]Q++;0S at TJdD<S1 at NK!A<A\6NLN"6]
+%"!cW";0*YR*]Cd4Y)X<4-%D's$b;J^rKaXV8!Jt'4A4 at sm"g*b52t/'SeJ`K0c,157,I3UDAF9kiI&d=EbEL/VV:?@ceek/PNn_*
+%kk9S3_"=kD*lrDJ'K/4]JOfS>2Y[1YFOctSZlZgfab!3J:SIsF&'6b/-l\+/XBs9K!79R:R5s1Ud?d7n_#<T at h+$8HK3Ddp?.c,j
+%bhP5s^J&:[I's%1QYW$$r0$PekjAYHK at oITT4)6eUVS!7:'\-^AC!mkS5il4A`nAMaNLGM4Ys","68ak--6a&kJhYHA%0mP/5.H?
+%ORl-_b,bGh#rd*%?rH!8)$#`.10pn09V.01X):=hka at otBrUK6V!F6l2'kFp*daq,go:2\I(`(fO<!Yo%;p!OJ([$&8$/(K-$Toh
+%41UiGR,##gRQe4_NRrV3+7MD9*8]^LH(,GhINh^TdoIY;4U[%+2XGRVe.2';];8lWbGjZ2ISL0>&"6c8q<M2nQ9O?CIdd#MI9rHC
+%f*;*6''Y4L\0[Qf;)Ujd,1]1<s6J1=^MbuLaO at Xi,$gZ;Fg`cc;Kc:"%n#E*kc[a";_4,Y:D$kBL-^Al/jjS9<OBR3`8)Eu*!&O\
+%H#+oI3LrA[lIa$U5>Qo3Lp2rr;Ip^*/?Bftp5q8X'j<d4.e1rm7c%`?lm$M)k84gK&6K06^EmR`qW3Y'K87l[.Fqk\T!D39j;jj<
+%Qoa0\dJ\-])#R+>%.=5nr[>-?DD;kuJOf31ht\JcO;POO(;V9j?9QBZKIO&;/+\j%4u_onG>.8(5f=XH3sT8(+u`RpTCtrCBl\\K
+%_JnhdQL`_YVKps=cC!%QCN7'2UMYW5pi4s<3ljCGd:n=T\PW#7 at gE!Kmm$5ferLK#a<eJo1Zh-or#<#+OPX#MNod<W0R612!52-3
+%[t1%qoci at S6.Fn!E;k#m,9)YsSpI.s[)(M-eg1Lg8^O-kr)jl\_5J$><>^QBIpU_rjsiqeWA2A'E*\XCP<@@Y(0Hn6,[A^a;H>\D
+%-F+;_?-$e+Vo4Uj#,&*Ik]b5W&n-6Y-i(s[<i-+/)>2$.(5j7R=rBH3>rQMOI%:"eW*aVK/=TOCUS3kB^*N9]cubunip0/jq8IX:
+%Y^!s_b?B[5h$BS^BOX#.5;jlmUa,U\T\Rf,VYs,Ioi3CtHtGXaJf-khjA)4'(pos?S6IaaXtJ/nOWaWP6TJ&uHOTmI+uA2d[m`;N
+%)e6hna^m_al8<L;2Zl"o?@R:p0>H5KKBO`>S07CShO at P=U(be78L(Xjn;jHY99 at q`E<,oCVigm-+30]/q]@!Ve<>[DbpG7&<OP;I
+%,RD%^Q$*M7%kk=XkB46a.Y"'N6_=rXH-?k!UXY'K8J#iPEN1h0YgpImkblqSFC*%hU]5jO[12284gWiA606hYY]I3NHl./C\06c"
+%9R!M?F_nd_iPC5o'q"m[c!FS*0L7t1 at eHVZ<m<7Png1dE]mk`o>Cumt:#p\/;DbLTdTC1cm,jo$8of=&Q[Edo%8U7A#W,3tEfcWY
+%!RlD2lM7UO6_W_[4KY+$X[tEOY;`TbB1b?=oom[W_`I?KK4$`[s.uk,<L(cVFbPSO&%[,a/Xr at PX<R9#M7tcieVe6ek9a2:=k5X1
+%@;e?lGpM/>cCA8/&K:qtLB,X(Y_on_q43i9P2;K-Ti>S$@U#4(BKPR0GFMcp*)cCu9[3`b#q?YfWVf,H@:"Ba<dp85lC4X at 93ljJ
+%VTeG3;]:%!o(-`GZV?.GPkCRUTM+3XaWEV%)j9,sD5H*8dX[lcHaH9:K+;hjiO=*b,g05_Q*_8=;T4K4das40MCjXFbIP__[IH"2
+%a.'3\]_Krdr3SWa4)q<a65?=G'qZH/:Y;B7I$<oc?3aReLfLoQG8Ki!9Kag*N-DFU-1j@<3oia4pQV5_fc:nL'UWNW/(*-\Q\8)F
+%cM9MIjN0!s_$u/Zm7NR$!H-j>!KLkuV=I3X/;Z,Rhtk&WT`;Xfh:&#(aLQS9d/;lWSZ4%t1,VAU!7cXcr7OS(?9deLn[[gfj]?go
+%AG*LR)q:E?ZfP&Wn27PF"H.r*`5P3[,E[G_n$DUic1TiDCo&*kPj-ImgDoJOb0?Wn(g'jsn,timKU;\Y^69p<Ta:OV_[Q=>;fnk!
+%*#=&@`6hYTbR\_;\)?mM<@89Eqm7:OjKdPU]NWoN=?<'h^^oLEZi$pq55$pkY,O1SGf)k`pRU$@HC/fYbP:<EcPCO2\i$^+eOnI?
+%OJa1H8r4[K(1XaDjW9f+E1;@rWK>uQmorE,!6n$?esPbUr/l3Z.b'gV1s;]7E`5B"CpO_WgsJeE/o1PuWRV)2#q_U<3NWQZH*U(N
+%CG'+s#c$D/L3_"Rg#YubF"l=i[n4I"*Et'k;rBqj3?$j-b<@@0X.9fB#"=>7cc#7U4HenlNlU$LiH_]5?B2mUo$k=F=GR<t-cP57
+%->0TdHk*0VPcGV].?'3T-M1&VHZi-LB%r'1hoU^9od/4_S2e-f$&uKE8OsaCp')tdk>`ERk/KQV4^bVI3n_XiST,^6PWLU582!6C
+%VI7W9jHF[79efKL#'hhG;aB5,km3MM&?_;7=Dge4O'X`HL#6W[GL=m?_j4dbn%7u/k,H)cF)q=2p)0*#G:94?'A,^BpJ5f(-%jgI
+%Us,ES\nRRr2_D48E%E$)8JGB"\@%l5HcM_m?d\>:N+V?G)2-**Q!^-bN-.Ln<77mlB7MH4#kY+pZFJH?,IB?:jmBYZE6V#CnK)as
+%%[!Y8[W&?[d6Yc&+3#]Z[JQ[\^4$M<[$2-+S?cUpqhmaR3=18,\_.en`*BY(NlKVonc\F"7!Y,F_s-qo<7IXPPcS3iOY=a5"W3.C
+%*o+Gk5u'>Ns#-"#5dfBq2,fUrVh^<6L/bN>7Ga&!Ve]##VM5!)_'^`"'(D=TIg;kq]4#sNF549glW!\A5H-[:a-?DB0u9D47&FeH
+%lNIi"-)^Y^^IS#(O!rC0aLSUW9fh)W(+%Qm\=)I:9uD_.HC%$8aiVAgmYL@`h966XTrg!!34jK@>'ogDU=>NjOq<gYD)Rm]_U!M\
+%Z$WZ%%h0Q=HHn1Q3p?$b..Wk;+shu=)5`)O7.kRZHXEst7;9p5aUnr_$2@[CWK(^?L.$&[DMO\s[Fd&E&]7<aI$^1X:%")IlhS^m
+%!@."O5P_1_i`u67FW(p[;Q+t]D+8n+IIt-,J'o:qLmtl5j:f1mBXssM9"Yj$p!0J5],jCYf6d!H5_[C>b,9"k2V`>2Frk>VllLEC
+%>rIm>ngpZ5\9Qbg6e^G>DQZ$t\]dGo'HAO1n%"N==/P0PEq?9s<S!=s`(A at d.1u1"%1d\q_t4LOVQfalEb69(Xk+*:ESM2qQ9p!C
+%7kDKTe%#j@[gX<KZS8UD(q0#;V4i(H7/EgD29-#\j-L.s7=MS%fUC@'B0#-ii3oO#\Iu;K$Da&?S)9A[Q.3QqE)/?:6'LC%9V"41
+%+pW7u$_N%$NmU0Ll[XV>V>/MgeVJ^BmpBIs[=!Ve4P>&@L_a06-SB\PJGeDGI-:@L-SZ7?S^-Hq?4SA)qP&O3Gnqhgo(H%@f4/*"
+%5mL)t-eDFtTQNo@@7qS#!gDn([a+:*HXe)Q)-55Cbu;e5bK&FU_3<g`9PhbFBVjc<Ulnti&lI5cG>,H'YL^dK3Aft;Yc%=>JbuW*
+%E8l%>,8g2l6-h(9Z,C9%QK.Y#m3Z$>\P[AZAZ0shG"hIi>5>G6CIjC"OuR6]/tpggM+">CZH3L4VV-[ECI5kkn7g@!=<G>Q62l"0
+%H,)_UVHHNr4H`<HC`qRlCNtDZK,&T,OZ*qqB<`RNhUq_0MUP?-hSWK>e<R#HdADM,0LWXl3m@,74MH_:iJ6\V"foq.(%8SS1EXV^
+%DaRaVXmSlVZl)aN$s(ugmt(ps8_LqZe8RD(?GpH-(^ldhXXXFmXd\t<!)5)o5T<9-D%As.Q8/J7q-M++C']R)31cVQjnjZ,\K("\
+%6Y4l7BAp(lGg-,3GbPeQR6pi3UOt>C%c$N[B!?7.PB\&H^Y=J$hRa]!-FBTV/T3CUhJ"1j+=NrmZ]O]Z.A_re)EmgL`Hj;=<O/:C
+%4DdHJ4RaA!s'7'C"pa3Si^`b)O(GH2H.$3>(i*6PX35HV>pp54B7LV>ptdSEkPYl2Vr`FUQ((&]2f;J8%JhY7<ML23YR"hZ[!(m'
+%>\aEL#VKn)^IaL1MV(*JP3q)>,pO^A;3?P,;]er(GK(h9535,rmB%r*5$jgDlSU94n#74&9-KhF9eS/uY6`.6.P3+KC<k"B_5kVa
+%DbnYKhV6i()9,rC2S2LS/2/qhYhQs_aUOkg<J?^pE-)./;Jt[8iXT":Y.V?1^HBEZ1F9oU"?T0e5PeRjA]tj[JC56$K-S?^&n`i0
+%dFZ!LiFFpT4c.I$`UcXbQOpb6 at m,KXgG5c*;pT\BGg.bN)YtjZKn]6'H8d-C95G]^I"epL2"+N,^\j7ufDKt^$kEBMgK*f6(n&WU
+%5j at qCbSj,'CHm`PpqXF(+7rL"+sbJ;gMHZRWTWjMo+EJOUb4[Oi. at F=&lBX&\0i$P35;g!7oX3tIGF. at el(>N(ZbMEW%pBJ\aX^U
+%XBBLm%i3l at m.1fc@!/f\f^QM9N2HM!&qj+BHST@/1V9(K-=s"`+E@^Dp"pf-n_#_ppmDmU/'3k/p<__kT$!H/N62ZW!]bl-[[ZRu
+%ld1OR*;!0OEQa_mb,NT[C7=>-*c0pG6XK#W[%$ZfK/:fD63Op-8#c2;XCqfXhcr.[7GDYa-Ru#n'e8G=!s\M>EMoEfl\^ohc!oW9
+%iN+CI'Q$Vq9t=#+Jm)mmh73BqY4qKj+BgGU5Y[JuqYW5uNf.?gq'O57;<G$:/Y(1rg?m,Oe(O>Ff.3[h1Hj],QjgA*f&^sNMEe8X
+%,+8_4"RJ%LV_!f=p;g.o=KMT3T1]0[#4ht(&Q62(nuA[3!mac3>d%8;jr3Z/nVQPjglAr]Y$^on?"?G*k&_8IP'Hkhl&p6fdArU.
+%P2*#]R%O9&ajY60IoZrP!DZ=jY4_cs##1>cQ.:3O<$#qrq;j)geG5Jo;8rlVh"5`40((l0??:VX_FnFg6X;>9kJmoG\,2r'4\.D$
+%o6tdG_9(UCXgsnhZW[$o3)1NEnkbBpW!7W)4"!^uq@;`#mWfb'.1&A-L6RLPhepr3_\Qp&gY(gE4eGSVC(r(M">l/%7j[8f4grkm
+%S(;CJQ5lm/s0fWFBMl&p-R8N<Wqa[&"\;lsCIG at _d3-Um91ArW;b"C*ho!6G`iP\Mp>GW!<8r("mV/[o-;H+fiuYM7#>^F(?;AYl
+%pMB$ep\esj;PH)Gj^U5oh'!9/ooc?gW at mK>$,lJZmA_IGXGeidja;"<Y.U at G[UO;!=6;nsZfcV.&"ZIm2X<i5[;?8/^S&N3d2)`'
+%7Q04++7<\9>EFuZ^G+[3Ft!c5/q#G/PT8#0s)@RH+`!m1`<mVIY0oYLDuu2PK/2MDr"\TM>E:6"WU4'5_ at 98rFDL.e$ZK?1?'Jol
+%71LYOjYYSeVc/a]?KXpH4L$s"J7/8p*[?FoLO>bESj[lB]8 at ODeLNs[V<tWIT=k at DU_K!LIl9_ncg8<>Xtb%=Nf192/b:a*SWgX<
+%D<?2b8$pF^F=:K.:pkcWUPm[R4YtS%@SW)W at 1;SAW$R7l:]3Z0k+)E`(0:ngW%8u.JsO&U&t"4\O'UJi7lfc1^qp^-$3H\UZh)6.
+%GJ-m!&G]Vh]3>)&\SBsR\9Mr7c7:2`_ at ON+8om#OFsFeiRVB8!raV-Yq[Pi]#c*4&JZrUW:cX*nS#d0WV)*Qs+5(YCmpq5+T2RIq
+%I`2IH at EbH,dn=j<"uJF,'8pA#NMq00D0ZA":k7jYoXYAiUpK^LGul=O,b?YGDP+__hE7d/;c$AJ[Jo;miG3E(ir#9)/((4&g6aVe
+%RioR;nW_aH!oom$8DQ=&XGP)X28b++08V>jYa_QPl_i`6U&V>Cr0A<;%4,/,d=sMk9i.sE9?,WtFG$q%p]Gef5^e+D`OI]_Sk4uc
+%RlleP0I!4EpdD*lEO;D0:l/DPfYN]pl$0BpAPZc`lT:ARjZpe\%4HBQZ)7e?D)$bIL/P8GD'oG0=*]9o4pUTHY+.b;N3mV at Y^Up0
+%Pbs5b<H:=93Y(fDqMi/.eGj"sAaEIB+"*5+`&YGTh4uV_BbYnCF=EM$E:.4*fGF"CVc%Zs<_'JELM*0DAGb/,9<"h&7)Ug5I?P&)
+%r7S[CR4u%U3cYj;@D85W:6L;'T&IT-*F96q3=)]*f>eP_7?(Fn6_+>nr2>g]L at rl%/nL"nIjXCC4?EG<TPk/E_-ude=8&0+^ALlT
+%E7h3M22V7ll0qNI\@f*E1NNG#668&r`f=#:bb'4RTP9eG\m,!C;l2iOh"sPPJ%*L)H+!o<,8a%<h-S6`B&BR$XMA?Rh)B?)(@0TC
+%,*@N-Y^+('m&\;\#1JC>.;]Qb5,qjCon#r17"GN0ru>"M,Pff*>k/t3Y-1DV!WF0mECt)tpL\%f3.AM_s0;*#p61h(Ajmau+7:e5
+%+O at 7q=-8#>.2Ppk2oVj5f,^8Ib at XEQKm]cZ+iRc._CgT4K-F=m;p2Ql[?%;a<t,0JYG&Y_f3u^@qDNE^o4l_nrL"$%*4cu0CjDKF
+%kL:YjNlCn?%XFfI`k[*:AtbMia_N9NV._[<X88r/jB at S9FuV8c&rVDXZ2`rcq%mkc?$8;jBr8;eP&Gkp9(2ll"Q+:BAHFZch#_H0
+%C;u at Y9C@WbCmQ&+^u@/?ps,*>m/Q7_jE2eg]EjG*^N9,],F=nc'Gs>1oe#d[=nu2dTjGSfCps7T53rE?m*NtrApY0FFHomUj$P##
+%feU7Wc]kbGDOt)>J&-)T4?Lrg*2%r`mL(*aTB73o[W>q?_q=-QUfZiH9F.jUq*(G#f'NS.diQd#E*I)ZgsE-spA at W=P-9ZTaif*O
+%PHf&qj at lHU4B3H[9`lj[:ehB.":M0D#;hLs\4JVC^#Dd02.+Fr=JGBQ(Qt?0ls/(L-WlPi82Am*b<N$!PKX).<dN8'T at OY6*VQn3
+%Q)GFh4#a0TKW!*P_g-^S'Sdo!J4F9-HkL<R)5cP9`NZK"FY<AbXR-<f-21X[Lf7_]B(gpf/ONO/dG*kF5;Xa^J0B-eO/PZh9^a at L
+%'5a7<S/8g]Z%2(!9SCL5*I%A]O5F1eZ3Uim%u/0SBcnP[>$j`tUq!o$BPc.=2[ebnmQHD at j1lt]Ok2W?3DRg*_P><qS%BVmmQ[ep
+%5`\ml0AFeqDWIJ8C4UeQ"M1mPdMPfnV'c8,MO`takP-+I2oZhm/:C?K9,(a_Qbe;iWpV)RE- at 2bKD@Ce=lh>5)hEpgo!n9%?_Jb&
+%(4-'o%2T[5'3FL`\f8c+##SDccV:Wjrq1naab:Jl&W4>].;&!gjT9/3GR&Zh7.K`Nr>pK:UaS1n9.]f1bI;S&!0h6,f4kRb:s:*>
+%a*Msq3K&aJoIO<eA'&`cLnggSpa/%MR=ftn0K*,F",N3Sa`Iqd'q`6bWGgj$WtQq.;PF;p(Sn]V%JHXg]]Y at n"6'baIDFp<S:`m@
+%iQ2\DW]"h!9J5X'N6WmT#Y\msdm.$-Y>&@^bGZEOP!&neo)[+PD.Y/somI;hla:"_MmZ"BITp3bME!cNL2[oFF1ftFoeU%8jM!h%
+%D2Z-]M?'dRhZ at mL]ATPa^KCjhUbdcb=LfMMA+jeYRji8c!^>)sKqrOEOVVMc$PWQ6DS4 at t=)E]2g`o=QAJ8e4%C%u[k*f=]dRZ;n
+%gVpu3`D:KFCm)-pL^#:rnu<1\I"g6oK3iYje4=r'`U@;4o-E<C6uuW]@7KDY%>9/>ZlN8hY8Ib<NkQo.<K;GCoCJ#jR`\)['q!;%
+%QOpk9Kml)//Hm(r2TeIb:-YE!<pNF.1s9kC=u7lohkZC>/U8W!hs0TrS#O5Shpc9]]/)L9^I8NrT6ZTP%Ih=/V"'LFnP42rK&sOR
+%?,rP+eN$L&G+(M"WK;^VOBBp(eosZ4$Z"F6kH^U_6s?bq^G'0g0_*h,/$oD>p9RYc67;H\C"F\Wf:)Q1jP:+I9QG5i>AbO]1aa6K
+%DbO*+Nn$FI%@]$pDP[??ku&0-h3hV5\TB4Lf]a/5[t>dfgPOWhC3RW'@GF9/*5WD'B9(KJ,oUp=*O^A8-=\2F8oGu+bH>5Lo/V*_
+%WC-7%!q;h[SA1S^MM5Tdac.d\.J:PfRGgJslV>fjk=>H-dVX9,JJ^8Q7$hKYj?&f9C,uci6$h=tHKQs!5)BYX>EB+;;'j>)q`[UP
+%M4qccfC[T;bAGk5o'+8mBRH,-ZjWVs5nAjLeNP:*?="Ppn0^ILOgF?KXQpqWEsFq;#Gq:!RXJ6*HgjPNe_qVuqW=;qL=sn"r=VH"
+%PjKMlUJI#"8L6-;fG6F'_8>dr+*n<<Y3*V^<*S:sKFg8KEbS$OJ^&U'VtQ]S`>SmbfMii9iR_p![:2XgHA$RHh+D=ql1l<_VV:J.
+%;?EQe,iJnX=M+3]F.8!M<i-gQUio`pWWsIDU`?M[(l7Lj_J?;JXgT'FDrhifdr6t%"6s<n/oq9m4R`)MhT7h*gpe1OXk&%1YIf1d
+%$Fh&OA#cY,&(5$$H?0Fq>UC(GQTl)9Kc=0Xl#YU-Y2k6D1%N6jEt:EiGGai>F>L!lV<UaC**e7tJ)p</FRK^V^TW at Q#@_sc'ZNP<
+%KXr;eSZrm?GKp\jg#F$Nj$q@]h=IK<Yk*0^1Qlafd4f7Ma9n0&UVgk0<ZH_DPF$_HF,_]JaYmHX5O[O;?s9/pKB5lOc`k5P7mZ1Y
+%R.=7>1PX?I--2G)e$$d;Y[,cOpQo%UWrUCmq)2HXj^jYpk^Mg\G2f]r8BE?V<6$-enOfP"fD at 6+nm_#LjFtF?jba&c7.GJIGRYUW
+%CIqgMGFn!Hfac/SCL'hcI7,n^8I=)'%MLI0U^62IkO#N%]?9TgR5]ZZ.hDhj!`j.p)4+`!AB6K,CqgZ;!u0%eZCslq#61cCpJ/be
+%H_n;3\%(=BrcKqc=WdLDJp\a<K,7:4i\]5k;SA8V]b0`licO2eIXY5d"irl_Os2$5Nl6B//1FC&nf1^W[A^>TD1)"E$kB42Tk70N
+%9W.C at 3/Uq7d;]Y?PHM]aQalgGFm\;b)Of/-J"(&"hNNc/.o/CYkOiY(61fD`=]Y5i;gRA$dN/1O#Cd"WN@?`G]P9t7d>Z)+(`%99
+%c/j#(*F>9$2lg"amYmhq at s^9*X)20H[5M2j:/)c(QVh9)%C(PD5nZl^U3LZl3!W;$C>0LrDG-Gbj&fUm#?X>B6r*AWK(C(1fJ`YZ
+%pG&21<4]h91:RU9<uiY(pPZT$M91%V3&$/jXCr:5YN$nY7G0H,4_87+'Q.gJ`:1id#?19&9:df^0CkdoVO`-e[TW[A6HbA at anMI0
+%"Qae1(X!JKE+tWOcCAaP#O8*IN\spiN9&84ct["+D(5]Y"T_-0VS$Ub/!T at M#ZB,lE6\>`JiAae at gAmB53RM[AiDT at DZorZ"tO1i
+%m1gp!s4ib>juHRGA,_^!oNEg4,eE\T+JQ<fr%[k5?`1-F4_8+[B6):"lTH3g<]U4[<!%9CX.m?K4P<qoOE8hb61Fp00KAXknr<4p
+%#Mt,=iEi?Mbj57#@WlW49o!I04&;Q1))hf,R,h at QXdpg04')gfY7ugNV.iGn[+AZ;Gu)*'mhbasN!2G(A=^WcT*H0rLc#\O#uA;l
+%2torKC3 at eT-`/gkKb%g@?'3c/V*M*9\ad5[c3V"Yg**LM-i+K+6_4R#e^cJ>M>IITh9:CaC,ff^r%[f<hUK#e69AD9g/sRLiipV]
+%)o[M(>Rq$2EF[[MbVb+K at VE77MSCJJ-We:=%e<?s,KDb9%u$"-TBG'[NKRr&0UIG=0f_6Ba>DE^&!7iIMp0:J#8K#B_G*6 at n/[B]
+%jsg1N+";\lj,RAq66g7%/X1"X=9'o4mMmIWV77I\'0d'c^FSEgRL%?&BeO8ilA/9<G9-6'ni1Pg)fHeM_.Xr/F1L(\HI!=u#>'"D
+%=M]X<%+^-U`D4FfWhLY$4V_Z0b*kTeXcr6G09*0Xq_S%>4d*s89+iQtZ4K5A0>RcL"$=NH@%,A*p/##uY&q)hecukJBsk*k&oYZr
+%qL/$PS8gG>>-(9`Vic:PXHCb=b5 at 3HalPGSc4SP&5r^bM0U)Y#(gR=&chX!sEsg2#Ha/^=;tF>k)]ti7Ms>m-a4EK+.mW)<SOEY=
+%9Gp'/<qp:2_T,h7"_@,TZIN;pNgTYu;>@IYR7[NtoU>X++(MF4,^*bjZZAnKS:/Y7/.MiFQ,&V0c$\jSp::@LP;<i[#Ka_cQ!Em+
+%>%q/=:M^&i2m'6qZ^k"\g2C5ak=j:3^=,A+84,pL?aEcfJINNhM\l]jSAg#T9#XA]lH`3BRK</OLe#I3R0`np>iV;e^O'Fkg$#HY
+%$ARNOMN9_PMGCHi=!Z-=2?l*Ndjhs%[jc]0KUPpm;@4G\8uLdKC#GIF=RSZ-"9CP(q&[)1mi3sq%kJ6-_I)(m*dtK0L-A=<Lmh_0
+%TWBUVOsT?.=CnPo(]r4nJ[V)3<=tQYlnR/;WQb<Q*q[/q`gsHo[6'*"c'=0"!P,,mSM^ktOo5e.#YEH3>?pTg*li/HI<fud="#P7
+%Bi\/RJq!t;]DA+L;I0 at SLc*"<Qil8;BXiW!1WXrVa&[+.'D<K2I6QG*bbY.i"2k0JJh7U]NnHpm'QmjST6okk:GB'm<UGh0>igG?
+%VQa.S;*ie8,ng=ej at UVD2XJoE%UR;(7ZbFeJI9q*0oqOMEWLk-gN]^^Gh;&01*5-*+5=(KU$pY#f<asL2k!SE&52:FNZ'>R<4EEG
+%hIlC42H8!mVM,o;Od(K=S5=5Xn)Q&ISl*%//JB\+LL)p8]Q1;CTKlQEX-9'e/SjO&->-.aVg-)&S"Jne+OMIbk2^=hQghBqq7UFZ
+%>DAFL6u=1 at Cm,$dU,$<;g<"cEA0pJmcFF9oUKP;c/RZZ!F55q38T$D%]6;3M:>"&?cA0ZL:0=bWS]l7N$.FNl*Hf-TQ'[P#C9 at HW
+%.:,6PDgG_]S1Sa9V+1190ZtgQ;X<Wc#=<8b5MqG&Du at JAS2ETcWBsQ';p\OYlqcPM^0N\Cn$W[G@'!0&<F`I#<dR%m,Iu,%hEL%R
+%8cP&-3.'*t9N at H1q2rC@$(V9,*84p`)!tD,(;;52jsp%Lfi?G=hl$/_?_H?A;\af8Fo`V)9L#!dJ&IL8k(D+DO^j*2K9GpP2"6=N
+%gc,r=SA.j at 3QRL$i5[P4;oc at 0kba3bVbl0roRUW?_2(PQ2]\O^pOde[C!&<1 at rH;oZ+h"H$8+E_+)T7-at]>Wl636`%)mel;3/+o
+%CqOf`2!5k!DgO*PC^&46bK!g&PRM:2QN"6W\MRgO.- at B@m%[u+7**%l8X.e'rTq9]=4^Wb.!$u\*Olr*gOYAK\ZJ"@pSu$9>d0qV
+%:l%7)N(FF*3p0u:F.%X;"DXPBq_f&Xp_]Xg)^Y2)acOl^b[$D(mYY<eYd`nG?m%@"Q,3IB+j3*P=c"M4qUc$^Q*sWHW:*NKZ1b_,
+%AKAl2=/ln"ZqUH=okc$`LF-&PcaFWF<B41Y=5'HZEE5iK\Zu%h`\Q[5I+\M06P"A'+,+E+ne:gU?WMD)7TRhZGJ<IF*!RH&[)\]`
+%1#(FY<R1Oh>u3$&+m)iJD2d(93G=m(e[;Vf7])duP!NZZ;Q>'+S8)<\^,Igu"WMo#H,Hd?:\2;LX=u2Zmbeosnh"d8?=T/Q24D3l
+%HT at m;o at 6q(;,<dWrq;nd9Z6Si,agmB3U9Wu.^0H]9cMj/$Ic1V^:fZ!\WJHKk`bM!+Bp:IkPJ(HfGsZcX4Ql)ZNOsjTn*I-6c\Cb
+%0^kP,RKPu4efu9";'K\YB,^,95;h&p>J8gfV7s>@2^UWl+Qf2Ta6,GJDn#\4N:a.E'5"4mcgA8/ak31_c!PtALQHJNjOuin35P%$
+%>_*A7?fmTmK8`Ob(7]tk+7h8L^`m,?,IjA!r&`lr?3uAA#l6RQq7*M:59fK+cVa/g:nl^*g]K at 1AT.RNF];"Z.13i#jZjrA&B#Vd
+%^(s<'!LiQgOuj:6[Bt0"5"a=AP2kgtfJQ/LfDSh&hrL%+0%;>rETYn$!r#(qJq&"h4N97?*dD2g[6KX\JKGU5_`&;D*prf-WOaO3
+%fB"+c)uu+;['C$`Y(>KPL at TS-mmc-a_-r%PQs')\*rC`=c:0PXV3o9a`SS`..<b'Gj>`sNI4a&R"6?#+j*+Zk,j1U\DA>)`2%P57
+%4>1MTLTaGik:%ARU3DIX5:tp/iF2Eo?308n%A&51hWa+:'*0qW;^!+I9HM\!SC[*"<$1#;b`/-MI9q)]EXU5&3]D/"6LM$hM!=G9
+%Jlbtk648o4neXaS8h+#s-)V0E9Pd"6B6sC1JDQ"5O;Psl?.(^(g$QEb/\<;V4W1Y'?Lt.5os/8E8WVuSht<PgSF'eOh$G=4mSpEo
+%5<8s=73tA+EG0[,:N#MW`AI^UoT/Q+ke+DJ at tEZSXWOO$o8p!Jn at kZV]+b!+T?l,@%W(:)6l\2(40-;ah/!8_c[9Ps;EO]Eg[Zb<
+%m9o!t.Z!7cR^U#OFhS`-gM2)=\Smj7-'s'HKLp>Go$Ti=kcR^EOtkD*!%uoADRZ]Ng,W)F>.M8+c#^NFOmY`E1-oLT.c'apF8J[H
+%&qT<2OOM%o.YUj?;-OC.%I(c:7,FaHGRK[,kf=.EnBQ*sfQrB5A]E5M]8)iJ3O8>?f-i^'Z*4\2`BicA3&[EdkUZr=Er]9^2.!74
+%4no0JbEURuf/b):==.nU&""V!/;c1WJiAS:5`3ZW3Z+*Up<6Pd=WN=Je-J0n?,*u9f_1"ui-!-I3?PF%4U8!D2CXiN@[opK3M.c<
+%lJl>=-K3g#i"Di%8LJ!9Q84U`f$kB;gWNKa&`+mlgXo5&Wu)G'$NUAke`Ue1.RfGMNO]:rVS'9;9X[:=;U8G_9(^3rISsJ<<,(]8
+%CSJ$jb-C8N?7\!_2t9G-fsde(=]L^1lbU:lYF<'e.p\K0[U60MD^/_b"NIq3dW:%iFn:b7'pQtW,h!]1-5YW<:/lWs+cWq<:lhAc
+%"WK^tCEc(UHI'te;mr<8phVRsr4S7`*b6!F0nJ7Y02!1O.c?N[ei_HrI^pjue>Iab5h#@ubON[N]+Z-Za]9QOj.DkT+j]=iqRPZ`
+%)>qROefCR,T%C&0SpF_pn'=;lpoV+5aHuQniQfbsRu8aDrh::%Ula&g`1?OH^,HGE`9,QHWCN'gGJqdN+bGG<2X'NR4;uIme7FFI
+%R#NZ9^6eMS]^OlU'Ul+Q:+>NX2bF5r/c/0n7aGd>R^+;KBOCiEIjOlSH`er^3;/W0aoAG1N(S'h[?9hp$,?H6VRguu!'8p'=j*Ob
+%A=%IT5YWan\ouj#]ECNOUd6:k\*V<Z+d[2]QBJZj.uS+2^D)GA1rVNUG`6*td1>d2RdTl?VKm+%a1ea_ZR]=F7Ecfo/5d2/bhn$U
+%#h/"OZ&96.L;b:9j6Y^F%7@/]h^/h1^lq+bL=_r_s'Y__<2"DS`2W<j<$GP3O8,9s/TV>AhZA9c,=qj&d8CN9ioZ<4oj&3$)@8>4
+%0'qY>^oV2#IA45Kb at CQnZmiu)SshIJ]N8Y4,h5!0i*bB..__R8?RI>KagF)>19[N%Mn\mL!e1GpF1N.]C6dhi8n3fA^kIcf,hdU<
+%@=iSDkn<?S)jeHFS/c:&>`\GLZ#K<p%LDK)n.:E6"Y/jS":S=/7M;"NPjQ,bEZ=V4H$iBaRrePiRK1q))+=$-87P^lhT3tZQII[d
+%l1o!4KQV4!54#4?Jlf8F`\K240980AOK2XrJk>*8+-NSF.UsS*-4T+4"H8L\qeAc_gtti^Rln?eI8WY(9BC0V[m)L2AQ"DJ!^cJN
+%7KZ;>4`NR9-O4C(JIjfuM%L<C[nlLRE0jollS"gJ7PJdDM?Sa3F/NZQogb5ncud!Wc!ks9UdYPIc+'FXi9Vf#!DLCen"$gY at S9tG
+%8+>E%F*M,+-fdubk+/L("ZNETP&s9WfDI-\:am!SinbR.bP*o'j.V(;kC%7Qp?+k"k-b6F%;,bq?RiPn5,E-n?93AVQ;]OiI6n>W
+%KCI+8)gV4#3;Z$lNni+/^NGltpP6a)A!i1kiV7l+']kiaRXOaGNs*h(*U5*ZcN_lFZ!N(R,48Mk(@'$<$0]<Zl:-sja7 at aJl)Lk,
+%-%8A%.`lZjVqG^UDn[:lIF/lpgU(k>d7lg=9Td83'jF:YVGK9/dro_MpSBO3&gd38"dhOZ$4MPK@\Dmn.=Mdo>L^)c^5i_<?=ss`
+%XnFZi72s=hd"3[h3k<>2pkG=G$^!A1aQnrg.Akok:c_H40sR.caZ6DtYi/pOSa3pcB?A%d!h503!q\%A)@_<,WA_9Qi5\R:3#=uO
+%oa[2PeoKOHk3u;ehd[9phPd0NjMV,!q<V$"oeOaCU?dc>\_;>=M.&DF>gW%(5!IFgb,nYd50/0kNSfsSEV-^[+-Y2#eJCeE`1[%l
+%TBG(44>?+V,/4qH8BPp4*D)dAQ?7M)COAs=U$H[C4m6#m4]<"_l3m[I;XeNi_l&-JlU.uKl?F6IbH.gF/UV$55md%ie[@T`Npr8!
+%3qooNM;%TS#V\l"leR3S8XR'nl.d?73UN)m%Na[AUgd+"9Z1R2KufK?agd[7oPI)W#?Oo/:J,Dp.e6enTB9t(mA5Kp#_`,Dgg]XL
+%:a4FAVDLtmWR(lLE>&:*qaoF5St:\m/Z10Crn)l,4-)G-"QtpKEtqbElMR)G+A(=JG%t5_#k5q8f+u'R4POI#^:\qW)$,PQ,uWUO
+%]=l5cQ$$(r,&<(*8jWF4;rN/joFY6*V-cVrNBB5Vg:cEZDQZ:BE7L8"Zp3-7nK3@&?N&,?\$Fkn2\jg>[K)iXC.q1=r>6a at YT/^i
+%L#2'FKPnWf!N8jQ$)lZ=eMnm%n&IZ_q%I2Sd0df;msF2(-a;a;PC"0+2I78E1BNS_N`,;N$603pk<9_=L`7e?*'LKVH'st&c8 at o5
+%o7XX!5efA%(*aYE-ipW=9bOi=J`4K+U at WnflHc9Sge_5S^Du16 at dG&?F5071/$o3_-A/X2KUn,dpINkVB+j_L$%sm5hIOE+dTt9B
+%A\*N.7ioh)oIEkfYQD?+ at oMc2_)QQ^KXra=Tnr0ujRU\2XE'L<s"(W3XOHZ00MAB/?!g*7=9?M5i at Scr--sosc55i,%tN\8gh"5_
+%&Z:fV`5n&nWEOp(bCR$^(S>pi&G(nEa,clJ.kK475B[41[.sugj-3X#4uaYP\loJl(3H!P&a18Y^*D@!`P*efK+X,r9al$eQPB[B
+%0 at VhD85e7Vgb1)H$>Fe6qtDJbs2'&lVY>O6F,Ja(Xe)[Q8e*!d3X+4PUmgcg^^r'i&O&fd2RuELMd:C"X7`HrPlkG_^%'.Jaa`r^
+%[ruKiD()1QUUKWXMa`\-ZT$3p(lD&*P"/Jf;XCqI_.`mO:++S(L6+^'aX;Ch<Y<roNm[9;1(CUOL10"4<9`'XDUu#KnnMGkO4FH#
+%O#q,L<(\gRbmP"'dj!LQb4^lJ?tqA1hA!kQ;gH_4Ca9>pEUm?$mW<n'$8:[-RnZ_c2BGm=]h(mCCsNQl"%Dsk,FL<78UgVHalU%o
+%Y$2WX_)"*^/9Ge?W].]O>eSA`*sniMT9gnCdo[9]m\jA0\fs:fa_#i`cJ8:Zc82FD[2G;m$?jsAR:,-aT6UED!m/&M9sqX(Q*g=X
+%PJ!S=YEf/_IlIQ6pS22he!]bN:0-*(9Ue at S$ccPMHHAmM>]uD'`q%1imdui$$q9aY59o[SOX;[_i24<i;<^_YfS[ZFgl-+ at 3D3i/
+%]B2fMqjeNpm%g/<+F'K"_Tu(qA_r_+BoJ<9"U]J).<DKS9)?ceZ]uah5H#j<kb.<@$)A at Q$G,%Bj8pXno<fk^O at hb!Zu.0FnMHM<
+%Q//W]HA>G:Aru/3[e>'jA5$f(A4dU1CTSdl_O,6'r"/G4&hX5K)>WFX@,m8HTsn1dW'B\lah'LNVdS;j=N#nC`RBs!6O8*9GtY(T
+%;U^oQ0d'73fUO%QRPQprd#>ZI`4^;a6p^tLc_8V#1n_/ilh6)u1@^@`O$Q<W^<NfNs1mo3DN&]f`VCR.-_`gnAaa=bYSbKXjpDgt
+%VG7?7Ish_2SREHB&47`NUCI/PO#lrZV&K7`p`?E[E9lb5U=c@(#lmL&Q7T8fbG#X!/[LK2EWI"`kW at 2;a^tD:)poaenm%ZDVkjut
+%eoU7Nm1WBZ2dmbL;[$HMMr-LN3Lc?A<aKh>(2g^C%>Diq/X:=i;h at DV(rN3'T?ieHqd3L\-!5P9F,HH)J:oh.UNI/b[-#C^^!ttQ
+%XH<s7f\UKG-!c7P7g1sE6qST'%`s"0gV+Zr0.=0.Y:6gWgHh5e"cJ?^5"g1XS:%E4-'Nf/fhrHM,Mf0;^4^<5`R><G:A]A5OPPS"
+%FPUU,%!?;VmU(u5V5e[[K?fP0W4>eWW`!k4LrKVPO54#R8buELXN]P^,>KdL&,o7B6Srp2:D56^35/:>VB=qAmqVR0P/[i(BrO'k
+%D2EA#qJtT)Q'.;jp;fW!Z(F3rktkk\)3r.&?a`WqD/)_qCKGEEY5?@G849,XZ-I8FM;!4h_.uWI(IdV at 7UpVk1_l@GcbWEVUc;b%
+%An,.`HJ+*_<QD`<+!Os=&2(f83um-3=YKM12mAD?80-6#_I#?JjL`-C^Bo6*nhe2t%m(n,#il3r]X#&q<U,?9q)2.dY+$L_EDgHL
+%9nff8Wf\C.YN\Vkcu[cM0QlFQ&Niff))nrF9];QEKYYsec97SWk at jqT6=4p]-2Rnmq4E2'QUGe-o,NjMLHP^SGDbpIpBc%(M%;Z=
+%W<&+UnIa``dX2KdH#\3mDG!0!NaP&h#Wh>='FRKoe98Ek02,Cq%^)*W.6[pl=lN35ZH&h6.U4kZ_tjt=qY-=`GYX7q4a8JRccX?f
+%a&A%u`,'o:Z>bTBS1r8g9qs"g<'D=4F%M=ee5>fFbo!iCD)j57='efT:2p7.bre(rl#X%0R[8aPE1_DP3D:4rBs'l[:qgr?6LmW@
+%0Y7jRE^@'_I=C9lY+$Q<WH[M"Vk5i5/ib_+T5b\eV4 at I:+`l8,?q+o#,P/,jGXQ+iIKr6<i.J]**)]r(B'K8kQHpkMBsOjPb/piO
+%$sn$Qerb.h/iMN)^j3Q+$^\Sg9Cf=gUuc.<=$Lk8p/hs>Ou-:&e<3cJ=A!>Y'hkU5nA7ga8KR2sLY;N!#:6&fon[m_%D$);ST8/A
+%r41nI/7s)'*:otho\)Wacu(TlMq*QEc3?%Y"^ifi"(-Y2.-&;]3^6rnB*tW?dY-u=oYSk`,!/QXM*Tqoj<pMb#T$5[\_"sjG7X%(
+%C%=1a)gMMl*3</o6LjA'N9OZ]?gB<>gkGi7JTW_#^Q<8>MJgRW.9*@uHu!/Vj+m'sSPYiCKW\<,noC5 at V[C)r\s6dH=8<b&UNWY@
+%amBPr4>3-](1"83WLp`BU at VZtIf`N(eaW37miS+5*4h]L1=*FB2A7TX_eGRPXB%So.>hNC3d!rYZLT-.+j/Lk3jh;^I<]#MK?-,q
+%k#UfJhAqfYgh'9qmhQ$a>bfV[s0\e6lu>ejQDD]uB,;h%7tE5;FSQ>Y]r%TEa"_mH&d%dsD.'>nnq%s32<%(sYSad569rEH62E$q
+%!_W?Wp+L=0EVp;e$jj</HL_C%T8gX!dM\[(](tD[9fq%`Z9='03NUfsQNe1EmF<Cc$(E:?/bQKMO1gN4?eRD.1t/I78f1Hu=KiJ0
+%>LjiPr/a!(%i1]b93<SY$=2$ANM_r5d5ei+Y>p\#"8dY186aO/h)<HfqFj at CAXhiU-Fb&[hkd/G5:Vp(<&oPr*&gdp#=90:4\MtE
+%PK05O(9&cp`jN[Wr:Ji2_k_p%1Z.Vjs7RR&[;Kk5ah"#Z,8q%X`-$BtVD\_8H#o1LY\U7*`!Z=&5R4!)GKWV#2SH5<+dP&GYU^I@
+%?^CWX+H^1UTAsL%N?DqkShGVV]A6FG7P?Uni+dG3!GieSc>D2K27Lb%l)n<E4&nPdCOgd;;ENJ.QQL)>'o3TP5?0Jc at -X)RdWQ at B
+%r`,ucFnROf2bs=Rcb^NsgjMjbh*mm,Os0KY;61djKe_ZDHaW7q0hAt^3Y]C7+:aP)4>J1hX!;Fag'a8kSZ2a-.WGR!8tbIomCtZ`
+%SrB^>&ot]#'0U,!.HD9DPm[P2[bK)$U;grem<P"*iqu#0bFu&YfAG_aVX.K9m3(.mnaWE(Pu!M._&/Ji7rm,k at foR0SX+:1![oIL
+%j41nU+-HE0dnWM)\WW`N,j+_K(5Qd3c)Tkt]jUS]PuB\Xj4G^]J4CNApa!,0)"k#EOt=aY.u?JlX4(M`2TrQ::fMoioqe#nkgN19
+%m$];J3,J=gomb'?j?BpqfI1_g6$CerT:U)C\*-Tlq"Js0jIoq!DY+JRbelOYMGjVgU<B#:fa(IYYSONm!W>\c*Wk.$ViD%C"c@$7
+%FcnN68Y;lSR`sWa\OoG8j at KPT@B8au2]/o:C!Sq69F&anqK1#,h7hCn*(1WZ:^!d)oee+B%YZi[GgH>+Ztl;^hjZ^EJNUl_U%?^U
+%Ijl<XDQXgJWkXOt>;Q2G&Rg1Xjk&7H$;]5P4pdCI0p-[O5>$KY%p=1U,[]A[k-.L8"/]V=%]\jX+J6_bm$MjcK`RcnA^/dg&gfYN
+%B6KM4UJJt9"0;'B+%rY^V]Wne2V4;;j#_N00`+sL%3&qPJg]\./90;Fe at F;')COL)%p)BF]V9uWZR2"ljRE=\c=8It"?[]'e)2MJ
+%Co=FfLs,\=O#qS5iNX`H>/WuJb\o%#',%qZV/h`jAN]Z&8b:S#qbUG0lSpr<TeDOEDWbVE7e3-Eb-[&W4!AnVOF-A$-OL(>XDC!f
+%V!2u6,0o.\[rch$ejs!&I_^9QocNI%ooh!&ggEIqW[Jd at 4Xgaq>hd)&Z#n"P7+5a6E1*D%T6O!ALTuYkZmNC4RQOb'M-.NU[r[X*
+%jHK.:[*:'!o$*P"el8c)otJTZ2q*Zbak]]aDT:`^k<f@]hPP^cFZrkQ=-8al/]0h`-:H20cstkBR^Tk_JQ&03)4:&fkT^+4Gg,u#
+%*+^N!"[FZ(\T5:G9AioW+-A,BAdboc`_mq5-3:`1Yl54.::tjoK[4LmYC4O*C9Wr^3=@l9cp*(GN6pIN-PduS5Qt.cNfS=C0;pQH
+%MEB^Yr,rpuUN-u!cF'eM;IA^YA^'DlVu%S&M[i7HnOi2jI%thCO5.?T*NgZ=rYI=`!%@68ohY(Q"gC,!-4bjNrM4u%4'cgQ5-rEj
+%X:k`EkR`u@:Vij_o(/46A)pgWnQD2(T*M/*\k8fg1]EJA=Pg*m7r%[hbkmk&in]U:OUL@^+Rf^qZp$D)&".I\kVnf1N_bbrc*";7
+%9[b/=j^'.L0DZD4XOIi\e\omVY(IZsj/2D79NcGs>H5KsT4>-5=2C'Ma1%-/E:(d-lbn;!'No[ZRgBHkl<NDq^t..YMP:6m<AK.d
+%o,C?n2FTl/jj>HTPkSu7!5b0<%mjKojLS/B#1dhq36="e^&E2Ma/PV(nk8j4?f56B&C*`qj&Ud-_%7kn?d$YZS at R`3Y1RX=`,sU1
+%1[cG'+2OLbel3g%*h>5cQE9Bsh<HEN<Lr,'&mV[#OUUa7q_$\\i\!-HGS5t*GV0t7P+?8hSdHW&j3I3iVWpfHQClgN;9N6j8P&33
+%2Q0a(dj-"i9Hm\m:(j0gqFP]T#Ff6Aoo(j&!,9nrqlq_o`B.1G+.=^F<'@:`"Q!QYWbn[,9(K-cQMD]PUse>1c4a-22VFco(SDA]
+%T_1,K8p]mRbIt=u0N:SA.Kld&23/3_jUA0WSL<Ak*o1Sd5nRb/e+rmJC7?J=Ff60aD/X;n\W0Y>,H1Mu@,"^$RCiDJ/mEZh%-)EG
+%+o)Bq=CO]parU at R:U+N4Q-DtHT/hM&[c][A0CrcN8oU0soOrm2[=>+X?(,UT-h#<h2'tInGdVFjl,b"opcb7cqoW5@]#mT*:#)nL
+%1FE<6LukG.9d%,DXgu.#Ij_f@%-#r3nn_^nFagYGS-UXDs+<5Qgt5MlZB!T%Q!*_93-\H3#S\c>goUFq_ at -*_I,&-:435,&^HC"5
+%dD=gCLL':JP27QLe5B*\6Q&h2S>R@!-REXOeea"HWB%'SN)T<[.lR`e="HkP)aBB>@Z$I6N%l3BFIYm5#@`iKj^!%k[_E+62t]o5
+%AEQm:IlhsiSiNhcekk^9;?[d/2NaeO$1?D1 at H:<e3=QR`s'#ajE]/aK]lR`.PGIfR?0tUm&s(?$o)/W7\5La&hoSf%4\9,m-7nl*
+%WH[I)g-SIK]*#g2N&cI9SPLiAmY*H`S^i*g%*V[(K8gj&Mb:<[Q\:,pddbru#SXf`hifrnMo7T>1p'Z3#Jd#4V4OGM='<hHcI>fT
+%K+$@iEt15peB`%MkVmhu>a"GbV/4I at 10>JhUJ!:Lili0GFgrJr2O]KRAVckZS0re,P7=4#KCZeu%+!ZrpmeD`/2\'jT%mmU9)JSm
+%J\fN15$c*^+@"PW`2Z_t/>AjkhfEsS/sD?gc[BhP4Qj^IL@)fJm[u=:ZpPaWYsC`6aY=q^=#sF!>]kZKJP(Oa>5P6Q/+^ql_)$dU
+%/n9?UR<pFWZ8#dO7qhtj(F#8:*>d9(V<MX$&Mi9Mf7&!MWG[tO3B=q$FqcF`/!I7BKa+IO:6D#jYq\bk;bG=cf'%:rfC??K=3\!h
+%ZSr-in$TfCB!g=7X?B^,iM\lbV/4p at L=hmq\B0pjIBE3Sk(YIqe<WK987fo'3Y$5 at ga9%+qsBp7e4NY4*^T9slFCW9V71Yb7+LnV
+%M*;&Z=)@0MYcIV*XN<+f8bE1W^U^_%B)K;;Ok"IfEir/h>^TcHWu`DZTr=OSP09DBO;dmTh*8[#dln at F2k+F"Zu2\gY>oa<JiuWi
+%G\&[QVM'm2<E&%(nt%;7BG.*HS&<FCXQ<H!o"8<cm%sOZn[C9+&+T2NW.RY*c/jN8R][#e>K=fhe$iXi$45;F.IV?.85'PQ@\]I3
+%2lp=@H at M+\O_+F.]a<<"a^?e]iQBt[%Y]R[;KRn]#Zp)mPL3-%$G('Je=J)4P,jkJ]I;LCPtD59("5;5Qjqs3FXG/)Zjb[Ze&#Qj
+%B\">+)s=?j[;cK:_Y_pHRM.ENBcih%3t[UC7Db#_q%uDlUDl8W'X6cEAR&BR"rBD)'bPZUH[,Zt2m2`+:Tf4nmX64q)TY*&7="d<
+%:8,eYOs'G?S25QGmD_ce0,K_LHC8]BEg?R2Ks11)c]*t`68K6M`qUK09&uRc\rQnQ=b)B!GZ=oVl.^BCb[8J>q at oF!.!Jtd,)csX
+%nR,!!E!H,JQf_j&^K`Ysa at .Y9p4W)SV,PZQ$ae/U$:=2Diiuc;a!GD+l`g8ts-eXu[Zjff9Bko3J at E^'$N.OfPf\<Tr+isR,oN4>
+%AE#pI;*YVL?d:IqHaOubhu6s&4MQecZc&seKUMCt.PbT1bB=/jNSOj?/NJSp_, at E8aMVhLbeEjm36(b!Xb at F5\P1\W^Q?3Ud2&RU
+%On2%S6WYZNhFFD$A\h43]n%(.P]YLmr5=_Y2+81%HK320K_'4fcaL1Q&k=:%d<U;U]Jn#=>tm/oo'+`OgK\:a:56^QliT-eMp)bG
+%D<Lu":&bu=Y_r#SVeTU2n at R(.YFN$Q2)aPd.R_H4Up@?p9qkt3#3/;Q]?*@@3$S13W<?/2pjlXaM7JPNF31S#^>)>;Q=GT-eCd\p
+%V#@6JT8JWaDG>'r.X:BRgOBG4rJ\Dt.V[>UTdO?4r1_>B5;C\`cPbIU$0m.ohV\KEF8VoIBbqm/BqnCn':@.8]7IDrXKu5ZLc(t`
+%^4i(V'-ep?RCjoRdcW.LWZYo=Ei+X!Q5tZ-Y5jo]\aNH2M:5_DZSC[j?:]@W-E6Ol%_-e],iD%gR=NqZbkpKg-GJYX=IuNoE&15#
+%h6Ml4n!QFdUd"VU5E1W)CfR^dT4(5h^H1!SH^ug- at 6h-ZJ.n[``oYc;C7f/U&X?d%4pd"d`#GWee.S/CjPb&0WYXJ[*f=bQ&X?Tt
+%9oRjq at t#gR6"NXll\5QEgFC5p9'0LHF:uGP>Gn4E2ba3g(;h6Opf,8H)5Q\[1fo^ID at mUA@W-N<c(O@]d.\94h*^LnhW&P1^mC6i
+%dq`t7&SoberG>c#lFB`O%/;:4,Pnd6-W%)>0!XHa#S!Y'o<M:ah^Cp4O11(nU>)rR8[Zn^Gd=k'Z\6)X1h\bGgpW"@h9EeR,3;uT
+%li\u4q(2>gB at eeXSMqHlW(s,N*@Hqe]GGC(Yf#ZK<P[<2MYmYDXTu8rKn=Q_Xa0!\(M[t=c,]M3Ll*tr8C/P_6iiAZ8+Q&f1F&mm
+%_+qD`o!4()[`5\4s2nbqR at .K4IdTJ80DXQm\"ffM8dVEgMVsFpNlSS'^\bllCU\RnfoI:E]dX5>;Zfh(A*3j?D/#E)+AeVmVjDFl
+%M=>h[%q)[L'"=GnTUh11lLtjIJpNAO#%>?+1C?Lr/K_X&>S$V+?LV*gq&L"JF`9);dl(qt&8TUYagJ;*(+DKNA:tL-:-P(QI[bJJ
+%/UosV?aonSEK.[SrrY<2*9^:aN?k<<Tg`,U-n2QcIJ[\^-#_ibFXiMu\5T/dO]5!0q#jCpJSpZ at d2Af.7,)$B/\11h"cK,HS.Eca
+%0ZAX);pfqDT*bp<E8HcuP/+53,bD;aDk_$)ZhgG6<c+<4]f?pg$T:UMX0,B4TUD0E'9>r>p%45=W2KhH&,tmHrkMpcG<O'\jrcJ<
+%gAc!'CI7[EVDNL+0(q&'j+)E.+qA?)UjG[<95.FpPm0oe3kGn1;J5LSmt^9/>X)LRD''jC5HdBEgk7r`3hJTJ:>[\4T&38ukE2H:
+%Bs/m#P;Q_EYf^PKM47KAXUI&NR5!XU[+YT#nuYJM%nd>=OVJA1qY,1?!o#[rP-C+b5$#;aCbkaOR,BA^UaLn<9iTWh/<o+;,b1(s
+%ndCa`Jej4B[MPjgoN-&cK)N]RO\(YiVG);RDe[ZpJIGD;;#0]SHH&ot-LN'.,oS,oYVsd*)/aas8*/UFM(mIHDI!Wl]MbPfIX?.H
+%'!HcbDXq:$@kr24@'3duI&$$*Gg)M;+Ld%'An$2ql3r+_C.bK+*>97)@&T=9:2(Vc1ilfEFYf.=P7<VrAI6R*kH/K/Y`b/O(S(9C
+%]hXi,h0h>>qc#4Nl;[!f1rh.N"FK30;"5UQ\oHN"M#7rb,=Q<$VIdbDI89=gQ&f+B#sU=[b:1s_gG"._b4=Y,`GWFOs,685AAL@]
+%\<E*G;YoK?oK:Y$8G^EDm:2VK%N]."RFNRl`G"`MX?f2/F8m'bQn[r!6)H'Zf_&f;RYW(++ at fSh(`^&EWn&V/[jFF"1Y-qF2A]W'
+%&.hu$-_CHB>=X)iJI9X5K(VMQDfCq!9gW1e;7.BcSGBc&-TT+X+O'Z,06_c9RfU`[r";kjGu$"Mj=M]_2N..E8kE&Hpi4[i at J5l:
+%Shn[<VK.)YY"Vi>P at rmqBHO_FGidoh;'bGpQ<`*(.^6$1n=uu0Wan7/3S_g&l3p(CkIdZ)Ug7BaN+-t"*'Wq1hjf=J,EFD;H(nbG
+%g1),U2l++[=k%#1ZV3NL>S2=M<&F;66B/`J-V:r at -JrNC\GK3sM-bFeT&(X:0s<<..*-=c_1-C88u5m]TQF;gYn%ZgU!jPYfKJk+
+%O&i_@*J9I=r-cl&:7Kh8l$&lQ5tZ(,QX!;rkBXXj"F-,lE)KI],jSKCZYc1MOV'hgKgOp2h/t;/*ePGmA_p2jQ$f^mlU<,u0Qji;
+%RSYf=bN/GHdu5]+j3 at TQ.mV@Wq"S!q]WJ?]Jb3.tY1_.BdmWduW*4L]c<fZ8]din#lH at M",A=0XgOifCHbR[hg(K['Gd$?-,a[GB
+%*7Gaq(.)p*1L4;:/Loa"okVCN-?j[[*Qfs`RNje9lQrCOMr/%U'`U"TKWY8cq'3g at dfppPb-C$uZC`=::Fn'$d:Vb;1!76mJp=eq
+%/I/s<6r[B*5Jk,[9c>UT"Y.r%^'W9!'c5Rsrg(rIMW.B@[pM^pN-MQ2QPF3d5Y[6/ZhIQ8$ad9NU%7K=a)?9S\Ida*O,,05r8g&/
+%Hd*'h?#efphtbmZDg:SsPA+QBPqYV3,4LDa1IW&hi7,C at Y_\bh\f'.":OQnJ=g#2YoXo;,(A_+%Q))(6J6N]L4ITX^b:JjN)l/p$
+%X5cSgT=eOoK$F^_XW-f^SF$I+_Ag`^+Xc`jjdFl?::4g*VpHu3k,r"RBD.=O%B7mTNst10R:@n'Xn'n:[4-VeWa"?(.d`YZ0/iGs
+%?H+)O-)cg<NJ"ohN,09CbO$<+qAlY1`10en>.2)Bo-pkj6j[N&PHMhL<kYj<c#9u5d`I)HArFmof.$=&;tbT>^+uZR2n5Pk at a&#O
+%g+/`3Sm`kNnYFpUrg]pEe2!;$0X"9aOjcu7lS3V4g`hi[d`92I?pg)Zr1m<(Y9e/b\<:%kmW%P<A&H0e&bMn'_,4fO;Jgk&-iuY7
+%N19aK<)+4k;M3ZNcJLFpiH%0lOB_-O:?fhY$"V8rfJk9+&K^m0KpP`Ij9bA'48C0Y=T!2(TR)e!=qR)+IPDVLCq\9U\p9OKag2Kj
+%:IONb2"7EjGTu at 9hH8/%cGde',I_4MF'f?2;gIYjd1[\1S'Zc_=4a6Z/tR1T-:cq$X52S.g<04(NIMZf4Kr.>"rd^R<k,k-<rn1/
+%L1Q1;%oWN2PIV,1:Z].'S2Xm=]dN:;.jd4(KfOCfJ1moAFZUZt8&mO+%*[)kTXq:96a"2)ZZ7(k2cB3)#,TQgN_QAsF\=4KPe\!#
+%CSFDI4t;s!`+(ej2'a.._Y7Ub7%Mt_"Jk_.;%"%$d>&8%QB+qiW<cn/Prt1qQESHfEe]27>]$O0FWDnE9-+@!hf9<h8&<8t:UiY5
+%XXP4lT(A%aQcDn6Cu]k-'r/$GT/n;H?YM9?hB*@-U2c_C4a1B&s-UPK]<8HXR7`*&$*AjXm);eeLN>Z"a]5-3/^/hBKmo-1Yao#q
+%rk)=h"X>l at h!"-Q!k>=XJird"k<-$8TTM$T7&8gRi!kBB"p+iI1!dY>BK*/gc*>]lcGrHo)CoSlHc at L5<@_/1DTt1GhXZ"e(%N0+
+%_hje"mO\sY"J*23/]!YkWH35nJ2mfTaJ-U&(smDKYH&g]WfY.IL,Kk6\=aAjgA93;U&I=6(7O_P$4[YGaLAETh".WY?L>9tm'&#X
+%kN#o\AuSdhO$3sp;e at pHF7WJ.n'(0+/^Eiho at N3ld(.m(S;Fe2h:argFUs(`%1t at oB1a0(MrX]jaigm`CRIB6#H$]mpN.<2O@[Y)
+%r?rhd*(mcNjPC,['2[O;]Il`bWV4HCoE6%Hc3Yu:X at _G'm]^-kp(#r#heAcE3<,k&RST2r(n<RoI'hB4\M;:JWjEeb/R@^=aiJQM
+%#J105jh#8k'62M_]r:tn*9\j>9P#+gqAbWfB[X,q_M`Qr4&t"-e*p6$J+=IL at 2&@@WqVf(OI^bs9(5eE_43CdBp$t\.<JWq/f_\0
+%fU%R'*39aNYg]g0f;$""K??42XSZ<<3+:JZK2gkWJ4FTXe/jGHdM[rmTjUJp2B<MH.6BFUjVh#3')?*`&HMEFk%'$/F2pJb!Y)*0
+%S&tP+ZtV1.$R_K at ICnO_!IXHG0-^_EAAM=(G?&E)@+/3"Dq4On&A#tB:Jp=#EU73d:aZ]Pkd]k'Lh]L.#n\,\)U.l?.63sK2J^'[
+%`tnA0_<I2;eAdYIo- at kogf`Y,W, at 47RNkR)!_9IAI;S&Mp0#An7ci(N/Ybt0g:EIlj?bf&MhFi4?`$TQTIr!Z8)(jPI/d\GTsK57
+%D2E9(BajY!VkDfBF]V%qhf#i?%B#nC]k4L525riZ3 at 3L!AC+Te;4,F\/J[l94?3";>q_BBcA at -_%`9/X\F&?#!a:c4+#YYPkq$fV
+%P:#1OGsR<)Xl;/4Q:>0Zp-ZO^3lnu=i[;o$&:3nOXf#?1bpOp0'8'Cb+1;s3A/?G'^p8;^mP7QPT+i:HlLZ/Q](Q]=7HqGI*XV]K
+%*WMaX[G0A9a?TRbquh9ubTr"o,dM9D':5+]Z>FVR/knsZPd")\[M04DlW9("=+(GRle:FR'74:\be&.:Op:aqYru08]YQGVp<HL!
+%M"88LQHO$sD6Ih38[I]Fd'"O<gPe1,n`ETCOSu+<E+j\K)jCLdG=;e5+>QuPQXnATQBU@:O&+b5)jU/`1V;,h\:9<:c/q#$Mpt&5
+%c"!.FAA+<Y+ob`#j$KA6;c9d\;X#^p4Ip/jc)tbLpsn+,1ja6[PLTn(Qb89-r?.*8TkPS"o<.Vk$\r5t7dK%X?A2%/#)8]+^ClD3
+%dgcN/@b=ZdKk.r\A at 7IU\t8NW3(ZoGGLOgPFX3O5eWhV+0O"3!>Kq*NP`/qkkX;82U5sX#Jmj];J'0Rr_orG/HCQ?OB3X.Ofdocd
+%afWPR#^!+8(oTd_kN>i$E9UjepZ>=WD8BP"eCARG!b-c*o<]NgKrR`X?JaMB[$jY<BbD+q!=56n3C_ZubA-03+VKJ+db?jdi+7Qb
+%,+:BCAW#X.?J5W'D*:4OM1Z*nfIS[SEJo$MpXSKgR6iPf'P4[-pt:3lkf_^4\Pl(FHn>"sg71(V3pN_UB9.?CPW'^oU%?9`+I-8J
+%a!U#4cq\a5W at np:RU@@ET9s/:-ltl(ea^LC1!`)IGFt%:F^)8Rp;@OQW<ZAB+ImhWKD<cD`ck?A"]BBWplNoW)HT7uB:HfSccVc]
+%.n10rB,=Jl\[\^]$_a2N0P[o4CT$X?^KZQ?('6t?Nk>39(nnoWTCEAgfCr%on4UioR,Hn"gJJAF_]lp8LZjj+1OH75bm^I+M>3$*
+%XR[J!PSHR1rj9\L<-#iR+`[_ENV&Vr/[t/lK/RN?apHc3^Rmhl4um;!CkDHh<$!/q"&8n_o1W)3n=2YDWN\$T;!`$;!R0$D\^jX\
+%`<5BT`hMXXd(T)/f&l*+P;>UTpBr*Jo1#Wep+]ht1jX2h1r3=hG'_;S,nn,cdE/hgS;ii[3K^/m[_ at TY$.)!((('T6p6q`o<"`#i
+%]CU%/D98C\+eS"ZP8AW:Nlk"D;iNu4M_p7oRL%fo_KL^\+%;=H?3'J"mF^/ubE:J$J:gSi(<B!0kLNkb!4I!t-<DP_YC4WHDP.ee
+%i*jGm28?+Pf.n(,cd]*9NGB)9nnanC!o%nGQ<BCR>31tf%!FBBa[bcOVS^boj4jB5"e2:4Na%+U[pE*$f'aOd=E<%i3gc,McZ"0P
+%=qH#&.CS4O(`U[&N<LUS%4.UKj?Vpo&o\5=%uqpQ\h(d)(L+rPE&O5]4<YJ=H+l`VZKV6\'`gF<XrZ;dIgkD$[&jVsV\@DO(5&qm
+%Ks,'t4MU,PG9l6O$`lA_.1($pFreX#^2)/.l'/946'G6;Q*sAcR8;jrf4_D<g at W@&qK(-Fl/f7<qI8RB,__FOe1)Z?=<@/iJZrq,
+%@CJ#m<`.g`ra"2Hd;Cl=$Nb^4$0C>u$kPU>&pb]Z#4rjoBdd$8.gn71KO%[&YI9C=8I=9[;V-F at O4l'J(\qje7=-)I7qU]&Nn_A;
+%D'-d^q](,AGr]SA-8,QPUu"[@8?"sWpa*qn1-R)JbP"]kM.*EKpC[L>`ZVslhS_6 at _bH!Z*CfI=nok#d\EgX&KC^GO5`D!,<!rMT
+%RFiIg6CWb+7*an at n!u`4q+_Of1RE(@+)k.-qrkfJ>%[P=VY!MpIQ4mP-;$aWahWO,j$j%K#`e4+p#W`^(`e/o3QEN1DM!5G*RN'#
+%l^OZ>i-ON'\1tM+X91?_ahaX>@1`BhoaU-829UD0E^`ZLmsSpd>Jmt<A[!mq'(ZlL;qk`?;/tLFC#h+K;0,`YRZDn;qZoNrDDmt8
+%aK3?8h"F/$%JuPi*^RAK^mgD8*-q0H#]ZaQ`)ZtcERiX58]8Z%C(&]Ic$AUAHahAl(8U5"G6nfB8Yjn#WuU6mT+feXDGr7!FS^\<
+%h-RG:Kuh7gc=t=ji1%$LN]BkUf-:Nb94]=u./2$C49Nt_k8m$BfBJiqLK@`K"]mRdPlN!c\FQZ(nZp.EW@"'P!BnbK,e_PBh>YoN
+%eee2oD`rU.a,G6\%([*eVl2mZ9((N9V)m`W>=t$dfST"E41V6Vh%@Rs.9L`W<i'L_1Ap?p:G@*!??K'l!']lr%bgu1VbK"mm1[-7
+%L?sc,A&>#H8[7anl8qGIHn`1#$+2qHM)E_7\'#E`Vb.1:K&&%ic(r9G%+)2_+3O&Y8pf&eb$$9QW+#drpghkDFu4a&hlG^aVp$\9
+%:4d=Xi6;Fr["blZ</*Z;S+H)-4G6iZUqEo_<kP*Z/2lS.j9sY6^JL$]5Go[4\cohsU#_a at ouX)SFR_=nEm)m07$'cU1=@G!oukgt
+%H/#IhnY+i"eJT#m(cia>N=2M5Np1%+nhQ]N!oj'Z*_:+hJ__Blko`VDg1'W at a<MY^-*=om#>A@'UEn^Z>X/eUo*k@*(eAB?A+r]<
+%KA]8BEJbtK*EWa,K;=StSY5oO;EG?'ZdU\#P^*sK(Pd4oJpA\cZQ^AkUroJ4rc[6D-"j-,1;9"'D/(%<NWj!<2!0<V8uP=XVVd1F
+%CMN873]#snbHDGlbi=6IT(8T'RCOhFfSJg`NBEDN at IUpW=ApNBV#'aO]Y14ulB:1oM^rcicL^]k:Rh7td^m;S2).4l+rutb*\sGb
+%K0:?&:Al6XMEGksOnn8MgF,3#]#V:96E52m:A.tp_C,<*`9t"?R-H&AffBkOES8(aO_[uDq1k;)e\uEY_2cbFCepcJ2P#&tH#,EE
+%+/gBuK(Mog-8Xm;GkRl[7`9=.jo$Ii>_ihPKY0-/dQlIZ%RTq=J-8Yc*8oL-]bPC"_l\CU1"<I,`&S#"-1P[9fS at VI1h/L>/oiRC
+%drZg%$<IeQ<^,__MTithb/[OWi[m5t:b<*@%r@)6QJiXC at -,HCGb-m@>dNKK$[j at G4.kMZK/@.*U8f;ZZ.c`/V(0/$#YSlIDL.m`
+%9;Dk*(r+&Zd at q+,V#6&l;(aOo*'+)A1-mn9(qE';\aQ4b, at dhiQDErhqNHW>*0LB3Z.R9!]$>0(>Q83ek)9OtD`[i.W_qk at Cb,r8
+%ZA$=[75HnCcAkJ)&!nJpMf.D36\C%F,.Y/lCQCa3WR(J("/%cQ_V#!K>J_.]QDSWg6.IB01b71<-"-,Rcj*M0jHol^54Y-DBJV0.
+%TjnYmAbMBbRCeZ?nsf1,oaJ^U&,OYdVH*DZ$Me4r9X`+EThW/&'Opkk\K`Q736GSjHs'>5-dU$$&DBi.ms9!;g62^^K$ua'<[nA3
+%-E8GD"L#%m9BIrifN at co3@stHSU"@'C-]p.":M\Pl]Y"kV7<m(d!:6gnnf.;li]CbB2JB;dU)]#LE_DTabkD6$I/ScaA.1KB6t(D
+%nR9ufOmH67%jX.,/`6*Z\=QK^LsXA]=2cIc*P6`pGPh'0>OrA_9Ss,0[2P:^`sL6rk[nTE'aA=Wc:M']$,5Xgnt6B!3i6'E(K=?-
+%r1)]['WKR>rhC$GoK?=UZ[B%:4RY1X)/\anQAp&G;[L3L5o$T&4I:F at 9DltoWd,_%&D)?giR)FijmC!',+pD=rjd`FE#p8Z?Flp]
+%['!Ti)d9,BP\Z9tp@<ndpPp3&IXuU>UgrHh*1MaNFbFK+$cW6)eo(dOE_;Rq0Qj'cgkctuq?J76]c@!,AgY/Q719&b!V^Rp4.0,s
+%]QhY$VQNb0\iG+Ds0XS3=]hfS%GLCi&g(30FR)@0J,NXX*I=K_eV]=pTDqBaQGlaujKimiH>O9iXkTC6JnA[[/F2apLS'W]eXd#J
+%,?Zgq\0l/iRld4(H(B_(^?6<nT+aC0ikURB.PTEGc(]>12Y[b/:!Is3L>bhK+%i>1MEFqWfA+i?Z?,=Z_(Ms,gQPu9<%0aT:@O4Z
+%[n[*9on!GIR?t:!3B4OU8I3(*j6E5EGBnXlYt3FN.>Mb53G=)_lDXsESouBNBt)Y"nCs;W104.5nm7>R>^t$L1ID\3_h5g)U-C02
+%A(\-47n:X=.54]s/<B38>HL#`Q1BBq"BPc)`"DdU4[(2+9]&dc*AfA"!:S3f03Qu"U;f3"kp]Zua?7#V<-_BgkGp8+(8$4PeQc1(
+%3noO!.`8"..]arZ5D(`9$E0PR+!*B3qae7sVQfo[Ms:9!?=HM7d!scFr,Ok3f.:[i7F*"0aK\IGCW^OQ9(:D`9D1M>jcW5/\Wjk$
+%\Ee"o!`Na'kpbM33VQ!/np-%^qS?@](]@<uK8b-AHK99N[#g8b[m47P'69B>8]sa>8C"aQCbO\T"&mt(BF\qY"^qSqjeFH->.Sjp
+%4Bo,F+1=`;9KqS at 3jn_XgmDO*H!(G=X6&>MBB,k*+ at o_q9Vg#/L/[:DdL,>&'D!L6`8s1B29guca;`K3o9$egi`$-I0`9'"a:I^/
+%5\X0FRn7QX*P6IshSf7ja).54YZ.Y='Y[%j`s-asZ>#Nu+D'X2-6)8&Vi]$Xg8V3^!2/5]#;RXUjAkS/Irs:]Ts&;SM3sp]G=W`2
+%C;8]^TS<IO,s&JM8ft*NSiQ,([\fl$-@(C`W6?7X(tdSd0$$+aY8a%b1Q^@T[E at 8>C^8QIji7i[k>_ah-$Pm7c<d:CQQMFQ/'IjC
+%Yk]?=VHFS6SZ$uQ"(<uDI\CF[-UjXJIp%G-[,%-SgH//Uq,::B2I at C$I>eqk1VpfP]V%%l'L at kM7`+LrG9"\9[$pFtP]P]7pJACq
+%^&V^>k=F[-G%_[PT]us,+KCMgHdT/11jejS;5.K?j"WU2q3-ZH(NJr;OIa3oZ=^@R4ZJh*^Aj@@XBuuT0\NPf[UkmBPe>A-@(E.W
+%>$!!l)5.8I'85b0@:[7P*3s]Bj)pm,,gC5M.j<),C=pV6es%9IP)-)$rV%R7'8dX]eY^R-k^3R)?B]/fVnR*1eJkiDOD]MicnJ$I
+%3o7gu,1Y!>'$E=M]\Pp"SUcJ&_D=Q3FF!HY`n]7i@;.7\NK*(rjljZ4*1DeD`Zkq!X(&GUnetI&SLlNKV8LL;1-tprQb`l"*]iH_
+%!-d:i<DG^mTDgg!N(:pD4fT:?V7EdoP:>@?O)!#REU[Kr];s17@>^&6<]trS,W<Lg(2RZfDhaZ=UHE&c4L2W&PV[F[o$ZZDb1i;C
+%O\Dth_`tX`!At"/.!'4U,-GGD?/c\--72i=?<i at 9qao#3#[uB.$1K at b$n(MH5$'>=*4*;J09?(S)0+b<%Q#b$]Yk?Vrh3cnNb#Kf
+%kNM at BT$L at +_K*qIb;T9UMkWKeX7s]O=,.>UA6RK)K+_*q0>BV^V*IK4pdQIDJpA!BNdai2C4p+k_?9H"X=J_gRi,?b=g_sQq)Z'(
+%6S[9cY,jhLaGgn(#q/3_QJgY3)hGsJ"ue?=CF\`t?EHAi-?q/29+7a;1HQK5Wb8a0Xm$A`_VO)6R<21RMm'uYFaDXB>(l+'L4OoE
+%!("bIWWM7\D7PVV[PtPP&P,S;4(eqQbKDV4=?,$]5Wn]cD!2k&amlh&*RcaZ at Q[O?H.iJ=MA5hg\`XL4^RH0T*XGcOAZh>i*98_l
+%qUqMHm>bec[4dMi:d2hB"7#^m/@m2OGu)deOh?nIZj4C>HKDJS$6</N3SEE<S>i6kT=fK?PMDJ-<a1)DYmTZN1^crJ&Ds;#H&6I"
+%A?]-ahqP9GVRYi*dW:u[1*!.eQ8l^h.P]Zfo1f')=U]q5h9JL$S4lrBAY7^5Sj1Y5hB#+;KN5_uG4R,Q/3J=V at X@tuo$Mgm-K8B@
+%hR.%t)K9W23J\>k[1i>gI\qa^8=FV)B_P,bWn8"W_5aO+4S>=hs,(3j).5.B+cN$XZ=D*(h?L8#FQ6-V1M;6t+(d3/hqQk+kVb1e
+%.Ac_Qoblf6?MMbRM>>uI;h<J;!rauPP+GS..9Uc#KSRL."T-((N[4F76CVW:jO]C:e/-%X]ab=Njk;Oae-rst2i*.kdYk;sg8Uf!
+%DFDt[YC&TAdh5QY%A'>:,SJO[@:$[t%oNl3Hrag%?8qoKCWVjfFl'4QR,ksDe.j<M\8_;@G_Y1AC-a;jY"ln&dhK_SV59FWK0I92
+%-D-VZnjVH(TEP\?%>Y4).K:"r=+d(YpH_;Ldl#0&kTDkXZd_2cqspg$knA%0QQLF7\(R)#cq=fH[8hhj\fn?mq:^XB?4"cSQf)@k
+%;YP!!]uC^`no%Y&`lls[>Su'<FBuES8KO,MG at Sg\m(>Z`fNNASZN%(S]`Xq3HL`$Lf'q)=0u^DnV`^G6RJa0Z]pDI(e=7fMS?GDc
+%,um.0W]GaC[8h5Z(I0M?i3oIDoiZ?dG9bbBZb/rh]3DNtTDPn9S-KaCN(]'XnEo"Pk,_R3.?71D,<X_=B1:39#_7>ASnZ<4^HUlP
+%"jBl2AC"/N;*qh]KO7Z;C9]MnG!M@)Y`o)dL!*o"T!c!>XP?ThrL&/a.bRm-+Vf.ROG,M(&9#B9na10m/<;g^:1Z[YDu\QB1nm/u
+%>Q*BheSD3R)i>d1'4c0U(.)l8Vg=d!1HG_:drrrgSu at ddO_;go&_j9Lot%VQm at 5)4V+;*r0p<jm`t'igS=r'[42q/H=Y-p$9[a[6
+%1/BO!>#4h,&i5"f==m+^Alb'8*e-h5Z2/r+\fGUKnHoJ=1n&Lh=n[idBqE?1:*j:&::-hlE@*6<fi"/Bk at HiSiPuZU-.p9.[*8nW
+%?3Y[G6I^\WW#3#AgoC*V79;/QinY#/:$o*oi.%J4BdIFUY<uB'Tr^\oHJ*b+h4;j0DZfDOIH3`XA\<,!mpo#L!5#XX@\'ko+!aa]
+%5g?O#L2sWAq3'"3/N76?CiouV:st"=!iAlO&G>pXNimMQL5qf3gU=:a.qhMj)b<XnjKNG/SXX[>I393p(KQSZa>s0EGCuCTU at ACI
+%k!n*&8]FN1\th#-+aZp2QYfJi?HcsJMmhtg-NB%^Jdhpn1k at J`:(hH\a%gkJkZ`fZknnp4'Q$J="`gj[S6E41pW;O52t*88dh],&
+%+`tNjIgH?*@6Fp%luT5dU9GeV*]3e9O]FU*f"*GrL:C<Jfk\P`9BsVJX@^lt7`>"ue^gTAYg$&sm=/raFP=+\H(3A1mt7;,YUO0!
+%k1GT'h9.cg8I6J<Iic@:8\UBhcV'oC'3HtZM<H_)eTj6dGWFG.m-BF*D;isF+B@:=&i>rkdOtjX4Efh#`R'*QkkE1>cdb)NKIC$L
+%:Lj#h*&+!uR=rR[Q\Ei+@\Q-p_ep2t#RWpZqlS7Ng<Pr^.*GoSaTGWPT<bcob at Y"_8>\4UgEAePL(79Ge2c!EP%peu:X:K2\Z"im
+%j#"4+TKPjBB'C,shthLu<5`16?32ZLCG(pQbZ7cE&Kdj6P6 at 81PZ^=nfTIFP""fjN$!86-P8of8K<HrKos$,cMMeZsVJft/UI9W/
+%kL#6F8Gr!CI:Pf>7%KYI2o%oB,LM`SH.?.k/@8098=G^c/Yj`c,pF[=D%,:0`s)k$G@:D>]ojD_'XHVghlGJ(K4Ytt#b at 555D?N+
+%J0_;pU>34eD\'SBGAbu[OshAq?><o<<Dn*[q*@LBf0dS;LQ:3Aa1HCM$4A0f:.d-5kf at 6`#r5G<VO??h:nY+"Fq_A>E:hfhbGeTb
+%n1Y]HqRoJsq'*d1W_P&@&?kh'd[qklq+nKuWFW/DXZoT9?\-ERlSpuYAZgEX^1<#RIfs;=]MG)&[2VbOO#",W)<A6\,A2XM-$@j]
+%f'9/)P0!5hES#iYeD&`BV+Hn_es'""@Sua/9U:!rTkohUG1rmV-_<]V49$Ta+`FP,9fSXuH/==BcV at h2aii-3GitAcc3Nn:8jbD.
+%(/6a6T>G2L2B4RLZhXbrJ(>34\f5o%oEbAsUn*s$R+grN:Hs?>@f,LbhK,!lD7&u=8afB!''P8K4dkG`,)+7.Kq*>W1<M&=;ou7p
+%b[18VF2T3sil(6^_+p/ieOi/#8I;n%3uKpiJHl%>;H*e%)nA![0C,8R0&d)@Q3mES.[8eHe</[bQc)@;OIi_o"l(H)E5/jRo[qb$
+%nE"F[YQJN>2i>*l=_%?>Y;TO#5LnGM)rpfX]$Dhd[lK,PlSH4@\ZE9QeHG:;q^I$?pZ3=iNqoc0NaJ:'o(0p//I!bYMKdK&pQ>-k
+%gZ)>a;4<dR<_]1_2I+TbaBd"_(giBT,7Jr>k8sV#B?08i@*br=n0$9b"jVnogQtm.42p'Nn4[CV,F>\j4J$2tD-^JY>[<uuZ8[sk
+%SZ&t3laqPZ^#edLK?!YF44/j(ZIF6Cs,Ifl.;Mfcjj=BjG94Qi&["?Ds6]VJnm*rP2&[sMZMg'T=dJTOZ2Vf#]Cjm?,ZgH')rQ4u
+%"/l2+R&]fJ#^;?VRk?:O#,m:'V,e+'-oB^(gp;gZ,#]bn3bsQLn+1tAcQNfT;jtG5%AorF,gY/1#S2!_A`dT?M0ctjO,82g.(_lQ
+%_&hRA:!(It;T%#5H%]T2M*k'C['Z3:`,SarPNTk5H0&BlO'B2T<kEIn_1!7U=I2*1Aim&NC>)6K081bE<1!8O'?e9hm6+[ai(It5
+%JQc[DZ=M&8TiU8j#eGmZ!-tU#4`XZ(b at JB&D!hW].1P"Vfhhnu=OZ=m""i4,A-3Yf^f(n:Q``</7>['N+Hd(&!-+B"!e'FA[FOo4
+%IrOP:RlsY!AN9.Yi8?'?XRkfDBt3CA#;)()7=/MiVQm[#4]0"r&nW\`ga.Zu?NkE+?;DH!SQ.aH'4VuoDp"+Ag.rU4SbjRj*8.>+
+%dDti)]/L3mo(F/pRnm$r<ngXiG#\/Xi:>*N:_lVa\jR]S<IVp?U6CX:[BE.qmFgL1b;4!*RNqIQc]ILp/=!#aI%5u`KK at X6p^"Q;
+%!(I.8Aol%;EgXco+_S-)[-CLR[,[N at UB.u+`C^##9.K"T`ApWtJraAf,JRG!0U-<*2a6C]eCesSd[J:tVI4YQ>XO+IHBr:`,:b5o
+%[u(eZD%;->8>\TEU"G&K7KO+NPUr)DP'R04\FH"c-hammD#7&O8q3o<Lmh>k"2QB%+CM!aOXgBN`s:O+r_ at T@E(/IM6a?]^dc&DT
+%-$kf%8->R.W!!++o1jEH=8c#PUJ52-*'4YH^)Vu[3Z_=.o7am(DMgir0ai'5bU,$LnC7^\>>RDQ. at UG!c(^FuMS1T2AN;r+AY+MX
+%-0CL"!$,`m%_lQ)81_+LH[O7pZ9rFVK12pU,, at Ad8TQ<5k\@*@nS1-F62+nrac6nRF!NK?K6ZI1.B/VgQ;0RMnd2[t(rriq=_9N$
+%Q$O^Dh4tID at D3=cG(-O_T4W6V*@X3tP<%N'U-4>1C^UkJ7H_!o*/^=6XUaWn6O#&K//Xp;F&%<2cdHoq/`Hp&@e(KYfXB!q2NJnA
+%Ks!1)S;4$h)gVgd7&5XJGNaE6).^X%F##@QNpR1@=<f_p7IDdZ&m>.^]AsE6P%EU:5^_M*Le'>XC;kLXZW6@$d>$'b:60"PEC`kn
+%0SJ[7MdS(Cb8rFG',\eVC_YX?obPKPl9<r6YO0RM$SmR)FX:RUR$0X. at i<[FT;%&g+dA'cfdG4cZ557U;\;R/F?5\)hm2#InuKr@
+%]h#gX"kJ8cn.tFu<B/Se3;X/"h^qt"#UGi/ps_d+ at m>*F%=HoAr6QJSckQbKTjP*%cbQSkW+9,M1XR at -$<Yf10o'Zug(>*29o1eT
+%,*JLKRp8U`Kp[T>62[cCc9Um*)nYSVX!]HD=FNf$6H`0M,Kj7\E.%Y(kgiLbkW/KCSae%l_VWrM*\FR$U*W[#PFobD`P^_2Y`E$?
+%Hp3+?O$?T`W)bi?8dTa!9AhCQo<A5&=cg5g7>f`-[;D2MF^7TqeRMCP.Dr\,q'`6`NCNm/BrrVfb,R(cO-Q3AYLQ"]h+j=oS[+fa
+%:,(TX^gl22*4U97m8B:UE#).nkR(<:@N7\MVl`>GH>E[R=McWLfU,'UCdZ[['.O`=ZJ26OOu$A-hOFlPP at hkKedH;r?@k,&G.Ra"
+%<jD`8j,;F-C:u%("!1MLB/olOg8M&DO;dEoLM%X,WmN0p!dE)/9IJ-uUtom;%rIHM-]I@<EZT8_fR)NoD[Fr8$QIKf9!Ch8md3T5
+%\s6:':HYp<gb&e,2/X&;R"0GH`ga-K3 at 9TJZ@#DKS:'%<c_cj>E@';)Oi9JM2PWaT:#0Y92(<D,+lnKVm+1Zj6h9jV:`PJ*F$>*b
+%,p?A1#@=M9nk40D-6st<VmLgb6*.(2Q>MH`XKE'"Jo*h$D6MUa/a*W4IM)4WfH_?=B1n?EXD;mGH;8'ZOp/gF3%D@@=P.Ie32c=g
+%'$Hh.O[MB!qN,[7;E0F>bA<@cIG(/NZ-]<,D][7b/Sq'$Co"J9SJC*Aq,GE_MDM9p at GhANp8mU[PRW6!ZV?3LUH5S@;6oWm+[&3s
+%HIdd(Tk5SN4.gr0O:a.r:cFe]4u(ta$RU=dP&r0 at Yf20aV]p#Omo'5hq,\k,*fHfa8ds?Zk;Wi07T#\eb)rNLBC3=Ek/DV^e/T;K
+%2*ICLmY;#g[N at Li]Xr/'nD@@*l]RIK'ZS#lXU$=,&(PD'SO21.;?p$?8i#JNb[Y!&BQULTSeRKg="U.k-t.+")*^6?-\;r399Qk\
+%W3T2bA/9F)k!4E_Kd5DC225*'Vh&2V[n2mn492Np:U1;+VCQ.Y<\S`@Q"bqeduqT#P_P0EN"fef!i7C'AkFS5<&$V'^I5<7XPhAL
+%bq6Zb3ZPq=AZnfn$Inc#"J\l.A>tIN=Fl^+,#/L"7/1Th`f7t-\4u+_aasj>j`eVF at .(uIA%]'F.*>c8&#CJU_qF=)A'8BaP"UF0
+%if3^b1R3aTT^@.NJ3-?CdLI/E*%Yini&4/QZu$?$%]?Wdl$>X*1)LH.Uka/n2L at 7m)8XFQ,MAp8DW/.*B+4-bZ[P;gBHcf,V-tJ:
+%2T2Q&_n&G:$efX\n=!fMD;VOr1k`VKk.$(S2fa$n;lZ08.k>!kX=s%3#Mh/+JR)=>g8+:O$Ro=#/aJ!5EUJMI^"ophBN$(oKrad?
+%G\7Pj1!TEiQo"d$;'3^ga$VLYP-03?681Aj:rpJ<oTT>>9DspnT/.q8`O7Hn<(TQa9:_."=k4m7-VEU%b-?2o"IP=bT8_AK2ZcM_
+%GA*c)&pl"B4b:DY;JECP:d8'5h(<+m\VN at T%aU`H:U9\FB9@?'#71\kb at r6J&V2Wr=Dl9*hsB%>PB>+X)EE&3LXPl'9[u"5\NhT%
+%[h@/JFt;UKKOde;buE2/:]Sa<.eY&`NigFu:HJUk5]JlB?Y!]moghYeCEU-lgRXp]`*EuH9n0BtQCBWlE\--1\pB]7nfgkkG3eJ&
+%&$3s=!EHje(iKl,7(OHaJi&\1S>D,8BT5-,*s^$2)$kUFq'Nhk.cF]O)6>.qeQ"/q%f+hF,`,m;<A:Vn/c/D.HVRHdktk.pf[u?t
+%8DWf+]0-ZRp4Nd::'Y]e$A,/;aR$@H*-aKFa6 at AjIWjO-+D6rZliG&A#c)Lta:31:?RJ$%i2)$\*/"mo0.YuH*`ht$7dj8d8$_bD
+%c$Pd'UlNR`+NM-2V`6^J'li,smtc:7Kk;;7f)"a]1"bl?`UbD_RAAn)<IpDNEO\aYP]+S!8P47p-U,aBZh7'a<VNJkhWB(@Ub%Dg
+%&)u>Ffja(4-bJ1tcR&[7UQ7V9JDID:OJqC*;"r6iOfi`\/<ZL;2^bHXKHAcVl'h<KE at O/Tok]=PP<B-uEY!PEQ>hf$ZZiQknW;Ae
+%ahr,oC9/Xh.QY1drWOpdXdD`58M)V=2JonrLXT`XQ*.o3>+J6mo!<S46_[SO&,0j%P)N[PlL$>tX*BLpmWA']H#g!@$P,qIlEO$B
+%,tB%D:s3#0n,k(Fh%Wn)AJ8!9/6YA5I<)d;j2G at PKnjDG33OarG`Ygr3#"oHmth*r6ji,4;OBeDPn2.uCECp4-R[$,*?2o6JQ"")
+%;,=\2PFtp-rg\6<*ne]]h8$YX":8BV@<.rinhs:8k)cM^j`8gQ[DEI-%PKUa)a%<53NcO"Ol!]86T&+X*^Q2WZH*,"JO?mO?'8'h
+%q(<VC!KM-@/W?YLbVlkQIccqW9"'pn;'n;)31X"WNe,=Gph7IcQX`(7:.+guQ&!Ye3,]scKmHa?:5HTll:cap4FPN`G.p[KAgQ/N
+%IT(7J15 at +XGZqai(0bdW7u\dZ8>>:2*oudQ0;PSP"k(s76GpNhRMX`k."UFcB4/TM&C\''$0sO2nK%@:XWqi$)-V*F-<Ub+>>jZ6
+%ej^dFBi>D at 2Xe!)E]5IcSD#h*;Ft9;@SQHp6Lfua3JS0fs4H"k*.f$44<W]nD"-5]lSq5Bg_<V,iff&8/"S#=2&]2Re?K_G!QJsH
+%!qm^onlnj^'Yp2aYtC;p64,/n2#NMgG;]LL@[TUc<)77 at V'S_Q"4/3s&/sZrS5o4!g*>")>^>YFoUWpJ&Ju,lVl';G]=&tp"4o1=
+%P+S41];<]+:07rnZW!#Xg#KDZ*T.muYHPnj;806H>Dc\8'e'br41knA^<'Aa\d%Yo<EPQf80I8uVZP%I1)-RMgS<_"kt?QAb3rd,
+%^"l6jWNtRL at i9!$f+O"a6*:_&OdUIS0$/%5Ke'.!3.+qp)\Y&!&A-)`5dk9cWi`R7)*,PRdo#"Cp,kBKZ"hOZV.;$S)bu.a-$,A]
+%31*fb[$-a\0;Zgd at lrj)BH/.,=lMS,>ffR.F%`td9.u<eP]4*Na;1-?X>g at 8Z\($7N#WnoZP7^F+JQOYZ\sj.Hj[3m4;EdLqC!"c
+%!;AZg\#)EnNDjRGak=oZn&H&AE9lr-X!BZ[Hp)Pt/l"E?np7o5"09d66X?8G.PYn-r([j'8"CR&B5?<L+IAW)e?FOjGhOFh+GQG7
+%`1mgg,><78TN2U>oqD(rNpkd:%rkT+2ZkRR\P]S$Q%(Zoi'G&@7c(/C at jEej4AUe@QQ^"-r^\bOffh^GZ*5?Q/\&c_/l:c!*-6-G
+%8YLZ%@u'AQ,7]dMcVrkT/]IRr/J_e&mRsCHD,kn*QWHO609q_WTopEE:3*Y:foBU4o#Ea_\Z*5GK?A[%AgjH4*7&6gDR*aS<sshB
+%BQ0?XgLkVlpEVtDAhRqB#h2V+o4"VX=h^r'Z?[mC^H>.$&T"5(4$@pgl2dHR2S8fJ%P&!6#mQbPPUqA30`@+2j8tG2N_=7F5hTe:
+%KEH8s7obU]].W+-BcgNf=0;'=.r>&LkH_+/e"kq\5=uE08_L.JlVTR0ltn@<X[h)q=Vk]VqRG6!oIGi&ip;ug4N'8jp at F9j+[/QN
+%*01.#9F;oZ"otl0Z;eG%?Le>V:/D-ihKZ?R?ooIV]PV\kGk)9c<u+Y"I3QQt_W_1'q4%:S`F:65e+#O%Q-?'nZGLcE]u/<aIQBMR
+%7X34=1o+&VE-502!Z'aO$&>>O`<e?@]qi-S7Y\`CJL:e*!ig&!bgZWSDLG2GQ#'q%BhGRLKP95Qb$/-camE,Ck#Cal$)',KcC-/]
+%@'fMEP(V4AdRk/rc\6%&"0r6>VM1AhR%c9i7[HFg(s6R:2f5TI%jj*BGiJ`5R*=a[='nu at T%W(nQ&o*J\!?!q,6Qp5%apb4)drpi
+%AQ>:_Q*BsQ6DIF`E*0cO+"&J,rM,M_b:Y6s at 0+,6Lj:G5jX_Qh*B>Gi=f%(kh`u*-WN6ie,`,p;V/eP#Dh;c%S_X2p4'=0"D?l\;
+%f)c9u%F3ci-)]\QZYgiRnbFpdi_>#9?i6a at SV'T^72='N-?M.^=*a8Z)'k=7Ln\.dfG:Hfe\';e9%.QU*NNH3_]L5- at 4BKk`To7'
+%?_Zm_i"a&@9`n<6EcHniPgUf=XXJK_$:_>?[n3Z]8'U=.gbRGg$qb7YH5Goa9+C6W9i=ls:>9b;,WuOjdP3flN.6kh.<]9,[j;"n
+%JssZTAtid/n6ft8SLMYuA$*WNGeDJdpaQ)":TB3"FOA,.6fu7R7[u4e[rW`D\JNn/<Rq^F[S)KscCVXgaJan*A#fXk,\n>N4%W2K
+%N4+!n1pZ*;_bgp`a11SD@]N-7H(.u=gOX2q"DUOb1lqNpaappIC"7J at o72g+!+PPQ^GY1pVp9N0T9nK5cBCsocW1:R84cj/r%:K+
+%q]`Kaco,/]a=kf/i_HNW/A)`D^eU69N3J\?AKc4Kq]m#A1sdRFp&imGDj,St4pVWVol/HG<59+?D.t"\D,V'MP0kBH,Qh+h89-Fb
+%lt*V]KApbBml)q6ESdDCJdY9,Vp(6Un5qDRG&q?TO at pY-VilQ]$C<,pP3E1md4Y_\XT<Bto*g+12F*&1T\Mfo&PcDT.T:M]PKJiG
+%Ue2:+E,ToAmrfL.`PW<m=I$=<1 at lu, at AR3i:+$@tC+<s4T-2=Z*g5YR`KM<&pJb%iUFo-$UUc:6'=N6i:bL=H0KMB$)teH!+1KM$
+%376L]QJo=S9'fuXpZak/R_m]K!NO\<kRnkd>`Pf8&s[5)/C6$CXdEn-:+",/.7XW!:n=K, at B*6p*-EtPF"f&*`mhD5?D?F8<u7]9
+%Yt:PPB=G%mD^QmdH9/Qn<?3%F*`/RZKCk5[`fs6),cWI>cGG<n'Fd\F9=<4hE.[Dre0G8jKrH1OJ1,qS/"pK_4ZK.<\hhZ\#Rlnk
+%G.:kqW1CR\SiI7U2Q"?.]U&K:_,Xr_<h#dS`Aps(S5cr$mU"T5EjK at L4gQ,8QP`4>XX^[3AqoHd<jqsoS#BnUYBl53kZ5]Zd_7e:
+%$_X"$,Ee."T9E/4;Y:[K8ZnkH at Pd$@SJb8J"W/ISo4GV"S&E&/!ru:7(Et;6XL$g*Ojs1XR1*CbCESL\&lmo`WW+JH:$esUXRms1
+%,'1ftWI#EA'`gp>fcUTcZgb>H-5t-"'i=7;eIIEEH1p(Be>5-!O?jkY[]"kuY'-HR%md at r!1($01E/EUXH4oQ8m"$C\t\@U(ql,W
+%:2b%`Hf=77W(CkXI.QI)kTSCWLj*9eV#g_,S]<:6<:umE-9p6Z1:%l-V)DQLJ_&D9*EKL;OX6)5Tu[29.GI(mWC5Q^nIkJs4EE3*
+%YS4V""fidrj++>7DmA!>dr,(@re"KC]Gg'HOqC?([@.jBclKK\;q8DVEm=;L=W#BRC_6l:""B8@\SsC\0rW>G:W^WfkHD!V7sPeg
+%=tR"ejlHn:`elR*1q at STk?)B->.-(UCd>2594:JiVm`W'W7B#Zi'L<e86;i#33E7r-AitHXZ>eb0s/kbMbWakNET:<$1pD/Mh[ZG
+%M\J=TU,3A3K4]oiAQQF"S=Ah*o-L6QGpl:Y7'JH`,f1\?<B1qX"7.C0W\QW0];b at 9'NR:jD.M(mZJ,k*62^4L>S@%9(V*+u>*V6$
+%;Wi1F"j\WMY11-YcKs_`B_D#IBXK;=!i-KET!MO]<^Y-o3IlVdYOOF$)9t.,n]h&s:$U>R.-_W=LVT0L?9LXY+1%+L.unpJ/.Nq1
+%%s!nZL!B<[]KfA,f<,YiT at 7g_n[!KtC(B6kDPE?qR)LDBTe`uY_Y+U#Wss<.eOd2=k&d.?m<02t%Q5q"`\A[<D0Ts,>)isFXNmqO
+%&0j3JKfRs]OPakA57Stf*3q`WhSGO:Fp7(JO2L[(TAkCB>fb^QcU:*r9r2jKW>7QEioI9C:HQ1iGi7ZW</i%RQ8qsc4b at 258nP=u
+%*D)HNe\4Mg^l`6X\-Io-Z$PnI`AV;7E;%!5O-!)C=,5UA\M<82!E)RkMJYHI<>CGOST:6'47f-3Yh;K&?00A&/XX<p!]"t;3HUm6
+%[.]-pd%q at GQQqO'8+iCOpl!PR6ZumTCqdT08p/4='GY$>9`crX$6&[h],uXP.L!lmm#0TB#>a(t-/FM-W=crI6nK;ZMq`?e.EF:N
+%l5ooF*UJTsih&-C.:0t#8se,?k'q2G2.rr,#,8k\E:UqgOh4oUqlh03,f;?YN63]F/"][tB(7d)&MN=i'r)2b,+aH05$:nh]O7j:
+%;<QC/GI^%TS6TGeC,5BciY:W='fcPTqR)JufTrt1*/Nfh<0MmP=^R<qr_L'Bc[*)/(7+>jAjKRG(`Y=LUV%03M4UA(Kk#s+a-7e9
+%&Hm^]W7U>`^F.GhrEXP=Hi#/;[$)p?$-*?sd!:c_mj)gcNY at TqT6[ll*8>=Q7Q?U9?bs;&T&`_^CoG?:(>154'P8ke<0R##A\?Nh
+%O:5_e.L\H-_o(oD3M&,??qH,a/?17a4Ba?u/:J#n;MrF--cc"50OI^Xf%oab/qSe_T1E'.KCq\H$VVauP^1UCJ<T/s%O#V.fn#bL
+%30p/Tk7.=Rko(/i<.!;1K>"9OKLX)JJH]G&=d4G6Zd7r,.Ud,8'a[BiKe#8Xi*;V0TrZJ.8s:/e+CGAiY#3q!A04lo%oXG#b\Kb$
+%SE6A-eRc,nV$`a/<=@Q3#=qIp&hQJ6[li!iCetlhU,Y7C/pS=3DtU0-oZ7Fh1qWp15oiQhSh>rhg!5%lX(=RWN(^!mR%:L]8)Iq^
+%i8Z4"b35mOj at .QBF1&^X+t$kT*H^bZ7E2p75%a8h`l2W]SGSL_h26d^nUdlG;DKi2!H"$#9i`c<%0&.ee=6#)<f?%"/ImaW$eWIA
+%h`\`1WY]p0C;nA(K>3Vd:HHlZ&bNo2(nVKHH^C-4O?@ZQEHTf/)h,EB<1kqbiX&N&-^#ncZ)j6?HKTi+9.Z-[OqcZI@%Z8a=[ilP
+%K>_^7kr1]#nkF"E8%fVTOu'7^-`>HE<t<]>2of=m('MOR]1j?U.qVS!:f6NKD#)uiSH(rYW,Xa=p#[JBJ'@N;Sn?OD#(W at de@[e7
+%Ym,mH(8@)O(aM$q^a3asbt>e589'i/IT*Z*i[&9)S^JM9FI6*h7,Db<QXL,sk>Zj0nb=6d\geh[G<4jh/0CDK,?TsYpF at q3=`;`<
+%.+KKm160gEI>cZ%Z[!4&ZK4YuM='fR(fLhaAZTG)r89+IJ"J2^GcGSVgSt+NF2#0?5pikY)0`"h[dT>CCco6VB4s4]!HY:;'PC!7
+%b3.bXj^alXqR##,]NL8WrrWMS06Zrej?d*BGbmo*auSY0&P\2i#<h6r)VK29,1n+6X)t#@QE,DBC%J-Wb\4bR!!4Z;9:ebQA2=i7
+%D(TZh0f+?lD9*?GOO3D%'Hu##$3R3NDB@(Ll)-fU,j&2R"r_;cEdfG at Fib0a)Ge`*ElADLdI=aSk^?aHHeI4#<`9doWcL3>UMtmm
+%HD9e#2`[-t$;U-\kcq0KOM.:E_8@<Z:XuHM(UenRMOhJc5-G0FfM[0.O!(L!:*:R"ha!O;mPpk7B:l(+MM86$W#m';()KfYHbV%1
+%&$E]8_'T>e_Lg#71%JtHBnE[TncLb]M\:JdPWnc"4 at iCO*>bEFclRhfd$q][X&"_*\_q[p[=b_TXbj5C*:ieh3!XCtpOS_b]2J\4
+%\`hD1#flX8-$koOYW(4<=;8!",+HS-!T1DO=<phQis,]1dlM]^Si7&rYJYAao*C,qX!o$;_eNg:E]%cAF&@+u6QIA_,k__[BN%C1
+%]FDKG/E:^4H'0XFSk(*3\$gP&^4G:]<6V=hJd]ROUef\Ioo2`PYe-8grPmK+;i8#AQ<d%I#^8/49 at PWINMn*kUmJ,u,(NNa`!=)p
+%.Q097--!M9h=/L/=3T91S4-UdS=XBF;SCnNYLt:/I'P,i:$IN#9(91%DGDW#dQ-iDgK/t$Wj8sM37N at 3\QQr-#W/q_!com*7U6)A
+%O:W[XUEiji;_7j./<RjD5BGbSVBuhgkfY\"9>C]*D&H$CFr`^o%,hf4#3RCpFM at W_*-_&4e:ZiZ]W?$VNpbQV/orW$S%[BiqN`0j
+%iMo7N$e</^8\CR9g2EJAW9Q1%WdC8ih5?H44Y&B89a#Bt*Sn7dbf6>N-T]>t6Bk[\5Y!.:"-<Ko]%FD^k%:T]/)"Si$d[3`FB$oN
+%,%!IoK.%NBCfX]f*Y^W88XqH,51u75;pj^7_2fiQ=3>$AXZ9Y])-$?1=q7Vm#=#Lo!t=(!?Cij-_`h(oUj9d,W+dYj9MN6J2V(R$
+%D/&\Hp#qUr'?K)[?'hlpT8Q(/j)L[;.7^;oS3)[f#eNF>@c"F;!^ogNMF3iXR;&nP.RZ:=$_A2XFsqN*,j[-hWpMh[R3jL"(Z5Q9
+%O$c@#D;Q7IKCP>h709#-/H:Y.HhIDg_#GcGi;BJ(G9>]@Z+g+QX4o:VnK6Ums7#a,#QOS.rTi'Rr6&I)s7u=0qtjb"mFuP3Idt2O
+%dr0^22qQg8rS9,n?\Q8/cbKIV^O&+mrTee9r%+qQIdr?2He7S=f5KREIJqOgORN&Es/^/,9=uqBY>bGd/_q.!ie at F'lgN]^YBeB!
+%#cIDCKG9GJ1#B+ckD+EU6=,*%fDXa!nb0\5O.Te:IJ`rS5P96hq4dan5(366h>-@%m@/%nHj<0VqW^;ZrUB[MpV6X<\)72\h<V7o
+%s5EsDk?n&PnUL;jlhpK8s*[#tk5Li7^]2[\q#:8RDpGi\^4#m=HanNI^]2P;hq\6qTCDjZTDJHamSEcQa5?S$hgP+ at J#n.\qjp!o
+%Q+?qkf0=OdrT!3^rqt[Fb5]m3(X9GhpfFZVs240kqt3ag5FfL'O8@,urqQ:RI]2/:56'cifAH4IGl6bi^Ua3QDdL3Cs7H$`CELe!
+%QRqfjIeV1'Isq=T9n33BSt:E(\)6g:fAH>sYJ5PXr5SL*hqii%mbrBah_+NXiP*N#oC(T8jB]O'hqik[gY[TKGjTFmiJW3+ho#Bh
+%&a%tX^?ojQJ,TA=s86`sCS#JCX8hbeqXFB[&*G6'?:p/d0'$)@f])hbJ)CW>YMX_Us36>qk,RmQ:Ht5]rhoVhbm2#NH("T3q=j"@
+%pW$#+90YYRI<Y]Ckk.]Lr8"\f^&-iV^CS)B/<W*lQ.(`OGrZqTna]*Lq[UC3e8XTc`3Ikm3nb at Aht._+2=;Q7g&6uhI<4l7o8nCj
+%r#<`Vq'Si2oFq9#iSIo4`_X)8lh]SrlgOdY2 at 0'AjZWS,GP>_PGl=i'omco:3tSBUa3Xags30AGWfJ5^=F&]nT$*[XHsrX.U at c(D
+%ht"7+qtBoJ^Ka\9<ES_)N2c`t8%TbqYEn3t/DTlDs5D/ap:.s3-QDp2a74H at _M>62 at pKatij+(/kbm<foWK?#&d7[s7e3agh;u$(
+%LHFf0!kIdPScAZILW<nSp\I\Pl-J5IafabZhuCF)"/#J^s7Z?hY.sgXs7Yihp[c"@n+rLaO5JeYhV\(j5Q>^&n.,Klq$/Q:i<S6<
+%nV@!cG`0W"n#o6Rqt.L=?[_UfqM3p4"`P8:rV4,(a.N;-li("Z%pJ*sDnk[aUpogThtk+E5JH^bk4\h+$O]1F3>UJdmZ1GaiGMu9
+%GZjIlI!EB&:Y3T>]V?PiIsq"=lhU=52tAu4ir-frhYG^RCsZmW?Wt(.o).6lAM(Qrn9En^N:hu'^q8T,Qi$[Kg:arhpM$+(5?;[)
+%lgn]XpRb^3q5<]MrS>)pO2_(_?%)<e5C_S:5KkeKhtM3+rRLg4^Y=8;=MK?sUsC3=>C-(jO'hhfG5lhX4SF?l]&)+ at rHhV9)gf<i
+%=8.JqplDVqKK`c5V\_K[j_;.%nE0+fHh6dXo2BtHQMC+B:OdLI*fK^aLQA(2s67#ch7NOHq.Yms4h^Z$:5R5i2`Uj0ROauep[*/H
+%k2e2+LEE*'S0'jGlLE7=rXU*Cmc4,Rs5XDIJENKp3?iOnYND+`Xk/'Co)=\$m>I8.Ea_2GjEXhPDgL9VTAK%eHteV5DKc$Eai2OI
+%rq<UYO/qo6Y?idS_`E9=Lsu!g0)!9Q=+Bu4/_B%KGd+BCm/2-M5/6:@=7]YY>-7P>H_u at Cjf?,j0t6]#:KchXp_7%_N'HnggWPY'
+%IPX%h)u/Fa5$R.3M_SK7oNLBiHTcHIq6r!dHJT5Eo$b56]7)[tUMKbsB=u+1TATR:GPfc7ekpk+LU"Tq`i\?dTmZB8*qm'+gQ5e:
+%Gj"o"c^+8%e#,b4F=3\up%]+Lo#FP/o@[Q"27M>H]7"q7DsR4SIXU_om-E]4qu,XJAt-Fp]AWKn$ho!oqTZd%5PP'$hU/7as61nl
+%GX&=jq%;F)S)aL3>N7[4-^XMP^OOkms5*)5j)DU at TAc[Hq!"Ne\4.S!rDO,mg]*J.n=*2]pI3m5Ztpk8DnbuQ<sgYY]]VLtn`Si9
+%^V&gqd\gGu?HDd'f,2Z2O$E(^TC:b9LLGV$2E/nS-bK:*3\=,d1gf_c/,I+Nr^Y1Bmca04EV[SMo=O&E[i@&>M[Q(Wqrn-1g=5ok
+%=9$kCrj7oNBDR>BqW^!b359`;^\pA\?h<lMroK'=rR*MEIdJ(kTR["<_rin)\11kWPK!CoNVN-f5Inku>Do+3LiFq-mb9CbT?\,L
+%TD>os?i8jX098nRXOh[1k%2&M2SYUHlg]^J5'Sdq]t>DY_:(>]+2R6apNnKQQ$NoEe"2N]0,O(+._cBp5=,GCI8=k%4n\5=opa8C
+%n`_3DfrWJ#3mgaE0L,!aPIZ'ET_RWOq4I/uT0pKe"aiX&T-;2js8;BOA[Hp)hNujal:8\gePdgTZh`l>7N;)_U5m!<rGDg\n]uDt
+%5!8*HgnMOP3=J]>`QGroE'/L`TBH1On<%tg#l%1[H2R&"bOC#gT2N\,l^KR-r)6\8`@(;?6I3,h>*CVrnXHk6e"<qN)2e3pq&;)E
+%VmehHmmKU:(\Ht at js&'WPP"kSmU,%H"HA2o_RjJ4GpfA8rMShNL<!*anG)7KQV$2o]m]K"r:H%7DY^Y4Sfa,f@/Tq5:9T-=bNHA4
+%j at .CeoWu;]]$FG6+rV+Z5$mrq0:mTshscSJ^:8a/pu<I:poeVn^&IlWdsT<6T#1$pqBnEAToOKc?S8K at b7s=]@=BuuY<F=U:S7=u
+%'`%=_q"OFOQc?)Z]Uq'Wq,]p12Dono\:8o%aqq7%^HT<HID5KO52lb*e\Acnl:6'^'g5C;`togT1%u46n$fuZpmaJEkfZ@'+!3.a
+%\qco'd1b10;>0nW#?ThRC%(YV]Zc=!?2s)XfEM<.Pk^C?qnZ&g_\_P9rPS[5FQM?@s,0tQC]c=kqq27(`jS&qK.$$`_M*F;h8AW0
+%l*0<6R(hf6(&jV.lPVmQU&<Z&!WDN[L>U3Js*sjoJ+H,/p1HT)"MQDi]__EP]:U&(.0;`3Wd$A6j.G2cs73r('an:(:#pEql-6,m
+%r``J%puB,=<t?i;.hW?mo(9V,mZj\gJ&L!Sr.WbtMnd\q50(f!@VWXW(a-Q&qNl-sa=lh6n(qO]3/qjkSJLi1p(D]oS)`Tp:D`i5
+%X3&P7`g at gEY5A+`1PC4^LmfWVp?j;0nPjE$;$-?C4[4DlqSW8%531r<5%jB2^="rfqVdKnYqKl/pIFc5B`VR1iV5Z;s8!@]r_+G]
+%>.pPfA?UG/*1:'G`!/FBWaEWNcR%OGi9kZ.p5329JtI<:T-Nbl+WnID`rF?M5J?dJqofj0Sg!Gns7(/76#1ldJt?aPiDF$/q#R*P
+%rDD8+-P&<6)0kf_:0n$#qg:hKp/+?hPL&PG9<,\-EcH!].TbHX4W]Vn0+KG.]S7QPIVEsJ8MB"`F'DSseQjYc3I%s\U?WU'M2l.a
+%9A`NL(#,L_7[^hBV[cHlaOY-%J&ir$YZ8DliuLGNAt(\Wk#2uN:t3jCN9o5rm1a"&;-bL1mV';HT_9uYbM(.rjO$YV]'NFGMR:RQ
+%-L\!-Q>'Q6q71d`4.7Op@<])&b`9GTmD0:W:sY:Uh&df<Fh>YfQ<WWGVS4iG6rWBZe0HJ3ChIT?P-h8IRCG&^fMc$r/*D*<6f(4B
+%pR:HfMo13Lm&Pp$Q)dg*F-#WF`C'%]Xtk)I20CpK?n:?QN)OI+R8<Oa8K6r.\?iq1Sbpr8h`NTZ4PqCI?:qe.HrL2iZA0K2nW\Xg
+%OhB%F)e"Y_ZJT;dUKCFN:S(e0]skNFQL3="r(ds$/ucB:FP688R at JOh9$!Pr?59=i5t2(_gD&1O:>0$\#>j6F0\"BHJ3bLAOcmtU
+%\]AtT%f:.D at Lg]LASG](@@,a!ij$R\];gZ4-,?`.FR?Nt8)#SC<uKh;+Pu:SVpp.l`nLU)dh6">)bR).C9K*%XE6qH`>H$9q3ij7
+%@5nX07t+.`d^g+Y.6#B*7QcDPfOM,nD-O/l8t)qMdhl!a7YV.nM^/QV2H9,AfJbf8`[MEphfGeHc#0#UNa64Ndp#_Qh*3hO;A+dY
+%lHU[Df8sd<&!hY1A6"rKr+i4%IqGknpK((*%ggP6-d#ueVq`1nrD8HNSI.%A#iocmP$a]L4WQo'fe at n4V%oOPP@;P9?5EFsVp]8M
+%Be4.LgUXgO2)j3cO$82JE>MWcA<<(,<T^le_cUcG:m#<@V\?D(JdbDD[%U^.T3c[m*jC<FajE^=l;mBZG*[ip[F-$K`oNY/*1ae1
+%ppcOuH!MbpdBVamg:47hMc)d2EO1^.\_6*NYB6g<^WsEG at p@K`B9P?VO[<QY?8qOfS;F?t:+OVareh]fR)Mlra\LD,RVce;1N11&
+%Cs79$3JRiPflldT7Ye=j]hcZ!S]/H?XZ\!OUg/t=U8R^hKQS]S29/"[;cR?i?BVm)V(Zl"QZK.hb',GM;?b,npuEH?3G]%eX[b,7
+%\3%?@TDPU0!7rPJH&oCs8kH>0['hG6AOD at iO;7XlYOEs,\c=[lZo>Cmn-qfX*f8ZNi$+371$_qLe(*Q[;pH64\84m&=f3``FXd;i
+%AR)AnM_@[snp%Er@!gDQqibE+<<Le9/R-rrIU$`M`E[#ARi7W\4jIu4H&9ljA*c*3WCCmlS(#D>%MKB6.*N`\_!7)KG-4sPgTaD9
+%\4GPV$>l*1F at fCNe8_bL*c%`:X83]Dl>YO5oO\pTnZ/6aOm_!GHIIFa6;6,#4;qIum"eA?[rFpDnN at cjc:+%9<Pn5sa/(DVNMY>T
+%%\Y!-[9&,'92VH[ib(8#S\M,BBshPH3$fHH]6*9f%n4>aQEg[j3mTg-S[U4#<L,<u at sbK"FgY#heWIeiaY,2<V1hRuJo8K]2ALMu
+%jA>l!@=bmbG<8&[ep#tOGq]Ifn+);.U10^hn`M$d\"aOFCeC=.qs74pYR-:sFfL^5jcF#75UL\P<o[:;]V6U6A9H$W87%#YPTuAd
+%U6;`[D<t?t"b*eCbMI6Q?@B(fK;B6%qfXu:GUa1VLFut#]d^&VEnco_GHB^<?3X2s-^fQ2ajGt<^g]?>[lDUN<\MLjrpPUAa\'la
+%P:!1J\#p.Zi\ZMAphaC(+bO?*PKd.J7A7kF$Z2<;VQ?mu7V at r#^mUhN0YC[d9W4\r*cd1AV[Nt1H)s`*AJNOHeBpmCWR_8=.E,-n
+%p<^2[5?#B<EDC(Bou$TI%*(B?8MJQ`;Ud@`nGAHS$B/Eg?2IT"F.cAn;X'$QOL19dgh"\LP%okqA:J&i-.U,u;,JB2Xc=>tiaT7)
+%eaVF.[@_7q(+$@'M]5tIX)<FL.bbB$R$c42b20%(>?!7t+-N)O5L6YIalLfIAPaH7N&O9rKoLM\Wf?4Ra'icm/%=nVC/cJU*:gkf
+%H)N^/n7NA(AT`m^A&PO!(:G<FUgVBuh(n.nUQdFp0(/h<,I#t!lrV;:30"K]_Q`=)e=8m8nf"-CF4kFOGVqM%3_sT`K;#$Pl4TR#
+%<H at 9%DjTjpF\"tWQU>4:E%YJV1pdCpXV9q&rrXHBKo[p4baGQL'`j:#CL!%-9*m)09OaW'-bD4 at Q^u(lSF5FsZNDT`Sj23"S6Ja/
+%>H0-8Zd#jOd;3M42?bi:_5]B7egQ4j^n<YrJ,#e;\.os(lV<PE)fURDYSUAALcp]$SR/`W:-M7:6J04(j,gL1E"(*p;eifWFqg<7
+%E=k42(SRdu]Mn%G&YXc:@FYYCnj#ajHi]@=21f__'-]*TG'10\FU.eS,8S)t2nlnO]WL,>=cKIlcg0(VB8m[\7+ruQ(Z7$k:1':\
+%AjPP*GPVgt:8h76<i]Mj-aX%@fqU0PK01nt!AMXD__0q5"MPIc8S.[mO:t9]oSYLo&ca!l4$3K/PB>Lm.'*nj&k\Zl/CV<D%#aG<
+%-jds7pmne(6rA(-j]-LJSE<clF#DML`NN=-5@=jZgm09CD+H--Z&.!]_I^#EjTO at oF*f[m"NOeb_H,)/>g=ZC4RmPod$]?@[C<mh
+%\=fo+*a1HlG)`4U9tKt-J?)T\=h[P;Cr,_di22#DpekrMdP`C6'kc_rD-r]]CH,i=[]`h&7IgV$8suE.^a1[g0kaEj"i"^p,Df"o
+%^E.F".3DAs#uCk@;;c_h"+Q*[*GXa%:ZU/lkdb#"I3[hpp_pG)CnjC2P9'96@?-D6<@:Yo'0_au.UEG&=_/Hh<@IqlK.uu(H/^UT
+%1P[a0TWV5%H\H6n at nK,oB0?t(OgAVZd0-bk4t^J4L_a)#[XCi`L:BlJPj1RbPVrX:d\;t]4;D60)_m at 62J(Q5<^?f*`Y=\+QEZU@
+%OQWj#oV1*>%)n<f602s&i$l-a\Tkq7^DQ2C>9<N=805V3dW5I`LkR+fg^!%ek^l_LO!j+LG%D;^hpeJN;C%#(*mM=<\g#R^rT".u
+%;!kclfB#]L,=&1g/R0H-/ukA&#d=E,IDihei,6[-cSS(\ZQ`ah4j<B16\-7*TMI?('A;KYFr[igY?)P5\#)EM_E/7(T2Qa]X6da4
+%OK(p at Md=.UnumK^6&[K4VqBDBeYc>?o2^n:,`tjR?0i(W8O^Pup;'\K"Fp at A+YA?SJT>.NK(jHB^)rjI"#lUdm.&*@?4O3!HA`0?
+%MUd;'ZeF(o at 7XF!)ub]'NF[%\PrVX_,IE`i^2q=0(@l!&'Nd=f;U.V)WB[1P*-!1rMsQQVZl^CUmr8[mX80;2V^cn[bWW'-3XOKm
+%_cZRX*Ir0SnQNFQR8t!B]i[I4h)`fX_T6DWPT8+Xj#O8%a"&Go$&Y/a//KN3+C'IYBtbKWITF*(eQXA9+fQB;W$V[jG";9;p=kiI
+%'9(LU<q/r&Gt?Bc$tsh*mqf,KNi5^BJW)WT::a!60IUG%j/,N`<X/ho$mG?mKi/#<B-m]o)dbAjWQmRP6U'g7'L$JpYUVnneJr]E
+%.5&bD&:Fhf%]rf&5M;LVL!D6gHZh?0EfnrDYae\Mq)1-IE9ntS+96_Yr?mBf6\FPkg5]=$0!>NUE-)APe`)dVe%)J;$k`^kNPH"B
+%.Y.^Gr0YY\D?1s..d<H`YnWcP#1DsP6iSHR0IGX<=>.grg4kgI];!#toN&b#;,^B9HL_P;)&dKq%@7Q<?QFo[Ee7IH0LuKQc'XCh
+%FUCdB[sac%TJuPs`(X_>@U`@4L_-TqXX^5A.5NNC3:nT5c>DO/*LCFY#o6`/Jj(kMOoUZ0$I1`(gm,XEe3tN*=Zn(2iT'HVd^!%J
+%E\d%!N`'qWQ[G&8E.J-1i0CD>_MZGGC6BfG6n:LVVQK6OihTtD,X9Iq(mL`0@=';2^agP1Um7ai8uCH']]>s2YO[i<Bs&[^@lkBn
+%5+P;-43L1E-1p2iH)`"V9%o?H/KM1'fQ3 at Z*IB:q.9\G.AYh%[`#CW_:$^ZA,Mm6`a(,W:]X_cV.\@<[bG)/rEO)0qfP at hrJV*R;
+%6<6QrQ),"S(K%H?7:$U\6ntJ8`&&f\?6LP].bT?ZF`m9Qe--G1%V!DbalPI<$!$"L2DUUbqucn[<aG8Mn'8P/n6/?G6R#GMA6#ml
+%E"0$JoXd'sY&H4#KZs0rO/*sY&E'FM=AV(8mT1YIP[;<Vbm/jQ<B)4Bi>XHmH&EIf-7nkiV+2Se"b9bk9sM!E3MGj<dLMf%pdV)!
+%'tObR+.Ppk\TVG at F'__?#JNbj'ureEF'6eu/r%UoXdHD[Op6gGe4Bg$<G[/iT#b8=)j9NWW/Uu&&X<hV^h8nHJ`fM at _+IaP".ki5
+%(//$T4$+dspNGCIh*n"cM9EJk%YrFH$Ct>(1`C'X9%G$'X at PAK$,CfQ1*$aO1O7fNZA7cP'5Z/k,$FKO-F4C0f',J:7VZ0L^,5 at c
+%EHeW4amLKIgi6=OppsufWF3"`!7JcN'_4-u=YG',Mr]?H"Z!PERDh0,KMP[:rgEQiA20O;OA=+8>6]YM2".B##S0N&e]nPRpeu+r
+%&ZR%lG2Rk[4EeqWiDU?;:2W;%H5U>h"6ZWbL,8j&P-602'jujqMhs?2G$*:qjGj5W<K0B-\O]'5F]+^hq0U&.mh\ahO:Mfim+A;E
+%Hc6k7[S/]$@DF2BJ?W0FGRr5FT*J.PWtN9RS`/9K9c[+QYq=I;- at p9m.p#A/=Ic_qQB-g6)rUN`&(Y?P<,(cK-/U(`DGjUb;Q3Z<
+%WcY=0UnA^/Ag<MtRP#g6^pGI\7smkF%%0qGnWQ9>:(I;/RNXYS`$@8=iP6e0`CuXVk*c;JahZ<r$RY[WTXdYD%9jOKaNj*)k&I;?
+%XW-sie@!#H+rF<5d]SZ4Ci\<7AWhQcZmfB,qa`u(TEYp2Cm"#0U?$T&cqud at JOXq3GOt@#oYAJ#(Kl,*R`$)qa`:-=:==K%)<6nH
+%lK"@+Z^@1[_5g4]E%%/+ftK^]*=pH'SL[dTH3(SuBj-0_,sgff3:E>8OA1Q<Nu3-@;u#![ngW%$MBe4OS^o5Cola:DT5mQBMo50J
+%..Ba2A3G]_ at P#(;8.K=0NQ)ZO,fntV'@2&uI(Yg7\PuEPM at m!^icDf(nntY:?/Y0Am'/(L<<b`HbHj7Kri3p^>bQ<0:n,Q3GlhmV
+%fOcG!'Yp./?m-eYXH<pkmUJHC3KEqn'%[K\X6FP%_"X!F74!UCD7WKnLt1YVRsN`!FiK<.Qd3\2a.cZji(<')#<SD4P`rULhGL+*
+%>@_PA43eE`UXGa:WL<W9(.HlZm8?8(Wnb'T#aYP)?!?MR8Vrqo@\!Quc3?elT.a1Ejp;1KKFENEXiQL"gq<8]^g at HQUp/Tg80YGg
+%5QNt%:dh:r&oF.^,otm5a&U?S<HSN%88GrU4$hj#9gAa2CJ9S"Md at l*PCXu6P+3Z,-S3HjCESa'jl+SDR,[He.?M.jn&-6.U7 at .s
+%XIG`gdNA]2V[._/SEQC!+R-l?ZP5-iE\0g78k<7<dBhW/8<#Y0Adq]0%8qh<pIK]aI<"A$(E"L[72`+omApm+"(,;P6ZU at T%V"H^
+%`R(ou3L"G''*?f6aC@/djD%;O6pOUD1>K:r.(PU,*'pOO7\7n_<am4)!$j^-H,5b;6L#:!O%K0_ililBS'2aKD`/7AGX1OYDRln@
+%ZW?u_\&:b,7$LPS,Y8L!"mUZs=_0QrRrs!@aB<!b5OKPI*s'rVX-r-M-Pu:rObF$*>n+cI=QgY(fTM&@3Cf8&*<T`23oSs+2_CU+
+%=JHE\Ygl\)h6`>F<7&HbmdR5IK*f0p+VN6bk.t;#$;8MZ[5<.IaqlAm!dDNTnZ65)j;oXC9Eu`9kWs$LL50St:Z(7_d/i#BSMn6=
+%AA`#LD:_i/,)Dn`RG;f\N!o0.gY8V3gbFLLaIb2d3n9AR66Q(O7)g9IfNa%TAIfq#*Sumg^`(l5PU at ebNqAJ\P!#l3(U$I+J^8ru
+%25K;$-_<F;Urj6cmFA1Y6 at o#jGLnfSG&a9El=_rpdjhE]1J2iP1jt`]-KK7&ZHN.VZK9C)*SHEWV7X;N-WJD3TO#+H4n)Ai>D(e7
+%mR0jmeH3Mh5\.1N'eUnIjTb!L(gHN7;5EA,@@!3*AERO9CcL5!@;"RX:-iT^88:[4h55?VW,Hd=K%1:a/1iE1ordkN&%Mi6W`kW`
+%`WIGdBD4YbIC%Jp>9gEUrKF#s*k=khHl8IqEE7QgSJ)N1#.k1LN)Q"&Nl at 8\&D-*mZ\E7t$P;-kUoeoBPCs^5#PQ4G#A%oZ'20/&
+%fdg.OeX1!m!sPPEGE(;0U1CkQ]\p+":Y#P?ln^(7P\T_:]6e at t?@a*d+ at 7ADA@N_ZA8k6qVoEU<(?r>G&\noNJbGtJdLjYrMh"iK
+%$T7_rHX!?53op1#Rn at NT<No9B,";&.(3GhoS)j2c2HYB$a6cic#]i'i[q+`J7%jX@:5+\R"<LWXAgqFqHsRS8!e>kp;%-!]-a/CW
+%JKr88_e.gU8 at -?h4sl>/Rd"Fjb.+M+k:)Rl`bP<dP%>H9,^CJWkR3dpL:52F^!"jifgn28k[oUSF\Z*")W!a=<`oI(m4$N#Y:=j:
+%A=]:rZQ$rI2H;W9]pp@[-GjdJ7-PO^0%TtjWX_iLK%Epi>:];]e_p;1_$Amk2T)iAaf??%Z1;6qX&NKu at _le,DCWdpP-J7/Z-mjt
+%)^\e0=\"<fX0`>96L`r<gXP"'n,NR[Q(GdjaIm5&.77O^F\,3OB3<NG70oqo0QQV;*`\'jGoV6L9#FD at Dm6&!3Wc_f!/H64CbGsD
+%jjXLI%XcBTO4_:g2UKC+s'>$S;=>f*c"SVo03pM^&bK1+\I#8$:9H+2Q3H[I#`Dk3j4]/\31hZrN5BPPGSVX3fAtp6 at C8#>:!#5E
+%^U627R6Y5Mm,:TK$Q`ZXCu:uN<Kp<\2c!>dj$$&_jC6ef0Ii))Ens1+2Xsd`OU(!"FY%FcE`lnq.H./f(t$r?\gm)p at .I1CL^95L
+%VD=DnO6hV8hP-ej*m"!=)=B'$8!4(1S9K\((];@"WR]f+mW)IOjk,b_HCnef#.H%d^B')1T<.$YT(*n(Qip>"TP$3D!12JloS&j)
+%jKJ5!L`=8PpW<%pd'Z7$P0.N1L*7*&U1VP*($]X"_IG,EGOAUIgrYt'Fi5C;?Oo7FBa`$^"&H0 at e`C#V5F8?mbN"dH=UJQBcpkq`
+%n[?QV1usne&s;-W:98).)ji91EkI+T1,q9SDjFT#`:7pA"S#g]\Y#sA2W*0E@)<P6[,'@ZfIc#No&faWDW"/6Hh-,e=:VXRA),Z^
+%O&+fjM=L/V/7!:*[Vj,LabAh![8o@^8P3N<_R`a16P'EmCt7[P1>k+EP=JDcW!nIa\WX'kA+#B6n1RrPkrRQ\`6uhg)[,)h$@;In
+%(mtG9jP at sOlTso4@C:>p7.JaSCF@<8P+3Ym8qNUnBMPVt:mfbuIbS9Y(MS74XrdYGA4E35%4ZpR;7?TS7B2^a8lOY`lDbEn^uq`3
+%$IhJfWMqs0SVd-#"iDII6G`JZ2G+e949`2>RADs^!O%'U7c$`db]u:kHRUbmQ2If--FcXc\DR)S+PT`lgFO:FZn'2Nc2>c$.^=Ae
+%MN"P9j"6Y*D%2fIQ1<+_5Ao.cX&6sHA36B;1;k:Y*qCB%An.khG3G=CJVQqWbo at 6bKa/qoS&KAUc)qus.`'AsB$V3]7HJR#LUc3c
+%i2pb!6$(q at M?k8iK5s([=72BnY&,d!/o\.]M/e+"b1q5*9/4DZ^h((LN,P/EKBf)/cYSGF_HE$^<pg<Ir#TL)nQ(M+jV(]G at IjVJ
+%Fl0G]e/VFd;1eZna7b))nX>GbJ58MA*.EnB44Qb+fl at C*X1=G,ds1,r[OE15\VE4nq9!q^Ebe6SUdYbcS2S^&B=gm#$9X[ZGS5#<
+%Kk>&Q`XV%>4WQSm't at h#:5@#aN-6"Fi]IJ^m]?B<paA3o0Nn(<17Q>`ZCS&L<76dn8%UOuabX/XF:KQA"0<\q>nso(<TaAe^Z(@,
+%99k^"[iu(i?k7POWjP8!APOsR.^DSSp.\a]?=\aI;8A_o0l?T";arHE%SiBa=Y@<90I&TCfk!:E>YJDJ\Qq6V"^`]'%aS$V19b#T
+%5X:@/dlk%qlIOFM0AB(>./`:u`J5Xg(O/'e\q)+p707q0/;V_dPh??K-Et?rkt_Lu<`Ct.dW"&U$Ng$.m3e&gO6iIRM;(2A16c*R
+%Md$inJ:N;=HLe6*,i:kK[@X9EP10enR<qu-+U?E,'(RKADJAU>7j049*fFOG!74_l&uB\P3t`:mW^]TsIr^6?JV:fHibGfn:#\p"
+%iB$YjX6b2B[Lad*U"n%=b(g9qgj9Pnqel"-R2(cL!@#FUetn=SGY2k+J8<uB at L?W_]Qu$TTA.nKQ(M=d;VBD3*QMp:PP=1/QlgCq
+%d3,:(WVWS8Lk*IVeE)jo at C"FI3^kM6eR):#f*A5UFFcH1Hrg,VkmWBp<6A0.H<6c5mjc$0NeSH6Qe`>FCts.tAiCqb\do`0f5M[t
+%LXMb%Z#TH$*$"9bW\FS?PLaUpQstGK+g=<HHr:\j#(Rc$G6f=K_3!\HFm=?&A[<*qOHq44!MgIVA:Jhlgm6c3*[Me2/P(G/.8OZK
+%k&LAL(UXSbm/GH\f@@T3BuC`,>V5(['ms2(5G!%-:Pun&"e/*UH*n at k2S"dslkqMQWk*VE3ZLLbaDXk$j6%[/[oM^2*O+(R]rkL7
+%g2+>a'I0%tMbi'T$I2`5UrnFMc=4+BPGGRNNo-:$<1\"_F(t\#OdnOmK\M^3-<E*M%J2=7>`2*lM_\"D<N/XfAC0TG-HEuE=.N.o
+%cR`e+++(Mkm2,%3*&Bh^As!rmXu>>V1<ZgmL4o6067_?7mN0)O6PBA3eV\'OQ_X1VD?dPu-6*?TYXK1ZSRgY<A]*:m<D!k!\h!?u
+%h1)_+o<B,X!ST4R8%nh=pul#7fM:oQiZ^'Co3AY%$gj:oC:e,$]o-Zkn7EiMm<9VWO;R")e#43V_isfEUf2PZi^lr:Cu^hfi\d9G
+%*r(bh.``OME7bX_++S(lD=\mg5[hR4.:csRX>Y^L75l!jA+md?2gAi57MWoJO_gAG'Q:"QiA.+,*V=\W9Obo1a\-r+oSDZX]iXJ>
+%]L_*#2MHdup'('#<."m/-##7J)'@I=!$^;u!Z=Po&`cR at 8Wj'KpZQNoSkno<3u&N at Tf"aF7BulAaHAJ-[ObPYV at Wh&Y$M*jkYb-3
+%?u/Jo<2Op!8q%@HQ#N3?IPt7(YbJ&OK]fI:PsDsCi'qrmJW*71)o/0n_(qFYPg.cK@%af]TF=!cpoj2F8d_O3L$`0hB)B+:/QpR'
+%LrW5)Z4]6g!/FjKc^j\_\'%.Qe-X'%MM\Jb&^=Ob^I)?#BF$5G`7(d3r?Sc.'$JAO,XD'"oc@@1S3>pgmpO:]&oC>Q.Q6ap5EKbG
+%#G5G6 at PiH(+L8"mJPRD%/uMTH9!GEVX:_hrUOAT(Qc3L"0RG:%ZWeNZ.oBje6%o44RLUZE!.\&qnH69]LD6g7 at c^g^?+(P.$a*Ts
+%]*`7I16g/:#D_q`oN01];rNE6:bY1DnA(L9ffk.hFe5o.koR[n,0ope05uuRU4:^b\.\%P5qtA!@nOu3gQj\(I7,*RR5d[NHf@:Y
+%58(GM.3$B\gap)MG&1Md-RqdN>Yd4b(8\(IU at R<gV/@?L!o.c64#$;9P:P2bK^ljm7qE/H at L0M%#dr=;RB_KomaoZ!4<Lphp9Lel
+%$?q138EU+UjHc.LOQj'#>!;0o'/Q%QZHgY9i(^O5l\`,S5QW$3?edLer4]Hi;3Fl)9!QZEQ`c.2V`kD/8noNWT-CP\mcKi<GJ=k8
+%m$?.#hf4cBmL0(e_ZWZ-r\]f""f5$Wi?Nrn#Ul$MPsdRK7A"',72^-P*R[u34'i]sO4AU>Ia2Q&KcAF:#2pr8^4)@WkU)FY)2:bE
+%,YrHVb+]mBc`nG9-bMsT./S]uWj1_1 at +fA\lRXchVDbm3niT**VWlRD#/35oKlmQhpmc at STk(1F`lC2"LKV-,+A9#RE3\ZD#*?u6
+%AXb!sa(sl:h:W`d$pLAag]c?N9T"VKRkY91m_ZJ4ID+IBEd#AiOZ7nf=0phH;pr*0I%4LBaV*n`laGWc";q(//k<1U8Ii"!SX\Hd
+%Gr]F4iaK at aj!pEESYI;N&_ST7luep-R'mA_(Sg%P&:f"5_iU$lV"*8-s"%g9//snMW4*L8fW<rinM_ER=d]Y9/sR[oCFIf5/t--s
+%32iZWo8i1Se*74X+ at Aeq,>*u2Q-Dl?icJ"2eMI9dmX-,hK<3gf+/b/(Tm[cbM79;TC<,j((OPQ>.]On*LRZgIOs,gf"#r\[G[Qh@
+%JM5kWXBpWtq:1V"A;@dP$qiag?**#3)0O[>PXC=9bo8`1h.5hI5YKG3GIn3!6-%)u=[k%;i%;np#Z!`>/>3o>"SGke"<g4o3BOCe
+%@1'eMgVEeY,1[BW#`%K>d1MW&6#Tg<JL?;4es=@X7Gsb>e8e_ga3o_P4EA3:JofS[]Vr6NiSR1&'nR]SG^..VOu"Dl\XGCU9R\T%
+%48X4c3N!=BOK/FcCg@,7j]pACYArE<O;lMXR<&pA(>^H"n9&WS7 at 3B1K#JB3bDXZo^Y9''DG)H$!D3f3aHBmJCuh*O[MNrQp;iH3
+%4IKZ&QmWm]mM7q,+`I]TcCN0_!A;S]4`^(cc(a9V4;K!7,dY:LD";/h,73DElr.nJZ#E<Ggo`(\%hQ1QX9N=CNh?\])DQ@\oU`Mj
+%@?1C4r5:$#G-Q\b-M6&XYU'r01+#d:nI.ZrC\#N]ca0]UnlIn,4^K&<hfUhsH%a$r4+7Pf`\7):iiJT^ne?"@s68T!?C/(.X=>\k
+%_.M`K at HX-YqXuct<S?O=f5`dtKL+lu>2GP(igW*QZTS?X:m@@l(9NI<msH5./.PRhYQ-<dqiG at QO5W&tPpA&TkEKQa6d[f=K0scJ
+%Kid.5k-K=TC/"is,g'&Lj=*BZaGcIun;:u>U.^Ps1cqMQ[b at cPOM#sYfnTK/eQ+AGhmA%^\2_tZ,Cpq3ZE:R??"Jc.$h->4EtLMc
+%kok:W at 7$/I?:eg.R9KQ*2L8GcH&YqP,h</9%^IriXg4:"4n\st%.t0#R(0jrY#CTY#!*,!PQLKq;[jqZTu*h&#NG5)>K7Z45n;"Y
+%'`g)JWDkc@*I69TB_,#6BqFGQ7Bnl'Z\NSfX/GR7WS4E;YZS?uFTk^"rj)ACl<c,sCKgLac"BcD'-<U7%n'0/\fJ"Z<>?sk9\?/F
+%GJ(hrHHd)c!89L24!WE8pQ60R4I,q0#0sO";aAY9\nCS*,pLf-52r#)mO-DA^b4S+WDkqh9?+KU+uBpl$`*o,XQ%LGM(9*qOEc&h
+%%d%uf`cdajbQNfli%/"*BX:\fCb!M.8og+!ODAXpCoK'[EWL at E*Y6s:rc0T<?RAM+Fk[UBf[WJR,`PKt).ELO2/8r&Oa\@oNfcku
+%PPaHkKH1gubqDjO87m$$_,H%bZ4+k;P;Ren_lO!4f!%8]YWXesB47jF]n/1:Ahe5A;\8DCP_#p8Lfl=M/qV&]P!T]N:p)M+5H;K0
+%";L4>eV7W?C2CGlS>k;nSAT9 at W=n.5h@;a/CE:+rMKE,A6l:nS(?ij5#t'X*.>!(&LBq&!bE=!1.r7hcSltDBF[AkC`'d=MeNoL(
+%<dapLL)M6#,G.RZoo7bO_m`Q-joNcpAhCHVG+$/!Q0c&N[0Sk-0*>J=>([J1J4s at eV7L<Hp?kQ<=`j[X>6GK32geon0l^,sfAMsI
+%C(6Z1Ik%p-bBqoV+$2Y&o+"*n;_(7/7:0%(hrNeS0CE3N]APJO(C2id#Z=X.e#==+fd1M^"PWm%\;tkcSO>Js`%L&sA^sQkm7n]`
+%n,O3Fj6:EHK!8d8;ki8)7<.bTPIZfdmN)k:.\tcEaWpdjNMuB/fiIu*W,Pj%Q6XH]:D/B4]Af+3SH\G!$A&l<%s,rm($AN`Wfbi3
+%O=")5CF1MHIVtdWU=DQW:cIONj*<c>l[CSIi,V;1O^nD:G%]Wb>LF2T2$0a-[S&rk3H'M;iNmd_(S6_MkF=NZU>"Xh*"e'0\;3P#
+%R0Sf5b+=s[+-,Gp=6MMdCs1<5.BITZV#]N#C(i+JIGO)]RQ?@;J[fiT;=nr4`1!U!Y!cQ<J8JXg,eEBMQaBs?0TgPN$S16=0;g)]
+%[]'OecT8kX`?Ogu><[=Fg?^LpJROWMY?SF;S%FR\IfN*V*c.IPi28b3Y$`B\3l*XZa`0G7R-ItDI>u0(*"H+t2(XgjOP(2e([#^h
+%'*C192D3c.(5ZTJeK)cPSa@]1gij8dpG$e-RQA*A,u0FJ&,JEcZ6D<18eV:b7J=;j]>`qB,YE7R[m_UeA"GpFq!`=(#[?gqWa<hs
+%4S__T)pP^r3fBP0F'%PNM$Uf*PgL9;@A at k0>$s0P4fP2>=R3]\b>\r;A8#LF4;C5&;D6`;f]H9t$Y/^%W?)-3]&ImOeTPQHm`@Vq
+%4aXcp)GpeHFXTksWbOlEXaHCuoU(g<c58YD`sH\GrIA*eUPZu2l!,h[>L(Km+u#N"G[Vij?IlR8/_Zt0R[p at Wri[&5f``)-+?nhs
+%L*\oX at d[504bmI*^c'q$498<8Q7HqdeJ-l(bD<>M.MNJ^f@=C+h&=rmZ\.E^7irkeV:n."?H4:KD7Q4[Qu.niG]s.gCg;:VBBQ2Q
+%jnA4OG+%$\R+6Fa",W$p#h']$pCq'G7. at oY"nDpTI26tIfrS^lpeI"1!=mo>ifL4=ZWMeMgI[g)2-$r:,M3fG8+SKIL.Q\VVZ\-6
+%pL\Pd=Zr at a&V-7Z@)XL[Xn"GcQ-5>7cc3<6$_V at 5['Eu:apRV/J:1M%kVsR^cd!-XP)!&M$[YLH_eW_XO=eS-/#__8!`!.dg$&KK
+%gRTGJTsAP4TaD13f5l<Z'49c.<HN]C:2\oQO%tbd#&I=8`O>s4GrZ;Gps(lJ0O[Yln;k/[d=?</>^!djAH2te"\S-A,:MKN(0(PY
+%ZqTmt82Og?bV8N;(Q]ND$;*2QW2`<mUsej:196Tmlt28!KTWn.S$e?+O&O(tn.Vf'f;bK:R?;=U[%F90h;ZpY(fe!Q/&>-r*`FG0
+%B(AZ]Gj:_mMkuaiL[7P.,5<s],(j0ar<nW/7M<D-^kq+NA_g?/$p%Dh$T[J16$JXTi4oXGa.#@)^h<0ChgX&TcmEOCT"h?oZ"c-M
+%Wa\_]Kp8P8$H?nZQe5iHnfBcHdb&V9jTAOKbf_U&Ntc33CYZLm?8!bBW:=X]9$(b;?iYs'#f"'YiF_Q0)S-1efOpA_UFE4f/LmI!
+%E*EKm.0:/'o5HOP:d:5M>];7OOp7ca&cp50*6AhFKF=AI2.Q'i5%7R<$p(smMPH(igAe*Hj-"4'W*25H at p_,/8*j[+LW>=K)ce?=
+%m6JV//\BtIjQ#I$f_p!H2nCW56qUK'pB at ha!7I(c3j5nPCZ(#*%AchLKIQhO2oYE[paFNeXcqtTfTkB7@[^>paKnC=.q"D4 at -\s'
+%%A:/_qB:)bD]$CGVG],$Z0K(>8h:-M7<XHo3>o#`YZ1^Z_te?RR]B/^O>C+S0'Zbs=_=on=[@(.>,t5HSY?o.B,P)Z>dOT=V(8_E
+%AeqjJZ9c3LeN$q(=ZLbQd*>YW,iiTGWKX<=#Empod'A8p1'shPYF=H5hc)c3YR:jrgWXN/)I+</)rt6p<gYojK<6TU%K8o?gKGt;
+%#Ien8[bkc,G?O]BYA'H4D=7ralsS_qVO3XeA82o$:3Vp#Z+HO`A'H#4FIGWEP^5o_;og"Xa?4AgRoGmJ+GrQ3h/Ebs, at H*I6,>-\
+%kuq[!X+S7mgR(q4)/VJS6C_\$!>Gib+YnVK#TV-&T>_un%u;b=/06@@'aKp5o+[@8#DI"6+/DZD_dH6b+#\3YhuSOV"1aV!`o,H[
+%P6bk_1cCG'Pr2tk2^WT0*9&H8F5lJl>?JGiFXdEl15oLFNn*a>N1j+H,<D%'#@@eOSbVl$ADA<DK/C>F:r=e0O.d9Q[?GkaR0Go:
+%#TG\$>_V at Ol>I?f^)R:/"2B<dm4OZTY^Cg9\V>F]+I6:6gH?H6_^-a-hW4\bGc7[7VsTmNgX:8FJ.]!YaOrgnL3))3b*<P1U6I6f
+%PJ1QbGZS*9/2=BP4]a7 at YbtQj4\:O?i-qK;@(k5PnM17Pd9OpBEPc+m`UIV$>b^%V]lnOkE8UtH4^kLu,=ip"V"cp1!J8%+[6Eu2
+%4",s)Q$UN/Q6WIsL%9[`Ih7ibFZO3h#%<IGk0NOZl8dh/P4M2_JU]eZ]csdK5WBO7a1;%I-&N3*dS=to,SfVlCPOK0i@:XE(s*B1
+%IO^h'Hd4(,<?dFCX7Nfeh>Z&;2hd6H#Ll!B#CLfum?G0#)L`83&?HURip#EG*J6sUeah.lfiCG<o&uMMh6!j4+E-:.<f_.N'^n"9
+%^E0[p!Bb#C9gVl[Dr2OIR%k4ZX?gp,UD+=Z%HarI)#pV_\VeMSkW4geJ;:[?ERnMFr9d1&PJ./=HgJhac3>?!P<4SWXGJFbM at ke&
+%"eK5d0j[3KN[#TT*Wd.>>#Ru$hho,FVrTm)4[!r5S+HCOTo,`O>a="0(K+hri<0BV#na``B0:29&^)_Vb at D4S3b@T'YIePM#C,e(
+%Ef*Bk65\V!'a'QSQ6WCs#LpncB!\Q[l.PcWfW`ER!:0"Le_e=o at uS\X>E.EoROb%7rNF at Y&eA$j*FPb41D;cSJ(p7Yb/slX4RNKq
+%!WXI``4]09GAh#7lmdDeWP3Em-[U/I4'\/#%h>+VU;JbF_H at OJ>:98IhRg'Kp.5EM1>+fn,oM>f32`%_V6M&2jKgIdlkWjJ:'t^f
+%B)e7 at o:W(#(VqD;e`u5B-9'/SWQPZG"!GcO5t8/MoAFaQ;O\5D<c:?8ZT7R7fZc9"&pl>4, at Dhg'7;373T*4d6I!D'du!N8f#Gi"
+%DoZ[a/"S$NSLatql+'&hY1f9H!!R5;R.s at k!Fkg>noBi;l?oDVVqJC<r%_#6W3t[)bg2j'`FIP2I*CD.&'tf%Lus\%X.$Pk^ZK2F
+%>8MX$UAoC=I_V&I0 at BbFH)eHI[.2^a[f^3/b3?J"8eBEiX;9.B;%BGI<#$Xq1cIEi+;^OE:^rIje:%L#jLhI`DD,_IKiI88PcQAM
+%O0ptY[t,I66^Q-44&V/Vmqfh(Qdpb(*mgEPfE2A/7m\H48 at b&r#iU&M5O9.Y2W:V(l%HS[c<(Q'jXJ\/4U2o.*%.^R]>u\BK;s.u
+%"qE).ilNs-)CC*+F]^CMU*Nl"M69RR,WVjSjjA:eRe<k-IP2i.+\Rj7(d&+dM?ILU%h*tkDPRPk+Af1tagO'/V)IX^EEAH6F_VE8
+%2!QIc:5dB>UZn2`SkUdBgd=m?1rA`-ASLj!md^mVB1EmmfI`nuAmAKT6%9sj)eUtKi0#dZ$91nKQkUriT@#r>$uf;(h#=Oa9`d0+
+%R_^'+8&H1C5&PSOCfIqTG-D/]$[=u:M!%aW)E:=p+AnE#:t\M_<:6&54dq;0Go;&lOi"Ma]`"#%:!f%C=)a<?\Drui<3"L-=dqCG
+%'CM4CB(!o+gG)8:#:X2*!gC\/k\SE<mV:(''!*FCcBgt/.O$#4%J4HJ_IaQA>MZOP<GF/tI-fhAAS-L6EN#)ASc!tgVS+_$;C)@A
+%]H<!jH/e7M*W<o11[G86O$$r7(r;h]HVcepp''5fPa\>ONj]tRX:M%aC6>rb"D?PI>/SXqboN5=U`:.F4Ag&K2?X21JX2e/\3Q`S
+%Ca4VXZ82[@*:Cfsn.-+*nQjAh):@7C*rg)hX?tAY/)[Hhe]g:(MmFRu4E%VW#tpH'fbGds(Wl,SWhu+rg[#b.f4LrRb13#X0a((/
+%fa`(;2R(6]P=3c8ig05;\*CX#;<9BDoA!Da8E,7,eS2H0J^`>#mQA7/C_kVUmWjX,:I3K7jLs1[ootSrD")B^(mKsIf<KoC'd0t<
+%]ioa=GEP,BHW^<h at OP2?)_en]mV-!34Ta\1fLr1d\$JnJRCnn;TN>;gS*%^7/YOOJ%_4./doi>DDN_1-*\MWlOAO"^.2s]GZ4^"F
+%:^d&t3l0Wa):GD8eVTUr^V<B3&0*-Y-D<oW:2$ZYOfTuR/+-OQ9LZ65RaZM,U/bpb@="=q$JB;f(eEE-!b`-7/U at rC0&?mV!mZ!t
+%*@FRe$pp$gm)m;q/\A"8Rpf6B'S`lPClBMNa56q1=QWV8_<-!&nOVe%2F,/aOFu0gmFZI$C-G-<G$("-[NtE,=_L?tqqn^>G$?0t
+%+j_Ve=in9<inPdn at P.D1&91Rc%)N7@!)'dC,+4#'j)IIKbYHqff'tfn;J*h%haaD((!!`"Uir]7^R^kRU-)<sR3g1O6Z9pZR8BgJ
+%pE<i'V=+)Jm_hHhk!3moRnUq$fjBO<4D44!&Cp-d?lb-<B^:O'@Qtjn,=Euhmp=(pH"2Y]S;c"c*j1:k#.,_GOVe(;pcU;4>B_W:
+%-clN^g;[633gKjTj-**7#ii-p)i7-Jm$7Vcj&Y5Y_^-$hf$Yg9OIEu!1:`K!*e>q,MX&MZ=<`/9;2$F:h8lLLZcDNtUZ#^G29\Nt
+%gjuEPHZ1bf2I"!"q-_jj.Uh)@O;<12A:Im.q)PK]gZG])gNUfZdqV.<`%+sn#E0sc\IIY4H'F.f&3Y`2_Q,>$X7hjW6"%EaI1gVB
+%ffbd'F,oB0SofOcM4ZQeZ!Jp;VE,NmR?F at K_Zct[F0(GC+Pp at omDfa#(.F=&0ZA"(eljV/Ih&"r`u:`&FeAuPr&G`@WVZ\V\``X\
+%So3o?74(H^2fhZ5(G at R(*J%c)q'_a@;np'8&W?dEOjA'M&uXepCr-%8Q#[1gLM.b"CNB>A.;-1=4b<Z]%7PXFC!Ll&NhT;8 at R[M,
+%nE[ArNl9TD5g8UOCY:h'b+ouBL3<U-gdff^njs`".q at DI8o.)[QbU%6+lo=,Vj<-`R+Pun_ki#Hl*8H8nhN5KH:Yfg2_3tT0s^s&
+%p1BHpOaa]+%SSF_+VP9Oji0>=B93:WZu%a0>ah)4?GW=\PPbmfBNm)QFX+!IaoMmGDb_9Y2QJj4SXgJ0AuS(%?57]<dpPQCEnJ!V
+%,AaD%brIC1YESa<+PZF5?ru:D9(!Q&+GAOndN at 5Pn+OqYk]hbT;LNcO(=+@$5i1Yph^ksnegNNf6rX6EZ-^b at 6<P+j8Zs&SM9&*H
+%nLAQf3&04M]Xm8)@`*&fh0*F$XkTB(O*.$ISs:#IBm?j#=K]ai63*NGGWbt"_DKT.Zb at R:nDr*#N#!JIGT*qLpgEE8ZH5$d6-Dbe
+%#I`*-g+Fk.-cTDtgrUds[Ka&[JnG*LU/S%%,*PF>Cag7Elrr$rnR;r#BG75O?(IfofY4D&"XYQ`@Q4!;\Xh,9rf\B^='!T`1+\9]
+%SI,V0gaY;bg#nm+msr,#QBNF$j0J+hQWu]F&3`YGZrijTAr/E8o)$[gl33iam06dC<dE1M]6!br^peT@:P:oJ at gC<#/Q&Ol$_sl?
+%^`d,F%\98,]54]?8i^HY;,7^\4Sn,JjcD=iT$iBS`>:\ZGHd&0Al9]65??Gl!:%.k$G;`*e/e`6IfQ9bH,Lt;'^=]ljQs`uJAW0@
+%5A;o>ohq=u-jc at 3N07.Q?orT<Tdk3di&r+7OY:h^`OE`k"GpW`OD@!5:Hi1XJ2KBnfBdh!<=EMAjjD'r2n==H<-Bbm>_2?G-RFiF
+%W8%O/4O<`nbhJ=qr55*P[+T[-W8$q16$aJTH\!ZYRL!HH[E*47V-MmIn'.O?Vp9*!d]/b3N0[FRp>bkC1tLVlP=Fg=<"`^D+bP]i
+%9$Ka?#tHqd1eG(9="3FR42kj!"QjsMI$Pf+"W at GoZbo!#@OSnWN;5oD+G--fX5ZF.rF+CS6rE&"_*#Cim)>8T7Fs%lB':[#3Tm]K
+%XiEj$VJhW;$Tjh`o>9'9Dpg):LNhYWHS<[^[+XOm(+*N=fr32d`j+UIap.RqD9![#C"?.t=//H<<(4DP&eB#IIBcht&!U>NT!=kl
+%Nk)/Xq'"o`H0&'&"[qPih"OJ)7a?9!<gC4GE)o&$Q=NUZJ^JVtn_Ul8DeD@:dP<R/*!V=fk$0*Z*:pLpKrmc$aEFoM at NA#f]t:T;
+%:(=_=pXKcUE+,l\mG6j,huY+VC7 at E!cEWuL9::$>3"eudB]Z5LK'[nrqHiA#b<4tj+7C6_82e9D!7R.h,q&8R0L):rj2W/4fkZq1
+%ZW\oDIk6O$,=*OBZjSS1 at d29^Z?O^,L3Zbefr>:(VFII>QM/o<HQ(5?Go0HWGAu8Y0s>@?3#4/plui!&OA0!H,[Enm'!r6FGaaO!
+%[:pRBr[KG_QsJmj17*mjXP!`gD!YJ at 1*$9B2eRstN]dqQf-F/"%4K'2`dF at J9eNlY'!#02KJrud-%W?^Yg!>=jMscHjC47t:s,+t
+%8rY$qJm:Z&;=5h9dM-D(Y"OCP8L0jh>744CF6H at f"*I/NS>g#;lq(cH&ls!B5e^fp)a`PO2,AfK^,\d)X^`LgN^;sqK-3^%c?@A8
+%0oYm?EMTL48U5-:+ at 4DYga'ubq8(8]HQFtnScPCJo\%]66LRZFcgFAdC^PqRp^Q<>G+92r?_n="D9+^S*`^!-P</d`UM3oHU(&m=
+%J^N>Hd'9\=$'N?ce_rJl)_n"$'--V*#ESFr)QGUpZ%\baQtS^cB>S/Mm98,M#*^mO?7jCTIY+CKU_h$@:P.[%4PB.fZtT-^;p*WX
+%Wn_!9I*FT1b1L6O8KPGrT"8(m?Y,\BH[1c"7hNIYZcL'kFFr"#j;)>S<p_m6H$>e2Sh`[8EM1DE:7SP6S<uQ8`j86HlL`3Xfb\TF
+%.q&=fI+I-nBt14i2O<ZQO&cBS\[&?S,nZ8VT!4Kc[@N91g*5c]#OK!PK"d_&8<QTV-StHGkFl18")PAI9,`g_O\:?td(WXQ,58=m
+%D3^>"-Vl'NQ3'Rd/C#jf:2*AC=!h4;["em0/KU.t6oKl3\<1(K.d.$G[PAMuEZUt<9hb^&At9Ka`]>6id7q=.Ft)J%l>V_Q"db(B
+%9rJ\5%2C'47P8CuTAUYIO;HMH:%].'_P>gX5m1SP'.hF#94[@FP!*]\[52%l:e=Tl'tk3"SL%LCgZ,M_3"H6XCE?O/R'qS,B/^N/
+%B9Ps at K/l#;n13QeI`c88R)rE:,_g-Ga=9"b1!&#j4oj&<LQ"3f?h14\.0M^A4K_itANi5fa7$MYUp5',_88e91ghX*M/mWpNX>JE
+%r88G[cM3TDOeD-fF+Mj1fpD%QUkK#9iU@?qeb$nKH4!c\eS<-T$JC2N%N[mc>N8/L_k=(^BUs6)ACcYD0GPSaU:jrU(/]DH5b,:?
+%DTiaZ-Je]<Q9'RZ'!t&I@<qQF?S)HQ$eu15%6eN%GSNN$Zf+$a;s,_s8XQX:@'=!W"qT1Cq(*&?_@$PL45Fbr;6H]u%L_GP#8HSY
+%\#33]<mWVC>Wk8GF5*Q?\'=&C`E"Vhc,qgMfg:L*G5:8KokN2cmCDcb%5T5<lssUCPlP$APf`c<O2:W6$[]ji3iDZ'<F at RT4<C2H
+%&Y0k7P3Gt:=GgC._6Vl at J8:X&P2NoVM-'&Fl<&,`%UQa$S3uMI4k9-VK#HXdo&5/WDYnRbUInf%>CO at iRjA2abj5AdFpB7G;*9#I
+%>_ at C.C`+%<87DYCYY9<?5 at iSUQK1"8,jKS\%7uD>\/bJ8IgK[., at C<>]lSL7W\PgS,n_m3#.#9EFFRkV;$)%W[t<V%0&Ne.n?DA@
+%[JAbejN1=)37fIUn)_E-Vf98FUu4-DN&Fj#dd2*Oone&^U[(21VCRfDDDFg>/f":Q0G50R\*Z73'CQVO- at SF:odiX5;h?VjE'@C1
+%4rCdJ\.:Qqp'jV:C,m`h5"]fLFs\XGBo"Xg-BPp6PEq2Ch"OLFG>Jt(^i#='>Y&#4e\LS0<)V$s/a2ch`*SF_RKp\p([nqnaVct6
+%lD>C0.(!,mc7MaObKl;A%)BK84c.D@*'LX3UcPbQOt^t[V[;WK1BD(-S?^a\^ea^%2+Qg>F8e0Y4(,XCC;SKg^+![(#HT$@LW92q
+%TplM:jpR#AeM03W3Z:fbH>^lhK0p-P+*XHI[1b_a!C4,NkAC+mmCt$Port`4!OL(b"n?6ceBr)E<iiP+TqniDbtghrh<aIh85Nbh
+%JO\j!#redQ],7#9MGIU&(Sl+M,WKfZ%gufk`$]OfJu7j4:/.28S:p.'cK2bfhjfuCWl[c9j&L,:2"DD#F9*\uSp;`W=Pj^Nhdh!b
+%."TQ%F<`H:aF*qCaF;AC#5'&o?eRF6W%-bPs+3e)>\@GXGeH-!F+STHDD-h`$#WhMh1dLKXL/U4bGTra#u5YQgVG=_Y3#*4],oPg
+%pSgegkR1'?WFhWToU_It.beTG/7KUga)050)D<PfE\I&^>FFNMU,Mi@*B<t1!pGGhEuo]%`OOtuQa"1?Zs%K]Sq,u-CGWI]Gf<^h
+%q,Hm0T%mk'R!CCOqu, at ekjTk:m[Rda<1Aaf2;5?6j\0p&M1DdiI/VWqq0sP#SK!m5>^iFjCFh/;_C%Z4gk;+:8%!HR0kHYZ1g\K1
+%B/R6flTpu'dQ^rNVsWG4/1*>*-$!.jUKQPXEmiLJ<+?S^ndI1X&42b_*R..D3Q=eX.'Rt5H#e9GUrWoKp at 0Qp+?"A]?LsUc-b<MR
+%CHqR[;+SAr at f!OT#9Tu^hE4(7pRnB^<un0hT,Rrr<8TU&/W1o(gLf5-F+$=VO;3t`?H)pH4Qfn180sXuUsar(f#q,iHpob+SlQQO
+%mE0)9ljLm'^b+c6S;!ibVf"b>clu,c'<E7T$2M5\<RY/H`.1G[=pQ18k5PTX,nd-B4u=XG>_;ZM6^/;)JN`gZZ6?9)A=S1U<$^I.
+%i(=K)$^a]1T:/Mf:u*,tnE*Csq#Eh1DnSW6B=@[Z at W.`:Hu?T"i0b7l-5g^sGlEOm:ML.%YVfuDG(!iKoC at UHSfj$YK;):4Vpa5>
+%4s&Hp7QY"H&p\=Ifru]&E&uM4`@X+tZnR[9M68*lOF<\1ihh+$,Au#g0i8Z:(.t2H(#O+16gfEteEOO%cYEcd'-M]&Qm"Ih1e;P[
+%S"uB3Q(i?"N_*,Dfp4U5On8M*.R*>Uh[N.>[rEJ>KSAH^G>F]:l*P)%]=g&J5CL(ibYK\!$p41[PhJZ/caU^k6$5fL8@#ts0.)/1
+%']UEgZN8EK;K1Xi3FPqe'o*F%QFYeA#?I<u-^RJ+f!uDl^RUeka^;/K5T=sVEjASr0ks97],qt)`aS<`2sV#2Xck-&g"Qj):1C%r
+%[+\<E]DC?X`-i3Kbe^8iT?_E<FS'^BF,l=^[I#h4AF at gcNSRdZpGVA^0Xtl8#326feOW]--0,`CM2s+?nd\6([AMOU`+TXs/TYE=
+%UWAl_E).Mqad/0g!Smc:SZH6qm,cs;8#-%DHK&^BEP('$-^]EE`SBLd^F<K0;@hJ^>LFl:U_LiEP6'`D3.cK0SLn]qQb6YAd6 at Gq
+%fAo/78WtU1;]f_B/Ck't0WmHg?gY at s_gG&'So$Zt22ZpV]^k1:aO-%8Xa*tCF,<5oeqZDD1IY?Rl'qO\l&d59>^:&%'.EnJY8A6=
+%Oa)diI9*B5J at sF6NKdmkq"n8F=eZnI+>9CSceCn:ZIoK/9,``>m5Mq)&6SB]l%p$OeU&,,naP]WPtpoGd#n`BH='%DKlm#[%V=Y%
+%M2oW>\<N`YYQWeQO7tr$4ZT`$9j4LBXB8^f\Ug"pU/KJ2/pk/mSO!-g_0 at D[W_;d;[EnPYdc!XdI7Zo-'9B#:#c\/0QF_p`$*tqu
+%k0l7YJ??S6[JcpB7r[g#kC.Y^=Pi1U11fNcUMV>2k"#Y at G>tkqfg..8@)2!CNed%!cfq`^I&3-7D\c6:;%j,SQJT-;l\5P6Wj#<M
+%e,621NBtqF+9qT%H`fb&M59=k%!.3Za[PaU8qLiOCB8_r7$!Tl>\*hE'JjQ;bhhB2&b&\D8chO-[g812:0@?l;D1h_b4o+,^e)[%
+%Z#H"2PXqmIUI_qEU^csNn11[u%jpsENj\oO'G3hB;710<8/WCnrq,8m'8#S]Q/l4g3QDg[cjOOZfn`1 at 4`.[i=dTHIb0!cpp?$sL
+%/N("[8VFA%2SV$k\'uo1\+nL2Kt``a!Um?d9O+AIMj%^%i_P(bW=_cPH07*Bb$7^J[eQp=k"ZJjan\$lB+JT)A[=jtk\,\EUQ^3F
+%)miC.d^IrUKn<uQNbtf32(6(Pos,DXmWu?ph<80WKn1CC7,!6;1B"qMg'AZjDGMG$e)Lb91Vgn,aI/kFpCXpio$s at t[F8_o(hB9-
+%fXpfZ$h[R1ZJ*A'k#q"W"Ti0i9thon]S)G at k9X[hn^UC56DNVLEC^k_d;$e&5PsNnIa7N=5l<@CAH%b/Ktg_$h7=HR]H#<)q'X at E
+%WENN<34M,tA(ean,GbSWDEEgEY)i;pG#r\2#^A.:8piaA@$Bl:Z1C]4\P>>&p7)qFiZeJjk%Z&J?JDihaX>\D\&C$LdsaTV.J>Bg
+%<(RD[L8K+lWXKjQ\8(U"(j9(Qe.?\@P at qqTqf(:chr_V$[(lW_O<4"L`]9:#9*2q3Vei"Yad_%&3g?7%[Y?)3ops<LLV<:Kl/PlD
+%:o0fo,TuUbJEJ-\[-&&I*<\T4`0bUiMRV1.'`nqEki^'[M.ql#[k4/hZeQ.B1-(#5$,T;BU'F\Mbiu95c-=99'[6Y5FZ;Y2d`deo
+%a;ufC\UaN'MQT?F9Ui[&D3`TI*d.:dNT=AQ%rqAqQG]uY4^,LcJ<l*Wq8#FU*:\Yu8%J>`Y$Cd**<W`SJR:uc=9)^jej-'c*\;RW
+%lbQK,DnC_fPLUef*\6WF(6)a;hGbuk@]^$E5X$c9(lnOO_$Jf->MD5\(f&m=F5m8l"oP2fqDBe07YE07A83Q)9XC8^ptI5D]"\In
+%SEteg3IqRC/Vc[MRm,5.=gq5=9LTlXdAAo+]n7F4bF_@"(,P+H"Ng;/pGJXI#^TO9mD+*I<^cA:PP3LnDR at _RQS0;6G\s`$:APR,
+%`[H^h at bug+=6.o\- at 6@[%3V[4$/)Z39l3TkLs]R(I9/**!fOO+Z&,HHSJ-dO/_q0m$7i=8X.jTX6c3<&Vi5885cdBPhjL43>5uc7
+%>;>.BNlKB.,M/<$$6W&'JT]%.5R8Xa_%%g8eL'A*%mocBN'RNoSbG3Q.RDsXc^WO%g%c%%3DZY.GoM+$l0@<<HI=(#S at 1MXB!j62
+%8Gm0K*)'g>=_Y.D97Yc>Ok at 4R:*oi.AFHL!]\)_d%@]9sqs0g&]nMp79;q:*.Ln#(]?Sn^K`I+:p7iG6V/G/Z[1Z.`d at tA2Oi$/0
+%E8Oe,*I3u0S6KY#;=$l$pa3>$^_UeUS*KLgf.WaDT7^rbH.`n(3EQSj(kG7.2*`DU2ZJUE(7uOd"K223!df.>eOg'#B,:HeI`.Bk
+%]C7'DLuSY,-QXPb'=Pf0m^lX,11Z&GGhD75Dp;$Ye&ieAOPcAaD*Aum=4%l]YDe.O]VU6r>t^nRLB2M");)Q"1e=c0p(Yi!QVZ]\
+%B#)/F`@g[?np;"O!lP_g!bZQum*R+UYnJJ>(2QAoE?g,50_ at mm]5t_cZCud7q(u-\X>)>C+EB0jDCmW/AWX_km8lI!?t(<B.2s0C
+%CR^6nK.&FP#!lDQ0<At9.&P@`r%iYZHW#?t)nQ!1E+BCPbdkdkZSm7._?jXA+3M3c0K(iM_q.trW9WVP!U`cHp'PH*4oZ2n9]Nt[
+%i;VdIjA,p4WE?n+?u6bYb4b)aB(;-f=oNt"f>W&7U?+-!"kr.QYDd=dCSuVkQU:ke"nRoQ=Ne)3#,MiJ7@\1S4 at s2#PP4r'?mI/R
+%`0uP[T.K9'eocS"7h4V":bDpuXY(^icN^(3Y;TL7Ylb at hj.hlsiIjueXsBo=_Z#*`OO at U%fl[9n?`(E1QEQQ&C^%sA\;;q=nKaqY
+%0 at oS:)\D?a[O!fXpn%FK&p/3Oh73u&70I.`lH;K<cb1d>-*u@=Eac\M:8q$Qg(N<lX68g*[Ut[P[GOe;\,)c<-46Hk%Qlf/R"5PX
+%T&#$(ooES:amEJ/8J`K\3&A[D7nS,l=(61"3'C?C/`bp8Qe/cdPOOTo8Z$:TjM&,AiVmYW91nF9Tq]-O"T,^)U'gW1YcsuoVM'ed
+%PB?_bLIeM:hkLfU at 7J*BJJ_f9F3'g9ZKJSJe'[2Dk>4htm8:L'Y8BqknK)R4)k!7!g8;X\<r.!CKlgN%e2WMR-Y"eoKO(U=@q1B6
+%(q\jofj7iCDisdbD'SGNWfrlMPYs*0GFh(XhOA<Y4ZV8AH&ZNkV>lP9FTU_^$)C?\EEc.Q[]/_*D^M:lgRoO>Q"Fo14ZJ\PFFu]l
+%>WHouQ561##JVR;"JGtkQQ8B`OcGU,5((Wf\B],G$A\lE9*?r at Bl(R<j8"V9YNa`@Yn!`EN6U0#G$oq at 9Md,g>:E+;>FS%^edmV'
+%ei,4h/j\j-l&-o?j>pNja>]IP[)Zk=Id`i6Rrq7o&gZi7b7iU=.s4;K5V_HG at ll7ujK)[9b,;E^+3:8-7*[M8,I$B,\3KT;c=t`q
+%G.`rL;uq's=:fHbrbs2KOt$5$h"PX^UK1e'5EjP3Pl*FUM^NI5+#ErUP)PGDk@"N;Fd\"[q=WHkA1YBhm*4cYY<h)J1]0"+0fqXY
+%cT>io".)CY<,KOtT]&"mNL.b"B`)lc%)Q5ZW3?#U*`A)H;H7/o9^.'_9>4FK:ClC/+%f8#3kcF35(-(sljS(Vc*[DU2T=)\c!+td
+%\*`?7[uM at HZbgoT>G<J=BsFcc0V$-%D!^q<8LB;`'L6n`4\e.&[OoK1`I_Pq)KX`1joF*8*8L6MpjFVbd`Wk1k4\!7Eo"(,:NCZR
+%R:Z4\>llT.j"8eO[h2AE+rBd at j,\^q99V;@r29M:OEk?&7kSDEqAg"09>Xhh_j+:+pVhbep3F=kI2Ga%$U4Jf/RcA\7u#D;"?jCb
+%gQZm#5W:j$k_M9-$:<JBQbS'$_kMs#82o+@?"dg?gbgOJ/<ua1+I>/ubggF90OCmd%(hRN.C+*m9_nU-g-K.\9S(ULEG!Mi`NFp9
+%.\^A^_,I4D"P&[N/6%2<EaD+<g&"7,p/GglKF5=/akYI&;X[B.S(tuXno]7WCeRRS6!P&ULKE'De'JU$"2Sk2+t"XOXX>I_'[H":
+%@h$5Sbmo0mNAH.\T2[n-MZg.![UV0Zlk)]-2S=#LARBn'O8FFg3Rbt4WA at Kq8W3[.H_O&'DY at _/iAXRm+7W2*Y>b-1LMT_6DEg)c
+%-ZQQV-74aXTC$bQOa<D+OXW+ at 5Gi0c/rDWMHN$VQfW/:tM?b4a29RC7KB5nN3LIB!I,A;4cDbuN9`8hq2pDZ[A_Inn/#\^(J\1cu
+%8MlF[qL23fa+sU*2ZEGFc$2D=,Tgdu-HqIh8Ld?0:c]C!Uj8B^Z2*asO8Il+[XXY`D^"j9$*a)iDWMuch^lBMJGM`l/:X#s!@l@>
+%p$Nt<K8u at H11%p_U&L_bcb`Q['/S_!2Opf\l5G52+P1I5<rA"UP2$Kl3q7N5`:Xp[P?W:mV0"JqlXiM7"&$AaC at 1LqaD;)Y5.:N(
+%""4^*a#k1)G]I4jrcUq_K79?pp[=hS8;cK>%gsiP:9H4W"S.JM"oUKNWJ.Ype.Kp[O%Q!]/l-kBCkB's2!/T!rDFg'@F:Ng6L&m7
+%1!,\R`b04BaIYntGYM;t:(dbUTCs at IaZTT.=;"Ll_ZNIXJGf65A6pY(%"/,64Wc39BA$"N&\($A1M&HC8"V$E,:upA@*=PfA!/B=
+%&!)oB1*>P5S7!A>,p=_2f`L\XF\@?I=)mG%>ScI0arAU?-6D?%03.SR8Z7b:kq<r#iqOYZGM(;?]RD1EP:cr%VeA?][<-1T\d:%W
+%Z'JQnr;6c=k5]M!S3f[#T_6$K2i2S8YoooC.prJte:e*?U.!p`@cMSM%PH7FD_*9+[WMrrULLLuKqV:52RjAn7\.a"aHu,JS at rU_
+%CdAoJRgjp.i,8K!IH:dl4eK8eod%5nRSoW5(ErlRXp(V,"8>?K,[KnfZfuas"]4N)AS/Qfp8p0o*laSn48J8N:u&$Af;Unsbt@;7
+%D_J:RLZ5e-5Ur7h+'i94S-_/^/h at Ym7MQR$=H.bY$O30gBF3Qfr9P#4<nT at l*.c#C7($*RCE6El><,Q(6]c-uITXZEKp_C/k27FJ
+%n\MARVXq_!OikFZc]HB'95b);.9e.>'$H:1r+icN)?Vo6g/tLJY5 at -kH!7t24p:SJ=%?lmYXd)]"Y5=R51Hqj$Y2<pn$/baa(Is!
+%r)n(L.`&`$kGgY8D,cR\^h*>_M^H$t5r:&Q[-3_F^M*d'clX**LH/_Tfche"fU"smarbrUgH+/=Qd4]+q5=p)@^Ot_jOcKH,`r2A
+%ne/1@[e?;@Tp:cPSR at l$&7DkK#I*BcodFjQhLp($DSBKDP7(@).40?&F/R^tjLa?UQ9ld0m*ukUmN2J8c7J[oY*RE*SI8N9e9fAd
+%aU<NYdR`Y/p-O]&B63_9T``u7I50@]GY+"W'3(lKoS]BXn,jFt/Wc3A)79_'=u4>LU+c1BZf/c?K'[YH+%S at MGtjCAium%1\M/N:
+%Jh/c6V4sr4^$tYd$9Y!AePl8VcRG%r%^1/mFDr91S0Pg'=#(VMmE%ki2:/J5rYrCo.sjbNjm&IjqQ>Hn#gYqh,544MG/+_D+]>d;
+%g9o+Cb+;kF_AHZ2QD$r[=r!^Pkih,snra._E6/RVG&X&+A$9r"5A3.od#q#>VYj[3,$9XEcV<mO!5ack1`_1(Ln'V9\ga<oM9bog
+%C3peBX1>Wh",-$<X[`V'a`a9!*"*t`#C\#@j;;e24MSP-VZK1,mtW,""[-nX$E*0=dS0;N00!0C_b,2G[RieJoaIH\?)EbiK)T".
+%=LLF!X6E&_QtlhQfa:m%*stX:Tk7]>QG94877Bc"hJA"U\OlZtd;O6:&$gJkMFEHm5eoKR=s_cGa+&4/^W1pW]Cc$@7,U2%@BYM\
+%:!2-L+iNg.4FUC^YYUA1s$Pg?DW,09F0%Of6ee"/m2M@<IR+>5e/sVB77rT53r:prFj=Ds.AbP*&im0,C4;W0 at j=+0o<+;4B5 at Ft
+%9?ht+NQY%@>#MmiC0EjHo;9uG?KK#*'e)%:D-59\WUh?g]Mu8VJV2f2kM8E(Q>KW=d`4D,NS9n!D@\afS$tu5loB"X9gL70B28Bm
+%Q>HR/g>TGL(G at 4Qak9=IcI8q]dVWINBh`YV at .!`g<O6o2okGQsGq_H@\LPR>TDZ6I\rT/)GpNTrac`\FfERB>C^q]/HmUJ#_01SC
+%3V)f?KS?O at 3_:<-8SA537<*@LZ]U^_*CSdcQ#b1G<j^S%Eka`T=TIU$XHi(dNA.Ua\@.S0e7;M^<aR!#QR'5*]Zj+,b:i$o/hll@
+%lfbj6f[YTa)`RY!V>TJNOiCi>\#mUC9aiVH"_T4'%Di)Z+7a7>.U'-[;(=t5+'LC':QY<4QIPo7^Reg.Cq79m43h)g_pIYA,-lb<
+%8NGptX05NTOt+(JCCKih%A6a81[cePAg]$r3inF.B;O;ES94o\ApkDAR'J`Vk.T(iKD:PW5Oarah`]N?;JTY98Y.;UE=GV(E`g,3
+%!'"NZ'^%@Jqq3qp#FhF].BYS;^/g/SZ at i'r%t]sB('a`==2&WB6ajVC\5<-P'a),%`@<hN_8n^hC<_qbG(&V1Y,Ie!cG+0^hitNc
+%U[_HeZUmC.K$%S);$.%6rBQPT4Se,?kbhXLl3N)\2IQthb3AdAOB0Y>q3AKRr7GB"'.5R6OT;352Y]OVnML'i-tDUd;$Eeb`fS\>
+%5u=7eZ=TimP:NJ5So4r<6God4GOh;3\WT`HXS9NReB2QhE/XDAj#Z=7c!n$>`baBH>3%&FCjulSG>!l$3Isc$ClBpJ1%tkBmFXJ`
+%*U2ZB$AnTX6m4s_O-FqTZq at IF=q8k9E_<o<I(53o6A;f02;$""l`f>CTSp_r.'i)CjB0'Ll7#*-Ljao8cRp$Tgk_#hHc9d%qHc1r
+%Y=+r)J'b0D-RB at p?OW1#)<L$rf5g<T?DR0##E5:m'mMDh/A;e8Zj#t^9M7G`MFT6DjJERC3P"O$_U]?!NKa.6,_.,),In1Mo/d?K
+%i]/Iuqih*"??doCIcZ?HHBk&@<QA.Q?LNKg)V=e.&P&G!N=Gqg/Jqdn7(g73>561R,r1RUbTSfs6cDBJ3+]_7PCsu\s2ZXtI(qq/
+%roYq199!oJa*&0ok.,;/cjhFuZ^WS`?rIe^4cM\_!/43MO!TaAZ<]61R2[rZgki?p7:DAJ?:dTj%@oPsgVqu/:H[9[-Q>@US;CT\
+%F<tXmauV!(54D2bnC2%Y_VLI?9<a71HWuF;,gNqoQAY+;S'k"_XBYm^<D/>/Zl%\-k3#h61u$B"A$AMM[B.D\9s\o15UMm_hZ`Un
+%Z#>#or^mpqk4Wd"b#;\;r#HH0=k'*.rZjS0.5=kP*WepW>!Su70#OBMgX&HlfaJN52V1D#>2+JIe"ebhZXAJR_4$oQnR7oDq)R!!
+%8+akc.b&A"Ds*Ze\)U^6;Gi.>H!(dZo=)bN!jTpp((3As4o at d*U""gPe9JT*F&>@(S:QFGeS>LAh:Ou$_D(Tl!g)#^F%1'faP=6%
+%kE!QLf$eD^VlcCKF*^b:9j<GNpm9<hi0GjNBJm9ZUoi$X%e$F/&QFoXQQ14U!WDC(.Kicc=qf!GDjo`5Ihl^>6$1D9Z]h]^"O_F^
+%;b&rrc\&#/Rbg4I7YuHe;Rr,XAA(kN#@_TE=4a6RUsVZn9.T/<%H:$gNd#HgGs.[1V.u>nMIXMsJZ6]NYr*S-M3FrOlY`7ZVD!W3
+%T0G^@3.Vn7jeZDZC8g9:p-,Aoai8f3 at 6)VCfVfXGQrih^4?7Zl*=7k@`bE^M at qt,ek,kZOZG/Bop/P8 at _5!ulg[\5m:L`</BAA?J
+%Q*PnO'@f$f>H.61XNH&NEWl!9#CAC1 at jhArmFGujW/[!=]M:66:>7`&+#A1fpD;@!:M_YK*E3(++WXSk%VV]FMD:ATS[7Ecj-$Dl
+%`M^ZF6n__r8.IZ*!SP!je:kUY5?Q1V0rFZg!hndC+_Ebt7$Sfgd1uhN!0:'r_N'=*V_gT at oE2gXT0j6$fq$QbiQ:7"55F^V&("^B
+%#*tWB"RL-!4sV-mrMbs4Hig9F3'G(2ZJN6uf]r#5o7hJ-A/"uP8Sq+T^/I>ZA,"YP5LpJMQ,-*7j[Do_%LeA"qEfn\<8_@@d*+7`
+%mR*OW=.WA&kX&KME)4uq.>6J:$]0r<"*^$ofQ`!r.unmo"fH<g[60mr4h."eD%>N^Sr[4.SKo)?n`D;*hm1DcdBK;22p2o4VPtQg
+%1K0=KN7/`"=gOgmQ;63dQ%X>0_l9$E7;s.=P/h%]:ce'`'s''h2b7!tdH@"eM_0Teeg12!T0?V@&a7';OsKHgiq!sGT;&=hfK5C+
+%ab<@H:L%g]'Yi__A*HsA9BWJL>^)o/(R:/X#5+]r at lg"&,4F)TZ?X>4Dam2h5Vc%u, at seHm]SI+Y+WXU1FI!TP'10nCSC(%i1U^+
+%(t4^)0r>R.7W7S&;8!0jY&:'7<2I09lg!$`jW66*(:`4SK.8CG4>T5%`\Vfbm\KF3n;e+8=P?P>4?[@QL3%/LF1+[nj\&IHb5mE%
+%O(%LV!V(7Uqh`!H0WFR!"a)3.eQ?LKcjWp<E&Q;p5ftuW at R+42B7$=o0I>sBk&`/GP.aeNd6#S&$/.Q/'Ta<\O1Y)?'&JUP%qN'L
+%FCMg,aYo9PR93(<TNiC,I!H,=R:g8#f79o_[)_J,+6:>'DQZ7.i/QfL+.bqGW?lCAoaA:(l9dGN-HNQ^=t3[3"Hl2 at jIRk-qt,!V
+%:Hl=P*O\S#1K>)_SUAHSA37"mp7ma64&^Eu.+5_edW-Tr#7iPU"FS8m>2dcgli\-U]Ejreq>UOqbik">#kZf69sLa9KU]rf0J>33
+%m-Q^`5 at o4f1h+cA9D6$,SDnFu>8&-AZ8/ZKeeNXeO)?R%qWX0jReN#?,F=WHdc(n0>[PQ]oDZ;h@&B0M2V"1e#;%TM?h^;rQ3r:o
+%&oD%Q at Yk(#=R at U3Q,OqV;SZKl"%lKW>+T9Ookgf@'j59C,ePIRMTZBQ?ZIm)jkHT]os4j"9?15EFRa5"A0hJ.SeSO!@eLbrFAp7b
+%WWq&]`pWGW#]>4:FnTG@?Vt1+rnX3k"sT6(M?[eg6pE&ap)\Us6 at f$n2IlZCUd4\`SL`m1-RGE`-M+SCSGOrR#-TBtlR`8;0BC9\
+%dH7)^PAHZbWt/#$T<!YdpO)N1 at GBsq=/p,i#`So),Vn-p&2/ng`=kkWD85XRYMhXtm[GPb_c5qq6?fRF!Y`'*Na6,<Mntn/rrr7p
+%ErY5KNAVSfn&H/NDG3ZV.j3QSHB-^%9OI.(J:qmH--G(XmDK6d\RVu4VB&.Fq<PBgVqu&<Io]<T](`b3YZ*rZ!>]?rp1d\&1)k"H
+%Wm%REDVd[D[hA3!aUUQ%ZD7iMkBXdafs_J`R6GNZ:N?huMc$PYWfZcd<fIC?SRhb;k9eGnlV/qqN'/44]*Y. at Ie?e:.F'UfnPX!3
+%$F_`ObgknhUl\kT17!GR$%f.do(<B^0l`%tgI0)KIa"3U[3g#C8?mXBE8tgL3.(EO+, at kdM^b/AA%a<kFD?^2M;[HYr4Bt]iGsP#
+%M$>t/_")5\?&8ESct^+9r,Dg1-rdr7(+jHa7oNf9U_9q%%NZq%a#`5O9Mo,%agL=%pV>HJ8>-7Z5?>%6%3,*j,pf1eoN'Rt,M]Y6
+%b9>L:lhQh$2"rH;o2lpdL!]n/e at 1!KSVEcK_DGs;BM?K]8\Z')<6W,?7Y08e#PH)WJFesQDWQo63-iX8QYe^anKVJ'NpU>A7$#0?
+%B*m5A$46W]_%FPmRr'D'Me6Ym?MSNWp?fuo4dTq&WS]9>FHWd.aXSV>GOs^?d:J*X(5M3sM,LEY\\-!?E;8XmE=EOYE[R@)o1E6p
+%^<FX?(JUlT*Q`\SYZ)V57WV<"9CH*Qj70&F['5?Z%aXqh_tIsjAhG(;9-a1T-ihi7cokH_Q?A?mP#>Tl9:Ke at ZqntR0LmA8X:'F=
+%P1(QpW*D:-?Ft?'Di07&QRk:>Z,pMoV3AGd!MX*uL%^1d#7Z._jL\T5)!9sSfrh:hBqI`5A5hC-#^pGZha9Ve(;T\64V#Qc\X71X
+%@J"B\ChW#m/CR2g-+slZR/]M1HK6NL46Dokoh$Np`4!+,')+npGNBF%,a5_N+HhA?s'F><]Kn%W&.>r'N]KH]@nL?)cTU+<<5*4X
+%G)8Pa!19+BU$#l3hRpcV)@Bldn^#,f/(Mo7>//?ebNsp2!d?!2f,/4Db339_q$m8t.)MaYRkgS*Q!Zpj]9k\U89o"<n'jkM[HE0D
+%)mO02[QtiN4^Jp8k\%&C'[AZu_i%5:QD]R8X\B?%Et/V"?>qoWCN:?'*'2TXC%glB?8Uuomj6VO8<jlte,EsT)(`;YbUE2[q<WA6
+%*6HrRSBN30h'@CsW6#AN^n%4<Y+M:uKfAh at KSkSclP4e8#"H=>5]"`c`g.g:[TJ"d32XH+<([Bd^HT^5,s!_<lE0a!85C/#m[`jp
+%(c"2iF8=:]diME!ZC%,eb=hCHc`Oe(SJ?L+;f<X!.]K052D(InhdmS6jh\V*fI,_(T_uBKf/Zq_"Uq!P8h-14i4P[%RsUPoirFHd
+%W58G^mj:+L#\WWF=AjW"FJ<J)QM`u7K`o=9cd9s.qFZK9mA7:N@)WE1ZFjT,SN/ZZhP at QMr.=UI6+P>h![Y6k[V6A,Ous*6*O=9Q
+%r<-/Ei/aF:PF^f18R^=cMXXIj6gWBlj;Jm1qsom*oSRZ,p:3K\iD/KWjh'#1)Y.d&L8IFAs'8RN`$RtU-*]6;Egj>rQ"X<J;\T%N
+%;`:ZV,Io1uI_M>DPD7PT(NM<P at 5hcrMO`7h=*4_a.d,?[q/6d>/V[f\?Ga]@HsQ/G5ON$5T(ekQ1j\QlNmUKM-"1qgIKdOtjfobg
+%<)qVK]Mj_OcUnQ0WV!<mfuW*ESRdWE:'l]m=ir0t.1\Vt99#`BdFPr0W.a3aChRS[K>^@7m,[g]M3K5f+Jm^b(H9r_nL5;lk:jPJ
+%+X$HEi6V3R0m[hHDggs$A1rcV-'4 at YOu[H?E>!R`c<?"q[YDL9eCnpK\F5QH0G0emI8c5l;p1D.ZVrNN(Q(EP.,)o+ba?B*h973J
+%k at S/N%aH[44(R2ji_tdp/$10&51Dp:_>LRq98%<J4V^Lg")8MEFg',8RWia+IC_Qrp3(QX(Wq7f&gLCfSMp"`ig48<^%8lK_WI=F
+%#Z=dccl!/GVcJ:2pf=k5<ccr49Kl.PTeXl8jdEDIFI$#fE!FE!qi6k`h0F)%.#E0QY!$K.616I)@mcpJ+7plLO`aD*1YA6_L=^L#
+%W[.aHQa6fB4EJQUIn>$e:@cP/(;7hh/J)ks31q*B;V5ntdVn\=;Wk`)6(Ze9WTM<a^9X/#YLB)X!H%*g+u<ST>=.8IkKH;`@Jn.5
+%+kPr,oUh$d,P^r&/iFYCp/RP>d\,5;VDPFsS%]%S(XNrU/KHC_+?R:G9B).O[#nGu3d^.S9JU:Jk:iZrY0#8#V1hT0Hc]IeYLd=N
+%[pK^DG7Hd4A3(EmBfj>XH`'B!ZE:C'rJk>6(-Gol=,8P?]CN6%2YkVOmjSj.mu*DemfcIh)8tG[GB at kZcPtg:4?S:_>]&i`@--J)
+%?7 at UN`NrTN:6 at 7-D?a2*N[0fMK'moED(;.6V$Cht)dXGcWI22Qa?YVWXK at 02K<4Ba9e+e;fZ_B&=WtiYIe:I+<`P=)-pX]s>BMt7
+%#OE-2!UlAPDVea^rKF.I#P'0tCB(+_:!u^L67a<PCO:-&S(L9IN=XgoM:E8X<or3Q$f at 4sN3L'%(8Z4]b at 4D-$\he8elg0mrck;"
+%L8F"E-UZ**=mY,9E_RoS[2$*h`,&XV-/\p8\)*,=83TWPLjEEW&rD,H>O_iQg`['Hetc@'U;%V6&`EE31rsNYkkMQ>a`)41D77_M
+%.#0XEW5543Q:/=f)_p[4ok9\UEe2+/(u#?YR,VC at 7c_5RcaWT,7"gIelt:%<]?(Qg3Gkouc]p]@L=Cp"Ck-Jdr]mHd$+Y<]._RuB
+%_0Y?WqO;,``(^3X,1/pi83(]a5L,K^\\:'-SLR8bIpckD?p=>Jk7>2WrR'j];g[btHV5.P4G"BOO=16Y_.M!brJ>=OpE*=Ia0Ns4
+%k/L-s<:iJp;%>5ene*@=pXo'fpH*(tUG$!*H]F2?K7[o`.qO9skXr\FamU[f!_A>NQHGqafU\Os3f`- at hF`6\^Sa*&_GQO)$4U/(
+%]lPM"Gc!Ko.8^#3&t(rr#^qjg8-)7Rje0?-UO,(P]=q*#aNF1<ZLdi>)'toX>_)EaNH(S<OPn`dK1b,b_(8D,on.[gIP%s$4-66I
+%n,Z]VVKhAmnf--N`hXkuSCb;*&"6md$eGj6nOSA:F2W\M\mompX9EB;[[,^bRrjrjbdkB>kWqt%Dr1>B7XsRoVVMP;H.Z5"GhJDZ
+%@(/8:`V,?]O+Y&0039iWce!*A8":qGG\Nh:@tjNG%ml at .,suO8H:[Db"XR.,n*<\$9LoD(N<D5Q8&tn!;*+O&I$B>P_pePF'p2Sa
+%mukFp1f'"SSc)[hU/_%i-s"c4D>/T[*Y;=^3PV'Und+4%\SX;D.:!qFTO$"!#o8B"2_#8rl;hL%UFha4q-EJRVoW4[ZAY7c-JJ(G
+%G`MB!%.nr8]_X7QQ%PeG at 1rQ7B+$1&l[j)33A]a.JE]Ipgp>ejQPT:qH]nNYoBA2>kKVQ]_8)SnY.&2Z^F_*t+&%8BLkrP&o-JZt
+%g6U]GFP>UTO]$a>&RrmggqZ[N3;fDQfeb=%p7 at Ku(:l)9OH$HP[qYtYae^LHH\8%cW)-:8IBOuU-6CUu^Q)o3,"HP$h8.IP8Q+H%
+%lr^f*\%FuUB2>\b/J<m)q5S_%a(os/`ep%u3d^Yp+?!@Z/BO^kgX#s-QH5b<B"3nFs*^,E4_KO"Qmlr&-#p/"%`hB"FGcW,<f(KP
+%2bO+L]sa2.pR+[a+iU.'<]Z:-_!5^R1D5fCeSMW-dUOD8"ViPrO,up(kZDI.s7`25"Us-XjI0]+pQ/ahS7p5"@;JY0R?4DETCbHV
+%]hC."%CTbr[PF,d]A5VDM2b[Vfn.A<,EQu.BhX2jFbl0.MS7S`MR%,1b>utq0RQgnOGj(WcDn.=i)i&!-Q1"Z;Rm?.>8jj*c(Yku
+%bGe^<b+`k=<nt7YM+([.Z)Nr"&<[foDG#ju=Z8).n<:L\fBKt%N/E9ESUm@%g--b'U,A at c=Q`ec>Iq=YFE%l"aF/WV(;./LZG]Mr
+%IO?^)"eMl9jZ?Gp_:o[[JsP!,+"t's&iHS>grc_+jt2H+#^<k@#RdW22q,`FM:]2ml]$3N[3RSKQ=02s;f]bubNDf'MdB&^Ipl^M
+%GsVZ3O`T.jHP^TuP(f at 1-1p$jN%dOk*4'PVoX!F6(M+?`3`D.0Acaal)K!`H,[5>OBEn`bjKRk-2(FS-B9Jgk<ar*[f at e@0]+,d]
+%H&eiH#A_#<ou1Mo6YuM*$(l]CX:4E2)L,I4aU9r\=V7V2YZt%.HRL-tM_"ebBcCb62FonU0e3S,FN`%40"bmD<]6XF-;tAk\;@N+
+%?*=9_B&t(\IXb.):0iM":@i&1k+"aOr7%W@`;Sfr'P=`Uc^RNhBDk<STr at S8eu5C_eglilPa/1T0,P!A878?FT3/OFLjs9dP'i.H
+%S=0GT]UGAU*4jU..4[iMB'ZROJ_?ZJG:I21O'BOt<Zh&'(OKoAcagQ,jW]Y=]Z6V>P[Z@$i9!U?4MV.JFl/CdTAN/q683e>rQ(K4
+%:`k(_m]dos'';jP.4KlE#;2;Jlu#u%>k=aOerDch#b&@8npX4QYFV70d&JlNX/$T5mDteu.L1%*Pu-dSXa)9X=giU4(QtSC![1H'
+%EEc7c-d2bLX<b/nN/=R`W(L_1/f7[+Q`):"d at e7tK^h`6/:$0aG73]c2&pSbljMPaKoemJn$<\7fi(D5Ga>o9=QpH,A_++6SR4f/
+%`)=f;A&9q+c5`!p`LT[\>H%UQjCF0DPYa74B]q"dW0FhIrS-XB;hqLImE_c.fpJuifpT9DWmI.Y=_UrHjtQVRq:YHL%p3'T1f*\O
+%PH&_-50L<!Fa'FLrV._Rm=\)J$9$>M>+l7Z/N)@oLER-#f5bgh9/ZPBbV4mCTQN'7!G7+\i:F0FD%2!R+r4&0Z&<OW^_0t(/NK5(
+%SGc4lJ at g6tA]j)!V9#]CVbrJhI'F+)#>_SIHNB/AF^Sg04Ai7DS;4kA<]"Fliq&$#,FGftC"f/*T+Y_c352acE]_!_C?)c#QJ,+S
+%iYadT\2nm?CGMAIkMbh=oRqUa\b<@k8NC!.^IAD&bY`Wb:Hap&0'uH3)Pf'ak^TifA&B0a*bd!`Z4[;r:-;#c19'H at I<.(ULorkB
+%5iE^")p<b-WkP2t?fms)&9(R_#A=1h">8)Ch_AHK-OKDbJ/0Y\\IUUn:IM]q at ._k@^`!tBoY\G$5AYP^OHKgp9!+A8j"M=HUX'oG
+%B3t1RXZo8pA)J*"DTp#tleAMQp$<s_L?-PH$=>&iC;>9WXt*F^K`F\`\V-&@11".68TT`2rjs'TI=;X(cV"YSZ_lTZV&ojKirh\T
+%Ak^BBNd9SJR at qh9Z6VecI@pCTX7eINaR^a\dat(>%.%T*X&1^)0ip9D2u-bm>=g at P?L at QchJ5:tc(+<$'rTU],s8!aiF$Y%;oZpQ
+%`+ELYY597hL3=f^"JhK,Q-X5t_(pjF#Non+27P]70_JH8;UYHIS-O>`'5lgP9.hdc8FhF5&,C*t!ZF[sb\f94Q;j&I=;3;rb;&p!
+%Ph<+dk at TS.,kVM\l(#*YAJD at BUU/OfCJSVjf5](.Hnmg@"\G:7$lC5_`G0'O#nlpQV^u7f1:fIjUghW3Bp6k^=jc%bK<PRd_L!,L
+%jNln3eLcUE0Q&Q(j-+i\g7G??H-*".JS8XT3NG5u\,_-TRfofGf7mPR/I""E*n9_oU^a at A?s96iME9e3J)>>X:7SoY[J;@i'k7gK
+%3$^\DFH9DE,4G8h-[S%/O-CRZQ(pI>YJCRI@<B.S8na at l*phU*9!6>jam.Du[<NRR9pP,l4Vp5P[uRqtkF0'V=i-V<i/4qc=,md!
+%Z/A at e+o#\?nQ*G/:ephAIiV(egV;cq[dWk%P=@1mK1*5]nOV7DaWJXhCR3P at Ac@3<O?I/dUL0>)]*20HG[+LXK;@4YlHk?6"eh+-
+%8<TX/9?;:ECJL<Elh4%6lbU=hi6H%-\kVT==#eaLEek7SXZ+9dl>(bGc"Leja#.ctH\3\75)H&"o]sMkKg8T[a;0l&9C]6E-4hQ$
+%PGI8odG"6P^#(VkT^M^pQTH"D.u.uk>kksNnu4a>DV?_ZQ,.GE+l[IV`Q5`raE=uRYF at 9+rY16'//q`_V^.Nihiti<U%QnkHmfH)
+%c&oKXM:4GOWF$0-rq3MGrVP`Y1:7CU`M^#fqTb'/CGet[W^eO,RbWe!*9C[Fa3^RR6f,KNqCW(?$WHD\'T0PfH[BQj_<4cmH";o3
+%49pVkZ*X0fkY=/Ek>N_uhX%7FJOC./6kTcl!'uY+HYHsDCeH7in7r,Mc0>(qkJh#uH8N,E#Y]f-ITkY##R^[e at fOp0-!/4T2?gS8
+%8YXFi+lm2/V-lIXYV?'ji.h,.+K at N61$!r="4-G6c6"aNjSt?Trn6P\msYANK'REl2o]@roZ$j,f0r;e2*aO\Z<.RHVdrPcn8=Y`
+%XhD80N=MFf6/2H>&hT22FXRP=<VHPufJF"=)!#-S?W.CVURQl7Tb'(=]!.K`H5$1$I=A%#3@>gjq7J.up!Xb`qI;bGBSi_nZem+9
+%SD;:jr`6oMB'a50*$p&(KK3CtOd<sLe:N&mKXUq at r\!3SP at AV]8$Uff6f>j14EI]CdO)0(_6%t<#iWn:q18D2+1^OOX&K[KD]VF/
+%23JJmnpOpGPpB+fOJ`+XjH[/S6'NWjD*@^g)7IIbA!*83"*Ps!Ln_#:^R`ToN2#pW*P)'6G=1ZIb#.3 at OgD8'o$7,=aA4/0FJ1U<
+%:ua6s5<+WjH[s>`,9oMSTN5E[3s at 2L_;*q$bb/:R0Ut4=?5[1L!a&k.;e%oIT!S!!(osUmn]nb<^^+8j?eQ'4Vp"$iqIW!]4*X[T
+%c"/0 at 0SRXN.LPVO_`!VF]86q'N5ICgA"5K%Q&01IODU6@,Gq"/Xh'W$386X9Y>VJ5/^Qeb at O5u`r';9aj_[c^ZhM+/8q2+`WO.k^
+%2$g-I>e&6EPB&QPX&][tO7U])@C*EX]UuAp!K)n&K"EPJ=B*'-3HbPEKj)QgI$n_2+RnbF at _#PGg,U505nZ"T$esi!='1godqHD6
+%^3NEG at M;qFA_nPQ3gP&iVYet-egXeGT>:L(ds,(]RV^(gQr;G%msrK#1U>0N?o^<>49MU)bV,I:G%Ao56_Cg;6c7t=Qc#H\+#,-H
+%#Ggi%b7I(*^iNBghl/Gjif*pgs0UQgj4o^C!sA"S9"M<YD_2dr*$"YB<0Lka7YqTa)[CcRP+fG8J0$A5#E-%%^QZG,ZC7S;N?EHj
+%l"kbWQH76ABh9W>1ZJ at IHdf=!kLW80k#Bf"A?.O%o9':K#'fm)H[_C^*#b.,`jTHE;j4KTG=t-0nbfK_CNef)Dh0%^%uBH2*RH/a
+%kX^!n02_,?Wd'[3o/KY_#Lhe$jF/_1&+*U"Ji]aVT7\<@]qW&RW>rAPPH'"PNt%YI#91Q"R*JiJJ>H*dUKuXgVQD[^o7a/2Zgg,C
+%hqA0V%c+iu$uL:jjF:0%L&Gbla^sa)^*BU_qm?;ZXrH=qnMJd:c:AK"/EEk1,L_mW>jSn1$'Z;!RJt-OW%YI`]V\%&6NXSa4%]bI
+%Xao;3cA[Zt6kV3<@p9tQ&MP8/gE\GGHX&_C`&H!ik!p8AB5K5fNTg/Z?#?8SKa\M\;0/<5RV6S-0s&V'W':cKKCu/Y`\GkOB-)P9
+%Z_*O4.6]8REjH=AM8giag;YUul3X]j.jRYjgDaoIh_)Y]`6)p>eqL0UXoq0%?:u1ErsFK99K[:`\ZI7.cr/JRao=:2"B4 at BOI_Gd
+%PFhCh at U1Ol3&pPCC9Q+<@U<M*25iIumn@#`HW1&;m!L'IP5sutU\GVVqXn7CYPt?O\Q5orHKHco::b9EEsIUQq/4<bfP?^s$k*M.
+%KoIEIJ-co&ZkQ2._Xl_JP*9u4'$u4*P.,/j#$%M"Y3]Rq:\:smYnZdM+'#N\F+?qmJk]/+))I1I=%b]OS&X(2NrQMXe92Iq(B'2M
+%%7q``c^N+19g[u*GE45.)RK#15p"dXV!'e'XG1_%5CV,]W at TBojH+7+"2WKoA4]_(.A4Lq)pHTGYT"A1?J%[7ht3T:Ot<u0/3$0_
+%acNIYM0?]k\UBJ.8j=01,ug#!@_*F*a8hY!C^JB9$eO_=?FT0)Ttmn&UV"2h%0Df\j.]55&&uYddmZs-#d><U:JW\>j+693o,&j.
+%oUVN+pY2KSa15V8[,&Zt",U1Fm<!ZTH$g*1MP&-O802W^I;jN72;pYSa[=s7$rntpeCnJFh2F\/o<UQ(hi'3p@'5UZ+E+k?O`0iQ
+%8uqY/n:@lQfpAuQUd>V=E-J.MD4Y`OmI<S>'*8e<L`m^`FtUo>1Q2iulsckbHe5E7cAaQ=F-r%Tl/T'q&B&Ws\Q#j=n\L?p_$[ae
+%*^6db#Yq+jQ7%10%-CKDm*m]d/j.+k8Ff%rrl'[CE63:DZ/8I`0E5R_mIh7tfIJlpe$Y9O(mC=j#Peb!FnoCu=,HIlK^eO^P0ts=
+%`-9c!4Gm*&8Dp69<[4m*[X%]:']]R6"7(gh%hXc"<,e[)c,W/P+HsoE-SLoN")!lNl.Uj6j83^+NP`]A/fM2`^"Jpp7"oW^WPOBh
+%R[oXP+J4)5%gd@@-FdNAkEF\LCA. at R#Xr&<leu5e\d`plJKSk`bN[d1mF?:1.1EC21l/je;spt*D4dl at Fri\I0RL7GBU'%T8PYRd
+%jh0B(p$4PZiWn*]TBH&/4ES6C at B4>UMqfb at S(5Ggfe/F1Fipo$3i`cD4bX>gSf7cmn!?\'ATKSQW9/2D<Wi".^Rg?gNqKm7&1e at D
+%'>s,bEn?Z2g:4%FDrN>jg(aSEXY:'mIpe4"I+a<ZWc+tIjnL#b3KI^>8u7PeBMiZu5qXW[k<2qh-WhUgV3ER)9KnC^WBO1 at F9(:[
+%:7W2@\/Z=V2Spa6'q!Tn1#)b?lhp\^$g6GQH'K>fd]GO%T.mhs"Gq%sKWKMXqM:D=SRqq-=QZ:X_<531VTbY"QH;RK]8:>Ms7CsW
+%A/a_mGnR$7TY)kI'A8BXfmD+E4Dk$Ac6o,.>eTb6;M[*HW1>fj(*NM<jW:qDR^-Lu]hNK$fWpY0Z6WaXqU"P'.%:&]c]<hiH-2m>
+%KqR7tI8]*KW[t-c]A9uTC[e;.G5PZeWf2At5rA<%I4forOk&<Sr5Gq43:Go/fWl$"KhDhZ!Xf(E!r<Q3;ga$*CtZ8_q=<GNqGAJO
+%\<*>QcEtD9(J32Jn.nhTf'/]^SgdM!'[.R]`0M)=ZWdNj3,glfW>SUIon4f4Od\%KQSqdjA:c,HfT\EhXpm;8+(X/72.jZSfZ-/@
+%[M9fWh28B4b;nF3<X][oU/MN]$RT[0b?(Q9;%9+#qYI at 1cGA[^<[)u'Zgp4N?;=1;+(BI20rQ)8P!"$hS%,B;s"c0/niqE7.9lq"
+%;Yqbi/oq--NhD^fBhc%2@>_=7jd0e_VB$'Lk$TdUNkmB/M<\?65[g]>LmV8imT[D=:@7c/3_1U>M7]1'jUMn&SYe*1Y2%sRo%Ott
+%_fP8[;m6c'KA^tQF at h^O'qHjH+s%W0WOT%AOlTa7]\%:%iuEVJ\-l(?crkDB7./WcFuag.B*d!;\O"Z8F$])a#>rEi?%_*bmN<"&
+%F2?Q*H2H^jeHOi[Zb6j@#(n#e=$CSpB(P=;&l=#ncE(r\Y!MU"L#JjdVLcTS1G+/md6B]kIHJOm[IS6CGLFNkK!e$X)C7R1NXp?c
+%G&;_&M8TQM at 4NGUMGdqQ539U/8TGXa>h,"g$+QWV1(m:m:dh,-33:E&:,j]WjTb+JaXlK#[0RIVebb^\).`$ZT/L.ld,bL[;T2dR
+%cH/Hm][so9Nh#j,3\FJi00dc3!-Hg3\5a^l&5Jjr\jA]"['h>t)X!E>EVY'eL!Ej8F>Z'#_6#@h$Li;l4h&4D^[lHmF2-E%kPS#1
+%KCFt.Bo^jA"!IK3YeDH6-%Cf5\[BZ1#<-uLj+So9Kp\+6YgD2Rk*V*.nZJ'Q(Ied>c=Q"PFJ1d4+61ID/gWgCb9T/p-mXc^RK:#a
+%m>IrTSSY5%O:p:Nn=.-1c^\%="D1Oe*D2PAY(JLQ0<$mq?P3\4KcKpbV%=Si8u73V4G;r'bYY&fK/3"p$@Z=+\tlmPKo7;,?$@-$
+%"MX9pjlP7Rr/pT&"PYfekXjJ*cfXC_h+fJq?oHeu7]rmhdLjT1lk3K$HF1;1o-&!9/M>5(+d(b:ksOoJP:p&%QC7K1GnZnC&_.WB
+%A(N8u&m[PZ,mWM(2Su^O32tW?q;#X*'RBftf)8>m9\9u[7irib](<h,%"i/ER/TOP5EU9;P-&S46A6lTbj=m7#Tc1IVY1_&F3[WQ
+%:HS`V-op9'M=0feZ4^@LpR]5d47U3r2(rR'B&`[4/V9?hd^4'`Hh_aT9_A#754"]#^NU;dalBR_1Rlm<IEV0)1&ghXgs%3Lfn8s*
+%B\Lr:kWa;cX5mDrl:E[2bm1`ri]e\>.6Q^r-b?W9-)6FR1(-Eq>63Ye,m(?Q=lo:8A^@].fpYKO%%5Up,8h^kZNj7f:2VQ#+L7bV
+%_<gC8K7q'(B5&I>ec6hfp?,YpKH?GZ0Dg_DH\YQ0$%&JaE at a/*$[q"W/Y_7Hotb9G:iUr)fTUr>*?,`1NbU]\blA<).<Ue/>(&;!
+%Ze6>)UsMZ\)2p.JU/M1tVQ,]"V1dorP\e<3UJ8*rEXa?R:J&ntC<E.b0R32t*LeKIL-RJAOHZ^PJ\5nq:8-!SR(sDG1(_-\Q^jNl
+%WTuKP2.fn*E&O[%Lm6t at 0CL,DoFc'&U[dGSVBiOaNq;C1F*9N>(=Z0T2ka'*W#IOpKWOLelV$k6K&,<[Tc1.@<M,X;>gAZj3"I&M
+%6:el<)[ReVA1nDj&m-Z<$mYA^&b^c)-r]Yq9sielcK9DKL/()'*7X_D!:tDM9:^:I'U<hT"nE81olD<.I\q/?mm3NLj"55)7=meH
+%"9f/pY^tO$F!=dNa4*.qP+A[nj)!lZ)c0[67*Rl8],==@@S5.pF5"C$;)-`cQ5E`+\I8_r>l2FT%eO3aNY;u$&Xppq)DThEQXi^S
+%ef4sZU2Lu'H.0jQJT=D8<T>!&809/0fT3gfRC5kLG\O(O(*UNq.C0jLI_87DRo?eA<S;%MK,eO=[R at VO#BogI.>K4.V?U`1`glgi
+%UtTI?Gn[r'6_&m"&XTkdgMtS,SGF,ho^,aOQ"h!\_HWaafdnI>jiNU#1=p,T:pur.8c35o8,rPr<;@<f4X^04*hDaOD,f5XMfafG
+%J,9`-SQg\4&ic6 at 2'mp83f,egn<jcPM_8n_706Ie=3iJ9<_j at nbfjpJ;fKjNUbI?f`O5DM*?N"(a3FlOj]:8]]QrTse83VN#3Xa_
+%\'@`<nB4ZZB<_<4?]arm+U05A1Kn.RFOrR?5jjl(q8ZHhYEfc'TZOK"\>\TUVnP`JOTJc^=E8CrVo"VgM719*U$ZZX"(j)loIFL`
+%4aBE..@"`*lao-!;$O:(;dW$?#gUY)YZt.j;WSb)]2Nd)(Q8H+^`8BC/PU#@(hB at n5rDHBlVP#;-MG4I.Kk>)n\&&%a;oEW8cGYp
+%;Bt#\5/^h/(EA+JkHY7;#/7"4+[0]]P&7MfLXUKQA3KK_Ej9P;5ke5LgAMHq"'^t:.'9aHd"=02GbG_0!k!'/.o\/8aoeW^-Ck<X
+%!W?0S&#:U4k1E?7Jfffd]Qia#&!@Vte?-"b;(.Mkqm at d_)lG&i1N&ohS=?FeSl>7r7"'_b)1224-.a[!1;=)l:C*BcYhP2mK*=1l
+%PAG8/UW#!uY1c:gdq-BOM!#kSdZ/uU#[2QuiH47!(gu,saZep"3MD*pc]+E2-WtKQ8*i1+dh8mfWLkFmCs+j0]FR#S<]\<T*:iDD
+%J5L=P4Jp:[]snTT2iY,u0H2eIUZOcHKdBTe4iaUr_$c))*:tNFf,VT]6aZ*Jab;s,IS$/[hdhmJfEpCn6e,a64XX49dt11@*AfXp
+%rc61G".7=Ik`Sh:CR%4V%P6&3leXL^H'tda(1hDN4k*u6Y9`)$8JC at I32\u%XkLO6[HM3CK7YeHaSp%/?;=h\\tt_A9OX#((q].<
+%gGIa-<l.)qP9?VTcD*@--RYF''_=URs'MMLRY((l$c0FcUDujo7a9k`P]QDsfWb\QiYTuSY1lc-RF8$]o6KKl3>lM+0&fG\o.SZ$
+%4C_Lk0U!Ts<Qfi#(u0QQ6&_,HAI0OdVS(R1,4%#;jd3dP7#sIgIHQiN!YW#cS0[hY!AMUX4:qp\j-nna;r>&X`h`kZDm\4ij(`r%
+%Bsp%Y])K'5IU(E$5h>"/"9D8jP][Y at o?@o!aTHTmGSi*-_jl2e^m<Ab'%n^9;KI7-e+U6C5S>t0G"A7)fTQ#:N49N\W@%j\"ar5n
+%s+tT@*7G*Q(Nue\O$m=im!"Xi848nG-B>bG`G\Z6iP@((gQBS%Q;:BiS&#qDb at .VQ-P-Ad>2Dj+dmL?EJR2A9*h1)+BRUFZY3iZ&
+%-W0+_77,TthFV:njVO+#39D>cYLfpS%TieU7OaR?mZHh</0i?->- at -[?WPTV8l8P2'..gaF/'C5=H%`_D\GHX41Bm$:"%5"[MnuL
+%,Ird7^uTgbPf]f!Qg8ihmB_dm:*o%f5ErNBIUfTSVj'A&>;i*$D_^-!GedKirX>K=AV!GHpM.8klYj=i57rPkZCX+h2QKoOBoODG
+%'E;[s!H&+^"@E<s]M$M=@J6,!.u`W'1D9Wn?2YJB<ndA8-\IB?2ko8Pr?;Y*GG^s2(H\6_"/qBGn3crXN>g<+VkJlJGJ(r5;uBS$
+%qJu-F=2;gd_%YVg\aI"P8PICGfllPk]_.bs/]i)@qh]_K,?Q5[gXI7f92'b`Pl!\hKOW;>rm4KEW8k9k!D=rEmrN%,,?7Tpdq1jc
+%hEIb=h3WM at HVA@F<1*#[m[H^n,+82FXE0=>:sBTX2t at M9>4T`*mjgk2cIeVRcRU3E02Om2mU<6?a=PjI6X.L2B6b?.Pnd^=WTq\L
+%acXXhH$J*f%]qcb8Tb&PArBHSWbta$M5dOEJCJi:)r)<o>AljR3StaDY at sBKb\7'u=nZGiP.sG05"G4W"&"un_j"ds+I1#i6:p%Q
+%+W:T5UC?-tYmfk:R@#M[SWDboVA_W>Wc:e1)j#$T43oC&Js<CCql)OjH0_$*aZ;*H6\t"m!%VMW:^j*'H;Sr67*kO.'#<iC>cG1k
+%R;q?`\u2j6F at YnUkZ=iRB>;+0kI5L<:b-Q/XM(B_kJ?9+k]+=j'FfWBVblF?*;eZui$d*UC3/W725l<"p*njeT\7Ci3J^'6<dM'.
+%AF![7r4R!Z:k<[<2kYJi\gE0/ihK/]rHV0$_QP%UaH`pSRRCr,8(!QcjZY**4:).WrWLrDYEOXO=OTehJ$#9T(PX:pPO\qUTDQ[m
+%M2fc4Z^9Ems%kVsCYXf"rLj5\jQ&lEOOJ at BAg)&&b[@a?$g1MkI\j4oNQ\=k]86]?EsanSnil`i(+]6<-sL`Fh#5Nt\nM_F(74s,
+%Oa92Oj_R,QNVfN3e8IA$FA2*a6&*>MPJm,J/u`(no8!HS&sDJ7>0=';7(4]Y[UTpsLfWi<JJCS'%Laf!Z2gbPEeZJhg-)m:;>Ge^
+%Yh8?SY9tW6Z!Nj!nM-Kt?sRX`RG$'C[gj$Z>`Fb>TK]eq9*fNd+.I?JbRYckE''9dR!*8ffGrc">2)6+mID),<&nJeYPY2`=jm5P
+%X.>`H0/P9Wp at iuk#RQm=72D:49g3e#f9 at tSe/=Xj]o6W\(T6aMMMW*KW_BhqBI>05()0?<m!t,^Q\;$dj!dh3H4c4p\]0bUQ8d'7
+%MuL*jjPtN]1s"]%$jT!=<fEQKK<!"9/K]_.NfFjdARWlTLWbE5T/+dj(kI\_'$.;Fl.cSM\XinmKIpIm>fY?(H+l6-";Ti`9:M#e
+%f83q1^l73apSg]t;r!Ue@*1-RD=/(A,"Ya^S_Rpm2Vu3u294gh.!_,nf6G>7/.#fI#))<R%Gfd70/[$mfP2`4*dSIrF at mq@2Y]G1
+%9soarH!-GDkB7oqAIQtG(0[<^qedr7%Yi[J/`U=nDnhUN%d]C;OFFM%"rZ1R$8`4i%,>b\4Y6nXfiK)A<5t)fMC.DqcHZ@!@X/p7
+%l@%gN=@O`f$B)T`h3T+T:AQ3%5(>;#F]V./IA$77P at X.Dl?'aESMn9*:jJh_>3$/N?&B`i)p<&B+2%_&250L8B'6^!q4'Jomj2$S
+%:X5eTC.Q5C,WWJu^eam5jIV=-%*`iCG"-TUQ-hTd%oR67qp^MG>A4E,!<Xe':<$ioU4^5P=S!CDqOUYC8YN(V at eMW>Y6`-E,@,q+
+%&W#D4KU%$5nuZHPX^n5,q%[`P'/q7Rrto/_!qZQ\j1dQ0VLc:nltTJVjRdnj0Q`fD]f?P2"1^(lG_1Z<MI;C(r at DN\/J!C9fkT%`
+%p%[A+<4Tbec?.kE(bYqDBR>Ts[eOf;W!qK_rbW.:7]%DA5=9L-J,orM*meB\ZuV&$Zs1h]:*%sA`h=/A7CBG%n#KI^l!ngrKS'e2
+%jsiTX?72GB\@X++1iN#69Mdq9D\e6[\_DZ[7LKNJdR<&=XQ9!_MI=kMfU/\(d<G]q5GNR"89u4B2l$,=&kXIn.uTYf at 4#@TnH?$m
+%/]Z$pV[%(siKKVt)JJ5B&O4s1^*n^"$>cmlU-L/?`faa?I\Zq2(P3$Y#M%se3"_$L>VQ*Ijf$s+R]5eMb\LdWp]LL/4]thsVIb%V
+%jR#R;!(`HGr+kV>g#o[*9C*.*mIeQXko1=YF=kgO\B56>1tUp&2[3RQWjcLDNKc09TBNo5<Jd6K4b$e9O$+t*+'K7BQ#jpp:(o(.
+%4"q'hMth648*0K3;N@%K4^SC)l9TL39/(49(uA0?kNK?]/JlQ6:?jjk]E/7FKq.=5jm^EE53^E!9!r0V.&Dt.PC+Qd8upqE1;?:e
+%?pO?6T-i49W21.&"]2>(-Mf97V`-',Qj:*aqSJ^oS68lsCqXb&5%Wp&[]TdV7hB).\^2_0JpphZB3LGD95?)f.PJ0_aikRc-\#&=
+%a at UV*a:`t)+BEi?a], at h::uXQWWB_";(7:u9FTgW]`9%O]$>^%*4Ot\ofc9.*slZml=p8s1KkF1KXjC[0TV;3B>PQG:0tkmV(077
+%Bao#p\#7sK)tB;H^&BUB(,!PB]['t!H;)Eg`0O1EEorodhaSgf_R"fhbF*+UZ7.:1b..t:doZ5C@&0 at 3_M0G-0:s&Lmi=BqO[8p5
+%NnU&(\0SW4!7*OfA?6H>c`a0ch%Pq';eYU]QJXoAcNMSYE`TIsM%,NZO=?]KhR;*_R$bW>o84jnjKK+@@(DBo*?7sPCh.BB2"$jM
+%mNGBp$0#?4,6%>*L[a41qT.X&PuRN;f.HeAiUu=*QZp#GX$-AbV%GO+5f/.1+?.-alok$\+LZ6:S6g6sa;3l\,T[rk'LBG3/0Qut
+%WIsFT4NUQn[g'=PMqqM[[BH3 at DWe,6T&5,50!:[('E(4B\A)#VkY0'p^'4YeG?_+OF$tg^n&R1rmK>99<L;ee2"#YaXgHrr5E_A)
+%Vt$ln0tl;'3iiaccD9mXBo?t5.3qQMY)=mq.8,n9OfM;J%UC(sq.4)eV*f+[gSUM5(=]EME%%4HHoKfNS'NYbE<)uKKk->VSqmc0
+%Gft0CKW.Pc[$@--PJl:T^!ar+-)iSBKo!04kW?QL at -C*X[3T0!,1r6+f5hb*'WL)EDpD85ga+:fPth8-&tED)7,W)(3n&V'd[0BK
+%kM3;7N]rcd2jET4glnM$D["7bFPO&;g26=,GT=ptUkC#H<6o1^1b;fKVAQ`8op]N".Z3C72OKi%UR,I-:k&=c_YpYQZ$i1tAZ,9n
+%)J`J*q8ecj_]ZOrUo<W/#BLER;3`a,B*C#,f&VnLWrh8)-)l/)<i(e4F!*-=9bs/kM^V&TDpgf^GT[,XYXY^r:0O9 at k/dA-M.cjf
+%A+j2n2"l>?o6`W+ik?bX1([.k-)SFN1Tt:d0"%Q-#<k0DKRiOP8i-=Wi?[M#k53o1c1rs+gr"RNoL#[\d`8:l/:"KfEsp13%V%g&
+%>]Ff<APg>.PQl<RLW#rG%:`.Ji;&GpSET"$1#8_G-`>[8QO at N&03>Ji:CU9#8SBA/\nLBCN8L&US&P\nZH0IRG`/JO-SYcPW?Usf
+%.;<gXMTt2ur-Rg1[XLtHfugu')ggk at Gq\I<p;DbZS__ at NebAfAZaE#[SF^"[@qqVsms$4Sj^MCl at O8mh%Ku7-Uk)2dpNOnP9,L7b
+%M*7I,5jN(77(8&<\ko\[488@@4QbK54bnJ6mi8PB;tlNl4>-c&$QJH,/1fr"GqX7[#f1BZZ2"7(Z]NjI65qUK+B;%Soq&b&a`4)>
+%H>+i!<Y-\P?3"W7IM>&*9W1"tr<?_ODLNt:`]5J\?bhuC_A$jmKX-!@$\S6r'C+$iSdo-E/_Yq1<"&NYqljL at 7QqQ]cL7fj\3gtB
+%VEIX=n7.H%SO9%Mn6Fg4m=>,tiC9$TJs:E+P2c/NC$All'(30M'<jl at Mcld\?d?8k+#*7JD(BKtI]3#:3>>g7;8$'%(MZ84jLPAV
+%;TZB)p,2HHJ$b#PndtpE)]o+LWBc*/X>qn3pOP(r'&^$^dqk7U*nCEbf)^=8Fnh^Va@@!L+SESu9a`Uk_ihFJ6_K2-&J%&M at Z&G+
+%??#eY]\*KN00hHBe^bMS[\9n1JOARaBCdonh6fOG.:3a_a:0LEEh%%5N`910g3jWD.%DRGUm0A5_f_O;K;@]F at 72aV6@72]L)DJq
+%W?pN+ at 7m(\h>dZ.!.d?UD[CfT+n1,q'f353Ng8N3&8/QH48fa,AgGA%YbfngCl'6I%HhH5F[G\aI23tbmYI$Gb,oEJi8ZK$lr.FO
+%A\;o,?=47 at OqO%g8!EfXKM1$lq+r.+2iV/*_Q54o-?&ERN)^cXVHZsCa68F19Ft=_p"+YXVJ<t]$D<mtX+#<1PbYX!;;X;7Tk@&!
+%<+F$JXFkueY#")Jbn7XjS??>K+csJX`1\DlP657fqi$uQ28>EFNXDq49E?qOZPd%2>7W74kr$j"Mq73c>LY)>m^!NG6:j0TCL1MJ
+%NS?q.Y<$7%es$SMa!G4[H!.+Xo%Vfg-$eEi,dHI2m+uV/m?cQjlMfS_(U<s<<'4jR>*@L;ATVn3CXe)?BtZ5X:1,8W:J<NT&uQOT
+%9eZ)@!`OsTRdS"X2rgHmF2X at uP(70!EG\C*?6hk[P8cu6N_Y,bR!P@'Rg.#Q9%;!K`CPqV>&*V"(4M+X-S91)9?W$@_l`Opg3,IL
+%'iES?"SnL-9aURA:u;<sb(N at rV^c]K\)ZmpaW>h;"9'6>Y/@%Xk^TKXg.uOt'Hgo!XEtMD8\!',5O\^AQLeZ"`$6RQo^R/uOA`2,
+%\Kfk6W9%he\jTaF_>]M=TBe<Kq9BZ\#+PEi*2AF+gTCgWm>rE+d&n$T&8Je>T=FdLBV.PCNsX(48BOm<^"7>77`d*)--im\G3-<?
+%dn%2fbRtR4&jh)iPsI+uRJ?YRru!k"$k;ZK*k$7;Hd+Rb2R6l8,=ckqDuroe"qb+r?M:P*oBaqQkcm"(I.ZtU9AE=QBlhsM.Zg*1
+%+\JgaXfP3Nf"f=301G>=HEu5oIhR#qC5\VAe at BKoII`t1TeV-f".!"Ko.F:`6OQ4lZg<%O<g[ok!GiA_M*uVA\[Tb:oiX#TEt6h8
+%>o&utPbpah]+ntE'Nih?'R::d+<G'^!:u[W&RLM&/OORl!8"2J=s.Drjp\9RI+V. at 1#7,-jM79a3qB(ZnSU1Mm&K]P4gPf&\`b1W
+%8[lf-LW6c!YU&e,E!EpV*eX2!ZrUd3-X[kZ4;TJf%CgHA,U>c`WRPe9S5ZPO?J9rVER'HHERV<Db;HR&9F7_Zkg&fDcV@;0J1![C
+%HC;PTV\,[uh0q,Q]I/Z'Dm,)&I)0:UZo^HPN'V[0!4uo3)k@'0Pe,FY,.flVi&be-<(GHbH*P"5NY4WU]-).t1 at T$j>59a0EtjcA
+%p!G3ed<?M=a_uMb*6]LC>gZ:EB8)YW_R`65[LWKeRXSDFb"i?c^(gT,anbHkA>sm&!K<MU`k7!eYNdWD7SEe/8SMe;3Lku>:-II1
+%+W.*-`n$=YpQY4!<i!Ale\`3k"ttbpG:oE7:7-^)@)qpMFqc3fI/RL$cUuBKigEIT/^G(\5Nn6V&._p92o4[&JAs_2eC):\?TXU@
+%LRp0EF?8nDT79"E_MoUT*Dej/b'EY+LQ^l2n!L56\9n$;VQ#4&ARq9[AKmYGf>kV8re)*]j%g4K=!3hWcakE\ml0(e<78T_L!k at A
+%&._UE/\g+J87h(8fEtPrd:EeaA#6Y=fhGY!=(ms?j]!iP5u@@s"R>CBems?/9$Yt+AWr$L`83]dmj-&8;X(6ETiMC9=h^I*ToG(9
+%Gd'lF2JqbgqZKdQmSlA#4.o'B2+LGnKIS-ekF.MTU^<9]8+<*c`&5]+A&[c(j`rp:agO.D02M/k%XP$I4"'dk=NMs(W,\ASJAd"N
+%HF"AiK+h,oRsDd'9XoUDE&*4*e0Y3 at 8ZSYlRaM:?8R1MlhA<<lA*ahK$?RMrldLKndJL()U"5P+JN]t"g..6-P"6=T'U?-B['e=L
+%D0o#3Bu]n6Z]o.X)W"$59EOP8;+[UP4 at VRW=(&:20T?9kek`$^fIHpG5S0S<%ks?+rctN_5j4`DU]eL^GNP\qMlC='S#-u?p,K)c
+%.J]=t7EYBqP+J*YZh1pF<OeJj5H^(G1.CMa*(b#V%e<j:T]H;a"UF1&SNN&g1pUUTZ+_Ou?AX0`gmE at bFQU=Clg(;:4LorT.tlg2
+%Hs_Vh(Uon>kg]BV2gnZV5RchfG!b.qegI;].,r,2Pc\T6NeQW(DiCub=],gD'Je$7`9uKS10mLN;Th+lq+b6SnMJf at h,E*MO5!_f
+%TU*B0)T6n8Xk5ZCI(>;-.Ul.Yg9g)S!c(Ae6!-DU8X[[?Ml8G1?dS\_Q>+Q,N8;Lr<\h->`Nqkap7$e);_PlB=+5euGn=$(g9FMk
+%!f*Gm\*m9";VFan%@;p(#Wq0J'mJD%51-fa]i0G&0=7i[;]lYsmt#k_rJ66):]eS#F58_GG?j00;l/Z3hJc`;Z=-[Vbe"s5 at eoip
+%EWG19rgN`;k'sbmN;"C]2T8(bg1SYFDkt0j=C-L>BP\1L)OpQh1E at k:rZai$Ek:0pRN*.%]>?+Hc-T*;7otZ3^p.)er=+*%K3e="
+%L\S"(6k=k4#:EqkWbt[[RC#N+ at kK7kj4XiIU#75b4"oS'fGG//Z];h>DF?&^e:d-r7\T.UE&h#Xif:Q'C[d^uPgG`-0J>YXU#96]
+%H"MOOadgjiTA\Jmc&K3 at 4r]nN9=mYQ7 at CU`-8)K#Y`ZIOl&S$P\I7A5>dhCnPScT'@]_?':I(&jSI-nq3jM`li]?H`Z'+)LN_[]G
+%dr"RLq\S^sNPg'6[OFhZVI/l!n<e%O+=Jgu"6^Sm!!JPm'`#3)F.eQ?S%H>o6Z:[eCF.W!<3XuSV=mTD^O*,$&CBCC[, at kJi#LfO
+%?84[kkHfGUk3[*.OLLq0Oe?C`Wfb[7e@:XNaHrl*P!aSfiT)<g;[;B at g,VJ#<Xq),_/D$=aA&PWFC at h[dfi2X\[b:r]?S9T06#pt
+%!(moZWm$b'7+RAGEe<qC)J5;)3o_C at V9J(=PhL1KoL^/h*=28)D$_CR^!bH;kr3eRE;&Yp#!*"@Ja\=G(BVSS"D6`VQ/@tbq]Ls%
+%O]g.2hA84Qq,JAk^m,V$dQ=^qk^fT at ZZ3BfcFi8B<?5h'o>e)ZD&mo),fhspdT0,>5l\e%p-qZt#J"j(K>V'-W(-hDX)Q_K$4MLT
+%TS/kqoWT*+/94pXVaaJPG&CAS[8f5s,e+VCs.&3O0l&t1cr9*jT.4DErb1>GB_+C^o2KQi#8P+XrcA at E1S-(]@U/2U!+_Ka'E@'<
+%H;Z1f"JKF$C=)ceX/d0q-Eru*W.Qh&f)%P at 7XMHP:7-$hIN"^CWO!st^4XZt^lX+/5t#7ke<!n>AR>^",c(aj2`,$g>p=]=ptGPD
+%2n]Iip!pM0eQFN5"SROf=dscd9")[t']nONF at BRF;C#G]q;oK>p:NVRF[))C(\O.]*8'[I9,&fU"]PM=?<LQ3NH"Irb#anjV(]Y%
+%L,ida2Oj<XO\^L<.\l=KMr8?"i_qX>9 at 6:$Bes\RQ,umpO-M$=Qs.u>3jNm[Vge?A5j;2hRON*ZK%[H4%O8BD>5]iPHOmoNCudY5
+%ku0aBBKW9V:+K_BoF6L!GpF-JiFCVppjSFXV=CkqcIgiS*(!]%D^c[#CtB6c2>=h1HIrRu[ne)0YDdos0J8&jh7mL;D6dMEH\."j
+%_e-#-Ln#QS<OlN$0 at e.XH:0;KFKNe>V at VJfo^Mo&!KTX`.i)]ha[2+>LF?Mh"#Org]V*a"$Znr[d2QE^3#CmGVrHBKi4_];_bVlR
+%O@<:Fe$`9fCpUs[HCH(OTI_Jc$Hu]#`&7'f;?^sV3D?;I9C3`Epi%\iL?s1BemD?,0.Q9OX\a&)^6<g&Yd-,F1m:Z):@5X,OSOe7
+%p8tE3QC]47^\]gW`(.(hKR/s<DU=bTn*(r4YXo([+!nik,5p;V,3B7!p#ZbHA8"3c'"l497+Hksci!B6?[WGK]R>4<(&YH+Ve/a,
+%lI"ZB467kXP^Qp8j8:,>C93^dfmp=Yr8u'_Q,*26`#K`,NM)ZWZ",hrA:!L^DTDB[fi([S[F!?9N4";o-Nc,l_Y1'*,N=[S4H'r:
+%\gI%9A?]J*GpQcq]?dTm.8Fo.H!45P,H?'1nnd=u>]3E+HguYGS-&g4*dIX^&1t$Q5e]h0>.<CRQaEBVPJ%jP<IUHm8P/]t+-(75
+%P$1$!m_a3daUpMABl?D5+nYo-Ek6!e$Iq`gk=BHWEZkU48uQZgQ*)+k at -"uDgkh=YF"-%^`DI\">0-M5C&Cbt<i;qm>,L-qC=J0R
+%QfF;$KaPI)@G=MP#U:krK8ri5=MINPmO at B2Ei)cZLK=Fif]Cps2N[LhaHsP8d]DmaUNnndQ47(P"j"#P8R8H[Sh#G=2RGL7n0![W
+%'72%fk*I!Tj]A"A"`#<Rota'sSjR!>FCf!WkJL_narS#a552UjB/((jZ"m*<1996=`<lXnMc<)1H%W6jWe/@!cBY5;YiZE;gCsob
+%PV4H[/+8_ at V#1>J^g-mtDG6:B;^2>7j8>llqTJ%*II$?Pj`6B6T%?1.DpC[GKLo<XhAAAm3\tm_-V at SM+,/*FY'j6P4Qkn0.JcsD
+%>!lNj9<8f72#sm*_9a6,Qo>RZb]0KfEI'Y6LTP8!P'Vt*L&U8"/*NNI*=J0G+A!m/j;?rs!__(pa-0K6"a[^S27IGTGFlf3X;nX<
+%?CKH8LCIL*3@&9:]+):+F$HN2E at Qe"7M^XrX7!+F-Ug+Dlt(o`^p?6`jXE#@5tA!eTU7J<\]?o6+J<G];\UBt5Oa8FRQR9;3`2#8
+%eP_FGTco<kF.,G.ec`20lEMS(5^9/,/.X,$SOVbq#QqAqDlMe=>bct_i6fH.;khkA=aSo"V,8R&k-BQ/?\(a())')=;cOE<.N+J<
+%W<JtY at -3e:(*RSVGE<Hk2tL$B4c/]#4HEfC at JGTb>ZtDGqhPS]N9/baUd)V2B<:\OU/5u[l:8>M9Ee;b0A$KNgUiA%VEN89:M6+W
+%Vbd2YJ!YY]Rkk\)OZs&dl^ak%Xi6f\e)9F]+GC)&@#+Zpp.1(?o3M.;ml9;W)%^h&\L3*::QF,7C=[>!ks=+tRhc3\P1qXnf,fb4
+%#gL)tk%a"aode@\62Ug)-bL$lg(St>KFq](>K9hf<CP.\+N\#$^DV.(Q&Ri12;L,TQEf83E0jd2Xnq5;k;Mn'a:AcF7'p1/#/;Ff
+%;n??n:GJr(O&c"BdY??-QEj[o^7J(!E#?*"+,p-kOW'5u:l6STW99K+[&tjl1tGI)dEh$%l1sH-1Y[#Aptb!tk)erILZ4?<\bi/$
+%Ht"[E*,*Y$T:DnY_5)KJON at hYBJQs#CMpW[o0<i at p5.=!cF4S%OMXM;1Jn7dc.Fod4nh$@4bn.i?na$N$;W/qC]7B*p.BW]mib8[
+%m,:mQ^`QTQo57LN%Yq#uGi#lOk at WD?Nb,;V/"6KZl7f*`9MA):T/V'<[L+W-Pe`&+L%"[RFHQ+uQ+`ZL^YL;IjFe at K-5\h#mi1]L
+%PoS(h3`e6`7^%ObgOV)ICY2uMod#YfMiX)0hf3Y at jTY0=-h9+=dg[(!$NPOH<ju4pZ^R at T!f/%o\6ptFM;%SHBH8:1([FC4;oL+*
+%U'C!NB?^3nSioHlougDZSr?"i<nr4p+S(jQ&kF&,4P;RX]8tj4'9lG;pkd*AX7/Ng,YN;)$+sW,X0L_PpVn2*]?W]D=qBg,>_.[T
+%Q4D=Fgi^A:KZ>/#[66G6!Ki:r)'Ss3^B at 5'4\LqB8#gH6rfPP?H8Q0KhF].-#rYh@!4tgn99cK$Y>Z=)U(XNZG<f;f0Si7+/>Vm6
+%PQ9'<]qc]-+2u3+:HOnqnp>*O$W?#5Is&n4SQ*'nWJ^J<"%hp)?`.9&+]WPik7[Yuq'dWQS/j at DYsGj=jSq?eR[@*+octMM2a1#\
+%YuRfV%77Pq5F1^h6#Ku[!U,#m7^aVr)NLH]+%!3]q7?<2-f%e27"QZigqcOZ^mPJ)O#;MI0?SNb%XBHqHTA4p;oiae_5rl8d-mH!
+%EOW=1PGY<ti&72#r:3#aoi_hYNTq4*K6mOA3+E7GbqUH9f.=t32=-.*\$3S%U?,^Ra8Rbr_LsP58$6GsZ2O6`8fdTdP74J`W>Dsp
+%i;Y(9D[MGkQ3X]/A"<FJ'MipF-QAoKHf\_;P\%4bo+K!.:N6-J$(]3-_=[QB.9*ipkULFK at LB+XM+^H!=!5Q7VGI/6DPt%aMT**T
+%8e,LC7EZ<dRYL@":N;L"^82=`9:b:(%%#d*k1RS0(8%4+^=8-S<>]`)>2]+=Lm2N\jjr[N5W;bDBPV!]!:51%]/d9qJYG0pc8EK;
+%_WiTb7h+7g-^?8"=kZ=mlg5\U`.e9LZS<M0"s+U$PWK%^PTtn:X0!S?Pq+tt^LpJiaof*UZo2LnofgrqnoH$,o^6>7q1Q>uoH_a^
+%ar]hB5)BhHhEUPUI'hgdG4C-^lh9'm=sWDSZ\6b$<&$%\'T<4*&ghZB!81&P6HV)>0D1aApO(\9?:IckS`iTKpH!-h-RW:b>kdc^
+%2gS"a0mi0mD at Dd\,OWC1FIA#G?."\_POP1=RN$M1)a0Ee9R0dcNu_Hd</qt"2(6I8d25DfDSW6Nf=O]iMYo!I#MN&hfd=26O6Yf+
+%;aVR@:C-gY*V=%i4nm/1p$NOTaR_SnRA'TDiT@>@4B[qB%-N9.kn7?Z#,4thcBAC\#J[d0+9X^^, at pqu7Of@JmT9Jf_N[0T>38T\
+%n+j"H_h2*`P at T3XhR!C/>=-dKS-tQV*4MYNdj.0Sis+un6&@Z\V9.aQ;or,"V*ktJ2rrW^C'p^^Xihs!dGD>I"MTC8!Ub:5d'19C
+%rZuV84l4H;I7hD`*1FoiTTXN2OsZ<jkgg6,TIr8S#.13/onfDTYQ-ejXpO(t at D/Qa<=;RT^Q$@E]uq*MgRCNnoVG9sqHsCO@&<W-
+%b\B_fFIH$!5;lUSZ/ijdkHX9u1e#^SX.$)[<1#FL&=U0$T6'"i at bQM>[K*[*OkL62`kJ;7^M:q8e6fsq=fqoJ77l2t!Fmc8F>C/X
+%.6?ERZ=TUr7_U=MYVpZ&fcL:C8-u5a\`=a:>g,K<Z!t03nK(Eu8Ts*-SG/;])-F\NDn7YFA/m#q>VhE'ein9%+jEL!0t5N0B]Ac(
+%N#Y at kl5oHRZllXF:]\,B5/"EmF8\06`Ic'Q)UdAJj>CeGp02JtF?#J0k:ZOpYHKafl&sc"c'tOs\MBt&csNd]eKa&\B_&+lQiKG0
+%onA.&.hqbf;G%3$1P-#d9BiJu>_?7","NDRG!1qS:(7Z(#^!_*Wa2_DotddbD'8IG+\Er?!sUF!^K;G26n:EmcO0&N+0XsqjVS."
+%=$iB*>k>=D2j5NlM(drZ,j5pl1gLl6QA;2FXnMO-N6 at G->FW%F\e(Lk;sP^)m0>[N[5:k-?NM]ZK at sa0c#h?ag.aF"R0F=`D)BZG
+%^qHb+cM]V)au*Ua6sa/r.0!]g&`ERN;^Eb&Cr6k/-g4'X^01'So3@>!0<S_*2DUUb]bWNA,loXn++J&&Z`"qX`:HOj+U?[,)k;P=
+%j]1],oqrfE5FI67:6L0h^TDaj3@"VcpGo2<=pnKsR-]-`?QN!8d'([XSo%d!a46]7luikB5)Toq`eobRn0*GV4QneG?OPC+rh*dL
+%<u)jh"fI'"5SE6MT!0r2$QQ"K0h_K#Pa#_S*]FDcVUio)Hi77kiImeqhJ1f.Ph:C_N6q7o0V#CD8,I1I-D[92.q at kIGPV^]R';a<
+%Pkk8o4g=&^O/:qP_8NbP+pm'VM4oUD^NJ*>$p=)do"n3,E[t%`dM,,jLIcD3%q_+C=\5'a'I#2.$p/e at o$odW*G8LqMuZT691ZXl
+%lj]lSAF;#lLEa_^>1]a/dr3qY?l]-cUJoV.q.VkN/J!RKZ)5f&BM&ttZ2frHe]`5Y/IVRVN!)$H27/tg$@aEDU"hs#\!&CZ$9^I@
+%.DG2akf<,5b_&=L20Vg)J43T?U4#fhc+Y[T(THtm)EY;=+/6jm^FqGAEgQ#`Hcr]\So`jFM(dd0A_;Eo6s>Q`F-RXZ$XRYD=@))J
+%dnD80D/#M;*d"IDh;IfmGDAO^5(!^/]ZMfsFZ,Al<aI&227In):2ZeP\Xtbp8\O8]r_?Qq9m.chjDC^^a=UisZ_t=Ek"%k[P3%O3
+%qY"$58KaZH>k'cdk7/m;K=]d[H_fgo#ElNTfZd_\/D\7VQ_3$1jaH2P-WN+MPP:OG*&"HG\<_G<q#X*[.s&N)VF!$h_W%CS])N'*
+%gPlj\9J]]XP+A2hc2r`n`d=G/01u<5>g(Nn$ZN0M*U`h240`GoI4f at h:(CI:",&e&f.k"pcsE]!TZ*b_@=39;XE0E^"?sRL$U_ck
+%nNr_EOSLTD8=\,\cfY;L=pgPh28WYefd!'miJBo,l5]iB/O`hhqj%Xi)6hM7AQZq'Y6#Qr0FY6g9>l1+ at Id@+=s$_6]ZY"FTdJ;!
+%:Anf#a&IT%A<*Es.s/9=j*`TRGm^ua0ZEL8lqf2+ at Cm;3n(obPN=&T."fLhaLOg:h_f>]YYneN,am.V59$^oVHTVci6k=?CYp28p
+%Tlu[:NneV9a+>=,Jj(SsnDU.#@/VdW3`U?0WEO&Z*MDkac at -DW[@kf*"&2Tg]<smZ!lg;0m[RL?"2NX_Op=f"4JLkR9rRD/5D=hd
+%S6JUVrlLM_gX!,GP`[&Wj;N8=?6_hi(>PN$RM20(rTZ]2ki at qE8qnd*6p0:Nc20B38j#XU3bSerDUOfn%8Lq'?q74V=7RK?mqrGJ
+%*H);c%Q7"*&)u:5N9u00%a02\X_PqK,`&[=cS+D1NC3>3:<CMC='Oh9);RtfO$s<RS'hE]meaV4F)uN>c]*oq-ZNO&GN/drF7`,d
+%ZoC3b@\WKG_/Y4_P6Yf*g8;`/5b"oB?Gqu`9DCp\iNqj;nd&_hEA)6Nc/E!q]*j6./F6pYCoRT\39='H-@?73Ed^u:$EAJ>>QO-h
+%RK_2Kl_HAF&fK>5._ITl=frs"cJX\E>]T!sk,5@/!P(S<PQH5FJX`!"Ih?I/Ylm=>E?QTkOsn/sg=+ at CjC]YuCfXl'-amC"#%Gd+
+%_h2Z6POfet1[HCg,^8n)1H.%9P'5R?iY0g'/caO'pdKNZP2euNj:NFeSh5G201`h!2b-6J.&J='9d\t="b8oD$^>5W$!sjg<!+.'
+%D\aiC)VN<7b\>2l"A.aq;/V$Ab>K]P$RV3&aj&MH-F[<!c6N^2SJluh!V>mEY_8Gf914ZPq(Wma`jr?3jRLKPE&fMc-/Y'E4sefN
+%abBJ2@#k=iNg'U#4r+4so5\52_E<gECQ;*=!'`'*&Pm-)\bW*<A9FgA`1))K4D&G)UTQ=lhGaFi_.K+=Dk`N5(kPiL at lmm7bLJW>
+%`*-Zs;q_kL:28Yr#@Eq6C/Q6b*+,k?h_t_^h_opFJ`WROP6fK(#p1LT*)A9 at +m1WF1]JpNgWKD$:X1*fPouAXf=%"J2/4D\`@>H6
+%=KnYHhU%%9 at DIaWMM(a;"0nhehf&H>O(_TM,oq%8pfeN@$0GfYB:A3k\Y at GbEV+RNTb$+Mi!b;g7k4mf`RM^k]%QctgA!Z/3"3Y#
+%WH:[?>b^IXTdZ19?tLnG*sMJ`8fqX5>eE3BIF-WmWPBS4;a)J*O;fJ"?7_/-#!BOFV at 1sgbJc.k2sB#`UE$&kJo/VS<RO+"lJck=
+%/eK0nV[ndN7_IZeG2Ke_2N9.T<Qr7Ma+O>@jduM at H8pF&cB&-UW-VSXH&,-&p&1/Fq;.oAEd:h35bG6L1RsO+hW&3im4PI90YFBW
+%#/(!,+sn=?kAgFQ`[n27o$A%llo+UOk!8=q=f+VDH/NkA"ukYZjCB%7I<po&>;o1_6js1Yft?F^e72A_T\JPe(Uq_DED]R[Qfn.d
+%p(TPcHot(K]U2+c[@_9;$?>)?AB4WPV^=eW\ZBCnO1!#0bqh=0k;X!K:T&OK5(6+K?:)1(-:rp9ldp2oD[Jt5'$pEt7u'?&^+]pT
+%q^&1U<&Zj&)kcds0rYhCQh`DS31iC*e:Q[]dMDsjLZFVrkh_C0$7tEG>_bPb at mUO:he1$WpD1REk1CY$r`l,iA9d64[q_KsoF+[N
+%W=ac!^Qb at XU.<XO$G856HEMBfC.ksZX at _Z/9 at A)mF8;1DMKQ<@E,6nB68>P:<%P]Zbb8'aZC"pqk%tYg,N4tJBOrG4NA)@YP!/\!
+%(C2GDG<OtPp\ZqB\^=#%E*)f129nmgHs,W,U,&2c+nPNN_]m'"S&4g1WYL??Kcu(@CY_ZG\a"Sb4s\[W/!lkRAXd9S82\6ECT>)F
+%^?9+ig&d'g`f`Z%n62iXc*'h5]'(H:\4Y<%M#str>+jib&38A;F8&i.QK3_WZ at -4YR@AN_``i,A"*nfpRMS_=LdDq."VZg0eA7)5
+%>K<V9F-.r at S`m#om0?RNA8JT;D48ijIsS#<gm_Q5PENs3[FMpbNSf$HfY?6HU?t86?g^<gkF1V+n2#Z\WI\fVdC8qKm5+4]Z3H.3
+%2l36sP at +HSV\,\BARgcMeb1A&#1M[+D6+G-HMmD"X;;NHA*a+<<p]X$QFCk-'AMm_jVm54Um+'qrEN^$9q_-5ojnPP2/[u46Za1o
+%iB50 at 4YAahH!F>Da:6]GL'2:W0O_:_Tf:n6'q0qP7oO:%iZRDe at 9)"5gR12Fa#Z;i!ULWRfQH?^"dQNM=*jFCY029lRKIq9:A"9(
+%(\&]DjS;_DVA&bD[&nC]J)A!DR=s.<cI;(.U?K-nWK0pnZD(Z=Lc=')8#%?7rIKr-Q*^g5aHa$kc$d/:A68?an%$Ak<1A]%gL$hj
+%ilaApfd(U^KLT2=adJn9HVstoCkLT&c9qOg<Cqd$K9&Laka8K\j\3[uDF)b\W''_a;s\RF%4H>n2F>OAIQR(l)I14iMeiMF-T]$h
+%[qrG,IJi/ki:LaR?>JF81hBg/5)!(8/G?)jP4YbkH at qQ0:opt;Egb')hF;*$Z'%.u+0Z7KW\nN(&]D at 1NSUOd!R:**G=k^dYeX.n
+%6A%G1QJ4LeJg:(>G;OiH-NP&cjJ2uq-hF3%q3$J7@&E94`8Us.MtBKQ6K::*+!l2]-RFKTAsSD+9IHn:nlHH*&H0*:/3H/#?;#_N
+%+i(Q]cf!L_"B[=iNVn.6H_OKmVjIVg#_k/f^^+#)a]0O7ctRp.J_ZTDjhU<Ef\7b^R(AkOM/G0Jh(HiBAU.-h2.e,!]mS*Wf-T:$
+%3QRPlOA1bJbM`p".I0n_2tur%rlS.KM!$!OV<%gr'"Lnf,\TpZ"p41F4Y8OP7(6BBj%K'M-XaS.36$e;6*>N-/bnnE7 at 44jbcX\2
+%_(tbkFq6L!U[_h"gpQFI]2^8J-qKQCetIuC*CVS-;OjMrf^944Z,pib(d(R<'92s%cTktEX7s<);L$H-::PNUnq8(QCi0[O2s2du
+%IJTj6WsO7Rg%ZL+RR5nUodNe.?QU+bknq-nQ;4%=Y>i3&P@/mT[Ji at m@GdDicmYl0%-dq1+I&B<)GP;n$O`CcY:\(QP,#8hkCr!]
+%_Pe7=Z!s[M3NTdSU`/j]D&!811#%/R9s-PoM6gH1+cMNk)]7*\rI\Y2j\Ft)P<X;J$Gd'^%],q;8%1/o%@YP<<%7=e:+1U.s4Pja
+%22',ai2u74*d>HFqJmQ($KRlA`n)P_Er5j0Rnup%o'EWEb?OM%p)E'Pi,.KJq!@%7_S')blUQPAB9J)LJ3sgNZ<mF\V?[b"%q17@
+%BdM(RTb<l0Qf]>4)[[:iiJ9hrYPe/b!c!0:a/DLPIehKQFe:Je!4qnfpZZ:4OmoY!R2B\a9D^PWEaA&.V+AIU%4#Jp>YYZP(L*3D
+%kaOYY&n4W5J[,"I*/=Ok6>1+u`3hY@%(@npm^17P#m8s;G#N3(MC3e$\j7HY^1<>iFb@$e.8g5:T;8cnhI;T:2A-?JAEV]ApPbT+
+%Fm_f^8PsPuPFbZ.ZL-69^=R5RAP!$In&`[+4OM$hk6tr>9P:HCIAlMFd0%cN_[GG8A]FSl at qlM7)'B%f"Xbi`*V,Ajk)86OB&W3d
+%)n6e&*%-M<$#o8%678XsMt.4hQ*fYYP6p/=]jX#NpC^&nfT_Vc\/GY<)C,=;qOocoQ(9sU at KF54<l6g1<\.k.T\ks&4R00HO<]#m
+%<69_4cI_W,DBIoD-58)/dUFGAWjTgMUF\D2b];UjZ2'cP=3>">GXZX5ac'Id*oraY]]O6<)S.J%"Xs[IO(\L;"Z`t\o(/2Tp?n-Z
+%s&dSm&4Xf*k[l&QpYnUr>A.23!Tr:+(GX[Udo_N`(>IZ=C7fpF]RW;u19mgU#40:NN]br)h=HpulJ/fSL,.du3CiT$WnT]BlKuup
+%@>uXHI,d]9I?&Z#hYkt3++%L(0t:]V<L2h!Bd_I[\h<((eou!D>4BtIbO_C*n:&+Pjee#b4WKUN%.8EHlhk!^Zf-39R.NhViQB>!
+%PH<MYg!I&]6e#Z(#pd0"<0G$6(bHLFW4gT55<4N7)N\%`433SNn]eV;*FVKKEmP*jW,/'S6++C\(m'?[_8gfY0mcZ#$olI2#:P`W
+%?E#iNpuBX$C"pb:cZ64tWq's$<8\t]\TH*'3D at _Lh9XtgQcX(8WRb>G)"0^s2Hi,RDt5\W$Fl'N-=Q=J.\ERU7_XV!VZ(^DYAOY\
+%:&a;\RnSqQFFkVW#.A570O;uCCq8q$p]GB"mFnHNAEhb+(>m[G2;Z07oj4ndQsrF2)Ji+7!I\ta/og!8Ta at +@&](1c:88`KQV:se
+%R%!K&r:7AA>2Z3>=<@7MEif;gs0<Z$GFes9VDM%^^L8#R-<U^"7fA7Idi`KXm>F+ at G,>cdORob>[0kQN2>A[\nCi(0c4\p^%suA7
+%SA?+\$\H-3>)g.3ET\d8/;l`9iA4kYfV2'd3"f@(YYRRD--NSc]M"8M0tV/C74qbL]-O11V9=QZo&3L9jf)cbK2SY_*G9?FhVmI\
+%f]$gmMApF:RE`[<>U:oh=$`f0/1V<rk'lHFKEFnV3cD at IW+:C.Mo!m0 at XM5A9sm08M`E.<kF1=r09@`'RJk#_,35/=a7V7``Cdt`
+%fsViU]i,MQg5?0V(n at s<%bd'HAo'XmdI\3%R"'ifQ at e-Br*ONn(>@[sX,8ZSBC%hCT\OX:;@AlXT9_$05em5Q"I>9%f95^QeEBSS
+%8Fg\^kV'#f6a&\_o&Zm?bE`sSB`Rbe6W2Q8PF6."ohV^b1Et/Cat'Z4j7crig2+EaCuAAm/NU:e]ID%H0oVc at iCEe;^lLNNk:8?B
+%%p?>Sn`:]'c"n;kN*;FA`guC9`RkuZ;fa.Z-7=3E!P!MdUb:`E(7Af4YEBc6Ap4HLr=U.^I(:4pS&3Zs!*HqK,jVoedBuaq0"?'H
+%ENFHFnr.DsIDeC/j2AJl86_KOT:X%5pOq=`'U[!203iSn.q;fHWgf''%l)uoS;FO&\dZ,IP<aW&;j3bZN=b-CCC8&NLY.M\q-GJP
+%kf"tRY0/k. at gLRrD3Z"jJEJB2fB/gh6o?CtK-6'%^pa8 at Bb=dM%t3d<W0R2Egu)IHl'$`Y,s<0#(oEpRXqmPqF1\ep;OAa_Y0X)2
+%MDCU"p^5="/[P`<lo$`lZLS:Q#n/^2!@D2?CE3Qg^B)_7V-Dn7Q*:rnQ\TV,Obf,uU4D(iSr9sO]AD#&"M]p9KWR+(lc]UM,n:]i
+%(NZ&JVZS>HLYZ#-aWC'[3m6X/P>&rnWNrK4K8c8!TbF,g[dfTI;A*th3uC9US4RN4L8t[jVsg-j=Y5u7E1OqkO.oY^*ngkSX*I!n
+%(,[/8"D.6"a_p;=#KB]u>T-C.4n\lG>h\9%D1 at O2htpA!;!_auN+GKqMX]1i1]F45)$"[)rPK2kFedEnW,]#!<8.KunZSN9]HkP1
+%'u]C5SFcUq0I>'NQj%?0>Qf]P.9Ba\DKZP.!cgSR2jX/P23P at cDL-eZc8WH]$)A^711g?>qj<&6'[c8CBorI:kL=Kp;Jmr3;Hl)m
+%KM>fj.Pg^;<2QQdU3SBE1a();8Pu%i,3e;X'+,3p;P+p"Ce0a#2BY(h$K9KAE[9 at 9pR?AGh.>X-9:ekM92U5h5Y'R8j4G$,qsjiH
+%/cW8Y`t>]X*[mD'F9jX9!CQM73P*M]@:AKFE>!OWU[YM/KBOsiKHMkd5c!qolo<5P9sB"9]k(IuQ]Qc"DDuPT/F'$k^cS"Ia_,BQ
+%/=EbPrNkbgOjD50qj<f9A3VO?mNgNJ9!obBPj?Ck.3UV>2nr#!7P!mg3?mQaYVmWN\Q[^3:f[3OUHIco"k5115EB>R9Bi6JD4nlY
+%,rZMelWnZt5S%$jSn,'18s!t7,,cIC2a>D5WL[teVAJ!CTp`Cn2)^A:C[c";^K3#JM?RTVGtWrWauO\f@;Z:3n5[W#X?5gf4B%`c
+%LlGnj]28R_Yp])j?AEm9*7n-mpIumaO4kX,o`[E+-,?+:X^uoUiEu3j.sr$DY$rH7#P8u3Pc6?Y6$U+lfZeiIb?TPq^c[-+&]s<`
+%!m8 at nnZO[ZlslA1$24U;&4 at LZ6-u>a3,VsC6MG%l7d0834e4,%:.pU.iUl),kR&^+I8Y$WIo>c.*gKt7)bF$uJVHqb_D\4l[<+=n
+%($8boD]=#]^'<N/*seE^YU0&]VS-h!&%8%/$E^^Qn;g:(nN3Y[RJsn'bbucUqD3,BKPl5gWDP''W at O*RTB\crcOg,$X1a\uR*\<1
+%OnA;eKOF[HX[,:2JMU^fqg(9\8VO/B!\%$KC%*Cu:F3n+o`O'@#3gtn at 5FtH-fPUZN[+to_,,&WBUGl'gYB7,2%uhh]aj\1,=-4C
+%iZ?:$hRNAFp13T!\*[0N^#Vr?gq6u,&Z8qS\^LW$T&,_OQ>=Lp+Ge`,bm at 7rTR.P%h[,;D%s.S]Vg^1J)MfW.Cd/7k"'oPd=XRM<
+%9hE>sbstWVs'%L04nU>/NQU'I*AbMY8)e$NfNB0uSHe17C9L1Qf]XSa!e5N*kht=JQ_7R+Ok+(sjqB)\f&&Y4W.`(34md,.94S?8
+%HO]9'GY4IoIX`_<Oq]-l9_iiOEWSlo"kr^l1L4i:K=_hj#d4gAJG`0%XZgl"Fn/I7hal_X_-b[`H*u#1:j?2\=$,]k4;6`fOU6[G
+%"m3G%1EFrd_aNQPlqU!>r.iO`e:(1K*7:=p8m at 23.1\;Hh$bWok`JuFK4<.qcbWrZ@'5>U48J`GSp/5XVV:f-DgCkjm4QprmVEbo
+%VX,;b;mp3UG)pn^T-eQ82rBhU!aGFl+m6_r4n.=BQSJE_aYY*5n`XjqdPjmqI0nIu/5=].Tko3SZOCE?#I8?A$W^PU1oN];:VSG<
+%T(K9)#R8][0BkHY5;QY)n4L+g+hlWHf_&,4TU5q,-?E2lq]HFi9U1Jc"\QR0N_4=`+<5I?AB#=V>$'VVTr0%'V1@#*3)tedm4>(T
+%-AX/]?2>S@^Qr+\dU!r,(#(RTAnNP)F at t8;WH'c[[BW[/&u3uO.$k6NZl)Y&Mh&u50<[5f7HuQ7,tGcsQnWgAW=;^5>9:_[_jp%@
+%k)K:0,#`$?@a&tr\@0Lgq&?ka8K)3'q82J0bcttNVbGCb^=^u)8A+YXVdXdtIOpQSbnP*,E,4-;#;04s>_:qSZ=8LDc7s+SOjZc*
+%5L2)tfKZM_I/[3h>I[V[bmIrS.FEMf)EAXd]1r9o#gT4Lg-3*N_ZJ^Z9ksAag"?XLWVK0#C2)tn+F]al87T3+c"\S at lD^3cLllIF
+%@Zn==P+T9"/Eg?^24t`mb at tInA$WKgCuGY`#2SdAfdcaR6,PA+n[1(Z^BR/E.QW:G**b`BSSY][,Y65=IL<mQ at hDFYhYQ&.`+EL+
+%e-p_XMT"X95]a$XZIoCd<:f_9!Xk#[]MZ.&QXq3>YB]ei/?'BW3)`3\o=,g3Ih5qZ>bJcRhR"aOa/cqDcK0Y,3!%num>e33N8W0c
+%c]/Moo9mdmBD[\AAk`k at p4L`eDoFfp?>V)'P1.SH,h@%`G=_YF/Ii4W^a,a&#lo9V\,o_hh+&SNjh\Ef6YS>..3H!LfT71O;/1+L
+%!jOB[70*fe[E,k>AY%`>W7D$k[b:d.[BM'F#3"TMYB">E*-h7CJeDGb6"Z)a3-Wp%!53Pj*@MY'1,%pSpG^&kJmV7T[['GR=VX[0
+%G%neBqfdF=S4%74($)2g&"BVjOD=>n3M!Poc$E*C_6:D;]Y,*>bHu\oZEkf^fk=#D4u]R6o8g;EVhAp4NhB-2L1%7SBN;m`OqRY%
+%4bn^6eKh;<A(XT)Z`="K at L[uknd."e2s;M!7TUe,T.Q)#9%@b&j#sLah)sl"r51AfBoAuS@:[]pB4%kT_<n5rT-29U0"T8-,;phs
+%YK:>.<)D^?[iLd$mf3.C9RiLUQs8t<Tm^c<elF[!(3NFEn/,]%b.FOG5N?\\O_Xg/Vfg at N,ZaioP=I2oIkRg^Rtk]e4pp6Sr)kIc
+%-6\sCEE@`J!CK-P6EYe]H@?BNm0CeBHO?)CiTIp;b=.UI?R6SP541F2*[s<[`2q>kIg6.qHF!WFGXDVk?P4a`3G"Kh(WF2g):kdt
+%:(upL.I$0.$]u[$`]c5'dW:f`UA)"^r*WFQ"oN3Rh_Sd;e8rIX<#Q'$5MD*%GHF3[4bda)NS7SYjG>,`D at It;_/3?rk2#4r)tp?I
+%HpHOo:!;UE=k=p3U?otn-'&/7]Ub?=lm$sI)es81Id"\.S]]Fm\_JOfB7&,t$51M6*f\sE(MS6DYcSi5>#2(_%S1kSI2"%ZiHr_P
+%d$,Hp6!Z-&-?W80,:J#gJ^Tm]CmQV!"jZjZ2PF*sXg't6&"&-i!nWVUR"B#7>+)mhUR\Zp:'4b,/`2i)MBUEB+3Y:eLi5_C9f[RS
+%[mYe1?d=1.1)ZrUQkZ%`@U at 7T:`RSEgV."r+i\E:e&km./_pAtQ:d&2/h;7Vp4]`e5o2e>k!bF,]N?eud7/'_T!s\Pmu9k7/*Nfi
+%-gS>)-a,Y%5XYMW$$aR at G#Aj6a#T\]MBLD<$+<r:flST;*h^"[#eaJROfC61T&^E!Cd,Xi[>`7B$DFua#u)n<\nNTRL&kV at PTQ'`
+%)a(\\"`1c3UkAJ'H?Z+RM&+?\3OLqc/KuZXlC<Ke=\.\rX]=DfY^%Oh!W)#4nXu[8S8TVg=3;/V.JHPlAu2L!=NRe/H'1WM<\*G5
+%:0!<RdO51`X<$3@@WJAG]d7S=.?TXGmnU#ZNcN*<g(LB$,MJ_;5#q/h._+?XEZnbdbWDCXq3$9MC-.3aJ:;P,jkJVNr4h\RR#M/g
+%*o8o:rfUe#I6'm)L!%k2,2kB:%_aH7-!%)&JdF2GJ!B(':),GT+R`8^MeO1V&CePQ5!H>@mfF$BYKjE*&XR;#7UYCK:!BDF.FTeH
+%O#IeehH^'GgYA;a<u"0<EP?q^ilUS\Ui<c!7lZ(47BS+gou<7*Yrbc5,m9tjR]ZemnhOMlSNNIYP2Ft/+YZ+uAIUZobPbI<RqKAn
+%e+Sc`k>F[2B1SOu2SK:D^8b$K;#qqE'HDI@?Q`]mA[^81P",lA6oRc5j.3G,\%C_"p"l9u<!t1K(;sJ6h!i1(JeW!/$iCcmLrQ:X
+%H)DJF;3EtD?A:"I*Bl\1Ac?G at X>2)7oJ.0$hKRR,chTL2*>Zub5o_HP``@P-d&c:![o2V`?`W&uIqQ2"m?LYI-1RZ5%s>tfV==Su
+%*V3025g1TPHK?V'Mf#iN9JCV.X+Si5<"08Dn<U)/5#C5G2s-=#$os\NQR!`:Sp@"L3&Z83HNR at _,Bslol]bckAkD0_38\rNS9c&P
+%,7.6.dj<j(6'\p%OqIc(iN%rt:ioF+3VQ*)32e5(aE7VY<u0Nk6cjZs at XZpc`EOB@'@j?>)r].&M!JGd(\D_":fh8k.8W,niE<8?
+%#'k+mm_jr8Km;I"^)+NF93T+Q-qA?U!XABR'j],QB&s^2=4iCXWCc7Pf>p)5&h5k_q7'iD^rq*X=cMl*jk,fC>97GV4@/#=TUq:G
+%PH)9h&tN at 3"a[71L9/d`rZaL;g[IlhV>d(L8%MHqc"A'GcjO!2_]*0W/[a.[F!VA%nHZuX8uB>d\!>K008bcK",Le'82L!GGt6,Q
+%@8[WqmaSI2T+-rp:jXWR;?[3DSI)[4=qih;"l;fWhR89CKpAN\;Fg`CS_1]P[,mT$)o at YW="dY9)"%9#1esTVV!oAZ=;dsk8L[6=
+%3U%cRe?f&c8&h(3Qg#I(?ai$b!(hXh_58HrpQKh#YV/R59XpLTY7DPrn_(8f0UHO+Q7[pe.aN=8Nlar2/"^k$5oZ:G0&bd0)#I&>
+%8q=(!ArH[XW%kJ?@.$Stl&86\Wu=arcP'7n5!oQPX8lr:.5M2YVCsFU0`o.S(]r9fGha.,r)^:2(&0<cK%R"JIN43:.GjcahfE/(
+%Cm$TP]3*>_1Bb<IWO7 at L/!n;@b*AT\SKZ`YH,ZlV)Q1cj11`?/5-94/0V-AgP`YC^BmHTV8.=Q3GQ#'bIKU[Sr?cg+p?-mf(^k.;
+%$,+`S-<YO9 at 3*^Nih'"qHZq+e.)0VG1\e>gI49XZKn?QDT9_:AUk(Vj5 at EtV7Pdnu_&H0C("faS)pn4-qE`]Cpr;:8^4b,no<%p$
+%:sR$SYkV,DYMIl(+^CFAa;OkrSq0&C.iRg"F.%KNV at VK$M")V\ol[QEfKF+N0AE-Q5:_#O`4Tu$+?:2W$V at Im'pneO/g(7dDf-\`
+%l8*WckNNie'b3YY,Fj.@"Rpm11eiq=F0KZ>$&.Qr;oQnk`0t)\9,>E3=*]8d>`<ChI;"2'H2j/`_h5(@mu1V09[lec3M-q6feg?*
+%_(+L!7(q\TBt=L<]bCZrK]WG?PP!UM!&e$q-)[\U/L'Td]*<D"Q127\LJJ4l"l*&F3XYsiB3spHUW$gcch0^=Z:uBEn=+l976DP`
+%\sNO%jctZ5',+;2!;L%chE:NHlM2I at kR"%q<X(_=n,+UT#:7,!)u0f>Cm+/<h54Si3%!_B'&);?n0*eq6J[<cmoccRl*u>ucau9l
+%Y<VUV\fK":'#@N=%D5cPC.1AIB0./Sq3d.i!T<<&Ckf6)Wn'*%8]V3;#e]#7kJ)5`R/f?0A#Y2S%Xi(S.qs:lIAF7+Q>(:r>n54[
+%NYHMI6(@[J!h&U"Kp*a[jbd<,ho55GI,d]3,2%hk)AmO#r/K;DI$/LqVeJdZ*nhJ\9PeOu3k4YZF0H/ZSOd.3^!OK?1:usBb$c8a
+%8u%T]0Ln>Ak*7/<0\<O,L7QgO6A#-:cYSH_`%)f"5C*q>X*$OD6i3)FN";<842L\:`fI=?*s/\rV;fr(6.^Q(%H'U%E#8FhYS>`Y
+%K3FSuZB@@4G.Ii+e[N?3TH=!3(\';)9rR'/$3OtDaC=sX at C@Jg at L!kdq]8[2WRH("q3n'M5EDi5dL:[$kU%&,7\sYl^:@FCF(I7c
+%3`#J1%0#U7D(QY(aSETK`FlI:Ep"oG8ZCQF7%,>G]+KhP9m2JE!(J6sPdFQ?M8H;RTItJp#X>/n(f5Ta55Uq9r#9HPfuLKL at 7sgA
+%>O9dS"=u/h\#J;@D9&Yr*-B^)'M/<k'S'%ZE3sCek*,/@j at 82F-TN.+<Mk7h=EDM?"cYXaH/n7f_"q/iSI:"peC't^Rub5`NdY\J
+%2YD&J)B__8mlK+RQeX>C0lY=1#DRp3 at I@A71Zi;g8%O^Fm^:>On(DdKHiNl=07fV[@?-P/0:=-nJ^iLBm:]4.OSBH9jbsu1XsEt]
+%NN;RF7JaI8SffsU$7!Y^q-Dc(W at d2(jqF($_FgCq<FsL,8I\fQ]T,45<C7r/iE".sE<[$g0%RA at au%cXIZon]IZt#&M-Z6@/scVY
+%(j2&F(F#\b_nO<Bg?Fj3YSs"P%!r?Mr3Je[Jl?j&^\>,JI<\Ir;X\NFs)R:f-+k6OF5,3SW>gBe*2oOYFW-n0GQ-f7L_]CkKJ0Y6
+%Fo"Y[*u$Y9Zg78Bgo\YH;s!g?CYtJsb2YK\_Y"SiAFakAM@^^urI!e?k/.CoXHVOGF\.cU<cd\Q9t!Ylr,CB^a:m;c>rQe\-#!+G
+%h2bE(V at YiDYQ2FPE!<*crZk!-0C784Rgu1'a_F'>!mQ\S!Xb"tJ0Y,gZJ:"oqmBP>q?FRkj%_%YXi"P8_:H]n9*MQ4;i<IT9bcCV
+%=fVcuFIP_0>fS*LCdj,o'*=r2qh"_l+A>.W=o1/VW9g"+55DGYl3B+89C*LfH#aVW&sDf?qO:QkUZ_=iPu9b3YnN2Fn&[^t.]p4r
+%USh6Z9nkRtU3>GA8-0'G,I'6n at GsORq/U at pCWB\J9/Vs<Z#QT_i0uLiilCqm>-u1T6/Z($=pDu8/g=rJQh-109d4NTm6[Et%u;(=
+%<.2C]s#$Y^HqBXQ-Y5JAlGSBTMs<j7b&musAnV*?jBD'j%r@=An;JmKHaZbJUA7k(Li%M,3.#_!0Y_burH%mQ<igpB'<hRCMSA&\
+%RTfCS]<qA_b)+!3>k?:F.rdI+bBB0&qPF<KDEi2L/I%AqZh"g6p1I6jUmdIk5]D.T.:7$ehCCAg1Z/s->N5cBh/\8#Ob!tPUlN<1
+%8_UuQZETWfKYJ)&qu/08ZTRJ_E3&`Zk5I\<h[TTG<1G;EDj`X4Xl1cU_",Lj4'r2udc>r8Vj7_bbi$)tR?LUq5HVYs"`WBiZEHqn
+%F0-EsQIT/lAs4UKGq5irEd<_DC#LG]5,[L/b7S8Pp3_iUZ+24!#86ITbVD%pQ#c56jU+l;5>spUn([%WV4MqXe0ZR at Fkdh83j/kB
+%3@'RX*;\0N_'Yt$EoY:pWp8V-Zr#W[,mnu\=/r1.P3^oT3OW(gER[CkW'$EleE/i4RcA#Yqu%pp1R8U^o3u?<:T&\].^S3ASl9B>
+%7rW457niq\jK9c!2pU:"nnKiMZ(.6-%Ap%<$/Qq%J+ at D14aMq(j>\'TV[R%qG11#;kgG7)QnkijFS at X]c0K-",_h/'0R>Hf^eQrc
+%EEq7f(pF3g4uE at O,RXjh=J</GHm;WbA_#QE<ipEg_#!\;,f8E-6d#6jI=7PCgQ94G@&J/Pl6_VSWs?$s#p!f=$IiCrcc.r^\0C0F
+%4iu^Fo3XHueAABlT]NL]RFAIdMhk>E$*HHPM5_;S'CNN,ZLa)+#Zqm_H4k?B$.a[*p7X5]VEi7'NT(hjQ>6i7j,=2gdfJGN\iIL@
+%(UI>7Z8Cg![TdcN!YpESBaS5P2*%^!3W;WnBY;(h`+)P:F>u9nS\o[t3j/41YiaGZ_^jb^P!a[mGJnVY8C4h<4?TO6pb`<6T#aI6
+%GSo<B!6Fek5o2Abr9oba2#&!Nq3uFQ^@J]#ZjVL=nu1oIV$Mjm!dbHJn%_hE!QSZR8W<6t/Yl"aa"@O<E-olY47IfA_1Rm,AcpS2
+%)%TYmN,I,!=ek++4J9n/C(&C2Wu5+gDC*pK1!<EhOb`=rS<;9%/[O#"RG=q$]^(3qY[aaj6V/_f#t,Wk8i=[ejjXgT3=qYr[ihQ;
+%bAP%T.O+[N_=Ha`H<RPdeuSD?TUh;ClHqTVWJ;#e(BHJ)_Xqi=g at BOPWOlLA$HWB9"E,g^rc`MtbdcPR(X>/[L2.8I4d6\L2h*D>
+%o<#Pf5Pl\T*c'\UT>YQkmM+:i).uI?#4`Ejmq_Xm[8RZZ2rs.e3F!-<<i6R2IWj^2<DI4OB,<S.]c*n#*1H/JTp),@*lMt,L&?s/
+%R&dq=V52\dUCT97T3[LW0WUbQT_4SP4<N7 at V2GYtJk2%1f(9i<'iup$W at aU!I^lDO!9BI-'EtY]k9(XVimnc$n,=9$-WO(%&'D>7
+%`m48:"qUnkR%Wd!lg3u^XHr+(R1DY$>#STWbdZ,JW\a&cJSRIbbrJtYq+q*G&ckbh\Q#^"@%E/#\8N`^)]p"uU5P%'Xj+,^W4QCI
+%WB]!q7bp5HJl<NjP#m at YRSZ[j:2b`N`."f0(3W[joo_ at B9!A'^jkJtE%&OKRh""SSOMAOXO/D-'f^-qPfr!A$hJ at J!U-6hM`KLan
+%o=66&9XFRGkMQ2ng(Uf&41.RNprttSb!sI_l$!?YcM)_'pJngKa<nmD<a2223&Z5;&[._Br&[$_g3Gi at lHBiX8D)ik*>%-+1dSY`
+%X at s4u,72kYWnW1f9O\1bfVclCl-Z1Z5SVG6Fg*eES[,dI?i,:46qFIM`f9nPJTR0)(V4_O*?^_7L7B/E1Do at N-.KKsIO5=P<%4#'
+%e`308hod4"AG%2m#&1O$*@dmWU,e at XW6(6m\Qk;&&m7KgFhRV-cSu5CIHJ3<Bnq&X`,L%pEGZ_<r9RMXgfre)JR:6[PD^hD2q$'P
+%ee[dH?'[NtTlQ_t<E_VJA7A"LG4D,Me_'_61_[L3d,G9e"QF8b5XjLm\EW>giqKof`l'(Te^GU^H`>EU9_N#JO7\?)ak,fK_"t?W
+%W6-Ot1-;T*H>TW*(mI70Ud9.@@,_&ZUl7c3iX)2J@>KBVHJFfP5(VkdK1):tnt8iTPDh at P!,)+KE'i!Vaid8kYX#XXKJP?PbZ?Hg
+%p-`Y%,f%q^W0EZu#=H"`%uS:A*2Y7BcTmi9_H]@`m4)t,=J"pWmBK>Am&9+>N53b#]c>->/0>d1TjQ?+\aU\0L.L9fMic,>_>3k$
+%8Zdj1c$KE4Yc6n=G3.tObd6gMg$PDn&PWN7-c\S-lpD=nigM9djC0 at u>>hoVI*Wg[P"Uu(2[mL8ZE(eV1qLqcoG7uTFm^+OQQLP]
+%hL#KMl$6HFmZt4VKJpPiGo.u7Rt9n&ojNLuc!>lp3F$YoVQk9kP7qJJhf:$2`]naD9\=OlV!ls<,Ep5"KN((&W?=7aRV?Y9Y\(^!
+%S'LMOROUO<X=s#'VbrK-$4i\_"ku3)f/D)!^a4.$iR1NlM7dj<oAh4k8r78]BBTrX=VR,^Vi$\5h:>ru2;T0]@GTS-4L.E9I<L"$
+%8\b'>kVqXRbgQ+j`6.0A*fS?bS[STe9&FBS[+W%"GPYP6\&l5mG2%'Ro,n]A'3brM4V\6n45^gengnk-o$"2Zi at lO_i+(-VeZ6':
+%DjKJD0i$N+Dj#XYCO=LX.J^Un?o\WH$*id?B?o0OJ+r2R'jUA"5ag>b.<G&&Iu at Q9q$#k[fG)g1fh$?AQ4*-*$X!Ff7Zp&O32G\,
+%O.[;QB5uep;ZcLlS<LpbgCsqFOh=j*<H??IRlPI2;bBPrC6BZakPMQ)rpr&=<jXXa2*Q\BA7Q)oo&l$S!(K<96]_R at n1oB`2L*FV
+%OsZFWM2>$WdD8]ic:LQhW,;?Q1m:cM6[ALgM-6UJEa4(<dM#f%gFr7(W<a9/S0SV9Ph&;Em*ijB2VdJeI9D=GU="(8Y/Pmp_d]Go
+%#?>C^Y\^IT+t*Q"_ at D8[1W5E]<(ln&RgoEmNh2PQR)82_*j4r)MkHG:Ik>5c`qm_tH?kC>$QHNg&HA1Ok8!T,J>RaXg\@9=gACF:
+%.9s3nKDS,qQit"?inF\3jqfe8/VHIZ8KZPbpuo?NdO3Ihgk3&o=KB"qaFW4J5e-5PI^&6'abp!Oi%=CIQf%[M\r]0jHRhU3XpVps
+%b9"KMX)pkjZgtYJkY8=Ddk at +Pf>2M_%rognqq2d2Lh'Cm\DZ>U;@6,b$uBJi'e!>e,hA6)M1&aj<%b"9$dR5s,_R3Ocr+cp(sQpt
+%&KaF$3&S?pVctGT"c<GqiiP!&.Sl5dL4OVio\RuRo>W2E/`bV().H,&+clR6og<,5VG,T:_N=rDXXCAi\R."Bm4UaRq4cR0Z_<[<
+%(ppmIWcn=T"ma,FkU%.7R%5)(YLBO%Yh>7K[:V7u\^$WTJ)AT58E?'KMl-,5UIeLkVEL9?QBJG62!BLtUsU8Rai^$KfS??E>]+R1
+%6.\1=MZ!>OcWn)t)7h"&Mrr&.34V^?OCB^>3fc)mZ(2SRY?$J%<dIE*FnL0`Im3&jnlO0?XUb3L-\Id:kI.(/i_^BH$DQ`)8#$_M
+%$#D?N%K&gp4S*u!Z0(k[I->1Ee??quI$>A*rs<6`0JT<)9Z<L'/?5I>g8&kqh(O3m]<S",.+0TUD[g+5#"o23Jqu\W"e/XMJ$#.\
+%\V/;@QjT1V9n#CF8Ne/YVNt9S:UG$4&+aHO+"(KoAhA[]2e\i9G/Djfb-7fOZ))J)hXV<+TRsW6!2WN"gi0bna*@4I;AX4LG&a.C
+%$HHXJ_>\7BAX<`JaM.mjkM"W'l1MGYiL*\6s36jKWfb6101l/r<][.njKq&b_\qB/Au[IUe9gI#Ie;[X`h>)_ at +X1)^r*-I73)B7
+%h<NNYf0tE>N>^+CjA?%OVGs%Jh$$ud:h=oL;s1"kORm(\RJ;bEA:f+;Atnb3pb;LR0mRE:RO8`hT+H!FG3+sM31/<9:b[7i(*qd;
+%H,sbra at lX)$-6'M0P-iOQ^;h`Rj'$WgR&n#D126A>3GC,%nW>pQ/a(A]Am<(%S6<8muKHS$R#a>5f3MO9E#O9*^Q#YnPUM`KMun1
+%Lcb0J9/K:t+YF</EnORjYX4\U?<66*-C:^\?lDTKkdHA[MgTrEWenSYnDA<qTdIN^]olgMD[L&0\X`P^-f)+A6/+P:'MHako0CFc
+%jlpho?Dm:b*Xh(4(=/1\d7G7"6+5(.91VbE$s9fo[SAK9jKU]mi+3d"&p/L>APgPl3oOSSHkRXi<9LB-h9K^Sc%q_DqTDA;k[_Os
+%']H+'*EtP%:.0;6cP,uk5328DMgs)fW^M3:a]J;L-kr/n1^UhB]\NYtC'$g6a-Cak:Fj'_+"PDZJ0akAR*na]>to6*`>hc]YHcS+
+%h=N#alR/9?a"C]YJRrX);$]k`0/g\+c-_o?4;-/-<)jeMhd6"9,Gf^Wh/=o4.4-qu!&,s(ruk+Ba at rjLIH/8.leFW0;\@A''&2P<
+%L9^.[YX at S3h^O'+-u`!(9XJ2-Hs!YN(*<7c=if,Of!c)"9L3u-J17u+TtgguN;7K_R@(ISg1F\>3P\g(dkJQ&n"r?1&uQ47MgW#7
+%Z5hMImRs%(&$AlYg.'4>Rb",+I2*/nJp:7U4$>1c'B**V`0:0!jOlJ`Cg'qRhR&kM;F%RNISojfqafDWQL37EVM>T.#*.)as'EP]
+%Ji5,tSf0U1%t`r#:#>7MZA/sr7%tdkMuouH'Fcp(9&kZ+o't-:Sd9A[kIa*ho1&fOq=?bB>CeT&ldlc(l=h!pYms3[%\(^.T4C,]
+%F'D9ZYO,f$C['nuPQ,]rPE%g2Nh(kr,(UQDF,HXB+VY&RBMDT#G\JK-Npj:l4mU0*@"*)rlWFsl9nXWXEY7uS0!,Sq[W1U5bSSUL
+%Pnm7.!)#I at clXFN8j+D*A%KI]Wr\`U5:rSe<!0n#6Mu$MTk_(aW9-jG$tOE=V74CJi:L7&F7X)1MSjeqL*uji"c3G%mMY%gXhVaR
+%"PlE-a]bRU>eX,:M,gGi))X8e,N86^c at iiu0D#3kc^$!0W1>u(gLO1B6+,H8JZdXRfpg76b$>:Q1D?XEYiWs>Uoe at cZf.oq%NL,_
+%P&=<S=#kG(_b+^'T(j2M>KWIs?1ufN-%--uS*AQ\79S=eb(e<e1GbDP(^oee4MeJS1;\LdLTEQ)3LD?/?`a=\D+4c?#sSS(<!2'r
+%4pnU<Vb\GZZ(EMhX-Fmig64%-:iA&CbrI%W2ie3q/`=E.gWRLUC=-;A,VirCnu3%";`m67g-$`fC&t%el4aZR<;U"h6U]to,*j)C
+%K1Y8Y#AKgrN=jO=nm#4CFPB+ at DP\OcqLF at j!a0`EHF:\<dRl\0qqeD)B`k\Q7+RKt29W([]rC4s2OsO&Z?(.<8s3g1Z1;Vt8Rn"Y
+%'Cb=O#g)IsXtYr4k at uSr^!DBuDrP8eKYoLoW0_n`-P6'GV6eG6Vol0C,J%>N#@dr5dp94"P1lefBjS7*1t"Aj/5t"B$=8*_IO.#8
+%a72JXN=AuU,UYEnI!M*;r'h&m.U>^p0:;=9JVg#:(CIiY)u-2l1q;D+/80:GaMl1Fq at V.7J@,BpKA2.F7j4h`,%qCSF#g3--;;e@
+%bY:mU8/fF,*eaF:BlKn#$C2IUKW+rLnfts.7j%$-AkB"DWAUfmI/*4VkfbA_I^>S;>EVjV'Yfo!o6X0%:@,:$pGa^%>MQ]#eWSP2
+%5EDeN[su4*\IHTU\!%)d3^>?ld6F\U_o[InG7UKSVAI%DCJr1i2m(,*f[P34[qd]_.Z4.;HgX9E.d''+XmABrNFG-^9Y6REj-IK,
+%Dq`UBAbgDnNC?rs\B<p*?Bt!V8$`@em6SG/06fYL+",f34YKdcb5uWL=n5F`p\dq$[OsrkKVA2tW at 2o_3blf(#*VVBpsAa9:W)c>
+%5HX>9=R6_\VR05dfO4iQ(P2kC:r:!&JT"/J=A7(\gD at i`Fj>tS/XNB3*-$B$A:Bu0Gr(g(=3fI;FRt3MksTu!^<JgR8T#+`3 at V&_
+%`fNf;GVKE<BY/_E9%-g"pK@&Yg2D1SDaGB8LjWl/%gt2'][6&pZ_[E0F(FKg\;2^Y]>\th`L>-HDUdKdn+UBk2TZ(N<>-g4K3W$s
+%9pB=R%7iXQe/^&jU`<T".(O(!iQ6nFWqWlK2"gb<[l6-nld.*KGp.-R.Sa@?pq7p`,Klmo]MaP2m3EE!GQRRs;lf%?<Sh!*:0?8#
+%(E]ClIAF_i0C,0\Hm'U=19i:mH#s:+j]/iW;laDiQE8^2bP.[_"ctmtICXDp2=h8Hp"C'n;s)d!5E5NAqL",F;`uA at .WKQC2j0'u
+%eH0S3hSYd;H&k<t`C3<<_Q2eH\"7%HN564cNTsB9JQb$\@Y`0#FhG7YF&<)!4:dB;g)W_)l[ISc`:UNfn5C1PNTBQ6Ct>cR:0;8$
+%DE_ir)><i:>f:8'+#)(cYTPke814XtUMsE37B`/6F#=aB-nhA(R4)c+Vf;E;.hH%S at 6mqnYNL5E_G#=OkaZq%qB:XfI;npT)^Z(R
+%2)Nu-7UGftX=;?)6AbRL7]M80r'\r".QnT!s5[gX%?'^&NZ'VOdTBht&">WI^RT+TH'T+q7hTm^8"Mt3[p+qj%I2SeGS+,2T$(('
+%WcA9Q2f_C&C`+R^]fgi_4IE`:Q at Z!@&9dAj76-hCD at 4->GhcERHr^l]>CINI$ZNgY at +!EH8s1VlYnp$3PZib5A=i-GFFe[o%POb`
+%c+"#YFGrd[+Jsc_?udV^pK+Dj9_8+Fa=1UWU3lV/pgWBkVQSX*BrUUp\JIRIom6)k1=t#Hm;ed[MpFZEf4lPL+S+t^LH4#I,V at .Z
+%RFbaHUa>uWip8R+C'T*U7[&N%:-Rt6bm\qB=u*l32"h[&P&S[0fe!)?S?M.L-h6B(Uhm_r//Q,:dj03"OYF!ba6TRdoE7)""*r!:
+%Y(D7bY48`kd98,YUNpDqi1U+Q4RW/Y!cBOja&;ILF2HAW at QK[.omfT4$hda5fbm^@q3/IWjB:'TL!JhLP4onPCri%l17j>)N+.up
+%$a5Cr>66&E9Yfk8>mdQkJF-n/Hm\\9/=uY.-Jnq`i.hM,D(!]NCkE`-Ass;;OXP\-a4m2F"N>8 at ASB4@dX7"H&fTN"HXYZ;9e!T&
+%V-*TB:E;Yt%LBpTb/koV1!,YU9kESISi_)F+tG";/X-8&%12K%E5+EsdT&%:s58m5hMV'XWG\U&fSYgi0ub$fT.<b0?b-Z61I.lp
+%G\V`+rN;/PC:TK5YbT(k5$;jS_kG'YPN6T=\tOQo84d]Jct/Dfl)BrUlI>!'PI8sX-ASb3@,HQJiJQYb7[-L4aPXOXCcXh?AU_/L
+%cIiRFa=.t3o_#*H:5VF.a[pjg9C0,Mlp^N>&Onen=(LT%YoRMK0NY_r(1+B&PIjjjg[qtE(*B,UU;<iK0m2f,aKQ<'Q^oJh*%76V
+%s'4PnPLWAWRE)MI8rYrXYE[RiHMnkDI;(j\pIaA[r]S=f-Wh[CgOfBi,RStWS=ij/f3Ar9;XhC\M#"Y$7*fk5I/?5L,:@Bllpc=Z
+%0,dbp>&"1TQsnmZ$J(\tgcD$%W0lAtf;A<<(#ZO"Gh'r&1CJknr`H)Xm7D+A:K]?)RU$HH9]EDBPqSP<(N:M1U&Yb49,&onAa7cc
+%bgIOokP)%M_X3,b?Iq/c^AR*<SJfng#E%7hbiP;N-O;-JA[tk%h/]sR$,;!>7R.H3;S>q#.[WOA[bP2XiSaR8aZ9[/g'3`aP&Imi
+%\Y$tpaXuVmpA4RaTRlQEEWr'"Jg!d4XBRG>LaTou?U_e(FAH(k$HHt)jlNbeaq%15:?d,%+>2+,P/$MAjC7N=#LqW/S^Y/tJW:O_
+%br?"H;:WNl^jhr))qH[m%.qd$kMW\4gTippJW,jrbkNK4j]\>@Qt:EC-;`$;%9L at k/B at V@PGJoeDkrOV6eobD-IS%+:;N$:9tsn&
+%J.KS@*i2^b7cR-*$:mb5qTS)'mW-+nN at 7+uMT50W'n5c1=LP2H&_NU<ip1R3pakmW`\:OLkK1s+m*)X'_&N&4/7N7C`_bNS2BO63
+%]W5NAn!OiPL]?F;mS3/''p5?'rV`kAb/f4NI4j2q:`mo&=;0lF_iFJeUQkDB_J7B*o'T0oR:5qa7QkfE>r0!Z2,Dc?qN=QP!`q02
+%ik3,##MibR40>:uS8E."U]bHkH#aqKc4k&dAe"iKGpVR?#pK=YK/i,`?HG_)bE&n\_T"W&m3\6\#?Lu$"$N$/0*.!?<#$7=9$f-K
+%bN#?>Ke1HujS.+&;51 at VeIq81`VociNXiY`_UED71[B at p`7>(.e3Af)O3o[W:Y-]2j]bFP2n""MVsccGV=)NkAc$<1PfbI`D0*B5
+%k_GXsp!T*?WqEs;k;"`$]u^"Ijh'/$JgifKXtn+r"2Gm(:GIj!e7Dk,UO@\R8U0CN=%CF"DG!^dC8 at 0R+@!qg%jFR>n0p=pn<1e<
+%Gu at Pb72=Y6[!]N(b9`dC,5Q*PoV.LoEoHturicNpQ$2#h6.^MuGW(?uM4'eB=+Yo#Ru7`PjktYKXFu56'-W+1LJ;O**Mm at F0#W3D
+%F1-MacdIG9L4q,t^HC;2@/,o2;V8r7jd/qtq0EmD".VKu:l$)2A"#:0T.f:Xae/YeaZLY&mqKl?F,Uq4BrPKB^IVZ+HA[NO_Sh#@
+%j"L3FC>1Q_7X8Vb%4k("JOc#0boT02C]YBO4C+O3.Co]n?1cMn++X!%JEilZ?l(>C;en200-C4cQ'l3 at CRrB0I.%knP.-I8jk[:Q
+%7lEC&\i'?Xq-M\F2^_ak/FqepSnH4ajDTs1FaQ:i-je[@C%u3bnWjl+9&3iHgVQhIS2uK50Eh$-3i9[IAMN(nG\6F4,'088.Nk1,
+%>fncpn/u[.a7t2^5,Z_NEj(qj3S=i)A`m'Ql113t&i=1HL86NZ:QR/-^c"k^K$HurQUY9'eVi.m1ntQ=6!=bA_*#C\H&KsS0aZ/^
+%9n9_ at R?CuT%Rg#dd6FR!,1,KKIFN/;K45)6r@]ho`*W6*8*3>gW:V_jS2qNK09g2hrE,FbV_iQ.Z.+Zu6!lD3$a8\KbIs).X^1qN
+%m$$5mVf1[eCsd$EBMsSs>QpViH+,^[XV;h#LVAt%EsWdY^;-%m<[H:pJRVhF5J&8_P0qOHR9-8%qXCS'ncdDl3qH;-0\$EYJWsH$
+%K!5gUaXKor.A,CO#IODRU`iS]606--O>2OW_7D-oGiK+K!f9.I.(mg^R<!I)V@,">M+`58s.u?$+IW9PKJ_udB6P"@MZc6rmA&E2
+%/bO$+_NiM*21Hun3"LqRFe9_&m*;5&KEmRo-TRg56I#d*l$VYW&XlV%WPH=,j9\KQr98VuOaNT[A at Pd"0)rd&NWLTG2u6=9$HnKn
+%RR''AUb1bpLn+,DMm-IVC at 2:[r?N\"ppjBlY=j'U(Q\K!Nh1*5rbJ][i%_i:.G!tZ9CdJ#W'Df_p!t64UYK+b&(ZS<,kDh`KeL`L
+%O"in?!COM)ScIEmFt'C3RaBVQdDqCKO$r:(aRJmpPu!:ce"R=&R"j54^kTX$:T9NP;(a2Y_1,IXg4$ui;q0dJdMZQ=Q`iHIcZG?B
+%*8kh at 4(slKpSGa<;6B*>k\EGLOHAYPC^3bb at NIbH/*X'Ci]WjnfOqDW2MfQ$>S]8IX_XM/jUAAadfU.kJR\d3IFf*%k?LT9)s,G[
+%9%`8LT%&Je(\D.nRT&=C)/qc48t:&_.Ze2pOt?8hWtAkP6a1B%qF`qB`;-OB[WdquAji[sP!#4q"ErTT<2uQYTa(-1g_IDgA0SCK
+%_N`)5bt6['kIoqTPN0uI>NW at aZB<[f'Q=GLUSP[?'59&)A&qe6T-bA_T^I;"5lR!)q!@$_]V:2%#BQ8sb#>o*oh(>ho/:Jm17NaG
+%nKk2u60]QDp%,IhP8KGVA/@7=CN:7CJ_GHK8'Oc/qIAGsFM"A):/K8lZ!)*"1/XdJnT%H\"8s,--,,N,b"j-0P&#c@;!HOR'J(&<
+%24F]6WCL at 32\ilj4MQZKdLg.sM]Kd&dYBsmp)<1?..h:e)Kb&Tb:G8"g9a&JroUTDhC0u-fY$fq9,(,)DV4JR'&9p6JO3mMO/]jD
+%-1L&J/3MH4N^+iP,$RaASFcMQQ_o7H%S2BG.!QFbAa6(s*;L;n.%64$OZKo><R0>;\QnL.<`R:Z'q>%r;:*LFZf8N`W'?YG/<_Z_
+%(3Vj%7SAUcXGl>NZsFm$h<#]ZKEO]c,$lEi(oHm=ST</6NiPh+a%0qhh3+`9kL&qhAmaFMO`PCQcLp=r"\TIVkA)5t'Bl/4\ats[
+%fag]l0EH^&e4M6j[H1_mT6WUoE9gq"_%uYYe9[ZfSjY%91Lm.TJYEt78YG.?C7j&h$A)b\k0!GZ31-/t$q-itNQ.<?A+jMYJ-rUg
+%FP]r'(TfI#aC9Ig.QjU`bZoR-W3JJ3LU at bA3&X`[H9Z\BC0[=&eECh=PEY/eS%5/4/l=`,.eY5Cd.EkUjj.o$4pYkWC=3g;oTAWK
+%2tVXu3`J#C5llbW,6>Z\^iRn$Q05tdoXF+=YjoT4\_!,%kkXDDqrO]N&nS<E"P<(mYQ>n]+ at q#Jk7etBB0`gR%hXQW%qNYt4hL4X
+%0\:7(4:AQldiMbek`lSO:'$%",f$_ at N(/N.<t2C=@W\DR^Bb$LGpk\NDkFZqNms<?\"DL(Dq1rVP??`,A%_$1(K5(o_SICp(Hs<Q
+%f4JlIZ'RnCI!r4AhKb'*8s3T+%6-96<,C?QAa^W"e!>RN[9>>nS1Z(9GJiKK-64VgqrHoS!.b(AOn$arH-*,$Ql*YZWK`#@;VMe\
+%%I!!]4\$t#,3A9Y- at HA7d'7q!^->VTj9R9qKQRY#3B?-G)t!H,-qFY4N0A:n%P"*(`<5r,;%u#l at KTc/[l*IW at Q8.I]1<?l7PK/;
+%W_[4Tf#U]g;?aO at 13r_6e,S`4$I^tU?o'1KmSo.;3Qq@&i<Z^%'M#%7VmWk$k8eEe2F-1A-:b?G)rp#MSLIACX at RpQ$qS(Q1I)Z#
+%@ncfL0#Y[i):DcQ at 1tG`TUBTJ"b1J]Or]#IV>!QAjYWUHY+5YOgRHNEMdpa;8gELJW7f;2k9).CH7CeUj3Ce0()i.o+'>5^I at X\N
+%9:\t[ipH&DjXFjb=^n0FYZ%e8'Uc#M!_W#LAWK3"M$Ok#n3T-J:&WDlr3Eo#+/F:m_eX(W\p(X/?kqa;_6[4:nJ]>ZB;".8Teq?7
+%h""Dcm=Epss,Pu9VeABR+6mLf7o-p;`37f<P\'Tj3^-8eb-GdQ!dPc7JnT,S>Hl)R%&CD>,/,%udo+PBFup2>aq(O_>%HNAKP+ at Z
+%D<G)#T!Tj!-ia0;$J8GZR?1,c5u(KZa-V$Bc0Y!C/3t?QCFKD<l1h#0Q*\cgo10He7I*$S3QfG_Mkce&Ls"s,7(-6/ZN:#OM$qQ\
+%f"0A$5*;]5*PqVH%6'TC^:_I#GVh:aolh0Ld"ts(!BKn'W0J&H$C1KC[Ck\:s$H3/^mCT:T/hbr-oBK^s$*%i188QP=lgke3[ebq
+%D^Fo9.3b+;SeP;7'(^X^P::D__L^4-^RM^82TZ2,$kQJF\Jc+:Q!,`q,Rs"Up3SQ1 at TqejS/h9-"/Kh:iII2a1*RBXR]0>&3uPLi
+%cSBg<c]t-$9gE<!#P_,$Ya&Jd5g&ZS2%_AsYaI.UjQj'OI1Q`L"'T_j;tHb_U]Q"LK/sn53Uu-L=*H"[[\"/50sLN8AgbgnF/:7n
+%/CVplRDRXgOiP=-ph;;+(@Kbi'tg*#$;Beg%ckqQRp!u1VFSY3n%)E=Ah;"r5s.8a^+:_R+OrPf-tgJ>9l4h+@,p:XclrjR6n$3]
+%$;,$^$kIO:WG%Os5gI7R1oGJkL3BD^9<ghdraD`l)Z)<n;Pte(+E.HMie![,Meob^o+RTUK=djo&GBAV%:<9eCXD$N!hrIQL%ANC
+%eOO[GO&)$jnX_co.$''iDZ;HYFRGD3hD5dUgRVjM,FP1I at pVL98;hT%/a]_W/&,ZO%XZ+hnX\o at 146A"'Zg;""Kk!B(<$.tf2#>I
+%,\&0rkG%KYr at 8U)BM7K:(<!,3R,TkC at KO&mnU)t6g-CSfCfPX=XgftFWqKAj9OHtTb;%NQ)p:oA#""RjkFE_1+>Pue'gM"n2Wl0$
+%0IHgiMOrDSPF<C?Tbo3urAUT%As*KJ8:]I9K3T4&_Tn:lfYQk:4uZDPbbje[^)>'Uld:eZ3[r)F:B*AdJu=&.#9<EQ/ueP/\)D`+
+%SLWQqTt?sD?U"C.>$X_F8VY7L3Mt_E6KpjAE8e^c-n_,T+"8Sl89CUZHW/<q%=dpiJn#VhV]bubjBA*K$G+^V/6hC5!V3Ye(jpE1
+%i;Q\[0D0]e8F-.Tk,RUoiCbkkNZ9k3qb<W+p"]SX4FV9;:+\dnpUeK?RY`gG4$R7Ja!GDdk?.#@7&+.3*7Ue5 at nmmS]54k1"t.L%
+%JPO@,oTdD at j,pC%55aOb#8]M%=KbJn4e_J=U at DKPC_:g(A31uS&Fgt0RZXlbWKn%H;bTU\(0mCEUf(E94jU_=PYO4HF8(Dg6$FB&
+%d;08WS\-K9([MF-0Z:Xr;CuCIo at Z8r1U/2?X>Qjlng3?[kJ[J%9+R(Zmur/MpA]b:*gebQCQ_.cFK"ZAT(-Ot#GBr&_*c7I5B0?K
+%jn:Pc)f$p[K[i?]`.=aiJQHGe"_I:n1/JHI0"=X>S$3mOfH at n4UKH95:.pUdHYWF8`C^](%(mB+G7T6[NiT_4!NeL>RC5pGd:L=(
+%BF=3L$CLlm5'*q<XXBPsJB@&_0].M4oZI2h5i%`EI*ttYX]j+R?E#UF$SO@>?_dEd_=1ckK-Tg#IN%"OV\^Y1#QnWW.X.Ht?cc^[
+%%`<<hDkJs%=:sJ7S>NE>En/auZ-bjNM<4(IK2$QMOT>p[=amgYEbBR,2g(9nF$>rG/9P4#s37p5[9e=-<5)rYGA;j]O]"e9=Kr[9
+%RioW,n6+`eeAj#pSVNSbN7H*1AInnS_ipCT<OCi.[6Nk6_5TH(H0I4*oBqnaB9j,Fii&kY//J/r[o&p3.NreIB"9pWbsK5m0\``=
+%)1P79`O=!AG!Y19LM,n'jEG]@Yfh7jF;f4RoD/iEh8J$l8t6C=rR$3[(jnInBRs61*#M:b0s98>#kH:%3h54,>&6eOgo>\)>gR.W
+%ii!sl4OE-`o$OU')02s29%k3p:Du7Lnu.PoNB[jPE-#=+O#iot-,j at 46HdO]fM%F"d$rYso;t<JVjX_f1nAEcrL)A/GH^`TEu1<0
+%p@#Pb3,p1!inKb at E^(ni7JriXDAc at Smjbb/An@@`V,5C at 1@lZ/5A"_W-+S_G.T0?]A>LpdB*t]T%I,Fp*S=/2f6lubP4N]8^>S*!
+%2%XbXrA9r!(G6)gA<HufouBC.%_E,Np/ZKFH-\Y<5:$HLUjnVVU3W(fFinqDGEG^%lMoIm(`uPXI"4[bqO0$>WK)UjNHs at a#O$q/
+%Y6S.dRMu at gm-JDH1OhZd/Q(o+[)0KK!3nl1MZj#seV<Dc at TJtE3r(?-/T9XjWQJ_PXCq<?VZOZu[+[=V)q6F;_Q,2jr6$&$SN:JQ
+%!_=k!XTOIQSC]_N?2B#\9]]a[H-d1Y%gs-iiN at k<8F at 9RW5k`$6`abQO^)&3PIr6rUrqncenEPX<W#Tc]:bbacJR#]W*?RI=10Uo
+%l,N*uHj7rsbb"t:g$P0l@]9t+(b[.1G#Td%idFPOSN(;NKB(Ipp7'ZI^.YY[DF3K6i0lh+7o(o?,A2"c=*C(_q4ONUY%VB)SMs at T
+%H[!g.fkH`\&\`G;LZu9P)`$`O>PET<RO/s+1+8!9?kI!KXX#1[ip*Q:Fg/M@^3ols6a-7cQA`c9Ep at RH4'K]Nja'8`Xrc+t'/GUB
+%CK!AIg%/BiAlC&Hbh4n$gDf2')<g at c.D:pEQ?@4IR]RKo23g5I=YK,(]6*_F=rDbK7SZ;oob(W-2t:G=_AA"F(n[`d$$0XOk.6#G
+%rg7cuKH'>&A&X3`Gf/1i[r-5lX4gJ^0<_8CJ$5Xnb&,sa==2PPF0_/=UnG5</OuDpQ]Jj+"Q\#O\D9/gaiI8nlFJ[bIOniA4jt!9
+%3)1MDeqkJ at S]JW/n[[h3'*0#b"HM&O0M0VeJiUY,C'k8_h'>Tp=nklrgNqT)3aMu$pqYdjq1UiE)sL`]_%]^;[!)E=\V]8JUg6Vk
+%X:FYnasYeeG[j,m[-84ES%<K279OlsqDAXiXQu]Z`k"*Ugg%I[aHCYL1D[em at r1fbA74H^^kq0hN`5uE2,2kf^&q4bU5YQVM.,B'
+%YSNPcOSCX%Te58O at k[.6p>M11"&a0(BNkoiKQ"3f^?;1R8/eJX?CPErZ:?&&D6D9-a+Co)GZ'>Mq<o\G+()4ZRe33u.007.o[7-1
+%e+7kOS)gI0QXM!6]ZVs`Dp?\Shap99g6Ge^3;^$gT5VH9FPaOp0d]NDbVtl([!dh+8[kNie'5]2Q01HBep*DH<^ELeY#``.)Juu9
+%#Ra=bEXu)ZfnU`bcu=.ipP5!Xp&O86"mMeXI_`%:V`,ugMp\du_\E*28Irf?<)2VU(s8,L+f%Dg#Ai:ds10OGhQ'@WW\NW0j\D\k
+%AtP5KBUXM-e(DY->8#Z'R-W#=Bg,?7'lj0dp,t.1;fBu"?:JM&P8hA:Usl^a%8BI^T?O^,7X54`ruqc2k;@:m2f'KKW]-bt6)5B!
+%%G#nfWcg4%3[iUaElKrp0se5%OYjM>k>)UU'l)0T7^#i0IA(,pCckh]<-hFf9Z,_7Uk?Y'qQqOCn(71.\iT?, at Idt%@C8-L2NdcL
+%YPmR&,k?/0E'^qt.=Um\\e\1Q$IdOS)hJ]?bo<gB\*%!UHnX',kG5[m^`E[nSKL+Dp*>7PK;<0 at R(.X^e",E8.b=d].hRVsFh^,o
+%,B3?g/*1KXI7nL0:E**lmiY,?"``_JkU#<="AK%D-TOj\Xqsg)h=(L41?75*-MO-_]5VW3m:u*MZC]f*[6D7mPoO.GM9Vnd7ALBK
+%aT]a'HNh<[(`J2M4nAiT"9q;p`K3;;3VbU*3gY'f>LNP1FE]js[UBg/\N)Z$N[^@WNY;rBg<Ccf:9a[38&83/[PAZ&1Is]\Z^%9[
+%A+8-OW@=J%F\;3<q+R)L_RC_0G>9$`-0O'=l!`DGfC-6Gmk)XGM*[JZ%<f5*^V%lMQ$#a(4;?.I2r3SXSG!iPZ#4IB^6F9i.V4$#
+%q$uC*."h>;F*T>$1DNksk%cDg.2qH1=OY-f_WEbkY<6WUVg0ojYUmp*V)>-L4&!iCK6hPLGp2qA$d#>0?B-;_KN#H?8/g+%VWaG^
+%cB_s\_t($jKaAfJSH@?]$?%.E)O0nVB!FZ7=F]Z_a%T%Dg]9M,fJn_8r,aot%XXoYj`bSF(,q<]?4F?(b2%nJBN=n;nMZZj.n#`5
+%?&o_G.9ABpL"b]^>haSUZk6?del5DHCC"'Y=Jgj(JjlG.<7oH0*A-K%4Kg#%p8?^+'1bo?7oMoigD9L+b?GpHOR8MIV$S(V&(06d
+%P4CHqmj!Y%Y#A1QE2t7PjZ\:"gHBHQeNanp&0]&6.f"SB/tAVs%#]*S)U!.DHs3gFGKQ%N-&0ol]-p<[Ipl`Q8$lF7 at d91^QRc2/
+%C(bs]^^Ud#_%O<1?*bitljhhC1m8h4&I)kI3JC/K+t$]!l-ES'k'_q(j\EMif8]pc645>%r`5u5m"6H<]?$RBp5RtSSX\TnJoI6e
+%pXr#3^'n>j^T%$Va.HEbJb:.=O':Z<U;\Ek"u%<@Tdr(U?l7gYrY3p<1Z'05V"X_F_Cor'V3AQ\P2^_/mlt\"gc#k9S>+I&.e:W]
+%?:`Wge3MSi)d6q5I\2X2q:@,Kd6O4d<VbjX&spc/Y-?"/=NO&\R;1&Dmoj$:/^Ea\7M]sS&aRO<rH5h*[a?sQ&:UO'3u"IG:ro&P
+%BGJ&iFF+Cn1J98;V$W:ecCB?1[EO22IQ/q"aj\>?`O0:Ul,+n"Ds5LmT^i)O:$I_7i2WZ$'&]`spG9#hO"Jn1 at e7i(!P8VI8ZXX%
+%cR26;+n@]h$RZHIi%^;\,2'44JA>"kg<+1>SDU6:]pQMJ:4foeEcZa)TdI!q7H]n%ctg.b_h>+Q+.N#4jJf\?Q\flMQ']%o.2rAP
+%o9Ms at Ybu_jXRa>WK=B^:^(A at Tq)XQ_s!F[/@6TC;aJN\\`6L_@)/72uH`#o(H+8M,%dA`@AJ"ZR^frPt8(3"']Z6PRA"/AG`44ZX
+%/hug`O5H%d\)gi%'L)=5)J-a[[RV!r)S<_2o`UQIQY8A8hur]0A-c?ni8[1Bm^B?r4]^ni//k<G3BZ/lS)l>W'.h_8D@@TXd,(!/
+%q<X&sf6li*kE"iFRhLq^>>?3?W[3^i*FtSf9[Y>].O_BeIM;G+ISFC;B:W_E+*?8hdq2DhOd8_WVCeoM>C3][ZYCdDUW!(c$;1e2
+%*)hE4FTu^H.)/mGE2ts*,FRG))=DkCY'XY2^rAD7IX+Ah!tBT['FQcGklP44o'@m_XH@@.&8e]=PWopg5/)9 at oq-gMp$?dAf6aC_
+%,k(HSr^l=a$h'kKg\e9C]?HBuhaN;F#_!>ho*lauCah%*99m6HaTV&Pml)F>C^]Z!8X&6KXM$Rifn4%)-(BlUB&5hK9_Eu&#m=H^
+%)^L>lic"YCQWUlh\DB4l>@.63&qdc\2tlfmS<R5kCdeS)rKmOldZ!A8f@*?=E$b&2:'lUM;!j+BLC(JGd;r1^XP9tL;IT08mIl,?
+%M)T*Y_nMW:5jh!gcVh;%-9Uls7MsC&)cfPUq[(9I'Dn=Lf(s2J>5KXXQ8b=X_n\%(kF7F!lIeYkDD9X?CYKG)+/[/jNPB#7]Si<i
+%c"DBQdniSge=G4/]a)\l/nJ1IN],lNpqIo/VX$@q&j0'iS5AWYk@[bk"oX\tGZ)KX<b at bH-ZYF*bkjDf#`"(:]T(U&8f_".F/Y>m
+%9l>u;okm\?Q,cNjdN_[g;rSR]$]4BKUjucE/^uXeGpVRKW=53-0F1?`\"M$E4?393P/CH8<3R25nf,i^Sdk_t^gc`%it2Dm)lo\U
+%Q]n+`U%lPN4;fTQPR0.l'mul5r<ZB#+S=hoTD*.+m-#B9,0?:@49u.]#smG?;_ZJk6eo+i#W.aE\Cba<N>j3E,HBF*dJ-pkhUoO)
+%iA)6aE1kMhjYT^@X4Wn6i=U<0O$I-^VaAMU3ECYH42eJ(8bX[<F[o_nnJdFX;c_QZYF=WZ<GeS];sQ-G$)('N""`RC*pZk2Hj^F4
+%UU?7=n`'#@AN&do?^!LNed&+RjP!5up`TN=@H3%chbg7.jt5LUpI.e at G<MSlZqR&(-Vmip%+89QP6Y#-M]!=Vmo%7-:6!/&+54L3
+%HCkgBoL;u%UgTkYgcshd'M\u(kl!+OnbR%u4m9SrZOR at W^#c2nPrK^J2GpQH17Cn4\oV6\+sk[-rE$b$8*Wj"QuH]_aZ5N=%pD2(
+%;f;39YAj$(4[Wu0f/??7!LYU7iHO at NDJ3p[%6rpf.u0nFQ-44cWGP*0pb^@V?59,Y67,nuIds6$,kc)m/LF#YYZIJJ4m\.t9CfYh
+%@Y._i_-j1rh.FHEr05mur/#:Hp3+gjb at B<ZpeWCkWTih^^%`BcHrhJ5/$U28_X/IW`BXJ^,.5V+>29#?oQ;]I at e0h/TcH>q(q-"i
+%f2H0BP at Z\JH%%aMSW?0)kO1dW1;W!1('Zn#,:X"MV'`r(H06"_CL`:`!aLE=ME\pW6Ye:HgmPK)3%O)Y4fM3E4Fq-[?k:h2Cb57k
+%NqF3]\L-6q[pXP.JK>#9GlSR*j.iHh>9i*_2eej?5G>r'@oHH4_g1gB'7KH7Gm#FYq8k[3cF7/?5K,N)DoZi.eto+0_Itt&&l>BH
+%ep!$cT:HQ=b.\N*2,Yig%(0_>gsfiOS$/gI;Y>-kB(iH=rU_i0Cd_KQkAZ_"qjY=A[csuKVIEre9kJHp'B86]ra%e($"5_nXLlgX
+%\5>gA3T/@[Jc;+>fH2Y2En1kP(-=B)MNlG?$raO;P$cLBE=H0anh35:PTG*B\OkS0CkcdeBcgB0p%TNaPNGqQ(mjWBTC][6A(/:8
+%8.k`=CY([?&,FY%=B8h^Sj<+uX5AmQV_qQHET$SZTN at FWml,K&Yo<Ve at O<8p3rgg9Km.:-lW<pn?fl7fg2Hd:WEGB?PH`W[Rq&LB
+%kHU)$c&M2$m0G&Ab<[s(LD+Sd-gP3GZYe/bnDQ4SXn2gn53Lrjk2hap,frMI.iGb$0]hk#?o at t6T'_gcQ`SuLY#;5`A+Ee_X;Tkn
+%2^+?l?KQPE8Hr36p+l8Q;j('^b$g`D>Ia]95s/2rcY at b@8 at D7C_:0YpjhF3R<SK"=.a]\0l^dkp8R-Oe3spoF#>(,D#UqE6QJglj
+%f at 9T=<Ds/,Arf+6\>S[pWhmKgM+B3Rg#+sDpk4dSZ at _5e,1meAWH9Q%cK3$EP'_,$V:/-Z0mAIhL8E%'\q?%HDrP/9/(9cLQLXa5
+%:N9l>-NWT/]$h9e1&*FFZ?>tHcM@=Df04G#)VCnU:?6n*(HqS[\9+iO22G?cj4n_=4mbsmoE9#\-%dNi;8dcn9WNgHMe1 at cH7s^t
+%SM(p-LC)I#_-s82gAdsM1bp/$_#;hXad$VrS2I"t+IAW`n3Q8Mqh?\.R"cSo;h<;D at 6"J^&OB&`%\3(=];[?(p3`M'4PQ38P-_Y:
+%,BD/9Y>AlI at u41pptG`Go&&$]:BYr8,3LN^DWjsHnu`b#i2'tjpZ&'`OYR at k3tWt<"f31KAn]"u8-7T^I?5gNWAq*J\K^jdFer#:
+%(raq+VDK?-T;tZGY+Vf/8'>Bd$QUY4XnNt3[!#3$%sHYkQL6=jEa?^#k^SQ2ZE8n;j6->q:ftm*gUFf at hGosU[R>]m#W,:=,=sf?
+%K\Ln67%s3)1RtF"/SYu#QMdo_<Z,D^90Nh5"p#2c[1q2"_2;=0 at d^t4`tUqjbHL&K>H1n@@-m:ho8?WT:%,I1*kF7/Lo,'lP5La@
+%eXf0Uo;D@;-tgRD?Q:fuX%W\[-V^ub#27SpFG1Of'm[&2eX`uHo at RTdZTcE29pJKfS`I>IoK^i(YICiE;`u6OP"0a*h/"#?N.!f7
+%6XZ?rW@*_UW#*FHJ<"'uXPEWheg6O;"7gqp.d%j>r\L#6_h)`#*#g'pAlqIu at SXFVZNC"AFL?01D0oOOZ`,CWGE^))ET,Ok#:D0>
+%"T$DGO3C\r:4b(gj9tN&8a^_A>#J9t.D"mc--p%4Hk-?ErM"UiBX\bW<LQ!hk+YgCA`K*lrGJ%YhHVK]Lb6$%6:'r8&jQ`Hhir8@
+%/r?kHF4MPtp*0rr?Y,#a8_EEUnbXRRgA.QLB&p=6Fn&03Lk>,TF3[7OjXT%aL5F=$Y3Ea++@=FgF>o\_JSrE*ahtK"GSR`Qd#it1
+%aMFPBDe.Q]r2NZ/"Pr1AkhtZ_)JWd)4Zq9co@#=lcFIUM:P`lNim=oV%Q`2;jsfBujKg^)Q^jhs,fm1KJ;?b$:J8`oH66(59KloW
+%I81F^k<7H[YgY^YXVS<%2ropW6$/-4*J?bL.%X*:cdPVPrcXXZFR?_a#"^<MN;uU^r&P8rQat)N.?/0l^*VmD[Km4O%$kgmQKC16
+%MfWZo^1T<gVa]+GVZcm6Pa4%[ZtNRpSp`)fmk=H3.ZeP\;=Bq*o5/Hs,/[)FoQ$&NIec"'<>1`nh^j"Zk7jNPkX%a5g7?lVE)s92
+%1'P%]NKDn5a('K>2?@u%kQS6e4&]h[A:JY^g:#6)E,OO^Og=5PmCONL.E`O0HZ\#q19_NSfH;oU>7YIlG!^mtMolhDjO8cAd4bei
+%-\OE\e(spIgtVZ4?apnU9diaL.8$W:"W2B7M%i?G^&%G,OuMZ<ms[LH7isgbIo'RpOYF#5-BMDi14--LA_3-H&9LO;9S]!T#C]g5
+%agi<Dec/PpUnYPYIh+/Bh^i-:oJ1:ob1)83'?l9XkIm6I0Sn&K-X^(PlHc?1CdX6AZSLB"aPF"P/16j8h4K*Mf>]6hL:rEUgL<6r
+%Hph^$QIlSME>0Q0pV6[s"=h[eq\Kf]]u-GA>KFSKZP=/WP*;O<lRY%V(/E"2ohGh9"mdUT*(PmP'Ef at dZTH8e[7JbN7A>!6\i/Yn
+%bSADc)7aG^X>V[--])6m=+=//%%:bh\o^*uBbAQ=.Q?4`lI5gDZdL;7[Zc[SIM$dNXl92$0'V[cobodG-E4LnSq$G[+$2mUeKeY*
+%P*Z]nQJ/e1\),\F(lE7[PGpfC<)=16i+1j'[-7Z&%tHs at Ju3DF\O(Ru5NZg>15Y[0\]6eW.0M7k0Z%QLpD<?1X/U'"#e],I50(o,
+%W<I!7dipGB:F,-N7<spF>2AKaadt9H,*+O#Se"I`"NXW%&@Y?(E.?saEn5O(_nPuhd:.")/aucFCc(Wk0@,#GO<XQ#;Y7:*jIedA
+%@V%Ki1?LqZ\F%t7q(K*WCOS&;e0)BnhE&e8d5!0bT5toK`#*">.3>VW+"UrmlTnp<=UImTS:uFPTI!E^JMaKt3`E(C;DXo`Q:kG*
+%C@[l=mSkoN=B?\-e$5ogP23SNgj]W-pLKGKqrfA-YK=-#8K,/`\f?HXM$gGT4Ybt`439"PH&'.m\lh5W at 8FW,QO]TC/3.A89 at 0Sj
+%4mDG=KnGNBDH*'3aJJ67g7/PpOl0uPFValDMbT/C&U$R!d?L\fD]!2_3)0E"4t'2:G7a$p\!-<\JA,Q_`@bH&BObObY!TiRQkOMN
+%m*Gr4>[R9d>adn!:2R!Po!e#M.O2uU6-dAu]as+ at a-dm2<;bn`ZKp0BP-hI&:rob<Cfm4joE.\MT[KEem\ZW1m at Qs@n6@#Rl5b!B
+%6DH8"4^ZsBMkDWsiATl$/4,G>DPjD*(#S=ELoP_l$>!80k;HTZH2qT<e3UMe3->Vgq<4/\9[V,"d4eJI3D&%e_5`C;]hA05djPCT
+%nja;eC,.oZ.WRMJLH"[Pd)$p4I0XZVVkF67g%r$p\8q;RAjS&Je#ii:G4.?1;tm61aFNCL/U;]ZdMH&(@SZ_3!F4+3bFTh6[t,*)
+%N_0kE<pna5ZMV$W(0bNl-CrWZ#n#0$3ec"!2lmsTf6Ld[.mmrB27Fm%Y2Ytg_n,f_;5qFUAK*5;G%1QE34MeU8&X79?+lH#M6pI)
+%d3PYHD^D[LT$%;.MWk#6loXK at 1J4]jhg,8hSNDasQe[d at LV>0t7.*TcT^S59ROpchIlh(MVa0UN(`*eiJVO)sI&NPZMbu!]ou)1r
+%6PKhbr3S7_PRGd+lXFY2S[3C$PG7lM9thsj)XcM\(^@DAPp=WB?7%B2mVkS,k6_&-6;s'p`D+CO0&_1j;SQ-M9.`-b0pnE,c:rQZ
+%9c'C80WpAVMp8 at o+PCJe:LX(u9r.mE5]<5G$\J!<c9$l\<RW-^H1%`p$ED;%4']mn!5Q*]HNeY7BK_Zl0.a)HkL6;,c?cBo4YFgJ
+%W2]o8Ir[*R`'-3$-OGfJa(JR?&lI\#Z?,A!K>'0HV=fC6LknDin.PQ<MUB8=1V8`O>A]1Y;qUgdZf5EFP+NMq/'EV7CM0=>h=@Vu
+%GG_+"di]d!'@&^pcU5jGI-2,5&R\. at qpqO`@AWr:d)/$7`]mrZPCb at ei$4ju?gr^G@<1ot=[E66Wdhcd&a/40AP6Z5JVRZ`OaE6:
+%bY\-eLTCLV-^+Se3L]E&-ZIdJjq*b%:.%GdnjuNs,;A'om.!&0OfKtHA$$&-1t2R22U2_,IIfL\Q-3XR*%@=>_1r)4MR*Zff_70!
+%9$BSB;2+21qIFfLq:/+(I-23gWDS`a/]KHB(W>>)Tt#'d9U+.opmU9nFQ!j)g.6K#Ls0-1SI=U:+_q(s%nFa$CpZ9lqN#_mDF&lV
+%W8.kpVK65"B+$U^/V.4eZ*AB9`_Pm^<KP>fduJB:Gn%0DgARR)JHTieRn*?3A at EgOTEQ0BGl:n*HnK%BHJ36jqtYo_c)PPEs-94d
+%"sft-U/9AuV)UQEXL3-oP'OEh!(g4T>>85Z+X!@;q"?uAj>[eLT1ZEWM+5XU>dV/pUfek5d]`o3K^m7VL38dG,c\V>.J?X]$$+=$
+%$47<f3daUd3<ppO3q^AYif]S"S]?\pW<YN[?YGM]6A(0(mRUYIgnJYF at Z0&h)]c2W=F at c[HR58c<\d]jRP-k&9AGnB/=J^lJQD at i
+%nZ1oCPTUe&r@;M)+0qoq=/*`lY;uiDFS8eeL[3H-2)\eX[+hLO4ftPm31/-T9NMiI9>`,kjP-U%rM`YbGdB(#BoShukJ<EPVG#`E
+%IgM'hIE's3bpBZ&DpJ9s)5AP1(h9t$WAPuII`o;Wm+#+KDVG%nJmY:g)"^C97B*\@7;HAbUUS-/_T(^48GM%_:FT:$8`@t..]"c*
+%4j"(dM>3!N4n9':`:e%K9Z/:93"co##DA?OM&u*DOEAdY5rJoF5%T)48_[mT/k0'_2F:U#FZ9g);W[o>^9V%eJ\B`?HI\*i<>"?\
+%"f5Y#;-,rDRq`9R10/Q<HXN1.^#YL7.CR!LX#X!JIH!=l0^k at +F('FTIssk[q<,;eCm+?hE+'YZb+t'QN^;\1mjpDido^$eYk'*p
+%G-7irVj9dc-84,U*EiqTbTV>S$Lo,5g0+]]Vjt++0XXaMrDFabCK+cH6)B7ai3W+O;5thHo'D4J9+F,2^dP7L=*)5XjVu!m9%)tO
+%p":8"BmUJ>Pf:S_Q9Zi*eJ2ru,%u2Sae[@)brm^hNATbfcD8Qejr at 4;b[!)hC4R`t:lL->dTHpH`3q^pWf3cQ35##]f2?j>%H@<m
+%LUf03TWaVDgbr&MW<s-ife(gCJ(3!f<J17CHq5D$COCFCk69?WVJm4JD$R;Q%EPX;#m1Wl-;R8k-mr:Y4.B:6d/8gQ:X<IJQ(,ja
+%BM!3GIL;JW at t?b.1m90QTW(S"Y99ZmX at L].b/7lf0S=S!QlLQ_a at c0$-,/N_-0K.4e50<D_rW.Parrj[G^EE#Qdh^']j5<^'[kS[
+%AD>P9P8+2XnW7Y>S4PKW@@:!h7XfZcYl'++?3)@'5Yb(sWVBoH7h0\b3?S%GLp at Xe?MDRcC:6&;_Z$[@2R>E3s-\-XinT9`.A8Z;
+%*&E'/$b9Xq7cdU+V>Dq]0p6H,ro`Ml-1;SfA4,H\K^V$on$GX2HLY20NKF&&aXI/#nEb"OXUIcD9DJ!r3],\/ep)8-nVRu`^o3)8
+%PMVi[0f!\CjhS*3BRIBhCgs8!,qD1Y8SpG[.]84rqk=rK+I"O`,gZ)A=Y$+t>g,pKYN0V!a#F8LlNGgWBN/n*AB3Hs\of4^N/\#N
+%Z_a5p1B9if]^S9[A^EQoB>9V4Cat%$O4A)<_Eu7i@$st*lnZ8.YGBs]KVF\Qdl'0]qb=d2g;l^u3o4mL+0;R/1T&#sP48Wm.3i2N
+%p5]ZYr\@ipfs]tSfMsu3g3a78PLS&H251M at LJ)qJBh!kdYBe:EGl\dS+B.tR at 5i<Q:+TVq`GJE8oW=#QS!dqY^#LV3,KO8nJE_J.
+%1*(=fHiE#a0DHOod'd0 at HI+BZ*K:sWVj"UQ at Ms@YWVYI_3iR9Yk at BcjC](I):*"Q)<QNXPG&+it_sahK@\:E;(2?+tgHs?3'O:gH
+%N819<RCR?Srs"mo at J$F^S!8$F.:f:[,&3NTpna7BpJ[8QVT';bbUEesqL/aGC8IFXeX+^/n8RH&ZNM?2K:`jXm4=c3C<4\F/Rd';
+%pA9fbi]B*eW?\5bA:>Zenk>mN6V[TgC/r@%OXnI]'ZS.F-1)Yh/'%,&I0b'[^9sm<3,a]A$kI at fP?N"K^W3kQc(?C\aif^"d`WVi
+%iRghRd++Lu[141 at _l_LQPt(5;*qlN\_&p#C>>n2&61<l/WK;B'=oBjef+aYAFm"2)l`^CW&2U`-Vj&Si7[Jde7hUOhQLfCKU)=83
+%Bqlo`A>k$sqbtoL&j'$]UlJt3s!G*_E2TkL$1IjIo(e;$iiY1S!uADI<)dTgJ#,1T at Q8g%CP/6h.Q`2pbL6kJF0m"K-'H4pM0aKY
+%E6-9N/n(0RL0VlHX^<A-HEfZAl#ALFaaL4<]0CIC\[sf[Rhk=6;Tn4;9A7/K<YCG02_2kR*mn4Wq%==Cl,PKI#t`a">)/XLKC/_8
+%`ejWD[QN)X^[9C[kp^lfL4r2]@i;o\)u`2W<6>V02^jE>b#"`c+]tdF;Q^X2A-c'D&nlD\[S2YeTbZ%"U2lg`c2CCuMd$(fbOIV!
+%?WKnke?e-TCQp9hM%-X\Tu(SD*;)#+h\r/\SS*jSW\>iRUts=dN;l27letKbVGMO:F<4&\RY;K at K"\HY^3GO)%?,)K>JXBU^Ubsa
+%->:PmQA!8W^&IOY61Yrhj^6&<h=O;jWhqT_YZT1Pc(_C;lK:f:OQTM4f`P$GUsnot%(ZaZRC)*rk2c`^==pTI4qFZkR"PSO]>_\+
+%N'J9jIU;SE_8!NW=_t8FjLg]ZhUg;ef"5)-WTZc2F9EE%JT&YsS&N1R*Ka!d_YKq&MuA'ER*APVBN=rU4]n;.qc-N%5)u+%,CFiY
+%Ghu$2b*ren$F3&7bd1'3bu\*2OqM1D8:W%%-d?ti;cL:lH*1[JaX+\)<QO;dp-CshDA-B at +^^^=\dcHDpJ+,Qn?Bp;9&4'HQ,1kG
+%j-qa>PRXG/a#B7.)6$ebO.KUZ%5UDY^!Zs/E\KRpmTdl`e3.AdgL_P);_<BW]R=NH4jc.GpY5j7]R6k'p?8QBh*u,a at 3)a1jTG7?
+%:=eL&]R_rT at dYIiicqb<4LjcY%MIBXWM92L$_*ZLg"K;_-7KAi"YJb0NE(EY[,cjdc`-(pa.&dRSfbb:!q6/7Xpkl:8<jE:j[EN$
+%ke!aMdN(@)ULD+eD?ZhWd`qOJ^[Tf_)?'@\W_IoN+&371aZBc^r-->dF($`eDf:ZW6)a%9HL,.>C0t=K8CPsd-g;BL.1<h*r_UB[
+%\jn&NSp3Z`4eRH8BbF6kco^ck7>R(q5P0ufr'F.8M/&(lmu\=V7r$>a:+d^]bT<d*bTqsInhR?25PCAGqX3XL2;^uPPdiO1T25=g
+%)f4(*;_e0I0Bj]1\j+O5!WJ46=;"M4M\X/"$'n+fQ3c[Lfm6[XVFJ6N&Hk+bJXH,5;_/ei63?$4\WH)?E-Y-!Z!3^o,'?6sCX2 at U
+%I49FTcVsi59.\nnB+BOp],bI`_d&"5ca1clZBh_!h:m5AIV[7#hGpRtj01i_n.W9/Y:#k$ina(?q>p^YK.RAD1P)bBN'_5=lV&>J
+%M*@Og at +a<6BIIP(grF6QGlnGRV_XN,P8ef$-3".JdRqU*-L_qp;4g8'2fE>Q7:5L6V=E*X=Rmoja[++DChCXq*ZZi.P^h.J1)]:Z
+%B-puF)BdIs.$;]^*0XN6mj?pVLVV8G:H^i=g8RQm3=$+24=@i&glIlFPqmWqeiZle at qR*^g7`76To/Fg]Y2TFN$7Ji)8HtTSqfcH
+%WON(nI7uGqA=kun45%G:)6LKjK)[Xn)pVaVKk8(k$:'H5a9$g2KT`2E--m2(QqLc<>Z^rJYq\rQCX94*fDkW0$!N!#LcqZ':FJcq
+%6CKU[M7^Z(/tD1XDD#mt%/+<o3d$Q97P-H?3YpWLm]3s9M.A=&o<&_fg6ZkS)"G9(rgGt]QhqM8;.T*I9lblb+1HgbFbhp$2`H<U
+%C"\$1R.i]5fQ)]g+fLEkJQ-40FS@$l"9mW14bGX+jgESM3Y*ao at +1#m+!;0S0[3*p,u>Z\AAD9D'Q'alFjdB/qYk&D##VD`:bDOI
+%pR(U47p!i">Atc`p`OOn\3Q*t^56WiQ5^ttV8uE*Nu-"PVS(]2o<NkdBr5H9akj%mZ[>40Y/lFTlCu"*R1_461`[a*PV4jmd,\c0
+%BfJF"3X#]IL\uJL8I9MRjQ9a\o7=Ebjss-#o=X?PGVic`YdOQa$rdm:o+IkDgsFm*@Bt]D8P[&i'*>L&pl7r&Zr?DR>7.5T\W960
+%n`I:BK-r5SX:sp6$.)HaTLISH:/##d]YA6eS@%t_g.G^1;s,qbH23g?l!cD at HRAj_176]2dnLF at P#?<H(76SgSmC6pP6E4G`]$Sl
+%4RqLNC&4G$^,^S<MRXKE>uOf_(FYoGB)W)C'tS)0s1^"`fe(T!:+'8jd;P6CEfP.;/0)66\]>!fK]L at k"XdG*%H8#p#Wq+J9-ro'
+%=A)ZLlQ!\CRo^pR^HI:@AiYTV?2q"3F*N?"- at s1`1Na\6b'gjJSTfN4VlFM^VR)o%M2K_J5I<9&4o_1FAe,j>;+KTgB><Xro(fmS
+%`YA8$+?-K[E"BR9lh[2]7>][9rWGaQ#ZkJLA1bmO*eCUIe/(*6Ml`&W+st98 at U/uRIJ(/HFV7\h=35#/(*f;7Iok2Eg%B5uV().c
+%kL2UIm$C<<?+<OWZ_<>:p<eE9KjJi_iL1Gs71GG_1>0Fhd=P/5X[IW$^DU)-q7:]p1ORb#o!R?-Z[PhFg-h^MZ#bl<R5f'*'RZSJ
+%,fU#P;LLhQhec_l3<ZV498b8IO,lq`oa;E*"*--f;aI">C!W"/njBs_^RRU(\JL!5b%'ubj,li>A(Ek?hX>o":(LFi:[:.3FZatb
+%fRDCo&J@#'Hic(APNP&8=pnj]m.=S:c:iV>&-RiaOn0aDoUG(/o\t8+0*mG+HKt8fGLCK\]n5EG.WRM`W<+G\jbj;2';Wm,8D26+
+%Grs\iUtW4+aXWK3>Auk8aM`iG)#0(n,1-\TkQH]V0J$PY\-TJY"6f?HDH/p_5C;Ps2a/pa(e+E;8KJO%[&_(KCTr8;pP2%B*an97
+%jB2tCp0d=,km-=6(iU\f0h at qm5n0<4,!0rhA*ash2G`("\L8VSMnt:T9gX"]c5,K^,o::S]0NP:$2m&"h6Xs76&qG61t]K#"nRc$
+%c74V<@.)C\f.pLubaD`"'6'O7I)N*4\j"0k.I^4Sr&@pfFdqeZA`MRUCL*,U0btXE-%1hR;k6(,gn]q:E".M5[bJ&mb*4- at FqRc.
+%;ZW?JX)Vp4k8^Fnb[gN4pUAV-d.$*5_4ML`$o.ckZ,t&oEW>q$F"s:9[k4L_/aRR2=;9WpTooe*)j;2a@/XTh9:.fe4MX/"YK:S<
+%N906Rf+t1=frR%^oja\$ZM^YFpN'MJh?N;tU,AK$E\>pf'%j])doJCJ[<UFt?YZOn)GK"`'gEpmC:Q:f2eN4k@:,C+Zi=c<c9aVm
+%8L7NapDJ^*&NQsP(9I3!fkTboG4d at _^,GBW[+4^WF)i_q2&@He_+YB%52S!5-C*`ID"=.=P)BObF[Lmo/d#S>KMRJ5#HtFCOg)=-
+%5$e2]4tV:M(Z=FJ;)4K'?']n.j at r/a,gCA$LfgQS8K"\WP=L8'@CC<0WL-$RLI#b*:X9_RO*eG%oIdaAnr:e9:Q:R'*]k%e-]fpa
+%8eBF'rp8DTPb4cOe0Te!;P*$D:gW-kb9HDJ+IG++)#b_]9[(7bheKJ$:>`&MjgLFhH]UoBIr5#GI5>"`@qXrs>OoJABsX+1cJ_9[
+%E=gqf.7)=)4?nM1Y?s)6UiK\NAZi(QQR!E:PSJjli!(3'lJZA26V`#pHqTPb.-'8r9F,(,gS at 6[B>H2]o'I&%Clpls2E5;ji"PAp
+%6RgKPA^?]Vq/epH8`&Oq#a+o=n(l7$'@r!U:dF2WE6W!$8J.\NB=0P'ARbV*3$qH[Ikg2&*5=ft^iGt%VlfpZQrV#CL2UK/0KR)%
+%BkuD/oUKu6,)A6`1m&C.!r.^1!sH-amGF>Apb4M%0Ts"q"QS'"br79Zf0.ZeM0l'\Ys$f*H-Zq at GNB5GN*+=NnA0_]f'0AH><0ea
+%ANPP$-dNAG%uR[goWkTGH"WDoie98<'WOX/&"Sd:?'8l>Bt>babLKBL]`BX,_&c?#FfmO-5G>G`#WkZOm0O2le at FS1ht/*R16bAO
+%hC,/V,ho1^->$kQ/mm#];kbJUKfL:OBX=NMS5<=^C>p;j^^Q9Z$!m$m_6p_f.ag-38F]?mT[<AVT>]s:.0t=+oM=r!p5[CPDJPa@
+%:J'28#1^HTccETFX0\Xi+#">:mMr9m3HZdY#PHn&rVX(OX"EeX4=.h0+mqhd0+g's\go=oR`N])8RACfPJ5 at RN-1n63V<Q9%l;#<
+%bp^Z.[YZn6pd&:1,Y\al?oBn!f8r=!Tha++pUlG$9<\=lO^CfI49Penr2e4`V[bK.A"W=!dgW]Z#u>r^^*LjRmf3\pTHGO;Q at +2L
+%8=(o:3JZRjd7;rl+$VTB\mUmOh^::'&d(-E#TS_dS1qaS"J(_TG;.b3JL,IbaO2#TX;eoY.[s]8]C<J-ShX<?K1S$BE+,M;DC>2b
+%\@c\hP/c1f]2H2eNI%S/VJJHSR7 at nbnGALdhmN_6U>lHm1($U+@`EsFqIr8Le%bX"lm-mT=B#"3Z+T8l2IIuK,1gGre\r+o56'l9
+%/0qe8/<a8/4O]llU`EeE5+j&'6[L;6RN%3RIumo0npE-%#+>8l+%;Or6)+n1CFKfd&7Jik0XP^;,GXcMBr5jMmKDeB,=+BJ[j&R&
+%cHa%ILYSYcGo6T]l4i<[$GONMdH2&YpfW'f-Wr&_T,ZUcG6r*AYhY:R0p_m0?t;7'mhuaEU2[LLb'!Z,j:3_PH6+e%$e/;pF.liW
+%Qo!XBE_66A(-bej]g?6;+ou1q6r(0o.HNNZSS!:6aC?AG=.kW0qWH&PU8J^lOU"-OkG#k;T-+0?2QXEs4I)J;i%YV+,\QK,GKm$Y
+%rC8N"g?d at 1#-&)T at mf8GVS6c_ajt"4]]rQ3*dnZ0R*NuMI?YU324h#=]>;9cg at Gu)[2STDT%'VZ$RcKrai2AYbJ7l[c?<[]ne0m/
+%qVnP<)"$VeQD<A7\^A%uTA7C$Ln$DnODGRfRI6d,6q9:`49mL8.[u0i43aUi at CO%A67Mpp`B]tHC6cm.(PJ4aE$l`rYkOa<l at EX/
+%,Oct,";@mDKt:+"G8Df_RCBj.2=PD)M>pU\;/6eDISA'H^WsdTop=l%[7g#scpE_5+3PtKj/uT-9Y$>I/=63s)^W#'EDBa]Zs43&
+%BVVfLP_!6T4iCn&4p<U+mYb4PaVV3&P6]DeD7aOH]#E(t6[3(b-ft,D:;Pkj=Df:9)mI*RPW,mG+bfS%/TUP!4qu]\RTub>%<g[V
+%UtlYgfUkAW%dSCA,eL_1DsicfX5F3;os)AE<m%M(%#AKCF.J6.h>2WgM9N3-A]?J#"H4_/.J#$aZ!$gmE2R&pIN-u/eM_NR=RP)Q
+%'&j)6o6o5/c^bD(dU.=feSQR.m/g_3&8Y'k,PPU!qju:lir)gfJr9`+DX0KQGp'ZI&"e3Oo5[(@"%knpSqfU,hGsQNUO&L=Wf!Z"
+%Z*@0aVtO%nO at d(imgH;M+75;P)JC at fCnW::P3!u)EDttiHodjU<L77R at hK%Aa"5[jj(%AdVJtdDEbU-S8==.PmD)8.U6g.pa[?UO
+%F6sr&?1]oppLjkH8Z[Wl+GNTgcTUZO.FAfC>4!/_.!4A"?R9=Tn#P#cnjUgdc5jsqpu=d%o3LXuWDINhY=c=VPJ!O1^89+WT%bUO
+%anp8UmI0^>-C^]Yflm8TQY(CNaNL!O_9Q!6A3(F[-2!XB>+1:!&(Yf1$@_7t4P!9A4Ff=)"r0-#1WA,t[3?uWr:!\L2d^A^7B-7Z
+%SES`R at L.Y<GenAHkFOGlkADdgK+^T1H`)cS5>N2uhJ<*9W2_:f\l2XpQeA/\\?GXnPLms<^jA]6O":cp4JJ.`"K;I[.i2V?<%tNq
+%DGB0qCQF)E_*HaKP8""jeHC](e%,^)dCO/CerbJ[.\Y+37bmI=;FhQ_pQi9r)4,Fc[*0LJ^H(5<`n"]B&9u$9`2k?:7KQ4o(5ioX
+%8Y0#+-^t%t?=4nA3<slQ"5>Ssbrl)Y+Rt[+aE"0`8t6)^%flVU'rOM,eip at 5"'k<mPuN_'8>a,g1p5LDcEZ&#kT+DAXQ)+7$K%-,
+%f^uqYSJbT$;i6Ub:>KMX&o5?1b1&cdR(Tu#bKk?;Rs'-IA=I?CK-.m$59lMW5Rl>eLSjN%ba*>8&h&D,R!`2 at e!=9 at Xp/5g9Z_ at t
+%IGJj>;s`WYdC;5rI[<<`Z(B!i3S4roH(Z]is7rnm78q:bCHh5_WFSaV.N3X8(>KQ7CeR#PJR/'p*JK(1N*j3[40S9[Jjt#*D#*[g
+%c(Epq05*`)Ms8*r]JQg>R<miPVLk:q9m.n>Z[DSr%-*Y71u,c_F6>`laW,qo6h6lZN'`R^!2g!o?#$lHQtX2m"AP3ZQu4j/l><p`
+%;%gT90(UiDBfSnE':4=4\pmsJXGN%4]LbC)X!@cs$@Yc;8=1Y&Gi!Kq_JqPb@))<i!ko.ZG3Y+k49!HK)L)UBRVYL!FfL/]H"X3>
+%#](c?"XrH6-<(&La*o^U*96]lo#\)nr</8d&/'5<c%FQ3BQDjiTA$9NE>^`=5LMDB561t3r.BTTCkS[14`T'KaL6l"ka%T*SfAo!
+%fl5O!h`5_C2^[I+?!io>WF#q>m4:092M$-m89p21(;n23n,ZtEpL7,_(l1j]ZfGC`,`(O&2b]d,o>"oD.M at C)Z\*`@m_<Y#0lXSM
+%QaI9nS%n+^-Ldiqc7cFPX$t&ip%la+aYMJ4oj]7GnHjcI.E6e;=(@_0LS2j/`J\03OK.89hGUO0q$r7GUjuA';Yp1M:-Z'Z at XE]?
+%QO2<5jOFkj;fND36Hu4q at qC5(^89hMn%i9?'\Cml;lXtcM5]WJ$Z[P<`HuCHVd2]D+O`S=$['d.g5:CZ:+`U_Hq at +hO4'3+&UG5q
+%H1X.lXIa7gA]Q42)2dS.ofn)2P7gbKIEj/9O8p5JRUspK8g<>:Na]brr#K\j1G6M6o]?'&"G at RHjKq-_TU_MlkS.H`(?s1W;WKqJ
+%C15O$P.#N(`8]9"H><P/(<lUhI=P="<0-_L1u&SL3^N$JCOtq%`k]=>A4#+d][arkq]S::F,.Qq@#7<(GK8Pm88CNM\P0o:"!QYj
+%*lp.5Zna59`"NK,A at UIWK0\hA#rK%6Vp&QI7\fHY#r:!1 at bMjkO*aSqY"BEp$^r/5cu["FC%BI?oDGIt"9Bq.oZESM*_WPM)h\)S
+%V0eVB,SNF]W at P_II1EE(\jW`,:]akdG;+j!X\>^-)fMu+^2=tK-*`#NQGNBK$(l1CZGn+nE:7jCRY.#LA40**Y at FO>Rb[lr>DS5?
+%e\c2rH.&/p2JB3f&5.=rS>h`n>B?ed8+c]G4Y\c9CYQLZg*uic(p3DYOIN[e8Zb`m8AKVP!KM5&kL#16ln<H.'#KHYpnBh\:,>Ap
+%AL&O!M3abU,/)/R[j1;\!00tHmM at s&m8Fpa$&0;A)h)+bA89\k!ZHq5r@(5Lq@]XnVcJNFPBp!e(U,XUV7&68lrWnfXY4jLYGnIu
+%`$/k#*)mRHlRsEM?:;1RPiFu7HW.DqaDehDg#OB);93U4R3o6?dRG)E4]2-p*__"]k,VP:>KR9,YIH(X0#iKfrkUAGDAQ]@?$[bu
+%Vdp\AelMhb5-H9H+LU8FrcfgDb'V7.m;D3oj77>APR/JO/%e(C"ja9Z"%R8#cHQWLG:9M]-_]I.#<?AjE]!*HL%I6dfRAnVs5)5Y
+%/][TNS at aji1!&R:C/S<-a;e4JS>MiqlTs"!&`d81EV_+,'DejXJG,*)2r)&WDPeh-lXbB9%tPB[5]&bZ:=I)eRq\j%?aS4rB,Mo8
+%WXs!R<KSEEPMT?UB703F+s5,kG;.Z6f<1N)jT\iB\cDUQ4jqZbp\l^uJqO3Hr7F_HQCU]Hq&S5>Z;:=u$n(h([eEq-PfB9!(Te':
+%oA1nWdY08 at nLMNDQ,!pRU>V!$7pL(rRJ^p#\m%fgDk`;<#`i3&S=OWP7$_&(NZ"gKO1o>NCN<KNDq]u=P76%o,#JnF/bYWpK1)Q@
+%]O9'iEGI0u+/Ste$gcj/7)XY^hY;k"12Qq*/_pp^+fX_b0Tt)3Qf7[%(qjtkhD.OV+/Mt!bR]s>inR`N3rtrAVVfB#CuF)M at Y3YI
+%^P1p_r at 7@DY=?V;"tD2d#o2KGGTo*aoMh2_D5Z^(;S1't1d&HoF^#5A?LK=s1mC,3Lj'Ko>Id%bKGNl%7aP9:D5:PI'OdJqGa1)m
+%qZKk'&5m?cG+FigDQc6\pm`.#?<UK7r6BrY6I&eeS'^G2l5WNp_Rr4hPc31:<cYKiH6%jEa34]'FfOP&B!>!AOD\bUVk+cml.T0c
+%QGn"i!Rml at JX:^B4X3oV)48_scu[h,>h^_X+d833O+?\PTbP>o^6=p@/i<u^0M4%gU7%/]O;_<+-*^q+)LigjWR_Ee,O7tW6N#S8
+%dILCN9'Y$[c`$TsIWmPPeS.*er4XUD9`i%,o\DG1nq?2P^k@)ob'tcdmnOXtm'*JdEu6BPoD&IFPF.J_Iap0^jY]+$B6)`!<1^5c
+%jK>$<A30K>5;bYDB;-08bH*pp'F-SSn6/[h;6:@,>Ij_DJBgt<TkDi*fe1i_JJa5.)nXOZ*;_d07qV[t9)(, at hnubt9?V5OWJ[]%
+%R at mH1G*Fd>W1>t1%okMW%+NMXE?:'N;M.1-oB)n%l7i(XmB<pj%TCa;XDA>k1'""uTN972M%l_$2l at TUGY+;6OTp,s0 at S3/p[^Y@
+%TV_No%-IHIA$BTPnq^1Aie9"lSoeSA0YK\mhH1ut%niWuStTHMp[5u_!<0V at jfs@BbpPZZSWq*s=GhBFB"t='SgrsbkF)?@3=,7L
+%6I,=S=CiZ2l5+JQhiF at lS7TB3Q4JTGn)-KZpk>kj7;SqVh)rE0WIku2K)79"k!t&LAm:Z-$7GU7EpH!'l>1Y7)\R&ZZb"0if[bY7
+%%so;"HCor4e4//Q`:;EmMmkO\#>/+?X[tl*3HDO*:,CApj6R$g-Xn^jhN(Lk(#TjDh.Y83e!Oue4R21=WHOAt3Bn%VKW<%od7Fep
+%/[^JgRk<VMk7WX[qDM(CUTXpQfBklsC,mt$Fg!"8g3't,D9c%hClG\6o:D:3rH6](c9hnLmp`2*G$`#2jB,"C+N!,u1h'\d-jY$e
+%"S3%ojMKj324,o!qe\jgk^o<tU;ao^/&sEi8\Vk9/'mu[C6FkoBQ[I0o94ue$Jh][*\P><Q1k8=1<5h$9V-*j@%!W'I:mQCC2up[
+%YUJG!9smui10>ZIPu%(\]sMGD&AQpJ#52TKQO\%B:PoO;8m4#uZVuH?)m>dPj=2fii0sm\dMW1'DJJ!h3u4)<H6d8:+AW@"^<(N2
+%;Q;$%"U at 2*k!\>6I:M!@m/aoB]7r&0[<LqOH&(_?PNDsgJnRr<(qE'5UofUWOEd6c&8Y(#j:.pDm$qa#*62hY?T#nX?^-Cf&tBF9
+%,n\O at PWZQW3/!-0)?%<8,.^2'_/[mQd_[llFWPEgps*F0",W2H$d5<s?>rUr6MWG]3:E%E;%V6gO:)Je9:Sc)ZNoVt+FWa&R4?\@
+%-d2_K'%>m5G)/ICpar*pO7M%IDlJKk%E#@PeiY+ahE1D]e'SYMq#Y_c2<[Fd?;+5kg<`\I$KmE09]8L)B_CG8#G<+Tas\A_d*\q:
+%.ihE7fuSLkZsV+?V]Qn_[nq2.AWrl.:`Th/s7'_u9/O;3 at O\aLdrrS9r?6X\"fCbP&rT'!40>09b2MV\SOX[B9U+U2l?s.LM;5%1
+%LLl!*#=6`!"<mfR-fOD&W37<-lJl.<</F/:JV]hj^#(7LrT*]T at jc5SA,5898nPUBq=jNP=k8r0O`(eSDUUhAR6_H;_5[IV:Bna\
+%9_kgSS'P^"Ut'.M>\lnkG'=#MSWs"\L,NXF`Kk>L*1/-V^YXc6-3B`+BKL)TZgtp"G?_.2?GAqLOKMo=*/^1bjIjRAeXeoe/_leF
+%N=HR@'R3H"_GN=)gR<N0X,%\agp3]=&sSM_qQ?2cM=um(^;8lqT]7./^43tGVeGI[;Sl"VO>m-$0?6;dh.07P4nCS`Mno'sr^T94
+%9hZ#W=S\(`?m'J+e;@%S1M(E1g,tZcgV6]TCER#oe;^bjEQUN;$plB"Y92lgF@`#'irUsC'BI$c$J\hnYW$iu*-,*:$(C6+M9!]M
+%'pP at M0\iW+,QYe>1Jl)gFNQ4.W]$<m<&%-.cL\CeI[g,'$C7FS1&.U"bT_hL]Rje%gOgsJOVl7,a%&UQb2kKW3ks\0oqc`_kW4LN
+%Y'N"IOGWO_P),=A94H6ai'9S:`D)URF7F*>s/]boCZO_,lfK7^M\KqZMP,:scqVET[r7rsdV\@=:F/HU4K^$)OT6Rk8T'hT'fgMj
+%mq9pg?g"4:`C<$f)9@)Z.0RMQb``1APK^C(NnH,Z/G&%'0BEcA-(h`mC'EXh8eEW;;Tim8Nt>->6FnZFRV"RYTL"UF@:(Vg7B?9e
+%p6OHQjiFoaRVjdSDEhcN-O2O*rV at 1?><"$mpip$!N[3Q%>R`capHp-4!+ at aSf'iRa<JcrYA9Wh-euJ%@f4TAm58,rXgD\M>BWnsO
+%qGI>,f9of_;fE_D*(do9PN5:U3lP<"g6u68l^(O*SPGSbjCBON2%)26_dk3AO_uCH^2o23^amNU*8n!X'g at M6%]O8Q[(Q2P!s[R?
+%45mr<>T,I#NO(b3;dGRX5\]m69RH-VNcIQO8i9+a,iu;-*a>h%@%/0i4?U;kMo<Zhn<jk_F%c+o5(1Hc_o<Gm7Y&uYqWamIV,;oV
+%Dq_0rOJ4RsM#tl36p^3JCd7m?#BnEnm-C/T1Thfl6/]Om]0H%%g$,m!;n;e].:etWH:71cJ<upp45NUf+5>NJdkE)_p!E=K6"_Q*
+%Zuas>h_f\G$pgPDUu/$NpX1`0!a8OOkK!_DL1\o(l1lmfjt9\`.et5J:5$N![p:AFT8aZ;`RJLu]2d8cCa2//0R[t,n5,%=QDCk`
+%dTFL1c1BVD3Wo'Xa^uoZgC&W&L+JSt8C#r)2c*n.N9<u!r'>u#Ep[m3FnuUW[X=Pacf:@Di0bbjJ`T.Bno<V*[NphZO1+,4r5#/h
+%D7hj6,VIFPnhDllYr7l<A^bHe&Q0GOj<4[]E9p=ZHh+TT%Kkc)*ig_Je,,`0SH=M(;X4#sZ#T8'oYi^8e#)pL5EW2ligo_Wm9/P5
+%^RAsFW&AVAo^[E-UMf]7S\Sb\di at B4q(=00THFu?nF\i$F6o6Q+Q>fg]W%Gs9?J&#`TRu:_Y69oeWW9C at Vai_C5/<JS8a8>BQ^Fo
+%DVA+Sk+>SuS2>Gm=KZd6pUg^lm_St)Z.qDp#k(iarFL:Q%+4XCR5/G15Ke/[=]RkZ_(X!]O<T6qcNS at FMVS'!q,he*aUphhQE:43
+%fOF(dinqL1RcobYI910a7&F:f>Ok at JA1YLFMml^G:>@>^DDf'gC-kH4:4=\5Dn\4GV2h(e$i>G"'iY^8lZ-L=]X^h[&;4%]'V.cP
+%,^5"qb?V>U^8f=6P0DQP=A(s3gp8TaS%:1U?I=qSOrX=5h]*bb9;i+u,;Gk?4Z"N%o'"Rm^i6up at nmt4b&Q9s64Qq&l6%-jBdJ&)
+%F#\G?%(li:=kdq3^QZqbS'!#2P]OM+W.3r-/SIi].o-OPm/IRJ1oJ?Fks>Y27jT#@+X';`5<"ZXs7=ofVZB)EOu:CTDU at uD2G`L]
+%O"E4\$>[=3Ss-N>nS'&F?.7qf(/cl?9jVUHT/*fui)pTS]e'ENhgF49)8#?_Tq, at T.2\5YWSBJ:(PsB5gW(51#$[.An0!>U8:?`/
+%REP85Z#j49-DD")-,kd1M8b$n2:23\5In)\3,"-q0]f"#RlE/tE^&<ar:5Nbr:sNcmDf+H\^l`CE at Xq0c=jmB[82s*b0s,PD+g/f
+%m6crs1H(g?Q$64e/r`KRAK8A:brQ0<*S_6&Yk18t%=6tP>++d)l,/t6"!S2IJdd#5\Dndhq=`L7^M1mY(BW[!pN,__>gbl*,&[df
+%0*Z92s5R91V$+dBN_knHV3\l]s1WHp&th<D]CYH,LNnEKE%NLsK("ogr1koXnto4(@hK16id#s'lQh59WM*gh at p&YrU2NuK0\*;H
+%HT!FPi#YcZ\[QX2%C&":F14D,2eGi,=f1k!?#n-ji5lo,eZ3s2G00O[>^p<75k_K at 8P*7jHgDc9q"p!n)4V=9bE3-J901tTnB&*s
+%Xp?\COUXT3LaZ+Q_'#Ahi15bg9BFVT/Sk'h*]-=s]Y'H`o?M?%bBKhW[Sr^Mfsm;p[>S&S5-%)8DI#>gRu:YGqWTToOj%T?N:pAC
+%i'M7DjCbFG;g^d>J4/0kFq^9Be:2R"$<@#Yn=&G5A$_*QcDi``ILg3XhHsb2TWpAtX!/2G85 at mM$bAHQi7(iV:(KN9Gac:.kdt6r
+%U$2`9GE]aGr*57c;/E\6PCW:bpiFUMS at RRNQEhh@%?F+A0CZ8Ga!Wf3+6$#J=E4o)+0[bAgkW&F,E:2Y=\P2=nN6f+o-CB=`7]8j
+%VHg#Z5]HRKOX)3r&-tqRO9/p at bZ#7e^'FAFc_''-lK=XZU8=B#>4><e3dp7ZUXs[,(>!W(5%a=0Gt$G[k.4D'>dZTDf>s4To>5.r
+%i^/ge(QbEPp?Xi:\6ZNpEBCD/205[mnXh+$?o7PjI55iEknX>UWQ$uSOqYedOmK=*D*s/67U[Ng8hso[CST>PSVKre&pG?30El1W
+%If%t at i0kbcYtSO$%q1>ea^qXl)1nd^6Q<tKbH9+:4j^d>ZD?hcR?!RlDjfRQqtF3/-dTQ?f*!#9iACT[Tb$[\?CD>(o#Ef4ql3oD
+%:**tA?-VaeM(_.K5ncmcEPcm at b*lIW6YG%fLluE)PA8B/g_/2m_5B\44Va.VM'k7(R/f$L<*)E363]8KT;J(U\&B.?=hA^8fD8E[
+%OMX:A%`EZOo%M2OM6WAc^JFV#emI3'WF"&2p7t''j-37sUR_2'Qtq!6-;Gk]Mh9-mTe30edos*VPF*GnS&d)gd[:Ik2#ZK=c at N6(
+%$Tjc4jCImKaC_(01Np>C2)b,$C.2n$f:*1FdIo6ZME;=q$>Fd/9C?/hXNU+8N#DB8)^MB**.uGZ>Z^:4mlC!]i18ZU@*bM.^p!gG
+%r4YlCOaips`nf/7Q;j4p&.+hZYCYcR4D\:`f8'tdfWu!1=me_D]@TMHJ5AnUSM8,-A2D5$_*:FK\+-S`,]R^5+\KJei_2f%a$G3=
+%Fk?:CMQ#/?r7-,(B[5[\HqR4C*cOkP&oR!C5RQepKJ75;33.n-1k.4^&+o\*r2_m=@]<+T/Zn7Y?g`\)ZYhTi+m"9L0GQ1]6Z at 1s
+%*4qQ3Q\NPTS!PpMd3jDZ_;M#YERR?PcjgEIe+PoS!CRQJGdP"ooslU-cAtaWX5?La!N:d]5&9?-;YX$PWA1<Vf4C*6:8sjaPFK+L
+%=]8a40'c7pXjWOs;Z]eF=cY"uP8G9=P_)!I6 at R7YJZ<Zl[NF=.^NhonInr\Z$1'$"'=Z5-ZEmp#VD1A0[Rbs[6dNU<:q]^kYS.h#
+%lGVdp&s[5hUcueOH,WJ0Ga:!."Ze/RrROp6mKil,B%X[FZ_;mMdY98JJb:=*)!Et#>4f47s!UD^J+g/=b)n.kU7?;XPRQpu.*'r8
+%jZ5R%PSd^?.VI(>)%(R\L\q(Zj]D#flg;TRE$:=hNjj3>ICf[D`459pG$"86LnTk&i!&R0e8=/uEf_FdRXWu.]d2-+C<BIZP&X-8
+%-.u9sd$r<-a*)3qD6fL?$'X^i9eRW.,8Z_.E9$5J7%5m#\3>>e$qG at B;?Q[FpK^Fl6W7<c5Z^]^i"kpUO&/^EWq)Dg&b\<VO9BLL
+%RiZeSN#lG#T$_UAX7csg[H%\O-hm_kh"FLr8g at AZEX%QuTNo/XIcU69Oo%pg,A=3-F/Y=fRX2"[$'F1Km at kk;amrI0=c&u'5Z4>h
+%-3d&Ar9Jc/-2*"e50#A3\'gWS_V$nT*n++<([&p5=X_lL"efhuFHb.%'%M.Y`mi,%0KGc<"S)d`0/dE[Y#/5H0TZ`jmZ]h9B=OVN
+%kd^_<6C(WP5WrFpRg#X&3;&C'ej,pi1T^A=bh0qW"X\:3<*W!of^;)D#ql$M,F;A>8/L1%:A3)5#P-\-1iu5d'-G-D:VKV,jjOrP
+%Jld9aD5E>eVU`5]ZG7T[Bpnugl497.U<L=R%3Rt&j7Sm?\`J]s.LFBGA3S<:>?`aH"$'GT]::):Qe5##J-S_4aqr-KMdmd\N?V6Z
+%oJi2fXtiXG.KHG+agL#Y]B1q6kE`BXK"Z(s]LN&-]'=Q9r?`"G0fJ5J8TnN(1Ferah#P>r4ZCg<qVP$*1N;L0/:l5fcM'YPl6h-V
+%R;:-0AF-GDfoaHaEWk3%=l(45\]6c1e0;m'B7`_%r_5<5K6eo8eQghEGT^?X0/e%ZeA3/3kK4.$U"%$i!)=S;1C47qci_=$";M.&
+%B73Tt>3$l*d*G/r.1pgHXd<oRCpiY9D1sZ%8X6m>K#V=gO%$%k'4$_-dBo&qK966;;CA\h0!pM<PCC[pnpPo2K0qQWs1jB3QuGhn
+%Qu4m/mmlPaKp7iN)2O9Ca;QM4MukOIQ>a!K at 6!-dYuu$NRm2JmZ=ju76g(7P8OYQMc]hj6ni1sgRd at 8l$Q%Q3,a..8fI/a5?\S.P
+%K);9LBdksdij<KnHK8M*1?D;aO7W0oDG>O>PKc,9H.$</*KernjUKad>8b%OGm*YH7DHB8gR0=OZJ(U=[fajlhu^Qn+`&,k!bQ65
+%+O2&bU$":;O3!O`JdQU,EbFr`3JN$u(7]B?/4A&\ni=/nrO-OgF$5ID(KpG`S=Z>S!tBQM,T';Bfp:D_9b:\&jS3c^liCWa*]/;a
+%(!Kabo)?"!4J"G:;I4`$^RC4bFgn`)+eG at _.`F9M-Th;(k42!EnNO+>k5([QQ'D&</PaRSY/"?V-^.=9](U90XiJ*f+[N80'-^df
+%djXF;QX*!!Z<odn:>ik5lHK(0?$E0-_gS7Ke8@#_B<FIldO10J$&EKla8Cd*`9M(m35e9E`m&pD$nBE'A:Q=*ACO(iOTsF?I.P!S
+%.lRbVqar[t`QeV,'S[[_b^<J/kI(MIjL$6D4T=eu4Y1B>7uB?e-bVOpQeU:09tB*DXWW6j2>pKmD^-%o9hdDtOqQ'72t.c6SZ5[O
+%+qqtkbIc6:]`W^iY)k:[bWOXd11O)!h2as)(Fq`sQR^)SYJX[`,@#Xhiij+mE6P0B\P%d:N6VJ7F09`.Q1T/bksgA9URu5G1k-Uj
+%qkD8[5>4V^'P"uQBCa9=fO.U(!mi;XmnB\E at D(eaTC%jJ[uRRPl:A.$!_99GWPJ9IMt8RYF+jE>nH<:uSe@^3Ff-sS7l at o8+QY0l
+%H;UmS5he"dk1m_X7XL#m"o7.Gk&?m^7`i0taUq%#7&Bf"LcFY65hnDWc+3^%F1JOZ5<Q@"`YQV8P^C?6EX3`*hE+`#ElE=H+I at 4[
+%En3/*r*f!BQ"47Eloh!n#s04Rhi-,=.WW;-A\qg at Tf\oZgX0s,GHdeNd((^jm+;!L#GS.0r*$!J7D^[HaS^UZ0^F&,g)lfrTH/?;
+%A>q6Z^%`+`-_&6bFgta,C2Pr17^:Hh#@k=BV*ME;P<>_GWR\Lq;#EB;,a/@<NIM6fZej94bXpIO8^_jrD"oV.K/d2.f'ZSsm5p4h
+%CJ$rS1b6t00C_&@o<o'=@IiO7p)&'t!`:PjGdSQ;DDtA*p&&Y8e!K<hrE;i?H_6pj8sQ<`>Ya9oR[lG-/gp?[d,_OB96ZD at fCMc5
+%DtRGUo'8<n8RppLIm*R$a"'%)0s'Q$ZBF"a#:0GRpoN5,q:Y=o.6$[R`m&1g.54q098TISnAB<B:5dL:Sr%BN3pE8*Al:QFK-^;-
+%m2EW+"#-E08!V4giq5&9(1`l!l4Z1`+)r[^()t4Pea'YH3NY2oTn>#eKLb:D;CEZV"8U%41p!FLlE$2aV4K9MZ\C)J5S.).<1aDd
+%4aH3Qce8,'j%^9&DM]j6A&^fDmjc=F[ODMBVEhCIFY6W"Zn/;rI_#+:'Bjm=`o'FUYiI"(e5%[4Z"VP&\):#UV6mf;^un8o-3dR*
+%[ecDc-cP6S'@O)!(XGU8^GmQ&'+g4aKc#p`_b%YfgHC;hQkS7F?m.[$g%D`@P:qlXg%W=ESDd;;l9V`hIDbh=O-B.MG21^V.ojCg
+%ldD\3D5sMEg3U%+57ZtN)]eaMYsrGma!>j9<'IQ4aG[#RBs]N"EbY`THD<k2m#ZD8F\H[ABQsm1S(s\8emN8)B5jQO)[KMo;[*X(
+%]p?;3mQas-/<l9.?Rjg0Ost,LEubFh/Z&0H9];J:/&"n/;G$.Ll]D00NMU6jgu/\P=c#,$UC+j_d[4]iUI/n9b3;3jU!hU#k"\LG
+%p!Tb`cli+F5:1QM/o,KDd?`*7aM"t!A0E]7m+s0qMqnFac(WYsajj,*8IB,>>nb`q8#(W/8darlIX/P0%WlSji)L at 28%rrf&olae
+%`[9=aYp[tY>Y7B_/!93l5%?1(\Xq-"dn6HtfFA&q9C.;g97kTI#jE>"aZOia>aq=<P-_jV2/NLpM-\6_f10]u+A?43"OJRC#:&u>
+%81a[G8%ta7p'0a;2n:X,n^&HX-KP8HObCY0;jcVIIRY8X*Y`X8P^0K[:\MW^q9`!aM8lDaUfrBACt.R=V*81Ab#!_^>:mr5RYpED
+%$t1A,LMotc3*=6N)uHjqQdA/TC_">J9<*\\IZS<M>K+"s2V+uk<U%?6#oMI.DHueY1lu(C76%?]Rl.K\Xo3R2f/p!lG`W<b;p;R@
+%%0E%/K`&l at RtE!d_=ALC-V-49fF6tHgQ]s[!PMY+#nB1KX,R.EXF7+=2:jNJ4!?\Ajo&e+m5r>OV6%eX%n<K(Q=!r:S*ju at h<[T8
+%Q?Sq&k*&eaUQC(2?n#FJlfc9r9$4InJ^f+]%\TAC"eRC[D0ZB[DAI"0&,r0KT-**/gGo7OR;M6Il?DH,f#@&N0P>.+>[Z+aFMGt'
+%)V.5HQ3e&Yk\30WVl9EhA@';'mN2b;W_o%nXm*fXOXbK[1i_?g?M-kaS#`N6B_bpm6-I*:,Y*4Y/H9/>YETVtfAATSAjp at -NRmTs
+%Q^[6N=^,(t=8,P=FQK,Lo[4cZj?:[%Ll(pH]=$b=R`h!dNo=C=&5:'_1AGCTLs"^#5s)k,+03l6J%7=TnP$`_U:)LNfW2`g4cCb-
+%VDBt<p9jWg]`C!8N`9=R`sTG#<02J^\u89kpX_Pk!q2VdkIg%fj;;-dZC/b.ac]Hh%=TAI"Lf&^\IF7dJNUl^h/?_YQs06e:2pUe
+%)]acK[N-#@eYHE!3!h;*^!ME,$RW?e^RYjhjI$M^2^>a.*gP6ek*dS_mD7Qt;-UcB[theJ!im<E/k%&RSr&P3Z'+Rr\:oQKLZ\Fo
+%7>Z2VP6$rZ2*iFV8'>A<p#aj+'l0`ip*N[VjM'i^EZ:QR5jse<mAueT,['2Bh0MSWh/tUlZ_7D!-Vmmf3T"\M*LZ-9=Y2q,=6jrU
+%Eu\QYH;?Jm58Q3(Gq=M#IsO^KmCSTLa]%f0-M8b-kdEV[jncI0r`O_BBfEcKe-_D8'O'PkO#g1X=%M%i"64TtoLb*35K5T%]C:L@
+%J0m&%F3&]Vp-MQ<ctG-S=#t''0lp4eOb2&p:E%li9\aJP1:!O-k0n&#`Kaqhd^5nc0(Q4^RH)3m:5,gb'Hj\qe00(23MEhe8pN`R
+%Jd:#XB:ZXfq>Fo]%Bk00)J"t)7IgiWc;RJeE,9[8og$"2SGecsdnCN.E$#))P>GE;eOc/T=9a7M\_*JTQaKUU4\gVe[3Y$")=*^e
+%>MF8.pCT">Cnf[J$]%TaYPoS at pVSGhaEs@bS*50](+#!'AG'mQmT)"95INThTZ/B5^Xl_CLY$LZ4;i87TbM.L+el6cp%,!']\L10
+%[s.0ss(NLLP\i2c(*"Y,/0F)BR)S6J;s-Tcl2FTMk3+ip,tR/o3co9,dcif0HEqFXRiID2g,X9*&qMs#a$GjtGOSf>Y_s+o*LRVL
+%p9ZAjql*6&qKknLZfZ+FlD#b*<dq_`5/A^r%0?UAKLtKfV=kR at Unp2Rp=9:S0#H%ka'*;Hf,GbsMJh;8T9JeB[`Q3W2T^fs-e.]\
+%%-<AT]K]=a(8*=9c at iYHp'\-K-Vcgbns at Red>?ZEpa>k%619QBc^O1V\D@\LRdE1J`0,YUW*Dub]<C*ImKR<op4o9(,,5=%0brm_
+%jmcQBfcuakZu1d]a8Y'[BQ0bZF!54a>N&0=,i-bElF%qT!$u8]=)[-g=D89Xd%?aELNUIcqFhsclp[kKE0YbAQWKL.]]?CGXH\KY
+%$T5>VXas5`N"]S3X`kJo'sY4/,]:9BOo\q(^1pg%[Pi?lE+s'1oacNk96Rr%O`DupcW)hS/U>k?(q'S6CZKuk4h?>e8kMee.5E5A
+%hn_CRK($Y$J;Tm at VH")^>ta0`=btU5Dje4IpL/quLj;#VG,k,SPEhJ+`PO5S+hUQ9eqR+bh"+aP)A%[4_">tdkQI$2d;OY`6X<$)
+%#%CX03%8%G4`"ZjpCS<=CcNqGj>[^6#rl2`Kod;Qpl5"SAXOg\L-6>4*9adB4\isOh=4egenBp&,*$`)<PBCR8K`FOPI/GU1$h%F
+%?1!o4p-&If9-!]`T(V_698n>e/iLC+damRL3A:<A48"7cd=c+4$F8\N2VYs^>J[1.VElc4U[ssRh9LaAk7L.oKsmpGI:X%_P=Yb2
+%/F]>a8IShT9&/f<PAZQB!e^)r[k=C!l;c+Bq,8Z!Pqf[aNr.'=g[;+)`ZB>ubVFOmEsT0W<B[52j#bk.gAEE7buf%)65r4JQ_\RM
+%rm]WuPQ-4oVa9B8Xls;;[[cspq$]C0T!"<76O$o4ht5WrRChNP8R6U]Zo`<WrO071T?G'n\+39eJtgMO5ArfM[$4p[.N`T@/6#5o
+%YfIHY<kAIe8J%OS-M25cf%ir;oY.1T5X$E2O;.Bs^&kEtX/=19c[\9N!)$SCMK$:Rh2n*7G)005.Sc'Y6-/G*nW<qH[dfs2<C\nU
+%^Rm;h,3<I["?n:ALkU\YdS-_<H[Z?Bh>l3 at otP@kDWC+Fp29bkg;kV(jlT6?pLWCR,<D-HQhm_ZpcGj'fQ%,RSdCjEE;FDX,8K+*
+%HleM_an+Luqb5C+$9'tDT(9*,3N-Qj_35W+DE/f/RrZqYN?*\sEluOi#O;3K\]D>Xo,dVT0Mhu8 at L"k)GA@$1E#ht3?eS'PIgR$]
+%ZT1eY7%_*h\Cu')563)90G#Kec;!5m]`IX<+f#]CcTBuGouf6`@R3aknkEM-Si<^?eAV`d#Hap=:\gk4+5o%nrIUdnl2,&n*dNK2
+%du@%aW6KbLFd[NV,uU($nRW/!bCRW+dM*/$qqtJ#???Q0HLn0d_c9?lmkI6ZR at BRD:n1e0k"40Qrq>IaaZa,`V^K:5jSSp&cmPa^
+%MJ1_#oW%J+^;n;I8`XF>E]hFbJM5RnVcV!;*V.kJ%2q+C?eq07FDh6Vb.Ba%j!0OV='-7k?dYafH92oFc)gtUH%B5aF7g/?oBXa8
+%207'RjF=lCRBalY\B`',I9a;83PCdk!sN0^7<VU-R]R&m at V]U\GYRuEPgcEB%5gA#6 at U+^0%'CIWm):<2g925S at go752RX;@YoD*
+%c$8<"dLT*dfZ at PROR:fD3"TSHkJ3F#X!.8d!bDJk#X5u*6/^+aiKI`RCUCJeW0k=GZ4f#9eA_#d3LH-K64$%$(5W:jpB7sq&B7Se
+%h48lcT#b7O-FD-(o&Q>M'5VV+Pd006H'V%lq.2"**ZN4Jl8D9;NL5!3e at Xg5s6`1l30.Z1Qt0]m^k<9=YF!X4YrPYI3m@\PEY<6?
+%>e.ak9n>a)F%giZ"H+C`MoHac at +M,T2$3'];jQ"D!15-X>#rkbb/GXTq)ri)`g<\]n^g*5b(O/DQAiB5gspK<*N,[YYdIUhUHkEl
+%(`\XDN- at i/3D$-1[i7N"/@I<a:H_Nkb?k&"]t*inipHS:ID(Bjc:h]la[*@N/%7(JM7H6aP-N.3$#J>hW='F at SkNpRIA:@=`n:tG
+%NCd6N&l?96JfJH-bn;h[niUR2I59DMHXj^)N=:$"*'$U>&^?]VO<;=YD2cJTN^hIY:!RV=41=_q,(P>n"V0\d"Wf&AVX2;*^,A=C
+%=)p#?D(=QdOd:N?_o)k_)#%].gJ]G:bJ:]7qV:G_>@#m?dWjN$'rio7 at kHgNZqh@1K-">DMZ^#!;4?31>u?&H53Aj$ms!lABLfI9
+%EtLA*,O[QG!#_@<%@bXsoTWeI6,7L_P6ec<HnM`+=&ZUTpP]fj\Wa]6IQAm=pd-6e'L599`ns'Tr1'X?W(Cu*`8"S\P8BWpHR/.E
+%lD8/i<R at pVWjI0MWQc;_O;h<*\Hin*s'\D`a#P9d3td]&,&\c]CFWYk$cuZ8:,&(+L;UeV\I_dM5']R`O)n`.YYKVn^Kn[goD/dS
+%WAeiZYLLE<dW5#bT]ZGh2^!>r_/m+3,/,F;2B2LGag'b_kJ6h>o<0&+V&5[cE;@?]3a$o"dS[a1B$V0ds$Msl>M0gJ at +FZfOM!@m
+%?1SukIL('h,L'1*QmKaG".5o0!K9.J[n%e*ZkI<I;cCB^YV)ApY7_CH>[O+O]Idsl9ab`lS at KuD":`g&$&5.D>i*tS(NC at OLGX]V
+%1XLCbN%7(AI=a&k]d-?rGsesEci/=!<(;s,o(N6E**0OmID/=Y,KGLr?X@<,**!Y@@M&<+Z0-=IN-T8s^LLhl"(#ZsCig3P`*FJP
+%NQX3]T-jFhUU-oN_)&L/m8'p=2lMY^9%0[dq,R`_/7+0W$NH!.GUF at V5>mn)#be;F=.?!-9&u;d,)C=$%5RH*<E".$9-<r7=(op@
+%n'/`U4i!M\*;-nuRNNpO at p+)'<<CNG0hb5#B6p,OD?l@)p<fYkoQS=D8Id.*dLr?Rck&ippi2l#b-qNfhD\)ZAY at h@X-^tX?dZPA
+%R!B1<3(N.!CuF*Wkg*]!9R2KJbhf]>8D%6lZcu at WFr7J_UM`X at ce51M\gY3.gcp'g3V)79EWu)JLXp+<6dXfP>(U6mD>I^_S91f\
+%*V<#"ZK at KMIAGG3+iqkSWOeo-l7Wg*N>GjZmn^e9mb4WUaL-;#@e<--I*5%F8)!Fhb%ss#!m<QW`9,J.mBP8gXf^Za3+OpgHD6RP
+%<)h*.a6C%ie)'"jhGFC>02/tt>I^AuF/bO8GLG>(o"bVijk)2/Z;XdL]Bk_6=C%HXc-dZ0<2YA at 41fC4>_Z)]#m&Gbo#Xhr<56QT
+%*T4]q&f&Ruq7$H)hePpTZNY-+q`WpDXC=#LK1Jca're^2P4>l9cREPV`d/YhY5AZHh%/Y#q5uR]dOmo8G3ZIK?'kDrP`S_"r0[\5
+%fjSSFcW%Pj*S=nMSDh=,Ush^W at njWc(iXbuMl'PRA#?edc%sRGUi3uiU`\d"&La+R\KjhscTLbW![DU[obu[9nS83kenI:;m.[*a
+%YN(C3aN08\pKhcIE[_`T;0P1d at k'?MSXu)<2'1=J*:8&N!,>Vu2'I;tXIW:o.Anm+057)Q at kQJdI&2\7fE)E:(o+AsgfMAWUJo^8
+%)GRbj$Vk7XlWFQ%9.Kb-S[hn:'4kO,-Ci9hN;U,W*t=_[_:4T#jWhFT'\//lL`S)`Ui)B<8SGcXlr]pl??K.pda-"Y6:S1Un*&;_
+%Tg[>A%K"0a5QX)9W+C2tbDr.N<:Z?O#B-7=T&+8qS/)W=e`9Gup0987ie._=]eLHI3glng29<,b"ls8!^a)r8^G[!'buDsp9H(Gj
+%DJXAql^G\4[)*nSQM7Jn\>BMaqZ=U`4lmT!Lr%j2`L!n0C9*1qZ4:ULPjb#NR`A'cq3P0%OuO1,Pp&.t(A](1[l3UZM5K)'/=+r1
+%>tC=KFuH<%,?"fuh;_+jU^/d*gdVokX^l5(HSa4YnCs*656R]#S]W8cV;X.mA]]<=XL7)_;0ieESVDE8Qc4^+B46m.b at c&nJsBba
+%]?L%K)c`nL5q6*!BZ_XX('/<nb7d%R3tE^Hc?M at fk5SZtmSZrEdJY*>aL9;+d8C4r2gbZ6EjO%V5`1P#pSTY/b at U(bM9nt&keW@`
+%1\KHSMV1>^ptK]tSA4=cTZlO>9TARX,gc#8RAXe6a]D#L*k]b<_o.V=iY6/>'L$9>",D>&HE*ae:]^tu)],TUMt.u3A[PfI(YLg(
+%`,k^./GJ8cQ$iP0[!\cbP[@JW?I[NMiI@&SG]5rT;BUIj)ekaWQ"+XE$m2`!07r;K&uJ$q:P8\MI6*t]`g\4_Pe(9*Z^51JD&t\,
+%?=d4!032rIK at d3!-XWFlFQ->9*5XHAm>\7!3_b&[M0U;0!m7tWCeV498T5n?e6\*r&01?*4FYdq3lcG'KL"Z4//Z`Vd<t&:]O2H4
+%K]_)iMh76jpE*"14sE"T!<&+./cq.kr38D_:j at Et3bq;qVV4!Y:OEkur^Krq<ih`.&mcl-*UrgUm4S7'RoSSD*1P<X32eoE_Pu_C
+%+u<A,gR@[!H'Os+_TMj^&ss\G*4clUIaNB8.+ADjn8(Z#:(04/8Qma6ED-(!'MkT7h9e=ZD:u:(Xf'mrF2)]'=Kb8b5Q-SEPG"H^
+%A4aDjg;Kts7(n9d!om75)8'Fn3cDKE at k2Z(mSp_Io39Bl/:_eGK<(/Ge/&87*%m/XUG3;(Ps'65;k1Mpg`b1`[K;_)HNp)SF.D:c
+%K>V8u!1^jL at QR@es86)Yq,sG4:GcG5V"t4(%UGCp at b[uAEN#$4o>Rmk\1V/E='X288j+E@[bo98qWa#V=[?4"BCD(3b;(KB5VW0,
+%nc((aZk"JiaelmR[O%*5,eC(=1-iq:[:hsUkLPmSfGZm(g2ZlLCo-\1I5g6=<a*pp$JrFZKITrTA-uetH)t4ukK&Eb__HssVVKSY
+%06q5CZ,,"J-Ii=(pN9Zb-%OGi3QnZ&0?Pjc.U#*0;LM,>pVG'Y$lAMfjbFq^:2dalkEOYTK>12NBXGu]4Kfsfm3;jICQ-2SbZJ)?
+%-+E;hM=FEA,tXB"6iE8!2K2pfjukZ>`gm at 8&M!'6mWRU5*uVP<Kt/(KJo?[p,OocV_Q3N- at XA.Wrna=r@"#jHPMM4_Df=X[_J/:\
+%rgZl;lkF:]6,Co,TO-F7o*&3 at X/>F'7f>DujCm,I5f1YZ:_9fCr"qF/>IGf#.;keA-(\!(g/#]b4ZTN5IJLRKNI0)oCk)/:@6cVg
+%T!H1V?M$\(n?b']Xgf#>?\>-$ndRaYG7)?S&':s6^^]&58UT*8g*\[=F;n/t&Y>m#J#pj:''3JVKA^g9nUY3;)MUY2?so+VSVIn%
+%NUOOA>>sn#g[i%SPt<]E7:ea<Vof]mbCTD(].Lp0D>p8BfMW`1OL(9bI[FcdUfg2=5B<Q-I8*OE>tQY at P*&3kJHj0dZ<of0W?rHu
+%TD*>o^JJ4D1IL](RgpW_kCSG.ieb#5Wh_,,=",mu/=f:EI?=>'3tnc;0cFeM$6 at EabES9A(jgj1j;0)G0=g"G^>+<FK&anR]\C7t
+%G"sV(<0Bnmq.$,=@1e_Qo8T]ebj%lUau&p3J_0?qh&(EZ_'b('<s$E7eE,^Y>\a7;MB0sD2u-iU#RqQl]fp`;_QdHcpn6h\RG4B(
+%9BI*k\oLO4N:1;A;Nm=s#:B[p9-D[h5oM,YDsN@@+V2nlbP^i=O_?$*fXu#GJPPJJq5FKPgO0%sfUjnpnajI:L6#:1kZBO8G/l&Q
+%@q!dXJEG at bOcGf^DE^?!W1A[&Y"V%T3nr%@bFe^J_c6*EE(kC:jm.hP'3tBa#I6O-19p8`-f+LZS(k+upc<VK#.A-W0qk5B"L=?I
+%/LZDdNQ7Et97)tmhjqDA=D:]V]q.5]:RWj,F&E0JjRA?B!]tIGF.jVDOh:.#j-PNcc$agb^'S;K(U":C=ZO*$pL9NhEDE8k[4eWG
+%!k@[[k)+HGE9'7Er#;hUegY^j8jXb1*(Z3Q]PK$@=AQ)iBqJC&A(A5Z8?%uE>$P:K/J75ph3[_88VG72;dS?A/;#/B72G`3)jNL]
+%s.(\p4qM_=[;siG*p1S3T%>)YQ6/I-R)EK at qeTWr,?N.8GM01WW&[2DGk=DYB%)@jP!,Z^DD>stg1I';"l108kot#cXt+VZXNpDd
+%2H?I`P:gl>BG/sCUNX,;AG&9RCe)Of!TUD(p2sDggthVYpLKoo=[S"@^RPreqibq`"1_.*T6jK=R-uD5g'\D!8O8A9:+/8=,aZ,o
+%;d>iFcNBQARWTQ$EdaSPDH5lRnuRlFqmOZdS,FmDWe7T2lEG^Kma?sjNR1<(iStVu:=gr>c at jhLe`WfC9'+B"9Isc]Hf&TdS@[(?
+%*ZggTpn4%jnmH=!FcS)mDDGL,*3$,(2?GBFq2<#`l1HmE.].0S27>X=`94ZcHIE9q75K`cXKuts*#.L\5V81cKWom-2R+X^k_p[%
+%-;rr-Y*W\Nn*=%qQ1k:id_;k_GW)1%ALdOMB@*=8\!V1qUo]Q.=eY"d;/a$De at X$S^O4R$6hE"<#,f`n7_s0'CsDj0GF]/4LPB$#
+%(R1ls*%;TQV4. at jkN,0YV\8I<^:/l`S3>EM'U6%q at Fs7=A`HBb\M)V.G9-hg%dlMjEa1F'8('fBI9n$fb1'8A+p[/oqdqkXgCeJ)
+%*1kV'K6\jo9M>!?8$QnHBXki?04$\Z8:Rtt_ciio;N\p^KULd3r6RKB9tk9jffeF:[tY(pMu]sBQq^k<_pjmXB^9tL#oGr_=)Qu"
+%9;2*ifmMTa>tk).4E:MpVf&3So1[*ak+tKe<3/[KKCuDQs#I$.;S[ieBH5#F-G_b+/`H3((5j1JW0)Cu_XbS`-6_g%LY8WHlRa\A
+%c-YOP6s#C'2fYrqUe7_tHuHO'Oj`0?1o at 1Cft<'_Us06OWRM?S2(+#=m9*\n,]aD.AW7<"M8;C)XqI'B"1cHX8.&0FjEi0kpZ.!k
+%F at FVDH^UXs44>B1B=?,X:>5XGV$?JZ,2`r=$q4L]U+2IERV1P&FA at V6OroN$eRP?@p'#)2[RdZe'U(!jpa%)L.spb at kgAsi;j!rq
+%Yrc#c&N<mhpW_bA#Vg;mhWtQsLAdY3dmj9l9CtJ*mH0nJPdlnI2tbhD68b/G.s\4?MTAa_-&?Gr1d&j*:VQGj::^#C-=LCZIHDR5
+%%LA at E=6Hl$<1U)=W`:njSQ"cVaQ^J:L5iQD<SNoLhSDG<a5l41*%+X*(gr_`3.Ld=2Y&3"%"ETD,4 at UO,dLs%aMTLdAH&r3[HbK%
+%0Lu2e\YK#Vm0pZdjqFi!.HetG4[m5WhniT.fuOWZgHt1inq:igSO'i!XEH4FCK&qG[Ff$&Zf0S>ADc<[cE7n%,/u9];p2.FgUX2H
+%a(QL2Td=FDo1e>b.QJ+"T`0<9?=o$IhK,0LRLTu#!itCO_)-&MR3UV=&Hjq7ROLL=mdt,_0;u,ibg(moGJ&FDc[5ht#()q<?::co
+%h6<&4i!E3PDm#/P\N7Q'PMJ-\]kLhd"V/.["?05o#[ghVg?Y!CHsf!-Emm_=B[tIIp7V"ehOotB+2PO\lK8]sg8cQ,fsg>_ZJL<t
+%b:iReY,Y'p.CYJ=Q^b$G*Yb!Y=70iD"8$:L_lKieOiYB9/p5Lr^$1Go8e0?3W;%^>=HHjF?;(4Fg!&Pi9`(\63M%;aKDp<:)Wg6i
+%H"=;L[`;Im""3kcY\nK"lscgp>n8aNSHm7N;P=,TB.71+,*dhE7#1\Zf(R.jJ=gBgKDDKiRQAp5qjbE$QI32<N;tfhKKF,?+C+1n
+%/a!IldY\GFn`:$uVq06K-D3Al,p.#-5*t<8`^0%KP^E*Um%\I=CbNF\Y5*ma4K"1Rqjh?kN-GtHK'76PNYhBg81_l<S2)FpSCFHQ
+%_Nu\LE.H\`Hs^.E6&#\7M]Yk@"F=2;9VKp6k69q0TMJ^ujn\!4mbC\AbB%&"L6si<[FkIPCk!(r%Lm%P$J,OgSRG\G'a4uFga%t7
+%;r'S*o/%QCAcb&.VfW9]:Rt#4XK68d^c#Yd\2I$[=5M]PoehpWPMl3+I#<k7M<6c%I3d&(9EkDb5J5`l-RSTX[f:dX%AQgIh)=R"
+%Go?f`McF)2MC!L[qs/Ye`*6j%P//8R_p2d=<1Ad7f]Iq$I`bI0Ki3is>[UGr$X9JBo1slqVZr`T7_^s-,hd=8T#3m5Wii[)Y7H4*
+%;D42-_<==SV,s6ePZW:[%8,oWnqp!Eq>.);fp/`T@"Q_u0mf-!(oG,/Qd&ojD_261%h<sGIm/*"]Oq/aQ[2t,o2mnmO-5]p9XQRn
+%%*$B5<gp4uXG>d"g/\p\]FkENDdKO*P/$R_OMKrG2VsiCo0GR"8!HcmoSr<e?;i=".pfcPoKWGX6FlYIF5n,Fm\['7\LB/F:S4j>
+%kH19H=qacF%VJ)_q%sr'%t3oQk:iapaBPH*g#iQe9!R=%f?__o2:guG$q,b`J8>2sEq2 at l@(CE/;_'4>YRF'bRM/*8l-f;5kREVF
+%\B5tAH!R"PT+?5S7f6in2'(84N;5[7P__lH[flg+KK;_<nDN0m_2FRr,$de5hkLgQ6E\+OX-;\aW0QTP1Cn2$O-u(tc&Lr48HR=O
+%^i<-_1cf$NYeIDheNch$g9/HZBVU,DfrB%i-cq5ZQ`LphXKdN2p?m!9n)3";aR[SM\kT"8]Q(9Gj0N5:^)C5tml`hNlcso.JL`&<
+%DbnT at lSo'@Z4e)!a%C4BY_o;s8;M/]XNF#k at 1[eI@!/n-Pi28RcJ.@?S##U;/8nE<,j+31[!JW`X,kLANYH-#D%4'J82lZncE%,=
+%FN1IiejQ@[oo1)AYhM%3V,g6rag/f at nP4&UF)R^mVB5%hQbc-3*J'DJh*;,f`bqh at Be&i^>Ek+8/qW4fEd"TpHhLfa`L!dUK&cK*
+%^5qD*dR`r.#qA<Mg_9n?P]<WpX;22 at 5&Z_lh2d%%B'qKs%NbOMr8IXa\Rr7U`(&#j,1io,.3J5:DC4?FOU/4$`Fr-*Eb\5;gkK)[
+%,k.8?I?3Ff%'`>al)0!SRcN%2MTWZroO'S/+';:Z_9R3KS_93ej]jFL=,n,'F;s!>b at fkZP/8\/kcJsi8>EE_=Rl=SFDJt\#u9G<
+%==:5@`da(1=lpuOI0eh]6'Qu^D'_!g5T-$eSEDj/FK[8&5(BV6$K^ZPO0Xk]0'mFQ'aE/`qh,r)^.b-M:1u:g/&+6/Ofo0"]UTSK
+%a>7bQVfUY^@XD]/3AjJAEp.9MgHqX(<bKj"Q!*l6]JQ)Kof5eNj=c<2WK4Q<@bOdrP7;mo%BS%h;e+)FT7o52os'^2)Y-pO[VXE"
+%S3fK<eA$[pVp7=,O!F\b,H#YN)LpXD6Qco-e34[bnftS'Z,?qf,`c[qcC4?c%QuD4E3N2mfL+\9;)1[BAUDD-?^oJ$A]h,nL$EQu
+%G"s]>Egs'6&'N`0N3>MpkaoO'('F]1L!M+i%dMul<1G?r7EdE'dUi$Z:*F366_D'+!8WlEq?om,qDBYLAn6=;DQ5p->9S!Mdu%b&
+%+$0K3m0G4cBBlfRD]8't. at Tn*d6Ne<Z3XI>]=.*7PAZ6G_UD70ZZ&i_H1OrI at +MtbPiFdTjeeuA_/jM;Q-M\W-u:elNqXF?=3GHk
+%1$t<(>uiMJ2n=E14?RiUqo/r1-a.4k\"U-c.EQup+WIc\*.p#K^>A7"l0UtF^0Sokiqa93[B-A!.VIu7-'0HGk:a&g,K61Op!Q:_
+%=\4""%pFKW63V+m!dS&$O>m7gn8kqKOeZk7!p!^_\TE[TCmWk=FqC^=3rplE0ej@[AE9fQU:cf)09`eZ_4Uh%hVW(okqcGbYFr.&
+%V[YYc)8#d2`\PtKK%k+/'AOaFRTrdmXp5Z&B19Ng8j!/Y5+ at gIaiF<9*!*.CrOlST/LURq2Oi;[B"L'KR\rL;$N4$n/r\e#cb"!l
+%/NR6k![G[aQ#B_i2u0[Yek>58(3/^=q[f\e(VmSWEUkegk`$icOFEtm6<]8]c=@aihScG)+nE=q_<IW6[Mpf'c[>DU#>u0YQ`A:C
+%`MqLT>LQO6Y?(!O6 at 9)FlrWf=K4VG>P9bu:*_LDKEEC&dbagk`brc0gG9C at 5VL`mqF'J5]!n*D+ at HnU.c_`:,-"Rj56DA)B<lc8<
+%Q072bT%=ZIQhpEKrn=5AY.%jV1^>X(0I9Qr=A,4%fAoX5]MitQA+*]M/N\tKc0lUMs0)a4!#lc3H!.WK2db8U&"n[)Ek;PfKLW,g
+%>Z=!g'jXg=;cDV(TBF=E:=UeVp at RJ$?n at MC3bMgNaqYfa7V'I7Y3CZ]g>0M[`Elsd_SsHo)g;Fm=B#NdGR38:LbaX+3#,/&47f,o
+%K.\N?QIYV>!#7VWF2hJY3MM;I#R>N<mU[E]M&'"4eKSHW,\M7X3uD&%JN?f8q/5\IEE6ufUCh_;2XkBW_SbM8T=rqL^f/f!fbh$*
+%gSsaS;4,tb,nc((+j!oSe%;GI?;RFE]Tt\&9lgc$G-[_pdd2GV>T*T1C17o'g$n0=OouJgh/1772s2mU[]0]"H/=$e!bbTe"EVQH
+%'MRJE[XW4=W"_\J^g`!4<&E at hOfIrhq)_C'-&%U4=I)>Ra]?-2/BpfW*NMRl$+r!,+*]"J=V'($8LOn-Ua&7GkNE1UF!_h>@_\!V
+%./;YhY.1J5aahJR at gA(OqGVZu#`[.3TB")E$aP$*Fl#$i-)j+3H3l$XN#GGhQlT1<ED-^)Lt3FEV":Cn95[["90KhVqD&P\G$H8c
+%?iZ):XDS#62AQ&?Q['ue<JoVu?:]hr+4^tAA<i)1AO.^eWanK;@e]0CD(O?)WA&VXh?ld[4R(PLeADAR>D7)=qBA-EG&OI*kbo>a
+%o<$[.hWuap%FEK\Y%hCp`cq=@4;XV$r;[%mk*g_3<Z at -sE3k$lTkoFhcYZ:FY.`"O,h0[j't<<X786\7]$pMOmZro"PXL8Ym$0Z^
+%D".Ot$e[jCM]8/)X(6"2dp8T4]('fH>H_%ZK?Q-CU,D:V%+X4HLBb[+d#,_j-3>ZY!ufh#%ZQXC>8H_f7Wb.dS_6XK9>[H.C3:;b
+%Y#5o*5,D+e1#HQf.3q*pmZ,kK/1lB)=- at i%9XrN*G:JVPB\m9f3Gke&O?jVZ"a;i]RYSAM/L02V!l,'/K6]2mPN9V;%&/Z^Es.G]
+%"?$<ejjTH;mSm.4W<^2jrNEdEkq3b3=YLAY"T at C=<?]@u.8SYVO'?0?gniV)9]d=@kjhGXr15^$0B;"26/fsRRa\!p?a6ZDW<BCu
+%UIob!A!5/b8m$$k&MUJ23HM4&9D_ZQ-%T#=.gJi(6s&P[1C9aRBjKg7aVc`Q_QJ?O?PCr2EH5WW]oVZcf)7=]<'YIoO);&kAB\ID
+%cU/YERL!ORVdNe!"EoZ3#Paj"FuKV*Asu*.6W:G1BmEUR@(ol,l4e0BYmRA'%8R'*9n[=8egIXbn]]8l^shNSH<O9f?Y-2<:?L%Y
+%ii3_nR10.P_d^3p/o:9bhQ%l/PE/61AbeL8@<_W`eRUNH1a+DUkqQ0I!Na*<=5[6bhFRc#q=[:p1RiG=#n^9YaabWE/;Bc+kM=R+
+%?:naEG[J!K!6B?;.N/:n\osKhE8DmCAG=`-FQp<g)c^Iq-i[5!oXN+n>E]3u"=,ab<78TqCZId0RbXC6""`/7lZ(VmX.CX,UtGE*
+%kAUg^#E/(ZhVNErA?0?uJqsR0bGgX,e!`lD(hh$saN;6&b!F#p-'&s-`$W^7J$Be=2YYUs3;CJ9e90%LHn4_K)QAVD/:4em-od];
+%@<*\e57*!Vnjqg%<+1lQ at kTcFX9T$&SCL1PF,O91^,W+uFP5%ep\LnUc"9I;k$^srk$t:Qarc2pEB=J.SsNj:Af.F9e#>tW6)(/!
+%]:-G=_0!*_$;OouOP`1$`X,kl#=_2Ih8.Z>I*0n]-Ba^Jd\O/7F1PI28<jDdTB at A?is8.Z%0;[.(Jc8idb\eu`1%;Kp;upnTXf at c
+%-h5.8a0qGAhk[fF#b?bpq#FJ;"S:%M=A-g1jdF_(NB:\?E<[l62jtKU-(U,2V&Y at jg?H4?+d^_IpMR;>1W0t<\)lV7/C_d6chd&*
+%E?_IL;PkW?NX[5c'm(plibiKtAeLQ3r.O/\6P$ii;i[o(iW`:_B9gAk at QjKTk3iV9k;gA2@)\5!R)DSDkJ.c.8e#k-i\u$sN.MTc
+%&.WYN4Q"s$GPmrVBuo]+9X0He8O4&Vh?Vt4_b<I`EKiS:KKgub!aafVB#2$3WDjgUa'j>a'nE6ROa$<3+5%6)SL?K\G9cb6<oA49
+%,7-BrXD2l3*p>BGeV6mJJ(3d.s25tY4\=gG^T&J!(NDAZ0UOF>X&Msn1eO=KF)cHNXQ6=S>_JB3^#?k8i_9p2lVP at 7EJ\/jW%'nq
+%_?C1!Z`=oLL<IAYe8c>'WdW#3=L.4ceKMp2WVTW#P3T!F.`h/=0\`UXLkIS]=NE7CD4Eqq;fH+lB3FVDbt8/lW at L-GqPo<@dRJd=
+%7qC?,WrN^#P3QU'qIHO*rG`lgYT7KjlCNAPqn[?o!#Do1 at X$t./,-"mBtYt^i4)cI:<38ZA(.Z,6#*ZU0QtdAE9kec at Wt`9j$&Ct
+%1f6le?1]`9T(73-DsbYY?OnC;m6"P9J1>GrD<F_55+7"/AFDVBZ'<-pHli(p2 at rTu%ZB]?^.ZMD%b=V.!C6g_D39!RJWsp_B.PsZ
+%F^fj=X;4B@#_"CB=_8*g#]SgHOo5`I]3kr.*ehh_j_cF7b2.5=_pkM-l`)aXp)Pg[btH=I;8)7j!)0QkR$+]eXJpea0FDu_J;6hP
+%liB1b-=)H#,Xb90i`P+DbQ;7K-)p1"?VkG;r6*ql6\<-(V_*fPjnqqF_?!>QH?e;P_&"&lFm';ZE=FmZAt/C$7tMtFnd*@Q.m]qY
+%X$![%/L/qsSo[alJ_]p=o$hQso;4W3:30 at G%6Oa&PiAJQEN?J4%@i.Fb.Fs*epe`UIBtrU+Dp`&UJinU&DB"R:!$E7A%`]-pRpq6
+%G9q2RTka9rYk7!u&[-,>O1g*MRLRFPb(I6K[`O,VM#u2Pfb?A]lN.`jPEt!<@;2!.4(W#3_iNR/;H8sAnnVJI)JPqj at LeHP70T$J
+%/RL-=m$e'2G14\e8p4 at b.7EZ:C6j"AY?6pDYW#_[E=!B[>Ef`2#kf;k8t;Y4`\-Uo:tgj]PBX$Q1$kDeV?rAT&#n*)jFds[-s:n[
+%(Nt""4orUefI#9G,rLU- at f\,$!H2MrkYk*Xac_217Hn#s$?Hc=DqYNOX*b3'ERmM^P9klG4(-OTlr=Z*LJ#/U)o30km%gem2%Dbo
+%E+hqn9Zc'.3 at X_Va%:]&3MpS)`]Al78WT,o2nj:*7,G^+QH!74Z.Lrm\Q:E(.WeXJ4_/)Ak9(aspNEsk[K.j@'u/H:KU<38=f2-c
+%Np::1c:ONL^Q'M3A[@(Q8l^u&?-dp_<83XSd60,&gpdsDZZ?>+XFiVmVsMVLZ7TR^pIUffeM`!Ir2u?/gRW_+dSXQ`kBRDP83V7V
+%<gmS3ih;ShG/`Fp9mf]=5"M'Ee*NEt_23#-qK+,N%c#rXd/kbsDWAt<O;1GDj'?(B>?^Q:A;57amEVd%Z254P[MEIgQ+T'C5Zm$/
+%m/+3C@=5;CSBf'1SHY5c7ZsDMp<9,f<!bfkWS/>]Oe\>`:RM-ONXR%aZXD0',nD'oH4(69 at 2U]%.5?`ZeEeemcpftsEJ3DgLm/ct
+%$u:M(+A]Y7SO9Nb*KJ*[BO*r5+56=sfub:.UuUH0_3[2U]58!.-'b$4\g3V32m3FUaTVlt,3)3W at OF&q9%kL7Y="l/QR'Tr"0%""
+%=Z%_!9U"Y9.Q*fbJDF3njk2W3C=ogI%.^HYRTL+BJ@&3k)W#kr-&RiIF.M>9G1#SqGI&)dT3Wi[=p"br[^=#.!UZ=_OG]51S(.CW
+%^7EbHXftGmk19E?s"^cAPoNj8e7-H&`kk4T4SUqWRbGJ7S)FYPnhiBN at O#tq-*880s!k6ZRmWg#GZ#lZZYHO='KN<d=<ZoK38@>S
+%-!lIVghn*#FX:TEh^d-K09^Z-.j3KBQHMfXqimVtC0fh+q]^bGYrZ*CV$Roj;V<&[j'3dtC3</(G&3 at NSmjWEp/DrCZr\Q&liCl^
+%2ig_TQ`Olj&L7 at S$CXlV3MsT%QBiIs&PM^XMQ"ocYolEl>92kep9lt'#6;\f32]*Q*[N;qO_c,s!EZlJ5RY6ZhB_o'/6``=-%GD`
+%?QL'kg[cU>qOD.*<]^SQ\!a^H]=)%h)d&9g`,`.7)fS=7hFTAK"UB0NQ(<Q at M"-iieO!#s]c25OP"2%J;CX4BJ_M`@.r]Bbk4dI#
+%08nF[3g&%4g#]GWJ\a+>np1*GcWF)#E95c\WSl7f?r*/4TIhT)#E[K[lp&Q4Ek9=meB@,Z)),85mrWYuc2$cJZg0m*rLAc3$epAn
+%^H$#\AR>XKXZ!XglW]tC#A;lD6Yo0s!h:dY@[1*5\Pkh,nB7Oc&77D5U67nM2#<#f/)cUQEg1a;Ougij(G"UCN0Zt7LMlI,<**Z4
+%pXn(Rl+]fQEbh]3b+geOd+`A]oO*ICX!A at U,BFt9-g&^VC/7o"036D)kPXF(#KIY7)IUksW0Zq`Xf@%'>t at Ms.F)I5m0Eep[7DHJ
+%K+jRAJBsGA8H\+Z,*4!.;c"i=i#+j]\ckJ[WsjY$&ofe74jR,*H.WKg5T5[P"im<";)'/M2IsqOR^*i/C(N8AS?bSn3HmGJG.l#l
+%Y$8KmX,FZb.P3.AA\Y6P7ICWGa\(.E;K4O]?jkVOC_'lN<C6cOA%i8aZ\BnTV_%9$M9Sat0Sd\l*o.$bhPBSmethr;/fa)9lT=eh
+%G.E51#TSm)Z3JA!\\9a&X99q)K-m"XBDpZ>)T&#?/[Is^H:[AS;cEe?nH65WNdogU7dH;#MfL&eAq->9B5(8Q<AFuSS5Y/QLq'#!
+%o2(sOr0ADp?Ok%fVm`G4R.V]`0o<4&lLoB'd0rVM1J`@@8LjdoQORTjNC;>)bN;q+[Q%eJUiX]L_KcYL?M^Htga>6*0M(%)[/gu]
+%%.XNm6?Y at Aeq]Wh@/Nr$fpQ([$1jB%,:W[Bm7jo8l<ZYKAS#9/Jsm;W(CnKCG*B/f3U9tRW]A]RebYSGn!"JQF-'MI7Y^3M5-^N@
+%)D]W?q+]#5gIPM%af$05`Q[MAh!o&;QDpUmm5M!b4V7l]FN<$W#P%W4_]bDU.KtLC.k6,&pc'e3G.)%kM2k.nmJQ9LYHsK-B.P]`
+%WC()A&*pPC^Nf>+&uI04KEPD.,`_%t&,PP<ZUG^V,.a4QlmP<$#mo2c,Qa^APP/M-47f,G\NGA]Z8Po9a[ftO`5%k4TmSZ;6/A3O
+%8J&<X\W'c58!^YU[3:X]\-8p+k1Jt7.U/boGtXrk7(KO(.h_%,3]1_:,ouR&ZD2Z1gE9^#@UQHA at G<N+Pjdro<BI-Ji`W2?OcS;n
+%,>p_07?o2<^qNBhi1,;(a)Ea7<dZ8*N$q2n[jXq$6aZ%*U^q+D?.(eqEX*X1NKorF;)!STPsEo1XjsjhcOL=cnaK4^Y9%LA5%\@U
+%l.:MmW]/n*@r"3hH)u54P\b^5V(lrh?&jre%04a`e$i%t]*'<X\4ipA-F$:*p<_A&e-TSg>)KGoP7.(t8tLrf!dou1YYQfO<$]/6
+%qE<55 at T9ej\]g>?G47eqe^\PknfW;9'mTr/A-l51EqKfcUN&%;B^S#TZoOr:#%<./5i(S,=GC<=ZUMb'[5eiH*K*P[(3Yl>`R at 4?
+%_,.Amgt)1N.AA7EVrQr49-07k/p:Jf=)@Th<!f8>k#>JD4](k9DFhJR'jYQPc at sda0gZA!a9f^Pr/e&YWYDr04AJQ3TrmBp$?h8:
+%PG9eZb7Hgm#.UT!d*L+9>8UD-<&_X?%R3$8^f`%5!OaH?%XEZ#.J%YKFNk9#B*XSW2sD;U"co//;2=/QUlF#u]XFKf%!!NS-5IXF
+%5/(i-6-[9_#NL6o!OOA>@%q=mKh1UlP+L-j0pB8QqP>(%h("RmWr^EXS[5X4*(NR3S67=($HKLCQoG2S"],OTR at YRB$-nN%):6pM
+%36pT$MJZ`g:.Aq6Y?Ds(-%:Nj$FpUSDW at nBW>0-f.V'sD)kZ1Q:0&2opZj_[YrsJ9"L-&MAi87ADDGNjo$6A8f-W^B?:8'W/DKE#
+%`uN1q`[YitYciNtXliiu5Aec.Eeai\=4r_&Kg$&q,A[UXhN;WB-CSOcYgX]Io,^@#VXiAKS#%&r7t3N(Yt4@\4XgENSj<hJc()mA
+%o;M:&CO'*8BM.88GaSX]As)J$gsri=h4%rZ\?mdi/N9/aH;HKCSq5uOY.RRB:o9&BF_7,6<5Fa;1)G)RCmnY+4k^XSG6hfqCr?^Y
+%+.f1I*oQ#8V,DVZ.hl]8aDVI at R"rbG.rL?m=e&gQbVYAt;7g_PgBg+1oAc]ZDqB`'klY#T7-5)Va4*VAD]U!3[hF5(*(0:(b[!F%
+%R?lid[FS!C")Ot%(D'a_.4pm7,=%HKXd7:X.YIt%PMF4Pbd"U$R,VMPluJFZeN=a_FUu828 at 2U'`:o%uiLBB0M\Ib9F5-Xp1G"<6
+%("*,)BA4'L&dDr=>-Z:0K4T2FG]rqS::8c/+70EM(,ZoMT0pK>dN%"$S7;%;cE]=9M#Wf_GB:u)i at g@@Ym'REZbSr2AoM7#TH^Dt
+%lC;Rr*@9>=&B503Q>1bjTO(>RSe-G)3gKnfk'[`i:2M<jgqtoLo<4.TiNcT:c!d/YC;uCo$qkQ2X&sM\*B=<R at AZDJ=Q.PWb),'?
+%@9?JO)/V-J(EKmCGW(gJ+4T[s#H at s!<nHT7'r77(VZErO+tf;K0N>)#3-T'm'LP#!ctEa`DliNYjFg6X'GTbn^baYa1rj:Tl\=^*
+%;=Q9dK',g3Esbg&g8K&b2"t"#GrVh1O^m!K%8b/Abt"ngLs\0ElJ3+BFosbB_s0c-edfL=(.(/o_<IneAsBYYi0XZL6DT6k'$;1^
+%U!7Y;kcp+'5c^EgeJ;^M]@VbI at IL+r,Jm>_(dMPRNNp?uF$#7U<XVH2aFIfeLM&f=$Y7"Y*U:].JIHFcp5=:!ZV>L^h!/]6\Z(#f
+%,\f+'!kSKm-`Lh.5_E%&((<,l4QHW\;?/<^A4s,ag$iHFopTVfjrLaPCo?!MGhQ0,7=%VDlKNdJ*Zr\U#Ka%#8U,03_SsbWeX:HH
+%"9g:Bft)Q5(U+r/:!L1KbN"pOadZe@$`RU]`^jPM5U'?L[jcCjL$':">;'E>I<98 at fg)iG];VO'>A_';"jYN:7J2EYLr_ob>mZ+R
+%qrYF]MiU5g>W%ruOlbT!ff$lg'7^KOM at VV]DbpOebT+*kMXfZiQFI!3>"gUt-eKW_#LeSlnJT=6)Ee-piYd>G.Sd`:Cen5Wp7XXs
+%Z80KOb=6%R3^bC:*MsV7gch3\]hh(-^Y62QFZP`k`53[6Uce6>c\(l"Wujup**I#&h:KFDj"Iok$Z2qLp+gQj_,$+fao7U^!uJKW
+%%d03u`3[]kE`*[#QR^S^Q8;)k"0>B+!ZS at HHCKe$q$K`VO?Y&nG7mkNG-*f9=%_/^Ln`P8%o&3>[3A2GG>IXX2Pd(QZAQ[.<`h2>
+%3)t=c:>@*D-#fDk?)eR-HS%2!Dj')em*4j59ednD2]'TUW=/,;H0.Nkj=.3GlI)(@,]UH@?WVU\e.TJj,5Ym]l\(T\3:3dO:P^LQ
+%8M`);,BKGHP'7OflgM,hKLq=YeQoKhjf.nY5EXSSKHRnoY,U"[pru_*=-[M?W\BStE`)+95AF$fBfkD.QJ:A[*-gFPl_G"kYt10U
+%kDEi"FOFolM=mZ,S`COAXXT5g$_'nF4"mqHaJJ6\rsb%@pg at PQFth@GAmpb_19tZu/'/9dn??n:9*^nT0Wq<k"ES#QSrW:TAo;(m
+%"SNJE<-IbVKKF;<<]u>brZ,M;%;-h-NaieZ!0U6u0)UO2<Cu639T\!Y:*;T?+AJD.M3IOmb)-##O5'KD55":hYl^a%*j4<:);sGT
+%foR'?m??+-4fT\l/s"Yk&Ljmt4<Yhu,c13,o'-aHk9RbNMD4#-c:-hrX'EIfmOBmC-'.^"r\s%7i?J/(PN!>1F$!3R<)br.[S'C@
+%#GRY+MLDF+8IDt4dVFE&n`V=X:8REf,'fD>&kki[G0/E4E"bEoG<;M]8\_%ULQ+ at B:1(p$V2V,D)o%kQ(8Kc__=pX;8cNF9Y*7(>
+%dOMa3RnZi(]uOO2TsGe.1>*_'<10`jm'AVnT'_mkoA15 at Ct\@Mh-#Up7jI@\[DGB7BF]af+Bj>7c?5;!2V$WbcHKnk/>7LdJAB`B
+%.u.T"DTUb$@se4B'pMNs>pF0D=Qa[k![sk*G3hm+M.4Y[oulb_`DBiOQbIJgcHRrt\8G;bb3$OR,"2!oWK;\EAV0klo<\bLlG_EO
+%%MG?'fW/;Fd@(sbAlmet*i=&66<K8c^AfMbnnLOR1R]X`KUs^p)4T,llT>Xbm[4=d,A(HFc<P_)+GooUni!<goduRK)(!;j+bK*Z
+%QJ=DTUUEhCgLOi!=tPp(.ttul->*b?4p0OM8KkB3"fb8eB;ocdcDV?:U3mCeMVVC8N#*]ia[(O7!];\6Y[T5ADg'"gZr%DT3uN^9
+%e[cG44sgZpR:]C&jh!t=/N\;`n at ZdfHbE-TLB2O-:C>t=*#W`?Zrs;j,B7p&,h[g#j&;DC-k<9f/1YV9q4ZHZ!4oQ_fV>qO"::(]
+%JaR].m]%Y?OHuF'Ruh'Tb(%_XEr2lIa.Xd3q;>-QAlf9C)D9b34uTMj at 904DTX@B6`Yt+'WUEhZPZ`$$<Zad[7j&]P^IdlA*6Y)P
+%bu*2+P:pIS3E6h!B2f0Aea=4$]YucUhUh_- at 7B5aPI7!dX^I>Hg"Ha:*Cg;X+U#m$4GiW"#J7kV.U$0L)qgRVntN^O'$D]=g#D?Z
+%=HsJ=1dqGak^WaaDSC7/%,a44_HPc8[@k3=hkE!29=)b^Usc3lZ5bgFbILt6LCduG==Z";07h*!i6X"/+/:#Q_m)mU8uG3^Ic<!K
+%[6g/d+_%jMl>SqXO-Wgem?@4Db6_f[qR'+"2jot7i;"t1H4 at QZS.l=E(BS1 at 4JpgE)/ZDSSgZS/#rkD[i$R97SWrCNW.B+3.VH[=
+%O51uKF69.%ZVU+elnij!p479fb-s:,K)pUt%e$&%(Ut#qmA\62Sc.-WEAu"DJ2\P#+,WH;dPYCA-$-:nIZi-<XX'B!R66?".4/9)
+%XS8&U?o9I3,R#cd/HZcLWYVd*'%%pqCg&)r,1lt7ju=<YD0'M+bEHojX7mgkjX#8p,54:pA^r/5CadkVQ!XAXJ/bRgpAi7R;>$p!
+%"Ro0l8?tl-R^gQB<3p/\XAXWGOJTm'-SKmmp.#s\&i3(nJX94;JkK?LdMUYj$'[Ou8!o?9mLY3U($/$0'WG\GI$-%?!qSNCK;AF.
+%_3+FcJ_C`>rQ/GZiu2ggCcM,K<Hm+?`U595C,g.m,Xlo0;(MstmYe)m7UVMG]@qLe[bm,%%u3[M#c">u34<CFJ at Vs/-dT,IRZjMj
+%'BSA=A!&kH!as,b5XJ2^M\@FG[9p,q:=hY.aeq&e\e5K0,Se^^oYG'X]13dF;jtKN`GDQa"Eptm]U4_W1j4>@^W'7q.ckp_7atDn
+%UTS2U6c[sC=LOiYY>_`GD3s8tb(23tcqX4i.D<*h9miO6Z^Bs4geHp:U9j%T\GIjmB,>6 at e5fI3WPegSlCZ]q;tGkQO][rYf<W-6
+%Z?]f(<)kMF's9/tn"FP>)5DhX/.e9W!5?SYJ=i;T092p/i+X at qoDk6h>7FNQJVNQt'-fN:\Z?oDCD&Ui0bjlR+Nrj=&#)]TKWLbM
+%0Qo30"bCJu9p;BkiC]r6K%6/B93A6*\>1E2S[SuWBZD_K;Q?>%PUT?B0N1,6n;P.]gWMKY\[.GhVi.qOMoFi6nF8F5Mr8GVi2UYm
+%:bOl>:=WUL at 8PkmRK)XE;mdn(&4A@=ZGe`DVLBa=ULXFh24.n.;kf$1c38m24#\f9+03B@=b=Ok\>CU<di,5r%FJdt;[,KYp1-Is
+%L+ema*$c[VZY_)g2T6;h)qTq]T+aLgW00pYTOkKqp2=5RKQ`YkFYra+9<07B_LrCY=:9PCr';l9ncA5&-'FDm99<2F5Ti'X2/h]!
+%TAm!&`bgEoK5Vr6bHdcI;V!PDeOHdrDt;-R0B?pfq[nTRo8\5j at s1#(nVb=CN`8-N*B-mM/9AA<g[cluJL1?*V449k at QH<+12"J@
+%V>e67;<F7JrQ<QKj-<W=-gRi?[,)V>eB]I5#pE6(B=f9=.r)D<[W),8?X1^)mS7"Agkuc(8C=b]4eaLI7"<XTlKSpRX at Mhq]9HA-
+%:<Pr;+UFBr@@e-K=7k8d:QHZ^(FUqP<JJ3/q at fWI6Ib4%8/+!U>HDk^)OqtTI==9!G?)>km%.%HfCQ]+rnR)`jF+M<*gS;X`d4"R
+%<0-/^)ja.>D,7SoF,QeCZZ`IOPg*I(&e6IG%@<!jZ1p.KN'Nb at b8fJpIAJ]m=m,#h`P,&&+dUdG-]>.-D#ROjiODN$mpUo,m;e=h
+%N<[$-m;u4T:4^W"Brtqf5'u)o?L_lM)1T3=UD"p7#'>H##Up,#=>s1Kf at _6mr"Mtg=s5unk5=@5%\0U=>Lme#5>S"Bd[r%BET7BY
+%+M3l85*/6N&h]T#iH^cUff2 at DaNU!Ab'.u26\C(b:YaC"kKf0)s(ZaDeRC?m2<%/A'NOIB`AYq8;H<EaE;V>I3G31mX;p.6EU:j*
+%lm6QtO-(h/$f3[2'AEQ2En>ufp+g*JA;E?XO329rg6<COf9YVdk,U,`H?4<f3[ef^lB%!Y"hEA\fVJA6_lsua;Mdt5)BJ"#8eThO
+%`sn.]:8?TsD(163]lRh#[b+mD%/0ORPN1,#aU15>-*O<<SO#^f_GdG!,g5Ij!sC.7d.;'!31T]q:R:S,JgJOYNk6o/PP'8TY[T_-
+%G'#c:p2:g9`X)JNW6Bn)ib0L7Bu`Z`Qe^[Ado3WZaPK`8[E#8KHX'=3Y[aL&FOo3KC?Gu7gC#?8^HBFYhCYWkOCU;3/f]#X5i1"Y
+%"LK])LBZ#R6d\0B\IL;q\IQEt._1 at E<f8cZ at hF(S$EIK._b05>kD+, at Rm\&8UD1eIh9q'_>$=#8XI9bsm7k#Er)m(\,tpVo`,A^=
+%&WK/`47'<OA_epf*a<p-D5a>u_4969j9d]gK!["Y:@=f at 80a!Qic]X,?\%"XM$R#5HHO@/2IrE`)TC0EM]P!Z8emksfp+O(_=97K
+%iY<W=^;*^Rb,MTa`+?9\8T2O=NmUm]Uuah*#%Y&,#p(B*O'3K`lKWDSg=bE`O\Mt4jU,gh^d:A&g]/F4)_:/c[`[o$(#GdAXNj9B
+%m]CHW%==7'>`!M$llD"mmB2UpZ'+$iadX84m;r!2<hAbZ[TM=YI]2F2p-#d*8gbr+cpCbpW<*'<b*\<r4'AW<oqCfUoe.]YX5jI1
+%K:?FTr/7,;^"@"rLZ04;SXrUlBkp:g\]RXo2&3,;o34>oABg!*KjY at 4LL`eRGS/0%"F[b6HaPO`r4"_C,/\"<ltH=F#s*eqA:N?7
+%)qdWNp4.I@^<+ at QA>0352+hAJ<>mnE]XXb%F#qKYhartk[H=_/4Fj3K8tD@@mKL[>QGK^\lImFj4dp"+j$HTbU`Tr$PNZT(BPc'f
+%67u&4acr at o=I3k?8<o\5IV$2lJ51_28[_R3=R"meAWbX3X!FGdHQ`\mH at 6D\+#]JEB^8f=eb$o-c)eR'PV(FO;FfD!+LPZ)lXVW6
+%32'&]4BBcTP6LTa`&S2KJam.b[f^$omP!Q6.6]X/Q0M;&9S+FR9&7E[<2tTT5dX2FXFq148L^o#.%3^;D4GJ?M3g7MV4IqSRu0^P
+%&ooHuJhF?$L1I>[I:uC"arSSOk-N]"Vk4Ykmn-F/<(C'_r&h*iA.\Li/2]!%[B8ficqTB.]I^duUa^*PBNcct,8$1c%[XhQGURW`
+%AE'q/b6rT3$3.Y__LeE at On/UZ^'Y88GnDWH1)/ABA+-uD9 at +d]U0^TOXsu)@D+aF%>#jbj_j"\?2<h@\n2]j";Go."l8=fahAuK6
+%G.u'B6r^[<iB0,KLF$nD4)n*JY&bd7ZX<hIlaQ;gCTNRr5\d,D5:#u3I'g"kMu`3]W_.0n:e6-f?\K%h8(=5AkTrY[_:H7_]4oo2
+%kF@@3dP#/OWcNMYB&,m*eq*S?o;M0LYWpc#^k_"\pb1/qdM;;]o9sPod;?k](;%ZeQi?I(s8N-"TD3s1c)C(p]_u>gpP2hZ?i8nJ
+%]]oIcp<<jBpp];Lf5LT1?f1nZocM6O?iK)@qT\?GYPu"\qTU\nVS>9L^\qaA<VYnWr9J:@]@YZ<Iso?XrJDl]eLuCAGOJ$"nG;OA
+%^TS^`+7n<us.Au/4f3R2s*EN#H<K]O)Y1apq=St#ldrcR`1==u>EU]4.]%KAh*0Ui0BL_cIbd6&\_c3'o([M1mb?p^rFrokcPPF;
+%o'+?tlHWK*[r9"Vo:6otlDss[p;?2SmXP%VDnl8B]@UEirkn[fgL'dDl$rHbH2`/Ys"9AE\c:g<mluaq^;'^.S+cR3[r:/D&,fT(
+%qqlemc2Bm&$1I?_BtPPVrkqT^r,)K'h)F6ha8/<?n*-TPRJX1;rKGj`5JI-Zci6/3r%I)Md<thPJ+`[:5J6uEoRD2cU&Ft>eSj<*
+%a3PjRlYkX-rQVj-a,g5kRm,\WoD6`,Vml,%qdAj,A>t(N]79hYlh6)mj8JlPqXgi'rFW_,Im;f)rqan2)rKP&HiIrmLYpp;)s=uR
+%4jH:`n)+*)?,*Q"hLGFWho=kAIS0h&A\[9o at K*rnq=g4oqj[%]^]3I]IlmFok?IuO^V&tVIfK'!]]@++M/ganr9=YoSA4q34Mh$n
+%c.D^II&Lt0IFg^^@/g"plK^ANr3kd"o!@K9j5]ThS+r>t5.l;fs".(7:B'dqB>]&ia"MoaI[+Fi]n]t:q%TEej)H"k?\EL`7F<*:
+%s&u>k^S(?R4hp57k%`[9qQfu?^\d.W^?6[:iqYMuf^hnurokg0o>CNSbo8n'cEHPhGH\dUHeBOsVjI/MVr-=&%H-ooIQ.8rn*`#A
+%m>mn<?iQP/o2HerMMB-_XOh[U<+MW at AQaKVq-3jlDr6$DnWtM!^C'f99 at E<:q.RlgIhg.t5l7UHmlu3qg`ADAJ$Pb4I2nlG,9N41
+%N&@g:M9GnWUS!#8dD(/*#Yqp7rSq8^_IdD6J,"8m^'*]tJ_g.Z++AGsp33_?`1Htp9qL]drpp$VlatR-ci;bga1Lm,j8I`Ahqm+3
+%n(s$_+!/21J%WN<c[YrQro"msmILipI)6E,qr84]n*h*R^Y`C*A+%h7^4#\)+6t#gkpheSEmp*<]79b#cbCN^"o=m'IeEEhJOb%`
+%DZ4MNli#ioYA\=Y+1SQEUR,KLj6Q5[oc*>]jbmW]J+MXpRQb!r^[R84Gl76b:TrsA/)JA1]LqpQ=2"4+YM#St*l#(*0BN#=s2nMi
+%=lJnfNu70npC$GI>E/COhjsLf^;!Iur;*[=F'YCkMnf;Q6JA'G^Q3U-hED_LX*=6]f;&:nZp2bf*oE#:hu7A>U#56%J#qNl?..mI
+%__"%LkJse*!PABE,9H`tFj5-=ebIu9kJj*sr71aS*rb3#0VQfor96Y2:O--G5J2:=hqia.p&(&GXsH5Zr6o"YNlPUWrScf"l[SbJ
+%IJ9oDH%+K-=&3c6BH^fRhOsi32-2oTn([:pbfbpULEE*'S0'jGlLE7=rXU*Cmc4,Rs5XDIJENKp3?iOnYND+`Xo6"EH2gC#p;P1'
+%\Zh]4o"6L92a-Wf:[e$m^,3l+2`lN^jC79_J,<?ha&VuV="fm:@@b.Y`+f'D(]34dg#'JibOtWk*pfpT4+H+WcgU])ebk`D<r)`>
+%cSX"PI+9#tju,F".<0fo:Z9jEoJ7Sq]_n/[2mZGeJM04UZW2Ig(rO<gY at W0kf/'n.J, at Zek8j(85J;EXlZ[D+]!`]1`[a1Mq9 at 62
+%[i]Hr*S$L')#JYkgkq^4jbr<mYeT;QLA\X'4593g>LrCAT-ECGSUA$!k<H2l+$[<]B8?$-ghtI+p>P,IXmHXoJ+3p5lf5&CrT3W_
+%S%NOsDr6#m+1?.'Y>;q/GOO^Ds4KL1o_^rPj:UjYFZ_m_qdX^&Ir]?&-N3#2rqZ<W`r"Y?I=</RpYdp`e/pn\e/-a#,J8M`+`mO1
+%Z4h]YC#Qd^4.hfJ"RsYP5N,38AtShqk:QZQ>`P.04^IpV9@"!VIekpVo'58]HckMuq#4](+/d at XZi.uuIu7"kl%\=.IUY`QR)o;`
+%H- at 9LSj%%=EU!D(]_n)do!Z'TH*s7ci29;/Dh%Fu4mu0>q08cD33KH66\=p!2tbr*j7>,ms6*h(\CrT1oAS<8d0 at VbY<RD at _hY;`
+%2*Y6FTAPH#:\U'2I(m#\BnI83_W/B/_YNFYiW#<aHhG>gT)\BVKZACekA+CYb at gEnl+S3Wpu[2F1XXD3lSEe^k3XBq4o'Q1jfq_0
+%_-ku\nbhM.4[nJ!+mVWh@(u(YY.1CdrMb8;fciUCA1sG&q+<%2#oRWAHh_,(T,&i'\SM0lI.HH^n9b8/:s`j2n\m^W]QtHt+0kS%
+%FhIQJ0Rrb[anT\dqMX[PmN4k<J,fB$%-HQAn(rG:<%tgNIGo5aSe-gFIo56NpaeVTqto=sn`g_UT76A+gQ.ZZ!>@YnN)/%a?iKl!
+%Y)&!3kTbeQDu6mg?bGDXXaW'tZEY:)pp0]715Dd:4l>]r7 at tCgl-nc=c*W],rr4$HjIQL6LYot\BIqn(7f3$XcT_l"T,ut]doS2d
+%`4pZrk"kd:++IPnZqHu4P+Q.[r+&R+Ie:hH\,>;Uc_'j9^OEc?=#2$='0eZep:N&MIBh]!N-;qFJ\V!?+0Y"F^4#bPlVC=J.?f&b
+%a7&>doN6c-mVR?^\Df&<ZtG'fafrPVSBsEIg1O7CbFdhPe&u):Y at dBTer]$$%@PkuoTeD7n`;9.]ZU3Ln-8X_ifEql(Pl/mo'37t
+%h4[pB5VX?fI+6*i5B+BpNr%^Uo'iD-'/b/b]_(G0Ica'p at .-V=n&HMTJKL`%cV*ga1]DLpT6"HXr+Asf8,DZZ5NN;\T_nHos7=^)
+%GFSUc?JVps]NFQ6,PW/2qYUbnYk&5=pA&nC\,W;BRSRDhVPdDgB7?sqpfrRED]&ZRiTUfdR@!pQnu;ZOMuN+iIOYVN=U99FnY^Rq
+%2p,&%ISNo5BR7]`]taU/J,Ll5\A"HRWVu)+VjIBe=8_jR^OK;q/2A^g%fl1m^&-S8:Z)/-Z%)QWYONEYV%8!7Q!_JZmJ^UGpu:RG
+%^?HlWW#ra#O"'!D^AW4YcqE"am!W]1QiB0RjNjtU0E2o"HC2;3n$gUSqSaXnQ<`.UT3T?6\`$$bbSU!Nq!%)TpE03mV`X[D_*@fh
+%hsflc5;'siXBjU'`J^VtHl7Xe"&]$_9+^qUJa at +DIQ!A&qO);5Eqp=er*61L$.hA-KKk%"cdCDrHAN#Yk+R0_\.aRDr8JUo40S\V
+%g4/QI?bCW<YV5sqcYWifojnDTXu1o'L#qD$I/`b.AV6U;m,2O7eMB11%7hN2'hL8Y:Q*i,F]l<@33uo<cB%XEj<H,/B>;BHjsip"
+%(8b^A[3'889bN)$njRYu7"S at XS!-[H_jaO:T@$[?eL5!Yi!#llf,!`l]Hl<7#OLB`:7AADe6P4SiE1-aD/8IWVpr$F(n(o?H!;9;
+%khTTm^at2)7*\/bVL4m[k-6#kV5S;m;nK%\IHrW9H)r/h=cOf*9O#0#aj]"=`;+E8-jL)$Z7)Q4(,Z*de^AkCDIl[Jb'S:#>rd5C
+%DsS.>c7c<a<86WZnU(s][pN<V(Y,&CJ="Smb(n#S14ocm&+YmS=QZ(3FW;hp=EgR`W_-%ZE]HF.jcHrpaD.<;TN0h,/9ZKN/W;hA
+%oQp.NFi&KF1juEOFm;XE(6tlF5)u=/GP%,OkHT?,\+9rb3^:7T]_RYNYq*F6q&MDaZJsDO;$26;ZhoqQnnMT2[kDH\R<,uTD/maA
+%W^Npn%$-HB(lNu!UR/kn]Xl-ks.imqHfE*>>D2quK6LRDOX_U8Lct4oG3bJh<i\$AW0S/Og2(G$1aU=5+m[l?<9L:%ILXNrg2%Ph
+%I,Gq1Y"=3!;)TrE[)l=;X-;6EP2t'2c1X1I(GM1PK>^R!N0`SJ5"F*r[aT]5/!Wa@*%@DZZjQ+3l4qnLi-O`KbZBVj;YT0UH/(P'
+%a)rq#X\O-jg,QOkBuDbe,d&B6U$""EQec(TVAD7hL1MN7mJ"4<\oG/ED$1gK,it2$[eOM/g?&=6/)+PsmFP`]b5/e(gGss?MaBUc
+%eGT_F"Vm;>5&"7VL3cdd9SSG\emr?V-NS7HX-1]]Sq_&t>BJmeJ?D"2`$VLI`k,.T;K_YL]p=)G]HcO&SN&%_\'*6%oA4<_h<aEI
+%1guVs#s at o(N=-9l#lCmpI;[PG[rX^!)R`'p$.YM]Kk5hU17M5WTKH4!?_g_]Rlb(bo&>&:&Y#jK$3rC-P2p\^7(9k/<OXB2i?k$V
+%gCe\ZIZp"*?23I!o4_=s#W43/7EiUYs(F4G(=%<-UK[803B*Mj=5UI%_^k$+*p]%k(s[dVF$b>uVWEqVRqp<h7_<<bQ5uPtIpcX:
+%UXQ2'8=61_3h5;6fZni-mZd0tf2R'"SNTScC2`mY,tVpX3S\o419SjI*3&#Qk.DG#dIDIH262,eZ4cXpO0Uf*G at bqdOZVeI2eVq^
+%Q%s00<fTB'A(NEt28Ze5RE/00SPun"QOEUe3e9F1 at s%bZj#Mu!<jgY@(nHnTkoe\jL4_VB[4?1T=Dj4:QGmWUZ]V'a_-DlXHoAWF
+%p,G9AD`VJ(A2c'kU/G3\WaT`AQ5=FM$1.?G"('\B*"LbY/W*%m:>2n[qT+'(j&&>+gA at T3:LAk)41;`T6ga[-c,'B?#6S(IN."FT
+%a^a4RrT46=rMV(S@?[_b4LOk5SDOb:8-T&5J!BqE>?k7oCqf5fc;V?^IC$;0e4o,4kDnH;`@QD/Ji)c5X'\UqE(1C7/2t9gUo-qP
+%Z at CR'g^a4/2d(Zf]HJ:X#tGJgP2BRL*\)'$9FYHX%J_FNAl->#n`(:4aVX;VP_hr>aT[0)5Oid;:8pf3m:`TN8ud$97SDb:=jE_*
+%.dkom/]j=$0#Is,+/>"F,na,_AECZ[/F?Co]s?f[,srYG`aA4;\U)4rerrh845Io*AREMp\b"acjKp[bluK:1S=3^0o%i:_V!)'A
+%Z at B:gGNXO/1r=p..XSO;=fc1rbtH0QGQelS>+Gi:hUq+?_+lJ@?h"],?J1Q.NH2?C]/f9@(f[q*X^le8QJF!pCN4a8[RL.2e\50j
+%l,fAD,*f:(!aV7I.AbOPfMknL/0>M712D)]1Q/*DU9rYX8L<Pq7P5jhk6^FS$n%Dec=r?[Q:pH0o:\.-1ffqfOq+oNShAQ)!b3'r
+%<ND868b1?-VNit;c/C'ooEpPfUq76%-lg.-P4#l!6TX-fn:BPAftkA3U%)/VX%k]Gq<NkUWCd?E:?cA1@>[UT_Fr+>W'(<pX(tn>
+%8s%J#i'3]I[W>9gWVdqLF.AJ2np1>=A8M"GmHp7kT%bmG&[tC^]f>Mt<>Hu at LbaTtONC"elsq#TB;oDhEK=;BDOK'kZF. at ddbHph
+%':a@)GM<3#FNUf13@>nfOLQ3)=QD2@>diAe?:jM),m>AB%S=gMC(PDJ[OHDQHd/k#-.ZA<cmeL$;tNZ6jS9"h/V"9pG`##r!-VGc
+%K*W6:Y%Tdj_ej;2Xu']<P1*"=`n/B?FS1_2?(-?SWf9HdapuB$9B+]k(R1C(UoI\sjP#pY=oqotcgC4c*,]sY2;>n3O(A2&@4l&i
+%i\$"mp&q#Q\.`JSoU&rc,o,[>K.Q`6Bdu6JCbDA`+<D&p?BYdrK$H.HG+iRS!P0MUMOYJH7Wr&)m;hW_'EX)dmP_jQGVY*i*3^,s
+%Z^cg!`eWj?4=?Ikihn7F6LQg+k>Z8Th80ke;h6Sm&@BtVjd4p[ZAd4eP7oqGfmqkY<_I[F+&)4_h6F#eN%X]MJ8'(0'[V9LEcQjQ
+%^;:ab5P>)lf,YflX[!AY/FdZu%[ud^5Tr4 at 8LT_iAY8[%0J'@k9?NN\_!d/N//$;BLSLA7:.cMA89VDGDHH'**rqtQWrf>''tjUF
+%2??I&*/APmN^[FXLX\tS2!$t4`Fb<YRtsQ5_ktHf/(CgQDB^mA]^3E;Va0e!P"dcY:=R'/Nf:S"=?$nN9L,%/4?j#N$I10sEh>)t
+%LQottR=4)Q"WeAt<hq$AhHUg;7oT:3GOJjg9=lCE/]<@5_V&65(+%P'mF9%Qgm&9liS+ at F;'cn8q(@;VEW8QsIr^67IR$`.c?Dm4
+%E]E2YYRNTo0h(2a*1pqN.NCd9Eu?PJ$BA%MI`US:dUo-RI&XQjP"o95$o3jDK=^,/gB$b_^[27j$aPM/2'QcVd0AAKq=B<8PP00f
+%/H(P2b?7Q-2Nn!hgQ\DOH(=.`'W5#4N:#kMi">Fi8SBLmcVtnF8Zjqo5_F9HN`V\,C5]geg*bd^/kr at T^%2;ZGU.i%,Um>\i'EhH
+%a:Vg#WCEEmAPhJ!(VC7Jpq#L6Np>PUmF-JI'pWi\)tP[mdbdVTeGI*XahM`ebV*+N-NaJj;W_sH`W>;o"'t8D6ln,F4bi"UF,grn
+%[uot[=]!5c:?dtBgj9%E6d?I&G7!(fiCfJEk@^&X<K?qhphqp!3=^\fAQt[V at W(J8AXiTj0`a#Gi[>6t>%u<j!SE-*AP8N"'&?j[
+%%lTT.jClQP;qRhg>4QjrKW[aTMkOnOM>IEKaG8.`PSmlF)`p-]3'r9tm5_3G0dI\Fasj\X.AMc>@kGJ4]!=<HYY?U91T;`k"r#+B
+%Q/b&&E_2):J5\33cdI^3#-+VAL"2-]b!e3LS#&/^bR9RH!j\b+M1QsiHGcbp;Q[3e)>)!U3WH`]Vq2ot)qJ^=]VfKb;%Or3R:Li.
+%@feGd[rT,TflSD=+T*FJ.#EC&%TsUYX)8kZ$V;'Vs(&1P?__LFEO^:Xr#f.;;9+>$W_0tk^;\c\7CDnOB6[I"*e8BkH'*JjV]qmI
+%SR\:dpE9-L<^^qkP??NE.iG7En-[)o]6kV+gJiH*A[=U$A9;omp;e_?7;QUAM*=[iZXDFMC4V:cTscu,iq2n%A8DWPJ7=^SSYmuJ
+%!N%FN'\JrSG:HEo<HG[4[UWA'A3&NaS1n at f9DPkO!au.H?6flYqLXJI-lH+Dam\;&g>)h\q$c]KS="t at 01m8RB/bH)jF^B2>WoFA
+%jTD]^mLD_jN*K8P7F]6W`dXj,Nh\S1:-Y!a-`JP;HYA7</MK^%"O3<X!@gieRtBRP[5m;2?KQJb)8DQ+OH6dk;?^BA2E<+/=Yaua
+%$T&K6O_\Qu=s at Z'_*&geqrAs]n3/]OcH2jtMSbSB$kb&dfhO^PhoBpM.nPZKT9:Fh17pF:q!lZ>T:i-8\gcbH%XUc?-EjoB#$X/?
+%`AtQ2_DQng+g4U_5`)ia115rSp2q"o?OiLG$E/&COuW9i-."S*,`;(:K+&8_YQshd!Y1ZsWe(^p59>"jR$GX^[eI*JkC1%?^ob2;
+%ebMaBk-Uu-%i[H'"B,eH1">^TW_p%]5TI^G77BjZ4jP`T^0:4#M!`VRO^)aE:sB=9RUqXDO!NUXYo_UF!NV*fbN9uVDTu=td\[Br
+%oFtb'?fW`Q@!E8;UF]q.(\+[g6:Eq`:1]*rK\&9%R*<l=a;Q([/<9!r2]Ef60h0:!^demfOV_jNcD]W84WV-cTY)nR*s)3,8b7KU
+%G$.bU9U+VcQZOdgOidK6p)W6^fu1E(?3L?(mj/!UG,?3t7[A)r6H_th`s6NTc)NLbjSpBs3+O%oG<bXq<IuW"!FTmBTGs:7cA7au
+%6im48Q_+]@O4Fu@,]]&s.KDphBZ&5sK0gIVoPt:"-u_o5F#U$>+NG,:.t?Z-9M:[pP9W`Rj!HRfNt-r]bM"_Xi68o:'YsQ3Sb2UM
+%-37U@%`".`GAHbZi3u85lNA07-eIBVGD57a6Bdp3m*I<Sc]Ur`E2g6dWgbOcE3F7knT0u=#EtF7MHk7Gf%=4QpHo;WS5nNRg9OK0
+%g*1Aif.:PhTh6&Q,e)Sug7?BJ/g"k+N/76Tj1^KC?Epmri_R7m$+eV^&qd5-&/:kEn9It\C)>Po4'8,QiuB6lO<`SS&"-`k<G6s)
+%+&0+nZWDF62NUeXEFS=+bgJedVGnY/J#"L!*_rsS\XFi;#A7R=ieN2Wei/D4R)NZl3Q\**l+52nV[PaAVd'QM7\%!HX)6irY'Jqh
+%<&5d+Yloa!OYSut>d%-k-ti;9[$il#h<1EPpLSqR7!L#Cb+d?3J<\MKmZFc98T7D0_%u9afo()**n"VSgmshuU_&'?ih,to&A4.D
+%XG=I8i.$NL0DYLX-:p9-*2e8%,TdFO2i6n$c?[UD6=+(AfChW=gXV7N!kaPa%HhQtEBuUW@?l]E^`#TA'A:D5,Z%Je,dfTn:<1u0
+%9F?I5du.V\m$E*I`Ui, at aX7aQ>5i\f18Zt"1:eX#P2GeC\5SIr8Cq=N>bmBZ'<9Qbmjm9QH%U>?B5SBpZkO,98f7/n\Q%m_SN^A8
+%ElD&D-.Q[bYqeW3Mq)?)XispGaDB*^-2pUKi`Yus_FTI(Z!Y<8+aJdiW'"H/hP)MZ1K>8Z-/>@c3;[dkpdW8&h]mV5CKD9C'Y'$i
+%_X6EMlb5n-R\]aU8b""'Z;I+&VPL"'O0VIEPE45SUH4_^-aD?hY')'H=9qJDCF"PNR)OHsF.<;JOoejD?VQ"VjAU#,;=-'EFjY?;
+%7Su<K<N)+OiE]WRK"^o%J6L$J//YNnh at Z4K*cb'end^p_$eq6ek>2>,8^^&nRSIq].=oQh4`R(Yj=+-ZS"`Na0j#tH&6Fg[=!W0n
+%R:C&)Z;qj9b<1>h&hF.E8CbWmJ`TnbKH'?[Ph\ni,`u7HPrb]i,@\b(Lh.nL-S>o%/#(:gDF-l<Xnd]te:!J/q^>^Q0uXHGY(ZRA
+%#-q";DPH+K#n)h=SPJbH&4qK/Dj%^Z)*^78Om/1Haq_DE#Sq4D;TN_#5*DO\&"ut'QIkB0ER1M&B-::p;MjNf>41L+h4/u"L0:@u
+%EBITf]R<kd\amST=Xu">\Kk9:=<eF_-$sW!b&;Ggl`hkRV?0?D1,6m5-HJUi!2jY#SP*+e#QTbIWk at Q;LMi;'Alh;c*XSeNM#1+r
+%6&']u2MiLF:W5Ch4KUU8Y%@p>?XuafC&pfhk;nGn.!+=rccZ$$DMa at Qd/5/:DX1a(?[7Sfa_E+@\TN0^.*275)Yt`_:B9]\ib4pI
+%8l7[\"7aP:+Kfa*5rC)MA]/3T'=EA-o';q7dF29;ERWom\jC!`!*_U?4\RA/7HFfWj^)7.BeY+i+;>P]R0Re31K#A?2E:\Z=4q<\
+%/oW1qW(BMsAR$ES9F#PLc\opH]6Z&]:FG1.ZOYn_n/pd/a[u;&2J at Mm64YTWiN>kr3i3m_[td[*eYVc7k0Ge)eQMq8_FX[VI2P=;
+%cl=ScHO(L3GSdu+YstUP2)1N;GBcqHeHs`^9?U0B<=U7`X'4#72\oLDGH/(&<ip0*mO-jclD:(.DH&nklT`WDX62:>2R?.#k)mb/
+%@K!G7P&j.K(Oa?d7]r;?^C_h-3kP7<7BR^,!M,4OjPJgRj=,@!MnoN1YYdhi3RCLNL+5!f1oR=2kE6adP'0S9*8s)AU6GLVcSCf[
+%&meQ<+qR51[7^b,'X1*DQY`=\(8B<6H)S3Z%o80 at RCuG:"/DO5PuWoTok4qaN!/dniJ$6Q)j/A`c1'AGGU=f$KmsWM2G%b)W_q%4
+%Ui7E4p<B at F%G+e83 at U%+l2E?(A9_5lHRO%H.NglULU^%_HSnG]Jh.bc=A2$KWcfq?Th7t+#X6SmaZ=s/I?nG5:_QIZl`kjiE\t"[
+%p8kbh2TW5MC_7Y)3n_bHOo*$3!W52f\c7j4>YEd`=p22VXhjb2-Z`l4:^OCcaGT(=7%_$O`\t#cD3i!@l?<i>M%*K-f5bX6Z!qUi
+%F%_gZ7jL_BI[/EfXib&g`<]MW.b7ucb!*;3.0_'@;dQY?D,,+\2?Q`@[8e9T\&ch<FRul^GfW)..?^UK$91ZN]^BB'27Yf08EM4:
+%r?4ICY[:qY[Yf[Dlk%^,a9NDgPiAsK#$Yq?R1:8X(kCVoaC/g4?UY"%bn;D<9Z\m5ZmD,fHFMhCj!GM4PbF;-#Zt91>;`qiCiK2q
+%(6I1O<5D1g>"e"mMIP'ZV3$JA`6D::_l,h)3opALfJ)!)SNKM,IgHXlWiWHsI`iBPn,NR[Q(GdBEFQ8CcQD7I>tF/op^U4e;N>Z+
+%JCV2m:bk)EcO+8U$Em`p)R-%!3Wc_f!+hW>70Fd^.L[BfHJqM#Q=ioLYgqcB1 at k&!;6NqA]ib^)9/CoY07#1Mgk8Y[r0=@U"mo>W
+%<#.dF$XaXnVb2B at 17i#rMA at Pd$Z<s:RA22HE_Yt97F"UM0hq?q4.e&3PZuhTqaR0G[OY$104D2eUS)U`>:%*aIr/0u&&_*f#tC/R
+%?+OFFL`<g.G-^5^#`=G/.`b3J'YlYJAFZX,&"joSgJFpTPnL8ZP$IRp at V4U;mOZX6&\4%f!YB]W"0[i]<#K"XQWMa:jId('BlD"c
+%jq11a9c!(*X16tArmEAEZQ&s.]5[t`noIH'ED"(^4:'pNMn0OGF9UCbd#]\%X4YB`W\qM8A3eB,2BUm4 at cP`s$V^jde!)?7L;NP&
+%b)\(WYk6a63D3'R*te$e+(*fFkY2s4AKO:NJWi?Zb#4;NULbDserp-^nepgW81S>k<!d_u2bIL+H*]dA3:2"Z8"`O6hq6go_ at l>T
+%nr74+RY*YLShI)WIm%JX4:0b]d(m6.IKm`jIshsi,qY!jh+\+LJUN[h-VqeP#d]aP3AFZ77;$ie``/5kd`R*t=^juc4'S_bqq>+U
+%TrtpfL3.TB$L'V+4/@;k[p;GNMm+J;m81kI\9P$BWehkg?W20*V`#5.fqN$7E]ncB#m_pPmW,&0 at PZ>D_HW;RP`N4V$^?nU;#+#C
+%oo^eU3(cDkP9O#^$qf+ob9c]24BV`XbE4&H'/<9;+em(:nJM^h5m6<%JPX2e8SpQn[j6f)&f=3DK<2BUFRNb//'(pdDj&o3F1WPh
+%9\I4U2cYgX2O'"VbJk8;.O>Q\s1PX//>&a_UM at ShG>-`!#0YrW)Rt*[o^E]TVl`[1Ua5g*D$(+7O:UT;%^u5F8[>j6UP3(['HkEu
+%;W31`d:RBb_RsCk+B3r^1!Q:?WCn-9Wr,I=K&QthU-/7AV(X!iWhb?4&][?Xq09_!/dj:NZ':)bJ_Bb-nU-X3$MilYrAHQ]dqg!L
+%dZdJSSZY7f7)L"XLPu(:M9numUuKR7jP-U!h5%ktCBVu&0>!a)S&[jK;b"Lc``2$"8s#4JS5h1ao//dZ)[&iUVf@@l0-+o!=ql"r
+%+bmN"Xib.f2mF at mRB.2ilhU6j\(UM?!Dk](Ja^Fem(G1MUb*Jq:P[XJDn"gg*A2[ofj17A$!/T:g:3]$Pas%dXR&B]FP1#Em.,jU
+%4=bN\/!HK^\@"rCRL(Vg=FlPf9m1$O\eP("U?\]bQQ+d2.90:S8M7hn]1D.^h#bKq4"*.hWcR;qL$G<X!k;`2Kkg9s at Af[<EptRS
+%U>!L19Y`jc"M9Tt[I#:nD/P\+:=8,-^SHV18o+^D=4et6,oQGN`7<s]bEqTAA/'Lbc/QWiNQ\p13pR![Q__]uP^"<CRo*cF?r;7t
+%X"l,D_9Rq<JLrJ,3a30"pM)pT]TQh""A[`i=X/`f$tYWD+=]rO_QZ_ng*VGR,03s6/++64<AARPG&uC\HC*E+Pm?]@&`9>pP=1JN
+%Z!dWGQC_X+os&Zc.cdNROK5[a8Qd7#a#52a\"PD+ZprKq0fX+?i9<bK,VG<CRVJ6Wlskun%%3B:!3CDX$4n(S3V?<i9S;(Bi*&(?
+%8S+s=X(<8KE_.#mWS5I.7`H$P[d?**&)n:O$^ggW$rR6)+<T!q<+@;^1.=3#9X]7FVg_Yl`8OVD-6grK;]X'gT]teu94pMCo/t6/
+%AH]@JifLDq.aG;3fdo3C/B@`<Z^W\MQ"r`u%_#+&^^3KPTX(KVi)l=e14*<T1>DJCW4T*>=.*T]_(+TD5e=Wr1(gOG$P!@YqG?n)
+%<es"E]%RF/9d\Rb%]%jbHd/;gj]t.Z8O72YBTriBe1[B!jOe4`9_hUBQrQ8>]JRj<<:K.4qsh$,H`C/U0Yu`_:NEQkaJ*S<DXV!(
+%XM!+2JKT\hR[m$59U=5PN@\2VfNADU:Lt3(b">0]b+aH-D8$CXDG$m.NKYNeB at L'8Q=j64TdQIF5=IQ'7 at up/fL9i!nodaQoFo_E
+%0\[>mk5Y#?;&lWSD^$g]^0M,t$^_nAhj!-ZqZ,sqb58H_%;il,&E/uW)DLoeE)a7hG<[BZ<jd=_iON)g+8,-m'cW#OS5k9W1JcZ@
+%P'Ade9hr&9QS%OWH6"75"kt/e?!)90+P!6nl\>9IX9J12Mb3VTQm*TR&QadL5+:3I"HQ2\PbghR8ak1rHad)Dn>pL9EUC="^d;qI
+%hg*:0 at Q_28X$i>HZtGRt/3r$RYni7!"Q7@]*ea.#GEDKJ7&5NJ4".g6ME7R'O,B*:2Va`f-IiB<#"_ZN(7$_&iRtI.``?[B21E@[
+%bA`M$/ON5ITrK.*#</bC^h"Zn9Nr#i5O!SMGpB4(mBS/\r&'`n#QSC/W]_nV"5-It)1]f;n>\mUdj%D?!(dg7XQ425m"p\JqO'r-
+%CgUsoMA+]nIpF+MG"^q!4N;(oH7)US"YXC2(f"1LBj!S):Nh2eWd^pFg$l>I:3&s&]*Zg,?GQcG)3Ec'iNE%F1"ZqC;,ZLu;jDd9
+%[8D'dd!o*b<Ttr4D)*PN>pm8?)Ah/Km;LZG%7SC"XN;(j2\Y+ga at n1.l?7=]q:7hS%TibQGZAR/C=`qe7$Ad=09W_TS,5cj_'PD0
+%\Oh<ffbIXu&+GCrCTNDV1b)R^CT?%"VuArmgb(e.DFF`b(Cq^*58=X_'QIk(G*C!ao*oI<X\3MH:M>_7UP.<t"P[@5e?22__BOf?
+%5@;mUUm/Gl0&T^4BauRo8&WR?h]=h%DAHIX3,EA4k9RqdcE&s#!+t>Z<$bPDA5bfLi<(r7$o)JIU=OV4_P__`@uE>(DnWqLP"#D<
+%,n:)pX.f.*C`@E5o.@#?G$IVZBdSkf+.bG'dEBZaG"JH3OILq__N+$,+\q0?Cp;k5Wt_:;dD!ela\n`PUB94j)MaJ!Ci\H=!Q'*>
+%58)&).'G[nE-8Xp;oSF3*I[&XSe'NogML_04L1H0Q&\nP6f-""4i[Kc-l$Nel at 8,7SX5VXRfX*S`pN=?>i9,XMoSe2a]Te@"Lq*t
+%Q/+K6NTu-T:ONpP,.4psDj-+UE:^D%QfGMM9f]U%%U>fjHNSf"dZ3(U_uij^D=*L;P.cCb#UnIV!*I2ep?EX8f[]dOgECF!3^)Kt
+%PrA-U^!1/daGjk3(Z?aH^4)@Wkf[KC<dB`0;D72Wc/J5GrAf$'qLjnt(1k8MU%FQIr`D'_>1r<D=95ifbObLrCee_P"5b.$@GMm[
+%,[htG^fQY5ZLKZ1`F0O"*6>G>?Dq=r$;OuU5W]I4p$pa]s)@Z9*.q$0ED2OMG0/dppbkTMgd;oKXs-T?:#1i>i'NpKLDU[eNX`U;
+%Ab\6sr`;aonK>`R4.$##T0Dt;'KkgE&@UU$_/,Z\X'E%RL>+n`:VAJX/D(043^nS4*mSsL[L5)3;mLi+ll*9#^sLU9ZXKPWQEtCn
+%%C,7Y'";8cB([4+^Xur?b4I"m]7Rc*Zn3?:c*&c1C8iQXU\aJe3jn?aZ4qV]Z99*4S\u[H".*4K%D]IY+%X<mlaGiol(a0`Y1<U`
+%NI1dM_PUN_YF!noim<5s/lo_XL,:q;EC=A_@$Z*e\f at m/l=JU!^H1qlg>VHCK:3D"Ngc[u)R^7I<R0=j)`n'2W)Tb((sfW$]*`C@
+%a2pnK]C#=M`I7;h.RJ_5lin\#4k>`\8BH+JA7)dJ7UWMVR(F_TWT0H;qCJ<b.(]_t6f"\HBn3'4?aCN!HX]ir=^M1XmBV:u"E[FS
+%lI`llP9dnG0aJO5I'"s),'3f^"cQ4,&A-B_?'][-msK.N)^lQ3:E^2EOLfL98*sBii?/qJ2!5h]QA%8$*VaC9[oR[oZ.1HMRN>cl
+%d'YHK6C?MjasU1V6&$q9hdjW)MV_[XMmk(*FSB='h-lnNEpD<I,XpW&Ln)L"/_eeJ,\IVH6(:;CR4AoW![9mi6sE<+X4%-Nid9<<
+%bGTMC-IWc,\,jHllGPcJ<IuQ.BuJMDW^;&gUWE.pV-[GgA%.*U-M0A*LJs0k&5h6,K?P]GP:m`$Sn/'5._0t2>m at juIe.C8nd'qn
+%%fDV"eT0eI0oQr351sf)O;M"Q5AP,*l76n6gGkqs^gY!lI1;=Kbeq9)[$*?*,'E at sU7@*GGUcj4:JeDliF-2XWp8odpL2>+TOaZ.
+%n=nQjFHIK<TK^&;;0YMB=n^3b\OZ%kP^WSke[MbIF<7udK_qlpkjm4o[IqFJ`c6pLU0>(B;2r\Sc)tELb9bo1jN?e#6iX6&@j3D>
+%HL<;n;"_^%q;il+[Z.EX1E9"UI<BUn<S]A!H;O/KjNB%[9jhO$K\biZRbsX>*b(^_pia!2C at 0&*WlKR=K8VjcLbR at Q+kKR5*=nYD
+%"U-17M5SM\CdW62"n\JSi+="qWXa'NCL)`c_16a/Kb!D#/is/Prn5V?T&hB#3/D%M7t!P+Vt835g8jJBfOiTJ##g?W[]Y(X@`^^`
+%'XMPO^l,Q$2TaGDHm&"&VE4diPm>qU`Drcr*<Yc'/6%[E%\Vq:hjH+Yh?i<,*;3Lrg;\U(.A1;W__ZSd9$u=l]Lc`j3sZq$H2o+C
+%nfMKnQAfg3]?j)*/sH]NYo4l8-37-C&q:cN"^Ck(nhqIq-D_piB>MI*3EqccU&]nD,WAkf``U[K&gmdp/E8#7?jH$(J!kMpD^/!8
+%F[0aUKk!tj9@?@s_'9h?eJ6lG7;Og"Xg"h8[kRW6#s0]`INJ*&K4JSo/[[$k<heU*X#5?1_lNu!CKMW?fUfY,B47jF]n/1:-CVF&
+%.>[^\b!=ObMchXP7_rPIlKamoEeT\"8,\\]nW at +ED-1tS`g/-/ML?eR459[WZ9?NC(T1PV%U\2>K+0\H91C07FCb9%+c5$k0VjF5
+%&[I#EOs#l;@#AJ>S(QBp)k4]i#hUS6ochT7<>`:k`_'&M9!q[LeV2f'_`(TARQTWJXMqWrdFl"q9(q&b>(iI';Noj!=+V)-J4s?:
+%=5YT3HZpe//@tk(M1ULF2;gCS*O7i\MD(++%Ws.BTSkBsQ]8F2.<1uTGmC%rW>2-R0[>\$0WWJcNMJ)W"i'#=JNt7cWK0!&CS,/M
+%'p1c7`W"KK52rgU''4)7llmJk9A6KMP5n$hSD9LmP,G401Df$7gStM[)\KismlhU88.H.8Je\VS\P#%"e2gU!-iOAA]nUMT$GKuU
+%K9/PN&R$^=5t5qJbui:@ca07_*-3Lr>Gi+j8QMl-Kj_UVNMsAYF8JWAOAShh_Mrg\GTIChL0mV6kg%8hX".l;Q;)S^QLmR-X$p-q
+%>nVb.Gn\C1T>f:ILN:@T:4/<_5:/JnpdMSYp##:1j at NG14>4`>P^'MbZsPpR!4[(`XReJG!Q:OF'.\Sr+*2gHa"<DWimnQ.ajU\1
+%lS]ck](Ql;CA[QoU9!X6ZH"#T at p"b?@:`\OG=o.njEu,5Wln*&@;utm3L#"tlnAZ`=7tCU''SDCM9UoB!$s$I)_n6Z/I>(Q?m)m=
+%_)-;B)p'pgm-<E@`iA<*,YP=q"]Bk--'"_k\&!oP>;?Z.*NDn$UcYD[-U at lRP$/o^LRK^g3`;J2Q#u"SY<:@9<Q8Wl>umeY!A#VN
+%s&bc_#!p56e^".MFqnHKq/_dD4V)*7&!DWWIVm>E4c!Ltkuh2\`D3JEg%f\5_DkiDA./3EU[jLMi&Uo3UlP.V.Fo!k>s(IVAX&mg
+%*$JE]U[/<Rku^"TA+>Qa\#Fh>EP&]KVLZiYe6i'WH+J?o6mWri:M/_GlJ$<HHrW=*12c:>GRjFV38knLXO`RI9Jl0.BC%Ob[)K!g
+%0\i\&M0a^.g3,Cm99*]rSo.W.l7-(_!No8P#[GtmaUXQF%98ReGp'1#fOc(W-Qk[\[]!eJV$.DW7`AHqJ^C1W8+mf!YX[2TG4=:^
+%N!lEtX8N^mFUBLen^^f><HKdM%gT?4KhG55ls']!B*,X#g)&KX2_G6O6)#S5_R'O?^^4:t#X2]Y=-3Y5C/L=fbt81pmj&2\T]"\$
+%6a!$+ at Kk%q"31'kYEc2_"T&8fBZ at 9t;Fu1"Vbs:&S1sq(ArgSA"<_;GXLN9'4RYsIjg&]XBB+BQ+^952&k,&WRl[_oYTJd5\Ae"<
+%brLC1l<tFr_Of?Fn=!H.CmJVKPkbfH+bH7tVZW=RE.4%,b-i=EoUNF^4NGJsnMSTg-0LW^jQ?F4kd4k>YZX!QN?,"`,ZbS+k8Y2'
+%0P8;n93ohYN^A%ES%FR76mf<q]:sQ7+QG+5Z^e%]OS]k-c'XD,#+hXnR;o:#<3m*_';ePT4c^mJh?/"8Ocp#YjDN_s>0(^9[F'-`
+%Ub7R?Z+pet1KI^Bm3eo%2]cgX_I'_[/&B(L(5PJ-D<gg(X7^87=Gk"1emRm'i6Peg%ICCS^Yfr<;TsLhQTFQLBD29VM*\DkU8k._
+%YheA":tp/9]G]c1Hkqe4mA1"%.'%J%;M^6!a4BHA[3_ZT-\m7O:I7Ya>OY+aJ5?Q!loD!7!@o;TG['i2JFm:%\90sJ*jO/i.$5FS
+%g"E0)-Q'Xm#K#r.Cq/01Q'Fq1.`3S>4;uX0"a0=1/DO.>?E/H#a#k?$-.K!L\[^R"^*O4^"!dr8ZT40p":=OA4p$9:(\SHIEb<ZJ
+%pRSpkMd*LeZ.XJtQ6pg5V=QM:-.rX9CH_"ccQ7kclGTjXpCZ5e$f4<9Na[f.DV`%S*'K.CX?u=_ at SHmO/!#Z-.1'3!0sRG%M4/DB
+%5])%hoUYd0PG;<@kS*>Un2PEY<YfPF*!`tb#Mp5##7i+AaZ#H/+qOs4R<Vga6-D=1U:c\o))kq<fc>7]a`r8Q:8f3IB%d at 6>b+Ya
+%"6VG(OX3WD15h.6Ym%2V3)5V>4%6b"8O/$Rih at IW`93%o^6urO8N*TCj`A#iZZ>X-TUd/a;aUJLVrE\>R*nsp*TICfD22$$T#@gH
+%So:oBACW2-[+HUQ'!-$a"4%qI>Ze*^%6t,%;mIA?;6iKi:<j>eYFTLEla4 at K_ESOi@FDTt4/d*H(1U9:-8DbOjt'8OPPq&P(H2l"
+%*#`pfAT]eP$$(3pLG`m1D^V$)9$Mu:&rlR=>JM<]'4M/2\cjWjb7%d$:q0mPZYHlUYWe2\7aK?]-kc#9A3,rSc-Bt2h'*dKLb&WZ
+%*\=8W%ON"`'U!hKKl%dD8=^6G_47#sr@]#G!JPb#\Wb;JK?nP"#UpOK%4#%e9pit\X#V730am-6\8$0p8+%"#ZB:Ak44n+gXI^eO
+%$r&c'd@'nqpe(&C`36YUi<BT0V"qV+28%B&1":f-ZBH0El@>C;(mY>c.70?n\*Kd$W8`C'r=61:2DfRoq5TF'V[]#9*+;^.e at 6C-
+%UcdBUs2U.TlErM(1H1R%D5R^XEOJB_##[7IAtLST6I8A'[R;Kka_D<ng6tp7mW-X=G:qOs.lDd?28fA`J\cZ=Dc/Lt#1<(l-#pde
+%.9sa.%@:`eQD-MZ4V#,df+[:AFp.'i4t/[!\`sl#Z9IZ/4",s)Q$UN/Q6WIsOjm7(59LjUdn!EtEY6<9B`:[/;`br>6Cg?p*VdZb
+%g++ot"GC:Lni0_.b52/I!M%0TQD>]XZ?Fke'Y8m((eI;c]&tChVerUFT)l#rX\HOrp:ljWm8G(0&?ub"N,1aAS'3J8n96U<6<huk
+%b)G5#$u3bWh$&58Pn9rX]&l<iX"-*LgGm$E4kaIG]]6s.>%Kenpm=W3#oVl.86Ur<.@'7$etBS'8I>c`#'5V5j3Pkj.k0eCXohf:
+%GaQZ'V/+&q)1/e>51 at Lm4*#X/_;f]Z#;M>u;1+o>8([1I]<,]'Le at f0P0,WmJTk+rPeS-Gh-U(-\W//`7G7(Wq0V41alIF6V_g&M
+%9(F`m'-&,p0O/dmbN]Rn=CqkE-B!E+fp2(PF('tUS0]$RDFl=>.8me!lU?Ve,t2HpYl7(tM:j+:gO>%iHi0ur'.A^"9f=cHkWG*`
+%_RL*(Tq!@>[Bc7>K.OS9badh>6r)@kG%J<AG01!Jb!V!c0LAGo:<[63DIdnV.Xf:8g)84k4aga#>aTmL%\.m?__U2f=VFS8-i-gJ
+%\?[m`8Hh6IVCiVY?O9,!?*u<<%SlRt(G:IH=0e$\1i0FH$ofi-)Kl^7M6!qG6]9_REDb'qTE[ZIItEV)[X%ARPkCOXH<+t%a_#VR
+%_m(0D&BQnaq;8@//RF4A!qU at S*hdJ<AYt4N=4*54m'e_hkB9XaoM-/(_":m)0mCHp&-*DlcAqeH'HA6MD]pb=l"&s%SN^'<h%!8O
+%KM_!MMj^2!Qb+^=D0r\&G93ClCP_,4>\bTR</&iL/@M]jgS4^HJPgfdX=q]p-$cMFT(M*Gb@(XuALaV at Sh!)t_m*B-:Lu1 at T12?P
+%3^e%QdXYS=DB+@)-cpf><i"R$W3ho`<#Z>VU4P1:$9lfQo)r))8%R#p3)[!7hK]<$?<"l1o73\u at 1O=X*XRhm,#p];#iU(#.!CNN
+%2W8%E*]d`ik4DbMp(SuLcb[U$a%7b#Wl#;f,S9EpJKdNYC+LU. at 5>>qLF'h^8s3bLkh<DDWnCP8U[LC9odeMrTIl`\c8IkF^&b3(
+%:pPIV!6kC2MEhFKeXl>KnHDsmc$E[NbS"HajtKN)rbC?TDR8nVlC#MoR9C0300p&o#fDjjjg<Y0OFP>6>K(#W7HD&(\@-&[P2?L`
+%G?+`*lqZO5$96^ioV=_kpR*"s?BdUn/_V;tc:NOu>;Ooar9,n*.M4]]/\A#f#7"@`LBY=eWNbV\,B/kY5b]`$@C*E+1uPUfl-WbY
+%k%4>PPn`ZQjR$7,2F5OO\:Tpg^`C``JbOIf929#*::Mf/h;+RTCr]KtRM8YrlV2Ze<)mJ;S0=e(YaS*D^IO-[Lk+hNd'H"DRu(si
+%\mXDuC+g*Fm,?H*D?AqUThZ['lMh5Km>V^DVR;P/DJYVL-P<N$NdbH))>4F,:HW/L(r;j-nt:/(*&ZMfPd7m-3SIN(=hfbJm+c:?
+%89!.NW--c2\%!Ya4"2fj-_;_G()t-YTp%O/&ta_AL"Jj#Rq64>]K"]+=5Y0cFj$#*F[l!WJ]E8p0"X02:NCj*^Vpl*YV".Te9Ki[
+%1imrajQm5:oS_e>R&]Bsc=M/-mX;@h3cd0<1km.;0j?B!AcmB25"PnE-9bN0lE-XVAR4/UWLLRC=-+QCKBdTf)1g8^q:p7EW at Sh:
+%480`DL8Q0Z7<pP*!3=S:*o7^2JO-iEig66g!#4Ip94poDa$I!YH]LeP.Zd9WBI.Kim at NI2fcra'KY<Ub$p+i>`lX.,!PQoRg,+"B
+%BaHqjEQBF=:M56E(#J_#i*j"YL4hne8_HXSOHkW*5V:oll3-iAbE+X,Ag^n/IQpIr&0*,n-D<oW6"m:LOfU!uN-ginF'WV!0+sE3
+%(fZ'/d+R6Y7V.Z_K=&>ZJ-KF]e9_1=nP8ijE4uG?3,+Oe&;$-SIG6 at 0ZCB@uD)SdL at 2Rb?`Y^K$TopY/,=P*)h3"u]O(=8\".XTD
+%EY+_5*F#+eaa:=&LIKm79-QT$$OnSB`nTXch/\[3&82giP>B09ZVC"k8![n_-<q6>KCFF>^s_V*=Ns+lnL/-iOt%1DOIcM0fOr*W
+%haaEsk%HVqLr[@eg3-WK!4ADO.oiWs%__8<a97Q;fgO7Wp?WcOe"'V):k!TDlmCas<DYQ_o:3p$5ZG'+K6:#`'J+td at QtRGbYP_:
+%Z'--u`fL6^)65h]>S$W7ZmM6((]\OM4YQqAG:`2*aTY2g``R(=Q3.KSP=fO*`aQJ;&sILk/YN:s)f$kmST[TUek))K21^0eEZoQH
+%JM'*BlJ!R8OZnl*658EsjO;$"j*/Vm<gB$)JL?$=!2<*S_9JA"/3=oo#K$bkC:/B/)=8#urA>YeF&oo]c!N!1n!&a.eUTW9=#LX1
+%0U=!HG&cUb0Wr?Gj=-T5?6el2[C:Os#g=cfZ]Q8KG)u2kA/FATSofOcM4ZQeZ!M[&Ykq\$e!+C62-bZHR:CY-#4Z;K[N at _)>*M:`
+%_%ae<>&1BZrAeu23nB[oXogiFj]16)53N(/\``X\So,On7BRfWMaXF3mc%d^V^&F)+<Q;Y at AeK+7foFc@H=c=<T981QHileb=];J
+%]8(&@nnW:DKlkXl;lMRoqfkl!`RNm`(Z6_+`&]E#m=J\T>TAU*m=CWdB%F84#doe4=;j4'i,To2_ojEA!3D-%mjbRgO^J+IC5%b)
+%H9&B$`5BO)/J%-="%1T.md`+nb?C_!iLB at 6MoX$OFP*'S.Ra,UY2mC:EZ6dMJ=G=r9lgMAi(22U#)lc!k&jXBkdF%]#(Ep2(SA8M
+%<cR5O"k#=W%_Ku#NbE?+MYC7gfS at +(QABD6OV"SG]7V=jZQ@@O/hjJmpa\XR-p8N&J!o(J&3pN3h9mD"Fr^5!L#dK39iC"jjqc8j
+%9)qHEo3X&POk*K]8PC at iG:[j at ZV]5,39aEV3>%[X4C5X)(etJM3Nr;7?Ym4uS[ZMi;<p+Lr/p1<@]Q=":;__7^iH>(+p>],KGP>I
+%`Zocc]]fe^)kNRgQ-mI$(JfZ!#9RcQ?Z#@.:=/Q/b'Of]RdHh9G[a@=j\?j_Z8J$J&3L=#&s6.E?C*!91L!J+1:n;39RO=(-+$7l
+%gLb(I,25'"<a]BW8aOHg-FYe"aF>tnil]C]PLV#jc)GYYbH6p at OF>EbqXOTIFa$E?j#GMdmpe5N.-bG*Oso^I$1/80DT:fYZhaIb
+%cH;$+8AG6cg]RBg=H5XO%N!u=6Ln^M!Bq'8Wg_E&Csak.lMK+$FUc]AFpk<GUSG9ZG(0F-akp]^T+$.BYm8S$QImk5$fBJ9"$_Cn
+%$0XsLkct@\l:beJ7=>T&N'?iABh6CZ&, at n`I#CS1`O6I7;t<3OB[ea<e:j\Kn=KV.%ROKO#tW=]928*>8pOPIc*!S*^u:E55 at no!
+%lF;mV#;Tu0N&%6TQa;n>!350d"RnU at G3GbD61O]+Ma07F!P-pPj-a8Y)R(hpp26seKSn+D.NRmrb*A8G6hcRHfhRLsRZ]f,;=c)3
+%c0*nHB&4l`M%@Wrct:Nu"Eg2HIjo;oB+Ls'<[Rtu\LMHkQfR_"pjQF>Z#td^jAar')7<ElqrR.-1_t&NP`ZjbPtA8-.3foaVc4sG
+%$')/jROPW.X6bhWk1*- at H]I,Xq/!CC)e^'"]NOsE`E;^\m?isqMI`r(c`,'F9_Fa9SX9[_IL=<>GKY7tq-.]a#KqK=Kd14`qa*G@
+%2S[3XMH`)RP;NlZ[V[=ge5"o:JGn<k_q^I;%1B(C:U+om3F0A1?$W_%p[35N*4J-/W52Qm54qdfJAdSe,;mV at or@U:K$PP%3N$NE
+%chUP(jZf4*W at Q$gN^/8!_u1F(>ADHIRs4?pANV#]>e?/H$]O4'5*BrDl:^A_R+*KkjPfdBQ^Bb(j+kU:X-CQ- at C%?">"MM82`>cU
+%4)j;+RpQlFQ.(&PGGfm!/kAHIB_o8^ep^(`b/@5NQ11#q3`#LR;"%&Rmt6X*AV7_Tj26\'fK`b50R`5uDBmJ^q72S,T-ijj\6_Ll
+%QY%-6Z18We"?glT(*N'b$Kt*P:K+jL;8(Y__4K*=Z"&Vt&,+e(a1#KumXL.3f;c!cTA\?iiUaRJ=^`rQN_.s=D(!\rCm)81.Fe(a
+%bNlpAP(&U;*a%Q%V*)AP at -a99CF@$jci17DHni<1;Jht"2$-BIfVn!)W`+i+4Gfqm,^Ao,8eFm#"!\V0OC*G?,e*.4$q\/AOr?D^
+%"^48"UA79lUeDp>1PQ"b;FoN(CO=oUNl,W_3`%1MR%:fN0q?`udA5<GUHlQIBL<>kC"j=]b2;!2E=4<hL#86FeVct]>4$K3KD9!T
+%B=H<1?UT/N,uUCl.mG4<.=Q<]PP0qQJt<'*[IeO<BgNoMV^HgH8 at Fl6%fRL0HliYe3W0a#@;81'@.L<i_K'ChJAt$Gp5T;B-?\6u
+%qbu at AXN^mif__roLYA*t1fiNo0DWel*;=Qc#Db6`>$rO<XI8Q:B=n#oH9co%=hce*d8+d\CW[%\d3OO^kEG4\V(?AYSg7B5;Ro5O
+%]PTkOA[u?lh at 8;AWLJ'\UGS1uAWfHV.'[sGABJ2b6&LDEQW]/N(oQhG==;*;PA931S^)TQ"S-eX6?7)j)];T/-e7Q6E&jg=ci9hS
+%mCT2'p[iNdC&K*2N^-4>%97ZAaiMO:W0I%)UnZFE9R6:8m(#AMm*7afOd^<O13TF<LfO3R>?/A4c`0rZM=R"?J,2^84nQ=.8Q4Vb
+%;opYQ,(Zt!]*kMgD3B;DP`$`4Gii8KK7lps8\>'_e9,n"7rY]XbbE:+6I./XK+uO]:_JaO@'ZP#h9[c'?8]n`7Kl.fM1eJ,lf/OB
+%(jYS6I?N6m#'o=:>Y;[N=CG/j(a9*KfO1s39utmR$-2G\4%mX#<-$JbdI3l9]4?'^reACaICS4AgTU`6D%2Z#CoCU0Q'ASj*9L#U
+%9'RS7A]5'VI(be!jLsq[Kt]W/aDOh'6&p-c.,oXCTW=YVTjScU=4NMZLXCP0NpAsMegc<la^Q18;Z&(&\Y8%/HnW7%0l1(RaZ`Uq
+%*qm-re.T(mookVo'$4e^-Pb0ja+L!N::"iG25!+_#;l_gW9\ZjLQo\B=W>^Kj`"+#<s+g?3;d*%_<*?oH1-nYNGnR9(@+T\J!-Y"
+%5TTtY957lrqu(A8_>+TJ2u2"?8%/r2*@S03Sp0r8hXjC^Uj<8mICL/?R2GN7*@Ac6&cnjk;@^=%9094;#7[Vb]C#T!WhY16?Rf.;
+%j$'Y`?YJ2q(+[sa,i5o at Za+:u&@:,?<iMRoq80ZsJ'0Q>`]-kUh2MCmKX at T@6]Xh.5ATZo;Oq[<go=a;/KQ.$?po?oSXA8FKk8<9
+%/)#.]J at elFal'bt9"rHm\u[brl^8hXOE6RGd8S<%OsI%FnnI$+TO2US<I?f'IY+h*/Hd%L*74A_(^W[n[F9+Imc(ru$/m6DPFr>$
+%_XSb at m]XiRQ at Ri1Xe9p7bBL!94R at E)D14GGH1I1#Y-fSK]j,fR'Q3Z0'\pt:UQ(S"1j`S.I3N%FkW4fOd1o4[2]3nZQO<^=(l=0:
+%g\+p?M,0!:'0i8.H5.^*.7':E3$2tA4rCdJ\.:Qqp'jV:C,m`h5"]fLFs\Yt1rPhn'?FM,8]sR\mMhAU*Roa"Ya]/M(K/gkC>ef(
+%.]MTu(3FhD@^!d at c%%Lp`OkPIE^n<QH7/t#$>n at _F%__Bnp;Vp"7WI':EhSS8'gNPWD9OX,RciOBnCZV9L.8cB5BIEnC,'bc-a)>
+%S:Ai/%[aDiRP;.]Di,G#!UGO>U%<\bd*2c-o7b,\lBn.f*K?2oSsqKUE6.#2j%2)6G/>US!9c0-Hu*0)rAX:N%kC9g0^ILu&:ZT5
+%*K/1dMDZ.lPgji[q<:GKRshsi#tg.*cj9S!iT=*g(LqMYn`aibJoiW&"@oWS at 3I1_p`ck2cu^;id\I2p8XOC<0)(?QF':c+-6L3e
+%=37ktaD3Wr!_RJro2%]W^*=W4amr\5!gdulcFfYkoC^9Lq_^;lWW/@]d^I7f<=.:?(IXGI3Wm9Of:,]&-[<tZm3N>h_<k"+gTY7F
+%[2*4cq,Hi>_9#Gg4#l?D[G7=#f>Cej5'8:^I=Z)Z[FjUb]k?K!b'%T[7>q?J\1Llbk=^]>4H2Pi;W]s=W(k!S#7`te!'6k3SB"sL
+%)4*JL'%Zf/<_KU>#^C5hS&*Xk/%1VcVi&eVEg,m!k/".fpNr5lLQN:_F,lYdD(:.eBPjTgRIFMr!FHlCqQ3]fs$e9F2Cs]qr'j!'
+%=PujZT*R0]#q^<?e^FE4P\I&CGeFTWe`=<F#AHq*s(nZ?[YGZ.0u6F1OiqJ[bmHta8QXqMND7L91VCt!#[sHN/4OsG3$1a_J^(gJ
+%PN/,T7:%sXO%2J at Z)K8IRb+W%dG7Duqmg?,+n^l6oPKd&5#s8JH%I*/PF>6PFdSIY*Y_"?IG;<bZ=lh_2WG_#onEYn.je]<MZ3]>
+%k?=!=-((I'dY/%Zb?%Gd755UM<YWmIc=cn<$ckcP/a/CgKr3+mDEr3g,"o'PX9R4.I,;Q:l)c:A5U?CfJqmq-J&,$>`$r;/bm>V]
+%TY8ke-&$>H:HkFfa=8AO-_N"*M)Z<]P!cqd9IJms9rBM?mKj#@F!b*T!)`AYY>OMOmJ]E<D:=BgNAh6XEh_/2_^utV5B5pZm at YK.
+%VQ at b>:M^q&?`8;SC"sdESK^+[`_Q6tfOcqn!Rm:SCO=0X*P$dNTgg]<l'Ti78Cf0"Oq9qQFlnR:nstfN;1HVS<NoRR*?u<VFAYEn
+%IeV at V\_uMUK at L8>^44 at g*%Dl&O3p\M9:\]&3E=*F.ApuTS at -F`rG<8kGaRrS,bEaMO(uPKERDCrc-SN=g!jmm%J3G'/g'[`MRLuo
+%rB@&9P1B/@E'R6j&iGiR+8^tQT/jmc#iKM!oLK<ar4XMZb.lq46IdiX]CWgAk17ZA;O)C-`7-I'-9q=,FUDdacW3eAMD.LO.;&<a
+%6c(hLrT%Q2@]";=KJRsZ!Qdp7'T,rg8TRtJ>Ej at BigMke[Hu?[cCBp/DS,$:#uKA_UI4/R$b<N4$i/INq]-*JQI?&uP7t?cW\@)e
+%-XIH.;mtd.P0R5H]`oTKEsQZO)f$B]f"?QHo&rWQUbiPE%`mmF%=;P;f+'t_b>58g^4mB3gO10["O&=W*p<,hnWJfVd'hYk^;qFn
+%0[<GuOAk*Dm^[JKZjC+1H3m+=lt>1=s1BXPVU/(dUhS8Y&*@<UoaH;Wj+\'8,t30hq97D<!e0^_gTcm94h%o_=lnfZKlX:+HOa,7
+%XDZKGp%>%LP)OACV%HLrr3sFME8X.D/U$eeWN$'k<jO\^MS\9?Y>qkr3HRPn5VJb=S##.T+$;4 at Cg+=*%+ at LM^#u1=8k`7R?/3K<
+%T3G8Uak*13'tj1QL1$!_p-fI&iiS&tc^))*U at PMk^#U9-K-#A[i5.=M;5%-t\8lTl.oSj4VWD)A\ilTLrG'0YPsElcqfhM8]pWte
+%dsQ)U.!=Os<"D80J]^kL0fNOLjOekV`X&gAQ`mj4[,VFP^$FGacO7qNHqgJs*$2K3jM`+<!9fG8Q7mU5$8`SR]!14g44J>_llP&`
+%A_2]kP\&?4!OAO4Y3!5<JYstK']:ftC1Uld[!!(7qslmOU7ap&F)OfpLYU"Kpg-RECS5GDH5/icar;rgIklm!2D\t6n\>ETWB;I-
+%,`u;a8MheGI4;/M86 at m%edue`ns<H<9.W[\<mOX=>X-X at H:.ImpQYuIH7-bes)a-SB*qMDC4;tK*.%VVjDtudm(&DB?#D[C'ID*6
+%B_9u689DO]\)gb[#MI8B<t4lcJp"PkgY*9KCpqUW9ZSgYb)'@#C;iNsabbQB[7EtrUbI^jALc\8J2sS at 9.>/L2VuS]:C+E(X;0km
+%&?a.N48,oaZ^%h!,>WEg_Y__P5`?0+V]fbYmbpJu1c<<3<T"d[h6hQ3N"C2]Q at n#W?=nnB+\tM[Jp9'L^671U*(k*E+jSPH"P+IK
+%i at 3j3dZ421ghllP@qG&7R26(\k<&BTIF^a`?%]4:Ee/MeqH&6`fM%KI8K9CWjOSTJR7_k7'<9D-H#4Oa`Gi2MjOBfMnpA,`q/%6<
+%bUf0sUi>9G(.>ViURIMo)Bo,kR<,CZeh.GM at gpO%Af<*UODpQ(f^A``T4)pY(QEr(;l7LR,6p-+r]#,98NGDE-]:.N7SiqU^nnSF
+%8=8"?g=G>KCTZ?#3%<=*6(ob$DPC*%$0[, at FoAHO*!j&ho'.'8>"@'RF)dCVc^X[f[U6bnHiIc/s61X8o8&*A.#!ujJodKgJ\!+F
+%DS,.0IKS7AQ>"fm1=n\VSM-3kNg>8H"`5 at _M-g6F+"<jGQQYN8pus-FS at __4[@XQ5J<3)^:]<s[CV&<0F:uo?8,Qn<#kJ[^Q,#cu
+%WW\a=?*fuhNtj(3"(LP7J=:%(6d?ho<$H>`oh?-+M56LsGo,0aQhPpZp00G<GC_oqiD6g#Nj\:Po3qc)DYiE!%k2P;"5AiVm581[
+%o"-peCpsJ\P1m,?hWEBSV1fsAGou at g;RLGTL$=NG+M/[Fm?eXs_pl>u<7o/n(M85G>1bMKq1"#/[Wf3hGNCM`\m+=:!TjjhV+CG7
+%<b@<s;+AXV;TbA=3U?4E;bD.]%mmeY"*\be2e#u$Kt]KoU;O9STlc][1r*Uhjp^klJfH=k-8AZIR+i9"dt?N/KOuB at X=2hSq4t*J
+%g`I@"WH5YuNdWNe/g0/ea]:Cc8&-%<.,p)/(Lg^5="g'08]3H9W'VhAcU'Ru2$kEqIl6n)_%6l'hS*S8;_L3[%RF=1/QNQd?Fb8K
+%j6hYV_)e?]@iHOkUAjUR;,FCpjeAlEE at 6ddcKHM)Qu<<S9f[cIa?r2u,h'R>-HjpdjO+Q*n;3)i!n3_7]3ZsQhj2TXf5'(8$7*/7
+%W\8W:H_'Edj0s?^,`nP)-`CXb/f[F[BdOfn at T$?CZ*#[omCl0Y4Bn]r5!7M2l4l5sSr[=OVIP+jPIfAE.DCK#%^"a+,.cNF/Q2r%
+%#[;cM!k6\()no@)BdHq^9dWb_4<!WLMkMBadY at AAfmOQ]dN6-ECa$#Og\[[*]^tg>kK2m0)cp?(`E*OM65E$uP"H21#e\E3ie,55
+%L)e$@s+J2EPB=4\!R-s#5I)BYnnT1/dZ6 at o5]l!OE]mhm*9b,;AKX?0#_n,*mddg=kutGL8/UE+bOIK_%d^60%/j8QKYkBuK59;+
+%7!G1+d(*armnV7Q\`VOC4R6:5atq7lIiZK\nTj3a8[Jg99*boqc&&YpQU&MbQuH96&]qtN%.7NeO_FILI]$^Ds4HpWXDD$LChk/6
+%0\^Is16lF4_)(I[4jm_I,!7:n(,FH!(Nfs[?r.;aZH-BTfh,(7Tg/?coGmV$ra7[,q]k(@(i[^0a8<2$IJL_d at 7VK_]::Q52WVd-
+%=0njjl.c=-:d"FYB:qEf'DtPa_=HMJEX2.KJT`N/mlFPi#/@Hl)VlsYng_gInDq/`Db at B!#/3A"]_@\r/T^=/DsVLX?n]@/A3SR"
+%mC5IHK3Jp8Rj1_Wg$b_b57/568iEqdir1<`3iR7mi8Ke#\M9=A!VE>6cf\qnd%]-4Z34YB(1bET.i#r*T5n1.:76e6"/@!8`?qqW
+%!2dJ(F\+/l.oY(-P]LdWA#A6W8l&cpha]RIfMQHXC7t)[qgTmTk.J<I)o.=:a<K0$K::]p:j,KD[s@)PHo%<kT-grl^en.Yf6qJ[
+%,ZSToTkJ=dTZ8AdU!90RFM'=1'.>uT#J'+A`O:]Z_3U6:5Tk#XOti#^p*Qu]ii7!EY11n@`L/B_F5J>'*?gV?f<35DF#1]3fd<&M
+%d+t at h]%I5`\>5i+pEa3U9oVgQ'-/Ibp`g<3=?4,d-'H-(KGahG_KsKNCTbjPe)$ssa+_g4Qq5r+G&(G>Qu(bFgjV.:40c.eJ+Kf7
+%m9U1b[KrgO*[sn1^&/FbWBQmm;p<&0Q<.[FWHI&AmlT8ng0I]+25_k!>"\6GJ\\rXfD$:FgN[uOdg/VH)p.CKc7oX$,G03`9l%2:
+%mpg8_V%DCS*/'ShDGWJUPgAuP4Mb8_FS(lfd+O'/P!O[rK)3ZNTK/gCA?-65o*el:\Ng>:K((>nR*R="^i/9/S$&sZfrM at fW=Y$5
+%h*:;B"uVd@:ft/(O at 6Q1('Rf),[+C/\CJ.nZ+i_74CKDbiBDmAF3-%]N#(jUhDr2NLSQ1]_Cg=`6Mkr(Y/hV3k+$^5QXtoAe[nWQ
+%oQB0rR?X/]H(L64=EGqG?[6J>ZtU^G^5ur+!H[+2Lc>]j30PH+Pl,mrHa`lMX"](EjKo(:^C.Kh#b9;_b^[,Kj5\1*=@#J`B$`!A
+%?i,nCKj2^VSF5],$2eOmhaT)-#AEXQ-O\nKQAC'kD7CH?S>WX^1AM?<?`nuHGUjU'24r8`$?AqB.dW]T*Dg at ifBVP_!SmLEe-)f3
+%Rh=TB>68AK\?jOUbAUU^=F/H/[H@><I_KjgW512=Hrm[$C3#p^gI_ObBmd_9N^&k at OpFhaKI>AjlJ]"M)+,)GMEtt#Fd&6rBEN3m
+%g[j at tW@UUoO#WQ^TBj[Ccc//jh2,atoRj^Y>#rXIWfM$BSA[fJi\SUs!P+LC+2%AEqj/Jt`\*<WbW>DY(t=n*ZP80FY6aQS#I3X]
+%IQ at 6YSj"&Vr)>7V^6hEFd3So)hP&,WG/Z^*4eq4s3a`:]gA.("J:PP3LhK=<eoP,1Ab+V6.@;ZOS?X3'-Xk6L=_qNZ>R_Nn*s#;N
+%lh$V9q<,,;_U(:H7YAaL3SP@^)j+,g`>jJ,VIp%^P/&VJJ\uNbK"/,\NABmtegLh>Fu,;lXUh8bSYA'RMaumpoVU9.R]IlV8RroL
+%=cK>Q*V9BKDDNIa,\sM0-LDMmlMY3%^oP]iII`@RJbYj:4,8^sXVeKV2%TBdB0C*Vj#G2qr7Zo&J*/i@`TjEY<$+\j!B,;!84mdn
+%B9qL8:cKQe;#ILqp(iF":441u3!UgN[H8e_Nng8oFY/`%R(AD/1b_.kC.Bn6308Ic9bc6\?#b`,+$):&-piRJ:WYVa\fQ7V?`_PP
+%G*>VuD9Hjd'<H')(/-6WPk0I<qSl)`$a]O)R8/cpr=LsepJ&nW4maL:CAT@%$]U?LPY at cm/eU_H1::W`flJ80PKV_[@;``3h!66$
+%eml:VK8b2am#hD7)^Vff0HC3oR[rd#+;KNhR<rtgML.\g63!R2V#ViSaJj#9=!c?J"=f".\(4UXO0^+B)b>)1p"G5f0 at 2&TnAn8e
+%A6da2L&_IEI(Rq_iRQ"c#>pLO!4)\?Lll2=$[.J6R$>AA;Vt'\c at Yq;;^it\E^,>5P]\?TQWaId`RKKg*R3*NfaI'NB'r/8:H+Uf
+%5!Cm at g/]-`2<TFfO>L(H-D$=1hJc//jc]/egE<fb&Lh$"f!gQj!T'aQLKlU\58TW=<6juiU_?!WIQX%MaY?.)^gbX19)2V5P at k$$
+%O75hGNW7Dh#k:GYeMGiu,P[WObL=Ah,a$<kGTnM;8#mp],rAgK^8u3d0]spW\eMW-3LKA'o<4"k\_sS^4q at rW&h*]IK1$\DanZs#
+%F;1pN$-&da^s=GJd!@;")No!Tb;-/q<Y[j6Jb*r53)`SGU2J?S4MQY>\a`c5;lUQdJdcCh!LbDKpmp&^5DFfM3phR]K[[AI6"<kF
+%2SLm;$-<BQK#ss4GouhprL:,0%@SjS"*\fP+:bnc5=/_&Jks^*/lk,,YHk%Tk2M(c!0_1!C"L-`;C"gMI,Aad*b5<$H<clkDQeI=
+%$Y9iYbjeGWq\KrjC!q-=O(5HCqUsWH/'aj`[1Z#Ae+07AClpLSkKAQjK#X`U69SDF?cmsd-TbMKG7d%YU<P1"VOSlM(mq8q8o^u.
+%8pDj6b&.KjD8Hekq,W:hO"pqVq2GKgAk_BCm3 at mGkFNibZ'X;YY#;]%N[9u1oD.!U`A at d*=D23T*kC\d:WprXmJ%7FCL/$L`PWb9
+%Ot0WheFTB2AQ^/)d=9'&hB/@5Fn97j0rP6DDOmj!FLG%0;?E3YOV^`6c%B,sm*MJ&cMsaN]KgsS=<6OOojNcKb[=cf at 4FM6?B96?
+%k:)tF;>[:);e!,i1NMh%D3Ds@??liZ?eb-X^!TGDLeb0J?jJGiXTR3sd<ZM;05j1hBfFqQFlWVSDi.+mq:qr-!r6`DCe5e42"k[B
+%[HC&1X>>bTf%'>:^8l6"9YK'?95aAfb!K"p[MN+H5F\F7%iraJp1CNDn<+p7-`Bf!kSHO9i<Los=s,9a2JNc0[:Y_#6so5cB#B>]
+%!nlsm%S/Q<GtjCAium%1\M/N:Jh/c6V4sr4h0=5l"Wl%\lD]/fkEJOILY'1G3]KJ/k6NccPmiCVHh*;3%<Pg?r]>2o<q_L%bLJf^
+%oj%gg&>"gZ7.,?#m=6Kh6DSLUZtl#eP`8qT_AHZ2QD$r[=r!^Pkih,snra._E6/RVG&YIfZ.HOL+#KPrW21-3.6j/P#SpmjEt^YA
+%J?U949SX`7,,aLR*_NA$U2tdIg)^ITC2RnH!$Ssgld<OMZCP'd at mQpi^s<.O*5bLCkEcuB.NnBRIQ.s;cm*b:E2rmRbs]>EL9pP1
+%XH]&^Rj>pFcYt/p16js5o]LNdg\r1oVAG5#XqC;C/#8_c-n+>8RXrjirfD.7'd7"4ZQZd$:"iH5^YRF(aQDS6(+mB*!V7LLQ!BLm
+%s3^B:L':_'l1l83Jb+[mHVIa[;U3Po+a+[bn\b3UI=e9o*u\d4$ST,_A*l,qg<Kh7hlto-(Sj;lrR%u*;K;ojg!=*.F.IK>;G+&A
+%OTYKRk,/ML2Sp+gT/t)B[`4BAeGNt7\D2bB,aE_OVY/D#D`TK4<?Bq!O^dq3:2AQIFag0KQ\q(gE6u5Y]I+!#ZE:-$qH.C8;&:UE
+%gI%"]k%t_e)qW!A.7hGCb_=rf,hr?NG'NE,`Cn?g3IAlqH.oZ(\kVP'XD+7C=?CtHea-Re^"N]`*mCf^Y"J6>-\!b at mUK(8h$JXJ
+%ZK,a*G(E-b2GYR:HmUJ#_01SC3V)f?KS?N_SKn]R,W(+*U,Y0afuQm@%\d<2Q#b1G<j^S%Eka`T=TIU$XHi(dK.sPW\1SR8W6(tF
+%XM.!%01i[9]Zj+,b:i$o/hll at lfbj6f[YTa(N/rW9)4s;KesQ\\8<P+DdmA\/N>gPmN`3+nKH4:Y@:)32+iRYlC\luo`TPi7n`6a
+%qW%B%a-Q&7]Aq&13"2>^'p/sT8BNZb>^`^ePZ6>l>%=3YC]Lk0RsA)G0fqtSe7"'44=eZ?kH#UV1$bmu_j&Ds2=GT\)8ng9s1h^M
+%Ia:tp9<EX.-[D<I`AK?;b@(Dj!oT0Z;k2Ipn$-ka%Q6]C;d=0UIB=80AI&%o*X!dc/.DAXmsO)OL2;'dEM<7+/d?R,McF^'Jrt8Y
+%eX at jOm/#9D>u<K*3WHAkrD;(RNQ,J1c6iLH(0$#o71C5!oE.fCnDp'CTq?4"WZr4dfn:q>.AuWM5[(]fqj"]T4RB95M%c<V8-%(U
+%48D-\nML'i-tDUd;['"d`fS\>5u=7eZ=TimP<5UESo4r<6God4GOh;3\W]fIXS9NReB2QhE/XDAj$)U;9s`OC@('n\/b5Af[Qaue
+%]-YIMSA:q"2F\JV3VN^JmFXJ`*U2Z:'GC$9M*d"H+"?g2BpDkk[2bcRjHObWpi%7g7YS542;$""l`f>CTSp_r.'i)CjB0'Ll7#*-
+%Ljao8cRp$Tgk_#hHc9d%qHc1rY=+r)J'b0D-RB at pD[&hbN:M>'CH;-:0 at KZU"3/[G%Ql^./A;M0F:$qE9M7G`MP1duE`7h]SD<fc
+%@B0Q3j!9(&$/eA98F?Q,r6E0kG`I[!4s`J!(LG7T?hkk at hIWU)eZfkXf=R]]`cZa at M'L@"7L+ID(6#DG,$s/*/UZX:&fJbejq*uu
+%Tjf05>d at Yl8O<riJ)h;J^0dO(s7;STV+.u`@loQr1N&Zs[):#Lm&!E0fMi#[0B8*P5iL2B at gQY>CmRh:k/!!*:Z?1b;4-FV=-A\3
+%6^Ni&G&qlQ'+["Za[QgmBAs^E>tLK_Z;(b8&,[%F]X/Q/E&T(h$T>8%Di9a/`&3n';UJcn;nAr^Q&D<>C8p`m(?>;8r;=j2AfJ=!
+%$l8*<QM&n3Bm+A-a<]6t]3q3gqo/m,Y>c*PDBF(q49]?8h_Ds771JPB,M at WBM6ZUg"Ho.[J50$JL-m])ToW<^)(%7XY)NXm[X63H
+%Ub_JH@"gq`R[lA,@@N,L3RsfHHK6+^C,bdoo?O8gENTeNW'\hC["SJWl#SV2fO^%S!Q_3phZts$]&4_`]\TTu.&)19^k1.fCC2QI
+%fK`l^0_>hVOOno%7NWVkgp[.DO2RI;dqa?/XdV:lH;h4?>DW1OQd:fPQ7 at f+27MVAX`L0r]W:>CTT]4XEnnP:oXAV7&6MY?9d"r"
+%Bp+h\=eO/skaX#5-Y;$=V!Bq:NYm)g-V5mH]mVet'(tglE\Dj^HD__m`8'^_Y"?5rUC3>?XdJi;LbI:>hSDA<ol.oCeLmO0a+Qe^
+%;if%1>Bk*5:9'bb]6+=G^(`>MIYRW;!\`ER9>g,H:sJ7kI82ecNW0-uEh(J)7`EK*GpQh5PEU4;OV#WMSE='<VcI,AhQ#inqhp)F
+%?^9^m4IR16BeQmb,UQ9,`gmB>.JpS%;154KPtJ5g<<fOe,FEC4fR%$aL(Zc,DOgueg,LP#lQgQ=[!dT,0pCA(^Sp"6 at WSO8TF,';
+%l*+?15V&C*N2aJSS1OsbQW-s64scLBHI3X!El`51aNdeY0(f,;_.nFjkL?);&:,B3@]%%1<,$</[M[Wu4>%'N3u5u/ZLE.9+7KI3
+%*0M/^mZ\1hSpZRWaKKME5_CX(Yf$qo@#sXG+mBR&:R)p\'1eD*B`MpcI<]2*e`@D*%I]+p-N:uIg6N0GUk6b0m^&O7X;;'jK9n^C
+%S");T(`^qLUV^Umn1YY\bVC:.6_.gjSl?87UFdn(-gEi/6Cs^$`(0]U]1V_NG_1>oNd5RIVf7*m4IR?T\=?f@%cN;:O'^A#,T3!>
+%jsgSmZHD7Ud*VJ&b7phNW>sSI;i\VPdh`@tAjbZ3S[_fP$14V+WL1aqE#JD5 at 57%H3q(!%X=pV58671dkF:na(.'WhP5`7pcPL'o
+%HLS!]M>NJ2qutBDW*08h*QtYI67).LXtOr4^Z=+DFXk/&F4V<(PGlhsV51&RHI8lM*DC+.G?[\FGf:k6N/Uq*1/0tXAQ)7iY;D4+
+%TYbn/-X>:LmC^Tn6J&9sTb)E-V^Z1d9I3/ehUHVAH4:Kmh+7LD8p/2*eZ7$>4m8D<i-l=LWiV$Ibl%B#a4ur)P0/Ep5<a%!>CJ']
+%ks9AFS7C$8ZW2#p?]$%5%RA5VL:roX`99V_'74e.;W5A"FXOuT=D3oF$rrL12V09 at au2k$5]*j6h'a:;8c"E,*K-h+mo3cg%WccE
+%Fq6Y<,ffNB*^-ucGN76V=fh[pQnCt9Moa1;/>Ya2/r_-j49geh1UWlk^sts/@s.\[o&3/!GG&%,7WQ<U:Eu"OP.$nW"^FptTpfL*
+%AD0_b8ld-eUhPWIEs6!ET'lF!(K[o[<lo?XC8.\kchLa]#<'_R1t$#L.PDK)HFHaTNhkjr+m+r<%s^DjgprrGi51p!5uT02Ipe-O
+%SZr`W5'sRaG.!<KZ^;Nj7AcN%g]mYRN%^6Gf^iLmT%B9,ghh7N![LZE"ub;K_N436_kfdd>r#UTISt:KP-RMk0#>O"Ke,.NTB?Mm
+%8dT31NVRkHEgus;*t>GR+S:k2"4J&Z"L,[V=0\q[((l`3hNAaQRKCq.,_N6ACNZSs;G/4m4o&#]?HE#,Mg6o3-EXGC22GEsf!;-1
+%Dn at AI3T0M'R.V0"hr(Ae6=-]2>Se6hcSHcT"YSE[S(W9[I?FAM+.E^-,jc<Udd2g>:+GWopje%uqnm9jp_QMQn/48gc=p'H5c%0:
+%BDjjb?RQ?>,9cA)"T33!b&a?&6$"C+1AOunT("sG$TmePir-d'cN14KgTV8*$5A]Fn8LY*. at q5L..t%Ib(mZbpLLmSRR!IA>#u?J
+%F-R<(\2AKs&n>5VhL,;UcmP+U0>HaVPEGQfg]?QWUf=i*U2?soW85Md`U3q$#T$^>m"<kaI#s^W2Tp!l at 8ra]:)e0;IFdt%j[>tm
+%T3DZ)'&j>(5i]1P]<[dV=E at DPB)VJn%\gV$JH&;dpgKL8<DYm*psull+-JC-guP*g((M-nYnF!%b#_\&,&hahrO8>e1rl^WZ)BJP
+%(fken5]cnhYO5>Z at 63DEc6<s?A+h`\UIUD4FtLg<!qmlFVW,bM06kLT-1Ymd*FJXt=$G0'e<qGuqXqacHVEAaiNmno26L7Zi?T<,
+%9rXjc;rf<XP:uLq)Y8^,$!%i\j:hX<X3#K-nrlCUai3;$)b<;hqL,V^H#!g_J]X$H`&_u/.$4u)Lgs+U?<t[\kOJ;^foqLa%H\a5
+%Z$6]sq'RI7T<Ilff>\D?>-R+MC]F)*Q/"4j.E""n%IV)H!*eaC^pm.WcWstJZj/E7j=Em;2a(-a^[[s^D5Mr3 at l_@#9bb'W7in25
+%AGFn;SC[ItYXc`W==)@)0]HdIgKGbO5;5&`f_2Od,^Zd5>.f(YgM-QY at eu\>23$+X,nY6^Xoc]p-3JJ`hfI7XLWu:*osmI><ioW`
+%A/[FTFOIZ'#q<EK:$HpL/d5VEA*&WG<5"?'^-#LI%XFh[VYm:b/bef1;grI4if_3#^<Y4$DBNOD*59T_mdEsPX=$C0>Ralf8Rb7`
+%Gp+_U[OKZh3IAR^$]/J$i$Xk]%dAhmp$h=U>A*]-=BKgidM!Fd9U<#,1)DE*P`2TgT("M^n5"R^=3I.h\N*TsCMH;lV[tW:e5%hd
+%T3B[hW?4S;i#@')"#>$P-JOqBH7b'.d&H3TVN^dJH6M3$s+S2[RAYl/Qt(TJG:K:3[WOSYEIWXf<ut4115RL^+uq(ImtI=M)mlmN
+%@_pXM;("nH9Z\i"4O^E,jh&af/l;lh!:t4eoN]VYS!R6rJc_<Xr%g(H8p,3ff!"\r14(1%^n$>P2+ALT14%SpIKP'`MXY<EVMl=(
+%jVLeI0'5nm;VkUS48"_VmJ5\jL"J7!gRo"8*j:J,oU%-MKelKLE3nfInhflN=f-uP2$\jr0=[Og2)u+N%NT<=2#D]80:MRsmj6VO
+%8<jlte,EdO)(aE\Ae]UiI.fZ+No\CP]U22m\k2`p:m2V&J at e4+>sCKu$?,K^#o+%Pf.6WP%%R-b!O4X()dA21g1("0i0aMH;(3M.
+%rV at MoQfu5q;/`QI7XEK2Fmk!EKd"@DREJqiSbA0!Q,VOC?#Ic.4LaT:G?4&J:;(Y#W2,<ngU)&XICEA?Q3[$D at pb0RKCWgTmd"D_
+%'JOc//#cdnK(FG3D!kjYN<A\/TEb-h^ROT&+InYI5YM('kX<m1/GVNtK`o=9j4)@FqFZK9mA7:N@)WE1[_-#0SN/ZZhP at QMr.=UI
+%PB*?k"A3F`CssX6-$^3K4(PNLr<-/Ei58<oa\I1\;OI0G,(.n^&A*'3\HW9;^3jHM]qSbdI;[DZ\5RZYq(=OeL:g`bTrHGqJ+lo!
+%Z,r+n8aHk=SE=X5-!D)AeAQglPg(\nRG=!(5 at 7138],8e$[ET"Ya_qI78 at XEX1A@@Q1O:ir3sL at M]pb_04El[^:%\+O8G<;kPZbW
+%SNZ]Ja69 at bP-DMn^OfjK1 at 3"+<E6IVn'kgmZ]]od.Xe at 42DR7*-^c0j;o55IQ?(,Kb.rdZWKG[ZgA:F`Q#JjT%8BQHO>n\YS\4qH
+%On)0]81F8Z`Q`O at 4p@_K*/9e0"Jl#0r4,!<7PF2qUMl]llm37="HjBr1?Ybo:-pVT=mM1+[\,8Y[4XHBh"Sl_R#"Jr^*uUqWA\>=
+%m*n\lKq_@,MDd7N1M1W&2mWhAH!$Fb#A4j+*A[(EnL;Ho/$0Tk51Dp:_>MsS-,R1`SdHaD!OW73]%>Oqc+CKQNc%XO]cGr/7Mub-
+%i_3?TVbMQ1poW4ZmlYNAYk_l?JeSt\F at JUCV:D1K^=B?Qe_Kj;P7LT-BZr8<),k^8c4]FIc60Z,hf7&H],ki0,n\J=[3n[*o_p$l
+%/dO<3K>&TpZHan-:3Pg<n9V66/]e"CjXe4SA+#`Y08V at 48RD58U,P)T#mB#s%O_OO.I=NbdVn\=;Wk`i+]%L.eDeT3^9X/#YLB)X
+%!H%*g+u<U*[Y2Fhc^BPJ_t]5I6a"h7ks#tScJ[;u]%CgUfiMnA8:tB4R'L](f^pa\\U_*gDs<o8-e\$5=q[H<UQ*2qd+P?f1<E,"
+%4GOfVFA930/M1KGg.U#>J%[46J,'8QJ(LZtPY?iV1Mt0WH11C(;RS0YB>:4/M$8s,`@F?DZ!B@@^.j'_p3TD"j81#Hc$P#*CBed!
+%P<1h9_XRj*NPRu\j_A;o"tM(ap.C18/"X06Ef,P'G;Hb?FsNL2&Tl at bgns)q;gQ5K^>Z3QR`]itY7.5Z`7di)4ik3 at pS<C8LWt2t
+%PSJ4DmmeJtB2p7GMun+D^/_);E5552&Fb-alK8%FhEQ:SGp$IWW:jT`dNm)%-H%*k['hokH4_)&\FG->3jF"jMcKR3`PQgH+!^-]
+%gS4>cCKYIGEPX>e`B%cParb,N at oup[HSWMZa^Tn;b<;CIeQ10<'=2OMQ%0P'hYJe98+KML5h,]%P=PgmCrI&5Eec1g>E`69MuII!
+%7Y'Ahdic,.d.(<YPMtGAgMEF%:_%1h;1h;E/W$n>)_p[4ok<)K\\R/(N9u9=9_!!F,BDZ:kJqmg,/VSKp9QU/h;lC<:7EcaF/9DS
+%+a%36)^$,r5>^W\6>dip8oIL)Y[2XFroTUp1"/@o89?0_U`;Cl+(r`j>i2'':6d,l5;4l20VA76qbOiVIH^<hWP*E"]d4&8*l3b8
+%8/-Zhi*t"(rJ>=Omm!\rNb+^Wb)MqnW9AkiUE!SYne*@=pXo(=mSD9J7UNm2cQ")5#6ifK<ltIod?T<kPM];V"cs_'/<rY:@Wuij
+%l8XCIGq8][r&N$D'oo"f:h[pRn!u!)a-c">VEjri8n<Ap&GdSVO91N.b!CH88,%3*G($'%OHo,VA`rS\1.j`9\H(gM)WQj*OPn`d
+%K1b,b_(8D,on.[gI^`LX*D"T_p])lf;`qIMr'p@,0Ib*_kB/]F5nhI^iHjEB*i[M/Nd,M1GK^PK[9u_Oeri,iONt.g3L?'D4ih at -
+%c!+Q%kg/&@Zod4n%i`\!0ABAHm$<FZD#[W034K at gEX241I/RXMM">-Z0+HEOXDm%f5mVM-A>kE_*YQ)15m^Qdqg-_N$0fQ8,6?*X
+%&[DFKPYOD"+/KQj(lLVk,4^Wi?1M'Uk"3t2ZQH5TP_u(?`CcS9fmVeC#=K;0cL3*n4 at 4:7DAu>?8f,N*BU<gaJjj/7K1\M+H7?1Q
+%Z*_ZSr$cl_;rfShg!.eJ'5dY*T&[I!"$O\g=5W,GE_s+e9Z#]O>(Xo8\f_u%c4'Md?oelJpFQ(4V1nm5hP<F/I/64^H*_WZ0JFl_
+%lg5VZDs`8KK1U"d&b4G"^*IVkgN%T^Sb>!.Uf=!hKU?d=2mA2d%f[nm2N<Wb]oc436FZ%cZLQK=<_X\g\THqADbtN^($`oOn%Hf:
+%M21a!mpiUTOX%@#mU0]m,cMkRG-'K&>@&H;ZR=Al((!D%I+:@#j0cNRA&V&KSNZms&=Y3hQK1qqD<QKQ9B=GQB"14?s#J5(YM#TV
+%B$+=M8K9:L"7d!^SRSLd<?`@-$`3mQ?JA)RqoU5?OQ+VN/"O^'@.cD:)$rk2C:7:QkqS:-Jr1;t7nBG$FKDg(ru3A.!Q2>Y\Ybed
+%%J#FC'CD26N3+NX'/HufP?u>2QRQOA_050T.oT$PgYKc3fVk't/ZA"r!]a%3NJT?M%Pb7bZ.HQ^;:^_Cfa>:uL2Z>uEj=N4ZYJhR
+%30m>78HuIQWE]_([>!<&B$lIKjj^D.APkF//+23h`$-hRf[NK!#Y at aeRh?rKekJh$4HfI'3k`k!;3>gp1U&ZAgLhdG>*B8PFcM`u
+%V2L*u(C*fqgc$Wt_2J1>9C)fLGLBAfi9:SM^-e/+]M6d*BPD=4]\&*6e=7"h/$mfq[jYE&h!%!H/>T0"9G^VRhV7n.&*i9+P0h-]
+%_;Nk at jG#sdc_m]W]iq^k@:/>G63R4KF4cqpM`3*,6;?,GqOW+)Qlm`9=V#lUg$bDg16$h0'I8'n^eB;K>;IACef5shJUnh%/@p'6
+%Q,\k at a\GthZ.5-*lt,co:E-B\Ni:,+CV?#+`F^YgD"k1 at T79Y<%-q^JGZuK9$T-XA&ZGZ6>Z"Z$<(Lg@=8^uf)egZX838+P.gc&m
+%bL!>.]P/Wl2PEek;[pXSM6am%Y5s>hjW8bsInsWN?%^NWo4>VtS3dnee>H-]oB#obB!hcf(R96jqLc4D;.nP4W2.A_4-6t:Q)J(D
+%(^VKZ@&JLH=LNC/IpEg_ngQJ;C''dnC3$=qkUqdiX;"6pXcEqrAq(<IV3iDgD at ns5rNpe+m&;Rcccr"2(Z?@p4n^.t'T7MC%o3hu
+%!B)X2qaS;Kr]]lgK&I[88*2 at QqVXI.S/\aY at D8P/Os69C@'`7/GK\.lRO?@bp70TmTXjqBn(7,TmIVBL<h2fb-,iu'8*70V3LJ!l
+%KN_1&RSVq,AXf$2+\Cr2#a*htgOdj8 at 4pJM-)$T69N7QP<C0W'_0HiEM0b:%%Jm\2(p>4(Op at S*f2/C5dfDt`^9N)`#apqT5!)'"
+%4a$CRdH9S$V+ZK,=jK7qr%8="Q=@9?'8Dotk)eXSmUWWV8d,2?-X1\eKW;jY6`1Zo;Wc!kDsqU=*OaD*^S[=Z_LsM_cEq^lKruE;
+%9"P]lLWNWCcaM_U^uEd6o-AfHWCiN=ZV2<;pZ2/'O'fi7SPY/;_1hNc<bOhZP+(fd:.#rdYBFkD9/ZPBbV4mCTQN'7!G5+p_(f&g
+%/dqZq9e<"ia"G(P!_[b=[cCt>EV;UO!:KQkQRS,"Q6NMUSOPX=o$&pH+$@@lmfb]Mee9k*j,%g>i=,]T>1&iPLsII&T>@&jS>P\a
+%pF/s?NT44^,e)gWV`&G9hbs?*6Td_+$<JVD?qk6skW7MT'0RMrB<M1i1+Ci'bAX)+I,uchs/2G[EgQJI;[lVA;tRiWQ*K;,.Z^qM
+%86H7NDASn>%@P^efY0A5#t0!/<hOCAiIb^W-WOO$UG$]7jqMc5^B\EReH at MPF5QS:l(00IEr]rUno>ggn6^ujZbYd;hZIXr^sEVl
+%.fQ[.&OT//5V'6C-B>"?-lm`u#WhRG^MEd&i]'`Him`s5fRJ==Fgms5,eP8qo"2aT8XUL$hi6sE<*:A0&mR%4,a=fPXhU[B`&dp(
+%NJ'L1#1Vh4"l!0Y?`KqE"Uj>n6=+7tm30O*peN68o7JU9:g`,CrnFHdNB]2TUfI9FduT(9/9Nh--8=T)-MJ\@94BE.-,F at 7hpd"t
+%#Gdc/IT4:#[=8Jn.=!mT*7U3m1)$qG(mXuDc4iXXO^eGj9tAF028Pq[U=@">)aOq9%OOkt'tfe'I^JD`O*SQ9>^=GF,p#XLOQn"H
+%btpYmacb>0#/;G6,S_'ubIQ^Or[gb/<p=\3`,CfbL#@'ug&<`6B[c0]l/8rs[(YdNch2Z at 4Ga55Sgb'b,PG_,1nXu.qVkG>YVI*P
+%S.SXRkK#3<cZ!+9h)L%k#7/0cN'Hkh3F6h9 at QTP'bPC\M]m+D?<N!K?<4bCP1RsucSO?]__>?q.esC/>Y2p7J))Ru8n\1e.Wu,5J
+%Tg=Psj1^$#F:M'9HKMX2/8Q&2&GA(/5)=<QWKp!0mj1af5(\i[)Z$#"4K#C!$ERZX]Lke0Op2uo]'tqhgFp\6eTA3D)3dj\mNOe1
+%4J'$B\#SV[]_,FERUk?6[EDX3%^rY#:(AHBB1MJm^fjQ0q1jG?8 at 7-dj*S6'oY$GXDXN-F\@_9%f+H,cjRb$ieecO-!Grs+b0#Ee
+%=Usm9;"<ObEPW-J>#nUXKt(1q.Og?&#qEK=Cti39dO\P1Dphc!rd=fk:.*HHE\Fu?W at jK(I#r5o3"Ahng[f@/"mu?"kDa+m0N-tq
+%3*JngDCers6j80Y!ElrIK3^<b3%:CD,r^coR9mPPHR03PSKD?gEoFNKfLF,>cO2+mb*2(`m1NYA*+og,%L67/\b?iLm]l]_0Ljhf
+%Tnp^oOk"_L;T\N)l.ZkT00R3=Bio54]N$SS`flhe4\5.ILTU"%2eSDT7E@$?b!,.'2DVAa7!5LNW=Wca/#%'KO/X-eMq0P,oA])j
+%&qV$#m$\WG]TdbiCcfJr<).^L$VbmV%'*lNn,&nBkoa6+9]Wn?<O2a`,f#6^&2"!8*6Is'`4"?b<-I<R#4 at r/odA(Fa4NO3\.T'@
+%JW"t\ht%*]!SV#_e(>sJam:nh\'@R>b`<q.AGE!/^%/B]rk@<Fk>EG&41R*,K%L1OhbTe-@'\noa><k_o]GUk"1s0NEPONQA+0'0
+%rMJ188r#8h6eAVG%=+g]:6P*aR at C=l\Nc&`Rq"b>!)sR_O?n";#p<5l""e=-"tZ;*@OPS^%3VF8JppOPRMoI691cgRrOb<Y;h^a*
+%Nf\WO'Y=-P$sEP]:H)IOWkn%_aXeh6Eg=Din:V[+RM88Kh[s;Bf4(OeE=]H"h[&0m!04gP3&=Hkmc5d>)f>q/(kl&Z[8#B9FZ-`E
+%Y8\WI=Z=)ls8=1oI!Co+_X5V.=Eohd6X>']fRG3(P9f4'^_D'jX]5oYa\uD>IXHl%n^Ub&U%NpVaXs6#CZS>>ZSSB?HuI?drS+q-
+%okWZ&iQ74gcj4p[I5g_\#rGqd9cheD%-A'q,LIPToCBsncp+JZQfCY'b="&Y2^'uUQS&^0:7>6RfVnihN.5PX#MaB$^("QeofM#U
+%f+U,r(\<D?`8'TtGU at hp+O(pS.$j!NP%0kGAH<O"GD0HEaS.hc"pN#q1)XSl2g:ODBV:H(Pg`,r3Vcm%,85%)I>VC.>!KD[:LY%h
+%J`Gf%g5%:uF+VHho0Oo)j[H#o:4h%>TF,]!:@Cm!fc[D#2.SnR5LYA3hH',p^((;p3W]WUY'dRSId;(A#`=UFaHM">C-*R-m3Z;Q
+%<s[M?*o'$o1fb"=f.g?/Qj2#Q][)#tR-_d=ZrG5]60r\Eo2&0Ums2!5[$Eq-s7`G][XL'dP!LduW&$X=Ok42UQ(u09FujmQ<9KY+
+%2QcAf?7CUmD6#t?j=lq<TB[LQ-X$bNn.NnU7$GE-;AJ)g1lL at Q!%\)VggB*sO3n%3mk^5NAHBOs\WGFb;(k^&8N(LOkg4&(JF?_u
+%1j9kbj(7gid8p!co(QHkPI.M*"<Sn[XfoPRH!)RJWT8Is]K^7OHM7"/(/h4oeasI,.S[mpAAPnZhL4IV?`$&CL*aF9D4,Q]1A:ZL
+%Oq/Tr5O89:>rg89+Gf[m,'nM>oZ7G$;Vq at F<;W^GT&d^Mc4n76FSSRM5F]ECp8rd0SPn_4@#4NXBJ*L=a),3^Q&k@<TbI$*@sA+)
+%3=?;#1b*%CMgN=JQ0)kr0Qh%eIRj:;4`KT2m7YF&9Fl[OY=bdu?VNGh9mt*,,dhE[/q8lHL%)!bRVFiqU^(`Pnl=2%BhDAXG$Aa5
+%&gr+)5Off[bA77Kkto6Y_!KI/dK+_Gi-1JCk=miY$(1 at iXcCm:(ltb8P*aNYm[dYBS*(IV,7MGq[MI(VFSt.$f'#RH!sDKNS>R#p
+%1q01rf&d%`+, at duor&YG1!sNE*e.k0?^<,i4tE4FZOi at X`[,c]`[Zf0$*a4M,Y21p#AY:9/q5[5Q.nR*$Wh2U',30G/SR'@'b"Z@
+%Gi7M$>>M,iV61Vus6i>e9T>B+Fq"g,4m>8N\li]dE9LeHYLD*4?=GuRW&Nu08mS9?<!#VWHmD.E!:>0/p_MKXojH.MrhS8Y<j1X(
+%Eu&.2h6qmFK12&Q\)^f\29J#cL4u8:7M?u]":>H=$Do0/3V\Wq,X$qdFC;iDD48%%<N2uKHe?g]^$L5"`I,_"$J&YrO=<l-8a;7U
+%AeF<CWFp>%ptFHl^UK-T:81\9ca_Yi,f9)Qfdtc$A3P)/W+)\[/"[nofJY$Ea/NT,N;NJAU\7Jp0f^P8F>Fd?VPYY4RY"67%=[&>
+%G(,)"Ye]tL- at 5]h#K<$?U"s7q6/kIj7/]lf$_GK->:?]IK/$Ut(&9;URt6/"O=AMAi1/6*?GFgt:%&DmL?0E2m8[j3W76is10HdX
+%+.#_=0ps6$p.T]L_;N35alVY>:'g*r348498]d!6_e<_1LeS*eZdRUmoN(SY*5WCSRr+6Lg3ieUp&o-IH"`@r^AW>WJsi:_/h?7"
+%'XF:%jh^+gI.78ZKldQFgSRAfbX3k^g-OX!A\kZ*AJn$m+A1S[8j1okj0@=uM-MA1,a&^+2Y??@PQ<S1*t$]G:6kOU?.5;_ at iXYc
+%+bS4`D=o$-kIGZ5A. at ONB@6u7kY?Bt\pn at 3&hULRq3ttMT/pM\IcGY2.4.NI%oVpV,HAO*gE"?69GP5<PGu"F<tJd.ge^\r6Di_3
+%`70*r^Yi7]s.t./(r)FLhHiWKg22T>Y.C/oOm5^T\>[*k88PbP?G7cjGll]VFiBJu#f]gn\5T3c at j+m7alKCa(JUKPZc\SUm6]q)
+%I?01R@:QB5j7]B0S$SK\E#re00]J=/kN!K$B4(=!!o:BnY#s]Z,Yt&$^&9'?OdF(637s[;6f(leaIC at nq=\oWoc/,^_^c*(U9DV%
+%qs6`*kN]4 at LJAW/T'^7!ap.)S-VLjf?LG`-op\#4")O.HF+"ieFM,!0<oJ=-jA'F%=A<UK]1IV(.DPTAX:AK]$6/=o2[1>\0:*6n
+%k%=<`c0=Gn#3mRbNLO15os`Tc/;*8FiUmnqlYX'gT'=RjGftk#`W,Z\9S2[;N:DZV(S[5\)f&P9^'IQ\,FPE,W?WBdPacfWS''1P
+%S?1cbXHCn.aqdf#+%DGnT.!5kJ8i"sf1d5;a2P]N0ZeA at jt4+\DLf$8rquj*f?(So/e<i9>B>dr0Y/8-M'#`NXEuVm&M(+IblkJZ
+%bX2JaYENgk14-T:-5R9^-F/p7dh>?8BrL(Q8R+0*o!WX8A337kmnHIFZLs8<T5^*8p!OdM+j(@kG1JKSJF(Y+4`GU&AP8f39lVo?
+%EZsIS8\D4uU">i32#0q=++juIb+ghJT\ZDl;WDr#/?-Ith7/qin>-A5r*FEDN.(:`2"p9a2SSFsC@@>``Nc!on)ON%Z4CQ$9+5&,
+%$Ne'Eq@`p/I!uWCfsZ6TH#NrcBH_*BaA5QDg0g/7,\p0M&l<SNdlA.+;kVDbQof\O/L^g7[g![hi,Zh81Sf?_$!#b)2.c,,D5O,N
+%">.UFPWDF>%5uNC12a<7e$'2Qo9jaUMN4QO7G%M"*:H0D"q!ZDWJ9pH'/kmEQ)R\]K;Vm[hf[1(q#&6+`,@=[c_KR_`+4''_n1ak
+%j]Ii0am7j&4[o at B=]*BBjSbrp$04\FQi,P!#'`:`?DaMUfo?57N5[<^A4nf'_-gX\f(.EIpr+sbSLY@%Cb5r;k1-g8Q7n\*]=kW_
+%P"B]R*[Y7)6c=JP.EnY>GB.0gm>^W)h###(XJbk[n2l-2,YGt3cBTXeO,Vdl>h7_%nh!XDluc4d49MF!(WI)\drO,0m\LliEq%0=
+%&?&ZNK;:ZnK%*'sU5/i^#/`6g+:aQU_:eX4qsEe$L@;n1?AD=/_%6;k+#m&;n^g\bT_pF4=l2hWKAr(&_b9Be"puHsZimD+Is.[b
+%b`2")jkmf?UlQ<!eeXB^Pkal1529G1Hi%;F,VF$B>P[J`PSu(C.1a^e,_pBU<@qpUJ.%5Y,LHVp778Vb_s2('KT!-ADU;.IbVCeV
+%Ma0!t]u)\K+B+'pZ4THV0#->..]uZj:+"EI^&E.qjLgi/EOhN`q0>^9TY''rUCu71E;DuQ'ae]N[67[A34C/lbP-?8FOlnRX3!@)
+%\)*tri:3ssDLpRAjPuutI^AFfq3_j#i?>h]*3o);+T%A,^*\=UIu9;t[ER)qDY?'0N@<P at R$>),kjB+*9Lc(-f?'tNdDD5kRCFqV
+%kRQ at fGd<T-8W\1dA1%nAUsVIa at +V<)0t"*Hm?A\j@[d at HdoU&'C#qrp-7.-76qQB!.'ri7H;jVcOjIFUOfr+!Z1CPdPRs4;0\q6s
+%C at l[I7c%+\j415(RL<B1BehhoLU#.?[sc!'I+sE at EaFi8]-\JVPg05EIdY_QZn_u#_p^G_F`ik-8/>^%d%\s`h:8!I\G`eE/1ZHC
+%MS#Yp]n]=r@%ge:hFm!*K[*(e=,^S>/=-uT3fbQljIeEJYqA#8g:$f?Afqe6!Z9Me8L[?c'!4YG+:u-U_jCjb`<J'qMb\aGopd=4
+%gWG0V;qRMkjXCa'*2cNu.8]2tUQ/Z*##%m7`,?:Eh77)C[MJ9oKn":*LV[_3bXn7[lT;Q]@T#eHc4TI&f?H,!f6dD!B1i0Y76DlW
+%^G]^_WUKi?1$0>QrWqrSPH=,eH8%0ml2^Gu4Jl+6esUgsbZ468DMIq=KI)>M*;2dE[\[N!EEd$@BQ#C$S?#%#Q8P_5^9d3P2D88j
+%$'$0mqX7+t#ghphPIZmH8hl.g=L;IZFR#'C_)#_<+4o'D+J\Z#X^=C*9@]C-`eqGsWeQ0idboC-*Q(@=3(St+G]J6%)&H8BT,dRc
+%TO>foMDdu4Sq?)-&:Z-OOtr=a2Fhhn3G(ik+\?<#euV9;#dR-(LNTGHjHl*I`Clt#ZrV2V-8qVEkT;\DcO1T&H/"A('I,u<Qp/U5
+%<J<]p[jJ$"B/rXnMD6!)?H>db9p=*")mL;;X'doVe-&03Ek.P2&K?$&2tGAknh<uT>%#Bro;FZ2*%220.++M\-q2XFR8uZ*4nSR`
+%]oQRqpJ\!pCff.7jpd[KG+P3/%h9bY?g*IP&pCRIL40H1PsU4fH/],,^_E$4ps)U at heCBuH)66j6LGiCpQ#=GpLm3*:WF07FqY&M
+%&[D"M+tS2?End4M4:T;7i!bMHJW^<H(3X'f[HhfU>)d$,SW%),/)3,=H,'V`()0VeO5+VBPE_FIFn;-smq5Tnp5UF'<bj>*5rR?o
+%E3KGX(l[JXKP?)dZ_0e3Fhj;:ajQU[@8c`-_^04>R5e$G-!2a(K+$q=j;Rn-3%i\2M%ME.PggmF3$;cJ_o@`Ja`DOgAR8 at pg>aI!
+%g$^L)Y3!IEIQ$;lK[J9LMnUnn^6V_[c?%j\0A-o7Tdeua(32JH>)6*AA"C=SNDulHE?`%AqNoH9 at T8p-aX2(Geco^O.?VPu<e'c1
+%^He'f!Ui&-_g6F=\$T"HCGtDi3WJUimO,IHKd:UicYH,Y)g)d35iFL>/2pkiJ;XQ1Uop:nL97$me<u`Zm\\p*T;4/l7)cS- at N?N*
+%@)pOs4QTW$omHARD5c-d0+?.8Mf5/WN8U%t<mG+K<PK[BG=)d2;J*;M1?kra/qH,61%UI*$stS2Z9XUbF)Y"&ePCUWnfe7IR]tl4
+%e4t]Dk7_]d\&,GW5n99eJC3hMjn at aEoqk]oFg(8re3t7n:/--WOWZV>PEY+&P*@H:q7&LD=1DZY(^&o>/6c>ck(l;M3Z(if"M51U
+%HX^Ia>H^@9-kP9oAW#8?Vk)n0l6S=9II9Im%,c_id.gkSTZ"Y?e25+!D*tU'pAAkJO.34 at Sk:X/_[u%".S76:TjhDFOq4BH<XF)6
+%"q`LF_GQt,c>eR'AO:Yb[Fh:]^b)4?Q2Nt*Eat-SU`fG`36[;iDY"uBJOJ<Db7K@/$++&d!jQ`ki\faC3l&:ORd2t&?U<13#aM[L
+%cRub7\X*%cLjDD/gkX^/g`A#VZ'f-dF"Xh%:9LWU;=emtYaiZ'%oI%2672o<]o[3EF#FF\?;elToWju`_P5Z%c*ifeH1EKZ#LB at Q
+%XD@)K$(\Nd*-pCr*'l(qA3pe%lR79\EU,`ab;R&D&$7dMZJ7,Q1B4-3IhE)]U:PZ2=$_HT&e?s8,k'>)^t_;al(#l8+$P0GT7,U-
+%P#Bp=4qC$2ekj[!(%&B$;G%0gSRd5\AR>J^AdWWOWMM236:VM:d]_un23N6QXa_*tDaHV:A"TqMiM&mWl/=V"5<>q#^N[*LAfZMU
+%0Up/_D(!#e]X2fS/Z5#R+?_EemB>8$h8iX65L2l^d2;%DS?S1j:,n.,TUu0:d:l=kq!a!qh1njf,Yb&rjI_ZX103boK6d!FkQodW
+%W0g7m<5//jF8MI91f>.[,b+TglNEe6/:Nu.T>XaQIUO'UIM5#+-&"u"+pb'Yg!_/30\YWT_!jaQ4Q(YNP_]AR\B:<epF61taQL,G
+%$BF/<i/:Okf-]NU"-,<DmA+a04n:Fr3Sq at IZqu3VeP\Z`jC\Sr:8!ho'<LfM&qS.,F(#oEQdB0D^B\/ikV7q\'J-5oNa^YUCd!l5
+%9oL+ at 0bmn*s,.J5![mZ:TWFfI`VP'n><e0_".]f]eUc%7?PVr%OAJJ9RT(Vo]a;Yr;W?ZO1reoRjCZRO.>Z5V%'8PE=K)si!A?%n
+%,jsn?=RJF-WuJr'Ymm.o"-IB2[JM-tI85pOFcprHfl-\E8Ic_]&?OK!f-gkTJRtSjauB(9F]Xlkj\7=.Fe`k*kprSYWfRN#3m"q[
+%M'":g5Jjl9+h=.J_Smkdj^24$I>*g=`W0Ce]k,>se'cG44/V`)7QI at Zo?%Rim?$3b=f#%hT:.@$c]bi*D\YBBXY2n+kZ_1tP5W(_
+%DJf?[S+mX_#U8T6Zg2)nl8,QI6t,)i(j:G!_(ib;5qHrTGr*Z.'6f/XS9IGs?_ONm,1]@Jhst<>F7D2`iH+rA$o3%(7]MB;:Sn.l
+%8P/]Nqq=LKlGh<"6``@Uj5DHd.9_-[Gmd]hKunoo\C5NTF759Z((4d0POn at rDn<A&dj=?.p0EVbOh;c7G;([)p&.bUs"G+D6'qDb
+%JoX:#DqPl0[)2Z'8(Kk%'id51"siC!;bGDbaX;>Ykm`g`P9%m=n7YTCoA5jWT'$3Sjp9WZ)8qJ;IQ[YE@\i+E]nuQt+qjbSolKC&
+%CK3i9WC@`Y,&WAu(qu7M at 1]F'b)bUSjH0ilGDJVec;IPG^mj$:=Ji+Q<)@&hC(VRG?N!Xe%*>U^+m5A6%F%s29kNNE!9CM80cnH/
+%U-#!BGs-_T/akCT=V"%L17_7)GB&GY!T,;Xpf]493_(OZ$;]i[\=Z\/*tQm]VpZ#F\DWoj'g4k*<nT8YN^_fN-Z$*6b<-&-*=-%A
+%C^Q&.e3GZ:YCu,M*_QR%]n&9<p*MSu*+/G><gE)D^(C7#Q0 at S$[lSt"LB+_+#K#1V>'M)nIR]Ci/Ym%cS;opqZZGJc_h+X[YH#jD
+%-e4k2_V:u5CP(\8f#g9(HEbh]9dEpRbN83kd"Mgs>Iadb"4]7`1_h*<qX)UM3Z!8DBL8kDIF]ZI"$VU>Ub)8(_TPIm\Fh5repO#6
+%gh'8*U&;<Ap>-XXe4e"(n:0gIUF.rX"(s9rp%b:tQIiV]#Q$jhi5s*)+s<fLilsgFaI'eSd21*/Y5Cn!9,b9>NTD<!prt8G7*GJW
+%05FV\'2c4!ZFTk';t\K[2D$QW at qY*&jHOHMq/"h6FejK0dACFE4:*bgVFM9N?sHU?1?K/P]HecM]=!l3M26%P+Df(D9G">W9*6]#
+%!$)nSG\$nL!Ta`,Q>-*'r/Ac;C-],[p"Uc<DR!N9X77p5l<mn8':IOsg:%P)@9eeP:S9n[[O$Sd^Vf3(54cQW5MZh2!2eS at 1,ap^
+%[FVc^A\1'Z"B>r"eEaj5AX50&g==Knb86T_IJ`mO,!l at nEK`hg8!D8is"u)r-$9BgE%`FSil*AEM.32JPq#]i+78'`bCUr&PTA+j
+%s,mq8HTWT(5qh6F44cI_cLRi8Dpc<XJK17O8qT5i_Jo#9 at E$<e3iIpPGPa(AFEFV:[Dn^u&!m`J5%UD]E<\I-80Gf^VXl'Pja*NN
+%,])`1iB!hWbO^.<-`@#`>2"YB]1rbJ"_InhZVO$\S`6OE"&jXTCic5!'hP.blf:f.Zh+,g?#s8BMiq`KH]<53`KDpP at mIQ,gX(@B
+%qGPe=Loj_KT2SNpT2+W]geN=EBN*)^>[CT,G$_=]\r7fDd6c"iHf'fO`PGAtcn[fIo(Hk at lbG]p$0`h\DNM+4Y!CIOcbTJ_Ve=*P
+%D#6ibO31Sq;UL/&f=BR!="GF<=hW.o)p9Y+:LUN[Z?sb,lD-Xbl15.4<d0hYe-B0,2+dLUGGk&Ge7f"Y#F.4TX[VYSe"q:khe9 at T
+%IIml6e:bR5S"8_Rb3.9<nm6 at En`3sOVM91RJ0\bH$2h^`9CBo8b0W8K at V8Xf:`5hQ1lu11hksLShTD"#*\`\-m:'=d,!,K\O#<Oa
+%Tl6a$8I at mt'!nL`GssEA)X//&MEhTb,cpnoO`)P at DC$O(b-,JGR(+kRqo8uk&>0hI+90<J0b)>1AlkJu-E$UmKV?F#n',Qk*6>h@
+%iX$M9.=s9<p9U!c[QF[.A?/^seDj>s;s"#43R`*]@(ZfYT^=%ggZ$+6Tec7Bq6rA/)4@'Fq\bi,!t7G>p4*oOVj11;V;60WFm?L!
+%2P+["<)bB[qS$-ET0>`jR;hZSakYu*dd&0C'R.kKKBA/"_Z](BrarF&P']3.`+U;;:RW[O_b*\]TEln3L5i09)3$"/n2#CAKVWg#
+%k[sJD;aRHoH"E*n5Kr33IZE>DWo\IcfCY^F4</VQYCT_<(@dRtl&/H,Y/'a7+psQTAh4h^i%O^eo0RD)nt;:/+ARUL'c.9C^)WCc
+%8M_)FP^0G@'7[fIU*o9lPA+1V.s\bT.0.fX-NC[L\a4CloHe[9[e>%.n+7%r3kF)@$s/i_>itm1pWesTFk'^%K1=!#i_T4&kGgpF
+%f:JVdl!odsfnWTr:utr%[F7O$i!BfZaW`p=a&2[2V3I`$6I1u!KR2##nJ4e764 at c]l>q(%YEg-h/LU4[CL2RDYX6Y,YB"l!6(`8_
+%"/X_VBU$rcJk8-<1SrW@]?RNV(`3gtb,5QS1MWmWIK<EKX,0#Wmdqj&(%^AFU;$,o&ndN<1gBG'RSVVIZ`S"/h%9eBIl at -k<mVBC
+%qb/O2H"i9"<oo$94.5mgrSh`f"??cA"^0i'!5rV*0U[eUg4f:+;DhjK-n=>??]!_\[24?<<S*M>TAt)7]A?'#n0:59TUtjA25?Hc
+%-Hr$V$hFXLE at .c,j5`X6=K:r(S^mdrG'g7f^(HDdZ.Hb1B]2E3bkhf,TuWD15]$6_,%ocSo^,>*D`et0\m25#/"<i-TUabU3.5?K
+%!(P[6/6q[ToB#R1o=Y7(2DU*Gdo!_U'pg1))W8.qSW%]#o^sf8>k^W3p(Wt-\`M.ug,$Qd\t#$:94GfC(G^]nYK&O_%hnQ$2Qp6B
+%:Cc^4"=t?%^OnnrKoN/CLW99hfKJ<[4[C&=:;m0=o+2t55p&+W[ZV!tk.2j',eUk(rpih=^"UAR<#S'o!@0cu"*,%pc/)B+SAZ2'
+%O4-a^*8.(ANl6Q[SKb$,T-XUF06Jt>K98jXH#%Ag]@i`$;Z$=dk'#Ss_XguN_Td3ZB;,p$LZ_kfJ^/pbl>%LbI?1e92+N<Joo9H5
+%k"ZID?a[<-UiF_uDl*-XrCC7 at T#S6W`Umn8lEE%*3g7-RV_,nsV3!6&\h:FaV^t].7BSs;F6MobO^CQ^BH:hL^MV+bDaDYE",F02
+%cZc_O\bXJ/*s[mr>=^+*i/-)G`*8i1,tq$2VQJX,Sg<_fm?Klt.S5?).n$ae6JqTu:PO<4<D*t%+bG,fG<L.Y8s(Sepu\s#jt8BN
+%X).@)QJ`1`(BTrPd$Y*NPJ6ZO46M?Q3]\h,D^a/H\/.Xkh[5NNl+#V,[+jM7n2Qer8-qknWLg:'BNVVu9JL;NlSm#$<#"@:2OKi%
+%UR,I-:k&=c_YpYQZ$i1tAXE.^)QU8<54YHGE"ZGj.4T\e_;)qB<+Uu9X<=CbRf)re.M1HAP+#H\<SEg"#P.$2A<D/PM.5Q at -LE%/
+%#=;5i>DT];8aA1Z4ELL=in8hHR!j0)NVsj<4Pu0c\??4D$q(asM<VK`k&jA?V:Lmm^lagV#l$uo1o&qES>=rWI"0nX3PX[BHe>M8
+%rQm$poPrG7QFtkD\V9-TLX?Yt=.GfB2CRR+8cq0:6fQKK%:_#*i;&GpSET"$0g2DQ(T5u(QO at N&[sPAi:CU9#8SBA/\nLBCN8L&U
+%S&P\nZH0IRpkYi"-SYcPW?UuDPVfp<`FeZKrk3J)Q[VY(fugu'4875do3TqWm>2F?3dW%I<8ZSKc.;k^EmD1e@;;Dqms$4Sj^MCl
+%@O8mh%Ku7-Uk)2dpJ9)SOt`'I'72k7J_&/MM/F%WFeN at AG4+P^Fj.NFH4KmFhDnscVX>maH!UV+(H0o7=]in#o3UWA&;&^>@e'8.
+%B-FUrKJm4u5cU'/lSE[!PN0q`l=EPL[t6lEpB!<)oqMLjA4"gdmPb]@F7["g29ncRqZ=2/(8bc/-'[KnhAFJ_3MAVWiopGde"U-0
+%Kk_dgq]%N<bfH\KeFe5I&bd!YmV,H1&3R&aY&aj_!1qB'V]Cj`"uhu](8S$iQ5$M5:.s3M.,eL5498*n[[8@%qrN,2p&QDabI6EM
+%jG/&Rha?p&&_24SJ"[XR:TbX%.@"`H at p_#6qaZPm-QaL>f_>_s:B_X>A^.JSh$;(f8Us;eVqEK5%+YMPf)^=8Fnh^Va@@!L+SESu
+%9a`VtL*^VrLHl=9,9D5%`"\^4^#8V(]\*KN00hHBe^bMS[\9n1JOARaBCe3!h(:!CV0l!n+uc$^aDnbm4&Td`B_P5WTl?0bP>Y:s
+%%G,a2&!EYcKFtmK#jmQL2p>+O::5be"]O\Incfr0"pk.sGY?ta%"TMMXdGg\FfY^aJ2k`Ihs!X5R#r41^m80eA4o%X24USped9T"
+%p0!((\0FVc.CZ<oJrdZWgS`,+b';b7]YGM_,UFpW6^.BTKM1$lq+q:mRtY0[@oejJPIGcc`[Zrgdk.Q]A+[_S-3u0kqHJE6VJ<t]
+%$D<mtX+#<1PbYX!;;X;7TlEh-<+F$JXFkueY#")Jbn7XjS??>K+csJX`1\DlP657fqi$uQ21I,6*>MiHQi^m(Ai%#C[N8JFdsIf4
+%(9R<e\#<4\4BEggKT^@1f"B=s2BEgZ^?Us1>#R2(*LD``jDC`Zam[+?/BJ!d,De!RAbU@@=amp;BALVGHkG[/7E%M*f93dJ/Ydq[
+%hEl((Q.?b+`X,>7m"n<29]G\2XQa;f5[Z(h?dh0jnmT1PEK8Za7M='a40Ar)U)/ZJo&PO&SYHkVGYUEJe4h=5DG&F$5fH9Q79XHs
+%8JZc3_^@$Q7SE,<_;Ws*]!`W>I7;Yn,!is*>#W:d1t8u7Lbb[PJl at poo@n9Z[q$"5YQ=b3<Na68+R"<Q-e^4i]G)LOH<^+d.[+hB
+%?[pu94A3td71bNEi6fU*.7$S6QK4'Ba.em+-0Z%ZJHYj7/q:%Q<91Yh,T(@[?ZD#WVJWphN4)*&YsGus/4$6!8q,ae>GE3i#Tj_K
+%=cnrJ')J]]DN0fXnk,EdcgAktA#GH:[4k6IKLcCI-!(;e4BLP22uRCQ?njKcQKtc_F$4<an\(&29--*ngOKs!;DF!cme3r1I@[W=
+%n"F0*)#<CW9:!)[E3mc"f;V#MQA$`lU9q3]3OK&TmWp=.S*A%,a8\lh3E'/C'W96)KBeZpZjMd)//kb*b*dJ4!ZmXM<&Vq6a(pAX
+%2]9CX6'4^&kE:2H2QY5^Oe$R/QKYd at gesRF.IU<-=]/X%,?!SkOFe=j1]c_LUE[>l%9eMK,QR7*V:6W")s.R/k^;#W-SaG&KB0gQ
+%;`aKDBCTjrQgCaEU-5gr<k7H<*D*`^6&3Ig:s]i#9K7Z1/<@XE#[/abV$esdG+K'V\HZ<LEtT+[mSrI0CTaX;82'AGP.5,C\8]p)
+%.*FKQr(IEsNp+d\+jWn[97SBVNI%#.$)\B1:#17QTmS2GQ#H,\YC+/qkd3E8<fB=gaT/qd6Q;Qtrfk"FB-OrK*T0"rJlG7id!;n/
+%/<1?/;S+&m">]I]Am5!fS2gpJ-hYk9;pfe-\B/Z92]U&&03ln!rF^hMZGO1C:UUc:-(99eZH@(m*kiBh36D!h5 at ga>Hi]1q[Dok5
+%-a2ec>t.Kf-:qo`X#Z]-]M:WH[NHEaf#H:)#PXJQelJTZ51ROiGCu7"o/dc6BdZS@:9`dT"?Qr'/RSObk\$aR9(>TPMO*FZPooWh
+%BS_GFc^WiK#1/`-S6DB6q.o0ap<`EMR8+"Djn#ZG::S^3UB?D:5rl-_jA6I0pDpRt&U,lma>A&/EZ<]o?^V0Ilh,=;Y!:m!rV.$/
+%cP=O_ag5<:`V5/UF=QP5W^:D`:l#?)g6TM0?:\YmIb5!+E7&5,:h-?2>M2_SITL3M)s($O4G0<t3=+-hh6"d#M^g_g_j*qK7M1"I
+%/A./p2bKpM7YY(eA7YLZog'N;[I at Rl?>\EI_tFD2]\TQ7<d$_9V:HVL"VRhgd%+rAIZPmQOrhGdXqCD2ef62Hk:FrGMj!Gt#5I:O
+%*ns!LFOACUrB"%8M?I[!V]Ht#TUA!F7FpCM'Z=V?mkth3+;13gTf9AN!++)'Brjbf!N[QLoNgpD<rR+,&on>$,Hq!nK='&'Xu<!)
+%-1q at e:u/O?+L<>U.PN;$D_#L:V2)YK3PhL/hd=Z,U@#8EN?laoYg+8S<1:p="QXP+R[&J=1iR4.,at6-jhDZ=!`\7^jq?'+:UM#F
+%SPti=+;j4c>dS3"ea.M/oKpGZYGsu_ragG=14DdB;tFIa^:0gD=0qS[rn&l&Zl\:!Eas'MkDB6k-NGYV0Ycr5OaNpd*V5-\24<r/
+%r4D.3bXg-LruS8FMpCqTq4Xo%ITuDl)*Zp4EX'minbmA%W2tOec?JZ/_SN<L8hj2]`pK"mB>BO]k%3EeAL4[Y+F#>GTW*b']oOpS
+%8lJX23h?(A?8h=1efrpKgiJOCY?F1CJ_;l9o-fo6lS.hi3>PL)F6^&)S*hE'-)iU).u5;s1RY"p3[aS.HCoDN`pBV.gUXVTbcOS/
+%Cll+(VBO@:Msnu_^HqgG&m!E6Yu/==LS2l#mo0Hgg.Km'/e\I%G0Hp8Sn1"TM71[pSHAG.U!#JS"VNQ\*lqF:Nu0-r&g6V4l`Qqr
+%iu5\$.Qo`_J`@Ls)`EDj]_fMlQCj3k#=&dcYIU9Brh8.[]Jm at T'GIT`T/B\t+U+a\o(nba@<7O^\<tU&kr>sB+!HN.dfg91jL>3I
+%'kZE?L0fHl\mdK$N]da6n$IjjZ:hso&:Z2gd3&u`E"Z3Kl5$5NUd[TkF&<esf2hYR"h/%1]SIqCj+M*5FTd/7,?f[a9t1B`$=0jT
+%j^?Vp46FD]_.1nk6<i`l]_l/lJpV at rRJi6nF&@i9_7/<k)fKSA2DTE at G)^Hu1<]N`\@bSQ7cqjh5Pf*>>mPB/ZMi=K`:/<kCP=3d
+%!fE61<+%`6Of_4ef4h.>PnYTbF at uP%DL9^%^Nh2D*7dcg9i9%bq at tXkO3&^YK$ofAJ<$rLJ=mO+,/7sk*2k+Sjt=,jkY4-TXT[CA
+%$MIZ2eAh.UHfjSt!?Fp.%6n,'k9+F.MYVfeT?X,]Dgt-/HjkF`"@^L8$Q4phN<b;uI$mSQ3OIre:2WBPF[3+.SKehVja`O,r(]]t
+%\]N?hDJX$3]"eSaDJg*KDDUhC$_01u!i62j<TZo$,&>443C3L-%5Z1%SMA30.C4:=V=r[V]opDh#Jtk#CI)L0=1W]9rQ^rqS3=Ku
+%J^2)Si4G]+NBm#m^l5q=niLLY50.5<aK0))mu:(Bri-Dri(aVQl((pIoKZ?1fsk3CBAW42WX^o$q.!Oh[[qcI,fhspdT0,>5l\e%
+%p-qZt#C1:<K>V'-W(-hDX)Q_K$4MLTTS/kqoP#nI=QHh9:Q:t*mFptSeQ1eiP2KLTrc=M1`2rb_68+o(I&`D[q9am4U<WGjcV(Z'
+%%P!-9rTO_iB090D`OOD4!Q[$M-N;9_oV,6T#XZe'e=cET<`_6BSA9#GU7R<([GKfo2;/lDi.N!&o[DH/:L--*o0(bh":Q0X'1>5h
+%9+AEH>P<b96W/6Wr.8O>\P&`Z%c;<?l:p_uI=8M?G^#I39*0J#>IMa=BdHtmEJedY-+Y;)"Xt'9i;D]RcSjXPah$BOm#-268K?CN
+%`0)NH!Xbk-fY"N$U`/4S'pPmQb=cci(kt%]EAj<X`fVK216p8ci^Igo^[S3?YGGnXUpQQ!kK;j6cc=1kkaYi+!'7E.Ju=(kUHn'B
+%+.=WqZ@^c8Xpu\a1U['V#kf<i);3)R]$mR'9[S)^c(.nNs06[T8TODbYCQZIC*[#hXl]>!s%<VM9r^t=H(Wm69XcU9+:/*/ko0t"
+%njk6r_oK1jnbjf:9B0XmS?]K03eXS*hblF%frcLPC[QWBoWT&sDkB4@?5`]p?sF&^\pqhTgLS'jp&km^L<Wn9&32s/X)c&'?`K7%
+%Gsj2JFKNe>V at VJfo^Mo&!KTX`.i)]ha\%[FLF?Mh"#Org]V*a"$Znr[d2QtJS?$e*;t4Z`E8P.[_bVlRO@<:Ge$`9fCpUs[HCH(O
+%TI_Jc$Hu]#`&7'f;?^sV3D?;I9C3`Epi%\iL?s1BemD?,Y:Aj%X\a&)^6<g&Yd-,F1m:Z):@5X,OSOe7p,1DYCJU&"hu+EfihP-o
+%69RtY2e^FCHTF\%Csmmp7gX0s83_<nLq*S6]t&bU);5V2"KueQ;75?!1]R2K?[WGK]Y-J`$@^_&;_og&oiU9)467kXP^Qp8j8:,>
+%C,ASVCqs-gIWK%k9&P(+ at ZHH'7Sle<=>HCI1;3<j[ps`im&;A:>%m.ON4";o-Nc,l_Y1'*,N=[S4H'r:\gI%9A?]J*GpQcq]?dT]
+%;Olh;o!GJ*7TB'AjOqNt\@t(:m_oFfE"3.mGi87i6F=,6"8O8]X)5U#053X6-[RY*X8FpdPEPEr59.AlCMNNA]+<Z02+QT[VS*Rq
+%L=?TQb3>p3.9%g;S0PFMb(UPn.A=I9<k<=IK9>aXF!m:/R7dS\XcDtVdmD>m9&kEdZoUq+>FBeUW)559?B.h,(FnoDKP`Z1,)iVe
+%%m!<s at Jqs4\>Q,eaI,fZ*ErEdYfjYpC`qiYOY;!PUflSL7e:^Q/K;3+$BSo.P1m"!SrLQK)qpg,GS!?gM7jOCo1KP;nuGO1JsM4*
+%I;i2OkKm<=D2_0\HoS3*\Ka&Tk<@Mj/7q44G0NTOB!o7Z=s5#7ObtP8Dm4A%.[W?a>Zk57/U.!BVEd\HHpPSe]MfH,npc`1bk5>_
+%NJWg:C*[29SA02 at J,-aMYPer50'>4X\c!+bEu'?O9ZejV`o%`cRAhu%;;+qC.#cGlm@/F`3BqFVd at Ucm)VWnP@\'I"!JhHsLA'!:
+%]Re.5N\asse'!#$Ce\E$e4Z#VoKT6Y6156H=Kjmi8LgD\`up-N=K8enStsddd*$R3\S]6uo/*UYjf%;5d^8.!CuB'O+[MUOD8>P1
+%q_;rD;aKJ&Z67q)F`6A*.GEHb0/GEeT)GoC:SEUO3b!L;`KVgm7IC0V!DVUFU'RaqJJXR"j9]DGM2H\\Q?"5\%8l2YdhLfL-@!d9
+%Nud0^_DAT/GrPil1c!fP(m($\P"P/Y2+j5D*^+="-#28.[C9FF)J.?,/fWI='o4]1nWKt-<>?+CP!Oqm=qKBiAq$^h&`Q9/#:Z?p
+%1LIQ>P8Kq1oB=^=L4?/;AZ9HS+&N&sZ!86)o]N^NN-3uF'WR0hrTKQ<W?>sTJ8LC\]t7rfg at Lj3FJc$YqR!a0=oLrNB-d6rIggq\
+%4%iRWM`Cg9_9nH3$5#1(L]"p\8;aD<?2;h839#o+#e@=tP=!qMa6[N/oillk&9n)MKu'GCp<2d0#@]_\Z`giCXaIR+jnU]gIt6R4
+%2o816ipW-d at a&9H)!drsW#5aa)/SXuK.aX=;+J'lgB(n'gMI7@\V8S6J*q`&,QEVui'9k%]>c`'-%VW8"f$@#@3p:Xj^1V!>&RWf
+%C/oO@(]D6[i2V2Zo%QZL3,1]-R`M.n>Dgn`;LE2[T3A"^dIZ)`bLpM\drFAkP7*dGZ4A%74#6!eO/DK)[BsqH4VN3`VXbOep(]k?
+%/#8i[d)rN%h=f.s4`&k#<`;$9QJdH255Lb*)VAoH[Ya4YhoY.DXE+Ao8XWM%=p\p==393VoN'g9OqcTeVf72OXIeS1VO/A6;q:BM
+%D<oKlZ9]MS==I<.s6nHG9Vn/EQ>/U%oKI(+>WO9a%pKCulSn#OjUE\d2^<ga;8gN^0r at VuFqEOigp\doSE"^oDF0:g%5kQr at kuZ?
+%^Llb&,)I'W.2BSWio6+;`;c at KdkjiZ=ElCtm"&?rAkC9_DC,Z4MM0u@]c8A6duRo$&A`Cl/i5=`I,Z;aclR;KX?Yn$1Lt?0^&mh8
+%'[ii:#2B?D^P%_7l9OOSVIAA1r77C2S4^ds9MS`E-dj;DZ4fgfrIS:6-!.Z:jqulr%_C)75^2,n4D_HJO<3>_qrK"ap0b)kYuqTn
+%>XZdAkpQBT?s;huP;G6sFo1`jKU0ucEObR?3f-D3Yt>/O:$PuX>eRaDAQXg^XCC&fAL529+sjITcBhE15_J`mHJ!TZ(VcMa/dLM4
+%e,U8[`r#c#Pc$RADOjZ?nM(93h!a*s?h5F at EaRuBqd0(I-0Ld=1,lI([rLL/4c;0PWrhZ6*(r4S:Nj-GWe1aI0BX at 7F:+Op;#49=
+%B_.sWQfjHc;Z"XOAY2:qisfUs9S7fOFc&+Nb?NCOoaT]re"0q'8"s>9iMBDBJo=K3^DU\6^sX2Y!d`[C]NN.43-u&!$R8jCom,m7
+%UErUtid'U"p(Z77c`,Dk?TuT)8tUE,3sbg]defoWQt^gg4#+ac01bVTVf]4Bb.\ZE[Rs[l.lf7KI/*o3:Roe"$m/08?^sHJgP2lZ
+%8gU at -$BhopA9.opXF9rpYNL5#>:`m8[5Dta].I3PW7*S^a*`c&,k*[6?s`+d=(Ji-Q8-\qB!h at 2r:6\%1onKLS(7YMVaR=C at jnf\
+%2[$_&U-`2glN1JgCZ!C9/I`E=M0H*7mMAo*Tf?fFr]R5s\]E2W3a$Ca5USGmpn"&H#W(tci1SjS5bf;Jgg4h4&Zo<r=oCLQ_G_Mc
+%-_U,]j0/3^[$715 at A.m(>L"VG/Z'n at VGd+aDt6JQGk1ijGNPY(2tW"=6sJ7"b0_D9n!GDcDPE$!)H&7)i(BB\JH04:bmGoGaLp#8
+%g>;F8cZpBorHFt\);OP^oq.b)ol/a-LYh5<)9(sA/%@;jY)Kjq8((ru2KhMN<_pSZibNGiKl?T[?8:PQ2*Z8#PuB\d"Os(],=Q)b
+%Tt(3%VI"23-5?8WPRk-t-F-?`AKS=BX%j+H/6bHf0CN;<-IQt]lqm.G6&n(r,F'/#T,qnLC<D`/\\rGNW1GX3KkMSI-0dTa5hk35
+%pCW'$kBj!u+PB:sA"u+$5[TqBk>TS%$/f%e.aRTlQKKM2TW^<A!:uN'ZifImV%^nOB\5/`O8cWiHq.#m:/,Hn\BIqC<Hot?"Nq67
+%f"@HgBM%O\#]@$DD$>JD?qPs]SNestn"P<RS4\id[<A1jn19 at W0cd4Rh+^J)aAd7s#>%`.SJ21[dXh6_;);;SSlh9]EJLdS;j+-c
+%VsN<`jP/O&MOa?6Th5+/VI+\SJJ,1br!$d+,[rf/W21RTXG9nuiq)coFQf/;kO_d!eP7SfR4nokh"f8VnP_10_?-b</Q/B&6bfmE
+%WVS:%EX;?i03=HT!Cp"Mp.rKVM[Q)7Cj1b3G`Za0B9A<p$7`-:SQ,<<5Vu@?l=SV;A!W$5BF at kb3^2DqaZdgA4H8sHOuEIN\F`KS
+%k(ATpKqE/#n_Dj=XuW<28NGoK=qsd0hMmX"M*Tl!5+EB6FrhPE(YGY[G%e%.B;/M4peF2&*K7Y.c-q+LDMJ^71 at O!%^[h&?7TNem
+%410@?F=7r[PRdO_Q(`Ik>QIP?2'*DRke"RUY]YX$?VF&u+^mj%JRp9YeUpM6$Vgh]U<B\E'%<hR_%VB[f9U/Q.n4rk.ni#1]i0`M
+%#ipNPbOI7:"sVGecf_W$HeHGT\n*l+JcC_VAd[-PmG,rsM*^,/3BRU/KaLP at Wm1*2P\eSchi2WDnmh'n[TP*Mq)u,\6J?m]1Gqfm
+%c28l\Ji/oYk1!'@*N7d^PFlPC_,s2TI/r'']'.pVZ_cFiQ:U)E3^riTPDB5%pR*KcM-qio?p;DMV!+:*%mA8##kHsnp0f1e):WG1
+%"'cJsK)bA=ej#)X_+QnO,Th&gSZopj\6*(^cIhj_KAn9-OMOLDnF<t'%l]7h+QkonF^8c+Q&`th8,;9:U]gY=SF5(][=6oTBuk2T
+%T]NNDd&a>$GR>NJaHd&o8+'$DqSOD>m,Z%#A%1AqR0P!WIcLes"1c3E.N>_DcV6u&QLAgW0^`\Xr4CSLeIbR?$0lB9/P1fT2oQ&.
+%Y7JMgqfMK!AnOI,Bt?'smWteW0S'N\8P,?-cdi2654M`Y:(^0).kd(49hc$B7/edENaUe-mueKA.Zdks,*f#ROul'h1O1[\[)bkf
+%CnVDcO^ctr4-6Ys6/6FFe\MO<<5+$]Hck2a>#+3d"*,f!<7/9O4e1o:XT?GhIloV]\m'Ve:3k0<TgYu]o*h'#"f!Waj'st<h-A-T
+%Im50/eNs`4VhDqE8Ok1Q&Gtj*bF1cDc;BI;q_.fNHSY18d<a'.dktMFf"YnU;bOI#9(YQP4Jp+.Xi-!.ZGl8?%DU\0qU46+Clmgb
+%GYI*)3(Op1T-TO7j2>3!Nl?SdRj_=!3SH==8k,kP1Wk>fQ+S%uhWaHI#g.ou_37s2#-#lp'%b9aUp9(5(9!FdW*\=URu4"Jo20ub
+%XK!U/&d at ha;L%8g0`B['>[;EHTju48`%laj/@m)<cjjr<*/S`l'E1:'rT-2Jj[KK<p6F:T?</W5`4MA.gSa.]j?+eiGKl?GRf=?\
+%Y#JY!]r6;Z,g_6*i-nTJ)&?ZN;BFYD"ShZ0#n!OI$O4^JcXpej6Vuf+;86lU^n#7$)Kc(@NM+1[+(6Pj/AKN-c,Idjg["n`O6(MC
+%0/mug<'J[g;XQ6Q]3!QDa)M0Qhirg<iLG.dbuDc3QsM%5C$b#(!+\6Hb53+9epI+HVa5Red"+6u5B0D[f#YQO"#U:!ZsFVNnb$Yt
+%"ucsCm)9V-SmRl_ZrsLA.Sej^[$aaSl3=/8[JXMa5[H4d;6puu>`J9fQhifJgGPAXG=-O%Q2 at dkMo9hC)!seH.?T52GPo?DN4n8]
+%J#l`[OcX,HFVgn;Y_P at _LDHV>\ZOMH*6V/?b$[a-\=KC(LQeAA8fE*PkTX+nbc+@&SQDhWRW8Ys];2d*KQSlFF3[#a'\%"`OGn_[
+%UTHW@(?5D!<k[Ppe-1os\6BUrqnc.&@h\$k;Q#$8AbZ1FX9W=ta!S>$hNQR4&@Mi<kD&-;-<e01O?#AtA?1l%$5jFOG@'li9s50?
+%;OJ"5JuP5]j`6!;*"LV`.aF;AaR"8["La8u#64uJ-G0TRXEhhZ^^5eX]q&1]A5<h+fX0h.o'44<H7#P#A^%2,oBD4:VQ35;_>gAh
+%_2%peeoblUme=8tZ.qki=P-pT5j'-c&ihO=&"Aq74Z,4E0RN at 59hY@_Qk!fY29:\8np:\XkTG7r*E+"fbU;i?9eJH]e\8XLLr$r7
+%p;!OdY`)LEojGYgclgqQdANY[(W7&]m]TbY%CT#(;_*u]X]+2T/'N#K$$6AiN9$-`2_mU?0aYoA3i3VL3t'iVAGV3d44OrDn\n*k
+%-7)N at X0njro?#<HG1`n/*`$UeL(2(mX+pr/aX614Z=_`^!_DbCR:gDHpa#8!ai,X+G?b-PWUPi><$]MBilE?,?p%Zmi*MLmPAcJ9
+%GYq./,+;3JgBmq7$l176h$IDlfMhqn4E%57%ZTiO.W]oV4[G7AEKo3#pTi;jc[s7b:NCN"Xi[]3RkmWfg.%(:Z%.+FF'(b'O<l*i
+%hu&k%-KA at a)Y3Z879E=nE67i#[nk-=;0(VY*S=l;Pp<- at ToXoCrk'5<Ot]\ljd%.?1r)lpB>d_0H>^Hr"^0[G4RoR\5*&iNe#;Sk
+%SG1OJ7Bic_ohDeK(dme-Hu*GRA%=XUSQK[oGtMkHdRii\iS[A8/Xho[(rquDkP%]eo!a\;:1/?\aX"a0;8S+1,KCH+G0%3fqTQ]H
+%agU\&fTUB45p_=5d.R(n5`HZgF0S?j0,CXgLfa6- at Ml<lNT-U[`'A,gjS)l.aWoN)9M*8E"9+SiD1[%9j-aMk<j!im=rb4^B]qg.
+%-9+A$b0`f_>qgEjOD_LTLGjTV!"MBcIOZA$(mepI;^b9"(mp`6pI at OKZI27r3u;fG809\^F"4E7pQQ0p.c^fU[MR+3VZ@=3M<TUL
+%HG(/-jp$7GI?\6K>d-('Y=\R<;dFb\`[0Vskk(P\h1ul[f'XLO`MPB/W.l2"jmc_C@(GJ#\fM@>M)42m+0&W_6lmNc6[aIGB"g3<
+%P?a\c#ghc#jp^G5^\>5U?+\:[4q)ApVZH8$]SK/"fQeHd[P8/*Lck;4*P9SNhK#:_o$hC$9HL\cWPM:h0KGPTXe21pb1>+k!YN<M
+%GrBS$0^Y6,!pDPQpr2VV at B:s$jRO9tfq(N#MN<OlKGTiN^MG9%X$YT$"kdmF_5R_Q8M5o=i+)0E<V$XEauRa7l*JdN"s6&U4>3C5
+%!L'=rk4RJLCi9YMW=mPNb=@=Q9>3(f3Vt,$C/d,MIPsISRpo8C&hiifL2fE3FA`L(?V"N0F;lKl4 at T"!A5H[UB#&QaK01KVi;7qW
+%%"5;[r,7V?ET5:JC/9RsrcE#>a[=B.Kq0,:aS&:&M(*`r*N-\WP+h&B(T"Q>MoV!F5.Dl/pGJ:ufqDML9**(V+t")2RSQB6h.I5*
+%fTX;@3]1i.\/>Uf]KmJ]$#,(W5`k?C9lkl9Z at 1=\*d#_H".C12j8sOJY@$>6"Nm'RhBXSWGnMm)O$"sk>dGkQc`:3"=Bl[uW3k.#
+%[$.QIpYeKfN4O'*8Q,7r#(fef9YR=V]C1)a<\?OcBOr_DKEeWVC0CMX7'DMT;MqMS>oQX+(/5M^SdU[%NB_WZ-#Z at M#VOk5p6<+e
+%2f>^>+$5SY3i72]'Se)iTi*SL#YZ8_BXD^1FEB-57C*XJ/\1gflB.$B[^&Xa>2rEI1lm!KMfM_dR&%0VGI6p&:EB>AHV:_/W;Xo1
+%aQm(Dh%P6,O>8[im5+Sshm at go]ip^EZ/hc]Zu6RN+S%?uoW;rr0r8(R`6;W#>cF!R!`>#NreL/5 at Xi4M?c7gb+3sF8/p(R7SY9;`
+%]S2Tu#J6VobHhM>?Eq5'6*AKb&9EX["!sK#GeD(c,FZYAKob"s94CGr<XBEtgF2[uI&fRIOm-PZD-n:D4=dK_)gaZQVrLlkV`')(
+%_A^&Sr1K_2??r at phrVH9GH*[=2s&!O53*no7$Kf`b/eZK?\>ducKt#sQQVL=HI$k?Rp$M1DHH+ue:k!&.h2#dqr6h(,h>2aOfFQ[
+%JIT.FC>RaD4$e$9DuQ>$Ce1sj\@DKKat(3-A*PP+ at jZ<OW_^n[NS'F=3+3cu??@7R\#Dt4]GZ*=1.TB$[FI&N_n$"K1SF<g6VOc2
+%`AO=8iEHU7Dt_qBs0U].^0P7o83,&u0"GPgkO. at X0*J1KMt^EP`h4d(K(CG(11d^l]d66'g86fRR0U\\q^\#4*91mH-5%i."8Do_
+%?nY]Y-4rQ!Hd^Q+8f5qQ:4K/U"To,`PpeK!jjnI!B3fI%+6ALeY\Zl2`YCM5_:m#DWDL=)+VpFoqZjBN61#l0Og!.-O4-TjT&3+r
+%iI[ID at l;`WlG!1]`"b]?XZm3>c`>Z\?U4temF*l$FTMTp$Z at 9iXk[-T<8"1:"T\m`1d/V[=-C[*,(IsRH^]N at Q\+>7mc2s39c,R,
+%4a@[rB_]2FP_I8#<GZei,`TKbc7RWohL%?)Qa)WHNkEQo%Ibh$VH.U&l"g3^V]$,m7uBp^#qdKDV>*U.S.Z55g'N+0C*&4L\*1hu
+%l=3W*GWg#)'7#17o9ajnj_Kc.$+S9`:%CT at qcUN9S'9:U0a-oJFk,:t'MT:;8S$"@`T3%'(DA7C;6RET"+"d()\rX=;tECeJ(ZX)
+%R)/'9YGi5mnsg at GSq9(ua#fb06i>3>b<_d"WR>O5htF/L%1Z++n%6"W;O_#8(tIge^5S at QT'`^\?-PsF^YdUk+4macb;\XL<)s4r
+%JMe!2c4>m]3f\mt9qKt*k<[5;=G??5noS;>Mtbl.e;PB5giHAQH1/0KK>X'n^X=I\SVtEh0"V\7aFt(^C75&eZ>.(:3Od*P4 at Fm2
+%KenM4dC,fSR#_Hrk#/2nphD1 at 5IUUYl(/e[jfNcC\u*MRE3m7u#DrRCBY!Z89:jqQJ*83n</3S_/EH@;I&6cG3=^;'pcUh<Gc5Sb
+%f%IJV6$6\#M#Dik%^<6Fqq.bN''g':LXBf^cR>J"SEZC&*[)I0'Y31Y6M[h_pdP="IP/[>7sD[rlGg9YR=,(kqk!\,Zar\P=cc;c
+%2<UfaRPMER]7)2ln6c>)=Y?&i6Jf\I,r,8Y%\A?@dsb[Ur]\@G^qLAK)C9C*bqHsdN.F'mZUDY1GDt>lRu-,2hk+ct8=V=NA:!(i
+%/:38=^ud#Dm$bC#AA!qU!Xm]WG1/V7-=r`0dWeZsgubE1e;S4UFhR6Th/uj5Jb"/.EXYaNnFASl)$\P-CN(@F4)aaVFNj5 at po_nE
+%^[[\["*k(V!CFU/Q)?uUdaWYA*8<%B]ljJoj+?=P&1R^@?!c0>l/eYPJo;lN=a)V%4K2D at kN#qnM%lGBZ4^4 at 6!]*G?s>k&L9Im]
+%-Vc5N\&`=:VS[r(bSg&"Eg'!42BQrbmt3)mYf$9?50iP*4P#5'=rJtN,,\UK$p.)+6"$#UVN/pACqNZG[GqG4jWlX&m<F_*_Xir6
+%Bkce:?koIW+?c=p2](Q)*m)`8IbD>/rr-CjP<]s6pRn"@T\YMB`GD5`,mBZc?XCZelV:qA*a3B(LT5drFn,S<<Qi=XQ5X]e<d*Q?
+%Id!B4%+=:H9e_eL(X"gj2cj5X3Df1*-4O`Q1#j331 at B5=e+<"2<qt;do8:@!6a*dX[nJlg:=6J4O'CJO7;0M1dk8t!U;Hg+!gL;T
+%o(?riZ89#V*A$f'Fj5[,+^hTUh1dF5b=o4Da(7Wac4!R6I4(-GZ;F0p at pi7f5#?U$%=`C0.l8BPNUIu_>/iL676AAJ`oNd)qGGp.
+%Vh8`6%5At/F+]PD^gm).\/91PWt%rO5J0m21@`DU"k'iCBqOKnCfTTKnu9DnaE-#ke)i>E#Bi=]O'O*=c)4]cc""BgIG&;qn at m#j
+%/1KL8b*[jmGH#tYAf1=^d[Bs at A[s]l85&M<5M0M(A=sS=q(T$I.t[#+/nW:D-c-s=>M!Y_8s!W%(:X(I,cL5CDQNSiQ,F at UlI0-N
+%C(KNdds$X!Nsnaugl;XU'lb/B5e^bYK>Q,cBB5E"A_$o1Q,N7/kCmFEO8bL55eQ\6kVo>X9)B at HE9i[p&7X-rD4LlF>A:;79\>as
+%>X6TXmaNFg;qBm1gqdd`KfD_EdrsA2`o%9Vk\Cb-IFDrdFc/2M6HQP. at i%<2eqPd!"H=XgjT,/l'OJ'rS&ANP"H(l,Y8=`_F_siD
+%m7N]QL#g.Ji60TjRKfTbIlks6[!dRb?Xer.fdZ@!'kB39B6'9=]O(i=MQj0M9UbjH%h]@+L"U^?2+Anh"'c8+DAV?>dVc)X!F3i/
+%Gr`>:a*`GKH->Or`XsB?gcM[2_(Sgr.VIM\5jY&!(t2eJ5fV`XkAnq8$nu2_\IhR)_2%i!(hG-U:;[#_-`tf$?W^<mTfZcY+U@,+
+%j-*Z^>lV0A\H)Kf7jP=7<4Qbd92hTAoc_Gl8YWu(!Y2p?grbtaC+`^si2Qh%Rh&)!:JGGurO+quim3ECT.7%Wop+EefkS"d7^@SP
+%8[IX1oC8\//&s>qY([tbZNYfbBfb.=.=B4B7>ihVQtU*`!+jZK/2cipT*rZQ(n@$..5a-M,7)*H'-joJ#HKUU<NhQ'A7g#iSGa'A
+%%t(o-;ObPQF9#FV^*N#g9;:aE86g-$52o]9`8qlk+SpnF(<;8QI?:lmNBTLb+79HG+Xo+/MdEpUn5mW at bZ-SD$Qiin><!:m<aCGb
+%WC`btfW!!<Y===fco$O:pd=DeVgL-3=7kJd!nV!(X>:"EZaNI8(;TMUl>(IgEh]!:K0^'fC1,qKWO.JcdYGR0Hdp49F`-]OYk6&R
+%S!"h`64D>hD6=YEmW6.MCJpNG/hYJLPDV,`WqZqHfe'Q8h<[$Wo!7flQO+($)Z_9n6#.DH*.A!a>tVTCB.@==O=h(*S0JUjVaLQt
+%j'+.a54*Yl>8$ilEY-gY.BPBJ"ID)MUgD8^%\+$%:`XG^dSKS08'kBkB:`W`5#%;BD&?g5<=KlZWbEDJ=XbX/(Uo#/`0N39c,+G-
+%_Jo at sWKu(T.12D5bkrl(V;S%q^qH0Q'PUG)d7-r%J"Q(N^40NQe]lfn3pNsTi8i<55Hjs"%/ShY.Y2%^j'jQ$\kn'h?CLC;jiILY
+%PO9NIBW`;FY,]LT/lHNsKZ(WO[d]G"o2ZF'PB+t;B>B`s+(,kk\Sr,heu)bm-+MVk\-^4[mG1muMq(AL^:EL_]B+G#/!<.)+tlm'
+%T=BqRBM&l]rfe0I&9gkik=3TG79XHlNgI!8X%c%&D&eQ"Bh^G1-(>+W3A`1b;cb4b?"cR at JOJdEA"FELo"bN@#>?;2qFci:5MCSX
+%%W8mpS:&Gbl#S9\O;d=rgM7dU!qKBA5dBG.54pmef&$Q5PE-2>-7rV]SiauiZZB7$qJr)o?Hsr]/FjplQRbCa(1SK8G\2+=k49p%
+%5,@&@Y*;T#^alm`3"?^H;FfXc:%RGP,p/Gs=L%kYp&E+rjm[]Bb]L._P^R`gD7rj7#:nmsZ;jMQ:&N9);QnK*qbE/B3>JV)#]q\b
+%2BGh_4jPNPqF^k^bJDLL=k-D2ku/P"ZU;hD7ETrBc3NQ!9?EA+Q:hPTbt\Ca_u/XE3 at 2*):#,AM)_j/_CJ\NMGddg:2YDFG6>fn5
+%p64*]kbFZ#k7Qig&.)^?]ZIV2:<YN%)3!3-VRIKJYT8'7O5b;lB?P9d7<%- at ErDs0d8I1#8LX]6UhhXKEshrAT31'IODks+Lch?f
+%d&0QkTaSa/mDEhuk.8e0f+6(-GS?4 at SgU11SqqlUft*5MU*SM1Ud5Q3bQU:jg>KJX.1=su=W*pF-hVSaoK+Wbg4[q19;*l+]_>"6
+%Jc86W$[G]l)/LQu'a5L:W=.IF$ImMWYZI35J\H!bL&2d=pO46,ik_)AA!lu`\NJMgW[bC,f"jR/ji$VXl=Tne^+uID_!B=b"VSEB
+%WME"Wi2!MDepWtt=e?l:nQ'ua"YcX0^`r%/3s`[rNEUsf'E`!b?M=&4^lo+(qZTln=OZ2"Wh2n<:[/1t3=XCMrPE/Ib>6%s66&Q2
+%b_)VG?>5cX=PMW>n21lV"2,3:Ua&0CUuEHg7;lFZ++#beYhT"(R9jp395`T>M25*6NSJ4KA5D[:%EgWhD%K*PRHB1$C!aO%P4&Oo
+%J;6/`Zr92(TEaB]-ej^!cTp)b?e.g#GuKm2;Y*abhZ$W:?;LOBCSPqE;9)A7acZAN-Z1IFK2.'i41/.cAo)Q%/V-,j at d)b,[FLpS
+%bE:@e0BNop`R`p1*iOb0b<>61*_U#M?@*(FkBKUgms]a699Ku6JP>l_*-)*R3<e.2a>7+<)hYa:TEq_5!eC2DNNI'_Pj7>-[(_[>
+%YCjTel18AX[8M7M[]:EkAtFj!M9#h:K*(Z#fU7cajC'6Q+a0b-:B&/n95;3h)33q+ at APQpn<A]sghm=[8b>QTdm7us7F/eVnmJVW
+%7Q9o25s=[s>tq`sH/A,Oh:c.L^YIKt#Yiu4bbsgL2XDLV-9b/`'Q:]5]`kk6NC(pE[<piFI4o+*S!.PM6KcbP\YQEt7XGTq9Iroh
+%B;'-k:U:I@@gci-4r:<3k\*eFU7Qg:C-:`j0b=bh$!u&",(F4=CuCRns$M1?gT^"=j?YL0gmH;g);GFIi*`Qa>U`JNVK,Y!9*4(>
+%)^[A<!7e[W`Xb39M(]%&I__pTA8,[*oe8[:B^!n58GuP0bt*1u331]/_)4;IM4deq##(;G=g+*]lB`?iDF1m-+J[2+l<+6pk';6S
+%M()>X=XZ9;-GbAWgJ2UA$<qoiRgsMBpR*u2,Df*VAVr4OZ/F=_Mrem<`[,>d7HOua6SQQd$(Wh3:]"U&CEi<&6_9%gmJ4"LhH*Xg
+%HK!G\aUVRafN<db7U7]7Ds*KFj%*m[K:ceE1[H2B&O-5qj=T.9l"5W(VNbc.&WIb=_;-I<9a#+W!c9#bf3s5KT-cFBT'U9HpXFR:
+%?aY"KE=b?/$)Fh2dV^q+2>'qn$,jnB,r&!IT]Tmi"UdBCEXCr`_K+?Im?h^l$!TC+Ud8'EBXZ(<n"AX+lM+PNKjOqW2AMcLEt0gq
+%M2c>ZH6c&,i-l$Kk$nutG2BZS;\>LYR8>^/&LnE_hZ1p+=Nb:mE)Fm+D[S*U-LjR]r`kb7#e]0QDkj11eDj47=j5oLFT+RNJT?>8
+%g3M/Ill<4;h/k7coYV"1hJ%2`XCMI+?JFiA?o+Fcgj-?cQu1CgTk-FoNW0d,j7UrW+sAtK>Yefl#CVBGhqR/;0Eb'IW_!3;A*"'Q
+%e8ud`oTTSf-&9o]>#IPc"0j"6TV9lpq?:>8"H!6tNb4EYP%C3AjCm*GaL9e(,dgG`97u_RYZJBB+V$V^8jS<;q]N5b"e<3iBn5%u
+%C)n];<\c>nOS:]Q<J"RQ"1FdknQ?T$rH;nk[/5&pJXf,GDAD6/;%K.sSWIUW?TF\M(X77tN5;^.RCp3KiQJTVV6X$`Y&(Hk+J118
+%cM>N7b#?/8B1L;q+%%a7GI4C.?V-+QZ(=>"j^JkS\2!?Jkh/r840\uV/,9;bi at B#5#brm^d*EIt;l+3:k4,$DNc(H[<;p;ErNrS>
+%:Dhc+mb&DX6u]WbqbIc7.MlB&WtDCqPh0HOCapk)T%aau9D<p]EMbrp4Nsr,n^,#$*,DSnH&K83H$B`Q9B0<aTg.RUrK1jmT;QhY
+%PU'<-QBOfj7fQLg*B+MX`-`99&br\/g.XgqH/^FZB**g<r^s?.&j<u7^%MP>gHC86K(*hgSpJe[b?%8)UlTjtPt/uX(GT^t_;@NZ
+%Z/'63'&F29pQrh?ISQ<-`'lD"Iti)\Y1&'8G=q]mmR#t?VQgZVSb0!^61fVlSKCP*\q%Qgid58GT6`-bRS"g at k"!%Gl`O5Y]#Sc,
+%YYfo)K058a^ocSV0"=ZW_n>k/J&@k3Je,r7X(duLf4 at No-H_?B?h-01bPQ"a_EQsL[%ZRskD)7FfVqRCONVLhIC;X_U`c at ip!Ljo
+%H'.e:%GRl`YP!PejFEIBejj_c'#(7`$VdVj*7XY%@o>7^4G)Rn%[=[YA\1o%.<*">[0`[]m[`0ZI_\&c(:]ss^_B0uf?2%^*9E]E
+%AK'KiD>C?a<=G"iIP=-2,/+LL2Wa:>h\$)bIQ7LVa^gbG at 8a2\Mg6oC6ZF@^D>eniKG_<-:CD*7V/ZH]H7CB/]<(5Lg)%U1#@.<A
+%RMSELF1#7rUQ+1I4Du=.hA_TM?I2>d:6otG:L89(JVO(9'(D(_m%b[JO)m at E'LA[_&o=hSZKb2V4@!m@&:1n.,#r?A4NS]!fR/2[
+%CDi,\'LM>%-T%f9lDCE=(^>4F;LV/sDXcki'X6ggOq-X;ke.Rf:UK?*bGj<3CCsE0;s,-BbX+'TDJ:#]L!;+[%F at TeN!CZ2iHuTT
+%\5APo9Y#(&1^d$Sa%D)?b`al0Z!'`fGH,\ZP"$$kBC5IP(6^hVl8<ka8;VFNI!9UBEg.N?d[E^<)q"@InYq[Y;o*=ae-ke%A_ut4
+%ad3-((>Ck9"n\""0Ak#+cN!_>K%VP+kM_u\kV#NIctDBP<iJ2]&dbH:GOSn+/$W:F(/0fU[mt.=EN48_#C34fWMXfs5Yq]prpc[&
+%H5Cg&IW^[iNk!luAd!:[eAP$qC7/D%HG$4BoB,UNhsTV0\uI1LNV!)^(JeoR-&&["4MhEc/TOkUX*:^WLu!Vk.3TNkd<$](Q^@7-
+%kiCt2QMd%TKu!UsPVqOW0DA[:D4^:W9\VKqSkBMeSfr*^Y'^JCI9!%!U&mli-ogq_^-KE`bA=M-,``Y`M/JVIa#dd8DKj3"gU@)d
+%UfpRq[34Vsk)'t`';S_;>Mut-7!(%mcTAgJO-8#?o.jiblgX]N.J"?+AW8-!UR.r6p:e/)H-X0Ukcf;$&)q!E2qIPPK4Z-r^QiPp
+%s'#;spcGg)BWn3]/VsuiG\D_W?Q(#jgG(@8"iPciV,sg/ZIhcBblgsH]K%CpN2hH&(>_s>cj*0JiPp8NPT^;'l&m;;dPEP@"39[[
+%YAXD6 at K^W/F.!Z"_CXs,'^,?gSl7:pC*Xs[I(I8n)H:ud-Rf(8/&'_>#t;<KRWG*SK7eL0O'G2ZFCVQr0U06E+kE!F=M3`m1Jo1I
+%Z4[XqK=DERG!R4*%<Z5oScZkU'V9%C2op>7E$nD..E(i'o=aWF?d]#T5WP8h'em.YWT\A?DH9M at E.tF8Q^VIaDiMsS/tmkaQ]E*Z
+%!5-P=P1B=[;iXS?\)q\mcP&.<$gJV/3iU7 at .adMB>+ip)A&oSefR at AoC`AtfV:=Dor(,F2[J?n6)L<RME-S.:Z_l<"AZc0Q+T?nY
+%7*3ppgMLMEd#4XYblD3Y!n,;@(Z&#1BUI;%\2uS7d:\)B):Vt"O&Q.rEG#@?XVO?"8:bt_K"#T+CLNoNT%&n;G:3+Q-uHNVabK<F
+%gssR_3C\Mu'TH%h)C[cR2c`C^G>_%2D,0pu-2#bpilILNpG.0WpZj`X#U%6M3nSPMpjVeZ+8-ueL^?#(o(>;D3BjKE"6NKSd'<iF
+%?KM!ce1l5?Gi_l,3+ugP`?dYE(h;G064)#`d&d(NKGsIY"6Q0XOc<6&Gr<M(r-<ldjYLui`<q\bO>:mM at euhY*?tPHM'68tMT:_(
+%aa[=6<IrJJ+Gc"\il at 2VRGr(%q*"J;asK,i\r5Zd0LN'KP?L&(ZuL at bWSI7Tfbq)TPZQ'iYB.:f)cKeDmaK<[$IcO:5R@`=SX+I,
+%JAa_ at En?q1k"!cAfl*#iCk(k#M6XisPL(8>Bp*Th$1!+2'`WROgUheE62>BPS&)#Qm7[8E-kqW:pp?Qr-4S`jrrIb%17F%l%,Q54
+%Wka@[gjl8/d1<P.`A\9.p*IY;R;_2:J9!8[K#O(6IbC6n'Z,joKq,D4k8Do>]V<m34R;VI21=,YJJ\nq?XG.lL#(cMos,&'o!=MR
+%8^-LT#*NK4Z&mK3=`Cn^irV!Oq;qljWBPBIFe50j:uP5M1;_/b8-%O"Su.>VG7HNk4/).KH`C1nQWOn0HHBVukUOnsSr5=_^(2gB
+%1[i(UH[)dfn"&tVObpM]3p0H$0:R^*-WjqbX/K+7Pbq)]e4X537qc4Z2+bP7#@Or.;0%Q*efs*[Y\R(UV at rkDlL662Xakc`S'F at 9
+%eX76Na(V_\a)epD6Is7g$\$Q#Cl!k!8Jb<UTY*&M@:E\<#QT at Ua.)7`69W*D(g@%jR?^(aofIXqa$Ig#`C>;C.[q]1G./n;/rg6`
+%[tJr"'7>UGJP\:6kBg7q at lgc#p at I]Ip=gYaIT[1n3f2cDq?Ge,>d^5snZs6s\GXQ>^Ar4r)`C&d0f<_cq]t5*.Kj(]\b"]?j\,ZG
+%S?Z&2,_nQ at Ss?[qo51;1?0a=,Rk=s0.7X_*[%Prs.=k1gNl&mMe8e!\amW^87D<af@$,9E$k8.U0)ij`%mEQFP1-cb)%Z+n'IG`H
+%C`Qc*J2u6eK2*[G]3]1.>;EhY7*8pX9hM1E\hHW=']tZ*-8=&U;MLaLBnQWb=eAh1Ru(3il at 8FMpfHd+i.c,FnhWI;MXL].Nu1*q
+%$@`?"VNcs6#6\?0Bf(>Notar'\%tsMCCY*Y^UfLi4*J1=.Fm%c_k8(JX;CC_G"nppM@'H!XiOuIV_["i=g8'hM1(F6VmOiq[eZAe
+%8O&99Ds[`oHutPZF/)VgIG\9]d^_+P7%G]PEX%#2F)<KHrQ+fLVo<;RjDsE59M)4#9+bluOR,FVC,ag#q>hFqS5[jF74/Eqk((&$
+%aWgYIQ=<,LXnh=1;Y"b1<Fm9(Vh?X=[C+_b=UA28Hu;m!&)3+=j#H79gJ]@$"Ao.g9u54pH'qI6?d4SO.o(+C`bS9Jm',W4CC1u*
+%N:Y'B97cc@&j%Upcd^C8TUV"U!fl$h\SUQkX>E20+Q%%?YqNY!9OcqGWX"93s'b>#'Jnl``CIM"5OPr'Aae;nh"L-qT3_UYqnjC$
+%'ji^j&d#&E9'p:`Bor*&I-$;&go_q$^l>DaqF17hb+9_74piOV7ep?F.&efZT]QoS*5Y1::K:uPJ4U2Q/%gm,M,cndro$o$pi-KN
+%&h_bA]?2t`$%A)#R!t9WbJ^R).$mSX%?*3fJI at T<Z")\Q54*Ga>Zct[A;37$GQ(_h9u/8?gu&!4M*ASL0ranKO2'OsAI3:qbM5!5
+%DX%G!56i[:FIC/3pRONp(h*Yr"Q at Pj5b1*%o`rGFf'G/?3-QmYhc+kbd+\5_=F!#A9"=7V1mraIPTn%8;Es(7Y5,:f-d1TF2I4bl
+%NQ%Fb?';=Q'L/*G4n?O7:"PY8 at L65PBD5mMOt">p<\2%))I.imM*K)odgNd+\kNFWggmf7It;LWC&nK/#!`fO:g*3Oao/5?YJ.iU
+%ppa8F at I#V7B!=/`qGI at DGA<6EUks]h5&9fkM9TX00%Vfa%VsJNh["e\epTj`&eLo`_lWg+IT6$c6(`PWI.`,[UEt)BcTF2pE!],3
+%(u(N]Z(pK"2_(YMKOQ;MU#2&\=<"BP^n[f35>?kjo:gECTofHhr'k.:IR<-_f(a9gFDJp%R7fE%Yd&5F+Q/_Emc):aV-:7D?pW_R
+%5qN3!+r?@tj3)^;q^.Fas0g at Rb6&qX0NB4`^jh=m"(.5QoLYHHPr<X at e=nu:X)]3^XkB+l'Y+uA`WI/*"[(h&jdn&gWG):="Cg,W
+%43l^<+O"bpHiG'M]+sX>d0/gOQD/<-/>cJ&pg)VO']haA;QfiYf9J=bRq94SCOK-4(q6-JY8.43`S#MC=SoG'9N"U,Ag"Urf9 at qu
+%-1?PUKGe`dS@*EhRVk.'lH$bqXJqua>EUm`]e$8H'&bJHm(RrWd4A'O1:YU+B6/PGV!j'<*%F^IgUBkIP2>^D&n#upkFL5 at X>DqF
+%gSU8EpWVR-5FI^7c9JGFXp&e&8$]<l8TQI'C?f7[6F4dt=hU*M!P,k`e$\\/A=q=kU#cQc+a^rCRFp;Xi<'D\AnIGL\4J^S\oNKQ
+%m%:7#YP7F+Q;UMkB53VDr]4p*<h7hFll6YXHObI=b?tu]41T?B(KL.u*a5L\J.dRLSL`5h>fgRFlQ#5ldl;*:?Sn?IB57%/36cHL
+%rr%9[_&:FPL3^&1Y,B`530dWe=jAJ([3IYRc6K39.<65fc7<OG at sPHuqH2%e`XQNQeIoMdRf;C$@X at YXNQH/s9MZPEaR,kJeBt*'
+%M(rRJ8a,#s'K*(pEK_4do"jP/U]ERAi5]i>DdpKph"e;[OHD(6lsb\&K(+b!0pPa[1K_'1OT=^rViqC5D[n5>"8-N[]\/#B*X+X5
+%1Jg#]/71Q=rCQ3T;H0=_npNF9)9*C_#Ko[S0;&9]nXpYH,llKA?=cmT3\M[TR3fB:j<UU/85?\dL<@e'WZY\T`9BkCI3_o"T%\tB
+%E0p\Q=*9C5r*$6Pd#Kn#4AQ3<KBVUq#%,SlC!+l"'A@?G9aOc5<i.<r):[`Kmc=-^eY2O4<Y1<P2::CDS7N2jOm'=3'>g2:h\E>R
+%X%<fs2;Jk2C65*,Q$@OK5OiM!^-.U at FR_'!%02LS)1tsH[/BBTCc(o*jnYBe-bf/Zhe3f1?0"l95>)RuK*Cri38]:`liN2^YXsfF
+%1bGLqcGqO at F`;]QI6[4PEl!BjhJNGGHl3GnH]2jk]<OiM9mApk+4M(!lW,gM9\`7E-XrC:S0AKu5<0sdY?>ISP;9[Q]m5qLSRKQ@
+%B82RI*YX>`aH^M%UWTPXHugDg0CD,"2j`?J+&t`"H%P/&nb'7sHS*jhT7V5]lDmG8BM1LA(g$ssi!RrRASTEOSYtn))(6a@";/;[
+%bko/[MdXR'p:G;3\M.905j=snaLq=aadI(jrV>+gU%[+?Vmf7Ak3Pio]ui;r=uDD6k]pOAc``msTXuC40?iC,:t at OiYk#+6c`(qO
+%]0!XGdHoC[<T2<S4q+"[V"Z!\F"$*nPep\ueL2`OAfcB)\c1r9Uk2b9Zj!QbCutK6VC\hr$l+mM&Zk:S(+ZOgJ5]Zq)uX_U7fg[_
+%b:*d'PKuNMd_pQ,fY"]N(gBlap&1P">A3A.05^bU!.tThY.`-+cHN:`-d6rT]$QnoEac\ac;U3P#74Z4WG'T)ZHe44.$P!V.aQhU
+%^4UPT53'AJ$uLB.:l-ec-FGbPlD!]q4f&'^58n\='FRZI'M.'p,"k6WSN4 at i?5!.?,[8o$8^pDuGU^>gcg/'dT,C<AN4J)W&g2[R
+%:EE6X,I,po1UBi[X1[-V+ at UXKq2-O=,3O#C$CPN!=3eSV&[`uua*)3YPjk`#Ya1Q9F4]jhTUkQIK^YCR6]b$"LUHelWo;V*#tDRJ
+%%eK/Y,hp?)Bf'I_E'qJH8*YX"m\^B6Kj\JLp`)kuAi/<je6rt?&B?t7%SVonN<,b]p8in[iTQNNmJ-PPb992m2)=U\7gu2_jBLls
+%STfTl!Z?#nnB>:92jI5&cMO"P<2ibBQ)_kbf=mS?&BX3/7L[`3\N<b_P=0I9P>RMk=*(nt\KnJ2hWoLZ]q99WbkfP/o@"3DP_nAk
+%ki:AXkkNi7g2_+gZNks,kY3\(`8!pOVcp.\Oh*)dFJX#L93(h3*m)?Z4RD&hpStL[f4cRLk!IT/kQo,mKRerk-ZRVg)8tu^]8VS8
+%[&^)hkk\2Pc^ERO=[1=f2C2_2,6 at +QiD>e<(h at elh=]K"75-->n482sL;Cb(SOaWhMSp/jPJRn0R.[s at K7!aFis1E'L#bOpS0f+h
+%?3&:AkMV#h?^$h?J74"F*slRh2OUbNCpYQfo-+2fDF(&9oK*o,NI4PJ^>L\Nl0Sn$W>=UtqJKAK/]@3rhli)PU1$PTVe6-][cumE
+%-D>m%</#d$-g&9q'H&*K;_CBh.gG1s4!h9]P'?6j$cAj=Za_G[CGO5Y5 at h6Q6:NdT'V$-R]s&#5Ll#oAFHVQAUp$Y3U%t9Ap*>tM
+%f<6$AHXg-0.qj$o$gB;a1@!XN$nad<'YO5Km*bL4cJ1!cTa5L_oC=S5[WVc)<U7O.8".$kRrZ%&LeM=EU*h>0k.]qL16$eS7[^LL
+%#Y<jX>=U$(<sYdM1fH\^bVdl)TO?#r:H"d&[qVl?Yd(pPQ_-`-Ah,uc*YrSdUgMkMHN9D^nV9b%`@(6!29_8NfIJ8FV4OANe7MQW
+%g70WfNcncYWRlB)PfgSB5C$d>j*c)uP"EFa)X'-BJ'?@5$H1*K!$7*DF.Ln_R7?(KRC(YUpNQI<n[HWP%sH]K(@rX^:(phA>!3<#
+%SNGaD^@EgrcLT2\bi(6$ZJ]6>b13Q"NGk-Di\=3`X`'AQ[;1-;dOG")(go?4/.&THc"G>T*e3qKH50]Vn3EDqN%&i=+FdCoD>]"V
+%.Vt",r9P]@(s<*Wjom;c7O-$J1`TEbUIW[hag3sFp*g%<!RAercts,ClUY?!KdsWFaj$>8O=@"N2DrU;]^rh>SH$6]]G9gm5`H;J
+%*uPpuM>XpE*.X._q%+gg&A/G/V[X^=K;8f"H=Gm_F`aieK6%Z',\gP4)k+l^M4qS0o#.V,;)p8DDWqHZ\*k.1JlDm'-7?n;&uD^/
+%#Q+/_OU_&qB4$s5LM1ecTW at o"G$(iQje1mt"I@=*9E\p7<nO*"B8/BDQ>3DuD:8NYajJS#%9&XBahuZbIM!9XlE at +ecrg=8:=lE-
+%\ZfM3#4\n]EaCL##&)^<\W+oATY2GNT>EJO41K4)Le49*/A>t?YC7W.fg7+ZT(I#>Ko`r@/q"qGa$")TNhr_uK,j+R%ts99a:Hk8
+%-WuR=#/'&'jmmbJ9G\<ID/\MacW/qjE7lHQE0]9VpoJl2*-tO7jRc)WcZS_^bX3AVl@/FV&!9OX$l;#G=%]/XLk2\0U&p&'T>\>3
+%0!Xk<SB@\8BYesTT7kQY!a=k`!i*<n5N7</*2ePC[aD4?K`X[E?L_&6G*OGsE5fW*3-t&W`Hbr-b::'2:57C5HcT]H7/[[aSgi-r
+%PAoTuEpH<H2>?EJYl,jR-!tc+I5]UG"bTk-Xf5Sj7DX"a#.b+1->"V0m`Y7&$>_UH=KEC"CTauj`8C;F3>/l6`1e]octJSBXD-"W
+%W*8aLOp4(2Si$;]-s8OY'`68LR*/26-0TZQ6]lj?i0e?s3($d. at F=ui"XfY9##\.V?fuDU5PC9Bn'qeCfg]oEZECpFmEar8?iCCY
+%T[c=mq.(%XjkP"n:HWCO><rtXL82!c/dZ>KgC='Q:d">t;R,B[VgR.@>,bkk\bIR')ZLJn9OM<th3a(D>?Ooq]<k/q@(fqF/9YMf
+%qba.hEo/pn_@;e at a93*+e.nHU14QEp*k?sM>>9fEm?:n=E73$eUoC3 at r"H2:rPL`9`lCZ<WEBU;hA+`l[[lo1U,#\J+gt at qa'2jO
+%)H>)7*2""GQ5^>.kSS5e?L#CMatE*\;rMsP.G17EWU*MK"Sqf-ls*bA,$TD2;g;m`d=8PMS8'<hmRr^meqME600*lF`Gc#@PaSP0
+%'(qhWLEHKi[rWrk.Ca)0,iIY2VkOZO=`<tJU2-#;8Rhts5C!r/Ot"qYA9WS?/6#bYeC;%n"Q[3uBdS:=(7CheK:1s#0Kr1E6VQ?>
+%XQG?Bng?h1Q<cKs,S&u0)\gMf]`lN%;',:s'/EKOHic'g!DJn/l/cJ^dAMdk^c&(0>[+DH>jEA9n0,npTQ49_HZqTr^]DP at q>Cog
+%Gp28,#>!K3E61=rf-?*7-seCa8iS-+J[cpX[m[QU(ubT_+IA(Q%kG"^os-Jg1V$0u%Ao7%JSqNe]?&UeWL>4T"TM3*&8LbDQ7EjH
+%r2*9pPKULDH."j&.ba;^UKDhKR0Q?-02J2Bo/_U*oN3M;Xe$onU6 at EM7CLL291VbE$s9fo[S/?7jKU]mi+3d"&p/L>APgPl3oOSS
+%HkRXi<9LB%\t.;0RLq3fop:^Vd)grp.)OSV44\FISVYOA4\sQHqiLIi(B:&V</L<RPHXP";(,J1BbGZgH+O:sZil7+N[sA`SlU(H
+%5$!b>!(lTa0Vt>C]:%N3ME.KD?DFqXh=N#alR/9?a"C]YJRrX);$]k`0/g\+c-_o?4;-/-<)jeMhd6"9,Gf^Uh/=o4.4/(@!&,s(
+%ruk+Ba at rjLIH/8.gUMSCVBV[-,du$Y$tJ*@@#*$E^/P$4;rF<2QtX=9pon4%/NiNP[?.G+XD]%#R"Ft9!)me46\,Vu)"ZjH1,3]/
+%[EZEZEe(R/Y$ldghbAZB,YfAM(AVnMA3$jph3U#/+'bf=[#L;[1p'"4q\g;LK6U at V4$>1c'B**V`0:0!jOmV+Cg'qRhR&kM;F%^R
+%ISojfqafDWQL37EVM>T.#*.)as'EP]Ji5,tSf0U1%t`r#9to:,A.KbmM*sS`)$Nns.2ls0Pf=_Djl<0T4;$Y?cZt.ZkDoW(oB1Hc
+%[fU2+f<6P1[F6VJ at i^F@*B'C<5082Dk-gR>?JEG&=5CsT-NE6m-QRUD*&eW_M$./Wc7+?OLJSO=Tf$7)iMDqR353^NoW09EJGI/e
+%D.cd`FqK<?a[O_>]!OBbg;^5s0OHpu='A.!!*JLmK)Q$1<pCRm)UekU>ohj>r+QH at V],=^']Qk0$!"l#5rElOA0 at AZ.D7$f"fL7H
+%SuYB1(*)2c2E]Yg.S)C at F3b]TCAf.W+QsS%:Y%;ojmnrD8?=kcaJc)C(^Zh\F=-(nI$t#tHhKk,:@6Oc>UPFR&$"M6$?X8TbMI&q
+%<pi:NSXD0CKJc9f-#HB2SdeaOF5RldQZTP^]ZRL[)AZLdoYf(+hGWK`m'<h7.d9mihb;)U'P6N]-lYW/ccfc4 at P#/2nc\hVb6[u.
+%+0t. at k?tS\I'j#`[i$4E-N"Q?:^qpcq^BN8T0 at f[a*t$>033slCJV+S6+t*R2s69Qh)l``[t"SXCbH;DX$q)LPK9!Ub,6t%:%A!$
+%Bl>Hb;@=&D;5[fPVV:cZ+!MU>(U:p2+&#">3Cs$PDN'*`Q05I4UY?7kDcS>#V at RnW09C<hW`Mj+-`uHnYj]iJOu>!u7V!NR>-lGq
+%fUIcDC;Y<m/j!.4U*P"6M3Uk`:E$"8T7Ggj6qD3^FG59f3`eu5l[;e<]nqe1&e;fYUTXEq:E]-m94sgM:Q8Z3L?OL$*K1`o:Nsd(
+%88=X=:30]jdn&XIYY7cP.!Y8nq3C$&+3+cVF>dM1OdseVn`=1[q2H/e<*E!C0:;=9JVg#:(CIiY)u-2l1q;D+/Eh>raMl1Fq at V.7
+%J@,BpKA2.F7j4h`,3TH)F#g3--;;e at bY:mU8/fF,*eaF:BlKn#$C2IUKW+rLnfts.7j%$-DFnU';JTHcq=*E7d$[VHr+8$U[NqV5
+%.=Ne"k4b6(S_.M'mr;I*[^^8%W[G!DIi_O&DuYD4EZ:$3D^Q,RFb!dbVgm9bLQ_ffmiG#&V\d.ECJr1i2m(,*f[P2i[qd]_.Z4.;
+%HgX9E)Ws at pXmABrNFG-^9Y6"5j-mc0YM.C-AbgDnNC?rs\B<p*?B+FN8$`@eh1Bt=06fYL+",f34YKdcb5uWL=n5F`p\dq$[Osrk
+%KVA2tW at 2WW3a0Zm#*VVBpsAa9:W)c>5HX>9=R6_\VR05dfO4iQ(P2kC;8U*'JT"/J=A7(\gT0?$3p/u:QHR`UN]94M1-a%)]G\qO
+%.qe3X](s4bF<\IKhrZ!:,e&SkS.sOj at n7n.]GL`YZsCF3V.m!"q^hOgmIr]P2^+0,6p at uSLWU#X06I0b/87<:*#Z1O>f;qhh;UMo
+%@``80=6f4cp\Q]pRq.,8WeltU6*@PJ-;(Yd#,IhclAgih;N<=LP[(VLn79I;eU-"6RehI/gFJ`-Fm'P6]F_S9'rN^0r3"/Za>0_I
+%Y7r0P4%Y,@:Vbh!C=O<%`ga$`$1%KWia\4JO&UAjA[ta$<s"O-':Y.:O7#98]G`_BC39s5P4^a3ni^Zp!j\`806chuB"l*[?@*l5
+%auk%LVbt3/T.c=;Wb2H:-'%E[7T/ck>+f0>HWX2nmr=/!\-T'$GdUfQel+,P0ppt4;a'D&:^`%Sm#ZLlN]3;=/rCdAkCHK$])tWB
+%h/>B4R/YYIIL8HROo/MMC at .JXKVc]Qk-O-9@?4d87=9j\!>?IT$Za.;KMm=[$E&SboVu%R2flfcnj9pLM3:>L$A\)X!o_ZN(1`^,
+%HEP:=bk-[OcC+F,+*)&P#C#(4 at Idf)6^-nGjE8eaR^.<>-un.\8/2_mT-tUVV<9&lTDYdr at 1hA7;$5rf)TrNa at 8j*&Q]k,qcZ2AA
+%87Jasa:fucFq#(!5ok:^01&=YF*UAa<NZ>r7aC4a/]/j>GKX=t&*E;=AK^7hK\a)PU7=p\2hbTX4Dl]d4pq\J289U="ZYBgY\7`_
+%+j#tCfF+NT8hIo+1/E'4\j/AHLDSHVB&&#g3l[s>&C\H at 0Y*C at qlA7EVKmS^jHMALd62i(Hnf\F;ciA&ZrHh/\JIRIom6)k1=t&I
+%rGnJg(8$/hYLQ+"60-pG%Wekp8Qq??19\@o85&f7`S#C>e.213SL+[9SUAr`bm\qB=u*l32"h[&P&SU.=Y9TUS?M.L-h6B(Uhm_r
+%/?<09Bp(TL8/PHlj7Q;BH30T"J\5M-(I>l,f6GrqBW[T=dCcasE3T;D4RW/Y!cBOja&;ILF2G47`H3@;lN*,G([S7AZ88AZq3/IW
+%jB:'TL!JhDP4onPCri%l17j>)N+.up$a5Cr>66&E9Yf<I\eJ$_!Sb`=q+UER=?Q-:9tgpK^^gm7>#1fPf`jJ9eMJK^,#S98O1.;'
+%$&[O_bKuJ`V"kin,rG<cpVOAVP#AN9V-*TB:E)Mr%LBpTb/koV1!,YU9kESISi_)>+tG";/X-8&'aa>-E5+EsdT&%:s590=hLbL0
+%;;Fq)YneS]@uN(V5?FN>^MGZ9c2aQ`i2Q[Gp:E at 4WT?_r^lAbGqddN?%u2&Z9Tll9l\>7]+=4So6'k=6V5I@[VGj+6:"EKTQlN]g
+%Jpe#qKaWn[),V`k,CenUZ0;6ClMPVAS[0+lOAdiDl0D'oSJ6k;PEYbYQIp,$fSelZ,E-G,>`l"0`HIns_H^<;=a8>3:[VCGD:@D1
+%>'tRHM$AlU`71pL+i?o7?Zqm>F.h_$r,[^U:"EoSaZP"Y<pJb^[mjL`W7TqSfU(/&I'3Yom,*F(FFmN@[k679-;j"(johN<^?1U:
+%PCiPR6-S6:+F9&hjP(L)(ccRtB/ePFH-r#EdS_Gh_[QF><Nt6ejHf=PKSmnMI=6F6?NG&FMH?o"1fGPsoZ&j)Dbjh(H-1F^eEjW:
+%bToB1?MTb0Fo_ir.gc8R]0sJU;5R)?a"6V_F+1l-0AM"9lYRQ\c^2DZEG*;`h?([`(Zob_mh5hgkYeV'Gdj2+Fi#e>M at kq;T2]aY
+%Op\)5L+Tm$AiR<59<ui/X1#oVLu`>(A+!tb96*ZcZ+W@#5A9!PR9Y<@=tsP:O):0k%cW<ujO[5t'&AaPTY`E&?$U^sZ17u1VGm=t
+%.>Wn(>4WQ%Rp<&Nr.*LJHfqag?XUbZ[Uu$4N2ULM0]5/k^CTXsC'K"HmrRu$bAF6)9-@^f(,LD2?b$q#3bDM6<thNF^P8ds&sd$U
+%mE&64r&7NqS0>&r7hb,XC8YH1]VaSg,JXQD3fh]<(8LCG*sJI9Apn:_.sF#3l:)I2/k+fFU^Fm4DU`g/>6HkIO8(c+1d9+[Z8##g
+%b]ts"3&bGNq;@fi+;V5g5[u528=P['9AW[Rs7a_DahrUKe9f_- at 7=^@DL[./>o7hu\BcJ5%dJ[l%SPeDHJ%bZFHhsF;cq<?<o0AR
+%,Vr,$af&jTV/$8oZf\65fNtk?9&O=D7 at Z<Hrh0.HIA`?pK<rj?L6Q*%-;UdSfpQ=:e'&un/$Ga21Ekh/X:Qc8h(/<"J,(hM7G(]i
+%W8/`*n_d#)FJ&k;nJ\WV93$P:W<CHi^-"UU;96UZ9n"bo+!iE&==qqfZ+.P3N2)$n\a]7Gm`_tA4g?kq0_J6$mpgHue$J9LjmlE8
+%rKV4 at n`bBr<,$]MZ>?.mS^LUD/:FZ;"T<:\ZX15I6FC./mC<YL=>+^/<;A0?N*m!ROK2'\kl<EXa\tkX-["+2nn>3\-OJ*]qrUG;
+%h+d.5>`I5G*97?MmQgs^+$Kiu$=;/*02G3?\Yu7'S!K,EflG2IUko$(5/!n*Sm6M)X$8/OAu2&BCs[=^"J-'37q/?m_j-mes5mcX
+%BfS-q%P-LGm6lc(l=#l[E_!*3PRF`<f:6\bs0M at UO^[2Ua"IsI,oBt[=UMdNV#6B*0OG at .Ee'@O)%)LY at na4@qt$Ys,oJPT-(3qk
+%juj0!Iu\NVT9]h=oo%=bYG[0^.SLff4T:M)Tsdsb@?bu5dD1p0&pRrdea*n/a<k;Wb1#JJP+l1=cp]%Inc;;]#,kS)#.n"5Rp):A
+%Ieid5XNW4o>g"+!kBjt:PIu%./FTGN40luEf<*N2chG#J^H'E!A<@ZEofRTH+FdTHXQ/?g5Y9ll9>`,-M799o;sO?[g(o\]kL<'s
+%J0CS(e1pp`/rTN8`%uaa(Ra=5;$#)"j&1nGJd6k53Q;<ZpGmZ9PC(ggccKca00?@P9UEdfPb9IX2C+"@IY)C0!k)N`&p.0S]eo"P
+%Y$TW/V&=CU&(5L&$g-^(aBNKI'pJ,Ldfap]SgbN]jZm?P)Z>;',Q_hchad(r3[f.oh>d$Y:[Ee]IUnI<K$*fKKMs6ckClecUE>aM
+%F\6-K&PK7Y*qUbB^@5l$ZeR&;hqI2LbWa/9I^ZYSP:_)T%o(2cQ`FN#54A4-Um8gWhOs>uhd"%DOtX'$U/acBC7s4fNLsLCA'*rs
+%ccdn<2LTi$2Yhr<Wm:Ol2b`m1FWb8IUED)jHu]Q-DosFdiW7ROO#/,^,cLXN"#B##4]lnS$ElRC=<R-((5:B94&aE7`cT%n-ZOtR
+%m_AB-%7ClfK9/Qlrp4NsAWboKg-<19e5H;n,$Z![;tG2GL\%`0>AquCO59VqMX]Q/q]t at R=30(Q.%Th>-UL`=2AI)(Rlk-$Sj1u<
+%TL_7P*\uM%7 at 1bEKqlH*n;[F2V8DeuUh11!/8<:Q+X1P^_BLO4]U$/q at 6[<i)1HJRd-K-9`Pj&dQ_S1tT)[M[*I,fr;Mt/Er/s/a
+%-RqrMFhKYgaXB)Lh?N:6/!B]9RtWN at ViNPtEWJP?>b1rJe93:?*h(I,6d`r:rf9J4o#U=o8X3)/daOp#/!u at K`k[>Ed$@QUnY9>_
+%,_Q,c5dgTIWMc]4PGL(TQnMfh9V:PpkrHQ>@!BsGj6oWpFer9JH)%PD=[GHH6an'u9oF;pn?/RfMM_(D,f`)qKss?QDJ$"gr6gln
+%Xi;5d4f8N-`WF0b<;K<^*1_-o.;kA;pF9U at LNl]5emHdZI;;TCO(Q3'e<Drklr5+LZmAl?HT!+i*/7kSSFi.mP)/^6BPm2bceXCX
+%UEk+C+URMH at Am-iM*`6H4h*"YAs/"tAdVHX.lA\kpFYh[T:-aL?<j&U*m$lP"&cp72Fg>i$RX;"B#g">F?WDOCdHnWNe%$VC%0fr
+%g$jk?*ZrU7;CYK0^=4Z%K$;uZH-*/aA]L.98d9#,\?;HjXd[1a]I1>43Eq]b?jY?>P<*Gr>.#FS8#+frQ#VD%5)e$D]?3Nu[`6KV
+%)%Q:O`0^6gW[g;bW(='+DF1+&K2>AtghJ_P/5qVFJ8ZoX0mS3Y9r0)][M:l]4f&[9'^R^*nPJH$br"Y*J!X;C@'jWr@/\>a]>%9F
+%Yd8W<j-D*`$J_lGRj>Ld?NZ#'Z5uqm!DD at q"0"E5)NI'1k9=,(X.8eV;4"/0Bb![hngJ_s2eD9MZ5iZSbp]$AY`UuSn5[cg)S',>
+%ZkcZaD&&Q::f5T_N3hNSRA`?;:b7e^VA=><O%)d"-EN0h[^9?`ce[_'Xb6gFas(.8;&H2%'V09mLQ8E.\W)a$7(O[ArQh8'gWdIH
+%@j:*k,b42N9+.%2:sRZZ&gu$p5B>p3os5a)KOFo^;5ofr;JYr3VOr,t9Q9<+6bsQ1)Us)(=Iqo1$Su:e:P#5Vg. at suUhZOQ&IO,"
+%:Zfgoj>`Nqk6sbR$B<&lLL^$iGCU%,#^"p%?Pfh"[7E/<:_fSN(hTqb1=W65oO4l?*f^][S_d-`VA`M`-oLj*k2bTKc"?D,S4aRB
+%PD]=\$T*:08bk.^[gtfoTp[_ at 14:EqQPDY+^CHNgCf%oUn48(K.e$]M<98CE(B(?r+`+f1C[Q<i2gYIKl[HAnWC.Wj5/FY=26=TK
+%('kNqY]1!\Xtq2(P_TN3ncuI0igsHNH^O,CEh8!=d:j+D;"R?aI&?t]CD(#XDFUBfg8bD0=>;j7Y[7NcXuqr=ds%:o094PHd+=oG
+%d;RF6h'TCUUQ=r>a'MH=3=?(IUgEhpCgF*LnS0_8-Md4?6+le+o9:N:QlC"Ggo8r9--P.*aJUTlf5%X%C,oQjr9fTe?RHjEfDFXl
+%'EE[_oo\dj;gHKc^6fbREN,1T#ZBChV at DbA&:0 at 7r'ecc$VgI;aIm&;Y'b`!'Zgqf`!P`DqK$\sT/YKq]24S%L_qN$F<+=E$&]&Z
+%jeF5EY/COM88mtJ&]AY>mWO^0+H9e$Y#V+<:ooeSWh^!iFY\6Nh5:4]9drcrb^n$/&A(jqIc`3U$\TbCp/2luqOZ9`Eh7K^7G at fn
+%H^Gep)Jk at rbBKgK4g6+:3\V]L,0p6d4HD5eqmd7Ompnt18VTs`>_6Rj at 2JjX*D(GLjd4gO3L8-A$G1HkctmVa+"iSmOXZ9[Vk at WL
+%';'oIFR#j4]T,'dTiN(jjr[^!c@)0g?F<M,<:T[)Zgng;O"<"`%G7X^#)^W)B`TOUTWuP2\O6RY!dLE/Z_[S5D15XDb7 at K7gYk"J
+%:#3EcB<V_`p#+N(d!-"/ZnnrBKV:5S'AW.X*pnO3$3-%C<2\qGh]M,rf1/WPmDQ3\,F#cd<Z=4sIS*m&H%A'f5=%+clTNm0=p at m[
+%=V+pMenHSs5J%p@=lkFh0eK^"5f0k.V7(Fs.8O-2h'W1$8IF)drgAjB+@/b(;TG,K8^6Vm+"T]!q.hD^Qg+:?1R5;lf^hWG9L\8/
+%E&l(_)iLJ]3JbiB,=JtDA?u=8H\i-T0%Np):7oV5nK#IC9FWpq:1%=;1H_+pg%mdq'Qg&bImD;m+)3*UMF-ER9J,_Dmp?AB#5GKF
+%j>/12*JML:iW#h)6:Q&G1TPoa7L*M,qDJD)Sg&3sfTH<*<am,sH8=SV69((<o69fWeL()7eGsT/OIIE at h5J<P:"#+eCqh@(-DkoL
+%`Q<,7,s^bH)@fm&.3gUAVjV:rFsH%5k?5fjkB#`4C(l\3fE"08(MkC!4clt^G=r'3%;b0")>ST[<?HmGc[_<dhUMJe'WHU)m%B>s
+%o:5UG\8+0iGMCFLeehNDjCTd`noLWT=6oMMY#@;a2tEnPKV-NkX`Cl\Y2J]3<+'1UEZfkOfZ[gE2a&q]^?\B;S$=(h"nD(!qQcn:
+%K2h<8Tpu_ at 27:,GK9_L1V*u.2M,9FD'pR.G)'8.S;pd&qJ=MB.BMRkc%IHbFQXY^Sr52?b2"kRfUeXK.6/W$%`!&.7(>3 at Ek9i05
+%#'WGf+RHY3)nr[UQCu.;"@Sl,$KnldX,lCn*hOq^i]VEh:`^"\h#:g;l.cY&]OrM4p,g=c7l!;qa1R(QOV[2->M<F8<do0o%su4i
+%nJfrNAGBX".?OR$#[Dmb/;X0rY+MRp8]FFnc`6MIr at 8U)BM7K:(<!,3R,TkC at KO&mnU)t6g-CSflqMX`XghAP<VrapVQ]U;jd9e9
+%NFaF["//>Fo1kAS&/cEr'gM"n2Wl0$0IHgiMOrDSPF<C?Tbo3ugM]b_bTmosO8ubP#J!fD_Moe:Z%LTSI;Yq+QqcC at Ho%"4QD5[U
+%Cnqp&48nL/$D.)W*,sC4];3%:\II_kmo0<P%Gco-I/3:)[(;EjP73H"F%jEjK[PXa at -,;W.5%5s5#P.aOm#DCp84Rl)#iSZ"NOR8
+%V]bubjBA*K$@8K-=k;)j!p".S1&0rB_#:7@?L%?TOOj02bZ2ug_eUrmNZ9k3qb<W+D7T[fH2QZVS6CSfmWX`\2%sUnG(.MsN_ at _Q
+%c`tt_M+5>F32fEHa.+n1G1gQ@%8N")".b\8kUY3/j,pC%55aOb#8]M%=Kd]NHU?mY7H:p*fco/FP3n(@6,ZdQ2'ZZOdOZECVjN>C
+%/@[T9O at jB+ofV"";`a"kbhX49"e5*#N+Qk(m,VG4^L0Q.Kd#kYP,aOVc=ckgc,>cEYh#1NaHr"_S/2F/9mV&3HCsP.Yl>e=o"^cH
+%?^!=8U-j at too)rk2urWC%N[[fqMB")0"8$8g"91o,ch3U-P"XH"^[U2'pQsUb!7rm\_oB>Do-N/@tXPoNFH`p3\<A/rFu5^'e;R<
+%1 at SVKgcYe_33MBj#IJB*ag?bRM(UUX6;r-$;of*/nsP,Id!DFC".5TR$hHOV7kadi#h6!P`[=LRe#F.2jb<QZ??rLfp_qD$$ANaf
+%%Z\%(qe:$0SmIWa+q0]QW8)YnHmOO_3"3u=]n+a2?q#V#ELO<?au*CQa%?T1-^M)o$oZp%7Kt]^BDL6WbFR>NhR#k7c2"HO=mEM%
+%s-m^ICVBY9WI2r=maMYD,,LNQY[T7P2aN27iNpHUW/jli3tF%N)69*Bargg0L*nQqX(]V;bP%Ud"K1D;k,$gGbe'o9c7C1k`)0NQ
+%==j5mDl6'I2+$<Rb]7b7RtZGe@('>Y1B*MQMJ\a`m=NDR%aWW,am[kA_:J)SkqqN.kOfYj\r!hqPrKeYqkF=A0_frfciUEA3&$SC
+%26P\B#kH:%3h54,W]$[`DH0oF>gR.[ib0G,4OE-`o$OU')02s29%k3p:Du7Lnu.PoPs5]XE-#=+O#iot-,j at 46HdO]fM%F"d$rYs
+%o.<7tVjX_f1nAEcrL)A/pX\a]jt8Q?m,)kMET0G!`OFD?E^(ni7JpShgbP`0hGnB=bfVWI9;.__A`cA>Ia$I88ob<m<2?[Ca\#nS
+%c4j<1)q7lj40Y at DY5-fM-0OAPI)3u`2%XbXrA9r!/!gE91<G(DqI:['LKt)bHQ0Z$]]Um25:$HLUjnVVU3W(fFinq<GEG^%lMoIm
+%(`uPXI"4sjqO0$>WK)UjNHsB<"8'L(f7RjWbDcOBG':75R6R at mQDjLP>%-96J63uT707tJC;]_WRan:,:4<R9bF<`sWq$uGlP[Fi
+%W;pluXnL!/"uQdgnES.Hs7/X"VbUEm!"oZ6l[U0Bk;COWQbHfZ;n89E*jgUZ_h&%]\>un8ao)8Gosdt7LfLN<Ot01NP1N*k<#HXO
+%2&c-Y'u(F2/u[sFo67PZg7#,5Q1[a<\oKkLT)j$`o;BBRFuuS4=D at t#`g,W,NiL$!Hs9Kk-Os>Bi&Gj4gWaLjhdpSRDF3K6i0lh+
+%7o(o?,A2"e=*C.aq4ONQY%V6%SMs at TH[!g.g$+e2&\`G;LZu;&3\p#n>PET<RO/s+1+8!9?kI!K]d+lkip*92Fg/M@^3on(L0jBP
+%//O;PkLACrG-m?&b&%I(]6[Fp9uo<NY>=hqAC#&=R8'*f1M:"\D6Jn"B:s$uVY!V]=k:\ll*b>/ehlYKB=kD>m*`;>Bk;*22f]fD
+%WL*B(]nn*e(VW/Q_"^=:8XL_92:qMRouESl-erYO)%/XP_&LD^^3,X'?.GNe\A"EOs1OSY.+`&1@@9r1ccKW?OFlK7[2aI\?Trd1
+%#fro(E4^2XP*)AeeYP%:IOniA4jt!93)1MDeqkJ at S]JW/n[[h3'*1/-"HM&O0M0VeJiUY,C'k8_Rn8jK;Ya3LgNqT)3aMu$pqYd*
+%q1UiE/*UFm_%]^;[!)E=\V]8JUg5i,<X3grjcaIC]J1TGg2mY^?!TCdU+ErtrON.ef(DohA)3V;DQ[8<A4\i7)2mFG0t)BA19g:j
+%i5G1oa/OR^RO51.hgm0l;9%.D`3A`N=:7cB8GnnNck^W8Z'Y,+qf#-T!@^$$[&jNE_RE`pht'Yd,`U;gY>$`tfcq($2V6T%a+Co)
+%GZ'@Kr:^l4O0 at 0`9`!(u'S(U'H>,(Tg%'FTS)gI0QXM!6]ZVs`DopDOhap99g6JWJSGcTocSs`W3cEgI(_\32k*sOOg-.sQUt\eE
+%l/poTb4B#Iep*DH<^ELe/lp/X)JuuaKEW\l\VDW>m)'BAkW$0npP5!Xp&O86"mMeXI_`%9V`,ugMp\du_\E*28Irf?<)2VU(s8,L
+%+f%Dg#Ai:ds10OGhQ'@WW\NW0j\D\kAtP5KBUXM-e(M_.CD,?,c1U5[1`n-,MR\*Bq^jO;UY_Ru>Xr;#P8hA:A><od)OcoE5FH:7
+%Sam7[r^@GBcYMTdYLkla<,YCrJk.]!)D(]+<:+A)CnP%Rar/Z]a3;t47+,1+c^u85.b(71NF&_ at qEi/ifm'aDWUuuWR"i<M8-b',
+%jloA+hf$^,gXLe(%[/9@&$+6+Z&-D#J*enM,E[HX#V342QJsi!Dpq$F9OYNDh1hSU>P!SRipA`B%c<1%i]4!@(9iS1`'t:[5'mo.
+%o0H9]*),/&i9?6ZD^s?@i@>LsN:h at BZq''@eQ0iAH2Eo0#<o7PRD4 at o`>-=^/#/Gm:D5Q"Ln*N[jg\VRI<NLCfO`(9dnJVI!cI,R
+%RbQBM*G%CC at qpF:i<qZ[e.SfVMhXbA&<dK`1\M015qt2-3I9fq:'h>d<7R'p00/he8NN2^rEI_MN-'8+e at oB)j1.01/<20Hjc0ub
+%`S/Q[-;LfE'h?)?YI62&Y;8^5J[:];pg`g'2,dF;c-)@4-h<ZVSV1oMjPDk-[%<e/+/Xg1T3f:mg4!s3r^dO0$uE/[D>rXF/ubq!
+%K&r\Vk.9e0O6![o\;k]Q5PJ=oDQ&e:;p':qpHTV?Vjkk>8Y;uT!]+1VWO6E8G at F:3=,"n9IU at BQ$r?J"nmP[c)+n[<;g4UpSHniK
+%+S%ke`>=\7H+Y+gXpM"JD3-TWP>0F\I at Vt1jG)c))%.*?pbiIY.kA8taCnE$n!M'$7:?)!P8lA%)06&L`+.mSo't2fUcRk!16g\,
+%&QmgR-?qE#4t:b(18._4LW/"IJo;3+hKCsrjJ?,3A/8pP$ZU%L=joiB7GC^#oh at fp>!ni%Xp>f61/VI=VfbtdpNU"9P3buTa!Zt?
+%k)Q=!bdK+im?Y4^*[0i.*D-u'/0:P!#:8JG[bjRdHWd5?ADgK[1<Y(K?e9Y[qQ#/uRNY"Vj](gNUg5rI+W2'U;Da\c+FI at u7X*";
+%=X8aOFh9%p@)"J$bTg:C?nlfHXihG1Gr:FBG2NR[]jQ]PlV4]3a6X;koJDaM0bFV%s#Gd,aW`*==R".9S*#-Q*T^&1!8!54=eu:f
+%)Lj><@.qDJRU,!?;tc4.c(1?_>X^VIgA>]]-XR'2jkmFm^>mP?QG at eX_FLa!HI:`81BSJW\'UC%D(lCf7"5R0R$hk&*E%657c>.d
+%C$?nHVPH1Xh><8&"8 at cX-`<p8]ScVAWu$r,#;qShf7k%Z\A(a.ZMa$BQ=qC9b,Tj]</J#f].5FQ3EG^u8Z(55dl/k^PnrP/;^2Z0
+%?&<^bs8Qq`=_sjKj<4 at qol_`Q]:k<Bq9UU3,O"h::1okp1eJE,#FmgQp0*jd`Va[YNg$B'Di8DSqU:3qXC'AI8O2A<FIU]#8\mhi
+%pE[OQ_;<JQ>!05mpPI-Rirn]mN$YaKa?6(7D264$1bG4[n:8PA\r1)h,liLk)RPd](c]9+5C5,u(/BIiB6&'CpRrq<Jjnje6I9MX
+%Tu2PbO<9td<V+^F^ro,m4-c/C]I=d%P4Ou29<b==Gc^JTH\8faWP/qb7eo*+-3#<j5 at Ha0T?*mE%)gFY8/Z-`?$iI3WHl"+rsn:J
+%j^f#!XMA$q"\7$l^V%UW\mq:gn\hro8sbohc,X`nbZj\@H4$;B%ZRdP;;7k&8tB6p^3YCRqF`XbDf>dSD__Ht)"@&=2g8KYdN0q4
+%%]T`t:(E>/k\<*di<5)3C+FqW4L@'/7m9"Ei[%sCnbFCjn`E4bs-?RgX(f]9A-Z6a23Tl>V[<cHVVd'?[9lkcjB3k!m0DJ at jg5ni
+%7&4B-Y\?aGdFMXklRZ42h'b#XTtq at o(<9D4?(=2"3m'*V3SZ+0f1>&u>))q2]^)[U(LZ9nIpZOpm6JRl<O'nkOtQ5M-dTNTbo57N
+%#1440:AJD9jl;8c>5p$B;9qurGI_AO:@dfpm at T'']C7uk^<I0M[*'GgoDQ_XSL$gilaR#ppXR=h%CR5qpV2C";<3/]YA[EP7C\gY
+%,Y3O&U;IQGIh8jU%3CCC.51*^Q+l%q"Rd?!=!B)0$gpDSPN<FYh5gM at K5-YtRuKLAhEdu3omuE8"C!>p,`@34Du&cRZ$,)G]lQfS
+%]_KB:%-gmMfZOA;;Jr25'cfF0?iGUJ1S-g<:FkhKQ,J"g,nT?/HV8H$-K#q7b=-9SDSpKeL!@B?faBP\hOou?qek[$\I\L!bK`O2
+%iL,`^_It"G@?oodT3rX#Z/:sYXj%'G[;SrTH,Fnd$nP>'^<*=QSo'^8K<^_GgQ'YW0MTi0r$BPJ?$%t]TC)SO6Qm%>G?tgS5#=.Y
+%.Ed<bZk8)0s8?%V?0><_nAmfTKQ?5o5GKtckc]ZTP9T.u1<]$DaA$P.n)n(&*"m#V2J+TlF^3nO6`#HSEc]abmlD1\H+_WP4Ye=1
+%9&)aS+V?o1'[Wn[KpkI^YGAffPp)>-#(`c?(=`/E#K%W:3NP;o$MIp^^SBN6Zf.Mu=Nm=W4G$u7b,Ql2j^b;p-pI/,:I[r-A\uZ4
+%"eY%HrWFZL&Gl!sc[.PP3r6jQ8?sQh*s;\kKHP40.@=`F+`?$o"IdG3>\pp/`XS,T,HBF*dJ-pkhUoO)iGpX#i'<nZb%[@_<j=TK
+%_B\Q?*eD20VaAMU)(WL\*TC5g8bX[<F[o_nj**2#:0D-]I+LLDWbO&TSm$cO9aGU9).513n6!/Oj]c]f/$5(iM&1Yk/[J$@qjPa>
+%COL059!7!,*Y6]&4)DQ+j;VZ6A)7:dF'mGhF4^"t:WqfJEUnbda<7&(2#1P%@km!fmp1)lJ5bKIl%_1$JDR/V'"q/n)^uWf3Od<o
+%-A>A"4F4b87_J`SILgb.n>sMo>&P;UC*h.0OA-F)Vi2r9WU:anJ4PMRBE-L8k)n@(&/4KeF)jaun=]I72<?`GI>*UZlkr]B^:%a!
+%(6J>))L`pWF at 1-HD"o1J>r`o%>e)s-,IPe[!1sHVm(3<U:WR(IitkMF:1E+(\A\T-'D;cTV2)b3BLuO^8PCg2+W0R1]3>`3`_W"^
+%cC`b?Ci:,lYWTpC_1tWs8POC^lc$V`n6LapXi,Z&$b&FEMLbnF6u&'4[CGtue(:koLs=i0$LR?Ia0;t)\X"0"R4Prfc1Aj+msHAf
+%)LihYQ3eUB/.?c$8*hK$Q9G%$aZIPi=;tHi(Z6JW=7dB-)Hs8BkK]TgK<nHNe<B1Yc4bH"#55mENfBlaf3!M'RVN!(nJ5r%,g]sB
+%QNsaiA:1bKG\\QEnKuMEjsO,1Ci&B/CH,+=F.uJ0INCdHAU^p[Re,oJj%lq>aP1[hK6=/lVD)1K]`]$`Sb6k4mB\TX7+jV@;'Ud(
+%a\[>M`6CJ(]_O^u>H49ldEE[*=?h4mI5[h%]Q6&*M>^0+AD?`X6;oTmD'lU"^'X?%"+MsGi.NeR/(WNhJ)$tJOW<kiVEfW*<pU>4
+%+ZX<E5Du'N(.HAY6A?pm=NN4/Ydali?29hZ>=sr=V;*>668l`iS?rg-_KpTimn*+$09"*Ji91"jgt8uQ&#>"FDXEl?kojEF*L7EW
+%[O4m8o]j'Yij at i?4q at KS'D0FFpA5;*=fd at mZ^==?rW[maX7/lDFT"h$m*"1d>l-*[,rJ>9AeNZUH#mfPmQC1f@<:K+D**?+lS=9.
+%j)F!0k@?_,G.)7V#sOlVR[)`[eE;5W_n96[La:Y%BdKN4(8b?n$*<:(kLjbKEQQ@'lRJ1rF%fmJLGctrl6\p)f#q=e+j%Ml_d8)s
+%CeA^t90#\0CCBl$.u;5<qH6Or!m.mM3ga(rW;N!<ZYE\J==$#iB>%4c,`+$IYG8>cIulKYM3.<!AI2\WG"mt2>W%43 at .qt]Na'YT
+%V-442PDI^4P7?BZ`[?^]Q5)6C(;\R(8>S]<FY5=BQ/$^:/=g\DLq-/X1FuNQdg\JR]SV9+X\A2j[#E%lI#8ka3XMJ>lV:)4`SeXa
+%aO]Hg3Tk2,?@22(1pBX3S]Li4/pd(?ETqnDW^4R4)<[T^pTumTd1`ncPmj+C6kSaU0l89@==fs8l+QkoFM;RQ$koS#JjZI*gA[mL
+%1bp/$^j^'rj at WEicC3*uOA"aI4:'bZhdK.oVBH1J<?QBj=:W/p7*lR1"(sahAh$HE4l</"ch?Igj=IIRL`CO'/*o(MZ,G?*phKhX
+%q.K$b-\=H,On0=j2tX%_H1)N at i2'tjpZ&'`OYR at k3tWt<"f31KAuNO`8-7$NI?5gNWAq*R>`jEmIAKkB(raq+VDK?-T;tZGY+Vf/
+%UZO:nKangUeiS[NXc69=K:URQnVeaH5SJ&,M%^8fGF at D`Q"a**@:dRL\o3igp07*-3&(\XBW91l)D#"\$<YO.\+Q,?BR9L)>]*2W
+%Ka,Qb^+d<8$_cgU(>2(,L'l>XX]:NKZbG.WBQ*ka*sUin395uBL4>Jf5k:_MG%%%<m7p`mn?0ij26$#.%@G0_j.5j'^1sZqRcl$C
+%[A4%jVL#qHopY.H6'4:HA*@OZE+&%m.2`396q][_Udi$G%L$q_)e[?b5AXU\q)ol#8#UIr+loiSPTLZWF5kgXYrBQEg)"hI[@7o`
+%c_.>0lY,&56D$tHH+f\0rf.B,p,G$W;'XG3`d210P'7OTOXImd09YC&-`87J23joj^/=GPB#aR1nC'%j-\uq]Tj";''5&pi78u0o
+%=jc]\jS%_.BgHR7`=rY_kEc08@/d%)ZfmQ#.ktZg at W"E9&GT7K31kl[Seo.;ntDU]C1'M+X&^%oKRbHVcT(*(<*HGYHce#sHJ(.r
+%(`#LF)NF/s1GmI<3&PuK2 at ZhkQP)?"O;^+r[/Q%Y)i%d#b*Sc*hMMf'^8R_`VVK'f/O)JeU?\8,[e#1)FtO76]B>hsX`'e/Sj5JD
+%UU0#$I3q7/'aI,pMLAYh[ab2Aia_NkQdk1TO`900bl^&PF4Y/(>B<0WfGI$>R+FVP`/3KqAFM_;K^Nc&Bhd4)CM/a9EmP)r7)lFZ
+%d'1_G##8lK47OmOGI8VC/7Yo3HaGWU8Q_KeF7_VrWB;c,c93K+Dkj[u6)6reb4b1#8UZ*)Io:i>j,JB2`1Cn"X,7<A+jnJ!If&6i
+%UfL2t14?LeI at X;]VP=M:2/.8D42P.B?HNu/Q8V'I^E&C*J_1+X=eRL)c/4pUCFB"KgX3Gbqnosi;b,!-YI<nSJ>FeM>5.6hZXmMr
+%Ej.i=BX]&4m-KB4eJ=E'(<EB[EM?kOISL/eYbo&.8[u8&'u"W?[$jg],dJhtl5*jX%44sa&bYGDY9\&9c//DJS<#jW56%:mO<\1A
+%6VS]2(hNDEouaEb=!?dl5a`*:isu!m'U*Sq@&j7)9LqU!&cWnWaM(fk>3TVR*0dE9I3t<nS^2X;Ip`h[6VkL<3N564]!;c*L<n"e
+%o,r7h'!e$<rcN_a@]k\hZl&K`7Vp%e"Sml'=tHodZ#LI$'DK9?nH:>do(s47DS<rZWa!QZn?WiD"Hnt at s)p"T3>PAUDsEl+PRH,>
+%hDgN0/L^r`b%>j\D/,31[u*TB^iXG9m?fDoGqsD=!N\12q^75.j]?q1NXV at fj]]6eo<\d8'pTa,<-;pUgf`m+?/*K@!l'Q'^"..O
+%4.#S^T6cJ9Dj+/U2pX_cP)gV-okKYp<QWDh?^KKTkI9=!@Mju at dZ^Xq:K1.&[,>KSh6cDK%M+(UUOo@[j1.L%M*L->M)'q\?+J!;
+%c7&lK6nlJm,PN#E&$'F'+;&k9"+?3!Dc-tkVPZdgU7Op&9oAK]YI1sn3KcO:_F5MYj?+NMN!PNI(*RR`3oU(\/**f'gkU=NPG?+P
+%F=Zk2 at bGGQa'PA5WZXb&rMA^j*QUO!#fOl'4Cu`lA8p;0>NS/s@]fIJoM^D/`d@#"cU>sT9RP-"8.f?jEMn&gY(*[;ENTOt2.e9o
+%?#peXNJ!N^nHI at JC?eKpqFJkU0","gfr<)7MRZU(N+$"KkY0$sY"<fo(3':"7,=%u6LLV<=M6'-;C?2BL?NXp&gf*@CA,T)$gf4C
+%Uui]s0'['EN/'RlKtha!S70N"UL/U:/aQ&a-R]sngifI at r'E#I0 at T&g@#b at k40>jALG(P?nj_7D,t:h9,/.K]M;gAjS+rX=3SZp!
+%ASrmS;ZV<g1rV(QZY3iYB<FS8/=7)k\a7ZI:L#RNEA#M.A>_=c&,Ft'FHqtu>*/>0 at ./aCgMu?[,o-HjJa>G+^EbDt/JN4U'cRqO
+%3W24+3iKFKTtBQeG5Gnb&j2KcS9bEGI\G/VT:W6'e4!3"r,A.s<Yck"3B,F:c\h2a+[jkn,_\!(cZ>SY#sEep8*V4$&Y-E9nU0uP
+%25]U"he3k+l("Pea'_odk2)q^ZY>X*Y5D-"^7#I+Xbn)nlJ]uL+LEg.D;Tm`qe7Ip>djWJ*3Pf[Y*fife7i!9F1ZW8jJdK*@q<CG
+%rCYpQYk1AMS![-g6ibgqpp)8<c#"RkR\LJuUm4%9OmIPaM8be7Rn;eMI=_OnL/+FagC<I<icSRpbf\;c;U'%bVlMeTn??e[E)`k,
+%jg'l3@(WZD:E1obk7OtC93:R-C*Kc4ib/tSRCA>]EmNj!:.=gS;>)%'YSj:f\o0_3U!B2tbY. at q[R4Dd7j</Q37.DdR[Pfn5Q>oD
+%b"dN?>;7`U%K[+87JTb?72DY!''kDK2MNUmD"q^WZ7$NZ2qQ%"=?C0Y-7;7R9q-N)Ji2>uq(W:mm41\ugV$9i%,BftGg@&u4bT[Z
+%9o>F#;-h'7cD5oe30m`eb%!+_9q at dCns_6odpQDuP8B]mO$L#"^n8L7rL6C]["7'r>8 at A)h48a&:TL?]Nq1t,b8"!CZ$3^@/HLBA
+%g\)!DjNr4;\M#M5GN[GP;pK]e>s0g]T;\akCk$IV]u3)p`[;(QC<'sj58$iRA[6CD6A*!/>G_"D9o+Tm8amAgaGSB]W&)&I=^,a!
+%O]0p,+1's8f92aAZ7F+OmqZR/rn[.Gf6=*dQ.$iuQ4qP+L<i60SUBTHO<VK%b4_r-Oi'fi-_Q6Agl6g'8gX^G!l.;i\%^c*q8;:S
+%DmG$%5ZIc2ZQd]:A'1+_U&kkCrZ_(^8XQ4D\K%mZ!1Z^eFQ[>O>FrWELRCM+N]7I_?-"BJ-',ipB<]G:1e"Q^q&O6F323)^0X,P/
+%Gj:dMH)t6d'BVj5lj5iiOAhZLi5`QuiE'IuRYrXX2q9:fQ^V9``6NR%d@;*YWR,+%6+nBVT+AnpCM'<RY/Jp;Vksig:sqhUK0Wu8
+%6KhZ6T*\X&."4-JDIfNuajbg9CN9dqCdm`'3&@*=Q[Q;Mo@"?9FV>]U[r1QN?=!f'X?Q"WB9_"E)l_ZNaV.4l[_I*p5=9Te1'Cd2
+%0o"<+"jZ:Op7S>N#.'pt38CUH#4u9uM/, at 33[kD9D,Z=u;p/@2:.-juedrtGC3$?]90<?q;[;2$ka`\`@fK at ueihDO3KoAef:"NH
+%jAQu*^md$,=l-Bc17^i+f.k6Nl6AU?Gt^N_JQ[bh#q4up,Yk7Dpg%.1'"%7t;)\)T#QG2!O^)QrdFK>[X+sodX\io>HZ,Z(2CoUc
+%0Bul#B<.;VQ($incfl'$-5]1Xk?+D-r(6g$\gC(3Mt-e31Q`2Ne`eU3j2>#iJj_Zs/*k)qC:>+NY7'(O;p_,e;DT:dksqU$M2nFk
+%P;Mjt;u$@AW(t"YbC3Wi=GZS,as,<2DQ:GS`kt"#CsV5Vfrm>Irnr`4PA?,^>/&LTP!$Kjh&,kN.UG($r[ksi;.'h/,dsGs>.pXf
+%1$m<B at 3T.?EdT-[n%#?\Wg]`&k?aEOQeEMBKYp4U7CjQ9L2CDs2Cg+`'6"qJM>Rh"b(`:ppM`YakM.2LJps>t4jTqk1K,*bX^N.l
+%XmA(g#(3E3roLl"?-7`3fii^POCqQ*jmE;K at A$J!5*;=L$6_0*FrYj:QUG,"9C<MKho4+cW2)WI*A*ZQbL=#+4n1a$,LHAe>Z<UQ
+%q'rm.N@&477rHA?nUl%OS'Peb@:?D3,M[IFWe%(67M at +%gT;K"%TppuHcQQa*;eI$$s$.aBd7#c;"acb+=:l'@]r(oK[eqdp%VCa
+%,.$k,M8(?lSnDFT<g'LD at B/l-?puC+o]Z-fNSq0,M*9!jiaa>HMF)GSgV*sISTZcfFBin5Mc_2u\\'_417(!+PVI5\NMKb9#nRfG
+%+dmG<_BuOi:8TLNknFU\^=-'tSmI%oJ&5Ws9G6Q)AIl80<*ZGT_fg4H2<H!'og[J>5:@UO8B2X@?H%0jonP!OKR__WCi'80.so,u
+%_kG3$&e1.j/t8D+X)htRMq1\M at AoH\aI?j7ENOZsR1s.^4I.gf,O_;)95AH38cr4WUlCUo:\c\sGCPu"IUL5hp7iqJk/\k3D=,hL
+%=o#ts,[nh=42#lc<4PZed&,Z+BXo[iY>**Hd]\iL"5r^2DUt=L1<<ml;>Nb2HEFFLK%XH2-%S<V:<KR2 at Eh:PFs&depsb,*&klX+
+%ainM.2[a'oelS?oSBV#W4;)XO_pO]FRph<p5P9_8YSEpRWl3>6R#2a&[hf#8oTGC3MINlbEYRIo:ZjekP-\K-9"kmX?Tf:GIi"]i
+%Xg+-7$"O>a5#-mQ>@ELMk8CH_T`pCD82BGcW=gHI0#&AC[LA-k=,K_r[&.BQa$6O4#?9fL&SWned/cT0![W,`(XH:\,iiEPRXIj.
+%/a=1nTOaVOg's&,9nr"ZRpNR!7%LU1TOG:Y;d]g&8;%e..&dWDBD_$sdZmNqORfZf%7s[CQk(a3$A)Q\\*tsuG:fL:ji=_;cI76+
+%Dh9lf&[7;)SC.WmX87dS0UQDK^g"t&=.oM%"0'&ZQZ';a3A5Q@:9$4E6L?&k1f0/["6AF(?;-g8 at G#@eZ?BP>7M<e,4\+.!SVRs&
+%f!DmR. at n2\.'T+r<n'4F;D`t6[MCR1Y=,5iY&M]o]^^U2OT971AZc7YF4Sa;_/VM]HS1Um#G8$b/^m;!RlMjc9O$P<D0P9TH`f],
+%QF'lnjViT'/Je6]D7*1B3o:^9?Dcp)ONY^^\r`=1a7aG5ko*$0>.I3r=.MZiC*97:.>D25H$MV3).dPV;8JcCn?;;I0WJ0r=]9_t
+%N<]taSi.na-m/A_:i0k(gepL_`bPmEG-Kk:$l7a2EDIT(,pDj^=dNbNm2Tm;Y>qWW$lum!/4O&a4BU%G0t_Q)cJ42*a5^BNlAtP6
+%fZrt/f.a0MQi)2hqqh7-"Y+fNnPFP"UG3aXkmt?D;m"W%K6"KP>-cT?IFQ.U'd`Wb<d\[tWA`t2]I=R.Y<T(;$emO-k'Pp0ht9$H
+%^_"FXD=8o"8rh:F+le]<TnMNT*jfTM6;uV%81kc0+S#GqFFqHVe0_.>=inDbm24WXCMq#$5E(!(UPu^`NS8mdmOAs:g<<p':5TmK
+%+4/a"kEsCe+PQBC"3MUca*<GOnO]IH?7m4<Z\_=WVQ:r-EaJ(`Or%E*:MkF59MfceC>\H?h,`t3NVKBiqOQ-Aq<sL?YIg'QA)WoB
+%i`V=UY+L(J$.nfZR*C;[lThSic at A3)J1'AFrb>Z/C:E)DkhYlq49rd@,b at j;YJ>nmO:.=/6d?-u+epe,BM8]_C6b$a`"X)@e:Rm-
+%h3'?g at mXjeBff2&cLBtFVoM6.IbWt/*J?)HVKhB/nW#KL']d2e=/AaP[4.,^R,`)o:sdLo74)"O/;'bScCBjn6(R?#V*7g+4F]C&
+%V-2'[$;/- at fcjcc`Q\V,[HF[M/%&_9KuaBk\^Q_g347@&SgJ+l,JX0BGc[B at M+,sZ`W6k:I+9eEqP8SS"9j''Kp4ai6qTL'cblEF
+%OHrIR*bSeS&<,/FC at CbeHAY9bd'-_:9[!d<dGX16:DNes$^HY;[=Fd6EkqR`qUTsO90!a#.#3i@,!#-Eq/WeY34C,Qa\t0+ZuiRf
+%:Ca^Vaonh]s1&Br3OiEB[G^)TBf*]9-\plU<33aS!2CZ0<5C]_K\:aL17+42lTbM.;*/LC_k*UFrQ0+,4%_.$-)a-gpTY51Ed!rI
+%RLK#GXO:qcf"?2N.LQc&*37RpQ<>(FI6,(K,>?cUH at 1*-l(!m9Q1sLajk;CU1tu5<^dJZE-dJ85R@:^bb\l2%_fVo4c]P\4XedDV
+%-N'H^^k\9&e\`GV[BeOXm3&L*2Ptl[?IHra]Tb at Zk#]cT`(q at K<f at 9m]uiY#RPIl"?Y<f2;_hQ=WmN)GJ\@^fgo7R$NsdQ8i8/P?
+%q9\YDW3tdnYbo55J"CG.""@.0!DRjef*M6 at WM4K)Nq[3h0o9*8l'ukeIJGP/F]_+_^5?Z(hsH14_g:k`66ZBbEpHu_Mu)1t,B=?1
+%HDVb\fW!TVQPIqjFO`so"[U9t0:P0?Y_qjGad+:qd<H0MTgG1NPTTNmHtX+$jQ6udj#+T5'2>4TA&ipA"oXRPo8f).a?6eal5VV%
+%Te:VY<qIL2b#a"8p!oN"Uch?*)=l+OI=hteCOiCOrS<h4OVHWDBDMW.a?c&DPgs6^E.!6`;O8]HH%*2neW$P*DbC4!:1k\]^$?A*
+%L6dpOpNnNg\dr$e'4'tUVS5UWON<lsHYm+^hSf#MJ,BqGDUC7q_1:@%ZINA9`3nc2j\o;TfWFT/4EeIskBZMG<P!0P+URq#>H-3f
+%:3,mm\$3Ss5gEaF_XC/@C]pM0>0]0-a)n'%-Ogo9G<ZuQg)0Q=>B8Rc+n`39V:"?nSp&5*6)q:)EjH(b#'/3@&bO?&fj3"WqatRM
+%FY]81$?^C9E[[D[Z'\$O$Rt2pFHB0#]%3:k=/,tUZmJE+ns*]?/*u*Qqr\M->3r5DVdDO9a>sRBJW8igGF\Ob1V$C10 at uY*$?>F6
+%6rZ6Ibp?>/hLrAi3JK7VrA=\e"d.uA&O\*$6"D(d$nBpXcg=JNYY[fim]k^M%/Yd#=1b[f(eF`VYnC3T:QA9"1ns'A"9 at SI05Rel
+%s'0A6'>W<XCrc35ra^TrTa"uP.HV9N;Rql9b]Vq5n15C$oP6B%\4m2)ZQ,OI8/@s-NLc*K\%_b)/mBM;N;:,e7(N$Q*"te(YI_J\
+%&&dRY$b%N>pVA2e6.CtM5kI+URcg005khX%^ei8P*I2H]_iG at .8'XB"Z>$ms&dX)@mcg</Ru-]>l3Nr9Q#*\h`L at C"LiAaDUTY:Y
+%%t6:l>G`*OVg!:3XVgp6bM3N#<6q7AoO%&Al,A^dP_HR(7&'0:i.c6&*p\1ef2u3oKWLC^4,#k)0LqMljkcJnrB!b1/SduP<ZRb%
+%/TQ&(7dO.lof\Wj!AdL"&Rn?-6:1oN?KRZ1,LiDc:b[@>Y at jDj:e*fhhShPuLtc^Z_DF="X6tU1o7[Hc)plGe2$#Qf6/'Nlh(9Wo
+%MeJL="C*c,0[#+;R,gt'j\EO$_=T#InL,^?gt$lBUnrTa at bisDqWS&\UqQ*4o]=3l]8G^GXgcn_HJ(u_c_0 at i0dY8eA<upa!o at KB
+%Yq`,F+tcM\ad#t9WX*rpI3VN'OJEcO0WjoaP7skYHiE3jn<kcc at X)uh?.iJUHub\O-R?(G7C3!n9j,_YM*>o?fkQOrS%P)/N&tV0
+%cooQ at 5):=,BD*o:a`;),QafQ<+^\M)=\m"?Wo@@J!%- at 21;WbQ.HE>/0dQ)]B9f%*)`0J[1kqU$j![pqe(s?&o2 at YL>uNJKrM3.e
+%PSX+h9>fTW2jVqZ at 3[o"."(jW(Hk;QJ!\0B6GE]bjqSKr at J=_Hh_V>^&\H\fi2 at XS8h>t'"aSfH:j.Qh!bZS:2)8:PUtA>A$c'9U
+%4u^5OU.XfVEg_m*aC`fVQ$#W@^"Z_)b5L2m[#YUlA^Yu7GNj$(P`a?W)UQ%ACX,%IPN$%K_^(OAp+LMen-Q7_aA;@c_hpN_[n^jr
+%ce:e$eiS60Db<TjB[etaNmTd!V_+<g&+lI3=HG/c(\I7Rp@?ENLim$-<&o5O>l(L.OJj7_Mj^1Ent\s+Sm7U(arUHB%._ZV0K`8T
+%P6Vtd49?J.rdOEep[`EO\3b[KkBX8kd8RsVZ`]4J\-_(,O<L2XkP<P0+R<F5miljci[][)81YZ>*th;_M4RHqc<'mpTSTDANmDbo
+%*Cnp9GWqrJL\$ubE.V-)=J.Z?g0BGuh5laJP>+NH?)s-i10Lpe(SlRTHl.Echj>]&N=_+FJ>`Z>nWLm\W-pCN50rIooi(jrG:pDq
+%J^MCanlI)^9[M.h%NDLcqYf4l#(_&MWO%b#3<7cc\J(k_PYYc(M7gkOI<GiQD#0"TfQiF\>M.RjD(F_BKFfa?/&F1Ng"A>8aH7bb
+%WUO2d=,_f]+1(B<iJSi!bu>VJhOB+B7qcP#_fmeYki-BG/9p;N(A\0(B+c:@CPf4?Z$-Pfe-8,I=$k`?HVW6R2ssl$A4qkML0I7,
+%,Lob+cQP5],8IATd*-Yp[UkkIK[W\JWc0FQPC,6*:%=_U'pP+;^ZYT>)A*mZ*$b7-ig:nO?S")Q=X!3_?[XQh1WsXY.9?m=>mhFe
+%pHY\<!o:kl"uBB]R._0Tc8-!8:[r5k)E;7&\b3?6WHU79%86XJZqJQ&H?VTO2<Jb[IMK!L`0%B.j%3Y=5"o2:FO];e-[htfC25MK
+%P?.U?r2Jf7Uu.[O9SL/6[q>ZjUmsb5s%+M>c1`*1E=k452_J4uj0R:alg3n<U3ph3qe<+m*TlE\enZm+!/$[\,(712N_M"J[FsV&
+%P9l+ka)sb(A1dsnhLn[^?jEm at UIa$A?D"BM:nJLgTF5^[V'qbTatCk$,P!1W%?b<`:IM9_Wh^'TkK0L8dkKOf^f8OOJAWM<l)/0O
+%WQ/:^3k])`8A7ssm\t33dUQqLq?4)-<XD*=d%?l@"m%,r5BR:+[?RRL.$U(nfWrR[-j\rE0o!G6.hhM]Zu<A*!iPKds)Qjd[67&-
+%O2&.$oY-`pR^"[?qNZH3Dq_9=QZMrLAK4,4:.c)i*R>7imd&Iu+0"$f\'/tHga*8]-=m at S*4S;TQ$W4nb`EL1-/T?2&'B.l(_]6'
+%l8C)Rnl`2TNdSH,"C#D4YRQU1*Vb<a`_ag"VX4*k/Y=YO3Q[c'*?c'Qqn9V0GJZDg!Xe-2%BeC.>>g,fiE>PAD4+Kj-B8Csc+fWf
+%23-Q\28F7&hP[LSEm-"AA&D at b",r8EFkU"W/Nr9%R0[9I(/8<B\,\_QbQ%Z]Fo-A0/j at M'.?('?+2PI0U#qi2K'T"Cf>PANS_,"N
+%T=j?A\[ukd#tD#Y'):BN"7,U2YcXGVS$JSNmuuo?NsA,,I!XJs]tC\;fA_KAdM/]NZO`Ufgg-(Vn'Z;VjHlp>FF"$im".Bj;X.M"
+%BR`?_W=X6;lIush3iR2>4hp5MFCZe`OM+L\^Ibk.K1sM5,[J-Y\YhhaN!j\lo$M&B.l^sGM5lDZF9=<]*[Z!F.grMf%9AU_#tKk[
+%1'S+lhu$')^79ej(JFf#^238jD!8=9l2N:@)p4i-\, at 3?Q?m\^'_;DrimsZ1[5+XdQJ-ufDO#\M[A?r/hM6AKJh9 at FNS%S^C(>Af
+%=<]VbR4Cj8WUl=fcX_uWUMi0c"ca*L^r">uO at O.$D3FC@^d(GZ*(%GWC:p_nKrRJ1W&=%SN#,-jr_\eb9^4_C"LJ$-cZ#cl1='I&
+%nmBiSGF9)8pj0V!b(K-_$<<`A,rCp8J*fdn/R^YpiMP!mgT)D\1lb`nb`_FY)EN_+S.u/:77p;l@'Tp+P5]YZg>mf2FsP/W)gn_+
+%^KW1W>kEC%Gssl+Y!NAWE&cdm7\AI2n.BVbh&I]"Z[$bkEhaTH;I`GSI)%P!,k0dePni2b"s]l&#/;o#8VCQmJL1/,6C6roq`8m5
+%4XmH]I,S2aF*\e0P[BPg1\g7p#UZ2DFA3+!/d':mQ7("ck7MFKf74BFLr%H08tb;NA*+jY=-G`g%%0CnrkV+PjaYWj"7fV&6kVmi
+%QO+)&)op$5]LSD>go<G%]),$[cM+H^Y7#"+h7Q,CdDrm.!%N*unl6(3`gkH=&fCCHI`Wrd(S/m3maPGB>;n,- at p7)&^a9m9cKr.I
+%`0VlWD1ck7ruJWPAXT,[N6VKI8hh.)onGKuXXoh"%q5!,Q..<P[NH2:7RuNMX-HSCF4=pTkCYl4ic55!aK9s+>V17o_&dk%<-9fS
+%D"e5K+D\lPCWfZ0W<s]QE(P)iIX]mr]$u6%_Pk^c/SCa!?oKth*cL>57\"9hL<HWH2;uq1&VfQ:][TH>_,KCig:eL7S4e3X@]rg"
+%I_h6%oO at p@Te*`63O'!of'[?%QBmj;Qdus[jhYV3mrpc-*%En9Qf4.?fE.3,AeU>EU*e>P'V+AX-]dH+V,V$Tcuc1r1c+J6GZ-$P
+%Y>YkZl(V48m!_7!W;q/5Ta?)73NX?Y2Eh1<dRQ"=RS]pj[J90AAME_Af=qN=D)q.DC+F$nK$'/=q<$:spq-M<*N+'0?3+6.EUI>I
+%KQu9pbC_6FP+:W3Ir_:epGU<R"[^BId>0[f4%pM/(=>KC2XaT6Z?0Htg.K)8m?g"\IVIP:o?f.U"rP2jCHa2fQZEK<Di<]m;Rcc)
+%X&"!c.kRR$?D9m6T#-7LgHh%he??[u*1F6=Jd_JI-cKLWmttYB(\u<]P%k`eJ at e!GR*80jeWBm;9R<j_Z++$<Y<A!cp9i+(-D,hY
+%A2Rq)AMc=2h at o>L9 at .T%qn:^<%Mm5.*'lp(TQn3>qX(gl5tCcEYJ%N,"KG`M$lFSu$#nrH/:69<3_$cS$:8]O at +9&Lk;!PnQhoZ^
+%cZNR^a*BpAkh#D[aN;':T6+&Y;aFF2Zm7Of$N/D&C'ueRpY^J9p%kGSZ;C^@jHD/Pj[QPgU`s]V]TZ.31U65.m!DFc!<8EAbq_J[
+%^2"(BIOCI/3/s/Zp=Kk6ZmL*e\!]qN+>MKn+k&kEo5ThWJ<n-bn/90K8a<ja*AJjd,#,*Y!tg7T48Z(s9`BIj>#2l2q:rO at 3$*R>
+%8:8-E>rWSaXnu*)pNi"s;q\Y0)<JDG,+cGcGMiC+T4G5FqTH>%2nq2UF$O'W<"4#Bg*Y:Bi*K<BfqtU6aRW_%$WHOnYMla0o&TnZ
+%WA(9l)42l87]@+_ at H<3A6GN>*dj[oV\*$0B-4rTf[)NK61HG2oOZ[hld28)j!oH(FFSU41=S6"l-UCa,RF at _4Wa'/"QJfL6?VXp3
+%IK\M+)Ll:;.-(uJ9I<:Fpg1K:/"qQGh/I-R(T]b,mKWi21JLaIKN8a/P"t<Ycpd9+9j:*h7]D&!iu)jOcUo?`i7qPnJn838FjMmb
+%f_jl^>8g_4GsL9kit8Vh<#Z,pQ!#Y=!%)tt.A(;MTDJZlZ-55T;]aSWZ#&h7#R$!^F?l-R4](,pJ9h4j0<$og6Ep0?'cl4Yk?gg"
+%8<.6GgJ6dt*T8!-/VW&TVStS[F/n_8$'%a[X4iu(,sS6i8F=oDp*?mi>bXnT["-8fgU[5uf<o>%[tnjANFD;Y=QsJZ1(pPE3r..p
+%I>?Kr:0dp4n/ddsMfi4VFldB--,Ys0Qe^1%(H'0L*YFC4_s"Q4RZ-o%0$M.t:rrg9>lEj'g)!I,J$8[`4/J*#\Ys3.$!;.B5d3!=
+%hun5bLNF47XttOoT's>?CC(p at ENnQN>;gt_ZbE(A>q`&_&+e5^nhTmTa%Z^r(Rsbd%d3EE7l-)S+)/63hr`44 at ZreV+,AoC)]/rG
+%dK#dQKQa?R`kk.8]ch'pgrFNKd8OtaNJSt?Hc]hOPF%TaPW3Y3=K_PAe\dg])9SE_jC4Bb5XiNX8I,Wd"9?bp%RrDfk7?p'hHReI
+%6-W1'O^Q5%),C?1JP_Qt.(2lniHj>uWt#1M8RVW,H)h7:JEsH^$l[02I?f3N.sO:0,QWQ$*anSIFX<L3G3#QEl>0]0:=bJJc-&n5
+%JK=c`?m-J_.:,f?F[!+u+XsuKVNE5r81kk,gA<s%cLSsXgoftd1-,"8_7#oRk1D"7%h;`Kj-jHP=:?8_#(8.*Q%OY/oJB4tPsg3p
+%NdSao8N@;dQCoEV-pKfg2rXc%p)!mE4+18dd(/sfY&=AKlJqdTX0PoNXAc<`%$`Ab9j'\M1)6Dm\=-m^a*KVO3Hb[o3MUgRN!cO&
+%%co;8C<:ZjUa-,.)OJmm06d8\D%bS:7(Z..eg.Gb315Y^L_OS6SKB?ijRk)>Is_dpHD%dNp7>0ab=b5l+'XgW_(4AHHTl9Y&V<[Y
+%odnTUT4ohTq)c!o;Xbtq*Bm(gr^Q*'#4gu#6s2\+`ljH<GV^&YYNpZB>:1_mAGVfhp)sGpqD;d3XHl8qEfOSETDT^J'f.JYSFkqB
+%>6kKN1?>f,AY>Q`*9\)F7>l9O1+ at 78Jm+Q6K;<@T4L$m=Mr%V;T*;Pb73>nP(=cpn4q4uRX\Os=``h<tM(u6<247:M05i^fkC/3u
+%g"[`i3`oigbMBG4(SnI3n6Di!dX_sL+V3WO;HfJ(=5jMi5;M$^nj/rBi<5TQO],krI\Td8XooVW!&<l$pW'tE-<I%$TEWT$-g3Qu
+%jYZepqK[Ng1P,UkDgLNh5*)O?[Z/+PT[I,C)9E$.>O'A7:S3:*SM&;?(R2_$qAg"(F":0=g;YXd`7M-O]-K<(cS at I5R.(D at .r.8Q
+%"nt4DUcFf&7n1EbnN)uITZQR3Z\?JV<B\R7PUF-n@>!.r"L4c3a-fOK[l()[EC at S!h at i6YZF8#YW1B*DM:"@K%Cp0lQIP3<K`oVd
+%)W3T!FWRXjc2NFb6p_`q&79PB_.goF]8VD2.adhY6_q1"F$&C,!T5 at 0ms_P%eior#Qsb`t]]&&88Z$)o.\NJkd at YG)TeB:>IVMkr
+%5H3gfIK:Bd?><[H_gZ/mgNp+<Hqd$m,o/d6i1Q7S?[iC0oHL;XTcF+&g7,ZJ7Y^4<bU+FbMaD;3At$pF8/l!YpI+N^HSG-gS$-"0
+%D^d&M^Z)9S],1q8q$5)b]3TqIG3P,sSW[RJ>@.D)pq2pfK%,rbpu at oU/+8WsgYL at ha5uXb-kei]YOMDT(Hf%\%NN%(4#\B$hP%#g
+%SqM]V*TWIDbL*Ci(=Lf. at f&=Js*IOW[iF9-EUH.C`#tg.W_%2Q,'-_oF..9dXTqRu7Zb7+iq-/7-M1RiJG,*)2r)&$2cGsRoeJ\-
+%LVS`hTJiGhVs3/nc*Z!#0A:*tZODt,[1I/]<KSEEPMT?UB703F+s5,kG;.Z6f<1N)jT\iB\cDUQ4jqZbp\kjo5sbT_IdEqrZBH_@
+%I`F at Sm#sU`_[1dcm=!-Bd^V+,U3.VnhA`:r]!)Q>r5p^?-1JgX-ob`"&XOJJ- at Zu7madQHS*4?'_W)DuZP+s\aDu(B0dCi1d5OdF
+%:%#%G:&FF$P2Viu,RT.&`Ej3uOD&>Z0A&'sgmXS*O/;j+$gcj/7)XY^hY;k"12QqA>.PeF6;l:M at 3i+E0>m7*0RDm`]Ocu55>%u"
+%Qldd[`4<?&Foje`9tuZ&fYG&$`!"0qIYI$sr at 7@DY=?V;"tD2d#o2KGGTo*aoMh2_D5Z^(;S1't1d&HoF^#5A?LK=s1mC,3Lj'Ko
+%>Id$O#qa_*N1dHRgIT-r.)IkknLA5ep'IZ-+Jd^PloHNWh-PLBnMr8&]X4uMpmhZ;Kq,UT2kedDe2`siKmABZ.8d8TXQ3p\oK!Uh
+%O-pA.l;ZkEB!>!AOD\bUVk+cml.WT@/B)cT!RoJp^rsE\Se7uf%*W>tkdbJQY&+o=O@`**8&0>c:l8XrhapK[QPp#j(aU$/BVm$Z
+%Uk[H98ZWc9`h/$3WjP1]aLW"n&H?oQZohBWP5=kE1[9Cuhjk0WFkR<G^Mf!*PCThNIJ8_P4Q6)l0HhO5o&%R2]9>Z54)F3]*/9cl
+%q0[b^8^'^j^Zq3 at nsUSM1HFiK.aM.BE`Z"Y1*(b0T:-j]1Jns^bH*pp'F-SSn6/[h;6:@,>Ij_DJBgt<TkDi*fe1i_JJa5.)nXOZ
+%*;_d07qV[t9)(, at hnubt9?V5OWJ[]%R at mH1G*Fd>W1>t1%okMW%+NMXE?:'N;M.1-oB)n%l7i(XmB:Xu*N#LU=kO_aA,nps6*6GC
+%'.Lr,h4/BHi$Dqu6lP8h^.^W[gs6(FJsPh[0pqEjO27Euj:S5a`!\0(SoeSA0YK\mhH1utMj!:hB5#ol]fYaEJ3U5)H#+Tio1;_o
+%-Y;gP/B,7^Zes8$:DJ!Bo?:Q>%Ka>,ORp.-<`o^;qLtHmpS4W3B3DF&jb$t at 4*V;Y^<ea?Lb8:rS&]_-F\pI:\/uAqIPdF)[ZtR"
+%E.T/W[gp?Wc=SH=+lOb4X*ZCKD(XuHYfH:6pM"kGD5@,$*,k5VGY9i?TS/TcRP[Eq,?K6W1c([ecAmEp,3EA&r<NR5!H,a)NAfTL
+%NS12KURke]C'Q2VoCL=$W+t*+S^\5,;QGVefcn.N/toeJDpsA(qKbtdh&]P!Q36_VpKHW\]1s08bukC?NH',NhXe%N^Wr;"GpoBQ
+%?0mg"c7A[X*%M=:6s/6,7Vli^$c3o3_*#U_\M1O;%H^:LIbTuGH9oh&d:2%@/Ou5k,[]F-Q"PIh2+^FH[(7g)q+8LmL$mH>&!u6A
+%jZPkhbctaaP at rVs=Q\d8hc\a?R[b!//.2/a;f.e3)(^l`b,>*i?J;`2LgTN`"+)fa9*[J\-cH6X-*8'!fdXb0NE=D8Eg;tEnBD"i
+%kmW/$2mmPE*K*N.4d*2XO=(3LhrM at T.FjTNJqG+%F!C4,^+jK[p42#\?,N&Sg:ML8]YjF08b7Kn6+!OYN*N*+dalD<8A%YB#e$U"
+%ncmN]G##D"NoN!hY8ZJg0?Q[C#u1_XP)*d0Q9;cY3/!-0)?%<8,.^2'_/[mQd_[llFWPEgps*F0",W2H(R at Rp^#5>oK^rhDE8Dri
+%U*-DBO:)Je9:Sc)ZNoVt+FWbQ10(3^:RDHu-)S^Im1=tfn68(j*p'lqhGOg_)hq]+XEd-K]m&bDVkY:%nceCPC=%fR>YJ#ig<`]$
+%'[@Z>R=u_SU=GJ)*IrHD.&2<o5Y&0/X`Q]$AL$ZKd!duBSpkXo?D6T*b9f_<TK3W<s50G7/^a%k'MG^%S at 0);kR[3I0/.fEQRE%i
+%n$I[-.Yk&dFWPNN1Js;gWV8E#-$#ba*L6^E*<\Zt'86;<SqOF7TY>lNX,h>8;^EW1"sS)Fp3ro%oTS0BNLdj>Nocc-. at K9QjIanF
+%Am)m-O*lSaF.<1!bRBYJ#u:FpIPN%SA'/_J^A2T29j3P=ai/G!@s9;.hFY72AnY[t[FgZ0Q3.d(ldm(qa@)\b#]7U6A6'c(rGKTs
+%j7Oo`L33+Zj&"7,+pUP#WV5]CC#RVGCikcsTYQ3&'9:3agXbFA?:EA"kE[-ZPb<ujdW`[39!i5YndQqL"<@`@nGNaO4%3qGPS-^u
+%KY6Q9Ho_2:m3ZVCn!UYq?3Itao03Q`DdmH(a3'Iu!X"RsTN6FYS1/7NdcOF+D#[BBXau#Y;E)`F`[Ur31C.FbIf3Ad:5 at p+5;!LG
+%4$bLCXh_WX!.0p]aWY<YSY4Y"P'Dr0gO^(1#)4)IT-Rg3Ad6E1PYTn#8_$9DROZ<+a*F7W`,?=(;o)A]4U/ZCRp"g6at%]`]02NZ
+%+,Q](IXG[*W*EX2V=Ro]]3[ObNNR>ImAafO%%/M^.#BotHq=bC!ZWU:XLP6MAhLell(=7-I#U8EADQ#cFHOP2M^%@;!4lmso_)Q=
+%NH?,Oqbp)61QSS.BI&+!:m.<E:.5Yai;8p`h:FZ$9<jTiZjc"X`"W:39'/]sh+;54,KFVfHC"BuWL%W2rK>L^B!m51:Se>_F/`_/
+%`^^:_5p9O!ISI-g<6uaXg9<4HJOQX9XnJ(8ETP9NKUQd3Ui&D0D'oQGqYg7(B.Fr98:8(PDFY=Y0iu9<k5CAI(dM3JVY,:#FB'OH
+%)qj%U^U<>ffC^S2nn5hZF^%3o(%!lF94'/6i]:"2D at 2C+P9]>$F-8Yb6`5/:8m?@PF8^,OVUI!CN1>jf[q7qgI[DZ40 at F\_bBH_O
+%+*]*bNs"/P]Y[1$d34c,N0ZCeA&+c7AgdM#P"VPsTQ-8FIB#q\*[n-3KP?L\g/5#O8#bW!O/+nHe77fe+kUB3+V. at eg*6',2LK+)
+%e(iCLVGH)(`NZU9J.WpsOhNlUHta:'m[JB7(SiHRAYQuG0!V'm0XdVQj9*$W>3tRF'/Qd58jVCNBtHV(VX/D.m]#"?mM)tPJf^%9
+%-/^)Jjc9)3RZD=Qrb7a_hg/u4N1dM@*83DiipW>K984Qc7FH*QJ\*`IKn.b(oJs3BZ(]kCApQYa\%.E^T1XQ'NYCAjg25H`jCdLA
+%FYU9Al>Dl/!o(fB%nrT8&3SH2;G5G at I;(6BO669)6_+8TJRl)#`pEpqGXIe>"XI_ti#='u4i[(@*r_fuFh)\+T/uoU#$\f9Np#q*
+%61 at P[J\Z<!4Sa6\(flehP=Jht8cIYQjDDOhZ6V'L%.Z,-os$E?S]dn`Os4FF+HV?m`5&W>iU"\@3]IP096dP8fM(a\Jp%J81.nP+
+%F2Z)7+41nZQqX"31]0Y\HAHdn"1Mp.8,d8/-(ru-6.=$O7?+n+5BHsjND+DLX67*r7"BkgFMcYq0[?q12M-_uq=CJ,3\;dfW"c"&
+%YR9:fUfL7qM289ZS#[EQ&okc/G,*Tq[^g,(69"q7HKM$6F2`1%)nP2i.!I<QYSt]u",$)l[Fnoa-]9-OhDA.8/`rs)Vjjt)iXC8b
+%;aZEF`]Y-ZFXqLuGNNDcXX?UA<Elm=fO9]7H\d1Oib5&JRe0mbXV.&u1>S*hMBntp;D6m-M*#^XS at d>@m\gF8GrYW!*5D=3:m="]
+%+tr<_4]bHCGcp/J??pUaOs(+3UaS9dC.Rb&>F)g1Z[>c<D'YOSRBW!/Y.81LXuCJR>@(/u at S%&X[;QNd]d6V\XH=@HkoQ9,KfhE(
+%&MRI.m?l at WO`HsNUQEAmQo^$n]sK)2WcL.F:(4c?o3'gfCVQ(Y+.LCugQZcln#1`u;AHPcJsE5;.e\>sCmn:4_6ac*bY\\dHUrr)
+%_p8c;bl<(ah.].$UL]?>W#PAVOj2@#hIB2QP/:BUNTVRh9miDMC=fi'TS9`i_BuIoAY1`cGMlU7ke/POkF[.WM&EqoH(gd4`3NcA
+%k,*1Z]NukDP\qRYS/Q3,'#K8,eg'ibc=S]\O2]OaXdb,-CmPhh&g\:uo$p"kPQ0^dP2i2]R_Y/CIW"/d1s,Q8a7 at Ce1@s[ED71DX
+%-g+Yl'#^nCeN'DtZID'0`[O\FZ*u;bg:%SURa9W2>#a?Yh,kS\WlmAH[@;:OBKN^KSm^f:J/e-t2mb?pU!ncSR0Q+u5Qr&#&obl[
+%](><q6%@@LgFi]N=mtP-+1\1uLd^)4<*p'fh#>@%:.bhO%32&eCJ-8Z<rV:!.8,3ZeEkJmZQ8$3T#,VAYn;AU<9GWG6'F6U66;=m
+%8/KV<$X>&6Zq_&N_]6SR`tWrk,)3(77Gb at Z0a7<5lH-`1$Z(XT8Y3Nt;S"T0njo2"J$n@)"i-<Zi2]rN/F8Pk!P&-O<.O=HCQaj0
+%$1+p at 8E0(oL1G6q5V5JUYV#*e2o@#tg:/?>6q0';aWR<G\HIP4(5$f\ShH@)]<nZmhg3Wd4n/#;EmHhfkq1e\L>#CBC1lS8jJuRf
+%K(iCoRWRlLU"ioNU=W1Z0oojOUW$o-[0\J(2G&@P\in$qP7'q"4_6R73CWm:LL[$8IiD^X*.MdJ;;><^B#j at Kc,]]s9ER,[ApIBE
+%!ZoHT>IU9K1C-a(-11?_F+U=3.uCtDZO]b`34taQjl5HDe;@_A"e>dlDoA8HVWZ/,#ITdR.;3s*b'AQ)SN8sF$2P3Ob/PajOSo3L
+%_o@,gaue$Bh3Gs43>9^@?oUrfg.Il@=(BBqRKE\jmh\P^_ at 2""e-mc[k/U.QU$I&5hu!?9NM_0==XRCq=\]A(M+X[!rGqPacHY?p
+%Y11KCIO)*f)q8+OC4`KEkP?+-;JIh3eh&L")1DTH3c<9H;i9=@gCgst$X5E2C)[+T_?<>,n(T37a-uE_i%W\`k>62n\0[:Y2S3fS
+%Z-ZV*aI\P')8Y%*oR5nrPDR4`LBU@;)S=n at pBJ.i#Ce;R9E-//0e'["occcm1k01k3-Mk*q7-`62cZ0.I4E^no&_M[>]]odMs]U$
+%QhQq6K/pRK?mP at f*n*cg at C?$<%e@=`Qa2fFR8[1.qj,0e+IJgY;H'*i*M'KJf%n[j2B/CORJ*GFEtGg6olfgR;-?\KUjh=F9l_Sr
+%N#1$0OAj5N#4'`;Zi='R6'J],pNWf)Pm/ZWAE,qVB-XUN*0_:U=oA/=YAaBYNKi]cX_:Kk`&CHEF>M(=YDg$7 at lJBW&R?)U4q;Ei
+%`LGGIm at V>p@,44W@?Ac>5b[Eif5_@[eQUVI6mO.T%mi2O<1gGESZ&fmB2U6X6bhJgJ;Udb=]aC(0MtBaZR`S9[B_F&[k_RN4)^4R
+%/oqFR2fi90+2@!_-\HV`@tQpsRKLG/d.7&lAOQN;NZ*+?a'2GML-R##'#"R5(\=kRj]j#sTO?)$gh"$S.X/(URK0%IKKEV(6-*Ys
+%T7VQQDJnK=,t[+Ob!M>?M8bm?aH(uQ-L7i#BbXFL-2=P6je=c!e+&]n_E?bHUa4aFD1NDNM$[VC7WDHB4_an)"s3""lghCAOGfqr
+%%CWX at H[N at Gb07HE*/0U^MS`?",S.`A9loYRMd@;CMf)kH^dXmn.>#B'4l`DtStI)<d\lJXWWS&&q!_s<cg#RQ[[eM4Alc[1J-/UY
+%COOdZT<dsYISsZNAZs9$iLNk2V^=?D?Y3#dBj'#XGZppsFf#;7W3[OD/giA5W$hgnWeLAB:BOVU;RR\'=hf5DfRH[hapID^3>8mH
+%F0`-ebY;T!Q>DZbabHC>iLtR-!PqN9n>R(fP=\`Vd?+2A'BU#c at H1Ks8.'H>iqfdTf\I2 at d*/_:=(Xf#"/HB-Sc\4NfJ(Zn3je*d
+%c2LS%7/lO_kER8l1;n4YAQ(@kDkJ(WPEtP,lr.A<9rORFRkb]GQ4EZfD<87fs45q[-fIB7T,hk='`)t\aGFoo_sM?`q]ghVg4L3S
+%k>8Y)$frKu4uE5FL\m669;s at 9XX)pZad$C<9gN\YRiL1^S[QXHRO(Y5V_u/<^l;T,lG/C[;\EraE8p`d4Yn)&'hAeh?f-'5;B;4s
+%&d>je\cT at .pO%XOP#mpPS;=E,M2*@$Mr+*A"(:a4;t>m=j&rd&\?$uXn34Z!R-(i$b#TFcWfo5X]EdQ`4n0c35E"<H8fL'3m at -J>
+%Ut!mu99Ki(Nn#aS;O/k@`LiDtg'8lLb%kIJUrkpY-WOVO39kPnZ[F?`q&l2ej5i"$Q#^l9>b=?n4t-b[9;e8Dp62G`HSMBmp4UQ`
+%j<]mP#^Wa1F*!>Hg4OrmfQ3tO_)fI;%7\YQ\.c0L=p=3]RbKAA9uErcN4/uuI at O`ba(31J:+e5go:Y)8U;D'i)GY7nLDj;nN?MST
+%'0Fl;T,u'te'QG^9hg!D?U+?M@?jViJ-fQHXgaQ^Jsoa'_TDq4R&4Ho&#hd$QA@<n%Q&\=XcM(P:?@clp8K;sPE>T"o1s5:":aEs
+%II;-5b[4g<&HNq(!@_ at us"07RA2fB6M::K9X'K;&Sl>\fD3A\L#C"F,I*O<R at g.5:RWskt$?XhiSGGr"P%&7S?'9#44#8 at WRb[t]
+%>!4gme,%rri%o?7fdq^&DpJ)DHg2u09UT\BO(@UZcIn?'??-2)>$9]']t)0ErmW.2o4NYHd/H`tk(@t-SCLlu_0@)05;+p>#1UI0
+%?K]H<S"\?N$ij$D=>L6fA'b=uB*8qRj_'!<F'@WK;UE`Z'e'a)jOQs_'Xl`hY-pY6S"rY.[\,A.csor<njHQT68Yh*c!]U_JCFn,
+%S/5AJek*V3LO:29oAG_Tpcl!V1+(e?&uHUChYY^2>p3c*8d8a7-aH36/>E1QL?0B@>Stc\7r/q\fB,le]. at +hjNopO=&RF?`%tuW
+%P<=k3]d>gWDrG.eNC6Ya"WJcNjf=LB0=W\3Q'PnN/5EhNWCJ#\.9$4&pc+n\kLS.L1YJ9CSL87YgC\]O=5HcU\!=3[Pt)B=<qMl>
+%[@KlU.B@==F?@9#$nf?M)T'M!,[e'X%c[C@'7*ukonY``0;q/1-$L[hQXfgbCV^lYb!KX0,bK-Nd;R5%4P.K\ZcKH at _Wgl!@%]fH
+%M$1_14kl.SW!VH0:Q@*Kc5o5/j?_6r>ete6/+69'`T(Zb+Q^SOnuMT->'EWO(ZGbTX\rC;Ha;,8D_>th)Xl]IBs-q#>"OS.eDeu:
+%mL&<D315/7d'^'@Cd%3O#RPOBRLo;KR`9r^GhGO(+oC at GjTP"*<bK^EmCG*-*:=ItU3;aj3-5$!Ps1&k9L*^#5NY`m,?@m0_'(_B
+%0lHD8 at o-$O,m/Nl,,7&bM_qqejdYG`>.I6"fN4ee.<[$tVD.YhB'-_B34C1^,d/M>i:2<klX<r^4As[C4R(,D^>.kJBZf^3DZq"p
+%Wp-F-HQ06:Deb_lOd'gBhS=(!FfJL0LeJYHQ?T6RHO'J]>TmH at R!H,QA]C7!],um2/lmKp/le#/?\c>K7_&;Z`*k*di0[0bF-dLS
+%)4^pNk$7A:/*Z;OdZ"UQ7R,:lC&WN3mu&gar at fDj;N(e6T?/m=@Y78>#sb-T]JH7YL[h,%I'urpgcDn3W$B.,#oopbVZPmo/C(kT
+%cOoTC`"RgoH^4X8XuhV_4K@(/"=\9*d#3K]!8<H91?\Y-2;5C8>*(C4A.I3?Dj64XSK)XF86!a8JV]Nh$cK02fUTRg17&qanAA3%
+%Ci"*=9Y!Yu.>QhYm(H=D.9E%;%!#Ju->.2UbobM3>tOadbh`HUP-FO4o$(k8U*B@/.MMej&)@7DgQ$_u^Om8<JBh^dB>;/&4qL/J
+%i7C"i.2$gW7-5$@KNZo"f)F=W"msZH,YNR=n&9dt45!S.W5J:#;00'H22\6]3uH0&?OB1o4iq41RTb^*#0!ce:,5E1ebGL#1@&eJ
+%b++-USg9<9bD'pY)8u(1[!&n[Dr8+XZ_fRD6aIDbp_'4j2K-c8(+*D&D3'f\-P4g[N*"brkB?IX>L23H0YL0Cm+5Djg&(\h<2r'o
+%E]Ju[Bm/LO>>FO?TZLhbQgPj`Y32AHhs.n4jk"RfPK(n#rd+('N`Tu0 at p%&'AL4mL%nZt.nQE=7o<[Nh;f:A.NLS<X;dcu at Q4cc/
+%iJ6TdS/.kS4;6U%Fj`L4bbT,k#"eI9g,4,5#%0c?N[g<X`9T/f(1`l!l4Z1`+)r[^()t4Pea'YH3NY2oTn>#eKL]`b.23?<JUHO*
+%)HP6aFk4[l;U6-7=[OiX5S.).<1aDd4aH3Qce8,'j%^9&DM]j6A&^fDmok[,Cf:sc9S$Yql7>m at Zn/;rI_#+:'Bjm=`o'FUE61O>
+%WLm at G@o:Xk\):#UASH8pJBsDh9FS-X[ecDc-cP6S'@O)!(XGU8IrS/,-6O?K$S`hKL6I.U[sJPZ0djJl^d<@'ZKl5^-XR]:ZgWMi
+%3Q%OUeUqH[qM+NY*[g'#mC9D7<iU`Xek;W=[Afb[C?rtKr&CX)DKOs'`Yt[R*g>A.;#/%m+>9V;UsZn%aJfcAlAZDgYX@,%f.jfN
+%U#B.!hW+n.[g$&h3.hU8h*AL32eB44hs6Fa^`>s=OG,Hqlq:nO<AI"F@'4!*CeLa5aqVQ]]&G5_,*eu'ZlTOhdo^AYarT?sOHkVH
+%3N=2a,)qFK2`fGHXIL>b)Ch;K at .'8$=tb<h$k7e!q.!l8lEVbW0&#lA#.^(dQn1WPJ_`D!CU%)/V)boo+h>2+3(X.1TkgCV_U3$>
+%PEJ8Eb:ddXbCRqJ$bTZ]a,r$FZUA&BEFT[KP1UF^7P:M\s-:\!-(hH.`a$jQ_.fao7r3s4LF)Z1mj19a6\KQAc=ENZ26KYL6HRp;
+%m@(HbWPkrMn`qDY%M5MA9EJmlkC\nD=X4d^Y9Vq%2L>OJn!dRLoQ]S]IZs>Q[n&hpROLpN!C*?=.h;tI3QaJ:]dN^8n,2CIk<rh/
+%,Z9oc4<&G=H`9eBU,(5kk>k7HKr3l+)+3%Ial2!<.1R,6b/QUri[&[Y%%Dn=qN>TeRNJ>olrJ*X[#K4/:/uVEDZU,eXrH!*1C`C]
+%C(\a+mq.PqZ.=B;b3L(u7QebGlRCuLV$6tG#"&;Ei8u0(J$?T*e-Q`t*&[nFei%*GBg?T;I"K7sheHX$-#9,&B?`;-cq_Xl at X5_V
+%>5O=7H7<WMnUhEgK&r>c`hn+:8iOAEJ`WG8X8-9 at gaJtk(0HIGqDp\-XX3)^QU'iM?3ehP^k,>uM71&!HT/pta+M.)o]O9ig3*sV
+%/$hqj>l>.<c!'JZ"EUFeb6;K05kf&^9>ap]aYL]k)a019rtI?jP\eo1gAN7i<Agds[l(jd0N+amM^GU=YZEt#roRs1*a4$E:!dqM
+%-cscm50JEmq($$peFe$GV-24!BVRH_ku)Rc2eu(JIWZ/99iq<86SI9S:YrEoJXDgSA%/n:=EE0Da>"[9*eLBD=9bC6'N&!q,\RF-
+%jC<=Yq(Gf=/tNB:;UdV$$@C=4[>48Tc?)P<_7oW7WAgISc]QANkZD8[NXCq&7MiH8It-;',OiEMHd8*%7ZP;R. at YTFROn7;hr*ZP
+%9lN0KSD-jW)TY:Ig\i`U&QA#PeL=7eA>:@]c*h*`Vj__n%jqC4]bbu+J&11]p:&MeO?E-.i+AdNhkQ?\f3GXMW'-N;,APE2p@^2M
+%:LKIJeYS)?h(oWu.ou6>(q4GqmEf*FV^TqfF#'CD[jFY!oB9)R[,1^!TOJB'_qmcgNnbEk<c4[R$g8U/X.=D)PU)/LX]t88ZFeCo
+%0cM#rFn1cnSFbQ;g6%6KSCJ7*H*pCk1<8oBYP3, at qK#L9SOX!>q9r9rC#>a$8tMJA25rf+7^qbN.+c3cqe,jRV;:nr;_(P)AYCu1
+%s/7/BI"eAU2_]^T8[$WGoOD^dYmX@[%VR%b4bp]%B.rm&$&o_LEM\k")`&:a+"91oqkScPbJ`3p,U<23BKi!<?!KCE-r#%Li?Af5
+%a;cR.E%5]&V#ZWPUCP*RbmCLH:s'GT&NnF+53q";jS,,e2SAT\CQLtC(!/,M4&7m4_6MN&f)sheF7rsm9J]hU^jQ2>:I=1&Y"m+j
+%_(te,b/O&g\?()kl>[`DW?kF)a]Qm=hqFs6]oQh]B+s*m>X3\"IJ*%PF[)C:(O8eTC_L)Md\=Z7P,o]7_VOJ\s2S1'!n8(1bO7=?
+%i8HP`02DeCI43&PDMVsWF8\3M1G<rj_sJJVc$rn%.:q7-K*r/&"I9Sj9?cDe`i8R(i,jGtG]RttU*W at m:HET8mF(5[D0iL*S!tCW
+%+kequeImEkNQ4>J%<q:l!n]pJJ<!<\>'jG=\Gap?YPoRVg8oRhSGFXk/1\Kl/"^2a^'4Uh>f*<0@]B=E)ega^WkGfjR#A2UiNX.;
+%k4OI!OJ84gqWDC:P\kGZP>-'And2]d'19=)Q1nq6a9)"qd$aBh_gWc[m_l*FZ2>p>1-1PE*WH7L4m:_KpK;Rn)qV]1>I/aUN4:-@
+%'UA"4k3hP:`nfR3e,JiX;Im/M0r>$NTfdc?B(ec,"0L<%cEY.Z%N6=dfj"e$k#Q_i3_?e:Wk.T=0L3aJf%&M74BC0'"SAU(`aPEW
+%6%('jDY>8R;Rf=^qTCB^DD(ad#qO3:[tU8Sb18g*2T?%WM:ObGhhkOjEY:=fBZYcX?XL2lCKm8iF1=%a]D@;tN?u3mm797'O6<O3
+%Q7dI4pDC=Altb\^c98bU3$kDuL(kMhV!m64<5Ee<AO+5[&C[W`n#hh`[hN:/f=T8_Z264D35iJ"Hok>RjN5PU;R*Ha8I2LuOL=$]
+%,kq4;Ws6LN(be+["?JiEAG"WLhGBQ#Sq38o5#.!dD\!diq0dpN'3e5S'fcbWA-*7a?3n[#O5G2S:mOZsCtNf[_gu,5dGn1WdiIn2
+%@?$Rd0&ekR=QR.<O9F!U1eF0a(W5,$dFDQKB^Z%"[`!1cm9*5'Zc)(ZmUFZ",Ah;sT(Bh&]2MLM'2<.PV'%jKA$bPA]G57OA/`CL
+%3]b#9ea70$F<4;T>A/p5e5n!U3LL#3a9!I+P/OSIXi0&02<cG*/hf7<Gj?P'U0cq4O[!uo=;b''k.'<=Z0f8ka4TEIPUWpT4blk7
+%<RkT*4hc!NVTl;2d>TsG-F=A\GY&7?i_Q,Y5PYi.3=R0.C.0MFZZ=J9j>69ZHb**%%N0ZmIa`(fAo>_UP.L5DBQrO7qe^DB5*pne
+%DrmOU"@\e'J)5]$Bdpe@<Bf:5;Q,fa@?Dj<X`arTP9<,19^(AOXh0kVk^?02J:'iC+=ZXpHj*[q=&#5QT)jL&!LC6e(#aQ/\fj!M
+%lk$:$W&R)W"<k7D`CCEfgW"Re<uogJr-lq=M3OV]'DSLO+>-=jQ"F4Mht&A:GlqIGf)N0I]8a;cfXpNHC*T3=QCB[Eh3X,9O6B[i
+%?L"S[ipY7:@ET79HR<D]_WeNUN)Y1Cnp+&p--qKrm5%0I.GWuXH-4$NjIi(F"A`(F]B+EZDTYOX20KNhQW$qf4AaoocUH.0TD,Rf
+%L4M*.(H]Eh\5V/FL?l'aq9i"Fpf"uTSBZ'5-i2WAO/l"L^BlSSJ:SiBEGbh*m1"lT#U,10HJ\2SWF*(o&dr`sP&CD+o=S5fUb5F;
+%4D70[Gfhrcq$<m4lPCO88`)H7nAmCRRVlZ!6uD?"YKP."/Wk at I'OTF!ZlE2l,Yc[J]+85Ek=)ikUGorV10h4$q&WIfP.?EP"i\S`
+%Cn>b)kAP;,OR*XhEd at eW9tp('!e#)=YDB'H8?XNCcM&1/-&J/Y>E/qK3Uk"6j7FhSZpPm=]g8Ejpo at V?P3u$e?[6kYEdX[&kmHan
+%jX]%a=E!A3TXcYi=C**dqHU^%e,27K7*V6C0)8lCIqEM;1Tp=YZp$+tm$qBULk1/_P9RUf.EtnK-*aka/\ItY#KgaYMM at QA5bUE(
+%/XL/JD:RbUnXI-L:ek>fCS,O.lXG]s:!IqDJC4s'^"CG8(!-)cA/pE1]lW+)[abr%Zp<<[2hI*oCCiI)1ji3FFcEgf!u:F:7!<&%
+%K=Z=,PCn-p+Y82c_]nX/rgr&6'>c`O\@Y\ch at o^OKF'7&Q99F?_ZUpK#%]?1H_+eHI"#3*TZ9OmT"<1p5U0m4*;+20d_C-*1!ZQI
+%%49bq,qpKqn`scYZe-7"loNAlHZBa9em,c'E(tmPSo[SN!!J3&O,M!tdpUb&=#C'E`)B:o>6)m24"VuF at HCs]l22U6=Q<')RJ:Qk
+%/nIAR3D7BIE:3!OqMs%PB at tohR8G)&A./sh=iS'!Mk$TLOLH/mROkm&J58=)D9H8^gV(/kM;mq!9ms^0gs/T&c,i8[CFckF`/2#s
+%ZBDK8!sretp8JE7!1ll"Kmf_-5fVIi*fW`nW"Mq?T*77%[$i:QU?-[GT)3'$TD$9Lfbtar1c]T>VB_Naqa,`;DmV5;b;gJ4QT$q6
+%SaY4V=,6hhmM.^KcPLhr<1C04'DU8eWF*cdN3oRCG=5U9edW9?Y[ZC_rG58t\<VVfoCTTHS[VeTN7)t*L)$^A-Y$H+(MKEf7L))h
+%7MZ50 at 8WKI8R52B:Hmp?hX>[MI:u-Y?#pT:pET,c0`W)_%LnoQ6 at -eYo,qGOO%G#\$pMjN^ss-:aZUjPD!ki;JtEM[,[Q;fOTJ'&
+%chKS8M4`62&N)!IMO8_uII\QqCl]k@>eLj=W=&Lp99kf=5IEKR$ZZ at 82&CfFnNZ at gkVrg#Gt13,7-(JGE)";eFWm/g\J#CK]\tQK
+%8hPc3K25g9d,QZn$J)0eqR7uBG@!Lb4S;0]kET4179Zi8(A+,ilimTR-$Tod7)\i\b[s570KBpHjrF/fDuMKO^(b)+#;0BY5psj:
+%834ofg?b5:oRBD0Gq45]#Zg=&!m*M;dP\5em>"M>)JQ(k^aq3P)ShSt">KDnhF/V3Vk%LbT:5&aL at q8IpaQ;A`V&oWa4nI#hmBV2
+%aI-gQ9$f7$P$f-Laig1MmNPD9nW9V%Ba-UOK5nk#V,+>W\<k.U/oQPHp=Z(!QHBK=7fIjEOi-JXY0U/uG3$/Pn]Rt,P+ucd8.5Pa
+%.JE\"NA7UgnTV(9D86O]RuQhZS[e!\]lD^pi6u3YAong]3d at M;\,GQVn-4"i>&!gI9>8qB,`>a`S\i,c*o9K.acBDu$ps0XhUNt;
+%LD%.oZj>Y2H%Se<Q`;Js`ha2nfdjGma7n_)KH=Mq;3#s.DG?3*r)$Ld?BkN_<".5RcC&":X4r3d^O>`f2uT<;H]eIH)JKLU.;4M`
+%4T)_7I-'+7$1F at H?l:A:jQ`SIhcFo<$tc(u.F-?:&0!U<(&^.oS1-*GS(X93!X[W)DRMP4f+'$KC=Fgaj#PlD:`"hD_>TS,Pp9'G
+%.p"ucG%c<$3WpHeXsH%Cett)Ya%<c*f0R0)05H"CeOOBA(4sbHP,__9T`-]TfQb4Yrr+0ZiNA_dJR"]=,t;h6`j^>kI\crAXir+L
+%,-[#)88K>AhB%$7f at ij"MF1u3V^Eti>DnB,rA`X,HeKDYbWBP^rInsP at gb6FF"S1`lqZ8]7Qrf*VB"?"-Tbm.ZHGGrK%7h3hH\d0
+%Pj3A[F(a+,/XKl[6:*rEY'ffi3n80>hZNfN>b]1m6U#Afeb9sqr+s1fjF30b!NR&sj<2lL8OY+HVI]V+ic>I\['<rXUauHH>k`mH
+%@(pDNK!`^_[%2O17+\9L/L;[l,(Cq*??TH)atjbc=pHr'+(oiW&(5/9P-Ln@'F\+#l(Y.Ws-RNg?S`nt!9ouV1?liiC';]A6'c%q
+%qO'kQNPLA)I_CJ[9)P-.\oh0e-i:S)n*B`l'/K-Qa1^)oQs<7;@+8K.q3XcK>,N_oI>s">'h>mm'S%*&A51,d$Z"o>Cs$H#_Fke\
+%ka4e#OKUM2(L'/@)e2i*L\j\'I<;Lc;kkeNYM`A<ZC]6k_NIMTB4l*_mmPh:d=d^oJW\h*oV6u$,FCO_V0mqtR%g%3)UX1X60^@"
+%91%Z-B#au'or=5HPC>u5(,CJqH:P/f$mh)!D:h)(!#"K56C$MdPT;j#WT5X(&)KPTT&+8qS/)W=e`9Gup0987ie._=]eLHI3glng
+%299j\$cpR"J4ZhOIVgp-RV=c00PTUF\?X:aX_S9md0b@?=l-LUigLp!mgB7spQTI#+U2kc(LP>]X0!^daZ?@$:qgS*Bc\p)k$MH2
+%8`E^N</0Im=m14bgtK+[,arc6ZWLZa[u`5qm;,Z*7]$Ts]>p0^8J,R3\W%la>05 at .pL^K=i3t!KIL&>%3gEDP9#G-cbEDZZ=DPrG
+%U\#Zi3t:fP/f,HnT7oRW/YCuV$!)f"m5!]tD,dL#"fZ;uU+)FR>6MGV02M6<mQ@#h3of<5S,ZY'mSZrEdJY*>aL9;+d8C4r2gbZ6
+%EjO%V5`1P#pSTY/b at U(bM9nsKoO(5AR<i]d`GD5jr9^rucJS8B:hFbZVT/Bg''OQ-bYtoka]D#L*k]b<_o.V=iY6/>'L$9>",FT=
+%4k3DC-io%!N<QBJU-+6%=`'MV,!4tLGRiVmjh>!4-!u-O/`.uqjd4N/(NjkAptqkm*aFe"$KR7j,>FB(EfA80i?NO,7Bg#p_K74!
+%C%1#f:WKfsGa"qS;E&E"p>sqJRg2^$=4n>a`N&<Pn=!ALjJt)*:>AI$6WiKE]s6*kVoauH0i*I6!Ti&<2C;VX,e/sZC+i%t#S-]P
+%*^ApIS`@=$66NT;$O1]Y1gg&'(Q9Q.d(Gi_;:+mur^/-X7jKGqTRV".73HW*5IT_h$I=c!B3eE&WA[Mo'-BZK^X6&5's"3dKNF"9
+%#Q-`.],1Fic)Pf2N_O1g*7UN3iRII2OdRc'D9[>!]U#,o_TMj.$-Wl4%c*";?h at Vf$?a/s4Bmu"'>k;dP*QJfg_.=6`KP"<GOuAo
+%>;fckel1tt\_f at NXB24BTDh=38^L3?ZD?;pD;s&JU>E`mJT30V$sp2GS[[@^Yq:(#mSp_Io39Bl/:_eGK<(/Ge/&87*%m/XUG3;(
+%Ps'65;k1Mpg`b1`[K;_)HNp)SF.D:cK>V8u!1^jL at QR@es84C*q,sG4:GcG5V"t4(%UGCp at b[uAEN#$4o>Rmk\1V/E='X0oV4Nf[
+%g[A]WI<EQ<X<9*LZZjR*AJp_1+IN0'pjXl at Zk"JiaelmR[O%*5,eC(=1-iq:[:hsUkLPmSfGZm(g2ZlLCo-\1I5g6=[^;jt'YJ]=
+%$!!o2aV;[ro2rKucB/XNL1:ep9Y$q;^Z;)V`<KNoRT(6=hUcI%QN0dEj=J425EoA1<4%0>V0Y^9pVG'Y%#apIq;DR[e(ZM43G%pC
+%i9sSV)D-#54Kh2jgIDareej80R'F(\Qe]1 at -,r<KQ6]J%%eWaugVE>g2t+9`2XW\0NDNJ"Ejl]hrlDSW=I>So-huif4;&b!._Me=
+%,do'3i9q\4!nJ/=1YLSTq=Z/l'M_TQoB2>FA>a)[#muF$!VPG!T.d^s>;_BN2X92q,=f(`"VOkEJ:`$2i5`oQZ"6R;Qf85';rSZ0
+%YPhG5hijgme<f(ifsiC]a7a/\(^;f1k:%?tk=&`7$r:);gPRMDs"cVQQ#Gk8]i-Usq2jAm%c";eS&AsAVgU><6andM*8u/MnAiZ[
+%,#S>n3!_]L)':ihY$jj8#R2'tfQg!gdeM*l^,<mD]03oE>+$ogXf)Y!qc&sbDE73XD7=)d=I[(h)7EM"*9?HtR31Q/0ko2NbE!Vl
+%=C2`+=-jQCP%:@c9q]>m]^1uGDlO*JgZO!TjtB\8mEAD>kGElfgps(dS9X&[]IKmQjAh'G'2.L#=s)gSeBW`J>`=E+SO/,'B:6'r
+%%qAE)M>Vr.p*CNFji]6s,rgA/b.A\\AEVH?5pa'0S3I?D%Z?uRR;YJ>Al`Oo<2Rc]$bUrOlGgo?$U./S\Ipl&U+RN8ihbd5V:a2N
+%HBSljK[=,#h!:/j0-'lNL(B/*QFRH>Zt,aoV(:0IcM1.(.5f5QjkupWD@'hl+\:Xhp2- at _1$%:2FI=5b+VKc&*LiCT,g]+G,<qGY
+%At/6R+8[i`5CVJ`_shY\*utM`C3Q2"4:7"L#;i?-NHE)aFRog%5j^CEFCk$bf at c1u=oRIe*i=6BL1 at 7D.:9j22o2=$GTc=9-55\d
+%I*uk]^:F3rK!07iB4,N+)\`)48g%oKh1C4ad<LVL]<l4=q;'0)K9\>pfB\h<oq]]`ISQoYM]@2O6""?.DD&;+1NGFgD>`toVn!<K
+%`A_3Vp#<Af1b355lRmqV+6PK';gVqI(Vk0[Rk*Wd_i_^Tq);X5XAe>]/I at DeE?I\6EnO at YYb#)[dlsh,`iAiD,,Ja\C2n(s[m[%`
+%F^NF(9-R>QT(;a'@2Td$0=&q`gSimVrU49JnUZM8f#h.eH'fshH<u4X=agcR?kSNGmB_4dO'FP(hogKI7a2N;`M4g72ObHjQg?Hg
+%E/S/be2 at uJ.Hon*:)@n3G$Ue?B6BeAZ)J at qQunJ^6'K+0)n!<F,c_;MZ5jr5#E6R?g"0 at 9Ed,uVhiiKZB+6#Irc1c4lqb=r%HKFD
+%IdTo>@(r7pBeMHu-3ZD-3MH)<O^.;Y:2t7`4qD&LC=[7/aRsu0]2bD;bHj7`n(TI1D"b2WW=I(fW5JHt\4\4C2aT/@KTB'q3F/O>
+%3tl(%<M,bT.@!,%0sR)hm!Z(.E,)(44Zk\3n3Jj]jh]Y!lQ02dh.4+83)X+/C]mckneZfIe*C^i<D;@0CM\:YM9g6QoVNLlMImEP
+%=D-gp3%2rBJ6F9O$"<^9D.6;Fd2>=*9Vfh9>VF4%hq)eg<SdsC8GftniRrU1Q)Wt'SO%n&ho1ht+_>L1bR-K<MgEj;U>C;^q;nY8
+%)PZsmCN/QT at MCs!c.9NlGh:'QH"a^AGsR;@c]LP&/_03k4YJb:4-b%Lp:WVrjQrk+VP(<P%(kBY.N;I+b'h+/^[i9ZE,bOhPN/AT
+%30GU$mdgKO;Po2s(-*4=h`&`0hj/dcjm\cU)9bH>@9T*a5Dj<a5f3cfH1B=>6i*:c*nDOCOc!E16^SaWi.om'C[snmamLV@\2?*F
+%?j'k#a)(#R*2]=/79eC(9#(^i\T/)(\h*Ip2k."?To2KlJk&RDrmWOlH(Kl&gq:"mK8MPNHa*MBi'.G]:^T0Y$]W(!`?\RK]HnO]
+%embnZ!]<mE;cnKn_^*16q(Nc\GeKsEdL8ja8p'/3Etd1%7&n1ObP-a,)^u4[87QuBRE]NW9\QS`PtK;?>&uI?e"4OD8i#!P;:ZT#
+%T,?oNm4*,?0p$b;Kqn_!6G?NqEDK=h8QR/X[$NeA\MGg(F(Y<>jJ:'#?YU,_0*:PA`_b_2/uiBkVKi at u6K`Hh/GYF\;*?8[DI7@;
+%AW%6a8MR1gJmT."\ZuGnK,uVJ3>H7#*4p8L'lg!;HJ_C+Je/$.n'.FHD:m/@5Aen7ZU><\dr)mV98P/JIoDDV/6%g9Z'*.RVhe"]
+%ZincNObO*Dn&]c;hC4fjfd(CXWR&6;g]>5hjQ^"$N2grA>.(AbU2qei(NTB@^0r7g<n2BUJp6_1nmh60CQ9(-3=IUc6(C1<1`L_(
+%=GB&RA!-MV71rb/3TOV6E&)psVcn3r.1?j)EpfkiG<80qNVN^XCW^pDHr#mok-sgq.3#h6HRkme.8SU9cl&Wp`bO\r[l1(2;i=Ai
+%3uacN7J71nk3Q7`-Y!":2mo0u[@M*eneeK=34'r*I_MeO==#==*7TJ!hodS@`HuK$;U[oU?=9%G1RQ2L3-4/M3eDnE:,<'Pc(3^-
+%rWP/3$YF$<loX&gib,t+=+`Y3-nf&/XPL+D8)O\Lol%!of"!iX:m9]nPJ([;B*AdWCBQRo^^+<t3ULr]@m2Re-+R_:DmX7m2g`pI
+%0lKn0h2bt":\Ac7%II./YO("e$<_;bS`L[b;chKpes'B1eE,iXOTu&en<Nkh`rLPAa7/BZF<knr^.[:'GAm=%S<<u^%P#2L.Meff
+%d;+Sg3h*\8N+q2!,feAdIaHs_6_do"/!#Xth=gVYH/Jgt%b=ABNEsbmT^-#U]^m8667Og"ngrlq6_l$%,gdc"S@/=c'_$13`F+.p
+%SYj[hn36#RQ"BTiINniP2W;rN3s_2L:<U17TX5n17(aLjmaO;o`<8"&FNK:gj`<F7CE2El9t=oo_ER7.bkAo3j-l$rbB*Ymmp1;-
+%3g);Dmi127fE8V`)ji,:A_kelluj?.!NKS<h!P1MKgr5h>UlIIUeF\OWZh#lkBV*?6QSk*V_?p3j0Bs$S:+Nj=(K5gOV.'J`*XH^
+%N*[YK]F9T+Rju>,s+2o_+t&Al0IH1N2W;MGG89$kju_q;5,;Vm78#e at -kU-4[$*mj-dMnU8jQ6VQ!#3QG>Tpq=H:4B0Vhg7WYYCR
+%@XBn]>+nf]5_a%n%X&$)n5M/FaN?(<o'*,+$XTms6[8m?.X0#f")qVFaa7'sATbeoA<cfA-q^&[hCe!!GuE]pn2O^GBZ)fb at ZI)l
+%gt\X&^uOWKm<83Am!W]q^K3_=Z-)^-Zf;(fL'4L';-s,K!dH(WC*/q)[u*`r$kDN<PVYlDeWLN14=B3lVq`i6aOF[A%[_ob;3m&L
+%^&u#JC/?_7UL3 at _MKV[n(C,9.\n[JC*X$g,H>TsEG4aK at .pk;;KWdQ#%3fmiH:7l:[nha]>^;J5#(3j!ZUQAG_\<qhAJ8m!V.dbM
+%[tc"(c\2J[/`n/1<$*I38'&,c6nFNm'bnUiA$E:6c-oAP`GfVHOtGr]&d>KD%p!c1/N4O['_uMcmnA^dOO'dnPa.W8)o&HF8ub9Y
+%4P?%kJI8KQba#lIitW854Coi#Q>pp:IDR2p/QV[NnYj&7c=l7`V1=]fTqg-Y at j:*o.EXodcO"ho1%=DrZe;/rC[<)t80YDBA-"qR
+%-asrpA$b`!Y)GkI14UVb$^/j#[-e+]"j#W)0X at D'AX2u"aHtfsIgig2$7dPMpTmPN#SOi[!o.d<17a7,Qd(!KkX`0.?%i'TRgDe5
+%=2FgCc8I&(=r%!4bepZ#NEIH^Po[,F-TIpN"-,:/TPXqh**?!/]imZHHeltATqa.DK$78blL[u[g(R!+![_,RZ`S'qF(hbUh$.E#
+%js44j;Z^koA`hLqnN8pZE*5Z")WC"Vq at nsJPkhcGo8IfA"k^sM_'#(5DUt)1QJkXa\j^42AJD]WYpY:6/#sj-gk,!2%UKWs9(,C/
+%O=fD^Y`<R;,].=@njQ!)MRQkW2n3s*A.3+2"''Wdc93Med]Vl)K^`BYF&GXWLM2OMLSot<kHM1/7-BGRU`qIE'6WjO<,(V->Ce&0
+%GH.5g`W!,H<#H!#K#KHR2Ht1ebDfeIE>oiVc5OlKaa%XM#k?CX<!Ch).5mQV`n at r!e7,d`?Yu*H]:\q*G32OSBCOiU`1OaCgDmP'
+%Pf1!jld0^t9NL;N4ij+,j+AThqMJfRMs7?99a&di3/_;\pkj(#UU833/1I-kVd>6<)-b!(PoY!^0REqPf]?XbYdV5:S[fDoNOc(Q
+%SsYnXkY?)DYZs,P=\,WM6"?1(:21K>4d(5BlVqZXHGCup%Bd%>>`O;q\[9Q`FR'L$qgg/<P0K+_Z at R7&e5poZgRmnD,J`oRFd8YJ
+%C\"5'WNW)f2IqMlqC/%e=f]a,H7]cs!OhcH+JZM';W(t.IZ\E[8Nr-E\*3J.EaUb^+COglLb20F/QX<.GVue*[kQlVk4VfH!9=A(
+%5KJmbrNt$cQ#1OT^3CR+b'$=92912ug<bk@<=./khHI<=Vs.!B6A/%n^Cn at YSoko5$NI]5;`Y^&J(J3uO<0S34pPp!LceHam0PkM
+%4BdS$$2_1PH:g$IK5HO.o$I)Ia^dY;jn+GjIbU[$M3Dg?7p1%-gJrRiPIJY[d$;h7K(/t)Z/,"@@Ne$&&*eO7`$%4Pa&FNcW"^t)
+%hNKQ>J(I8f/GmfU>TZ4tPfrn)@Fog"<OCFkIJ^QdrUI-].;l at jgT:2&$"2hSE5\oBT:J)Yqu-lK;I=`,!"pZ:aQh at -/Ji!H*TB0J
+%djC;>E3n9AbGX9+&l6uBj*@`,R\HVe2<Q`!)FIM%fWtV5nLfme=,5P_1#!.=*KsbkK at iC;*dV>2B9eS/jRk>u[@t1s;i#jB6>h[_
+%@g6pFI>pAEoZfr.hp)cqE?,[S3im&WeX0d!%nDMDjpaqt8]?Y?)Y,((8kE7p+)Cop>_T:o-HO6<H:X"4!IeX92_]sJ+TT9ac"/hQ
+%+8Ib&PWMF8P_K:X,N;(-#!'1N2Tg![qt+Fd%!Ku'TZ/QDkB)!R``L6d\5!o^WFh[V?fbCuBb0Ab$g&)i881\tM2n_@$D_=Bq8/oF
+%!bf-7X?6QNH!,)#@--eGJDFm at IZnW7a*Z$N1N?Sm"nE#dY9%`;;,$Uu0i,5kDF4Ut)68q3?.!hZbH at +PlFJ!o.#[qM2Gie@!6uaI
+%WeOrDDZiiZopb;#;G4!m1V8Q_"(*o57'86ZS;N8AMan.fT9!=?!E)7R9?k`Nij.4UB$o)Mhn%Ni-P7H'9DMRO*\;)pOru4, at PJ%1
+%5474m[U`/L`FaG'iV0Pg4*qn0ll`p*PlRV6g(e`4^amlgXcR-D:+3*pl;Yhe'T;of^R`CJUa*W+ZG1:@-.f'S/1:]-&gSb)J8O?r
+%lC&,J?mFuDdg\CG]78Lk]tu+LMhtLomKdR4W"'m=&Al<rAI.U at .[nk1k!>mM>u$8.X6Ik/.X3#tN4J:r6k>+d%d\`$b;tk$/Yn]5
+%7DrY+cKZ0h0WnX_FfJj at h;InaXPOpd,OX9&i6e9PLWue^HaDmdVlVDS0k>@7;ru,q0X%HK,SK''P-lp?G>"(2TL_e%/U<SMjr+s$
+%A3XS"g&:9J1]W?]`%"<`iQosu#q.^DgQDYVc=+e2<>F$T]`6Ued&OAXk).V:R)0_Xs5**=.>jjN`<n,oBXYl)<TAl+GFkm/$7euX
+%/;O.eXaCX^R[)ko<f)2:G[o/cn4#1=*iq/\:_FsD7tuoId1NhL9K"69IN_oln@^hfEE*1*!L#Ub%N`=VVt(Z:)P70sa-E\AAFZJ]
+%]PVsf;Lc"E&lKD]24UHr40$H_QkY&^XYU#Lk=Kf_gnp7#H?)+?AK4\:\4/g$!#2\@h#O$_.e9hto2*6&'YDu1O:FcEX<3>A.MokC
+%Jl"^3abGhpma\l&=Kp=S at IhFO'p'&Qd^-!RLBi@<$KXDB7=I;ahH90l;)'Wb>HuMffiPBrTVH@/e\\8En+OkK/j:HT!=V$62>_^%
+%2BYZOB)eYnfa;AagQXa)H^C'iW.f4 at DTuIER\[B7VtEX;/K]TnM%$ZB.sIrFiWD:ZZA"qe2`?Rqajqr>]07ljj5mk\?E488R:eWN
+%CY7S_WkETe%>Ysr'o2f_"B6KK1pCg;)C7PU/E"L,kW"2UZ^2r'KL`N$l7>2+V'P>S8u'I:^<<$F8:60J*N]?F=o_j2,kI=hE2=$4
+%<#hma]ZDpMg/M].K.9V(mV9Hn%rY6J7_i:5J.LE?o4!e/abOLG6l0(j#T+KeC]q>lV^_#gWMiKg%t:e\?ZdUA>qF"%?lhK<qT3NQ
+%6B'SqT!WDW\&q1M9<YUfbW5=BjdX9b4_GC7`ksfg_Nfm5VaVuJ at TRbP$!s#hQ1!ML,bOgqYi'CC?t/;>k#>QOp8?D5!i\Le%\0ta
+%Y0Ops&jiME]#lIb1L<1s?2Z+b-E*-gjN9*%+5pM-qdUD at JE2_3gK`p`R)=*=LGhCT&^F-H_7GL0lkIDKn2n\WD at EPh1l%0JVJLt8
+%nt\sqI(=@K.GeTF'hh+:Sco%^#h`Ia:L8J/R at P^UVpc=O[&Duub#/D5bc+md<@b())ZUG)`H6l at f^<%Y=%C%Q+-6';np?tGmeG82
+%a_D`-6<LhIA#^FK=G$^Y^pOH\P6>([m>Zd32WnBZ,-^!g!D+&/$pP]V];=Q#PfVMH^2eu/OR9DT1]Y11m5"Lq]M#KMm]clYdW)TP
+%Wlgo/riH=fELH^4-4:Rp87WpDUk@"EaFj=G\MmXr=L>usj0U794\O^)Z1!+di>/^0(?**B^$Xn%<mM6Z&IJH';^D[G23fXFd#qt&
+%PC[5/K8`Su*]88"9pfSn at P:Vqm\<Qtn;EX4l^T9r<oS<[;AH06p1iD\E&Qmrj at kee&dZnGOiGMB_B:;J?>d2R%hLi`X-5[.(:b-,
+%EE!P6ZD1"Zoi3T5c&Rt2_jVdna%XsI56AmcFqUr?0>Xg90M[\+;jT1i6qKgj216!el"^#/S at gm+^Nik>'=O,9N/Z2sK<:pDPc$lB
+%,VKD!8RpH:FKoSB.M!.UcU7!;&WX:<![`IOSjq/(^"F0X2^'7/PNU[dF7h4^ieb^:D)Gh<8TQ*g3Y=aM!NnNjk+rs"QB^d[1U"2)
+%GKA_&$rW7,1b7ue3[#kC3>A<sds$p@/usish.?n(LaaB_bJbu7W0<L<p"T0"6rqp99LT.*)b.%^kYs1Rh:.,%,W&Hq$-Q8%*dG`'
+%**;aM%A^5R.Ye\VHLQj:h\-pSF+OY5MBP,;M3F[[JLC/V)WoViDsZ*n"X->X*8m!)^:P'Hpc"hoOPA6P at ML,NJg`1`&&=TfR><?Q
+%.!Yk#Io];J]YH\TJo_;uWA`[p_tN"=!)Yg&n)/maZ6Q5-;0$pL7d.7^_"#c@&ouQ+e`pO)ct1k1%A?PrW7OK;M*4gbP0V$q<CK#&
+%ibh:p0O%:QWM9*#PWEgIip`OBa\bL;#V.i\_hYqDRiJ6UTmhjY'#iF!<Hs+K$P!SX="t<rQ\"h.jXa5.qij=LACX&J6]1h at orDUL
+%ePT7FOQ45e[T*>?$"rt:OCe":3/(V8i4r+5ZJ+Q3PmX`o=*f8e<=b.dN<37CaL&9T!?a9He]UGSa\],9j#k=h44YP(4o&"LKBJ6q
+%/7pi[m`\%"mSd-6H;iJ4EN=,MNqlDhVIB"He7&Mgm%./7et(L4m\JFSI2;KiU6LhQkZcb(jn2U1g69dq*_*`qH*Yj!<SSMIcCm"@
+%1]bA4hKR1R.>NiV4RsY3+I[g$(>7AhQ]=c\XJr'!Jd+^!,43SU.G#ij=DWfZ`;YQq/X"Hlr*7m[bSj"`i5Y(,q\p;p_%J"V$CRC,
+%h+Zal^$2DKWCob4<G1%P4'q9CQ^ZO$HIYRfQsB5;-"A6';[(KT'^Q_=&"0fX"*WBl\e+1!LmAIfZ+pm;"iNl';UmeBT[Eo:QbArE
+%"G9]L>8BfQq4Wh%".8BGn at W=b0/cquclGO6)K5i(2Wr&>"@jBl&X%]HJk#W<H"8 at -7^DnRkG!8(\a/A<WSNNr9mLoPk,*;@GQr+9
+%`CVN<<b^/)3",&;G at gHKs#eg-Aoj,$g?,Y1VdaHcZtjiSP,nN$H7u/a6/?PK9&N6,ea/i7l,i06?Jd at WHNUl:)jV_5#BT?MP6DI1
+%"fRuu.;meh"XZ8X/\0?IdOMGDb07YU+1Jq[W[JnLf=3LkdR9SD*$,EE$8+>C^0GL-2['WWVOL_Qm'<?aLu?J+/F-2 at Yp'iiDmJlm
+%&h<mi-mNgGloeO:3(IV??.di'Zl*3tmo8shfK!Y>'-`JY;QKE1#obWrZM#Osm-^Tq!f5C39sU6\C)6Q`!a%JbhT2G=Vj(SQ,ltW9
+%d^S9OjrbZ$ZkKfJq%0RdXGI?49*frh^nun?X!AAhQ#ug\JgUoX8R61K*-t*4d$UVsP.<Gj;Xe%RPPXWd9\7RKFUiDS*\2#DI,dPM
+%]R`d.NP/G(Z#+;tY?[)fkbo8DaN35`5r]);m:r>3"&sRrI^LU10cPeO9`'Yde^7WlP;kpY*CW<<Ad`mKWZ\:QT)3o6[OKt*HX)TA
+%E?h2jk6qi'#C1&ZfpP'8>K05&P;LagD$&Vj>qPHP48I=#UWO at to+]uAI."kR1s7)]6Rc=-MSlompmeX;O>(%>fe6!N'AKDVktlmM
+%\A-^k"]A=U`gQQE/!sec]>@IS[,U,e%..`^SQFc[pF.e4/^2QkH#MDfYf%j at pM7%Opg>I0SV\(C$RcgM,XE%/R6ANg&qI,_[5g,i
+%7l-'q0`=!P)*eOA_4j4f*^'/h(*6_t10e3c at MYl?fj2+\NGo*]#g%W0.5U$%ed*'WSp2\GLK\7N*/j",\qIpa[-)M:PrY4&a2OU$
+%06NS(gDX0d.Qbgq8M6!??4AlX$Olr$`fYSc:2G*<Zq!SlLH;7b8WH:F;@B&%C0!6\-I5=bC-43O];pb1ZZ1fOY[qA_jB!9XYol./
+%Br0N?]_T!/'I1lc3labWU=JAnAhU5L]20ua"opc&Bo<E&g,6Vf'djkWWVbe)4/nQM@@*G,XnTs:AR9d73Na@#`JtCdKo[-sn8jUI
+%[=)sO_\)h.CN)\[7d-pG>!M*I<FEKuLHYt5UeEg^eQ/LpEa4[06IIl5\=r=_]G11Oh)L;W9$0]==/82j-M'i15d4$9Q]Z1Z.64*P
+%]#;AW71<=.Fg_WM'.aEcZ8ppb\O8 at +lBJgGfI"Ku`GU:oWAMn6Y=e`F"4hL1*hABG=jc4R8,uC"1o8Q?9S(58/N:BfQKEH,;58JI
+%6&*1a3m>_5D0%lN!/U5c:5*XM8lW_Rffm+PY')=G(3m=%8b0Ps[No$Krnsci4>IPXk=&GD3R&>@Fq?3C1N2H"D7u5oYU%bUj^_LP
+%i/ZO)P@"(m%dL,F3sU*Ej"Y>LKq']@2tCE'O#U^I<*2Tk[ok1^i7o0on#bta(9aQV,-Qj0b at 0?2K4Rg>oCaQ'Z(qlgb-Pk^_5GPo
+%ShTIq>>cXT+KLp`IulhSFHN](Qdr>r@(%oKl0.i0oA)K?f7Bgr3>L3`[L3n$F4.;9^'q_ZD/QE*[lhnGcFU-5fSU4C3*1jR.^OeL
+%VhE:PQUPm:^2V^m-&E1HoFW$D_BX?e..&u?FdfWh<m!uO/WZtCh:VV'Y06t8Z*.fgJ!2/>el9>J7qia4\(U97_%,@(8L@,$k!0bY
+%bahtgT!!rWXId&Lq9+$nN\@as^n)-7/`CbT<=)U8OH=K]SB8_'&I,=OO[?bd-S4?[T-qmI#0^LE+ at U7HTMD5s1PDcM$]&V")$i5J
+%ibE"NSu\UVYSV\;1`YH^N^J/f at QkKCaHD`EAMp43+DQcoAW(MKmVm^CHB[f'[rf/^(OJML>#aY-IT=.?g`+=uQ)r$&ib1*`(9f7@
+%*knGML&f`DHkUsA%9#ko=kqO at S"$]k%Zg!>\d^($8_p_T8a0/Z37&c!GO/8pEX**d3#qs0%?@E/I:3Uf#uFq49enlXqRa'kKK2V.
+%ArhE6OOg\7Vui4D#Ah-qs0h0OegVaYj[P]`r\uFSd\Lc]A/IEhV[UZYEBBNMTf>L:/Nr10*/`';D+eq)lUSm'&nTbHmHk+P)3bD=
+%T(_N6<WECY)pZ_JM6%GXc*@1`EQD0OkEP(^o,_YZoLZ*n:O5'0OLu$;""9*Gj9_!&luH at 4%l$_npnspn1V"tJjs`A];ufhMRq>OI
+%]mQ9kb.tq!2'i_b*0(d$-=OZ1f"50eF0Im/oe"YL.49l4+L.5l%+UPi at P]MlA=g!qS!7'bOgGIZ;)bqAREnO:j3_fs;al,hDc/ZC
+%+q/e]Nj7s]iq&Fj6SN at W$4)Dg<!'>pEE6iACsQi0*Ku*/q:DTPB.G at T=C1c#LVce-en7-pn`7A09NPO+$*XJ&*7)YHo[BRJM_O]i
+%F>_+k;2S0`'!;I1"@QB?mDk<4k!<'iH2`b6D73?*OieMsJN#SVq.>_@\j;+8+Daho)mq_e/9-ee6Qi at J$W`V<Z.4D*[S0-\Q:MgK
+%Eac4R,gOSUC=mi)3oloE8+A.>6+3f3^gaF_[UV3Ehq;S at G#4+8ZVJUe+1^u5UjQR..SVaMI?XTE3WEcRiF2qkpeDkI;3"=g;4%E?
+%B[<SJ+3nE/Uj$qA%Qm3!.lGYI?j'gdJZQmqX)5hI*>Ys?iL.\l4kOq*bfWo5Y6DO;Do+BPep,F1=RVJ'g%O&kA)R?u*$(4^!2.6,
+%Dk$BB#t1e4R8f)=@[eA)TrfQ<'?%>d'O,c/([TP64;[_pp_pJHT3/7p89tsBH_S9nW,/qaR4DG-i.Fe*X5+-E62%rAnd(o1&u\:]
+%l50"\j()!5gj>2tF%EbL_?TO\]$4Zg%*)[dMhL>1F!@>?(7!l2lm2IdVhoqUTjYREXmH9j6rRDea3U$:4=!F&m'qkSf^-MT&jh`*
+%WNpPjT^:(^OF/9&]%!OG$`bjgKH0oO'82;=+^=bB.;mmcS<hAd>KPh<lk7De7pi'Y+aO\/E)5;`T;,&g0WZn+DM%U&IWfa^ZVL>u
+%CfAV"ncVB[k34SaRN#e`%O>h-dQ*[%*]L^+%`OW')mMPOD*bWKj?h-d/3H1FI+as?RY?A)`r!m\BNHCo7*ubXOkRo'4f:)G-@&ni
+%9/AcD<@#+U".1GsB4i5ENfkMEZW)/`Nb at B,E<^"_TG19Z4[\9CS/[YITW<]bSB9FugVAQ6N7'=b[5o!pr!8W(EZ;mN`a+j./(0GX
+%aA at II508#=X>"nef59e^HVRZL@$^u>C9jnqAA"/fS]rsn9n%,qLq7D)[aWE[3KWcj<SHYF?iN5lca._Cg7TPL%LmTaZ6M"1I3A;S
+%fFC0[,M=hH1sOrdVa%KM4c955jfuc_9/i)qrc/KXOl2pZ;?D_=K,Vt'3Ko*X;<^6po!APIPf-_o1'^Ru,2;4hX)5J[2p#HIBit^F
+%DDj$<TPBiW"3XPHH(c at R9G'YXbVhP^JgHCf0'\JM1qQA,Zn#JO&BoUVL_i`L4@>5o^r*u]V=`bJ.+6n4h\NXT&!8/>g_ufk35)bg
+%Bcc$'G26c>'7SNqa%ab6Xpl?!#Hlj=bTfT<WK/7\4?go*-iA9NL?-+:]6rNm/]A*5Xd;3VfM^6Q+LECl=t]\AJ0kk4/YDQ4#Rd:P
+%\W?-G at r:`i`PGC(jXu7eGr3h3*e6V>BX_0%mgjQY2rj-=.9]""[em7?=:PQdU]]i+[O%q"%*Xg?@[V';bNb&Vm.<B1C9n:4g(f&g
+%C+bZ6LP2(l3OWoe`T0mdASZ)os"ER'k*VjZ?R5AT$f%XmJVRLTi5XhC79%I\3R__)9!AC?N#MsQeb8Dr]pa%*+TSci/.(7Yq])W,
+%g.Wd%LM$bP?Q3.cA[>F+_`HE!N$H.VQJal,Z0Hp&EXYpa9SX1a_OUjq'>`)6Yc'fBg19+o3bZS(CasQkW8$8@<!tgjY1$5u82IqS
+%"'bps>Vai<W)c]5ma>\qL3bDDd1Z63=QQI&$(CoD.*s2iB<pW4NmXBK%G(WTia&8^c^D6('VlGN;<@(Wm]-?ZE)^Hpa0*#mTTYk7
+%O'8e#UMnH.]-iL&#',HReWD>_*IsJ.KR1Xidnr!I-u!>00ae,;8-]kUPW=OdS*(X9 at iK'2<]PN-/]qIEY7#EhhG7?GKVc+2JAgdm
+%@td_AFqgXO(6Hh'!Qcl'c[7JaaF:f`e;qoX);I.;(\_$ES*&kCe_+bZ;uI\,e7 at D>Fp#ZY;U_Fm#,s4,(iG at Ya9gFn!*gejQ<qD6
+%iPh8N2:[r84(Rm6::2D<[&\)&oTk0\e,NB05+JG[P#o&TnD4q7MjnL^1Z^G"$<5`cFnr6o?p.>TRW5Hqa"M_$2oer8;T55eOi/Am
+%7'bZe;s*9OcS8,%?G[-Jkgk?lJRl*1;+XQmg3P+SS>24)l46/lObHuN&d1;jc#]-c+,;,PC,Ad3bJd,\D3!F!!#]ek+)HPdTEYIc
+%3Gqb1j29=tE<Xq#Qs`ZaYXOK]VAFC71Q(!GH3BPP1BaORS:5>-T![eL6[PP=AWTuZNQN;aLes*n9J+K!I5VCYTn^^=[;c`CF=7TS
+%KgXK`H016\#O-505F*9LZIDLXYCQks?Z>rZg/bcNA_pgIT,sVfr at PVd/ohmNc8":6B:H6gUb)9n<NPdDB9I-:=JZQ32INl`2AO4%
+%'pKmcInU"5,cI=$>'7ohPd5oR7Bq1]RNu0R7?V!GT%jEb84@*$'ors.Y\5(tWqOH'\4KRji&]Q&<$sTu>&KS^,fLMNS(HD`@RsO;
+%/s;2m(YhCKb_bu6;d.`$V)(2(ic^g+Y4rR,-%)7Op;nB,#qoq1g0"lV&65ruAn'C^jue\Mmj.h^hdsh6P9aA4]4Ml%;sP$E,-bbd
+%6$D!g;m-r*S#+uF.b-LX at 3g'XU=@Y at e=c*UG0$p?\&0 at LnA<5s8KFmAOY!'K(!HO=Ut%46lUc at _aXar,;]9Qi2Ot2!?=mi49A('[
+%)]l3Q_8JP(@&-rM_B-s5ACh)fOrZ%2 at H4e^%Q'/Q>Yj/]k/7<`*T8Nmgr+XJlm77_m,7I at GNd8QH5)kI43$+rc9ai;a!tU",c-<&
+%p^q)<P/bV3+Lb@@5]l9VRQ at Vb-g)Y<'DGuY\+=rplJ"s@"\JeX>e;dI^qj6]+Yhp0-`t(.<(2CD*jK?&;I1es69kTD9'qo)eK5jY
+%8UMHk at D[klMor5(\UmQ2<F2t(*pWq+DpXoh7J=8=`@J7WG+]>EW-8)TQ_$YV6o?n;qbXV^'QCUYf)dhid7qEI9&FJSngK2;R#iZ^
+%P-^_;-@?[!G!aN=IRgpZ)g.mG^4sm*)+4!SIQ,A"7__NIn!SQerm/kp-^i#N<H&I,S#2EsO27h`B0D&]Z98Vq10"e9B5^$tgG)@`
+%]dptQZK(,[ZP7D>7bDcsKoH5^*"(jpZi]-TlQlFFWk2E)REaeq6Mp0OJZZUd%`L!TP.`HfpAEYq.&!lV7bAK]cJpS^:e2\qfU3'Z
+%`Kg\nQecY=Tt8B!IH=:qRp3OFh5]=rc%C at 3Lu^d!+Tm)7"T-C)Bb-leMm;jo,Wb%l=1^/]2)QN#Y.DS79^0!>YT/FHs%O!aeV52Z
+%1ej8A4]qb?2Q>B\GoRUT1D(0fbf7Sl\b9i*'([:.D+[7^>;@og8rVRn"PZ^(\Sl(LD3q!+aiLot=sVd&$B>!Xc5<j8#.>V:6=c>g
+%<12gn;Vg,u;'X4Pq&1q$]<PBS01K',K*8diC17<R`EX&5m"FJ7UEV[@1'f>0FX](n9GY>uc)+snGDj1>G4rB&H&kVlHCM&I"7!mt
+%'YMIH1?(]8ZVDl<ipN=-Z3LENV_h%D**+(^<npIA6a;IKFDFCN7rRu*&fU->h<jpk<DR-K/NMKC+i?p;s.2=5p/Q0p6V4TT_5.@[
+%XqD.">dW=8Cg'WOX at hG:CR%)B2(E`HhlDtiZfIRV5)`C"5Vr[oPMT(pQ::D7UU82k?cZu'W[nS(W"KN=h(>FJMeu/#YPVJ?MT?MZ
+%CHZ*1_'WTr[1fu0NXS<B#`sO]''55cG)$B'[(PHYZ7f):7<K1gQ;N1=`S#C<.O4"fM?8[_!=)NXI-]?#^iq8^[CYC56$p5X7;H.p
+%AsGMMV,=:)3Gt"HF2))m+imWe<a=!X!fI`.Ti\Ze7R`VtA!uDB:6DdY`*M58Ke*s*`+hBaiI![./Zn*f-gOj#'@*KICS.\G1+fiJ
+%o35bu)L=P,.27._"Np"T9XQ*#g/\5:;/gOhE/\>D9tCcq.FfS<"78'IcA4D#]0kN>bX#lSTAiGqC$O.5"6ZtSDf&5S!sV%3hE`;;
+%E$=/n;jF[MqlPY6DN\E/D`k*c'T#qfCVFa\k$YOn,c)A_8N(oNGnTLC9X\J7mk:0GC0"#"$<f&d"tUfq/RF2XU.:C!Zq/D/YQ]d+
+%EAgYJk1CrF-f[ZsmmXP*9D4H9mX=HFW_^.W:orn2^%dQe2d!!G!KN/7l;Ma1i14D at A=#22EL?p-B$6WGV#p<598UJ[?Ma0XO"_V$
+%ArqHD0;AjWQaj,m0sV*!.!\FF0H[4J+VFl,b*/&=;U)B>,Zu#hk';gg8bjZb,OLs%[3`-TPJPJ_2;GLjE9qYGm]o9=h-"@>E8JZ-
+%MXF`D=:UkW(KL9i^adfW[IFrJ^E(!0%Zg)k7T!0*Cs2MPF(I^6SnIpW-V'RPb0;0O,'WAW^lm5uKURQ1-VVBl^L"aIY'X'1:Mo*6
+%,ogSh.\[I<K?<+rO#1CF1kAS_fi2qtlsB.*0ca&(m/0+uNN56Bb4?=+W2[?u?-Q&tNjm3:Cd/S?Ve"c?0#oK,"()2)S*U_cH>-HM
+%pcP`l1!pTDS'8K4B@#g^pKQ.m0$kN9Xe^DDM$)J]5I#p>jqSORYqEqsAUTnVo=jpsW`koB>[>5'6eOXY7L):`+>sl5I$G!<5;u#;
+%*)0AJdmD.?!AGV()Q&Z"%GPGA7WMCJ=[A)!,]G#=.LO<aQHAG77$h]q=Zs<'lsso>!nkGZ-:s'3PtEb7X"@nKYZAkb8P=(bD\iE$
+%Na4uI<'>RW;k,=FVL#3!)1e]oQYj*MB-iU6(MVhEMp8fkj)+E)_:uE6<SRAD??C.WWju*HTYMX)s4QM3C.Y]SLhJ,HMf"VOrC0[S
+%aTNl)0ZUW"6k.P7$OC`rDI,Xn<f>#)"Ga$s9hd+82,qU7U<RYT%"ON-ab"7:?S4E#84$3dgJ7T^MBs6$XqQ:L-\A-j-(bB,b at iEn
+%hn%MIm4?<CB]t#6<^jTQ#p!uh(A]TXK35A="5lI;,UEV[+K[\U5]Vs$hU(@J`ET=$gBoA7haFK1AO.!*XC79mNF9*MjI66XaOrED
+%,7]ds*W)#>m!:MK(PuoIWH`ADDPXXBk&Q*`k>_ij9E&j&2bA)0FClS*c at gmErI8=PbV<?!Q),MA/#u'6el`Z"]e>DFT1tI]6DbCA
+%G!TA6e7SMmiV#FL\<7$OS[`.=(F'i\U1`;.6s5J*rhMR)eKL5\O6"c5.Bae_Q at jQP&1f'D4=Adakd`RB*^_2+:gV_Q%""32-V!KV
+%W6qr5-uP?Z=QP2n3(%*Nr-"1jWd90J4eY-EkBj9.\`YikqefIu/6;t5oe<SJ*mHc)/sDUUSnqit(.VA:m93R?S%1R+**<Ic/f0:Q
+%nS+:+JM>333Pl1$8nC>qcI4e2I at Fh8/@!`$(0sqnr36UHEL/`C_[:,3jW^`D%<s,Ol(Y,I!h%0Y>0B$Up:;-SinN6Drc42m-V2Ah
+%kQJ:);A>(pDPlEsZTn0Y.A.`i6?^r)q9>*C3*A,IXQ-sBSj\L45?A'L`YD`DFt$.6+H>)#>Vc2no.DW$EJBpER4gXen*735"q-]f
+%\><?ST,lVaeaA$h`Fs"$`0&OtWn-QpD4$liWpH/3pg"_XcJ!YJ3P[6+fTj5)9AWDb,>g95]P!BS[KDiWXpLH^A]-XO&:)8:Q.ZkZ
+%.5.L"/^]3p='_]rk4!&+:tXRQ+WC^qEjqC>8bG*!@52Aj&sJ,.3mJ\0,dQm")^8 at R7_&cY;@\n:kK_LlZ+Idhm.Cr<a/?h<'msah
+%?;olGK8`'KVc#$:QIXdq#Zes=kLiCF3:4&E/EODG99P8TG?o_Glh=Xl`H]\pk]E!Sh_KqF&bm5?R0RfPd6^a[Nf/uP\]Zq/VeBY(
+%]qIW)O&K9W\=>*Ya%5U^XLDEac51H/(JMPlH&+o%>>Bena_i5,39ll^]W![nBNL]7$_F>QU4JVO*FQ*l*IsDTEY69l(2'/X,50Y(
+%<kY#XQ.AIN&*G,qM(V%_.?I?;V%:&B[!&0H2'ndHRqu[2Z`M/>R"F7Qhl_,H)M_jIfOt$'\m&,r[do1-:efVq3OQQB'kWs>BiP5*
+%gd?XS7ML!`mIV71!54j8&Yuf,P`o$_a?BtgMPoDK4a9eg.QCM9.ri:Tj'spb.mdEfJZ31F;dhV at b@Y=LhM@@8UTFkpbC:oLaC^,=
+%4A$k?[5K)Ve`A3eZbcSbRp*;E("b!eKnRsc!C#-o<mo<1Q.LR:]Lr]:SW+?=>N)Fup*>4!''9,G3u2\f>p\fG-,K,72`Z-:kNm2j
+%4Q!,SZ+*1":sZ?3HYD`0:/!^AKrfGq"T[DD0dC1PZ<"C!6etu4?V]0RaULcF2p8N%(HXd,Z-c;W`AN0,4eF4PerolMQ(+L`.TB('
+%[s3SJRMD4t_&DSKab[%f,+)R at qJHc:C11`LEH)U[L<W9AdJ0OOF:;[#rjJpeZAC^2!VHSDPDd?#6j^M at Pf>V^1iu?7ECkZBFI(Ci
+%P9b3ac!r8K!(W6<3\fgR$]r1UK3`3@[7.rY1s\G,Kq^b%584eZdEA-/fV4R_>b7gU.6I at 10&%q=.Q?8`b'L#eSH^O+Co;Zcd`LUn
+%,-fg&8OcAH65$$bqBTN6CbEWQf!F/3l&VC)=aBTe>H09ONj<RgC;ifra]pB:6CZJLXI`-5$g;/YEu%(Dj23Ke#Jdq,?c4BkHu(\j
+%eY`hD"@F`*\quoT<!`q_BU?eC#p]/,;IX981m8p538=-?06Kr\4V,aq'p$umjA_cT?"B3/a]=u/d%$Jg4-EC`B<cGO5:MEFQ(Y@\
+%Nj.aCH!5(,+RZ^AC06d;>M8J=RhQrh=aX at D;qC6]Zqf%=+t?)&/p[!V;!%c"`+RJ`(\62krd"$e"[C*Rk6#7C'c,Np,$Ni6.'Tnp
+%hK:?7TKrQG]po^@<F4>3Pir:XWmD30.ETGAdUOfcF4_q<Ug1.SCFC"448.e&I$7!TW,V"<H#i`k9Am7%ih3AYk<r'W_#u%7Dr#'X
+%=<FMme4NSe8FFCjBNs(*!SH.+Q/'f]O9/Lt$6c4*W'ePN98[tGXa,><e$.6F3>#Vp?ck?-kOt(_\r0Oh"7M`B;;pVFJ$=!E&'Gp]
+%?`Kru/)kL12;P"$gPWm#G*2_VrSO[Urr`6bnH&$H;;ZeHqoAR$&$Klcpr.`1e,TF7Rh,MgDo^J5htWPQ^Amfj5E>KQr$PhDL>VoI
+%s7i'jr_7lh%Y+;tpoEo9p\EFuN-DJ/?iTt_2u47LaK&\Gi]k'pou$+)DuQng(jsJMj8OPZ2tr^-EW,3Gqs.h,.r!'4s5hki]rtf7
+%)?>!8md*K=d&WE!rH8!V5J<4]?hnjEnE,%DO3?SHrO[!?J+rndpRX%Ls5h^rs4*[DmVh!1oB/1So$phAl0X8XD;>0^5J6sgcgP1i
+%rVI-"^MJD]\#98^J*6XrAcB;(mcOM<5JR4PrqQKl%r^1VGMg,_a$''%h=#jbbr>BHne9m;s(T+fn%Rt_5Q8++s6c at pr_rb?htQb?
+%Y0?jr^])@@l5sA_oB6.F=8nQV\7iVTa1ls!rpO4oC%Qn&rLs2hIarAnO2oTHiC!S+Fo.Xe?[jm"iUN]Cr2,O!hn4CorpfCQf05T!
+%03RQ^rU-;-s180fc$99f^-;M\Dnd0.qVR;,YJ5PXr5SL*hqii%mbrBaho>K\E0'V:r;1\&H.T7c\+eeZp9udQNo(I7GhMQ\H^K:9
+%@K-5eg]$>2YM]BOT>)Coc1A&eoj;&"&&3VjE*i+qV8P at U6@ST]/^E8P8"O+<rT<GCDa)Z0]tWg)IP?9MO7i18%t<:)1AP)En+#rB
+%a%cKTBHQ*F]DiYBFsm7`h6UP'qr=$X&&1`"P2=*[UjNNqbON*%QS64bo:fn*aF>d?q-QDbQCd"+(NVJ%++;i at O5GA,++N8nqr7E1
+%0\Gtmir80irq"&+I*ETph9N4iLNfs%jS,rG\5+dHktf(+59%E(J,O9__r'8r`nDM!qnN+dJ*3dpIM at d#G=f",KW3$VNQ\X*mdmpc
+%mGGYVe&PgY8,Xpuq_-(.J*!FO^&:q^GN.tm;SN2#j`>e(@/e9&rq(2X?B0D8hD!Nnng?'eLQ?o\rC?nai?L&<DXid;m0fDO(&m1P
+%_>4e>mg"%!It.7Pn^ua4rgl:Ofpb+WebnP+hq*(Ic_(6HhiE!Ae]7QrDniupn(t_sDa$:4HiJ>?5G%oQ_u7J7r7gBV]_I.%Gk]6#
+%mbctT*e1r>^;es+hgPCeX$>0"N71cL_r[a;hfo+qPFm=f*XhU+bP^Ym[f_]`p>,Z$pt,D`='je>r]b at 1iC>QA_T19gn`i'gc-$pD
+%GlQpDo/1s-2LaU*rUBUJX.N_Ea&fp9cZtfD%Bk*@='r:"V`fKCm9[s,DuZ*1n?TpkKc`&#+79s%'t5+Mn%UsQomD7][e]T+jlX-<
+%?P\.kab at +js)]@OhS"=gmT8lBS$,?ZrFg\J?Te<Eg3iduq1X:,s89/$l04?pLDXpniBKPUp%R,;k8j*F#HhjVZ`V6>>]FZJq9!(#
+%+6MNH^'YPMI)V^ao_=ZKeb[1Q\,Yj?a&gS_l02C"e&O]Oe`D$,f%2!-I_PfZhq!#?lC[7;4b!(rk)\(*[cn7TpTM-eq0h.LpL.B7
+%e33a![,Cl?ED_dX`peKQpiIV(ci#4UhuPt/SBhe8Rsm5ultu.i*R"=EZEu8cp</0goTJBC3PXg(#Ch'7=7`7KI_+5.X!\]FJ,%d=
+%69_R#5JDHKg^i`K,p?%4J%F8K^X)oIh-7&&fC<6U4k]Z&k'VX(a04X7bdGUfa*X\7Ic[WEpbB8Jd8,Vj;g\qU5,OtJR-!GM4MR;T
+%Jdm+tH(V50o>MP!IX3U;Zb;s at rVYE:#!MF2#PmW?o3K,#S'eYBpbQ78l-F9scFa$g'C2U2gr%e%/)s\.A11eIQ\YMkcSjk94l4k@
+%s4O]LJ,0j.TC1dhXZlc97K3)(FZqmGYNC"TG..u8pMFbs)#]A"?sb!_h=!"h2r!D!)h7bYS,TXGqgEnhc+eTip\W:ndAQ1-kpMO:
+%5HWuA&`"Ouj8P6Hj#?3MQhA\>IlH6ahWsdnE4ZXQiMQVLl(Yo%7N^Uf;[f)Ks-'#CRnjFd7GR^GC`n7H^A&"9$8D at ik<EnTkMUBn
+%]]n\/VdFaVaS"#c0pG`]J)4*fhnu'-L at oQ?gbdcXm..(<'VB8V^>LA>oS&/"O-muCdGa?M[MP:Un&igl.5,Ut$_:ArklH7eeG/`=
+%s46f@[$6VaqM!u+l8KtJ^NibmrBEJQoCJ%Bjbp2<dPN%pm2KnMr9<m0cYN;p<PITCMtQZ\n`f:eEfn\WQ9K-sj&UE[[pM*ZSL=>"
+%o51\FpqcQ/*hVq(YO?k`bAd8nIP9O/isjmnn7!_jH$t)F:Z&g5"KNp-n$P8Yl8]\THSV2->eHu5r%_g]#RS`L4iJ01e at Y282kM\]
+%dmNi7=e2a<U7[P+p:,lRk435;d[.T.J&3R_%LLGtn-K8HL)=:qo>@VqdJ=H%?XCdR*sM7;:RR0fk,Z8,cKkI,eF at adhp#O]rqZ!,
+%LIVAt>LXHQLZ&QE=SWaZNebs?o=Vg[4qb%?!WVC3O2(X,)'1Kj;p+lWIIlQmJ*Mp$pk1h/kkVY_C\#G+IadR at j!bq:Tnk at k^EIZC
+%HJA&i:/pk26(^>X0%*ET8al]JnO;k;d!5=;]Sje8*FuO\^OQ5sGl71>O.X.4R3_ce[r9"$:]L4Mihp)Qr/ggZj6%e2HM+%?5/62,
+%07*VnTDeH3ID2-^d?s_!nZq>+na)24L1dmb`=;aa+9-Rks7Pckf3a#RRST@$;`K55^Xls-lF==njl20(9[TFDjsS(Gl>o;doP'p`
+%OY;3EInq_IBtTnZqcQ:TIl1bG;q"g&qo>&,I.8]\lba[skDMRi, at 2L!rQD7FIWU?Od0%@8I.:&IF8s&SIQQhMccO(c^.d&GnaY&*
+%Hha!F4b:9gA\T=:E!:]Tp-(.ObKTb1omb8D?1=I\M'(us+8h?ZI"C_C5Q&i'=5Ifn^NanI2Xk1`T8hcAD!U[KGf%`Z>hJ5s4l$%'
+%%Vn7bl'n8BiLfqRT&F`.b.hKrk_H&pr+9:3s3%>>RkOWI5PqE&n7<d$e]4<=rS/es&bn at d`M;Z<^OLb5bQ%E?/9$"rO]2/Vc)6p-
+%>?Catj1g(F%kKId&e>!5oY(.W.o5(%Lp;I*$a9(:J#*[(Ng3tieF!6FJGA-h?bYbL^Si6gH]KW61qrp3>0opp9C.(CNgKc.?0'>7
+%-85B:@sXNRmdIX2&Gj?iC6i,Y]:W?I;n:jW$-X4Zr:oOB&,.1AOJb28SA at Ge9&K.&LHdE2^8tVq+2s/9"ah2AdfWJGlUqfc1P+n,
+%omSf^^&".9A9.JY)uNs>IL4UiQ\7SS]?emX.sd$[Icd>ONjoaVI/MtAs#[Fao\+f`1LIe>L9N?0a3ST+Xn?62HEK,Z7tp'd#CQOC
+%7qI=F4RD!=i70VCGn!:bo+ahO:CiB8X`[4Hl8Z+Ed>j:\HK6<MgLn.:OQ at t5VA?%>r3[V`e4gF*Fj`^#LI?_]a.%]XVmDjJ&tdQH
+%!Q?H5J)CL*CtBG>)SG.d<sJ$L^CH^9C=HNPD;eT;k\Y,$`i%=loba.rZ?]ZEdcfLoHbM%`Ps!>ZOf!Mr-0DHSkG>%o3E*Pi,^nu5
+%dWqo;<Cr54V+b++S]Se(U;H_GjsUB?+0qi at Oqo>DpXR]?;/KlA=NYu5mTh\rRr<*VXc>':ku?C#b40l-A[brKC)=jZD1ItuA?(F*
+%D%_I*)\;M&*E_HmicQ4i5=g!/b,Qpdol<&XFle^oG"?A>*M?Efi at Hm9[OmG$WUkH.F*59FEADsCHZeOG*YsI/cT[A_89a]jK'0Cb
+%TssV#M_[N/mC`7VO0Pas-heW?S?gl!D,C at _SYQ(G61Sc!1:JoNQ'cX)C2It6Fc&Sg>RZ[S9,NS50;FlO7_H=Q@/Ha!:OD*A[TeF`
+%Tn7Jn2Nb!`ie0J`m5F9s9iA#JQ)Ko^0A>c*;_o^m6m:gL2&,5Ra*nKAptG'Ll$VD-D6?H]gJKgY`jA<;S#_1qlB1/U`m*p4)&Fun
+%:kQDV]o88Rb!&>F9X`Dn[4 at M8'-&HkXL&&po'$n?rnr*=2p>?ZnP])?>^>*f*QN:R6`Egp.G?bieR?BO.3u&@8YP<!D3rLU>c&;t
+%Q%gS.?>]GKjLK9;6"pK!n`8boA[_AHp=eX-W[lh64`/eYCJ+H:0&&C//rMbSMp2.b7g0']m6,/g0nt!QQqW*hh9KP2PUHKNN2qi[
+%gRa.1Cg2#A4+FCo:rF]\MT37q#VpPqD7u6`WOsJ;PT;_3b-t$m=7b;8rS;;TE\_'fI0i%0+H$U<p^$c%mX9!&A[cYBQQ!;$2$q6k
+%m"Ar$a"i!@e=Si<,@=t^N12n<?1R!"`Y"]9-L(dl*0T)uV`_H%.93jUL#FAJ1u%SDe:*UF at U8ch`UdeGnH_!(UIEDD#6/?ih\OLb
+%.\g2=E]H%KV,uQ_^r%\Fg)fQZ<Z$jM+*0\rWi"m?m$_^M`^ZG1f9Vtu<dnF`fq[#q3_,QJ%QYTk=P1oGPO4V'MUrPg=rfau;JL.F
+%\g>I6YrUQafJ0POc^^rpg?,m[T$ceIKf,oQk)pAH7$"W72Kr_U7?KXq*&gC`:PFSj034&ria^Roa#1`BAVnK(?(F?i>F,]m;E9:k
+%(LqUe$KF.(o2W3PN#3S"PNX.C at toUug9mu!i`'fWCR2qTCpT78!5VotdsUl$@.lQE>]2YLpLH36f:l)GQ)S2.r0A.:AI7_rj9&`B
+%3h-Z7L)l.A9b,m\G5=aW`oBocinF:'lq^uCauadXgHt<"iQ\q43p-QHE/]3>gW<s_H2Zk*M!_,g%q1[$p,obUef<QUj[]RUqgMND
+%Am8MAl"n*"fZmF-[!T-dIah*TZfdA+_o40ST6`?:a"(Ll9Q3B2:FnB;*2KJqQ'-XMptQA6HoFWIM7auP4:*AFP)A.'"Wf.2ThGc%
+%>7LBVrFSmAhWa&6J&rMnB9\3CZH39"A39=%b7:Mn-1,6EbY!b8X[YtCq,u":Ot,nOYV!n]_Ci_3AfIM&cQs3&$"W/7/M-9g1qg3X
+%2\e]M9?(?.=Liac=4WR0Zod'_IUukWCq9/qZeVo#FmN#0<h,UXd*gb02.YoUMlM8M#^==?Jh4clOXbX`@TfdDON^A:U3HhWo3*.<
+%`noA5HbiH,O'h8cR9nR25`Kfj(V;]ojqLe'3NZgrhNlt at Z"n?*]s^B*CrO+k>M7,e+sN;ST`AAeF"*s8MqD!0LFaMS\.WS$Ho$\W
+%]V;L^"A'?kA4A0pZ0)GYWrsf;,L1"aa-KB^mdm,1P:Tb$'9^YKX.:llAHH?YIMJoGek,;YVPKJ%s394FG4Z-#\R`;akGT?;Y*/1_
+%DaQG at 4Rdp\G1j[E\=rFn9</O`8*T>r)QCj^eP=e0EFETQ.Dea%Q_utMWN0f<X$VoR<8^!1A@?PSbG"hX$ZhhsCsmV1XX%`WZ>Juq
+%eXkMJZ4XQ=-+u;-_,V*r2M`i88ruV7U?Z8-;J.Fh-Z>&D`GV*pCU1:[*O=H^YS/"%hKQR6!Hb?F90"@?E0.OI:KXDI>?nVk!+*e5
+%a<_!3/Ik at lZt^.m3ju#2/pY^IYU.k+^!NbJCes[pf];i4[k3+>5Br&V"orgJaFaa6GHPU=:;^pd`i_-u.$DJ>_7nOE!HdFb(1!AT
+%%>p-6[E8ue%nkp:<>Umg'r7j5qkVr3i*-+`Hd?QuP8eC`1c=%%l]3=i'4EM'MW-7DU\4h_lEh4:Wq)N`<Zr42UOsic_dP#WY%0/X
+%=WearXBq(u;h!"Ipi`?E#6DC\We-`W5"9Qtmd5&]R1o^YV!L"T8pE+:'V)?@EO20jb/T4rj?+fV:Yr!!)+*fc9BT:@M;?%uN`1H]
+%a:GZ.7H'Tl/@'rWLP$7"n_&EIX&_l<?lr)0i8(B5Z]$O,."H#Q=qo>389/a))ns0$;*XaS^XjJFOK:\SOY#s?)pXl=VEc:dJOq8P
+%mU`$a>qdh45Kh06O214APUuCO&r36H:(Bl9^drXVZ#3Y,"<RW:`N''@<s?8;VtL,6JK0G[2GQ\N!/JckC,G$;%`N%DGFOCXrkkVR
+%'<BTeWGNh6Z*`l5"c#A5cuMi;Bhjo..Sbr7.TeYBMbHC%4?Ph4!=I+πuV%u6+eCRK&!hut/9``?Ur<S^mm*[an`-?\c`J4mKm
+%V(KW>SANZ[#o;XQT&%o6U"knA,2q8V]MTgciqY3XM/iPd6[s-1aaHENW/c)EJT<a3;6UKY=#!.oNgu\T>p^OXO(0%Z)@DL'5^l8b
+%6IKJ=!dlH*_3.PuedO</X+S!Z5hc>.EPLlG57<X/F<r,G*msuA+SYJ]UQb at oR3_`j"NsY:M)LOhf%X/t`d+)s4qrcR'o_PEEo%Ds
+%]?+\6)p]3<j at QL390e,RQAnt3heIq\gtF.5YV&YI\%VA7Fa2tt46.f%LYtIf%*0#gE[aJKe7;D:%i;kgnbB]UI?*UJK\b+*4r&cm
+%EZ=U&,gtRA2jF3V:<C7g[`gC-IO>4#)cG[8#K?f.dK<eAJ4(G6eNJZ9iH'qlN44r8"\DP4c;*&VWml at qb<sDfB6O[<4Q/qr@)ln[
+%;H8_R')6AXAN:3PcXg=NJmrW_Y[a1#9.^0!_VugM4'H4A[/np76Y/o[X:j>pljl";MWA<f`DbE``*1T4ie4I'@>ggml\YKA91Xic
+%SWaq!_&GHt.QBbJ<9uUpr\<IP$E>P^3 at LYYE+:K8(V6n3f!%jqRPQB?7KsOJP?$X,9l`g]P^l[e%+!@Zg]iY7EJ;r%WCfT;3h)s,
+%CWm0L$3HBh=*]BBDL04#]1T31Or<o5>rhns7YfTc[N!e3(;-PS*Dm at liL*r$:1F>]'t84p9\"5/!?h:aPc0CeWXW)IWN0nU=URe9
+%+oc)R8RJ6/??*E!PPZJ*UJ]$a&?8:7jM&U\LIJKC3_+EqAKHAEMg:G,Co82HAXublUA#f%E`PPIPEK&!#V-djIIQO>3P'SYlIo3O
+%?R<$C'kDE,<:\*[LIH#l>_tWSLU1C at P[]3%FeQ6(c/S6c2C*)H;h&8?AY#_L at 0*5W!>O1VrHG8;>SV=iOg\b#b%*Nh(`Y5<(X)TZ
+%2?I:gCgJ at oX7Cjt'.=`"hoY>_B%l&BeaX(9hjg'eAM5MRmq4S34/@L-<*VGid\R&LV!cMt"cQ\]Sjh/I!lf[;*KHmSAPPHi*@Ig8
+%FaHZ9==l3t#mAM?G6'0gFdm^8Ks`q:4^R8m/fDEkR#mB:+#4"+8iA[UGZceAQ4#M^DNS^HRp%"M+Mg2]ZMW],iUB#W+3mHR(5f\e
+%ap\n4qUnV-*oG"^%4b#.bb&o#S._GO8,2W#%A0;jK<crg#L7Y;8g^[LkQY6Q/B'W\X2$TDbSdTYEBnfV(G]BDC\DoAc<nka8IDD:
+%:m*d5f]CF<0dMYG,_H41.^00>5QVFaVlG7WBg3Y_+./>4T!nC"*9Vd_VS91<S(7%"?KSJg_ at ISE:BXT*CbaH/k,M:`j$4U&=uA`A
+%@m/-j9>4<sdYR:r4crudF&'s\n<tYd4-(ZC:9bkojT)>r\4bs.$#\!j\^I>_,4lRY7:2i@^gMC!0V^10/f4&]3'ftoI844(_h?W&
+%_O/9f4NJG3N\!rj<]:s=:G#&H^;*7afT?te(XAu:C-A-!/>0X.UE9O4n4E5&+Eg=T]0qnEd?eZ#\<0A[B_EIC6eTDg"CCp(q<oX0
+%Ed"5tE(6.7!CFt%7)oON.a9FtQ_aX)Tf=;<P]f:^;,r&n<WQTIq4J[p(=%`$]L2euJ!Z`8gQ0o!AL);XIL6'E/82rK.>'r*!;(:;
+%3iHskfQ/u"+!AN8aX_l&HV@(uG*=+Ce`.u2ZB#KN_9:OfZf''A<tiCG6CmK9pa-#O57YJii-/tbA)Ogeh<P1_[3sSd;KdcXY<\;9
+%9'jnUo$;>Lk&;cWF"3Y1,B0i+A+=W*ap4,qO, at 1aFk#&K,kjY1n=16P?.uSZg"IWc1Y40h0qh2OKI!t]7G=<TO=_Pi;2^8*-/lRk
+%nm8T/2W at NGYmJ"c:\')f+;!%rZLE-=#AP's839qGVrJU<.?G5!TFZlc6WIcMa<+-`J[8F'E&NeT8TA5,S]oMB\#*%FSq!OaYoZZF
+%'WIP_oET#>3T>gASCTWTI$hlbL,lf@$gG7KK;T,A/uMYU*_)[0i2^_S<N^W*4qodu$*aVd`K;o:r`lX,3[dMmV6l[KdbX)YanI*5
+%;+#RSQ-,iM- at h?/60aT;O at aCcP/.peIbBX(.j!,ML>3f:l_G)BPN&5/dh'0S`2na$d,9CdQnR_$]I#X#$ll0o_'C*21cL9PWfD?t
+%\O'V2*nU*S#htW'RJONjSINVUnSpiPT4+"ApqRe9!>F/,$7&GI,p]<H4&3iJ92#\Gj3rood-R*HI)Y^;J]T8QJQhnnAMU,>S1;)n
+%SoW`YBXh!&$:rcXW`5ch<"l9rY4!mu2/.\erb$*^];u\YkXl]`Tt+.gR2nItLMFe.js at u[Lp7RYm#0D)6ES1/1<=:V3[Oc"$K>4^
+%ahgS]ag#3gmicn/b, at F1*o<VA2`"GM6Qt6^69+j`p\74p<8SpK4DS"63>Au\S%A"JQKu9+(n,"2:e:+#W3T9iZDOFn(6>ahlB at 7X
+%jJ+c%*@J&D<3CBg1KXoS,\nZX`0eMkb]B9UCm"g'LgNl+$05$'@SuJGZusc=Z:7\O<CNjMPi5nKQ\)pFG(<c;Ke+(D>2Bj[llK&$
+%%e:*`;@D6N'^&9qGY,20l^CRihl2.IIQ_\Bb2fO%e=2n![kUu9*"Z21Ro^h^MO at sj8Zl)#TZ]HKB_!YUi^hV<'S5 at GfRt43X,Ph,
+%2C+Dg(POn\.3i:n%>\RB(FLi\oW+\1Wbt-o,-CZqEn#N"e,(OuY;*usH`i%s8HuIq\Se/#i<]mR,+T57ndnBEgi%5F-4)n!f9,9_
+%^If6Mi<U37mP;k#N]rVuFUt/[X-V?$[W0WjEb?Ls)H)FS/R%T(L#&8KZ%cCmc>bmPM7e7<Yds>@`*"T at D7S_/3*7C<"r2K)6`P'J
+%5jP\R^SV!&gG1M*4=3Tf'EG%IR%6lQX9\f`lDhGZabObt->$=F65g/u#Di7UGX6q-]JbTfnP?t_9K]F:oWD^0X'[,DibAK`b3(gA
+%9IOu=eBc;4Df1DkWm:P'HZ&.Xoj;j#2+_O/)7am85:B)!I2_tD"&Ap_<ShD\P<r,.\HDBF"!Fae;F*/X2^QCSpCjrb_U at bBm*X9c
+%DfO7cH+H%K0`YE at Kfr*[=[gjHXlWkq'ko at Qf,tdX8!sU';_h5k+uVF[G$!=1oe(22C8f6E(aWE2:.tn4&^QBP!P<A(K23lT?*b%!
+%7dqM^(Weu=9epC1KfT_p\`'\`aZ?:;QFDWD-cMqOWTMM>+4XNokJBdhQ$jN950t9#.=2=<Fa+_7BsC.)N\rPZ`-6H&4N.VkM+c#h
+%%RgjP\>rf_O>[kV.!;Ptf2f"hmd;IZ:$SRF1N$/T7dE:`.]__gX#@:Z+6J^-+^b2Q"d3pSg_YCZk!lMEMn]iOe2b/;PXV_rp]6qF
+%XQ86rN8uF5,E'A at e?;_;<]/5ud=s,*[OeATK]d at oY&\\\&ffjoNhVa8=3iXfTb(O1ruhqCQaP!@XV.j._3\]*Q564=LNt;WZk#rl
+%1RYpQ`WN!/b*>tg at eFCHH]/+"a5Ma2OW0G-)U7d(Nd)lsP(eAr_DXDkE2ldWo;$7GM>#2hB+<Hrf/X_1(YSd at M.Cj6'mlm%%4WJ`
+%=,+4Z!dc4d5_:O(cr`t-m](@[H_JSSI0`$_i5n$1M1([978OUhi9RXr/Q+F0NV9H^5W6]ic>4(4DE?Iq7?.2^('4=u>e0lu)dH%i
+%B3GGF,-A]U.491K&lAD.N6#bq3('=Kji03^Q#2i'"Nkp#WJM'b+4kOKlEF`8`H+\<N^k?d'n2FtZ)t$7(UXNL]IMK?2Te4mVC;]p
+%b>V]MB5LC]@Q"<a6*XE2[("-$b]NH`b'6H at i[L%g`p,M*oXsU(8N"%?O%ACZD>bVBCp78W_mYGK[-S at CNQ;@S@?f`U.gB3p:RM\6
+%*#O4cZH-Hh.:5OBZHX"0^.cKtd'P*eI!W9[\`5"MSrBA,Q3^SrW`q?jrbQQ<GnuLoY#<).OBP<>^M76-,,:6T\&?Nk/]4MN><8S]
+%$J7&cHCZlb4Fd/:Z_FP+aaM>G-h%*<n<KT\JT5/*Ra3(P;dDrXeb9PP5#R8V%tKqUO\[_n]?^gr3=;rqM&NUojZ3INr;^Du'L`-J
+%dOGYHn9X%d>*`bp0sK3g at 5@EFk#&<U+MCnbk"@LW4th45X5&A-ao#/?T*=U_6<"[capVSjcDSg4Y:uPQEG?79d0jj3/t&K6'lm%6
+%Bf411+>HUa0KYmX$^=lK^ACBkR^O_?2_SOEU8+B$H!BCG;grR`&J)fQ-4*/+Tj>*7XG at h)>^!F7fEc5JSI3H[lP.,n;Io<s?k8nM
+%]A$/_"I0=t2j.G:_I at -:)=B'$Wt;h(kQ2<B;Za.bU/VG*CR8)Q;rjS]`G'81U>unXWD+/p%]d+q1]GfS-*nQk4hG\:\C,HA;fTsr
+%'KcZ\#)fc"G]`W3m*LhB,V.Nd8h)^4G[s(`mPZ0G0k01g4UXsh3R^qWfS7!/;Tb%O"0h.J4?6&/l5gQ-G9:2IFQcF7(f_YF\q-&1
+%NiH!<eY?[q/_6*ddF&p"4 at gu8`)QPTJ2\rd-Y]nQ#<;*rmRNpD2W*0E@)<QG(t+CTBpsZ0I@`)A'7W/I]K?MTE6uD3^jZL+.XujZ
+%j5hhLCu%eeq13sW$R\`jn-H at b1at.^;Di*3+3%8[maB7.hcX8X4?HcI.f7q$>G8414,.Qp=pjLTgH23Zm'g7ddYk=T\*[#4+h2cS
+%ROX.:mpB":M5N8])VLiihblUaTEtlOp?khQ[:1o=B>RkQdZfd">76[Zs%rJgf(G1UJN1e9Lm'#_g^Hg,+Nl)$fK<:<T1b:l:_PQZ
+%/Kpk12XqXmL-YsmfRZi:"?C<]"h,b69bJ:7YCiXVqfM:;ROcH`7;n at Eh/g1N92+$SU,PN"a>R"R2p92U*==)&1]P.m8h?U2,,8ng
+%G]uj8[Kaq5fG_8GQh0\`C8\1.Br!$Nmqi.5nW4:7O:J_q]#h4e@&&E`"r&3#"&e*/M:#pTQb'h?&Kk&)Rk`0Z/"'$K$**Vi$A.7A
+%0qpepS7O>sVlHPHP7Yc()!Q:]+YF-TE3YXaEIlg:\ab'5 at LDA_pAHm-I+)mO,gqoOcCM+(@RS*R]n_OD?A6a#oq^TjD<0HLlJ6!e
+%A8;=o`@ninJ=FSGKMt=Rl,FFuX"'3o]:;kNFn7IUH5cu\F/O#2""t[3Rp+<]`?BuGorUhr^,N;:nX6Hp5jS7>Cq&*lPQ=T=e:I))
+%]Bm3dl(fmL%o7u7,&OgN3?9`!1>,s+7L<-G2qkd4I$C0HR&o@;P'#AaG3mY2Gs!U!Zn%?1N4?:<]p]6\*a!uT0MQ_#Z+:YIMPB=6
+%!gak_.]HBG$V;teBtHq"A_dF*X?.gk.B7IO97cB$,QbJcaFn=$Cgj64a`?l#pS-*R,YZ!;p&r!d#IWqG/o>Km5u,h'#JXf(cRN`8
+%]3!W6]-S?h9Z5KCB$6P.,\.U<oZcC5IZ;O^q`=$I\<j#2Ul9O at 8t/[i-X]et-7^i#EP]qX.Y00%ffE=KYkMlsOgL9^pB47HDHS3?
+%Pmh5fF!.JR7Dc9&hV'<-=!G^hcR\E#2H;JQhfa(q+F9C/E0UXpPRu`I&<fMC`N`hOBU56#`V$KZ,V%lR,`o(,VFac3P/fKAEjq_o
+%fX+,rf.f7'n)3G#_B^au4.9WH6L83 at E"%SgL]FN$&df0f'KPhbE(ko=+Q-E^X%?a#_5ek%;K58 at -(3K/Bh$)SB"%(e`=LtXHjc>=
+%Q4-XoqB-g+<)d?TZSFs,;,"EE;Q"nC,fJY>PU7U(@T+;k$)$PL1.u7FK_%=MAgISe$f[8P/#pk!B?;\d2CuiH.'oBt/!Xm;AIc1B
+%o=tZ%\Y-7+jPX.,EtWh*Z812-F""Z$?rrb$OhiO0V*;K(6P9t\N=-4#)>[2'`E%d[>.WDnE(qP18.MHMZ?sik"P$dD$;!Bt5\QAg
+%)UpF0ZeX2*_+aN#172'(S\-f'Z;g>XNr/@R'76`\[P5PW'MibO0M%pUlYc0!nuTFR-@[.mFIJcBO\D(kbDe&Tak0`#;,1[9PY+P<
+%MTVZEEc&MuMJgS8<K31cXCp$c/='pL=eR46B0SgESjf8<k1E+C`:A(Gb4H at s7ki]JeE6f%mSOt)DJp^OdCrloedIib$f=qCiVNWA
+%o#^d6`=6\!ck,0'!?*ZdXDV"G+a604>ZS4Z[GeZ!;'5K#n.cn"*h65Q^,&R;_if7#YY@`s*LAABg3Obb!sRF%QsEg;N?HcHZg3AC
+%&$,s*_2HG.B:'kaXV"WjO$9#\aTRYt>a/eh#"e:66 at 61CmI72p$ut[FkJ0E%[blAO6=N'VBra@`T!W-o:+SZ`Og,[[<s7I&NZNlF
+%^itn5J4*q%ANQj(8;]H=nW.FJCc:(;670YWC^*I.2\q]7Hf<Y^ou:$Do/2!5)G>%12_ at Bg'qqWJoER=W1r*ZG>>/634?r(Y0R4n@
+%)""UX*;h[J0F.Yh9SttaFp$DnHl7IU\+$CcWRE(_GlUDK\tnD'C[?n:d/'.s/Snd0ChaX;It(`FL3?5O=?OT;2gQiLP6EUM,8a0X
+%Ch[$8#Z#Vm.]RqH;VCQGWD7>':V-qZb?i!fX;R,X-JtusmP3?'?r9h\F]4QRZ*dGKER929mT&?t7;Xe/A6gRnh&7*aa6dfu6k)T(
+%O0$G9(,lobE(EYSF6[pl&,FdB+:_KSaEU^#IS/3%3CK&SGV=*FAt/ZhBYc!\Oh"&6Ct[?@@1Vj`aD7l7Ou01>LMNpB]Vk`o]%eo%
+%_eqp9g_UJFCHp>Xgsg:X(Nu"`D=\3P"Kfj`CJSW'-DQ7IV?5L\IFPDfG/>GZYWlLD_5(&A="W?0Y%\@p=@^<Pn_YBKG&A(#!B=n2
+%=Q^sI*mUiG:B5"WQP:`GW+8gm1#W3l;%,0netU`@b/1''"Cm?Lhf$3D4d&86QmE4GCoa9$a(u]8`:GR]VKQ39a(Zl\d3"r>&CJ\D
+%/Ts.L=cf,,2o:UBb99X?Ebqu='rqb;@aVn_RE8@!*hrelE>jUi+`)2W>QM]di'.jqQmf-tODo?OYuAL3XW;iP$_ at m_)r#4F>!0*[
+%I$K^mZpWQjBKaB7kpR3\S)Sq`C7U]V_4(K:0ZNMN+^Er8l\idtBusKug'"oYTU"=oB8t&d2c"kO9d7!TCi>MpqJc&46'pW?:J!RC
+%*=c>MO*^tZXKml at Tu7%1,AlggJWd]s`<[mI-idAc-MH^E_q:7M0\[afPrV"epf06Abe;85VT=a1;]"C?Z+b[Q%Htt\$!);3"]?u9
+%,0f*;KDdfR"8[\36l'@Kn=fE:rVfnW>?]SF!*B9129YUdQu#N4?N]1,!b'n(hrJ/jdD/hGC9m at aO2YNCDB-a'g0U^cOoeBdHU'Y&
+%M=pDmH2hjW"rr7k+E:(qL3C,fQ2!7, at GF3e8$4%/W_M<0\DT]C^kWa?4H9l_D.WK%]Dbl)XRRFNYWJ3PK:b@$RaaFej:Jc["2SfE
+%DlZjF*erE5Skm$S:+Y$%Z8tF)]cPIC*4?58(K7Vfg[#iT7DR:##.%a3J!REWQ4:+c2\NT-_IiH^O2'=TccYl,&%d/%[^7V-_p,A<
+%%VdF>r1j,XZoY&N@^6\oV6W6&$(]!X:'6he1_%71#9QLT+R?Jra6B at Wd&tk!%ZPi;+Mt![jK=j$f](8/*A1C-8;8r^'lcWQG[Qh`
+%W4<nNh<JS(/AF7:ZeFC++bPpid>jZi1E*\6n5[cfoG]jm&#`C*[2 at 5u&%`0c6-%*h::ooei5L,mAu\.K-0tg\5s<e]5Y0"ASg7[O
+%Y!ug)0poR#@O^?+nbOf1,:L//]gLJO?"JP`/RPh"JU:j'G=c-B..+<kLBM]p9'Y'E*0VAW=Y0mp)LSY:Yo7]a;>#iB`=TZ(oNdW'
+%p@!BL:)g,J[SInQqiJC1=\%j\]AXkK<A`kY"I=a#=rmBQm'g#=\ZqDP+dsHY1siW^G!_SNP0,. at 6U?GXH/Bmb<JfR=`/D)PSoj^;
+%MVV^4Ui>VOnK^Q]&;Zjse1B@=od"/[i^'&&'q$TCZN;=9N^R)EFK<jlX4hpQ3Qn=B3%!)j:UgGBH-4&eP?!2]A80!3Fc&M4Lnhu`
+%Q=XB.O(5YOl6c-b#_u?;2\8jAb_++e=d(KTI\(*S$`^^b>$V?CiI:B7ipmA/G7OP:!nC32:+_DA4?hG8f8peL/O+#fS)PqrN8$=d
+%m_E8G^3pHQ\BMk,[Bu,Si?EF5WhQ"u>^.`$Cemm69\j,dOeV.,_=qB_ih0hS'C_aKLNJXsV4]raI8P5X&m=qTFh($0Y`sP8imkNB
+%5 at bhGTnN<FG3JMH8 at A-.AB&VI]V8T>^ep(_M9W21ABQ:RR,#jMAjcU"C1AFp_KtW#\5;h7qYB4u>IKNnmkYs+7"'3!O]C'gnTn%%
+%(Z`ai#u+f=22'fL6^HW"YT at 8FD"r1[Qtl$/5,uYPJ:ibBTnkCf9Hi"b*ZYc]"U,&TkD?+Rl"i_-R0E5UlJQ7pl`(G8XD;*t7_sV!
+%.>88sfIf5fD>r57Fe7]nWAo]CZU]F,ZD[<>WS4E;Yh3R:CBd^nrjJtWW*7;)f+bQ#VSJ+s!]J0Lq0X=Ub,.6#]9NWReAP@`3ZS=k
+%TINp%Bb$ftg#&2Me_UVok8a1tV:rq<jscs9"iE-AdRqp?Wk(c70foX_TR$S]L?]jn.@,p4ICmis1bP""@'LX2-7/anq%A/p/HoAU
+%<Uhse?m_-`"D>Qfa#R at h_P7$_V'J!&OMt>IiY!U>]d2V`iEuoW#_/7d^2G5jiH7D%&qsgm at nY6@QGFd`A_#>cZUJ[e[B6[5\@40V
+%L^?-oc at -i+FG"+9MCl68P#e=2f;gcX>JmNF2JZD94P679fk4`oYe>WI9I?4;i at 0TW4N]q?[#8'=a%!mSBZfY0LN8)hb=DMr"S%U[
+%Qu,rKTZ39JFc(SnXukD9GHsBX at MbqJD@U%4c%?H_ at 7s'8$ZoqVKHYWs_(_[>%M?!uh3&nC.q"6F,Fd?=!?7NFGmN%O at .b_eg_C[;
+%,0!5O+A0%AdFEs+c,2J/c^H]N_lUhcda?aWlq7!,c!#dkhD1;L5$*=L++R$m6!)qo=aP?=odm]SFbt^*4=/oDeK(qYfP3(%^(+^%
+%G+aaF:7$sK25tPeUNm*<fr5^\,r!W)+>BkA6A_KgfEK%KFb)e!%4R>s<,8+;&I":^fu<sBi]cA,$khZ at Xm@5Q*D>+g"-W^RDOfLL
+%jH?F=J28##l.`3B!?2Wc]C.p$'hAfF#D*Zt41S!He^HPoRj\1?o"BctW!U1IZ\+?/-kTX`fg/)KfZdOEWQqiB`>iqHmou\$hFUbK
+%'STr.k)H=Lo5je&&!0XbBu5jT*-`M8p4cpJ39\Z/`iH.Qg6PHWiKj+(4=`j&Z!@uo`H`-@%%kMfmY>PrF&%+J1-[*J!Vf*g7-3=r
+%8E<?Dh`NR45EpE!/$rYG2?:7.'<Ldd9*)u%C_J=L4We`mD9"5j"le)B7`j*g&F24p[BfK at W+u5#8trBOKW<'6RU]H[IUQem@!>5K
+%0'%D'4=\NJlsXn`%lmU=>O4$KE*)/WZO5pWQ\itE56*".0,lXD74AO9Y$`B\3l*XqV&RN5K&l4Q^;d2:=!UGBL':J*1_l%Fo=)Pm
+%JQjl=`uQX*6)6SR?RJ,BDj"9FLPM<*q)VED4dC-K7B\hmWtiWdF'VhCM#f.Tf`,'CoEIUtZIR8"1Niq1kP91`FZg78%hFhWA:AC?
+%C- at A\fBHFAS]+@)\_6e",/Q<Fb%(nUAY\gX>2VFBoq[WA@&_Zdk$:):"(d^jW#Qs_9r%%]m-.V6$Y/^e#Ic.2P&\+CR\kPW7FY]@
+%Z$Ep-SjXkI'Mi?&hoa\nR=&!t:GQhNl$*^3 at Q<<eo;pN,&PP%L88%9I[^=#Q+u%fPTS[]>h:d$2),$!(%\@Q>Vs5a;FoeaBeHfF3
+%A]YFH\.(liUj4)a&_L\7L*n*/ZaM8oA#0>?-:YsUm"*NYkXY=`rielCATmRuUPoSV(T[KJjE9`7Sak95;+5RXM[p&sp4Z.8oB]]_
+%#A4+KhV&e#'K7WI`'L+B%DoIVjhM1.JI"GK3`hFI->HDESBXY1L at 6Ao*h_HJU-l)Tc=-t&DZe#R1U!(FT`k5om:aMDaAPTU5c7JQ
+%At1RS4(aOdD$1tn7]a+>ff\^s>33&+LM,Xp]cgU&E"YT)8XhK=*j?`EA%9MJs33QUgZi2^n%t[Im-pHG.;Y;\_Gp=@C*A2"B;Yj!
+%m;RN=LW[%GL%LnFSNOs51%@-H:aP:kmH!F.oB<Pl)mEI*m#<$bkTj4AIHMRaQnW-kn4R'4CQ:`-/t9J)hF&]eKtEdukof">2RAp2
+%QB:t\'$Zf%)$Z\/".=/0TN&6.HkWAQ.Qrh=2r4X]B9AA_ at H;=\c!&2.fX9+Lm%c7l@^3]X.5P"/4RFMr6oQ0(FM_Cn$nK02-5MD-
+%HYpq!%BK/;ZWN+&C"?\ZMr;ohM at JpXg:uP_ at T(Bs!LGk8^M!9=/r;m!c(Z\d8?gq23)J=PFhAUQ!.5QCnEm%V"XpEo&5n=B7*!mB
+%6a7r&Z6tEY;bo_P%pSNmXaj4SHgEbjnc:6`k'1,'7tC5?f=5rd]cOH,qC%IEZe=$-=sk0&Ta/I'W,/us]9QAfRj,`s#s9-S48!^b
+%Ub(;!_-W"J--&+fN@!()g:=`O=M?'j9EQOAR'Sf9,m4PCGWl1[qA/c:ZZ9[)$MU+'UPi?^s0:7(Tp-mJMP]o#p*JB!\SF at p!m_pC
+%bj*-Lf(Td4Z4#MX5)s'/4`9)id2Y<+PcR4>$Xug2d]8Cf)6!mG*AOgme;9W5iBV71_t9MpfTW(6NT_&C9(4f[SQ6MCTH"3H&-q&-
+%>6bZR3ls<[GTm\'Fd[JV.m_?>aJ-80YSfB-("jUNcH1<[Dbd5N'5#r#cs2u79EXH5<08J!bVG*9afu#MdPt!b"?T&a&kP?CbMo6:
+%keuYBCVH4UAP"e[RcSV%hQq7nnt;Nq3)`0CQD`Z#;OGm3j;m7ckA>uH]:QsEBqB7K?t at e<;7+t#IhJi%&Hg>ujBPfh0F^8O>>qgH
+%r)'acX\R.ODQfUI^[&8?bJHIRiaL9D]fW03W"if at 9I;L!-0?aRGE_urMAJ2^UDt1oRUpUtFpW24ZA1;R4DuU:J4e(=-k_O4L0MG8
+%!>AoH5e7+M?-<XaF\oSU)ma"]$a;gW\jk#k![n]N6=`,V<6`^$\(r5I%u;b=/06@@m1(HZo+[@8#DI"6^IXn*LV]LN=8X]ghuSOV
+%"1aW@%>2uHOU*BON=@.8APJQ4NN5&]%P\@RS at E<W$V0UtA?q>^EBDfaGH at A`AdhBp*RU;Q4nqY=mDQ3;ZJbuo*i/VD"Z<s at l7pe?
+%K<g[Y`9MlCB,Hp<Ni>=1osa7]\u=>6q#(]0"#_uZ)#:1kI]!XBFW=geP16uZ\thIC,6,]DL[)9)gG:dB"Dt%D(icuSc3 at 0&S7\BD
+%=$k8,;RSt at IE?46V:qA1U[E0KQ$4k5djl_n<&MSl8:eU'ZYr`#"U<BHdj9"N5UB[P`!r&H2jTmq(d/AAOOk0.:3Hd)j$"nU>.NqJ
+%8?tGHKKCT=`KbbjMO#Kg6&jAkUd#t?&CX0Kj)PaOG\I(M!E2'!a?lF^g)]t/A(iFg)[(h(l1-f8hobfr$ium<cBb7M0=#cR657"W
+%?l2I,Qa5d$.Aq$d$_II$=fkE4m.S1nlKqLjY7RrLFc:-%4IaPHf'ml<JN@#cJ]`r/FUW$(Utl3&[ZqE(4M'ZA&$%3=aP/\jUHR=B
+%;nV//r*!Mjr:lXN2[LAa=\)_Slm\4d=4X%Te4BuRN<XH\&`_3;FfQqVN337c%X=AaWMF=Kc5Cu;-U-#!*]nCg42Ks#EX+=]2,Sal
+%#=mD6`4N-`i.t#-NfqOB%tSpnX]3%R\(tBi-Fo-\bXL(Le+n@@?chAJoqsW"G"V<\LD(XM<A.U#T$-C/Lfe6q>UGAZf at a0o,BI:O
+%WLG1O!H(IYOJu*haQl9NMBt](IB`]>Z\d?[4kkFD%=A#TWtHh;O\I_h`ooNag;:?0d\30U]="r5`.KVP"3d:tbX>4Xhf`SD13UeD
+%ilXWF!&-`53_mn04`4eQlmdG&WRr*7L-9rn4'\/#%h>+VU;JbF_H at OJ>:98I#.Urop.5EMntmrQpg41m;dH4Pfa^dJ=Vi]G"]r!n
+%SMY/fIge:gRMp>]FG['(P=(8`0QBt9&tfFoQ at FLF,dr!f\s2lX&:.Aq_oZM3ikr#?k7G`pKDFE-fI^Eb[fZ/?+Wd=pQY!%KmoRl"
+%X6d;N)s;B?P4VKb"2OP6TJ:Z,Nt;<@Hd7ZKbnM-?L2S4g#O,d^,Fq"ukhQ_FS:j`)^l+VQ4.!RYo5/i^]6><h'l/WfNEg6E79"ri
+%d4D`/>2,eO;ghMjSuaTerZuiiL7\%uXik,Xb%3'#kFO1i8Ah]94AY)=+m\RE,famIdD#Km85[m_E[4N9rt<Ha, at C<54*Q"^X"kpT
+%,n_m3#.+9`o@&k#!Ze;pjEq$>Ek)i3OA6R=K05:Za.a35oOa(!%)Te?cSYD^/C#3uL*OT_J#sE,oZk(9]J.8EF$T?LYR_]Z49CMH
+%86JFe6C9^H-am,I_TB&<FNPJ&e*#4;;lE0W,8VRaNi9n at L-9c8M0KOJ3(``n:EF"B_c1U(LJ<Jf/=@tLKeCe';mZA$J%YZUlK?V3
+%5^SqF:)[ILr=__e!i=9H$c(PI.1q_pJnf4M>PSH6e>cgc\)e2Y>B;fnZ at 9hUh3!u;>@]5(VR/nRrd^G&UDuCj/2s`l6%;Frc#>Xl
+%.[fU$EG\\d1B5&kG;f`QA[d at TY(2^!O?Ou;QLD at dUgCU'-S4844nfXU6Yd2*8:C-POW6\pX(C0Wlei'"aNFq'?rZn,VDW<L.3O<o
+%Q,6%0d5Kp`eS-kL1j)s\FAE3eO4<QLC`CaLXXi%7%brf1%(mBF[@C-Gfl6+.4l";!dP:PbVhAT&]l@[k/r%U())Po^DIUca]b727
+%#0_K'HBs5)AnisQ[H;iqdU!,A31N=t"t8r+3qKqpru]V+N<)\=rhSi7E`j/OU4aGDro>aJFq=(Lnrb^EK0Sht:YLXaCAB#Fkq6gR
+%gJ0ir?a<@CDFGQpG28 at i50UOeNU3$sT>l_EK!j6/G!dW8SqPFA6:#E*!a0]4^oQSb7"tPG`k(>TLp\IR.,YcRd:Kr'r"R11rN3`[
+%*,NmQZ93Ei$#+."@WGR:7))XtSk:k;ia+!BE$$U-Fj$\.;T9tR)RGuLl!.V+nL5Z<9mh/)olo6 at A=[V[[*@HgY7LsoW:#j]'V'?m
+%pR_,gS?(fKaEOf1Q:R.>=6X$:!-Ht`LA.T_i1SkppSB<0J7>'tl)+-$*%CT[pFsa%5YAI^-g^N\:%Rdb"IL!V9?CYq0%=1)/nPLT
+%,qFg/pJnMP-8UrmC@^V*d,kXQq:1%O($d1M"nbH%U^<,a1?ob,')Zk)i4`hC&o"f-Gc?PsN?CNl;S"8CA^WN:l-`)M;a+F&1D.jF
+%,2o/Ia92\oYSNecIMS3&Y"$S-B+JYUUT3MiYaaj@(_W?W at 6Hn;`GuLk8[,Je>.;%:lujJHp&tlJ2+!6n-2oZ?bh4/enH@[EA<i3(
+%a5mBXM&*'VOJ&^-:VYt=dBUlO_RE5_s)sA+7\]Rb=gqW('Hp%)X'tSD9=uFiG9]`rW(THVE^nJI,!esb5"&J'd.'(uDPgAm'8Ju5
+%*.rYP55`,/g<X$+c8eS:8mk'!4B[4"-RG"_lCLXe4,Q]dU<Ou.(HIpI#2>\/TeH/n^1!5e[k^dFh".+9VZ]jk/k2E7e'h^07&&Il
+%PF)+4qAsuuj8?m%Pgj5h]!((=Btlq!A?usS!BBoLJIsp.f(+h8\\XDAN#0ns%B(71;G'"fQa;T at S?`6$Jcfa?f$!*#fnlg'.?m)d
+%!3_=sd`<pMdMJk]R=ZaG"-Z`JL%9*Ekp=t0m\WJ>N0eSfmj,mt&='mu^5Tp at h%P at PQsARhWn!3;ieUE\XTs:"$YruFHKFJIE\X[+
+%La0R<6#_C[.:Ra55.L](:G,aCiCJ4,F^HfWo)9pi1H*QJ[cHe8k!u8Z:n*ho"^<@(;UEVY9#M6`T+C0eP4[GF%8]4N>$kS<]\2ZF
+%-P!")>(UjS'#R&<?>QeD>WV9')AghE5nAhC%(OCaI0"W]]JsZ;ES-39V9q_(V3]iSa"4YDE\[tb$@?2?]pE487L=aABA"oS.GJdO
+%Mu#>-as5OJd1#gk\bqMQHPT at JB;Ft=HQj5HST_UHNYXosjGDsa#/Aa#>)>Ol8BuWreZp)[D(.ENL(43Rp(82!r$2Li:Ia7=,&E[k
+%:VZ\Q+j<UXCb6snjbOA1#PR>3+`+dr>pd1b-i'>2k!Z/uR+Xe2DIuM7P[AW1%@g[`O;SJ:dDgJPk9,ZcdX1or`q<J[*ER4D[M"&t
+%IRM at R9O3i_'?UCm;SLgD*6;kqZo=K6A%!<LQgTnM1$T67X:oe*JadP$RQ[f]?CU^Q8bV7.>JS">g9W&U,ioN<^KfOf^m?R0o`uhB
+%pTS_.a@@O!LX,d([F\=->lJ;T>3^?JTds^ueV-'G<L;3'WC5uqmBeQ`%)4X&`k5ZhE9hQE%_JM42G`g4S+FV^8r7I*5$0C=m\V1k
+%"?8nrKth[QP'QXG(2O7P[Upsl(qc4?XVN!Tk<"jq at Y6R'MS"(1gk.3d_C*B_g$['7=AXWk+,X2d+An#rT\&i[e=8$XTaY_qa:[>&
+%YX"\3]PXuJ;0..)[/u'(8(]D;3jkMp6N?+P<_o#n9Ogk'*a at Sh/\`en6)r8A=8rKs/[-4G\/[-6gP"Y2bQE58jA\"7f at cm(QIPZ0
+%NTqFTn*CfhT12=fbO,6*durU#JtEI"U9OsKd$E<;ap[+W!WtZ=h$N::Rcq$\7I!QY2FW$&Mi9jk@;/9T]FXfl>C;?#^;[Mp0N7O-
+%r+OS7!n;q"/+B/0.1S[NIgJZja%K0"N_4S"$dGiER_[mEMEbZnP3TQ<<sLKo_Mg7HcBkl$kQ%XF>QjO[Q?MJg*^T>jM2OVYFof/-
+%RH'\WYSs_u<q^F4LP1Q2mOB7E*6OP400f2j?J/)4nsY_(p/1E-;U+C\5%`XudtnUU7aPblT*X^?ci-i!(=+$uc)j_F;K>dk7PDmF
+%,Ot`@P[`qeFi^PnM)&hF;"i)a-YY-iN[Z21!\0CE92\5C<)0DbZk=?aYr#BmdoY3AFj6tT/G:((POdC=AN.si+F(6ZK8["s;q`rJ
+%aVDp*c^n(#(RaPA-Ta$pWr*QuO7/D+K(?D)q at 8he6jcH0?M9)!S8<Y49bb'Wc6d<JCi.p!:8seuJH>Y[gP<<eb8V3l`L^Q!Z?*U)
+%Fh at 3T9CCX)82tL8p/-IG^4#:AIK>9MKh#mBUZtkB*sA3#c>ub,[\*/j-Hglqk>PHBr>gFpYD2p/"LlmN-St5LQcaM7ppbJnq%agl
+%A:,Za'\/Puk:il2^rXFZF"]7f4N at tj-!)OPA&DnSLp`D;nnr:-:3YX=nMWT[J1IPj5jqJH)I/A_f$O&1l`C&DS<Sl.4tGS@'m6,9
+%?_Q>C9&Bjo\]P,)_8h<C!O73gNaV_5GMP`[%J+Wa3BfUUgMso[3%rN3qIAV;'FB*N:+SZ]i=sY(31m'iS"k;9<J*H2d::30^E2aP
+%o8[b,OPPC%gTFO^G<`pKM8JFq27(/)iZ45iIG7Mi/_MCfZVmahl^-4Q;'l/flTDDqUIofT,Jhqg\(=B0je)KaQh]QcT;:1%SSA:l
+%U9IM at k>eDqX*G=P'hRoW99^WnX9M-Hp`R?L#Y8jdko#Y3)'h(_WX?+f&k)>NH:aMk(1ms[ZDEYi,M2Y%h&M4%<ck!08h`>LH"&b4
+%\Y;Zr#tKPo[F'^O*7M>FE0T88M/`nS8VQ&gdaa7HP$76r;hOjUr+ELeF'h=\&1(5ILat\63 at TDtb`haZ)1nF^3jnU$VeJI>[\kL"
+%1.\j?dgl?tjEr$U8ichd$"7R9p0dHk9#>U`VgucURJ)XE5pga4K)8L'S?0s<ak6Kr*/E78"#O':3%t*NWuUjj\HdpJH<O]#5-11A
+%2eTc!g3Q#4b?;S:B$jCp;JXD_q9^ID^?:^GI\eT1VOf&7:K"_lLV.Ig)J-Hia5.9]X/VS3J"niak[foFUF<BjeRZg.ZpBS(I$[um
+%>o9L.G$$-3.?eN.JXt)5nc\N.E^Fee+r_CugF(P<.r[MH+OC(aBC3=-%/9C8NG8>4MiL%pXpnBUn&`Yl'<%/iIAEUg>>0>8#4/lc
+%7I8;_9TbcaO"tmRH&,Jq"^>!?UsH&?C5MMJ["%pCWBKmbF\,NkCfAG.O!9.Z<kAa;/T$Yuqim!_H[+[X_h3V9W(FW&2q2tm5t>mu
+%cHN$+Gs]h-:P0A*Jl!)>5%([k9ARrI.:+mT2+ at a:@>TY0#j^L^5o=n9PC8VH\- at 6?ZWp,9*`uiM3uB.EQIoTM-V_\56j^p$d5t"B
+%#ZPio:sna->e=Nhr;MGiT7+6-ZeM\c0l7A_T5:H2SX#GF_&VT4i_&JZ5 at qeB;gc9D0]]q7</&%J3QQ)7IR&p:q^CHOn"?_Q8tfW2
+%(g#7Oc%j\pif<=i`muVl`lV[.cr0cm1qB=?,^_8[Qn`D]ilOA^TH<g;K%(F>#PF:FKbDL?q'Qp-N5pRC6;Fk)[5FU?eH[r:"/tO0
+%k79"sK<dD.Fir[=ZE=Bc=)drJi.B3Z7.T1\GoGT.Rk<3Vh#AWm4b5]u>*d[TFS>Ud["@m&&oR98K9'mh?9:tm2a$Qu&\R at lPY(NX
+%pA/_anhMr^2`aWk(F0&UGGH4%-'rdWGn(`h$$Y/&Y>e!qh7lpl`lEL6gV2%C=Y3[UqaeA6H"U^;#U*fhrN&mUAb1UsA,_d(QAfgZ
+%)S6phC^=`JeV>30i.'>5'r3nFHF[%lA6M)b.)C`5#!4QQb6lFQF]Ys;.KF[rG`omcgQd/ORrqkL^=G)ioK^\nl9nE*mn/bAB#pm$
+%hgp6i at 8udY5kt`+>."o\b]#i!_dXl.Q.JdO[CD.l\g<$%6qi1fZjFd*I(I'J_c[%e'=WSQOY5OnVXUhYNOAT@#is*+#.W6MeG""B
+%GuD0.;c7Qr'9"hQ3n!AC:%a?j6)3a2l:"c".GSHuA6^VZRp[Ko>&N)=@4"/e/kl2%#4#9NW29]'MVrld`VO!#C>_;6PhJ&EJZ.\+
+%4SpPG`RpTS1suqNP"d'G5pn6'e[TNkY'3\Uf"c0dR9W9cJ#S"R^T"$#@p77 at d>>OT)`7`75Srn#MochoVs9rm&1FngCX+M+3m5j3
+%8.<;GN]i6Ci#FndYG=4a8s1n#!2g.g3AU\Ia.0EfBY[F<VDUm,%WhVrDK`g;mF6fgh0i5GE"?&8ljoZU)h`)e31DQH5#oYq*9h-q
+%jRq;mOb6"2Y9-Q7RC*\l3<;C+M<ACGqX)%[f6UP%Z at H*@hLbO/EU$YBAlc"<!263kK?[1^6J_"oj[`3W9S#[s:C/tXo",a.;i4 at X
+%b86sq;'\,A'b:[\H,LM=4bBQs.$l8TE)+8lX)kgijI=Wh5rJHdG.^GMNCI6L5o3@\l^<M0MY/"Kpe@(;JeGS`6[.\S'Uc.3#2-2j
+%_+FUGba5b45,q5b5//5',hEnN(;/Loni=O5:2V_A(^Y)(ZJC6e6`d[,9?X5bT*\89 at b\^J:TigIjLZJalM%8N=m-5e1TA>O&*Z55
+%pJeS2 at k;(/nAfCnZ8u>jUuc=_;3s&Y;+5?mm5o:^d0.f.rT669lHQj"6'ngi(UR at dAOaIV_qGO%%UQE*Cd(jHSroLY%l4`.ID=[O
+%"?ML;fU[*-P\O,/Udf,M<R-9lRL&]RaOb@$Rf>;jdC!CSbiLbjZGlrY9)(f1_+eUJj/A:3&#N#^NQ1:,i2e9WI6C,B;Yk$!mBSmf
+%&;pii8r6eRlY'<Y>#)XIQYL>':7gE](.&9?[::r>)oqbN3XT][7 at kLV"=`oYJUKWf3f$L9Z.HX#eVW]pdb<#1)[`Qg,c5LLI.4CU
+%iQW&.n=8!MlDhb/o^SRsP3UfI`Kiqcb-i2>BWa9N!*M#_lW*ini&TDH6n6"m-'^)^Y[5%ai[]nsn?ep7DKe:VB4!nV!cC;rj=E-)
+%5'6sbK,.U1SR==R-KOdd<D at Bh&HaK`W"D-CMuNrR,nd-B4u=XG>_;ZM6^/;)JN`gZZ6?9)A=S1U<$^I.i(=LT&hol<5;f"7TXlK^
+%i6@[+q#Eh1+2(.;B=@[BZ+!FX4u_=LnB-SoP74pJ4TCC6:ML.%YVfuDG(!iKGkj\^,=pkoT]d*;WAJe(O2j/Jd12P at 6seV@2XJL"
+%S.7E&ED=K,(.PSnd?T at jZEH&c4I#;V`/XUT-E;[:6Ko>dpnirfEqd2D:<s(cY8s]>JFNMIL?)1Y+FT2dP$[EQMU&1^-:p4/>N2_Q
+%cKfDLpqXdp2^IqK`d(Ms(64=04`,r)C!WZ"HYK.&qJuD!T2N%eG3nrP[?7P^DhA.DlBJ60AGt.f9`3*``^^#A"/&.^E8pUL at 9*:=
+%LD$VQ\_N_\ehX^0DO7B)F![]43B-bt^KROc2XkPEA>KQAe<49a5;jdG_qn1,efeX/-Vl_.[hY!p`(H_:[@]:"ot*YLk9-pqK2]rW
+%S`.fWkj,ZmNfX7Km56q8m]_clHaJm,mBkcei+b8h0KqKo$`OK>KRDc:nM+TZhBD-bA^P8n at PikuQFX9/;.RojGUAK3A4oPDJF7rX
+%:=cWsp2]QYUTsaXHK&^BEP('$&PU!1 at d\5"h\7`SW!@1?/a80%;@;I^aT-?2*5OeIcB^BI93s:1BV57IHh*f<Ura>)WK/l1Re=KZ
+%N4Y[tYBJ^J at D8ONcShEK)F_G;??nUjEjY$'ei^#2\O<,rlbf=3Pp39`oM'bIk`I,8gj*VP'.EnJY8A6=Oa)diI9!<4J at sF6NKdmk
+%q"nil/5Zm_O;H9ekNsU1\_%/590/Qnm5Mq)&6SB]l%p$OeU&,,naP]WPtpm-BLr@\]rrS],Fs7F6^`17U>rR+/u>L//3trbYKoLq
+%4ZRIiRae:_XB8^f\Ug"pU/KJ2/fWW<:8!'D@,+AIC<QRfpY"Cs3kT1@[q(^anS"qXTSc!GWLK9E0O&R65(-oDf_WcmgL&ZS"NTAA
+%mYBtZj__^Y;aq6-g1KnbN`6"#7jZ?F4_Y'<$lE:&n^&<A3F-fhn'nZ/_a;L$C8(^]dKeBEh2oEN'c%-qRQn3c0aLrEM8=W9Sh!Z7
+%,3cWsVn#1_A5dk/-,DIc[/dlIU1*-m(R[K*`=/4RZhJ]P"M@^*OoUZd/]&d%':- at se86J4S3Lcp3(`ol(=!PN&rG.['IhXp["7'F
+%IcZ">_5,r0Z1]91,3#"W<3;TR;GI]bIsU[r#sn:?9(FUDS7 at EhkQNg>Cd]P[?FJVZ/Bi`_A`]rsHZR$7>Kq#%M(gjBk'&05Q?qZ2
+%/Uk*:U$q&1_#%:\-8&2``Q9kMnL),Be;0rc]Q5$1AZdB`>C>!/F!h7FjSU%qfRqjLfrU;`3a1M at kTh:j#49m$Zn;#kTcfemA"+re
+%%Ee*B]duX/]0=ESDKIP<_SD6\,&KV.R=8L7D$1=p\#0f#kqN8*%.Na#Eb9%+I0AuHI.abMG1t.JKC&1MHac1SU&M2\<ZATb4DXnr
+%5[\E*agWOUQV__g]VJ4I^=ilnBU$.f%`r0>>"`o$cT_0<?aKYg&0GMMb[48Xn.uJ,>FSL7b7T_qJ$R9Y<GQ at d#IcFBAIgSVPT!*&
+%b@,42J%X+3]8DM9^mccOio?.'RoFm-45Zj(lf=8KSo^YSIO="$>V.5FlS<<mo#\;jD)%QFBtp=f'RMc9Wh]c>6drVq<sB-;>W$eL
+%$p1R9C5BF1ag:0Tqf(:Chr_V%[(lW_OG8&!_E!jt9*2r?:>%m<OuKl+F=9A)C^j%El8tF"T(^GG8fpPr6'[$[OFY8&!1o5cd%3ml
+%F:e at l'4]>D.Ge7S<sV&^Tq<]^-)NP*DHf/YB=T8dA9%tI&qlOc6k?:#RF>HJR[]?Q.%16Il>V9BAMHQt+WFB)EWPi-'O?QkQo94+
+%g+&H`IFe*r2Ni984iH;TZlG+6mSWRb!a9L<j9H2EEl8(7NcOME?+KO43X0E0!l'oPYQ3PBej-'c*\;RYlbQK,DnC_fMq&r^*\6WF
+%((8%0]W"l_`EF'iJUCYR0HBn<K+YP9\$gMB0O21nk/IGa%K*%nqCP`[N<iBNaOF,1QtAAEn[DFhFFOff\C^n-EWS1/>7QA$2gqF<
+%Z>Q at XR>Ni:A!uHfoF?Hm/:T!$=j38f'-u%ZhUdEm+_[r*gO]0rXGGXR([\2C]$ZOd/mg4Rik<H739`rK)P\_?M0TnH?BJ;BS*W_b
+%1k;Mk-=kFh2mkLL+\$r=oj,BF#V=iHAeS)r4!tM(>IlCe'NSPNG=CQ[L5*N*URYg5+BG69mn-GRXoILWXdF)UNlKB.,M/<$$6W&'
+%JT]%$5R8Xa_%%g8eL'A*%mocBN'RNoSbKa&.RDsXc^WO%g%bt#\Lsm8GoM+$l0@<<HI4""S at 0fDB!j628Gm0K*)'g>=_Y.D/\pbf
+%8aJQDV\20Ufk9Rb2]J?L at Ip@+J%q2Yf;L.4K^'&LikQbLgMAH?#g`i]Ie3]NeBJrH<e>$3>#\3C;Kt;BmQ6?#,Oa'8o?u<?'RS7L
+%^<(17YXR=DTfTjXoulO?k9(^F?8fc(%TYn37UVBO%F>Bnc+i7j`TMsq_.EY"^tt8s[F,*"R70?G+49Xh)aDc33*njli^%TJ at 65Im
+%^8kff6Uh?9LRml([b0hJZnb/hjL=5qRnj:_<A]I0.q_1WhU96JDFpS7:'9]b1U))$BTQJ?lm\P!/k>"@B#)0A@[HjPnp;"O!lP_g
+%!bZQum*R+UYnJJ>(2QAoE?g)t(j[Hr4h9H!g!DtWHl=M>eem-[L`FXI>Dl0d).`51qc/\6R$\.Tb(bV/[EV.r5nk/8K:jdd(KRsW
+%'N=3krY[l>4fLZu%Gh"S3&1[XF7/StXA*'9E'bDiL[m&FN/\;BnFb<_Wd6^MJ3+I+]ttY#c[Q'^ds/)Z\<#Err/![#(!CeAX:9eh
+%ffkC5(12?PjhL<G\lirDZoeQ,5l84gQ*Do^mF6(@EbJi6_7X;BehZX&60X#+&LX%m:X[qbUjYH7(^WemZ"E"p-]:$bFe.ILOTW-K
+%PY2&LW6<NMB7nR*f5e/"@g<c[`^_No_ZcZQ>Y.\YK`)"J+Jm%(Zg.Ug^.`Z@/RL#,fF!jaE"c`Yi^la<?EE$S2B^XLCeJN9nNHc!
+%,j=C']5nq,M?q9IeX(oWTDMH.94kYYjhcC$SPl(,[3`Uc<mTBGCs=5*C;6HUDKVVm-46HkSp5 at i0`r(;4M(j/l6"!RMqc(6OtK!B
+%E+Y7fO-K>bYJfG#EI+e;d`BCq0<]HS-K,sgP>'T2aaJ4d_Yr.7Q^#kQTVB$N"T,^)U'gW@?such9F2 at Q-gCCN&!9sS^IKT5_Mj-c
+%!\qQ<c66u+bF[2>VPD1ccCpUrg7rh,?SRpai]Z(G2DRA!ZqZ&AXn;!e$gG)*W,Wk-:X6ZO&9b$:Sf:VP^t=rSAp^M"hBMDMgIBn&
+%<@9Z%.&C*>mlZ0:]f4R<)`cYtGmi(,9E,sQlNGKf$)Af<GZdaV[]/_*D^M:lgRoO>Q"Fo14ZJ\PoRK'?>WHouQC?1RKAVhXJl%'q
+%bDr5UUn_J$&"iG%>\CT4"iQ#^/HV<c/8W+?j8#1IYNa`@Yn!`EN6U0CmD&o`R%R8X[Si2T[k8F"=?e'7>2Qj?\cf:Q7://c+kP[:
+%K7%a^/piNmme>Qu]30ob,XK:"^HA3<]2Mel%MX!04LWEg6dFuQVgS?PnUXA+:#nE4ap9Q0'CN%d[VOSROW at e"1TGscD_skPKKl!K
+%O(:l^3VP\krhrg6^ghE=Js,!pgL:<2k[Wa^glh3tj#jCcUb4IePi&\C8&iCtAT(?<Fe8ec28a>W'se"Lpq2fEE*u=,5h.dJ$l[F?
+%fQ`g3L;klJ_'$CUMu&mgkTL,?-WLoTcBJeeZfGopF7]J#r1VUCWoKQ\i94AHAS8NZcqMVY>GbMKe%E*NqUg82EpK[?0e7WQZmBI-
+%T,-0R!lJ`"^rDC!QXl6b:B?+rf5U$6Z)nm2'FTdaC!:^`RKI4*E,aS'i:j3%8M?,aRG4A"bB;.N50;W;B%lm0\cl8<``oI(DBk[i
+%6n[IT`ub>mQ6m]dpeUdR+nN]+O'KmiofF#?Q\;[ZLF]P6mY_=Tm-B*\qCnL))F"'u/RcA\7u#D;":a4]bER1h5W:j$k_M9-$:<JB
+%QbS'$_kMs#82o+@?"dg?gbgOJ/<ua1+I=Habgfj4 at D#hS(j6u%;e54dRI^1:["H6B3<_m)a-esB(V:WK<CFeGJl/CX"P&[N/6%2<
+%Eo)DXZM0>6mA8A^#o.V>P.@\*V;@c;2n=i:jm2Q9fU/,/-ZM^g+'r*0VkG.'!PrY0+t"XOXX>I_'[H"B at h$5Sbmo0mNAH.\T2[n-
+%MZg.![UV0*p'>:oD0Y)#b.df-LAQJ`3Rbt4WA at Kq8W3[.H_O&'DY at _/iAXRm+7W2*Y>b-1LMT_6*^;Uh-ZQQV-74c.TC$bQOa<D+
+%OXW+ at 5Gi0c/rDWMHN$VQfW/:tM?b4a29RC7KB5nN3LIB!I,A;4cDbuN9`8hODjh?@D;#b!/#\^(J\1cu8Mgg]p&1:RNe at 9B2ZEGF
+%c$2D=,Tgdu-HljWP>mc?Tl_n"8FnUEA+SAp+8:uBg\tW!]S5/,,f%u@\s7o,I'`1&!U:UMZM\,l"K4.=f=O<u"s#MojEq^:K_g?#
+%57:*b9[&SsgMj;fW*9O,"M&EPXnWuN8THbOkeuep&_CB_9lApPQdX!cY+#k$%P7F!X0ojGOkC5=*01)3""4^*a#k1)(qD=LJ%MPk
+%PCB&+p[=tW8;cJW%LX`O:9H4W"S.JM"oUKNWJ.Ype.Kp[O%Q!]/l-kBCkB's2!/T!rDFeQY\6`n+a(KWR,lC9j0Q3\ABuJu]I'^u
+%(C:2V:\t[5A=e9'/.&;Gi=ed1J:.9>19ZmOL-C.,Sr]0-Zg9$b#[AJ1RBdb2UX'P3Od<"[YiS at D0hI\/LW;t1R?-l+:9]aZ91VZg
+%[Qo4Ch9o]V<BPCQD@:M>jb)]&'9 at 4N>EsRW&o&[gqMPQ73.@%^47)/Z?9]*^8XG"#;`(0?>.QR:h1V,+=A,bGIXVC^k5]M!S3f[#
+%T_3SZ%uG>eYoooC.prJte4'Ns;'PKkZ138O#9.g>#KmFOD;Bf`W*!k`@H\Af%B]ht;<RL6ng4,kB.k/[>7_#,k(5i<E4::L^@DE!
+%T$LZCHBMTG9rZCV$]tE9f)jC'JU=1`OtQODg%7DJ!iYe%1:,eCqc4KT*laT-Sc&17..5NZldQur@\rb(\!L0d6h+q<ONOH^7i0f%
+%B*-AF$d/[4;2'[LY"$0j"bTQn["RllIPsT`<H_(s8)Q'T;=0Y.>"=kI<_en8&7jOK*u=FL&2PA=%PI;c#Bn at Zc4AZ".f[dW6S`.)
+%]cgXWCmc89/2u__YMG(M%(rgk`c=4_h+sW.QhB,'+gBS23\lVK4c1OeY[XQo6VYb05c1=VL,HY/5""Vtc^J??$/XK!=68[_UO&^=
+%0'sl:Rcp1FYu',I7A$+M9cJ>.rkPa!bk^PA(-.f!^)Y!hrm6!Tf'/d(F=p)NUIn4:d<<jWZ#d9D+pWAS-").<bBrnO.jZ?"_(pQb
+%^hC+c@*_:-;<5I($14VGI)"6p$WOki- at +]oVqMF;]A^%AKgaAAX"Dno*s&[m/9Y,sbNJ](`g&7N?CNUYd0D*.8\NkbBMn_ENa=nk
+%+FDk4_,e?EJfLDU3ea>9"9jN%YXiM[Ur;#d4j_cK=[!FGWR%"B(PW<.[gP5>iS<KO5pDABA96qNr4NHCeART/VV61Ql'2s-5f]q'
+%ng0l+-8ccLo7#r^$k8^O^bAhF(lI_&8"MTbD-?`(bgfqN1K#l-ruBO4*NVVQ0)?6lkGbllQ?W^u\g>e-?%u99EmY5(J?;q./qn">
+%J0q%dQYX`:(*p[A2mh>U)7. at ik=U3MGUfAP9#RV)>S85_L`t)=n/q_JNqb at MJr#5QOpcRaTcT'9q+5=J(jN*l[=JF5m&$mT#@GSr
+%?>Y]+Ono/E'4c+l2gq9)?IYp(d)Z%B845b)gpP"uqHl&mrU:cOf%7-(?BT/g&2-2aOf6H&nj(QolNM/&F0M*>1krP1d'p-=G5e2.
+%U`X=U7Vhfmb#),kK^I$=fJ5C"7htuG=8O,0Q`F5q#S.'^Mkj?n9lg/%a8[(oAD*gB2^SUh&Y8Wa\C@=ESJ+?V0$`L4o`t?s8c:k1
+%cK#aIG!!auCHf+r$.-Cp\`Xd)5Yq at +ZnG<t"P)2O at B=O at G*PrtXXfM9qk3)L#sL8a'0;aHaaLV;O1j'@CYZGTKWuefH_[J2dl_P0
+%/`p%SgffhLo at -NNg-0Y.Ul^q#Q8ij1]B-[Q#f*aJW_N=lB<b;M-^<@QNoT8=&i1KY_nIQj`Tk[$hn:;is+5E=mF]BNb%`q`ajGCf
+%[8OS1m(9?5SetQkIVRF"?$X-;#>-&]O%lcLn_>LA/t_QA:itM"JSVRPC'Sp57fkSE,K5$W/r%2cLCH97oMU?rXYH at l%^mW>JqKdW
+%3S)m)9nX"N?WNG4cM:MJg2h;L4N(A&k/+3blG/$+YpQt5(E'0nW!]W?6*)_2\<4GK9AdoGkA)\(o-3Ma\;/_eK+8]8p:3fkc,W-h
+%M`':u'&PW&["&p^SK)hd#,(aQB:Du-,hj666:>tCMV3<-]\h+7qlg!FIc]4&I<g$A\J0gme"@njJJq*?k*2pM<J$A`]3B%ZoS!aI
+%<bO;X.Q:re. at N<!OHjITg#nlJ""%W.'muCS3O%XoXsnu_aQXfAb1H*Ml>!<+DuCs-'>:m[-?D0u?pao6Z?V8uReo6+:=-ghk^A>h
+%NNKD7@\i?5s4i7"Um-R!5O4jn>g\Z#DD3\BJ)A3FDg&Am:-gT)NjW'^,`#a`qOoF>juMU32PD58g:#CRXOZ""5LG)*YcF^RK84oK
+%8Htc6F"?n3/P:/=_D[mfKdZ!SI18^tf4_oS[tfb;[6/FQdiSl]g2/2Z#VM\q?Q*L7]l'jC<7;\Ig*d4Ve4d<0P^IML<6Ol- at 6eKc
+%FmMl;o.,%UabKI0GaV`\/J;s+*dc\_goP3J4!)VSNM/diP/d495^p2\R#huKPfh"ei]cP>5e\7C#JD at qS:s:=^->I#&`k6KSiWuO
+%CU9>EF,c]QXqMn[j4C5kp:LSKR<fl3g^/(bGQC5k]o*kgf2+VAL_d76YjpE.!gt"tnT:sZNE+jda7kjtF86>-eaK:ZK(I5PadQ(U
+%Y')D[T'o*/^N%'a3S]/jVhW07@@/Z54G.?^k<^oQ6:,Q>Oe%]jrZl<fTPC"80-pW=W>s#c+I_1jGSe\'ES./l./(MN\aq=9K[dX#
+%1p/mJir+0><7\S)0/mn33SW`t:t:0FohWNlH`Dd\r*(?I)9Npc;`I`-KSW:0b<&;ZU%OJ:@a"KR'^:,Ho!HmPpO-jJZ#@X!Z\!?[
+%)4fT*#mQm!T^-1enHLCh\p>o99U+q-C!Ji.1$(usXXOU at I.p5g12,n"&`.Enc?\Ec#!CQEK&o](!i%8;o2O:4_=iFeidd at R@hA(*
+%6uTmgf'I6.16B$.10H*<bAKp2[BOZ`'NQeCIa_bRJ!lqd\^P@^f8[Tj4kHt\Rl/I9D$$,9qKs+'dq7M4@/Z??im$lN%[<m,N;,I]
+%(pg/,I=*;%YUM;-*eQ]jZPLo%MT]reju2iDCGs)KL<[-RJC\m^H(%\ZIMT"]-s3h)-9c6%0gDQs1dmD[UI+@&rc[/oF?@du+Ve#@
+%R?s6/T>,eL-4mejd4>88p$`nDL/JgMUkQ9^2&A^2cP]j3\p@(:V&L@%9GiN at 5lgJeDpIR!". at o0J,PKhds?>"n$H(nB23BF[V-%g
+%+91ml'&6Ar&Zt2=S@!Dk1l$9Th&01T5F3AaYQ=^i)Cbkj'3Z'jT5U1Z-%?\DZlqKnak98=Fopp>c)DqBhXa<:$VbQ3%AQ>)I&Ymo
+%+0s`PLBB7iql=M\0%/rMj\%,dI15+.[>oHMcZq[DYu7u&.)dq"d(n. at o%4^!>`"ZEB'X?*6)H;h%%faOr&B6Dn)^BSp1gPgFS7nr
+%*6H3M!b"+7k at p^NAAl-D0Asso46T4kj>B\RY+8KA0/mfLFdN'G_7-VjEXj-bNP)Wb>'U_o-TU3^KWUL;gQSSMdG%9if<?_,f#SHI
+%[iXnLYSok8+E"Y`K0sLGPi?hK\TZ]@_>fnEmG2,KD`k;8<-D(AY_R=&/NBDgc76h5hK7&/K8iO(WYD'<b7hR&%3dgn3!X!W.SprX
+%If*S25L4CccSPnj%gk&?i?>3X3(7$[C]PTDL4pWUAPQD'][@>c!e(VNN+I3*LBUI;a)L+[2]eX.((45R"qe)[Fo%2AM"IT;%e9q%
+%9&VUW[C/93Yh873#kNdp`+0P]@S(E0L43#dj^\&<:I!D<"-p\q*p$*k)@d19BY at 8O1DP/%$S5nX&,2bmZR\g$#dhtp'\jAp*XX&d
+%c9gNcrP2\bH>Yj]^(n[N\:RX=^KM]'NuhP$Xu;&S7F+K-l:I-Ib]n1DK5Xn(nn;]Mqho"m;q"^+m$T<Cho=mgKitaUns3&+/<tm3
+%e)42!j<D*mHc`K/FXir+iX48'eJk<bPN_U4pLXdVQSh?ai7$kI0`jL_<g(CL8UUL=k>P>3!VVQ8=)t!tp_26q4,RBcmEmt[hpT($
+%N;H1Gkb:sQe4I>ef9d&FZcKa1-!@liOY90n/KgIYT96FY-21IZ7X%\f]9s<bCm&sJj_LRUeaQCk4.Oca1,5X=,=ZV:\P^$EM6:`l
+%r`#`*A*`F1kN*b,:+UA!#mXI27!WBnrgdQe8j#],_;QIX\?dbO(%Lph\JWVsC!>6[\Wea9OY-k]AduZ79*8XF,5[513A at H%hhJ]U
+%i+agM8SEjY8N<2T'-Lj*,r)($g"C8-%]1NM`gi(.;mLTs0m\Vc3^LB5SH=u7q/MIe>Je!ll[c-<J5/e),hYUsB-rpB+t/dI&ml]4
+%7cp+Bco'bH,OM`srWi8gUmjHm.sN;Li.n4m88:_#:Ak6sW;9=bZ3`:'VHP8rO[.>O7%Ur at YYS'hr8`bdfjUrB\5G33eB)?N0"(j$
+%ANq*tZSRj_MB]ag-nRs;F79`^8\g*DTG?m"c;&=ec&86oPQ);`@Rau]7%hktCl2M8,MXiIKmAf[AfnLur[HmN at j1P.=L.+tjV2pn
+%h3n>#Pa-eo\$#3FI.VAld8-*ff"@Uh*P%t^Od\p^EIB!gc26[LJsfM'g/MR2*jj_b^@"Jn//8Hh,hg'+`=`2&YhE+D.uQj7Uk#pb
+%#*c!8ZolI'lc30L.^IQe89dr0'UKX,^>ra0bI:'DlXp[$QB&@hl/LIca\!'<]I7AT`U#Onl(O3jWWq&Y`pWGW#]>4:FnTG@?Vt1+
+%rnYV,!te+O7>!FDU7[WAHOi;J+i+(rRkan2;BU at AcBWJ)P7g\@PPJ at 2cM\OdKD.pXH4'cR)nGOpBQMOj8[_=leV>OMcdfmmHbOb)
+%YjHMI/(HOoKS9KH,VhJ%&9!FR`=kkWD85XMYMhXtm[GPbVlA74K^N(k"=A$2*P97W(P=Z=rsSHjjo3G!3nIo<]cVHK\M5NJY(13?
+%l8`VR0n$==!><8gQ72X'[1aW-k)R]lRs#V`kHE>=S9gg8r)l%Bl/(Th6E>c!""_gom+&9*AN&,p<1-nh4hQCqD^F=+P9#,)AP!W$
+%cSN;CmG!Dl9HQ4h-b4rK`EB8FWfZcd<fIC?SRhb;k9eGnlV/qqN'2o\h#u)0^\Y#.'PEenGcA"TL"htXc.2"iUl\kT17!GR$%f.d
+%o(<B^0l`%tgI0)KIa"'Q[3g#C8?mXBE8quQ3.(EO+&@ls(K3:b`d1R`kgU=B'>_d,q0.gD_rV$%$Oq-6JE>>B\e+[/Ts`t at n])(a
+%Tht^%=L>^uL8McI80q`93I$e0L3:EhVC8XNjP'5#Hf46^8>-7Z&$&gFL5l+pP*4-mHE1iA#WF?fElbZgH@@/!c$]rh$ql5b0H.`m
+%qDL%1e*qE[QmV2$N<qU<ddKm@(%Z?+-r?DtT\`c\E./G=Xk]$D-SHA:[LK,lIO+:-YoQk:oGEO3>/7RI8Dk!eNY&W^C`CK&/;=r/
+%SUYk;^:foJkAj9Aok-i!SYW;OZAQc>h>I$&FP1*/k&>`$;2S@(QT(<:%Nh5uY!GBHmUT7B?AV=kQhabZU+'+2,FL1qQAS&dBW`e6
+%l$^a'4T:S;)N2,dn=6]R[(RE7R1"f=ZB4rF'EII at cokH_Q?A?mP#>Tl9:Ke at ZqntR0ZQMS=VpkT-)X+VU2iCZHgTD;]dX^4?F'4A
+%`?pf1/=k"=$4nLn.^US9$oIkq+Q(^iVdXJgPjOoCOnL5W9K)R-N6nJgoQ0;Qd/s(IhrB6GSVtU5-B)9S at Q&>n3OJ#rrfURnGg*pr
+%DggasU-%M)TBi%?.#DeH%SGLuU#)&)<0Br78q9GB9)a6IkO8\X/:^j,olegkOr71R9,c,uCK($]ZaEF?63Y0;g^H=^1\'TR<jA:t
+%jr==o9X.LO*3]&$]X>siLa$eN at XO/t7]21d2P&a at T8t0YR^ss.`EE"*<47^qPE1s;f)AEmUg/71G]b0Qc,DSS6_h]fiW24)MFZWa
+%P;D!13jCeAHs2j#+b.af at Eo65B5gR?".)B1g, at 3)?eUEMrV=,0]+V*+,&GstN&6.j>L&1:O.XaiVneFBq4/>n84tm5*subgJcThW
+%.'`*9k?6b<IP7B=U?[%.+-D+1h_QB5B4GFEO\Au\56W%Uh_cm["/K:rA,Hr[3&g-)ota0p)Pukmn?FZX(cQO3bGEZ/;S06%S$L3h
+%q2XW=?0BLj4i=6XNY%IT;0eXs:8[J<Mqml2hL+[JnRbUHD;Tc4/<p8 at 05;eub?/`?:QE]59VcY.4ri)1Id2- at SJQs#neu2 at 58p)+
+%RZ&Qmdp>R1r%Ut6N23XfaOFOBb6V.-&8oZ!<o06soB/hOgW;*N00:U!g-hU0[`p^)@Si4X_7W//)UhJiAHtEc"Inbb-RFI\T..WI
+%SIDc-B9I%<i:"iZG1.taA_?/Mc%eBGf9Pf&'5>P",oW3jh>MOn72).1$'`BR5fdZbQ<0elnP)aEf1jr"!h@@q.J<;ooUIb.f"@*"
+%OUJcMlW</Sp:RCU&6:fp50^h]4LH#h/bTf8^>WjSG5\q3$$tHXP1&$)+)m0F=t'cYqt)BEFst7G9N"l%S+9<+p,jiSW2J(QWb*K.
+%K6ED,Z9'?P$>1fcCo%Pf\<e+*SYE5^s%s*CZe<^ToEU5:ZJ!@c58#EkA:]tS%pdsq\)pUCg<O,OWBrl80>X:H at q,)i^-;DEWQAHZ
+%0hNQ;0dUnt)WN+8Jt04Yl"ph)E_u(b6bn,2]S)-o,jq.RUmu0uB$F)aKO-)'jJ-BEP;?\apN/3\@%E(,a`;?D6.d at PXqRF:I'M+G
+%;;aen1`X^]qn5B7GMZ8LA2U#<JRA0JHDc$)(Xpe!M6XObqqie(i^fT=.dOHucP+&NHgI<dN=\#*X?hrb,)=H7kde(so>.oI'sj@`
+%IUhqWC(6/JVCQ0!0%!g2h7smR=6r"$g3)#bNM at cY)7]C9M2'koUrERhL4 at R:`(/B=--XL!Hl-29'riPtTXpX>3+:#OoDU'+V)l^K
+%?Wm"JV_3ONHbog&J2;oXG#%m.Sk&(Y[l!0Fh3D/+):DSEPNd5Do/E=:>tAMgbAU#Z]_%_>Lbk"IfKJ:6I at C.VET@OWIA`"J7[&7c
+%VN!D\p4t.*=-$)5!gF(+$h0Glg2W8rDl4oO8N,9nX9G/SH6e]E[**NXd7W#$CY at -&-DA+`Xo-q#ZLsPk&Gp[BH:l;$-o07pN0j96
+%O"+_q_Kto;MO at T9GZh[GKGiO0_rBG32f$1+6o;V2;UW2o34WW4-TAT2P:IVkJDV2+KNbN:p27*TEc/(F(qS^0X"L;@R!goGX(t4g
+%aW3\A]Zt at DSj&tUCucPl)Qp&e\,=<4MG:1SK\V3]lZGuQfQ>cia$NoPa7XoR_1,KcP0#+;VsIW13XZ2Z'F=g/\#+'"?fh6MVjRe\
+%-&HC:V(PKj9PHgE,"ZQsF/g%]OanAm\>^.B-b`]JIo at nGGOdK*I_.1(n%=t*VA'gTZWO<8QD+42VDs=,jh)s.b`OG7pq,>1a\ltE
+%XYDQbel2r8_<nAN_L!OMV$'3"00b:]^rBD;5pCNo!jX\_Q+,t\#%e#5]eg1=)[7=tV(iht::JL!3="Z-V at kago[T+<>He^GY$I*s
+%?'G^:%`$^lfYJ9j2DQK>ScA[k02=pF=i>cT-G,a0365fTV0]<:JMs;VXCD?cKCfC at I8.f-"&S7LM$hg,Dq!T+ZQs/ZLDG`l`.4's
+%a7SCc=d86A;p_MLjRNOf-3NCOIt%B2(V:3KhD2L*m^]f;_9X?Nd0b^sYSUQgRD(n*Xo/0.$LLs(\Zaf at .=d:>LcEQ9V'.LCP'N*O
+%^N+ge(,l$[AUW\H3B/G.G.1?b=Ga0pXI]9\E[u\$87ebO3YT,hP>]F5]Zsa'Dt<WZ-W`9b;F.!"CV=qpj<%m#".B;Q^Jc?J-N]tp
+%dKM'"8Z<]Zf6DCUf5K7Wl3:D%5#QPF+!m]Ce!1;[ri%X?a9N$#9ff3u^(\]l,uQt[8*Y<!A_M\\D1E/DnhJ*^)p*"tcNfYs]Q%7j
+%@idJC*#Ga_T&Yq??0@"K2g!+,+BT$&UhhWnK+I2tS!\8B$.4Bq(>ldt"c`N*m7k2+DXt$:XRNMIotbNkLs>XS7?<)55VI=8J'Z_R
+%AreoI2Xo-[/]S4]4Wf>"=%\4Y=R%'7Rhq;cKtjfMh3a:qX>LXKllI;h:e'^1;tEj)0o*%/b:=d?f\\!)`FthWSNH_RqF.CYWDK[l
+%fp:G!:3f*(OlcLYd`Wkg8*@>>A>F<e>_ at 2kB.$e,[Q^WH1oclt3uCVk]ZQjupGk\A;Nor'N%iZ!DrWk'CGF1W4F-U*4t?k,/&ES0
+%SZX9;9WSW=+m."1mfoX&JTB(WDdQ]#YO5*l7*hbqFIb?p(Bah]@_:L"nc%*G(dFAjB+PYnc0%ajf!I$,pX*])'1>FrMFE=MGB3ku
+%=Q8h"_Ih9,aOqL]<@i5rhB3bED/[r-dZR7)*qfe,QVaBISGV0$/=LfSTDq(jlOl3uX6pIPp-Y#>6"J$YrOV(oU-<pEh/8??<6nXj
+%K03J`$Sthb'\:sTY6V>SU1$VG-.mq^8?bJlrF1LC[/6JjN:iV[WaM^:V3Jp7OuXWqERQ@[\lg>Rn[q]p:[PQl`4E-W_ at 7q(mBb5d
+%$j'I:,G($J['+)BV2u`#=Y$FQZ$h9nRRbCZHhb@,65M=l/!4V93StsoBK=J3=i/g[Otn1Z90_Zp]R#uT2B$DP5.353`4Ohg9Sna4
+%);0VaSg0?g,h&+doB6`1q\4CZlP*pdaHis$]3tE2mNEDDSNEmlDLuB_KV)ctl]TDE0Nq\JrGECAfNV,,qG\5a6au(#X\UM- at Z4$P
+%jFr]F<4XM5P%EIfeAEMVT<?Z?g_^b4B0$,Vj0a;)P,:+)crfI5WEZrYBQS5*[E*cK_A9eoT<cC1i-m%*2$KSSE90/\ftlDWh1CsD
+%k)U<_;2Laj6#L8b>4WLu$\UUt7tcTGe=5]3Wl06gTCkL`S6?Po3%Yu[g6CAHaR]- at eY6,<p+PcJ4\pla5B76<ZZkpd-!@/q>=.5R
+%cNk3&`%gRd:I"`)F&AeHd$]K=%hk<ZctI4W,MAN<6p!*,,DS](DkYVSE at 0?fCF-F#Eh0m[^?]Kc29ukWq-^>6ZG+tMAVf_;2W=8R
+%M3VM?9`o=7,^Frq4"CB?+-nE,CS(rjc/OUFGhGR?M%.m.8^'eY^>(J#WuGsqM3Ud`PK?eA0Q*WODqAbiTinqH?JjX=R8_^F[**i"
+%Y;rN-"@)Q.'_-Qr5D<5l_=L)AT!SEhm82:M[P]N`Z1SSP/nH=YfF(/8#nknTh^=_l*TCFm`KGV+NLZF;VS&@fl5[CY at OWfrP%O$T
+%K7V^JK6JbV#`i3.:0'UHh)B[qMk>'3kK64Q#C2 at n8L_Vf@)0[D`-?eA9^9?SYFj]BhEioDKDil]"]-:gVk.rsFsP:ue5K6Jo+,Z'
+%#jcG3q-<Ne3S'dCq at PQ.+6<B(*j;-+,LEGH.BB6]X6muu<[n>q\Wp"Wa]e:-I'RS[&hbM%4TZd)4)nJ$H7-o?goMd.Ef>jTe#5lP
+%$8+=,JhKtS18 at -b[gD)[Ufd3'F71%4e9sC9W7a,<0+&kdP2Bn"BX=Us4u(dHI&qFHYVPOT-_9-`+iI:&2IjTXZd'PRI)VXM2I!-\
+%JE17!:6\R4ph8lu at T:M*R/ZLOXf93=qY&OjdTi0D-/"]p:9)[+,?\_^@cfB?b5'`a)\6%U3bb2HD^SQLZ@%sPKBf$j5Psu/ppLhc
+%Ypm2E*nCZm86f'AS^2"@KDj=1mUiFFJ"IT*E>,]sL,m'9BdbqFX41^s?atq]Pi^Q:[mXU10>NmD9J4Wi-O.BB55-gDo#akkeZR at L
+%a'ZP`L?=+9f]BdHa5;2PApld=mQ@#Uhaf8d1BR+B7/Jd-Z_#XQ4nh,db,TH/CP1\kI/2:3D>>ck?T>t[FJNkunda5]2MnTSh*'.!
+%npTZS:Eu'D/\V&t.`b\O_Y\iJR3ZujIkoOsKeZ$rMd72>cD^;)4+WW]+R""-3SKQd4brEoK:+uHk at k),k7BgZ#(0>A'g;CKpM<S*
+%2t_NJ-;[Fp&j>tPc^4&k!^-d]AgK,)_$9pn#WE-MIeGq/L'8"an?:g^gDr#EU]Ii#CLuLM)N<+lB9&W at YPGf]+!Zg;`%+U=R"tXl
+%[omq at fh'$gOtXR#I$'Ym!W1]_Y"Y)q![PVD&jeq,q9o+4RS0aRn'stmo4pU>?<XS(2>*eLqGFIN:*AV/`mc&Mb`2X5JiZ-;Opq$V
+%II=kPg=uBIj%W^RY<Dh$fZd;qUM'^=Y&&,#o"?<WP#r at 0QLR\_f6fiP3Tin4S6#NRn;rfgK>g,N)(.3PRuL:UTBAm&Zl;"P+Ou^W
+%HsRHpg*B92S?igWi9F^ee5sIZ8af0]%e>u'gr,JE>Zg!Jj9_e,o%a]X1mBPZ4_X=X;GC%t;6ZQpNoAli`,:i(2bX&qWE0@#kFCom
+%UOY7^cB\rHHU?K!T(cL9-c;-MOQ;hHJ2(MO<^Qs]OJjfrAI0lNdENOP'm#DZ1AM?f(#=j*#^_(E]YX at fIjW4:DF&)oEI0]15.MK5
+%mCDMHQ],YqLh;C*Zau?V$Qs]/8\k1CD90+I at PEGsP<.QeZsa[O9Ihqj;.n\Yn!hV=M,Va52P5]*@LU*pLVsF[mPED!aSW[3ai6j?
+%O]"Q]F-Pk[2->DeN/gt2#u/j`K3]:bP&'q@=hU9,(,(<GWR>(JkCUbGf'uf6>a)W\93 at Ad>d8JJb0e$`(>R"T"TRg:h?m?masmA[
+%Y60W)qfdG6p78pAd`B[]O9g%h*pG^0q'.nJMl$*c14MP.aI]\XTjO,']*20HG[+LXK;=eJeR9Wh'nf1O,>!JZ/g8t-f:4Zjf'SrK
+%eq8HZ^n&r9FIV&YY&LD!jU`N0>9AlXeCXElPB0%e5ONgWfc,kaq':u$d]XUJ('7?a+Bq*30#_379d!2'-V;Dh at p,ZFn+0l-"*NeI
+%fUc>-XrOlIF5c`-af"]?H>'nn<sH\_KS[MH(ME/a7BUtgIm&`&pJE?5Z#!rnSs!(DHrKn8K[rfBE)7HRRj2j:$`EN*VLB&=r9Idl
+%qtJ?<ASMf4MkdT(qQ>edCGet[W^eO,RbWe!*9C[Fa3^RR6f,KNqR2'M`Y?$3Kd&23hB(EHn2Zb4*n`kYSccmqf\--cktX8Ff-h;X
+%Dg'[45U$MR+pioqJ07AQ]em!2[O%3pppG[bk&gRDF5nuu%h5ZE!`S$OT at Wa!_Erd]f`*dOa]1+.9u3rQOsop3#WWcO.9Nc9/<%=s
+%\Dat4M!@`Q%(RMS_"7H&o*7str/Wu3cVAD-pD_a">`T!$0ck\>2srW</lFa3!?/P8`G3IM-$,6&GK\cXmEPTDFP%Q at iWc'=BRpSl
+%6V.9W\f5<kdkG1g,SriDRVDg?h%]L66IaNK_HKRs:$h'9q3`_nS90GFl_2\U04W)gO8X0q-)qm-rg:oME\CMi>7FAqZ):05PkZ72
+%k'SaM=r-j/$hB8gh?)X1]8/6f`TU'W@^k<N^kYd3j^-];9jVIb>Of9:_NT-6"81P9Em9A at W?U-S4H>-I83YPBpOW9EOuQ$"Sd%lN
+%=5$g];3F&Lp#O/+fFhPN735VCfTFr5MRHRbFtu-8MU(tibh^%I)cFFONY\3+3=Ch.GM[Ng5FFdcL"bTRNPf0'i%u)6!AZ<hN!0*3
+%>(&E&'XUO:F+4iYK6le!E:0NIAV?T]TY^Di`cf-\BB at l%<`-WlSTd5J1O(X(Bg^+8/r+)f2ZqL`_1uK6/gEB2.9%'Z;0Z.Z[Xih`
+%6Y'#$4=uaO`d)W,R>;%Sfg[uM`0?J#<AuZ6BA9?Z<N>^j$hP]FYnB#krh,7lnhqk?lod"ddU-<[.d\Kp%0EO at 2t$=`UmqnBW`;FK
+%j8(QKf^*GYn)s"5J>+9Mi9n`HMs at c8a,ZhFW.d at UQ`7Cq!oIl>Q@"=YS`@O,,XGqJY^IO5KnX4pNQ1kN2il'eCdLe&bT"Jqa"e1U
+%FT7rQ3^mi['DR',)K4q3P:[XT;i3X-'+fG+7TMMf/8(lEB0^U"q/+U7NpN$?kgQsY1e\C#3W,lU&Ta[h5RK0L$pc]V4==/!SP$4:
+%h?^@V:Wr\ocM\SC0^q8)8QQ\sbE<6YSK.=n<0Lka7YqVG2 at fN-,suaO!BjaI%i0#)Ij]a7AMm'V)F<jYdb4I8/<Q9adZR5ZB>j\r
+%p82IucYjuGRSup&Ofd&2bY&_q)rTOBmeLGjF(e[M)r$ZmQR65"T-a<k_=P"iYM#0C]`j!i59Q\eG<he%THiRS^I5KEWo?Skbi;Ao
+%*))]+P5Er1*nn+""a*G6O+SV0Z_G!HW>rBu8Q at sca+d@5K8nh!9]mr`^s]0Cd4XhndoMp at q81XTg%ZTT\+[V.6an]`__O at Tnt.D.
+%_L=Aqj>QZShiZEkICf>6Xr"sIib>FSS<4l"=iaZA8#@_8\_(c$"\P<WRJt-OW%YI`]Ve+'6NXSa4%]bIXao;3cC?iHLa6BVa0n$,
+%, at EX>[RjdlpUGQfM/St]b`=F`ce;PV)q"26]3:sKKa\M\;0/=(1st*9 at T]*-:k'Gt:Y):E(ro%.SU(.,c$ifmV"h$9b0<7L-5r6#
+%BcF)qW[GUEYE0lHD',irI(T;g&1b5@=;S-oE[N8En647Rr$rW,0_)rpkI-sU6VC]<-NDt[+IF'#L[5op:3t?@Lip&Nio&2(e6]&V
+%`Os-4C/Aishj(cFpS\4Vf_J'q-3;ir7e&(5p$9Ge?i<R(F0/cn2<HI*::b9EEsIUQq/4<bfP?^s$k*M.KoIEIJ-co&ZkQ2._K52e
+%a[pdi$0]0PakJXpK;qgL=8&kt-[OJG=Glp76PZ]A*$A1I@$B(XkKG."ePa`WVX_(%j*tt`[@K^`VOqk7+\@@I=gM888]Z;AmSUr"
+%@obcXaKTMRMN1WWC)H^<j%&L/b$oB`%d at R\&55ekQ8Ac7!ZM!F_<h((]4$9XKh_4=9b3+7a[3V]JqM"*%#OhOBGWdpgUC!ckm(_.
+%KIZOk9K*%W)'DkL/\sHDEP6gnFdq5&$4P*<]%a:6+Af$X2eB:B0Kq+[/n-S)JF/co1kNQ!#Em9TA"4+YGB%BT+-Vj.kD%C2p(3]'
+%,\Em^e*4!snMu7OIQ#q'H*mD at _<hQYK_*P9%t4?H<!>'DX^+uYbp[*a5Ke]*_t`3pjpL>_o!V8Lr0W7=>.'!u#KhX0?ck-c$:0ol
+%h3E;pH,a@%`tQ!W#Y63aL2?),\L7Pl3'S+_S"2%r?+Zso2o[i&@6t0pO5&qc&C5F\;TTiq#LB1T<m[E,n9+cVi$;K at H1Eo=?p8_S
+%:Ar3$_Ga-e,TiiADam]W9=?pBrL#-[q/<.aDI5\[]lQOq>mm'TEtVF;8cF<S?2g&]<FYl86?mhl8SPXOik+K!*_!(n8`6?:<[4m*
+%[X%\?']]R6-e9#&*[2G"WSgO6RZE/)5phej:0oc&#0n]&d^9IJa7h_@)MO0U2N?I`hJCJHU;D2WWPOBhR[oXP+J4)4%gd@@-FdNA
+%kEA#VCA. at R#Xr&<leu5e\d`plJKSk`bN7L-mF?:1.1EC21l/je;spt*D4dl at Fri\I0RL7+d4-*2Mju?Kb'CN.ldp(?`"0(D50rn-
+%nBg^R:0WG8BotKRnR=A\[I#:I;Q'HHX0Xj+kp^GQo at t1-I(roQ/=W-^6T(d:ZPod7pbcr03S*)"6a.!%-\g5OjK>uFg3BJZDrN>j
+%g(aSEUG*"c+#(\V^0HItWc+tIjnL#b3KI^>8u7PeBMiZu6#J/Ff5n6\:U!;X9.=(1R=#iG;LP8^klATZ:0feu\/Z=V2Sp`c*LO=s
+%@^lH]f(o1F(9WjBj]roA9=O%%5 at JXq#SKA%#[-n.kTa,;Fd`VQ@@;lT"CEP211g0$[nJCugeD<0q55U)+Oa0-acj5N"QaLbSB,l4
+%aPNDPiaqEtEB`>4iTd6uO@#0T7d[9k[K,!SQ[@ZYC<Di3H^j#(YiS3kbE@*UksMX9TkO"h4?j#fnruX[$:29qqkV7!<*<+OGIqiR
+%fAK:4m.e9T<#PSqK4sW)qeUZ/Ok&;7q28`GESee>Y[np#$C;U>";V,h"nX/FVYL'3fWoAgq"!>MqU%XXY`YQJcEtD92bDSjn0Oae
+%>c2WmHDWru;_WFj&6i$<b\dkDikXZ7V.N9kee>'n7;But?.qtDP6kEMYpjg[>T7LN5KL at NC.uMpf["3]D(@Z9\eSNFQZKeEXV`Gh
+%7Ah'D(JNI at g/k.H;%9+3I=9^)kMYqj.hTP4X?;Q,QP5S=5n*3/#*i\$OsdG_'DE4:IqD,$s,m&F_Bk9k[9rK;RiC;Y%!n>)empiX
+%9JI<dr/rY^/-gfY3EXJ.A+5CdU,l@&:tSqa7*M]EpFT`/VfmE(*@-j0`'$f.EefJN:/dNS=75.fo%P,BiOS]>.9KC;KA^tQF at h^O
+%'qHjH+s%W0WOT%AOlT`<]\)PG`d%b\i@^'85c<_LM;1`_g?%7TT-7%7j9A2&c3:2"*^gSBFq'1=4@'r4kCU&3oCgqnWt!s9Zb6j@
+%#(n#e=$CSpk2Ouk,bY&fS6=`A?%_.#$c>X)S-B<Bc*RVRVLNccqTOrdC?=?em\Gm[$J#uTBpADb3'Q,'Q[AU>8gH$.$![5h<g4LQ
+%ngP*pOsGg&_,W($SU_**+sYJ<!C]C+NPk$tl at b)$?#J"aR`mN>?&Ls&<kZC-aWON;rj!,'K.]CHP:E_5F&"(1i4],4F6(!#e8`$f
+%H22_\!MI']^nVOqJ8k?QeJ/F+UU<6fdl=f^N6CsB/TfR4TW?0p"Lm6b']AMaHZ"DhroE+6kC0c)chWtA#N6i<dN#O`#=.u1@=:lL
+%9)]MHF).2ATA8dQN#PX&)_id[U!_[Dk*V*.nZJ'Q)l&*?k;%$c]$MJ+O7?a2Q]`K]2T\]8$;%"FB#(QFqdO;C-eg(7Ur5.lr2-[;
+%R+'3C^e@@t6]$uEF\l]G-2"/+9-U(CO<\,I'Op6h;CNbC%q3$M1XtXUUl;scK#aopQS]MgE78?Dl4.<pJT(F5H24lZJ)n6b_0/O2
+%)C_0Ug&0X)gM(45b_E$0jQc"U*K_nm/tk_18%Yf\#BBWTEEQ<NM%k/*+*nHeI)/.Ybe0:dRg>RGW3-uTY$!A'\o\ud%`gqQKO\;,
+%;RLB5Hd"`'oE6kLqiapFYU*J65!U64kD(c0#)`q"qA5_%7-Zd*[^MG-'rJ2kZcc8iGW8Hfg/FZi3Cb+'n-k\YjG;\=]"<%,8o-*7
+%HOBf>`".LN]U4m>'A%GG&]CK.VO\sc_loPBU9F=b at F(29]o.,-*e/%PCf90h[:@E8rr!GabpQZIKCrVcg=-/e5Bol&A?7T[,abXp
+%"5F=T#74$1:H at cumVGP<.-%b[K$`@T!'"&:5V-\O3IPPpo5%aAAeH(N-M?8aN"M`9""/.;2jIh`fs,5,m-)qH$%lm9dQXh9!C0-A
+%j'09O*gWfZqi)>;LK"]hH_eLLBKCm-5&lZ";=W`Di%m!a3'TFia[*b'$PdN=C-;aF#pB4Fl6KplF_m*#@WTbV_EsF2@'!Lf:(_$)
+%WXe>e$-=hLfnu+cRqSqb)GFs:8^K\:b+BJ(Gk8?aRjgg]5V[\KPH,%A]PgM>U!IbH^_C96&A=0lS=:k)lSi91Alc`e2Q7"=PiQj<
+%misa_&oQd*n`=2V,db at IoB&nkFuW;6e52kuThpWF)`+ULXF'1(-$gZLmdI&M%G7h`:Wsb1kNtAl%iu]W8AELj#pekJ0+Ijm==](6
+%,P/hcp44Y@;t6EJBYW#dc1=O:SV5cYW:(f/k3p]`\t4p2.d\Pij<J."k<rGM9]`]I-[?Vh\%ijs#m)Cd'J/Ud#&;cM6F7ZOe2eJh
+%:0+lE[e#"YW%9?kjrV(hN$]u.-0jVQmGH6gR-Yhd%'8#bL4a<FrS_,hH8-8W#meuc9kH\NR-T8SR?FC(#K!;#a+d7D1bs'D>YD;)
+%\-<bt8'*X^,B-nbXV2pcg*s!iLi>W%/;B-++-PgLeB>M)Cp_5SNjIVI,$`<BSc*BI at 0r^.!>^)n:4+XmG+ at a.M-mP3:.%su,q\2$
+%*4-9TI`=Es3uY(rNT*?N9Csm,`Pe];)3R_Vg8kb+el*cLs/c4`hg^2,?N]/+_M at gJHuE_odai6_-$'"F45<VL#ms8^>b9Q3&2rf!
+%hLNIU3`p:2\,dBP<(U at Y[gZJ(8Z4F$\(scp-%D)p";2I$g5C)u!.u:R)t9(rIFn)8/%;3aUV8EAh_)WcFu"YVN`nGqj[]9$XPXIA
+%-qTiSqT>VGf!tqSUr:K,9kF*7)3G)k/=V9MHEM_^S!4^<^t")a(T2F+/30>9/%cU_SIKVTN!5/hV_#;)Dl>UkP-'(Z2lA:N+EhMb
+%l\G\[R at 0Qr(R:dq3R5\$WO]kTj1lKcLL]#kU,>FL1=<q2RO?a9.,,CKqql]7!^VD4?7]%9N]QPQIoJ)#Om[94ia`$**/)>pZ3;NY
+%^8IhO5&;1$D6i>[ds0YY4n;QmYoe]ccW!Kir='JD>EaF_Xg(LFK/AC/Tb3:d[;q9X<%ep-"0'6dSHWm3IB;c?;Nr,ACaK>%&&_m_
+%]QK\K8I?a.<`t/*'M+nqg(T:%dhAo&2phZOc-oqD.JaCG5!l3,h0sOhoua\dDaMqe6KUJu[c@'h_2Z\bS"+Pn`H$!)[>C?MbCnt&
+%SpuPg3taRtB^LM,e"*gRJFSdpG+b2`KG#'62K#soABC#WYs3J./RVj_5=t(G/a(4H53)uQko^X[aKM?=7`DM$QnI.ci]aa+1s0jV
+%CrlO8Rf>r-/;`ZW3F2ju?:[3:TTQloEr^7ldACt3)h7Y\P!8cWaX!^e'7:jUWi_td'.V^M6)BeURQARiEm)/uR*??/P#=qW.YWm&
+%=JT<U]k\nb10ac0b2.etW5h)/8]!o[-ITeO:4I at h[=@X[dEO]V"^s<OrS((n3I,?)Q<I$>KgC#mCti=+BtBG/KR]SU+JU[:UGu[0
+%-_,,io0GP>?_Z#<K(7e-_7L5Q*(cSgc,i1!k at C[HYm9m[(XWhtgJBVmd\qQbH04f\)/,fui^l'"Dq54W at p&X_P<Xo)QMnZSGl/h=
+%(eY4&(.8^-H*aD;fO;/107i)=*dPQuc7'>/,]K#/8a]R[@$&]W+VYp:4i%r4^9:8NV$7oX[+\+3C4##U/p"[Js(S2)\>lBUXNAco
+%!h;M)lR#`sRjA-"#NilW(b_T#>^m:"QI01TfdU$$Eui0*IG&oh$(DbnUgkm_,lST)mK?;M8O6KF+,fgl`3t+9dfqiLG,bY:M7tIl
+%mieBdLbu))*.&?Vhk\3.K5$;!OiYe502`@N_&-:t at B`WW&-H6BhFZMO6a5?s?<0">9k#%u56iCaG&-h@<;N+/U$EumUpAnKMb+Bu
+%EtGG)CY's>/:hB-'ZrB/aE:RMOl]:h=*:9V/*SR\.&r at 8'0=7Gd>8qr`]q>L#pHjM>Je?+l/a!k%=Nqmgr9>%EkQ&,ACJuMofK&E
+%fg\!"'(a6f9%kH'EO&37PWgs/2P2 at 81#FI*^fk+E%&%TNJP#S0C:^hGf5BSD"<iT&Vp;H'eZ7$'`Y*u^s'jU]D?e,a6Nj[,Xldk^
+%qb5c[7W[E(M11/]IYq5Xm<m*@6-dGf7)S3a72TS'9T<!f4.f1KW03>56he!J)UsbETnc`o]Z.ifr):!!Eq1!KJ.%PE:N35p]'%or
+%0eF0d[O:8"Xl"5;8Z#/5:[G\1_'4.hVX at hu@d<ich#Ce0'SA%0LBZds3o7.m?tk>fI?(CWUaiB`g'gNtgS^:/qiXbESC8E('dc#0
+%kMag[8ERT?lTEJu:sBTX2_p1,[J]Rmo88Zr1\N0Xo86**$e3M%)m!$WRACg1BT'AXg0j\V<eNc7W[iQE7j=")n at 1h*>'6-ol2ohd
+%(<811h55c:;cekWWU]7tEb at p\I0_jrHu!E0U1lA=VZ at p<m>LL*rYF>c*6mdU/8]Zf.F3<*.ZrtKP.Z]?1_0:M)8t-9):CN#0irT\
+%+3"2KCA<%P`]9<%5f*]n4KIZP;RX`>;/n/XeiR<(F^F2rM!@5*.q2FR%&4#Q;0aHUch1BQ_!DNcWOFgSETQu,Vm<=E8+MAt=0+f&
+%^V&+egGoD8'fciVhU043i::OQ38[&[L;<%%e2TP14ub)Q$MCFQ>^B9Wl63fgMROpG/nD((7%so:4kW6/orq^#h at Enj^q#^L:d%W\
+%'15^gdA>b"4K!8Zf8h9>9%R]MU,Cl(BM-Ef5:O7("G0j-!c?368]#>q1_Rr<CM3*qiCV:i]E/&ar\8_. at l&)tEa,.Xb%>pY>B-l3
+%'EF_p4=L>P\h;hj`/T]n9GW'8]^!YCoX1K7>Lcgs at Y*F,!`$,8:]7S276_Aq9.l^Gh`4[I%:[fGP.u1;Ski+l(8&pmI8WT#[iB6G
+%-I7ku6Xk?eE=Ko6Pq->c;8>gk'"qLB)4$*BQ3G-K9Ypq[C:uI.JdB_S+b`u5^_BVjct8\hO3>kJ]V,Nd]3W`G;W8JXQ+7eTUT"aS
+%jYi6h]rZYJ+;)WDkkG;G at r#:8M"<]EcKR+q4S7+i:_$meXXRb$G[G6'qc(#I at n9GXO@d.RRpK\uo;>m]gq8$.C!jE)miWf"?lh70
+%A9p*.h"a`E_GjE7?jcW`U*3j5_Oi5'>#_IV<V+Tj::_u)P"s[2*VV2n6+=m5U([)B*kcWS,O[1%Re7HpCD4eJH)*:<j!+s;59Epb
+%S>q4AaEG$'_ad5;MHt#A\asdn;!1a]H66dmUP/h+Ch>_(!`uPfM+tjQXra`UlENJ/LNnCXn><$VaLgcV0Mu4IE'=(t,i:%gb!.TA
+%QbYNR$!<<8WkM6r1c.;O^XP-]jgcdbQG;$ra&=Mq at lagIladP]a.t at G?&I9L-3$!u,kgJe:<)\^pP_#<%*%D*[:JI^3i:(;U)P\k
+%4L+Y:=B$7K[0J;D at kM]7QFm^oPFIY_ZKqc5gY`Dq%K$Xi?Z:=W*5K"d2#aG4,qg!-aE=&CrH#sK0p:)abe(-=;Yh(CHS)k=*2-.(
+%,F:TD0kb]28POW+oiI>fT6>E>hb0Lu^iWCuUX33*%Q.OLL\6Wb)r=)gJ4WK!]>*$E?D`*F4XohG<uXr\V/L*>VZTJ1[ZS@$r3>=S
+%N2@$.F"2?&FTRiU3DBT)2Yhc97HLX&$0M<k.G-8mALX at +^[kS!)&)j9.[m/0<$j>H)P'q4A#PNm_4q:Sn4UX at 58*cm1?qmq;QBYP
+%2M?o+PI5n!0F\&/!VZ%jS/Kek>[V`_WGcg'^J,Pk9_$u0L<"l#)_IYS+d!rcj't;HfkS\t?pV5)F\+aqoJoq>YFRITpAi4&^^Jk&
+%,.T9hg_2/)O-P3aK9q_bRBiHY\M_/&KP(g/Z#j/078qnl=';G]CMr13(/.0)ZE*Gp<VGZeoUH3m+.g\^INlI#6:l1k9JU;<kVZ%1
+%53Hi"M^c3'"%S:c'(ViT_D/.QoF6[cdVd^)Wg1tV!X(`_B2(pC(PZfsml_t]8sWNo.J(GN^?k"g?DC\aQZGk3g;(UgQgbo,j^Sle
+%foWorL$8q\Y9fo..;-Y`@1N9's"c;2(FBZ-R02G:-sgo0nDh\hH'1!_iBs%-atW>jr$QfrY!/8>jh6hd/"H_a?#K5:9:sBk[nU4=
+%GA(cq8,c9 at TV/'lNR)R/)8p*hcZeh?ku(Tr,s,e9N$80ghgMY"jE0ebo/_<d;*"O#M?p5P/$=&a8.dt8 at 459sL\!JT^V?"RZpa-R
+%14W13RQKAXksC3b/Ob)JDYqt)UV,]a??=@A:_6[KH2^eRY:Sn$%Xk!L3u3fRqH,Gn-Xrs[)K*%[2$sEfU0%.I_0/:"Q,kV/C3;D]
+%Vp1dhUpOSP]Nir&hGiLYZBf+gI9Z:l4*S,U/Z:a_!;k)3T?%B9@==b^76WB,Z.u at lctXpa?_h',9o0u?iM at Yir!e0Ym0+h8Ysu at p
+%5$"Zflk2a`*:bU7I&$B:E2;d1o(@(ZNap]<8/Zk%W"%8*rhjAX'#fO7PB:4S+YV,o2/\qsL^QjUI^dcEi6Z@;[GNq&0dl\kf,-*p
+%LkU,H_'\fAOr&p+?V'8%4.3gRM=?L;"%eh0eT,5"<YCX<)\/dLliFmm4,JY!Snu,g?>.&si7(4#nU!<3GH0Ycj at 056f;On<:5lp$
+%-'defLr>lOF#UT+q,)JcGYXU3P%@4$)"p:nE;K7[B'3T3rmKpD9Dln?4dgi^6K33.8 at bse[GfKB*t#W84M<+uK>i]BheO:MK/;^9
+%LXT:%iSRnLjG/E?Qe,U$BtIGnplA#lBKgs"#AHG at Jtq"GlALkY_XVVlacRfPPhV=FE3)t at p&;:Ni8CFAVK4GSWB+r,DK at bKZUAP8
+%5Mt8AgHp.6$Vn4BDWXXbJb&;XX!H&[OA1-4"JkLk<jh(G&>e6G at F3d9@cj`"G+CJXH2+MKhRYq7Q_(,FX]mNng6"Ft%&D1EmaPs/
+%EEFY899ZN:/a+WVP[ooW:sL&lH at FqAOTAX@g<OW+Eme/gZi7b6Cs)A*Cj0b\ZhVQAUuiGU8NM)?2 at f8CkC*_9PE]c32k_UU]2*dM
+%O1 at k\@I=I7D4T$tIcHWc+%=_CKP?6M?f#)7?'nNcM@[E]Xg#?/9]R[mr2Cu%_sW5ojYV(V!Ulg;4jVEaTqRJVbO6BBFY<+$dEK(O
+%jAn>0pC-FIp_,b"js*bjP&./]Wrj7U/IbX;gAC`kZ7cs3\;1UVA`r:=(^?3H^R]?DCIN&HkB>P?IAb)"XceaX-pO4i='CL(SoQOZ
+%E#Ma0 at NR+VBsT.9r)ja?D_=W+X0='j9Ul31F)A5(]\c+3EdX)EOh_&B."X%hg?PL,)/,U%s#0E65BY2a]9:0_%V2/La%P4>KNJGQ
+%$)5B1gGJL_-KS- at b&ZF]aX75h,ZgG^mgDlgDIL8oD;(N;o#j2_f84riPu[Z?CDTWMm*OP)o!-)GLn?1mc>jj<nN!FsSamroBUOT0
+%(H(^[96*f"n][@Ae)H9amC(2l[*dXAfWh=YWi.1"&fb16F^N/W9^GL6"%QL)>:P$=;o+ZbJs0.GqHHR\gnA15q$$e)4-`IR-DtZk
+%hY`pklCE2RlJ2*OLe=5OOF=.tn$QbCIj-mcgs7[^:Ru^B'@ChTXXULfiDTu5G?WE[-Bn<SB4FLM8a2'pT)(_<B at fP\MNk\KZ@"b.
+%oCk<.h at _u,rZpqPYRa\,Pe]C7!ga96m%Q$^k.u<rF<(Y'D?7$;r3Welfj@&b0Lm6c9#pUm]!]Y"B.*AXUrZb+T[\;hS<`qJ!%ft"
+%l8\MWLrm4'?+_*=Umui6>6512[)is'nc<Y;k3&72T+:C5!4usm0$$AeORIT-)eN^C;^(H&^7'k)MIQ=eV[3VMep,e,":>.Tjiu6a
+%a<-$R9em)SejW5hf*A4MCL*0DY>q0E-":*&&tSuA4U(_5Olp:[EF\Q,^!G#upnET0]op-,$dpES%A8qX[f*J7R?.<A7?j!s&27pJ
+%"MCW6%>(nJfV\'=AY:<aURBSIP[=X\JY_T3^PY)Md1PFaMZSud@?[RBQY"'t[DtY-L at u2i4sONoc1t[bHXkoKK:NgOS!%N%$Y%l;
+%=4tA4F3:ibRC)CJPG1sh-:Et8:/9l[gt!LFZqe"*-H&_?8^9mVWOIWJ3njm2d4)qg?5A4f7K4<=W,/A8_VKemFWG`0$rd<3rcl(%
+%n4eYQ&*d3>d/H(,Ji>rbjjEPh7p).@(aHh^>3BEh4J4R%Vq'?)bu===K\X'^9#`<hWbm?K^LZ)saCr_ at h=S at q*2Fi+.W%P:q[8'M
+%g7\7<#5amD?=dVIPqS?1GU^W^N?-J"WTI^_`=sX)/FWF>I[-dF_Is:LS.)HIGf#]?[:`@o2Zoan:/t8'a\o3mId4(3j.+ at +]r[a,
+%@aQ?\^`(.b,A`PG at JBYXR^Y/hQ(!^?Y'*J>1K^t$>s)=%/(3ZFd1D5eqjC[<.2e_X&fa50\JT,=k=chUNFZC=b%Rn+)8;,(`d[Ke
+%;Tn-F@=+=$J^9IsQE.<<];7'nh!VN:j'fZXoq.sfTS[GUhQ)si_&[Hf2S;ZJ$U`qW-;sQU,Z?%0H6Ll31/B#HQ0>F9*c1X+hRPU9
+%C^D<mBXSr5KaH.b6qDTD_l1l.$#i#)SnI>c'4j*KC1X&I,fV#[2>JL*^Vo)pQ8YM7G,*u7lPs3b%`c:-l<9;m?ZW=uiBA1F>6%'Z
+%:hdbF8t>_E\GKL9#9VTKs+MrS at 8[[/^XEk`(H,S,OE8+;HOuH6\B^."n,]+,kK>'*7nW:7j7/?VV-6N48%)o)bLr&#M7,[$r?%@j
+%f4c`*>q$Bp2Y2th7MjO^>nKQ\+[=VP>pkp\e9!"OE;-K^N^/8Y$-fPBb#A[qen_`aaXMK]cEubXjgq_G8A88p,pkr(K`7,bK4(9$
+%nb8OP1N]i<)Eu>ef\3m-2<XbkaH at j1*7\oA#tV$46u[?sft4uDfVeJjYVhAeo^X;$geYF_k-F;P+>q>/PZUdd=dbd`"!;a#'YVc`
+%A@(=r-LRD'/TQ_IkIs7Taa73F`X!=h=C1+5]5Rc]9+WSBA`)OU_N^Mu@$@6S,g(2M]kn_>B>qs;3FGL%>BFa39nS[S/'][pYbi!]
+%nfgUj$tPe,o7p0T?B5:B6ZWk?pSCc&&@2ge#$#b/m&#u6m^ti+@'1q!H-rsC2k!B_<I3&afa4_7oT5*/gZ5"p at p:?pM**,T_(M%o
+%i-ba1Q.aRhQj,XuKo0+;Y1u#D#uPmrFdk8?<%Fc2G$mmHZXR1Lkus>5RTP$9"B at s6BDR^&-`A?,';7n/9]1TQLs`);^R.h]'?82(
+%pWZdR?nlcW*?QfOTY"`b?*p;b:'#i:?0a<Fa3qY4aj'E<!.D&uaL5V`_m+TWrt'dac<BDi5P^K1.U+)_&d6:Y:'^P`Rip5n20<.U
+%08lSnOOPo(*.\O2R[I3*)pTFWUeZ>[b#Ga##&a"dd0p9Of2o-=VZ*ng93G]ZUF"Y"JeCd"QE9Y at Jqo-@+"''5reE&4S6l9VDQPX3
+%iQeM#8s9i#J4WY-fkM"p,%%2gn$XDWVUic<P6[/5n^^a:]Je<X2spl'LZ`k6SC:6#KUcGjH3ZM=&mN)!\*.J$j\#&:VM^]&Kp<bP
+%88*g7XO!Boo/o9J*cYq/@csqcbMf/XM_gn6]Z]KAB25taj/iE at k<V+HH-)a*3Z\N<CEi1DIZS:/i,omik)W2hPP&*D2V4Sj_K#P]
+%K'*L%o&NrWal:?8G<2"2E)iSg+"5&0'Q)$3[hl>(F['_s.CeRs#H4oU407cq/\`#=k!h at r$[WFa4pQXb]=U_A^oC#PeSo)`Mc%FL
+%57?p*b+2GpX-')V#8p[Y?1">FN`p\59ODVi/uS(M7!ZCCq5iq5<_BJSH3tos$)'H4N;OemTHl[PpKSq40/^e-f/_%GoqE_D^&`\.
+%P37;B4'f78ErXEW7ZfrqldPt]:,LFh[7Ca%83q(SrU)K#![>J&*-tPQ"Q1T.P/^[j*l(D-8iu[ZB]YlbOH<D6)gRE=&(3r9>AZ^W
+%2>%&u:u/O?+L<>U.PN;$D_#M%dR.<$S7'd(mk8<&d<8gc7Zq?r=Qb]:.a@$/!qNi&S!AS>1siXZ&l&5:nD=WW!NP\jF,B+QVcjL^
+%c7)CY&<(XB0&!\"CA,8RHD+dACJc9%s0B=/)?37U;tFIa^-bbOX1>WZI-d1K>!M(=Eas'MkDB6k-NGYV0L+m_OZ_"3cM>C^9dUj:
+%Iq*B?4=N>_hh1TEd<V>=5I;0BD`-F=iT&j^o)P="hs[_/ar6)pI+(h=*6d-4'GEpj\=Kqu%+qi3]H0/0XCRV2">>H;1_m:-[AQ]b
+%dZi7e:1M#%QVBT%[7Km'O5/dg>:cG5^haq-Gnb&!FVsmoT.?ms3H\K&9m70$Ra`1-'h".JREVpm3h?*N^!ErXA+jg,egjtHgr^>W
+%#&3sQ)A5cXpi__r#5*$bXJ3+4UOiXZ6(.1$W!]?-Q)[nj-4V6dQr@#?le_5ip>,&*!q^`2CRpmqM&:LKj=BUf4=#Un+ at aY!e'L<u
+%NF,DFQ5b.fE@[=aS&07'rEp;^cf^Vs+:#@,gs7nYUYTOppMdSj-<c=Uem.a1'UTBRlgL>oRtJAneU7(YNY=q[&YaM1?18t2NXP?Y
+%0FM5DoFfBqMU<D'Ft9B'D@`SM9-821hhk/#&;YdS&h6h&Mpg at U77&&:;&LJ-<d9=M[q+p>Lc]">6T!"J!l)8XX[/U,>RrUt?*B72
+%6.LcQkJF=:A("7A>O')<r*Y82HYql4rK/@H;2]jSDne4ihV.gBAEk]d)W;BAf(tlGI$oSGb`tbLZu4/p#]Jb/rRI[]n:;6gKdhHP
+%MNmO.?ocVsX\'/VBr?fQ'IRiV9)cG?Hcs/G]T[LKlQt5].-4M.MO0%;A.o26Bh=g[7rJMQW'm<"YPU$Zl3P)6b?I1&XrUOZJo+'_
+%a0KBX4k&H[SuWe5F>tjhpush!-TRAlbRa at AC`Zl-q`?RoD<Q$f-sF>ga_1flgdk]2b>]t5Te4T0EYF&("*-it*2*?_#Fpb2f,7lT
+%-<"Oqf[B82JJ!3GDA)&>1\'K5S2f#LdY+;_k":"FCW@)K62F%[1WrL`nW<3;B(IoQm<Kh#-')CCK_`j+"d,Kbl0?solN_VnHZj62
+%SV-7DG=.^J5]K#>)0pMhf4XhAaCAT!XD'+*)kF#,WZ=N9,R((;:+RZ:TW,hF>cjGNDu$H66d9QK(m__74jTAr)2DDLb,H*=T at i&X
+%8SRuC2i`3'pe)Fr$t*Z^%f9I]+V5]ZE3PJmf#!84:2BFMkUGAkIB9EV((Mr'Xp*cKV`@#dRZAZbdWs0:8stjW](/1pq&]HZWOAC^
+%$K8_sF9WLn4B3lM\C;5oa>/Grrnr*K;(59DTk6u5d.q4QWuKM8Ya^rWSM@%nq`DDZa(c]d0]P(i1j7VP=%i+34.D"U+Tlq?Lra>1
+%+noHh^(=sK8e7 at td>Tf(M=f3S>H_,Akrl8S?Yg[A`c?&n@,LaFX`I9Aad-&!U)[HqXpAi0MF7h3^KgQeTD*!(mUn<PU)qd?"5BAK
+%'1GMY!EB,h=&tYe,M]q`ns*d3l!#ir at 1HG1h<)@ij:`Z(b%SG4&R=]VHtpZ:.2iLAmH3fH1-*MKZ*GY?;i;PZ8%)1^eBbiD-uJ6:
+%1SmfH0O*,Y at AMIQX.P)Rmg5ADNNCU"51O/#`f"U"Zi\6=hbc at r7oHU^5.3V1ml+rd)F&T,N305,+_4%<QGOffFq)i*F75TrLTM,6
+%qt/k=b312Uj&0"1rC\Km-i<SB-[;(7m++d]aSCBiPm`?G;N2[H,@^JBCMdrDIHWkfNsBV7GU3.!?r7,sC_WjhM"9(U5k at Ik$bH8K
+%5aTD$^#=jh\QK0K'[ML9pYAn,r6tcY=bQ1PChpGo2B1GO[i#ecb&W*;^oR]6>SE_U<T$WB_dj[neD;p3&#Z.0aHf>+rADRbVQt*g
+%$70o\]8/t#.pI'^1YF&Be?8*FRD0#8?Y*NL[00Y0h4NXO5)N&[e?dYJS]4pJVh8Nq-65'pPRn(Vo]n2gQn,E$boP$Md!ibVG`>p`
+%WWa2Fq;5,!of`-?[eaqnphAJYc(G3hF-WfmPbSXap3l1do8dF\;([@)!Fo:-c&m9$Ja51L3HoK_5r"4+a`(G*o[8rZcKWGkUn5A:
+%Tr#(Nedckq%*2rdgTretLbmKN0MY1(R`r7!_1JBD8A(gCT3JRt36C. at Bt5W/;:UkoB,coiqYHGe(E[n>3?Z,rJ_/3OU8 at N'a>_4C
+%FoP0]8c.a4ft0Q*_N3/".1-%P_pRe`V,gC"qlno2EWiOng)En&8A.9dS?CR:Tt1fU3E$lo>Y'F;''brrV3)uCN1>*[40dqn$jHR<
+%3Qg/Q$TXh.NW6!,Q>()?bLCl+NI#U=EdVoA:k<g7Ckmi]@:VfVcr!CCl^%pr/LC?ec?/@>d- at fh?/?$&"">m`I*)72c.ZS]R\sY0
+%ft__Y5b?4mC:-BS<<i&2BQN1l5o;=(FsQ54QPu=S='_6u2%e12i2/!MTs5A:)4B^aE*/rW7rFL9IBMm9b_1B1,pt:4eaD.'Kn/AU
+%.\`TKcITP+ at .LC?ASE%3gu3=H![3Ek"U2[3:.\.%ru`8JlbE-4'.)Pc8AP-_Iqq`-q7NB(r_?QJk;_\9rXjBr(4m`(aqj-!_)&/K
+%;eL'D[&*7h(nKdB2tb=7IblA>Ik!^!BNoh?FeZ;K+>-2=["gR%%7CtQSEW at F?I&FVCDqi$?D:\us#K0J>%:+DK&u5f;@,3@#!&3h
+%dUMP&8LiNu]j.H]\#nD/T#NXh*4;;CRb"!a%:!a1,\U,g%CeQA5Gem0.YukL(5+cMm_.Bl76>k_AVOg4ZTU5..5WbF8$!5oQneiU
+%a=RB7TW,\)'HqT`n:G\L4J>H[:m!E];NA\p+c?2=R6nR;"NP?OfF^k$]M^8GLD/$#,I=P+!EmOJWT5+*UP-29dF4C[U=T9GHTS%"
+%?7%gIfYGe95bsg,QXkfLWe`?o$qeanK$Y)`o1L*^&D-M88-p<Kq5U9_`:tUL8$AdDr'LW?l`qi1&J_MebI*I'It$.g=Q`CHU$DD(
+%+5O4Q'uZ8"?lLA0+"g`hp,pq]SS=BMI6)-B/:XIbdh at +k5<?XHK;C'"`LMJ%i93`TKa9356iLG>,fS:+DZ&Z.*:ZW*KNq^K8YPL7
+%A+imHqE7&+LjSrpKgDWtp<2d0#@]_\Z`hnaXaIQ8o)'BD5JV9U)e#QfnTQ7;(j"=j`qie:e;OHl%!M?66'lrOW?YWrXT>_dmIl4F
+%gqq%1J*q`&,QEVui'9k%]?3#+-%VW8"f$@#@3p;#j^1V!>&Sc1C/oPm<rKpRi2V4Po at nV,3,1]-R`M..H]$:KVYJSA^U-HpUZ\c@
+%Qa>"CVrP_a-5SFmA03uLG@]"T+&1i)CMDrsHR8IJ9][oSm43c^<_,N?Tp8o)]Bu3qHJ#Z%XJU$PYJCSqI.T?226bhoD%k<<^Q[2h
+%=Q]YgP;9'*Z4^(,YEH at Fl)hUR,Up$S:Z2A)>!:-B9ekBCVFADo[]MVMb;sbsA#3GXr84?gQqB.h/_,7*k^D/7(cj'r%snZ at n`t:Z
+%nckAm]90ka-t;7j(fMau4,E>emb:8Bk;]$5Rh2>r6]LKOR*7F(YF0^"8>='n8ql`D\@CZ)nNSDl1sOJY(1%@K8"`nh=d$+[Rn3[;
+%,,)MS08GD<oHRHW7'I0PKgqqs:HV#Sg69gLp#eGaL91'k=!4)n6Fp4QJ=@\PQS9%C*U#W=2!hj#hj+q?;p"fkaXO:[7(OX:Fs77*
+%?]_=nj at 8m`*.tlK8QT(+kRLjKLWu,[dKA9I^KcH4*phN$S+V<Q+C[f25N+6rdo+MXUqr1nfp at 16["MbF_i;.R77;`e<?f4e;We\S
+%lJ6S4_bsHC(&N/&.hMst.=m1p^6B61)Q]:T_rd`(q":q6fdX\6#-]6#htOTRH)cefeg4<.+*/RHr>p+X24mbmpN8*nn&S9R3Toaj
+%\VYI?NBR=9XOb=k$IjuQ/D^(`g!*Qs%Q4U+??\*O-#b1tl!sCZbs<4#cQNg1BeQBL at g[MS2jfjc%JkM%.GcX.mn)!X2fK]hH[^5^
+%M0^b/QUZ*)^.pikAt6+/QKFPHctes-bo.)1fiqQc):<K.cXVGA/R^s^cQcMtV:^6B:8O!InjtlBqUCGW61BAehDYVX9ZmOkM)!;(
+%6&MQFV3?m:p:YLO<Q[(#aa"3Pb9n,jEC+:nHn]ttE=,]`)nJW\Q'd.Q8E,eqbm<C_g at VB%Y3e!R=Kr^0>05_C[V/g<:=Cm<o-l;T
+%^phgEH)VH_Ol<TM`]Q>MdGjchbEoffX9p1i=ps,W&s;aDU"h]b&Er86$>g6R$\1C[EL9[/)CV$fmp%)"#$+g!3,7CN4fN8.aO2uX
+%=E!@f-T2,&?B+I\1[r3<T\Lt]UDt`<?>UDhX^'gfrB6Xe;]`FpTX?6/YP5<QPb/n'U%^6Fc6q*nVC-Yc;YEq*nk"LZo)=Jik+`)=
+%[)!!AY1mmTBT]B?c4W`.;8p0b;D8mE8smhR!+[n1$7X<B][UTJhXbI-H0IWnGG6<"gi;'E:JS]O)#*j"2gS"a0h:L9D at Dd\,OWC9
+%FIA#G?."5RPOP1=RN"6UN?64mVS'"mqgkki.EB_a)AH\WBFH.C2rN38lWp at o7K+%`")Y#oCm/)V8+#B;;a[,ASe1P;44pHfo\;5a
+%e[nbA,L?6\AVToVLRZ&Inmk`Q0q8cSVb9,`%7HsZSL4_Wn,20/Je7!jc]e_])l[Z?FN4IH(T-9he1uLTpn#7C1H_&d\OZqglV0IV
+%]HoE%^pu_p`,R:G2GNb;5AgJY)3fAB;jog$1R3>&?:m&jE^S,(YGO!Wd^hPn)sr&X6/W-<'&]qE%h8CToIlV2l1&ZBmSb$1jjZDi
+%"-pO2.qoWaMJd8Y$0n7K at R+-Y;4f7O"q/3[l^Asa&Cu2#;RPGIj4frKgUg.AZb7eE8RL3DWt.*b!`k39^oWhi9W&3)oOEOH&5,cG
+%INFsg9iL,A^8e`t8VJT,3h_s's#DHU.]*Y+YQ^[gMUZ6O2teh's&E85Tmlo[A[rRq'I at Jn"H:%(d)j at PVs&d=ad.2f)>U/&_V-t?
+%AUatR4XHb=k)sf0E\Rf9`JW at Fa*TYr-eX?SESadfAmbY+^?NXbP&[/a1M.WQXaTQ)6^j"!@r at u?dDYLk(cdZ`e32d.BgH4kT`T7c
+%I<oh0k5'9JM?Sn[1o.V+aD9Kl*OjsMl>S*Ac<]q%YHKafl&sc"c'tOs\MBt&csNd]eKa&\B_&+lQiKG0onA.&.hqbf;G%3$1P-#d
+%9BiJu>_?7","NCW],jL:Q\G]?"?Kk9Wa2_Dotd=UD'8I:+\Er?"$/*U^K;G26n:EmcO0'DO&pJIEXW$L/"t3%Y'Ja3S&l;6`#!H=
+%&p+HqRP'LVb<o.4<dT3Q`b!;RXj,R3?&6fKWHAj%NY at t_=rOF'0*)fh_<`nSAf>ca%MMQcVSNC`l](N;E3JQ$F$F80\L&kiaK*Ju
+%jZcH`!hA.\Wl-07D)d.C"T+U]Dq7&C4P)C1Megt#NQbs1YD!F)8Uq3Ja.M)b/?1cbnN;t^aA-oq#&!+.3NAXTrFmXu:So;+P at WV3
+%D^ulH%S8q2I<Fhdej:-5-ANZ(QcG:&oIG!oB3X!aEAaX;]:FS?c_<e5Z!u`BI**RY*qUG_YD)6PIo*G7.gqEUK%%S!+Go\7:Y6N*
+%"ccL6R&,7L8kQC:O.1fB;etLP]md/FE'd>sDmaFR9'j8 at 7d,/H(s^d3]mVh$'@K\*PqdF54+2hi9NXkYb5?^s*a&#ja3o!c@,b at 8
+%Ob at V<`)&e]h`C'/"s3RmH"!WQ\J6PkBo4+F6_l]*-SnDRX<c%k$B]rT_nk2\I'jIDNjGes7Y%B,,p_;Fp4h%:1A;QG6P3f?Xm=KS
+%fl,R_?l]-cF/PhGkGRF+[lbL"`0r__V^YIsaoX[h<\rXX[4M+I1D8=keBiY:./[@mKQ7=&h_)@=.J2sHV>.M!U*"_-1NsJ6A+#k)
+%!K42]TRBTfc+Y[T(THtq)EY;=+/6jm^BY[+\]aWA]k,k>caiP4`#!BS1 at 2_G,-AkA\Om<h"YVc2X<;T6Br7/S[PZ8X&%Yd3DX_nG
+%]>Gd?+$Kj(?KDru3h&ZF.gJXUc)j-*-T=o9]O*Q38\O8]r[q;Q9m.ijjDC^^a=UisF/6;aF/5L>an!A*I=!NV,S8<4Y':qCF/K]N
+%6!`m>4gO6?#ElNTfZd8O/D\7VQ_3$1jaH8R-WN+MPBY6#NYbb4>YDc/HiYM>Pr[cB;^(B@@I[5:h1#S&mD]G>VWfT8a[+88?i`Vk
+%j1S:(QR)WUY2s?H"ZTP7%X3ATS_1"@5*n/D-O4Lt",&e&f?q at gd(N?Q5`8:G_t`ZV=Qc4;"akbt(5 at K`ie99h+nK,gOZ92BT?dP"
+%[1k+ZCP9=TZU[+e_ at q]"e2dMb>Dfd[p+7/\116mMb-6c,?Ni-n at 2NOYQACV"_W7WNC4/ounh-ibKUPk!3;&d&+&`42Ou\PkXjH$=
+%N;($8k:,&$_%aX'Z9tTR]'WZH^3db22_%LX'V'X1*sQ0o%EJEW`EJ(N,cbj=-p<>Km.!'B&3\6S`K'"]L>#Kc4*&C/l3hbp$2U<j
+%cA.H5K([$Ol;ZG^V.utYGC[D#3r;KNf7LTr$oC79mFD?\#T,e[\oVc::B51Z9C>&Nn;*+:25,&lr"L&-EGd4JqBoYDBKsPK;au4P
+%P&&u=H&W5@>B#(0BMNB<orA=cUQ\K^.2f"E&b0u+2=K/h.e+XHBr<,A\k,sU2`Sq<KH7&ON9!9:hn(2=[D+9n37oqD4c!ao1U[N`
+%3%XOcZDo'pOs%W=]tT_42\+4k3@,VS?>Z*+B65q84Vo.:Db:[j\F8mlc-=r%^, at m84,F%I],MjUS>0F8Vo at n<',.3T$'$gcSifQm
+%dP_i;"57i+nflBW?G\?V#bPDCPXcS^M0jN3CC^)Jhd%);?st^8 at T/h"`[RN`0]?e\OR'7<;c)Q`iX/NVf.<R!>:68HQ,p`n;rOQ%
+%b]4F)F9Z[UjH;S`1-]n=$-4,JV\J&N$f&C*qMSH;M^8A_M[L\rPXGh\et*As-U/9tDR4 at GT%Gd/%E+R5LBl;L-KdIrAiNBa8FG],
+%B5V2R,jht\`@%U.%KP-\pdKNZP2i2pnd#aCc^$f*(F7o!S"h,:MQ'08P=^%(!MGOj!bL$pJeosreNbM.S&G_i7eZC&F'<TI6'Acu
+%PhR>TZII"BK#o<7EcZE+afUo!1J*2P:6!#oJ9cE]=@,`D,pL=cr1&corS#mBo(Zfc\6Kg-P4)%]T9AN8jMH7)YfD8E7nS>"*t*Yu
+%Gr[Q)@:$ss2+ONYJ6s);Lo3*%gjE$.ZF\M1i_ at +6S[5c%;:cXF+/saJ@'e)/2pk61%)K"7Z(3J,jm&@Z@]cou.;ao6(U\1:K.kK`
+%C/Q6bS6rFjh_t_^hq!8^J`X$\P6fK(#p1LT*)A9 at +m1WF1]JpNgWKEO8Br at _PouAXf=%"J2/4D\`@Bsd/6Gg_Ds5*X0OR<f`BjHY
+%J_3rCn$i:Z7s$/IP)_O,r%/<1"S8qq1X1*F>Z'^l3'(AZkX0SA3(%,sd7OIG0m2uIDROtk2L\C$%R]`7.NOZh6SpqS'W#gYbY7-q
+%UEDe&oMP>-`B+.L4,s3/$LI:-j[4V,\O!Og`U_)]^r'qs\mY3>%#11\6/Q)mjm4i at CeMdKP5`F"(S?>"M>/2SI:u#-iWZNnqo4&h
+%BhU7]@Ku7G4P10HmeL5Mi;fH/6OrUZl=E9B+YqHqpEMWg]h+^So!C`65$p6]3$816qp"?Y>upW,GZ-g9GlQko9KL20j7os?=]e&P
+%TdT'VD;L>B"*Ki at R24'.J_QS2glqo)P?HQ3krGVWh(1,h0as.Vo9KJWcUfF5DNfucgccCk77EVLT&V?U;s6dBnM$6t at M8@crF0PB
+%L`<6747=g^2'F0cAMjR;X?F:4T$CJ!a13^KG.Q;`j/7Rn-'TofP#U)HIX at +B9u/5Xi`1L(kR_FL(M4h'^B at PrlGh,q#3^G59^5%*
+%A\QABY%OA%C-hA?kmN&[LZFVrkh_C0$7sj>\5%O8a+P.S^JC2imk'(ic*98^r4,)[amdNHDUgk[lPZS(;^2M"IORK97F.di'R4CK
+%oN^^Ve<Xk>>a*StQ_`pgF8;1DMKQ<@E,6nB68>P:<%P]Zbb8'aZC"pak%tYg,N4tJBOrG4NA)@YP.gR'/eCj&*.#VqmeL]bF/,!/
+%E*)f129nmgHs,W,U,&2c+nPNN_]m'"S&4g1WYL??Kcu(@CY_ZG\a"Sb4s\[W/!lkRAXd9S82\6ECT>)F^?9+ig&d'g`f`Z%n62iX
+%c*'h5)YB1j>c$`>M#str>+jib&38A;F8&i.QK3_WZ=@B?R at AN_``i,A"*ng5RMS_=LdDq."VZg0eA7)5gQ"uuk9<n_44.AugJ=[f
+%ak12UgGGZ_rq&tW\2UrH-RFgFC9)VM)o)!oZ%'Bp7,*@J^YF[Yc8F!4iMQo0;ZkQ6UMo`ugLoBDAIT8FDG!@p-G]g/:Er?db/PK$
+%WpNU+%&V45g/od8p%[d$=>(rna4C2XX>oe0/8sQ8-aqbIau.=G81Atmq\`b49q_-5ojnOe)RhuU+hA)HE1Z[k*g[ko4>&+2j9BB4
+%6\;^<R'>7=Tf:n6'q0qP7oO:%iZRDe at 9)"54.&1%k;k]4!UKo(Cu"hP6)AGWQ(EAilZ1d[joF;''DqZgMg,h2o)'p]dtrG]g=A9j
+%^[GN]9LA&.k at o'R;=(i!WK0pnZD(Z=Lc=')B;6`WrIKr-Q*^g5aHaL#c$d/:A68?an%$Ak<1A]%gL$hjilaApfd(U^KLT2=adJn9
+%HVjnnCkLT&c9qOg<Cqd$K9&Laka\c`j\!OsDF)b\W4_a6;s\RF%4H>n2F>NtrH at 0b27SH\(YK'l:3;"ZDHUngqtS8`_<K/&^"0nP
+%BZdX=Hj[&N=mT/W8^aZJkm^t]6*\T3atT)j]T(-'@O6-s5@>Mu<GU)0,)H+e)S8iQ".J-3n!'Q>@tCHhKa.;,>&Nf1$dRh.gsH+f
+%4UJp6+t#6M4./#Bb*Os'!]+D;-PeA6%FQ3k$B>'FI?`ggK9R3*Qru1F1S(W0bE!pO+Sp$R=a5C%]pAR'6 at a!DT#%fH#d at W[)u8sa
+%h at la.0uY[L5VT!J!CjS^9Wf$(K21`2%HP5;/15T_a526]J>qkVPNYKR5O>,G<0e?><b"TsfurR6Ea@\LQ\.DZKktej?$:.::Y at q>
+%EcY#`j0(SqJ9X7U<*Cnn+d":o7tTlf?m*fkf[E`>:NX3;2ni65HNM4QJRb4k'BH16e:K>\>D,S`bO!q.+"VItlgS;G3>t,:^g4"D
+%\m'l_M1RR at D!e6igem-A,/lS-Ms]AO*h1r>Ku)g!4OMegp'`ciY^51]Q,7=.F2GmpO=0[FB60i+^H$KukgMar>#"M at T8gV%W@@If
+%A"OsQq=T;9Q&ahHB^+O0r^t_!3=5ER>O1b<)YSUT#*"eg`h5N"#"$H-U!Z9KZ*9nCo at iat-oi3HE*c),/rXQ8*\3PFOi*W7:9$&;
+%h,[s'(piU2g>oh$8=\eI$Xo!!fYFGOkoV1O/pB)655Bi/W"?%Lj\S"lG'",`d at f/t8sKHbm=b&Np7FM(91,Yj$f7>Tl$4*#X=qVF
+%U-K2lDL?;a-b&Od\d8Pj0$g+>\\&Yal*s$>'Ab'bO3cZ).bpM9[f&lrh3fNt5N%V*XK:#;[cr@]qErnDFBZdB8uMl*g<eV"A4(nl
+%2]P[Cs-4[5:I*1NjV[[Sc7bg$Yo[su+$fS7f.l*_"plpjP)5mp]X1I5-J-5>?]$*kfK_chbN6$k2qYD]7c3";P7Vfh:Q39Mk;WUs
+%(ID'6,d,\nA[mFKE2RiE8/U9FZ(#2Y;*<h7dgZA8o-K#_`sp>"Vaq,1IZhjVHAb)/>>HZOOI^;Kh(rqHf"!#j-Ul9s:3oOWaL5=)
+%qd-a!QR*4l^F(DLn3dX;T/2k.1S(cTpS"na7Lqo-$nm;&Q5T"4*`I,&cN#+R-obYol&_5g2.%'<2 at G#<h8%RNi4M%&8q?l%(Ns86
+%\L=Z>>=i$O#FPR`e/QDKE\EPCMG6ZFM5u3#Y!E,nXWL`aUE%d?'+=ReZ5U0NY[T>.#5t.KjBfICLE+G5Ue2EhE4qQuF8Hf825+t<
+%Pnk=$;lqX+*G*>Y@$^\eNm5VG]M]M\a"*=r7:p'MG`Z"Do:!j:BkUVQ$;q at qma(Em$Z^!CjQA22loc\Fs08.e+H2P3d*5&,m_t)n
+%[a;CE!mJD404MA4Vm.!J/[i8seNWjkGlaJ9AR\S4%Cd'%47ciEFO+.qWH6f@(s7eqjW)++;7C$FeD$`i_\u=pq"fu/qjdEQ]_e`E
+%55*"/@W9<5X";T!dnZuAFBuu.Xmb$h[, at cpQfgY3iVe3+b"Wh#4<0LM$m'^"lhk!^ZXGs!9_Loa at H;!f8_38K2Y?@[&2cHX!XUM!
+%PpA$f7Z54jC2^K<0+MHF#3=G4%^MmAHuglQ7i9[A*&KuH.\#%3:i3BZ#,GXEn1bu/baoIa!tKD&!K,rn=/ntArj]:"g3,7=ZeVU`
+%Wr-$a't=Np0"Y`L*%'ja*nTkcb at J'W<,8X^N-CpJ)m(+:2u/jf"l)QbP;)_SPu#j;,@<f!;uaG3A%.,u-NE[i9r:Gc\j2>f"5C1,
+%QnIQ2[bM?:r.2<"2NFa>=a"V$Mf3B_)XlV,HEUFB9X19T%5t*WJA+!kQalV-cihS[LgX'lVbmoa9;XHm9[+);IX,11/T=TZ/.[,7
+%3S+5oJ(Y=M4&:HW;];R at hlmO`-<U^"7fA7Idi`KXm>F+ at G,>cdODEL>=p8`b)Z5j>GjW*SB*iJ0:OC/"SA?+\$\H-3>)e;Tn]k&]
+%=VcL'i%nbXfV2'd3"oFiYYRRD--NSc]M"8M0tV/C+;_/_>nU&)dUf)5I(0l<Gq)tGTG6[0k7sM1lu;JfD"0GG`=9;.b\#j.Y*,(E
+%;,F7ub=]^K\Y&[?i;cfDS[Va5<,t+:7H`nn(n[(>;lpSg at a<*=\L';u$REo"B)aQF#^PRhEW$;pYu7fF[bVD2hPl;cm6q+f$r0tY
+%#AqQ_1H(jedI\3%R"'ifQ at e-@r*ONn(>@[sX,>>JBC%hCT\OX:;@AlX?^<6E5em5Q"I>9%@nCr[C36:9,l'AjoE-W%e>potI(?9>
+%ZK27-)Sj#]O;*`)A7jP6rDP6GN6(Uio#bb&pcY"H2B-Q[)u,[tMbYiGDp#A+$mXt>psD9Pi('?8o9G`\LFcZ:q!sE$Ai:)p7]jd1
+%rD*$r at dK#hWB$)=PES1^!*h]B;A\n3Mp/N+=31k+Zb$:aIL2&_^0D/I9jqct!3BL6P4cF7dBuaq0"?'HENFHFnr.DsIDeC/j2AJl
+%86_KOT:X%5pOq=`'U[!203iSp.t(XbWgf''&(0>fS;FO&\dZ,IP<_ at bWQEGh7Yl'2QpPfj+cbP\^&u=h]f:_](tQMA6_H>QX41MX
+%4AVZb2A[qmW_"o^"Au6)[c<]HM[1h]kZbelXit/8#4DmlT,bKml-Uot0`BeiC;K!q\"R)k_CT\HI4h'iPfZnD,<4kjcl."If[S!c
+%as1.=0\C1ER", at Bm3lrK%>]0Vh$TdRKV^rF4HsWA7#[WK"mh9<\OacJlb.++nCu#MfNP&Wc?p1.ia at mp0t0/^3e0P>\D'WjfRob]
+%B=XOXP,\45<Aq6nOASq6lpReLD*2C+PXJd3:.>eAc6P:U_pnpFds"QpXHlLV\5$Mq7o:c?&+'Jee\%PGM].XWJhm3"A at M1/"66 at u
+%/rcd(*d[l^/oC1NG.bhfmsV/J./#DK`j2?I7<n-p)?3U+%"PkOraCWF]$]bGe at 9"MC3q'Krme?/QfOOCJlnS.F+$7TV?H_qZ_5R.
+%MdWbQjbf2YB(t41+;_D/@qi,I,?ap+VXNuFo8TqE!\&r<9\FmS4slsP75Xm?>,4DG3-AIf.CU"*WN at +G_PXLp'cHap<i2cfU3SBE
+%1a();8Pu%i,3`d6#mCPHWR$QL2PeG")iu'oKlH<13>1_\a3?]U*jTeV--rI7V'nTDTVHA-INAg:qsjiH/cW8Y`t>]XSg]tRF9jX9
+%!CQM73Hgsae&'\&j!=297c at d<#I2$K&V at A,"-LSZZf<a32o5&.op0`s>XAX$\_Y2DYc*aH!q0fk-_IO:Y[kb2p!9N87m8S]mpft,
+%PPq<D]9?opO_R*_.G']a;F53ZDgn%!NE4hYEC at sK?u80%F1&CFTW/uW7X<Eh$E.;AINHV.QI8?sg-CW<8o?%Tf"2oLJ0)(^4NV!A
+%PT\lM6r5hdDgmjJ;ENdS9aBF/Y*ld&2)^A:C[c";^K3#JM?RTVGtWrWbLLkZ@;Z:3n5[W#X9\.24B%`cLlHh/]28PiYUAui?AEm9
+%*7n-mpIumaO4kX,o`[E+-,>Y-X^uoTiEu3j.sr$D7PTtF"8[.gb#B4h+?\OFm,i`!bDa2b?lm+QLh-0@!G15Hpt(m=NdaN`K_p?X
+%#U8uQ+D=Uk*4IM2TmN/l&\<<e:Zk?bdupJ$3.8 at P]#)R9T+i:/T+nr$7jXM<7T*5`TV7:TYYD)^/Y*>tKfKt5gP0%EY5rn:#=9dZ
+%C^E:[BlBKaKC,>36>LH(r*rZ#r3!#:VLS%b1[57Yr_-Q>TpqZHC(q"Ml:PUCVtuLue&=Q.C@@qu-F=@e,^k(G+kXM+CQOWei(VeH
+%^0V:o;IO=T5`-7k)E^Ua;p"N#rI?i)6$f53fZ^AkM7>p/,Dh"t0\"hn)C?uc2Rb8cc%P=HY7j(`9T\S>\GPik2f??j4deCaD0qOA
+%0=fOh2t*)$`2V?Xm^)u"V`/Y6Em8hJ"ArC#\KGW*F>&:-42EZ0 at 89&SeFt7c"*'!Xm76-5U[)_Ll_JOVP[plFHk_j,^QkSG;]g:%
+%<:2s8QjGZ2&g."hS],$aBi'8Rp57 at YND?2on7PN*mG,>I-0Wp#UikA,I);]3qV0$mQ#LuYVqoU-M(HL/W'UA%:MKFVn*a^WP%#\u
+%.Gp.Q:1,NK5l2UJVQ4QDE0gV?iAEq%OPcn>[83>kSc"`'2cBE1q.lE_Y81:X$?(jiC.Fh_B4>*i14eqf^jJ(aVL:LNR"u0hmSq-H
+%J(T-?mIqmD&`#IL[&"V2nkbP)c!W;`*f5##..4Y03S8*gba<'c-XRtFo,cQ7<#_Im/MGt_h50tkSLpDZPb#^>b*Hk]mP/Y>dj.]Y
+%k'PN\?jg<jj:&-G'CY=8)8k@%9_/i7O7("6IFC#6Q=.tUdU[bAb4bQdb>:+j5W8%O_5aPr"uRgol,-EZ73 at G=?m&25P)^4O1\5/[
+%Y>kB at ig\bY6Q[TbMJ;"oABr?Uh?a;i;l/JGJJ'Z%UQSjp#fk^SR5"lDf%&B%kUB&M.H'h#/la)g4%lQN$0"QEQ[VHiY9heZ[+C>E
+%MJX8:F0Ll73[JXY<&p at hD!Y-9`+X9,b%1VlD8o5p,2b6&bA0gGOZL]Qa\a_u-;7_VC-ttQQ3X\Z2!91WGp>P:a:qdS(j#'pY&1IH
+%r^Ld1P(m+M^+_VOF"Eg-.?jA1#J4.QM:Wg>2!hBkO6,o:RGoe#\!Ba3i3L>A,oEd<.n8ai*4'8D.?/H=o.4s;rSoBEkPm&X$[54S
+%=^gqO-(8a?,6pU*YfVA._3qYqgIGbD(ANo(;KLp at c:3%ObuaI992co;n^E^f)TsFD<\mlW:Xtt#N*K9oPLL&-r629N60DFS!PM<3
+%:)frKPH?EF$V-R at k_9>e<dF_92#L5lO,[<;kSU_,kS0J,Dui]"A?46*6#m2(;ZJ]tMeKEf[bn]SfPJcbRXpMrOkBR9B_Kt[2S4K*
+%2*\i-Yi)%i)g2$6/FsEt`Ok%)P$1_D1IYh/O#t_a45g at c"kmbD9rkR>]\3nF\QmJl-fB?Lh,1SC&UZY5g$umj^2gdUCqi0gX=6KZ
+%E=s2iXa%n at WsqKaEa$"[`-P2T%Z.s0`M%/TR&%)7!C2\R=5^*UqZs!q4ST\4-uGh-jhoX])tF(\8hI2Q+SHpS'YnZgMi8$Hf(i%c
+%C+XsPX"?S7$]AJn'0Zp".RP07`5AJePk]QH12C.1\Z9$@k]NfSJPoo&F&7Y)^F?;ur,N[Z[60>mWbC\,T`nB`ht[Fr'"PPQO@,ca
+%2HMs`e`=Jc3bpC;opQ_M?ZS#KHS*+$C&:M6B1]\?d?]<1D-/mO+)<B&$/:sj6(NB3_;I<"We,^H-2,B*%LJK&8R1AsE*T,M<W+#X
+%)@3J+'4?K3cq,F?Y!bN>>9$A&WnEi]HW`A?H-T at aLM?D0(0,^uaH:Pi^0i1;];OM8JgaR.kV?A%fT`2E-Bi">6(.K&G$&(^s6GS!
+%rFt8"DRGO\p=ODeX_QoKlCR.s0uto2GKl0IN5,$UWpr;,l_#[uXSAn6O'7MA]r3u0*i=ei."jbQB;Mu'KR!%*>m\dZ$j$;7\c.<H
+%q;(;CT.&I^.9mXATDS11K-jm<8hqT=ghWoP;LTV(XO.9&-O%G7ZN3^D6NfV[&gt^WAX3rF`PCNueu?2T'C%b0l0GheOZf)O4u at K3
+%CRGO(pTkq=?rGMYr,%)TR5'*S\_q6QN<G^mm7+7j<[$]K_mR<MmB$oi6kTO0L5W\%2Q[J\mdp>cHWCJ;+Rc#$Ab*O9CQ^JNG%CH4
+%a+7CM0$>"'&O3!!27GP0oO5a7Aa5%UDNjLp4_c2F$)MR$7deNZ[(U/*<Xj;U-e'7DUcbnGMNa=p4lodZ9(hACY*U)k\gc_Q'Yiis
+%l,uu599k\BkPI0,:b(\[fU_11bemk?lU_R[6$.(J9O,h>c<48I!A<&kDksOFLpZ at N1INVM>L?qZc<g2r;5!!:/"i5&L8b_2`MU>9
+%fCD*>8+P$8n!?:qZ((6inePC:pV3W&P+o\6MOpqu+`),G"V at AQ;<0knQHO0Q&_r!$D11W]&IE1U]enn_]sdk"Q"LbDa?LgK0A4ZH
+%l:LP+V\;W6K\@ij(<\1smc;=h'GgkFQ]!CmPt&lZr1T+p#PbZl;)q>o'^p33PDZ5T>"XfmJ<qMBLZIY'O)@PjRk>uN@"+-m443gk
+%Me9Vlg7>Yf&J[-Fc9^VE,]i%tWps6E]FrTlIIt@#:sp9-[ulS!AVns%qkc`edStOoA6?pc8>@!%Q1TO'.Rtt&'ENC.Nc/J`Gu1Nt
+%P./c%8E[m7-W_Wb\RI%*M,^nqD,1k<.etq:gtp1/&2-uES^3jS8\elES\nc!5<8K/h;.)gchA7"7Y*Q1n!Z^q8MZ#a4%HW2b0r[$
+%iA0=$^+47N<ib&.#r:`D.*WQu.UMC+hPj`qdlKr at W.THops=2t$ToiP3lg5F>cr3.!kU@*@O<s*R9lS5]W"0fk42m:k2lfXW[RFt
+%oDK==05_"@KsOK9_?o9TE`MA)2m-\Ih19#a+W*AiF=$FCQgsA)jQQf5r78:^JbdD9CWO%nm^If%4QFDK[Vq*eQPu;T6fRI<nK"S%
+%<K5F_$6[0Zi7OOr!r6R]Zd%'_4Amj\\lf[5mu2+oh'GR.hqKqX[@dS96-Rm(%57&j8?ir=^i(r`BO&]OGC%)s-)m[$A]Va>iU[.L
+%k-%h..T:@W02l<GI1Iq$S::XgDXiZ,`6"aWDrh3/brS%</(G^@[JEVfG at p0f?:e.#&g(lXcjolc1d5<VF']1]M"q0GY?]%WZ&P'<
+%$)XkMF\qcL<<GT?]VVX%&!XT at NVR$46Or8-,tUY'B3ltkp<?t$h>ik[#i<MO3[GVs=jji0cB!T?Vd9SX84"$dFG]`b:uuPbU]eJM
+%phG4%'O?o9Y%&(S:?m[#EZN!EQ,Rp^;"EIu=C3sqnWl\i7!3=h7QC#Li]<L^"aun!e<QGI$5AOtGSVg>6/EQ44)s8R&C3GapVOCe
+%8IP:qj_2q=^u3V<U<BsV=ZM2P't,;nC6JDM)OVCH63W,s+#iNrGaZl(X79Jm*1J^%bN$g=-YSG>p%24S<94RSkk&mIcst<TA;u'+
+%5I,@=%BnhjlL0"IV!Fi1I+CIj]oZeb]MZ]%;JWs$<rueAIm?]%AEo*O[^+WO7FCX;!3rX,C$*,[n#/6'9^4q!SJq4cZU(l*C59YN
+%<BtNYPsB\s78X^ri*DT*D4B0]=D=3OFl`#IM>[ZO>Ae_l+oF<Dol<LHhVLIcj4(%t$I?hRPu68+P`f"8PMT504j,KuUsI/0RD/43
+%\BQ`08FiNN2B=6\T=jcNI7XKL_Tem(IF)Yfc_f6C\Ps6LCdG_/4Pr[MPF$r(537ZS2E"iG_S_Ehp73=j!*p&Y(B5JM`k;;$\L0[R
+%B2j2:C,hbK:Jb3h%%Tek!i-:$bT*RK^8Q9h%ffC7#[""aEFX+]?e'0si3OO3@\]7aE?p"1GhZGOcTP1Z,\KkrZ()88#^0u]CBou&
+%/rqHH.mG1=6ai-JMHT+":7$09b%fLU=ntZu3gU!u+lT3FnkK4I(s$!#r4-Hh"<E[(-@*H$kAcV$$Z%[,^!W5p=a)#t*RKW%T20o_
+%G:t-g^MS<Rpp at V\.=W"bK!?#^Q8>tFJNN$Z at .6r]1Js"F)c'*A=LXJ5d.Ajb6.WUA`o5(SK\/$NXo*B>cG`M^peoMC]<dbh\2(aZ
+%1QLY0!df`)1tnGN1AsO6+*MEB`e2dmf?%o=pUEr2CkKJ"XQ4dBo=CWHjB- at P,di)%>jg(NJ.-D2\Udk_ceMfsVl(2-3#.^;E:Pk!
+%_"Y[o1bn"8_8^IB'V9)9'eA_cCP"i*=UY[Djn[/BdAPCdW<IV0rE!_E&%;Ic0Rb0#;)_54HqO<Je+!2:X7WZRHHVZ'F:F1T.1GbQ
+%bmUa&l*oaSCpk`a:/TJD7,//n%I2SG_V[s+4sd9FE)1o6=U;OKnm_V9/N2p>XtPZoD=Z>2ht.R4iaHKJ`=sFCY=s>2R$\Kf_!g%R
+%k..BdcgNjjSj5n[V:0MaY+O.I;t<SdOe7`X-HVk8D$l$60d6"OcjkPW%rj-3l6bkFcYC-h`tcgIhVH;&q]k"%gW<,:&NiKha*WN@
+%<qJ1s[f$f)T=O/%!7#K"Agf1,C2N!uKUb;]_!<Rrrd1Q5$,D`\Q>2fJd&4miP*U=+pQW, at 1(DO+b5lq3R6hB8BJX!f+B-"LE,l)h
+%>`igm)be#f2f8aLP-(+FJMH?GDnNO:PE[:P9j<d#f?Qoq at UmU4_8$/s_*/`Y,(\G?6MoW'fl\Z?%c_5#)P,B33VoF'Y8f9J);Rn&
+%G1*N*''*\RAkQqe?J2:Wd>QpiXlFsO\j+<_pjag-'9#.br:hc>+V:, at .R":QFR?!R!'\m;GJW/@97a3*W+GcV/(q9#TNdLUI1&.G
+%lESYrLnCqf65<R$(dMk*(<\oMZRqR[45cX]pRH7r4+1b2Y;r'Do;ML<blEQ\DGjn\<(a%VS#\t==([)`o41Y"i6QhSXX0a73WJi\
+%pah_9mTbGp.CJUn,0^^_h2"E=-9F[]!$dYJ8m8=[7,cZ9:_u5sKV-[r$n/hATD_;QrcPZLm,QfaYbeJ1/Tthd!Z$F7D(><ugTbK5
+%#9E2%MPPbF$G`Sh38-5Co1AX[E[1.4PFRX&.apUDXL[A[Jjpg[\oIFA@"#,pY(aZ(C?\O at c,\Z at a*h`.2YD&J)B__8n(QIIQeX>C
+%0lY=1#DRp3 at I=P])0<.D,@/>3GH>l=HhJHRA,l>%07fV[@?-P/0:=-nJ^iLBm:]4.OSBH9jbsu1XsEt]NDXs!,(3[,:QXlaKooo@
+%r%;lOe/!($o8-*M at 3s6tWj69QUkYrc?H8\VWhC"(E3!RJ3!0Hn([Kb61/2qDhde"0+(`9"@TR*)bGDuY7d]<UKh/2qYjZV)%QYmg
+%XMuSB_i_ets"';0i09f#ml`S'&$K\@lM\uf?gbS4KX^PaDOVP'FT^!_!u4eH:?1sCc6#1XYl[+ at n7?d9:*7USKAm)NG+CgeLDAK\
+%W]ZnemDkAlGs5;%\G\`NR=*hT,/crK5Mu:>q63.4lf at e@?..eneXZMBPHBu^5FaVpo#,]Gf8X$E$!P&UpS/Of.E'Li/AQ0B>_/l2
+%5KOMd$bPf;9de?DA at 3M/JS)o:!<l!u5SATD=mePs at k:Za^<WnV]Mls]lS+]<Ygr at A;?8?;e05>m'*YjTf'38K]?R'TY&b3q[\C[S
+%'*=r2qh"_l+A>.W=o1/VW9g"+55DGYl6eAX9C*LfH#aVW&sDf?p,B275gS8)<(cfh`D/N^^F/bpWO1XdO.Kt^1`>#kMq\,i7M7uU
+%l\Wm^#n%QTb*R1E>MJ>`>cOKNNK#Fl!T0,]K-0QKC=*ND"bD",C?ZQO\VQan?d:I]2i53C[gRVq4<S)9;t]Yjr7@;kn0M44T9T.N
+%W=p(C/ZLV3.b>ijR[s7EO__pG4L%1M^b`,qn(C$qMWS8?+L^Z_i9\\t_YhuqpWrB9=g8GP9u%6T.JeebC210NhpCM`-mo at g1?P3i
+%OZ8i"A\6*#I8b\6[pQ\L('@.Ifm*m+qm34p;GG8F+Lo-qaqrirpW?1H$og]$f!mt>\"%>YUglbEWMAreOu at 9m/?IqGi at b?#^4-O<
+%/5LFE\CLIhF$C5a&&Wl,'pm&0>Gb.eC\S5CYe774cBlhX1c\t$Vj7_bbi$)tR?LUq5HVYs"`WHkZEHqn1KFuCbA&UqZcSEa]TptI
+%\\.+S[.'8iT?D8KjTr.88&!!.fNaX!!st$'AsjRI8icUVEePq.?`>3hq_gK.W at -OQ[E/T%SMpbRc>*K)%LM/YLH`+WYR.;"gphB\
+%WqprN/^u^EM8J,cQ0Kg$j?!$Xc>D-H*&Z+s.aOqA[J<+Yk.FjsIQr_JN+GDp]\$B=e*6=kat1*)f9FuM&=a[%&_"K/\LU87NO-+!
+%]\3aA/8&SX#.(4B$/Qq%J+7>04aMq(j>\'TV[R%qG11#;kgHBIQnkijFRO"&Rb-*"8IQ:. at .[pVJ=UfQiu$O?(pF3g4uEA:-OU0k
+%=J</GHm;WbA_#QE<ipEg_#!\;,f8E-6d#6jIJYj>[NU2l_+sA)e4h(/<tB%q&j"SX'r\fnT8dj%ECJ<lHBH1ik8uZ)eA=]Wd.5kj
+%b\>bm778W3"BV4c`7,1:$$Y6&3I"%/"KXnZSj_C)K!jX<IAdRP.8Y%bUNje^AP at YuSC-8?3^=ZQ2odlP at WkCCQ6r0LG"Z^FTVAYG
+%9``J2->2uoa'YeUp%PqHGg*.D%O^G at Eu9s+a7Z#8esuSSG\(,SElc:C7pHj_"F[>h_e]+*O#d"/7!d;#_tZ+i5c/0&\tGbYs6n'!
+%SZbn^^H$Mt.pr1EG%&`d*gQ]1']C`J at ./sD*E^H:i*6[KM/ck!KiH1ifVP5NDU5k3-U(?ZGVIS#CnR4Mj'c\`d;=2Reu6+c%k.%%
+%g&cBPC;uQr>7(!kb]8qHjC.p5BB8\bbH,ha-4d.9n+r\5*#S"c:f>GG!YGVSW<PA_>l)8q#@d;a(;t<9g!07g73nKQ=Pb$)0+53u
+%*BS`Xg,Z.9*fZpXoakTj,2`Z,Qp.ZO><_L<Fna'E+aG2di,*&^s.*Eu1[_a.KlbSUE6SE[LU&,qk-$(D^,>ZJB7GTg at h"sb-S_*s
+%3sG=H`];DGJc%p^Hd"[gFt/+3LA\\>LC6H%l;YXCcV?U#apIGVllpea=$ouA6W<q;FRkXPPPED%O?ZPKF4E4EPgl.IoYK\dZg4"d
+%B!p)'[(`i2k9HJ%F>73+&4mMNRQb5dibAWV[:Q\l%p(V&JD at H#U;/Y^*$cb'h"HEGHiNcQ-WO(%&'D>7`m/^G!setl9[IqLF`n7,
+%<m,U%b_Ml"XXPh<k1f/`eJWRm^pTeljr>u=I&MQ^M#aIE>,p.tYg11"gp`K at NK4Mud7*r.f&g'DlL*[Up#l2!W4Ss0E%7VJnu<7(
+%'8l%uktUZ136jD7_QHM*?;eg:kr!t)I)l/Q_6h%G><XP<o(Vn>d1e_VS,G?'g[r)"Rk5.K[-*j\Gd/E45*)M$Bi[H=rlpM&4Y]%,
+%;gYBphqWjdCkS=JIV/ZJI*WUV?aUi)Cf3B3[I$m%a2Un/ilF.(^Vc8:40PPgSN4Or#oak`"6,fB-7B[^Ppt^6,_;CjFdl3_8ZY/s
+%a&G&Q4ZYG)Lk=<d%ebXP;`<8!CYpe##g(W<\<.jfOKOc86C7,O!sB:YOAgdE3[;>;KK=>6Y6:PQ.V2MWHCT'D4"PtS<_kJ[OCl\l
+%Ti.=)RM2*JRQS-Kb9b7VOTkB;n`G0_r?@X%RIfR=SaIp?_s,Rh[C+KRZX:-'h at aH3r1_T.>XXFZObQW=[YRH=ZII80Q1J7\de<!#
+%->)=I(Z2c)NNKrb1N>>i>5Wo*5eKesW2P%U2k?L7r;O.JQrlbgHMW830/`TraZZ'b,Q2(Mo!LLkYeI1YWcAH!bYG4N?<aE8#3?@:
+%Bi&(o=EqRg.AKb&G_0R+(nr+Y*k,^B:S<"2+H`R`4DC&/,\,(,^fg['S<3AYno>?s/<Cl8iCqHBo<jpUp-`Y%,f%q^W0EZu-UYD8
+%%uS:A*2Y7"?\'hfKt2`JgJur7Yrpe8gLHYMgJQ;]l%,ILH9%-[=?\RA6GKN4F5]?@%$ACU(Eo+[KCeW(P$/O at S+ZcG@8k]Zgm+d1
+%1=*s)jKO,#7Pl8&SEpd"YRa$UM//i-P)G<qDb8VKo0%<a8M3T;h_5%kb,tqMd-*A(dU+tFe at B3/>^d_CGk2[&V<;Pu\QdKK&_d$B
+%j^Fs$D$I/4eqXit1cGK*Ek(=h9OmC_-R[!t^?%sBNIULgRBRb=8De\p7jaF$#cW&*;aIe:2:L?R@*O:!2P&h$Br_*8Yo_]D0;BMn
+%'coCH$atE1YAL."J4o2&e"r\r'7&[Xk/g9_PnMPDcd3o:ZR@;G:),-H]</itCV2CE_Rd!8H";iQqs=)'PCE*\cu7/.1J?1/Lm?-a
+%4;aRN3c>$SQ+kd0Bs[JGn+=*KDj,AeluqG at k!:>a-FTGOH7BIeGJGYTj]U`9jdB8>_dQ)H_8i46X&j!Sh^lmgA"7dGh]r5<fCkr8
+%;t>2g^iC8o&n9C\cWme>rZ9P]._+X"JMOVN;s*.,rYE&QndEU at YUQI@F-,`t//R*2(U3lVN?j/)E(J67*^MG+cf2OhVZc&c3%'VM
+%[j_m.RCl]2<H??IRlPI2;bBPrC6BZakJslJrpr&=<jXXa2*Q\BA7Q)oo&l$S!(K<96]_R at E#?;b)a*6f8J=_g`5JS<k[:@ok9Qio
+%e@,9u1m;5Z6[ALgM-6UJEa4(<dM#f%3sPS6<!8+R:6Gi-8o(13p?CN\)]j(H^9$-#;/a$3A+:Z-YZPV_6.HhZ/=Ysn#g0raYX;jE
+%%'c]]ePcA#V?9)IUSfCWVD.n1LTA&c+t+eg?V=OqZ2QJK?CmnS_M2nG`4r1mH,]\#TP:%Z2EiL=p3sZ'$J2BJjM$a#- at r>)ppS#P
+%q1VLQ$_bpod`8a155HnBoSKprGGf<1f;^G6EhN0a&[(ja5?RZOA4:qbn<S9`bO>Ba>t?*F]p5?T=+t"uAWL67<I.0oZgrB\kY8=D
+%dk at +Pj5db<LY-7ir>^_X6o$2G>ju];.>9)l#.Cgp$5BXm''m]P`4dmE.[SSX"m>,t&jd*8BW3osN97SKL_$5">T-rG::Eh2$5<ek
+%`EQp+<LtJR%0LZjoKLW[o>W2E/`bV().H,&+clR6og<,5VG,T-_N=rDXXCAi\R."Bm4UaRq4cR0Z_<[<(ppmA<UKW3$J*$2kU%.7
+%R%5(=XOF4"Yh>7K[:[q/>\?ce^[GfU,]_(a78nN+d3Pbpe"0309?GdV)Y?9udc_4:AE?K`lpK63/iPeTT^.4?7K.^cB<GOu$sf!N
+%7It"'S6Vp0826BZS]@/rfIdNDUD9N/Q/9rnY't3[cfZ9TIKVg\lCabs0o-]-[gg:iO.,iE&B2BDB^CCF!aEll"2>H_YC)sAXEjdo
+%+*Otkl;qLK50Ac&s+E- at Ql&\%VW,j$(=geZD:1JtmMA*Gh:U&&'PWif[g''UK;AZ*5sujgK$>j7^K+(T>f,Z09SL[<-GL\^Ug=R'
+%;bO1e-X+"ULNt_8O-;7rZPLEj)miCW45oKlAQVocfMX^ODg;Y&:dNiVJ5W=LDE-IIZbQ<]W=-0a]6I"DL%DRF@"5V\Z:b?5jPL$F
+%F)C<$m.Ib\iL*\6s36jKWfb6101l/r<][.njKp-H_\M*+Au[IUe9gI#Ie;[X`h>)_i3'VQJ;7'qME1`L]@Es=Y)<][)De&daeK-)
+%9W9or]*kuRTuur#VTqm`+Qq!A1[uEja9;/UbXC?DnR:u/@e.?E2,>KZ59XK<G3+sM31/<9:b[7i(*qd;H,sbra at lX)$-6'M0P-iO
+%Q^;h`Rj'$WgR&n#D126A>3GC,%nW?5Q",pB4n(--#:03-pICb:Kogp/+CY;c-3"6WpE3)&Gc?c at _C<#)`#X-6-(6-u&/PTR))bMZ
+%XO(OYQdn*ca^s1?0_M4IFB_2i+CCb=C8,Y[r&<FuW6$\p7l'H(9q_tBQZKq4U3lSbBY,(?@d//J*[o^T4FKuKlP0?IA"c$.id$\=
+%\k'^kaOYWX$&Qcp!DAa+f'1/94>u@*]I\\,JrVLZ$u5TD-bN6 at DZZ`*lFcdq[rWHX1ZIN*rpgX'3gm2`7JLV8a&]@B'<sX'f7eN\
+%+*.1g`BWQC<MDY.jK!Z6'T,UrRKVJ\hB%4O21Zs, at jE)OdgGQ[`sT*Y+N_;)VR4fp=48*c0o&`[X"STf2gpP\qM?$CZ,(3<Y`):"
+%$A$=t?mEnJ*/t9H,=+Ia<L#l?m:D at -;l\I&rT5;g at U_\+!5h_-T@,!CbS3_$2_H)\S\$7X.K\<l at b]\Z0\1XRG3I`D46=d,"V/\-
+%M&*1M:Fk#G_?9fs$b>!2qR-EV.7f3tQu^q'$="^lQnMO*M0[jTD2rb%"0C$1%J.42D at 2UkEU)VlaG1-GbCL,d*niGuE2D:32H#R_
+%[/S#4X'j!]`1qW at k\5mG#gY7RT'Z2!cbAp[e&&]eVY,>"!h,, at 6/>3&, at q6e[Th(G*\p8*3(=S\HO4Trg8qr4C?0V%#auPfq/2O\
+%4a`>;&q+t:'M-KEW2nTL)E1W\O-aJJ7$(V:k7+_&56?qmTC2g:$Cpos^QpQQ0<6L^FXU.0fPCcg,kH;MgKOGuD&6tnb>/$pq*4U6
+%l0)X8\?f"',k.N=:(d+ZKS#j'XU-Ka0?o0cnRFJPB-$dLbV.7V]rGPJM%HIR##UF9Zo7F-qQ0iR?T^,G>"Eu?=R$3ErWk5Zl5B+1
+%dfl%s#&mWB["O$0%K'66n_]1VWo9D>RQGXHONlaKh at dk\dr.t,c(h6g%e"6RT'Rg>,T=>+B8gW6r_<P,F:4WeCRP$>q+^r9<h3Q-
+%eC7TZKWf#L'Co`Vk5Y7K/Q&NF4*:t at aeHk/C:B$$?*Sb/S'B@'>mRGd';g_mjiG-2X_HOriMpH!*/!@9DH;Hm3=f--8o'BWp_D.[
+%b++M%qeE3q4pCr1FDRA>/?KRs_s$3M)9bF+Km,nU?s@=_ at DCtm<ZUoS9GWGf<WMJEUBB;)T7R<J!UsM>"^0s9-P5Fm:R1%l8eH+2
+%`>(D32]1uF*"oKFa+N[nE+#=*j^D]-BJ+08RBg,o<!KEQ*ZlZp4XFBK!MVL;'F`>fqd/YW6t:0J98rhc,kRCT['0/B#\[7aL(tfd
+%G*$sX;NWY]_F&R!X?0 at o>2m5/-!u=RDq:2\J_;e&lU]KnAQHh-<-2.[Y'Y3B\N1HOag7(2q6]ml0hV<Lq"743jE=*r(eCQG[2-L5
+%f>=1>nM*PN@@1fZ9>9^*#^k(Kg#i!,A_4=7\mdu2 at g2\W?*PH6g1IhC]PP>sUiR,MVPZit]_Jf18oi#!o7_?+)mFob:2'.pnh:mU
+%N>ABj\sQ/$Qu^ip`6[BML#/m?r)%S$>jk6"1q[8Xic>b2#jE;D>(GSJD8Z"@&6*HX1ks8cSC@]U-Ko=/VC,q#%:VhO_Yr(C\C),r
+%9+,IN;ueBC&Rb+':N]sL,dh]m26 at raI/ae#AeQo6fg2GdaXBuChb'gBh5=!qG1kc"lkZQPmb>'_a_U+4k>^.s^0lcPL3)SG,_Dm'
+%cqA'EcRSO*Eo?$7""BT$"Yf20e1peolS026Fl)s8>0N%b,!XeQ3t[:k3KR>n]23OC(f27%DPc=%-*Z6qG4]QQr]5(0&JcIkEquW.
+%npUOO[Xb<';"*r_?4ZtSa`^ObJ]^#)!%4!W*u0+Z&&i>M652a'RQm!n;J32.VCZ73RH/u2I at p!c4E'c=g4#($6#gC,.g:Ts-K'.m
+%BQ+D,r6$,UVM'fF":_hM;7qm(D?Oac4>#ZNj2389du;M?_7UUF at tX%.$RaD[r2+k2H[(b0,!p<I=L3u1Q149P%"Q_`IXt,?<]BbU
+%nk%PRGAqIe)YJo6BM/jD1Ut*EmF/D;q0[-lfF)[2><[4gn!o7mTC(I5]-#nubG8s;#u[cM;?@*6c5)isd39NkHFg%:<WYiQ[WG>d
+%eIo`_&N<_YAc$0+pZZU7B`?SV;r$t2i:^-?^>SO.8KL?e8Td$kLa;@5'eX_4p,5jMju?At>g6#G4+;gC;3!h<iH^[\:-lT*O9D!(
+%PjE[;-YhbAgn:Xs0h=sgg\&aNT\0L1^!qJ at F&+[b%7^$E'5:D-g$?D3qQ9UAM'Q"_,JYdKoO'V at MZ;3.D'IiSRPK/L6X7T!80,RJ
+%Aa!>oYmeW[MXO%-W6mj^*'UVpk+t,r>c,%[JoI:d7Nq./,e8'4m3lH?><hm3%-^7PG?Hh>f5rAk2,6*&29-,PHl*[i)9N1XF9jG=
+%%1a(D!TGM4(4OZ3B&R">"TumTks?^h)U0]N^=N^F=*n,4<U/n\T!'is*^2VdhQ)+HWI5lDIFEqmK1ueL[YL!s4TfKBnm.s-I0Uus
+%6m-rQBM=\_Mnji5Zc\"kGS<RVR"&g$YN1I5SW7&P2RPZj$,IjC\`+i0TV1$k8>l`8*'(Y;/O at _E.="q(!o+_TUCUR`8S%:]^C21-
+%h&4C$e6*'hm=@\dRg<m=^Y3tg=P/"%'!,;d)i+l@^/JFed`b=H.7LKX8u\%YK_8lIlo&s:G_utaW*.BT49'D]8OXc!K1THk-U[W0
+%X.rA[qNT&M at lC'.pA"Dlk-Cke3eD(FnEk9MKIZ83n*)UZe4=F9cT@'25i(%,,K1ermlH4af_m!GarQo%?36oKrR9cm2HacBH^mQh
+%K_eG-lLN1.3tNt]@!*Cb$=ZT:k/hG*r\r,(FO66HF')>KNZcM60Z>k?Sk^O>/BRF..4%-.:%U\W15`-*@&'beltEb,9B'Vk=V!LE
+%Ij:$O\<qdcMnlT^]_e5'lt\<r8]5p?UsoQ<XbQ2$. at 9s(?;'i?CZIfpF%sdRFW*/K9bSDJ6nCg4ah*8Y7'S=p&UYm4lulYAWK)Mr
+%AEA1cqB[\aq"#ii"?#+m#"NMHd)TsT*<0W>&I=LIIac?lSrEll@?IC%at_=lN1^e%gS9+(gL3f*\:CDXqU/1,5>hss_HP+(,^_>g
+%PYY"bl/8-pFk%Zd-DiAZ!::4%mo+2?3U"mk1)0cHNMYKhpU*rU9]<5k,Q"hA0>KeRT]X#U11\Z1U!DSqj.5nU3[Uif8g;'%$?uAX
+%_,1_u)Db'M[t3k"qKX20\bSOX:%"jU<n=9LT6j;`>$mX:]%2I]$^uc"NZ/j5-Fl9hkPhaN!&9f8iQaMt05r&3TZbdD:">dKLZ"A[
+%p_]=LDgBunk!LAPlpP*@W=QskTQS+Vh4 at bod;DbJ=ugHKhelVFG_1bVX)>l*XlCSB8j$I(R]LS'BEnBUM2tB^DGnS=ILT=mjMCR_
+%=Zr_8hpL)Cee<F$!Y>"n8Hq5l.d>\'m'e6;kkjKFV2?=88ao<fqrT$`mqNCskLK1k$Z1im\:_+,mFAj_9Qb'K&ZB,mIFBZJD[(5t
+%Is+/tjSlkO^!B3!gSWt1.gO<M&1[NdSVjlmZ(4!g]bG4)HVe;eT1,r2aZR1c"6gO(J>cbJ?l>3.;p-mgHgI9[YLX)j+3o2E`prZ^
+%0CR\a0tm<HEVkI#>k at gq!@><. at l<*p=%f+R$^bB+jNo:))muJn.C<O,mA1[1Y4%g\F4.(*0Gu)1QHPZmREUiL;D)dhO8f_/pi.T]
+%i2J=GZBWCQ9*Qd6`#&!F.!UU:8LmVGT8g"d4P!X1JI0dSI7FY(,+U@^$dVO"eo#q%mCg8U>*gnHirrXC:'*ma[;ZuPT;USXoh..E
+%4nJD.q5i\d/C-s3 at jMo>In="X(+;4U=Z][uW95#R<A4a&YoZE@<!*)Z<&/*B)u7lL3g/2G(_X%:GO#P(JJd!A)T?/B^>u&>Pgle\
+%CjtIu#@-)@,/g<k*;<Fk2rBU+S*Cc?c1rTu%Mt,No"JoKP6H$!bRCYFfi:4\UE54[ln$L#aue&6UZ at S^<UB`KF$fHeTBsb7l(,%&
+%Z8?d<^NEZsGn at L3,o\6)_*!K1E?7:0HnRNQ8ae+0k'S]Jc30:JVQXO[1Y:&4K<&/H<'@<9fgI-*2=i$;)dIm at rPcM"9$5!'ju,S!
+%Y\'(Hf<H;hZ&WP\&Fbrd;P'9fo)EM;-f*U at I+5n.)!`A^X:s*$P1b)!,p57qK;nVYY]rf at JYB%Gbp'ka55J-t_H]fa0Dut=.dL1g
+%dJ^>[^H[[PKC6;>[+k#m\rN*/RR!8:-h6pc3l^F;onRS`(6e]VD'&63qaa\ca"h5Z4rZS[Z3j^g>V?BZiT=acFCg/@]l$&T)47Z=
+%EkYNK#(&fnKh'34PAJqRb^T're&Y*d[\Z)I(7:;=B:aNoUs/8(oMht_C'bC at SNM*DJqOZ,Jg1FPBtTc[-.Q7"dEPD/a4kIAj>0\%
+%Ir1ef.[_(hhTtHt9<_Q5k8bL`h)BmtK at lc_WTc)Lo^gsFCa^k?#K1$s*3>\:d8`>G;G6F+22a4$qf0m6p9d+X%iuT(Y&O=0E&WC-
+%90Q!W(RL at n;?c4K at 9@\lnhNQUEcC_denfiMPd_oj#.PrMI+5g,+n*`3?L4SdJmnU%Flhp<,(^.8#6Kt$jC>-*dq%\(SS9pb,c(Vb
+%=_]g@"?Eao=JYM0H+p*<)E9S;UJj>Vl/)Kk7B=6W<rSuIAr^4^r]Mbfb7nHW_sDd>(NbhLcAUf?ZslN`3Vg6DqY'_kA,;[Y/4gV&
+%ED`p?jUC^h`POZ#*Y">:DR20IZBBH*MDh=!0;WOE-uhtP_upnYqF2LS?Z&uiG9EL1],P:@;b%!ZF,rsSL'\n(cK5rcn2TS&q+g?X
+%1HZJC!PRj4W]j]0'2a at Y%,-dWVY^\*KaQIeks`s%WV4c=9=[*^X\1J8!$7rtA/EJ=X-0sEfdeE.H):o;eicqeFNT0USi$:*eOThs
+%>ec?Rbr at .q+Pm(g&hiU*c[KDb<.`9ljb-P[6g'/$/YepG;sKUe%O.3BYs%;D- at Ok'HtKo6$/aIuhon:+m=+c2>a$a#VM?L0\D\pi
+%XO"Ml3GG>Z\9I-uq)=YEZ/c:/)71lm7WfF"](<7DE\&*ar0_hAb,,]qg*U/<c([!YoaOiJ:`W*[odC(R!M>n!`1->>NHd_3O%1*$
+%<>&8[g^+j>aR6.A&qr995V/#l,E'Fnr1,9L4(Gk[dYkWR#PSc-6j(g>p`QA=Va%e_BNZVUBk\[FG&""+'+qC+VQ'AQM8OU at S?;PM
+%_8l!A8O[mpfR8qSkpth2E0SXl4qaP<"e,j at r(WceAC$lr?Vr)@-4^u3QD2R;0SQ:;amb;hPGQ.eUSMK5O">"gGpOYI4i/Bo=1k!6
+%6")uL#oS20e^3X1h8R>X5F8-X>FtlKCE9q2mS\r8qtcI<+"&O7MKQTiLrh&(=5H%)6n=Gr$bM*GcDQ^X5]Qlm]Nh$.f[P'nW?.MT
+%ejIj*OoEZplLN$cp.:NFMUK\B%P*p$f>bU\^sJZN-1R`=-Bc2p<M8&p`7.`8iQ9LcA'C:Cg8E8=P4TaPENhN=Pk"LE_R`UHftGeb
+%J1Miec_9#%Su0IhIX"rB<Q2n'G*6 at -]u&MH/iRiSh"\:[H!6Ih^iiE_5`>l,%B/p2Q8gqg8lFFmL[J0Z2 at o>R0!)g\&,XqJ.Ncoc
+%lWI-F[&[&T,h&&iWUEuL+EJBOATQ:,i^k?>Dl'jiQom;P>)e^+fn:WTl\;*2r?M_-T_INMYa\326CTDtH*#Mc[,(JhQ[EOgr-<;*
+%h"F8sZ5Sf+DIIUN'Y%TrX^uYa3D8PajMD\^rU109T99DNI at M=]ki)'J*%%NQeF#uC;C'>rNLQ9YVI+LqM5k*Jp5eP92/Leg7cZ_c
+%7F'ST*!T'/p7Bc2F47/g(cWGiDQ/R.eFR+M(>OgAP\=jF*0fDIIn"gBDksu8'8VP,>2^f-\hs`sbJ:5lF20R($k2p.+r?I+pXE/'
+%")VhYUY&K at YXcN9,97;KIa(Q=Nr1i[iW>lLlN?Hk:>>0,Z@\(\4!1q"iDe`i*T&-YD9!D?7$dM9l3g\qD][!:;m#$b1ib4S`O*du
+%c6%1CqNp>pF=>Ie7r_J):+FGL:XP,qq$7q=;[Zso]WIdK`D12KV;,+VW=K^I^!&GdSstT5K*fLPfj\])fCN[_UhIWfG]$1?"nFcl
+%cI#6T5bosj'bZ4/3`"-P-b\iU\s.R18PQ!b'%R"ER_H]+lT6J7c:u0dhRp4'8HS"$/L5<;?1]?P5#OWB5tMn?!"bE!BdL0qh!=Sg
+%c\DgE4`)V"K&2)_a+`VHUp;[1-MeE)3m^V',pu^iZAq`m**Y1"^*gt;e3$eT)HCH-^-!CA2nK/kQpm\6T)-$3Q)R1fdfWV/22u&,
+%l755]jafUsQ.X!ZTmG)_ahq*<l3*qQJ'4 at P4KmG^rEOE#id"G,5C%gWmkcJCL?%tn82F5/VEh#>K^ZLG#NXL1ZB5S'3"-i7&5ED#
+%MjCA*&'goa<@<HZ(N.L2Y2i'U5B#@22^O_;KA at obp998dpeV&Y!X*[AiPBX at 7'#ki at 7^A_<_V;T$\*AArC5)=:cl8T_$,^VAAEBr
+%+M9$%QK;^8.\samJ;k;=1BmXu(c:e[E_bM?o"I(];aTAjG"9;IZZ_tZqOKgiM]OsI;KET`%S=A';:ukW[IM4B(/=Am_1Hpp1$0oV
+%Jh]4Bgpg:fED)V2F-&%Z#-QQmajb at BOSIW@PCK!BXBb4PT2P^iqU\6W5>UAeYPM^;"NR?:%O+G\8!l3- at n5`C9CWfIJ$1]nF!-*q
+%h7N7VWDY!3=:lp^;s;QL)1ULVcYoI!,nMe+b3:sdHkI2*jNC%jjG_"]Z:JnLee,i>f'[^D(a/KZoVPW\bYYC'UT1*sDTcS]m"\=8
+%DkBpp`gIj:3?e*h at f4GQmM?.!M!_#u1A*f4S`MsUBT';"!r"B/Ou:l/-^PoKJQcGM&p.MHl:%9FU3I_hiqG5?'CTI&F%M*\bZoa3
+%7^id)i/T'Er:3MLM]BoO5)!9(#ACP)T+;aYilI?Rc;RQGPDRUO:-/&IC0nrOZ`ku;(sP:L6Cn!7]tBXlV,G:ef?MH:cp"bR82]=u
+%@MpRL=/?(bjFbSrLZT3]/.1<hEmC-MT=+L!\sFM7I($q.Cmqs0Yg-VkA at 1:J;/!TH1"mMtDo,<h_$P").Za;=m"BlODlQaCT^NEa
+%Zg"54i&9Rrlk.B\GZHmi9n(6jC at VFO*.EKQE7S6t`O$&L\?dBnS?11;d!p4#:9r"QX(,=Dhhd#!=%dDn>#Ls!-G*(QrK at q7XSajt
+%Rm;RqY,%(2nWK?on/j2IT)!.N"P;o5UGJ1AcIh_^&PPXZ4)m:'`>a`1S2lDJkp&U)=_+i>rHjA/bq at SYe=8^bA`l.,pR)r&00+H+
+%NRdN3C1cf#/>SpP[J0iEmeos4.9%!2pO-e%c[GhIi*h-h4%DJU'&?](X;1_a3\=l1f.s\T7rG\4elpp&i6P=i0'R^\@+ at ln"55B)
+%]L`AV;Kr+XhR_Dd+(R)k>TMm?89 at pJZ$;HhUefb6afL>5NDFP7gi!X`]![7p<Y!9.9^$2f>,g?"\E/"%^?><Nr'YB'1(+?&L['Jn
+%jJiG_QM7P=@&\_%Hmp;$a'/.-./4-_alQ7AO%tfEpq[HoaZ.V'+-4$[0R:/+N*qWr[81[`_CRoQH?.1arOeIGS?3`U/mO(%`WC#9
+%DB2uugF9,;`/`qErf"+M`Je_]A1Ycp/!XqjK"Mf9_mA[PP&^t/]p"1k7Qf;Pp@\qR5+W-6Z at GK!UAV$aPX`peAB16u<XAce4IeZX
+%=uU20,Lp%V*?+DX6P\&%T?36W-(+me,7kJ(j at WNbUP551f]3q*'kN$%kDF0PdR%)h%OVo$IGu]Gh\*%TRKIk`Wr0\[l5WVA$c1Wt
+%F5#m6.l4i9-d&kZa7;_U5F9F'KRAmtl#p:b?S,<-bIX8<L at aGLVF/Jp`R[s1s-"#(!kDDEpQo,L9sp.CR>bI1`gcY)<.(>jRJU+u
+%?TqqVbC#*Pi"F'$\MS((/Zu-Sg#]O![[=,L:Sfg0Y!87_WY%.TR=o[8.P8q-5q5-qmtb!AXGbc%J&&mfr,X?6>'!JSC93(tUi>b:
+%5".2i<%pT>gj1%&\el+K*%?jfXH"?C1M+RBlJCNiU!0j7%1-Pm`E;$^?Un2eddQ.FUHUX_ec!g238aY,$M\?!/niAELL2[7/'0fn
+%co=2O'RWS&I:s!@I+T at Vj_N14b/lOSh5JNR<4#]DT=fs;fEM4&M#T9A<bIVJhW]9N/Tmojq:^$$5.Ui8J#]W;HG1`%omJB4eT:$F
+%-(%=qNZ%<aVG8+Xmf-N5+5DrVMic6_mf'n3iXEr3&"1jc#o_qdQF\Hk-l<s02<jb';hi4C)f<(##r6CkP;4,+A[1iOk%^Y%^\Ppd
+%"]$W!Yu>=3ke*g,4P(i_6p"b]!tdMKGS,)C8D/_s9*af4VP4%uY+69&;Hn+RY.FUs:,r]'pP)Y`mQ:]Kfbu=FGur9EfF_(kLjP>]
+%>5C)=Z[7XC at S&%OX%tJ2+lkf<huL/X&!'NTPC4tTs+<laR+(S at P"&AlW:.Ekrb;N?T\e/66cWCqED+sGp=1l:CFY0oeNiiHJYe=@
+%.l4;ZZM at 03-jLn3ga;Yf=H6j,&DsTeXR/QV,tGI.[JcP'-&>(r4pmReLHl`te_K59eibaU[SS[*0OlamKo\6J9RnRa3S4hD-^m#F
+%am$/dhiiQ^b5[5^h3Mu,d8[l^>1$DXW at o8"0/Wi=U\RBqn6XD(,OW[&)Vhj#(F=V<"(`E$GFfITa_h7l_m3KbTJ[Ec&`@h=VQGDi
+%e^iWgd6VH&jm4.C9b38H!=eKtI^]5rB+DL3Fcp6U5*t%UF^2*Lc*WV@?@L1!^1J('Bne(!;G'/UZ%LCtOC<,'/Fa,5itUt-6d.j9
+%lK+M`#m#k at 8P@;X>&r]85Nk&BWB%G5kr'IOmZni*Q4XnlW2`oM(AthS;55%pOLR0Sgmli*U#6QND-)IN5GafX>NS>c+EE[`1\F$(
+%4*FB'bBNu.)KUT'q?qf/`7iI.S.<sFd=OM!Hp&fiJQI+:(eSX"Xug"so$6;WSDnlH2Pj/d<I:rTctH)3W#t[pd,Y&pdDh:Wg"AS9
+%mIc5^NLXm3eAg[kT*>;*\Lur5?-i/+i\:n9jlH\_VT;Qs:$dW1etC:2bZ?9_cF)\WVRFmcf6`CcMbP;jpKUOb\/n'.D9EI#+-U.F
+%J(Q3ZoI5>MMJ\DW)5_R+'Q^A"Hq<%R)-^E=DBYL,e5\/)ks=9%@26:<?"MfBrFC,sfBt:P0B_:%?=$M3&I19JPNcT9Z2dKD)/rr4
+%/0sA^b9122V:V",]I3ZUKKtpsO-39qmujS$)6`$P&unS&s#LbjisD"^ctH%4l&q=s37ulNk?W%WIMh^'E:p?D0d+cXNqU-V#?9Ci
+%e_WkJbZbSh.qH:`i#c!:\=P?c[Ag'fhZD0q-D$a-4N>NiL2V5b!1Zfb4`e8%c%7FX\oQk=hFR(a8]qf5@\IKV:o*9e``[$>qrKSu
+%_=[>p,n(k2/24qH$O`'O05saK98/+&`O[;)ZBQ_^9sdKWYu=i$;3+]H].iW(HG2Ij8"62iaVnO>7OliGgHkiJTMq7C"obj_1"F6@
+%,M4_W8=gg"8pnVP2-"k[TOeUn;tml\]LMKup'U"1ADS]:flMQ5,kM&s/8k(%DNd+'PZ5a>Xj![6#0LZKm[67#c&s6ef4"M0rH;sD
+%B)Qf:5- at Q-6mGn?,r#u__G$tpKZ$5_?+%CAQC$d$YJ8i=.t3$1U40M?qO?&r(,AIl4e_XIO6WhR)<^n)W?.Al3ED^(PY!uY[a!\&
+%`cuV1]"2WK+!d+_SK*o,X+k1[V+u*^JXpG?Y!,i9A)FeYdniTK`#%Z44P at 76"X4/j-Rqm.*1<b9Xrjb&kM/2YL3lHunR52L0R!2m
+%Rp><[Ng.H)X(hLh.k-<q>E9kl$2+"^/1(EI-q:@NcdVg_d?fN:I$t_X43&rkq$C//(C&NQj_Lu23arE9aWnbcnO'8h3VX^\pY9[2
+%5bj[]dJ=;!$2R4I-Q#?J+^o4HM%Wi)^=:]AT!l%e=$[]fnb6gJ at 1Mcr3Z(LD"]Q,:?,(c)@Q4C&@nDR._*(?bjB?bGN/30G>lo:M
+%fCc*k$a5LrZQR9!?4(8FHaCc;[B#-88I,8t]!DO]F^8(As"PG&;<-WFSc96.93LF8pR](!1*^Ul"A'0gN(%^4(gFZ[);'0pE+4*s
+%j4$;?9bTI]mm*+q.-"o.iiqo,XG%r\,lUJbBT"k-fZST&ICLQeJ<V$"g/\Fj_RE]oms1iBP"'2of;9Culm!)72V2WQA&2FO4=N[b
+%r;./8O0 at 0HS+N=!.007.o[:Q$VrdO&2p"e?0>g!KH'_kJhjU=05Eh!&[4ARGE;!qX52X#FFPaOp0d]NDbVtl([!dh+8[kNie'3LM
+%.aN`ZXmmaoXb'#T?*0D;2;3"R&/LWMjW:;?Z4B<MU#PDsmLLb9m/bLL$IVF9rIEQ2T&,u:/k3ks%9*$d-9W(C;`UDH at OP=#L6)U:
+%*jC'.rp-!eH*9,OWQ(1[QTLTJRsdp"TP4UN:Lt?s[j8>-1"VnYdsRfN.cU:Rls!puUY_Ru]Gs!`S_OdB,)rajBP::Ys(&:'<6 at 9>
+%q%lVQ4Kg!MHc+E#TmBXP(IX_0Wkk-"8(EVH9*=9*<mEEoGg%^U73mjEkkW]F:kbA1U=$"V7UN)r1HQYZE[j4$&uK)U513iDYWaoN
+%rqj,$^8;D<F-o'mI9<VsMbPJ2l>(nF(lA/"+C(#1>)M3"]r$LJR)3sQh1hSU>P!UD`7o>c*535)`,eg^/RTY)'9++uI.eh;k(BIC
+%),/i#i9<`#2jN\ope!puA)4;Kp'@2%fh-N>Dr8uXi7#]0q&ABCXs!.;)81]NR\6WFj<TL0a7Z1kZQ!5$?"Vl_AodbT\-pp>gogKs
+%PkEglWV,5(YN5IV95HL<G!t&7Qs>03Yu`UfMP5UBd5,-K8mkJk=q(5uP*:BZUiUgj^Erj)8 at RWQed[f[ccsR?ED42"GFWn+entsP
+%EJ!S]3!ug7[?\:ISO)fQS@''M++qVBS!rn^?Df&5Oj at S&,^_*dGN4pmfArHKQlb[DHMnmdqn4<O-Sag?Yefb9q3UidVR!?2Q9t\t
+%FjjV[P1)VT3nDRKlq9p[Ti0I=Pj^on"(a0YDD$trIAVT'b^;"=/k%"u&o1Zq<S6*hpQ^NYn2/H;+-o?`TsVfrFba\a3N+;1OV`$k
+%^6";rj(0LH-CiMl6.38<2FYsaFg`9R)jZ7j/55QkCD<^*<d5RGd at dSuR)KD$@/[?o*&A`UEsM'MZ#LEPpuu`q4m\"\PjdB5/8cRD
+%]GbT.Q+I]td&Q`Uib^0]mgrd]p-)O<V-MP](2BHlEGb#EdmdG.];K\L9gd!*__OA[&M,DCU;CeClY&TAj*;qBZ9RFlT0R^k4.82c
+%gU=?</T5Jg6FLenPU:3K4 at FN,9$5W<IiguCFe+DQJQjGB/GBa(h<s=S?O^Pn$kZr"Viq'-mD9_JaflVKU9Q6OiR<rI\l4X5.P[a%
+%l_5q]rIof6*mnR#MlBWm?*7SWX%Drg"*\_:$^SlIDON.;Ap<11VjZ%jM/ZkrT2Wgq/99a(Q2\G(C#2qD;0ML6\98S-(0Y+Fn[Cgg
+%VB65?fgW?>ZL at SEgpn<J/I9BgH_50IjNHJXr1-!CDu=n2&m,Z2po%2!03VV$AcP3h(:nO_%>FnTkYGV-1\8kb6Yarn./Y8*=usd+
+%.4N9;HiJ),i4b?3j:mlJ=-8!Vl at id9TE_^ag<`.gpY0d8bMQW?M$Dt8XNF%/Q+62ImL"kWNg5!6P,WbVHIMH=BQ7oK26qb]NEA^M
+%kHFDeZ&PoKKCCtQgS#JOL-j2H6`\:fT\E[1SQTFL-r#dci6:Gp\!K*ObR^W53-cG<[^`cI5CN=Fq at 3Ck"B6F-[42':'O911:BEWn
+%luiTaij#>k:Md`_-X[a!/;Z5Rk5"(O4%+OqC#S-(#<_.r>pMKI!Y@>k6!JVoJb+<dfo,)fi?W)`-9([C%lJnQ/39[CJmQ>(*@><N
+%r7JZc,u;bh]M,]eWP$I::"^AFS@;0qJj%)jA!J_()nbi=on>Xhb1Cniq)^n@$1fVD6oJ%T+Eeemb",1ng+tT^c,2^>muVEh?NuY=
+%#.u6\E&8%!bBqI4)r">N-cYg3FGY:pI/J`;]Ii$@VXV^rcmT8C[69tW<8$s+X!ai^^I6!"%8K1g9no;U"$Sp0k&(Q2g1/+Y_4j6L
+%al2b"h(4=)S7&U.qo7PK&+**eOjD=?Gg2T3q>:hqG]P'lJ'4gD[;3nEA-Z6a23Tl>V[<dc9tq!]CVQaPag4`!l[s*PHJ/d",1<b'
+%fX.K_C27b]F]PW?C6Y*8Z,71Z/WQgG]/kR&FHg.6Ek#,>YE@&t[1)fCH.T/R(LZ9n^V at E*g-EP^(<+.^PB;@/3I1=`DUun;0Sm/>
+%G03#b>X#lHWV)m8'_QRZ\a)CWGER1KB`B at MgkGK"n83X,cn9C8c?I[p#_G8Hf_G^^7CJEspSCJhmUUonNqY&d'Xe0hU85nO$.eOp
+%IeH(8b*(#h*Ad/W;Ps<+o`TjuPmrmF5k2>]p6Smnn at 7=8-!O^R at 3l,#.rXe9!BDU<d+F3cT)(,?_PA'qT<G/Xp>AR&]o<X1oqB&F
+%\dfBm&#86\[TU(J3MjUThqIE#)%pl7aG,+%omtnRr17K_U6tGo7i>_l&+6YoEo'SGNh+hk9X3/\"4Gm^.C6\G]Gh'@.6ZR!e5XaP
+%9"VoA9<E&$BRQ6pk;N=&jmk#b)k,+HrhcBN#cTnhLO1*kS%4bp5s!_U_r1QD/=N__X<i+%T5m9/F,cehR25Er6JtEIo37Vop."*i
+%\!cu30G+d$[<NXs(R7%anE6KC_Df"clKredMPrXDC6BX+P!(+/Tt-6jT2,gXe^Qo[,F2D/?CK#uaU<a:<-AZ7I*.*#O-^j;*C0jU
+%Z'X?FD<omEcOVShc8cq30RIA2']a9i<%\lWG_ at Fh-'g;pk.-)iFA.19'IjCeH.;"?RfOOXj$Y.q'9`rY!G=`\2uOFa1]@rpD&`W%
+%A1B2i>Xmb.8\5Sbm'(1$XZUOghXb\H(hmr^cOo7q:(42URnDWOGYX;b at FeANjQ_[=i5H2r/G>n:'\L!l0#[9A(d"XsZ5:5jSo[o>
+%Ptk,W_:U)f2Ur5?Qnrug>J]k^3:rKe9#AN)^V?)fUsFH`k1m at .3*di^mR3*@l.6q6?7>B(19E9L!WT\`CAPL,q6[&2nru+Z_?+80
+%c>&eq0]fR,EKTuJ3uPi5EObX.)d#@D;aQ>t.-lj,%.p(EB,m,P.01L'h^'LRIr2q*]iTI0 at 3Mb^N.&)HB*64%MR?APPDN7_%ST-`
+%7%1I^l50%_m0&4OGO at IO,ADDLqXL"pS%l\S`IIRiWB">?1cl)dHjL7sO_;8!\U?C6OSc1#Nd\'8SqiH^AorQ!"!.)@!LbBHZISK'
+%-Z(69D`c``K#@tB"hN."hIs8AYNmG\R&(?&G08XC##+'TbXUbkChpJgMcNq$A%1A`V6m%q]9i3M?Te+d6KhHZ5Dk0L+D&MW!];10
+%bI^s5qtB:?=EqdH+)HXSq"/(K>/FN;NV,u2h2LLliTtbP&d=90%i*7jO"hCS4K0QK&cg+Hr0l];@q_s'/WpK\&WSC<$r[V;f$nbR
+%cHa7/.4=CPF`QXO4Au at Z?sUgm;SR"K^AuM9!WRBP[RUto0TaH[fMOCf>"ZFb&rq4#k"5.X.P*J9Fepsc-bh[h-iZ;iTVO>-=XVJi
+%p8d_]fLFq=3:=Vo<)cd5/Z2nVMR:ZT[tsb2))7k%S[bV\6Et("4\OdH*uj)7T%Ybr:X`uh%stCM5/oc*d8o*aS>F1'VJibWqCA8=
+%(mm4Ffj*EfGl!!+QOe%%R*?B3m^#,q<0Bc^pf(1b^EtK)#E+\6[=k0k:(<+*jYJ't'J6EIQSV`K".-1gbKhc:8"NUr&iUu'@9ZL\
+%LK.bG50*Dnq3;c9AUEofIMZm<>.=f86m&m]c'.d]0AR,]$4PZ&-m*d.h0<pCF!Vn5I\-pmAL[NT#-TRY_r"V@,Xd+a^p6sbVae7H
+%V+pYpmT-LhQEQI?,rmafCRr*u[VC"-qiS+nnbom:_8LI67'gkmnWn7%*Ypil2U)@H:/fD0Da<T/55o,"/m1T*Cm;;i;&]mA0(/pD
+%o=sJADY\:ob#RaWQ25Pq?42NG_gCYq7'bCe>jiiX^e2LNLAl!]E[j^B9Ts6"pHL0aa%H229s4W?[])<T=sU'EQ\_t_>6S+T3ot"f
+%;]d9A.o3 at DYipRu1eEOco($>u?G:SWNPA^UKhu1Nd1_OEb'p0j$=&dNe0:(chRUWRN,4dp1m\uoelYJ>6g8_G02 at efHRgY<DX*%g
+%92m\u<@60(4qbMbK9`Q4n$KH\a-V12)fn%HT]>?59/soK_gohZj_Hm>CXZU:nE)R39AuG_s/[i!nh"kGI at mN*`*sVISt5V_2u1i7
+%[/H6uRZKoLl^]bI-NmO&S+c*[poSYPClf&=W/lNtVsrF>UfTB.++:qRCSp/b<Gp*Ncu5"=k79Z\h/(tW9,FHK#?k+MFC/,[_0eYt
+%&sEE14S<;99:\6'V``<!jdG0\Y/Z8;FR1OE1Z5OVg(!gls*jcflglKU4=--]('?MfW+gPG(8'N]A@)$jUqVsH%4""I.es7E*"HSZ
+%_/;dFbnYYg-V^R"YOl(^I,TLM;cO[Rd]TH(*b_1H9]N:KWkP7j0p./"']IV)Lcql";rWG#ei<2Y,hYErDY&\u$_;L0iCoMN;.F$G
+%amZfZPqhu:no6WD#]OIVbJG/K=Rc`#bh]c$R"B!tq:/_f96Gpm`pUPp^M""Kl(&UC6e@&"dF>9uP!?:eg662grY-FYjm4tfM^*t+
+%Q)R%>UoANGTM=fK=1Ib&aGVpTmZ\0Ja!Ti;of9a$WdL9!,gWlo#Eks1]q+hbl2a254MkUlB%q94m,KN4!n0P14`R8e]dO?oF:9+$
+%bFLk6>r)4=+TFs1Epb+3^S<5B/D0+'Yn:G`L./I&k(IM//$PX3=$,$][`=(cS!rno2gP<A(QRm&E:T_mT^Rj4aF#<&,hO;:IR.9c
+%ah:GE9582k7CR]?jB9]cmt'Dp?W9f4mFFV38olB*>a1,ED#CT5hj)=Nc'?_/fM[VV'XZ.=!JJ8d9j),V,uI]Pc<A0AIUjVkX6adh
+%$+i>RI\5[g429:\N1<qN0"qVm;%T==cIo/'>RU:j@:Jl7CH=.#L_)B]h9BPFTGqlcnh=o!?3Mr-FQ=Q%E\M2*)jrSo^T*MO6+=KA
+%*?9K)6Z#N-LSn=)IbI6 at 3>ZPq$*il&*#a"H6-!0d4Jb/kI'uLWaZ92kK)@).LklcBZug,`pG'Y-j<H:VcY4T^]Eao2G+.TseY9M7
+%L7GM'Ls@`YK2@@;`KSF%H+F=<hsSp]Y+=1i+DKr1&R^HS?`0T+R9L)idb&a&>>jm(78R++@/9M0BqCNm34J&6HWF'j>""p.9!I2B
+%Bc2OoMh[Mafr(#0rdt0G!pR]Doq%"'hZd-s).l40Q\550bKib^R_WJ1B#4@*VsmAM(G]aRm_j:%Z]`"d.A/80K\V#<*od at -$*^a&
+%?P&^A1POCTp,BIUD.WErF7Z8hPYGM%h[KTZ=^JK'd;<O>^fof,K>c,S4fI&e#o0Hl.UO`g:D;_U_]8TE&DgehGOq#;DsJp$iEg1T
+%Tf>VS;,Ypt^o/2GU`^lHe[JmWhPcpWqu&JrII)@\6%pIP_SCnp5\`$rm'Z,D>u.UicmaN$*Fd#/pgkm$kA%e3s%f&EMY87n4h-T%
+%Z[B1/bIBP\;^_E80I&WNpL=-;+?kRPJE:fLIl;F\)fc at ZQ1=!&mWKme3Q_3brp7U/)lI@(lqNGkMX:]?&ZN0?@M`M6-pf9KJ,A74
+%<1;qC0-K%rLHSYHOFQ5%.jtZK-U7Xc\`DgR3*EtpG=k[a?pAqs3)[,Z+P8*3h+>&S7 at N'_'"nCr[4/RpY&NOFa at uiBg9g4=,_D:g
+%rCo:-BU4p!l$CY(,+)A0DS/ouW<$sNV,MPS-Q<Hk,4>/._ti\)darp42/^'$;K:SVs6NBBG)4YK8]FdW0->RIC>5?;H<Z;9.)&8K
+%V?/nX5t0.PPDOM4V at PXK!!\DiR^S4=$KWT5R("Ba,h at 2$*q)(d&@`:f#cis??c511VM0Xji!g4h3GuQ&/P)A"(3ta_,!e.:b&b5H
+%l<`XEp65k"H(:#gHrr-J5djjL\7OrYq^\k3Zd*V6p=2s!(3 at s,^fQG*UOaM6H02/Z'[cZAU7ZQN#7Vjg/%b>90cuRpD9m*fs$DXO
+%jsSVR%C-rAXeRul/Yb)k3N"#hN%r>CimG@:_*Z/P*X(&]V9j>/=m.dS=ouYZ8COT<1UZKm2<27"EbT*_-I4.#:),R>FX<b<*NQau
+%fmR)?rKe(<:F6CYO)AG"RQO66UnJa%b@*r/W:6h?'/M8JPJ!'IGPJeKS)lFIp>d%hd_U!Z-0L59$2V$5-QSeOE%l=eNCrdM\Wjd$
+%Rra-@&mXh2c=.m0fYkiM at 7QP!9t?/VL63g?e+ at S<KC\)B#GIHoSV0cBoHhs#]6);lNK'L>$Mgu8:<;P&6Q8.-^$s(Q1k1[Zg/L5r
+%DqiZ>7ZM1KcGP1G&)qNJR2_Air9"9ile)3"['7#9aK8EX=IeRH"%hdNd[l6^VOuT0T1MTC>TRkL*H_+27Upmn^:$lT6!<crD9c?g
+%KHTI59N+/+^=S,O<V)@fb,d_OD7V(d!6uR`K5<tql5%>0d4a+=U76Y- at AKcAP.DZd<>D!MQh&Cu;$si(7hPN21-DroE]C%R2t):D
+%_B?46#B&n+T`fGiqQk1OEq[%U6<mEd>m\gDhJJ at PmSSt+!R(3fH$dBU(KkWb:AGM'>gqWSSffo"JIlOU8e@(bmbC=<qm at de>AA('
+%S^[9=$Ig"UL!jfsX;d#JH!rHY6YB%L[j at QIigdm'])BHBWPY"F2Hk_"`WA8BYY^l\`83(O]p#CO[(;'g8Pj'V8n,n*QO>hhdJHGe
+%GLXNBPZI+ao`0Y+G8;nd\L6&?I8M&Bgl^S]hd:,5[K-:(m=^aq!jT4D>Y#h;)Y/gWTlQ#A7]dre'CTcH;'af`e';K$/i[dPMlj7-
+%cH]-ZMWUBdq3hG%\:=*[(t at 8@N]adtRD]rP_\)F1-h)Hg9hh&j2]\[)K_(a+rD%>`[G[:i?tu,k2rWjW?$N6_\2#Ba2Ra`YA>auC
+%L#r1jPm1n(]m7%;#gU%Dmj+K*9oC"Q\Z_;LW%MTKE$\]i!9:NT(#[3-odFlg=AnV5VbO(ZohN,F>`_0I<<_%SjB-_bI<(9B&ffG^
+%ca8-HU;kAekLbImI;-,^lN<Uf&VlP--1[05UOuEVFs43#g(5L,YjXeg`P\i)5:pDIQ3lI#c9V??j]AYS9LUJ05sQtKS9YO8LQjmr
+%c:]9KJ0C3F>E9t`Q249A&,3RQs,<4:$FU(fO*khn_%6*laiWFN#n_]drr$FtS<M!X/Y,<6*esV^mR`Qq6g8YPA.8MuR1/<)d<rDc
+%J^Y)bLS,W,)Ci=[:LZp;JI0Y1O2ksl>h/C,es^PG6S2\Rj37#B2m;gT\L])OOeUMBHmg,8330iUI4rLA`#LTM<HrD]:NeBK^KQJb
+%n!p+42%!6T`V>%25qG2AM at 8%[7!W'pY=VJ`(G;DWNKa[!aP;Kr\Ss_GZ3F/'E0T/!7_=k`s%(c&(*qOig<FSK3[ZQWCr,83-.(s)
+%2KiuofSR;S$8Pb4g(DUYYG!jP]>'OWOJ$H?o4WW.m$;/fZiFSEYFc2mcfOLZ:YQ=j5G)o)=`k2;^[`&iJ7Nb"'WTla'PF>0[4\#+
+%A0.ir5a'[Y<YLdD#`,Ag^-0h)3KD&WVin-.U60IC(G2gJBi`<Q1i._%@JmFD at 9mG*M<_9SMS7M0Jt2G"K#.Vr%Nc?\cG<)B:;-//
+%\7?n!k:r`JlG3u0(YU+Ed%I,84-EYU[qK!@fOFU37Rq8s/3[Ci]b8Xl.iBipbnm#$-#QC1MIt2>5ca^EpsjI\Q67"(r@;M)+0qoq
+%=/*`lY;uiDFS8eeL[3H-2)\eX[+hLO4ftPm31/-T9NMiI9>`,kjP-U%rM`YbGdEb8Zpq;3kJ<EPVG#`EIgM'hIE's3bpBZ&DpJ9s
+%)5AP1(h9t$WAPuII`o;Wm+#+KDVG%nJmY:g)"^C97B*\@7;HAbUUS-/_T(^48GM%_:FT:$8`@t..]"c*4j"(dM>3!N4n9':`:e%K
+%9Z/:93"co##DA?OM&u*DOEAdY5rJoF5%T)48_[mT/k0'_2F:U#FZ9g);To$^I:^$T"+.A^oVs(\WZoUA$VJ<%UTStg2q8U/A?>,W
+%p:r;;]&]14.CR!LX#X!JIH!=l0^k at +F('FTIssk[q<,;eCm+?hE+'YZb+t'QN^;\1mjpDie(DOS at -:%im9EWn:G%PQ9O>/341$!3
+%Qp^S/(#h7I[<3 at gSoW7K^f7#mqkZPOeu6MnK1ZHL_.W*(UJsZojk1;s9+F,2^dP7L=*)5XjVu!m9%)tOp":8"BmUJ>Pf:S_8g"h%
+%lAE#u&[XXeA5_[%k+3Bo7[e at CB@:<CEt0U.k,oUo[D3Fu-q6QZkq%N_ at U#Bs<Q<H9*+"#jX"6BH#4_\G_d&TTd+?D]DB#Rb<!A'E
+%m$;G25O.NnWkj-\5,=:#2*S^2o)e1f;n*/6[KG19#%Ud.KRnkFPG]]F/14^]4.B:6d/4]^T:Wqs.lWSLd?<Kmr=h"9`WCE:BdQ@,
+%5uX-$hL^srZ5uRV.1`'A at 0Z3"0KK'HOHo0&975!H9?u;GWM-WgLW`9+PXBV?nb/o%Qdh^']tMd5=\)nhODUh$-S#D:j!!6[3Kn!8
+%__S"ZNVrEP at JL)5]`Le-JXi6p;t7boNu[LOE^&ul&S38U]^CuOeSK.>_Z$[@2R>E3s-\-XinT9`.A8Z;*&E'/$b9Xq7cdU+V>Dq]
+%0p6H,ro`Ml-1;SfA4,H,_KVTsG?Q8)]m,fi,NQRb15c)a4F::B.mjrj&jC]5%ZRs7)K3nW??&:>(c at Fdd^rF(7cn!*3A>7e)P=/H
+%S![naabl./;B$+EaseR`?8SDZK^o:=niSRs[IQo1`S<<IQM`?"(rr:[S`&32NTs5mm!,"+[n]>^Z-f4Q[a\5`#,"M?(Odd3%%:i+
+%lrVW#9gt07Z+:B9=NHj?/<^Em?)G+#/LblqTd]$CZjk=0IZn]%2KBD6NjkP,#:lkON2\LuAGj5Ib/dYWrF5r/^W`$_[OjKmG*Ph&
+%2P3>',kWujN at 4niiK@M at RaGQrCS%hT?9gsmaHShXfM.om'?et5\Et`9^9oAnR>Fto42+TLJdf('0YOYXV?<u?cX4?TK&;[jD7aA^
+%#9 at m:dAXm$3dH')Q=1#jWp_Og8[Y$J-_!e6j,\&$lF;2D6CsLM>PmM#IYTKjqtt<=:]ic9(6W"$kSfQ+aDJMMR4H>ODij3%7W2J@
+%8P*!S6=ssTU6[6_?Wq`#5;a<iC.qL at S9",&n!>`.<m"QDI4:-\%nE3L-1E<)r1m/+BAqWD6[$Ib$'TP:he*?5hmm`&*@W9Xo)i-^
+%B.E9gCAP,6X+^s&\T05j@;J&.d_7HKEr=5<LOdG*>C5Xro;:0cn0$=:W?mo/H]7jYr.tS,H.h^aHC:N_*1Q1'\f+MLeq&Ho\CFcg
+%dcc,/_]BO=pg[?PCMKh,kaf at 8'b[]7X+(N32+?YSh0IoN3c)SC`(Y%:.4%THd3TsrObBE]ja8,VBLY<eg?;'[)(Hd!rfhMV`6QjZ
+%W?YQf^Bs9Ego5(,_Ri$kI(lA7\>tVCJ-G?j'p[Ls?`?eX(lf]bg>M.]b"a)5nh^Hk*3I8+M.H-JU7P[D*-/BB93A'm+d[4Uldq:9
+%?*$h=HJD1jEo1WhmZ61)md?)0VT&D&e?\o=P4l)kQ%WZ+S!Du9O(b\gHjL,2oOF95KV[p!Xi&G76$Ii,j$`l]>FoT=hfe5>oTVHC
+%_nm[j;$O5>LB!>CPqk_P%>l=(1)+Cq#hEaUPcM_:)1p at j"BsWE/Q6.GBT$Rd;7Y!Ak'j5K7BM$nj`hf!0<:spl<3Y;29HWo`.h?i
+%:uSf2Nd@)QD[fOicEfqd<>[9>Uts=dN;l27lf"[(;^abX3Y/&ic,'f[_-Ye=?Tc<P#0+(6Xl(_;?S-uQ"AQGUP0c1rf0>iRBHAD5
+%r9JU/RpLq?eWe&S(?Kqo/Gf4=I_GpgGqOf84n(j33^(g,TUV%/8S]A[?;;&jeZrrYo:UDe8P%44><GU'#c,l+k9Wn=r0n(ZMs[p&
+%S<n93qmuXTH8eJW'tl#NNo2*An1FHVZPY[2,BCn)3+'%7Z+j'EZ['[rX_RmH#N[tU?R<,<j1&e[_RCnJkFGSR]ZC/K+A5\M4R7[R
+%I&/TbPR-S?!]3b9C"C1nU<<GVF!Wn?0)6fl68nSC%g$cpS+rE\q:_puD#i/"G9SLE%r3/ce6SAC)'"&c^'Q#Xfg'k2Hpd.gOfF]@
+%kfMr?0LI\O>?\g1%V@*6SL^+s\u3big[)h"WeJc][nj-&-b:Z&SpS8.Qd=4"*dtH%gIU]SXJ7\NI,J>ZadTl,2mDFGb^IE**)BUo
+%#IhCh6/n=g<A\&q@?XVF><Ak4,_^f_TOloXZ-&+8/c">]F6`SJnRe`-k6J5g_#&VQCP)^<;WRpRH-t4LqX1>WF at VAcBNR!G>63uY
+%FRsqV0>)F07Xr.0C/a$WLD.ROnd[u0s4q_]>hFu2gRBF.&8HNg*rFThg=MZ+dWBT]8\,'kb!IbN58:>ZmSV)l-Q^Z[%k+,<RKSis
+%oM0dI&Rsh`&&%!\^Q9+'U=s+tHR&dnOdbmFP=rtZZ\Rfc1Wc=CH'q_*+8a2^I<YA7Rd[%89&(<Tc_l2D%5r!PWL3Y5Qh6CSh4J?V
+%!<:,+P_>:O@`<;6JgF<]-,OqV[[u$/WDRS,"@5dq+D/=Q'MF1HOF[(P/u6&h>TOPam+/&J8DTBKR^7?X?V91no9=b&&smL`1P`es
+%h2\ek at 4oL+k?6nF=\IDLmd3,[^GY2"mj_>KEEF at jpk`4Sf+Uo"na<lj^48Jo?jjj?9H\-SUJP.>3`F(@U<b1r(j:*f)@G18pG#lm
+%hEW7WZqR=Dj at 5_aaaZUVZk@Dc$+pI_e0bk#c.goWdF\7fBmb%YQ@'$^EmShTRp!"`7n3q9jkk0A9Er)ZRE8O*#)KW59'#Q. at koS$
+%h;nIr&/\U;WJ at BY44VD5#JktNkG3<lq_9n;;C4'KRV)tIm&WTS4&jHN<,pcJ\(<Wp0gtst"1SMskFiJU.P="t+4CWJfdG,5:3Nj<
+%7]Ys^i;X5_L3$G.YUgV_!@Y2c=hmgn:sq1pjLGBnk)qB6Y,hS-CePMXg,!QcofrFdJek$a at a?Lc'+.XJO=&1oipQ:e(XDYg2]&tu
+%#5b_HS[q?-UC*!ONlAKAqs#e<+rQ at 8]W4H2p>m8-7Qdlc^Le"pjaITH-o1P5-FlFlO4uql3lIKMS!u\;Zu!NSbkiE+CcTCo&6)0F
+%5cV,(\pG%qJqEFTSjAj&nlk;aSVNJHYj',r&!2TdR-(0I&h"9>1>lB6'Q'alFjdB/qYn[n%&-_ITj%(qmkO(GO04_$[bsQJn3Pue
+%EIf1sHkY+6>&K"pPTi2C5$fp5R-!GdS!X(8:,=J;9(l:+San at QG=>!f<YtElQRMqk:=Bea8bk\?"\i=cR>)s9Ti4cAI`S^*SWlr@
+%6#PPu4!0:5CVIYB3mXkpK1GNe#\tC+_E]sZ2(q8LbRNA[*@?\XR,eBT1a+QrKC>2g9fqH3^1G.Q,kpgW-/RG.I.3r.J9>>W2Z`d>
+%!`Yu/lbrGWanr]-jeT#ff2d4N9V'M&jRP#Od`#a_p.b\GAMCADVOJb^91m<k=CA-7HZjf^:DT%f);d-Mo#-_*Vs/R-n'0fI<Q)lG
+%kaK)g\NouO2"OL6BVC>rrVr at mRb\U)icMKV*;qd at 0BX0rb/0j!QA^,%5tK;f>B#bedNC/^O0D!c\l>u,MR?F&^!6XPY^'f3n_7!`
+%BpN7"f(I?=4,5b.DA$Uk4]BBuWnaMaf6QPWEiQ^J at QOBXS#@_eoL"t"]B:7eVqJsWGgoUco%>[BOF7$[NA6-9$cpRC,2C*(iOZa9
+%=A^8cYs6'%3Pq%`)HdI=Zq$eU$M=SJjs"SOY_YlUQWP&SEF4-3I[rllg9ous)2jX%TYE#COR.;&[F1<:^%5q[(\Z%Jq\JVJheX\c
+%UO=tlF.q3UH+53?`M/)Y/=Gj3kc!DQ>Utr/jDTbfGJ7sch at -$aM0uFLp8m/9OuC^dDsSI=D^J4`1'Jc`4c-Ed?)fRAj1F^?R6qPO
+%]X4VXo(]`e=2,kT59Lau58E6NRJ&bR/jGR^qTBc;RsSRgVE?191*1]D2J2pZjSeN0jn*MGrj9uB?H8h=L@&VZ(Emc3^aC6l4F,6D
+%V6rS>_+rlVkfgtH#XOPS1ibc*RXPo5SR.hip'!_o8P^A!k>"'u\l\BK8js6Q2c\c=XaIB=F+Ud0&1P4o,B"s!N)[Di-!=fbAd^4^
+%!L`^:!X$1l9-bE!*1[(,%>NjgNJgX1 at K:hJe#ho5r+GJ'E8q%qM,E?KOlS5_6b>BqYQjFfGCLG4joM@)8tP,EBFj6#S:49uM#f!p
+%*eX+<*Rq=X-aI7F0ue*>A+R(0P`$/@\/;:QgE^<Bj/a at nQ<^6&GCa'T')I%#\n?^MJfH^JBs;r&$K`A&SQ-0W_;(`BY at Y#tR58"0
+%'6'O7I)N*4\j"0k.I^4Sr&@pfFdqeZA`MRUCL*,U0btXE-%1hR;k6(,gn]p/\;!=+g[3XZA]bT[3shq(W;oZ`e[RKUEt2/GB!V?+
+%qqGgQBR"QVi(o8 at L7!IqfOSNH\Gq!M\X:\o[k4L_/aRR2=;9WpTooe*)j;2a@/XTh9:.fe4MX/"YK:S<N906Rf+t1=frR%^oqTkd
+%.6m+RrLDH+\&%o@[&+L,c=2b\JW9O\D0=<)Mmo8LV1u"P_;n<onMBa6Q@"gEF#G]ep;5URrE#2'$LRa=Q"2c0B,JWWjL!dR@',L9
+%<_KX&X'^_S[;#*-Xd40uP=o&^\I\cMApT:*q0"bVWAN4=POD22//fM[%2k>>%#B0B4t2((]ZQ6Y@;gF>])G!D=oa++^s/.=A1fCE
+%/GkCIRufO!RcQXDYth9]10gG!Ns8CtD!M.$0o#f?K at m&nSggNXGIcu1QJE\Z7ch7[`lUi6SVcYGa;.l(#jFX)G4$-1T;;M:-%siI
+%T&u\B?K,J<,4D0IQoDr#rZ\I<b^\$SeRf2Z^/P!RD(F01+IP at kg@E_iB!Q0kcHPTUo"DbOZ^+kAiCB5S&D]Ds6-sg<5D6VO?Sd,+
+%E\#s$f<oRa,T)u7'ngVc"s$e1iFao5:4/@T99;=cj5FKA#[safUdW@<_(Ie>m1L"IOZgN=3+d9j'C$N(.FX]jk=`10\fg,\Dt8()
+%8:9n#mUk;^lU2+/TQ;s"Ai"?s&Yatl[554%@f;ZR-;ZUM1$NEm^P-EQjZ'qL>PmNL<Plb1Y:p.t*F\9@[;9#mcFG\B`1/EJa9Z_c
+%I)_QT!o3)7mn?u6R$gki8_lR^EU,s92_P?d4k6]lH_ig/4k`,GcOFr>jU;c\=Nr/]_1MsCl*"N"3QX3k4+lB;cOh3/MR*'MZE8J!
+%B.^=+$YuOe</kK33ZkoE,gkJFl))NT=$PsA#-?G\HT7kO\^&S$K[NaAlmUDn-STX?kDFV8du3G2:aR?4UPsYcCmtWsR$gOWHpr*P
+%M2E,dk()Nfc'DCL_SQpc'DL\pAp?F3k^lkO>\b:[,!?U"'Ye/e(:q6UP8J^."bA=mronjahQbb\D/Ic%=V<WW6+(Y.1\*-jl>.p3
+%#E6U'43))I:;&3d#PHn&rVX("='OO:GtNZ?6em[R?Qs4pF]VZh23F:W8RACfPJ5 at RN-1n63V<Q9%l;#<bug&tD%gcLn:SMA8=CMb
+%^hdbuY9AV"6Ck&4n%"An9<\=lO^CfI49Penr2e4`V[bK.A"W=!dgUGg&t\lE]d1aQmf3\pTHGO;Q at +2L8=(o:3JZRjd7;rl+$VTB
+%=tn0`munYNM1M03":djm:)IBE"J(_TG;.b3JL,IbaO2#TX;eoY.[s]8Hf96=4_(W]#Es*di5.sUgeR>NE-^7Z,`T-UGGT>T)td*=
+%:"ap01QNgNiV/TPhmN_6U>lHm1($U+@`EsFqIr9_l/2A!FqQqeX=8PU=Pe+F)mGQ6O_ZcJlJ`'rTDs"-$AgA;bG:FOca;jIBuehU
+%%qpd8d%3k&jp#>X+!apO4<G!"6"^,48($FJctEOP=pdY16s,c^%':JhaCr4VROR$l4$gIT8<D-kXiR[RBBS*`6gi at B]F4ciFUI\>
+%$bjWNdH2&YpfW'f-Rfk&c].AB>68"f/GEXXbU(%O(`CWc]*?3?-sUVAEaA\c\H?E2Sk"ab!d.*i(WuE*3V0@(QfJZcnPb_&.n$fg
+%&hldFjCG<V;N>hJC"DI"4;Qps"o?<BJ%f/>H:l!pGlUfd/imhC#ne at r_hr6Q;q\,W*j]fWElNQWf6k0ZJ+UUVc!Du7TZUY$2C'>^
+%lC185Ce]Z-X*uqbd3fN\l0Q(48"%1lj8%EC)[r60H[]G-<^V>PPM5Y=!QC``\MuUS%'8%JCaYO7QN3B'(LQ:?BNOYH3>NSa2k$)l
+%PIoHKOn3/uP&6p?dleD8kX[(^kJ3onA^f"JVn"W?lkXhE.-84A(oYnPXV0=cJl#AHmc6_Kp>0jo4V2IX"J2EM@%oNP:`!m:h$(u0
+%jt3cd%K+q#ikO#Ee=$N*+4Ki+Y;>]mr?XL"m8CRuZr#f<a)VLV\EfFc;m%B+bGG4!7LAL"S.c9`Q7J[AD%q/\1,(8RLR;o7Vr2.N
+%^6l<nHkG*fH1:a[[]APc>:^4;KI>>u;N<En'F`h6b:TN/"85fgnjZY`87B2"Mjuqa%u%HE-J,5(K,lp.Bt"3]p?,5/_g:/SaY#7;
+%S%Brr._#M'IB5,jPqoBb"(I\j>j#R9\,K`]+uAS$R;kna!TV::b.Pl1Ct?9Ih!(/uha[<d[1+--Q9.'XKQofQI,FVOF/OVMoTrm2
+%FW1Wd]0I2e"BuPta?<Z!^*e&^GWupri8VPNgUb^B*_7pV_rmWW]\JS>J<J9_k@'I9GEkDWW1Ko=WhO3!Chsg\WVt<^A.n at Iqh"/,
+%7lt:W#27-G>A20=A9ga8gf/PHT8mPneKroCR)B%)0kHebHq\t?'JB>Z/kp:'.22*R*>iKboJ1>@RE.['Y+7qWMgjgK*\@CEM07c5
+%LgcLsF&+l,9(YN?<]^L0$Jfq"=,E at Cql7&qHr9LGF2r8_r]$&8I$_E`.b%\sWtOjn,k%Y:DlGP8F5')FH/J&(rOkD:A2EkED7=G4
+%BkHOY]UYr>lo_[MVF/25U`Qj:9/D^l_0Qloi29o!A*r@#")(VA:m!Of;p:5!.rrMJ%o7n.o>RS*PhL'%M9\g>L-TF3(E@(.mO9B+
+%m^AiE-p\!MGIm#/o;&YV^#i+BWgY]@4(VF&bU+pXID*Cc]XI_D]VdUcaPp%;,ANW?O=Kb5EY2>="TuBqejM,mHPG6G#23[XU]:\&
+%-9riIeh*PQen(>ZNWb;=$#R[<idRMb6F+D;\%Dmf\>8G`A`g5mblP:1[P%0%^^J.,Aj*+O&m-Wi=KDKro"7jadI]Zt"U8G(F.fEn
+%YUsA<g_15)&l7bB/9cE5`+]5E!:X>nEGC/7m1V!2_"Gu[8]=5\AEqoEj-h"I*1JO6hP$gc3^.Vbn6H?\:&h9JR?8d[V<CJ;e8=n)
+%YpN_M9Kfb5ad_%qr+sumBt(R-CibSEn,leWBB1f\W8Tf5d.DaAflBhn!bLjBPHTme>1n&[C at EOePWY;ff*rNR`GQ_/NN9t\[fi.Y
+%ofOkN_3Rp>"/T9$kJQ!i9d,"iq7o(gOu^(OB^?%-E)/a'1&9`1G3+L$'F(]rIdN`q][CR%)WbtCjj.-hItG#@TFG0[V@*q+d_,-+
+%otnaD"ZI6elqS&Ro&W at tN%5ua\9m,qc@'/c3<gR\j?X_%$U)o<S/-d$WStk67.\)8BX6F6FM#q!Dl\kS-/j3mAM015QID'XE at G"m
+%qo at 7)RKseRRhXpmQ"3-K_='r$$'PJlc[--k3"G*^m!%;j^t1ls:Ap;_a.F5F"&FJEPO0d,:3GNAhAN@(!ZO^>!=F+Q$'g&,YoaAm
+%a*<#tI.Ae45Ck'\KEN?(o3c\eRbW)IVfq?A>R!sSO*&Xi:On!:s.EaC)ke]e:RlPkZL&ea\g=59-V$][)p[174%ITe`WY)"lcV%D
+%oaAUES]0aD-85r?=^L-W at ea%6*tSX)034?jJ]RI?9AYq%Jk1oL_ph7<%pYEn+u(K148:bnrp07p"(s]D=kh<6q.m-O!ak6Qr"?'9
+%>'-iEYE'*W/9=Ng5=RCCT+JN$@bf"M27>Mg#aRKGGVP-aW>Z9./bNl#G=\MT"dBpld`4"bqO)15gClue9Yf4)YEh/9MMm9)C(?dV
+%.gtG2/JWb_&+4b:\?>Os;Q\,86q&2%O=S-thHP=jD%RA39EXr=e30F</,o?+[CB-(,s<848k].QkUd#0k]K9r4k[iuOA0sU'[<iI
+%Ig0+)-)>)JS4iQ!!B0d2A^[ZG7*'D/@DST6*H)ZK0#=(Mjo/Hi#T#8WZp/,pS=CS_'OaFgFQbJ/Eh7kdR.Q$,D4Neo3;&3d=ob/u
+%ZT^f"?kjI-A,SS#[tCeXO?1Bbi;8?cYcfpP:q&)r20%f.L_/7p+`KJE at St>)Z*tOF[@m"oVI at o(&9/j(j;Cj!R2/l`#mEOKh!X`!
+%T_@=IRTbhPB!?`Z;>@9s)/9.+m>gq]]r!,XV2CoLc&X793FLr*q;qHuIT&%S!0hDJjifoLV,as`_1&'*?)AL]"OLB<b-+U5KBo'\
+%d46#t^m=g;%,u=Y;_$M at .sAk_XlI#=2Xo$J3%pZg#raAM4L,.b53J_%QoRZ+`'j,VQF`a2m16OWaG<hZbdN``]d[BBf'3CCUpnC4
+%8h%5,VttC$^Ydl]6NaX&c)[e6P+RTY3^4(aBcEAflGSAZba07+3-TKdXU*2NL$h>q(pOWZFQ^JS`e_6cKL@<;o(,5E[g[=>im%S_
+%-jB'gZ/aD!V=Bp\Ls`lokN,:4AkabJTnq*gE[7>3;>P`V<G4UrkB).R)cL'X>6DclAP_',YnMLZ76Mq45ssS'P/q![$.8AhWcb!T
+%s7+g4\kPYKlOD&b+5)Q=DC]=fbQ:<S at EA12nIKt#p%b)\>%qn(-Z$QWWoUc/$f^sebB1@%J2qf;O^O`CAa!?*!DN:$QM?']P#qG=
+%SRa8>P#'ige76P\lhi.E5SgQmqWo"\Zec03\]m2p,8f:2XDXV_Jr^r5Pi9g5XA]n_f1]ZN4lZKg:M[EZhZIld67TnrUG&W=EHNIH
+%<4R(=G.t'`9rCIB]?K:,;a;]%>pY$pOT.8p]J;EEPe?ZE4f4"MM'/HLTI$N#iIoI_e>b1UB]-3*O^tj2Cp[3)+NK]&<kr?qn>.<N
+%cT-2'fK[ujR6BX9=PUIfq]n>QcaNTI'LP/Q!G$ZGVNeBM.9_2 at 2RVn84tFMWI\H.Wb*CDb1\RPc+_fdPV-LU9$W6iE0RG,8_m1[M
+%A*4Gj*+UCG)li>WP0TQ\@iiMI(72?@/t9q&CX4^[Fn!d;9mKJ$Wp*7Tn8jcORRJJ/JuQ^q'691JBe1pi1Mkj8Q_]\=rm_DCiSHu@
+%J[4/-LJ0I>rY@*A%jN6sl/==ZfZTW?pH9A,Erk,Q7G],_<BJD8Pl]n">7s!uT'rQ6`X6P?gfIs:j9`T<o\=m1H%]7oj8oFKQCW\d
+%nN8oG*"7-C9WkhQF]bVKjUrK'hR^;#"X:/EPX69\Sm0,p$1k:STU(6HlR56L=T305?jdZWS!8/_1^a*_<!Nt4D&mejPOi[q5)K')
+%(KFdF=]t[JKBPYI>Cr?kl=B0"9r5_>6J@[&f*#,pZ?LU8M64hB"W)<]E[ilt-8S3%[#e54N6?<[>C;`G4-4u,ku6O%hG)<%eOg&.
+%ZO-9Z[6*!KMFtsc--%7g4(0O+YdNpF-B1ZXJf]j`$sYVf&d)$!la8!=$sM];_`ZIQ+a7I&M-Gdc4"=DTX%Z+`qYD*&52>U%L9!@P
+%LQ:7N`MZ;C=,O`h`^$-br#(l`O&>`AjQ,.=,*a0,Fajlg9AY'1_"T*d,bSLeb\_XMNkh'QG!2+'X$+!DV`L4U50QgIO2dTdMpQ%d
+%T1b&oRr<PRW2cfI#H=h1rs(f%.$N#al+h*Ol`WR4`1N#pkspb^S[0OsIT.WkR&]U`=oP7/\,K>qeWNU&WBiVg)&h""*M%s8)^>Q%
+%B(%\i7Ph#0TDNp*;J^ImrT3b)\tBO3d-%KH%=']/Tn&e:bG0n.A(b`p2g"PP1*7\LoI=4FSU'YdJN?(ipVRilpW(<^cWp$s;GuM.
+%(0XKp1K0[t+$+<kOo1Q/k`odofD*$@nMu+aY=!SO+@>Zk:M_CinQRQ`]K*=Ue4!.JFRo%IJ#++fH6j`tHU"U;&8q.K3OA0E:J&j;
+%?7F&&_>\ZJ+?k1HCKqHUl:X'smpbRTU02G"-Hc7"0[FPcdm2jp5=fZ4Lf^.l:4>RI9n$.;=9 at 5\d.(P*j&PQsn<hp#qiNkpg3<(Q
+%B)"Ut/%INOLa5Knp=*eg3e*Y?!TQSl`SC>&$G6GqJuou/\nN(h9oVY+]f+CN;DdS"Tp8I)\2?=H+hFLN&UUiQI-"U"EC&KZ$%MU?
+%T_c5_W*V%\k,%LRaKp&\/jPo4'J:?bm)6R"AP[fH26ZUJ6J9!'. at H`.n2!(*&j1uS\0I!ceijk&4&1BQL/2huE:4^hQ.Z&D,B`X1
+%S4fTq^hI#51<iD)]_sA,pdT"]Q4R_P=b?7/LkuJpWVmkj_hH6[J/jtebmYrF[S=!Mc\oND\7INX,rA^<nBIia.a9_N+FTMNosMK?
+%BCc\Lg*m7"AB:)IEaDP!$]7P[1OQN-Jj13XSB'\?043Y,"_?%!"D_mih2j]6Pr*e4CC_O`$J`A;FhL\Q,rYu44_j+Ijo^$Ag:6MN
+%]udm at 0q5RplY:^#le at Wc"*9'-:Q$(#7/`p`N<,,cRn+*,9o\3CUuC[1BOr1(CHc)_a=gnbM/j6!%L+3kd;1 at ZG,]Ed'B_.I5Cl4E
+%M9(>0UfF4ECT?\_gkbHjai"Ds-"S_\O'[1L2:VuodtHYl:JO;D:hq3j(c[jASYBa-bdg"8i9b*U9QQg['6$T<O+5k,$JF at HI*t."
+%DpuCr)ZDZ(^CjZ?K\1V>e6>^=45f3.f]gqZ'A9m_U@>RaUUDS at 2j,s)5E\F8-hf\&otXBn!Eju6Au/_rGk0$IhIE8XEeZ^Ti./L-
+%d?U%mNc%+)+CP2`5D*.6i<q'"@QQSe-bReJi[8)@qMm1*$sMM%"a*cS=*Npli_X6],[XI<F8/Ag7^Y9."#N%EJi4t^q6rKnB7E0p
+%rCC!3kBa$u7-Y1Kj:q"[:3l%N^W.6SJR]\C2tp6+b at Sc0Vshj8IMj7'#%?[QrSs:`,gd6pqOd[r5]"K*h\LY3fdrW")U4J(m7>:c
+%:;FN+EaR&;`p at HF-/1!V-48>-2r]pU5UR/tNa'T+4L"_=MNu6J=*+l8lK-'[W*)P!ML8=hg!eEeXU3YD+Mg?p#F-YVPuG,na_/8D
+%W"I?-4$"fV)7cU4MHQ3XchQQ?9O8#d%RT.O(VFsLefH7dS.l6SdkCN;r,^UeejSCODf`StHp?bC'Em:2e3K%Z+1VOZ,'Q>TpbXs/
+%f(PrbU\rgEV&EM>!P>1GPYI*8rg at C1_Xd[%Z.tiZan(!e+Js=6>aS`HHYWZU-EiV#cH847Z[F+h(n%i:-0PdH2l])6^bF"APd)[.
+%ZAXmGN@$J^N)Pc.4KXFs- at VkEV5S_LId&bsa<?gMn4\"P0VprG6[AY*aJ_qG]EV!k[lATFF=nM<kO at 2*cNY7B;;P+^EROWF)"[tk
+%:f(86;ru5.I%/PK/(s_:H+M,/\OYj-M_u;>cs6Wne$/*(]20F12KnhmP+lS1=-M!%!0Np"2bT^!*'D(31Zu?QF4-@`,9LS:aE`Rj
+%"N$GJP6AL]bd9m#feE(MoB0%*jUh87T=N3]"ll1H&M3*CbA<,u&5[sF\gmZIAiZf_6&r<\?S2D<<qT\a/[sc_O`(O`h-NY.Ia6YB
+%%VkY5odA$c3%0m`G['!a,iE.7L7QTd+V?DYYaS;PpO;>+7*7Ho]>K)5eTJ%\;r6T]KT5<+L3+p!CG(sf<.Mo0VO$!O*![f\dVn:o
+%GuBDmnJ7 at tk18\kjciH:;l1Em)9HgAK$=0I=\<"rgIRY!SDld&9!TND\1;fXO!:>d.U*`ADgo]V62/W!q!TJp7SQ/./5Q+AQfL8*
+%>!3/?*db;i>Z$P[bu#NRH#0J#f'>Z,bmm&]T&-hCio=kMb_W.,V>3iX^13%/@uC=35jBSBF]/%`.)OaumF3aZ;4>WqJRr+r61&&r
+%5Q/\/G0dSKf/Y3j>X+I)^k'sXJ*p%al*T5E\bk23A=Wle,'QYp92NePmn5M[gY2VT0I=L,d.A2AB.#^HF5"Ri20kMs6(j+2hkgI!
+%Bc%0XXf:Q+A:\2WZg#a,I$S\l(Fq_8r/_mG_VqlVY*6uR`f'+kC,=Aq.d7)EOe3__4uja1W/II;UpKpG=N2E,o@\m["82i=Ag`Pl
+%$\Il&/<pT6cJ$&m:geU.k>+5<6%eHCm;bF6q@="CI%),%j-PAUR3D]`jZn+^n\R#^,`O.3[cEVL_.1UAG]@7c>bDtq at q+_5D(7W6
+%9sZ-7aML1b%k3<c at s>fCPIG[R(a,17=A?&ghY.0?'I[LV;TIsVNIsHi0=EU'2U,n0M2_*=n"^2+cRP"ReRV<<[=Nt-Qg]hNFeaHM
+%"=>(Ujq(V?G?Kb&"f^^=YLd3QA%ug_&L[/4:$m%+;SGsV7\=''^Agd,SdZ5D>OsaS1\;sPKKJNiX(uQne#nCBr]0Yq8TX'Pj]XTb
+%cYHAF?5R'-Q?ri at iVdMt^J%E=6aXL?V at 6YP:ROs:AL584r)0DH'FB_F/s,C"jOWeDa/W?>NX2YnC_a1l(/+B5s8L!b7!CKP]2DiZ
+%1A,4i-(blC7erle]WDfji`8'`X5Vl3'128/nl%Pto?EsWFlYqsf`-<$TR-*4bDj4+jut(Y&6;A"F<]7sg`<gSF3/%iW[cao11N+K
+%/HoF$caI(sl;k at +U6<HX*;XF-*$BQ#W!HKM0qcuY1a`WUFD<%.\DGpoV[Xm43,_80LT)tM&<D-O9Cc'FE:TM9GRrrC[c>qf-_3I[
+%PtAD5kBPl]s3.;hBMAU[:CC.grsm[<VoF=&+U"4.&rcRH&0lq%)b?@rq<Y`BJ=oES)J)`(kkQElVt7RAQC9(Q[9act8QqVY1lp1i
+%BlcQJBeb98?>I_JASU\LZQ at J?>7/Zjq7%(oG2MmX410lU_2ul8ji2SZ8/s)751V\NfQnfr#8+%-lD'lo>co0,V;#04&Tu_Y.:+8l
+%/.UaAJ^u4Kad"0m5ta%c.1cC4`0"bsoBD:sQR?>+ce$le2ssJe[;I7G>EPq,7dFWbI?KOfSp"R]>H5&K+*oc9Z153"]W8WK1b)Ll
+%EU[^%lQji#E(<%,dL-(7k_3qgA[Xt(%r3p2LbsVh1 at QUJNf/#BgLl0<VCf8a#`uCLca>uX8HTQ]]HsMj(ppjPO)(;N&f;QI6:oao
+%>5hS%mtF]+!8XX-STe^.`"P7el]P^%pcb\&:YLCIDu,,L-F&XbT%=dg:1 at n-)ENU5L;f3&qDLbN;r*>DB>\0cmNL,EHTN%r&A+,g
+%G713gA+nuG19LRkaY=0R-YpM!YNB!?-0GALrKX>^fuqql-2eJ/A+,Mthe*A>i08aqN`9CjdeRd8:U[ZN7<jZJC^?1i7#>pj#5KeS
+%mo2DV.\Clu=gPm9TJ:cNjdkJ(GE1-V^,$5+S`8/E`bih!]3#7*ZV!(=f!RlU\bJUsTAF#uah1*$d2m':>_m6[r![^pMU*XdOGJ8+
+%DBa.ZqMu-,65BMY]I#Z<f^,?BZYIaFhntnDpXbc:BPbraWe^d?P*<=l6'l3qSGGk3l+uNc:QnimI1'X/RU0rX2sJN)cfM)?`F]K=
+%#tWs05Gq3$R0sL>.;Mi.n>MTC!\ZWXHu]nm+l8HC9?n^X"#bpoqp:UPUli5=M[=GOSd3&MSn,6o34l?5Pj:.2#Ys81P(\K+!b&&G
+%;II_0R;,(?pV=N;q9p9WrHtqH[$7ne(Ani2:1*kZkd?tN`V!K8O'2BO?BI.E\Sfn"=)H7U20,PC>kkC)>Y$XJ!ciD<SmA6.\')3+
+%D?grcB("/*rj.7aN2GI@:I^@%h1`XQWj0jCj@!u\,WfgcgJD at QZ*9?R,oJIi[8H2cc9irmM7X6*R"@/<^O>P[E6Spm=JhGa6^V=\
+%EnTbIL>ZeFcj"LVEpN=<&%$5S/1LHqVPE7t>@tD-r]M%Oan%1S21YsQGR_GZkX.J0QY+-Mq-tH+I8qn2-]^$\Y3,F0M(_.K5ng)l
+%3+4m0A^.<gTegLC7*.7P8N#ZRD@,Xri)?AUSdJ'f`06\O9Rn!6W[f6jO9#gAVl=;.Xn[JpCKKro>(8"2;E2b;JQU5f?9:.q1"NZ*
+%pZZ#AqMQ:AeSA at 9Sofd,S?hBkPZ(p,F-Xd`i`%,5.(FXEg2`'0XYnitM>>!!M7g\JS[j8;dnd..*#P`aY`jo7:.?=YD"ahlA#DCc
+%@oL^L<htJ!]u^6hD?$oE\FX+&OHsN\ErTlc?&!9/bd_lR+ at 0;q(gLt@\mdmQc^@Q5n)VImHNl>4L'=73pMJ'/r9G=[m\Z#RUr!Ok
+%8D#28%4!Uh at I)(H7YF%CSn5FTEYhaD?5ka&67iLf_B=JmbnrYKruBkM`j\R'`4;.e./=L61DQ#o#Q7BJ?.[ORU1-db=6n$uF!dgF
+%.li</^c=tX\>e3a.B!mn_Q]$ZX<r8Ar5B(,d-'$BB>l#196D.hBhe?sE^,eVFe^r(.1[,HWG"jEJubC'fNf9+1cuQ0]UXP255A+[
+%K84cm9c#rY4"-n#g[eAL&4uBMdH7%NkH8V_5<d>nIO>.$TH;\\XIVReiBR::`gk1XQUSbQV1)06DW\[WRL7NLX?5sZ8mgjW#s_@#
+%4f2IZ at W5.@$LUk$q)t>SWktTK5J"1Mo6.A<Ss5HQfM?N7DO]g"B7H>=`WRmH+pF,=4U8klou7&bS[dTV-S?d1W*H)@oe at f;.qZZ<
+%Zb2A6kcD_q>>MN9-NKg- at I()?L&qQM)m2:,esEULT]^E1dFXicUEGEkfuMAg8#g*UjdaMkA8'jc3PHglfBLtd`:03l3I<Yq.,6Bp
+%mebb]Dor$\[gu9OKg7g`hVK^Rm1tcsj1^<'h3.M&%!Ao^06kg:DM8nL6&'c#qIpK7-)m2.;k@/a`a+`Xaf_(ahK1Y9[So8)PJ&eG
+%Qt0!.H3&R9\\Q^G)crp_g4\G'p$$g831;@Z)S!Prn%,;U2!$"jFQITJDDCVU#SeYh.UP1J at D<Hd8amM/l%')TkTQha)*Q$HC<pj%
+%9<R3$Jfc\kD=<^k1h'H4BAe"Fb11ju7t,q'\c7mPK%AX7LIt.;WOJ0=+Yk%<?'M-9=h]bX/$ZGl84o,u`#qX:J%\XX`1Cqtk87h.
+%<Z:Qq3#fo]A%F/Oi]Ob8KlVT>&F,QV2_",A;/Q&:9V(MVPOlmh+Fasp at UnQ_)J-;]"50pA:<A-2L'noYSf;VrA6H;IeDiEq=\tQA
+%;\'aa%2AXu_hsMsN,>(i?o$n2`K`iFm4L5ci0"U.ZD8C+](dUqZB%14ORK'?Tf\^3p_^_onpSA)T<8/-][C#&.tn*`Xj2Wc"U6\U
+%bPWG[J&!TIAbI-X!!ugNYMYkm/Q_:;8T6""o5WpMg3O&DaLV0&jV4,t`,6b#4BMY_^-M[%*:([`'T!I#a&uHTat,]T!2S<of7"7u
+%Ra_&%>K4Yip:`ES*XrhIWolD8RlD\4fV#i%ftqoE<&unK!J\".DPX3'^RN#Oi68N1!i=eEmtLJb:BHq>f:F)+fNXoQ,F?+)#eIFL
+%]KLR^O*1B"7>g9S"I#MWRr$:RohIKI\[7"Z5e_\RD"%k3K0-`kPnc2EWJ_VoS34#f&e)dQ#EI+9.LaJGqOluXa at 2ntT8b<u,&kZ+
+%QYn3f[I%7:KePDVQ!.uiA$VfKU=A:]Y"47[>038Ma8l=@'3I7J[#1uLIUs#b5!J/G+e/"O?peL!\0iRr2k7PTUN=%6b"@m,`5YP_
+%NKdO7!>Z*e2qYYpSF;Nk/3'fWT>5YRZjOmJF4.7fU76sOb-37=*5-YmG1bZg`HE/VUc8]>9$YU]+oPbe?h>j#`TC<nG3r4h4KMJY
+%r+YY?5(Cn\W at qni3Cc,+g'kD7niEqdTiu at b@s9D`+C;/52]$6kPCuh7gTp'eJ9_u:J@@ChNFPPqCeYqgq-tcD]OpIAH*UdRJaQ2!
+%9O9?lnF+t\1QI]Ra>umVkE_k"QL/t#LN-shA`&3jo<Z4tK,t[4L=:IW-+?_b`(Q[A?]L[?J8E;ZVQ[L]q+=]ET/MVJdfr+\Mf7]Y
+%o9$HKQ?Fq"'=:u?\0go[VgmT/hT.S2a*#g8ht+7='#1EbW>XM,fHkMmq;e2a?RONQga`sLj>o.Ao!L?7"^UZ(Mhjaob=B\]g^C70
+%S1iW>B*pZS-Yc':-KB+.q?&3q'%r\'kZ32WT3+RaXsScgCh.&2gh4X"UARUfpnC/GD)<&CE:(e,c`=HoPOPi\7,q239Q3[6kb68F
+%GD1$S92J/c9CfmYs6eLVZIX;sW7-">S$RORbtZTMgPt%s1>#RT:\FE>@\M]/1]nsOi=rtVhr*g"XkFAT0HMh7:A=Glpj'D:^4\33
+%CsU7_3>m$*&m8MA!0pfh+S3>XHaSiPodPa8;EVcMQ_NXq,q:Z2$TQA at hB>tKdg;ii'oJ!"U-7!'I4XiF0'iHi+o,#p"l#Zk1Oikd
+%8aQgLTCfcPTr*V8U??p4;]a^T[dL(=_9rW0WH+m<j(g3k]6qp:m\du:K^jDT!!TMeNH%(\fhDSuDo'eYJmAB1N`e.#rgbq#Z`%&h
+%02?$ff-tX&N;K.cEMQ-)b--APPPts.XcqD-]>$+f)dDgL;u:BIEI:Hj7pIKui)/jS;^EkoS>Qd9=XPP/D<&k_ekTLBp8-!i"58pB
+%o.fg\B^MN<p\QERraHDo!B&VlIVZ]N'lAKHAN=D<^)oNM7?uf_3`RUAG1f:G&*/CHf1X]of\?Ytcsn=oIG+).J&j_)<)0C0oh&)&
+%ZWT/CV:I^FbN1A\U8=IB0mucu`bg at ff/Y4H,ku-P96clt[SCC/_G3mi`oCXJ[u_$XG]d3%>Cj9P>jPTl)TnaVM+2lLcZu"hALIqM
+%0Aj4YaK#u1C-fk?mDs@\H1J*#De#/@VK;HH/X>[NIQArYSmJst`7Hh-ESrDrp-[3fZaWSONd01I:AJi$?H)L$3T!D<k<XS\peAdZ
+%2;^-ikE<-6grK^H!j27!gPPaZnqSYQmYo01BV$Y,>$FXVUq#p3F&#Jgd28I3Dj<BJT1*?i2`645qJ#=8]L;oVTfP]/b":T8R0F$S
+%bt at Yc*8-C_'5`Ye@[u_+gT6oG)oL%=QZp<A['15OLuprdni[G_kc$W/jDV#1Msd[?QSfnA/6o4$K?g($F.VR]I'I[hM-m_[Q-M,E
+%+L-,B`^I6a#rneIYr["CWWZK at emZ<uqXk/:5:0n0,YY`/,,E^a/]"]jki#`b-df6,\con48I$RH=;P3?bg;R5F+akafADMLUWL81
+%-9MqQO,\i1OV#E%^s(OrLA[DPgdb`q4[dur[-s23N0;lg_2t2G:n[)>ZP%](pc"7to"]G(fEj'._$')#:T`>M:NNr:A-IE%e3>lQ
+%nk!>NdOL;LmM)UI at S)Xt;eONl?P;GL#Yt%^M$V`Wm@*@.gksJJ/3IikKD&N%X[/JnL!ji]h"$pi=LdgBaW'.JUa=)K)-Q[0ZCNJ5
+%U/iu"YopKOe1P;>h]uLtPrb%";L_l2"Q3uF21+EpDfEci`/u$>&0?tR7&(\AC)^2K%mg_jc;$';8ij)@5';Sa_2%qCYq's"P at GDG
+%q)j;b91qqo,*Th1S[,ZU/YLN3>2>9Fh.3%OJB#qn;/P9*1lt:#U#"gs\%C`ekCs.H/`Pg3(X?/-Y.M3K$$Jo,M)6HDdZFK$AG_P9
+%=A*/,kO[W=;X#F76c$YQqr%43T_'Bo3_*g<:Ym#AVC/(uD!uOA>Cfa_=0hVoOW+N2;ck at I1s5F+aLs,;$ieh at mjO[=!P8#"/kgRR
+%F at a/<H,*W0+Yh4U-FnZ!dDhFVKq',o*phaIIIMH0o[@lUZ"XiM8oUA]])8naV^kU^C=%%&-2Bl+EW(h>Co$.]mE$%I$TVd.*u=AZ
+%\d4&86$RfL[8>*Y;GD>8\/*f<\lGXX4kM[oK0.\ECYkH`ndDi2B=2ri7^cE7^L$$pNbTd[jMLR(oB]A-!+uBWs#&`s+N],;]Z/G-
+%&e5m>"+&NVA[?)9DcV7;_iN\i at fRfjT.4Ku2,)@la:;[)^R8:&N\Pi/CNArt&ScpZQ^>^hHeM(N]9.[+SS,#!A/3lJUnAK*MV%\c
+%3q9<ujk5tclFpR0cq_B.:D\kr]E<L>`S/@b^Sg_ea8"A3%Y-(99c[L;%UI=_m*5`TVC'IiAh?:BCRIi5=t%KJ_;Q=rNJINJ2?/nW
+%ei;C^,GA*pWcGR+]pLKOV9XuGY.Lo>4VIbVC2+enIb.<@EptHudG@(1Ii.u3A]3*kGE/M&dFi3.2>l]:F$2Ht9BCVF%i%f?rY\'V
+%h;M/dZYY2[R(on1>>D91Ch_rI%TX+V<,=+<:H"*//05G2"$H.Z3kbHX.jGkV"AC7ZRo4sRlJ(%1GQMM=,P,;MHdC1\:kRq%j]-E(
+%YY.IiaVU_1>(XN(mcb=.hlK!(9b/Jhi1cI\4<@4_I"H;+o9^l7SJ]Xh-k$RG+kH%0(RBlVFmnT0Vbj\HObdW(0nE7t](LiB!5mY$
+%4c$j\EXVd!l!R&Rq+u#d;TnN+8\JoB=X)?:bfpa-j]d(Y(u-LCb44ap7,mX&#alDXq0n9,3/D`kY-1cgBW!j.:mkN$,f4hK.99Vj
+%ILT,YLAG=s+pCL)M[h8HdCBGQ%]S"(\p6o27 at r)4G@]B4B=!s7%A5b-b#6O\DCb+q6uU at c$,X>YV`U=,pmTf]\cMc?W.E6h"N(*$
+%.IFM2;@4^Gc(g`WT-0o`p)oUchj45IrfY]II$LZG-HWR?)S^dOOXe(3d`*4C^\ag.C+T39[cuFu-Ys#EOf=p>hWqKaHBNqNMs7b"
+%8ZRi=Mo(MhSE>7J^kQF[DB"b$rB)p/:?sO8*(,sf4e6PSLK.lF'.Z$W[f00TaJMgii/-TLeg;g,$*=ISBM4t?mU#J]bn(h#q5Q<n
+%,+FJN(Z_-bSG_<tlA4bWDOWZ`00uJ'/6Lgo!1G:/EcG/.AX6^Ar&NkJHO=$/4pgmA%G'$lW:OQ$BBjDPe(NSJ[$\1VDGMl-50:P8
+%HUus'Vqa_tdhLP)f9<QiEJu0DLP'QTHGTWde[YZ;`q&\Ibr'`j%Hkou6"_93EJ>DV)TuAM:Wgo)h:lmqa):L at ej2p]2UgT9_ZYPP
+%"8rk=pq1V3]I5bq?OGX0?)M?BP51:OSQi^J\k\`dXP;ka7q7?u%UHJ1TM=HdOCZ6Lr/(Jt;$*C8PG6X"Q6gE5[H+C'a+Q?dhBo-a
+%MB^6dYP60e=G<qE5TlCIBt[V`5Oh3Hb+i]i/Kj1"/8]X5`J/ZOi=VmLk+2K3)'<FZgtQA'S;;PZ/^M at 3Y%ZqqR52&JI5uBr]]HA)
+%Lp]<al>\A)ah3R-jBfkk_,h.n2tVOL>kc82DV3NVh^Kd&#oH+m]!T$FqNZ%Z39.A1r1"H=/T?ZJ5^t2Chh at I];V=>$[YT"k0><&C
+%7qspuJqgfNSto-0m>S&_4#.4 at Ei+!P2 at be5p(.9'WL7a.-X9K?ab-(r#aH+,;NLhJb*&5e5&8$Xo'gLiVO"MFd#!a%!_f?]NoIMl
+%f!_*eNAk#ri60_R/^)l!k0=r!:!Kj?iGW5JDKe0?Nof<3WhuUc*q_[N/HP_eq4D_hXtWUBWMq%0`['e1GUHM\STl#KYqs>*Wkl<J
+%,jm7<=O$LkF*Ht79G%ah0.5XP<??FkEg]lXls^UElP*lH3!IDe^X]=bE>SmR%kW?-&1JLq2Q/Ra-)>/rAu1QPU at m9Y7TOs[U#EqU
+%PB'*P"!O(__m1(FEqJBNhC"P!OpE$#>i9Rof1,Bl(!C^>HXU$O-(9`Oc8er$D?qM=oGpZS-JueHpO%(j=!$)m!0f'Tgja\%e(ZE.
+%qR*rfo_(g[S%n.!nE]Ml'Ac+jRTV)\No/K*qZ^sBRjOO-Z)!E*DbbF:)[`-+'^6CeU'C:U8U*uW!@4tdLU&0[CgAQ2[r5!P8VRT]
+%c3rL?Ll/-43D8F/SLdg]e at I[.2eQs=YN7M4\.`Grlp]5De7r"VQsPjB>d%l5X&(W_c++-t"=[Z?_Q!</BCAXq"*%(gaHKfTalogr
+%oEY1#4NsD"P_ha3?bbLjg7ap=Ei#S7]K"Uc\`nRt>c,j/@-(U<V^4XVB#pT'+A#bZY=Oq>\%NJ*V*S3o$!++_Ja=Wf:`L/F[p/09
+%,rg3X;\pRKOZ,f<HNmi.f#LchkKmj,+ARG5Y%L0_hn*dI9a3[I.i'U0O=ro at m:PmN"80+mT#ju&2%@<m1LD?fB?C?@.LCn='1&I_
+%<qZ4b$?=o&fY$mlD:*7]m5jrYqifaT-BdKQ9Nq1%j6n3RQACn(Wi#PQZuXf>"Q>pYRZ)4^D$_F%hj]!7P[qo-ia2LUd7"C$3E)O?
+%YT>g'B)oc3(%cB(+.Sg at dT;DKK[&VCPq*BppW[cAF7n]Zm&=Ed%*HO!E$F`"p:9-CXB`KHP61^t0JmE`SG7q)p[[?Ze,@#aQlNn,
+%OOQ6KJWod3`)hVR7P$^kGk9E<gDl%R3FU#gJZX4SXE%2T-[ZuBU/F,8RuVlLe$ScUNi&W at Rg"&t)'Vd61.e2upP%41k-:4C]hF;:
+%CG8p%/7t'BBZT!7YL<$:>DU[r?VME@>)I]g.72/3`2nRMj=3&`]'f1!2g7gd$!TDQ!R<%LpFh(]3L*Z6dnZ]?Q+uoR7Wq?I-i94i
+%5u%o;Z/.IR8iH'ua&[-*W%%`2esrO_'?F83h74LIBjA6d\o at J&2AOft\JT!t$S[k_aFufZ0@;Vk%NSD&kF>3EfDD0XS(rtg]GRc3
+%$TC/F(DC8N at -j]1DG!O-eR;$cm;*06.K=s>RZsP?jp+`H%qNj0g4!86\O-5VmL>DE=6J<#S)h._U0^bS*]]ncK2XFHE``LNI2a%/
+%@VkKQpl]JO">;?'2Xl^aj6ITd%M]GF'Q[QTXj',Mr%4&%R/*C-T)[kZ?<RV-+S)a-4Li-R\E/AtN\^%je?em;rZtu>$b[i^hT7If
+%#,aa)$f7IfR1u9#Q3-9TOh at T0ZS^$bR3tM<>E8 at E*`S*iBQf#"2J*7h#\!XW)>u*E#8XpHF24B;7%6&8mP%mE@$0Ul;]YqT,08f=
+%0ul,<2<e,#J3*4bdeX^ZoAiZiMKr=7Qt/7mLG%0Q;KX>c>,Y)^&8]XT0fPW7HB,`"FS$HZ2G7Wra:fGD"*0^t0$,:bkq(o_L6![>
+%XUO,d%oh;hQi;/HY'm$h]7*[cY9CA2P?;mHOR:cE/IQQ-Y*,ksXR\UXS$mb163Vledop2;BGlnO[Y..\&f.JM<:=Hc%Q(;"M4&%&
+%T!RTDRHpca0j_:XL-&+iS>>D*B$@uN+2St6N5fmu7agBmc>D`+[dt4XJ:r7Q%d*?d*[fL8m)B1B2F?\1E\SeU.cVP3Q at O+q`!NL^
+%pLleG;^QBn@,3qnDKb3F(,hpEhR6jHlH@:O(\7gaVhree&$M,7JQ5g:VKPj=Pi%[cH)gW9?$ROG;/Ooi`6J8%qb7JaL8RDVVR)AU
+%1 at .+/=RKZ3 at 5ihb1)k0iKj/TD8-,2AfrO&/K*$lG,'fsa;T^fp%U.lT1dsf,MM!,8hEmjIa9:6BM*G&p7=2%dIf30 at jjR"BcG5%e
+%^j=6oTKrDc3sn$o!FaiIO=Uuh.k+_%nQK3hk$%0UK.1^u%'5U"@E%/g=![Dt$_)`jl@]*'$Kdo2:EWHHOkY/X(/C!XX+pjA-RcS-
+%_.*eC_^,ob4ZTk%cmMMI"i!&&^?:u8c+#FGf^sa<(Oj`Qnfs<Xo"?r.VAT7RP#U;\?6"Ps]7WB>c at g;aCO#_"e<NLlWA6/#N0sl(
+%V'?#"4LB<p8B>Kmg>o0/HEgnlBEGn?5ZD`OIJ33>YgGB]X;u?DR[=^E9S4T-L2ukUVS9Zudo\`..861]cHBU#nPSNaCcUo0EO*b,
+%U6U0#kG+k/Juk*L+'@U.]"RG$<JheW/mS>F.[/qlROAf$^e]hN^LLctCJ4RG.r-*n6L/6YHUoOPqIjeP[Lr9kfnUH97D02&WPr_(
+%H6p3i?&VgQ5/i\'FV)[SQ$B4rYD at sXP&^%;Ppq=s\uKt^8c#,KDCI/h3(MgJ'AoX$$BK2k"(1a/mJ6:cGo34[=AtHZ?C+k0U]c13
+%Q)@\0!'M(7[$5X/fBMRD+Sfpt4k`V[BDe@^J;$HrJlE'q at L3Q0XtsG\[U?uLVBf7JarS$=WU0?oh&D!7k>7%WF?[VIc>?""%P)27
+%9?_#AVNjE`p9L0)Nl&3ALn,H,9?MM)2DruQiF6d+jDF#"PK1f\d%;=^T;`;dLQ?3WNeOn*Mp67iXnm1e0B(*C?UFFJ>.]J21Rk3*
+%Q3sS*9GfZoE/D=o$!XoTVck4pk'`*6)nGJj+/p>r^OIc?8W=!,itN,q8!CF&?K\`)P,mT(g!&];9)d54 at V.i"\,Dol"paa[)G#?d
+%g?$u(%J?5a`=0ABp7 at BW:8fV^[b/\s=cr'V:V'qVEKW8Ip*cau*W4^GF_f03(kn%_&?RIT4LIrWS,D^Urd-9F@[SA]2h:1?N<t'B
+%?k%.k8,Rm;N(.h!l)CI&'fT&HITGu!"`;sqY at H"GIfZ_L_0dro[3e2nAOtNM]lp.9;W!cQ&o*OnP9;M?/8aL:MANAsRuECa]^Q0j
+%1_Ii3;f<!I/FR].e>e#B2#"0kOa2KLbu^>*j'4GCAb.$;Z8DO(,C^plijN3tiLLUr-D57If#,UYn&bGfI`R2$]]aA(od2#P;BZm"
+%f5j-Q;No\r8P*:L at 84_gXu?NWL)!i)ZH'i93<bmm)M at OB"r]O7d154f:&MsG;"2IAQ-J:%&l'O>WrCL]b3^]=Q&Vm.ZCnFtP0_gL
+%S(0Stp-LUpA8Yf9[fu_Di8b0 at NdN8ti>&5gAu%ogTNmSi:"#3OG`g[a5]sd*V#7$\OdUo^@%lH)Wuj]cUj3pQO#;FjHA57-GTp_>
+%c>P1XbL2#%:k>N'>6LkCK2sjT;lDk2bG7*@_c1QuL5/OdWH&I=>k.r:ZN=MIX-d65NMU5jc3[/_\LDE4F'%[r_K<0%+%DRjXLu'?
+%#MJtU_:1X0)Jt;HgZlbEZMnU>M-I7qC&jLeR:Mc,99f7==)a<^'e>Om3F`j$*]CJcm0JQGh"WFdfZ>_ at 96NCde:E`2KBqrF,tV!f
+%R;$O`$+3g>2=J3rCBXELab:f<;3"C_PD%BRR)uXE^(&ZIER?0tLsAc5]Y)G,L<sRAOC$+CGYE^S@<&p'per,3Wb"IG>E3C>-/KC<
+%DTBp64hj&h-ah6E3Q1'0/I6PL.EL`P%W,`\k)!cN"6^[f!<p#:B-8>97]Q>a(\QmqG323VVA=J3V!C^f[YnV'coV1"gB6VWqE?=6
+%\Hc&Cr#,n64*Thd>.WcF,W61ik2Tn07os\f2$aO2[G$1!?^./I-o at 0=6IWr+<HV.[`1sEB95BZ\F%AEKDocs+0&Dbp5F%Q''TM\,
+%C>FfZ\iK\,;A'Kma<_#\a1 at D1a]:FAk0*6+47XRt/h(3iPkm63n(O]"=`1lDdQjcN2DG#Km((@C-f1ojMYpr6p-!ZF.XL[9),2Jr
+%V8aZ0o?c at HC9>tG8!B;f_Qn^_m/\.>X_JL(8.`0FUH&G^rAfo\opX1rh$kNh=b6eZ\h9GTr/h at V&Pd#r9slB_q/lY1PiX-QP6oT#
+%\`Y.J3PurnEsdWaa.Tak.Eka1-fp2G,2(l;.`%!B;a\F&`3'4A*kU6dIcb6B\NRt[ZmuXO:7#qbH*bRc(>$!,4F:C-cN at Tes-3_!
+%LDP_`7Ahg8/g#eYi!>o+ahWaA#;8Zl"Z($&?]!da1orcb#JVj[/m.G=p@@!W*!=bBdcO>TU['1=VZg5Om^G)ol7>eN@>)EU'k%<M
+%fWWTTD;3\Y3`gO*gm.];AJc2u\ZN\J8M]Q=!b`(17GH4WLZZ`#3p%kdhL"Z%l<mhI9!UU4c\OU,EW!Z3Z;U`ui+B6bVlP=HQ,WYP
+%;7S'CYAI0cJh`$5bBpL2<lI$tab]cP<uYB\0UXFDBt7-f8@%XW19J8O at p;uq(;nfejkd9O8gt<FIsh1/Q9<k+PD!Jq?n0nDa\iaW
+%<_+)NjR-2.,//,68oJMTSnm`'HZQVnq1ZO%nnVH5dWPuS]T\!u</"ii at b5n,>CG\ULL.kQLju;WdGeO(d*,sOXV4F/%:8Mh[%'bh
+%Vb(op at IkS`/K60C5bCrfUoaH$AhJhWr1NuW"4l^RQg^G"qf)'!W<eKL\La?(,2qo6#A%\0`-':+>FeE)h=hQBTi+OH.Skir.B.1B
+%Gd3b4g]SR?*iqi0W"Z_rM(a?hg]]7Qc/97_F*&I[O)l%BeSc)T'+"+%%QsjY$^R4IDPVZ,'5n5UWTX(u8d2M![#G1l6f3E?EKe]b
+%>ii)V`WmIUn,/<C=h=_A.pG8)]Lq['jL!RF-*^*_"77Q-N/H59.c0X9;+9cnn,7(XPEo_UZX4+CRYgX#%DMG.0,fSCXg)`^Q,rtB
+%*0&*"oT\2](peT\DB/t"f`"V)Ze!ShRGjjoQn"-c49bLiAHn8Fs$@\.T<!n]*,F.[,ROYVMeq`BU]>+Vk:PS[@c-"5h_hN0(6_cu
+%#,H[I9EDUBGgEhQ10gp*?h=b2W^@8:p9MmQo8K%nl\OXmNYJRu$-K;AM.K76d\nM>i-8T%bJuQl"G?+55#1\cWiL;T.,K$o5t(-G
+%cnJ3WEHYZR<$h)b7>?Yqo*DH/E^+;O_Gr3X6d8B"_tgW4=o!iX-hp)Y5m$qH$dS>)(??)J5AoT=%X,.!C8mkh>U%H8KcZ"<:o;J2
+%5PEt$8T#e8o6_')rXXD(fWJAXM>LjX2J-s"l$ZCOUt1K=pRr#s+KB*aOZb7][/JnNpH.dQ3"UmV-At$UPqp$T,a0)O"T8&*Icicm
+%Po+,`.7.TZEaQr%*j'R[dA)nT,40H:ilE6b\M8q#/bN$LG"?M1Z3QdsW-fbZl],,^poucKn-2?(R^jlsOHLJ"=LrTJknu.I;,U)N
+%jq8X;`0D#SM%Dr4;!l_S#)sc^4QTl6i]08u7TtSmb6gk7%e^<:'nXZPp0Y:WUQ"'tf^FBBO2cUt-6T,l`(?Oj_MG>qf,XL"5Xu4h
+%c+*oo:jO%#G\)![RAH[*7fMV'/QKJ*KVP8OUT[Iu2tBTHg]OWAe7 at dS!Bb(&$odL$XlNjTm$hIbBQ'.#LK=P](9s at A+Ga]UN/G5<
+%cSE_JQecKqV%'KkFg-b7b[_'1NhX<>FSN-GE]\DcFeB>97VCbI2`j0M)t(TP`DLADn_uD2d7cN(>l01`qMiU20M`DiUZpiYoh!J/
+%bc?CaJ!'Y-?HHoZ+JY5p2<#IrV9geA\\]@V:M*:t*AW3b>0Ttq;FJ_;[CG?s[ua/Hj,QeS9;S>(nd)FG#tk at Fq%[)sT!;-R;rk])
+%"e$A_ at RA[==6b5OSda'=g-A?/bJ4Dm`M9ltd[,BWUINRR>$Q8G.1oIr6Vb#2l*OjV&q*FdDKK"0OZ#RB_k8M'Zmk#,f[U*cV+'RY
+%Mju2X&eeDYh5C`af)tEC$7Mqg8BD4s3"dnlCijf3d3-ooaL`7o55JE>&2J`u'3Or;DZC#_AQ1mB:(0C9?Rh8R@/2\fa8qPnPV-lB
+%LV(Eo at Z%MiF#cpiR`RJ9aE>+'hJ(NNk'C'F[CbO%g=YW8,"pJ'/.?WfHk=r,%eM]1?AK/19FC0'l4h?8WE;U>>u&bBaIf_Hk[Fb5
+%p3ft/S=75Zh=0?9J<r2>[p6X*OEDV4JmDM?kr>WUo[k9g\O(f)lDN7-JldXU>YZ6-T"4L"Fc?$5L+/j2+G7`dF5F>Zb11NI):B]D
+%<`j,NisBaN`W0jJ;b8OH/&na[YIdb(\S1I;iP$q(GZK$M0iW8!ae84!a-8%Y6HWtOq5ehenjV6r&k9RK)t`81Bf(@s.9qMFZO*@6
+%k^1=<f)rNu=^XBLY_CdRC$hToTTCHG[D-GnR7>j['!Eb]p,k1bCh#s[TVT1;hmKAbOu&B-AGQA at rlCkiJ<oF`NF?'_"u\4M;YSm1
+%-n,luOVVXKI,4OU*8'@N\?Hrr2Bme4Tho1G1uI+sCpO*N/2/k57X3nmrE6:Yd3<-*<Fe]d"?"(br^0\<XjIAR,[2[e at p26R0@7eV
+%)Hof!69#C#1+Cp4CTgVQnm\a_KjC+Dn3,oU^?-,8W:W`.8-8H_4fXS+.?2M-02g<jMFl7Jo(B0gph+jU0EngK$Rpic01O)fng8K=
+%ck[!M9!3p.I2J7TB#@0YNOkMtp3:UNaTuOXm$4q.'4Z at 0[;KY-l$Afe.B_c/BeTdkZ'g'jk"3'"C_k!d8<)Uca[pcLoN>E68a7-b
+%b>Lgf-Q:!;d]:<N*XZoiB0dkpBL/7`g:3GCkb,)?3N,E%UJZ5iMi]tUrLD5+;u[qJK,BtE^iTS!:s^^t at 276GeMH,+e4_nK/D3=o
+%6hDdDS)<:>ctoC`7j^]&K_uXc=JiCI?cMc;[*=J!(#mS%="5Dsi$.Q8L)e9%Pe5]5oEiADHUGY33pHqXdH-gZDXJ[76E_g8<BPG7
+%KW6RRW8o;k'gsMY9'+G<8](O1DpW-78#&_ld7IFpS@[/jlO9F;d9JP-egOPakYrk1C-Zl%6Iuo4rNXF0,A"6^'atoFjo;,<L-5)R
+%a!%Er.:>sW62ns'd?/(W1 at W`r..XrW6kZk;<od[g6HASn_UtmS7"Kn'R,eb.kF/!9OcF]9X/jWn1\"a:_PhZe[RcQK2q[:"<2VEG
+%d#C>'&7..^m9H'gB%4PP`=2:^(nR60ffec'A="'O8;p(&9kd at 6C-,ACdXfh-#_u#APBjm"S/@MBNR5QAg[7Oc-'$oT/#1T^O<?3L
+%Prtru%CW$qaB-:l&82huVVoth9]pNsa_ORKOI]:S at l$1(V`k,[%156AD+%P_g'q#%,PQkZl8NK#/Zj/IJXVPPB#pR'YG272FB9^%
+%&I&Y(9SoRY1ht58T+32.)^\?pQ(ji2TQQZ"?:\G4no\k=5:rn/)Ms;,`jZ[:A;q>V=m!]kLoX,c<eXa5e4Itc%m;>r'^!Qo.OG@]
+%V]@0l?#+[1,^?dKEDKrJdoV?(,Z%VGMm'Jp%FPQYf,/t+CrYFG0^Yg+U`F2q5JZ/\MFKXQ=$8=KmIGghV?[Ui;p4AOc4.IS$:2"a
+%)KES%&gL;*"%LTLHV"euPq%o>d)?l>h[Tt\B558UY"DJgc-X8?ZZjC2OLNq$EmW_k/==[6%i=r18ob)cOqnp+`046)4)>r1Pp)e5
+%cr;rj,W?4RPr9-9hPkO"hL^4+]X at CK#f]lRW5I*3n^ig[N1N<tdPCCW,ZF(9oY6YDd7kO=abWZkNAf`B/Nkcg/sl?n@'(A]R"/j)
+%O"#bg[&(0/JPN=,:JNMVoEqX>4WfN!_6aoejUrC;6O[a>W^Z?1f^:GdA8%?(!5g[EK:7@*dSqo&^rd)ins-5X*dH:6+3MiYF`=8.
+%0E;W[M*/2O.VB5n%N-Qp)hq7'bhd6@[u*ciQ/M2To1?4>(f?-b]FV!PJtW7KoY^$=SI*1tp at Q+D3"8RgdqbQ(*h]D36#'"B06i at B
+%r_Dm%*u2RqL.Pk`)X(uSB9GP[X,+")X[A\-b)V\o9J'f<j<dI+0U>;Hr#j%L8I`n&V"?1JK;)Wq27,44.dH:sf^%Y82OIf92CXGg
+%i3Mj;98]N\YODb<F;qof%"^[W,':hiB/%-B5:[Yq;8U+V"3-b7.Gs'LV#]'N0^R6f\oG:M,kDt'W*prbDNZ!L7k2WFV+MS^.3Co)
+%S'X:(YT=mhbc2)-]!d7m=JIbiER at F&0I/@5YG]$C1Zmfp<6U.B'4Z+DCZ`8Z<0C7ol<(n.MIVpg>WHmenI-*_W3Ro6L2h2QC3,:Y
+%DeTG`X#+QcL,0"CF(9_4_aDJYX!LGs3OF\u:tF1uY>@plkfC/S8h"Q*'H&#*.cnao!<SeHRgDc81;A^3V%FO^THI5I"J=/.]U,-p
+%3AOK6'!dX&QQ<HZ/URkhpsWbTO^V82W6\BZ7>(`V>TR9)<<ptjra8TS#>]'uL87J>r\b;o)3HGpHrV*/M*\6PrEtutAsXJn6kZ=k
+%7#d^-+^HO9oEKmO%Tq,_Sh]Mq"JVXBl<5q+.#.m*AuggRoMDiFM3HJQRnR9#=PHq[dpC5a2Rt at tl_M^\PiQcTN1"2$%e]=M_IYh&
+%2C#jcQp)h8V3#t(8EXFIQkTOb*J-T5Q=@1O;:.';6:=njXNDB6JH<#W$!,;Q'q!ndl->m?b>C`?(`7OnBL+[TdSZ:CK!o]mo7`#8
+%S[<5_mm\dtM at AX+G+]>:Z"onBdRlAqh]RT=mrgR'WJi0-=kSOE at P?h>khP*e1XmXbiFS[W%N^02R^r\O&7k-Le]UYNr.#PoN._ZB
+%aYDIb*Q;bAFug?sI>gdI*''>>%F.m;,I44H:`64/P6/O!@3!W?7P1J[opO&[!;BuP(W]i#jt)#O`eZj`s-9up'o^'8SCO:C/<Y__
+%W(u9q"S_sg"M,cZd6`*$Ua?u*]V-,J&9oY_m[LZ";8e(7M1"TJ at 85D*`(4I[c=Sb/Jo<n7!=hT-/#Y7>R:C%c;fo2U0mM+1i23a6
+%<D7"%?mQaKQLN0cNP]@i%%L[=di*<mnl(o7=;n7\Ndl?:cn`e;PD=\D:ECfSZDT!Id6QEIe7\?"%R-G#PC_>daqBI"WeVZBJbhE=
+%]T&XP3V>9o6"8)D-D"9>d at Qj[]t7N=k/or?-Q1m&Gifb%dh;C=V0f(Q,W,urOO0?bfFfUDiTcXF0!QtO>8Z=4f#MFoKUhrCi.p;:
+%VLF-(.:J^IE*oOJQEVAZ`j5<1K\=_ZO*)#4!T#;g/\:2M9FAUI;Z$n7]^`)@i6gh>2s?L/"c:!`You at C.FW/D2S):o'h^5h%?sAZ
+%/5 at Pf#7bSqR_W;5&RmjZ\1O'V'NNPo6G$T9e2=5QXlh.7]*d;\oYQkD at m(YGR at E2pBC\fJHgVSM5S,UpbkZpJ"*SY+<(s#o;M9IC
+%.U@/qQ:@YYqp:>:4up1]\]?GFm#nR:(toC#+$;K`5AXO2`JpZ.R$B:>%Lh,)[+KMYc`Yu9E.9Xj:g[*=O=)Y2!ioO4<dDlUFIN!-
+%i3[(<BXfM-o'.]&0U[(taK_"QRANM)K:-ekNjJqSM8IaHJE,H6e!Do#l,6O_WTl;B`A>[1)o]_Alb)CS6=qPteJ+kiFX9(;[LZ-S
+%MIGf`K at EA=NVUYhVa")IgGMR$\;h,_d]?%&'q7LD:Pr+T=ta:U)cY&0=sL[N"f!>\$pLWNa at K;29d;o at XsHMG.3,mj3R&KUKq9K=
+%rXkMjNT"dG/$UDU6&\G#V8/l=V*b992#:lH-mMIC="8";"9]/De@<]cF1P4Ndp'Vm=P=U4W+P8L0B$";ZmXsI$$-ArTJVq98SMIs
+%;ZJs2i!W/6Xdk[rSWupDgUrYf`50SH\%s%@8U_3)XL>UCFL1<j1DLU*OFO+J"eo,MZVPXPMq5q!JJ#o%N4E4CE0D6>Q0aCnVCeMo
+%R,8.!Wb)U22/.0V0MLCDOf![*%<`PdV3nGrkb?l]?"G$#\'ZN^[4nm$PSUESD*='f'G:I",rUr&LW(n58U?Qq.ne65&Fi>70n*,h
+%QS2"#;FV;)`Kh(*rjZ_Ig/;RhA_>4g!r-U4 at cp\mkoJ8feWZ)YQ?33rh;l at -VG4@j0T4nCOIDGVKih2'*H')>f/CaI;gd?:r`U14
+%0"XG'W!#keTL'h_@$T^ck*h5aJ\@fG1>>A162)0q$W`XFYTWERYWFhPP,L\G#Xo#V+cIT27_5</g0,J<V9hZ/85U#VN,fZ3a3eB,
+%qja_m`!D@`5d;,N-otNG>*^EG>>0(_gu:U`/mJLL9u5D-b<Kq0e[&jEfj2r/PSPE)m-3d;Rr&=)=BAm?aGJ`U9V-&<bY./_aq@:$
+%AE:>chJHK<$X0J8Dacju42a!bBW'.^KJ_jS;jWdPUsOcG8-\"5C(^X`($N)b"ulB4i3qnfW(4P9WGnMub(__(d[_RZ\>I'V.hF0^
+%6datQ[<dE5bpI_SeG,1*4"BQX_EnqFbFsCHAA1Q9RMj)rPS!Y$ni)O$5qc2*2C.?$'i<%@.NB=opmfdLf$fg7&^kr%[(sKOT'hJ?
+%a+.\\PI6'Lroe7hkqQ=Skq)Yn;WZ+1,'br:]E,]W:k.cX6V,VAW'Md7d8 at qd*.e6;Lu]H8OBSK,JD@##=A%]+k0),M3_2-N'T@'i
+%FBCO'<&PWb;&<7I+=j;;b?;n)>!C"LifeMrq&1$%<ZY6FTVDM#C8Xc:XJ@>I\?YI+GtRWTWEn1>4?:c!U$.9G.6\b<Dj2AdQl).P
+%],$o`&$DSD5c;E-3YJ1fhndE3(H3/DOW/Bgef;h:#lkhM2t3">b%>Vd[B`Z-jY4JCKW?EXA at T$2-!h87[[a_ at W4V"u^e7RYfRoH)
+%R+]=\?4010$+%,fZdL<`\OofPf,JekiOU at Cb7"kLT'6u.9l`4R9R at j0)TZg;>G:kR5_'1%EZ0%9Bc9ur:0N1;)cPH.Qns)A`)>`[
+%,?</"d$7E?%>0X0J]59V3N#m81P5&YHat\U,4Dg:0MdQtWjJ+9C2'Y4]G5#?=iGIu78PSlJi, at AHA]15+=$Hh=ul at upZ;!=+Kl,9
+%W+!cY!1f=iW"d%EEa at YQKQce+:mm8fn-/$*VAgu>Q,HK,f&eJJ^ZoGm"u589nt:E+g^5!/%D>4s0LsU0!8k/:T/mYbA_PL$d-Ao?
+%bdp6&?ZBKA-6mbD)J+#74W=,Y<Phf%-C$AalZTA1D1M>Xm;<J+[>N,g:'76VXOsV)OKPsAaXN<-hR!SHo:'uoKK2&7Y10]Mah0Fq
+%^9JrK>]O#/!S:0dUY1ZRBJ68e((MT;c8lUNFA`s!+MH5@\hRX99MZ>mLa\JG,WuH4Yhg?\l7Cc-`elRC!dMTPYOIX1`<PAQQTYFr
+%,3S2_"[+B'ia0K"-$M,jqO?h$)-*%5j<0I.dqO!QE?CSB8dh$VnNaht^ZT_B*IfAN;A'0H&@M\9a-^TiLGbdA<UO$?pC7gLaL<Z'
+%49j*E6&;0=%N,ggJM$#^P4J%Ik'CN*7O at F0GDI5LOL>Q,OM>n<@IfQODA/3"PT:Gj2*8$>*UNTZ^DT>kgk^CU*Yp;P5^4W;9%*K.
+%N]^`69g83R%d9TD5``7/@F^YFcPZ@]>9 at a`kX,ls0lL.$@UucW%0I2Rr,6\B1_MC0<$;9ZF'.L2i$dP,e!2[\N>/X/k&l,!02QK9
+%j']d at Du)3N3p.'%1ZEWF'rjOD;Kq1BER(X=%*h9)-fm\en463o0nfX+Nk4$IYo`#C.qYWALY*eh>Nt.3M*O!29lR;&bd+35PiUOL
+%)oCB4R*PIOq=.?ER8eH<,bR&ZnOdLV)^()9TYs6AB)4D at VBtJ.q8jp'neJQI.:H-ME[+NHh;qk=pnugdfgNg at o$X29*3?c>Bol"0
+%PkhsM:cFD+e!HF%,OgtqJMa at oJON2#a<&jNo1bu?o.[>Q-^5_MP)+Mkbmd))Z5AZ6kfsj3H"[E'-0=(ULhk,P2)+gPK9X22RPW`#
+%i<5Z!D8T1BOM1l4E]Gr'q6W-k1U8GD\)H>#/<nFPCAjfSkf=Z=.5m;SMG6E61XN,71#.bVOLYE2S,=PR at gp'+4'e\noi0`-.?p.[
+%TVE>5IT,<'KnanK66V_)8=iCX+hBNnl!,s\S at nVl-T4\=6Ei^QJ46 at 6Xm'ekIUf!>\39(*An"0J5SQA-2LqA'$Ublm#^M"'rg[sX
+%ne^qd/E,A32Q8Ts3_h0F=!3Qm*dJYWp_J[QNfK9W\slAHYQENGHNbSEcE^W+Hou\@8_jCQV=TIf?&Cim%iq%5CB7b,+W`Sqh'A0p
+%#3;S5.]PD#7#BA/-gd<XEg38&1+PGji?MIa$4bKg_u(/$-!Ht:9]8Pc>bGLbk:*8`L;bS*@?r^0.^MqD#<fAQU/_<7rfu_L)4=H-
+%9ppU'3ec7R$kRu/VB-+6RJPUd#.`I'JQad$$.:\D;ufHpkjb(Eg/*sP$KQ.oB!opa*"YA,h$kL<0iTt-dE3:eNa77;He"VN4A^5q
+%jGSSdW9JRE)#)-OdVd*5#MQ<6k";,80fG":0,.Shnh=hD<)W&SCeF,gesH5LR89#5.9Y\Z6bCB`4f3/J).6g/OdpU^/9F.Je=)C<
+%9kDc#1AEHfI>sMgBJ.a+'G!b>;?F(W,eHh/%E6=,/=WL]%pEj-&8?G+'QP(27KFWLOR5gi<Wsa*14D@<[]g`BJqKQLDMnE_P.U92
+%'_F*#S60Z!!70;eJ^?(iTHbDCc;]?V0#5_!btG%-l(i>RFjH&,N.kZ!.<l])"Or8*+bDU+?rt.>Kl"F(U*>q^6\8[jXIRq-PZ1/F
+%?c&TBq7euFfa,E%#H+[F&sVu4F!PG7A583Z)`II,J2I\)7O6fB'L<8R\H%aW9-ZPc0^qEU#]<XHQDLC>5bI4bbObqVXuAC;5r2hk
+%N+\L*XI.fjIn%^0'IRaUh[8as00`+X$h$\ZXoI*/lW]-C&L9&k3i+>2#U-/"b!rQ!2tFWpI0t,A[:TOO,ZHqZ#sEURFK)W2-m,[E
+%"#Lsm,8^s2fr9o6:Eh8Ym:r<(&QkBIU8u\)dk)!1EX>X`%%HlKn<T)kdOG)42[Pqi7)37gO!FlB>k4EWAH?>6&2<?mW0r7"?"A%\
+%=n':?Q46Ytl%td_?,=B2Q-`,&[Ytg0ak0NqKK'3J/@bc6^h>O;)8&lg2kuS#N@$uLUIV95[H0._0Mq&f.sTJ+DAf&hO-R.J75pc(
+%ZaB/n!(\-P]n&U^YYg!8/.%KO'`++X9<8_#mo7JDQgc/?['OA%?ucOHYCi?>MV0:$'Ju'`n8BRO'I5&3$*8,71Wg^VNAM;([pCeg
+%r4b?OlE_FH\f`e$CZ8<<bZJrQRr22k2pie'`ZAK^!&eHE.lZ03:fIT81.?-5;<D![?Hk%.C6VeGAb]9E5R7GtjY6(7MG\*4Q#aaf
+%J7"'TTkssd4GBdXA+"Y,fVS^K#,9l-BQMW-_0`'*TRh5^]1/,-nO!ds9]:C(br!m-jhC'<]!gMHFM at Co;<9(KEuVUiq:n\ZV'di=
+%HO-GUW&X$b!hUto*t"BR=/'%b)C_r67\>\L+IB]I!R[(.aE/AIhFC\a(hR#/=:.U"FIXOB&5>%\._9G5",=pO at 9OiCc"aenZ:hFj
+%G:a*\7OO&\9M$tPJ8i=i&sUQ5bc0TD&:g'C[F$l78$a7c-IK<ja@)W:[?X/';kib at Pe4kR$,^^*RDNU1Md!#O.]ALjPK/er1lO\f
+%!QQl\=NJV%?cqV#m9i!q$gQ*;KN at 7Ib\%*D3?aJZ$VlS$.D<)ge]X;2b)S;a#+*=p>V5+I/hm)sME%mbQ(.htKX:tR?CEpK0?Img
+%9GC['S=*sma>BYub,!%X6i_=oXKhk^oJD*"N#;@'TV`u*)F.^WZYB'k>n'X>1nUVPO+<rnjjlgQHMT[V:ndQ&!3\ZAdTuuS,CTqu
+%S;ONc]&2^i=6RW)YT#BdqdD2P0B27I,KCZ,9!Y4TO!Pf(8qUKQXf8Mi*\a+C5C<pIL]E+RR?BHbE;q\$^$BD/*+_oLUN:&$.MP=Y
+%lcH4VkT$F<PHJN99+)h##D]"aO>8<BCS=*KN-Q^^JDahA>fLRb:5KI_IXq20>f6n@/BX9pdP;RnV6DsPO6[R(W(OY>JR]?%CDR3W
+%A?+'U7Wlb-+#%)NT(eIE'JGTrdNoS->a_5kKcY(<g1G$/V(:!&V]I.b0i5,OKV3OcR8Y32ZMlgDJ5RH\WQ8>*D9<EN%/>'!kGfj2
+%8:n=NHUtjYd[%2)O?ZRlLIVQcp:Pnjh7D8PZ5k]d4,_kdEIhH6)q\ar-\dh]W9!A#]@Z8CD[DCa-'Ol5Y_["'3Rq.b=jEpr(F,]n
+%#qI<SAKYru<&k'+Z-iDlEr.eYf2+LWY"9)a;!8)sd[Z9BX$+d2`Z2inHe7!TTACK5'$CAW)'e/%a<G6S%s!Pt4Cg54D+Rs"gh^Z:
+%ZXs2QY4o(FG(X&KqJ$\s$QU&>r/OOi!VU+#=!ce5Nr0[Cr.JCcZGF#5$'KAT(`'F$&C+Q)A=!6n0H<W%3!,h+6qH15Z]1g*UZ0A"
+%m@,W%:=e_tVHb8hl&h.+)mGCIPptegJEnrdDZr^Xh_Xp@*[OHG<sEoFYbUsY'MK'u=@8I?(ale&p2n@%MitZPoj:lC>e1J[!14 at D
+%[5+ at SacnJK(WrQ?(sYNW9acTLWdmFM9B`U5#M^fR7KZ,dU0NS/Sq>7D!j>2D0tKdpR:R7HEYO<c,Fa!3'9u(li1iCD>5/`aTrFt%
+%&#B93i+1)QAjeA+W+VJr:(kkK%S(ef6P&'9C?``@/\m)rBot,Wi)P%Q`SPW\E^nVQV+T.r1:D3]+kr25l'R2J='ssV8ahn#NKRd&
+%DFqfZa&k$aa(fHs-!.[0\u.#67\?Eljn_XC273n*XQ9u6E7"TbB@,;$l^PgY;Bf0`##.O4eG9DrCLlQMD)$uu8!0+GVj%KaZleN,
+%e^A at Ng8M@jE[fd7#54ChU6Z"+>Gh`o4%GX2,"/E$)td#V7JJG`o&",<cfs/<k/-[ZZH!<:@93]g/Jekk,\'<OVhVQF%cIl4fla2X
+%Q4-DT>CKT!A;a)NQfUraHXt.>@'kg!dF62HK"$<a!"?k at i!G!glpeV>0]KFG&q1e!9M[8S$$.%I-EA8U&o8IX;9n`t:_j6^h,)FR
+%K:<Pb)=8K^Iep-]\>lX85 at rD)9RBi#0b=SG[/_t(<;'mmoqY'Ek<&H5>0GYc=s];>DX;o"I(_9&GjM8/Cl3O=n"=j"+tW1kTT-(N
+%&RTJ0cihgaMuo0ZCRG;,nBj#!+PUsL'/`6F:&h7gY62orAIL5>gPlVbU0+%_nQRL3I4!?q(BOZ>6p[@:#7UHodPFH3GTm?(Np/qd
+%KN]_]k+"h";<1<(AqYBJdFI$N5>/:3TTk=)@18BNpMblPS`Mjc2lND`7)r62%C8*a*9&0>%EXePG6uqK at Vk2B1:E-ujF*nE;-#:u
+%a;*[sjdjZ#V+Nec5H>Ho]rX[lX,IlDaAi4%efiRj%PUo3W27;9Z]Rao3W2GTq;bb%cpZ&cY96'&cT_SC=C;.kktZ)_XILKJK#&.!
+%LgWCQqP6fb)t]/tgrUX:(^i2s_8$>i.0Qr@[7XiGe.,\O`?R7"\tcK(q\Ya#%)%sW;Vg<7dC,oh[^+a)VI\Vi2hXJhIt4<3\,k[S
+%kg9&=oQHWb;?iIR[Fdi_PG_f%].m_hOH(WdfWM)m!K8Ad\Pc4D^.(cJB6mf36dg=oIOb1_RPM=@^<BJPmALCuafZ+a-lYV$2+&GH
+%d,Yb:VMqQ/'K9JK'*aosR3:3'U"blg/WWD.2_hBZK=2SK8.`N/F at 6PE7:k^9W>4b9<"n at -N!ud8[KTuF6T!c`V#?h2Oq$KN"c/)$
+%-Y>?.%RMR4F%f`I;Ga642aY6 at 13BLNE\8elLrn^K&(*[Fi'6:5I[LmOe_3brk"/o0L1=U-Snpm^$hQ3[*jPuJ:BO<UblHS:89TjS
+%-ISJ1f?S'fm#8YDZ3f]SiWP"5=ERa))@*(`Bh1_KTQ;4iCj)JH)MTUiCm=;&CFej3Qfk*1>ILbua/:jHZ\4a#UFn+b$P+AY6l?Ym
+%[ZH;5:2\F"dPF at S2_b2nL_$j",hL6?erEr&/.KWK,RF#n[FtuAZ_]CQ%#>\[V'mTV1ShScqSo0:(mos'>Vg\)J:W]!1.&TtlT1JD
+%ANu=s)0,^c*92T!VduT;X+6m3gA%[mLX$6cB78Of>\r\YSIF/1#%hJQ1V!g=$-BdhcZlMK-^PTW/t4,UmUb)l'_.//[*^,.IOhP`
+%QFag4cqiU19gGlH7,CK,ab0%n[M-2t9a5-3ehi^89_V%P]n`;22L2A(B$#TjdGO/?-m3cuW0GA]]dCs2Y)&KZ1f#"&Ve:9$"jo+=
+%Vi[3YUr5g0h.V!9[YoHa$s"i0`s$=(J<bkBWF90=MPfLWisNpX at u):RB#%/8_1KZ^Dj`ZkBXWTfW+L9;9ec5L+C7D05n+"k!/cCf
+%-De0kKbg*r`ODt0Yr5I?SDi&I3<e5S'p3*,(!Nh]5W_Q`Z at D_tYdYjpf^r%@S;tf?9ds""/U[0<;4sJUf at snjr)_kf+1R$$d_\Q@
+%%@n`QV.4t*9M;7E<k#c+JQ<moP!7?ta=PDJK)6D/S=Zi>9M8kDluG#h<GQC6eSX at eaqGf:<_E*6>p\;X9j^05,4?M]In>;^F"i5g
+%jE0S#&t($s2ZqKc_I*R:8WU,"rN:7MJ\k2KL#35L/h2<F15T.GD&Wpi9U+O->>#a.s5Db8BJX2gQ\'R3$`Qp:JIPl/nf'A'.T0lh
+%dV%877nGrG,i_W$%FoVr6Tm6iZpSkia^[U:8)-U5Xj(HUJD3mF+TAAT2;A1IA_*r(Z^Ge?E(3`Ee5aT$80-(^$=P8ULm#VY%hqbA
+%=q?gK#pa#!%,<EARW^eYV=Y!%+Pc(Y-/,I%V8KAW`:S5l_"I7BDD9U4:s#;"\O2k&0[ut]2qfT^@gP at oSk19i.57D"!m_:rOgWSA
+%D`ap.GuT))h?%hsWi$4;MV=<:eL']1%VA)/:8Jf>X-itqfdZG>)&mtqMS=D^6jpU-SDd%299l;Y%UMmSPT#IE%TCi\OrsiF9+]04
+%d\mGF9Hu&e;9)3VgX$%%_V*ZE;3oPRI7`3>moQ/,\>;G-jGAF+dhBID\&/d"NWdcfalOf6nS$7.\H)?hP,<]m4F%.C$Mfs5ljTao
+%d;F*o!P'r`>V8kao<-kd3T=+oVATH(5]oZ8YbK)=:9YcH^]K+(kS:$*(Z\P62GK%<!u?s_b%sX`g(Lfin5]Q?ec2_IHt]Ji"g?-F
+%P4g4OgiBo at 3`DUf5lm2CJ1`eA"ipp8;`!9&dc392Ot56e$\aI*NfB84Os?*OD[2Le%YaU20t(DV)4dO.T?nOUBGM9soQ2D+4':ES
+%N@^IrOPiOf\6:a7#\nd*m45R=;FlnMV?BMKEi#UTCml7R!":jr+7*ur'4r at 817-^*MK)"+$bo$V<"NFU-Wkq\0:s;h;`^ZW?%YVn
+%,GBk--l'=#Hc[>9l8j].U1%V`=&oQ+B94H,3:8&,M=p9%OQ\6;8Z2.eE)4nR;jprB.>1;:O-T>cUo-*A at hg5dHIRmq0,$KVkmQ<3
+%M7+$LH^Ha6^ortu(&\k)"W+ZX)Z#hsL^iJT3N4'E%94tX/_:EB)7``UJrgB at QEG%u=FNm[7ABQ3PMsf+Wf:;b)dugjEZ-0+L>B1M
+%OE<3-;W2amj^,*L6;^ifn],1A,gk?*X90DcQ'tZC.<f(F3`IJWHV$05Dj$rngto^!Q!'PdA8Z8l2Qj":+j$ZC.=@j^b;=A*bSgY)
+%2;kZBl3>b\HsL=:NBM*>H+>8D4#;L:8XWrkc,9mHN.)g=hA,ODIto$h0p6 at OmWq\X*dT(pOm1*2"G+"nft:?G^H'g@*Kt5OWkaeH
+%Em]&3n>HXlT;i*UD7CT)aFO_)[PR2V-5OGG8RF3rO*"P?(0DO;WKC6j*)1+ZojG*VK0+!>B;odFB)(7SGtf*@m?8NKR:W]MO2NfX
+%CF!GRBe%MB95PDr>glY9/lahJF4gV/3gm1i at MA5DP*]-3'aQuq\0K.dX at EZNIuplF]p&\R34)]$!2tu'*H45 at fW(TaU*kb,Q'rq4
+%F!(d[98Jf'&Lo/V*cTp,mgV24*YKuK.<6JI2*E^8#Br=]`'h2mB^M3XeO#@u/Z(E-jV7knA<>kD6LC&SX$9LRKD7?5#a:M*[:&PU
+%=fql=G6]eS%3Fh)r]`lm"rDi3bnscL;n%tB!>STd4Zbo)!s^#+2]28)bY!S>`=7,FH-Oe$"Q4Buf0GHHV'lV88V;2ChG3l at dU@GZ
+%*I:]]C#s44lD,PN0q1,A(_XUJhi,cg*-T]e;j6[Drr\Z^-hD#Y$CnpRckPNsdtFg?T][Ik#2@$$<@1WHC;U7Of=nMSq(OLUZd3>M
+%YN_lSXYg1(.2b#IJAb8^*jSi;Dm#q!IeHHZ,<KCCnf1!nJH>l!?8@<2/-@>J+NImh_$WLWbZlC7Q>@T'0F"0uHj$]a'-pa($firG
+%g*oLgX45KtNXY+%8)3 at CR<m=_'^ci*"TK>Q1*geKN;X4T1^.RT`IN?&-Yh\H92M!)3An?$2:F.YQneXLdGnoUrV(7RQN2X$d3MhW
+%l,dp1`X6Ihd`Pu)B-rlW-CZS!VrsN&![QnQPdafH6 at Gn*9G++SSK\.);c<#uO\oIQdG)R[<qKZ*aZcKHFIj4'-94$fi.hX_E[DMT
+%AQ"#4l=NPIR]Ka$?\8Ib1faqC`L%>WN<D*FC=rkQ/&[V!c#d&o!@l6Q2$P5DC>B^^g_^FV2)A&`l+7#Q%6JoD8Fn_uf]rQD2&Oh8
+%B+jAj[?_Cc6 at 89FE$X$,M.C!*V"beOdP;f.3O!hh+O(j[9oO,KqBc6<=0[B5NSm';d%3,D'D3J>3J!ZM at ASVV?Ct%9T5!`Xa at NV;
+%j&2)1h*EaA91=L$e"NTN7TN+g[-O at qdkb`#UV:A=,0Z3]7eU8,gEr%?QM[fRhV>@UDn_s2[]&*l.06?`_Ea0^N'R][7:BL'N(L2l
+%\CO2?jH^Wu^!&A:RrFS5S`m"FOi\i1$%RNYM"25i%Q"hQdIILV&\(4U0/==U at MoAhp8O_q9#_.aR_f'DPQhAH\G:"b`utDB8R[$K
+%9 at _2>X3iLi at p/G7fb:;@\rO.f5,<X4T3"2]/r36+B"/sc!g43'9s6VW&h6=a;Ck:48Jd4)^[/+0985!5AKjb)<"8fj\hpdWj^>/s
+%".X=\dVlOu]"tbT#Aii1X4N0YK9Ln<n#["07m3^O&X`^$OF+j[aU3f5bXf60[fMYT3<[PkCDnO4UcWET:#K*25n2Mfn>)RllF$p&
+%Y1mE5CJT/YS3_E at I"GCB5rU"&p<&W+cLBC0m;A"oah=BMh_6=MJ?J\p[6tF8kpIn(FHg1>=!Xt7qhe0MjKRLu!.f8Q_j$geeSW3S
+%V60#dmK4*L-A0sXKpYHO<c4;4ZcR!`BUb7I_75U`mfg#?)se^Oh#!6fZ9HB)#>3=LKO0$R"#oL*%2<a]N\[51[ig/J,=td#)k-"L
+%8%EA"eqbdn:nQfF at d#'R_as/jAitd7!W!7>)5][_(5l(!$uEd9PhIEeR%#V]+V4`2PUBs7&_$)MG#FBU!V>#6N$S=a#qbNZ")?Ri
+%:Z!#5!3SmF'+LjlFk,;u8Ek6)Ai8d2U6B&Z0+hPdIeHSlPn+8HAGUl1GRSHH28def4JGJV7 at B#8/=Q]QW<6iscepX>UPt(N:W]kq
+%48(!+$W[?5e-^GsKGC_Cf5%3Xb;s,[+1$gI;W[sF at NtXSIB]HURZ[mAPQYra at O>&*&tN>mEBuRUARhi\TWb2l)^aZD"d at JI\jog7
+%R>`QN!KLa\9R8ci(7+oYp'Sfj(HA*'lk).%WFe'Yom5pq-IO*IK6^PLR6&%2I?c!h2gK0GD'AS)8mG+1o1sn`FEo;I;IJ=@TU*u2
+%Us4[88=?KDg(^[j_VU$PI>SkU%+PI.@?L_!_?:uEB1$!=9k/c&M3'4k?sTkP9P$%;<&]mU)4d3b.F4-HKG;OA'*[>;b8&VjU.ZL4
+%=?UfEP*<.[+:o+8bXb?>Y%/5F6FN_u'NPMXY/6>a]C'QW&4,[*6pfF&\#g+;8gL9IW.Z&i<SJHH>.Cmo8uDj"n--qr]U+W`k`5rZ
+%CdE7SoRhG:$.#RqQKfbmnipO]"6ISQOpjU;X;R6S^a+9h2_&?k9E;@&@Vd_EbRgn!"%c\F2\.((SsHg_88,/hC?hL5.[,n$L(l>s
+%'a?oop0^04LC]^l*$e+qQu.rWPmpB"G.LK6Hg:rh6<3Q_*,$1+U&?K7JC*q/PdH0'daCgODA.(3UgQddOn+jZ,"Z\5GUOhhP!Y<3
+%Xh"oAj<,I__Z9G1Zk]oeqc4kqhFXDE%LX1M8spO,g6_m61VPl[(N;9lFd%iMk%X^E`pDj'pasEAZrB#&a%@Ll%WaYMRsGeOJKb$u
+%d]K1QPNZ*g7Ed"`L\cLuK48]+i0BuVQW@]2]qWe)PIE^i[&IDZ84mDJ)=\+Bi^QD^dV"7t54sh<7RFSM?,>=V, at Zd5C>EPk=H$hi
+%($9U#*SD(rOh+^*jd"l5*#3DM"N/;gFb8nE;R_shQQRb1@(\$n)4aJbJ(^c(->FN@>b\SL[ABdk8K-e9!'XaIMKbJ7IfhjMJ6qMf
+%-2?9]D,f<"]6+SIMF>>8&6Et<k%Pci8W.)^BYe/9VIRj(XXp/^f%i't5n=%4AO1C=F;cSt\M+n_3LL\S.jboBF^F=-W%/Mpfb0s,
+%Yimj-NGgU]33Am7VcWso4'Z;:66gt)"mNm#3sK5-Ut5BIS$0.n"OHRSI:VTc$6G`@;JnLcnlfR%(`5WsN/>=ArdaNKJ9m(el=B;G
+%hn1ECcH$ofetHG82ki`p5IXl]DHb19:im"<IA/EqJoHS19:E?REugd5R?>&:m)o++!S5VN6mWSWbjtRaaQB\!$T]O;;.E(cJf9BD
+%%A70WM&iCl3\q*0GKFNHf#5Ib"0>BLG/iFhD-gMUNO#9m/+&`j'0F9<L:\eC!ABY=K+(V(9W8Fs<5j)*k1[t(..Uq%;n8ZK1o4':
+%fT[^%#Rg2(/7B(>V_u at aQl20ViK:"Eo;7Hl!r&T'Ufc#tZ;,qH1^*LDSRi#1]?/CG=W^T&pnV&uPCEobY at kk!0$d'0iK[7j)(_gG
+%!!k_*R[ssZd*V/Y?hGhN<C0<`f87,qj><"6f*um9Snh*eF9^D_Babh'UhAbR;4)-5/Q?CE84C=\4MWn1VWcb9p4glS*c8?'F/-'0
+%-O+<]HG)>=+CF2RF2NmeD\THemtrVb:r.%DE1uMc1ZU]?-KVTjS50c6Ta*pe8a"O;5it+i>M2:p_D&$B*p9fDpS\t2HD;Dp=s#^g
+%k_lMb\r^Qh-&ST\dLA\b>!'B"AkLFXB5D/-B/qbS&fV+Jl!I)FLtEm'*GS5sO`sG9*o#o_]9-gM']teMX]WF+X?<U[L(<XF6mbW/
+%PSU_YAc,T3G>C_^6JCi7-RZ5D#><Dt4ABRQ_?3`9')H?X7\#h9j3s5(YJm>,(D'2^E%9?SES.>ml&D[)A+V("Uu=Ok#,EG1.=Y<_
+%GjN"J>BLnC-jA;>q127W!9G]>'`naKWMKf@@:6/D5BF-C1fR&YF at jcJN@a%),s0U1Pm#d*'^hT>O at 02_lP+L+8]m*L]SXYW_0V0S
+%:A\gj/IG6$(SuQam\):NFCKt+.MUDO<IgSu`gA2aVmD\'f*ue>aa_]@ha).Q@'Ch,/,]OtF(bU.TqQQ=niEaG[F!JSo[R5J$sd at 0
+%2.V.>,tpJ.(8aFo)U'4R&XgIno!oW(5ENdronc-4BgF*R%%F6?%`/aI+Dhr?lu,l1O:BML$n)k_$8)fL'-Zl1;J9lf-4O6(]XU7W
+%7X#X(^.+9"ZfWPadK$X$1[9X\[r1:_&7t')@Wd5mOH7s6^pq`H+(T%%.'>fgVa^bV-c>&?R]8oHcB#90/4%Fgq16$ADG5T+7YOC;
+%Sa)1PS_W(B4>F`R.\]r8U*,-:lUJhJ!%sJ0mB5iZ,Q%SQR5<\^Ke4$1.BVs%>\]"YPf?r:EC+TnG^=[d9F?%u7;BLI&/[@!\7kp^
+%5_$mN.E%RsVMseM$lK18H;r*_XRJh"@3J-_JB4,j7QO2$'"]J!bu>+2SaGaDZrCP"H5+RR-6DE5.&N/oJ;W\96NX::\X=+s\PquH
+%nL4I`TdOiSCIV,#WfpS]I\)fi11^-+9/RF&XX\JMPC]C:Od;7bCGQoFjZr,=g(]@[&LWiK:csCk!&AOeg?JpND41$;6%qaR;Hp:3
+%_"rpm#j);/\UpLT>Rf>.17%J8jZmoH\jT1<03#WEk`sW>KPpT>D+7tl6XqpfVZA6c8@\l%f>tJcR^OkqkBg<aA/0!\E:"XVK+p;l
+%:+7T3f6O6\N.d$MZ!fSqGJ0RY<'\Z"@Jg\lLT,p.,E-ZI/"8"kAIX8+FQXr&"On%>aMcFE'_*re`:Z-G7L/<q*Ut0B9=Y`dI<ujU
+%\cl'7UU4rWV8=1jrWM;4/s]RZs.NW=:dt68ok%s$U"^!2.mT6qWin at b(\i2oJc<R>IK&g%Vsa.@^Y/S9?_'CkQVS^<]\36GIecpo
+%s7?,K5Npl!hrT@;^\n'- at Jp%8p]%nZjmB\[q9,Zhj3RSr&*)EQHM>>?mU*uC3c!,->e?WKGIJ*T5/7-]^,oTUpVm^chZ)j'pHQFG
+%]c4O)IMb<Hht6C+qY-WZ?[fS7)#rK;Ii:P$q=2oe5Be3)GQ6$6T0IaOpVSZQ5M3A.N41J/IXces)s"0H2fq4[oB5j4r:jiL9Dd-+
+%(\^_W?hE/-n&CDUp[aI7`h2V,0CM+6j1?t:A\Qs[Gk^gp:#1^lNUMTt?TsE5s8;ku]^'eA1qXnplP'<rp>+&@ApOeanZMoRoB5XR
+%s(D;,H?]>cl(?"Wf1li0XdXImkMPs)rq'iQc-Oh\5J@*lrhEe+BCA$3qVck[IJEU%bI\krr21XWO7,8n5J7#!+)N"SrRCMqen<a-
+%GCTJYbKkLr00d5Knun[7r^@@brMS!1^ARbO*2gPor at _NtG<c&s2Jr#/p:[.A5J!ogj7*&cLJCqIoPo>6DWn"dkPgeYG"59E5Q8u9
+%,V%M!rUIqr_p,lMs5qXG'q)ejRi(?eHhWQtBK,\Rq<k.V^ZP^3gRm at Dr@PZDgWSKFmDZZZ3I:LHHJS&F:]8SP`UBOnq;([!k:]'6
+%qceD7?0:nL"i#77pjMddhn+73rUd[nIeiKprLZ:Oq;(Lhrd[]?A,&=hk[+1Jd>S$EHIY6jJ,I3FT0>nO`m6k@@]pl&Ib2+hm_\/O
+%U/uR,Xh3gASNW!NI+O.o0tN^4mcrj1 at U3`=?ME=Te9gpgn"[@:5Q/g)a77Qji@"B[T>Ea>MI,eos2aiDiVgO(k8Whtr8M&ZMgM@/
+%(AIFDoU8"VJ,Wmfj3Q]=Dg$UiRjKT-s6G_qq"^8K`rGu1D^@q\],W*P+3u$U^%KDfrq"l/rjVF8^PlNA"Pun'P2^aGJ,e@&'8]cd
+%p(.2tS"Q[rFl)PA:Y5+IJ,[plJp743qk(m#s8)6L_shjKUV6F"f6>UQr?^>!G at .oln,'Ta?_TW$hfuX*dD*V*r4T2Ka1'HgUO05[
+%^PdU0fluB2m>lSj^QZTc0dZP&J!+Efh]=u$5Or/GF#Z at 4q9O!ZO2D4UU>NW^+$[L>1B*naG0 at YdNO-*L_$nfM]\-RCQh0<\3F32^
+%rM at 1aQhjTcb"H`r0A.Yb,j3AHHp4*^kJMRpDU6S<5$-q<>b(D,G#$B*l#JhW:8d.:E8$r<;tFUFW__0E4;FdlPb$6$EkEC<a4'R'
+%4<4+9p=LAN at s'>``A'Sha7P`=/r0&WF>t<OL]*o01l(p(*Qg`ha:HrI4X=rhqoeuO5OFO/_g]@=pW^G/=8R#Fm.5Y6:\RG-C!Z1G
+%4gp,hhng..[hK8Yn7lg?nDhreRo=BE%aD_%)r2aFVMn(sDl@%ioqak(VtsL;l9-^)MVG.7nII3924P\Rl<Km[@s+aD<==q;<@Jt4
+%6D_dupK1bEF*T6rje:IrD5i?3de)+ at AM\K_`ORrCa5Tq^aj:`ETcgUJU(t$I8Uee-q'ePjLO9WMLV*hGfp5J#jH']rfd/^mVsKck
+%Z@,1]",p/ZVhZTZ9@?IZ:/C+/4f%t>!R%k=QDC2TXJWSL7,+,C6]sg2LSd%sNjt7V$(``Z2nT*a++!fcIlo^*"X,HDVhoij+!b]Q
+%N4sFrQ:ft?kC9,<_7q$d?9fgo5s-6Fm.&-BT7/P(ombC9W^ohVTu,N5A[SShgb%olY#n2p>-7?GX12 at o7rkl?eQRGKl_WuO/8`2u
+%/*liXFc;ZiaQ>/-I^RnAeLXbgQi0W[CfY?MMY6;%=)k8r6+$;sB>560Q>U9Br'U$a.[dNC#VShm]Zt]=k&n&kG-E4#[q"%DdGs`H
+%FoZ6<.ID>Me2P"VIH at mmqj#k)A at YpUfKh[T at 6N:p4kcS=CN$8]`?B,L,hZ%d=)#^dYbRcDn]pKWVuG^_VKK=iZ?9]kg$/:D[J-`0
+%eX/\%9ds&=(eR^:KtDTl^76SuVCX?s0]Zj8Ip4:!+%K6Qo1</YV"qrnd96";!4g\r-OKOQ4Njag`22P6E]2*.O9e!ma[?_46nAj!
+%R?4C/RCSd<_:IJe(Bt9](5u?L at iL0HR5(,9 at PVFd,ITL=9*7)?05nKMdj9(tN7XB[H=XPX_PVTh[,1/`eSK(@XfBnB7RZ(sH>'fJ
+%-g at 2d1?5c#?+K[lc?u`'f\2#'7VlMQJi%aY[U5E-@*E5(p,?<MCp2i&eg-6[9Kle<c2-n0V(6G2pVeX<-G&3MJb`=3`E2t`2J)Vu
+%o._o5ihRr6,FYc9[T`KA'mE<+867@;<NT<8>0UfiGAFB4mMG2n>0#/Sh6#4oY'=*PbM)&K="CmeH+XhTj9cWfX'DdlDUkf<bY)$u
+%pNEt<X*(pVa435)V(9,Ah0o(f'kG2*WAEJB$`0uJ<c&4%gtHdU#?rqhddJ`r;=4W%!Z1=23eNE=i7sIC<b4q(>8DkAg2\"klY,Tp
+%bAFfX<$0VX:hQ_t;h,6bcAl]RX0SR87Ws[>g9M[*Mn6)*lcm_5&!+r&BQF:"j_ui4F/DQ61+';bXN":VM\#8o<0rig4J(=E6KfJ=
+%I+%.524Ye<@cF`Q:B>Jh\Xhi1QL%_*B3BA?3D3g4ED;NHa[@[MZc#P#1"d&V%%t?C#c#W0D.R\sg4GMPdRB$GQ!MP]_Rq%JZ!(;5
+%K/Vng%ssFBAr9<S;9l0s=b#,<<e>MA`gu`M/i!_^oBGk`9cD(rGhbqoNdCJ5I2)P5n3m`V<9o,;s'B/Ve@(kTh'kL(EqU>^%m6YR
+%*H*78#Dp;hO7jc!$J(f=EMJfD%$WELQgc$'SS(*U7(ttl;FJ5d<U1^f8[K-*K1+q!/\*]7dsrhsjF:/"6Q1[+HO9(:6?(L#:#rEe
+%FBcq8!H$T4Qe>$%NtRLpX*^)!:@3-<G,B"98UEN^S/]aHC1j?HP>U([f\7i?qCa2cRE7J[Xa;n8hO??oOC+4,biH/g.;_a6%jm9K
+%PJP`oY:s[k9uclR=3-TndGu]3kp]>=)UgeRPDuo8M8G%gOq$jp*IMZ8iX1Si]RLWiLW"O2B-/oL,$udD9<o^),+)g?mkZu-C$djE
+%hRCfXO$7gXLEO:aBt'%TV5hc:/%l0i9EBtX)/uqqqir9[jr7XnE1ZE_Q=TCDrP`:2eX1WBr5*r"b_N:5+'JCR#ep_1ceO4#AK("+
+%cM#J[Gd\o`5J=lG*%Y68n7UB"XaJhp="N^gRAI)hM']DZQH2*k1@):Z-/@2%E/2iIDgdSPIepm%4o>$=0Z?a\jM<l!Q97IS"sfBk
+%H[ZMFc*?nh>Z?G>I!"Yfl-/D1Ogs(*F"]atP8kXf,al*/oM*[lVK;%Vl^XVjK&1L9-g2VTIGX<;%HMV-cpC#/"\n'L8pDuIab4<%
+%VrLZ]MdpTR5P7d`F7Dn%r`,3XDuo:]9YnQh_9o^<D'f4sQuPYfj-W't^+qJ[\IY#=#q$XV)3<L,fW?$Red(+<1FG[K.Ju5$+oB6-
+%?+g2u)K=]'RE<R!pg9K[.Eqim-GWB5Zt>1L7WLE3,ji:L+3cd9]^imJ]4Ak!bZ3X9'r`(RbU5+>^JeJb2OlP/-o+DBe7RRSCAi0:
+%f:5/fRct21pt^7V_=*>W0D?SF^[c(RAhLuAM4Ur?YdEf"):Pf"dlNqC4Y>H>eB:8dk at 2Q3mNa#J`R2:)P=-MtQ6OG`j,eUj."1Zk
+%p239[K=t($bRuVs^#+&$\99S!],l,ZhXebUHL'At\(b>h_f"6.L-=,ZcDDU7_S/eB=aO5HnU&pb4ZlJ$GkSan_>*Q)oXn,kc=B,T
+%k4YeD]2\ZU_N;3<<;58"#s6!W&eb%0C;N%sWTDbg'/sQ;S1 at R-+f`d<[J%d(7XK'jNo%.2WH72taso,UR!Bq at S0hl40r3&d-A%g;
+%-O6oE1dfUrQcN#4Y%$KgHZ0dtG+Hen3K96WBY2;f4j8rH_KCg.a2rbZ%\?`SAF)^m?II)XoZo7Ag5XV28T"@\1VpIA5!lZL9XQt$
+%c6cSU9##QpSK^!-/l`t)O\7'B11gnm((=>"A'Tl6';d:KgDC?d1LCtPB=]d%Qn;sXK#r?"+uVV!5Bo[Q"P'Oq3g,?79L at e(<6J33
+%TiF-G=3RH#eM8.G/QSC7DaM<jOk)HsV^hsU\G($YO3.jN8.1.eE\A5Q2S<?)2DXqX;QuG^<+MC)0NFo!l]pRJ(REN,Vlo6jB3=>N
+%jU><Lc,/)67 at 0IM$9$B8\]-#S]bNDaH3b:.EcEa5 at m+%HksEW^jLho:Ph+]FXh;h]6uHhLFCQVVZPshrh"sNl4/BA:+'cEGGO?,J
+%QL6Y$j^LgMZU/j0FgUf8_.>DR[!,r-D9;:i-NORTmH.I,c0TF2n+C.ThQp!.S1Me?Z5 at p]R^YI$;-O46Z79g-Ba\!2aXijOH8#&&
+%8bKF?L/6rr*Y7[SDe\pr;XKGi:g>KH[&S-)h2';'n#XHjn/%^g3E[[(\6"c&\X'oTk$(L(2jWTG.A,%OoS$;5F5'qI</Dpg00W0U
+%ZK1u3')9&4?-%FO<emh0V,(!][!iV/6nAq*8/>YpLdRT7s(>]"5=T2nfqbRJ&b!3dCU_X;*ln.>mqjfJWam;Zm]#*g]e=o[q`+''
+%["!Q!D!1`1TpOq*>OGSFX*L=4^>;*Ccb)2JfG1$aMt\L`a2&Qkk'`Wj^ksY1WJSQ[=O&8UqFG4Xp4a2nXl*)]r*9*(95^FoC at Trq
+%atF5^!,g_&_$`]!`kn.d66#=%Q"+&b-FF]Y at QED2'kWKV at 3H;f8;pUq7OVPrQo'[!9>c6V^`''Ej1Iidok[^p+^`b_^Q7;8&=YiY
+%^O*52VU2D5`X.S,B.YmRZ3Dep6!u\<0,KsH=CP-ii2"+g<0i-qd2'!k/1R36Y at hq@EU<E-]L/3U%%0Zj"ti%06 at YHN$l71j?1oFJ
+%D;iHm?HB$LAaTRPM$k>PWo,^F0'DT__'^-&@U[PoefM.oq.)p5]Q/)4Z3e5&F.Fr at l(4JA_^.W'*%)04N++b73/2%fb.2.*IK_id
+%[Tlmm&Im]#(1DLj^**s,SbSOA4G7'Fg:,N4XV7IMegR%7lD at lur[(<leY))Onl0\$!g,?$kkOX1+(K\mpRJ8I7J-UpqYr<]LkCE4
+%hI-m'VPPetn6d+\KKG.mrs5g8\9C"TlfU-:93:f_F^R$27)f(lFN%hFDbffGCQ4rI7/mdiH2<Q(pjBa))Bi*,pW*LScolrCH3ttf
+%X/ksY=$kC&/&CHgrU=T"$=!9"?,$4OJ*m2'bMt%cs#k7IJ&9$LLC30K^Q^AN/euU at IOQ66>q24_i^rS4GH"uq#q5U)hkbob=&UYP
+%rXK[e\ULMcic,-#OtbEnE_FsQbX)bNY/2/0Yjn!GW>=Nc at W)#5:lhTX*n+6<'P]C%<G&8Sba"U56F"$]dot[WYgA@@:);;CF^M':
+%ahM<%AB\_G^#+P(KYb1nh+/dGKe/V3>h"4 at g'DC)0GYJ>:[%p^;(h>PD89"^hi>Dd2WH/sj@%u$Z't.p1K*5r0bWXU*F["pq=4P&
+%;>NGY-T&bj6:&+<A3`ATIb4/pk/!`35WXReBoI&!,f*1>)Q!!AWNsIB`+TmH=0^IfKNRaEMf$\\'"&A4<[-U^SoTcq=lEFooZ at NU
+%iq?do_kQp<NFRg-/.n1ZJRj%bAdS@#a,$r+"h'D*R1W_?>g(eJq(<1.j7raj<Gc5N-Ie:;!_G_;N*7E2MAc'T&c?LS`q8RYJGPJe
+%VFfIT9n!K%Q%%2]0(`A2[erkRJA2[B=JL^ZV]VMA#JT0)mQK[gkb$eKiFPI#hrprgDt!bsDfu`mZD_3jjY)T3)iAh;'T.)(n*/ZC
+%VuD]\)+6Z&ddk+D=n&s8G8L5\.hYMN^od#Y>P:pAlg%p1G4Ap(O5n:<]KLZ;`Hj2s^TREd-5Cq7.QUJS!B at QjSfLAi0I^\!8odL0
+%p#Ni9;g;kPY@)>hC3l^O841H1[Zj2Ec"l]tD^Z*n/2"[-j4&WY!:J5*cd'=<0e?%S0NQ$8csCf.6XJ@,jei3L:Td`'+8uafQX$Y=
+%!?=0qDHF8e]4T+LETL!AQd36b^b0eg0mp(1qWLM>"db,shgt'a*/7A"IP77[a9a8:>['#U(Rb!0e^K[ID^6F-?C+5%.`h\fJ+?UN
+%_KNA1oss,DR)W:s%B.QlOnEfF/CIUVrUWn`LB=XfW1PNe4e#klh]#.=-)m[@a_U;j:C`hc8.Ld(egI1i8b:>m:R+*OGtL?rUmc>C
+%@6.6]gl4LIB$$j^Sk<=c\rhVm+Hf0]o^U&O/g3Y_39Z])%im6q63=!fUsR567=09#[D/Ls87msp#\frn":?TN_h/lfj%A61E-mXI
+%BVP at Z4dP3hX)ds"lSapXPHUhQ-$e$R>D3EX at N@$Yl_&aJ'BKOrrWsS2o2hWR`$N5 at Ak]\mp(gVRkY^FBDhSG-V*=-fnY!=ccP-Ti
+%>6(i1d$dT0\jYJQODO`7@"A7$.CNt`Z/n/0piYMe,i['dC'_t1,>]#Ld9P_X@;>ILVC%pU8s.@@[*[6BRM'$&5dV_][N:)[\UtjC
+%gL$07QVP'6q>\$b^O[;qe&LtF'WuWO0'E7V`d`RE/l<P;K[Q6qoQ`bsAKDdj7bF,3>FunPaWm7?)LDs]6c_CM21j[;,Fls6]QO[R
+%XVqhhk7Bo)+`n!af?h0X$Dg*D4lJApJ3&O=5p$C/Y^.D/o%";J>amLdRAo"\M=Y2.CK!.h`l&o<1k*X9RS^cp$I1N0b_8[6+1*QV
+%96%Knje#G`dQ;sF"YY1q'DD=Lh8^VWhn8X=f7/;Ml,39"GAR-uoEKU%R$hBY\e@\e<-1l4Od?-QX6$-tJM<%jZr]:gCg98l,G2NL
+%KghcU<1<L!fum?hSI=`'Bt8h4.,)7aH=[tX_Q+)H7e^Y-W`pV:LjSMt8Oq]E#"MjLOX/F'c45He!(]V*Bo.%0%MI%AW^DdD5=Vg,
+%;GCf;BBbtLZalTk54q3;i$.QG2Qu0k*oq#\"q at S[7!S3]Tp3J>o+L.k+t"_"bAu,,/,`_M>r_+!V4RP:Sp;q9jJXG3kfN472i6t'
+%P%HoA:(&MeKC6I8]#24[.iD2h$n8Zl.5n*R$J1PUl3q7T=T<-p.oEGZKptq;PqaMAPMltPYE[sS3+IIV87V=R+ZH5uG\%(%oIT[s
+%SBP0g7U=tTZ<ur6469j[DP-2#s':pN4hBbmEMoYimVIn[I"0EF1877=hdHGSo/"!BOkKIhr^D%0bNVfp at HgZSG,dK,PR5o%WG:bX
+%D3p-+1SaagV\pprT at 5V2IE6.UnsYck&t?657dYb0gFQq%1H[F0gZ at eh.V2SW[/Tm3;An"7-f__!1&a'+i[J8T:\QsC],3B"g]At.
+%4$E!3^&d);RY&'q!q_eBr'g,#(u2*gPMO@>%*W"mE at 6%U,PZ-C!Rq-0bmju_F9"k0'-t/V!4K3q0fp)S99IFP>+^]`cSmuFq&.LS
+%R:k<$)!JpqEGj*fVogg7?')*p>.HI;@IF:g#P]i%E,7,65Z/c5i3BZY0`X at BZG:&'Q^nIf0[Gqso$ljN>peCjd2urIV_5c-GqNu&
+%N*A,7dlPbc0Fp;"cTj1p^l;\W*6`tr*#tsI3-Ys)15G\b)acb>adhN#R,kU at CO"9K!(sA;YU=[YK-j_i^q&0c$(>t'&/3=<4&ku?
+%C at 3"_4;-,BjO!OUj*;,?6U&1&\qNJLeLin:gfH36>uRXt@!Mb;m9<6dcbjbMJ$im3#\\u2mkA`A9O5GTL3DCN]C*pLk%j!0`+=_k
+%]#X$Kf4aU1h+.5[\!C=:\g+i-14jK]'=dM1Fk<8P5Ms%NfmS(4[<Cf"q^^L;KC at l[WYXRVQ<,UQ\T%::4g[8MC<Z24Msh$HUC,&3
+%!FPRJkGuAZ&TBXh;K?"+P3p1Zp&GsA6_n:o,?2HZ4&D/0R2\@+%7&+F+.[0X>!C5+*Zgb4LRBg$(7&.VZkp'V=ATl?,(>_-L(b+a
+%&\lGX`0cWPjcmd+AmE^$BsM2(+h03qPC8\PBVH22kd67N9I:753T1S&94"<Vs)F]r'+<1_qlXR=nW)hkd;hgGn%&F7Y.3g.q:`,D
+%Wpd;A*?LuWmai at EG$H0Jf$,QPQPUQ;ejL?Z7cOD_c1.'%lUlW8meO`ZAsRR<bIm82b2u`kGca!Pjqa>/q*P+5:$jX.-0KF)=EcSN
+%0hmI8(7+>Elc,B<D1.,X`V_o*VupC2Z+)@JoU\jt8]Op;YTs6O[%#1SDgT1$ik"J_k/skkm?jb2(JO+G$g)TNDu*eS;18G`$b1CV
+%ZCHE,`TK2&]Walj'iNVq?DcXE;>Ge[]eE=ZGOIcqo5ELbe+hn>VgnABag^=[2o!+";r.])ql/"crY?@)1Pmqp!(&J.\a?c at G#I:-
+%>2d6+]rOg'jPK>9@$T3JNmmIOIgZ-Qo:N,a7TU#oee!,Xe#K:jWp4Je;:h)6P'cDPY#sJ]Hs0\FVekYHEj^*uLNal5cqOIXkCGeN
+%s*E%Un.#BKjE&?.Hug6.B]Rl`kZbE9`U/$Xci4]*2ju`N>da4c;bLIY[Ih_g??8c3Sthn9hPVpaVS6e[lC6PC[bCRE'A2r64aUW$
+%\M'iq\,4cQ2Z:[Us"6ri>dXOW!U$6/s2XO,qN<")OoRTe!q=Eq>>tTG(@LaE)ns0&I`!24B='5)D>aK.SGng]F1UsX*cceb'd*/e
+%ggeoF/H4(]>2o5,]Hf44]nt89)B6H-1HKN2c4$@77's5]'Rd>4XLum//s5]?[8-sD7.%]?FD;/2U>[eag-<ni2b5]u7`2a\d-("t
+%p;1<=!,m7T<r,@(Nn%Ssa#IPg<u/1S0(X-a"E9aOiD\MY_q%MSL1U!8a)>a*a6Z)h4D$(#lN_&E_p&cu0u7%bl>Z<:"7sH,?J9#e
+%Z9 at lps"_V->_gKHqjp6%Q&pETS-\RQUs@:C8&F@,.!$<*8oDT$M*OQOIFS_-K758O<p<ip1^#6[b>@KGnrGnKk<:jRe_,U21K'(H
+%dn,W*4tNWGEm'rabW.p=Bl(-@%Y*lMf;PamMXBea?pCh+m)=WcD`suoCiE36$>Z%=N'NX5l0Tj;hIXP+3s9Na+a=6mQ(B3?HPWj5
+%EZV4aT)IT<Quh<uC_.T30\EM8-9GJ[*pSViVa&t05[8 at hbT%*#.]Q!\LgMGrN52uaMWtd&i]SmQRM9a-M\q#U?Ug"LO;;g[7smR[
+%30iX.1h7[OR4p">BdFHP?/[`,M;gkLfd at 7rTi8ua@T3XtoR8h,cAu9E7,=V7N\Lb"c-A7k`2t'I&qf0Sa0NNke`&;BH0C>(&WS_d
+%o at RsQGcK<Sq/ga4CA72tnI<@HWK:+L*!V,k[^%3C_.,*MHR8j4GK,?;r2u64d7YRJXL?;Pg:><*/dbXW77VdiWNW1ne\dDn8_;?;
+%2#!kT8SZ8aX5"Xc:NJH0WK'nsWq at W\hHW[P02R0_krE5RkMfFqA at mg$ZpabT6>n'3C?WG0e43qmM8Y,=FatLC>QX/JCcg\IU6dH0
+%%K85E6)cDPcoR,ucP]^$IAYs at YOV)?;D5EYne29"f+5K(8FAM at jI`?_XBt$G?MM[0-8p>Kr21(cDr1Kl3.sDKjY\s1]hW?ZF%"nA
+%9s7Kap#]HOYhjH^DgSsShCJB>gXk2kme2NPJ7?h(XfH8df'Ud'?"(=bVa'!9:N"]1CYb#EgGc;#h3591rD]Xs"B1q0*i"]AF$?)i
+%R!ga[R?!]@-"K*Go,S&XUGl,[A'T5 at R?$`5C&6sQPBHc9][$-ps+2DgSm,e&8r^qA<NCMmCoX2S1fp*:bJ=aO9p[:q0e?M\s!U=-
+%hlXcY=5m5Pg==pS#*e/dSih3%SsTH1I1lOqMYP@(\[]mprZ(:?)As)?$#<T5/LL(s1V\%_,BnP#G+5&hfp//bjmqiH/KO:rcE?DB
+%`Yl5.U9.tJQ4frKQH5"&S'cJ<V.moJcF&`3/!jQ3oKCeoJc>VO\.q\ce(TUG^?66GbEqC4>=D*).n05_8;cmCE;\4aWTL at .]/=J@
+%0lkFccTE1([BVW)XDsMO)T]6>FD<TlrRFbD;o8CFjF0=$C-2+$9&oaNhq(@e4a("1mc*:/Y1KEl/RKer1!5M&X[Z"%or*8GG33&_
+%C2\7,i6!X,#al?=KE^MV73dIPR0r*df+#bP$k@;LkJZ/`K+/60DH^X)RS,4o#7^E$Y*h:^\7MIt$f>iP,ITOMAn__lmaoiJ?;"\&
+%e<(ff,DuBC?FL01DJ'I]3Z9")q,H\MR%WBEXV/gKI-EVu&;8oVb0_UhJ=pe^LU/h,cHL_.I^BldCpC<dIctgR?'!MtGn/Q1_(T$e
+%n1`l_B/\"'>%TL!B.IL8?'[5-.?07SMiq\nTl0MlhUCk1hsKte'>)::nq1u6^JR:)ia,uC/SDk13K5V[@$eSu&:cEa=j at E-,na<M
+%D%%(*qLSftk/XVP\>:]s]##el6Kc7rYX?fY$_1!>Bg71?"#->T8%mTk[B-$_>Af?m(O<3jB40jgI$$K8>KTuEk9.1O(R[;%3jm7M
+%.i2<CIiF7KQ64>QKA.+I>Sm.V;Tu:+&./QC6pTjmgcm7NeDU,)+29Z)]'I0sb['uSaf.V"I`G[*K&eNdq.9D5$-8[2 at PK8^L?'t`
+%@jMusb&oD;_h'mnc*P1If:Q3sB4.JL`iM$ERmPF4Hlf%hh4W$P?JTG+hi!VCnQ<hE%#nBB`!83In'!,pf$rXLlD=L[^e7t]5XeCf
+%:OA/sj%:EiO/t2ai^lr:dFcnE;5K?Pai at eDLEM/-;5MT1[6B^pNCK0scc^^sBk at _`F*6?j1iA4 at T<68X<paFuHK+6<3[LKi-XnB.
+%e55-S8mFlC.k+=I741*uVhBq"$pc;=(8&.;Ed?Hk,<p7eqcrrgO1`e^dAGhb:_-oj#-TWt'TNi at l.hRYo.J6=#o!&"Q?WsW4 at h=<
+%;/PbP4!&ldBM;6km8Q0P^@eV.cEgm;X">CdlMBEXa)OLaVTJ088LOY*b;X_GX5*S/7SqV2dZ!"On&/#FWh!S$-(IbTB[q$Hoa at f^
+%J)@s>G]aalnAj($BjXQ+*Sd'/r>r"!BC;P-rNaoOc&PUR67B#+M(?=$-ssa1eOPup_el2HY'ue<?fpVA82a.-`#8CYCoSq9\ITt2
+%cd1;?FoTK;0-Bq;</.iNoCC)+I+7h/fCKSsHn9@/3`7[Ic5e"tJd06 at E\^K$I$`TQ\_1Q,n(ij5Ft9olQ$M/#6akg9YinJWpE)Lk
+%bq*L\bu8N_C2WlaX'XoMm^(01CLckR<_l(>N8l?G@,"E.r45Zo7 at u>WqbP')'Il694gt4]T!;>4a4"+>l@"tn<M$[kO_e42"-5Xb
+%bFFOg:]2<bFN(/Lg78oK/UXm#Kc)Z/hnV2J<1%+l)_^?CI4EHCNB2A4hs=9ML>c9BbW#DuQm'ZG!l!@&pt2@^?dCm=Nu[Im^&I"m
+%r17QmR6U)lJWJ]*=d+D67X`n]X06b,OBYf!qqeM\hfQgH'^32O`@(\6rR7h<`8!fPBPfIF*;sTdqc]f*T;]X[jtl02E&*05ETuL`
+%V>`)ar=qTc!efn03U8l!)3hbocs6]k=&@YnE]L`HXObLV`MqOkb%qfYb1S4VV(1M"$AkupSVhq?pUiE:V:<lPV-0TZ_<I,qNpA06
+%XIR!&_>;Z4A&Uu!)6F--VffN=4+<IDJmY at _`,8saE?qVD6I2F?04mKi`nT/W;RdO\]"$^E+BQiXRp&qQA3WqeB(g'$WP/2E6Tj?'
+%nP3lk at dDRJ4-Ib:]S5"IN_>PuH`qj=mY:<dQ^n?NYM*L-QKY`dKlPp-1\^(6VgCh2fr2t0ifDg60_^C0AJ/_NpEi\n[2CH-?MhcM
+%pCb6$=KGPqIN'lJ:8cnqhP/NTeA(r6IG='N]m*6%dllIOYPU0>PQm\U.DGihpDb0CO0`1MMs+k#S2A6l)&Jmb\+"#(XV6Pg#^eYD
+%l>M&Cl"[<WHDk0f%Hdum22d$7nMn;-I,4-thq#A[CMT#=4N>^c:j[VYHFZcYi;7hB>d\$Vg4I"22PbW-U$n&QRN<eqn*Kf/C#r!*
+%Tf(<G<h]:NQ)L=\XnQV3B6>]j7O@?s@^bkTQDO!Ik0HMHZQ at aV8(-0+]39EtNTD$bT).h`8,VN]\urEa8dd6Cd5%m<Po.E(kFB\B
+%8'AO#0$5a<f6sf5cDb?4T3P^1#c5fQp2I:m$cLbbe!r1^Xhe$>Ds035X;!L?hbe,MXDso`%PSWaZ]%1"R6aft7^28&.QRm%T02>A
+%eadG$QAK%)pI=n8NeD<IZ2m^gR4t\@D\3G'R-:t7ds at q=SS3G$JSt=#HHm*t="D.)1u.0b]f;YUGWcd)55iY%WP\EDp\=*eqDAlQ
+%^L8bQl*(-[Oo$r,<"m""`S)ur at BkiNF]p=bA.*OillB?BAP9%jCpg,eI9FWFZ"ID)@TA=d0 at o]H"ZF<g[9p#Q at X2:<M.tmLb`pi(
+%nTjoR2pRZAb4-AHei1p>g</q["#?GO-FdP6\Bk+,g#unRdT999r=7N[BFhhCL&Ll9bk]l(T,Dd/ZEJ&"a8%@Z)Db-lGpl$1oM^.$
+%F2U69;3dW5mF/aKGCYJu6B%U,EU4VDH3E;4`1Y[W\(1/ZID=*1;.nQ;b2*>F`:q$,^E;.^FThZ9CMo#kn"Sm"gL-&0gD,f]J+kJm
+%e!^s;(sUXeih27)h9Et;qZd"9k0qNP">Xb=Nrc'BL at o,SI;@pBU6!@4<7Akj.T*POgctFE>*e!2Y.+VD*rN4Tk:5K'p"fR0l8g\\
+%d5rP&qptdiU]5X8fA+g37]l[7oX)K=q9E`)[5F5bf$`6?s#dF&fU`%Z4h0s-`QagIcg]lJ/,rNApt`X--e?o76]7o&Pu73=$DVA4
+%P2Z%_j.##Q-5S%F>s*?`HI%2ODAS\G8T?B)kI?i%fV*$pR*Y2GcN<E8i&j(rS7aY<=j2(j:4-]*mEBXBh(tT^_EC]%8'"\7-)@,G
+%oJU`[;3l8Ra4[V:S8WRjQLfqQkM]j0F/Jc;*2g]39jC\>L@]LWmLa(kX2i."3XK.:pNXKZ]qnZq.h;:gL<3e+pdY#5YP7^A<J=gX
+%'o:7-GPV7JB%@+rl\]sFi`Yreh>9oAeU.;F\TA]1c5e^@[0VFCdG&6(&jMkapC39h:Fug2+$\<P+]MkRQL.$t0fXIpmShU`5*o*`
+%<m;.f^7Fan(^J]Wb^Xgkl/V'Xo6E.#ifC:Z[D2EQb:>asq`KpbUUl at J??2m_osShYjY\*S*$8K5^;@ftP-<0sGN-ct\B:U#2RkQo
+%lkpUHBfLFN&:53HiQjK3=8n0,1BRQZim0TtO?^X.(#(pk at uk*!)1):@[9)nSpbTQq&T^0kMDhP"`iY?:[b&8P0&=jW:Y)'NI^6;&
+%./[+m=h'Iq2sK#qlN:nkQbV,#Jih-Cn2`Lg3UpA6f!)sUR`Z:i2[`+E(VeP9Vk4+ZVIVb$XQalq\&riL+CC^dC[oF%G(Do3mb#uo
+%2[6[tM+!p&$ob7KUNsda="HAY?i!s`_.*9R*g't0HCN at RidNRcCus8u3:t2"+c`_CAbs4gr8:&fbnE>=_HrIVpbIjOhB'8SFJI'0
+%=g<jt7bb,op*/3c+trfC*kp at GKftBRiS3G=`m*C-<Mf,ep&"p`G>(02^YQU&`JX(*5CVsJ)Mbddpi!i?d<HVf2-'LQqHd1Z=&e'M
+%`;<<@?S&qkj2^n$`jbsSlHcqhYO?WV&DrK9iaO`1I\"AamS]<,lX2&BpoZ:Gfd-X_EVa2rJasqGnrP=c:++!LTlp1hmVXq@\+dkk
+%7rY6uWq-st9"$kYbYL?h].6&SDr++<X9ukR1[Cj[oAS*_0a98l)8Gp1<:Qk1:;B(dT(qqLP['9k7j%"iC]7M7:\%L1o9-NHX85_,
+%cA&HKUV>O1Q3NiTY1h=D/O-?f[l!4<FQI]:A6Vjt4V2T8Ci'@S=[rZJR87HE=VUK1"tUf6'.:s)^pC:O?3<;_&+HqAFmWQU6TeFD
+%A:>&e*=VhSCeLCa?eRHb@,]hfQi$J#)`LnZpa3Fm0",ikrn[&$]SCqP[=`<!T3kF:Xr5D`HtDj;Mj^io=JZd,5>//OC;KT'@D//4
+%h][7\`hu32Zm^bmbJ\0?m58k8%NJedi`.>V1,4'Pd=5m*Y?5?ZdO4<J06_`.KM5&%B8IaY:q_43r-Q$;p,ki+34Mbpf^$8bYI_<-
+%oD!H02Lf\rL#`)Cp[D?nYENk<qjU)3%dl#;P=u+Y#YZaE.i"s[2AD%58[Y3sSCP`&Pf\Y at q3j'aW at Fkn\)3uRSj7r^-8b[97=l/7
+%17?\699mT"7ZK:mdjpV6Pi\@(1R<l":BV^.,X9P,g;rF%V$0G#+R`RZ9V820AR:OW"Z9dO)(7:<P-VF74 at GC^,PdcSCmM>Q.?!7\
+%MDFTcfTrr^))"QaOL_d`MPY0U[302/A-FtTcMcX`1.Ue9:ZS*[PHEV9rG#UK\@0=!fM.MS7H[,>G:V?,=U01dEs?YL/RY.[&9/%.
+%h9jhBheSs)"&\hC'<a/GbJ\2%oJKeJROik]QG+\=?^%=iajSeZfP at eb<@7_>Obq\#l"dSHq<kH.dar$oCU3Ri=o+R<I8,[6-;.]W
+%i\am8^dEHCQG+\=?^%=iajSdOl"dTs2)4gn/MZrK'<a1]ROik]Q9P7]?B_4hajSdOl"dTs2-KdE(jeuC^<4B0ZLi^'p6mO\9pWL?
+%94*mZYK>5EAEdl=m,)#Vlr>B=A`>RMqO/s`qU<)(94*mZYK>5EAEdm8oJJAsROilPM1:_"ksTOfIJM?anT2H>P4C8Fh),"GdFKt]
+%Z<gC'9Z`-hQqump9<rS(::p$@O'\Cm^MOcGZgf:%1I"uBlA9(*q-_O_FC)`SRHYFs5;`E6Q"Tg?bDZ(pc`DMs0U0[PT at pP(?+j at c
+%W[@qGqRW1[p%%tFE`PD+)!Vp\fs<?f]NEIJ-Np:A\stqVneO64qICu"<]\>q<+NN,$coCKC&IJZe%`Wq:N(a_\bl0>(_Kk7p_Wf9
+%1C*e_r#[Zoq.e1Em8LunFUhf>C?IR&N_G=1Pl0#G^D8goEJ8OTl-4OAfK*>giX2^ebAge;gr3:b!:K4dgeh6N0i=InX8RRXFVLGE
+%+`).ooH5'=.47l:C/k&Q;L=;U?90QaNlF#4&3!s%pZ%)@e(P^s^&GU]CDn4`7WEN,$-t_?2rJlt>8N2AT:[tX&$qcqE6mPqp[KW\
+%4jJ[3_fFk4H-LsoZYA3+8rWKb#5-j9_r:^'he?ooRn"]=?[S^>W[X;)%G+bl0)^f;ht;jR7(VCRqlX:I`C4#K7tu#"GTRrDa+mNF
+%W4;?,.Wms'7XQCPPaPdpM&T=O$faVoIC^?TpY7`Jj.&<U6>m?@IK23-_^F$'jL'D^)ZF+h<HZ:X1%OWRX6WW`l[c+acrD%Z[iW:&
+%ZAA*R[T\.6kXNeljD_<hD;%1#&t&X%GLWpeJRgN`qR>??9ifK%d+YqfS*lnbEnQcIp2(W@<d4!#Ieio>&"E"BnmCh@\YU5X[Ok8@
+%ApsgLm#!>DN,_ESDMaiL)i=\o)V<;r9fJ6F3%(tXJqN(3\SlY'>nc\,`-'/2F:^Mbc=M9'N<Dt]Ea*"n`?f\uj+>b>>aC#&1!U-/
+%8ni1cSq;MdiP*uJZ%*Ok.hl(ef,"_PjDF%C\$[N#O&c`]I4:htHD3%p]\,`-!6P9U!C@*#=TFh)L_k,66M3%^&)3al2YM1Y=O%)A
+%YGLBhX4lm7T+ZO.ddpmcT=)9jU!rF-^N;P"-gm>#qr!i*g?EmdI0/<'T?_=hm&2OA<BVnrVE-*4oa[uphA>^BU\(t[e='Zo.&?5Z
+%%8dm]Hf!U*lmW))?-;#I4XBFVmTC;#A/40A[GM[G1>?TRdr(dt8(hIg__tYgdGi3Nf/=BA3)'PePJLHf+2"1GQk:C:K_mdgI\fg*
+%;a7a*iMUB1VHMl)RhX^QjtTO:%o^?o`H:T`0"=We`E6S%$T"-K<L;$D1,54f1RcU*Q=`$\Ji3')f!Cpu]aZBn.tq\*.$eD7Yt&e[
+%2.2G"M_QlN at Wb8nUWF:.<eikR9_'Y at M+WuP/5!N8'U"rB]/R:'/bp<_?V/&YpnQEWZeEbBQ,ar.L/!%6Q:,OS*&S>V.#V!-m1alY
+%,]*;'eUNUk]QPpu\6'_2(AGZ9lm?N`"bYWu_cLOjl(6$n8.XEdSqK:'5bBErch]#]FANk>+bsM5'?t#;'Bp_`WOZ0oDR0)p,Ji(?
+%#=_&80OPYm-daL=J--2DnUL_2p*O1_/C(cGJ^'"d)&)eDXT(,)?l>QKQ='W^QX?W>a#!JZ\N;3$o?9 at FmLIAh4F=C01NlTAph'70
+%kgCjQ:ceO-]D0$%Pbr\K&ad,?<V'd"Dk/Wo8I2AQf)/N:X.EAPQEJl-0,2u$>)-f4UNN$V3EhcR][n-(3isr:q6Z#mbr7\5BsVs$
+%g95*lD7'#c3^i9nX])SX8#@g-qdj)2XID[0RoUT4 at Tq7@PWY9)FIRFNeP*$'f'HQ\U4k7AHlT`_EA1eT%JV7sCpTB$1f%mOCHF++
+%K%O_Lm$i`m014E2Gk!_HZ+kS]hqrq[0RihW01#NumGYr9iuH9,pijE"&VmaffVLRF*kNirP[V>QZ%l.H8(7dQGn^V1g%N>EG-$=h
+%XUrPT+;p)))ut]^-OP=^n0\?(Xnh-'fX5ZWKL%Ze!QA#3b+\MY?pEW43/W]Ue'SX0!q/IHP@`\ZF'OfJ-F`*A8M7qAg]]Za_n02*
+%W!2Fo%WCce=po$X6REN]2X+(8)_c,a):R`SnX0X'(/q/q(pl60OP9pjmW[id(Xqi,"m#+O0&U`a=8r4P'U#e;Ir`Af43Pn at HfP.`
+%Qs#r/D\m3Xs1`dXf+n$W+L[pAG$+Z+s*t%H)#Z\qS$%#*!T(rumK,TH2cim:m9Nu\]^=LX_ at 1iU+VPkW;>7$h+)RQb?/.3B at cG%5
+%bHJ4ArcMDHn]Ta=]*-E7e=A8'S:*FPo*Gl89S?,aQ`&Oj(L-<E*W:#4)BISS/IM04l<HNX6B/o`7M9d3/uOmn:.KYd``smZ+gZLM
+%;eg/-(MgA1gSa%P\u]pid/_LGVo';_0\X4IkDBM[o@=:d^\9&k8/0L-ofr>X)0`(Nbr;VU`jeUSo`bXmcI'V$,7Fp>X^"26LU\?E
+%+l"3N5VgM11ZPUJ5E/gIhu\W+RPY at p:OWE-%`o at N(QC<r`(_fr3DZb8_)VigDX#nl&dr[)5-.Y<.m;Q\%5roo<B5UF=u:8_)@LL7
+%o68QrGY&nB&2rp.UU1;F?P:_gF5s<YYHJHi1Z&!t0RK<%Y,aBm8=n'a6WQS5D<li.j'>P><+tHjBY-rqhVhZ"4]s`VOOJ3Weg3W<
+%%UJGur4C^Qcif'k)$8]J,p23Z>/8AMPeQs-DLCGo*3Hbgn&&D>42o_;[+4XkID0N at q?iDc0i$R1]<<CGJ".&dH(%'lZeafd2%&&X
+%_20to+b48R%9H?qK_oe@;$`ICmgGsXpNc-BdXA:K0PEe>pcJ9+BBrXZ2.LLL,btH6hiLsm1C?^iTJ]Y$g)b"tb4FKB*W:"*G]1ib
+%:8bP_(H*%TL*U4c7=OZAEj'K=EX+Ai9oa+^4[qV1FWLD67nKo(YBnXGeJ)p;;d.VW7:t]V\s<%Yji)!CQQA6a'\Um3o3;@G2,1Z8
+%=\+uaqrFR!2j/nklIgJU*R;dE-ug[&H_32I-Cl(_(JU,D>U9ck#+g\gg7?o at IoO59-so+1h^(RpruQOV_1tg`n3<-nasjP*Jc'tl
+%Y[IS/<6iX`d(>gj>4iS1n#,a-d0Il=5Yc_46T0Y7V%7o?T\FeBNXKDoL>=lMVjJ&jX\=nG+;Ye`PYJOkGI?o%rTq5l1UiC>#LS.!
+%Ls5`Nh01Wfk7[f\ni(E0YXH5Ppe*Z%Ni!mhm-D=M8KR7-f@)b)='j,tC*>cqZT+LBGm;a^S"#75J'Q@=C`T6ni[/Cfc6KG-oU\02
+%YPWqF$i82ILO=\%,`Q;Lg4Z9ljS']C/<dsZc'Y3YgVDJ-28 at ajhQq,I5FC&\LWp%g]!@3IpO"d/JW!Z#g<>TnZf06>jpBXO,:i(^
+%,-K,&:Wu*sM%]<:'gnM9Eh4h>31'k4=Qk>OD(O\Fc'h\1ia"+pltR<#LcpEL=]k'rO(@B^emU%?L"L/n at YOS0Pd!t#;qtbA`bCc!
+%iX_SskRb*+!`MNi\r4Zq*qchLih\i at A;VJlXLhB;02LjikB;1GP#+ndY*6pE4Be/8e(%"#:DS.Q?K?nkmZnYS=&<Y.`DYlP_P6?#
+%b3efN<`V=bQ^Ncq8h24b:8"R&aE<ag/ET.lDBN"ODL at +[Zq/:2P9guiLDB;i/rJ)^S"ALUD\Ag=l3U"#%jMA9 at 8<RZ>qR_3ZZ1(u
+%+)1/NT,^HZe#A33ATL^\eXWfnL9n;HY:^acQfi0(domZYjssd(F&6T=q)tWWnKj``^(C6Rg[iUWSooLshQ?RIVJ#.\YI6SY]+P$X
+%^-_LgY;#\kH9X^p9bs!1TCrtb+GVhu_0ZKo+-1s_:\tIm=[)EiXAABYcq=Xn_F#sW+!Ea2+&R]Y,"*/e>i?oc.CPV=M\'6K#\,2m
+%\]ba050fN?NA\hu*,ds4q9Z$6(Ie&XA>,JAqbYN,`tX)X(hAXn]M6ru0D3 at ZmW!0/Z`.IKMDeMD=o0q[*,]l5Xtg)X?JlB-Pp\";
+%X_7AFH`TsLlUVNK4S.pISimKB87Yi6PiONf,W&'Vm*A_hT+/(e9C".4PAfb at idPN<+7J8sIWO8Q at Zod"=+'9=ZnoUC- at Zh7p*HnY
+%.XF)\:Oqo(b\h%TajrXgm6FgBf9UEKXm&IB_pgkLBlG(X-3rFBHaY1qAfnIcg/@<h4'ku`3p(EmP-+G&$&#pG_SuKDor;1L6fFX%
+%Aj/\1 at tMF/-]/0H2:ht?=Hn0(1&S.2ST*<"lpm at UDm@-(__tL1"h4hG[S9E<1j.0gf2!Tk'OYpsPArb1m8QABXb,IrEI5#R(\;/-
+%acg`CnSrdNgtNf6;NGY<"GrR.SO7llka7ul`=">gTB:._BP2Fmb9ER;MC\JONUs,$b>`_I3jTBCp8U\H+"ZS3kE\d4V1!Mip=JDm
+%?08+@;Q%Z"A44JK/_iCRQnur@`KPpf*BbsS2IL!.=XRIFdj!?ef9CTs(&JnW<[c<fP\k:hRWSAfZOo2<9ZNpaj#kc;A2/V4MMITF
+%Q`HX4[rb)7SpCe!la"R$T>]oPd at HdaD#5\tHj>4K%b0`lh;P at Y1;?>\,AT^?j(u$c&r1amONoS\\X9ZCF2fGL16'tdG4K;nn<Eap
+%V[5Pp`MjF35aprh]\3WV-1.M!LiXe6],G_1\RkGt-u6K&UPn?e,J?kd"CaUkgQ1sD/'a;CQ00s<BAYppnG1t0/h]W.F8VO&D"--0
+%II+W3gq".\T at n0uh3jfYiKL<Qq(pe%>]K/WD<Nm>]sT\a`P=Y=5#/A$lSHU*l?2W7mc3-AK5Jn7oEm<jX17mf[[j2I`+PI`rj2nY
+%B'Wlm!JjnRN-!RIVN]+`?R at 1ub<C84VT#2a*&BMS8UVr^i^&u&o,V++\i#YJ3WO at d37I\bB`ugGR3"@VSn(bo[@M6Xk<G6Vf1p]\
+%56%Tu^38KTo(c'mo8Sgn`VKG0ZMEWU]f;Ya<&WWKGqWb<E.7B]2nuP^D9$8/Pn%$85:>ruq,1SGjusNXc1tW9J3AVE;kWdGiA)`E
+%f>)!ZF1^bJD*)cr at Q1X&F,"n,j*a[gpN3%l[63o+VK\Tsh9>TL6^ZT5!X>IP)'m<]]``/5""5H<K9G-We,)=q\68Z40+b^:EdkZA
+%YA09F"/0`u$somml$M8'^#C\iQ$XU0H#<>VddF8SR^Z4>G2_o?RX'e!n\bS#)h-8Zr?l\M6:GeeY,#kCCaG4Ms0!>s(*E*Y0Dl/b
+%9AfR*hgYFsGG!cBr:9jI%tFQ00p(`$lgA&J,J/pliVfh`rJ-9_R,.Ih73,VD0GF%DP%QnKD;0B5elWUB#m\GH,d)FWA[>r`If50P
+%0=[OP;lhHH(N7qXng&3H,SGsX6mC%Yjo+q&pP/\0phudr5<N3-hu:OU`CK[sGCM>[p?_5'_hV=&#jYZGkU)V=9G at 5YdCafJfBS?#
+%XT.j<^1RC`jnJdRTRYYic#5Ojr6K*KR`^'S)?,YnDYP#bnKg at 8c&Y--T14=@V$9.oMU#UoZPgT%e!Xcr2+161:Z-lcjGH>9RkI"c
+%LAn<^i*;ZMZlTQ%Um]UsQe'J%>H4$E?`q9$=Xkp@)*f=')>O%)<7p><$WEgs:]N*L]-`p7(k0cgD#$!Z/=D+SGC:Xpb)er)L$Vr>
+%rPRcEmIcD3s&l5.Y_5^<,P1m-lLj6mgB;22m=3K^p,c\IbX;ilq\bOqq?ct&=i0XeLpVdZdPaV>gC/)se9lXnFn+Y(QkT:4A'Q:s
+%S"9K?jLLA,DY/Qb,TLUSh5AXRdspk'r17Q=ZF!@q>iUTU&=M^;reoeSJpF]uo).1Fpq$!Kg&.;$ELX_U0.fMBEsLJGIFecpO_E'u
+%7G*k;^rsGg-nI%d'#7>bVntm%.jTYM:g%"4+U/@/S1gAtg_CI;:rjF"0GG/8:rq^LBC#s3?n>grSjOY*N$Kfbp1=$2(1GAZoVPt]
+%9\V-Jctt2N!%CrQ"&Xe^$s4:_LkfFJ=;JenL11Qn(?5H"TeP5M$tU>_$Hk0rjVT3'(5(ho0k=FIOm^CIA6Fqtm`R=q=\c1ZB-tt'
+%35 at po3K1Zh6b(cX'R_]j/;abV>qq'bM@%:.0nq6:0u at V?%T<DrF^%elQXbi9>7 at 5Za,jjm`jmbCOC^FA\hD*cAN at T\dKF^Q#W2P"
+%0`#7q at oR8!MS>I^fN:gDmYV=+NPu%\Y*^oq=KJTe at VQ15M@$)9?p_!bi)iSo6RciM at jus;V$[gP=@s]'.K4BiLjqj]lNQ]3.g,?R
+%W.*U?^FuRZ77kJ./#f118]A7kWLu[O6+ncs&2(F3%kj5t35UNqiH,5,Z7IC0FThrS/BA*>jVT,ZQ5GKMl;<d'^I5=[WLu[O+`C^c
+%6&UnXHXBZ:Mis$I?VhkW>a^2VC_cnnYX/R,_oVQuF\s\^$M&U:>o8K_Jp^p'(WW6qA)A)eoasZE.EIhr4G8rS!C8KcgH7;,<S4%E
+%TKa,jfV5>&587,MU*u(1-n-8kGeN=T at nqS+RJ:a_qibqO7JW8,fFfrNpc7P62#C6N86TPn@;LAqmP]efr>'$;ShfK%K2G%n&jq*]
+%dC6N1Ur"W6qD6Mdm9Jj.J<rD!RmTV4X6g&@WmJd$ASpRAF`:Mn-W#:&A/Ki(^Y^^^3ifd5cZ)prJ4$rl2EOQ!816=AT/VfDB]ug(
+%h[/YMdg-b\%O2/9#;cH@]X+^P;Y>K<!7]]P^MEoTV#*%[S#9]o[H^NF at Ir"/Gr+BhR$AC=hAU#QNKf[h44<a5.W!?<)I5,[YTS_d
+%<=nL"50E(M!j/_#!1@\)g&_ZtL(TC1gl)MVad-dPdrTo+3/&%=g95 at n`_!29E:PdfTXp-9V`L`tM_rpQDAJ3b3G$;=6g$O4b^pAL
+%9&71]UlBlbe-3+cLq-G*n!7!Y96k:bm$)-u;Q<7KB'7D,ADj#[^,<!#'`CYW>#SX)h21VrRAc<08uRH^g!SOeYe!74o\Vb";6K9@
+%6?Z)Kd+KP at FpZ=I,'E'dYmZ1al*XG:mG,I#DSE1"CZk]+F0jM^;d7_V])O?Z)WkcKQ94iD?%h&pbcd)V8+1?1^3k18,)oQOa8.4_
+%T1)\#ieZK)\.*%,Iu7Rd20W!6\OjfOn"b`K#4RQ>:/*U8DgnWk3\U!0n,cC)l'Cm;I:9&]6Rd1j?9U07e52n-i`K_dV+g4_c%JKT
+%(WE=jLg>f8XDCGH&2U1:Qf1:h?$!7OqUS8En#:3f1CdX!`Jk72T95\aDLkuRB!*ZGd!@F07a*P_ at u"N)8B-Xf'iL:=`ckC?X^^1%
+%_.;iNko-3PAr19%NAK"Vo*.F,kHo>90Xp`q/9^U<S(&2FAR;[YbYM)A+SfjIIT+U`I:k^gV+K]+`<_LK_k1f"KX9 at o%`]GI2G1OD
+%SDZBUbei`3MA]f(Q?pNS@#L_C1&HDJTbt4,)_%jD"_fY-+i?R8!7^ATSB\C/_$/qPMD((:gJtc#Abb_ad1O];[Z%^=SpPO(/i9hE
+%q7'QR2S91'eF[Wt8t$U47EN]<*f9qRM'!;m7Uh9b"[Q6O;m0o'%85!WY/.t*'3m)Br9Dm$o(c6c?B1^dN3gD.:R4kR at dUd*c.]<s
+%RJ'%$%C6VLYQisO8-RE`nJ"[T0Q=;i)6o2<lQ6en8I8RkBj;L0GRkhH[V0C0A[u8nK1;t99<6^(`<p#]Au;iGUY1]dflsgKqJtH^
+%#_p<Xfc!HdWYb9ZBcr_$Tdpob at Rbr;)Hg2mFV'[K[)?i?SN-#[/I$"PoW8lR^f#D\'%WTn1Q(TS<m-ZX1up1s at Q@j#R_mFCbqcA/
+%&-ap&3[&9<LbIp5'!IMP"VUWUG[>>od0#\>@MaZI[*/o0'HoOP.QgUpq:tKG)YXVc7*FbL[B1Wm$N>M-R,M>FU2Oa!FE(//G.Rg"
+%aoh,@`oM!Q%h*7cYqS'pO5k=i<3s7RcpPhqd&JRkM)`j,`(kT^4EY-_QHL:uGi(g`edSKV48%+&?VIDrD6aT%FM2S\@@l[kHd)ce
+%Y[M;Qi1_oa!K`#LJ[JqBL1n^;b;V]H,#Ga&7 at VcMW27JWVlG@4Pbr;o"=Fa"hlfq>f.CM=YE#3:9^X&%C,RO][5Cc/O2qK6l#$c<
+%3dpRpouq+ukM;(e?AsrQA<I&FIW$Y$O!@Q(B\f[U('YVP@;-*3N'JpW"t7*No7^VH!ORHT@[]#e.E>U')\"^5\aLKI=Bba(p$Fn<
+%YjM0da&CS8n\eAh(=YoumAV!;_,[6375LIG`h:bK"WssbG,*=u[j45/=]'"3Y\("C8CoUk==pciYAb`2>SsGQ"4*KOe:Zu$alP?W
+%O!RpVmi_H]_m'b7%#gXl+CkkdnKJlSOHm(G2"FCMm6[,`')9jG!nJfe>B-&sOu^14&hh?`*',jUfn%4HCi5aOj(7OmgC?&YE9aBj
+%6k$gJ!*Cf\c(=XRhO$"4#i%QKW6u$n6)77Abh;$8`V18pL/=,8+piiNcXil,.d:*XlU__/TV%_%l#cjH]bm;=4I`<K_36iR"`\'3
+%'sn4WL$4O)A'FAH`Ve-uZTBbD"mu3t4"N#N/&0!7M at 6c4m'<)X_AY0k2A.`8MVYeL8EP2q8Q&/5Cm%\80M99:.*X;[Lgltc7YDT`
+%`VNnE#Go]%4:n@('O5>MV;.a;ZT=-Z%/PA9GYmTqCEA.h-lo&l>PPB9./[rF=?.%qdZ44!XN[d9AS'I"`B(e at Rl\EJ0QeB\H*Dpj
+%7i!OS.(UPMQ#X,=Lr7*m;J&eIpLOj/q#'EXl^(\^QO(RC]"PeiLZ`:XVX^'t/n<q6V[!A8!La]jq,5dbhu!c8HRd,j2j at V'L)(ma
+%&_5>ej%&%+^kfb1?_1K1[,"[k'H!r!%@/L_C5b5?V=DY6 at YNKU8D>hOCN9qQ\TO;,#B#<KFQQ0a6p#P"HE[kMFNtWrZ3LjfGm#58
+%4(&h.I9?WFmlmiRqehGc06Wk.p[2IJgDC-4 at g&&5kbi\-a)Q/`gR3LaE at 5RqddZpOp/A_7V(#M=j+N9BN2aUZ4co/0O"YKC>o!#G
+%*#6LcgBAPMn%"@$7o/Md[O^_+!0^2:'Gk,p=)!6):12]Eam>gSj\&Dt]&F5N]&IVco8Bc6GPjo6812;;c#(OJ`!2ef4(2=gARB]_
+%Ibf2o!bCMP,u#AKh$'"b at okh_aP"<h^U^t):#Ro$GFn9/Z)1(+YjBV5"Gb:3Zm</Bc&]ZRo?B:Zq#V,`)aG*a]p$>mFN-m!g0%bT
+%?BmMP*J"i)Ib@`h6%#^&%:`+\[KrHR]?#t,mA(R8qCD&H/*R1MHXIgdISHj3">tXA(9iD;:mPL'CiiO`EG3bC6<N/<5bH'E>geYW
+%/upqJSBZFUMJa5h=44/Mq,Rc,8R&:CaqH_OHl*_#Gsl:()p(r-&_D,WC)(.H=?j7IC()qSXR.@>'e"D:[.0iL>+soK[DtM"7GiM.
+%)GOXW/[8$)3"EP/DT5is85jVJ5:a2qS(o3OQG-LscH^$ui6_M0`?d6oSp&M#B*2%Nk\8FP7rg2)Z\-c>C72?cIM.C4#(k1],j\Vc
+%nW5W8kbfW/T^C!M$bP!U:,0%Qi9Zn"U>e`6S(.^db-kRgB:!/_26W9Jr'H2l7^J9t[cH:C4s%1=rp/ZQcbI#c]9`;/g%FG&Ost,j
+%XSLpPh(3u\8A-i+R.m]nTGhM4=0?o7<loQ*?*J?hQ/=hB.I<MY*P8n.UoR#5m#V%Q*^1^joPQFtkbeq5n1?o]""[E]"Rc^<>D/31
+%b=m$I&Cjj=;bC7[KKq^/`bEti?(muUiVKETUXKJtbS6cnl4)P]jK7E"dkQ\T9AJ6l3V;"P%9Qc8oWg!p2o"/l at HE5iXeUbOJ=5H,
+%a9=f7N<?kA3\sTI].U`Z6O\0'E%0>$8)!5od?F$uY;l6c`,A4&.G^9iGM@?OR&+6\47M.T-Xeo6m.qW51;R&V?!PUL_22_qBj`^t
+%F_iCIHT%Y<cuY9d5f./^`Nd<,HLTfEf0Gmr*kQl=(d"nsEb,Bt83K@[l`,rX/LPX33?n#V:lZmH%_W.cob<L%,s$`t_WCkE%+eQ#
+%HX,R>+Is578[j?$"hfp%;Q0%p8&'WreMBRl-2%2?,g!Acrn`,&ZFnhQ at X^u"M,7&dKGs,!l8YBQ<j1Q[\u?[R9A]"H8qY&a'd?kV
+%AmC[@'tlT29gp`0PISK%]6JSYY#U52_3SBe^eK!^-0]#H-dQ*JIFBo9:OHT$/_MsY8fR))T53>-M_;MKj%HEn@=$dWN'VeGBN%'Q
+%8AE\(1KM9K<s at NjPjIo!FumEYT(eT7n*Vj4S(E)`-9$ZR7;=#>"91J`1[Eg5g*/?.f_c$1lc(XFXpCa7H.0G1--9 at 24_q]PB#*XE
+%alDPN]eu8(ZLPX1?Of>.llF]P?Ffo-?sfHVGK\Q`A:L$p3pEsS3536T(RG[g(<IkgU[?8d>8Ep#cVi0YYU#a0*H:L-J#_DI'iWW^
+%$`YJfE#+)(qir$I>-'qT*s$s!&h&G1Uiu-r_K]H#B&-^-Q";$">hbLhZ!RY93Aag+E0bI`ak^ufT.$\!B%lO_+25j:n)/b//oho&
+%`fk7sg0S8r1tQfKgC9Bn08ET"OcdJ2R6irD4i"/7.RID4gRhC*j\VcYT#SE"$Hal/.dn,f0uF/8$h$,[,0"/&V;R7`KaX$,X.R<s
+%#i&/2=.l,1>adg`OZ<cro4^J;6%sZ4R+edPSs'G)D&7pZN\@5Iq7I7O(#3j\;t-FDm&aZ62iAiNcFnO)d!pX;nn_Iojt]k2QFbf,
+%:%u%0[=(Oi:q9&"Gs:)mANQ`MU4Ab"mJ`;slB4G8<7RJFb"c>OnKcu!"moc?,HPNQ2.E7m0Gt+WScm2=16,U_71(8O3[7p- at FEgF
+%D<$6BkK-C34;G+u,A8jZ#3,PKa&.t")PT+31/tM_J4Y94?)WIjU;W-QY[8l);&U\_>8_Gf7rWR#[u<A?94s8\eDL^R7FOa<2kn21
+%K"6X;IaTWUpaWCYJft_15DbV4-ns#"Qm9;iVCA!c>e$42"-TW at _fX+f=D0qPO]Z12/r!!"5l+eWX0QTp/QuR9)+eDE:dZO/_X3RW
+%.>4iC1D8t(9qg"7@#sgSEEo-+bYO%eZY$!DK%=d8!`8r!=[#0G,)g-4VZVc,;:/G`Q+?Q2c:T>f4c^/eSk':^"-Kg^8OF%5+_Er8
+%"?@&#BtAn="-MNh%4K at u.f8t1+Y9$Tj7&Y_9\S4)pk2h^qNP6rr$oDVoiLB($aA&P<a\G%[K8OB[1udm-7_nAVCPJ72QX\d1Kf<%
+%1gP`lELsI_>b6Fhq=]HEc`aNdpZOe4>t=NcRIl^Of$A?UbRKC<e at .Skp0ZIMQ""DG36UAI<M*iH;cV,3R30G?DYE_p.#*,$nLI'T
+%nY3ul=$=-HMB%,hni#n+/4'XO1uLs]\HRRU6 at 3;XEL9Jq5_/(5e"7!e);LLN'j</@(cRkI'8M;e<k'TI36f1Tn7T\tHL_'s_PAu!
+%#q?=YR"H);`[))m*pF#nF(`jIcr6ZL&@ga%dW3_:5YsS^O!1;NK[Qe*$/r'/Br&li']q&u7c<<SL4]bb8nZ"aU7a_S8g'V,KhW]e
+%@mX at p=I&s/FG%*/@\Otp2f$<-h at L0h1\j&;Tq[8+F?O.]2%1Y8<8(:3!T]H4aaY![Kc"EHD/^]9]BF'Hj&;TnWAI2V+pT4p)R+:Y
+%Z";h^:)&LJiU7b?6C211Wg1LO(4O5lf=de3$@(Fg"3sohO%b=7-Km-nTc?Ym"?-I:(2L6Fb*6%t*NQHEbm]9(bQcs.+KNm5&2]U(
+%<9V,OOe[_t$"OKuXGq$k;)#Cf.gdXYb"A(SC_B-^/s;eYB6`K at 9LV/Ya2qS_*^D+p8P?i#.#>i5JK(Rb$MPK;Wl5DlPL2;U=Ir]k
+%0;3hF9Kmm&.Af4Ej<7 at K%Pu^6*!+oV`@o/DVRCI0$MR(RleX*C+`:-m=48^RYReZC1bGPZ,#C&S<,0TjU+I+=JIr,NnqA"+.>SBq
+%==qLMD- at bc'W/)j939137%7!d!`a&8&h0Dan#EpN>_lLS1V"-.)+XLk$k!;RYDEbQ9W#QLKScFgBN]VuEM/Nf!bD?m>Zo2j;SjUI
+%B#F]]/Q+K\FL2;fV7hW%"O<q/edHAUJTEMt:<:N(:?BfcLMg_d)+YSamZg3V#949r9>kuBG#;3k at TUbH<YgjnR)/!_m!NCm3bhEc
+%9i+cCSFqSrE at As0bQZfYU^]IP_Nu\r`cf138],PP@!,8OJrS=/XZK15Ja+AO85i]o72D/n)d8V*2\NH at q,"+DdFH=d:aR4,YYg2"
+%VNDTikT*nbdPX5X-_0I71WNr?`22!Z6C'?. at a@@rYSPEaai[k08=I[2b\j.GrdY#EKF7-uYuB8.Us"s[><^Bl.j2ol.XmXV"p--1
+%DJ_pYGRr1[Zr6f-r*pqYUaX#h1f["4,]ht73@"eOa$Fa)'iuPMo.^uFZ=G22+SES#X;Y5:fh1,k at R+.[#EZn<JM;7T&a<cAA-a'q
+%#&A10=cpOH5_8-E2CVtd;rTM%8!P-jOIZ;F+O;O(9b^/+m0jVdf7]]8LH>Du1YKDcA^4DP3 at i!idfnaVl-b\Im)4JAQ#?7rTn&u!
+%e"`Z#<\HQ&`"8I,l:90%p6-m5fG$GR(@l%S_Nkm,^`sC,B-!T;qd=P,5]H8eN*QOLA$GK*g3t0[*#;-%SoD^T]=d=oWUL>HdJY)4
+%>0q,oYg6"04CI#RUGS4&3#Md,5K?3Ld'i^0;M8kRku]9Zg/?`pfu:%f-od]M3Z\JLD5'j`E;-A'b4<Frb))U#N^uud7bL*Q_Up%1
+%&^=X(*UdZ;/74Ks\0EqJESP/HF;(m[,4?t`#C!9_?#pAnbFg>J#Ij29&B7c3),\7Rl66n$I$AVs"TB(6'CMdV`W at V.qT=g&)^c45
+%\;aeH!lL5V,!8t+6ps<$"Au1d0I!c at 83p4Ekm/Ja(q?N[-^?N".Yhuc!hS=Q`mphP"]F:]chE?c%i">tP?6$8*LZ/83$t3A$`9=V
+%]TQ&UKjYRfNGTH4>6JDcSDs#=Q#e>pM9E0t5__fL4=@_HM-?W"<!lf,C1gAfe!:%U`pc,18*WmTkLs2#T[/^-`LMiU1BjmS5,qS?
+%PHe3OO'':tJliku\1*:E.F9(BALkZ%#n7TR)itU";%hcMSkuiTd\eHu_3\ar10,&lSgG9q?X2JcjeNG0ehBof1^)kAT0c8"QVk^g
+%Png#o'_;'9#33SlVC'lJ-g0`%?=8MF6l5_%(Ttp5`P;c#\uc$a%?04Z58=P.f@*D+)^E.m<<9m)#-R,`Tir>%B7nD:>bc>12N-+N
+%OSDrfNIV,KW0RX-I+,r at C'70W\mfFTF5p7;"XmZZ(<<!]kc2AL)Aj@%S?35?9Bud/iX$DN3Q3oC%:&\"B=0Z"2Ffj])Zc;mZJ$8-
+%0lE!))^/W'n'-gnYpQE[;8-]MYdm&Dcl;,;\H*=2b`+UPqIG52ng&=3&i;N%<L_OsLcDP7HQr_U+R\WVa;Uc))^t*4g)KfZUVRNs
+%.C0p4V=utg0fT4o85$;.!F2n9Z,Ha^@+qj(JX_:(Y.Opr,=;./C2lZ4^T#2'l]dTJirXhtjON6<m=F<9ieY*YeVY;8L&qcdRc#0/
+%MJ at 4Z'Jt. at 2@%K(<hgntPf]oPd8O>0%ZGkZ at Whn<;H_6SqU3f.Fp'5;7a2F=Z^@JU*PiE at oQE`53,j]+*QV$EeEjuCe<CNN, at JQJ
+%C3S#_i]!Wc=BZce?W'[sf^bDBoHK"pm]i%"hHM&B2)?,X4C[7PZ,@)_4MY"F>9:;!(kPj2\:,dmJZuu@]j,\o=<7WT&H>+p8,9q\
+%%%A="UO(\IoU+Sd94E38%_Q2uUITo1%mUIlZ0;j/FBC7\i_8[D1Hf1m[=_0ajE)fNK.N"r-j'f"Y`Fn5&KTt>@G:lU6A)jIQj9&D
+%g%N3=<l_'B;Esf.#O_59:1SX72R+4,NIVO^d'DaF3Cs9V*YGCLB<aR\dQf)hRi]GCCjHdBN9&kc]=l!jgERgB2QQ?['"JCgpn/#(
+%^.g:XVIr0Dpa?6]q at hmV<bcQ#J2ZbTL at KgLJ=5'b^`]ptr+(3i84['h%t#7qed!M0BaR)+O(a?1`;0J]B<TlV`1H+,j01]kDIn1&
+%4qN`OPU`q%OJ'XnZ,5&sAb^4ZI?ZC*"LIbuR).sC$T'd>IC<m<i4A<GeG=uX0&?9Q#I:G82$WBA0Jqjq=<B?VYjJNQR9r`$lN>DB
+%.+SV)5cPjCp4fXirIT4S2kpLX=s('uakYVmV&n]mfH2p8OM1TY\W<97+1U#CNS5H[)lqga[QeADM6[#1*)ASoC5O92F\cERA;9HA
+%eH/<5H'<@%:LtbKFbME/KZh>LJ0`I`,Ob-`/'#*__Z38gX9LCE&erHd#"ZTkXr.Y0KL:io#"\;!9dU'8K#mGh3"1l_Bcdlg,iLY2
+%:]hsX<M?uX=cZ9ZV+D,Xnhju+"pc,K%u_>J(l].)",Oj,+oA%mS^[u]qkO'0cR4MPJsnTt"]Ce\N,#k=JL&afC4VW/clp=/!D.q?
+%K%L,R6o8sc'-qQ5#Vn]geBL;6AeQGp;Ca("^9D1R#pQItgE8;X2.X*\Li]j?+o(?)MOA^-R^*hT1K\*e,6SguFo'&_!GDsXKZp%K
+%T,8`]#2UL*5+3p:5j\h^$F`ci&9,=*D*BO_S"mg)&MiD9cIL(?1X=VYR4[5VB.F+s*5>8L.jVtffm!m*aD?*sA;/6D%uD#VpU_!+
+%+]tFS>/C[K?#3P'A;6f6I/:'7J=U[pLO`":CdnG&ji67,:nQTMs7q'6qX/q&]QIR$/sagSa%9s3c^spujU(Hdq5g.\Vrd*uUF/7$
+%PuQ.O#V"q"JW?>cM&*YZ\;7:J'`h/&n)&+`E]bo!oC0:h]uN#%M-0%LM;b&b#qOcBXa8e+Dss2*rHH`icG*YhSq&b'(k=^m;Ls9c
+%d0igL/CZJ^iSsO6oZIF(&@90_/LoS&]Vl/cJ`+lAZ%O2ndDWRI=5r*u1`8Ql8.GP=XYiN*&QDH/nM7-B>Jl`@V0f5iU"7RB<@Kmu
+%UQYBk:'/<t2I-poog6)p]T=@f//tjr[J0jc018*h'.L98>-/)1ap#=;rYr>iPo9]=mm]]f%X@(=U0Kq8NZ0O-'o"Dr\5K(HUI(S0
+%a&8a.7,nUAM>omJE.s2'!o(^/o$(+WX`Qum[ZJcP_FR6Mq5BK+h_`_Ab#Y<J%NuA_NB?5o%=sE2hg[pLi`WFh;Z5%@h[qnM,6OTt
+%'7fCNnfDKCAu&ibWRsqc8d+)*[sH17C->u,OX]oGV2/osEc&;UGMc30`^tlrhZ_?4TFLFPL9Lqj)+e*co$+(X4F.l151?cad\oW;
+%pS<slE%ASI\h<7jWpFY>YUA4%Ym(`)'0Z0F,i,h'))c03F3Hj5OZ=XkQtfTV^:>kielplR(iN&8dDiiT2T8A$r(clZ&C40SKRY#1
+%\8.Rj+OeC&8e&o2B]5.5's1F1k-@*,*=qYCF^WFq\Ks`6g6&\#;Z+d>W;0J at MmM0@H1PP7RYU:j,Y"7[^\N_^q4S`:cu!!78(/Q(
+%Ma(&8W5S)Mr<]s)K=An]'_K_sDdVDXCbDmY0<Qs"8RFa at BS0gk/AZ1;aI at lKJYo^pRnL at NGLHQAVSm&R:3lnAH+ at a$7gKu&'2#X:
+%-f#ehZtRhW*%qf57j\->_/-WDCUroTO$RB<Cc$MuQsT+>V]"]l#/69/_\>VKOaLq'!_Rj[JNX(KJkVSf at A+E/1Sp),j!/G,ZH,Rc
+%RMj.OaAPO+$ucaoZSV-N/)7^@S:17D'GgI/1f at BZ(S$A:aA*ZnC?$!)E?&CBnTb at F^)moadWGB3PMZ at 1BN?dX(8IAthMCk*:7c!;
+%8n8e1;4X>e9/rOM1m-D0i%TX-UQulX,k8QbV(%YDi!eln6B'4a4PT(^4qQ&@_f;:A1n,q\@)rriO>\?CFZ_:Han>O&mkB7lL/JZ.
+%HuOf8Tqc?`;G$M31E:-4fi'-S:,-(jOH-lRV\:!3353Z6>(#H=9H8-jH#a#+[5j]QXL'IqVs30X&1"USF=cZ9$Ecb/NX)JMjCpsg
+%3kal*;$,GBFT;m\5i)W3$op+;1?QI#Tlah)QN@^C at V0<mOrZN<JshFIn;J_ at n"d[B_fpK%'m2bSJj^uG'H!;a7lt[oDSs-3O5XeG
+%h>BshDjVW9Q/=8[\04,]<TaV"`urTe:!.FB+-^8iX7LseR,JZ"4:/oFRWIW#2Es\,NTS80^X;rfLpunBnip<fP&fYC3jiE.*U3/J
+%1T1(\80D2/E</p9VGs.sZF%na>^S_n'nThPY&;s24:SuF>rT.X>2'l*_P%V>G3c7UGcX"Lq/T"inP#[J*;NK<Cm0gAL-W;<UIGo"
+%@WdOZ8Y"I:8P\,j>*Y?McI$nP\[4AIeBo1o]#4u4,;UoYou4a9q8-RiLj0l"U$sT>(f5,Ur;2j`6RE*oge9Y<$O2.a.ZIp$2,\\]
+%B*8dE$\%)^GfC;=R5u>_WtB69*!_XHI$16dHrK).a.UD*iB/\3gm-u?#J)09+Pt*OC!B!2WkbJF(YTkm`a5AC0DQh)J`\pIVij0+
+%aFMWI`@"SL%"pbflps<?R7\:o3%p\qJ7H%2*6'Ac&BFEXR?>8r%6'G(nInLk&b@@./8`e#Z;%ZY.j>fBg72p4d;_<Y(?\Z3.#[AE
+%'G^t?J6"NbOa3$!oi0i``O;#eXld"@nhfti<INc1Y:\40)X(:MmM$F4`tC0K[pa=fM!Z`3&+/14L,i2?!*OR2N)8YsU)jmmMmEbJ
+%0sAb79#F%WPAttFDf3pYTek1iE]E,S=k$4q,c07s$'47Y!%*RN)";D6JNs4P6kp]!;F*=A+;!jLFsL6W797ZMn\^`H(S0, at jT\,;
+%,t5D0g'QJ]^G5O(.)MK"2l+#N8;g+=9OXk9C(bk'R\dM1*6PM.1go'R!Pu*mW)=La<),_)@4X!%Gp/QiRc"kk:VKm'.ak;=haqCL
+%("U.G6f!%"nTj>hl^FMaZR(lnY.g+A!DeB=c%5.HJVnQ87mZnUK?]t69R)Ne9TFQb)/=^J&qW5-%E7f[#0q`9M+kAt*/DGW#g]YX
+%CF13TL^nrTBU:\0]#1pq'd#H(DP+kMjc"d&E&ouh[l)uC-(9F;0#pQ/BMho9O,[lg3?/`dCIYG3IW_bOd)<+>;e7np^=XkH^;u at T
+%Qtcn'5W7,4?AYKoP/0YGH_ZBC9,D>b)'^[7)4W_<&a(0jm7ObLOjYp_CD/F[M"Yj/:gtj&3I!TTV-FHD2\nIeJZY&$=QmC*7qY at Z
+%Db+88]R)dgnI+0A,7[oSN'fhM.Une/#gdP[.TD2o<Hg4"Qa-Z)?PY*_$r=/'7"^%#kUGsdXG%86+6_,n[67Fg9jl][)@Ik;n!4>'
+%-mEm:0r]`@egTIV_n-^ni9N/8=g_k^kA5^AVh[CNS$S.Ig.Vl$fM8VE[%N"N]bYCcI$%_sPKi=rW<_i%N]$AulN5":NL[0,LJI?H
+%a*-.bKb]A&3=]'U0HZObfPqfd1*;e1-s4D9Va2.nH/LN8"<3WTTTaZ)S7YlMC7GM&*o8/M:,Au!$)^'6S+=@/BKI0p1qK7:Q.%e$
+%gJBZEde\@B&da;[pk<5$(\AorVrJ-h32fT3d1D"L!QhuY,H./.]h.`_co&L3TOhC@?$K)]d.Neni?1-d19Gcq$T\lM3!>aNo<k3Y
+%d%l578Crt8!BK()0"Di,;ITp!40bbujMObn>nDO[LEiUdkI3+'=JVsOi)\WtorkO%kE`6]^/(mZfQ=V5"(6k_1)XnilRn%fphDI8
+%@f*0';aJ(FBk?-)[InF(`'@V0"fA!a[,(R8F>&p(d/%4D`%mr at hr&8'$XG=/C*G!J'd>3"D?f$/WoiEeMFaK-:g!%ni\e&V3g4iG
+%THi3U(jZ3:P)W"X,\S-+>Ee*4l9:"?1HaRCi9W]_06%)),%IuI]LakGiWH&k*KM@\bZPtt\*5lrhGBii[db2($#r=[*sF,3/8e7q
+%*-<t";q`V_Osq*8`\Xm%SS:4I>!jk6gpCe$S2-'/H??#gOGQVSLq!2JO_KFf.Cl:;,`Btcnk4Yspq[$4Oh,c]>CEK,.e[uW0(=Qb
+%*6-I.1@/p6A>g^]</]'B]U_U>U:V@`oEB^;MVghOkt)T=M*-[_3W[r0jHAium_(F;ZjG!H!?Zug3t'1dn2:IDAjfhWU%;kap,3*J
+%Ad%fcH(J45[idH&Z<JSm'7=g6l.#2\@Jc,FDLk<[:/<3T'6smET&4VQMf<Du]Er4D:-r>j1OrTu,5Ohi_,[*VLl'cDV-%R#Q5QG_
+%gm7cALF5])[R5J`CD6M-8QB3Z2c:n3IjD`[dOD&E#6S9W.H+CJU2-YIf"HOp#o]j!2K>B%WDJUGNqZ_EL3W9L*Ze/nb&D#kT^;_[
+%lV)q&U49F<;KXumKCGW35rkUC(l8Oi4HI`]$i8clX;^6CZ`BJC7`Ds2QFN#kE.g'I- at Q)[C6T';OD=.U&ttU_#)Gs*&\4!;:bJ21
+%1[O"1R:aP=gWMGDSqp'mC=-SGLitH#8Di\@9_JI,PdFk'09Uh?O<ka5qqSEL)"b*b`3\Xu?$?5CVJ$k at rIOCd&d^mNrl#M(>j(fk
+%!daF<>B]oJ[Wd(7RiLJ]'A=mcj)lFL(WX]_Ou;Q=eV at b]3aVH0X]\fu1j16!f%-8L(%:qc1G<uG0 at MoSY;S8fnToDL;,*?<);bP)
+%D1/YO`)N!DCmdEgkiF_68gm>j^1&ri"9>_=cVh`TYET4i>tkoW0I$#H=a`0>Ct0#d9#];fRMH6tiE&Zi<*d9SQSVMFBmpX>YJ2SK
+%oP*QAYLG9(NfN'7;,gJfgRMneZF($_BM1SS%8O(bCKnM[_0BK=nhs`Q/Y#?#26'2NB6*Q.)I#F\/rc at c`lSq.O527I/S,!uSjoIa
+%I%./C0>tbkcq"!n)UG4A(tJlLUU/Jj_j):`H at TE[B:aC<,V?;hHr(jZRCZ/fAL5U+mS!R[`JuQ5V,$b2J805t0H+`+6%6!?Ss00(
+%p%@+G<S-ueo`U`of>d_khS:q4Gp'-n&Cc'jXgVYbc=#Pg4I_>]64O05EU"AM(Phg)WN.9d[70oRm^/9q/\6Mrc]%1,%Sn(g!'3=X
+%m at Sjr9EY9+]7K:(5s_U+=W>T(r)dQ4-SF,2?!gi,%#p!KO0_uV)3cgB+I!a5[J]kuXT3p.Q,"-RJDbT4!s>_&C1"KbU>'G7p"`5/
+%e$lqC/Ni8Y.Vp)1]>^ZobDJ(Vn?6T+EmPT_#+*>g;_*iq35CCq4DNh/Zk?R6>hWsDUO]%TZ'R,r'ruTLXQd'5EHI29(G<5M?Y,-Y
+%o.!lo>up:q$hg&>=82isL_XI7(o.LUa!t'PhOM`Q*nQuVH at b)?2&ul\INqVMZ![1p.8s=b=/]n0RG+YTM605egPW,"TH[[q=pPYZ
+%%tLXWN&FaDZ"L<ojKmLBn[#1;?]%e9Pr$kq%%_nD2QaJ,g+f]3.IOR65tjOZa`Kab<f\uh9=Vrn#P at 4G6FubEF7'7mkq\C-9m7fG
+%Qc\3=I5fO_b05EH+k)uRgRTcfF9=<%C6$@odtn3L/Pf4_ZgIZG:k20=FB4$EMp`8<S.Y9Whsu0PY<K at JHT-U#htN.cmk?cEPCkq=
+%\;=dd*^q]Fb^!X>"?RM4Ld;:9F>I_#:?lJD9S&7!;)_DN54gJAD.n&So^4-HTgUs=_X4Cc8F7B/+&j&ji)ic$`>^9LW$tCtZIA**
+%R6!LNe"_J[YP_:0^)j5TLN[bFon5!G;?8jY[Tfjm&1NW;3=W*gnR0d$=h52*3b8q[jXK-mlUU>=+H2C]A6bteIOp3DD('hOYgmXT
+%]9S8QDg*pn,6G:@hH\VoOR6Pq;?.O)8H+dm+J\b]Ed?1Ua(S\?^Nf*Q"F<f/DVD;'?/QB):bhd%9E&.Hr#Z8nU)]6H5>&QDA)r3:
+%/1clN[nm]T$6`^na5C8[.*0l)I:^!Q$_<G5:r.sPCqI4.:SKB(>oCeoSAs8:A[&T#"GQE7'U_B%Fq0kdBTJ#$\CLZ;PgAW'd\/'i
+%qU<qsl;6Zq&mAl5R=TEuA3A9Jk=jrH[Knt+2M!AIZ*dLl*?*+o,)6KpZ;0JKL:V,:D/5E.6Xt(Gpc3 at o;C$0t_Fm8W]JHOq[RT,I
+%0rWEi[=TiIOIaWPANH7DQFO6T(9O.Q'>+^[?Y8(#oE^,#EbBB[a_]Afn:gT3`OSB'b&=X7Jgk:e(+*/8AY$GPEXZL1i/N1YP;P^R
+%f?F;ZH7p*%/AiTi4HK.;p!eaSDLP;EoI:RC0SW$";!dE8Q=07cO`qFP0_:bP1gB!I[gU<]T.!ljA->&=MMW<I;m(PiQ_$$&,VK^r
+%,-(;PLjr<F!P/Q!L&o-f$'?JeAD*W2S/GK.X@$1j*SI!s)f]*kCk3RtUPRbWm^7gfGgMANX[Nq at D.,/X3kTI<2'OhNNT`(6i.`$6
+%os9ZrnTSY6GQCfZn*5*)2gG4sW2S;h]$\@W6g5/Y#\0tGN.\'=;^ug?DIc3?.\91CQ1Kg?*EZ3t%"r"ANrE at qP4:EPQ%\)^#;K-T
+%L;K8aXB8+/b>E'bO1E)c_c*56kUrGG7].O:-5M5!I]oLk?8G/CVo2ccDA\oG/(2kaEY)I at DA\os49b"::uiE#@p"/ebYZmW`aFY#
+%/jLG32EHdsQ_4EG&>YHMOHtfD(oj`*"mW*aoG=Q==Gg9Of:o^Y'7h_dAMra$[*`<\\fPW1)1f0"(spj0%P(F)<IpFDZJLnS*bMeq
+%)T^o]YF=S$dTP+sVi;2P;eK*]FUZ^>E_OYZ*QG+cWk_53)9.il_mF/%SQ9T<-O*dgb-^Ff[*`<`3j#fO$piTLN+bisW>[K^+pI8O
+%:+da&'SXH]01AhFO9U$mV2D!<^2'X at -mHR7X.-);%\cLFMR>@I*5r]F%`;5J<FFYD"o0GtNLGA5;PC-YgkETX:ZYb#LGh1%<k27^
+%3X0G33Mn+S%V&MA<FFYRAJe'H)YF.\Ug0s[m)39>:#T7rL,M)O<OoORiZVtSM\4L%*ao`;?!k;Er8IRf>2Tbo5N7UFX_-.VV]4Tl
+%1Vp%Z^6Lc<56?%?2UG.K]5qcBm+68n_pFYB$'Bh- at V[?p%lPXZ*="P>RD[0X?Rq14*6L#!qQqU[LdN4V;Ho[0MqYfZP<C;=C[^3a
+%^(qJRg`JCZbh00C!om2tRfp/7+mGKE:PX56&cmkJ$4Oh?_H9XS4Z%u0o/f"8B/JZc.+Wta"0IVANeG&G,O,OU/Bl+G.K)RQLLb.V
+%ZFe>c9Aog!,T>I0piuWf#13?n_ND4%A^d=8->QKg]L+#^2Bcf$]UhmY1fT4:)LNRP8fi2rMqB)oJDNm>12>182e<ALP?#S/[Zi6P
+%N^C1:%:qsuTV[c"p+tS2c4hPKpB)#Y*P%E:<sB7q8o88dHB.]m*jl]&1Cat1IJ/A&M?An2X^]H4?pMHf[#aQ?B at PF&7bO at pe.@,K
+%.Ea2U'Pj-B6muq-N$*#P`spX&OSl+G"CW9fJ5ALU*pAIu+$Yj0`4ZXPOG1<]VV5ZnOV?('!SILlm9ud;B- at F]PT"N.!.l\CkBg/?
+%VEJCGE0OLtaC?]pOS1m_?H7[[R@`t]i`o&bU*n5SMi=&djTq6OTH[p\k:--FLsgo,7E,RcEp5u($4j%4[c01gZVh=nCsgb-<lEZ[
+%AA%9U4H<_?iIhg?3[eG1IZfB;q\`gSmifR7r>Z-MG>f]uhEb\Cp6-cf[$r at U]:UBPVYr'*QoC`0"Ub[Zh;C-p8CM8YBol2s54Bk_
+%088sfp^TW\dm'fqVc4btdRg?S?>ao at W6P&\\QpNT9MsERUnrN_\<>T(oU$))et+u/JhU^",rao%)Rtk1!IKV?=OITt`*r@&!tCg.
+%FYYM*S%l3sZ"$B"1WR3"e7H4PfCt/T-C]`rAIeTD"k8T3VmRJnf]-FMPG?(,P+a&W0Ws;Tc125Y!cgMbF//g0DAo at n-GGn"<%n_r
+%Vf,9XfJb/lm+\;s;T@<u74TjHR*%fpeN?O$T[Bt_2FfpVrnH'FGAQV&Z\-,8o.sEL%b%k"g%64R5GXq'`c9 at k-],l)D<7Xai1H4A
+%EgW<7R<e9]7COA, at CN6$3\^(UOVP;;gM]*#4)OOk)N&@@ksSl36$ClhZmg`,>_ocSV97G>mIhBLmJcC1S0Z7\\4);B2,4gA9i%Jr
+%?YKEQB0kG59a+(_N:kOn&+Vko$0]_(eQH:!YIqR(LbpF!XPu5nU6VL%-V+$SVc/f,PoaT7U;fFL9L-&,*(:Ps'VcUm;r<a)L14`Y
+%q5t-S%L"')1(;tfA16$7ED[VM*7<'TFqc\G_qBH>L-A+\drP3j)2c[V3IHP1 at Y]$dX8ArY0>Hg[`*GXl:#+/X4m3IIDCPU5MEd$R
+%;l:Bi-VJgQ at g#E;QU<8DGD`T?nk4O&H*Almc at ftnqUf9S03e;&!M*SC7)SU#O7c9,V$)-J at IO_kY)TEb7!F3+^i2RbRr/f,^[H^G
+%IE5';:t*Su=_JI5NCqO?[=94foQ4*#U1u&H4`64q?M6'>2!c(+!Z!1sD8R$,A4o`?H=55C^X?aT8ZF)9T['*1s)khUH7."ikHo57
+%1sZMUfjK!AZ]#.bPBXinQ)7g75'Fd=53/Qce!S2(_4*lJ%1QG1'>M+q-gdT/gRoqsqVm_,TV`dX]E4<=47qY!9ZN<!&kiTJH%'#)
+%rc_lp]F5N:T<8Y$DAE7[2BXf6.a0^pHM;akN#k_tnB5]Whp(CjjH(gfT#]bE9rP:_*N\E@$jmi1?\uXc[rI?Oq[AJ-"E8fr(HjHp
+%S4)#8UXRhEp#T)4q4m,Tk=598P6ADXVq-GBhA22g?U'5NB\cLPN58^VFWDZ_1ft:6dd+?W/1maGJQgmqe)l`\-H2<IRTYC5^J_d3
+%O8G6p[2aeM+@^][X'7;<@2IGbS.WR'*B?PGr?`M'nfFash/m#H<QqIg&$WdMh1%S-%htJ0)YU,%X_6G-8'(8V\mL&D8nQJhn9OXi
+%[m8oL&L=Ss%inZY5mpA1%Hmqt*W'b7)3s5&#.n7N7!FXRe9u%f7mg$?F$jFVZ:&m!W(n*e!u;nd7^dp$Tsb=eTY"]--dH8S=3"WE
+%jLcL6h%jg`kfsb\-^O`s%lD&7\A.&?Rtkp.IaZZ&^qoMM4-AA+R#F12/e(P3F<GI&N9J!V!@/CeDRWV7eFF;71YYTn"OkN8+J*YG
+%FGef,c6G)'/)BPWAd?I?#531h>Um1"O at Q4:a]UN=1ll=p_`ns6PKhnb$Y8]q7#2(1fA^rG_7WHrh^"ptL%&\a9GERP at Rrck&Pk"-
+%4%k\D?ieQ->cNonWgtM`f7h'_n:X]5*d-[D%SnX at 2W,gLnP0+u"d\di>G;AQ,,YF[$TX=koZ;4,&bik0'?9Zai5iIiLCqp4L35o*
+%)`6.Yi?!:d8)u]*?:KUL at pTCne,X)#O at OaKVZZL[=&B0TS-<mL&FR0n3ZuJH8]uXW+j<!=$QTb<mdiCZg_9C(4NJC!eaX3gN8m3T
+%>fQpQ2!]DE"7oq<&#+F?MAD8.*eJPr*b9pqGo.)tEOH>_M/d>Ncro!B%R7j!(Mn0CiN+<<bEN"Dc872\4L4,6Fg*=H(no$S4lS1b
+%b'HOD9I\T<9Wo;MM;g?'/o\6A6iLOSqZ:&S2>kb(U[+^AU\0bG0N,t/?FdqBBUQ"G=AO,D-;L+aCk!7Q3V"9MmLM"Le1sR7`$l*D
+%71^(J[(Ii481?rUHlQ!_L7VMB-sakqJh"tnr.pS6-1FVoU'a*maDZ,L<R=OI8el?"$WW;MB(c=,E2>O,V$_,4fr.jnTGbh&]Mm**
+%=`?B1<iUCLJo_#o&A"+>;Pec73?\bn`T%0."Fd";a:]]1*QDWHL7Fu)(.&12,jU^HGXoe(YKVi0"mi/hL79Q:RL9?X[L,"3!K"mb
+%'Ffhh7t*BPSPcgI4L)u[E at P7L'*1E4[oAJ^#'a"r!d[0ie^DMEL*.UDP"h0451=cumbLHH5(*PJp\>HXV89KiJ`"(-d[Is)KfS]c
+%AW7NWCCK:%r[;_\h`ZaRZ2>k%][@G[MFb$E?IgII%HWPD]2/EB:.c00 at E\;mNmL2"h$Qm?o#s?5jH";G.$Qfj&d at N9bWlltQf4n(
+%R1nOg15.2KR-I/@+C24N<'f*)<2i4KDFUX&qUS7R,cHQb._)34NDr2M2U5063RQ+<Pq%T<1-qjZ+a,I>T7e[RN<ijiK&ESY-m[V.
+%qJ2r3TW*`@TQdaPa8>EJl5UHF?V8h"5Y.0;a?P6N&@Rue'g.L<7hqa*G07<:B?Jta.u21_'.EApZ>394\IJhIF&Obpju9F42e4Bm
+%FO^eSZ!M6@*;,>MTSQo1*-`AADc6Kq]iC5->#17R[(X:'56p'CSBsU3b!<KO5mq&k11ku/bh7O][-oInYU+ at FI/KX#HQG^DS%=c7
+%pA7Gh;@#`ictcQ&"d2pL=\40d2JFE?daobBV!rU1 at THA0g%1RFX:0B#p^<l?eO<"pMN.'r6&L_dJom_Z$LH4d=--=VUk$2 at .k)ZT
+%X6N8B)OlnAPdsBnde6..`'=[!Tq^$NdfP;o+V1rq,F5%O at Wlj*.($d:GU<i8Z.Hr:!;P%3mVY8&^Uej'])CcD%g5YY7K8_Khtu6!
+%PNucYgILuKT0I^QIJNU8pHJL^[s*>4V6A-.'Q`As^Uj@>r8%%`J,WpKiU>'1/iUNrANml?H#nC:$]uG`D=gROrWcGqeF2d_U8'lX
+%gR;PTL)PADqYToti4\s,pYX_Q=O=l;KR4STL\]sUq"4L\ZI"u$qXgg7E\IFe=Xj%;iVrc6lL)(h(k;DQ^HdIk+$RBj2;T.Ar6r%K
+%D>EoJjkp+7Vl;=NLV-p<9Nk?--D'*'M#>6nHWS.=EK_6tdR[MKs7&mimnTu)[aumI3M78V=Es2&?;R"*blf.&``C1/Q=/$tV\NkZ
+%m,.'nB%/Dbk\G8+YrIL5A(!jd`787GO>MUD^\oOlX!)pgJK.=-UTOAcA<[Q.'HS-_r7IC7`eGYA?RjEB-U#NtcDf#ER;f2qg9<V(
+%$Zn5PRSQR.*dk,&mlX!F]5DlT\)1(Vs++OhjrCaFcGNueb_ at PfgLSiJg<u4hA+Ke37m05e2)Xh>,fS*P)g,mNo:W/b at 4<#bJA!ct
+%#N^UB+4-B78j15uP$akG_oGR5d265<oRGbhbHh"\BpLu=Q@]5]%qtLFHKr/#@#u0H?ba5>Rc7+\8sYfiQFO4a"@rXe8 at 0ZK;q9-r
+%n'AaU1aatp1GN5C/+ at eKBKY.m4tCYoF8aGb][\9YKK#9%8_,'*3/\`7f=%AAan0uNnU2#(I<5<<`&fSlqo,ban,L%':p>TFCKqW_
+%(@_O8EpBW-;#?TkqocGZKj9t24bb1`Us:^H).*7;meV(X+Fa_/92)js#H9!_6CgN90a#@$Pc9'-Fpl1gWY1arJXD-Hbn5e$Q>S@)
+%It)qE9i!YNM#?0SAR>,!&"#c7,#!d#U!G at g;:1^amP1nJ^A.H']<^78/L^[ZI9^q[$U-\fq"$-tJ,&a&JWSFlX_h2_ItK?>j,]$a
+%qncVhT6u!8GOp'-/_8GtgA\C`g>;*^frbd]n1Q`kpGVBOXf^+<gAU[/[Z'oE0!DJIrZ^G^O#FV^;W$cOqk?.ME`8i8b<=_GXu]jX
+%T,%%_Wrq(Tjgr$q5?qN$Da$A"J$aB#;X:@no^TE?(3. at VIfRg>BBQJ%cEA=,FB=`mep62M/5P)q4fhY1X;<5[dCh*2Fd,q(?rm0d
+%7QKr\k20M`]tF.(^5./XAeFY+iRR<KL'II'J*^A=ccqqbQ,]]rjRfC*\-b+bnbq"WTAL\j?cu?d:VOM)\>#;NMKcO:(DZu8^oFe!
+%<W:NMf.X=F0/89`gY9pK_]%42[;8NGY`<NnC+UAdHq(OoEDos%2g;a7%jZ$C9pPbOnuq66g`=I>[4kU/H2d72o(j3?N]$Z&NZdOf
+%UMo4464Oa?M+]nJqtg6eqS4HS$IhKDDY>5*o]<''jdU^S1pX4#%CO,Q#IVs:;g$?`F%BRgb7tiFD%CAh;26+MbEE1]kFtjK!dG6V
+%.#"Yc1;*1>(7'*_L(5TIU'`b6Sgbc0b#eb*I/7i(Ti=P(EUKTg=)T/bQdN76L5VScXYLRinal3f^:LpG;u]SNV6M?=PTJ8F5.uDH
+%rqPgV]6A1BF8PVNG.-"H?X7P54b*78m'`6+$jFYC)m3)30<`)gi7[qVRpS;7,TM9J^ZDomhnAu3oBPc3]!a6qjA31Q6;+J&811h7
+%Xq&SrT at EW`7 at me5F+=2OgT-6<mI0gsm:`?a+l*ng!lF<hEVrc&CqI^dIR&FeYAR^6.\FI#F%8`BGOstbh<jOQkMMlG!>m-_V(6fs
+%ragN5h;<<2-g3ePQ;q4DCP,\Z&_id>SDV(ALcDaMY28"lRWOYfq]S]4bOt[ZLCSatcW5O4SV_=\e_S3VS'0QA?_'DXprA-sJEIcA
+%<u:A+T&5#NJ1lELnoo;]0DXqQIt'&hJ$Je\6MU8Dc&9?n>i1h[+5fAmk:e?7M6a`$I!8=816oqM%t at M=*rc0.r>Y_,LII%_hi5Y#
+%jhpo[14n])_OQS(GN\^%k?hM%IXVS\i+IY`cNB:ORi_U^8mQgkFoD.X5,)EPjQNa[O[AeD?PNb&XVCb)WO!Gk5J0/"#n,>.:GCBj
+%N,=,*WZ?WWMuReop.lLnhEK`Nr8UE6*d.>n9T'BlfC[F^ro(Hka&tComE^-D(s4KBjODY(UX5_(o'_AqNtUl]ZDEigk3#@GIPAB9
+%jSJ<(cZ%Z'3mcWngGO<TjFbrJr:%@=N844(YG]8e[NNKBYQ+1Bm\Xp+Y:fh3g.H'ITAR>o^UX1YMYk_EE!sn)IiMBG+[gB$C@,Z#
+%kLVr)V==H+k5"eVN5=iFp1HCc^[</n?`m^"I!`Y^-&VPX5KfbB(j6AWgWQX9^-+a1GDKLH_>Gk)Vh<VZ^p!/IMDG&!o';(ghd;MV
+%q^@YG55b3DmcQLJm;`':2XdrhrP,X^5OZ&RI)G/1-3T2,8Pb_F+8mO)cL2jh\i[ZV]t(Yb^:W9ic$e.4*\I3ta$LbHpo?<F_;Zo2
+%eZuX$iR+A_%Z_D)C4"Fd0"54L'R7,P^O?"A]Ze73pSGp2f:06Ns.q;A](Akjc2!jPqsr at .GLmNM=L[EaKcj"drnYJ]G7U1hcJLfj
+%hI$3tQ/$b1q=a7Q?!#.$U!dj4hgYH)PqDFn15[hB*S at G<Hi<*lCcR7Al`7KffZj6H5O1;o?M3IYF_;)0oUF)qmiLmHHBlVi[uf!2
+%S$0$SGeG[C\u1-%I!9l+:hJjjoBZ#&M]Dp at lJ0("\A#PfgcSj at p#3]\D]eE9rd;76U.+=)l`2sUmbq[OCZ2sF$3;6Lo&frBmH+:j
+%Q^bVU0(7]5e_/MYU!Ud7rThYY46C)FiU?1U`kS"7Ir=^YMjpbO_WpP at q4+kcXTl?:fS+\Fmr/hYq=%-HK#n2no)/C.HOct@!t=\'
+%-=26i/CFao2JlcL7H^5<pnjG805j;354$u(^A,sVb36A-T1\?tA<Qnj'JFt47DnanLgm$mh_5$#rd4+jT/Nn at J;p'tdA8&"$\NXi
+%kCE?4=)Uq3eT^JspZb]Rm=#<rmXo3aM'gg/IcX@:JUR at o^&QrEIsQ6[F8>N^cgG\rDs>A`H<o+HRh%&W"FTl"Fo8Zj3\bb`r>.a@
+%Qq8-LIp]p">).V)e$#siJ+N'jn%O,Fn.2#^qsTE!^S/4\#o6m^UsK(6s8Momn)6iPUkgIL.2244a#m2`oTP"0IK-"*%\$P7<a*/I
+%U.0eK[eqfAc)YahpjYq>T/NmeH2g$\k2RpqJR6g_-o1VK?Z;Zbp!qmc]8Q!uo=('U:H+pEm\=-*?N%8Sr8N2B!V5O!o%U33qRh+D
+%Mp7T<TP?QdDo)\@i)cdO.K5fl,&f/88PX4oo#8Z4(K]5?n(qs=^AI3SMT"!VGi]eT^%kL;*odC>Bk(W+O2d?tb=7$&lL<:V4[s8=
+%pq)8cCRAJM?1am[0QLR#7Oio_VglCmrpK at 9lJd1IT2BWO`*Ih"$KgFt0ZR`jn16_F'kJ3tpV8"._2Cfr>M#C"\U,!0I1B=X$n+d#
+%'YU>u!E0),pV7Y4_jp at n<Sn,LWdh^TUrR$Rg][/Wl8=@(.Ohf["@t3Uh#I/bGMc^d$UqLgS`.'H4!Z86\G.uf`hsBbc&SEK``4N,
+%S\cB'WPr`,!rI@"39tO='_t:]pi.XKI"W=NJbM at VF(24qhKqjWcsP6eVp,ICd8th;Lqi^O`dS9D^%gZUF_GCp\rS\NLo1=+f\\Ud
+%I.>0!9\GKac?LNP\*`Z?(/jb[$p[F.%r<3ulJ[*,>L%E3]4/8eViV9c_dthjf[Yj&.R(kdTaHq]W+#qiJTfhpD+t`Lca]+lH5+F(
+%,>)Y"65B%EcuON1g:o1aB^U,$)"%,ec/VanfQ+5QDOTN"-+t543IX#^=^N,i(D1EBUZ8)VEPgXUofQM,fS"W2KPEHe#2D#U9Nbi[
+%hngMB5B at ENC\pCUi4_M*h9#0(&+WR at or)u)$k)H?N"*3Z6oTh;(?(I4q!4gg0pN3lcAODXi1<4QpEL.<a^W<LNoj7+FML%l7&&0Q
+%7I3-bO@\:EE?W%<A-;6=jSU6ZSYrY^2f4JD%_-/50)eBtq=HQ/G3kA4E6f[*O0qVEI?;:N*;*e3 at uMSR(_sQ)N'9A,-3$ZY.'kXg
+%1$tB!h*?R%'B1AQ4%h.Epq')M/jrXO)1Y9PJ5d>0=;g at JE#_9g.XiO>WBr46&^S]G3CPHq'!!li+\c81J46`3Of5!324l2UA*A4Q
+%#Z[s^eRB9hg=1/%4#H=_7rb_Vi?V.pl%Z1C?5*S^=AOKp=V"XJ*qRALUcN00j"(itN)>.Qa#NsgqlX8G3:@EB$J[__A:@W8H'Btt
+%OcKUqE2$tFoBN>!-eWY8>o_S49q7rTQr6+BCSQ=g9uO9ai@!5h7Y*2TobD(uO<>Y'mJ_rb9$^CY(o.6-%^K7C5P-'?AWNr6%!dHg
+%iUk7]%WJ`S:6]f,R>-)'Y;S9>q!M\8Vm[0\J+$(W)qSPjXf&>$%T56[#,LTq8C1>*Eh#_6lVSc at N2e"$McJhR;p-o`g;0X7QM;\G
+%oRhAo+1FqMd\l+g"n(D6S$Ua'5;_glI1)NH]T6P:OhZ*rk!p?LPEfOF_mZ5>^qG at oiCB%Scf"Cfm+rZcWPH3"S<:D*g:r3p^ns\W
+%8j>iImN:L8P,==OT<A+P.O,^a88T)E];@/B9"M9-pl+_-=b_WCf*6S<X*Ah+Oofrn?"9)Y[&#f:^<"hRju#U&nHH4/l"':*gO<E#
+%>S7qEi[jBOp:97'CA#[b!lGZg%,5d1V%jArp14`b+`ic-8AL!kXg;0f(TWRB'R^slp#A&M$e9WNT"42kc"M7eOSMjZ'ZE3M$iOTG
+%;:2+NaM=-b9A_8HT(bU+?$EM^$L,*?X1T+ueR"gi at mGEn9^\ZgeTm29!`0Z9e<Ap%eP\E![?18E)G3?l4=ia\#7h:'loM9VM50-7
+%)a;P;k;>?j8F*Q=RS0Dk#L0/)RUC$ZV_<VWX_)8FEE*8a9i^3 at TNh'[#m!..7.FE/[FJopW_&Zc`Q4Q]IKuhQO`km(mI%atT/:LR
+%0s47!cTmJArCf,n0ZFIT1WElYdVf#9O7DK+=R8i)lsY\WgG;1(8:U+ at 52E\djNqT\U&t(K;2u at j#%hif-i5U;$J[R0;60lT&*o_O
+%cbOMCZcq(_>6%a at RMV_#pPmR5^HWG"-_JF?8=sO,\UKVT\9!a4%"pJ;bSOeKaJm0)G(Z<bT"&Ep;Wr%,ONDVq;?s2:SXYD'H?8k<
+%2ooji6b/_bIBe?JEf)I5K8p'EVrR,eX9]!t?1u\Ebf+cFA;iTNKE??-1 at ZFI_u(1?5;1Q>al%^g%pr7?6Yem/3ST1SA_XI.m%^9.
+%VmW*a^Nj>igP6QBqAS"A8lk*2R68n8Q,"JPB=bdrbE:;*R3 at _95*,62D3AH(Ws8*.D.601X6/?&D(7tGS+*IJp*g\e/^1E0(lk,5
+%=BZC1T"K"0m?u.=3/qY8^aGpAmrOHspDJu:9LQtVj@/mtF!IG4]-G"sGVouWiCm?sG*SJVFOs"%3l#$Z7t at 1D63Fn`*t5N3<Fu-M
+%7c=HhMo#KR2W0`ZD3Y)]3^X2Z;M=Z+L4O/H$LE(ll*b2f>Bgea31-QNQu;iVOnEbU(@5?ZnQ88VBJu5[#4hSXVDQ'tLrZ.T?FB`&
+%>j7NQ#psT+!s"+Yr8Y^<*m;FDD(mU&4KiU'GR8.X-[#OL1;aV'f5Y&da%%Oq>lo)`. at .#XAR/=A5]1E%Xd3dhec;e!k]-5frf7QA
+%3iWDY(3=fFVhed8kLG#T$sPi0`Ejrcc-VQHX?_>Bo.[#2l0tdiW at c:_O<3%sZb##c2O*PaVt.'79%0LtWi?RPdo:nM4AmW]bl.WF
+%B=-)t!-TA3;78t`5!7QPW6C*-d4/:sWS2n'MVDV*B#U`PS2sVTEsU8U'pA2Cm07X)'Nq',[$UNIP;Tbq);#q+koZg6'H5o'fgjQ:
+%q<Z&^nW4q/jKdjug)^_fO/,R6"VY3nf\8^";NBKpi$t+7I#KnQEcdfS`ql(l$JF:H4d+[3F#0Z5R.*(%^^Qh(K]=;Xof,X)BAJXc
+%>$<dUNoW,t`fK<4p8d:FZ5I^<mjdYdM8r=TSL2a(%Q<8;4QhP4?[g/(BFaj+jpL*o_UF^Eo&SsHDMd0o_<m:]4gJ')7'Z)m/or#k
+%M&Rc_$`.\c9Pq\c1Oldl.I_WaCc[M9c[?d`]O.cA=4I9XkQMLnI7FUaZCp0TL4D2sf)rgL?._mhRs[`la/$aM/"_Z`7\OS,;ko2l
+%E6eUB.h9('TnZMKQ9!9O7DI*0!&RJ_Mo;`-f-%T)9]8;joYhI#Bs'$FJFlA).^3#jU%HgA"Eu-J;f3T_";Mk^>-+F#9l5l/8'J$]
+%f[/QoP8(6X1albbN`6"CQ.%2Y4g;6kV"uIXY=,QZ<Zp"EW^(K`b3C0rb3i?<&a_+!5liC4VE1XVW.P.J`.=uaRnUE->mIMB.eu!$
+%I8b:<5%/%\NU`n;\qPEGX+d\>8`u3/3\QOeXHFd>g<-4]`AF\pi$a.c1A$Wd<q0jr?),26*-cSF4^if_<g6X=el5%+Y"Ic;@So74
+%7.KnS_U\j\`u34?Y&4Y<DE!jrC(^P]h0!h8`\V&<cR]aYH<el)\k,MT;;gL;$1Dumn>O$)j1`pOHQ9SiN>QK"fEe^*5!"A;<2,IR
+%Z3;"Q2[gC7)4J'qS[_]N\qegQT`Cq2%bUXJX0/$:2et`:Hc=uS at u@:7i=1'4#biee$7&U$>n_6;cjEH`TG#d>^q+Ejo!\EFl^7C$
+%(`qr+;c]C0Zb<q8N\h&]OaJX"1h/84*+oZ at RC?!&X^Ge2<sgGHH3*A<Ki/q(,fT6lr.hn8IXMFU`*+MD(6$RMOc]6l#p?!*T5*Uk
+%G?%N3R^^J>?BsR/m1Ngjgl9I.ff#S98a*Vf<;LHob/fR%OR-:c4jnS*cuM/LX!bg&Nd9]_bVofp%K$5c099%4EYNXJjh33eA?1f8
+%GY10Gcf]m7);IF=9q9)W;t3B1h.2Z"d6p1E^L87e[gKbhJ:SHR?Aji at 8_^7uY5iEVF'E&_Ct6O>hWk5h7#IFL=?DQjGGDH)eD-%`
+%!`M%X8TFD*:eL-YL at nE+_@C+RVecf3%hbWP$$X9P7TG#k$_U)r_afQNWd+Te86:=W1;qOJU.Jpr'$K?KYsS4L;\E99##cPQ=CC,+
+%RXr!;o%%fMZO)b8+r6p@'1\*9_4l!]]QkKZWNE77Rb%`p$p)^X",NL\=!1&S<q[dPI5,\gBTNU$/<`S6D8g<'\_d'T<J^9<'g#gs
+%L%JYLL#\)chY/F[$V",-X2VX^8Q3eemdb/sALY5M[cgR95b-K5&Le*]/<g3HOeBMU"gG:^i>/ELZsj\\=ZpOc'a\*>o'H=laS0O$
+%O0*k'"ThZ:j1[4G+F-U1n9P+OW*6;e2;qVe4OQ*[dU[,i0$@5)H1.\l>Q(e]9JNK?%o6VajTIOQLl2;^E;cBV-c\4j@,RDO-D0(^
+%o9reMNo,k4+4`p7SnK23m+0)_>TrOB'0]?2Q%UA0n?8J/)SJ!Mk7GMa-g1Ee8>f9%)<,c_m/OSu<$+'D$.GCO]rW`9DtWndjS9pX
+%$hI)4/nSs9)P'VnFohS<;)[8g7NE"FO$'q*7l"QcG+\6mjJXeHHq!pq4n6'LN$sJ;*-c5Me\\5O()DqQ9Y-pih-(?L at QW!i"V5fH
+%(N*SFh&$uNUd#;4C%c!M\Fh0;KU;kf/BZPfEs;&A40__h]]ba:XNAnQr("=raomW>2oTF at X\&%n(>c3gEDQ,8i_shlJqFpP at o]ct
+%-#!8<AKB^/LANpm1E0C5le'9E8F3(3@\>W^?M+a)g<`FX)CZMPIVaUn$.CK;j15LmKm];k\a63`R7nAU=,Y0%2eF\EY1iWhr6?:3
+%E+/sT"6.\^%u??.+ec:bYKsqR1!X+<H#nmD7:7eS]$ARBg&\,6%%JP4\dksIT at L`b=l%A;YM8lKMt9I%E'h at C$Qqe$U4O+<o*I8/
+%F0;GujJ\nBl at O>e?ZUj)Dup\Fo$A+%ZPIrR>,m,&cE\BCb5l^%M/F9jOLfV6&?;[R[:5#=D.t`;SXI4b,WkDdRK"toS&PGKW'qcu
+%%44D&4mC\O2!7Hd\Pr*^QX6%bF#1(;Q3cn8[foT:Z13-`;L&7ch5i4/khWTGEdDnT+*g"9A7h at k^72%@B'IoJa[<NU;g@[-,G?$V
+%bj4iuaEoN.F9_D\pquPt*P$6D+,[l\-JgPT;o$(/CM"EDH1-&>/tp3/EUE:YR&8o,?Q_\ibiB4Y[ZDi]J/B=roa)CjjFI_Ks3HJR
+%S&]Y;b5D/cEu]IJFm&m%,]W(NVfN`:arb&2Vh^,j?Zkc=8==KKn/B)F9DVr0jth'b1lW)L4.97,Hd9fg8FgTbnQA#lZn<15J2?kK
+%*k>2u;aCRnF5gRFlF[MWFp.kW!'RQ01p))uOa*7VOYCF<SD2#F0 at d=G\;_se#44D%OjfUg:-3taG6>oI=$<d2jOQg9-#l at qqdZ.V
+%'/8pMi<"8"ps,dmS%)U68DUTD,`f5tkGuRk4 at 70"$eW,?!"+.#?tG&)cJZ%IKKeO_I>l#*U]YRq($7mk:@G3+:eR5 at o.FElhn(m!
+%r]RLZZ[MuD=S43q_s]g'I#Pgu%TYK+_bT-+3L=sm3^e)E%3Uk(A at opKP6W$k2ZV:#i`NemqGKc^o5Np#Q7>9`Ul#mh>(o#f2&4D7
+%7L$oeT`?\^;*h7KWi4O8Q6Y1MLQub2QZg7FMpIG=IR`gY_`6Ad%5JkXkPB(ZZdk4f2c/%>!1C`N=P(mQ&VoD&e06H\IM$hSIcre9
+%:*D"H9O#1k at Eq2Pf,qE$,I_6S&hhm#$*'WU"`0rQH`nohHM+5aSrT0.HDF'7?6,AhJQ&me5.+(%/I:VJ2k6D0qpQRBoi6!BUR&+:
+%6d`0b'8PfrKjDL4+ZZbrM^KK]@+2!W<3i7hWl6o[q`(GZEdrgkpo?MuXSs.6XY_$>Qtc4/pf"P=Gbu(V>3Jnr=Jc!@-O;Sh:1!nt
+%dIW at 0[P7"*Gg4_&;8fG(AW at sRajX9KO(i`R*SW(+GKT!]bL<gF3_*uI8=Kugn;p3Ap\OIG$/?3>>UfFC"NTqhQT8([erC]bE=+.#
+%qK))0/uI)EGHs!7qe:0Ch+A%BGN,LEX!^S*N15"_d=@7s$Q[JQ2k4\*_so.n`*hET<#&uGj+\eB at q=Q_,3>`8HBRc^;\nShfSJdt
+%6s`S91Re,0H44H+mu^J;*7U#c/a7`%&L07j<HmO!.bkjbAU?io*h<9nj;E.VB7<H]GH4M22aO]Q!OnHc5/[K5hN;,Ka.Zp`kqfML
+%k';Q]LK#mI`]Xua$h^a!pS1Lq>V>;hJ5]qMk3>n5b at fNAO@LW5%4XNip#)?oIn96:NQ(FAEU!;XIMQTRMt_L$<qB)i;O6_pcZq%9
+%C!Nig>3;T at 5$A`Vi<4XVB$aX9K6DMGA!\'4,F>l;bL*l"jWlUBV$>bm>k>sLlM*PIr$TO%o4a@]1N%+LR$3`HP>RC95J63LVU_=J
+%@?$it5!%,^PSB"^5*J'Eoc,7Z4C,B_+9:s=-*p(BUHHrI/oUt"GN*%\Ut&N[7Qpah;'>JuqQ7\G>=GWEkL;RlZ>8MC`T(r1 at n(!l
+%&"L]mXe*3j`S+(n`*r$$@QKA:D6`K+dE.;`mPAAARG$V6''3EK7p8('&r:rWki]id>Ff_EGVu`H[e(4X?dM4s`EY[._EIXKU&L[!
+%8Ofa0Kd-;'[>0t+Na.7I62DZ+0;R.n@,5K#K6#ai^A+H#It-A4`3\ecB,I3Q3U[o'()$e3ZBZ[7CgrpI$"pEBrW]nu`I`*Fqd6Im
+%4.BN!I8^K8%]Nb>.rqB^;HkWj at SC?][LO$m_3cuaX]RM'BkfB>*I_mjTdq3KS%WeLa)-<jq&`1:F5!*^ogIKmlf/56fpdNP..tL<
+%+:2KL=JsK2+OX2m5"Y9Y?Z+<>4`XdDFNq`IHP)FLXBr&YJs47(eY#Gn]2MtZ\aorNfEXFP.Z26[[rN8,`Y4ks8A at e@&'3?;k at sls
+%iA<V-n)/0)B"DTfRSmhK6B39/4KZ-f9(N]t6Rn\c61f8Q"d0';kjth&r.GKB^-0*gpMnfa&!/\hKPPXKrFXr,X\'E?19sV/4d37G
+%FP>,)f'7A*>WTHV0gFCgZ)TLr:JjnN7J>$mr_7a>E,ZN:(a#Tsagu4LA1CAT.`'pq4YtK$X3`KNANi+A%OF.WB]dnL.:nOP]J7TL
+%FTl))JG$1NH'27FquDp^_,c)7%SQIIe-F+b0ENW8Di$e$Jote*#VAPL"4H:*m745G"Er>)Sg5P at YUhR'\O;JPj,ABQqOt!F*?K>?
+%LW-"::a[uC%M7hQ4od*YP.iRhV at G!d330j&9Vd]c2.cYE4VOg<7f2Hl:X<'=D3(T=5hec.+W'!Z4KLg^/&:k%k4YH[5&0hV5\p<r
+%fTAoRY<4a,,mblhGa-&,8h0n0JDI^r@&!_K&.815aH$>hJq[2snKo^?oNXCAfk?4qbaq5m:[mdsHIclO'8pj;U>o)g4\k5bcduD;
+%#*RigX(RksEY6GG6Tc&se*:/;Vd?*L%uf$F7'!.a"o;?A'YLfXd,(8*\O_dFZkOSun]%AQ^AH_+].saAY(gEcn0bgRfjqc.i>m:%
+%U-7_[e$'"2qLW?rDh:GaqQ[^?Wj'k;[C,R#?rq\j!tOuud(LCf&-!ti7>+!"='l!MK6DT`-kXQWKN5-]eU<<j/Z=A7pMta5g>[t+
+%VKDpm\Xo2`#sikia at iOTa(@4,Co#P-1I6ZOGG9SC*9T?gV`1F^)8qXn+[&ZQWn">YENY@`I7"W%3;N:o_<dpC(QOr^"FKD.T_4kI
+%ltpT1'P"]qD"l&-\Sa`&fJl:AQQM$/3LcN^d5/TdF(UL9"G-n>Fj<;s(lS0aDr4tu8[ic*haO>\''6V)YF?9b>hfX\LJ<)CIfsrN
+%-u_9/4L+DXP3oq<F960:gt^l?#g<qY2N&7AS.mppLVp7a4o&fardlTIp#\S4(F#'-ba]"K*8Ka5dU<m`eFC!48JR^NISgBFiLulH
+%)u=%3$mu*^9+$d[W1(TcZa0J^:"N-L9u$!h+B5OR<Jsl$CK&CWQATUiK'tK76;T-)gu=KpmZ-J5_qus"No;TiTI1T-04Q'f4G,5L
+%!dPcWP]^dk.\Qb3)CBj"QN1PnTg1Bo**[eC-K^L(8?#gF!_InNYc](M]k%H6$bPJtg%-ub.C.s+GO at uLbX.$E(hFnNW215b_&3u@
+%FHKftg]LQbH6\H&!SBH=[JDdu4P_l7.6Tb,N\j<@)s\3nYb"n\BK%q9l\<mWGr:E=87.49ba+il?$ep;N\0+llID=9:DnDpW`)TB
+%Qs;_2T4MbAli=,9()t5h1'"qH[/.626r1eGrYLPi;Ep2>NNb4aV"K-fDq1 at 6c,T?M*H%`/rW'#&F6[`1JZU03^2EEq*;PoqS[S2i
+%jqDEL]XW)*f?/scBA6Y2%9Vc?+[d*-al-):,HDja+62=V;$bJA&HR[QDI#!7=5pfg'V[`s0T?6Lc:gd5>I>nPW#7qRUI$RM<CX&)
+%X!=W=/]Y at OUqk,9,]E:\:WmaPa/SZmY0a>L836<,<0nk!.H\#a3?IB+kI@:S!M$+A]bfOsio-tER(X<aSoU`hi[JJ4OY;&fZ$aE*
+%"7i"O4Hh^HO.Z+P;=8fk%DUK$pGL#>KNctBj.>k9=^l]iE.D!f]I+-DSfAl1!-_osW at hmk]hA'`(fZh]i/\VW"7MBnfu54[/EOK9
+%CP7"#W]Y)t'KcUZ[#OB)Pb33>#kF?,*"Xpkj6Dp.A!O.2_7=Lim"q3VdQrfO]IW&7MW&j9nf5/E/2Wl[Y:#ie9!m"l(JGDV)<:"9
+%^o'^,a;Y7:4,WE.%>TU&IH&H8*"QN$"QNTCY, at FCdS?*P+s#*%+Re4U<l\Ut,<[fM?__eS:*%n=H(;TZg$(jV0SI)5lW7nWI!%r"
+%Ol;g%kTbi4Rn0Gg7Q`]bVC`lpr<W^8<^2VTaaOV>5;e/FRiY@^=>YlpcQ+k+YSr.?lAbci*"a^8r`m:%PXkG/64Vdq[;e(VmKo6&
+%f`MBOhYo.)PNLCm0":UXj2XW=+eYOqbE'&WjOnB46gj`i)EmX22P"C^q*&l#Pir$c!ZX.#_4N`$rm+5<+4#i+St<REM%dK\pd*o>
+%VKm1b+<i('ld4+tF+kULr3YB9QrmeIr-Uj/Y<s3Z$R)l!nP^ZF*V*06g'RJ^IiA#Wr[a(H*[1EC8b\;_g#qOh9FFkBL<!L]q?ebd
+%a$/)<On[o76'HKYQ/hZFQn4.L<ZC$SP;Qh2+h:S*qgDS+&1b?4WTo1+3$YQ<rEYr%N?Yj@[no9_[shkg#h-*.j/jAj5i'Kff!F at n
+%9?[ZT3e4r&#i$ZrqZf.QGQdn6>CH-[2fRV+*4XT+ef\*6.o<B]s*iS at o[pH]H?(!NaZ$oT?BN_3G)i3UfZh$65[2P7!MhEI&Qh-c
+%'aT<Xj6,(*khKnof5p9c1j]"g at G,1Ca8pE\)B`Q)5j-9Ga$t9Lb-i+Fl!(/!gDsg+T[Vrag6C26C at 0Al#MBio>,n<'>?[%`%^PiS
+%*00mJDOjuc*Iu]?e=R`/%<=E)/mc!g?$CTVK7i1cfQG\qF8u6q+e20%'@ACAZqg$Y<hSR/;Lhm8),fhH5ec;gU"T^5X,:nOp>1Zq
+%=KATCW^<LOW at 1"b0%e`SOhQ'pWU!D((Q>@:<f9u=CK&D2der'#No$^cR?X53%/7ODQ#0[H)>[h$!fsG at FD,-(#6>l*Qbr(??*T5n
+%.qpSX!:#X1<M2Y;4$Ll^Q>hXp>tD*8$DE?/=')Jt?CP,YO9Y^Y?[sU!1G9/B&s]FX))\94?FTOr+L388%,D"96Q9V8!SI(o%RrJ"
+%LMdaCHGB_m^!+lAGZ8(t2c&6llV.c9_^(1j(X1G79BS>*b,]_,7%d-)Foc%P<fF=njPp6)&D%Y)]2We._M-*#I4*dp+=hE&Fd/N5
+%:U=upU85U$Jlj,f?=kL1"V*uE,]7b^J4%^eUMB\#'fZsd3tS at +Z)HNdmo,lYi/e#:1;m9qJOA)m('eREPaF_n$)4g%<h:VFm=J%;
+%FS/)Z>S3U^)l\4-`i]>:QP\Q)ip@(jC9K;7qLl'<)X)_eVchIuf^:cS=o>e15eT<\qN!r>DpQoX6'QKASuEf^[FOK;Iod^p###Bl
+%K!e,79(1Upin)RFj\b$hd<g9R<G-^_g7b<Amt#X:bL1muQ[1*[[EQ=fj"ub@?6>!-\P].-2OnlX#,(ZG[ATt*dCBp)LX,44\4m#7
+%YhD%!pYgPK&3:R]r4q3-fYDYg#j(,j(](RlA:#uA#M#D_&9N;;]iaBKS\WT:"i8M\8`+[=SZP&_[tYj'^-gjqlb0%R9^@*SYS!F$
+%51+ZD?Ks..l6pieFa((@q5hp5G"\J.jU'r^@*@ko=.5oc>LNo]a at e4p1slE0B/m%XGE7OV/7#@YF\&A/UhbT(Od?!1>a_ZY1ltW$
+%^XAn_eumLP)1c'`]sQ/k at S<aqXos3X]VSW:Zd)nD*hVkOm:dVi9;Dgd*OYkeMkNgIb4Y!k(Ia[i5]#U/m2S>j\eE^O_ZroJhZLKN
+%f&$cmHJ[fY`F48kVcQqYQZ#+`m-a$6G(Y^h3GcjBCs`SSYW+O!Ro`rqBr(9nF>PsZqspf^htutSJg7m"pn.S5R`nVe2Ic<?%i2'+
+%HgX"`N22P<4XR>t#N<[j%Qn'a^\lD*gYtY`ZJDYAC%C88!+TY48a,"<YXQ$L:.gsBe-0F_R^,OR31!dKR&UFk0O,X!G?;1m%oi43
+%oPn%liR>O8IihNkPTrB+]7.GK+^TPBe9'/jBouefQ0>GRbs/VVGtfUXZ at Cq<S57ra;1-8u[lC^X-H@#A%(12->rNV[!0dMkmOhUK
+%GO)8uVVgE,8*_n$gTI\TrGhg[bPF*%d\XJM7*gce_]d:!aUcb,9f##ljQC5q&tr+=fg2,bER<GFF at -C*h"$)jGcT#B>ZMN$5-I2Q
+%\Ad5P&p"l/,j$^2K"4Iu`D4XjpiJ\.7iu^FI?kM3Mu48;<#0"..luh"qC:"s6,jDPVPRo?]/7nMVhSM=%)%Vo((+AZqkSa7r]s at B
+%"a8QcNQu_?-Jc+X?lT?h7_a460HW9pdEOp19Lt&:56u!JU8[<"`R;D)h(b3@"K>G$B`#KEP<EM=N%<ZYas9SFR.ah=3)I3SfOtNN
+%%O:+p&>ZY"Gg>P$""f[Vbd/H-b,shoh'OF(A6*Mp,GcFDgDm`%Zb^*>`$!;dr=gY4,g at e.1EDZ`N>:9HWFMCND48n(CPV!rHOLN6
+%ZN:t[B0pg^<O77W-"X[^*gbEr0OH^\XU5;e_6Oha1S!TBj4N0N4_+5/:p*`S45bpngO`!]^9`u+8*u##eW'e2StmBG#>..`l_sQ8
+%m$uLaVTgB2 at fJNeAG`VY;;/8QmWkr(A at YQ^r1K%]`RQ)c//=-j(\H2A,oU]@i?1"GFRV2[Z-/H0D at tMMs!8L%D3PqX6/lcFGPLkY
+%c<JYc\+Uru`KV'ine<%c#B$!Hcn:`DYbXE&56XY,7<"O-UZm at j>XTSlI9U5GBHPdH1^:EB/aIS,&f,ok),U7_bNnUL+0I6A2m?\I
+%;0:r^^Z,E?k5:HE<"F'b2Qo:nSPH$)o$<VOYPun>ErXOOD>*\^5E?1YcKuXSII at gIZ"O?^[S8Y#hHhmEhZ\QIIk2!'fXC=#$=+Lu
+%oL!D;c3Y:mr)D%r>i!--]RRH&]A8P"([phhojsPs^\d4RiD9K$qtfFMpQtUrHr'fmpZ_K4Q`oi'YHBMdDVr)is6aoKIX?G9E;jhP
+%VYk0"c2HbYLV*H,c.d1*rW3?TeI$g#GQ7U<IsM(-ru^EZ]<h~>
+%AI9_PrivateDataEnd
diff --git a/documentation/figures/rnaseP-bsu-alignment.pdf b/documentation/figures/rnaseP-bsu-alignment.pdf
new file mode 100644
index 0000000..6c97881
Binary files /dev/null and b/documentation/figures/rnaseP-bsu-alignment.pdf differ
diff --git a/documentation/figures/rnaseP-ecoli.ai b/documentation/figures/rnaseP-ecoli.ai
new file mode 100644
index 0000000..01d809a
--- /dev/null
+++ b/documentation/figures/rnaseP-ecoli.ai
@@ -0,0 +1,958 @@
+%PDF-1.4
%����
+1 0 obj
<< 
/Type /Catalog 
/Pages 2 0 R 
/Metadata 45 0 R 
>> 
endobj
2 0 obj
<< 
/Type /Pages 
/Kids [ 5 0 R ] 
/Count 1 
>> 
endobj
3 0 obj
<< 
/ModDate (D:20030327114340-06'00')
/CreationDate (D:20030327114336-05'00')
/Producer (Adobe PDF library 5.00)
/Creator (Adobe Illustrator 10.0)
>> 
endobj
5 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 2 0 R 
/PieceInfo << /Illustrator 7 0 R >> 
/LastModified (D:20030327114336-05'00')
/ArtBox [ 99 102.35254 515.59961 689 ] 
/Group 38 0 R 
/Thumb 39 0 R 
/Contents 41 0 R 
/Resources << /ColorSpace << /CS0 34 0 R /CS1 35 0 R >> /Font << /T1_0 36 0 R >> 
/ProcSet [ /PDF /Text ] >> 
>> 
endobj
7 0 obj
<< 
/Private 8 0 R 
/LastModified (D:20030327114336-05'00')
>> 
endobj
8 0 obj
<< 
/CreatorVersion 10 
/ContainerVersion 9 
/RoundtripVersion 10 
/Options 9 0 R 
/AIMetaData 10 0 R 
/AIPrivateData1 11 0 R 
/AIPrivateData2 12 0 R 
/AIPrivateData3 14 0 R 
/AIPrivateData4 16 0 R 
/AIPrivateData5 18 0 R 
/AIPrivateData6 20 0 R 
/AIPrivateData7 22 0 R 
/AIPrivateData8 24 0 R 
/AIPrivateData9 26 0 R 
/AIPrivateData10 28 0 R 
/AIPrivateData11 30 0 R 
/AIPrivateData12 32 0 R 
/NumBlock 12 
>> 
endobj
9 0 obj
<< 
/OptionSet 3 
/Compatibility 5 
/EmbedFonts true 
/SubsetFontsBelow true 
/SubsetFontsRatio 100 
/Thumbnail false 
/EmbedICCProfile true 
/cCompression true 
/cCompKind 3 
/cCompQuality 2 
/cResolution false 
/cRes 300 
/gCompression true 
/gCompKind 3 
/gCompQuality 2 
/gResolution false 
/gRes 300 
/mCompression true 
/mCompKind 3 
/mResolution false 
/mRes 1200 
/CompressArt true 
>> 
endobj
10 0 obj
<< /Length 1140 >> 
stream
+%!PS-Adobe-3.0 
+%%Creator: Adobe Illustrator(R) 10.0
+%%AI8_CreatorVersion: 10.0
+%%For: (Sean R Eddy) (Washington University)
+%%Title: (Untitled-3)
+%%CreationDate: 3/27/03 11:43 AM
+%%BoundingBox: 99 102 516 689
+%%HiResBoundingBox: 99 102.3525 515.5996 689
+%%DocumentProcessColors: Black
+%AI5_FileFormat 6.0
+%AI3_ColorUsage: Color
+%AI7_ImageSettings: 0
+%%RGBProcessColor: 0 0 0 ([Registration])
+%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) 
+%%+ Options: 1 16 0 1 0 1 0 0 0 0 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 2 3 4
+%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () 
+%AI3_TemplateBox: 306.5 395.5 306.5 395.5
+%AI3_TileBox: 18 20 594 776
+%AI3_DocumentPreview: None
+%AI5_ArtSize: 612 792
+%AI5_RulerUnits: 2
+%AI9_ColorModel: 1
+%AI5_ArtFlags: 1 0 0 1 0 0 1 0 0
+%AI5_TargetResolution: 800
+%AI5_NumLayers: 1
+%AI9_OpenToView: -445 857 1 1578 917 26 0 1 10 73 0 0 1 1 1 0
+%AI5_OpenViewLayers: 7
+%%PageOrigin:18 20
+%%AI3_PaperRect:-18 776 594 -16
+%%AI3_Margin:18 -16 -18 16
+%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9
+%AI9_Flatten: 1
+%%EndComments
+endstream
endobj
11 0 obj
<< /Length 9781 >> 
stream
+%%BoundingBox: 99 102 516 689
+%%HiResBoundingBox: 99 102.3525 515.5996 689
+%AI7_Thumbnail: 92 128 8
+%%BeginData: 9176 Hex Bytes
+%0000330000660000990000CC0033000033330033660033990033CC0033FF
+%0066000066330066660066990066CC0066FF009900009933009966009999
+%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
+%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
+%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
+%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
+%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
+%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
+%6666006666336666666666996666CC6666FF669900669933669966669999
+%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
+%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
+%9933009933339933669933999933CC9933FF996600996633996666996699
+%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
+%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
+%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
+%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
+%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
+%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
+%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
+%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
+%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
+%000011111111220000002200000022222222440000004400000044444444
+%550000005500000055555555770000007700000077777777880000008800
+%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
+%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
+%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
+%524C45FD1AFFA87DFF52FD56FF7D52527DA82752FD56FF527DFFFFFF27A8
+%FDB1FF52FFA8A85252FD56FF2727FFFF2727FD56FF5252A8A852FD57FFA8
+%52FFFF5227FD56FFA87DA8FF5252FD10FFA8FD45FFA852FFFF7D27FD0EFF
+%7D2752527D527D525252A8527D52F87D7D5252A8522727527D52FD2EFF7D
+%7DA8A85252FD0EFF5252527DF87D277DF852A8272752F87D277D7DFF27FD
+%04527D7DFD2DFFA852FFFF5227FD17FFA8FFFFFFA8FD06FFA8FD33FF7D7D
+%A8A8525252FD0DFF7D27FD057DF8FD057DA8527D7D7DF87D7D5252FFA87D
+%52FF5252527D7D7D52A852FD29FF27A8FD0CFF52527DF8275252F85252A8
+%5252527D52A852F852A8527D7DA82727FF7D52527D7D527D7D52FD23FF52
+%52A8A87D7DFD56FF5252A87D7D52FD56FF5252A8FF52FD57FF7D52FFFF7D
+%A8FD0EFF52A8A8FFFF52FFA87DFFA8275227A87DF87D52277D527DFFA8A8
+%7D52FFA87DF85252A8527D52A8F8527D7D7D52FD19FF52FF527DA8A8FF52
+%FD0EFF52A87D7D27F8275227A8FF5227527D7DF87D5252F82727FF527D52
+%F8A8FF52272752A87DF87DA8F8527DF8FF52FD19FF27A87D52FFFFA8F852
+%52527D7DFD0CFF52FD0DFFA8FD04FFA8FD05FFA8FD29FF52527D7DFFFF52
+%52527D5252A8FD09FF27FD07FF7DFF527D7DFFA8FF7DFF7D7DFFFF277D27
+%52FFA87DFFFFFF7DFFA8A8FD22FF7D52A852A8A85252FD0EFF527D7DF827
+%F87D277D7D52527D527D27525252F8A8A827522727A8FD047D52F8F8277D
+%FD24FFA87DFFFF5252FD22FFA8FD09FF52FD29FFA852A8A85252FD56FF52
+%52FFFF7D7DFF52FD54FF7D527D277D52A8F8FD0CFF7DA8A87DFF52FFFF7D
+%52A87D7DFD055227527DFFFF52522727FD34FF52FD0CFF27277D7DF852A8
+%F8F827F87D527D277D277D2752527D7D7D2752277DF8F8F827FD28FFA852
+%A8A85227A8F8FD0FFF7D52FD10FFA87DA8FD30FF7D7DFFFF5252FD54FF52
+%FFA852A8A8A852A852A8FD50FF52F8FFA87DFFFFA852A87D527DFD4DFF52
+%A8F8FD0AFF7D52FD4CFFA827FD0EFF5252FD49FF52A8FD0FFF525252FD48
+%FF7DA8FD11FFF8FD46FF7D527DFD13FF52FD46FF527DFD12FFA827FD45FF
+%52FD16FF52FD44FF27A8FD15FFF8FD44FF27A8FD5AFF7D7DFD14FFA852FD
+%44FF52FD15FF7D52FFFFFF7D7DA8FD3EFF27A8FD14FFA8527D27FF52277D
+%A8FD3DFF7D52FD14FF7DFD05527DA852FD3DFFA852FD14FF7DFFFFFF5252
+%527DFD40FF52FD12FF527DFF52FFA8FF525252A852A852FF527DFD37FFA8
+%27FD12FF52FF52FD04A8FD047D52A852FF527DFD39FF52A8FD0EFFA852FF
+%FF52A8527D52A87DA8A8A8FD04FF52FD39FF52FF52FD0DFF7D52FD04FF27
+%A87D7D52FF7DFD05FF27FD3AFFA827FD0CFF7D7DFF7DA8FD05FF525252A8
+%FD05FF52FD3DFF52FD04FFA852FF52A852FFFFFF52FD08FF7DA8FD05FFF8
+%FD3CFFA827A87D52527D7DA8277D7DFFFF52A87D52FD07FF5227FFFFA852
+%FD39FFA8A8FFFF7DA8FFFF7D52FFFFFFA8527D52A8FF52A8277DFD06FF52
+%52FF52A852FD39FF7D7D7D5227A8525227FD05FF527D5252527DA8A852FF
+%A852FD05FFA8F8FD3CFF527D527DFFFF5252FD08FF7D52FF7D7DA8FD0452
+%FD40FF7D52FD04FF27A827FD0AFF7D52FFFF7D5227527D52FD3FFF7D52A8
+%7D7DFFFFFF27FF52FD08FFA8527D7DA8FFFD047DFD40FF52FF7D7D7DA852
+%FFA827FD0AFF52A8A87DFFA852FD3EFFA87DA8275252FFFFFF27A852FD0C
+%FF52A8A8FFA87DFD3EFFA852FFFF52527D7D52A8FFF8A8FD0BFF52A8FF7D
+%A8FF7D52FD36FF52527D7DFFFFFF7DA8FF52FFFFFF52FD0EFF7D7D7D27FF
+%FFFF5227A8FD35FF527DFF52FFFF5252A8A827A8FD05FF5252527D52FD07
+%FF7DFD0452A87DFF527DFD32FF52FFA87DA852A87DFFF8FFA8527DFF7D7D
+%527D27FD057DFD0BFF27A8FF52FF7D52FD2FFFA852F8A8FD067DFFFF52A8
+%527D7DA827522752FD11FF52A8FFFFA852FD2FFF7D27A8FD09FF7DA8FFFF
+%FF7D7DFFFFFF7D7DFD0FFF52FD04FF52FD09FF527D7DFD23FFA852A8FFFF
+%A8FFA8FFA8FFFF7DFD05FF7D7DFFFF27527D7DFD0EFF52FF27FF27FD06FF
+%52FFFFF87D5252FD0CFF527DFD15FFF8FFFF7D277D277D27FFA8FD06FFA8
+%7D52FFFFFFA87DFD05FF52F8A8FD06FF277D277DFF277D7D52FFFF27FD05
+%FFF8FD0CFF7D52FF52FD14FF27A8FD06527D52FD06FFA8FFF8A852A827A8
+%FD04FFA8277D7DFFFFFFA87D7D52A87DA8A827A85227FF52FD07FF7D52FF
+%FF5252527D52FFFF52FFFFA827FD14FF7D7DFD06FFA852FD06FF7DFF7DFF
+%7DA87DA87DA8FD05FFA8FD047DFD0CFF27A8FD06FFA852FFFFFD047D52FF
+%FF27FD04FF52FD13FFA8FD08FF7D27FD04FF527DFF7DFF7DFFA8FF52FFFD
+%0552FF27A87D7DFF52FF52FF7D27527D7DA852A8FD08FF527D527D527D7D
+%527D5252A8FFFFA8F8FF7D7DA8A8FD0FFF52FD06FFA827527DA852FF527D
+%527DFFA8A8A8FD047D527D5227A87D7DA87DFFF8FF27FF5252527D52FF52
+%FD09FF527D527D52FD057D52FFFFA852FFFF52527D7D7DFD0EFF7DFD06FF
+%7D52A8FFFF52A8FFFFFD0452275252FFFFFFA8FFA8A8FF7DFD08FF7D7DA8
+%FFA8FFA8FD0AFFA8A8FFA8FFA8FFA8FD04FF7D525252277D7DA87DFD0EFF
+%A8A8FFFF7D7DA87D7DFF7D7DA8FFA87D7DA8527D527D52FFFFA8527DA87D
+%7D52A8FD07FF527D52FF27A85252FD0AFFA8FFA8FFA8FFA8FFA8FFFF7DA8
+%7D527D52527DFD10FF52FF7D2752A8527DA8FF52A852A8FD05FF525252FF
+%FF7D7D52A87D5252A8FD07FF7D527DA8527D7D52FD08FF52A87DA852A852
+%FF527D527D7D52FF52FFA8FFF8A852FF7D52FD0CFF7DA8A852FF52FFFF7D
+%A852FD08FF27FD0CFFA8FD0DFF52FD08FF52FF52FF52FFF8FF27A8527D7D
+%7D52A8FF7DFFA8FF7DA8A8527D27FD0AFFA87DFFFFFF52A87D7D52F87D52
+%7DA8FFFF52A8FD07FF52FFFFFF7D527DFD06FF5227FD05FFF8A8FD05FFA8
+%52A8FD0DFF52A852FFFF7DFF52FF7D7D52527DFD0AFF52FFFFA87DFFFFA8
+%527DFFFFFFA87D7D52FD07FFA827FFFFFFA852A8FD06FF5252FD07FF7D52
+%52A8527D7D7DFD0FFF27FF277D27FFFFA87DFFA8FD0BFF7DA852527DA8A8
+%5252FD06FF7DFF7D527D7D7DFFFF7D52FFFFFF7D527DFD06FFA852FD07FF
+%527D527D527DFD13FF275252FF52A8FFA8FD0DFF7D527DFFFFA87D52FD07
+%FFA8A8527D52FF7D7D7D52A8FFFFA852A8FD06FF7D7DFD22FF7D7D52FF7D
+%FD0EFF52FD05FF527DFD08FFA8A8A852FFFF52FFFFA8527D7D527DFD06FF
+%7D52FD22FFA852FF7DA8FD0EFFA852FD04FF7D7DFD09FF7DFFFF527D27A8
+%FD04FFA852FD047DFFFFFF7D7DFD24FFA8FFA8FD0FFF52A852FF52FD0BFF
+%A8A8A8527DFD06FFA8FF7DFFFFFF7D7D7DA827FD23FFA8FFFFA8FD0FFFA8
+%FFF8FF27FD0BFFA8FFA8A8A8FD06FFA87DA8FD07FF527D277D52FD10FF52
+%52FD10FFA8FD10FF7DFD0EFFA8FD0AFF7D7D7DFD08FFA852A8F85227A852
+%A852FF5252277D52522752FF5252FD10FFA8FD10FF7DFD0EFFA8FD0AFFA8
+%7DA8A8FD0BFF5252A87D7D7DA82752527D7D525227FFFFFF52FD0FFFA8FD
+%10FF7DA8FD0DFFA8FD09FF27FFFF7DFFA8FD0BFF7DFF7DFF7DFF7DA8FD04
+%527DFF7DFFFF7DA8FD0EFFA8FD11FF7DFD0DFF7DFD09FF27A852A8FFFFA8
+%FD0AFFA8FFA8FFA8FFA8FFFD04A87D7D7D52A8277DFD0EFF7DFD11FF7DFD
+%0DFFA8FD0AFF7D527DFFFFFFA8FD06FFA852A852522752277D5252A85227
+%7D527D52FF275252FD0EFFA8FD11FF7DA8FD0CFFA8FD0BFF52A8FD04FFA8
+%FFFF52FD047DA87DFD04527D5252FF5252FD047DA827A8FD0FFFA8FD12FF
+%52FD0CFFA8FD0AFFA8277DFD05FFA8A8F8FF52FD09FF5252527D7DFD16FF
+%A8FD12FF7DFD0CFFA8FD0CFFA8FD13FFFD057DFD16FFA8FD12FFA8A8FD0B
+%FFA8FD0BFF527DFD06FF5227FD26FFA8FD13FF52FD0BFFA8FD0BFF27A8FD
+%06FF5252A8FD25FFA8FD13FF7DA8FD0AFFA8FD0BFF527DFD07FF52FFA8FD
+%24FFA8FD13FFA87DFD0AFF7DFD0BFFF8FD07FFA827FFFF7DFD23FF7DFD14
+%FF52FD0AFFA8FD0AFF7D52FD07FF7D52FFFFA8FD23FFA8FD14FFA8A8FD09
+%FFA8FD0AFFA852FD07FF7D7DFFFFA8FD23FFA8FD15FF7DFD09FFA8FD0AFF
+%7D52FD07FF5227FFFFA8FD04FF52527D7DFD1BFFA8FD15FF52FD09FFA8A8
+%7DA8A8A87DA8A8A87DA852A87DA8A8A87DA85252A8A87DA87DA8A8527D7D
+%7DA87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA87DFD
+%15FFA87DFD09FFA8527D7DFD10FF52FFFFA8FD3AFF7DFFFF5252FD06FF27
+%FF27FD07FF27FD07FFA827FFFFA8FD29FFA852A852A852A852A852FF52FF
+%27A852FF7DA8525227527D7D7D525252FFFD05527D527D52FD08FF52FFFF
+%A8FD28FF7D7D52A8FD067D52A827FF7D7D27A8FD047DA852A87DA8527D52
+%FFF87D527D52A852A852FD07FFA827FFFF7DFD28FF52A8FD10FF52A8FD1B
+%FF7D52FFFFA8FD28FF7D7DFFFFA8FF27FFA8FFA8FFA8FFA8FFA8FFA87DA8
+%FFFF27FFA8FFA8FF52FFA8FFA8FFFFFFA8FFA8FD07FF7D52A8527D7DFD27
+%FF527DFFFF52FF525252A852FF27FF52A8527D27A827FFFF277D527D5252
+%7D52527D7DFFFF7D7D7D52FF527DA852FFFF5227FF27A852FD29FF52FF7D
+%A852527D7D7DFF52FF7DA87D527D7D7DA8FF27A852A87D7D527D52A8527D
+%52A852A87DFF527DA87DA8A85252FD2DFF27FD0AFF527DFD13FF5252FD08
+%FF27FFFFFF52FFFFA8FD35FF527DFD06FF7DFD16FF52FFA8A827FFFFA8FD
+%3DFF7DFD15FFA852FFFFA852FFFFA8FD3DFFA87DFD14FF7D52FFA87D7DFF
+%FF7DFD3EFF52FD15FF52FFFF7D52FFFFA8FD3EFF7DA8FD0FFFA8527D7DA8
+%27FFA87D52FFFFA8FD3EFFA87DFD0FFFA8277D7DA852FFFF5227FFFFA8FD
+%3FFF7DFD13FFA87DA8A85252FFFFA8FD3CFF27A8FFA8A8FD06FF525252FD
+%0AFF52FFFF7D52FFFFA8FD3CFF52FFFFFF7DFD06FF527D52FD09FFA827FF
+%A87D52FFFFA8FD3CFF7D527D5252527D527D7DFF527D52FF52FD047DFF52
+%FFA852FFFFA852FF52A8FD3DFF527DF87D277D52A87DFF27A852FFF8A87D
+%A852FF27FF7D52FFA87D7DFF7DA852FF7DA87D52FF52FD2CFFA8527DFD09
+%FF7DFF7DFD19FFF8A852A85252A8277D7DFD2BFF27FD07FFA8FFFD04A827
+%FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD09FFA8FD08FFA87D52FD2BFF27A852
+%7DA852FF52A87D527D52277D52FF527D7DFF277D527D52FF7D52FD08FFA8
+%FD0AFFF8A8FD2AFF52A87D52FF27FF52FF527D527D27A852FF27A852FF27
+%A852A852FF527DFD08FFA8FD0AFFA852FD34FF7DA87DFD0CFFA852FF52FD
+%08FFA8FD0AFF7D52FD43FFA87DFF27A8FD07FFA8FD0AFF52FD48FFA8FD04
+%52277D277D277D277D277D277D27A8F8FD48FFA8527D527D7DA8FD057DA8
+%7DA87DA827A8FD79FFFF
+%%EndData
+endstream
endobj
12 0 obj
<< /Filter [ /FlateDecode ] /Length 13 0 R >> 
stream
+H��W�n�6}7��>
���M�I�X,�
5�bgl�� ,
�E�B�RG�I�_����-�H��۸�=Y�*�:U]~󗫛Ӥ�
�);��7o�^�cן{vٻh�i{�tr��
�3�h%�����k��{��>��e�]{��^�z'?��s�>�]�ݵ�Gc2��5ڷ��h�ߵ�y�N��}86/G�2B%��!��F#�™i�۹�pO=
OD�������t��
�����^;�6�V��U�m�0d]��ù�6����~ѵ#ֿ��G=֛���ջ��z8M��Z�_�eSo�+�ݶl��}к�������u���
=a��\�{{���|��ٮ���-�n�8 ����~��!�������Smy���筣�pG��]�6ph 9�����rjF��;h�q|�+\���`�
��I�$�/,r��ϟ�3��:?WW��A���c���g�m��[��5 �����X�����
X5DM}�ǡ'��7,�k����k����o��"E"����|=5�G����ء���t7�)� [...]
+M���o��J|��e�
H�O�:�N��C�
�܈ɏU�{�x�Ȱ+7 at A�d3��n7/x��~��C�6��,�d��^�3��Qo�na.)��Mۍ��e��[��nÊlˍ	
�"7d�o+XN�	��]O��^��[��FM�J��Vm�v{�FWuӠT��m�a356�(2��Le��\6��Ǽ8xALIbi���1Ye3q�&��'�$Q$�C ʚe�q�Z���݅Ӻp..V:{
5>��!��t���rep�b���mѽ�]�B.��p�n�Н3�[��~t���]�h|���@J�\�S��K��RZ8JM6

ڙkw�>�(����V�ꕋz��G�
vN�[b�Vݬ���ꏵYp`L�tr��W�L{��=Z0^���[��$������W���E��Ό.���~0X�?��:9h�N|��c{��r���n_v�x>� ���>���ҟ��M<��?��y��gDa����>�N�z�;��
����6��Z	���k�w�)��Չ
J����\�ڻ�r�`  [...]
+R�A�
+a�0�l��DA
I )@M�,�!*(l���ABʩ�ј&4�ͩ����X�8L���,a)�X�P¬�����,Ĉ�P�Q�I��y������
.y�c������`�
!"�TdB �^�I.��d"3��"—T�#�Q�Q��`܌e��Y� Kx"�$ɒ"
�0�i�fi�ьg2K�� ��S@�He �a!
+Y�EZ�Eq|�ˉ�(�3�&؋�!
+]���U���U�R��gI%ǩLQ(?/r��y��y��y��y
�,���ϊLey�ei�dq!>�(Ì!� ��"Ui���4�-"�E�
wb)��@ݤHT��)n
'n.p�(P$ُ�X�9�I�O
G�I ��Q �GE��b, ��� �!P��ڗ�T�=�)2#�F��y� �/
+�D�|�"A�"!�C.Bd��t��\!�r� ���}�?<����!)x�/������gS`W�%`b����|�in��h
+���{9X����A���z
+�Ǩ�j�
�	��N� GuԞ@=�9�"0|��7N|��7N�N�ޛ��w3��ϳO`Gn^�{�Q�����X���ٟ�}�m,�|��0b-�W�����93(�O8K.�hmAv�"��Y����4P�
+'�|c�R����ǥ�|L��$V�Y"+r1
�#Gh��~0d�Y��8v,�m�
�d���-&�&�&�N";؈Y�L �a�G�Z*�-!
%
-
1��3A�D�(�,�[ܒ�YZī"Z�Ѿ�^��Be(��K��r�Xd��V%u(+��r��J
�5�V��Jmy%(�u�!ҥ�V�����Pn��VEw(��fO ;K�ؒ�� �E�䃿*ťՌ:�^��[�m\�m
��kYk�_���V,�֬�Ԯ�

�ӥa�[���~�g�j]r� �	���̵�\�˥�-
��U�d7��'b�O��?Rg& �z���&�Վ�$"�\�鎹�}�c������wߒ�dž��I�4�=�n��mǦ��c;T��u��d!F$k:S�9�,�D
*���rWkW
��D�[���U�����/��™1�[��1���^�Ի<�p���&ȉˈ�^1�¼A�y� ��{�6|�����I��q�:cD!�u�
`?xN�
|���/%�$^�66�TB�G�e�<p#�
HG��\*F�$a�
X!XZ�q��:���s��<���AB�axl�B�"���%�
?�����
+��G�����{`�� ��Q�1)8��
w��
�y4c�#��dƶ���@y#R�I���+�b�;Zz��o���<�ܒp�ͅ�a|
+��vrTW��h:��
�G�����TF�0*��!*�P�
�,
�p w����C6�Ɏמ��?b�gp�&��n:0�����}������=:���?��`&v�KϿ��[��k�λ��V���[��㗭CO��O%u���[���G]�:?ꨵ�*^Tv�_�Q+��ŎY��5j�N��UR+��-ͺ����
+��)�T��U��g��kWq��Z�3���eK�c�g{X
l�c��i9��C��pv��
�'+�l�4�c~b�	F���:�X���~�=���
����%BWJĞdQ�)GfV��ȹd_2��`W���a����ь���8�(9(J^��H�ˢ9@}.FG�$��?��g
_jUis���Z_����ڼ��4�mVw�.xb�Z����)����\كc䍩�-x&x����瓿���R
���x�^�\9~p+˵m�N�
��v�kx6��R���R�xd���ba׾����6�`':�wu�RO_� �j&l�j򊓼|(<%Z,AZ�DO�{����wI�I?K�����pѼd��I�5W��#�
+3
�t�xƗ�l������U�s��o����
sm�Ҵ[��z�5[�'��鿳�x]
JV�����/Lhq҂��
��J�|�	0 at O��OU|u钂<r��u���}��Y�n
��a
�
�;
�C�Q����g� �A8�p	��-�c���f�4��V�P��q��������䷲��N

���Y��<}:��8�W�v���j�W��o��gk�
}co;�V�t
��[}�r��`�36���`�!�C��
ܱ�IV@��I�f ��+�/
h]m�um���C�x��xSc`����ʿξ��H�wϾ]6��
j	tS��9G�T��<O�J�ʊJ�ɳ���|k�ccS��\�2v��F��ʺ�����|�*������V�X��66=�D����U�Ns����:
^�v���e�������=��
���j��xb0��\l|�l�����g�h;N% i��^����{�\+#��"
�����K/6-@����Sq��a��gս��]�U
����6���\��׮ŵ�
(�
����\�lL��1q���sG�>�%��~v�B�<�܇?�IR��x�C�>v)�����ʂ5
��@��0t��Ŷ�oe�
l8�����C?�16(6�1�s�id��C�q.��X;F��iT�z^7�l8F��!B��)r�a��+�N4,���.�����7W�5m
5��J?���D<y at Z.���n��q"�<X��L��|^�
+O���~k��}U��"MX>�X��zg������sj�G<1�24�u���b��]:Bavs��?T�c����J���Ey�kE�����0v"X>�"���pq��,�q$ �?ׅ�B1�/G�EƅOz�\�?��� �E��Q�k�ċ�Y�7;�{w�4l7b
�C�Q-*W�a{h��� >�#{b����| VEa
k'w�(cl�M;�����z�������#��
�.ə���bv
	[ǫ���z��
�S,%��
+I ��΄Ff���Ӆ�����|9��lr�Y�siIN�G�.
5�l�h݆�0*���2��
�E�@��j�Ou�z����w���W��^���NN���zg�+�cK�ը.�C�:��j_�)�^����;�l��zqL�s�ss���R��ᠥ���4낦*��]��

�IRpR��Ҩ�6
��^�.�s�*f�oN�
�Z�U 5h���@��B4|���"SQ	L�%��9|K/ן��;��ޏL��}�u=z>(�X±|c�Ʋ�%���d���4H45�\ :A:r����!�
j��������~����ߔ`S���Z,]�HJD�R���A��qU2�:=+YZ*JL-3�R�$���7�5�-r�v�W���
އ��%)���	��W\����^�'�>�������=��7��?0<�'SԠ{<�=�����(
]J�sjrL����u�ߠ~�˻,���z���]����?��
0�_�M!��H����yI���ʹE��7XTt
T�MEA�;�I��_z��H3�����P�%�([>FADE�F���8��AOec��.p�7�@
����t
Z�3�*/y�a�\��M�++x�|LQ?�w�A�~��.~�3���ݒ�	����
v���`�U������/9���}�����{���1n�������f�W�S�������M� [...]
rj�iti�h at +P2��7�3sl��
��c�ƚs'F�‰m����=�Ξw.���k>
=���>���>�X���ۍE��7OvGo��_j�S�&�'�J��rb^�&�Ƣ���J�e��lu߲���
+O|;��Ss��
!��mͻyAm�C
�$Z���>*�j%����YR�S�M�u���%FFu�WE%�UI-+�*�Y�
b�StI�X��h�"�R�ɩ7�)�*��R�Mj�
;���p}�v]ү۔Z:6���M�w���i�w��A��s�j�!=?����(4��4~���SYY�K����s{�S.��1���bUe�KQc|�y�1
�	�$���dG�΄�ŋoH��$B	��b�6l\4.{ai���LXC���- �`3ģPG
�(i��{����P_.;vG�
�w8�F��bd�ˡ�M��
A�C�1`���������3��(�
�!ZGd����
��D0Ae��J��6�n��

)�����+�^hp�
+�iXN'�F�c]v��*CO5�r�-I�P�6��0��Ez�
x
,��tOߏ4�L#�L�ƴ��_́�Lmo>K�Kn
f~�7���� 
;��fy��z
���*�����:�U�jtS��>V�P�T�u�̱.yU���ȫA-��X
jq�b?s��
+��R����q�V�ȍ�
�|ѭ��Kui�
 �
?=�y���	����j��ھR��m�Z�w��Us�=eU�=���_���^�s*�VK����M��K}�n,����~���]�
�z��]t�~l�]}g�_��}��QZؿ�͞����˪Uz��nM]���h�m��ޟ`N»e������
h�;
{��S������!�{U~T_���8��o����Ǐ������O��_�O�|~��}w�����÷o�Ρq�m�`Á�M
�!�6���$���x�\	�����θ
���6�/Z[&A�g�{��΢湬��?���7��eS�{'��	�i׷_
I�݋���a�d|ɞ�G}/�x�%Pw<��hۉ۩;�w��3�ߡp�[$�'7�����)�C�`F�Ip9�w'*?���ΝЁ�@�9�G�5>!�vbߩ=�;w�(�Vt��.��&ɮ>Hw^X� �s�U'i�A�/A���v��;
+n	m��.���vA�B�$�	h-V�A�u]�m��'��Qև7W9�Ƃc�/Ց]9
��kp�
Lɯ!tm1v��f+ST)�S4/�n���{X��y�
f��`�X�ʁ�x�q�~�x��[k)X�u/�cbg���q���)J����Vv���ZN��,[N��tK<�l̕�_��D-,PG}*%�T�27�j�D3�
��*�QsI�.(�
�J����H�::�a�*:K�t�+%���F���#[�͚.�=(�MŢ�zy��Gz���e-z���E��]͵�|l4cW37rF5s,��tm�6Z�5yӑ��A��ef�b:K�qS�0����	
�QFQS�2� ½b�K RE�Ҥr�����D>��m��=*0D@��9�
�l8ök� �����R:����M]͹r�`G��/Üt��>��t�`
�N�j0�O5��R���:
۶6#g��������15��� � lV
�z�=1 at TJ��^���`�3�h���.n�q��E/� �AttNF	v0���ۙ�
����/'	�	wz"
+����7Q<��lE]�4�6D
��6��"/('��P"���]̠�H��1E���@T 	l��~��d�/��
����7�[��.0��;x�ؑ�<59��N���"�e��,�s ���wȽfp��T�fr�=6L�
 a
�Z(va�q��*Ok<��ְ��&��1�b8k4�a�����>e�	k_�
��7Eu����5�����b^E��Q�(�C�+�U��wCbU:c0Ȯ�k�L'	�k&\�<�m� `��E�� �
+�
+6 at 3�Hk�Z ��>A&E]
,g�=0��D$�d�v��
 ���a��P���V|A
�	�p�6��� l2�rih��ST7��h�N��q��x���@�E휄��Y���jQ���	��W.w���%o��ΰ�e�d�g�tQ�i�$���r��)a
D0e0���`��v�y:ل9_#zN�g��H���}�cb'J
�t;I���9Ȝ\��	g�7�1ț$n����&�5Qи�q1�Rƅ
k4!�2�EL�L��5��t���;����3M��X�-i��63d
����|���
A���
c����

b��G}�&Fv�~ʻ��ޙ��;m�;C�;B��-�2D8b���Űt�:�i��t�ΙL�̻�	�&j��kC����$^͇m�rJ���Ӆ��mK�ә⇙>eD�����"��F����E:��d�����ʹQ�DԦ��
�1�4��29����Y��(L5Ul�1+�\���r`
@s�V����إ��Dq�.��Ӭ��������/~a�ݲ�堧�b�.�ᶸ�����_���GVꩢҊ��խ��[~���J��>h�}�u���3��v��}}���o>~���G�e�������w�o~�~������?~�׷oeW�e�h�4��<G�E��8H�\���.��(ƺD"9�$I���C���è#�ӆ�Fm�Jt�d!�p�(�Ě��┡� [...]
+��b�d�Y�U� �s�v
2�&�C佻wts?l�;�
�O1��}��)��.e<N��t7ӕ�*v���������nN�z���"�:}:y:u:q:m:i6�0� ��D�UΘ� ��H��
�
�E�N�N�N�N�N�N�"B:È�i�Ip0t�s�+�9�9�9�9�U��z�hT�Dg4H�)�ApdBh.�ʕ�(�XӀ8
,9 P'Ph��#kd4Kdl
J���
�A�[����-A�A܂q=y�f�
+�m�4���ld�H���A��܀�)^��-�ڃ�#8;��+���JP��[p��G�z�5��uFi=�����,
۰���������w4���<�ė�_2�u ��N|U<��z���
�!�yh at k�������Āǔ�lm�

�����֝�[��G�&9R�!�Z�F`���}c@]ý�)�`9ې-"�?��A$EИ�АV��;q�����
�1
&�����8*F��ƈ�r,
+���zID�QhN	��#�o#����Pb����
�q����S �<".|�m�.
@��;�]��z롶Z۠�:���AcwHL�N&���z#�ż[	]��DU"*�)')Q�J�$r5EbrZ�Ii�$�Bk��jhH$4m��S��ӎ�
�2��nD6��h��b�`D/N.q�sb)���'B�{|	a�� 0�z��gd�����Iƈ��5 ��Mo(Әx.M(_
���9NG���F�٬��\��
�s7��[Nܔ��%��!�Ƭg��1��:��	�̆nfD��#�؛
m̐�x�
"�%�͔��`L��x87�K��}2�U���dR�`S�hT;�hfu�]E�fW;3�u��[0����!�ƭ+~����+k
�q��t�#;��E�י�=��_.=�G�0�a.�A�Ţ�4|�o>�W00ֆ$�GDV��M�gG#y
,XH��b5+2�
��b�	����Eנ�ʘZ&M�c1�m�w��#Y���S����ʝV<�LVY�.�,��SW4Ȧ9���m��7�Cn������$BSd�E����a������;���c��7����w������*�q#Z�*,U�����ƻ^+f��`iD�'B�g�[NJ������<ʛ��u�d򲽓��˲�����Jle�{�p.�*��N�R
U�T8S�+y8R�
t"�P
�MpzOߡ�8C�M+���y� ���[�,��
+<��)t�	�$�I�#py
��a�a�aΑ}c����\��R�ꗰ����+�ab�(�
�r���G�k��%�VAu5fV
��bE�P�PQB��ZC�P9��*
LU�����{��I��Ĝ��
foT>�1�Gf�����Q^Y�QZ�Ɣʔj�����+9L��҃_�CL	b�d�IQ9���p�YiY<�%(S�p�^�bj�Gd�2��:�6%��2xɁ��2�(*i���F��Q)q�{���)w�J
E�
~I�.i�(j��t��,�Rn�r�D���0�S���a�XU���F_�6��q��#e�BT��H��i�Y� m
)b����i���ߠV���,����2g�Ķ�]U�r����0��+�*+fM��nwS��7Y�%�Ċ��J�Uu��jR�Tm��
+���j���n��V���a�=+�M��������� 2�5��Q���M^�"8��V)h�B�i��6a-�w��'=�
j[��� ���[��6��	F<��;s�A��a;
��`�,���GX|��{X�����D0bTl
#�)<�p�äW����+H� �^<*NtNQ��Ƹ�+��h1b���Q�V�p
+�bƠ��2j`T֊NacV�8�
+{Ġ
�
�|��cT��?�@�A�B�%��� 2_G�L��
0�#��
+�/>�
[���Wl�hգZ�K�Ċ�����Ҋ�5���*��b
�� �紮t���Z��欫6���<Ld�~)�|'�(9䆓F�9��;nݣ�k�=��:G���r�7yF�	��3N
�~׸u
�c�8�
9��AǸ���1^�r
�vh�<�\�|#.��9L�ЖU#��Y�FփȺ*�^���/�M�ڗU����/���o�����^ww��tX��w���N�[7�����Z���qU�;�=a���}i_��m��_}�w[:��V��=�/��b��ۖ��=�9�Z�z�����|�nч�r�
��M�����Ӈ?�����?|�9����?����w��_���������>���Ͽ~���_�R�[i�G
����?�����z>����ջ_�ۮ���G��3j���;|���=��8��#Q�c̙�w�
[�س�J+�@ |c��B�!���!�D2��d
1"1&�<?%2161:1>1B!���S�T�*Q���B^!��`4kx�b�
��C�!ŐcH2d [...]
ɆU�oP�O���Hg��"�N�c���f���7�saE�k�3|Kug�O?{X��z�
O+������
+����5^����_[�ҫG�܋_~��Š�i��z�=�ߊ���7�����,;����UxH��b��b!�!b�k�@� �Z�X���D9R�Pa�"�-,\(^��,bXȰ�aACQCa�↓{Y3��Ȳ[�NV�����
+!�!
"N��+����F�$*�0�t$�Fʨ�ᨁ�#��,�b�St�_�j���]VqS˥���J �Ȩ��U&��t�)/��햪6�x�֖�0�N���~N9���#&�^��.�:��5��:�<z���I/!?��%�)�-$cX�!�ù5�`
�����7�@CX-!B�3� $�m�%�������^-S���S�[�C�j�V�Ͷ��Υ٫��n��e��jP���Ղl�D9�-1����uz�R�gD0i6
@�S7��Ձ`=H6�O"p���ݩ��Kpp
����^0rV
��X��
H��s5��݃��q�
+��/k at coi�
�4@
+F"{������O�
%PY�
�yƗ�y���NGx_Pj����,
l��%��tȹ !�j�
�aX�A�K9�TS"�y ;U
�4`Y�����r�R���D�.Q���>�(֯E�d�Bl?��;�|#����R�NZ���<��+��
�#^���l�Fh8@�
��A�a���������Q�&�ʀ���=�#�(��<:ˡ�
+
넎�w
�/��ѣ/
����O��}ۡ#�8��=�ڡ�I!8Nt=^9<�ռiJ8���P1�/Ef��ar]�yp�H�G w7��,�x�?�vĜ�xW�����5��=`X�zpTu9 �b<���y�<
��a�PQ��ݬ�֖
"/�q�zj>k�Q��	gx5b)t
+�ы��5�ڑ
9�!�%[[#z#�U��25'���-��6e�Z��Y�]ٰhY�$�Z�Mkm�Ƶ�e�}���U
Ϣ�Q5�f^ۙ
���5�,"fc����[����lqkr���Z��Ά��gӳ���5���j,x5,�@
0��4Z����
��B9rR�2�C/�蠉N����FQ�=�#S�8OF�fI89�䔳�
/�i�1���
sM�DCx).��V�BX1T1P!��B�
(��	41%0!�J:�"�I��A� bbbb "�@o~d��xT
x�رB����'� j�4V���p����^
+>� @��'aH�XťZV
#KB3d�g�i�h����њ]F6mMhk>[�ٚ��T�YJb.����zX�V+G����A<���Y�i�<
y*v.<�P��3�)
�
yb��DE�^�E��#O{�i����Dy�=�j�����ty��YOy=g����N�6-g�=�:�o��(Q��96��;�\ F��ዞ��sLR�Rv����:wй!N�b�����v��T�ξ����
��L�qQ�i��@=��/
g��S�����i�����'i%):1��F��
+u����y�8�5m\��H���[5@��^
{-�JX��Ր� �0=`~&MdU�D�K^�M��mW�/���QJ��E-��D��U%!��t"��4��\������"c�R�X�_":���i�E�r
�j��8q
+>�
���.H���V
<���zٔ�نWQ��p&R7fq)��m;jZ�lI�4�O3:��.�fMf��S�8��Ld��!��L��/w
I�#������AUef=��S�-ȒAX���5$�?t��#�k��˕�N�����Ί��q�w��c��.��J�΃�<8�
+
���U����‡�ܡ�)�����AZ�Jg#+Mj�:�9D�KTz�Uz�JOFJJIJHJGJF�#�H���x0
+R��
V�ވ���)��=�o��3�4φ53	f"��$eΎĒ�;�G�e�ʞ)�eϓ
ғA2�c"{����̡�QHJJw�8I
;	d5ʘI'B�̒�/��E�9�9����ҙ�1��2)iP!�(�
_�Iu*q.�:��'��l�
fSL��Hyq3v���=�`Ff&m:�8��e��FV]l^M��B�M�6�n�E�=l�m$�wr�yVxWy�7�x����&�"Wަ��Ȥ�A�
'�μ������}}�0e���^�vq1�㤍���6�F�D_㟈��n��[��m�cɽ��uiy���{�J��Y%���������K��-}?�;ǎ�i�{�^�3�w�Mz+�;&���{~;	�&�闱����T���m���~�>��d'#߬{y��/ߙ3J�
>�kޮ�<#Q��ξ^+��Kj7����gm�?�+?��?���?}�������l?���g��_���ϟ��ϟ�~������g?e1�O�?��g�;K�D
+z�
�GҠ��o�����ݾ���
��K��D��x�k��tE%�h��k �+6b�d�@mx(��CA�P���D�BpF�	V�V��ա +KX��!�5k3��vM�^
�k%�m�݃ &�"�	���2�A�� Z!��j3am!��ڸ���LR(�w)X�y �%b����F�鉘��s���'��+24�{���`c
����[�t�t��i I�� y��ĵ8���<d��P�q�� �p�&%	���
+�����DlE�Q�Q�Q�����DG���X��fU0l�PV�D������~fK����d0�8�@�*�b��A���P��v�{mw���=�W�G+���J�������mh�=:\ϱ϶���-v�z�9 P����J/V����'�Xc�&[3W�����f⩹���d
"
��CFJJΖ��I��n9�ʉ�3�L���e�lY���jN�������R��t1�"/+
��2�1q�9q\�\��
�
����Q�9P���7�����C1�)�u?U�\�\��P�&�P���h�
@T����g
024B.�F|�@��<.<�;�a)p�hDG�i6h���コ>9@��
^�ݷ�
D��}+�a���o�;L�x��p�;���2�H�0
H�x
���|��G
����C��'��Q���� �P2�(�d�ob��IV�b]�>��˶3 ��f���`*����%aұ�
{2l���;+��8�X葏��Ђ�Vt-�a\��_����͎!�Q�v
�
�a��jH� [...]
	N��������0.b\E7��2�������a��d}����W�^λ{�~4�}4-486�
:8<�6j���s�
+��aͫW�{�
�fx@�
{t �pï�($0�hj������@�:ƾ��~��GD-��%H=�l�5hBD�
�
�s�A6�` E:ˁ���la;Z�f�ˠ�+�pZh
+�$���e��� G
$+K�E02��y7`{�.G��*
m5�OlQ�9x>�T?
+�+�lJ�RuR��U&U��*+W��j��cz���咥��媥�E�"�n�p�א_˦���%PSS	�b��%�B	
![w��i���
�ș�Z&ލxxy���&�&/�59T6\��8!�K!o�ݑ�K�e	[
��(�'=���N������gb�F<W4����%q�p��Л�mнp����P[A{G����F쑹	�� �'4Âc�P���в=�XB����\_����@�_h�
S ���q�>�=�M{-G�i���a�]9:K�jמB�xO��'�&�%�#�

��y�N7�Zó԰�t�[�U�F5J�(���ɬ�
B�LDQ��̤���ҔE� �ԩs�l�48�R
+U�WnX�.�,�3l 
�2���p��`��OApg�
�D�~�-�mӳm�Nb��@OQ�RGT�5FE��1kkZs�{��Ҵg֢۠p�ڦm�z�z��v��KӰ�.Z�Y�������{o[4�C�~h[
��O��cn�x�p�`�P�'b++�L�LB,3�<�v��}�–�#�>xZ�x��/B�F��WA�س`��e����|�C�h
�� 
{|�h��>��C���#v�=:�ͱ϶���-vd�e���@1�Ӌ�0��'V�h�ÑD��B����C��SsI�5�8D:&�6#'╦��EӜ�ц��7ݲ�9��ٲr�qw���-��#�����xYY�������̉�`'ڢ�h;f�y.z3�a$<d�0�O
+�*�'��ر@f*�H,�D� �RuP�p�,
�‚`�Ct ��RDUD�DA'EUE�E��EaTeti4mD.�:�<�>B �w*���*����3D�T�Yu2W��R���*������J?�x���^_'�w��V�=�hon��l�w�5�5�E�Pu����VŝMos#����J����*�.I{��Q61R)r
ZL�
+��C�����nԝ��S�7"5
e栺�ԕ�j�)
��'�ćY�@�t���W�c&>���ե£y}����n��� 2�?�,�,5�d69ިQ^�>��j��+˷X	����RϤiR�t���	��/曓�f1�ӂ�V��|�0�\
��8��~i��^>Fu�6�4�4�F�"��3v$r$n532�L�`�P��ޯ�W]>\���k.�a�^�RC���h� .!�¯a\ĸ������e���/d{%������65ӯf��q=�r�~4�}4-486�
:8<�6j���s�
+��aͫW�{�
�fx@�
{t �pï�($0�hj������@�:ƾ��~��GD-��%H=�l�5hBD�
�
�s�A6�` E:ˁ���la;Z�f�ˠ�+�pZh
+�$���e��� G
$+K�E02��y7`{�.G��*
m5�OlQ�9x>�T?
+�+�lJ�RuR��U&U��*+W��j��cz���咥��媥�E�"�n�p�א_˦���%PSS	�b��%�B	
![w��i���
�ș�Z&ލxxy���&�&/�59T6\��8!�K!o�ݑ�K�e	[
��(�'=���N������gb�F<W4����%q�p��Л�mнp����P[A{G����F쑹	�� �'4Âc�P���в=�XB����\_��~��Xn�� �wc��
(R�������0
���"�p���W�I��h�/Z}E��O�~���8��L����>C�^�&X
�e{A��k,�\�)`�05<	�K�#A�X��y�N��_�0a�����_F|�e�o����g�����?��'��MoBo�K��O������k�=>Zg���C��;߸���������\��7��7_��|��U����a�[�9������ۗ���;ۗ_�j�����_���/���ǰ�����������ӥ1�g
���g��������&鹤c��
�ӖO\���Xxe.�R؅)�����F�a�E���J��y�N�G"(E�1{����Ibcf"n��� �b����AhB,�,�^Ic�X`'�.��
���Q+
} [...]
���Ǥ�l�ypG���U�+:���!%��3���k�)N�
�=:K���<0���/��6�����x�LH��b�4��Ѯ�!�I%�&�E��>v��5���8�
X�rG;���X�
ֿ�������>�m/qj�t󩟞��ȧ5��M��.��^�
+
��I�{�
�_�q�tغ\z

�>�N��n�m=�]���o�b���&n+^��X��
��w:<X�X��OQU~jb�X�X��NQ!�ڋ�8�qT�y�M���0�=*�b��� Q�8+"-�&�� �E����8k�TT
��rG:��By�P����y,�"� ���B������X�A
`�N��c�k�/X��aL����
�l$�3���>c�b$ߑ��#h���9y�B�Cg�P��aVhRHT�5�GCdj�cC�r`#C ���a#��1��=A&��������ᦆ��$k�9ؾ�lyأm3o`��f�������Q�Fh�71܄��]�
{��{��
�,,Y�;���)l�>.~��>����O���>~R�7�DO�F
E#W6�H7���oq��r��|��k�����?��T�G�dnd���ϝ�l�A5&,��A���K�䣈ˡ1�"-�b�b�4`E��fI`
����E\�E\&
�����܋�|���5
�8Ĺ��p��榖s��z:UG�
��c�&�Lڙ���U`��.�y��j/2K}�6�j"�ͤI��R���4�L�:�0߹��VNj6j��Vf�jp4wʘJ���A��
��1�I

Z,NӔ�uħbz�)O'k\�
5$&�f���#!�t��i��>�E�s����
t��%
 j�ʞA�+�|��8"@0 &�����HwH?��u��S�
�W�-�WwL�v
t����ng�?e 9Pd���4+0�[.5�Us��2


���С
#$ɱfI?�s�l	Ȓ1r�L[y,�+�i=i`�{
$�zDCh�3��a����$�����9ac4�7
�C��
8�@<Ȅ4���ǑI
+@
$�
��Y��|�t`#�5x&�p�O��ד]Ê/���]�Z�f�%�N
_MXc�:�՛.!�b�p֯6���j��m�����333�XXb��8�l��2F�c
�^�
쑭G�yf�`A�m�>R?�I�&2qR�=w���3]G�d9I�R$%v˲22�
��^��`��1�V]$3Ih��
,5j �M�HN�,;&;��l������g����gĠ7	J"Աͽ���V��Yo姈O��,<EtV�)R�D����$KH�A��H��ro��Ez����[�^�=N}+�[a_d}#饪&祚�y� 1�o��I�"��k��VWi�
+Iu�L֪pE��z�,�����
>����A��{�{
8�f i� ��`�Lq
hN`� �
������ �	Sp�a�8�@Ϙ�;�uE�f
�	�rđ�8�� �;���La�!Y�
	%���@0��uUka��0p��G���2�9׬k�5s˽d��_+`5�U�u���Z�jp=���
+�j�Ua�7��@�39b)P��cJ�n%��H`��l�|P��:�!�J�y�Q[�GI���F�gv���<��?~�T�� �*͌#�B�`���
��4�3�0���

/k,�
V;�iAvh�;!M0%��A�M�r��^���Z�t�]p���+��52��F���������7�<�2�:�y�yHE�Y���x��
�1�rY��f�(;
g��"�
�S���I*īHԅ%�I�"SY�V�T��P�Xd�BRd�R���c���*WE���~�W�U�B���"�U��Fs~�ķ�
+��\^�;+Z�hR{d�g)�t+��(+�(*6�uxlq�ʤ}�:E
P��n-k*F�p��	�V�Z��Ŝ
+�F�gC�`�з�@�n�cm3���E2���Ib�S�$�C@�k#k_���q	��X1W1\���W����=���������;��"�o���*c�<UY�C�
N��;�4a�
��txn�J`�F��]9�ax0,T$@��b�غ׌���������M$
��:�ך�k[��Ċ�
�X��b	c���V3���o�4�
�
۱A��w�l_�|�Q5{f�}���іg�r�ʸfR	rN����
+�d3��k��Zb)1�H
:�Hv#��K��y%�掬Hn,
��ydM��A%�L�cg���]M������[�b�L�O���7}l���\�1:��T�3�
+�U�?�UM�
+���|���`|XO5��
�xG�;>�dSg$ �:
���#u`�N��NdX��
W��]���&��1gC���)�Ƴ��Ϙ��o�hW���isC3����P����8��r��O-���4���]�uF�a��@�a/��	-��szS;�ʲ`;	�=b�L��;h������� 
�.F
endstream
endobj
13 0 obj
18334 
endobj
14 0 obj
<< /Filter [ /FlateDecode ] /Length 15 0 R >> 
stream
+H��WM��6���e����(2X,@�d��"�=
��`�C6�[�Hɲ����E
�jlO�E�z�*
�8
Ғr�#��f��)9�&��b�(�3�b�!΀&�6@Q�F�P�%d"�H�0>L�,a�
Ps�s=
�B,@
Hd"a�
~�iG��bD���7�V���_o��������y~C`�=��Xe�U�nU=W�WpZk�U�W��I�_���.�m���1���!�W
S#j��0�i�iC
���
�#��`�M�׀����m
��y6~�����cE�9�fx巳{ŭ�
+~���Y=3�csc�gw̡v�_�C���}�_V�:t��o(WXv�w�.��M��"�F���۰�BZ��՝���Z��
�m�d7�UY��LV��X_{�R!3XE`CX�U7�j��2�6�5����a��SN�f+P��f a1���-R!�q��4��2��@!"�C��=
���W�w�l��0��C�60�oކ�_]u�]
f��l3�;�"
*TMC�
��PU�
+�;��
xh�D�v`˃��";9��
xmX9��
�q\s
��LD���5[�č��Α6�ϡ� &"� ڐ	� qq:� ��;g'�;lw�.�+����q �7,(����&���m at Y�|�6|���������ӧ������ǃz�!�>Lt���u���eN�?�����
�>���?r7������QN��Շ9M����|��㾳��̈́�����2s=��s2r�ô��;G��wf����R�&��L
��;�s�Z��]�˝3z�S�m�\����㷧�ƙ�����z��O�??�����u�:���p��I��)?�� J)
�!�L�ނ�*�
,���~��=,�a�z�u�Q'���
Gu�AqA�����t�Qw���J��
�Gd=��Uv���)8e�Yl&ʌHL��PTf,$���t�C(2%@/

Y�bp�����dlkJ�@�*j�BI��	��*��ňP�bF8��[B1��LiW�Vj�^o	�n�y��/0_���/�"�ui{O���olA�_ۙ��I���<��~�9��_޿#����g�׿ƈy��e����+�C�[k�����H
+Pn���k��Tm��R��k���h�	;�
����RK)K�%�XP��G:�GL�E-|�KY�%/	
�3
������[���%�r��$.8a?h��h<XK5�����+�ü�,����Q��>+跌ޓ#�=:ӡC
zUa��йtqF7Gt�,�.w�u��W���
\�Q�q���9���v�q
n�PXw�@���๱��Ҩ��U�L�y���X{�~!�A&�D$a��'+�n,��Jx:
d�Z�W!g�Z&s��	�

+��L
+��|Zr*�
+ xQqr}�B�r�ɷ0.DO
��O� �.�}_�^��t�`tEegv�����N�������웉��
AپgE/	��y��O����� �<M��Nm��^
��b��l�~m8�%#�s� �k��a
�����W<�.�
Y
~FA"
+��h�᭘���|���5B	j�"�L�"�V<�&�bT�*��_<��X?̰31�Ǘ�� y�6�����y%�
�>NL1ik&m�ڞ5�����0?���Q�5mP�P�P�P�P
q�(�Z�����9��`r
+렢��c�EX��i:
f�
++���Xk�G��qw<�rgmVP���0a����m��
�υ�+�̧������I�����ie�3�8Ќ��a]�����
Q�D�D�D�ܭ�'�G��Ċ�ץ�pUd
+`�@� :X�p�B�.����(���tҸ�c��S"E$
�
rK���.���{�h�l�
i(�-�+�
�=`�*����lU��w44P��]���.�WWD
���z�1y�
��}ک���E�8
	,�	΢{~
�8f4kcz3Lo}ˈ�dz���u�h�&q�m���m�ej�[<�ʕ���f��MҚd����Hi3ә$3d2f1����'��.��u�;07`/����e�{s�[�t���>���C"WVWS����d �@ҁ�&�]F�)a����{Z0[Zh#-0/0+�0���*��Y�(|蓗��f��
mK
u�?z9���C�$ҳ�>�0�`��Dr�I^M$/�

�t���EْȚC�d�>�J�کS�&���YT���Z�������6T=x�#6��ͺ���N>�cv���ƒ�q������︶�3��+��yLQ=L�%S|��Ӭ��w����Ɲ j��Ҏ
���Q�
+��Z�H���~�2����O��s}~���/�ߞ��g���o��_N?����叧���q������Ӹ3J��9��~�?�)ۦm��״k%[w�����Sk��kp�b��zH[�Y����H���]a�2M�8cϦ��YF�`��
�����-CA��s��4}�Ag<}-B{�P
�f�P
j��Y����MXMa�

�h!l���`�6z�D��t-q,�$^��X���TC0r݈ ��'�pD�#�+hG�
�f�K
j�e�����;���ݮ�>��ۻ�{{�[;���6v�p���.w����p��۲s�y��ҩ�G�S�O�ي��G���p���^D�s0����艏���W{b͕���&)h���ph
��h�=FL u��h� �a
�%P5�&��3�a�����"&����~��Hu
��H��H ٗ~?ȧ���k� �$+Z�aL6a�,B���tuW��{�#E0�=3U�u�Ω>�����xMI�P�S�S�S���!'�S��0k�?)��'��N�����5I�X��I�ؒrM&�K��I]
+�)��
+��b�?��e��2�eU+���Š�W+�n���������b�	IE�В�
$��$�6$�$�8C.��UmY�e�V���Yr�bm�r
��L/��VѶ*�mC�M�t3$�<ɷ	���4�84 �F�d
b>#P�&9���h
+6���0�����
� <0o�|�4��1�&"F^��i�3�����"x�{N��N�F��)���� #�L��4h�
+�Ԁ��1��F0r��{��{
+�I�b��l�V�KdD�^�i��y���\���݃�Тh��h��
bL�
�G�q4$���q���6��<` &��(&X`�l
�O�[
�����;:������
�?zd�h�l�
���£T�}t�<"�_�`��=����j��b��.����Ş}��������a�r��?����6-�~�s�����ٿ����NJ�h����Z��ʃ�H�%�Q�b��%��cb�	�z��q[
���喔�/\����Gw
+�����|�}�!�?���|�df=s>3>�=�=q=1=�|�8^kbx ��O�j
F{�y
&��u4���c�C��\]����/#y
+&Zh��K\[#e|:F�ؓ������
.j��ZwQ;` &��
�+�5�7{x�N����W�GW�����o�S����O����
m��wW{H���o�v�c�y��UkJ�6�P>R�o�R���O�������n0�_�_�)��4����|Z겚��Y2��IC���d�iYZU�Ѻ8�KE3L|�JO������Y��9�&.�V�1"�M��3Z ��2{L3��z4,Y.`i��
/G�h
oE
Z�gM��7
�02i�6��"���ud
��h������ϚF����}�S%��
@}�d�X(墏y�ɔ;ފ<9���yZ0�<���kLӺ�o#I+�fѐ�U�YS�'l�n��<k��{��\�v�z4O�)���/.t���,t� x�`��<\�1O��r S�<k֜yчݠ �Þ˳��5�
v.]�5U�{��a�7�
}4}
Bh̄ލ<�����}�B��rװkԋ�9��>���}�Y�
Q<k
+��yBH
.��'z5ф���mg�׾�!3��nSx�c
��M9Yq�s���x{���o/�/v�m,:����>�xM
\�X��IZ��������[>D����(R�,��—P8=ŨCHN
bU
�nsH���/�M�}�`�K1��}2�V���&+mi�&��)�J�Ę8mV첑q�Z�ͺ�4�	A�w�"|���d����#�P
RՌӌ^��Yj5� 5[@
�k�LqI��������c�
{��G]��	hޅ��("���Sv����E�[H���NH>0S
B�V	�0�(
�V��G/�-�x��m4���&���
x�Co�f� �D�� 	F#����
X�(��|�ϑ�pN˅i�<Qӛ}q���
\K�ZSm������>l�x� ��I]����Y�B1�8��^�:��+
.Z���
����E�4vi7�b�Jܛ�v
��,�Qn��؅��:34�;_X�-���P�?��B�YH�Ep��
�%)�
+��΅�lʌ��!4=%*�R#�m$�OF��v�Ζ�I���b�t��Y��6M��
��B5ۨ�W�	�hn���ΒC�j=`7��BTg. �L0
��]0�Ό	� %=���[`U'��yk�v���+(7Y�nawT���'�� `a��dg�08'U�K�k9�,=�T�[H1������ cÍ��:/�JD��vntq��N5F�-��!g�6^y;��J�$Dj�3�B�<;���I�h�N��!0�(�Tg:y}�!*����
+�ϳSC����$Ω��"zY=��	|y�� ��pn��{;�\ ŭB_H'�ܶ�K�L�N9j���2o�\�
@p�f�|z�>
\e�)�f�7�K�v���W���g�.Mt2�ҏx��Ң��A�,���6�.����M��6}����Y9��<k�e��E�;��{
+�$��8�[����%	L�S��Yg��^cEmxwD�C���
+�Ui��� �h�:
+W�eq�<�Rg��4[��5���@ORŧq���o}Ʒ����듋g���۫�Ã俿p������?�_ߥ�
�>ٽ�a{�E��]=<yCC������p�������r���z�Nl��}���]�����\�L.
���)�������"]�R5�ڣM�

/�FpYr��"�>w%u �O
�
�>^�O�Ge�|�/�����3�I���PIe:ܥn3�M�=�
fɗ��L�Ǎ�HR�M�(iFo7�V\��l&�{��y�hRͨ��򜻖���:��ķԘo�uP�
)�3��e����I戤Js����1GS�Fr#_'�ag#�I��O�
�2|�� ���>$���}�Z�f)��
�ؗ�B߹|Q�F����7F�J�f{�$�
s��H�ʱ��G������g�(�*�<`�:<����������{�l�H�B�$����(�Q�>�>k��\��w7���d;�x�Q�l�o�:�&3&QA*�M������<�#D��fNvv����
3�rAɞ��^s�(!�	��C?��i�IP��ĉȊj�����?�
+�����
+�>Y&'Ό�U����9����
,�n���_3��kz:���a�/of�Cω��w�n 9��K�������n�N�F��=A

+j������<�#���A:ُdg��|�E΍�*��;;�s�Z�8
���(���5�-E�
��h���C}��?������X�^\���p�Ƿ�/wC���Y��^9n�n`��>&
����4o��i�(���G���6pj��=�HI3����0�wuvF���C��o�^
��+Œ�4Q|i��J3Ry����k��������?\�������{�S��ŝ|
m�
�նԾ�_��O�-�b��>@ G+c2�������~��{��̒�Pwb_���?_XK�n�M1\�.J{����GI
�
��ϰ/���o��>�����W/��������_���mM�
+�zH!$�
+	�%lnj0֚|����9<mz7`�s��kL�}�د%|����S����yŔ!�����A�W���4�gi���]�t�[��4���!;�#
"2�nM�ya#�b97l���/���W|�
�h
+������-�t��
�����=����J۱F�`�`��x���v(	
<��={Fn�H�`ܢJ	L��^��ucN �	�x�z��i$��ḻ�զ+��<TL����	d3.�d�\&����la�y���аcH�0�v�H��4kelɇIrڑ�ח9�wK
w�-� ɔփ�H'ߪqg\a���ח���ݘ�%#��i��z�
��P:�$+l*�S)��|No���w��޼�ҾW�-���/���ɝ|���Ǻ블��el�əU��
���C�?���_
i�-,��o���
�}�D���y
h)���I�cܰ�_��
Ǔ������wG`�?-���O2��C�\�jdM��}���P̖��<��|����˫ WK�A�!�=���k������c���u�d1�\����PPoQ0�Vg��'�=�_�
���A&}5�u���-x_�1Y�!!Q�N�f��=�������w7T^HC�B�7�m��U
�cth&�C�����~A�
Dd�5
�	���m9�@^�����
�
�
v=�������B��A�q$����+��~{�0�k��5l���x^�m�����beC��7g
�Fop!��Ҷ�љ<��2P�(�<���5�\ü���[���h��;
����Lˀ��-�+��T4�X;��5��=7���)t��[
QC�t��
m6P�B2~��p���m@�n^�TP��M2Jx^�RL�	o����H�
+i0��ô>𮁕�����i9r[A- 
� VM뱄(E�M�
´
�T1)cͳԸ.MeE�ATJ�`m��R�
}po��7C
�J�G���_eEFIˌ�i�S��׊59��_�
+���VC���C"X��S`�Ӓ�-
Q�r"�LB}O�X
d��C�f��zdpÄ�> *���C�4P�ɳ�y=��Mah��e^$GA�ɲJ�,UqB[B�`���
��5��u�+)�u���w�E�V
L��e���������P{
V8�N=��Qs��+�3&:"�EJ7���.v�F�+
|(6��ҥ���
+�-�� %��Nk[�e�i)~�XOP����S�R�C�(�`�
ԑ�뀁)�K
4���!K>�i�@�Z���0�f�גѥ�MS��oA��<�����������??����ˣ���o����w��W�뛧�>�y�`�ݯ���>\
����w��j
	u`��Ƒ���S���k
D&��
 H��	��
+�kO� �_��Lu	.�O�>d��n��²
+���zA	:c
�
�"���6 K���%g�e���
+;�,�A`��%P�L�Q�h����
~?A�p�"ܴ�3:�G�%�	;��>�0�.d
P���b	��ċ|HħRA@4�f�l����`����ͩ
��Dy�Z��h�4��C�3�`>f6FI,��` 5�!�G�V#㠚tN�6�T����T�yǛ��$WS���Y6 ���bQ1�wq6큏U�� ~?��1�����p��08��g+祇���k�/�^�=��4
��*��J�����h�"k�}
O�RܛQȫ<(��*�'��!1���נo�GI~0��kDSK'���F-��U��X�+���/l��hB
+:�u:��4ܷ�q�]΋�Y�O�4ag�@�X�6��
�7�tʿ
�=�9�C�{�q8��U�$�_ H�怦),�Q��f
�Zb��bW�v��F�1�Ģ	0��$ȍ��e
"$���I��B�l��0t��
+����`�wB�H���;�A
{�"���J
tU9�`/��4���F�d6S�չ�1�8T#&j4��I�<�|ι*�Mt�&�=#W��"+�����X�����jY���uY�K�c�
�%	�t���e!�*f�iY�oJ��Cu��h-Y+}��&�(���rP|*
�#Ev� �����(,�c����
as�����
,j,ׇ�Rg6������L��(E��G�S
+�
B(��
�!F
�MS�#��sׅu�9%]�S�
\ �=����]bT��ds_2�T
�
Dr)��$�¶%/Wǹu�O��G�.��
}`�=�qc�m�Й8����T��r�
/[�v�K��Z
��;S�L��b
+U ��$]h�|u�	!�na�T){����Vyn�ס�2��'�(�B��,�J�
��s��Z�P�=s���Ϛq�~���ݐ���-�p�s��(-��"�
N.��"�2ȷ2��ݔ�)��&���p/U��:�@�!�Zh������†~s(�(gR�}J>�8ͥ_j8�$���{3w�Vh���F7ӧ0�S�͇L�g�N;��y
0���
՜ӌfS�=�Y�0����|��)��� 5-��}U'=I܂ ���fռ��K5^������-	���-^.I���*ʷ2��ݔ�E����� �V�hJ_��]�RɮR�P�D��׋šx��C��~]�R�y�_�a��~]i(J��e�@h����R��l�f
T��������`>�M}cf�3��>K����(�
�O4��2&�H 
Ѓ���-HKd ��&KF����nO
Rp�P��ˤoy������C2ALĸ��P��S�����Y��zŃ���7q�8E���J����D�2�Pb9?���}�9hv�,����j+�����D*����x��V��#�.��p^2N$Oj�p3	�!�8�1p������]�{�>>xO� DzwuuժU����.f��U��
�|"ޔt�@;
��0 [...]
+Utx�
Ɠk(<�ڷ&�W2�����2W)�YsJ[��,}��ùIo����
���Q�����w�
��(%�U3++HE�*� m;-��ϩ��`���".L��d�l>?������l �6mq#��q#�U�b�b�0���5�K�;��b�I��l���1�u��g��E�/TiU�E�9��� �s��r2GPr�
9;=�Ƹ-v��O�ZqO]��<� �MO,����_����T�V����/kR�(5��P��.ʙ���+�
�hܡ��&����a������b7�if�b�Z������cPl�P����c��!�-p2V�T�U�"����MN���f�r�x�*A�\�yC���?G�#-cP!�j���c$��
%&j�Q&��
z
��D�+���+r_����X̒	K���b�@_� ���ir�m;g���ę��S.��H![Gl��-�}+U2Ct�ք̈
h�H6*L>Y?�Ǡ��ɒA'za,��
38H�8J�:nW�HX�A�<�$@"atx��
M3����J���ZX�#�F��ܮ���ı�œoeAmF�� [...]
+X0A����=�s=�N�ͣ�H�P��6� 	�*�`*�K\�u	��s.=���/%�o�l�@׍9�tZ%�Q�
ޘ��>#��z��ӱ|����Xs)� wY�g�4M��̶��q�^&	�oI��e� �9�Tm�&>Y��>{�����:�iG�ŗm$�]W��
"�=�M����xl<4$?�V�U�j��0�z.3Y���(Eqx��T����N��0�
+
��� N���'v�긫�3�5�9����޼VnۤW��M��_��
�Z��
��@ZCn�ϟo����x��YN�K�l9��S�0Q�]�A���r�n�Դ$�e�\�UG
��Pҍ�X��X_i��o~�����N��~��Ǜo^������O/�?��_}�������I��|����������O�����n��Ӌ����7O>ݘ���y�k��	��
��S8�����O8���]{ZA����@J�'���n�ה�,R�i|}w���K������r��-؃��
�[���[yKk
�CD�嶥��7߽����w�{{����囧�BDdM�����
�?�}8=}��Żw��?���
~v�M;���݀y�0
/@
&i���%�$�_
�-��i����<�����JYj�Z��8����O��Jߣ�,������ �W��
ۃ��N�g�/d�j�#�W`�õϋ-b�5�K?�4y6<P�mU5NC�|֛�٘��l
+v8�&��UE
�_��3��"c�'���$�N���K�#wNآ{�vŇk�|8y�
����*�W�cf���hy$p�8Y�Y症�X���hy��U5 j@˂�ÅW/��M
9��\�-`2��$��y��>Wy�����V��14#��_�f�����ֳ�M����є$�W�f��L
B��a���ЀbtY�'`�a5���e
�F���5�Hgؘ(ZLp��3�cc,���m�#b Z�>�XBш��b2�'��R��ez�^����1MT
+Iⶵ�ɨ�wU�9�^c���8����V
�7vЊ(etBC<:a��
����sT\Q6j�,���pP�
��Um�:�<��:��ܡZ�,�f�l���3�8y��O,
��)TÎ��	��-�A˷]�ȴX�]�g5w%
���'l�'��b,�
̳v�<��^SQ��
+��/Ċ�� �b�)��0nk
���h��`��`
S�Y#�	{�22�T��I�RZ�������M�+T�1m���"�V��vSr�EhI?<��0�*H�r\

'�
�kU�
6��
e Wf�&i
b�M(Ѕ&{v��uU���׈]I��h}Q�
�*���ͧɃ��(}Y��mCI�<��LVE��	�5!�΋:0���
Q��#�L	�����fLc/���KJ�VG'�&�Ԇ�P{4��%�� 0UW�f�YDD$#8VX�����`�+q�ԓ� ���oCTՌ�7�[qexHΰ]��d���dZ�`��H�٫�6Θ�jkS>���
�X[�T3`�������6k� �M�QB-���%6���+�ŝ��"�[��w�>�Z!8��I�0/��5	��+v ǹ(��|5"SV]-��k���7�	&���93k����Qƙ��)z|K��F�������p�B%J�+�Պ�Km�e XE�͗�i� ճVW_�����
m�a��&$�;3܊]�nl�};�*ǣ�v).�zoyᵟ���S���Y��I.����^��d�u�br�����E�h�N�UGue�
+��N&R#i�d��*���u��+�U�S��2i��*�$d��'J���
�$ZRHQ�2�
a�m��B
k�8�M�f�T�-|8���3�<�>���
��
+��Ɗ�	J+Y�Mz����$�>�<fH�īO:
*n��utV\�r�h���ea��0@��2����@�ƾ�pj�gcJ�����`t��.�
�-�<��� ��WE��G+�>��8&W�LXY���)
!��67��[�/�U�dW�R'�@�����*u�m� ѫr�W߽p�#K��r�T
��h�����m*��� [<$];�mv\n#��(#�
�
+�
n
+&�>7
�*��p{?
k���E�������@��$ZY�
y6�r>���	0q�At���WM��==�)y~y�A�����.���񱃃���S�,��)�&
b��
+ځP��>�Ȗ��ȕ۳hUX��8��j��n=��r0��
\���5���3q�!�v\G81��܎ex�~�0��!��ֈ�<d�ƨ��pVhp��s
�ҕ�ͯ

���=��F�W�E��Y�6�W���L	6� � �A�<�V�=rc�����Ϊ,p
+FZe�Ɛ7[��q�/�~���`��1�!
�X��&�)/�p�~
�$.��!���s(�M.i�<Ez
(
�u�?f�)~H<����V$��O88���{]����$�7�v������!�
R���
 �=��ڟ=�\}�t��;�>�$���#�HX����hq-N���]��+�o^�/q��X�*�V
+�9g4�6ZQ�
��
)��|�Ao��'pe��Q��u
��Q3* ���
���g�u~i����?�����Ko9|���MK�W+����+������N
>�������̹�}�nW=p
���b��ֶRj̦߳��X�2
�i`|�稲_�����!�O$
S�
�#��JB���^���:�n9��{�P�T=%�m�C
��=H�x c�����!��
��w+�i����{�5��B����8�����ظ5A�Q��$�]o��rH
����\?�o� ���
�U�S�*p�u�
��0f���p[��[a(!`��k�=�#�)dz����Q�c����/W�X
n;����p�ōyн6ش,��
��b
������6a
m1� I�N���/W�ykF���;ԉ
@�g���6fX�=�Mq
i,~�+����=��/��7^�`��{��X��, �
f��&d�㠪��)]s� ���[馌���5c�5
�{�>��q?�fԊ9i=���Yݴ-x�~�⽀ېob�N�	o�Y褪AGJmX��U�ź�mC\
126��rZk���mc>��*��'i�	4���=�
&ۄ
+���/�b��9�47V!Ji+�0�P|9�hI`"c-b����pG{2�u)�
�ɴ0?�CD�n "����f�
�>�A��Y�{���� ��"Yh5Ç�4��V��@�M.���׌��l��FYCxO�����%ȝ�Vh��7�u��\���C
/i���~qER�����VHB���].Vn�
�
���ΙHN&?J��m�	� r�a�f��(��
��ERl>T�Ǐ�߽w���K�i��	\�	�k���MIZbF�)P#>c�liO��<+!�Y��՟lV9��
U-�v5Ӑ�C��z�p_~ZA,&H.���{�C<�V�#2�x�CP�]�=��0��On�60 at rN�����!U���Űzd�<r��
��~��]-^ �=�
+/�
16���s}�#��Chx���Y_S��V�]��j����E��qR�&���Lf��E4�x�oQ��k����t�ˀ
�
��:� ª���̩�F�
��{����c;z4#�����\�3����q�&Xt�_/�
ls�"����ǥ��{�5��P�u��N�Jc��q���Y75ɎfBa�JM$ %lfΨ�4\'�[���anД1n�f�����~����Ѭ�r<L��ߛ;��NҔF�_��^�},rF�g��ME� �&���l��ʿ���ሆ�� 3���'����`a����V�/l�:8�W�;�FwCn�s�s̚��^ϰ-�#���#EP�7:/x�
���,�>�T��l��Y� 
�+��C ��n������(������~&3f�Aɧ>�y����I���`����ᤝ1y\�
�M�����w�J��r�������C�Y�����#�	�jw|i���tZ�
��}ɒI��Y��cjP#���w�O�m�v�o'sG\!�޶��8�lװ�erp1�J�vq�
�49x����&�ĸ<Љx���<���*���΅:���"���
+�S�/���D�RH��g��'��[Aede���p����d���5�-xi�Vi6�
�yh5@*�9gh�>N�4rm����
4��.*��
�
�>��
+�Y(�����`GR��c�䌰=<m��x�a7r+(!P�!+ߣ��
+�t+�Q`���P�u����I�Dp�b0�S����l6`��/owD���
+��B��զ�SZ{k�	sd�̞s�!ƌ���e��
��~��͍��f�����0[����
C�<��P�E��Ģ�;����6!�ᄊ *�����Pu�Ƒ
�י�\�
+��E8+p\B�W�m�A�Nb�rgT�ي��~���t
+؉��� 7VPёood0��l3�[��6�/�
+::�t,g7�J�#��N�
m	�٤
�=���#If���lq
� �ֱ#_}v�
�ֱnP�)-�Ո~@Ny������z���o®[�� �'_kC�g�DkN��vB^���

���j�#8;2��7h�,��KA��F�I�[�7�ꈯ�}�/PÞT����*ڹ��2A�L ��Ҩ�S�qu))����Js�LSX�/h%e��h�+�
+TrU	C"�� ��&KI�1�毯�+��������q!T�R�M���
[>k*�/s�GO������P�Q�w��H{�O'��l�n �E���5*���~[�$�~om��h�i��U���*׵���%��%H 3[�bG`�D� 
��	����鮞��B�ܠ4��,ݵ��Ȉ^�>���&�d�(�9n9�G�r�'�F>)a��
��g�S˪������[X��Bh��}1]��{x�S~E������;�p�R� �8aQ���bm%	���[�����02DnZ1W
=W�z�{Nh�
,f��V]l��֙����!��z
��ZO�mxθ�ш�‘c�e���]��c��
+��t�%7J��`E�*�n�`f�M���(�ط[�|i�1i<�'>jR]�}+�>S��2@�3�Lg��
?��E�(LK�;��5�q ����m
(௰�[��g��*�\
���G���ǽ
V2a6�\X5��~9*��u<0�&jrp���1����u	x��8x��KxXbj)[B9�Hg��%>j���_��
G������Dd�V��\�_�V�$�)����6��6��m�F��n>D��7祦��
+�6(�Of- &��O�e
�Z0ޤ3 >h-w�U
*�҃���{D8��<~�
++#4m�@Y����� "캆��T�b�յ%b�����_�{��N�.�Ѽ����:!����\�����:�Xk�
֘�ff�+��$"B�KT�
m���H�튨�
+�W9{�
�,����
̅C��<*(u��Ek`��Q�����꙼ �n6�4� ��8�rm��
�w��h�z��+��u��
9&#�
W����!
/G,
a�[�̡;��Y��1g�C��g��DT=���P{��)|�,:�l�R��f4BŌ����zM��uq�
:N􁿘-yN>�T�<�3����w������h�\j�l㠒��Z4*�w��O�ƶZ0
+��2�/-N�
W�0���Z/R&��CZ�n
K�Yi�S<�d)�+鲖�I�1�)�����I���>��Z�s�A��`HV����MږJ<�Z�6��I51cX,�G
a2��;�l!���d�C����
�j��� ���
��e��<��q���������<3;�
���H�ik�9�2�\C���hAf��Fk�� �-�,�Ȯ�����w��'��gZF!�1xg��c��E�Ώ;G�X�<ͷ�į���gn��B#;a�Y�S��(�k����xh���`bW�{��� �%�7�r&ɮ·��t
+WiS
����P�;��
��
��5lmc�+���P@���

6a�V�l����c6s�Q�L��-F@���=�
��
׷[Uј!��e
+á��}�L�w���>���v	k^Ȩ�F�/���|��G�
	l��#��L�9�鴎�//l`k�+�\���G���
���� 9=!t@#����˚|/�v��˲�F�2�Ҝf�Pl
l��Pwu�Q����G^�v�������(0
+�/�%���JPj��Z�Hh��In:�p���δ:���>��'��=C�S��W:�[�t\#b��D^���Ku+�lk?xX��ԧ��2��[t���H�CL��j���h��L"]Q!w!}���˗�s�k�{k�3��~b	��HUR���YW!����
�eGm���5�3�F-n�NY���|��74�yP@�P83+�S��f�|�C��5�L-
+#�xa���#;	Q=�;��Wi�W
a��t���<�
�&LӺI�6��Z�X�ao�U��9ئm�1�xV��=H��;y���Il�a{t�,

��
+G���k)���&b�Yv�&���Js.FŢ���#����65Y�4C'�	�d�[�@�LY�[z������j8R�_�\h_�tt�-�^Q�:��]��x�c �ɔ�2G�R� �6�
泐"�#"��(�U��b��ד�o_�������>�����O����䇧o����\Y~��ϟ������ׯ޽�����������~ԥ���m��mQ���$�Z��a�HaE��ÖP
]� b��
s������H�x�$d��9Tk�����N7�\XAB�E�=T��)���=��G��N���rCn�d}�.��!���p��7�DUwo�j�F����� *_�5
endstream
endobj
15 0 obj
16418 
endobj
16 0 obj
<< /Filter [ /FlateDecode ] /Length 17 0 R >> 
stream
+H��W]�
�
}7���
��RU�>�'{����6$1�`̬�q`f�cc���$U����,
c�=SW%
IG�/?|�������{����WO��y�
�������ş?~x����ի�77�n����[9�|��
����z�Mm\O�Q]�t*9����bT�ro�Y�r꽐��i�;;��y��͋��i�S�yܜO��9Z�S7�f�|v��ZgJu0���0��Xl����r�$���	���<Q0S���I>Qcv
�*�m�z�å�Z!;�*����M�M �@ž���VpK�f7�Y�o��fK��.g;�3�b�Z�E!��x(I�V��xʵ�TIA:���YK
��5��t*�'��L��sOٰ�ى��L�L��@��k7"b�(�T
y>�fc��BJ�	��-ה�0[�a��n�e
����Yn��p
+-mh���ݔ9�}8�:��X���N��a���G�
�����H0��j,��)Kk�T�O��~
+��a�H�����7��z�J��W�
+jr��l�Q“� �̷@^8��{��ɥ�C�<��+���fg�
��7X*C��V,�
�R
��
+���u}&-1�U/W2�r�}S��3��+D'���1:��QI�X��UZE�.�%��*�a߇X�۪�*ih%mڪ����H��Zjh����m�5]H�
+���
Ed��@�Sth�i`%�R�K�\e��5n
�T�Uʢ��&x q&8$�g�i��VOII�	
�XDBaN
������7YW�f�t�w`�mUf�U�
+Y�lV�M��4�7�ck�b�\��YCX��db� �n��(1��L��{��>h��f�h:�T�F�z8��:=
�1L�0�i��!�׾
7 uqv4�0�,�l&Ffu���������}�٦ā�ˮ� �yz��\�]'���o2,n
/&���y�O䃾���
��VM
�X��	1��a���\i9d_v�a�ƹ;��2���l��ޝPe^����5�3M�}�m(�rDt50�/=�9�~0�)
���`�0
-U�֩+�b�_��*W�c�˸�fgG{ۚg��qv�8̭��ڹ�hglj|
��I�S`s�vM���˅L�Y\�
M�K�Օu�U��Ց�յZ�o�С��qj �ԧ�H���"j���9�T��q}rA[����6IC��/�S�MŘaC�Rs=������j\�
N�=�(�Տ�8W��(H�����@T�o�k���)E��
u
+����(8Xlk�+�Z���iK�(]��ׇ�Xs�T�x} s�cU[��)u�a����T��
eVj3���%zU�a�w�1�L��+q��=y�͒���ƾ�O���L��Z��%��ae�	�8qsHv���J�յ��DWp9�l,�
+�1�eۮ�L�?�eb8�`�8 K
=�M�
 ��1Шm
����5C��U_�=_^�M~}����o�{�������?��p�c��z�������?���ا%>�z������'��hy��DK�^�(�~����`�\>/y������+���kF+!�
�v,y�Wt���
��/�]}�u���3��qɐTy��/�'�v��tN6
��o��D�A������Ҽ�9�J
ǧ��P)���:R
_‹�UW״,����Y�x$T��_뚵`&�VF��!L�"W�?C�o��:0v��iEbty�S�
Ǝ�b���\�9�z��ܳ
�(ފ#�n�Y���H��6ޝ�l��=�7��@
`>�#��>R���*�ֳdWYQf�}l�x���\�,�)j��{�7�٧�̒�0�(Xd��c�dU�"�I�
+ƾ}�Ȅx`]��J
�Ǫ��U!�k�3���
pl��>�RJ�<�"7+ �Xņý<��2i/���\�o�ښ?pR�qD���
��2RԽ���uN�m���+(�
{��v�pR�g��n���>�,
ثJ�Tʫ
{آE�K
+0��2cM���T+���y�iW���v��<�n���oX��d<��ݓ�-1�l�Aq+����ˇ�Y��OG)�6SpP�G5�/xk�]jf#��x��H���K�r0r�K¦����G�H�f�y�L!
Z��+8�� I��tΣ|��\���Y�
�x
+�����#Eƿ>��v[�Rw���aDv8�}�� ֡Zӎ����ֆ��c��W���
+�Ґ���%',���<ĉ�9�9��¡�������"5g7|��Ì�+?O�n~��O!�iS'[�
N\�Ɗ
�R
+� ��'�l�(W's�;5�֭AKBU
q��+�}�
+lŃr�:�Z�

+4+�t_-�q�~�d��rJ����}�
�n�٩i8L�Q��r��%׻���r���#�:T�/QlY}1�J�'�Xϱ	

�'�,����I�Y5d�!��kԮl�"GY�U���YU#Y��e���FJ�����H��n eF������0�-9�?�ߣN�{|��B�C�i�ƒ� �T�Us�K�mx�5Κj̕R�c�����7
�1�=����
�E�
�8^a;�v��6BW�+�ya�&�c[�.��G�׮On vx���L��/�l�:�ڱ�a̅������/�C,�)�
�m6�Vl��Ws�p���e�e�V�2S"�zw�����['����v�+1uu[��](�/�����yQ�aR���앇�.<j׋��� �6UCcK�+�#�
+��m\a����˨��2�8���ZO����{�}��Wɪd��7�?����<r
�R�My� � �1-�T/d5��Cf�{3�YzE��^���1�8q�-�1V�G���y�Ø]
�n���L��h�
m|�1�6�Ф��b�iL���s�������>oR�.��-�.��X~|�i����<��S�C����;ߔ�?��n$8	�Xe{f�X2u�z��T#�k��| F`�;Φ|>dMu�}�/�Aaq�
+evY
+�_�
�P@��c�3��(�$_&^
l�}~�)��� �5���%N
)Euz���eⰱA�h���Ś�p��~(m؜��f!���p�4�ǹnN��1Է0�.,�&�Q)l�n�d��mS��rG��_Aǝ���A#dY�6H��ʚ퓴*�ؚp�Z��6�%�ʬ
�%qYT"ꔴW2�6�ZT�p�H��:�[�b,���{�FDdo/�V,�2I�C,�h��Sj&I[�c�
���zФW�0�%9Hi�W'[^���cHB��ꘛ\W<n�"��
q�ɪ)��k�ٗ1`���ZZao�ǃV2��lO��8��ao��a��
+�HXa�pZ���U.���
+�$�/F'mm����B�6e[��,�Z��2Ioߟ��f���!C�tb��RoR���RBtqss!�I�4��VbT
����Ņ8��Wc��	3z��_�`+�򪒩{˜�
�]����T'YL-�X����\U)U���Z�Z��|$
�V�ۭV�:�KՋ=�LAm9v5FQ�57
+H�/�Ȅ�8��a���{i�5��hI*���hV��9���
5����(b���,�ŝrrE��3�GY���J��܌�)�$"�Zj9��yJ8�:�`/�Mv���E�ڳ�>$*0�f](�Ĝ�cΛ%	�SRs�AϦ�G�OYmt�F�\�'�O�/h/��l9��d�wI�8�8'7�G�THz��D�ʺs@�(���'Կ
+�<�F���O�!i��p\�a\���
s�_��C�7c��a@�P�����m�w#-V$�.�Y¥�:�H��Uy!	T��PY�~��ZI.������
+��_���
�m�g鉂��j���q��B���Pj˼���b
N�[g�et��a��n5��c��b��G�b���KEt�.}�����6����O�����oN�>���+$^�4�x�Ҫ�,c$
�u�C/�g�f���b����P�z�a�7��ܓ�B��b��p0FU�աnF.o at 2�����SjP
+ʗ3 ��YUc
+r�6�2��)�S%��]��P��'ٵ�#�!����,�d�Ec��]'ܒ�7�S��s�n%
��S����NhC���w��MT+��B�
�"��1U��۔�u�ש��Ȫ�h7�a
��#����B�	g���QID� &/�i-_�+�
�F��a��
Y5`�%iR
�WcQ@�Ny��ke>�8�t��� 6�	�X�#AV�\������b��P�4�j_�C�ό�(�&�L��z
�:5�`�k
��[�=}��f�f��1V{�i?��v�r|ljې")1o��](I���J޼ȉ-��ه���:�[�jAz��偿קv
L{ϳS�6 �6v���ypu!�q��	[�R�$�)��K��&`�)9�7�1����˺��5:�I8V����3
+�Q�W�c�5\�|_⼌�X���+���o
{	"�;u�aT
b��1jC�c㍅�l�ϊ�Ҟ<�W�[�vm�D�-�dC�u_D� ^ЏE`�#���tW1й*~���M')��C��~V}y�6���!��C�3��g�����hi��o��w�
$�e�ag����
�D��ׇF�n]�����O��5WZW��^����ϥ��f���A�[���>_�h����}�%��
�/c2P����\�M���v �偿�7�<�Q�B��B>{�i��M�N�}K
L����Xg4xS�Z�{�i�7��?�KH��s�S!�E#8�u$���{�]���b��ƺ��#1B	0���GD�2-�$��	�DS�A�X����u��_+�=�?�1Ĕ�؜�I���XFe��͵2VIl��:�󺎖2t\	I�\%�Ò��՞s���(v׀q���}]qĉ��ו&lJZ”�d
��l�
׵v6���	 ���f��<J�.ճ!qa��vV@%:�HY��^7\�l�B/}-Az�jߕ@oK@$YV1���zH����+����ÏP,9,�
�aOM�zvI��rb��j�Qm�t�(7Ls?ڀ�z�j�fN�z���0b��#���x�*u�"���-��8�9|0O�M
�s��1&
+=��z
�E�I��s�7Q�0�"�[&�7�c�9&��G>	��˜���8E�D�g1�h��R||b�o�
+"�.���P��N�M�,��L�v�k���HG�B��Y�
u�H���K�Q�*]hB��zu>�_I�!����=�^��$j����:,h���RT�j���	���²�\縉��+��2���I�,N5�4�P���uAxY{�
\��&�Ȼ���2y� 
���}�Z)��#�e��d�����
'Xz4�-�	�#��9����gh)�YO��#Avߙy6+��-�g��#F5��Q?�}�(
J�!��
�~�a~GG�����
�d:J��WRH�n	?��g%�2�,A��^5�c��c��돼�%�Ð�:�֐��T�"�/�ڼS��2"]N���إ۩�@��
UL��-���v�/�
+,p}У,�Xa��9�<���l`ɂ�*��Ae��n�d��(� 0���GJ}ƗR�Φg�g� �2 E0�8Q,%�:�!
���8
+�N�Tn&�;}wD�
�=� %��ލHKS���9���	��+��hA��4�)�x���<�Z�7�u�� Y�9��P]#΢|��=y����cy��6�����kb��fZd�GV�]=��$X��6Rk���Z
�]l�]ǽFu
��,��K
�kJ�Է�I�)�p�����8������o��]��o?}�Տ����?���������
[�����������?���s_�޹��?��}>�3 ��>�����O����s:����_��;���#v��>�P��=oL׻	����a�|��D
��
��5��� �O��A�	�XF��?֫������?�M ٘�~,g�,:$
!�M
�M��{�O�J:����J�uϧ#�H�R+��j�ፏ\�`�/g�Ί{?~��G/d��Ƽ�/�=n����&
 �!��f����h�/g
��I���ѭ/lǥ��K��?���٦p�|l��3&Kl[��r�W�1J����M�+�}�v9��4
ߵ��� �m_c� [...]
+j	�����|���d�|�˗���۾�,<:2�R��Uf+�Ӏ�¬Z�*	>.�T��G��t�A�}���D�
��|Q]&�5�����꒍���Iv�
+!�꛶r��ؖ�yצ�����/U���C�>пSQ�і� ���>/��JCuflIv|�tZ
j�y1�p�D�&�Ժ_�Y���tz7Z
�
2ד��5�C�j�!c�3�A7L%� =Vz�����F����m�%
�<ʐ_�HX"�x
�
l�PKܤ��9��t�f�ϖ�(�@/|���|�X�tfc�mi�x��f��D�+� (	�Rd�+��;��	� �ۣm��	dP��nkg��/K]����n^
�_�O�f
OS݁�~�z��2p��$ʌ��-1Å]��h!� 
+�.
�W�b�I9U�Üg��9s՛�"y�˶�JGӀ�sN�;���	.��Ne �u��J�m
:���rD��r
萒�b��2��$�f0����:�
�R�-s�i��Qq#�&�Vԯ��2jw.���w��<)|��tz�HJY�a����&

��Ýq�'�U�M����yS�
�*;�O�޴�b��T
�����|��O2�&'!����^CF��W�Y�����%CoŸ��)�{�࣏(��e<R�7�S��y��N5
ñ7,P�gыV��Gc�(Y�����>��tz�CW拉�mGm���90$r�"42b��~�<z��r:��s�4B
��T���x�iq�/���d�5o<s/���FV��N*�=���E���`�q�(�[^���r�;�d�*d��^��+
C
gKM�:
.�7�DA��U�W2�ڂ��vƞ护�b�N��u�ڂ�n3�4�ς�ɡ
㥗bi@��C&$\��W at 2iT�X�,6���%@N0���Ŭ�&��=,�	�bH1�03k��.�j�W2�g�饌(?��
��2��
�eM���IK��ڂu3/� dڶ�c��]ժ��˶<u0�u
Tq��
;��E.�-�
��b['i��w
�<�<�f�w��y���
��2��%��H�	s~��
�������T> �l�FgZ���YI�e��+[Ew�!�|
+[����	!�c�U 34�a�L��w��naQ at -EP�nC�%[<2��z���
.�� �Pw������!�
+�$�YA�;V�R����g\g��I�z
c�y"($�U+n*64q
��U.~�^���T�
�l�c:tFl���9�rX�=�F� ��98�A#�u���?eC)���
`?T
�d�����a>�2IU��TmM�[�b�~Bֺ��'G�}?AW�SE�N�c���:da��0��
7���Ӄ����)�jX#�
�b/r��$^
+�#�tbJ���
+.x�&G�,9it�:�b7n�'y�m,<�z0=ʥ',��?��/��1��3l�Y���:������2
���+�f�O��Oѹ�c�,+1D�تZX�K���M"x�F�3�ߌ#�}a~ ?�/!$.��@�a��|�<K!P���t?
/��� ��
�'1ޭ��׍7�|ޯ����B
�����ƃ��m����ɇg���[�?����߭�����?}��?����?��x���?|��?������ݧ�/9���;(���
+��^��/��{���
���_.���_��.�q����N<'4���a�G��x�J#��|
���x'o�H���q��}D�*�xSǞ��QdX.�O
�Y<�!�
�N�w�a���>��$	ù
�k�5A�6�
��|���j\��!�A��u������.�z%1�ֽ1�e���_¡H��K
r�p���nf����
���}X !8��(��
`Ia��V!n�ܪQ�n9#F^y5��4d���/�Ɉm����	:���
�dS���9�ީ�
�x:��V  G�o
���
�p��5�s�4|�
�玳}6�P��&���{�%�'aӇ���>7�!�������Ѭ�OX�V��R|��+)<U=���_�E�
mB��ї��C�Mux�o�f������8���2��04W��:����6�a�j�Mi6e$:�
ӱc87���Dҟda�׵��i�)0ae���w��C�9�y�ٟ���L��bښ��nn��M�0�h�SPk��� b���&�erg��՚0��0��}�
J����(�(�F���s��r�}ԟϻ��p5z
d�6zPS�8��a8/�
7ڍ��>Ih�b�e��,oѥ��|�Z\���h���1����Z��:�?�Jt����5(e��6x��~z/W+�M[�/�5���x���5�h��Z4�5)�մ")#m�ޞ���S��S<��x���|NFS�iݦpC��X�
�����Xv_Y�T7d�u�6�_Wzv,*�ڲ
+�%���2����� ʦ�P ��G��4]�K6�T���Û,/pv1-:�-�F�y1�2�WG�}�0��X~��菖��{8T����V��Go}(*a��ޮ|��s"��뻕s3{y0�����
X������N2u� 'CsQ��vdx
Ԅ�;H��S���n <]o����]=�N�.���B����c��Z�ٮ�$=vv����m�׳�[d��o�0���Y�*Q���$�N�L!e!g䧎�y���pKWԼ�Z�3�Gqa_6#�����mu5�#
+	xNͣGn+�A���-�6*Șq3�QC��ëm�aD���<�����+�7+�I�ƿ��Wft%�
'� 1��5T����$�;%esG��3�ۈ[2�=�HVh]���I��m�J�$Ya�e�
s�tѻ��)�5
�.���U���Y].9n_1����r�0��n��m��b���
~���uY 8|���ٸ�
z,
1��m<�#�%�0�
 �|�0����N;,
��
�	z��v#��
� �*�&9��F��B�]+b�ג3�/ҳ�5I�#pAm
ֱݯ���NRI���]�ȗ��I�� ��*1e�^|ͣI$ � Ո�k��`�+A�ƽ����
s�����0��9Z� �2�	vj�掚�T��������s�w�GFX譐�~��i(-H�f�� n=9�͍�`
���D�e�"w���ο����w����4/N��&��fI�<����k�j	���d-%t�v�E����Y���wt��P�m��M���k�͋���'������?�xK@���amp?�%?�����Tv�d�~Mfݮ|D���37��
��Ne�<�;���2¡/�������0���A來{����R��n��l�%I�^<��N#�V���A��
�0� a:rl]p7q՜�
+�c9/?ޡ�����5���x�Ѯ8 ǟZ�0Z34
+-��E�\
�`����Lt"{y��%P�:z�Xj�T�$֢�h��g����΀C�" �e� ��WC׹���� z�l�$ET�M
L�ȴ���
+����:��w�/~��i�[mk.�裰i���f�ìsE��H:��W^(U�/�m<m������A�����`
+���0 O �*�=s.�,�<ؚ��ü~�c߹Qm$x-�oEx��z�xh�7�1�J�>��r�������
0�
�s���!��I.���ݨ�p��n�	�81��e�Q
��+B��Xk�b�z�e~�CU2t�c��d��"��XxEi��x�	+� 
+Z�M���ܚ�]��4�e�Z��L�.R�Գ��1�8�
��m�o��7�0���YK��n:���W'hlK)o=��>�����0��ӶC'-�r�т���k$�)+f.���U-_��q��q�v��U>�\
��� �H��:h�a��������
�����cK�ϯ�e�α�
\����e}f���X���c�o&��+� �и~�� [���E=M���T����[м��-��-jf
VcӶ�f�-h>��� ��xXGO3ۃ�#�a<�[8�?��b`<@H��=;�
Nrw��ӄtpY���H�Hl`#��߻"X����B2!��b�1��z���m�ne\��^� 0OB�w	�M���>�%�(�"g
>�����T�"=D���4�5h�HtV{�5=�
6{&�
��=��6���o����{E
t{�L���,g�R�l]�>|�>˃t���5%ȗ�����g�m����@��η� �
�o
u�`�����l������D���=��j���
=��G�=I�������8Ըl�[�Yui�I_g��u�Ea2*��'�� NF��~����U�b~�Xrі�$�:�{
+�SV��ѧ���9�"Y��S�קeO}�b���
�7���Q/�6�~������������=
���x
.���
LH�ۈ��9��e���n�W�ZT!h��Nמ�=��Wgހ�%��n\��X��_wp��/~K���蟴Z>���{K�2�'�[_,m����ᑚއ%y��+�f�t�bd&���
?�NJ�8��m�*Y�6J���R�s��~*����+�	b:�K��y�4|��
���v0�Y��̰�4?�����9�� ]���^)���?����(����
�b^�}�Z�J���mb)�?>W����ڔ��]
x
��"�Nܧ�Q�
�B���1�m�������<<�`��f��:���Z4�O¹� <�(MmĮ+�ٯ�h6�][#[;�������kYC��q[��gF
�.z)
G�Hٌ�n�w������[ʗ��JMS��ekD�%�榖��_�dҲE?޷^^�j�S�g�W���?_l'�; j,.XU�z<.f���N

7|'"���R��l[T��5IOq3*�ۧu�B]~iu��Wb4�pOo�Q �y6��J��'1�
 K��h'݂�_q�
�
p�?�^!/�.%ܟ� [...]
+^H#��ӑM��˅�~���Y�
�us�$6ѹO 꿯s3ȇ5q�o�P��}ϼF�r
����$A(ֽ�
R��
��5o��	���	G=A.c=����<!�eL�{da"�!�*��th	����*�����X�
+��=���ۚ�����om0l;|��
�f��>O&��'�
+��a�m𰙰8cw+
+�7�(�+��"���8�c�����|o�����;�X����P�øO���
	2]�-[E߾H�����Œ���
`%�4)_���|�#����[��ү{�K{��x�;�ڼsz`��`�q�
������|>�rm�s��?��}О@�R׹�5J�_��-�Ow������0� ���v���;ؙȂ3ee
��L�γ�ٷrŒ�L��I.%p�؎<�o�0��l�p�a�%xZ*��~e75��a.ɩ:{Vv��Mg�,l^g��~p�&���=�knY	���]��r�8�*�
+� 	Җ[hwB���v�H��_�C��B�qs)�p���º R-lLM�rY`����	��t
��\6��>Fp�@dJ&�[��۲����-�tz���7��=��=
0�b�P
3��m����Wô��M̲���QVb�lP	���oO��cp��>��f�W;+a��: T��54ܻ6�
s'v���
�㝸娻2�r��\V)@<է���]��%l��w��
	��~bac�JI����>v�^��C�Q,�S ����n�9ǭ�昮��Xp8��
#��������~S��g����i=�_����i�
po+�s�`[ɥ�#V� wl>J0/��z�%<�
ɋY+�C�#� ��2�=
	Er�g4/��vF6n�f�,��7����h��4��oRAfW�r��_O�Ƙ��}�g\��*WW�����/�����;�BW��#���0.i��>���͂�t��b�;Y��
��X�M[���
�^+0l�
6�}��Yx�(����`��>~\B)����c<�������#�J�K���$5

�Y���q�
1*�ۀ�Rљ�K�be����M�9�������b���Ńvڜ���bR{<���o��6�u��"
[鎙�Sǐ��֋�v
�'� ��++w�Ǩ�/�7��w���?�����~�'j= |�En��^�gl��9��?������ouH!?�A;�{�Ю� �G!Lb�Ct��d]�

�J�
X���o��XFH���0��<���[�G��e
Kq��ÃoXQ�i�Nd����5
J�`o���xv�!�_ϛ69���[�E
n��K	�X	�\]���
��P���
���6A$�
������ඉC�T(z�A��p�	4�iv i���
wlA�.�
�d�5{�aЃ���Px�\D 8�c�.�Ĺ������]�����
!�^+
Wy�s
Lq���"u��M�l�5�BaY~�u
��-X\O�$�
+1� w3�̜eR|z�q���NM����i���Ot�E�����;�8�
"$8���o�;�r.m\��
wld�hW,�e��Ti�t8U����E%��':��}>�D��vXc�,�{��H쾐��|�7}��g�2OQ���~|�r��N�Z���C��0�N֯�A��_��z�
py�y
f
t�7zN��Ј:x�9�pe���ZQ<	�
k1�eS���!v�����fT׮i��Wph�
�'p�*�>��
�Gۓ���[�����!\���u�_ΰ,(�|�uG�'�%LU��*�� ㎿�
� ?�4P�5�-����� ��<�g�I�ٗK�1��s��:8f�H��6��q��2�AZ.=���"6w�C�e
�N���
+<p/nO��.
,5��8n~�9����(���
�+���!�#����Ǐ
+���yw�����<a���Jx�4���F��Ot�_[�x=�딈�
+�"M.��Dr'����ɴ�QĮ��%���A�$p���
v�{���{��I��Œ��
5��a����
	����0+;�
��&��#@MǴO_�,=�����D/gt;To��_@`�ӝu�rn�k�
�'?�[�|�A���ئۅ��q�[��?�����'D�dt�]��1���й�s��s���qG�#�m�O��#a�x�H-~����
�4P�HH{Q�
���#a_|��]ޮ�Dտ�Y�}0�%� l�bn�6}:�<Y�� J�g��P��)��N�.Kx�˥�A�������T4u+�ߋ�,~�.<����ؒ+БY����H|C�
��E)0�d�[�\o�\ua
w꿗F��=�t�:�
+#�^���⡦A�Ou����j�bb �+
�7&w~:�n�p�z��9l���.F N
,�d�<m������eqH�����(�-=��2�W~�
��y��y&x��{58o��d�6h��䳇���0#%�8�(��m�=�4�QYIO��G���j'�FjW��Jb���Ask���qt�~?�Y���:@�
����^A)��]z�2J-4��Ca?�q
+�����8:M]�u� �n;q
���o�[

�w��_s�=���r�d��WEP	V�=Zܕ�1�AIaܥ�5��4�6�SѴ��Y�x����An#��c`$�h�l;�ն>�o:�}Dȕ�R#�]
�CSV�
�"������-ҽixR��d~�
�
��ڠ��'q��mS��}�ۊAu<
p/'�1��x������a���
+^
L듄o4] GKɀY>��'g��(��]é\&. ,�$ �h�d���D~��1X�t�F������p"<����ʥ�=����h�7�Q\��wX`�`�kx�(�%��)���C�y*��X�ar��lz
e5�W�}lj=�զqY=��
~?�1wу��9�-�8���4#�t���߭#����f����[k:ݎ��������I���s�-kW������G����?��q��颳���0��MM0{
���ӻ�
�{%�Z����CB�V�u�MB��p�}~)+�Ѩ~
���B����8���n�P�=����+	mKXji9o�
�`�ty��s��82�IA(X~u
�)���a.���(�ͧ���d.��q)shIjO���9&,]N��Q9�u����l
o��Ҥ�I����ߖ%�G��I)���Ci�o�稿Կo��P�9��lT����{���n�	��%]�m����GS&w4H���\�c����/���b�qD���&`oDwW?�����
	A��%����}N��{�
	I��_uթ�S�)hcF�G�c�D�y�n������(*Փ!��T�C�B�[zm
+"�Z�i
�=� e\e0�6N��}�n`ԗƠ�>�*͵'���5�
���l����̔��좔U'�'Ӏl�z���Ɯ�f����`��
y�RPF�ƅv]c!d�o�w�
֜�5u~�5a
+
v�֋�Ӓ	�	��Mp
Zs
��%��ъ�4*>�M�*Q�!�����Ǽ�~����	/�:L�f�n�ڶ0�v�ed]
p��B�E�M��56�)z�66��%�.b���Z�
p��@*FaI���
���J��814��aXf{��
7+�dj���•
��pza�A��d�v�� 9u�8L�2���
��e0�8�V�LfX�?�����CL�#Ԭ	2�M߰�U�	��� <����3Z��@�zI׼;~:?�/�7��-�[�&XN��^�6��PYÕ�v��4�}�w��j9��ƫ��g�xcif{`gt_Od8�}�S!Hשw��`� x���]�7���b���ec$L=8�7N/jR/ �&p>t�ď�̗`�1�|y���YXĸ-$����{����
+F��t8��G�'���
+#�N�.��Ⱦ�ti�[�EF��1F;
ZL��x!gN;�WETt(MrE��W��c�ݤ�OO%t���S�,"�c�[���L��Fr��w�:��°�U�� �FQ��;�N���y$��J;�hg��
�A<�����@��Լ�5;�d�����8�\4�,Z��z��e-M�Aqo����<�f�f9�4��μϦd������-�Y��an�A���T�
�*C5�)���`�n5��҅]ѶQm�QM����*a��ī����݀�e>(>���q&������ݖ
��r���:r9T�]P���2�C$�e�����i��g�'�-}b��_���|�0͘�[BK�����������
f����b�*��|��
��دʆW��bi��������:��m
����N�u�ke�p�lN��XYI���S);�
+��s돪�
��F~��K��V�eJ�� ���ݱ���2��4;le��F
2�����w~u�tZ�ko��H
:��FJ^�K@"�IC��{rr2��;��]c����˖P�خJ��%]�\<J�� ]�UK�6/��t�Lˣ������ur�a�nl��|2��jW�6�;
�
LM'
��6�N��dլ?D�����
I��
�d��?���o�^��9��

+�Ef§���=�cw�ɎߐƔr
���; ��tpP���٫�%�#�A,N��l�fh�
3*R{��˦�h��K�c3t$������ D�\�r�+ 
i���
��L��w����h�C�U;��šy����o�i�����6��0w+<лsb60G�:�vF*b��6���u�L�G�o�U���	��bP��0.�:���Җ�ь����q���ۇ�<?�7ؼ����'����Sݎ�N��������������?����$跟>�������/�>�b��-�}����\�~���د�|���
��8��ψ�K��bc��M�
R��	J诼�ܷ�~���~����,���^���� ��WIq����sx�n�`u�cV��t
+��~�V�x7��oCP��=Bf
�6�2�
/�OT� $���]��3$?
eܙ
h>s-!1H^�J�c���;�Ϣ�BB�ժV;&{��A��/����=`z��e��>q���B5��̟���A�S'�
5^�P<Ӽ;��,��޽��N^�8�]H����Z܇F���^$g��G_�Dz�Τ�:�y�8��\��
S�{������ާ�₷j|c�	��V1T��6p�]���aP���`�]9̇:�
!���}�|����\��Q�,
jYz�-�!��kj-H̱�nɽ����3�hDX��3��0�
r]L)�m��{�U0<�n��
|u�d�
#9��V��
+�[��m����޲�Rl��q�.8��T–�K٬
�Q5.KwY��Yb���=8g‚�UZ
�R%w�x
�«
+@
����At��X�jE�x%�EP�&=<���F��D�c0pA,�N�!�ct���0*�~�F7,�&Ox�+��=��2Z�ܲ6��̹b��\�m5z�ɒ��Lq
++�P�)(�Ъ`�h��wm��kE�6���~��iM�il�l�4���Q!)�l��[o��hGOA|��cz��UM��gUi�x�&��"�JŒ�G�j�*�wtr���9o��'����p{7BK'�k~��X�l�^��N%�S��h��

+�����5胴;?ei��>�RVɥj����?��b�{����㗕�>]�-
��_�ܴo��xc�
-�Q�i
�z� ��)~g������zC�F/��X�iW�'Z��]rx%{�������e
+#T'pJ���)רQQ|7r��5�SN��
���<��Yr9�Fiբ�Y<sO;�5YY0�J��t-s���
g
M}�o�{h��fRdd^
+�S�	�"C���
[�B�'�
|u�����0�K�d,��>���_}�dh[��\��Q���iYx������
��b�CZE_8�S��֪*2ѱ"Xl�mS�D�QC��0�&
��#��7p&,�RN�Y�
7�h
.���"u�q�X 5�`5�
� 
+¥v��Ͳ�
U�t�E~��BU_(��]�J�"-�R�����nI1�Ω�e���Ȭ
+O���9�{U?�nr����w�F�D�����z:
q�YHב�Ņ�0^�ȑ�0�*{�-��Ǔ:~Uo<�O�S�[l�f.�G"A��E���6/�R�i�n�O*�K3���Ry�B���D#╄�Pl�~��`�Ԃ3W1����a�k��Rp v_�Xz�@`ߓtp�3���2K������ ���[��{�tP�˶��J������U)��ɞtD�=Q
�2�c�h�α�s�T�h��M�
�Ϗq	v�۱O,�%�j��2ט=XEe���|���]g����f���Y�;4�Y��!{YKТI���b ڲ�M�����'�Rx����ՋE'�P��1=�q!H��T)ޖ9xi�j]
�2
�29�֜���{e��S�!O!�7�wh�S{L�,p���1%͎؆��ƾ�u���ͩM��u��o.�� ���g2����F�-ъ�]ly�X�0%K��掎��X4�Z�o
DC�JU
{�8�C
k~h�$噾�惰�T���
x
+=�ߩ�*�
8����JJ��s{��!�dG�F#3Z���gT,�¬.�N�-.�N�J�z_���DS���Gҗ����y�897+"��Gvw�B�D���3���Y�/�Uc�a��z�LX�D
�
��o�k
�E���l��\`�u!|�v�΋�P��}49U�Pܖ�e��h��	%+௤.n�g�R����b���U����m�q�0�S�������t��9E�+���Q�ٿw]N�BR
+��c��x
�'q��Q��U�� ��d�3د��|I�}u&�*#�Q)Mi��ѹ;�C��(�lo�[��}����#`�{����]��ŭ�R��1ޕ���}�@(�@W�o�����"��べ���;�㫐	�O��U��/5��Y�$K%�6�K���*�N�3���,+�
+�f�)kj0l�r&e�.���:��#�Q��`v�}LU��E�

�"��)��Q���������!
+t�6�F&�5��k�Y$�ݮ�U����x����1"����ø��qX��rA�/C=���Уl:��D�j�}�Z��
X���|qi7�[���
+�>
lM9ō
�(���$��k�U�>���s�2�1��z�튛�Ý��4^�3	i�gf����f�1�]A�봟w9
����@�ې��B���B��֪�;�4�bi�c<(;]��#��H��7�M�����3 5
 �팮���_�"�u
g��M_hsJҮG�e
+bfDzvGf����p+◫ �x,���'�
h���i�O�6�yȎ|$`�#������^t�w�*�qgY�x�$
�E��@g�2_dr�,K
+=g
c{q�R05��R�Ʌ�QL��R�*��ǫ��a���\�
�
k���HJ����:
�I�ۃ
8|`�V����
�5���A�
�WRC� �8�r�A�0�w�}p�IFRI�O�K����&LQY�d4�Ke+JQ�@ �P�`]�aӏA��<��j��!
R��;u*,������� א�
+��Cq�� ?��*�M�-�d8̥���l�VC۞�-��7�T�8��L3c�^��ь4��〱Ɠaia�P�
+/Ւ>
{�G 2�
}�%S�ع�Z��f;Â�(i���~yd�Ʉ���3���p��T ��)o�KX�Tה��z���h���}B��G�6���oj��O`&��u���a���V�~�i)HS�5���(��� �����}��MnZ��-�'	�z����2�g�o�#>�=�
�Ӣ_�^�3T�b��!�N��ӥ��x&
,
{ugs��:�ˏ��+����4�8�Hυ|L�����������n��$.��q��
|��ϑ�`�C��G���{����f*��0w���	D�����'�GqK��p�@4cX�=mG����"�-b؆��7M^E�_f
7M�UŇny�����H��@ul�_
�wʾ
�

�T��¡n��Sh��'�3����G.͢oh
��T�V���i�o������i�My� k�Lji���(}�h����9
V'*c\�PJ��v�����,����]�ߣV�֚{_)��Կ�����5�2X�h��5?�-��7����t< �mi�]yC��}Rk�Gqm�
}|�)��?˳�A՟$�Sxŧ�?Xy;
0Q}�Ei�+�=�.�,}��M���
–7M���3�ciYJ��>��;j�SR���0M�d������@��_��L4��&z��N	
Ɠ���F\5��
n���BK�1@*�X��`;@c?�j&g,���D��Ce~
+2n ���p��%)��~�
�B�������^1T��#VM�X���ZK�N(M����Co�jR�W��B0"1hm�����
�2d
h�t���(n��`����cl
M��u=r��+���-�/� =.b
endstream
endobj
17 0 obj
19431 
endobj
18 0 obj
<< /Filter [ /FlateDecode ] /Length 19 0 R >> 
stream
+H��WM�e�
���p7��@.�,��r�&��
+	�&
!���{�@�b2͐�#K��z~��.�)_Y::�p�Z)yϽ��7��k/�@ڹ���^:7`�wn������S�[���xz�����}���)o/��%�}���2.�s������N��A�,ۣ[н�8�8�x��R�m"Me�R�9MJ�����
 ���Bjq�w�6b�]��
w(9{Z8���Bj�VV�{n!�������l�E�O
�2��$�} �SܱT��e&F��D���e�
>��ݣx-n�j�8[Y�o�
��W���<
���3J�z� U�A���Ҽ��2{�LC��Q�_n_�ϊK_&.y$xn�nv�R�
 j#;�R�il�,m����4�&�3�v�ɭ6�0ʞ���m�k'	�s<�Wx8��9w�O{O�T�C� Q�&��ӞZ��(����=;�����!-�� 5�� e�����`eI�2-��|���ל=:�
��[��Wp�9��Yd�P�M��Q" Q�A!���Qb`�d��{m�"�Y�kq^
+�rR�_���I���/s�J�2�Ku���҂Xᦓ��X4.�q�+�E'm9pD|Yv��m%v�
+R\[��I,�Nl��>OG ;�9��> 3z��l]�(�������Ǚ�F�E�$:��6A�L�"�w$rGN
�ݐ
�@��L�
����-M
����#vu@�x%��v�]5��a��=N1<όQ�� ��'���g݀Ј�@
+�g�����ėI[�����Y
+솴 ��3�o����Z�z���J%�^��2V0�KG�.^�j#���y����
��5'�w6�qg'k
b��$�!�r��%��4�M��<rk�o3��Gl��J�8-�؇��4�E�:֫hd��h�0�Xu���'n�T�J�o6��_fi�R���.�eo�f,{V������pH]�ъL=�Ŋ0`9<��n���]둟�Y�9q5:�F
++��n�w��
�ц@
+
S��HB��P�
]�h����2�K��q\��`9Vzˑrq�z� �u8@�mV�e?
I�<˴�[��k
/rq/k7)�|����m?�
�� �"�G�����\Ԝ/p������
o�k=�M���n��*
���م	�|F*t}؞��㝭^`W
\�gw�V/�e!

?L�:��<���0U��]��rN-:N�5�|͡��Xs�U��	ea
bq�5�� r�'EH��]]��a0d��
�H�+����5�~�g��<��4���5���p���)x�����=��nE�]�V��3�L�:�K%,);4MWn`W:3��~�sJ�Oס�b�x���v�$<��ç�xvM��IF-���B1V1Â�$˙��WA
��C�e�R�l�
�;}{2|j!����
�T�
Vʺ·W�̰�-#����%���_�i��U�w9Z�����gU�,�2͇B���;�_�2�
� �'��~aJ�s��������z�H|��� ���?I-\؎m���/ �)[!����^9�UB��S��zC�!�CPo�|���N��ӻS߾�v{���ûӯ��]��o_?~�ӗ��O~���O����~����^�߼{}������ߢ������_N_N��6���y�����׿�������K�G�y�gDW�Zm�0ͱa[UX�������ƵU_������/���s
��h}H��
�0�0k*��Kc���������_���!�-|'��x���£�B_-@�50W_ ��.���.#��\
,
}��т����Z��ץ�b�]�!֢a�U	Mr~�-��@�]P����c4��=
+�B�
+��&�h�uW�ֲ�F�L,���c4�����݀؊���������,|B��&���)H��
�́�^���ke�f<�Vm�=Y�nC��Ҧd�p
�{��
C;��Å�ަ
��x?�G�����<�@��a�a
+"mBw
�:I�B*qRX��#��8Ƚ��sER
��X��}�@/�<A�]�`�a���ġ�=�}
+�
�]J�Alb4'$�qȮ�R5,pi#
+[
+�EP&�6�2�i��Ɣu��f��
��bH&���b�*a($����a�4S�Xh����0-���q<����Dj�u;p���4�`8�:^Eh
�fwo�)�2�=Fn���uwLj1�R�6A>
 �e�u_ճ<�V�n-�� [��
������7��W��Y{HN4s5�H֞�7[�q�3.N�!6/%��\�쫵��1	��
xO��a����V'�:��h�a��2g?�|�8�k��6͆��y�
�iV3�㰖h�x��Â
�ҽ� �œ�t,�9
%w��XR
��؄��b�
�<�4� �F-�L�!*�h�ՈC���44�|^(��3���<g�AE���P�i��V��l�N"nq� ?�V��̮r��#�F5�1��&
�L�T�gE���	݀��p�U��Q��u
��� 
\w��V�I����9��-�f Z|v��N�� ��g�h_�,i�S�12ǂ9��}\`j�T�زz������{�Y��;�#��?܍A
+�|ޏd%��HPHp� �H8
+h
��������ь���G5��ӧ�չLw������
+Wv9@��$���[���Q
�lt�h�Qv�,<;+�]��
�:s�U
��]U��
V�.�x��c��L%���g��93zb:H��`0
�Zu�wD��?-
]�5}z��}������kE C+8)�g�I�!w��{A�6{U�I�l�Ƽ�~,5+ ٟ 
ۓ��
lK�il4�:B�X2�q�ش'����Qg1
pP�U��V<5�6���a�;�r�`�o���QY�Y��za��ǻr�0�"��1���)U���h�����i������Hh�d��h��̞�x�Ei���~!>�\���,	Ul��F{N�9w�r�N\��#jw�M�ٵ0d�ȡ�TC�Q%�`\���{H�-
�˪L��b
+��DE�$ƒ>@�
����H�����U��
R�w��f����"t�
�7�>�t�݇��?޼�����X)�<�
���m姧o�~�����'/^<������o�����oy����w�$�|A�����	&�O����ӆ��w�f6�Ǽ���dBߧ���u^UV����%k86�P/�m�b`����Ӭ7�f6���7��
����)M�
	����!M"
.��Һ�Dy�e�PB�%$��O�*^H�_Ol�أ"є4Н�W�l�-,������|d
+	�SI����`�z�-zFW59Gs)8-�cyRȳ�J�z8@���DA�ˇ,��:�CN~��믙n/h:�a2�驆8o&�0�]h�1L��\v�ck��ȣA at Xt
uޠ��u|��=�U���v��c�H5�[)��ƌ�jX�Ϋ�
̃����𩿨���nC��>y������:�G�M�[s9�����L�V��4a�Y��E]�_ے��l/V��v/5f���Eޚ���(�t!� ���_5Y�ב�ik��7���� �3�
2�t����� ZW`)���J��Ԥ�z#˦RED{^»fj+Cw����c�P�+c/\��"��oq
	�7���f���9��F]�r�23�n�i�cJ�c��L���zhD�NI(Ͷ�f�´=�@s%^�o+,��<nG���%׻��۱Du?�#j��E�x��ɡ���W[���q����*[�1���bMͬ�~b����ʖg�
g[�
)
K���|ڇ:vf6:���G�0d�L�˞aR�;8��5X��4Q�>ۡ�[و�^�sa'AR���z
�A�N�1�L*��
�e�
�����X
,�]����U�6xX�b`uD9�
�ܜν6B��.
+�+J`�e��L�
+u�Y�
���~"�v�!�rsj]@ ��ܾt�d�
a}:�k�(�Ӻ�q�q
�~44�zq�P�������

i���
���a(�y,�XA��-�wa�M�
�X�_`�
ո|����'�~�)�įCQ������Z�luNEY���NnyG
.�]�Z��9�$]wA�Q�SB���S�F�
������f���f��	;�Pȏ��2�EL�
�.RG�s�`c��i���U��"��5�8�2�!\����
+�/
��u��dQFf^ү�ǘ�5R^��W,P�֫�5�!�{R}Jy=�����m��U�e�������9�ὸM��K�b�R"M��mK� 
��<
��Q�p�8�2t���(
��
�r�=-�|�������������
,���:��F�:���Ű\�׵���P^u�p
2��s,
�a�y35W��Ŕ�ƛ��M�X�Y� �bjp�$�,�
��� _��z�3��T#�����&���%PԳ�B'��l�U����}z�����1� 
O������#���Ǐ�����o��i���ͻ�>���{{{���
�}���7w�'�nn�~|��T���s����Ǐ>?��{�[�����S;������;�y�="7B
�՗�d{����b���
+
/��rc>��p��[��y@��4j��K>>��'յ�
랃��� �s��@9ۅ
|�`����R�}8
+X���LE�َ�fj�-��ݷʹ�Wf��n�U����X��p8�9��*}�����7|�
Y)$s�";
�u9i���ŝ��],
������qN�t܉�0u
-yƿ��R7@�cP�7�"�
~�Ҧ��0+��:�wY+VH�f�C��+9��Ʌ�*�WWb n/�'В'���l
��ً�8X$��p���9�Oav��:�‡y�G�@z ��x���%�p�"���*�`q? �|z�n�X!	�*�/
K�n>gَc?��W�e�a\�4B�/��
_J"����
wf�Y�!�7J{�

���-r|��8=j����6LǺ+[���!�W���d3��Z������S�B����Js0@��Gu@�O�y

FwHkE6)���\��ܖ�~�V�\T1��<-
��m��fǠf�� c��H(�e�~
\e��
��Z�vDyAFN%�`�F��
��x�ӛ�T��Ev���V�>suhy:��̲�g��]�S�G�|YG۷r�w����Anm��dX�}��@0�FK�zPT
I
��U\|��#/�YǙp��A�T��UX])0�;胃o���K�� ���az������i'Ke���a�s�oM;j�g[D}
�
�h���y��-'W���Y�<A�]L\=%z����
e��~�41�9CXTYh���Ga5� #�|��0wD��?��>��7�n�B�`i�
ǕX�:���g�D��;�XRjj5�{ 
e���FT��ϣZ�Gw�cYrð�L�H��N�:��A���8�釧ϒ��������u�������+������^�)��X��ϯ w�u�����
�>��� 
�)~�[
�w޽�ͭQ�p��qJ,m���7�1�,��i�^
�Zi0k
+<|v�s���� $�u�S�����n',��ږe�
�
�y���u�ފ����υhB�ʘ���ꊘQ�Y�k�L�ݰ
��������]�y�Z����R� ߭r�b ;�DF�:
ri�� �;��ç4�
�U�{)�7���-_v��/�FX�@�R
p���n"B�;�T�x�kG<'���� ����͎1 at k�cY���	�v	+Bȹ ��w=U�g��}��.P�*1^� aX�YO}���<t������o�]�
Z�^���
�v8ڇ�h	R�z� z�{�C��
d�G�7?���9����{sI����<}�7cOJ߃�Zݮ�)ܥ�R����߃��
���R�;ܝ��X�[u
M������,F���U�<V$$�U�
�ג��3G��'���r�,;
+l����~e@�ӹ �ϋLY��)E�O��v��Ff���U��
�Oa�8{��SwL��	Z�Ž�޺e�j���.
n�����]T�6���s#S���O���M�p�C���7��#D����w��8�1�-6�b�����X���?/|q
�7����jɶ�=�{G�S�c
\�k���ظ�Q�
<��0xUq�x��t9ь���
M��4���F<���Zrhc�����@���"l�cq� W6峢ԏ�F��܅T1|�l�����S��&qSۋ\
�uS
��x1����O
	o�׵b
���oԙ�
�6���%���;����f���O-�)�h���л�v�(hT���~?[#_6���
�*]r�
�vvM�2���� _α5���()��
9�@��0�f,&
+-q�f4� _V��������	�u6sS,\�+�!�-VL�ܳ~�Zr�G�tF*z�¬�c~_��~�4
ЩS
w��^�5�
�����U������]\t$U��Ϣ-�
�Eգa��
�����o��}ZJQ'Q���X]|�[V��=��L��
�h�E�Y>y�ԋ �3���I�6OD��� 
y��a���¸dIY��'`0@
�e
�N:���"",kT50|�υt��
� V�&l�o�:�m虾��q��l�e�'B9Z�}$�y�e[�S���� R[��R�*`o>��)�4F�<��:A.�
�V�3˻A�Њ�؊į0x�:mL��<�^w���*�x,�[H�	���I���(��>V?�K�da.�0;��{�.*��
�K-�t-�B��A����:�8}���=�VRs��,�#��`���
#X���B��`+i_j
��^(�
+3���r�s�L�8�
X�ڬ� �Y]p0�Q
+
�L&��PM�i�Rn�xԲ���F3��G(�
,�
��:Aq"ʙ��G�o�U
%���5:
�fy��#l���x�[��'k�TA9vWS�~�A�z千��.�/=�j�vۣd�`
j��+����Lō�6�E��890�
���#��_&h��z��y��EM��
+�(��Ut�cګ
5��
+��r��q�������f�j��@AS��Х:��q
+g)j�k�\�Yv�!�Q��P��Ù[��)ԇ��� �ե��t��X��:	�n�qJ�nO/��չ����F�P"�6x�U����8�H��W
 v��u(��&� �p/6RVf�f��r�� c����
m!rۚ�z��_!�}��Y�z�p9+V��4��zw�MY���X
�\��RS��-

p5�����]
��� ���Nv�'•,��-���U���� 綪�<�
�>���f�ؑ�l��evRF��r?2
���R_�[x�
���F��Q�էiI����#d
@���v���c��
�����aWT���q�
жT�Gw�_"n����*tY.#,�|F����Ep�!��(�m�h�Ʊr��Ƴ�w�~�)'�G=��da	��t�����V����B�h�Z�z&��Eֹ�%��}]���P��;�ߋ�p/쨶�l
C��&:��Z�/�+�>[�AWr1A1��VʌcM�o_�S�7w�_QS�����t����U�;�xH�#��.SO�ڗ�.�n�� X��pﴈ�[5�,E�;��
�>2���En��5��F
���ig� ����+�p���g|�#A �Z
~�������0�%W:p�G�pl3��|w�r��Ղ:��
ו�}���G/��{0��3�۔Y�dx7ºo
��)}���^�����^
밾=
��|.T��	F��������L��	;C��-{�_9�#
/��m!���Xl���.�Ķ����>U c-��\��:�f���k�b���
XQvE��e
�7�]��W
�7���rݕ��
�
Xo�����m�+��l�Nk
�]���\/r?p�\bH�� q
���츺d�\
�7�^���T�]
�
>j��h6:d at b�R}g;��u� ;�4΃c9��� �R&O����l��9K̛9��R�6��Ž�[�1{�`d�9�
+֤��e�W�V&[�V�b�:��r�u�I�珣��O��z΋d1�H�
dO��n�%����ӻP-	�b�����B<��y�'��֔���+6b/X%؍�u��x�'0�
+��c`���0
Fi���׏y�{�zݯ-d��x��.CMw(
�R%z�o«%Ǯ\�����
t�l��û� oV��>�"un��Г a��ȲD�� 
[+pD�<<{�O��ʎy]����<��c��ۮ��%�`ml�&���Mۦ����|4���E�XG�
�Xx�j�9s�J/$ pm�R~��;Pqm�o�-�����j�l�a���a�" �B�/�8�mx����p�
7;�,>�\��;���q��% ]7$fw�
L����ry};f��`k����ߏ^hьf`�Ŵ ҂���X�2��Z}�
~��T���
XÅY���
+텳+�5*p�uQ~��􃳘,f[Gծ��v����nGy�߹
�6k�/���Y:��b��,��
+ua�R��|Pz9��Xm�E�jA��+x�?3J|�?u1Dh�9��!���Ě�8d�ԍ�V��ՕB�M�jS���[��[�r�oWd`)Y���FЬig��
���L��b%�!>v51�)(��
zt�d<wkg
�yP�G
���YG�B��q�[��0���]�ܼ;=j���G�πO��˟m��g�R���,ZQOc��,,�z��Z�|���US��ԥ~nL
�/��}eк
�m�!'�%x�jïVH��4c�JO����q�:������o��/v��.4�� ƺ�U"ex!����iw8�°9x
+/]���.wm�-&f(Ş?�v��!��v���:�����+`����yv�������|�������`�ʨ��a
��
ѼW��
��(�ZR
�eJ�B��6Տ.���
Tb�
+���7ԯ'�$";'hG|���&��p�c�o��&���3lB��Û�Sb	Z�˟�qK��kI{����g`�g�0?��y����t����2��y�T��n�9V�[�}�U8���T�U������]'o��i9K>�m;�]O��0@
R^5�8�`��
�x���L94��F��=���La�<;jh<�^��m�S�VN߅7���.�� 'M��S˟��kϘr?�����l��"Hx�&'�Ōg��
+0���aG<勧`q��Np���>c*j��y��iƳR[��'�`�����*?���/@����O�g1��ԭ3
���֘p"G�s�	pm��cdjocИZ���!�
������k�R� �.�؁xd�

��D��i( ����>G4�D�\Z�b��3��%\�ؽ���»�2&�o����Ǜġ~�ߚ.�\��ap�����"ۖ��� �&���8 ��2X.?/8]b���*ˈ+}s�� 6���R�}�8��(I ���p�U�əw�?	���%v��ly��3(.�nn+u�[>�[��g'=�2^�X���nv�
�,���{}h�����+I!W(��:5=p�/7���uN��
+ts�\s<?��@���t��	$^��p|��
+������,P�Q��Rp�۽]b0mN(|̭� ����D
3�jq���Q/2.E� ��0]m���P�T�l ��|�
{�zt�=�
s�������+�*��f������"Dm��a�N
A�Y`G���R�e�����7��r�'
_�mo�8�ڙ O=Gk-s���J0|���
B#�U�uj�ϲ\�2T�)�*E�f��=B�_��A#�ˎD��ݭ pA�� D���OU���p�����b��M����p�t�Q�*BD���S�*��Qr��REc
,Cc
�M�2t�8�G��_
�f�Mó������Q�:��T���I!�L�ƽ�6h�	�%�����]�i�
+�t���%�{����Ύ�xӰ�>d-���m���Xvn��hO$�`�6�#r(��N~���b]Y�
�I�sn7��ԝ�}���0p@>����j
+�y�T
��轾���c�F�^�K�q��=_�^�8�+p�=8/�_v����痝�$ñ
�,���j9֔�)͖��յZ[{p����A�$�9�d�b�q��+;iAZ
��*?��	� 5��d���3���o��R�)<?��z�#we��e��7v���ꋠ�Rō=%����H6 KQ _�Ȩn�Bf���Y3ٿ�+�ae �Ms�z�J���[�k���.L
���C�ݎF�4H���Fz=�K
u���G
�@��
�F�
�N�i��0�؄`�A#wr��p���VK&��8�D�r�SX�4*
Sg��� ���~��
+��.��7XH�C�a�X�
����^��Ou��-���M��uT +�M��w
U�!��=�s~G|t�,�e��-u��*��7�>%�p�
}���҆s���gL�֘�T/���'�����7�*"�7h=	��D #;nK�N�%߿���~������~+�4Jw�-��e�;6��b��e�*;p܊��b���i���$��`�OK

r����C{n}���%���w{��t����RyuP
7r�,f7y�{�$�m�3�n���{�;G]o'�Wd��>8��P��5�O�~tm\���p�Jt�K��g%�.�A �!xj���ȿadg���y�34��n��!�Ʒ��5Q�*�R<Go.ḋX��d
vW���ĔهD�ov�a�%����6�4ߓ7�
�Z��9H����=�i����������)(��r[3uLJ"4W��
�Q"�sE~�g���G
Rr�Z\���k�
ד��C�i�,��8�&��T�Y��>!/n�t��6�(pO���f�]��&W�����y�g����U�j��G
+���|��ŀ
>Ky�S��:�P����]��R���;�
w
��i������S�.�]���d �S��:�A����_֛n���}�NZ@��U�lm�qm�B�4C^bNU��y��j|�(��3����Wˊ]��
���0��P��r��¦��AX�1FH��^�G
�{GVFԹ�ow�ĭ�����H�r0��<�c��]�b�"�b�C�E
+DY�M��5p�0iP`=fz��bs����Ygg��]٣�k=
$p��ۆB?M����'�
�"4ۄ��z1�37��z�wt���}`c�A7� CK$=�|v.^j�����Л^C�`��
�����iڃ���!^y�����m84����l��^*{�$LVC�6|��Qo5�$e��5������!�>O �V
��G�$��o������`�Z�Yx��Q�m����'ά�\Ǐ���f�,��Ç�JL)ȇ��q��lK�����*]�z������-68=f�u��!#//�T*�;?���@��{�"�]Մp
�33�,7#i�G�]��=��(��%d��t�Q�(�R�,�y6��:��_^���^�M��%���AHvo�
+�>��5I�0�d����`�jӵ���ƪ�
���x�։�m{K��\B�Q��]�5Եv�֌1b���f$��nOl,�|\�V��\�L�M��>�L�ҕ���^�?�{L��4X �&ͣ�uA�}
n8����;z�Y
+��s��
9��<e�Q+���S���5+h�5�^+��x��}{����ڝ�7
k�]A=o1�x���F��Y/��B:Z������9Xn%��0�EC%�,��9�Ծ��
nk"�r9M%�Q��"�^����e
�#��<i5['�CM�hZX�-������b5�%n�k�[��28�)�L�
I����
���{H9T5�W
�y͓4h�xHh�\^�l.X�x��3p;�
	6�p�ٳ�W��Zor�G&hQ��ˍ��-+���
mo��0
&�k4k��a4v���u�T�
E�i=�����Z6�+jo����CQ
��hw�=4���4
=�Y�<���@���Unj쪐��6��e��r{����.�qN�}H|F�u#;Z��^qb������2�:�U�*FC�v^�E$�At
z��y*5��k�G�>����X�2�S��<�A�h���Ha�R�m�h��n�S�b
Z�u��v7Z������J`��d�<:6����|N�4��]��������,�{��'��\��Vj���N�}s�s�6�-�
��
p��|�J�'!:3f�A��{�Ĵ���{MW�\�-��T9���Z~�ݬ1�5����y��Fe�ؾz��rao˥�}0sM��d�):T���dK�+���T�h����>W�6
�zv�Tx<塵�֌dH3�Z�"B�I��d7�C�|T�q��ŭ&���(�
-&��+�0:�Eװ�*�Mqɍ5�6��2P����u���n4>��C���yf`mۭ<~Ń�Zy0�Lg`�ҟ�K�
>�E&+�;G
P�#�?�b���\��4�ޏ�w���%62�ĝ���� �kϕ��#�F�<ߜ�^����al�\p�T�b���8��}�"+z�TgY���xI*�xhm��咍{Xf�p�}W� gf�[���n��f��
�杸
���aa�,9�-2@��]�V��=oop}hFm
{1Z�N;�\S��̐:�F��I��I i�E�w���ʨA�Ĭ�n
�^�պ�����YƦ;<�Y�q�mm��������t�;�@��
��f}x����߾�{w�nEJ� [...]
+�s��]�q
�b��U�a��
�@���/2�HL,�:�ۂA9�&7_�~;V���/�����R|�4Ц�q�`���N&퉆g�P�;I@޲��"��k��
ǭg�ԯ֖������b�RXyJk�k��.b����7�I7�o]P@�I���R��:� V�ez�$[u�-E��O��
v<�l���0D�^��7.|:"W[�Re�#r���6I
 �L`��M�pxdZ^�up0J��3+t�|P�r4b䅐�j��bRtg�٢.�A�������v

k���,�sD�vS�"�YA��(��gǭ�
+qF���l!�#�G�����n��L�ɥ�5���6��A%��r*��[��z�Y1����)&W��uv�S��
��`�Z�go�F�V^�AT�tyv���w<��S���mO�Y��_��� ����	T�n��+`΅��Ə� �94�r�Le���p,��
�4�b��&n}�^'ЊU���kD*c]���cg
,"���᱐�rZbo/��.�#��\A�DJ�9�6�
��C�뎶�3�2��lAY��p����آ;�bCBc��"}f�Ia٧��ι)V���3Q!��
eM�]�[�`U@
+H��|�I��~ff?�Y{Qt��w�BM���u_`Rri
��;{a��[�/�R;C��#�'���$X�K ��S�
�����
T�����
���Ǟ�D��As�)kJy�
�U����0�jP���q��ם����o/�z����o������>�����������OOw��×���������ϗ��I����ܽ�z��<^��������/�r���o��8��/xO	l= �K���K� 
+c�z�?�ql'�%_p�̼_[y�s/�d�ٿ����Q�
+��r�>��
6
+�a�`��X`mp��jS 8&S4�7�����kÌm�Y
U��+
�Yp���K����~8ږ��`K��D�
+�f���xH�Ђ:X;��Nq
F̭������bG�=�$����k=���c�EX[r(�Y09��⫧�9m�Ly�c��ٖ5��&�Ɲ�*b��l
��9�@�)$Ox2F\6S�S`��H�R �u|�~��xW��'�n>Vǘ�cX������?�ղ#�mC�7l (K�DJ��
/{�|�a�"����`�����{u�z�*4
�i/I��� 6�`�	T��o��4\�x��=`�t[�Q��f3P��{h#�`
a�q�X*6;@�
xhh�čf�`rO�4k`҉O���XԆY�R{��%Z����F�x���U�Ri�[�%ؕ�C	{z�}!�2Vq�{��-@��Q;OK�����:�R�v6�%��$ �O�%`�1;���\�X��6����*��)t5.�;�n!]-��ތ�1�3�mN!g!nfbbG]`��*�`���q��Q#3)I#��"#p쨀��L��IT,&��=�x�ԙ�q�.�ĪF��~����� [...]
�C殎6[aͯI	֞94;*i�#�bK��
��x��aj���3��1����H�6Z)4�t�e8}� w<m[��]Mү�f���Kq<��'=t;�҃�
�*A��,¨�–�R3i��֬�,��y�@���\E0pJ�;,c�6|Q
����	�����{	�Ҧ����L����$=<8o�o�M
:.i�����p��v;8\�p9�_�˫bQ���V���Z[uS���V�o�u��K�~>�z����UOc1Z
��Uk㓕�{���2���sI2yW�������?����o�߾}���?����а���/4�.���ӿ�}���_~���_�����}��l|��Y�l�Z�Д��c��w�M�^� ����X�%p��^
��q.�įn^���.p��
/�JvE�;ʨK��E�G�U�k6c[���K��Q�Z<�x�L��z���
�V�	á�Mxs�
�F�n
�!6���jc�'����4g7#��%AW,��Ӈ7ԩCM�
wǸY"�i��{��Z� [...]
+�i�
N
x�Ca,F
`TW��pDf��/xϵogѨiL&P
�
n����M��Fg����
�)��V}�Y�y��
=KsSIE�pF�^)}��;~�C�ǽ�j�w�<���QZ[�ً}4��zDo�{c��'�3D����xn�Wg��(㮋��'��=�
_NN]mƈ�*��{f'D�J�[(_.Z���‰V@�����v�hE�>����ߌ��.�]h��
7����:���
�n�����9r�su�=Y���
��9ڽ�<�� �
�ˈM��۰�� q���{�):��mH��0��1��&�g����SM����qv(S_.z���N��A���s��!<�!�g���W�,|��Ѽ>�
iw⧟���ϓ;�b��t+�ۣs�ԛ��+
�`��)��8v
��
^����������0���hͅ��92�=
�
�E�2��Ib� 6�2"~ñq��"a
L�4�V�&�]l3��ji�ӭ�ڍ	�6^�Yn&v�NKX�X@ �t�rN��E4m�h�WS�w��
+�C�q�R�ȌH�F	b�'�����)� A�+�:n؊��
 �`a�9
Rd^zؑ�*"�B^��o:�JQZ�ݻ��
�-�V
�P
xTu�,��E4���0�8�@��#�f�F
|� ^Kd
�|h���Ձ��Bm�����D}s�pa�
j<�T��������:��Cft���l�H��l���z�N�y��ݒ��$��9C<|��E��)��[�_^b�m+�D{�߿��u���Q(��`l-�ږ�|0U_
q/ݘ�o��~���k���]r�FT֞�%��&��?CYI�x
X+����;�8gب1(
+$��H��f�
��c�s!
�g���������I{�F���iePe����>Hw$�6
�FZ
5�m�� �:��g�c��$8�7
+
�╤��K.@���-�fG�e-?�³�
p)c���Һ����
�g��󻗶�5]k�{��n@��ň�K:�'M�y~v)+�=
��f�:���l�����"(�
e˹�P+�-�O�:$�-�EA�.��Ȟ�����C���"�h_��D>���{�`:+s��8��U�5g�i�� �^}R��HX�O���s0tÚ�Yj8�3~��b


�uw��a�c	U�Ħ�e�Z�R�N:��āVO�0���-���T1P�Q��l��a�?���03m�91��Xw� HH�x�
����Ţ`/�7h��8� l��<�l
E��
��]] '�N
_,��BX[h�_T���� ��a``�q�[��eEHL�a\FY�>�����;S>R^9(�"@Y�QF���g��"� K[��^	E3֕~�sy8�������+�u���N��:07�|�weH��Zd�QXz� �1V�ѹ�1�Y�չ��ak�k7��	�9Ȇ🺌��p�2��T\������� [...]
�=.��
��H���ܶċ ��y
O���q(mE |�����54c�?�X���%
W��וfơ@�@~D�G[��X
iחlF���ej�^5��~��0n&t��m݈�9� ��ȦU;�yx�"��_�{�G�m��
��
+��7N8*8�8�PM��JK��@.#٫�{[4���f�0�� %��� ���`��hU�H�t#�v� F��|�e|� �P�-<����5T̉}+=L�ka���ji��{C���	؛K�U���,nH�L�
=C
p{�x0��9U���ݞx��f��9�O�RIGGF�m�Υ�y.�%�G�cHPǹ)�r#����Ӆ+a\8d���ke�0��s#I\�эp[=�n֙������l�
[���
�C�0
c��;@ΈW縼�<֦�8 at Y@��7�S��V� �椕" B@�5	��A�{A&�V�����I
]�
T}(����b
^��65� TyT=�}�bL�
Z��|�C'�P�
�"W �P�"�(9�&�yXd-
���mhh˕�A�g"�{�ْ2���w7]Rθ��
�)�U
V*c>s�b,��-�,r*U]�,W'$c��V,��I��+^
�hF�́㩨�����{��
��<B��k`"R8V� �J�5�Uv� e�����3�\��m��h��
���=ݞ�fH{Dk�ʞ���eR 32��D�o�k��4"B\�Ξ��x
eΌ<MV��p-�E�l�E�ϴ�̶L�5ϥ
+�?�e�,8�Hi#�d
�^�;�3
+�x�Ac�
��%���	f��
+�@���'�#�{5F0I��kc` �2+���z.�h�L��zS�5�%Hh\+�Sd�<��.�iS�~��PXH�3���u �X�� 9Rx�3��M���aق
+�^6�R�
�F�36�� R���bc7_�o�>�(��J����HDLE�j|įt����x�OgM�Xp����Z�N��K����i�>̰/M��d��	tWb����+�:�&����`mLk 4Ui�[
�G�ظ��U�uY�Je#�0tÁ:�(�*S
+l�B
+F��n��
�UOi׵�������z��B.YП�
VY='�Ho�z��*��W�
���%3�g�l|�lx\�[%�4Է�R7&V���g��v��f�9�a��gCg�R����8�UV46E�#$�
�9J������X֫��ݤ1�����9���
��b�*:�c�ט�*[|���]0|;��z���.nΔ���e��Jݕ��a�ɝ���`�}`_"�~�
��	���~/

���Q^\3 ���Z�L�: _#K���ь-ƅ����'o
5>���S4Ǎ�4
��ٟ�����&����;��k�7
0�hSB<��A�ˤƮ��-��W���4����l���²�f��Ž�n���}�-��Ksк��~��!BO�:�'æ
V�6���
�.�"�(3���5RzV�������M���U}%��
9|;�y
W?o����8�������Q��qX�VcON�Ȩ�=�p�;�
+p�d�f��T\��0+u����2�fK� ޞΤS妽�GW���:38;���c7��`
��sSU�wơ���wS�R�G���|=g��֒�4�E�'����LF��|�4����0m{ۺ0M;�
��
ChI����@�w�cvq�N(�8�
��
�N��0hKP]F�*�P6�?���W�ό�V@���\��<z��mTo���b�1Ӗ#���m�Ľ|
�+����Ix>�����֎��9$�x]2[��d�`Ė��Є�' �kZ�*ٺ>�A�,�)8�5��zp`rl���J��E�I�R�LTuj3�W��F���Z^a1�]
�=$��	�M
r]��M&K�	�D�sP"V
5W�Rfc��g���o��Y�z�q�
+�6c�C���p�Ck�j1߷�<Xg�.X�Ϧ/�����#�N���c�W)xX���0V�x
Y��d��4E,RQ.$�F;�^oŧBEi����*`w0p
+}���sA�������K(�O7!�	�)�R��ئ�>�(���җ�Q�������;.��ނ����`�
uSr�K��)
�;Rv+��3�,��

���遰�t�����z����~/k"�I\l��n
��P��Q�\� R�}�d at J�;(��p4�]���^hd���#ʺ����z;�a���*pg�IW��K�t,C�i� �z���MFF4���ḿ����5k���{�,���C�X����7g�n��z���H[��u�����L����u�Ǐ%���U,�֜G_���7�2�ෝ	�3�>hь!D��0����y�
+��yk��r�`�pu��^�?[{�A������Q�'�(��)�`\(������O���=E>��)��� h��\ߩ������(�c	#�B�������}##��O~������� ѷXA�uȘ
�
+�>nMtk�V��5��8m>���o Je
+�?E�if�����y9_�q4b���(�����1��(?�A�G?o��ثw:��aM�*�w|u��/�>��]a��-��y!��}���XFc��
��eY��5��j|�#��f�����Qr\��yP���',\�7�&�^�"t#�_q������鵉�@u��4 N�ޮ- �o̒����ކ� ��N����k
"����� �m�{S#ۀ�fM`;��̟;,�.2
�g[l.b�P�Y'Qy�6 ���ۢ���e
�����lӷ ���<
���K�2p�\q/�H�/b���ty���Jl���*3E�$n��J���J�
�bpm� ���
[A�'�,.o�A�
9`��2#�򹻦 ��3�W�F��t����$;�w(q�ߚ�m�EU#:
5M�
��C_i��k�wk0���<�*������K����p����Wi�L���w��߾|�������>��ӧ_ൢ�}�ǿ^V���_^>�?}��o��o��??}�����J���{��o`?_������\>�����8BKC`�"r�O�}O�Դ��mp}r�l��>ܼ���h`�
+�O(e/��\)������V����
�`Y,Jj%�pW���>1�������.�N%��ɇ,Ʃn/

���
+_�j�%SJ����X-�
 a�^�
x��م�F�}i�
+���[Om��7G��\�h)#I�G��
B���.�m]�����
+p���
�������[ij1=N ���
endstream
endobj
19 0 obj
19619 
endobj
20 0 obj
<< /Filter [ /FlateDecode ] /Length 21 0 R >> 
stream
+H��W]k^��7�?��������I���-)-I
J1Bv\,�*c�����̞��k��E~<gv�癭7�C�^�=�Vz*��m���X�v�Js0q�V��O���Ά&v�֨�Cmg�m� ��=~�����ۛ��7w�����
=~~�M�0_lO~z���{��_]]�ܼ}�������ؾ�ߏfI>p�j�9'
+�A7���o��&wr�i�nu�n��#4iHv�O��0���!��ui�E��[ZT�<�G6
+���<��{�N��p��}� Wf����=B�dp]��!0�T�k�E���$#�=㷲wI�
�I���,���H���ʵF�!�$���C��c�6�CK��
+��‗^����JK��/��f
� .�Z�;JR�iUu�w
+;�J�<5랉�f7��Ԫ�>rj�o����n(w3F:��lQ=�,������{��g)��>i��
,���5�5��$��%m�PU���^
�awR��Z��N�1�S���B���*:b
C��ԬRE�!a
{�e�g=T�ӛ~ȣ�~5Y:$��T,�þm�V��N{��'*bz>Sf���gk�1`F�
$N+!xM�:���	
�ao_R8��ˮ�� D%�,�1q3�
�NR�Lu�P�JnC�Z\�kL/�J�ɠ��Ϊ�p4����x@�qvc��7ԗ��s�i��k��=�W���n+�H�x�0��0ˆ���oK��ˮ �
xն��![
o'c�g<cV&`�\�],:7jN6k�6dμ\�ʷ�l#
pm�x��]��� 
;�
5KԎ4�>���t`�d�=��M2EG�xU� ����\6I�j��
��`$��C�f��r8<����j�U�P
o
ﺄ�GG�
�5�J�5
|�E�K�P���UwdU�(�eC��xhv�8��x��[��.R%�vF|�Q���U� J-�]N�Bk� �
�ң��
+���BKZ�ۭ6��ٻ^��4�%z�ڳ~~Ƃ��U�
�T>*�/T��nԒ�x͙�q5�Q9'ʻ��q_��{4����C�ތl�����:

�
��h�݄M9��n(�_0J� ��Sj���a�pcF_�pk�j
#B{ �K)G�
l��ed���rD�w
N@^,�q��X[`-�ݼ+��Q�]I
0�R�6p�N��̜���
�
w�2�$Fm�ep�8:MJ3@��
����Zs���9p���X��`�J�>�Md�_��/a�w�����
�hjF�L���G�|3f�8���nV�>�=��
�0��c��B����,����팈u�~)��&��Z��&*�c����L�'�������~
�OK�d�~�҇f�)�[�
Wl֠�-������^��d;�1윫�Ù
�l{����
D1�"���8�ڌ0��d��a��
j;�k�&�ih=��A�.3~��r!(�d[%��L���t�Ŭ
�X�A�	�\b������^/���G-ō�q�o���Ą�qD��b&���Ⱓ��=P��j����=29��m�蚔�K���	�pVT�bs�<���\�a�,��Ì�,�֜�w�	��F��[Z���(�Nˣ�<[C 3��:�����X�4g{��aD�
�m�6/�W��tt���S�������
�����,c���yN�>���$�c@]�vOL�.j���+ǒ�VRP
�U���#qև�}�*�
+�0&{�%�0�ۡ
+I�
{Ku�t4�/�Z�
+c�q�U�
���hmw��|
�9���ɕ"��:A3��
���M��:͋ h$;�STkA�
�eX�$����K�����֎��L��!H:�C3��)��@(Z.�3���{��
T�K����nDKxY�v��8OI�Z݅K��c�l�-�!!��]�<�
�;#c
+�G,�U]�
8c��s�~��l�M�� �	��5���A���\<b��pzv;
8�M|���i��{���'�:
t��|�%���{s �HI�L��ܐ�a]-0�[�L̘��&
�r��VW ��ՅƖ��~aA��Y�ig�(i0��J‰]��W
��
�����i'���B��%5�ڰ��ʋ�q�P�s�Q���
��ku0��O���+����z�r\�KEp	ᚂ�i���s�|)�c��������qL�:&���ȑ���@���Vr��r�>�^��=~�����ۛ��7w�����
=~~�8F��b{�����ݫ���������o
�����͐�~�Xs��)n�XD�É7�ܲZ�-+q�-�64�D�
t|
6�,���l�y���-�5��I�����a%/j�k&���W
��g��_l���ѯ�/�ҟ�����������/����@�^����?�������ۄ7�/�
��r�x����۳�gi�[����_�����h������d�=="~c:!:3s2�G�O��qD�
+�ǥ�t��

�;l9�A���C�R0a�����ъ��?bz�:F4(d����cH
	���=������`$�`�<�FQh��Ɣ͙�}�8F�(���^m�u
W�=����6��>�VҀ۔�S��P�*�8ŒMk;��w�}�#��[ć�9sf��uK��d.
�� JT��<hΆ�M15Y���ָk]5�hЫ�j�@
�6X��jk��s	����ɪ��n[Tz�u6��9��s���M��G[�Ps�'D8����A�+p�	p�2�׹J?i:���� G���倦{-�'�Q����D��S��p���n[��z�M�QT*F��`�3��� t!��R�5���-�B���#�Б(�W�f��b�>����4L��t�����!�(ON�C��$]�7
	�]�X��(=爤�)�?�0���u� ��q�fF
�.M�_;u$iK%�^[��F�Ȏ w�o;9�v!�@����nZ��g8���w�E���k+]�ϵn��sL�ނ�	4����,]�A�tW [...]
G �����i���Y�
���K�@�)ݸw{!"�=��>k�̽��z
��
��'�!ߡ3�p�Y	���N�`�x*��@%M��v8x�?�6J��L@���
�'Ȥxq�����z�I";�X�����ߝ%
��QF���`�f�ҊIl���ٔ�b� 0zl��jگJ�d7K���
Օ��|,�z�[
�VT��
�r���E%
�yz�i
�
p��ŜnJ�y��=YqS� �<0�M��,��1iI� ��Ce���6��F�8���Z������F�b�₍�
X�����\��F_|��'��-=��l:"�&x��
��a`�oZc�-`�6-6�8��Xch�̖�XLR2	�4Ϧ�k�l�}����à�c�f�Ga3������(�c���1�YI
�cC
 1,~*���4�1�޻����&�
�%�
@,^�mB�YdZyɈ�X�z���
��q�mE+�H8����b�%�X��������V�� �xD
l�=�ZvѹioüTm1엑.=M�V�o�W�Q���`"^8�b���;�>�
JS�Ø	��Ud;Qo"T�Ȇe�Zt.��I���U�g���SW�
AgGnC��H꿁�jF
����������tDWA,	�%@���0�Tp�R����_5��Amq����ΊX��mފe\t��
�}�t�b`����!4:�b	��hN=���Q������!]=h�M��ܤ����t�,��W��¸y��H(������p��Y��ݔ�������j���q��x����^�������?�]k���

����O?�=���������>�|x��g������_ξ�x摓6��?��P���_����k�y�҄
�UԱ�S�X��@۫60��?�3��D�x�����;�x&Ƿ<�_�?���|������u;zkw����m�S�>��jټ�3��F� e���V0%E,�p�s�#A,+�̢8L.u��3cT���r�"�TN��y(Ӹ
� ���)HmVO�@z�t	�]�pH�����r2
+�=�;�^}��/�O=V[}��C�:3rr��	�g��:�oض�������@���%
+�D��{�

+�k��Cj�Zryq�����j��;�G��.�|�Jş.���5
e7��T��F��
pNͨ�NB�z�\a�jva��R��",S�.��j�&O�G���*b��H�x�I��
�e��n��2k��S��_m�4͎�Y15~�M����v�L7iŞr�b$C7C�M+|>�23T���.D{�N;�p)�d/�<`�X�������_]&��H��jt�
E��л�h�
+�
m��]0�����x�^�PN� .���
����K3�@��>��7�$����������>ZU�N
��o7#���:�~U�G��j�b1x�;�4��Z�i�����Ȩ�gw
+p�����������������ۗ�>\r�g9�u�!��G0���חM,�+�����&z
i�`�
"�*��T�N
+��Xl�6� �uf���V��5�>��Py
 {w��`��y�A��
+�
�:�<���$����e��m���v at Z�����첹��{�+s���O�\��<�\-oi#p�=�x��7��o.���]�"�y�m���k�v���ף�R��h�`�!3J$z�G3b|��hh���4�t�[@A��L>"�ɋY�Q���*�
I})�I/�׮4��\�W�,��T�)zA����;��2��_|aS��"�����P�UV

+��pE�Ą�sh���z��\���C��ߋG��80�Uܕ�Լ��M
+	nj�y[rS6���z)FL�8�9�Jtx
+fB|�
:Ȝ�:ղy��ao��y9L?j`��Jېi"��'60y��}b���ʝ��p�Af:��eJv%���Z�J^Z�-M��2y�$t/�j�
.J���|�
��&E}E
'�0W��l1GI-/#5���M�.v��*�B�d��� B�I�@�*9����4���EE�	#���/�6'�V4%;����Fg���j@��B�2��b�������RCm�J}�s ċ���`�s����t����������Dr�V��'܊:"|��>1�}�c?�!G���֩�iy�^�
���anulsL���T~�����
�W���
��a�
'c)�\+��{;m�D����zn�n�3
F��B.��l�YK�w�Mz8U ���a�~�� P���ٯ�;�#����������]ݽ�M			Ƃ�IN�H
ےпϩW3s%ǂ�h����GթS砽9&j���e��[,
�b����LF@	�L�1cR4
)�}��Wc�
���w�@���NǪgJ�k�7�vX�����'=�ڱj
!A{�1
�Zh��W�G����Դ��]'ke�v�_P9��wms�{�kՔ�����kK:4��t��̉MDžj�a�	�	�}{6ܐK�rs��l;��C��j:t�A[cs�)�M�f�,g
+ ��a�R�Na
B#��r[W
=-6�~C^�j��,!dd��Z�1��#��ris�
��kgal:���l�eKC��:}���to��و	mH� �>WԌT���D�z�N�Ż�̐U
�/.�V
�Q��
@��
��}v}����2���̱��g
+�:ן'��Ǧ��Yȩ6�H[v;B���m
+�%#VWu��9�
�ͥPDK�|�IU����1r�L6W��c).��}��!ɶ�P���u��O����&��c
���|�=J�����a���vK��
ܗ���ZAǾ:�iE�S-*AX!m�&�ڳ�^��%oT>0��L���jH�����k
fO�h��Mkq�a(PmVdb���B�My8��'ަ�.�P��p�y;���p�B�X
��Wi	)�(�N}@״	L�{d(�$��%FȘ+��f�� ��d�G���5
�
+�!bu�/�4�*��Aq�cq��0��6�-��r�b�!���#� bϲ�LF=Q���n���^;Xϸ,f��dh�jV��c
����{Woi�
}/%U)�wS9�� ��=U��t�_�
�uP)p��
E�~�^~5�[��@

Oh�����2{�
L
��ƒ�
do�V�c
������o���e
�aOaֺ-/�H��`2!�+�����>$�	Bѩa���F
�ںB�~푅�=a�O�
�Ͷ��1�XK~���� ���C;Ɲ��
+W��@��@u��ګ>*j����C�h�p[���]�p4K���'��F���k�[R5�U׫q
�Yjն|��Tk��Ь���
�3
k�]�o��	�[�ũ���`�})��Xl�k��vx�א�*��t�tv�7B�5W�;�#�'d�>��B��\��*�R5�'8�����N[v�

nG��C~�
+;_�YI��N�t%2WwS�`�
ə��ϓ�
�1��uY��/�Hjqcq��c1�؊��N��
���ۡS�ٮl��*�-b�µ�|��$]�v>7����i��d��t�`�_�^"6��
ߥD�
+R�
_�@w�4�2��m�~=
{
w^��u�Y9!oK�Y���
q��˹��Tqޜ�����*�n3>��T�����	�D�K��ٻ/Z��W唞K�i�� =
XZ��A)�P5�H�GO�&���X�K�L��[��S�R)al�l=(��4j�bՑ}5���E#��'�L�uy��a�Ez/v�b$�@�R������6(j�����_��m��#|���LSFS��֪^U���"waBJ��~�kd�� �0���QЕ��a
4�9�v�&�VA�j\y/���v�N�#�a	ot� �N�8�u������87:

-��g||�8}c7���?�� ��O��>��c��߮����! ŀ���7r������|
�%���g�*~A[�b��a�S��D��2�W�Q�B�i����Pb*V����w����.�N�!̐�ƅ��
rݫ��E.0�K�"�Z��p{-2�6&��6���c�O.s��_�V�~��:{1�`tu�1>�M�O�eg��j�ӵ�%���u��W��:w�"��$�z��A�Y=y�P?�im%鿩ٚG�I�+�=
��A*�z�P�ދ�p�M����W(�$��)X�›m�/��.DP;(�@}K�p0uyu�M/�iL*��n3�MT�~���Q�aKm��#���8���X� �/��mv"����Zx���mF+9;
��"�3<>Fx�7G��G�Kbvh`6!�7���.�‡Ȱ�@h#_��
+��r�KG
+���P���bTEҟ��5�j�R~-O2��[4��

+�ش9��j�
+���;�S��+��O����������%���/��Z���>�����_<��Ǘ?�������_�����~q?�ŷ/^|��铓�O?}���">~��q���?��{}j�?����rz�5���
�#����knD�t?Z�������クzy�v��XS�E8�L;�m�?����>�����&<��s2t��
+��zv�;��Ϯ�]��?���#�b�>|�;����r��5'�A[
�f��z�U�
�P�e�2�|Kȃ�zNG���|�@��j�l�ƈr`
��
F���<��d^��
��䱶�0Q&�
+�ÃE�|����N�MO�sE"��d��%���hy��x\
��i/|H��'�4$t-��+����Z�e0*G5���I�a�ؙ��2��po�8�
8��
9G,�ԌW�^sl���eW���"�0j������z>j�ǔ��y�ƃ�2p���Q�7�)��]�-�P�]k�<�V��́;��Q
i��[z��?x�x��)z��e?
Еn�`c�3�Ϛ8ۡ	ݩ-� �k�Զf��!l3���Eys���E�g����E�!QqlU4A�]�����_,�1U7�e��
w
�XHT�����h���%Jf�ϛ�0
����0��
e��+t$�Y�tގ,4��/:��}����I��	�m��c��$���Ŏ�l_��9�o
ҫu n�
�)ez��U�3�;�
���#
+�(�qdg��e-2��e�@{y���@&	2��m���A�x5@�UCcDd��K}��Xv
��
zE�?Ca��<0�+0D��Dx�:��{��$W
<����'�BlC�l�>� �Ȫ�S�v*�dO`:_5ƍM;�n�Uc
� �#�:\rh=\xa���26(K�� ���_.��ӅN�
�����E�����"�q���0��������� �#܉_\�:.�o�=���u��'?%J��<J���]�T�0�
�
?O2�C1?5�����b�E�ʦ�5!
���pLB��̖A�u���Xy|`}{򟣀a5��$����o�U��v���������/�ho��C:� ���|z|���K�J���?c/�۵�Yq�����
�~2���Y�>�
6��iG
dJۿ4���!�/�Ɯ�"�AxEogxP73ޢ��"��<c�;l6��]
0X]U��I��%2$/�,GdH5� 13$�S��:y�
�7�I�X���,u�c��^�V�:`���& [...]
��F��%�z�B������
�]*Mp��R�/�����8�r�P�lkJIa
x�q0[��������˗c�n*k���PR�@Į�M(Tv�����0�,���dG9�l�ţ\U]�G]<F?�Q�R���r�V�nMw)S⎽��T
&���\�>��j_����9�dIa�X���O �������;�2Ԓ�
��Cq[V	/�����.�����b�D)��ڗK	®�y]<�捥�[��
n��M�����KO���g<z

Y�{�5�8��iyr��<5�:~��:gїA>N�C�M�')�MO��?�	�ل�І->kC]B�
��|��	7���ƥ_���
�P�4�_C�Om.:�;U��x�[�*y�
07z
���XM{�
+�<��R��r��h�S8��0�KMj�;��
+<�T���On��MH�8�Wɹ�	���D���������>���Y����w�*W���Ώ�`
[�#\�!�V�KY/��a�C^b�+/�P�Y�P8!������ʓ�-��7>Jt�
A�f�	>��6\�Z��|��`�|��HL�����>z��K)�
�&V����%:B�-�;}ؖK�(f&�fұ�Kq}
��	AX�

m:܍����|���&�(��I,)cl3um
.���zؖK3��9
Eh5���%���T4�H�>	p�!��ö\�[
�CЧ\�:I�&��b=h���,#
Oͩ��$�P��d��q1d�%�d�����+١�l�aNɐ]yX��d
+y.����>Sr�|p��+|j&N�����R�.��Ҝ�	׻-sl��z��m�H�osg��Nߗ+���&��+=�#���pQO��q��xc�$mX�S�;k�/��SrӮ���>�B
�bi���Z�{AIC�>��`���#�z�H1e�xF���K�tq�2�������|�
�i����}f�r�]��R.ش	M��c�C��?ʼ,��
�f�ڃ���7�Qz&&W����ٯ�Y	GS��%�gm��p,�Z�Q��4<��T�VVS�J�=�u
�y��+����eT�m�7�!5n֓�q�[�pD�BV�
r%��˜Q���'[�$?
�5��6a,�9J�SSǕZ˸cf{i�"
��R��3]�`�$vq�X����IECX�O\��
-�o71�8)��a�S���a�~)�Oio5�W�?� �PU�
��J��9l��lJ��M�ܥ��e58G�Lj�`L;e���J(S��z�����j�ڭo�����*?5�rxE��^q^� [...]
+_R���0�Q»��ퟓ��c���0\����� 4QP.�@-.����Iy�5����ލ��X
{�P�0g�/�M9D8��P�K�3n(9�M�M��gpz��aG�S⇿�^I�j��$v���	+�z���(�m-ʛ�a��@4���y��}���zQ��P�b,C�q�/>�N��<W�������Ӆ�;bL=]{+�Fim�����
^�n�~�}�Ǐ�6��+���^�����.6ҩ�RbF��d��
t�i_sdu��'�Y�R��Tږ����!�2L�0�9Ӫ�-����e���Gtp^���SW�����9)�`j���R<��
-���6>�Ԫ�Q��Ҥʰ�9j�;�5+"`/t��o��&��Ce�Ҕ�iwcAߺSc���+t'_5��-8g�d
+�T�z^)�4�dҴ�"�v�f�]���e��++F|�
�}�Fˉ��ڊ롍�yvK���;��2R\7��#��'�FLH��lZc�=k
�z�
�|o���t��P
	��'����S��
-����su+�+‹)r
1�
���@�b�C�:y��X�+�d�vu�Q-�רT�.k~�#+u�(���]�"�%���zm%���Ɨ�cwҪ8�i�ix�h�=�i\+ޫ4o�[�[��n���p~�o;��cܻ.S�|/k�j�3�Bg�v�
+���g�E�(!kTd�8ZA)mN�봱�P�Ϧݶq��5ф��
Ó�������%#�,���5�r>x�-F�e��o�t�R_}+��P_�|��짢P
=�����<���I
����# ��Tr\��Z�
���?P��кVs=4M��G�
�Gu�����f��o��!<��N�(��1]i?t�&Z<��
+��.�Ōx��>���U�j���I�����W�v��D��m
����H���\���Bա-�a��_>)���C0�e`�KD
ڄ<n��I�\ַSK��Y�;i�)�� �Q��u�'b��s֮�.���y[C�u���=5�qO�XJe[��A"�O2JB������+�U�۶�D��?�%@
+��\~�y��&����͠%��4�Rdb��wfgvI�b��i�F��X��p��̙3�z;6�-B�Wo��2�
+&�]yև��{���O_ⶩV??�
ŗ��t��~��C�,��g���A}f��T����N�pc�mOX��$���=;PF��S��[�a�yЭM�[C+TvU�Y�����R��p�N�7b����@������'
?�[絽�f��p�|�#���&0GӇ�\"�e͍��N��U�9�O�������݅Aw�[����&9~�J����yH�L��&./�l�,A®�ra��	�)D�SX����W������ �o`���c zG�
ɖԋNQ��l�
��A�N�+<�<*�
`�v�
-
�g[�a2B��
+��A��.t�J����[
ߵXO�^��E�v�p���g5��V�)
E[!��DW^=��'
�S�J�v�L6�T4p��SG�
,
��*���#܊Ȩt��X�JG80٦J���n���d �c��meA�
�jj9dv���,�7�z�>��*3���v$+��AI[� r
Y�����

�_t���. Pb
+|�n�X�k+��
s��P�5 t)���_���a������
%
dS�*��i
��M��-8Q��0
�C��}�R.�P��G

#Il�}܂�E}�p�Q���5��P�Y�|ҭ!��k�`�����]�M��Χ
��q �Ӌ2��@��L��K�$�nC��>�
�vG��V��� d��X�M#/>�e]Rf\_f!puccB~�r4��=�D*�4��
�wK�<;�2PT�h�>�_�RX�#p��"t�����h_d� <�?p[��ͅ?�a��A�F׷#�	��J�p8`J�����Q�
6��N������B��
 .���{اk��"� �{p��J�DD4� �[��s ��F>;@V!�
��i�*�n�n�?<]q��v�&se��a���+t� #�Z� ��F�N�G� h��ҰB�Y�@A��,��D���[�
9�xHI==DX��Bt9\��9��ZB�AuPR%,m]��!]�}<r��!-*�%Wq�aE<� [...]
PjR�m�H�bP�9:g
��^7$a��S�����B^��8y�
��
�jh
��[ ��ִ��NU��yQ���c�Ҥ��&�؀����؁���b��h�t�ҰН����Ɋ�Ǭ���t� V�Ac�0
9�9FS@s5�V�
+��8�Y�@�+������"ҾR
�ǀp��J����ߍ+��!�>���P�n\��
�WP>kː����^��;�� ��B�S(��>�c\�h�D ��n}/�ۓ�a��z�^&l���f��zT�z�鞧	�����2ڝV��g��5.ɨim�ۑ��2h�o�/l��m�W<�ٕ
��V^�F���R����������_��EYoV�J���X=�^_��2ͫ4�==e�Er���''/.�����wo�
\��8�O~�_����e�H��WKi�ir6�������]���S�'�&?�����s���\L���U�i����g�e?�|�˛:K�y���91_�٢Lr:�&�Wi��e?Lr���^UcH�P��j��M���U���I�
�L6uV��$0*�m87�&y[&�p���`�z&�ڊ~\^�]ͫ�3�0��6	V;�mL�*��Oi������&a�����oc_&��n]l��d�K���̊��'��x�J�&e'����C�a.�ɘ��뤌�bt\g� X�����1���4�>v��3�p߇�%]TCD���Y at 8�m0�$�]��$�Ш�{
��r���<[��ka 
�7D���{�V����_2�.�:_���b���d���$����*���r�2�]��̙���U�o�sM�u�去�q�;�r�]��ua���
w��]�(!q���.�.�7�4�/��GE�*�
+&��.]��"w3���M�x�|Nc��֝n�߼\-��d4�f��iE��~)d:��dFu�b\��+�
�w1.��p��.���y����h��0��c��Շ}���f��OAy[�I5���3
Ŏ��q�i��k��<N�1(���z�QcpS=d�(����t^dE�˗UZ
�t !)Q����2�'�y�F�(@��{�x$�z�.�$/Ha���8-�M��D|M��,z��ݺ�
w�	jcN7��
����(�YQ���<[�b� �з�뤌�bH 4��� X����
@E���׫tnRj��YZ}�������@^{	�eZ��ʬ��A���QHF	8���aH���A���</����0���Y�G
�ߒ��G
�]����{.��&�.�z�M9�Q
�?#&�����
����ε>���m�4�F��}��@��A|I�j|�fᨷ����v5���F����P��__$��l��ŗk��?BBgo���5�����m�UIٟ��| �P��U���|u�UƋ�ތ���a�^�����"�u9Oγ�*6	��nn�M���Q8T��X�uR�U1ڊ�iWC�� ���A�F%gN�!��4f ��UW�'��p
����<�����M2Z�$�=Zݬ,<�Ս�/�z}��0
+�E�btV�:uM�ss�˛:K������f$�2�WqvY���G��[9ˬyi�%H�&�$o����a��-�T�V������
+��s2.�=�`���ƴ��j���f{�ʋ�<m�N����O)�� �"
endstream
endobj
21 0 obj
14208 
endobj
22 0 obj
<< /Filter [ /FlateDecode ] /Length 23 0 R >> 
stream
+H���n�H���w��
`��l+��,k"�� �{g�Ȣԙf7�ٔ�<��ԑ�NQ�
K1$�,��]UU���/��Z�e�?���k]-|!�
����[����w
W���c��'��0}0~������$'�w��1~39�ʃ�
�A�
~k]��������|H�({�D�z�Ӻ~'M�]�
Vo
����%&�jұ<�xsV�ߏ��#��H
��Ft
�����HM!�)�p/,
�B�@,fLJc��Q�{JDE�y�š|�(����B�	@�H��Z��-�A	�G,~nA�ݬ�A�������=�w�ʭSz�
%k��tH��5�TH���[�?��̏��7p�ېEaș�mSg2��&y�K�y��
�O|�QԒ+���o�{L�#T�q0�,�NJl9�BVk�l�����<�Q(E�E�7���rյ�r-��<F<=:���"�fC��g'�`����`�WRIR�/�����9�!̡ŵ�^2P�񉒉g�$UP[�y�	L+��mR0k���ųQe�5g����j]�l>�@�6�
+c
ѹ(�����煀�b��E������!�X'�;-��zw�(ī7� ��_��D�u��P�c�`x�9��G�CR����=�X��`Z7�@l�5a!���(.����n��Xr��p2�?��1��7��)q�
/Nd�8����@%�8}�[F�1=�T]�{�a�g��@0|�f��=�E�-%�)m�O�D��:�x�
�ˇ��8Fi�QQ}�oq(�'J|E��V�0��ؤ֝��[΃J�X�܂p�����ߣ��e��ŝ�;�(�X{g��C
+���B�ѿ���Y�ױ�H	xw��
Y��ɾ��6E|����'xB��)�@
+��B�`�Yr�Cj_�*?��G����p�z/������
��>:	.?�&D"�./g���d�s�^竻��(���@m��
D�â���]3û�V0֪�03��>cv���F�S�����D_|��'����€�,��7Q5�
+��H��S}e��Z�2 ��^�k����_�o������5
�J3%�u���f.�𜹥�#ͅ��'����C͂w(1���
�
+ at 3���r�`��G�mT:¿�<�J޵{7�F��^SJ���_;��H%o�k�|�T�k|-G:~I������\K3�5��Lk���d�F*u/�Ն,
+C�d_D?J�1w sΒ��\���"Y�u��~��H�QSF��J)B��H�ѥ���g�6�P���n�#|5'5��d���T
+�+tZ��M������[��^�s�/~�E�rÓ��>��2!����d��Z�ryBo:W�6)�Tr��a�)�	�%��I/���D~$*ەT�����\�n��};
shqm��4��i�B1�̖�
+j�<�4�)LJ=Z��\�N �
*�
�.x\rk����~|���
�B��U�
���Q
+Ny
���`b�I]^����TXp���w����<�A��
+�v!@.ǎ�|g���aZ o*��P�`�
JP��<�
+ at 3����Xv�_�
P-�3�A���v at p\;�
��f惡epSȀ�}�op�H�[IPe�0ܢ
�
+?�[`�k���Mrz��d�W'���L*x���
�T���ݺ��޿{�� >
+�|�u�n�0<.
�ϒ�%S������?�W
Jp�r�O�3vۭ.�N�'
)��x�^|����m��������:��>#���w#���ૹ����ńO�T���M�u����
C�m��cʁ b�_
Z!O�F���i�"J%�9
&�Q�a�Jp	��\
�Nz!�
'�#Q�̮����b_z�u��Vo۷�@0��V{�JCh�6(�lI�����H�V��i��Zs1:03��v\���x�#�w{�^b�,
+C�d_����ɱ���"�1J�)O�0�L�1��
R�y�
+�(5��
44� �%g�@P��*?��������@�^��e+�%��{S
 {q	C/n�|�zs�����4�SR��Y�ĺ^9J(R�u���Kj.k���fkk��fkk���-��4��FxfO�q�u�Rh�t���#3�;�RD[�x�
�
+�Bn,��Ղ����}��Fy�(�s/�&Q�'	#�œ�8���1�K�&��0����A���qc��V_^QՂF�,#<OUi7܁-A�L�.p� 2��w�~}�B��Xr��"U���q!*�D��nN�d�Jv>��b���T��@�V�ߋ{?��\	0=
nOi&���7p�qo��c
+��W�z�,G�	Uآ:]R[��^�2
�];��E�HI`�"��^�Alj��lq���J�*�}�,��[�o� �O����K
�4>�1�̖�
+j�<�4�i���M
+f��� �Tp�����%�]M1��?xd�tFO'6�3S��U|�̾
+"֒
��nSb��]p�o܏�
�ސ"���K樄�#
Ͽ�f�rkL^%\/~"R�Q��
+#�ų�8���A�ӥ���^ [���E�|
1��|��i��I�NQ~
�Ҳ�?�c-|y��#�Th��H�"���×��\ޠHci�E0c��R�y
�f��!X�������$j̸C)4'x���#���{qF�rϋB[�]�	0���C+�2f���E"5�%z


|%��)a���8ܖ0��N����6G���
}�T�����Ms$mh�5GZ
�5GR�ds��pLs
�����X���럣/�ʅucFr�
�T��콺�޿{�� >
+�|��b=�����€�,�	Q25�
+��H��S}���)��8c����R{ґ¸
���ŧ��
ߦ�*�W��zlsȢ0�L�E����s�"���f�R����L�1!�τ�
����
���f�<�|��8�.jIvB��4
��ip���z�%
+f[Ck�H�lCU�E����5�
�ږ�sFf5<
5
fܹ��P_=�3����}I{g���1���lhk�ה��
�\�5Z��˧7m
�_��J
���C��
Q����+2�i\96s�¾�B
+��D��u˻�+r�����s���.���u
�kh]C�����hp�iE��7��� �>Ċ'&A��}T [�.L��S
+'��
+�N���ex7�S�����F���\�$79��͟5#eeR�����
+\
pً1[���Ǐ���;?��?����Vϭ`���Ј�1�3@�7<��eꥉ��*�
�w_J�.��D�o�8
M�u+p�g3Ze \�� ҫf�Ĩ �O�86���kAo�
�^�vj�F��A��_\Xz�KF��[ᩤ{�@�ͬ��T��
J�����hɇν���k�k�ݥ�,7D�閈���B��HKF�8�!�L؂�
�f
�r��?�?�n`m�PCĽ�9�թ���	��G��U��J�N�
���F'G��&m���
/
�Qסp*7��t�E �Tq9[M���?v�6�a��w�YeK�7?g{X4zSПvj\;qĩ�l�XQ��jʆb�\8�>�Z2M�
+IL�X*�&(���nb8Ŵ.[���"�����ό���2)F��\
���1[���Ǐ���;o�_��K������E��l�Am�@$��B`�� a�y����O��5&�S
+�'�Q��C�RO6���9��8b�M+��GX��4�t��q�lU�0)�O)
����d{F��4>��Dյ�V�� 5wV�
endstream
endobj
23 0 obj
3657 
endobj
24 0 obj
<< /Filter [ /FlateDecode ] /Length 25 0 R >> 
stream
+H��W�n�H}7��K�
0f��d7�<�26��ă�'��bPd��
�����~�V_tCYJ���0lȥf�NթSյ��~�"�G�O�0�?9?
�;.���y��?�������US���	�{׫ˬ�YtQ�#�b�׷q�����cQw����D2���>q�%u&��\
S��vxoe��q�YdU��Y��;w,�����:����C*y��u'��c�I��p�q��K�wLz�D�\�&PK�/c+��%0�V>��*X�q/c��N�WY��B��i��-���/c�S1�*�mּ��;qȊU�e���M���|<��CV�1/�Z���Z��,Xfaw7�6l�@��ؔ�52�g�W!�ei�&�3��D�
fȳ�a��d�I�+B�vB9��u��
lB%�_��Y^��"��w���'��h�N���f{p
@:���8���Źzn�R��O�Z,m6qSUY\���SE��\��x�%6�eݖ��m��^�nsh�mP�	TU�g�6������-F�����`P�N:����l���
R�K�Zw��Aķxf�
�ݗ��?]s9I�o'va��B��s!:I����a�'"VI�
n
��s�!�P�]G
+��~
'}p�I��$��#ת2�
�E�b4UVwf���o�^�P�=G�,�c^�u+�f�ZI�,Xfao!��0N�ݩu-�n�og�`�T���fX�'R�� �:.j��:�M�\BhktkF<�!�E6a��{R��l���N@�
lB4
��q�fЇicSFvX
R�e6���`!��ׅ�
�	�%���zo1�e\&���P��[Xl�����ڬhV![|Un���o]wf�����g�
����ޘ'M
����w\�lb��6��ͽ�m�2Zv�XՁm���
4)�/�cQ�M!�Df5�6����F��-�#�b4U;*+v�ni�T_��g��M���|<�m��B_�#Ƽ��
$���ςe�KUM��2
�Ħ��yV�g��w� ����j��&q�����b܂, ���dբ*�]�жjZ���xW0x{Vo
��~�
y����A�:m��_g��z��l�
�v�Ѯ���l�
�6��/o�j.�{���Dz
*^��MY��8c�Ha�����ظalV���ժ^5e��y��\V���2N�8�,����w���L퉦L����v�I6���~\����@���\�j)�elE3��n��t�3V��/���N�WY��B��i��-����|*rQ~�����K��[(�K�피
4�¨�8�
+O���`6�8��u���O�=Z&.⦪���w�u�E�G���ګ��3~���O'8�&D��?��.��w������l;�.���ں(�\
Yu�H�\(���U
+ �b�
�E�՝+�ݭo��C�˲Ȯ�˶M��:>+Ȟk�B�
K�yעs�l��`�����i[[�;�B[�Y%
�Z��k�N��B�k������j������8o��w�Y��`F
���3�
Xd�_d<U'$� � ͇�h�K�]���:���A�U�v���+���k1{��n�|^�
s��VA��=�����Y��96�eG��DS&�6Pm��h���PiD 
�a��J��H�yע���N�g�2
��z�7O��^-��)��o���M`CIS>�s������&1�99��M�xXU���q�
+�.K�a'
��D�
fȳ�aw�نf���vB9����B�7elר���L�,�y�G����F���'��h�N���^{p
@:��8�
���/E��rq��W�@��~�o��xGG�~�o�b��Ã���e�a�9$�r�\���O��9����C���Ki�?X�\�҂���A����'��
�����?�I�����XEn �	��
��hbF(
+�
Fn��h�����.�F��\�X?�)u�<uY���m@�Y���6bc�s
�a�4Pv⒐b8
!�F$�D���*�9���5e44���"?bҎ]�=����~i[�"�5dSц.�i���r��2D�ˣ4tᏄy.a���ԍ<f`E,2療�B���x�i�K<c�D?����9����

S�fpβ�A��B�-�P��žB �(
M �O�� ��1zXWV��y at Q@�= &
+�#u���&/>C� �jw�F *�`�:��@�ƠD�w��C��N�"�u�|H���Ψ�%�>�
�O�`�8�</K*)� 6
�ph�=� �3��+
��T�Hqh�@1�g
eDq2zlB�0D�\}n�a(�GM- }�
`$!3F�1�0�MC�y��͈���C`(��
*#�)�R)�!���j���FT�C� �W�>��>�Gq#�O=nhhԢ�m at h�S���8`��&4����Dw
+p�7�nZm�#��
��\ 
���j*��H	�&��(a�ӃC�"
'�K��,��(���K�G���E>��V%��@��UɃ>�&�F�>
�!���� �)IRd�d��Y�� �%#d
�rF����WL�@���ԆUw��sq0A��@���hA��
g�-=0?�x��	�y[@BϰN��Q;�;k�h�@)�e &�z,AO���y�3#K7t�c�8D:
D�&�z6P��y�"�K�)"��B�)C���
+�����9 Œ�0����
)�4~H�t���ƒCEZ�\��:
+��G�am�22 �#�#���hL��(��J�����l:
 ~8���� vO���m��#S2$S�_E���q8��@ݙ�
 Y��
�J��6$�h���c��Z뼎0|o��n$�:�:%W��@ڄ;��R����*�d�L��;��}{�n��,��^�9��L�S}��
'ܦ��G����y�p
�&��Nk�؀�l@�
�̥m;m�H�9
I9x�|o��X�aH�"�9�
��]2q*>��D<�
m�:��|
o�e'�i�墕��F�C�LDk�<m�R��r�t�flv�
D��{�H�̐��4nجw����N�l=h�r�q�(ބr���;QSc���h]�)�nkL	U7vJ�I՞�!X��ь1� 
��1�
+ʋ(
�)k"B���@���H:&DKH�%m�zҔ��6E���Ŏ����
�T���-�;1�
p
s
b�pL�P�4�@�eLP���Bћ
p��b
+<״H��U���ևC�(�C2�P���[���j�^2��T��y\��h�
e
�nAp%jt��
	e+�����5Qy��W?��Fp���v^2����d)g��D���J&-����f&S(��4&ۦR�m[�~����}�v@
���`$
cw����(J��8:m^ыu�P�_��I�s��)�r+��˕o���U��Ґ���%�XL�ѥ�v!�\^�!�;�}R�>բ8RC%��(L(��g*gR�.��9��cl�d����q^���$j(v`;�4�;R����4����]�ቤ�S�v����
�.��E=��F�v
]E(6��3@�Q��&֝��|��d�ˊ
�?��&�ʪT��h�<d����
���t݀c�ʚ
+��wS,}V$�R
zÎ�j���4�֛�W-E��
�����F(�f�@�k��WI�� ���1�T�}ݠ�	5�g�j��S(&IS	6ox�Il��xδ��@�F�Y1$�'�@Z��!��gg�/�w�w�������
_�|�W�������������l��t�����.����ۼ���x�NJͱ���@�q,L[o>��Q�9��)��4�I2�4���5����x���h=�hj�0��J�`�MޙbM�-ꖧZVU
����P|��s����"�o�sX�M��b�][r��#��U+�B�|B
����"�<�`��=��ϝ���I-o�3���o
:K���8�+��fF
+ݦ��LA�8\��B��b�
+�,A�L&��%�u��Sb��U?ΰ!0��9,^"|�y
)D��kV�4B��D/g�:������%��a$#���o@#j&
f6G�u��D6���J
��cf,^�]~��3)I{ec6��Ǵ/�1�=LzŌC3ʊ��
D�=�A`XGY�\����î:L��a4O$9��)�3�1�
�7s�>'b��6�"cF��A�%�mLu�KN�ۤ��9Y��c�(���g�
?��8 �<��$�����c�
�� ���/�
š��%ww3��b
E�v�
�����:��aґ-H�����<�����_GO>
����UFp� �
H�/�fY3�)��Ҥ���#�Z�Y�H4G��<�QygF����dž
��fn�Ű+��3�
�)Yrw���z�Ƽ'�
���7<7v�gT�YH��0�d�ݬ��5�l�Mڋq�J� ���
sBUu �5�>�N�J~���!5��sߡUڲ��N�;����;P�L��$�d�z��c/�{�%�n������o��S�j6�Esжٜy$���f���XC�-�6c�41Hm�˩׺���v7
�,��
��t���rIe]�.|ȕת��9���(�
$�V�OR�v��Q�<`v�¡�

٠�>��nM�}���W��T
���~^��q�i��ƨ~�P�� �#���qVh���ڎ�����(�ڭ���ʧ�ՈQv��Ǎ�^^�bHa���
-�q/F�
��g��*��n
�kI��Q\�>�"{W�/�)�
u����
�ʚ�UI����ki���h�`-����������f����n�My���]����z����Q�M{`�
��L������ܞ�L�M�[��
�'�B��2*�h1r�v��s��1���v
,��P��^u]���v��ݣn��Y�����S�o��Q�$S\��@�T2Sl��f�̂�bc��Osqc��p�c#ǕFѨ=�}4�̞C�^�E���&ڡJ�ᨵ�ս�mS0q�LoI_���i1�՘7�k.@��!�{}�D7u z�D)h8
j�@;�����OބA�L���Q+3�$���9�EV:s��˲ �JCm
#�LR��A
�ˤ��4�:[��0��M���X��
�?�1�`e
f� �
�(���TC�L���NnlQCV�'�
x����LH{p��;��Kn�8
_<;�xq�{��������p����g��8]��z���}������v�n^�=\����;^�#��9��4�% J�3r�M�[�B`(��ӯyM 4�%T+u�\�E�mh5Y�š
���W������;���0'���إ���etߡ�
�6
Z�� �dOc��Gj�T󰔢����]�Բ��
}����Wm����Z���q�B��d�‪�
+�����KR�W�"�po���n�:4ٹB�'�A$�w��Jlߚ<=����~���/�o_}�ys�[��������N�?�y���󌿽������/�����EX�.����g<�!��EФ��T�B�<�?�����X��B˯˿���Gl���΍d:tT��߷q
�9�(�"����ם}r� ��l����l5��\m��D�|�D�L����m����m�)��jj�or���ˏW��n�������/,)N���5�}�x��~���~�|ؽ����������<�(
�y�l��k&��1��<�˟̗[�U��ߑ�?�$��q�/�� ���V,_�(BƆȀ5
���gUWUw��c��!� `fM�����Z��
R��g�&[E*�
����������(��a�D�c�X�A�.�l��p���2�c���j�v���
+|���/���������9Ϩ�f�P�g
+�������_���=_����
����C/��^��ϋ.o\���f���K�z��5o^1o�6����
+e�L��
+���
r�9ܗ$|Ѫ���*ηC��b�[�����F���N����Q���P�
T[���5+צV�# �)a/�4v�d�
�
�2���3�Y$rĸ��Ɏ�:M��)
O���KEA
+ uX൸;�8AG
	kDMA�N
 J�wFŜu�g& ҚF�k���
+wؼ�txƎ�	'�T��`L8lj��Wo���Str���l�9!����.U�@C�;#k��Qs�@E�ԫ?ٰ*J{�T[Ls��ҵ/�A�
�Ew���׈9�p�!
���:����͙N�ewm��1_�F�k9�6�
�+"�1������oa��9ש�A�l�g؂����a���H�.^[3a�
-UB�U�rMh�
�S�m��s��_hE���iQ��
�
�ʦ02��M�>�h�v0�m���*c�!eE��R	�oO��Dʙ��kK&�q��t�ܐ�0�V�4���H�z������:��1��8�6/��y�m���j����Σ(�-��4��2��=O��@)���).�#W�x��D="���a�ZNc|��/��ͫp�P{\HE��sIY���F�Ax>�S��h���)lk;�wGMڢQS�S�8@���
[`
Z�ou�0�I�ӵk��L�#�Z��^���**��K� 
�q�T|_`EǤ���lU�=�ӄ˾i6�
�}-��=�Q��)L���r�a	V��dR��[��ڵ1�HA������8+r
l�Yn[.]
+�C�e;u ȩv���0\��쪆�T���ǚ��
���2��.Qs�S���
K��/a�a�-'l����G�V\�@
�;��Փ�[�0
Lώ�-4�𪎠j\sN�{=������6�V�������F���ǧ E�̘��
��Oqq�\7��'�@��ڒ�*f��*����xl��F��
�I_\UG#�>,�Rm�HC�Lc�UQ�
����t��{X#Ja��.5�3��Xb�r���;����L�#�+N���1
�a�:Q6xs=�[�\8��1-��{��JbE��s#�=-5q�
�Ț�ؐ^�Ո��Ļ�o���D-�̫
��']N�.^3Q����.����\
����v��A�n�8��Z�=�V�fV;��$uɧdD��Ք�w��<��F�!�� 5*+��-�).�-�-^;3a�ǽ0p��]R;���
�����&q��/�D
��E<k;��]
M�v橳&#N�h�q_��4���F�
���]I�rX
��-�)N���]��f�
9(�\�]p��N���
�|­\�G��;ߜ�h]�:�.�6Y�\_�����/
s���
+g4y�
�D���ԖM̂
H��S[P�V�ݘ�ǭ+R�M���z['s�|����Mu2�o�d�x��H��a�R�����:�qRuH}_
��W��F�
��!:(P+:ٰ�
�]�r��D;�k�L�!�'Y� U�������6�z>�6�
�
+��1-����iøʣ�wM�U
�^m�ue����w�+V�%j
+���*��4,���9Lq��e_k6��
)(\���r]
�2C���Q#g+�ㆾ؊
+
+����J�~�j��X��D�p
��c�����S���qND2FM�r��г"����).�#W���u�=�X�x�CP_��x5�x����9V��
5�XX�[Bs���7�4�C��y�tE�;e_
ןC�{�%js�P����a	X�1o9Lq���b��b��嫃Xmv
�b�z�
,`�9�~���dT�7g:@�b&�B`�#�i(Q�jB7cfI�R<�F^�b.Q��Xu�LYn�F-��X��ܖ�����G�?]�0��?�d'�p޵�e�I*�P_
EG�)���Շ�c�*O��F�q��dR���p4��K�
�US
vV/��%:8~e�a��R��͖W�#�������nn��~q�����7�O��w�ك�������y���Ӄ/_=������o_~����'O
�~7����|���k]u��w�����W_������F���������S�K/q�̗������ӿ_�{p���7�'z�i����X����爑v�ǘ9�P����U��Ě/��~Hq����]_��K��ߺ��뎏�p\�ܣ��?JY���س�#���x�;�m����&�� ��z�s���-
+-�Ti���"��qb��m�}|�u�����P�T��v�Cb��e
{�(�2���֊
l��o��6
�h�\��B���X����6�+�9t8.?r��$:��*
wo<
J���PC��R��v|	̬�� ���
M�e�Ps�=�z��7_��}N���Ώu2��ؽ�(�3~.tx��:���sehF!��k�
6u.� �Jś�\��x��lZ>���#~�f�DA���\�"*n�&�q^̍�q�F� �T�x �k�i2D/w����]������O�{���/�|��w�c�
]���J
߼���ӟ�T=
w��y��Ž�.菹�^o߸���Ew�
����O�����t�����/���H{���("�e��9E1�=���d܊4��sy>\�e�����iw<���y6�h�N'��D8�
���
X�K?D�zg"��cu�	�^
G
�
��^����
S�k�ί� �>t�r>$f�y��&R�]D:�/&���{'��»��N��Fܶ��v^�R��y�T��@��|{uu�ω'�J%k�a��Zm=��{����"$/a���3�q�� �"
�h�(�� ��Y{�M �if�7]}��ռL����C"�j'8��U�r�n�^|nJ*	Gh{5e��U#��N�Xܓ�����}�Fƺ��pox
?��B��x�/�O)�f����q�Ov,��3�N2{d�>�I� [...]
�U��_ׁ|��ArB�P�O���Ѿ|^=Zo6F�j�
���Q�4r6N���!5��<��)
U��7UQm^��F�hn0
�e#GeL�B�̯�6Hm��J�Z}dʝ�Y�<�����&��a��z6{
�F�0ÌI,�[+
��O��sA���a��7׾}�Y����+��c5�
��5Qr��iqjw��**�Ke�:�ʩ焣WJ+��:͂Vވ�w�G��
څc�G��b�ǐ�T��-'d�ڃaN(bM���-�w�[��M�@&�ܶ/o�>�v0/M!4U
,�YX��f{J9z����P��,�Y��k�,��m�q]yX%2��Pܲ��e�t W&g?�E�?b�(
\z
+�Q���e�Q�:^��l0�K�]
//��?!_d�����>\�՟�F&������m��b�z�8�,�>u=Ź�j���p�
��^<�>���"���IRI=�y����q�3Ec��Bt�P#~��B�A���.ne��F|���>r|�
�����a�}� ��t_ء#�e�_�nP)ЀYc�$
.Hl0`uW�e#�XT3�'zy�r�U�����S���jJ�4�	J�.�0���&�
o>?�(N(��NPW��du���x�E�_�.�w�_�蘴�#���s_w �(��
�2M%!L���z��C�jnFo�(�<���41���lk�(h���[B�T���dר�G�"�9�k�ǻ	_��:��0�
�b����}��"���
��di��%h,�uDr�p	^iI���s�Gb�a3��a˜la������ϡͅ���7��r%�{���H)��{����vٓ��3�
o�G�]k�x�4P��2ד��t�aK�l���j�茾yI�qqz���.���Q���y�:��@��	���У���P�G܁�zg\k,LO���;��1�
��jHiw�3i��G����T���ñ�>I$�QJ&�6/V��Z	[_���2��D��_ܹ�
� 0}t����Ķ���8oP�ȝ��mAݛ��1oxù�M� g�b�UK:AT�Df�E�aG�J�&�5�V[Nw�b�)7\������I�8��A$����`�B���\�nQ�2k[��Ǵ�Aˆ����tDÙY�ú����&��R�G�����9����ُ����})��^cʴ�
3�)Zh�0V�-�-dY�[�Xd�<�Wd�h�Lw������i���	�τg�Y8���S�%^d
ڪ��R�mR)��7�΀��E5�$
.i9�
1Ѱ
�w1<r�M���Bۄ�yw+ࡰv�	 r�B��(�j�c�#���^3
m�M�9����.�3'�
���~���g���=��M�)S��Ú��KPՔ�Ri[Fږ�(\Nz>��s�B8;�{��'��A%ZmT��1�u7�EK�����!I������|���d�J��z����Ɠ���H��r��X/`�˅�4��q��� �
�&����~|����?|��ϟ}�Z�����O���o
��Ͽ��?~�З��׷��� [...]
+��Z���
+Iţt-���p5f
+'C��;f���ȣ�I�'�ۈ�������~�5
o�k�`���b�x+j����(fm��T�@���A��`-r����ٞ�P��Q
mS�!+��G�
��	�u�@����y��̡p=kA(��5���1�����d�0�!�^�}�	���{/�q���Ҫ��0�f[!�}�xC	a������28�5mBG���
^�LI)���L��W
��Yr
�x��?��
����Ӓ Ht	�(�cL7�lun@�q�$!�P;�p�Q��j���Jx��C��8�( ���j���B�l�锤�՜F�΃$�"YȀ��l�u��9;ť����f,U��(Ó8p�]�nc�ALY���tzۛ��Z�
���,���#����,���v�u0�n�r���I��Lv��;�C1�M����z
 �0�Y�L`�z���.�m��5�eSz�P�F��$�&³���N[�&��5����I �O�E�w3X%!,�����ʬ�
�kMFbQٷ*A�v!�\�@Nl��5��Tc�AJ4����< [...]
���ݶ�t��:*R0��2�X��'��|�0�s+7�i#j{�ѽ���
��lms�M
[�A��U����j�^��Zس96 �ͭ�L��B�k<)�|��
+
+m0�N[��\�쥭
v5��:��/�%/�5yrr�,�v��^�0�]~�
�;P��� �J���–�Q{>��ݾ�C�������K^�
�yVC� Xfe
����ZY�u�-U�T�v�,���Y�
�Q�O�?^`˻��M�aL�tV���b�
R�aQ��歶fc��l��d
+ɫXG�.����s�0ڀ�Lƫ�Fnk
���}�}�;&�e>k��dh�
e0O�����"8��i�(�l�H�Ɯc
V�Ȃ4�`k�-ȱ��K:�ː-غΫ�
�� tqz�v”J>�?�UҲg�B��w"��}ѓ�E�z�&!F
h��K���]�3/��l�����KuU��E[���\K�#f��fY��ٹI5�"�0n΍Iݲ�}C�<����e(���@2B�]�� ;bF��J۝�1jE�C��
ٓ��)4ov���
 �ۓ�
�{�ڿo9�~܍/@T�jx(��}/��s�
+9�]��� ��5�u�&<�:��Jo�Q��:]34ѸIa-�
+�D�c�jɍ�gS�t�Ϫ��ƈ�:$�o�ȜT0�v=�gor�� iK��$��g1e��^�ğj�3�YS+c��*^��5i��́�఻l�ﺄ��m�)�2\Bøs#���}���sP��@�k�
+kp��VV��@0��7���2Z$`@8�
��Z�+|�
�y=8�~�:>�;�� �1�0i��������.��6�����S��/d����:���J���f�%)R���
��թ��.�U�˷�ٜ��`�jc}\�sc�
R�����h��5#^jF���C
�}�~�m��0֪G,Q��`�O#���s
�3�H�2��ԭ�2��rG�C����
6a����#�����z{av/�9nk�C�Ɯ,�U�f�\0��Z���R3��3c[��k/X~��>�v�o�Wp;u>�Pu<���FQn�n
+8N)}�l^E�a"%���� ���Œ���+�
ma/����v���h
���y�,��9�
f���g� k��x����q<;���E���i�1�T]/�
+�9P��7y� i�I��hP���l ��Ž�5�pGTuP�w�
k����.���mB�>�>6KhJ3R�Kd��q�Y�C�C��p��
��9M��i�X�p۾� ��U�~�8���R
���c��93�
Z&sݛ1q���	�)��a!�0��¸�sm7��e��^0� T��R�;n�p�.@n[FS �ezv�#Yq��4���U\F��9
63�ģA�W u
��t�l���=�s=!@A6΢�#�
+��N�Ϝqf��D�=�.
U10��b��X��e��&�Vl0�4��$�\�� ��W�W��o79��M��U����,^~4/�4�A��ex��`��˨^^6��	
)u��}�Rt�7�\ �n]�2!B��[U��u_c�n��:��Vr	� Wճ�-��
y�ySa1�
�%��o���Q&

6N'gג �E��,nI�r���� �F&׊=w�� F��b��z#H�#� ���SIV.��%h12��d�{ �is��-���
o#5�G h{ a�{��%���I
��t��BmA|�{�12就��O�e�W'YDr���Z����!:��gP����f>)׌'×����Fb�@�Q�=Vx 
�{o173�t�x�{n�x��X���3�{�-^x��ՙr�\,���m�Q����W��n6j�a��'����Ê�	5#�����!�z�c\s;
|B͘zg
&=�{!����3��T���m��_V6{Gay�3c�C��~�c&�O1���`��:楫�pP��*��8�T˴r�6J;[tM]��
�"�c?H����}�0����VW�hp������~�B���?]����Gs��
#�<����|B�s������e,=�
���s�����te�>t�5�ܙd���L��
-�֒:;�����0r_���}���1�=�&�Jɪ
���>��ŗ������7�}������>�����|�����޼���������W�~���/���-~���������:�����d�?�j�� [...]
+�
Z
\��

+��ɍ"7h�w|�b#�iNKk�mX&�>kJ� ,J�C��� V��W�6��O��m����H����>�*���)�~���	
l����]w��[�
�R����@����S�>�v�0M�5L��ߥ�8��< ��1[q4Q�Ĉ��I�
=3�؁u�p�<��4�9%�Z���������
=k��邯<x&ye��� %u-��#}R]���q��`�e�`����J�A2˽�7"z��XJc���J4BKdrp,(���<��r��47f|V!h��)�
�,��
 ۓd�HKl
�߷�m\zՃ�#h�h���X,�d�y``���-������
�x��z��7���Y����|��hw�)�� R�K=͙u���:e
б��ؒ�&u���#	����q0Z��i\Nɖ�E���dFl�������b�D�/��0
����\��
@)�u��#l���3��!gw���q�,�w^PTذ������ʳ9�
*�m�c>�^/G� �`�2`E�-�$n�Q�ܻ>_���F��\.��Mٚ�D��X.*c`�
-


�,y��K�f�
�l���P�~V��k7elٻ� ��
endstream
endobj
25 0 obj
13887 
endobj
26 0 obj
<< /Filter [ /FlateDecode ] /Length 27 0 R >> 
stream
+H�TWK�e9
+��T{x�+6���DM[)��л����TN^����O�g�%?����_��������G����1��Ƀ	m��R`����%<�|��e�5�s'8>���Z�s�[H[�c^�,8S��$���
�����~
+�@ɿ
+4K���e��W�ͺM��
0�+0>N����p��7�v�5�>sj�=sk���у��*G@�}�
'�cLf?a��g���ZEސ�_m at O�:+6ώ���
ol��|�z=�C�|��=���4��d���0E���9�9�)���"h^q�I�6 s����e2Z��Qacɮ

i>� �ò�qyj�
Q1ܨ�ׅt��@�$ljV�A����'���,�«�HP��,#��5�Aݑ��,߳��~;�ux�m
��^
S�`��ςt�>���
N�+P���^���Ap�/
�$x�D
+kKQ�4C�-|�^�v:xʼn~�~@i�4��Qy�L$]�{v�*�k�q4Y��p�1���x��[�*;�>�=^gڮ���0�C�{
�r���~�/C�jt�ؼL�<
�t����]	��.?���
�e�8Oz���#>������p��T�'`�wC�=�����/�����CIOǘ��yEu�+���,g3ʈ��,C��=����5-{�Eȑ���l�� �B�y��ӭX�D|y�"dTС�C*$�f���*U�d��Omq�"�]ƒM�@�k�ל��ˁw~�j�C8�6= h�8����C0�V�N���jy�SWf����1�S $d0�l>}�2�Z�K�ΡWN����}�}v� �bX�����:�f�_���qOp�9��ޝ����
,<! ��t�5�/�����0G^<@5~�rj

�.��ų]Z��瞹��-[���Y��v��r{@�7�4
�=�
Cx��O�^�-�%����{�z+�L�P�^S0��V�%#�/(�{m৛NƕI�
Gw���,gn�1��3� $)z���E���R%D����
��q�KU�w��
�����ɑ�-�5c���(pN��x\�kaoe�C
��،����D!ؗ1����^W��c�f_V�ꗅG�>�;�-���Q��>��~lr��\IRc<Q
V$)���͂f�/��Ť+ʦ�	�h5���
�v��
`)�ˑ:K�
���:�TD=
+ؚ���:jf�V80���2����U%�n
�Ǘ��r?]H��@�$���1NK#��N�\Y�	B��P
70
%w)@^
�=m�?n�������
+�Np����ƽV���&��
������\����d0�'A[�S���0��@b���sU&1�T�-p-�,����]�f��T*�~$Nb�kuÚ��N��P2+a>�l�X��l_Ց�h7��H�^�Z;Qc��V�x��HU#$���+�����fu�f�]L��j�����f�(�]�*
+���
�%�B_tܝ+;%m�T��7�}f�����k���lI�\����}�t
+����1����Y1ǰ�m3⩱��
����1GE-@�;�qx�X�;f�>a �Q-�9G�>�3�Κb�k��8}vW���0T��Y�_�,W�k at o0J0��ں=�
otK\"G�:��B=��Z���2������ư���X�f�,xg9kU���k�d��T4�; ���G�	����=5Z,L�ؗZAӝ�m
oeU�u��@ޅ0۷d��AN��s�%��$'���-ZsLU�/u�p�m(���
y�6�٭
��D�s���R_&�8�ѯ� o�Gp����9�2�Vb8����X�
tk
�Z���@��ݠ^��
��wɹߟ���3,w֟��ҭu�%�lz��:$|dz����W�Au/BƾHmK�ĵW����['+�'[ė�k K�V;�j<���J�\�jwAY'a?f�L��1A*��evV��Rf��o
ϺF_���y��'�&Z&���	P͟ 9�_�}o��U�}�6����q����mWn$hR�C���W��E�U�+�gZ�# [...]
+P�� ,.GXMr���E)4�O�>�Cr%=9a7�!�Y�$

|���� �*|��J �̰�-~_�9+ۜ58K����F�)�8�
��s���?�*j`��������_����:��P(���!���r�`�r�)c5(�p�n{oL�ji�H�;`
\┖W޾X�9i�ߛ���#�����|jP����d/���VFb1&�Z��nŠŒУ
+B	�ݟk����B�kaL �j��ꖌʮ��ت���x>�����k8S`���*jJ���
�]�>��g3�<g,.ew���(������:	�V��-�r��گ6�tr1U�hN����r9RTEf�������U�6�����n�Y�3�(7	4/���
aj���|��?.����Ћg���\WM��'
�G�
�����u_b�Q��r��>U�
oF�L�y������*�/��
+P���`�Eq�̥ŭ->/P�Ċ�U���Y�-H�S���
/�<�}
˃y��{�� \�`�E[(��nb��d�t����;��_R� �m�J�|�]�
Qi�����iN�(R����;7+�b��
�����oM?�^u��{�Ŭ�,�=�Ǻa
x
+3�b�
+2"쫯g|j at Hk�,P��0
�kxv/;��[H�{[0k��
�,Cm�~�Z�=�|Qs��^#��=
t-6mh��-v��!��z�>P����?.��1
w��)��=2�^cc=� �x^�{`:hr�NR��ވr&�d�Ȟ��V�A�"��{�V5��TD��*�
+��)�=>��Nr+����N�W֏&�cظT-U
+������,)?�Vr
+�P��;L{BZ�LJ��E�|v�^�O�;�������*���d�{X^b<�
�o�;��t�]���Gj!-���tM�~=��}��s�ӞPkyq��G�����.�
�!:���r��DY0I�<A��L*�$;�fc�1#� '����+t�[@^���BD����$�
w�ś�q�*N$i�6Rǻ�
+>O���[�y
�A�G�0��m _ڐ��v��:�J
#�n�]�#�7Cjs�_��R?9���n�QH�yv
3A�lZ�GK����n\u��b���8\G�W�^�M�b�6��E�x�æ�h�ڵ#3�,�e�C�}�o��VT8;�DSP��P����9���-~�����
���rh�;
���FVXa�8����|KU��� �i��11�	2��|V��Vf�㷺3��͎�
Ck�u��?b�j��
oջ�s4�jY2�
�Q�H,�W��c�垽��YW��=�M;���p̬����9k#o��{�)�,�o�ֵ����P�U~j��
+�b[�
��s���
��G�v�&��
�� fZ�E��t�Ǿ��^�F��Z
gZ>�r
|����WR�����ʱ��p�6t�^��
+OV��m�]؏�kR�a���0[��PWI�߷�@]]���>�:CQ��Ԓ���e�2��Q�F�^#1�xڡ��
�{�
�ܺ���ޚ�>:�����P-��߹�!�x�#�D�V?�W�}�塗��U��jk�y.���u�A�(+e"mם�|4��+=|�-��������
+�s0��\l�3V%)�Uf
+��!�
+3E��-�}��'p��	��r��8i��te�>�
+����L��8����J<�͗���d�Ua�z[o
�_#�ĺ� �#/�z,�S�s�;ИR�CPTOޙ+v�l
+��F����2�
xd�G߱+���
�dz���[��+��uM���{�r,�+��{�\j=�+.�<P� ���z��]k���ͮ��S��.J(h��_� 
�'+�o�
+VGZ���Blg��MXU�Ň)�n^���S�\��ej��; K_��=��]��Fl-֋>:,<����if����*li[(񠩱6���#C�
+��"����G
P��-tKy��`����Q*24
s>*�錞�
����o��]�<�)ęXz
����אZ��(���f�;Amfcj}'h�(��L�
K�
��FW/w��}�+t+@�AI�QR�
�	-�
+��Ң{g��x�A��܆��{x�����-�<�F�Sxa6� �1� ԰HܵE_y1���V��	�itk�;�E��r�$�p�PLsn��0��#[�3NF	^	�Rm)��&w��"�I�ś FKp���{�U�&�VR	']B�k�X���7�k�����^5� E)�T���Y�13g
a����5=(��#�c��0j��hUJdZ�^�u��Hd��ǃ
<��Z�-��"��OEi��_�^���g>�H>��r�0�����-�<�����
�0���N8c<��iEc��O)/���� �|��:S�����ЧR�쑶a��9�?゚�+,�y���̪hh�z@��u��
5`-�m?�H�a�u(���_�8}
��{F�; ����~=�ȡ� 6��6�l
A�!Ehq���HdlK�׸��se�H���N�ol�d	��\y
{��z������-bG/v�ag	�o	��3NE
jYZ�	8F� ߈����q��|�]�=��
�U_	F��^6!�S�.����$��s
C�,�~?�z0A�t=#0���#J�����
����&�
��֗���g��$~+(;�(�
+�YV�p�$6n~���e�@�"�l"�ӓ��o5�ɭL-�x<��d���z�( ��!	�=_�8�J�CP�d����5�����#`�C�\�ɿ�A孌���f͉�L�x9ۻj��h� U�Wʚ��W.g	lC�|�@g�Q�<Ø��a�{9�`UJŧl�������P2�]��2s���9>�`rf�P���.�K2�d�
+�f.0G_M	�Y~V�30ϔ!��.��`��kc	wA-
+��W�?����%�u��<ó��~/��
$���t���U��Q�����_��V�L;�����/6�7
r�qo�&^���}D__�q���Vʷ�"��)xD��Z�p5	�PN�Pf{4}
����k$��4I]f XL#�R�  S
��f���Q�*�\�m��=�g�Մ{��͏ta-$�a'����5:1�I
+S>��I �"��L�����\\M����p����2n�:�ҫ]%�N[в\`�i���S\C���@�0nUe�M����~\*c�-�R��dWA�m'�w���_A
+0�Md�I�z�}�X��Je��U\clIf�ͮ�	l�X�U�T�i��^��ܤ���ͨ�
w���jp&+٧����7)�������D�1.�W ��,�{� *�%
'��{��g,�k�%��c��a��4uu��
�)��
�U�s5W� �u����V��u�8��VD���}����kAg������sg	|s Y����=}}��|Z���=$���׋Ž.ij���-c�N�b�-�'���Z��
+
�
�S	�~
f���k��O�&�۔C'��60������
^���X	�w�
��W�<,�*��K��Wܧ�:�
V_3w�
eP/�F
+Ԭ*wh�E(�=��̀[S�X�f=���d�;s�>�J]�qI��8�S��
�n�u�\yAt�~���S
��>(P����G��'��F������7����G�*.b�w	��P�%����6x��ܮ
x���-��t�sI�΂t#pGu��

�`�aV��Gd�s�
��6O��ڥ�[��h~gp�D�p�g��
�KAO�7�	ZF|��ϗ�+dmY�
�}s�#�U�i=F��y�q���i�������\_H=�a�6�J��Y�{�Vmd��dJ�N-"H�[���
�@cd���TZ-ePt��k���v�[�XK`�4SX��"��V6z��P&��`8���jx�N�Ϙ<y��`�U�d��|5�K��(�}��	ϑ��
rQVt��(�"p���>��`��� �d��h<����YMã���n>��4K������Î��0Lۙέ��1�s�O��G�b`im�
�NZ=����Y���,YL����K��<�bmk/�蛦 [...]
+g�	 /~Y
����W�]�ʓv-s��$8kE��	�Z3�J�Q�~pVf�M���iuB�K�WpE�W]�շ��Xp��-V�����M�B
t�p��O;z�=���͇�.�F-�u� Sc��Y�d�1n�.ln
d�(�]e�٥ݧΦ�kMeL �)*3F})H>Z�򍭮V�5��V7E �t:�-)�1��xp����o`�}�`
l��޲�>\`�<Zo�W,���x�������*���d��CS�{�n�
�{
+�U�Y��lӌ��kF1�+k8�7�i`�aB�"lc�u��
����
+>��G�K��
�6WN@_μ�.�|!�;�>7��f���K�[���\fn��5�X��q9� 2���f��J��AQ��ݷR_�: �Wk��k
��li�^�ZM�g
0�C`�l����
<�{)I
�[+�A���/�>\]��q�B�LX7���'����k���t�\� �i�Eao�A���t���m�r�k=�Ǹ~"<R�{�u1���VG��R%y�^��I����07*P3�Q��b���i��Z)�e��(��V��o
��ؖz[��0�hg���e�p���F 	�h5�����0Z���K3
)��ޔ�	
��Bxs ����:a'y�z}N�\*2�6��Ղ1; \b�2e}ݩ.`?���3-:�kwE`;���.���r���Ӕ9�l閤��7�a�B�}߭���3n�Q^j
���)�d<����I���}\�<c�
c�y8_�]�P�G
_�?�>Qs�J�'@T��| ����(B�%��1�E*/*��n���	%���U��W�~������Ô(t����� wc (��r����rFZ�|��ف�u���M��<u+�w߳t/A�\a���du��oщγȰ��s�	:۹� �ɍ�e׭��Ƃv��	 ��l�
&`z�XL��c<}F{�+h5�rR�C��l
��u��s��C�
ux�> fV*�U��(g������lm
�Tv���s���`����g%C$�U�X� k�m�i�}��X� OK�6u���zh����%�pO
���U�1W�
�q�CBe�G�}?V(�x?��Ꭽ��<��ٞ�~�
�T��[O̹��^.v
k�5f
4�K�
��e"
�+n:��`7-4���9
�iK ׿
>��&��"D
U�\���
+�]@��ҭ`�j����-!d7q�;J�v��Ũ�C�]8#�5��QΈC-�! \!�?�~˦;�=Gۡ(��|@v��KSM1f���] (-��
��z���ufI�?"�r
:'�לF3����T�G92����]<�I
�a�n�>�R��CS�D�Y&-Ǵ�1^o=��@��Z
+9iֱ����$�c]�K"ɚ��K��ױ
�%�.�iy�5 ��?8<y9 at 6(&��U��'n/G�0ۥ��f���"�R�зxX
+^���~�V��Z��ktqJf��Ae�5LC
��S
+�#7�3=ĺ�6 ���
���ֲ�v
p$-�̾û�梗��ˠ�EG���E���\
+�V/N��#ۚ�Ұ�*��ݍ��i2 r�#��XF�g�i���!Z�7��h����R���O�v�-�	Q{w�?�!	��\
�uX῿�Z�?�K�h,��_)�W�1c�*�����J �?�N^������O�� �-%�r�!��v
+9o�?���/�Yo�x��4꩕�`�FKy����&����|�&�

i%�dY�*Y@�Oq�#���+�d��M-�D����u���	z�	�Z��3k���w����u1�?��3>��vZxL����_��t
ËV�!�;˟�0����t�O��������	�����v�
���#DQAj)Bg÷�c{�罥� 299y{�7�"��3��Ssl at q
�+�!/�%�D���l#��1���.�ր��d_���x0
j�
�tE���q
'X�R��Kc0أ�%�^���(��a���+E`�(��\��$��S�C~E�8�xT���90���:*��ZW�E[�rc)����
+�(CH��i�v���<��Ӓ�{�cMk	�<�C&�m�3
����hAC��AC�'7�PrPE�;��p�p��s��ה-�T-��]�^"�[Q>N��8Y��VMM�a�a3�̨�C�0���&Nq��aDŽ�j� � �1�c�oA5B�[�8��2)�k���3��h�8�#��Է&�O_������o?�����/��|�����>��x������o�^���ݏ����/o
������[_����˧w\������@j`���klL�
��
v4 .�%�C!ML�+��5b�K
%/
+������9�lv��CB��ԌBJ>�*�/��t�7�Sq5^(D�C�xKi	)h/�#*H]#
o<"���љ<��|��#�n��Mqo��9<y(_?ky
���"�-�S�
F�d�V���j�jv�.�F�ȡ
�ީw��I(�TV�}g1�Ջ��xG�V�4�M�&�n����#���e�W���jufq�t�W�C
7_I}q-�h4��kMX�^��"7���
p_��W���5��H���Kr��̯S
��� �;��Y�:;0;�cQo���"Q���+�#�M֦IZ&���H�L7�ν^�U� =��`�;{%=�D�?A
䰏Z�ጀ
V��&Ϗ�����73Oh@}��2l��
e#��ˮ��f[���*~1���o� ;�������p��z�f��ֳXc�-�Y�=� �Ѩ��a4c)N8�dq6�t]�@
7��
+zwC�'�A���be�N�0�֮[��#DŽQ�q�ۥ��n
�����Ίu�k"f�U��%L�z�\ʢ���}�є�\e�.5�<���h��iҢw�E#��J$7������u��;ɉg�
)d��WM��
V�5.��3v��?�;�9ޏ��`�1�sR����-S�-0�tC\h����I
+‘
�������f�
�h�;�ߌ,�b����d��uR�+��WVږt�#9ömE.m�vN;4��c���Qk�e�2��c�f�t⮡H����L�J�e4��@����zd�o�
C8�W��lg��a�2i�8r�8��7�J�/����@c�������X�kQ�r":fgyJ��9f͛�{d|ն�q
b�C��y�vQ���m�w��Ϋ-�D����P{��̥���毭�n{�u�+���~šs�,��8����!��5�I��UҷӲ�X&Wb0לG�K(����J�WM�
�5�u��
�h!Q��fS�B�Ei��}y�f�T:��Nw���AW��c�CZK�}�q���J&j�~S����`ݲ�V�3�c������w�nu�̫[�����v� �7��ƽ/��'�
+�)��tz^���q
.�|tV�0d��������z�����=;Ԉi��9��EϤ�ng�q��$:���E�4�>y횈�"lQ��p���5�x=H�:Em,.��]���`�I��F?Nñ�~5��,�1�`]-
��>�|5s��$�&�=�L�2�<2SQ�~�
�O5n������xѣ+��ˬ����pH�.���w
����LW�;<I�UB
��&�����ew–����ʙ
l���t��8����iӋ���d_;ba�C������I�
+���+zu��[�ga�n��(�G�ǭ���E�4��
T�m\�B
���DWE��37�Q�����‡�Y^D�PNg-���e��_���_WK���i��'��Xk��;l�%�+c똕Y
�"Ԧ����FE�yi�#Gj3���[,Zz=?_�e񎭥�n�*k���1)�u߻uK�v��Z�	b���
+M
�ҭ9(S�̬��Y
�"���`�k���$��f�9�\G at +j'_�ޣc�B�d�M��Ku�b9���z�ݝ��3&Ǯ��X

�h����+�ݨ��n�j�
Q�nv�6�ط��w-�rj�	G�
�T��:W`�:&�N�3Z4;�m�W,���֙5�q��g
qX�ʭ���2�3~�F����_�,O�N/A��p��Y����'
�����7p~~m���H���
�x���^7�F$G�
��h����5O/VA�s����F65�Y���|h0��,�Gr1ڠ���ɏ�r,��
��\����h��W`�D���
�8`}�	�,r���׵�ږ�Wޅ�jj�xF[�#��m��h���5��ks��MV\!^�m�m��믾p8ڤ)f���+Ё6iIBFF����"��x�+�}Q�
���d�0���kg�Cn��@�vv �p�i���HS
+�LP�ۖ�Lfk@��#.�T6
���-��
=!+��Xj��^��)�S�s:REK͞
Q��_�

`E}Ժ��1�t�2Jb�Z���~"
5�\��0;�`�	.>�l��bZJ�@�W�zo��׳�� ��*��
�|9$����'��
��3���Gc��H�~噆��ρ���)�S(��F����1�L�)!�3��!_P�m�Tk�p�%j�}~i���0��nCF%��h̰��#�ȧ�_����凷�������wO�y����o/^=~����۳W��|z���>��˛��?�|~������k~���
W}o<��X+U|��Y-�����	y��7�+n���&��̔���Z5���Gq-IK�m����
�(���D&�M�a� (x�ʕzv0���=�O�㎮�}��9��?�;kP�O����k��(���|��Fh��}�ٝ�D����ѤE+���{f��������IN����ٙ�"l��#��:��5G���5�Y��j7�a�zb��kt��S��ً���NRZ��sx��J�!���RoP�

�T�_�ճC�')�@�p�L��bBT:�9���;���0ze�m
���L���O;�����ڟ���<�O�8*��
Qԝ��%�T���`�ӆ!R�]�O���%I�JN,�ZH���M)���}3���0�Ȝ���b~�H��]��<lqi��zH��5��d]������B�N��,Y�d��3��}���]Dj������D��~�Ǿd._zfb�e�z��i3�=�N"��˷�AVXo̝�O7�0N�n�QI\-%�O�u�_���{��0OOS�
X>�v��uX�Fl^Q�������4�vw?,>)
+�UW�J�q��~(Q�!
�C�w������I����ŊI�%������.����?��K���	�����tpK
+Cz 8M��d�s�=K�H
{��D��!��g.G�S.���XdIN�N��{<��d��2%���!.�W�0�{ѰX?�\��V!�%2���NJ��p���v�����
�g��iѿ�M%���#2X
X�3��
����1J�`�W�C�;5'MzuP����׫�1|
�6��B�wmݛHvS˪'hZn��i�>��g�I���������B�CX�=��(�RZھR��	�אF��^bՁ�԰q�C5��8�VWX�o�����$K೓
�+��
+�5ԧ�8���%T벰>�̟<M�.
�Ս㪪_�՜�
�!ZZ
�}5���
�q�d�A�`M�4
�?�i�C�x�vx,�3�:� x���sN����s��9v�ѸA[��!�\�nݻc��j$��q*�f���Y�5Rm'�Tq0���4M���6�s����K����}���
j,��_
+����ڸ���a|S���z���ũh�<<��8�~�p����Nǹ�^��7�̇ڡ��m��1��p���'yո��}��	
X��{��b��v���v@����~T������#��������#2�Ϗo>ӗϿxy�G_`�_��z��/���������[����7}�˯���/|�/���߽���7߾�������ݐ��k����{Y/�y�ӟ��G��������Z*dS�0���V� ����
"u5
��:&9N�_���3��m�\�nb	���
6��Z]�@�a���j��)�+�� "%6w��0,��Y>���Z�xg� ��9kO�
�}^
 ��3A����v�UF"���X1�rHv}�\�i�
�}������)�c�"y�p�D4-k��[Og
_�'H*φ��\�b���V�:=ө31�<A�Oi�S��́s�.XF���/�
ܘ��i�my��K�ڹVX�y��W����	��9�`�Ռ��γ�3X=<���(i<�5Uh�������F8� f#��7�J�f�8�{Ay�`۽������Zn X�x����w�Ћc���XL)��[�.Be�{_��8^س:Z߫�M0����RL�i~�yԍ��������2��L�#��H��+��
xE$D-��fpm�Q��!v�9��|TE��Ds�:

�]�x-�EƘt�ʙj������
},Ů
��*O��
C��tE#y�A���7תFݞH���m�	Z�����3���n���
���r{&�l�_�:nI�
+�"E��
++|$��ajp�ݒ��A�K�ݽ2FF'+7 {�;��o
ȕf��&s���N_3���
nɩ�Zz���ޝ��okkЌ��jX��M���U7�I����t)����
��N�3tN
D<m�s���Z_�|U;�3��)���C ���ȝ=�u�S�)nrg
ia�]7�!'���i��yF�a��N�Yᐽc�_��GѲ@��4ul̴g�ly��~wcU+-\�g S�!r:6f>e4�-:��
jl�&\�jXO��
+d��2��8��|'�
������Rg6?:�)7�8�58�yxZ�������I��Z-G��Ͼ�l9�`�]6�Z�Yn�Y@�����!a��|Ip�x6'L�@Ӟ�H?�ƚ�,M� ��$�����"X<'K�p���`x���	0�rZ+I�m/
���6�n�U��ڱ��ѧά�.��wг��*;pɝw> �=���gF��
��~��˛��:�'�:X`OV��ɬ�CN�aJ�S�#�ϐQEG�
2��HH���W� ����bq�T~'����y9	��'o4��� ���|w[5�n�B�)�NV��RW
�=����s��5-}�d���|��.�A_k����wV+s|H����!�t� ����
S�?8�����b�4
pmQrNhm�!m��$���@���2��/4e�0���dL�K���7����Y<�탗�#���(��u���,
����{�^`[u�
,�;�X�h�7G��h�E�'ޭ���{
0��.�s�G
y���'�ɯ���&4t���U
�Ə��w����`f���
y6�c�u��+�t���~��
+�#��,�N�ɂ��%G��F����al�V�ؠ�<�V��3�4�>�<���c�ʚ��w��
5A�����
8�[S��*�,�p�mLbv�+�N)� WO�:��ׯ�`�3��5�:�bg_��9����ѕ�G��44P);V`����c��a�d֮�,.BN�W���]�[UG~�h�!�߸)���r8���n��L3^�8j���e0_���;�	��>���`��~���q
�w��"@
+r��|O�D�A�� R���h��H[�>��ݳ�w��"#���c��|�tWW�
4}
f��p\�PB %� c� ����-���UV�t���ԗ���oľF�����
;
�
0� ku� X�)%�q��V
 S@/
�
+�6�c�2��ŨP%	��u�
��5fJ�m�a�FvM at HRR0SPF.V���ŃpӈUv����'��\������
l��.3����SgC�zQ�E�4*m���"m	G�'QϬ��
��TE�`�MJ]�q�	���`�J���m�ۆ�
3��[�nB��ղ��>��y��&�j��y�(D�8GI���ݮ��@�B%
L�?�k�4


�*蒕JNc9�ВI����uEQw5#E at +2��
@�,�T*�n��]�c�.�dzY��x���-!�6��a�3�	�Y
�q�R�
/Q(FG�@�9U���}��]�0���
���C����E�q$;�Xc���7ޘ�D��,�ɧ�;UGs�)GR�MBO%�:��$��u���$�F⣻��}u|w���������O� �~?=;~������7�
?xu�����<����>�?���t�~mm
���YJhfӍ�!n�}�A9:KP�I�0oW�@YhA�I�4I8���CH����t���\����
B�
�Z՜V�9�"
�*
u��
���bܥ�^
�#�XvMC�����={}{{~s�n��;w}y{?���
�0�M(@(��=�0p�x��
+�OE�,
C��Pdt���ѓ�f�i�D�̀���$xW
-2
+�6���dPu�opE��.�<6�CV��g���
���
+M'�_���
#a���
����紛NNz��3�7�<�^�W//��{~w��|zvz��5'��݇�yg���m<z�
�tey���Z����p�|�����B�U�� ��`Q
,��Uz���g��T'�zƲ���Š�o�`˅Dx1��H�DA7
�l
�����M��	5��/�B8��"]����b��E��aF�"�����=B
Z���q'bc�}��w
�G�}Ӂ��,b�����bÀ [���l���e�x�[,��Шl{��, 3 2��h�Р~[	�E�B1ׅNC�]����7�w��b��+�=��BZ�p
Z��]�̌��_
JtE�!�_I�n�������#l��
�9T�,J�֠?(G� ���/�
Ȉ���@b���ހ�V�a�P��ٽ0�
!K�(���'�
ɂ���j���d��<)
�"���zr8����Dz��'���L�kn�:_D*�L�Zf.��y8?C���Le�|�鄣�b���I/4�����;r�CPj|
n��A�LC��35�~/���:�V�FI�;n|������IU����f������t�����UO
�*#��9.�_��T���
Q4.��w��KA�z!E-�,€�:�����LZ�C�*aܱ
��E��MTm�\�R7�+�fp�t�!T��),��A�
Y�TJ�-&N"�I\�k����b���/
(/��yӃ�j�`����
e�dž�v$��/Z��Gb�%1��TZ���.��0�;�#	XZ]���[�&\X��U�� �4p(�(��Ŕd]�V�ѺSa���v�\�=��g�V0.����N?;������1��gOˤ�
CJe|
+�P�=�2!��k� ن�{Ԛ'[�QA��(��;���}�į�������o����7���p��է���cDN.��o
z������o��W�w�u��	�?��x����G����Am/�cN��c�_���?��?A�>M?Nq�v��?���y����^��Z�P+�
	�m�:��l���������3�)������m��)��R����ov`�1�$�3tv��I�)A�.�
s��cǜɡ�5���/��T�)w�������H��o���.�s0�t�Y���ۚ����I˯�rp�s����.A�)��9W�����]~1v�	M
�ND�ex�%i.��dumguO�Q�])��I�y����fl����?�8�s��*&ǎ9�8��I�SR
�"�\�b&��;H
r�f����P%b0�E<���4P���".��0�;st�j���V`�٨�
|���}%�$�r��;��l�xk��y�`�f��nOGw��!�\��X
a_���>)Q��SmP��a#졥<�^c��)1O��[�u�5�݅A5�Ҵ^
��De�SL�;����`;�<�"8�b{�<�d��K?
�;��
����
w�a���#��q�
+-����_3��Y
������s�Q��
	����b�C�l��>4��x�.k��}��S�
R�!�`��*}�a�y7.�a��v�~
��Ǥ�+�
�<�h��FQ��fQ�5<Q�k�
+�:
\1��X�h��$��)>H�r��9�i�v'�X
 I���t��&Z
e����f�3
��`�=sV�D'�^b9�=3[���
�ܟ��A�M�a6�z��5.�b;���˄b��������a�J����v�����qF��ۆ#E@��b�Z���c�܃^����\�Z]�eA���D�����ZE�D��t�@ʹ<��[8�X�]�f�	�$EZ�z`�k$}�I�
�m��@��bݰ���g6�I���G�7�yz���TǃZ�
+E����附���Y�쨰�7�&�/�Оv̢��Z���-k��ȆN��Ȧ�f/�o���V/ h���ib��,?O�/\�7��-T�ɸ�{*J<d1�C��@ɱ!�N����M�D��f
�Iբ�A"�s�Y|mr��
h��&/\Z.�'B���jE&�^ cc�a�#mw_, �r8�:T���Z5;�(|/�?�7B2���ҫ����b"&�D4�0"����Z�{ϙ��
�bgֻO�������E2���:����=8Fra�J
t��=k�0��$~��'���
c��Uj8�H@�0_��K:z�Qf�bc�������.(�}��m�#N��'��z�R���Ŗ�ijj[���8jMK�V5G�I��5�c?��W�|�������������?���᧯�����=���Ͽ���|������W����O�3�z�3���/�������
�����DP���%��b^x�-���2�
<�>)�=5^Zۢ{��c��E�N��U�k�'O/���+:ŹQ��l� [...]
+�؎g
��*�T���ӿ���ap�q��1[t�[o�+��yE�_�
����On�1�}�?>��{?��{'�>~��������~����?{���翔��П�>B��
��~��z�W=ߩ��S�v�wyԳ
�
��lwz�7�˙��K�u��{��
���G'u?���xж�L�Hܫ��2��
��ƨ`�[�l |�Έ�ݶ��(����vyR�{[i�S�za��G�ت\+���o���Dw�hŻd
eh�qŻ��e�QнE�A\ZX�
+V�8e)ͲV�Q��z��OQ"�r���
GV3V�
#�nF���Z��(�f��
F�5� �#��LY�}�r�[E,E
-K����� �Rj�D�(�[@�H�U+d���vA{�s�
9;�>D�����g�gQU�7�"����S��&&�bJ��	�/*M��G��d������Q��}+Cu��R����@�x�M�X�V���K��&�2,�l��L]s������r�
+m���\�Q�Kx3.]I��ض�[��aE�^u%B�����K_3��ov[!�D���W!"���:Q~� |J���J�e`�"ĵ}F��!,Ҩ�>辀�U�8m԰��g^��`�xin-mz��5��3�x�
ߧ���7�~�p������(nn��Ks��}^�P\�{g�+���
".��[�|T�jtHo�G���/�B�VD���DEU������n�
>���
�!�8V 
�k�����JM��F;-l��LH���3���5��I�u078�i$Mr^2��x�r����w�V�ch 	#
 J#{��1SD	{�b�p�ʫiJHO)�}�w�n1R���W�W
��{ܥdc�
K�av�
�6�a�����qD5#,��v�o�iH�%�\�|�R
�Z ]�6S���ᢌ���:�`f��H�����zvy���Z�K��^PB��d&Y�j}�*o��s(�$>J%�Fv�C�$���Bg�cWS�p��j
�hY��QC/t�/���@���v�n���	`%�����<�-�H���w����2�h��
@�f��G��:���D4]
Q�r�!!zb8+����ս�a�l��r�[C�����e���7�V.bdj��)*��h�-Z[�j4��-,
�\���C�������
J>�K�J���^#,J�D�%<�
(U���S�T��q�
��)��
(��F��9mY��Q�
Q��*v���
n�K?D�b}d��^�����sj�Z��
ńS��o�`3�[���y#
+���[&%��}��.���s�Ť�Y�:
ԩ|����м5���b��F�|xz�39 ���"�)�y�RM$��9Jo\��m�	��C�9��4|�&,��~��]�:n���� �Z�=���Eԕ���
�|N(����t�ˈsm�F��Jp��.$W�y�p8'��ke�R".�g��%���\�
+^V-K��JV�Ɇ(>@���l���
k�-1ɦ(�a ��.A�wh�'����ɨ�>�
.	$O%��N�3�a�j�X��:\�p�����ԙ�y��D� q@畕��NF��k��
,i���&�x�NV	�el��m�~
k��p �V/�t�:ڵ@5啫�z����w�Bl1�
(�6!
H4�2�<��8�z���1s1Ʉ���W�?�a�h���Xn㟎]�>M̕���"�jj�.�(Ƹu1	����Gg*C
D�
�ЧQt��.�{��-S{D���F})oG���0w
$!��n�� �?U��<��)�� ��4QK����Ť
�B�+W`E�W�s#
�Үz0�ע�������;�
+ĝՠ��
V֘�Uv��~
���G��L˩��+'
+$m��0�̓G�I��m����ݎ�
h�PW�$��0�C%w��*�E

�y6��oA��Q��� (
�è\%��1������Pv����--KF��;�d+�$�M�0�貹�S��h�唒˽u"���Β}5�
,յx_2�_+X�8<=h&g��ュ)�������
�4i�޲q��h�`��H�6�<�9Q	z��z�I�!{G�
X)V�q	s]t>\�9y(ږ��O���ť*�i�Y�j����Z���nT
+6��$�{T�^T�"���S,9�P����Ru˼�d�]6]���d����Y��fhRqD��awٌ
�$������a���@]5E�߃$�qa��
:��yb�X#��]�
�
+i�qb�5�&�X���p��=��Rn�
+J.�T��wh�-oLg	:���u�Ɗ�� W��R�
�����kgLr�He����|4	"Y
{>Q�����bv	rQ�L�
`�>��m)�y�
�]|��׸�R���L�Zg��e�
�l�A ��,AB�,%��i
+($'ݳ>
?�-���cҚ��GG1E��
R�C���|u��l
/�I��O��u��|o�LJ(���jhlJ���f'���CҊ��pZ���N���Iur��4 Ez��B-
�1T+���fQ��h�Ex����Z�xj���
6��������=�GY&ʝV�g�z@:�M�H8�]����
�⑷��ф[^
-���Q�IoQ������N�'Z=��Mw;)C�)�70��:�9�3\^\,AI��$e��D�ȆQr�|�JϢ�k����,��N
4�'�<�C���zH�#�!�صs���m}8�P��(��B��`H�kɟ7u��4�'�+�;g���:�NcD�9�9�R$�n���/L�l��
$�j�iC �4����L
���=���h�9���HId$�,�G{J���=
�vt��p
N�`C�ɣ���f+���8N�B���Y\\"�I$�7��?�pϯ�\c�ĉm;?���t&���I۩����2"iiI�L����f����Q)E<��JN��)� [...]
 ��/�����m:궆�Ϣ��K��4�d��v*(�Ufl/�1�Ҷ>0!���,��>Z�8dz8�s�_�ͽ��"�o�FQٽ_1jg���vb�tܜ6M�rm���JSZ�?\jycP��6  �L ${��b	�?,�w��9R�%Q���m��b�
t��d����i����%
��+�Cz�d#��n�.GiƒA�{ijQ7þ/UN߳��L��fO��	Q
�s�v�zv.
l��lY7�a�K%��j���'WsD�]��X����+��A	���r�ք��ikUI�#Rg���Q𑝱kF�ʚ^'�����A�]�5;U+(
9,b��*����o7y�.�@�1�	�v��)�	��������<+t�)$AR��P�%j���4I�7�d
U��ɷ�
hVR���L욞�*����ض��}ŧ�`!��o��T��̘�2�(�t���/��=�1*
�ֽ;��M�yw�P`�{D��,?�wM{�'�����pzr�S�Y���ˤ��
H�=m
�z]��(
���,�ˤ�h��T"�ɏ�i"I�a�zDJ"�]��� �Tt�<����
�^�Q
�ƹ��/���

���'��
V>��$�Fi��~ѳ���=c�NLy1���
[g��C������`m�ҧY�
I`pa�^�=��q�|4i3O��Z96� �V/��Q��
�gL��ˤnR)Cʳ����9OyuvK�,(��ipd�*��.�
R
���b|j;�yt�
2�2I�I�LF�׼L��\&����<��z�4�Q��x�U����w� ��>�\�u?�Z��K%tVl��n֚gl�E Mr�
�l0�E�;`dF<�Q�}xqģ���k��0Dp���d�l�k�f�G��[�j��F����'?ď
ی3�FX�Ԥ���1�t�$@>/��MR`��PZ��g�jj
<����vY�V`i�i��^��"
c]~�d��’�):`�yX]&��NG	��`;zѧ��?�
+=����$~��d��
�nzj�|�2"��GjEF����,X!���fOTP7˾kl���\k��Z��5*Ig����1�i��sR�;dx��܏�.j����_z%¹�

��Y/ea�Y3a�y��	�cmڇH��t"I����_�'Q~%�:��H��􈄧���
�������g�a>�&;�P��� ��(�zL+qm�R����{�7�v�n��jxZ�Dj�LH8�7�%�s�1���.
�)�A���sds�7ߤ���ݰQ�!m�{�
FV�l�
+1��\�>y���h�4�uf�b�Șg
�I'��d��򧽴b�
�L
+�LZ���+ϮUy��~��L�C����\��(�JmK�@
�
��$�,_yv+ M���&F.�$��"Ab��>)l�$#]���lZ�h7HG���Yl�h�k|nv۲�t��'��祤�!���qw;b�q�.�ȥ�:���ʕ2��L�u�&�W�}
������0���zgOڡ���>��xg���bOY	�Y���*
}h
+Pf}S+|Iި3
W�C��h��v��i�Є{v;y\ۣ�EӘUV�'�FI���/��+��R��P!_˔�%��E��՗bԦ�>.AM��x��!���R���:C�v���\c�����~`?^$�����'�ǂ�3F2�YמC':c�[윙�!�� s�
nt
f�T�o�J�8�x
+)����,�=�[9Q�I(}�Ү�Js�x}X9Ѿ3��
3��u^#O�&�ŏ(%��&74�u�ٰ�$͗��8�+������!�ЗɅ���d�]Y���Hu�b=>�ߛ-o��}R��#]�ٗf�=���yO���B�
s0����f��$���^��3s��Ԣ���C> j5��_��1!�+�-?+�*�K�^
g�]���S�����d�����т�\򿭼�O��Ρ���᪇!�;��\C�Ty�OX=�
�g&3�s��j� �:
�Ғ�\����\&';Ћg�����X
u4əN�ȇu�Nm�Z���w_��i�HIc���[܃�>�ޯ'�+����N
��
��kg
>�A��o�J>����V֨=g�a�!�e%
A$.�
!�dq�ZL��8e��  O�i��/�e�0�/) ��?V
+�rkic��a��F�L�b���u���¤�f��c��.I��],�fF*�X��P`̒?�(O��h(�����#�k�zb�+�i_A���O!��!��;���h%Y�pD>�@`���ίŸ@
+o��WY͍2�F�	nd2j�{T}�D�"��B�Eݤ�#i*$�
E8�	0 �
g�
endstream
endobj
27 0 obj
22450 
endobj
28 0 obj
<< /Filter [ /FlateDecode ] /Length 29 0 R >> 
stream
+H�l�K�d7E�
x��?9�M��0��?mJ$�^څBUe^(�����X_V�ϟ���ws�/����$"�m-kq��L<������a�^��Z,FxD��u� �
���w��'�����9���@�ɏ���/�1�u
��
��K�/�C�����46��4jS
+����"Ћ�N��d�F��2~�/��K�o(�Y�_ȋ�b|%��b��u�����Y�3��"�^�T��릣���k�P���w���yG�>��H+^[�p�:��;����o�+7�-����*�
��T�׸�8u��5�p�-ė\�q��W|Y&B&����[���D�6�.�EZy77���J_\�n�]+�6F%�~)�S�؇P���*qY]M�g��hR7
��C���B���Jd�C�,Dmq!�" @�{fq�
��2�V�n�$ƕc��Fؕ&[���:��R=e�_�C��0�U�k>N<S9Z��:K��h֕�T�	P�J�z��䈶s�D�B
��is	�
U>���Zbb�[t��B_\B����	?�=����'XL����	3K.�,C?`:�{��+?���
+L�7 ���E۔��
+8oV��"C�k�D0Ϩ�å���_`�#k+�+�7xA��2�����}`'b4���&
⚨~��$}��@K�ɷ���k1��"�(����X2�������~��p����
KȬU�l�_����,U5l�o.�7鈭����Ԉ���%�h�-��z�ԋs��)����
�e�5���ť��u��
5E�h,寭T���	�m���:�dш+�Ѳ������D�2���q�
�qZ�t u#���b5W���4O�Ƃ&��tZ�mn��Z7�!I��s�F�T��F[�S��ZL�X���i

�	�zHi[a+z�u���J�����0�w���c'n�b����/���I�
/�2e�Ť�6����e�7T4d ��բ���qλ ����9�[J�?�:hdLW��Pr���Z#?y�
���*���)�m��
+��y�U�y�q/K��Nvb}�����&�t{ڢ����^;0m*5>���)Qꦷ}���_*�����h��Nעa����a��V���Fٌԛ���e��Uғ�Gzuز�[��Zu�i����
lr�r7���It

����hɸ�esݶ��AB�/��(m���HB떓0�W�F{6�n���:k�I�g�E�^��ޭ+�B�V���U��_�2@���/

�W��vq,
�yp���'7�Plz��B���-
�،;3���A�)8�ZMG��Rw��hH�w*6s_���%S~ͤL�$�g$��;
h� '
$A�3=����}�p��H�+�}-~���
\겆>s3���#�Ft���1�۸��Ι`��vT��x:O�"sK��P
+�}qeZ;�x1%3��R�
,�D���F�խ<�2{�A�
+�o>���1��
\�����#��[���T�Ө6h��S�>P⾲d�I�9��,�qJ���|��4GF�g|3�ys��)�:��3���@M��cS�*u�,^�K�(�n��(M��W�o�c�i$�O:�V������-[ђ�N霞e�,��P�+�ݪ�r؜aU�Fӫ�f�
N�W���5�Iv�
��k�A���J0��e�.��6�N�V�xM�
��
+d����;�R��q�G$�u�D��I9��'
s����{k�@�2)��ä�g�P���h
��.�H�o
�
+6��,�&'7� 
��G���Z�Ylm|�G�L�
���
ZY at C������-[�&�.��xy���j�|�Xx�=;J́U_D�m{��Ѫ�w���r|l-n
���G~�Z���eq|��|C�����]��-(�S��ͬ�$	vi�M������D��H�f���Md�h n;>8��ѹ��`�@,��Q�}�8��?=�ܗ��H��aL�
����~

����5��W �-��]
���P��\�'����D
o���A��֜�b�3~�^��H�~�H��$��1Y���5�%ߢ���N
+m�� i]���5����䳸|�w�l�t�_��
I7rg����~%z
�Q.��}_"�F�)M�\"�YE�E��KJ�>e�L

�^#\o ��3d^"�3h��nJ� \ϻ���݁V���L�
Q:���Qd�FU�8�X���j9�5R`��{@�d�kQT������ 6�I'l��A�E-�t}޾�F��d�E�;�@P�Һ�!;��|��.
+��
Ff�3��Sk��ť���T��	��1�"7� ��e^����g��;ɀ���x��������'?ns�4�D�J�}O�z1�{�ʟ� �3楏
Ԝ�R��g��͸��(c�L�[��
��gS}o�(ؗ_�P_��0��n�f�rI��ej��a����U�:�A��	�'��ɨt�K%X-�ƈ��^��y�cb�
<���:e�Ae1����I4��v�����W[o�}����yA�WY��%y�a� A� d
�V���
+ۈ����s���g��假��>���˩S�X�E��T�sR�L�I��
Nb�A�V�NJ,2�V
F�`9��!p�Q
+d��"�
�
��	��z
�t�\�����)ɕ"똱N��|����5�A'����26��]��
AՇN���cʂUK����ZU�(NមLw�CS��z#k[+Q0B>�u��U�S�ED�Ex�T���h7�N���TZS��`�,�3ѳ��_��Ee�F 
����UI���H����Au�,�������k1��fvA�2���1�f
2	ۼ(���ѵ��J����U삑��B*� Q�R7��rՋ�jzev�e:fk�1D��ƾЂ�d׼J<���nyؕ,�IE,ms��gVM܅��n���ƶ*��r�mPs*��-�.&UOFe�t$U��2�)}[��%�njWA[z �FJv:��;��VT�RS�%J��}�dH��G.���6bJY�S\I
�ǡ�2����BB��B�GyU�}z[&���Y��r�q~ AA�BC��5�/�	�Y�

p�epq0^�e�4�-C�
"�y�K�8�y�,�fټ��9%���Gǟo�|8��ps}��~���������������O��?�ty���������Ϟ
Mi6���?�?]�������͎J���ޣz��bw��ã�������ͻˉ����?��1J��%|�<��k�W1�<n_�	��+��g<n�}91�{�j��=��nk^��Sh�գt*y��;n��g������y��� (E
)���N�B�+7v�j#r[�#��Ս��+X�
c�$
�
7;t�M����	��{������Z
Q&��Pq�v0kaV����m
ִAÔK�k`tp�� R��v�}����h'!��'�qIsyѥ��mc��6���%�(������W7�gd��s~��A������ٰ��s�0w��+�E U
+bA���c��AMC�#��nO��E�^p��
����F
R���q�!^i���W�n����'
�
���g���·�L�����a~���D�
?���O�����|�qN.��V�������^^��5!};��;����~��
�鉶%�
h��\	��������AFܴvѲfz��� �e
+Ӌ����t"<}���1���$ux�^��G�3���8G��$��c�j�נx�[�J�=�\¨�e=����jLn�7��21ӣg׷�!�t:���tsw}1�I�g����ܴbq�&�J�ї��
�E�%��
2�m�R�r5�<bJ�
[�n<b��폧�㶛�n����v��-�֦��+(�����
!�iL)�f�
k^��ns�Jհ�:�c��ca�TU�䨢��
+����㩛�n�;�<����o�p釷��ݞ�����f��M�r��Ц<��&^3
8�
n1�-[ZMzŃh�q�^=�
���^�~9-�l��{��?p�$}�5����h�EY�����x�a��mY�s��`���u��e��0������=:38�� ��\{�
$?Z\�C�6@;�
�}�n�W�� �6d�׶�Vvp�
�(�
�>� qE��x�+((
 
Sl�"޳ڛ�g��E)�{%�5�U�������%
.�V���
s>p/`p�i��EG�
�̛��]ױ�Gϸ5Uep1E�M�!um�-�HY�2��~l���� �	
S�SL茣���J�
�S�^`H����ݦ�o��;��k�Hp�"CmR��� B���f���

r�x����
�:5�
 {�n�1FL��֔

��w����l�况��n�Q�⎣�"6�i
�S������V������.����+ؘǸ)�=��#(y���e0�:���3�<��jaR����ʓX���5�w�q�)v6k�g��
,�@jA
���.W|���S-4�|��D�vw�
�ss* �����!x�6
�K%2��X
DzU��j5d� �5
!��`�<�佳CXm���A
�[�
�
a
����AtV*Q=Ġ��~$9_>�f����8�(%�;�l)��/Zq遫��9��:r�
�[��)D�P�>kq�h`��&����ī�.
`a�1�j&��1
+��b7`��2.�924K�\��֟w{L�>��+P<?��ă1�������l��G
+)rl���3v
vR�[c,-��5� 	Ck��%xv�
h����]c
"�{�=>+
�YTs�jL�
P�[��m�
E�rB	�&K����պ6�
�0�-@$�3z(�Ƥ �>�L��=��Ψ�5�G"2�̷s��N3��	}{�o(y��!=
�a
.a�w�	�h'�_|������N�'7}ّ4��KT���˳
�8�b3���wovu:<�N�
��=�s�������ջ�������:|y�Wzr��{L�N���vw;3�LgG�ҡ=Q�2���P��[-��g�������~{��� �e
+Ӌ����tק�����bR�SI��B��8�
T�fFY3�#�<���Y�7����v̎ϭ��s��y�j��1���j���b�
2x�IX|����
=�)7MS&k�t�A�u0�.����푦��C5$7�_���.,���RB��V-*ʄ����f!@�]�l�ڲ%@�V�6E;k�m�:�WA�y����8(�(��H&#Xc�
�zP
�7X

�.��"

+�a ~j��{s�V
���$C�� 
+&�O,dS��E1���";K�
[S��|���u��������K����}�J�$��M��;
�ߘN��]ڒ��>���B�>

mI[Z��,��F�����n�I
��<fx�-�y���,rV���ՃŧqB��
$A119:6
GE�X�
+�ȶy�Lkl������ ǻ�$6�|NJ���[�gl��5������%m�6RΦ��FQ=�a��=�0]��Tk6�
N?	f��Z=,|��_�am�
��˶��ts�@6|�O���W��U<D��o�p,�
<��Ʊ#$>�Ƙ5���a�}�Ј i���Y]?>Xx�� �^j[L�p+�f���Kg��!PB�Xd��+nt�{{V�
\�>���
+�	e�\Ke��1�yPde|���&�f�;$,�/�i�L��X3�Rl�{�q�҄
�4�`�&q�x�tf���_���A���g!!#
�
;�	La00
W\uRr�|rȢ1������u��p0�x0����G���h��S��E�xD+�
C�h�wi�څ�
�pE���m3n��8��G�b�����n
��ٵ["�p�y²�
V.rf�g1
ӹZ
��
q�QHE�Iv�����)�8�_�'�h�l�`�� ��Pig�b��cB$V�ɀg�y-�W�
���\L��Y<����~;��թ����[�,��980p')��p4ŏ/�q?�Z^��b��
�|- �\����u6�,��v����ۣ��jy�="�Wƽ�)���v ��u��F�q%Ug/��m����~��%ձ��i|��q&��Uu���oR�nnOW����ܾ;W�S�z��Ҩm�����kjT�B�
"]�;�e����\�~
ˮSy�h
� �DKW�}�ƃ�%‡
E/����J�X����H�Pb?��I�T:����+1R�A/
�����By�
����*�ǡ
���n$6������ �ՅͲ{�f8������a~@�Υz�^��ЖL���yzEj-瑖�����/.o��{����ۏ�?������ݾ~����o^�!��y����w��������?i���7juyuu��ߞ�]����㛗�o��������Fu#*O}�W�Q]��.>2�	x����})4奮Ѽ�tH���ًz5j�ib��vs0~�I˱9��b~�����i���3�����cEm�����l�|�/�Z_��D;�C�ٜ�n�}x2�~��O��i�)��S'��́O���3`]�Z2U<`�J�yǹ�uO��[3T����
+�I�0K��|$FЙ�- �Q���q�]��\*0��S;�&8�±
[��C�{5���W�˭=�yFy'+�t�_7�TF0]G���T"NrBK=�݀�h.W�3����ԔN
k���_l[�J򫆓�J�Tφ0A!$HynO��As�߼.l�`�+��Ҟ�<����,)k�J�e6P�W
[��)w&�o�PB�F�3��.�"�
���=�E����[���Mu�bPP�p{�n�]��usk�-����[s��<�d֑Lڋ�&��d��F2;&�Ifbр���I&aKf�Q��ET�@�#GgD��pj��+��Z�'%�u��2Xٜ.l
`�&���
�<�LjVů��˸�F�(F�C&��}��������a�i�
ӆ�U��$�T���8
)w�W��Ћ^-�@AI#�[�u3�Ta
+�[n1X|�ܮ��%����׸�#�]d�ʕ�Z�Hފ�h"�
��Y��P"�Z]>�({
+^�qd��|�����6�Ġ�d2cd��w	�J��p���+���
�<�\�M�6H��y�_dʩIf���xS�d�r00��^d*9B�b.�
@Ze�h.'N:�9��R���6�D���m
6�w���tw�Wn!X|Żܚ��ga�r�ht,�/Ai*ii#���V*K��R�ʂ*nAr��Lb�:�\��,hb�_��뢗cZ:7�|"7�1O���I
�|b��-1��˫m7�.��Xg)8��ű�9�4��t�M�K��\��%���4�.
&�!�2Bc�@�#��x
�C7ϩ�nѱ�v�I�AA�%m��wcl��]��p�a�&���
�<3��V�С��d���-5/�j�)3��}O�͛:dž����
���T�k]��f#�[�}3��cPPR�/�����j
}wk�-�����[s��<�dzV�3�"z��EJY�J*�|
.D���#
�^�۲a�1WF��Ӧ�m�SЍ�m7�Hw��6����²&?(��=�q!��b�x��:�q{���Ӱ�����|yws�Kؿ?�b|�E��/
|VN�����
^�x�����4|���0ƙ��>R�
�;��.�{2��Sw鶯��x���������R����¹ys��T;}�����s�?�@ ��?=�?����-�X�QW��yGk�t�%����yu�[��1���)�r����r
[�ϕ�Ӝ���ɿH0�	D 1�+�
\�5��4&E����1u�(��O
����	{("*0�U�R�_`<�����.hVsd������%j9�8O.ψ;dFꁉg�.�-�U�"&�G
A"�swИ\�3xU�2�['
�ċ�2bK���6��H~��1mtɼR�y���g��\>(��q�Ƣ�z��bѐ
m,�S�"�,� "�0<�$��⣰ʪ�%F�ᇆ�,{
+
I���,C����\�LFFv
z�Ț8�b6m:pRjƧ�6I����x� �@<;QxWK8�h��,L��
+`��x�
�#P����v�0Fg~��H�g�i�#S���[伣:W������|���XC�^�X��G7qx0nܵ(_�"�1=���.���qaq믔����#�O	,�=n
ѓ�A0�	m�F�ɔ�i�c�`�I=��4&�{�z���h"Q=5Q���~��zQ:��A<8O�B"��ɄŒ�/��Ң�mD���M��¨�(I�I�E!�N���6�!c'�����z�~�3f��5����<���-t��B>g���Eξ��C���Ё��#lm7?�IFp��y�Q�q�6�c��G���6.ez\�:V�F�U�<oã�������cFT��φ�1�N�����
�z
+'�d����P1�ť��	�{����
+P�l�M�_a��n;zjK`�?=�Z�U�‚�"]�L��SРX�'y�L]Z[�lD�l���wwU�Lh���6.�t\�oMU�A�#�:h����Ա|��{j
z�� A�MX�)�y&y���0h���G^�a-�ݳ�Sn�J�=���<8�t ��3Ĥ��i�x�6�5#����/WA��0�*�׹#M�6:N|�)m��-q��P�os����A����Ѵ2�������ֲ|,���_1b1��2$�vwϘ%����X��sz��G��5 ��j�)�k+� �$�7���Df�V��
�
+�X��
wK'��������
+�3����W�K
�ݛ �T���N8|��
)�ڏ����u7Oe�5�e4��1q�7"Hny�ǩ�^�����=w�1$y	�կ!�ō��m��.�� ���I!
Y'�ne^�[���L|Ҙ>�MÈ�BUo���P
+u�(�1�a�6ً��`�
� �%@5W�S$񈷗��'��������
+�T�� ����_-�Cb�o�{��4%��2XB��mp�`��jM������!�(^I�\5]Bk�ak��v�l�H��H�	&��
+��&���y�V��� �O�s0��9^���~��
RѲ��k
���ʛ��W�'3U��d��� -�ۨ�S5���I
+)I%���~�`��?�{��}1�{�<۴�E#N��I)3��o�*4�2���խ]���x<�l��J��of�6�yVb�
 �x���$r���bU�P��p�
&�<JP/2T�U��g�Nm�Yk�/He�t+(k�}XV�o�q�w� #�bNo�\WQ+-Z73 s�ߊ*��.nD�yI9HC�n��*
����
رH�S
V�xmwt����3%8�YY4J���*��jG�l$f>U�AL�8ie�������Dž�+�iS{�}7����tkgn sE}#h�!CR��O#3n�!�;K�!���
20=ze�yU�ia���L7�x�]SËQ9�Uq�S����&��O�~����*��o
�����| =

+�#+_-�����¿�ct�����nc{�[pWQ^��(߂\�����=�E'�'����洤L�r\?�Y�
��
�1�������n���BLy
iW�Vx�[Y��Gl�?���ٜQ�G&��M�;\c�
�Kqd8���y��Wj�c	
��׫�W �vE�
�o��i�8���^p"-l�'���Ի���R%��2��=l�w
��T�a<,���BC�5ɀ6�`��%BƮ���!���$Q%>W�4��Ր���m5��$>�J��-G�J[;;���|}��
�${Q�M�v}��x��b:��fi��W�
��	.
���b�.��f�8i��xz��<B�x�Qs찉s�=1��g��0��7ث�
��ƕL��t��Ʊ^��a߾����ׇw�~���?H������_?��g0����_?���_��?��ݗh��{����û���f�#���w�
�
ތ@��cz�e�]nB�=�������
�[������������/����Z�ÁU��<+A�y�p�61�,����XLƕɦ���MF�P�B������3 2�.
IK��b˭�'�?�٘*���j�io\TP����
��4�p��Ś�Y�D/�,��S=�\��`w�4^�u��¢I�r���2a9sc�]�P����uDr�����3,��d;�:�ˍ�.�i��'2��hLp����[�
>Wf<����9�7i��O�3���)

E�	�׊�]չoR�Ja�
B��e��p���W�����*mȎX����^?��q�u7%,����,�8@�a���	��M"�)�[J�sz0�a�eae�Hr:�I#�(I|
֣:��1�
F_˱�x�`Y�P�KiG��5\.p:�:�-W
�Ũ�I�a��?�<g(��x�}���)
F��� >e�c�x��=���zF�J��$����� �/�C�a.&KzW���/������x�a�\G��u�%�\�F��u�X<���5���b�A�X��8���(��8W�
����gbZ��|��N
���A�d�D�>0 �T�\�H�`�;��$�V�$
�_��2���ut��-�j�G�0���VށQFMns�[F�YHZ��2�QrVG`���#y��8>��c�����3)("��*���HH�:��i� 0
DV8�4�
]*G��v _����^B�;�"��t;(�w� !���9��N������;�&3`c�r<	�V�&E��%HbEc&��Hq��� ��K�sǦ��l3'���GӺV.6s�6k�|�(}��y ���IdGR��`s�bd�)����
j��%�� f���W,+�QP�SG��0�����I�@�p-��v�b�yCK
���
���Lksfڤ�+�ȼv -w���=w(�E�u
Y�#&|���qM�� [...]
+�f��%���"�/����需��lŎQ`����Ͻܦ�� �+��%�����e��~M��$0e���8���d�WWwQ����T Æ�4�ﮗfK��u�
�o��� ��m?��e9�=��Ώ���[5�O��]j&}�-O4�{f؂����k�0���ƀ�b
+�ƶ��˶ծ�����Η@�tw�K�~�� ��2�	�Nt"f
!�Z����
"xDB.���ӻwu�ZO-<��s��u$ n,
'�x8�
�^�kd �7
��z��Z�a<<;ě!�{��]
�Q���FwƇ���o���,�i�\gc�	��
��]ᤝ�9(�
A�cD��᱆^�
��c�Â�6�6� KϜbӾ��	�}
G�>�i;
�^=v��N�
����%ceat��w���X,{
�+͑��lR�
�c-�ǔ�|q�
^�y�vc�{��$���=eК�Z4��j�Bό^O5����ǟ�ʘ�����A0�y�
��x4��>�
 ��-+��a�&�e\P��ӯjv̓G�	�Z4��J���ـ&������6m)�n�N�T���mB5.����b���:Ś�+�s'ꉹ �"��Vk���S(ʽY%`%^.π*Vs�7�.f�e��lw
+���
�9�N���/&HT�zv�2XFdK�, 
� ��\\�v���0��h���� ��g���2�&�,��%�P,5�j=������7�e.�4��tK���K��`�!g�����l$C+G�
��Ͷ���X�23��$��&�NwD��������w���0�[����I��{ӼҬ}���<�J:�Bf8�戚���	\YDn�����^�
��Fb���|���
+�x6$��;����᪻���}�{�P�5��:�b�X��H�29Ƹ ��#����~�g�:
��`ٹ����ĵcv�#�_���lF�{)�JQ�#�2
�j��֘��PV;f^��
��a�����0��n�>(<E����g��s
H���k�D�IBm�yrc.��
�ѓ܁T�8*X�/l2�3 at Y�[�!�HʔQ%��������!'� e�М	yЂ�&5�3
dQ�ƙ����\�H ;xA@�@G��:��\&J|��t=Ҵ\��y

�j;�P��!s�S���YD�8f#
��ۂ'�
ךF���ik�����V��t2�����}إ�������E�Z��![
+0��.��Ղ�*�kɔ0���C��HP.�`�Ao1�V�k�����,�Y5	��d�ű�
+������=�]2��D�$��z�R��VΨ6;$5M
6Z��3�\��y��4� ´�i#��Ӑ��
+ibC�yp
+V�Y<����3
_Y9V2��\a���C>_�
mȦ֑k1A�w�i���1JL�baOo���ĵƢ6\���JtH���K �5[Lm���t0�KꞸ�a�����סl4p�*[�-h�m::���0�j)���/}0�
)ƚg�ч�]2(����-��+a�R^CU����[�%�Q�'Q�'�I����pY�>��J"����ەn.z~�~�6�=�;�
���������W?�?
S8
Z.\�N�:?�'�a�0j�����U4�A��c�%���P�p�lꂏ��Q��%]�A�a
+��j��|oH3m�՚�?̡�>B�!�&�1Ʋq�?L�S� rt[��#��*��R�����e�=9�n��|hE-�
z�`�\<�Y� %��9p��*7U}��z�=p��*�H�����=�p�@�٨i��J�=X�rz]3��Xa��;�a��sdtp�"Z�V�Q7\��p�Zĉk�;
=/��m��
+���夺D�
�썛A�Y�\S�0<�/nac&�Ss
+�$R]���[a�EJ48J�8��k<�o9ϧ��8����������>�~���/��>��ㇷ������^���?�|���_��W_=������߮�ç�ob�/���
�d�	ceo��ؔ��kLH��1��_�p�̾�m��%^hq�ƕ�2Һ�(AM���9�
كo�?�Tr�4 ��Y�G���.�2�<���=#���	�ǜ�
�g(�ަ�;HN�zz
�
���_Y�pc��~�ڟ{`�
��_����)P̟r����]浒Pv��NK�ͩ��s ce'��y=E
>���pKq
�ⶀ�_1
�h�x�[���eI����پ�PJ��r1�S�`�)�G=4GYP3d.�8ouT;4-ou���~�4�H�!��
3�1� Xv
ED+j4�rffp�G2�C���H�4k�j���ƀ
n�ܡl?�=>4"�0�GG���1eFk�CD
"�R"�K��@����
��5����
���f����@�������j-�KS��
/�'	{+n�ߎ��]� �[G��N��J��:��
�#�q6X;�ٳ�
�l�L0�|q8��*i]+
-
���4K(�k4=���k���*�ZcT%m��
+�խDv͢�h6]�&���:�&�0([=�(��s'Ԑ�yH���7^��}�xԾ={~{��'��ۋ���?^����������r����?���
�o���۟�Rn�b��_��O �^<��G����~,�
+�F�{��^
��F������QeJ����!槺�Q��p?4��.+� �����i�E��Aj�!�L�_����ӧ[
1�f�aok���{�wFᕕ�i�����%3d�~�e���w$�����,�ţ�r3~ԑR$.53�
I��Z�zS��&%�M�(	���c�Qj��X\�
`���6oE���e��W eێh<h��9�������z�i�<���q�G����mMœ�DV��s�
��f��\��H�hU"PL�T�s��Z0����m5�Ё�*���p�񤹊n�JH
$*�UBT E]FMI�LZ+�̬�tTk�-�n�"�[?����Ap&��Y�#y�¸��@/�r�ڣ�Wj��M;����QM0\k�(�[��4t{zl�j�dCA;�U���H�ap�V����t|����X)Ӽ۸�s�1 -u� l��J�`��|���������;`����V�Ev�$�0�+<!����S8��+�4����Ӊ��
+�n�Q�,�����	�uq\]����^�R�J]��}Ip�b������ÁS�CK�nK��'(b�����؋��J\�_w����hg���<���4��K��1�U$Γ�b�m�+�+
	���_Wmj%�om�W�r�x����KD�62ho�vR�A
+-`�3%���]?��.��B {��n�q���b�y�Ux�j�����a.���kZd<܆��:�Q��?i$��Jy�
+�cZ#
�%���N�����3>yTD7~��+��WE�CŮ�ַ�Y���f�`��
d��ڣ���\_��`?I��;[C���Yo�k����i0jM�
E+#����ҡ��w�1B}�,��]R;�H�g�*q%�&��
�
6�b]��
;96^L8����
+
�Ö]Q����S����E�s��N��g��=Z����x"�B>i\��x��R��qU���ەG۸�#mX���E�ͩr
�� �mP:�:�;� M�J��"d�*�g��
}�qP�N<�X�M���s�!<�n�����̬S�N��k����,3Ǵ��M��p%�h�\8��wv��8���
C;�8�|��Y�+�`���� 6���X8���
će|��+ /&e4/LW�$�� Y�&Nf�������{��E���
+o��~ٜ3=�:wP5�x�P���
¬P_%�亐��^���#}i��)4�������L�ѯ�rUOw��b���wWqŦP�l볁)3q%�z��g���k�>�C}�9Vj�����j��
+�\Y�(�3)�Q�iTh�L�¿�e
����/�ؓm�
+�T�VPg�bM�
��e^T:�3Q�
+��X�֘�Z�JiV��_9渨��#��G!B��J�
���TG>�
Dy�`�(��qu
-|�����R�F��cߌf;�pe#���
(���byu���6 ��>ֱ��9JAԢ����mۖ����[�?�T�Q�r�E��Ľ�g�=X�<�t �s��ȭ
j��;�Xe�>+�;���E�K��D������(�N4+�w�P�2����Rf�(-�T���@C�O<�)�,F����]�Z�r���P�#*;u�;x3?� 7��Jn7�
���
���b�+O
�+
�)^����(�)�H��Om�ao�����r�����:�m����TFb
�ڴUr����V��A��
B�����-���W�^a�7��hت✢ٌ0��Ì#���5i��"i��%��pI���7�_F�)wP�z�c~7�̺�l~n
�"\���n�˂"�����Q�8U�:j�'R3�2���+�,����^�u�
���7-P��Y��F5ސ(vw;�RE��UE8sIq^�Z`_AG�hP}Bz	G�p4r��{�64�tq 
7���o�$�t�=����b�|�
L�ﮇO��`�\�L��RQq��Y;�/R�&��	1�f^O
+Ϫ��B/n/�(e�,�
�$�E���\�"vAg��vR5:�e
:��F
+Oa�L^›�
�l
+�Wm.J#u� ��Cgv�S��%
+��Vi
~�g���ɳL��-�t��I+:�{
!~���ٚA1ݧ�����VE
�
���b��'���8�E��	~��i�
��]~}�5�"
�)g1:lV�E
'����l�a�;�[�Ąv�p��
*l5��=7l�a�t�:�sI}�S73���I�ҡ� ?���Tk�9ʀs�z��UN}�o畝��F��,���
��+J��E�hZ��	�X�#�j�p��
[�O��w>_n?�'gh$
�<��k�
���ILr��z�sqfs�,���1�`1B���H�
����#�$�0��}�&�a�0�t7{�(n����������W�1\IɁ�P,��#�;

<q>.�g���+���
1
�T��,�f��
�

^��BIˋ��;@Q2��3зB��X7\����Ν�6
ܕ"О��)Pu�B�T����x�b'Ya��Sgx�Bc�9�����kc|
S�1�R9�zs�ݘ�
��S�c��S�=�20��'ᅍӃĆ�I$A�o~�Ԙ��8%q��5��:�\7S��3
+I!Dţ��3�A%*�)��j���xF۽�q��mη�
N�
)<�/��q�v��6�3<�'�cs���n�G��[[঄���>�T)DC�D	�!Ae�,�3
=!8�+���E�O�$K>�ʋV�2��`�nz��5�UC/���wʟ`i���#��ݒ�c�+�b���jjoL\����V����P4͊F�]�򇙤��ͦ�����T�'}�����%qhХ����f�c�y�����.��AO��)�
/[��V?CsU�����p�nr�M
+d6�[G��pD;��l�C���ރxT9������4�=�A��(REs�s��i/KX�r��G����^��v��pw�`�0�g7���x�[�&W��c�†w�
����r�a��u��P�l,�ɍ�Q.i��Bn��#�&�=>��>�
��
ڹ#�*-�[j���P!�;-��q�(�.�E��w�sN]���c�Rm��.��r
���J
�G���p�a����\Z�����k�b8�\��*48�R첮�T�8_�r��e%��ɬ"�S@�R����/��I��E�#d����u���2Q�x��
Jm1�̒�!�d��8�\4��#����$�Y�s�����.��n��V�z�5U-�~�/z=4G,yQ�sb�^jvmX�䨼
�W�kK!�F�Ri��u5!����?�WKo]Wm��%���� Y�����G� �Ӡ��F	Q
Q9����R�*�O� 	� #3�� �°L"0(���=�9�y�7ε�J>V�o>���{�Z�c�	�s��T
+I�˱�U��^Fg c���55O�����ܪ�Ĥ�]���{��n���=��*�J��D�f$���n
���
AZ��qNM6l
4>Y���JE�q#�j2e�}��Y,&��7�J}Idj��lj*�����a@s'��$���D50��7
Bk(Q
�5�Q��'��R�T��S��k����vO/�"���� ��7>�~�np�����s�J��k at W�
��8S�v�뽑�!H�G�0��2'y�"�ʮ�wLr�� �\��$��Ҥ~����g"���jHlKPX�$���qJh���r��|R�5���( hD�NO���|�����ͻw��?�O��../u�^ܺ�y�f�xqc����[�wn�_��8sj�{�ǜ}�<�����C��KӁ����ɼ��7&�[\�V/O��oܽ����
��`�#�W�c���h`Ж�4׬�O�h��?|���y�ӡ��5�����k?�{vx1'O?�*]�9{6���URH[@
+Y�4$��@R�?|�<���S�����7\;M �)��ˁ$�R߶�L��������	2"C �h�G):��
�y��ln�]�u?����]��a��^(C��~0[9�zch�dL.�B>B~�^�<�	
��AS7�seT�T
/ĽZ��a�ĭ4�M�15
��F8��ݤ���7U����
x743I��
Y<Bm
G���
9d�
;e�2+�� 4�@�VùP$��j�R��[P
4�Ԁ{�����0�P�	?�
��sb~$�[z�]SP�k�}�`#ѓ8��	�E���8�
�Df�%��M�1k�M��0�Ѭ��l_���^�9�5��5��3�Ws���6��,�d���]b���B
+���H2u���R��$a�C3��	҂dg���>M�u2�wHI���r\p��A�
8(�����뀻�� ����ܞ!��y0��FV>B��������Fq�X�����%JH1�t؞�
�8`��4�*%�7څ`�j������˞{F�݀![�����5���֜E��H�=8�$
+�1_��޷f�T'�c���&�PLԶ��`@�Rx�Bf	#Ո.d�I���v��}V#�0��R��AP�
+��M�
6B�D��!q;��D�6�P��]	҉�fy�E+}.
+&�
4��֒3�����\�ĭ��M�Had���S�²3O���B%��v:�1W �Ťx�2�>����S�bŵQ�+�
+�����
�����[/�

ږԂ����V�ʊD��s�"��t9���XQ�j����/�Z?eE�7�b(
/�Es-�8�P#�޸J�V�Ň�����:����m���È���^��caav�3{+����-��8��
�/QL.*�Q]�F5��i�rQ�,m��€9k�b���88��)@I&���P��Mq���^�
G$�%[�꛴ ,�\$It:�9�,��
��8Wr���aJ
���-�`����3-��7R�R8R��Jn�Ɂ(�
�83��L��3�Rrx]?;^	Ģڈ���Q���܃6��u$��*!��p�^ہ���8�١���8`W�Dk��a$�Y�D��*�"��� ef|�C��8:��	�3ϵ����d��(�FԲ��
��o�A���Zu���
+q	��OC��f"��lG*Y(&ZI
L�4�R��F�+�-�5�P ��dr~�Qj���n��
N�����P8/ �`"Eq�=?�
�`эE5~pK�x
�]�E�YbL�눜2��XU�jŊ��K={�����\�#�b�"+�ӵd�D�i��S�C�y�;��z����LV�Y������a��3��ajloJIF�
+^� ʹ�u14/-�@IpkNi���Z�h�~e�.y�͝�Tu
U�
PFuT�{�
>]�br9 �
���zSj��x�/�
l�#���J�N{OǺ!Ȓ�'Ļ��^$�5��Ȫ�V�0��a�'�&f�ۍU|�<���*��9����D
/Ǘ$��q
s�A�]�phe���6
�V]v-���聾CR�A�p$^�����MP�9�
+� �8�Ũ�SU���!p����9�a������DGR�*�Ac���V�Ft�ߛ�D*%���TI83�ܚΪ��0N,7*)��rZ��0^�)�Vn���~��~/Gȉl��qQ����V�m�F�J�
+��ڨ(e}�I`���k|���I��/a�D{Ә�/Uelk�-���ykS��%�m^��nq�[�<��4YX>c����ܸ������&�8�~s�N
-^�X_�u}cm�~�|����K�y�-������G����=�|��
j�(�a��$��!�%�����=|�	b��}����nL�
�_�'�2k����Խ	��?0Ҕp����	��8
+j�@>Ə��$�fX�I*<
�U�6�5d2qg�����`pn
�����^p@����N��9��m�&�gXm
Sd+/8�s�*��Vo�ˀ�F�5���T�WOo�Z?��9k.�=�Z���Y�aߝ�_�˖������DEf�[�x�
+�0�,��(��1Xx�W=���v��� �zf��)��g��}N��y� �
�� ��4 ������
__
{`z{
+`� `{
�� �4��W��0���]�>+
 �y�W�P���0���0���0v|��b��)��f
cw��0^�..�+����g`w0NL��{
�_� É�]Ǯ|]0Lc�ק�|z�/���G��0_v�S��ݝN`���!�W0��a�
+��a����؋է3���=��1�s���d2wd�ч�.��pt���C�qle��7V��摝 �
�����~���7w���[���?���_~��cs�c>|��o?��������{o�0�[���8�'����7��Rc���O��
+���?��ɿ����ʯ������Ѫ�I"��ޝ�i<�\��a��-j�9l	.Ö�@XN�]��P7{a�5���΍��s�(HvP�������;4y����g��}?߻�8k��w�N�dWM͵hkkW��~5���1`�O�–�#7�r$������@��U���� <���|5�=��M���
��n����`�di�e�������c���?��hTx��/n��wN�~I5ǂdv�Y)
�uZ��u��:gj��{�̆�-8;㉹^Ac����>�i_�
x�(���.>�n2o(c����a���g�K�:�����[r�E�A�!��	:y��tq�'�Wd����j0"���AB+A�9Z.�G"�h4~��:Q�vg��N� ���#���ƒ����ք
�jk�K�	'�P��:{������槌[}N
$R����a���2Ս�a�ʜ�W�M獁��rڮ�C�Y�l�oiz%[��+Q���˂B�э�m�}��1�Y��V,>&�K�1T���D��FLA [...]
+P�7�A��r���@����>�`��ټߥ�z�����_�=�K�T<W�PM�w�<�W�YfҹB.N-N
�m�e2f�҉D,Lyl�Ɵ��d0[,�1�B�䓃�J*gWz�fC8To�� �P4W
endstream
endobj
29 0 obj
20605 
endobj
30 0 obj
<< /Filter [ /FlateDecode ] /Length 31 0 R >> 
stream
+H��Wm��H��H��޻���q�n�;ѝ���&�!ٌn�5�
��Y��~�Uw�`��
0�;]��]U]]Ou��?�gg��{�^.ݾ+����(7|�xq�tU��GG7咎���mCPpJ���K��cj��r͡��t��ں�1�R4,��N�f�QBM����@�
KsLf*:a���m���15
3��m� R\,t
S�;e�#aTk�V �k����:�MuGXG4Fm3�nN7� W&ݴk
ۂư�<'��r���A�Q�45�����9�j�iY(��N���3Z/snjiN6�i�t���
�,
�M
���p�<�9��SO1����Qf���v,�DC#D��D��,���<]W��V8W,��&��f�7u3GL����Ea��Ď��6G�ې�
84���#C�iTW>�ä �5ؘ�sogw�F�\��ďB
O�kȟ;
կ�U�XG�h8�&���>��0r�*z%�ވ�����ibo8t�4�,,u8W���2�?��T���r����n6��F�)�G�(�H�)�I�(�ʳ;�'���7-����@��S�U��˜�sT9�,U����d��]�,�� [...]
�@��0R�����jK�bCŭAm33���5ԃ07�f1���cן5#��2J2�@p�g�򿱋�O�~>��!�
d�'v=��rdJ����,������>kf�'��E@��~>�����@�u	�v��'�=��ӽ��Y��	����p��ti�,��:�>�b�lW��@׭3%
�-1�@���x��$�l
{~��x����uU�,�O/a�����B#G���Xy�\7��Ĕ�o53�&O��c-s���ϝ�
�~�#�L^�
+�Y�qe���G���͕�<��l����$�/���4�Y��Ϥ�0�
Q=
���p���-aG7��`IS5`6�?�F[A��
gK����\��DL
�`UU������Jc'�޸\��F��|C�욘='��w�,����+�n���7��GÑ�֮�@�^����Q䪪��̫�ep��=�l�ݚ
*bn
<[�\� 4
+9��~��x�(v�\W(H} �Z�Rv�Qe�
Jv��������
�
a�{�~�CGnx7J��{z}��K�2�_ہeMOT�4�.�za�u%�
�f�7����qR�x�{Z�aW�W�\�z�7�P���!_�V�
+oG���n����]c�$1 ƀ�(@,�N2��
gv
���O���oG?��<
��a��^o"lQL�b�D5Q)~B�~!򓔨eO����я���@N��q"����X��5Hx�]JX�$�!8��1Ơ��x
r���C����lV1W�,�-b���r�)2�+�\"/XX6��m�#7�ݻ芋袛!�;
����n$���
��^.
+m����F��⊐
+�^��u������)d����7:��ה\�W�;����v⿿�v��ì�w�_�͟������(Ƚj�'������
+�ȝ��׼��w�5oc(��
#����?}���pm�K��͹ɉ�_�-�I|��4���q5��m����êG$�߇�~}
���ƲO�Y���?��ظk"�tp�x�m}?��iG���ϳ�r[��n���'��@�A�SB
��>����P\E5]3�n�_�Ո��!�af9��y/T6��ӲT����
�=�V�
s}Zаk�
��(�V]�|��DRpZ»A�.�t�I�Dt=��<~Ȗ)J4⽌��6�~�w��I�Σ8����뽴�e瑟dh����R�]z�^4좎<|?E���V�?�Ԇƾn9��`[аk��f�A��
�2�0�մ�Ȝ�&���N��8H�\S�0b3���P
~t��.[G�k}7>1�-<�
l���7K8x�cn���/x�\\|�<;��0�Lմ�g���s]�4zʸq����M���I�̃E3 ������21�a��,��KN����u�C�I,�����V
c��C����K
+fC�V���Z
+�ަ+�A��b\?�G�
<
+�T�.��T�
+���_��m#9����[$@�h�;�vҤ��6>;}��`,�m5�$H���ۏ3�wَ��M�u�61��9�C���{�4
+2*��Y�=���7ğ�h�ɐ�v]ZSv
+� �����
�׃>,��N�v���{-Y��C.�m����$J.�
P
I������\���,��-�]��0m��"�$o�t��C]��%�.���'iA�4��A䇴9��k��¿i�WQL���&��s�X+�"N�|�. �C��H<S
�u6 �Kځ�~H�{�����
2	`f}�+�c
z! 2��s	�%���.J�{���q�k�(<����5X�J����&UNV��8�lk�Vk~h�x�p;!�b;!�1!�X/�n.;��R� 
-�;R�x��m����&��m��15�(U3�O�ޮ��ʹ�;E6��!�],�Ų���hHg�9&{�"��)��N���$%T���uqP;\
�����_�D4Ii���<�
.Q���xm���7xڽȥ�x��>��Z㯘&P���|��4
+2Jʓ��,hS���W�Q5�|o��G��E���Si��i���}��=T�X�Ƶ�V
�^	l^����E
r �-���<6u1M����4���(�����U.I����b�<I�Q�$��V�xq�����g��	��lY/̹�b��N���A�O
� ��$Kg�) �{����5�gC�΃�dD��|��	�
+�C����23���8�{�Z�1�|6����� ;�hb*
���N��?�|->r�����!����0�-�y
����Cs����
��E��Q��2K��o��t�(;��ަ���RU�e��~�z�G���t�h��TguN���������
��xIKã�(����ŗ�
�s�^�@�=��ēd�H,��TS6
`9����*�g��;��`�IS�1	�>��[۶��?e~���j�Mw�������«� 
��E���|��
0���d��j�U��ҿ�ҏ��
�DH����%W�e!�W�h��
+�9��E�xWz�Ⱥ�����X�+ݐuH�5M����z
���Y��XgG0պ/ܣ� �����,?�?a��!O#
�h?�}��a�G����^�/�{���c�8 
���3���>}�qr���K�a�g�g��W}������@�e����;��W��M���-]�C7ͣH�cQ�m�܊���~d)�]i@§�>
h<9�bn���hL���~�.�|t��d2I	e�����x~��������i/];��`qt��ai�ސ`Ai1n�B�Q
�UH����n>����(�()OJ�p����g�"��q���`��5��M��8����&f��i7���7���֞ry��
�W�w/��Y|�R�E�m��΢D��RrIZ
qW
����1����)�2�$Iw\���/e9��Ȫ���C3[4�l!͂�n�%�T��"�δA<�����m��
+:��P-�AC İm~(��|X��c��'|�g�vo�qoE*��J������\x��_�A:�1Tz�Q
ޒ��g�e�O������GmՇ"RHa����9�ϳB�?��2m�U?]̭�>V�UAA#W�IS���Rp$[�	�<M�k6|�BS5Ժp�Om��&4
U6,T��R�Ǫj��tM����

���	Zh�

���:��3��@�z
���Y�k{v4�],
�,M}
J� Kd{<����h(�<��}���!��`�G�3c�������m
������y���o���n�g��L���_Y.��5���+�MKccK�g�-����I��e,?1c���7�LK� ��S��j�p�mxXc���0���݆䒰U-$|̎��k����	�b���\dH��Q���R�-ƾ�\̇��I�R7H񻰰o�����;��
g�Z��#�"�)X+����t�᪽uJ��
`��F��􎝳ס�K(#�"����E� ?��z����?������vp;_������|��G�nXZw�}w>�|J�u�����ʚx�������?���;J�ua�l� #�ao&��
+
���?n�֟ΨT��5C��Q��������:W���")��v��Es��M�|�(mX�&�b�P�C0�S�����H-E9f�(��PZ������[ٍ`ZF�y"ٷ�Ҭ<Cy�� A�Fd��X"�f�
+qբj�_�M4
\ne֢j��	ٗ-QkG7�:2��[e�V
[VC(_��ؼ���Ã�RYV�լ;ȳ����ž�SMGU����֍
�d_��K����/�)�!�/�*
{��<��1ē�ëVSaЅ�ȷ#RRֵ��!�*�q����QX-Yu#dX<U�V�-�պ�w�]�9��Uc�cG�%$e�JH�J;�<�o�_���\�i��O>C�mV�aਆQ��*(�c��i�-a"
+���<C���is�ç���]KM�̩�m�EfYeRY�

��&�$���<hcI�P� ��*:G��o
�22T�<T��I��)i��|�9�i�,M���q!r�1��{襔/�j�W+�?e+��/�V�\x)��?�
��K��JC��8���\�Z��Q

i��B�f9<�C?
�ay�yCw���E��VGB��)�g��:�”-�[
t��߉�I����)��t��G��Rs�U�r���_�ފ~*mn�&
+ɵ]�W���s�g�4`/�ďW�Iۆ;��Q6	0��*N���A�&K w@W
�a�\
��,�c�&�<��{礔���-���f�4z����-�Dz�7�(�焉�]XfY��]>$ 9�]�o<�B&�	�
\K���
��}����#��
������x�*"���S�4��m6q�9�

Yfb]e˫�!)J��Ȯ���ˆc=
�<������/�|��(��m�N<3�`��"E�4	&"��4}ewSxf,�Y�-_2n�~�
n�{�F
�r�z5G!W�7�z]M������I
%	��K�)<
�m$�Ι
����x"��8
�}1�C���<�O�T�zc� M
�9
)]�g^_tH�?��Ot��,I��<x�F}�0���0���8��ۈW�$3����W:��
��Hnt,�y���Y%���\ꎳd��Q�s�|�0	�{�1R���R~�ap{�)Te������{�1{���Y\_*�5wt���
��f�x�T
E�E��'��.8�%�*���
ųJ��n�da�`%^ 
��ŋ��#�A��ʘT���6��`�:�Q�/�?t��|�ٌ��S/��ҋё�k��iͽx�7�"����I.�GG|.AS9�:
� �͡���K.�.���{�����
�����Z>:�!�Nc�Ro
<
�3��
4�k�&{�d?�<w<ޔR0��I�ߙ^�VtE�\���})�^�9�:�f�b���O��w�V#ηm�����d��e&��y@�J����(W��#�^/��*4�o/�+/����k� ��ADgc��0RA �kܪδ�H�_�d
G�𪰯N*'��6��o��y�>b�0$��?w�&a���F���:�b����=v��|��)։fX�BGW�
��(�
��ݢt/
����}0I���2��Y��{�Z�C�{S�M���[��٦�����hsp
�p
���c
�7ݍ�
���}���~�mn��������e�ٌ�U�ۖeXy<�/(��t
y��Q�����m��Y�k� [...]
+,�ߔ&]
}.��,��Yz<M����	r��Y��Rt�%)��oB]�$
+��&l�mzϒ�-��0s/�3嘣<�,��I
�y��G1�ޤ�p|���4*蕷�#��-%es�P,_-��Bf�^������퉲4
�
��k��h�����&��r?[��+��
pӖE�/��,^@�J��R7gR�7�?2m�B�da}h|9���bh����l�&�ax���U��u6NX*D߲0���]&�!�+^B�z��&��8�
B�A��4�
�vҗ�g'm 0xP:��$;)��
w͏�	��T=:����zB�Q�3�Eޣ$HY����
|��ѻ��4o��^���k�f
!a��B��ފŽ��G��v(�П�e������wp(���<�fiۈ�tq
+�I�H��59qX�DG�

���A���P,��F,O+��;���5
�#(�������v��v��F,p��5��	�F�ulP�Ѩ���6��7���q"�9�j�p]dP���nq{%�R�!�-�›��:R
+C�����
�*��p�
�W��FL Yh�\SŚ|�rFJ����R�3�����

;��W@���Zli�C
d8��]`n`#�Q��7�,P�"�7T�u�|c	��n�R��J�ҢB�EE�k�j���L�h@��l貶*�-w�
�5��I
%�#��$�F
ת�54��A�Q�</6*ц=Z��XRFMO�;��x��_w�Q�#��a0�O�����q̩b�����S�I�N�^�Jv���D���p�Dg��*6XǔeL��bX����CXi�i�1�J�؀'�
	-}.0�V�`XŪ6��2=�y8
\ild
T0�TBn>�U��B
F<Ͳ8,"`�)e`y�Ka��

/ů8/�#9+n��

�~cᒥ��!� Dp�_�0)ފ]	�������ʁ-1�w��Ie�>:W�)���Q��C�&��873�����"�9���
,��Ii[<�`Xhx�f�0�=9y A�@�Q��I�a(P_|�;<��W�t��8�5��C�a�|�q�����,��"|�a�
+f�%���a���D���m)ӑ���n'�)��U��
�q"H��X*
��Frb@�cV;h��(\�x�[E�
Ɠ9Q�
J
C�*�׵ `h{���� �;�N����c��������4黲<�%g��`Yb
,�\}>��n�,��?M�	�y$�ە�0K��� �@~P	�B�����kXU!RWC�m���K��\��BJ�[��Vv)B��]WS��ϞZP������'��z�
�#Ѧ�c�?�’O�:��b�>c"�6SgY`
,�]Y�t�m�dY`
,mgG�;ե�7YXK�w��bI[X��,�]c�S�iK,����.�
�	�O��p��lp�o�j�?�6�J�����vj�1�Pn]Z7��v���Z��q'�ЍZ�/����������O�����vsz�F��R��Ҳs�Ɠ�}����c<jr,�t[a]nC��-9��kH���:Y�OÒ_�(v�u�aWw�}0�M96\c�	�#ňA�L���/\\]l���
Uz͢ب@�k�5	*UA�j�K��X)f6T�}l�s���h
�lf]a]Y�[qz��,��,��R7��6����9���,AW�1/(@��b���M��J�Ͳ6s1��ʨY���\�
�P��YT�/����9
UuEmb' Kvd�
�x
��U`��6�����LL˒2%�ndz�i�,XG�a�9�v�g���X:Ot�Y�m��Ra],m�/$�?
�
+�bi���Zr-9a�
+��fTc~�(R2�Q��wЃ, ����`(�G]�V^^�>M�c���3�s��O
��|e��2޺!{pC���/�!<�!|ㆌ�J�&�Y����S��M�Y����€B�t

AV,�I�����"�	S��|%Xi&5L�7u��+UBuQ�\�l�:�KZ�5�ܻh�O0�]�*�p�gŷ�&2
M;��-�x������>~�d-芨���
SI��4�}�f ӷ�9�0}���ПA=���ǟ�:��!�����R����<5��5a��
���9�|��yd�����>o
9���˧2x�ѥ
�2����*y�Y���~СҾ���q5�-�?�E����w���ν�u���=�q�Q����"/3��9m�U�Yc�CX����|�-b柊�`���5|��dȇ��D>n�O�r�p��Ϣ:����Q=Gu�EM�J��t�6<	.
J�L��4�+�T�'�
+�Q�r����({3j�8j6�Ѹ���j0���:Śo�*�gR�/f�{Ǒ�?[q)��݂
��:$M}���x�y�4����3��N�

�Y��gY�
K�?{�孳�qϲ`=���+Y��ꍳ�|�f��[�Df ���٭�W��FHʷGtą2*p).cbN7�R���U��nf��9)f�s!����hzA{7h�Eȓ�<�[��+��`�т�s��vw��ۧ[
y�s-�} 
/yH|ʓ0O�E�����a������Z�ќ�����.5eVע��{�������O1S���C΀���fg��`�SKD
2��
+�S�5;oU�:�Tw���:'I���C�k�W��BSIy����FGq���V�1��������]�Z��bͻP%EXa�3���ӡ>�K����r���Øk1�^�
`ˍ1��X�ci��t���l��ؼ�����4
�h��Z��&
%���:�(q��M���[�&
��[��g
���>�[a���t��\��Ԏ&�L^��
+���,QB��!3���=
+�OG
[��#˘&
��%�R�FbK:��7X��y:"Ժ�ΐs�D"�!��P���S�����I�(MW/-�b��W�,X��k���+m���s�5={u9��"S��e���>��QsP~9\X�o*��U(�J�T at j{��$]^�i���KV'��u�HYZ��	ze��J�2�K�烨,jIQB��Ą���U,4=@�	u�ӧ�+>�$�j���J?f;�;i5�����,b[����q����
Nj�]
+XӎH�d�X�k��%K�{�۰���l��0UK�3VƖ�i,4��|{�5��������1�:��6��J���;h��}�
HO.��|��$&�0}�����M|��"��̣�C*�5>C��kz�_R|�%���|%�Q�،UQ�]lf�(�.�����
+�����5D�7�W�+�ނ�6��>R�D)f0h���be��!%
��`�W�Y1��l)	�
K�*��~�9"�]��|�yD횫�6�bt�D\0<�K���`�
��*c.^���_�>Pّ ,/�1�b���
`Ф�$^��=:/3f׃�_h���Lڋ�`��T��ƻ	h"� 
 ��dA�����)���aW��o*dgpj���>�~S�Ȓ�����磓�Z�C�IM3��"]y"=���"[�bI�[��a*�MH��C���
Z6��$�
)x �MI.����0���H����� ��
aA��! ����:REd��a�
���H���zCA�w�V]U��@��賿w�Ez@�F\�
���v�l_H�.zݝK}�+C�ԃ�.���aT�bJ�ژ��R�s
�J�'R�VsT}���Q�}E ��QǸ���B�F
�!�,k샷��2��&t��F��:ҁgB��p��Gn���r�7q���bԌ-F}��mH��>�e�#�N�Y�%��ua�啑��	y��B�bzV�Q{!@�!@�E ^V�m�
�m�m��+}U0�MK���W�P]�a6y
8>T��W��E�����Nϑ��>Ǩ�,
v�R�s
�E3$��l��<���OJ�
g
w���a:�W��uj۩���R�f�z,���|C��*<E��E�E�
,�
+�~Q����Xd� �B6�%n��](��Q�(��Y[ⴄ"d�cA҇�ز,�Bms<�#.}��
9sp��Z���J9r�����X��R��e�� �����m(,�` g���
endstream
endobj
31 0 obj
10349 
endobj
32 0 obj
<< /Filter [ /FlateDecode ] /Length 33 0 R >> 
stream
+H��Wˎ��7���]�
+|��2������x #��g��s��$^�%ռ�6�t�����8�`���Ɖ]��Rf�<>�𨦧_
��OOF�Y)=1���;�������ӟ�O���;y�,�6�����_MO��
������މӻ����"//�x��h�����"��E���Xb7�������gV^
c�1�%h��k����/�v0��#����� �8��C�:Y

J��-�;�b�M	��&�iBܶ��H[WV�
X��Jze53Go��z[��JU��cU��ڙ�*�0����Pʃ5p3��U��z?�u� �&�}! �uqrNhè����I��ZC at a ����cX�]YU3�}��*�����2J� V�n}9��2���۲4�5�795�����˨�n�AX�^V�y���.E.K!`\b�ss�0ʘ��t��7Gii%�-%r�>_���;���.%fv3��������b��N4�
�t�BM�[47w�ݢ���b>�fF�1��tsUw��ޠ\:��c��¹�#�إ�x�SlX0}��*f�,��\9���}ABb����V��
��ÐA�3g
�5��O��n��U�a�B
+�N��Y��� ^��9��:�ΚV�Ak���B�q�"]Ɋe�
�����)+��D��{w��z�d�
+�
=�wq�LE+�6�*d���o���YX��3FT�)D��8Tue���`���a�Y��*weПX�T=W�F;�9��h�<��V�vYs�
+�5�U}�{�����p$	�r<�l&��>Q
g�����XCx-B2�k�f�hR�����
r�E��j�A2k�1�f�
���򍚝����
���
�
4$�pN���Lɯ�#ǵ?�oIV�#�^��T钨�x���.f�|�Y�Z��t�
΋;�Q����7�-x.]�0]�l�Lc�
읯q'f5i��(f%j��hÊ�(�ɘ+LW1���u�9G��
�U5G~�*�b��|e_��>����й6���Q�a���e5��}�A5�D�>S��тU��j��=⪛�}S?���"�� S�4����U�>��)��fZu%���
��vMS������z�4��S��e��S�
��-���4�Z¿/��r����(�(KT2�u��r:Y}L�־�����Cu�V?�����J���Y�l���d7&�()�������Ɋ���j��P��/_�^Y��z� 0�1X��Z�.}�*���Lz�xQ���E
�5V�ڗY�C�؈�����u[:J�&ƀE�
�%}P�$�q���Q`c�*���Uh1Cl�HN��b+���]feD�X��UO?Cc��6��,�Z4�
����;�~{
+��t\O��>��m�y%��5�ʼn�����N�Xi�-�n��;�4��	�
::�b��뷷��0޽�	�<=}��3E��>J��M�@�w��^�-��
�. %�뱬Z�s�O�j��C
�Y
:!K�P��c�`d	��w^^�U/��~���N�#��dG���
+A�*&7�4"z˓��?.�-��W6s7��O��9��5��L[�R��6K�~8M������M�MZM�>Z(!)�r�A�����h����4W�wka�L‘}�oeTc}��P��-��d�ce�\[��~ED��d���\��(��
��9������W9�lW�!��`������ۘ��K�E.��:LgW���E}9{��Y���
l�H�/��a��@�٨��4�o�o�_`�q���&ܰq[6Z;�e�=�,�:d3Mn�;��&�n��ˮ��Ն����<63e�{TW��]dRYM�J�g�s�ar
ɚMe�$=�s€�"�m#� iv��D�
t�V���NF>�Ċ�|Z_�p��W|���R��kqWb����n���9R=��"�����ȥA{Y�+�rڭ�aA��
0n��
�_�}��ա�O�j�
+^�@��ɼ:�@� ���%�%3�x��z�ߝ�]��Ȼ�ޭ��u4u�BV��N���Ma;�H���Z���lm�ul�^��+j��)J���5��GH7Q �5�f��A!�R��
��(V�m�4�
f�ZI&�N5F��	[�<b7f�I.w$m�𠱩3)\�P�C�)�$���=��KJلF��VY�n��)a_@�L(��	a��
n(a�	un
Ǜ8�E�gVtN��Xye���� V�o[�A0����
�I�	ֲ�+Ae�{
+�}\ dcJh�)a_�j>%�
!
��g�d���M�
�����}����l�b
YF��&/Z��x)A�g��o���
�`1�W���m���y�Sx�+Fgl�
*������^����K]��/-
��а����ޑ���%�)5�J����(��,�
�?O
D�S����8�w�"/�K/� ^JЗ��-/�$��8rG?qq�⻾z�c6�(V��e�CsL�lMr{ /%H��.�����!g�ݽI�-���
T�k�<�U��ܸ��<��
6���ov�
B�����
���1��86��Z�Ӷ�EG�ǥ�ԑj�P�[�| /%H�h
��?� F
��
�/��ʘ���ة�s���g�~ǙT�SoS�{�J*zb���U:5�z��\W�b�	M
y�:4eZ_T����M�Έ����V40MY4�;g��Sهƒ��^����/
@��#A_��y��w�լ��	kߨQj6l�#��j��
�J��aØ0�)
+�m�A�[Y5"�lM9趌w�5��ڕY#�
X] �
W������E�}�e�[�՘����o���Ϫ#�
+�%�vH���?e��YZ�V�}�bsy
V�	�V���*V�ː���?��韟�񟯿�������	QEC��:��Fv
��O��/���?\���іe[��3
&�߷��ګm�����?�ŀ���N�Ov.mZ�1��C CQ�� YJe9A��3$wɽh/��
8 g�g��,y�<a��`���Z
���}���_���|�\̉%zʬ%�lʅ?t���?ÿ�$�@8��=��
��
�
AYz��@�mP��v��%s.�"�p+�,bu��6�S0���_�mr�/m��
9�v4��-r�9��6�S��
+��)H{��	bZ1�÷��"fCM�^��>ݦ<���D��H��
��m�W����mx
�v�4�
{>��̨1�YN�
+t"&@*E��S���e

}X�n�
L]!�˲F����m,A�����t#�N6���e��~��'���b��A�'oʙ�A����"�M9���ir�69mM�$�nd�IFV�3!_����EN��w�Q]��hܠ��U�;�E�da��^�
��	�u��
j�
�}#f@:+c��wG�
�rqʭ�A
�/az�����l�Q�O�C_

:���O<hP!�iK/�>�8�4+�P�D�I�'�
0+mO��P0��
�昦3�Uu�{^R�
���p�kR�<;��pDZݱ�߃�@��,e)V]�Dse�UWj�UMWXu��͕���K�XY`���e�MV>{���W�,ë$�����U1Qb�c�V��+⽞p�
�ݥ��1/�Y�)�:�	�|�V,~����[��Q��$pVU�ٖ
GO0�h�D��g<$�l|�d"�ɒC�`��� ���-b�u�?�^�>H\`�*��+��Λ%4u'���\��J.Q�I]����ee�UVb�cB�� WV
=�$b��1U(����DR6�!b��ي�R_~X�E�
#<�%M������{£'d�z�<V0�ֵc�D%y��]�)Q��V΄/J*�8�X����Sw'��c&#��'3�JAaf����lTX��2&�f��%�
������8S��Wt���d4�c��V0��O�Y����K��{��Y�(�$�����z$��a�:�
�Ө��5 [...]
+&���"\!裆��+KN�)V��ǡ��i���x7
+���k�-"�Y�-z'0�
I@�Bj�7�hϔ�̹La���R2�R5RfL!Qly�M��pD���b;���O����)�+�a61��p'!����;�Iw�r6�Q@,
q��n�e>n=F��>�7be{�V�s��\���gV��X�0/�b�d�+c�,�a-,f��w��̵�s7"��Vۆ����g��KY^���X����A��Y��߰���Pj��Phd���
~WU���>�Ǎ{h��q�e�t�/@�o�R���
ʬ�*�Y +��>Re�#
�T`�%������8���
�v��P�~�h���R��p��T,He
+R��d�����|�
QM/��G�~�Z���w�XgF�
+�4�NE*�|j`�����	�
+@�+�As��Z+��Н6o�أF8�7"��;Gh��js7_��G
�esKk�ٯ�7��*����\�q�(*L
��f7_-{���_|���,6��(&�'��&�R�V��v
+^�=�}.d�
��sȰ4��i��ކ�:
����z����/�_ܜ��<�tBF]N�q�3�V�:x�;2_���9Niy8i�'�c�E�Z���0�PH���&|T�����_�犍�_�J���׻��b�����e��.���
7ԟ�'я�;l
v�AuM�|8^�ɗm~���h�B��O
�����d���
�e������b����N�nrtsv�ݽ\.v��z��N�O�
�
����Sr�w��%������f7ǵO�	��	�%g ���7�֟f�������K`��v�\�@��~�5'��C�_� � �n5t�y�
�Tn8:z����� k��	
endstream
endobj
33 0 obj
4773 
endobj
34 0 obj
/DeviceGray 
endobj
35 0 obj
/DeviceRGB 
endobj
36 0 obj
<< 
/Type /Font 
/BaseFont /RHMHWA+Myriad-Roman 
/Subtype /Type1 
/Encoding /WinAnsiEncoding 
/FontDescriptor 37 0 R 
/Widths [ 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 
212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 
230 337 497 513 792 605 188 284 284 415 596 207 307 207 343 513 
513 513 513 513 513 513 513 513 513 207 207 596 596 596 406 737 
612 542 580 666 492 487 646 652 239 370 542 472 804 658 689 532 
689 538 493 497 647 558 846 571 541 553 284 346 284 596 500 300 
482 569 448 564 501 292 559 555 234 243 469 234 834 555 549 569 
563 327 396 331 551 481 736 463 471 428 284 239 284 596 282 212 
282 207 513 356 1000 500 500 300 1156 493 255 894 282 553 282 282 
207 207 354 354 282 500 1000 300 802 396 255 863 282 428 541 212 
230 513 513 513 513 239 519 300 677 346 419 596 307 510 300 318 
596 351 340 300 551 512 207 300 319 355 419 759 759 759 406 612 
612 612 612 612 612 788 585 492 492 492 492 239 239 239 239 671 
658 689 689 689 689 689 596 689 647 647 647 647 541 531 548 482 
482 482 482 482 482 773 447 501 501 501 501 234 234 234 234 541 
555 549 549 549 549 549 596 549 551 551 551 551 471 569 471 ] 
/FirstChar 0 
/LastChar 255 
>> 
endobj
37 0 obj
<< 
/Type /FontDescriptor 
/Ascent 831 
/CapHeight 674 
/Descent -250 
/Flags 32 
/FontBBox [ -46 -250 1126 831 ] 
/FontName /RHMHWA+Myriad-Roman 
/ItalicAngle 0 
/StemV 88 
/XHeight 484 
/FontFile3 43 0 R 
>> 
endobj
38 0 obj
<< 
/Type /Group 
/S /Transparency 
/I false 
/K false 
/CS /DeviceRGB 
>> 
endobj
39 0 obj
<< /Height 128 /Width 92 /BitsPerComponent 8 /ColorSpace /DeviceRGB 
/Filter /FlateDecode /Length 40 0 R >> 
stream
+H�엿kO��/+�� (I$D�Me�""�DD���@�h#AD,,���
-,���>�{�����s�nr�>�0;;3;��s�s&I�ě7o�ܹ����t��$Ćx���'_�|ٳg�?Z�Õ+WlD�h��G����D����������':}���������?u�Tg��
�oHW7R�3�>Q�a�8I��;I��6r��s�*~��+)���40<<L�����~M��%z�v8���
��A?a���*l�

��pQ��}}}2��+����$(�:�M�P�������xW�1R�O��� l�	KKKxH����
t*�vYh���
1ѱe�VA���W��}B-�!/�W{��M��l���񂟠�[�鮅�l���ݦ�����u,���UNH�
+������q+B)	�B��PՠV����&���@}�w�-j��,��-��#�LB�	��#I�*7�����9",��×�k�
�Уڵ�5$�����y<�z���G�Q�
�0떝
^~M�f���ے
�
{�O4�%M[d%y1"R`��
Y�ǨV3T��1��Wk�=���
���1�d�|lg2�/�[��2N�&��Y4��ΖU�d����%ǿ�|CE��ӧ�Ad�ȵ��i�ōq�\mh�9
ۄ2��N�"�Od%zHY"��O���	zKk��[�Ƒkv� E���^#��o҆8����6䝿\I0����T,��>�VCVS�{?�
J�����	[���R���kѪ~nje�
�fhu�t�M:R��' ��<�E�T��\�T"�l{y�U\������\�� l?WQ>�
��rT�J�u�n at usNR��U�8��V���������'ju7�����޽'V��ڵkj����N2;;�vnn���um�"�X^^N�lllP�����'E}��DT)0�(�]__������
fqqqeeE,������^}б��9��k~Uoem�+r~ D8Ҫ����4x���`U�4�ň"ň�#)�.rP������X���%������-� �|*1x���̋/J.J��rI^t`�}��~�b7G%ё#Gr��-�٧W�)���ؓ'O*��X���iW�Ԏ��k�Q�5�ф`IR-�w:6�`2����4�*�Jrq�}z�r~dppPB1<<\�Ї�\K�


���
�,\����Xg���/_�U�Եg�]`8�"�P�a$F
+�d�
+W� Y�
|��ySRHD��֊F�J�
'�QT��qd�e��cQ�]
�&@� �KH][�b>nƍO�ݤ��0�
�����>�
6q7��I�23���>���T @����ӪSq�z������ݻw�<
k��ݖ���Ǐ�YN�#{����޺uK�W�T��9sF�?11��G�[\�
9���׿F���M��v#C$��R���@��
?1��j,GFF�|��^��`��"ɦl�HK��rQ�ˉ/~��Hw�N�>�c�8�i����ՠ
pb�f$� �����rӓ,}��\T��L���l��L�vɪ�2Y'�E�A�-
+v��C��֣
 �,-�"�OA�/�VpRd�?��w6h���
E9��Y���ݤ!�
&���~
+ì�eQ�'������}ھp�$�H�3x�1�Ȩ�Tccc��}�i�E�_��
��]�ևT
�ɾ}���ŀ������z��ի�W��|�Y|iIP��+
�N�{�rZ[�=��o5Eq�
�v�����������߿_T�>}��%�+i��\����ض�֎��q©�)H�&����kn�3P�!��8<�\�0�C������Z�033S�믥`�2�֪Dk'Y&g[
��Y*o�n��h��
�G��V�F�?Z�'��v�)����ED�6f%���. lhA�ϒ�ųDCJ�v��ָh)�$�r��M���'|]-S
5i0��='�v�V�A�|]#O�<9u��Ν;)-���ijg��$�ג��
JLv6/J�*�|Io�Uz SZ_�#
��T��\YF��۷�>A�T�I�W� �GxoKKKEuT	�W5!�9%�YgW��:��ܜV!���2I��Xӱ�>}�K���Q‰'?��ܼyӧ�(� 'VY��) �. -,��z���M�w�
Y��BZU�2�=Nj��gϞ�n߾
���4q��?f/
�޽?�Gy��䤊������x��;�m�/�1��!�%Kd2QI��UH�D�Ha�U����B�EV����t�������?�����
�TZx�����`Kǫ+�Z�D�e�����I�R��N[t
	�Ç
<(�>����N[�b�
��P��?�(��d���/صk6��%� Vb�?�-�D�-�9��+a����Ĥ?ld	-�:11!��Us�p�T��9
/��Wh�i1�d/w�)�Ϟ={���
.����[������'A}ҔD)�o߾UE����
������#���E���$�f˥��
�h�>��fdddff�ܹs����IQio�l
k���� [...]
+'�>��D9TnMCIb�Q���i��'M_��i]��I>��I�+�1b���մί‰�#=�I��U�pB����ʳZ
+� �͉�q�
+Y�;
�y%=��T�C�
�|�6P]��*�J���������N-0W��n'��ôٵ�y����Em��w��F^�~���
�O�<y��&se�&Q֧
��E7��N�����pʹ{-��;F������sF�Rω-�Wڦ�t���:I����k?L�ꓦ�ػw���Zɬb��ӧ�\

����K�'��5�T�)��r�m$}��w:�̙���'���j�СC�V#:���89v�>644��,�km�$.?��tL at v�r��� �#�dvvq��-�i��	,�w�2b�59ңnRV�t��ܤ�Em�_n���MS �����4;��O���	~�%y�"���x���һ�(�Tt8�O�'I
�b~�%�Iu�O�---�D4?!U1��9�9��ZZBB���O��4'B��x�'=�	��:+++��] ���Nzb~�(mP��b����j�_�~�����y��W�'�3�=���h\__�a��P?W?���j�޽��	�p����'v��o�\�8^�}G���"�`�i[H3Nn��U���W���088�Ǜ�E(��I78
���xǞ��U_�GZ�MNN�Z��ߡ�!���K~wS�ŋ곯
�x��.]��Ր�i�W [...]
endstream
endobj
40 0 obj
3412 
endobj
41 0 obj
<< /Filter /FlateDecode /Length 42 0 R >> 
stream
+H��WɎ9��+��}I��
h�]n3c����

c��Ue�dU�����	�BRɰ�ۡ`�3��1�7O�����vz�Z������~������X|� V|Zx���dB/^ܼ_����k�6�S�/~h����_��"r:>��������������i�������~�


��n[}ï�O�ӱ�
@���VJ(�tWmO��v��}��u{�?��j�/^ݼ^y����

+V�⏂��
b���ߊ��X�X�?�����6zx؟��]q<��C	�9[p�J�+ ��(]
��$�YݢƷ+�a�)��RZ&
ZLP�J� �*�s��v!�u�7���u<��]ܚ���@���o}�`6`�l����(�-3�@����i�~HQT��Cv�Jc
BƖ�2�ݲ�yJC��+A�rӸ;A�`�I��mW&��mw"��!eZ
+(���	鯋�A����.��Y���B	&,k!$Y:c��:�����ץ��E��r�.ڍ��:A���ݵ	r�a%����H�s��3��iA�Ҍd}05�;�G�~�AuV=���
oM	d����>G1�Q���s<5��ޔh��
�O@��Jh�&�!��
 �<VE�U
+J�w /�q�4�~��Mb����ͻ-��?�;Յ�����S�fۧ�/����Vg�`����x�������a[�����m���#gH��}Z���=6xm��^V��G�0�p����u{�߾p������������>H�7�_�b�����}��
�}�{FfV�oOO_�ak�7������?�������o
V?��q����f�����
C�b�ǂ�DWA|��U
+j�����!!�u��څ]rAF�]���V�J�����SB�� A'
+�q�򅲍X�:�
+�}Mթ�)��㝵��W
űDvE	�9�vAD9�;���

+k�x�+W�RNy�/���L�<�+��{�9��kByW|!�9�R�[�:V��R9�3�ǘ�#�hk�q�]f��d�LA�<r:��ݭRД�	�
�ln�ƽQ_X�	�켻�N,u)9U����,�px8I����+�W_�12�	8B�]JyFD&���2�	8\�ZJyND�	�	8\�6
)ω�87�P��Õݎ�s��D�rG)w�ۥ|����(��)>wuxJ7[yNDe�u5�9���s��(?V��Bj:"*
��qK�qs|�^��
�MG4+n0���MGDu��j��W�U5NO��������Dn�.����jr��5
8�k<�cq|_��<'��Wϔ�	ʕżY&#��9�v��q0� ��8���
v�e�='��o �Gp�r���T���-�]�\�-Ӻ}�t(�z��)<� j̴+A at X�a�"�ǖ��ɳ��`d�m�;���`%�Eˆ��ll�JT&+%���{�{�B��������+���|�qE(���L,�<'"3c6F���/=A [...]
�Q�d��JA0�̶�-���XW�Hѿ���V��d�!�s�����
+�Ҩ�����q��Uz�
��`�����.��z۵p`x:$2*
�#�0�3�
�!AD�!�D&��f�4$��4�8+��#8B��
)ω�h�Y1W
�ʕ-�I�yO$�h�ȕ�8�f?�"2jJȥ" '"#@R �D�P
)ωH���#8B9腔�Dd�����v�vM�cL�3I3�`úض9��
+y�z9c��dw at C�MC3Nl'm;QW��DF���Yγ����ɉȸF�UG��e	3��DT\]V��X�q7��u�QLS��v��
+u{�n�'(��I�,�O���hB��]� .1 �\��������ö��
���

�����}O/�!��b�+b�V�v/m���ǘF<�p���=�/�i�P:�0if+!�&\��,���z&�?ͻ���f��U
+D�]���"|��s�E9ل��<�
3�`�"��
\LUr�1^Vy���'0�4A�Prg�!���
�H��&�"'�R�"�B����:6Q���Գ�:�hBti������iTid�w�SN��(��u
0��yo���+�`����`�~�cx�m�rX�|�cd�I�q���v&�/�4M�Qu(ς/�9!�c?t%,ڳ��=�Yz�g����	L����3WO�iJ�38�(�,������`�VLN�
��ɩs�4�ۇ[
Y�����D��J0�l�eZ�{`����j{	�ۇ�`P�j
+|�.P�{dKpCf~	�1��#���g��Gb��B��%8g�B�i���н15�<o�c���h�4��Q��%�Gp�r\�Q��>W�P
����2�s"Z9���)>���L�gDߝ�Q�k�B,���
X���U8n'AS�Qu,_sKsN6�{㽳�`p7�4L�-����=����`�P�����D /�T�O�C0Qz���F7@�H�����]��!�bMe��6#ds�)W��^Z_��5+g
�ӄ��GQ�����C��	�)�aȢ��Œ�����'g��x���q���`u��i � B
+�K��8�V��:�
��Yk
X��,�rہZ� \u��>��Z�f�z^NDNH�wN�����
��@��BE�.��9�ܩp1��,<�L�M�9X��16Yt� ���ް�;�
s���OU��t��>��2��C�x�g`b(L�׽!�!fe
+AD{Cu"��yCug�@��<��@
��gCv�7Xx�<odD䬌�܉d��r�c~���h��MǙ���t��a��P�Y�ȉ��z�$9r���O���X��#<� �x��=v���d��)�*��u�X�$	ц�i��
шmZ�`9�o��A[A�8;x�hG�%�
kј��h�G�\�F��,gleБ
�ht����F���#-Fc"z~�*a��7p;���JL��S
+	ߧ����!V�~���Q�a��
|Ax�
+��E��xl��j
���3��"�I��"�:c�Zp�Rw��������P� 	�/��2KA�
�">��ԑS?��C�v��I[cKƓZ�D�)$<�k3
Kj&"E��>�&��&LV˙�4z`6�G�
/kzf&�	�6J��.��!w�8��۞6J�� }�ӣDh�PZk�3��мž����=���E�g"Y����r�^�|&�{�wpT�5d�iM�m.\m8��#��m럋`��DC
>s�B�IC�����+
�KmG`R��Βy�!
L
+=���R�Ph���O��ۇJ~��ϯ��������_����?.6e,���;���×�����lV������)�`����u����M�̤�t��Iqy��w.0)�X6����$W6��rjŕېZA�@nC*��V�
H3�7�|X?s
M��K�f&�9�fǛУQ}M�qr��~��8�o�OG#�C�s��G�:)r�0\<���}Ǣ������-�8�(jIFZs
*���*0�o7�$�س5�
���8S�6^@�Ǎ��l�Z�=�}>�L$��������v
�`9cl��@ۣ� ��ο]��wk�l&�r��$�Q��2�|;��
+�
Ԛ|
�n��WZ�ں��m�p��V�1L{��;�!�meg���q����+Y`���v�v��oA�n���DRE+��S�{T�=W[�� ��Z��VۈR@��a#W�GѰ�h{�����TW-
+b۲���J8��������l�܊�u���a�޶X،<8�D��{��՝��
uל�e�ã���+V��
+��~��6��
��o�����j�D��wŁ���<����̘\.>����`�4�E�O
����/����z�x���F�0�5o"0i�C����X.�ǙIx
�7�*,DI�gf��6�-�Tċzf&E|2�
l^�#0)�z��
.,z�Iq_e�e�K�zo4�|���S�Ve�`�
Q��I�]1XW��[�F[%&�ak��	�6�������]��ci�a��
+D�G�W��[�1�*�#g�Uy*S��m�P����
f�e��d��֦��b�S6^���b��ôw�������^��_w�}%
���
%�)lAM�yuG� ���W����9���J�@9<Ǭ��'����y-�3��]՚">]#�^�ȡ�̎	,?9[�t�G����f4Ben�3�-��tG$׷���������
�#��2�F��2�*o��+sE3jb`�Z���ݰ��,ձ��ح2�+����o�yG-j�w��#�i���a%
���U�[Y��E
�}^ߢ���)*st/�̍�r/T�>�܇)�D�����o9���J�
+�,(��Sʣ{��J�Q�w�1����Q��iQ�D���ր�2�L�}�}$�ǟ��������Q~��������H`�Ͽ��5W�3���ۥIvmQ�+f5,���Ӗ /��׃;)
������֙�~$gfR\�s`�¾��=3��lN�g�w/�Oc�ħ�l��%zӒ���DOcR���X,�I�j=��}�,����z ���
�^��1iޗG���c͊��Iw_Ƥ�1+ǵ��t�pgI�Uz�FO�r̋zf���K
�b�B!�V�R�RJ�x���?3-]�ϋzf&M�ޢ�XJc�q�L
+=�5��?��dGSo
�

i�L����_�]li��}%���@%
��Z=�FO�ȣj�Ŗ&0���[c\��I�?�%�hy]Oc��������W�r������p�
+����@����\����2�Db4�c�Z4 �#�~ m;#~�A�����|:l�!�R4f"�����X��n���&ngdj�A�

g��L�����B4")7���=��(`<��0�3�]*H#H���|4x
�R

+i\��+;���M-"@Ȃ#�~���
+���T9?�d(m[��H�|�v���+��ȡ��q�MX��L�?s�DŽ��K~Zbz��,�/Eg&R�q��kq9p(sֻ2PX��ơ���U��$-M�"&�^{ꇰv;�TY�v�NQ��R%&�KE��A���tl]V�����/�
K��Օim�̤�*о�G������O93�">���XR�d��S����S�\8U񍖜Z��$���
f�>6�����C�`��O�hN��d�
_�J�t;��rߣ��}�F�����|�� }�����u;j�R4&"17�Pcb��QL X�m�ե ��mB��~_h�+�-����B�Dž�'���m�5d�����o
���B7�M�}{|)�Z,�ҥ�Db�b�3���`<��#��3L��q�30�N�
�!�[��D$�h�"{�����|
`/_��4�#H���|��v�6.Ec&���)�- �|?���16Ў }���pf��
��ʗ@�����+�d�&�@H�P��bP�8Z^���L����(ً�2Dy�=f&����ʕ4]����}�l���ĤM)l3X��`��:JL
+�ϥ�����iI�Ĥ�֭�:.
y�����e�c�.oJ:��f&��|c	K�]bz�}����(��G`R�<$3��
���H3(�kgNa�(��M�AqfRd�6n�61y�����Ȟ�� ��
�}�rf"Et|!��L"�R���4z2�<��Zx&E6c>I.fT�@k���/��=���‚
�I*QF�ن�dbP�f�I�?��8Y1�e^�ƫ�#0i���ŖSe���HQ{,5�
R�"��9�{*
NmS"��+	�XZH��H���
]2��uP`R�s
�[�q��#�[���<&���jW���~�fw��` $N�r�*�T��ryu�Rx_rA���r9`��F@��1�47Z�b�)J'0I�N�
T�#iO���!I�ī�>�lB�i�$y
2HJO���G����b=�k�8�Z �t�2��Ƣ8�$��>�<���Hg�dD���i�&��KmL�_��:k,�_O?6�=�V��k[�+����׀q
{����$@�HP����.��H��@	Z�� 
�H@ 4c�m��wI@\�>	>|z}~�����yD|z~���ߟg�HG?e4R�F�����
ӵr��M
�Z�(>}�=����=�Ѝ�l�U&&�]��`�������^6
��
M�J
�R
�y�P\� p��Z�K��ma
CpH3c�)ei��_OZ��\���,��i7���"V�Xݞ���0����|{���*��d� 2~�lk`���*
Ƈ�0��B�GU�O��H�8G�?��uZ��0��l)�����L�ۖ�`�)
���a!�x��QA�ԙ
d!)��tj�|��	8`�f�ϭ�J	6.l\F&�ՙ�
��e������id`M��J�I oHC�
�h��X���!qUy�O�k��ԧEb�DL�TJ� n*%��h�v�����o�$o
���Y���q������e�ö�� [��V�خ3t��F[���,[�Ÿ�����W(\�������vet./2p.ː�p��_9t��>��VJ�A�^|������ZJ���\���4@6�K��&�u�F�<��<��F\D
g(3��Fb�D>v5�� �v�sZ�����b��CY��7VkL�]?߭���L
����p�
#DO
+��C�+��s�$#.������I��H"VF}�3��{
+�!�6�31W��~e�eaT�_���6�{F|X�9�RDv��qe��I�Y
?��xYq�ѻ٨k��g4�`v�//Z �
�B�dG(>�쨌%;��Fj��g|<;�a���e�)�#�(�����"E_
*I�"��������v�51jy/e�$|�@
3�
mV(
� �H�(��
� n�t���������zj���F
ʙ�H�1P�(���(�jI3��N(�z�x�h��Eo
SFR_Go�8�$A
�g��Čv�

+�9,0�Ǫ����C�!�~

	����	ћ��LZ��9b��Qh���5�C��%u/����qH>��f���Ѽ*~/i�M+F��a����a��ז��x�:����"	���~&

s�f���:����C��~o�[`�B�`�4
S����!	�E�A�ज़��{}�yJ|�F ��
&��o'
+���R��Wc�����ӏM���ӝ0��r[�[�/�AI�& ;�G����DR����IQw ��HP�-�8����%�䥳E$�����*���VA��a���x==lJ
tX/�1��X���r���	t

�{�R�pa1�M���
Vn��x������5�.�]�n�x�D�6�L?
�ĮƱD���#�= �W�5��l�!N�kM	
�6^j#�p�X�?$
�`�a�>���Y-�!$I@�(c�F�1c5H]|=bߤ�D�M��l��&t�n�!���wr�1$�B�}��0cH�^����Ì!�T��0c���~
f
����#��ˤA�bcl'igK��an'��Km�Xz��k,�h'&��n'5� %l��fdM*��k
Ai��mR�hq
a��8�Q҃v�XI��XP�� ��Z �k��v=N1

�A�V��)��i���}ҡo�e���Y��ɤƐD

N�AJ+�4
����#mB�|$Y�1NG�χA�*z�{1H�
�z/I�ST
z/I2�R�}$ɘ�����i���R�A������fp4����`@ȇC�_
�u�fy���h��|$�>A�ʓW����8���l�#�����0H����wI��B�iR��� 	�v���0H�����(>-� ߭:*~$A�s�>
� ~�=��$�C�� >
�~>:R��\����gi~逄b���a����4Ei�ЇA��(>
����)s����H�xT�i̤�����N��^�߿�y{
����1�H���ޟ_~���'����늼:?���#���$��;j :�������<��'
f p4Ҟ�������x��V��8_g����ӏ���b3���
��qO�g����G�Γ6P����o
#I�F��M:s��j
Q����X�5_g��4t�q�T�p�j
2UƵD�t�D���s��Y�>����CDZ�2�cd��k�ZE�L��)0���q*? �׻��N+$�9Z�P��j�w����]&�e8W��9��M���ڙ�����17hT��-�4�9D8�hKS�'��������nSK����I� ����v��`��=�m_�.,�I`[�_��?�J�P�(e�w��YEP�yP�y����w���F��3��շM�.�7��{�]@��{��U$Ъ����pv���k���
+���

�%����s����-)$�`@L�E(��x0�^7:��O��ٿN�9�c�Z��%��5��pI�'�\A
��A�96���a��g�4k
‡A�
ƇA�WY�z�0H> G�a���1�݁�E<k��Q!���zlv7�*o[
P�b蝊�-u�G��O���_���=���~��}q�1R�����ו
���/�?�'Ml�D
@�
�~�����L
���5�t��e�A/�������'�Ҹ8������Io&�'�qq2h�d��I�ۓٸ<����>��TR�"���������bmT��W�D+s���fM��l��F�9r����3&o�_��)
�NQ8L�?�S �
�eaČ:��W�m1ګ(7�P�o���WI��4��+rD?l�WnBb�	.\zXfZz���B�{�I\vR����MsxzIŮ}�
+�|�J9��E���.��h���j���1T����L�|ru!�WD���d�:n
UӰO����\��J�DJ�u����J�'1����[2��?#L36"���dj���6ف3�Y�Ӯhj餍%�r�ͩn�-*�i��(���u�(S
���8�)էMo37�$�v���Fn��ܪ��Z��*��U�C�`t�F��1U�=��7��l7�5�ԅ�:��1�oTv���n�
+u���=0�`�{��E�ɳ"��ѵ��u��\��`2h��}�Q�{�wLW~�_�0:,���
#g�F'�1ߞ� ��`M<�D
D��Eb��F����+r�v#��+����;O`���My����2:���N�bh� j!m�ZlѠ�ĝ����?}���)��n����i<��e���������Ɍ{��`�`<&�`|ƈ�C>�f
7�D��+�ǰe��h{<T�:O�qdZ��[
�Q��XS��! )^qrs�{�{�w��z�x2��( �.��$
31;��,�����uD�J
&��ֻ`�
PB�TdY֮��{"j�X�Bb��[A��oϒ|QT���[D�`O�ߤ`�9"��Od*�Ukr{��F):iH�@��Z���]֦��.

���m>E�i�=�=���=۷�gqz�@G��AtCO�IPc� [...]
+/�僤��%Z�A���O�V
+��c���N!��n@��acٷ�*��	���7�w�
�%��6to
+&Œ��
+y|(�G\
�
~��Fo*d1gGl��ͅl
�>��"h�=���G�J���N����y����؞ ��#�C'�m��uv�b%1٢�f�|ȓvT�n"
v�I/�%��o����ׇ����@��%��O�r�_	� m���̾h0G�9O��G�
�&�7)���ť�5��}I
+^a����b`,=)C� �^�H����B^<Κ.E�qu�x��MH��c��E���+D��ʑY�5O���� <����;���=5���
���.�f�L.oS�0�ZlV��(������/E�x���Tx]N������/����5�:�����Z;�~()bh�(��@�*�S��>�JP�U^Mkd��Jm��~�ޒ؏�;�#�gaO�	ls�	v���[���1;�fL�]�N�6�y���FC�<�RW�~Q`�YW�yH��<�愩|u�s���B�
k�6�u9۬���|W��j�.v�c��n���
,C8��)L
+���Y�>n'��#�:bʩ[�^�Q �q�
�,���Q�)x�$�l�߆�qdzvr�Oj�ͺXB��I�A/8�x��~WV�s�
+(���b*��
+I�l������֕����-ۭk�6G�˺I}���i����e�x�[���o

���B�
+lL>�G
�s���S����)����K~�߮�_�T־O9N��J,���z�J���O� �]ɶ
endstream
endobj
42 0 obj
10239 
endobj
43 0 obj
<< /Filter /FlateDecode /Length 44 0 R /Subtype /Type1C >> 
stream
+H�|T{P��e��J\��Eke�UyE��jA��	�(�$����	���:(yJT|�Ջ�V
��!(%��T�z=�~:s;�ug���~;�������w��1�����0Y�,r�ǡY*e���a)I����\v&Ɗq�Ŋ��`�x1H���
�fB��~���
0ǫ/7�NI�	
+�tA�������}��-])O�
/
�Rk�����Uj�*V/_(��LL��M��Ұxu�*�C�� U���R�*V
���%M��"I�b��ܞ*>A��8D�,��Wib�ug�J��+�4ʔd����R���p��lp�^��Za�1l[�a
�c>V�*
&��Bm�(
��0�-�l�x�ǒ0=V�5aC�|<��_Z�X
!x�|��7��+!
����eOͥ6S:j�����Ě��j}�����Č-3���l���j�\�6{_�2��k:A����E3/�g���[n㭽DZB�
�2D�P�5�4�9��H�T��� ��"�	��w�{
+|�K��=}��ye
Q��0,YGu�O$D2�mFt��2�f�
/Ob ��ׯ Q:��I�*U���Z��`+^�D4��!��ϑ���[-m(=c8�.W(T�		��gRXVf�:xN���PkQ�k)T�VI
+�F�ֈ�p�7�jip}H��e @.��
٢��E� 덴�
�g��拇����os��Ne�mù��
���EH	;��2 ��� ��
7���	v��	]����@��4:	v�'��!&0$yǗ��P�����x���`���y2ked_���A�� �c���'�j錚V�I
����=
rwi!��N
V^l6�?�Cs��U*��t=Y\q��x�6&r����Ltp#%|22,_��l�KX�x�а�B��AF0��c�|D��
!hܸ�us��o��0hBA|��
:�^�v���������Q�JJ~'�����`#� ��F�T,�O
.�ԟݼ��+ou��x��T&]Ff�����_����qlsTS�S�X�uN�ߙ2�#!���
Z:`Q?~vJ���7��t]v�o�Έ-�!!_�GsD(`
a �!�;p����7+c%9T!`=S��.;\�Rg���Tҋ�>|�c�?rL�Pz��x�V�
Q�
a{M8k;A4s����
>:�����;F�p�����;���
+�G!f�I���2Dy�
�7)�C|��2e�&?���Rp�Y�����_#����U�m
�@���7�h��-mz旋?����UM� �,*z�Dدg/�����Ņ�f����Y߮o0I�>�����
c�3-]��̯9��Cg�����
�a����F���aH�x����f��DO�]��M�#�oQ���u������'.�"����о�o%ruL�&��桉[�̻�
�a6ׅ3��S�Pr�<A�Jۡ�nC���`�f��F�����{�
tR�O(���C�R(��r(ȓF�
"�q�K?^�J��X\��
h����F(hM�C�(h�d�W}�tv��b��+�|���-��"z
xk}��lWٕ�vѭ�zE�����Bo��O�gF?��%�z��ή������2*��C	_=
�/v[��#Q���be�^��	7Ll�8�G��#_�W�A�������_�0���㚈�K�(
�E�H�T�� l�����l�5Av(M�n*,c�hT J�2������L�*dC%?�)]�)1��0���*�dG�5�TA�b�}��o�����)X�_��ս{
�p�S �,H= F�A�W�GK8���q�
�����
�`����>���t���x`�����Q������ �q���T��g���3
�܀L
�f����FN_(�Ҏ~�%ٻ���Z1X��`
�Fz����o��s
�cT[/����K
+�Np.���vttOz�:+��
xS���@-�`[_ss�o�
?OG��&O7�݈D�W�����ΰ=%9m~�@	O�����CrH���=�v��ȏ��P
���.����A�;5%�wť�r�ȃ�F�p�N6���4�Ku�5��Q#�P&]��0����;��JPlE�T6Y�EAuD����	&�!-�
��DvY\����Q������s}�rn���ʯ[�s�;�w����s��m^)����vr�y�Z�ug��5�>
�G)2�4'
!�u���A�{�?�V
>gY`��[%4|�'^J�}���[`�d�ݾ���S���
+,Iw���}�]�
DRMNt
����kI[᜝�A��7�-
8�3@�]> �"�����
���-˃K:y�em
u��B�h ӄ��� �߭����
f����v��X�y�|� ř�
0~j����;��
}�G�
������3K�����b��=��b��9�3/��i�dڈ0h
+R�s-q��1���G���p�P����E`�l"��9���;�8��=*g��=��b�|�����w�z
x֎\�B�Q��l
��
+������:�� ؤ���������k�d�u���q�
w��ڂ�f��`��n���H
8�8]&e:�OG42V��;��wp�.����;v�􆺞|+Wm
�%���|�
4�mk�����T{	$q�]�#<��������hLNO�&S���r��Kw^�浌��J��1���Q�ɠ�='��\�dP���� '3��f�R��O�Y`��
+���
�{�z��2p���f�ps9Jխ�U�N�lڰ
x;X��Tw�Ӳ�t���Y����gi�@4�J����ȕ?�9��G�A�5���>׃���>���,�
.e�u5kThN�d����j��b�<���\X%ck���
Hh�l9\/G2n�
ݩj�L)�
6H���
�͟����R1E4:'x��������ux��!�KM+�r����N��8�d��Y�%���N�vd�0� ��Ȗ��Z��֐�Rk�

`�U�[B%��%
= q%��`���wr;��}�|S��J�9�`X���|���:��	�?\��]�ue)e�S�0^XcC�9
�� 9���R^w�V����u�+(<J���"���!;z�j���
=`���&��SE��	�P/��/�>�z�O>�!�'�x�3hs�8�4e���
Mu���ՙ9T����69R�lG�
�1`����HXrB$!��E�@���E( ,����\GL�u���?#D�^
��-;��$�bhhLTX���k��L��i����\E0��!Q��1��o�ǃ�c�Fy��L5U�[U�J��z�Ӱf
����j�:_[�L��y����1�e�U��a��pJpR 8y
�v�_�3�10( ����N�6�E��g>�E 
~V!W�������*8!Ϋ:P�W:�zF�E��K}�����
'E����FM��
@�����!��W�C�m��Up=\����Vts׻
�1Q�����%��ٮv6ȑp[
p�c
�%_,95��:�����
GA��W�Bs�[8�~w��a��q�f�+�~;y�@�J�V�P�T��62�dӆȐ�-wzWw����tu���'�~fv�䋡�s=S� ����J�F߉[Q'ވ��p �B#[�-&V l�U{u"���(�OS���=�#S���p��>�;�VJ䉉<"�׌HW&��
z�Ux�<W���rjo�J�d��gӄ�	��P�:-O&ݽ��c��*N{�J�
��{ $>�x^�e�5����6�Z�*=�c���7�ЮE�
�x�W~�YW/��*��4�Ajr��������1�y���\��G�g]�d0$���1�
#"&Q�Z98�5l��#;�(��)�&�"K/�=���z��D�,��/m�A.0�&���I�
�`ү'uD
��|؈�KR�THBp�;i�9A�s|X�F/��c7�����0�¥���&
8�y
+�'��)��$*
+X6#Ć�!�}��y�9w����ݣ�̆q��b��v����{���4�n��� RͶ�v0=����<�)�9����86poܴ�����1���l���2��Sy)Ҕ�d*.0<4Z.�M9���|Fu^mE{K�h'Z&��3K|%�N:�
�&۩b�V|u�nƙ1`|�i��~��iGn><�����4zת�׫`@�T5�p��9s�lD���
�
Q�A�N}46��i�=su�z��2���d����o s��
endstream
endobj
44 0 obj
4206 
endobj
45 0 obj
<< /Type /Metadata /Subtype /XML /Length 936 >> 
stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d' bytes='936'?>
+
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
+ xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description about=''
+  xmlns='http://ns.adobe.com/pdf/1.3/'
+  xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+  <pdf:CreationDate>2003-03-27T11:43:36-05:00</pdf:CreationDate>
+  <pdf:ModDate>2003-03-27T11:43:40-06:00</pdf:ModDate>
+  <pdf:Creator>Adobe Illustrator 10.0</pdf:Creator>
+  <pdf:Producer>Adobe PDF library 5.00</pdf:Producer>
+ </rdf:Description>
+
+ <rdf:Description about=''
+  xmlns='http://ns.adobe.com/xap/1.0/'
+  xmlns:xap='http://ns.adobe.com/xap/1.0/'>
+  <xap:CreateDate>2003-03-27T11:43:36-05:00</xap:CreateDate>
+  <xap:ModifyDate>2003-03-27T11:43:40-06:00</xap:ModifyDate>
+  <xap:CreatorTool>Adobe Illustrator 10.0</xap:CreatorTool>
+  <xap:MetadataDate>2003-03-27T11:43:40-06:00</xap:MetadataDate>
+ </rdf:Description>
+
+</rdf:RDF>
+<?xpacket end='r'?>
endstream
endobj
xref
0 46 
0000000004 65535 f
+0000000016 00000 n
+0000000087 00000 n
+0000000151 00000 n
+0000000006 00001 f
+0000000318 00000 n
+0000000000 00001 f
+0000000671 00000 n
+0000000750 00000 n
+0000001177 00000 n
+0000001587 00000 n
+0000002781 00000 n
+0000012616 00000 n
+0000031032 00000 n
+0000031055 00000 n
+0000047555 00000 n
+0000047578 00000 n
+0000067091 00000 n
+0000067114 00000 n
+0000086815 00000 n
+0000086838 00000 n
+0000101128 00000 n
+0000101151 00000 n
+0000104890 00000 n
+0000104912 00000 n
+0000118881 00000 n
+0000118904 00000 n
+0000141436 00000 n
+0000141459 00000 n
+0000162146 00000 n
+0000162169 00000 n
+0000172600 00000 n
+0000172623 00000 n
+0000177478 00000 n
+0000177500 00000 n
+0000177529 00000 n
+0000177557 00000 n
+0000178779 00000 n
+0000179006 00000 n
+0000179098 00000 n
+0000182654 00000 n
+0000182676 00000 n
+0000192993 00000 n
+0000193016 00000 n
+0000197317 00000 n
+0000197339 00000 n
+trailer
<<
/Size 46
/Info 3 0 R 
/Root 1 0 R 
/ID[<03aa30ffc7b60d2634f33aaffd5fb1ae><83071ccfecb32ab3fa609a63de597bbd>]
>>
startxref
198359
%%EOF
\ No newline at end of file
diff --git a/documentation/figures/rnaseP-ecoli.eps b/documentation/figures/rnaseP-ecoli.eps
new file mode 100644
index 0000000..d0eadff
--- /dev/null
+++ b/documentation/figures/rnaseP-ecoli.eps
@@ -0,0 +1,12990 @@
+%!PS-Adobe-3.1 EPSF-3.0
+%%Title: rnaseP-ecoli.eps
+%%Creator: Adobe Illustrator(R) X
+%%AI8_CreatorVersion: 10.0
%AI9_PrintingDataBegin
%%For: Sean R Eddy
+%%CreationDate: 3/27/03
+%%BoundingBox: 0 0 417 587
+%%HiResBoundingBox: 0 0 416.5997 586.6475
+%%CropBox: 0 0 416.5997 586.6475
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%ADOBeginClientInjection: DocumentHeader "AI10"
+%ADOEndClientInjection: DocumentHeader "AI10"
+%%Pages: 1
+%%DocumentNeededResources: 
+%%DocumentSuppliedResources: procset Adobe_AGM_Image (1.0 0)
+%%+ procset Adobe_CoolType_Utility_MAKEOCF (1.13 0)
+%%+ procset Adobe_CoolType_Core (2.12 0)
+%%+ procset Adobe_AGM_Core (2.0 0)
+%%+ procset Adobe_AGM_Utils (1.0 0)
+%%DocumentFonts: 
+%%DocumentNeededFonts: 
+%%DocumentNeededFeatures: 
+%%DocumentSuppliedFeatures: 
+%%DocumentCustomColors: 
+%%CMYKCustomColor: 
+%%RGBCustomColor: 
+%%EndComments
+%%BeginDefaults
+%%ViewingOrientation: 1 0 0 1
+%%EndDefaults
+%%BeginProlog
+%ADOBeginClientInjection: DocumentProlog Start "AI10"
+%ADOEndClientInjection: DocumentProlog Start "AI10"
+%%BeginResource: procset Adobe_AGM_Utils 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright (C) 2000-2000 Adobe Systems, Inc.  All Rights Reserved.
+systemdict /setpacking known
+{
+	currentpacking
+	true setpacking
+} if
+userdict /Adobe_AGM_Utils 60 dict dup begin put
+/bdf
+{
+	bind def
+} bind def
+/nd{
+	null def
+}bdf
+/xdf
+{
+	exch def
+}bdf
+/ldf 
+{
+	load def
+}bdf
+/ddf
+{
+	put
+}bdf	
+/xddf
+{
+	3 -1 roll put
+}bdf	
+/xpt
+{
+	exch put
+}bdf
+/ndf
+{ 
+	
+	exch dup where{
+		pop pop pop
+	}{
+		xdf
+	}ifelse
+}def
+/cdndf
+{
+	exch dup currentdict exch known{
+		pop pop
+	}{
+		exch def
+	}ifelse
+}def
+/bdict
+{
+	mark
+}bdf
+/edict
+{
+	counttomark 2 idiv dup dict begin {def} repeat pop currentdict end
+}def
+	
+/ps_level
+	/languagelevel where{
+		pop systemdict /languagelevel get exec
+	}{
+		1
+	}ifelse
+def
+/level2 
+	ps_level 2 ge
+def
+/level3 
+	ps_level 3 ge
+def
+/ps_version
+	{version cvr} stopped {
+		-1
+	}if
+def
+/makereadonlyarray
+{
+	/packedarray where{
+		pop packedarray
+	}{
+		array astore readonly
+	}ifelse
+}bdf
+/map_reserved_ink_name
+{
+	dup type /stringtype eq{
+		dup /Red eq{
+			pop (_Red_)
+		}{
+			dup /Green eq{
+				pop (_Green_)
+			}{
+				dup /Blue eq{
+					pop (_Blue_)
+				}{
+					dup /Cyan eq{
+						pop (_Cyan_)
+					}{
+						dup /Magenta eq{
+							pop (_Magenta_)
+						}{
+							dup /Yellow eq{
+								pop (_Yellow_)
+							}{
+								dup /Black eq{
+									pop (_Black_)
+								}{
+									dup () cvn eq{
+										pop (Process)
+									}if
+								}ifelse
+							}ifelse
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+	}if
+}bdf
+/AGMUTIL_GSTATE 22 dict def
+/get_gstate
+{
+	AGMUTIL_GSTATE begin
+	/AGMUTIL_GSTATE_clr_spc currentcolorspace def
+	/AGMUTIL_GSTATE_clr_indx 0 def
+	/AGMUTIL_GSTATE_clr_comps 12 array def
+	mark currentcolor counttomark
+		{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
+		/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def} repeat pop
+	/AGMUTIL_GSTATE_fnt rootfont def
+	/AGMUTIL_GSTATE_lw currentlinewidth def
+	/AGMUTIL_GSTATE_lc currentlinecap def
+	/AGMUTIL_GSTATE_lj currentlinejoin def
+	/AGMUTIL_GSTATE_ml currentmiterlimit def
+	currentdash /AGMUTIL_GSTATE_do xdf /AGMUTIL_GSTATE_da xdf
+	/AGMUTIL_GSTATE_sa currentstrokeadjust def
+	
+	/AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
+	/AGMUTIL_GSTATE_op currentoverprint def
+	/AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
+	/AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
+	currentcolortransfer cvlit /AGMUTIL_GSTATE_gy_xfer xdf cvlit /AGMUTIL_GSTATE_b_xfer xdf
+		cvlit /AGMUTIL_GSTATE_g_xfer xdf cvlit /AGMUTIL_GSTATE_r_xfer xdf
+	/AGMUTIL_GSTATE_ht currenthalftone def
+	/AGMUTIL_GSTATE_flt currentflat def
+	end
+}def
+/set_gstate
+{
+	AGMUTIL_GSTATE begin
+	AGMUTIL_GSTATE_clr_spc setcolorspace
+	AGMUTIL_GSTATE_clr_indx {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
+	/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def} repeat setcolor
+	AGMUTIL_GSTATE_fnt setfont
+	AGMUTIL_GSTATE_lw setlinewidth
+	AGMUTIL_GSTATE_lc setlinecap
+	AGMUTIL_GSTATE_lj setlinejoin
+	AGMUTIL_GSTATE_ml setmiterlimit
+	AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
+	AGMUTIL_GSTATE_sa setstrokeadjust
+	
+	AGMUTIL_GSTATE_clr_rnd setcolorrendering
+	AGMUTIL_GSTATE_op setoverprint
+	AGMUTIL_GSTATE_bg cvx setblackgeneration
+	AGMUTIL_GSTATE_ucr cvx setundercolorremoval
+	AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
+		AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
+	
+	AGMUTIL_GSTATE_ht /HalftoneType get dup 9 eq exch 100 eq or
+		{
+		currenthalftone /HalftoneType get AGMUTIL_GSTATE_ht /HalftoneType get ne
+			{
+			  mark AGMUTIL_GSTATE_ht {sethalftone} stopped cleartomark
+			} if
+		}{
+		AGMUTIL_GSTATE_ht sethalftone
+		} ifelse
+	
+	AGMUTIL_GSTATE_flt setflat
+	end
+}def
+/AGMUTIL_str256 256 string def
+/AGMUTIL_src256 256 string def
+/AGMUTIL_dst64 64 string def
+/AGMUTIL_srcLen nd
+/AGMUTIL_ndx nd
+/rdline
+{
+	currentfile AGMUTIL_str256 readline pop
+} bdf
+/rdcmntline
+{
+	currentfile AGMUTIL_str256 readline pop
+	(%) anchorsearch {pop} if
+} bdf
+/filter_cmyk
+{	
+	dup type /filetype ne{
+		0 () /SubFileDecode filter
+	}if
+	[
+	exch
+	{
+		AGMUTIL_src256 readstring pop
+		dup length /AGMUTIL_srcLen exch def
+		/AGMUTIL_ndx 0 def
+		
+		AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
+			1 index exch get
+			AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
+			/AGMUTIL_ndx AGMUTIL_ndx 1 add def
+		}for
+		pop
+		AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
+	}
+	bind
+	/exec cvx
+	] cvx
+} bdf
+/AGMUTIL_imagefile nd
+/AGMUTIL_imbuf nd
+/read_image_file
+{
+	AGMUTIL_imagefile 0 setfileposition
+	dup /DataSource {AGMUTIL_imagefile AGMUTIL_imbuf readstring pop} put
+	exch
+	load exec
+}def
+/write_image_file
+{
+	begin
+	{ (AGMUTIL_imagefile) (w+) file } stopped{
+		false
+	}{
+		Adobe_AGM_Utils/AGMUTIL_imagefile xddf 
+		Adobe_AGM_Utils/AGMUTIL_imbuf Width BitsPerComponent mul 7 add 8 idiv string ddf
+		1 1 Height { 
+			pop
+			DataSource dup type /filetype eq{
+				AGMUTIL_imbuf readstring pop
+			}{
+				exec
+			} ifelse
+			AGMUTIL_imagefile exch writestring
+		}for
+		true
+	}ifelse
+	end
+}def
+/close_image_file
+{
+	AGMUTIL_imagefile closefile (AGMUTIL_imagefile) deletefile
+}def
+/consumeimagedata
+{
+	begin
+	currentdict /MultipleDataSources known not
+		{/MultipleDataSources false def} if
+	MultipleDataSources
+		{
+		1 dict begin
+		/flushbuffer Width cvi string def
+		1 1 Height cvi
+			{
+			pop
+			0 1 DataSource length 1 sub
+				{
+				DataSource exch get
+				dup type dup 
+				/filetype eq
+					{
+					exch flushbuffer readstring pop pop
+					}if
+				/arraytype eq
+					{
+					exec pop
+					}if
+				}for
+			}for
+		end
+		}
+		{
+		/DataSource load type dup 
+		/filetype eq
+			{
+			1 dict begin
+			/flushbuffer Width Decode length 2 div mul cvi string def
+			1 1 Height { pop DataSource flushbuffer readstring pop pop} for
+			end
+			}if
+		/arraytype eq
+			{
+			1 1 Height { pop DataSource pop } for
+			}if
+		}ifelse
+	end
+}bdf
+/addprocs
+{
+     2{/exec load}repeat
+     3 1 roll
+     [ 5 1 roll ] bind cvx
+}def
+/modify_halftone_xfer
+{
+	currenthalftone dup length dict copy begin
+    currentdict 2 index known{
+    	1 index load dup length dict copy begin
+		currentdict/TransferFunction known{
+			/TransferFunction load
+		}{
+			currenttransfer
+		}ifelse
+	    addprocs /TransferFunction xdf 
+	    currentdict end def
+		currentdict end sethalftone
+	}{ 
+		currentdict/TransferFunction known{
+			/TransferFunction load 
+		}{
+			currenttransfer
+		}ifelse
+		addprocs /TransferFunction xdf
+		currentdict end sethalftone		
+		pop
+	}ifelse
+}def
+/doc_setup{
+	Adobe_AGM_Utils begin
+}bdf
+/doc_trailer{
+	currentdict Adobe_AGM_Utils eq{
+		end
+	}if
+}bdf
+systemdict /setpacking known
+{
+	setpacking
+} if
+%%EndResource
+%%BeginResource: procset Adobe_AGM_Core 2.0 0
+%%Version: 2.0 0
+%%Copyright: Copyright (C) 1997-1999 Adobe Systems, Inc.  All Rights Reserved.
+systemdict /setpacking known
+{
+	currentpacking
+	true setpacking
+} if
+userdict /Adobe_AGM_Core 205 dict dup begin put
+/nd{
+	null def
+}bind def
+/Adobe_AGM_Core_Id /Adobe_AGM_Core_2.0_0 def
+/AGMCORE_str256 256 string def
+/AGMCORE_src256 256 string def
+/AGMCORE_save nd
+/AGMCORE_graphicsave nd
+/AGMCORE_c 0 def
+/AGMCORE_m 0 def
+/AGMCORE_y 0 def
+/AGMCORE_k 0 def
+/AGMCORE_cmykbuf 4 array def
+/AGMCORE_screen [currentscreen] cvx def
+/AGMCORE_tmp 0 def
+/AGMCORE_&setgray nd
+/AGMCORE_&setcolor nd
+/AGMCORE_&setcolorspace nd
+/AGMCORE_&setcmykcolor nd
+/AGMCORE_cyan_plate nd
+/AGMCORE_magenta_plate nd
+/AGMCORE_yellow_plate nd
+/AGMCORE_black_plate nd
+/AGMCORE_plate_ndx nd
+/AGMCORE_get_ink_data nd
+/AGMCORE_is_cmyk_sep nd
+/AGMCORE_host_sep nd
+/AGMCORE_will_host_sep nd
+/AGMCORE_avoid_L2_sep_space nd
+/AGMCORE_distilling nd
+/AGMCORE_composite_job nd
+/AGMCORE_producing_seps nd
+/AGMCORE_ps_level -1 def
+/AGMCORE_ps_version -1 def
+/AGMCORE_environ_ok nd
+/AGMCORE_CSA_cache 0 dict def
+/AGMCORE_CSD_cache 0 dict def
+/AGMCORE_pattern_cache 0 dict def
+/AGMCORE_currentoverprint false def
+/AGMCORE_deltaX nd
+/AGMCORE_deltaY nd
+/AGMCORE_name nd
+/AGMCORE_sep_special nd
+/AGMCORE_err_strings 4 dict def
+/AGMCORE_cur_err nd
+/AGMCORE_ovp nd
+/AGMCORE_current_spot_alias false def
+/AGMCORE_inverting false def
+/AGMCORE_feature_dictCount nd
+/AGMCORE_feature_opCount nd
+/AGMCORE_feature_ctm nd
+/AGMCORE_ConvertToProcess false def
+/AGMCORE_Default_CTM matrix def
+/knockout_unitsq nd
+/AGMCORE_CRD_cache where{
+	pop
+}{
+	/AGMCORE_CRD_cache 0 dict def
+}ifelse
+/AGMCORE_key_known
+{
+	where{
+		/Adobe_AGM_Core_Id known
+	}{
+		false
+	}ifelse
+}ndf
+/flushinput
+{
+	save
+	/CompareBuffer 3 -1 roll def
+	/readbuffer 256 string def
+	mark
+	{
+	currentfile readbuffer {readline} stopped
+		{cleartomark mark}
+		{
+		not
+			{pop exit}
+		if
+		CompareBuffer eq
+			{exit}
+		if
+		}ifelse
+	}loop
+	cleartomark
+	restore
+}bdf
+/getspotfunction
+{
+	AGMCORE_screen exch pop exch pop
+	dup type /dicttype eq{
+		dup /HalftoneType get 1 eq{
+			/SpotFunction get
+		}{
+			dup /HalftoneType get 2 eq{
+				/GraySpotFunction get
+			}{ 
+				pop
+				{
+					abs exch abs 2 copy add 1 gt{
+						1 sub dup mul exch 1 sub dup mul add 1 sub
+					}{
+						dup mul exch dup mul add 1 exch sub
+					}ifelse
+				}bind
+			}ifelse
+		}ifelse
+	}if
+} def
+/clp_npth
+{
+	clip newpath
+} def
+/eoclp_npth
+{
+	eoclip newpath
+} def
+/stkpath_clp_npth
+{
+	strokepath clip newpath
+} def
+/stk_n_clp_npth
+{
+	gsave stroke grestore clip newpath
+} def
+/npth_clp
+{
+	newpath clip
+} def
+/graphic_setup
+{
+	/AGMCORE_graphicsave save def
+	concat
+	0 setgray
+	0 setlinecap
+	0 setlinejoin
+	1 setlinewidth
+	[] 0 setdash
+	10 setmiterlimit
+	newpath
+	false setoverprint
+	false setstrokeadjust
+	Adobe_AGM_Core/spot_alias get exec
+	/Adobe_AGM_Image where {
+		pop
+		Adobe_AGM_Image/spot_alias 2 copy known{
+			get exec
+		}{
+			pop pop
+		}ifelse
+	} if
+	100 dict begin
+	/showpage {} def
+	mark
+} def
+/graphic_cleanup
+{
+	cleartomark
+	end
+	AGMCORE_graphicsave restore
+} def
+/compose_error_msg
+{
+	grestoreall initgraphics	
+	/Helvetica findfont 10 scalefont setfont
+	
+	/AGMCORE_deltaY 100 def
+	/AGMCORE_deltaX 310 def
+			
+	clippath pathbbox newpath pop pop 36 add exch 36 add exch moveto
+	0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
+	0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
+	0 AGMCORE_&setgray
+	gsave 1 AGMCORE_&setgray fill grestore 
+	1 setlinewidth gsave stroke grestore
+		
+	currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
+	
+	/AGMCORE_deltaY 12 def
+	/AGMCORE_tmp 0 def
+	AGMCORE_err_strings exch get
+		{
+		dup 32 eq
+			{
+			pop
+			AGMCORE_str256 0 AGMCORE_tmp getinterval
+			stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
+				{
+				currentpoint AGMCORE_deltaY sub exch pop
+				clippath pathbbox pop pop pop 44 add exch moveto
+				} if
+			AGMCORE_str256 0 AGMCORE_tmp getinterval show ( ) show
+			
+			0 1 AGMCORE_str256 length 1 sub
+				{
+				AGMCORE_str256 exch 0 put
+				}for
+			/AGMCORE_tmp 0 def
+			}
+			{
+				AGMCORE_str256 exch AGMCORE_tmp exch put
+				/AGMCORE_tmp AGMCORE_tmp 1 add def
+			} ifelse
+		} forall
+} bdf
+/doc_setup{
+	Adobe_AGM_Core begin
+	
+	/AGMCORE_will_host_separate xdf
+	/AGMCORE_ps_version xdf
+	/AGMCORE_ps_level xdf
+	
+	errordict /AGM_handleerror known not{
+		errordict /AGM_handleerror errordict /handleerror get put
+		errordict /handleerror {
+			Adobe_AGM_Core begin
+			$error /newerror get AGMCORE_cur_err null ne and{
+				$error /newerror false put
+				AGMCORE_cur_err compose_error_msg
+			}if
+			$error /newerror true put
+			end
+			errordict /AGM_handleerror get exec
+			} bind put
+		}if
+		
+	/AGMCORE_environ_ok 
+		ps_level AGMCORE_ps_level ge
+		ps_version AGMCORE_ps_version ge and 
+		AGMCORE_ps_level -1 eq or
+	def
+	
+	AGMCORE_environ_ok not
+		{/AGMCORE_cur_err /AGMCORE_bad_environ def} if
+	
+	/AGMCORE_&setgray systemdict/setgray get def
+	level2{
+		/AGMCORE_&setcolor systemdict/setcolor get def
+		/AGMCORE_&setcolorspace systemdict/setcolorspace get def
+	}if
+	/AGMCORE_distilling
+		/product where{
+			pop systemdict/setdistillerparams known product (Adobe PostScript Parser) ne and
+		}{
+			false
+		}ifelse
+	def
+	/AGMCORE_in_rip_sep
+		/AGMCORE_in_rip_sep where{
+			pop AGMCORE_in_rip_sep
+		}{
+			AGMCORE_distilling 
+			{
+				false
+			}{
+				userdict/Adobe_AGM_OnHost_Seps known{
+					false
+				}{
+					level2{
+						currentpagedevice/Separations 2 copy known{
+							get
+						}{
+							pop pop false
+						}ifelse
+					}{
+						false
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+	def
+	level2 not{
+		/xput{
+			dup load dup length exch maxlength eq{
+				dup dup load dup
+				length dup 0 eq {pop 1} if 2 mul dict copy def
+			}if
+			load begin
+				def
+ 			end
+		}def
+	}{
+		/xput{
+			load 3 1 roll put
+		}def
+	}ifelse
+	/AGMCORE_GSTATE AGMCORE_key_known not{
+		/AGMCORE_GSTATE 21 dict def
+		/AGMCORE_gstack 32 array def
+		/AGMCORE_gstackptr 0 def
+		/AGMCORE_gstacksaveptr 0 def
+		/AGMCORE_gstackframekeys 8 def
+											
+		/AGMCORE_&gsave /gsave ldf
+		/AGMCORE_&grestore /grestore ldf
+		/AGMCORE_&grestoreall /grestoreall ldf
+		/AGMCORE_&save /save ldf
+		/AGMCORE_gdictcopy {
+			begin
+			{ def } forall
+			end
+		}def
+		/AGMCORE_gput {
+			AGMCORE_gstack AGMCORE_gstackptr get
+			3 1 roll
+			put
+		}def
+		/AGMCORE_gget {
+			AGMCORE_gstack AGMCORE_gstackptr get
+			exch
+			get
+		}def
+		/gsave {
+			AGMCORE_&gsave
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gstackptr 1 add
+			dup 32 ge {limitcheck} if
+			Adobe_AGM_Core exch
+			/AGMCORE_gstackptr exch put
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gdictcopy
+		}def
+		/grestore {
+			AGMCORE_&grestore
+			AGMCORE_gstackptr 1 sub
+			dup AGMCORE_gstacksaveptr lt {1 add} if
+			Adobe_AGM_Core exch
+			/AGMCORE_gstackptr exch put
+		}def
+		/grestoreall {
+			AGMCORE_&grestoreall
+			Adobe_AGM_Core
+			/AGMCORE_gstackptr AGMCORE_gstacksaveptr put 
+		}def
+		/save {
+			AGMCORE_&save
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gstackptr 1 add
+			dup 32 ge {limitcheck} if
+			Adobe_AGM_Core begin
+				/AGMCORE_gstackptr exch def
+				/AGMCORE_gstacksaveptr AGMCORE_gstackptr def
+			end
+			AGMCORE_gstack AGMCORE_gstackptr get
+			AGMCORE_gdictcopy
+		}def
+		0 1 AGMCORE_gstack length 1 sub {
+				AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
+		} for
+	}if
+	/currentcmykcolor [0 0 0 0] AGMCORE_gput
+	/currentstrokeadjust false AGMCORE_gput
+	/currentcolorspace [/DeviceGray] AGMCORE_gput
+	/sep_tint 0 AGMCORE_gput
+	/sep_colorspace_dict null AGMCORE_gput
+	/indexed_colorspace_dict null AGMCORE_gput
+	/currentcolor_intent () AGMCORE_gput
+	/customcolor_tint 1 AGMCORE_gput
+	end
+}def
+/page_setup
+{
+	/setcmykcolor where{
+		pop
+		Adobe_AGM_Core/AGMCORE_&setcmykcolor /setcmykcolor load put
+	}if
+	Adobe_AGM_Core begin
+	/setcmykcolor
+	{
+		4 copy AGMCORE_cmykbuf astore /currentcmykcolor exch AGMCORE_gput
+		1 sub 4 1 roll
+		3 {
+			3 index add neg dup 0 lt {
+				pop 0
+			} if
+			3 1 roll
+		} repeat
+		setrgbcolor pop
+	}ndf
+	/currentcmykcolor
+	{
+		/currentcmykcolor AGMCORE_gget aload pop
+	}ndf
+	/setoverprint
+	{
+		pop
+	}ndf
+	/currentoverprint
+	{
+		false
+	}ndf
+	/AGMCORE_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def
+	/AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
+	/AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
+	/AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
+	/AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
+	/AGMCORE_plate_ndx 
+		AGMCORE_cyan_plate{ 
+			0
+		}{
+			AGMCORE_magenta_plate{
+				1
+			}{
+				AGMCORE_yellow_plate{
+					2
+				}{
+					AGMCORE_black_plate{
+						3
+					}{
+						4
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+		def
+	/AGMCORE_composite_job
+		AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
+	
+	/AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
+	
+	/AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
+	
+	/AGM_preserve_spots 
+		/AGM_preserve_spots where{
+			pop AGM_preserve_spots
+		}{
+			AGMCORE_distilling AGMCORE_producing_seps or
+		}ifelse
+	def
+	/AGM_is_distiller_preserving_spotimages
+	{
+		currentdistillerparams/PreserveOverprintSettings known
+		{
+			currentdistillerparams/PreserveOverprintSettings get
+				{
+					currentdistillerparams/ColorConversionStrategy known
+					{
+						currentdistillerparams/ColorConversionStrategy get
+						/LeaveColorUnchanged eq
+					}{
+						true
+					}ifelse
+				}{
+					false
+				}ifelse
+		}{
+			false
+		}ifelse
+	}def
+	/convert_spot_to_process where {pop}{
+		/convert_spot_to_process
+		{
+			dup dup (None) eq exch (All) eq or
+				{
+				pop false
+				}{
+				AGMCORE_host_sep
+				{ 
+					gsave
+					1 0 0 0 setcmykcolor currentgray 1 exch sub
+					0 1 0 0 setcmykcolor currentgray 1 exch sub
+					0 0 1 0 setcmykcolor currentgray 1 exch sub
+					0 0 0 1 setcmykcolor currentgray 1 exch sub
+					add add add 0 eq
+					{
+						pop false
+					}{
+						false setoverprint
+						1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor
+						currentgray 0 eq
+					}ifelse
+					grestore
+				}{
+					AGMCORE_distilling
+					{
+						pop AGM_is_distiller_preserving_spotimages not
+					}{
+						Adobe_AGM_Core/AGMCORE_name xddf
+						false
+						currentpagedevice/OverrideSeparations known
+							{
+							currentpagedevice/OverrideSeparations get
+								{
+								/HqnSpots /ProcSet resourcestatus
+									{
+									pop pop pop true
+									}if
+								}if
+							}if					
+							{
+							AGMCORE_name /HqnSpots /ProcSet findresource /TestSpot get exec not
+							}{
+							gsave
+							[/Separation AGMCORE_name /DeviceGray {}]setcolorspace
+							false
+							currentpagedevice/SeparationColorNames 2 copy known
+							{
+								get
+								{ AGMCORE_name eq or}forall
+							not
+							}{
+								pop pop pop true
+							}ifelse
+							grestore
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+		}def
+	}ifelse
+	/convert_to_process where {pop}{
+		/convert_to_process
+		{
+			dup length 0 eq
+				{
+				pop false
+				}{
+				AGMCORE_host_sep
+				{ 
+				true exch
+					{
+					convert_spot_to_process and
+					}
+				forall
+				}{
+				false exch
+					{
+					convert_spot_to_process or
+					}
+				forall
+				}ifelse
+			}ifelse
+		}def
+	}ifelse	
+	AGMCORE_host_sep AGMCORE_will_host_separate not and {
+		/AGMCORE_cur_err /AGMCORE_color_space_onhost_seps def
+		AGMCORE_color_space_onhost_seps
+	}if
+	/AGMCORE_avoid_L2_sep_space  
+		version cvr 2012 lt 
+		level2 and 
+		AGMCORE_producing_seps not and
+	def
+	/AGMCORE_is_cmyk_sep
+		AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
+	def
+	/AGM_avoid_0_cmyk where{
+		pop AGM_avoid_0_cmyk
+	}{
+		AGM_preserve_spots 
+		userdict/Adobe_AGM_OnHost_Seps known 
+		userdict/Adobe_AGM_InRip_Seps known or
+		not and
+	}ifelse
+	{
+		/setcmykcolor[
+			{
+				4 copy add add add 0 eq currentoverprint and{
+					pop 0.0005
+				}if
+			}/exec cvx
+			/AGMCORE_&setcmykcolor load dup type/operatortype ne{
+				/exec cvx
+			}if
+		]cvx def
+	}if
+	AGMCORE_host_sep{
+		/AGMCORE_get_ink_data
+			AGMCORE_cyan_plate{
+				{pop pop pop}
+			}{
+			  	AGMCORE_magenta_plate{
+			  		{4 3 roll pop pop pop}
+			  	}{
+			  		AGMCORE_yellow_plate{
+			  			{4 2 roll pop pop pop}
+			  		}{
+			  			{4 1 roll pop pop pop}
+			  		}ifelse
+			  	}ifelse
+			}ifelse
+		def
+		/clip AGMCORE_key_known not{
+			Adobe_AGM_Core/AGMCORE_&clip /clip load put
+			/clip
+			{
+				current_spot_alias{
+					currentdict/InksUsed known{
+						[
+						InksUsed{
+							dup map_alias{
+								/Name get exch pop
+							}if
+						}forall
+						]
+						/InksUsed xdf
+					}if
+				}if
+				AGMCORE_&clip
+			}def
+		}if
+		/eoclip AGMCORE_key_known not{
+			Adobe_AGM_Core/AGMCORE_&eoclip /eoclip load put
+			/eoclip
+			{
+				current_spot_alias{
+					currentdict/InksUsed known{
+						[
+						InksUsed{
+							dup map_alias{
+								/Name get exch pop
+							}if
+						}forall
+						]
+						/InksUsed xdf
+					}if
+				}if
+				AGMCORE_&eoclip
+			}def
+		}if
+	}if
+	AGMCORE_in_rip_sep{
+		/setcustomcolor
+		{
+			exch aload pop
+			dup 7 1 roll inRip_spot_has_ink not	{ 
+				4 {4 index mul 4 1 roll}
+				repeat
+				/DeviceCMYK setcolorspace
+				6 -2 roll pop pop
+			}{ 
+				Adobe_AGM_Core begin
+					/AGMCORE_k xdf /AGMCORE_y xdf /AGMCORE_m xdf /AGMCORE_c xdf
+				end
+				[/Separation 4 -1 roll /DeviceCMYK
+				{dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
+				]
+				setcolorspace
+			}ifelse
+			setcolor
+		}ndf
+		/setseparationgray
+		{
+			[/Separation (All) /DeviceGray {}] setcolorspace_opt
+			1 exch sub setcolor
+		}ndf
+	}{
+		/setseparationgray
+		{
+			AGMCORE_&setgray
+		}ndf
+	}ifelse
+	/findcmykcustomcolor
+	{
+		5 makereadonlyarray
+	}ndf
+	/setcustomcolor
+	{
+		exch aload pop pop
+		4 {4 index mul 4 1 roll} repeat
+		setcmykcolor pop
+	}ndf
+	
+	/has_color
+		/colorimage where{
+			AGMCORE_producing_seps{
+				pop true
+			}{
+				systemdict eq
+			}ifelse
+		}{
+			false
+		}ifelse
+	def
+	
+	/map_index
+	{
+		1 index mul exch getinterval {255 div} forall
+	}def
+	
+	level2{
+		/mo /moveto ldf
+		/li /lineto ldf
+		/cv /curveto ldf
+		/knockout_unitsq
+		{
+			1 setgray
+			0 0 1 1 rectfill
+		}def
+		/level2ScreenFreq{
+			begin
+			60
+			HalftoneType 1 eq{
+				pop Frequency
+			}if
+			HalftoneType 2 eq{
+				pop GrayFrequency
+			}if
+			HalftoneType 5 eq{
+				pop Default level2ScreenFreq
+			}if
+			 end
+		}def
+		/currentScreenFreq{
+			currenthalftone level2ScreenFreq
+		}def
+		level2 /setcolorspace AGMCORE_key_known not and{
+		
+			/AGMCORE_&&&setcolorspace /setcolorspace ldf
+			/AGMCORE_ReplaceMappedColor
+			{
+				dup type dup /arraytype eq exch /packedarraytype eq or
+				{
+					dup 0 get dup /Separation eq
+					{
+						pop
+						dup length array copy
+						dup dup 1 get
+						current_spot_alias
+						{
+							dup map_alias
+							{
+								begin
+								/sep_colorspace_dict currentdict AGMCORE_gput
+								pop pop	pop
+									
+								[ 
+									/Separation Name 
+									CSA map_csa
+									dup /MappedCSA xdf 
+									/sep_colorspace_proc load
+								]
+								dup Name
+								end
+							}if
+						}if
+						map_reserved_ink_name 1 exch put
+					}{
+						/DeviceN eq 
+						{
+							dup length array copy
+							dup dup 1 get [ 
+								exch {
+									current_spot_alias{
+										dup map_alias{
+											/Name get exch pop
+										}if
+									}if
+									map_reserved_ink_name
+								} forall 
+							] 1 exch put
+						}if
+					}ifelse
+				}if
+			}def
+			/setcolorspace
+			{
+				dup type dup /arraytype eq exch /packedarraytype eq or
+				{
+					dup 0 get /Indexed eq
+					{
+						AGMCORE_distilling
+						{
+							/PhotoshopDuotoneList where
+							{
+								pop false
+							}{
+								true
+							}ifelse
+						}{
+							true
+						}ifelse
+						{
+							aload pop 3 -1 roll
+							AGMCORE_ReplaceMappedColor
+							3 1 roll 4 array astore
+						}if
+					}{
+						AGMCORE_ReplaceMappedColor
+					}ifelse
+				}if
+				AGMCORE_&&&setcolorspace
+			}def
+		}if	
+	}{
+		
+		/adj
+		{
+			currentstrokeadjust{
+				transform
+				0.25 sub round 0.25 add exch
+				0.25 sub round 0.25 add exch
+				itransform
+			}if
+		}def
+		/mo{
+			adj moveto
+		}def
+		/li{
+			adj lineto
+		}def
+		/cv{
+			6 2 roll adj
+			6 2 roll adj
+			6 2 roll adj curveto
+		}def
+		/knockout_unitsq
+		{
+			1 setgray
+			8 8 1 [8 0 0 8 0 0] {<ffffffffffffffff>} image
+		}def
+		/currentstrokeadjust{
+			/currentstrokeadjust AGMCORE_gget
+		}def
+		/setstrokeadjust{
+			/currentstrokeadjust exch AGMCORE_gput
+		}def
+		/currentScreenFreq{
+			currentscreen pop pop
+		}def
+		/setcolorspace
+		{
+			/currentcolorspace exch AGMCORE_gput
+		} def
+		
+		/currentcolorspace
+		{
+			/currentcolorspace AGMCORE_gget
+		} def
+		
+		/n_color_components
+		{
+			dup type /arraytype eq{
+				0 get
+			}if
+			dup /DeviceGray eq{
+				pop 1
+			}{
+				/DeviceCMYK eq{
+					4
+				}{
+					3
+				}ifelse
+			}ifelse
+		} def
+		
+		/setcolor_devicecolor
+		{
+			dup type /arraytype eq{
+				0 get
+			}if
+			dup /DeviceGray eq{
+				pop setgray
+			}{
+				/DeviceCMYK eq{
+					setcmykcolor
+				}{
+					setrgbcolor
+				}ifelse
+			}ifelse
+		}def
+	
+		/setcolor
+		{
+			currentcolorspace 0 get
+			dup /DeviceGray ne{
+				dup /DeviceCMYK ne{
+					dup /DeviceRGB ne{
+						dup /Separation eq{
+							pop
+							currentcolorspace 3 get exec
+							currentcolorspace 2 get
+						}{
+							dup /Indexed eq{
+								pop
+								currentcolorspace 3 get dup type /stringtype eq{
+									currentcolorspace 1 get n_color_components
+									3 -1 roll map_index
+								}{
+									exec
+								}ifelse
+								currentcolorspace 1 get
+							}{
+								/AGMCORE_cur_err /AGMCORE_invalid_color_space def
+								AGMCORE_invalid_color_space
+							}ifelse
+						}ifelse
+					}if
+				}if
+			}if
+			setcolor_devicecolor
+		} def
+	}ifelse
+	
+	/sop /setoverprint ldf
+	/lw /setlinewidth ldf
+	/lc /setlinecap ldf
+	/lj /setlinejoin ldf
+	/ml /setmiterlimit ldf
+	/dsh /setdash ldf
+	/sadj /setstrokeadjust ldf
+	/gry /setgray ldf
+	/rgb /setrgbcolor ldf
+	/cmyk /setcmykcolor ldf
+	/sep /setsepcolor ldf
+	/idx /setindexedcolor ldf
+	/colr /setcolor ldf
+	/csacrd /set_csa_crd ldf
+	/sepcs /setsepcolorspace ldf
+	/idxcs /setindexedcolorspace ldf
+	/cp /closepath ldf
+	/clp /clp_npth ldf
+	/eclp /eoclp_npth ldf
+	/spclp /stkpath_clp_npth ldf
+	/f /fill ldf
+	/ef /eofill ldf
+	/s /stroke ldf
+	/sclp /stk_n_clp_npth ldf
+	/nclp /npth_clp ldf
+	/gset /graphic_setup ldf
+	/gcln /graphic_cleanup ldf
+	
+	currentdict{
+		dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and {
+			bind
+		}if
+		def
+	}forall
+}def
+/page_trailer
+{
+	end
+}def
+/doc_trailer{
+}def
+systemdict /findcolorrendering known{
+	/findcolorrendering systemdict /findcolorrendering get def
+}if
+systemdict /setcolorrendering known{
+	/setcolorrendering systemdict /setcolorrendering get def
+}if
+/test_cmyk_color_plate
+{
+	gsave
+	setcmykcolor currentgray 1 ne
+	grestore
+}def
+/inRip_spot_has_ink
+{
+	dup Adobe_AGM_Core/AGMCORE_name xddf
+	convert_spot_to_process not
+}def
+/current_ink
+{
+	dup length 0 eq{
+		pop true
+	}{
+		Adobe_AGM_Core/ink_result false put
+		{
+			dup /ProcessCyan eq{
+				AGMCORE_cyan_plate ink_result or Adobe_AGM_Core/ink_result xddf
+			}{
+				dup /ProcessMagenta eq{
+					AGMCORE_magenta_plate ink_result or Adobe_AGM_Core/ink_result xddf
+				}{
+					dup /ProcessYellow eq{
+						AGMCORE_yellow_plate ink_result or Adobe_AGM_Core/ink_result xddf
+					}{
+						dup /ProcessBlack eq{
+							AGMCORE_black_plate ink_result or Adobe_AGM_Core/ink_result xddf
+						}{
+							dup /sep_colorspace_dict AGMCORE_gget dup null eq{
+								pop false ink_result or Adobe_AGM_Core/ink_result xddf
+							}{
+								/Name get eq{
+									1 setsepcolor
+									currentgray 1 ne ink_result or Adobe_AGM_Core/ink_result xddf
+								}{
+									false ink_result or Adobe_AGM_Core/ink_result xddf
+								}ifelse
+							}ifelse
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+			pop 
+		} forall
+		ink_result
+	}ifelse
+}def
+/map255_to_range
+{
+	1 index sub
+	3 -1 roll 255 div mul add
+}def
+/set_csa_crd
+{
+	/sep_colorspace_dict null AGMCORE_gput
+	begin
+		CSA map_csa setcolorspace_opt
+		set_crd
+	end
+}
+def
+/setsepcolor
+{ 
+	
+	/sep_colorspace_dict AGMCORE_gget begin
+		dup /sep_tint exch AGMCORE_gput
+		TintProc
+	end
+} def
+/sep_colorspace_proc
+{
+	Adobe_AGM_Core/AGMCORE_tmp xddf
+	/sep_colorspace_dict AGMCORE_gget begin
+	currentdict/Components known{
+		Components aload pop 
+		TintMethod/Lab eq{
+			2 {AGMCORE_tmp mul NComponents 1 roll} repeat
+			LMax sub AGMCORE_tmp mul LMax add  NComponents 1 roll
+		}{
+			TintMethod/Subtractive eq{
+				NComponents{
+					AGMCORE_tmp mul NComponents 1 roll
+				}repeat
+			}{
+				NComponents{
+					1 sub AGMCORE_tmp mul 1 add  NComponents 1 roll
+				} repeat
+			}ifelse
+		}ifelse
+	}{
+		ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
+		aload pop
+	}ifelse
+	end
+} def
+/sep_colorspace_gray_proc
+{
+	Adobe_AGM_Core/AGMCORE_tmp xddf
+	/sep_colorspace_dict AGMCORE_gget begin
+	GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
+	end
+} def
+/sep_proc_name
+{
+	dup 0 get 
+	dup /DeviceRGB eq exch /DeviceCMYK eq or level2 not and has_color not and{
+		pop [/DeviceGray]
+		/sep_colorspace_gray_proc
+	}{
+		/sep_colorspace_proc
+	}ifelse
+} def
+/setsepcolorspace
+{ 
+	
+	current_spot_alias{
+		dup begin
+			Name map_alias{
+				exch pop
+			}if
+		end
+	}if
+	dup /sep_colorspace_dict exch AGMCORE_gput
+	begin
+	/MappedCSA CSA map_csa def
+	Adobe_AGM_Core/AGMCORE_sep_special Name dup () eq exch (All) eq or ddf
+	
+	AGMCORE_avoid_L2_sep_space{
+		[/Indexed MappedCSA sep_proc_name 255 exch 
+			{ 255 div } /exec cvx 3 -1 roll [ 4 1 roll load /exec cvx ] cvx 
+		] setcolorspace_opt
+		/TintProc {
+			255 mul round cvi setcolor
+		}bdf
+	}{
+		MappedCSA 0 get /DeviceCMYK eq 
+		currentdict/Components known and 
+		AGMCORE_sep_special not and{
+			/TintProc [
+				Components aload pop Name findcmykcustomcolor 
+				/exch cvx /setcustomcolor cvx
+			] cvx bdf
+		}{
+ 			AGMCORE_host_sep Name (All) eq and{
+ 				/TintProc { 
+					1 exch sub setseparationgray 
+				}bdf
+ 			}{
+				AGMCORE_in_rip_sep MappedCSA 0 get /DeviceCMYK eq and 
+				AGMCORE_host_sep or
+				Name () eq and{
+					/TintProc [
+						MappedCSA sep_proc_name exch 0 get /DeviceCMYK eq{
+							cvx /setcmykcolor cvx
+						}{
+							cvx /setgray cvx
+						}ifelse
+					] cvx bdf
+				}{
+					AGMCORE_producing_seps MappedCSA 0 get dup /DeviceCMYK eq exch /DeviceGray eq or and AGMCORE_sep_special not and{
+	 					/TintProc [
+							/dup cvx
+							MappedCSA sep_proc_name cvx exch
+							0 get /DeviceGray eq{
+								1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx
+							}if
+							/Name cvx /findcmykcustomcolor cvx /exch cvx
+							
+							AGMCORE_host_sep{
+								AGMCORE_is_cmyk_sep
+							}{
+								Name inRip_spot_has_ink not
+							}ifelse
+							{
+		 						/pop cvx 1
+							}if
+							/setcustomcolor cvx
+						] cvx bdf
+ 					}{ 
+						/TintProc /setcolor ldf
+						
+						[/Separation Name MappedCSA sep_proc_name load ] setcolorspace_opt
+					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+	}ifelse
+	set_crd
+	setsepcolor
+	end
+} def
+/setindexedcolorspace
+{
+	dup /indexed_colorspace_dict exch AGMCORE_gput
+	begin
+		/MappedCSA CSA map_csa def
+		AGMCORE_host_sep level2 not and{
+			0 0 0 0 setcmykcolor
+		}{
+			[/Indexed MappedCSA 
+			level2 not has_color not and{
+				dup 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or{
+					pop [/DeviceGray]
+				}if
+				HiVal GrayLookup
+			}{
+				HiVal 
+				currentdict/RangeArray known{
+					{ 
+						/indexed_colorspace_dict AGMCORE_gget begin
+						Lookup exch 
+						dup HiVal gt{
+							pop HiVal
+						}if
+						NComponents mul NComponents getinterval {} forall
+						NComponents 1 sub -1 0{
+							RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
+							NComponents 1 roll
+						}for
+						end
+					} bind
+				}{
+					Lookup
+				}ifelse
+			}ifelse
+			] setcolorspace_opt
+			
+			set_crd
+		}ifelse
+	end
+}def
+/setindexedcolor
+{
+	AGMCORE_host_sep{
+		/indexed_colorspace_dict AGMCORE_gget/Lookup get 4 3 -1 roll map_index setcmykcolor
+	}{
+		setcolor
+	}ifelse
+} def
+/ignoreimagedata
+{
+	currentoverprint not{
+		gsave 
+		dup begin
+		1 setgray
+		0 0 ImageMatrix itransform 
+		Width Height ImageMatrix idtransform rectfill 
+		end
+		grestore
+		}if
+	consumeimagedata
+}def
+/add_csa
+{
+	Adobe_AGM_Core begin
+			/AGMCORE_CSA_cache xput
+	end
+}def
+/map_csa
+{
+	dup type /nametype eq{
+		Adobe_AGM_Core/AGMCORE_CSA_cache get exch get
+	}if
+}def
+/add_csd
+{
+	Adobe_AGM_Core begin
+		/AGMCORE_CSD_cache xput
+	end
+}def
+/get_csd
+{
+	dup type /nametype eq{
+		Adobe_AGM_Core/AGMCORE_CSD_cache get exch get
+	}if
+}def
+/get_csd_by_name
+{
+	dup type dup /nametype eq exch /stringtype eq or{
+		Adobe_AGM_Core begin
+		/AGMCORE_CSD_Name xdf
+		AGMCORE_CSD_cache
+		{
+			dup /Name get AGMCORE_CSD_Name eq
+			{
+				exch pop exit
+			}{
+				pop
+			}ifelse
+			pop
+		}forall
+		end
+	}if
+}def
+/cachepattern_level2
+{
+	4 dict begin
+	/comparebuffer exch def
+	/holdbuffer exch def
+	/readbuffer 1024 string def
+	/LZWFilter holdbuffer /LZWEncode filter def
+	{
+		currentfile readbuffer readline not
+			{pop exit}
+		if
+		dup LZWFilter exch writestring
+		LZWFilter (\n) writestring
+		comparebuffer eq
+			{exit}
+		if
+	}loop
+	LZWFilter closefile
+	end
+}def
+/cachepattern_level3
+{
+	3 dict begin
+	/comparebuffer exch def
+	/readbuffer 1024 string def
+	/DoEOL false def
+	{ 
+		DoEOL
+			{
+			(\n)
+			/DoEOL false def
+			}
+			{
+			currentfile readbuffer readline not
+				{pop ()}
+				{
+				dup length 0 eq
+					{ pop(\n)}
+					{
+					dup comparebuffer eq
+						{pop ()}
+						{/DoEOL true def}
+					ifelse
+					}
+				ifelse
+				}
+			ifelse
+			}
+		ifelse
+	} /ReusableStreamDecode filter
+	end
+}def
+/add_pattern
+{
+	Adobe_AGM_Core begin
+		/AGMCORE_pattern_cache xput
+	end
+}def
+/get_pattern
+{
+	dup type /nametype eq{
+		Adobe_AGM_Core/AGMCORE_pattern_cache get exch get
+	}if
+}def
+/make_pattern
+{
+	dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
+	exch 3 index /XStep get 1 index exch 2 copy div cvi mul sub sub
+	exch 3 index /YStep get 1 index exch 2 copy div cvi mul sub sub
+	matrix translate exch matrix concatmatrix
+	makepattern
+}def
+/set_pattern
+{
+	dup /PatternType get 1 eq{
+		dup /PaintType get 1 eq{
+			false sop [/DeviceGray] setcolorspace 0 setgray
+		}if
+	}if
+	setpattern
+}def
+/setcolorspace_opt
+{
+	dup currentcolorspace eq{
+		pop
+	}{
+		setcolorspace
+	}ifelse
+}def
+/updatecolorrendering
+{
+	
+	currentcolorrendering/Intent known{
+		currentcolorrendering/Intent get
+	}{
+		null
+	}ifelse
+	
+	Intent ne{
+		false  
+		Intent
+		AGMCORE_CRD_cache {
+			exch pop 
+			begin
+				dup Intent eq{
+					currentdict setcolorrendering_opt
+					end 
+					exch pop true exch	
+					exit
+				}if
+			end
+		} forall
+		pop
+		not{
+			systemdict /findcolorrendering known{
+				Intent findcolorrendering pop
+				/ColorRendering findresource 
+				dup length dict copy
+				setcolorrendering_opt
+			}if
+		}if
+	}if
+} def
+/add_crd
+{
+	AGMCORE_CRD_cache 3 1 roll put
+}def
+/set_crd
+{
+	AGMCORE_host_sep not level2 and{
+		currentdict/CRD known{
+			AGMCORE_CRD_cache CRD get dup null ne{
+				setcolorrendering_opt
+			}{
+				pop
+			}ifelse
+		}{
+			currentdict/Intent known{
+				updatecolorrendering
+			}if
+		}ifelse
+	}if
+}def
+/setcolorrendering_opt
+{
+	dup currentcolorrendering eq{
+		pop
+	}{
+		begin
+			/Intent Intent def
+			currentdict
+		end
+		setcolorrendering
+	}ifelse
+}def
+/cdndf
+{
+	exch dup currentdict exch known{
+		pop pop
+	}{
+		exch def
+	}ifelse
+}def
+/cpaint_gcomp
+{
+	convert_to_process Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
+	Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
+	{
+		(%end_cpaint_gcomp) flushinput
+	}if
+}def
+/cpaint_gsep
+{
+	Adobe_AGM_Core/AGMCORE_ConvertToProcess get
+	{	
+		(%end_cpaint_gsep) flushinput
+	}if
+}def
+/cpaint_gend
+{
+	newpath
+}def
+/AGMCORE_ctm_stack bdict
+	/push_ctm {
+		stack length size le{
+			stack dup length 2 mul array 
+			dup /stack exch def
+			copy pop
+		}if
+		stack size 3 -1 roll put
+		/size size 1 add def
+	}
+	/pop_ctm {
+		/size size 1 sub def
+		size 0 lt{ 
+			/size 0 def
+		}if
+		stack size get
+	}
+	/stack 1 array
+	/size 0 
+edict 
+def
+/save_ctm
+{
+	matrix currentmatrix AGMCORE_ctm_stack begin 
+		push_ctm 
+	end
+}def
+/restore_ctm
+{
+	AGMCORE_ctm_stack begin
+		pop_ctm 
+	end
+	setmatrix
+}def
+/path_rez
+{
+	dup 0 ne{
+		AGMCORE_deviceDPI exch div 
+		dup 1 lt{
+			pop 1
+		}if
+		setflat
+	}{
+		pop
+	}ifelse 	
+}def
+/rdcmntline {
+	currentfile AGMCORE_str256 readline pop
+	(%) anchorsearch {pop} if
+} def
+/set_spot_alias_ary
+{
+	/AGMCORE_SpotAliasAry where{
+		pop pop
+	}{
+		Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
+		true set_spot_alias
+	}ifelse
+}def
+/set_spot_alias
+{
+	/AGMCORE_SpotAliasAry where{
+		/AGMCORE_current_spot_alias 3 -1 roll put
+	}{
+		pop
+	}ifelse
+}def
+/current_spot_alias
+{
+	/AGMCORE_SpotAliasAry where{
+		/AGMCORE_current_spot_alias get
+	}{
+		false
+	}ifelse
+}def
+/map_alias
+{
+	/AGMCORE_SpotAliasAry where{
+		begin
+			/AGMCORE_name xdf
+			false	
+			AGMCORE_SpotAliasAry{
+				dup/Name get AGMCORE_name eq{
+					save exch
+					/Adobe_AGM_Core currentdict def
+					/CSD get get_csd
+					exch restore
+					exch pop true
+					exit
+				}{
+					pop
+				}ifelse
+			}forall
+		end
+	}{
+		pop false
+	}ifelse
+}bdf
+/spot_alias
+{
+	true set_spot_alias
+	
+	/AGMCORE_&setcustomcolor AGMCORE_key_known not {
+		Adobe_AGM_Core/AGMCORE_&setcustomcolor /setcustomcolor load put
+	} if
+	/customcolor_tint 1 AGMCORE_gput
+	
+	Adobe_AGM_Core begin
+	/setcustomcolor
+	{
+		
+		dup /customcolor_tint exch AGMCORE_gput
+		
+		current_spot_alias{
+			1 index 4 get map_alias{
+				mark 3 1 roll
+				setsepcolorspace
+				counttomark 0 ne{
+					setsepcolor
+				}if
+				pop
+				pop
+			}{
+				AGMCORE_&setcustomcolor
+			}ifelse
+		}{
+			AGMCORE_&setcustomcolor
+		}ifelse
+	}bdf
+	end
+}def
+/begin_feature
+{
+	Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
+	count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
+	{Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
+}def
+/end_feature
+{
+	2 dict begin
+	/spd /setpagedevice load def
+	/setpagedevice { get_gstate spd set_gstate } def
+	stopped{$error/newerror false put}if
+	end
+	count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
+	countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
+	{Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
+}def
+/set_negative
+{
+	Adobe_AGM_Core begin
+	/AGMCORE_inverting exch def
+	level2{
+		currentpagedevice/NegativePrint known{
+			currentpagedevice/NegativePrint get Adobe_AGM_Core/AGMCORE_inverting get ne{
+				true begin_feature true{
+						bdict /NegativePrint Adobe_AGM_Core/AGMCORE_inverting get edict setpagedevice
+				}end_feature
+			}if
+			/AGMCORE_inverting false def
+		}if
+	}if
+	AGMCORE_inverting{
+		[{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
+		gsave newpath clippath 1 /setseparationgray where{pop setseparationgray}{setgray}ifelse 
+		fill grestore
+	}if
+	end
+}def
+/lw_save_restore_override {
+	/md where {
+		pop
+		md begin
+		/pmSVsetup{} def
+		/endp{}def
+		/pse{}def
+		/psb{}def
+		/orig_showpage where
+			{pop}
+			{/orig_showpage /showpage load def}
+		ifelse
+		/showpage {orig_showpage gR} def
+		end
+	}if
+}def
+/pscript_showpage_override {
+	/NTPSOct95 where
+	{
+		begin
+		showpage
+		save
+		/showpage /restore load def
+		/restore {exch pop}def
+		end
+	}if
+}def
+/driver_media_override
+{
+	/md where {
+		pop
+		md /initializepage known {
+			md /initializepage {} put
+		} if
+		md /rC known {
+			md /rC {4{pop}repeat} put
+		} if
+	}if
+	
+	Adobe_AGM_Core /AGMCORE_Default_CTM matrix currentmatrix put
+}def
+/driver_check_media_override
+{
+	Adobe_AGM_Core /AGMCORE_Default_CTM get matrix currentmatrix ne
+	{
+		Adobe_AGM_Core /AGMCORE_Default_CTM get setmatrix
+	}if
+}def
+AGMCORE_err_strings begin
+	/AGMCORE_bad_environ (Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. ) def
+	/AGMCORE_color_space_onhost_seps (This job contains colors that will not separate with on-host methods. ) def
+	/AGMCORE_invalid_color_space (This job contains an invalid color space. ) def
+end
+end
+systemdict /setpacking known
+{
+	setpacking
+} if
+%%EndResource
+%%BeginResource: procset Adobe_CoolType_Core 2.12 0
+%%Copyright: Copyright 1997-2001 Adobe Systems Incorporated.  All Rights Reserved.
+%%Version: 2.12 0
+userdict/Adobe_CoolType_Core 60 dict dup begin put/Level2? systemdict
+/languagelevel known dup{pop systemdict/languagelevel get 2 ge}if def Level2?
+not{/currentglobal false def/setglobal/pop load def/gcheck{pop false}bind def
+/currentpacking false def/setpacking/pop load def/SharedFontDirectory 0 dict
+def}if currentpacking true setpacking/@_SaveStackLevels{Adobe_CoolType_Data
+begin @opStackCountByLevel @opStackLevel 2 copy known not{2 copy 3 dict dup
+/args 7 index 5 add array put put get}{get dup/args get dup length 3 index lt{
+dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args
+exch put}{pop}ifelse}ifelse begin count 2 sub 1 index lt{pop count 1 sub}if
+dup/argCount exch def dup 0 gt{exch 1 index 2 add 1 roll args exch 0 exch
+getinterval astore pop}{pop}ifelse count 1 sub/restCount exch def end
+/@opStackLevel @opStackLevel 1 add def countdictstack 1 sub
+ at dictStackCountByLevel exch @dictStackLevel exch put/@dictStackLevel
+ at dictStackLevel 1 add def end}bind def/@_RestoreStackLevels{
+Adobe_CoolType_Data begin/@opStackLevel @opStackLevel 1 sub def
+ at opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt{{pop
+}repeat}{pop}ifelse args 0 argCount getinterval{}forall end/@dictStackLevel
+ at dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end
+countdictstack exch sub dup 0 gt{{end}repeat}{pop}ifelse}bind def
+/@_PopStackLevels{Adobe_CoolType_Data begin/@opStackLevel @opStackLevel 1 sub
+def/@dictStackLevel @dictStackLevel 1 sub def end}bind def/@Raise{exch cvx
+exch errordict exch get exec stop}bind def/@ReRaise{cvx $error/errorname get
+errordict exch get exec stop}bind def/@Stopped{0 @#Stopped}bind def/@#Stopped{
+ at _SaveStackLevels stopped{@_RestoreStackLevels true}{@_PopStackLevels false}
+ifelse}bind def/@Arg{Adobe_CoolType_Data begin @opStackCountByLevel
+ at opStackLevel 1 sub get/args get exch get end}bind def/doc_setup{
+Adobe_CoolType_Core begin/mov/moveto load def/nfnt/newencodedfont load def
+/mfnt/makefont load def/sfnt/setfont load def/ufnt/undefinefont load def/chp
+/charpath load def/awsh/awidthshow load def/wsh/widthshow load def/ash/ashow
+load def/sh/show load def end userdict/Adobe_CoolType_Data 6 dict dup begin
+/AddWidths? false def/CC 0 def/charcode 2 string def/@opStackCountByLevel 32
+dict def/@opStackLevel 0 def/@dictStackCountByLevel 32 dict def
+/@dictStackLevel 0 def end put}bind def/doc_trailer{currentdict
+Adobe_CoolType_Core eq{end}if}bind def/page_setup{Adobe_CoolType_Core begin}
+bind def/page_trailer{end}bind def/unload{systemdict/languagelevel known{
+systemdict/languagelevel get 2 ge{userdict/Adobe_CoolType_Core 2 copy known{
+undef}{pop pop}ifelse}if}if}bind def/ndf{1 index where{pop pop pop}{dup xcheck
+{bind}if def}ifelse}def/findfont dup systemdict begin userdict begin
+/globaldict where{/globaldict get begin}if dup where pop exch get/globaldict
+where{pop end}if end end def/systemfindfont/findfont load def/undefinefont{pop
+}ndf/copyfont{currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{
+dup length}ifelse 2 index length add 1 add dict begin exch{1 index/FID eq{pop
+pop}{def}ifelse}forall dup null eq{pop}{{def}forall}ifelse currentdict end
+exch setglobal}bind def/copyarray{currentglobal exch dup gcheck setglobal dup
+length array copy exch setglobal}bind def/newencodedfont{currentglobal{
+SharedFontDirectory 3 index known{SharedFontDirectory 3 index get
+/FontReferenced known}{false}ifelse}{FontDirectory 3 index known{FontDirectory
+3 index get/FontReferenced known}{SharedFontDirectory 3 index known{
+SharedFontDirectory 3 index get/FontReferenced known}{false}ifelse}ifelse}
+ifelse dup{3 index findfont/FontReferenced get 2 index findfont ne{pop false}
+if}if{pop 1 index findfont/Encoding get exch 0 1 255{2 copy get 3 index 3 1
+roll put}for pop pop pop}{findfont dup dup maxlength 2 add dict begin exch{1
+index/FID ne{def}{pop pop}ifelse}forall/FontReferenced exch def/Encoding exch
+dup length array copy def/FontName 1 index dup type/stringtype eq{cvn}if def
+currentdict end definefont pop}ifelse}bind def/SetSubstituteStrategy{
+$SubstituteFont begin dup type/dicttype ne{0 dict}if currentdict/$Strategies
+known{exch $Strategies exch 2 copy known{get 2 copy maxlength exch maxlength
+add dict begin{def}forall{def}forall currentdict dup/$Init known{dup/$Init get
+exec}if end/$Strategy exch def}{pop pop pop}ifelse}{pop pop}ifelse end}bind
+def/scff{$SubstituteFont begin dup type/stringtype eq{dup length exch}{null}
+ifelse/$sname exch def/$slen exch def end{findfont}@Stopped{dup length dup 21
+add string dup 4 3 roll 0 exch 128 string cvs putinterval exch 1 index exch
+(_was-malformed-so-was)putinterval cvn{findfont}@Stopped{pop/Courier findfont}
+if}if $SubstituteFont begin/$sname null def/$slen 0 def end}bind def
+/isWidthsOnlyFont{dup/WidthsOnly known{pop pop true}{dup/FDepVector known{
+/FDepVector get{isWidthsOnlyFont dup{exit}if}forall}{dup/FDArray known{
+/FDArray get{isWidthsOnlyFont dup{exit}if}forall}{pop}ifelse}ifelse}ifelse}
+bind def/?set{$SubstituteFont begin/$substituteFound false def/$fontname 4
+index def/$doSmartSub false def end 3 index findfont $SubstituteFont begin
+$substituteFound{false}{dup/FontName known{dup/FontName get $fontname eq 1
+index/DistillerFauxFont known not and/currentdistillerparams where{pop false 2
+index isWidthsOnlyFont not and}if}{false}ifelse}ifelse exch pop/$doSmartSub
+true def end{exch pop exch pop exch 2 dict dup/Found 3 index put exch findfont
+exch}{exch exec exch findfont 2 dict dup/Downloaded 6 5 roll put}ifelse dup
+/FontName 4 index put copyfont definefont pop}bind def/?str1 256 string def
+/?str2 256 string def/?add{1 index type/integertype eq{exch true 4 2}{false 3
+1}ifelse roll 1 index findfont dup/Widths known{Adobe_CoolType_Data/AddWidths?
+true put gsave dup 1000 scalefont setfont}if/Downloaded known{exec exch{exch
+?str2 cvs exch findfont/Downloaded get 1 dict begin/Downloaded 1 index def
+?str1 cvs length ?str1 1 index 1 add 3 index putinterval exch length 1 add 1
+index add ?str1 2 index(*)putinterval ?str1 0 2 index getinterval cvn findfont
+?str1 3 index(+)putinterval 2 dict dup/FontName ?str1 0 6 index getinterval
+cvn put dup/Downloaded Downloaded put end copyfont dup/FontName get exch
+definefont pop pop pop}{pop}ifelse}{pop exch{findfont dup/Found get dup length
+exch ?str1 cvs pop ?str1 1 index(+)putinterval ?str1 1 index 1 add 4 index
+?str2 cvs putinterval ?str1 exch 0 exch 5 4 roll ?str2 cvs length 1 add add
+getinterval cvn 1 dict exch 1 index exch/FontName exch put copyfont dup
+/FontName get exch definefont pop}{pop}ifelse}ifelse Adobe_CoolType_Data
+/AddWidths? get{grestore Adobe_CoolType_Data/AddWidths? false put}if}bind def
+/?sh{currentfont/Downloaded known{exch}if pop}bind def/?chp{currentfont
+/Downloaded known{pop}{false chp}ifelse}bind def/?mv{currentfont/Downloaded
+known{moveto pop pop}{pop pop moveto}ifelse}bind def setpacking userdict
+/$SubstituteFont 25 dict put 1 dict begin/SubstituteFont dup $error exch 2
+copy known{get}{pop pop{pop/Courier}bind}ifelse def/currentdistillerparams
+where dup{pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known{
+get/Error eq}{pop pop false}ifelse}if not{countdictstack array dictstack 0 get
+begin userdict begin $SubstituteFont begin/$str 128 string def/$fontpat 128
+string def/$slen 0 def/$sname null def/$match false def/$fontname null def
+/$substituteFound false def/$doSmartSub true def/$depth 0 def/$fontname null
+def/$italicangle 26.5 def/$dstack null def/$Strategies 10 dict dup begin
+/$Type3Underprint{currentglobal exch false setglobal 11 dict begin/UseFont
+exch $WMode 0 ne{dup length dict copy dup/WMode $WMode put/UseFont exch
+definefont}if def/FontName $fontname dup type/stringtype eq{cvn}if def
+/FontType 3 def/FontMatrix[.001 0 0 .001 0 0]def/Encoding 256 array dup 0 1
+255{/.notdef put dup}for pop def/FontBBox[0 0 0 0]def/CCInfo 7 dict dup begin
+/cc null def/x 0 def/y 0 def end def/BuildChar{exch begin CCInfo begin 1
+string dup 0 3 index put exch pop/cc exch def UseFont 1000 scalefont setfont
+cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont
+/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end}bind
+def currentdict end exch setglobal}bind def/$GetaTint 2 dict dup begin
+/$BuildFont{dup/WMode known{dup/WMode get}{0}ifelse/$WMode exch def $fontname
+exch dup/FontName known{dup/FontName get dup type/stringtype eq{cvn}if}{
+/unnamedfont}ifelse exch $deepcopyfont exch 1 index exch/FontBasedOn exch put
+dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont}bind def
+/$Underprint{gsave x abs y abs gt{/y 1000 def}{/x -1000 def 500 120 translate}
+ifelse Level2?{[/Separation(All)/DeviceCMYK{0 0 0 1 pop}]setcolorspace}{0
+setgray}ifelse 10 setlinewidth x .8 mul[7 3]{y mul 8 div 120 sub x 10 div exch
+moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave
+Level2?{.2 setcolor}{.8 setgray}ifelse fill grestore stroke}forall pop
+grestore}bind def end def/$Oblique 1 dict dup begin/$BuildFont{currentglobal
+exch dup gcheck setglobal null copyfont begin/FontBasedOn currentdict/FontName
+known{FontName dup type/stringtype eq{cvn}if}{/unnamedfont}ifelse def/FontName
+$fontname dup type/stringtype eq{cvn}if def/currentdistillerparams where{pop}{
+/FontInfo currentdict/FontInfo known{FontInfo null copyfont}{2 dict}ifelse dup
+begin/ItalicAngle $italicangle def/FontMatrix FontMatrix[1 0 ItalicAngle dup
+sin exch cos div 1 0 0]matrix concatmatrix readonly end 4 2 roll def def}
+ifelse FontName currentdict end definefont exch setglobal}bind def end def
+/$None 1 dict dup begin/$BuildFont{}bind def end def end def/$Oblique
+SetSubstituteStrategy/$findfontByEnum{dup type/stringtype eq{cvn}if dup
+/$fontname exch def $sname null eq{$str cvs dup length $slen sub $slen
+getinterval}{pop $sname}ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch
+putinterval/$match false def $SubstituteFont/$dstack countdictstack array
+dictstack put mark{$fontpat 0 $slen 7 add getinterval{/$match exch def exit}
+$str filenameforall}stopped{cleardictstack currentdict true $SubstituteFont
+/$dstack get{exch{1 index eq{pop false}{true}ifelse}{begin false}ifelse}forall
+pop}if cleartomark/$slen 0 def $match false ne{$match(fonts/)anchorsearch pop
+pop cvn}{/Courier}ifelse}bind def/$ROS 1 dict dup begin/Adobe 4 dict dup begin
+/Japan1[/Ryumin-Light/HeiseiMin-W3/GothicBBB-Medium/HeiseiKakuGo-W5
+/HeiseiMaruGo-W4/Jun101-Light]def/Korea1[/HYSMyeongJo-Medium/HYGoThic-Medium]
+def/GB1[/STSong-Light/STHeiti-Regular]def/CNS1[/MKai-Medium/MHei-Medium]def
+end def end def/$cmapname null def/$deepcopyfont{dup/FontType get 0 eq{1 dict
+dup/FontName/copied put copyfont begin/FDepVector FDepVector copyarray 0 1 2
+index length 1 sub{2 copy get $deepcopyfont dup/FontName/copied put/copied
+exch definefont 3 copy put pop pop}for def currentdict end}{$Strategies
+/$Type3Underprint get exec}ifelse}bind def/$buildfontname{length $str 1 index
+(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname
+length add $str exch 0 exch getinterval cvn}bind def/$findfontByROS{/$fontname
+exch def $ROS Registry 2 copy known{get Ordering 2 copy known{get}{pop pop[]}
+ifelse}{pop pop[]}ifelse false exch{dup/CIDFont resourcestatus{pop pop save 1
+index/CIDFont findresource dup/WidthsOnly known{dup/WidthsOnly get}{false}
+ifelse exch pop exch restore{pop}{exch pop true exit}ifelse}{pop}ifelse}forall
+{$str cvs $buildfontname}{false(*){save exch dup/CIDFont findresource dup
+/WidthsOnly known{dup/WidthsOnly get not}{true}ifelse exch/CIDSystemInfo get
+dup/Registry get Registry eq exch/Ordering get Ordering eq and and{exch
+restore exch pop true exit}{pop restore}ifelse}$str/CIDFont resourceforall{
+$buildfontname}{$fontname $findfontByEnum}ifelse}ifelse}bind def end end
+currentdict/$error known currentdict/languagelevel known and dup{pop $error
+/SubstituteFont known}if dup{$error}{Adobe_CoolType_Core}ifelse begin{
+/SubstituteFont/CMap/Category resourcestatus{pop pop{$SubstituteFont begin
+/$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt
+and{$sname null eq{dup $str cvs dup length $slen sub $slen getinterval cvn}{
+$sname}ifelse dup/CMap resourcestatus{pop pop dup/$cmapname exch def/CMap
+findresource/CIDSystemInfo get{def}forall $findfontByROS}{128 string cvs dup
+(-)search{3 1 roll search{3 1 roll pop{dup cvi}stopped{pop pop pop pop pop
+$findfontByEnum}{4 2 roll pop pop exch length exch 2 index length 2 index sub
+exch 1 sub -1 0{$str cvs dup length 4 index 0 4 index 4 3 roll add getinterval
+exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus{pop pop 4 1
+roll pop pop pop dup/$cmapname exch def/CMap findresource/CIDSystemInfo get{
+def}forall $findfontByROS true exit}{pop}ifelse}for dup type/booleantype eq{
+pop}{pop pop $findfontByEnum}ifelse}ifelse}{pop pop pop $findfontByEnum}ifelse
+}{pop pop $findfontByEnum}ifelse}ifelse}{//SubstituteFont exec}ifelse/$slen 0
+def end}}{{$SubstituteFont begin/$substituteFound true def dup length $slen gt
+$sname null ne or $slen 0 gt and{$findfontByEnum}{//SubstituteFont exec}ifelse
+end}}ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont
+load put}{/scfindfont{$SubstituteFont begin dup systemfindfont dup/FontName
+known{dup/FontName get dup 3 index ne}{/noname true}ifelse dup{
+/$origfontnamefound 2 index def/$origfontname 4 index def/$substituteFound
+true def}if exch pop{$slen 0 gt $sname null ne 3 index length $slen gt or and{
+pop dup $findfontByEnum findfont dup maxlength 1 add dict begin{1 index/FID eq
+{pop pop}{def}ifelse}forall currentdict end definefont dup/FontName known{dup
+/FontName get}{null}ifelse $origfontnamefound ne{$origfontname $str cvs print
+( substitution revised, using )print dup/FontName known{dup/FontName get}{
+(unspecified font)}ifelse $str cvs print(.
+)print}if}{exch pop}ifelse}{exch pop}ifelse end}bind def}ifelse end end
+Adobe_CoolType_Core/findfont{$SubstituteFont begin $depth 0 eq{/$fontname 1
+index dup type/stringtype ne{$str cvs}if def/$substituteFound false def}if
+/$depth $depth 1 add def end scfindfont $SubstituteFont begin/$depth $depth 1
+sub def $substituteFound $depth 0 eq and $doSmartSub and{currentdict/$Strategy
+known{$Strategy/$BuildFont get exec}if}if end}bind put}if end end
+%%EndResource
+%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.13 0
+%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated.
+%%Version: 1.13 0
+systemdict/languagelevel known dup{currentglobal false setglobal}{false}ifelse
+exch userdict/Adobe_CoolType_Utility 2 copy known{2 copy get dup maxlength 25
+add dict copy}{25 dict}ifelse put Adobe_CoolType_Utility begin/ct_Level2? exch
+def/ct_Clone? 1183615869 internaldict dup/CCRun known not exch/eCCRun known
+not ct_Level2? and or def/ct_UseNativeCapability? systemdict/composefont known
+def/ct_MakeOCF 35 dict def/ct_Vars 25 dict def/ct_GlyphDirProcs 6 dict def
+/ct_BuildCharDict 15 dict dup begin/charcode 2 string def/dst_string 1500
+string def/nullstring()def/usewidths? true def end def ct_Level2?{setglobal}{
+pop}ifelse ct_GlyphDirProcs begin/GetGlyphDirectory{systemdict/languagelevel
+known{pop/CIDFont findresource/GlyphDirectory get}{1 index/CIDFont
+findresource/GlyphDirectory get dup type/dicttype eq{dup dup maxlength exch
+length sub 2 index lt{dup length 2 index add dict copy 2 index/CIDFont
+findresource/GlyphDirectory 2 index put}if}if exch pop exch pop}ifelse +}def/+
+{systemdict/languagelevel known{currentglobal false setglobal 3 dict begin/vm
+exch def}{1 dict begin}ifelse/$ exch def systemdict/languagelevel known{vm
+setglobal/gvm currentglobal def $ gcheck setglobal}if ?{$ begin}if}def/?{$
+type/dicttype eq}def/|{userdict/Adobe_CoolType_Data known{Adobe_CoolType_Data
+/AddWidths? known{currentdict Adobe_CoolType_Data begin begin AddWidths?{
+Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode
+exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put
+stringwidth 2 array astore currentfont/Widths get exch CC exch put}{?{def}{$ 3
+1 roll put}ifelse}ifelse end end}{?{def}{$ 3 1 roll put}ifelse}ifelse}{?{def}{
+$ 3 1 roll put}ifelse}ifelse}def/!{?{end}if systemdict/languagelevel known{gvm
+setglobal}if end}def/:{string currentfile exch readstring pop}executeonly def
+end ct_MakeOCF begin/ct_cHexEncoding[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09
+/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C
+/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F
+/c30/c31/c32/c33/c34/c35/c36/c37/c38/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42
+/c43/c44/c45/c46/c47/c48/c49/c4A/c4B/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55
+/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68
+/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B
+/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E
+/c8F/c90/c91/c92/c93/c94/c95/c96/c97/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1
+/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4
+/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7
+/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA
+/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED
+/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def
+/ct_CID_STR_SIZE 8000 def/ct_mkocfStr100 100 string def/ct_defaultFontMtx[.001
+0 0 .001 0 0]def/ct_1000Mtx[1000 0 0 1000 0 0]def/ct_raise{exch cvx exch
+errordict exch get exec stop}bind def/ct_reraise{cvx $error/errorname get
+(Error: )print dup(                    )cvs print errordict exch get exec stop
+}bind def/ct_cvnsi{1 index add 1 sub 1 exch 0 4 1 roll{2 index exch get exch 8
+bitshift add}for exch pop}bind def/ct_GetInterval{Adobe_CoolType_Utility
+/ct_BuildCharDict get begin/dst_index 0 def dup dst_string length gt{dup
+string/dst_string exch def}if 1 index ct_CID_STR_SIZE idiv/arrayIndex exch def
+2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub{dup 3 index
+add 2 index length le{2 index getinterval dst_string dst_index 2 index
+putinterval length dst_index add/dst_index exch def exit}{1 index length 1
+index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval
+pop dup dst_index add/dst_index exch def sub/arrayIndex arrayIndex 1 add def 2
+index dup length arrayIndex gt{arrayIndex get}{pop exit}ifelse 0}ifelse}loop
+pop pop pop dst_string 0 dst_index getinterval end}bind def ct_Level2?{
+/ct_resourcestatus currentglobal mark true setglobal{/unknowninstancename
+/Category resourcestatus}stopped{cleartomark setglobal true}{cleartomark
+currentglobal not exch setglobal}ifelse{{mark 3 1 roll/Category findresource
+begin ct_Vars/vm currentglobal put({ResourceStatus} stopped)0()/SubFileDecode
+filter cvx exec{cleartomark false}{{3 2 roll pop true}{cleartomark false}
+ifelse}ifelse ct_Vars/vm get setglobal end}}{{resourcestatus}}ifelse bind def
+/CIDFont/Category ct_resourcestatus{pop pop}{currentglobal true setglobal
+/Generic/Category findresource dup length dict copy dup/InstanceType/dicttype
+put/CIDFont exch/Category defineresource pop setglobal}ifelse
+ct_UseNativeCapability?{/CIDInit/ProcSet findresource begin 12 dict begin
+begincmap/CIDSystemInfo 3 dict dup begin/Registry(Adobe)def/Ordering(Identity)
+def/Supplement 0 def end def/CMapName/Identity-H def/CMapVersion 1 def
+/CMapType 1 def 1 begincodespacerange<0000><ffff>endcodespacerange 1
+begincidrange<0000><ffff>0 endcidrange endcmap CMapName currentdict/CMap
+defineresource pop end end}if}{/ct_Category 2 dict begin/CIDFont 10 dict def
+/ProcSet 2 dict def currentdict end def/defineresource{ct_Category 1 index 2
+copy known{get dup dup maxlength exch length eq{dup length 10 add dict copy
+ct_Category 2 index 2 index put}if 3 index 3 index put pop exch pop}{pop pop
+/defineresource/undefined ct_raise}ifelse}bind def/findresource{ct_Category 1
+index 2 copy known{get 2 index 2 copy known{get 3 1 roll pop pop}{pop pop
+/findresource/undefinedresource ct_raise}ifelse}{pop pop/findresource
+/undefined ct_raise}ifelse}bind def/resourcestatus{ct_Category 1 index 2 copy
+known{get 2 index known exch pop exch pop{0 -1 true}{false}ifelse}{pop pop
+/findresource/undefined ct_raise}ifelse}bind def/ct_resourcestatus
+/resourcestatus load def}ifelse/ct_CIDInit 2 dict begin/ct_cidfont_stream_init
+{{dup(Binary)eq{pop null currentfile ct_Level2?{{cid_BYTE_COUNT()
+/SubFileDecode filter}stopped{pop pop pop}if}if/readstring load exit}if dup
+(Hex)eq{pop currentfile ct_Level2?{{null exch/ASCIIHexDecode filter/readstring
+}stopped{pop exch pop(>)exch/readhexstring}if}{(>)exch/readhexstring}ifelse
+load exit}if/StartData/typecheck ct_raise}loop cid_BYTE_COUNT ct_CID_STR_SIZE
+le{2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put
+}{cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1
+exch{2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop}for 2
+index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch
+1 index length 1 sub exch put}ifelse cid_CIDFONT exch/GlyphData exch put 2
+index null eq{pop pop pop}{pop/readstring load 1 string exch{3 copy exec pop
+dup length 0 eq{pop pop pop pop pop true exit}if 4 index eq{pop pop pop pop
+false exit}if}loop pop}ifelse}bind def/StartData{mark{currentdict dup/FDArray
+get 0 get/FontMatrix get 0 get .001 eq{dup/CDevProc known not{/CDevProc
+1183615869 internaldict/stdCDevProc 2 copy known{get}{pop pop{pop pop pop pop
+pop 0 -1000 7 index 2 div 880}}ifelse def}if}{/CDevProc{pop pop pop pop pop 0
+1 cid_temp/cid_CIDFONT get/FDArray get 0 get/FontMatrix get 0 get div 7 index
+2 div 1 index .88 mul}def}ifelse/cid_temp 15 dict def cid_temp begin
+/cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt{
+ct_cidfont_stream_init FDArray{/Private get dup/SubrMapOffset known{begin
+/Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2?{
+currentdict dup/SubrMapOffset undef dup/SubrCount undef/SDBytes undef}if end
+/cid_SD_BYTES exch def/cid_SUBR_COUNT exch def/cid_SUBR_MAP_OFFSET exch def
+/cid_SUBRS exch def cid_SUBR_COUNT 0 gt{GlyphData cid_SUBR_MAP_OFFSET
+cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub{
+exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch
+cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll
+GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put}
+for pop}if}{pop}ifelse}forall}if cleartomark pop pop end CIDFontName
+currentdict/CIDFont defineresource pop end end}stopped{cleartomark/StartData
+ct_reraise}if}bind def currentdict end def/ct_saveCIDInit{/CIDInit/ProcSet
+ct_resourcestatus{true}{/CIDInitC/ProcSet ct_resourcestatus}ifelse{pop pop
+/CIDInit/ProcSet findresource ct_UseNativeCapability?{pop null}{/CIDInit
+ct_CIDInit/ProcSet defineresource pop}ifelse}{/CIDInit ct_CIDInit/ProcSet
+defineresource pop null}ifelse ct_Vars exch/ct_oldCIDInit exch put}bind def
+/ct_restoreCIDInit{ct_Vars/ct_oldCIDInit get dup null ne{/CIDInit exch/ProcSet
+defineresource pop}{pop}ifelse}bind def/ct_BuildCharSetUp{1 index begin
+CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin/ct_dfCharCode
+exch def/ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge{pop
+0}if/cid exch def{GlyphDirectory cid 2 copy known{get}{pop pop nullstring}
+ifelse dup length FDBytes sub 0 gt{dup FDBytes 0 ne{0 FDBytes ct_cvnsi}{pop 0}
+ifelse/fdIndex exch def dup length FDBytes sub FDBytes exch getinterval
+/charstring exch def exit}{pop cid 0 eq{/charstring nullstring def exit}if/cid
+0 def}ifelse}loop}def/ct_SetCacheDevice{0 0 moveto dup stringwidth 3 -1 roll
+true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto}
+def/ct_CloneSetCacheProc{1 eq{stringwidth pop -2 div -880 0 -1000 setcharwidth
+moveto}{usewidths?{currentfont/Widths get cid 2 copy known{get exch pop aload
+pop}{pop pop stringwidth}ifelse}{stringwidth}ifelse setcharwidth 0 0 moveto}
+ifelse}def/ct_Type3ShowCharString{ct_FDDict fdIndex 2 copy known{get}{
+currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup
+maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known{get}
+{pop pop ct_defaultFontMtx}ifelse/FontMatrix exch dup length array copy def
+/Private get/Private exch def/Widths rootfont/Widths get def/CharStrings 1
+dict dup/.notdef<d841272cf18f54fc13>dup length string copy put def currentdict
+end/ct_Type1Font exch definefont dup 5 1 roll put setglobal}ifelse dup
+/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put
+rootfont/WMode 2 copy known{get}{pop pop 0}ifelse exch 1000 scalefont setfont
+ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold{
+currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth
+setlinewidth stroke}{ct_str1 show}ifelse}def/ct_Type4ShowCharString{ct_dfDict
+ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup
+ct_defaultFontMtx ct_matrixeq not{ct_1000Mtx matrix concatmatrix concat}{pop}
+ifelse/Private get Adobe_CoolType_Utility/ct_Level2? get not{ct_dfDict/Private
+3 -1 roll{put}1183615869 internaldict/superexec get exec}if 1183615869
+internaldict Adobe_CoolType_Utility/ct_Level2? get{1 index}{3 index/Private
+get mark 6 1 roll}ifelse dup/RunInt known{/RunInt get}{pop/CCRun}ifelse get
+exec Adobe_CoolType_Utility/ct_Level2? get not{cleartomark}if}bind def
+/ct_BuildCharIncremental{{Adobe_CoolType_Utility/ct_MakeOCF get begin
+ct_BuildCharSetUp ct_ShowCharString}stopped{stop}if end end end end}bind def
+/BaseFontNameStr(BF00)def/ct_Type1FontTemplate 14 dict begin/FontType 1 def
+/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-250 -250 1250 1250]def/Encoding
+ct_cHexEncoding def/PaintType 0 def currentdict end def/BaseFontTemplate 11
+dict begin/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-250 -250 1250 1250]def
+/Encoding ct_cHexEncoding def/BuildChar/ct_BuildCharIncremental load def
+ct_Clone?{/FontType 3 def/ct_ShowCharString/ct_Type3ShowCharString load def
+/ct_dfSetCacheProc/ct_CloneSetCacheProc load def/ct_SyntheticBold false def
+/ct_StrokeWidth 1 def}{/FontType 4 def/Private 1 dict dup/lenIV 4 put def
+/CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def/PaintType 0 def
+/ct_ShowCharString/ct_Type4ShowCharString load def}ifelse/ct_str1 1 string def
+currentdict end def/BaseFontDictSize BaseFontTemplate length 5 add def
+/ct_matrixeq{true 0 1 5{dup 4 index exch get exch 3 index exch get eq and dup
+not{exit}if}for exch pop exch pop}bind def/ct_makeocf{15 dict begin exch/WMode
+exch def exch/FontName exch def/FontType 0 def/FMapType 2 def/FontMatrix
+matrix def/bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if
+def/Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{
+2 copy bfCount put pop}for def/FDepVector bfCount dup 256 lt{1 add}if array
+def BaseFontTemplate BaseFontDictSize dict copy begin/CIDFont exch def CIDFont
+/FontBBox known{CIDFont/FontBBox get/FontBBox exch def}if CIDFont/CDevProc
+known{CIDFont/CDevProc get/CDevProc exch def}if currentdict end
+BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if{FDepVector
+exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul
+def FontType 3 eq{/ct_FDDict 2 dict def}if currentdict end 1 index 16
+BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put}
+for ct_Clone?{/Widths 1 index/CIDFont get/GlyphDirectory get length dict def}
+if FontName currentdict end definefont ct_Clone?{gsave dup 1000 scalefont
+setfont ct_BuildCharDict begin/usewidths? false def currentfont/Widths get
+begin exch/CIDFont get/GlyphDirectory get{pop dup charcode exch 1 index 0 2
+index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore
+def}forall end/usewidths? true def end grestore}{exch pop}ifelse}bind def
+/ct_ComposeFont{ct_UseNativeCapability?{2 index/CMap ct_resourcestatus{pop pop
+exch pop}{/CIDInit/ProcSet findresource begin 12 dict begin begincmap/CMapName
+3 index def/CMapVersion 1 def/CMapType 1 def exch/WMode exch def/CIDSystemInfo
+3 dict dup begin/Registry(Adobe)def/Ordering CMapName ct_mkocfStr100 cvs
+(Adobe-)search{pop pop(-)search{dup length string copy exch pop exch pop}{pop
+(Identity)}ifelse}{pop(Identity)}ifelse def/Supplement 0 def end def 1
+begincodespacerange<0000><ffff>endcodespacerange 1 begincidrange<0000><ffff>0
+endcidrange endcmap CMapName currentdict/CMap defineresource pop end end}
+ifelse composefont}{3 2 roll pop 0 get/CIDFont findresource ct_makeocf}ifelse}
+bind def/ct_MakeIdentity{ct_UseNativeCapability?{1 index/CMap
+ct_resourcestatus{pop pop}{/CIDInit/ProcSet findresource begin 12 dict begin
+begincmap/CMapName 2 index def/CMapVersion 1 def/CMapType 1 def/CIDSystemInfo
+3 dict dup begin/Registry(Adobe)def/Ordering CMapName ct_mkocfStr100 cvs
+(Adobe-)search{pop pop(-)search{dup length string copy exch pop exch pop}{pop
+(Identity)}ifelse}{pop(Identity)}ifelse def/Supplement 0 def end def 1
+begincodespacerange<0000><ffff>endcodespacerange 1 begincidrange<0000><ffff>0
+endcidrange endcmap CMapName currentdict/CMap defineresource pop end end}
+ifelse composefont}{exch pop 0 get/CIDFont findresource ct_makeocf}ifelse}bind
+def currentdict readonly pop end end
+%%EndResource
+Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end
+%%BeginResource: procset Adobe_AGM_Image 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright (C) 2000-2000 Adobe Systems, Inc.  All Rights Reserved.
+systemdict /setpacking known
+{
+	currentpacking
+	true setpacking
+} if
+userdict /Adobe_AGM_Image 65 dict dup begin put
+/Adobe_AGM_Image_Id /Adobe_AGM_Image_1.0_0 def
+/nd{
+	null def
+}bind def
+/AGMIMG_&image nd
+/AGMIMG_&colorimage nd
+%%don't initialize AGMIMG_&customcolorimage, it wrecks havoc in a nested environment
+%%AGMIMG_ccimage_exists not {/AGMIMG_&customcolorimage nd} if 
+/AGMIMG_&imagemask nd
+/AGMIMG_mbuf () def
+/AGMIMG_ybuf () def
+/AGMIMG_kbuf () def
+/AGMIMG_c 0 def
+/AGMIMG_m 0 def
+/AGMIMG_y 0 def
+/AGMIMG_k 0 def
+/AGMIMG_tmp nd
+/AGMIMG_imagestring0 nd
+/AGMIMG_imagestring1 nd
+/AGMIMG_imagestring2 nd
+/AGMIMG_imagestring3 nd
+/AGMIMG_imagestring4 nd
+/AGMIMG_imagestring5 nd
+/AGMIMG_cnt nd
+/AGMIMG_fsave nd
+/AGMIMG_colorAry nd
+/AGMIMG_override nd
+/AGMIMG_name nd
+/invert_image_samples nd
+/knockout_image_samples	nd
+/img nd
+/sepimg nd
+/idximg nd
+/doc_setup
+{ 
+	Adobe_AGM_Core begin
+	Adobe_AGM_Image begin
+	/AGMIMG_&image systemdict/image get def
+	/AGMIMG_&imagemask systemdict/imagemask get def
+	/colorimage where{
+		pop
+		/AGMIMG_&colorimage /colorimage ldf
+	}if
+	end
+	end
+}def
+/page_setup
+{
+	Adobe_AGM_Image begin
+	/AGMIMG_ccimage_exists {/customcolorimage where 
+		{
+			pop
+			/Adobe_AGM_OnHost_Seps where
+			{
+			pop false
+			}{
+			/Adobe_AGM_InRip_Seps where
+				{
+				pop false
+				}{
+					true
+				 }ifelse
+			 }ifelse
+			}{
+			false
+		}ifelse 
+	}bdf
+	level2{
+		/invert_image_samples
+		{
+			Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
+			/Decode [ Decode 1 get Decode 0 get] def
+		}def
+		/knockout_image_samples
+		{
+			Operator/imagemask ne{
+				/Decode [1 1] def
+			}if
+		}def
+	}{	
+		/invert_image_samples
+		{
+			{1 exch sub} currenttransfer addprocs settransfer
+		}def
+		/knockout_image_samples
+		{
+			{ pop 1 } currenttransfer addprocs settransfer
+		}def
+	}ifelse
+	/img /imageormask ldf
+	/sepimg /sep_imageormask ldf
+	/idximg /indexed_imageormask ldf
+	currentdict{
+		dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and{
+			bind
+		}if
+		def
+	}forall
+}def
+/page_trailer
+{
+	end
+}def
+/doc_trailer
+{
+}def
+/imageormask_sys
+{
+	begin
+		save mark
+		level2{
+			currentdict
+			Operator /imagemask eq{
+				AGMIMG_&imagemask
+			}{
+				AGMIMG_&image
+			}ifelse
+		}{
+			Width Height
+			Operator /imagemask eq{
+				Decode 0 get 1 eq Decode 1 get 0 eq	and
+				ImageMatrix /DataSource load
+				AGMIMG_&imagemask
+			}{
+				BitsPerComponent ImageMatrix /DataSource load
+				AGMIMG_&image
+			}ifelse
+		}ifelse
+		cleartomark restore
+	end
+}def
+/overprint_plate
+{
+	currentoverprint{
+		0 get
+		dup /DeviceGray eq{
+			pop AGMCORE_black_plate not
+		}{
+			/DeviceCMYK eq{
+				AGMCORE_is_cmyk_sep not
+			}if
+		}ifelse
+	}{
+		false
+	}ifelse
+}def
+/imageormask
+{
+	begin
+		SkipImageProc not{
+			save mark
+			level2 AGMCORE_host_sep not and{
+				currentdict
+				Operator /imagemask eq{
+					imagemask
+				}{
+					AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get /DeviceGray eq and{
+						[/Separation /Black /DeviceGray {}] setcolorspace
+						/Decode [ Decode 1 get Decode 0 get ] def
+					}if
+					image
+				}ifelse
+			}{
+				Width Height
+				Operator /imagemask eq{
+					Decode 0 get 1 eq Decode 1 get 0 eq	and
+					ImageMatrix /DataSource load
+					AGMCORE_host_sep{
+						currentgray 1 ne{
+							currentdict imageormask_sys
+						}{
+  	 						currentoverprint not{
+  			 					1 AGMCORE_&setgray
+  	 							knockout_image_samples
+  			 					currentdict imageormask_sys
+  			 				}{
+  			 					currentdict ignoreimagedata
+  			 				}ifelse
+				 		}ifelse
+					}{
+						imagemask
+					}ifelse
+				}{
+					BitsPerComponent ImageMatrix 
+					MultipleDataSources{
+						0 1 NComponents 1 sub{
+							DataSource exch get
+						}for
+					}{
+						/DataSource load
+					}ifelse
+					Operator /colorimage eq{
+						AGMCORE_host_sep{
+							MultipleDataSources level2 or NComponents 4 eq and{
+								MultipleDataSources{
+									4 {pop} repeat
+									/DataSource [
+										DataSource 0 get /exec cvx
+										DataSource 1 get /exec cvx
+										DataSource 2 get /exec cvx
+										DataSource 3 get /exec cvx
+										/AGMCORE_get_ink_data cvx
+									] cvx def
+								}{
+									/DataSource /DataSource load filter_cmyk 0 () /SubFileDecode filter def
+								}ifelse
+	
+								/Decode [ Decode 0 get Decode 1 get ] def
+								/MultipleDataSources false def
+								/NComponents 1 def
+								/Operator /image def
+								AGMCORE_is_cmyk_sep{
+									currentoverprint InksUsed current_ink not and{
+										currentdict consumeimagedata
+									}{
+										invert_image_samples
+						 				1 AGMCORE_&setgray
+										currentdict imageormask_sys
+									}ifelse
+								}{
+										currentdict ignoreimagedata
+								}ifelse
+							}{
+									
+								MultipleDataSources NComponents AGMIMG_&colorimage						
+							}ifelse
+						}{
+							true NComponents colorimage
+						}ifelse
+					}{
+						Operator /image eq{
+							AGMCORE_host_sep{
+								/DoImage true def
+								HostSepColorImage{
+									invert_image_samples
+								}{
+									AGMCORE_black_plate not{
+										/DoImage false def
+										currentdict ignoreimagedata
+					 				}if
+								}ifelse
+						 		1 AGMCORE_&setgray
+								DoImage
+									{currentdict imageormask_sys} if
+							}{
+								image
+							}ifelse
+						}{
+							Operator/knockout eq{
+								pop pop pop pop pop
+								currentoverprint InksUsed current_ink not and{
+								}{
+									currentcolorspace overprint_plate not{
+										knockout_unitsq
+									}if
+								}ifelse
+							}if
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+			cleartomark restore
+		}if
+	end
+}def
+/sep_imageormask
+{
+ 	/sep_colorspace_dict AGMCORE_gget begin
+	/MappedCSA CSA map_csa def
+	begin
+	SkipImageProc not{
+		save mark 
+	
+		AGMCORE_avoid_L2_sep_space{
+			/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
+		}if
+ 		AGMIMG_ccimage_exists 
+		MappedCSA 0 get /DeviceCMYK eq and
+		currentdict/Components known and 
+		Name () ne and 
+		Name (All) ne and 
+		Operator /image eq and
+		AGMCORE_producing_seps not and
+		level2 not and
+		{
+			Width Height BitsPerComponent ImageMatrix 
+			[
+			/DataSource load /exec cvx
+			{
+				0 1 2 index length 1 sub{
+					1 index exch
+					2 copy get 255 xor put
+				}for
+			} /exec cvx
+			] cvx bind
+			MappedCSA 0 get /DeviceCMYK eq{
+				Components aload pop
+			}{
+				0 0 0 Components aload pop 1 exch sub
+			}ifelse
+			Name findcmykcustomcolor
+			customcolorimage
+		}{
+			AGMCORE_producing_seps not{
+				level2{
+					AGMCORE_avoid_L2_sep_space not currentcolorspace 0 get /Separation ne and{
+						[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
+						/sep_tint AGMCORE_gget setcolor
+					}if
+					currentdict imageormask
+				}{ 
+					currentdict
+					Operator /imagemask eq{
+						imageormask
+					}{
+						sep_imageormask_lev1
+					}ifelse
+				}ifelse
+ 			}{
+				AGMCORE_host_sep{
+					Operator/knockout eq{
+						currentoverprint InksUsed current_ink not and{
+						}{
+							currentdict/ImageMatrix get concat
+							knockout_unitsq
+						}ifelse
+					}{
+						currentgray 1 ne{
+ 							AGMCORE_is_cmyk_sep Name (All) ne and{
+ 								level2{
+	 								[ /Separation Name [/DeviceGray]
+	 								{ 
+	 									sep_colorspace_proc AGMCORE_get_ink_data
+										1 exch sub
+	 								} bind
+									] AGMCORE_&setcolorspace
+									/sep_tint AGMCORE_gget AGMCORE_&setcolor
+ 									currentdict imageormask_sys
+	 							}{
+	 								currentdict
+									Operator /imagemask eq{
+										imageormask_sys
+									}{
+										sep_image_lev1_sep
+									}ifelse
+	 							}ifelse
+ 							}{
+ 								Operator/imagemask ne{
+									invert_image_samples
+ 								}if
+		 						currentdict imageormask_sys
+ 							}ifelse
+ 						}{
+							currentdict consumeimagedata 
+ 							currentoverprint not Name (All) eq or{
+								gsave 
+								knockout_unitsq
+								grestore
+		 					}if
+ 						}ifelse
+		 			}ifelse
+ 				}{
+					currentcolorspace 0 get /Separation ne{
+						[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
+						/sep_tint AGMCORE_gget setcolor
+					}if
+					currentoverprint 
+					MappedCSA 0 get /DeviceCMYK eq and 
+					Name inRip_spot_has_ink not and 
+					Name (All) ne and {
+						imageormask_l2_overprint
+					}{
+						currentdict imageormask
+ 					}ifelse
+				}ifelse
+			}ifelse
+		}ifelse
+		cleartomark restore
+	}if
+	end
+	end
+}def
+/imageormask_l2_overprint
+{
+	
+	currentdict
+	currentcmykcolor add add add 0 eq{
+		currentdict consumeimagedata
+	}{
+		level3{ 			
+			
+			currentcmykcolor 
+			/AGMIMG_k xdf 
+			/AGMIMG_y xdf 
+			/AGMIMG_m xdf 
+			/AGMIMG_c xdf
+			Operator/imagemask eq{
+				[/DeviceN [
+				AGMIMG_c 0 ne {/Cyan} if
+				AGMIMG_m 0 ne {/Magenta} if
+				AGMIMG_y 0 ne {/Yellow} if
+				AGMIMG_k 0 ne {/Black} if
+				] /DeviceCMYK {}] setcolorspace
+				
+				AGMIMG_c 0 ne {AGMIMG_c} if
+				AGMIMG_m 0 ne {AGMIMG_m} if
+				AGMIMG_y 0 ne {AGMIMG_y} if
+				AGMIMG_k 0 ne {AGMIMG_k} if
+				setcolor			
+			}{	
+				/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
+				[/Indexed 				
+					[
+						/DeviceN [
+							AGMIMG_c 0 ne {/Cyan} if
+							AGMIMG_m 0 ne {/Magenta} if
+							AGMIMG_y 0 ne {/Yellow} if
+							AGMIMG_k 0 ne {/Black} if
+						] 
+						/DeviceCMYK {
+							AGMIMG_k 0 eq {0} if
+							AGMIMG_y 0 eq {0 exch} if
+							AGMIMG_m 0 eq {0 3 1 roll} if
+							AGMIMG_c 0 eq {0 4 1 roll} if						
+						}
+					]
+					255
+					{
+						255 div 
+		
+						mark exch
+						dup	dup dup
+		
+						
+						AGMIMG_k 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+							
+						AGMIMG_y 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+		
+						AGMIMG_m 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+							
+						AGMIMG_c 0 ne{
+							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop		
+							counttomark 1 roll
+						}{
+							pop
+						}ifelse
+						counttomark 1 add -1 roll pop
+					}
+				] setcolorspace
+			}ifelse
+			
+			imageormask_sys
+		}{
+	write_image_file{
+		currentcmykcolor
+		0 ne{
+			[/Separation /Black /DeviceGray {}] setcolorspace
+			gsave
+			/Black
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 1 roll pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		}if
+		0 ne{
+			[/Separation /Yellow /DeviceGray {}] setcolorspace
+			gsave
+			/Yellow
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 2 roll pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		}if
+		0 ne{
+			[/Separation /Magenta /DeviceGray {}] setcolorspace
+			gsave
+			/Magenta
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 3 roll pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		}if
+		0 ne{
+			[/Separation /Cyan /DeviceGray {}] setcolorspace
+			gsave
+			/Cyan 
+			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {pop pop pop 1 exch sub} /exec cvx]
+			cvx modify_halftone_xfer
+			Operator currentdict read_image_file
+			grestore
+		} if
+				close_image_file
+			}{
+				imageormask
+			}ifelse
+		}ifelse
+	}ifelse
+} def
+/indexed_imageormask
+{
+	begin
+		save mark 
+	
+ 		currentdict
+ 		AGMCORE_host_sep{
+ 			
+			Operator/knockout eq{
+				/indexed_colorspace_dict AGMCORE_gget /CSA get map_csa overprint_plate not{
+					knockout_unitsq
+				}if
+			}{
+	 			AGMCORE_is_cmyk_sep{
+					Operator /imagemask eq{
+						imageormask_sys
+					}{
+						level2{
+							indexed_image_lev2_sep
+						}{
+							indexed_image_lev1_sep
+						}ifelse
+					}ifelse
+				}{
+					currentoverprint not{
+						knockout_image_samples
+		 				imageormask_sys
+		 			}{
+		 				currentdict consumeimagedata
+		 			}ifelse
+				}ifelse
+			}ifelse
+ 		}{
+			level2{
+				imageormask
+			}{ 
+				Operator /imagemask eq{
+					imageormask
+				}{
+					indexed_imageormask_lev1
+				}ifelse
+			}ifelse
+ 		}ifelse
+		cleartomark restore
+	end
+}def
+/indexed_image_lev2_sep
+{
+	/indexed_colorspace_dict AGMCORE_gget begin
+	begin
+		
+		currentcolorspace 
+		dup 1 /DeviceGray put
+		dup 3 [
+			currentcolorspace 3 get 
+			{
+				exch 4 mul 4 getinterval {} forall
+				AGMCORE_get_ink_data 255 div 1 exch sub
+			} /exec cvx
+		] cvx put
+		setcolorspace
+		
+		currentdict 
+		Operator /imagemask eq{
+			AGMIMG_&imagemask
+		}{
+			AGMIMG_&image
+		}ifelse
+			
+	end end
+}def
+/OPIimage
+{
+	dup type /dicttype ne{
+		10 dict begin
+			/DataSource xdf
+			/ImageMatrix xdf
+			/BitsPerComponent xdf
+			/Height xdf
+			/Width xdf
+			/ImageType 1 def
+			/Decode [0 1 def]
+			currentdict
+		end
+	}if
+	dup begin
+		/NComponents 1 cdndf
+		/MultipleDataSources false cdndf
+		/SkipImageProc {false} cdndf
+		/HostSepColorImage false cdndf
+		/Decode [
+				0 
+				currentcolorspace 0 get /Indexed eq{
+					2 BitsPerComponent exp 1 sub
+				}{
+					1
+				}ifelse
+		] cdndf
+		/Operator /image cdndf
+	end
+	/sep_colorspace_dict AGMCORE_gget null eq{
+		imageormask
+	}{
+		gsave
+		dup begin invert_image_samples end
+		sep_imageormask
+		grestore
+	}ifelse
+}def
+/spot_alias
+{
+	/mapto_sep_imageormask 
+	{
+		dup type /dicttype ne{
+			12 dict begin
+				/ImageType 1 def
+				/DataSource xdf
+				/ImageMatrix xdf
+				/BitsPerComponent xdf
+				/Height xdf
+				/Width xdf
+				/MultipleDataSources false def
+		}{
+			begin
+		}ifelse
+				/Decode [/customcolor_tint AGMCORE_gget 0] def
+				/Operator /image def
+				/HostSepColorImage false def
+				/InksUsed [] def
+				/SkipImageProc {false} def
+				currentdict 
+			end
+		sep_imageormask
+	}bdf
+	/customcolorimage
+	{
+		Adobe_AGM_Image/AGMIMG_colorAry xddf
+		/customcolor_tint AGMCORE_gget
+		bdict
+			/Name AGMIMG_colorAry 4 get
+			/CSA [ /DeviceCMYK ] 
+			/TintMethod /Subtractive
+			/TintProc null
+			/MappedCSA null
+			/NComponents 4 
+			/Components [ AGMIMG_colorAry aload pop pop ] 
+		edict
+		setsepcolorspace
+		mapto_sep_imageormask
+	}ndf
+	Adobe_AGM_Image/AGMIMG_&customcolorimage /customcolorimage load put
+	/customcolorimage
+	{
+		Adobe_AGM_Image/AGMIMG_override false put
+		dup 4 get map_alias{
+			/customcolor_tint AGMCORE_gget exch setsepcolorspace
+			pop
+			mapto_sep_imageormask
+		}{
+			AGMIMG_&customcolorimage
+		}ifelse			
+	}bdf
+}def
+level2 not{
+	/colorbuf
+	{
+		0 1 2 index length 1 sub{
+			dup 2 index exch get 
+			255 exch sub 
+			2 index 
+			3 1 roll 
+			put
+		}for
+	}def
+	/tint_image_to_color
+	{
+		begin
+			Width Height BitsPerComponent ImageMatrix 
+			/DataSource load
+		end
+		Adobe_AGM_Image begin
+			/AGMIMG_mbuf 0 string def
+			/AGMIMG_ybuf 0 string def
+			/AGMIMG_kbuf 0 string def
+			{
+				colorbuf dup length AGMIMG_mbuf length ne
+					{
+					dup length dup dup
+					/AGMIMG_mbuf exch string def
+					/AGMIMG_ybuf exch string def
+					/AGMIMG_kbuf exch string def
+					} if
+				dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
+			}
+			addprocs
+			{AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf} true 4 colorimage	
+		end
+	} def			
+	/sep_imageormask_lev1
+	{
+		begin
+			MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
+				
+				{
+					255 mul round cvi GrayLookup exch get
+				} currenttransfer addprocs settransfer
+				currentdict imageormask
+			}{
+				/sep_colorspace_dict AGMCORE_gget/Components known{
+					MappedCSA 0 get /DeviceCMYK eq{
+						Components aload pop
+					}{
+						0 0 0 Components aload pop 1 exch sub
+					}ifelse
+					
+					Adobe_AGM_Image/AGMIMG_k xddf 
+					Adobe_AGM_Image/AGMIMG_y xddf 
+					Adobe_AGM_Image/AGMIMG_m xddf 
+					Adobe_AGM_Image/AGMIMG_c xddf 
+						
+					AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
+						{AGMIMG_k mul 1 exch sub} currenttransfer addprocs settransfer
+						currentdict imageormask
+					}{ 
+						
+						currentcolortransfer
+						{AGMIMG_k mul 1 exch sub} exch addprocs 4 1 roll
+						{AGMIMG_y mul 1 exch sub} exch addprocs 4 1 roll
+						{AGMIMG_m mul 1 exch sub} exch addprocs 4 1 roll
+						{AGMIMG_c mul 1 exch sub} exch addprocs 4 1 roll
+						setcolortransfer
+						currentdict tint_image_to_color
+					}ifelse
+				}{
+					
+					MappedCSA 0 get /DeviceGray eq {
+						{255 mul round cvi ColorLookup exch get 0 get} currenttransfer addprocs settransfer
+						currentdict imageormask
+					}{
+						MappedCSA 0 get /DeviceCMYK eq {
+							currentcolortransfer
+							{255 mul round cvi ColorLookup exch get 3 get 1 exch sub} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 2 get 1 exch sub} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 1 get 1 exch sub} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 0 get 1 exch sub} exch addprocs 4 1 roll
+							setcolortransfer 
+							currentdict tint_image_to_color
+						}{ 
+							currentcolortransfer
+							{pop 1} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 2 get} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 1 get} exch addprocs 4 1 roll
+							{255 mul round cvi ColorLookup exch get 0 get} exch addprocs 4 1 roll
+							setcolortransfer 
+							currentdict tint_image_to_color
+						}ifelse
+					}ifelse
+				}ifelse
+			}ifelse
+		end
+	}def
+	/sep_image_lev1_sep
+	{
+		begin
+			/sep_colorspace_dict AGMCORE_gget/Components known{
+				Components aload pop
+				
+				Adobe_AGM_Image/AGMIMG_k xddf 
+				Adobe_AGM_Image/AGMIMG_y xddf 
+				Adobe_AGM_Image/AGMIMG_m xddf 
+				Adobe_AGM_Image/AGMIMG_c xddf 
+					
+				{AGMIMG_c mul 1 exch sub}
+				{AGMIMG_m mul 1 exch sub}
+				{AGMIMG_y mul 1 exch sub}
+				{AGMIMG_k mul 1 exch sub}
+			}{ 
+				{255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
+				{255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
+				{255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
+				{255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
+			}ifelse
+			
+			AGMCORE_get_ink_data currenttransfer addprocs settransfer
+			
+			currentdict imageormask_sys
+				
+		end
+	}def
+	/indexed_imageormask_lev1
+	{
+		/indexed_colorspace_dict AGMCORE_gget begin
+		begin
+			currentdict
+			MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
+				
+				{HiVal mul round cvi GrayLookup exch get HiVal div} currenttransfer addprocs settransfer
+				imageormask
+			}{
+				
+				MappedCSA 0 get /DeviceGray eq {
+					{HiVal mul round cvi Lookup exch get HiVal div} currenttransfer addprocs settransfer
+					imageormask
+				}{
+					MappedCSA 0 get /DeviceCMYK eq {
+						currentcolortransfer
+						{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						{4 mul HiVal mul round cvi       Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
+						setcolortransfer 
+						tint_image_to_color
+					}{ 
+						currentcolortransfer
+						{pop 1} exch addprocs 4 1 roll
+						{3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div} exch addprocs 4 1 roll
+						{3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div} exch addprocs 4 1 roll
+						{3 mul HiVal mul round cvi 	   Lookup exch get HiVal div} exch addprocs 4 1 roll
+						setcolortransfer 
+						tint_image_to_color
+					}ifelse
+				}ifelse
+			}ifelse
+		end end
+	}def
+	/indexed_image_lev1_sep
+	{
+		/indexed_colorspace_dict AGMCORE_gget begin
+		begin
+			{4 mul HiVal mul round cvi       Lookup exch get HiVal div 1 exch sub}
+			{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
+			{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
+			{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
+			
+			AGMCORE_get_ink_data currenttransfer addprocs settransfer
+			
+			currentdict imageormask_sys
+				
+		end end
+	}def
+}if
+end
+systemdict /setpacking known
+{
+	setpacking
+} if
+%%EndResource
+%ADOBeginClientInjection: DocumentProlog End "AI10"
+%ADOEndClientInjection: DocumentProlog End "AI10"
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndProlog
+%%BeginSetup
+%ADOBeginClientInjection: DocumentSetup Start "AI10"
+%ADOEndClientInjection: DocumentSetup Start "AI10"
+Adobe_AGM_Utils begin
+2 2010 true Adobe_AGM_Core/doc_setup get exec
+Adobe_CoolType_Core/doc_setup get exec
+Adobe_AGM_Image/doc_setup get exec
+%ADOBeginClientInjection: DocumentSetup End "AI10"
+%ADOEndClientInjection: DocumentSetup End "AI10"
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndSetup
+%%Page: rnaseP-ecoli.pdf 1
+%%EndPageComments
+%%BeginPageSetup
+%ADOBeginClientInjection: PageSetup Start "AI10"
+%ADOEndClientInjection: PageSetup Start "AI10"
+Adobe_AGM_Utils begin
+Adobe_AGM_Core/page_setup get exec
+Adobe_CoolType_Core/page_setup get exec
+Adobe_AGM_Image/page_setup get exec
+%ADOBeginClientInjection: PageSetup End "AI10"
+%ADOEndClientInjection: PageSetup End "AI10"
+%%EndPageSetup
+Adobe_AGM_Core/AGMCORE_save save ddf
+1 -1 scale 0 -586.647 translate
+[1 0 0 1 0 0 ]  concat
+mark
+/0 
+[/DeviceGray] add_csa
+/CSA /0 
+/1 
+[/DeviceCMYK] add_csa
+/CSA /1 
+/2 
+[/DeviceRGB] add_csa
+/CSA /2 
+cleartomark
+800 path_rez
+% page clip
+gsave
+newpath
+gsave % PSGState
+0 0 mo
+0 586.647 li
+416.6 586.647 li
+416.6 0 li
+clp
+[1 0 0 1 0 0 ] concat
+%ADOBeginClientInjection: BeginPageContent "AI10"
+%ADOEndClientInjection: BeginPageContent "AI10"
+gsave % PSGState
+0 0 mo
+417 0 li
+417 587 li
+0 587 li
+0 0 li
+clp
+.5 lw
+0 lc
+0 lj
+10 ml
+[] 0 dsh
+true sadj
+113.251 538.55 mo
+121.251 538.55 li
+121.251 566.05 li
+113.251 566.05 li
+113.251 538.55 li
+cp
+false sop
+0 0 0 rgb
+s
+29.2388 296.52 mo
+29.2388 299.279 26.999 301.52 24.2388 301.52 cv
+21.479 301.52 19.2388 299.279 19.2388 296.52 cv
+19.2388 293.76 21.479 291.52 24.2388 291.52 cv
+26.999 291.52 29.2388 293.76 29.2388 296.52 cv
+cp
+219.02 305.82 mo
+219.02 308.58 216.779 310.819 214.02 310.819 cv
+211.26 310.819 209.02 308.58 209.02 305.82 cv
+209.02 303.06 211.26 300.82 214.02 300.82 cv
+216.779 300.82 219.02 303.06 219.02 305.82 cv
+cp
+333.738 399.3 mo
+333.738 402.06 331.498 404.3 328.738 404.3 cv
+325.979 404.3 323.738 402.06 323.738 399.3 cv
+323.738 396.54 325.979 394.3 328.738 394.3 cv
+331.498 394.3 333.738 396.54 333.738 399.3 cv
+cp
+0 0 0 rgb
+s
+25.251 301.55 mo
+25.751 301.55 li
+113.501 538.55 li
+113.501 539.05 li
+113.001 539.05 li
+25.251 302.05 li
+0 0 0 rgb
+f
+209.002 307.05 mo
+209.502 307.05 li
+209.502 307.55 li
+92.001 336.55 li
+91.501 336.55 li
+91.501 336.05 li
+0 0 0 rgb
+f
+87.751 345.05 mo
+88.251 345.05 li
+324.002 398.55 li
+324.002 399.05 li
+323.502 399.05 li
+87.751 345.55 li
+0 0 0 rgb
+f
+115.251 357.55 mo
+123.251 357.55 li
+123.251 346.55 li
+115.251 346.55 li
+115.251 357.55 li
+1 1 1 rgb
+f
+0 0 0 rgb
+%ADOBeginSubsetFont: Helvetica Initial
+11 dict begin
+/FontName /Helvetica def
+/FontMatrix [1 1000 div 0 0 1 1000 div 0 0 ] def
+/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
+/PaintType 0 def
+/FontType 1 def
+/FontBBox { 0 0 0 0 } def
+/FontInfo 1 dict dup begin
+  /OrigFontType /TrueType def
+end readonly def
+currentdict
+end
+
+systemdict begin
+dup /Private 7 dict dup begin
+/BlueValues [-15 0 600 650] def
+/MinFeature {16 16} def
+/password 5839 def
+/ND {def} def
+/NP {put} def
+/RD {string currentfile exch readhexstring pop} def
+2 index /CharStrings 230 dict dup begin
+/.notdef 
+<10bf317079bb21e4> ND 
+/C 
+<10bf317030aa083cc281922089bc4994328331af6a654615083cfa8a590d
+c2a9c54536c70731aa752343a37dd604c4c28cec579aa316cc528b15cac7
+afb36b45f7a20bc9d34701f1c9f2574363d062989f34915e0d1f708b6ecd
+63a000a0329329f07c> ND 
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+end
+/Helvetica findfont /Encoding get
+dup 67 /C put
+pop
+%ADOEndSubsetFont
+/Helvetica*1 
+[
+67{/.notdef}repeat /C 188{/.notdef}repeat
+] /Helvetica nfnt
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.001 354.55 mov
+(C) sh
+112.439 335.3 mo
+121.439 335.3 li
+121.439 324.3 li
+112.439 324.3 li
+112.439 335.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+%ADOBeginSubsetFont: Helvetica AddGlyphs
+
+systemdict begin
+/Helvetica 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/G 
+<10bf317035a2615cb512b1acd8c36b3946ad235417226e7c6feda1fdef74
+15451c61806a71e65b7a339d50f1974c1bc4c34c3f930da0a6e9e3c37b22
+0a6e14e87efbddbec74bbcb62a658f0ec4a2c98ab177326480af33b18698
+75870b1cf019> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Helvetica findfont /Encoding get
+dup 71 /G put
+pop
+%ADOEndSubsetFont
+/Helvetica*1 
+[
+67{/.notdef}repeat /C 3{/.notdef}repeat /G 184{/.notdef}repeat
+] /Helvetica nfnt
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+113.501 332.3 mov
+(G) sh
+126.439 367.05 mo
+126.439 450.8 li
+402.439 450.8 li
+402.439 359.05 li
+0 0 0 rgb
+s
+187.251 383.3 mo
+236.252 432.3 li
+236.252 573.8 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+95.001 546.3 mov
+(G) sh
+99.439 549.55 mo
+99.439 555.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+%ADOBeginSubsetFont: Helvetica AddGlyphs
+
+systemdict begin
+/Helvetica 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/A 
+<10bf31706c4d8e6db23e4e7dd1042123534442eb7f8cee32689ada63ee09
+58823f2b2bd80b8cb54f7e8af1e8d4f10b0e131d22e003ae536d56abc669
+c65da4f461c503d44126b09469> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Helvetica findfont /Encoding get
+dup 65 /A put
+pop
+%ADOEndSubsetFont
+/Helvetica*1 
+[
+65{/.notdef}repeat /A /.notdef /C 3{/.notdef}repeat /G 184{/.notdef}repeat
+] /Helvetica nfnt
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+105.001 546.3 mov
+(A) sh
+108.439 549.55 mo
+108.439 555.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+114.001 546.3 mov
+(A) sh
+117.439 549.55 mo
+117.439 555.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+122.001 546.3 mov
+(G) sh
+127.939 552.3 mo
+127.939 553.403 127.043 554.3 125.939 554.3 cv
+124.835 554.3 123.939 553.403 123.939 552.3 cv
+123.939 551.196 124.835 550.3 125.939 550.3 cv
+127.043 550.3 127.939 551.196 127.939 552.3 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+132.001 546.3 mov
+(C) sh
+135.439 549.55 mo
+135.439 555.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+%ADOBeginSubsetFont: Helvetica AddGlyphs
+
+systemdict begin
+/Helvetica 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/U 
+<10bf31701b9d2e0e75dc1c6f9b5aea75bc3cfacfd128a955802855ea36c9
+10f8a868d77a647ceb09c04b8925af88dc46f95d195f8683dbe20f41ec> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Helvetica findfont /Encoding get
+dup 85 /U put
+pop
+%ADOEndSubsetFont
+/Helvetica*1 
+[
+65{/.notdef}repeat /A /.notdef /C 3{/.notdef}repeat /G 13{/.notdef}repeat /U 
+170{/.notdef}repeat
+] /Helvetica nfnt
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+141.001 546.3 mov
+(U) sh
+144.439 549.55 mo
+144.439 555.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+149.001 546.3 mov
+(G) sh
+153.439 549.55 mo
+153.439 555.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+159.001 546.3 mov
+(A) sh
+162.439 549.55 mo
+162.439 555.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+168.001 546.3 mov
+(C) sh
+171.439 549.55 mo
+171.439 555.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+177.002 546.3 mov
+(C) sh
+180.439 549.55 mo
+180.439 555.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+188.001 546.3 mov
+(A) sh
+191.439 549.55 mo
+191.439 555.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+199 546.3 mov
+(G) sh
+200 537.3 mov
+(A) sh
+200 528.3 mov
+(C) sh
+200 519.3 mov
+(A) sh
+199 510.3 mov
+(G) sh
+200 501.3 mov
+(U) sh
+200 492.3 mov
+(C) sh
+188.003 492.3 mov
+(G) sh
+177.005 492.3 mov
+(C) sh
+180.439 477.55 mo
+180.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+168.001 492.3 mov
+(C) sh
+171.439 477.55 mo
+171.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+157.001 495.3 mov
+(G) sh
+149 492.303 mov
+(C) sh
+152.439 477.55 mo
+152.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+140.001 492.3 mov
+(U) sh
+143.439 477.55 mo
+143.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+131.001 492.3 mov
+(U) sh
+135.919 479.819 mo
+135.919 480.924 135.023 481.819 133.919 481.819 cv
+132.815 481.819 131.919 480.924 131.919 479.819 cv
+131.919 478.716 132.815 477.819 133.919 477.819 cv
+135.023 477.819 135.919 478.716 135.919 479.819 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+122.001 492.3 mov
+(C) sh
+125.439 477.55 mo
+125.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+112.001 492.3 mov
+(G) sh
+116.439 477.55 mo
+116.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+104.001 492.3 mov
+(U) sh
+108.919 479.28 mo
+108.919 480.384 108.023 481.28 106.919 481.28 cv
+105.815 481.28 104.919 480.384 104.919 479.28 cv
+104.919 478.176 105.815 477.28 106.919 477.28 cv
+108.023 477.28 108.919 478.176 108.919 479.28 cv
+0 0 0 rgb
+f
+90.751 495.55 mo
+99.751 495.55 li
+99.751 484.55 li
+90.751 484.55 li
+90.751 495.55 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+92.001 492.55 mov
+(C) sh
+95.439 477.55 mo
+95.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+82.001 492.3 mov
+(G) sh
+86.439 477.55 mo
+86.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+74.001 492.3 mov
+(U) sh
+77.439 477.55 mo
+77.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+65.001 492.3 mov
+(C) sh
+68.439 477.55 mo
+68.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+59.251 501.3 mov
+(G) sh
+54.0039 492.3 mov
+(U) sh
+57.439 477.55 mo
+57.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+45.001 492.3 mov
+(C) sh
+48.439 477.55 mo
+48.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+36.001 492.3 mov
+(C) sh
+39.439 477.55 mo
+39.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+27.001 492.3 mov
+(U) sh
+31.939 479.28 mo
+31.939 480.384 31.043 481.28 29.939 481.28 cv
+28.835 481.28 27.939 480.384 27.939 479.28 cv
+27.939 478.176 28.835 477.28 29.939 477.28 cv
+31.043 477.28 31.939 478.176 31.939 479.28 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+18.001 492.3 mov
+(C) sh
+21.439 477.55 mo
+21.439 483.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+8.00098 494.8 mov
+(U) sh
+0 487.798 mov
+(U) sh
+0 477.799 mov
+(C) sh
+7.00195 471.796 mov
+(G) sh
+17.001 474.298 mov
+1.99799 0 (GGGG) ash
+54 474.298 mov
+(A) sh
+63.999 474.298 mov
+(G) sh
+73.998 474.298 mov
+(A) sh
+81.689 477.55 mo
+89.689 477.55 li
+89.689 466.55 li
+81.689 466.55 li
+81.689 477.55 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+82.501 474.55 mov
+(C) sh
+90.9971 474.298 mov
+(G) sh
+97 466.297 mov
+(G) sh
+103.003 474.298 mov
+(G) sh
+113.002 474.298 mov
+(C) sh
+121.003 474.298 mov
+1.99799 0 (GG) ash
+140.002 474.298 mov
+1.99799 0 (AG) ash
+157.003 472.3 mov
+(G) sh
+167.002 474.298 mov
+1.99799 0 (GG) ash
+176.749 464.299 mov
+(A) sh
+175.439 457.3 mo
+184.439 457.3 li
+184.439 446.3 li
+175.439 446.3 li
+175.439 457.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+176.501 454.3 mov
+(G) sh
+176.249 444.301 mov
+(G) sh
+176.753 434.302 mov
+(A) sh
+176.753 424.303 mov
+(A) sh
+176.753 414.304 mov
+(A) sh
+176.249 405.304 mov
+(G) sh
+168.995 398.806 mov
+(U) sh
+176.249 391.31 mov
+(C) sh
+176.753 381.311 mov
+(C) sh
+175.189 374.3 mo
+184.189 374.3 li
+184.189 363.3 li
+175.189 363.3 li
+175.189 374.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+176.251 371.3 mov
+(G) sh
+176.251 361.301 mov
+(G) sh
+176.251 351.302 mov
+(G) sh
+175.504 341.303 mov
+(C) sh
+178.439 326.55 mo
+178.439 332.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+167.001 341.3 mov
+(U) sh
+169.439 326.55 mo
+169.439 332.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+157.501 341.3 mov
+(C) sh
+160.439 326.55 mo
+160.439 332.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+148.501 341.3 mov
+(C) sh
+151.439 326.55 mo
+151.439 332.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+153.001 351.3 mov
+(A) sh
+151.939 364.3 mo
+160.939 364.3 li
+160.939 353.3 li
+151.939 353.3 li
+151.939 364.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+153.251 361.3 mov
+(U) sh
+148.004 369.301 mov
+(A) sh
+137.753 374.053 mov
+(G) sh
+130.499 367.555 mov
+(G) sh
+121.689 363.8 mo
+130.689 363.8 li
+130.689 352.8 li
+121.689 352.8 li
+121.689 363.8 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+122.751 360.8 mov
+(G) sh
+123.255 345.554 mov
+(A) sh
+129.258 339.056 mov
+(G) sh
+121.257 335.807 mov
+(G) sh
+129.189 320.55 mo
+129.689 320.55 li
+129.689 321.05 li
+127.689 326.05 li
+127.189 326.05 li
+127.189 325.55 li
+0 0 0 rgb
+f
+121.251 317.55 mo
+121.751 317.55 li
+121.751 318.05 li
+119.751 323.05 li
+119.251 323.05 li
+119.251 322.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+105.001 328.3 mov
+(U) sh
+112.189 313.55 mo
+112.689 313.55 li
+112.689 314.05 li
+110.689 319.05 li
+110.189 319.05 li
+110.189 318.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+96.001 325.3 mov
+(G) sh
+104.189 310.55 mo
+104.689 310.55 li
+104.689 311.05 li
+102.689 316.05 li
+102.189 316.05 li
+102.189 315.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+88.001 329.3 mov
+(C) sh
+80.189 321.55 mo
+80.689 321.55 li
+85.689 323.55 li
+85.689 324.05 li
+85.189 324.05 li
+80.189 322.05 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+84.001 338.3 mov
+(C) sh
+76.189 329.55 mo
+76.689 329.55 li
+81.689 331.55 li
+81.689 332.05 li
+81.189 332.05 li
+76.189 330.05 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+81.001 346.3 mov
+(A) sh
+73.189 338.55 mo
+73.689 338.55 li
+78.689 340.55 li
+78.689 341.05 li
+78.189 341.05 li
+73.189 339.05 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+77.001 354.3 mov
+(G) sh
+69.939 346.3 mo
+70.439 346.3 li
+75.439 348.3 li
+75.439 348.8 li
+74.939 348.8 li
+69.939 346.8 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+74.001 363.3 mov
+(G) sh
+66.689 355.3 mo
+67.189 355.3 li
+72.189 357.3 li
+72.189 357.8 li
+71.689 357.8 li
+66.689 355.8 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+75.001 373.3 mov
+(U) sh
+67.999 380.302 mov
+(A) sh
+58 381.301 mov
+(A) sh
+49.689 377.55 mo
+58.689 377.55 li
+58.689 366.55 li
+49.689 366.55 li
+49.689 377.55 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+51.001 374.55 mov
+(C) sh
+50.002 364.299 mov
+(G) sh
+58.0029 356.298 mov
+(C) sh
+61 348.297 mov
+(C) sh
+63.9971 340.296 mov
+(U) sh
+66.9937 331.296 mov
+(G) sh
+69.9907 323.295 mov
+(G) sh
+65.9946 314.295 mov
+(G) sh
+74.189 299.55 mo
+74.689 299.55 li
+74.689 300.05 li
+72.689 305.05 li
+72.189 305.05 li
+72.189 304.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+56.001 313.3 mov
+(G) sh
+60.439 297.55 mo
+60.439 304.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+47.001 313.3 mov
+(G) sh
+51.439 297.55 mo
+51.439 304.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+38.001 313.3 mov
+(G) sh
+42.439 297.55 mo
+42.439 304.05 li
+0 0 0 rgb
+s
+28.001 318.3 mo
+36.251 318.3 li
+36.251 307.3 li
+28.001 307.3 li
+28.001 318.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+28.001 315.3 mov
+(G) sh
+20.999 309.297 mov
+(A) sh
+20.999 299.298 mov
+(A) sh
+29 293.295 mov
+(A) sh
+38.999 295.293 mov
+2.502 0 (CCC) ash
+65.999 290.289 mov
+(A) sh
+73.001 297.291 mov
+(C) sh
+81.002 293.295 mov
+(G) sh
+91.189 291.55 mo
+91.689 291.55 li
+96.689 293.55 li
+96.689 294.05 li
+96.189 294.05 li
+91.189 292.05 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+85.001 284.3 mov
+(A) sh
+94.189 283.55 mo
+94.689 283.55 li
+99.689 285.55 li
+99.689 286.05 li
+99.189 286.05 li
+94.189 284.05 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+75.001 282.55 mov
+(C) sh
+71.5 273.298 mov
+(C) sh
+80.5 268.798 mov
+(A) sh
+87.9966 274.297 mov
+(G) sh
+98.189 272.55 mo
+98.689 272.55 li
+103.689 274.55 li
+103.689 275.05 li
+103.189 275.05 li
+98.189 273.05 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+93.001 265.3 mov
+(U) sh
+102.189 263.55 mo
+102.689 263.55 li
+107.689 265.55 li
+107.689 266.05 li
+107.189 266.05 li
+102.189 264.05 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+96.001 254.3 mov
+(G) sh
+110.419 254.52 mo
+110.419 255.624 109.523 256.52 108.419 256.52 cv
+107.315 256.52 106.419 255.624 106.419 254.52 cv
+106.419 253.416 107.315 252.52 108.419 252.52 cv
+109.523 252.52 110.419 253.416 110.419 254.52 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+100.501 245.55 mov
+(C) sh
+109.189 244.8 mo
+109.689 244.8 li
+114.689 246.8 li
+114.689 247.3 li
+114.189 247.3 li
+109.189 245.3 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+104.001 236.3 mov
+(A) sh
+117.194 236.16 mo
+117.194 237.195 116.354 238.035 115.319 238.035 cv
+114.284 238.035 113.444 237.195 113.444 236.16 cv
+113.444 235.125 114.284 234.285 115.319 234.285 cv
+116.354 234.285 117.194 235.125 117.194 236.16 cv
+cp
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+95.001 231.3 mov
+(A) sh
+87.999 224.298 mov
+(C) sh
+80.9971 217.296 mov
+(A) sh
+75.9932 208.296 mov
+(G) sh
+73.9951 198.297 mov
+(A) sh
+72.9961 188.298 mov
+(G) sh
+74.9941 178.299 mov
+(A) sh
+76.9922 169.299 mov
+(G) sh
+82.9951 160.299 mov
+(C) sh
+89.9971 153.297 mov
+(A) sh
+97.998 147.294 mov
+(A) sh
+106.998 142.29 mov
+(A) sh
+116.502 140.292 mov
+(C) sh
+125.939 136.8 mo
+131.439 136.8 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.501 131.3 mov
+(C) sh
+125.939 127.8 mo
+131.439 127.8 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.001 120.3 mov
+(G) sh
+130.939 116.82 mo
+130.939 117.924 130.043 118.82 128.939 118.82 cv
+127.835 118.82 126.939 117.924 126.939 116.82 cv
+126.939 115.716 127.835 114.82 128.939 114.82 cv
+130.043 114.82 130.939 115.716 130.939 116.82 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.751 111.3 mov
+(C) sh
+125.939 107.8 mo
+131.439 107.8 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.501 102.3 mov
+(C) sh
+125.939 98.7998 mo
+131.439 98.7998 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+106.001 101.3 mov
+(G) sh
+107 91.3008 mov
+(A) sh
+116.504 90.3018 mov
+(U) sh
+125.939 86.7998 mo
+131.439 86.7998 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.001 81.2998 mov
+(G) sh
+125.939 77.7998 mo
+131.439 77.7998 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.001 72.2998 mov
+(G) sh
+130.699 69.0596 mo
+130.699 70.1641 129.803 71.0596 128.699 71.0596 cv
+127.595 71.0596 126.699 70.1641 126.699 69.0596 cv
+126.699 67.9561 127.595 67.0596 128.699 67.0596 cv
+129.803 67.0596 130.699 67.9561 130.699 69.0596 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.501 61.2998 mov
+(C) sh
+125.939 57.7998 mo
+131.439 57.7998 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.501 52.2998 mov
+(C) sh
+125.939 48.7998 mo
+131.439 48.7998 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.501 43.2998 mov
+(C) sh
+125.939 39.7998 mo
+131.439 39.7998 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.001 34.2998 mov
+(G) sh
+125.939 30.7998 mo
+131.439 30.7998 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+116.001 25.2998 mov
+(C) sh
+125.439 21.7998 mo
+131.939 21.7998 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+114.001 15.2998 mov
+(G) sh
+121.003 7.29883 mov
+3.50099 0 (CA) ash
+137.005 15.2998 mov
+(A) sh
+133.504 25.2988 mov
+(G) sh
+134.503 34.2988 mov
+(C) sh
+133.504 43.2988 mov
+(G) sh
+133.504 52.2988 mov
+(G) sh
+133.504 61.2988 mov
+(G) sh
+142.504 66.3027 mov
+(A) sh
+134.503 72.3057 mov
+(U) sh
+134.503 81.3057 mov
+(C) sh
+135.007 90.3057 mov
+(A) sh
+134.008 102.303 mov
+(G) sh
+134.008 111.303 mov
+(G) sh
+135.007 120.303 mov
+3.50099 0 (UA) ash
+145.006 130.302 mov
+(A) sh
+134.008 131.301 mov
+(G) sh
+135.007 140.301 mov
+(G) sh
+145.005 143.297 mov
+(G) sh
+154.005 148.302 mov
+(U) sh
+161.008 154.305 mov
+(G) sh
+169.009 162.306 mov
+(A) sh
+173.005 170.307 mov
+(A) sh
+176.001 180.306 mov
+(A) sh
+176.001 190.305 mov
+(G) sh
+176.001 200.304 mov
+(G) sh
+177.189 202.55 mo
+177.689 202.55 li
+177.689 203.05 li
+175.689 208.05 li
+175.189 208.05 li
+175.189 207.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+184.001 203.3 mov
+(G) sh
+186.189 205.55 mo
+186.689 205.55 li
+186.689 206.05 li
+184.689 211.05 li
+184.189 211.05 li
+184.189 210.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+193.001 206.3 mov
+(U) sh
+194.189 208.55 mo
+194.689 208.55 li
+194.689 209.05 li
+192.689 214.05 li
+192.189 214.05 li
+192.189 213.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+201 209.3 mov
+(G) sh
+203.189 211.55 mo
+203.689 211.55 li
+203.689 212.05 li
+201.689 217.05 li
+201.189 217.05 li
+201.189 216.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+210 213.3 mov
+(C) sh
+210.939 215.05 mo
+211.439 215.05 li
+211.439 215.55 li
+209.439 220.55 li
+208.939 220.55 li
+208.939 220.05 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+218 216.3 mov
+(G) sh
+227 213.303 mov
+(G) sh
+237.998 216.3 mov
+(U) sh
+243.004 224.301 mov
+(A) sh
+243.004 234.3 mov
+(A) sh
+236 242.301 mov
+(G) sh
+227 245.298 mov
+(A) sh
+217.002 241.302 mov
+(G) sh
+211.998 233.301 mov
+(C) sh
+202.998 229.305 mov
+(G) sh
+194.997 226.308 mov
+(C) sh
+186.996 223.311 mov
+(A) sh
+178.995 220.314 mov
+(C) sh
+169.995 217.317 mov
+(C) sh
+162.993 225.318 mov
+(G) sh
+162.189 225.55 mo
+162.689 225.55 li
+162.689 226.05 li
+158.689 229.05 li
+158.189 229.05 li
+158.189 228.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+171.001 234.3 mov
+(C) sh
+169.189 234.55 mo
+169.689 234.55 li
+169.689 235.05 li
+165.689 238.05 li
+165.189 238.05 li
+165.189 237.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+176.001 241.3 mov
+(G) sh
+174.679 242.52 mo
+174.679 243.624 173.783 244.52 172.679 244.52 cv
+171.575 244.52 170.679 243.624 170.679 242.52 cv
+170.679 241.416 171.575 240.52 172.679 240.52 cv
+173.783 240.52 174.679 241.416 174.679 242.52 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+182.001 248.3 mov
+(C) sh
+180.189 248.55 mo
+180.689 248.55 li
+180.689 249.05 li
+176.689 252.05 li
+176.189 252.05 li
+176.189 251.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+187.001 255.3 mov
+(G) sh
+186.189 255.55 mo
+186.689 255.55 li
+186.689 256.05 li
+182.689 259.05 li
+182.189 259.05 li
+182.189 258.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+192.001 262.3 mov
+(G) sh
+191.189 262.55 mo
+191.689 262.55 li
+191.689 263.05 li
+187.689 266.05 li
+187.189 266.05 li
+187.189 265.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+201 271.3 mov
+(C) sh
+206.005 278.302 mov
+(U) sh
+211.01 285.304 mov
+(G) sh
+218.012 292.306 mov
+(G) sh
+219.01 302.305 mov
+(U) sh
+211.01 308.308 mov
+(A) sh
+202.009 306.31 mov
+(A) sh
+197.004 297.31 mov
+(C) sh
+192.001 289.309 mov
+(A) sh
+184.999 282.307 mov
+(G) sh
+175.999 283.306 mov
+(U) sh
+178.996 273.307 mov
+(C) sh
+173.992 266.305 mov
+(C) sh
+166.99 259.303 mov
+(G) sh
+162.994 252.301 mov
+(U) sh
+155.992 245.299 mov
+(G) sh
+145.993 246.298 mov
+(G) sh
+149.989 236.299 mov
+(C) sh
+140.737 237.298 mov
+(A) sh
+130.486 239.548 mov
+(C) sh
+119.983 241.293 mov
+(G) sh
+116.229 252.04 mov
+(G) sh
+113.979 261.292 mov
+(U) sh
+122.979 265.288 mov
+(A) sh
+118.983 275.287 mov
+(A) sh
+109.983 272.29 mov
+(A) sh
+105.988 280.291 mov
+(C) sh
+101.992 291.289 mov
+(U) sh
+98.9946 299.29 mov
+(C) sh
+102.991 308.29 mov
+(C) sh
+110.992 311.287 mov
+(A) sh
+119.992 315.283 mov
+(C) sh
+127.993 318.279 mov
+(C) sh
+136.993 321.276 mov
+(C) sh
+146.939 326.3 mo
+155.939 326.3 li
+155.939 315.3 li
+146.939 315.3 li
+146.939 326.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+148.001 323.3 mov
+(G) sh
+155.939 326.3 mo
+164.939 326.3 li
+164.939 315.3 li
+155.939 315.3 li
+155.939 326.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+157.001 323.3 mov
+(G) sh
+165.439 326.3 mo
+173.439 326.3 li
+173.439 315.3 li
+165.439 315.3 li
+165.439 326.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+166.501 323.3 mov
+1.49399 0 (AG) ash
+185.752 323.3 mov
+(C) sh
+195.751 323.3 mov
+(A) sh
+205.75 323.3 mov
+(A) sh
+216.002 323.3 mov
+(G) sh
+221.898 329.04 mo
+221.898 330.144 221.004 331.04 219.898 331.04 cv
+218.795 331.04 217.898 330.144 217.898 329.04 cv
+217.898 327.936 218.795 327.04 219.898 327.04 cv
+221.004 327.04 221.898 327.936 221.898 329.04 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+225.002 323.3 mov
+2.502 0 (GC) ash
+228.689 326.3 mo
+228.689 331.8 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+243.752 323.3 mov
+(C) sh
+247 314.3 mov
+(A) sh
+253.004 306.299 mov
+(A) sh
+263.002 302.303 mov
+3.99597 0 (AU) ash
+281.002 307.307 mov
+(A) sh
+287.006 315.308 mov
+(G) sh
+289.004 325.307 mov
+(G) sh
+293.439 327.55 mo
+293.439 333.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+298 325.3 mov
+(G) sh
+302.439 327.55 mo
+302.439 333.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+307 325.3 mov
+(G) sh
+311.439 327.55 mo
+311.439 334.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+317 325.3 mov
+(U) sh
+320.439 327.55 mo
+320.439 334.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+326 325.3 mov
+(U) sh
+329.439 327.55 mo
+329.439 334.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+334.25 325.3 mov
+(C) sh
+337.189 327.8 mo
+337.189 333.3 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+334 315.3 mov
+(A) sh
+342.002 309.297 mov
+(U) sh
+351.002 310.296 mov
+(A) sh
+356.006 319.296 mov
+(A) sh
+351.002 328.296 mov
+(G) sh
+353.898 333.3 mo
+353.898 334.403 353.004 335.3 351.898 335.3 cv
+350.795 335.3 349.898 334.403 349.898 333.3 cv
+349.898 332.196 350.795 331.3 351.898 331.3 cv
+353.004 331.3 353.898 332.196 353.898 333.3 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+359 332.3 mov
+(G) sh
+361.189 334.55 mo
+361.689 334.55 li
+361.689 335.05 li
+359.689 340.05 li
+359.189 340.05 li
+359.189 339.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+369 335.3 mov
+(U) sh
+369.189 337.55 mo
+369.689 337.55 li
+369.689 338.05 li
+367.689 343.05 li
+367.189 343.05 li
+367.189 342.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+377.002 339.3 mov
+(A) sh
+378.189 341.55 mo
+378.689 341.55 li
+378.689 342.05 li
+376.689 347.05 li
+376.189 347.05 li
+376.189 346.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+385.002 342.3 mov
+(C) sh
+386.189 344.55 mo
+386.689 344.55 li
+386.689 345.05 li
+384.689 350.05 li
+384.189 350.05 li
+384.189 349.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+396 342.3 mov
+(G) sh
+405 347.304 mov
+(G) sh
+397.998 353.307 mov
+(C) sh
+390.996 360.309 mov
+(C) sh
+383.5 366.807 mov
+(C) sh
+377.002 359.31 mov
+(G) sh
+370 356.313 mov
+(U) sh
+361.998 352.317 mov
+(A) sh
+352.998 349.32 mov
+(C) sh
+344.998 345.324 mov
+(U) sh
+333.496 343.326 mov
+(G) sh
+325 343.326 mov
+(A) sh
+316 343.326 mov
+(A) sh
+307 343.326 mov
+(C) sh
+298 343.326 mov
+(C) sh
+289 343.326 mov
+(C) sh
+282.996 351.327 mov
+(G) sh
+274.996 357.33 mov
+(G) sh
+264.996 359.328 mov
+(G) sh
+256.996 356.331 mov
+(U) sh
+248.994 350.328 mov
+(A) sh
+243.748 341.328 mov
+(G) sh
+234 341.328 mov
+(G) sh
+226 341.328 mov
+(C) sh
+217 341.328 mov
+(U) sh
+217 351.327 mov
+(G) sh
+217.252 361.074 mov
+(C) sh
+217 370.821 mov
+(U) sh
+217.439 383.8 mo
+226.439 383.8 li
+226.439 372.8 li
+217.439 372.8 li
+217.439 383.8 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+218.75 380.8 mov
+(U) sh
+226.5 385.3 mov
+(G) sh
+235.752 387.046 mov
+(A) sh
+236.498 408.295 mov
+(C) sh
+227.246 411.292 mov
+(U) sh
+217.439 417.3 mo
+227.189 417.3 li
+227.189 406.3 li
+217.439 406.3 li
+217.439 417.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+219 414.3 mov
+(A) sh
+216.689 427.3 mo
+225.689 427.3 li
+225.689 416.3 li
+216.689 416.3 li
+216.689 427.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+216.75 424.3 mov
+(G) sh
+217.256 433.804 mov
+(A) sh
+216.75 443.551 mov
+(U) sh
+215.939 456.3 mo
+224.939 456.3 li
+224.939 445.3 li
+215.939 445.3 li
+215.939 456.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+217 453.3 mov
+(G) sh
+217.254 463.047 mov
+(A) sh
+217.254 472.794 mov
+(A) sh
+217.254 482.541 mov
+(U) sh
+217 492.287 mov
+(G) sh
+218 501.287 mov
+(A) sh
+218 510.287 mov
+(C) sh
+218 519.287 mov
+(U) sh
+217 528.287 mov
+(G) sh
+218 537.287 mov
+(U) sh
+218.998 546.287 mov
+(C) sh
+228.939 550.3 mo
+237.939 550.3 li
+237.939 539.3 li
+228.939 539.3 li
+228.939 550.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+229 547.3 mov
+(C) sh
+239 548.299 mov
+(A) sh
+248.998 549.298 mov
+(C) sh
+257.998 550.297 mov
+(G) sh
+267.998 551.296 mov
+(A) sh
+277.996 553.294 mov
+(C) sh
+284.998 560.296 mov
+(A) sh
+286.996 570.295 mov
+(G) sh
+284 579.295 mov
+(A) sh
+275.504 584.299 mov
+(A) sh
+266.756 584.299 mov
+(C) sh
+257.252 584.299 mov
+(C) sh
+248.504 584.299 mov
+(C) sh
+238.756 584.299 mov
+(G) sh
+229.252 584.299 mov
+(G) sh
+219.506 584.299 mov
+(C) sh
+211.01 584.299 mov
+(U) sh
+201.263 584.299 mov
+(U) sh
+193.514 574.552 mov
+(A) sh
+188.015 564.301 mov
+(U) sh
+182.264 573.049 mov
+(C) sh
+176.018 564.301 mov
+(G) sh
+167.018 564.301 mov
+(G) sh
+159.017 564.301 mov
+(U) sh
+150.017 564.301 mov
+(C) sh
+141.017 564.301 mov
+(A) sh
+131.018 564.301 mov
+(G) sh
+123.017 564.301 mov
+(U) sh
+114.017 564.301 mov
+(U) sh
+105.017 564.301 mov
+(U) sh
+95.7651 564.553 mov
+(C) sh
+87.7637 564.553 mov
+(A) sh
+79.5107 564.553 mov
+(C) sh
+70.5107 564.553 mov
+(C) sh
+62.5098 564.553 mov
+(U) sh
+%ADOBeginSubsetFont: Times-Roman Initial
+11 dict begin
+/FontName /Times-Roman def
+/FontMatrix [1 1000 div 0 0 1 1000 div 0 0 ] def
+/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
+/PaintType 0 def
+/FontType 1 def
+/FontBBox { 0 0 0 0 } def
+/FontInfo 1 dict dup begin
+  /OrigFontType /TrueType def
+end readonly def
+currentdict
+end
+
+systemdict begin
+dup /Private 7 dict dup begin
+/BlueValues [-15 0 600 650] def
+/MinFeature {16 16} def
+/password 5839 def
+/ND {def} def
+/NP {put} def
+/RD {string currentfile exch readhexstring pop} def
+2 index /CharStrings 230 dict dup begin
+/.notdef 
+<10bf317079bb21e4> ND 
+/five 
+<10bf31703bca56f2b2f1649faf9ba9948c035e867a5c8948b33268dbbfaf
+455551fd125b019c10a69d4b25668e31b838df4ee36a0f050ddfb933a970
+96a275ed8a7222f12ff901e86c1d4781a2a4d533d3dc87c499fdb840f1a4
+8285d60f1f88ace01bc52eacc7865a40753471dc909f282c74ed77f33b02
+ce7e21940182217d317dbb078d97be05356c56d5596c7eb8d464dec1827e
+46a37273fc66> ND 
+/quotesingle 
+<10bf317031d6cb38314a48a25f917a0bc84fa8560a9dde3392b0598a064d
+d972a4e02d28ccddbc17> ND 
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+end
+/Times-Roman findfont /Encoding get
+dup 53 /five put
+dup 169 /quotesingle put
+pop
+%ADOEndSubsetFont
+/Times-Roman*1 
+[
+53{/.notdef}repeat /five 115{/.notdef}repeat /quotesingle 86{/.notdef}repeat
+] /Times-Roman nfnt
+/Times-Roman*1 findfont [11.9993 0 0 -11.9993 0 0 ]mfnt sfnt
+90.001 537.55 mov
+(5\251) sh
+243.189 391.3 mo
+252.189 391.3 li
+252.189 380.3 li
+243.189 380.3 li
+243.189 391.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+244.25 388.3 mov
+(G) sh
+248.689 390.55 mo
+248.689 397.05 li
+0 0 0 rgb
+s
+253.252 391.3 mo
+261.252 391.3 li
+261.252 380.3 li
+253.252 380.3 li
+253.252 391.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+254 388.3 mov
+(C) sh
+257.689 390.55 mo
+257.689 397.05 li
+0 0 0 rgb
+s
+262.252 391.3 mo
+271.252 391.3 li
+271.252 380.3 li
+262.252 380.3 li
+262.252 391.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+263.5 388.3 mov
+(C) sh
+266.689 390.55 mo
+266.689 397.05 li
+0 0 0 rgb
+s
+271.252 391.3 mo
+279.252 391.3 li
+279.252 380.3 li
+271.252 380.3 li
+271.252 391.3 li
+1 1 1 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+272.25 388.3 mov
+(A) sh
+275.689 390.55 mo
+275.689 397.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+280.25 388.3 mov
+(G) sh
+284.689 390.55 mo
+284.689 397.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+290 388.3 mov
+(U) sh
+295.219 393.84 mo
+295.219 394.943 294.322 395.84 293.219 395.84 cv
+292.115 395.84 291.219 394.943 291.219 393.84 cv
+291.219 392.735 292.115 391.84 293.219 391.84 cv
+294.322 391.84 295.219 392.735 295.219 393.84 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+298.75 388.3 mov
+(G) sh
+304.219 393.84 mo
+304.219 394.943 303.322 395.84 302.219 395.84 cv
+301.115 395.84 300.219 394.943 300.219 393.84 cv
+300.219 392.735 301.115 391.84 302.219 391.84 cv
+303.322 391.84 304.219 392.735 304.219 393.84 cv
+0 0 0 rgb
+f
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+308.25 388.3 mov
+(A) sh
+311.689 390.55 mo
+311.689 397.05 li
+0 0 0 rgb
+s
+0 0 0 rgb
+/Helvetica*1 findfont [9 0 0 -9 0 0 ]mfnt sfnt
+317.25 386.3 mov
+(G) sh
+326.25 392.303 mov
+(C) sh
+325.252 402.302 mov
+(G) sh
+318.25 408.305 mov
+(A) sh
+308.252 406.307 mov
+(U) sh
+299.252 406.307 mov
+(U) sh
+289.748 406.307 mov
+(G) sh
+281.252 406.307 mov
+(C) sh
+272.252 406.307 mov
+(U) sh
+262.252 406.307 mov
+(G) sh
+253.252 406.307 mov
+(G) sh
+245.252 406.307 mov
+(C) sh
+200.439 578.3 mo
+200.439 574.05 li
+281.189 574.05 li
+281.189 578.3 li
+0 0 0 rgb
+s
+0 0 0 rgb
+%ADOBeginSubsetFont: Times-Roman AddGlyphs
+
+systemdict begin
+/Times-Roman 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/three 
+<10bf31704d4d67992b9ed68788587e5040da2286f83510cfc80f4a1e6fe6
+b09f97c944a087c4717928d782a2fb1bf0c721dd38a24ac2067564597d96
+92f97bc0abd49771e30c9491f8e5eab740a467cca2d53dd7c7249046b7bb
+4481eefce39557f10e129ce1987210441b69a70dd258cb6743bf9d7d1704
+979d6e3b6b3885eb27d4d4e5451b96ed7dfd7ce9e64ca73b4c877d5863ad
+c8641b65d41f66c4fc61f9c17255ecd286dcdef4a9a113d36ecac701c7a9
+417b48f1ad6bcdbabde10f6ff50ed870147c0d4cea98b8630a6ff4466ad4
+2983d01ca76121874525ba586aec14> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Times-Roman findfont /Encoding get
+dup 51 /three put
+pop
+%ADOEndSubsetFont
+/Times-Roman*1 
+[
+51{/.notdef}repeat /three /.notdef /five 115{/.notdef}repeat /quotesingle 86{/.notdef}repeat
+] /Times-Roman nfnt
+/Times-Roman*1 findfont [11.9993 0 0 -11.9993 0 0 ]mfnt sfnt
+57.751 555.8 mov
+(3\251) sh
+209.689 542.8 mo
+215.189 542.8 li
+209.752 533.8 mo
+215.252 533.8 li
+209.752 524.8 mo
+215.252 524.8 li
+209.752 516.05 mo
+215.252 516.05 li
+209.752 507.05 mo
+215.252 507.05 li
+209.752 498.05 mo
+215.252 498.05 li
+209.752 489.05 mo
+215.252 489.05 li
+0 0 0 rgb
+s
+137.001 324.05 mo
+137.501 324.05 li
+137.501 324.55 li
+135.501 329.55 li
+135.001 329.55 li
+135.001 329.05 li
+0 0 0 rgb
+f
+219.752 218.8 mo
+220.252 218.8 li
+220.252 219.3 li
+218.252 224.3 li
+217.752 224.3 li
+217.752 223.8 li
+0 0 0 rgb
+f
+198.501 271.8 mo
+199.001 271.8 li
+199.001 272.3 li
+195.001 275.3 li
+194.501 275.3 li
+194.501 274.8 li
+0 0 0 rgb
+f
+204.501 279.3 mo
+205.001 279.3 li
+205.001 279.8 li
+201.001 282.8 li
+200.501 282.8 li
+200.501 282.3 li
+0 0 0 rgb
+f
+209.752 286.3 mo
+210.252 286.3 li
+210.252 286.8 li
+206.251 289.8 li
+205.751 289.8 li
+205.751 289.3 li
+0 0 0 rgb
+f
+237.252 326.05 mo
+237.252 331.55 li
+246.752 326.05 mo
+246.752 331.55 li
+0 0 0 rgb
+s
+183.002 343.55 mo
+187.251 343.55 li
+187.251 426.3 li
+183.002 426.3 li
+413.502 343.05 mo
+416.252 346.3 li
+387.752 372.05 li
+385.002 368.8 li
+115.001 350.55 mo
+112.251 353.8 li
+140.751 379.55 li
+143.501 376.3 li
+0 0 0 rgb
+s
+0 0 0 rgb
+%ADOBeginSubsetFont: Times-Bold Initial
+11 dict begin
+/FontName /Times-Bold def
+/FontMatrix [1 1000 div 0 0 1 1000 div 0 0 ] def
+/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
+/PaintType 0 def
+/FontType 1 def
+/FontBBox { 0 0 0 0 } def
+/FontInfo 1 dict dup begin
+  /OrigFontType /TrueType def
+end readonly def
+currentdict
+end
+
+systemdict begin
+dup /Private 7 dict dup begin
+/BlueValues [-15 0 600 650] def
+/MinFeature {16 16} def
+/password 5839 def
+/ND {def} def
+/NP {put} def
+/RD {string currentfile exch readhexstring pop} def
+2 index /CharStrings 230 dict dup begin
+/.notdef 
+<10bf317079bb21e4> ND 
+/one 
+<10bf317016a461215dc2bc58955b35661fa832109bbf588b04481bf3cd7d
+6757617e8c0c9816948b05a2f38fa7d575d87daf4173819092e8a31c5c40
+e448> ND 
+/two 
+<10bf31704e7ce76dc21d92ed768461702e89179315ec586ed23b84b600e7
+3a8f14adaeefbd1a8ef4ea75ecc881acaee461c169f9135deb6066d93b22
+ee96d26cb12918588e0f074cbe4a50dbd8dee265fdf797758e390f627882
+1a348c2c9d448eec97692b7ef491db5d02d45177dd87c13938d098649ebe
+a4cc2faaaed0c7a2761825de7c345f0bfb9041ae2e00092351fa02c4> ND 
+/three 
+<10bf3170448bf7f9ab87993b613b3ec6872bb5d966efcdf9c783f7efc718
+a4be64d1751f3265cb60d9b5276469b557ce9ac8e0b3e36526e436641c45
+b03e0bbf21c62cc9320f6e43ee7f4cf80e4ba99cbef004b4c841b62fef40
+eb9e06429ecc6610f2f9981d2ba816746969ed66b8d8f4a43f88a0481912
+4ea05d3482e732407a96b011398ff3c43e92014a09adb230efe31fae5890
+b709d22daa136899f6cee93c165c965053839c1761be399dc17d19e6190c
+d1189af61ffb99fcba33a54bf70a760eb14d549829e16b73f3286e65e570
+e9c68df30501c2fc3708531fc7b7a7> ND 
+/P 
+<10bf31705ac93459811df9cbd49c2bf4b1dedea8f02dfae7024000d592d8
+626efab6b45ce7d12609750117a8b9f45cec5fbc19dabdf498132ae3871f
+7b30c381d86c65ed3471fcdb55def6123a3407152978bf6a0a519b305da6
+114f0efe0bd3c68f68cac1672ee085498a8e6fd32638d9a60604b744ec7d
+adf8080c> ND 
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+end
+/Times-Bold findfont /Encoding get
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 80 /P put
+pop
+%ADOEndSubsetFont
+/Times-Bold*1 
+[
+49{/.notdef}repeat /one /two /three 28{/.notdef}repeat /P 175{/.notdef}repeat
+] /Times-Bold nfnt
+/Times-Bold*1 findfont [11.9993 0 0 -11.9993 0 0 ]mfnt sfnt
+144.501 537.3 mov
+(P1) sh
+182.505 520.296 mov
+(P2) sh
+133.005 463.8 mov
+(P3) sh
+228.939 490.8 mo
+243.939 490.8 li
+243.939 478.8 li
+228.939 478.8 li
+228.939 490.8 li
+1 1 1 rgb
+f
+0 0 0 rgb
+%ADOBeginSubsetFont: Times-Bold AddGlyphs
+
+systemdict begin
+/Times-Bold 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/four 
+<10bf31705e925b80b4d4cbc4e928debcbc9ca1ce5a446752e420eab5615d
+cef61aee7d97d9eff1670763252051f2be6419a384475d66237624abe7df
+bf6e4102d5fa21a734cd00f0c9525ffcfc3a0b5db0af7e642e07c3025b71
+28> ND 
+/five 
+<10bf31704c1fb570da2787659fe061824d11502990202c6ca9b1b5da7d96
+0cdc349fd36ba74c839bb1f6ad5b2036aeda9f35d253d86da9773dd61de0
+422dfd536357960cb12f0db9ec77f07242af63d3096a64c3445c4655da1d
+3f19cb4456eb43ca711a9ea13df4ad219690fec0405819e631b49a78e94e
+67647654af6c2c1b1a75609742d0f8441ecfc35136febc44d8aae59aaf7d
+8b88b3651059> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Times-Bold findfont /Encoding get
+dup 52 /four put
+dup 53 /five put
+pop
+%ADOEndSubsetFont
+/Times-Bold*1 
+[
+49{/.notdef}repeat /one /two /three /four /five 26{/.notdef}repeat /P 
+175{/.notdef}repeat
+] /Times-Bold nfnt
+/Times-Bold*1 findfont [11.9993 0 0 -11.9993 0 0 ]mfnt sfnt
+229 487.8 mov
+(P4) sh
+159.497 313.8 mov
+(P5) sh
+259.439 457.8 mo
+274.439 457.8 li
+274.439 445.8 li
+259.439 445.8 li
+259.439 457.8 li
+1 1 1 rgb
+f
+0 0 0 rgb
+%ADOBeginSubsetFont: Times-Bold AddGlyphs
+
+systemdict begin
+/Times-Bold 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/zero 
+<10bf31705e925b80b4c8f1fcfb5b2fe440a74f62c796f3c02eb2da9ee8cf
+3e749c77619068400ca89c7ff72323032874cc719b493cec13438cfd7c60
+1a938141b249a6344fe7adba210563b145c5c7fdeb53dd40d430a2aa7888
+168bd4bf2698d90932777f16b7e6a801d452cb01444444badd4929588478
+5c2db1fce381dd65450cfad1ad35a39b11fd66b6c6b2> ND 
+/six 
+<10bf3170422f935763e872994057543ce516e412e89a49bbc1204d62c175
+ca9d1f51644268fd25cecacf256df345b741363b23f98a608f15fd547f72
+00ef03f86eb4e44c61909a23296955b08f2771fc97c22a2b74bab2a8e84a
+f4f8604f1a71e930f22c46eaad1e90de83acf4d8a5e4c28edd51c9df340e
+2d52b5868c7a5fd083ea171c4819194d1bf4bc737f3833f0f4171f47f512
+371c97328c1500a428075fc7d5b3c272c7618a32f1d1fb3f1f5127d8ad2b
+3b1b912a6696> ND 
+/seven 
+<10bf31704e7ce76dc241686bc20501ea6e7c96a17170122b38ebad2a9949
+f6af8d4a89b98118652167542a74de2ba301ca2bc45e339e3ae683f4931f
+043d89fd8fa9850065> ND 
+/eight 
+<10bf3170599acabf992f0757d5e6110d0b202583f1f37eaa3993e2f1cd0f
+6e2622e3038d71367894f4d7032548bfcfce20f6b689fcb6b5a6254cd40a
+57f3279a61197186e879de36aa303e142e3645176933121430692e7d7ebb
+506cc17ee9a0b5fcbbc35b4e0ca4bc539673a52c07e974690d1b4e3e7b30
+414514c9c4a69719fb0eb20a52293f89414475f52809d90dbe81091c74fb
+4c4dadbb0d931073181f5593d9dca742706d4ab9098d680bf1c84eb32b33
+f14a05583e424b60d3cbfbb323701a5b41e6da60d0f26788ef39cc3d0958
+7823ca82721fbddff3435b5a34de0e71ff21dda5df3656efd4419938b2c4
+470fe8e64677cb89eb7c4f1b21ac33694d> ND 
+/nine 
+<10bf31705d64a97b18e1d0c26252f36d43809f58e8523f9ddf78e8047717
+f29066dc4d29840ee57ae4b42a94d32fb40701e46b2363001bb79897b78f
+07a6186b92686a103837d7cdc6e3e3744245ff59de2a1d399ca8540f1c30
+c9a8541a5212f9caf65fbd8253c13d1a37e50b3c931f53d63eebadb9b257
+d82f4a0ddd6c07d70303ef7dcaedbf224ad7acf31f562053f842644420fd
+b779b2493077d34338a3116b99be03d0552359238e501a8016fcea411abd
+1d0406> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Times-Bold findfont /Encoding get
+dup 48 /zero put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+pop
+%ADOEndSubsetFont
+/Times-Bold*1 
+[
+48{/.notdef}repeat /zero /one /two /three /four /five /six 
+/seven /eight /nine 22{/.notdef}repeat /P 175{/.notdef}repeat
+] /Times-Bold nfnt
+/Times-Bold*1 findfont [11.9993 0 0 -11.9993 0 0 ]mfnt sfnt
+259.5 454.8 mov
+(P6) sh
+/Times-Bold*1 findfont [11.2423 4.19473 4.19475 -11.2423 0 0 ]mfnt sfnt
+122.022 303.857 mov
+(P7) sh
+/Times-Bold*1 findfont [4.45364 -11.1422 -11.1422 -4.45364 0 0 ]mfnt sfnt
+57.6792 344.517 mov
+(P8) sh
+/Times-Bold*1 findfont [11.9993 0 0 -11.9993 0 0 ]mfnt sfnt
+43.751 285.8 mov
+(P9) sh
+120.755 290.3 mov
+(P10) sh
+109.939 291.05 mo
+116.189 285.3 li
+118.189 289.3 li
+109.939 291.05 li
+0 0 0 rgb
+ef
+116.189 285.3 mo
+116.439 285.3 li
+116.439 285.55 li
+110.189 291.3 li
+109.939 291.3 li
+109.939 291.05 li
+0 0 0 rgb
+f
+116.189 285.3 mo
+116.439 285.3 li
+117.439 287.3 li
+117.439 287.55 li
+117.189 287.55 li
+116.189 285.55 li
+0 0 0 rgb
+f
+117.189 287.3 mo
+117.439 287.3 li
+118.439 289.3 li
+118.439 289.55 li
+118.189 289.55 li
+117.189 287.55 li
+0 0 0 rgb
+f
+118.189 289.3 mo
+118.439 289.3 li
+118.439 289.55 li
+110.189 291.3 li
+109.939 291.3 li
+109.939 291.05 li
+0 0 0 rgb
+f
+116.939 287.05 mo
+117.439 287.05 li
+117.439 287.55 li
+114.439 289.05 li
+113.939 289.05 li
+113.939 288.55 li
+0 0 0 rgb
+f
+0 0 0 rgb
+/Times-Bold*1 findfont [4.19753 -11.2413 -11.2413 -4.19753 0 0 ]mfnt sfnt
+89.8169 259.833 mov
+(P11) sh
+/Times-Bold*1 findfont [11.9993 0 0 -11.9993 0 0 ]mfnt sfnt
+144.001 96.7998 mov
+(P12) sh
+/Times-Bold*1 findfont [11.2067 4.29118 4.2912 -11.2067 0 0 ]mfnt sfnt
+196.666 196.274 mov
+(P13) sh
+/Times-Bold*1 findfont [7.62038 9.26837 9.26839 -7.62038 0 0 ]mfnt sfnt
+194.595 246.868 mov
+(P14) sh
+/Times-Bold*1 findfont [11.9993 0 0 -11.9993 0 0 ]mfnt sfnt
+224.75 313.8 mov
+(P15) sh
+305.008 315.804 mov
+(P16) sh
+/Times-Bold*1 findfont [11.1407 4.45985 4.45987 -11.1407 0 0 ]mfnt sfnt
+369.779 323.626 mov
+(P17) sh
+/Times-Bold*1 findfont [11.9993 0 0 -11.9993 0 0 ]mfnt sfnt
+277.002 417.8 mov
+(P18) sh
+%ADOBeginSubsetFont: Times-Roman AddGlyphs
+
+systemdict begin
+/Times-Roman 
+findfont dup
+/Private get begin
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/space 
+<10bf317079c757bf91> ND 
+/parenleft 
+<10bf317005ad1d5c1c85b66b1383105b1f75e2f991d0ce88be4badf85803
+21509df291e14c112ffb01d8e602a943619bc30f04ad5bec7380a8990646
+3af8ae958b6cf03f> ND 
+/parenright 
+<10bf31707a09dff2c026d81f6e9ddfea5c974e53cd1d466f61f5191ea85b
+8cec99ca7116d955b56580cb6386f3c883b5f08253cc6274f4e286cc5255
+2ab414d7588be021c3133e> ND 
+/comma 
+<10bf31702451e0db362c9688b7e8c23461139937b5c7b11901b7615e58eb
+ce0e45846e0c6f23dc8426fbfe9ea1e740f039ff8cf61996b7c76b9bc2a8
+> ND 
+/hyphen 
+<10bf3170498b62f3d5e85685025146d3ebb9df6a4eac4b> ND 
+/period 
+<10bf31702451e0db148ffcede57c04e4080790f3ed0657a1eb7c77aec952
+d15bc36106> ND 
+/slash 
+<10bf31707a099488765253767b6ef342c7f7241110bbcb09ce46e123db> ND 
+/zero 
+<10bf317041f0a9492c2035cd51a2904806f13f17c2620c4aaadd106266c6
+25bbb5c21416837f1d1cdfe459e81f1a1013c16f86fd9a27693c8872ab97
+faac2150af6ee3e0ed7161e755af6eba20495920179a1d8f20f4ee7a5dfd
+d241c9cbc5fe8591b62af839950b19a3476f9e4d7507a1470207e05b89ac
+689b789d08d0d5ded4eabe098d4b8bd1dddb4935e637c1> ND 
+/one 
+<10bf317005ace4116f46739a291c133ef5c0ce2c8299d65de3756bb6940c
+b4355dc475faba14c0bd0d8c1136c951297252e0da77fbc30bfee79150d7
+5cee48> ND 
+/two 
+<10bf317036d1f7d632bfc8e1eacd9b006cbf62552fbc3e1ddf0431bb1541
+532db9a4c5a8dc835909798fb06d799bb3302bb11635991e6e69fb7b2121
+695dc70dabe319d810a0839879080304965b0d9ade52577069bfb1ebea9d
+40ec431e0eb5c0370e6018e714e9085ad98aa8950aeafd8bdc268bd16545
+e444488654d53d43bc587df4359111f64cd5a11a6755b08b2253ec1e> ND 
+/six 
+<10bf31704faaa95022859bfa4d40a634d16b5c6e27e8179786696c20efcf
+f2088b8d3116daaeb3f47f771c5b59cc0afd89139a7c37c605cf8b53dc27
+380249aa5ea705e51497228cbe7f92dfdb05cb2c745bfad479a4a6102917
+98805f1e4ffd1913dac316084a3ad05d6714a918c36f9d6d45844ed149be
+369d7108e7fb694a36f8c56232e1bee9c1bea2fe67ff99030d5c6f5a581f
+b878427e68d526f4869e604a9c89abace85b55824dfe246365ef13eb1536
+bf4a0f83> ND 
+/seven 
+<10bf317033461378fdcf6456106803c68654af3ae8d9d7ea442e5214ba61
+233f7de8bb4ebc4461d99d860d36ba1db7097fc3848df1337b3cacd1483d
+0026ca578af6a7c7> ND 
+/eight 
+<10bf31704ab2181850c1a88d3f8fa202c5e0a8894b70ce17f00448b7f184
+829e93577c1d58c14cc019460ebe7600631f8f4acc93b4dd884803c9e3f1
+eb26f7c2cd1094133dc32c948b33940b19fa747b701ca51c9ee927a38f52
+04f2614165cbc422ca4714c03eef07c163ee39fa7bbff5cde214fd39a16b
+09cf85564b587c881bfef98a02ad1cc0a265a943373623af31c74485a733
+18d0f6f7f1d5ed232a51a44983dace620c95820f016744af813aa536566c
+47af1e2278efd37fbb5379807dfaa2e69d27f2b4a59d46b7d8d8efdb20e9
+60c77ba7077adbe4d33c0181893b161aacd6499116f6cdc8c2ee52d69d4b
+91aef33a637784e5f5c64baf9cca7942dfc3> ND 
+/nine 
+<10bf31704855d6b4077ddc2826d77db5309801db6033b068b760ce80e56f
+1fb06ecf2eae8a8d4e1fba65e387594ebfaea74cca9b3dca0d29b4714ea3
+ab2bd8f1cc4d869edc1f54b56761c869d3fc0b7a14a657708f8fb5e1653b
+8a66c197768c7c9d2f195f6d8f8bd8b8942741d02883e7aa99afc3bdf8bb
+9ab95c6726016e7ced95692a934123bf74336844b858386195bd6f0348bb
+5e0be642088cb2faf5cdfc2d6d90d50529fce477399cd7b4506d009be385
+36d2> ND 
+/colon 
+<10bf317016ab24388477e56e7a7154cba85b49b50c016d79ec6a751ac400
+8ec5bd2ff257c655573d9b15246e797bd0b4311210b87b998fe71617c304
+2798> ND 
+/A 
+<10bf31706d7ae346bffe29e0fb34e18312ccbb6302af22689ec4f2127a0d
+d6baf4773826f8362914832b0b84ca343a443e2c16a9118637ad6f1a2e1f
+aa1ebb04f7f1ef2a790258bcc86d11f5b7f6caa72bc1d0e46a538a95ab48
+ad3395878de6486f82> ND 
+/B 
+<10bf3170435cd0e6190c3cf2f98c0ec5f6d620884f807980d68ea5243935
+1cf513d39c9b25687fe57d2816d113d980a959c9b00fd2e77d4229c2a1ad
+a3e7bbcda819ac24e3b8891eea398527cfca77d0d15f149f4c6d5846d335
+43a76e2781c833d82569ade39651c9c644c3169de3b922cb11cbcc9e3e39
+9313b10f269b5eb4cbabc359d4974298ce89a949ece874012cba69147eb5
+610f92e7d7d066555052ccb6fcf64056d494eb67e8ecdb92927bd9cf4d30
+d18e88a4fe> ND 
+/C 
+<10bf31704985822027c4890fabf47f18315cf1f514866b1687ca49157587
+c73ada42e87a82a71fa7557e3105cf56b89ad3c5315f5962b1a3c377569b
+d149dd69698c26cebdc18b285f0ce02ffc45fba7040ae76c3d10470951cf
+6e751875b261daf70dccaf37817ea22e49172876625f99afea7e192718f8
+2d13de668d4574b9d8efe1037b5b4dde7df018f38f> ND 
+/H 
+<10bf31705fc0e33fb137c616b47290d19f226efe6742c4bf0cb058c1615c
+76a279be1139312734c6a234e1f459f5fdcd3610ff64e7a2c26e9afde307
+03bc3a282a32be242e3b866b5d5316e26382db6023d157df27f81ef7cb60
+9e7ce88b3fd76ef1dcfc9e82f7da8a909a> ND 
+/I 
+<10bf31705fce2ebcdc14a0c146e0b901675090bf7410ca8e892cc450a79f
+cd6263efec258234bfc11447e88090b6fe0bb8d7123ec2> ND 
+/J 
+<10bf31708ee748efbd7ed856eeb700658ff31ff752d191b29985ca44e9d4
+fa8021d2c2449073a526a39b84a6937e5c32edc6640651b2c3be27d81c19
+ea96e78f4113888fc8b134455074491f7a7ba09c8facafd5a004a760445f
+d00fdfa6b32c0d5d> ND 
+/K 
+<10bf317040c3589fd99cbe09f2e82b80ab84eeccc01172881d83ee362bf8
+a094002302b824c0515db4f51e613b48286f1aa08a3e05a9abf61b1e68db
+9e2da33e60ee2e1a901b97a6d5ffaa072bd7b43f086fc058039873621e09
+084baea22255bdaabe842c68af5317aaff1dc54c2d77961bae14> ND 
+/N 
+<10bf3170586d3968505ff87264be7ec883920688cca7d9d7ebef6b14adb4
+12cf47613ab238b5314909eaae4b807ef31a587fe4a79c426c98f895ee29
+85238abac441a7e05459a2603f6d28e75fb6badfa6e81418c0a638> ND 
+/P 
+<10bf3170599a82ae9dc9593cad300b7f3884414bb0569fe483f3acb617a1
+5ef395ef32cf0d220dc8440aff02a21bdf7646dba480081013ff057e6243
+9a50cbea5f9cb9a46c125151fa2dc458d75a798f192be2eb1f436a0d9567
+1d70b037f2931437b8312c06f4962bec94fe952154308850b7049bbc3ac6
+9301> ND 
+/R 
+<10bf3170422e6230a952872b5ad1dc4f16e3fc1704a02c61c5e992942e1e
+814f5a036cc714a19b83d8f9ec92957b9cc9c81e547da8ae77f074c9bd10
+73009734e431fccfd615ceda2428e8dccd0571a77f416f593adb1cae7381
+f103392cf96199bef077b31adee38fb7ba883b119f4671e1c9bf208bfda7
+5a094838b33f6ae85649043746a99b52c2cd46025fa2b9d4b4471e> ND 
+/S 
+<10bf3170422fdb647ca46ef1065574f96a04ba084bc098d0eeb8d73efa20
+25e84f6b143b820d4f40c2a48625d834f7dacccdc9b2e32e077bac2098d9
+6b96f7e49545eb006bae209a0f000b57e1c799126f23a367ce4e789a5521
+430ab838ef6870f4e454f0b7245d3ba7617ed80ea39e731c783b4f750d49
+c02786896c9300404554d9b27a816a32d57c6ee2c1b47b8acb582fdf0220
+ea9f8c2820a6a365a0659a1ae4a29f48f2bcb52fc079d6939efc15> ND 
+/V 
+<10bf317068829292e78283dcc1feddc62cc7cddc94a0bbb5b543dc95264d
+607dc9177221d004405fdb183b401b7c0c26411ae2fe39905820120b0ce1
+84a326b5fbb8a4c8f787d3b760148b4ab3c28199> ND 
+/W 
+<10bf317065f5a4c4ed7e80882a865c0b5e0c1db85df74331e02b3cb41a9a
+6239f1b0184328c7e59825e7051dadcbf9f8bceebe04b15a4de4f35099c2
+4c6fa3c162605ac75553c7ac46e3cf5c6001e018a229472674354172448e
+beaa9b338091ff15ebc460b4f961d3b40d0ea372d7e5a196907046ccdf0f
+2834e50c039294b25c1cdd> ND 
+/a 
+<10bf3170599a125eccdb6ec27d3afe07da389ecbb305faf429012f717ba5
+d7a504001b7d2cf7722bd949e4b4b2e77bccdf0b2b1586d9915715766da7
+59741fe65bc64d6863ec1039a27d8da5681073bc991e2c740d0bf14aed2b
+81d80e811057a7a261d77619d9bcb0c3ef91c90a394016d3a96727d1d488
+dda1e7b4d3ff0a77767d899306fd13aca7aad2910e6e3aad69f172e3d8e3
+85dff5319dcca32104c930e0a4e2e49b8750bab4a9149ef2d730bda10f91
+592a2a46cc0c629469d818798f634569b83f99cf> ND 
+/b 
+<10bf31705374882f7387637dcbb704d72f8bd63b0bf65f4612fe0f27d529
+60722d7a45438cfde1168810ce04c91811250545cdbd6c10a87a474df160
+24b3215bec7af3c0b61e074082f1ba3141f39f480c2c5a76fd396a487a9d
+6a25d6aa36deda9c976e791661015e179d4f36b29dae4f0f04128d0e5ac3
+dde66d561d7806d481796866491fb9de890bfe> ND 
+/c 
+<10bf3170435d9d6bdc818a55004ae1aad80b146ef4640b9f7a82d0286ef2
+5db6c5bd65a97018eac616ec8d7499054c6ff6544566113eb456a3efeddc
+ccc8eb022ae4ed32a1cae1639526dcd4d63a5e0b6438bcaa9089a840ecbe
+5f5d623e9d44cd8703af9d371c430fcdb02e500bdbbffe37e3e86fac9735
+d4759aa66b0f12007edc114a586e0532e684a856c1> ND 
+/d 
+<10bf31705d64a97b172062c3429fc21eef6c195efed3b68a891c1c3f4782
+b3b8f0493f2e3f2184ac9ec14961282178962a45d0e1282fdb9be01eb4d9
+330ed40623df12b195cf16105bcc4a841d7c3ce2fe9e2c90d1cb4d19d886
+f71e50c5fdac49f7a3f6cbb8e9cfef3e1d497b6f65def5b587b04c30a0ca
+285981fa3ef98a35eaa48c3406f03812dc4d26551eeab2e7192ffd8e06d5
+582446be7a8c0a3f13a5> ND 
+/e 
+<10bf31705d647142da77f80383b39a2be6c45bc647b72e319ff73d610d1e
+62332d342ae09e16e6dc01192625d1af66f730c2b02413523b998639a5ab
+b7a878766d5d5ccb302e4a2339fd457ff9223aaf50bbf100079c44acb716
+0f80282571552fa2e287b218275ab71b88c3093968065977f1def2e827fa
+b94e763732c48dfc9ec49ad18a7a0f2ba5d9d70264> ND 
+/g 
+<10bf317051174587f37a05df23e24e32408217bf8db3b328f0f5146daeaa
+1ea0b93eefbeb881d5cb9ffa3155e0f4e76e202ca89aac26fddfcffe019d
+b4c15e4612e28d2142e015e9b34526719a1671f68e0202443eff71303477
+43d1a7a6e7b2a9371dc8418b687da58c1e33c99f8930ca86ef07a3b3ec43
+50197c8090ae40568025cd75df947eee06d039359090b4659bdedae20a2e
+32bef9ba6327edc3577a042c8a22d1cb6fbd64fd64754891> ND 
+/i 
+<10bf31705fce6507854bfd5453e743735818d40d67ec1532d846ec6eb57b
+a379fb65a427f99b32d98a51f57658ac9b227989b26d151d43cea1c989bf
+f139f48a1383fdef993f3563bc63dd976a127ddf8d3d4d> ND 
+/l 
+<10bf31705863e503408ecf9ecbcc5d318bb6318525c5b52ab08ec840ccd6
+ad0d498b316284b1f457be2054e4989ef3a09e1de6c846> ND 
+/m 
+<10bf31705ac86a49312a9fd9216ac187bbece8fcca49aeeba8345c5dcb8d
+22e2f311041729efa574dc4f8cea66ff62b9f7875e438aaac2bc968c833c
+59433c927d77707a4793dc203fe495345b66acf70bf0e3c6739b10493656
+320226d1aab14145580caac5297051c2cbc1275bf490dbfb37069939d4a8
+fe2e511651276f25977617430a1fd815f73c447cb770501a519db54db5ee
+ff6657ac892d36d74b68b770f457c3a3ce13a3df663f087684614f2f64cf
+19538a331f9664c459dc237b> ND 
+/n 
+<10bf3170573e563cfd092bc7aac9e949b8f7a4827fe0f5ce67cfeb547cc4
+0324c0c45558a88f1ea6ca3d00c7850dbdd4b3c992012bc75b427cf6ac8c
+46f4b1290c6a0924e21bd8fe2684be248ea4bd907856e7ca65331eac2fb6
+c7d64a4c51041fcdcbf442862c40d772e99c9a3d2660da8f8d1225eb9a38
+a0939af5d1> ND 
+/o 
+<10bf3170422f93576c717ee99d6736f12ef20213595672a3889f39fd79b8
+f8e03db4067972748506dd3e394e1ed21612adf9955de5d344645439263d
+16fe05d9f8432033df436bdbe971bdd0b4ca20ec935003ac05958f3374d5
+be4f84a5e6c035be86b4155b925e09a04220f0eb68246a69ca538a270f95
+b47c12aaed3b0426c82ce7bd8f92> ND 
+/p 
+<10bf317054a23a3541e41e8ecb0847e60b1e31523529115b6758aa977454
+1325eaa79edb9799a0d9e00066067ae6bea37a698c98886274e3f41cd1b8
+578a94c225b0f3c0e92bf5f3f03ed0de98ddd26367108da99886260beb08
+1a3b0855a0e35e3b0e73b0cca3d170c7bbff6a8ac29076da97e9fbc9239b
+bfc88f95a8a50d51b6e1e0fb3f034ff0bb5e891e2b09f42b118fb4882d97
+e05b> ND 
+/q 
+<10bf31705c36e774c01818b567b3a30f54c9e6843777a6accc2cafc6d62c
+32f03e649a76106692b272964d44887a71a37c0f41a3ac706672abddcb3a
+b2e1842622d684c349659112fdabf6c782aae0bac9563f28fac625d64bf5
+97c35d79be6aacdfddbd7b27dbac2a70805734e90e835d9f4394cb64de19
+8ebedd5445420cad3d2f380bf1ef914ef97d6a6c> ND 
+/r 
+<10bf3170537b448baee17d92f49ac0a05a119905783ad31b1335f4ce098c
+c861eb004143dfac510557c0ec68b61a660779041049a2f8adbd8b72e40b
+d877d7d4b313643f2fa4d7581b23becdec85b7d7582f7e2f50f829ff3515
+fa749796aaa74d2ed647eccf740e962946> ND 
+/s 
+<10bf317050d9b80120c19d821533341643354852ea9df97a99fd4ba774b7
+08c1fae708745f9328a1a9a5d21e169ff77ecdcd42f945703d067165d10e
+35df5f72d35341f01fb3026c906bf5dc9a4d1bcd00cb4fd389804aaed0c5
+179606cadf715c7fa2d902f17112979a83434b773005e3a14720c0ac9ccf
+50f62928be58f2d774787655c3e51c4ad2772c2dacd3e4a9b3e3d07c0e79
+b3bf6755ddd2a9f85c3008b885abd5da2aea4dd26daf39a061> ND 
+/t 
+<10bf3170524a2d22499482a58e0ac04293f60f52cf55d017afd6304f1340
+86ad48ad6f4b3f79315e33aa34c07371b994fceb8da4492a987edfdf026d
+4bc55acf283ac30b> ND 
+/u 
+<10bf31705374882f7c934ecd3b5e82940591cc2da5136b726bd97deea59d
+b5951369571544034f93f6e9e9bef396feae60a5b9c3456da1182921d60f
+51a03c79c508334f1146b564507198b89948780cf4b60418521ed73bbe7d
+3e228dcb5a9c016f8058dab9750074512ee3321a1b934119d8b6bef7f816
+c990fbfb206a15a63a5b88> ND 
+/w 
+<10bf3170638a0228cce16401e2a1320493ec75c1c4d2465d588dcde2174a
+6f5049d20d2b454d3f053b001bf9bfb825dea634ce9d3fb5dfdd04855e7e
+dc0d6e4dde355956359d5dc6a40d2c9c8826366d53049d947ee8dde95074
+627941c33de4220aaa3a8af2bf2b00299fde9211e4d408bef1eb22bc89d1
+241b0be5a1bbaa> ND 
+/y 
+<10bf3170776bfd988a56ee8fe50a75c214c009776a321e560c933ea18fd8
+2d83bbeace10512da5973877666f325826dc5af29e15691888b572f52587
+df0337c16f0b24682fde99afae5ef409919e6bb4ac7d35dd8790071ba79e
+f7780d09de33b41d6b48fb9a59a16a0e5807adc0fa47d6b5e690567815e0
+dc2ee9936d7e839639b3888218268a73> ND 
+systemdict /gcheck known {setglobal} if end end
+end
+/Times-Roman findfont /Encoding get
+dup 32 /space put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 75 /K put
+dup 78 /N put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 86 /V put
+dup 87 /W put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 103 /g put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 119 /w put
+dup 121 /y put
+pop
+%ADOEndSubsetFont
+/Times-Roman*1 
+[
+32{/.notdef}repeat /space 7{/.notdef}repeat /parenleft /parenright 2{/.notdef}repeat /comma /hyphen 
+/period /slash /zero /one /two /three /.notdef /five 
+/six /seven /eight /nine /colon 6{/.notdef}repeat /A /B 
+/C 4{/.notdef}repeat /H /I /J /K 2{/.notdef}repeat /N 
+/.notdef /P /.notdef /R /S 2{/.notdef}repeat /V /W 
+9{/.notdef}repeat /a /b /c /d /e /.notdef /g 
+/.notdef /i 2{/.notdef}repeat /l /m /n /o /p 
+/q /r /s /t /u /.notdef /w /.notdef 
+/y 47{/.notdef}repeat /quotesingle 86{/.notdef}repeat
+] /Times-Roman nfnt
+/Times-Roman*1 findfont [14 0 0 -14 0 0 ]mfnt sfnt
+207.939 50.2998 mov
+(Ribonuclease P RNA) sh
+%ADOBeginSubsetFont: Times-Italic Initial
+11 dict begin
+/FontName /Times-Italic def
+/FontMatrix [1 1000 div 0 0 1 1000 div 0 0 ] def
+/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
+/PaintType 0 def
+/FontType 1 def
+/FontBBox { 0 0 0 0 } def
+/FontInfo 1 dict dup begin
+  /OrigFontType /TrueType def
+end readonly def
+currentdict
+end
+
+systemdict begin
+dup /Private 7 dict dup begin
+/BlueValues [-15 0 600 650] def
+/MinFeature {16 16} def
+/password 5839 def
+/ND {def} def
+/NP {put} def
+/RD {string currentfile exch readhexstring pop} def
+2 index /CharStrings 230 dict dup begin
+/.notdef 
+<10bf317079bb21e4> ND 
+/space 
+<10bf317079c757bf91> ND 
+/E 
+<10bf3170422fec138c7230ff7e19baeab789ca5bef7c283ccb09551e5920
+152b68f4ae9202c0b3dc9ce436192c9236bd3660f1a4c31e38f86b098ad4
+0faea873d69e67fba9e58ca6cfef84d9c04bf5ed0211af7c47b992754a0b
+77dd10b8c2dee46b4bbd80a3899e09c65b8aa861d24429fb9db82951837a
+3a1283595735> ND 
+/a 
+<10bf317040c2e74a508d6139dce14e3948d239d0634bbfaabf9e8d3c7573
+ed6fbf5dbea53ff369f531ee4a35d5d774411d751e898d06a82fb104c24e
+2e288c130578a51898d70e768e70e25015126de9836190adddf115525009
+d0b5cf5799cade59015ed746a61eea4e41b65101d4ece488aeb0eae27176
+fd995d93360fcb186f66fe5f540946011237ad8713367061b7184db6a67a
+996b98e53ecb5c8feb0582a80d88d56027b3ffcc55dfb4dc1ac3446fc8ff
+d6878cc714f800a67c3909395a6179cde4244303983fcb7be7e1a5e7> ND 
+/c 
+<10bf317040c23fc2eee4f57240df62f1391a1250ca71eb42052c6832a234
+04baa9e4ef1dec279a752431a80f654f5e0351e445249e6beb05a973cc41
+d8ead12d95f7556c161073e2684409ef6f29244cba09a6bb43b3bcffdfba
+d18d8daa29a3daa3e72edebd8ca6c6c1ffadc0e7cfd675d1eb71cae83aa4
+bb0d1ad30e10be4b78f720e6585f94cee8adb3f7cfca78> ND 
+/e 
+<10bf3170422f4b41880651ec3b4d2eb65a011be62466a01dda4961f1da28
+4c346a77169bc4c4a7ede011b56ed8c3d1f00f116ed11b99eb4b26ce1c6c
+5397d8f41586907ab2a423b80824b99dfa062fa0ba9e37fea1ae4a5117f6
+72d95befd94dae78a32300bbe65f34382c0e9700cfbfa7edeefaf81da1bc
+b5d10d3e54194c0dc1ac22d93bd61b9e6bbb3969e1> ND 
+/h 
+<10bf317054a23a3555fb5ead131bc59828cc7f1eacd86033cc680ee8cbd6
+7a73727285e80cbc40f01dbc40114116b796f4f49cc581dd1b7f53c5108d
+be6d1077ff4095e8abd9a2db119ca521dceefb8e4db76cb40c3c2aa5db93
+42df5f61b9bb5861f54e93f8082a054a7e07b5d2512f24d8cdb5ad0ac428
+d185c91cf0e62b83c527874a0e41499f1504cd67f9c86334> ND 
+/i 
+<10bf31705c397059959e269bc482cc232fb2cd355b1741c991d08977a1c7
+62a5e2889a63c2e040e22ffbaf41c04400cc31c3de7dcf350f3cdfb3edfa
+828dc964cb2f6eb442e0262df25f627edd720f9619db59fd5a8cd100c968
+4c5f4db9889b35c63fc8c08e> ND 
+/l 
+<10bf3170599590e4eca19c589f591b28c79c3ad915d374f9f929618cfd7b
+7292a0b167075ca805f5ad895e8e3b1ab4dbdd185639273e5baedc164de3
+0d0ee9bfd604> ND 
+/o 
+<10bf3170435d457c3b609d0dfdc745bd7c1663c0a805d91da8e9d0cc4d99
+e22f87ada7af2132f6337504f703ddd93c8cdde4699cbdaf64ef14809e56
+7a42bb836080942124ca1aef0e63f807aefc933c8563b48027e9d8f1c1e1
+8352efa85eedc9ca490791a4e46850c09204d72255ce696daee7dc1a2862
+811f44c6c89facfd801c3e6416cabfcd> ND 
+/r 
+<10bf3170599a5b3c2e2dd28b3b10b75075330d11e34ae538e91b40e1b802
+82d48b2a59637d6e097ee2f6d5ecf0c595e0fe2ca2c786a62d5a15f78248
+8110425023e201d5535dfbe489642fedd613d0fa1856971b95976bddeb41
+6a333657ac733756ce26ea5bc0c9c1685f2222cc6612850d6389e5c3f1da
+> ND 
+/s 
+<10bf317050d9b8012f166408318a0ef0c2b3fc2c4bf046f43a31a13138cb
+3edd33b1e05a71393e8603bde246c06cf021e377498e36cd112cac2862cb
+d733c3012351e466a2c60874be76f3ffb0e88de0326be4951815ceb6e2b4
+a1c764b8b4750919db41ba568a843704ee79cbe791dd797a967fc4bf780b
+33396195d9608a7596aadb157b1c31c1f97e4cad9c00804f33d10c4f9e5f
+1e6e986043994c17686677d39f7196085e4700caad44794150> ND 
+/t 
+<10bf3170524a2d224620d65b924216aad176698198f7dbdeefeee3b7e580
+1e8252c00721d9a34af4c93982914cf535dd1a9978155b129f9b67696bf0
+657d3fef2c6bfe965ee59c94b9f93fb72b6a44> ND 
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+end
+/Times-Italic findfont /Encoding get
+dup 32 /space put
+dup 69 /E put
+dup 97 /a put
+dup 99 /c put
+dup 101 /e put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 111 /o put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+pop
+%ADOEndSubsetFont
+/Times-Italic*1 
+[
+32{/.notdef}repeat /space 36{/.notdef}repeat /E 27{/.notdef}repeat /a /.notdef /c 
+/.notdef /e 2{/.notdef}repeat /h /i 2{/.notdef}repeat /l 2{/.notdef}repeat 
+/o 2{/.notdef}repeat /r /s /t 139{/.notdef}repeat
+] /Times-Italic nfnt
+/Times-Italic*1 findfont [14 0 0 -14 0 0 ]mfnt sfnt
+207.939 64.2998 mov
+(Escherichia coli) sh
+/Times-Roman*1 findfont [14 0 0 -14 0 0 ]mfnt sfnt
+299.316 64.2998 mov
+( K-12 W3110) sh
+/Times-Roman*1 findfont [10.0006 0 0 -10.0006 0 0 ]mfnt sfnt
+207.939 88.2998 mov
+(Sequence : V00338, Reed, ) sh
+/Times-Italic*1 findfont [10.0006 0 0 -10.0006 0 0 ]mfnt sfnt
+316.799 88.2998 mov
+(et al) sh
+/Times-Roman*1 findfont [10.0006 0 0 -10.0006 0 0 ]mfnt sfnt
+334.189 88.2998 mov
+(., 1982 Cell ) sh
+/Times-Bold*1 findfont [10.0006 0 0 -10.0006 0 0 ]mfnt sfnt
+383.439 88.2998 mov
+(30) sh
+/Times-Roman*1 findfont [10.0006 0 0 -10.0006 0 0 ]mfnt sfnt
+393.439 88.2998 mov
+(:627) sh
+207.939 100.3 mov
+(Structure : Harris, ) sh
+/Times-Italic*1 findfont [10.0006 0 0 -10.0006 0 0 ]mfnt sfnt
+282.439 100.3 mov
+(et al) sh
+/Times-Roman*1 findfont [10.0006 0 0 -10.0006 0 0 ]mfnt sfnt
+299.939 100.3 mov
+(., RNA \(in press\)) sh
+207.999 124.3 mov
+(Image created 10/3/00 by JWBrown) sh
+grestore % PSGState
+%ADOBeginClientInjection: EndPageContent "AI10"
+userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse

+%ADOEndClientInjection: EndPageContent "AI10"
+% page clip
+grestore
+grestore % PSGState
+Adobe_AGM_Core/AGMCORE_save get restore
+%%PageTrailer
+%ADOBeginClientInjection: PageTrailer Start "AI10"
+%ADOEndClientInjection: PageTrailer Start "AI10"
+Adobe_AGM_Image/page_trailer get exec
+Adobe_CoolType_Core/page_trailer get exec
+Adobe_AGM_Core/page_trailer get exec
+currentdict Adobe_AGM_Utils eq {end} if
+%ADOBeginClientInjection: PageTrailer End "AI10"
+%ADOEndClientInjection: PageTrailer End "AI10"
+%%Trailer
+%ADOBeginClientInjection: DocumentTrailer Start "AI10"
+%ADOEndClientInjection: DocumentTrailer Start "AI10"
+Adobe_AGM_Image/doc_trailer get exec
+Adobe_CoolType_Core/doc_trailer get exec
+Adobe_AGM_Core/doc_trailer get exec
+%ADOBeginClientInjection: DocumentTrailer End "AI10"
+%ADOEndClientInjection: DocumentTrailer End "AI10"
+%%EOF
+%AI9_PrintingDataEnd
+
+userdict /AI9_read_buffer 256 string put
+userdict begin
+/ai9_skip_data
+{
+	mark
+	{
+		currentfile AI9_read_buffer { readline } stopped
+		{
+		}
+		{
+			not
+			{
+				exit
+			} if
+			(%AI9_PrivateDataEnd) eq
+			{
+				exit
+			} if
+		} ifelse
+	} loop
+	cleartomark
+} def
+end
+userdict /ai9_skip_data get exec
+%AI9_PrivateDataBegin
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Adobe Illustrator(R) 10.0
+%%AI8_CreatorVersion: 10.0
+%%For: (Sean R Eddy) (Washington University)
+%%Title: (rnaseP-ecoli.eps)
+%%CreationDate: 3/27/03 11:44 AM
+%AI9_DataStream
+%GatkKCTec!Q)=A*"8i[BJ21MB`_sf&,;];C0"8GT(fqT`X*Oc`0I#O$'1J$5P#Bt-keGI8j?A>88QF6q1R:V(ZS-T\=R08])mRu:
+%+8tC>YJ,J=T>1<`(U*i7Z\RRc#YTPI6[:*Wna,tE+8s+Khi0QZn<qVN)HT,4I^U<<qbR7_<VuX9nac'c?b^@9c'uItp#=Nf2a;Za
+%`J`ILp#Gdrp$1XC?N5fNig]K3H)n[R^H_YTq3U-d:Ohp"7K</W?b`]rT!sbfq;&))lcY>"p\V//qWc&kdJs5,m*C0prqTXA?]8@*
+%HMqE'qbTI\Xr#QZYM8m92t`+!Z\Rl0a4Gh>ZG$%EO5FuEU]:0`hLBU[Zi0^rjnIg&>6^,r$_Hd1s7I0M&'rQCQKu:-s7(<nMs#$8
+%^92CH^O#^RTD6g+s16u]qYTe_]t_D"3"GueQo?+93G/6d`S::?4FHo<5JI*<_u8`skpp+dF+(*.U@@s at ra328\%dFOl+`hps8V%f
+%huCfjj$S.6p[e=V\%hPTnc"*F4QMd:j5UrmpJ,\`oQ?:Vi?-(+?bNCVa(8^o.A*^Qkudo]_p;+#AT"Z3ERf&S=HEBaD<:<4%i..=
+%Gs;45A#OggI[nu]^OH(WkPq+;.j7)m7so^[G@/*%YQ+F[F,fA^g2S5/hn877`I6Sa^](8MopX!`DX.)qnIpDNYJ1omELBl]^38.Y
+%p962Gn,;:u?iFF*Dr^M[VZRuirhls>b<NZ9Qg6tfRMi>Xh40LJgE2H[4iI5NL#l`9+&1A9&cK:JIQHiX9`,Ziqkr&l^NfbKB at d.>
+%%4V8O\+QflqKJ^JrRjtlSIrJ'm\ca at IGd%hqu'1#pu$ooH*lW3qYGL;@)cDuf^F;q\,P([d@]I`cf6$$?>n_]Q]JTT?XEH at J+]Z0
+%UPJd2(KgT.SDhGf0-9$LnB:JGkPY1Wa-jVIptbOW1>CEa?ZV=4J/'^$iU,s7a2=D:o_\NhM[,lk_>j5`huE?3rREoUl_i^Jj_#+U
+%YJ77ohu)Uq&'Mg_976H.+8u0(EI#tcZ,rV$r.3o.TCq:J<YNX%@ej/1+2W";I.1KloCX+9aqeJr]#.F;`V at fP\$lmG=7PWu:\O+@
+%o at 64LpXf;o?Tl*s%5Xp&rqQ$=5C)22rRK(-Is^Bh55Y7"?ZG>jiQ$HJlDqZSX+,ElnDj3U:S.Ors3B6Ra8IV3IfHl9Do\2_*^HN&
+%YJ5Ae(l\II_o'f-]Qj4BhgP*HBo^g&nEP5Do;f'%]_KPD-"hNd'I32<S)8V^A+e%.0E1Z0nA5,_mMF'W^\cUR2ns\<f?o*Fr,)>S
+%_lPNJN;Mpb8H/G.04#(Rl?_]e?S^LlT"c8[IJ)auKkrs_bBMk at _dB"EIshWr5-0f`rSke at fmc$=4TFF&dhgn(r:/a,=R2S#rYVfQ
+%EMi&7rr1C@^@dule\`L/prCo<r%[9_&-(n+^OQ0hTE"T[Rm6i<X2/MADZ02,p:S0=bN$G7aEL,eUU\>6o8bKmHL&="IE(#shnQ9H
+%H[X`-^Mpmbg\Uj0>>OrL8fm9o4ktP%ho!4elU6Fkk&#Crj79)qH[>YPVsc:2`Bt;B5$PAnrorGLr:$Bo<iEk*=\/AbE8'd\L6=cK
+%l0kdkG^/Dl*kqRK`P_I$F6n[cheMUUY5g:QYP@;8L\!N5I"+5mWGc-.s/Y>%0CI6Il)-a/4O*otJ,=QiqNh^Q8+?(qmJm/uIV2RI
+%0?'cDWI"h at f9c]h4et;j36Nt2,O[n/mB\$$r%s_tAVI at CcNn$-M4ZBqiS./+m=']PH[bnlE:87eY#oE-J3,_/\+S_7G96\@PJ8<F
+%k*S:Pk=dtElIZ1lmNDT0>^&4M%d*36Dst%3qY<)Fo*5\L[&WH:2h.g18&&C1pV2[=j4V&"Y?lYMn;*;&G9>[uOcM_Vq]7R9?higj
+%ht$/Yh`cDs;VZbOGWs10V1A+!?e0]IVh6]"jIYi'H[,:uf85.3pq5-25CZ,kWE at UAg\A75GL*q9bPAp7_NsY<*!79iN;KM[E]5(i
+%R,N>\p?A%&?Q3p.8)N0QIJ3X*H2!7NEh$e4Tn0$N]_)HrH(!]j`pTZc^&)`,KpT4&5PP^mrUsZOX?^NFGk:V(:sV'2QYCng+1Z/l
+%T.Z&Z^NUjgS%h.Gf<8Q;#P[iAp#R!brFN?c]hU]h3nj9"B at dGQ[su,nIsnu*%tTF=\teH#c[UZ%IrL4U)`Y"b!O!DkFi:hqV^m8j
+%E&S=-paJo#_\Krdd/>ARU\1fD?iBlFGL)jml1%s:j5D)0FZAfAou5[0+0PY6h>6tjrS)J%qcf+gITP)Xh8,b4o:.>FcM,l at Dm.=l
+%U;OI$"3q;KMn0uK_uKGdj*a&7qtFE)!hMO;6QG6cT3YOlWqQIDiVfAdg5e_sdt)rIOXI?FcLg26n%\>AHtn]1Dt\MC&RhjZs*,X,
+%qc3LQZ]Bk<DOj"W04Od=(]2VWanMH40<WVUZ-OKYr5gsk^@UdalR^XiV2+ql/d)(-:OVdh\+.b=K^1&3_R"IV#7cq^50VKBnJ#ft
+%PN.(qaq#:u[.sX.>fZPa0)+tH:C[03,:<![\$'`Kl#K86p>$7P_W/rqIgFlEj2;#LV`p(<4hENDoVn&0kN-T2q8n at Rh>Ni10-;b2
+%l.*g>q04:UDtW?"#5R)%k^3GjcS'KhK%iB0acAslj:1JAh6VllO67H at H/44$q/-QN&*r7;s69JE4T++X]q>?!YM@%oAK=QFoPf#7
+%L[X%;n&4[#efXn^HG''3fB;+Ch)f64eF27$e0il3'L'0j+d`)@[hIVD5B*75SbL#+!I4.V.pOO9m"<W6E:KjaZ@@8N(SkEJoJDZq
+%qmS;EBCC9d.A-%eYBRm1GM1b_[bp]Ia643YDs7&5pT3Ql'D\7TO3=;ba2=1'/tM`sO3_ioHs9k>Fg^Zcn at _bQmEbd,q0kPmpGr0T
+%\3BpUio]tglW=,UiL6BFqNk!\p/BGQj4XlX@/T]ngCIe=LFPO[]tsPR7spi_pCR.BC[o)j(q5h.I=&iskfiPrb1WA7o"rj/pESJ6
+%lYA`VEO^BO^Q7@>re2/,]pO_k4J*_:du.<%@.f?S?H[bmSq=di:WE!e#OaAsIiPc._Z[.24iS4blLd+/`<V<G5KR4iU[u#=qOSRj
+%q`VSNQhLRr5P:KF"\en,&tU`64U_*O0g>F)mB_kKof`"tHl^PI'?m(3$5r$ho=pdXI!@%)puV,!="p!@I/WX'gK.b5fDiuFMM4i7
+%pnClLI![U5lc2e+R)SU.^Mi!AYO2GknWiuih\h/19mEiY+0Y/0pkMok&I4rTLOd+Qp3o\!q8Vl-I5)e^fG09'g%>itiUL\ZpNs0>
+%%g2ZQZtkaUeVUg9n)G)G8^P!8!'.0`KWMP1rlor^lEcO/inqLsq$f=^h8=s@?LfpE*l@^JhOL0ckKTp.I.'Eu8,C'2+7JgSj-j5!
+%G^'2?P@$F\Z"J;j4.k<DhgP=^S:?"\qY:rrBCetl4bhuUoc"L$:rg8/:BssmV*oZ>R-tL]o+-H at nRs"8OWT(1Iub]OfQ]9C2qRoR
+%orB5LS%>hEH$K)R-U7Hlrd%(eL[2kH`/'HkYP@\ToC(J.=*/(0mlie^`OWbFI_Qfom0E1NSWh/6hVCEmGRm%.TguE_*VK<t>=[U5
+%ZM/'(5$#\lYQ'5%G//T('&V6S#Cb/2T<S2OGPq:9aQr!g+0Y+S#!Nsm-R8Beg\NT/O50OU#lF,J*VM]$XD9.8CjM>_5Oc,&n6m'S
+%h\$.cmGf"3IpMpNb>J;W&,jPhIU!HZF<TSq]C4YUjX?0%pdqK;BVONGD]XB*kFXHDp%?:og,C\BJ+Pt:iqnf:q-DgeaL*43-QnK5
+%h(E&[4Sq:]rqJuij,\X5L-ET!:L\'apb"l1kitD3dQ?<aDngaR.0(8nI<A]>a0_2cHZtL2s#aWK%uqtYrrHW at S%A+`a!V5md3*1i
+%>h\N4?,biE_fl7--h_q;p%d?tmpO5s*IL]Q:KZithS8jAV:^j\/fsG=(QS[nE>4FW7eL[APL(BWA<3M[K9>NR%tl1Hji?07LI1[S
+%FR?ttn9]3M+Zas=+7k(+R$8*npL5<75+1I2jR_h)qk"o#UCU]Tlr3iW+]m#o57TtTCJE!#L#q=sHoUtNAV4(PG45V+lA;#nLSTsr
+%'Do'&@H=ku3Li5SrQ)=Q^@#c1q)ClLQae&]:GJ[[O&F.]C//99A_ZBob[iHtkktd&BI/A/T1 at eJ<(lI[9ZLghhtDJOI`>LT^94m2
+%AKT[jq(*i\j&efE.3'f)ZYZluHRa<l1rjosQH"3'(s`idfIJ$pSR\bEZH'8+ at pbRtT$)C#HTm`?nB9U1/i\nDbZO"4(/?sVZHXB;
+%a at BS.&[uq:[-$u"JOWl/1/hH/hFk%8p)(<QI9Y=*V4A.Cg1E<:3bCq+aT/HFbo'$3r@%JH(n-'je2*o1DYY[h_6!=bo=!5cn8<NN
+%>@Wck884<Qc^Kl*L=u:Mp:0Ltc]+W(O6'W,Z(,#<rS3IEQXe.O<*JD(R)9PWC1ZXP:Ku!?>aD\8rJ[`;HlUqmIV_10[*E_,/hHE\
+%X)kZ.C^3>>T.:!Wp9Vtde6CalG8G91@@7O at A&?P:cAgl)>VhSPbQ\Y$*$R$UNAL#D94/%K2G<*LcW]WsAj"[.`nGI8#?J(,jX=\n
+%>h^tH at i!hUh':n--W@=(Z1l=Y`"k at Y:Q6UkdE^D,5**4\Fgc=l)>hP]p(S%(ph0$4OmU32\*L;r]]TjO=PAU?S.,"WqSkP at 2:RWC
+%qS'$Nr&j_h<6SiT6>VK/\;cAWAP=R19Fip2>Mmb3f!:nm<T_;.[UmQlX0Leu$g0X](?V&TfZ"dGjBe4G]$Ge;WnWq:r8MCL6&h>K
+%hBJlcV51P:>OH:b`f;@P'q8k.-C<?L_6%YA;EDP1YV-tMYM?ucD7$aqD8T)W"-^f.;/Y^1N$X12NAJ6q6^&bdgT\%")kGV7^3X61
+%!C*N1POC&TfniAJV1l%D[ka<<M]I:<UB_!Dh>$+mc9*;K>j'M>a>ladla`V>_iY^hX8s#N8IX6+AnV,4SoAK`>8Z<Yb?0fMa!MQY
+%k'C`d_N&gDbboEa*k7A2(-DdX86B-c>f+<qI<$)"`%:DY&9/)tL.d@"b0VnbX^aZU9GNp4l]sR6LP=:Ge89sg*X>G_N,9$ehY0-R
+%!M7jop*Cg8EpeSUghmsOY5o=E^`=9!E;@W9jP1sAL+2+m#6<CC%=R3SN[JEY,G,nb'^!gV".6O%e;C#]UPE-E8fNDiCtq/B1<[8h
+%/IV/H;EEQ=q*G)Pg8n_59arUiI"(.H]e*!T,IVtTjZ#d5_e/7;glBo=Nb<"9f!]X)k6=Gq%d1XlFc;@(L3;/b*L'F;8.(P8n<#<0
+%Yh$PU5[V[d?,EB3(!#MuT'*t(Q?@/h'AtF8m0gtldTSTlX!ZsdHhP.(`(^aCkmEf!0"($r,JTJe]lsJSLiH3@@s'W4\#(r$`u7=t
+%.e>cApbnN'jd6_U4!VWIhJH]i at G*ro1 at mi&#n0iqkIOZ"j7"Lq*m\]Zc9\+jS^ZZ,0>KI(@kIka?b)mgloX^!8!oqMG')YsH10oA
+%VX=990RiMFOEL7t"/aqtAV2cGg]IPZ9`-ogi2Scb!'6LZ'B98d>0LAB>eus?K/a^])1$.BXPD]aQXHjONtqe!a>JsooH.q%9T87?
+%E)V`VK3m>)gmFPC at 1QI#?JdKo=;HDg+2]Ee;;bhWL.2RonFsr=Z%u]_%KQqE(sB at ZK[-erL7p;QQm(nA`,:s\MF$Wgd#)m_[tF5%
+%ht&<?[t)A82*4hq$4`OC/*q0p(biDAbasJY at T^Q4C>`k.,G(`?N&-%a5erEYbd7QUpWBIC#qZR%/63a0WL6;4JR^8*Z&D2A)1t&4
+%o`uOilTG$`GSB0o6]LOM`[:njS<;+I\/bDg=2"\\_!"n`d'O_MRu8HVoY)]7 at U`=b(eik#=R+!e7KocJiAaj=q(\0;P at ED7;J$e9
+%7\\nin?%Bu^)5pkD(])L&dTX4oEOkAm=^$#K_N2O5)>hCo8/)&7BC<@""jU7!Jh,=W;N7K(P#]mrP6uA0Q%9>"<EA0?2/kYDTfaq
+%DAm?O=t5i$NjT>qfsm9R!4M&_5gI`Tg:<9YbR15ER4sIp;^qK>:'@hli?<?&*BRO"/a'[o&`O*9"!qlL8Y=65ak&X^kfc+02>:\K
+%.r]d(5R<10,EZMP$^7-S%?mI6p*Tdu&d/dn/OQ$PHi`EdJAlDF8d"e>PB40F+q?`]+=F(?-uH:j8-?'I=l=pLX=6GjlERG^$7m^r
+%XsqpZ=(%_llbodmMaiA9_A9YFcCK1bFTV+ML@@0jB-7]:gFscp`XtiRFg&C>!b&kREE-Z_!7MhG%;nuG(>'`H_Lu!883.DpYO';)
+%&D0GnB,ZoYAbd>Ke-gn]P;@YBE!nB::',uYPh*Q6>k`bSEf6:q#-oP1)db[_%ifg79ZS:9RdJm*!ldOE,)?Cb*O)!#42rE\9FMP0
+%Qgh)<e3Tnl%oI/Y["]D+c%JrK]RY#I_8Yr?_/OR1>rm3]^c!aQ1U(jF+O>'1-pcuQ']O?=WM)?T/+.PBX?a:lhWGa"$=WCVhk1Ul
+%"q7`=`sG+,J9$26Uj[au0VSU^Ws=$&J;V*N-k`e:h*XM1`X,%lF5>e)K6c+o0NlRJ<<md,jfRO9=<1?kj1S)K'6Ag]_A)K_#+oi.
+%J>mP>!=so8oQ1jg(42#<Mbc]A3h3s;054"SaTlTcQt?$t6\^PU\!)AsHE9rK^<\jL%XR,^nA6D.VQ(1B6l]UGFP4A/E]m#+`"ttf
+%+BG$gJk?;Q\_@*g?@+#pXY:bbK'5XjN&*"-5>V^r90-G]8\MM`n9&\2'C(+?$3?QN,.nmQ<=Q]F%D]_1FZhfVR<m>^!?N)<JS>.%
+%Li[4X5`,A75/Lrc-1<6?oZ!$6gu5o2]3#BT!uZ\Vh=)rMV8iU+6EK4Q=#F5CV214J8H(*ILlZCji:@04KLnjhq"9PMG0CBf#&nh3
+%>KBqh_Zr5cAj>iXT]'eY8u<-i!i:D[T<QLZjpoQ(fmRJs$FdZ<E8TkFN14j@"_!$kEqfl(U)i2RT[sJqm>U?;q<88!'AsnPXu`6c
+%8cG9#[4hoEEsFWHdKMQrJT,\SjB9d_&eU4>O5T)XCFTFL4LclJ!$Z*s_/\][SAMEJL2ui/1'#?IONYkm_%.)$-S?E*^S;bf;&?sd
+%NV>#s3NSl)KGA at 3-]G_`D6o6eq.Aaf$'2#,W'BJ(L at GbNo?cb6LdX`I*VpCILXmV at O;,2gUBi%mM9C^JW'D3kM*bZ>&9gUp99-lT
+%,<39-/Q^jPMM*LsQK7'&:%#Ji/dRDn_Cp:lOTP#Kcc"SX2`%]QlAL`Sg]>!MqsK,JPh*-W"=<-uh?'-%mYVPl%+GFgIM*7bga9,>
+%'-dPr7hcqX\nt!j4[SX.,`El/9-V%04V?F'_STGsA%:\.2M9ONV*jQ6E3=mK#o//m>\aMYg&\]n*J7KhbWqLj&u]6?Lf#R(#3a*N
+%KZY9C(`Wi=^J04[7*6s/**qXnaHfS#n&hP_3!Nd\;XOV%7BgeR5)Vm@>Yf&A)Kp``5\e:F]cb#jUI\IgF+qV-7[R=kN0n&k(%WsU
+%iq$8BKQH(V#a0gbah/dI35c/uJR/&d^p2L[R=ZR1^fh63*KtOEn:X&+6>LP0?(m8N6Hrd0=9h[,eYJc\X8unU!hs7m'mBBl^mm[h
+%"c<kUIJ>LD:S%_tU<Lu<!WOM-@';sL6P7BC4[MWg$3sZ=;2(Xf'ul3)(HcTOlo8ErIM)&aH,d7#pOqR]DQ6(?BQ-<lme^%Do,QVp
+%JTXO'Y(H(pV!gCMUd8PuqOts_(N+^fG6lXM.*"_m1#i/<@=CTV^4!k8 at JaKL+'-<r'#YG'D0LHf.(Cc-Kd7jgjlNu]La%G-8-.kl
+%<47K?JCWTNfHSZCVji?_5]InL&F:AI;dCV;>JX:[-TjZBT8j8Gn#M>7i20p<cq)TEE->q<#TrX*`(LKVBLhu0&?tX5<J$)pVK19^
+%'uX2pP+Y!@&@U%2'1=2"'5$*`lEL*oM$8W+Uc2BYpl8K2^WIkZKhQQI)$b=3G)R$CA^1TFaq;iAYOf26F:qrBfRgYS/OgV=YC,G6
+%4&h$o#p5>epP[BB^]T/sWW>A'#BCF\$ihLq35FJK>^'[Sap-,Re6q6dYX3d[C7&"`?7rS0EJ:lEBIXo%2rPl at 3e8_kVTOdbj<G[2
+%Nrp-lCW at +STpJb+J.RAo#0,Rdi$ajWMm5VX3e0X5@"pu:1>jGlb5mS&7VFa$"e8Jn2ge\8]#1.JKqKjDN.Ka[>`j^G=)G6[b,""=
+%*F](g&*]gh\I!E^Zea!!>gkr^/1#mf7?nJTL]@]M7L.)BNKa7WWUQDblNdkgF$XXuh0@\B5iKjO$![0 at Q]OLYb_N\:XbSZCGWF^j
+%3Phnnj'3:pBqJ(Mi-Zde'ZpRu6m!QB_1r:0%F*7J2HTrH%h1*YV>XG6(9ZA68EeV_;Shi/B/n;9#020(^*nB%'Z#`hE&JgYH%JH#
+%GZ3(3JJHPJ]-aP1I99rk%Z-3%jsdngfJ%aU9^OGV,j6K.*ID!6*$o!f'+%)ih"]+!EuB@<KmN0l5R3-T7KiMN:=+Ts6B at LM9Tkm*
+%*'>g?+YIgm(It-ubUX0lGK#IJXc&u1e;,+Y1GOD+g]1EOcGhHpm^pXDL]Jb=65SV5382BgM/=V:NscKT,?u<2O=j'6Uas@>#pL5H
+%:38]YDR0>d7#(+bEBuO#(iLPDK1cM#8]2tl6G&qM<>XfOqWO:(=!=+g<#cfi_u#6#"7JKAQ'D(anPpKQae<QQ<2SSG;8Jf[QNp2+
+%^5lA]X!/RXAaicS&H[5cGnFF?C9=Ybgou!e_N&OGCZ^5^,82O@<"g<dNm(0%5X)`g-3nYk at mf_)[\:D at FR'N7/8RtHidpkk^[5\=
+%4NBm$^gi(a(XNgs,rTG?&]/e&6o>1+&PC:AR,Sj6hcjtgKXep.p&tHR><uZ at 0d2CtG"+V>%oCM$k<gl)!t09\,@/]IG`0R>Pe-:6
+%+VI$Z_j0>kD89QAoeLN74)Y*VQdUHm#d_K<M10DJkgUK-9/fBr`#h>KLHX41ia+8"j0j(I5lj=-&>FnR'1&\a)=X[ZM7I:/Do*/2
+%#mDplm3?]b8M1pD(J,PXh6h[X!CL'PU_Qd!%"h,&qbb]I(cl`O at ."/!fAR8^#RbSuEI6mhJg at o;q?g#Nk])E,6=HQIKH7imJI"7Y
+%H7Pc+%:J1'g!Xc@\Lgtk%"?$'TH1fW4NC:'/VFEWH5R(X\qX(D3^BE5:72NT#)!n5\1W>$U#MH5i\GpIi^X7p0o5m42JXIDpY[X'
+%1ntbA5mK57Q%<Oh'`cL#bU%?7*0:2?E>3Y+$qBD0S\a\3(<)X at 5YM9#RP4rLB%iQY/?f>SP;^Hd?qUU3af\LX1;I/H85jQN&W7Y!
+%#1Wm2Ye3CJ]]#(dAj3OF/l"^87or_;l'#N3-PCD1]8.$NF>%u\h/.oh+:4E$9PT5kUka;Im`\a-Gl,X6G:8?a%&)D&0C[g5o`:".
+%PX^7VT*7bT>Ip&i0aip[QR'klagMLcE+@*<1n4ok"<\&gG[,'GaG&cocGAth`T+FXh>t?t/O at f\!\h^#X;k]KK.?q1Dh4Pe;4GAK
+%Ck7ETEq+Om$=1L#+LSWbV/Jnq'"][:5hY:7$Ff3`"QR^J%icXiHS1!/'D_^G6)FZ?G[6&%5b-2\-NoO;SHH?U4:nA#:^"bMY:*A)
+%bVd7_i;'PG+I*7tLeNI&?UAe,"$n72L%%g`4J==QF"W0.0KOZl at sbLS#Y<V>H#6mIXW=llp$@@fEEUgL1YD,T5lk!Ao/iC&@t_`/
+%G`rE*gr;OFD4mkJ!/*%p[6\N"4>;BLJnf>b"Y..uX<V_;l,6QK,C&k>o#q<[+acZA3f;\Z/]8<cA=XH`LDN5]K6/#1KtO1>i@"^`
+%/qSFo&(3*CEf%Ef at jTc:baZa8EIE]QBP7D62+pbo\?)W.=(MjRfSop@%^(5Uc#&8'aJe,g]FO.jlrG88O1:c!%mu9X3!GLi[_\]N
+%\6j$%DVPep"MCPU<;2L5Ru.=#e.EGI":ds0PDSp?oIrInqgr<&B`i*gYDVHO7#b#G6K3U)JL4%t2q;nn(K;!`/tHCA-YrkI8"@L)
+%3k5V#TA9NmKKMp5I^C=F\@li>Qbm`+n13XP'*0fmHlo*%N=sBX,RADu3_FY/6#d;-$.j-I<T+ at V%P37:m"2P.+4`MYhVK05T_?Su
+%K=d;AOc^Mm%?(+cDBNtj%8tJZ'9]StNSA9\HsmGfL!]E\!&U?S4.-6C9Yc7f^sO:i"(o$X1E\D)4pEE3,o3;-PK8sM[FINu5g_BM
+%Xget\7(?)/LhEjm?MiQ38OOuEdYm/6@*3G%2\q0)S(>KV\.K#R?Q%&(nd0jY+QOmQ&@htXm"e)hduAHO'8Uol[muBY*R!/?Ooo4t
+%c#U<"ZL2t,6%!g/r]i.*_Aj'&^AnM$"L_/5U$t^h#.&hB7I4K)UO&YXM90-[/q`$@WsdE%,<?-;7h-C\7hjb:C`0WVe:O;J;]- at V
+%>cOb)Un!SRehK,9C'7^4L\WK=jap'WAW6H'3n(4>Q!cF:n$Wg_>X0oM_r at p@B'@#jo"t&35DC#F.\PT1o at 81i_6c)16T]',^(2$O
+%2hn6BbJ.;*"k/:[YrdY.-,P0S%5U7m`nd/9bcJD7J*l_+cdNE-bj#<p\4N(F>/o37l%CFddH.SN+AL3I:6+*3r!IE[AkG&'Vg=%h
+%1fmg at m(Am;7bPfhHWf81E%W]*ce[lo7_(Fe!?d<m`iaqU<O8Bu!*ur5#D#N+Anjpe\K<MpH$+bgh(e[8(K:A?B$^8tS3oFb0Ek'^
+%m"RAB<C'V9#cEH@!'a\up6T1m!"feXFc$1[R`g:V)_SfaaMW^3L+u6&b]?$W6PgXg!'L"-jVfU7F#6+#H(;fZ1c6QJ/=;Y74%%kl
+%;Z`%8!^Y0OXR*U9LK"@@lc]A`"@B<^#A#M&EgF9WKUW0L&!6fJEPl?['^Tf^2E1PuEJ,GK(HRHA$Lnu&\,fB<r.m3A2k]\-3X-B4
+%esAP%phq93Y1\Ne0_ak at 2#KYY$iH]IK>[t7C1[P`cPV_&],n@::`:>c2AdU86(&b8GTS))ZB4G8!Peuk,t`;93"Dg>."DO(_bdRV
+%*[![n')`8ie-%RX@)-"@*?g-pOubF$2di.Zc3=Uu0\4Dj&;St7iWc+6Qt;$o6]*WH">;S1!-O804]c!QfbMC06U>qaafW_*KE`)F
+%P5^"bc[m]s$aWr^GG09!k8VPVJO3Ur72*:G38JrBPm509%N7Xm-B<d^N.>#8i at rN16%Vh*5M&[&$`d7s'TPP9KcT8Eb_7 at Z+X>]Q
+%WF3lgd(<\1+p_gk`oM<uD$_Q%<-RaTYX$uGY5L,W<k?1r`M0Ko$:Nb\lS:H:SKmZ"IWf7H&e5*6ir9BRcnHTL$%BVK%i_*mJ/WHS
+%'YjOq0tP]V5rAq&5 at QZ-oU;<:"q,X_GeMTN[X2b_,/*O&-.*^+QmX$o$\8WN%Iq;Ji=<C?d"u_rh9RDL7X.'k^:HGQCc at P9b'#AM
+%JS64<W5P(,aO_#JGA./dB7j$keM/_C!=CLI^ft'J`8FNB$RSAKj:rJcSLcY)Xp)9[r9YlQj%aS[YAD8-0\Sm54df+V#nP'(C4jsG
+%KhmX8*R,#[,P2$B:g?>cgL:o"c^uKs/PsY/WRgA>#[Ys'A[@c^jMah%%2gs.[i5 at J<,Q4#01Z2++;;\)5\W)-!/IQAXqGctV,'t5
+%$hirH=N_ZR#e3C[i.BXHZ34]ij,>?R@[PMQaGGi`OiFfCHL5h(ME at AZ$f9/'@91jbgo9fV35BZYhr-nYEi]b\b(*k9e2lHGDkiOn
+%.3$d+l"u&lQK7Gf3=?E6qLI_IQ\j at bea*<E[i:sE=b[@5`5J3*XN+!e\:E>n`0,c+8LACV[g<?e8>llQXf(Ji'u&Wlp5oid+81qA
+%`Y7A7It8fr`F;;=F,:CMJ?1$hHappG)A05PE=/3:(l,N^Je]C[L06eI!<[D8W$u#/J<]R04;ge23?D]uO!&p_Rs5*5'3oH@"!KQ=
+%e'0ot#IMDR@*t@\+?1RSWZ1XOk$08P's9>e4h2TV4Eco%Jm2VmQj6-G(^N5(!'`<:#]>JI_,"HG$kmj9]B_JuY;f3N>7dFZ))AJc
+%'%>gV!6C)T at idobkh=SnoA,[62c.&#oXW_?HkX\q12CJBQlPOmAV&+n'#G4`2[o<;U+$\QEYNBpI)*!S-.'NN$TP8\ltJ3XTEP$"
+%^Q1dq]WX*cFX7sj3]jp^!4tb5iQi)_J.RA#8+RC__\OD<IV<lQSR;l^\^Io?P.Jdp&#mH7A[oD1)FX$r!>KMI%/bdi-PA+PBJ)ss
+%&FF at LFp.a&U)(5Rg#7'M-a'sm]UKd#>d0&,kdL_9!HiHB$RlfD;&hi<!Z\!Q+%S at C1hPWEa!ahLI:fE!<%Tq,?OUOBX;<[`\EGp-
+%irULX"\'!&*k*.5N1Wj?WbU;8:g8)*ESDc<=O/nqIH];$%UIt/-Hm%gH,#V[h$lHY6id<!&aQ_Se7hEXS_,E&Y+$^"VGZ3RI)Xo9
+%=81?tM;VPpKEnW9=05>^T:q/c2!/`!?9p5!.GV$kaJ:-ASFHf:4K>I8Y)XT;L'F`FCSgKQ7kuaH1C$`q/WdeHba^8Oqo#5gl8SHV
+%<\PK%3_P)]SuTkB^d4:92(m7.*O`7rKuQ..e^uq<Et,%Z&)\ak+1E>U0]Po@)AV*E$16P;`SE+1+92W6gG*@8;j`j^RM^e/aFeOY
+%.Df]j(*m".9EYN7#hNJAETKOs+rWWG98&B>"^Or/#\E=Bi6&m+:R#Za7]];AMI7c+i,C'K(WsNX6pJ0_nmlKAbIdj9M/PaFb22+0
+%7)2Lg<kr+1E-%Ak3OQ]6&ULup4:\1RDQFPls3T1[QXrl?RDt30j)m=@.`+%"E"p/?Q]$,*6[i9O^Mk?j];S:H_7jkUkTn&#9k>!)
+%4)kGM0o!O+\G-46bj?#B\.A]j=%*[\`8W?a]Qu#L\l,'F<riGGqZI]$ipE#`L<2btYuF*o,j`U]ba?:O[\Yc&!(Q-PM-56q"$j\A
+%B.-/M,F6_n\]&-Zd$VBq`-;nDEH(;B^d/BJ>6N8[V?^G8LMQ(a?caP'_SV<8%sJ\m&pt"AR&<5;CkGA("l1`@[]=.a)'bPF0ht98
+%WFc:UmXi4dM\aRV@/MG/:0c+_5OQ<SG/&q/Vh;\G/t`:J89&k`3miZ%;T!LTbLQu;].;<fF>eb9':HDlb4QH-ZBj8MLOc.-,M9X:
+%?+M at 9mX.,,1NSQZM]n`Q%7XWT"5GGH_7d?qCZ<:Xr%PKO-C+\e4HR!"$>^#W$+&d;&Z?R$=mcZOSBNdCEoG3Z`?=7=l894Hg]:dR
+%&YN1-&2Sjm,QOXmM&E)c;]!?fJ[6<u at c'e"h8FHBFtFutP;h8;:N>>!C5!oXr:U8+;JU6PB(a;ZbV$$#B#A-JLTOQ4)\9.S.I?>A
+%n/!lDY`dhT?q=;;Q\[j\Um[!I((r*NK!83u`tmUfjTPbgGBC@"YOBALc4Wil#)pAD,#<B+Mm/H%FbO6uGbmg=j9i"4FJ<e;3f_:L
+%9O8P'_<qu&[#)Ft$!au1.!BX7[dL:Rp at AKrYaV4NRM)jD%&.?A,aa734<P?tZ(R1%f>. at uiJiA?>JM7:B-u?<\>4.3mLH^6W\J#S
+%7_?*+E>qks1N1<[!!8,T3c<0>,`)PAM8Z?!'*L[X*\(bUXgenG$])gbcP?bJG=*^S6GSO@&iPIX\jcla*E_O<HjF1'cO<O!CnX"P
+%cnX+*q5hhofR5:+%J#OZD)[iu%[_)%3qWG?"[h)qiJ2X[A*Ci"^%\;IK6XsZpd-p`RB4[je12[Z>)=!*(OR""Ok at G`Tt!RC.0+4f
+%FeWNph<d#NZ$45#a&n5RTIu%d,^2BP#GQqZhS$J+#MO+aKKsFJ`du2_V+&^#(U]5GY.5ZDi-?/#`%/F?9X't'c-E)r@>0[qhb\[,
+%!4&4>a+//nrJ"oQ0>JWc>N!7Xo;3g".:h:+`d*<u%MLT+8VL2?^`B]i*s^_^94=25pJ-Bmn@;/C'4Pc.('A___f3KGn_+>f,`'#K
+%LH;Oi1_C-]9WZWYY$>F+7G-1mFN>GrT$Uk;q1K'_"oLG*=ciBk%c$Di*<tX77%Ogaqgf"X at UReZZR#`E\X$Q'QS>t8,L4#qVlA9U
+%m^Cur?q!(NaIcY#adFQimBkTA_,F's79uFF9EO'+"MT2P^s*/?&SR#A>un[Doo\>U&6:`2Ylc\V>K.?$J)EN.a:'t+Xh#J6?5o$3
+%R^*!s$eNrP1P[87Nl^l9d!=q4fI\>!#`@7Jrl%uFiY&W=#Ze+O<$.=s-H8.Lb0:P9:^C9Wg$E<_Nl/eXoDhqX8=>Tg]0+9dkNGB,
+%K(pQP!-&F$k_kcuA%G<[R1I/sM at 2Np[, at N6'Tc14!t&:+<t^;#'_!a5\s]^Pej29`I"kWUqp6B?bkD59"GFWp[8#e&2pi8rDR5R%
+%r%moOIdWToFP/c\A-'WdbVZa`XLKDPU3SR:/n(eWSO:4_kVoW2mr7?nS#:@;hlc-NQ5.jek`_k"]]'Y4 at J2:8H8WkW;/W)CREWc'
+%f2B[R,6?>6)I8lPAW(n=.(C;t"h. at qa/'H*Kg;s.b=%Hn<^I1LRKb+srWR at G%ml^XEpslW. at dR5RE?R#^ucifN\#uA\RtEdBeC`p
+%Mu_-O(T7r?"f=Q`TWX@\JAgNr0b<jpM%RZ at -SlnMiAC.0'AeO/6imT!p`o>CX)ENiUq:+lr(oG'MqRKR*i=-fRmd,X_Bn=O/\c1U
+%1VhOHT*JMq'k'Ds3*$'BBN0`f at V_hU+<fp(0pnSMqBD4;*`I4/X<u42:V6F)Ht+3ob`.25HJC/JVV'mp5\*ss-rW!/^rfa'JSnjI
+%R$gktD\rI`kfQX(72WHr=Drh5>FrhO@)2h"<f#FG(LO9@%98k%,pMj[#:#HFS=nFc=6##!MVoA!WuPbr4_/AJ[L,$4D;_U+d=`D*
+%f!^.bm;A&rZ,@)=/26/6`6X`/R0 at Iu:mrC[A;2Q\(IJZH`g)7EU9uSp>u$1_F at c<j2lO[S6AMsQVhr>i:r8c=4Yj9SrE*;_#R/;p
+%be[b7,^qBXq;FA(McXn,0A:E,/pq-7FhJC[?k=4ONTloDem-nI:PcD/iJY2R+.n`n!g/>:+k8>E-%lF3jbc1EL6)jH&e<1k7 at Pp!
+%PgrJS5R,^ql[c:J^tYQ53F]$0%9UjK5iS/_*<Wse$ZjLMDD at W)f+l"%qHi92h'tua1=>5hPmMtQLJt\f!q3.$LY'[FJqM2A+B6_+
+%9.[DS<McYr/5%\9hhhVG(",2"Dfg-L\gb at G'e^pS_.?Ij;Z@/m9c_-"Q<g*/XGK!bV'%qDGd#'"mNV+33Dk>Z,!fHeEeP)S$3D-7
+%M<@,dJ-`(s$`7]Uk$5Lmd:M:l?8_0h\:anfboWTDX;";Ccs0NU4k!+e7Qd;WDXbfEi.RKc>cjt/AfX.oQD:tT4A7"fGY91;\D8 at 6
+%cE+#,DAfEj191f_!1Sgi?jMRt"m1_^<8;S(5X5e\)1&AdRG`H8B4Cq]*$5je/AWSqE-hWHQklSpO:2R&cliL8OO9RYIQpO-O621,
+%HlG0QXFjr4eqD5H>!'_`N@:H=`lZqDatRA$,kEnK1?c7Bfb`u+FpLZT0)qXO?%cY+YJfjjbgM$B+k!/h*?(l28:4sgqef6q%-Cr\
+%P6$9- at 03rR%k97(iLpEU1Ebu*[Nu+l[g0#ANkhl%IIau*<(o7i<0!rts&tL:j77uDr)hQ$oatq\ASdcI/g^dt1sf at PN/P=5<a7DL
+%<b at c]U=t=Q_X*IZr$=092NZ58fAOj<lmb&[L)WF/QmAd\cBR:Zm?Ae+rW-^!'R@*Rg0'5g)[tfgP&BD(.]P)p^_YaBA0M<p=#oZr
+%2ichiJI?q*?us)UpEnmi.S"c$P^9HDP(C!F.`bkbjr0Yd"c&GeV3Ss['t]*eYN*3=AphoqCfG43f">7QNs+<B/`*l^d@;te1.7L^
+%+_of!>pK%M3YRsK`UXWUWQUamW)slEq+R7c4pc7Di>/^=ZAP'XBq?iFZ#LoiOD5LX;3f$P-AkF[O"LJ$8;pOiK^^.^/:l1#FWN/Q
+%Q?J^b?h-[>"?-fiF%i`RlmB-MPf0NYdjTcM<'fKs,oW[M=8\)j6*!juD?d5Gm8cd=\msi'JKeU=p<DtKPs/<.+u!XEiOic1n?`t\
+%*8i*og+J(kQ85^jEI27"b:$UpW+P,%U,-chpGjSs#J>3Rhh:^a;T3A<m9)fK(UkaLo"UTNS-I%s(dm)JL]Nc.J3nil0Sp%e4?JRF
+%>$kg268fVkT,uc'WjlCOBE`_)h2%B at rjLCt@RK>l!N`KG\ATN#&;OOoos=o7FX at Kgjc2$bM/e.a+\reC?M;WK9e3D1g'Yi%6=RY4
+%d;.!Q4Ta;7>!tCR[ZiK(b$<kj_mM7OXerr%@ui<iXq6!AjMD66c+QF%:NstNS%/XFF-p6fJ?mJZe=%M;+S_*S+Ilq1GqTOf;g?XD
+%)]G$C4$a1oQZ[Bcl[uFGY7-acHZ[I!F2cM.==n-.[!UY+Fh+jG\7jWp'J8_'I8n]ADN2)GT,t;ETEhB;=aZc*^0E2\gg?)"bE-5i
+%)=V$UL#`kf9n<bum5<O']2cj16)gl<G)5L2\B_qB%jlk.%b3":(n9X+k@*2Cq1e+-_M=6S=C`F+$fiaO)m+oB!2uc]/nTRtbcXRM
+%6F30*M=I/+aF_84aFL&'Z4f/TbV3K5r,+d/Sn4IGR+2gLHl]"?pl/t?=o^t[q,NFe$.?rf;uU3+pu97?JRs%:0]Ill\/nT at K]^ik
+%g5(B\g][IfI?,\)ck*QQk at fenPa+6b'?a*X^9_<G(8ncM;CpGcDPP'`p4/)@.tj$U!2kJ`A'!1el, at 3UV<++ddd2d7o at Qg*,4#\o
+%]3IC[?pu&:1hP?X!14gpHG"9cBb/*I8S4'#l-.\W)TZ0t$[NYC9[>k;f+rQjF>35M)$1UJ^q06!JRldC3_#s4[DQRh%@;'k:)aIu
+%-64V7J^g4?2 at nsMn];fh>FS3L"?i^h35ai/4YFWHe)N.$d2F6&a<4]4OZQ>T[t&uhL]lI at qWQp^e*<fnS2:j!/(>E9]]!jDi&7`4
+%l74IO^g'Wc)i_sU!2iC\[B.PhBaA6$>dYDB"]Vn'NJl?2S/Z`][MRFcIOt?Ui3?oN34J0P:"L`d>&LR%?AT%oZg%Po5N,cc-4l,T
+%mHNi(le,"6OZFE\Q8@`Lk2Wm`XbZ"K?l4c3JYAI.@@q2r<JGZJ%&@/V/d[1_R[.D+'YGruAp)X^D50\)A&aC&?>pP3$(.7?ZiJ_V
+%i:0ZmJFls*p09)]k9>!NYQp=+Plu0<C'%X'Be/Aar*4'&1rG$&Q2,%\*+!-s[qh7j+HOB5/('+QYGS"R6W/Zf,'YTg_Qd-e at lCWP
+%;s6(`\)Cmb^7,anWIkjYQn\XMVu[(]Cb_"(,W.acH8uD<DL&=J]t::kjMq5$bd5F4E-M!]k;X@^(Q=/SNSZQZL4F5\g'gN5MMGNL
+%RA)DGh)jWJ.s.c^Tj:emBE<FP!Ns5WFqqS6blauqgWaTu-qE3;c.1ZgPEG*%]K9Sa5nJgT1?$f2E)YBia.3UP:BWLAEk!?sB:U at Y
+%TOjcgh=O2=K at ."D\m^)hlgOPWY`AkVWV-umZ5E@?J#Fua^oY[YaA63[E6XVd#AgBeOj+XrF2!#9ilVPcE6"ofYI$]!T`>U:(#o at C
+%j,+']]XYA$NBe6lEC.`5TJ;CYpm[1mdR&$KOu7:#2U/$`9#fr7""k'f\Pdp.!4OW/:DhL,-W(g0N%*t9E;e#r=<$"f-a8rT,5kuh
+%jc7Q9J/hn[4`4+^2Q-F5J36)$n2, at 6C@P7:lc6@==k,C"@)T##Z0BbM=I4$pXi*CX(e;Ut8#R/i at T*gb))fBG`%(nl+CV\#Qc$T]
+%$+?cg0Q(7HD6Y^_E4E*;>7j!%TIZS`A at t?94En8I at Bmd4;#&/#h4guP6\>[%W2>soUWioG:SPJ1114)rMAC4j?pLs.R8"dZh3^"'
+%CtM?hEJ'BHMi5WbrQAp_VsA>g_#^uK\.[,tVm@$Iguo1,4=orDahqR"O;Qsc:U"dNSRm3MQa^8fIZQr$]4N`jHQS!Jm^BuQT''s.
+%G^0=`E>jS1\Ai6k89_hFFE=JOH"9+_0#4/qMH7d,^(D"qb&Ugf.;G/W%Fq.-;/)rrrh$$$D>9%FI9\\PlH;\b0Olc>p=`)s/-^$n
+%P at EenK\9W8JDrhHXCgF#d1rC7oiU<TKDUQTK40\.ROr%VGu#3.UK=?D3Y7Z5d:h+q9hUH8]UI&!fOJm2 at Csd%7b>$JQE1VbmQaGK
+%Q at 3e^5#$<^#DuM^<Uf'$&j--rlRO2b@"K3Vg?hX:8a90QcA72Fs2E6#8.,G$]kXEa]/hORh$/90lG-1b#V(`bYQ^-]c;ep4G(HU(
+%RFb:/"J(^*g[Uqrh9t\dJsnL50:A(BETb55+ICh`gF$)sQ8d_I%]ek.bbC[3j;>!p3SjM at Fc/D=cFO[L=KS47JWWN/7^Z5!,Cje$
+%c)&s4<Qma%_+e$'7Z_QD(=r[2!,^Wume``jn<"(476r(,+A?[-&2n?<,*A>7R9aMUk2^G1nh=n#5qkUX0,u_6aGN*R,T$j8pTW'e
+%N(FBVN0;hp0?he5[XcIJ%Hs&RZ)E9XpRPAIO3C[+HSS\.ka"E,!0ib?J6D!r-4SC]i!X]Q#ri)F';CMN'42r\_ZcGAc.KhZp2\\]
+%0.*eG%SqU"=MEH+cXr%OJRs&/L82Z[b\9d_lnU9d=:lp_e-qs99-h!1d^cdpFqV#fah)or2NY-SZJ"IF>?OWc.5ou`E#0('>(JBP
+%07XQKq\Y<$l8'&h+2#qDUT1Rj-1L?9mg[-`]!B:DpXO^X!;=(YQ\[(Xf49f-Jd]]gV.TjdN>8[-eVlT-q5PSHG[DV[*lFR$DI_<h
+%"F=8UYMH'-cpL'DZ^,jhCpnK:Lpq)(O%D!$qs9'pCp#$p,Jdf3JgG#"!d&0>a'-'&,T>BW\%$[*K$\J6&.f`sW"amW6RL"[H2+BW
+%AD7;'>H2*Tf[Fi_1n&-Bbn7>q8.:fO5ik^TNUF3rc(_>8TF8i'bq7):#!*#pK_buhiWV>b/f"n,Y*_[n;F61Wm34LI/'!BhaGOj$
+%&L6*`^6*@#\XA8[\>F))1L)@KG'd(8AQQm3\6LK!KGrUe\34Gf/7kKN1O7'dLhtX)'A'>jN:%ipbns3-`,I*2`^A:6bVVb2&(aji
+%S%"3kdnk&O"ES;0j]ZRnZf5`ng0?pJD'i7gVls0/]!\/(\=5u;-`qA:Z/&\pC_;b'dU]YMQ-or- at jP(WqaOg"d5VWq0Xf5\-AJt#
+%VV=g_6$:hTQ=t#cjU_('iK%2GkB8Ep6)G6<QkD;7>q7b<#4`70F.KY)&rkZH`K>fO^rDio+OQJDe!4-!"NV[kQ#:S6mEkos$J0$d
+%lM5%EVeE)P$+ojGB]!=E_o:+:E(7`r*GeL*1E:02q0$Pr9f4cdG;VjLrE?SJh9tPRP$?ROf^,>C!l"jT[^dDGC!RM(i<Ql!g]T]L
+%(ma\"bh5/a?!Y^'];nl:eHp3-!,[o\UrgPKW!k(NAZAkHIAYrAf\0fN]m3OQALK_V#NrPXV][CnH1HVVDY+ptoS"53GA1Sf.V:5h
+%@5t#3Fi#*e'Y_Xb>V#,mCL58CZ7gg_FpUkFLg`R,#\S`Z5`Jhq8ut`5A at e)@fRPF4g_e'=L7$WA#b-A0\It6K7*qVGo*C+%T]alp
+%[YtD\"L0P][#I\Ai%/+s!rWh6baY!.&dSg?$krm>Aan(f%pH$QGG@^09"o>.K<&LueJ%@Z/KjnlGc/eT(meGM!-P>bn"r3$b8).t
+%2)YiCNnc353mH8kR'QZ^G+0Z[)i6/oh>aqM%-LWYlgcr4J-T=J3,Q&<"-/5k=T`NX._;pt8Ah\T<ne)r?\8`mEHU`dC,d.iJ98_c
+%`2'o:Z6W)UZ5)CJ^"q6V<r(ccq._9d,8E1%BX5F?bT&:E;8\j\2CQ at NLJ6?F.&D2F%7kDZD^S^$mg`fNIl/!@+Ek$%,nMUG+Dbk3
+%<5 at ne0o(U5rf,,tgdZ'GT\tFk[\4t*`<K,u%'Dluf/k?''jU1,50G\,g6'XnRkq#<*?,=mF$k;c@:AT?BiC%$]H>7l;7JGM_e%IL
+%brV[d1e;6&Cm^r>$e$.(`jf]f)KN;@5hgUO\@<Pi^cb!T_JaTk`(q_%eUf=kV-#WW_hOGZo0=`<dM"MHfo+'%;EINsN,r4p2e%R`
+%&;b8$-H5r?USHP.#$V(VcYF'M['cCVQIc)Rf'lpG6VKh!H>Qi76;/(0o\iNr3j6nGYp4u\T\0KNghg'Mfars9SCOd7)p#Mi<Nm7U
+%-9V;bLWDr<_!5l7ci+C_GedQr12 at ub6ccuU<+4msm&Yo*'K[\V])q88eq&>VGeXb9e<V%M^1:4T!mW5\RR1?-qLn]u,;=u5gu5<d
+%b2SREj2!lsDL1%F!Hr0]1Lc<i5TgHs\;OB!i2"89V:`!m/OFX4+8"QUG:OO+%'k,3*;UjW">8=DhIN+W\8RHq)m9h@)Q9r.o3a5S
+%T:Zu[_SqLT"X$"lIIH8%%70Cnmi^!uo/'kep(g?VA0QAD':pun5PE&!XLbqNfNQ#C<a;Vpfk_b>hKFn\g2P`7c!8't7SfpGh%\uY
+%,E.RHBDF!.`1Cu$X1a%lABICQ%e2Mq"LHbl/%aUCs4A)h:fRc4gWuJ%O.fVZ;^UGH.*jd(L9nD=KHT?rmWK6'1o-+F0eE"G3cC<A
+%DoM3$DN(-_Ii at J)Xu+<q<8WG(,agpABXl(IFe=u1gOmLHRC3O83Y3%c:]\h@>nbRN32P0_ld9n=XfB4"j6ga9.;so)_8D>u!ZQZ)
+%8%dB,,6q-(rN4'Ogi_FF"manqbHmP3fhKh#_VB\M^f+VMG)X(;]BkhP]C:J(1DA@$Xd`%%Wd3j8n"ta)ma)bH')p<:_u7#a\$71m
+%'SF24R]D6!@:0XdW!VoO_1Nj5Ao/lu8#mc;00C%JBOW;lSES"I!qd:bLH;d:>=$L+>=Ek'RDO#LDC.+aF(];KE9pVk9afam/uZUV
+%i.pF6)^+2_J-hO[^3rb'RVbBI/Q(k]i7:E3.Xj<JrF5?r.0u=3\CfF6^E7(\&h+-oD;0oODRQ*F#E8E^*A2#eDQ;\Z0.*eJS&1D7
+%9.^P?1WSB>fQa5e_<ZD./-N:I*XbZn!WrceUC8=!gnY`KFth at m0!nb&eqZeKq)lSIG3b<YFmPH![BU-d-X1WtJ_dC/`;l;+PJ4k.
+%r#09b?;2eF+YsbT]=-Eeag9+ at N`@l\(1U`"h$/P\O%lI]=o7>B]\AG.B"HsI\^p@!"pOm^fouJ+92IEE+koUIaeoN`$'[2`&>6-2
+%%+dVP(a;q!\*/?>U1p:<GRae([sRMMSNDV#eEh?L%$Jq#KbnqqM$R2S&e!PCGCeIgFk(`sNXK0Bf\"19Co`%ZW]FNji%Brhh9mQ4
+%nd2j@[3:*,"sF6X1LU/\a$;@FPF=b/oq"#FT0\4Ci*G/)cY'pc`706BCU+&A]+?''.YKS9";/1b],Ps<(?gW=[;n0F\[beL?_uE+
+%Ct^oU5K<`MDdgN^GKfKZpIhj!,L!UL_p7+c&Zl=KL&7HUQcDI0mFi,f:gfA^flX\gZo=O&g.u4d`T,pS:bcP%DLC(AE&Id5<8B.1
+%IC5Po<]/KEFTesXS]8U+2E-k37ki1>\mQB]lLe7sd%Wp)K+Zgq&7u,5gUf$fbCNC-AXqD6blTgUX4dKm49X$D$#FBPG+RKk*<;eQ
+%EPSb/02't<KI`Vg`3&?!<WOkq\r6YH'8Pr_[1'0\@_8iT4YPR>,.N<QJDOmAdFH(fQ62$%Sf@;t4i5=B'SV:m7>^C1F`;\]YP)B`
+%4!GZEe`=PUC9iPS(c?LGGTcgB>;f4(\l2[l?uKpO&/K*1 at uG8ib#mJTJOQ6!QLeiH=O^;"PJ`ENXrP$K%,piucm6R;aOLtQGJo>C
+%(-G])"*_/2LL>!\Ra#I,C5(CdBh_F:jLs)SR;, at 7JU&>LLVl<KT$stLLnDSaR]>XZ65"7Q.)Nd;I1IoQG69)8Iq9*CY(c5e"IU7?
+%im\"F3afKW4, at _H#dCI`qm/SS?*pasjX\e1U1<S.%VTMPUZ,54WmfZ2H:76g6sDY/C4<MTH$/7]M,\@NXC^hXIqBU%hn:"`)4/DL
+%N6tmfBS%UTl&*1Qa6XmNc!#kIi]^:3>V$i$*V[jYKoii"5DS":mYiDmO,<ig at TMr_&_h+-;dBLaqkr+l?nAC2)hp\PA:]j&G0q:f
+%/WA]_hVQ/X,A3>RHTQ56lVum3PtqrZTo@:e/qQFMO]Q^V?`FuRLoek41kYUh"N&\m"78,YF(_e9SYUlu:LO=^Vce0;<jLQ#As9,!
+%-U*?9G+a"-U=]tWYMq[6)\3g$lk\P\!NiDL0%&?E(hSKS95HEieodGg&.BA6Y-+<s4Wh"KTB2.T*U$P:+Y0Skeen-qa)N&N]$,V?
+%rX<:XkpCLFpe0bBd3P,o*`h(#%d3q&C;&'8Yo\p9CFo?6!oMcC3Y7FGf@=[h?9=3]OTk`UY&9c->7XJC)E<@$DsdRI2*A<jV:hUp
+%g/(,E)UM$:nP*IcE. at r@6P^Jk?C:>o0%Isl#[Uao)f-W;";4kM]q6+R#-2(.=r:T&De?dqX4[,[0q at Y&Y[I_qE+5;V_HG.Micp-K
+%!lMik9jEjcpDK]"lA,tm]M-<Me<o`m,M<!]EC?nkRSAr8GXPKiX>EH;6)2K-E%[QZmu"f,>0Yi;<ap"]Z5E1"%uePn7<cDE*U>UF
+%S$+jS9YoGYj!qZp:H#!r\8/+"cS]Aa?0k=r!^R,q>uC'Z`[!l+TJqm^4?2:5!YH3HjTFE:D8/]fCu0H9qt[;89!/U)-m-:DU8P%!
+%gD2nh1p0mGiX(NKH1NYFhJMM1r.?)%.66AiA`XghiR`figoH]gm]IMumC^-$&StAM8MtR)iB;5DFMCXp4Dk,RCu,<'7gPcUB81aL
+%]7:_u"@bLtPB\6#-9";,Z[KVJ2o8E*W4 at B39=fEdiR_Jl0RL^WHLA7OYm;/(^\V\4R[*Z.J)E?NDM:Tis"=Ie>ic%&WA>cT+<&]\
+%dn8]Rm=Eh,-bosfgPg7W-A'jkhQ/TAY--EEB!mmMqKO"e[t$YT94YOdV at MQlQ>e]A?b>-'LHSB!%3'0 at Zkc<t(Bp0,&P?_d!XS at N
+%pPX,S1?5W*<8C:0&kihgDMTi,b'HHT8@>k1WMm7Y`;R<-[!)$W/^-qe)gaI\Z\gVt0GEe=H7$XG6gNHS_d9u]WeEf+G>n3,)R^7B
+%&.Wr=qlRYmpUBd6?N!GM-_cN%5i(;;3Otl7m$r7+O,#kh)O"l)NiJKjZ3-u0C-n;El6QPD[Wd=1Sb\G)h,Q;k$sXS)A7(/[\t2&#
+%![sapn[ermrja'cL_oe;dGfhn,;Q$Q5cgXtG_crt?K49o&j*XY2O\4-eL_&7$i<.AY$n_mHT)'Hf*_kWo<>+sBBV5il2B>Q<k9kT
+%XNg)Bi"/0S'ksh?+h^tC9$C>I-l.EO%0H9A3PfDb<S\gS)%IB_Io'rj`0`NSrOA;Y0P^qmH`BP^1bYPFb6N,H(Sd@/Y5U=q8rPQM
+%1b.djL>\E"11"h2BXJ>QJ7Pm%!Ju98TYfb%A5$HSfC!_s+<d\<lf?Ftc,1TFh(CW[Ru^3UE;,C:4)Huuk&T*HG`+WfAa:kUY6hYN
+%ns68m/uY3tPH>n1Z[h.?@*.3Jc)<;t>RCus5A.<D\oh_+J)X'Xf,>p?Qsf:`QaHIu<[S=bZ_s2(MT5;a$+CXEP[1bY at mu;73uqk`
+%`Z2G$?AKK;cfHA8ZA2hfHF.3$k=7TNRd92f<@=ZSdsLGt:>,+RPf$s,[p=P\,rfa+^=d,6-d%gS[l at q_,9fDC3A!Kf+C>CAB at DN1
+%eLeek,#lapb&3?tC_g_dk05sL*Z6&I*R]9Pl@/SsOK56!A&8Z*i^6j60O'X6O%t%t>Hr6Bd\CoQZAC'@AD>e8NTD=d]lJ!P)RniQ
+%@J']aQ25`*LEq[J\Jc5,o^-68]O=,tAamr^Z9Inj\mg25[L'A'DVK9tJ!SQ@('=68*+kqC/$#)AA#R>Q<VAl6F[t6-`jda"Xr8`u
+%>j&+b\,%<\9C0M;Z]C2e(!e2Wdk8P(4kNE4J-NG7%,Tc_4]l19\sVQ%bL[r/>?.6XOBn*-j*E\B4Wk%`d<aB_506)%2tOQ1h<kqo
+%_k'%:@U><+Mj`i9+d`&]1[5A)LclaROSrV;nSfSjVObii/K4r39F9&0jDFKRi,6Y_>MIc at o=^RG#d,a\ic^&gCcG<^V at lR(e+o"B
+%>rss:`([j``dH<C=qe=^^fT:$@u?5$V/GFkFp/=IlWA'rFP_1\&1%`DcaK_1 at f^&\SRKtI<\k[Iq!\ne.-'^-UO8Pj5CH'8rYAb+
+%*4meI([EUp1Y/B6k6dQeJ8+.T=Z)CKn\=e%%\IIn,)As>2Uf?d<XE*7_/3",-1j*CDLO1-K5%b+;?6,.g7(fQm!&lQmlhh+[9>L9
+%$[A]mJ9nNWFQ;e^6El]"m1Wf3Te5a?a3 at Oe:$>KGl?gF7R8qPB=M_s!g*t^$(POXf6!O\7Tg`QhE9&i]):2-N]`NuSAemn/d*o)e
+%$t+GU5uL_\>O9V$6$o,@[9#<WVd7OgYF`F-8Hd(?<1E;('fQ5I4Yq^JWHJaT+;k?5a at -9fC0fU:?o[KlEPNh&Y[Fosl!KXA*Lm<:
+%9Io<G6KHdX\(J^53QdWq,jR-c_uh!r=CP.eAo2!8?Z0q44"M_Uq[B?D2)mCA#IL_r#J/l(,-WfPiH1j at 2Yf@!.#4%'-5QqBIPZDa
+%HZtaciAB_rLU7sNX*-Lo_8k#0c":g*$dm69KcgZ5#%)b46Z2T/R:r:-=*KSfZ-NT'"\CF$ec!$2NadnhLs6&,&p%[Z at SXB?D<P0L
+%G3`qW\t]nugqo+16Jf(4(a.cMO)uTWcl?XM\_;DSeXB7VMek(]hbofiRQEIMX^*$:[CA=((IJ6I-M!EcB+?ZcDr\HI=UUO(mFg8i
+%S!(D<'tJXB?sTFUeY;1V`;m;4p]B`X=cQ_tLh^!>/-+[G91:Z;6#A>:cW9RlWG^:XOkb!>jZ#S5?$L6gG$csC"uSL9S*^<IF[s at 4
+%'VHGL*bI]P?&;=thfHVXI!Ssdi^.oB^:!js0]s=),HjgLd:(eM:$!cUmE*AGY4SgoHIQ(UMiYaVLcLtZ1S:jl>29Z[F7F^cSHbeA
+%`Zq=(RF)o-YXLbBMHJ&:d at 08&bMtqI<XB>?k+Z1Gm1Rn at Hj[LS\C4[!AfcfT3QZmm1s_$r;@$66ABe[KDt/.$;OokH5TedB!r!,d
+%_nI,Pn53lO`F;nLZQahMPL\4&,V9hE-U]1]P_G/AY:KZYY,CZs(lN'^>n[OlDJB0NE^;<'!!"#5Bi_, at C8H!mPLFB/DZ8iV"'a`<
+%\RehF9IFl$c?:*6o55;\DCO1L1\N$4RK4[sA94%gU$`nV2h7gTB+car$?[<K!Z-sf>B9tmp$p"5%+[A>[LNFcU1J*eng8FC!@aN4
+%'D_uUMrU-NHA+!^jjQg!0fRWSm5>"<WABo9g?]k^gaZE"K\Lkk:W1.fD)ptTA2!krlru0(!Lm10bSIK.cJhNZ!d03;%!GGqD?IeR
+%)->mlq9)#aTOH_f9?]-q!V#OnN`cuKR!TLBY'O'kLI&*HZ?"[%WU71UUK==]e".OC6n>m7ln_dPLASr5Oa>98Lf1>A?ZrSo>gJeQ
+%bj6Li&A!<s%B7g3lWb1.6k0$b\uTZa4-Lq;!.rPN3(t'>o@`lZ7iaI20!*+$=Ydg423G_(h\MJ])fim4a(to6:6fY[[PTjGj?Rf#
+%5RJ88ST&@hoa*Y0g:Bn="^@1aJpk'<([UJGdu2Z[l\j#"R6IGPgU;fI"C5N_)okFG\A:"0g27e#h"S0gep^r-7i(ITlM*0=V8"AN
+%(0uBsje>>4p:_iE6B5nMQI&.1d4p\4g\_6a\p&ogf>j7>Ld$?r=k4!Fn32+(d`<^GApo\4nE>XAk_4pOBupu#[?W^&b<;*!_^1O%
+%13D&/r,G%kXQ`MEVU8N5o3R57[qR/fd`l@/"O>#(gq"B<BEMr[OH?3T^R6R&=ih>6n?2LP7%#HqB`R)]6T"^CMig_[.9N]Vn+Pi#
+%K'^*Cpp-s8H,4Y*YR)u1_*XFLQ7IEBP3FSq%0Sa+\_Hf.IL_<Mom)&cHK7`*HSYou5p^,&/Am7#\Bf<mF;l<Bk2'V-BGcg?#[L.N
+%8tuNl!jdMuN3'YeFNqDm]ZL+ukg>[:kOUnn0]HuoZo]TWYaU8Y4$-R>oqX-(/%$n.*SMccGIO3,Z.&%D/[(a#R]U5o\cH"R)8^1`
+%gNbY=g<bPtDtAO)4r\LLiMk(`X^k;X'%7K2B0Fgc/uF-YWjY6N(2s']b\APIJ*p-Uq]GkpK+Zq=!'S7Y;bS<j7!XlHd48fe=rV*5
+%g:H(pAcTM>CaZW./$*Cd8R%/Hk2K?;\kP8QVuh,Ml$AiM7:D%Q*:mSS^2/sFJJ'41nk!Xsi"*H(Tpe8lN7Rk#Csu^P3k7a!%P9F4
+%R$qI\TL^cUJ-c4leP at V61;P>6E7P)_!gm'$7"]!i^7+V6^qe<t_'`crX$(E4jSQJr8?9%hqhQVsbdF+dS<":0nTXJjrRS*LCL at n>
+%Q,8iNq(1puGVmES3<Oeg:YEsmq]J]D)eH;-dZ-u-B-$]b%7'X`o]\>!ahY&@N6+r#-E`_RF&URf=PXXDZmU"(?a'EbCfga5hWe]r
+%:9pKufS6N1OIp*.rFN#(E)3*:J=OV%nn,0/8.P=q?8,H4Qi1#a at 1[G'CnIk>4'o"SaYMBZ?>4Q<@e&eM%H$M-Jk,^bX-dc!S]jbX
+%LU at rL(]rHj;m1AuCbqI"0.#`deuBbD-UA#\DFi^B5#'S7-!:JSe`Xil986Hp]+$O?=6fKd1JuhB>AN1rE)ACPm<V0rj5F`f[,o<1
+%9[o(\FlhS^4fmNLGFQeN34cWZM`?Ft$gR?GY(N1>ik[AW'/Zl4aI1ZtR5i42TK29hpcQ:8LQ(21",sJBJsf5s"oD7*(UJLj(B1Wp
+%c'"2f,%CkJX4F[@G+9q/iMIL#`&T^t/RX$MZM=aJ)kUHqgMVn==G<9T>CGDQ"7`'e#YGMGlUQmF[;=ur,(MXlp]SXs1Jt5OnaR:d
+%8rADFmXljIlV,Du!S\3h[d&Il2;:GkHf`sCU\W,",h3*aj0I)&VV^3V^Re]Pj>rXfF9;bsRL'aXg0T0Kf5i.(:+5gjF16lT%r6u'
+%qD^)T_43(C-pA at pXepPLijAOB(`-J9`mFc[6<Sj2]B/;;!=nPbnp$DL(%Z7%iPT_&O2H.T[Z*K_I)o2J%KjgrVTD"@F#,u(@^M=0
+%=`DMcqN/(b)>R^EJH;L=N,9Dm3fZ*$G44;aZVBq at g;KK8Ru8jjG63qQ:HleBSsWSM1&oO1]m2c)6rD2s2>7Q(=kC(2Ib%nBKr*m>
+%fo'\p1?5Ks8#?go%45otf`Z*W='7F,O9fYa4+$=$-(Z6CNt/Cuor at M#dEfP8QsT>\-jLu"D1aY2r4eYlMV0P9/[?t54\^:4)-WB2
+%+S(\\o75YJ7`'-#bHjQXp;%f[fP78]/VDdY]kFNKCd-GffP,ujR#ps-5LRbb(`s#1M0"m)Ae^0Z4GpmSlP3ZOYbJK<Uhb/Hc<6\j
+%J*]A-A$u%:#"&A5G-&Z<+D,-hG<)?ID at 8NW7$$J6Bsp0+Z;$t;:s7J.=7A'k!18G:6?r_B=);tr0o-A(9g0j7Ta7;I7<T11EPJch
+%n[;[?UW^'/&67J^Uud'^H8RV`JHd8Q\]NKMkrD_7H^e8^Fk\.1d^[q8hIkq(a:Y/+;><GL>@MbXZ`?<4^p5@)E!BE^X7bg[2GCtu
+%!)k(i*hE+lAu>CF1(1rNL1dSm#).5fH,aNc@*7pQKPraae0073T:Jm3QEI,@@3;BXjIHRZbh+]X<Xu(oLdsXsd604/\Z;4Q7oT5r
+%"g4Zu<2Su\Tg#F!LBa_kkEV'M?:?X]"Q8'U8?"GEYV>uV2:cAOLWRuFNF at 3Jml3u@"^;MSs&)*?=$D11,J6Mufi=m(%f"nGG7mV+
+%`gDQ=p at EEVV\eQSV/]S7OMg5-j-W$DB/MPl?Lr#<MsC]+SD3$3]+:un<7kTjQ;%2Jer:5jgAYf1\SQE6Ch`9'&+^=Y>l+`7BbM#>
+%5FZNVK/d,@!.^Na-TOu'T#IjGpL#*)*"J`B\K8`6omoo]\8<;Vd=Dr(EB,BYn7$k72nKOd.Z3VS/I4-+9F at So[;Z3[)XK2)iiI4D
+%)K!XF/_#Qe?R[=Peb.#OCmi(QP<>$M?$NXsE:HNOOC1!h:()%YP[Q3UgCjYRX#]9)]&TJ8!G'udaASg<2DNdi4+il\7&e?bmA>.)
+%\D+UkR.jRjmML at mOaYU"Q-e3#aV at K2hG:a&k=[/V9Z#dao+mgXM=HF'>-8E7Di_t9Cqs\Ur8GZLe^0ip`)FLnh0Nq2+:^3Q(c,5Y
+%2Z$n3/,-$2'Gu8pWm<[rRm!gah<f(UbaGV;5q+&.Bt#s;dUKZG_OT;`d,]Eid`[oPE.cm4<>#W0K<HCa&H9,!:A0`T:!%QWr)sXs
+%\bJ-.UOlLmp2A7_8__G))U+k_ZUAfhK=Kr\qCE?#'Oiiag;_M:r-,NRR5i-63)R&bIkV%%>hU. at 1L$!YiMo=G5%2>\b0<Ec\8U\c
+%'!"It2VH`1!c'P]'Q6I?B5#BNXIgK[(@nE]j_Co+-=G9L=*(p-aM4 at Ve)f/([B&q^EUY"?-(r&C`JEd8Cs[WpZ"0K?Z2,^YZ,?kF
+%.%)=WX=q%2Q`s/1/6Z!>;rs+B1O%;MYK&fYVe#1a4'KJ3Vg.=. at VP_I.>m;>83YB9=a'Y/3:h'WS&Xl:2!"R$(q6&hXVC,6MH>g3
+%4S3>u$0r7)OA'hrCtAG4pueO!6iARr*X$3\E%Ya/YCs+.V_Rl_5a-a[bSS?#],V(!>YSf#+U('0hLt9-+4_f>4(u-f1 at 9&`;s7%f
+%fJ!*V;dKuXZBb%RR0DE)96G0b%pjA\WL;X^a'A+G?B8g&pA8-M#oEDVCYkc<h=.n1#_</f=!5lJ[rmZbSD_9Wlo[)HJ_4[$*dO_*
+%APKa'S.M2r_]t&l5MZ`hqhu(*I4u)$C!HR8kR6Y2h5DdS.TVB;5[6]ML2^VRKVQ%rO(n3j>GeouJMO>4?WKh'C]a'hPC0[o at PZGQ
+%_FW'[c$Xo9&@I(0ST6W9"@F2f'jV5'^fJ[%\"@0$4sM8G%Yn"I!D'-a9SAk5ik#PVpYFU^T3p3%M[.iho0d-B=2()&hHZYgm8YCI
+%-cFsTnTne;a`^N8Fhe>PoYY[Tr'_\bOf.4SFr&@e]4 at rFqgA'JEd_m]R=Xn=$8U)sVTg@)h+PJ.8Mb1_)g=!O.\+nP8Zog(ikT<Z
+%DHNENgVXNun5URuf7t)HD-db at 2(R,JGoJ*#2ScS*TcGJ)+8]WuX&%#^@t\>5B!!(]4JCZ^<*6EO#F9ekOF*VndC5>;EpD*r+n4aa
+%p0s at l+Hdnn[kk0g67#Z]=INoHn8VWhi9lYeKuQ4;EOAI5C!eMQBaZg^MS8s`"mqQ`#r..uJ40_FgT<6im97F^pB at GSUQAZbin"E[
+%fLA3/`AS"hKNUakk*A./KpM?C"#^^]c9""O?)m$h(o3(`TE+^]r(^ksiuYcA[Tfb'J7Wr"mBA[[kq[Dm-eb(e2XiAgHfQ6%mH\\h
+%:dT1"J%3(b1eD[5=hsL2)@utgEWDg30;7`6p/B:]BC7e9<LFFA\XU4#Roq`)mdEr\rQ&?ZP'nu)L1>2iI[C0$rb+'W(9C_(G!=Sf
+%O2RP9.>n%L_B("]HChhNQdm<pT4gt at Cm$UW+:TB(">?>m8(WKU(+:o7W'bN)d.m`>/Tr&I?>\L&R,sk^8`?nWls]]9VBE,-?LR-C
+%HHT_FZAAUQep0pL84p7'7tnjfE^Tf0E-:!O7C63<N[@=<"$^bF>F>&=fuC3&/sY([i0T(PjVcR"P[ADKK$"K*YJV!"$/uiI0IX0?
+%HoiNnjd(YhE0t=9B[j:2pp3ZI:f*(#rm#Nj:G*q`8eNIK(fRE^)7+0:NP=3*bL[aW&>*@ahOhb+23 at JaHHVq,GtFhQ87[E+`Q%\3
+%@Te0cRt!G",o')Q:%r>PJ&uDM`sF?!3pLp^m3`e(h@*ZQ@/<Vdnu<+>(8`6Cf),2:jZ(/Z- at Ho!RhO./XOuh`8KZl3:1Ej*lSRi\
+%f09i;i4)VPO8`gco2O-aRqR"`MK++mfn6+="ZU6d5`s$@@Y"a&B,G?1`gZXtUK5A`01V1P=A?:"A3Vr6^aN[=QX!8ahdq6(T=)+=
+%3>*k4p:E)J6!WGURY8pL#TDRl4:bIa<t<PJBC&4.U'5S'Fanr-hAYXQIeL^=_gjg-H>88tD;7.1'hKWXQ%ZDb?^&C`C.RYIY;e@'
+%n(\?YUePn$IIg!)fnQBXLH+8ZV>e9PV>ks=`DH5W[A-7[@(M?Zq4:/l,B*n&E=PJDD,HlV$#.u\^[8Ln)XQO&MVRdUV'9<P:ddu0
+%=m]qb_qYr(O)C)ZEF:k5a5!L$kZKE-OhF\Q5H\kh.IQ\[Ob$@&'=!A4-X\(Q[@G_uJ+H?3GV5JL[TIRkCPiZ1GBl;f2H$V<9LWl#
+%\Z)<ZlPWISqFS=d;U_!X-9*Rn25?n?A1;q$NQqB at L)u#NBo2;Of_q6jjE;X6Z2P6?0=Pfc5obY78NugOc,5[ak&2W=oMp(d5q3Xd
+%K&7Ks^)X%$`B9ipENUe9K_8gaWou!!/\^J6g6sUV at 3A@+GbR[m=l.295tZXgI=b0ZU'ZWED9^PP7cVrrB'6uJ.4$r$^#>on>d(',
+%5t[Q9pan5a^n_?)ejiZYf:8nE3l,Z^o&"M3l.dlg6$_"Vj>lce?'0jGSTeP[P?S.gq40)CV4;^N.1IWL=hOMZnZ.n#M!-O/NfPWN
+%28&%i=&1$AWViAnj2ub6IF'kM4Q!R/:==V3<`0_+*AaN2n3C-TX2KZ?'pSP?Cjs/9&!gpeKNK906]mKO-!>te%ojE$A\s_6!4=4o
+%F6ZW(K%:SUf0Ik3DsR<]od#fjKD&ZtqsFV1mj*^R\a:A)^D$$IeZeI4YsAeAH:e"pNAGat`@7&=&m,],q$RYcYZ2L/cY\cg8K#:j
+%J at a!ZmACAA_ae/bMH6Xud at o4/8^m)[[W41rAYN8P\T`ipRcfMC=\/ME'O,t<eR*RCY!2K1cTJsX$;%;OngeX)8OGbdj*:,!mi\6,
+%X*Y=)`buN:Vq%(.]qd`Vrt$R]VhWK=deu9"P]1Pc%BfL48[(0(;fh?#h8PaS+1j5^IHNM2,#$A2XC\6p3eKpHltI3Pg_jlZf8?*Z
+%2C5e`l!@NScLiJS+`f1_),n5:'@rX6qlSA<XK at Y8]M*s+I4`3]Me'HJnj9h=1VTaub"CaRI&=&cJ>6 at U[ddj!@G at Y4)!>D$`l>sJ
+%5$fC(.*8$l+k^%#RfP+_8&'Gcb>G3Al`!eRDQIo\r?Z4Aa.P=3((<-B[+Kg)J.i__.]7Dm7?RSm_71pWcoL+5*pc<n3O$ERaElY5
+%d=b,n:W8Mq.50Jnh*.Ba0Z#:uT#3enf<J!ZoJW-7o12'f'fHWsp"7&;o`SI;p;=/48:&#e3H.u`B)%#CpmC@'f>3+9obIW(\e2P+
+%5tp>g6$(T:9V=Yo2J[-K-ZDV\Su2n2j]3Y(FIMoH`V+##>FA1omAsgLB$&Lq#Y:&,LmsOubU^3Gr;J8c0aU%IPYiSde$hQ%GV04-
+%IOss\d'/;n4*/b(2>qGO,!i2E>mn7gchjIAS2,TiTe>G"dt,[[:/t,Q$S33$\81_X#F=tI1+?dHc)8&?S+++1>=mXLmY at N8DXPr+
+%FP<g\)B8#9)Q<V;\'8i_)lq]\0mD"Z>qH76cu3r:Y3;&[V6(WVSRc#H$A,i,)\K%X(`2;\BAR0kjPQs<R.H]`I-(=f:)mf+nhCA.
+%Ls+ZM3%U)SkHqepLlsSH;?l9YY3#VI.Bsfdbl[k7$3H^I at _U/Z6qmr&bR>#JfpY$11>s+tP<>;X&>X;-o].Um3pddeN)pt:F8[eX
+%HK@#K)O`5ee at D#eXS_ at 7/UO3opK267:HQK?Xh]N2M*5f"QJ*6V9JEuQ5_:uJr68M<T$h.4CKEZ/4es('+.[qL'0IaJ?]s]g)W:;<
+%jdP7HM=T2;k^U^0[oLRSM,*,N-I1K8A(2,*O0N$K;pQ[Y/J'$I%NiEZS:-0te7![FKIfA at .0e=arF58trYK58Tul'/\83YU\@2WI
+%(=@\"JSj,QH#&.#ZP.XK(BX?\n0*p_Vigi=j]!-<0HoCe4-f9\RXZ54s'WL3`bquPf0;,;Pp4oeeq[!=<U[rNN][s5ie4btI9H1P
+%YZ?MB*R]AM?HQ4Qs+]K^b(`DqlfA]>4ca%Y5AtSMiCCC0`Qjq0b'n+pOE=Y.?HTbd#If6(][#hZ/8C>q<gILu5a-ilTh at tFFVdGI
+%953V11e&leHu-q9)t:C`h#*84s"s1BnrF<N1>je*AY4-Uak9>F\;%^U@,:&;Qs.3!H:]T4:faLbLXl;!>kG9&QnN,&>TWjBjJ at hZ
+%bc+h5\S6K$.6anndg$jQ.9muu(Br/ZNInK4hl_snDo\!7XEO([kf<5]H"7$#Xp5"eE_f!:acISp>?EWM0kg*Y8S^m>7q,J+QECN-
+%,Q3'C)Ee_1AYeIeb7<An/a%i3^VpQn[]+/4SA0n%Hkb-f([[]-eoVAPUl^gtkP.4=K6f(@,QnXQp&+KIUiT*knGFSX7N*lOFthHA
+%C])]PAR:M.7 at h)um=&ajY1$bpA[;s`VSF$"OaL^>n=ASV(*H12+>t%aH`gc0eh=\!Nf,SBEVT9o]G<S%I;7^dBKu8j\asmCWgHuQ
+%r=?nFGu)]Y$X.7^Fe80AJc3T&fQ7PqTO1o,.;(J4QKqTNrHtO),a2njOYF9c\TK3Z^=g6)U5FeVPj,@#m?QA.mp&-lV]4mMI.YS+
+%<pM3]$[/3\PpF#HMFkW\EX-NnlFC8rL,uqQ<uu94Z6jDro!=UhPrF6':JEhrcDY:Z.])6Mit>!tH6<NA0=6;4qIn4W^o5Xd]hRiE
+%(GG=;Rqe4Jp8:KZ"j8/Z7lm at Ca+n._:f]$#HWLjEc6]3DNPU2F523kPnE:(j-Y(YV=44M5b,l8.BM4#13YBQG(Pa=<2e_3VL?^X#
+%$g=`sY#.Qd85'k at K*BA6R<Cg2Z2+O%rB0eh_>Yd)2pOQ$RU<Q,og"%c8BmF?^JGBi!'ua1^etjdQ>P;E*OjkY6q-[@&!LOIZu7\+
+%mdK[=R8N]A@?aek69"/nADp;:5/hOi30F*fK;706`0Ejl-<O at 8d>R,N5DS&e[%#_SX2fUd5lMlgXa at e3pLmdF;6K4Vhg at NR"[.KS
+%4<E^OgIO4$[H=\tI(b=a3p;R at WI]&</X]0VKUT-m*dp!ok(+l9[r"8d%NWK(8m]kB_;PQ*6*1&6B&'`1+KSR"kL?WK,V9?k#6VqV
+%dL:<V)2[%hcU&p3+*n7u4:,`b5q?BT'Eor>W(ra#e2*ILrmCH2Tiie>*r6piJ2K#0&%p8ZA^gUjF9HNJ;&giqT;3fVFE.T3E`(2\
+%C7I+^F"R`U+,mO,<-`X4hq[&.WM*=f!EBf1=TPU=W,GA!ff"O>m at +N*1f[\d8T_6eS#uI/r at 6t;X!Xf4;s3;i;bo at jWc)q1$U.oj
+%iS[/5S0S7gh1YN5E7 at u^kLZfb2MQ\!*QiTc-,()";LcdrFMtS?BZ7=?o6nnpg*ACr8u^?^g?mhWFX0 at iD&;o6``62!Gku!\Yjg<q
+%^9hHX?6]R[=aI5"d*<R7@?5$80Zb0`4h3 at En=46!H0_qEPJ^mVnme"Hc>.=Y"Q9J-;dMG88Q+E:S="<sUu5n"kTIEQb!a_F8CBJ@
+%Hi4Iq9MQcaFYI#@7K0pOQ=Cm3X1^N-3B7Dpk5)KEhK.dR0&7>DEZSjNh;?pHHQDosUGC$Lef_UF]6cc6.1hPo at QAM)>s(1lPSGU>
+%FZ'tA*Z^N3PZlS7;+:%XG\!Ub9QfRV?,pbSeahb at YbXl8BH6e^XS4_\]dB0QptVe?HHdQ_g_u"jl_2RP>A;Bt8:jCCpf]g_2B#I0
+%j2GY,q.[s`c"0\6%LEEme88%fQDD[X(49joZMaOX['>ekK))ilHGth'/$m]l=A*sm]#V2a_I%>*TU?\611qGsL8dFE2"*/2TU=me
+%E9[`Zs71GZ$&Ju$Z0GgppfGP=X=8EhID<b:1/Co&L;D94$2GKS37q.84_9^=jIi?=f[qMWjsJB4!a&2rjV5s_\2Qgd@$WIb">Pbg
+%>80:/GP at mK;;*?bbuc$*O?Q=:8P4bnQ_^@VC")"aM'TiX9Zp0t\O#A3Q7+hN,J!5M>EgVfk_ffVAZdHbjeX;Rm)YLC;=7"`JV0Ir
+%miSZnkN5<W=U&?HBT3ELTc>l at jM5`E,EEch'LYe_#3=q1;`NQu<ISQc0K2Xuq?k/)kMhd2Ri at p^9QDAYeBTrk5nE,gB_/nRPk*-G
+%Im^@J[*ppHQF,m(/W?ue",oAV#83e4O<uqIOWnf.\T<"YcjlqQE^3Mi?7B+=@_)@qX\eWW at QN3(F'H54kK at eW&kSubd%6T8ke!S0
+%oG?9FV!"!W+1QKh,83DKiF/aKPffGa$+tUKb/M*?)G,P%l,2O[n]P+h>F[&=S'?f&CiZ4?m&18l71NV;eA20_,'#B]9/F8%.NsAh
+%eh\F\G0)43%?7S^Q:%9(Soo?XhCQF!L;C)d:SJrGiH;kI]7cu-5.q!_0tjjc?Tier!.sgLoJENlge:UW"=C,R2U&>BnRU8$rRNtH
+%b</>Q;e`DINUO^V,#b8-bZ/pP08?'S2>TVF:M-. at -T+[JJ*Fj)0/mmUoDKFo<bTVIW\ue^s+795Z;ZcaZCp:rCBcd2+7IOlh-j2c
+%>!`G&iS6c-9R.+k-n,l&LN:[8_UU>ID3rKLl`b6KAGg=3s4?LT)@]uED1VB[`ZE"t/YO)0OPs[J+6>r.J;>"Sb>4oN&j51Hem/fN
+%SH4_)0e#7Hi!l!O3W,lM#!0JI.E+2k1[&\k4PB"J8lk'Y-Q>$`q1c*&\.]iF/.pYA<=]]c4%2J4q:#4b]piT<lf6sshaBPO2B\WF
+%q.1u6-.5)u?iJ;qgd^Q*c#&3,q(O,j:oe1rAbXW1:#9u!#XmjddE;taff+3;iM(R;Cr&#%$>#7(ci(QTTp0pFYOS0DFEo`Sc*YW*
+%Cu5k>T,VhHJkZ`eP)6(1c;B7(VF>U\Cs,6kTfpt&q_QmaS2cKo`OUTngOb[r>*47ZPH+8fm)eFnldc<$))^JIX7,UbYE*nQq7EO!
+%WnQOXM)(I<^HD;KEjVT[??@hBb"Vp,q/,i8cerjLfhE]AP<,#db0]Jt8PL.BSX)M\JpMqNqjG)r_hsel>@=q3.3GG;IMp99FVGpU
+%KYV<]F(=F29[E;dXCZrgD(Z[sjXoP*+/qELB4lXtS!odK,]p,`^9&:"&^<a8<nl#9%,?s'G\RA:r8,.cN_bVZO\3W">`j)Jjlc.^
+%hh:la`eX#M+\ocGYig-VB5o2*[?R?:o1iKYE0<d*hsi'7E<[A[mRVR2]^gMY2GR2D1'p1%Kr*]/D`s;$KFroogpIe.iWEgU)]cQK
+%f(jc%Ys&G9ZEqOn7u/#:c+&;F,X<EJn#h><+.lWlnt-#8qed2B-2P^t:G at 9+UAhr:<,C_JH.>Y^!cq(=e6a]d7*2B)k.0crl1?b!
+%)R`GG+af_mUt-#@LsT(,I8Fmgs3(#1YV/P_7?H7uo%Lm;=BWYDIoH&@dc2+%'&&b+,ZONW/jMU3iir[qIL%l-mAtuY*&hJ\)qn<+
+%=0=TA0ZgJ75<6 at ZWoe3\3oueO(9,WjNksIho=[Zm,q)n)TRr?Z]ee#/H'NonU/g?AgY,=nW'F.`%]>i"p@#J;VN[7C3!mh>-CJ2p
+%_KA-gHRXBiar*%0P1KJo2:G%P-c;41gi6(lAst)gO+sF&B;[Fr#a5g&EV%>>a$u:ZdNt<1i*P3jassjk%LCQ6Q:u>]O-/b=SIC,3
+%:==TmioTr(PIJrG:,r/SCc(6E$;$*GS at mD)*c_THpdL6goC,[*Z]E'jkG?1]K`tL0p at a96;pm#@-%n5S8]N9"*oDO4]]B6$p7,.n
+%UH-8L#3Hr*3DO^s!F908WTrdrfphJp`INT*5dJHNm!NJk2(+F-Ni$J4h9F:o^ug#B@'9[3kG94os#V);)p1?m=2)DZOuB.m:$0Zi
+%K/3mi`\DJK<Ac5?c('rY)=EaFf-L'C*!=ndgC?>!pW[<s7Rk?N$[sU*$>kg4cG_,tE*1_:&hd8nbD=MPLJi:jXDCf at H=ET;#ks#h
+%b_eQ[(Is#rjW%aCN-Dm5l%MFlPDd)H]t3=WIY)NX>2F/UBmnE,#Th3hB/>F)+"3 at iS_nDK:SuRpEFI[XA,d.>AkDTrr+pG[EZjsL
+%d'HUM/q^Z"Tea5&12Y+JJZQq`M<i%8o%?LWQTa`J/@[68 at JsW:4s^8;L4!*%qIJ1=67PWJ(Xu_gGV2%QWU=K at p:Sg=fTADLK=>&m
+%+WVp/Ypjj0j!/2#lWeIEk.,Y;c[ma=@.;:8%mMQeKsg-0b/\%kIYK<-$@L!s"Rm-A[.sC=Kuq063_U?8r.QG+6JrZiK[6t<VZ0E^
+%T_3=Op"MJ5:J$&A-7MWF),UW:P7B at _,qi<*hL8#CXgO at j+5E^uG*:H`GV5/rbV;aZN=rd*a\#]]kHB%J1Yd@:Ot)q:GFh(hG-Z*^
+%r6(eD[3I='K%AVI,f+%H=d_WPV<?HR-Ed/N8Y@>:T'8PQ'VlC!rmfUrT\Aubd)G3iC[:0]i:!OZl"kW>1D:Ho'"sb(ka*Z&#Kg41
+%U<3Gb0UF.PUY>_4\:#f=)?i1Vpd*$`-=E1\Hto0p<DFo[[8Wq5Sltq\FYK.kC=mh%o$<;;;7IL6<[1W\_"kU at 1QQEIYX@hs:]:4U
+%W"0 at 28eR1]gd1TtH"415I<,,3\TmD0h'\BaFR2Q4#L;*MdOE&qK-ZZ=WFBBiS<u3VDsBabNh;D?Y](9c(t\`pT]dg#N=ol%gNjmI
+%'nbAE^c#Ug4.V-oTB>fm3;I)NnW^nj>FP<4TReImWnMCIXZkm:+X("L\T8G8%JRJT.b42D\u4,09E%ar=ekr6hDmS&s3M<$i2o9r
+%B.=uo6+bNidtK<e0:;PtO_,9XqF?LC)30,2-\\nfRNe6C7d"$!(!BZ/n`Db0g::J!21ZGjF4_Y4S.><f!<rl^fZ/]Gl#C1]nL?W3
+%c<NQjc7!@0>n"#g787;:PHlH0C%3;\hCC>^IgW2_2iWe2i22uK.PDaFg2&[k/dAdq.WgN.7!\W7]<n2[*H4!^]H=qG[ppWQnKmY=
+%mqRYK`RJd+;+ftqdWt-3fGd`(_dYcsiSjc5R"m"[h[e10IDJ!b2Rs8'rhQom.^#PXEGA*S'U3==_*_CO:`)Eo4t)2XqTD_7 at 4=bQ
+%,0-*Nd)"aJ`H2a_%XtrbK:Zd:P&nE9Bj[fJ>spVYUS#_Ml&r*6U86VaW^maP=shStMnF<:2b9:5^<nOEl]6Ma9 at 0=+]8a"%m1`9%
+%jb(japoUumDV$W#Ca@$`"2AZhmMSJ-U8JkfpX<0-)T7WoZ73pV(?UY at U,-9i0)#31OToihnj'S#WGmrDkFd+JFa:+Q:$L8;p]-%=
+%hhE<`6/rU!S^U%?nOVc3?`>@.!ri<Gr\iQ`]'&5g,Fde::@FDu9:=T!;NYWpQ83oT6L2lhrBmT&Es72LIF at dr@pYbqTUo,d\R_?%
+%^Z:-KW#nC3e<'Jm;c\G_l7ikLa--%`9UqKuKY'uUf/eI!6m/_/5Nbi08B.8RkdAe(U;gOLFmGH/cVO,$S=i-LPfETpp;Y2O(`W.1
+%HAR)qSL9kj->E"7Q@'$[,i0ipk"aT<JMK(_R_7KL5#*ReqKfoG*Sc2s's-5TXkBB<+:E]o*Ls?Wg]fLTk.-BCS?/IO31rgS3Q:s.
+%VN1pg19LVs>01[6Vi^LXEiB_dl`2JGhUO8^=d<p3%7[7f45`I+i[#t:,>NVdXV2hH?P"W<b#`FXD(!aeT0sD^EqF(4r785.]2fAE
+%J]3hN=h$it\>J4H25ct-2JpAFN)SRSj&`8GP2tk#PA2mo0mn=-C?O[>'uD&:mf-8u<0l%bFS:kGncd=.WbFX/1$(DEJ"5cAM.M,u
+%m$G=[%j<*2%dB"f-uu3Nba4^hiEBL@[+u3W9<h7SFZdN39$q7o[k(V/6VfFC'7Ear<g,q1cs4hg&N+8$d-]t<;oNsV%[tD2_)3[A
+%P0Vj3HOp4'\ML^7hX<1Eht^sQQ<nNS5&P&M&#hO/HtaS61TmH_aC4mPM$(R5B;0"BBjco2q(fd7d%_,Drack6A>B]0$pX+rfb;NS
+%Gh?j&%1(=cifSfuR:YFn0iuC=I2Qql_S%Ljf):=bPAs>YEskseEfo54I?75mVS9Q:D!)m)YMmO_%?WC-QtnH>3YA#S2WD;=/=#*R
+%bld7_Am7F>(</G!#(meFooc^"]d7pd:CHE*8[V+f]d,7LpVV"2_M!/*D$G?Z\_Y at FQCi1L:rh)j>^IP.Yk^\d6GL=F]YX93Xl+WV
+%A-ph70.)tWUYS*t<>LSMMa<!IC'tprXtikL;/rhTVGfMlZjqDM(<HC_r at n)u/XO%s2S\iB$Dua!2R$?^40IJWMnU-[fGH=j at hi?m
+%R<IP,4M7f;)DjhEQd`jtiVW_Ccfq2p=d.G-1KF&>g%.AhOGhZS**0/rNq_d[TBr#FY+:-[Gi^QS5"h[slCu1cn9*["Vc'5>ot!?]
+%j,OV4A0djfPcVo7>7WE.cpHC:Bb/8?q+nMKn7GGsq3_-K4ph4%hSl$.MKSOgCr[m';h&3PRYP54dS.&gYLIF]2KH`Qh4/TXF*AO>
+%Renhc49j!PKggP^l]QAEO9,5FJ6PYs?Pmc6l%ShRZ)M;^No(RJANc#m:uGk^=3<bomG(P1]"A3O+gomV='t]daap@#l'A;$F]-W/
+%<Ek$R at _autMM&>M3Wg=h-!aKj'd+rci<"=52gM$+S+3gTqp*1HCX3eg>VS]hi=64c\iVFRZL+hIT03eKrS*"%U<JF8;!9'$Q["XG
+%C.HEIo0l]F`_=bMCQ#O%T;<(!h`59*>cib\;TAnpP*Oj?g*TBn$U=3m:>IOODAIeWGWQ7e+kUcBhsAr]-,ga,Q,B=(_)Y.nI=.AT
+%PXO#nO#&qghJ(c"H]r)5ea"#^PVVd5--J$YVJi%0)4h4CV'Yoc2msNe9 at _.b#3i%I$"T98K9Ide`TbG^OE'43k[5\`Ho/Fbd7^kk
+%][#7nB*LXoc*.UnkJUY"RdQ[sb1r#lClI!k\K40nHJ:mlq>%*ShIJom6&&L$%$Ye#BZ[h/>#2%ZIL=/,UKD96k9Vpu;nF5,QlF>O
+%?DtX"0opKd.hUhV@)GS4fuDL\GJb8!+Oj&(3RC#.`3-S0&0Uc3eHRJ8\NG/8enTfBR6+N6W%9OPS<@a0[nEC#.btLlF3>;`NF<&i
+%_.o1$VrF(A7c-k#%uCL9+\4:@o!P*8SGLZZQqloCC)@O"b-e3IJ\EoSqJJGhOGe))_bo_gFA/F-UoFK*;E;r:k&8UF9)[!\0HiP]
+%q..p^XMcS'-Is(;jL?jd!jg->0o21&<]g#F;ohJW914)E1X;6[+7^Z>aLp;l1J8?\Vc142.,MOIcT!csC#`P$!_/4OKn&79JK,ID
+%YE"ul]gosuqbiLeF?`lOg#"tI(T^:51g?%KW'/n+Wa`6/<\^!K8s!b`I^e\Nkc$XrWKXrH(WQCm;s8YjgM&"=0E7?4UDOE3;]"dg
+%.4CHHME")Gq>8:%\!9%B/W#0b?k$/135O"_?C`sm2D+b2m@^Ie%2mB/Qp``7.R?_eQml8MFn<K2"VZM/H4+3!^UV&#S[N[fXTij"
+%D:=N:n'bC#fhBn9M!$756_1&>rFc:W;(dZ=dFba3T9#29,f,s8 at ZnRrgN`5L_VaN5d\DD at fMU:R5P$[4G(kM^$#Vmsb=;;T[+Q+-
+%Q8 at _Ge#+1]?WY'e@`q):'L>X-^lWK73iKXR8[#';LLeGu5&b%8 at 1iJ4.hQMH-Gl[;4cr;/oo/Uq"L*rdSJH4_r3E5[C;=$=1'j^M
+%I\0/1ohMsQVF^(X1'X`8K\:E]]*HA<1*t8BcPlW)%F\t8!E.0a(8X\cWH&+A"e$GNFs#DSHjd at _#mDf;SD/H<*DbII^ZJ&-D?Y&f
+%<_sms_FJ1I_%3mc+,FIk=^5L.pd#tN:)]A]X!`L6gJZ9 at eT<'A,h)4'CTlY=o*X1 at 4)>]WP,AjQ(:(DNY^5SA9Am:]N*Ml)iDN at D
+%6]q[o;A<qjDgjb`O)9Y;H6/$`DWl(CHQraRZSSNFF?:?bBq:mF-u=#Qnkdn[^[F:4goKa&XZ?u95QhBb4>!@M\MfWr]cL2u*t'Y1
+%<>_9T8h.$Nl*27^OH+iN\GE>g">7X at XjZUH&f>Guq5?4k5k^IelCnu9qYfeNSO;AWCJI$Sbd/u[CM-)=ce6M7LFOBJr+eO"-^\`Z
+%=DGQ;^$XmF,YkNp62rIDaR]C%+TuMaOUn7qkJb#!^(dWk at _45.D,7OR.+%.A^'IrWa7tfCf$96t<VTG;q98CTphJPaI*dKI)MdSA
+%Rm`_a(c`jcQc@'$SSM5egr>qM7nc$%2!?reL_SCIiF;;:X;i at Q>;RD at AciOUDVU!pGb9hrOO+Y+Icn27 at bln1'p%6c-A[*q76e3D
+%0oda('ts">EqN&3#Y<?fZX',4P!iIa7Pb(0l`8`E+1gfdkUJg^'C8EsaC0$!Ls$5WaY2["#k9N5*2hu?W9iX45kM#D\/A6p>dAn9
+%J0U3jWLN at um']?#]9)2LlCMQ]l27]*6(m_(fSD""eDc$RZg^oN;2A#mpZ3(g&eQ!8k>;JR;V"E_3i71LY7qCiZCg/&^S$RRf[3XJ
+%]Vom3?V*^QZHIFp&`OL)K()L9%(shP(obn]mW!84#<['>?!W\oK>Ii<qtarQnZnAHW6#fW)Z?Q;'.CqbAP/]DMlBc3&g>SO'E!lr
+%Ej*W$)2h6:roML6(j12XH/pf&)^AImHpP>t:Ju$ib#k<$lH.*$/ttBW&a"k[juK=W*#NU6L88e!BeXGIS8[\?C'_ItUsqdkD9O8V
+%b2umI3jBH'SFn=*^KLWM%AXU;%>5:'^-`Da0pOpiMBP*RTU/r8-IiR:Tm_*pZkS+65M#%[?/SUWKdtD#%cS?T%G'c'PO^d]YTB&Q
+%HTi_.\K#O@/UE_kmT=4Jo^#pmkI*'8:T+ca*@3/h%*?GB"qg&f_?G_);XCT0+5`ML[-t*3G,EeHn=.Bd_]EAi5$LWg?>93Oj4`Yd
+%aGaXY[U'lP=$lQ+36fj[;9G2+jQ0ps"N*9[c#W3AS<PUugHo)hj^gG'J5rp0)$NY[Z#%4/$".!:Gfn5o4l5bgfF/n-g.Q[K/cq*R
+%UYGRYh]F`'RK.^\^<u*tkmrHAC7`0MVljq&oHYj5G-6\P'N2iMk_arLZRZqP7_cJVPqCst4d)Sqk;#i2W6N+*A]U8XKJqe"lgUFu
+%;euZQCF0o`:C:76_Z#q5=GaejK at F]X43`&.Gtjp%&pgH&dr-b,N`'8V,e]7f?W_37k?(dZVT-k<:[K4YhjC+5]%VWY+eErK>cbWa
+%5F7.fK8!O";N^CL)-2>u@`_A5Go7U]W&hSC?F)%XnCpJBTLbQefc*NPpi+)2TAZ7&Q(i,h5o>!Ak;&,/[TQ#YFcc+G@%la/qTt";
+%=,MZ12p'P3U+/ra`6nM3`8Ob+,s]eBa*UpeZG(.$92EH9@*'3[\la)=/j/F7;C8b2$QGDm0 at a%)6VapYk&!-L,('&)&7V&\1[XV$
+%RI*.CCWbBhD,Zh`'^C0Kp&`;3h#"GuY+-/$.M)>j4b\Y"RnPkp4\236;W`l!bd5Jd7,JS('$VJocpA[+63![Wb<*EC#$E6D::'M_
+%%!'u`cRkj\XZ8cI\_^%R+n=_)G'idXGokr%:/?r*>jcm8cJ"Um_N,fMqYf74+OndWDjUcj/E`Li']"Ch!iqN>N2^=0?UJ#^/=<!K
+%@H[W`Xe$VDm41IFV7^]`2`VUuZ'[)s#Su<<>Ot`XomL)pHP.]*.Mj=k`0n>@785PT5'"`B,+?>?%3E(MESdUAFuL'98=p(oShF6W
+%=-I^#;L7/rp%]u5^dB3p91V5dF,<3o,7s6Gp(UMSI"-QB=]=/@jkjaU%*Fu`XVbdf;_b[k/kF*d88XYpWtB-Ip(;gGD&/A0gDT(]
+%j[nl6JI%P(rNY?F.)VrF8uUPq/f]@qI84_O3cmi31!bUV$B9m1FaTpIprm,r)FT4oJ#8YF1f2tF;dK@!R\k4lS$sIRUpgENXZ/WR
+%_o^9&:OtRCW%!(0pV'=VY,Nsr";^]<^1k_F_dI%rZLi04QPF&rA9ifpc at r^X#Mpcc`UYDfU(XS7oDVZN-?El"YfmSp$DK\DghfjU
+%d`a.=I^_&C\Tp7_(F<e`KiR6ooi;HfH,D"D/)?_#6W:j7(jsfFIZYm)RcTW9[.C\bf7cM4X&B2m.77C.m(^tRTuYR:NpFL;.Ok1W
+%?!(e'q*VR5h7d5'-Gb?iU,"BUY(eC)kClPfn[+(C)#&`7ZG,Zk?3rbgSsZP0m9$RTTR]n*Y at s5>1]pYV\)`QbXtn8EKd?]<A-!X<
+%1R73Z-<^?87J)*PM3#I>n4TiVj9c`COS`#lNd:8O,R<qV!0oE-0n?8 at caBE%nfULb]#g=E&!t`qVeYh,;@_VR=tHKs?93Y=pQpBX
+%=O@:=_3GP>)o51JFXV<Li!nZ&V%q\,b"'V%c5C2eGFf=o>\#:McX-7Sk+2^[&p6l_j#PNNd5!*S2D2V^M,0BIG@(:'Jn5>!<b0K$
+%Kfi?$ep^d0Aga'!850KX1iIegF^N^0m_$a!C13_-;0>!!.M4;ic;X"R#k'tp'sMLHIT+@@("]MJB/SUPIj8m1+i5h^UG8KX*rW+"
+%o[-8X$[F,fV;TM`$_k_9\ZMH$0;UfOE#O6f-tB(j43kr/>#H>GbN/0\#Mn)6L]YQBC<h=]fa6g]NVn#)Lj`b;L)9A#E`jnmq`L"c
+%#_7SWQ'ST/U1Xsco(,?dCTWuYdipneA]<lZ_&dFOFq6VM9PI%B[+cfRf"1N$Zr'jkY5ZHS>&^1[!L!^d&-l4tNBP?'*0bX+P68o=
+%hpZ;Vqlh0JRlR,tNZM`&)R>N587D25!"#\B<SUu>fc7HG3bV?l16`6Q']aNRBKJL_YCbf/Hb.To?F<X3c*W&Q#\L&Y>]S`dC^coD
+%KHC0Q-9#ME at 1T?,Y at BC_dMom6"D'K`X?B,;YT5l1rT0q'fb6*7pQ<=k*@2R9/Zps:A4($Z.dWmfh=HOZ9\]!GP^C`Z6Q;*j'9j1r
+%n5X&B at HHmrEn@oYs5ZY^&Q.$9g%+Yd!ghen&=s;HHPFf<5Q)oH^Cl6/E^!UC4\<F_ljfaGiE+6D(+RhZR at CQB+iErb\!4,-.;G#[
+%*d-==Ln818GTEab8#IT)q"rG[=md`8Nprjne@)#iqF9#8TJ<<dWSii at ca7Fb9(d-1E89?:Vmcm_-!g,F[sXJ<5U6M=-8D)e3\rE_
+%@@`)*M#YgXX-4Md5!5;T.F=[&p.XlJ^knSs4d`LU7)9rg.'J:hB&IT&qSjlEZ#LDXadqBNP)3bH,9_XH0@`:fChI%5'mIlUJ<K_Q
+%Qb93][lp83.BFVDi^0pg)u!MRT^q#iY=.h0d4TG(P<8A"2MB:h<cmhI<8Co&_<Yc^j at EC]PQ"Jfnj'O"r_640T+[287Jh4FSNhT>
+%\kCmA'3U&VB&G[#B(/*Gej^-/GYa$^qjPHT,FHjXXo"c*@&<8>hZ5XGBotQSp2k>Nd*E`=?W>pY,(AXDcBI5hQ-'W^RahNJricTt
+%UUY?Ek2k@%e4Ja]ZhX`LY0>FB at SGmm8jPZ"2O3-Ds- at .cEM/+7b-=(DkJ$;L./r@,>&[-#9[0;*Z&5s2p.q>6gj!Zsc*L48XgoDA
+%9qK7ks-@$K0qrT5op)(Wr^7>0JRj(UM+i1.es8<q0HO"E[GaPm:7eo1O^MXSpX4YkaKfWsi)8.+q=8V3;uQ)AO:.dQYVN&R]]N'K
+%S-#aDpTMPrNBm"DrgUK&qQUgB"!3`p!u%:"U-a1SqGK)Ej=KTc?LQh&Un=d(#S[OUq^`_Jdmb8kZXCinZ$AAi1B/+WJkr9+CC]@?
+%FQGDoaap:Ef."!WBG\K$WD;.+p>sFuG_=$tFduEkRXS9E.4u-fkl'TZ#J6:[06VA`NaTYD:TjLW?:S4=^YNIm/.5N-4'Jt!p:WJ:
+%-iV4R%el);-VR/W61)s59J,7DmtoIlI30+;%-[[fcHot)UfIu4b_3d+m,FK/+hFQu&^Zn?(rPu+(nM+o.AAGsA(K[]il*[C;9V\H
+%.D]I<MNj:]Nn2DH-g7[8-=Rd8l2UsUjqRCJZ*05trh`60cTNU\FAQN)cY`]gn4^h-QHe7C=.q,:abd\'pl!;@e5t9t8uU^I^2"(>
+%pEP3mkNh3JDl,6<O]%D*q5Q*U.uOjUegNWSh,GUeZ;N0S,%e,,<L)TI$D*[!Au_gfmsPQ#)(l_.j_E$U3c1/*@T]:(!8BTea)D1L
+%F^(d+ at m]b5V#B?#>WM>RpJ^9,.1eVC4%2SW`lFM4gR$%n\tqM65KLM5EIeaP-BYLuCJdt].ARVKm40I)[[ZU;_P/K`Ca[NP8rnAI
+%FEl$=b]uZVr\emj9!C6C5lQ5tf)F*hbVPX_13R<^H>ZX`rHkH_n,C_*cm<FRl>M#=r,ZX"Y'7)1`lgo005dEC_(At4@)5;K45Ns*
+%>^na.EG!<=>HQ6>q5=db\`gXMR6S6aUcUY(M?Rmn=S/FZkmhQ:-=lP-,pF[+?Xk7R;J?A at M$hjSTO7,N5<:.Y2e^2H`gA?I]^Z2I
+%;VI7jo%3UPo:5L)8&Hig$o1DP^ju'MZ65<OY;i8WKnW!#8_)4$Rk+/H0FVZ^I(V3dIW>[7(N^Rn*\_r$<9[M:8YJB9+cr#>il5qg
+%g_(Vj7"oi6O#nKL_nFUs81Z.>V\N(mXR9&AV at W+,I2!q:gpgEL3MBX+\i+ca^=3dpo/lX64I<Gq#tZVV]<22+.7W2<!j>.A3U4)*
+%Tk\>M:%.7<:^O^C1mkR1-dVF9PMc"IITb(%8Jq).Ms3I$^8o\GRlh6$YPBc6=R;`RGq/Q,_A)tWbtCX!8%^KOpB at o;cRj)?NSZ#r
+%W#u60RM(_O"^$.oKF- at p$b<A-S7g\]:oD\W#82aHq<27XrHkKgh5$G(eD>\2p9HI^gc3X8%<]#IogcM@^OU"d_hj;K[I*8[I/]!(
+%I#5u at Tso`r)f9/g1aeH5[*,O*0:!JR_fWudV%["6M&%)b+;K<p>`p2NSS`#L1bGBbrUbEuKY8eK3Rf<9^7-UKm$d,,iPa+]CQoA,
+%Q=Q27)q7,R]hb?S*K*'^38Y/g]a$.ID-0O.qD>&,gL1/Po2#*,0-V.n17Kc86jGhf at DG!LY_,>#]`BrJiD+P2Y_!<XgaB\<:[i<;
+%[E<r+S`GqE45GICcI1j/bD0k"G="V=p&-,=S3eF7\7.S`$)D5QW/S74H2,3<[4Jl#FDd7-DN2)n5I[g&VYWW:D1;4$8_$:L=
+%i-o_dp8F]u.MqseGu<:tr)oqP5dL7V2p#(f*4F!Z4]:]ap$@Xbpt[W7C>\uOXntZ7>td;Y_^=*"%'n.u#^AFt(Lt;TbY_5d0BK9j
+%Yup#=Oue<soiE=/1-N0i"&\BF.E0+ZG?AYhUoFHmF:G0dT1L+)e&<G7F7S+aeiB#?c/MN5[l/*;^#AhL.[P9%/1*-Ae.Vsc4u.9f
+%hjT48EqB!Br1_ZS)SlUU>l0p;&<n%pSGYo`4Olk.%(SB7-V+JCV2dgs>TRK8CTUO%2\Du,aPRIC6-il7nZ$r'ZeLQpH.1m:-2=n6
+%G?!=da-(+7NK&QA57:lecpBB at EGf?hLD>Z$dn(0V-<)-jUcIo_)H!dN/+_\aI%8]u/-6t%?TAJ5'.DW2Y:`]"XIS!<32^A:Gm4::
+%Q4Ri3_h>>+aV+6<Y;.[baXeg<#\G_^)$0,5dQ,t8VTND>U^;6DZoF82XPaR`CWD,IIHH3F8>8^;>Kp[TJKTaI6*o`aTBr)t=W<8j
+%)*qtjA^^n?mVeiBi9[eu`$"'(cYOh_O]YcQG[;?.'i+-#jG5jr``]e(NM??=Yl*2?>,QBu&*J/F8/!bA^$Aq[isV2 at S9odI6GTO(
+%Q:N42$FfoQ87O"K]Zt)],\&Z)@s5.rJbubRlB<a6Z>k/5UAM=u7O`=ug at Qdo"7D`Xdomd+!.qM at b15$GSPDE0n$OGik<%ag*_`[i
+%aI_'DR-&qM?`cs>P"d<\(<!GF/=)3H0`@\/L!2J/3=u(b\7Z55bKj,7NdP.jpTqX?,*#78G^2<-ec1EHB at chp#?%(]Hb^W`;JQF%
+%ht$?J"+q(E<icG.O"FQLBF;o at 8(R($E6QQsCLI+%I/Vi38d._DD<b at 0m*L6ff90UW?M;dZeJ(mB`fj01^/fnkIA:R=OP.BAKgMg`
+%l/>2_7k^u(L[8?S(fHUcS.`MDDS$G,SfB";obO\!3s'(:C3E+=I_sGf2iprm0l:*m#irU82QMEFPO55<0B_FZ)Cr_%9rH_urMg;$
+%!7l!*Jg;]I&5CoP<$LXjT.k_>Tr3A-rDH'Kbb#!F3m!PtX>d-Eb%m=Un*3kic%8r%_GWoL.LHXPC>NumfO4?A8=<+he=8`o_OBFU
+%UNEW!YViG*NE'3Njc\Dk30J3Hs5gm]@SC"mk15a/F%m2/Q9<r#.lAmG'qJcJSSM+4dX<r;%)WaG$ks#@i2E%i=rkl4Y`t?(*,q"S
+%E$Voo`9%,Jra;kucq,a34``.V-M\\0j3tqmi:tTHZDYQ"ONlK9]+.#;RmYJ>#r!"nZ&2#C43Icacg.!@?/3q?'cXOQI.$9#!Yq*@
+%SC;<d]pon1cFbNL5=M:*kPWE]?M:3#=c[+:X7E+U8pMZPO4r1SU%A)N4"Egjb4V4iK;D]Ts5"bdfRdq7X-i[%-1U4c?`\#5JK(l;
+%J?Y=hWBW\jk"?/Q"$k8M5#e#ff^G.N3&U;6fe&aXjh'["Hu^kAbA4drnU9*fHn>\u]@;?Q5d:N+>7F4#R-0sEP3HSM"ocKX74O^`
+%=;uRTp!A\X?FBRB2JnDG`C at gGC\jEEfD/UVJT0G7R5sBZi"Ne-6j:jFUaR*5=<2%XQDjJon=M3f,DWs<M8<4%2X]*%^BlFdRMBQ%
+%1&PF4peldOgT]MS3c.3$,62S0&G]R/jPt1i=4\].=bjnn at IDss,fV*kU1(db/q<LSJjJ*FVqfI#]4;_HEq$5Mm],+)KYG-,?)p)E
+%77i]0bYdIAWr"Buil4!g=fLtPfjM#45s%%Mam1'&_^BLjlsu&R&H'bCEe?O_=Bjt`PDiVIFglqqLcoUE:%obA)VIOu</s3Og]Csu
+%UcQ[Rg;*OZ2<@0]9^2sWpUZMJ&4'/bp+P_/_u:o=%7Nbpji'enPE'5km<!H5Tm1t1Yb7>3;j.OG&Wa/[ERGIXDLlN,+\]B at B`r=f
+%k at RMT$EGG at coO+0ksV2Kof($E933TF_S+7P:5V$(+dH'1j$CUA3NXOn-PnA%W&UJ6Gj=R_*F'Nr3iqBgmNnd5#ut`oS-gT'JS!kQ
+%#C]LSFguI`!if.^[NqSW\g(/Dg.O3me50lGl#-V0STO%K>FRQ<!JhN68WDb(\R#=_o,#2#Afj+I[TiT8VHD(TeBR*Wmf?<e2A5G!
+%n6#bs3Tj#4XpS9(>fINi"P^q7cIHTuj5f<^-ErrS;Ir:Kc9KIt88MUHiGn7p!k$aA(t<T>fjraV^j+pPJUN`4S?+NKI0Y.B;!C9%
+%i"DNSfU9]qCR^NBh!o+=mRL*HSWPCG0o="a(Es>i`Ib3-^r,Vi:"9jrboO)V&r.b]aeL8Of#"9.Y2fJb0/SJLY at F<s<'?k`]>8bA
+%4dTNmkEJeX]^&H9;D09A7?E\taI1(3X,he&e92\rdTri^3fO1,aYVu<\]2*NrjlfW?5,m`&PC<O:!FA')^P;_Va^csPtth`(Mf-\
+%Oi3Sb@``U^apeubX-MYu1bEk,Qbk/Uk$IpA/7*9%n'a00OVWnXe?s3HJ-6J?4:(pqGq7dt;]lh2a7kbrfq+?D%q>M14iKUAfL8H?
+%^Pc[=$Z.<ffPPIPnA>Ur/.V2NhVDFso#>8g1bT1Sj>D.G^Zi%=EDW_.=h[mG3#,-4-&I`4<,uV1Ek`^HD+NMe5;LV]Dl@"GGUD\B
+%ZGn=4hKbf3)Qj_`Ktm828Q+=n%P!I=*<eW)0+r!uEaEUg\62p<ObQRsfTQI(n1>R9qTDsoVtCO.Dkn;;N9]lt:#>$!;Nga5c<-:,
+%`bkF"$16_#-_t*orjEKnW_ei;I[VNYg,#"1F5s]c54cZ(D`5QY?+B at A*m3(nVil7g8WAXpM5;M!,+`iV1lp]\m5I1_/GL-aE\[et
+%1/8<WMVjm"p5Pkir<e_6[N at J4T_?.LGGrei-1d,S&6#q(9B>R=D?Xh.Rlmi]a)5(gcZ)KPoLpO$,0;_(cnGTS.gj*DinR+%S&h"d
+%,.5ug'5XEMGTJq`]'l*!V=1g`!bl)d2ODce@"Ni7qP9Q33QcWA`Cc9GheMINJ"c"[0*.)\7<U1A6d$VXGINXZ5r`P=YOFU-BW:5n
+%U[hX1RAI^DK4P*i\JaSH,rbJ3ASO?j<dlB\$(gtUT7qI3C51\@eJ[NBI*L!)A4o*pVZ8eS#0lsG3I%s"!7#=c at 0i3=OQtRANV,6Y
+%Pel3$QYC=Q=eacN>2cH=C3;=D""i2*s'=s=5Q\>k+P`?(]mk@)_$2@/4lrK]e<cpoRLhu\=WlRPRV+&?+k-%RVI?/$*u&m9A%=_k
+%NNT7PRqb(kkP%tC/?&pdI;e7q`Xe#Tk4H[MHiPIFO<?mL$[1,[6>=m`S+J;!Sn*@I&X[M9EfjqRPH=FTk"@m1&o6o4?63rQA5;2i
+%CU]05I9\D_e3Pa[QPK-ta+p(tAY#t[7'm>eWBKK3GdIbRqF0.S3;gib3Y!PJ(r*&]c=qD1(Z\ptC&Ha`WrpLqqtY(D&Mjrk/^sT,
+%hfNRD-.8D3VsA-RYBQ4gib#(uc;EZfD$RgY#0;!PVaC'j,g3JF;l+XIfMkLBe<VO^=*:Y9pD,=XHngq_H$=XdPT)8!>Llm+1I2VX
+%Mt>1#G`h\\3bE?bIH2$1k2d9G"B[8j(?-3U,"Q9Qc+D)hk%5T#TmB&&_#";AP;6o+g%j)E$h3#"U2eS1S3K8GW at J3W95USj],Tl;
+%,9XL9'[NCS'@nh>E\!QY4T5KJ"<4)*I"_*4X\;hU@`D60)M-*@H84iNfiSF>K+i[Z_]hDhe2N=^Essos7_ictj#.XI`u_$COFqH4
+%<%<0u*^@?oo!Z_&=:3I#]aK_BRjZSafG*Kr60MbT:g6ie8R&G_mf!^J0%`_jDN-IN8fejcTWkO`E(jXc[Br7#>qFp4;X*V5`4A%I
+%K5Tkm`Ol='0sss<@S3G^=Qq-1(&2 at u*4(AmD at L!^"#*Vh>XmYB_#t!#P*:*=S.=/n!B,EY2k(reqQ^Mq)$tmmZ')[,E(ub2&63#]
+%dD%?U-jOW3Hj3sLef6RBm]idWpoVuE^SUms%Sd2tohTl"VLuPOR*8@;b;gq\Qs at t[j(D"ok*/0;%7eM)qBuR(q/aT6Ya'1Qq=rB\
+%H?7R"d4Mu>6CB at _Hr1/39OR8,->C=uae'[&iW,?<`B3Ur]_%j)En at h"iKbShP:N0$?ASna>()J1<Wl0iO1BA&GMW`jo at S+YoAGh#
+%q_aq0L=I$mH"6lZBj9<4 at m%:VTYdT$aLTTo89fN78Im;oV[3oEi\NGdcLTn7)Ut?01nGDQgOZAAr/Q8HEY<!ud5\eC<4\7EP0`f/
+%<X0f*0Mmr[McoTIBgOIO?9?7ckiBg1S[Y$^(9+lcjMhGs]aOKY/b,h<b731ChWiX`?- at d8+0D`^JoC[d#iGAq0jGCg)qIoKik^`M
+%m(Ys&3rgC;ckO<VkIM6s_<FQdQY?>FG-$U6mloQgm7ahM^e_P`*?B)KXCqt_'u at N`hCrEXZ<E(35Fci!Rn8qk/6Q1ngZS9W,%j(\
+%EE at cM$;E0j3r?a,Ul5/%q_^ZMC(WU#JnMGGpF":kO6<nkQuC"jWKAsR9;KC_Z&)NH%-LII*!^qjW'#O<i1-S)p*D3+;`d:.@@Mt!
+%lH#:u;G?&jgP&^8MJ:7.JLGqXK"eLn=S*P-9;mgu+uoFnP?:JFQ>>[E:a^[_`1D:(f at djf'Ofh=f(qdlZ'cI6"o%r;G,Cf*N(&bb
+%H?geZQiO^(ABct?f-dhNk_S>";F5jfD]eAL4Cra!Hir6NPW>UMa-eI(4CXXopA<Io at 9t5>Bh2YTG>e6&CiF"b1M0f^l0C]U&^,Ao
+%HqJ&]dUJZ.5]",h3lY]:?W^O&.(!IIVsQC6[o=)RC5F<'kGdQ*-F3l]V1caUIIbigZDGbD[/1Od^LaR)U3eQJo;)$0n at fZ1-n2j6
+%Sj()F2s$DCG>U6!gXHDT4sMLM$F/$DjUBO=NBFkjM:VoeYJ54r>"d9E3>9??gjcWZ$,-dK0-f0*D(HTj6&lP#V7f.c\W8ml105s,
+%^!f\Mc*6IA,tG[qJU.2[D@!5b9P!:AGF?1BHdh5W;ID(hb)@qE=fo[)8%^+2M#"&`bA;XpI:k7?D*a'\cO!Buo"-kNB<lOr>7`RR
+%n0I5i+KU8$/T&iKF!+Lij-*G7hCY"+s5iE+c'0BeRWd)%#5mn[0i^D<J7-:6c1f)f,0oHLkG;P+9_LBh[UAU[0`gc,VC^ObR::A4
+%C'up)mo#[!4g6a<Mi?B5&`jGT>n1&9q:W,]<BKs52Kp-.TC>I$OTVLZE:\*DK1`!0I"5I`F.nScXN:@UDKK83WOuJ8H^\.^-$,+"
+%\nMR\YPtgcAj;)BCVF`\M>14,7XfWKViFN!+-cR$Y at 0:Z:d8(.g$58+Nl$J=o-N!$@`(/d1mc;m#3IS&QpVkYTOrO(FOkj+bNpq)
+%nj)DB;VGh^mj@<+[)^Z'boQ"]a"&A."KF+n?)*((.\:G3c%Xf$(]urnh%g'h)9,SG,'-(?U.7u-CI<5Bg(TE`=Q/1Y?;H0*^LN;B
+%\4F%/n*\o&Rrh\e#D4ZtXP)McTZG$ZP>,';S187KGZNhj;JG2CddQdi;IH01>.Iu0^ahbV6ADs.9M=MSo4CJ-eXIqQ\#l]gdsQ42
+%he4,XY,ps\k-PQN![%*jMd%:2rXDgOZ]`Y+B2$X:$LDUIr8UL at 2O.HrKuK+,Rj%0>;`.,h8njN:rqca[nm6.V(gA7oP?pggk')uT
+%`X]\D6qAU)1(:J)J^ar&?WbT[WUj?3"A6a24k4moUhVZ/fl^#<U1pD$9J\cnPPo=Gn1n]7bHshnM3-S*DM;P1=a>oEZ346D]YhmF
+%f>a+PP%-8!V:JVUq%"f*9Kud-M0nN)?*Ku-eq6uoX8 at kq9Ic<`:=ALM at K06pU,&([*rAC:kK\E2/E]]?,mmF4C!`kd+jWIT'Ukl<
+%QA<[SRnP^jOm`VcI&`$Ed(]Ut=Xq[g`.4-)fYY/-1It)P3":H&0^%[c-!6aa-C:"*4+AC3I1PhuhqKR],]l4qA#X'=i#EME2f&YT
+%NWG:D%s7$69dDg[-u?!BO"/^d!>YtjK8)C$6d at r+%FL7Zj/^>1:Z&kIi3ToNKZ!nbh$[QHX8nS$\3s*bA'TI!\pU%&Jo2N%3TCPF
+%+/tGb)6H<,Osdgl#[D!Lp]SuCB:#H=%TDr8nr1SEoplKToIFqoK*uX#P,O:iC`ZssER'%T>V]5D[7U=5c=FFbCdjJO\0^,,@\8mD
+%YhP>31:s(S&h0s.":n40dh^l,1S)Bqq;k<$7VR&,Z/bp5Ifu##H]6H"BH*qD*j/RiCABA.dX]o4"0ZXJ"g6rq"c7ZPN3V)D:,3uc
+%Q at iI:Gj'JAWQY.'#9PoV6Ke!qB`I;dBZDF3-UU25\$^tiC%tRj8aQK^5&PI]8%t>cB7Sq4pcu4!CGL%Q780iMMHBE42aI6;k*BB]
+%&B,g=Gp]Cdpij3:b1H+3/[Bsu`?9X_fn/%!l<Z)g]hLquX'o6T])>%/`\F%G`:oP^CSKct<@ne[ja7UJ/6(Phbh"N#^@R2"kEolI
+%r?7%$OIlgp9E*me\.;np]L;Lg=n62 at eWFTcS-,`n<t/I"8RK,jWLK+?3Tu5'=a7-$6tC[t\8nCMG\pOCi[&q'X8l-hf[X2CpUt/:
+%h'qCls#,57WD<`WKY0<O28MiM\:[Lh@,XZcI-'9N$6?1TK584B2VmT%D"JnBlh5][#_jJhI1TA'VRQ/6B.pa^I]$6M1DPs,&GuGd
+%-g.=kjL',6:ZmW>LK!C\+V_RC7c:HN_OD7lgN2%?iTQT3[Q*!_F:6joJDHQ,G_/JJig'^SG_HfLh+"m!l60<53.EiD(q-729<$45
+%,"T=Ue8`j?=1[Ir,_R-DL`[_Rc:^7V1#]pE`OSC4-a7XX(YK&64loSF)OXWD:n/<0W/,qKCAGD"o';2NZEZGbQF[>N'TUV$qB/3e
+%Rr\-s8R6cU#AWBDh]:3s5uN:o;m7#q2&/JB"o??1ZEi3jP3*iAq"U^Ak!tq?4P`0fOsTglqlar,A:S&&UU)M3CpM+%Y at h>k5V\KO
+%!J!af.,k'!jlV6`[Rq$>[JcdrTH<qHCI+Ia\qq^Q1`931"GeDr2("Y;A!YG!lu'MXfUf>>(?hD]kboC%*;8G'Xj=QllJ.p-7qZN:
+%SWf&#W9"dtRABKIfm8(!M2;b@%Rt-)^/OhfVPHQlaAGO&9\HL3^O4ed+L^E/Vj;W2!=tVgVD)2t3CX$FQg+611<h@'q)#l6^H,@^
+%@M<g<POBY715XSI6Z.>!=K;Hn8JRCRr2L>AR_O4p*ooo!4b39PoBud;K>_g><r;C*PMZc at b"a.kit,'`"@@-/7qr-(;*/"J at m/CR
+%;;,Cl,rj3#3Un&1c^tngi-O>$9fqCB`L[LT554j6-k0J*dIir+6087*mjJX;5Q>E>$3h<,^c9D!ET#[LgcmIAf\U>L`FL[Dou9_6
+%:<A?;DWN,c0D5b!IPK[25&Rp184T7Fi_iCSQ5jriV\"jJ4Naq)K@=],N'<Ygm4%qrf1bXZL8HmVHZ/t!9B'sT`gqJTZIQT:6>-DC
+%fM:=DQ at TFm)aXnnigV]mEV8oj)`]M\nVPZ0M^mU`Mp%p?+4lfH".q<mk4P7J[Be^iT]a-s0Dhi%,%n61%295"CA*ofbR3ooMtV,,
+%9c6r4MMD(bWfR!p)feF``fA=PBDY6n,S;31lm=R3XaP.NRf6^7#+tja7,9G5N$HQ'BMjBkngf>7'#gKB76MON,2lQD5WR4ILg\Pu
+%S["`Y_sb#&G>?VW`>Bjtfk14B-C;j^^&?W29/tNPUF@=X%9&-sH8[+oV-G<UH1MU4g<obFf#upLhAKj&W8"N=Vu at g;qq3tVWKkAC
+%RYp8Wk.!*4K:"Vh/$+rtRnPYOs2iO-[YP'W+S'6/Dn:MN/%=6LA5WNidU8"goTGAd'PKul!i[uM(`RZFdLPBlY2a`0`JR at K-j%Dp
+%lN&X48B"3/k/*7Y[ZdmF?+eXYA\XUu'XH84(j=09jCXK!J%O)l,ecIDoT\Un8m%jMZ==_``*:fl<j3r7PXR[P;RQK'gjsKA-*FhJ
+%P**qPY]e*t)NU[@Yj6ZU`?;8E:Pk0:ZCKXheKrF\>^UQ*Sb-R<1b,,S\<mcnaYrtkbKob8 at l/-*ZUmK/?&mK^jTQ[SXD`&Y?4C![
+%^Q2eEb`Ipm]=H,+[Boi13X$r`9NY3'^B+#%<'R at _@4RUY\f*Qq>;97hp,KX3:U3fA#95Q%nWSO\Ng!Sd!![?[PO/Y6>n#\n0bRbi
+%3$p$p%n=XXkgr%^SOi!?EcnO%Wn8Q:Qb1_5UVG;eXHcCklJ)>:=IGFhZKCT98)$(/fok$I$AK%BZ[kZ2MNUVa8?mT0g=#kFkDC/&
+%l'8"+^`3%]\DO*UZX at hpjCH;^T4P?@8oQOX-c+34R-iMBYCpRR&RJt,1U$#^@BjEqBmmT!T@!K"]1cLP7^C#GBYGoN0oI<5MnqQr
+%d$!^P9"!^V-Slb[o6Fos0+kcsF-`GPJU;.C;OL7VV?cZdjW.efL<?&`'m1QE5^8<up+*=u"GoP<>E,q.:oCi&guNLZjFP6q[-8+?
+%D^U<\4+H<m$[:`<Q2JU2e&K&Zpqc=n_h1`ec^.9!fk\t,K&i9B,.-?`-.nEN-1MQ=H at 6N`D.AX>,n>s]d14%ic5O4=)X.]A!HacC
+%@1#Nhq9/G[I[A3Qq4fUJ2.L^iK. at Ok.9tFqKrpW^.Y\@!3-m?5&9?]#_ at pJkr&gAdHtH[=l5LsUd5O;b7ctcQ,btFjN)-5TON=?R
+%f<Z]TXFscQC2Ji"?d)_[Y.;bu/6*T2euEO\ZqZ*oOOdP?6!XlKqBI(.a=Gmfnb68YJ+d$0YK*'bK<c/1 at X8FXo(ePUCY!r_5=T`J
+%IjM[o$Zg>';\BmhM_RrfpFQR?]`l=X$fucE-HZPdFpCa at +oHfCR[Pi6K>i3Afeg[+pR^u3A`_B7:N(?<DrVO$7XcL]Rn.KO6'eRn
+%@DGgW[.VVTqI3D#T`Lb[V@^l`5'#UYc5ToDf:_l*U5(,"+s\^;a6Sj1DA.8;U4__"=@)44>ZjLj+8'Y!j5%FqSh)HlYj4Y`h6%m&
+%;&DAGQXd`4QIm>'>;j(JE9U;kqFu75\eCB"c*d9>Ct(]+^]RcSeDq_NBXFmd=Pd"EY#H\E?"d1$D]klR6p1S^[V8;6E1GCr7bh2b
+%;C5&XSEolhNJ3CE'))]M50=tJ'`OD,BkaWs;a)9bFl-a3`]`?j`[m_Z^+FmcC$6tO^.]9eh!VTG1=\7&>#Q`F5&mAs`Nj`l*)_'s
+%"Yl+Z?W_I(ZKn;*k_97-h6pT9XeAI[bGi%?-ZYuk]X2[g[cE@<l>"a\g<UK&8(-^h&H=L4mi/oWi0V;@F\Kq,P0XJf`,O8L6`<#t
+%%bH at Ko4?3kRrBRqXNCJ!\S;"O9o'kZgcKQalS%-C&Y[c+#Nd-;HG2%AdIkbtJm9HPIS<tj>Sn^,_S,O)jNj]qNMbhr-gEJA-c<&c
+%oA@;O-ZriA.W(Rf)2!+5O_X=W;f+N at B@#<-F&<REm0cnd<@[!P)W7$<ChW3/U=Y7;Fm_P7JMQ<^a+M@"_>mkTj?OWo=:_Zi`)Vgi
+%aE0j[!HeD>)L8ONn;mQK?7Wl5.L>#1?>;`([3:BU3h'Cg*&8<cnDeY%,7r5J*I8jF+=.u8&%fQB9LOE`Q:H8Mdr,!U=5e6<YkU)5
+%j1U)C\PBtENQQ%nOsWu>[f#_OVk.7ICU-?g/WNaM*.qT,34YH:=J:)gD$GAuLO>1GbIl0)>qE]s9>Ll/g4&_`<U_?,>JDa`e at udK
+%Q`0e'i at 7X3Yh7c7C^4o4#GKYs&UisA#'H_(9jYSeo(^,\-uY&ER)1LI.rEYqc`[[P,[7nNf1VrPdT0t\GG#bE1q\F4nseF_Aa2OY
+%]K at N:G>DZ?)$*b=6::@9U)P6&-japII#$Q4,mC_K$+P8/LR+B=_f5Hh!RO5aDsc at +_/IJM)F7)?ois&cTO2%SpRcOihRNsMLrpJh
+%'qF4,<b):-NRfp;BcnU[@%M'[esKO#<9G`PZ'/?FKi;KJ`"ulcPd/>rdak3V0N*;"Xq[G/-bkWf<;u0^Djo!<^u1fY9OAi6d.8q'
+%9rL2*8\?>_Bth#4.OHYjD3dtrAr+]rrLPYJc[IDC,7?>D5#siLP"U[9"mXRgb4kLOY_9Z1f,OS/Nj/1-FLUaOVB=F-_kq7Y<>j^@
+%2&CiR;Gk:;rU59V]E!DDA'\S3LaMaV0UAV.V^MA^]V?nUYphg!0ci/b.;R;>bU6m\]SkSnK6<'Pq2@<3YPje[U5F6/$&"%OY4\T^
+%h%\lOL.X3WT$fbOHIJI#/Z!qh->JjtCUdRg\dGhJ7&I,sb1;(7PER5T=SCjtm7<*f.)%IdhqFTCG*^?NB2gnfO`AuO$OSV%0"!:T
+%=')DlefYdkGEWNbFg#Trk5hA<b-Ptj0pD84'Ti"?-".jrW=GmO#:Losk=mOo(_g7SKpmT95(fFc&U:C?*2/j^:I;D8$OR.\S,ea?
+%nK?8VNX.i5#8He"=%o>S^2Lq5e.fZ5DE0;meA&!$gfQP"(TV6-;n:*F=-!0ER]<0"`0 at CK9Jjd"EV%(GD2<h/_(>rH85?FRGa`Z]
+%?#o0$Hom<fQ`Y+.f>Dt`?uZ=U(l3*@`U at NdK[QV9Sem^e:h`A&Vk!';\Js/<39iJEc.\ZM^cc_]#:83Fo*Si?8bKh2InrOYNYI\&
+%7YDlN?te[L$1-DB0M4KFK.VrH[?n`72H[dJ@*5EY&U!R^"IjL'nh4o(J2'8D6%4n:+GE<k\1ES*g([V&=1<4^jgXq&D'4[Zk9"*N
+%@`erCN;8p%3grr6q6X!9cPI\AU2l>V]r-7RQ?jsi_VaOXVSPu0h7G%:J_A)\.!U\19A_:1QcfTiWlN?0C<QhcCPb6tQcGHXjnJul
+%mB`RLm$(Vff]0!s_'$rLa-'%Y&d_uD6"c3=#4\."iL;Gti'J!u8k6[ddVRIq]$/"B]R=!pCCp5_+Et3W-`0]5eY:*HgI'4ZNL'H;
+%$=P(+Tpc0a+B-tJ)Q"b']fWLKKGOtFqtRT]B;q[F-D<un1jQqs>Oc3dE at M4cpO7t#QK<J=jG\^E:o_7jr>sn)guSJ"1F(A*3OmqE
+%!r7(ZcI>>Q-7A+MnkT`Y(?Xn-D0%+`OO298>2EhH0o_=k]D"%*QU,/C'kl(`4GqanORVb,TO2jlQm3^Ke9'Mip at E)do<"XUXu6<n
+%,Vkf4*?XPmSjTtXF>mpiJcT)iO:@A*f`fpjcc5FJc#c_Op=upPCLU3,<&2uob-]rpndBb[Ik;Xlhgp%J%QrcH1pgIEPK8h=R^d9D
+%C)FS/e$kJS5iY&1GE4&#-Ds[=ng'[L+mcWqQ\<nT0A.WhoFVYse3]0k4C4_uZ<MZJ5\u1"VSg7CUraMi;,]N-Uq,XA$,_e+>@fh@
+%eu7;3dFcP3B*$Ka"7mb8J+VEiaS\;f<nr;f>Pm)BFdQ.9s2q(lo:XNs^LC:m2!9oAb_'-l"QbQ/\,"!tM,Hq;/_9,lRl9`S1+2<4
+%2<dB7*L;Yd*LY,s*'"IZ#If,mNc(&"S-'[[S)b0Co]0`BErh\\KOf/%l8;)hc:QDF'?fR-eOXT0/3TBqjo=CN-IRBR&sW/#\3*>K
+%2JPg at 9Subdoh@@]-&:6V-&B:ZeHmkPn$L>V7]#od7+Kq8m`m`ZeG:OGOO)%S(=+/?qg'q057/Ktd at LkeHaDfqjVoHb.p8&foSe_?
+%oBCP7PuEQ<1a_rtCT3ko+ckt(<iF_WPBeo0*)LS5JVG_U,Ie!,FYsu_S6R&>X&OMP!0`=+#T=P2U-ek)jICh&gbG?ia6WmR*PU+/
+%pr6`ahpO]0Mjp/H5%d:jIFeUW,DAOZW"1D)*n,%b&oB+(gB-(6GFea(]V>-?h]-=0G9<eLf!itgqq+U(YZ,nc(2_j>k:OY4<P'C"
+%c8d<s at 1PQtaM>2462qd"o9sEiEH:B;Bu[h0?HOsS\V,?'^`b\b`[,P:%LVoW;Xib1er>Q$0'Jl6RK5]\fuW>9NaKUi.S7\*HLL7$
+%>?*#=.ET3gm(dZ`DYcmR@;L1CJgPSa8SapOG,Q&fR?RD`^]3)%,;8#dVKD;L\m1d=cVahbA\L:]6XSi_BJC-L)(fh&>rM7:Zb]%*
+%\fY_pF.TKDIbN./_>.s'.j"*M::1a<Ih-/C@*9'f:DVd\6S34h#u(6lc)\t2;sYn+f/6o"k;ELgXW0qke.h*(ND>_)+3]mtE_bYk
+%9rI!i[SkhOpNT7.OiL.9rQ%k?g4$u2o[,36esn[6V/9PIR]j+43XB!('6d>n:(3JuRkS:]+TYK?j=b)l=VErkJU%0(U)aea;Y&bj
+%FnD1Xk$]4T*h98.j97\o8!qt862\B#q-^MkD\)lAViS$FDeJn3q/M69flN_=9-a0/#Sk+aqB%mQmF[%_i575lQaUkl0M,c]r__g)
+%CbQs1%[,Wand72U9E)1RT[@BKXa[V28P,O;+>M*o'/#S$0*e7,=mn3_9a#0 at 6ZOElV:GsQg7Bt>Po<Gui10Md[r(L-F:&H!cupo0
+%Y&bVLBl-`;OS5LEJiBBko&L?gWH&V-nq(l`(nbhVcB"Zt@%'467pFf`O+hJ3FO'4fgiK-5G+3o5Wg*]?hp4V2jBsm%?^cItW^j77
+%h8u4j4PdJ$/N"1<*n0h(HhJmil9(ICCQi1T*,*)QC7$BE?$`Nm4uZG)X7";G2Om.H=Y`M_7m$7_<R,mD2d1,VM&9PmUXc at 0+&F]D
+%Iu`-nYDbkp9mo^i4="sHpFj=r^W_p&f]F\_baEaQ(,CW.&$0rbBh;SIY.5SrjHf?laAVE_D9]e:ffnN]Vau:R[Qk?XUBAhb*F+Hl
+%e'<\=`6Z9>cKpbbZ*3&UKB4'XF<giM/7M9.7K*2/_9!Q@$CapW;)&$6G;or9e@`&e=Z!\RWaT5HZtEK\F at 6Z:0#Cjg8S[D++`:1h
+%*>Z_G.J9"kpjOS6-a`Nq,$c^/Vck!lI0CBcL11Hu4E#BVYX$i4Z;$UtgDK8keX($M.^4F57'9cK/CT8Ob#c,EI++J>m6n$n=s[9N
+%Eu&u6/ZECcP)"&LHR=%.=MXA9-Ku;MYL0^1b\Bp!?$[$"J$s(3OPjikgD#2tMW9QD`^:2TqFennaAP]51<6B0koWJ'^XN_YCL)kn
+%=/,[]GhKB-Z=30!T'VksDBgREW*E49QqaKgUnliL\65LPlc>Q#He4rBbumh].3aTEmnT9X'<*o)lt`&d-Bo%I]U+"$:H;DsA+p[D
+%H%XA+rmk`5T0/F=]9ZC;B]e)'-[JGMYZ8DNCU`][NH,8q+W7c=M#;AdiA"&Ip.Ws;(COlZA5^F^gMa=i+S_n[OYZ6>GD[oBA[M-E
+%,T^a`gB7bPEi;%m9m at oqE:5ibait#sK89"eZ"Jj>Vkb!VV>ZsSRg]F,ePPfBWD\D^SRqFF`"?d7\Um[D$eV!,.cmfNR]B5ol_rl3
+%Fq`pi-tugbU3:=MZ?b(k9n'<fCg/3!0h<asLXJ:,d\O]abTsY3g6G[Y7aq4s.DCl/r=Q?rI6]MBRHXX-mEf!ne)o`BSGV(\U[q7C
+%L1PJ0C5UV1h at K,RhU/6'*H.5+ at HGHif,X7NhM):3.P[d+0niO'QUUWrePJV]b<`c+'YJ5Mr)]ZXknZo#CttABScHm[SDQGCb[XV?
+%ok#;VnI.r@&@X>>EuFSkVHg5U,l,'+L\e(1'286q8l!X1Bt]!Fkq/Fn(V2Ft[?76lJJ)NFS:me?g6Xlh"rS%FXEho;4S0fg<)X67
+%oX1Z9PkYheQ#tRPi3&]*P!V<Ea<'"[i\NI2--O%eW at I&#,tR at 2Zgj^/Q*7nDP at b^)H_\R)rFlY&.5V)H+,bK&?:dbV)EGuf%XJL8
+%;&#n[;&8SA%k4bAe+4l02$i at 3G'GCT!Zg.+kZ66c>d4'6kD8FaE'lu^4#Cp+:=;+GXRLV5KVYE#`R9!_;"Eln[D;q3$>:'of#AOa
+%GqaL5d(Od#CM"$>)p"IAT<70aOGr`eF!PI]:nC=M4rG&LE#5UW76tRimmpn2#cm34g?Lfk'O=^aXk<%P"rp1,3=CD at j[cJq[sfsa
+%FLL+W04!*[V-kdo at .^q`84ffLF<T9L!t]==\0O$VQ.iR+C8"-m(KgX+\4p<$!,UlSZN3a+<KLR9WlpVU]f)Dp;o!K=2:M(QaRi at U
+%Hiq_gma0<h%:O>.7X6U8i_RDX26knfk)sJ#SaU!?^7g\S<ZV(%-fJ"F1d:B:nK1DtcG!l!eZqjdqinor0iGre%/qQD?rfHY>=YmU
+%`PhMX;OZ]E9V(&33bc&M*%Xcd:'0]\!:F*`g2(&sH*Sft5[Y/,KkC`/Xp@/U=FFDtCW#"1gEk76?W\D[nc;8t(4a_t.QA_?%c]i`
+%B&C=Q91i"'9Ha_iWN=$uS%MbYo\OH/fJcK3l\I*O'84%NQ=Y?aq3<DXhdAuZ,^7Cf+M\V#]_uTFh5-aGo^BrIbdSI+bHKMI64O1$
+%C$oq?9c&Wb]""`(2`e\WaXFP34n$l7##TJi;d1#i]3#"R"$E99l??,;lG,u at -$P6"HLff[cRU^]h]N/^,#SL'_tkio,!d^[fk,r.
+%R66RPnPO+j9,N=3%NA@\*l&L+a\eCkD^\tC)SLUu-)D7ggKgu.(UV at a^&B"?4gCu*SMhM2[r$OYl1sM<Fa(B*RnBEOfbjcjqD?1:
+%D;HPB2cmE5V2-,Jqmb"qEqp-C5-3K9oK^<iM+"6URVh.G(l3/DjdC"T[`PrmTaWe,;)P2i&U;4pQNHmUY"^Q/20K%EDEHX+;Rr":
+%gQpXIS(_K)7XYeo[WbM1@(=ZCi;E at 4:/gaHJ at bYp9-#kPMkcIdqG#Gj%:aXRHDoU*1fb"+0ET>/R1U at 5Foo=2Fk-e\)H[<r`AHgi
+%8!0f,0mE`JQ at 0Zrh[a0VDa)muH.3$f3Eu@#g-eMM>"^ch\5M=Bg^I\;)W<gD/"L).SKI<ufP.+gQ7luQ2c]<,jX7%5+XERh6V=`"
+%5,LY;:>/-Dn7*\_rRf6>A'Ql).]4JrYQI'<EcG[$^\aH4j*'`!9=qLnE_jU at egYGleXbFXgHP:d'-)&dptkU;fVbe]WWtiW*/OND
+%I8W[9aO^PhGl:)fVT#bZK76 at .JQ9kP"?pT9F[FjE8I^i%e at .:ON)p2tM`Pq7hh;eJF82rL&pg,U+<K at 1FI&Balo@@5ITmP,QNXE<
+%Q1JohVFa at m)b.:/M1#o#$*&BKX;%Km;6Z\rkB*-/apX6^5ul8GMpUdC=#RpY/M5^r2H'T-Gpm$7[.ghIE7;D.FY-=\2jGq8Fooqo
+%VF'AaGVVEW-'Xqpi.^90<C/SNnrLliXk4[#Qk#s`iOmiP4dVU^au191F&!6Q2H;]Z^./:KWd+)00%64E&T%G^9<&J[j><+ll1,+#
+%VXHX>""WfeJ]SY?VD=$?daXUFS5Dj&2ga99Ki9`uHcZ]lG=uCMhI+4GY`!j*`.E'17*UU.><)2>Aj>LVPKt<@1(GOo[FF9S^rPb.
+%iMM<RhK,,Vh/Eg.%e.fj!5B-Vk18EbnnYLaT("m`>M5ZHgLN#0fV$Jp-iZj&qkV-sN0X(Va>pbVo<i=^mQm;XDQK'lc7:gr#rBY]
+%)BJa&-KZHu=[b\IGmMG64YY;9'fDn/l=':RlKWVV<q7WKZ&h%=hJ`5$Gsod,ag75Fac>T:j<JQ%lT)5n)fr7h7HCSbk at WZr(!`_9
+%,^5QUAu`Pip&%OW26#HSNc#pE$VV)Sl[_0b7puK6)gJ_S?uteO5Zd@;8aEY)O=\HUq'8"orK)C_KsJPY_s.Db%fkukOdQ<c&q*@D
+%$/E:eghl->4K(^"d"S$Z`ltQKn]Q#db\%=!ICZ3]_(Q,`L@/s;3JaeTq&)*a4W<\7j)dOJ6h\.q_HGuS;0K*4L:h>;e2)1"3AAam
+%>`p)#F`(I93d*#jahi^_!]eS[TtJP:QZ.Sd"=>E9QiZ]D/(:>p_W87p\`uX at M4V8WR$QHt7_2?/;H)Qgk-;D,_4Aa+^t4Ji%*?m\
+%gYg)[q3UInI+2o!<.a;;\WaX.M9.n2Vs/gad!4s at nc@(Cbi(_1Pd`*8lmFPW3Gg&td^*ofBZ"/s8aRYh^0CH1]UX<9jl_<Dq4QCE
+%Oh\'L at -KK8lh>i=fB:-;Ir1is/s20-MHc7s*+`&Z-Xp@,o=n$0qtjD-LHLQS,grOb?Y?EK.:p!-r at gXbL]6T22T7GNpCu$:?l0T&
+%jY?sO;ah'6:Ya3gc4OH+S]@%ZOjj+nU5hrap%("BKa at S./QIN[cGI_d?ls+3>bU6]Tb9"1CZK?`_`e]GG`Equ!J, at noim"`Y@#$-
+%5'SL#Q"'^"m3rtX6Jh6(JuJjt*Siq=MS\2GbO?RGmuKdcj;([f'R0b!opm`;%uHF\C_9?]n(!%a9pjp$Yqch]j`BIBI`I]@$:N+C
+%[<"#;-?=0moP)YDP:$#o+q1sKCakuND48L>kDUi!\eaH:1>4XbJffbrXb482)4bB\OUH;-0m;KipAX*tBDjf at Lg7g_1h0kQcG)Xq
+%$0c;<k#f@/#*X8,%++=IFW8D);D/[>(dot$"m9f:2R;:Dkc$KJ6lWe0CL'j-ScfKpcC]g,*/lrK=bW!:o&k.4A?M*fP8[A)#1k.=
+%4NTsMDLls+5f*]l/nJT]A0O*Tg4d0tE_>[XC&lsKNIJp<+;*bFH'5piDe47aPu3$IA$Pg6Tp<H8gNB8\aN']eM#'!lb-EJH2&[r)
+%mn4k>$V_uU+hjN^P@'jS%>tI]\u^$ferAVPJ0q/Boj`';765I-!m9?sCYGuQ=C6b[_e00q/=7%A9CB`4K0]kPbIJq*k3=-B*spr!
+%16a#[]uT'W,Vg$NHWu`PZnYUOOB`!sVdAtlGVa<VmIdAis733r4,ApFbm>SDmCd5A,Wa=(R5 at e\%@sNI:-nR3V0;(8mWM%\mk\Ti
+%(bmS&3FZ`fp#06j"MD$"eX8(,[;RVm.5`oP(\6kT5N#Vn&,BGUD"`?T\LJSBDK^mJ6Z3#bAC64t:A)"2Rr;qaE8bjAk)R+-91ogC
+%#\[8?hNZerZcc/?P$?i4hnm>a_11JlEqW7cVCa<4/2UFOF&0?0*;_LS05drOW at J%$4qi_ljK^RLl3FD^n(Jij71\PF>*Wu"ZE\^]
+%\H\QQq68 at E3[5.#Qd6NPo+LdNlc)b$ac'-,n1`cdGQ4H&mLgeS at 2o9^f4cN1b/^buq>Nki55!uFGI,CbGEjbB+:/+uDqY'L?ko)*
+%:\:3gX'T>C4#a,?bHf\J%=@\$cQh,_GNSg<O4Z-g4p6*_J5s6fb3u]2Qh7^3#c/a2(Ycg^6JGrC]A(hEjH,gkB6#'/92M>G:ZW[]
+%%.j$'Yk"Ol:u<gh?g?(o11b?YS^QG#PFm%TR;FGOUoa#q!*oY-9E*T>hN.kaCFf)/P6UB4g7pO:+*;ak&&6B,-<[biXe`(\O=F"a
+%PJ/rF;/AOG>g?%jWf<@U3SnSKk/Er>j/;:thhbR&'WNQUWVG76J&2]'kF6#6oK'dF6*.XL]"=&rB'Mqo@(^Oi/>;MMefcsj\>S]c
+%c0iC*TYN\%>D_JP]-M4HFjAUd,>W2[%W48EBigb9$#g7_$#iSm.[<e-AP&+XqUYC(!r_"Fn"'_`5gIW4KB<u*ku9gfOf8Wg#H/-6
+%jNg$\nbQZ!NR'cN._k!?+fipPhOs;lR4XI$Ks-mJ-!2Gj,VD"G*JsEhI at m(fC9HI6Ah3!$TM0R,g?(r8=)JN8`PB&_KI>^2+M@>2
+%p74<S$:WTs*+lu^SY at X"jKJWs+HF1aA:BUJ\HSm,W]G. at go&tA+ID2mi75F4_:&-Y"+DABS)nQOo!,qqFA8#\`>]Qo^@0Qpe\e28
+%?,fYFH+&fUd&hjnX&d(iJNWnX;b at 0qZl#i<.eg^mL>)j\8;6[GIc"%$#&$2h[DlHqiK(Y;<h[6tVcb?(QCB'*AXe[(jc3qFEFB4l
+%9<B8V8SHNLb\9LBb*-*4>B:Z\72Qc;2U#[Vbq=5*SqGEc^.f5(n(;*#RK=!lajCB,=nYFD=m^m(1FPR(H7!fjjcMt*EBO5$$I=Wi
+%ol:`nPc*XI`BmPf4Xi;(1c^J:j`=6uV-L\V:LRcj18/otgTt[!2qp7Or(^#:W at tddji#iK9k_cD91%&4Yr>365-NCZ0fSOrliET`
+%f#^sik`#+pUtgem6[Ae02$IL8,bLl*Bo7a&0Z\=ORf`F%8k5P-JoIh#`c>PjGkA:U/c8XJ]8N7e*OZr/H/EI72Ga"2T:5pZZ-T*0
+%\jI?hRD:0']RPgV0,_Dd-"Ze_dnS#U]P2Z1Jn+$^9qp9,_QE4lg,o$+rJH%?AMd=Uarj*dYPe52@&t<1V35`(3s/Fg5bLp?Qc6)h
+%*hfuE-u[`9LMKq2O8#$bF,2q1Z%ZsFM[hLKq(P9 at WSJBPnb$ZOTr!EmjcgMGgg:IVb=N!#bg!l3-g$lZFu6@>Q7$o)-H`sM)c"G?
+%U7rDDULa&_O*isr.DT%2n_ihp%!&Z4rO7W2"KLSOX-nPR5<XB&0VkG^.IqXu3aHM.2(e1`%R*a(Q[mCes#W1TfaYi/TB!qV>c5`"
+%r(5/<5GlY+NX>,i+YmVU?8$i-.QQVbpcZ2YGXRCC6-ba$D:7Z,Ypd0._9FM9D]1N5f"322925uRF at Uuplt0R3$#P*q`nAnsdb9o:
+%&uE<iP_>F:C9uUS(OjZQNno%FH"cCQf5lDOeNn[,7$6BF'e(jWbqLG;-`WNFg&$)d.nW`h:QAgj9u,B789Ilf0dMpGE]`'`W5WYB
+%L_t%#i4HX,CiY:f=O1>,$5dd?prPIc($E1&Y1&cJPX=JYCGXssl(d.$q30YH8)1ao,bO#.7*@/.;rXY;WHUNhh=W1:]AA1\!@h>\
+%<'FU"Yi1mP[.?NrBD932n$8?dP%QKi`PpST*7Fg]G&u1gc"/5BU#82HIF!V[\M?=?Q^^c^YHjIa,Yj6:9o57(DKrrQ)lAB=1PMt"
+%QS[C[D7tD>NoQFM[hS*83FW:aS^(Lp]OgRtRY?=;_6BIH-k3TU-.5#;X>s$P*5>`\0(PKC`7D$P4j,ie"1LG4aH`]p;BWpeh#*IK
+%WMKOLK6sW?$^r?=BBmtQ&ilnk?2,,8G)R3*=U,o\/B+7TX%*$)I/a6]XlUKAkK29o8$pX#4)rBC"lpJTj#bk"5)GDhm;thLpNeOh
+%ckd-Zb-OXTOgh5l]H6B*$T_\d4h89f"g)"o%9qi5&XZOYZ#sqch](nNcENc2DOt#q=[)7k$_ at bs?t)2E74TZS+dM-bP)-E0]jn?R
+%I'lErbb7VKJ3DH_#i'ohJJ5M^)Ss4%$[Q.4N[6kFYoKs.CcC#caGl@@-puhV[:>AdeB3is>si).OMk:SFU>/S9dE>2PtbQb2pEsC
+%?5![sL/4<$_tj?K%J$^Gao`-j29f$VjcNL\@fu8(=i1X>)m$Q%MS, at M4,X86o#BOA<LeM1n/fl\UTR;XNA_M&K-Be#emXT*j7-FA
+%#sVCu.9L_1XE_4^S,"b`HQ1[rDKTS!V9P*:@'I5NI2?/`9?I`>V1unXp*)C.`)tA[CfM?,DUl,O#&&%>#22V2BR:;2ZBPZ'b4dro
+%<'r@``UVaM/`.B"cfJhQ*\+e)4:?p%`FJ>^_\8#KbnT.Z+!$S3G2RhI21pV3T#BCYs4o:9pYOF#25)U%BR,djo1fth#!ii4R"^L>
+%8h"&AeEFH(.Fs\SXc`j1k%PcljFQb"qsR-31,pB]&jNr\Ik5 at UcBB:_``U,F?!W2#l9]dc3s1___tS'E3:D(T3%Y at lWS@pY\8dE.
+%C!^e'W>_%XKgd]ETXAiJk?8g,5]Bj^qb;BI<lF]oO_jL[/K$#%MM`[tTDFq\]JC<8o-kJRDf92ip[Rh@=g)N_IS\LM=pj4FDL-Ro
+%I75iu<,"qo=*%].$XQ!!I=#uuo%rLUc7n\7Z.VQ\@Y(KZKA?ag9Q'XTX"(4CL8,DAO`EN*(3d"BF61rKr8ef>Sgb6m-J1nIpsItk
+%-tB.D"I-V;)B:3_P;mXBNP=8'$R`icm7DD;/"T7'^P(6&)!`>-gQkFeT6eM0_/!B1e^-gC.P.rNe[m85>%7B]jX[/*TR"9rs5fSp
+%^#n2c at X&1*h6qo"_T6Qm!_TX4 at +JFP=o2>A`<X]]q4OA&'Hq`KfOi$N:Hb'-T9hh=-[!O>"rH(]OGMmE`'((Ba8);!5GCcfn)I^r
+%[$L!3^*)UB7[;*kc%W(mA^,f/I'CtpA"Sg4!iqfM`J398A2NC$OW]V*foo:6T at qJr2^p8"!0K?6XT/"0LsM[?a3V,s=\4)7[YG'"
+%nl3n>?rVU%'?Cd(\(t;u=GKpNkFeHAMd+3.;bgnI;U[a(p0]CX)"L:#V;7YK*Lq-;'I)2+4\E,K at 7;u.qrYaE0%t2)3)M]4W_c!R
+%+#(2`N][3P=]_E[Bbh(8#\Q<bTP/[MC!(Sp'%Bf0kf2`IFhO-n!mu>i#&9kpeE=:qEEj4Ta>Z]!N\YfACuL&UeS]#;T?a#M]O!$]
+%Rct,#_do\lYV)Q3;Z(P-(""id-"+3%4_8>\YXb!7a(c&cpfmkC24,c\MNH9ZO]P8Z'6oh[jEeeF2:lf>Mbd:gkB>@_E;d at 4l68:k
+%0W1B_PJl4Z9UEDMMI*u4P2o at Y_>N)D:7dKHqQj?B%<,ckFfkDa12*D0XfU*;Vt+dWc7`7UUs@#>N&!k!j/0#dF)g[Ens]G+(LA;T
+%*pRd65<i2Y\D86Lm6RI<ReNTS#u1\3B[,(TT?XtA`,YACPD=JF6T*ecff<IjeTX:1FjJeR9M$),1o*NEr-"j\*4A+JgWiQDl1p:t
+%;PQK+,bT->5:S,Nm'3D,hR$lnZK+Q9rO;GO5`:fE3>pMJ<lIRH00nNc=sJ>fN!<G1=Y^=$SMJoir>l/T1M5a-ZNm\sV at pA-E_fV>
+%13$bH*VYZ'4a;P]nT%O!^1TOB^[H(kQP-^R0- at gBlOIo:Xd<:X89J&_80Fd:DHADU at qC<:/E_ALGNJKS[M>;'\2#G[Rm#(2IILc.
+%[95FlX_h!=qunC\N4/4O2R3XuqJ[h2hh$gBrIkhZ[nBRpF6S>9VW;uFr.gb[$X"]K/6:ueEKq=!KbKRG)jDL9jKE60fm6>#:Mp+m
+%(2e*VVHZtH=b,PLl(Ta#/93H?.]9g at 4e7b[niBhZiec4%"pE[Fp)#fC3TL;@o-Dc-fN$_:W*U'F.W))cq<TE;+Jk1trj+&:H=l=\
+%FcE(VG$LiVCmgWhm@;ZPCbss)5,)%`VF10:J?&Q((gX5Om[9cG&9F$$$tF5u7P-q(I-MfB2Ws]sZaaHU6"TT5&@CNkP/%KRGjNk]
+%50>nK#8WU2;%VBmR at QR.^[%.'J]R<VhUU=Mb#RcQ`l3:'G$ZVs'7LKn<gq2<[i5 at fe4dJspE,k=g3<>V6m+ at G%YPQ)Kus^4hdhF+
+%/=l<`qT+]/I4%Buq4*<KoIDP]$"Fb$R9m1O0qd2sT3*(3D+)pDD9G"+K*#::U"<;c+e>IucFYjB+n9rREVfkcp?"s>S:ZnjXS"O0
+%$=AFT(['\g=c#%Jd)M$<hZONLMPnsY',^J67dAQM at SKg.X;N>nIn>"oKAAXA?U#9$$N5`3iO at mHBIM"!M`.XsCP$:A>VaTjTGs[A
+%^`UYH"7#J60?0QnnP"81gZ3oBL(OaB`[=C'NM?ZBLJ$>G`=@oE:<._K.=2]n>MlEU.gIOND*Y at QM*3^eCPsne0U.0KD`\hE^<6>B
+%ni;5UGNAsJA>GJpKD!uGTJSg%Y*/\8eT%68f5K_5VZ%[d-tB`$r]$#s,gP)flR$Jj8Yap2ThDX9JTDnh_S1904I)o[[lTsH3BZW7
+%,hqM%>=q%I,9i-km$h7ajNlC/c\/9oeWH'J$M3)$G*4,PpC&--mdPPTa?a4i\3?Kd/8EB9)<rK7i('>S26;9CF"(m8q(k<,kL&NQ
+%"as<G#S)3B\[(Blp>qXhK>V$/WCc.u:PX]d`T<*@T98I6'(WPX0Qs7<A,auQ#>N+Sf%nL3SMCX at incVGpq&u_b-NtP)8T.Lm.O=p
+%2#C%=?j.lUke;n[[TL;1(Ps--L<U)QAnOhU0pkG[9ke\,oMO_5W>B[I,RQ*Dr9'a,*Qapkj-'F]Ed^[!$1Rs+N)OJd^,J,P_=?Qf
+%qi?a2ZCeeZ0e;gnq/Cfi"F5_R\;CF]9"C=p]d[Qq\F.E`=uKkO.-*09%k748'6Z*`*u(^.T3AB,WI7Gt]kRhoGRa&b^(*5re$k`\
+%T3%N=kg*LAi6]HAA'<?F5GnuoF"H0dG/t?a2[0JF0FP:a8mXT1/k)8O?I`s?,M-u6[)8;7OB<d0M#B91b.h=/m]tSm9J`fAQ@&eI
+%;h>g)+S_O$/eaU4m1s at C<\oJ8??/h0 at Ct"p!Z%Ee`-8)c@/iIc-*K+Uj$d(grLLQ](qJF,Vnb8QWc+;DcH=H?$M>$L at C,&co3j#f
+%A;=bT2VXGJVQ7)p)]o\1bEhB%I\rVUF7\Hbp^;fajOoARjT$=nG at 1,)q)%j8\"+Jm)9+kL,/$mXA3tfpanPV,[Vd13TCur1LYGuG
+%i.bhY[HDI[OaKTf87(_:RuDcJ-YGIti2Q;BDAl?NJ9"h4+BUl45+m2^`_F&7knSCDWVJmS`"J>J^Q at eEB'60(42I'_8!;7p=T20o
+%T4A_9ZI5KPqm;Xpn$'"_X at 02[gpp9f,<U+G):%hXVDoP%!^&f-iKJ5UaY5T5.u%p&Y&gk/@VnnK._4`J5b&1V1:&VJCDj/;N8@%M
+%q4Te\"UqrBIRI1^@sU@"SnR/Sik41YM$6T!@3S*gm^V!^Gl6\BO[WC)IP=0]:'1MGfD77k,/q647q8$[]3-i6F72[o)[@uUNkEpl
+%a`2&j&0>ENf\G:*FT5cD#(!)&IbB/SE?b^*<X\8P,LD]EPK&.4/Nj-%<9.$!50*Db^+nb0AEe^r>b_"f^'l&f;fs2XJ?ra%*mCfB
+%cRO]qg'CqOQH,PGp^/>C[b(sACUfanRCHFmeD3[p22JR7H#A5io<07#9.m;"O&5a[9JLUT.i1_Y`]NCZ-]3D7mIpVA,=T/2?Xg:L
+%?bW?M"/&W"]iIL.Jmo5[51[>McWNrkVJ#FF)bZ4/7iXBd^c0[*b8gF9J?ddJ(dP0]8>]m9WqcM*978&:>+J43P7f0D]ccE"CToIO
+%k<4U=(_CV!l2r at LjW*'t#Z$K5<OIC!ATCpT at WYWg5[ZWWT*E1/Hu8_c=[qM7Qg>TGRh'0BDDO at _Xm^>`=Kh,g=fa3$pY,b-<Q+.4
+%2MADMS)^'JX.K\+-hm:BDHlbX<Wm*Trt_8+f`a="qTVV\+e:X+_92_,)RFX7gIul3'C_DZ0-k+EN3k!3>aY9sFlSIi\nX#PjrQOO
+%/=T2bDM[*L1=rlWP=E-7g+Ej^."7'FA<WOC7l3a[P#ldNj=AH?)t]ljUdj&O/q+mhRO8\3+e%^X#r=@2D]nDaV<u&ZIa)9QFS&!6
+%WcI14R%Jlhdo86JWPEW<^4bu=..ku6DCO5ZZ;E5(Fnu,u[T[<9TimC3d%Yg=q'M)[D94$ur`3sXge8.]r2)X[fq$O4r%2*Vr61?E
+%Ck*n9-]NVOMKbeQ(G*lYlT4apXNlYH[F<p)9na;"K>`YU\%Y5h>?K't4.#'i,1:cPpk9TLLPa>(>G3'^[%EW3'KW5N::iF+]@PIJ
+%-1=Sg@$79`gN*0VV)d4rI:J]qFfZ&cCtOCIE at V3c9p_<1kg'+kae_(u`_O"q\K1TEhbM\`;S+GS#id65k7FLU4*.3h/^^NWmBH!4
+%0Gt6I;0jGn>]p:'Ra9)c:E>UB(4cEIjo"5a<%K;9:2X%Q9rSpMb7#2]>^(dk4?qh,P]"Z#%E,3M-+YY6-f<><;U]'a%+=1eeN86u
+%p.8L3gO_gIM(2)_g\4PH8.5t,^S\1M=`1ihPtt1.7H:_-Ug4O[%sh&'XnF3koCC=CL-G]*M4 at SlB3k8)Sic_H4Xej!ea0Vghh+.6
+%Xpt[sd5U7L1X(=)l^&0'V/5n))L[M(9.H(G_m[)N%MkX[q9W?MF#>&bU"TPY-A:;sPtO1?$Z,7S3OST\.b6"-^o$,4$bpS#W>.LP
+%e0E1Ym8c7M:=&*j1t?c1QP'SC-ODG6_:k_USD-G*[kccQ,IOSH;*EP;+Q[9B`^!el'jbrmC:2$JH7R<LR>-'>*)I/5FdY>,kBYD2
+%nkRbek/PABBseFMGhqJ6<P[G;+&d$)HB9a8e!j9LjYDtV\bq<20&4O29V:)-F!W2=Llj&kR!\$_]JFu^V41n).TL-0jPW(hqBNK<
+%U3h(qrd?@L57l$8U+doL-.E)Amu4*i]lSAlbT>Y4*B/;Ym%,lLLRm%dRurZINJ9_,7TQ2K*$&AGZ/Q>5T"O\_R;6%f9t'S4q0<4C
+%"k3%D+"VmCH%lbD3XQd4`g!ZaS2$7_01!=bSpiPGL@(_<^VA!m?Nk-2bI?/./MEmK5ke2I[hF8Y6qUJtV)f)HLfY4#^>=W"O;E!$
+%+YO8d/6;t1-AoRe_e[o'>YF?+^@OIZc?<%`>O.I3lQ`,a8kR1MG*m5G,=Oj^5AuTGfi<KNcFa0??\'?p'!Q,Gag_Hu,"%C$@f*!H
+%)5(r?PmpaQ1AGL1]6?;Bgagp_\]+O(o<4'4b50J7($#bM+1uRh';r*qQ0Oq$l&C5&&Z6RDnFN-400o4kPS=.lF<pS?@7c#JOQX,'
+%WC;deC#c6A at W4ST$8ma1AibVna&1V)NK/(iRreh"]YqcRXD9K(f?g=2q:db'o:AA:?$Z:75-JT\$_k[obd+NeRaM;9P4$];4SV:*
+%C.tUPjAe;$O(L4t`3?K;BJ,oUm-s"6^KJ8(Eb>fO);EVc?Z#D_WjU6kEbamT^Pj at hBS[[6%$G"](WD;*_`<P<:trETEa-t&+33q5
+%35?G)+`a='&tK!K_m\M?]T;%LUsf39P/0T6]BVA\\6mH3:/&t!`IU<kAOW(jIiTo90$9L%m3t+!TQ"rc-\b-?4.)bG?1NA_IZXj=
+%2sorF[+,6!'j>Ln:;-sE,q-5Q\6,=nKM/Z<FlmLE4]!NfENHt`A0c at gJQ<-lDGqu<.L8!@2W[[1=J8t)7$*k'K59nq'"iK@*BPt*
+%og&iL0tXCkI3[CB1KYOdC9K%"q<+%`0[IkP)Y9m!U=Wj_-df?j!YMhGk)ZJpqDs<FmO9*M3KnO(>4:DUYgNQFU(Xt/>o!>"i5sh:
+%KUe7/#_N*>L;B!rQZ&,G54Bo[$MQ#- at UAe1'!lWeBf]3Dfm*pIbd][#`?`LPC@*j?hmlqKJ#,];.8;l2V7ljHb^8?OI_W[b at P%:W
+%,jQG1r]I]X7'(ZA89k!%\[c&s:oeB_4u'`".XX4nl\`V=.Ks#3cAg/HG"0h9eIG`13ROHq)=g1/X1"$[:Y[Tgm:HQ%;o:>biK'BK
+%oqoGD'\_67eAe5)&;OQRhC(!]id*:TMAsb,A$.8n(IPf'=8Xpq34UNQG*$nd(cf=0Ijf-/r&j`ICQprFL:JQ\M93k*6)LWaG_kE_
+%>@^Lk3iJ.&(2istJaZEW1/HT4qagN%*-^HN'H0j?DP:%1`<'EbGNTg*/]HORS+qi5q->FNejPUK9RBo`=%@pQ^$CbUOiMaRg3E5)
+%%RpQBR*4SLe9e at n4@l2>^^;-IB!<mm/p9#L<>>u=l)?r>=4RMCDk2PWH>.b,hOhnclB,'.>EUZhObNT#GR5_$);$ZU#1I\nZ%qTo
+%E2Bn[YWeFf9WN<tPB\#Ve*j>Ej,C<ad:,Oj5E41I at uY:W;s%`Z9.m]YGE/'I&&PS3JY<c+a65#JIa68]T2T]8fSb`RSXT;qhtS%*
+%>Z;N0354gk?3(ZTkq!_QB?L!@ZbeYR'gC3+.3O8`QEC-IF2ZRpM8Gn8a]&mdUY""nrYTEf,dAkhT:L=$i9Y5#A8s#JX9>CGC$&XW
+%\(;X&St(qI4\5S6WoT>pdn8)XH=@7a]P2NMSaDYNf7)c&4D0P[oplSu5oN)$qO4gL$#IuX>f8Uhk:?fg<@UaY<.B).cj[G96p*6]
+%b=i1DjVm#EqqVoqbskc7<\Os><ID`I;07sa]-;eYYq`a3Ro[q=^J3\I,1Nu/O](BK<]Vfs9`s;N_0RK'-4%u_aS3cHI-5GLIUIG/
+%'E7!/o'!FA2=tVR6IZ-B"D(T$O=Wu4^a`P7`t51=#di]XXGXO;@?86B:1`iPo:YhP1%(P8YMCZ*DQZr,$ckJ*n#U4gNpM8:5Y.%Z
+%g>[/QoJh$[lcZV=\O'/%9=((U'DsYJf[]^!Pk"m[7]ZnS_AiPG6Gj7sSO)C"419H6RBZFQm.91j at j^;e)'B,k&8[KUF3Hi-Uo4ZZ
+%s4gOsItEg5W+pN=k:6Kn0SR3WNXE?5.%(WC+BK37ZXKK?G48D\1P-#F#ZRagMKt`)Q4#+2fZ$QYa1ErGPjuigrn*N"$%9j+^Rg/*
+%]$ZHDJ65^IER[NVTYbgOo0/@fZ(ZJ-1+g_CNhdYZj+NS2GpdMbnVkU:CRJSp4S63.jcu#5!X5l=?_-9ED-8qJ1c^1$42hkFhY]dF
+%",SA(2CE-a\:h&NaR;8:hD2H++DMjhB:CH>'U:-EekYXC,qDP/FO!l?)pRr5B`URrS`;n`8TLk?gU/j*G/C*lEB\3!Fi'$,l"%54
+%8sg[$m&9dbYIo66;JYZ$:@\2FIFId[ibXJ3/iBs7L06]SOBQ#33"Ti*q>"nJGiKUsjK&Y39GO;UR"DL3AUab/oBj,/I^a0U"(QcE
+%Y8Xb7Z.f*.)9I:BnFe:Q9_tr/_:b:f at B.1LacH)m9B\5%im9$q_.^Su[I?mV1KUR%bH?^Tr][`np]:UpT;q\0[L;;dA,=m>p`l(-
+%1*;`5NuT[W*0dfHTn,_0k/NOVkPTasb<`S<!'c2]T/s^J5rVN&5)&!VV at PLf%n8+M^ZkN`^E:sH:K+DN*IEECM#F0S=)chirb-(2
+%:l`q&;@d1nA1.r#O*[lBA)iilV`Ep"IbSpH at k3At><^oLTO^kTYk4h&b,$!97PQiu?loiq+@>L%8YWSPl=^.Y\[pA'7@@pOm_Hel
+%gCA>ta_gDo\Q8s3jan5$JO8F[B1ubod5`"9T?@rH-;aT0fXH^)a2dsSh^G`g8VVo\AaY_WG?=FJJA"tO!s>f*WXST&%U&dFbt:+g
+%d`4N_X0eGW7X]ctN4%!&.dKXV\5JU%Uh0,[W,FHm4#F2DI($_MWQN'2^X=GDMmIHpc&LQZ2O6(qiQDG@*I=qOs!UR!P+Tgnq6Ika
+%0sZ*@\asZFjY62NTKVFjNnN"7YB'%al%2gD%Pb`pBOe\5b!Fe[W31jI1,AgpO:3U;Pu?-ok>^KQp:ZTn0%fY4b8YViH(+L#@te>?
+%F9fjbODfD+oGWqKY0lT)gWLaGS$0OUO*^@*osaC;AKn!a-cu:+c<7&s;1X/RDq`i=<g\?$o'MFtb`-F!5bE^r"PHBb4Pto\_WJY3
+%>.osbR3b+f%LkN++$)l0JpHOtf-D2jYo`_&N"SF74k!f:qPh#Ch<O)K/bQ4t\1ur&!&<Ya4?gegJ%P*gA>E;?T.iq2HZ%.=9#gRh
+%CB"&s5(nS6-.i.4`sHo:jpH3,q(ej)*b9(*\)7s"qj<^!#8[,m)8Z7sjPL7SpI[.#7aTJLcc9TCq[mNqH]EFPL(`<kj;s[K/UR)5
+%XeT(B92YK//I)>#KHTu=o!M"L&($PZOPGtsWMRT*n55otP8mXg_QGn&\aIMDr[+g"E1p$PN\e^>&\'3O&H'EZiA%KdoY;EPYPi/T
+%$iHqo(quu:n7^G*9%?WZ]IjG7huJRDUQnipEt/%B2O)7/HT15u%Lt!G`6>6Ro%60SFuG5/0?#b#0D8/4:U+EU,f_&3mVBAY)BeJo
+%*5Bu!+Z\0PEN?TpWHeJ#j`t:h3dc(e3)AKU&A:_)s(NA>%1feCn-VF1D=AgPnP1G:Sd;"*S-mq_BC__(i3[C"Vu$0HAo?[/m.7NX
+%PZrZMd(,j&'68R[6VNR8'"kNu&6amcOhW:W=&RG_/idJCARZ%!44DCI#4sOlL;YM&mZPT[b\lU/B\=stl,flPnsW?kX-Z9 at 9mS?\
+%riY^Sk%ki<mnO^fFf0h>rR!&Z.OlksLdTXtI<&i,.BX7jUjnWt60H2j)%.E[C]-e8S;1(gL\Dg#gmuLsqL$!mFC6m`-/u]XhH;/%
+%lt.beJ*(7aPhO7Bgm1IPCBl)f;aEO4d^009Y4Kn/gK*'Uc$dL*._50Z,##;SOd?iX5^.X>P`1_g#&qD%F1Z#6da"7Ie&pKpCnBZM
+%M0(t>PmK2j;!Fk?TA+9^P6aiPLR\j?<[jggNnRB5D+GcB,4[?\^fun"6:YA?Km0+]`n!eq.5Rh*gca-ic&o+e^IHlWM1odP/Ik[&
+%_6F$;6"`1XQijj]X78efl+n`d?`(2r]@I9;a"h at mJ&!>'@8W!"(VEV@##\-,d_VRj[:cp?am)-eVFKK8m/#74a0mXs!j>6daSBf:
+%ml=3=Zq6[5']V"ochUPV:`gJU1(!]0".(-A90*Z3\!3$!Z)4BHfNsltN:9#&gr=6K>/c:O>R2J!WBP6I<%3D-Cs5%U2<C[J@^6`S
+%Q?pQn:ngIOpQOlOVb1H3>8)^m;3"q3o4"uh]89&+be>Y\af;(G?4Zb+H.C^C=m<LCZMeg/GT.5&,r!%ZQ_#/gX.,I*W1[u#-(3VO
+%1:[[OEh_i_$#-cKKmF_5/(aje>S@]qd!LdBRBld-_e4&\jmSHsnfY!KM$X<7H<JD;;urVE\)sCXoufcqU-A6+!h,tk?&hG3hjrCB
+%9stB@)ZT/g#^JU`e'B=qb2>c:[I,/#p:OuHo$m9BIX_j%a)BKs5ea=4$?ps]gK[]<nJBI>,__bS,jqJ[o=\:?-8qc^8j/'U\0H12
+%$P>3PZ9`CViR)?,UFnoe^hdO1p:[P_jF&+oU<mHLF%Tk2\PXgVC"Zj60mZS^dZclq6N[]Epaa1YgiI=``3HND9`AZN at T7sVYDmAM
+%8GMSm2q>To#12=PcWV+/,J1<e");$8dC%`+k9UB@,Rl7!\RfFA#e>oS[?S%p=BS<RqP?1$TIJIfa(#giN.-RQf6"Jl1<k/=55'Di
+%SR(KK/7S=?A!*L9B)Whs5aY%8NEqc61Fr`5*G5UIDAZ8Ws#+kQ!hL,&2n\:kr!1thU^Er^,>OMjU_;@\I)PK\DOG"%q\Jt5)+",F
+%N0](:&N>3`Xm_G:e4@)hE+(,\"(j^.mM!R!=s!R5UJ32_p!fMjjh2jb-`PtE"paJ6<:L-/r&R\p:9MQeOEiE@=nK-%&bnGDS("dT
+%=0!=e<>oB&!A81F-ILZP%25N>8XEiZgpe?LioEpGjEd&'MM7NAG<g,fJqlSo02Q)d+CMF:16Sm6Tkrn'Q.q[ebi<cuhjj!cf*&<a
+%cQJC35T77$nj[fBYb[R6:!Z>i+KTproO16i'"jBE2jS^iH?n"sL0X+\&54i,qiF3G<Z(uo0PN3_-")sRgK.TgjSj&^hW3XDm?:/Z
+%>Ukdr^\r/W/<`tj'G-G22]>dbm"sK54ulG\$\Z=k:5j^2^3tTWKY.0)=b#Ze2M-M?;(OCXSNAuMXZrO:JYr$%C_k38,:u6dBuU>,
+%"_Td1%:C)DI.*k:&mO?N5(`gCSAP^r4!AP-1%.fT0"=IfQ)%')]]NSSJP(bY(&-#3?G<lT)\3\E4n!_RYWje(0sCQEDE&SSq,5%7
+%n0rL4o$YWq[[`Lhkn at O)(kcP)hT3U4_q>k&F6&p9riNdh]K\6e(rKSm%`e<rV'tN&dd30QHR++Wm8-kEGW)3IM=hdO(NI4$Yu"6I
+%:I$9C<&^7n3L6Rd:KMD(/+G\><_8=p3R'_iIIm.$mu,3LfqrmZNc+FXAVqa^X4U>81PNu>RC8$+].\T[PUNO2.DQ'A:gb-q&Hb04
+%9C[??g7l%3npP=No/`WpCULV`0%rQ[L)*0[f#^?U`Ad-W=GXWK6!fTT829KqK$oLeM2BJ.:<lugKamc;mp,%83_LN;'%h$]&YNbs
+%eS#e)8@?9F#=!*@`jm5?XEU%B\!H%a0Sc9 at q]:rGnjX at 2,psI!c"E[.W0^p.'O>?^c.1+W9ao4Mie!KZnaW#R;JrT<nNlltB`+`\
+%M5.iIpm at j0WP1nA+pR.!s#g$fjagj$&c'*W6rK&gkt'er[\Vpc>iUHW$seX0mQo/3l'[tg;J-!^Q at a#g)Eo0h>T],o=3&eb?Y4/O
+%C>fhi%8)/cXg[=oG(cJuf=?s5:Xl6`7"A/*>ONUY:VtU=8E]^!c=sJ0FRUE&+;K5)?m7cR.R^/h8]JH&U2N-)3Ol*;H;[rD<0?)7
+%q_VsWD(d1D7j-m=j;)8"LD$S(0r8=,98,R&MNdgjfh]Iko(4d*DE2P7n])t%fQku',rh5"R&d_@;WlYR!_M*hZr>_j6 at _T*^UE at V
+%k1MY6n`B`(aTt.J/<TM;hX*H9W3!$T&m8/g<!qpbSdOpjViSnk/c?mYC?3Lqf'W]CF)qd'L9%c,U]%G%NW0QKoBL6h\s;r3]r at C]
+%[ft\0=(=QXm`,knLZNcf/G)[J,]jDH%mZ,S8O2[WWQ$YAGsD:bc^tI^N`I8LH/CFX3e9/DS_VDuZ15u at Rh9VhF-L^3<T#8J3VU at W
+%6/5!cjlgt!bfdBKEio^hSgVI!#5ZkA[MZhG5m`XTCm(_[#RhLj(S(dN<.?6[k(_U\s5a6!'k?-gS`;VK?CCIn0H$DR,4'F<\OWrs
+%4-PK(80D`jng4IqP4"M,.+94/4n;F`VI,aKL)%Lp+.I"X$c].b+k1AV$:T=i-^Tm[@$R4Oph.-[@@`-CJlt_=l2!G%_\+Yh%rY%W
+%/pVm]GJ7I'HiP.1i\(,iM)^bo-Us,<8_"_Y=Uq6]]_KFgJ=(7;5CN`p=^e<'q6;GHV9MMT*2gI/p;-QDf@=%)[%PnGMEpn9nK$#s
+%/G;eH+,k.YCgr3A^8r`-H_I=97$?i$i-mtS=%LMuhS2:+rYNl'28/a"RT&9ZC%ZSM;/us<cmd>E+Ou.S!/=m\O76#@ZH5gu?gO5.
+%>-1SSXW.TklA\#g:&^n`]sUchBL<ZF+16O3>V(3.R_=!D`)(7gQ9:mNP at Djd#u1T<E]U0X1P?0O9g6r\[#2B=Fc:LIPA-\<1^jIf
+%U.Wc2E3k#lQ<3D#H*ep.I,%k'U/H<RD-h2VQkn*K;RV'k!E4WMn>7&JS'$?f at 3\WGLm-_2GGk$W;0Yt,fkc8/[ILK\kY5M1@=)m"
+%*@SLs*QaQ)9ChBZ9.n7:GMT94$_GJ^AYFHl:qcZ6kNZn"pddC+qReX.T#R3YF[tQIckYdG9K(AsETZ- at ELo`:WQhs.;6[*ub60?!
+%rQGB=&kLl-C9$CWXJEi0SE(,ZH*mcgqSOI!\/uIWSBd?8EO+$TB%dsa=ubq*eOsf.jKbhN2jQtjE2UI8 at 47;2ru$C^N\k_n!&k)\
+%O%Nd=_H&5Ek at SOocWLm=hDJq,hs\3K at OL9M"Ms]*'7PsN/+^2s8Rnj7.8[O\:74a\=41aDSuiu`q*?=K70d[r8g(gO:seT)+VuP0
+%T<BigJ5l at oVfaMPM5R?NWpG1WdlX'<2M3h^['edi-=^N^+]GDF?Y^B*'?5,MkD,/fQ#I?!aiHD*#9.l_$GF\68,[H-8D_$/4pBul
+%`?Hp6. at uRt)a`b8b$.3gOIE=GNWFFb^ukRIe==>UKkB\b-17o$,SCa"Ih$<2V?*6i=LUNmObmujIgeZ,o5/Y6q?L%[F(;:M.F.Z1
+%4;%N8.XOs,J]1/,2-6Hd2g$l(rp+&ZkR?3*J/Bb5(iAJDH.8h>/(NQr_=pKCL0IHo'?)jU:B3XPY[i<E?5Ag!DOGXSQOCUu6JmWC
+%:+kR>hh_8FPipb:4=uQf[%;>7C7gT>]F"2&Rk!X->PuK4bh9X&Yk!sX[rBf5Ca_CMD5iKcSJ!3"_\b#Nrd:kZhZ(aP0#?P:RoA*a
+%"!k84)m,$+UGY8bl(nSK at uY<'_tJ6U.-WMB4"AU>-W1"SF\'gDh=frTImKK6I8-.&h[[fI.9LEan6*p*k2^"e/Xc7;cBaX/*9eeE
+%p*F5o/"UqRF5#6hL[6?-U[(+uB;ea%ErU0m.93KC*cukD7a73-;3d;c68U=AIdGoX9 at B_!B4^c`+)tc+H15I()ks;VH(%j__XWo^
+%1]9$%GZV6?Pr)N\8k[-sC.kA/e<^i`Xd#&lZpu1sO8\]Z98=EQb,?SGr3BlPC/\?J?Ft6AGMQ?W66ZK-NHK]N8^u%\#[U/]]dQbp
+%1`E]qVQ%)THk(Vr-cH+E1E5ppe&t2hX#f*Krt+/[K5_,,hVn6aaa1ML\UfIa8*[%5'E6Fj,N&02qb>_lOJ`\fGh<%"66JKXi0D9H
+%Y#7K;b.!e=E8CFgM3C!tD^pG5;2tL0I8*KuK:]D-K;fgIO5P#Pb.+GL?jcWB+9[G=G4*J*4AQ%b(](]^.G6Y)cMn$S]Hi)-S*,<,
+%4R<X[^/Ktd]MH&\8USmQ:CVimO,jQrQ0)l?ac#3.EDlquEWktW7aPRVVcZKAUpeasHss<QEH&>(8b"8!c4Y?lQ9 at -#;W4oA):jiS
+%e\Als_K0JIn%i4ZH<*eL3M(Oj-"d%DOG,c$k(J#WC)SZQV"3aeRnI3AV2h!OBZ@!1C!1M$]^hLhEJ").Ds#`X9qQdGd_%CFJc!ZD
+%b$hkX896AGJb"ea(Qq!tK%YQSPRF2hm.2`'F56tM9t`@'5Q.[oFNKqrqi&GF.-9M;%%4a$">`r.+.7mq_':Gao/ddM"WuegkE*hY
+%2bWTu[<sS-9p9EG;bhe<AFQ=OZAuS]E3\Za!7'?l?+BNT>`t-W+>"tI^A>,3ZH&-\Q))6JUm at gn^f"(2Y$akmKbn&&9(H([4j;K$
+%3[b:LWCP1eCsXKGm$%m!jj,4`B/-aQkEmW^Ut6A#KQ`Q)=faN?F>f48/-&Td)u($S6l at q\d/!305#Y!hPpU%VVAF-q("mR.:B^7>
+%-U6j+8%<LNah:Ge^O'A_8X$n$fZ5"&i*`\8(5cJV at 8-FTrE=-]k;Eb,$ETG2q1W>];fks(9;,Okk$&5"*'\P[mtB]5,]p/'OdFfj
+%5#pMUf<$#[^<5%M)RWMo8oAPQkBYI^Z07XY9`<1((7jogr=b8ZXG3Y)HN33ijj<D%Q$L),Z^Fp0)c"lCA[MR at 92Pi0eYtX9Pa)L4
+%$rPT!dA[k\mDIu,*^nkQ1UgOhp$S28jYgoNICC?'i>R,Fql`Et at uk\g[j55p4hDgC3soMDVTWU;lSTuB4-%_[Oq=jYDZ`W9PSa8]
+%Wt at 9_K#O[j'ESmW&(47Q'N!N(["!(BNoP>F at n<88f98uAs(hg%PKrsYe'07IC>-elQL.7CcXF4^^GMmFCTeN49%YubDlKX/II(gh
+%q9l]3U7#%&;o4Xm`.FPAhm2sKiJ64YH*HL+=i*M9;!<KpD`"9nNR$3oJ$";2*nV!N7,!f9n$ZBMeRpZ6.GH\g2o4THs"5mWqGF4[
+%TZRkRjLC?C57jjAm9+`ERQU";Zq+1G1ThH&jeqhW)C?J at S,%6jr3lnKWc`Am8_3:A(t!:.,-KDd1poX-cC:;&Kj at Ul,$)dG"?Hgb
+%]3A<.[cqYR$aI at TJR,7jrj(U/#Dj_tp`(r>CBR3roR$[uh!LuU0m]P0#?S5^%:JM[GAb=$W4?2?8pBY at go1?9?3B7MOP6u-^\hc_
+%Y<]2Iql,a0##i8VQ+!`,o<2&/YHs:P\oI"RI29g^jmHV.l7VB"PROP;M.5ih/;tb8hQ(MNN^;qfd%L_'!-*gZkE-p]>odA&dU']t
+%ku8C*;i)Ht<<?0=DZ at sqojh;bP*#:3R-7Zt8g1\5Y>k:XZe]e:&iE]?DU5Wl'BfBE=q5C4^A^#$2.bD9CBrN.MiT7YX*fM0&&tgf
+%4Hcb"(`S8Dkd6SL&3rN!*3]>nqhWbBST[mdb*<r0-S_N#Ys;j[C/uofl34fWX.7=0)ok,[!'J\s`$^DD`2IVAQ"3b;>"SY&>+HEr
+%YZ\\?J>2lbW at u675bD@4A(Nij_dU0TWrGHc-MO2S_+'8S$*pTQrq)F2^.!N,^q[??,nKs#F/+MX?lnI8:n/HN'j][Da@;78J at 1L+
+%$g;54ndt";3- at W./5T#%Y*5*t:AQd^eR\A#buIB1,>U(f$<q(k]tp at A97-(u at QIU4e>IB%lh713jrhNCK-F,dW385'F""\H_gCfq
+%UL!b]rncEB%ceei%@rhlr_(r6E-&uh;Z1Hch4!<SN!T<-0>H@]<-Y^Gnk"o_NJY=>r)!e8I)sGl-2HgI1l#@/*&&\VF\l at .#Pgb/
+%A&k,2/.D%7.r2TUOYG0340t\e)LXr4*E]0,qcI%`48gjFYdqJA*oG'IJ_A)$C=kLE&j.m5@>VlKT[)*Me2RbaI(3'HjqS@'T/F0,
+%+cd]NEuoBg,2h^QRKb.eB015N6sSSUIb_aq$'-qUefmkp@")T/RZQGB.$^"g/E="M8=IR/g5!iA?,t at O%=O(DF#u<B1QqKC;PmI$
+%h?hS&JD=r73`.RZB4^*P,#+ss'6+LP];<.:Z:<7DpB/uNY5_>EWh4+Dk6;TO<^kCqlq(?QiS"bGMkr4A-^lq$K$+SAqSZU$3/g9o
+%Uc$ggdH&\Q8]:Ij]Ua[k,+k+?U2<ZqQZ'm.ZDM at _XS6"D\=$Y+8FCY!E\f$a3?KGYn2B[/XRitP\VdI&Bc.*n1Eh(AL*#C+e[4Ei
+%%%QmYcbQ at N6lu`f_ILl0j![8$-ie"Uba$XO?NS:-qM8[%2d;A42O4Cn1^VeLK_:,1GN-lB,CFB-I-jSh<J.+^cWSU<K)Q)S@>+X2
+%4L$#["tHR7EdXs0HpNJ^:u(l4jL<#l*gMq&ENX0'QhjV;/7VH$52H6H?Z\9]N)saijr:F4I,s,flYn-VoY6Jr!^LI,XabpM/V)s!
+%20gl4mO&/@hs#`Np6f3p@@\O>7>IOpHjV4fQCkos+!]C+N6f'\q)fdjcrDROSFMC$_X_%+4]8$[A_u%G([l6 at Na+hf!.e4MU%P\\
+%I`RaP7_c4PEdWHQDg$h'B:9;Z/GBc#IaP>i at ASuLXX9@"Euj&_)E3q"B?HY^hbjU^ru?sq\dFb)5/)I;LMK[,?RPi"VT?VAh+Up!
+%;Wf6J#.DO;;\UN+Y*'C at RGV,0[j_BA.ZZbbV7^I,!"d_OGS&R9-.dj.0sI5O^e(E>mIdq-4\kB\P$cpeq#^;*JT*MN)7L7&%u)4;
+%qH at J@iliu]EQ**R-DnDPRX#.Sp^$;(Z_e)?p#s&6Z=I5_kuL;/YNcgWOl1g+O(<e(hKS4U&U1KW`04Ti`,jn)P3bT[nl,nJ)0_Bb
+%10%[ZZM_X1N`tkn91!*[ZpDZWSgO8h at 1q6+FHZDUdSH#f3S5V#W+WcB#=t=ZgQ-3>/)J+Rqp8TIV!;)o-1DC;;JeLt=- at c5[EK/D
+%-C#pMFe4sU[)ie@\c@^T#-Fe#:ss-O?LG4tJ>#;u;B\lEY'Fgh/n\"'mlUo#o&s-7%Z35=S^-,j<SJcZW^G&#C3t$6b&sM[*^Sns
+%!Sb':aP?/iES9%Z at Mk^N%`q4S_%J8E;XW1UHAXRaX__<YrlbsJ[6;iuJ!ht5=+\?^Vah]UY5L^6kgF8d3I,PWXYK)9_Q.fh9i(aB
+%_>!1.hH0DsdT'&jC#X;!SN.i!6S'T2D$&s=C<c/-r]AMu?kCXZP%Ok1YOe5XiC$d6r?&CLk/N_(P]ao>YKWI8`ke^]7A*J^k%<^N
+%(1+Mkj5UVBfKnqBs5fpqM at LE23p^UjP4Us&TpC;Q(s85OjZMZ"4=P:AYeD6U:!I+[B:PEO=Lg^?]OEnDh=u8c&Q?'t@>r>'UuOim
+%3tRTt.IXQp[/EEq^Su-l-TdsCqqKLco?:@6Y_HW5Ot*-7[tuAA95qWM$6tnCb%ZZnr80inOg@?ln!t\5Sg9kVm:rP.Q$@C7QgYa+
+%_j-BKq+dO at l:Dn00O_6d9t`&aeJ;W"fH'aPABY at 5mX/c#FYB8qm&]?U at UQ'Z)/SAI=]CjG\g0DFP)dRp5a^2ppn"j4=sV+]UhQ)\
+%49,Ta0D-;2]#o%WFf)%i)-k6`S9*'ITmhI.5ekuni0%V(.qO(qOhoaZ)I7q$'5+`RX2FVWZI)@Q/jn]AjZNA)Qu!%.)jCTq@!LNT
+%_WP1kB;q#lp>diq;VLk0#Rk%Jo'%>^"Sp/'-!$9dB+Yl$q4=o[F.%FRI.!2Fj#K'd0l. at iEX.l?U)h\'M[^T!8WF)`\^J"qk,KA"
+%#uhOrf at i`S=d`V$$_AdmEuFSmbM6%$Q]2<@4A#]h^C\LDlF<eT024[;NK=20](X>-8p.1>aiOj4[\H[p?C@$0-o<p6GDb1oMiB_p
+%Sl0T8Ysu2Q^5ftq^M8d_S%V)fGd$4/1S`c$B'm^'$V0<(/nO't0uV?O^eLDjl"d[[1H0-LV7%Y<5UoEMe8^knjYfutg2H."VcK6i
+%nd'i^;U8(4/\Si-,H@>r:@o]C]4+^*L0`?m at SM;K8ua!&r6;&A1umbIMQE,MOE5OWjPnpW?hFE@%n5l]QX&t.K at I]gl2LL,T(\#N
+%]%Jo%VKF,SI]]nS''qV^a"*XQ1F6QWW1#KVPP7b%7?\i_fGn3-AM(*#PNVn5 at 5$.ALqf2mI#*h27iauiD_;P/f5t:Hg,_^[R_JIc
+%;Fn#E:O/S57Ug[O'H?-Z^1$\tdJKCQLb.:.mS14*9a66\$!6QGE[W3GPG2iW7(=G-SW%`D;UB!eVtNMeQ<^Okj[IS2X]-e6Y*e?k
+%a)(M\Y;80cV.J#>T,&2p6F./qg,O"fYDkn?(Z)VZf:7X7:&ERBgkgj2/.uRecc6;(*So(&VgppC0&t(U2Rq[bXbaJkhoc\k\oF"m
+%IW>V9F702Kej/rN.E^DKFUCj7Q3=0gk+(DRDDtUBJ%:)'e]W at +PcNlS/UX\`IVs8o(RgJ21</4E;'Pb1dsVqOaT>Eu_Q,-t9Ad11
+%AH#3`e#1ht7Ch`9(L_,6M$I7"J2>7g]/2/Kq;nm_5V?M3ZmVra.%PBJ>G,hn;@n0;&Wc<G3A*Vp>)1qcrRWSo[&(-M>"X:Z"MA$S
+%;W-_LThOTaj^7&U/]lob+qkbbM?7g#r,SBKhl?q.r:]kGk4r:6RjDtF+O$(b<08WI?a`<mD<s^lBZW7C$^PQ+7il8(AG4!/__KG$
+%BJ#aib at Sh&rIt0oMmb#kNLVp_)nJA8n3/>8.1:lVmg[c;TVT3.i$XP4X=9UBdi2YC,b14MHFBBHQT-`DN6Vgljh4gZl>!%:Q;=u=
+%hW?$"G;:FMB-4AJ=CdGRBL<#$D>L^YK2nE`3)p&RK&;R5H0)DMWNdm:;B]4e+dJlEC(g1X2Af6Lhb=Sq`=^5\9dQ1T`=La%9?^\3
+%SP+-3oAs"FZlC<,Us>!H,4.lhr)@M!G&)[[;8I>Rh#9Ahk\'6f:e?jg%Qt\fj;1f+qh_:qHHt0o85LB:oEHBCS)ZH`9tLDA8/lF2
+%SA9g/g^UWUAY&MB6`_GrnL`gtRM\?dc/_$UPs/Q#<s:=ZPVYa%Yj<c+Gm1_Ub^H+X8=\i5SW,pjp-Qn(2G&o&G/2?Y,lo)SblkuA
+%ADSsU1@[M/_t$d?Jt$K.m?UIgHHu`:,PBFpph=8\AZLE:rX:l_qUND_f^!p)$NlP<#FlW"0J9gE;YrkoLo:`?njtf7-Jh"ITU*C+
+%-P(uJ;760Gnk`lOLoBBdC1?6N)Y6<V#qAk'=>qcBfN("E;)8/TViq\KffBk=^1$SVZP`]:`htT[boh.IUq(NaFc33&&UV\OBa.QR
+%LVBrgllK?6oH&MJ#/6VgRU22)Lff;<mr-s4<6p8=AACta+47""4FrB\GDR?$7VFJUR[9R#qF2ocHb<p3(>Y!V9r`oe^m!"PR3hd-
+%Ud;%QjgIStk\_0U&1Q3d at 4-<ab\,&T41fs0lb(X'6?O20ml5lGj1SiYK,mDtW<1WT;<0B4D`t$V0,2 at jD9X<O^/1"\Bg/]W7T>m\
+%5_9cf+prjB30J2ESf(,-%sFsqQBt#cZo+^dr)XBObKLCdo5b0-IE<!1\fEY.;+`gM<s30KE]gdQqV;t%>J&/7b'jaBl:jP]S/QXX
+%*BOLfDG/0c"G,j.4M@!&9SD$HHiT@)OLXu5!UYQI<542b'\$W?1'e7oS5C,TDY`3Jja+]qon(NTbjU&nW.U9GR'okeJQR959WiNg
+%[R^E;+<uQ,E:V-Ko%U7hD#*\ur4:_aLhlY]p`IlQj$8s"Ca:0P$SBMi7nK\6m+Y%b.X<9-W)JPk_jq^:N20YBc6m9L#]uOmMU!n5
+%+klX)C<9bZ.p*LVkBp*$L+*mcS;Q0=q,C0MKCb\qO9B_Y,Oq##HP9[`SCJ]uZYJ5gkfpqO>d.(/>'6Ac"3ncCRWs4[Y,?2[6:E1[
+%H15/WoEPS1^?\AQ2$]NMfD]FS>n`sA2PmqtF0V(R)@+J2'QHse+Pf]M>"Z-DX>F>Edb0%NO?/$WIQqB;kPFG[C&@\0qfrX>k9^=p
+%fD5%nF8C'bp&&^m5*$,C8p`_3R&p,;LK,sr:Y_c"De5S5c\)nnVUZG1Q>]J1H<=XTNN@)Le\Ajl&D5"UObAu&p9E>"B9Tm at _urRb
+%,!@ZNCSIPXAt]XJ,N50ZQX?tu'!t4%\%ObTVSA:8&aVHRN(eia2J(<XHV9iG$=nsEKZ]o_dPIae1N=46.FBh8LUD,nb&Gg^3\'kF
+%:5#S^EpHo%j-:gJo\5kYQ$E60E0DC8)3_%`"`s'oj;VCfa()iJ"M#iN2\YdU:hT:h:fC6qka8j[#",57G"U56URB<BX.+sYR;@CQ
+%/k]Rn3H%n:K9_\>]&:M.mWGO'lgE4^go#J7;Q!.MTK-W3,1n-DJr9;IerA]*7HCA.)C\::0eG29l>qjOY'e_+:&(tJ>>D0kfS0Ff
+%;O/t#.sCg?q-Rqk+q*8T`gr?QQdRMlU?A648('m;DBIX"EUY+*aK-`!/OkA2?k!b6T)6Q1^k?\t$8P&<`i^uLd6n,r!'/3U`o+XD
+%<4,I=]/:2+RBbmIZFSnNKn.7=3VaB)g,eLd#ukSm&?I8MG_;cuBbL7DLoTR0j36CL36<=-"(BK!I_"28h$d]Jj-PRjb^4*0+`B*g
+%Z<<D><_B[__2jLd#d]l9p7-,O2O3T<Eb28^Rlh?K7f0\Ia"%rbLa#]?\)b]_;1WSLJKIU?<[I(BaPgHC<bEP44QeSe+RK6rAe_T+
+%jRA:MqrSmj)gPsCcP%%WdN7Gi^*2UGc_<&PRq:m$jGMU-UnY+!&o.=j3_A%j2u-57_VLj\9_?2Co^iW=Nd6V86:$'1%/tV.<@[sY
+%"Js#QNd\^Y#b?]8_![noHF17pkno(QkO3KKFkX3/9tq at L%T7W%^#XK[37$%g,f#n&KTg^[+^)90Rr-o-Mi7XV-knEQl`P$>nJL>+
+%/G"<oW8q_'?S<nnLT.nNd"IiR>pdV\Rq>%p*,kgP=TN8$`Q-;Nj_]-W%]%ukEQrr%SgKmr6IjLWF7qX2kZ-=1:g\\&)aRt.h&c37
+%f^iCWe<[$Q`-Xr)-b0 at -jI!sNZk.7fTBYX at DG_#/W*]q027^>GmSIfsdi?37>;%F:?Ml-sT_PFa,]*E4b9%nqR5P&E;2urhQi.VD
+%H=C<6NAb:EO&>o4&]DTKCcU]R+em[gq[rNJC!p\b/5VJCnkGLsXgl_ao!aQa;\XEo]DY at EAAj*X\?&5:!GZB9S at ut3=J2K2$^FfV
+%4FY`]b_6TmGXO[ij"KT;ghV?]lA>\As3ACAI`#CaRnP&*X+VXZ'nJk#SLLj`!2nroJ488[d*9A'HKmjjb&Xo7UZ\Hu\'VnDX<cmr
+%#2GY$kKsDg=D!s0h&t7<=rf!UpuMB7(N`\kCu'o^k%lDq(>``e#s!:g/^N2fG,e8h5D<]`1O&4Q5I5:@Ce1ZdI:P#BcQ%9TCmC?A
+%W_END;;LeT<b]n at I^,SbnhU2800sIQD&ho]@q;q0?#K+udI1IK,3G]4e?\1)SPOOm,>'rET6)A+Z0InIDgnHmQ;/4^10\99^J:3K
+%S[.Fbns)cU]"ngr'4]T;eR%J[p'_n6N at 3Nlp?+hDUm at u:K6_n!NLXU,=HC"^jq`MIPs,[a"ri`Di[:SVI4^$)a-G/sGE5rU)&j??
+%NM%pV#`^\;P%sUK5S4"%@bg$oV/ijqQQ")6G5e'F%\N?,JD>1;E_8j98K_LQ`l:;!M=B`D.D21^,u9>PhT7F=_;^gY!S*Cpf8@(#
+%n;FQuAa>Tkf?L(t9qHcpGTp<%VL^sk`Y1Y9oYuL>G:keV)S%/(TDN(WSB=ckN1L<Kh1QQf^UbaDF7H&a2`^H;?1$e2f2g1`B`+nJ
+%iIU[]1Y=*XYep)+\I)/<0e>[CI@(WYR*9DLGUh#Kk.D!VmlbrG?ST*Z0$M/L"aj2'W8%,e3BFSlAmg at r#M!r;)fkm_SX&Ms]oeJe
+%0dplSEGRB^WEW7lVZ`m4>SBh`p//Zu-Q^IqW?Kr.(VVO1+mQue,Ts32N`qh>M*?<;[sXEd:.5.=XlP>O[!YmIQ895&kA"5GXQrEF
+%=Rn_uq3HqX4:4OfI)6$oBhdP'n=58u]0(PrAK0M/WYg^Qqp[>\q+?jeoDXR((QIb9kd_ at Bs2Y%#fl`Q+c;Y]M8n]7+B.o"F4Il"'
+%:9Gd`C1.n%0D'mML at +&Ro&m^W/f:Rui'qYJ'>S20'BH]*3p2?*#E>7i,9djU")fU+1(Y#dLj92Z7D"*SD2sl&FZr:CcraF$g+uKl
+%W`lqGGAGLWns80CWfXuo*)=_*F)Q?6-0XF_C'gcu8=d(3"3`Lh5SbYH_18\pHX.(X;hZJd0snJn`s$kkf at H"K$hXbq[a9]J;/h>Q
+%6GAGeigt(:n7p9d at Y\O23%+/M1J=iZI.UhIR52+ZR at Cr0I:mHtC2o![R_M=!LX+GYk=j)Wm+1#RXa:UqCl"0=4]C>W?Q at tl:0rCo
+%?d&(u4toD1];O,VJOFNbkXPq6j\X+5-20TJRt1'IiH7F)9=7R0V'j>\F&#O<Aka1VEJG!m[s.>5qb at OD_>-%GdsS1V_r/J<jeJYi
+%aGj=d<i,1+DWtV[8k,[.3S5pf0Afd!S;<rkksbP0k<Mg_B.D at YdH?>H7$EAM'jdsThl5$.SVE27s-(c*$Ce8l<P>j]JaDH];M(hC
+%$0JT<8;jiM9;/uOEo at 9F^qOVQi*_O0Kq3sH\K9j$*`UGTB&33U^^83@(o/''!Bc7/U at q+\ONps-#mF8EZK\<\8D16k.bBc^ON9)m
+%MZB-J1FEP=RQL4'(2,sEh+Z[tU.ou3><(kplJ!=d%cENUHPnh?-4 at 9Y^8kEf!Lpf$I]Ko<JC%$)H&=p1M.7o;JN at MD6H;eR5u^K4
+%8Vl#LeR5Ph9ZcOp[TWJJ4LVKG#u7BDUc+NdRO98:k0=U#7s,K(ef8[e&ibJ#l"_N)[Eg<42_(06DAcaFeCL0)+W%^E>pOOgqD*3I
+%#'H&B4PC9GiqjfR$D%,'C.jMT:Lg&!56]m*YIcQQr-k,hCH)d2lSX<kX at WSAb:2\!,D5DFLr)PLCoNe7jM at hIl?\j,E)%)eEu<21
+%_JLY2&^Z\_riffK88!buQo+W9bR7=eBGI/][l!C@[iam`f0Sg^&3j<8J^BV<C-C)KCHb&CS/B2-qQRAX-G'gT".%baEgM'Gpn[*Z
+%:oF>LdC"aS/P=n`pINq$kkP2-X52(86N5Y&k9n>t at 4":9-BW.<S at HdZP&6CUEbSE<VM(KQ[A at j;>eb#)]]rGR?e6XVT%GPT at c#@>
+%P;LXQM!_b,ishlr[WdJ#7$RF'Z<UGZDL6Ma8X`YGKRWmPgLer$M`5i0L$V=SJOB#rfq9n;\LTuh"d-&F]HhQiYac]:I=)Zog8MZn
+%SCsIY`r/9CC,XD;=JQEfDB?tP+R?^7$2N1.*#JI!RZ_\KQV(UFkNPBmD0AW(_QVg&T\5OHR&iIW]&[E*lj%5-%ScQ)Sp-0t>rWgf
+%2-Le4nL at d91be:orfp;bR!'U6(;m:A-m\\L,cc?pdIj#"a%:ST]pimDXs<2lY-(`tK at .8#fkPt/Ve#Et7OK[V'ReL.(CYBGs'(MW
+%*bJ/<f&JkA3nrZ>a_"[:8o?5P8"a'4_E\hc5<l??JP.)C\MoT'C('a(UTTnU&.fLcSu:rU/6#W4nFH"%V:AhN:6V>Q$UEo4bq[)l
+%?WJsa$BZIlQepS="YV)/&^d[//5nA1pX27XB^6899H6a9_.It\MHd_,]<=[OcP1]QTdZt,_9WU%6=8Seadl&Hj(#X_dcRpqekoKp
+%4+#I5TY(:;$_94o"KD#k4#TBcKQaXo8U[!<e-$`DqSXZ>6h*,[WK%c1ML#1]^\a7CX4sXS[3puR83N>$#3"W)*Q3F;1qoI%.?K]#
+%`eTe-dC9ej4kgq\ITGTY>qqcZ3P1Y&ai.iY=:"k1KMdpb?9<QgrnU1g[Lb.hFkl(;_$DV&qi#GQ]tS^=L0m:@_up=+g5]VJ)AWX.
+%4%,,tR+Z8gD.YJu8]57h@[6sqVlU_Mp89d&V32LX$BZP=Dkt^\Bt8A!*jf(f=&.+cq#(o$o#X1u at h['^T^i(K)fQDiRV/)[KBMT8
+%9ne"hJmrZI#[j74cF&rV-lu2d0bup-K^P]:[Pg("R%,>b]3bQkRQ!8BZ]F>hU!]'VV?tN\[F8'_/"$[/O&!.VjD;2FcA=+.[e3@:
+%9RmUV[n)m![FZDCTTXh_gmsL9DbL(W#l./<S at md<G>qo>RqhTc>bjqBcp[Y8(:H;Pr[<ZZp&]d-C<,2n>)ph8!uu-_[m3.J3Odk&
+%#-aqf2RtSgJ*g_]F9B4D!tPc/WqfBF\X'3#HDYl9BO$04P at sL2'A0aO[`k0[cmksK@'Gj*83V&91_l<?)rJrm.bG_`G2*]m^@ec=
+%Z@:\=^llTad_VG)IYQ$Eeq27I:9bPC^t<$IBIkP\BdiLn,mQc?P^ltWHuL>Ken$#e]%B'@LU5qZjU&2Zb4 at K"O at AVNWX.ONF7%o:
+%r*pk9UhrO[5Fm&=[htX3.XWhcjnVVH\g&B=>%#Uc:J$XH[Hfg/pK`t89;c<c%%<^GXL)P2c$UEW]LIOMett*Le"<*F:G8?Re/'Y(
+%-7PHAU/hjd`U^6g$%uRt%_J84Y_ibmoC'g[MKZ>R?P)-g9IN-o at t=&_PL']B0qdE;9LH)-?<OLP,4)mEI^NbZ91o!IP.CkqGgodi
+%\]A,>0&#pd4>I"GG2*:FDu24`hrb!(aid9!13kTF+n\Tn6:r9(_CmY3Q16jh?ab.s:CL0u]U&m`1C!)$od6Or)K&0;mkAd[PIL/8
+%`a- at H+.P8=#@ae$Vc).hbf&AR("tbq-#tWqHg_)`cZb7KT=KUos+$S2fgl(eehY,Z1SnGFo>A]C2,Q.*9*QH%)E.`m7rV_"W at uR\
+%`TRRAauMXGG8&cTm=9*2>i-O_"P5HU^l?1lAK at um8.Gj[%"ma[XD^A-Y$(2IOXjo#Hgan>fG_cK/;&rPP*i^$S(\?fN/IMH:*ZYs
+%NLHo:dsUfJfLHLQFgKb36"V^/iO1+3DqNBhnd*Yq"5\F,k/a;^6AR^O+LW30MlX8j9d2bB<*RFeC!KXqhn+T&[ie].\k at 9%:Elp4
+%>idB+s.$<2Fdn!!V:.(Sl1UR:/jqUXEDAUh"Q,G$Fj+hl^)f;->Ug[q6+M4-jr&tm3VOX']M at qN4M9[r/@_^:XTT37_3J)UNL)MG
+%82\eB$g;kr,O'p-kk:q2ZbG(AGjG/-5A%jW@*kH at 4%0UA;KD54/_)T-fM[U6`D16AhT7WtmuAMc9#7N#[jk*nOl8fCI"Kc#nu@='
+%!UtXVES(KJ4)L^+DP,k+11X2!*>9b_8;`+6:u<_]jb)729W7?X:99R)]Npim5?0`E&aXZaCF1>S at XroerD7s8<SF4F;V"`K6kp*V
+%`$_%7\"`uJra$'&4(W"9E>!)/!cK^TUc"A?V(r0Gh4/u0i??GA+Q\;gZ/Pr;B!EL4-==gurIoiVs#COfeLgPb#pnciY>7&^VMiL:
+%P$=6D,(^elPE at 0uXC%Rec.d,YNt;3/WQpl-_U/+_C0VSjFA*ctOdF`0((f)AofutZ%d`n&:'Xo?d2%ql6lt"]05:B53+1HL*@:5>
+%k5o\nSnGQo^d(N`+1lHS)[&B'N`-p#keLZs*[HFjl3-48QeH-RSt223Us,Ut\i@>9(X+\7Rhant,#o]_pU:M at .60I!PjtTODH#RT
+%E@`NMUG3!!;F4)-2>p"O=As"uf9nY6?[dD'Af_2apQQ2RcHKRN_F at MnCuh#6$\RX(_jW&(-.T1 at ipAll<0nT>>[3*fELsAsH.q>g
+%OOb.YXGPn%($Vr-o8j:'+7'$MF6`L-<of+dLs/q-fLG,1coo*3'N2 at 1EO,%B'gCkh-?c;h`Df($bLWY;NQ_#!O'K"@aZmE`W\/H6
+%%!HGN@!`LiZ0Aobc""BEqEPek'r6oU1RUgI_6XrC2BnI9.ISW]k<a"K+loI;Op8e;G7_V]!@2o1irIE.l)eW')fG=iO.hT),0hY$
+%08W27a$*HdV&@0bEfkF2R\h#A;Rh>J[IQUj;e-pZ<'Ia*&oZIfJne_mHsfSuZOFU1"=m!6_"5Llj-h9t=m.ZPg\DQ@)l+nj&lnn?
+%Mq-,?-roL86!-``F49^p>9Zdl_"]L9Ntul*+luK&M/n/=im7]sQ3kD7`lK_MaF+S))B!=eYU"?Uet4L`jcC1\NQ#M$dWKHVh>/5B
+%2J5,hI+.=5;iN9q@:NI0O=`TG. at S*3E-=n^HajbE>]fQY*uZDP&]q_'=F11V:4:tX*rtCO(![Rsg_.'ZZ8 at 8N&#r+HUKP-N/-0PT
+%Kg(kB-boSgn<)<:5atp0$lss+0=.j0b1rOePi%H"Y%J:mIaEl<26FaA<6-GVA?oJF#]8:DV%Ch"aW3t#`DQWoiQI*f5C$j9LX9p:
+%H.RsAf:Fhg&=h$K[SfDa0i:(7,^>$.>V_Af_8`5<b@/N]kfh3O;?Kf4,$;?D>G#Hs/&e>ZK$G;TO`.RF at OKf*4+kEEQ1i(53><Wa
+%9ifcu<+u975^)_q3SS>:M%?rLLh+guIiuS$Du#D at a7Xhc7"f.V^+(b7lIbJC^"]_Dh3rgiA5YhBY192`5#.cZ68r,DW%^J(E)*]R
+%:@M!XOU#0reM5<@^S%%,kN<!JV+ at -]pE,*VU[Q%iTB1t?kBXQ4b at k[8Z#$eRR7d6#$`\GGjgjFs=lNe;<6YMBK=L=O&!(&g.rQeQ
+%'*2*Yn]reGK_$=Cn^8^XTlno^hU"$+V-J)kYa7":\TciEoa at Q_,on3`i7LF3WZt3l?SE7gZ$nd=O].uJKrGH6i_J:mdm"\sm,dG$
+%1c++P.9bq*$Fl/Gfu^V\j2GN:13J<Ae]le=qQGkZbee+[DU=uiOSH?>VHY^Jq!7B0kg18cX]B7Kq#!'s[4IUn-(gGaf5$RhC>J:t
+%&i;uI at 9J(E3rF at VXS+bi*Qa`N`BA3fg>)4Wbj.AZo0'i2s.&TK&-mA(;LtgMD\fHRZ,(W<BkkrZ1CRnor_OfP;WP)$^?2#iPau#C
+%$$Ll"gRe=8U.VsfEIqg;^3(n:Wu!n^cb-'%bJD#k9g\Vl)HZ[?^!$"'N(($983(Kjb!@6d<_k=Bp9Z(79Y7]-JD\)"QEe#nPkT3W
+%iqd_&R2L<Y*$,fc')bsQ*Q+Ic4uu#Z97`MZB6eU6fP9LkXd&SO,e,<`-'#dmmI;p!@/?H-m\":)#'b>MI*'P)'K+2+8l)]i8*7p!
+%VTP*S5$r`s[.kVGWognXe(Ie";Ag70<adR?ru%&8<^?=Wr:%4Yhabhc1548F>YP1tp(C;-JH""Ejd4_a\7SU]/pcsD7ZM>S>uPoN
+%<._Rp>dEfa.[O+<b,,%7`*I:;(RR8T9MbJ]bIKP=P0ZM^e.:,V^?DJp*+[Ptf-A&:U4mE*]*7bGR?4``86T>_5]Y.M@!h^`*LPQX
+%7WWP70*j'N0->=.e^CQEk1PpJrieiFBC[c!d&F_)kJdqjcHAf[=tLO,3u^+i"$tWJB-Mc<2k33AOB,cHR@#?n-SG.-XD(G27G`R_
+%RZIAP'rNf`LZ)<05^m\8"A5/HhFrO5l.EB_n0Z_i3c<+dJu)YYT^Xfg4>s^]Ptdal#:UnT2q_;O3JC0+ekU(a"T\MX4chCl-Eh1A
+%q4kQV$[lm`8AtFR^-h1Y;>UO["uQfC.+,;*;u0U5o?:@XZo'E=0Zc\p5\9*)a2$Q?F$\Y#Hemo(Sq5[gXB"Dc?otla.6huH3NkKZ
+%._4U#G4lj1^\jHM?WlM5K['6V29hRtm6pWR(^QV9nI%eG3[splpral*U@$7]g>6hlbFbg*Zh`&5mpia"RgJeBjoq<,TEpG)1_OEX
+%]&Q%6UXaaiTUbU#]SFXPnc^/Z5=Zn.[6qRI!EEbt##U'Wg5DPNT\6*\M%U8e)irAQcC[e[]nh:GL$T6AOu8.TlbUCgp&15qA,Y]f
+%K#qUF[k6(1T]Cg("Nr[)e%.%)a9XZ]SKM`E$mQGBkE)g0)6`)u-#%O,?3sb(;Sttq[ANk`QUFO?l+\U&RS^rTXu9i,7cu:`pR5?N
+%4S=+IYMPZ>K66^cK8)sddIAgn&ZL3`OBC(*j6[V&mK>XO&=saXUs#5<0]pY]%SL#ODeq6X/OqHhiQth71`gB#=r!flPLl2EmqdQ#
+%.32_AQO3M\\I:B(o$B,c#IsBfXE*m2q"2Vs at lue9lqt/e0$Sg at S4rGgHrP`YLk@(Ufj/I'#ubZq[-IH[-F".XZ!]qGI5B*[)<Db-
+%kE4kKV4=7FQ^9V>;r5N1N+ at N_)#h?o$)f$:6^_Gj(3(@9mh3Z30JUDToAWY9fhZ'X70pe3:4Pi+AiP'[osngWjd>/kI!P'[cA4!S
+%EhI.:i?`ropC at _6G9iZK5=^31n9ggj(RB-f>INKl>SIWF=hR<8^,goq,1E9`)jH^NHhlb`.g7C`a#=V;(<i!+FnCUW;BmGs&g!^$
+%B3jbShos01af8&KbLajY)iDb/G at gG%7rG-\9L'af[KQU_gB]@m0Y!NR>uP_jnS7G_28O at U>[ftKR+]Re=$<UDDbY^p([gutc_PV[
+%=aUt8WRJI+cltlM1^jfB":.nc;\^END9HLt[_8(DO$I1NfK!.I>[EFf_SX]T#3)U8 at 704F9THSFn!K+A(?:NlajW-R<i!OWaut6a
+%rS?6go0B7;/T\>dj</Z'e'A4]BQl;.XaOmdK^p:(*`1I4@*q+<aa8WBMWC=]V`b"aeLR8_;s:I6b/kEKk"HMtrT)MhSE.,+[Ft[=
+%MH)W3UfgelK(pZ-c:`P+,_Nf$qqc5P28r!kPFh at KOPqV<\&8T]<JfCPQuCC`a^Q(iluk;8j^bA(0DjOrnbeLjoCaRF,cpQrYa\/I
+%ADuLr(Xq[tOcSX/0G4<lo<(did"$HNc9[u!X.@&Pp+m_b7+.T`7CuX,<5k_*$<C/lkGeK_qc<oiblEC,$Xru2OW at pYnMZK2TGr(n
+%T/cufs"K)AqVKep6ar1D8h%0OW6Z;np;1`[8BgN\SdMQJ'C_WFP4Y"0:<B62,s3H5,hNoVG9k:+'A>R<-GOG?VS415l#f71/_?k&
+%U1W&c]g42#OC!=Ze4pa$E?h2IGi]%uR[0%5D=AOA,E\'G%.j%dIZS<[kHcYEo=F`n?V at PLY4H8M`[("9Vlh_1_hHPm`A7q#<!u;i
+%G'+^HT;E`c.4qY))"]9N2Yk"EOY?RV">*FeDEp$d9DOpY\/P"8\.:X#R]\ZJ5mP6*T;DN9fp??:8=tF=^\kU*]Zmn/L0e?YYH8^r
+%cjc,.aO`n'o1Dh[]`]EuPIbC"l8>/pP(1BD2dX3NiPN)OU$KSW:\(1.^)L:RAEO[o`R^caOo9L[lQ#tZeW\n#[t]sXN[]u74lt?"
+%b2dJ at lFh#VV<0%+kBo.5/ZJ;D<Rh]2Xf[bE\,]]`#Ic;@WR%"8]Gn\)S`O,Yhqa0lq:q$2juf;5 at pE22JT'_C1M<i\96#@=(ua.S
+%4=c:963-A!o1Vfcr:N at B04:*W,^Yh4N=sBV-iBEJ</Zb3[f`oeK:Vq<.U3H&orPQd at -)iXld,Ku<lr)0$E9uQL+K-_J9VH6M/R=-
+%@X61[G:E\=HMcT+Tb6tng$8%WX^53Xg/%pGT-0WpZk-t.4k7_tT@#BDR^Q]QoL+]:NBC-?N7^o(WRnhKCZj2d.n+LRO-q853.?*L
+%k7$JJh'qd\b at 71<@%*YmQ[*U#eU"5#QC.JP_.lO[2RAS5nG$2hN7IrtdHt=oN)q]XUX>k^aKfa6:%L2JG:EWOEM=buO#(3Qc'Gs-
+%3\U(Z%6puq.D\3.Veo2-nhS9R&u$_#8&`""k>o8$/%U=P&FX3:C2.t;"of5f9.N<oGoaIO$Y:p<e][Yrm-\sBIN*5Bkp%!*0B8m%
+%HRDH!#M?/4'C2G?qB1nU"_re21mFIucBi@]D7M*j@]MQrKp!e\&29C7L8a!2FEFYN1N_t_fX?4!>!YdghEYO:,)9`>khM]_kQ at 6?
+%^T`%F6-eH@],TOa(QC)h0fRgH8htRIeKoo0$/')T\SQ=bnmWqe?aOBW1\k\](2P\7V$WrsEftAL5'Fdn6JjiB8B:K]VeB#W09D*O
+%i7*oI]2($i^3Sn3R^RIK#b_?ds%><o$0t1@@\6j6(PN<$o:Y'7MmVIe\(5DY1rR(jb[)fs=]/$j at 831c1a9@mXgU,&JSg]^C&_\t
+%V:2:NceGfRGom0sLJ9M(0ZRKNlX%RS91nuPqXaJ>9CeX\H<pZ4R)"S>8jo#^Xj5\;`QQA8@:)6hC($YG"f_&VQCtbsQ@:j0k-6F4
+%.u+%M6bcFbGcoW.-Uc@&IN"t_idghmb9SpI\h&dm()%-L(j;qc6VnWBfl)l4dWVM[7p56]:EI;Lplq&7?T-qj75C\ogCF&D1j$7U
+%U!B(?PZ/lmI<nXSc:)%-+/c at q#OOh*2bUn^s44ZsU*9froFbP'>'$rJA[\mBNVFouS0YmLUs'I7_j2!F)JHZ49>L,.RH1#/)16im
+%Y)d^6;cJ]]1jp=<*$kZ>3fdlH7,j74l6A)_,3lfd\,eK#+,Qkbb,aYs@\Iq57+.<1DBUm20+fq\C1HbA4Z5j8^'!sclBU^dVNCcU
+%r*InX*Ak[d8*I$rq'iBk#:+<F(Zi at GH[G6&^N6aLP=4rNo25tNXHL_Ib7?A&^E,GM3HXVr52Mj2;-5MLE)L^j6:W(q8W]?L1sH.^
+%JHD,(ZCAX`JYUO\=AHi(K87:YeF-,[cPJ$R;0>diLNpLVP5[;#c%!=l:F1'>C]/O9q$LYU=i]43/p$,1od)]TrZ`OYjF-=KWngc<
+%H^(N&bojLO*]Y10/#gFXZW9:bP!km[MRso4VV^1,/5;iiZ_iE('T8F;A[9hW$tY&j\'mg#4RjDshYAh($$gk$Bu8hnan%^'I!5AW
+%8R at _Va#gb8E^#<:<uRM6[:m-srY.7(Zf.S!T?T#[qQl3ddbVuCTL[pY-104;_piR2Ierl`(#*A.nt*2#D544W9mUa#P<`Knn&[Bs
+%'IdS4/EF1%QVgKYSP"VGAG5S$Qm2gW(FO+`%sF*eX]?'48kQmAg<$Re#W1J[PbK@@h8n,LH!(@UE=k-k[7nq[=/#7]UlGR*]d,MI
+%KCk*;0&SWbL&89SVoQM at J1k8FJfQh_\l$C'aVrp[IC713ql.l,g_er3d="b5^WdqG?(^?rb%89JXX7`EhbX&h^+\*bGKa\GFSsjO
+%QCgZBBJEm4<4nEL\W<gnhB'/#Nmb9[Y\Naa\)Dq161/2g_YA_a*b"!e3;;p/3]g*_#((7\JHrG,-u_A7hnGo7gaVq4KkDn$)7buk
+%iUK%bD<pc8jm)]lQbAe$ksVq]=Pr6;m4FC&*&PBJgkeM]OJUf,rcb1%:K`l:.$%+g]^l,`O)Y'>qesdkP4+!BXjKt-Q0kbcca&K?
+%N>:^bcMlS.[m2qZFVPnTr_1MV5,D]UDBIiT+L1RG/R"&o,*#[BNR!A4H1nG2EQ^VSC?1<]^.^65TH1]cQrPLmm at BsfUWI#WbF3/-
+%j<[R/ETgZgQi-3$C,=p\;96jP^"M!_kq[ksjLMOBBNXe9_Y9tjc<uJdkgLoS.Ze&oVqtS'+p&;W=>#-'M:JGHR:FY*`tTXa"UI at u
+%MTJ+*4Bke6Qi>pE0/jk":)Wb2)%Lh1ZhE)JBt/9/6-gj,Cr))S9S;-;:GcIFKioH8m?08j56l.WrU(A[mAaGt@>s.C at m:aUhC5&N
+%qahk)O1fc'[3J8G1uC7-s0)`)!>7(dl0]/O*hbMu=r7]F%A?Fs*hZ>CGXT&S&X>e^87m"q&Gb5Hqg>#'*bM9+I<cc*8XW/AZS)n3
+%k%;f\c.:U,<@OZ'k=]u:m$?`"5;kHmWm%QQXX`\9i^(BAR2M\LO`ki'6I)J+MR,`!+/`l2+YgB;Mp!HnZlNk at cq?SjZEpc7OqR>*
+%*mPGa<3P4)oPO[H'eGj!+lCCMP,<o&c.^:>7g7;#I1D5 at lr"QGod_VnO:PCT1`ZkYX6koEDM_aLeR!- at c=s5`lPu]XPDrSYn6ie]
+%"C^gOeM9Tk<*!lO-$5/-"=bXaqUiDh(TJ;Y4B,7b<8L43#nZ%7CJ(/McT\]&>q%<&Xm.-G<[A7ZP?`WgOig+mr5TiHJ8=sBeT&D?
+%'upj,!cUcD1NSQ>;;3]4KIW`0!6EGIeS/:]9?E-&&p*!`E<u:"8-IH4Yk"5Qp--);&c'Etb`t5Y^rXA/)e<bNm<GL;%Z!&:;EcQ'
+%(6-IWHj%VT3t"[)XV1[qd,H$o/ZOq8BEe,)U^:VEfMDd1dNh6%>H!bJ:pSKf;OQRqG&W'$ah4o"+-PeX at akVPa9bdC/IsG(H5,ER
+%BLOY9 at 4SY-C@!GC82 at eL)(<E#6($@#Z,V9^ff=/Mr8:<3HtS;E+S)ij819ancaIgAH'YfsW1.uKXFRQ`FQ1M)$&Ui<dlAHU-\*"s
+%k?u?=APTOVFQY)pQ!r*'7'4GT9->N)-+poYkJPCa)f?06j20p1Y(2?d at aeK@mLgq1`D=0?hJd(0(/>1S#7c]K1t/S%>*![3MHqde
+%:tieNd at rB+l%o\#0O86%9N>NS?&!M("$)0s at N2i6Jp:/KB-$!>mBFQ]9]@J3&i)o"8Y2gl7rmOcWZat?-"Jk+M=e%=7EkO+"Hk at -
+%:Slgt,.E4&lLJ"HWRm?L=tg3<_VM7"kF)Tf^Hq7V"UcB&,Z>bVg'G'(VbZRYhf]l%F at SH8Ku%<`QRpWBnE(Q;g",XdFNBID(A2(Z
+%i>[\uKEYLWdS5RSCo?2 at f90hkVVt&Ws/M)8&H(n7Xus_d#tl/%+0qZgnrr[dMUi at ZTAL[#[1aa0NkR>_]Les(GIE&mb=e188^uh^
+%kHK)KpUCn',8U`[:E\]XG?#WOeP2*&!aak!GY?sWXM:kQUol:A&\B^)XV/1I95193DqQsY3;4R<7C/c:W.0%qlU\.`WmUFCHB\'1
+%GmLt6$'V8c[e%uT#.t+aXIG.N2c$S^l7s.#U59"YTuf]],H1CEAOp'eD;Y\8Qt76VPK8f%BNd>]V1MHcgU'OmL+D'iB*,lE`Gr*C
+%!aD^li6CB./jQ"nCd>o5,5&3E08f.I`tcH/Nk^Ta[)F:]NV*C/B-!tNd3eqrGLF<$-dNC#h/.WP8!M(BN9_g2*cgApHf,c[%F#q%
+%)psg at Y^=gdm7E\VPteY^4L-`t/d>*/XV/13J9^A!S$(R--Ae"FHqmb3I+itoWfe'9-/4b``''GFUIMpkh8`K0;VKPda:h5"XPkU`
+%jQRDP3#Qf#HiP6\64b.B?E=>$96V4",U]Rh[!WNQXJmFFCl&Cu/e76"D*fC_DqO\6kR?s0$1ngHOpp!L,tN"+[5q#F-aPJJJl:DF
+%(#(8jCc3]3;u&G3j\DC<-D)E/a>dWXSAU%l*g7a1DGH^(B[ZDm*mckuCnJgcUp[(*']CtG<6-GD1RdH7i!2:9U?kjB%>*?@9nuH<
+%3j1YCZL7l=4[]I"[Rcc^ZP%doc9>IRLmMkTRnPf6)"=77'>I+13gCl at ikWi<&NA)2WITQtX-+Qckbu-,"8:>,c9dOg'rPqiA?"J>
+%qIZpVF^?aD%ZHL<mY>lO]*BCc+#u?o\T&VY?Wl:PP*<`s`kqk[#Uh88eRArX6JbI8#>fNf1??X&@p^?l1tj<Q$Hpn6(/[2YYdgfo
+%+.gCa_$&=88R3]CfqolI$bTbdTYJ[eO`.!46^ml#^osfn,g0BZ!*?HRfn<>RPqf?gQohq&ZpM078RZF-_o=i/$8N`T;AF++V3ONM
+%RNK^[,$9a2\2-d!M_DOL#I%7^CDDp4[64o6W)PF,9edY=OE+9q8R\(pT81(!,<?mTb1ngV:k>D>DV,]J]m+"F2g,NsGmjGA<((mh
+%>Q&JVR7okdBb3qK&\hnSnk^=5]gW"4PB8ACO?q.-U-fT!-V9B-m313OFS7"d05+#`ULA^qpFb!.:F7813-hcA]/81m4?)qlJUM7`
+%O%9d5`*KZ*Cd['6PgjkY<b[%L>>?/E;p=FW[VI?%i at j42QZ2:\Y0K#'HHEIM!p7Dso!Wkk/^kTiAT=kI.W;bW_SsX&/iXL,:>"E`
+%)ciSI.`Ai9<LsnCm,98Pg&@4.iBKHiSN,VRk[dB7[80'o"t']a3Ok6D'#5<_s"X=j-De6),Kpd#Q;R!Hk at 8S!2&>RI#sD9KU?>.!
+%);4o/G\qIGJ7NYT2HhZ:G7r[E#`L:!(<ZpTSJBf41,b>SaNN]7m&Bh,CEId:7E<-+O:\ag7e.N2#iga&WdOQcT"QmNpT1$MK-0\]
+%g0T?0]&kO[.)k=L at X?RBAXo!HlqgG5=#Cp25dQ]4]h"AtCGPn<Nkc'">Yj>q)4>P/;UX5:#]B!PV\^Co=2]L:+%4KHTaZu%$i#ab
+%hIW"ca:kAoqRZ%r9:Rc1b*N\"X^RVgpK^1KB<kWs<086(O_=1DJ/L?LJPRWM`"uN%h!2"le`<F8Wb'['?[L"[piTdEb9G`I+!nP^
+%,^#7[osB:0/P1]H*IkHNF-g?3W%dIXnFib&BPNRODQCs3QectX^)#pFf:<"a<lr0!5V.jZ.d*)PTEP49k48[].X9$##U05R!krJZ
+%;;Z9`5"0W?9@))"2d&K$R*6%\bfb0eU[q:opMK_dW/"G6N5NJ8T3XJ^]5;>.hCKh6P[(+9YgO^*f;X>lc1j at l.8T0GLRDfs]b=;o
+%IB'<V3?C./Mj!phq"@.b=?6<$DE#nJ8H at T1UX),3pF@(+.CqOh]lQlCX'@TAjQ>odPL=>8%r@,F:"ua/<?Kh5*gK5o49m6S%t&_d
+%E/_`AGHNWGaQrKZm^RX#ee'VOSW04jJ]hp=V at kdb$Ohhc>HIe^o[l^B/$PBWB2Yl07*fpF[$pUFIZ6j\WN/\J*@<cbT&Pnph)otS
+%*38&8"&lFM`2U$&kX,Vj3QiGW"3$b!_FgqH at Z$!g95(k3c5(]<prfK&:b<(<Q"1mG;@6BY!_MrG;#l\KiEVB_V@[G$K8\!C]<ptY
+%8TJIa`pds*<6A:l'5k]5BT\t&'V9kG[^'rri*C5P"L!k?3DVncX!^\a8CWZ?\`p2!iJ26)Q^O!GSug]5=0%3LDdB$0)D3b*TZeI6
+%nj#k+d-X,cA/&joa[T`i,@#6s at ql7T:$nLD\YY=LmGqB68^8&G-P_8D@'VpZ)R.BGQql.F.,Ufjd(*3?/L7MrYA2>hZ.Bb^.56RU
+%ms2ah[n4`D6p&\4.^!%=OG!U0M`8jhXUb$&Oe`U]npJl<r(Za94>jQ4g0-g&Ycj_^"a:)A+F1gAQuFIlZn>@qqUK)'a8K0,6l^0#
+%f%f>J/-`j at .J+<i,7qu(W<G2LpK;=C)\k<Wa#+*"8RTVK:%Oi at n^6Wl6\sfQm-I at T6&\ne&FqM5GWDkk3'nO%MPrQ*8ODGP:QiP[
+%N$_0^=:4Nt at lAT5qtI&eQI?H]n>9NnP,3hn8r=`#^SKeYNIZjf-BS;YPF>Wg8^bTYFGMK$7eo)X'n*Rb89?(X?99cf,;G5\6NZ8s
+%<0+A$9/8DEI?]ik>SYtp>s<AIC*8t9P!mG6?^0jVh^Eu&7?^.8^<1%:19)j&-*297'g-l-X2K)hi&RjB/6A*%fMbQLQFgZU8h2!E
+%L+B)R!WFR`LUm.;-U"9J:5b0EjN1\#/?1eB4r?\"ig%,$^TeQWUmC$07oXA"clbX@,,54mRQ[[Zb(=3c#]i[0IEU=8ka]Vd23X>h
+%V;uMR)=!R4=c20G@^FHW<[,2 at .Z]VWS?nlnK:$5,p[E,F-[!]dhl86 at 3'pN[c,(W.>k55d&7 at .$b-3XAG]:u,ki%&Jp,:,a*@^du
+%ApJYOQ:CICB#4Q9IEHG%JQs.le6nHGRlfL#(`%)Vk.n#C34jQ$F3lO63G at u0]0HJ!E.E\S3mUN0i$S8j,#XI_2.4b]\k>:@3t\E"
+%!A3iK8Y/3V)u5:[*M,cglF9-^+ at Pmr[WRW!h(fL\;)G`^.lOq8YXat.26Pk']p)"CWi'>P1%dY)M$i:)1J<4n(pIhK+QcX+&?HZ&
+%@S%@aZql]B3Kg17^nJ$NorJIT8)WR0n\AVA5&Q:4R"G35.;)qNT&&JX&C*r1j at lL_#E"_8Ch^=&fr"[eN`*#0n$\n[T8a]qBar+h
+%ft=BPfYH#EiZ]<-B(>R4h;g^JO.=nH=r[UO;rYIBWFM7_g8/Ul0&806;FCZB.-+,VSs4OdkGc_'5**TR6XG?FV at 9k'?jTNa,sSp?
+%UmpD-Wshhufk'-XSA8"P,HfWe4?`(!lh7?$IUn.,J*:-<F)IF'gu_,Ki at ZR+<GUFVC6Q?UV5NuW)_bK<L7jUnR"KiFRO-6sq:.j6
+%I:ke%#T_p2I*M0unB[m1,&@5ZX!LEH)rr;pE9IF9i8fkF)\'7In][%oXqaa(62AYI8uPNr\4ATM!$HcT?`@3;`GIZ-8"c$UZq=AD
+%lq[$=FJYU)NfOdDM^&],PS[S1'qg(GG[eNB.=QEVb],<#Xg!prYg;6aMNr_WNcSfI!(aR_VP-U?1&<`'=#iT(mp+tV77D7/<LPq5
+%]1YJhN2X'0MCR7p]nGb1[#MH at 7*'Emg<kFe_JD7'&fXa`k0W=4-j2mtNVTGoZ/rf4"rC)5hZ/l%SGh_m+lSh0hF.a-7<MfpSiebN
+%^>L-)3OBB1YYc1d$!@RMO!HP3`<D%9X86gf_V%.'WNb`POr[TmMhIIa10Mm8P1Gb*&s?8;kh?R=G*:!OJ^'>`(0`8D_t>@dB%kr*
+%^T`pPP4!M/fl\m>YgMCaS5XG8IQ?0J!?[pe;^1'D=SB^@.b?]%<,tmalmRP4"5?i4HZ]N!Ucaegf.OK[Q*m&>qHIZ[Xf>lrd6 at J:
+%dMcS;hCMrn_>B[3IfceRmVNl0ifMP2)H'1gR+JA%%4N.9(>gID3Zb]-MfC7LK/"dTM<J6L?S"(=DcTG$eN,ke9-NP&i0KDV@:9"S
+%@SO*XgU\s;fFW.,>WPQ#N!UOV7GF69S2&SU4FkI&?&kP_O3=>FaG2D%pqP!W37E[^k2kWna at bk(2Hc5$KTGM`,+Q"&Y3n%piksD`
+%!'/0T`_i6O-WVSK]H%nnnblm7]8^=UpEm/q-&K9/Xc)S^2AcKQV&>`BrVPZk>J.?*]SLjKat<\!H,>%NcK.flnN]8k_+gCHS!'?p
+%%U>-Z/GAjENeI*S[h[7J?Up2bRQJKZ2 at 3K1/P(D_/r^`WYrKonm#'OC(m6`&-;X=;euEYPI4.5a%T`7AeWa%K&bg-V*CjsF&m:CF
+%+8@)`fAVg%1f`mb[YTRqD>3KX0PGUcU"P#*9\ZGgOG*+*0k#6JBOI0"*k\D6J1M%o-\dfK#0G7G#;`I_E/F/pJ)+0kLV0;85iWGO
+%=*uJrG+Fi>N0'i-'*rP=m-*<m/p)u+-+:$-D=(lr<Q`0N\TF?:&ua>[eL3UIQ>>5$bt3d?4*'bgUf']gOsEP=UF[(eHWX+IepK/4
+%4p;nuG]k%8e[%6_g]3Z!\,f4g@@m5Q4 at GdXfNA6T`L5p.*.a(Ge8%WJ[<`U%(].C\[212(jh-hQ"%9(_e)`:6W?RA6R*cmI8u+1a
+%D%A9snX6G9d]D)3:\BWMfBKaXP<F6K\V`fr)seVBU*tZdO5.a>:9u4G/g/HVL5MK09+FT8V`Wf>f8ln&%[%/t6"g6q!52E"ai&LE
+%6="_HT)0'9At/.+]nB6EH#Yrf)G"^=L"gi(q2p<1`874H_]]cX=<)9Xftt=IA$aA'=sWblEdV/%*1=1&b\jI!RM/oEp1&!7eLA5t
+%3P(qh"XD1EjtJB;E^G^Q6<8J/9&W=k90=T4Ot)@6M!oP"5VX'_N#^*Cm8e*;qmptO:fUbVUbl7f^QBb?o2uG=]R&-o'_N`?_Wt/#
+%=/;;<=]JVh;`$r*NpBX</BB=CPV07-&h%DO.=*>0bX`IFluLVdM%"\'h9sfL3),K#*1n!H_I?S.:lC)Of2D[mg:!E/*E?-2PrU.l
+%Rnd82F!?S"aZHE0=,FV0FZe/)2\s.'nlU"#klJ^A=_"F]J8OI5b90OX-b7 at Fj!L0s$\hQKXnb4tle)cK=emGY8<M9ZJ!XF,+'DU<
+%m^RKJH5E/5(dHXZh-7g4Lrq^8X6<c(2Y49pIuXJ9QOp?THC8<^;Hk`M"U&oP/`p"iDSKMaI8UgbZTMHF601 at hI;UYW%<i4qF37GP
+%n_O"VCXG]p7 at _qkg"Q";L*1!F)+'p"39kQ9ZWo*:QR"J^fA!.+V:&:X;h!6]A9`&:.2&GW<<aFEJ6ru/&Cm)02N*r'Bq<3iq34?#
+%. at LBcT9D]29p-nnc_;hI_tBZ?i_&$+Xs3&k]$>=fWH%?`;CE.DbQWhW88qF$`o@'r8[GFUNp*XG]GcLSN`-mboVl`:"'Z>oI2&$$
+%^Zn7jd\A^3c`5K??!Y9fb+L8-09\3hq'K9.4Z-DZ$FKluKUV'T<i"8BZ[!$'@)?^W%!IB3c"2:/s(%Dkp"1#P9DCm4assTd+bGbX
+%aGgp)4XCjK&hZ7+9"MlSq]]>h/$j"mLkF#6mT07%*_i)UGc$rYAH6>M$"p1FXd63)KSS(^4N$/(gHjtDSMb>/'\X$T/igp+,-,R*
+%DRN_?$J[2XX]c8\3P:&+h+Ec9D+!3),q'b=h::AuQQGK#cnul"mE[u8!KjpS\Zqc`KM%_+j,-d;G#G-X?NHaAG$4 at NamZ2I6].0i
+%<QEpJA+3*&Yt#g+PDIc'7_lg2B at F?qMSZQDn6j-lA[HFM]krgl9sduWh.*uMk<8oEnS!es47q&;MrL:JS67rFTPV*j7Prr^cCHPS
+%^`EP4GA]E_RrYn0K?DQ;&kJ?6Nk at mTS>l:AdFps2@;ThpXa<[JbEJ/)@-E at K>]LQ!i2bjd#Y(j7*<3>uC,6qoD24?t1S(=2":#LG
+%BFHG0e+K^`cQK05oHSRa,Q<RMgA%Oi'e:\<g<heXI@[Au;]Rb-rU#6$-_?7Om.0"frR`A5NhKr^AdMc=N+t1B\&jPQ3EN@#AOmU,
+%,lI/RZ6J31CNYLqT+8BS("1Ok!Wu>aR?sA>8DgDf6.j_kPr-CeZrfsDU6AGK"r:j"8J_(cj^pX at i@\57[V)-7Aa*WBb[c\'6J*Z3
+%K)-1A,ms$<MRY#F#j.mgYG;#e8E9>$eLg1URmb_#V?eFe-f@:W8M[r@]]D.K9Q#6Dfg<$K\&B6D6Ge0Tk>HYm6i"$])Y[?FYM=/c
+%Xa!`<g5f5&;O9^*Qj'HCn@/u>]8Pfrg-C07m?4`QZ:OP"\S/JI0s""s(/pbDis3GK8QAo;]-Fil(<V(M@>PED.nM9GM%ikM4hCek
+%T!(2.XN>#YI`C;JH5<,3Cl>3,7!)Ap\BY;*<J:^<P1'L@^uhpN!Ma8!f8WbHes%ZsNXci-ngK'1>s="G3cD0Ve6i=Y.hHl`g*S!?
+%\=.c3g*gQ>6PAH(s88iKX$%k*i!ccGC]b_$.Fgbl$sDHX12!pZ=aZ%bn1;*1AOO5NYEmV7.&:h?*Jb*g:eL;#=`c<?p<-Yl$d*?l
+%WeZA_"e0i1I3nqXN^BFu^6hDs6nL/qgT)uJ1)A>)pO8#Uen+M/H^?TB-&^sAT02F?%.'#kCsA-+BqYuLX/p'A>%(n8VobZ^.0!hc
+%8H.9,d"nrWD;;SEo8BDjJOchC]F6^n3uRsl'0S-;+7+jS8R\iGR2H%I;hl5lf,V3W\!p%p$=cJ"O:"169MpUW[7nt0%l at EuGsmmm
+%=>'jTm(P&,EaTb1L-nMHg*p$>EiV:eV')(oELf0OV-^])R!-,'#%P+b(e3=uo!hCKH_Q.M;O;%>3tLNX#g,Jn])elQ4qdG,18!rJ
+%<\84i#T?4XRu7tr5cAQD>5=.DE[(Zk[MEga$+Ls(53//><NWZR$//sg*"HpK9IiUWD`7+.Y_1DGW]krXHk:!p'G/5Fm;i>p&'jk\
+%`4a at m$;??#:&5Bs3ojJaEE]8)Ou:?jhSbn"H'2EAh*!O5'SAmn$^j">331*WVb.Sn.U2.\._k5<05buq8ZZsPmAbeU>N-/D:G0a,
+%g.b;WS>ncL=]1LT\N3YL)(1Y4m5?i*Q=K"U^k)-9h7P/HO<P"7oZ1/qkH[.CM%S^>k?Q>!p)L.>*f9bo3m_$Q7D at NhHI>2n[,"7Q
+%JJI.bSkA-]1D1L@/T3X(1P!)Sa:a;jcu'^8+k<7n"/jC]*mS?]Va1_:k#`i4)Jif%IOPMEa`m7n:XIC-`="iVn at K"jI>Qamlu!H:
+%.>r2R3?=)V35X?2d<;CVSB</^Vg*IYf[Ut_hG3RuD@`D<C<_A=gV at dI:1%+q<s(g+.DN,XOA/V#OH-njTZ^P`*)NQ>bu4_`_NuFq
+%%hBS:$RjiE?^7Vr=5]e1+U+saJqjS?jNfa5"D9+D#<M3(b4tL(qp[Rq+AH!]>_J8,>7*tiYP(:64uECR`:%5P#9ujCM6GYSo(G@/
+%#B3H4JXOO&.0+s)EbJ4$@sb-e]l>Ie%JHh<"g"K?V at b36)j_1qA?'hNJ08B+kO+Z-L-ajB=KZ$QiK/=@Ku7h2m4;8?k1+7Mb&2I&
+%6Y)P%hI.4;ap;)"@2G/>*:CI5;ME%&3Jd%B&NsZ361JA5jto9<"lgEI-`r!sK22`V]9kn_`cTk1P\_/<Ruf07mTO%cW*cbH;+ZX9
+%0,N;0!2Gp;%tK at 6CiJH.N-..liK<N)R'4su;-I4pSnHYQ^"npVfd:!P[O7S>l&"^mn?]lI:+>PX3UqFM=+U.HZEnL0e86tO=iO\Q
+%1p'LSF"=pn>lr?6&0u7j,ZW)f/GtS\Oi-lWF5WXf-4dlTEM&4:?ip87$mnlaNZJmhn-EBREth,*heb-/48Nm\61TG1ei,3OGAM2a
+%\JFYY?L'Lt9+Rb9eZQ'/lJ_F^?HtTK[oIHJobg?O4\kD4e&eLoPT#]3JiCf3mbAdoj3XY:*TUoXafP]=,83]N8,rpTG&<DQ=fUVA
+%elg56F*%p5'fNSC(JjiLl9tbY<7\D]7F#W\k6n4a[\`CkEd;Nk,72;RnsF$)%MsQueU<^K"7+4JO(-W>_mc&#-VWO(9iWTU?LS;:
+%)@@AR+l>F%CSoUi1jahcpIXf[A8md9bLri?`M(WJ3)Ab&UJl-W*QCO$9qbrLms/FF7*e2W?(0',Bs>r66of>sSeu<f.!A0-ln4:B
+%FrcE5ZPJE+E!2-?Td%XjXTrWonX/>_!hC\is,6o(p&BNWs!L"gr2-rI+5["%^&,^JgFn$G+5U9&nFk*3s7j)%ldp(Qb?s0,q=Pj,
+%qd9?igM\]nn\>%ODgqL at fA!(t]3iQbKtk at J^](+FHTciVl[&p8/1duRnVb//f at u)4Dr:J at qp>/#n,!"_CiA_rh.-HM>lK&oG=@L9
+%iP5<e]D(].?F*YKkrjc__u;-^qt9g`E'M!s='tcGs7g3=]uTg9oBX#,T7?U5rpDpVFT9O^0E8(7?[]V9o?Eori946LrPuAh?D%2q
+%Q[ec'gHWH"rUoVDh#HsC/&+7Gn,@[%s'Fm'pW)+FJ+Mjt+8R):huE5kq=`XRDr5OFf<=W:^\R#]qg\/MhV\?3J)B/^M4aeBg]$0D
+%Dnc%.m>lYPdmpr(pL!ss-a.<8I/V<^s*J)J?i&fWq=Yp1lLk%(Gl<'*ros*2oCr",^3STX5QAb7m at 2_jhn8d]Rskm/+8t@]=+Bth
+%lSnd7hS+L,K=V#FV>em2rqZ;lcTf),n)*$oe$&cES,VRHqu6Tff5I8<q#:9IqesA8r9jR=3<(#eEW2AUs6_9'qK;]/rnH?0((A&q
+%Ip7,(r&am!k25nes8MS+J+NX)p](0SD`_=tI-Y/<Qe0iEh`lNK0DY-9 at N9G4^\Ye_kO8BP:[i]/k3Mn_5.!7MHZso7_>Nsj[F]=\
+%phe@#jCc`Pa2d'Z2t8R"r:'F9rO8HO4/)4hc\D,\O'hlMr(=7cmd+"M2hpMWGhg<^(Bs.er5qsUNW0X3(B<]6>C(bI?d.'1J+R=H
+%5CW at O]mn?qp;QWA+T(>o`;8^Grq"&+Gg.0lh9N4YLNfr:pNtR9go$M5oV^U&T+0`O^OFf7naGp3Ufnj)qnN+dJ*3dpIcOnuIP4p)
+%G7sJf5'99XGFuY3Du]OupE+l&F88g<m_;H+rlR_Mp[qU-^[I;S?LC%*q:m#M\GTl)J,2,gDi&ko;D?ZJo-Z0fLQ?o\rC?nai?LYX
+%DJpg#Wp<qc4+=]E^*&O7L>D[_++AGsp33_?`1Htp9qL]drpp$VgH4o85Q>Z:n*g+RO8!SMIX=;oHhX\Xq=+1HrT!j)J,]$MpCH`^
+%DkDOKiY-e!h&h-VIttLXr;HV at oXRc4qtAQAIr'VuLT:FCihdgTGQ7H%T7>Z=$hQa.r9E[Y*KTjdh>CLWfDETi?JjQ;5B(&i7k_p"
+%qq(f:l8RMCb883Ds5q5j21<%oIc2=GnG)=MT3fja=1j[AH'ReF?M2UI^1N!mHi2=G]p.^;r[VdCAVJ/45 at U]Yg]u[N[i4`(^H:lN
+%G^l?oq=S7Zk.3``(4ZA+Kq*YhrncPGHi$q#YMQZG?ha0drVXS2ir4?jkM'@g0D)mTkE#$-Vb?k+@^r7is8;ZB5 at F5XGJmu5\?=#G
+%D:QCF`OW8:.t;\kR"t_:.ST't'n:PWj&;OMlORpjrjOg.?TgWMVe\k"+91t7QfG>Q?[qkGq>-_4gYTVZJ"E;+psmi_5F.hm/:)s?
+%:Tq=gq0h.LpL.B7e33a![,Cl?ED_dX`peKQpiIV(ci#4UhuPt/SBhe8Rsm5ultsB64-oVjA8,DPm$A+Wkp=ZfEdlL/%fZ*LYNAK!
+%r,f::=&1Glrp[CXKm[.%Isgou\KBDu91#/Gs)bM!I_YZiGAk#5?cReIojm73S+HG=+2=9%1=p9O5Me1*oIF;A`K.QhO+']kTAido
+%oeHEha/gpYk5!9g'Pu]cchhODT.e3'n^D9ATC)<qmH<B at 2!B3T4NL=eT'uO3gl/E'a.Ml/:OdibF5H:SRoi2RjW;G@?5^63-U[^h
+%\NK4sIC:<6md\TopRa&'q57#No'&n5h<OSR=QGO8>j&H2phF]UB6X7BEo4=s&,l at a(YI?[=82U8kKPo1GBUgo_\V\7r:HJ.pO;Q)
+%T=q!qci;Hi*q=\_a7COe5;pR\-b%*6dSDL]T7?mD^]2"!kJuP)+$RS:rUJ?*I;t61_Y^5J1:R9245i,j(@I*jo4clC!8i1o'<W$W
+%p3Fu6hVuktAUA^Oe"ojToXp:]e#tKj=!)qK;a0*VpCG1<3,NQ%m8%p$;fmmm2`+n2'.`pr7/f^#A+&RMoPs!3V=V=tjgXS0Di5!o
+%=8V4_IbN<Hp/h:FoDZ+]O(\<Cj8/%",WNPae%YcF5%!pQO8e7!X8UI'++ESrD4lCYqSVJRI(1Y5o97/iq2P1AF?d=Wk?CTO2Mc?'
+%4RUrWS=e(?rh'"p='tm`q(Ie)Gc]M@^?0":HoAa+md'CtDa&D#'>;%"T>Au8D]cg\anL-6O-P#$#1K0&k:[Y?.4W(@=[,4So6jDS
+%`BEn^:[OXt(@gW4HeGLG=$"`)aKRepiKLg">+kNLY5+^Zae(r;o*'M.6(]=?(]XF&l=I>O`86j4n`iW\r7+^mj0SRH0?,a7+%73"
+%s8(O[k2N$%hL'Rt0=XH!iH#j-&;ug';;lcp/3_DWqr&dil4NNXIe*9gO-\`*'0`7O:Y.O4rqWIpLl5'm,DD_-qm7\W]]1q`qkcSh
+%@l"hhAb.ik%Sq"i^>Fd)4tl-KVp.Z!Bd`0Ds4tH24UE#;^P-mZ=NX*&qta+757N[GDW1-7="fcU^O,k?:\a/rIpDoY9:d5gT4%Tp
+%A59=WoZQF,r8^;mTCfJ)I_*j,1Em_N5<`EI]J#k)Z/>&0G.tJ;^\Hh2a7uiVhnB$ce'i]eUn5Hnqt;C#(86b8lX)9I36N$'). at tL
+%m&rT#FAJP&)&2o;kP4fDns@@sft<q7V"n(Z-8m`0A[m5;q8sMWEkafN_0s&mUH[Z at imkfVqW^RpkS66Wbf:MA2)4h9h!__cIJB<p
+%r92<l%3HZFICb3+H-m;Xqbd(anHW.R7qqG`P.]"t5 at +<PSCe#Ffp)8orqjN-3PuZsrr'b7r,h&Vk5U?@pM9pb<r:PUI`Af[5D(?M
+%r5+/9rnYKZJ*F3"PF0)K.2DiM?gARnQ_F?3JcYi>oS28I9E0M;e:7'Ys7U(i'a26%"MFU+e%;4kjXC6qVlFtu^#PaAhuE8^rY5gr
+%hG*'Qroq\*Qi:2jr:o<eIod.31+NtJ!:ocqFmbNmDh#^X^\if;pkuo8LH`c$04J\,rtllm\GDP1qT(>DL[X)0$94#`^RZ/4'(urb
+%+.M<P5>N*kZ`D3kJ&[isVQTgnm5'EEZ&"hpQhKhp=7K7-pe_+aKfqYLqYJ,.7m?"u%R+Opcb at gdI/;f_Mm4pN(\^Giib8F#7cEu)
+%<<)e-K`4XfHWn+TNF]5A-6/FY^;L4?(TLiZ[Eg/X:Z1Y^FS:Suie!eJ.%_aP6m3YeGfKd/lT`)VhttV60:j?R9E4O'>=!%Q)1nGq
+%:#SrXH2.K55Q+I4i$T$sp_e>L$r1+2;Yti13p`W'(oEhT=^u at J=QJIHo2W!&/R-pLa,UWYk-BX_bC2V at 5a#Hh+m3 at WGuJpd53CeR
+%:.qU"-mUk5El>\_[ON>ZVAa%2`gf(L*?eXi3W1+fW5DZt)NK"EWLIbYb_8hiGXG=q#;V0LUUF*Sfgg28<4\jtnq,T-[)]#pm>sgo
+%n*72;q'kk]5F]<h.Ttmkb49WFG]t.!S;,;9hD%+ketiU51da??[WK9>P*bh[;(]94ZV5d[E/:C"27>%b768_;a at L>V`uu+?i>-c8
+%90):JSn46I;;&WMp>Y9iiKa9!Tm5UtPk*VXZ;0pdqn&=+*D0%3c6h19\]&P\XWmAY[N*_M3Z at GQDoq0c*P&?pQqO%>&Tk36?Re7>
+%!BSn$pCTQbi-AidoQH1tVPrkU=lq,uPkUC)<cRRc/c@)@ChN_p#u[,>>T(-4q7fVK4<Z$3c<(j9WG at UC6,>HJ2%D!NYLs#VDG:s_
+%k:+3>P4?WHk0$Za],\G22bc"3kOj]hZ?`q&m5iZ:A].kR7$80jfFYW9>OmtpQG0D[DEAEuF3mkN^2<!!J_N1??S*3hD,Y2Q.2Aq+
+%7_bc6eh6ce/6-+<$Yi1\b#^^:'C<7LP.cj^%o':+?l.N8YC9*4Y<p\T;ZT at B#C24Q#cKX\DVNfE3?uNm%oD.UDE6$\S$@oHAVSZ<
+%;Qeh?+'t`g&=:n;=l->*f/Oj'qq0#j`7b'(Vk/BMY7:5-bA7[qcIaMeA8S7")FaU$N9</8?KMj at f/t at o<]bXhL3g17IQs&tFL"Sp
+%+hp'-qr+I$ki(!HDLC3L\2?-&fqsfoK8OYM<OlY%Q%2ls\uNYMCn+=aAZ;R at Z^?=Q:91aqCTsF;FtFc>KRDJ#8iGs<nHX6'KsDcm
+%E53<SF2Dp=p9s#A;EC$g:/7QIQ9![/0'eXqIQZ(o+0fjmLEjI[Xi>g\D%$6PW)_.jF&jN at K<9IUe<=l![])6g3/dVdC=H`/6T$/O
+%=\C_j;j3Yq*VO#Rk"@<Q4?1O8F3?="S3:_;1:D'O(2dmO.I/,<HAm`Qg;=PhU$1&I#FS=eOmR6^l>kDrj`7P;D!/ZZ7:)qpj;NF:
+%%_V-d"j5DkR!77(?FS8Z<'#PFPEid.>=kY:M))1bMFuRK+pDMp51M1=l_Q5LN at XCO>#k?PW[*WnmQ#4uqs9\m/F_$:Q)7J4(tc?7
+%9p/YW.;<oRrmbOaDDI,?V'^K#fL2r,C?kahYd^Q^lL^Aom<1]H2TK8ZZcc(&9?\I?\&l9NBTOrl*NN/7\Fe>9isgd##BCMj90Qa+
+%8aC at K70_MO8X(&<E)_P"86-Z#'F/bcCpV/clHZ8U`gAe,[irF&7Rd5iB2PJ:*"TaI5WBo6D0?s0Y#';[6X.$>8$_Y:)$%r1bI/m/
+%pn[jdQd!HIm1P3$p[d+-6]SRSd3nIjS<V<+[-G$P at 8&X,)6g_0p4\8Gi=nq1"Jn0*3HJKW/h'e_0XtM;kt'!,T9uZ(M2d^+=I)Pe
+%Qb!@VL:MFVo#SqHrbH%qf?lK<5Y'4GhA1Aj#=%\JM"[iXStki=+J'\P6&`&tI>7-q9DQFO1kN-7<dN;%P!K/;gdOYkA'+5?MG02`
+%.J"[-)(naG9K%`"_G[eH?eH7jc(eV=Nq;r/McC]ISWMUWbA"jmEHjKc!=S0e at C;HV^@&L@"h3tVGk*W3'HB\>:94[9do!a at 0Gds,
+%m]63!/,lFp4`a>dS7B<VAMBk-,Z<YEgX:6_/<cN=[PC=+.aKslEQX`U[S@^28QGh(IQ#+5H9!^RMWV4f/\7H-/8XL`*3(QjGWqp`
+%<\d at V2?6 at ONbYeRY(cY=/*;Y/W_q:WkL2.*kNjP36nbgF?RFb+.:Er._sk;1WM\fCUO&`a'=Ars/((lMQoQGB'^*R:`3.7_PKBSo
+%4J5ju2kn70Aok$3^!C:T=kod8g5<iYYE;ho5BDs(L.t at cB3f*;;m7jQ(V1&Ic1%@g=c$[0kc$<c%sGc.jJp):2HA9so!6^u2MQq?
+%Fttp(P'mi9hrQt"S6>VCM5,qh`QLGC=$I)I%sq?]ASc7Po4gk>QZJAb!7MN^Y#=toA2"un#@:h at m8RiG+Ye8%caLE$[gp'>S7A+f
+%2Pe/c;-nC%<Ji9:o at 16"p=D>N,FQ_-Yo#G:06%n6K%nk5oSWYLOf6,e(u4:J<oo3h`e63%ak3Em'hB[X:U-*X)VN;/ib_HbEUh!K
+%P_eMKpc at T(ZeUj]MNhR+m at e4%1^g>cR=J\qRUg2u64I=!*O4N#;,Z2,NOa3[8=(($__Tl&.kAOR`iVrggS0m-&uH3un]<a9CaJEM
+%2!^AEDM9)7-;n):Np8#,[?GeArAl,Zn1h!_6!PH:WL5C^;JJ\J<Hpjk`Rul(<jV4%T45__Gi6S#Q]JUU4?BN_FmOCAqWY(Y<(Q(P
+%V=F[M(>7rAo%kpr*;WG1iPZ&qb1LI:;0bK4i3PT31-!?"'-_ruQ6(2]ruplkE6B`KB8)jX&uAs*.?X[Uf@\dPB:l!KVEeR00U#>m
+%P[^3W]jk/L^I1XYk.pG]h'IrY$Ri3i$fNq?nsG??%OccH:&+n"OMbp\1=LuZ_ at i>?]cp].RoE.uD)f!P;b_5deL#)Y/]-Uc@`B'g
+%<s,#X[oe"SX+:Z$9&QCSF(ElNMK;=TSdfXU.O*&[ad0&RIMpoTE!'IIbsU3^KW!f<4fI`u'6">kN5G9GX/JS'!)BLle.B+mVD&3C
+%j]1f.-8La_AFSn;#Fk8b<L*W-OJ2g&lQ#]Sea?6i=+;F7Sj^olC?c`epV>CB'k/+>3LfB.f*HGFX=cPjVOm8pYGlam+D6sNBN1f2
+%KFG`IbEe".jNegg0S?r3g$TTXXc=hB*Lue!i()(Y3CX\'#5bp#r?,9O/_Kb\q&7[.,uJQB<%+pSl?FR'%s]Y?&2mu9D61mcPH9?=
+%LlFDDM(E'a0qlg"#O+\/;]1H9)hZ;fi4r9/rHe!c.)-V`$X4\H<Cn7Jl-aVS9SeBJ^"`kVGNaX"(QW4lN&G5[Uu0[u-rM=G#p.@'
+%.(UVNNU>d2,,f\?eE_.PjUiV7SJJAi0NV9!8-IQGdQZYs2fQ6:q.H9Cc:*l!ZgHn!i1[rH'@:A0nql^R>s")"eCSJ5rN.MFU[X:2
+%l/u"N.k:G#/YoCEk$h7CNVojGHOqDq`@5u;F7o?.e,6.kF-9(llRql9KqopO!;k\''S8PuHC#C6Kg7Z&6,D;qg:eZ!!s:KL`GFeY
+%cAk!=7_Qd^X^\]raJ*kO7Mq:geV8S5m6S%fl,oMDjUp3=D;Vna$B[H=&-Wh%P*E9aH0Pnh'1\Q`r??UL$LPmSqKnZ_c"_^IlVut`
+%Q+;\C?R?pXHPiftU]XH]/mXUOP%ce+goKP#UKaX!<>ZUo,pe>Rf6E<+c1+D_9nK+:"NtI(!/)k!-dC7/P$\nVaR*$L>"GZJ,-"d3
+%S^#R\Sc*^H`<;A^RROl1i&mfL!<sNeaDYms`f=_-Rt6MZ5Yem]__<KKRH(0",chIa.N(S@:C<p&.aLcm-8rSKi_uCl9SRrGV^d)P
+%(h$?n%]e:;,Z9TD<Y0ZbY7 at Zn7mG[qeqMBn`HuS`OE-K7o!"W`htT)fCiJ_h!?_AgSc'pkm6cNh7bWl*eLn$1q/C?[Qdt)ZZdZIb
+%2[g<&-]PnNeLH+Q+oI_NYAO at bcm%_E3O'9i+9p9__hS.`k$UlqGHbD:;tUu&G&N977d7%*Q_L at YQM';ZOtnlQX:AJrTRCf"0$+E7
+%[D3n2&2[n"!n8YMXkrc#b(+r>cR*6JitiB0_FK8]A8"t'>tUMnai'l;q/pS;CN`tB=@oaLnd4r>foZE!Ubm&Il/]#FjeOL9)9M.m
+%;%4V.mus'f8s5BP(Nu#Ra*>^-M#eD`huLEQ2.'H?q*E2EA;b-_B3VdObu1&G%$KZffa`Wi'KBp4KFE)+`7;M^e2PM!Ntj=Y.e9XQ
+%j at 5U(aOOC:Kr.YDda$,n&p4Mo3,"m5#eZ;nj)JkTX=X(8ofDg6W&H//0`u!`03,q$DGHYOm3n!>ZgAcs2:V-XVGX=?7aS;8?+p2I
+%4V)#*d1-9deuOq7N9%!0+!`M6 at U2i;&qr_.U[>uV-?3?<,FL%7J@&m-o)-u@&UJV0`O3kM2i.i at j5*imQU1NOrK1,dnh>"-]9D_f
+%8*E;a;]]IJZ&3K0YYau(3Y\`91g,LUpK`iU+u^(kVNb1Z4#:_T+qp2I`@&n8K%O'_,B2T\0HYRuUD+ at Wqpa%=&'"`:XbruX=h1'L
+%G(+--cE2JhdZ"UiKn'[dV"\+U0uc5WUs]A&,b9g&UWp>#B3_3?F%@gYXJM`/U&]=65tqgCO4G!?X(k"BSJ/E9+??1eD?]f/ni-'n
+%LcAMYiblR''#oOFX(,f>V"S-@)l=PhMNYKNqrhu9?(oW5"\YVQVkR_VE6O3(Z_%5Vf-\tOi4"g"7?p#H8!m\Z>nY8BruEjf&Rq:P
+%`+Ggbjl&iGh\C>?99SYEP/Q`h;hM8HerhO1HNZT[=L1?Njs%tpDg%E$:V8sT[Uc^(Vh=L'$I_3qIt9/j+XNr5o>Hq\TI8"=Rj,^:
+%;LZ%F66Q97RsKafLp.op+"iTpZWm3(`3b`_O.os8g&8^3Wds'PJ'@JkKVeeZO[#:J")!Bh]ghDq+C*DU<1]!noNW`N3M*u5h"Q!N
+%'R0B"!7-[r9"S/q@:m^4',LjXOpq\d<J5QD?2&X6P`%"7][[n&:"%N7jUp66D.XDOVnG^/"GF`SbA[3$aL_JETCcO3XH>!W]e/=B
+%"O0prlV&e9Lea4qFbg`rK at R&6&mWms,R'S//Eqs$Bp^%WW\Am"#f+RMTBfnk/gN0>%DP!/a_!7 at ArX>J!.QnG*;Ti&Hn`q&,jL+Q
+%74X8eqU%FnFKTc*IYPGb(Jt=1l;cOQ14WAb>H:F1n:NV&9Oo4_8.a;/@>dRR%P:;EQN\C`6QBd(#CSBMcUn_L>^2OQa.Z(pELSNB
+%`8`D^GEFU4bH=U3)%VY)-!.aj1^L^facc$!1m[[i>hcc/eZ0qAFjJM\>Ug%X:VqBaSUrtgR.,o_k<FZ]XX9YqNTN&!WS)!VnksBr
+%eaP#c7(h/HYCcn+"A@<eW$]NI)i`p/<n_4\!Cq_m?8hE!\&l[;q4:4o<MC>hMBopCgF;Ub,23;#I\`RH at U!sd</Wl>;s^\j4Mhh:
+%#7p2Uq&iJKXmYMVA<R'SP9)9.,a($J6.LD-a#qC>^II3d+au6G9a^Z%nti:<E9:0PaVqG<r-_QUHaD#ME:_Kq3W)to.gA,XSEXGE
+%@1D<DY**ucl-,l\/U>5oJn.j7dkr0.^<rY\qt7I`cq>k_XV/K^5]<!TH;7Atk1A+[J<[CV8bV=?'nCQ2!B;5)+^(jdj!co?4VmP=
+%63/P%\epT$XU.h>%Q>)!C263VVd2m7=6FQ<F(\LD5r[5\Dt$Lu3.;N;_"AUEP1lXsMUH#X=c=URaQ<e%S9bVid\f2IqAWA'/S,*+
+%=66!_"&b@>b0 at N?Be'WjOE$0)#L5o4#nE,)N5%mq6Rm9_a[HN8M`Q0MHPNM7k?k?"9"mT+Yjrj7YGEmiHuP<9;I5T]WnGB1OYH:D
+%'fRDIbiKs*mSaNG>FS"UjtS$0I=aS)UIq\d6qIFo[4K5O0cVLKdYB%Q:"m\;=j]\i`!([eV^a at 01.t0O@,`V.^I"GnjCj`;A*V;S
+%637ZgrPu;cbP\FFs33.#;'ure;AVof6["$,+F$p)Ng at So]H?49Z%sLrNl+WmlcI]$F)$nsGaHLg"/)fO at T=t$8H<Qu7)5<;bP7*K
+%YXb8R5B\t;Sd/Am&219<;qT@%P#YK._-69rW^qaK]ETMldl-@)>ZM2)ar.TDGoFgAAa]\E_Y3N$@uYL>'.9Z0OAU*I2G1kS[_\k[
+%ns&><DN7J]?R2pc1X9LZ=6q,eTUqS,EW&Rnpqc?7;Zq!166YF9QrKR?89,l8r"C8Q%k;BJ_32*ZOAUclA1k)U[K,EGad46cA;MR-
+%Mu(DN&q8d1TLoYB3RN[2%gH`'6sG"\C7S2ZIcB089pK#>k`@io9_,R5lM6C%>pW8gk)fuGg_r,>s$=*K\\=iKOdgGo2r]MUR00fH
+%Qad9LMIUGKS(4(j.CiU^QiMq9[^sTbQ(m&!RgNX5IOg9I]HteMZ at qSWCmPllHTLLegr:ck/X&^7$)?h9:'^HOmSU3W at B65YW*&L4
+%?hodVTId*3$"Z4Q at WaR>`7-_M/AE2nG+a>NPf"_)$(<NBZQmc\O/d9\!Qne/!K;#uo$O_P1(*%;4F5RtX`XZ=O""dY??Je*$ciEs
+%'SV/H\Uk-bMXp,!X6OHDZfQ`>;inVg at VnuJ>mt'/Gm$po!DMi9.3b!knL2"rCp./r*:Y.<,t;FT+/`XgLKmRZ]6TIcESD[f+.*,s
+%LXJeAW\Z4.>0/@<aM6Ag7EVc=^)snbe5fKOqm7nP-')G"(Q#gs:+p(/e]5>[:=Y.S\(u*uQB"HL%\V4KYjn-tisO&LRQ&4KA[*T_
+%.&`BKJ7NrrWi-OiK'Y^<#+gE'HT^M?o(_ at 8DB;gr2c]`;7Inr1/\b;kltVh3mir?+P'LJLX6e6'/A7X7*4lX8lk$VN.;R^i2itOL
+%<kr<ob&m-2MV]jdVl.At`j+],<=N^s-crNJYhTLU3X1e+A\4))"-eW"m8VKaauilc\Gg=6!Vhi&YXUWu<?p05rekL@#&K;8X>](8
+%U)YErn\U*I`XCEQffID>8VGioD,:t!%ptAtbrl+=0E>JE$(Qk]MUn=R'II(OV"B%h"^P8aYZ_2T[k?]<PA$T/d?d47fW"6IQF'me
+%TXGqMQS=`mV*M8Tg47e+00/P7)q`dIRWS,8laV5iHV%.W=pjCbQW7>p4dK)c6L(k=lcQ#762TG)</Y9lX0;one)Z?_(lfHZ_BeiD
+%>T>#jf&jLlR:brtQ7#`I85,41I&Uquj"$,V>8=hD'$BM%8a87i-V9b3//o*h`UR6:]-Q&V^5=N5TNn^]`Jn(S44nRG\1'I.oJMtQ
+%8iuL/I$-<1!Ti<?VNU)(h9_KmP'"VERGL'DS]1Cmd\)]nVGMNUO.;P?h+,7d`^h`&Sda'E*;3u`RhGT;@#4a6.dlC9s*fYn0U2Wa
+%G2ijIaW3oZfVr$Q=q?4p6-O><9KrYc4#ARhXG17&npj4f;m*)rDt=P^,G*]$B;'#aB>W12K2d6SnW]h$,Z=qmMVY3`?R5Z1;sfmk
+%-ZcR-^gs,D&NcfC.LX^e;m&b]L2T)WSjdL(^9l&Q(/E'2jQ*sVC=s9 at cd`]IH^j2IZG,">@t0+;9;p9^@uk$,J/]r<kDSF%?Rj`-
+%G#,tIO;/hs^+O\Y%_eJN05jPNOqY0E48)5u/-i/^g0%$G,/Y)F[?2G\..Cc*2M[Ou^WE'0H9-f'J2iW at gBoh#mcXoT78"e0B7#D5
+%HbFEO!1ZtR&&/5l;h0h>>BspGW4aX](/Ko<ITh'bA/SI7'BE+aYd4qdBb_ZrPBu&'g[4&GNA&0A*MA\BkR4pe,7m at f.r\C^MT)5F
+%"hpk:$Gd7#Y3N&Q9uNP4F_ at O,&YH=9(kbd83$6R<l(SY`_(A4oWQoIu9-C9t[o*QSh at B+:FXFY^h_j'i=, at d')o!G))p3Z"A`JY+
+%j]K-_J)+6RQHrHk;)Mao'pH)._(rMU^1HlU`D*cZKktP0j(To/$khPCDaA4u[X)P at N_(8$b639]irQ.K^r0om3%jR%lNW#7E&4BE
+%F2_`g\QnPGY'2aJX'0>dgt&JLK#cuG*)G1O]4J8%0p`%[\6@%n\A2p'DEOPfQss.TZJKoD2pK?.ohX+N[_siX/BJk^GD/>3O0c]J
+%Rmcf;M5uoGH31din(8On%]ZKV_0qJVHcP/kbsjn4-Qu_)^Ou;CeO9etEX?'1\Wa\TGj/nr'Fp)W6QNm]'tc$,[3RHS+pTDh&'q^t
+%]1nOt4I?:s&ol$IAnfu=%HY)_*BMdU\7Kq\LWc8_Fr+QG49u_jD#JPH;0It-ZKa@`2NRfJ)csAGUn*1!G%Hi#&[sO[*(WU)=@N/!
+%.WUYOk5be%@[G\>Q'6g/+p\cgGBrYG[7(71:,,GFZ:GGuc*<3?AVE!=^n"%OD=q^F7PIsTcBq7aQX(>nOdsS\1*0Do-8+K:/tJMa
+%YETWSB.5DM=KY=?+NN!rSr'tgjg=-mFqQP;5Pf!^Th=5H*m_01+:1o1J=e1sU9keLFom7%XKYh'PC]/;PmrX.SG1]gJA!o=M.G$Z
+%]-hRWG4uu3dOT-RCLRV^O>'4$hNaYm)[Nb#o+XWV3ajsg0+'P#+F7*U5)7T=%6jG5`$E`?EGQHl\k#VkPR_J!U*<mnaI2EkXtUcU
+%&9pKG4`"eq\<C=19RZ[_qqg^rKLoDsGI3t4@=f-$hS[@I><Q#!`KO,Ka:Qn5PgL";a__T.Xd_1AJII04a"%%u>s2<cfju:k%:.A$
+%XHktoMs&%VR!VC/.4%a>:\?sU/Dd3UQWsu`D4]6+;@uoY;;ke&TF0$Lk,e,VD6'Kh+MsgMVBXHX!Y'QVkm_hneC_=uSk/%\?2&bj
+%1U<b0Yb?(D\"S'qm2:b?Ml5Xo=I2sG&Q#+,G*-0inTBQ$G"M0p<Kn@$HHb4hJ1(UhNgnOto:a[a<es"ERV`1h<kOOmi=U'6G-?1U
+%Y]I2p"gXs[V0*9/o1uoq<N'="T/O54p4Z*`Y3=eQ0n4-"du+%mZkIdar3\$,9VTk6XY@!$AZTLiJB8VXm>KKQ(m747>M]j=:?$7t
+%V!ce7>M[rc;?WhO:"R!d7$D3P8R#B7q.?-rfeD\B<m*:%8mCQTXna7(q4a;+!C.:>ahpZZ4c*uqAV8T"s$G#-H5%0\Bf[#p\ti++
+%Xfc&P/A-)T$'k!2P",;Q],TIQTe=2:"#OCdRBb4M6Z+3Vm&FSe=H=u>U>FYei@?f3iBL2ARRVH\9!<IqYam]282uAVOt^\t"8aMd
+%juSr/MBLGDOb`B(PC8m\`?5K6L+,.JjaY0<DmIB+K#\E=JIrC<7;K6VIbCd1GuiP/\5ioS(:)SAk914i0lAb-[Xp=uBjXOpPp[rN
+%oIS<HDRh0%dg>2gmhi'V/;XdjmD/;oR&5>6*eY at YCq)?V9^IPRArm^L at q"2+0>)U`2n!I!@=/X.2 at 2tFVTKgs$!$Ach[[UN<ns+U
+%Uo-_DG^e(fV;B%H7#k\S3;@9IR-1=*1Unl,Zan9S\-rHNq3DZ75Z3Xc(\1=a"E:qBJ#i-fP1SBd&<2CpfE`;Drqdj3hN6Bq at e$Kc
+%#hZb8!CWYT2'mjZ/M0kgie8?I75 at l[D4^OUeEk(FSotd=f at j1*m6ZCDiEZUB0%k+BMin4dCoUB7>8r-Eas)Emp^#fm_Li4FUf%o8
+%GK&,+EVistVu[HjS((spFuB at 2Rl$`Vl!l_+&,C5n&;M\]]&ZOA5H=Z&nu=')E8;h3?>T$WT`pcb7cl#uZFd.2i)8S$/sghg;][=6
+%f&WK4o:Gd\l'?D[)0RMWZUYNMS!k/g"G15JQ(h0.D7O)7T_4oCdfd?PP>T3`W=7'aIFPDfPr/[Vp?-3PQrF4h2O24)i8u"WY`=O)
+%YB>$A?JI*A at SuPCj>k=Y_m)<`UfX>+;V%lU0._X*#mu:iem-Mo0gr/8P_Dp-#f[X"^>F6fHXm`eX7jJs8Cn6,_>3Ou at V/irXJp%]
+%kr?r+1&B-.#9s#9\]%4p8/C8uiJk'Oqm&7[74RJDWW<cuXoaO(M`7"!n/)nuNmlX2Tbj2'Ymqn8#Q?k8Eu9`WjOPI'C1Cnm)ToTr
+%1LKX!d,*Eu[O*HY'eUW"'3()u?4''^bPl5KXFj3jA4"s10.VZ6/]t.Fg1gWpHu+4Ne"H4-b.],m:-gD\3bO at V&MHq.1-UrP6>A_R
+%@e\-l0*gogX$G;pX/Whl,(85M!0W*DQpgmG+O(9dTm":C!fIXe0$,T"DMF'5a"XMKjCUKLXmC5D/FFU\pWWT+btO6=dA at -,-aCC7
+%Q4<%)Od?r?8rk5nEhpjP*:2"V)pftF-*errKiP.Xk946dD!C8e.B'+%f$j1P5";F6e%Q%#4\UQP"e>@XH7GV!Wl`9$4B at 5?\8`Wa
+%[_4BKoO%blA$<2_1@*u.oD\1E%6+QaE2_OqfZ-[cLWc_Q$KLQk\5Rghc*DA0`'oeJJPT at R@$ag?[PE6#?2rRjCQrtrmU-))IX73Q
+%f\7[,Lf<JKZZTRafcE9b[s_Kb';]aa,U=Qq7=`'h;ZY?j+m3=!>R(<A%r<(\P)M63>Nh^@/=U3<goGa*_1^(u4W]*\_4Hq&nE*V?
+%'![13NU!86ot,i[W\sgT5!5s-:^f+d'KVE<W)hTA`$%k\Pu^T]0^d3k&i%J=mJ(\tBFrmQ6(<*lHEVK3O#,L*O&o1I#s2CoIZY%Q
+%F</.?.`2 at pe-^TnNb\5B'[*\?r+%nE4_0B9`-/D??"_Z(,>\k!JMhB4"Efp1563?!gYV9HZiqHt#A+jMg4L3B9b<nJ?<BNO(^]K4
+%NW_[@`cH<.QbsMfX1!TXO$p&dJ-`dJW6#X9l9T>i'7hNfMq437X@;'==O_Y#:WLn=%6S[GWe.S3^`:m.?L_qZW!Yg'4$5W7(!2lL
+%g0BCjW^;.e$Tn604uoMMLldMr=_q at Fo]9?/euj#LE0)Tr-I+UW/.6B\*V_ZsfqN8%GerAGL?1i?l/1l]0Xi?n:B73nAB9p@"`37i
+%5d;,FnFjea^-%fmGF0cF$LUqWaY%N<7*^e9=og8"5Ws/XTZs4lMEDXqV'NC_P%*unf-:U^(:U9Q)_IQm):rXrbQEOc.r2thX?C5`
+%Q:=PR$,*7=J(Pur#X<=OKjF)=\dA<n-#C\VM2^+$7m$kbg7%q'nFJ2HOo3`>9TPNpmWY'n>TTU.cApf!MXel<YrJdrY<9eie:0N)
+%N7VXCXf.+L;R"k7ZJ51e^V5+*YpoPiE at p?>RP7:g8^"_D>^Wk*H+#*Y*NCkn`1f]jmZ$\QR`.Qb(KTJ5DBG#mr at .*FWfdM)o:45;
+%@49iADfBAbW:9(V^jK2O6`l2QSO at a<Out%H17<,5O]O at I(L;@brNJY(XGac<"NejM<c$ul<G_n,[oH)BJr<q%0bX9?,hlcIgJqlG
+%]E%E\1)IdEOrf5,'dbbOjHYBFQ)W<[AtsSCR$WL!9O_jXi?2>LeZ)j at c!ruR_,(Y>KSf"6j>p#GA>$9%5Uero4OkQ`)_.orH6<^T
+%MKQ#J*9<2T<tQPWSk<Pre5:skJN!PX,L<]dXXZ6,HM10qIIVF93E:D`*>U.`]e3\"d9f`m7/a/g\YdFYCd'p[5N/=3q*=#bVV;*_
+%9i[<jbCiRs>K8gAWn50G#LJdihjMQ_\W<gWkGeCJ5&cg)ScX4=comT=.M8(,ne'JaE^,Cu"Ek*t8YqGq[q(H`X$S&Y\54Z*`>[Tl
+%S at J+)#`4m<lsP9tD/>Ql^eCE"$-n-VO(5UJKiJ9o91a$,!-15_F10S"-+O";EfUIm#_0Ba^9<Wqn at E`L1Ml?Om?0qNeVl23Kc2gH
+%i(-(VA]I=elcK+r5JdngUZRo@)^I5/RGb']-s;:8o at Y%sX^P63:MX&R4P66.m'EorfNuB5-54YYn.`ff*b?I0Wa]#PYu._B:/^:a
+%*m,3Eqa^<\Q[jZn\Ce%P5`I?sQSXo-RWJ7`4B2HQg"X;4I'(:f6'8=NJ-_>NaT<L95%,kNSIu4lEeoel]IX@%\\b at GlWM0O;^_4E
+%5toc2=<1q?Fi!g537J42+8JlFWNYB#*kn310b85 at 2f#\#[*&TtY%5l7X@:e+I2Uruf,C1S!+Z-=0%E+K[<G\Mc_C<_CD8nhhsbcB
+%a2C\l?%Z>kW\plLri+](/FO=OII-`fjrK+eVcJV>MS?)/^<4F0?/37%G/5!-/eD]R&EKX!Vc,V6Z:itF#djVSG9??W3f.koR9db+
+%/#o3kg7:BKhuP<ja4"6E"_#OPVC'8hWoDga-Z^NSgcQQQ<CjMjP"5G^)H#N<Z`Wq4:uSX(/4YdDSg4ZF2oR;Z3t'hl-jW:5hp!lk
+%;k-XoX+RKSKf$Vl>7+64noO\%'s.t'L:T+K%F=(N?MB?a#F at 6P;3(U=fNiS8DFmXBQNX+%fIdKHlF[F8L<njn?[+n(So`mZMe8#;
+%G!m`ai?Ap)AKEsoX*@s2J(Wf+Y0^tRf](BcWN:04V#]N#@M:8BIG*cXRQ?@;J[fiT;=\f2`*0%5DF at cQJ8JZ=,eD$1057m^?m>"%
+%(KSNZ?;=)#F]B"^T='<(X$u#@[X at Yk]\6es!lH-$?IiQj2KtJlrW&154kMsU^e]BE>er[AFb4>=ZK$0l1"Elgq\k<03#o6rAlp/Z
+%+L<5S8*=fC'*C192D3c.(5ZU5eK)cPSa@]1gbo[#[kW"B%X!":9:Qnt*qXaOAOUWAPpQ^:MX5J^G,rq.8<iN.5GCc;q`KAJn_rS/
+%&[p\m<5"OpGk-h"2 at e']g+7DNc!?i(-R/3#V+e=Z%i^eGe,nY1e<;rIK=,M'^.d(m:526(`)AAnBD%u^JNXugB43 at J.FgdN?5D>a
+%XkCuNffcn/[1uJ]O+XA6K\@0;?W8m+ju0qG8pX0&I:is0JE)<lnp\A+[F%D&Nc`:a`g1[gWX'$2"C>2e]pH-DFc3]hQtGOGWrHi<
+%<-A;]0Sn&bY$oE^PZW7\7*f:D,I#EN$r9,&U?+ue6oB\mj>,[EWX;/tk%4'"I^;Leam at rra5.%l0/i\TaQn(]l%lfI)70!5(@M`@
+%eWid'oBcBs]\G^Mb:YU*'T3k_9-DWE#%:\&lCL<nJI(+B;BV#Sdq;OESBXY1L at 6Ao*am%%7>G,2S](r+hp0C:/@gm#m(pD$4.>2o
+%)(+SKSJ$HthQ,2?\9L,O,60GS@`9^]Xn"GcQ-3&`cc1mc$_V at 5[#/.gapN(YJ:1A!B\sj10?t0bZA2Gm$[^$S_eW_X:b9_A/#__8
+%!mY3:g$&KKgRKAITsAP4XpPQ at f5l<Z'49c.<H<QA:2\oQO&#Gg#&I=8`O?lNGrZ9QIHMRaQnTjspj65qBYZWR0"YB#14Y#C![W$1
+%&JX_7MlHaeN^E/D82Oi5bqSW<(Q]ND$;*2QBW=O-Usej:ZD`s at lt0!6KTWm3S$e>p92il0n.V5lf;bK:R?;@V[%F9/h9seI(eqFI
+%/&>-r*`FG0(@k1bGhS<VMkuaiL[7P.,5<s]U4?OTr<nW/-5+"b^kq+NFkK_:$p%Dh$T[J>6$JIO@)iRca.#@)^h<0ChnHQ"cmENh
+%4F^Lg at b#4$1rYuZKp8D4$H?nZQe>oInfBcHHEcS&ap5"uR,]daNtc33CYZLm?8!hDW:=X]9$(b;?iYs'#f"'XiF_Q0'"S>]fOpA_
+%UT(9<7?u5%\@$n$'S/i9GrQ^8W1V47/i]/88H[EAM#c[SNarG^_A1CpRPB"o+#,9Y#+aNqe^;@!m!i!40kT/GR[27FfU%AN,PJ at +
+%h;^rP%BC0/Fs(79bH?(+q)Gr7G/%>VN at rVB8BE@B^*)"n5^IHTkERr<%3.+-U""pf0SP#GVO5(2+#Q'YFV9+s>mVQ"k%SCa4F>Sh
+%!9T(J[LV<R!,AR:++e_0L,#cP.Ku"VX8Zn.`)<g>A9ZZ\-f\2>[OU3S3.DE'F1!G3Eb;A]W:!ZQAJQ5K'dQkW[@&;m.=/7<Q2u`Z
+%76Ajr]&K/sAoW_S)ruoYS(%&%Q'7O>m9I%o6 at Js$3gm!m+R-Q@/IOPAOC0R7W[Z6b:"<0d]>-\<LUg,WK<+$XK:E>&$<%1?YVd`=
+%_&k+OgY1`Ti:bHKm5GO0].El\f/-4U[W_rk2R)Xb;p7R;1:<$`Vn:(MfNlekZ/uN*3mFB39"Q at iWFQN"'V;dt9r^p5&4N=UDn#uK
+%&MQM5T\pTiF=f;!eNr/GD9TQdN)gu/+jRF#!/^ol&=Gd`":jV$cYAT%#=OjY((V21We8F*Gm[-WK>P'V%oT=M at 5'(lG8n+%n:3j<
+%J_Wge_;LZi8q[n&N=@/cA5/H3NS0g4LU[WPS at CWI(07S]R7`"0$tGWjA+_r=@qa<TLsG)M_,l5,-[rbr"ZK!A+O.)*eF6)`@jm%W
+%m:781V?'M:_M1c7=64][qV06%a.4?bj7b4"h5)k<QB*[Df20d3`3Lh"]-ZKL\0U/bX8F%S%s>;OZorJF>M;ge0]L%m3?(N6E)-:8
+%\IsL#P-QApkt>'0GI8a8&d,c$F61OJH[8]EPGEF8pEKhGlcm.8QROVEjuQ`[-O_n;%'S]G9=,Y=\#p2T%X]Y--d3Ut#h$aS.6c%*
+%J=s*oXA:q:%SC2MV&lq:jToWuTtKjB*sAEFSIUPC+H5j;r#%[r4XXK8G5eF$n;kVs=(F2p#fkB_3*5";7+&/Dg<%X+UgdJ<mBD9m
+%>a9C@,MCPu:1]W+cT1*mb,"QPFoM*?gE2pOVQae/J/YBEJ1luV3+[!4L0qn&"DbuCG^B-ja.RHR[Cl3K[ZqE(4M'ZA2leGeaP/[O
+%e>!s@`B-i=YD6pt!7.'TPE8epgK2E5js\.oCX?>O,_^n at K=SpVnLk6?X-i74Xohf:GaQZSB+6c9n"u=.ktA7ca,Z\U4M^!#EX+=]
+%2,ON^0nN9#^iLtf`bS,\Z)<#o6f8;L3u$-1[q[Sr.Ci2M:J[PQ_tj1H=2iViY0-,)$`UGtE.S1fKF$Ck1EIipLh2mfA[2SdSN?GW
+%QVFm<*P?W>3CT_F+cL@!M?-74ih"Yn")=*$Z\aT1HFEe?2XKrm^cFQ,nTQG((o-[N<[1\?joVJ^s/WDn`.LL##FINqR>IH:^[90g
+%A`\LW*d<9#!l,'rBfhd+]/R#VG*Tdn<8Y6GP<D(5*A1%"#7&O;d:&G^iN.m6XV:X_n(h(`qkO97RI$NHP)R4CSC:)@4P1-=nlZdc
+%2[cd!-^?N)[=:m3H-fO"Mr9c.C2n9-PoD'QlLG#+!6F_,OHIJ&*k\Y&4skrSe_>&IfpqhVm,j`LM*77+&[4%d#sK',*,m&BTpB,T
+%l,<<,CZAt"[s^0[<DSeM:)3rIoN\%D=7&Z_J:b4.9RN_q!&8j/Gr\E.EB_h8e)K%$IMjLVeCsD$k3(%Oi\>7)hWO<t#AC_,7.WmN
+%<D?`Fhr/5a>8MWI7/t;Fq>JIA^*NTBjJhEjdY#$3RiNop<)1b&=+ZNgA$pQQp:;bkVQ(INVRaft!kHt=]4uTOU at oP1,3M\nFF-T?
+%;FuR;7EN,=nQ;:PE%@k!4EUDS]- at L4p<Fn-o!4WZblaE`$%(S1n475'(Ff*a![0[Em^q:afd7[R5+OB/_AUP5Uca?7Uuu,qJE%o?
+%3%cs[n=V8fJ:V!`Soh8sTSCSHAf[0GM^V/_9qlFP.S3B!>(#tu04t0 at S_k#)4_2[>(kX1:;N[V'nppfql\uU0&-T"51"iu>X41ap
+%0(-Rh/5FGuRR[6lheBK$GoV.-YSC(E!r!8U!0&Zp8QcOM*B3eLbd3Lm(@2gb<&:\Oi1RgqMN+s1A8oYX8ctS392#[l\Bj4Y2$URi
+%DJjsVGt\8rgR>r"j@@*)WBP3DZtqS0%Q:Nq%h!VJreT`:`Ypg/#U!!0V,5i=*E;9h3^&p)Mg61h3g7E$(O>m(D4 at 1E40IKe1N:Aj
+%c_OO at _m;7 at -7@S%]?T-#A[Z*30Fh"%j9-fl$da/Ilas,Z+)8$K831+Q`)K,ip)E5K+GA!-2HsCjmmUtE%t*a&e7BDHEcn=Ea.<0Y
+%JYp+8_GVZ\Vn=+.j*BYPWu_/W0Ji&(n4u/W3uGf+a82HP3pd<bfdJ^H at i]F at SQR%&):]pJ*=:$&'=ERcEN;/VgIXCVS9Udd=DS6M
+%p&ZgI?ZCW`L"Jj#Rq64>]K4i-=5Y/ERc:rHX#$K>#sA4AG$0Nr5utd&FfGuLkUk)7FRm)pW[',e->-DAUgGC^];_6*i`Kj6@(fT&
+%XV\/&,`Ns<HH`ge9='14(7uk(FqYs#^Ns\@Hga\cP%1*\WXVOIn=Vhg2C!1p0qUPR0C>gZoo"0WWSf4]H;WOW<DcO0WQ59fVh%.E
+%pjO56BMeeNldC]fkA;HsPJ)bE:Fq5eos4\*qsC!;*K*F<4:$9_($'NRlA1W?Erko*.r!JfLsco^1?4Hh,bE9_X`BVQ2=N<RF[JJ=
+%qkS&(364QWh*EXNVre-V1!>Y:bq;c(7/[$.+[L(C1ms"88NWWF=\#cp]J$d-8MCn$Q=s%RjbYmlI>@&u`[GB0+^lL15:`Bm(_u]b
+%J6ff$4p7DE^cG5ZA/U%C-.l4tV-A,l@;glpm7A/72R5&l9H8Ni6suE!#mLp\F,WUEa0>XT]EL<O:!enPf:qDKZ=8SXfl'M-hm8#k
+%m(*.u3,Z2H,U!:/73rmuQUdRHKL2adh[gDQMO6^)^_:,?p-W at H&:$D3A;Aip].#dILL07^q!e/O[&;onG*peip%5_7;d>PW.O;@]
+%q/bc%g*.3aPl9I8MnIR<T$s64BO;bc/p<F-3 at an6OauUgScYXT]bmh<[23[_n3lVuSU?)=`V/+;\M8"2.?Kau]%t9sYhXc[6o,GX
+%!"QaK7UYPBj_Z9Ri(2T>Rn^qD5[f%<.90dr[VI*BBntLWJ7@;kghjQs.`kkc6jZa)fN0C9d`!HXV'f.=3=/?S%j\.dKt&)toPjO!
+%?#hcL9X]\$&/[>KWq7 at fN/>e_nN]8T2R#g+p+>?=O,3/+EKd$$fsP\rg:2R/>Wf+m`(@U>6u]qDP*k!#DO*e\M$;""3%;LdXD>/O
+%4:_Mb<UH!;6dG,IXI=2c2t<[OCeahl6'(\:q)5^m8;AWcSi'c'l9<8bGRWTV`S#_<+DF[Sklt&p#AUB[ZM!D-Bm-R48R2RI^rr at f
+%+d08C5b<=/5O.LQk$2Ft`-=/[,^8c6K@:E77Z`\J\M3^Bqj,#G5T';JQR6]E\YUO<hm--461kf66[hai^F81ppS::jJ?PZ&0-JNm
+%0#1?4M-[1g[L7PDEHNPH[Kg8ZT39A&+]KW at YV`]n^u[bCL6k]a!*C-)hG%HP,/=&pbmGU)FZ?cs`5BMG>95CCbXmk,cB=O9=k6mT
+%*PPZ"?]UTqkcd"0</C24aQ1.TEZ6dMJ44 at W;f`.Gi(/q%#)p_]o at b*B[&fG*JKJaP`M]kl<EqOlJb73D_olXL8$n2<in#_=W6;4C
+%mq!DRk`<?h4#k)edA&_B"m0q?58.QhILkcPr*.6*!s+(:HWg2Tg\/m@\W at elYXtj5cJ7FTA-j[MI/^2.2:<BhVh'Xr^cN=Cg0#ii
+%6Cd\JM4BAq<$&4m(PWU@?-]KdmOpKRRZ?.bm&5&r'E#,Zo>S%ui]@S[<WgMcZA9%lk7JbrJ!D_4oB)c#-oO1J2(PGU#;;YQXU[PI
+%3hL9[9hs(+;9=CV]UZEg$K6grf.;.:#a2=+m"aM%!0HDD.[e@';);EKL,- at V2GCbe_\1ZKl"q5L.3dMjOfcF;A4Z(,SgLp&R`L!,
+%e*>)u)+0-)0sss=TU&e,-Qr;VF7gR#Qc*nW`*lpEh;XTeB-+npM4C<Zl#i;*;^/t`SZ%PKI;LpqlEeR,<nNt\T*E$S'7;"rDAtZV
+%7W+(:A6p*i!<s#?]5d$;:"s63/Q0_?H]!,q=QIjW(Ft9:OnY)(bUL9e8\Tgo,VYGQ5l\+1NWDu.,rOVor2962nG!).Q-1C!&YhlM
+%A!"#)WrW];AGi7J"P$.fAtUD__D=e^SUp1d*JCHF"b?>hBLfed%2=<Yp**$IRtP%iNd:0rWs>`JOhJZ8#@,5eG#]T#N,k3,QV1o!
+%'#57W:2No"3023VONmB5:X?[:RDqI-77*K/=+IkFcQ8mk_6k)XZE&gIVHcu9UFt[!L4;E-8oa.?efh0\OHe.UMTgP)^6HVughY>/
+%?%>P!C`m8-;-9fcBU!IX[7c]O>CMj;?G'3aG"H)%]?Fp,O^4V'+LjDt at kWSRlctl)`!R^@=g9Ft,hX9*NDC6g%MR(8Hc'0+q,;CK
+%JRsS-6BcIC]@hL(1dCV,12^N5ZYNn"\s-2UV.KB24CIX.H'i)bH&IBufL[ui1T+s*dTG2<^:S6lj!E#4.emc.acEH8pI4(-Nj;)h
+%ebh\SFmU(4.<V8`8sCE<cBD=9[9l1PDS^b5FDg00qefE%$OCCO at jP_cncFbfgP5IZXEcl8ZB1B7@GrnB]KG?in`-"/>qBe<!_9Mb
+%*>e$43pGI#Cj.pj.pHBY+935/]%Pq7rX(8#U+Nh<Zg/V.\Zh<TVhQGTUl&3ENa%UYO%eF=]i(C+IGj/1,6GskGT:+;o"46VSeL75
+%P&brBUHVoJ&ofgfAb(n9&S*0.jILGp-<Vl_Ra1UZ3nH'Hl9/AE@*d?dFN2c.H=>.91Hmo0WW"t=m2F78NY<Cj(Z)X0GZMm4Y',s\
+%UJqQRLaG7/-pqiX#EQXA8igS93O$`(,!A#(JrM:mf9m&&J*P9]ieCqR"P"gA;f)V/0X3@)k>@G$793kPMj3^Ci2%\q2@$\$@#4aU
+%#a&Alnek'qE_36-AQ=h-#Udb8jZo7Y/^/?OO:-o at 1NH.Ml!b.YWG%q7.@;o6XI)/MCf/&!mKglM(V(\7N`jLM39$F6ADB3]6K&cW
+%Y!*,CeEUkZC_4L?Io]'cN[?39N=mKbqN[Nq3@$hV3FU6D#1,0!dulnA>#+;+l06ka$'NPAG6\'I3?K28$0uM-#g5-e*"7lXi0MKU
+%!0,)WX^B0S)=kRRmn`.L<q-=7A+/Q!S?7bfd'X4 at H,tV.GrZ=6%frqhSctKp5HJM7A"N'kf<tmJ$b"nCbh at MtV+/l at j.dtfnp?sE
+%pI8>nGj6a>l7Q(SYX6'gRiH!UZE7^Lh4plcQMVJdB(0,u,fro:Y?`_8YnrrR[12p;1D=PISG'6K:2E^oU"22"j`r4KfK;o&+=?.%
+%UbR#g,^T.f>fI+Qs"9qOpI6(hlEcK3qV@;L!E-(0X)Q<OA=Fr_V*'ctN7uu0ku at uT\Uf at HRsdhj9"HB+p*/[n?%iAs's/bk8#=9Q
+%_BWaOX<WjS=R3Cf8r?OoP9!;I,E1%'L#"1p.J`8)Mj!dQa0*C6&t-ffd/c23lWOJ*^qj&`P#]e5oXq2<5f0T9,1'Es,W`N9(Y^QR
+%]NQ;XnYkA$Z*Xg;,-7J)KZ(qhcgDHoisPA:>+2Es#$,tJHRXaN/9-9\3GF=d4]/N*mBh%kb5a#+C:9iYKNr03icTSf((]Te^h8FX
+%'fMqk+Sj\"`R\1g;YFMDc5lfiq2h5Sg)4MneYC'E8#`d$NIr)/C_.\=BeMhCSC'!8e]AMWSH^-:`EelBO7)O"D?jll*G)HoOus1U
+%8:H_lgnJ9[^(3GQ`_[$AUg>=FS+Bl-215*Dq[$u1JRgb<6Uis3nYMfYenhbJ0q_/4+e+)h;!iGq,1Bss<Y;]63ZKp at kQ+?ZLEFWE
+%YW7Ui]ltSogM]#_M05*OIl9rj5TU58'"P5/qmeAGK)#T<L5uN\*DUiZ6&Dr,4Mt+\/O)goXkmHh@;c>\duO5J&!Oj<"p-mBD9>_Y
+%Ufe08k9^EJm]IO*WOf4)Fca.[I%9B.bt2fBe\R-N?ML"DB,6AY&BX:]bu*cF[(4k2j7sX+7`<s#`f<IhC_9Pgla&_YkJ'O\MG84g
+%l`mM+A<qI&63/;l2jbo?CQ>Vu]C(8^]-r1k<r4/YFeo\RfNHJ(k-j]jFL*u_ctRj,k?S4IkS`sZJ_t):Fg7]6>n1(f^f[W`"FJAZ
+%!F7Vh,DAuWG'R>FHa0^W(VWOO!m7`@Gb$abeo#$N"/$IF"cBeRZBn,AiOlX*S&69J<aKBg[P!6IXpWKHic\!f_6W*[MHi2sfqV:8
+%$#\+bCERc*.RFF8A5p]21AF5R8:/b:D55dPG`l<Vioe]sCr%Hu8O5iZb_7@`#D&qkI=W'B0.9+abLuIQV$&_H<?u.<)Ib#F!83"l
+%UnPjJ2m1j"%;N1aTR)bm/<j:%7H!lV19"c\_01+YM1%3Ue6F1+gVpML7:Ja)W_OE6J3q5[Ap,W^N6a5?GQ=>;fLq>5cEUt>!niF*
+%,e0OHE/IT7AcQDs4C`H,iVt(ehNB/)OW`'NqeABH+Go4L\c3t?*^p"7oXuJ42-$%VmNc2;p/"cdl/&f0ki=G\T6%=@VO(%PR+g at T
+%`=2Kko`K\W]Pe at mg#-\\OSDcqdrV=[nKb=$VE?jujRE"c-^pa"nAtt:\kP;*m-D.\T"NVVAI/BYRCi^nBB.K=0f'VM at f\nf>mHjk
+%D@(I'f?9;L`0^Ucd%:qg:??[S2Q,%grDL?PSWb86OfN^LK]Nf<`:XD)Y"q&8BnCC=VV<lJI8 at R;/K_#?+2s7AagKO;CGb5V8od)d
+%:dD;"><%(qjgh#e0'CT@]UU2;p!Y&\2)cB%J'<:SgZ5-0KU;QP7$?Ul"%0KJRo;KuGk^.iP),7YFsYm[[Uk9&(1M"R<:D][a\HY6
+%39AGngmriE"0I$E\s.o_^bh7TfK>u(bhQ.M4r[uDj++o#(+lTWOs2K%UQ8U%*(LaOag^`SiC=PH8+`;BfX!NsP2!PNqHhN`ad%,Q
+%Ssuk,i9K58XCUq%iq#:Ca`s1u0^JW7hAYVI,fT2AA#<4pMBFc[>H)Wi]J#+lYE&POX]+ikZ:K(T[Nm3qNIn7:^dnd(#k;jIW]6#R
+%l$hBOBu=V33=e3Pa`Ur$d[VidZ__hS%p*3p_+?)<bDM=7_U3DPe[SRg'6<XP0=)3VQrZ;KOkt/<S'k/Ao.KUppa/Oo(Cofl;:%UF
+%lAC#3CK@"iDC)F`gp9Koofe5sgEn"iXBKl?"?kOmRa/5(0\-0X<Y.jqD51QC[%qN^\41PQ=Taa#PH\B4rrYCH>*2?%R%pJ*KaQDS
+%=&+.N at P0dF<]miATA?h,+;Y'fTMKSDRPpeL_2<j\=`U'@oh\B(kM6q34_g]#W!&b_n?>ml03B]d3+_iX3FUt]['psJUbE;FaTn%>
+%=[aUr"I,`,&a'3sEl`%3F@,uVF?5'>mQc:]B<pV$&4OA,)MOd9mXL&+D-HJ?nRd>b:@suc\E2cH-S at Q]*ON`8PdRsc':YS[0@]Xt
+%Bj;_oSK^+[`_Q6tfOcqn!Rm:SCO=0X*P$dNTgg]<l'Ti78Cf0"Oq9qQFlnRNnstfN;1H'3WaJ+ at I@aDcdm_N%pUd=ucNSf)*3;nc
+%nGV)Mae>FpH5kZc]e!)23iD819?J^<&n_e:cTbJ#@1Vtc/;`OJcD-i4E1HRgBf!+kHT&:d9*>.AQcmGIPbN$Qf^DaR,?[1e`X[f)
+%VaQLilPk=.nM@)q4p!\_!<"/H-[q[$<om\..%tCDbM at GOe]Bk_>cP))9$HkfguM91Q=UD:"4&AC.n(;MQ5$\&Z!"q'n:#Da%P\Wf
+%4Q-]e.j-j/PsWlUT/=+T*Dtf[Lhl/2/7kI!E9;97Fk\oH8:]Ff)BCSWW8ts9/`_6tp`0dGlG-f?F.t.`$F>D5i\g6\AR""7l)\(]
+%)Lr[L+h2)=ei&DeGm!frUEeHTdPRUY+K(D\m"rD\48<L=T3P0>buWV[qu-^30W1:#cMO*j,q&AYD8hZ%aWRE6cCYLfVns&$F6RLT
+%'>EQ#&ru\=cb/E>o9M5$69Fk&VFa,sbeprV&c at OHAf^#,MY:lXRF*DaIe(Y9Z&te%gUlNLjj,4[j]WaN%VL[#Np3&0]'>D',@#M.
+%`"OR!mB7?H30AH$]D>d2WWVgj=W8g/i:-Km(:$=gF?s4u0;#_3Uh.LMcV#0Nlh6fV3XDh]SFf4+WTq0TqtBM,Mb5AmHtZ(T0>4P4
+%=<jAbP!bX^CSKk:&slKq*_=X8s*,XXfTQCfe"fHeB!oUCP8dVl+t>H%n$8kOklg9)#f`tLWj^]tCS1"=Ur/,QHV6h2-6>nS&6'7?
+%/9MVI'4smtc)5Jr!I";#X6hS-3.bZ/3r.`[@<n?Gacqq*D/D(S0h3\n\m$K(QQ<F7%0hbDE'/5tH;5:EnWd:$]idlLUF$>0/\UOT
+%Y+$a,</$#-SEA/'YV?De)oU[KI*\'+.$=/WRpk`H44t>*[3W6d\e^r?61gh_fgY%!7PP!$A+grS)Z_UWV^-d<E^Z9_F2HA'P.Ed_
+%/)uD>?mdD<"Q:o:.$7Up8!.ij8/pb%frr'64IFV[3S+2-;a_TS7+J=5, at tiXq9tPR9aJ&f<g%[;jW%3`Y[0Si%jN:Gou(akZS2p,
+%b0!cpp?$sL[3`;i-,O&uc0n?I/bR8j>Pr6T6JonAJG31m-8&1SMj%]fMa%7)UdgGDo$/uHb+pBf>C:+<\J'X3ErM*tfn7sMg!IeR
+%*Dq&G3XHR3KD'"M at a!S4.#=b_fVT!\K<i*i08gG%Y'3%]NUC at Y(cLH380`p<e*efdNPM7Kp(ZLK4eBGM"$Co;3O?*Q4p#q4^A>1A
+%G1t.JKC&1MHUj\sW5"W at X,U at lT!ePt+L#^[\Sk%Z0;7ITGtFDrI'jWfcmX/o%`r0>=uA>5LJNBdk:F at W`#gd.jtA/gpko='Xj*g,
+%jbQCI5?VSle_6jXKA5u[a<"q3.5`[8f#-/.qKSXcmOBh-!H4i/M2t.:Cf:3dG.pO.f?#BTcahF:*soG6<so?+V,#d6Huc?3/;?HY
+%p'V4%Z$-eV8kQ=*BNj#kKn0=,=&!!A_bTNR)Ib=:o'El2+)^u?gUu.!p at k0hdUO=q3JULW8K\l9PRZ+gH#q_7L[l,"f!%PHHma!k
+%JTkELI2jgB<=7GF!YW6JGWo"jHS.V461E>lN&c*[G\]HL+TN[>I\-J*R+?AiZ#gW)E_$&Lj:LH"(01JM4fB!(:3R.)2]jPH1^CtK
+%i;b`.2+,Y4H`0?n!pZ7'\e7SOg>lOQX.8&@=PBrr,jte]Lr0a=3?2hjUZTMuZs<7F%j"X0L`bApP\\V0b*AULD8:</pm'>5!dL39
+%JV=kcYiKr.#><U]m0M/gX$Lnl..&oE.`9cKWDqLRXik=-Hs5/V*;R@%&[lmRgH0Hn:>ILCirJZTr_b$?.a"h)Tp63F[?NGD=jD?k
+%ECu)Umm.4,Hf.Xoi3M"$6_WsCTBJPk/X.kdOTp'[C!K!4+NOTZ1PlDmA$RIQV?af<$-bf`ZWc#lbU6sjjSh,Q:Q=U.qs9Mo=[BuA
+%PHF2I*s$/9U512Z?&3bp?9L$rPDEoQ;2%]bSqV&sCD&smrg)&X`J-Wcnb+h69YKe_3"+HgD*_$$H0&@j2=>?q(p*=nnSA_lQ)O^E
+%;\UeHJ%96nc+%1P at qYFrCWn^@OJ\P`3ohV1"Hr"W#F"7a'6<=B+o"IF+G&e&qjfC*TPr$:c0IfA4p+C%PNkft`kKZ=p$l6LBbEs3
+%gDs8"U'h2=J!pZKPF,<M>-)KIE4[_8487=*KKl'p4nX[OL?EF+]]n'Ump+[ae.c7VFba";?kM43[[&?FBS=nX]tc4Bo4D>[_/pi(
+%[$XO_n at 1@2G8<P9hBdntmHd"DT!X8k10Y$#dIt;R%e"fDnp0ddaMsL3:%=X(Q&oQ%0M,g^cj7;/J)Z+"kCstmM17j"mnUGtklBki
+%>!KlbB_eom+6c980-E=G+M")JSK6q.X(<D at 7L4a(SaQ&LEOr/N"poq[[N'5Wl+k$P)FOOiO\hFSFE"@_8Ta,LJBg"SHZt>OaYh,1
+%i`Ya@=a5Z=n?5X(,p#R*:SLj>=@--JCeb*S>lka&@DZlt7O/X+1:Ri^O$p<9pH'[jooD8.#%\1%Z)rSu_/)2:A1GbFK6u=UHDJBq
+%7!MTf<&3$lMn4OA@&t7LAWa_mfh,(7Tg/:tkW/'&rP<C&m>loFA&)a&4l.:7o]Z`2KN\.JhW9EqYot4'^7%KKT$A)/%`R1/i=**V
+%ItF;,4<P1&:[ULI7%g*.jZ="(L;C'0T:Tp9^[N_r5OdaF=Dpg=49iMbqn2ZgYq:%ae8O\oBOKG"?8<U<R<IAYoYIYcPKf4;l0NWB
+%^)mN;"=6aCRCN:=U<_<#:@RboJ_V*bV#\*Wjl?>K&0cGN_%M\I=HFCBX],]VI*-FT3Fsi0+#XI(>&5t+%UeSF<0u,*[5*H<5WK'.
+%0kMo,V"E`eqL)lVJfVh=U]qapZi<OIDU,jU[fK\F!El5pE_u at KDout>m$Lj,bW"!"ok@<.!ZYeEI,,`W-E0o?c&1Yl4P"!UKriN/
+%HZZnT!u!(F]*Gn3+2t[PgVK2=/jLOuAhIR7.IBi9M8_'dl+'^"Oc)#&?74VWiS?gIRBBhZqr23upLfu-UkJ.W.]OF7fZ,;gWc5-B
+%$YsKf8sn1LP)_ct&;c\DHRqQ_R#s'i+@`l"3FpBWflPm%FS%PpF!rAup8Hg,.gD23]P"^GNQb-KD:@Bi(]&;.695k_29mH.ak4e_
+%_CjBZYqa3+N,<iOfLr@<(4"fj2U_"sFAd1;;Q?Scc4^K=HZP1]-YM1??=b%+oY6O$:>gN^!pPnE>Z]CCD<h#Vc(l%_)jGuZd``0#
+%#D_l<DNH65.u0/A;A2*<n67Y=&5#cKfe$l$dS[=#B:j5JY-VB+!eMPBM#cZoPn!M"4FbcO2*H:Defbc[Z+9`6#<&Ns"GO]J8jO*G
+%=qLp?59sF,Dd7$_K%OG\(Je/SFgso&D_B_"a,"]LpWhG$*KlQg$+p-+K_Fe*?'.3FbW5:I:1T*LeZ2LAoQB0rR?X/]3<j$t(>T;k
+%B-,efD48P+=43$W@*T_9,#6"IS]Qq'9)_!J4`#VK<AoB"\^M=Yr)VPf:Z.0qB)][o)';)g_[8`q1(TrHlc"?a/DO.sk&d6I+RlEL
+%IMo,P*E\6G4/ml8>9\Z!D8XVkiB3*ZQcWlRr,NM\_HXRLYPF+u;NQ6'<FP>il$tN^^/c=O&)b_T8kks>^)-l7I7p7"%!O2G[/@9l
+%`R:7</Xl!brI!bY;1i at Zpo`26W6'HkCb#f#Vsss1]D]8cP=0X&+?[1UV]Ho6RP at 2r:^fs+Y+*o\5T>5`[lk7NT?<>hnq`L?rOKXI
+%pFu;4mS5UfVB=;6d'>F`;LNYGE"WhpM"_m="QUb$hY,qnm9bUl)nS4Q1$d?X?r12Cc;GXb]HXj=*lPA1lfI?JGku+IiMUDso>NgI
+%)dPeW_`P5#Bic8;VIpS`XU^_MOEUWb03H"u;+*7:)sb$eZncppRM<stQ(5*%QTJX"eYuXf03871h+,6pffFPYI/Z.nTJ/4"^hE3s
+%1M;*?WtALBW0fsAPj'&O[3RHLWka1U="UTAIA9J_W\mC8"`?db2u6A9h'mZ6]6GlSS_b&";j2>8QaH+s/$&1s`'JkqfPO+=KOh4X
+%`2&s at flI$n"7U'CThiCB-7o-De^!+t5q@]W[[J<3#\+_hhKBlM?[cjQqg[]fe&CUO1K5GfMubh`U. at mop1MJ9)^q5;GUWRC.=5ic
+%CefCr5<&lqEHTAt9H:T,luanBjY1g%;eTQf9\#/.'QG8gr0o+=0=^!U%mK=//>EI[Q9Q\Y at -Zk3qu5=7S8(")eDF;Ve!sf_e$`Xf
+%6)C(^gsn>YU8cAfpNnq]54">Hj+#t9N7ZNRntEL1_H^fFUnVB,V/qbaR[9uoS'R]'\.:31qe(!1/`^7$!pjr$[rRRmD\arCTY=8I
+%b9*TK@$P?eHM<MYZ&Y6!11%p_U&L_b%q-o;M&C>K)pVFiFd53\OR(KOCB%e.,^0?I::smPEW$'pj;&e^. at lF`\mYk`@*,l^d14Jl
+%Aikh>\HOYqTKnGUo3AN[ab<=^gQD=:rAk)Un"N]NMWD>ZKTpU,=-m+-nr'INrApCHKsMTF&^9$kKfn0::OIP+K!eGoo/.o1<(M=;
+%ZmMB+]&)e at jN8e/Za[3\Sk#T$9j$:J&dJ%nnK2en4TAYg&lLa-_idapq=EXg]ZqNRlN=TJo<D2BQJLWT!nTqeVQ at f;f&m>/85"kR
+%YiS at D0hI\/LW;t1R?-l+:9]aZ91VZg7Nall[ksIn'o+E\KeNa1hU_Uk`8b+l[R`S@#rN>DrNuiDEI<l>4)f9UYFc-@>aL#6;`%VB
+%7Ck?%h1V-kTVX7jIXVCZF+?5K:8+D"d!FTaRmagW=:eE2'ek4JC81fu-kZ6FfQc5,K8hqZD9L$rgU[QJ;6edK_U'YU)nZ_U[Q9cL
+%OY>+s3IB/Hfn(pEDH7.`!I*j"kUTHumeP'1eW]VTCJ&Fr?AJ_<\JC9M%GW0sP'"P7%Fank$_Z)2b05$Um9?QS4cD+fGODqi6#ieL
+%?)RDk<0YrED_J:RLZ6oX+;Ld87i*#)1BH[^Kk5kUW'WfkX3iS3_4["J>/GIr5C5ef<H_(s8)Q'T;=0Y.>"=kI<_a?HLh5=o*u=FL
+%&2SdX**hPP5.56ul27c6V"1_E1J;?HV)Jc`.9kqpV(FXgo.P"#1^:*6Zu*>p\aG*Jjb\H`HktA$]K.g+#9H=Y'jPRRk<hteZ9Y:^
+%ruO#1^O:jdbo`Ba:l2ltF].>cCg6R'$!c1S?8U%e&#)tTTgbTDs%OGWJc;l^FdVbP2d>?R#(/E=;u&fLH)&jEGNi at mg..Eq&gMSG
+%P at NchP=,oMb"Ju3[FP$<NE/Y<FFn'*6\*RA%Y3`:odFjQhLp($DSEk::G1#b9ejaGT0(Rm+Q!?heJ&WfA$<=C]70t)3j[HD>qM]3
+%3u_8<e9c&Hj at 15e<0DPD?>*47ClVgcF<GqbS&&. at 97e.UTOeI#^D7M#I_[/,"d0KOU\6rW1p_QRqGJE(%2Xa4AB+k%+Q;,:2*iFI
+%K4K&d_Yh(SZIHgWMPf*Mj6;gCGX0<MVt).*;^O at A?LrX1i&ho;7t>$NA2"_PPE.hATNePs2feRlp5IMEeNX<3>mK[,Sr<S9mWki"
+%J0eMgUi)$rCR<^'HZIL@@t:[(6^PZs.R93FdE=E/,mt at DOrN+pE1Y`m?R@'`BKR#+9-o0=5=n0E$Z3t+'0HPNYTl>+LEIcbVrWGI
+%8uP7SF+0;+*X:JegtKOE6?^i/UP#a\43oh*JsQ6858.RJ$o`U+?XD6g!(%drLEdDMHK;4D:=]B?RHTE5E43Ib8pO":8O>Q4%%fpn
+%VNQ]<rCJYUgRj,KoV+(a21iQH6JD3%5tO;j%#id.Q^"7G&JDN2%'_j][*KrmmB6.K2D8.:BFu:$0Mdj4aYh31+!(CM6',ZET&5n@
+%S4>F*R^gkCS=L<[gKg>i&+g*SJu&C<29t7u??SENg2fHbSI*ZWflGCl8:dB/UM4)2j9Vd'cXEnr%U>ip;X6s9!$B_g1r0DA4JD at Q
+%k&MQppp$/3s4M9pDSf>9b.U[$qIuN[SJLfH%rSM8 at e8(RR^Q"_+"?9IU*U9hoT#Gc#6>t%WnO80FVYohF[EW%j>_&6-8Dji]\,4I
+%WM%P,p:G+Gr at _i>f+'E>;HCuo99.<H?5?/BM1$b?k-0EEgJ;*3HWOOWpcurRq6A%A.A$FlT?F/0(_iNB6K":`\`1D*GU-[<(b+T'
+%EA7m14##a:dn:8Y>L.DS37sD@#S)aOjLEE'DBa06I9fjq3TjVoC<t$#ndoF7Qj^5Q<!R:K'5N284iot6NN0eZ$cMn)KH&%f]_&o8
+%EkWlOR29#8NdHRf4m9+jZd2XoDa#Xb/Cndp8poO7&-4 at B4#q0i#,(aQB:Dt"PAQ:W+en(l'smQ9H,$,Np0[dkr5rZqp#Y"Lk#*1R
+%:(J)%%Fdqk0rJ9)XV-l*Ye*>6TJ(*][6g at .=1L%I8^Z$rKrdBebs(<l)_a#4X5Lm[c%.b at I81ZuLRe?P?hsWU;dCu_p8+DBH!2k-
+%!gC/7(9eq^cE_\Po-O/.ff28&Rp#2Y>]";*;2[#;#PmO("=9lq%/O,1I,W$_1@>A,6M:(Q%.IjFX4Sj,7c&!a/pS)JXtTb#eZ.c!
+%o.Nf$S$Fq1)NV:;2X-")T^q"jC>d`35HIE\SpZ_:qWScl3jQU\S$7Sojn*s181WlPIV#g?+8iN/E?`jR#sd3]K+A)$:QmGk1<*W:
+%<D]]0$qW/\JdOB!Ocbf&Y*<[H^*sHr%B#6Ba`i3q8j:pE]a%l@<aL];>L6l at l^5nbL=pS$Ctfe1j<nYXIgkC^,fYM-^napf7MaUC
+%I"?Z,[LRURH9%6W at _P'(#SH/CAY(r"U"4sa_fLg-P-,H?Y2e-4OS6<kN(gnp%!MbY,[N`u:%':Hi\a\2)59Rd)f0nF\No:HHp$4$
+%H]<rt=,u`";<RKlFK46/OpK>l"!oe!r*8Vmc9:'#l27gh`m<TN4;\tPheC!8#4XfL903rI7kH"IV at qQB\a=UX<XYq9PPCt"J0U=(
+%\I1gs3t(N:3 at YO9PQ8,)n5A]Pb0NE><H]9^h6u>9H5BQ3\B`]a3:`SVF9$"%K$j6e`9VcMKoc.9+p/_**(!R`X&p,]:>%8g,b^"E
+%^Z?.\h_.g%s7sje;BsukYoU6#o3 at Xt[):#Lm&!E0fMi#[:ZIKp5iL2B at gQY>N(^$.F5)X&GN.tPU+j]5?V!Wj%@oPsgVqu/:H[9[
+%-Q>@US;CT\oKptgQ$#tY54D2bnC2%Y_VLI?/_C3N*fH/3`&YqMWT[+4P\t5eEY0"o+>nVs at XNZnT3o.XCdZg6_'2%oZ5ssRB'2'\
+%R:Q/A(Rq<3htUUXPq(e<mGe\@Vne8d4!ke3e=]#),Wi4Z0ii`E!_LU>5c6%`_kEIPcpt1j%+ at +NY)NXm[X63HUb_I-Yd-U3R[lA,
+%J^).2SEeHGHK6+^C,bdoo?O8gENTeNW'\hC["SJWm4gPNfO[2T!Q_3phZts$V:n;:]\O?E;2b92"4^RV?W'_b`Wcb`L7rf&J at t<>
+%1O at f,b\bOQr^`Pn4h\jZg8_,.V`.VVg-XT8^O2%E[o?KuX195uD2h//GZWFTTT]5`jLCZgk\o'L+g at E^RQu=Odj-UBZTt;1U2unG
+%:<L!Y8Cq]R*V&>V&!C,Io_-rl9%;%Nb.[EjQRh0:+QeEn\gHfJ)QcuQZsqnH+MKDjGR*u5f>Dl7Wce]FG"akP0_Lf[Cm>6,ihWRl
+%h5rKSoVF+VkKa](:>iPSo$T4=2,nWXH_45sAE,n*YT2g\0Id8Ok*:;p:JTb47m\K)ELLrc9Wbt_]N*Kfp=Bd<^+.;dGVh9uD(i<f
+%,UQ9,`gmmR;YG$QUA@>t/!XGI<>i#1NaTTo at .26QbXqkT]6,#3C?)*(?fj,q:>7`&he$nUpXcFS4g at R.4/`5=+W[Kb#IMo^`L+f;
+%c=&_@>Z+RuplnmPkXB:6P!b7N5^':3FeS9E%p&:CN2\th+S7cEMjY%c;5K%H1h'i#n2N9VE%I56V=Jo.+7KI3*0M/^mZ\43SpZRW
+%P98\,J-K4WYf$qo@#sXG+mBR&:R)p\'1eD*klKAhHLo!_X32a3)r<.nS+mdF[4N9m:'HoDh.JtN=AKm7$srKQ065K[?uSO"N=)/S
+%^s-,WRUt at 2LH<\_4K0IM7U&].:Xm!*K\SQqM3%F_]1R0]4Meb^Nd5RIVf7*m4IU1O\=?f@%cN;:O'^A-,T3!>jsgSmZHD7Ud&cV9
+%A-u8a<0$=5.E>f8l'9,efhcre-Z55B6G)L@<(u?s\;YdVK,?J1c9$"LoO[\"l09PjI+,c;+lopUks+n+o>MPt*]trEik?[%It at 2?
+%WbR'tA,2BpW$MA\onoO>-.a3?;u&#9]?YKRM$dNf8r=P:Mft*E?og^4Xd3Mf`>3_V126j32#WAt9eEojdP/7a$K'*uYd-jSH'PRe
+%Y#hrb6JQ!C;p*%GKc%)fVOeaWQQX]+NRXS(W:"&!^&#CsK>th2f:-``aGO#iR at euhR9YS1WB<0<ir_5DrMbUN#L1A0N_O$/<lq1c
+%.>i4-^gbl)fR%?u4IsQB at W)`M.f?bYh$J$X(>:#j6e*HPc*[k>_F@**=PE+X2bF<RP($n9a5SQ$4-^Yr_d&b*h#jR*jEQ./Xll#>
+%DVTP?<\$G59p[-Y.^CiD9.:I;9-]9HO$P#^9J,HSi9DQSYr_jhq=(2L/'oek,Iu`F:Etu98R"sg!j8Ku:eee0R5Ru\+Y/[?dPOA[
+%8O;",VgEm`ad)5..QPdR9f."`)=NdV^dd"<7f)IFjb6m#hD%XGOn9VU`*<rE+V0CGS]f[m0!'=11j/Bh#H!m9)%.&?_img"X)2B+
+%MeQU+A?+>;D88AII!J\#cOW\B]XF?iNnpfDO at Zo9Yj(?Y5JfoLQPTOAa_8rr8^WYnaqgte"=Me;ZIlg>mQ6db,p]?+oCJX:2Yjp+
+%%BreSoTNqjdhbX[5[_Q2lmmu_Mb*qfaUD4=!n-WbK<B."3ig>"9-W=PpSYO6OS:%;o-3'=Xf``a`)=1KAYb6&]B3.7^un9DlRlea
+%_+ckB]XDKmSRCeJc\UKp\@g&Bbl0-XMq#N=ZXFt[dU'%ARQ]'E8Ys**+0Z;aJ%3`?s&r;CHtJp"kHlT_=J\^RBDjjd0,+Vo-R%e-
+%"T0prQ"-T66$"C+1AOunT("sG$QSngnc%4McN.CO[b4-K'I`)f_p&5PU3KQuU"%ilPrF%!mg6UERQq?]XYU:>\Om-$gmT4p`0f-\
+%Da+1;k`a0fQ_-+cA>Hm\=+Ih9.2B"9BPd>][Hj3of\HPL_SqfhHWt855"NoR2Tp!l at 8rc3:)e0;I4jX-b)&gd5$850+iG7+@>tf$
+%G%E>5Z0%q+bkgej*CP0'!WSbGi<Lu.Wh=a2k?H]TI?p,^j!OdO[rAho"XR!!Pcq<+7+g<ep>:%2dN#aQ`1kQ0j$D?m!6t1 at I`jpo
+%)5\Wbl7>9\(ph+bN?1 at mfsN)8$.s;b0GR['I^*NZ>U&&`dIF%TF66E'8Y$/cXC"3(EOQ5o*^7cfTlKbZ'MafWDb:b8RNd5*3;Fj"
+%Xtak)S7$JCK:F,nGr<,b7"/$IeQb69\:Gn>Wo)DD/T6V=;df#a-";iR4A',p3o]a);-mPM[HI)S^tD"E at 0u(G:pG6S)u1j--(hC5
+%<nG>'DHa:+ODFmhr(:jqq\8%8O9To;1k71ND.$VHiTI?t:"f[f'67j9mmRc;k215aJ_Ed&ou;$&o91S?jc8,>nrhrbCcJQe, at QXn
+%m=S$*a'cj7!k,L'!e4Ts$Xqf7[ZToF27.V3r3q6*HSU#qjdJ[(G>/42936[TMbOEDk.gefb7:"!L[0#<;QQTt?=Xs6I!!fH"pl`h
+%P>1:e,q]@.k%!M2VGt6hAA10..Lpa!\Yf;$pFZ.0peuWV/E2i1F2#Z0h at 7EIKsU5Gao*4eJ9<Pfcde\"SKsMsPS_3bAt(RCF([.n
+%UQT<A"ho'"l&ZCU>W9u8gcF5[K!=a-V'dlR2d&W7A1gi3<\gO=Hc!s9%=\B=]39(hk2o?Gf.;iVI0q-=S,,lLkYk.N*r9<P!5=6W
+%EBqOh`FKnoUM$]@6UT1n9dfItoKp?'rX4/?Of)mK0un[C="9mh[^@0@\3E<n/!$VSRDb?jOW9V`pVP57%9f`]=KqIA//'9bVIZ"b
+%gs`B"j]cA5QRILoJ9e[CH7ighbtG.4=oli+rgB/-8p,3ff!"\r14(1%^n$>P[>d"(Ab<4kr!*.J']H0nRkgS*Q!]Hl\<oAR89o"<
+%n'jkM[HE1O<+=HaCkFW&HFtjOd*JM4'[AZu_[Y(Oj_<^QXj]Z:S--[!(V?3R2)u+N%NT;#Rf,:T(X;gJHO4jA;C+b>g>@iGK*>K)
+%N+.j?c^q&MOhC\5aZL4#-L!l`9i`qJmM$sjrU`3&H^!>[W/.C`?GT-B@,uY=`9(lPCakN]$i3f;1&YCQ;E@)>of:#Fd=JQ"Dd at 6"
+%kt.Z"]b<RZ6\ac5/q:HSg-]UV(3<Dt\L$/'gfi:N=hunaHK,d8Ot%7(VPTL@]?DJ.4IA&Lqdd>WPeXTo3X8<SJAIFQahhU?3:A68
+%k$BC_2uoQkeDPf at GB5i!#\WWFBW437SS4IN-3$cROF[,d);5s"?ceD/^%@UB=><.PO;CaMR=k+o9j6;n0;+X at b(Z2gPgm.pVF_1g
+%ngHEb/:0P/:LI`=rnmpKm'Ji#Kk[/._FL0@@^jW.f>,2ZQ]LL1=-Un4:Bo'VG:KdHhdoBT+n(_1BPMY^h_c-C0KBaoM4K3Ze!r"n
+%7*FSZRb4g5ZCq>YjIVV4q/UdV)GY'SaN_e[h%]]#3NYHJl3r>GcDsb4h]A at m%*9u*_T"N^D>11TpG"t[qbL*.4nldQd7Yu9@<J2k
+%"i1]1_2V$d>1f^b;i<fb8daj_oMO-m1,rqpR9Fd3KL=]LjV1b<@it-87^>_8f":s\K\NidXJtFp&gq7sPLk:0;N>:=P[ZRWgg%>N
+%;_ZqN@<eb<5jC#=TCZQ%o\+`,orV/V]d.'O5Z2&`k.ERk8_+8ieiKV9<U7goXYklaq]:"h'=#*XD[MYJW_Jm=S9bLT;"Vk"d:O_<
+%`[pQGAi at Id2[bgqE-ALj6fqZ%5/hb8Bg!p7=Y2HMbTH_q6l:.);h8IP5]$S;me-BNo.DYm:WF,YDb'Q:;$OBP0iD"(dj at 7Sr6jrJ
+%43nihCqcT/OMW2sc:I._[JKL2[q.(%2&C^OnmQ8BNHqBOc]h_0Zc'G+1J"\$GFZ&+cC5bC8]3E(m7 at u9H@M%qWs'F at 6!k6H=m)#'
+%KAH?5GWdKT2&TeA3D4>.1HFUr9B&TeP#oB'kY4gSJUi*a!QBSO_L<GFr?fi8Fl$>kjf.($Wh'X`/'MOMSTt,<[&FFib^B5'$%]"G
+%1CnJ[nJf)q>bb*DIhG7 at nEW/ACc7aKX#+[h6*WpRWE_SEI1&k(TImr`3bZPV45L1)pfo`28?;uc4j/s]12*$;0O$&5PHAChKM4^Z
+%a]eMDfA+r\^EE7=*-t6!FB2qLm2.MFSK:eR[`Wpi4,TG.n9Cp=TnOBNap7HRmPeprVaNAU02g62(NsiD+9jd8UQ[3Uh>k=Ri??]k
+%[;G@:.jsNRKb?aS4DWL/'FD,7AoMn\Q=P#+XF$OKRu4+fklDb!L6mX1.c2gB16>rYCDT>*6.X5)buM"4YaLP`AVD,Uqp>ZKTrKB%
+%;1MEp\*A&N%bN3C!o>S)h7ULVpJ7Am*lsZnWr89q1eBL"$*f:3XmOB4Y$rUV2a21Z-WX$UU<:5"(;;<pfYW*L&>aSWb at 4D-$\he8
+%elg0mrck;"#1 at PKP9K(P/GARW\YbReg59'D at Q)e:#ro3E]A/\G83TWPLjEEW&rD-uXa#FcmLTFTRafJaoX=s8"SfYe%<<C/3e"Ik
+%)%KE^B'Yt>E_',c)D(`"8[L)%Lfr?48)$e]"V(cFN"^@g`Oh(faEcs at DtN$WKSr:cLG[]?jG/AX2HQpAKg*jqWQWkt!Q%/!_b0lj
+%OIHKJdb>EMcq?%@h`S4jB)7:=6mFE/jiB1T3)^USqW8K6W[t^YJXOW1q:qU75B*n)UXNGEp<kgD9*ftf_/$07-j4n5C<lJMM/25I
+%+&chXg#b>:A#B=,og+M2*+#)q,u?AcZ0,3VGLF>t?bWW9*$GOl"ki;lAV$,tQ%HE-hc"CrO;t5NPslq&4#na4*5UsRQ2DtY:NLQ1
+%UF6ik)RAS?PELDXdi?^K./uttbb#/o5"QQd!$nC]:g`81]q)oD?`4oSjn_O$H$kj8P##.3_"kIZ\5,:Zn8$Ig6K1)C/5RP`"$TVt
+%g/=dg8C at _;!%f9k4LL=L[d&.mUa0lKf at cMr9eaVAl\=SIUdEZnikZ)[0foZlJi+u]9CC_43XZUBP*[_GOON3Y\%\N_T=MXLGJ[&q
+%[Oj"VfgpOq>977kr^$09\-qqL"nVJ9rAo;DH*W!f#&6/!G2DgV#]cbP==R2ZM;>h;KIZlrHIIi[l!UWU!/Go3fmkhM-_HigdYKnG
+%eR)W7nr!BOnlLe48^Y)dO4>mU`D;1s--]J7+#r?_;+6fB]1FZ:&0 at CsAg\h"MrP__90,/N,-ggL8jfAbQJ'*QD;eKD(OMcQj=`CD
+%`QlOOg at O'DNq6E_oR-)>qC\D*K;')h')kX=%4W%WJoHN+1ZZ/uksV3"ZeX<%(A=eUP60/'kr2o2%I8UR?qtOigGRjFg'cpGPLpb[
+%LpuO<-$a:[QJm76g><$q;M!OGZmg3="$9ZFn:.agVK%a)pS:bSkXODO)o#d!/IA4!Q`f-1%>ld369R@']rEWPGY"J,3\%^/NngYH
+%@mg,?8UXfR\!?i5j9;8AHZIr&80FqqX6)\h0Clu='e=u\p at .B6CpI_VP"Q+iT`YoYO[EL#E$+KHq^Bd:c43i.;r1DEiaBkJOINcE
+%'Kb,IM.f"Q9)km([ZsthR7k%mMR3#ed!6$$<aT&n,6<Y)L=K0mO+FA?W4:LR&JAe!*UE(NruN\4!Q/#r>gppm*qG61M0NV=@r"]Z
+%KM3urU_iUeAW#/SYT<VIQ)Q%cEVF9ACt-VK(+ef4!]^LR`^H1uLY/n._/!>S.-j at 2C^&Vu_`)]K\_(ieX;\\W%akYJa["FGb(VNQ
+%X3?#O6mq\o;n"rU7H)Uq\9$sLMmsVYVG?]fOOR7 at .5?ush8Ig\:\$\TVt[oA<$\!u%.&r)p)-Gjemq,-1<3!-l/JSf`Bb3#qZ;H`
+%]XXT>`(o6>k?;U-4C-p"n'Jo]*`I.g>$@C[?Eg.:25c)^b,fa->8/Y?h!%"+=@c0"R4b@/]XIK>Dl]4'90s;i"bSIqP+)odHp1!,
+%kgbjp$i=,R'-c at qSAWqI0&EBLKUT1mo\KD'0L8APZYoL/Zem]u16$h0'I:>Z^eB;KXI5,[CCV!E^qbsM(1"RFV=ES>Z;]=HCj"i#
+%HeEeuJ\df<BQa,YXgbUMfSjBtmG=6"q=hhMCn49&DcDn45f9/C!js,9.k5<FKuA_UiX_X583=(Bg*qk]8^OA>B$KVH2f4D:9dl4I
+%<5UD-U?lgMCTp.3EfWAu^S`ibY/+eLq6F=J:8%uCl;K+jrpkLFZW_tD<@+6CITtR#W:OD4/>U58/!.9*Q)J(D2A/WD^eXnnZ#&e=
+%s&pq9I#<oRRK04tR[iX_\eD?5Pp/f+p"$s`fq3n at .V8sI, at W%$&%qdoVcNbdM`Xum_Ka.Klq'eu('=YVSg;;XCg^084o+sMIH2s_
+%_`-5/bZOr=_0>/cRq5+,Hq?II754bWL.$R(L%;e:8TUsRF8?J*G9,cC=ro=lcOjj at R?T;!(`2P[S5q*EPMAd/Fg0H0';(A'?K-Ya
+%WLlG3e5"d7Phl^f!B2M8XW1iFl85LRRXtpe<U<@0-^iAT^WV<#9N!Eei44'VlI7[2E3%ZYD-nfH9M0aU:=+`nDLLMYPPM`8-*ifH
+%N'6G'.LI>b at b?VG_ot/_8FdL>1>-K?!W\CI&Y1>DC at KWtBuR$8\M=';lW[;CXn;#,WMNacYU.tj[a%mH1IlJZ?"l*Ma]Hd6[U8`Y
+%`MGll,_%nT8seX,V at BQ;oDJ+<X8'+:._uh#Ukc?E',#(q\oA6J)V\Wdi,4iqo(SP\&i[)HbqKBi*JT0l_^`&pq[44FLf0:>HqOU.
+%n,dFJalMIJIprE5m;jpZ-Eesh?L9e5Er4#rbKtY+"M;;_i:pN3c)csRb*@bRn2JdQk);QQ51+f^F"Usk[ccMF6s2C-05Zg+N\@$Y
+%\1PI,l),Q])*1[*3dCsG1/+G6E-I*1KRBC`qe9S=cJ$IF;F*Kf']/jgcQp%oqidu`.?#_P?Z9R1S?9q<g'OQ[#_Hrl4\#pKe8r'H
+%F"e8`XurgOi>f_hQ3!UWI79429V0K?E)XLVBEH]e0!4<NA%ZnZ''M=U23bc/#7UU\,2=_'qWN96%1=$LiSS*o(jEo[Op99*Xd+b'
+%0GpX]cQ#5`?LrAHIZ-8+YZI at +0b=/bDmSlqfh''2OtXR#q][If"89?H?(!/m"A"-f-%pr7n^@8,RS0aRhpk9KkLY7\]X2'.2"eF&
+%r?tbb-P5i(@qmq_k/Mm+6(K*.8V[*<55B,tp9sp^k=o-VY<Dh$fZd;qUM'^=Y&&,so"?<WP#r at 0lLR``f6fiP3THka:94=dGY#ro
+%_;_,bCaV"NRuL:UmX(`Hg5R'cOHu-3HsRHpg0Bk'3+lGlK<'V2;dT\]-+tDf4NM$(E"c;ZEaaepOsd&OaEKEScqm%a]</p$Ume*r
+%U0njCNo;'W at Rm9@bn at c_l4np"3G864.%j;0ZeE62:M>+,ED:aC)4ncu,gR//N"LD(%1O_j7"+VT93 at T$h4,'T1$?X-\^,5gk\cnV
+%fE2984cDVrB6(YN/VrdJDD1&1PC)lSSlDW#A?0m)BP'4aX#l0J!.ss7$Wpc=%Cqd/$tdjKW8i:t)lOT]>+n5sFiJk0^?HW-3-EP_
+%o-%ob at hA>n,X.$+O&X:Hn+VtmHTm%BPT'C`UHGHX_$[8PFM(4<BT`Q at lrn[,Y3hQdokM&^?3Xt>V)q8p"cqiKgKW3L:#>`.Yi[_1
+%@V_=6*$&j*_4;Q4nBZ!k>60YTSFY#*FWf(lJ&h;"hs#J8NEk6DM/[\!Offpl5EaJsOk)$<Im=soT!GZM0?`>1!\.N'>[4LcV!;^F
+%Tb@),67&Ij,XE`CODUID-d at fsqrTs*_7qY]c=oh\:$s</37YugL_%q92oe5LCO?'*W7Ls/CYj=0##C,(&k=J:f8W3,JZ(hq/KcR1
+%iaEWt+APNV8]_F:f'1/#^M!,QZL_RBG:jk:%W'X"pq1S:WB?Sdg+L4,_/TZ&ic)]PaLtq3fA4MT2e0f).2:032R5A>8Lf#".=HP0
+%l`"Ol:`<B(>M^j-S]8K>rH_$*Y6S,&n!gZ+e08E=T7q^EGA^qn(DG>uHDEm'afUBA;*Lk#$nYXIjNWTihNe`&Qsq^?TpD$cDi\`_
+%pmfJUO0$cokJ4;_G'Mnsm\GJS5%Pr,%9EuBdZOSXP!HM[#]_3J9+r8N/ZJ*B?Q6Lj:=nqs2]cJ\UVW3\?j^02e,#Y+=:!7hr(ggh
+%>U?`2'\k_sM)%;MOE8;m"m_S3A`N4eDR`IGU:QO-6S8WcG^_l"rd`+Vs$r[VLXVaMr<@EKf at p>`(luAZ)u#h.(F^BU!"E5WJf8Z*
+%adaX8*LWD!]t$@e%a;1#D?)/C(<E.0PQ[)J]7C`bL&h[7>R]_0WW?XP;p[`CU8CDHXehiM`-u$bT;b0&8[je/hA!QtBahQI at mAd_
+%M/!?/^J/<#\X0Z#;8X&Zn2)SS'#,[.S?Kn&$ZXL-6,&J8[fADe0&k*=@WWtfZ"(:Hi3Q:*k$DQG-Ejbl?0l]<#Z'$r&(H+/a>G&G
+%V2B5=o/J5'OaO*kmfWHj,]T!#4:RZ%YI(]p77m("kfL<[YU."%MqkZ\Ce&N(.,%l#gWAg+-p$8?Oh6*g2l(n"N[dhbS:sGR47BeD
+%T1kpB6>c:d`aLQNE#OT,!1B0D7Y:V*XhGd!$<ed.\\AH=6+qAK3-Wf`1;ZcicsZcM at lrV?ZgqZEX/OqCSTd5J&\OLGZrtVD/r(\9
+%RfR6ki(^I5Q]W9*'IjKh.(h&=gH`LA-8Hu'%V.?73,e47'@B&gCm<m'VO[Rd\rd:YgHNT[;QUH]cp=aB-#fCP5oYsJD,0T,pUj<p
+%IsFnj[$..?#cL'pG,KO2j_U#ZXVrr:kFZJ+L:7o1T<CT_MN0rR].;bMeLu?2h1B+2(31d0VV2LcI(P5;mZdtC*"VH[#oY>2p3B==
+%$e&K%NRufANsRHtTk-OP%:Z5FR>5OgJ'DJoU:'n*r4bIU\+QN<Q4.5$ME:>L&:&._<]M'LB;^r+5]r+_KkZMkH_qYV[&kAf-AT.%
+%rMfc.F/!eB$88[.JnPdA:9*;8Q"En+&Ra^mQMYHfq_<D)i&st00.c$sc%S7b8%h%8,h]h-U-f%CJF?_u1j9kbj(7h4BWM"lp\.up
+%PI.MF#i:kh[_;r=jCP0pUltHinc#o/l.OPWX/&j=Wp(b6<LSejab"d?]_fc5^J'+e%86$,fJ;jDAF02!P7MPXId$a!>rg89+:.fE
+%&\YgZqIIQ+;Vq at F<;Tm!4NW5$S10>Jl1.Jf5F^Otqc:I>R8W:q_%?!?Xgr8I*4Ns8<Vbi")`f\a2MO.ES[6ZC9;=gC]66u;[aKQJ
+%(T%\e`p[TU[0Q+>\p^OplLY(ts/M:jqpf5 at bLD;p7oHtmC&MgP=2LThBr^9bOWLl4aB)5/VCAolZ.iFiPSj%\rks/^0=(ttVF(YW
+%!jbB:V$$Kn_!`ge`^Md0$(1?><_$m-)iq(;P*`7s>WoR72pWl67i6o7[MI(VFSt4&f'#S+"pgr*Eh8"CdG0Ug=IT]&r&>r3etZCc
+%a$c,^H2OA\INh]gHr`AkAm%qW)OJs1NE%O0-c"lJO<AO[Dd1uimIH`4XP="h?$=c`Q(VfC(J1ClY@&cr`5<'K\+O8M>3^Dgq>Z0Q
+%_:3]iAESSadZY_?XG_cJ#D`:Pm</8/bY,0=K6ia\cI>k*7jWZgk9DFE"DHs;`OC(p^)d^Z/O-4Xdd#@fc^Y0sUgk at 24!:Qa]-ZXo
+%?DG_S?s*1QCc!::9V at K?V-n$NSe'_ at S>=m`!?IO\H(1[K:fXO\Kfs8;M-fnj/]E+X7hr,E*$A1I@$B)c`loXVePa`WVX_(5n\;Mr
+%g.nA at e'GPVO<h^5XP"/$&i/pt4^)[#0e8k<jM<`#7E;B<22qG/nY>eRAMH1kLNG<i#c=IF9:CH,!=aKo0V%$.2d9[:@2$>(dt?XQ
+%ZI!JUE0,=-+g$2 at g',g`p/T6crEp&#:dohjl"6S2"(]Q\,rheZY1N-UDUZ3aJUs>d]=f['!gVJZ;'sHkj5\SP+sp4kfT(W_-Q)dO
+%5]XD\N"\PS:/:3RD,R[o\R@>%h8H/mM-9*1FF"bpp`.-b58uLO*c8W>E-hXDiB1n=LVE^(WaI0P9:(od1CDg\%sdZY).1%l>Tqoh
+%hR4kqDtB'E<p`94_o`%d04c"lKcj"GmRfXs4QAounO-+c!YS'?6T48`\L8!40Kq!t(HYXN]==^u2o[i&@6t0pNskV'M!)KmWFQIt
+%K-P)_'m(fcHsXQ"S4$"%:]@(+bbral;nq[Cfi(S',TiiADam]W9 at t9*ISU]kr0++ggK,rA?Fcaf>mm'T0c*cT62lIK?2g2a<FU>5
+%+hYIFUpS;RnQg9!O!<*b'"Cth(F-1*gUqoX$M">, at I&dq%hXc"<,e[)c,[+l5phej:0oc&#0n]&d^9IJa7nC6)MO/`D&TlJ^"Jpp
+%7"oW^WPOBhR[oXP+J4'7T-_jTS)A$S4J1^&;mWqT6n%WS=:YX at dr!2'$3YWq=\dkGDQfYL:18BYTgA>DQu\giB`"Uni]M=g@!K,t
+%BU'%T8PYRdjh0 at RqXp==nH3TjcZ=N84`l$b"06AL7.-;Z'fE8(m32kB9_l(tBD&N&:LSmHkJk<tqrJIEZFQ>c/EV%r<Wi".^Rg?g
+%%f4pr#aU83M;e+A\a++ at 2X]hURs<,32T>]?.nkQ_*uO#K?WNnel5MR]*+'(Mc6JaSZ;=%NZm[kTOGh90Gn3sH$.bEi;T]bO-6G^@
+%<1bR03e6^>Vp:2[>`O_f)e"p,$I#Q](iFl0FoMAjKl_49]ZP*1d]GO%T.mhs"Gq%sKWKN#qM5Na3m at f9YfoH:K$V9A9US'"/X)(u
+%G8&Y%roj_8Q>*;Xj at PjY6$ZZq-aFa;ZM1)iG[gVUS52+;\9dBKU_%*nZ#nPR>Cc(8Q[@B at eW_YFp,9n/@*;0^$V>_KksMX9TkO"h
+%4?jlBj=-/@'S<hdqco-8WNr<(n$m?RfAKR<m.e9T<#PSqK4sW1I5\h(QIXi\r5Gq43:GW)^p4J_KhDhZ!Xf(E!r<Q3;ga$*CtZ8_
+%q=<I$oqP.-Y`YQJcEtD9(J32Jn/>+Xf'/]>4]A$!.@;)=M_-@\B"%s]EStlW;DY+plNpSH+uNqNQSqdjA:g+VCe>]of*7`-%l/#f
+%NG5g.p2SEiD7,D$DRHYEb;nF3<X][oU/MNU(JNI at g/k.Hd1SRlqYI at 1cGA[^/k#UYB'"<&]UYAU5/cqC at Sf(N-$f(Z2fVWUs(>B^
+%niqE7.9lq";Yqbi[`JMV7aT>CZmOO)D2PTCjd1p*;\''7F0Ls;a5GR0M<\?65[g]?LmV8imT[D=:@7aa*@-j0`8+,$EefJN:/dNS
+%=)Mtdq<a12nDo#O'O6Cg61?sc\g0ncMU%J4&W_n)<*\#18Fe?V?L0\NEK3:5]*hCDctU%,,'WED],Ws(1Bd!.g`U=W8WZ!s5nl%]
+%f3l+\4,AOM>]=k8hL9`s9=+*%@B[SH_;GRrPn0C_=oEZ("I.et1\@g!2-,*F@<ec2BqXtC9M;$nqIaH at ceR0U<rVLP:AVIuYXV$X
+%;<$'Zn_rn>YO-7,,&r0,fZH^.Yu62uTCQBS,WQe[>h,"g$+O)7A0dTdTSQ.8EM1US:,j]WjTb+JacLN,=p0_fl?u?i$o2th:Q-,/
+%FSPs0<,n3Mk@>bGhWnN-8'ZHQ*LEgpQ_3FT!4qJ*ga\Eq#cCJ*\3`Ju['o/K[%1D6`o[*2#bB/%TW?31#]@=M.DXtLpY5hZrQ`Hk
+%T)6d at 5NcZO*/')dV)`#J%tO"j_YT`!Q2E'pk12:`+5H5M(cS1*Qc5c5Kgp9YQt%o*@dc>q[4tk[E\8"AV at 242I;D]&iDL:6hWD,-
+%LI0GQTGb!"e%R`Jd)gIR%k4bX!5Id!n]Y_/8mitle"K0$i]8Kor/uA)q'D0M?HA79^(b&::8sHhR"mBOJ/N+o2CKegWo3'jX at nui
+%>e"H&h9-:<NPN#O^:\jJRm1q"OC5[I)a,X>s4R<TWS;,u'UoPUe&^(i8NJ%uCqG?9Pof=qhL(.6:Q*E%g5njFQh7!GYfR\4FN_mT
+%ah3JWq2"<nkJ9%!V6hkGa-$OF:`J at q(S%j?g\bqF&.1Q$%-rA?'IIX1X[aHU&A%JNQl?5EK:)X,Va$;i%`oJjR8@<!4#=K2"bMNU
+%^snqWFj at PJdF4Zf;j89lMaVc5DHVguKmQVST:PacYaQ at a82G76k8$?W.V[TsU-8FcGp`B6DkHEbP.u2R:W_X(RPUG_GCAk'jr"-p
+%#k$i=XR*cL0JmY3!;%?qVH*2g1\E#\X6'N>%.PDPQ5#p2fG!)oQBG+RgG0.']WD0QXqH:fBN at -AU[<=b03^4=NZjV_D^8fqB_K6`
+%grW9e(drOH/XY?TocR[^cWSuB[5 at s*W;ZPC0;4/tlH=Wd[Cnr-L4m7:_/V:P_a^7X8;jEkEddEp(K<I\3UFjR_2ae<2Fk0HJn>"=
+%^Q^cN)0L3_8$cZb+XpBRF9Z4a,s"I+1=brg.jZIUUgt9gBs``JKj97ebu58IO!Wo6$Q-O%gQ'Mm,I9WiI?9Yn$A#j.9hqD.EgXWV
+%@knV/OI)J2PLT7EYo5F!?oUhp![8r$groSN%D at E6q.P/$Qmi=Rf^6=se=7Nh.gp)?d at 3r\7F[<b<^PC1kk-6J+2RC6VbdiT?<!OT
+%Dn)=H0fT[b*(!32cl39:lsqaYr=W3K$5l=qM'M?h;c'@N)k1NUe""\S8e%>Egc;>%*s(Nmes8AcDGsNg9bbZ=[&or6JbYYUD8-=$
+%)B3UG1Fs.A8gYspYQGiC>sG5UX65jR-Vq#]$FcSn4CA7@"@]B%7rC8\8P2[5\p7'JpG49GHcHc:<bj>*5rKO/37rdgN/cj#KP?)d
+%ZWN3SFMO29ajQU[@8c`WiK?-:R5e$G-!40M_1hMYEXdJN*LCL+`/'b'8nnq^*0;q6 at H5CtjLI9nSQD)9p+sd0p1m<SCH8W*T1q<s
+%@5Ki,eMlX/f90m at 1$24.Oq$e81dtZt6>jh0$ZYHEXOFYROXem0:4u-3J(ZA"7chaRCbjUSD,@[4&kW"6ogf&]$WQp?n=C<mTL\0l
+%9,e7UbpH_"cG+d_lcq)e64u8Ek;=Q=NB2nT=Q)%V//MUIJ;XQ1Uop:nAm7DiW&$6Mm\\p*5=o;#&f'$PPBD*M"-+B+4QTW$FhE"]
+%(hso\Ku*S.nu]gO#_"e"Kelh[e1\o>h(/aV.5P.7R<1+*,_=`"1%UI*$stS2Z9WKSk2;u*X.T58j[BMq2.=VG=ZR:`S53oN]G9_W
+%#!$&q!Ma!NbOOX&oqk\D]%;.GlCn]=;mX,s8._;Za^DZX,c/X<DKfa8'lGo>MuduZlIMud*&5N&#D6c_ at +V)g:JC,)oI:4O"lalG
+%R9K#\VOce/l6S=9II\Nc"1[83CO at a=:h&@0C)Z*LfT9p54[2#fa$nQ(:F-hSAdEKSQ)*6n:bf13abS:_>6oP:"q`LF_Q?)*SDst,
+%bCoFOC9^?CJQkBh<qZVEb)JD>PCh]ti\7RLFj,I`"VPsY/41*Y,g_#-$,jjJM:[]UkQ'f.Bs-V5IDqqpKhrZ!rG]mOb-fGH6IZZ8
+%k!&.aEI4qJ`b(B.cD\*P#1ljKe3%"`/;&3H+Y)lFcj<!R0-m(US.,RZCF\#XH<Euk at F9/VB%onCh"_QZD9o0bXD@)K#n:]28"TGu
+%8'lr"1*MGN3XT7ogcCM\Z;!"?6gIIA/2mu)k'tnY#GJ at IWjCl5'l3;*iW09Iann^@@.'_rl(#l8+$RH8cb=<Q8La!/n!g"cCKAaf
+%(%&B$;G%0g%C3b(ZHiM_1Bk at ceC*VKTd'fnd]_un23N6QXa_*tDaHV:K?mV^E32\Fl/=V"5<>q#^NW+g6cYiBbU0WFgRsmsQaUe2
+%jYTmQU^+oJrH4U,)qdjYkC+%S1raeT-g]oI'96NcW9=1RFBVTshL$JkpXpt(,Yb%Gn5%1eGui\)#P6s,U*EpP=iFoDU[l[mRI"uM
+%d$D8!-Xl.EX:oiuYkVWR5DZA+rNp!PqagoFC'p:C6kE%;Z)>"6_e>BD!lG[7nppJ*;kb"g^fBMB\Q9)f5sFIGU#7o5$,/ClI;Nk,
+%C;B@/><6J'D3$g(3lbIVT,,S1X',kO-2H5G!%1Uc\d?s`Ar4=aJ[mHsN0gW`S:;%LbNLj at lkD"M\NZ'gHeiuj$(DbOdUt&<,lST)
+%mK?;M8O6KF*u4`=Z)s'sg-Fi<:3GKWkc9=6DA!;589:&Q at rF^(S!8/B0TC(a-$$?RP8(rI0F$*K(gO!QL]K.\mj.>c+]tm40 at Ysd
+%P8Jr7k<S+^DXBKA8rkD6]$BE.<;'OF1!+uV%YFA"EK,"S&m.%aTmUpB>^'`s=l.YKMf/0 at P.jhOU'd;BTp(ucSbU$1r$-TY&<beY
+%-!Y8L?N)fskUVVQ2?j/FlRc$^S!IB`h_DOb2Te#f0sCMKU`K"FK2jt/oVpNLq)iq\q,Y<6BRT\4KYE]T-J@:Wl.4Em]8/Z`KHRRl
+%3d[j)=.a19&qu0l2=(<%K4BKVJlpm<jNTCU9\^@PF5 at dkIYFqRMHH*d^?*HZU\]u$n@<u[#+;!\-e62]-dr'qUa5l>qdQ<)FkbBl
+%6X4e]NJFG,VeGbbjAi at 5Q-"V*\C5NTF759Z.`0k^kIeIN2dKXNkn<\'qbBVbQFq-7G;([)p&.bUs(j"rK.cbNC?:=6?JQ@#[)2Z'
+%8(KlP,-#V9$qS[uVj*kOP#$%Xkm`g`P9%kqo4UoFoA5jWNc>0$3C7s8%l'iF5G!A>fLX1'HP?!r73qR1lK?Y[XAp.+V&EcUCN8ZS
+%&&Yl^=r=VGFlnbG8E>mq4ROa1XZB*HFTHDmMbfnDDGriXW at K/XC:rXIg_l8ZDaM`0h\qreBU[/hB`Q4gHSlkdhkE3)UNt^IV(M-i
+%j]N*b,r2#fP':o%`W=st#4632%-\b"Qn-s_O5`@#)SS at 6j.(g at 5f*]n4B1qU.BKiP=mT8OX`qW/lb(FP+f`E]=:q$S at MguLMomOn
+%HEP;O!/<FOV;C'>`g,TMT#tfA4-D6b^LAKMqrOqD^R[`B>*/pGd^upV4Lk;,4jLNuU*4LP'Pa//@il[+*+eeX_-FQM%I,+LI>YK\
+%BNDE>%O0;QQ(De9fm4d-^Xl0r.WB:e#., at N>n]S(n^42jr]I*"iRa,;j@\$:9qjN'UM*9BEZZ!%ScjX<J&9p.YEOXocnlBX?aR06
+%ZJeC"Uq?a.kPd2^@Uo#^fun6GIo\JNCYWY0qm-@>PER at _5YfqMRt\A70n[TB0:Z+Wn1/pL1bMaeH4p\ajqMd/jaHE\2&-!WPV'F^
+%Ekc[qDApHj`?g"NUn1 at W3NLJ]EM(aCqCP4,Nlc\saH2d<P.2RQ,n!eo4JI at mKHtlQ8/XrdFNX_o]1p-Fd073?Y_!/- at 7/1D=TDAc
+%3CB8sm2kT>W4Z7BBXh at Boq]MXk`r[s+/>eFf&\fPR6As3FcZmhC34h)os(nV+iO2)0^&(r++*4hm8+;FZs-JKk4$)uD>R;@b@=(>
+%jcE'Im[INp8b3$c4#\g"BNk&qn,!Y.&hoB)/2BAWI.$p9.:F^*1GFN0):9!K:>nt_doo^RA?+deSXae):aDU;"$3Sl&qY"^VaMip
+%[<V==)FrXehDFOMqU['UO6;YR+HMR;*;k2W(cbS$<KZZ`T+)k_*>H-:QuhHLZD#RA%.l_QTHcc)))a:A4+Sp6F4_gJ9=GnDA*U<]
+%hj\kB$Ljdd9uss4`%Y%r7W at 5]<$^?MDTY0tjd3b at q#mci&li9dG8cp0pFg[6EHs0/T&oDuhXM:Q_O->aiOY&CH^jZ(VFqN5T]Fut
+%:L]qkl"&QR^Lq=\ojM*3>"a%Ak:p8^/@s4qb7f6[NCCh&;#?qtHqa,)Mr]$55.Ls`-d-Ch0a:^PC#EX^I^RX'Erat/deKRmQFp0R
+%+kLilq^9AR2NlVfbe$/1.=DP]]u]Un8#VXNaJI3i$sMIe;H"ZNr at LUHGIoo,n%)13?ok7!;.qP%LRKj7&,Jbb%I^&FJB<u$GC?gh
+%>c2tp1+;T;<uXq1dPj%Zi;f%2D'\TaIurHLd?L>M:'G90-Vt\Oe+?b"9n&^<;0aZLiB1Kj"l%///4F[MG91N`@m](:MC'e%.[-5_
+%NQr=J`_[mcK3Jq$__2<Hs%;?Vaf(tFUf at .)D$Ue6->WW>_DDDZ"lSFUG%ODMF+N#pVS:1:rAJ*J2T:#a)K#e#DmXb at L.$o,N0!og
+%AZIBnJHa_alB6JkmW5D`?^roXpAi3k^l,V66ujhB]-gR4DNoXp_:-JIV!M`-NWp>NE:3fZ8>cinBM,nu/F1f*c#"G8_,OAa]DB79
+%Z;2R;HR'SYp11>s'BsWP8rC6-/q`;GSrX3#kPWS60dV$,m"j%UZ92iqE',O/I=i`2Zl:p#C1T5n!5["F?5&LYb0\Ds]r-N]an!Ru
+%AU^#gQ[M!4CK/LEjdaeP2Xp4X96^oQo!+"CCmMd`L$8q\0+q-TPV[r&R"Jc1J*)I;KuntIF$Q6$`@EPXrqUS6mNg%Vpe^+\1/.TH
+%s,!>KWs at +Z]N=ZIV,IAib>%uDp.=tg0R\f6=^-59nosp7"W^n9q$^>m6(I*6I.tXR9>0O at iLl;gLA2F1pIUXkl.YalFo'acEqZ1A
+%&QCb>XuK.O#k#J^.p9fGo/IM7IjsJmM9tj*!21GjGJ"(-8r2FX7=B(0p05[NjXhkQS2 at E76!,;nq6t<fAO2r1kQ@[85r;3uK4'j<
+%`(Xl&ghu_!'F"b0YOZCZm>P3a,/4+-l>!%hS"/?2Zsk(]:[/=+.WK''[:-aeCHc=mcF0mplAd"&rj1!"6:!i_pR,(Co?nQ#Xi_#W
+%E&.#RqT7WZ#]^Pa$F7V-!/M at C0U[eUg1g"cV/!du;,k[]581pnC+fQWWie-b5KE.NG.is$iCALRA+d5/W>W*30k"s]0$GR$`L3sM
+%NKY/u at B%E<G$4tfg?km5qaN\[fO"RrUP6m#@GYY$#sG0H"_,ZQ-$&.=9]&;`I,imFdcF01]W`h8$-KdfLXT>u!+8G]M1sKOCqb:'
+%BYJ]Ke4'Z4]=ZV]<5g0*N<XX1;(#kE(k$ijQ0Y#t`1B;:2n/_a;0sX7:7$#FbECNIi.Xk`o^g(7k@%j!dcM9;r5i at f9YbZlm<<M?
+%3Gg!V_cc$6.I8,HoU[08(+8*kYB^BacCg4<:9:8.^NnLq*thme?@R6um99&LDj<f=HiOH`dX^*U8$hs>(PCAWnSrlsOX"(pgQ?`"
+%XA]8pqQkk5i2$p\F7:GRFl"%ljt:giM:B7g^,aJC,s8pG-X9n8F!g`njl-2>8Y at j_S,+$=OM2[9C<[>69"eG`Z0"dm1LIPtF3qG[
+%iO at 6]li'F]HCi-cDT26_\(#saO?/T:;l;4e at AT&:9tDrZcr65YaWaf[N#]E?I,pVG"1/QGNGk;,dT]PSrkP4Db4FGn4#`d7r8Rd_
+%j;*nM3d;i,%e7V]^P&SsP_kZpd$)E(VnLO!>U?@'GD1j]:?XdSnR1QN;7.ZX)C"+_]Bd!8;i4QE_)J8,2Kt"7>\0*`[01-p4Y:V5
+%%@q4K44fheHfs22XH#Kcn!fU->hkO<R;W8NX`W@%);6h?'0Hce,>pjkCoZ[)!ucu]L+,UZIJmd2Q\sc_M%/TYkNM"E#*^4EST+Ue
+%,.=\=?$:POWNfW2a at Dhd*sU,XQD1[_*6^R97TERWcO+,jf&VnLWrh8)-!Bdg:o0/.F!*-=9o.$j72-ue2eh.^GT[,XYY)!6R;73T
+%RNpu;'+b,Bg[)Nfdb+;&RHN>l-15P8/-F9&;.BB=RX#opj\fk$3Uk/4-NnfE=.7P*eP9"[@D4raD9d(qjW=,:=?f2bPs349`KJhr
+%BPq8SfO6UpT<"NQH5RFe3Mh:tnfdP%:;`H_)L26+3 at FZJAk][Jn]@bRgZ:cUkj>B0p=)>BQ%VVYUPl#;bP7Wb]kMlP.#Vo;_HT,;
+%4GbLH8W/<%QBES=W*gsei89Gk=o14'b#[ZLhq1lrb^6Tg[\o+`eCg,Re+3KE1gBm7jIGDE+&i'dH,huY/Jlk^,uu4;l9Oi69,bl^
+%Ee!7ge:`sKT!l[<+)(W>Rcp\@W=(#q[rXc`cXZO3kW/8sH09^+R(B0uk'7QK>hEF#ARR;(c?l8N5R;N at LpbQ)43KDV95"Fi#c()W
+%\DC/n2E>Ys;D0mrh?j=\h@&7HW#l2i=sd2hkC*Lf3B+^:=6#g8ZS,]ZJ1sE]/>4U:n?TlXNsYLD&5NP8M\^0;/@6,^^%[(dAk"s!
+%U<`43&oi[TG"m=PJD^ZlGF_*o!:X7M4RI[skM\mob[N$eUa="GK at A8Z<[HOZaqM!ICl;GjZX;"ifKN^(H"&:A9R`r7q)K-r'N)Os
+%j=f#7oZ;4X.&E)D^[X2QZ%'-:Eq1db4;]. at n#8R)T[4\5e:!tuPQZ4fF./*ZbJSWKkrQUuYr_g1&`b0P"X*KT-;=k$FgEBPa$ZMS
+%p(7g!, at ZPTq-J#eA)<0\c3qun8[Yr0Z#/&nft^bQP\9SDC#.<*;(5icU<!ck-ZY_plY`\DR:u=hLnSdNS<HiKDp>HNC`aokV[+Mn
+%=Y-p]rGS'3 at 6<!Pm]'!\o>hkYTGesB\&V\Shdd#i5omqgg0_=Si!g61\b/&_&Jet(`X&fFeer:\+)&pEdu&97o9=Y=+ZJhFP&\XH
+%"e4H10A6%J17Bt)2a&fJ#:W6$9&$,_r<:%aD:!YY&,VhgYHfm`b*U4S4;D?6N?-J"WTI^_`=sX)/FWG9^P/P"_Is:LS.&@]Hbu#B
+%[:cVUD[&PSR&[+)P,4h(Id4(3j.+ at +]r[a,K'3b:J-L#W#\.mWf_n"/k&&@]V5C#>>ImN01K^t$>s,3De^E\>d1D5el^fZmPRR;s
+%&0/!=E\c4Y`_7=17^B3YA[L$Q$t$J:`d[JFWFbX)fq'L8f]Pe7b>m6/h,<Mk[sK\'F#.11oq.u<YpQV"H*(7>#C!gQD0V>s.mr>"
+%-;sQU,Z?%0H6Ll31/B#HQ0>F9*c-*XhDmSdC^D<mB\8>\AO?#m,,@?3fr33D$#gk_cSK^mYd0`2F^^qP,fV#[2>LJmIYkri/T!sM
+%mBV>]Xn1f2G'<3gMn1;LjD3$u-/;!XI1(QR'.R!D<J`NHh<t9.m(iobi4i1O3_Tm4rc`[_rNqQN!bAAK\d)*#K^8R2_`kkAF1r2O
+%4Apc$+-3<&.FhUb]4F&>[@Ag?QY6aPf`1 at 0k;l=+^,&30_.NZ]a67!d[O]4.46-Vc[-PXCKUT()VqlbXg*[Hj at mVt%Otp$(n+GJ`
+%-oiTW`0p>SY$<o/)Tc'G=^iRC6Kg)51'm#+'7[d]5=5[6U#B;'")I)4f::l:,>4=bE\)*\SUcr^5m190bMMo7Spbnq4]oUfO']P2
+%M>IT<Fcp%.!i]=g7>]Pe.k?gW2=PV;9@;Kf:Gs3m2fWK+[`BmmSbiWA-gtaa)C$@CYe8,HGMrTEC(MkaA`)N:@EM:KYXqY:''6[b
+%hR:\[k@,YtkC>/3L$7;iRKb50.*a at mCe\-0aGV/EnQ;Xp0Y\J?g$@%YAS=g?i&Xk1%:[=2B2D%["#ldhFQX*r"*76%aHN47]?sm#
+%<Tur!Aga[#d6fsXDNf\_NGYA^-1[FB#.l"=_>>"T<b=uP?lJAo#o0uT>e+ng&u)O.lBjHl<%Fc2G1_s;B>mu`kp"8j9e8M-Jji1O
+%BDR^&-`A?,';;j\RD9-,&Yi(VIPRV0-]F=/YD]T3Z,P((GC6J/KC4m'G0u%&3X,F1FfitXG',j]GM32!Ni8ZC at X2)r-%_q9Z-3g$
+%^oNl;jk&kC;+MVT8#K$LheD!q^[9ir0Rp`U75sn3'jA`eFH<#0*sbIqrBdg4:C8/W'`W?>oAb=dV3^-L@,0*Io+pc,WipL^0`dXe
+%V4"IJE%:EilLD;t_(`:*D*</`:Do5%,3AKs*o=CG]H!O#8N<W=0Geb]*S3C*;35Jeq?,+UV<(D at 9W!]5k at lG2k`O4'%p>M`_<6)o
+%`]W81d_sF<SBK)CcPL4T*I*ps^E,Do7ZY"gW'([6H-8hj-.-_iD71eNmc=\AV at KbqO_t)_M/]b,++&)-#qtYcT-/B]5V>j(F\NY/
+%Dn=DsUk>]TV>3A"*h_)mr-#`7KrOs#'rKo`b8d1p8oI5Q9j3!IBUBb#<%].V;#)(6l>_$7A:^aQcIHlFPDcQ!]mggS8X(0jdT7Y\
+%XU[+lHoq3m)r58f_(pGTZs=1.'8uFk;u*N]J1 at DH*'FIg<=,?\f8TVM9qWapK(iLpY#3ai.phBicg+.o[_;ckH'63kco\A`3OsX[
+%8k+q.NU,'r,S"Ue2f"O53$AI1RJ4><KF<S=-ZeKGD%_AcZq;7;.Qr<I`0J(&IF62%`\&F45WA8F5!;GqhKQql>&3C.p7T!4+$jL1
+%,#r#K<8L[&ek-I\mQ&+Z);efH;PJ$1p-t3W&m-MO-'`*5(]eoo!Y(u6)@[+WT1"mJ/c7O06%Gst^g&)[kG]4!Tl\A>&d4ubR?KP2
+%9f;idRU4RLa13U\P(2.kUl9dKl)Aq_9A`B>AQQ52j8.C];m_"pOlXO76(Sbk>##&uE+".GaWpVe7X!!'f%4HL/+N(sN0u%^BE!7^
+%^+MImPP]!0L%*icn&t4jig009SJpDSVN8k<LuEa5:+.++qHPHrMV,G0ZLnXY6"mFu`[E@*,mD+X+iBb+f\QF'VFtVqC0 at GjhoX%g
+%T#Os0H]!1<EW$XUe.S-CK/epd(9GEhQi!_W,3ICO:7LYoYaX&YKG?n:PaTbC7%HXBK&5\@VD7s%FrMr9akY#QcN\+<D]06_^%d%`
+%q$lWP6!-Qk#GZkS%RHM$hl-sY[$@Yl>p^%*m$L^OgiXS37,-ks:'#ZfTllop!f7b>&*,82,9E"7#nU1`Fk>!tm2Ea..Qo`_L?#9c
+%)`EDj]_fMlaNqnn"!@jBfA$n+s3Y^?hKuce'GISPT/B]_Ooj*@H2X/+Z8p!AXQHk8FI_"\NtB:Rl%0.SEa4.`$FB4ZZX.*^FLBL9
+%3-HgJ^O_.qfVMqqLu2s:kTLN9fL]25WZt-F\J>Ks9VSh@>cdE0$?!u at GnG89`dh`iFTd/7,H=&&-<q';$=0jTj^?Vp4!nCei%\pp
+%Te1Cq?@FRqZ$VK$bl1.r3N9t]_7/<k)iqEk)jr`[]1+bKRC`AE/mkJ`,BIGE++9Mt(W+pMg&C86 at ed_F>%*;\J0LgO'j+4QA?-?]
+%FkUP=-,g01SWa#MgYVPr0A]8>L\6gH;j;<&^Z&h`0t3!lTX5sSTOW'F&6'jTaOb:$"*G!b\]ZQHHIE at .(P6Kq"oGT=WBJ_jn"/#<
+%!]lj;Rf.=KS:d?R/*7*5I$dE:hYq+)ni$,#&epJ3.N+42NS>'^q(e4-EbNcTS@]*De,d+SG)fCLPljcNn/I<=Eg*IY?+-TgklN)g
+%gtX0t*Ad6G$_015JC9+E7HR3i,&>443C3MM)J5;)3o_C at V9J(=PhL2fk`n8Z3Y:F0>72X]HDRZtkr3eRE-QPS".b)1^ir/4b6#Z]
+%"D6`VQ/@tbq]Ls%P$-73hA`#cr2S#!^m,V$dQ=^qk^fT at ZZ3Bfc91[LWX^o$q:i-tD&mo),fhspdT0,>5lUt:HR#BKKA:Y"K>V'-
+%W(-hDX)Q]5"bo9e:r:LIHD#s*Mk&AZWR4YWS_I.CD(Q`4&mU?Ks.&3O0f0t at kc+0F:R*[]J$ec5`-`*p4B5V36%s8^IQ at Rh1S-(]
+%@U/2U!+_Ka'E@'<H;Z1f"JKF$C=)ceX/d0q-Eru*W.Qh&f)%P at 7XN)Z-d:5?T>lUKFnR*,GHc>u(c$%XLhKpC2<7fBljJB!V"C>U
+%C<bDn/s/=YI._m;S)+8Eq?>XCl7<`e!dis3<[U[Had-&!U>3<m>nP_@'T!TEI_"sS4n$^-h9TX*76P5o#KE=5M'=7=J1:Q]($^rs
+%KUZ%>^9T:C]`hm_k)dR80^"E?T)cu47b;E/JueiaT:5:RMFKp)RsB@`9TJ[kX=T4Je=m/o/R'TIl=\u]PWnc6RF3E4Qn at Xh0N&jh
+%eW3&$pAiFY7]t4251O/#`fk0*Zi[\"^00Dc*_F=kpt0g&hf#Z?C&Ddu1K[l++_4%<QGOdP]7t"&\bF at t""T&]5(34=1AV<n\.k6O
+%s,m\t\c$j6#p*[e)d6qe3Bo2s\R=VSe]>IN6nCQEXj&Gp&)@K_nGjU2O$p`!>Ej[cN?V at 4;8*qRB\qru6)U=kk`Rp"2n[l)D!4-^
+%in8;/^.1&u:G)'t7;2RTXjmO.0Xt,$1F*Ybb6blaZPGB;:&?K@!]T*Y-IZ!gnW#3rE%23Lm!1GOY:5d,b.:A!Ph`,(,T\sB[O+?t
+%fd-##fCajA?OL9!b.=JC"BkZjcZ%;r$7:qdZda/N`nYl9#K_Kj3cP!F+V#.LkACtg.BqEn4.)5*rEtuM2/XS;(0l+HT;VPNHgp"]
+%lbfj_VenXUK+_"A.TbSn>8a1%qpHSL+3@>h707$&`j5*',P+k9kA(WMCudL+ at M6_EiO"d4V'ikqe!"?=4^kCFQ;2"m*UGsK+Hn7Y
+%B/,C%1XbkK:.XZ=Rr9[,"[gTdnXA0[DFI9>P/GJlE`"Mo<DQA]D*3F9odQ(@+*b[`+Mcref8g*0V=bkM2j^f#m5O,Qn^DQb2hSVo
+%+/`OF')qEVU[-`6X/F["f^?-eJTI=S7MHb=0 at 2/GX*1=9?&7M\W=;cYUd.]^p!'biPp7<.S9LA_;0-A&"oQsljaklIc=]c0J*OCP
+%R[UEklFg>[HL:.^puHg*"l>'>m3Y_aOVRg\7k$%:0,'.g9)=11l."O_e\<#GGrIW#89o499AV%1ep!>*4<:5/"4p0HnhcT\'nu9b
+%)9fF\c&%2\@Dn\g.kruteBfb]lI7 at e'CjESS#ST+"taq.A>88)@?ntU\Of!Z\ZTR"'CrDpS?ug-gpMl'5kH68;,H+Wlb'6*nuQnD
+%Bc4"__oFY=65&C<(&X>@8n(]tJS\_sIiZ!mP^HCS!V>@LWGD at Rk66;"mssM?Ne<qT^BNJaKqJ^8ZA!R6n-nX,e/=c)YnTA/UU+5&
+%VI"Pncb$"::BcQ/f(r%@dqWXuiaN4Kp/#8U5\)UiR4cGBjh.4&9k0:799^t!5GqaPmgSG_YWTgd<'j<>5n59HZs\;E8YoXaQg;$>
+%[LIWIBjAQu;9S4#C!CqU^_P$96(?SF_!R`j0l;_F60'r0+P^(ADrj/3g>T<')4CTPra<lIBOZR2Ys*\IaqWn\pAf_oVX[DYK[ft9
+%Mj;cP$"_P!(&:f\j[^@0U6^:(;hu5an=$I#*8q%;1UU\;3!&D'1=o,8OHk2f-26%L8sfu-4g:Fh[I+RmD3pPXRHlRD#'PHL7 at LdW
+%P,p?;'eN**K+]t/&D at 4uI]6g/`/X[);F:7m^5CF((n\b<kg^B%Io_+n?!:\Z;$"U;Y)PjGo at nH.3c?2L<QAbJka%d=+I;p5[R'KX
+%m\5\TcZAO'R:_l9VgZh)bJ2KM)%"$C56esiSY[g<`LMJ-i93`TKa:afL]"p\8;aD<D>`R at 45qb.&9;Kq-\\j%NnLaReo1BK6/9XB
+%/IVh0[pNGp*f0%dc+^pSC?;ep/'jhRqu[od]Fe2u'7[3=&Ru<P at p:%5MOIC-P/5.e1[&j0)g,[Jh).H`Z/(^bQWptmqWH_u2Y*K]
+%%h=i2BX`!kIS!qFFKs4U`NTt=<om[\)d7/ab%arPH<1!^@Gn/60_3sgC,frn. at S>NSm.*$APM]kZ$pGIIR_YckEiO$XOD1KGEWE&
+%6aG$%'R+*5h&fAQe(2seJbDe,adL9n9\NPNRB2L%-:9;qk'#dW#C9e4-WX/+heMXI$6T5k6k.mf`jU`f\_kNo3NR9%A!8[Gn3dRc
+%o='ml=41;u%nTZ0&"g]Br]iWk]1k"A*2Z0Bo>]@Pbd'MTb?-2p2#lag at 8*McR$MJNDtH5t$8*?`^kXLqn+ at WAOn&^A]pk-KDA4gG
+%6B!?,N#fk2c0j>O*6rOb=#V9lYD*tM@:M(EYeOf88Ks!,+"7r=j5OOm$fZY2jCt'\)_AW-!.1A>a"5>8c-7L77$1;N^rp/\2Z3nr
+%LC!1a]$SMtnS&M2KD(roLAm]Uc]E;JneHs.>9U,Lh11t;ns;$C80-nV[qXK=+2=*TPZ,^!M9.3In3ji596MKc]O-c$Z"0VV at ueB2
+%kFa?-#BU3R^r'bW#O)9W\mI),K*Qa?%q[sIEY1#NUn at .CJ;Me)Ou,-rFaX!T6;-Om3,H6m:*L<eX:bPWP<,$Y=79In1+Yj?<jD+D
+%Z4^Rs+sjITcBhE15_J`mHJ!TZ(OnSf/dLM4e,TbPj*cF#Pc$RADOjZ?nM(93h!_sP^ZIn`jM&ncp:^#q9$TFYA8Yk/DWAh<Gq,7"
+%Wk`onNhm\e-ekjtFg+0qHJZJ/Vne]+V2mKc2D<3tGn,*J97Jt(lr1u@]YU\6Brp39S`1)mGtXU'^1"M@`:M1L8CZrc]JQWen."[Y
+%2rfiCYVaCZJ6ka+2f%%tcJHEaAOO_T5*,YNZt'i]GTODa4iR-<F"2=^QVTB8d\gF$%YF_EoY)b.Am-7s:5j2`"Y$&2PYN-nm(7;C
+%<Q[(#aa"3Pb9sfIie5TfpgEsriY8EJ2KY3&Q'c#\OMiFkRk'Sqp$#E4c?>X\<*P=)\rstaZ"R:7:=Cm<o-l;T^g$*>][Ve at aDg+(
+%1!^>A7!sH4q,6s:/DXN^gq'Wjd/P#DA4s3k*'`UNKOCeNFmmFI\uTY("A'.iZRUpDBe=:N8jpfXL2u$j6_Ko!.eG$k/c^(,[`t>r
+%dQl3MGip"(G%#M.MPCCDhil3KM_&_?PP')/FCIUfn(AS>0EVgo%a(=D1s1rtmF>5LdE2Wae_d\^4QV-@!a;3Ord#YZ9DQ+2(4%pG
+%ja9DN at X=2M.V0.`-D*\^-h![PB0KL<6biC]Zt93<*%d?Hp/s`H-E<H6+U)?VY(Xn:#XC;sXH<"3bY*A]m6.*8S<kJ!s%[Y]K7!!o
+%rf\#"*j0kicl5+nUR3WU"ZM1UPnEau:V'6=`ia!ml:H4rI*E,5n;SL3/#Kt\k)TsUj]%9-!Au:F8C88FBPtVbWRk at P#t=h.jTBA!
+%M/8A[fgcKleZ#89AL%EWnd`YrOe-o3]6\Z.Eo_N7WQ``goPjD';k>P_-&2"WolQ$D6j(gb;<LLP)@+$eO!"Qch`YNPa[Ra!KC2hA
+%I:Z$B:G)/cJ<0V.T&IL:cUflW?Z4X!jt39@#L3KF-]VEYY\B7BrG_r7p7T?`RaU8:RAo8Jn5>teQ5d-5Gr:<'P1J_9gh?02$3FSM
+%PQ5nhIq[Kl7K8N2PofC/m67B*=a&&"3`*r16V3K_<-2mdP+XEg.0d/U*VG8`B!;7tYq-4@%UluI,ZP at MftN`n\%Ts!3U</$POt\G
+%^\2%;-"*SE%F"*/`,qGE90Y=:&$b36kNB,7co"8;l)U8RSQ(t3i?0suk<J.J:W9[K$`jE:8<MU7rPlRJlG%#U+k0l6>Zn35*(<HQ
+%5657I/p&kSh'kDD6*b'n77P!?W3A0<;V<,nd?,&<2m_WdZWt^?>HhSfj5W:km$$eSdl?eHGr)[T9Aai$hT7`RppjuVc`MW^RR<O7
+%P[eU)<RJbRbnrI&#h7\h_eDDGkFhosJUMi_]B8s6-AhtbD`"9AK9=cmH.m/PD:d`?k+0-B=2)DoaJqmJV`&IZ%ctQhdQrA^1,P&J
+%/"k"Z`a]&QIFf8R[]WHbMb,?@,g6NLYUlWSH>j1._20:3FP6=P at QHA'GTtN))Q at nf@akXP_R+sB)hf\s5Robu3W@"O5U9Otq0Z4V
+%0Dfug[k,QBn at oRh9];G<S\(:@EKKr^%Sq[OTgI5)C9p#:-!R^rG at OmTr)iitD3deAIS6f,OLFQ?9[2!^1Of_0?k$_/3Ao8S#AQ'B
+%jC]B)E3)PWI/r'']'.pVZ_cFiQ:U)E3^rjgPDB5%pR*KcM-qio?p;EZ;tS>'LS!\7#C1:uqll3n%-k7)!A4[t_>j:/l^pW=_+QnO
+%,TlS"4(3d5i*psh4(I=842k!m+U9C:^rP>94PUp>J=QL!W9[UpWH:fl4j#F=-RItXk&eqXY4^ge:.'1d#;)Q:LLt,:``%,K5t2pf
+%*4[_Vl48A at ZBGY(O3N8TAKHrOq2m&k%-.I[WGKdV5;sl7=h_pN_RQYSo']o"=%>6D-`FN-[Nm/Bh\7;W]flj;m*h_Z2`h]$:XbR`
+%Fk8^'L'^OU8P7/'I^U;"o81N9Ef+8a>'Z6`DJEW/+nBQ>FT_f-I$_K"<.Wh^'WEoXOk_*XSB7=iV+"FJAda=6M\O(KhLU'^%cY9,
+%<X0j7;u%&hmO<M#BfVT.%EP6!;+9e/ol.oF>6BhZs0rS3\g'EkVnD3/:a4K?Gn-8U"f!Waj'st<h-A-TIm50/eNs`4VhDqE8Ok1Q
+%&Gtj*bF1cDc;BI;q_.fN>;Ge9U at js:Vea'lXFJX3Vj:q%Q0=-*\PJ2*>)<d;A;f=])Lf6?oVK64fc\VOn<h-1E0)jA5"QqM`eh5u
+%*K((S2GpOuF0oYYQ&Ja*B9WYW.X<st][P]q&<m]tJg[aB%8r`k,d*CK8Rp#I&ZCn_W*UOC9gqs`q5D%A<`P at NM#qrA.6MWDR/UnN
+%Y-'e5d'7,,@[Xqp(0qOYBEpIYNl8Ka$3-[$rph*J\^>u(I3j'CPncqNna>N%p1\g at 3R::I?1[-jk!-nE.i$Z60.L</$$9Sc\D:+T
+%%Z at Q9.?Em]!rRB)"9m6o$O4^BcXpYf6Vuf+;86lU^n#7$)Kc(@NM+1[+(6Pj/AKN-c,Idj)g6ana7;9O0/mu0.N`>D.<cWdh(.f]
+%I6W;/Dp#qYE)+'mAh%=T9J7$V2"pN$!4&1_jaE,-lTKU5di^bmBLeWRT=CahCLl=cJJnVK>-A at 8q"ciJK,]P2p0rl'b:cP<)HQ0V
+%MN`6ED'mc.]"t at Q/cV1FOI+12e80gK=(Ao3V*7\kFq(>Dh2iXLj`]:Z7H1p\N-:u5PXrXT)ua7g`n#.b5?=k>84^&_\r"jVfY\bk
+%6OV;ZgfEc4Nb,.0j^:UH\=H./%OXOaP]ZERUPiOY0W-s3G$_.OC<@QimuktF'%XI`c8bu$:f+ds5V`D\O1+JH>9#_T[H]%[5[El8
+%Nk70BZ7Ytg3]:tq.<YJ7?Zta"a82Hfr7E:H^jGVj)8c+*rnPkjfL5%,%l-X&T57L_9HbY?l-=)$YN]'H5q:?9L1'9n?+JbK,_mC`
+%Ul'4>%l4#'QGAgHm/b#=L'd<74DUOn4`J8HH#KT\%G?pJ&N9%PV7aBZLn;^;=W-gGbBu at GX6JnUFn!-p:%7,U^NH*:ZeKo2Cb,gJ
+%!t2^k+6]5i?QuDel,+hp8l#nV1X)FQ8CQ!N'rD)eF:IdbpAA76000B2?,r1")"WT2H':l2GI?ll$t?HFQeepGFtD[<:Hb*72)NDI
+%=nF/Anca":W;C?G:kPm6daUm"@-^d:kmFb%709$r)b4qjSK!uh\sNW]%dd1%n=9`#?8DIJXIX)4JG<S",a4B>_:@8g`qe\.,(%tD
+%]H0jb]+,d94]`.)VNXa"G@\t&Pm!3(d50,(`:- at Pl'%$$:iF)K?rQ##mAWX:(WDM,GeeR4r5$&hq'Ou=%Ip0[RRB!#Pd_A-$5kBk
+%lFIS?@'Q[8g3MOS.i]J\oi:/HjEcD'F5n[X61/<`PFi#B9:k5,lroTW0/mO,"LUOT^Ti<7H#m(S9opYF`SZ'8N[DfWZ8L_5c&/`s
+%(>tAE95^Abl_EOXHTJCOJ1F,^JO:LeJc0jS0I:/!`lfr(VJ1RQ(=%`6FS+ at 9;[]nBds9qY]mT7S[\cpR)*)W7Iu@]5kNeUNj^8M5
+%X7<Hc/WSrXlulj?Z0*R<M+T/'DhirubuceO&M`u4=3p?)K&po8IN*k"6VAa<SrF at H9HH3c@'E#DA^Y5j<D']RpVE/c6OYG1/:jt-
+%0*c7A8=5<8b'($t9gu^h%i<-6"_eYUocjZM;^&p5qF_mWVIW:[jr!Ts/8,^@b;u5/[VOu^6DqfMl\1'WKP,lm'W)kP,gZ]n#7p'2
+%gUCtYk60]s"Ri8:+c12qVAk5`</uNtWI010j=`$3PeD/.[Xe"&`dUYdp at ssE+[Lh;+PHHtH/pg?iAE>qY`<$CL7,S<he!sA5?]\l
+%RZ,iDrKF354pU*\nNh9nd"lSX$XRWCNVd26Qss%4$ljOTfFM*Pq>[UQ"*if63P^EMQN`M,aMadd^N)-fS$Ya>:G2k7o6#,/oC:`8
+%\/ASabGm`7DsF5$n%ZMk8]TJ.*.PCO$YtP\oE62Hc!tNL:g851ZtLcsh"T=VVAttnbehq,cS9"sC2&6T@=UJ0[iCdD:FZBeRp>mN
+%p6dU8'kME2Nj!7pTd.Os_c4L28^q+eak!I'2blZIhd:>;6:@![@KuU0H[O at +#A<-<k<nJik[&n&T+[`^:p,=?;IT1nN?$]BJl/Pd
+%Zi0IB+jcB*bX0U($*"ooNPWpFk^6<&l9sWC^<A:VB1s\\T_O65Kg7R>\`>3N2^F"W983K!mLSlUOFlrq3Fq?#%H)_WD"\Nl/l6mM
+%4S,Id1J^4,$rbfX&VFo7Pb4>;HdZm@]HnGAY'!TV9=;8_8a-JHV";=_nhE3?lY7m,fM:L\@TN*"W4`#OTb`!\QsHWPD%JWNiKlK:
+%@jE4W0HCF^4i]Aq#UnFc4l_1_q/&B<UQo*BY3tsuS=)Y<ZHeq-AN!=Nk4=^j7>bk=L$<k?.hIUH6O&h,\s[_^eb_OX8=ECW/jDqM
+%50Z?SC4aQo<."@fccsV/#8""r-&'_([8\`Y?^^,#d7[)OQ)\U2"_?"[U#ENn3S4%IpK@'QjFlHsD.QM2RsO,7>5,9(H*>7F0:_#5
+%KeQI5-5M03K,K[BJPAYt,#pH]dA&"smn>m-Z-?>#Bgun9l(-sVYB!K88fj2Gf(+i%Icm\?s)r=;[Kj3i\J'7Z9;6dMcOlsH%934`
+%^<JTRT6[W+,tKSt.2D6>";?SRN>R'o)gb8XeitlFQnDHTAYhZAj/;oc]o^kg>PAr=@`sP5]T!;ifPY=Mf-kP\V=`($kPFac!i8u"
+%04U*EEsoo+U<>e.kLgsGZ0$l)EDb[>2qX91'!,*MKZs^ThLKNEBHf2P9ssAHK:HS.<FoZYA+m:ubO!^_Y[:LBf:<ut<8&k+o]3Vh
+%QgIO*#Pb0d)"0gEi^H8Wo;@O at -h9-.>NX0/^4-GE$*ErlVmWKm0ljm(+/LT#79sV`GM<p\V^/PHJW3WoZj:KhQ)!KdIC^)&=7YMB
+%\\s5%Ru!!W?`(Kqb;uN'&ijPjVlfgVbgD50.=r5A6178*TmiK2,f,td7jiAbcW475P;0.C&2aP>:HcW1qcmA.$6?jG;"CjJ:Ah!n
+%(\-l:)aVW'%WKNA4*p<YIe#gEqQtLN[;QJBZ7Iu-_CJP#Hds?4HI4Xa_94qh<nUij9][+0,;YHa8KGSW=9j3#)E!?Winfj<DH+K'
+%k'-Y`V'n=-^f$"UK-RjkgH4_Q4o$LM1k9-_!>no!U]tT^o;4kMP(m(HVX-O'`=$Dsl&C(Ec@;?J9(MmL8dlN[//bLV:0.,NY9^7n
+%qJZ=8G^`u4QM_(VJ8_'O_6"@VY[2Pnq2]QW7&dId0ae$o$u($<&[!CCX$lr[e+PU#\M"-0Nnqa\G>&i-FZk!_h.ZSQ?'L&cE`Hpu
+%AgEALI*O=q-/O#0aHs/n9ocm0_].N42PsMmmceNbQ)>N3cUWjbb6]dHEi&P%d$t^W"PO0/>&$56h/:W"0 at e+7JFRsD(ankW\`PX>
+%i60^f at 1mOM?(9o-3qos=%lTiNo4&'][Had(<@F:a8<_,\6PYeHMHiiN3(L[9mLABba_b,s4AO-7NW!G75[t#!pV!G%Gft/'\9JAO
+%KHBSuDB.YSc<UqVoM:`Q'E#kVni,2YKtd!o;ku=d4ts"a0mjijSNPY6WOeO^@"5qnrB at Amhj89..B0BWl2tfEPaig69lq?_$^s2]
+%2:$o<UTk0hL#hL8W#"j, at At,)/@jr>)Y;g&'aBFJgO>tnXudGVZWqYsN0+Je(tCD?K4NMY-Zb<i+5B;=@"gClda>Lu>F:HUc/qp(
+%'_lDjPWuVVm-1)[6KP=oCV$D??#[-a*!_?&3G>tnX\58@^45>n'N>TgG$i>P/bhrm%<Ch)2Xu-Ap>_j`]io%fH\1NjP)0'e6Op?+
+%?MiBP#86>5@>E6E--n!5&tJ3QjrPZb$5C&0LdLp at r:l9TeGNR3;31-mrR?gDRkspA](\@sl"5(#n?O1)(i%>hq_Vl)X*4G>,iQQD
+%'!bapVhMdA/PBRFboJnQ0rKH?=T!T-6\'S.1j,&$[5Pc.[kJ$S[*B9j"5GVS;f!e<-[^ET5p10]A<?%uK<snn;?E>[Up=dm at Z^,+
+%,SXA%cF9;2))j#1gl]U?U?+9\4f)b$gTBdi0C,LYOpI<0PETL$U4nr[)9d%RSZrCnTsF8Z%n+GH08/fZN:hhDe/ZOc5R7o.:8g8q
+%nrfm4MrNB$iU=/n\/6%K-\kM)nCZfU5tipJjV<.^C!4)M$/eCg at QZ%4&kSnOPa%HC)@5UH,QQTqTf%4_NB2&g!P_'(__r5F/8!2#
+%hijOW[);#nNo[lP,n"lU?d$L#I>l4X:fpAc`CAofCPuUkWAt7.Eo5BOq3[.C9!riT+M""Q7]m12nk=:7E]G]\>o'MnPQR_BBD]pW
+%3OMBJo9WhXDNhj8=O/6(7`mmXAgM-bi^GS+kZUOYk22LA1#':g=GqqMgYG6I55RBd!=)WJ`28h=E"FPSo3ae)cW^TfF5&#Yb)D8?
+%*5S,FXkOhopICF%24g3**B,bAZes7'm]T[dfGjF>_%f>@Z95Ti40_Q.[??SThRQ'g_+W60c\%t/qu$S\]/K6QE($uf\EP"bo5f'!
+%L?g!j19,60Q'Z&/g"-,-TkA"mW6)I[89igd,_7[(WYQ\T^!VR!3J\CgOOrDPaHDkZburGS0VgE`BS:h62UCW\g0[2U8AX*>@m'7J
+%4XVid*9O7''Zglh<1?SZEG'j0m:=p`\JJIMq6bT"E"VYGL1]-Z-Ki0^kO5\!A at D:jCT_rAGG$T.XW61Vq3`N4gdW0F0_ZoZ:X]^s
+%?UHkQs0aK1Y_9A/s7:k;VFUnP6')TZgU&/l0'?]PgbpASJ[T^7[]'C4#.D%\[j=>"GAq'*=0*[EfMJ1E)cM)K?_"i'>^9jn!p4Yo
+%Yc*B,W!;f=;]-:Hjr5P[4>*rU32n0h#<jd\l[SQAC^8sj-UGKrNDnQ7=GESDej>0iJ$jD;UhusAg,!/MqJZHq0=t/@J5'1!^N'R_
+%I2Clo_+eFKLQ'%eXO5WBq"pr=\EOb>SjLQ)pgY+("4i2Yaom\eO_"dp'GOlZ/=XR^Es.BR9s5ADBQ\/d8F9$9$\dZZV;TPGaI3=0
+%:k.6Gi3[@:`@nL8hs;&$g^5g+M)2\7<o1$3;FO\g+stS5bQeFZR)09gArT[0p&Gm6:Uc8P=_ThFq>`/1S at k@rJn)M[ZFjcB&*&J-
+%BC6elceoTi"dQF]0G&T/,0$u+%?N;(l+%e@,m2BDHk)n84np`2%&5?Wa%?'@jePo1i!ZTCEp1g$IE4^bl1h%i0\8N@=Y>5Rq%3oa
+%.93O>o$Z%O9RTJ&Dj'<;XFOT[5.C+EWg_+s(V"2[oB&D<fM[p$Bts%2XnX[rc_no9DggaA@(+d+]TI$g=4/W\omFD$bK;PuTPNLV
+%qi&=O2GN?R1PH?B[V53m)\^K_)PE$mPGO:$e`VOh0*\?:6qU0Kq?R.Aq8>h+jM at k?;q7pZ#+=/8!GB0#`uSM>LX`1T2&uZtY:n#o
+%*D(AO'8[+"h+&H#T"$mm)akc&d,I$)Xq/r]VU;<>n\[L52^AQ=EmY9Hm/G/4/p#Rfa23Tki%:IU;QDE;Y1+`D?gQ9Qk>rnH39Zet
+%EVpugi`!Q-MCX!m$A%NK%b;L!oiYLq"q0 at 7$MCg;BK8paMSUEk at PtB.^JnB)=Qr31qE8S)r]2u_='5=[i(Ze(:*GAVkEr:RVu,7&
+%m@"`$M2TPulD1.JVCK<3F#FE.5rY9-NP)>T_IWe$eOG&q=O>beJ\uCkZqKXape2tb"k)M+S9#rbjHM'#GC8HqD:>Z^ZmEP,,6qZE
+%S^KRj6#_[57I%kIk.p3]$J"+>Q%$"Dh1O!n3V+LpnS,#)C;V0hY%eeAW2=DoAYkVZ>hjKl&0kg#Rt]g9L#MZp;_>'3;A:aIR/'V/
+%9#3mlJ9s.,.+4j0UQ(q*r]]$&I/h!,WggEfFOXe2^r`EIIU9M8)"bL;<<C-G`l2&'FJ/tY]enbVb*)i;-f$uqd9JUk>ucl2?)60q
+%#`4'(CuH[#k,fb,-fplUc[[Hq5/8^_F5\;[XA?Cd8oV+`E"e<@g:OVs(TW\"I<3lX4*&(*'hKMOOd at NO:Y`u91o6"?InGV5L`<7P
+%F-(E8Od=_4j!Cf'C/^77*.)1A=qf/%aef)Y%S_iGe.kPF(Re0>+HcNUQtJjVI'<Y)!E09%rfSMRpU8njKA.^l-XZF\qHSmZU]rm6
+%p,_n!!I<0::i,s::Ha`2olipBjJ,)(8IHB0kKYf(G'46t?]L>kb8H"h739Bl\KV/j0a8h]B4f1m5&Z&76g?8h9"BT`]Q1W at j'Y_3
+%FTgRK1f$;>nmTY!($hJts,VP6%c>=N9IK^/flngkego:"YYqVK>G[#*`8CJFobssBn)T:h;o.1<5j)Tjj$?\unr3.8^D'MZ*;hp^
+%<@t&25.,r&4-\MsUo_%CI"39FPW[&q\We5olpOZ/b\qrn;c5^7`(_nn&Vjt-%;P5Fn!;nZVLEGea:/O$Ie&p=]pJ?KH%`^G7)E"S
+%DmF5e'D"n7"sZ#Ie(]i`fS2PO8+AXqZfS]m,.MP0\UN')BW5)"Um(j`;RVna3JDt1:TX%_8 at XP&6ls_Dd&0QkTaSa/mDEf_F'[r)
+%lNcPQ]ST0[cP',):W1#fCu(+GU*SM1Ud5R^Qj\K][D?k;;AQhsZSFjk:[71Ll$$<OZjEXSQU4b5H1-rK"9"F8(\4Nc1>#-t.LJ"S
+%;AZbj'r[t8 at BVBJ!e&hM$hlLYn,5N8`.Kq`a"ZoJF*Y!.<)mV6XU"mYPS:fQWgi81qoXjY!j=g%(J*cPVihsPJs3bY=ncVoA:4sX
+%O13h).=__A";XR9ha%OVDq#[NU_l')p9Llg".iJZg+SO3`L7!,;Z0QMHr<2ec"W92kSH.`>(.[`&E66T?lfaLp.E55_:n%[Ks-mu
+%*U'o+-g_4\7k3r%^?CQWmpf/U%X)&`-.>NTFNMf),nY.^[?3O&JF)N+\RE$\]FBIk/^p4$2%@-`61UT))"95WT6BL\)Q83H_TDMH
+%n8k8gX=rn8lb"[g=K2*E.W9ee8$Ah>jg at srql"!Of]5SNlk9V^_k>JOr(cVoW>QYG6qcIa8.7YkGE!M_CH9hSm)=@hUtGOu`rhTG
+%Ge'a.c!uS]_/!gPr>\UIoA/m(A4_qn,`jJ4N^HQL.AoH.*dOW at D.@OO!YjTN63*,)WNe=X:8q!;9'[EFr7^s^RQ`A?=t><9C:i1s
+%BBGU!Q\\<X4=Do at NLf;gSNKS60#[0W`6!M]HqE`",f:5Mfr_WX(nU:pPM=>i15R'/FZLq2>kB$&,nK.,BQT?>&*eF!ltWP[ch!G=
+%n(-o)qrQ+hK@#jR_gKUuCr>ZqDrT4k:@[IndT^)eh^IPj=M$ZOg\3IX^H%_E,BP!_SP/gZBscDuc,A%@I2:!!pGC&i2F\f.pUO\^
+%77VtK'_V+A;WC=jMh,7Y:%4=+'DXHUAHT,8q]Fgeh1eWG,nGlIi*\<QAT/UlJqL%#EMYo,R*&8t/d[2 at DOAY8!`\LN4+?BB8:2lE
+%oE.ig,"k!jWOiJr6:7)g8*[:HCI[#ni2gCW#1mZB-%\l`)_b8eB"_5gWaB5B\d at IRJW)MIWFlf^RHN\>-Dj<SAte96Qin'LD]?)-
+%.W"cDCtd.EhIk]dO!HJLQ79i/NWn#m=Y,%I2_I\>/2CS"*J-;;:$@h`H.j(H=qcbE*qD/SDU4C*n[=nGeI/jP9m5I#`Prf)GLQd@
+%oQH6t1EJ!)FR\lQF,'YR-GnqqQ+Vf4-/GXVN[Z9CDaYfT6ZBBRIhTYdZp<A9f<ni at gSRQeQ7"a5iB9&*a]C'"I2p1$;Z^YaQaBuA
+%A5,3eErn(:9hA#V2lQP?CVbVJ[9NcZTs1%F7QVr$CVgjI0PSlK&"9Wkq!Bp9;B9*pZgd:rW(f^Yd%#^rBO[(*<f[C*);J!gfR,6E
+%aj/YNLPj`#b_2F9O&1tkr!$gUMm[AE!>j;ar3jCmI1gJJmE]@3LVPFsrA\P,76Sp1Oi9G#6g$Z>02O:J?9<(/Q(?scfM(IK5sLli
+%n""Vlbt:Ipkr!(n#FkP5jj(42NnJ#=&R)W6d.hOq4'l92-k_]lb4R%2ZdX+hr4OZl*JT)98i6nTHE:A&S!raiOIl%$X5m+R9M<N`
+%og!?7%qmB!\:0"](P/:\L:p`#XCPJs2qa\.!4&`8!(ebA`R7'I37t9:g(6=e5,FpjfBj]e`W_mEl=ke*#.4r*$7hM\FiaHLi[Vbt
+%VZC#JU\LpJVLH.a at +tS6^HbO<2n'.bd\qrGeP8Xmq6-=6qMSt!,f\coge?R2Mst<3^/EX`8QRh(&s1ESCZkV*D<33TS$O>QPE-k(
+%C`?PXn?8Y+r`IJiiGpZ0CYTc8;tOn+s,C+_Tp:!,N:7QC8VGKV#j>oZUT)Zu>P!)8.n;PEGq/hJNIG&2[3poL3VVkJ<[,$up&5Um
+%RE at sbfkSI*,ipnO/=R!h]]Z`@o$[JD?C^7U'+]/bIlt*A294FN7c'm-Bc\=JbgLaf%.n31XZo^Cs7`l1RZbUHhfA:d`TSC4eT(17
+%:!?*N49C!J8t/D.-VrNOi(UotcsOof=/+mP6*G],flg0MZ69)#Q`".Hl1.i;&aA>I;rs/4j$h01IIO^E5\r at uY_4r'nEhNAZCOp+
+%.</2ngn)DE2:lP/h&@Yg*Hr[t#c=j;c(4L.;aL&)QAlt[Wk*_qp#:=1%%hhupmOf"_<+8"OmB/M8 at li\D6QlegOhVN7)5q`j=[r;
+%X2DUI4Fb8?Kn9iV];]M4I+Mq$E[Jqh9OI?M0['?-\\^Pi8$nuO(?^H:bh/mgrK,3>dXAPoD58;J*:'A^Hh/HK0,h9!"((:"295eI
+%:TTW:A0lV!3>S&]a0S^rbDf*LPk#*;Y<#MVZBX`SjeT]f^==Qp$G(G)kP5/ME*2%EOonVoD-SS)=*'UI(7&Zb9=Ero;HGS at WqsO?
+%d>@WVo[oD7VgV2P./Ds5kTuF$.YLBuC+n_W]FVuD4LFeY,nOPP-9NlmKpKUSn*-gIW:.$dB5:i[)shYI6tfm at H-b#]fo7nA>O]<(
+%\FeX6"SI at QRWGd)COYikZO&JLT9+Silt7\g-[D62M51DDXd!4OAX-8>o&Kh/Mh06u72DjpUZ>#Gd)P2M]N`QmS>HjTLRlefU8aWJ
+%P2e73bE;?_Eccq(=/CFA(Qrko5=b0.1d9<])_\+4Vl`BU"\kP/coqiZ*4_n[HknWD6o7.NI4u_,["e0hjPiX3 at PQuYl-Lt<Po_Fn
+%(,A\6kf%9_^#,g3O\-N\J=X+.gK7-ePcE?rm6)cDrp\acQ,um at QqD-<Q#/qD'?-kAISBu)HDq_?A]h[a\W\ZQQn5[efF-mjk?bm?
+%/^FCnrdrfO0^%Dce*&GV`mA@;1ojTI.Z&i-J33P/b`u;4FpfY<T]8n<=.CaHl9X:+>cMKY,7rA at d6Bh%LY`1UP[BtkYota/2N5Gs
+%Q("(39eFgE<0&sQB\m"nleC6c5Z\[h^2^l:io8)ITVQP8M+9OV]LAtQIJ(mN%'_lj/0tFo-^q1 at rphgN*M#<`^lmU'Wt:YjN3\2.
+%qrN8WW6I,)S8%l?aE+>SaYP3fes5\hZ`e,.7T9?o('Vb8g_\&`HC8WYNoZ=S3RQ*7kjcsNQJ5\ceAg^u7B-M+:^^a8DQ\4m)aT at X
+%YQ]K65t'm6p:Si^FtZE-4YK/<[LSoOO>;<j;V%4u1O>GrA+.$DRHOJeL`R>XkX"PdqMqu]i1O5nkAR3Nj1j0Z.K7V/*SN$C8k\/2
+%$Q^4Jmn;[CG2)2VY^i*:T_-B,9GUiHWL7/ZMDkcObbuEsC>gaE%=Onf'lM5C9,Vb(T.W]%,!GNa3Ug/Ljn0'j8W;S%HnJ?L;4&Z#
+%S)ShMaE-WX:lQ_gO\_<g?\9hHlQdbVDT,[=<^P1cM<<S?iF&RTp`nB&/DXEE#7MpII>IQ-,o1EEe4`i^[]G-Lh]T(m\R!S&DF7]t
+%RAW=?#_f0[_%#sA&_r3V?OH>9o6`3=bEoSd5>[C&9EbiBa&I. at LRXQ-(gLK"ntd\$s'I#BKM/9%d,j;BI/mU9F3/0EQRTtPbZjZu
+%oB-Duf*1geWB.$$)_08"j]\=tRUaDWI31\ZF1)P(jAP:3H%)RTUtU4I at iBY:bA_^$N3fD4H=a5^_BAi.Qpf'G(ZVs0HI.SEj37R5
+%>lrHuI2Ca;F(grjK=F!#m*THuA/Wm'$BJ-e_/X)hmB%-m9h9hZ;M)Ap at V]DGBqEh:^NV(!D^]J5jiN8Hj4r2.("nZIr[Ab`:,Ppo
+%G&FC?ddEoqUtV at 2,F-bWIu,DjS at k3Q)o#[f3CX!?IalZ?,K9D at GQ+g"8O,tZR?Xlc)U7eT[2L`c>(W%lM"`CFGGU>A9>W3OElC<`
+%X"H$`iPuf4:(U$JDMDcRs!#s[f,l^@,_ujuV<?A;Vt9'X.[A?,:)#3Dg-Eg)JVr]MMROZ.i(4=XlVouaN)'AQ>-83[('Hp>e.P!+
+%`6T-9HctlgY>dF%RF>FmB7h(Rh3ujI6)9L`@nPk&:WUhCD5=gRep3h8jkZ<0RWY6'^/C?DAH>Copuo)t;ZJ'IEgOE;gbV0H%`s0`
+%]O:VX4%YA7[[Mm+kY.2A>=hp%1nsd.PMb6QM[7IDgYN?&X_qLghaF/G/B+OKN&>>-cM7tfr0,N%<+>@:do$?mfZ=S9qA&rOlWeht
+%E+NBCm$RTLrXViN`D*T3;UI/8fh*FCQsRiOgN/s;4iAj3mEMt4^JNC7 at 1C/"OS\f/fe)P3f;Y*Rd$LAi]ME!C2`-U9$]]q:f$Ark
+%]c.cL!R<V_&52\a];tPq*!@""73s1KI#S9uEUbk[N4<r5ESLkSkLrkRb.GT\@*hO^_a7FMIe-eae*)/1!^6/S)mtG+>Q<Os^CZfH
+%X/9r%-2t2aG^G$BNb]C&lBfq@$&j0Z%.X\K$a:uB\)dUk[O=aC;:eu>g^A97l52#0DkRZ5'%RE"V`o2<!j9h]fKVi`brVH^<=uN3
+%*aA-'IUYZ,4IC4F"UN7$'-APJVM"s=O*,sDgf(07GO3@@+=4 at 7cu]02T at 38&jHj=#59Z:dP!-G3'FYeuKY1MU48]CK`3DS+S$;KI
+%X7]s`Y$gtpmS<HpO*n^D4#<Eqn.^9UhCDj=TV(b\4W\V=R>ZLpi9W@<L9b9'ei's.a9bfO]O#[B^N[hg!'E8OWJ3tSI;1kpBmJn%
+%885]eBlGt9%a\/J'QRkQX8,WpRIVAPP9[$fMHlA&`Uo(9j%@*2fnpXc(pdTINL(]6P&_hGBh^?HZnkUIf\!KPE8^i[@.+LbOhg=0
+%Tm_u4G28">_`4*L7ON=eNd`D#.n<9 at Y/<jLG1+_C$1bDdZR.RDYO'd=kXG!Ef($Nb*Dc5^5%'9:"QPO[5J at JS#fNU)MGFH[?2J=m
+%J.M=h?1>>>;IF8MC8ntZO?M>W\cjP5f>,:s*rE#TnM>>_W8`[A")+gX at eloWgQG^E"87S"pF3!skW at OHc-`>Z8(G(l"!Be=8VO]P
+%. at IngXqp8,R15n9P<CpY5K@#591If[rpORk=Y.,=\I)85C5`jhjp9(H`1])Q*MX^,&]m$Z/QQtfn6um+$_Aod:MD6^']5A*^*P**
+%%^rD(j8,"EV6.1,]/2#=Mi5nu.epoiA(*CI3Z;4[UjsQp^o/\Ag+=uL8bT3q&UD>ecGk*gl(9!Igi6%S,ELltEV<:<IB:B49&MM5
+%oI&kbA$:FC=?DjDI at QQ,#SZ:2*Gk(8DAeWT\>AJA+lRp<3u>kp\QSHbY2bRi/T]Tlp)M+255se(E3hdQEDl<Qdj-)u\uX>@QBVT1
+%0>U`8BYj(.dLY-C$Emg4Dl`42ElU[Y,hXT\M]3tMKcJTiifZ[]aRcC2lkqLV+_ue`nL(SV.)\@*C)K7]5XN?,H?NAX-9K%^1(r&s
+%;K8,W'cH+R.BnBNNj@\3Uf?^5GI^KgSIu`>@hY8=9AuFkQ:Oqnb'*OR^/gs=YA$\qrRKr3G@"Fhg\rt;9oYXR!U.j\$7]>YnbIUr
+%Nuj$X!?XW&1-8=1O(A2TEJ$-\9HVR)MX39%Sp.R8XX7*:c^>D`S;8MUYFAFCfLY;j45Vn;2X"\>r8+;DR_5nmF2(AR<Kc?se##X,
+%fWOJMP"R>lbP1 at P*/.o1Z*P/Qn='V`?u"[sEl at UemR+Ht-^pO+p>[gQbucQj!6G43!Y?j)*@SI(e`t\/YUeT!P]GD;%&OnY*I3(4
+%!9uYR8-@:._0)6TH at Wr<=d7+;:P-JfFSH(a0\X)kaBo"c1h;u]J('J$^,bD@&"Bc:1NTqANq&Mb7fb4c.3E'4Gnh9Em^Q+CeKYbi
+%nHf)bgr%iZ`<@;Gh>1h@[$_`<qgh3L5k$iJS+@:C(UD&IF/<)fba#_<6O=\^<sf#C.H<%0]O.[-3t)l-mMaSq?sMb:Eb9\ZcY22]
+%o&eh1qK.!J`!E7*iuRou0kK99ZCF*-o;U.b/t?*EHX^!X6_H:uo8b*IK#bB2K;=$1>d<(jKeaCf^Qq-$gN19cRi@%VX`Ns'j(Gi1
+%*A!Y0*S=9^%@>&`C)ju]S"HFF-sXnPs89G at B61Cq=*^od.M1Y61\]F/+K7=^0*,j<(6qIk.G5+4QhQs>"h3R+0U"0m:6Dl+/l:"K
+%kHI!f?piMp;>;_7)n92ieoHW:(BSd;^P-?e-\DhFoD[Fu?O5nciBN*Te)^3S;l?F8I"_]*hUm,:ojCgh*&,C^EoET-I.o"0P03Tu
+%e^q2/G5Oo)PppFMKgSR?X at 6e\GquG0Oua_PGCR1>IZj&==t[0%5rN8sf/OG5>;CRKiRZ4(;Zes-a'MiM&;C'=2<=GES^(-uM>'\\
+%El)2\NPVXdRXgqr_KaD#:Mgtc6>@l,Y&'i452JX7oaO`lYd\VKHAX5`b^H%1STPi@:%X@`F6QA8^(I9rDq;\\O!6Pn)::,kG1Q>.
+%q@?>4Q<]_s8o8DN:7_!4l!K>'Kr"=_g"TV8m=d`i1GcPWN)VCFS##:ESh6g0&(-aa8&Ot`6&aT:\kF,MHC#IIk*:VfZ)"=D?&b>l
+%0Tcl80.%.\8NT.sCOHiuQJg&d-%HuW_SIj*W%A;48/5'+2)g.flPp585(,JKYkR:AZ91t at R-)XO,k*57WL\UO$"Wks61%H7a-*.u
+%[?p?g1!X34O`[gtAF]6d0,tL;iE$(WrTmPH[&ijC,*c;_CJR]7l at n;P4)_'6]V>f8ejZ+#7,:@botXN':`4FTT]E+JnVghu2$M]R
+%7YBmg!-&QU*T,e5fe#p$RWLmN/\*<]MSdLm"YbRtSCNT=J"o&H]Y>3"@noa?3&tW>_g!FfY4mURk1"Uo/)tB-6[haR`2+ at tkZ]>S
+%T$pL5RY,NSj at Hk,(uGMtaRkEW.iMUjpQ996n28A[2s3q`j_I(o(C"1+;;"0,&IsEsp?jotJYh]7p1gg'N:SkXUe8qQ/d6B:Hd7&s
+%nUY_sK9>#."4_c:%o[h6DUU[LUZNmcTZdp]$da$s)-\G*-.ikcb>D#sL[C_(Ojho5ZaNGngoTAFbCe*E at B;7P8L]],6l=uW298YV
+%e.98R&=XL1+JtXODSD/],5F@;o&f^n>-P]+C[e6pSWip8d5W&DLCaQgJ/_a%qRB49q7Q=Kh(JkajFJG*\!MC?#J17Rgi'q8kFN(!
+%2$]?eb(@j,^QtDc[bRLIr=Ne*/T?#0 at Q%kC$LCd4g!HaMr'\m.RXKYP<!;"lq0?BY(PK*&WJ$P/STmnp'AD9p739][%94,Q:$ojF
+%a\R5,i]"J9IR>R.<F:_`;JYFB#Fk&*/pf(8`D0XaqSH:)O)2teC;NdZ8J8kN5%CkWC'?T)A[g%t=*54-gp3HE^btp-,U6%=8&FCO
+%I`F1+.]MkAA_TO]kB_+M#QcuQT^1=tltjnIl?'neLS5*X.4l at ugZgo/)0_1X[@`?=*%gK(W.73k!2oCh:$XlCBAt`8gW at g^`s.gm
+%U;s(\k#bp=h62U`TBf"Bm[dn(WJgo#RmLXW.&Jeu2o/-rgQuFY]./Y`8KBI\fDKpm[eV_3BnJ.lHr^=0n*eAn.=*6tqf?B#l#i7M
+%>99SRcSJquA4,F*DFl##XT$B<2a=&1`9c,Om at Fr>FV!'/&p!F:SH6+h4eM4ldr#Gs8b'$n5,K6YNLsUs/*AVd%SsA>?;F(4jp3mk
+%CiH0[M!oe]TNhb'VMNQ\"DWsogOqU]@KkcDVTOJSdB52h'[3.kYW!PmZFT at 0s*csr8?PG%Sc":pFH_)&?+TV;&5436:(<dT)!Oa@
+%e at G1"-4!VOPY%_:ER(u\AJ%>9HBJkm1jeX#Q-pr*SB,6jjN5qW/kI[P/>2aKhL+eT3!j2Fk.LM(]6h]=E-h.rD*@+Xfrl=)\&?r%
+%^M*6d(K"Z0UnL_h<UiUcQ9)TT3R=NOI at PX>0d at 4@ps-QfD#&4BM8NSsq>hUfGb#CB;>2>R3]dT:qqE`5 at M/"mkmtA>eECs#7l'C#
+%qSf>mCNUn1]e1;)EXIHCG,r5]>H.r5jUWDH:u,Qan9u`_7].I#"OEkt6pG9HDTa/p5kFb:,#9AmdjV+c`gR]oZi#)f6IN'Zb=TLR
+%5dh[>B4<ceY>GMkM:B1/J;[XY-o([DL2]XH-k]m+R'-'@"'qp\\U_EK<E]d84PTVrA!uPbURoqU"FdfDj[^_lIV;]7IT7cX_LE7;
+%,)&rJ67sbmkMnWM[3h&\lhq4/VP^[ZPc$C,BB:5 at ffpW)RLfg$*Y5rg%mc#.CSGp6MiFO9VJMt%SicWkQR(1d(k>h#=+`#:FIN[&
+%0C1IZgbT?khmX<4q$QK:o<cfu/SUmaD1(sG0N,?&"4pQ=_[&c$])nIB\EJ`BA*]j:-ckGaj[q:fJ+?'sY\se<hnE5`-BhL:WH^6u
+%61gO[VR]"/RK]="3l@"mWr0*+^:9N%7QG'24EMV[D"j`4gIuqoQdkQ;90^BCo#`i6PF'oP-)RN1Th!UE;,l8>.Sc"I?[f!+G[lu\
+%]!4JFA6%Z<G'oHE^\Jf32s,V6de!mbb2iUEN6QF7f)V4.heJRdfs^QtqHNL!ah&(,gN")$+;7K`>BX15%1&Ldi"Wor/9B,-bcK%I
+%0I3s^A'iBKX0dk)QK7$[:>DphP(9rUHd^=kq7IPP3=IGFZ0KSHcIj7g\*82R>k at GMRG*TKF7LH'<N^3:K(:C-MWt%T,eFo:"o%-_
+%/:U,6ae1I1;Y-YRd#6#P3,eL>!VlcAa^WV6$A<1j?>YBG\Rrt.S2cTZV'@lUacF++Xfe2o]T'Q=m>O;i&"t'_)$>`n\`4Z[OV%="
+%,f1,*%,[rl*qP#[#pjn,imW$lYZ-6r&lKui>CH\!jCjCD]R9:gXAMhT0#);g#q`W)(]/e`"P"hHaTE0PX]#K%o^ItP\%--YQGX3[
+%d<1)El9Ep0Z-nqjW\Y8i2V0_sP^utGLVfQ!ifUNG9D*4m%KK4`SsF2[_X'o:Y3u"ATU8].4_9>eqT!]h5"3eO%GN^qInc:$MYT1r
+%dltljHqj\/rHS8TY$'Z-I3V0S!aTI/D1d3.$^o'O6D=.LO)$7noNcM%'59VtK=9aD1j+)*"24^:iHjkd_7K at d/+Ul6\%JbHId`?^
+%63<kJXW6H5.f9o3HNXGRdK>3Lb3-d<2oS*Y^L[%C43tl.`+)j(cW9-NP"CMhJqrAY.5V>cYa&3fTQ'dl=BF?*p3hcr\Wdj]3)A_$
+%&:-l49>*o)1q3ERHk;:teF4B/DNuae-kc$,\&tqU4 at t8X#3NnPHUBI3)l$M9agH7H`/`J;*r at 2ILVWOURBDO&,6sN=:SP#&?S@'!
+%00q#^U>,(ATp@>K[(;9pG5W*YbJb at _-5`/<SJ\jge#Ot&fp#mLAoq:!SM_Si^7WN0a=SVP:$I@$PH84fHS.b;P-:!)k^iB%d2tj"
+%_O7:RLSi*sDK7-kf,G`fr;-K?>e at ch\fqZCk/Sl0\P+lB at OhC=O#-U:T+lOR?AQ`^H:sTIokePq53M_3=3q&O%f49pK:"1P[\J*,
+%;%qgoU)3u&@h:7!CbaZRr(9dJo6jNAk4tp&(hTo"YK0srPSK2X$"YG;0qrPZ`Oi6'WhWkRUiiou07F\KZ(LtCdOMeG*FRh19*]!Z
+%Ld:6_bq,9t<_`<n_WS%u_PQtJ01\':k<m\IdVAc<euep[*Y%/i,g=c>KeVs&m1\5Lpc;7iWi?V7.d,hD0*)M3BPS)S$<>7Y]6gn,
+%Dgl$X_KF!RDGsJBIk3&$T.R&/;F(H]pV?-#>C.Qh]s]@PZ\I\Yg(I.<OuW1^aZo)XkOb+2[\[Fm"!#HWeO>=@:S#CaIf.q\'W)Qa
+%RMuQX3;'8L"(9\a]pe.gAOt7:!W>e87?D%P[40d7TEP^'Q5;E$DE7eYDcW<`hj?hZW97P8qEBiKPOB'H2\rH>,(]Xu&XR'1:'lc0
+%H2RpNZY+2Bnm.K8]]Omk'G-me9P"3&k"0lE=]b5E+qh,>WA3#UlS$jNLDP>/niT`//s<me*bO>\A=rf!M"A7jEps/VllWau+2R7f
+%Lls/m.ca2]-+AH8,;6MoZ\01T!^RrqNKk#)Zqg;"2J4hV9S3PuOVE at aX/NYOfB9-%.-q*:9t([KndCa6)>=!*:^3-,\R0X14aS[4
+%mRa0UH=!!E8p2j`T,mMaL&^dI-r6t:-eY5X1i,UhcC7Ht9^W<kZAc4c095+u3 at E`r),(ZbHl?Qmb<L*cO3-reJ@&7G[m"mqVf=O<
+%?@M2n+#0FP#n'U`YN9r/jd\@D_gssHe/S:HofF`(6)U[pmC=QNjm/X;X=D[En4rRu$S5rt'KI.7dc!?kn/ctY+I`@ogq-rd4'd%d
+%]b)!#89MV+g88u at QcQA&Gd8@%G`;roYpi'a0Y+sN#W"A/@m]`W:esthAPdc$g#F&$e_BG>EtM#!Yp'4!@B'*IBp(nsMC%R--][!?
+%mR`e'J2WPB4uY6UFe=1)3k+o[q6NhIKCWEE"fpY=MD_g2_#MqOY-tULD1H"$d`V\c\a9n2/eDL9QRg4s]^=3,gG6kOf'9i$q;$KY
+%"j/'0C?MtFLC56JJIUhWZt]<n9!tR6U`?.DrJBF`^lTJQUO(_ZBo/GfcS?l>m.VmR^@Gg`_E.:comDo(\rH??\sM8DaqhF%\"5B=
+%A<8]gN$eJs'&F2,=aBVgaROKd1f%rY@@*'=I#oWerSc$MOLe$2Tk6r3geh'8?CJ\D6#QLg2op1A#XCS'^'Aa1E9;6?HGWK?XeIr/
+%Th*R>ZPhtjbi`\XC['le?*&2!62ie<5PI2&k[WO1=K!JXGgRJ.#^RLX6-t;9KU%4WAjYGN2Oi+#NdLli(MC.H9sNA?#Z;oa;31%k
+%g;%JcDB49'igI@*65fl4W@%uJ,K*]`B>eRZ(Kbj'J@"dD,nukai3uO=s)oYe%G(a5go6KgC_!B8Q8fYMIVX84*_fjXG]2 at +A3[%9
+%dGW84 at pH)-[i9jj>Ne1PbLDm%G7#ItlLZ9qVT*'jHp6#IO>lcBrh&Z4';[at;o`jJ/;cQgI[_b4'tZ,GZT24"$UJoI_NYY`*4_EC
+%2/R[u>cl5$A$B4dc(a\Wqke+1BT:CQ56H4)RId],^)F&J:P"!O*NN,'V&r+Y0RA"V#."kNiSBSCfG@^\f^JWt9ufC%P6KsH'`bkj
+%kQ!R#Vr3,@!.<Eh6!!gR$%t>4;e:6Z;M8;%E^^K'%>MJTLBQu+n_gt^*8"nNGo0[9RZ!Y'VJK<tN<*gP`s51_UngX85h&8oJcV<T
+%hlD0]BO"f\&n?DF$,,FCm;ofm!kMC'bDM?u4%MK8<$Y0+n.8nKlcrJ5Q?Z2/aX:NSRrp#o@()$83mtBIR?b$9'qNm0o:B31Y"hDW
+%nl-5PTD"j57VP'f^HIF8gb.gu"6jp1QGV8NX:0Cg+*/\IL8dXJo3ItRi161Z3k(_"]<6_KM?t;^($&/7`Hk'iRpi5*Y.n\HEtVTP
+%VFM?5pp0fiEle"RKm#KrY_#D at BQ4"B0WY+@$WAOW-Bf6>H.g!Ocf#7chQ.1a;04k/hNKMSGf.VAq]u"MdPl]a!5jHDL?V2OW7W<X
+%%%D;uW=(%Hd+cc=:Wc3H`/["epRfpm8m;u\/Yi\O!MndHJAI<'eTK]2eDO5?>(?A;a,clLRu$mb2C`Q87Y+J8<XtSUa40 at l0)L!V
+%LIGs9qt at +;nf%Af5*biM0,PnB at DDGX&j]G$kTt?IB8q0r3H4QWJWt;'!DL'OFc>@Xop?,V3cFgP/`oPlOWSGdSHqXD*([/r>q!6\
+%%&a9WDP?%!-Eu at -G4]QQrnMO(&JcIkEquV7j88i'C]RC':iH:9Y6Y'eA at nf'L!"^E!)=q84t?3=+,\\$Kd_U.1k-heV9N=:93K>D
+%1<BbCqVL1FGi%GX[J_)'NT.sB<XK,e9u-?ed,6rWpm4)39aMJk#o[\c<P2W#g^)JOH$[UFa+mIQV\tm]K6_IuN*T+9?T=HKj>Z2T
+%gr#WB((l^n_O><MWJ$$C at fVIrlPHKVD09ol-(h"3IL#ToUf!2oLUQhORDJ!=Y+M:3c0('2_^NGlD#)^8^2kciI("6qm_3t]09`\5
+%-:k,)8-p9s3a69l7#PkHlKP,4fE`baf[<(-<D*Tn7U/s,VsU7Yhl"6&UA8#K:3"SfJ_O+CqLZcVRQQN[PNq^2+d03r<*8YnltrV#
+%c#IL2\[n?9^ATZJ7QL<9L&4o:3sBmU+:0g..2dDQ4)3m-\3X&oA!!"X2tY;&T\0[nT'F&F\Ykkk#,?M3M6n`'m.Hu?rDn?\7$=O@
+%&R^k`]!32G`W'\(FqO1O9prZ7+g0cJU^lA6Ep6e(YmeW[MXO=5W7+!`*'UVpk,$eh>c,%[JoI:d7Nq./,e8'4m3lH?><hm3%-^7P
+%GH%XNCUt1F)Q0(NP%050IMisl)9N1XF9jG=%1a(D!TGMt(4OZ3B&VOh"TumTks?^h)U0]N^=N^F=1_[u<U/n\m]S=n+$M_uhQ)+H
+%Y'hDIIFEqmK1ueL[YL!s4TfKBntAn>^4VOt+qQt91o<mk7GpE+=_5Jp]SWBfbeH!#(\5J@:>7ELRp)EFK]&!2>k*q(:seSJ,h.E,
+%[N&V,QD!F3Pe=#$!Ubr;d4\^Y8S%;2?Nq&'mYk^"l7 at VE7UT*=-A%`(Y8o`C/8RKX$.^uK%E&E0h^PdCBkAO1PbQe<V,U&=_Kmt5
+%FrS"X4 at P#Ae8/aP#QJn)8OXc!K1THk-U[W0X.rA[qNT&M at of=NpA"Dlk-Ckeg4F%<n;Xsp65B0>n*)UZeO]XZSd12"5i(%,,K1er
+%mlH4afZ-QePWLY(]`^l!qRa`"FgBM?p,JTi$2'j:eG at DuHQcQJ^cH/q.u5M1Q7'"BqHl6id6URfcXBDuH3IGP_%b?DGrh'AYU%9T
+%V3LTT2UMVPaXAcnJrQqn at 7R*#=qX?sb)V")n[nA%\!%-.Ym;=BanqG=QE_.QO[Q8U6qUah[:[M*R'PjMnlh2h=X+_DRnHB1n"=)V
+%ehiNZ9Z1BSS%MsM9bc=p(r9hd`j"c,89G&O-S+ at 9d4\qu`1K!a-E$r01cT55JNdZbjS2g*N'N1enXD`!qQ(qj2N',AVApi*`s=/g
+%Ys5f9[N1ZuJe]iUd[,F:nK[.G+KVE09YqU09_m1;Q4E>n;qES+ at Ue%X$.*"@n3.$MRtE>!,t%25?<QPFG[H*gAdXU,(tnAunHJ^N
+%$FK_t+[bB#&F'[qg>6PYX(.;rXs='bW,T4A(**!dW%l18GoO82W1O;mP+*P8g#QIcC1V*?osr[bXn at CiTkc74\"Hm6i4+m]AWhE$
+%n(^,c*?[hB+)\i7p&YJ>$4^58H;er6`?G$;,X-r/p0/U3UA<.A,D1e&1A.Ns%^\uuC[3ba0A>g8>mmQIqV,;6%o4n,@*st$\og,G
+%=Gc4a:6Tf1']":h0(H3g)CC`nj-O/M:*+d>b3D:+rf5"4[%?3&-1G=BmUVt(XHL;7_1"7u6Jj^L-romsQNWop]Pe9hriQIQZ_'b%
+%IA)X_'=Vt)UV3*4NN"N^FTOGEY]!\KbKW:i3M&O8R,$TNVt^!%i3oY1e]L06'gb?=CfBlt,dro7XHu8uD?OMtnQGM,QcucD307HD
+%!/T>T$C6T*F_WpKBoehVqpg#Op;:$OBH06Drpo!mN9NJ,`U+K(Em=%d"I/+JYJkaqS3;#3049YLO@,X>Dq'pWVU1&L\!L\d\@bJ?
+%c;(FK_dnSaCG',bB/3,#90'8j55mc[i7jZ)JYu[+A1<QK9*RKJ`#%u[.!UU:8LmWr0cODDH*":A!u%P1qHbV,Mf`.o(S7+$XPNf)
+%g3^JR>*glrn:Ib[-NPHl=uZrccdV?<oh..E4nJF$q5i\deE8->Yn2gRIS!nW(+;4U=bEa]e?`G9X'cR+ at sr49;@37[;TYFPY2i(d
+%kt#Qe?q at r-hlS-=#N at f=dO>s,nKf7\UnhUNB(INs3T00l'Ho(tj7l.[Ie2BolVt>!CsF-mFZ=)_QM4s#Qn4WrA7fcjAlnfdSU)Co
+%Z*Q]*..9]rO-3/m<O)SubR)D/J+BQ4Wcu=;aO8l;rg(,LnfVnD96T^P#P/q$`-M!ZrB9Bn-,$4\Re*Yo3tk.sR(e_\cWj,p$uT\%
+%;t[B.A.t6Dc-2)*DfGYMpD<^%.k(^9S_FQ%_7E at 4>fX-)`S.2W6blc08U4o7aT#?c::e&=nkoGXA#tTmYte--8S7#!Q%8'`&#S>D
+%@.BP_!^flmRRMULI.X1qKt3ZM?MZlY<7\<XU>rMg59 at hl62+W/qJCFg=g"@KRR!8:-h6pc3l^D%qEqf at eRX/@Rn%l&h@`iB<i7M'
+%B4Ihr<WPjclNKR=gt\ut0!%mOf8VAKJJmcBcBg$<`L[Z8i=U*q8N&^3bi at b5VNI(RCe]2^<LAu'B:aNmUs/8(oMht_C'bC@#C5`i
+%#SK=K$B>h5V"%c_PZ2^$79;E"+)fePa_.E*rn9QLW+;K)GX&5n/AYqpSTensFl*=n%:YC:9ML9m5sPCo`J2f]E'PCD_SOr_&;R9@
+%9kqcjV.NRW`-ts4[XJ,#dXt&EKe".X4PZ30Gg0kMm,F3!9<,dT4UfL9S35%mL`Gd%1i'Na?clT95m(ATGs6!"dua=e(g$TKWF/iC
+%86u%;MMRqB`.>_a0DQH">;[:Yo$0'1=HZP`O"@]-4b=[,">!Gr\ia=tF:0)"kbD'?!9rA at eZ./-(Fsu6CGX!a+9.ptR:V7kRD\B=
+%mh^)/\+Z$Ih6^W]2VIo;Fo(h-?J"g.-WuT`o&?C8B?qIVDi9=WIlnVt$/B-,pgb]@Q5"1.h-We/_GT<_3f+.s"S@[7VSCnt1#IP,
+%B(,.3F.>9 at +I[X^atZTZ+E06Zpjh*WVpBR-YF=E1faR(Uk>`POjY7>nBZctW8R]3&+BtdpD4$mtSX!qCNOk at T(U\C"7NK9s[-[.2
+%H$V@=(5';0&tWa)!,p[L-,W#/&D<7:s$8LTJMu-KUNU_G'K_EEIsHkup;1H,1.Nf[AUHMseB-'_TiB5!HY#g?db$k(;Cf0\IEA9<
+%]UI.tpI`<3G54)':NF(>Z'KI:7BbsL8K$r:'l;Iah;4[/;L$t!qG.%7-1!2Y!a at 9\PuOLg'\bP at fl]<@N,JX=]J='ILM(If08QLj
+%bYNZ)<$,'E;Kb21_Eu$cV_IY<Hu^GQ;#ToT6_[2)b)b:#@h./sl`NY7Pp[+N,lYlZn2c&3b1VD%?#]%">iLD50E"9 at d004eUn^Y6
+%FuRgS8FTRF+5M*TWIGQnY)K6Wq)aGNH!$T=a7S;"GQ+B^gj/6ManbQDE],mLk<!U=d$0,V"V1H)T!2bOT.q)qaf!<LL7>%'nlM]-
+%'K?uEd=8H$=FQLa%-!BqD)j7;jK(jRK]S*CE]5E5-Rg4Vc`J+3?+RYXGi\%.oPD_B?[JmW+1&SD at f8L*,gXMf$C#"*D[g/2b0?3l
+%_)fu$AH'HMnAY4q0a:0$@#1/m'*+NU/g]%8'A at a\qDcq'Sk*-.);[QVnju])>1?sae+)-/fFSl<.9.!Fb/Hb(pob!'l]7EZME3k&
+%3b+-Enl:b81S#dS#C%6TFrFriIAsHR<,74IqAPGA,igt-gVM at GR)]a+9"M$iGg at Kmp=Ut/%H;CaCN\[([cD-[c2d/j4TI2P3&[GX
+%%kVdCc at r((;%DE_KP_di8R5GJ5p,g&3E883!U!B[iq0QUJL&^1A?#%NN$*0YJn9#O?fFX$c>TDa]pV!,,?g(ijOo23Yj7%;;Z.jJ
+%FeEsAXt\'F';<YbVE at mo:>5+\mj4Tp*.M:"S_G4-7TKUh^f<9_8V%6rdSa\tOL'$m9eL6Jh>d2!r$c at LfuFtT71YFijtJ6LVflG4
+%Pp/NVD;;d7<rK?&92m3i1d8).k at L\@0d?)./oo7gj=j[;[J-JWR[[@Fa2$*dG"lP<TUl[([G\2C;512_E_qJmr>G,O^6.^':EV-M
+%CPA8)kggjje-iaSblQ#;4YYf`MHiiHhd'/p&%$2mNabfK_]Au.NH at 8sqK4S'3qD0>()Ig)=s$jrF5$'NPSNP$hYFZ-$E!qam._n6
+%DV`l/+gS3H<+!ERGk40M:UPp%d)ii>(=ObrgjdhMl!Kk]d\5G(*lUjA3iOZ#5".8bjs+]<:+^jYo<sZa/p:EV.cn*r9mrrgk[hb:
+%n_?gf+&")KaVIe_]:MNf,t/JJ`cG?f09G@/F,j9f![;1fYE1. at ds6gG3U)<ZX%PI5,H6NA9;;9T8(4r8I=:u\cFHM+f;k5R/4lM)
+%YD"5sTSn9[`^f<,5:?iU"9>/o.kRRJlFfkUo6cq`f%l(4/a,'jofB??M,Y7&`^HF#75)$35flUJ5-6%D"NR+XQ1)h70K%/oLdi*t
+%N at tg_m*4qu'kS'A]ViIr>%MH2C3lO&4JspX>^^1^;'5#>>)>B^)lajjT0,e)Y"hf.oXE&dan(tGgs8!I.%Ve$qi_h0qG*7FB/jcN
+%KJZ%PBaSDI8GFefH9cp".N@'6JA^<-!9$o8\S.tboAD1r>BN9bGi at 6/lUGdar:AM<E`5km1>%#,CH$$2JIa=D,X>aV$4j9q+Bk"b
+%#Xe.fZ=;gb?24:NfC.c_$albY*aGB%PmmF_!JK&M^p;aS7YS3N$a?mF[&7<H#R4R[-on3oR(P)4e<J>3TA at n5dB"@P=?l"Z]]cU:
+%;ejUp_',co4t9dgC2LW;bG%SB4BN0`4N9K08MK92lmm902K$XBG7O1XbJ<dS/=B[:(D=KpA+J5Ca3+'=q)JTYTRVB#r:<lonu=>i
+%7W;T^jWK0)G(aQ33X.ps?AcKgq0Sf,T*#sQm,"#r:R*+a_MU<]SO.g$cM7!#H[Zb<;?@HjUn"TYasUWf5e_U[7F%1N5SiVOh)^-)
+%cJ%),&d+pS(qj_8-SlHPjJXQ-JpX%^T!?u at s2L;?1sS4fR1j$g.`Tf)jaMc"K\0Ug,?*LKg0)_mL:1b7+E.jT,?]YYEH:lp'W;7;
+%,XDY>UgE+"+H#>:- at S/q at cEpeBeIN3M4%#`b]VPAIrIo@*Idg\pIUD,1nVXfSHC_'S'QkJ at rZ$O,NgMSfu_1q+=E_+.P7jac<7*2
+%#,Cu!<iC)sVO(A$;^te[IGLte"mmO-N)Tm;.[GW0F&cC/8NphSEG-s:_4gp9.-E.\s&kgu<ql0;Pg=MtND3 at GDUo],Jm:H`p*qn*
+%K,EtaN12Mc7W<r`T$!fk0K\7NrgW0e4m;c1rTsCE$+QQ$'mkU32pZ6se)[FV7?\P/j7!^MK<sEe/Z*)%`LR2&AS7R"K)W+2Z'/1:
+%=<5j7qfX5I]38r2f95^#2;'_[pJ4]&[d_UrC]Xo`\ro+g`(OiWQiCG"EmJ)c+h14d+.]C$FiL#"MI7o;hi>lW:>T(mjig"i:*1Xb
+%eKUIlkhf$<BQgYHg2d$XQGIbJmkZiV;02U))Oo^5eBHM$WMH1#[J0iEmeos4.9%!2pW(eST)8MPi*h-h4%DJU'&?l-X;1_a3\=l1
+%QSPni7rIslXB".Ii6P=i/icC!@+.`l"'SKt]L`Aj;Kr+XhR_Dd+/Bet/e2nX,e=r&=M.3Dd_"o at ACe]+cDNW^m^E<ih-.\s.iW%f
+%-M0,nXjdh9DL%i8(jS;HI\J_$R=u+.6Zp4GEn(7 at bBp]dYggI#^6Fb`a'/.2./43aalQ7AO%tfEpq[FYA=Vi$O2kP\R(V1&7^0nJ
+%)O$Y]0[%e-Sm8DHcaus2Cu*1GEY3a]$ae(43k0dN;c81'*Qs$3).PI\);k)-W8"1"Q#+Hl]G/<%rQplWjVXe>-Oo0rGcn%5m2N-S
+%4=`"hJ4P?fr2QES:<d`ja.8)g#ls$KS3V.!=))DMWjrg*1uKI1.\s=6P9k?D1'n"P+=&S\RBXb%$TUGVaYUFGap);#"l8[EKsCh%
+%:*q+[`)AY1-!G^R#P at djq%rM!rIXTB#j1jLdn](4R,L1uU27Sc/:Sr:F*Yu&a;8QQY.(8+`F at q1QZ]brS0't_%OK"/>>KhJ:I<t@
+%jC1F1?ZQ*%eOhT/13uu\2sXhMpcr%=pTku+IDchdq%+4T-&h#.C"<JlS7ccGbA"qtR]G.<V)!IiIkJc@,A\ne#rrQsZoILWW;r&j
+%+BJ$=/nT2(!=*-*c`-,Bbrr&*YnDqV_ENFh'ZEaD_#t'`47XM\C.pTH;AqW!*Sojib)G$']u;otR:k27'$)37f\Yk"7p#30n)8el
+%51h.2n`Mg#Dn]'Pr%rLG>4Udmf at 0"WE_\AH:<u*-*tq6gg4GS#>GnuYNdRXmCa7>m]'N-[CGGb/HO,Y6kYFMBT?4K%RhYLfj&ss_
+%R0)Gbh_Foi%`&%B[U/7pRZQ+pZ-64oWP`L*Q]<%AhYU$<G`CMY\NG=\6V]4"3qp7Imkkbk89TI'P`AD`0[I#R4c)YEkW#M4Vu)u>
+%,^.jS]+%MsE<DbriTMfBcJtLsNB[:&*sWTEWE?>iTfo+ at Stba[PACg?^180,E"I"(Fj3J1L,;O.lm\g+!"5qq$<!iT\=R>;IS-N.
+%Kt2OtWaIfI_.^93b!t6Qo*]^E<>a`P,cU&`c2$]IUR>5I$J%88)"K!64m0cbC.Jkr:[aKq$hjUQ8KO7?i7B66VW^k6HTfEM%30nE
+%:BqCNDuIU3@@,a#J_A[R8L1AAZ6p.3EWod;BbclWB?EJ"#eAkOTl7eg'OudjDN/+B7li4^_Yn3If+ff%6o+74W8'N=auHQd-3po<
+%`+7Rg_*jV-H_Dn$bpd0)9_loK#.0t8iW(='e&$KVrm;,R*s-S#^@=cnrNp<.?[8?ZZrLFI#/3RuSV#g+pRNPsc at -\e\>L,hJHu?h
+%)_-'''48l!$64f^@D.6C:gc_BgO>U"#0Jf-J,;hCTdQ/4LC?)s3(=*/]P%&nqTGG_kh`[<Nm7C$\QS4->lU:-,AY!jS>gn\..5Rn
+%;^/'&I^!9768q2b_;V`=0;sq1]K6WY#8sS/Dot?O5R^Fll;l;q,F at qnhZTk>gubHfB[")h3R00#/AtCcDceRcH#KTMFYuMFf$&/U
+%G+42;94526))D2UC5Qkr*USI"9b,M!"3L!KS7(Z,s)]0#K_,$JJ)/&seOl>AdJ_IEh&1T'->7s3GoRYn]c,L>0EcZ6EZIpFI8ub7
+%41D4%//L.sP;q8d4V.2;^O3D(985R]5:,\;%o4*(h=@M(c]p^(!-!!baH&BSkp=;Y)FDWj%G4@:T?s([%J)/;S#;[X<&C.]YO.b3
+%7e^Tj'QY([55+HUTK$p]&B2-0+*'Rm`C9]5:i8:j"Q!-pHd'Vd[7d3\@qFdiidT,(nk*p1fi4cMHHAcd'[@CnJK**=Xuik[m&p0<
+%r?^Xg4FFug2)PqbJF,1]hC=iq:bp.CqtaeG0o'$=!IGd!Y.Wq[oUc`t at F@A451.#9SiUGqL:^!T.eWi-6l[:EY^Csr;u2q8=fIF6
+%NK&5?M?ELgT\"g3Dp++ at EAi!IqjB[Ad[$j*:0M)_H at T*@j$a$!ZYIDN]UIBJSka_B5g,XAEiS[I)s\BUfr4sj3j&,"nHLiYWpo;r
+%/-#00Ei2Z9V>q5::$[<R4m+]J8sd8!/lT<JIdXRriPU6N7_#M)!6P0@#PGT+BS]Zi4-D*eH'6cIRoC8XdMe*kUl+&dBc#:jh>'.d
+%$uJ_ipr[oZ,$h`"*1m7R.eBRRIs*oN\l`\M43!QHabHh6=*uQu\e><#F)[Y\QZ;U8c$($7cqVToG?hIeqrgW6J)i/`o?+5"3ZjU9
+%a;$;NVXk#7DX["]5!.S`+i;iCqCqkk>=W<(F6h].;q",Z>6ZB.&M1dmWgACW9jCu2^35g/qj4KND!2Tu^iIhBp71uKerCM$8\'s[
+%]W"EoeqB"\rVBJ(9D6"6S_96!4EK*(hY,*:FU#FcBM*1gQ"?L+Q#<XWAPJppF1)H<cRrLMRT at F1\WP?;8A2qXktO9C\aTbH#0&#?
+%:;S!=W4B&QXFJI)H,:$bOCQ+^fm1Kfh7%9BZE)\W%bFe2pqKm.''6]@5:dK5m5\<C"B&'$\X#aWk*M-8'*@`=G22L*]4BtM@!/FW
+%YTM'?>0h</&rr/GMKRp6;C?MS7XXX7haDui07fnk)b^n:P at .->Ng`;Og+\?r<[qJAAm8'c>0!\:%.Eug/\`tEGU4Ah-("``M:Sh:
+%4uY3dJ@)@(`TlB!UjR3b%r[D_Kf33<GurT<;c+<:\UN at d)!cJsPd0Z$*]M]R-*ed:ClCf%ckp!##oVB?3cJPRYiF4tHVG/TV!gR5
+%M^[V#7H1Q at Z!.T/E_-+rps9dr^9O$t+T$+LdK(dW9!k]1,(smDo"O4Z5"HTkeR"_SoWjNCeD"5<jGjCf"n8<!XnhE5C*-fdV4$tJ
+%,q/ikP4[2=,\Q30fJgoHcS*1"pj&35%c<GES%k/Er3\%R+#s/(?Cu/MSTN_um4fq[f$$(>CUAMIU.Mhj9[h7=#:e&P at BK&Hh5u8u
+%B3hU),;n1oWsB),N,fG-AD)_]^<gkC#PX"<c1V/#2?i??Ujg+\JYtFSQ&F%p7Dfi=O%Bl$s&;bVW>NdCZ6?#0PQu$^RfBrG7Gb(>
+%?E,aApZ5/I`+GX)4D:17gsarqDJKm=?-W')j>7r,O,CGr$N#r&25n"I%+h8Zd`Dr,.5L*jM2!@Rp.si)8Z04ROaiJraR_H5]N8ni
+%'WO*gG!VoaX;WYcFB%X at Z4'R4A*"]ZKZD<b<^bA<7F.SIL+:]K(QDb'0`",TRb at 4=PuHp=OY at 5ko9"23$d7"_i4n0jmi1Q-5DR at E
+%eVD]?]\#X3X2"@pO$/VT!/)*?C8CXLdi2I]M(),"a)))S\2A37-/P57iUFN_,G(+aC'"2cQl#triNjmD1`mu3bKe')$_ACBIoEoG
+%#[`EZA?<iEd2mkF='I+LkNuJC%t%Q+14MAGMCXKE=%4hdT-e5$&37j at b&P+.qWrqeYfhuPUR=5n!cI,RRbQBM%:q]3 at qpF:i<qZ[
+%e.SfVMhXbA&<dK`1\M015qt2-3I9fq:'h>d<7R'p00/he8NN2^rEI_MN-%!@e at oB)j1.01/<20Hjc0ub`S/Q[-;LfE'h?)?YI62&
+%Y;8^5J[:];pg`eQR].a.k%.0U'DY=f:;XIaEXtn_XXE;e]BNbYVUt9VNSds'IhIAd!upTERt#^U9.K8!@(@e\\Sf"%7rm<r>fXFd
+%T3ElR2cRr>Pk$tnH_:f0e'7!ZUsE":JXN^<e64]W40b[*X2=!W^TTb9L8T;Lq62Em%&GhYWB3escCK9%&:#GniX<l,4C7_,f7[)6
+%2Fnb<aen9i^<W$SEl7IPN.hQZI"MLNapN&51)cDMgLmcX&QjPL,f`SL`nUSVEF1__I/J(GW?1b$)9QmQ#V9j9'>,6"+-jGORF%u+
+%_r>M__)I0&DnGBEnkuW*1(1M9Kt+SaXD&o\U2?m"qToeZeki9".tU3f9N9ZhBcU4G4e>`<,l:O.nHl"h\YH,KZY^(sS)pc;8'(O$
+%LXLhbMhc!75tQ?jmIq42?C%Q=)7W\0b]4fAfC_=FrRF.Kbn)&<E[pm7dOq&`O:7%e.2kk8&O%dLUH at SY/.t>8\kSD8Y[88Mjq4^2
+%Ya at K5f&[7)]UD514)bF[]jQ]Pl_3!p at s/)pHC at EbQj<q/s#Gd,aW`*==R".9S*#-Q*T]c)!8!54=eu:f)Lj><@((\21qUhk;t_6H
+%Rl`RH\Vb?r[.i6C:VI6Db.hZdI/BO;/V3R;KTB<uoqKDOB*L%8DkS\*g0bcUM>e4?0f.],3i)KIN5 at 6RdaC]n9hDV)]([:*#OWN;
+%:/4[NGnp-b<\G_6GA86nXpls>E.:POZMa$BQ=qC9b,Tj]</J#f].5FQ3EG^u8Z(54dta7 at 8rIc(WK@@SY/EBlIt*)(Mf!Qq*/*4K
+%h@@M<2\^9Z+'M*N"PqqOl-'cu7VRJ8!G>0B]iO8\0gD1oj5aq8gZ$qmrq,._lW<^k&l<iRh59g7;K,L^4ULUWYf at V`MoV.K5-aoq
+%S:FmuYp at m;RHKd/m1B)aVM13=*q5OeGEM6j"<_Y_K=:=h"6[/XB.p.6_F`,J9Q':ehUMa0YiqTT#^Qq=FI8.)nmh:*C7^k%GaW6+
+%;gFeSS$Fak3H(=m"FH#]a!tH/2gFYZl3i/ZPcs[\no'-V'BW6gM/9335jUUdP`_9e[:afWRYQ7Zh]^g[]F6!V'mNBKi+O%uQhQkG
+%\$&^bSf$'`kn<Tjq=kDUH#(,o:Z7MpThuRfC3qd7WO(p6=&2XqIu/p#)k;HXRg_S5#(1g>c.s/D[)\';K;q5KOi-3"\loS235K(;
+%g</>.&+**eOjD=?Gfc:iI/\ps]K$SG^ZEt]C0L0ffg1oqbp8;>WIi!Ukr3$hmFP;qH.IgagJ55+3GesH&S]o$Ctd<@['a!43f@$:
+%2bM;DBX#E at Mdn7+0$^+!*T\*<*,ZMSCF&Lu/]3!ThY$*V"kYfthq(ptgX36@<@kMIU^MRlag80mZUVBW6+"V:;uTm<q=rsGepe$)
+%e?dQI?1+,lPJ$c_q^8*#0"d6sDtCkim4q2sI&d`I&H"i0c8TtrZDG4D03*>3P6p)+hX<j1fG<8!Os\?u=F9B-ZOa'9Q>BUiR!Aq-
+%1=ZW4-P3AYClg1LMSK"'0<o]ZEOg-_f"Cdq8dsuchUp!RE`-eKYlu.1oj@]N8Mcr&?V`3>_3Mrc#:0rH6Z"*[mO$j5`lLRhZYm[$
+%8qkO)Fk@'W,[R1,(&Mn6"1\s<4gf9,9R,]pN%g\*G??.OmjAsm:@*2%=<"RIC$hCS=l+,S%0Oe<So6B!Wb39IS&*`JX_gRAH'frA
+%2ZAm$nh)gY1nX16<C7oA;KlFXpHDD3F"'aN3a.BXi;\6WR]^^=9(5B at E^I<XK:c#/(A(Zpi(4OP>F8u>K?-c)1[jL7+rh51nMXu4
+%.Wo"TcU4O^DfTpKCNlD.W'"C4Org$SQ4g[R>Y'Oo-O'-gC8%=5b:>"p9kDE,KgB)r]8AYAnmM4D9+G`):r-Jnb4"Q&okaEd#8VCD
+%*0250el`^k\XX(n$cOJ7iQ4WIV+d8%Y2D)Ve"7b:$:94`om+kq^kTRC,*FL6aToY41Eji/IL;qiIu)i;%Y84I'c.fAUN+2IAjeL<
+%//j!GcPsLj4Br at c)B at s^6og5?_^bAW;Kr>9dj%\VD5g?PFnQ!s`=DDh>1.g+Cu%r)iqOOQSPrSB$ZDKs>ZGX;do.2>[L&X%2$5Dl
+%$m+_<Y^?fgIAaK90_+/k04d'+F'k+kS(7hBX5qu(oQVb^g0ir5O`)o%)Y4a6TDP@[T=^[jHWhalM3B;<5R-I(VTB'A*fCmPH102&
+%!)ANk\fKM?!rA8s9(YSUDkpd6k<(rgQkW:%nEBg')=dQ=rB9AX_Qs^[Bt_*e`CcX0+Iae1:)QbQ;Va>e!Ke"/cMjkObTh6T5YS\o
+%jlGc"_`OtBY:6sVgD7<oc^l:;kA-QaZ%1&bd.#f]9NO'[c\<N^hj)+,k/ue2(oaW,#P^.&iRS^9GsWi^)h.=Qm3MD-LKdH63+9!U
+%=*iLLNL&XJS\tZ;'S=.r\\$[JC&]WgdJ4I1L at +B&'pcnM=n&+_>#Ni*Fh.8`msJ1[F=XU<`PQaFA]6n92'THO]3*kcg at TM=4C[me
+%CS;b4r>=+J0K2m>4d0G9UNq;Jqjid9_;OcL`A58>h^\f#e.IZC5]+WH8_uI^`nK&h\H!H)\>%;'e^/V<4a6&T*1W:7U7P=3GFlT+
+%26[VBF_iW%]Ct>&TXc?++)f!h8-7TVjRN9h9#a at oM75sk&T?)[BmrC&`Q"p\["e252^eI_cgqE7.eAjHd[Y6j)LmW]7,ELT*ir"'
+%22+mjob()sFk/L0BV1h-,Kd8'(H#)=Q41068_g\$`LCeFh,<nSNFqmga7AJ)[+U8Do$62F-2'9GPAScU#u/CSFI:;7qBj/0&,a+g
+%J.oe9Y#on?rGeTq6up)@Rf`OG=g:1nK]K3\r)>a8/;f\<KFCedY`c2&Ydali?29hZ>=sr=V;*>668la4S?rg-_KpTimn*+$09"*J
+%cHl<ggt8uQ&#>"u^U7jKUka?^EEH7LfUbA(d&Z&_(T0,lno<U^R at mVrC%iRZ;QY\gZ^==?rcS:b<oKSfl2$Z"fpB6R\b9gQ8ns[Q
+%bTs9$o&eT)h0J?W_WK#8gNE]5f=DX?`o4j?cH1B7m&]M0'7;c6%4f*mWR(D8O*S9H&P99*dRltL/53Ue'3NNZT4bdua!E6[XfGFd
+%cS9\s*7bPeWLFI@=tXm0LElsP%=8uhZRO"q/EJQ[XtAH//0Gual";`a$7&iRl<n at hT^lG6cD#.j@$Tr?TCks-O<gtk]a]Zas+ at +=
+%8q`Fq02(g*NGE;,jf0b_!jdq>iHV0b=/r+422OjU1>1S)fD(#]eZseh;AF#-KiC*t?K^n=<6;i*_U@\GNgRFH28`='1>U5GJi@\R
+%ZBaZD9?VRmk#:'&dn'NY^@&@];[bhuLhpA2Q?0bpmBq/pS-F-c]G(+5`C3S:,qe$-<"1#eb;f7OGY`[M+$DpE?cerI8JJGd):KKI
+%^gbu=S)0(\6KcMra_h1Q;/k/9]T,5@'ogF-+)nhL;f\]q2ePkK2ooRj&%iRe=hhk?/keVB[&ZIU^9AT/q1t[i-3qh at lGHSe3d\S:
+%H(O]P1W`d)N"J)6fN2`Bi3C48#(1jrIedp*o-],P-'@d7"#okNBmDXq:[h8fg&#be?V-XiP+;lDr.7fV#;c![2^Et5ME]+FVGs'e
+%[TnrBiO7+4.Z at hN=&U"J[*MaLEE>t:hnA2-ObF8ZiRYUSHWgWO`!8A at E8oQ7A-5Q9bpQ7c3q"iAR4?[[7V-/Qms82"A*g\cj)AH=
+%i6YA;AITEVGQfY\mb<%]5r?:QH7l\'\j?Lo\M)/[7O9nIBTYH"D5\"?h-)-#1[D*-7!nO'pb4+/a!"e01&U?2"d16-[0m(RC3R8+
+%Km,slX@`(Sfmn?a1>^]Vj6NSbVhn1>gdl`6Br]dsZ!L?l+=NCCGRWDE)t"R?GY3_+1so2s*2udgMF.Cb]8a.Ck:^&+9R[Mnrt29$
+%HO0H)BZ^hn[Q/=IK\2&g&abK:iG)s.p+toIk;q>j\Bnke;dTK+]!DO]F^8(As"PG8[Mf[smJM`9=N\5Dh<+'0Po4"',Y3O&]?0+%
+%\8Z8FK9I*/!e"^_8*2=I-c$RDnca<$,kj>[/ZG_K']&JBP%QL*^'B7^ISi6oZs*pg.a=MDF&=E]ZLQ+qI^`!gDm#<?`0OS#TqHOW
+%#p9B5Dot+0QUFu53GT4JqiQTJYHl(A,jb6;pjJ;9mJKia1NH[,](dTT6pZ(;3G5,8EY\!k_o1bMf5tD&&0Y^D\spsk5W@]PjC-b!
+%]F%n9kf?&)jC$@22_o4iIT7h(K'r21FE$k@%CIqP*hI-Bq.UXFk?PBb-cEH7EG3uf#9 at T.o9AeKo%=qP9?tpt''*,65X_F#Vkmlr
+%]oOU+-6KLg5,X6jo,_]hfP-qh<f>\#)fis<+?IQU%RM=6'Mg'.kNO=8J%J?h\oqCAK;=cb7Xud?I[u4JbM6RbPfC-Fhi`"]>6KX8
+%#0XJG9Cn[,`ORirhm8codj")4;hFs+9$8&>=u<<scT[WDpD<`T'hC:?W:s!Pq)5`tO^TR^H9'&b^\jVOWX2 at rD\g!hEsg68F<RD+
+%m7qIf3%NZTR0)*j7`au+j"W_/RfGN#oRb`nSLLphZG3pjD-LV%3&bd at 8D3Xcp>$:aPi[hS4hC#s)-De:ClfLfXTp^F4/#!K7HKF2
+%nnCF\BUFFE'>b]il#(q_mVRB+0AHr;-57ha'I?cX!fX_,6jb-4?@D]&aW#B/GJ>6_UQ:tl5H$9s8/TuU'1a]ERCuY7ZKoV4#Wa8.
+%VF/S;"2?D+jBN.]lMi:H;UJgh^BYR\DjIS-H5SXHAa2[U$"cTgo3TW_(rYUa'<j#8ok.3)[NW]\=W)-!jDJ$cQBTP-ma&V7CZ?*D
+%_qr=fD6Y*I4sIBM9C.Ab3/WfSqqqBt!gRBnr<in?hI041/`^:6fa8&faiVm/FdAO;$Rb&*HD^o-!qqg:N[$tc$A+8CfpuZC>,:Db
+%,1/J+?(5jrjpGamN81c?<h#ERP=2YGX1p)R#0jGo?+QX!Zj:7YPoK0kF_Up3=m;/VgW at G:^PKM8eo6("Qh5EmHArk^P>p<rcTh;i
+%Nu]G;C6Gi%aiaor95WGT>An:3%)k0ia]+o\.]<VVE&-s$g at PE$#Jd!06.<:4>bSgK+7lp/RDes)guBF<'ET'p(h'h7qht6)ePnM!
+%"Q&W5TB#('e:P',Bp"a\-PCNbU--J3XmU=lA5AV4OiJ>"c\Eek!bA?#Lg-`O\A.SA3U8g%@:/uoBJDI%(AOn32B)@qQY4#^8.g9"
+%.Jd0PEmPp1Z*G<E)=o!hh"L*Wr"iP<2*[LXC677rD]Rr-BGm(lcT)F`@Z3&0'T^i<%i-qGocUKY/;9s:c9f9cck7b at 5ak_JSZ,U2
+%W>X#kbG?dP20hq/GH.#bX=FmRkucInamRmbm_=FRHSS16I<6.'fAp*",RrQ@>n06=7"n^eSsXMkS`H'c]YiVqh(52gYU<fQ9*`c\
+%QCKc--0WgpSof4/_SO<12_*'*jAP\,D9`=I88tuc3fAF]`?n(2#Wnd!BZa>n2iKRjS>LcL+-\..3s]tsgI_0>5[Q:k@[F6#['?kl
+%=!:odbR(gbG%cLUXtT]m0$U#!V`%Ncq:g(7Q'#Rf+Qm1Kh?WS[j3.s).fOJkfl_+\8QsbN.-+DY2D!-pqLKo7:he6CGLK at Tp<P!0
+%GV0Ldoa\Q\U!]7"T!*"\78T<JE1?H"(*UaZ2q-:&MXU3]7+JpqKeb1)F.9<=4b,=Yl6':CS at SmoI.YT>VWd1"BGd`5S>:&C?rb2.
+%hPGV+Bp8[:q4e4C2&Vuh'fhf6_jbj8BOMJ+^&p=fdnkY,D#N$H>WM[d1Ei(6Bifn-]6>4TWI%TSAAId7QFsn=l&.)O0rKDU!3U&*
+%AP\DVgH^QO7jSF3.sLD+g&9V<M_2=qPKmn>"9n'"SO2SL)qL"elb"p>Q(bO\RbJHM=)h!o at GUq@W)Va;ZAk/X]<M?3**fGf,@^,-
+%Y22b"6s;2%BG/g_[usj6cfKaR7J-RVp)Wh1)5YlpD`n)ocCIDJ9C>B[6XQ'J,'ThBd.^1-bnctE^R_U7;]td7N!kJp5XTut5#b:>
+%`Mf'?HK)Vt+c6CAIbL2 at ap$tQFg3gTcIobM8^Vq7-=;sE%JOdi%"ha\b)tk109[4TG;pf'o)sLQTrCVIihg3bQZ0YpWS].bV&#Tl
+%(edY&k9dk>V at 1^,(g"`<`TG_rOR+gnVm(RKVU>H]TJt2_"i5J.kFKQ?WbITj4SRBH"k at 2N*NipG!+=Tj]`L;VZl[EG(RER_o4cZ&
+%B>)cs*Z*m5<)it-5<5$9@\4Y#P6=C`j"meZM5]r"ff=5L6!p(_de^a+7)YcEG_pfY`TU^ZR9dn8XZ",=.I?qm=n/_3a\N;tQ"@i,
+%[51YZDY_iK4&aPLBb1j!$"k<sk98q^^2jUV#V`'[IHsbkYYtK-ki!S,j.ET>8\p\mn<)&!0DIj40KJru/0P'+e\C"CLi`-SZDFn+
+%^r*Cka?<*-Agi(n6e26fPKA at C*6i]N'0,A5EsTo#VkKgmq';iu&X`%rp3<+)aAnM_Z.=RQ)JT9T)eXo'^3Q9ib%3;9NYKa0i'RN*
+%`E<@nm!BV!-0Cl2W5<USIBpK7r+[O$^2o1oe0mkA(?64\$Y&Z%:gCMB-HbXHHqeWr\o7s%D599"7-6+Tc at tkXO>VRJLSNp"2VO]q
+%rC=FG[iiLfe8C!sdlF]"ZNZhjQ9_XCf\!`W at jh!@.`c/nBh(.X]S>-2mJ]kP5_?HCc(k4TZ<NJ8ciT.\]RDJP5*rS\4`*-FrHuK@
+%B%8c3s2n,B"-V&';5e6!;Oj:]elk*HaZN`oJ0_2;XX5Uh&.hVXI!_N1EZBr7:F00<6mLee/m;Rsd]AO+C"NK*_Y@\f_n+!4'%L at 0
+%'RQg?"?GX""bd1n*BkgCS:d"bSU07=EQLi"c=9>se:Se>0=45iTg;+OG9j at 5DUGm^Z,Q.ENK2Xf/3[Ci]b8Xl.iBipbnm#$-#QC1
+%(<rGG5ca^EpsjI\8s"u$rfo:%%p at HI/(*Cq=.Oq23r:Gn_f]_')Omo<g?hhcT%6dq*),TeVCRL`V;[Upo'KBNrm[lA]\/YMZpmoK
+%oAIb8e"pr^^BDQo53$J*jq?@N2eW-JN)>dSN3QR#e=)O_^Lc4<p?F,62spSr_66^D%/M6XU=<A[U,=[ldG&(R at H2BU,^f'kVj+3M
+%Ui>L'Pu<t&*p&'m7/TKb*r1P- at f&&6-=RX-*/TOM"2`386kB$2835qh+Idt3T<^W+V!Ts:(Se*@)^2?M3ZJ?OWH/#Z?eI'n^trlZ
+%]kYWpWeb]iK$l@"W%4L]9f7V9)(Re/4g7SR??/^,'\hNaeJtN`54KXFR.neQ\Ze6e5<gC>r:=/m2G*]o\1imhAPu$9a.VsTGF"`E
+%BrnNmf_H+s4'0tJ;bNklPF([f%P7o:k)_`:Km8W+D(UCj;bl$PQs-HbIOPhl2(Gl_TMe*knC`-c-rlC4H1o26-&8()?m8X7X#XUg
+%ndStq-0b'cqJ;/LZos7/b$s@@9-=q&lAE#u&[XXeA5_[%k+3Bo7[e at CB@:<CEt0U.k,oUo[D3Fu-q6QZkq%N_ at U#Bs<Q<H9*+"#j
+%CFMBZ#4_\G_d&TTd+?D]DB#Rb<!A'Em$;G25O.NnWkj-\5,=:#2*S^2o)e1f;n*/6[KG19#%Ud.KRnkFPG]]FP`m_hSP?/+B`:Hd
+%Vrob`b"^qk[%t345D;dgYs9@'R`U\9d+"o"=-1iqeg"lRjl*OnR)-C!9Fa9 at A0q-#&mo_ at P4Q,*C8e63iGt)8jcH$>]KN:M9Bsm$
+%hCc0?$L)=>Z>JjXabg,gGXsc/c6O:gYfnMD,<rkB=FS)&YCMd$+=APu<;`u_,6p;lS.C!^6s0gCYPVjB2;=T. at K4n[S(X=Us3*S<
+%EGi\APYdiXNYt(SKj:hsUN3BQdX at L?(s06&s7>lGP4siCZCu:i_KVTsG?Q8)]m).)7`^#NA/,&LGkSSc<e_l]-%,JI*?&i(CV2[R
+%Gf9t@@+7T-8afE>(n%l2Ea[NT1d51o2DN[LOqf)=Uc'2hPuC/JIF3u`&BYekP37,\XHcRJ0'9%a=7Wi!@iU,aFb4Bf1o`JPZK#eJ
+%h)Z-j`^YT8fhtUs)1WnC?ML4i12*9HZX6:*2AJO#a6GQ. at 3K,EYY6MPG+%4(=&SHi6;bmdBcES?r?gD)D<)mK*H*s7%oua(),jrt
+%anUFrP``.7qo8n=J!htICg1pdlmeQ*D*E[-8a:#_)Gp^[_^3!`1o%smf0!X3]RYqdO=>O:Ya[Zc-^LmtijPb,qUS)dbtPL=hXQl*
+%&S/+G_">>RR1?aD4b*"A(]99rB\P+[4m89>N^aJ<e&g?cYm`_h<.43jSQ*4hF0`op2?)6OViJCP.cb;8]<u"KiHNp`Z-V<.$T4UK
+%D'A.TMQQt_7W-\/bZm0:ItLGH0RD3j9hN"^'J`Sh&[b:er6ia2ql.[c;e([lk*1LJID:G4[8P;=l:YhRGW>9$=TXZT_+tEgFr&@T
+%2.U at 4Q8!"XqgHIlnXUWne<*WA1-^kCH)B$8Tr.in[45_NaH^6i$=i,4P4jmoQ/d)N4p3thhqD"YS2\E1L'P8D8M.L6hdbI9k"c\i
+%jCQA!l",mpE,;C9k\<f!=pGP[iDsa98u),X%sq9?i/_%2Xf8/NTQft(<(O\$XSrsCCPp at 1](<Z%FkD3fLmcuR;bE8oUJ!qn,7-^D
+%bP=86d>WaU[*b"@1/pNur at -t6M4LV?;Fe$UIhUNj\5V#7KQhn_q0Y[MEE=*e!=R[_.Oqio^J^U:0cWEN[DC0DQ(:1Ij_4p`3EhL6
+%'$9-s6p84g394ZbQ`s.d6S at K5eut5Q]i^o\oXL<^jM'0Yh&j82gt`q>9oJ[+WFb\Y-1,&`.g\`)S!Du9O(b\gHjL,2oOF95KV[p!
+%Xi&G76$Ii,j$`l]>FoT=hfe5>oTVHC_nm[jYmari%K at Rf.V4@))\bY/ALPom&?OD3.9D?T1'FQ]$+.8i>GfDnd#)O!;7Y!Ak'j5K
+%7BM$nj`hf!0<:spl<3Y;29HWo`.h?i:uSf2Nd@)QD[fOicEfqd<>^rddV`\m`rD^Wp$eeA;^abX3Y/&ic,'f[_-Ye=?Tc<P#0+(6
+%Xl(_;?X4Ek'/\fG91%[g?N58=TQuLonuq)YDL*TE<Dse@==iX9B$o3Xp%'IXaE&f+m"$N^dcl#u#2Os>9Nq$Io5]FjXHlk5T*NnF
+%9L=>ch;VjP7NdZp5;.;^i87e</@O.3EaHlhn*B7CleO,R<:ln)3eE:N^piCJc!oVdNlWMBiI'&$`Vr%]biU>f[&X)f*\>XRr at 4cM
+%+3.*N&\^Cg4R](Tj\5pr"^.Q,k#j(Ujsr$)8VsY],X<$NP at cuE.B;0q4BJh`jH<l%.V*TBq]I"o[u%<1OKZnYh$.93HRGOcGZa!.
+%V=(Y5b2DL4nP'j/ap-;Siu:VRN)Zpl7o(bhL)H`=?>0ER3LH?sGHPIklCKcCD6jc%W>7ZfhEJ?5T'2X4HgUnV?9VF$Hh>k2DBlQA
+%Y`@G)npu-Z-Yr9NhS>Re1%u8EEBIAY*o-H=#Dm6=<7-)aKhY=aD!e/jP8"5pJsLDS`[X1g>4TMCkLB*sj3:D9cOXDXJbT1,f*2IX
+%Urie.ntN<"o\EG7l&HbPdBI'm[fXu<l/qm6?[1n at N;e2>eY^(8%k!,)j;in?rk%:C\ZcnC[l6h<+Op$W4nc-Z[BD56V!7*CPB71a
+%P_EF%Ije\>h4p,b:HYBA*`,1W1^PQpkahLq,/hRI+*ttCIN^)-7(('qpIGYf,;nXk-^Tp?Ae3EPAs,M5H'q_*+8a2^I<YA7Rd[%8
+%9&(<Tc_l2D%5r!PWL3Y5Qh6CSh4J?V!<:,+/.!c+`JWXL"A>OC98)p7Cd"g<;kr38#_JSl5g4Q+.@(Ao+T_'+>Y&uZ\3)+LfW at kr
+%Oh)]u2.u[;^6H9ek:-H+-'iGr1P`esh2\ek at 4oL+k?6nF=\IDLmd3,[^GY2"mj_>KEEF at jpk`4Sf+Uo"na:U0I0"nh_%q^]R6]C1
+%7\R2ZFf(2`7%[6n0^S4V1_d;OmUN]d]Rbdd;jg7Qac/FMP5g,5BdMhP'6juIW)"W$S%#`9U9F<VdeN*</GU"FjIkU22R?jIO,auR
+%b.m0`R1+2>1R#"3%1m5JPfVrjNleB,GE_Kf6XXT4V]MFYm8P=r*!?L)Ss/#Nm`3Q48t!=sCRuunZ*P'?m8,[,:rR\nhHo@^`Xqgp
+%%,_I:cU/q5<*Y$r5,K2sZ;7(HSa9aXN)nbE_>bDH%Hjnf_QmPp"e`e+A-"nT6:oX^P%P($bU"oYY,hT6fU+"9[:e-Pl[SiS">)qL
+%`1BoO-PW at s+\e?i`80B$(XDYg2]&tu#5b_HS[q?-UD=b0*K+iapXNQX6o#VNGuoiCmE7L:N-JZOJ'B$jbP_dW-o1P5-FlFlO4uql
+%3lIKMS!u\;Zu!NSbkiE+CcTCo&6)0F5cV,(\pG%qJqEFTSjAj&nlk;aSVNJHYj',r&!2TdR-(0I&h"9>1>jZ]MRM!G3pBZRIK)&]
+%K.,8kW##?`HVAbUUFToL/NAk at Hk<er>bK+uho%BEbDhUK;Il]P`s_#8;dSn*H.fsm1t/b-A8g#G=hZ)(=(K6eF]%&&9F7)+RZ7qP
+%aqksGB_!q)1`W2!SUuI`6[h2aUkCc9Eq:p?q*<_Ao+e.MH!YV84IRok=PJ?A#-&!.GmVo2DWl!&0Ngf],U_NE$%Z5#I)dLNg*q7:
+%/HsUegrH1SG]R*\_3:/deqnP,"R)`kcm%j_-`/OmhVY_C:>1#@D5AnTWUh!l]R3D0F>92[]p!tj),+k*l)'808L_1_$VV:Dc`V3I
+%aT at V^iu=jqSp5;81k!^M^H$\=MRXKE>uOf_(FYoGB)W)C'tS)0s1^"`fe(T!:+'8jd;P6CEfP.;/0)66\]>!fK]L at k"XdG*%H8#p
+%#Wq+J9-ro'=A)ZLlQ!\CRo^pR^HI:@AiYTV?2q"3F*N?"- at s1`1Na\6b'gjJSTfN4VlFM^VR)o%M2K_J5I<9&4o_1FAe,j>;+KTg
+%B><Xro(fmS`YA8$+?-K[E"BR9lh[2]7>][9rWGaQ#ZkJLA1bmO*eCUIe/(*6Ml`&W+st98 at U/uRIJ(/HFV7\h=35#/(*f;7Iok2E
+%g%B5uV().ckL2UIm$C<<?+<OWZ_<>:p<eE9KjJi_iL1Gs71GG_1>0Fhd=P/5X[IW$^DU)-q7:]p1ORb#o!R?-Z[PhFg-h^MZ#bl<
+%R5f'*'RZSJ,fU#P;LLhQhec_l3<ZV498b8IO,lq`oa;E*"*--f;aI">C!W"/njBs_^RRU(\JL!5b%'ubj,li>A(Ek?hX>o":(LFi
+%:[:.3FZatbfRDCo&J@#'Hic(APNP&8=pnj]m.=S:c:iV>&-RiaOn0aDoUG(/o\t8+0*mG+HKt8fGLCK\]n5EG.WRM`W<+G\jbj;2
+%';Wm,8D26+Grs\iUtW4+aXWK3>Auk8aM`iG)#0(n,1-\TkQH]V0J$PY\-TJY"6f?HDH/p_5C;Ps2a/pa(e+E;8KJO%[&_(KCTr8;
+%pP2%B*an97jB2tCp0d=,km-=6(iU\f0h at qm5n0<4,!0rhA*ash2G`("\L8VSMnt:T9gX"]c5,K^,o::S]0NP:$2m&"h6Xs76&qG6
+%1t]K#"nRc$c74V<@.)C\f.pLubaD`"'6'O7I)N*4\j"0k.I^4Sr&@pfFdqeZA`MRUCL*,U0btXE-%1hR;k6(,gn]q:E".M5[bJ&m
+%b*4- at FqRc.;ZW?JX)Vp4k8^Fnb[gN4pUAV-d.$*5_4ML`$o.ckZ,t&oEW>q$F"s:9[k4L_/aRR2=;9WpTooe*)j;2a@/XTh9:.fe
+%4MX/"YK:S<N906Rf+t1=frR%^oja\$ZM^YFpN'MJh?N;tU,AK$E\>pf'%j])doJCJ[<UFt?YZOn)GK"`'gEpmC:Q:f2eN4k@:,C+
+%Zi=c<c9aVm8L7NapDJ^*&NQsP(9I3!fkTboG4d at _^,GBW[+4^WF)i_q2&@He_+YB%52S!5-C*`ID"=.=P)BObF[Lmo/d#S>KMRJ5
+%#HtFCOg)=-5$e2]4tV:M(Z=FJ;)4K'?']n.j at r/a,gCA$LfgQS8K"\WP=L8'@CC<0WL-$RLI#b*:X9_RO*eG%oIdaAnr:e9:Q:R'
+%*]k%e-]fpa8eBF'rp8DTPb4cOe0Te!;P*$D:gW-kb9HDJ+IG++)#b_]9[(7bheKJ$:>`&MjgLFhH]UoBIr5#GI5>"`@qXrs>OoJA
+%BsX+1cJ_9[E=gqf.7)=)4?nM1Y?s)6UiK\NAZi(QQR!E:PSJjli!(3'lJZA26V`#pHqTPb.-'8r9F,(,gS at 6[B>H2]o'I&%Clpls
+%2E5;ji"PAp6RgKPA^?]Vq/epH8`&Oq#a+o=n(l7$'@r!U:dF2WE6W!$8J.\NB=0P'ARbV*3$qH[Ikg2&*5=ft^iGt%VlfpZQrV#C
+%L2UK/0KR)%BkuD/oUKu6,)A6`1m&C.!r.^1!sH-amGF>Apb4M%0Ts"q"QS'"br79Zf0.ZeM0l'\Ys$f*H-Zq at GNB5GN*+=NnA0_]
+%f'0AH><0eaANPP$-dNAG%uR[goWkTGH"WDoie98<'WOX/&"Sd:?'8l>Bt>babLKBL]`BX,_&c?#FfmO-5G>G`#WkZOm0O2le at FS1
+%ht/*R16bAOhC,/V,ho1^->$kQ/mm#];kbJUKfL:OBX=NMS5<=^C>p;j^^Q9Z$!m$m_6p_f.ag-38F]?mT[<AVT>]s:.0t=+oM=r!
+%p5[CPDJPa@:J'28#1^HTccETFX0\Xi+#">:mMr9m3HZdY#PHn&rVX(OX"EeX4=.h0+mqhd0+g's\go=oR`N])8RACfPJ5 at RN-1n6
+%3V<Q9%l;#<bp^Z.[YZn6pd&:1,Y\al?oBn!f8r=!Tha++pUlG$9<\=lO^CfI49Penr2e4`V[bK.A"W=!dgW]Z#u>r^^*LjRmf3\p
+%THGO;Q at +2L8=(o:3JZRjd7;rl+$VTB\mUmOh^::'&d(-E#TS_dS1qaS"J(_TG;.b3JL,IbaO2#TX;eoY.[s]8]C<J-ShX<?K1S$B
+%E+,M;DC>2b\@c\hP/c1f]2H2eNI%S/VJJHSR7 at nbnGALdhmN_6U>lHm1($U+@`EsFqIr8Le%bX"lm-mT=B#"3Z+T8l2IIuK,1gGr
+%e\r+o56'l9/0qe8/<a8/4O]llU`EeE5+j&'6[L;6RN%3RIumo0npE-%#+>8l+%;Or6)+n1CFKfd&7Jik0XP^;,GXcMBr5jMmKDeB
+%,=+BJ[j&R&cHa%ILYSYcGo6T]l4i<[$GONMdH2&YpfW'f-Wr&_T,ZUcG6r*AYhY:R0p_m0?t;7'mhuaEU2[LLb'!Z,j:3_PH6+e%
+%$e/;pF.liWQo!XBE_66A(-bej]g?6;+ou1q6r(0o.HNNZSS!:6aC?AG=.kW0qWH&PU8J^lOU"-OkG#k;T-+0?2QXEs4I)J;i%YV+
+%,\QK,GKm$YrC8N"g?d at 1#-&)T at mf8GVS6c_ajt"4]]rQ3*dnZ0R*NuMI?YU324h#=]>;9cg at Gu)[2STDT%'VZ$RcKrai2AYbJ7l[
+%c?<[]ne0m/qVnP<)"$VeQD<A7\^A%uTA7C$Ln$DnODGRfRI6d,6q9:`49mL8.[u0i43aUi at CO%A67Mpp`B]tHC6cm.(PJ4aE$l`r
+%YkOa<l at EX/,Oct,";@mDKt:+"G8Df_RCBj.2=PD)M>pU\;/6eDISA'H^WsdTop=l%[7g#scpE_5+3PtKj/uT-9Y$>I/=63s)^W#'
+%EDBa]Zs43&BVVfLP_!6T4iCn&4p<U+mYb4PaVV3&P6]DeD7aOH]#E(t6[3(b-ft,D:;Pkj=Df:9)mI*RPW,mG+bfS%/TUP!4qu]\
+%RTub>%<g[VUtlYgfUkAW%dSCA,eL_1DsicfX5F3;os)AE<m%M(%#AKCF.J6.h>2WgM9N3-A]?J#"H4_/.J#$aZ!$gmE2R&pIN-u/
+%eM_NR=RP)Q'&j)6o6o5/c^bD(dU.=feSQR.m/g_3&8Y'k,PPU!qju:lir)gfJr9`+DX0KQGp'ZI&"e3Oo5[(@"%knpSqfU,hGsQN
+%UO&L=Wf!Z"Z*@0aVtO%nO at d(imgH;M+75;P)JC at fCnW::P3!u)EDttiHodjU<L77R at hK%Aa"5[jj(%AdVJtdDEbU-S8==.PmD)8.
+%U6g.pa[?UOF6sr&?1]oppLjkH8Z[Wl+GNTgcTUZO.FAfC>4!/_.!4A"?R9=Tn#P#cnjUgdc5jsqpu=d%o3LXuWDINhY=c=VPJ!O1
+%^89+WT%bUOanp8UmI0^>-C^]Yflm8TQY(CNaNL!O_9Q!6A3(F[-2!XB>+1:!&(Yf1$@_7t4P!9A4Ff=)"r0-#1WA,t[3?uWr:!\L
+%2d^A^7B-7ZSES`R at L.Y<GenAHkFOGlkADdgK+^T1H`)cS5>N2uhJ<*9W2_:f\l2XpQeA/\\?GXnPLms<^jA]6O":cp4JJ.`"K;I[
+%.i2V?<%tNqDGB0qCQF)E_*HaKP8""jeHC](e%,^)dCO/CerbJ[.\Y+37bmI=;FhQ_pQi9r)4,Fc[*0LJ^H(5<`n"]B&9u$9`2k?:
+%7KQ4o(5ioX8Y0#+-^t%t?=4nA3<slQ"5>Ssbrl)Y+Rt[+aE"0`8t6)^%flVU'rOM,eip at 5"'k<mPuN_'8>a,g1p5LDcEZ&#kT+DA
+%XQ)+7$K%-,f^uqYSJbT$;i6Ub:>KMX&o5?1b1&cdR(Tu#bKk?;Rs'-IA=I?CK-.m$59lMW5Rl>eLSjN%ba*>8&h&D,R!`2 at e!=9@
+%Xp/5g9Z_ at tIGJj>;s`WYdC;5rI[<<`Z(B!i3S4roH(Z]is7rnm78q:bCHh5_WFSaV.N3X8(>KQ7CeR#PJR/'p*JK(1N*j3[40S9[
+%Jjt#*D#*[gc(Epq05*`)Ms8*r]JQg>R<miPVLk:q9m.n>Z[DSr%-*Y71u,c_F6>`laW,qo6h6lZN'`R^!2g!o?#$lHQtX2m"AP3Z
+%Qu4j/l><p`;%gT90(UiDBfSnE':4=4\pmsJXGN%4]LbC)X!@cs$@Yc;8=1Y&Gi!Kq_JqPb@))<i!ko.ZG3Y+k49!HK)L)UBRVYL!
+%FfL/]H"X3>#](c?"XrH6-<(&La*o^U*96]lo#\)nr</8d&/'5<c%FQ3BQDjiTA$9NE>^`=5LMDB561t3r.BTTCkS[14`T'KaL6l"
+%ka%T*SfAo!fl5O!h`5_C2^[I+?!io>WF#q>m4:092M$-m89p21(;n23n,ZtEpL7,_(l1j]ZfGC`,`(O&2b]d,o>"oD.M at C)Z\*`@
+%m_<Y#0lXSMQaI9nS%n+^-Ldiqc7cFPX$t&ip%la+aYMJ4oj]7GnHjcI.E6e;=(@_0LS2j/`J\03OK.89hGUO0q$r7GUjuA';Yp1M
+%:-Z'Z at XE]?QO2<5jOFkj;fND36Hu4q at qC5(^89hMn%i9?'\Cml;lXtcM5]WJ$Z[P<`HuCHVd2]D+O`S=$['d.g5:CZ:+`U_Hq at +h
+%O4'3+&UG5qH1X.lXIa7gA]Q42)2dS.ofn)2P7gbKIEj/9O8p5JRUspK8g<>:Na]brr#K\j1G6M6o]?'&"G at RHjKq-_TU_MlkS.H`
+%(?s1W;WKqJC15O$P.#N(`8]9"H><P/(<lUhI=P="<0-_L1u&SL3^N$JCOtq%`k]=>A4#+d][arkq]S::F,.Qq@#7<(GK8Pm88CNM
+%\P0o:"!QYj*lp.5Zna59`"NK,A at UIWK0\hA#rK%6Vp&QI7\fHY#r:!1 at bMjkO*aSqY"BEp$^r/5cu["FC%BI?oDGIt"9Bq.oZESM
+%*_WPM)h\)SV0eVB,SNF]W at P_II1EE(\jW`,:]akdG;+j!X\>^-)fMu+^2=tK-*`#NQGNBK$(l1CZGn+nE:7jCRY.#LA40**Y at FO>
+%Rb[lr>DS5?e\c2rH.&/p2JB3f&5.=rS>h`n>B?ed8+c]G4Y\c9CYQLZg*uic(p3DYOIN[e8Zb`m8AKVP!KM5&kL#16ln<H.'#KHY
+%pnBh\:,>ApAL&O!M3abU,/)/R[j1;\!00tHmM at s&m8Fpa$&0;A)h)+bA89\k!ZHq5r@(5Lq@]XnVcJNFPBp!e(U,XUV7&68lrWnf
+%XY4jLYGnIu`$/k#*)mRHlRsEM?:;1RPiFu7HW.DqaDehDg#OB);93U4R3o6?dRG)E4]2-p*__"]k,VP:>KR9,YIH(X0#iKfrkUAG
+%DAQ]@?$[buVdp\AelMhb5-H9H+LU8FrcfgDb'V7.m;D3oj77>APR/JO/%e(C"ja9Z"%R8#cHQWLG:9M]-_]I.#<?AjE]!*HL%I6d
+%fRAnVs5)5Y/][TNS at aji1!&R:C/S<-a;e4JS>MiqlTs"!&`d81EV_+,'DejXJG,*)2r)&WDPeh-lXbB9%tPB[5]&bZ:=I)eRq\j%
+%?aS4rB,Mo8WXs!R<KSEEPMT?UB703F+s5,kG;.Z6f<1N)jT\iB\cDUQ4jqZbp\l^uJqO3Hr7F_HQCU]Hq&S5>Z;:=u$n(h([eEq-
+%PfB9!(Te':oA1nWdY08 at nLMNDQ,!pRU>V!$7pL(rRJ^p#\m%fgDk`;<#`i3&S=OWP7$_&(NZ"gKO1o>NCN<KNDq]u=P76%o,#JnF
+%/bYWpK1)Q@]O9'iEGI0u+/Ste$gcj/7)XY^hY;k"12Qq*/_pp^+fX_b0Tt)3Qf7[%(qjtkhD.OV+/Mt!bR]s>inR`N3rtrAVVfB#
+%CuF)M at Y3YI^P1p_r at 7@DY=?V;"tD2d#o2KGGTo*aoMh2_D5Z^(;S1't1d&HoF^#5A?LK=s1mC,3Lj'Ko>Id%bKGNl%7aP9:D5:PI
+%'OdJqGa1)mqZKk'&5m?cG+FigDQc6\pm`.#?<UK7r6BrY6I&eeS'^G2l5WNp_Rr4hPc31:<cYKiH6%jEa34]'FfOP&B!>!AOD\bU
+%Vk+cml.T0cQGn"i!Rml at JX:^B4X3oV)48_scu[h,>h^_X+d833O+?\PTbP>o^6=p@/i<u^0M4%gU7%/]O;_<+-*^q+)LigjWR_Ee
+%,O7tW6N#S8dILCN9'Y$[c`$TsIWmPPeS.*er4XUD9`i%,o\DG1nq?2P^k@)ob'tcdmnOXtm'*JdEu6BPoD&IFPF.J_Iap0^jY]+$
+%B6)`!<1^5cjK>$<A30K>5;bYDB;-08bH*pp'F-SSn6/[h;6:@,>Ij_DJBgt<TkDi*fe1i_JJa5.)nXOZ*;_d07qV[t9)(, at hnubt
+%9?V5OWJ[]%R at mH1G*Fd>W1>t1%okMW%+NMXE?:'N;M.1-oB)n%l7i(XmB<pj%TCa;XDA>k1'""uTN972M%l_$2l at TUGY+;6OTp,s
+%0 at S3/p[^Y at TV_No%-IHIA$BTPnq^1Aie9"lSoeSA0YK\mhH1ut%niWuStTHMp[5u_!<0V at jfs@BbpPZZSWq*s=GhBFB"t='Sgrsb
+%kF)?@3=,7L6I,=S=CiZ2l5+JQhiF at lS7TB3Q4JTGn)-KZpk>kj7;SqVh)rE0WIku2K)79"k!t&LAm:Z-$7GU7EpH!'l>1Y7)\R&Z
+%Zb"0if[bY7%so;"HCor4e4//Q`:;EmMmkO\#>/+?X[tl*3HDO*:,CApj6R$g-Xn^jhN(Lk(#TjDh.Y83e!Oue4R21=WHOAt3Bn%V
+%KW<%od7Fep/[^JgRk<VMk7WX[qDM(CUTXpQfBklsC,mt$Fg!"8g3't,D9c%hClG\6o:D:3rH6](c9hnLmp`2*G$`#2jB,"C+N!,u
+%1h'\d-jY$e"S3%ojMKj324,o!qe\jgk^o<tU;ao^/&sEi8\Vk9/'mu[C6FkoBQ[I0o94ue$Jh][*\P><Q1k8=1<5h$9V-*j@%!W'
+%I:mQCC2up[YUJG!9smui10>ZIPu%(\]sMGD&AQpJ#52TKQO\%B:PoO;8m4#uZVuH?)m>dPj=2fii0sm\dMW1'DJJ!h3u4)<H6d8:
+%+AW@"^<(N2;Q;$%"U at 2*k!\>6I:M!@m/aoB]7r&0[<LqOH&(_?PNDsgJnRr<(qE'5UofUWOEd6c&8Y(#j:.pDm$qa#*62hY?T#nX
+%?^-Cf&tBF9,n\O at PWZQW3/!-0)?%<8,.^2'_/[mQd_[llFWPEgps*F0",W2H$d5<s?>rUr6MWG]3:E%E;%V6gO:)Je9:Sc)ZNoVt
+%+FWa&R4?\@-d2_K'%>m5G)/ICpar*pO7M%IDlJKk%E#@PeiY+ahE1D]e'SYMq#Y_c2<[Fd?;+5kg<`\I$KmE09]8L)B_CG8#G<+T
+%as\A_d*\q:.ihE7fuSLkZsV+?V]Qn_[nq2.AWrl.:`Th/s7'_u9/O;3 at O\aLdrrS9r?6X\"fCbP&rT'!40>09b2MV\SOX[B9U+U2
+%l?s.LM;5%1LLl!*#=6`!"<mfR-fOD&W37<-lJl.<</F/:JV]hj^#(7LrT*]T at jc5SA,5898nPUBq=jNP=k8r0O`(eSDUUhAR6_H;
+%_5[IV:Bna\9_kgSS'P^"Ut'.M>\lnkG'=#MSWs"\L,NXF`Kk>L*1/-V^YXc6-3B`+BKL)TZgtp"G?_.2?GAqLOKMo=*/^1bjIjRA
+%eXeoe/_leFN=HR@'R3H"_GN=)gR<N0X,%\agp3]=&sSM_qQ?2cM=um(^;8lqT]7./^43tGVeGI[;Sl"VO>m-$0?6;dh.07P4nCS`
+%Mno'sr^T949hZ#W=S\(`?m'J+e;@%S1M(E1g,tZcgV6]TCER#oe;^bjEQUN;$plB"Y92lgF@`#'irUsC'BI$c$J\hnYW$iu*-,*:
+%$(C6+M9!]M'pP at M0\iW+,QYe>1Jl)gFNQ4.W]$<m<&%-.cL\CeI[g,'$C7FS1&.U"bT_hL]Rje%gOgsJOVl7,a%&UQb2kKW3ks\0
+%oqc`_kW4LNY'N"IOGWO_P),=A94H6ai'9S:`D)URF7F*>s/]boCZO_,lfK7^M\KqZMP,:scqVET[r7rsdV\@=:F/HU4K^$)OT6Rk
+%8T'hT'fgMjmq9pg?g"4:`C<$f)9@)Z.0RMQb``1APK^C(NnH,Z/G&%'0BEcA-(h`mC'EXh8eEW;;Tim8Nt>->6FnZFRV"RYTL"UF
+%@:(Vg7B?9ep6OHQjiFoaRVjdSDEhcN-O2O*rV at 1?><"$mpip$!N[3Q%>R`capHp-4!+ at aSf'iRa<JcrYA9Wh-euJ%@f4TAm58,rX
+%gD\M>BWnsOqGI>,f9of_;fE_D*(do9PN5:U3lP<"g6u68l^(O*SPGSbjCBON2%)26_dk3AO_uCH^2o23^amNU*8n!X'g at M6%]O8Q
+%[(Q2P!s[R?45mr<>T,I#NO(b3;dGRX5\]m69RH-VNcIQO8i9+a,iu;-*a>h%@%/0i4?U;kMo<Zhn<jk_F%c+o5(1Hc_o<Gm7Y&uY
+%qWamIV,;oVDq_0rOJ4RsM#tl36p^3JCd7m?#BnEnm-C/T1Thfl6/]Om]0H%%g$,m!;n;e].:etWH:71cJ<upp45NUf+5>NJdkE)_
+%p!E=K6"_Q*Zuas>h_f\G$pgPDUu/$NpX1`0!a8OOkK!_DL1\o(l1lmfjt9\`.et5J:5$N![p:AFT8aZ;`RJLu]2d8cCa2//0R[t,
+%n5,%=QDCk`dTFL1c1BVD3Wo'Xa^uoZgC&W&L+JSt8C#r)2c*n.N9<u!r'>u#Ep[m3FnuUW[X=Pacf:@Di0bbjJ`T.Bno<V*[NphZ
+%O1+,4r5#/hD7hj6,VIFPnhDllYr7l<A^bHe&Q0GOj<4[]E9p=ZHh+TT%Kkc)*ig_Je,,`0SH=M(;X4#sZ#T8'oYi^8e#)pL5EW2l
+%igo_Wm9/P5^RAsFW&AVAo^[E-UMf]7S\Sb\di at B4q(=00THFu?nF\i$F6o6Q+Q>fg]W%Gs9?J&#`TRu:_Y69oeWW9C at Vai_C5/<J
+%S8a8>BQ^FoDVA+Sk+>SuS2>Gm=KZd6pUg^lm_St)Z.qDp#k(iarFL:Q%+4XCR5/G15Ke/[=]RkZ_(X!]O<T6qcNS at FMVS'!q,he*
+%aUphhQE:43fOF(dinqL1RcobYI910a7&F:f>Ok at JA1YLFMml^G:>@>^DDf'gC-kH4:4=\5Dn\4GV2h(e$i>G"'iY^8lZ-L=]X^h[
+%&;4%]'V.cP,^5"qb?V>U^8f=6P0DQP=A(s3gp8TaS%:1U?I=qSOrX=5h]*bb9;i+u,;Gk?4Z"N%o'"Rm^i6up at nmt4b&Q9s64Qq&
+%l6%-jBdJ&)F#\G?%(li:=kdq3^QZqbS'!#2P]OM+W.3r-/SIi].o-OPm/IRJ1oJ?Fks>Y27jT#@+X';`5<"ZXs7=ofVZB)EOu:CT
+%DU at uD2G`L]O"E4\$>[=3Ss-N>nS'&F?.7qf(/cl?9jVUHT/*fui)pTS]e'ENhgF49)8#?_Tq, at T.2\5YWSBJ:(PsB5gW(51#$[.A
+%n0!>U8:?`/REP85Z#j49-DD")-,kd1M8b$n2:23\5In)\3,"-q0]f"#RlE/tE^&<ar:5Nbr:sNcmDf+H\^l`CE at Xq0c=jmB[82s*
+%b0s,PD+g/fm6crs1H(g?Q$64e/r`KRAK8A:brQ0<*S_6&Yk18t%=6tP>++d)l,/t6"!S2IJdd#5\Dndhq=`L7^M1mY(BW[!pN,__
+%>gbl*,&[df0*Z92s5R91V$+dBN_knHV3\l]s*s!l,sZZhG3@]7%e0ZtiEB,q"Q(TWq+4f;j at u8.a!;GK`Uip-f1?CQ;a\SZa0>=n
+%7Gjtu at B*OopM<r*_*+T?Ec:+B)e+#SkAGj8DTn\7Z:sT!]&]4^^lpY6X&nmDm#pr@\GjWMJF$i_P*3N^p=MGPnb3ng1,pSQQ6R-s
+%Q?9j1iKJ+q>S19d,9)5F&5f0,JjDSY_)iCXQcc43>1W%Y4_TcqG^1[IkFLZ*QL at L7D5TA$ZZ.MkC)<r/I9)1Oh7 at bX2]'6mp![-h
+%,FR/^)""Rd_1gMgaj3emVtbX[!K"=alm=KcW;l(#'WUr;iAJaIa(?.,SQ0HKr#XF:]YDHC5\"Sq=%+CmOdre$(Nap,_5XW6SK</R
+%n2,D:d<EFn6dlDQmj<InpphBPU=a9J-NWHNn`Q/$3HN#&/S.W`)BP/a?JoCmN_aPE5/`qrZ/cn15 at AQb\.;kj7iJA=ZC!=YictM4
+%k=J]YM6lM_9Y!o>JDg(u,"Y=m+V9s.+U,m`R&MESI1P[kT0L$:eB^)>6q]Q%[, at RTFSaE=8$D=8/?\/.IE^\@nqse?c#od.\8$)f
+%YE:?3k(V-m`J#ST0-Ed*mFcVSEP$$kic\^<CZ\Adj$-2(^hE"]qdebidk(\4;iPo0,q"RS,2$D2gP-=KNP\0YP[qi at ejcM)3tIlU
+%,jm]E?jb?7rV!o`^bn at OA!t('+2S_UP07/b1'CDELGjruQWp)SH_>L[AP(RQ1*%rbhD2u+p[>B>:7cr\Y6d%Q_eT6A66G2A]eg[/
+%jc=PGpJnbgSNP&b\shAT&mp5uJgQePie6^_PVof8L<d$V&1,Z0-e4`>\0\5cK27?HH7C35'2NM/1BD+#W31fDKa_Y!5#!p3Di68^
+%Z?G=NYP"gA+GGGa*/O9(jL(2(&n<MOJ"Q0%XhVB.;SAqBm7E*.`[RBp7QL.,1"Z!K9q4gD(Bp.d6X*=UVR:%5-S[hf2j%/YUb`f`
+%B_oiYS-*9/(3VGFaiWb!ONfu>BC'^fC2E1'e;Dc&Y;[>lU?u=='mC]m'[lR=QJB5Y=dS)O))L]O2b6c33<kh>\ZXSGhfIqD_)o34
+%_4Es;JRJRmq0e_f,6'\oNOu1M/ZCEk+;-R=?N\E.H.]]KXq;gRY\+jAZJ:?fGH[!p!25^34(44:aC^C'Jq&euDW=qI8`JOJ6BlkS
+%`L2V)O+[EYl`TPf'N)+]poF(.d at A>Cpm.Ge4Q)a*,i$mdJJ?Uj$";IUEE3`9C&VQG*pE32q,q^Y`DW62>?]K=^>'61B&.-\6HTC!
+%@4GHDLZ%Hp3Hd&E0+Et22_Sh%U/1b>K#'f;j/.a+TH+`pVsSc0",J5tn7Zmhl>p%8SKFJ9<kjiK"&KMDIFc]9V=:++;I`I5YKJ-K
+%SPh\M-9$!!Z_kUH>h5Hj>,<lpV?EQjZQ<$t-S[TZ-j=gpL&@N<"'+<cCd5M;Ie.`es.5I>'A-*$->o=9A7r[$9k/d at Clne@L7X%V
+%TmEJa?mdT%e;;Aj,V%DZ8:?F'o88s?nLS$<$?T>.qQ6[Jh%Ke8bcl4kAjZS$U^^Cs!p`M30[Ol%[-2;Mr_\bFrp4.XPp99a6ojG9
+%.2ghu:l__NbB8.).5AI^<6h)[1)0/B%eop=bHKuVf at u'.iBeZZ*H1B\qK<7fM/hFjmB5OK&ORT+_$f+ at W8#/sjWHoS2#Xe:HV(66
+%e<Hl>,ib3O9!YLpTJrE9NpY=kgLMt^≷\RU/8;7P6B;i5X:rM)Jd%EII\T)33hdU^$7jn%4lbLSh^PJZbNG^b+\3+/,Fi<TP_Y
+%,4'O5+UR#"2a-X1(d5g%4JV(a<p^bWCWR=(:[eI`\a>rnPt%k?j:!$s6+M;;r5e?Q,57_X7aP?9k"mKU2>(!A&gG5ug-nTUP3&b>
+%ZP#q.J>>SY9am1aq:GM>9'cjSI?%aEDl#01KX5[24Jo/W0$][HZV[f#$:<RskpE8*,c^6<N2`"(@<+PW$02VK?>Rj@>beCo?m$E^
+%gaRNQc>Z(%d;oEXKIj0)JU4uk2 at E.+E9\V,Xare\B3=[YRB_a8$V]\FW48"hYhb"f'3t+%7P:[[O=n8(Sa<+I&*1?:B]tJR-9d0f
+%T7!98b,6c*"L%IKgI`VT9ri>DAV!- at dk^rYe/pA;7%&H.)F/o*a6P[^Em#3p<"b]maF'NR\$fUp#'-k1G<&+S0<q"&!"YBGPV8-u
+%(<8JA)b$L>l#A>V?"K=n;ufg5P&%f;GKjiLc7NO9"af-qG`N%9FOfuQqFqrm at VjCsP3g&/AlLfK])dYoH>]OVotR!3BAh"?=TYGW
+%SF;1*e5$.61=r*>ak0ggZQkgMj9W?)ZFi>HF,tJAWC;^-cNKH)rL7WI#PChOX1>TinNag;?>T*>W.R1EcBT,&6`Gt]!1Z0UAeGNl
+%TEgM'#V$8*cha<s[)b\3TV%2n;BkUn>;+f/fP90Qg'V8)Ot(UZ"c^WY*fEp_-b:K:U1kol"sX?UUeY=Z>\FjV-iK>kjSS_B#D[-8
+%s+(WE1#\^g0\p^=hN,tL$7RK&1(YBdOYp$G)$O+r/Djju_Jm4R@^G"&2LbecA^MtMLX&K+P)=-$SghRKjDjhW2;)Db(G</F80l/O
+%YYfFI^'a-)"ntI#dSanQ`G*pfouP$3A]gVL+6W7igm\([-C](Po;'W=4!Llgar at AR[PE$(nd+6oMLKWO[PLK'A[O+ZD?lPa_$,'f
+%6eFAa"O,HH6(C/O6I0GU*g%iI"Vp78jNciJEX_ts/NDc]=bs/CjE#2fqJFoWkB[th0!ahJ3'BJ0"rd-$82-RbZRr_IRNT?*amnKF
+%f`T<M4D=SK/"!MNjo&o"GW]gSUqHJ'IPi3MlY^G269IQG<JkR$:NlU/c/jpij*b/[c1O5,.k1"X>+D&/?%K[7:*uSQFRAB>>E=+W
+%6 at rI?-:GSVVGY\T0>!$"AA<MfSA9QHeX?#?]C&?9L\jK!W81uHc<PiaV,&9s'+j!bO80I4Lt1$dE/9KiN19^g(fZ`,aT,\4aJb*\
+%+q:\\q;ut1<c/O6p6B;rMOb'6.1AAHRJF!>c><jpa_OHhGl6ItH<A`ZNtc^T:O7)j0=SJ at RW?$f><rI_CAOpdhF9'gS!mqs,UJsL
+%Dr<SL3`W5(6mdj_QZo?SHO'J]>TmH at R!H,QA]C7!],um2/lmKp/le#/?\c>K7_&;Z`*k*di0[0bF-dLS)4^pNk$7A:/*Z;OdZ"UQ
+%7R,:lC&U;^pI1GAI[H4E.E6u,cfCKYZ,*70"JAP:hO.3h_g'RM52.LsDB2r*e<+/'"HHHl;h=Hr(?\u;k6Uf\iX*Ks4XE at ElV:q0
+%O(rhO6-<CcoV,_0J at 8sRbdi49NV4&d$hD8nbi(VENKS:rP9Z)%M+[S$&96-JJ[fh8Rre=*k&Or>IX#V"N at g0O.JJWKjUaP3]m$J%
+%jbiYo5q_KAjK*42q8:pc/'5Mifm>tg&p?H.^)=%Y<9/L8bCmX_6[(f?[\Ma6mpJR'TQ=8]frsk"%n'8 at ppEjsMM,7nOnf)>@Fk+7
+%[6HQn5s+]Ua\lL>Hgr3K:,\@Nl>XF7eD+k at NFJm[%`WPb97^cU-[ABm;laomT_NZT8L=bX)ZLFVB"b<FR?Ol(PGI_ng$i9<#'%::
+%Xkg+pgNOE[es(o0BNCi>?fH.`k%u!Y_W8nLm4n1s"JT(]nS1/Vghr^2lhT9PVD$CYqmD_^p-(\]Pq#RJ\X^Ui1co^8>u'aATZLhb
+%QgPj`Y32AHhs.n4jk"RfPK(n#rd+('N`Tu0 at p%&'AL4mL%nZt.nQE=7o<[Nh;f:A.NLS<X;dcu at Q4cc/iJ6TdS/.kS4;6U%Fj`L4
+%bbT,k#"eI9g,4,5#%0c?N[g<X`9UtQ/BBXueL,BJ5N5GF/N/K+Wn2*oEa!;g6O-uT$'3MgV,0E6#P+#GBimf"eQF8L90HL$B+8.t
+%J0;.:WBLhRHh,I-T!S%-`gnH*h%E^Ka,GYhhGoMkCf:sc9S$Yql<L8#BN\GmrGq/S-d_gZN5:]3 at ECr/WLm at GA'q$+Do%u495/MV
+%JBsDh9FS.3D"TSO:Q!I1-DY!u0:n4OIrS/,-6O?K$S`hKL6I.U[sJPZ0djJl^d<@'ZKl5^-XR]:ZgWMi3Q%OUeUqH[qM+NY*[g'#
+%mC9D7<iU`Xetl0Eg/Ljh[In&6IN6j%2`gM$@u\ndO%JaRW-i&GO;Ci.dV)u#jO=H1ogXcDfHKXNl^6Ibd-qa at 2n;6OXhiR2cJV$'
+%2\<.iV at 47.HS'LFgjug8=XYN<^/VO>,u`;#juNiY>>"9oRDLmS=+$i>Uls6"eft3?)GA=]\\f at +Z4_.&7hp\IUbU9\7Yf]PQ.(@^
+%6`%+&bajnll_RCJTgA/kIn]3$?.S)hU+N!MOF(\ua[0MNfY(4l(:s`LRR=+pP,k(2P8)@\\gFElN^a,=PSDibr:5$?*9c1^^oJYC
+%NdTfU-/uMTND6WM at S`d;\WhjH=!HCcI)]>.F$6-#Vj0jrYoO/mQIlGWQNX,q&^i[#PBl`M\2HJV-"hS6CYB,k'"a=GYE.Hu5a]DD
+%$(t.e%n>t[O]_CnNdO at Mlj_=TDfT:7j.Sj::!*Rp+pj*?VD-*qr/<P:4=K:O..^j at T'V*Eo:qqL'9,_M8 at 8T`fr3(Y97=AaQ(\CF
+%[p"qJ1_nWg(rAa7%c<jOENkO'2YLPk0;4;3fGoRrQW+ at Cr#jO#[u+spD6-raWmZNJ'/6q;h72U<Bct/eMf;^D2eusC>5RtBYBNqb
+%nK8XNVjM+`)?`#=#l0M^2[;qRKB4tf:69GQYSkfo[OI\?"+%<5'-)K!<Z;,h=o2/YCT_)tG!^?`bPTQ6g38M'93II:+,j#0/AJhS
+%2Vlh_]%N&O/FP]*bpTRM7NhrC^f%hrf?oFnQ'>og!ic'C*C)[e$U.iAg@>a?h(7,@*rJ0t5<m0>[W;H(1>C<peaLl8XGbo&@*[84
+%\\P9Mk^Jf-1ouCo//'#;dF3 at 8:Jp^Za_$O-h*2NU<MM$f>LSK:,?=$AB]?UW^$:aL2cirLd.4edJsM$R8WNN<=oQ=[?R[4sY.o$/
+%c&0e9)m/'p0/_@&ZaR6rYO8*Yl,l5#kbUB=aa9=*&/4XoG&,9X24#nS*5fVX+de.HAamf2&XC=&Jp)Z75$"SJs)M]3igG<G7;Yu'
+%YZH6WHPfQ:9P7lWltc'XH37pO*3$T.NYQa%W$(nFFA\C_n#q(a"Pu(Qc["!Wa>(1QAM]B;P9ljZ)uMgq$#V,FEuPHR"*o]F]ALI<
+%0t$FTS`1>U2EDJuCc`t_W_']!E"ZR2H_C]7(JJ^TIleYZaYP"GDFSC:4Y!FTbr&.Ig4QprU:,GbD\%Kt"BINh?&D2.4VK!F at O9om
+%E=3$!%aFZhMA#;5-Nbi>CP"r6O-[aWlclU6.b7E\lqO;6aF2HEjYf0/JDMHWg0$@18[?Fd](M(7]Ba8cAjZ[!:7ebUF2$C$4#53Q
+%ZW_r7YL_r5juC*;oq$%dIkGK/o2l'&rq)Fug35!"P,IG>:$PN9d;=4Ab4T\>rNlKddVaGtW>-aO.C at +`+*FB:YE6-]#0-*ql'30F
+%IZ/,)G2Wb^!DR+)kE,H7m"M#VU![=1Y&r*,A*0NT,6aujT/<c\RCM"+A7Rn8c)9%%M^ugZV.i^Q>i]<F1<54dS-iJM.6qFmW'g&B
+%F$aXUPk'K.":ql9cT68Wo)$ZC)d`??296u2MW>T7SYr"Ui7R=Nl[`rC3VtHqVO8u;i'%.0-_[iUX-5;3YRLN$Ej7b2/o.)4HCP1T
+%C.Zp#1=e8S\$kO;miu#[fgN:s(D*3L?i<-`mY=_YOnU]O2UV1C/P7!-am.h-goXoPIr'6[5`JWII]p9d&$Or>Gr"UM6Rg<"6UYFP
+%lfUj-H+A8 at DXZ4prmNo!.GJGQ/3$<7=?b(b0oO?sVp:3Pe,?-$c-^Zk8s%8hFQhN6V:0S at oOQc92`VdDZubH2,m%p%O+S\smbkP[
+%?l(*h3\i.!m:f__p/@<*p%Oj#B$K)ke43B3XSdCJI"GAn)?^1`$'WpV9C4+`85"5-mB$Q1>_Jp_O1!UoY;\Rq']$FN5:>KdCm048
+%Cm#Ho:T3BC(s3S1H%2]M/3mPPSI'3plka-u:7QVMjY*#TUD(2inPAZ)KAI&cT/G66EP3="2;<>tLa<(3;7VuNG@/*rg^VOgm12E/
+%77IY)@k,hIb2]rbZUZJaB\aGDNr?q at d,7I>k!IEK\&+?Y8\1HieSRg2!D:YEY271WZ-j[;TKb:i%dScOopIqPfo&Zui@=Na0<Zq;
+%H-'\n==Fd<(2 at S5>6CGK(am*E>43kg.q3A=8_eQc,m1l/IFYX)D/J^biR66Bl6$!`QL&e(,NW#kSuZU0>4SW\0l.0Kf?!u`HZTYU
+%Pa%UT;IiIa^4UW-"lG0'!>R[`9WK)E]9^CKZ4O(IhD0;qm_]at&G'r5m8W20-S$j6MM5>06?o&QX:;'M\`^G*2'<CHJE`aRcj:mB
+%UYc:KL:W'1%)f7>EDj/mHe?E^misZZfQ'lmaDi=J'6(JJ$R%P,nJgp1atcPA%=9^H37)FcHCTk(]&UIXXO.[*73(J1X*ci/P!Jl(
+%->A\4 at b?#k]%SYFm<nuWQ8n<I4mV?LQ5KSS?#4h6Uoho!F'eWaGNoKQU'])G'P,7&CpnbE[t7><9S6GF8*;h/\t':ac6J3g$Z/an
+%qT:'G-^+NC=l;YMOr1X1Q+5SX-J]rb"U=,nDd>b"e>o)cnu#4u.q<>M*;>pY[bY#1N'6SsR:Z)dk7DC9Wd7 at Ba*4]<[/!]MR^)#1
+%KJnDr01k,%r2I$s-iX?i:4pWO>1(IUCcU_jnel\>4^BKMLCCnG^Zi-n1O$s+P.L5DBQrO7qe^DB5*pneDrmOU"@\e'J)5]$Bdpe@
+%<Bf8_=f at Ph@?Dj<X`arTP9<,19^(AOXh0kVk^?02J:'iC+=ZXpHj*[q=&#5QT)jL&!LC6e(#aQ/\fj!Mlk$9I<1G(<Jrna3iZe]n
+%D<!dCX,^p5IQqJZ7*<i?$%,\b&.9.;V3tBWp\Yfd]E,6^l[RZ`h8\2lm+q at _[?40/bKZH^m`WW-7s$9o0D/=>nTS[.YiQ/-4VKXi
+%iUkk;7Ol,2q)g(IP39ftp6hY5'Q.rg4QU!7E_t'^JgW)4h/Y\=2s$j=)ES4ojcl#\&(L?uF-1P:k<812 at A"%O`=?i2maUs at iB"&F
+%^9j(*rY.%CB60U<M*?.ZEOG'13rpZ50G#Kec;!5m]`IX<+f#]CcTBuGouf6`@R3aknkEM-Si<^?eAV`d#Hap=:\gk4+5o%nrIUdn
+%l2,&n*dNK2du@%aW6KbLFd[NV,uU($nRW/!bCRW+dM*/$qqtJ#???Q0HLn0d_c9?lmkI6ZR at BRD:n1e0k"40Qrq>IaaZa,`V^K:5
+%jSSp&cmPa^MJ1_#oW%J+^;n;I8`XF>E]hFbJM5RnVcV!;*V.kJ%2q+C?eq07FDh6Vb.Ba%j!0OV='-7k?dYafH92oFc)gtUH%B5a
+%F7g/?oBXa8207'RjF=lCRBalY\B`',I9a;83PCdk!sN0^7<VU-R]R&m at V]U\GYRuEPgcEB%5gA#6 at U+^0%'CIWm):<2g925S at go7
+%52RX;@YoD*c$8<"dLT*dfZ at PROR:fD3"TSHkJ3F#X!.8d!bDJk#X5u*6/^+aiKI`RCUCJeW0k=GZ4f#9eA_#d3LH-K64$%$(5W:j
+%pB7sq&B7Seh48lcT#b7O-FD-(o&Q>M'5VV+Pd006H'V%lq.2"**ZN4Jl8D9;NL5!3e at Xg5s6`1l30.Z1Qt0]m^k<9=YF!X4YrPYI
+%3m@\PEY<6?>e.ak9n>a)F%giZ"H+C`MoHac at +M,T2$3'];jQ"D!15-X>#rkbb/GXTq)ri)`g<\]n^g*5b(O/DQAiB5gspK<*N,[Y
+%YdIUhUHkEl(`\XDN- at i/3D$-1[i7N"/@I<a:H_Nkb?k&"]t*inipHS:ID(Bjc:h]la[*@N/%7(JM7H6aP-N.3$#J>hW='F at SkNpR
+%IA:@=`n:tGNCd6N&l?96JfJH-bn;h[niUR2I59DMHXj^)N=:$"*'$U>&^?]VO<;=YD2cJTN^hIY:!RV=41=_q,(P>n"V0\d"Wf&A
+%VX2;*^,A=C=)p#?D(=QdOd:N?_o)k_)#%].gJ]G:bJ:]7qV:G_>@#m?dWjN$'rio7 at kHgNZqh@1K-">DMZ^#!;4?31>u?&H53Aj$
+%ms!lABLfI9EtLA*,O[QG!#_@<%@bXsoTWeI6,7L_P6ec<HnM`+=&ZUTpP]fj\Wa]6IQAm=pd-6e'L599`ns'Tr1'X?W(Cu*`8"S\
+%P8BWpHR/.ElD8/i<R at pVWjI0MWQc;_O;h<*\Hin*s'\D`a#P9d3td]&,&\c]CFWYk$cuZ8:,&(+L;UeV\I_dM5']R`O)n`.YYKVn
+%^Kn[goD/dSWAeiZYLLE<dW5#bT]ZGh2^!>r_/m+3,/,F;2B2LGag'b_kJ6h>o<0&+V&5[cE;@?]3a$o"dS[a1B$V0ds$Msl>M0gJ
+%@+FZfOM!@m?1SukIL('h,L'1*QmKaG".5o0!K9.J[n%e*ZkI<I;cCB^YV)ApY7_CH>[O+O]Idsl9ab`lS at KuD":`g&$&5.D>i*tS
+%(NC at OLGX]V1XLCbN%7(AI=a&k]d-?rGsesEci/=!<(;s,o(N6E**0OmID/=Y,KGLr?X@<,**!Y@@M&<+Z0-=IN-T8s^LLhl"(#Zs
+%Cig3P`*FJPNQX3]T-jFhUU-oN_)&L/m8'p=2lMY^9%0[dq,R`_/7+0W$NH!.GUF at V5>mn)#be;F=.?!-9&u;d,)C=$%5RH*<E".$
+%9-<r7=(op at n'/`U4i!M\*;-nuRNNpO at p+)'<<CNG0hb5#B6p,OD?l@)p<fYkoQS=D8Id.*dLr?Rck&ippi2l#b-qNfhD\)ZAY at h@
+%X-^tX?dZPAR!B1<3(N.!CuF*Wkg*]!9R2KJbhf]>8D%6lZcu at WFr7J_UM`X at ce51M\gY3.gcp'g3V)79EWu)JLXp+<6dXfP>(U6m
+%D>I^_S91f\*V<#"ZK at KMIAGG3+iqkSWOeo-l7Wg*N>GjZmn^e9mb4WUaL-;#@e<--I*5%F8)!Fhb%ss#!m<QW`9,J.mBP8gXf^Za
+%3+OpgHD6RP<)h*.a6C%ie)'"jhGFC>02/tt>I^AuF/bO8GLG>(o"bVijk)2/Z;XdL]Bk_6=C%HXc-dZ0<2YA at 41fC4>_Z)]#m&Gb
+%o#Xhr<56QT*T4]q&f&Ruq7$H)hePpTZNY-+q`WpDXC=#LK1Jca're^2P4>l9cREPV`d/YhY5AZHh%/Y#q5uR]dOmo8G3ZIK?'kDr
+%P`S_"r0[\5fjSSFcW%Pj*S=nMSDh=,Ush^W at njWc(iXbuMl'PRA#?edc%sRGUi3uiU`\d"&La+R\KjhscTLbW![DU[obu[9nS83k
+%enI:;m.[*aYN(C3aN08\pKhcIE[_`T;0P1d at k'?MSXu)<2'1=J*:8&N!,>Vu2'I;tXIW:o.Anm+057)Q at kQJdI&2\7fE)E:(o+As
+%gfMAWUJo^8)GRbj$Vk7XlWFQ%9.Kb-S[hn:'4kO,-Ci9hN;U,W*t=_[_:4T#jWhFT'\//lL`S)`Ui)B<8SGcXlr]pl??K.pda-"Y
+%6:S1Un*&;_Tg[>A%K"0a5QX)9W+C2tbDr.N<:Z?O#B-7=T&+8qS/)W=e`9Gup0987ie._=]eLHI3glng29<,b"ls8!^a)r8^G[!'
+%buDsp9H(GjDJXAql^G\4[)*nSQM7Jn\>BMaqZ=U`4lmT!Lr%j2`L!n0C9*1qZ4:ULPjb#NR`A'cq3P0%OuO1,Pp&.t(A](1[l3UZ
+%M5K)'/=+r1>tC=KFuH<%,?"fuh;_+jU^/d*gdVokX^l5(HSa4YnCs*656R]#S]W8cV;X.mA]]<=XL7)_;0ieESVDE8Qc4^+B46m.
+%b at c&nJsBba]?L%K)c`nL5q6*!BZ_XX('/<nb7d%R3tE^Hc?M at fk5SZtmSZrEdJY*>aL9;+d8C4r2gbZ6EjO%V5`1P#pSTY/b at U(b
+%M9nt&keW@`1\KHSMV1>^ptK]tSA4=cTZlO>9TARX,gc#8RAXe6a]D#L*k]b<_o.V=iY6/>'L$9>",D>&HE*ae:]^tu)],TUMt.u3
+%A[PfI(YLg(`,k^./GJ8cQ$iP0[!\cbP[@JW?I[NMiI@&SG]5rT;BUIj)ekaWQ"+XE$m2`!07r;K&uJ$q:P8\MI6*t]`g\4_Pe(9*
+%Z^51JD&t\,?=d4!032rIK at d3!-XWFlFQ->9*5XHAm>\7!3_b&[M0U;0!m7tWCeV498T5n?e6\*r&01?*4FYdq3lcG'KL"Z4//Z`V
+%d<t&:]O2H4K]_)iMh76jpE*"14sE"T!<&+./cq.kr38D_:j at Et3bq;qVV4!Y:OEkur^Krq<ih`.&mcl-*UrgUm4S7'RoSSD*1P<X
+%32eoE_Pu_C+u<A,gR@[!H'Os+_TMj^&ss\G*4clUIaNB8.+ADjn8(Z#:(04/8Qma6ED-(!'MkT7h9e=ZD:u:(Xf'mrF2)]'=Kb8b
+%5Q-SEPG"H^A4aDjg;Kts7(n9d!om75)8'Fn3cDKE at k2Z(mSp_Io39Bl/:_eGK<(/Ge/&87*%m/XUG3;(Ps'65;k1Mpg`b1`[K;_)
+%HNp)SF.D:cK>V8u!1^jL at QR@es86)Yq,sG4:GcG5V"t4(%UGCp at b[uAEN#$4o>Rmk\1V/E='X288j+E@[bo98qWa#V=[?4"BCD(3
+%b;(KB5VW0,nc((aZk"JiaelmR[O%*5,eC(=1-iq:[:hsUkLPmSfGZm(g2ZlLCo-\1I5g6=<a*pp$JrFZKITrTA-uetH)t4ukK&Eb
+%__HssVVKSY06q5CZ,,"J-Ii=(pN9Zb-%OGi3QnZ&0?Pjc.U#*0;LM,>pVG'Y$lAMfjbFq^:2dalkEOYTK>12NBXGu]4Kfsfm3;jI
+%CQ-2SbZJ)?-+E;hM=FEA,tXB"6iE8!2K2pfjukZ>`gm at 8&M!'6mWRU5*uVP<Kt/(KJo?[p,OocV_Q3N- at XA.Wrna=r@"#jHPMM4_
+%Df=X[_J/:\rgZl;lkF:]6,Co,TO-F7o*&3 at X/>F'7f>DujCm,I5f1YZ:_9fCr"qF/>IGf#.;keA-(\!(g/#]b4ZTN5IJLRKNI0)o
+%Ck)/:@6cVgT!H1V?M$\(n?b']Xgf#>?\>-$ndRaYG7)?S&':s6^^]&58UT*8g*\[=F;n/t&Y>m#J#pj:''3JVKA^g9nUY3;)MUY2
+%?so+VSVIn%NUOOA>>sn#g[i%SPt<]E7:ea<Vof]mbCTD(].Lp0D>p8BfMW`1OL(9bI[FcdUfg2=5B<Q-I8*OE>tQY at P*&3kJHj0d
+%Z<of0W?rHuTD*>o^JJ4D1IL](RgpW_kCSG.ieb#5Wh_,,=",mu/=f:EI?=>'3tnc;0cFeM$6 at EabES9A(jgj1j;0)G0=g"G^>+<F
+%K&anR]\C7tG"sV(<0Bnmq.$,=@1e_Qo8T]ebj%lUau&p3J_0?qh&(EZ_'b('<s$E7eE,^Y>\a7;MB0sD2u-iU#RqQl]fp`;_QdHc
+%pn6h\RG4B(9BI*k\oLO4N:1;A;Nm=s#:B[p9-D[h5oM,YDsN@@+V2nlbP^i=O_?$*fXu#GJPPJJq5FKPgO0%sfUjnpnajI:L6#:1
+%kZBO8G/l&Q at q!dXJEG at bOcGf^DE^?!W1A[&Y"V%T3nr%@bFe^J_c6*EE(kC:jm.hP'3tBa#I6O-19p8`-f+LZS(k+upc<VK#.A-W
+%0qk5B"L=?I/LZDdNQ7Et97)tmhjqDA=D:]V]q.5]:RWj,F&E0JjRA?B!]tIGF.jVDOh:.#j-PNcc$agb^'S;K(U":C=ZO*$pL9Nh
+%EDE8k[4eWG!k@[[k)+HGE9'7Er#;hUegY^j8jXb1*(Z3Q]PK$@=AQ)iBqJC&A(A5Z8?%uE>$P:K/J75ph3[_88VG72;dS?A/;#/B
+%72G`3)jNL]s.(\p4qM_=[;siG*p1S3T%>)YQ6/I-R)EK at qeTWr,?N.8GM01WW&[2DGk=DYB%)@jP!,Z^DD>stg1I';"l108kot#c
+%Xt+VZXNpDd2H?I`P:gl>BG/sCUNX,;AG&9RCe)Of!TUD(p2sDggthVYpLKoo=[S"@^RPreqibq`"1_.*T6jK=R-uD5g'\D!8O8A9
+%:+/8=,aZ,o;d>iFcNBQARWTQ$EdaSPDH5lRnuRlFqmOZdS,FmDWe7T2lEG^Kma?sjNR1<(iStVu:=gr>c at jhLe`WfC9'+B"9Isc]
+%Hf&TdS@[(?*ZggTpn4%jnmH=!FcS)mDDGL,*3$,(2?GBFq2<#`l1HmE.].0S27>X=`94ZcHIE9q75K`cXKuts*#.L\5V81cKWom-
+%2R+X^k_p[%-;rr-Y*W\Nn*=%qQ1k:id_;k_GW)1%ALdOMB@*=8\!V1qUo]Q.=eY"d;/a$De at X$S^O4R$6hE"<#,f`n7_s0'CsDj0
+%GF]/4LPB$#(R1ls*%;TQV4. at jkN,0YV\8I<^:/l`S3>EM'U6%q at Fs7=A`HBb\M)V.G9-hg%dlMjEa1F'8('fBI9n$fb1'8A+p[/o
+%qdqkXgCeJ)*1kV'K6\jo9M>!?8$QnHBXki?04$\Z8:Rtt_ciio;N\p^KULd3r6RKB9tk9jffeF:[tY(pMu]sBQq^k<_pjmXB^9tL
+%#oGr_=)Qu"9;2*ifmMTa>tk).4E:MpVf&3So1[*ak+tKe<3/[KKCuDQs#I$.;S[ieBH5#F-G_b+/`H3((5j1JW0)Cu_XbS`-6_g%
+%LY8WHlRa\Ac-YOP6s#C'2fYrqUe7_tHuHO'Oj`0?1o at 1Cft<'_Us06OWRM?S2(+#=m9*\n,]aD.AW7<"M8;C)XqI'B"1cHX8.&0F
+%jEi0kpZ.!kF at FVDH^UXs44>B1B=?,X:>5XGV$?JZ,2`r=$q4L]U+2IERV1P&FA at V6OroN$eRP?@p'#)2[RdZe'U(!jpa%)L.spb@
+%kgAsi;j!rqYrc#c&N<mhpW_bA#Vg;mhWtQsLAdY3dmj9l9CtJ*mH0nJPdlnI2tbhD68b/G.s\4?MTAa_-&?Gr1d&j*:VQGj::^#C
+%-=LCZIHDR5%LA at E=6Hl$<1U)=W`:njSQ"cVaQ^J:L5iQD<SNoLhSDG<a5l41*%+X*(gr_`3.Ld=2Y&3"%"ETD,4 at UO,dLs%aMTLd
+%AH&r3[HbK%0Lu2e\YK#Vm0pZdjqFi!.HetG4[m5WhniT.fuOWZgHt1inq:igSO'i!XEH4FCK&qG[Ff$&Zf0S>ADc<[cE7n%,/u9]
+%;p2.FgUX2Ha(QL2Td=FDo1e>b.QJ+"T`0<9?=o$IhK,0LRLTu#!itCO_)-&MR3UV=&Hjq7ROLL=mdt,_0;u,ibg(moGJ&FDc[5ht
+%#()q<?::coh6<&4i!E3PDm#/P\N7Q'PMJ-\]kLhd"V/.["?05o#[ghVg?Y!CHsf!-Emm_=B[tIIp7V"ehOotB+2PO\lK8]sg8cQ,
+%fsg>_ZJL<tb:iReY,Y'p.CYJ=Q^b$G*Yb!Y=70iD"8$:L_lKieOiYB9/p5Lr^$1Go8e0?3W;%^>=HHjF?;(4Fg!&Pi9`(\63M%;a
+%KDp<:)Wg6iH"=;L[`;Im""3kcY\nK"lscgp>n8aNSHm7N;P=,TB.71+,*dhE7#1\Zf(R.jJ=gBgKDDKiRQAp5qjbE$QI32<N;tfh
+%KKF,?+C+1n/a!IldY\GFn`:$uVq06K-D3Al,p.#-5*t<8`^0%KP^E*Um%\I=CbNF\Y5*ma4K"1Rqjh?kN-GtHK'76PNYhBg81_l<
+%S2)FpSCFHQ_Nu\LE.H\`Hs^.E6&#\7M]Yk@"F=2;9VKp6k69q0TMJ^ujn\!4mbC\AbB%&"L6si<[FkIPCk!(r%Lm%P$J,OgSRG\G
+%'a4uFga%t7;r'S*o/%QCAcb&.VfW9]:Rt#4XK68d^c#Yd\2I$[=5M]PoehpWPMl3+I#<k7M<6c%I3d&(9EkDb5J5`l-RSTX[f:dX
+%%AQgIh)=R"Go?f`McF)2MC!L[qs/Ye`*6j%P//8R_p2d=<1Ad7f]Iq$I`bI0Ki3is>[UGr$X9JBo1slqVZr`T7_^s-,hd=8T#3m5
+%Wii[)Y7H4*;D42-_<==SV,s6ePZW:[%8,oWnqp!Eq>.);fp/`T@"Q_u0mf-!(oG,/Qd&ojD_261%h<sGIm/*"]Oq/aQ[2t,o2mnm
+%O-5]p9XQRn%*$B5<gp4uXG>d"g/\p\]FkENDdKO*P/$R_OMKrG2VsiCo0GR"8!HcmoSr<e?;i=".pfcPoKWGX6FlYIF5n,Fm\['7
+%\LB/F:S4j>kH19H=qacF%VJ)_q%sr'%t3oQk:iapaBPH*g#iQe9!R=%f?__o2:guG$q,b`J8>2sEq2 at l@(CE/;_'4>YRF'bRM/*8
+%l-f;5kREVF\B5tAH!R"PT+?5S7f6in2'(84N;5[7P__lH[flg+KK;_<nDN0m_2FRr,$de5hkLgQ6E\+OX-;\aW0QTP1Cn2$O-u(t
+%c&Lr48HR=O^i<-_1cf$NYeIDheNch$g9/HZBVU,DfrB%i-cq5ZQ`LphXKdN2p?m!9n)3";aR[SM\kT"8]Q(9Gj0N5:^)C5tml`hN
+%lcso.JL`&<DbnT at lSo'@Z4e)!a%C4BY_o;s8;M/]XNF#k at 1[eI@!/n-Pi28RcJ.@?S##U;/8nE<,j+31[!JW`X,kLANYH-#D%4'J
+%82lZncE%,=FN1IiejQ@[oo1)AYhM%3V,g6rag/f at nP4&UF)R^mVB5%hQbc-3*J'DJh*;,f`bqh at Be&i^>Ek+8/qW4fEd"TpHhLfa
+%`L!dUK&cK*^5qD*dR`r.#qA<Mg_9n?P]<WpX;22 at 5&Z_lh2d%%B'qKs%NbOMr8IXa\Rr7U`(&#j,1io,.3J5:DC4?FOU/4$`Fr-*
+%Eb\5;gkK)[,k.8?I?3Ff%'`>al)0!SRcN%2MTWZroO'S/+';:Z_9R3KS_93ej]jFL=,n,'F;s!>b at fkZP/8\/kcJsi8>EE_=Rl=S
+%FDJt\#u9G<==:5@`da(1=lpuOI0eh]6'Qu^D'_!g5T-$eSEDj/FK[8&5(BV6$K^ZPO0Xk]0'mFQ'aE/`qh,r)^.b-M:1u:g/&+6/
+%Ofo0"]UTSKa>7bQVfUY^@XD]/3AjJAEp.9MgHqX(<bKj"Q!*l6]JQ)Kof5eNj=c<2WK4Q<@bOdrP7;mo%BS%h;e+)FT7o52os'^2
+%)Y-pO[VXE"S3fK<eA$[pVp7=,O!F\b,H#YN)LpXD6Qco-e34[bnftS'Z,?qf,`c[qcC4?c%QuD4E3N2mfL+\9;)1[BAUDD-?^oJ$
+%A]h,nL$EQuG"s]>Egs'6&'N`0N3>MpkaoO'('F]1L!M+i%dMul<1G?r7EdE'dUi$Z:*F366_D'+!8WlEq?om,qDBYLAn6=;DQ5p-
+%>9S!Mdu%b&+$0K3m0G4cBBlfRD]8't. at Tn*d6Ne<Z3XI>]=.*7PAZ6G_UD70ZZ&i_H1OrI at +MtbPiFdTjeeuA_/jM;Q-M\W-u:el
+%NqXF?=3GHk1$t<(>uiMJ2n=E14?RiUqo/r1-a.4k\"U-c.EQup+WIc\*.p#K^>A7"l0UtF^0Sokiqa93[B-A!.VIu7-'0HGk:a&g
+%,K61Op!Q:_=\4""%pFKW63V+m!dS&$O>m7gn8kqKOeZk7!p!^_\TE[TCmWk=FqC^=3rplE0ej@[AE9fQU:cf)09`eZ_4Uh%hVW(o
+%kqcGbYFr.&V[YYc)8#d2`\PtKK%k+/'AOaFRTrdmXp5Z&B19Ng8j!/Y5+ at gIaiF<9*!*.CrOlST/LURq2Oi;[B"L'KR\rL;$N4$n
+%/r\e#cb"!l/NR6k![G[aQ#B_i2u0[Yek>58(3/^=q[f\e(VmSWEUkegk`$icOFEtm6<]8]c=@aihScG)+nE=q_<IW6[Mpf'c[>DU
+%#>u0YQ`A:C`MqLT>LQO6Y?(!O6 at 9)FlrWf=K4VG>P9bu:*_LDKEEC&dbagk`brc0gG9C at 5VL`mqF'J5]!n*D+ at HnU.c_`:,-"Rj5
+%6DA)B<lc8<Q072bT%=ZIQhpEKrn=5AY.%jV1^>X(0I9Qr=A,4%fAoX5]Mit)op9`Uh7pE$='.bu/%cpK#H5n(H at eWq+Ug`j&>$)-
+%k`iN^%_<([Cl7RZH1M4iR)dl7V`pI65o=%k*2N;VLU,<jd^!U3*`DRK\+g9LV)<3e([V(fi:FjhhHWNChShB,=sS?;gZl]$Sc_cg
+%/(>Co[G/ZGnmK\BF=G="M'8p+QgNVh+C9#K-N*T)4arFW_R),n3JV]tT?X27J5Vj"Juf6-VF^n=)KskM_9F#*D6&koSpC?L!&Rb8
+%@.(7iP+ut2o^@O.E\Koi(-D'iR:^4UEK,J8hjLPZKd at F,jY6`5O1fc'[3J8G1uC7-s0)`)!>7(dl'I4qE4tMa_J"I7#[M3<!/3bW
+%_o!^WW%9\m197a9aT"H]kPH7i0JfQibM-E(b"VArI>RGI2d9m3[T9j-4_/8-MJliJnk%c!8c-:BaiMb8SWSSg&4no<<.'^dY]XTa
+%0d65ufn+hEh<Bft.?Ft*//UHnoQEE`a,&+;/FY[&>eM8<-`>8EVRIiD-VH*97?p`f8IDf!VC[a!!=7(6,Cjm-<1f?.1t#8tDPt4-
+%K;p<%O\d_37;Q!`J1$hDI$A1`$<WR&pUV0hm`:1V6SVa(ieo>n'h"='kZI1XS\'jb><N]JD_/SRPe`KS>tmIE!45`SkFjR"dp`!j
+%C57h, at 6*5FII>q*K%0iAD<#@H7W!O^:X4%O$.3s)csa)&Y1ICjZ4q3M:F_U2E;$P2WRLN&jWtOS@@W3ZF-iUJWGUI*kG7O3O$T!u
+%L=kmYgXU-1!?MX%6;WRZS&MF=CR*@S+.'S/Ea;nQ<J,qJ1EN8Jlu3B`hG4XkL`<!%L]:$N<$2E&Y\bC!,sA^gi5L]>3.j8uQR%lM
+%8%7"5/3mF9,Wa7#N?X:+OZB>&p^FbrH3^bJ!4lE,jt/=H8itn/3`;YsP@`m`WQmg7<LjmVC;+g$D\$&A^g.\*&)7E]@ZUi:LM%Gl
+%(L-&.(`Nct"M2aR.IGoaW(^)"I^/cWFX,=?/B5#(*^0o,_/#K+N7h+#Zu7"pb!oL/f2t`/*-sU+S&Y4dB+eRkh)U)0Q%q2o745k0
+%WU?Vr]J>Hrh-J#GTD+SSibfrJU2W,6WpQ&EVm]5"WCg2$S at 49Wc,4-+6Dr7,PuAr@]Qa]Nr?f9+W0?9&8s-fJn?1@@5)WB*E^u1-
+%Y4H2J at 6;e&4.r#JB.'Tb>t"m>MIHhcSUGZ?#$#9H6c_Vn[_ca(;Pmj9>WV-aDmHVTVP=Sr!rkuJCbBm+?@Ch$SL8rc_\;[LW8bP6
+%;?`T7WF*SD/#k?D!"aq)FGF/Sm\bB7Ndshf*pK$QpH42dnV:,.eMPX+Yb"IJWG2]H%1]lLf-9]Z&noCr2\M_8S9mh`^k,2`,["M4
+%r+n@]T(_2B,%JOfarLOK[aS:)!:\E:AFdQ^f3j`s at gCGYrFTtIP<GQ9>7&aV1AC0A(+^#Ya@&ot#G8,\#PDg%fju13d<8`Te#$7?
+%/:f1f^<<%aX^iM)_Lm,\/*+cPcZTI($3$8i,s.t]Pq"K7RUqVFJRastN)*%e20t'QQtQG.02cVPEDCNCMjLF/S0dr2icfKB'rb>.
+%ZgK5$Rr`"Y-;$K/K]qttj5a0JOHcNiRk<1n"Ad>.,`fK)Xqb:`<<To"BTd^j<Qf!\UEoH8V?lcWdra]4_""q*KIbAAY\Q%R_kZI<
+%8f0jgUa!F>^,s/Q[JUA,?Cd284KHI.>KR1?7d8aFekph;dig'$Q\3_^Yrq2kZ"f at M%h_'e?0]EAp:_FH- at mhA7ae*\D2Z?%&.cqE
+%q0(+i4cG#<ipgMcc.Hs_gdm)n`/o at s.h@5WBa1XbAc)&BCTYVD1AEh]PiNe.MYiQ3aGEf=74IWr?)3S*C8-'afmt#MMMKr,nOaS^
+%A>Nr;G5XC_Fm;l%+p3i7,:Em[eOsm at 2'Fa^buB//ns#gQhXN&leNImS.BKkuiC'plr$(b,KZ<VRi'FSV85Dq=V!)mXM1)4T\TRE]
+%4#TPoL_0mt\0RYaEP`ark&VG]HTG*, at RO**Kr+ME37BPp;.U^n:E\WBb,Kn-\>NJKmU7Tq#2F4N*de,6C1lTJ]^SF7`&&i6G0etM
+%]s\Y8*nj1PN]*qA-Q!A9)+q4YeB&g*]#[+ at LLs?1Z.Q7[LrVs>%1*GTbK256<1-4T'6c&=n!TF\<KrEGEjI]PfLrm!6$hq`QT-Tp
+%D&lW1-V1c*^i4H3,Je=:=H?Y2!`cX(q#a:@4LEh=fKW?M8leh12,sf?4re0A'bHLHVMp3[PLmf'j>mGL$9?:EVe]<_^eS2"n^U^s
+%4d%]1A2ti4 at BT_tCeAH/NTcS">4op]N59[R6)]/"V<eH5*<TEfDMmGt_l;FhWhf$ZY_1t:F[$l;RuC(ZiWZ=##/Vd[;rQ;ufu3<S
+%f#N2>okC.bP"#!pm at NlpWc+/5Z`f.HmWP2'F?g;E`jTre$m/3ZYHmoio2s/o,!M'8#TJRH@(SjNG2K-+;[7*<l%#FXdC)S-ZTuYj
+%M),ndi_Es4`2j_GBF'&>CgCW^,RAALFclV3Mn<@'Orf>$c/iginB0UXVM=?"NpK`9Bs[8QZ#<r`?B=AO-O!muc23`aQ!d<$4G-M8
+%CBQb1dUj$B at 5I.7X=#/p1(_J-5@>6<)_FW=kPTp($fGCcFrCu%2E>VW,Uqo33YDp1WmelWQ4:R^@')e?&;b2<&Tlct(HW6LBp;+Y
+%#$qTSm9A\7V.^agmdlsLl3ZOSQ]n=j1EJL:fl<IMg25ac^nh_m[>J1b?16]&XB48De[,6b=6l@#8Hrmu7u:![fKs9'lo$.kq2b2T
+%9](K6r?t:r84(koSRC^(kosHk/g#EB:MD^<7jno1hUs4`*[V4j4(_FHYcS:,FA,kYVhLsI?L<uFJIOh]HV7:73m+XG@;)Hn2N'RX
+%&f)3eEjgA+fWoE&)#?rcZRFL<7Agd7Q`4,28q"[99SC+$_N.?'ptr*1cpb25BMmb/SM>:rB7nWEI$qWGc&6#nUbPT"4F0Q#c6F]Q
+%a?[l$PJ"-3X7?Q><l[,?DAoKW/=csKF9K7=7H9n9JmFZFln1ofP#Ia#E-tS-BWptM1ri`4),->-qD\MF*bMU=:cMEpb.eNN;8>r\
+%C0T`F1BN?O,gDRtXcns#s)OXZB:!,>G%RgsLm.I5=``UB(J<`tCgq,F`>XYOA!;9$Ei_St[Fdi9p3$k]0mKn#KshFel(Rn&VBEfn
+%&BZcq-ZW0VF)at7%/G#[$*B[KjADq/V!`Omk<lXOfbWEBEm0L^&Nr3gYff)K;fg+,r#sfM7XC]&R9"/<ps/>3mC2*99:(Yg><'r-
+%E's3,$b+P9M\$DqFKm>+heqFpaRVX6HlZh6/.G?jS'n3%!HR,tAr at Eq;0<gjhM81?MA[4aV/0kba,q7nd8ZW;iFC%F(q(2lBU-4h
+%'d,&I8bW*`m4dDM8PWo-`QeP-"X?T8"FF`VELI$'X&Nqrc,e;Vi[7EL:.GMM_GRROOHKj0kB[LH/n#VMYUM;b;q1.d>gPr""*'"T
+%^ke3mEXZ`:$Qr6XPat0YZ5ntEF(eiGAKTXt\_5+F9Vg_.:;N8X9=o$]/1$RPA\'.R`bA`g30O^Yr'\PecA8%DlmQS/N4]XC8md`$
+%Nsqg"3bR!ECbe_VQ`AP[?ikLQ&X@"h&?B6_atUo?2JQ\eGQ?/a[:smWX[j-Nc0%..8*lu#jVG0=<hEYG'j:hB*k&GpNWBm>01a&R
+%L/$r^3T!TsV,l6F-?DDtao5jXI4.+Y*2pi:%?-"%)L1a]N]$K-]$50sJ,(!&&[;p/X-.YoErRVnhRZ(HK6U9AS[3(3;A;-o7p$r!
+%*&ua#M at qRB5&N<>U:QLCP4)E8d$MkeOqeNjVj>Ls2uAi0d- at OI^\1))=^lN^$;2$`#c4geilASt2V%)W\F%oq_`Yoe"PH^fS5Eum
+%r7D,&F7(*?O=sbaiZgto%M^gscuVm3a"/f$^*;.rGna-9oYc=iJT#[uPM=jSHlN+tkM_p<iHj"PLe"b!]E#*l'gN/>>Nq;u0:"2H
+%QBFIWW\9ElK^F&I'n&i`"fiXHbM17q\QrFCjUJ:_F^d at 6Q4:@!G425n^4LtuX3/`(?GsA"RVF,rbMJ5k(s+!t=Xb)OOhbh"aqZlp
+%7e:tBqj59;. at nOqip:\f\A2L?;u+)s`&!_/+^B;9I4G$a3S5!W*GA)<_uXC+1]%]gLR^!&(%o.!<X-d6`]NRc^#j]d_<apiBfW%7
+%qndO8ibqR1T!C#%Y?%.IRe87.o7OAelRoUi"9Hf5 at Bms+iS5S"1\bNY*/H6f2Gm$i"<)^,`g-$a*][um%nW>SXG`?a;F\hSX$\i>
+%5,p->J:$YKRIoA^8\'%FDrjib7HeSH4F46LpGJ*?ducX%L(eXk2RTHPU)0lnY&jS_SqH&2D%3^^"B8%hgf at FlPV+5Wg_=BVZ$(d$
+%X'2<\Dnu`QH,/T7o:uD.=:n(9S1/-8.. at M9.GY%LRoKYZ%Z.\6fq.B,W''DM+!;"_pk%PQSuA"e72rPnA5-3d-oHgl at SYT#gmgGG
+%+M4u'pT@`3goH at HTdhWDo4>\:?UaAljN1$Fj&0kRR:$ETP\^k;dSrR6l=7O7^U&YD-)W<^lA<b[=YPWO$BK',8oIW%ChlrF<#6&:
+%a7\h2MHq"e!.i&X?e/VW3nG21J<^,rA^D^Oo;qt6[Y?I`C!5kjD][=fp(UMWEr:IT=7C-thIrGmE`$_Mg$Fd+ngmN#[RQ"fPB4m.
+%$k]siGohiAPi'nVrl_#1m*rI#(UJQY4=3pk?/=@T+IYTQ at -20!OgG0TGhI%ZgdktXY\]?]Di6uk69;"q0:_c5j5lf<MIk5b!JBHM
+%:`DZ.bTK]C,\38%@cn</</c<!.Q`ip,%7(K at mgJCV7gRY7GZ.BWN6M%>YnM]i54GTdI%Y at 4(hj[Wg\S=;6=c)p's);1^AlFCh.4N
+%lk>jkW?Lk\PM`1]\rELcR#JV]VjR:iPWKp,a"gZE[rR\dd1]s8_s&"BE=ebGg`;"2X&;2B]W)U#NK:DDCM.upRqSE.eBYg(of?;;
+%EQ7Rdf/==dnut=DnZ+&+4^kqm6:cVA8E+kXp7NKK4^3T%-fS*HN#e`#2'Lq)J4)YeFjb=Qo$0A]C+di)Z)l2N8hs9^"#99tB.2XG
+%E_n].G7oSr8T(;(a.=S0;Jc[b2/^7qOu]s3Yf`928DY$E,#KsDer%Ck\P3N;:J$?>Zg9*3jYk1\Po*W)<S2K=-KR<bRAq:W,4TJJ
+%o#O>hr"1A"fV1qN%:J'=5B+n4g1.W0!?8b:#=aq&dp!N`^`hG'C!qbmfe2M0*Ou95OiC#<ZR?[,QV&CdZ.<YoZ"JiWXE\ue;47aE
+%NfR>29)>r'Qg.;Tk1CT5Gol8l1*tZrHYEoDs!^IYj9>VJYj)$3]j1]%.U4=N@[G^o7seq(#jMPt/M4rMioG\SRZcjnScE,-(@2^X
+%'bs=/U4,o1QPc"TFtRh^WuZT7@<M7M6Fi:C(I]AG1g'n1W*K9fhIrDf$CZ<;&oA-C[R&Og*`0=+/=,8IbA<:pII0ctS;p%7GRK49
+%J+5?-:bWTb2n-3.@#AX?bN\f4dZV6'W/DZ4d1r.!3))^fZ8koc%M+de\f6fN6q*HRP]L9 at 7?!=\+*)sP&O0eV^FI3>Ku[oL4S4mY
+%:;JQFCi]/:H5WF^d/`o_3qTbNdObm.9<+K>4boZ#*8kXs^&ZoPF,)kDd?Jo;9Y0?j.G98_btU5(;o/EEGLWd?12.uA-a,,c2M58U
+%\VZ#%LlX2n;c'f>nA0?VGl[5(,a^"6 at NeW2\YSD1B$;Oh<;k7(cYaIhY13O7M9adW#EGQ)#gOu$*eiY-GYFWYf`ERUPYBC7\HM*8
+%U^T65_:Xh0Cl3(;6V^*b(U)C0MC!_)b6kch@;b+(PuB3]N`F.sJi>m7GFY`gGa at YRFg4(WC]puc!G44B<GjQu9(L9i):p3"3F5*Z
+%2D!VIA]Ge3pr4e#oWYNK*j+U.\j(#XO)g![4'1*tQ\@U7Hm`_8T\c8VR3nA7E3Re5g%-7Rs/,A>@[j258k4 at k#I-hhco``X`?%;S
+%k09F<61_&I*c$%'K'5hd/9mR'-YAM.Eno3R?/:u\Ydh%k"KaVPQ-Q%;QotPp?<qiM+J;C?6gMrS4/mfXNFf9XNnH8$8paMOYBL8L
+%>W1RFdgsc$A.S0Kn5:^K\eV5%2rqH5D9P at XaVD;)k:BB3D.]76[]!K at g$OHbp%`UVZF=Ve`q4g4G9V*hd:;ITau>BBZJ,]#?M>W=
+%0BOl/pe4?N_HQ9%cN1I2oa;$WM3O=L^(I#0`)b&o4;G^7W(HDeHfeF74A9lO<-GfFTkYX.Zar6V&0uR*Xi0sh[c*_GoSXD8TQAld
+%=#2C_K,)f8FD'>@eIi'u86W:B2M5R``cu\'*DX#qKcf[h^D8[Cae(r;bgIKcfUZLB.*f+U[YXsMF*D]L:uO'jHa*bBe$HhqY%DW_
+%EhFVVjm&@MZQ1 at E!>*6[K9g8a3)He**DZr+C`Q.M3:f=hC8Ws'$1 at 4!Jbdneeo9<DQ0,<r2)XDbE/#YucW.'Xi/ScZPq^Z17'*Vs
+%TQ259H5ID484K3[gf4UH31`j at c3Kn`\-(7_:[?NpW"l+r?AAQaK-Dq9l7c2<-TH<a1DE44(XQh)r,8\-e)Z0VJ.r^]Oh`d+E\tgM
+%NpDGc!)`8=d=UOT>B^EPMV>"LoecDCJ at RbAZ]Sb,U'@Q,VrjaTCrGP,F7nsX._C8%iF-l)$>Tn)AIG3'Z/B_'9f#Dq)6hEg!?olW
+%71!OKU<r$_7eG?Q)5(!ThI_[$R,.)Fgp$Ojee)>i/IWaV]>dt3_mpdV.%:C9, at j%pbJQ-.bQY:ZY7C6co0<Mh:&Dmm[b7Og3Grt]
+%S(pt-#820IGCeQMnUo=JBqRbl9+-KD,9ClWFX[;,$*pC/n8*?SVKtro-1_UL4LRUo8NcC?gEO<W at J07W<K at Z'l%A%sm3K?R7H*Oo
+%Rd*R,9nEG3p2"$kXUA5APbr%tX6&kET&e/$eV-umbf31_&3qFBDmq0:S.!Xt9X\9E%/]8>K<p,>ZZ]2;:Uf&(-OZH>Oc/K85nK04
+%>"&aL_L;#\V8^Iu8Zit+PfRn8dVPDdfE<<aNoG[sn/KkB+>_&TWa`Vf\g=MpRMHR\aU,D3n\Ojl:4,O=]1.jsP'D_SP`!qn*SZcY
+%SUG0I[&a],b-FmtK+8L9EJLNI3Od<]@5#"7fWR4$@@[n)!O6SL)_')qddnSE(A21ZOX!N$V#)'4@/L2[DkV$5b?j<?2Yc8$.G<TV
+%4E-G;@!@V;7m,Or,q!9?Mc?t,[i at uN).8^r&D2NXdb at _8b?%MtK`!P:\<ES3Z>6ik]2Hc]7T@@pI;"dcW>/!N>s,Y&g5q37asnGW
+%=CKT>imd=S4)gCZPe_FIFfA,Pm^:gu^Ia;5YW&bp28tZYgfu*DLG&?1aYP<m-VnGV;jYdG-]'?3IpMRf:eUREM!U<glm04`_.dO>
+%GX>BG:7@#J)k$:[P.["J>CVt[,>=8:WU@?'-r6s8pkcq\+U$J8G>5bO^i,Nb^St2m:kb%eOc.p'qb`!G:YRMB[bMA)jM2-FgEq'I
+%MFFgm3`dm(UQ\a%9WTW'kp3Glh3uc:Z`r[j\FVI;Md/kOr,6hm`Wm1SY_/'M2%+afQ]YPu=@m\7KSPQA>#(`)"QOgn7PH2*i9:MS
+%@HJp1940Cb9P"I$8%:p!DUkN9m!iL2B?+.GLuVTk%"P,fnJ$F?frCifE[JkE'djQ`3fp5aX2N,*8EIegfZ3CWhDt8r-*[NJ!$8<&
+%N!s[penmqdq"@9pY9$]/+I>Ubfnbko$D%fj5a##l-$f0=a)_mN#"=nu@`P56X&Z<1'6fY,m#oD8#QG`bVJqZGY"A/@m(".86Ro*f
+%T09$KOTSJ*%E1N\X<[sS0'Tc/c$4=DE2V-BX[jM0O9?6FUg8#L'AS6Oj5!JoH.).0pMQa$[+!X2Gq!6:rl4CRRDh.(dboI!hkg at Z
+%1Y54\0khBXKAECRjkaLOl>X$M6o*F:L/aS@#*dd[&<FQOP50AQ_V)9UkJ^S]3(G4[3OQ^n!b`'to,q4fDiSt'IWj8tXNo%%ngpL5
+%klH@;]iGW^/>je@>E8+H[oZBm@<IR6/Rk9k at 1&Zh52*7t'dTe2$e?t,a!lc..Rj3VTf>!?GiQA8]r at J+pPKO(J#5O:p6H$YQd*u#
+%5cY]2k;u4Vb%%Vu at 7G$I5a\:W`B6gSD$sc4G5M9N*6>/i6-a/4/.m36!+]nDZ`WgY/@]=:+H2\IM*#eGfn(L36d"/JWmnLg at Ut]?
+%]8$[#T3?9mb`$k1U:8=e[e*THfiJN?rCkKRZ@)qc+-Js$PmUKYjNg`[gmh4db!l+E0GM.(<Z*P[=H\:>`<%nO!jH,dM/RRSnutt'
+%*'5$kPh!>Z);Z_KhiVMLZ/rSdh^pp:?gt`*-%!="=1\KU at o!HgiuAqV,.(RPP9[=l-^*g^_!rku;AFse#F6+6dsP55 at K>6\*ph;/
+%I"I#@q`p(qSji<?(=JA0I1nB;2#6UN6Z-6gpGeB_4!%XA_!EDa5fZ=Jh8cDc,g<8&%^\+X_cW\f-M>&EM)%`,am-dBFUplMi&Bp!
+%KO\.A^H"ouD"<:]2Q+^7i/B/%T\8-fR^^qh`;<:oCKM1Z_ITbrCb+-`9X],]<l^>R8-f7e02J<)d_XC@!Ym:?q2O`6<-_>H7#>Ih
+%i9YH,*N[Bh3LZ[m at W]D:'K=oECCK,_Q,7ht\6 at 6cdC3eKldDo@#H9O`ZRj-knoF.7bTR+W$J((Bg.Pgn+uo5;p;a,QdVpb$SC/i!
+%QCk\1H``C+8r-SdVqR\;kG+l=>gLOgFik#';u0K at X.)f+/F`QQ=hTPr:JM6#h^a8`GokH$LlAcB!)F<!g]STA=`BRB_bNgH#h2,o
+%GEjuDNQ:Gupb?j:g"E9J;KeM?G5K(c/EL*Je%pQ#:ks6kM$mPo\Frb\XNc4[iOG at f=MPjdlZYcA(?q8 at gla\M/3c^?``A8ISkP_D
+%q[erC=k<Jn-ErdN;j)`ubE`0e8(FWk+c5ES,W;b;1D+GS@<7qJe@%@qM<2jhOk"f at m.-<&A<D3\qm,K#/iFDZ\k4W),JXc>l1=tr
+%`_lE.\HMCsZ:Ilh%8C*i!34_XAlblrIE5;qY`kDpGkOWENtO6>^O__K"bKBP<mhi<KF*l*,tF?s6gbMB!>X]faqUge=+-5_N<8]6
+%7>%E6P/3:S9nD":=oHHMB&aeIfk`X>F/nZ67>fo(B at LnWa@V9<\O<\B3;Zr[jYHt=9Rj(%VeGsE5L80E&O+&[W[a$GfcFP(Crj`i
+%CnKkN..]j;HfS;jNkGEpZ5Sg$PORRb8QbB3X16Wd,W5DI-=0cjJVKsEqN*n./?X5n+ZlM,S5RS.MG%@OHH1s.GY4b#"8t*[H<2QA
+%;_XrCl5je"1Dr71;iYGdRJ8fh$eKhf?D/A6+pd"8O-n?g7;_&E\@TXI8*"PCmh20SVoRV3;*2BTCS\D%qFMtCBN+rL(7LOj9SgWu
+%%_J&"?'`a]oo,oN`Mp^s9%^a+gIK9I?mlE$AcdLd1'-=rVT=[jBe"@2#WY!Ik/16;<-"X?]BmI,:22C3aO-FZNatgP5rm"AH2WBZ
+%OprS8-Pq`4N(lS\>?K?".<2jq.AgL\V9T_).N'jQ8P[=n![-4%98Jh4VpmcHW<-\3LC0UbG\VTY7Or[`o&t1X(4NO at S3&pk7Xl#_
+%D$sUVXWQgs#M5rC96CXMr#t[(?%/f>,TD>kAl?(i-J?pf,\<365dCT8CjSe(&1q-PLrHoM$2I[T*mYH=Y/3&=WLVPd*,C?g_]:K4
+%9!TfPW\o17m,T8q8XXEWl*i+-Yhurcr;E,kP!YF])?;@aXgETDC*U*l*35j.4'l)*ko(mj^qj4<ZfDX+_30"m#:Ye"'Nfsol3%11
+%6(3):.JG:J8o<?i8NHPm;RJ%`RNQ/NP?_r-S,F\k*:Q;?VG[%H4IUK\9,b/&d>VEYY&U8s_<napdUnoj%Gm[X.0qL#^Fe7ebmi-i
+%H'C<&(,#:[NK#^6D!b;iFr[]e&j9B19;(s!ED6>pP*?M5Q$B_Fij,::b at _3ln+jqf/Edl/MW%m#BLI`LFmBWN0dca\jtp.p=COFV
+%:Ff=L4ZG"uq1^"o7YZ1`Y[,XtCHOb787%t%XAp/3-L4Hd.YOa?Ag(%,/8_Z7$#=L7_"RS at -f7qsrj$l;JR6[s<r6s!CQS;HY-qQ;
+%#T2lF?I:m(GALM2/[mmr_TXV*VTdc%Y#70!F\4Wt&2mcG%`dSX/2737OtCa.(\X-:KP$d1Eti2TAjS&ReP?rd<S@;T$H',>*UdEj
+%2!o=G22qgQ&aa[;e4tS=A8//Y*^4r,$srI at DAdr7aeKLpjT]gY=pQPa``P/un^lG9Hi+RSO'3\glfS--5n9Ed)I(d4?9_5[7FIeY
+%K5ooY/g.cjVEU)2D%\IhIGoI<T%Q(jc,e+q*QiSsZA&PkQ(GL^=jN]\g&BOiJu6M#C21\Le0q>?g(i?s4%WH*1VrUn0]nn5q64mi
+%>K!csIoC+=%NZil1fh8%Os]l*/B_<40&+R*Fcmp=N'/Ys.;Ddf86oGo#FVd,9^Bs^dHI7-\Z%qS&f0QW?G\>Fk8]5qR$C9;,1>[7
+%DcDn@^-?Lk>]CZn$+?\s-M>ZTV:f=%JMYsE,>O7pLF!o7e<[bM`chV)JHud_<g##7`<HTK`hDSK8?b2C;\#,afRbEkcAoLh5a1kf
+%0!JbH7s8u88bR'?6cKE0%&hC&\a!iOWTf7tO>$EoDbNsSlQU[CHdj+7[dJT)=i-2]g='2C\#PuPi,138I/WUIMg2]N#!nF.5e=2/
+%0`u]&B+iRo3$/nu;\);!/a#11 at -'EL/">TDMHMOV30-Mp;&!'ES;*<[8'VY.+ub?25Xm2a:V3HI\$WMcU00?"SD'HKAb`U5`_2\N
+%i/-?oFs7i[A9TH.r+4\9.N[>h_el?Lm(o4GhW,#"c at WDAJPPX,5Y*,W3oY=-N*h.mh2)D8g31QZWA`ft$T*a=i>+S$:mELi=&Y>C
+%?bu7eRc7<jXhMSMZH9(B%-"Qqfq^Rd,ff,L6IPEH8cuA%T`gDhM+;?P7s1ACPhOgKrfKqB[*'3:.Y3;,e at 5NCfJZdYcYSluJL\<*
+%$X'$['\lpOVAo4SJ[c?Sr[B31D;/>@lXD0VnWGgkG^@Zgj48Ih;qYW"L\d^9?eP2#f.!8XF?g4:mA('h]I@>[`pRB>C=g)/\(8<a
+%XDa7 at O:6#mAaqEsHCiYV4$=;0!:'3(W_-JglH<1FMQWpT/XbMU&LM9oAL[guW&l7LZGMN-DC+LBCUdFV1W,93P:/2&7`(2*0:ebG
+%(dn#+D7,L#jCo.'-g7%)*)7hQi74PY[TTH#6c+aSqD5%USG&L!R8[lB>JUD$R]P"q3H(l^#."_]V,>h[$1#u$!uVoTqB4t(TK%d7
+%p5I!,SL!:e1mLbfacCStAq<plq9uN`QO;)RO<VeiaqlS!>d#[kRsgQ4Zt(g8+\Jq6,3I_D1)t-mlE-KRfX[E82ik8 at g/@2aqZ`is
+%XCRmG`=aQj8WCdUfjqC=?C!Q`+XAbumG`9hm'QYJ3(8^cbsnQ+PTc5uLo"!.E>+Te at 0$p&-$!&'LqTUKfF\hB,_n;'p2])fp.;7H
+%Jbc2&&Y"HD$C%3ACm#spWm`#X'=2^Lnqm/n2U:P7"joaF$Cg;dMk6Q=eWpX'I\3HkA\#77r>n^tiZ0\10<8g0>!8>*8_Q^'jbUf#
+%0-21W*$C[E/DBY]*a?KG0:oE+-[Fd#J?5rk6 at 3$,bF8nDp=7g-DT*5F#_6TT;kg>8$X959]ms,u]"p'X=]eCEC^#304/J1+$at?j
+%je at ZC?d?r@=bMS<QS+dUVsghmDJLU0b1^u5jCB$"5[rpDo\"B<7k,Xh;Nr8dq_14fehonsp,5ns\$RZ]^m2)i#cT'&:bhU*,+`1X
+%?D$%1Cp[\I`&HqI1(MjF]d0rP+r0FZqrW0'G^7p`ll=s$nco#YC+8D)ptKd_\#AN!ic'f]AH,=&pZheYJH&Dm5lYH'G9>]@Z+^%P
+%X4o:VnK6VXs7#a,#QOS.j6P<8r6&I)s7u=0a896Cj+m?Qlcu^5[t"8!0E:0^HOPE$bP8.-fD#*mhi)c_Y@%>+N][(P8][r>r8R2%
+%NV;?(gGaW>4q'X;]5dj8gREO`pUL4q])D<-hUOIDL&^`0n(tOWGn#QkD0NE6 at H^]`p[`P-E'M""='tcGs7k`&H]QA1kN@'H56(%H
+%j5#'rkl-oE?iF,N^A<6Sk*nTmfo`JPqN#PZ]^FhZQ[ec'gHWH"rUoVDh#F\[Q/A24GQ45s^R+cbqRE$lDuT\6_t`9hq`hgZDr6!?
+%p)WmHrp"t4Rr?$Os!L%irV\s?pZ()%q!!jSm2s(>k*uD'rlFgsI?Z7's7NRFo"+P8fAHN%^ZUm^ANVT6Du]@2?GHMqfADY\T3d$2
+%^V=.CS+kt5o>gJ!Rl=](1[a5lU]:8S*:LUerFYuVg\7n"0_\q[e3Efc5QC_*s21>rrr%7nqUOJP1Z"XO5Mj0SqT\UNhqrp1s)#9$
+%hq`c$kJ+ntc9Lphhu2VA^M_rcJ,A!X`ooL59*F3b^Z4ckrk4'^pQogqS*s_!s5uUr48>9->Q=!']KSRXroq=GacDc$j-U5MeJGYR
+%J+k%0K'2GY?f-A)TtNJ@]CXJ^k-+fa]mfRhDgPe;5AU6]55tPkM16EA_qTD0hZD?rj<)-`2QV+Pr:9U@=%QH at Hh`kr:Z6RZ*k1\1
+%76#Kt'[6[SYB;>p$]<iio:,_gY/^F80>%8S]5R,tHQKIGSppiq4oZdn:I"BA+7 at 0bhY?>YIbd3#Hi:Y8b6Hoh]tC7-rU0Z$!3cFq
+%]CCr3J!V%R4F[!RrFc,T;gnQl)B/(M?JgT<OaS.7Abk0FDu&/&IJ`u`?]mtY.cgI[8]-&>UF!\R<NLBGmB9F%s7#,kHe`$.abKfe
+%EI;)QHs#5Zf"CQ$0)LEbIes"5s8(\!39>&NO+3FKc--Opn8W)h$.APg]CWd%r:"stmp?$N4oO''4PA9_jnmrEGN52Xs)5Xon&DDh
+%pM\r<Hgfk*HT0f/Gl7:7nc!u"s7qHILNiO&cTc[E#s[qIO$DF7_co8&IXcd*\PL!;p=35oCk!:WX$DQc9g?A\rp_@#s*?dCk_#2s
+%e_>!I*pN((q7#mtpQ)Mj^:F2li53?l?B0`#YK,\RDn):'095T%c%kItqK-TP_E7VQn^gi,]q1:gGU&jP.c!0mp!0bTAqNj*r6j<4
+%Pips'.r4*TKuXQc@]VfL0>&fQ2;[5?GMLsCr]Y2jlc7/mFa^tTrr/)hl$rR/52Nu"qcMXWhR,:LO8f%(s"M34Hp at ITqlBOHI^f at T
+%Z$lXo8Y8?Y\+K0^+2 at XWm/HU:GjGOa2;d(fj*Ojt)gf<i=8.JqplDVqKK`c5V\_K[j_;.%nE0+fHh6dXo2BtHQLsh>:OdLI*fK^a
+%LQA(2s67#[h7NCDq.Yms4h^ZdKnO;hKDqe#>k.a+Dnl0'0/)T3IX#%8IdjkGa%'Y75C at jiO6>^*P998oSp/KCLs/T.RTK3kSc9_R
+%q`hBn037eiL&LY,k?U*_l$3M`HG<PQV)a"9g%hZr(H[-AgW)WEY0oPKHEl69lhi%P:=F^(fGD<KrpJTHY/f/a?sc(Mq=E`rIa?'<
+%k-rRBb4ir'VLa3XX1n?`\+.jAM=XYn$ElXjTD=l9ji9KuR at Sp=I.;KSXn))&(bU8`/b?<^T"4gtgQr+-mt_5El.tr:^RL_?[JfkV
+%?K(.pDgp!DrFcl1W4q')f\\4><r?JV?Ta[1r at Q>RjOZQOfmj%TZCZRB'If[BjO:4ps+*W<prRYB4,gB*G'eDA%kmZol[Kc7(Vdc"
+%5/+Vc?TrD:ah'b9p?ag%_\V\7p$"F8metr05C5nmT)Y^\4Q?=HNoroSIr(/B:Mu0LUn:oC5QC`=GlN,oc]?!25(&*SqW"K3qViEA
+%K_J7sA8_ECG/A/]/_h.^kL6_f!5A9g-X8+9m.6hK]Z$LqbPq(0Vb<Y2l$4H(:VXnG?@D`s:\fAKh`hP8j0Z at 2[QiI,:XLUTh9^Pc
+%:TWaf'DW_)O1D%'e&Q;Y/tLnMQet\JhA-ngYP-EIr3WHnmB?MkkP]*D+4'Qea7[u$88s%LVLA>kI(nb++8sA!=8Sh.55a+ng;*L_
+%onUk/pi'6IjsQ)[o,I5al$dZ8caT3(D%P`.Ghfc83'Wr]r'0diYJ0eJo3WQ2n5um_I*KiRq.tL5h:LZrhgFp&- at 0rcI0NL)]R9p`
+%-f=C#4BC`-(ef93T"eOCVl9MKAGlc?bkF9>(&-4i5IGDn>K!Fplt*La?g0sC+iE\e&"h)-dfQ@!GKp/@:];=HShK"8$Mk/c^A-lH
+%="g?A,PJjaN`SFPk-(@3)5#/TIrQL\rM-=OmpEi!_-Hp0h4"q9$3mu<0748I'4S6;05;I;T>fu=Im8<+?9JAhdn_$7qp@/]@)Ah+
+%n`fo4b<Q$V'liaMIAG6]D4fD?Mg,)r[r98b2E!o7?T*C$k4&#OkPLgKkjsBiIG.r%R<FbMs52jpglnE$n6:,RNFgkdBOCf(q5<3A
+%dlfgBqW_XTpigZ6r!>Udj,]+jG00>Cne6tST?QQMO+-p&QCkhRq3-:$f2)/:C.:U$ilB*_T(g410D6?VdEWOen/$TPj)t=P\*mXQ
+%rTS#[APu=_pjN%'*fEk8]o=Z]=.EiZp5C[i)>7.('=t);q[A at 0q/cI\HML4oeSO*g)UePa+VU?6^,"J.^3o%#=1MZ[hV^S)r)"R+
+%!qGP_?@DLA47nCO.-BQJO.)I5#O_?@d6;qQ*e*`mU5"_iQTj6Ccb/HJm/8 at 0rV2!qn>!AbGtD=S`h0F6F&)(Rs(k=*8H8YHVju]R
+%FT;@!It#!"DY*nIX*_:+(T[LN"@$C#T:`q5G(/De56('0p:k]Oo1;X5oTT^_bcg[JT?C(1/Rq%14MB]4o@!YG55!f\dD,Y5:Bc;&
+%$N[Fprq,XA7X9m,c`&B8:%.kTp\2H#YCFLm[s&KGofp.co[86TMB@?Gp[@Bu7:o!J!C36j\'2PVo^.\Vqj5(e)Lq9YqU"D-q*e!5
+%mQUo30<Y<9Rm-D$p>NXXQi^%CgM`tn]nF);hT+c'q9RMYrp4Cjnt.Y6LT0V=IesPI?S%p`aec]Ja]1Hg)h+$eHst?^T>(;Ds,dh;
+%\qA<Hr3NU!%A/+Ej'qAug;X"f]QdVqQVf_*&CnP0"JJ$naIZH$B-Z*1T*\"7QS5V[c\:YNE:%^<p_117*1ad;Qaksd*m3Z%4&O)>
+%0:q^KoD27drV&MI`J\@7qpKulgfDd*?\Y6:>#TZF=C-Hlk>-S,2YbD3%XnUg4bJsMJCH;\O]:rE[!:F'.8*_]8%'r%q6 at 9nGu"eA
+%fe5(U\I-caKrGr>Q+`6e8Reo!^515eOl4aZjs8I8n>;Gg8$l8]2+lODGep?5[7.\301kog!SdFRPNJniFk<%iYV/#,II$4=VmO%+
+%0m"@Ho<pWUEM!0`"(j!`,]Xs+2!+\70orU^Q_M4e8H!;/oWA!]a1d;XA3#sC12ZQ),Yr?Z''K.SUDt\0aJ+nk>1<O'X/5]ngrc at s
+%PkXJ$]5mOehq0=1S6oIKTsi at 6j7+D=DSNR6/ugqd!AC(ePRii0A-NKd*onV/Z-5)ECYr'>YjP&IeWcRblfA9"PsaF)/us8 at Jl[#L
+%UY>Os[kLEPk]K+NeHt]`dIaQ+k1#ee/1OR?kLbP>h9f..T#^,MhMs*;lMM at nH1NX3j/MC:jEKBub)09p71Jm3cL+I8afC1gh7f[b
+%B$TdYXiE$&W=lIV0g%WP at 4Vc"N3hqqijBDOrKD7bQ,JaN[g;(=K=>32OX_U8Lct2imFJJ1XB%ik;(X;)[+Wg'BM+SI6IrV]W6Wre
+%EXg7fg2%Nbq7nlA?'>?!UMNtiBp5SU2^c!J,g!HTS*b>r/mp<*"c8ks3dR)Bq\W0dfado0Y#I&KE27HWdOM=kW)m.!Sa3Q<0OH!C
+%9APM9j`-o,hlhGGC3 at ZldDru':*\?3+`Zm@%R"`E]Bg$f1;1aX2(T.*C;8XPd>bIAC*VAm-RkB=Zdh:Hf.Qf!>M1(`@D<"N;qCD[
+%fo at M'=V^L1V!_;L.]B:^o1A,&1";]8A27*u>Eb=LScm+hY"CHf,n8P[[ck_T!*slCLeT]PNJg^@;K\PbH7`]B]HcO&SN*S5\'*7P
+%Ep5L^DK^._RP8JZ!foK8j2(oT6eU(3cAfCL44eOj at 9\t[:qatO=;H-4ZUmRdb!S&W7;BfO\KfZO0@"4sZ--mVE'VGe8Nq>hFF/2=
+%l5%>mgglU]>JcDDhB\q"(]J[LHob:j6;,Mc&[S^Z5MF>jKd.])W4'?Dc:qsIe[I."n>a(.q`:PgL,7fcS<0AKBmCuYk.7n(dI,\q
+%B8<D8+"/XdF?3D,$'Wk)]<`IbgUVFj:AM&;9r4c<fqTgjp4fbTP/J-*_k"Ckj3%;DO\2cnc<K6F*KO9)ZcQi4.fiFfYH)_c=(YN5
+%\W`%nF-ci&H,p2"jldpQFq&M!,A^SMM>Y`N3CUQNEZnd^-a;cCC^si]4F;4dW\qC#UQ]^R*CQC at E0,F]MXi*SjT`h==hN$<)d*LZ
+%bb[AGB>Y*hO7U9^VF,N&G/J>P.^_.5)TKd8H/Vej^g9f#i2*WpiP9<_U:@\nV#>&/O3D6!*d&a2Epi5lSBF`Ta&[D2W#\+83S<6O
+%?iURpZ*.k'GjL.9Dbbi8O*^:,2Q:GP6X0$8q9;b1A,rk(8*Os#`HB^pc$/R0EG1]IDq9C*D:A<FI,am>0alm:+H?6flB`.tS.W[Q
+%bDe.]l![MelsFp"pYA$j9bq+\Db)rc_NBJHjL83ALPf<7;hN_/6U",W)-!har:n'7nce-21(hVd\_rP8-XL]D.5f5C*K?=f8[Y_O
+%BLt<Nl7nN$`Vg^`-.u2LAJi8M at oW$07UdiuXBrDjV&u_72tm0HA;Gl[p^8,n=0MDAHE`6`dr"GQp4^_VKa44rVj46VaM$;HC2uV`
+%GDk(7U3!HZrn/KC3Y)q#&LNGnfqVQj at P*4K?:l!P/$PDml7=X_``=`-4)$g+`C$GIAQ&XflHNr-m^/Hn:tb9DRdGB)MGn!9iqRic
+%Mu),,IC$B1PBBkn)I#Q4\hjXjC2FclWNK!!4sY)YeirWK/=--idV]^DQ(4$V\VA%o-`F4(S7%@:V\8_Uf5S=ILZ2"U=C$qX3nUT[
+%\l>"&N+)K]X[ZVEa\TO;<mLVeLSNML.kp+KmRE_AE"'?N]'",RdK/N^%h,qj%dq:FNON);F4*(k?Vf0B9e*)j82lG7;aa4m?=LW:
+%m4$+^h9t"VJs<,6s4LtiSV(*@j]?/`j.p4Lf*c7<A%S(EDni[QgiesC\6hkm`ISP;Z9YZ\PSmGQ9Kj)#-e"/=9-lZVHdjNgbOi+e
+%>MK$-c+OcP_3sIaC_$Zq.DILuS:&+<ibCSaQ,d]\fkpn:-*\\]'R[8I,Uq326-/TKY2$SS29Wk&=Gqd);rZK-k_$+]o*oSA!#pCV
+%&<RA$Cf/<,#SmeL1n:K&2E,,IRPGT!l(h_IlfA8\H:WrH9u.%a`hHpR]AeT'na4I,b0:8k<N^ajD9HlMJZ[2[G5+W==.E"0p@%i&
+%=oUmWbF#<>bO2Gp_5B<]KUF;QVO(:S7Jc3jMu at U`$BH^,$YU<3`rg,/,f>k>ZOX]T.!gIFh%<@Mc3k^=4"g8N3VQ2S!CTh0)djsS
+%R7%Al=GjUkc<Y/E?$11ZPKP?D;j.[L4DgJ2WS/&uKde(@!ah$3BPWOK0>h4/)5VO)-ZJ(O!VpP8/`D8/0ZA[&@ol/@Vp(n9VTj*X
+%5kcnSaVA^g$>2d*fH'nH$8s#2JK,k:io*'@1b5Fg+Zk9I.$<tp9`(t0(>#0)jiVr.G?%BR$##15;,/Jd-$EZA]@p at g<'%i#!,1o&
+%_!4og0>OP]^lfh\Tq%*Pd29YOoo^Ln3KQV5fd,E$U65J[l1)\!F_lr)a at n-<4)i"b:cu*q'4%1C26a)*j/r_):;e=iO<tLaO$S;J
+%o*W2_;s%MTEd=dn:E7$_K>Q9@[%tj6bJN:QlFG$m>:OTk-rSbd>f\@am?M*W at dViD4e0Z#aWM51%DWo_1*N5*),-"dHQ)aE.noL9
+%JjOOm;\G>N0oq3/aLR0W.X0tK9L#Aj+nRa\dA*CC56U&Z9J.T-"tIETC)\_g`+ at aIj1%.K9+J<1G`UreG((3;%6;spBR)ubE.d5t
+%(QM8EgL[\_G7lH>2.bK4nlp$2L)T5pW;BD^?<&`R9U>jBGi)4^6g8imiZM$;D-7&]]X)^mdel"-oHi*QpkEqU;SA?Z(F[3H$/@.)
+%0foLKg8.&p!0^&5lD,h\.Y"tdFbn)iK(mrfK+k[hTC]%\S<Ni;G9N0!+l,u`$Tf[7]%JmSA-nh9&8Xn*a.4%PTZ[jfYlbVaaHZE9
+%Nebq@;D?rsXqtV7,s+2a:MOq=!A&FT>9)KGFRt/==b<3:<D$7OmRuKQactmH$pL"pE<qH4WSNkWnh7rb`!D9r2!enP4kC0O)buYM
+%IF:`XmUC[MO]3Sr1G599(1l'[[hC-2/Ljs5<Eg!h-Wi]!N71(\!>`>QZ_NC&6qGk"UZrpgZD!q]6D'GsWX*h"!dp[lMdm4NUnTl4
+%H=CD=OZZc,m_^<:KLcP3-,]4']h318MAfRKba=i(AE.4,1l%'95uL$7(A0"OE5YIh=S8XmCM[McBB64cIpSo!CQ at -YlSK"+;mhW6
+%#a+XN1-il7JXNNB3F8S!3fsCRIM#2:6pDB at Cl@(K[uIJCUl(7`Ygqg<;)b[>gq64-OK?j. at mUH$V-\?&lKlE_>'ueq4KCLR^q.Lt
+%83XILOjUbcYtrboOEro;U:A<:/8^'*N5J,0"lc%X^353IR_5i0fcM\!3]\a;A<XqUp*6_.+/d"Z0Pj at h^r<l]h]-9KqKa)9[Y6.q
+%Yt;:Ie!70<e!:"ACsN#A'I[k!3S[0[0e7CPS8Sg2R';LFHs&O^0EF'b&qs>6_;,]fN2o1bn)S(1DLpqt#5<%29Ys]-;TIlYc/<d@
+%i)CFmc`E`/JN$JNLSFo?/h,*jC175(\Z6a2UH#&E5Em09WMs`]BSfhC0LuKQc'XCh'rSW;61E%Nm.)2NF$,eJ?VF/7a4ba:!\ZF#
+%*##t9R5iCo)@<mo27$"/O`Z[m8\=UY\]Qm:VWPcNRFFQ'GZ((u6H+6BK9+(InQj%)dN\@^j9UObBAFGSr,]n+.-dICMYVh@?IG"Y
+%lRf]aeoj]+cL.]O9d"MuCJu6M,41'm=Q5dT:?))m+Z!7%Pn$D!-gsJ*I1nuB#Z!4sn=To2:_+i0TR!Oek`GMuEQc/!/GA^V*d']i
+%m@"*cl>ANC,C,^+Q7>+8gcQ0B3O$J!_jd,b`Jt%?&8N!qXe#,I:20:LWg?5W8G>Mm[EUup-brrP8ab5pHool)kU?g?;oDs"(Kk]]
+%cK^[<>nE^-&hD6r^&e^t(BH>W6KW;#s/I;CUsm@`7bCF[XWreHr60e0dIG<CW,?[_iUIUlPjAd*jH(C-d<=K-c<G(>A![ppG=q*i
+%5i-q;Hm"5Nf$mVF9(M1=3YpMljF&l^Nq/l[i`lPg!W`/mP(5PSdg\8]bIIVHFX<dBK/]W=eX0##s,^(DZ4>$h+8Mi^5np@"0XuMW
+%SP0E(`(F at 1!<3"_T+'J8ee=l*Eftl$!(JMQ_pPH965fjrEXFiUE)"u+2lIf@`tHKEJ)u#N99t$j,>6_M/i0eo%YqmDqD,D8be at -m
+%_"pBeo_%u+!TU`ZJ02Vrf&arfDiqW?#r^M*>`VP6'r&GM9l__g6aOiu9.lXMV:NqcDR,MBB8[^eT:9(LR&ks?jJ&]]`o\K at gnb"s
+%=V]ei0C.,iXjT+Kc#OR5W`28TEnalqh5LnKo!&tLLkoCnm`R$I'jGGurj3W6i0=(0 at W3%bJjNEP5542-m33M6$.e;(3/:$3j at D5n
+%6`/J^'NuXM7h]atlr>.'%:iFYS61+cZZOQr/(KF<+">@6LJt9SY%C9(_&6C=p`UfYoaN)eB!Ib4:3,Sk]'f1J.>*]I+d[e9&I0r`
+%lC3$`CEBtreI5#9/-01!Ul<S`[qh6>b1V2'X_*R"q"urD^.^5<#d:%%=`i@$OE*D'4Ydd.$*HiXfIG]1HP(286b:L':FG:";@('0
+%p!;_R"E,P?lRjhIptm7W9E%,Y8^\(Na.ZioaThpm9d73LF5Cr?OB7gios+j3:GlXZ!3]mF_`:qK>Yr^Y=Ci[?YQdt?7/!ke#ujn2
+%8M/4$VrR)S-3_9VkuBENp.IT`iq`,[jHGEc/UtAn),hJL);Pi7amXI2gaPbtUh_\b/lG3>#ut`lT.AeVH%QM)1Ui4=ZkO,98f7/n
+%\Q%mWSN^A8ElCc<-.Q[bYqeV0`G.0%<otq^A@?BH')s9`nLXQJ at ALg%fIu0,Qb5Y!<$!_(Dpai>R4=/h&oLbpSGcSQ^6(/#pW+H&
+%g=8V)"g6j^E'(Vl=r&PSP;F at 2.:*-W2JQ=FPa'\W;3je%nr]Ag2!;1),W;.?eW+/E$R(@;NF\+fZ^?f!N`1L';IBn&S*;SWHjWV"
+%WZ?i.0"Og/.&s2F$?_Lfr05d/@ddse5qV.a((=7rD\$-"%ll$CH&#"kQ#0<SZ`=/?,jD%G9o$:JPX&co*]Qr<ne<T8]:qp,0j#tH
+%&6Fg[=!W0nR:C&)Z;qj9lTBa^&hF.E8CbWmJ`TnbKH!*V.Ckd]80YIE.Wn9\7`:H/&Bda":0\e(=%&NXh1UkX>4W3rW6[n1n%EbT
+%`Y9fe\J!mL)9=l3\qu0R-S.N?F?%Cc6R2tY^Idj^AGkq%8#BMi.TbD[,?V%X9-Lc)qac0ZH3g?N[Cf8DNI*RK3s*7HO at h@ud;gln
+%4O*[<CR at i]*67[$a=B]uk/IW>B<A9-jcX"[B8oG!PjH?u.DL-0>5(Gd2AJdZQAJ2q0gRFd!'"Q-'J<t%+oj$+X7Dti+1b1<R%f7e
+%4;(O&&GN*nJdh<sD%]"kT8Ii[GZo+NVj\X-I[)49Ws'?>TBdaXU!/'d5:bd/\Ks/66M$E1\Z`WqJ)rE9,cd2HjOWGkTHNRp at Ha$h
+%49;NbM5,>k.Rb(m#ND'T5[<F3K'H6Ob)"=1-Y`[9jju`LUPH86lDDPlS-k\'!,V<BFuQO6'pU#NQ@!mWUqm1?K2>MiAKK&ibt*PE
+%f\lPZU9`85?/SHl;3R(qb.'j0Qk&+"Sl_0ZML$k,:FG1.ZOYn_n/pd/a[u;&2J at Mm64YTW@8Wn4*E*HkgV]nPl;ICVo4OJPg8t<q
+%@3km<^5O0XBF^>m4bSbT]SkUQ=<gbcR[?e.4$4p_l3-CjV.HjB.YeVkeLYIV)[e3]44W&#Dq6e(qh]N\HE$(d)c`!IqG4TClM8Z(
+%c)fBLH"=3R=MJd*jP1 at A7GkA\Ok\!shhVpQSR(F.7;a1A!M,4OjPJgRj=,@%MnoN1YYdhi3RCLNL*e^b1oQ1gkE6adP'0S9*8s)A
+%i["><Sn0H?-+p)T6m.F at lR<j];SX=W?a>5d>)6&uk+UX0)4haZ14,^R#=_"I/#sfClHpgL(^]De_[F@,2^4_KRc1LlnOu\'$i_9$
+%D3EW2<25oF8`;iGm at -Vl)QpKN at o=F&df!N.amcS_p/()o<'Yc4%WS*Lp1fnD"BdFOZ'^-u<UEo^6Bd^](OR:?PB?j=q^fpJTI,o=
+%f44\Yj_/$@Q)qJ\2TW5MC_7Y)3nV\WOo*rM!W52f\c7:$>\bfF/HT+<f&6GTP;tB)W.\8BAArR/U<hV8B:HBM2ToJ0ot-%0`!39'
+%CV=kE=>@;M\Ksnh,Eel1^ImeD=66Ze at K\2f'l,KBAY32U'EaN[.Bdr-D,,+\2?Q`@[8e9T\&ch<FRu`Z\B@(q.?^UK$91ZN]G at iL
+%QJA$X,kI2.I[;08fIsO=>?*smG)5EQj9#`D9(@/+#2<riR1:8X(kCVoaC/g4?W at -5bn;D<9Z\m5ZmD,fGdlVAr?`8NPbF;-#Zt9"
+%>;`qiCiK2q(6DWqWaI,DXYo]W757u2;TQa[io[8. at 8rmO*V'16Cm]%P9cbUP^P%AF<S#eK^ZC:cG^ohi8l+B\33c]4kE#25/gU&r
+%I#"[C.EAn&_!9]G-lF&^B*GUeKi_-H"tXK!N^.GG5i!bW&OD5[$A/Sr?MK\Tj]PLkD"W%?N;U22e129Tfe!C!V3sK=(Hn'aDF1@>
+%r^tbfJp+=@.Z5G4"gA<re"j]Z),IOt715=C"ZKqXbha'B\L.'X,3L;7QmR0ISPPOTb&(tPZB;&^m0_=e9A$?2-tllF<_;f1?X&f6
+%"7_OGJe=hmQS'+*il3R:*Gd_oJg+ZZ$??b@"n7Kk=aV^O"";4X2Un`mV8V\Z,aZ0JR[JDT4,`]&6uF9]!5u4EJ_*IjRLHCePZQF7
+%jId('@;j/[jq11a9c!(*X15'?r:RF]b]3^Um)BXqb0MY:`?>Odn0!N+XQiF9d1p?$6UR`4XC;trWRgk(OT at 36[.sug&Nb4)=_QO2
+%RANs"2ADaL;gr7+J>M_sa]W at VpkX`5I!fq_Tm(3YP^Nu)##54[.SDp*O-Xdm=AK,hb at ae!OB0Y_W=nOtDj8+6nn*LaE8'p=O$K+L
+%^9PGhKI,P2j;Z;51^A1"4C;&8rd)q9GnRRETRh6:r="K^s8!kX93N%_\sj-!"8a>[:7dL)&S<J+Eal>MMU(]TN2\8^V3M(rZc&)Q
+%G.(@Kp[qd.Kt?F7(t.)O.AZ9GmuY[?\"Y)279G`.FsuD_>Wc"\eO5MoYH,:R;]CURCf.KV\Xkt2"G at G8Mk"IoRS95-iGD2$b/\g3
+%$^?m*=8>bJopQeM3(cDkP9O#^$qf+ob9c]24BV`XbE4&H'/<9;+em(:nJM^h5m6<%JPX2e8SpQn[j6f)&f=3DK<2 at i\p#pS($)Km
+%2b at oWgb),2;`CrE9benY%41#YZ>i=F8r:I0^Jn6jjg.os<"0[__5(p`YRHPoJZF^)L\jn1D=)'_-.2bG2inR]H']"TB</5*,`<$g
+%=p\e+!HL:F'cr_ZD&.=EbY&]P67',Ze*OW.\tkO_b-.Tb-uKS at b*1.Sq@[hK7TqbhEGU;jNu&eqZJYd#9:6V5R'"SlkHbk$a?NbK
+%D/B!Eff2NuWLK\FVZqti%<M.t>ibWOKPnp[<F9Vg?^\3DP6R5Q&NglEluE/FmL'V%)>UES;j"745t^Qc1qD,\f)Y&`&2;A"`ZB<9
+%FL5n";90K-(uf^V9cioS`H&n0Z<dO5kM*?!VNd;G:c?gSn%lX&]fPtb/K,-qL\`35\)fUj/pfA,?(a^p="65a\/fs]SKjN'lp\4%
+%fjD0(q8,7c'ft'68PVb1=s[P#KGP0#5Y.7h]<POF$@YEDoi-Xg%<%MrWbI_DQf,5V,kTN&JRR+2MGC2:*;NL+3iIl8mMJiq>!6*B
+%Bh,HK]Loo:p+QddY`Cr`0&o67`PeV!m4ua3]):KQeF6Utc!^8Q4/H&BER.$X?1,.KfhOk'iCDcV5*Thff%nq\2o**P74+kL"&[d2
+%1-5N;g+uls8Vmf^/#if^Zt/K=6,;?HrC$3KP2-d2EP$@Q+BC7^:!S<g,S^X'15TeY$snc5CH\l4A(Xc2b^D#([R'O<\`#"Kg*%]T
+%7j049*fFOG!738[aboCom7:3t;+Vm3APJAo6mRhA8EOeW>Hhh$V!l7[]Y0l6*sn.@;!r"sAI>^:0u?+b<[%ULi^kO`A5MC;:Veap
+%DM*ITh5hofXTktpECe1t=d5^s-`7h"8!qu<a&G9Z;tMYLmTVG;&a4jp6rR!CS]o5Uj[:iVk"2-?=cj8N92V17:lA&=?qp^HaY'oA
+%#"1G2h/$+]5eA.^)7uX&*$rd?H"+[3m#O3>)7*MW2H8gX]/1%g@$D'LHV+d.FZChUf-N#T>sGs4]./!S8JW2F at U9D;gH-YoU"[$7
+%@$%&mV(B&A"Ob`K7Y#80d7/.!h3Ql4*[N6'$;sD%C'-et<7%:el's'?<XWN^T9@$lip#O#@@"<P:CHU2dn]8/?.m'tMc2d\[DF&E
+%\uiU-#q"!@CMa[i at Ru:-R3]mb=_GF1"fiM&b96)LCk>Pfkt"ZS1f1@"G<sbR.CGUa15,=V3fCuJbUP4:jRYJE&WUMOLQFNf+us+X
+%^F!Ui!U:ns'h,P+^K`mYA(Bs@`$O-HCVb;tP at NR@;ET=KJ6bKe5IS.sm2$Zb*&Bh^B#tBMAK,[5+mH;4jf8j:h2;&B]8*TB;"W\I
+%.J00V_B,#]Rt5EsU(pqAXD at .0P71E,K4&k2fe%eTpQJlAgj`]`O:PYkZ9Q5 at nS!ol6 at AF^eP7H9>iMJ/2)7_61^i]K]kY/lF^p5C
+%O-0SQ\_2Gp+Ua.sjJHc,@=$@n9ffNZF[sGT/RB$>,<L2_c3)riecQPI(7+?\p`_0PON'L79![,hCC6J/,Hr%27GV'JlKj4;_mULg
+%Q-IqV"`#[,4l3OU2-#=0G0o^5[+YMHKkrJ\g[Y3;pVGpMS7;-6VJu%V<5KaXO>3a.Yh0Cq5Oi:b,2^8<&u?)!+=.(78N:9-B3SkA
+%A;&O[<,,k=>%:L$d/Nq.nhB^C<0"q-S9C["6u'$cKkpn0$&^AeWs at V*c;.Hj03'J`IQ"T*:?cIOiHZj]9Yd(t$#UCDWp_!]h#J3:
+%<F.Ua.>t<fWf)N/Z[/fI:T8)m8KlhLg$RA#fKO2&b9gu&8q(;FQE[le!/FilC8k. at j7JFO*<bAP'nD6E`TF(Am>s^m)1kMHX>Sbf
+%:I5FAZ&Hn$!b?(DA;*1^,9j=r.SA-f>TKuH at Ip)e"6jj at p^FbL'm*eFLhu7JB],bD;noQ+6uJK4=<hKbC0Q$O>;R3Db]Y;bG3boH
+%-*e1"6%o44RLU[@e at fl'LO)[98AR>2<f[4Rd.-1/_%hL<^4pc*16c`g]m0Z5/&.l0WCeJ+&rHu;W/4u>8[B2?c;PKBh'3b@`;+lJ
+%"n%L(qSt.,-t$6gSNg`@O<^?8=Z*Vc8if^'EK#A@`.<_N=)RPm1n"TY=a21XfY/?bA1kn,4'o0`+Y"6jMk$1dp#.VT^`B>X.iH2N
+%#L6<lN!K>,JW,HVWWNQ/MiF8WY&A_QB>3="TY7V.D,#pYG*B/Yd>GZ]HPrs+fKUCQ at dR+mDdBL:Z8-Z'huUj->s<oLHu+4NT.2EQ
+%.n#j,G6tWSXE1hK5'ZhO8)Y^kMp(fP\Ys^259"^tDe3\+WU6qM,(85c!+_@<g^YVOLa$R!.2aPe$Wr@<_MnVI<GZ-Jc7t9PcA1'_
+%BrfbJ&]_)^JS4D!2D[d>7%:an5Df(+ZYVm6-;1ScHRt8)3>ZB>QQPS?YoD%;]I1!5qh96jTBu<mZJ![KFpGeiYcV-$a2__3;YqC-
+%p(.MqhY8E(,DcW=MH#e!O*N8dZZ+qiQIY[q'pDU9!o!h2ECd0lf?X8KZT$eZHif.7Ou2fq4C4"c at hcpGKQ6'&d\PUHm>)-&ZjV8;
+%0u;o&:i%Z"a4^.#>%3IQ)2?t`";q(/?<U7rp`tX!*?PQ!l[3($WqA($p at 3OoNH&FD2NZH<!pk&R^14WXaLR\,mFu7)W%A(*DDmjk
+%$iRE%A[?3/[G4=.JdIpsHT_::K0:`+G)=idoX1N4nJH.mI<A at Z2;oY-LSr\%D&8D4cn!Z6d7EIH%WNDsgnSQ``]a)^+pM2Z*C!:@
+%?%dC/%WH+B'*&V&h'.-X`5WRJG3j1QqF*08d4'ns.`2 at pe3hXFE##F?@C,msaNnUV]8$f07RT=QWm5;17_i(cCNJ at b$$\_39!-'W
+%[_:EqBF?jr:3tWrfRk!`jNUYW"A:-I,=+KDO[)IZGb/GQ[]W)-Z8%`Y-Xs(8Rdp5*Td(u)KAN;><)FR,CWk>27Gsb>e0=3/!2X$\
+%n;r0dUo'.]bV;][Rh^Q`Tu#@'&h?9R&66O0:^uqoRf8PJSc(XBSC7ZLL6X3`@3<q^>h7cWX5 at lXM_^`B%Kahj)m'TtFnT%C7<34P
+%98KIW(CbKRMk(FA[\WIcePM>N97Ccai at 7970B0t*'2SJsA;]2OStpDl.!Un)E!SkWI>X>-l?\UL#P"J3U8lF;$!I?A+ at i0.-+_W@
+%JQ;5'm%!093ujGE(JhOA_KkFb4-NZs-=gi/e9.cXH\eH<p6MO]?2)%b6$3k;m=`BV`Z'^^DWX7IPH;mX$U;tCJd%Fp5--Ahgi1#R
+%2K="q_E/!O98.+ at F/KjE$m)#TgGL72<QrcmgSXh)*9/r;-p4`gYA[c8,VJ\-E%V#29t3aM:M!B574p]fXL9K)>,LdCYt.mfFm&Y+
+%AoUYQcO"hnm6eHUND`TFhS(DN,)IjtkdoQEG$)o$J+;f.-kDk=DCFImRiT(&2,\;i0UZq9,-PYq/oXd"EalB@([5t^2C?!*]%PFp
+%X4iqsMQi]L$8,;kY^V$]ad-dR43J%f;Ggf!\]CdgR!:bBq$ZcTQ%UKgZ6I/'oHDIt:08#]:HEm8=\Q6G?:OP=%rcKM-WC\TROR;Y
+%lD*BjZ_3tCj?2s33Lt"X0!g'LPTAP\@pR>FNcf1Hd3ok$0"'%l*SY.<TZo^_=Q`hIU5FRO2LEs*4aT6YS>s8k%Z>0^]k/sPk\iQ5
+%%ok0kE(r'fAdZ1A.q"Q'S^.NbYACcjYhODQ>u=j<Wma0$%a%,/1!Ka+4Sq4hV;+/+r0YACX'FE3cTDC'XC-9":Kf2.>Eq--=j.P4
+%%oD)5&4?8SUK1%-\@s.D&rd9q!a)N-ab`SSQ+k1D7SCSKI[.PT4.&V(#f0ZJn8ZZQV6D at 5@4B;m(8N[N[(+,t5VL;?8N>?'42P at e
+%_Y7oC.D-.H9qnjFMJPj&aYJ)dUTV1[Ha\`iY.,3I'h]($O-m/hifmrFV]-m;;f/L0RC!kI^L"&4gDXZMYZo$9i5,-2bruM>L$]Vf
+%@5?6C%8T:&k>;GhVBTW[*#f'>TrYA4*m,3i/g'af1;l\+ at CBUtJJqaq'IrgA\F+2)hnf"KWa2-<\N,%k2\.grKIn((/C9OH'8 at cU
+%#K)WA3^h$rSsBM9>QIbK)qi0T%bTDJc9oBB!NR#>Al3"#MARj0JLK&M<EBuW2\4eF4mVZt&$m&+9#o&fAQQ2#DUp#uoTks$p:2*3
+%p]+h+$Vgl>P-oL8;U;*7?^E0caAW1Y;r/\PK<=n]l0D/iU&\J8EOotnD+TT]*6gPNbtbAP/V.nb"G']u(2>+#_(PKlY6tL(BLmQa
+%Tj7IGMl;F7b-(HQ<qd2eAWS<qCLn=PkZH9^3\Uk:jMo<$8M5:7.QDJ]T"_=a&?lc:];>:5PT\XB*!fRnm,Y>>:f-ISD4^MEaS.a8
+%Td]\nbmm&YTgWRrBEoF"DDu&eVE at X7W]=Z7mou\&hEb2C(56/0jc-3 at ppkgM43/fu2;uR1G<CokHc%K`*1Y<q`p6UNZnIp:_Cb#/
+%GZKa, at CmcfMt89_)*WtVII>5mcT1MqcMX(!"Q1*H'%MKP,EX?ZkN7%Mrh7?$?(pH#@fq6C2o.PYZP5[[aYpC*f^h;If*ZDP/.f:.
+%0M7pSJ69;FW7A:o5ZQR*<t\eM-^6dfclBrDoF!20!`,^>gHs1ua.p5i`#][a!Kg[`\&Ahu!-_B!4Y)(YI[Siip]F?E!j`J[>1A_>
+%j9c*#WtS1UWHKMS7Z^pS['-a6qA%-#Rpgj^+AI]fkko::@c3PG_f:Is;\81'l.8K<_4.6dqsL/T9"p<"B29hEGgS$;okKbsfj'kD
+%Bjq(c$239.0"jPIZ#$hSs+mS1Yk.cQ9"U[MZA1N`68H<aB!q%pYj:d0Xj(=Qe_KNh3>#[>/nM>Br3B1F81ed$J9k*`Ha"3"#P0R>
+%Tn+ua:fWMeXJf"i"SQf9SV==na+N,G5KUFk>>%o1jW`tCkIu5QHQ5F"+;@U`jko at XELD2S3t=#`kNR4$p0p#?*V6A`P7^JFmRUtQ
+%D/AHp;ak*(<CISo!)ICbVo`%]9QT]F:PGgOHHIkU'e1/RlaeY#JJ,Gc8s2"AKJ`hcCr>`F"DH@&eSM=o!5c[Qpkf[i4fWsAO5Y:u
+%A>dW]SpSt,Jb3EXItG=.iM7^T3\.4fNb.b>!*374oJFn><H)n(OR$cH@[lAsKn)-RFJM3iet='DTdp\j7ngrQZG8j[lB8JVah[D:
+%,f'R^gfnmAe^I[&_"hi_GWG?Ka;Sft0 at 5_k%#Z[%U^(u[<GKM[j1f*tGh,=a at V3Q94."4`cD4GmbI2aUcIX#@Pm8[6"I/PXoBHAR
+%^,UjO*WP#e,Ijis<q.g/C!@-kM3Yqi8L at -!n":LAfQhX$JD#,/7sV%LgJLPgM;--nHlNf,is\q.Ib at J6hER&rCUO85Q,DJ2OfD/s
+%("%6N6%K>P<XcaOjgaG$V!#&Z<7.2VUpfcl-skWLpoDXjLT2Z]5))H]k%]X%B/tOe\5cA*fa#4tdjLEPa-%D1!PGb[ab)9f\*[cZ
+%ADce.3-FS`/rOJL^^V_K<a.]R-Yc%.*c6#9?a^@n_87N7Lduf/lLk[fokV$=MSn]0 at -rm1cX;V>m'>?[i##p$b^9GX3pp?1qn>U1
+%:i3OP.Ol'I2`VAt[Tsnl"uu[U`?TbWD*\?JAfZO=iZcdT20r>@8ZD'u at GoY!OOD#^]MYjT<5K]'cDc3,$A^_!<rEUQIFpDp>u.Xo
+%XL(/`UrI3XRoJ\V"$#p<p`5>'2g`$>120ZufHc#<6[GZ'%\Ao=>8l-eeZ\&$LSM,-H<!$C(ECW-Uk*616i_9d8$[djiI^5;&1DL+
+%+#,9Y#-Dq';&ilsP5UHth@$_J\Pk&MT<U&k<leS$DARQk3+Q&;MIPIiFNZ:](\p%F.JC9Bp5S4u8Yfl3EaKAn.Zdt^Cs5FAf]J!H
+%%AchLKF8$""!"3,`(*CZC3?7HZn&uQ`-#6d["38ai'JE.?Ygb<Q09LN:u[<s(_gTA at BBYalQD,V:;UVuJ5p-(fJ+c6q7Se^H;'^j
+%)1^l7Ht"!RQ_B?h;.>hoCeTjP=I$mGOsJ[/HE*)1A at O0Cg4<"H^:<<p=^78'UFBA1Vs?Jr-SH"aq2R6WjDT;nhPc,W9gpZO5<*T9
+%Q.kmVISKE]P6E23?AYE,*r1FrKo6dmhB;!uC5$@%1>&%Yh;F?W%;Ka#G&Vg,@/F5bm9LM,E=`YE[dDm:KjCr#Rpn.0M(LGPFh4(/
+%mng^-HPkkkT[PHmS+2^cViX'C at H2Vpf`Y:>*^l-(X>eo9rWnl&1B>iT at -Lj,!3:ah"l#DEX'L8KM:=D/Fr!?*J/9EYY,#fU5._Vh
+%CciiG%'Xu\TN3%+Y3%/Yq$mbd2L^cLm1+b/3Nr9d0YdbtnHO"]*?,3Tj!#(5X;W$KYfW=fNuM/A4re#IbW0[nm1t`;--0UA.H>TU
+%bL<_BSsV5hl#]=+o(V&m_7()mhWfh7,^>F5(COu&V:B(S"UATd1PjQ^3R9B1$g^fF/F.6+7<qbL"7c79cjn^TfjWsB2YnFP@(*=q
+%786\?AiM*ufbXBJ$6JJK^"]-hW?c.=<PXEs4`WHBRc/Ac>e(K!?BVT?3pB:<Z`DX-Po=e3H`gV`?r*uUpefTNpEKhGlcm.8V^X<U
+%jucl]-Oc6V,u!*5M0<AXg4Rf5^aj[n at I@MnO?St%n^6[QVFZmCBd_\%8M%$o6WUQ6 at 1A*iN[ju.d=@TRRMqNN0ZHKOB.B;&fg$><
+%r)%Il+-1->aD;D!NhsqZ>^\-k"#'js)EV/dMS.$a at 1,pl'a2EFC:_nX2b?#GHX6CT@*NG'nn#<1V,ZnDjmaf4HWS;0#/m:[ggU`-
+%L^=dLC(=3Tr2sO+.jjX93+lG%Tus-G/p+S6 at Y;=Q'0P!^?T,kb:<]nA[_n/eR<4XS@@ia[[E>)haF7\0RS03IOO.YpQP_IVXB`5t
+%ZHhYpOQD"J\XZR/<pZ?]B7&VoD="MPkNiFugeR8[-F+tUYOg]9.SdY2C'K^.,iGW#?Ln`<W+r1,e[Q?@q7G]KW\@Lc[h%ZjQ%(*D
+%_pojW]\"[Tb8a8rJ5j@(fm,3N4!8"#-#f8'!a_cQj%&7K(/m1c1'66o<$5,8G*1C7&/Au<cMCrIMe3X/7s_WB<ZCc-gSml>,Xs]F
+%a;C]D:hgBug.@'?NpP?:C(_&_kRK:fQnoC9?%:Uon]KK5(PjRP2$1Q!0kij+PBFX&eZl1I'o-O:4<+"dL$`hfni\sOmYMFsKF;Ee
+%4DgYQ<up5=b1J'VnAq*1<8`6P&5@;t\n!l^a_+nhmM9'L:'t^f at fI9a=u8,'+ugmOb"`EuEl5ga5tc_H!*T:-16U;Q_<Y"N at m]B^
+%]aY49c%utODOa'>isb("7C?@4%W;O5iBfXnh(HlE*T+&p-WbTMl>2t at Sg<Qk/-^Xh\NjZmJfc-9./9;QpR<Tk5RcO:?4PE*c:9pD
+%Wm\L"TK!7OerCP&5Be`(;s<!0C3T,/5c`HIbo=4E8;a>QWM<U4?,a6 at s+^ZNpcM\dP5S&E<"2"T_-<8^%[>.9:<u()Jrk^s[<S9X
+%WJ++mU];F0\Ol0R/iGYK_PWN-^B#k5De`8*97!Or#6n&AR5G-ik_j]fX+qptc[@cNYhIrZ"A`?'`'*8a9m=Gq2ul&R)VIQZFsIX9
+%oB&p;(0bXm_5ob at _T'jbZ't#.<0j,.N<,''<8p`0*BZk8/qAL&78N2",H,$+\64S5_]h^9AWu?3[&U.ZdGgqi5+D3qe-;SJSg;T>
+%5)d2XWCTjkHscruE[+!q"G(:uq6p&"X41ap/oG8-Z;Yh3VGViNn$L`KHl[O1Y]$BS"R\oZ"#Rma,\9"&Fkl(#1='!@Qram1/i0X^
+%>(bo1!Sj5GJ.BOIgp7#V$BUhnB]D:?K at GgbkI<tX_tl(octmJ%H]T=T`^hCBLSJE^PNuT]C[eQY(Fg/CSS84e&ctU'ALZus(7bXL
+%Q9%0t9A-rd5J<5s*@H.0.;bQIAT_7o8S6n at B:cnc]r35)1,(*2Q'abkS(hc"<$7VD;Pi\RH03UUA at A!OVbF=`831+P`)K,ip)E5K
+%+GA!-2HsCimjtl5#<qj#l7t;LEcJ%Aa1_?L!_n#OKV`DMA=X[/-.tkCX0JFl(hSN9!rN]Bfa^L at kHR.JSJ4R'2]JTp/o?WW<G0l9
+%U's+Bg,]k:FXLp0G/c-%aOO&.bJK)`$BE)[:crhta&CtR:oFr[#[t(+9S""8]C?7+UU"d.'!]`<mO%GuDqei)kOM3)&,E\ZU):>X
+%foS8@)jb.h0:A>96'?\Zr)Q`R]u72"Nko`gG$8O]VN]"2,X#b?k0e'RO2WK'T\[Q,WaEHIA#cWR>;C?-bC0U$69M2QB:BJmm?l4j
+%kEkICEW+siA(pDd7(k#;"V+p_3n)"Dl811CpJCe9;\4IgS9=(4l$;/Xp13Vh.9csRBcF1-%DU`J]H_b+aFg^`;N5*tToM*X0f,J(
+%>"P4GXsblq-Sl7C7,mG^d'CM-?O],VG286Va?D$l.1WWq;(JRKr7%7p5%Y\\VV1=S9>p:3#ml2.V9("483.#NbrV"FjdL28P$kGN
+%:&%^41*(usYRW_+qphVRnnO8ppB#">7Rauq?l/9b%ftiTY`=no=U$$?$$L4*dOi(&^"mR)HP2(<NGOOs'-A\a at QRJ0FO2$WX78aC
+%3&\R'[ibp\$/2ZG.@=A''g!thITmH\Z!(g;8Mo9^a6f1F,_SFhGaNk,-D#(;?Tk\o"#]&3L`(jV49:ac5K%:@,*,5oF-BRsieR.?
+%QpI,L++>;gG+YP[fHD:Da(X4=<<L`s'!>39mQ'o?Clo#FdB\V)M`e=e$r2"UTgSY/FgIQrDcK*Ri6HBj:B=>;?4>CNePi[hSr!>A
+%'f/)0^3_"^k)CMfE\^[>Gdngc%;8Hm,;B2Vn9\OG[dI8S:6H!F[#M?DF=[Y2`[@$L&]S7k2A23sfI`d".N<.OnstX`C[36<OIEu!
+%1:`KA*e>q,M<as`/<N,XW'V3XDWK9ag#I:ud8lO!fmsBZE<i41n%m89fIR1:jF^kCB=1o+jG`egaSm*%q)OpMgZG]!gNUfZdqV.<
+%`%.;_%N%hOF1\r&%iAAW61P^b$Ek&bdd/Pm0*8K&k%nR`SDBrf'\S2NM'lS:CZ;6#HE7o(+7)0-kqFDdB+5ZM>3B!0O$UFHSaFH.
+%Oqo@*DD9%KT[m9t>CR-RY)Y at dWTue[G^1%6V%:-;H1#tVW2CTHF-17Znfj3qOh5k+_<D4V,KNC6>hC4WbFZKt5T';JF-ARp];6a>
+%hm--461GN26[hai^Q at kDE%5u7Got@(ZC"[`m/e7RS_2&A@(Y at K(`,\OCjR;eNg[:+*^X_>)jZ5%!P$oTddZg!)?;9th7H6p8`Z5Q
+%\61!9TjCJG&b.Q[e!:73c[d8)Gb=O^3QkU&hr1'p:lEB<%Wp?m8Ld.)FfaZ>`,ZeP_18$1=C#tP=l;i3jT^ZJBBHT\E9O`$rW[hY
+%/Jk%j&6<f4J-F@[-OrqAeJuunS.n2#WM'`GIk22d\g&A![<DjGG[rt+F'N*Z-h18ilqi!d#lcZjB-;^9E_f>XCtl5L0,Kf3&N34?
+%h3hJ0T.C![S^2ej]LH)Rr$=(W4Pm?i`QgeQ(ZM5l:#n]QU at NOD\M0Nj*cbSXF+:IRQ?:o*B1K)YFRVelkDR$9i]@S[<WgMcZA9%l
+%k7M#si#.U:H1RmdfPGeQC0!e3%ph at -=r_poFaga?2`X1I7k*n$M!ML-$K6grk:CiJ#a2=+m"aM%!0E#4$M:oOM43*q16gJ"Y[c\3
+%)OA_s8T1)hV2/sF/6d[^aX+22H^`a8BHmJu8;euKB1u?u3-;(85qTQ8:-eM5kNW;F08\d9Lr6ah]>Z'TcTHjk&iiC=e&s;iVF5mJ
+%3)L[sqV#hkeL/P8[]qnIIiA)?:[j4feM_U/N8,&Bah2T#$k0com)G_41i8Qg[RaCBZ_sbX_]k.*\QCj;NP&Qn0W4]/-i"7\OhaZ5
+%"8t`U*<Vt;95;7hq+pBDi:.%;.[NY!,"@]$`ZSn1<Wa=*anSGs$**0n%kEa7$-t"kFY7J8miYTK/c`Q?TcNr,G>S37m7!*r2 at 6p7
+%`B<sH`<4]PaPL at W"0UX(G#]T#N,k'(=$cRT^9Sq#AXeoHcD,CnAFog3=a-2X3K>nTqE at qIMP>Qc,DjkJQdG^clXjtY0q5B(m]<Jq
+%M$+fK_`dJ^1%R;k:4,#ZJi7Cn,,j6Yqb)3=4F9=N[lPBta]3$o]d/r*`:r"aMQJ\a+fFTPb,D.'fe6^)Up5G3VMs"1W(`@+8K%>#
+%3Me4Q8oSmkdS-?/?Y+0*26UVtfQ/$.b%I3/h*Al.i6AP<0#j>UBubTH=!WD]HVRRIA?*D7m)2;jnl&p[^0Akjb26t"4':VY.3(?p
+%fb`pnZM?(1;;B;SS#gn>[;@ESV0;\>#41er+6K.GDcet6H]!g+cKXoMmE1VE\Tbe5iOJR67h*3/p8O,L"XK*B*iW"sW`Pa@&UaR;
+%cT+/CIa4j[/H=+f:L-!SG6B,&)XbWWger3bgq88H.c^'Wj4]dZ>@9:SnWB&7<*r7i_k]Hs,7h!(]u7kZ*'Z!?>br^+%@]L(ek182
+%]<S%kh17)sg\dcGY+4&F]fYn&E'Z6_6dsA`Zh?1q;C8"3XG!KNe9SWTKmI)UI33Rl.NA!`+!3rT`!5cnK'?4kFW5Tabg2"(pbYid
+%a7U))]JRgqO-QnF,j;3hYlK');a=FDI%&K#Np=ki%JH#UNu^mkHEcSX42).kG5kc_]2j(1r<1.f$D5AhbR/EJG>-HYD**<WA<X[N
+%8ti\s?XEb$Q1UQIo>!,B.co?C"C'L5?99$jJ+fL?if!&LP%s<)WY&'b_F?\\=.NNrk".C0,f,s';2Tn0)Ap$CKDb9j+Lu']B1VT)
+%OOVp^.aT)+&C!0!-"REdQn]T%Q9s#[>hejnEu\Ljd=F>-_<f\5M;b8mMC,GP*!Po`7N6qu9\ZG[;?#]QN*B[].f@#FY$OMZe7uI^
+%)T4#`5J*2Pq]a18.$4R">knuR8b&!ST!W.S&G-shWMQ4K9b[B-4[%J^6*e1oG4=rCkPIeHb3?Z3#ZD\J#Er4h&scHX"Z.jS[!+&,
+%18t?lgn40"A8NYa`nm'D37PqfTWnR=H-'E"jg_534[?*rdfL3Q at EjJ?3SW*9ecY2AcMF at lMgghQ>#SbKO![0b4eH!R.qMR6od%(o
+%P0,@;jDFeA.*Enup29)#:#32R)l8rj09[Y"7>\FQ-<'?,%8o%D]?En6_DltQ_`BMIR8b[Ilu_*J-]lB4'9\OmfuTQ75,i.$J]g%W
+%H2]H[CYp^T\>Ps79^DFTF9GK^D5b<u:I[gF5c)-^,8IWC@`k`1@*]!+ at X%6KMU[l;Pd)1P6`e-XfW+3_I9*1B99d2erR48/m at i.6
+%9:?K+Rn at jL'FBH#g0H[TBp7W4Vd'qh__^Ho*[G8_:#ZVlTrtF(3eE!,Aen[t'7*u1)PgaVKT^$@!L"O0l at sIRnZ#`p0e+"I9-dJ'
+%=<E;(_T7(rm$#B-297;?j\kC:^^?jj_%7co`!2,_BgT6T8iU^LhH<07TTZ()MLHr7g*Nf[pGXZ&m)'"!h1cZ#Bkrh.A4,JDXJD'i
+%jtLul=&KS)/LtG#ip3_"+n'9G.eMQ=6$@nO$Z`W/7hOp2#@7"%$3eno\>l-:5)enCG?bA.[T48&:);</QJuPNaUK7<iHtC>N+(HR
+%:\KnPoruaWUm at B2W1Tk:PXn!]5H1Sn4<FD7Egh-OXT at gg5,^IY5[D,d5GT8/b1_Bs.>O,0\f/@h_;Y-?$T<2 at aa9B8BmdO2[THUO
+%s-##,"S*+;=],XVg$`k.$I4,l\B1oa5.YTUm6HNan at ZY/n>8uZ-Ik31lbgugbJ]e*kV+_tO9dPrO`K*>>hWWJ3G:Z(ghlf#;B6Ko
+%s&-BG+8:%tqa0%L[90^%,OqYmSWunoKUCThZV'&<bnnZbq-/k^1<,Gkltus1+f$\i+*pV4s&jDEOQpZJj]2PKC%3%6"=)V>m)8NK
+%.kEd5?.$*]!8P9I8I!d`=7T@/en(uZ>0m-1JXhqRM4SJ=PpB5OOA>tn"9!P`W8c!One6tiC*DN&iIJ(d`CM[4YFU\hE>S at l9*db=
+%Qipu6'93=nFFRkVZNTnID?\!(?+sN;iF1U_C\,FUaHNM1E31^kn)_FXUi<rDUu6DC(i?X%UtPX6l4`uF7b<4 at MloTK\B-/@\5_rV
+%_+7h<gpZ[g9RK`CR.qO.euKoj9aSBF_>.JsoteGo^jX!I[;SkC;9MOVp/-^*YqnscU`n;7Rm?\!:0KQUESm-gn";#/J__S-\WF,r
+%;?OCX;b9-m[%PU;'72SpC'K?B0&C^eP;?rKeO)&6:h[2dS6MG(QJWpL(k?fNHP2a_3I5:E8TeL-,[om;:(u,uAcg,83FfDCJ=l7(
+%CQ?[\k59:<G//4ee:agWI8e@/%p2'_&"W/.KPi\-RkH$N<QF_Ol"H%:p"YdoK0p-P+&AW![1b_a!C2^&k@=DcmD"e8H<==UJ6D'l
+%K(uZll<%k7<iiP+TqniDbtghrh<aIh85NbhJO\j!#redQ],7#9MGIU&(Sl+L,WKfZ%gufk`#!DVJu7i^QR5FG:;V+RF1H5MS($po
+%2>JYD]Lo>d7UDiU(Jp:\R>1j$oc<#d9pXso'"FH!GNS!$RBKs%frqs&8c?]RQaTUPW_0cb^EA[bf,5D@]\]1L3Pg&;DD-h`$#Xsm
+%h1dLKXL/U4bGTra#u5YQgVG=7Y3#*4],oPgpSgegkR1'?WPpb+krgis<46:H/7KUga)0503aYd\j_=?aQSQTY7;_V_4)juB"OIbZ
+%juiA&c+)h#Qa"1?Zs%K]7_j)_g'k+o?Eoc35#m!%Odg.t1Cn)G^YcX+3fKleSTE#>C/Y_?7VaMSc at kq\#l*]+f5I4Ks#2.L[:)YN
+%jYmOP`WBdFpdBqS9k^flW0Zi^VG'(2`p7d*X<uPI4\0WlqI`IgZ9>i3M[<-NM-O*IBN@)r::_ at 1C2?43T&FN%63n74 at klCNa8&Om
+%$>eQfSfHVj.It?,I67itLeV0[f=Y_GM=+Emg<Vo$$E84pVJhrOn?H`ebnKa=SCDZGWl)49nXq"flJ'V'Q:4Hh[Md\1XuA0;=YU6K
+%<W!Bc3S0-V.`!)NPqH%??G:I>.uLn,[%_e_G<WWO?U-4FDF'oU/2V3-FT[MR(0P[K?o=l0jR_e>9lDm$""F>M&NhV&rsP,b,Ym$@
+%BMKDT"RW=G-n1)WHh%2K6WOf at 3!!Ti8Ar'SPoT?@?ofH\C-#WdF\a-qRkrag!JmI7HAt8;D"eHLDjsdTDS0-1PnUhX)/f7preX9D
+%C'X.12.\@_I:CZMq*Nm^8E9]BkS2FD1j60ca#9F7%[a+]?JA+2m)Tp3%Q/QP9uho&7^>5*Q%TFKY;96BPj`_4NVY^`We/2VknpDp
+%VMc at 5pUd=ucNPDo*NW"dnGQjOjA=5HI>i',?KtLIcD`iO8NC?diiGSolYij!^r(OY,k9[0GuPFmNf2aWD2-VUc_bl4BqTtPEqu)p
+%;RE!<m.Vs:OfY-mK*-_jPc0^TrRbINr6-V07f[0(TLVn!iqG<=<W3_g&uq8.gmn]$1:L"rQ`@-.-)Q,O2u1R&X]%J(Gd_Xu;M6c>
+%8MRh!)\U/!mjC'[&2UGP-_/lE$:mp$V,4PQ:R\olh4hi/&D,.BWF_^IE9;97Fk\cD8:]Ff)BCSW=NHIb>0,$5g@&Eg[@B,lT:Dj6
+%</"IA54P*:R'J=4OEB'ZkVW>pRR;&;gfW;ZZK;TYP=J-K-)G<@G<enNCY0;I\T[Ji=FP9RnMRDXh<t.G-=BS'pGed`MO.StK=9<r
+%oL/s5KlMPsJ=Hs:E6kYmV+p`Jf1S*WB0Z!Zr9#YG150o:,>FA6I4u2lY%R7)*B/)-0.GV]c"FIS&b(uchN!R8mCBnfcRM/G.$SLq
+%fQ4Q#A9FBUWNR+$P%95-09(2XjhLa/K**J6Dm?@H8lZmn\!j^e;@F%bJ$"k[b+T46!da[Th'=Qgqqu`kB at FHjAsa&0lTHUY;.?PO
+%n)?MPrnO6r8\PB\WSjWI2$@]jZS->I'5pTeI($ti'U=G"kU$9(*;%mI!uIh+N=*pf`KcW+=IC?_2(e:&dI$0$l;nA5XTYZ4gqS3.
+%mEMHES*#&j7]@&^VKrNJ#ZR,$M7Er!--,/s2b&>"^O3HfV&`'Fls8e'G[=M/k%c_`jRAgZ-84LP"[I92Z@(>h<hR9Zd=iSOh4^Fh
+%AbYsp/\=1tUb&8f$BQifE%TZN#s;3rT`D"d;_&f>TXBt#gm at K?&d9SESpPOI460-p`V37C>Q\7>d&S9-<o.eXq3+\"YaI4mNsA.i
+%9B at T/+Gnkt9VOOUkt=V(7`*=DZ\F!oPeY/R=^k5PZ$MESjnb)tcl9j*]WXGbe2o\Arhi[_4B%'9<V%HsjO!Lr-_Hk>AC%A'mrHT3
+%VC7"%5blXp7&'!Y].M at G4NLQ(^1sl2(Tb7!gt%bsA$^$$B0pL8=&.Q1=">'_:/1r)Y=2p[,)'0i/5m.1!mF5q=A$[s\+*M]H:"jT
+%B<<k3JoFH0hm&5*R&uUt)L8'P(#G!H!b,um4q1*<EXrrnU8^/]W<1\Em&nm^@YD8WZQ/=$pG+6-%!a&F(;uF$pQa5ti)"H@$?;XY
+%,I#Gn%o4?]Q?M%Ri,6_>+"M-)c+GaO52WVhla%Almi#`EOUKC>f"VOp`b(Ze9B(1&-+D/mb#IB$SPY#0a_Tpu/;Bq-,cCY.PMc6p
+%bARLQ@:mXZ-%u_VYopWc):cA>d0TOqbFDM=[WZY0)e3"D0[iRlJV:WT`ch*sq[C*;\7c#XR5-'P*]^GrouFW7:!1"A5$@542gXIr
+%!\VaJ6GgAfe$^Tq>\i.2_b$9i$OTV5G8$fF8jG<lXm:1Bi'>(XP?5f/dlO4XR#@FrHeuCG\,Gl7hYTh?qbIH2Qq&]t6RfYn&=i'N
+%%Fc\LF5'EEnf,[$YXGP+PI^*qmsLi$EO6EZ.;/ei8GiPIq+(PR\HGJ/_,!!Ek1lNeXn@'q!/)'_H1G$G>1;TAV3?.i45qWO6^X2_
+%X99kr:aO2Qm[D\]I&oT\*"Z&("4Sl[)0-5?TG!@pW,JEo8gMB_ah,o#\\.C;[bnBQ]F4'L%Y(57E3+2CRMQXaEmlC#GY!rA*nYY#
+%CTm!FQ/C+H@(R0KQ.1Nln2@`[.P::#ano0NQE#Af/PKNQ#2/ZOBudS_(oHFiV8=k9\hFNQe&$juaT!3<Ye at ZV]dnlsdbQZ;%PVhZ
+%01F<-Yqg)_Lb_;oQ;Y^Zb?9n at SPl3ZHP"'5*k7CI\.RJ9..k4;'-3B]$`2$GU]DO[1hWJ*&EI6p1Ps4_`n[..R3)"7-8Z)r at n#&\
+%bU6sjjSlZ&:S#soG3j;GEWHd at 9t%o156BCQ71i>>]+FRk]R&7A:ElY:6kqI#HPX2lX[rdQqQ$Ua$ALfRnb+i0R!RFGE<t:HD6]h>
+%o#eWr)L"+s%+Z<X*8:Iu'(p`UMLoUA0,JKEN&u#9G"*Ra`dC\bC!$a`6QQ:q+IN^_0NkP:+d[WhJkonc&t&+"ht9kRqR1e.]O&e,
+%=!5V-;16R at f]u44+2??a- at t6b4[Cs+Fl>UF:G^s;&sLI1Mfik;DYHk7kLhn]nDVJQ;m3^an9bY62]_emS^b>B:%9N/GA%]r(=CrM
+%CRIM>7bI:,(V$;ZhXIoc9InMbC,1pgj3_i'=UZ<rQStA#cL.I[PP4K?Ada/Ag>3 at jiLR/Z5#4?IfspUY.DBi,'!a1mP>l:I7c8._
+%'-Abh2rk5sq^2O?StrEP%UdR5qN:`4Q=&DAOab7=!hp>=P3WG/iB[-C/HZkG681OgFI0JU:=l5*6,Fao>E62gFC8HEA*C[J-5>So
+%*F.or,eE:uJBg"SHZt>OaYh,1i`Y_j<1[M&r9GbSM9dDr:SLj>=@--JCefXH\caL+_M$ZqNCYC6A8hc at O$p<%pH'Z?qT#1'@qEh%
+%@p9%tK at tE`Of9ma%%_1JlB)8a'B)O9Y`Q,u\YqTG!eY5!PXYSgb#X+'$N8(2UZ]-7o`r+&gE-_l`dhRE4l2g=l,sl<#XeGbhW9Eq
+%Yot4'^7%Jj:Zi4,LZ5R?3!8RDTAX?#&!dIpOZSYs#ddO8I+Q3g0_gq#e*(E6Puh,fJLB'oH;gR"1%5A#kIn'XD4,1;IUe^3"+(@:
+%-1eC-Bu^ZT+5D`5fc5:#c at ./.qbb.":pPp8'DF^oe4He.":pP5aGllu$D9mpIQft8KGM7eP9h&-YTP_c>,`>kplsf2EloZo*uG/1
+%/N0#&#;Gg^W_7+&>+*6.TU^Y((c)n&;L7nCrB at Lf_2_u/;?MpIg&E9_2s9"fgAk8B5Sg?5*7XoCLU(,>]?MiBk*tV"qD>0'!KOI3
+%^@#KH-E0o?%7P?="$JP>#]9:RUZ7=OQpBW`4igY'.(3F:%^qUD!<Rg.PDjd_Zo<7V(0?LEF/>0l0$\iiSbk;Omg,=l\opg9S!t#X
+%cSi>0K^K$Ze]fGna!DI#\1[jjCMIBPR-6M$`ufS_`6.m=.ZkEW,g6gU&_;"5=`[mBSG"i]4YCgd`C/,q[9NNc_.45JiV'U?fnlPB
+%qO;E"DtdF+[m`QAo14.ImcB5.9D.i1Qsp9>[_+BM9<Ie$H/I:5ddF+rWB!BreP^_V#mB\0\]3OJfuD3>Qpt3Shah'$E/mL4*VmXs
+%C0Ir<I33el.>?CYjWLW]F+`boTmW^Bj9atkTqf*HK[(Y:Q4+CZ'%C93"O/)1-!PfmS7gb at b69@<(5-T<^jKa&"+D38hfO9 at cX)TR
+%8;1Gfmf$o*2Q4FpKu1-\Jg at pMYpdEa+jna7`i[f<M#Aq%iX$"'%egk%RnIqXA$g3ipWhI:3[?!X&pF)o'ABoWF[b^`1$?bj].>c!
+%XPSBJVlq$]aJ@<RcL[ij^nNpLrlS`_VG.`WnV&fp$CLES6c;Rk_jUEnVW?WUhm;^2>(lu>-DrFDq-C3V7c94hB)]\")';)g_[8`q
+%14r?trRua3/DO.sk&au)8`3Z+r&.G-4$\_M4';go[R:6tD8XVkiB3*ZQcWlRr,NM\_HXRLYPF+u;NQ6'<FP>il$tN^^/dHg&)b_D
+%V']"Zhi%P*h\%>!_juKn>(53]`R:7<XYn_Np at FPR7h(J]iObg9;3UmafN&V%:?)F7G5SlrP=0X&+?[2h;\+q+bo!0W:^fs+Y+*o\
+%5T>6+gR\Yb:M!+DH,Rh[r`ig5HT(RhmS5UfVB=;>d'>F`;LNX+i?Taj&YD)_#fsD1q;B5Ag:n&a2g0K- at b.O9_4\LfS>A2MGsu[Z
+%4G[QUpWLs>nat5uiMUDso>NgIN%Q8en.&a$Zmu?lknuo[e,`JZda#W*!<aAX779MSZ(C8J/!K/!8\nr:jGX8Q4:,N#c=.1Aj_DT8
+%qZrQ5>Gof3cTe<J'Sam^0H*(!bh9__h2&-V.cq;$1-Hk\Q3:fn$65B'(;uKODj4rh[73`dYa^d!D1*i*mM*@V>s'TDV`2T7e7:_!
+%9-X9&b%a$Jm at XsqG+0((+^&SD0kmP)<pq,G!+'Mck`]qT$,lk>g,WC`BZ71rX*Lp>39t:r)okhLjjuEGs#\Pp/lkc=U&%;h%'\Cu
+%78e045I1d5J\q5=LZ3fSZF;f(F6`Al`Aoo7X#2gjETI+8YA9!E_pjZ>Tn3"o<BG4u`.?G0Dkb$Rm>=h)ps?!C7M-OiInJ#&eFhbs
+%raL"F[@:^lDd.\>S7$3_[U<9)V48(OeMg6t=dZ>[cZF1Im#SC@^Mdl,lY.aB:tmp;?>,k)U1=V-F-/_VQ`2!pc^t$DT3U7H%s-b_
+%jBa27[N<o"*+\-"AX<g%h^FWKLZoACdd16-#,rG]bhSER<SS8Q&,Q;W/-R^^6V_L9\LO:j+]&d3]!]!+J".h,h*@\JYLc6KIt9Mg
+%Kh#HA-f_dU2?Z"DjP-ff%^/?64, at o>!gjFi5`?]S>d.`!_PI+sQMOAQFV`cIRn=hQP5 at 6jUoZYg]$qA60;]NWlY*.2c<a=;0QTH.
+%H+LOKnaWjjf!a"oY;u>MKquPZ2=Z at LonHt>/!l4 at h?K**O%Af0YeFBg%.HIJ5NIuQrjf6YUiM2c,b4r+n`.a(:6$4g!#BoF<m&ao
+%Rlhp7I=u7UCAa,V7u0Z=Wh.%m)o9Q?=e6ZU-])@t`Y1AK3a+*Y.A>DrnRZi9K/m$'e>9Z,be]MSRX\$oc38,dnp*d)O[/.a)C4>;
+%8^?e/USE)49J at f!#(B=pJC\N#erXte?C#"O[As#t%@j$m`0kWQ'm5/[kP77db)OGnQr:&:&S+]W%F at M"_!f4]q_9(,e7g!U-_.Vf
+%$Q>dLZ13OA:ImCR&kkccbPTAIkhhoDB[CQ](q?%C!cc$3q at WSH'7>*iF0Y"%HBg at a2A\#7!gm4#8 at o)oOWmB.i;7-8o,nF6f&Oos
+%G'iU\=X\V6 at ubd(gV9Dk99ZMWHQ7s/f$E2Z??$IoYE_@&S!G.%@#LN]3+"9h'/W/n''d"GrDFC>3n_mn^5Md>&8bJ$2<>g/_n\[J
+%=,Lc6<Phs#;0G<gD%hA#aL=L[Ga(4uaDW'N2.J[3C`fYS4800*N4nk<E0[_?E\+KNR*WNj/#G&j_Eo3bouM8?H!4P*Do[XK?M!I'
+%/0=L5Q<_7`Tq2cP/^"3`NrC!Ko`"UoWLH+fN^4t9GO&M!VmDBJOV512O1]/#CECD\AVV%LErJ"7i!&rZ_s/r=Wt/FqA-VpO#ZLPm
+%pNipi4\t<INnR!gQkH1]SrmOGBTkgonB+D>qV%80lA\h:6?Ifj!^hLcC)t*]Mq4ZEI<cL[9tU4MXWnX\IT&r2b3)O-&]f16AP3Ae
+%Up4!*X?AcLA=ZliYca;<o3I>+ at HtNa?ZMnP;APFA\%U._qUlk%I-<ih[Pri at J<pC!5!a;u8&#<:$pS-^e,i3u[o%LFXYmG4,5P30
+%2&e.V(W^J1F?m^Ra_QJr*XBgLc at u(@'kF;#.2>Rblc.C(.I_kJ=&7pN4Jtkf35"DPd_Qe>3(JL-Y%04#gQR[\CS9Ffo\Z(;\$BYB
+%?EX8fW:)cLL[\R at -Z[O3D$MW^&gDHkUg:S at VekFg'ug5XYmanFe#ECB7Ro,`Pa<plJ4jcn[t?JKO1ii(r1NRZ5V87W:&2=F7'I4i
+%St"Y(!/)B_ANBr+&NM-RoM at k;&tSW`eFkTc<c`$Y#70!W>E99.P3op9*"*t`#C\#@j;;e24MSP-;$!AOpVW,LJf_I<Ki at ZZBI<T;
+%2k7"R at AUU^gE[qKHA3YAQ`9%sTKh$9g at j];28*Z3F,ci2>9WD36U=:.e-q;enqWI)W!E^aRglW6DUOOpqX(HZ5rLAtZ"O^j#acE"
+%X5o`1plCI82_<%U9@)L_#b4D,g2#\GPB(hA#dM!$Nuupplk:Z;s3N`h>Bnig*,DbRcupa$qhF4(^E<]+lAqfjOcgrfc at -75Sa3Y`
+%PYu7%M&b.Q2*Xh)Yn<SSq:&"(ZSd3uV<1#&`oSP+-)oZ=26EM5H.-I^YO^W&MA2PXG$<AgWUhWo]Mu8VJV2f2k<2*2Q>KW=d`4D,
+%NOh*Cg`CJU2fFnIfsi*s9gL70B.j,M-/&86[)6\"/m_FVbLoOKcI8q]dVWINAPMd7^tS<WX(LhCld\0qnmHo`E`J"[55B9qF<?.0
+%lV7^jP9j9lYR<Q+Y^%-9jth!3%(866aH<Be+tRPikp18Q-(tnj'ZJ2!c:2[qF:eDVWg%SM\"_EEPPaGbc2o[9B!##;*e]A-_0*<0
+%5YX^J at .at<I7_;8jDA6"?@FnAF+K_q=\$Lq`3(/'\8\e#<Qa3H/>TOQ_egpoI1nsUBYiBDE at 5/pM at Y!@GniuXX\gQ9<!TOmXXD3e
+%4'HD!eK<+E3OW1"hAoZM`F7seW/,8_7T,7,jm$WHTVT`uef"X=@0<GCg<@1ONS-m\V at G+ej]Q<k3G7/uM-40h+/WiaXEgFRarh17
+%q?Ob*om<RI>&*G/5KWLb0<TlJ>Rh.o&-.J:T&REFIZKI%FKcX/TAjTqlYEmF.6GU8pE1k5ARWs3HKPZ;1h=3;N!n1nG;6n&?*&WV
+%&<+83Xk#T@@b8)<k_cBccM<f$k_HIPD)<;LFZ/J[[%K2 at .Vdo"Tc[s2JLB at 1$N5();B;I8bpI8c8ND3+"4G=Lg98`fiF.3f:RoMu
+%7fncqgW9\PMl4[`7N#^>Rjoi:1kqea$A&UBP:\"*TA1mGnpF at Q&/n:a]9D^]b+3pc at D)nPVH.#]KNkOu*qqBJCRWM.#IA8WBT_2J
+%Z2HD=h^pQ0j9-g+Z8&Ypcab]jDo^Epmmo*ETobZ1:D?,`q+-pO:92muXQAqV,H%@'`/![R2(GCbYJE]*?AAu6!aR'X5`ne0,0/\#
+%<)4C+7I1t0I!3%ck!j_\h()fAeb at 5VI3n/`re!u=4"6$EHo"U)AsD2R?-BeAH]cTl*&)gOGMp<:@I[V?VFqKH?s;9p:^janOIJjQ
+%kN''9$!T![)CP&J8H;717rfE%k'%Tt`H+uup*g$"^$nqfr5oNnoe&=cX,a<,^YT-Z26QPo9cSH(2ECh;[:"+T'CkpjC>gE;QH2=G
+%15F3j%M]?pif`^":(hkdr?J5mo)/VYqObMb/N(Cn+59ZZRrR2aTH-csB/a+J_58^GH5V4F!=GI%*_R=`A\2KA1Cn(kGnOb*MS^Xr
+%]on<_)S1$D\!t!NSp7I?:H!f43>90CkXs8cQ$$!/IGgGOi2+[8KY&\\>HirAHWuF;,d+[OQAY+9S'k"_XBYm^<D/>/Zl%\-k3$sV
+%1u$B"A$AMM[B.D\9s\o15UMm_hZ`VYff))sJ#/$IF8NHLjXDl.rf.<)/8A!'+3>"/8rT%U+HXOC"a$3m1)u1^%=Q0`bqQD2F)<b,
+%[G>&Y-C'F["Y18of'Kc#&)0e%c`%B`d3JCa:qNF9STd9RNcT>672:.2V'Z'&:S3gW`%Gg^$U at 0Er'lL9e-- at siU'[j71o36"r=SK
+%?;j\b`Wcb`L7rf&J at t<>1]$#pk-jA9IjE=HSmLG=D:R.(e!m?hg-XT8^O2%E[o?KuX195uD4M'ZiE]H-#*n94P2dTATYFc"KtqFi
+%CBF>'9p<6NcN9(a7-?Zm4"8oZ+C2H:Fi;XR5"TL_l0YfcPc0p%Q$_a_eiVu4+Qd9cF\URY)I9:hBuR`G6%#Z_nIFtIYD4o7Wce]F
+%3$oU`R!MFIgVSRnEDk>'h5rKSoVIZ.o/"=G'6s%R?5dFZL2'IrmrQX6D#>XlQK*@a2C_HkbU`JjSt*HGNeBr0j##rQ3OSEuo2\k8
+%fj>_Hql241i6g&q97*Y'-S]V(1[[Z`9%gsBM<Z%nX]0TUX"n(B*5R$g_;5R#0pD[tG3^tEeAb'/?72.VVsPH$O."e[rC-D!':VX+
+%#?:bN8;G`I"'Xrj at SGlXkA302\>6,snL:_*d>QQuP!b7N5^':3FeS9E%p&;n4K%mHK@'4_&2P=JU.U&:[)Kfri,NI5fWe98P_IF6
+%rI?QZkE*VaG,KFanDnX!7t,mH!?,dZJ0ee=!IJ(L%nVOIJ#_QPT0TCj:'4U6lba*gXY,YgDg4cG2XrGde@&oO-P]TEG+\a*A%aQm
+%)8,$-hW1Kk^u1%")\k80JVUeO@[?h/+6k\pnt^k&)f7mW4]1[A&G"m5,X0omgf:*3`Y7]CEQj%c3/-t)jjF"i_<'`mEsPk>I.XG1
+%,g!i\2cha/Q;o8mL5*.O=Jdc0:$'HfR<&4BSA%ge2&e#`l,:hE8SC$l:;oURK$1Zj%#[u\dWm4C@!u1k6+T+652UI#[LdI^POo)D
+%ID-OCd">sW8_fZNk:^d<7F`#YmoY#b(Fk8+EIG*epa+N5X],$IS\*1WT1"Ac.O at NSe;JL0l!QQ1]\?>I`@D`"@V!siP%jb1. at XL]
+%J#-Rq#8OtB3T7h%C$/L1(:mf]%u%O23DCq9 at k'3BoVS3!eSC91l:1&7<N8-hY$QN_mQp$S!r&1':h<([BBJC73TdK_P>iSCrpbP$
+%g[\8T:CinPi>e?,S?7rIq,.pkEWBS"0^QJ0+@[`aT at fV8P7%>,W&k$_`^6/JAuM/OZahsp;RTF8")=<rm7->J9%%Y%ku^%oH`%LO
+%GF5EE[!UFS+??$#pZT.6]Gn=$aD(nB`,nS6>srjJ at OWUTEbQfhjY:FZSuDm!"0Oi9*in=NO:P-u\HBNs2j+PtGT)F7QF,c'0Aq_f
+%&(Mqp+Oar&<O*5D,Y^YeR4AR?oQ8Dt^:9=H[RuQ1<>/)tI)b>Y40VTUUQI`%;gG&bd^tLeE[3dQ%l'CRI)lCniQgQO";fY%#b!gM
+%rrZ3Dk_t3$o\#F&Z)__pS&M`g0/D)Ej#5OSAUJbS`1 at 3,p:Ri(iblA4'-NFC19g#o'n1gs*\K&@l&sG_pQM<rQ]s("EsXJ%04_>5
+%s#a(2;bBTMC<Y"VQJ:3HrFg_X!hl5S)jn?A,(Kht]8D#JZ&"b]n<V:KdM.e/-Q.%)=K=eXQ<Fn-n&_3]nj;3">g.!Z2JI=4X?k at a
+%Z'HtII+peeaT8"M`N5u)r<>2D'_5GXi4?_VI at _%e/TA8GhTYsLlAO0,qq,^-,&+5oOCh;\F&H`@_$;LofH4ue`kP%OK[8#UE_^sZ
+%!\.b:5O6Y+s$C/`*XPtf+lIhp=.U at J%[o2qQH?o<n:^hP>1di@([iHSI1CLug4kTk:nX1DL5,lj:%>$(6E.H]=$Gt.]I2H^dff4u
+%e[gpjSZ at FZ`3$R[QPf='nE0=lJNg'gJ,)h%RZ+WJismb%-DeQo&8bW78*rL;06T9>6FbY\AKS:&ie,2)Yuu8!%\r%]ES>qAn$A<E
+%.jm+.qqP(_Pn7SY"WF#Hg6K at q`gWAH1[Df2G7`l<"T2o<_[j at 1WIj\d`j`C)qiI',j!OdO[rAi:Mj6OB;SL#J&V7QXm(_rCUcE>+
+%M+*u?a0;k=!1N4TIs%CC%+>eAFV^Zi)mcHQ)EiZdZ>3%O'!N`L0GR['I_dfe/s1(AkkNSe\al`NUs9)leup05gg^Cu&"htDWH%T?
+%$7EqtDb:b8RNas.S:$HKf9eL%:9_=V+K#KI?;7R1Oe3=k9.h98gcuJZeaJDbb?JIi$;?IZ,1`077u;%a7iZ#ro'/iM4cd>_cCT\'
+%C,#[lMT'A`a?M+&q0]$J\i,Rfdt00,>l1_fYN2Rk:Ec<<BlFkX"5$N/#0(d(IdRQlUckA*+_OCC^$25"rf%-dC,6m[)p89-Dkab,
+%47_=j-,\WKiO$UcKKVB)_^^KaK+Ulef[^B9r.2Zr_R>5:,MA!od,Mb1hbMq8(Xr+`Y%a^2/;^$`F;7>I0c at Kjs.5]44)EIfY0SCd
+%Z"iCk-I]chUQ`\T84^jnCeE#(E at LZ<+"L\TV<WISoB!edEQB*D2<?L)Dn1qLTCPoj&XOK/o6$Y5G69R at iUC+gEdriG?p,C=kA&AL
+%:(g2tapVWlZV?k]ak7'a=@b:7!^F6VF@]2,Y(pYnh)`/,`PTJbQCbV=A?q`%PIXKjU1?rOp4Sc`L499c]3=VZbfuQ]>uN9%5)#*?
+%VLF[?qUC[W:AlkM!8l^]*0 at FH1"jj*d;)n/L/'me2P%cndL-):q(MBBcTFX<`uO\l]i,4`Z)u28M>JOI]CLbMP"Amb&BR5[IkU..
+%hOp,;&.>r'N]KH]@nL?)j-ae%.c4gGG)8Pa!19+BU$#l3hRpcV()4Q3j.D/W<iVYL[=4[UQIuXC"R\sBY;+JhPgRCGo,IJr;1qG<
+%2eBW]/&-n_Ftn43On.)Whl2[$CX36h0#Xp'fEQ2+oQXY(TZ:=-.%G9tL7:mbQD]R8b;)6AY;n;\H,8SNY/tD9Ep-?SVV1E2HdSoZ
+%IkSX at 7&m$gS+[@;c!\AR1S`U_kHj>#E$Se>kJ]R3dS8/FJsrcK!8Jkmm/#sl<d9hc9;mZF\mE3CADk]+%#E0]f[s(Idh_7F!QXhV
+%NCrF8l.>)8^I/=PNI#Ag0[c.SWI$"?/.<E9c!:6gl*Q5qXt8_4luGb5j1/1A\[,bkE9`E-6mYi4hPR-5l+>1a[lg$:+8]N[)3eL_
+%G@)^jV1?C?>"Rg2(7b,_ at rj::BcMX6#;s#`qV>]F"lYua#$U;Q7OOWOA'+ab0-h\>(oMOHdT827C+m83"=lqI\)dcDn'&WDo-UU,
+%j;4naSWjM!,#D1lAt(,%.*85lhB at 6*kpN^@"!;]<9m56SP/=TP']Gf^L=iUaaYbdApZ3X3knW;8luRgA_k"s9b'0hA2!!I*%8DiM
+%rk#)&M+s!58n)EUj>:Mm/((ZtVC)$&VJK96cK(R]qY>/X:)ZlC?HC%*L#&!d.rng??I]brX.37`k._ at s=q&LgHO1YKn?kEkIb_sH
+%4mtU,l0Pqk3(>R'P_ at S8q@s,pP[QKtWN*6uH)DF)Ss:#>;s at LdZ]W'i4382iSIuEdZ]nCs;?f>?99#`BdFP5qW.a3aChRS[K>^@7
+%m,[g]M3MYY5YA;:/oIgro-kMnk:jPJ+X$HEi6V'N0m[hH++<J)A1rcV-'4 at YOu[H?E>!R`c<?"q[KV(>W--3*i4_]f_F/2QpJ!qO
+%::2OWAuAs%0,/j*;7)b5R5'VH\sZ9scGRM03B4Vnm#ZMEM,,k?=D>Gsn=^U9%d(f\0+l3ppJ`8<%B*"Zf=eoTC#6hJFEDk=m-X$9
+%2p-Y1&ne5e3c3mJ`,EmAHfoZ!KZuGk&>ZPOTed=-0!5,#n?$TIXQHtKR!b9)6Xu_Pb*]J-FI$#fE!FE!qi6SXh=YaI.#E0QY!$Kn
+%U%]A&EC$8V+7plLO`aD*F0[kLL=^L#C.SW./nYJc(j!a1In>$e:@cP/(;7hh9-E/aE'Q/99OY],PCA_YOZMq_%=)]4V%uj]oTd[3
+%HCad-%;8ZV&t/Rd[j;/`HHnXk)9-U]*cd6(:&ha`EX':me&>poahCBr7N)tf`0>tVa/3bUap#-UGY8;/36 at 2idusJO)f6kOK$HhK
+%P"AF&jZ1OuV/*BEChY&VcsF"Yrp)`#qTCOJrOYffV.;V$R;"b&bBp-WQ*P784o68=9ItG$/7'L:N:"brnSRid[GOn,)W)>[C#05f
+%>Vh2"S(uE5'ok5gD[[[R/QWm<2cr(#[oZ01?1G!rQW#0R^72sh[3NfSNhC`*k;F&NT@*g"ndTLHf2TIgIUsY at -Iu3amQoFs\gJ5/
+%3c*qgTra at 9H9_8a5H?9UA/(\8p8pBHK`cLUKRif$;`F0Ko)?b[bQI[(7(*%mQR6FD1a*WsUp[lreVi'N^l8l[e;;]h?`_Db.2KWZ
+%q&!PTh%li2?HZeVM at 5/A/CmtI;#V;1*5g3FhNK,F8/<0B?1-rfWOAPPR$_`+WW\jMp=<m84d(k(!i"P<T0sl2 at k4,nOZR(Sfp^F5
+%>P(u!1BRJ\RKg;3K9"j;Qja4tgLfcAK5sL]M&IrAC.YcafSE\^Y".5!aor7[?u.4W@#B.I)3OO95<m_W'+o*tZ(Il7mNrGSEnXct
+%Sh#5^%B0a$fDskQrIIjR'6<[E<-incK([RHoJb)IM4+@:7A;Rm+Q^[!rA[^kjne*RFK-n&r.19XJGIumhgaA!mR*n]9^S['mO_T2
+%o*A[06D>%X"W)6Wmn[1=J,_6WFtDD'=)R@=5Xcb_*9H\<OI&5S]Z6VYEds5f2YuuUIHCeq3%2jk[o*uDM67PoSc#(".tH\OAZ74A
+%'>'Hl;TBB^c<JEJjNhO8Y&G)OJjMiUHLG+\5K5Mb1^2#d;^1fHJ^>4tJeWa2<"A2/4M&#f\*FEEK</<".6ETOP#:f7aosd)eeiVl
+%K*8q9*E3[/$"e`$W?:IOot/a0m6Hgm^^"QKR,Y*)j>X+%K1SYk33TYC&"6md$eGL,nOSA:F2W\M\mompX9EB;[[,^bLNJhVbdkB>
+%kWqt%Dr1>B7XsRoVVMP;H.Z5"GhJDZ@(/8:B)BWCa2)&SQTLSLkNae-8":qGG\Nh:@tjNG%ml at .,strhooRhN$VIA7hq+?89Lqt1
+%)@:A+O,sf!UNH(+q'_5i_cZiq'p2SamukFp1f'"SSc)[hU/_%i-s"c4bO,J14<UZFEdft3jUoA)F5(Xh;S"ij6+`r!'.ac#+&j-s
+%eOu;NN29N\j\N_iS0EH^a_l8kQtYNhnJp`")!EuO]_X7QQ%PeG at 1rQ7f+M%0eck"DF(WL;"4N)l\S&I^0.lNlpEg'<kL1NacC:pD
+%Jq5qe?#S>>Iqp]r+&%8BLkrP&o-JZtg6U4bkd8)2,,G@[,/f_X\Ue$;EVMb,ZY<\*m#@5Z(:l)9OH$HP[qYtYae^KuH\8%cW)-:8
+%IIBT?9g#5tIijSkM&a'+G6^M4+\DVTZ=E!Fh=:VET09`&[n%XAkH!`2*j=[Z)(S_plg3T^K at j_^YU#PJCdSFQ=<`NL0uG$crQe?\
+%HHcq"0N6h+9&a7#*0>rcknH58X:ip*?7>cMp=`PVh,c5fL(oF:=m8$Q!NWC9cU^=T=0pFT8<8>''i_9e5!gI<ULTiXr80c5$Q-=;
+%a>M54Die>5S7p5"@;JY0R?4DETCbHV]hC."%CTag>FA+Ch<l>]`($kfCdDXY&]f6\BhX2*FGQ'-MS7S`MR%,1b>utq0RQgnOGj(_
+%SQ0/Y_6J+!:GS#S8``8UXY%bG2iCGt/Z3K7.Z;0;>B/iW-Pg\V`hlN%6:bi at h38buZ>O.:iK:cKfBI^$N/E9ESUm@%g--`Qe!`sD
+%XE1Jm/R:Iq\i>LLjM!og$XVUa=^iat^QXtP!`)n-nf=asi,+?h5tc"bj2G%uU?6QZ>FDnM]LC3LiD0+Z at 3IN$B"F?Zn_Vi0I8DSp
+%Q at pS[$O3dm,rZ7<Hp1!,kgbjp$i=,R'-c at qSAWqE?+`a#(2D!Xd.cl__?;T5b^.pjc[ObVP\C8BVBFj8"D.utg7%h.[cS^[%Lh^F
+%@F<%uW&/sn8Tr6[M63pcB.obCHJ2cOF$s:t=R3)j0/d;X at _7[qq##JJAQWTo^tU>1?D-9&MEpQqjbh47Va=k!\Dd`HgIOE26/!cE
+%=\6u,>D?a4j%Uc'Z3b(tR;*SY9pGVDH4;8Z/,.]^qg0f6l5GV)R4mk`k7jBCV`oeYShKQ10WQLE^8StkefV7>ME8Y`7O9 at hhLWVA
+%X@*5=_+5t?!^$AX`3Qd<r9LXjP#&?F;\Qs2=-HRR6[)ZaAYhrGCjgCZ0`,q\0#\7XEJrJklDM>mAl!:6HZ&7V\Hq@@n$+5hV-"-7
+%G^,Ag&$UUVh)FotoCnBV&.IH(5;HjPe-Fm1kM2.>$1fJ9PSCt3".LS<]3A<"f0!c-[HF'/"O5a-H,#ZcCT$>$[-C?-.OiAP4#3_!
+%b/%>#-.I7HepJ+&/DIhU$V=6W5`!obg_Q.2$$-,+.g`<tA"r6FWY1bP$dQBB9 at SmDB[GXR_K[@UQ9=Zl]7r at hT+3hqp5SHt6HGt`
+%pXol,m&?aUN&EU:.pX@#b^/\KkBBc/YnXOhQnZac1P[5_E at 6sp<[n(l3SC,?,ub=;)EOu;Pqk:qIsZZ\lEHPfrACu>(FEriG,DC*
+%.WjcC<n`h+3D@/-I^]3p!u at 4uRO@p[8QE>QT4Q`L\gPhMIf(D(m=\)J$8/-0[6bN>Qdg-?EuNJ7J$jp@=fTU$B80"5"Ke/%%PW5J
+%$BDqPF]n2MDIO2h3HjpE&QlmXYU(Z\MmNG?!H>No]hFj,Z4qSllSQcSQZ&1`q;;R&GqZu'\"8si+&A+_%qkAjdYd1G5^YcCrX at qj
+%k;7&%]haKjC)l-b+LrM"5.,B7rg)7k*9%hs;Rec5#AZ)a7+^DcT'-LV5'-+hO\**L?@E7sj=<aZrBKsKP.S(cR;.i#R%jW"Y)Eg&
+%<-b:15fu\1FM%#^D9/NE_tM?k9H^q<ZiYr&#TkT"5,nC9*dsH'2Q)(pqE7(WW$ZJ?T)5,B9D9]_Sc_fqP*c&RKE"8kRfu8Gq]8kW
+%!eu1!=7M(5NYk[B!*ZA013#Dc7d9+m8'm[Ur*AWL&]]1V'rPrn_uAuVXLn/l,iJpKQerOl8BTG4rGGkAVTK5HP2L?e+edtEC&K@&
+%-._n\C*`HI25!,d/_J@;qGJpD-s.<6&FqSdC(E>e`d]a0SKDB6LALa1pYT$=D>]Od-EY_JSph+7AuVh.1k at A_2Rs@o?4pI6/.#Y+
+%pnln`4s8+?o:md1X8P\98BJccih30-PF76O`i.\=F/Bf.N>rUnC<BO?Y6bDM&u?)`fa)>3FYI7hX5KhMpS2"!H-?Y6ilXnH/Fc:%
+%KN&KXDMA328s[[B2#&Ar-E43t=O&M=n8D05[n<9^-%;'-.g2bkcM!T%5at5U9*_X`U$Z.3H`lOqiCPRknk<K-(pQ$#T`HH1e/+a_
+%KU'[Ck)>CZ3Cd\LI"pC5m`$,t4[9S8@/Q.ZamlB8&DLXK?I"U-m_rsgXubYjUY5mGRGm5.mNgcn#i9J4YeF?]E\3=hbb4d-NqXi:
+%=N(9h$4Tn_)>F+,VK6_9e2+;QB47hXK<WB>nNiuJ9XQGBIP5uPnI^/EeBmY(jZ._u<aZB3j&JuDP;Mc:f7g-`g3uUoYGSA>bFi[O
+%F;O2Pi:4I&]N%,HjK6`@eg(?!XBiP\FKg`.GB*u*5<Fb3!nMsDb!5gi5bd*6*T+2OVsg05EcW<J_VL2A\rK=1,c>Rc[(]Z)%ql'u
+%;cYOCbAqj:J;P/(M[O]ie?Yf0/B#5R:e>@H8PmMTAD?78P at hqJI?Vs&nF$apEuL3ZPC(Cd:3Ef]ie)@=_f:e7g7Ee8/nk:*4`<H0
+%K97 at M`6h3RF^rfc+=[q5$cpJe)!mt'`(B2=.Cik<bOjeBhCElEmedpVP7,Er__u6^HsSf.<1ZboD3s2'i&H?#EB)n9be:4$FcYXf
+%LG at dP$:Qe;NNCE(P"M<a9&H5eHKc:W9#GCbjK3I]1nMq at mm3+d4`#9@^,`5f/OF&h<;'JP[?4n"-E:#;8;0Tu>7m-qHq`oE>-rb#
+%RhoGhQ4VQ5 at b7DPjJCYdA(q;RVfKp)>A20#?s"F2Hf$4,8I+2mAKpTfY*p(r,QUXcJT(o,j at I"O-FV1-Up:rS2K79<Y!72L4N?f_
+%_3I8n$=*5PqOU2Z#ga at aT>iLo8nPO]\91OZAUY%2-c7S at l]m6Znb32G4I6+Hh8tX"(W7A>rdO/1!L#,88"TNhV`0,")qYm1Ns!*N
+%*daeDmPhg3;ECl[)S26RC</1WF-;3#bM6q$c2D?ufGk:Y#,%,mJIJPG8H>a$)e`[/0OWib(IS"eC&f.-'_I#EeC<^!>"\'Sm-"';
+%R4 at 9fFG/`@U!V=CA'!rUI_*o><=NPi9P-;qQ`L%dL*t3te"erqr/M&(^(qqFMgMB+q*kX.!H at sB`0l`sF=0S`gMfO<_^N0<YAM]7
+%YHu'IGhiYaah%;%qX5N:k/46!&T2M.a22U;+6qk__#>iUS0T7R"/a-iD68C<8Y4X^o&DNBM6FoC&$6*'88]#.>:Y1aR at P3akBhR<
+%mbck1WF%/G$VueQKgs-Fn%4^S9VCW:D=X@>@5*1M)N".fR?pE5K)S'<^)ToU=sej3^Bp;o]l[[BGLF,Z_G19]@/NZ-45c^:nnf5E
+%W8I-j]:QeU]U1pj+m)Od__^PH!GUu[6a8J7OW;7Q.LW1']IOEF5ec\11+4iJQH:!(]Xb(:6j&-ZURXMWb/rP@)ju5_m8Np4ebZ6K
+%H4m8\#ok=BcphPkRhIpXSek#`0/"f?FqV.d!EFppGC!n"c3A"5WZgtRrL#Q[p9oSIo5uHHd1JogGNG;_oin%u7o4$O6D!8]<8.G)
+%D`89O]gC)kn_an?TWq\Q^5fb at _DIWLj*g?ba(-h]TqtrT%:Z5FR>5OgJ'VVqU:'n*r4bIU\+QN<Q4/?o7 at j5\LqGVjWuMS7Zd[#P
+%TK:-k[V9SKp.@(3Bj2#b-AT,Or`&oR3RKl1KpPnr+IWG)PH+CQV-+LN"BbJtjo-1]IZ,<bGb:t2.gu,`ab at B&Nd>uN8[<W:7#+MV
+%#CP]tTt/X&*\WufMmg43PJ?jtR\Y at k+S[)DCjcbYaNI1i8L<g]ir*S<e$Gt8[ub(DWMY`t<bX&G,n&iEnEqOqr%e421b@%6D9K:Z
+%PHjT&P'lcWq-!1<m)jn9!^Wn0&CJZ_TMJV8On.pIU=rsSnK\Y-EMb,oVTW>0qq:m1Zu>UFlBFm_#=Gk27<@-[3Gnq_WdJoL%@rjk
+%)oEV^c<4h2V,8D2?/-*jXYaDVKrIGGnN5HCm=@?SDI4lJAU4@;IoT*prG&X[D<aL&,H4uGFST]W08)R/do=LN,<]_HOKYC=9N.s3
+%Z.iFiPW7n`rJC8F?Y0sr:PTR;"D3^<PRcVU!Pbt23H)288\h-_D0;XD^j'C,PIuS:EVJ6$h`RNu+(5_P[C'C#U>m&6[73(^)'Fa0
+%juf2JU:D#XYVm;jr\u0pX at KZPNeo)EoCt\BrN]*gnQGCHRt[M/1bPcV2HE+C:Op\3+[P,A5$6S7G57UnXP="h?+=XmSY1eTCIt;k
+%Y@&cr_ug7:gNkUa/Tnaor-p)G?u!=oZ>3Q%kt)C0f$-O>K0p_ZH_%kdo+KfW6+oj>=6_9kUCoh$k9DFE"DHs;`OEA.Y6T]/odA;8
+%[<a^^R'QcSl*_&F*A"5O]-ZWLY>OF:0J*,92OY0X-;[7[;D9s7cbXfN-g<oBTEFd3Dq!2FW_-8sfu'\Yk[jd(.HW]%<Nm6[J4sC'
+%9i>Vo1Q,(290K&>`n/e%s1M^fFqU at 7I`BWe,S?&Lc"=d=+nM,67hnCN=o%t<_mV!C3_h!%@GKIq+16SJModD.UmoIk0JtFbdM-L)
+%B^ja\Zh#.&L'>"%2UVC\4Xe#i$gf8K%MDPm,jKTJ?1:O*ha2Ub+,o.kWlRsjh$b!.J4t6s"Qu#hp%j*fD0f830J)DNDQcZb5c&YZ
+%Pf`L4ppbFWLrg>3[V*J+#R2 at l81li^EC*4R`Mn989M0Ju)b*3L6YnfFR$HN'Vmi,8k7FNcfkc<%dH90g[jOucc9mdXo^0t'(!Hfg
+%G$.s,UQFm@/.XoTj,4_@/#58JgGUAK at ieN^eIDX&-ju>h.Eat+"Ao5E=6eK$)3<;h:ZO8S+H_<oZCtpoU(!FJr(tIPG,honm@*1m
+%(umT2#oSskDQ=".4O9Qk-#4&64Hh[*6$L2`fDRd`PA$rWaknq-q:$QLoc(XR:GFSeI#s6#),UPig$UinB<'nOT1lZK^4H?3kD!HW
+%(,??^,c9.VqutEXr%IH<`;%<)nFe>pdV^kZGLc(CMH#(g^d[Xm7UiuHoC>$na:loqX=K;n6nkK9_4;c-*t,?*9I<9#]P-jES5m"n
+%CDSI]ms at GZ$6*Jl)RhrEfpp#LL%ADFK+Y"<4"&'655V?%''RV8E5`I9-[GR<m-P#iMS(ds_njoG)tL]E6/Gk4bI=D(X66]c(g^?Y
+%&:H^=gh/"g5$)sq4ERl:p2!O"<AmAa3E`AIo5Yr(YM[id+(1:[T'O#HU#Vu?[L1 at 0,'QZ>`G/jtgJ&<V:AM;!B6E.\;qPL@\M<UK
+%I^t,62E.stC/.932,HO-CY[ukXM<#7?l<3F%'QSM?#R'WnP"Gh`*5F4.K7(P at 1mZH@#R<t\Ic/JhcRe=nO7tK*m$7(8fcm;U>2i&
+%gf0TBk@>m2@#^,2;RV*2q(S85qF!Wt!JJ@]\o-MH3A0H2KLqas0Q5(PE!)?,oC!2l\5(>7GBm"9h3r-WK[K008GoD1ADMU+O'%7h
+%BdU'<AKDa$I%>)sPhFOA1:`3[2j(6'T:Sl29LBgJ:ZAYlPddK1,24grHZ*)FQ`YbUq1Q)-X-_[.$;lNp[Bla`!b@'mmX`!N.9d_X
+%D2O7fQ4"Q`9B()j&&%CaU<.oUr"rtc;]`%i"RRQ'P8^o/AP!?fmDdseK.fBlj7e^8AaGlsU9SA"Zgga[<dU1o095_DGpa-<Q at 1G;
+%>[lV(=:k6Bd%:l:iq%e1bI66ebC_>/7gho+7XfA=dfuT&,[#3*Q[js7S^+4uR0%M+_;+!:Ce5d(]/@B[".(g0RN^3c:T37gW@;>$
+%Beq&0->4jJVUSI`D6S;7OE#p'R"eVFT?jUn<cg0@/%Y.%kBIM at 0i/.5:,Rt`R':S;Y=tL])EcRHqQ=VZ_<4Tp,(>/IGoe7b-RQHX
+%(u at sq.`\h?:L=&JmO@`,b_fU'-gs!J9-@#F^Z<^!2o+_soJ._pa`]5&@Otj]-!RBP%L*#VYa3%a_(Uh*l<K`B@;AFG0s at 2)[sZSn
+%g?l:jOA(fNpFuEc*?tJE9joqc\W[]MDf:;akM at S`?p2aFK&?CQ,uGR]FKQmGG\#=$ij.uAP&GX:@]tt6k8>\%].fNNSX.GGE\H6^
+%Q\.eWLHrP9)^Of2(ShOe&4I#[2&MqT"EBNn$dR&dgM_#62LPPLp,[R>%"?!!q7q9EMnbi-!TeOabkbB*)AJfK(g^t?1f3s\VBo%r
+%rNe$)B5VNe/-#<c-[iX(YdT?]UVs(Nn_roIgtNoL,&r0,fZH^nU=<;-:O-oF,WUekY%gPo"C+b;)2T[G-mDQ'**-]N-X;o'EeAP`
+%A<q6"=p0_fl5c`n#+7OEQ]2h#FSQ*4<,n1lF#&j^n+ElR,Nlb9Nm#tsbKk5:!8[;P*gOeNK[V<KY#%q6XmO6!`jmC(>e]*2TsN;Q
+%>trTf\FhbV!0;?[Espds-Qa-fpR?#LcHh_7#S5URk(oQM!83utoelOqq,;[bX_")QEjNe at DFE/q`2(&"7X(Jl at kq6,]1th4N#'-t
+%bJ],!6?h'G`fmN08qP"9,Wg9",`N;&!P:P_MlC9YCo at 2m'&*QYS%]eN:+KBI1F\_%,t\g%6(-i$e=4T6M1kRhNdUe'Ln.=6V1cWH
+%K]r]b:ntL`1 at h:L*j90]dTk_I9p=h at 4,e:d^?tORjkDusOn4/-gGRYtUhp$Co5ggIVj1+5)kNphX/hG+7'[ZAKGKgomB5:c`9jJA
+%AQ^`5;VWRHkWNbQ"Uj-Ao3O1j,'6#C\mc)[B"=/idWmB(+:#:dNci00e[E`k0a",r'>Uj?:J,'4Q=rGX!.iLf+3%h./2i=K?Zc,X
+%WTPhcg/]P"R)7.m/l.&ViAb[h:OtRi*-Lnj1LQ*',CYj?m`mC7Z*eQ>.K$Lc57CTa at SY?F>i3(\&<f_TG)g5H^M]X"^>@V"4]Cq7
+%0&e=*r3\Pk8U^?bN\STLpIB0]T4DLDeq9Z1;[8uqi%_?sZ-Lj_@'5q/E&5ES,V1B,jfg,DZRmJuN8$)q6 at 2o;i*7Q0Z)h*ioUTjF
+%Z[(5m8T5*+e:2*d7Y#(]SBRPZ</NtPa.`aDUJmd1%%]IPqma'=!#`2*DuC;p=K9+%2cf8c;Df`dOTs.,knl>T`'IQp`KTV?ca]Y-
+%r8b(0#6d1A<4"Zcob951JG;d:PE`?%YrS82bqViu$V<C3Z">:C7?D)\3ijhX,ep-c.pa-2U:$/"0X2KA63!l4IpTqKc.dDXVAL0P
+%`UlGkXssSF^,7p)50I at 9;iJg`oKll)DORB(hh]gM=Tu^rUa at 3^P0:POO4_fP\<2ilQ\UulciQ;SRn(`ViBUOB6]'ZQ67JXHbd8"g
+%m\/7!k^<TG^RmhM@(WF&0lORl\+AZCG]3p3rBbEJOKaq^2"XFKXV<OLbS*M!#H".f`HQ3orD%DlcRUkp&p!0.^4-9Q^IMMnH9.q%
+%[$rJ*O,0p1'4LDeQ.u;.jCp=)!bYU\#aA"ZYcn3KW*PGld:sY"lXV8&=lIBRc3#ttZCm#BHfT?+R\[ldW12tWIm9];Z?IiSYZc)c
+%%^NY=LP$W2`F'Z5+A=":R0>HWXol+C8s\$J#a:u))_QEbaM`XM/\u2\)I,fT-.ge1^i>dN:5jF3Vkb(O_>u*l(cHhj8=l;L0Cu3L
+%d2jYqc at 0\gE%M<<p9Q3'-&e]*=S.S5n[51HELubKI`[=(%8 at G$[#j$^cpF9!)=-q^BV\6XMA+r#dD'K5';P,/82clOZSj49:Pg at r
+%ZhgGHrroEM%=$2*+4d4Y]qp]\>I-nfaSCncE'LlZ-mX at bH!XE9fVk!Y!t([b@(GO]#$`EM-$An912QV/U!Cm;FuKSkr$6t&,V#t)
+%([LPj#!6udi$l/3Y329UDF;Z<I:7*/?$tu)A-BXe[;lJpYPJE*^DgWYOtrg*Pt?2%Es^o!M4&ieAb^!XOTh1)RtHWFY(#Z*PSYda
+%eV#4bVfjO at 3M0t8]G6a'%<B7C"cRo./@R!FW&LQ9Xa>ITV_6+7G&$=.L]kP^R at GfEQ)%A>cH"b?\\\g9^_eb\A(fS12+J'1dD;KE
+%-eNhqgCk7thg-"=6%Sf;/5tVi3pe2B<%k55mW0K0A,mDcKZ<2\"XOAeVktV$C`AOSZKI"lGhcgmnl0Y7+,3&,<(YgB#o*PHPC+d\
+%YtEAq1l-CM&WQq#EfMYL0,)J1WPp3T"`=?hXR$0iPT+[[-3_3r`*lubFdiV-$7+n;=b\==8>,q8'8VXs'<`94d/hP;dp13Jq?ir\
+%6E#k!IWij+b-fH36IZZ8k!&.?j7ZlsNQi`<S9(CCEcPHnM41?cK]OJNIu$]Y&iq1Lm=g5BS[2aTnWHLfTU4bn&f//=DRQ*Hacg):
+%5BopT?sQ\q8a*N5kK*6Yj9SrR+;8e:?Uk-UMHf6u?+0":I;$<.Pi[YQOSKtUs-$8]'%PNR]F#RiOEeQ,,C.&d!9P>s:$52.rp]_V
+%qX")+PE`pZn9GkN[YB*'W+`(4Pu9YVl6Q8M/c,l_2H-8A8hFnZ'KU8BOa^U1Y*$rOD#L[gHP>\<*rC=2#o?=)8.Wa$rR#?0rk5@$
+%2sV:pK\8ceD`d4FjJAt_C,sNQ#3g]DD1CB=ksi)orcptbN5di<ie3kmE5GJr#PJ"EM,%gn`eQ2Mmll\N,\\/S-i^!4PHeT;*mBOL
+%6q=b)6cES.U[l[mRG6n8TTQgA-eZ_Y=XW]t at I_6/rZnXMp'\drnXBen/1Fh-&4&#3c(5\ZLX@`h"GS:Mj8n^2VaM5\^fBMB\Q9)f
+%5sEnS:iIEK"CI\q^,?jq)K<@:C+#"Am?+<Wbjj9_VhO^%Wg3^l-9i^\Duul;Rp_e*Q3^/*Qj^f>]S$c9rB1-b7ZU,OVdN*@FUZam
+%Aa=mmCguamNiCZopg8ui'0)s="_ at jc/Csh7g\Q1h)sCPZW=F;&qPmr<LP.u<d\JX<lqJmWP7eB:VD2sY+u``?83q%r at pgmD_+L7`
+%%!ZK3-ZMom_/]d,=ksoQM/CW;*/IkSXkadjl#V`8Y*6M^b'qN at 9QK'YK4)B!]1+eg#qR$l:qjJ1Y.Luu/8o:6WZ- at j8REo8;2%]2
+%cq2NB:AeKSrXlk=#g)Jh&hZ(60E9a at kUVVQ2?j/FlRc$^S!IB`h_DOb2Te%FQre_bBnuW+aXWiZqUB?7I%J!iI&l0+COQ!r6Jooe
+%PO.bgFDL3Gh8Gok64d9qSR!&4=.a2d,mk=c`NTI"%#tXK#\&'`c'r/8RCFc+k.EJ_r<cj/'X:]mq3EC\S;Y,o%A2r&@?A#U2,[`H
+%Hnl/(8kQr2h:FQ":cFu#*b*sq)@oX6:XSINa]l7V/kd$C_4 at 1`SpQgBZrf<BSt).VIab\NR4_o4Z0u-)Mrai(\q>9bWUGmgs+d"=
+%%(aY)(6g?7Gg!7?V%qSU3O8@@Wi3dK1E\\rT2L:/90U15:2cM!R-\4PLIZ\8RJ4_&o/n*[2+PaEa<5*Eo&KQ?'dG;ClqP^e'p7,b
+%W1R!I=K=249/XT5(3+,s_=4S.#_PZJ=+2Db,*-:(\3h6>FdA3U!oD-:a"gZNVLfFZ=,R'Xn`k==B1Qog#W_'qCM:GVBehKB!?e<-
+%Mt'@;']&R)c0GZeD0^mcc[%i+Om.O^]Sf-6%erL2`7JH9dQ'';=*QbJ`Vl<ApiraW3L+JI_?KBjX69jf[`Y1=E at g\34(4=q?KOP0
+%l9G>"@T-)3UBZ$AGpPl)oiMjBlj_aL[l9^pjnQEbZDr":nqH:/X at -^9][cQ,3<Z8q3=scudDGM5nhYT^D]qP:i,fZJS=O.3*#9NJ
+%H<"f74fJYY&DfUi>8&h0Z;qGZd=[^UCa.PY=>#*lLFuQagr^))*iQ5uTrIhNdVjW,e%+u67h]p>la%qc)XpT\-"XWZ'OF61_6#qQ
+%[cZm$iAPHi$0A at uZhMK/Uh3N]JH'Eb(d5./))uuRXj7MhZb4;[37o;[!)H@]'EL4"(N1)K7`Gi`MnX.:Flc^$>10p_C+Kn#^i)sK
+%-X,B)ITa"OT89d!Qd+ at TS>q>KZ"\4"+$3EI-`:4-cY)9%W?_(?N]%oAk=LaY0g1]0#31lhPqe=Ji$BP'hQ<U_913mF!b"/;@=i1#
+%?5cp3"R*X__CH"%$7KP#ZV8!Oj_%QL:]m0BY3-iTEJsM4>`Ffl<!V`0S&if[f"Q9g#ifZAHiiuG[4NQ?q&MBVoU,q*qWW/O#;GPr
+%Pd*6]YI1fe.bj&>,cGb)UgEdi0=.JMe#mk3?G=dnkhG!=&.oO/O..[U4dpcdr3%PX.]FpPKmO]b&2-f;:D=HoW`5Cdq.LQl>o",G
+%VsJqoqj2u/gZ'_[$$m2EhRUXgGEt24HAhd1$0:S<;B"Wd&Vbq1%kC+EeNm2G]A&,"USD><Xu5 at sH+7[ho-jdTO#,/1638#_1S#nE
+%/(aC2-=KPK&(`Q/=J"tK4@'-qe']T(h0!1o-nlmUSp`)Omh at _B+.2Ul@%7#rX at Nt(?RL%9R[rnSlC-c(>a. at oheTmb.@,WA*<X0$
+%h1k?-d[-CT7;TAps."BJqfGFXj*(!?7[mQcj7:W%ZL`)Wdq&s8N>>]hf_]P;.Lq3eK9l$^Qa^<p?3g2G9h7KOG(Y`jE!;[7IKo3n
+%3'BnE@,"a$IoOFNQ\m-N]$AS"\RP at Oam+<:h,m,qI0tnGQJGc*:ac4(9:nEc[(<<6VEWB'X%BTm]/uSPV+qt;3iK\gBJ"7[RP)Rs
+%qF6q`n"Wt"UaG`ihs<HY;a.+NPkU?AN at 3o;2`7D[!@0\[8Dklp=E72,;hjEp'g&0OJ]d2HVL]GNr'%N_nlD'0o72B+C_u-;'[abS
+%H*$h#$%4$59i<AhPF+Lmc7=K$e4A3L;$:A'-"5nBM0pfkFXn=Y<IR at U_ShGUg-8&oL&emeqtMhiN+lZP0Y?&g2`\S/-4E&7G]-?p
+%j$<$l(/N;=8.ggNZ(Ik/[H/R9+BttZU`P$^S1=9bcC(h^!96f3"`5oTg_M""$'h4)b.l3;bK0<Lg!A%#)INQ^ZNmj>3j"pH.IEG%
+%XAd.s\+*E*VP78Ieb at TDqt)Uhc at gf\:Za8oO^9E/Uptau))Q:()C?l)o/DTHPhaH5,=W%IH.#+>(fk\R#":4[2f)1<b%Nm<JtLGs
+%-7$846T:e7Se=XAb:AL8q-bUWp2^A?;(]i3\Y]UKi8MaMGR_%NZ&##g87.UuF9T,)&lG<d1LnN\#CiHIR2:G_P6\M>!HB:tYIJ!8
+%n`?]38XcXJU!.jpR.pd_'0TK"T1mH!?HLre:'$G/2u2(%cXia'VD#29['eL1J#@3]d*^[hB=Q(mi\K-K]6BigWN4m=*Ag[6&:^GC
+%5$'%N](Z'7:*4g^c9ATZJh#r at X.:S8"A`DB8f$sU4H at SQ0;TX?&UM/"+Ol&+NjiE-&7TlW;4jW<I^RrZD`OfK>k8::KGAO!J!Io%
+%$i6Yd+"5["7AH)2(/4:UQmo.lgMMD!_SC]c<Ba-]SP`$+ndD*o>tss*F/LrGXdB>H(\NJ at PrQ+OV:g1PepPWcSS_X?lAd"&rj1!"
+%Z@[O-he-,TcV&%)[jj&<g<%PTknehJ,03?#.EE-O"!CWkJ]Ulmd4W(mQ)Xks6r>Cgr(7CTW4`0NWOf6[r>`<,f_%F+L*$_:"80&$
+%W>W*30k'Jq?'n.'M_ee$)^d;u_GZZVmBd'W[+eOHpPjFAM7rmG7LM.a at GYY$#sG0H"_,Xk&ioPYVJg)kI,imFdcF*/>hP@,"QeEn
+%_s&[u!&2hr at c;ndRkLBMRdV7V[?3cQSrVNqWjj=bd/_KMl=?t0UT\T-jglf`Z)>t(bq4Eoe=Hu<e)dZA=V;[.]oX\5IQb-mH'ju6
+%[!BV'Ir\Xe-=FBGp`1>P/o5'83&L&Y_X8RCmg7u]E?bDVRYUCj%/S'([$=Vc2qKYW+lW+Uop9mVmaWBXUXBF:%j9gs)N^HHB_J%o
+%iZtsOI%4M`jN&+uFsJ+KlP)Xus"#<QGc?>[*/nF.c<GqUgs,7<OkSF52n/Ce&>%d2'5jtB3>6h64?VLN$$7M);dTV-l$KL3XZ7Rn
+%WHVki1j=P=q5UQ&-]NHoIOhP0mRQiro/+1(/#HB0;MUNge="gW3c-S].tqMJdWMeu4_9J5/92KJR6t'%O8Lag5jM8$q/'&*H4+K=
+%+#oKZH+od8cHTu;s#>PYgd3bf#>`:X+l;eF04AUY12Z,"oH\GNBs7.`=%Omc>p5rE'Dg!mHnt>hW*5?<%2%sM]Bd!8;i4QE_)J8,
+%2Kt"7>\0*`[01-p]b%]DL<_X6Sb/cAff:uJeBq_#I7(!Z`P"7"q,WU49#pn%U"op&K#b]T6qU"5:%`mV5f9=m@>[p/?b]b;V4neC
+%Z,+*>*5*?0JF_a0'CL at PM!aN`0"\dbe6&hQnrXaMLQgpo92XA@%d"g-UFKL7 at g+T(f&XlD<IsZ%P17,OX4##+3KQ2O-B$+F9b\hm
+%2ea??4:m)gfKu[A:0O9 at k*bgZ'@6YVa6^DgC$b"Jk4s25`-k at 9AK[Ea8kcuo1Tt:d0"%Q-#EG=%6GQB;V&B6Gi$@D"k53o1c1rs+
+%gr"T3k_E2AV2qs+Z/ik6bq1Ig4,eph\`2[$[m:Uu;]=:;*tjX#Bc(ng"4)HBk<pE<N9N&K^,XY\]3IlG^"nSeHYT428jXc=d7%".
+%Ac0ilhD at E8PXW$W_FH^'4GbLH8JRr6V523R.Q3JtnF*b`\b'ZXb#[ZLhmoZARJ3H$D,6+heCb5_Vu$C!CUWpaP&nYA$rd&QH,huY
+%/Jlm)&h=PXFWbq,,n4B?\USWXQ at tBbT%N)&&%$e/9m!F,W=(#q[rXc`Y at HuPd<"MIo$.:50Qg.tbk!#t\Zin&b/.U/SG,A%JIq/`
+%&<"k13t%JT-+!\o"B)(<>bA!"RiHWq;D1\#]G1QA]beIeW?2;j+qpu:F2*9nS=AETX)UnWfb^k=YV8M8/>4U:nA\jbc3a1.&5NP8
+%RhkCC/6!#QhWM+OAk"s!U9<scM7BH3G#*IRJDajqGF_*o!:X7M4RI[s0t>UVZQNgb[%qqpE*Bj(71&]ljU#$5[`'fFfe:rUYR_Rr
+%?FCS--9p#Wr#U_KMQ#A^q$XSQI<+-D8uZ at U+8_N&fKWP-3V`p]_o>3^HRdAb-u4i[l98#K8ch,D3R(%hA[!4H\dn51W5B\t5sDS&
+%!3$bmBj,aa2Cr!X49TD4+7\8F,,X"_mfg0Zk05g:GlbK*WOB5X[LIYM%3..$4Ib5"lY\^3.ckG4'Y32`7#oH-h2t=q7([A(%#'o+
+%S<T1_CUgORI?5/6,)k_s6"jWt^L;l>G,ckD/XTGfOZ1'@2*g)\a'/W&A-i++DT*%OY at Al'"2n=`rD#So_MlDM!OgK=-X5R2Xl2CE
+%[SCM-ZHj`U`Z7o3::XAA'7B^(gHJ%q;o\.#k69uj,q2]*)k,Ph+C*>!c%e(,h^nCL)mcPlRCpL30ii#TQu5JQ+/:Kd0L9)lfAH/"
+%1fY2Y;ZPoi=S9QFVAu^$Mu(.*#`Wo*U)H[j at NG)>GC:CmCl[^jj`D5q%Y4c6+:]E#RiD^Ghe1HOXnc2#l)<NT`tU4[24N"4Zh:OH
+%S_b"hZ"UhC\OE'PiOLGS+dA4LZ0$J[[.2d>p/S#Les_c\laUKl-Z:NC9R[edB1X0>*(atW._E/ob4<aC53kBRk)3 at A.4POj\<c3h
+%C)J&InJ5lWX0fSp1eqF&APYuTAJ1mW at SJNI"9MMYrgN8kQ4N#HMfZh&0TprugMpMd&A:VfPUADKl5Z>pa)gNkVJ\FlG#P,9"tE)O
+%/CIF[:U9I_*'S(N1KnNP$4aPjdC&@\lmng5'aaFgf:!??US5C*5a2S?(7_DCRGX%:^En6rJIVB]W,`n*"[W/M4je^ej.u`9fA!kA
+%;43+'r;$L;i)t*7/:r,B"HP_f:C0q![3Ts,3u55o/P2:B$RFC)EVX[HVBXo_,/IYCs,(<.0l>Y[@C.'GM[eB_ at L5@q=7Q`Ch\tkf
+%7/3.rb_i2iQ-a0WG&*>4P#pX:HYuof)`s&?X+a\c,"+c]0=`hDk.)+S^ZdsM#E,;7ZWr9fSa0F"NphrY=n9X2h$0C"P_qa0GINpP
+%lg'LXH4LHh_oP>$?a at WKKUZO*]1rN-ZReM$'r at 1\af./eES!k2gItC$48s0XcC*B1V`8he)cWHBVc at Dh@*sMd<R/5b(\"X3Ts at hp
+%4^KX4\]Fh0$&V-F4I=jX[UFSbN9m&:[R at SnkEaOQ89q](b`W$C)Nc3sJeZ-gV?nr+(_u$&B[ALk-NS0n.]!>(gG!8:7H_R+3f3+H
+%)^G[NRaR<74c=NZ\R\d<([[W]Yf]ZNkt&B[%QZGTKn>W3A&9,M at X/C=8'kG-/R<m at Yk)+ua>MnuSWf-HFf/-H=`[<F6@*>NQGbX2
+%`eBnb79QdMj_%1^F[UGN%s`>M=opeuC=LE0:,n4MD<ghQ$0<sOXF,BPI,t_O6`8c1Z!n-Q9*X$;)qsKin>FdD4qlW"klBUT';R[`
+%L<b_=AT<q?P1g)-,ERIX1XjLMiQP.i3iS08R>S`-^eK:4]A[.HI,Ts#l9?f+PSMb4HEqrA.+.\AP#Zs0nF3RTa%=R[ruk%cisT8M
+%X>T,l4F'q6kqZ]L0M+km>Ku,+jE9bX[KXK$[5PIb4Lh;J\$dLBor0"h\/W(#T&7(t:-2ksEe5=`-eM:XB_hM&76`:S=,LWG<O=kA
+%XSe_]6:3kGIGP+!0n at 8+imcDpc<iZ"[tgP.c?),:/t[VVEl*eW+!"0?&'B1j-&7ZI\F5feM7 at p.6)LW6QeTS>s2m_h=g+HEF8ZCu
+%m)P_ at Gcj:a:S.6B/A=>jVc-.l<u"@!JO2IadC/u?p-L6-pVU%!Jr;7&J/TrOh9'W`o".6+gaK(@i>Dc`cU"5\mVY`7=B*DQ)Qmms
+%0oFW\BAoCL\PXi)2)<\H+=#(=Wt3qJW.bK"oP2j`*k"iUjm>h)Za'[:.(/4$.?I at PK^N)$nq/cMP4T%:F,d]UZK>9Z3bN`P>a/cc
+%2o%(Bo%4FuVi,^nmbb:4;'\uu3qWK0"3pIH/[>R.U`_SeI^b_a!Kl;N%_\i9!q;@R8Rj>E%q$]'V=/_;[.99!Q]P.=)gU83*i+eP
+%GI7ab/u]rFKBfUf"IUQm<.RV<H!<R=.m;BncNtrCq#5<"&oEs=D^9$DJT^CZUs_pX,9W$td&[pTUOcA0-dh#1.f[aY&>1K`0UIUp
+%H)ehKka\rS"MlL1k+YS.WFio7VAC0EGuZ.gnh8aUPjq,(SsgJ%oXtu>\=0NApW%`NU at fX!OrK%+4BDZ!3<<6uJb`RfO5q7>m$LSM
+%YK;HAinlmXAk%['r:aTI?$)YccOXlHnCsE#bOG&aQ8=%dNUM)?7qE.JE5$*8'Fn`';Mp;T2K#F/4TfjY1b\aG-nC]3"i3hT"&25N
+%mX:>a;OWbPf'1D&o!4+MYnlSqigtM0I+8:5$-]84S4Bgu>DIb_c`rRhQrB>_g2mRN/P1pf=@!']RE6FCe2aL8d/1K11hJt3h9M:f
+%A8Yt9B7mSY2[tV@?@77jr!hrSPH]qqNf=A]3!<g,IA\QVdT3ASE1&\AY[^F.nLWF_:UFtFmhDG8$XM>_.?K at JpHZI@I`*?XPQ5^d
+%>^$YU*S:):<9^re%ii&dfrunfk1pP+Z2Aus3<4)-J'Iq.o+14Hj1W:bVO2$sqlI?f$RmbMQIjG&$_)d]`l3=K9ZN"'rs2K7S1]&J
+%-H?;bXtU5j1\;=(d1rE:E9pFmJ#>GoP?n#:L\P)YM$AOpJWm;n<OXC4-7ol$R#B,^\@07U.(CREk=%K6)^e%kX<[5()po9$C;Miq
+%;<W<`/dJFHgbBUW%3C_!'&$5"k2ch('\mIScg6]<R>Y88#ep8ogj!W#Z]V5nZtk=nPZcSp`8u+K2DS>\rR"D^mQu.;QgLst-&)r#
+%==[)8'2YKHVZP%uNbh^I\5#+[XJ at h,UJpa at FPD0Ar67<;j02jQD2M5/dB at dtGYC#8&<rL!!Haj&!!JPm'_u=pk<L&]2g;go6Z:[e
+%CF.W!<3XuSV)G3kh_S=m#j?52CA@$S3!VI-=3M3Iq.q*XH2AO9jC at Cp,Ucj1>0(@[C-5$ljNCLPae:lDE,lVDW<700m2Vf".gMT'
+%i--rfaA&PWFCRt]dfi3#F*!NnGFOF2?f8kr'.?QlW\RZ8'3RDga9g9*C7&.AlAS$C9:=&Z.(/5uk`n8Z3=t=/>72WB^!bH;l$)RN
+%iU#7j%<N)_"5aPnD?Pi0"D6`VQ/=U6pH]kT6=rqbH#If)nlKZV!d at OM9(0\bU'I,Jbf8253V/QO<ctA:boahY\+Rsd,sfPEQF:f`
+%"o9V?[l72g50/AO*ZY1-76L^>=bXcm<aZ2d#:8_QUebdb`$2*:H"uscDqB.cWO=8]QNYoln=S/L+D/kg&UN]Sk>S3NacA'e&8f,d
+%IpT.WEDRh6l;)&c3od2;.E83e#XF\)2">LeV\bWh6kF+QU^!Ac[^s%)k6,tW'(oeZWV-89Y0ju9#:IaJVOtk?Hg9lfT'se`+^iC,
+%SKK,^>&)-\fWm.5)NrO$jqfjabZuE at FSM0f<H!0om-C]h_n36[>S>[.hm-h]8LrI,Mc5k8/(#)_/P)";!Tu*PI^\eG9\0/;Ama%t
+%:?''4-^I/_&l:h.^ugp4-.N8[YFp8S=^HC^`\>U[MmM*,2i\jYP,XE.(GCB at rIn%lGV)?/+f3Gr4]`t#Gs58p7-E'o#1/L7'0Pro
+%*sG9/qTqoMP82<-F`eP#SZ1/#6Ep1abfE8Ve"&\Q at uA9aC@8G1`_#&a30Hd0YoGs94c&PcBjDWA>MtIBXl^2#,(3,C&7rJ.BWnu@
+%_pcM(#ebZ_n9JU;'7t3Q/F39]'5j$4HJ&robSW6RV*X2?^oYZ^6[u()p=1Bsq4VS at DD?S'5+mrAn/:^doXeR0#+ at B+<&mABC)iml
+%UZVedIUAa at ieZI\MT=DO"'pds_h$u2(Gl!=!eW$jgFq;b4g<08\*@gbKS$M"i%$Ks5nhkgB1WiJ&a(j97P2#lN8VUQ-lB8Qd9(lm
+%Z.r=0I9N?*/q"Q+aOA;_gsA_QaZHorqEj<t!naufY%^$bepd at C/DY0+gcWn5i;^J/ad-aY3W at h6&qWc?W`+&s-[.>pD+c-FK"u"Y
+%M2u*Z$2#jWh4QLSmcbi3YXo([+!nik,5p;V,3B7!p#ZbHA8"3c'"l497+Hkschu[!IJ#bunFlQp/,3i5:X,O8e74WAm$+7R;>,G&
+%O7SECW6m/IZ2nH<ps"qH.Y71KLcIA6)aQ38A'&[nan4#Fh2^aAZDX;0C8%K10\-_WT+&eO$JVmFNJKC=o.Wp1lC,r+PJMjEkEU9d
+%m68!g8TBp2bL<aH(fAhIP at khqi;3#/\JH?4_`8jTiITUA$IR;u%cj*iXLA))]VPMuSF"KCY4CU09M3/drc%LMYGp&Nm65@\ef96^
+%S+];c)H&68.As4iV,4;4EK8P'.2PmTVhFp/=R!tj%S"aUbahjVB.aAc[lV[L:('(S.?4A,e*8bIDe84ITgl`*HT=8M?`:aZ&[pL`
+%MD2?15NjMlL%WUligu>4+D3`XGA-Y.__1B^Z[n>W8&"&4P%K,$)9pX8Zu"ZH.6sKT8nt\!H8Z!!ChRnLiB\;8-h^0VbqCq2bHEra
+%$X+aGotaX.SjR!>ZnX>`oAQoGjc8+ATDMmFZ^;'pfJP$.RFU`ZC5%3%74P%)]YW10WF5:uF(K&'[+sVMRfXainc]33nP2YLb5Xac
+%0\:dl2^V/2WKD`,EW4NHrT3X&^@jWr\X_]QkOqF(buk=00Ia'H)hVd*B;Wu46to<QUG+aP[;Y>qkPVtM7=QdPCM7L5M05Q$"s?ql
+%(tq>-o*-Cs3R2^i:+tf/YVhD+;D1nMd/TVV"hc^fA&7^E,cQHc*.o5+@&_lVG`k\.5VL`gk-b`rcI9:XQ(sYo9 at K@$Y^ri,LBMI/
+%[fNsbm`2[X:'Hd7aF\A at e\.7FUhFD%^!+h3GkT1T4G>+/k_Sm4'N:kO(V'bN">l*^MB\ka#@:5%P:)Sd-S"\d>0;se1dmIU:/cu#
+%Rc$&-4a)Jl#g_"Xjl$?Le&Z>5 at 6dla9.IIWf-k&[GkA6%Pc/_Sf%tRaBp;2M\SP[:=!5pb`_3VS<)l>R8d6SRC-cMDR/*S=7>MoY
+%*MeA^c$\&>:L\\ac_FQ?)#g31Q_gjAI7+5i`c>oAd\#F*1Y-gb;5cN>oqP`7VLkcB"1CMdp?nZ7C!Ukge![)Yl-nM[BDEe.S<;`f
+%r%SI`mjqIQ/`m2+#"MGj.7Dg=*V06a,:TM8GND'(j+oWL+QUsk:C:[**4)PWeo1BK6/;.&(']DSgFob^*f0%dc+`%T[IW#IQ06I9
+%rW/#mh?YY!M8*-/LbX[eA#t`kU1P+$A?`>r%(b6:7NL0ND@;P;Cpt_GjVCmtrjhd6NVk0pK**D3m2FU7QNVJ((Q at K*L6_8UP^b-!
+%BYA73X&\9K>kAP^JZJL\aDW0"iMZdRBHi(TDCJ=r9C\j`IVOjk7aGkr05$of9ZN"I9eKrdaZb)#m`:p15FT_Bf$_Qhp.XttREAl1
+%g/eEFXH8#\6S#e2G2#4loWW2)=A at n)>CmYhpulWCC1+LggErZXIOD2ZYg*7X-=os2BdKS:?R9VLdT^u-8Q'(0T>Cd2Y^2a^RppP#
+%9NB"%[]MVMb6E)?A#3GXr4c0c0pQ?[>,qD2dJL.JE9X"u5&;ZqYMZ"2PW,Q-h2M:!7M-jm`0`<rfKjoBE8RhZE/rDX\d:*;2:U7g
+%N6,>BrgKf6M'Q8PUf@,LMi157&H?eq:X_G^@,\KnYQnocRjC(q\X=^n-k_CFp2ZP!9g=6+6NkTO]$SMtnVN%"6$prrZi6J-c]GP_
+%q$P'(;+R%.)fQHYrXq[%W<8\=Rtc at cnQU'dE[hqk0f`e[Sk,2Ya\F+4pBu"!Q<`\2Qt(*e3Ts*$!Sr;Wn?CTo6$e'nm[&k$fRplG
+%a(@IWEY1#NUn at .CJ8(uq:"%rjea:OE&m at W*`o5'Ekp.Ih`[VR.2lUkTEqSiYQ!l*kZ&3r7Pa)N,Lm5\A3aYJc!"ILPl='9]>l8d!
+%\K$jk;Zg-`)XmR(;kE9M\ogVF`5`igEkcsjIa*XIaaK^Qm!IilPalf<aP=]<h8YTWpFOn6X9u=uE%Ki?4PA7cW=Cfl]ps:#dOB,^
+%6Kr!>TZrBM?CjM*9'n:0Q$j!bNAm5i1(F).f.#Q-/T450e2M=c:O at P9+,P;,LR1JQ$GJehs(7cu"&!^Z#j?ESnR`4lip87u08sST
+%fB9D'N0Z/kMs$5'fi)_%4Ju(IIJG. at .XgSNm3)0g8ai,MA#A@=m)0b(^*(DDS^PVP.JmG]fICGMXlR+tn`:Eh5&io%141d(IW5]p
+%DB$/Z/!ZKR.S/Q^P0F`_Z1dE\^Rjb*DR!S(f%.q$m'^S1U/'/k*qLg5P/,]!JU+4.?'4*O>K/ceR*jpbo?3K3dB!["DH[G'Se at 1V
+%N1o#bh%8f4M at +b<X:'R7YC/@-[PUf;-f2C'\6i?DL#T%^qtHnljW[@Pk[_At".e'Ui-TXe,L!q*K7e3B!0)#pE-num7'pucBD)"8
+%$;Ys*Sq,CiN5+5idSbOsKSA:=CcS+a\!WcJR7c."]u_W6ilV'FhO0E?gs@]<&8bR".n>M.]jm@)\qqp!C.Q0CJ1G%`#6L"31b5 at a
+%,P+g*Bm\1(4m-AZp"tUdA8n`ieph]Af#)VP+*s];A/)AJY2I=H\2*%b*(cKrf[pr+=?QuZM6FI@(V\9aH,Z#7ebn()<DMZ.&Q"*h
+%N"h8&K]WK/RX2YiRS`'P;*N?mR`ICtQ$q.OXu\GiZ"s_4^V#29RRkafZU;Df"Zc.dO&T_)IsSX#X!pg[jV#K,TR+2f(SZIoPc41!
+%!H!Hrgd_p-SF;RqJRg!jNK*@.!.AENSkgs0-\-.2X$":P=e:gfJA0mI"3at9dghlUPYN4-U1)Lr5PjCEn/XfO4#NkVj"aQT=5fuD
+%'.c*'=S$87UF!%c,Il.X[hT%[J11NeG5fjm^Pi(;F"0?0e_5FD_m:>Oa)mu;G;ggB,#cmk*@*pVFA`N\9*a_q7Eo3 at G[aeg`#Z^<
+%:J%Q-S?dVpPAbf7.<<uuKdQ%WRssb@#"l['nJdkGPDJH[TpC.DYT at 8qM9jLXe"LQ7SC:Os=$*B8A\oQHF6>dN`)"@Z$Oa$;Zq->5
+%%/n2[V<Yg/b9>AB^KapE"WTs&g-5UJ0.q?%ZJ?rjiBab\Sjc,_.B'I/G#I!8!msOFW1-q2N`e!sTIj8#lhG^c-Mo&MnMJPg9&9t-
+%i6jR?Qk(q^'Rm2&a)c#<]B52e-fp_"BN6nZHT+D(,Q`*!pi'DufQh.\>[X2\gS)1WSV^gli]@V6FYNBT2Ga3%\/dW#ah2[2r6!XC
+%)-M)RmF::Cd\0n_;EF"p<JKWJE<S1Ee9FZ;T^V_D_q#P0Hnd&rKS14/#*u+X<=^^u/N==fMCuL^85,q9##>@_?<aF8XVg`IXt]5c
+%oM-Q%,*2m20?:h0)i-m44eL%-m:@BCl'CEJ"TC>HRjhV6Zu\0i,mK2ZjR=GY'IkqFW]&$f;6i'+HoK&Vb)`sVg1I>&kP*Ie$#09f
+%cI=BS2=m/b$J&VYQr>eHFJ*dj9n&tU"CiICoDrp7lCr?Lc'EBC=<`mZl4i>E9HjP.he/t-,_E-XK)#Q(OeQdF4S1b&,KPdYfS>I1
+%APfRa%<+mh$i\2=>5p.R#;>U0P'k>:G/=IHi*psh4(I$o%uQuQ6O"p[^rP>94PUp>J=QKVe9.mI<&uA<*p&a/P7mL<F1Q!gfD9JC
+%V]i[CK9jiX6aO(-j!fAs+BooZ*4[_Vl48A at ZBGY(O55CdAKHrOq2m&k%-.I[WGKdV5;sl7=h_pN_RQYSo']o"=%>6D-`FN-[Nm/B
+%h\7;W]flj;m*j at sS"0lMVs2?k]'GnN_ZV<f,UI#N5?eZ"q8?cW3CPWAXh71k2`3=S&G`fZ3eDoQ^.VcLW^(GjMH$%=8F@$<cK)gc
+%dNU25Z\:a,7>bMdmm+Tj#B at Xa<X0j7;u%&hmO<M#BfVT.%EP6!;+9e/ol.@/[K[R=s7+_il#-<23TWC7L(^bgc80-+'TB<tO,qi8
+%GB5>Drr%cY<XUdlT+VK\-QSo960u(E/Sb\V4%Ca6mD%l*m`E\*7-c^S:=k"b=T>+D:G'i*.a]'3nsC=WZk=ITaVMWE2#MB\kt?BH
+%Z9b('iA$0Bi#lU`I?I!%N"^8t3Yi*0Cnb#tk%N4;.iGI4c6s47<Ut%sGc/0k+XeEr"]&Id)PfE`86dYuP/`qp>G+`/U3_)HD(:]p
+%bt%`'Yc=/Y8/0/"8E#\8_XqJ:EHTNgL5mS''?g%HZ07?95WcL7E?rgM:A>':op>EoQ5^i8g/h`BHWdUq'CT7VDP*6hOn5)Bh)/!b
+%C]8Cf\5I;uoqM!\O?aWEJGW&pA6=N(96kXZ&`D7[-Rb?o//TWo4e%uG$pfmI7/a8G!-bU-B[d2F2M)E_IY=9EZi!"R2A[_GD6j=t
+%4I4SR^>.);;>EJ89=_t8mTs&Z*6/A5IT%#:KQH.,2H(dj@="%qV6QZ=!Kcsg.dq/+>OU5iSd+/16O2lrs26c`=sNp1%+H,ud<]A+
+%`Rh9o(u-eRZ560PH[]Dodq6!OW&T'hdq1p at WZ.K)eaed#!-u[+8'P)uE&GZ4?L%+rCtE'Ph[S84<:7YI/J?sS@^I'hVF1bdhsh3Z
+%1%pXfriooa6pd'ef3OW4_]JMr**S.>k-e_hE\'TF."`PNj*$H?*DV2M-u&20UPiOY0W-s3G$_.OC<@QimuktF'%XI`c8bu$:f+ds
+%5V`D\O1+JH>Dr[">4n$`:_u6gj).SiljH%3N_Q$J8tGt'QehPbYo]-l+.M=0GY_Wj6eEI8T,X44RqVcc60 at ClPH@H3.:bh/h0I9B
+%28)UE87ahq#c;LfQ-0V3E]@GsW]4)N+LCO]'%etr*WR0rR.)08ZfW.["",(SpNB`jO?H/H at FLfTb,ZJ:ka at s(PqfJNbbm8.R][]3
+%#QL:A"<[(/>M$DG]AMeo`c<;D?t"9@".aN*9B<H>4`"T%o[MeY_sGKt1bJ)n at 61&Uf,ua+aR:GQU4_sgF\I(60qYtB2nA!g=8VF&
+%+9i4#f`R`/^bS[\e:S'76\AX97A#/]?P$:h]"_hX2:sr=9s$ef[SDOCXt\%!,g[FA0p52tgrTEC`?ZRMka57umjrGLP3FW/m8Q^Y
+%`"spIR?U)GY1B1fc6kgifjV5XH9AJ2)E&.RXr\WX-_$XpaI6Nj#p?dRB:cYjiKLXt-PrDJhJiS3VSY"?;ir%QMBe2OJFRIOK6ooT
+%9tiV+i^GRZM.eXnD^tf%10C4!FXMFM at T*_Xn at Y`$3&Ir,X3BhMo`RkK`_gW+griSC578g)4NYk$[3i at hDU'L6C)]&0`WG;ac!^o9
+%6'd<@J+I/2RZ)<!CWPP*'k'6W^a7m)gcd%98'-JZFC:.1=,rLHLHZITqt"i99#<]MQWoJDdf;TaS.SQ]kdgMd(1_Qco>J7eq)i8+
+%9r"jIEo'ap(;Zlnf/M+"?jslPnZeW:NofOGG%.SYk:*Ni8gh#bLP%8)[V/P_ at N8aXT&2I1bMPL44+ZLe-'JV\7L:.`NuUqLfHKE5
+%kqi>h-/6<6?r,&k#*g<s5hFVS"#Xg=bf)&C^K at _;,$rZPMdaDQ1l?q^&Hf;;OPb!T-')_ at 1*mr^%/=$BZjGl+NG"^I>.LBSBlWck
+%TqN"URG\L-.7YlpFMZJC6b:tE*SU9K!B:M(ql+[. at U,Yl:8')$@pimuh]E$tb=Wjfmp*Lg+FVVhc`+]$hbu]aW/qrDgKlFlS-D*g
+%-Dh1%kk/DPR2becp/-jtEl$=;]I)m89Qfkc(mg$hU=4leF<b,]>.\_.(RrDYUDdb&QH+XVJE<C&lZtO at -dIeUI&M?o&:'(*%/'Ra
+%S,(p:9lbN*+[D['RkpRqs5)dJFR:]]qCoR]T*Dt.nffD$A*7k0fu>SE+nEtnFR1o(Hcpuob>Y<-1O7o-U]rd>^uT#A[XNO_.9fkH
+%$UbC*jOq3-^pITL$)$&6iYT)MKX%O*PKS#pAU=b).6\fM&me8+rj&)2XU9(.'P,8_"fE\8,e5I<J<.+Y=3WN\/*Al&V9_X*)LVII
+%n at XEp"\b'dS(DT%Z+VS'V+Nl)0-;29/c!77jQr5+W_qU)pt5Y<Di.,W8A*05)92Jgdn),>INa+_cu"kLneBn!P!OXFRfV."&+Z*L
+%K(&FO1A&6an at ptAa,*"sW')#iq9ua>-P&AX'R"60+PSR2-`6*iFIWDN8VWgP?'O&@/KRP_qV[NYhUc!rAqsi$/Hm-KM4 at DdC-EAt
+%GFpnF at S[cGldWQViasJ6nciri,bu$L"$s6U2U)C,b4],eGgJUg%;9XdOpg'q]mbqs'. at 5=H'>2Nk"3XA54YpKEQt at 74g/H$@W>ht
+%T[I"&dn[&lhhM_61[<-E-V<!h)$j,70_plHn%S8$=h4/)U6W!Z&/r3IWb(iR'>6#E8L^f?F_sMI=Ys,lGV2D02?)BZQFnM(+h2>q
+%fi.%1hRKiAII'5Ul^6gg;]MMCL.];#+u"-nUX?eae'Y]s(!TKq[,gq5WCJ_PfucA#BT56idld%u0$6c-A!5PLhU0L74E^#JmOci[
+%T_:$_,-Q&ZFAMZL6-@\B[En'kI+.eWpM*i_`0-TfdCr1+J]Q;rdC6Eda-:?;'/P:*Ehuf;$:I%+qB+8rM>a]%Ih=4)HoT=(\Bp*"
+%G(t$sneP+q+7+HZ0@(tAHH#_9#.Ze(5g1C_%$Y_&j7+1+NbBIM'g?Yj/VtXe=sZkpCno>rn?!$l7&H`Y[XE.Wo;o0rD!^Q5SrR<K
+%S_=);$Z#+?o7MWeHf^NaI$a0)hl5`<hinf/qiH_\&Q/,s.3m;uHk"eq3O?Kh?\1s<lTOEFD/)pa\Qu1q;AZX5Xu+)/m>I`<P$%b"
+%7]K'a"?,>`W-NHVmKD4.]_Qn,Yp%XEio9Zu.BiNPNiB'INg\7.X$/Ob1h'7<i.PsoHdR,;hkhkpn7M1;aW)>-eQ1",%-nZsc%*r8
+%%l)$e(Y=1(LMnK']\.3NrmQIWpi_dZ+QYur\E&s8T"C&U]F^Ss/`(:1)hY"=$dP[>b*9kOop-l:BUdl:AKDPdm&sZkEf at JiR7OET
+%%c at SnK=trXRR at 9umn%"J.UbU648k^J'FZOs<2.atQ<VQ"STVc2I$?]2^p56e(g#do#&>UXVF(*AL0.i\llX1*"gs9\7_V4P5>E:H
+%H%%+eL'qUZN7CTLX8DHh&m#YC\,Ip at 5HeBdIK^n1[nk?.ed2I]0>*;B[rQDD;IuJ0('G`sde!Ma>Y-8DM>TZ;m:ccF?OE)$]8pIj
+%2IXDNp#J\dUZ(Zb;&1Y)<O()BOYle&3O`7[Gk:#>?cGDj3V"eX2o)>-Rp*A5Vm#VlSn^MQ+"8Zk-b,8ZQ/X#SF%S+tBIE.\WHfc#
+%h4biqWfK:Dj7U2B:?2_%c"$%TQ`i!X,iC_q2TZ2HmUto.CbeND`t5areQ$go:c)%2-BTlI'pC_:>YLqQ8%mXE%Ht(=D-.W;:<aH3
+%rFO;?@g9".]r"\PbB$FgGRF"p*q*o_%.Q:>/dHh$Vb3urIbV4"2`NXJ^@0dQ88Wg(?rWn2pbH#6H+(IcFYtP_rdJ)KI9a\(0AiF$
+%;HXme#M)-g3Bo?hkVs=n1jNDCSd-Q3 at hm8sajYr@/`(!T;DW>qEmI<7k.TM!$k?dUrCWPaG:jM@\a2X",8W6lWb)#3af>#/k1h;5
+%n.6=d(![dk8)'&A at 6PSdRnK_Yi2`DFrn.4VVgE.aQ+,bTl'`Z;_9Mgs*%20TT]O2&/pVL7rh5fX:`],nZ&m.5n<N\dj>c(7iqN67
+%j.X?'>%cTM"P&K',5)*K3P`d`m:2V,8?>%/*Ccrl4JRR%E2I!2H\?2`:um?U$K]%niu8<'q7.K?*o6YgW>jSUBD)@JmsFKOc0?M3
+%AO/(+e=;m!C!,L;mJ<YM_Li:CA at Yr?$[EOmQGi!V4*VBI:A]UIq"l%d!;f)rC6ZZE2ST[00F$sPc4UEcgbEtNCaP#eI"/^n+E>,+
+%OQgn?Zg9,=!h5gXZ>8<+ORY at E$7o`NgJ.F$S!8'`8E3:hEgr8a;DYWGf(HbDFk:1r"Np2TaY>p*_TV*NAf+3SXMK=`m(C^Jd4rNH
+%iO_-\rPi>^%ceKM":,/Y<1XSF8Q54LEGVuNpY$']N!kZ06`:,IG'RL at VO*53$GMM,A_kH2n>'AFSs+MX,Z8GNb">nJ"Eb.dJ8P83
+%)SX?hSN*m)h]f+0RgKN=1M>)'a\<gnfR1c&]FV#Q_%,XDq)GjEnQ6S7CMC0.Ln&3s1$g;G#D$%GRlWGLZggYeerCOlQ]oY7[GsQE
+%$-u6sVkp*1JlRnQJFn*[hcu7AHR(h*q.9"Yq>66G9EJXugk0KFJp&eR'XNLrPn[X*I<cF2XZMNMG\FA<*NJhdf?"C;<%ScQ>&(j4
+%=P8fAqk8An1.[nh2Si4%>V,%DhHXpRk<Q^FRP_,9`/JWiaLKQ9:X?Yf>2`t0bUWm!%)'gSgbS983^qXm5&PZ/(81mb9tNLuM@/hH
+%$W-9FaOe<Aaj/hIGHf<;eMS;KLOdKIFW7Kr/2PDV*g[=!4#99!p74Icb=3caN.Fj6pd"5+2Z1Z_XO)L12SOepBc5fu($u8o)O#eC
+%kXT4US.;Rt28k"ZbRHbU"-;,ViaT]3Xu\h1r:!=dai#9F(.d1TVL=bWYuR&rbGPCX+jX`K9Uir\*8(5f4a*7;2P4U+2378;oOXe_
+%_ttcFZ_W-+-t<nPhPKdWRUP8m88%5FQK?gO+YCh9r*Y^;P(?@>jMSbkXU(fI\X4tXSHs_<D-a>n.RB at 0>MS5mP+]fV\?Xm@<YA>I
+%W)&&*WBHn-:>[A#4>J_oF#tRJ<5`KM"8S+Z$jor)SWR8#QWX]d<"d at VT,3O\5Pe`q"7a[#T\l!R.IC1f_lZS_6ASKg[<3C`D5Fr"
+%1LXqmDuhsP]2OW<9j*+`EX/dr(ZI!^:"s(e)1s_IUTZuQpJ%].f.Gj($73mTO'VMh=<"[s'/Y_;Q36JP:jC*fC_C[2&L_6M]jBco
+%e[77X[4>N8'TrunJhKnECDrF(rTuRse+O5'IYfZUAuE0!<fl!.SB4d:npV=<.`/J(0kp&g5"IZK'P?BBeej\=%ra7J\m:9 at 9"V(R
+%#B2E\jQ5/0*:j>sjXmfg(e96AF76Vf#/=7hW17]`"0m&"@SD-r!#^EQT$'E(1;Jjnk=.;A#9W*#@?dVH3!oVoS?tm-Hsp#PL at 1#V
+%LE)PJN_aBjF8aRNjT=Y4+-F@%;WXo-027GOe;#=L-Ah`=$97\CF":V#WjuqkJZAu/Da#G#4Z/Xqp=oSrME`?VI&ajMelR;2Aujb-
+%)p&;5--`/_cc;N\X;o+`\e]b%cPH<'VWiJ<VXPbP(+m7JA"oAs"-cYuZIHB_I4cB6 at W6'WUt"J$O!"Fh:Q3dq*j!LH<P;":OI=oB
+%E:uqL4RhHQ88S]4dfEkLqN at r;/W$W[,&tH,qhSb,':3?JKBONa=r\p8og.<S2#?i$I^gcdL8;UY/pcKF_d=;I10<:Z/:<6SDrFBS
+%>'1^'V'^cm@](P7^D\986.Zg.it&C2TCTZl>g\I.#[E^=Yg*fYce9j+=9-ZGW3=H7bDBt3$jK!3X+>^!V:$R)8g!o\mnkV,f=A`0
+%_U9e:Db>=t$8G4=\%,[]]$L?'Y"<&f\@=Z!:+FCsWo>NgB=H5+FL0`OaNM^N>UD.,D$65V"g)ViE;0luFt)5ST;dL?5e9(BF,iYI
+%S.Z"lNc2I!qm>ZPD+X6Oa?`pTVmO`s&7"4&Oa8ak3H.$06?Tfk8jD!]*^OGLS9^9spbYuO[:,.o=#Fe^W2=DoAYkVZ>hffY&6mF*
+%2 at IFQ$H)*iVcm-EV'oRq1%V0=Q%Feb!V^>8:o$O>7iO`3rI)!+q>Ps8<&\UUl);WDJ<NWqr4MI$1$EtVWW\3mN/Ot-kX#m<H>1C6
+%PU?PU::bolU:G/`\uH\C\k'4l&/,$.ftpC&bZdB7:<GT3T)hjlI=PJIk/'P@=J'WQQ/H9Ki$KQ_[!-"o030<#qrXbon!<R)Y=J^D
+%LqHF7Ic<O<Td`Deqbp[o5hnABS/Wod'PXPK4'oe(Y;R+5[rF7%V_ujaQY[QOkKp$':0j!(FJ0!E#84#^NHnR#aTicH*AE1dl7Y.1
+%rFl)Q41O[`EUkF%VU)(e5\cseD6IsG$-6?L!QC at SqpaX3>(7%s9KkK?RC%JfHL;cBcH]j,lcX8\Gr_YhYfMIL?EOQ">)\#'j-eS?
+%R*V70q2fpG\l(.("0^Kti](&i8KEA+1sM61Q@)diA&\:WfDd(fQc&PP1XjHp;YJp<[.R&!+0:^maAs`52Xr`@9>*eFmQ3EQj]&HB
+%+OIZ$g3?Fop,o*4kq<4i0*a_&A5u:eUebj#c42-Z'Ii at M4!1+#/L=1J==to at 2`hW$%J-']jHS0>2f[<)D8adpX?hj%inY50g=5Rc
+%$b9\sfhYofU5s=)Sk#0;5pUiCng<*d4#,(2Ah[]SR,2]p^io($4GqbLSh7u/'u>=IaRu=Z7n^O)-`$suPHqTtcRJdMIU\"l6GcaH
+%,P$A66_?+KL+WbX[h$)rS*Mi]?U$4Ti(ZVFHCfXbGp<5FB'VX(M3;gbO9S"h0c'sEC4kQTV(?^qAn?Y`T%)6"ddOR(BG4,_/qpHI
+%o%k_t#PoeO0B?!PA[%:r<>9-1Ub6I^.SrcN_d6cs"o>[$([c&=hYVlNM$IgJO($bskON$<WN+<K>6k2\PS:fQWgi81qoXjY!j=g%
+%(J*cPVihsPJs3bY=ncVoA:94-a'7r%'YoA[!fNkXmiVbf2eid7;@K'%HeI#o!Db1=m2&<U at SMJ&WI?<75,fXnjtoV)oF%-k/O'hk
+%#]V+e0FrnaH_k/V?u9u>_UhJK%eMg/PE#dVOc"M8(VOh]II,)2_/AS>A9u at g0"H8B,U-!s2KG]!O?L9-2_<R>[m:S5AXX:,VEsr3
+%8A5`W"!6Usdn]k?JJs=hS8:Cs56G2(I9 at q'k=nOf9$Kk'H2h)/H9LpOYDp]\7iaD%-:d'*T=D-c$p"j?n'k[+R^(73ZipAEM4oQK
+%f2dNA/Os!2]pMT_'O-(aGb>ZZ0DDicGq>((GjR)]TAqA;^AIl"/4i`u">])nEQAG;jV2Cc,L:J:D%,i1J0MWq#QXEW27Brm;lZ%R
+%deZE?^CL73VU(0Sek4o'g9,VKR<^.!,pF!.%gpO)@qRj"PD>"9L"MrR3;F)S0<+oAA2p;FLR#:^_c%UkEk<2_-IF'C:'\`i(Hi"M
+%ab.,N)VrKd#PG_kFu at gikBY7/GADE%rGlPo+>dZm0V>WugTZ%KS+ngs;nVptoG6)r2[VP]f'\+`p:ZFDDbd2*#b=J0kE<Po)XTCa
+%1U/c>T7sTL4j>aHN at g6OqcpAjU8(!`ML,,1WUZdF`BZ,=-?r,&M>We;Z at Q)Wr=AGCDSrW<OpAr_E+:Y9AT/RkJqL%#EMYo,R*&8t
+%/d[2 at DOAY8!`\LN)aEs/,eat3q>mKDOenVFeADE/TqP,o,P>-_2'_LriN-LX#1r2m-%\l`)_b8eB"_5gWaB5B\d at IRJW)MIWFlf^
+%RHN\>-Dj<SAte96Qin'LD`b?M.W"cDCc]eNhIk]dO!HJLQ79i/`e%uq/=+&5)jd@/(7?i"%`'..-?RDk4RJ&4Xbju3%s](:\*(g&
+%G[F28l at iHc-9H2"@Ufk%)g/t&]q&ZaN$G0]%Xt!\cEMfR7/6\`P.,D.Umi+=Qr9[S7Po->"F$@52\DQO$ab>(?&&TtI at A[PH*Xag
+%hGa$2I+?Zqa$KV[-'6,e8\<MHf$mVU-P.NSPf+hiK:8FC(+eZSb9`et$Hm-nZt$DL->_WHP6P=_T\1f5^Oq8JWoIl+(4H^Og/N/$
+%brN:a-8r0[lB*2LKDR(tRu]upfm2??9grkVAjXbX8#SspIKMFI at P+'T^dU+F^Fc\JR)Bqdqf>p&+n1A5^Q"[c;3*M%A20/"dJ4%+
+%"j.#&CZeEmZ?*\4G14!,cjqM^H`,[sZ]YoJH>U"KK?\f+Ep),)A%#N=KU2QZ2#^_KNn7>OMM1&tE]o9P*:t6aIrC64_[nLnW?qX2
+%O-M57;q$-tdSh37PoNDgBhA-)%`F,"J;-s[lPGA*&L[uo31<:U8sXUKPG;7g+PUW=OOQTs/.KJ:_-Z6OL,e\l.0V$3mXr_%(NAfB
+%VZD+uW-+b4=NS4S6f-]7<sa=9%G5tJ`Fi1-p"Q;He*c,`"`b6d\Q+`X7QkRjG!`4NJ)te'?Sq'p0a>DTB(GY!KJ1gJQ-)ir]!B_L
+%J:+M%46I]$.o-K+S/jnbHjmi!hpJHUIjHE7a*J4%Q]"F?j2S<qU1[F'n&-+MXlL.'KWi`o,)iZm5X/Hm9pMU/R`BbY3P'L];u)2_
+%o[Bh?4^hmI\S#9R'#EC%mls+&WEaP5X[]Ba;I5R/ZDjM at HYtnr0AZZi`L6]^nM%HKa$]`-F0)KYj=TYgk2A&9/<+kuLAm.Hogc%P
+%J"G4W;j(8Q>>?6I)#[Z9Fkf)Q'D#',8)V][Bep(cjGCJ[S-^#6qCB,U9(`$&o\'h?D>+_s$c:5<H0Rh^/mfnBOZr1n<?<SR?Grqm
+%#Ccs^`-/Hf96`f,hd7!Dq`/5R&f8O&r>F1c\P<h'hC7^T\-nEDR)V<HGLEfm"k!3MG()-El2pt9Msm&gI-S9#CFY;HRih#eY.I^X
+%koRaM_++B?&+W+$!OmfI]AP`P%eK,[r!dug$9fU$Y,5e$?'ckZR4(-PIECNb/FTLu$N#W$d>!rkS0.S]A#D*T6S>i>pXpUqOb/6A
+%ejgtZk!e!21i02s][da2O98CP=<GN(9)+uu/2X3CF&:K3NChrjnd(,V3`,[YPjMB1Uqlf?eL$Lf\p&>\q#U)+=Q"Lg"&fcu>UpIh
+%F-L_]Q>(kB[cP,!=#!+CqS<TfM>0"$fT`_?I7k8&q;i%K-'MaeKLrF`0BT[T&&jYn[.X;B&7XuQ4>"4"QGWUhl)CJWn$8[#CL7>d
+%*-;3LBO2Bucdd'hNAcAmn at X0SH>c3'H9j4/3EaWb5C)5@"<-i,8AImlZ]f]s4O31Z;?W[o9!H:?b,ROKnc6YJ5j7;RMc?NMng&]u
+%A+K^bXCX4`;[C at 3S^=1,WLK3:@i4.c8GODh]"t/B;S].;8NN62U\@5751-)D0;iukX[PV]9q?@P0al)C\YX"f(,i?a1dE.20HQIc
+%L@]9Ci^R'[1$-.6cn%#=*\/*D1/H?^`G-^4hl4b\8fC-KS[IM4=A8.IWn6>!,:1e.nD23Oa\crC8o#W9D+*+l`MZ=W9a/$!;D5u3
+%P^1;j-XRK?=`!9*(XPt']mMcJ3</1=$YH0LS;2;`UVA&l6_B at 5=f([g8L0f1gqe2GY/G(_>;/>Ih&`D<`Mqjn*orm7V4,si!^Rj^
+%qT"A7k[!+4q:.J at 45t9rRh=;`;A1jcWF^C0lLC_Qc'un+ICks^kc1Au2pV.n>WfP;PSDD$nH^M(\&_RGYMQgQ+a+*JV1`7K7+7F:
+%?XCaQUQ_Sh=Ro[B'a!uj;:^hM^YE`2[<]cM1Mu"dGqLs2H%s8j](-kTp/R+#L^G9 at U>X[nqZ?Rs0=/pSOZZMq-b<Fn*Uer(\_SQ%
+%D;4o.O_R/ce:O'gRk%gt:68p6Ck:JQ&CJ%Q4n&#p4\AUBcc_E(Xi'<,Us*2IPVo?!N*`Buf_b)?juNGGU;Pt.4c"_ZhcS&4%[qNf
+%r`6$^rbLnjipY+BTtQVhZm7iBi1UVNI;+)EDTBC(((g'DP[:nXa^QbP2%rYhn`HK\1TCY6>'N\?6Q[^rKcBX*;MH18Vb<278C+qF
+%%NMOa]Y4CtM%RCWcXf^&$F?OL;k3;<Gtu$]Wf_r_o'$eUCJa,0SYQD(XnZX@,o#0uB[2#=%M%c\5B7d\dZ)4h^ejUYLKIna at e#aS
+%bsZ\jb=Xbd%H9F9gBE!F2Un"[GmY7H:jAuTg`Z&#_4<RUV%Cs7chG;cHq=_@"6F4A<5 at EUVP;8E\QLqH_%jC&?YYc"^GRcB\:b2!
+%>s</Y"7S(<931)b9K>"BhO;KQ5>TY9/uWEYlD,nJW'mPMCOmOBNZi31A,DCZZYaq6QVr=Zo-7Nge`O2uC$:7%_r6S1cC.r&Q+7M5
+%KD5OX&g^I`Cq#\[5qe+U2ZnkY#tQlH?$JlaTj^h0ipP=#8"U6RAPd_&4Al=ca.3OD[osJ'+U-^o$/W+IXbDJ+Gu at 03hOW<6UU9-K
+%-QBp`F&t"rj;@jo;`%7?C8C>=gfPGjh+9%e[5mIrQ./`^M'HM*hTPPNhlkcS,Ch%(l<r)'iqphZJ(U)5+=>l;b1?lXk4l#]%@Bd?
+%6-C%^H^3d+;TIiEiK[3Lih292(ROX\@uPg`#UM_p6aQ'-&SfPU&"%\V6oIN2kLC!=oB-E0Q-[fC'IuH&5g%<%MWp%VGDlOk,_ghl
+%.NUN<-i[0u<s:bqJflsdM'#7IB8X13jnIP3.\#MCkq8:._$n.t9ks&<d`1B'V/kTDA7rtA;I2*D][#d4DG43X\kah`.88p1!$rn<
+%FB[NM!"oCEb?]VcR3+_MAA:]BYl2,),fTmi9gWc?VFf@@,ch(d;>g%-Dt!*_"Qd+0D[)h7[kHi]U/3P0imVqfRP]!Hr!*Z0a_3"N
+%0mM_mW<+#^EW_bZ76ejS(Z.2Wfp<73B"jQ1!Qqs_#o6ktqIO`V;@#4Y(NROpS7c4?nVU(go;pCoeF[1U#%B\cI=7OM(3Yc)eB9c6
+%bKif;-S_eD)G#kla$N\iB>N[nN!m],kF3EHV>AEleTlHF6%q['aTs8$,6<2(Ga]sKgc="HmY&GumAXRV?"-M^kTu-qTrU;jGqR)n
+%qED8Ocb09ImGYn4^N[[N6mgWfl'tP+^MFhFSm[h'XeK/#;OT4h;(mVh*hdi[eg14&*.ZQT7EI"D>)S2`_6-'ERnEH[W5GNd[0#cq
+%D`S7,=(bk++/?ee*RFDY#[&O9/bi%)Yot.u-=':GK(@(&LP^j:+TVGF*cIWs$MF=W at r)IIA6&mtfC/Vd*=!n*'H?iSWGIaag"iN5
+%\2Yhrh%JH#:[fNf"[_$uSaT^`O6O0+g!@8lfl)5uqdhpXkp1kYkSncME7KPh`m8fjipnlAr;sdfD:f8.`RLu+m$!MEW"=3ek0AJF
+%PVW>bElLudP8sGKGZN8`cF8qaG-06OCq:UZV]7/Hd"5<iV$&R83sm?*:s0Ta-GPK'(\u(9J46aY1GgfJ\G.!r4np;a85 at X&A3 at 4T
+%;OH+hZ?:-F!Tmc3$p'Ndm!>@RDoq at W'.J]V1b"DZlG=P>:mb=ER(utE8f;g#V at aI%B74AdCaNKAWW1A(i*WVHJK)0`aj9a4.D?IS
+%5 at XQc.f:G$Ro1_"*>!>[VpPK.e-C36hZc`)XZ<>VrouiDm+CP<Uf:\'%tf2pZX1SrfJT@[.k1t#[3COjT?:tCB#P6>-MBU"SC0ma
+%g#d(1-N-',^9nm[n^1&\b`,6:oR1eg8E\-3&9XT2aVk#ec*arioHWQ!Seds;P09Ds0I<R(/OcHq6F%PMW82")kQbK`E_]2a'qHbc
+%QilW*-]@Im>)E@"\)t$c8]e``<gA)<T+\T>e^eK%AgLi)n[V?t5AWD>NT6\,D,69.&4?O92$HL^j^gWtIPj&.Y;jYW(p>[mZbr4n
+%Xsn&F1!U_N0*TqI9'iV^5#Y+(Jo3dG$92p=kH_(JZdJh^Jpb&D`kLN"0o:HcWZDuireJ%*;9YDs'd)[$rj^Q8Qb@%XESIs`IsMRZ
+%ljn0-<.)eE8I2-[.^c#tV*X*6n<Ge5E4_;*"#mC"lPJg?.XQd&paD(H)s)9`USP>[K:5S at EX3V05#mk2""#m9XmeCN,ZYA.pkN'*
+%j2W$.8 at VdJmOH[r-hpD*@erqO/ebi at UKfDT2DEi5#;/D:`K#A5qm=g$EFC^_OW!j,hYCf at 1^0fDE.@=l-2R,"`h_Hu4oTcjPpO'`
+%06>mt\>^EtrZ%l0dUa>hhfo(`@>GZf&VMgD"*OH2efPSb=L63CiS:QVIT,A(5\o7m at cd-M.H.]Kd:Dfj;i2,*8c=&"]B7!8SLfu^
+%gN6#N2\pK&G=f58;Z(LfoZ.^#2-j:(M'Zj2T&#H)8>Zq[>Hn1CBlF6Q-N58\9J>bHkr'PMF-G.'qusYLWs'1[)$!5.6=m\0-24HD
+%^%qrFio<c_LTSI%R_dRrlUqCXhl0$_O<t=;qlJ<M,W;,\\Qm0#335Q(Ij5(c>PA<s90el!%(#YGqGGp)#CZ/Oo at 4@`NgA<P54dh`
+%^a18f at r-'i`K$P%h5HS'&W3-(KRQ_b@;WC2!frpjrA5DGb_t3RL.2e at n/I5/q$E;o=l[]9d]FO2AM2M0_T'``Jq.d^\;MHtQYOnX
+%K*?h<#.4kuMd/ZqN%a?3m at -N#r7ai9/e<aT_,Piq"916U%"(X4djJ]j<SGBF;iBp3XNGYkZt<tM;<1pM(_:GE'_%&3Q@$&:VP<n<
+%&r:COmPoQ7K.t&_meq5)lrL3?72)m->Dg/RZC"g4j*,5/;j7rL9=a2W?WZ6'DO0Z>YOtTn at bcFp^01pj'kc\U at -u:71.a>LRt9Mg
+%?;nSrQFn#G&n\p.En8M>C:`L8X!7]cZDNZ!Db8Zuos1ff98(%kYl"DO7'f#/aP\uFT?[=gOM2\5F/V&mDVm3l8p\NZ8:]f]STeBF
+%ZdRobD4=]]gbXTOra\c%3WHJ_\e`)4+3D5P--`i:W2Y]_#gF\lB(]2&#NYFs:Y3HZP'p*KKpEt)L@"^SB4>pTL(>QbS!di&i$RR<
+%lcKs:Y^`O)]\^-H=\:jISuGFZq!5FE=ERp`Y]E>PmlC$>/V?bgmGu9P>u]@pHYB+e!D4("G-4e?E@$s^YB-eO:?/:0IaNBmSZ0kX
+%i\\^#qY0ka"D981)Wo#a\t2[si)F=1AN?[<erJ\<3KKR,V8uq53j5'eNTJ\sk[QV/)`O-9<D2g.C&4$+Ms8VV1a^8j0KitY,Ia-p
+%;b*0<,fZ'o-)#Zi;Ui@^`_Bp0a9SIVP6UBLK-/.A^52k`E9G[_5Xr%uY_s62$c4i#`Dfm_c!]'_7fobfT2$Ts]fDl>&(J'_o4ApS
+%GSKMoc9U1gZ@)><p*ZPD8Pt&mbP0[,B,F\q*@rR@]R9\da+IRjPlOcJH^-TClb&$EAX;9.PEVA[+Z\N,)_*r<W.KPB&Z7!RpQ8i(
+%G\S<M_dNn:>h(9pnS>\45Wd8)n2q^6%\g#a)gjBPV(#'$:2%6c2^M9t=IH#dAl+\t\s)/m</8Kj><tC6e3o(UF-\hF8##$i:C(`2
+%I94':XsQ0if5sMfW^26N<T;strPYm"q"@*Fd`'-!2?6">B+.tkd.4qAZI.TGPilu1SbU at ZI\U0cFHK()s"$Su$l7KBi-YcqZ3rXl
+%_'Un^e$P2d3?PjIeA:N4p\hl4aor;FHFjVco4:$Xm4l1Hn&?8'2rOdKISa7!Y$90'13"h\SqpO0Ef)tqs5]-/^1Ne@:!2O7p#]O$
+%FG:fGSJb$lGt]?t+BPR/N[grUnBHO:]XS2$h->-pI8gg#k6[G5a4JdlmBp1<IgXmiWNRA&UFl-M at UKpiK.BV;Q`2R/GFlDCAY>,I
+%&4H$]1 at P7_/qOu8g[E"ikJD2_!MtRW+S4a!-"jqDpZH1=K\BoDSDGSIS$P0[p+#+hB[o at sU??sL5/27jK'nNo]J,*K6<W&B_TL2"
+%4K$=.mI'<b8$c8a<J<e=q_3-_PMUrec(U6V;$qBp=/2#0RX+PAk5)F-OU>^*dh]=)Ya+ArS$KDi0N:H'7'Ni?=KK#9!D[LbD=k_G
+%*<dRp/>jn89g/g(8/(_L at Ir?)@r+`%eG"U$D5"4U]sn(G!=U==](S0H4#<ouSM9YDkX'&WbD#c#3_sV4*@,UkVkQ1Ab;p^pTMQiJ
+%WB=tFq@;)Epl,)n1:6SV5pa,+R+0h0X,FRdooT#krFj^:;_0nn;':-_Lb&kOFQW3BGY.8BP&+Q.,uH=pj/)C:5His.IqCBO0]nhM
+%8q?j<4aAkQO2PX[cHJ>_Y4?2JK,!]ujt!$>Ln)dS.:emt?TJ/K8(=,t*S[PV;SoX*_-0l+c<\1 at J9JZi'>AD=%7)m$*nJoOWJ4pC
+%-Q)Br3R#7UPAD2AVpV"p_ at 6ej*2s&"]:UDu(P7o$ic?ArRaH5H:kqWD5TKZ#3A<TW1^8bffs;1^L8.[*\)Zf308BhTe]>7a+#/jp
+%P&I0iGMW at P$"V,V_)$_+hGch447?g6:o-dP<2q#&>l.hC5pWKY))4[gkO).q9bP^-9L_aJ>g;AnjH at RcHEZYZpO:+R0^COXbtgFV
+%;^R7JUQ93VT]9\"C<O::c5uaLUGo`>&p#E0SSG9a8*[D0d?Vk"/lh/jGpF%Zo!"&@goJG\?`0=%R1!"ZTHb#O'*9ZKT#=?9B+Vhm
+%m4p"(dB9)?T^,715%en/B)P98fT^ccNWcH8KgSj8@?B/NFk:D%'u?R at _'9Dh)[6]=G9UU?.M>PH9F=/ZA(K\K%.X]]NuoY<'Tr]\
+%EggO?Gl]nJT7[f?ISF-D!eplaI3b>>fjqh*ZI,77c&2_7\-7j)e*gZM2tB7spk$D*V7/8-V-95okdt,s[1LNfID7t3M2!&DS=U>f
+%fqt)\R=tF1;&/q-SX9fb;.PIs::UY at X;IIgn!)=j8D^KC0+=>=cJk]`XiW[Us,c(9#oV-D:iLG;oYNcp+XX at KdRc&LP.mBjL$!aM
+%fTTR'>ea_JmYtK]Y+X0Z/u67$aJa1+0Y%&5;t/p"YY3<k3chd+Kd*noc-+!qg"Hm?=02uX*,4gJCs(_2,;P7\Mk6F]S,8L%aYa"=
+%)eHn#,9VETDB5-=?6Q-(d7a_k1"T*?K7Yrg51t%4hkmCD_oDQ4?@EgSR'#l)H!%<,PC@@)m/^Hi`ucr4'VEGsf.^!,@]u#`Q?n9,
+%;4C!OBlg:63SJoWV-`2A;(CnOroB2ANVD,r8LFDuCS9RPs"R0q.hF4t"*cLXcZNOrA/]lsA^Y2FhV[R9`SW$251j_u=j2Ll3)+3L
+%B_=2)FRFZXpr]qe3Qj4b15Ec/aF]I=.p&q&2SN=WMoRes\%YE8eunC39;gkB at Y!PoYU%/e2kN*CHi2]tlW%oK_ZOIb1T&C<KD\`[
+%[daaJX0=%Mo<XYI at Or>NRhr=,)3#nodVqb%NugS?-I:\afr"u6#<4)h6+89SXs85"'rp>`,r]o)5c0d+f[M02o$7!@ErPYgnlE+R
+%!]</pIUlst,kC,YEr\Zrj?o"76gujYT/Lr<&!A9(k_Y-lf?qE4%F.O9Of3-mD.k8k-&2!]aV2!M7HM&W\tpd]gqI.^$W7R9S"(`7
+%8<gPX*UM7m7lK/cSpaar*MUr(K<FK(fO;&5Q at l1n&m.'D1D,k&=^d*&S/L<W=fS=p[nR*X-:^j)2G at QQ,nF($qaF=TWkY.26=]t(
+%3aJAPkJDsj)T9CfbB_)))k^o;j>K1LJG+H)IL=].n)1pB+sqlDZhUuF^&!FVA.,*XHd]sB'gDIH\b(`c*qu=E30pEo%s"?;57k!,
+%,<o<)Sn(9=)=Wr9Q-8Xp0jR<m[(Va"4BI5D_I\d9^f>\JiNr*cF6H?'OOGkN4kIMk0b89JWr(JM4 at CqR0jO3e>Ub at R+U5B\M@(&8
+%IhM(i]>VE:E at R='U'9`EHkJaV$#$:s$&n#Ts+h2[EL[qRgIAYE(((`^Gf<lufN"Lg_\E:Fion(N([$cT/?@jc3Z2BsllhGg&bSM!
+%HDXBf:;W+qbH3-hfA*Qr_=j3<P^LmGp=W9c(CXJQ\#+?I'Eu\!)<`CaR@'N^\1c=3.^7Tj@'O<#Y.;iH&:`T`j at J?t&W<OY6DI+Q
+%Z)0[NU2%g%8/h+cHID!fUL`=W;sZm#@kK]#Pb@?5%RpAFJ7l#ji!`nRLILfE'V&F*)FuTJJ"=WJr7FdP]N6aSAK/=ZbI[Pa[QgC*
+%I/,;VJQ<$SjHDmRQ#k\W4RoA,DZs!S)ihp-\0S;tCcCi661N1n8]@.]TCQDHCScJKk2N/;B`(XS1P(ApF^loXD.QQbmF!>`KCs]`
+%Ze199lpm1=aaNIT$TD0K+;7-G;HI[Hao&P]HK5]&D`&7^[826;_FZg2P,=OGo1u`2oagY-(`t,6VIhE5Gun[OfQP-`M98XpL"K9`
+%+)cE2BM_!!F+@/e>&H=TULUt4H)V2'.D*)c9nhW4UgS\\Up<Vs&`hgOZZC!NM/;Re:#VKt7/tf'E2o&=\M$PR=Vj,s^Z;ab'uLpI
+%:hH^[9%84Q*.IP?hp.oLV;S5]Oar3cT8GZ0B"c`qM69j5,`N\gs5[#[8Z#IVP2-:FYY\nV;,cYT'9MftV4%+<=_*,1%VDI(_tYq]
+%%P`6AZ'm$QaIa#`=a&nkO>rWZDbr-7p(eq27<usi:<6*0nHm99"u'V[UmIEj7 at tbJ!S`t[F)AViEijD-_1s;^J]_tpm+q1c!s^+K
+%jS)07kCo"M+!>"l^a9!d?B64$U3NZ!/)c`J#3(ZUg_.jE at YbBpJQt*65-3*le]Z[:c/^Ws1mga1"M1_0mNQ#1VeVrF&H"KC6E&!Z
+%=KZ2eo:&&a9J5LWj[o45WG&mkNFM-tAKE8Q]f^]Qbj,uBdpo(6[<eETMb_^)("kWd/g2s[1LS<[g+p?$P/l^TJ<sh$8^R!APX-mN
+%k_,#=nkFYA;k:D3l#oh^BL]Z4emCUM5UR3\U'P,Lm9%OlFWr^Kp,l2jlpK?B=T!eH;^L.=9tnd%7A3g`VFf^:k3X3lck7aI33K'p
+%HWoAkpfKg?!@54"_3B,SmUgbi.cuiXHB$XUFOQStYFg'F*P6QU#F;VD6m47p^XrfJ2Fh7DnjlSQ;H7:)I!aQ,N0NUEG/(QnV3kAI
+%!5Pg<rJ*5O+u at 3$oo0VTDWC.VR#6DPOk;iV15p at JJ/p\[q+gal:4\&g@%mh*ikpX2[ID!3eO$FIZ+b(*?jb?*!_g/l%g=Qs at a(/h
+%b/Cs[e2I1ZaT9uX\q^%:IQ%GQOZ7K&>3*R)OQF7^FC3`YHuPq9dl(*adBrnkmqZ<%%H:5Jme!m):P<AK'2S?!P at n6JZ>!a<H..('
+%8HIX:qF045miuBO>IIb^R3"+S)`U;#rd+ri#hlAmH"uDb4:%B'2YgsOO?IuQ,ng/qB,!nmUhH^[;AsaYQ&h8Dn3i at B53EB\SNd1;
+%c_'Y,h$T\J>ecjae5!%mO*)jKFP(C6qBYZXRbM$BG\n74?$.BAS,AoUS94BXE84Qo,SG at L4/W at 1*C<'=K[tgAKU6:;i:oL*dBej\
+%!Tk22[@L$sfgQ0E,Ss==ldFM&CE'_m^jP[r>\P?u!FVlS#l5da=K,rOCJ5OHG'/>AnY[ZIS8-uk:l,,],ZG6)"P);,PC[N[Vt?97
+%(7]hhHEJ;`>B"h*g[J`<W?BUHbroQAX7^ZRJ=p-14B]kWQcjR[+L15(,,;$T at O-=be!Z:Vo4 at onn(AAN3jho,E1JP;4K*^u.*r^@
+%071#c>.G#,F_8LT&_7r4QaAVeHT#-2b^j9.>gglkn1)J]C05//d1\_HH:s[tZ-0j"X/&OBIkr+G;j=*hU21[[4>VUmLp?Gea:mnJ
+%/L0WVI)r2FSqG,dn^Rtsh.CbZS+'AG5W&O*m%Y](I/3u_*;c_@]N?ULY!'<>#PA;=h4-h6G4Trth#\)QZb8J[X;9("9d3NE/"ah3
+%29"U.UqNV#9.`EY7\,,3RVL`\I>DQA>f77bIkV2BjWNr3\M4/s<M%BkO)@$M]NM4)Qp0FO]Kk&=WEq1HT!XYV_S.tp9%q's)3K';
+%C!AC`@rEhXWt"5T\a3RlMN[&",Z[+r4_]l'IKFtF&g=ekdM2u7l!,foYP20;oHlca82q#VNOn8a5(UKS/Y.$%5;dUi)kni0F>-aW
+%5M[(?+fT<:43_pH9d?3m^bRc1U>X"Wj]@U4IN1#Je(K6d6ukVHa-VQajYpA1;JA"V]O8n*"t"d/?RYPYD;^JLe)5OJZCp4e,8VGc
+%kXS2$!7h2[%rN>`+,- at sMkDkBcK1iSQnUgE1H.HG,A@]NH4]L/VnnY,-s0YD';bh%ac?FS++:*R\g=>89<Dq,jhm-$6"`(fo:,,H
+%g6.BrV>./$RbqW?FCLU8]uOQDg>]h0X.HtYrcq26^&8=naDEmh]q%R<e,ak%Sc2c%*_m38]R(c4SR);[Y"9XDgpA,D at 8l>@hlarr
+%W$q53mC<m]BUf0][B^/d2i7Vn0^TVoNb\^^]kU'PQK?FU2\oili@:1DH8WG*+3bQ4FURK:^Yne#J"1<kot4+(0+5Q%A][GrhY0D-
+%g:@iL&;K>nUnY6LlY%^T),)CQi'ZB,4:TV at r3Wo)A$JtfR*nS-@>>/6?3hHS7g]39#JMWq at PL0dD6Ji+l^Sp1=tWTH3TBi'ao!t?
+%o4B[0Y+2bTl/i@$du"""I%,J-PM@?KE`-#GN?OSVn6ufVd<>HiQ):[$m^(u<[,:?1hLm`N&c'e>*\&tU][6?#Z_[E0F(Eo1E=lD=
+%G)PgZMC"n^?)bI)hXAX`Cm#*&W[:UF#J&+qROHQ-)j#A,WB3!>8NF5$:ib)!_NPR5<UXZ!B^5?VDm*jRetH$to0VC/<1L\\n[g+Y
+%,Klmo]MaP2m3EEI499euWE"#0)K2cr-`ldOMiU_q5#U at EQfUt.?3s/S9Pd>04LtX&nnQsQWRW^o9 at hkibP.[_$HSh(^>-8sRJ@&^
+%HL6Qr.J)p!T18c[ID/+4WLa]0PrQ@])bJ$KC4UO?mpSqY]Z21ui?G'-iRMu5>>ML4`aF\m:A(R75V3s>Ys[ZM3o4,=\L<&KSd._.
+%m1(DPFhd;l at es:npaHX97e1c&X0l`S':'Q7S'R7-L-9u'(\&Bc#>B4F/BA82&kW2a.%D'%dApm<grop(ap[H#-;#3$.3-(R$A;K-
+%=HHPJla\(?0[h+-3bR<MI`S42+5D:nL<5'B%8F9dOk2_uCWc3BTu;?a,?7,SI\LLLQ(EoLJ+BqgL.->#7h(i8Be1puLJ=?5?VWMe
+%4Ne&I,Ditj,>Xu*gGMO#"a0/l]Eg)TcfHU$<Oi1d)`a[#[LAA at hCX3p4IE`:Q at Z!@&9ce0MfL]fg_>3Sn at 5a-q(*dnfDIN<(Z9\=
+%^nRZnKd9TS at P<sD.CBHIaZS6nkQ:8g*F;RKR;ic:knoVA5YMEH^uS7Fm]TY]RHF/kO]09$7/-'<n\r^`9jP.3do,/Zk$A<neEafG
+%b?S*nouhX;=F:><^/c1%#*FDe3R#;\-YZHGaLq3Z+>)h"(2)7@;ENOkFIFK)GOeVs2`'fSBZU6id+DD29>W8VB!q9GEk\9#T#@8=
+%P-X`fZE/X,VFg?#,%4kNNn6oQkm;1##P+$T>Qb3L?/o?`UU=8<8+Xkm^qo`Vo!nFX$+R5G*)"D#bR)J$'[r14X9V-c?*LeMaNg0Y
+%k"kPOP%RoB(HS$Y9&=L5YT[eNaET%@0oA]^/\EEfD$c0Z1BD!llV^8r"DfG9k;1L=@I_:.2u+f!!C&D#C-@,3AfKh+=4<*nLd^d&
+%52Q.;,Udho/43?rOlg-VQ-e/*h$_sI91m#-Q=B)O5Ag<h3?STC.4:>K`?\AG23k"jHg]B at Ml`;5[SR%4=!YFS_>WMh93953r.A(:
+%H4/T]7WgM at a'+GgO"n?Ks'1, at s0Bb.3<OpqK;\Eeg at +<oUm<Nf!';[cm?7]D4WJ4\0M1+*XrHZhJX#6X#@06uQ_%A`RSJ;!2-F^C
+%@<1R8$hc/c(+qRaA42jHNr5IFa//sWW:RnIGKsOQ5Yf.WV6;gXG>]E4:JTnZ=CT&, at 5"&[NA.XMECHb](#+;j$$0s3B&Q1j4h5 at e
+%ZqZ%^C[p?i-5nGH&Q?0!LC>^'I+`5>c at M]/nBWCE2HcM at -1gmX=K.Jhh\p)!TO*+<@p`D8n@]HZY^[0=cj<`EhmQq-RREk<RhM#9
+%qO1'/:C>r;#;L^0KBP>@O`+T?A)tSqSD at k^k!`d[91tg@%5[@?<l&f4OB]`2&Lo.%p\!d!IKd6`.UKN'cqK-id3%+B]KM,=j=0Dk
+%:p\o.16_JaHK at f^f``?dY:'B=m1KTG7@?3E*4*#mcM at ER]l<l-XLDm`5@=E\`gn!rHOCOs?^T"o^J>D;U.`08j5"bLe-Wm?.7QQ4
+%I8[aU9.H;q)n+O.Rc32q0$--ZXkF8K+d0%>N4GS&/BKL*`:j'&s.Fr3B6"0IC;l:24LSBJ3/ArrOC(Ak96<s5JI9G6FQMVh`l\fc
+%QqlmmV'%D=C!C"0DK<"*o)iarm at D_;I";_[fU?dm0VYS$_gqbLrB@;iWYt#g^X'`//[qQ?07f(9=NpOdIH=Y*ka5pu>YUl_r>Mhj
+%8Q_#G[3nTnnD?b_F,%2f+&/OUWL\VanX=p9NW:/WlT at e;=H(7dHk_[*Re<)nYMA5iWuFoh\.jq_OXg:k]2 at 1ZD@tNk5N;!JdeGB^
+%bJl5=0^$R%i7s]*jb%dBJQTk9!f`nd,AfV:/pUO;rnfLZ,S0ps;=@NRKGBWG\c)IYF^a>si'*Lo3iESO3 at p$Yk[DMYdSWV_:LQ-D
+%>BtE>ON]D,-)7'BQED+\baPHp@=-*C.Y4(W(NJ<iqLe2hp755^%aI,E),c'/Rln6AAS6n.:G[cVYIp%hb_2)XYsOt&GH^)&roM1&
+%(L^gETQZOC`e,cBd=E?4`G<9K/QDt/V at k_Dq""4D7j/7]2>OrXJ!?n5A$n_6a5[*l0THXSkJG\d]/.WNou,Da_ULf,^Q6bs:=#e%
+%Pfm-&p/e\J`2E&e;5NZ&b-HFRG"Q6ZYk5J4&G3lbc$JWk$IsIY[c]D"A%ftZ;WYOC1P.&<6EW)cV?=UR-VlIVSCD+cb+lYeS0U5g
+%m$f52FuQ7qE]$`fE0)1&\H`]lI/"Bq.<nGE]f[aCk+[a9DH]6\B$2KmOWsX;qt-VGH#hmBXT#F,S!A0RYsHui'6lEk*Jp2Q%Te72
+%rgSfTV<-Wc337dc[1a^<WeX;`aW73i;(fe9>][?%rQioE7tu^J*5=VkQ!ej]B.<3,P4D8G^jJ9Rb5kA0Agg%WN\SeImE_-iQ=S>B
+%QXl\KReJZ"rAhmJITe3<eh9p&^7HMmW%`36nG#X?L>#[&L/Hfq7KZ:]9&Pi.<jP;X,Fa3P.SlDo98[V<6Pk/map0'f)k^BB)XLqp
+%Dea.OpuUPnZSJj\E at l7!SaZN/:@ctUZFlZ-m)ULY?aief52Y[proPJ!P!r\^eFW#eKD]SkY`=c7"!rNQ/.J5Q,i4]Y9r\"_Bj3Ph
+%S5Udi!JZ-=;9/<q].E)+&C9_!?"Aso7g2;%O%VKf#p'5pjqo1ZhrjY-:@;+<4=?U!^$ND30jPh6;1bYRg5m#Gq['Q^$J:*t8^LV>
+%p<om4\U%+WQY+_J4 at mZ3/srP<,B'il=%pL&9G??dH_t<jPQR%2C%Mq9OU/>)INPtel_)m]FT9NW4L#\dqiNm:#qF\r'2G),SJOo+
+%N.+a'e1$@t6nG`THdJ*QqSK</b]9m4Hu#'u1]&H,qq9P@::B at D4Z"V*?*8e(qRkRPP?&$OH\9%rIrboX9>83-McM.SW.AF42L]gT
+%N[:Hi5;TK:g%=6+gZ/a:WB0WLh_<RceU`rjO+OSInB!+Q]IBK.L^-n/4OT=iP+_C+%`k#)p0c^A.(o*R at Y)H>=VP3*mn>`'(t/YT
+%T#;p=\GsuQ1_<B3%mh1OqQmejQ:6CtCB*M+;bR(YLi?o^:!MQe*6uI]CqWOR5'H*b.`-hYmZX/:?Qj'7UNF6ASd8%>fMl8:Dt8Q-
+%Hi at j9Jg1#4H,ss2'OC^\'TN5B_`.EfQ3tfrP+"[!ZD9)8Knu8l#`GolnQP>bL&E8CAGE]86a'.,(Di/1>`PCmH2_T_Fl5!d9.AH\
+%o1SY%S>\\%f(IT:-DT@$GoNguX[qS-C_j`ET0C6paTW+CEd7^o;qn.EH>#WL%n.R1qEGUlb9OpZ-WN>Z8l(@+XC+(q)Zq#\6X*0J
+%`/epnOUV5)!nI,lVOjLl:R99CA%m?@0n#p_Uuq`=KAAhgN5%"\es1!pk)I(ZA-iQf%c)<t1bIk[_n2)7.OO#YOW=8b(#B.7\XBk:
+%nOm*WZl3S-opd(R(^h<&;!BnjEHKK[Ups83h5c3G*o]as=FWUYp8p>T5+2N8;cD]JZVuE#e!=ODn(EXBEu9L?F4+FT8KuGuTs_S'
+%4Ei#RNKWAUKI!efL7qND,RS[epY`3YR7S_lRjh$VXONcIh7(%`Htm^"H#[tEHR'P5%7gM$fc2:A/so1&R2nZ?deP`1YQ]1L3s+uN
+%Uqp[cB>Z6GG^M3#8Z=h[qbjU3#r6GZjs at A!QQ9G-.N,&Lj19\G[V?F"nt,1lkA3j&K-a?@:[4mhC"7Y@*0"jf<5o70q(PhWmOAkr
+%g);ULAN8&/&RXN:WNQ.%U*@-K\-\.4%73 at oE3%Y3YY71]"2:bU`T6hX1mO(dgK*Yhp67c-;6\YCa$ZP-2q+EEs'95VJ^L at fJb:t"
+%mJ]j`_9V26O'A>t.WE:cDj'&0I16l7bBckT"Y>3`&#AbqCH)BdS;V2<X`D_I7pVS_V)]Y=b+mllgm"e%b&ZQA1o"_J_FEh?_H/a9
+%CZKN at doo^"[oI806Ua9o1X:m at Ato946Es4mQs//84;oe#R]nQ=gX:D!4Em99Zk<u_.>rG)6t)J.;fp/R+$-PWjYfS+'BtfNofnM7
+%D`@RiNes9IPAm[+0.g:h5WN0Z8Xr$^rQ(OjeB`S?&r$\m7&<pf8?LEhR==;o0YslH%0]t_CJa>>@X/Tc/Bj'04p?gMBIA at oPH'%7
+%7jnY'4ddhXPN-%cShgq;.Pr&N*fepCh#T"L,1(U2I9j5&e0<H85ZN&(A!jh'b#"isd"f"AHT3o_GBuK!QtflsT[`1DR?Nit24M.K
+%F"U<P:Fc&c0 at 9?^-KWQmgcc!XL1\jJaRkVa>upTJr&Re8Z9\MH_'8utWPET&;O-F]=nK2gKWt!`Xh!&Ch!"RsXo%4WU_77CqZPO=
+%f!#2t=s- at d^r at fc\B]V<;'$niaWJT]M0jF)mpWBVaa"Y:8#JM[5g_)"n=9UdY=X7U\J^A6Bs/:[A&[Y&_0ut)](/[<:>]pZ^,T"h
+%6=54c8&%L!G+6GHNBY@?*d]W<jt%JlP'Z)^Z?<;#`iHd(RcMYE"nBlJbYsZ- at rB)eEi3C,Q7RCG+J6(N>d),0WTA4Fn[gk0J":\_
+%>jmlK;ZHgof13hF:ZWn+qI3n:a/)ZD,"QQ at Qo:UI6g-O&nJ<X(0/Vp7+G5^1]CPp";C"b7&LXYYkg.?gJ)4kbmm9<4+C^k*dreL_
+%,V1"XQ]Il^\Iok&,/(Zo7hER@]A#b`J2Dl*]2j>86a9+ at WfejAf?*+,G+8Kg2Pi*e1C#gZ6L7IdpmJJD0+a-TgIlNsl?c\rbB_sl
+%(2X-VmU:,]CToNg0&N&uotZG1keM_uM`_)0nN=h0n)m#2]TXM`,oJTqEs\;GL0a9RG9kl#QX>'2jB,1K.I>bK5dS0"I(2-O8#A+`
+%Sq<E%9RI=jd]'.mniH3/Kj&1ERX\_!3qmK;H.=gL;T7DBc,ru35-i*t2.3=k)(77AV$3+EK>nsfjq87W$K-VYcBA$r[J=BV00`#'
+%CkpWp1j/8)S\ZeseUqM<6K9qZdE]ON'8Fp@:2nBTH*dfg-i?&T;k9WfI=J2f>ou31[hHMcO&5-0=`*pjq'gI6j9>*6qukF*XS6+\
+%Bc0H]B0go*=Jr!gs6OnKA<e6;a0`q%!t!;VQJ0WlUc`?cG+8F,-RiG1ph)oOJHRu=8KD0t,rN$PJ$9'$jKGBk>c-PBc;`(MA'ZAg
+%0GU_Y^uZslD_-ohjrc.ONtBuZOj++&mj0SC]3%^C3IN*p`chRS1H!sd3IQ14c1#C]B'\nb;UC8(quJhPI]/MG.LMI<0t"[W^4.GR
+%(uWT_OjBOcG8(s2L&[c?$Q7?gbcLAt)]b0NlIuUBH&BZh at nR/F>)@MilcGAM$/n/7cJQlN=.A9'<!1(X6#MEFGG>q32b?C5Yl10;
+%R[D\%'IUs"Q2mmgCH,^5Vi8]MSn>!fg5V%qSnApFT$N[oW(fNh at 0cR(?*KT!og$[jhCT<j26`K%A`W0^<dbMd4p+u/GuO=0;ksJD
+%Y_+hhc?&!cj0%cChJGJ%=CY`UPFJ*sbKlHF>clK$]2%=$h8l at 3&UlbK[*%2c\:V1g;LsZFbCTR/@l'#\ht5!gqlVH7CrV(>'Z at n!
+%kf]-0$rXd&L2oaGf at 9Nf%9>ZaPnmLf,XP at W<DZ;cApCQ?:.;2d!-0,UTK0,)27+ma>`'O?n..l$db(26OuanW"G%d/&f9V&=Ce1\
+%S=eHp);G[4K<XNjDYVXH=b7,2'+fTO. at f9.XZi0UH@2ajMtb_ at 6$Y!aF8M#4VfON8n=Gajg[?-*+3FFc*qL$879ZMQD/"L)=S^KY
+%4mWX at a)=Y,P2V>$Va15/+`II&YorHf\UKu^,oJKV4fcSlorh>BTIlT/=V.2h at Z&?VL^DuP`q-_tCBH06ZT$S![,P-2<UH\^RD-s2
+%QXd$-2O9ba%"p)^c9"<A5\+\e<W&qVfpmQ-_3k.A.XG9>:MOXGKOU`rCqh\n0p>Qj5m#h2*op4Y#rdm/`XZ$>pUQ\I at lAIJn]anm
+%=cSLFZB8U4n+<fY.sU at RE55<mm#pZ-k;JiK^/G451it6Oo&[d at e*9PG:,4Y$cS5SF'1sA#Js?jNVmq+lq+*O!7\VDUfpdlM at ec/]
+%&0+p%T7Zi&PA>;!.HlbOB3A/G$BVH>a5E^S!;EDFHE$(C6<`9e106W:%^3]R3c`Ghml,CK[H7D6jme6JEbZ37\_fQaf1_\Xg%cdi
+%3\E_94NC at o,T6i]j.I`i*coJcfO^iF2E4"B%<PL&UT[WYO%6?2qXBu(**i!/@_FZ,m0T?X'TM:EA;b-]9=?&H#8($7f8Pr28@*ER
+%Smj/VYi+5+5q98GfCNh%:[++M0R%G+'l;0*0Uf,;ZBKLor.5qT'o'4W8ZFhK3M5,;1_WM[_-1?++^[RmF']iZ2X02jl$]jU_>\p<
+%aTHSgISJ7(M at T<mf/$`MhuM8R3dBk5lR/hA]A1+)An+I[Og#bFSiBQi'mO;e<DYTG.0JZSjFZ->^'Vt[N"+dY22\d^l*TLWpS[[k
+%=0)N:ahW7sEq^+nj1(PI*728C-IW_;-G%FR$VfT.:*C9Yb%D3m60j at S%Ua<</^3tI+2.1D+],Z1)kSt;:TIOgPo&^YHf_)9i+k1,
+%.2^q73&on=m&.[ZH[8O%LbMZ6TlT<VnWb(pi%Q^;o`eSeJJA3'a(a6G.+`;6*@i.`Slj8Z1>$^3(`C]iT&jVN06_$+Hda<%2WqF/
+%AuXg2rGSQmXS).*VXcU>\5P1WM3Lp7_2>o3h#nT"LX-UJTKZ- at mQAE-A?9+O.>&1^(nS+aXeI+30&)#-':bM4S!S#f1%2:-34"RJ
+%&4]a6 at BnbR]q$(leHh"91X"$'C_d at 1J_>3XaS8]6.CNdtZjS':3BU4N,emjL"C&Y<Vph"XSC_-ClR(2c<oS4WmZ/.M_;OW65mt?J
+%j1nLVe[TLP+ila/lYqaMX4ie!\5dC^E^?H`M5,LKo0AAsb=B2<AB;Ud.;<]_4DEkubG-sZ=8k#V^s.!F5O*WnQP>Kp#V@\g?o(6#
+%6>p<lbdR^lSn>]7d<)P)p1J+Zh-7LhR(M#CZ%(('`JGO"']3)DaShJ?(\*9?Em'g_GZV0;0e:/k/qmbpQ'i/>q_;U(/'0AR;j"ZV
+%,qFC at 3)`o_DGXEFm_F:W]B3o'Q^jE6n-(Jse3LqQp=!PuY?Vi.aWpuVl]6b<*-N2&ltuC+nt*=ds-+'#PQ"GMM<8+7e1'E8gdOP0
+%WW-<Q at XL;Snc:dGl"dk at V)f)E2Wf98%aY`=?4X3P/N3mPg"FaoBE!ER>GBh5Bn^iu!FgbA(CC#qWX[SOC0$gM3r(?-/T9XjWQJ^e
+%XCq<?VZOZu[+[=V)q6F;_Q,2jr6$&$SN:JQ!_=k!XTOIQSC]_N?2B#\9]]a[H-d1Y%gs-iiNC<),khZdeDjH#+]bl98?ON*8R<'I
+%;Is[/enEPX<W#Tc]:bbacJR#]BPXon=4Sl:l,rC$Hj7rsbb"t:g$P0l@]9t+(fukJ4/rp#nSLkJSN(;NKB(IpCcAQFI$^r9\d=f!
+%JSXuG+$IaDO.=13?J0I!kC\p9\Y=f2FP]8Cm+jhRB;\rh7/5J1+/[q5lc?/WDVb28C78gHbFg+-Jjl%uoobEHMlVcef>7%Kq""):
+%)g]I6YZs$1Sl:-fg<i56.CUT;n*3c`2'M")^HU2cP!-!;B/X<6c^]-c\%OP'SUmpqRaO8hAQ^BNV;&"Y=js=uSF+2=ZV/oAVNnEg
+%grO1XUgE&=oHp02>ke at 4"61%0-Xi$/e6LT9efSsNSoDS1A1[L0#B(HkqpnJ:G#`n3iVI:-s7],XU0O&`LLifc4XZ/E5RNB!f5fqd
+%Iei1b+X!E>_!TFP91F at 3<gUr/qltONoh7k,iAc+Y==8PGFWq(Z`93`h9a'\P&ia(0_'D<2$0DBNW$s!nD'i,s9'&_%D!Pe>lZa//
+%i<+SEjVR%ZYG?fU"B.Q3dG"9:k9bosOET0M=<61fPY\ITnA^8dB[\8hGBM`/MR)`op$3C3=P$3>N-0(4\@Hc7OX97"B.SXe`n9QN
+%aM>gEJJ64Z*N/niCRVaWI0ZKO6lB&V'#VT, at 4a%P+n94)6X.M)`a75Km)(,@#GgE/dC'r]#iBO]IEt9/O>Kk9]f*jnAWK++gK\73
+%*=M9Bi(5(qoA<?n5/(>r1[.+s;?6D:l(u3AB?TJCDj$T]?\X!uo.Ict^*Q9.IjZ!,CKIAsE;!qX52U`Pl+D#j at n`,gR;X_0B_rK4
+%PAX$]VON2C.aNal>2r>g>6U#3\l^OSC:)r#&Jg`NjW:;?Z4B<MU#YKWg`KEPgB3u#'VpeQq>mo,T&,u:/k3ks%9*$d-9W(C;`UDH
+%@OP=#L6)U:*jC'.rp-!eH*9,OWQ(1[QTLTJRsdp"TP4UN:M1KUY=WDO2:n=]dsRfN.cU:Rm'jp3NI#rsE#jq':2U>1Oc?N/BP::Y
+%s(&:'FNQZ^q%lVQ4Kjn-]jg<#:q\<c$R3j"C9ZdJ;731 at Z@R$:.q_Nh*]$Gn&P6II4b%bpW_emc1jZRHkR/, at B&g]WVp^bQ at 2ek%
+%,98<NQDZ+HJ%mSMDc6o?3D?$G5-.fJ`?l4)rO'C&N^WjU+KWXb>Dh<#]hJk`0nnlWFrQ#GDTs,<M7;YQ3.*C1M!(SF>/20`',s5b
+%q!:QTbm-hfE\MM5Ju:PZ^StHKKWdch1=k4Qd2mkF='I+LkNuK^*r*,5AH!'Z'NYiiY)H[R5#'C'+EEX_PiI);o[s[T@$_c*:, at 1m
+%$+Q79CMm4'GEhdUNiD^1KeMN^;G4)L/K,gM5YNdqcIaWa#0"qSjQN!b3$g7,;H6*`]]A/2,jARjol!G%1Xb+L;#?,AN9B?aYW/Lf
+%Q9.i('PfX_QoMqY<u_BF^"UV6]ZqYq"O:>2ifCq9ekAg61bVdjT?(ZNF:u;&OaH,Qd<]iYI@)(aI<tjPC\tdkq'Ro\19eU_[eZ9a
+%\YQP!$'p>JRd6i_4He/Wj#Yc9rS20[\=lg/9e"scg]M+AT5H9B-%2YB$I!lLV:MB'hMF*i?55B-q0h at 51H`p'abOG)Agjc9:#05]
+%Fro.sK?+G2(LK^&jmd@:\L*ip[6`6N:,YPeoQ at S^P8fgCALpOEi7fYVXfV"m,,7G,^LJ$0'S5qt:3+R3ABZ'u'9AEBaN%)3PNoA"
+%b#!QM7UU3<RGcV'ql&;@aFmTj*u8cn$,/]IH/%^gOI'ufP?Fi40#Y0"B2'=R'l?V*e2Ig[CCPE4\0>$sb!^s>SCUP+hrAu.8[:SB
+%*hP]DRQHs!1>B7A[p.]mH%`9VF=9l9Y]tut*gDnefmY#/lt)TBP(?g`aXm/uHsQ2\l`UMuBSHdIQ;bp*PBPmnKk+;E9 at 6l,JadBq
+%)Vli4As!p.fBo:`Jc3a,166+VJAp"e[k:adjOGOPfRXt]p4=T2Y;a^l*4%_Ge'h!*`'bH0rT=kM-&\:<@AQ2,D4:26G*G)a!aIeo
+%A<dp4CAbJ9J_:8qBQfMB:>%RT2g9.oEu!XnC%&BfSpVEgP^h0Qq2R\C=p""U#TpIslU?_)c4")OhEk<3[)"H3'E'A]@qNG8F at bfp
+%)22F.V59BgRZcZTFmhP4%bruUS=H>%o.'=OXBnHK*n3H@>T6j[i;PVTamuVO>,$R-.BE$e;^L#7m]Ne8j]KVp-^e_q:Z&Ol<a)$Z
+%9oU^^F=#M#s8TRuA[.5tOb<-be_?c7m=msQj?ouhNM,$131X2]d3q_N*,t'4gM:@1'_B4V3DQ/8^+HK>lVATdZ$o,k-39A:ctuC)
+%,R"uAh3.h7"a`<5C[p%Th'Y,<N"`FR0UBWq,P-;'ZlL@*e$O)b^]PYLkUr#=PlLrIC=$!fA)R8KrTqMq=uZiBT#o7Uh1qH7$5T12
+%$:1lSL(4m&6 at Nb-=3XZb!A>,Rm8RESntp438BtEd/]"%<iN^NAmg\-"Vtr_&)s-BJQMd5Fre1(]INk8]0b?DW+_ at GqGO:fiVrlqJ
+%r]?npQBsnuZN>'e'HBgLrph+OlAg!:`Y7BY.pZW at 2'9RV0lP=Gl7%,O4#G*37r=;6.Woo_q<A89lS$Y)]YOp<^W@%o at _g$>gtZaT
+%97*bm4/a'n4#oF[Tr[9/KG,ofX/udOo?c?Y+8P8^M3iVS`oiEH`1%F&r*)o:XJR;)P9"2%e4e:=T.27jR=5hCep^>)P at pG"[NBVG
+%Qd]PC&s8JS^nr]c79b,HYHqmgFecnQLB^B[=r^IlGB!h(kU=2Jj`%7[?R(urCDlPeo<,RJ>_%fTrdB2`Zi^cL<lIDK8\2^(S36[@
+%2eur.(dqRZ46;M,Q]Ee+CAk%Q76N`gguY-,43>*a[!r^7m_\iLpbkA'cn9C8cF<(X"MkTMG.td[OY,\6IAtZ\SP8OunU;jK_RAAt
+%PVcMq_:j7FT09,R=gD2 at A*+eRb#BImSj9NWZ9bc%./rM8]u8WYa5tSq=nCX.Po/#Q]Wme.jJ:Qt at gb>BlG*6%P at cq,^7JBZK.DfQ
+%DNmDb&%+":oe6F at 0Xb69D:WQ+:8tJn[r1nk%#J&!AAu9PqEXI9ISXfc'GI)6-mO]5_%!FjkPYPDfSTRP'PlH>5[+%3AX59FGJh3O
+%V<=>,Rd/Qql#&2`V:N("Zoh$GEuTVNEd8H_)k,+Hri2ZR#l0OX4%kY\f5Uujn#MQ[)JhDlmXGP"UWE>D?f.m+MJtM<8<<rTh0D0=
+%q`riYV(<#&d7,)[s7^$NFIcnn_'AiA'?Zk]r/Ae*TYD*@:PtOsat0kX+ud'W]Ush5E(HqHgR,[Qe8^1,&![dAaj!\$^["iejmc64
+%oZ39`.<,a?Kgb]`;F%F_(2=bm]TVj6</+(Q(^-_A>>XK]*XmP2jKS%X.bKZmr/PMrc\?pu?nllNnHaa"/$#BeQ]n+`U%lPN4;fTQ
+%PR0.l'mulgq at fZ$60QXi54@/5ki`s5,0?:@Hk6]G'8!m]VdPt`LU_3]&83ChEO"IX)E1 at DNMpHE7H8=JH"6T?LWdM)K*-O^.&V&o
+%=N0,r$BMuDH3=S]SdHcFB<2(dG)0e9-f(]9efAlVNo.\*3G"Jhn6PXUX/`:DH>3o/2BfH,Aq7jj_.2:.Q>aU5YI%=C-=6WK[EKtG
+%mV=T at Y4]Wq._0^MH9=a5m]c4JO`-IuNHkp,c[A[>cX"kp4Y;kq`5rZ.+G4c:e)Z-1O2['9]Q`&N!)ANkV'"F,!d^=K9(YSUDkpd6
+%kM/8]QkW:%nEBg')=dQ=q`X/V_Qs^[Bt\*EX-GX`5W2K at SMHX-Uq1VT![8r=SGcO(Qq(m=5YS\/ccI%r_h6O$f9G%fobB+YZY)hR
+%q:__!=[;+BB_[QLdgaRhZf-\pGNEf1F62sTN79b\"+2$NYjVqG4<]ojNaFn_4,JC?i>*(P:=q)DPofWgUEt1k-S`FgKj_,`mVXmi
+%)F%dk3e(UCZb9YO_X\PU"Wo4j,rOMlX;Cor_06V\[hAR8/DLFY.g?Wb&ZK'me`,Gp:LD/Z,;t$]/%!3l+2cYBk#uN$B<pl91sZ\F
+%^[mR9B`*:W==/9OYqY*-*O1e.=SCh-,ju^?@r6%E>_%`O>g[2OC1t#PSi_":%aI[,;,=3U4&=e&)V>;\3]<<#?"<g:BW_[:a'5c2
+%P!FeR>TU\@P4?ptiiS>^`1&SZR\*DbZ*C8YXl2D<c&"X[qfr;jQ2/N_C!O1pNBbB?,&bA=&([SOR_i_uob()sFk4/n[*R$R&S::H
+%7?&"=,t%'&&i]^?nE0JpDQ.rN7PfDDA,Z$Sp=Y81o$62F-2'9GPAScU#u/CS[$f/#qBj/0&,a+gJ.oe9Y#on?rGeTq6up)@RKEFF
+%=g:1nK]K3\r%*#+=;33V#oTUR at 3r[Y_;ZBCFQHkYDCIa>P]Dtt$/#aAEmd.Q$L at 4B^*h1/]J(tmK:hbIE+ at A64cgla\@$+DUka?^
+%G$%dQfUbA(d&ZWTMpn+Fq)Im at 9[G:_g$^kEA[*0Qc=/+DqATF#Xhm.Wde,,-Z7g:.Ep^>`Q..A,R7UNHjNXr0]CX[9K[#MF\*XGJ
+%Y0.rVNPgU^S<NWMf\*]I-MVPKC0#W_;P3RN&+ah`,*HK3Um6nm=I=,S-a9'>SnG[sa!E6;XfGFdcS9\s*7bPeWLFI@=tas1LElsP
+%%=8uhZRO"q/EJQ[XtAH/X<8Q7l";le$7+B'l<n at hT^lG6cDk^r@$Tr?TCks-O<gtk]oKt(s$>'Y,sobtQR-nPg,1beEn(jjJ_<Oh
+%3,U2BQ"hae9d3Jn9K%.Y)P8^h=]WmS=p/&>+dEP6f=AOR<H at Q1Y]RIU,N^UUc*1089K2`;n0SWG[PGPFdP;kNngSJ#kp1e>Y<+>p
+%'S?nu,$UD;jd`MKHgSY=e%dSiG9['n]'.8F`233VWWj&nAXn*jhUC?B7o.M*=#+GU&k/mG`jD9J@'OP%Vt]2[deU171/+?)$4`WD
+%C\s<%dE$_-!W0!eOt0PC3GUsr5q\]mn/uhZI>9C[R"cSo<IrMF at 6"J^&OB&`%\3(=S#Ir]p3`M'4PQ38P-_Y:,BD/9YHZ?'`tE/H
+%i2chRje&[$T*Y"P7*]!FgsDgnjh4lGJsVYFhN*ls7`mQLlpRf5(R/r"R%X_r+UKu,oKf'*V;f/9F%,YRpQ\KR at 2)AHRaQGRIBG>b
+%]7R'ZNge!V(-59F>ON^.Zo1[9%sD.:`&!Qe"&6;M-Vc47hIVEt<Mi3EKp<t!lb6B=fPemPiPZkSTqs at LCTq3c.pt)Uhpu9EU?Uc@
+%F1EmQ'cIq$qni9*/VL!F>%A.L)_+6S[oQ*"bkc'MU:pA$Hl/*Sj,bpS)#dO4!m-Y'g4b)9[6%[Q_Rh!FetflU2IISqN-Ek9po:=a
+%BqgeRf9.1GRd0Qhen_8j"@_keO.i%[_h#(RVdp','.rmqOW*ne3#'^oCn*)$rigOejS+3&+/-ifLQK8?;gqiQc&#pT`81o\BOAsi
+%f5=Vs5D-+^Y+oip$[jojjn3N^pcC)JgZ.5Q7?'Ri)=*F\9&<.D7 at sF/]L\34SXc"qe5V<CqaS]6Ql4c`_,%hESflahKkcn8:7SjC
+%'iEZZAOX?aPM;QWV$4-#(/lVpSR2F(Jbbe at cD!t+XMgX:Lq3K*6JtquiHu8]HX?V6abP%gWIYpIX]f"X'*=mN4QDs<;/*QVmO?&l
+%k[i at f?s!s`BJd;ic-S^7imd$tg,-GL>Y=5$6#,Igd/#[VD&e").:7[EGq1p8qP&_uQuW^5[J]s0MlLhNg<L@@gUT:#m%/ii[D$oY
+%GlmeXNR!].oU,jX<?)P^.J at K?fM_0JMN>kL>Z.3C7)F3[2 at o.2cX!S?D9WMM at q-(@@pTD6&1<>_PJQj4'=ts7V);O?YFRu-b!@8f
+%&fJGZ6c1[g(c\@smDQK0gsq:TY`-EhmEs?E-Xh"4c-c9eVXh*M3qnkH^Q$Ys#*BZ1/).C+-2%3?s%*CBNAp,c'77G&Xsu3NKL at Hu
+%q<aN at P?Khpan3i0pN96iR>rn1e>1oWm0I>NHRVlY>M9 at nrH:<C#@\?SB8+&B2Lf?HXe"fsDF`I(ljr:A9cY[P^=p:?!g^.)B\fH<
+%cBa$haMA(;U"t#kZa1;p<*N>9=<O4_`/04/pc0M1_4'fS-fNq5=89YGctYmeP/sAnWaC9R2jd-%7+A8U^QQ6,2gb;rEBa6Oq>>jP
+%6]QhN%5i^d@[,P]eLS8'>_ShL!bFF2N'$OP;G>BdJ>rO?1*ID"7JqLO+o>mIC8I8:F&8`/oU0)VF?]04r...]%Qsj9jeVlllH2$G
+%(d9J1c%Fg=9#u%9q:GSuMn(`@d:1at(pOh1&`b07CU(f1`5YZ-9\f[A`tPC.bO8e'\Fg>YWbs![_Tu7Z&4fQFrnG!EjB+BE^8Z<K
+%:bH-?H/gk^[%nhs.%B$a[])]ahC9/O"4OY,[puR[k/k\="gH^fm%5PTQ!aJa3AP96Q##W1cI3u)<E*kK;q7iJE+c"GG&8TG$iD4:
+%p0,B0m9J)kIHi\-]M2:Dh`Ur*90RNTe>l0\<[BC at HsLLAT&4iuMd\$J8Pc2b4]+L6d"7I<GLNE"3'70FN=),_NTUZ1-2s:@-- at La
+%GNBn732[=t&A\XQNSImZ5HL`9K1+W,&+hl"^.BnIS!k+<M0^@32^umj][l at Sk=G<2#o at lWOn3s&1*Sul>(jCsl at f$bYE6*9F!(,+
+%:Q?33e#gDeMe/Z7++&:qX+D&5pQqVHFW^nu+qQ9:nWYaMP/2"]DOLMiMm_[pdn^FY)t0o(4;0<A1@[B&+[q>E`gu,:])KN4`jm,n
+%esN;\FNmtP2\'!m`>;(oWi7e^l6A1H\_(q:AZ$m$.H4);1PU#uU,*gj\gH*Y>JU3(&9Ubq$+Z+7 at eH0P9:_lP)ktMa8=6 at FWnA%A
+%0!phTP+$Ui];V4\1EQ8N(]Mk!F+u"(N.)*0['1nuStL$VEncRGo*`*n]hFo:JN4?JmBk/J+26CGa;\PXPSd-*MYMpg-Ap:EDrQE?
+%jDY?tQFWQ>:BgA:dhKE9c(^2WS[f+'Z=$GKjg%5m4E8((a14$VP+C<+4lgP9d8`YrBgL%^J at uKQDo\7bPZ7SD#.!RIrfXXm[nt/J
+%<,>[,kO\jJlCcRsL[M%3g?kM(8FTk*E9\Hcq1V:JIX8`:;&;N$o##=i>?QV%kM/a05:aJ"LCdJWOqc'?4O7lU-M.;`*3"R,7<%N-
+%`:MA0f9i;%J"pGJVK7p3*J7?,RsULmc)+>F\FN-%phDQH[462VWJ<G$JC).U[!`0sm&-N[F4pDrEO^&_\Rn05;Q!e,cL'J*OJhMD
+%NKF7bpFCN9_9s-&DIQB:&cl7di6.]727J,JBoYdsOB1f)8$`$"-Pfp$D^M%(p'D)U)`i]$D)\O8M:[#]1+P_)9/X1)S?CkA_S`t`
+%_,72KQch9jK'gPZ4E7T%SO^WT/R?&RW/7mmLndO<BAQ6iaZYsu3Yg'>8(i+9_e,-6lb<#lKK=;m0e^'bfa`F-*f8[7i]uC.C210W
+%rVYCV.m!oDDoK5J3!_A%(Ze$G'NpAu8ZX;rgDHYUYi2LNaeE$ZhHUk$A*oeWS"(2;2f8+C$.a(qk/T0S[BCQqDYGoC0lVmmi]U)q
+%pCNd^1b!<'7Wf%#4-TN3i`Ks3.?D<p1j*]QbAXu]9S7=r9O;OQ4T``#"+L[$pMVMjcj"gfCfq=>GB_n84KY%f3QcDM/QYbS`noZH
+%[KHTMD;-SVP=+Y5k.\'qhORH3:-%X2G4i?fJ"iqMYl2\KoFh&^(nW'5WZ@^GrCB>9Qc[OX$Ous\CmEQV2Ba7S-,E78,:c4gUX&3m
+%Ao4q!7S[CLJ'<e*>t]WMaK@'-^9=)YqKL,d?Jh0.<_e9t=ACjI(d8HZGOh;k5`,P/.bhER71Lj at T7A!NEB!k7/"%)f#ll(Ch"lUE
+%j:@H<^W@*4!)`^dc&+J.O""9oM[DQTqhs6n,[lGUkAnW^!,s\2d%-s-DKu;]*G,dI3T;kpF<R9pPWT!\T"uJ/dhK?mj`dd`iJ<4l
+%^qdsXiMga%kHT&19UI%nZR>NE5Yc<"JKObqL0octBJ-=Sgf0p4?>=qs&j+u27<<2XUdC"0"ndILHp/5\Y*k.;\e8A6S=2'86:i+F
+%%g%m($__Y#HmWA5T_RIo\WMkp-WC&-Y/r7dYSFR8iQQC=>kZj&bth!*f1g)Jgq'a(H[-?:ZMLpQS5ET[D5;?)-VkjNg]$?_rX at I3
+%aUi+d`Y`#H(HA&1fn5m))pEapiGc-g)UNuq-a!KlkbKV+[7r*q:+^6e3YBIr>!mfcX3%Ij/Fa8_:E=h0TQbDrM>^3r=nb</j\.:1
+%?>IujOABTC!cPsNAU22)b&e9H?cNk-WK.0Bk:m-o#A+u?-D6l]P;o+ZiHK:`9$kjn7bQ:D*W.Rt7rk:h79as]Y9%T/[RRO at m_+U?
+%fW\J*]Vp0'Sul$K<be'V5,V'/Qs^WQSn!=Po-a(/l'a.h0#mcic9sj,<N!#gNtYlC$52UiYH/8dWSM<*^+O*.:I0>29?hE0V&u,.
+%,W_6G:X[=n:Z;1LUH7pW0DfIC at Nj$L.uR)f\uGZA(_?M&ZTXdNAA?ukq1CIm9s-4jCACbC9(MnGF^s()X*EI-qmQ^C7Y*;XPLtaj
+%C\<S9`3;aMLP^\DbOL_a^#ttbWbR^6SU4@/?#"_N'+P]G([68,)n(UjgT6cu9u(`o-Ls)$.iT*agqt<"S9'=!$Mo1np,nPIcV.W'
+%[YAXP['K":)"=Afqj73&Ft![iAo$X26_7:HPe.`rL4Mg"q*],#.>5cEfl?A0>nV;%/\+erIhu1-TT]/iGI1c702LcJp;I"/N'R"/
+%F&CU9jf@=V1n'Y#*P!2C`Xgp/DEau'Kn[@gO)WjaWWo%u)GQU3Cq"S$3FFRslldmtF6m].10?^$UlBo(6Ikg'JXEN9M7j+Y&lOA.
+%f&K9"MTj5L-iTDOHCf\E=@o[XKW3*QJ/+?Fe"c6821j<N,k`XEM3F2i-jnK>D>PMjGM:07dW*Mp04Kntjmp]ma^!sJ:r^^b23M^*
+%-U:LeL1J_8$CeuB3gm",V,K at dpeFmnG^9hYr<\7i1.e.BPs*n\;K8ZC%boYgf9h';eJhM at rLeO/+WY?GH55THe/tQ,'E2hRYdFq]
+%XR$5q%>Q9+9/KaG\nlOJXj3X903US'LS7ad,&a2%`O5OkA5\?inlX=6NkC"A0!2ej.1KfNOu?2Z539ZjhYgl'pjjS=foMHoRNn/h
+%\$].%A`XGhPCtB?m.B<);<9F06^rCKU#iSA^, at .h9#",%%"QAc\lj)$aWQ at M7d1lfl*\D!$YF_hPQV%J3 at UlcLG^/6fR`+2i):lC
+%8hbPH-SqgVhCO?Y>@25ZF#*bOo16g1%7a>`D2(&_r6uO'_,cN;W=hku at 4G_3hcfs(dn<<i.uMH'b#*i\4ItrJ8BuPO.euQTIJ%+b
+%s'9mC[`2@&,`j="pc'94DhU(*S7fLoKGH7V,0?X)Vb2ol]DQ\WfJ59I>q%Zde!cF7+9/,p*)Mo!7\m_27L'4\$^B^t?9E#bPE:^5
+%C%a.S\#<dVK9CA/CH")M2]8p]D0k#!&Tu)_K8/&W:OsC6+q\/VTqjGWT'`jk8QReb6- at 752C)]S at m7+j.L:3chSQatgpMg0PTS at 4
+%3)BEG^'WN77DLt at E_7FTXQhU=_I/Ps")fV5?\.p3%A`tY?bY4%jLj,F3iUh\$FQ)Idm,db%$66;H80,'LLIB3b1_+A)+brLp)IL"
+%FWsR3>L2<;Vf_ddU;1 at f>#Fb`9$mo"fNQ)_^(QhD\ACCYn\trc7fp'bQFS&YbZRH2#05uhmC?>R*IOm$[nJ1"DW[I*12W"8[b[qC
+%m^W[M>1.<UQYZ@:[TMnf\(*eSk^6T*HC:LC5V=:jksB!b*8A4oVJ@$^C#pZf?$-LBWI]k/VAObrjlQHjA<a&J70RbT_8!]k_PgWe
+%B2/&q1`eb!H.nLuUO;Qp6FEA<F%Ztq)6Y>[g;/610j&hd`]\I?P_ at 6kA6ke+Zu`21^K.HP13DU"Yo&2"nR+rc`ph. at 4*)JF*fk7,
+%WB\[t at QVJ[>f3A'>k7><mX+OQ(9$;*a$]*&NlH$SVEa9Z9XS%/%a*a2CWT2DpJDHJ<0Z=%=n/VnV:qSdntoAW]`,#3/Ss#QRI>:]
+%IFmeh!CIDS[CrK&-ojb`KT&D6L(]gDH-i9'#u,-/,Iq?`JAh=`dKpOJ;k'SCA0q7&Zt"'QY.4l-r\3p=N\]Us2JN=0\>rS.C,:@9
+%3[nMtIR%\$T49?4JS<6U$n-2(*oeQ0`@$LgHF\"9bpG&ORBhQPb'C*r93u_F5.0Wp1I9-2X*qTEG$DMh2r^;BlZZ7Mk.aRC^[>,8
+%NeMCPMJ#)H\UO)q,[AfZ at 5\d^Xol'A3s,]C!M55`q5\@XWni-YTm+sanf/&GPB]P7]E0&O6S;?\$op6pL5a8OTJ7TlX&W'#&lW<H
+%;@aCRF\B/:N<u:1VX6e53l at HaSK8TTqJDSZFV)9gRc:;Z`B2X!;ihY3?Bmj2f;:Om@?/)[5X at KX(7A-1YRH\<4**1V#Bd2)QhjCL
+%nGMN5P\)c\.jtRJAW(s+'K6sJf:KI'YLJ$/'I"2Ij\AH8j4%E8Gab:NN;W7Mj0<KJ,o0KZ)@'B/o2W-\l]_2@&esE;'N4Y?'.N2<
+%4:d'^6<Y_<H(9.?5ql?_WkH`2l7"&'6,RU10JOf67Y@>"4B:lh/lXI3f)fu!aoUtsl<ET1/EKk'U)Z4GMr_[_jNGeWi7s at 6,u<KI
+%dF-#54upjL.20(grT>5dkMUfSe:NbAVU5\,SfF>G;R,d>",qg_;$HQm'5$j$b$7ggX9/dU7.$dQ%ss0`pF":PlmTF*Q_4]=grDSa
+%aOtFiCGOsdZV%\-=S(C+W%:'4ENE&^=_;5ao]c,tN%efFl1+9QV/o,+<o0T!QYXJId;3`8!>@J\SN(hrA8:D$1:qD0&(@Kn5"FHn
+%[?dEJRdb[l!?YW3<tBZMe]MbS[=b]Dg6hG^HV#T#nl">[RU7fD&O17t=YUuQp*p<(CW]W(I%>sc:<@>>W()sb#53Y7EMpf+5;'>(
+%K6tqDk<m:ZU"5eW^mY>ns*:aV%\uX\#;kO2?R+dHVi&nC3SpN>`?]=)UiXu/pZ90ZemTHpq'rC=ICC:n%-u"s#_i2#bH5ho0C!Io
+%NlXMbl'ZkaA#F'K?WK_Hd8_RY('H&o]km[E^acoc-!Qsc7,pG'KF2E+:k$bQnY&C-OdeT-Nn=1q:,IfBNud\O'_Fn1c9G&V+nNo!
+%WcQB0LUuPX>1%id.pqu*eQ6P#PP-DEB?3<0p'iq4X9#2-p30ll7oFGYT'6 at T,6q'Y;HA\j_sn&!86qMekP<eW<]?mF]e'g!3Lt_g
+%or_4E)-T?.hXA":l99049Q[ODS,+=O6R$<km^7HlGn\M&rp`Wd\japb"p9$1b#X;.&D*LdPttsC at CNhWo@X#mSEISd<9_D2Kd>S(
+%DP^Z836B.Ohno3k!]blb#er0HYRug\BfYKQ*Rfj/T/9s.h>M"8BOfi<Crpr)L"+R,Pt$rVH.jSE"f]pBaNZ($)TYdJ7*ml2B6QdO
+%mjk7)e]Cqa.FcI*bFr`a`F9l//YnV\dm5`,kZVUG?]>sHd[DSHb?'_GXKZo4n"2sTBX+HVSpp'+,O6<P#<&0;hJqu(biDBa]Nf6D
+%.E&Kt&lJ$m24%.YGn]%@k8;2Mp"'W1(.=aL7M)Q/"He++1T4iV4L[E*_*T$A]#TF&1[H(+?1#M7?mGoK`(FP at 5<2&%dtj1M&ce:l
+%^9G/Nrc>>!9`StTYT;?qplc"fKGoY0VjL7.8EE1,0\;/n_m<T-e$%S4i&2J>cZ4-m,$BjS1j1nqhtlcA]53=70]qu0''7i6F%dG@
+%]^#Kb4V3tW/_m)Ag]s>0##RU&"4?EGCS#H^!o;>2!CJU1GN?$j$pR'T*B=5$b,4Fk8K\9G\u0lZD'mD at W?ZL+<jKQ=(N2K&,/RcW
+%O1n5Z4S[$KDjaM1S_hmg[pnRu068q*;E]eMd=8jMU_c8,;ARu<'8aR2JK)T4HE?^4>[qKY&[G;llkK;@_&QmLQ[<XWp?suc[&b_0
+%>BP&1\&dA?)6mCOeG!4F"O&i"7u/JQ$Omh-H'r:`N_kL+6,E=>^RfRG66-6?Go,ps+E"CY$Ie3$YIY5cbnhS*D*SI2eHFC7"DKYN
+%FLQ at Z/>?R9'6)?P^ap#1A!/e<PWS],"k/[ja.nlDF'J7PPEl:$M07\YkbeebOnPpke!DHNmjaWe[bb=pl")Yn5(f$Aa-9+2P?HU$
+%$$_fQ`5\0^MRY2d-!+Q,W?U]^oo2(:5a#`,_mIQ":JRFWn+iTF_e6!*MrE&@F_,WFo#YV.T9.Dd(X;gV2e=kY-2PREA?.`eD=V#Y
+%1%(9[6h`,Jq&k9NSCtC0,g3#M>iHf5LO=6DA3CZCWJZ%n".3Kfaopb6Vi]@Ya,mCgT2g%EDp[8bckq)+Nh]Ra:Ns#6c;3P$F\Ths
+%p6.C3;-N1=/e*$NhcNX[LQ1f%U[[BO?h>K:r*:4N$N1a%Ro`"fLY]jjIF#-l7-nB4Jtm@>/$Uq:(?B1j5hQn;$_5I1f#V52P@?2M
+%/caqGqV;!0M(5oKa^m4C,F^uK=4SPJoknQA.JJ2PdloDNQV$p'gnhd=:e!qOBL(`IY;u2n9o=it%?jmLftYm2_'c`n,!X3,$nLan
+%h)`4e5&1i->4:f\^F:IGU/Bh#3C_n"S at 2r851"Wh at mR\*?dQi;gWMC.+P(gP;<?m/ETsZU6)&fn/nTP^aHJCHH#d2>.!P<M1WVNL
+%_XL6E9HI_,nd''UqYSD3h9X:/i<oNtS`d\H7o'TKcak_qi[01O5_aOSSEEO\JZOKp^5L at +M6@JB+L,V at Hq6*m- at ._d3+)%\Jg-AL
+%3^1l\F<#G,i;&Up*6rK&^^43?@Y*YEBlbFqG-aZp:,WuhG-+BBb%/a4>`]"BnR2P)IUe[71dX/_!MUJ@`Ch*cU%ZG*qE1Z[ePH"e
+%hRVRa#=]B%aBt(j0gS1=3c)#)lh>UQ(^/t%VTqf*jT&s)k"_Fq:d0^:-h8=2o[t87Yj!O at A*5SdDII&H[&oRN&jj)FX9dQ+A7sr(
+%+ at h`&Ur%>,?83)hIE]98KeJ#t2cFFpHZ'8R*MK$(%c>+XTo6*cZJ_-,=m-N<Sk4=JX<kGAa5/97;B,Nn>R>PBmQ"k=gph-*P:\L)
+%)/^aKO&T&K4bqggNE!EB68RB`fTp*k&PbCoWkt_8:%HiE28sVH<)@24r1<f?BgcWZEfApPMdqL/J$IX:A;.PnIJ(.<cRcOWVd(h?
+%F=gT/hZKR8$Zm>O)U)UfA(jSC43p%)5/j_ICZ(05kLS6#Uu'e+2(\Eqcn6b3lJ;E/esNq_qGjo"'1^>WN at 0::q_2l0dnu%4Sb/b5
+%Wia+u9j7'Cnu%e#PC at R20GX;ugm\1CPB%#tr$Rb?2;`$``^SsqhRHsqO3^j"YHt9:M=S&gn#*:RGF4Re=g, at I!=WRdM"LLd3B!in
+%f4L689U74J*7kW;P.;!WGnW at jJfVMHNZqnMH%!:'6%)o:JM+a_Q(heA/%[A0N6%KM2Fs:u4;"hnWKK#AT-o[(:W%#7!`Lh/!Y0k8
+%VOsG/VB0rll1C:t+SeLg];NZj8roO"lP%>T=="7;6%=(G(6kGes3r?Jel&+%TMStSA'6(bTHKU\`#/ItX\?rgdD".C$_4q0rQB%.
+%eb1,R4T=(*e,*a_C<"QClW<Yj^1jp>>gD:uQZ3Sm4"3JBG<A*C]!#HsIACm6h(mTiE0hgeRZnP?Eo7-B=6eaW1.+faQ@)>e4t,IM
+%@n[/:WnX=;b%JOC3qDYN&T!Rm_)=8bFPmht)ac('RBl!K[!]G-js4m9G(`D6n+Z6^h?iL9$RhZh1q7-RDb1P8KkIeL[:NhGQoHEh
+%2ZI77eMr!ceH!d4HCqY>b;$&NN=B6'$ns`ZenJpQ[.Kl0AKlpj>;VHShu`\41BRciea;7^\G.a6V_F:FI0AT]Kplpd$Ee`U>ncs)
+%G at Gp+J+B0Mk3gA0,T*eT9AkF-%BS#c_mXTKDp!5-]hb4E4<>2JoBBgjp[ZU5?AfWN85lH*bs$55Ed(*L]h?gKO^G8?dch3CYm^8E
+%8uZm&U&>:oV*`g3Wc([@kbQK=p\^m)d?1+r6M<kdr?g2U%5KXoPB?VXk+32#0eUZNa[_gPXl+kd-)r<[d1+=hGaQh]Y:R372HWCo
+%-6+I`aVZRNIIeg at qJloE?S)0)qm*nFZ_?.-VZ3tJCaapNhtC^D>O'bl;ToXgM-G1ae]OD.=_\K4]2e_'f9T`[Gou/t$+:7^2e%8n
+%W&`@5@>WK%B!*D)V9Vm55*I_PNP=N((H=V&!"1_q5p!F.Zq8+F!WsT[EX2]PWU[]W'WML_U=R!?10uNFqF<u'0raaU&Bs^O5/WpP
+%a?5N3b(!,Aggs*&ip69#-kF#o-rbbLPgEP'rO!kU[Y3`^L7:XSD6JEdco>dV0MB,UC?QoIE`N`2'Ic%NJB8FG9)@G]BTi[efT@:L
+%Dt(#Lr,/KMEma?0k8!ZK\I'?N_Vp"Q)gu`g_+2<&F`WX$cK<rJb)L;g98tf?o)[0"P/)k1=&s_')N9K4)uRi,,S>nO#F=SO$!jEX
+%n*AUtoVA^gn:b at tcfo;^;LV';c/>X\,FElXdkrR"\dU-R>+Rk*Sk#Rs?NWKb+U1;\.Y4$-N1#0W>YXd:0OtBUq$/!1QiB at H%EN<6
+%&4mFA>p_84DB'mrnK)DAE3&C0l0]c^3o at Cj^Fl%IGOl<T7j%=X!3"BraB'tg)KSB;946[jq'DZ/>]`.g\l3MRCu)>NO(g>8!1RA,
+%34&&l&7;/N[119$rHI<4P\#.^0ff]l.E,O?f,Nkr\$B8%5D7!O<Dp"3fn)c1(`ea&X]A%Sc;CKBT+CKpLs$Os,Id[JEjb*["af;2
+%:t<,?Yh^ZtJ?021Xt<F\V^cr8_Bm;AqtXOhku.Q/$_oV,[@DdtKAG1AGeC"o)KE&?)(r,heV$Gb6l;f-o26ZA##C6AC\r!'E%^PR
+%M7m(%q#sQ/duOYHLU-"#jMWgX>._,3=B]#4>ZtK^Pm='i^#.pRE2_Q*?A;8D at LGTLRnZG^M4.-4:iN-RSNNJGQVs)C6dqUgd`eq"
+%i(]o0^J6L[Vi+_)ZMOg!V?5PpLF2B$kHoOXg at tq98KYc:CI4^IeDe(JQGLdL?N1r=[H5>VX0&<X#qA0:kF5gkipZ_:FI_']GQhcS
+%`jq/l'&mo_/J"^`8TL+irQ1$3gtOe9('lKn6mLD6lnE!Y=@<ZSft:+sbL1enCFf3)[U\mdq5%q0bt#6F)INhHXSJY3?d:);]IfFR
+%8Dsd>Y<M'-XL+)+HANCtHO:i%D$Ne<;niMuE+m[;#qkSjT+m(R]IT.N?K=%h8ZGd0"7H"f at 59?E<_!A41?l?p`Ste6^\1'-f[hn=
+%R!\tTPLYnCQ-n6cHV_0#01!@4m.Y663`mqWE!-L;K&ZU?laQ%P"Wch\^%U_L&u]u)0OP0p-GYajYj?d6l59&?.L<l0JPin!T?B?Y
+%>j@*j4kFti+6NYNTjQ-`+=HV-J'q1W:Ba`edurA9..C14W at c1:hLkP+fB\K at b!liIO\`F4PT.a8P)?cKnkM at hcbuhVZL9N)"8lZO
+%1s>Z]qQ;8PqOLl[i&"=Yg1*2ud[KB2hI\O*K>_"VLJ/N_bf;kM!a66&_IjFt-E61"G/TX/M);>X$q(f at n*I4j1\pcFCH_Kfk&]^G
+%j*:KA,4YI]Fl?;u\*d<Dh!7Pg:M&E]B9_SfM0SU*h0o0II?M]akV(\.hu(pHc2i2N;`33QC7 at nPJpU'PAt,)u,0PW3/53lU]nXS]
+%ad37ZVS\uMB4.U()l6TrKTR at J$N9+F9rBDIhjtLPRm[[9cl+PscK*bZ7e5>O7:T/G#^l)_dH0O_A(>qNT*/.OAPRHlWcFM%>(ZWt
+%IlVdkq%7jIC&F+4To_do1797bi-XQ0XFpobG/LG=>d3oM\/u-dbqqum&6_eY833kW5SpQG2JjH@(o7l!N+^*-4tD=tJTGaT$^Pd(
+%f0RU(@IorjDJ<omjoL#LN(;*<;Jd\`<+`C;!LVqnV0o$%J*m[Q`%pL@:O->P`j3-&+:ofidK*M=oK\8^!9sUC^SKl=#f54B<cilX
+%SUVq#,<:pdD``qoG(apQ[M4%CRMP5abc/I',rdg]YA.]>QMcuA,ILIZfos at CE/?@CciPP4DWgSs?.Yt0hBK8M228pX@&9KXb=J:\
+%lf:F^pDmkh3HYXm_0\ki0%O`Jf9NDQQOHg`>]O11>gsJ"GsjKl%\qnoBJS01\1e.l67!/,EqQ%8CL8oPr4V4pn!$H,jJ&BR-XabR
+%!Pue:K+ln&+4="'\BalWHbT)DY9dkHa2+'+DqY$pcME,NFM4%o4NpIib0/9B+#aqi>\p]-3Ln9Z+3cLBI&,`hI at E=mM,!+LHlS:S
+%D."pe8-<g7&DEt8)[d>(pP,?_EZ`ct7Sg_"2C=`Cmj4=29O:mt;rY`l@(G\I<tB'jA12 at oOGd,%!>PdQ-Qsa/&cb&_3>g^7S3O78
+%H#E^j#;nU97tMb2AipMb"[YqlUY%WXL$O"sX?$W',_ZCMjK0b.!j9Rm0PDHdoi:S)YMf?^Oou=/G_"%keWjfggQA,^WO$R^3*AJo
+%2(q/p#'TosJq\#oVKb7Df(mCqLSX."Qq!Ye+h;DKC[^^33Qi?TE4`8+bN./+"P\)8Rq%r'4?-ksNGFF1 at ki?r)"bLD<=T3We'fjn
+%<tYf`3V!VX-fmI0=b;OLT`"07hh:m1gLCY^mIXt,6g*U8\\8AtWK6XDXNG;*Ythtr1/tR'2.c_'a]*XSi+e-h+7%J0k1ChZk)A<=
+%0Iil530^o%X!QXHOcgDTC0X at Q^YJ'd[Rk:2&FD4R>Ec^'iaaMk,#Y@"FFL;BOOps at r:)q[l[e',g3ZH"/h[eOI;D3P"L!&gmJ4+X
+%6jPOWe?`!GI&=%@kO6p[9#6kdFSI79q&?$:(s&K(&S:WG)_XQ:iQY1U^TRSSCn6fPP3I$?fnT^_kgPbfZW[tbb;k:\J+ at fr<QqrU
+%F4-EPD]p6.aH4mMP_!jqEhH?a'eRk-bG<4)$>O"t&!FADo#0P;07%C7Hkss&'RbL3=B(@Sq_[(<[Q6_>(i+]k-cWs9emq,'^:`"7
+%SbjQsA93OAl!T?:/U,7l?BE`i_K2-"8I%T#KfkH0882X=>_sgBr5`ihb6NUPLD+?978B8eqMdu']+SYQ!Q;?,hB2K\RTu+-Jeg1-
+%StP7sQ.+f\lf\(<bm4AI^?Ln=q`L0Ffes'3JP(-SAgA$TDlG8%5(*pDGIg2G>YkK+l?=q<c`Km?BH+/-&RW#-mul>=5Khut@)=;H
+%XK:s5(>SeWPNH98*#T>%`TpXkJgRrkbSDBI<qS0$;P*NXKFM+c'?$'j*bQt!gt&"\`tA9!HVY%ZaP&PUU39.X-:[>!1utNN=Al15
+%(D8E/C4P@"eTnMG2#A*#'+&*c6@@1O#H&FamP5CfWC4qU&!>^(bjC3J#CrQ`]_f[.>PjZ)@tGjno7im(-^gD\WIT^I7XrRCKYBk=
+%ql*ShrM6%6q#tS.H)YWi%/Z;QD<o/9n21sRPZS%tJV-Q=J,LZ]du10UKl[+3CN&Jr)&]S90UmH#0+,7lQt\;`+DlcTh\3snm(q37
+%Dn]t_]qq7'rJIY=mp[i(k8u8(m</NmfVM)iF\7snDg_dCiU^74$W9W(iK&2GXh7:jD0Jp>*LEu$UJ(Yj]Ya!@?gu9c4)j7=n(`k0
+%G_`T9GnLHJG*#XW01W?D=\)mUM=(%ns6i+Qh/[lR`468T&;,qUW$]L6M9JiYc=u#.[N78r)F<dHMpkH&RF$/C!89g>hf/20ge:T9
+%f$!]Q*Wd^@JD,O>S>M&T2UbR)^1a9mcS at nOeO$Lf<^hT[:O64GTCKaaML7PLgqdCu>e=VAPT+"MlN6F:oLM4$hYU4["UP?oq6?De
+%b"egIq&S5>Z;:=u$n(h([eD4P9&n4LMq3TXH#Jpfl,#&@nLMNDQ,!pRU>V!$7pL(rRJ^p#\m%fgDk`;<#`i1pc;(lc,0R)Oa,JNa
+%8)H/b27]cb2snN/8VV!rOXLL4(4/cs6)(3\]O9'iEGJmD5*l%H0<g4Y'+kJlHK-)&aftTMB^'s_#t[i%LQTM]^'qdF_<@Etn<PNo
+%r[=o&@=G-`&Eho5fEq%p2uPX8?j#T+&ecNdp_B[hp8c7Z]G`(4(oXh.,ZK`ciJHK#cr4 at n[@OJ<9'n*pd.$\YeSQlLH+g*idSTMi
+%,2PnYDrh22,d^ZD0nRF9D^,EiTEs;J`2f\2fI*=QJ<4O3Yj7gLGC0!S`94e3o$Y\'iccG3(NS at Fgk8]U;s.gD($67ZVF8*EY`b3`
+%e*BP at 4_?=VW)Js[RDCeL6+WnHS9edPVJFrGZP;/F"ADI\!\a:cH:Fi61,,=pT]`K6\[GL;67+9E*Wb.)6RdVhI4$a`>\XuF@$G'W
+%U7%/]O;_<+-*^q+)LigjWR_Ee,O7tW6N#S8dILCN9'Y$[c`$TsIWmPPeS.*er4XUD9`i%,o\DG1nq?2P^k@)ob'tcdmnOXtm'*Jd
+%Eu8*Ok48bj-SZhHrMj at FbA28(cK)@uWB=DPa^$pWa`R#\IVO<gc9trk0!kO^;B4J>_eV\@7C><MD<:UY!'3K8KUtmCB"M/p"_&bV
+%D!XbYEpW+^*LZGm.cJEII1ONl0.jg/V^e^4A:dD_g/6/BTQ]Va4B0uN0i0ZQa*BA-8IbOOc^U81X2F-S\%gJtFdRbEB4Yl"P5tpm
+%"LVDS9r&WLG&t6gK9qhu&8 at e=q(h?]F$C2b$!On^`aHMF4pHArP"1b"&hgW=HIA4L_Y!iSH"2]l01qs?StTHMp[5u_!<0V at jfs@B
+%bpPZZSWq*3YnZflb^NJ,4]TkNcSL&B3=,7L6I,=S=CiZ2l5+JQhiF at lS7TB3Q4JTGn)-KZpd3TB,.?!fDB@]Se3QO0i-n at aq9`TA
+%fiFu$_?k[Qgc?"M3h)]<L4l&oXR<=r[^Ddg_]Hk!hP]<e[?:/-EP/^Ji[rFEJJ)"(CXNbcNa1tNe')q53'.2]M3s43pELAs"h4_?
+%2qiB&1hN3qO*Z+hWZ at mKcHej.TrN*JFAbJJ9<BE3ArHH,\V/so^.f:?kj(P-FaHru=q8bLh.r-cm5eO'2J4ID2TFF,H-a[*r]4h$
+%kFmR7GHk(%40RRTEi^O2&7KQK)R6Dm/-pHi"S3%ojMKj324,o!qe\jgkQNu57#QWF[N&kIPC.ZQ=.\rAe0HUhd- at n>k9giT'tR?@
+%4^<^LQ1k8=1<5h$9V-*j@%!W'I:mQCC2up[YUJG!9smuiA["Gr.\H!AHYLgg+b$gt%.))t0-0,dSeMtTQ*b/uAu>c]2I8D)a]2Z]
+%^c)YBUb`;-gsinYG:Y4XoLROS5b8\"I?WuCV,U**$4_C3b_aOKqSom^gB2bcG7A%?C[]j)nda9\-d;nY"OWeV0li-I8R!,9+Rq at P
+%+P<,$aW!dgff at I&30)U<^1ra:^*jZV,WHeQ8g:"_=RtfVi=I?]Ab?!(M<GS7#KKE:8.4$Kf6Ok<iB*6[%jXci?<A8^p4@([&^%!X
+%_0MZCLk;;N67ss2/o`p at cQ8HpJb6e5b>anl5%,erQC&`nZpPP5_/K.FH'I3`HV66oD]!pLYiZ7sp"l[WSrS!0b87D3X$J,=EA9o@
+%CI:U/;)iJ>B,5qAM,mF?G6$oZTo9&Y!ZfNX\'jg-Q]8Yu6MojQH2>>XH\J1E0:Ns;JEfD8r-s2#[7%nK:b9S/EnX95Tg-Ik^;0@]
+%?(r1C][I5QW#Vu.e9T!+bX>%:Uu(;(Q,nr"F]\i]F:\Rl:(Zu7HP4X'JGT,)Y!1/(:6gXb)2Q?_gA at H3cqf+O20K&A30nLNVdu+:
+%OFL$_R:Z=P54T0"c>EEu1G_Rr,rkQ^q8n0>N[_^pqW>+e2JG%;-PtO"Nnp7VGph^fR%]MmeRD1[>7O=@XC#na+VTE%,.&B"OBHj:
+%pU_.jO4UT!(t-sXO$cdNMB!?+UtW/QVhJ=gYgGagK)uQ5:H0i%Cg3+LGSO(#Sm-A[;M$ZE9A^Jj.aajXaZ#U"&p,+H_Y5^.mhDle
+%;G&nt&Fu]*o&]Z0[[X at T^1Z<bH4fq$bl9's]SWV=*%O6o$OfGkJm.\YE2K`(9:JHIZi*NSZj$ST9AM"c(oR9fcQIo&qt4I03?=:G
+%s0t<fm0'sR[fZ<T!piWf-\n4WGCjH(8E)?ZD[T1a)]3HlJ!,=jRMdM`;`\J+,ukmYBW;oI*9VTN&\h'<:'F9fpDEhVD.\nt.^.cu
+%m.OgZI3aR<qXK\FTlPDfPg42emX",&2S.2m[B#l.11[,lTd8WnnKfpR$ZMc3Yi;P&RCW)NV12OOo/6)\PBCr-cp\^c/rH=6!9g:g
+%e(])?1t$7-mS>,tcTJ?WTof=!5tPs[3YaZ"K(!?tF^O=-/]C1Ccn^^S&5rjf/"%akFsi\lNuYK7l<38qVd at LhoLhAhS(.kc4d at 3n
+%cD?i[(`soo"GLqtqDHN<:dK^RBu at Yi";\-)\(Y&(a- at n,&o,"kOLkC\[@J;ekkFC=S?6a,+S#!1\fFAX`EWj6S+f8o?iXUmS(@',
+%crGpeDe+'IrRS"7>h>mdae&kYf51u]<4(7^/q']!M<dhe\LBKJ9TGq+c:RT&%\;T2-uI52c1T7/R80YR1NG76hjO_:qdHdp]L]Mo
+%/DiJ,J)HT&57VX6n-U7+7YasO0O!?2MueS!S"9'+8M6!kJAt``oVjIbH(_Nj&>hVaC.Gh/*i5=#4Hf9f;NIs3Kj^AjKKMB1BoBpM
+%g$kCA9liu!Rm)8@'Z7p+!ChUh8,DMHntf3:\Sp3$?'(d;Q&,Rc]#93S_:X55P7R#OCU('a:<^4s-j>/(VsXK=S$LLW\YjKB]2Qd3
+%$[P5/P^o*nQ93riC-K)6qkmjpId<]l1P3nIEbOXCM8*is/fB7+'hQ/7"n'em'EVH:e*"dR`J/!RS*B`"hrZOlIOb.:3DP7FBt%@q
+%PFmgNe]$$MW4Q'X$#ChN5;7M+5k%Sd8M*MHoqepP4dtQ?%s8*C#Em>,(q1:ai=/p>(Qb/pJT%3soGGoHGkcmqe`GNHId6PI(i9"+
+%3M+8E"i2u`"9Qbto&Shb at ou;@9ce/n-2E26P.0u at aHF%u1W[VTeAp9BFtT7r98\gbJNt8S&-Ku at KX3%ElejH^0&a((@Pb^d$/-h)
+%a=*mFcOh*$ImdX[@kqnicgVSclQP+V&)<aV*r2kYQ at N]P#>Hl/(H(JIs3M'G2DWN#Y+G*f&ci>;d0X0`_`5\cfa&csjNj=Ll*R76
+%Ti-h5_('j4P?L*e,U0\ZD6 at L78]1pZfSrq`g?,8<$f1`%lC!juc5"O1DWm\DT\R47^hPFp%Lg5OeRj<!Sh,V0H.,G)[$[I at SSlSB
+%Lbnh&9FWE`)#%8Xf<*,rhjKO*\"4QO<,L;<@#$>"mNMT.Mkc-sB[V+$[Rt)qbB-B at .?]Y\9>,RS-18^REpcuG];$^+jPf0tEr>'h
+%6W*-iM7g(mpKU#Wi45-mHf`M#8qnIiP+q/.WZeo7Cg#n`c14k7[ZP+?B#7^Y]&oT$\_bi<CjAGqM'Y1Se\4%/oTi;cYXW(eVgE)P
+%'_:J;7_iuV[:;rN7`o`-N'\"Q at HnsVp!T/eWQsJ`3AL"Eb\(e5Xo2!UIr$TuCfAXL^8([q93'?-#ZdN4W7_+jY\?jl"k,dD1.NW-
+%mi`iD$pQ\40`UatGGbI-O-2BCTPi-J75ds)H&jO78IB7H1nKo<2XtK&X'O3:JeldD#b/KXQ at 6p*hLT<&T_Gl/S:C*L-YD_ZkCn(o
+%&^,bLR at D?Yo6QNY;S%:XEGD`N8-f_M=HCs%3LdQa58Ho$[;I2RY[(/>8<d3raB&JG:]?P.99+XjBED*RqRMG-dj4,**Qp*3aNU9[
+%[FoHQT:B]Q8.`6S<Tf=lb>S3_)5fUa`87q%C#;,HBKfqdBi0.WF^o,bW\3>ieS`r0T^CZtG_2b.!cH?mhpBM^LJArBA0):r!#9&&
+%9>DPal-?ca#5q8#DSH`*B>'pQJ)las+qf/o:jk'3F8I'23[l@/2K4>4X=^jX>PXm!V^qk[;mSRSc?>!kGRE%K`CB?F;OsGe"\mkG
+%$$f3R+^I4606!K#coO%+%!)i8+&hfKMAW5%'m\,[`>%)pW[IOa0!HLB-[G+q8En.\aWkA#s4*9B('%.]J?N;(Z`m*J#N5G/;ZX1j
+%X[u.]-*YGH+c3t[(m;]a!OWoH^p^'1h$folCZC<A&fK at 6,_LmcjUr!m=Ua/dGeR- at mF&:PJ*TC1oYAX3aZ])4Vmh%d)JV at QWL]%'
+%P-9&6$JoE\B[X"uLN7J+MdAW]`B9</N>A9Peg at m<gEcS4lLkpa:G*b%pQXK%jqRJ1*KGh'rbZmSEr<2q7<)tjRN9.u2';:j0b)L^
+%RcRN]$$[^CD;BdrcQG4?Q*f"mcO$0iY9`r[bW[ksi:(X4Q]%KZ;(IOK(3C1N^(GiiR at Z2N*7Rm;UnH[D.H^k at G3\k`-Kmh0.3"VD
+%6hUb$%NG/9/+6"RF]T=lk"IlJJDiW4C+F:I?&^;bBat]E^0`,l#r;_$;DY,aQle-7KWacpIIHd*2k'U=At<TaB/qR=-Rt\$oZPWt
+%4#`)`\PaNUplW35D,><0W!TW\SEjtO8u]Aj=gto&AG?>hkdWdf:+:(ID+iXo/8WSdWG29C#nn.M]l0O%*,E+nJ\tGsSO:MUig*,Y
+%f^-&?`'RsB,C<$<A-?\CdeB;f:*pTt*>U=4C$^<GhAbCA+8iB;0E$Y[`MDS#f8C'Re,5mKin3ADkN<n"h,INTp8L_UbF>ubE6\?.
+%/@Lc*?f#Q"%Hd-uJ<A36GYBd8L=Pk83lq2u>foe_APQOUm9:31Jma0W8kj<BG'(lq=a*5GfPHA,BA/Pac9^4uf%\$=6tJLrP5:"_
+%2p%Hf1L=$^6;A[+)QZ_5c2Lr;"\mRNguGgA<#VQOOGs at ISrLC+E_p5HAb#6<]tX.U2c?[-[%]_J&DoHYe'0;=^,"h#O57aR7!):F
+%q)GbC'Q7/j[XSq]K67iQKg at b@!JRDC>g#,]<bl+k'9SfD4p]j.;glY\GG<*SSk6%T%K1U:!@lh&AR0<=_*fFuc`Z at .e]PH3ho_=+
+%n%:r<]$)n=grso[If,cnT+'SuN=GRiC(:X[5g/WNPS*`33GR>D*H+N')$5r)8ba2p?Hg=<Q#hojJV$&.E0oZ=Wnb9GC''&l'(1E=
+%"sKHjIL?'7]"*f=PpD3-.go5F,o1,C,!QS6S#j6)Vbok$QJestQ](!":<-FV$M/dhP*0c_[foZ+-ROLT)oYrSoVD;@)0hh#YKP7L
+%6S=\i1t^6Fmd]Cf-o:0YEthLn-jio#OurkK2pJV>/:)#T/@p*e!uHCVV[*J;oo, at mH@g<:8>!?RW=C&6i5;>74fcn7flhglRT]Sa
+%!Y.IYXS#^XJ',WXqFQZ,Q+\f.KQg&eS=86WI at 2r-VI`nSib=[le<pr"U<\'Y\X^UrTV<.UW>>&O4q1JF9A+c9BDpu[@/iA=.4;?l
+%j at n>eccOK31,k1!>-^R(,TD%>L55&R"U$o,_5C%5:*riK7RQHN9UJo*KT0Vi+Xtc at M<hXB at WtTJ5Vp=/?'u-*%$3APGm^W+ at Db@V
+%l-Q0.2>]m0')AkpSQChNaUlWUQVGTK^4C<P9j4^KZVQG:25,'aCs#Sa><:R6\!>j6s''C`SqIK&I!309;s;sf+=G0W&%B.smuJ=N
+%BFeG=SjV<@09h(tq9\c_*pu[!/Z#=,[??K\,Zg.72$L\XCiX?iG1n9iBpLHpT%<N8!]P.NW<5)^:._f!_hm^.pWRS5=!0A>Isp3s
+%8Te^h9,-U4kmH3ThX_=/8mYN3E[&AL-Q\H//UGkJ%tN%p9Z]):Nb?n6iNebS_>=@"@%,j,.9gN)W_UjTnK*pqpV`-jr[`*i.;]3i
+%[;QP?P#>4s/P/9>3**X>8Qi?H'n97nBciG$.'JInOt-KVT2^Y1iMb'WbkA.qk(@V2NgIe.<Q`:+Ed\;VqP57`/Y-cWg/"Hsm_tPS
+%fb5^qPF"Q6+R$eabfr#fC(CNS at F(L-#O;d71`/A7i(hA!C)*\fCMpJO1_$?(1>WotoPoU#+-RSs34Zh8c at _!)M$i!CBK3gS+)5=X
+%2265C:$cC4I<m$n9g_9l1c=eXI/W.'KN13A!@E&f\)(-m$#3Y7$S)Sn@[`VY5G\:/=X)#T44!s?Zp%g23L*gOfVanj9L at n%bWiN.
+%&i>\kosr6p14P/:6j.b="JgErr3nZ:OkhDu,u0N-XEKk3H;Xc7[7RP"*o&WNnN"(;N>:f.CZ7Jq.*tu?F6Y](8;aZ<G=f)omEDMN
+%C3B[fC\?IR:[<KhJ^;-"B<q_5^H(0ZmAZ]\11dUO5E`:\3bLr8HcZkACLqd<o]@4\pf!(bc^tLj62NUoQk/JQE)q$o#NLA_rOge@
+%),LQ^Gb$?8Ckbh(1B9C[@*Kr6N'RsoT+P$>Pb7V7c"W;u83oHZ<MW%@P$9Tq:tTO;]@mU#Cm$9UfRh+R6]X[8b7e0D$IQ5D2hR4p
+%!`CDMEaEDo>:9Bl*:eN*c@\JBj8ZoLb*[-D8sjKUH1+8dG(l0G-lIi#S]D]uZ&A`8(m]*EF(%&c+0esf>ams/n$6UAO@/3,?V*[F
+%&^Q\M:\$JkopY6O]nMC31_NB"'Ps#(Q`iaP^Ylii='CL+ZT. at +V]L+cVbHp8i8]4aSm,-#c=D!VFIoiWCe*Q/>^8]EhH%Ya<$"?<
+%=OD%>eoiAHV6%+:e*R/,0Xq+$CBtm"P(;5S3f*CJ9^$cHeg'`r^RtYaQe\"A>`Re#Y6APY.1;8\P'kP,7DCG/o3;gdc6CHG$`E0#
+%JUn"g-5$`bok[9=UF(e`4?:+q4*pt\O9\KeE<Ys!XLpc7(6>@&Js7)/b-0qPCY^T0?AKtB[n:X7m)`$&^:Cn=CV5_oUq+5&CF(9U
+%;i=R1\gt!XiahW%6.`hGZLt_/+sb6PC-pusCDmSliaio<L[:@gPS:PC>+IZ\[d23QEk"opLtYSCj370$<;IlG1BGn*rg5pTN*'@[
+%#)CjP`jiS*N'To.Pmm.NM2^/%0%/\3Q#E6qCZQo%@pb)4V:_3oR)73;S!i^Pj4ornOM$n?J]IfHYD6\ko12`VnYA*Vqf80qU+*Pj
+%]bP(^WMZ<Qm;9d.^StoO7T.)PH3:puf;Vr],;N[i>2Gh<m2b]fEeSlI at HQ77Po4WumX?Fe\l\t_\PtlWIi\5t)r^'\&r3<.Jn$E%
+%cWs.BA98T+Qufr.Y,%s/8iJ46)uW0OVYTtk]J$jtpVV[F9/.2uIjWM>M%(f>-NJSCo?N#X*la,0o at ZlaE9l/fUQ,IM-ZGm(SI1=Z
+%YrM4C4\*#S&l0(Ymo]]+\F)2nnYg%Y&Z!&C6SAdi!GFQ,adi6PenEC(C-fQnOZ?[E]MUHPGB1Wa,#Kf("sQh=0+bTf at WUu:b$8h#
+%_%0?/Za%L>1$'HrV&Y(WZ1h"YUg.o21<=$tR%1RD2h+pkFX>_-14'OF9>\upa>]m%Mi-<YX%`;H4`gqYCchKqr=2l8!BQS/SGi;5
+%pcoNnJm[hCV+B6M':D(H'4tN'=o2]M(UQPjOY$0:^DHnnmpo?WTao[)7Es(heL6_empI]5Ijkp\od#U_CMG_E)\g'43QWP_=6!Z)
+%bH/0q.WZ5GHBL*+0,qWZA.Ze^e(WUb]RAsPc^N9Y%a at U&i_+[EgUo+*=dXU4[QR)dSNp-^11"ffT%hMRD`rRh_t5^TZX7LIAFK-=
+%;5s-Yb2jn_VV-e.D`P'EJgR,'?+P*q]:O5hJ#i;nQ=%u6:)Z2)qWkt93aSf]NaY);Pa1<!4t%"V`Fn"%bg2S>9Y#.U1i>eS9S(UF
+%>"U'ZKccn-Ea"FAn4\51e4KZk16];K)'mU*CY.Jr)Lr.E3N?%R'!KJ8=HI5tW__]sI`.dj>AP#6<3P%gjg<_YL(:r1'-=!(V,0E6
+%#P+#GBimf"eQF8L90HL$B+;PU!C:8T;LKU.p>he94D3i8NB9l4\g=@uNYr(Y]k]>LZ;!p+0a3HbWO#DId'BkcqrQ80:S at S>)1s;F
+%_Bg!AV1*.cN^ZAIhh!qHQDN+`!'X1>0JUASf]m+(SeReA9Luqt?9B<(rl$VNR=KNu/B!?t(et-EhX3,Za.2'O!Xn69b-%XjT6t(3
+%be=UBj:$eF<=bO`kSqOVH(:*([c>A&=K)WS=>,);eY[Y]X0!a"nDg2@\^?O8)JbR<Gt`7V5iiYPK"RI3P=GG4+K%\JW]*O<^^b)1
+%>fYo+KSF-uH'92Sh\p;?iX at H(Fp$]hhitsoIBQ<#!-]P;5o.VaZ7hL1<65i^K"6mFYq;eq.9$!gl&)[oM,]Z7ds<8>:LgBW.sH5j
+%6WPCkjJ[\"LbpFsh<7\iY]>%$C8c5tK"4h.Bta/<1GfA$jH#.'WQU_M]4fCN)<>+-@^6Q5"Es6uXi5/YQ0-HYL?.VHj!4dbL9?AJ
+%$V-tC9M,ZZ0#,'T/I+<q/F[Bd+%O%ac4Y-Q`JmTr94C\m)7budr)Y)sQ[HeV)KS'6#H*hZ+0cgn*gYF`^R#)"%h[5M3g4j[f!mV$
+%#pj52[qj\)U_:;&`NP?X3'`kJ1'sUNSe"<YAW^*i^Q*\3g$B0p]l.q"dc7#gqG#*7hBE8_Br3T+"oO<;Xun,nj='V-pR^`(^[n4m
+%SeI)XP=S]*o5)q<n"i3RM98YISm*eg(Rg6IB+/2n-&6D7VDq]!.3&/gLmQIW0Ph69lV"73C4;7ZZ<P;Uco0IW3`YF\^'PY3\Sb[D
+%c8:ViW'r\H]pgmb`EN03.^+%q)t>$eY, at Y"QPoud)[Q8_J=D0:s2"7E;^Y*qE7bT_=kf1cV?+A5nHf[iI]JG/PcT;5S2JnP5s$5O
+%LunSIC at ++&kbYB&`=GG:$'nq))Op///)BP]#*sJ)XlbgIE2/MH>$rdclg*cQ\!E7k?NR5(H6#74!=M(s,hhf!m+i at k*tS at Bd[qWA
+%CYLiLY08eHE:l;72/BHY'?ll5//O\]!8Xhi/e)Ti,g-=GDtGk-r_q>E;mKQdB_RR@<n4.kh:D4-_FTqQ0:KE=_Hun+pm\=`H"d"Z
+%2aPX'T-QpRq^hbUjKFd[;qKneQ=`QuUQ*joVb>;-goN)mqpdi/1gTp(%)$b<5C(S\"_(s?NSW</@a/IW,KFc-H3gBW at i9[";+,!c
+%OJ!WPOcS&WjhG%<\TfH/8l=?-.dU0mefMgE37Ab5#Q*5%VVZhA4@^m)U18m_3\!\7(gYW(r;Cb6O21X)m5]*2(c_d:V/5;aBX6\4
+%I"S'31r8RtE,J$OBHRhjDYLcI6qj_0=/S$3P)YJi1u"#sS8-KS5F_inp0QrKqur9gf\]F/6h8HVJt%m+IZI+d?$"7'U%Vl3Ni4Pe
+%g=sO'5(Q^o=-k*DGL&[uXB<U=A)+peZpSn_SYAM6c,kLYgmT>tcD+%;dX(M#J;Q56%sns=3-&AJ=LjF:/YI;YX`i:?;j&^&Zu3Q%
+%bO.E\`GB2fe]CaUEmAl5Bh'LrF&kpFk1)NKaW/@Q]\_*Hkg)[,F<2_>k"eceVgXn0.!]PKeYN0I);V_+Tj7W+m%<s;P]l)f9W^!?
+%QA*obrM,BPnJ.3FhSApB-bWDfd>tP,a"BJ_4.qF(oc3O/T=rU8,W&[ua-BD'D9Q6!I\bmYmumr6//*6^OGrPhU%re6GB)^]U,;9%
+%KSqso,'08V_5X[3QNBQ5NB.2<1afXg5q,TC7IWQHqQ+c4P2C24f^R$bX[*`U<$]4$ml]^m#KKk8>Rtr2bh7IP1<j at G!qu`B4:.:2
+%]/hCI"O#`L.2U`;i3N&JW5iVVVNsW at -Y#;<IqtP!p-,4iS5"*PEWP]%p=6p5eGX@/?0".CYt]='8W+5%8@!P$#^<<cr#].6$W(=a
+%0>H+DK88&t^-!9Tp7W15\07TObk:S'be2`E%C^QJ2ZIJ3Um,^P%5'V6&6M-C0/8C2)lLu>K%'[pi6BYlMO#BQ5O$P*[7dF`[->]D
+%D/OANL1obs<D*JK1`cln2Vc-P#[eGp!'2kaC@,_<iq?;D^A<1MBX?i<EpBDJZE3tMYC(q%p_j8<EX at r\Ml$+\Dks3lWqP!F at P5OG
+%L<!J6R+E8u6&KR:l(=10;7=T[9fC+Ma=#L.9FU$?<o0Gt,7Dkb6YF8?%f:r^]+_(`a7>S at bNM@^Fo2o#oq6Lrhe12VDd;acD9_dF
+%1?+II;,j\kS%Gk2)0^]h:A_rT8WhC%a-[5+L[t4GR+W^L%CC#2362$X4(rT/Aof,/Qs8N at l6P32W9Uf9_Z1uq>$#Y&n5sB8&^[/=
+%)2E at O"ne9G\Cld:8`;/lkV'+j\[ge--EJa/h\KsA.9cnFfGH!O,[0XbIOelEb=UK6UEp#VI!sPNXDMhBbi.""m-5\l2O<]Q[j1!:
+%5+\fi>.Wclhdb:OYcj2h487qGj-5ds)H(*>P.lQm;?bs7QN7g_6VOO!]XpeqhGT0[>jjFla6phZi=PU$o'KE<OXDZG8]AP!-6^#s
+%6.UchOPKG3XVqb+ at DMN^''KI\P0n3#H:(t)H3RhZqD]p-^HHCDjnB?*:2Dp>=6)=POpO*!HQaY)5CVX at 6<PXlY[Pi]%L7;s7#t9O
+%9R",cL,E//\VT:9A!QM;5S?WFd3NT">mu)+7ot'!TtLt%fb2@([q at k;bn?dY]8KC%O0l=jHd3#6mS5q(9f/Q3Q%JAtNQnnMn5cc-
+%P%bJ#lKJ0.<4B3-d!8$ADP8Xs:g]WDk@>2j+q&cH9+o.n[1[]\etedG\A7%8i2qp9LjG>m7/k]X at V&68S)\s=`jYbJ*b16m;5VQD
+%oGg3"<`P4Fp%Zi*RPqnf75NMbS'XWdi[$%DMEc7Wro?9Tk;7uWW>1t_cH8_.OO(_[m-.-13+VOOqb=77R^j_G9'XQWUYV'%m^LGP
+%qHOM2^6NnG&eo2;r-8C-Uo"!H<;Cdn9;,6%KLM27[FuYB:4`Jb0qj*/[I.(IU\?Wg!V.+RK;>_an.fVb>W$X6I0Ki6"BaZ0<eU(X
+%l\=2*YX>d,U#H4N&qo%X(*>P5D]A/5>]j#pnG>6;,uT2h9]2\/J at I9F<17N$J'Y;0k7)sd>Q<Fnm5Eh(A+-ijWJt^<=`2N\F^I'+
+%5,)PDGc at l]MSDM/LFl"-m[9`i#cHRG0N.GSalbr]Q96hg[EfOmUi;MRjXC`+Ob7ra&3O)]n!<R]\LAnSe_!1?>Y\G4nj%W\4;U"Z
+%J)8)7)@"?W>jMG<i_F?_)m7*$j\%Zai(jA at F#M'qTBL>L5HZp#s!GPB!!\%N`jlDGZo9,A,(qd^l$:==Vgd=]81_gg9>1^Kc1>P4
+%PI`a4o:Qh`i[Nc,j<L1lX^?$(-%4Z%^a%/:BtBEu'",8']Il"$[7':k;LDW"d;iVLP;G]qmQPl\Sep3LN8FJIb&Gm/jEjQ49'.I4
+%'bi#sZ$Fc?T>/(M6aBM?b394O2Yk(:$1u?=]HWef,/(#S45XOYQR$UWD`Jm"jM2StNROq=dggY>o`gDEiid7E8\-j3I-'1TbOL_7
+%V(8VTQ`k($@D/4iJ`aB@@sNW1k]?D0:%R\t&N+XT\`A7Rs-^.6c+)&WdJC at lZZCFI+U/:n:5\D8Ubl9rQGhA"[d]aV+"4$Y.2lrM
+%!/:D;[ToQo[oJnJ`,G)#5WO+4Y'n#UY)=Uk2)XEV"%kd;ojT;(<?U&*O`;M`p<J4BfiCK0dK3t^hZuE[Y!LuBdI9^^f/;:9$rkI.
+%'%r,0&*i0M:CcN`Ks1\(%u\AYqg3p!:'fl.j6fZ*HV`^0&gk!4>OpjG$kmGr)O.Mbm<P!hnbH`FJ0#ZOHg3L^"-&[nEn%__8H8*D
+%`Aioj2je,cQGA.b`ik`VcXLs'Z0O4Om)_i+=``[7__hT5H-S/+!>$f64>%On9S6K3?I]=['2L'ZDZMOfm^0'_LR!chVXo/u at Z<$@
+%BB$+K\s*N;jt%Bk_mui2kW;O0T4)NAA4D,4OYJg<B,U0$/96p!6JcVTBX6:5!'^'@[4QaiDtiDJ-]5D!2tch^E]Z(62(&X^Y-$Kb
+%&1?Tia\'Q&%j\AngSZZ'!-g9$(&!WQ!?#NCGVgaUTh7TCIMV!0dqY29M3d<bHg[*.IbGb$ASYhde)\SARZ;($ljNV4][=`4/E^[l
+%?/FYtG.qHJ?QfJA\6%Tr5%!5f;JjQo9]0\2UjaU+1X`-Uh at XH.=>rpD^l!,mp9Qnni`697c-tifGM[(C1J6\E)cioOS;_SF?_Dh9
+%(`i8<)He%^Kgf]j-ZqlR4o(JCHGA@&pRrVXG0NJ2glK,*_uO=m3](Y6$gB+Xc@^Z/4sgkb1\`N-!EW40-23?4Ydot2$@Y#aOE_q3
+%7g^B84QGn'-%8Tf7+A"l-t;TroZ<"bYW\0EF7iG<V^go^03)1>rRBs</BA:%f3AFc`;d':T]7"'jrFcM&s9Yd_DN(3eV.P:j\@Ls
+%nqP&t._-*k$pJr*6BAIW.9NK3khiONhKf&&o$eVhSQBRb'PY+(=O;, at Z5X?;QJac.&eX#b1Rei%_W4hgRrdM7^A5g.qbiAI+1Q^W
+%#G!D1,3^N5CU7Z2dJk@]jfRmg+]u-6#UJk48CtM/[i[qBBr%.H"1,q5B`M'm'#;RUHP_NlS9CW$IVPl!)qKooi2ZuK("_&M+)_N+
+%IFH'e+_Rs7.7(j.8:k7u-SKE']8JY.`C$*2U`&C/%)s#(Ps3$Mj'E?G]=]:jfk5du=t1c<)Ys8]71QBQ]09SufTG42`@nDM8WKg-
+%+u'B$UtG9#2TED<`8 at i*[K/%gDDo(]FQ0Hap;UY_JPVJXR*f'dlen17h"IXI_Ah"DBVjrl/GW<OOXsgqG7+A-G^(SR-U1Ls1'jSS
+%H<6T3+%kU[dNXKgj:*m7?)jdk(mdGUAZsIP+5`QC&UJsb760XU\MZZFn4-W,H;t$n;_^s=3G3Z/Y&4K-s7Xj8h=Pp2mn"!kBVZqF
+%V4\utnF5I!o9F5%-G47hJn:V1OfOhkIUCL90pm4rV)V!.6Yt]9<qPRZEi-LfCh at Th#pa=?]@l<p>W[nsWDU.#N9>"U6X:BY#5:pM
+%<fT:fXBYf)fqJ),l4A(4\<c&T=I[%W*%0RB?O-NB^9%,V<$/*I>6m!j8ZH[-JGRHB at H.NXq"p8ZKtDN."`eJ:QPdDu)rL4KqN:LK
+%[kaH&Lqkc at +gH;LH$en#?>D(%.LqlkS=Z\?D_3GNp>^8LmqH]Z0^krkoG=B1N\0$_cad$!YWHRf)>W3DRW<5&Sa;RUaY*Id$W\&k
+%H#m\\;QA3^c^e at N[TnPa#RLOZ](3sAlVtX at Ih2&+F,:[U%/IC6<8VIbn?W:6OS_3##HVAkP(Q;$,o*DhR?I*HMU*_be&H\SPHOfk
+%E8;&eKDDZ-$.:FndWXo`'4$t$[ZlkMMu8tGH.cV?/'h2-BH>`9I%9/L5=h]/8B.*E;_VU)Vi.EQrF;_8J'Een"/KkLb+p-BWY$YK
+%#?d4dl";(52Zb4Aqt1la.Ih0TlIKZ4SF$!A]W^@N9ZY;5*qruZ at WEn4Jl-_Tk@5u!Bq:i[oJI]@<#k:O;ZLQ7OYn;//?GC at YUQJ)
+%#VTnbTjnl*5eb[b?Yf`HDi at QH*:>?9o[0Z':Q;7,^4K;:aEfHH$;2lES=R2n]b=s16k`>X#"F&Gd#SB+NaV.nQgt_p@>\ehC.&TT
+%"f^6%/I at CQR2lZ7f;hZh:\krs=i^jal5dS70pG4t[pf;="%](t#ZZU,;KhF)VNSD>4a7&DG^?\bE*>A;<Kf at qg2jr$MA%a=ou:fm
+%k[^87f-&Bc0-E2(!%+t.q6eUPC8U*_^nd*^il3m#[B:rP7k=LGA9lMDMedX#]e9pjh,CK(L)@S*?@43fYI9n0-0q3.5l%!CVKogB
+%R=BJc-](d,;AkWRAte[%F)06bOD)drcXMa%gd8S_\$JXH(n!.hmN,Gm,Xn)gju/B!CF*3VhOCc>JDZYtp`U41kYsH3-k26*/5,-[
+%@'(FcNREIClnlr0]3K.XI23%O[=!_L,Zkp"\''^p[8Ec((8S7tLo+G:D%Y]L]KFU5]CTu>l\q/tD#S39\4]CZ7e_+?,MOtL6q\Oc
+%hs^q#aNZaJ!@]p)h4M9W0:0(&-UKc"d"<KIBBlm1'XNMEn[IBs3.KEO6(,t\Ql>#:8>+kN1JcQL-!qh#H13^6%hh1=MGpTB;#%!>
+%%NP>>oMe>ST`c'u2AWBoMt.u3A[PfIMsQs$i]2BRQMY^mQ@/Y1[!\cbP[@JW?I[NMiI@&SG]5r$.?HdFNAOA<atYe]L6'uL(Vt,`
+%$.GTtVnml74rqsij%Y[@9&6_&fp?3pD&t\,?=d4!(TY"5_/!*!PHW8F3cQZ-%Ukc\p;U-KSL-Ri`&nWt"dEp9fU->PPMeo^W4a%m
+%+ZS]3H2OVmFH5g-#_C24//Z`Vd<t&:>VM%S6M#)p77#+pq[]MS+-E'eJH!YR(P0XFrn*f at -p0]uSTRM4VV4!Y:OEkur^Krq<ih`.
+%&mcl-*UrgUm9]E at 2lk*g3B!R:EDUkjKN$3d7:rj8[Pd*uo3-G]#V5eU,VV<m3-6Z3IF397.+ADjn8(Z#:(04/8Qma6ED-(!'MkT7
+%h9e=ZD:s$I>#2PmkC2G.Y[3GMJ,1*i-UBgGaHC_][>@gpM0]OS"NIDH1O-lfFl%#j`jX7)\l7^nb\o)NYQ2sc%B`<d;-sl"F1<dT
+%NlF1<=8'uq:N>s^F,*QsgBpoCm2::@b]/['%h=qs!cS3"MsWW4rU[3Dk%BOn4jeXoPNig?3HSE\Mf#dM`h?!obSS%Ji4=H\>]E?Y
+%Q$Po_D82EOp!jr7Z@]G#cJC#EQ=WlbJRJ?7j8ZOJd6<pC,b#!:fp50pP3B2<aoET/f:ilISQf$=@r(R=CWG8#Z^&Zdo\GU9gX;7n
+%;t/q?,ZLHe,Z>8dc=>\q4%DL,)NI,]1ZaW4s,r.L()q(\BMr^:H=*T3>QQlZP-YRds%mUd:sf@@Pj0Q+h$5`W0eDGljbFq^:2dal
+%kEOYTK>12NBXGupn[oVDD]^tf>@Sq]A&d6f>]T/EQP^6u>*;j13n-qsD$.h:h7VntfXUN\2*sa&aPBU=q'4oP?t!pWTAZ36o148!
+%X73-<PLuHlJA6<l$!:Q=b[boBjkH8L;`IK7c_",cOI`+_,UaN+#1SR#I(nMgDq-[.fVj;_NuZEu'hDH[!XdpeJfc58`Ki*4?&BS7
+%:Pi^`]_5:oISYtR;I=nABB,Sj*8 at +a@MmHcS>U2mSJQ_%0Ka33D(DbWrm0M9<5,'(oM35ij[4(S3,le/D\A\MT(^87&)G6)EJ3L(
+%^`P'_Ld_%TiZS#$AUNE<]7qJ++;e3kA*5!=8E2dMq:68Wme6R]Bk=T;[%];um8IR'\E1MQ[b[8. at Vu+=B at p*&EfdVoAU^"Z`2$O+
+%/3e0N@!taG?<p/S99PE,21YtPo<M^e^8WFrCnLHAR_M[)[512?Ssp36Ep&%/ET2h]o;\T9O]Nte9Iu`)BRQ!>;*,GoE\SJIFp]88
+%T4Q0f5E%bA-h7WXfU#i^Q7o]iQf.XY/+7YcPFYWF"dS-]EW.BY3%TY:A\JbAQs#uZ:miZf/b&V-WuE:E0)-^>k=XZ7M7S))LmOPp
+%Q"!7)lV0QF'1.>*Ej&8F^2WG*)a5\H=QVN?d?8bZQ*+ at j46&C?V:6d6Q at kBQ\0[5NKHQ8<g:)2o`fPsgct.\$L.F-6F_kABP!CDf
+%N;QWVR;K\<I-f/rrV1Zq&&ZGeI<6/sWSMP$ngH'#*mgGR2:<)#d*3q/!k$L]d?Vg$?Y;IsB).W4GaRdP(lkSUVgSFehZT90i.7t*
+%RS9f0n4C+fq<%Bd$bjpBT7O+IDbTAm.tOduFpeX$7,p#!ma@\<k'&3A%T_:_?*@m9e<;3qqDkMV066j0#(`>U]"-1Jc,e`9[dhPY
+%TB8="']4SKe;Mq5dB&koYIbXKJ"4t9:[Nin>l`J^DQ]@.%S-LBkMLMqZVI3h[Nm[2`dnj"aCS#T_g6 at b9`(oK)QW"YM3NmcWPu7k
+%g_,apf6oZ?/W!<7H-5G7LLj:-^W8b!Cnl$KoY6Rn`Wm\'>:X at 2k@'s at l$3`TAGIr:JOqud[EnR.4`]*>HnYBi)`:,6'p"r"gMC%I
+%>dDD7__$V&;qk!qVP'DG3*jJifQDmCS^i!L`MQ6a at a[]j#>G7]Dq+3`PH6B)a`_cr*&%jAB4#:/aPBSJI8BRYT/D9mqTCmmZ9S-h
+%1m$IVqRJOBJGFX\VS1nqRhXpSjb2'77WQ$Y35rispcO'uX')pZ,1lQ\moFS6/^N]q^Mg`cZ.[IOV)g"4UCQSpi@^\Rh[$oK&3`j_
+%kB*9ClqE40<IJbBVH!P2`Pc5?YkPhS_Pr4np$glj^^&*eQ3V3#XF"J,G*D/'j%+U[Yn:*KaC"ki:Tp\D<AB3^XKglT-U,k9d at 4`M
+%.[iX3@\'(]j.IgP")=72,_YQ+[>@&_7V<-D1Qa0-EkNa1IUBi9=*YnW+RSJUKkKu`<i2V;F9W23IMYomLQo2d0Iuc8/F#r2ML,$m
+%jHm((BSbLQXhh!CM,Ect2d>nQi*@]4kFpiMjom&G5=Z'7[8aKIp:T0/mo8<&f_>*dP-_&IRY&t21[KFWX))#I/,'4Zrm#"]^qni>
+%9TG$Ci(0;-\BbO.8XUJh>NB1>IGZR\ITlk+Q, at ZHA2"N?KkY9#r$]"u!Y#s5kJ^(A%d at p*H<?*T7OiG`%q0'PJfe1:XiVAR-+g(F
+%j4;RbJJ!G**4)V;E0tsW(2[?<.fgkCk/o8<la"lagha]BL+XhO#p)*Xq,=cLkBSE6Eq at _R%P$&*n%nkPKDuoj5UkVV/Mmst(R&6t
+%o9O at j=Gt.Y$IhV[:LX(X%?h at tk/2#bj7S_\9/AF#.aaMkbY;@.'<)W1/`.MMD59#`+H>XMB/ZsP124&r="6)FC!FaB:O<jY.`kr5
+%6s4"&Iq#Y.[&_-Aa$B'4(Qni!$i++c`]Z?@,[HOScsGjJk0C=>c'ds?P*7g(J#P^r]El"L(djEe\>Y;HRcYKt#bBG<ZK+Mb8+i6_
+%]7%L5Q7Z#$,fQR:#_#@$jiSXW%!o:nk#A-*EU;!$<5ab3l$Y?J#XSsT]f1:iZsc0Hr3T?$bS!(c9Y:*I/g[Zrr(T?JYu"/,`C_3;
+%SK]ghck8`*72d4X]dM_5Gc+gCB9TPSV`s^4EsDh at OfNP+1TJaNC"94%MU&2C?-)9FqhC*;>#j=F$f8]abE'c_XZ9.PjtOS)#BBb8
+%dqn)>@N#1;N^_fK(.i&Yk)b?u_TD^iT5)oiUbG=>bIODEh!GN`2Wb[SXsrPYnNB=XS);(eUho)rn#_[4V*&0*6YDL`)69<dhqF=g
+%9eA7 at mqd5,(>1XVR^6cuS;?].hUHQqf64<2b@@o>iR!`Eq>$n.@[3I>E)?QtIP8%G([nn/8PKGHG_&lcc!VI!j33X(l3IH[43\J4
+%2KsJRq%qPj/=;t7Z0ur;LnFJI>RgBhTtH2XZ?F,X*e>\$e\AXY>3G/R6VVaY9_P?3SJ=-NXqBG[!@*,ojL!MfNVUA3PiS^0][<aQ
+%h<[Gja1O\]G<^\%5Ln('1pg=Y]WuJ1.:g+$GEuV&:L-ta=As)`;4!cQ7iiA3_H6/@*!>hI+2b.[duh_fq_!$;h7`'2E(UVi3iMg#
+%W`Y?87'@p9l"oL&1T#S!P8m@/qE]Tq%#o<#XunJnG2)&Xjae(m3`n>O2g-oSK!'kHn]lbt$E;C&ag73b%?Zs0P!k*'E7Xa';o$^j
+%(5)F^G+(J at _#'Y:<L2%AqMbJ3g4VP+mN>d"4"]V&J^TDa&b0lE\l7qY(DG.8cm9d:PgAI$XDs>K2s$WZ$i?mW1#!'hNb^gf0$e7l
+%ms_/P4X6OdR39)2WT-GG58$W[+fC:@.jt!=S+%^r59/Ui*8_RaHB;Q%dGi3R&->"rG,EXNWUg138^OB:g at BW3I!9HWJ`SmG#"-V'
+%\6<]u-FQ,F</62a!JP<BK?c/&Oc"_o<GiGjQ`4jDpj&;=D)6a6Zr9!hi2=jFDcYFI5%#<a8mE=4e1:"Tj8,39O\,%hGs7.F/W&UL
+%#(7c at m7[]_7R+Q?F!i=/n[AIH!Y(o&HJLLF!I5Rd;AZCHp_5$!BD_"C1rNU1dZVEhB>`#*,ug at knCZlX]RJ"!bCrj;5PEs9f8_,e
+%dX9pPs2,mC"\?F.V-h(a_Y#7`=r7]F%7-gk%o=Z24?Pa3Lrpo?,W!&IM#?`5ID4#N%l7.Q^:XnEV9C42fp;sTF0fH?AntP?"")u1
+%P[u&,569Uj25hDWd4]Yj76;i=<X3rm\lt?3*X'(oH>TsEG4aK at .pk;;KWdQ"%3fmiH:7l:[nha]>^;J5#(3lGZUQAG_\<qhAJ8m!
+%V.dd#Bb*<)T*kn@>Kl!8WH4F`migHR&[>"R<DXACN5<dt2,?$1(W2NF-<nuF,RRog*j"M@>Ac2A..YtQhO,;R+J2Yn-n@#N2h"]g
+%PuNU=Gd&d]!u4p,R4HV'N`T%rnW]<'>K4X%DA*doDm at F9MFZL(E(1dj/d71J%ir?#(_\n7:Jh>=D,.m1MLe9QT?T"]=C^ra5n]jm
+%O9GX;SD7`_N8;W0\M>3laT.K'/4_t&_n$YW(Ee at B_T7I8QVH2s.URctr%Zu-/$,P*gs7`),"VJa#]R]3a`JjN>ZUa<UEeTXF:mfA
+%dnFEf\I.KN1>A<5C/smn0b;1)2.h[j$9M_G:2iaZ#98.M6/)mZ3j>3?HF88op:;<G6:Y/g"IZAme`io@[3q!5"\cA/Am="lk0RF7
+%]+)i%bt5K_V?Gc>b06ikj*>n?i3JA,28[P2q at nsJPkhcGo8IfA"k^sM_'#(5DK[KE/]48MFGnACas`be`#]cHVQ>YKE!sCd4*Wak
+%.d*el%G:eH&*m=j-YY*/P:nC`1q[Z+h;H^EOYN at d%b0PW41:OG8t2i!'#K:WN_(gf*24b%m[bbKSAW4X&Y1H;OfH&&:=RB1d%mYq
+%D$?)]h5P_;'`5pg;.V$*#StI:fkeY#>]/ncMq_ at MERn6p9?pJ*7Ymt6TIQn[:9hX"1sXYuV&#hsqJ*@,[em&]AS:EFEs<.]9)RB>
+%^WnR777h<bZZ\L`b[b9Kg4Hu*2EjYETs%"1[$]^Me3rfM]<b$dJJX9Wn$QLD at S,fp4nV^Sak.LYWU+:sK at qLEh(C(EK=1)HlHG6,
+%Cs5mJpV=`.7<a@<KB9PAbX,c-$lVRk3N5l?p.4oQQ)W?Momfuj)_A=t>`O;q\[9Q`FR'L$qgg/<P226oZ at TMie5poZgRmnD,J`oR
+%;Ih1_]DO'ClKbC]%9XjII`a$Gf'5$$?Ah3uJ1\JUaJc8#'R88d?f[ZZP##TU4ZYa4lr]5k#T.sjYluSfjm"*"(F+ia$U]qdDI;K3
+%5^os-KD\9j:HNENCm1ph`RDUHgEAT.*<-=[6T[K_,Z(gmX(Y^4diU&n#arb`-%_aOlS<]arcLf1F=\4,Y/uD at 4X?_L%bU7_H(J-l
+%'=LPZ</<L?qmRSl8i54RD2XMHd.V=uA3a2WoSV[Xl_L\?PAWNR=a*Hl<I42!f?&>X.[_4ZisBg:]B>0l6 at s_DW:MGML[<q?;lN0Y
+%;T-4n:V*(o/X&_.p7][?5(G77Qh:O!Y4\6\BX>t[p2eFRj("!FggI7m=n/a1^rRPTLg;5i4*]3Ir=Pd#^@Z(=,Yf&9eZG/q=(Tf#
+%i]HMU-BpN0;s`W-;fFFIVeO?E4P!M,d8G^fF."V>TrKO-fmrI7QcJa;iAPl'HG`b'A/EQ7p.pR$Za8Pq9#tc<HCCS^:b2AV@\90P
+%X((C^6(Ch[,7c`Ho9$ht,6UeILI at pJCKc!@Am"$0OlE3_K at 4[91#oZr]L[rY&spH?.mO;?@;D;<npV8`M/bMjcg:-*VU.I/i0Um_
+%C^0;j+6Jl0#:YqdEF=#ZI&P:441E4!)%Lp6Su`sK%N5At\0^=./e?P.$98mFPTcB.`nC;7a0JEd34E$EQZ,Ge;drICF<+1#4fcgD
+%*[OiPbN39r*k9G;Jti;rYE&qT7`4f/CpQ7\I?p at ZdqU@o='0tFONWYnU1]O4Z:/gR1,-jQQ.52Y[[UNFXe\>9m8ub^eF0_pC/Y:T
+%%V[aW%"ipPGRCG-A9X/>8q!8`?$%%\W];5CNN(i8ARo"-=uah'kZ&ZH-+(54g^GhgMd>Zb4g"XI at eZE]I(1fj=8@*FXCY"UUh#D6
+%'\rMoA$t'S4]rMh3MR%u]8bIrdm.ONfr_=Y+>'s!;)\Kf12YYNBpRb3P+!,`6KXtD4>6B^Gt^Iao%PYklT/0hI4ENo at W3GU;Bc+n
+%8tMc[aWL_0ZL3lnfV.."b?F9J2Bc=!]M at LITGEGH_':!fGSm.`@2hs1PM4;EkjY7g8Wfj:h at -'/kAee7b<AGgO;MEH%`l>b6TNO\
+%C0<)3<^Un.\+g*dau.PC$9$cN5-N8sc!`HgY2':'/P:9?Sa*O?HQIFS\fr(\2Kq5^Su`:jR^tm2&O%IClZ.<\<lk`Le:cG:8%iW>
+%6.&I$1Idhhc^mc3J4ND9Jg;<74ACuh@^Wg"3T0$>L>5g(5s<QkpJh3q.[shK3h:jO*7=KKeIIkE-lQ3hZ@[sG><Ge at IQ2i?ah":P
+%&d?I!a?SA#pQ24S.DEJdjHI at uPP0PdP*)<O3[4qW+d-qXW;%>Q at I)3L at m]MuZ3:Eh]@.Kr;]lr3\RFj_dG+Ir*[=#3ZbYb6EqP#8
+%St%i[S)0=XT.I[/'NIU3-Rm9"R^+n""X$5!Mu_:O;LM/Tdn!+p\XiRP%]Z,17RFok'X:fs!1n!Vo!'e<:r'(F]@X`XG"4`t+,\/Y
+%(Ve(D:dJ(&L5s7 at e[aF:Yi;W9H/mI+8-qECg""Ti"$g(EEZY'$594oc'K^D9%*SHIm;qai'bgal[#M+h(q&ni4ups.-UcjC6&3#5
+%=fu39Z4q3M:F_U2E;$P3WRGmZne)8:0M]Th\P#e`e at +ePF&I5*`umtu6gXNhm:s*)!0;hM+fNA>c/Ma/[E at a:O%\;R\ZW'dWkh!`
+%)%Y+5FuY4kn#(pF`!t(N_ga!7.Za`NfX;9LP+GknnDZoZS3`_!9+jn7UKa`X$dacq7-?S,;.ME=ABq/"5/ZfKhLR4 at J1_5O]Hnn0
+%Bu`;87k-?6ZHSh>eQKtdWmcQhRW%$"gV]<hE*!5$"8BXE)!"!Ri>DjI`R[$N`_$:OJZeQX8iq5F.[/A7?gRbnh2$.hMt&?cLJNMN
+%n=$3cA%%ULm at 2.uZ4V!&CFgfR%R$?Q9k4*m1PmdFmMnOSb!VWHU6AsS<-M7I?C=9JmbYr/TD+SSibfrJ at cMLk<8/kh:MlF$;O+='
+%3,K=7Rto66KMJA7.]5h_Gju>'opblJTMCN2/">mRKQjilpK=9nOumu+F.F[g%bl7Mg&]_l3'0,(lRF*_;\V=/n*IBm0rQkV*C:g9
+%Z5$-XP;3=5jjI#(Ga"+e0HG"T')8XSA95"so'-n7loY;2*M/q%72>P at 9,2D$Vg]4ZXf0BY!'hM>diEU?]:\B%3W_58Gbe]4ht%\.
+%`ue>VMJ8^i at 6Kks;q2Gp)B<]"Y!q9>,g_]mY9Z6:3VS[JJH_AK8@$$GpfVUn4mg:d7)k,YPrf,!Co=D0!T9eiPK='m?%YRhNu^cX
+%p7&`m:%iu*D^@sKbM9RN=g1.V+qmNo*IP:b*n7+0B:!ak7GDZB:9.jSZNQj6qqgHTDC,0f&K]0NlUHnNok[\@Ol1^L<O-+<;lKg#
+%X]ZE")*!KnA:.;GW6mtK_E@]3H]_cY)s7n?^Nc0Xc<5a;-%8?3<KW_]CXsL0B6,\!c:$nEJIl*.Bq1\C%$GXIok'-T!5Xl*3ltlL
+%O__oP7hpS-4.>5:05B1AG*HMYeeDQLB:?"$&NCi at PAoW/$$L0?EHj=2:'i.9PZ20pds!1,(<`o>jPkjjl<,u>fMXme1.q!F[Z9?G
+%SdmK;]H!._NTE0uMcGC/H'%N at lr#d&YkMT4Qit-J)G-.$DHeCCKQs^qSo4kYe\aA&-QYMG@`Ek\k!gP:,)5.\>^6n)9/Bs-.GL2%
+%?>DE9Qbg][Ua4i2<ns$`6;EcV.nXNRmimHj<YO<$bmqr/;`rj$Mc[2\-S%@G\*M(kXAbH@'cCt,(r<)B;nWlh;\LpMcqNOK/5I.0
+%i#SGq?elASO@#@8%O[/,i"qfr-T%FX":p)!6[E2S-UjX0:[BShbcQf\fWd.<6B"/h^a8Mu2^dDNDa('B\#2%$.RkZe;-8,dJ27Wj
+%&QQhJncTU)XIKWBJU<ghk8pKuD870Iota]0U39#__$ba'7nduuAG=l=ctcj:j.W"hjCkm"Fb9-KQXOYfKKAq(?5NDbp<`.t3YqTm
+%(%Jei]-2aACcNqB7;^L%FlL]ciB=N1UPa((<c7Vc%ss.73Cp>Zr=[-sWi`%rn,s%6*#Qu(@O)dC"7&h-=eMeg.=YaIRYOqU'`3[N
+%=34(7USb%6a+qS!70*u,B=>(,Ab+P7Kj:P6^dcUIlu^KE"k]e)4hgcm]1::=JLj<%g=WG+&=\j:AL%%^W)ik:*b2Dp>7g'@Hn"s/
+%F2n7rZ^YEFk2B;-;cV7h;qSp+X1BC5q+\l+ at I\s!@Kg1VSl=V!S_:sLUt3S7<qU1$P`hO">M;7%oi0i&P0L]^7_7?"ZI/b2g`"qm
+%Te_!P!Pce6\'JP5LPtpinf_flRXjc at g"Ce?N_LOqWMTcL#"I>kmE>V\f-JXDCkt00r=QA>,bZCV\Zg4E238rrNRpVm2_=BK,tN=r
+%1,kQ3RD:>"F.+#E;`_3_Ff*^'j2J`XWHgY,=.L%UaYiNc10/ua<U^Dd_6+C>O at bp)@#*"&$aH:VBZWLZ$iGNX5]!eQeXZ4=.P61#
+%g"U430\GHnAW`dY+6lBVJ>l9ScW`=&C4io(h*E<h!CtLRF'e3(E26>P+W5MNBXD]C8!]l\,eMBDY,Wk2]3\7(g<FltP\8$NY%kFs
+%B)n8rSCB$+Q$0inZ`mb]=,LYha0*uPS!+9/2NKFN'k7WF?*ij]>ie3$HSKpZlLn^d!_3m'DXR^$:JM_rqKD\e)gFu]@6$Z"0_`jR
+%=n"+BJD)`IieD;U@%q/ZOuk6HX`C[FAd10k\EtkB7Hl58`eC+K-JC$5n46Y\E66f(j^QEI.:D?uh9;U(QPH&`"CJ$<fdZS/.l%_1
+%.LSHnU#CL%1-uenhP3MrF*,FSKq/ZFS+1(\:,O\ZSWh&M+nFh?[5sA=YTX)pCJXN<m]O\[J63iH,eIcdAo[,fJ>FLKN at Z"2PS3>g
+%,[bgnqNdYg*/*@A2M-+7&"u#/R`JmBK[@aGf^pl084)93aXR6Zn3d:=BuRO#Tk=K<NCfQfR9M$d"om[DWR!3;FR@:#F,6%P=BT_*
+%)])--%;]Kfm)9m$D.AcVj`7Fh8%$u:7eV!6_D-:R;[[F_T[H3tX&VHAfcZMjg/$e.Noo>k`#8.3-k]]b>KER="\IPCI*RL^S$FWW
+%qrO1a2^3Qkc<uu]OJh6*SbYX]AW67F8MdL&-LdS`[G#PgP:p3&WbgWV:VdL^k:YO^[k'j.Pg[OR3./>pcQUI:$1i;,rN\7>Z#r[2
+%%L'q)ql;;P+ at XgtS9Z3^Jgk<E.4f%'.mB!;d#P!JGniMdRf^LY_ at 3Q0pSJB*93dX.^K!@SGBT.uR96`#J9&Is&er0Rfi+Cf!GIUq
+%c*8-HRT]QAl-JV8!)bd+((F14i:/A-nDFqFi<#J]ZT(Cum_T.0KJO008.LSLR3BVT7^rHh`(ScDe0`r/=?MAi,ujT34eJdWbeZ\.
+%0('F$WO&ttg;-Zbfib1FEbV'+eUTHd^q``V*9iF7M9V'Dp;k>@:oEq3ammG;C8#]Lc,qB^jE[^sN<^e<G83u#2 at cu1[]BmiI'HN^
+%$c3"-<iSm3Rr=ca1"(H83BgmgXY+fRHXZU#Ki4Ue!8q9Y>O33RVYLCp36ABrh(RsG8\NU\]@:BZk;h51bc;7#a-?b7fWg%5n508u
+%Ia#'o^2;\<3.enm%??7s#b=se4*S5b'j,D1U!H"eWKYV1[8eZ5*7lF:OE:sPDJ5LP03(2R2iaWDOtr3h<U%ksah3cO&3QkVb=FSh
+%Pap+cVo6 at D71<=.Fg_WM'.aEcZ8ppb\O8>UED##0Cm/;!ib=#2WAMn6CJ+NW"4hP]*hABG=jc4R8,s,71o8Q?9S(58/N:Bff'[et
+%;<.;eJdd3KFdSBI>N^AR!"e>PS-n5$e>S0nZ at .*&>]!LA/b#oIQfNLuCe;!ur4u<[H"81:c\nmgF.+[_m3#NfB&:i#g3P>h?qmX7
+%bK7&k^`Bh0-b]-e*7QDe3sU*Ej$%7YQ(0CP2tCE'O#U^I<*2Tk[ok1^i7o0on#bta(9aQV,-Qj0b at 0?2K4Rg>o<p$<Z(qk<iS!n'
+%i7$js:RH9t2(9+BOO_SA5KFmd]#[q%CN6EaQn=;Ag/!(?q<e]u4+X9`0br at X[L3n$F40QBI2RE4Ci4%>[lhnGcFT9HCdeU2S1DKd
+%Q!(u76UGDSbG$s-?T;krP!fR4qM:,bn44T\C>TOnS`[#3Q#]blb9P!")g`[WQ!(mcp at V,UDj$pO];i at 2.*Wt.3ZB,'f\u]Gab8p"
+%*!jH=\T=7odnS5JijnBF^RXKFpd/0elkoiS&jFpA8sn%\KTqtc9IA>N0ORn='_3h8 at 4;`^4DCBD?k+[g.=s>ZD%[!n+Z-$"5\.4D
+%5fb)\=!QJk>SWNZ^#0!gi<We0*82&@o:]hbQCP$*WtD04;-1sj>D/JeLBD(2G5:!;9:(!JYr>XY7:j4"=7rW8]n&:Kaa.2AN[>EU
+%!Lo8>iCfVS#XEg^2rSsQQr7tIiYG=+DT[Pk4LXeD<hT(7FjF6Sd\jZqTKfSthko&f"s+n+3<%)>lr3*D_AocmTY(]%A9sj?T?c"!
+%js4f34o3Dj>0!5/$;ca)Yl-KXgT!1^;aN+ZNAR.'EE8[-8_qt=0R.V5)3Q0&FtV*.EJj<kHH:Rr'VCrMQKDZ-O,1h%b-J)&gC6P,
+%-kXZcmF`be!"`HpS/jO$=Xu&(A,5HMOKFVi.E`+^4k+^:-`uAdl03^ani!EUTJ0u>-V+lUbAje.Lfl4I5:)Sca]4HW:Y at Is!g(je
+%1lJ*rjhk%u"stt$.rfOeE3*_s$2^:"hW1]*KDeZLDjg;/3AE>qM7%/1BV+Q(Rou^6o6cbZUs?Q2UfEe@]!80#q7)YN*Z`9V<RfXf
+%-FKTr_Ou\50t,=mI(jWF#c8E7J8fa5,nM";B;O2)p8g1"4t3G$J">kI[W:Adjb9mT..$#'IFdF[:YpH8FQJ4<!%X/LnU0[h5<O8#
+%#U<-`WTG$Z8eGf)_Y!ncJ10`Zk<@stH-k)HSj-^fX0%UsUbW-`i*FW)^)?")DU at es#htQu7]h\693e:H&4gQkK%2/gCis-N/Q7eE
+%-dkGX>Ze'BM=YbW)Rc6#%f'bj;*<$EOKBueYZRs1m?gVjGFgQi4/bU-fr!hmO50OU;Eh<RP9q3`^.Nk4S:@odE%qDPHm]G`-qC/D
+%-qo1Z[-,o6%qi1SdQ9L1#9G+LQ'u>_0S1sC5h9GI at U$*MLR"rcGc%`'&%3K#ZSIg<CV_XRRrHWW2'2?OeiRD7[QX?4(qBTENfM3j
+%!750'pJlOO"<pjU9WH&aYt^8Pd'aP9$"@+BMJ\iH$he7+Sr7psI#V:5:FoRH,e]-44jdVG<4:PlbX,>lpn5Oil=krm-[X\aGm)K)
+%#um[?oa?&?EAAqUmQF.K3MbC6@=reih<(qDL1;mC7De])3tZHn(7!l2CaAn9VhoqUTjYREXmH9j6rRDea3U$:ga,Hrm'qkSf^-Li
+%&jh`*WNpPhT^:(^OF/9&]%!RH$cNl964SIc$,T./OKJG\'XqsB:.s`C(NMJ=]0rsHd22%YL`SqdgsbN7c[JKq0WZn+DM%U&IWfa^
+%ZVC8tCfAV"ncVB[k34SaRN#e\%O>h-dQ*[%mPhbQG/]Y:)mMPOD*bWKj?h-d/DNO=Hs'$,c,.:%j*g"iZn%8HU1fI=8F>K$T$s)^
+%PIsie9/AcD<@#+U".1GsB4i5ENfkMEZW)2aNb at B,E<^"_TG19Z4[\9CS/[YIi)Bqk5E`?%[XelJ)5UWO>&u*Xp^o,/j>M\%NDEPL
+%X[kNS+[ZRmp`SI6ZGPP1?+6ekm5\T"J6`X=X3%MbPOVP6G;ddW<r'l-,3lIBfhO1^k!6pFMR:dK^A`DbSnI<eYX(Lr*?+9LAOg&B
+%qEXP at YT87?Ha74OBUZcR:4Hg#HPHFJb%$?HQ>S)krT,$;,/HY<U]_BY">uQJF!_.:UXFLjj^AIi.uCUjATjT27CLBZ=5.n at Dj%rr
+%d]sFkhJ?4RK;rAR$nQaJjb8;:1.;VR1Y_8l$C3N7\Z.`'dqk0?BN)S#+dhZ&&MKN#G_RDhJ;8cD9'Om.:o1]G^TD<^*[47[\2?H_
+%EI)IZe(iPDmCLhc-iC'lO.2HK>oP]!%pZXYR<sl6;t!`#H$kk4:AFLn&'9;UGPT$e>)F-I=tb:6Ybe=+5\N`bZs<<a!)4Y</>)H3
+%#Rd:P\W?-G at r:`ie\P)8jXu7eGr3h3mXRZdk\7F;h]LR0DoU6Z;RCu"D>,\q=:PQdU]]i+[O%q"%*Xg?@[V';96%srG5<4S[Fp6U
+%m0^TD2&FB,6c.'q*8B,:@e(qmZ8K(Hs-IeNFj*\@09U[e"n'jG^g4*TE+<p],-'biS8#;M-.i50`XRQdC3t#p?;3JP&:iCoQ3;0h
+%I1Fe&D'fnNh(o-(YEc3JZ<8^&@@_1K`f]0f95pK'=EVG#3<gsAVF-/AiPpJlM;[T+=B$C\I55bC*OOjO2O-<FFP>[`<!tgj;l?Bk
+%OCieZ#.P/#\7DVW:p$>Igni7l%!>oBUG_PU;<4Xs$(CoD.*s2iB<pW4NmSiu%G(WTia&8^c^EAP'VlGN;<@(WmR;Z:40#WMA%,/A
+%:ruJW8$1F"d9#Mrh%Ne3"$+7dEMNqW#N0/$Tq8OIFAtsj9%k/ecN4+jdQp;.ATjfpl8_?+fZ"f%,%ki#72a>;F^]1?qdJfHYgaEm
+%OI0<`XRP3(NZs_4!n%Z9+IV?MR8;rHfrp<$rV/L:_/7_OEK=tFBs*J#*Si&$e^&e7?05F#2aI9`2,,!&OQt8GiTc5SS7#V0^dWik
+%knQ<"?EC,4;bbBH6PbaU:g4Q.>BF)F[j8&Hrho&Oi at KD=]W.NUpU2JTh-<mL.Aoa6T[KF6bI_ltl[dL6N2p&%^Z7sm*Euf?(!g]T
+%,R+8pP4a!f1<6rp*5c=Q--WTSDETru82b6"Q1T1;eiR$m*0"3&IgCX^/C`C<+P=2BSu]6n3$cUGUPTUd/mau`ZYq`&aH31l?l/_F
+%2%[jQELWsFn"+ER/$Pni"ESU8/Rj)]]r2U:;=1O6,HrGb+Xj2HoP;M at UfD%Lg(Q%gK=nL+<;)tPKQ>jVC15ETZUrdW/N!1%NI+d*
+%6YSe:*5Y=j1QV/j8<98:Z/iugV,l$X";Vi(_=_#G.rs=d]YOe:4?b(g>;d!sj>PY]A&8i(2J:-'=n#.c=Q`nK,i&m58g+IV^h2hR
+%.Z3=<-q-K%QjDJ=:d*L>g5oShAHsH[@eW&C8\3E/,e`%s\HgiMMTX'k*[=cqd6-F<m#=)GPGFGYFg?.h:2K at +gaKp/M?VY%bH7QW
+%P*MMpAE2#?T-8LB7/GsnX_R.LRI)8>S'>;AHjJ47^()@aA.La.01U!8=Ugr6<Nq[!@b=044HCcV,lH6NA]G(?,[7:\DAUGolOeRi
+%Z"F>.G2$;$Y8-PrV;?,?eMpN:,^8=D[_mRDT^(";bHWY.__*t=_T0)V*NW_4/=k'$bP^S"eM7g(8U3A=.o*RN1u9d"3Y_"pbg%E!
+%Z75c34C7'#M1+$m8 at +b=4dsR8Xq@`\4&j)7`bd:Tcnp>o4`r!:'+=;OKWd(N'Dj)[QO'IoK?kdtTej1C;/Q"k1%qs6/0r/RX?m+V
+%;Mo]+5GDsodPs6#jL0pZLe\s];s,?EEZS+=EBj/:425u7I="Pe5Uh5=CNDrL3-aaI,R/YnUpX9bW_/Ar,PGqAat!Wk#Y6(0WP+J-
+%qSV>RM/S"j9K9:e;>J`l=0ROna\-g!A%dNp%6 at Fta?J4OGX_>]%b)X:eV9\ZV5KFX;9]Qh51HYZ"^E\E[6Vu]F;&VkdPkBm4A$b'
+%-DX5FjD63R#p71!S^?u(hbigt7\+4jY at 7$#`mFXChb>kaESdM-pIr:os(>uIPK[Ob._#_q9iK3Ja'dHVA3G`ZZ98Vq10"e9AoBps
+%qE at R7kG\`"c]4W9c;MS@)I^sk'fH[iF"!O`d0b8BPY(`)<Hkc11RlLmK_D;K"Le#-3>AfiQL&HK[ccOS5m`7q28ZeXFWQ;eJ3s*G
+%a3IYGW4"6Z^H<O7(ojWQdT6pt\[fZuf<+=4>s5]!KLl(u'f*#&9X)9JT(W.f]biig6)%:!]@_fTXf2>02UsDA at EN:g#g9L-pYY't
+%/iEhmUM7#%kfEmfYtE8Ak&FLBcU:#80cLdMk1[-F8^)sS[jb=VDoor=-o#lU&Ss\>jM%'#ohC>#/gK-!>Er`+.5^`S3Fg/();'C/
+%$B\=<:h>eS96G;s7ZAf4j_MY.m)CM1?Au*6#739reAMX.MRb"Hfa5j>7R_:_A.VX>lV_8<T.G@[RSCbemhU>\m-K/:oBqt3oep+C
+%#1So$.<pnpAAj>ODOjO_`6C<)A.Ja%:MH,p3350FXLOh`]4)EUkgoK9O5B.8,W+3[]%QJ]WLh0t>&poe6ACaPs#kSImAo at jLQZ2g
+%K1cZ at h'<j$\7iMOfX.6'=d?jT[O-D>CK0&a^/la\B$$4;5)`\>5Vr[oPMT(pQ::DGUU82o?V%F^<>GdO<!`cRmM=6``AT("GPYI[
+%MT?MZCHZ*1_'WTr[1fu0NXS<B#`sO]''55cSdlF4BR.^<A7)(RMs;KY/>E2XO0e/F-mRedM?8[_!=)NXHonGbJF?GElYXPiK(_*N
+%Mq2!rDO!@UV9t`C3Gt"HF2))m+imWe<a=!X!fI`.Ti\Ze7R`VtA!uDB:6DdY`*M58Ke-4j7'W:tG<VRYQ<(;]PP+7+'@*KICR_DC
+%1+fiJo35bu)L=P,.2705"NokP9X>s!g/\5:;/gOjE/\>D9tCcq.FfS<")ZpqcA4D#]0kMsbX#lSTAiGqC$OF>"6ZtSDs^:)!sV%3
+%hE`G?E$=/n6^=u9qlPY6DN\E/D`k,Y'o?%gCVFa\k$YOn,c)A_8N(oNGnTL39X\J7mk:0G>#n<g$<f&d"tUfqX'UQ,U3i'UZqAP1
+%YQ]d+EAgYJlI[AJ-f[ZsmmXP*9D4H9mX=HFW_^.W:onAn?Mm9C)m%NQ!KN/7l;Ma1i14D at A<So.EL?p-B$6WGV#p<598UJ[?I%N_
+%+(79(bTQig?:GY8/o`>90sV*!.!\FF0^jeP+VFl,b*/&=;U)B@,Zu#hk';gg8bjZb,OMN5[5G8dPJPJ_2;GLjE'3;_h.;KY]<fe]
+%iOk;:'W6#/@QAE$\Z!Y`"BLri<#\W\p=k%f]>Gk at KMb]K*8 at b^^as<Can'>@k2[r^7(I[*=QPRV!*HNFOAM/1ie0m*mFSDKe$:8W
+%q:$`DKlE\.WJEa6%jm4h4OT=^dKE;oAlHYpY^=(D`H45=Z1.qp26M7,.F1pHU8I2sXdGLb*UbGtZMdIESW\]'?]J29#JLI1=4ngq
+%o[9TpnSqgi@\P)f2jnlHcCWMFmanD.?(a&Q>=ndh&dPeCIprd[b68P'Z*)!IAUTnVo<Xra<OFed\5!?WG at gZm(`a#rJ_3Wrn0/MG
+%IVt%U31?^rVhL5M"(4<o(oEGu%I7RQ7WMCJ.3M,r&ic%/'a<\AbN/=,U.[CtXI`ZNFu!)%JS\ahPGH.U8u7o,eWr6h=@FuMdZU,\
+%gBBjLA![`U<R4_3'W2;*W?*O67c:95AK.c,=imGf79]K*@WUu4GT6TMn?sofe[Bq*(EHbYAhMUg..E#9Is1Xe>*<\-,+;*V@[gn0
+%^QFaX1',K8bd$Oa;+#Hc!^b\4S!T4te`-*M_;QkK;jYY+K]ZB(Zl/:n!DnqB=\u6Zb at N%+8P%!?gI].TZ%W(qFlMlQ7$&+_jO4*B
+%)/Z5K/&atkB/tjETfZRa($QV`FMP^rkd0=\@_n4OJ-RNcPS at 5O[- at bqa[)A at _^Y=/hF_Y??:d0P-;q6&$^r37KLr=)K$Ab.D[q"8
+%B at GN,3'<XRlq88'ld:Yu-*D6`ikb#lP1!s1b73="="+D+q7eN;,g?eIR<b#W',E4ns,E!na)(-EQ?F7OX:d[!B1nojF)anPk`V/A
+%16m*m$f\Id2To_@\*s.3Pq;-:`"g2'(t"-R4mUZDb$n':-d?A.%^Eru,bMM:H1g+&*98&j?l9jE3Pg#1c`Qa0(a=6Vo!2;-fUJs,
+%0kqq$NACs!ibE1c<DHYK1Bb/4Y<2Q_WqVk9'+4AX^/s[I4g%*-GIuRH\KYF_]6Qj:B\p"6RC(cCA.(3&fUFX3=".$*F*1)7YRi]t
+%/e5q]dk!3T@?N3`KGX?Ib(OAtLN=0a3mE=[@]Q+P\uN(3 at hjaY-?ZtV("0J47Fj:6n4'e678Z,M16\QBSpC+tFYe9]\%-)JjXQ<d
+%OH^^2$#1WZ-l?IM9Z:@OJ*c](5Wrk9m&Z]JRg1rmZ>+2Ya*IVGM&&[4Xpi=0"^F<9.8>45NERW51Aer[/j6O\L746m00>Ee3b8a0
+%(+MIe9=(3S40ngch$$N2dF?[%,H4O>mBeCP at s4$8Z=edLG at A]UC\(ur!8!$:=8lg4Gs-D27+#-,Sk5C''<j$39t5!m,M#G at a><Og
+%bbh==Gp.<IM&p3Al8"Wo_kYUF@<5A&Ca:RQVnIahWm<[6M_Q`IQpdatESdW>OaV`7&@pdWat;83ZCB?*GEuj!h$))3YE(Y'4ror*
+%i)<kN\f0HDA-=)=PZgYaXDTp]YVH\OcUNNBBqOd#.??>gP3hPFlN/nG^ZPY;`cGZ\VitZkQ8)p/^s at PR4IE10(6Y,X\-Vnn:\i$&
+%'YQ-)2mc*BEGFh-Q]i`^(o]ZholdCiq#^!XK#uUt&$^q7b@(r-faX_bHQ+c&GBG55m>CLD_)(a\1sg9G!t855"0f(&/u"``if*J2
+%`#bDbWgD2=de_&\iEYFnd07T>"nHB:o^8$2ekS'&VM%lpPH>7CQIU3d;\2(]gL;P)ECb8.D3hr<]1'\K)fN4qeW`4a;qmdH at E)H3
+%<[5u54VS096r?J0%Zg-1d(;@O5t]lA3B>WE4D047nMK$q#7mh4"m9VY--clX5"8J`.\tT2QqB7s'fL]SCfWIYNB#$7H;R4:r^1Bb
+%<\'Em;'PODXn/Ko;iXa;)r*Z`WL\4C!a?tTOH:A>^^&W69)=sXniBU$GA/5$Z]Tid/)56aSg4kKU>.ufM+-0Bf>tO*8T;?'9b*bd
+%F8!+$T'oXe=PTU!W977U4nLM+'9`o>+fh/5!J!+?bfJG-XB"Y6=81;BQ]q):EW_K at eZpb*`D4acg1[C>iYk(QSki@#CIrrbb#QhH
+%'riSO><Kc5c)OHk?k%76A40IC&^7?[rFl`8l="<"EH)U[L<W9AdJ0OOF:;[#rjER]fgMG*J9lg]b/N=MU'+dS8n4>j)EK.V\>2?1
+%3m26p8Wl*Ak-5X`J>:4YSXB"d(!'dK_6,W[g*0rgRV*c'6<,,gg_CMNdEA-/fV4R_>b7gU.6I?&Q?<s6Q((#:b''`aSH^O+Co;Zc
+%d`M1),-fg&8OcAH65$$bqBTP,D(``R[\M]Jl&VC)=aBTe>H09ONj>iRC;iffA1j0-ThfDc<mN+V"n]+=3=@!]nST/P"(8%_?c4Bk
+%Hu(\jeY`hD"@F`*\r!Jd<!`q_kUDY#&k;46V8SCeBI5aHEOKcj?>?*sH6/HW.NYidaJhE2]#Z39P-$e4TfFhXG9ifJcXPq)ISp`j
+%.7%B@*F[@eo2KPJ+R\u,C06d;/aW4NRM>48=aX at H;qC6]Zqf%=+t?)&/p[!V;!%c"`+RJ`(\62krd"$e"[C*Rk6#7C'c,Np,$J;a
+%.'TnphK:?7TKrQG]:9Kc.PIlO9(W0g<TjY)e7;uFl*1umg$P#%;D-Ve23a$U*;ac"^<7]g<4I&/4?7hF-#d'MEDY5hF!<!<?igs&
+%Dl:paZT_7fWKj4UOPGW]dC-24!jL:U._2E^+U,$]#U-"(BLBbc98[tGXa,><e$.5[3>(/E?ck?-kOt(_\r0Oh"7M`B;;pVFJ$=!E
+%&'HKm?`Kru/)kKf2;P"$gPWm#G*2_VrSO[Urr`6bnH&TXdGB:rqoAEu&$Klcpr.`1F8l-m2]qtXhi=mI^[Wt,IK/K^IiRp,q+nZg
+%%DV_rrp_q^r1!<F1&U,dj0-=,hre?r1Z#gZIf8RohWS&%+Kp7aMuW9aZk'@t^A5D7 at IP`'NVib/hV;VPa7 at hnrTg<8Pr.QUs75LE
+%hRB\6%=gOBGBP6/kZ(7Lo6((P5J3.\?hnjEnE,%DO3?SHkBGfIs6fdSmQFp!s3%;ns/S4gID1.$c(FH at aB)aIVmdaSpMp5Vs7#a:
+%5JMRDp$Y-#s0DZihk'gks./>fQhg+H\=<A6rquc5puD8K5J66!hgPCq*VXOPl@/c&Dn`d^PFq at Dr_MSQGkX?crUIAqrHI.Ho:O_Y
+%q7`bfEb4[Rrq0&nfDbRARm6rI]^igra$oUe5Q94!pOE5>:ZMAnf,skXmoTDKrHS8<+$R&M?MD3[oCY'&*ZdQBcYq,!m[MgH`]q1c
+%s4R^!s!:>:UYl%AmpGfR]G^1qhojKPrq;iOk5;j]rq4l]T&9>BrnI<g_`dqcrnBF4*U[qHR=G8)-h$nSqtC$Dhu5N'hsjnP#VZ&q
+%Ih2/>29`hMI,!QVl1Oq'rq!UOYBdkTYPu`2o>C$h5+Iu;GUYA-\WC0H@>j`$s,e[R^4,\HrAPhPS$Tdi5Q,!hqB+JX2]qt+k at O4j
+%k254ZmuNt5QdJ%1I<Y]C8F91Kn[iGOHM>H5Iij-),UL-Z?V1&-SsSJW)_YQODs'R:'Ti>uVXhKPpbb4LkqD16gctY at q]ETMk!&d_
+%6h\LjDd]g4T>^-G:]0C2qsg+6I_)(W[h%q6s2j_ at K5dGhhUA*GGCMN$fDk^'pkQVr98p8AIeJ9iBE$1TIJbK3)=N_ph[*5DI2\G`
+%q;(4Pq:iZ4qkoLi,`he%aS0&)L&]:c97$K9=RX2]?_r/MiQLEX\AA*,%K5POpq.UBYe4GH\aUt!qhL5]qY`qaqV`YQj_jULIr,R_
+%R2,_[j3IK6U[L9fkC8!ViUPRX^&FTdrRmZ&g"$#^qqnl,j.&@6DndC_`iG0pDr6"jn)(g*2r8q,r:^-[rdI!0q1nj&GPJYn5Bu])
+%5Oe*%5MX#k><Mn6Ism<e:VZf#eQ76:Ii*sA5_dHV5JHUcnL$R$H9;u,K9l>`gM[<<l0Z+Y\+-ZrO0?41\c%$9_SV@?NeNOta5b]g
+%\=8g<Nq*+nLZ`ILFD^rm48Rq+f2k2MSr^(",G4QWh)es9cEFroK2-dkdb;C!kMQ7hCZ/iY`sY+ at X?YJn]IRkWhVWg,gtVAu5&KoW
+%a3)YLID.93rf[`ShuDq)hS":5=PU+:[5VHRrqk+C0Y_l1C%V5p=7ZguDZBNBqpX"?I1A!ed_gQ`r9EaUqp.@`Yn(*kHtQZC5Ioe/
+%f^kBC\j+EVIs_tXo_FA/^$+u8:TO/D2fJ`NRuabET at 22rUo09'qQ%g0=KJ\jI/JBj:VUc8hR,So:OE$)l-1<P,HT?5o^?..`Uiu@
+%rU.S9]Vp2PiG$.(_;h72+-#7ZnF>a,StGmUI_Z&1hDq2Q1,o/H?J4(Vrc]p^s2`X&=P5>Dp<u[+GNJb"k8jKbrEda8k4n1QkHCI^
+%m/5g\*t.nS9)n\O`H"2Eo9Y+i:&jHe?i3+b]6A2(*acs?IJ%.6c^XP%4WhG-h_Ne5h]M<T#5XUgqVoQN`^`6>c;3sZ]_\"Ek$s^D
+%+7oDBFp^.s`TMZXb0Ll6\G5<rbg6!/k4\Cb?Q/RL,9GpDGL(L3DJhqqp>aJDKr7/Mq)Rp;UJ7hbqJm*VJ$4f8nWTYonQ[./[liE,
+%?h\eXs8?TRHN*/-UjTb;:Ug2u#8[-q-eJ1\0YX"1mFg;Z]\Kuus'_F)quZclq!*<Xq7PB-n+uh6\)3\d>I`S6dr56AqmkU6p5V="
+%s%bk)`;=6hc]@;hfGsXXg`!q!5ImkFrr'J!rqB`k+,AU!p^B+Sa%mNE`ARJtn"4(1h#<r4K\q/\\1cjeVe#r2I.P<Q\5Ik1k<8ij
+%Ma%H5rT-aLQTkAro0Sa=^W')VIJe at dq0W^&H5P5RBlha>J$R7iU/QHNU%s;4=O at p3nipS)F%;"`O'>sr3kq^K^SSZW/M;-OmAC3a
+%BiF'H?i=3TqpSG,T'7&Ol`8p)i;D_3qtC'bI*Ku%qNik<p.Nk^ppG%IJaoYi+$Qme_c?N$T.JR>DoAQOqoM8jhcfl`6&]%,ESl6(
+%r,eP"s3.scqVhb+IsHFYA%fVJ2(ul/Zh_:V?]R-no>-?QkiML1)*E?=p(=BtI)";(=K1Ik0^Zu,rc7P#U at QKhock_9htIgdgf*[U
+%Dr5rNLeeQ7b at Yn2dYWE>L?mk at 5+0Tl"\N.iRf<\dr&H#b?be$'oGM+cn]q`L?:O6Nm!X."YC720?ThsU5+AbTi]=7>7o@=a]m_nm
+%\bP@"2]j(E$uSpLp`,#9`+%h8PW0^JMpM"oIeZIHH3F/DT03,HULe\cKMO&We+LtPJ,ZDtio1XJ8>55$5-;pCn+]Uqhi+ILCka.J
+%D#T15iTY4*pH)7"k66;1[(/^`m3KCF^W./$-UHeO\*u!gbIWnb^Ae--Vr at 0p4Zn2il=H.R+5Xa-*^BV`O,KWRan%mj'9&QUbj!Z=
+%Ieio-T=jC`PCE5W:\X["7RUbGa2cAppVjHlp)BUNc5/G/(OuACFoBq$mp:MBl"N=m;GZ9HIJ[?37B#8'`g;T6c8%h87[TeVqlA$L
+%h:&9M#"?9(3W;1Tr2&pu2Xb8fC&ZYEM+p]O)=ASR^@K7Dgoh6,E1\f_W/l1SGkE_n^A?4tH:8>YoC9di:!EP<p\X>k+$M%_5Pd-4
+%_oKejTC1ZN?M"BoI['e[r4s-C;;1o[,VLt6:Y5V,-[*=U2C3gJs*jH9cL;"KJ,f"&5@&QDq>]I)4kmc1eUBE.T<YNEceo*k^MmVR
+%J+mpZ?TP:a,c5L+8qhcWf6W1tALRSE0q]V[hXI"[l2NE/qJX+3hu;u?K#!_,J6*hBHM;KU4 at S2k<#(IkGPqI=r at e3:?a7E6h*b$:
+%q_t-RqJT[0j,a6>>s5F5X at PGRaOBm$F0@]Sq]j,[jY+9d?i60QoJos$&Q@<YNre6uX+0rBO8P`#q!L;BJCF;egM&r, at 5"n[YrQ.i
+%o5p*Z]:-D1B8l(`lFOaf5""NMMl9d!C%$Lk'i3qG+!iUJf^n.$Y<Uflj?oO,i,],&lmmM%V]YoJ)#LU^EISZUSegg,'M]0,org#7
+%kg'C;Vq([t8G;=]_NDt%95O*=U&$'?qcjd5"R\HDB<UMF0)1iini>])'_:dPBDh52rmPZ_^!D)riYfVIoH-<,'suPY+m?Jf'HS!T
+%QQP_mdiXhaIe'^qT7L(ii8ca<Fj*o4`B6:7/o*Ztl"]8"2FT\kG.'R&8_lSb-&*sP5rQ,)-0)1Gn"["*(mIT.EB5?X*'.CHKK>XZ
+%P`b`sFp]We.JX'!(j3OCB[blckIr]Z49'HM]Vn\OSS8Q1P/Gu)?<07deb+lpgFo&J`@6f<o[fZfb?uWWo2)53mmi at _D#84Ol!'4u
+%Y9lhJfge*s&lOqS=C0.W`nQV<]WEZRmmiC9T^X+_8h+OP!cTZUm]1(QMo&BKX)ma0dG'%YRqQkjWMDmqUFXCF8XJ7VBrPAPF1)*U
+%3g6Na*nNsl)JhOW96O^2CPp`XVu.[nOX[?13-Efq!NIZ*]_5W/oBZIZiXSJdn[#E-Ce:2LrB,r>hM[T^CYP:FBC`8T9RWF at +,Y/1
+%:FUN0`='@"='1^_fkfir]6oR8WdAdDEPj6+?/6;Cd*!EbT+$la&!OPP8O[+6okLVL27G"I;7IGa+."Ysoj5X at G8p)+(5)"<;E\lR
+%+5:ZF[YG4HIb@,hMMMr>]_Ad9^TN`'*N;N)XE`--5F\)j=X"2Ehl`Y4=513"@)gf5YK4fjQ=t>6$J^ZA=YZdRWnQ5Je5hVUf04(q
+%f?(OQ\V(aZI6-]X=fUgu7*T7*Cfe5H]emQf_SJhpYV)PSAaO]Ea*, at JKbuIS093p051@5Qq_FE$Pa8&)I4YpRek%$)m7 at XJDeZn$
+%%c]=XaJh!I$$!6+mulkRd0?EZm)P<R9:"8rT at n"Hql:I?7lbD;?u&C2?'b/N3gWheT1.mkoqR+jb4_EKXr'O>.82'S`F`bg.a!tT
+%36%[:o=CbA);?(cps,M4%MZ1)VP<VC&;!S]k?>$">8ls$3FrF*Wq,Q*oX2>SH[f+d\suG2F^"p.4ilX""5^r(QgL:^FkLS9caAIL
+%;,'CI-9GX=i3CKI(%ipb`Q/j`($"S>-qdkdce)`oe3r,CN^JtVmZ?W*lq5e[C14Wo-I&uH*UUM]8Pp9&Gk$/B<]i]AbNKPEYe`QX
+%bI<3N+3LOj]NgIkBBdsu2=U+8ZF5+JapQ%Kn9kef:Xug7P$N.bdF`.(D!BX+C#oT._B,7CeN(JlF3s>'a23#V\nn9l=1kEW;fVFX
+%8ZBD_l]rg"`Th:&DTB7:5BEQ^CRa?bGXeUk("R3LR7g/f'A[GDD!oI4MCNbs0lE$B*srP3?`Y/o`5e/ta#1`FAr4S>?(F?ilR<S>
+%V/cWa0#m&O'umR]kGqdm))40#-db5e`s`3`pM3^``2VN7f.;j3fk)JP!.qa\Vto\'_<c/j\DD<um`B?KY!o%m-<%faq(47)lOqk9
+%aToKN17SeYLE28!9+KYl4+/A<j7+NBEGamAm*E3NQ$;S:[tWQ#_jb`GD9`<hi#$f4lbR)gGl?n-M!_,G%q1a&p,KGPhAtJ^F\`2A
+%qgMNDAm8MA4kY57^)i&QC%l6,kMB71c^%B)*\M'`qp_B<5$n&*@Y,hVG[dZBjWH_QWKd>(`ok(jk.=4e9]QXsk=IXQOAu/O.e$8S
+%%<Y8SgM4f"kr44rp.c\Ope/>/4/,,2P"dS(,MS'A>BWP3/nl\CAQD^1Wu*FFk=7[i8ufC._mUOh$G-]kQu.d351`>!-'6Xb\$5Kl
+%dIbGM?W at MS/fB/TA**"+?7?,KBQL\CrQ;j9fQ-#gB=V_&lI_n=D)aDPTV]9>CWOk*WiCPl#bR+Z"^-Kb,>I`B`NiUh+ISRR7I^^9
+%k#EB)`noA5>K'>UO'h8cR9nR25`L)r(V;cqjqLe'3NZmthNlD0Z"n?*^%FhiCrO+k>M7-0+sN#KT`AAeF"+N*MqD!e6^A5d>`#ja
+%Ho$\W]V;L^"A'?kA4E^FZ0)GY7=l2s&a-O?IEaX>mdm,1P:Tb$'9^YKX.:llAHH?YIMJoGek,;YY,%=-s4u?VG'!c)>dE1AF4?1X
+%=3:/`Y!Y,*4Rdp\G1j[E\=rFn95b;$8*T>r)QCg]eIU>FEFETQ.Dea%Q_utMWN05Q9d*&1.e''91>=gej\UDkKfMmt2JKjT<YDif
+%fs^UtC<p`ufnfO%P$T.'i$JaE)aorW--2l,;0=W'WO!;EPIF&]@^f#q>I(TKn$:_1YS/"%hDVtJ!Hb?F90"@?E0.OI:KXGJ>?nVk
+%!+*e5a<_!3/Ik at lZt9ki3ju)4/pY^IYU.Gh?Kb at 5[O:noD";t+gD7SZ+$;q:!s#q^j?Wp,)cnj9Vr9O8 at oo*K'Zo=0@,L;3!4m2A
+%M_7`;#0"TV>%P>"LGeVhWXDGD$;sm+I8XoTE%QRA^#q<KaUP^>R[S*Nogb2EM(k8N7<+[M;1!mjF4ppV<I%7kX,r5*d6SEBi at kuf
+%=#(T=/.djIeum,K.6hGcI(N5I"9H(YRY%%G5"9Qtmd5&]R1o^YV!L"T8pE+:'V)?@EO21Ib/V'Qj?+fV:Yqur)8^[Q0:c%L-[#qt
+%4&,gj+@"6,(56+MZcEbOmg`+N`+T,?fsFr""8cJ@#B*@C*HdkbNrk\LVaUXB]-Jb*\D\qX&bTXXn9`oo!Qb\E&BXJQpYhXqAdT6X
+%':=Fcl!Cf4h\F&gqQl\sGn9hU9$&:W/9*XAl/\MU%ZFq")s]D9:@J8a>.c>h\gZbG34/un%cfTKZZ.H5"5%0k;PPZGE[Wi8]\>h2
+%nfKbQSlhPD<G`D+M5=bg/iWukLR)_M966g1<cqm,<PcP/=C_K=jPfnh#Z,Imi6,u;4R=gUQTEm>_$`@RN315pWk,_d4AMcFX44ge
+%"YOY,PkGY)EXG<`-!6C5HZi<uLN3b?7)HD6Gb[SP`:H\)'BB(`LAp6 at PP]m'clDM="(c]!ULG0?Y%!9g*B?:3:RQ/-4cX+GBIMLD
+%!Vn at 1$V?h=$LjnE#"q!s=Z=D]XUaWZ!c8%Pa6g>&r%(AWE[h[Knqd"s#.^?Z*1a1?b9Z?@,Zp(A9!j_V[pGs>29t5Yp7XO[WaP1]
+%0'=8F^8lX9ZLLW)6(VV$=TTMSZY[:[r&-Y/jjlWjL9bohhR8UaW5Bhbgb))O3s6)JAO)7UP=mXqUaC^<J%4Dl`8bFHqs;S<$+m+]
+%q,A'RaaMCFO at XjGh,*MI4!jp<feU<Qq4.p*Ce0E'*>f$S9+Q-L!ton#<;.5)LX.\Q0]#F)(F29m4$-tKC/XL$/9`OISD>K5o7Sbg
+%JfUI`8Q at Y99AmQWPiX_15*p,+#`?0lh2Z at C0=:r$#`Fm'ltDYI9*_[1LWYoH=X?geYs2>^.[#u5(JeJ!&o1(nM%dH9Ke8%RXU"8-
+%/0Q%Rl(#rt$f9Oh;8EhgUghYInW+jF:f'l[cTrF;KKErM^<i.a;8PA^BTAmY(`?!m:KEJP0ZbUa;?BV40K`"3EZ6F$`YCBfVC!&2
+%38#k-=^td"<"P-Z]u^p-ERQF=IB(d8)k"M[\LY^m96>F'BtIfEB#/gDee&'/&t[2KkVOV?;fO=cb>_1`&cfd%6A^T`LY at i,Oh0hd
+%P-pBN&b6I at Re/J[k#H&`=1Jj)2&^%"#bd.*9C?")I972ADf^T0..[G?>Ki#$@lr0WX^t7UMVa!0b?5:n<D$_',HPDqp;*d?kNMKE
+%X)$1[I?i%U:ls)H;9:&P*#>e$Yn2='%VNV^.E)?)lU$#BR`47OF\(.#VZ+L`b;rF#_?*D8![t95qsR at R\1-QZ,AkK&Pf[sY0fWRX
+%/sc%(F95kPCgJ at o7<u`*$'^CL5KWAiB%l#Ac1)51hjg'eAZI:$DoZPr[n?t(W46k[ooos!Oh*Un'ejYgGns6j$Q.2ql#7W]+`mLR
+%l8V at 0D<jP]`+jih8g%fe]EqDSWpA.:YH5u$mI;s0F343r`.WN>I?uDP;R4Cn_98!uZWs/cE/RsWgXHj-#759^Qea#j$&>u=q/B"O
+%[8>DE<+_4gE?>):j7.PFf<CFFaS[JG_BJGPGD%(<h!k\c3[gJ,Ic.;oXCTb*Mf,c,h,9c<]*_dVaIMd('aKsnHQ`KW[q7.SGQ)X&
+%9N"- at K9Emhq^-g,M'5`L-Q+1S:k:bX#82"&4B2Q,8GhqegVBmAp at R`7l@*QYC[0Y(]@e0bjCJg*.f?Mko0b:_^_T9HDf-I.3tB1p
+%XAr3+G1Q7EA]\#R?5g(C[O76=Fj?sH!8b"LElXcIgSrak:H?4Z)X`d!8:oT:<j&gqJd=N)=E,tA'jr`.#aeI*17*po=.Q!.SN`o)
+%_J[5+*FVY$B-(TA:.J>4Fdnj0O/Ebg>[QD6BC*]tedH,4hHE"2\u_R;;artQo'V_("$u::VOeDtP"/lbZ/A(umA&?YPR_7>k7W%$
+%s6%.`r6*cUDSR,mc34KUKnta"?<*Fo at P17P6UJ%N3[jBEjJ/1A:oj`6i:90X1+f"..sZsQq#=9=12K0Y:R%!_62E#1(pT_K8#Hb&
+%B`QN'+m>T52.=heTR;8(9-g_=Q1$FZ=o(jM/6.bC`5k,'*!S(^bKPPoqd)tslO.R8fAi>'N9 at nWIK[E$QQ?7D7I&_VfP"o<4YC;I
+%M#I`<8ZBW<bp*0=[q#u8;EKZ>aYEpi/ZpXRDGp:<ZLUkTM\\gBbsh36b5e-?,.pQUb*9$1Z8QdK;AKqG'L>8fgKgW2W=IVPYnja'
+%LgLe_9.96D>AGJ_Zl>LmPkdmWE!6Ar3`HkYpZ=a.+rTVOf&u9WL.D[46oX<sU=[cA=Wm9*'5c[o<?I_?A5lHs=F2F%FO%"he;*3/
+%.8$[s;lj!!Ai]h+)-N!p+WmWT%3cm+Z'o)rDWsd)mdo?cK9,=AQ%Fc'#;5f:X*BnF*k2a"$qWc:!F]uDN/g-3X%3KWke<9^ZUVP%
+%r%n/_6ni?](K.4`3pcu>.353*)%2i8f-D5MQ0jpOLpu at e?"V0U"*5h="Q6*PkNsr+Y9Yi6QPLM;mgSe6I at o+:B8;&ucnCdIK7W/3
+%O^-EkD^ec//'R&M[Kp;;-"EhOY#AuN0jB$1:sEWTAKj=B##W0(p/->CMQ2?*'^(>%nb!NY!o`qH.Mt#>,p+dbIQT=[A0OiChl]Ym
+%P_N+*2oJ)O4!"iT$;poh>"k3=e;7p,Q.#><iO^FRnAbLPD;lup70L17`dDGP<B7A&a(;2Mggj_hN.r0"&]D+[9d\@^S0`g3g9"<5
+%hkVBdAY1N4FI!pD"oRe/=/_)#"6SPo\oKT*FYOTIm4*dq5<"XA,Y[kod`8\;Fcf%BX15.`:2X4C7E3\"bD/EA(I==Gg6FNA-+.u^
+%,uU at WUa@2.Z0XGqc),Nh':H['80V1])'m3Qk$t"C<+(mufL#LJqF_s'H4u3GLS:&'f?"q"j\utg:/Zh=ZFX$%rTlVEKj;]N at F=Z>
+%ct2s5JoZrs.$Rogp7s[[,/?j7/R$bJR/9V^7/#qto2I&4XeN/&WH9)3`PMXq`OL1N_P`b]`g5\#PlSD@'8S9U1*DTV9hZ.$?A2+`
+%iNpVH]jsJCWHD4>6^BJOQILFeAo_nNi_7**g8sQhKI#!7D^\,(/ol:,Q0U<)3+1't&3n9%b*;3=)Xa3$!%H at T+>47f,fop2[qh/r
+%_fHiTDY^>4E@[&WZ0!Zkh!4)Jq:Y!UP[`1k3o*j)fi7AF"A;*3dC_um]tEhkk?k<!2OSWVc;u3.gD"IAHn]Qkb"?"nq%\)(LkJ(5
+%?JLY-RjXkO?drF]J>BB:Qt.6OU`p.r;`;k>V(>XM!(F#g/pd#\l_KBj<03226KS=.rY/\#TH::2U.>,[n.$+-"c%OVftlrT8WpSe
+%J<BE5%O)S/S2^,I1B*bI@\]qZ5P^mtfrb7SN_tt8<g&SLQhQ,aUu-s$?U!r^YV,K9o:-MPg;k:j?QK2eQ'2QTbIAuE2S5T["Vd8/
+%s'Um/ep=Bd(=.'%@ho0NePk,V[$"EgNR1ksj].EI'6jsQ;14[S0K1:&eKJCSj)6l1SVhWB4&J@>5/J`,&ohAALl6La'b8l\CDhL\
+%)/mVXJ/c=SQsV*Dj]BQsobHaS'QV)cQ'*o")O at jf9ddoVn>YQr&g+Mas6%6irfqmL5sEX8/1GoO)0L0?]4nN>VN*MgRDa;o:cu]'
+%P_i&V??\gJ,IjdWe;uR(==A<l[Fa9:CMrPfhG*:3S25%^4\"a%h(#Jg1I[c^dt`3ZZHH=aYCYci$26mGZ+?(Pai3.n'C))nkEJDQ
+%*r#c,NND3ti/H_GGpeNd"OsVP6rl1l<RHOJ0t&X3LP4i2)AY=p-OGfP+%L=6r&;qWQD"jr;u\!P7[J/<#-ANB8&:O&TU$@fb_LHl
+%\$QT?NAI!9:rWU4TZWO"OD=H%&UTH>oZ,pEiK5(Abo4jrfT(2'-'Et3&&M at -D/cLPan)<G+,T^9ULt%f>1YJHO;HUL08X4a=VH.\
+%FU]fC4]dBJ:BGkh90e([(slAY611ap/:4)49"bTrO5S, at J;J]?,t1WC9&T$?IB-7&Y`6)m[QlalZd*A!*,[gibuKc#h%g%h5V1^j
+%_$u^![[@m3X[m6sIEKYOR06JQ/0hH(3R5uaDRm*u>@X.60S/e#6u$1`e]1R+>octiXa4m,dd`,=WPYj%3qf9dG#aHni)R#dZVgG,
+%2,,eJ=e=o)B at c5+->#(''GOd56$nOFbY0r+X,O[O,G$*)C92lZ9[@9+95;T)\OSD.C$U!=@>"M&/%/I.ULf3/DF?[]%\jGnVdcmT
+%p6=h"_1;V8/rL^HQL\&+03^#Jilb<V!_lm^abP'JT%e0=iQ2otBo.A:[CK:ild#d%SnA(\D(687JlJ_;s/Lq'Wf07ch at _c*>)#n&
+%[WG%B'X2#OoepNKGlI7SAjoj4Qi!'r:>c-Wi%$sA"67=;24m**Vn.u:X7%(+I&%J6*WR^3,G/LgG+TMnEYMiL&iF&gbB3r&qZ5tC
+%.>eBtUfA6oi:XsRoIS7U at UR18@5 at E6k#&<U+D8.tba2r8HsZGI<k/O9P52.\57?2YL8ZSRPS_+^S55 at E?=>t,im]MQU)2UD>r$b.
+%/**/KdqYDB5[p2K@<Oh;(+?YsICGJ(26BrIDI1%h77TZ(o!Z\lVu0^q&J)fQ-4*/+Tj>*7XG at h)>^!@5fEc5J*=Bm0lP.,n;Io<s
+%?k8nM]A$/_"I0=t2j.G:_J3]B)=B'$Wt;h)kQ2=AXor&Y7;3CI[Sp at 4:Q^8j'Sj@>MipRUV)DJ\407G5T(1F];DQDrd'FZ]J1Edl
+%4;EVk9Yl?(DQkT at JO`e6bmk2>6F)2KXJAbSMamuim*k)A4@\\m\S%UM-YJl?"m]!/?:t$UAH8%0RjVjJ8_kU8roW7!Wt)hd!i,$j
+%82kK#aAGt&;*8%%d:,6V&1sI#`e1X=7SK(S#C*!VG*4a&FF_i3kC*QVAFkfZ%43V,O!3=]QDQYje*$P$1@`tK`QOIL'aG2L$g_Lk
+%XRasJ0j`/"aOXWCO<<+&\T%+]%$*)88WsdN,uo#@pL-`ijY!YDpmpNC`3ZeHR^0,0YncPm]48ooVkoKXZb8`[`cg)N,eXIVEn_(H
+%*.j*HW2Ypco)<cCQ[!74XcYK`oe"_##F^0^@dbWi>-B7dk=g,i8t+25T%3u)jPL]dP]a[:7Nd_s&)sBU'j$%9299f04B>7D^unT@
+%$.MAe;bMp[Z;,eeJmf3V20Rmk0gSPR:VeVS at Zppadd&$Tlo*Z]R:ZJFX6<9@]6S91A;R99=S/JH&_VmGnRgIaU0XJ2 at HP=)<f,qE
+%<+Jr;)"32NgX]aM**WMHDfQoe6g_8/Pt"B?s0JmO+Wg2,)q*#40<6(N$T;/pAj?B;4<P@[Ql'ZUGH&bY('-`J\/Ec^\WXM!PFtOO
+%U`_('&0o>]c<9iREiMT43!jS at KTV92*9+9^!Z+Lt(`/QVRiB[d.Ai2UDVK&=`Ac&]5pB$/jkMjR8;q5LUS$Kh^K2S#<B[>XEZ=h_
+%WHpL+0\IA\F7IF+-fF.$&E-TNn%(4Wq3hYdj=Wrd9&4k(OPU3Ce(e[(@E2#2gSPa/>]GQCY34N71#KQENqc<!$_[0?Ha_[F>KQpo
+%)sY65i*H%_STN9qNJFE!I?Ctmnsg2V4dkXh:nr[oPoFSq%R/%\&PQ6r,"]B40AAGM_E=D)3nfij:.F"gEj')lM[*9*,YXEX=KO1Z
+%^S33(Wkd_R[n8.#Zq?KSE*=n-H<I_m0P(>T-Ui0<Hmql4PXGLq%%0qoSh9<9,?YL/E\An*9Ypr!@o'>PGYm^<imR"5)<;K;HLOR>
+%poM>EY^;(pZ<<?1cU;#Dm^@Mr:-qG/8)Gj]CtH1u]9cYZ^qD!N-=t*t;;-sa3ruD11Kfi3M$l4B<!dADai\Ec^ttRZ7++\jh%Mbf
+%]<t$<.iHJZk<N"/MM,E+]X;#HY=+J[Sla`&CoV74^2E)A61ce=@?Cc]O:^<E&<fMC`N`hOBU56ci;-P;&f#Fd'$-fIBi:4PjKT6+
+%ghg^42Q`,6SJ[m+\+B5:@1jC!*DNe4+ne)hfS at C;6i^7M#mH+nMOaMl32XN/&9+b@[A:%Wi7/GMWOO41P"b9(1aD#d1Y_VjiWjI<
+%^'2`/9a3$JI?9J&.]Tb;=dc:Y-mm\2WDbu2'&mjZ8eVeOZ)JD\$(s<3AX:Vl#fj3>bt87T(W7q7=&bZ!bE?#"fWZ(eUX!bsXAl>3
+%Pr[VPbl]=1jatXHP(R7Mc:RAFai\GOc`ZW;JmEM>70]f[Qhoq>%S9'e1bLa)AEZD6(0_p`Bkagai0m'@OW6p$AbVW`$*(Uh'U!dr
+%JC#\X1oOb>B=Y:4Jsko%A2$G7S\-f'Z8V4:LAUMJ'74Iq[P5PW<)7P:0M%pUlgB%Mag:89X8IMcdU@;G7l"5u=`7ie9#f.3LiOuG
+%TN"fM;H+D at P\]kr:ioW*X_+(3Tc?pBYumSHZ9h>Jcgq_,GSY]5RH#`Z,F8(>;PkP/5(_IbVDeI at 2ils#FaFdAM>$=?Y[5-+=SSm/
+%&)RV"QVZJ!X_qhLKn]lR%+'O8ATacR%Ct4:kH^iD`J3Pn7=DQ!_cLY&H>qHbq9D*2%nkp,^c!Xh2I*\dCZX8A"tI&I0Y=RU(."tt
+%afZTN5HkpE#;7FUT4*V%<$JIV+2)lpP6i:s\1#OZ%$KJ9L%`u%[GA1#0uUK?Q3.N*g4&3.$]4DLVJYm3HIABZ3jAZr7n0HnY6_q+
+%*Ba\kJaX`I!K"l)bB?^/OVDrZiZH\r=`(Z+KhR at 9fF3q;DCd>]p;4.EgPr>Xk3Mqs24!/ADd%pZ.RI,sk]^oJBn4An[[=MjG^e*<
+%@.Hc^1&>H[3;@7r at 1WF[QkXmLlisbfpbDi3DrF]Q;MRc(nc4guS<B&AXg'6/6L/7k[BP(]Z)LH2s8@(c(j]@8a5SgK]?sCu2-KE8
+%2M0n@`KlhL6$T^,;c33\Oii]V9l4oLHJ2)<?FC%b@*O3)2u.W^GE9RX!/m!IYFDP.MlhtrMhD#8Ej$rg.;G&<+^:AqFsScLO5&Qt
+%MAiLP+'FdR/?U>8@@*?bk1'&`4le,G5TI!0OE"-5IS/3%3CK&SGcPkmAt/ZhBYc!\Oh"&6Cu*TC at 1Vj`aD7l7Ou01>LMLYW]Vk`o
+%]%er&_eqp9g_UJFgNf_8\>nN;0C1$JgZBI+#[3SJet15(9h#Gq>m7[mqP[\Vm"@e=@=Q"gK1W%aY?J`8>gjZjY`=O)j1da!4LnU6
+%"lQVO;!'%@(65IT:B5"WQP:`GW+8mo1#W3l;%,0netU`@b/1''"Cm?Lhf$3D4d&86QmE4GCoa9$a(u]8`:GQL;qnLOj"qFik]]fB
+%M!26cMl3)m/BH)Q)e$e\jU`eZ3B#O[MG4:PZ08_iRE8>K*hrelE>lHH+`)2W>Qquhi'.jqQmf-tODo?KYuAL3[I<;&(H`eH2tjV\
+%C%98^nl7_Sd<B:XU\,K$VkZqeI>\&i@\&jN_4(K:0ZNeV+^Er8l\kWSBusKug'"oYTU!b_B8aobG>EY:9d7!TCi>MpH?\te6'qPY
+%9h@@A*Hk\`O*_%\'NrKD:u[&)O]G5f5fm?J at K[B_'EG4B'74k^@;O)6R-g!Db+'Mmr$iY1k2'`,;rgETWJg80=C4;9#4uJi"=q.*
+%!\'IWOlgWY_>YFd!I_h3,)`a6GZX^_IX`o</Zic3!3?1T]&e3b9K"9+YCUU&J["R%YAu=[B],p^2;.bla5Sc\2\'@I[MLE\Ujs-2
+%*mfp7 at XYn4hEROD!QX+380!h`Tr6]98phSQ0^^*C,?L!ReY[4S>]?BBi'WG0*lj#[[PE6#?2qkVCY[#cljbAXi2?=O-2!9oEX:Fi
+%JRGq3pEEV>LZ,\&k<j0H'+;7"'W25 at fA67_h0't)@VW>iRpDer#T1/+?oBS.cZ5>rZ6 at fd7cG1WfW<rinJ</2=dcV>_lfT7/T$Ed
+%E:`CrK3F-=s/8+DX\NTBQn3qtWNM:O676c/e%k&d9`m*;_$:T-aL^d6EVelCZn$9L6R/3'Lp6+Z\a/?7[Q(X(LPs\9Os,f[73#/B
+%*gicFC+b9WZ[*KibHHs('Kb)5A5G$*g/1dk7`.+c^<0TJo>XP@"0,=8/]P-ah6'(KcuF*3e#o0'G]B4[R;.gk$(Jb%:lf`E&5k9T
+%-cq^WWtC_8%-Hu7=N\-c]KT!P#g29qmnboW;]26DbL`gai1='#:"!)C9##3#+T^D^OubKTa!A]D<XXM5#%+E'X9K\1<;iOY0uR"%
+%qGWQ#p@!BL:)g,J[S7bOqiFS9ZM&HJrJ#r0<7.4W&6K_)W&X:sfl+QAEapV*68[N3BV9-Jm"@(%-'_8`L4Th:noL')=!`0>&MN"4
+%Gg`K;;sY"c,_]1;L*rr%LHsqUVe4V^X=$#L&.dJGWlSG1T+qn<E[9 at BU+8tH'Xd\>F-]VdE(oD!4Q-JMk:%)59NDUkOJNOff-q'o
+%+c[JqCR07Rm/(B"eP58:'+UoWD]kdaR0T-UZ6ip3r&i.0(0#;NYdt6`_u8`N`8qR<mi;*S"feECSQZjbG^QgMXs#I">(5&V<lJ.9
+%(q4KQh1=C2IJXp,ELDT7CZu(<_F<a=WethqET*m-[66h#13JA/7>e+3SaXIb`BhU0-f at G$&*Y8q8jR`KqkES;,dQd1lZ/'?@4D$O
+%`N*ocHcS<i6OEMAm*OjnO_X3;ac,6uGt#&YJYO-I&t<1AaHfK-0tERmC.&$&C1AFp_KtW#\5;h7qYB4u>IKOYgh&O1M>B9X7>eBZ
+%iq8u(0?BJ]&t6VYC'_H!LFg2#@6MOkg$nB at 1"G"OD)@=P!!a<c65<oYR6n'O4?=NC$OS at Sc4a!-e(KK:1(3;3e\Tcsf$tc$.&AL`
+%UL:mLPX5UtXI#K/2ZIS`R:eNp.Lr3*lqoE_p2o.O<I6SD(0bX%c!Un+hg-aoW`J]128uYa.I\Mr^a==fT+==BCq:XkgN\6S9jC\u
+%dm!72W^<72blP16q`E9'g,l#+R)9t6Wbq*8ScX4=0KbOHXV@<@eP/dSo*""S<-KJ';#TFQeWMYiD\F%G`e@:k/CoF.`$D!*?fE`6
+%V-n)R.c,n#bbT94i%/"*3+f3h=O`tIPiO/!Z5Cbf>iR*&QXlU3*:/1ri at jfBpT:5?]FK`lU9H:cCe5Pe13b(>XL`_)[YTpG[M;gX
+%[iQk:0k#jVfoCKPDNN(9Z)'WadV;bY\le"%29\[#[ta"\KC,)-I296ugFINdA>4>gSq;45UC:[-S!_`HC_SFTY.Uo_-s%h+I+2Lp
+%&0KSZfnO&CC2CFYVq>)1]!KY2#M\jKG&c6tk3s,B4P3IDemq1S5Y&7Y(m<Jk$q"dn&0WQK=qW*$"\b%pA/.0f?t3+p%fn`qXBoG*
+%RfYrY`)m<Q7&aK,?!YP-4FC*"X at k?5bZ\g5*@L`M?-/\M=c9N5>@qp1kA"tq"-<g?37[aqf%s\(4cAaC/5bnuVZbeT\jNn2>O<`b
+%f:hQL#'@,hl*A^F,o,ih2")PD41.D^"NK+,"D61e.$8TT]AQc'/eH+!+m&6KC@/>YU*('s]A!9gh+'Sn6)#@%_CjiqZ)":??kT-R
+%NKY<F>k7M$E98?,I4K%DYS$E;gZF\sJRnLo+BY>APInh%4fq)VH/a;rhs2,7Rc"@=*J?79M9oGN%PjL/DT6inFe8!!k*R*5?^X6*
+%#?e0,'S?"D=/+]ocg<OE5t4/:#rh"\j*<c>)h'O#i,hFH?Di+HI9C\/DFmXBZVlGcgEe"FS2\:.n6%m at F'#JgcA<>do4,WNJ6s!`
+%<;mo!7%SLkX68U>LDk)SKq9*A%05hO"RB<).=eplD.3[QkC&AoD7Cmt5hrre.!`B)@U5n,<n=tc<Gc(q,eC!NW-[g(3JQYZ(KSNZ
+%Sk_kcKq-JL7qJ*F4Y2Wi+hR#XM]Lp[m\[XD<WSch19k!P#G;4mAL$?E-m`<D'b&#]-^^c0ksdFf+M%>_?Xm%,/!?_f_ZD8PRL2R4
+%q:jiG^b(t/isq?P+OV:9YEL)\2b>Uqh*XnjHlXZ]Sk;'6U0!rGeI#fm\Lsr2_uQ):m(\l>]g5K!XOu3U`)AtSH2\dp?-bmg_jt<]
+%R9s1).Q\7/3]p&NZe/tL2`lLa6l:\PR;=%]CfDHR$X<q0T%).//@F3J]SgE9TStoGPp6F4Bp:c34WJ6M at 4^:*i)[fm12cj;daW3G
+%M#,<*YFb/'#>kd5`KMbK>Br:_PHS`A6,r:S*RDQ.$n&\tT%/-BJr.Jfl&;O"/U_W=#RjcK1f4bP['kCON$ZM$#>b(nVs::[liLFc
+%WY)bDbE<koE?0o^8b52L,I#EN$r9-=ApmP#`_$U]9T4k4fE.a:d?!WKr,.M\PhEloO#enT?>T=2OOpJ$FMqBr72=4T/3Y&hg(l;(
+%c*MHp*1R>rHJ?!_VRUXi+:]#)Bb7.!-jNN2$:O at qdnrLKR&EGZE],Ec(qu1ZG^tZuM[m:D3f=_4^C;%;Na*K*6Oi_mg<kjfOen65
+%J52k+brB/0GK_,Sg'BsfN*()_Z?b;p[)ur_GL+;)H:,.+i$=21P!3G`4^d.`a)J*>s/U2D\)Lg2n%tYgG'H`_'NRj^@B+\[[1L1"
+%ZdSs![Q?^r6Y5#48pX7f:7gM+R.qS4W06bqG&m3RH$!5r%G7a%p;W+lFHW\\^2jbk9Gg\^r7[IsR\Pt9bN;_hD^(Cn_P`iIBd_rE
+%2R=B\QB:t\'$ZfE)$Z\o">]"<6)eH<pa/\,<-fTYY.P#/c6=VH_T:QaS$e?+[qk$RZ'2aMMT#WUUs(6qGhPsCLi,?/k_-]e)-2?C
+%9e6j:p0*aK)cl8t[oeO*l.080Mr;ohMA>JUlsF]?0r\`uJ4gpWh_P(XPJj-JB$h;l,hT8?*%5Z.*,c$A!2%4TI!]]r!Qo!pKG<Di
+%dBPQT=):I)m)`\oe<?!B_\Tm^Y96f]*dc23I)$)F3SoYm#`q7:)RllIf-=="+!jfp2B/,blN@;LoK`0lN=@gn\$@Jt;e4N+JO`(R
+%Vk+BiP_E<[fLsVqjHt^tZ%REl3u8\QbI=9uBn/SOF#HOoKHT4_cUT*ShnhQd<mD+WiP&fCFE(%K5B_B,Pg\VfZ#kH7^*Ho+GAXrt
+%i7[.P=e43pqVIuOG/:f3a"^8ma6g6P1e1=c-**.)Jlks&oVuD27Ol857nd_IFeU3f3)CRP0RY<4[cFAf-i-6C&j/o?e&nBoP[aq7
+%ikYG#lenp4-i&K(:B\P-/e\br&@ANk/?1c<RrJO2OkjHdS;cY*k(Ll3 at A[Z;ROdudC#E6N.^DI!=_=on3VHi\)TPF4@&N4f6kYU?
+%ZFFQQ3q<%*RVueX=d"cAB).t"pT0mt4D<n>cBOF*jsbPM'W*]%H,KEnH0_W]Xs``cc1=XFN3'T%7B8TB#Jg``1%;hAc at o_]B`Kp@
+%RZcLbO-0reD/sf=Hi7 at L?&.fQ(B/:b&!OHhh*Ha#XVdO:15Ui>0h6AtS*]T?]XW;*jj9[L/B,kY8s$BA4d<2A]U`j?.Wl8r82SHu
+%[t$[E-H$=CF:23^Q5RL'TQ%_*B#SL$@!s5ANLl[E:aFtQaL&"HR[qdmRmf4V&6T3>4BPG7*)*Nt.4"^!$JRIfOZMk>K/krqpg5_j
+%!t+Q&E[MkX#+sp"&Q5\K)b at 3TRP9dAM`Djh0am-6\E\5F8+%"#ZBCGl44rZZ=?TI((n,P-U,2Uln<MqdM-k1D`=3GB8FnbJC3ZT7
+%1":f-ZBH0El@>C;(mY@!WBljC[q/EB<:)sKrX#q62KX*Zq5TF'LCKVflsWbSe at 6Ak8U8lUrf7L!Fgg.DcWh1t[%/[S`7Z1l)bA4m
+%\p^_d#sg49fb0kJ-*,^aC?m@/]$!6<hRHrhYE\fZeI;0s"U=;;^.G4O0SnjR>S8Cm<5KqTgi/*nA#\.6dGr"mGs,U(?q6;BDNj(T
+%f;hW*,jWoS\:]rH>cEL[BK<pJe4:T[q?*Gm0o\"I/f.rTLZZns0X\6</CaKjc%1@,VS+1[5sRDq/rt)HXh51[&AW#HCe6,I,&;rc
+%7,_)U$mVb9;YJlkjfn,piA6!A`S0CrDZ<A+hK,^W<?h.>Nfad,8!gd*)ZD'1:hQgh:mpjcN^4CRg0J[C[Ltol8(V#0DKWo&GoJ,U
+%[!TQ(MKbSX?RorJ+!3<'-6^8h.nONA4f+;>ar3+'3_:Kgd9nR]@f0B:DA?`Rd<-ST!=s63Q#s.\3FgD/`+RfV at n4ht&+I*"gd+VE
+%9b^st_9oYNnSYBF39$*OUS`@^6f:[9/(LiCD6oSD9<P#qF&dA[E;j2:=#)d at r?9FDSW^Y0i<0BVeI._7kH_Z$,*l at 5QcUH0FZ*7t
+%aB[A,l=NUWJ6S0DA89UHnp1nB at SP6Q+09t>Ch!*/caM_G_]F:h<=+o.a<hiD at rrbAD.-[2ktoZfh:bt*i^"@9!G2g_Ag4/=Dn at c2
+%)*?p]ETNl`!#Qk+m0 at 6$p)@-T]1QFM.!EV:@8C7_%MpJLK*1;.kcdajE7VtVeqnj@!H+utI8U*,]IHPXr`9-J<*-%l[Y'ckeqNF-
+%_3O at t,7RlD*s58rVM8 at ZVo2Tgae;. at R(0)-#uC^Hb<J9^')Oe9?"uAHKV$`KE3S#cpi,T>3CGXJ@/dVaG)Ou2Xh[&(Le"E0AXTOX
+%q\Aba.aM=iNH:R:8U;bB!FU4+d$VH'7gK+[4_Mh6AdT"Z_mb_oK64EjO\VMuoPOm^:-tnej2K6gS]b<hq6mujh)c.oW\m397]nV3
+%+t>qEBGOfRX_lJcTtVp=:Y(kCs,oKE6Vi$ten);mjYE+MF3g*oUu>E-Su90MNDCdp!$.fE8aSbq2E-Z5VNYQ*!@uT:8lXM;H74aX
+%##W1(2$G)cMg5BC_i`F24rc""[W`e/P8=CBcZqe)SZi>/!0;e&G*+6p$&%f\GuVDpMG6'tQ%r,e\2c]QP<FWBdW;WI^i>N0*6PL<
+%#78<f@%^->P<-kmC7#EIemZ\)Llu<%,e>n9.Va.6puo?9B)V#%!GJM]M6i0PU[LGt&sOph(]\WhOWk?g5dcAp>C;!%C9q4_2mWY?
+%WB!Z$W*emQh/$-+%R!bC=&TJ.pEca=)I[lRZ5iR!md^mVB.Gt>s,_AIBp.L9OD*O"25DYcB/u,'m=,FRLQO7gopn0-h,TjTmLfgC
+%!/"GR<&3('inCCRAH$u`mVWH+bAI]3>QH4!+FQkT/`1WS8A0%,:KYOGHgW>5L=R at 2Oo":*,<:Fk<m/48f"hs"Od?f-_5Qi89P`R"
+%;EtRh.YWr?U2@\IX4(a"C$N"Bl(/OU*i[m!ff#M">?A&N*4TM@)0dflC,r*lZf02<HFTI!UgrtN:'o&+HK3;`>R[%.1MFoFh8GQL
+%HR2 at N%%-o-oIL=1bg]n+CX)ZmUqI1aE&`Qq%8bn5Flmgjs$*05)ZuBYrCPPMjg$G)6jY^frQ/ItllP*"j<\:i#(PLqT<o8MeFGtk
+%dTtS.[[hTm^LWbfgkn-jm(+Q[I@,#T)qcqp5E-<i"`(B>m"S8O4:.V`Kn at r4"L at AFJQL%NM$j'nN-3J2&8Of.:r"H-UW[h-q'h>B
+%qHJ6?3S9e,AU3j\'@PD$`8n.SLjl2q4dBcV`4\pci'(18l]t?<Ul7m.1hJi"d^d05i_r5VS+uF2lL2<^aZA7 at Bq)dX?Qfti:u*MD
+%-ogUcmlg,X3EOJuOmcPA/Wh5[YL:*T!9gjI%I[*I^d5Limn6T@!6%"rdS9''3)]*?mpVI*J<XlF:>"mAS*&PO#V[n5Q]f=l?)YA1
+%?-F)293)[>m]0k)9kGreeE#*3TZn/,nuDj'/(RE%$L3i)8/!,LACNE6-2?`1_0sWf,gpM8nPU%p)aT'bV0#Rfb+rrRe"r,$VgPq+
+%B-N^k7D_7qOU2Fi?nFFOr at BE+?&b*9cQ:F57TIh\?oQI^0dJa9_KpfUMWGr`P$heS[;L&Tf^1jnm0absCP3Og9)N8]R'T/SisE:i
+%aXSB0NlqU9'.m+7+ at 049SpnfYU19N'Kl<GIrp:U5N'uuMZYm8/.7022<l=!fQZtl\mm`To:mZj6jG]mq7"UqNI#+p,U#U-uge=\d
+%-4YkH3<o at +I/&+=[%Fm4STC0SQ,&3!H*RG#:J*$HeNK8UFqg?R7%6h;/oidq%(86=6=9/eID[DTDe5Rk\`Z,R:'mY`>`:cMVPh7>
+%M+"lb-SP)Gof`#u`qbO(.B1G[FC2rYdXHbua^ut1!c[`!"!_j;XlUQPEe>Ua(b_[p)GiGAUm-$V/nYu_3+W?'":*F]XI%!%Z4gC,
+%;^d2R!F?WqUle_$Ub>RC1BgFm#:?Js$g$-idn?o at geEdZ))(.WhFWYr+=_YtHl7X_\gIQ)0tG)Z<N at 9U`=\gC=qCJ"(Y6%koubmq
+%j^MC6&4^tVKAZf@;oJUJHu]>/Sm8Le_NF>6lb6]8jo%h]Ao+&sCrt?Nc&YJ>Tf+Xi$FW_/UnF(;Q&$OK4s/4T,jDXj)k_N&[D'9X
+%GdH)j:E3&2ZioV/-&.+W^"?Tg\THQ-2(k]jJfYQd)/tcMq?$6CH#_>Uj00?Q9;@E08hIH/O'-9hjCAsN'_]C]H8!;ON"QC`ca$i0
+%;mtS((\MX:PXhqsU)EM`Eqpe+pFMhtc:HcXpI$Rp3ph(o*%ccpa:l\K%=YF%[1\,cOIZ3nWb"&@g/;g%%35F.m3=C!q+2&]SrCDX
+%7G'A`T76=,6^X5:fih"fb7P[A&+%UE6eHVo\kI9M:\$UCc&#8t0scQDgru!L.DP;B)E>8I+YssSUQ+q+c9W3PV"a]nN9dh at 3j.Df
+%D'f/sr.pZ.R(=WH-Bn`dUjTLg30;[lBQ#fJa)!X"0AR^%@alEM==<N3!o_s'1j`KD]Jf;,P3gA;[X`iZ[:`&48]i&WJ%<#VJM1(?
+%lOcZcmpYB;OcN+"%\<@/C9OJ8\bsY3[++Ws6<DAtWXEslX"LB.;Miilg1b!J(k-1*NHr9ZiR[,i*HjsGD4][H2Wp"EPnMt4I'?eY
+%geC3_$#kpo$@h5,,kL.m/D(N*Cs>kb0R,;]=tMq2c?CPk`<L1.'R0#A\-H:RKMRUGZe_$NYb23`4qt>R5b\rm6*KTAW&[q:65e at k
+%OX%U+@=^<EH.uqtU?;;1C'=s.O0DjVFD<njK`9**XI^ufR)Y`-4LW+Z>(0OfJlJ@`YPo!p>@9GmEB.9K[gC0CR0WLPaJioLYHp[0
+%/?/)>)q?f2hq9T[5)kTVQJ;62V^9+&"@!e#6t6atTe3NVPS_'7"U9DY]+`PT1sokBMU\'<Cl8'+()_P__pXX2GouTc[eLW%I#Dhj
+%@&E"9psH$M"K2]"=5Z7?;]LJ'rXt<]O-cB$*0p*#(7JMh21`Xi'n=Bg,h6lVY7>*iKGe>nSM+V'd/d4k\Hq,A/FCeW4bD\^',Q4=
+%liM481WM:9?o;=tXR+bF%g`uCh,QMi3Ku$G?[hD^]s=1GjY\?0m%`]9UmfWAIE]>uV at t&3NM+Ob57uC^T)GLu/Y5+uRTl<kUu\P_
+%NF%dk8)jD_.E0jUlB"qe'4oZkU$S,L:XW@\*E,FB"B6_iQDBIeW16bNBI,XL at VM^dVQ[9alC(d1=mS//-fq\Zb&3k\5k&C=#8^mp
+%VmKqtOt2^3Siru$0/D'b:3L(j<;@ss+5\[5"m'[1oc5UTM%ku?^$H."38+3FRj`19S5%Qsf\3d!S5MFs!sA7@[h!OUQ8^@bMESqu
+%A`n12l?;:2QJB+0O`9+Pm%XblIJ_Mar;mU%$BN[b8(FZc56sH&SEHE6D*R2^9pYfmcDRfbq`=ik?4HX=#]?V%:M/J"09u!Nn8[hf
+%nguPaanSEL.B5%tcXB_DJ<>W=k?_WWG`Ej]9<M/*a+hj1&8NRTjk\S9SaO:Yj)'6A!*;q]J_lso27ObHXeG"Belhkf3 at PV;I9+3`
+%.dB.P^I#UeQ+dbiEg7+1Jr^Ee!b)7W*PqBIn%+K@)s6<MEdW23\)Vc at EF,)FoZ,*U-kc1%SQLED_^V6/EB[+]2FmFPWs3oCUW8B@
+%IQc>)k8iH7+hRb*[U#rFmXBat'8=cmC1`11`&f;[qmN%\>I$iWAu/>Yf.X?-U.Y8Vep1Yk8!WZ37Y7aXDQfT>b<PmM0(HpP5"W/)
+%3n4Ka7:Ds_c`9em<q at T*.[&`7QRG9f=Ug<pn3MO!&WkeRdk`9F1.Z0H<#''U-&C\&oo_(a/Beq at A4n([8$;6)]/^A)Xlr$@P[J\"
+%o#,KFF%)9n'93.iC825(32UOki$c at N'B9j1Op\rWV5kDp,dl at nV?ZS4ps3iSkIucC+A/Fp&QaELE`2hrQm_8=1B]iGFDC(':=Fk[
+%Cemk#A<:U\V]G[saSA"4P]HUR'#N.Qm(qa_Q%\8K:'$?41 at 6(iJkYIF"o"q-3E_gXP-Oam3=`GO#AC3SEF/4&=#o\_EXr^soX)D%
+%Hrr2`DpEP![Io(HQEu$SbbC`jUt1bHntSbfIEs:mrCU5B9KbtMStpCb%XHfX1s0j\NkHCC=&V'Fr^LTKdE<el7T!X^Wl^L;BS.!.
+%q(Aud].d";mBB?E;^U&;"$<(Jj9ao;jFlUT6oHft[SNpV=5\*o6(\*Lce<S9)=HbP)UnOG(*.sj>T9^4hNO(a-Vu8\qaa/X\!ZaO
+%%G5`QMV+JHQm+EL*bF\-o+7tl$b!']8Y9"^e.UjrC&dgf;L at VMl]S-`fqsp<*^p-=X`bLU>M:@up*geHp at -;:L'J$Q:m6,+DQ)md
+%Jr\bsSXDp5o7W]:Sd$X2"ed1[IDBA`Qb&kr;S6b1CQ&UT_ at d0?&D"lFJhZcP-i50oE=MK]B=X7Q4g;f%Ftc;i/@!$#:R[BIM%Yj'
+%UN`#c&ZFchTq^F9\TZ*[q#(Y[5PoE9B=D:Q at bM_G5M8lD3\)XjK/q/H`0Jh>I`dNcVYGHf at E<fMW="&tEff+Mr.#dSp//d(hEb4+
+%PsW;D0WqE'Rh):k`#[H\N3-(aNK_=<TV_EdBQ?J\8bcV at 0k8kE`05VF5X"IT"fWe[&*bMk$RLt^nkUa8)35"eKq)c2C26(]WXihS
+%##Nq?c6#po#A%a;l]f:YAR,aQY2Jer_$-=?Luc6Bnhe):2d<@6\c56eH3/?tZn/21l0S/RBa*[,,i%HN#9Vb[]QTsdDKt$s,C%Zb
+%.?j$;m.K=LjCMfEDfh?`01Z55mRTA)8hTM8nf0KZ'(34*?`B%m\pp\aNK<tL[XFidZWaG4pQ9^Lo$5CT&OO]ZqcTb5b2s)p`r%F/
+%//dJ=20Ln[fFZJsWXh6>_>gUI.nFfkol@*bag?;O:kB;H%<c3,QPGf,l`OpU<<2GnnK`bQ[O_/'2s[d#I'%&\k^f7fe;9c3hN]?`
+%c&b^'^B=F\_l2S<JasJ5[;$lCR,NRuLW)e<.^,D'CN10bF\<!)M3nEWBG6C2q/h*tL9h$T->j"+,@/#f:#TO<)f,&_&]g06$ui=#
+%WUJrco;$?;Vki6o-5^U,FJRUeRd(R^Jk"@Ce;LJ#;Rjgsagb=>2o/$i[+r+Y_G#>T>aY:(%G%R&;,%A.'Z'TQMtOp%e\HUK.CF(j
+%!`@-4H1k*mMm5'0Bqup',b%'mJkfK-Wc?p`>jn=4XF]1Q1V&UQr_`j-IoAp%a0_M_UD%u32JNGLJM,f%(R$Xi:=V]d+AcaXesos5
+%FI&ODOViUm*IAEe_)ZgR?V,BLPpBf%!DX<XF(PKrN]CUUd=@kW9l#d7*Tm:oh!BRUg8PBW]DJImi?#4PfH3032[J5UE&M&oI&`4k
+%3RZ:lam6Jd,6ruD?9b#L1M\@cEWUb4'@4_mp"Os at YP#-*A-'$^]`mq=j4(?dbcFoV!CB@`#Fh?GKY#jgbE8I9Qi`8oT+Z$:j``F;
+%V\Gc;Q7kelU.B7a.NTABnq\sYH3?so;(bS3i1,Jb<p+M\a>^$YK50sSm!+e#)i_L"K.`fBf/!p@'^IitnXD)U"XS+JL[NC0.5G8F
+%%'j5]K9Q.mR4iEHHrQAMI==I-8Zjj'/9nigj`?%JSD7E`0bW:0A at i:TL0/47QBk;M580RR`3t:sSm9Ipa`fnLeaHG'ZHsDTAl=P(
+%*n#CIm\t$C``U/=i/cWeATb__8B]KGUFp,<UPdddgNVTFUC!S<qTX<PeXLR#K.^S\05.cSb)Cl6L:%n(*P>i3fmKgp4<lf<*bHJ;
+%qL62'$$7"UYrh-9.Fk:>8<)2$WgjCa2%f?.Og!Y'2?.S_U2.Z0R*0C^A;pc<PjjM at K:C4sa&+GE+&&)G)NEA7^faC7qg+ at dV"E!!
+%g1>VU+Vk`]PS1O.f$UR<[%)4q0%JU-S34^D/;+Q]C<'eZ2idL'F;3B?M`a#6#u]i<"8d<WF:aqQ@]t(%WY=3jUpZhA2AB'X85.o!
+%q;>c5_ODq:iAmn%e5_9<l/P&q,h9ApM_0jQP\i4Zd9LU'!4$&HeuSQf^iQXnM,]'e8h+,F@(gsL`)dXoiFtaNh!TQ5cb=p7"PeSm
+%a]W<2I-LnM#;*7B3l,Q-9uuMRX.%m[+pM!J:a:3e(B4c.8gI0bI:u at m\HM<%L+"L0"+0S>AOBK1aZ'<4WCXt<^m,o1-"&bWIqh#M
+%6$5sG^md.5nc=Q at 5C/;UcYW=d at W.`:Hu?T"i0=th-5g^sGlAYKT%"8(@;F"hm/"Ytna_CF8!(ah6.%-U;ebT/+-17sUE)$_M7g9`
+%CtOk#3#uc+igPl6/W=4gU+6N^A7&uPGUVJ6L`?#29N21RL!h\RnP'fWjR.4fSXp3Q?9;8[!9*gq%*>3;62DGS,e_^,'V/0F9TjG=
+%[_u=,SCcY!nUZJkDFictNUs(q/0#J>HeJn1e"0;$p<l5+o]>Wu5G`$TmF^l+C*QkEhZa;geL=??ani9WR/!(JN/mta#!e6Fi5G)"
+%_Q*MY%OG(+F1F at CXCZ:?gb)T0k=SGHEc1FqJ$i#PD;a*ia\!/bW$TFLIV_OlLV9>8X@(4=:7cE:D^uqjM3UETC-QG#l?A.!cTtel
+%#H*l93l at B7dFW6e*$G>tgM:oPggM?bp1PU6gM+ET_:<S[@!m!h(/blZ$2MMTia^->]L1+MbG*Sg`+TXs/TYE=UWAl_n4XlDad/0g
+%!Smc:SZH6qm,cs;7q;A:ou,Idic_s&,FF!A`SBL$^+!B/;%MA]>LF<*U_LiEP6'`D3.cKpSLn]qQb6YAd6 at GqpZ+PW8WtU1;]f_B
+%2!]d>(jA,q?gY at s_gG&'So$Zt22ZpV]^g5^jClm,Xa*tCF,<5oeqZDD.n*LJl'qNqd3D4P\F\.)-W'fs?SONZ,4QG\qPmNF!I:_K
+%)_&banFtNa=eZnI+>9CSceD1BEj6.HQZP-fgM_i2+L'^DdM!q(WqS.6j5J<9.\5X9d#n`BH='%D7QUDjLGJDN7)rq5>Y7k==FslM
+%?_;rlHZJ&]1oX?G=g>JWEW[gj7&?dB>rK8WSO!-g_75aqeX$)Vn$B]qFEl8^DojDMimC^95o"sn;E$<h at CG7LI/:hgYk=?d[_K30
+%#`cUag^h^=bM.D=VMlK9[*@[N*2rr%N_5TjHdW6X(biP*j.SQaF1U]Zhl12=LP:t(e3j>CV%9`j\flX&.P):l1k07O at h?"j&qg)P
+%4]eAN7+--p:323Gaeni>8qLiOCB8_r7)R.d/i%o3MA\<.B(,9*#^E=2,lo9R>D,R)-S0ZpWS9sG3IfTkE0Bcb/=\"%,nd9A-rR2i
+%B`l$lr6"oZK1Wb?A*lKA7Dq!9W*2'.UmrENrq,8m'8#S]Q/l4g3QDg[cjOOZfn`1@]kk1>=dTHIb0!cpp?$sL\!l(*&n,Ubc0n?I
+%/bR8C>Pr6T6JonAJG6HB9O+AIMj%^%i_P(bW=_cPH07*Bb$7^J[eQp=k"ZJjan\$lYm7V#Z<8DJFL8p^d7HT^%GI^'Bj:#a6:!Fc
+%a#6rU)O0'cH<H1<GC>d0h<80WKn1CC7,!6;1B"qMg'AZjDGMG$dpiO3);sI&jNQ&4qZttoq<DI$mBi8t#2/0$p25<06N(2BX>Y*M
+%H.MgnJ\]o3PAa#40;7IXGtFDrI'jWfcmX0V*0S9[[$Ke&T7-9W^Lm:Y+?n"#RD5P:i at bs7[l1"MQQmCls(%O=Wn,`R%W5bbb8t76
+%.5d3+Qc%JDrck&DG81pRJ2^E(`5a)-2Q?[8GJ6X/f?#Cu4m,:1r(Oo&\QVOkf4E[ejHFA]gL<,kdsaTV.J at YR<(RD[L8K+lXpc9U
+%\8(U"(j9(Qe.?\@P at r42pYiPf^<M$)BRg'H+:[puKl\YrQNVn]S[*gX,]@S4ktlg1fc$/ieTWe#4mednPWk+nJgpq at +9@=+!'D>P
+%TKSVakofcc-H;Rf;nTN0Y7Q5G69e9F8ka$3gpV;;cZ2PRalF#q,mZ#PM&oV&18h`r2)cU-:c&EqeDUBbb at 63r6T1l2j9"V9.(U$_
+%0l?J6ZrJaIqlK1oCaAHNH\fS3BK7&Jh4s,O"LQtVaU]FjjG4&L*Tc!j\oQnFFUZo?"b%c*@0+$cXas(P4]q8=eq9f6hf]CV(TTiF
+%4]^8k/Ja)?GuL]HMmY1]!r94- at 6!iX"s[sQDJejb at CUEgb`)_K)u*'goNSE@)A/^&OK#(@1!Oaij):i[kl)WVE3TZ9j90A=[N#X&
+%Du)kWA_f];1)4MRa"kmWkT'dd=T2!'ZC!AU-V1*>]rqae6I8h3[KH+m=V82/0%s7eFJBlR>eXH.`-[]ME70et2+CH]'D!ip]HXOc
+%2VF:MB`M"a9ZWfZDJEr"6B(nYlFVWk&6QSnbpK;oG"s$/[WG`T.'1(%mu#-@%1Rr47QJLI5cdBPhj'q/>5uc7>;>/5*0$N:8$4T(
+%'L8+-!pbr'J.P8KK,mXOX%g[3+,&Pc)1r'h47 at C,<._h9T/Wt*ZL\f%Ea;XOni$2&e()KWoqG##3GhPgc"^NDOSI9u31.X[ZI32f
+%>CbIVPLt/h:*k:4ZHq#NDDjU!_ra\6rdH5;Y>J5G$.U&"`IUI"\(Or^&>0WDr9+<%WLGhoXT[*F[&BEeV!rUcgijN$8)C'OkG>N^
+%./'H"I$<5M@#MJf6ZmY:l^,q]cTsIl]PNJ/*3=fEN5-^()P@[eRt&B^MpDhmK$4-"J\<GqC8D$"1Q-]m5GI8[2L_GDEP-hc`.R,s
+%_KIocI94TWL5ZZP%m/V/D6_QtBP!8ZaD]8l2P1KGX(Vq?=3cK9]VU6rh3(0MSHdHOAmk(&d3-!^fMaou?&m&`b^b0``@g\+jS'p'
+%"c+IX"jZ6ufV;*4 at OFjZ/_Gkii^O,r0_ at mmHZHl"ZCud7q(u-\X>..@&36+p[hbCS1<ACAp8]6K0JO02PRS!<CR^6nK.&FP#!lDQ
+%0<At9.&P@`r%iYZHW#?t)nQ!1E+BA:k1o"q=e!-QiIin\&*7(l(`OFbiTmOI<:tA$!-]h4H\F9&T)T(FVX\&>E$)Umq%J=&.[KNa
+%=;qIZZ@*YI/AC[)bCAKmFgKqhBR(#6JbFBX.q;fGg8Wu^jj:eLJpGIcXC^+*K at 1"6,#1$dStr^M8c*rN0G9Ud at a2ji:DS(NlT2l"
+%,6r7!.$k#!;4!p$cN^(3YN9:$`XXQ at N/q!hL'p3,\<<@;$2Xrs5t[&0B%I&WI at 9A`>/"%7YSASLi$QH;`KQOX]NDq0Cd>5"fTt#P
+%j*UM"8C5V,GNUl7'bQNrW\4T75PLl<QHX7<b(]Y'3i,#7C.j)PXIcWmfU>C3e:'d4h!..c9b]p`4n7`\@g48VG]jU<eN\q.(Uo#K
+%-!c$di63HV*\$JN?AZX$j7HTUV3-Zl?XDp09u8tY-CM#BPPaKSK_r)M/h*L+5t,q&$2/@172>5`^quNYR1^i-:=AZ&*[7k0IZI)H
+%Kc(1Q"Cd&WS3tk4QT_7[9h16PSO5,oZq'N7^1&eL`-]#mCh.]uBq,+a>NsnU(=I%3:uaZ9St(0'+m`*T4?'.)J[$f1bk=s#]LC\$
+%[Z.Z+W_R;(;+e6\hK]0RHZ-(W2fc at sneS)7QMrh+f*RsW&kGMVnZnV7CfB63hFpNb[QunZ/'ZkBH>k:)klH']\T6ot/N'6.#JVR;
+%"JGtkQQ8A584Ud&+$Sj*\B],G$A\lE>6HXP=kJ8^`q),p?dl>_ at i\Gj(n8-eg49]J0L;D:Co&82DI"e#Y^T-M[(^O\FU;N,MnXGQ
+%6E\4S#5RDE?1o*eh!_ptG-_ZM8V2V$IX+9WG,MLa*@U'?H#/gYL7Hf+:\jX*irb^6R`KcGPS%#>-er'SCtH%.,!3N#AlJePhIq^)
+%$%Fpu+3BcFF7+C`rDBULJB-`X"XUnk[`&NBdDsJG\0^1qa*CcQ86oiS.DK6eO,Scsb2/ZVlTPXQC51V8.V8p!nTcJiiP:b8J?!Ir
+%))Rk]Z10UF%#nVsJjFW3(\KYXd6e7]:T>o2SLGRUB$&ZikNDs%q*V+f<6$pB^sTUob0Fs=Tp_4=[S3suVKlt%os+ICjjm:]@oiB-
+%BM6k94tX4."GYD#J;kS!0$, at NScT0nY2RmJ@p:aD-l*MLd[9>I2$_J4i8D',_=(<*P$T2L1:KL"Qg:6&I?M2Uc*Z^?FUPRXN42b.
+%h*sA\M-Ru3N^!Sc/PSERnXoM.6fsA6*k at Y\l?=q\0*u8?%TcsKg_UK1g"61CoO0k11jo(t>/GYANsqdV#TC?CQRV<ZJSod'd1LN:
+%'SNjb07O!'LIDg&OD_/_]$SU\\SG(s=XlFA5qYsMR&dRG_K`U00^Lt)VT@?Q1Ze5SBa9?cEsdj1O#(jc06T8uX,)Wn"J\Z:#c]2%
+%=f;CWjh(b:Aa^RLg.SPF&h<6[,]d039"d;TDfQYTb1GlPYq\+=:Z at PY5.n0>:I at 5-"+o?@6r$;(>#.iG. at erc`u9J0RiV at d)eT6B
+%5H/f9(C=8"Cr^93lk.Nhg at 3+%P^WA8%JTnJF/FlG;eN$mOr+:;p-b%-h!E?<_f)2e52r:2?`36B%b[BK4FV5Z:?$$59hZP;5MPL-
+%,5!X4,?&8`ISA:P>SM0#p&(:-YZJHr'G!BLC6h_M#0WX%F"h`"pqFLFSQ"o&RJP[(h_Z]_gU&Q"<_t7."*aEtP at t_Dlh`K/*!c?c
+%D#EakRdk^X8NtYt9pc_8-`JM^6Kq`#OQL+ha6'_k540eb\,F5"GRM(68V!q`F=RS6q.A;+"4T8%AGO,b#Z,5YY'5Lt$p&"gan[FS
+%$2"Q%Ihn=OR$]%p[c(JV:q%"7#]ea)>Oar'P2pL'd>?Ij,HedHS(tk*0;XkP>rN](**De!<bmIl,I8CY3?A4F##HF3Nd3800lg]#
+%rcUq_-iH(6mb^a8O;,h8*#;H'SQoH8$02n$$i5!&;[[4kW$@\?+-etE>b:`cfE>toC!>2!qkZX-@*tEf6L&m71!,\R`b04BaIYnt
+%GYM;t/eSA5TCs at IaZTT.=;"Ll_^CUB!;ZE[A6pY(%"/,64Wc39BA$"N&\($A1M&HC8"V$E,:upA@*=PfA!/B=&!)oB1*>P5S7!A>
+%QB7?XCk;Ae\u!65X*Eo-g_T$[ap62+-6D?%[jq29,h,AXoG7rLEVq*FGM(;?]RD1EP:cr%VeA?][<-1T\d:%5Ya/Hmr;6cEcN3$!
+%3JE@%60n.?*YRSS at mNef<kntrW/V!pU.!p`@cRD(%Q<UZ&!dl(gU[QJ;6edK_U'YU)dE[rUX%tLj at f,`c<`>@[NH"6blrYXi,8K!
+%IH:c!4eK8eod%5nRSoW5(ErlRXp(V,"8>?K,[KnfZfuas"]4N)AS/Qfp8om14cD,948J8N:u%m=f;Uon`CfH/D_J:RLZ6oX+I,[E
+%O"RY*c30Xj(R>@GUC%>#>`F1]$O30gBF3Qbr+q0IX6c9qNkf(2U=q-:[>l`qXdgfO+iq(u5:kl"+_EjZ**hPP%d]W=SKG;$<;rG8
+%L1J;1H:,27fePRR=Dl at G?b7'%(jKJ_NTGKI\t;):0C-+-6X[*CF^u6uHPB,U@)YsgLRON?JP8T6%;U9>I"p.qT/FZ^'"ki!Y0,5H
+%7eK:Y>hV\S1sn/k@\L(pM`s0$Rl9a;rIJC"R.Jj`/TNV!I5ut[r1Wk2XOB=.l!08&8!TGSU[=Y8A*7Nh6k8_/9>LDXQM9[(<_>]#
+%Jn5!NJC/*P^n-J8UW at k/'A?0mq0oFj(T;d]9_-?h::1\TGJdub$AkR`='Mah56>Ad=mWAqQI#/.N at SH&]f'5<UCU6<P'XUNd%^Bi
+%*5-a`5k_WFK<9Zj"?AY3FUCXR#RUu)@$/q?8VsoRH_ at JuZ[<tn;P,fc/drQ;DARC[_R[d(Jj^Xbal^m&q0NieWJN&=9ss<,djlm:
+%J<!],j\%_69PQQ"k5E`E)&bJ)J75Tk0GN9*O$%3NgTpJ/RB*g&B;Ak:r]-qG3`q1,>kBCacVnZc/Fa>sF\AN9]*tTRjJ!C/!*c]:
+%>mf&\!)5pQ0 at uGT/4b:aDJ6M31M2]]cB\=#nPhb*Q&&01\KjSI&4<%Yi'@?r*V!]%";)5+,o?2M69PsPo97\t0^r+aCBFeIfhG\3
+%%_e+n]\4>5,4u1i-HP6bDYcK1]Vn[.To\rcObeT1\SHmtotP/eqVaB'Xfl00]Hl5W+^TJL,>jf,jFNsgf*g=+k?p0\BFJsATPn$X
+%mJK=;8O(]5N7RQdPbY/_$/:pYZ"7h$N[jnmY4b.>03>Dl&KV4F(J1[gRcO7)NrM$haKeIbDbL;Z,<G3LEN)Mi4"#^6?(AqGlOW[q
+%P59ZASB3 at qlunDsf6h6n';0ckEmHC0JY)_5Bj[[s#cb5'_cZ(_m4+rs>#umQp-Hr!'7=VL-ZhOpP5B'T++(!_f=5h2$"HOVpI7mC
+%Vg7-@>0O$0\@!O"k,Fp&[!h6;80KW$/TK^AGKY8-&:e=r<L`Wcc=3P$:+3T,*66=Y,\As;LOE*_MUe+&^O&P\rrqfZg9HR&PgsgJ
+%P,%WUCSc-BfQUKI4>F'`r7%b"]CL9U&!T2D+.HN#ijhka>X$uaT]is#!nUu)eILpINs'9j7Z."8>RZ8P%NBHLl(nXn>@T]c*,J2[
+%":%A8EicU0Rg:$&^T8pHSF`jr[HHV"H&/d,b_91MeU[s6 at SLfI/i$7e;&*2]K32KDE$KXtQbJencIZ</k!dkKE=]=T#9>GPluSH_
+%Ru`7[(2LEs-,+;,BE9\E4#u^S$pa>+cSht98[^KKKo##e'smQ9H,$,Np0[dkr5u;+qXX'aE[_JcVa3a^"#Z6^bUHV#Wrs_KG.6$>
+%kR/=pXjC\:<Gp#U;D`Mu+Y1l2Zd1Yt##*8;.ek]/F(!8i>Z1iHOOHG`Q*9($e^[Q5htfp9-[KbA9]g at t^kMhKAFUAs2>;H6S=kMZ
+%d/+MY)d?[M`CSZJrj`8"8LY%"Ib$Sf\=t/$h-aKdrk=9khX"\dS:Y/0*G`(F8J&MJog;e[c#_1FCdL at N[;D]/=KAc"J"d+3 at 96;.
+%#7pbuP70SLk#U]D>EnCYKl&_V$W"q0q\kPsY0h]0D@[9TCO+o-VEY]D[+e>>&6q=l^,3tLHehXeWMVBq[8 at K7W0qH>.J`%"WKu_:
+%_LU!PlI_YTk?%*4P7?h at n1qEB=sVm44ncCH\QRBtG!)./)afP],`V2PJc'DB0d.nu.@#mT`I6$[JUBPf%XLWk3=CPZI".k%,0EEu
+%4EXi(en-Lhk8H?,>phg at a0/>`m<K.!1A*\E\.e'MnH+SaH5ARWYG$9b&1qAK@,nT:"Yr$rj69n?)QUSRNpeJqkOK^:Wo$B>"Qu8*
+%Ou9$4>jY_?4l;0>IcGtKF1;;_:(<-M_D#8IGQuXFc at o`+KnS5\,!.0]rCPXV6.IrO?V1AZ;E9oP5W$6^n1L<-iil2b;!`n&Ep$MQ
+%#cW%$Bj>ds`V]<\W2t!0?Z+lEF10HsTW/0jl^s!bpJ_MBq6r`r16aePVJrJ9#SED>QZnV>6gGgS`Kos/.+8.nj_:\+mebXs at c*.!
+%Ad.R at 1-3&3&e$Zu6.a<Tisei[FS/bQQmg]8e!t\;A'0up>>l4_q<jMYAC/]",J;jfSb'dP%=#/j"O!5."\)RVk,GGGK'`ZT_uVN.
+%`ZX&2M;EhYXP)?;A0>m:A[59WQedmDC163J.'-Ter2.I.r\?^QF/R]GXrE!^HELgB2J\bPgB9:Ro_C,,Vp2sG_>5Z^`1,N%*@O^7
+%)=_oE0P417qY3U)?rLO949g?^AhB\)'URcTb\cPgeng(t%@_..!NkbGnhd=>r%(sD:p=Q09mkT*@X_'pBS[_?7toY+rU%8hl#rSt
+%6Ro+_1G:?=5C`R#9H\L]UKIRPlJXZg%&GS$8.0 at FC+bCBT/3^EFnM2T8iJY)QnSr^K)jtThji(!#;Wb?s8!s[VY0R"heB-gcCE`j
+%D:'-Y55sYb,e0\n,$N7Y3,.\`BFaL2\hg91IkEbL at 0?A\2,jj_-F>+]5Mn<>9E$KhBL?mePI$IYm0(j[Ro;fc^#tTT(7O)D)b,[1
+%q,4bi5%M?*%L6H\p/fkA?)5l%b*Q/Qq\[8<C)ud$T(@7fA#3q,:l8c"Tn02`jKU:!\.U/hc.:]3K1oVZ)*WP)pi-?ghTJR0m+"qW
+%l0Ngn3KfC%"N#2LcdPA&abY3g?bhkhGL2H`a_RF/>W\ia?>eW"l7VslK5Y+^jW$CO)L6$M[IPRi:3+ at F#[8bT[jP%$UUQL\Y at 1E8
+%XH=`pD`ua"@5WcP5hp7J#)Cnl.E1TuF7$>_KE!ZigUk5!hKWLNWU-8b?k;M+>&Z_WSQ1WJ]]kq<#90"/<@L*XQ7%"+)FSVeE=U(8
+%<M1u:rV43DI\,`PSnSa^*Y`(\_a at C;E/M(@fE+/f%1>65b+,d,H)2VP"oK@'(sD?3%L\kUNoA'?D`g:;/JbS/$mK)?lgu at b&EuuU
+%*97c(Q,758CMeKE at BnAE&`sPkLrh"C`KJr@%/luRb/`qVT73jX"tG7l4Na.`1`R>Pd<_S)Ah*:((Kem:+7;LeAlkR'&87gj.(CYi
+%4VU5SS;"mOqgl at Oo\=\CI4L>'E!<.YI^M;,+$I-(>\su0MOol8eWV6rR.9;g#2c`/jO)?$p(tmdVP^=4feZQe^Q$\Y$F=>3jXm%5
+%=XjaFVST7!a at 1%cpQAr>l;Th5`"f@,X#ERN-dh+Hm`cM6/o-XL^o,Kp at g%,IX<`Z"P5+qYcDRUE!pgrNYN/"rnL(ImFqh^Pg7rd?
+%^SQ#')>B>ncpae,W0;PTXt^qjB9 at CB9!W]\,%$:f>!Oi;59j`<9CAu?N:*@UG;CUOfHfjsb1Au3X5T``G;uKLAR\=Z7Z?3RF/+$j
+%&ma<arM`D3a4AeAcc\K8S64]u'+V%DM"8dfr&_sSQ$AJ7K>To;E+`C(.cT\YF"s1pe!RIAE[b at Q,$b[DbSl5LQNkCl7.q:@F'qo)
+%^C><5^suP#PL'_<PAiG3-:#^38n(&&Za8I9*DB'$NB&#;Ve#6q at e:.OFb4cI3s?nMoA^lT[tJtcecT'W!1fK08[=8qc:fdc6r5Lq
+%,ecAFNQa2dTPM?n8(qHqr"&AW8N1jd=7A\"_%0<dOjoQ&SGECo;>$WOA.rM-9XRJn,(ZP(Lcf_^@@s.Zq8jFSZGT_bEM[EEWKY['
+%>\jX'b'l1qB4i\I'Ld>W;-K!UkMRNGP(4'g5V(X#S=STTRMS7g-iYPJ`Ji)ELd7RqfbD'P7^uSp$hGQ at bs$#trDU_&a$T-<Y[l'q
+%b:2kf]/9U%.4YLiDI)3kpup\bU7X%UXa*,[3c[gF+uP_FiqbtWS+k8#">cm-[&M(C4D;:MIGKqg==OmY8[O'5M^8F,@(!&f<u-^M
+%8HEbO$n+gNBmGk-f8m=#<+MsSOmnt?.5!:7IEBI at Q>_sff?Y@'/KJW[d`&]OPEd-WGu;e3MV2oedmG:^<=Q)=N8<Y7&_mGSlg2m_
+%^S8G5rO\-8"sT6(M?[eg6pE&ap)\Us6 at f$n2IlZCUd4\`SL`m1-RGE`-M+SCSGOrR#4I\9obIW.2fe#jdH7)^PAHZbWt/#$T<!Yd
+%pO)N1 at GBsq=/p,i#R^fn8S!'*+Pmf.MC4X7gOA8%?Gh,qh)A%N:K+AG$/N-a#Ya$B4*HH80*Z>Yrtjm_b5I[!FKW_VHU$ouF(8)t
+%>QN6\eT97.A,9YY"!iPX/Q)4-CF;;:bT30a2si:Kc<mIY3;#INq6P)ce%O'ZKiSM"#$@PgfrJE3bA=8jWA:gZH[#cmhFbS5-9M.0
+%bE=>'T4`OegU@\bR6GNZ:N?huMmHLl<$C?RX;V\\43 at KVc:sbfesfdk)1)cB]*Y. at Ie?e:.F'UfnPX!3$F_a:R]Fg\80PU2A1Rb.
+%&d2-Qjm*^FA)\-s[Y^"trKo+-C/*teOCJ1biPn#-E;&d(5+WZo0;`]ON:j&IdA\Sc-\@O8o'[LgL<Bm((E2?K!R%OcFWp=>6>O]^
+%j,Y-M6D=7(Z"SDu$r);pO\3PQF7:T?%I8g[9Mo,%agL=%pV>IGO?sE=+',Xk%3,*j,pf1eoN'S`&T1dVjcF9Xp&%F"RemfY)3tJN
+%@5NKdoke)AVr?gA0MU7')A at .WUu.X_.d#W5:nT_q6+sNCi;=jX>Ibsh:0o^RD&Z5cr(,J8 at lpcTkV3qE["*"qOMDqT*$K-FfJ\o+
+%=:?e<49+`UI=!\scfLTblHbV!3_<D(A/1;Z]D:p+l*A3=c/JM(U(jY//oNKS*'QDt>_@]ogrZGc]FpQ_0CuI>78p5C7l"Em//<rQ
+%d9KWLdef at -Gl0!T2&:2RiAk9.BmVcM1D^PYAKgel-ihh^TmNpH/aF[e,c/-bQ8[K^BqLp/@#fq/ZS(a292:977-/`>p=cXTHW)IH
+%]O^8`MbPPA=ZVrY'd-,g<+o'P)//dm5ea;\:;bkW.GH_f,4/;7R;D.9)50hXl0$P,UBU,r^;g6l3u=+J9GkI/`GFbfF(j#or$B#f
+%n<e\mhtkPq7!Hj05M%u^:_MNo*0drt6G4n1W$IeLPlQpdPl1EqcJ]49=TG^7lg:Va,Vu<.Q8G2teu&"DAo!_]KF36T\J]]GB&_'.
+%XC=HrbW#NhQsuo'3F;%'H#&h]&4PO&`:t5qND:?SCc]=^59E==1j)a:MmMu4W,*8k-QadUXo4ge8 at eGAnEN@,RYu%0L.76U`<1G1
+%'p$3L-YKsBFCKNapp;U$6iNMV_jhNJcJY.]"tkZ@[;DB2^9e^$qX]%?FsU$47G+ts(hj0^[[\5S*^?8[:OsbdniJMeOd9mJ4quLW
+%"U![8;.A-Qca1KXr*D]Y7+Lr;4sC)A^1T]IcGmki,+5lAIgS04^M?e@#=uTna7prAE,O00l[t=k1eQRciF?<;0Q-%DQV45>Uip<(
+%2eA=[nf?&Y]$?i]H\PI;*$Hf2U at L2oSP7pX(:iPC]_U1rj3=7pg:mGF=XjR`?IVRsQa,J]T,a>IR7Q?<HoS(@rRC9_4"gm&j>G:^
+%Il'461`8scVnJ1Bpg]iJ)+e2WOK#qcQ4^28+l&A"XLp=okKfX)[Zb(&??T4![#%%>D4>C2`1SB:JpE.<25["]aprgO#r^IN:J(uC
+%5#[,q3Z2D9c6V#W^u(K>m&!jKbHT;%RLaTlY:JM,-IS!"9/JI_])1rfMC(5A&h&U-JWS?N/[%RcigZChYFDh#"ZV]m;X3GgkrEH;
+%Xa)'#,8YN%f!!//m<M]5+KTTiI@>XEG\SrY>O3YPI)FS0m.t]D'D/s;,c.j152[9kZr.N;pZY`jlqiGmR&$b)2W^K5m!2W0:f!p+
+%<R!u;#ONd8A9UX*'[BTOfh*.WE%a)33^m8FrhC*dB=";2kmnCSA[@TPIj at p`aT<p1*kJklDU#(e[%5,(;MBYN?\1Moa2I2\I=:ai
+%;j4m?@[',U at S5dq29&5O"Z^?=db>Q0je10NLOf7CGmP.h8_c6.8NG=ubaP)K$,'1-a[a`j->1=Lmce=A_)`)7PNC`hK!7W)>phhT
+%pgU)mU;2OfBK2ADp3VWMm_#G!a_F(X!l+0rohP*2/uGDu'4YrNpV0Q0`0!#X<RtjtT-o)'p=MIQ)^0%3=b at iN71PlNcuWpokC[\q
+%.qUZJrPmp9e/B7s9NT5u?)"[D\q)Y.Y1Rr'[-OlM)b3K<1N;_Q'+MXi8<!uY%KE(SM3"`Z8skguq(TIQ.o].s5]o([E5Iu(k5 at s4
+%96HD!^9Zrs:0do%pOiX+!G;c:m@<g<4HJ!;De[9k].::618M*i-I_:fkANVT\rb"WQf")?Gj.6[&8)ipZ$XPLqDA06ilE#8qG%ir
+%N at +NP9cIeClk*/3Xra(H"Xk26(>pbb[,WDnhG-`'PAIUg=:7//oggDiBp\!:UQr"(f!;-+9L=*J>5>Z%AEtn`+SP7bootX(:h6Hj
+%(bb?K*`^@kL%XeV'Jm#PnZmCn#W&n>LW-aEDq9A5M.h9DUni8hE,s2G:2Y)B-W`:a!5C75#dmoSm+l(2jP4&j0m(C@<aAI_0`,_l
+%=4`HXP<4BaH(E\h4FKg4fZ6"a2-a)UDY]EG'Ur3/$+U:DfB]#-Yj&B[O+jl+NpHZ-KE&$Q,a2)U:>*,AF;>A=.1u^=Db]'#^WQF$
+%:GWOB9+oeS93n!^RF6aj7$?-pk#=!C,69_eE)S,b:OKDss/&onmc7l2rH;D0hK^]29dq\3B!GHN/OT>D9Q:J6bBZm<Qm5aMn9;F@
+%PGQuj>%;$MXf2qPK%jM%L%e,%8dU<"?[`WEJ;p[UJjf$g"_;CH.rWgB%Eo+IHYFDZ2 at MWq94K^sS8OguEt6>99dOPYkc6#W[U:=l
+%?+V.p]-nIT*.Y;bY_+C]D.H&[49,8a?CZgjZ\\Q29m/I at E0/Q29(cHR")US7=N:UO#O)b`qO3M8#GBN"', at U8hPS&5AkC5=%kSEb
+%M#f%qNp4TPZ7+<`Vk?t"alO&W9Er`(rqu]C/p8<t]k(q3h/dMVJtGR&U(n;p?n]$W1OXc4>5A-;'\]g.F'lJ_;ZIP\&93rP91*"e
+%-1`1)Ic^PS/St(@bPKEpEc=j:m;AaOYS(4j=?H=Aj]2B'OigR)F=)/Y-`)hJGb)=,hrO6?:9JOMV1M$$ep?diaZmd%#;cV,J#>]s
+%:BX!kU^L'#P#=<=YOUi5Y2?B8e.&^(IAH3l5"\;dV^iSAr)7+\OUi*&RWM at tHmb9b8u-p?O4<W!bHq at Cg&N4fj^X1G2NlsrSe!.o
+%H/lQ_`]Rpd3A+PI4NAZ]]$:luDWm,66*M-+8_I9f#9VAs2DOCc&u#Uk/\ZMr$QAu3gRE at 6guMmR=lEprl@[p`&=`&/M]N+IJR7bP
+%rgp=.bT:bqCuD.@>)j?CHTh^$Y*9?;Z.)-M2_QSQ$@cE$\hP?k=_f:uff_Y[TT%=@Vrja2 at Lco<QWHR]Z+is2MU=O83d::-onu`<
+%;k[;bZRrd"SFV3/,0Tf<UmFRWO3VU[a[k[U\-D>`c;(T7Cjf,oBN-WrFtf4_H'LStmrOBaV'`h-).B8!ho9`-f4(E9Gk1.3Hr^`7
+%<eO'>4'bKUR918Y6d1rAh[N7,!p-$8hS-A$?eq1cLn7ClkW3Xj/dM[D`-/h"j8H*n0Rb\^c6+=fRa7>]X_D!7n"\A2-A[ln'T3N$
+%mcF^sZ,GW$K[$B6Og?uEW`\Jn]KnHig>8h9Ua;A14R<N7/tkTp3VU3'=Z#Z156$$^eg5 at t<o"c)m=ut[K?0(<qfU'i7"+di]%nQ]
+%W1L2]#C3tJ(M9aN.BKk2?OpV07Dk9n9!AaFOC3nbqS`keB_O_])='.A<5D7R9.>^M-$)<mihfZ at FL+S-j*@?jTA"'bM0319KH!f/
+%g1R8R(^-qS7Q_mrBj]+c9-HG&Z;sf, at f$Ff1lmZ>p@*P6Ke?cc<[--PF1sqhd;ksEZ\5S at -"TE?Q@@6iH1`r3Cc'e)I;EIEM0HRY
+%QkC at G19q(K4\$XX8Z"3Sk0Y>Ap*o]=f."kROY'd'GJWcCh*Wgg4*O_bh#tdH#sZNseg6Rh at C3HsqqWeaZ+$77or0JLLMk)%>G#$9
+%`>G(*aU98kWH;'J,g3cUWJ="75$b)\\M5QHc?'86`bYI1,Y`&0Ts;nJ;R^c<d-0I3C6AAtKe7Oh5 at o\B_#7#3C'm(/iQ?ACZ at fV8
+%\cj[fbo\UIU(T>]KA=VN[H9&u('o,qNsH,mWAi;F</L at X53miI3OL+hEEY&@[4/XpOQH'_W^X+WlsJDsHCbZKJ)hTXB(+_R9!V8l
+%[Y2A-T+NE+M.>,SSppD1k+YNoTJH`X+!r[?T[D?78$XuWM0<977h1G0hEn(/j%QaWek0b$jZ7bAI+QgOCRud9o"eLJAUUg$b7NEV
+%Cr5A-'.^s]Rg._M8b)olG?+i]5:fl8eijf]S&H+ln?S%\'-!a<P*hL;ICWp&<]Akl&hBGJ-BkE`@GF9(hlbR]6F1]n]tV7Z18h:k
+%BUAP#??8l8$%D/<.,t'nIL<DbK'/%a4D4UYgS(Q%Chm!J at d>%*>foZ<YSW7O&gX^1^J?Cb42eldM^A05)`]bV9R/KUeN%`<`DT`o
+%,gFn1#6V:s#ObR7&0A<:SZI:o]5RDm(-h!EcBX<,%e:ZfP#@1V^jq1fM=CQbR+-O/?U);d]S0bg#5aNC$_T]Y:-Icplq!KsWMcNt
+%jr`5,&_PpFo"!mSF0%OfoHS&;503W/4C1*48"`jp;H?@D<ni`sX],emE\!j7PI9P:pgi(?-!j-*H3?R1G2fs'oM1b]\62C:jVSY2
+%Vbr`+'O5V6"^e!1A4D4NDA1#?8[7?-kMA)GWV^eQ;6t1W?PGgR-,7c$ct6&oI:BRoq,lko@:e#2:HH7K6AVJ*D8q6;At:q-q2.8%
+%Cpm4B!6N=uSLC1HnBoTs`Mf$31&]l(>>p<Zo^/i]V7A9g9<p?jSQ):58$^RG`6;Z\Q1M?L2]f35FOE:nhbL3"Abdn+#1Yk^IeMe<
+%nSKXQ at T.4h4ffBeOLV*`4.ju`#5bGAgs&_kr]W,3i[/?p%!-sPdnjul<iO8o^MjjE.*JlRDi)7B?@XUfR9Z9\:CMccII:[hjHZR_
+%X'MW#Nk]tJ%*]#QYfh at oNkb8*bkcRYgj(l3^QDPRB*@5cM=tR9B0E/,HgZ;SPZ?c=ecs7`q!tDDg[\Q`^Mo!AkXa[tj;k>DC_C$/
+%]6g8"jSR0/T110h>'fur<04:'L%kVs1J.#_ra`#p$=etm(V;F\S5JC1Foj*C6.##9F0m*SH4J[g#;^qpcI3+7c67S>%/?X`.sgi!
+%mb+*3DX-rr9q[rj-$o!+ShJo`"F:PCbt;=1K+7ef&T/@$rTnl=%1=$LiEsPG[Q at qh8HWY&f#kr$1`3'acQ#5`?LrBC5=QXUM-$4Y
+%0b=/bDmSl_Z]g%Y,[Z"%p`_.c"89?H?(!/m"A"-f-%pr7o;2,H1m_>-hlDmdkLY7\]X2'.C[+R#oV5f&S3Y0=N2\u$QlH(I"Ef0T
+%,oQ"6qqQ[*[C>Zr`ga>-?[MW(Ya_Jl7aV at Y>hS1%jEjI7-*\_?/`W=HYPE]*F3]iH33Dm-i?9KX#E+5'1/;F*2B/E35L5a,BK's*
+%5cQ87q7J$kZq6KC3+jJ7_:?ATWNUo?P2;7C*TSq.\;;^h\Zj!saV.Q8jLZ9:BII"=HdL];Ume*rU0p!j*5fN[M;9Y0DO1&l;QgY%
+%c8jWd7KI?ESLkkpp4Tku4n#qQ:PL7%+NZEn!Fs()XG-qD+AlKnaq@`%URO&+.cq_=Ab$^V/%Q[4&G?)iG_>NVr_/>Rh1F8hj7[MB
+%Hu^lHgN1mo0,`:m&BtV2B6>R6(I7J=PCW>fg5p)q`*`eo-[!'TBu;D)Qr[m^U<^:;h`%*Y';qFID*A>3`>F7k%Z(]?h.Na!OnX4E
+%PDtX],Gg-Dk:"[@CTmkU(`ffC&t5VI#J2TN-.hi`Z?eB6/RAWm;l.)scNTBmXlHPK\L)6CQEV\R\74jrQ(rtK/@^m2#l`LS]G7Xd
+%PZ.S??O%52p@%dJm5oabUlh/D+;+$Z4OS@?njd`s(/*tOAc at 3<O?I1:6GG(,G71?on[Q):#>$KtWl%0Y.gVE)7Zmn>>XGl9XuU3^
+%XP5\uX9\d>J30YPkr-)=>iAWub99&?[ltc:WNY^b-g-*TJ)'Y8ZSr^Mnjsh'UgH%r/HhdL6+2<F>`-?MRR!C-:6LbZ`j/8khWMS8
+%#O9TqYs#X:>WHVqk/-;8P>C;^o[%afXpg=H#SDgo0$`8LMHomXrd#D+m\<THA(erg4=-ufq53fO$*BPciLi$/2FlUR(Ja#49`6"X
+%q:EMbp[=TXb1%VG(.Vr.oj&LSenUp?<KC+81q=>u3QfClNhJo-LV.p&okb"$N at B$F$:S:D]fifpi,^BG4L0[<49pVkZ*X1Qd[bIk
+%Y#-P:hX%7FJOC./6kTcl!'uY+HYHsDCeH7inS85Nc0>(gkJh#u*ZA8i"K&t'5HXC"KS9DCZ2\P)P,i,:Rt=l-,Z3^E&99Q(;QsJQ
+%=;ZNpE5Q`G&Cm?,(ihq/J`lc+k7<qrq&anET:Oj:mPh@#\/km&@m'H[Dqo8W?)2RE"#P*OMq*o%9'.B*n!:N;g7.ugkcd&_`!nsX
+%d/k1bLQVX8FZ7[aVI at 9W8M5bg2:V[^\gchJKrCuuKsd/pS(Q'Qo.sCf3U$gkf0c74?cJ2X+8b:l92md9r at s`%jBf"[[i1hl at o&<J
+%..KACbkYG$Zn1X=(??DX]EQ+ at G7eIWMU@t7`GWR&JIeOFb.Y5TS%R#N\)MNTKI?*J#O9'RjI-U_;FS+/GoR3qOaO*cmfWHj,]T!#
+%4:RZ%YI(\EU*P#!lcG46YU."%M`e?fYTp\I'Q'uMm::BP'V4^[RCdrq2l(o)*%a95EY]Q:n%A*YIPQJO$an*/)Mc0,_.b1K"(Y^Z
+%)%$-E[JFo+.;5+Tk5H]<#5-DuiS7#rap:'D5_JS[NU;7CcH<V)XJ10a47 at IsBCKC0dY=,N>n52VD[*#JK+GrL>Xi`B;lD7?U@><>
+%C]jLILWH.(GZlG(N:Z271(as0ZAio$Laa^$X);GLcF-O=X&SD_(?e>k at O5u`r';9aj_[c^fR$pQV8'[A<8'pj)?a"_DVXKI8N@`c
+%<NCkua7X*!Yh at b<hTsfI!(BC#_;1Ap(=d>ONZCEj;%%Z402l]m"MW\[/GBK;43)t88:nir at J`+J$4G<j)NFL%D]Y+UfS#Q*R5]qm
+%Nb'93l2Ei,Fc+c at -h.081u?fE-<i52VA+18-Qr!6N3%%V=O'Yhc[b:#o at p.M*SDs^d&1_<BUBe%EqiT3,N_D[J.u=!)1lN7GYY9u
+%4-aDT]FeQ5T9f at iSGP$e@,QI1P-- at oQR*I=3]ZKeW@#aLN=m6mD&i&998;S("+%Ur*\?%1r_EILbA*4621jb=UpK_O=<]CKV'VD>
+%c\V=nm7kouT&2kl25cm,,$UnCR$T at k2o*%dh"/_]kKpG$2mt<e/ks@"5>1R`KBHm\?aD6fH4'k\IR$:SmsmT)5tB)0Iu.oi<Q1.a
+%R)bVh31)>5,knY at 4g]/#$gNsK*sY0?B16mp;E8UsPH'"PNt%YI#91Q"R*JiJJ>H*dUKuXgVQD[^o7a/2Zgg-2Ds`*;LMgHKL1PZ2
+%j?HX:L&Gbla_g<1^*BU_qfMXL>VCap`R at f03?p\#Z]MAbN_EBOEj=A&$^<X81]<1):g[fJGYa)-L'2+LG*EKp>62LFS2kMn&P9d6
+%O)9$87_j7ZD3MVcmW&!V'&PgDQlf`JT!bt62PT4JGI9n!$5jtBU?4S/BVN$P`NV6:T`-nrSubGi0TLu:47i57S,KWd8b#sRPadB"
+%9JeB$dl(5m<)8%h?Qh_pg-/WnpicJX+BE@^YqB:hj\AXji3fB.pfB/6 at H)ijcYYh5L6fDW9`Dd?5qk0&%bW]jSFiT^&aO&&`PJ7/
+%WP)&6Mg:0He=bZo^FOGlmSO95Z1F(l9`h]nNT+/IldpbT^\X./k?>QfCWoq3STNTjjpi/,o%fIMZ.CDq(`4$;$6)]q!#$b+BIT=;
+%K]h8TP*>M\'$u4*P.,/j#$%M"Y3]Rq:\:smYnZdMLFQDa3C'Gq_'Z-;cC%,"X/2E8:#g#)a8b!KC-.8I9g at ZM6]q_qZY$OOPE>Ua
+%h4ok$`iOQ:OC?n.'HO*7eM-FWa,eq=Q,VgK*7E)B+IJU`/85GL"Z6!kKA$&0G/FC9$_-AYRiW8NP(e(C"UBl3)%uU(d4TYj[r7tQ
+%dLX?:$!$&aQu3*81-h^!>Cpogj*LYflScF,'H!-WFLP>J6(h+;DTZMc@!l3??,U92!8B<gB`s&!%j[L2a#G6<n)Dj25:.[<c4-PB
+%m3+A.8Ba\EVpekpj)YK)r+rf-nn at X^KA.'<$0S!R*r>TnW=!6h>.^l;Ro.7MI[152L[i=kbSAPHjDCA!q(WDZZt]hs&!R7@^6E1O
+%'nRib].<Pjo8L_)O!et9&<KFL%,'"6F&<.cE.03G2`k$n]66niDN&S*_h8Fj+1KdQ+J.cAV33]l&"Z?3XIqZ6iTpK6_+D#`o&O_X
+%_0kO0Sbe?'Kr::T8No\ahi+K8QY^jcq_M7Ao&!-Kh7eI at Hfp,m\e[%1k9QqUPPbU1])3rCX2OePK^e[bP1"5(`-9c!4Gm*fP/'NR
+%X[Zd3D=d<].EE1L:95t+4 at Cm#;SenJ2'342JkRL]S\/Y,%%L>+Uh^brO7.E`1^Y13D&TlJ^"Jpp7"t57;hG[[1cm)*5X,(F*tme_
+%9lS&acR4#7eElQ-&W44Xf#,>TF;seb!^Y[JQHQb8gT0MA;]&hDBFoSTVVGf3g-/S^m6#Kr at .nD4UK'3C(HGWuQ1K#<f!!u\M'$,h
+%I%KZ9i1]2-S[JmOdis!.j2GbBCYMPrUe^`n=(c[6dSne+kIE>:pjTc,=>i+ELMBRSB/NLMnS?q at Eid%#L0tm(:COG)aB`_j[IHq?
+%hS`V^Zml!h7q!$P5 at BF7I(9fr<8Ufqb4.oNEZW=ZPtE(Ud%]<sKA9FlY30=AT4!Y;Q;Y/A1ANVmV#!JFdK,$=S[r^uE&fQ5D1kKP
+%4"tTp`GbpDXn28l/6jRcb.BbaQ>Xr)I_t;l&0u^(&[Li<cpt1Ul801,_D2W2#ej'BA]jB(DOF`t\=:Q?nkW%06)L?9P:(A'#g1oM
+%3K`\GOhE\*`QQgsidAUG_UV:t+GD42N7qF`C]Uh/0DE9<eW_YFp,9n/@*=7_QR215dYD.Q6IFjYH%$/Wj=-/@'S:Llp.:7uWNr<(
+%mrm`/Y/-GGf^X=1WA=1l#LV21pY#>=,HJLNne]>mik1H[@*:a$'eV4[#qQA[$Kt7k9_%pEY[uSWn`@S%oV7,9 at 3[usSS<^RDN_(]
+%iCcGT\PD<eoLsfsVdSr^+h"0XR,&Zg`.?)L9?iR`XX@(fMq!ur]<muh-53a#@oMY@\Mi)&IunZ&eX2(kYb07CgK&DQFXt&k0B[Qj
+%=trhZMG?$f0:8t`['*/oU)H/EqYI at 1cGA[^<[*!F=a;&70./*YK,EH>$nB<',YqbH-LN>Rs3-@(rZgkjKhEOaC;8iU2E/G;)>#[1
+%XiY`;QsqUQq'B7F=UkW<F0Ls;a5 at cS7!5Y+TWkgLLmV8imT[D=:@7c/3_1U>M0kV;jUMn&SYe*1Y2%-UjgR1c_fP8[;m;kU#Jom,
+%l&mG(.lpap6p*5>;fPra,K[DWH*PsmNUmRC_He!OJ54:!'=jHI[*-915=;)MaUOF,S-r4"4bt9dll$;YG_.nGc37kDkO#af<u\mR
+%ApYO^%0f&TYC,7jc,Hla83luV34$>a\d$,$(P\:13=QZdRV<(-:&jQPopHcRe]PXTh+8\A'W`l1djXbNEI>:.0),([PXo';'"7AY
+%XXH&-jAR+i,tSU,Ju`)'3WU$277O!X!fDe5)Mckre-Qq&]A0'M1mqo[\e]j+XEoY9P!PrTrFI4.#$l\n-WOEJk+#, at _0c.Hk/_g$
+%WT/"VoCDLC!^LtCJO_#l!TE[-W[ee57Vd at VVK$KF(mj^c>3N%F6!'7k#]@=M.DXtLpY5hZrQ3)Kci%J1TCXib%`1SVV)`#J%tO"B
+%_YT`!Q2E'pk12:`5IoJ-(cS1*2e#\A6DM.gbV:!;ia!q,2F\']c=Q"PFJ1d4+61ID/gWgCD3CGP'Ttojc%')lp;POe::=)M8;V0b
+%pe>+T0rL9eJXM`rLCtnil_)Jm9Bo75QUF/e+\07q.E'LZV,BWf*l<"$AuO,38JueP"cl`k/nlqWiMO`he/cOi"5ihJo($W>rlB at N
+%K'f"C1f?73Zh_.1\'rJJQjlj?aOSg43[.^c>saHAO*4TC%c[32ij,X&&h37354fmSq1=<<R<^HR2\A(m;-bo2?*dd.FQkoR*0>g,
+%#fjO7Uh\ZHpR$M.kQtX!pEudk at 8!sKI=OTHc4=D?$l0f#oIi9(M:?U4Ci([9.SO8`As]D\n8OmU[AQ9\F,i;-i>F=<aUu9ZFEco6
+%Q.T9MpD!V[M&ur&Gqg[\-Ecgm,)Af:9fkkPLL3!d6soEM_k&=QHPc4:4T=')fqc at ZCWDfPr;._KRnp>q#OB4Q[&F/SJ+/h+a]N3@
+%8MF5j#IkZ2%hb0BSoWHsh:\*W;9!I@"eiW3!-#(RJQUL)Er+(ikLmLabp59'9^9AK)'_DQ#>XDVDCWUJZ=D:6g!Qcp&dH[PV0uTQ
+%"+Z?aa1$L(4Y0T?p)>OU%]L?Zp.0i!d<#d9IGuA$U>j;f_.R"LEIMr\PCnH-(Fn,YeTqRk'0uJle4IeblI[*$`TEO6KnUeC_-"#V
+%SKc-1<?9YU&s?U"Z5#$P2UP^M243$TP+[<SPWpg/nE+RL2H,PCJR\Hu-W_#aH/G'\6D*?nJLSTL+F51a3B'Z1f5JTBbcHETCf1oX
+%.EU[XhFDDG-/?R3j3,>68SEYqkKTdalu8UKW1cUt6D5)j2eH5"=ng;/9CtE"h;;#%)R*LIT9qQBcJ*Vb*]uE8OFEl^&kLZs?5iYd
+%YZ;)K7coOPliU0_VW'Zrd=.uRS*-%T3XN?<:u=J=bho0IFZgaD<8(%\a at F2"c\\n$REBAr:@^4YDh0\q&d1fR-s5,Q%FhQ$KkN?(
+%WHBtZSZHejD!(g<:g$U_brp*Z),4"<9%;+,g:s7W1"eXS(g*oN$jYHjqnp5[oO9M7'+h#QR`p@%1"QG11*oS/%YRF$Nt%GgBk63g
+%\X$X2E"+FqO-4;F8)UmN>:2nQZr9k\&E//(=UZ664s\J!WL%m1fk?G1*,!$q7(ANb48[]q_\,F;""a;gSG68cm5WF;'>J'FS;*ns
+%93TF(3+sI1rJYmqFu3*n)T at R&QKV[6Mht;V1*i at 5[94H5Xf"Q"s&o<J^]+ at 8^';75KFdCrq;0OhV6/FH9B?#kGIX:#&epME\NI&E
+%+`,Y"]E*`4FKjPBE<@g+W04`<DAfm/P#,e'DS)Bi9E$2j#p_"'[28/u!!YN.2W-$nqQB"N=)LCM7X\]a^0Q-Plsp76*49ekbE)K'
+%=hbnb:m*T/op&*mX`Fg08Vrl8R`b-M1*R)_=Z-L$oj%IF2^pCXJ?&uL/l(e5=E6UQ<d6,G3ud72)%.;[:0DI1hGA,_-!U-?DGFK%
+%61!+Nf+A=@1G_$o/h0GlEh&3&;fdX3`dojP%`bl_7;Io#A>4]B2,CIR:pq_up:p8M"G-^F]i_/Q*Hg(-rhs.$,MhNH`5r!33!bMi
+%AID*=Hr!I(I+U>&gLSV at Vt%:=HK;'d at Qt9PSuIm[q\q!h[O1fH>%<hj#AFb>66dHRC?6F:W*Ug8#?$IS3Xa^EqH2D]UaS1afLuX(
+%+,IhIGj at 6uOq^I:Xg/@4.$-^k[3lM)V^Ge,DP at 6'S#<fg;tLemI=tE7]D_)Zl]l7Rhh7pUKZnksD9)%[JfC1N2EBqeMrj$2C(iI#
+%QO1i,4T>tXFsM/rd+Sj6V`SP/!95Ajlp*5I#ph-KD;8qhac\#9 at Xmm;>/7_HIZi&l>L&AoIE3#-dQo5 at OC(KYN/Cj&0jV6P`I2F5
+%Bp at _6foZ"O2?/k:=;'07F1_hu]T at BR5pLZijoFNbU.sfE2ZE4A-%5K8P=\AT-hoe4<EhgR-WIJ%Jk at I41j+u[jd(;u0UjN<-)Hp9
+%<!jX+YXlO3He1gNA[_S at Pe@Cr:lg%=P(\`?9r*R)SGq`ZCB*/@U7696$GpU'qmW-gEq7Z0/[_*\$A7udfXAP4drZg=$3*+45t5 at S
+%7rcC@:,q2\k(A!Z^I4tW"lmK:Jp/;+3Kc4YRZi5!cH01n at h7_@0;9[r\"R7dV,@'No??TC1=/Qt`05$"hlIK9`j#5H- at ZY0/c161
+%nG#QX0pWM+/VkO:nn([UYet.@?NS+Y4n=-tSPp^>8Dkt=P2*)@^`]9867=gRH\*nGI:&J&9+<l;BXO&Deb7)5>ip:srmO40EE,X4
+%=d,Hi"?:s1ekNBo2bO9#&'T`90O@)$\c*Y#/Yg?3Z;\!'juS62qm,l[&iMIf8B4\G8c152g^0M#PCg)l4r3JaM/E2RV@@W"lr43R
+%'7Elbha9^R&SY.23;+[5^Ia9;#LaO!,E\HI?_ef&K/'Tr_dK<9+9oKc]T]k'LL at Xp]rZ)[S&@3uIL\cKmFL]`W:W)=6J"fc8S,Zu
+%(R#gujrdd0f<.s\=9?Z8.?nc=OmB/$,KlQ[Y3JL6<mk&A;,e\P-?PDlUD#joN.6M!'1-_$[tKZ6d`Xk`)Ysdc\W$X*jEf"6aeko$
+%lZZ%iZ]0!#-0CIWPdEf,j(+EM.=Gs>Cd(YO at _Pk3J@3,h)+*6'!gE!>eT>TmYMI-h#XT)*:Rtc-X&kp-N?noFs2D2Eg^K2LL'V76
+%>KrXGp6iE at N97c/')`/Cr=lM;gA.$^K:IkWLka7KM_N6-R2W%WG!;;u:aIFHL[Jps25hHi6P$HiG`@KVpnqfujlA!u!>d'jT&<Ai
+%FjI`o at Tk=QD,8I#>JKFVP"_4HT at e?BJjo6Z9\mOt`74NO\c9Q at -jEu>%h$MpFhD9e^sWSUq]&c986&XJZl+sq[neG=pEcHi3N"f0
+%.SP">cblM at Oj&/^ep3htTUI*9De'D8CAHock7o3nBC&@:k7s-3(T<s)2d!+91.sLAck^V:[))76X9aGL<EK/jN^Or1i,ON3[-B1g
+%eHNUR/WODB\kN>SVQL[8;WH<rjN`kBq at I\mq:<o?7FPdZ:'3aVgDAn4r%5MO3L\P5=PE<U;kEZ4<$Kct-$^;^BH6N$15N-Q18Ju%
+%@]o3B5)T4teaW**NH6T*J:n<eGui<+Uhl;ZUZ,D:X`qW/lb(Go&Cl=3<lCl.(e+u,U at Lp4T'NX,JCtmO;f?S0j3$n7:M!PjNoUSq
+%Y?6Y,IX/!S[rVgO.rlc6]q^;E_<'#,EP@,@%=uu*W,[!@I;i;-'^A]+\b)[9e3eKX'Q6^m>f^)/LdVbSHErB<lX@@%]cXg^JTE>#
+%TR*9B-AJDWUJ&B#Gu!P>Y9-K[Q*/H%6u0S.d?KmWIStD.#m at a:"PT<JPD%\lBdAqXf$<+k_ipN\Gm"&LrF>K<`b+/qjgI?;Pg/b;
+%\)LeF-ic at iGu=e+FBuO^L`73fQn8*NH.A0el"`lN[]6Sp_ud\6"e97OTDE-DMLHblQ<Z=l^N6Cr)T8Ml-%G;U4eJ6b/O#edqkT8%
+%D`QNn9V*UtL;`^TiYmbK.TaVPU4AS`,^Qqc1+X$b/IR7!R"Pd?eTtq;"VIC06OL"JJ17.]U!5@[*g`KrGs`$SG.X>mUr4k9.s!R3
+%7T1>/bAAFZHWg6s5pD8gdI at Oma4@\P&Ee8iSC;*lGj)'[TcCkT>>rQ(n at mK-p8Mkpa,lt:+d76.2ndFuk"iVC\U"!;e"Uc1ha'Y$
+%^cZM?aRj0:\auGjKW1cM^_H3J6pnUHKg/F.[&?l6Wog'^S9.n1,b;4C3pp>fJo6XI6m_%c4F60/8)@D*2!Zaif-ZTso13SWa%$sV
+%IQjhM3E6;aOmR$.L6%@T't`%aF6DMfU!BPEoKLPc7gfW6fZ\H/"Kl"U':XY,>s2H5e73d<&+Kc;i(Zk6OE]<5 at A:Pri-P*r8A8$X
+%P^d)`07e!.'<iZP<.1=mBkV\(J#R4DbB$PO/:XknNi,tl`cMUpf6&%DO%E\n\eMF"9)`ns8aOnTSW)=FmhotW)2ua3CWXlFF\J,V
+%6oS:_H"-6SZ)BW!C(FLfa'@JM/U8Ah-T<4IAD%DI[_W\l)Yb2[^Yn`83IksRC&CgG93s*:OR"qdqr`ju at jJ,LR<N-YV=Z2fp0)WX
+%3C9;/7kT5h at aODCP+)54l`VYW54.c[^6^ltJE``t7\R62*GW/"&*k0O2S>)W!L&u!GCQsj]M/-kH;`TmXu;lA9Ae6\:'ZmACa4M'
+%pg_E/),2!;k>^f,l3&T3F.*;2D"@JQMTT.+'$^R`;QsGcb>L_5J*4*!1FDaR<&@1?W(^[o1chfG`_[mcK1?N0iKo4_IjFTeACR_l
+%Uf at .)D$Ue6->WVu at 2]4>!pns^3&@F_\\RQH;r?[.I[`%`R,Ye>%?CV%2d/=06R"rQ`lEOoZIP7r^k-C1lB6Jkl#Wl[?TVo3mK&8*
+%JJY],6ulLZ\0k71*\77K#;7=N1M&d<F)-:,#gXR=@d17?MPdabY-LeCfA+AE/XVE1AQRbjX6e<UkW':d5!57Fr'Yk%KTb?_R:O[W
+%d;,,BI*UV#(/o6,#EBWQ,ihN1Kk"6,ko1>QUtr70<@aj7":0HGc^Ksf/e$QphKqjCPq9*i;W`b&I+cgX]LK:K0B\cF["3uW0B"e8
+%b/Y]TZ6=Wn$I]aB?;!\;;U14I_]8T.rb#OC/kd>91'baS:qYe>iQ%:[ng%qH_M9o8Q!rY_peUNm?%"I[bBkOR=#pLM]%l at RQTgaa
+%DO\AYma0NkO8PQ_5s\"b)kZ(=1Pj4ZTC:W^d\X*m96SZQ)+4=Y^AD0#aQ_FMkB6XRUN6(%'bOD*='Y,LOWo#O_bdXp&*Iq3IX`g.
+%BSk+-AH8DF1j?S9dtJ at N>Di7sh=do27X<0K^#kbbTHL=toDGX/?<PW&*Vr%#Ft=Q.oW_ee:W,q at 2;E*@CD6sW7'H/qK'eM#.Zn'<
+%e`pnD:RaGZ8SQ.+Ge'b+]W&i;AM)0XqmPWcG4'24>#9DG!VW.F5*6TP_tlRGML8`6A%>TbU")nM^.?$6RhA"^_Fm1\p_s4<g'^TO
+%@Z>QiIB6BWfHlDI3TO7NpdXWSi(2C at jm2*>*QP>WOYZi*:`H at 2rD1\:-&N"M-gAK16=-/gCYUmp&Jpb5r,/Di^nKSUC;4]*@nuC`
+%Y;'4j&I\1oK2(Pa,qfg6^6$F(G;=S.'B'nV#*LT?Wo_C#X<]4W2B5J!f`QbeFqP0!4P>,X][2&p^o<;%iqIQEmSq.Oac-LLY#-QV
+%SJZd'9.JOV&W&Z)k&,)4o:u"Qn=2+D--MJ(0^OKeiUlH at c-F5Fr2%XgQM?Z]H85NEKuEH<OE+bSCVuic5888OH$W6t#E'8c^XkT$
+%#A;CR%]?G)_S<X!aU\]]0<`.'drqqgn/mobd!Pg"&(6!`"@ofme/'L;L#_4cOs<K*.(:Gki)ll_lMY?%_8/bb9]oe/;g$q8gu`Kt
+%B8P-PI_N@`[tX>L(7]>bh9;;N"6JM;<_8r?+e/<H#Y<i_X_Q)m+\KEm_k=OR`6;;"m5et:oC,su]lefM00N+k>IS'f[3Kfr)+^;i
+%h5Sj=j02EPQ6olR>L6<7.*3Z7Tq",bp&)la,6P:_[@Q25jeTAYB)R9Jfp([3g$[XCB(:oa8Bi_3PB?:^C`MFdci"KR-7RDEDF.,3
+%GG"S$+*3^C_V>kMg,bqrr5L*O5DlHe$.BI%^:_(L].g'P'd%gE>%)K=R)i8cq,9q*L><5gbA$06"5ZUVHCg[K6UMk7QJXWcl<N,&
+%UR?$(afT[?mhshrn0`H#bX\I^,hZ/C<sLQ5=rO7T[J0?`AR?pEE=j/6bKeMY0aoHpIQQNff8A4pcL%p\qbE.$=sY89;1:K]Y-\n.
+%4lp)>iA at R?`BI<6dq2>Rpp2F]hHZ54=(,+_QoG?Ak1X at .H,#2FjS1(h,Cp(d:]t!Y[FIk71XJ7*rb^ZJJ*NDLG9r7I*6:8"NgI8Z
+%$*an,'1@]A[qXuI9Zj3_Pi]]CP>;JZ8ZjnFh\VfYgqnGggU&uUjd1>HY7pl].]`2]eh39$fV,j0j^X(n&3j6dSE2XWic@]o468ih
+%d4u/@/o'>?QfO\#j-_VbVSs at Lg23/aBqr.aZ"$Q=<)H5#,WNAKlFr57RFn"K#EH+2[T*$XVh-9N"Xg8noXC&A\O4>JndGH1Ft/i-
+%9hsBa]_OY`e3!8.e at Ft'&X>D(+o>6rheUKfr^:eP\=[2ET/uFc-_f^3>#SlV_P[kHn$JmA9IBL0cGl#$P0t"j4S=9Vc`W+B'e+:!
+%AGLE:kO3Q;]d7t7rCPj+?lu96.=lbN">1KKfL8qFb_,LnkW09,h#_'Uq.XIbZbM/O@#dLPP`G&cF_d3$c;*Y98WgK65cOJZ3%OZs
+%!*Wo"eT("9&<h2,]6H3Y8NHYL[KIACBTja,jTF?Vbg/;C4rrYI!-Zhc?''bT+lE/:2U'CdVaAo+I5MW2'ZKKS:D4:%XRWH7#S[91
+%bF>CMO?Wq.RUd20XG`AYY7FB$f=EBh?E60h9>n9+,s(qbH4'?H,L=QAil:&7HCpfsnO4&?HR408(8Oa/)aGj;D#7^L1EZKaM^Tqp
+%+^ist#^B,K)?aWrYta$Zb!8OK7l.'r.)-2A"%h)FIMI##UEdiM('PiR_Bqtb0?](rCQF69%IGA]Hq)$gS+F>Op;Xbu#!4J'2^R#*
+%(<!YTYHi^Hk*0NM1MPYs-UjkZ9o'uPS=IZ?\ZIqkBq8r39o,K^P+7_6;K!#rFg_gDU/Q^W]dsHVMuGZZ:t\UOKY%Cdl8nJ?(oRWE
+%r:,#)i0t.++4RE[U&B,8"E/fMbG3tZO0C;_0h-[F[Ecm[GX-%(:TLT2R]#MY#e=qFP`/OY<SIWuJ'#,pOjTE`]'4Kk3Cl_6<8*'R
+%pD4+%ZpF;W%/)Uf]un?r.UON at nPY<G)EXg#;U*8GM^_=2=Pi_[r$kFkK[CK!3>klrn:W5\CX8`hD[&PgS>rO-P,27crR>,F`]9M5
+%H<E76`M,^BJMi6N8(]-n_X at .92/d8Z.lA=^>j[m[B!>l'\p1Y)<i"2kU*1;SpG9:W;_gI:,rgR at E\Z.Xc^?[4)p,hZPgNZ5141+/
+%N;_gSV3]6l_Y,P&".pfp/QZNXG"Yte\_UoSa2<9:lT[hW5SMb4]N6\[K0.pVD0V>s(P]p99Vh$38Z#2 at oKoYDAY).p.a_VP4kT=6
+%]Q8(QfFgXdctkeH$PT6NM3.;hL/FM:'B"+14jVVP-d$=!eB1%q8;ou at C@Xq3IYkri/T!sMm7+qNeiC=M*KGP:e?pJd^?/Tt_L48j
+%[fD4>U!eNkPrSBiEVHqQ%mI2ursMi0_k\F=J#=[J05S98+Qn&TpE1rLE1J)#huc)7cBgs2O-JSMa5\U79!suGNblb1QEqn%&oE1&
+%q`c]_Y1$A2]2BmkCuugZN%UuE]-<3B6[l7*]1snCW9Hp'iU0pF*J"J<':N'dPc5;lXOh?LP#LpDS8$=:b&q3lOaOPj92("0#lQ&N
+%#/NE'ipSi)BBW_X1jkVTYdJO8CX2I`OX3XA3NCha'9H*HLu@^pZ?L_fYtsh^@;?_UkiGI'\=[`Hb[oD*5\cU=.']MRZ8+GJ#!VI$
+%.=.KJa_&Tn:#%a->N?Krc@(?1PP;EkN=d][Ye8,HGMrTEQ69-bbJ)#4Kdequ^a;@08<i;#HeUH[c\djUF24+*[clLERKb50<h*;j
+%?qhkDj@,/^(s"N7jq"42]H.McL?9`]mRsD++D)ST%'&N=fM*_Jh0FY6^g'f!ntKdeDD[^HWq<#KZP-BMkoh'=\&gpk`jS^j&p[/1
+%K3^$h_>=LA/$l&[0F`2s$Pg2V>e+ng&u+enl8EF\WE)PCmD+mpB#V9!e$UUI26m'Q$*'$LcL`:+:/FT6-UNf=RD9-,&Yi(VIPIOD
+%-B+4.n!gM._.)W84$H](6$LEN]4aPNSHAeT]%1L<]/gtj4)KRK8(>n2Z+MWJ&j]F-+EIZ at n7lQ=q)+[&$:uW<d4&#AG8e!5DgOD_
+%bTC3%U7;#*$8#hCFcW,1*sbIqrO-7%T+jD8/,jOOoAb>A;YBed(cQ5iGmdDSeQ9>@QiKgCd`ba53#-_0HG")\0MJU.XX=YI.H at P4
+%89oW`LH"W*08J_7/tCBcR"Uu;a7Ta^'I6krrb9d+9$<LZR7n>IcO26fk`O4'%p>M`_.O1L0on<%1pQZ(cK4GekDM-e%_U!J?]U^r
+%UW5k0'[MDP?@Bqh,Wb?TAnrUY?@IuMlJUbgQL6=tDP#G\k^/:Y[O'ZHNoeI^LCe9EeiF?Aad7*Nfb+US+>Aajo1(.Eaa1'2S*Njp
+%iAgi?_/fd#H1J&gAF\]W4.Su)\>iAo%i""(MRMWUgC%/O\t?FJ'O5aJ"4UH;*EI?IQJW#YF/,8JKfo\kT7]DBh;'A[?r\N9C:LRk
+%`@,3aT7qJ%j\DfIe]:RfK8_A=Y4g437kHi+VCsiEQdbX7U:f<]HrbDU/#Cf:4TuIuK[?9*7XgFG:m)m9H`dsUQ^VF'l^[)4H;Ti2
+%hZ1DRa`B]2SZ^[,\US6<UI_&tF_Upi-^s;E>,2?MU`_SeIeT7L!Kl;N%_\i9!q;@R8Rnkp%q$]'V&akh[.;Ol8B<7,NP*9/#AKt-
+%XYum<RehRuW:&A0OBI`;'po]#[hZ8Ml(P7M:,$D%pQr4NBY1El,=sZtXE-lXQ"KS(!I7q$bt>f/)X(?hM'dXXphp at g!*+;p\O?)9
+%;_82?kEI8=#Y)?\(N!>L2>c2d^!O"\[4%0#J(\/(N.3,;WHg3khk@!ce_Jk=55*/6XWMR/\M6(bF%(VF'7^f;R%JNk802GTkBpa@
+%-52EX^G.ZZSeRakn%nk3kWDZ/+5.(\\!ld/n8WEjH%8YLms!ARAIZRs^1er/%VBQUMMWNpgeQOK#4,H*?B:XS<\d;TJsSe.RYobR
+%g/FkABhE,CV_R)Nb9ih#>,6G$8+,pD/J_/U?oAJR4GpQ!3XgDHc]qJJS at YfNVE5'"9kk*R$6i$`9]jtqSPK-8hWNOg0mbj&l]nS_
+%DIn]<K=(S9%>grgI(MmtKDN+l<mfX+;8E<hTZhU"<!?1R9%>FE'*f+mbc*)[Fmo,oqsO,P!IDE*[8'GI7#\b`ns/nn*g/hr&0pAL
+%C$6YK`il73b72/D\/!2A:#S,$I^"[jkOZjtO9=6QmUr$hd;CbsHaqfE'<T5;CTdG)$;?6:oln]Hbs>[rC-MMga,-Si#Z87)/pNI)
+%`s)6=R"_^]H3r_I`Fo`$]+rb$[tiDbV%5T)DoF&L#Xgm:$'hL$7Hn[;+sE#XW/QdQ/%e3b>;CD/`#Z)0+W=r5J`#7=ef[d&Y(mmK
+%Y1L\TTPDE9F(*YX0ki)1/TkK.IP=.*]sdLUr^`3_W5Us:\)3YoDf'n\13JlmNGsb1C]-t4^.c at 4k/sJa=uYUsKXYsSrp!?ipqV`o
+%_A#3877qbRYajpu<[ERf[*urcMA%rf-3%8[^#e,^hFTeaooa,iP]EgR`QQ,.ZAF4,Zm8D>UGi5c<$G0"fDV'=FbJW,jXhR#f++hh
+%_7$.k at p-1gT'>chcd`I+3h2Kor,`sLPFT`Fjp1a12NP#Rr>cdH2Y9!C'J3[oA2F?FDBpk*AL`u+d$A<(\I$+%!P+qJN_k7k"&;>T
+%l\mH:PGp>ICh\.*^^*(^2i7+0RJ?:U:)rOaBu84 at F!X#4[H!+6+FU#>RH:<kGfY(XZ[!Ldp,io"P/f3\_L,tQK#gclFS0JHon,>r
+%4hJ.TcG=Y]]:mD5TX^W0N4cgola(p[jKYn!f!L[&ND<K&eW(h-OoeR.-Pd=Xd*uJ^Y#`f8\,97VU#n:`%*RGWT'&^tN'f16j\uTZ
+%:[E#gUpPN2)b3%Nr2#<t"u*@jL]+?j&-re=37pcGCZ32UV_ra7oFu5q51W\;$O<"$f7NLadi9KBbsr at ll+H1XV+f!<?$RUIHk64h
+%<*R[?KlCCJ3Wk9rSgp"7>j at 1HA=5atIrIQaW0AZ]:bsFUk^9\deW&f,fM,#gcBqPrrLI5hA$lhBQuSUE)S>C9X!N&*S]sO;OF]JZ
+%6tE^TOF+6D?O/J6V$G8KBZ?FO7/H-:Xk0W1oH)Z:0=D<[A%B)rY]"p4f"!01A4nIK;3%eI<s5rS7A9sU?S;9CchfM$pG84c;30t[
+%JaH46M'=7=J1?)o/#u=C&T1o at q9$"UoIUot0S_4)DKFYond1COAMd`+#d3k;4uMB.'TId1G4YE4R2k>a=BQ:0WC78h,?lO?l=\u]
+%PW&3.RF3E4Qn at Xh0N.59e^$RdpB8^]7b6g!TB\."j$bhL=omZZmjK0t,H4d?+57jTpRANBNLr at Q`n&`'&@*L.9ApFn]7t"&\bF at t
+%_c@&VIJWGYAb6XfE at EI)rZr6GPPog\'0OMVG&*p?jSZfpaot.^WCDp5&[D8\[5PL]5'.mn`rigV4;.U!YUBTJ2MtHo7/:R;TR!<q
+%"^QR`TM+:#hJgHogoLT`MJ'hXqsLL&IVOFh/AcR8[^B:HRgj8cgC+AlAN at S.@+KoVY)1Jf.W?c\@5<gGC@<"ULJq&(ABUaQrgI;A
+%;d$SDKp'(??,Ru"Q*%TjR;A%1C=i-4b[1LWYHk=a>(WjSma#hb+2oQ>l<.l6:1LH`dm5`sP7AQs8r/*fqK3WDbSAe#jppNaBKtDf
+%]Z)NkeUe14r9pW!qOW(Z>CF!rr3YjhAl&Qo\]Roqb#*mAqnD^Cq+!3iW0T^%J?^['k/]ZM_"AVaS3+9 at TU<[&A2p]%HKiOhkO`:F
+%;GU].d*c&7CBqII#%TKCm9,oJ`#7fb(agSO:$13L@):32,[OE]c`L;JSE021Zs4<(W9VLHZ].IoI=98nM\!JZ*"_&t_!C.bdF.k$
+%jI9\]])SY?V#BqUm+ie%iQ#Z"P_=PciTTsk;QH_LIG!t)3<Ierm>WMNUgB]m:02;.:gJn;S>crr/u1a.$2)QJd`@O\7aAWiSQKrG
+%L'%A/*9D(9Kq-JR`rFP&b;;)[Aa6t&7_Q<Y3BfH1W5(J,[_kLj0X at E;kU<9]oudKtQBM4mB0(0ZB_>HE0(0"NJWps@^>s^*B'h8i
+%c-rr)Cu@>g+O=XG[9=`e.YE")ZoR[G+H2[$3tcW+9+B/:X"MYKRYYU)E)W%bcr^[XN(ikk336#g,<*a-51fHWAjS]TP*;3UC3OO$
+%69t/e'i at e6BBrf&0R;6[ZEt$TmdRb_JWN:qJq@?TV^*VNIuk,`oj at TUM3;dl,[c(k^GVn'HsY0$IjZe6EuagWrs67t$UG at OAIJ+L
+%i#1+6WA?M2g/@\oN6ZJ2RsO0V5OXc058BhK[&q$[3`0)`&/QT/g-ZhN"sSscc?(3^0B`;<22sn"02\n!s."*5XYHV]_=D[nWJ$][
+%K,dWoBsI@$,aIeK?EVb?gXbaR:ZE?oN`o129l&%l#-PBS'""Xo#2C91+4Gs('gupa$c8H7pKm9GU7FI at 1.*kUfcHXR'UkD^,M!)r
+%9UUK;j;%_,d+$r%MNGCkGX4>aSkpb>W5t<?.7`CI&4QT/9Hd_XJn)68lj+sM?E"[__[5P"O]bc&J?7h`<,rMP;8QT-k\83h;="4_
+%]cGO!09[G5CgcF-+OWs'9<uE6<CE3H"smkr60JTAq5'*?M!OjWUkFcaI+;+j at XJg7UK:A2rh0C[FkIE)L^I7Cjk<8$5JQSnXRdd5
+%:j%/OO)EX9$=_+!YRQc)%i;?DH_0Pjc8<_74rlM1Q9WgBkm>)F+._?__,?QL at SX^ME:bE;6A-*++oe`/P%*^&2u`CRNd)iP67ska
+%Uepd,0mfp4rLTW&`4^QI_OshJqrRM)"#1gig"0uA<^'_,H2\63+5f-;NNginpcB*XN&b\p at somXC.84q#!;_,TZb%8e<-ltec8jm
+%G'h)3DW,'T5PI at NOoIguE1eJN?0*"&P/'iWK$c^"YS'."nh6gKXg^H)[AplGX8ZNdE7I/9q<^=&*&XB'9k7)(4iQY`;g`;\?Ws4s
+%dIYr[bLpO2drFAkP7*dGZ4A%74#6!eO/DK%[Bt"J]b5^5VXbOep(]k?/#8i[d)rN%h=f.s4`&k#<`;$9fAM>s55Lb*)VAoH[Ya4Y
+%hoY.DXE+Ao8XWM%=UD)'=393^oN'g9OqcTeVf72OXe+\2VO6`\e"YfHgX_pbAXtlJYu7`<rpS9D9Vn/EQ>/U%oKI+,$ltSJLHU@[
+%piX/=H%X8rh8nJk'JXVpN%#F!*Q7[mpMD12F.CP+9o.2tTuM7b9]d8%f1\>!,gkTrV8 at F]>[6lPpn&4FRc`i=$a0_a,>bGo/BM&>
+%bp3<XO\f;eQbu4.q at Te<,$5*966fFJ-Q\udm7Cs7qK&5k6e;+q.hGKG+^HU9^eGC99,Iu2%Wn:Y)YW"MDp&I0WFYqFjHNYh,$g?X
+%4-9[&0?D[GEhdtkNko#aUarPPF9eta_e)OhklL4`?S93*%sI<#c$DWc&2>E*TCA1tBrP`<dbm[Hm)qU+>!fF4iPo*d+sOkC.M:Sm
+%WH3o:p$Ol+ at 4<\2ML at RNPmE"uPe]UH?V1V)%G"2;@Im?$r-I&,m$-C+"'CZMn,$=d4OllCl]S9(O#`<_IZHPgRSToGq`:(rGN>Zd
+%S9&kpgr)80`h*3W<bl/F"mSN9Q>V)Alt3:t#9/>&Y<*Tc&i^PuoW`_hk+I["kE(J)[$T7a0nm::)pCpB#5u:#'^q?RpS;Ng)n:lo
+%4hnXj7(no(9;=NO?`0KF1X9)(968;_kV^QRAdo")ln,<BN+fcRkHR71Q8#"jkE2gu;Ja*1Vc$$5q';L\IHj8g+S\/mn!aAgVWEBq
+%`#.[O+N;f^d`Fs-qd-hc.V0L"jLbWcjV&&p32&,G5+"OK3/&ik%:,fi8k_Mc,]QDtAd!-jD>Mb#f63QdXB:ESXlOF2>I5qYVeI!/
+%q%OW:i*5K^][Ve at aDffaA"F^bB^tooj\+EC<eV,EXT`T<M+Dp3:i;hA#]t,VKsh3:"i)2>36\?R%2@'DGHMN!"08J!*&V^8SlE.'
+%A8)ugXLE8D',q"#YJtg?)0fP.;!o$j;2u?.YI9=E<j(qnrgljC.1b2Hd+X`SfDAZcb0Q'Od!M-3k7d+re!%FB.=8!Pq'89hH2kfE
+%o?i./g>E'1fBp%eZq/b0B*kE(W+''A.2WG3,u!Gd!4&#)Kp64\?Ks=`n+j?R]_%lr4400!mPo(^-RW:bN;NP")a,IAQm6_W2hoJ?
+%&bk3W\kL)_Y3<[d8U+$YbmbZf7M"Sq;dNMrrP2IEP[e>k%>ll<1^4S])fTQWoe+^H,6*PkJ[X&r[`PZ<UNU\.WM.U[:C-gY*UM6C
+%HL at 2llJ3o1Olq.i1.1rf_p)O_H*Sod(sWB:dj6&k#,4thcBAC<GCFNR5mVMFB?C@?NDqfZ\mkd5$WHVDC7.9eI*Z0])'7#m>U0FD
+%oqia;h at c9#i*;psij]^4RjRsY+#e`=$q`X\.8:kMR7b1#0.!&p\KU.%=&TqfBjI=HNV:)g+RfP.$#nM^LPGa:qNoF*oQW<1pF-QT
+%EbZZEJP+eTPr+=k7CT^h"Ei*`0q^+hW)"*bK*C1iF\NEk#jXW"WEO8`nSLt6m9QU1g"mF3Ub?T]eH[$A!@u--?rfoEVUL3%qQ[k_
+%La=E45EANoVC?O[?e&EKUr&?&S^>TOs-s`e("3@&fE0DD7;=Wc)uGr$s/IZ+:d9E>Z<RbsMNY>r!lePOk[\59;fom/ABR)nN-nQ#
+%@;R![Z9JJdSe=jYF3-FS\X8#X@`<0^j#rjtPO-6:3:AAC1U)C&hfN?laZ*,l))I<9ein9%+jEL!0t5N0B]AbpN#Y at klCRM(ZllXF
+%:]\,B5/"F(F8`]``Ic&>)U_i&j>CeGNa$HaFZ>S1k:ZPNf at LnnF@klLk0;>J>T$F#kV#qjl4J">1jRSq9Rrf)qEi*N'af=C.4'Y#
+%)*nImV=[auY/)\L&L<6g>n83X91+=Z!ZeI-eZMr3qVY2;2A#_X&1%q0!M,S;?`X])U6V=rB8(N]a/cd_3<k'7Q-a+Mf0&HUc")Z+
+%iX7b/#s*bI9p\;<je4)*X$+09j"f`:en/d*0#Zq6e2dnMa,/)@/Ib_OQ[fFo at .osd1CZBALP[?BdpRdAog\cX\6!h#\KA/S>SEDo
+%jOIh!nt.6@!RC-i<FQTW2B9P\K)JBj2esI\T'I9T`AR#"7clJ)f>7a%,esT`j%jNA(=etBGTKF?A1'HIK<oX(*7`?erj7mK-e"1&
+%8M]f*[hTE4LEn#*^,gCBCEX'+P=(E%bMu/#qNX(sZ`S$A\=1m.h9J=0B at 3F+=L%B15%Tg=%sj8kf0].c5:G4,Q%d7e_.d=!OMpsW
+%-Ys4P!_95+bYgYa,pc^.a%aF\WO;<c?GBQ332%^u\(\89-$J/[,BUU_$tnqUhS,JM$0eAPb*]d+SNapo-EJI=AUZjJ&$5TF at qdql
+%0QF5-84#7. at ONDjDk2"R"-7hr]J*<9gklfF1e!P^+]=iPPF879<g%&FKucQ;iF)+>^01b]a&uFJ,=#3'&sDZ3Hc'PXR<o=_Tnot0
+%eog9:lo/bj0TQ.m\Ppr4o@%a&>942!@SNDke!)6tAH<hoX-rG==r.&5)$t*pC1ogX'`K^G6Fha$D\lX/'RFq_;LI5Kd>pGRR6-8V
+%0m?C%J43Rid(ZEDAm^heMc=ssN?)2Z&(+pGhZF>&gh$?1hQgsZk?N7*iX7_:)0T at 4O]LM\>c!1oJesn)<ff?,1t,&d>8h.=#MgkT
+%2gE!_h;Jp0&"eG$YAt"KSP:B4Q%Pm;k11TPPFJLWhCk at UUgEXiIi#2d-9DkEnhsBjjH_Lu3Ds+A3RZ9ZA9hXP^-*6;&dW.U=$2M]
+%\^LlbTW\"Z*nbV0"%h6:m,f]8Q>Y^<bKoS)nih,dPH(,7aZJWLa,;GUY,,H(^&Sf0arKo\WK;4[Y]qUXmQUdNG2i]/e+=B-jIg.,
+%Y^dmqnQr0Ob7]=ef5`_5!ZW^VLH@`;:@(u0T1bZ3PCp<u!C at jNlf_\nk[(69TZ*b_@=39;XE2\Y!^=@J$U_cknNr_EOSLTD8=\,\
+%cfY;L=pgPh28WYefd!'miJBoLl5]iB/O`hhqj%Xi)6hM7AQZq'Y6#Qr0FY6g9>j>L at Ihlb[6CNKH'cul6;=I!SGLM$O/W,)aW*gq
+%<p4KY`qs*-o+Z#M@#EhNfqD at dh0(@_hn<I*)\o5<$;NhT%g+PHL?&9<@P'u7P1@$/Pb,c6p37Q\L`Y]e at RkGi6gZ:m*P(3Ro`[FI
+%"FX*EkJKe+_>7S8FfOf@;RP#=4$_[LSc'h8CI)6I#+D3XG&)Y>"H4F>h)Vt.-\/Vh-$Q"7GXTU.RSZ"FIL6OR34G,5rKAm][%Cja
+%.3h&8aYiRZ]LIX[/\"#(1ab3/qUL5BdE*cjPRLL3Lj6N&ReLTDQ$AD5[*oR[h4uQf)k>u._N%T87e.\.n(eW/g><YG*,M#3*lPDH
+%);>6@*1$>B=k/Ts8J#=Z?=1jU)i*XFS<AjdYI;ZQ1V0!WSr4*X2l-gEh"Q$Gk2u#M?Q0s-S]$)5h2MqecI";-e)GJYM2BZe"NMBl
+%:EH<GBq#IY!H#CPGnF\<0B!]fK[6f2as2l@`4`h*22?O`mk,#XYcsHWZ)LJLj-3=kR.)siaRr^/.B)e at E<W<<CDKa!Xcq2_8n;=r
+%WUS=MB"<d%3eKA;EljjkR at h'Z"QU&`;[W#b"`@X%rC*fY`=`1@`J'CI8tlGiCJP2uPFm\J[ok^4:[AqS#%Gd+_h2Z6POfet1E7\A
+%,^8n'1H.%9P'5R?iY0g'#68Qir1Z=ha`1,sH%ZE]B?MCP$^,H!c-[(-`RH0-aeZSO!)UaEJ[0(s_$_$JC7pdRc!lAo,C=^$3A%e5
+%+N`Cub&*5e=mG'\_;pb,\N.:QjOVN!R3Y(8VoE(H^q@<?/>4E3&s;0lISNCsIVim1H$lqB>V6D'anI*j:W`9,EoB/%fOM^^,Gi2L
+%O+kCK]H!<%0JDJJRNk`g^b6(.`)@S#DSE(R=l&=)nYTX,c<4B#W,%?^O4:p5YZ^,SRqSWSL>^VWfZk8QEck,=Z. at S!PdWuVMqYYX
+%_3\b at 2(9+lc7`8Fn!epjDsP/j^iJ%i8VC`OKFa8:N[G\1OE6i^R=CKbD<61b,j,_k8e=XgCYR$`)Dr/i@[1sB(9FKk2tZ'<(pG3D
+%ih1b=5\qq2pKN-h,<D&_8]MeQrg!_)JpCMtR:a'3XseBq*$$[hoH?=1S=qXuBI/54Qo]I_2qu&F)a>\MLEUn,Pn$BE+dsGdMGcG=
+%Au>.t;32l#qC$^RiZ/'aS]6+R"nq_Rnf^;Qg`Y;D at X7#ii8HOJ?*JWZ#/e[?T^T+GEqYq0[O's68cN8"MpK5L7!oQ:4uAuQnUfBH
+%IH/&o1o;*i0a%/4*pa+_p\_5bDu`\(+U at d=os,_2&=MbIqiRBDhP<kdH!2 at VT<F_?S<*^,rFU0=0!"h&]W%M-]`7OH-6;.)EW"M0
+%/?C#cckCNf2Xa/\JNCr[9T*NR_!Of)DT[OPaXh9*oGgf<DO)&o(^A'fH-:c<kG/_U\&lTBDP%6qU7t=6cgd:f.<MB\GaM*J0o>bm
+%I^-:1`/R]WSbEqjRLkVBZC1eXefJ0U:ZngLj4on`45F]AnPd<r'$:qC8LeO_^HKX2VI5W<nZ'?OF9o87$aYr$?\5:IF^sTI"*D7+
+%-?UO&11+W1f<\7#[@m;[oS#Q>6ZU:IFDj\S"d\KZ>c0g- at mUO:hl"ZEpD1REk1H1?r`l,iA9d64[q_MioaFdOW=ac!^Qb at XU1_no
+%$G856HEMBfC.ksZY"@lK9@@sD\U;U2`O]4[349J\TpXAX.Mglhk"r*A=j4$Ao/;DoOmpO5Zndf+7[OYga^4j$(C2EN%R&iIp\ZqB
+%\^="R\>suT)J:Bn^9$oQ;45[mOSO:b@?KQL9jr?SeI'7[_N7'[[;Mk4>kPfA+-LBgQ-2sdZ;!+dUmb]^2:^Q3hfH,ED#m$D at n@h#
+%GV)q=k#WmU%=1SpY#9E06igFI/^WulLn&8Y\bdq'96*@<fs.f[bY>cjA$,X\J\8HUbmUF/6m2u(Jr)p(l<m)VD9&NKF-.r at SS54K
+%m3bhnA8JT;D48ijIsS#<gm_Q5PENs3[FMpbNSf$HfY?6HU?t86?g^<gkF1V+nC*#SWI\fVdC8qKm5+4]Z3H.32l36sP at +HSV\,\B
+%ARgcMeb1A&#1M[+D6+G-HMmD"X;;NHA*a+<<ZLpSQFCk-'AMm_jVm54Um+'rrJWDU-;]$+qD&6mNE[Of&7#K437%DFO%YLH*Z#PT
+%Ee?6++i.>.9\=0Zcl;JV$;EpcUT(\MEKKdnYc;O+*R(,#F.JlU!;:t$2X^L9T[L:<8l*1EFZJkhF+A2OM>_kD7D+F)H2a%jksW5i
+%D<m_FhtJci-DC+(o<^Qd./)H!e46JG=]$h/`1-.PZVcn<rkM"'8m2?Uj at WeMk!%T-Z7C4lpKV/pW_LFNm4VCEnRW`IC_Aa?6DL[Z
+%jNQ#-]dSIG[R'@NkFm?oW[,EM_+,_kFO!qAE[>3t[ifDi<*jm,.JC<^"r'+G)kl?KIQR(l)I14iMeiMF-T]$h\#d'oIJi/ki:LUN
+%?>JF81hBg/5)!(8/G?+<,jA=`oEHu?TNGcTAXLUphF;*$Z'%.u+0Z7KW\nN(&]B)CNSUOd!R:**G=k`ZZ+s7o6A'W&/[orT"_[C'
+%mUuUDSciG+Ocp]bS]mQ1j\$M$JXNgY'8m[V#3h+pKuSV45"bDD5tVP%bUaX4R8-fSj[Tqb&H0*:/3H/#?;#_N+i(Q]cf!L_"B[=i
+%NVrNkmtjs(Qspg6+;iP6!$b`?-<H'%6)XCT#'+&XQ4plkA+)Ti^sr&<8T^`d+*LL^.a*`ZX"bium,`;+\M!F7b<[2h68gjp0"X'X
+%Vehu/\[eWAnQ2;s5Wg,;.P2IHON<^H,=-BC0G%nFltNH0-bA-.)dfV+4TXU9^bJUF$$+R+C;H7?/]&dkAThpR&!jbuFa1.4*/u%-
+%i3$']h5s#k6p[80[WYYEmO3*1Ol at AR`HH/bO%jN0_VfEKSnRIDHNkBE=M=0j9&VYR3T8sHa:im4ZanK&hjh:uo]_ttXX<i1cc4l#
+%e.hbnYtpM9r;+4-9#pF4ZukhSJ#2GLS-8`dXnDF.%K!keK18FD at o+7L"/4fRctK06=BNr2H#7gJPT5Z_3%lOQ(IkfWNtk=4aC3=V
+%-e4UYDQ>HNN7mnTD0"GM,gLG`KePtKCg^5coFI*bQTLUVTDZN(<!ZO7E[VrF41^.AB[CQJV+Q<BG!c"7qp1l%V'/gp"`I,eoXkQL
+%esGD^;'6)q2nh2lPM>gBh1UApQY4X0>i(@AFPJ"Z$#^Kla(OiO(%0=-gO:KJmS"7u+)o:%<n;%.g[ma?r?:M]3j%H\,ufIPD.r>L
+%ZCsOG)ic>2s2pD+-_TVbEf><dkEf!#=H>JK&"n:,l^2QjK7oQpai%"s?J;;+PNu]001?KpC`jnEj`4MF)f/XiUMoSY8VfCo-cY07
+%EuY8J$_aP+'%cFH1>K_`\C3K3,ReY4fM/W=.%]r,klu^Wq3"%@is'/L;ksOS5=oEf]u;,SXX=fbaNh8amMRr4leIWFPG71t-U";<
+%AD=6PIBVD!bE<-qhij76GbTnYcPasRREeoeqbYskUBdN'L)7^NbDc*UO/Y.$B7LO9'V)DsFN at +DRP0P.Rt\W/DW#87E*aMN-,=uN
+%$Tg)V>a/=ZXe[P8K1l8 at l4)c6\X,i2`MTH4`77+Lf,t+HednnA;%Dm0M$<em=Uj+b=L"5RK76U6Ej+<]6]U5U;C)]o\6dA!\UBFW
+%RS^MY8rJ\MWR_j&Nj@^g0["lCa6$l4?7Cf?it]\t+u:ta4NK&3H-PHX1c-ac"Xs[IpZM=r"Z`t\o(/2Tp)]F4s&dSm&4Xf*k[l&Q
+%pYnUr>A.23!Tr:+(GX[Udo_N`(>IZJC7fpF]RWc-19mgU#2G'#SU%F]]&tYte at BE0$t[GtEfT)&W7s$3lKuup@>uXHI/QOSIEm1c
+%hYkt3++%L(0t:]V<L2h!Bd_I[\h<((eou!D>4BtIbO_C*n:&+Pjee#"*f`d7"qSD"FagKjfe=HK-MsOl0_2Nn,jTU`)gZ[>Lmf:g
+%JV9AL8eMsCUW)3p[5Zh/(C.33"*3aU#?fJ1^:>#d,7J9[%N;#_Q-F)*W4(:h"&^g3p_XN(B$Z<l!Je5N!(HIr/(Gs[J)"0LD*+0Z
+%=mjg@<IQNl$=&6HQX)Ca%[1sAO6cPmAMW"fW\rBj`]MP6NE-PXS,CKn!cFcl8XTC:b,8s.Ofoq!WIJ4*Z!0OuPQ1Hp-;u/l>p.4D
+%JSeR&9UBfT>AaZXr]o4L)okp0/3C;M`O@]jNH]>Q]iV9\VV"_;"rgKf5[U%q93caQBEI=>7'NVGe#3KA,uYZqVWJ+.^H=-T(-&9=
+%Q3TUW*:&+H^MF/7SL6_<.?.9[Dcha at PH9HLU]/6`Boocgp;NU044Arma>N<ZXTCCl%K=KZ]_5WeZNN5SV`eQ!c<uX?"i9(TXi<`;
+%GipN?/;l_Nn/8GgCf)NmS;AdEfVbD3P%E;lhBb[bR,,,\OGd/k/d\LOkqZ(+5$SH/4I*!^:^Zm)o*S5SG.@;n[eQ>_ieCZ'Ai"ER
+%=38V^-n&)KAL1g6gs:A0E.BC]cJ,EU.QJR.U at WIGN6b,0WR_;n1$@WZ>SA+K"d7t!Z[Wf^KKO>E\:+Xs==I?3g[58Tmo75mp7_RC
+%"t)!hK=5<@)4SsCBR1%MbWiun9>PT[ri\=r$Z5Bu<CQ/`1Njj\:i8<XW<LN=02%T]TO3.9!_Z.NZ)##h27c[-P5LdpqLKB#lIG&u
+%^0FZZg%#2'%:J%?8.%k%1,J=,ri$W^7caAEH0)GNr#X'_RuK at i%K&hu7AlH42e?,PL(SMZr+M]cn=rb-q8uCi6^B<-I/1cM1ReRs
+%UXitTI]*$I1%rTEe=9(/a[mR?!%sl\W=+!U7HRb&X(2F&fj+Vk^P'W@?S7,`VD'kJ!*69VanjhWkh7Bs(L4S537^33H,_au5%:2(
+%ET14FUod=c:J^#+HU;U@$I%S*(TodsQ+jAAe]l.OLZn4Cc9teN?%uU`8Y at 0le7@`D,K)QT9VFHF&4c7>hgsdE?CX>i%-q;\+]+Z9
+%<GJ`<Su5ClRu<RGeYF#jJgaY%g[Rq57>-pioW@#G<p$T,K6N$G:Cc6GoOnqJR""IE[GZ(tgX*)p@@"F55*o"ob%.O3&Y*oEBFVO5
+%Chi$BjUnX/(i2)39Yc82Fqcq6#"6(fDM?D9_GVL^*m-?1,">=a!d;WY>bkl`oj5'Pphf(7CopQ<B0HSRENi!IR+iT?*C-;Zghilp
+%lp8sjZWtd<a]*YV.\#-GaJc'VFs9o72P.3P8g5m*-R4F1B+g\fiT^K^krYeH<m.<f>UM8tUSsH0L\:cCC0j`47?'ef5oKWLZJ53S
+%Jal\uQc at KOO$*IjQT"Yb4'lFDpV'T5'RL]6A(f7`,/!TsN.39P#!cF8s"Hi^h<8r4C>:O7[65'6s6A:S96/6\6**i(\\=[:;Z_At
+%=jZ<R75.i9ElCRgZ[6X)O:0dSZ*[T5OfWtPe+\(4q8QJ]JJ:LYVJJJ:+-Y'9,+AHZ/Q*]4S3!gDPZs$PeCG'^@FJ;IMMumH/(;rn
+%d6*b3)A))YUo7$oO`WG,KRs;_eE=h6)q*f"%EK$H69+Y)*/Sjij5q at e&(rr<P%W8,;A:62d*]:'5E>s.IJEo_Q at IZ=is8h<:D?Jd
+%3WtkXJ0B7,*4sMABjp>NE>!OWU[YM/K at jP6#XMXQJOnghfl<D*Rpc&RHHWlt/g1>#ghu+2=O]n_JTirqPL%g-=>FC*qIe:W,G1=?
+%pG"JQaaR.]h+=us8 at 9P@Pj?Ck.3UV>2nr#!7P!o=3$RH`YVmWN\Q[^3:fWN<UHIco"k5115EB>R9Bi6JD4nlY,rZMelWjua5S%$j
+%Sn,'18s!t7,,cIC2a>D5WL[teVLr_Rf1]G$)On^X20cL.hl at N5`<*B<]Hot<jm"sh0K4VTpaYB"eq8-TSuKtB`5Y!Sh'ddofFrNE
+%YJWM-Nb^+rqkfMA7r=<QqLY9&'&Z='f!<#en1XWp'g;s2UR4R4!WBSnAL\*o&>!e^G4RoLA]A(A0G!)97'_-1J?nZ4r+jM/7mA7k
+%_L4]g";1N9&@AAFNn]l*cooUq#i.YCVfS]lBus4"S3C3c?/akX:C7U(:C:FMUQWf.,H7[kd*P3efVVW at QHk5u_OM#+D*ou3f)WJX
+%"/-A=[KI\i[("<A_0/XTTs_=Orimn"Ib.OXe%bXB)0H'gIjQe0d*5?42$sL7FX=?];glaKl/Ee'[<GLK'A<^CP.nY_&8^7&2+U7m
+%E$jp_?S;XHWA(_e+ at V/F%A'BlWFYe"I__H%+MH,TChD5q7,/s(O[R#J)!^Jr%?hNBS(e^mB#8Y_f86)@-HPjZgjOIq)`QZpT$/5A
+%[_5;1Qe^hoS+fQ"im_`gG?P""di5i+\RrJ`JuC9M>S&b%\sG_RS_t at S0W1OdlMD3mJN1Ngp7q-+d<2maFjdd;8hsF^5)RM'hoa at 4
+%WK4\M.X)tWbQOCTM3!)EcJgPA1ap+9HUV\h7OQRrpp2?&G4&Z5&p.nLd^ndQ5%.?*rU&Wr8iXK=e*cA'7$cbRe=_8NVmQ9fpNNkf
+%8MLk!P]+Sc-a8h6TRDk`e((l]\4Zj[n/<GMaR at R0g8@]F:4>h$)_$0)r&%3@<su,<Kt#$E[A2$k1GLKoR6Z!n@(mRAdls<b9LK(o
+%G:MV55A\'0p3Vt]M!gd6g/8>TH)SjPAh]W at O2O("'_bl)*:,NnAkY%mPHPM^Gn97VWf>?rQ5B#@mSa#FcB_4=b0FEZAP9I?pR!o0
+%BbI=go0)=iY_B7pEX(+_M>-_WN8\\MVYLLW7sF!V^1eK+9<`#;BsKo1Ac$hCALJLE+<1'c at +A7IK,PHsoO4`hU6!8Y0T[W+8]Q\c
+%RJF.>=/u30n]bshToY?A`ADOH11t0;mf\5pWD[`45REh#;+WAHKO\neba8H2lg!e#oFrRb'QEmLQR\,oSYaib"EC939>;_Ef90o=
+%g2"`3`AS1.3ESlVSWYm=Wgq9o2Kl*-@^N]QjYDCG2WLWH&TF0$jg?G480)<9j=$Au'.0mf[37#9bCeGhRWH0g]TF:-A;Vp:N4JWs
+%f/?b_Ij6m)8]*)7?^Mjc3L3D'Pf\4)K3bU9`+om/)Ks`qa7B#X9_"F">K\?TE7n^\&e*BY'dN?oN`e13PX[_/H'UJ.rc&\3oDb)g
+%Kf^U:X>'L8'$WA0Ob4g%f]9f(i(R=Im at uC2$[fuOWB'N[B-Y'cjt$8-V5]N.ph<>CNTH<]X-p&gVeSsL7]n1s8a6LQIca\8TQ;^:
+%J6jWTViB)aajuc^Kd080FMi`CX1\I-)LeZGa2TZXFH"pQF:-8Q\:>oLZIS6&+?>)O.0,iu75W\Cg[AE:Cc5llc+liJ88N_W2#D#>
+%RpEh&R\/IQ=E%$pNOo'+Q?`bKina'O8Zer3R3Jr(`uXCASaZ^B!q!D]VH);/?L<O4>V>5q'C`]am\j=2#X0:+m.asE?b+s;[U5YD
+%eeFh>3!kTE<kRJ[eV57k3NZO>@Qc)eLW&*)i_VQ:9N#&W!2.Ad.r\M;I0 at ts*de>UPW%!RnmUj?%J^#>V&%Z9&:4s:$=Gio7E1$4
+%lhi)B[2)$9eJ9:,Kgi8r#p0D!Q(\Y,io*fC8pic_R5HVTgf6!0oX[ue5cLuN3N,=%h\9,uI^om>=rtXq<AaC'd"87kn,*5IM;6l9
+%aIuHAS#`*AC at Y^lS[B9YH;0 at 7YIU(6]b]SM[!edVZQri0BM1V)2QWJ8O0t7NKPf"pTM@\*?uR*!<PcG5')Q0%LP3k$,d)/t3%iUb
+%Wr<N<%>7dQ#r'4TkTga0=!F<0/WQ]#eSNLj]rW404Qi^A__h4(MlJpKjN+lE?a(-Yh,Ec,6'S?RFIB7#Ce at T3PKC,0TZhb#4"N&@
+%s7O@!r\X.!\(\kiHYb^n<]0F`F\hVu(hArT]4OQ_`o$V;ebGc'FjQ?u<rCO,7kI41?;qq(&(AIE'Z(pdZVoLN6G.R&XorA=L4K8W
+%>lR._r9j42:R#_j'J9d1c[C))6'Ep.,oMh/mPRuc.6e;Of'%b$P6,4,fmkB]+bCdhM3Htg1/!I^@c6culdT1;$$@>SoQArCa<"#b
+%+.>:U[7gbOqcOGY0WF==rjKZ;bSWP:>jsV97Y8mGFsGUEX,qFaiS%\7p=9Io,)LhS_o5o#RoY;ipNcam4Y$[XOS;T#1AP8-29D77
+%4#26+j1m3aQfSSOL`b$!RTl:(qClEW1A+!e[n6>I*jq,^K[R>",PU=hg0QUPWs65f'5EU2;P$u4`Q:aISoQA=V>>72f?9.Fh3 at I9
+%MI1IuoOTK+V92A\o6m*&-l$i>m*>2)k2EP[ocsd>+?I#5-EcJZk:E^`!1.NF2c<^36sB58)57f7Xm!#=B.s.J-rBKX(!oT#_c-o*
+%@aeZ-CO%"Z,C*tWpIcXIfM-ToGmga.qqok#8Q"AV7F0Q!&2lN4!f549..WrGb at NWd#]@KM[Qa??L]k,;?CGr@?<_mLb-MC2jI_Na
+%QgA?4od"gQdtsk+6>_rpMe//JGOj_oMMm&4b=*2G8u(H=rm8[I"+4:qW19^rMK_.U8OZQ:/L<nG^rql26ZR:$7lR8p9c&t70L&(r
+%SS3DF75J7Fm7plDL^KS3kFcl3Ou[PuebC\3?AW?G55JYL-ts.RgW7@!ZG^M#IFFlmBdu8H1+ZsBUsY+N8p\6NPp;PNM?#_Ra1&@A
+%4=F3JakLH#V"<QWP:Mil>VVMP6n6rI[O6r.Q2I'XDJs)(LmKR^cK at s:,[dq3c=&B!T:C9(mV[%DkPGX!UVNCTG>4jI,T/tASYOk)
+%j_5m#E#EU"hj(_bX4;+(";u<2Pi`?K'ef5&mo1otBcSE0eA8hHHt^.K"Win8SRZX^0%[ZRJR'3P0pA'&9Wq8UhGg.nF8<"XF)qCg
+%<>>8Kq>Q5/(Uo$[_V$7Wi<8]e\Z5;P)cnf5mQe%A&<*2o\e=e]bBS/OnoOq+IVW/@_#.`-2<<OGpKKq#T(1f6gG_Tn9+=Ue+`V\Y
+%p^U:#W^^\j"d!+hE9thtJUFkjfk,"j*\!Hih(4EVGK.)HmZO?Rn*M!g>#57-+QhtOL)5"EUf\"/i3sOk1bN at c42#%JP17nM11XhZ
+%nG*)6o2dGRPpn_gQ`2\4^5&#"cG+pD[s1 at QiagHg\+50(Af[MYQ"lB[>5b>n40s'CYG<X"M%;IgBSUtB)BZ3<3A6'i`-_W_=0?#<
+%fLANY"B/C73[jlaWe$iZhGVnN#>/7[`dG%U+U at W'OsD=$1G=spqrTPMDZEF>"E3:8SJ$mu/Etq(kJol[;_Nc<,U&%m]#=IlW:IAl
+%;?Gc7I'p[#MQTN-f.dR:-hYD"\W1(^b$mG?.!b8KX=kNtGfujoU,o_o,96OaELk>@Jj)pKlH7=5"c>eu4Gss0+R]cUSN-.9M!(>l
+%Hf82CU]p[IE\qDY at .<AYdH0*<XIR/c$<rWG29Gc7NQ_b_Tn5XuNuN6I]ZfQ%ebCaqN_PqNj`0G/'/[^ZH?uSdWq(m:FF(J5kcs7e
+%Z:7(Q+5&[/L0&CEp%LR5dWJH)5&6dF?H=lAhC.E#WO6'#.tKC159M:M1A/V8>?U at cU?HhXJCrG'1iqQ>GLRTN-M8ML:(;RBfcXE%
+%[6ro8.Ng_=8t`lJU8SAIn1I?&[S:QiX>J1c3qE%5`;Tk8/[mjq&:U.]HFY54Dss<mEU$LJL$.O:ascXP8kH&-8aiXST&l:udc]])
+%9],VTgu]FS,l(:bRuS3?:Ytob^*E_6iFZ!%5%ldnB at CV2>cJ*6[NOF(So:Eba\0K$T5qn:)k/H4iShfoqb@\pJ?FW=MuSi7 at pXZ#
+%glikd1Fg(-24Vsa-`ASDL/+IF!R_0MAe%d6?W=\E#Cn0V"KYPl\1p&?YA1Ttn6$;*Yu+0l3"eGS]^7;ck8pU=Ou'#J=O%+,"M6Oj
+%[=_"#QcG?5Q(O//+koP5`N8YLVou\-AMrefXF-iuS]_)!ORUY3H)CX5%-0$"rnK:oJe#nOPIt<#o=.>M"h'kQhWRXsXLjRu%VS9#
+%cR6K@],)'DhmU39Hs5@?PeW&A_,uRjb8FO4^n('=0_d#jRAe'^NMiT[XP:i+B_iJB+R<9[j)AR:6L:*8<rP0/kMdgjI&Z>]h:YCD
+%>a\p>)96f(JN^q%)XYdbR=:j,&%a\1j$DtrlX[K/HebK)[R"8L<q8G2H/6h4E\'0cP$1(#0)''b5R'4*gd!F at BC;qJe'eUQS;Kp.
+%3;FI!i;;GHRM^&-@,na1$I?,XMNrCB28PrP/;Ak]o).X\kgSbme,m>Sr[YC3#@%3l(r$WMW10Z*4sg36Bm>&X<Vk?9^#_n$\ctX;
+%'F&i9jonkNo\4Bd2HpkAVl4;],45WH#'K8^iGYP&T+]]^\>R(,/-K3`H*MjX(7TG/f,$ls2L0,TDu,;*nZXh6 at L<[2=!g+)9M>`n
+%i:lVdoA!9CkBEGE:EUsidcn;kf2(Y`.J]gmaA5?<P at W#-2?h"VR#lMbBSSggLH$%TFVAr4B=6ToisKB_n*X`$rK6R#m:<)X#bIco
+%j1W<0/,C,Jg]!#PcWp)M!,&cL1R&VQ[C1'K6;F1?i:WBts1M at V"Q7B>9/TC`kYpME8]s3QHV3%0R0I<QjT%I*9Hf0,[$`QnO=B'a
+%3&uRoY/iKr%AmLn)`Ig6a]?X4^mK342dT_X8]m0cVCfp"CM0FsZ*@m+@,M(J@%RigOhg=0TmcCOm(*iZLN,."NDAcU*;r^$=,rZ`
+%N,GI#4)*:P$1bDdZR%LCYAD_gkXG!Ef($Nbh4Nb at I)$HR$-"&AIXDn0&;X%0'qY[9](XTd!$CKY]ARU[V81Y%e?]"<Q0d1Lcn.ef
+%^',P^p"3mt`6['nTo(?M%%t!PMrgRbfp9j>*H4d?HVQStS\DGTf,RN]GuT3YAcTb>2lSJi.OER<c.+#//$hOkH*Sf!nE3!eernG,
+%SH!q>Hko at -GHSfIPhPjGOlcqkDT&4YP9$D?J.]m`,qW/>U@;n-W!f1J_G=kt"r,s\c[I,cs#O at ap2OqAf[<gT(:uCB!K4eW2ALVK
+%m8u6+K9#XM78cA^"^ogo*:92]q'>hh\Ij,+8^>>#Q0Fn]f%b7>5pMG>h)Ka1YWc)sf0\CO[Ibj1k$r=[j1[B'S,,)`%1jl-GO955
+%95YW2(q=/)"%0s*0R!`?N4E*]Ofm`*44^t/4aW4dZ%)]#Qb^l>0ZQc(QV<Tr5jE6\G-n,'8:1`XE^gFS=-A$j`[JKKOhRs'-cktA
+%_FUt0IMXq8C(!&#q8=S7Y`e0J<S909;FB"BYN&DfePM'O\CE?`S:Q?HMtQF+R3k#3D__sSO0[\!Yq%TPj\fIgU\8`f6DRRsfQXl%
+%#FuJD<auf2iCMpuJ!NW(E6:rMpDt:$LY"@0p&=+D06^`*_V=lA[nVjO\cM$@JI3l4Vt'S2kDp[==90L0pbFp-ViPBe6#hN7]1sHn
+%_i!e><M!!np1$[q4J+,MgjUE89YPC:&RluaTC70ZI+Y*UFn0m[/nsmrC<ld\a]:uj+&8:HH"+C_lUEM3">/N;qp>en'Ok\o(>q+\
+%Y/&Q*TB(gmL#$q.VNY\2ZJ(AS5VloXJ-$tu+:1<3/9dcJ0c$fk?Y<GfhC7QjFVme.f]ma1W;r6.C68^rM1XJ:C\7[ah.BM:f/X-I
+%>LDEe$%^LTI6miF&>gVgXSnW;<;+R&T7#:=ookf=-$G6n4?3af#taq0qjUZ,T]b`%.]%HE at OE4jhiiDs<*F9m7o-I?RLF&q7I>Oo
+%,7,Lfou-"jKS9e:jib3^XmL1 at 0%Ee8`l=9qJ8`T?_2n=`[:k?3K##&&[<. at c>XZkr0BX5?Rmc-2gP%gs*Y:&XWVUiErbG1Fpl[2+
+%:We'be;4R2(=egTQ0Supc-H6^aL1"^T%G/7i#,UtpM?Ns7J!]0&DQn at E;&Du@=IOtqrdb-XB5^c-=@(e'RdlA27;08DeS`@PS8aD
+%)=u1p8=[rLZ<cS"^8XAVgTTC6Mh.\`m(<J&rE3)HWMX2^&7"*IjU5tJHY"O4#+QlMCL!O0>>DXgd]js^e5>um8K50G(=mM_n.u.L
+%hnOkYQ7"a3h!4jE\K;+ALZ(IQMTb)S/Q8RC211)\=Ph\Uk=]GgRN/R#;p0lAB(4WKbXj;IT2o=J!]]]pfiP&H)(UK2A[N;Ig#U7k
+%hFd'`>i,'d>51[pcXjZ6EWk'W, at BJ'Cp(nLJV6NNZV1g5V&Xhf\O%#(YLJZoI2e`Re._;9g>mk#c5VC9k;<9%LP52h6_E'ffS%aL
+%DHo1i<IMN8(?uj36t,QB9(`m"Eh3(gk;MW_Ngf/JQ06S\gAE'gF5F!J^E5m``\O8s?L4cZl1B0pAX6TPCJ&Fa#YpBNM!89(gm+],
+%`nB*K?L<G1Q8>jgK at s22"E0I#^Nd2S*^)o$EZ>P;;[+ss]BM(.FQl_59USrp](\'Nc0K-",_h/'0R>Hf^eQrdEK'9Z$s8-DT:,c.
+%PD+WpXAE+4^6'nBZ>+7]X4B9D@"%l.&n17R+_?(p^3uG/gQ94G@&J/Ol6_VSWs?$s#p!f=$IiCrcc.s#\0C0F]u]3po+)fOC>gB<
+%B_h!pk-Ssr+sN:TJu_[B at d8[.KKF+N*5&$R!nJJh:SR8%_:nG/5#d9c'I^Ml;*<mj18[;uc=l]0*?YidS)YH80tX8299W+a]-TB^
+%:f1>_V>t4)PI#Rsj0)F;qYT#44Qb-]LQcf13K-J&j*FK,CJK::]J?W:3TO\],HcqjK"b7EiALSP`uKJR,!G2M@=0!o+O`+N?-psh
+%s7^'!cIXJjhjcduQ*:-]].iFmO37H)MJsC`YkQ*3%P20-E%V?a`&KF!6E9*olr$Xb\*)PU'-AV=4;d="2GhYbnM%AkkVg+9CXh-m
+%#F,$MD#q4c2.OhJXTWtpAi\!_o!&(V1NN>lA_&mkPD@\XGC at gU%ZGOB-n474JI$me<.c/j0)a^t"0m,k$Y$]Xm,n2D,*L7c/8pQP
+%QNc-KNh&B<m@;[-O2fS=H3c6E&TE at Q9HVlc/Y at 6Y])-'3O?=(Bn?t+ at s3<6K)>DnR_RX;e\E8=i6WoOso at K-]hjXH6ZTgeDYm*tl
+%PF0VJSHA[4iuDa_5^oHj4_C<n3u(&*6[i at 0_Zc`MFXgh]B.'9Ljb.dfG*0JlX.cQ1TrEJX3r)A98c7^Ma<)ga\a#Y]8nuU5qI"CC
+%g%A#BZeB+$>$ot*o8uaM\sP0&La7gb9qS[mEO>k<g9TDqLT;=#5]0_";;dmj%[)r$DL97_^&NE9P:ER##A)XVA*5n_!<`FF-Kr&7
+%3]dR&X(=>#k/5Q"es)I.o5/WAlAReqi7^sqF,lQ/5#ae at 7"A3]/QM*u=D-VLmb>k1`lA:Kkb<K'CNHQ]FnbEfqK)UKeD4%S30d>`
+%Gu][%$,q#KoHnfS*9Wc, at 94aP0<+!.oU8!O^17/d at +o#4/YA:.q>5O0BSmjfc2O6$D0fLLc'AS`g at NNi]\!cUT1;f#1oh]Ys5li$
+%SsUPQWBF1sDskGB2F>\`^GCC`^?5m<YM'FO2CT]Ug at hM#A)epRETA,%hr./XS_$fDc5betKFNsk!V+E1'9im at aqXA+P!DaF\kT-@
+%,ZZ%JA#^N9*h=2O7)A4m#CFA9.@]Z![I9GLK]HlYgrPNn86<oWThBUc!J1VgaJm!3SWVc.6Cg4,=+\dcPqo=<4jLV3*>UpdX!\c>
+%8 at .FG:ao*Oc&#+`9qL.ajc\\fa9$\.Gk8V at IM'g#b^&g/:A:!0iUl?og=kfdfrs+NDi(e*IaR at R/u$;>840:Y>Jqb/=mG4)b'>U>
+%C&<$"'/T3`MsoH%`n"LlRCJ^o/UfrP+PnFJ<7F'fS'FbVIXg*`9IuoD4oI[UQPt:tjIXTlOaaPaq-"dF=C5)=<B5b!AuF0bY:W`W
+%KCT8.1oRPr/A0koPgQF#4M`g&%+1,=O4uG2-dXu)ON:?kSi"T(P-O-Qi%0A$:.Y4=GrZ0J(<DN-E$f1\q:a"eHQk=#'&`$j<(]j!
+%P9F2W#=[V[%b$^"Y<\Gn_H]@`m4)t,=J"pWmBK at 7mAT4?oYAd6]c>->/0>d1TjQ?+\aU\0L.L9fMic,>_>3k$8Zdj1c$KE4Yc6n=
+%m`O!)R:kP%EnET",FT/N:A0HLfS:Tf`&1CQai-`t\"mi6q49\A,aTe.D]"!pAQOL7BQT^OkqAP^lJ+0(/jGC2]_Mp$ddsiKgb!66
+%#]4t\nh<tM2?VQ*lb`uuRN$fP3F$YoVQk9kP7qJJhf:$2`]naD9\9jYV!gFI,Ep5"KN((&W?BpXRV?Y9Y\(^!S'LO#1f]"W=:ai]
+%QVidr$4i\_"ku3)f/D)!^a4.$l-`AtM7dj<oAh4k8r78]BBTrX=VR,^Vi$\5h:>ru2;T0]@GTS-4L.E9I<L"$8\b'>kVqZ(RAK-R
+%`6.0A*fS?bS[STe9&FBS[+Tc4GPYP6\&l5mFus^[o,n]A'3e484V\6n45^gengnk-o$"2Zi at lO_i+(-VeZ6':DjKJD0hsj4Dj#XY
+%CO=IW.J^Un?o\WH$*id?B<Ko/Iuii?'jUA"5ag>b.<G&&Iu at Q9q$#k[fG)g13Cn<JQ4*-*$X!Ff7Zp&O32G\,O.[;QB5ubo;ZcLl
+%S<LpbgCsqR9O=iT._005c($bT.A\7I29Colo4-H5s*5Q//(tkl)BV:11,9%Hq/aS:!$`ZX+\7803"4]B%3G+nU^8>n at cGjYFKe_s
+%EtV at rC0Q-KRRs]>TtGdD`2lg53A/'Ykm8rN*J8c+.Y>Vd-clH'V6s/*qt0B?%?J&4?e0+MW&NP*Z1niQ=KJmkT^%I=QHf(r"D(tA
+%fV(!3L=fFjC8q2LdfH,`dF46f;j`!T_q!Rl&JUGoYGJ>I=T=a`02Ku:@Dau4ia:0r]OLjLd'QSh)kRd/HTth$Kko7`Eo0D"P<d`%
+%I,!T9r'Da9Ki$trl/UJ)++9J\qF"MJ]@/\)CK6]+3RIZl#hSsA+09fbZ6I$lGg!_AjnJbA/gM"^hTA]eX26OKZ:?V,._VVH=nt0>
+%oVPa3l'KVcEUmAY6gV/EIZ?i<,+4Z4/pK at YPX:QF"'\ns"U`jGM07oc at c*M3PtPi=K(F(J$)*+W[+(QJ7W[=6`!=[L/e,"4VctGT
+%"c<GqiiP!&.Sl5dL4M?EH6;@iH".Q3(348O%'_&NON7?VqB7OU;l8k'iQ-T3ers4Egom'\p6QndI*q<Sfhfj.$sMK\Wcn=T"mb(T
+%F;'U,bYAR/f'-0LfPF0a=u5GRY-TInhtJoe'"MSlU+*e&BTcAsC!WWSV;uD;%=0-KC%R0XZ>ufkp7^_*Q^\sed.K\[,6'jB1Y46u
+%L9AV8UA6MN:+fHSUmT<>cJqTIC_m93d0`b(8oJEG=$O.ikAuY:5CsqiFjNpu(rVB'gP4^E7nn@]Lgo7]1j6_^JLtKGJR8_@=2%H[
+%ei`ts&%bspod_d6+([n$ImTP09T5o#;t4HMMs=u>2JF1JpPYZ_DX;"#MR6"D>6A!;_9r at P+<lnn_.K"W?`U&:0&cCSVSZnYP@'Dj
+%;QkkOWMS/C'<PL;_`SjWa%;Yt=USZp%GE2<Sa^cq1+]FlCoNqc\%Di#W1[uf5UfYa2k9<`g#)_?e:lYA>s,!]_YI;3YWl>ifqj9+
+%no'*4\[M3"pA3L?nB<AVs(4n`eO\]TQR)TI/"P-rEnZY5i<jNP1K>5;l908"5Pjngj%u+ at E7`l9^r*-I73)B7h<NNYf0tE>N>^+C
+%jA?%OVGs%Jh$$ud:h=oL;s1"kORm(\RJ;bEA:f+;Atnb3pb;LR1&54^RO8`hT+E_.]5gM7*6d_-.%!/E$^0tY4QJ at IA>XnP"Crta
+%QnhIcbKIJk9bEM<D+or"[_DZ[X`Ja'LEt3+atZH\*dF''"-S*'q]jDX6HHtROKa5mP(*V<HOqK#]Mur[iKW+%if:\,'$V%uL^O?:
+%$l^]=<p2<hbNbVBj>-*ZR!MX5\uh]EOKZu/2,Q=>rgRdKeDqFI,8p4OVGIJ\bILu*d62gl[,$X0Z1P[`&!ZEeSj"OaFUJ05Yu%$'
+%nN=o/?)1mFAF$n=KZ)rsJ0iBPlh'1-*h.3P?C&DQ6-#<h#.=B3'Ab+[2Z_?%Fl)ttgGt7g)=d9%J,+m$SP3.A,()8W at k60\M:`j$
+%lU&:i&%R)DiZE92.aai'nl<CV$H8kt9`f5iDi_\cRR!"Q0p3%8Bnc<>@g1NgOQ>7%;qgKIX6GVBQp[n>eX&=nS%_:>rPXW]f\eV.
+%=N73LKtubuYRtJ`NlHb5OeA;AWlh"0p9Ma'.FmbNIWH)n0sMl&J75GR:MGt\Ar7o#)]+OicJ=[<'`i.qZ#+Ah)!a?d4*5B3SapEQ
+%!XIi'6jm&7V\Nu^iIV#uKj8J)IG4b<'VrVJ9Y'O$"YL?qba0j&`4YKe2TIl#!S6P)LA>,)2[.?q3-B7FjMM._jhM(B%rE4K\5M^*
+%)_&g@>(>Q+<A7qii__i[oX)P4KP-\d:\O[LBA[s>Bjk:mds=2L!R4+1T^JZNOg9ZmgTBX4%iM/P*2<i?]nA<ID-#LU20(f#"O.=D
+%I()bi*^7XXM8$SX$D_93eCA at aN>nn?a%J45,02 at .o*3mN*s'IGchDs-"jVLu?V;69QW99j3YX#(Cc2BDP5.5bD(U1K[YqPrALDts
+%r1EkVFS%;,gf^R$&pVe/V[.Sh6:&tOeqB<AQY&SBpbA8cZ]9D6jqh[<?<+8`6jQ[9K;cg-=rV^'rRM":0:nR^/YkN0/G0-3ItSXh
+%oo+-TklT$t"#qf\>!g')#(A(Vq!UU;eSn5Zc(2E_aQ at G6Di%u?l*mPQk0_ZnL\J4d:\KtZ&e3^Q1WHh+J#<;Q\qSFn[7l"ZI&?rW
+%X%k<'C2,:h_UgT7$$e<;oDa3aQ71:^SN;M[A5VDR[G+*#Y1Po(c/r^$/d0^m#ua=GEo^QTf!OhtE7H]KNkoa-2ljfrS;4+QV):_<
+%r!MX>A^8>NI5P%sT*#%)3jq^ZQI^nu at J'-7$t^[&_RgseYcY9kYi#$qX,_N:-4 at an.faa^d/e.%:Vd.`!;NdZJunP-'*r[GVonRF
+%V$OX*iee`*)[pq3%LLe4j2#jG33^a&nh@@Q1`&*-9\HRr.Ke69Nt7EISrt_6!)X\X$3k1DIBW>fU+s06--#pl&ph_eg=LX\">m/A
+%_hsLm4%R"gWCWC?i?>j!et&dH/b*/SOtX\d2sX)i^hamNFei`r1+QjQ.QXU>f0-\2>b-b8jB5$TI+iqq(o at 06r;%[*EkA+t%&D at _
+%=pn^+CLPSZpm<;b0MF at h-/\A%"?pPaCifKQZKp3V>qr%*Z%Do<Y#l3+D6qu2?FJ`Jd^]W7;puru?@5n),rt&Lq*I0&%9PnA-T$'s
+%H'jNf7LN-E>tcRM9K?osioffb6>tEZr[9gMY4j1L)W!/gnMuGTK_,^]/\pl6[UK#0#V*7g)T1]B:?mE;'D+2(duuPM#-jpbiVmU2
+%>\T+JV1ga7.Y*c]#Vc&$Vn0$6P1mIrRaquk^AeI"Z\b(,m%DdmA/$H2Dl(q\mSg"s]BnuLG)Oicp[)+kj>HSUF"6Pt?SFlc_`@@4
+%&j]G$kTr(^B9da%3H4QWJX"@M!gn((l59Jsop?,V3cFs,/`oPlOWSGdSHqXF*([/r>q!6\%&f2#\'f6N&m4Ts48Q?9IiZ))#`B3p
+%\bsoRq7_>8><p\$W-A%@Y6Y'eA at nel5\1rOJ.p(gNs`ShLZ5^a+UTA$c(@QrWO(2R;\h-U9_-#T^/&tlT""K/D*Q)#TXZ_QPleft
+%'C`XG1q88QroFW;;o6I^Jqi$b.,Ms$2hJGBSsFE8n_o]-Bh%70?s\e^Z,(PRKp1ahIT*u*4hO@(&L"\5XP(UT8pGS8#/Fmk^HeW0
+%X./u;q'>@:41I3mNI!uV[&&P3)-gM3p?>`.Hp0MFm"Ms*/K_UDG>?,Gch;8+h%/uKAPtG."=[=a.=m+VB+%FuBTW`p4^HPX.tOK9
+%><41CC'ik at LmtF=Z at +S&qt.?V1k4i<.IMI)E-j'0?h!j(,S)-CUq.Np7$;_V$5Yf*H^h!7F.=^uY%B&_*P]G2-q>AYn3"j>V]]=P
+%8:jNO9(kBY'=Dj[DU?nu(o/JDmJ>p7d-LhT?L#8[\Yknl#,?M3M6n`'m.F^TrDn?\7$=O@&R^k`HE\>[`W'\(2A,Cd9prZ7+g0fK
+%U^lA61A%]H=9`7h`HS)'e7bKj%\MAso2;,t0%4&>5rd0mUQBX(P2*Y+Fqc\0XWRHTL3+[9].BGZCUt1F)Q0(NRU_(85)bEp%-7R<
+%3Wp5ZL'J$]!-&]*$btn*ZZ*)0JcXteF<M;DNTLobheND4X$&&U.eWI>cW?KJ%j.>mmo;U5e at lI]^1kLG_5;r6gV_+uSq/b1q6!QR
+%^4VOt+qQt91o<mk7GpE+=_5Jp]SWBfbeH!#=7X8+:<,"8Rp)EFK]&!2>k*q(:seSF,ZKCWNZ;AYQD!F3Pe=#$!Ubr;d>'<k,dMX?
+%?Nq&'mYk^"l7 at VEp;!Dm9a!D/?gTsn/8RL#$.^]C%E&E0h^PdCBkA[5PbQe<V,U&=_Kmt5FrS"X4 at P#Ae?!9;SUW]?U`pB!_'C_F
+%PG.lSePW2hI7iRb0cSM'H[L2qF'2FC*Po*^q"D6765=XUpN2g=C8<bXkFKS)T^HU'O^\mtGFcVkm!b'4jc7Q#0*0Larb6 at qRk1t2
+%4\hbD6 at C4'FnoX(*Jg!iYW at bl"gK=Xo40aPru:,O3p9053 at lU`8!)gVQsuL0:F?bZQK3;(P`hWR- at -df)9#TPYgLuCFu3C'-#kcF
+%X9Ta3^QHQb>YMqm7Gq9?hL/.$p9g9J,[rnZ;X/k/<^V&MPY;!$Y9eI[20,Cs\YeHd3Xm%6VMU75+r6s+jP@[gU=bdI#egp*G.TA\
+%<(F`IZ>r,Br=TlAr-=KEJf=,GK;5j_k[V%eNdik0#_Y__^ZjcqcUNNGYfP6MjVV\q7SjDNmErVOmBEH%>ej5gIHd['+"7Et at 4gSO
+%'#'`Db,;,BFE#Qs\n[?B'@R^hJG+_NpF3W0*-CEp)2`q5`_p`oqqA#eVXW5qOo<u1(Z:o9;"J%;))>iT:hT:InP8se*L"un,n]'#
+%KtDc=i2DDuN>X(bgV at r!rB-1)h#*hg-MPqe.r3\7cb1Z at XY3?X?#.9j"jOn!a,Q$+PMDbEF8sm7J/HK-E9Edu(H at LTct2J3VWpp6
+%6h&2hHji[7[lj"Go:ZacFs=*1e;%KpcoPU<DU0lHBX]@5XdliaD`9734MaF<<B"CPf("i1-(ZbO:"D=$1^!`f`5a3?2lU=/^BQ2G
+%o&+kkX<,mWmqD&\lNt9MJHu)H,QjTFQ1So$p03\.oR1e4;FQYW,l"1nI<,tkG;Y2JoBQ/FKf2Cqgqh['p1dnjVRj.a#h1QG^1e=`
+%2ZpUu5<GQJEdqGchWH-!D,]u)Q%NZa#Sm<C:;ttGfM8$D?4&R%4X`+Cc_=LTA=d)BJb4g$5h%D`YRJ\(WTBMD4a,->=6kRp%qiR]
+%j7rH at QZqlAR,31_\Ga9LY5*KtJ.c.RYo<(sX//Sd"\^WPEp/_PNET5r'\]eQp<j?Sf69s?3GI#%Qjf+)b at Sor9P-k6.2TGEa8ZAR
+%r4%n?n5L24=it6d-%hD+iX>Q^'YHj.U_Ti4cULuB*c%kT^kCs:^*<f$O\V8 at L$'d!CH"JNp>4[eXihO5nUdk\-NPHl=uZrccdQgg
+%qPBX3T)&8RI+E=BQKKQUYnDuZ^SJ&<$PXVfXIZBue8pT:.[YnN=H=\0.Y7Uh.[`*2NVmH6*D,W4%#NU.]6+8O5`G"[NFFU\?h.&Z
+%8nupi2SX:!"0QN0&`Q\FNdIeqS+"A&9m)B0k55fuLPs/bH!`IaaauNKAd6l4lma*i;%LShFr"a"jW/(,;0'dj.e`n63?`\C:\No,
+%oM/L#=dhG/hn#nJ4:'a*P)Y\%@%P9)30,,(^)%fdV"YR(F2!o`B*-0`doS<iR;;&U_:>W4WZK`XCn_QPRX#M.%B_q[raOc!-0='$
+%F.4=!=L6,5lW=Xo=N<7>#l)Om.F1Znq0t;YPO at j05&+GRN-,^jed6(Ma_X)L&eH)I_,Pdg=M1K1^sH&4AeAAk+8mTu at BLrlQi<$Y
+%Q$'0okl+]>h]Kkc62+W/g22%G>t7P(9d!..PPG"l*TQeYqEqf at Mokt<2NRY*I3biBA!sW=T8fC>=TtmDXqq6>E-&?l]!=Z1?FM#e
+%%*VfY3FAe6K0:HH_BWTU8N,r9B"rSJC#l'BgJT(5$d;2Z1XEcr;J(,OH7Du@[0-a1:7f'26,JCQ_3'>91u?E>P%lVLkiSc(j6a9[
+%neimN^U?oCQ->-omq;<K-.o<+o8X9km[M"u6#9?@e8uN6qY>%^2O'M["6-Nt%b=C.kc,[^W?lbQRRJ*MrOD!+qq@[=#EK9$=#bYS
+%\/W9R-(h$<MbD2GW<2\a0J#:FH't?;3B6mmCUQH7b$1#p"'h"75&/s'OS at oT0D<jm_6ABN](5M.&OD,-"+eL"nhJY&Beo>Oc86GA
+%P#;@B/@Cp0JfNGH/5gc)4C;!.%3-;Yd4$/foP]9FU=EWf.t:K51WM-js.5LDAW!b<@<TBZ$TcC6kJd"0>-T<AS:'-2IJ\Dq1&]?g
+%Q6_C$\>\$0EX)?o at UYfLNs82X[ojV5=\67P7 at R3LQdW<]PdmSc at KHr=IA;he0/kHE3tTa)h$l-[WM9Nh\]:Nd_ZUJOB60"BGT:f$
+%HmeZg)4lc2J6mD*<M(n)M'tYg#&Qm<e,9F&63V2CoHNM#<-r?/V-G%jetj7,!"[LuZ4#gZ<QSJ3lkP`R4OXFXl^fOC3orV;:E'2&
+%C*WjtY2;b:At0PsOR at UDM&5m&B0S.A.R at YGEl+f>U%:UMQI4$4.<S6m#8'V2fH0Z2PJ6O$5-s%,KQ$8KDe>X&G!Gk)Y/qG"dmK<S
+%gi+!Ef&tlGS?u1=gcP/!r0p at 3=RlX($sJoqUH49Lh>,_]3L5VArli#1A^cEID3HW/B$m$=qM(t5W",WiH5)$dJ58pKi_B707Qd@*
+%a!2%M.L at RhmY$NZA9ZU1M8C3-+;RNGO[\5Grm$b7SM=Dhks\k:KDUFQU4HtZHk92Ze">GjZn)jf['Ym3413SQM$R0Pe(";d`8Ng0
+%cIVmbi+%!1U`qpHlorPeoG)C)3(i?q+,S@/JkZD0r[(ECZKKQJY:,Q0PD9Q*9@;j.R)2_YAGAXoa\lRC;,T3+8!^OD]Fp at 5*aoYH
+%.pgKVTWk&aKFC)SC?Tg)mc*5gT?GWg/^Jq6[1:u)G:CN-I=4\YNtW6V`OanE`+5+%/+9$OU(tfJL#'T^kL7Hg+M!"G?7o"RChgSH
+%<"D]:l_3P&8H3<HFa7MBqkV@^7HnA\LD<M#CL^a>?t`?8P5%lY'?T1I.SstH at d5E-n7:dB1$6Y\mF,]/8U:m937scYb4tj3 at GRm5
+%m,$rA5aILnkKn#M:X`bo5J/N2WaasN43=bR?K#`4Q^bN:DZ!\i4KZaD@(W9 at +N=K'##tG)9,sLD,q3_r6h`'=Rtl5d(Y2s?LOEr5
+%Q&fOmodhP3g=<,eP%dRpeG$%6O?!`cZ8q/&nK\_0\'ito9V.^cX[YnQCdJceFi.%TIM.>Qd!Ke7fZbZTU!4:K4B?2lg?s=E90P3n
+%rk,aPDL3WJ=Udn&\$.kb$=#<JehT=AS>GgkEa]@@rc\S-:J$2b50f0io^MW`%[0e9CA4Q2.2$1J`m%.gdk<et6rc!5qo<jX)RaAn
+%,P%Gm,3Nc:%YH'(HV`q*\S5&n$lk7E[oC?RlM3,7$gpG19!gH^%a&a`59mn\2c<rW#t.4&X`+q'h&:ruA`-Uq3FJ8$"pTHROc.?Q
+%HYP%$J[Vu=;/@\0fV;iXOcG2`^Lj?/8,aH>EIlN7omucpVsX1Q=i&,?SW@!LE%5hENc1*=[UT[Z,0P:-o`Zmt2\0HXWE+!A)EAVe
+%@TqkukE!22rC_2s3g=9nUUVaO-^Ef7VeAQII"[L/WJ.NrhH%ta@]-W6;JrPfe;&p5?=o]BccnlV_1Z9cCb`?%lZk<j;D_fn4L_0[
+%!dPhFk at c.e+As!F$AlVRSYt\9PMUFe?-9kTUaFMAM<]R3:#BCQoplaVk9f.mDdHVO,_:!M(6UY.0)C\8+/tn2THjpZ!/O7L[$"Ts
+%mWJAokJIG3Si.:!6#T&kj21 at 4;H]A)'7C3%*G?gOP*;no=[skGN\-YLhim).C7ZpeN at Hb'?QP6\S)")pbTbDV:OQNUb1%Vnl%,l(
+%R`7%&op)5jnj";J9'kNh:d+%@jC,'.Fb3Md^L^/8T%@f at I]g4LnN<f'T=dG<GFFa\_f>PrU`$1(;]sOZ_KXh_"7kbSfuO@$*!VH,
+%#c at aM78$XP#A;HAWY<7h$b,8)=)t(fT==6TS!$C._<qtAHW\/mI&MT=!<P?\nDH>0U/cJp0I2,j.jj];Ktk71IO"#YW#]1;huZ>;
+%1>k4t&71P#bAoBW("-DG^rD8ZR=]hu$lXC>3N)=0H!_Pj.A:ZE];+8`=h at I=rD"Hp7?8H_WAt=kLSS8OW,.I<gA#,1M^J8r?pVHs
+%)"Wt;_3c0\DVV5D\0]>T3QRO="4q=rA84,18Gqn1ahLM1<j)29cRAhorTb]gT;V7C=+)eXK&]`X#8*c?,>9''Yp8n2V>,t5^K6lr
+%3KQPImToYf<%3tTXG at P@.J2faN'D6fk;Q5!&r7APj`I%m4pd,Po&ZVpE^jL?=erMalNgrZCNmB]%$5chHIJliAgl6O;,pKt[q.=?
+%p;<d-[neGHj33P.S.L$D0n/79pBuX!`:d(KRJNN+c>oKeZpi^LJU<b(aVnuSPKOK65V92a#s'a_och]^;*9monbX2[M0C_N\Ko'>
+%AhHA*UY>s%E(?'3Iefi77?6IbT>Ib%"#Sc%c\IEgEF_Zdk:*@_ai*?b-_5Q526Z&c=]cFXN923aU!A(W?=$9q;Q8[ClXo6-BHLAd
+%U`+2KYm_>7X3q&Anj-iJ6Z\(i('X1o3G2(bce<bKh9-=,525$R2GN"S=D+iF10X26-o>7_)!qau2dn+ohupMOPt-1/G/D#c2q9?\
+%d.`=lg%<Z*E#\<tp'>4i4KBKp-9l'E20ja8%R36939r0K at Tit6gfY4r:=a,.kWc["-X#PdeM/Y]mmP%!X/37G/LaJ!PMIVdr^dGV
+%<rSMK9cu_s=&R)*GY-.rp^`Z5cht0bK'ROVd@&-[BC'o@#c=?hS[][$if1oSc5]76oFW;%/@*rZrk67(Af#5gC/1DBZL]*Qqb.IN
+%Q^ke&`bK`T27)t"(/iM9>5SC]pO9'+'IjHTq`_F#kJ$s_n1_YESKjaeM=)oOedDFASJEuTCRJ>e,<+=*CFsHNnE25EQh3EiY\GKH
+%!GrWOhB[afWB5SgDd at 4C&$d#pXq#J0,e>M6=M.3Dd\lL,ACe]+`htdVm^EBkh-.\s.gKWR-M0,nXjlcLh"!R#ht)4bI\J_$R=tb$
+%6Zp4GEn(7 at bBqi/YggI#^6Fc#A$,SQ'RU(kjRT218#Jl]r*TcsA=Vi$O2kNhR(V1&7^0nJg*\g@@@!N94h5-lIbr6^cIRt;(G<R#
+%@tD(-[goS!m?CRX@`NL3J&^-b@`C>i17$tIPtErE6!aoXiS!m88N@!ShFU'p,G&[cHi"!d+4#WV=[46!;1;MA8u$!CZK"\KWrrEC
+%*_r at gXW'.)O_QMf%Lr2gTaGN#cX]V<P"^JC&I=4$E[<9Bd6c,SD"8#&MR#P#F%&$8Bq_UoLQ`%#54K?4Di%L:blKsk<W:o>FUfg\
+%Kj\fu3ULqVPo8H-'4ophA,.@;T?C_N6G?!KFLs-lY8/Y'A_g+._tigae"L=I at d>J)s%*K$JQsa^qb+)aVHQR29Lc3Sj3 at F%.R)4F
+%bl')K0-;pfANn$8E!bS#>ai'O(>%*:luH6K>Kg+7Vc&p(f:U5 at eHd,;9L:d,PnrPR+;H$IGJkt[f#;IN5N#pCr](]VXgof:2-*$u
+%;E4DXT;%]E.[V=ZDESMN?&T)6Ng.Nn<_&4]R5/81F`6fp;!(p,L'4fG@]]%jYG3Uml1]/4;'-d at lMfs)S8WjQ"oL3!(UW8^__7A,
+%Q/nHGBUkZ8$9ff$5-tJ05&?5<o!RX*j^]<eDU`69.U&n3:YnHXm"53N`;c61X0YA`mrU\8Q9%rpI-j!"+5Ht-5Ln=X4^SlNqEC4U
+%l8a"^'$R0sa,KbA;^[SgpO=fV%rTIf77cTjGQ1u*EJA#ULJ6sB":arB9APeF'TA')RWNl$.77R2NOIU"";s/F8K!Q&ZIjFbF1'DN
+%hu)NmJgV<!fI=0TFP]qQSnjK at U7EsjJI!5`]SO.2UhiDuV$$E*;c/&Kf1lZNW at bVd='^;JVjrIOHUFf at G92CaC^lY^]IW.]lj0UF
+%`4\`?/Ua)Zff_e\Yp:'ceYa8T&FuE.E.HZ=LW?=eahAMes1orkbj"m[8Y[^qeG!9FJ$jh0;"*Z,U#W8I\0^K^qs'Q.23gSHC*7l_
+%^f!Y[Q'kZ=fmKY*P_5&*DA2jn/4VEQM!rnCeomk<OsAbRg3uc$&k!uI+,.kn6_KCuC2S&Wl^jJ;>:>kPR'@Hr_T/05-GYkl*,LD]
+%'29I^jE+Rmn&[e?jo7]@DTauQBW>E?Xlq:=e<c2LQ^WK/d<q]sGVA7%&bfg#%;stMMip>YJ[,`M43rbeA at DVq@G.bAcl*7m#]MjY
+%e(-dpC?t?DkTI7NEqYU2V?b/_J;3eJ5?iWJ1C)a*3m"WeT1a'f3\K%aB%k=000a)!?SdSO1rGPK.A\,ffKn^Ja=oT$QM:XVEJeu'
+%+m'nWp$tiAKE/s[UnqZ</NIk-+7u&\e=>:+F;p3bG>!rPb6SJq<7NK7$\$seW)8OH8DKY:DU)t&:iH`b[OX_bT2JCg/T[Xl&@opA
+%R<g"O*BPY$jh$"'NB+k$rIr"(@dRbR:5A'4BYg8K^)drp^oKR-%&LBLf,ZOJH"V.<:@UI_Ro1WCW]aH:BXB(*e;nnsk])(IB]DX<
+%m-L at -pA2[j7S^ETC?'Bq:BLUP>Slt+Y%N&PnX,'Xno=gj;rf=u-?d:SCXD3Tjsq0 at kLso<;qpNmlTN5B`MS^pHS-^A>S!S([cN;"
+%O%D'^5O=V=qNSc7`O<gg$rabPME+^L4s]R:N%M4Y[ua<QlDg2PoUp0#YR90YXtoF\I^6TJC\O0cQh0\M0/';UL]\W`an2iW=TBb3
+%%(NK*((t]@AIu)Tdd,&&hNRq;66Jtu8'*-IGKEdMN)t!8$!!i$J";DpnH@#?BJcR+FNI-t*,KH8o.E!f57Dj$\GFe3(_Gk<7seS<
+%""J/EC@@r5k,elE'f')@n.2QX>gF4mg=4TnDZONs'2MA'*b/bE_`'Xl!)BHBSiPZ#AjI/<>rhI/D^9PlUh'lUZ-]if.+30Cj/b*0
+%rGn=K@/>/s&r$o)()Z#5K`t$8(HAA6V*[PN at bm/O=iur at -JG9<fI<rMW(3l_?'oe$4l;gFUWlWEA<!d/,8KI_m@\q5d&G6]!rps@
+%R-J.[&aU>f,YnnL-,/C9R]8GhcnYjHWI*H>?DI<KHNeL)1 at Gn.lo@7UP50TJ(:SR#[n3,$8ugs0<bBg+"6Hn6pIq3MB#tVClS*aS
+%I_3!2Zi7LX+4m?'U6.$[P*cLj at 4'Ms6K0/kY$,0[bKKM#fACH/'gKKS;86:0rCq&t$^mgGSksg58+kGdN:[#%<"DXq*37A$as<Q=
+%gLbANA%Xi)?!T=a&!G)@:6%rQ<Pu,>;Q%(j^s98Z=.cLXZ#AF=Bdfc`if!FUSnq[,!YGOp',;m'N_Ir-f+6I$F)IRg_`ag!pb4(6
+%(q][r9eLTh8'9fPeMR9oQ'=\IXiCsqKR.u?())65'I258k at oD@kY"6-50\r=SR\"Fquj+($Nob9o!R%)*O1:XjH3oBpn?2o*./<i
+%HgWg)T[?EjB`/.!"T9U5'9&]`OKc0_6jY at O?g;B1:YT'nX.Tlnq"lq`0F)hI*K2;3!\0&XY$X at O0q<d$Yp@<Ri#\\AEilr47`7W_
+%/qL[7lhXSFKic9t=V,(K08214^"MH.g=8TWUk=<)#S%b_X#D1()c$]6/.ZooqId!GieI(GLbacADH8$oKoa\d=HZ&2cbtUIM"?V>
+%X9[F699KcUa\edLeVOjOc-#pGL\`--UfMhZMUBW8JZ-&g`h#7-g_IVg6?L>!^JOh&HEG_ns!gS at fU&D#3g6'sT?"Z;DL-aLp;,(e
+%r,VS`*8UO`<915gRH9"+5O8"<k/TpRNS>LaU1DMrF1FcpV^S!U>KSeYlo\*i*phGrDpmGkBQVhUC,o1e%CZLLJVd7l@>ZW50Z4bG
+%cL0!V+_ at uC^q!0*qC&<b0WX-rbt2J#3jr_sO/4p2OBgC["o9=9OW-/!Nna@?Ts0c(??>Sg].,VRQ:R)?JJA*E8Irf?<)2VU(s8,L
+%+f%Dg#Ai:ds10OGhQ'@WW\NW0j\D\kAtP5KBUXM-;q].`/ICfNbk:,Z1`n-,MR\*Bqj&)LW41pu0?;@1-T?^T8>BrH)OcoE5FH:7
+%Q1>DSr^@GBcg/[BhQV-!W8<cm"d.rOC9ZjL;731 at dQk@#Q#fV4*]$Gn&P6I?HN*Oj<1tYPB_6%nd2+:`b`2q/S4ZS7KPB).O#0ri
+%XA;QBs*cQ7YGhX(*%"H^+',H6 at M=U%qV#:?7O!<a#T%$PQJsi!YA#.+VD):m[im0Yf"Bs)nb/I\L[W2#nXNQ[$eU6N6mIKuT08%(
+%q&h+i"r$_aGe+Lb:$"DI^(QRL=L[Uk4T]87[Si^>gUFO.ppBR%rWYB?.u68g7P>pW->4k?3QY^PEP6&^m"Q<aQPk"FRG<5mm_Z at h
+%\#[4`ANdM4C41?c.lk>n&t;UR*K`6&-5Re;lkKq]@V?m)oZS,A&f;=^(.8)6jQ,2Dl!3*4Db9sbdd;:XFi,KEF)uA(*)eQ7*@Dnc
+%[@9NWS7)4ENe4<<D.P>+B97KBB.ZRBa5F5iVP\a0f."g;j>0q"$/^W]h)K!42*'h at VMBMj?GFP2IW%gW8IW0=Cp:NgroJR2WN9le
+%j\S3`h/o!EjL!7CNcfD+qbe&EW0F\=ja.R55T.eDS',;5T;eIb1LEeS9 at 6;6`0qHJ'fNPsIH=ln4O%rhLLj=p.'53uh-jK1%dM/%
+%jFuBI0-m=`GSs)U$)_l^O>O,(:!kbFSLqnCL?2h]$PPYt)?m.#(#DDj1aqZKB!FZ7=F]Z_a%T%Dg]9KVCn*mWIQEuu%st#ZjZ>C&
+%M]9_?Y6N`OjmGM`Zmu$YGah=p4%,FE]oNnR.9ABpL"b]^>haSUZk6?dm\u^kdh&h9YY5R/"H,m?W3Dc?3a0o)G[<t)lqb14-]jq^
+%Ni%i\[Opigb?GpHOR8MIV$S(V&(06dP4CI(ha\6)?)OE-i)WE)bC'M#\,3].<s)S^6\H<"WT=(N]5WKk1+^GABIq=lpp=RkmZ\s&
+%8dq]b\gU3ZIpl`Q8$lF7 at d91^QRc2/C(bs]^`=EgJgGH at Rq><Rfc at TeBdP]H+rm!Kk7fZtMk#$#V*Am8ReIP?Pb!1&XrR\OKbdd*
+%r2ieHkm'RhG*+ASloTYTGA`.V$c6o3hIdcjq(d1DIqR*j)h22%"P/2:5&-A7M\_YL)8M?HKs"ZpK409XqGUM:b^=KqOP9:^$GXZ9
+%Q;7!c8rE0(hLF<#\8NWP3CTe,<TG7.H6HEQW.D%\2RLiHrAG\<o!_\(U4G9QX7FY:,q_9k]>>bY at jN4fA?)5nhR'pR>+F>AN at a"0
+%,M&"Wq.k@\Cnke,+T,"-FsohlTo_)+cmj&\kk5ceB9lXV8eWH\3-4r`m:?bAo>>9&:7aqh/Zp\k:EMd*IRAT3!L3mdD+]:'"]mS;
+%P5nA^]:FM\G\jAI':Wp[$.qZ`94EmCGs47B%[#X_=u^fc!KVMJ(Wh\k!!J<scrOI_i-_/Gp1!kr3!n<1aj'e?6VUqlMp<c*T\"-M
+%LC%*,5;qtGa]!6]0,*_r.PGjg;`4h*k:Mm`?r-=^=QPJ8#&h1RI3F]3noZ!Hr_?:>_L)\TO\O at CLn0<_1=D>tp.W_0o5G6>4/<hH
+%QU0]=!H6'o*)-P7nfDl;`\nRlM/g3:?"2YJ+28sRDp,Vi.=C\J1s1D?D3$"n<H`fdl3Srp0 at B96K+lU]P9FVYJ<(5O\_Fuep/nSD
+%Y\9,AEd55a2p5V8-WmJ%^+jlV6[Ma\jKgWh?Lt";5(>sJhOKD_hfA!im99'?fg1oqbp8;>WIi!1dr3+[g97JlnuNMLqOlTWSi24a
+%LpUt"2Jm01g=i$ESQ.2>)C=NQm'+DoMdn7+Y0N[L*T\*<*,ZMSCF&Lu/]3!ThK>mC"kYftmk:l#2UJ[p7Bs)[,[K>$:7cm1Rl.K'
+%%&,>>SaqgFQ]Ee+CAk%Q76R2ZmX!4/S`F'@g-5m,GN!raI%)39[*'Ggo3HGtK&@. at G.td[OY,\6IAtY]4.5#tj8DRqKl+Ys-u#tl
+%K!fs5T7'P<Z=L:]a36WDPc6ic4b7!6AV4M*;#Do[r?^#I4K`m'ad*`m=G]?"ar>\Q5YfHR1q'-2VuFlS0PSPukNciY4h-Z"DkdG%
+%I;!PUY/:Ct_e?TZD:WQ+:8tJn[l/S!L;Y#fZ=2WbI3A8-^Lu61-mh(J;+;DIK0-/tSG*\U at jgt3;lmC[J@,#Eat.HjmtQC)9$]F6
+%2:]$mdV^bi;JY#!=s'W`\W+ at 7\\*jGL?>hU^M,)A6L)k^iSFg^AhIXtOH)6Y0_iC)Ml,e[CC)'8VjpTO>iTHrV?Qp`&9q*kr)REt
+%]b.fsD<Cd:9S>c"/`+M67AZ"pr->6*n4de\HM_!G+tAY?R\WHNA5A%dBJ(RIkE>sn27690LujndQ_lNKo"lM'Q/.$QTCQCbj!BJ'
+%7o7$.m,`FjgNkdUo)jo]F,ia%b[+Ee"hC-3PmbPY*oY43M5<n5H*6']*RgW'KaL.r*qag)AjAlD3"\a5`8lPY^mPbp9g8g1N'G6t
+%)i$[7R>Qn3QdN<OdV_H14"M;"/'f0HpH2[j7N*91F$r$J'>l<nVG_XAT$no\R.XE,\N44(Gd0UuM`p;g"h*it$ZZ(S`m-$6m"Ons
+%k?M#(V:/@Y0X_:]9f3#(jpW<s<j6rZ%Xk1]OtcFcn#p:\l#U3q3HqS9:05QF443(SqK7RQ(Q*U89P_jV^jkd1RXX[N54*'P4=*ao
+%YQ,Q:Z^N3_9R/1$>i`TA:'PZP*%q3:"r>S?PYe)5b'G99"$Pi@)98Ol8q9G#GKGZm?eb$8mhMF:=@ha0 at pc@Vf`8=7 at dTE-A0TQp
+%!tu4pOll#FqSbQp3rrg-SU4,W8/`PVI_;Q5k-(t-nXhs3C<kEhc-?AG?UDYKjI'n!DP%A&jM!."A"P9<k@(0p)'.Ya5_jbhJE at 0+
+%Cj#[88_Zi'gCC][+E>8)JZeXL2]=9ilT0k/Agmk8ST8qT!RpfmZdJR^gR at NsU(s!7fIckp.4qO`mUa*,(D"6\&A".ZO(.'+86I[/
+%5`J>%nu`c&^4#i=(*9aV#@!lB55c>,Q8$og at m-#e2ktYI3;]8-6p]l%6cCgs at uQ*B:[3b,"Mh;j^F"6h(`I1"MrXqEK]@qR_c0"(
+%2>,amZZC(db)(FBS_SJlcd]`o=P'g_eF+=A00jSQ^d$\-m?%N4%-6sZG*IrHQ4e+qKHo?LH.)VD$B'm<?"jc2a_srHaZn)r.&kEd
+%ek'qsrG)6Z[Lmd(NdIu_("F!fbGghY,-A3./Y[Z:7Z8a"-SB/0:b3K!c]Yfka+cOfVfk_`dkmNH_]J-AO0R##[$>hFB.:+#l'lLY
+%r^piR#,]XU2V0l2SpoVdjTD"aAokr&qs9 at _PpDLp51LA2YK;\#_'1.;/`C?I;o>>#q+Sj`711XAjU;pV^niR]noIIgOf+G5`(e<b
+%fTq`p at 9$Ejcga/4IcZ9'fcL']hh<#=(@H_fdDr at po-?K[9=MgE!lO^7b(j;O2dW$*>fk$;he.OI=iu3._(1Gon95X($.7W1Y\Y'2
+%WKF>jBp3t5]9R0Hjf>1h8^:#H=sn6KXkK>dIO&`II(sMg0QCA&d;0dt]]GZbLW.QI9f'V at do<[%)j'odO+3Ra9,<X8)^VUseAf at i
+%b<(:*r9np>>CKh_En.`nV>_Huf>:t at n=I2tOf\42f6^%DYgTbBTg,$0SB=_>e)]6"rQbi1Z''Q:e#Pa>D5n)C('uJj-/u#[<WQ6X
+%:AJ&]e-AS)b1#Z)/G^G69i<12]R3k6Q`j[nj"FJ.+V^;loRu7jZ<sSs!nS\A[E)m2GHUHB,F`6Jc)!k52&9*S:jS\UMc1qrh?loR
+%RlY$H'%IC`Q-"-#Ns'C\?tCk;4"W&EnKjge`gfd*kkMa<&l(1V0HdZDq-))>g9fHQ]K$Gf;KsS[5HB^6HqR^jhkt3#Yuo#VBBMGF
+%9n)^;D1<ja-6uI,H=oq+#ltgbVL<bDIOgsB)^N<(lD*:a.D3)RknT3%7j"tmROPdFQ(,*,oGcl>q#_-o2qrQ/dY2DVJQ<Kkh%uAE
+%0HUn6`8n]O:VE1=;J4>M.F5>KGpYP0X"be'*W$3@%!X>.Fp#J4^L-urqYZ0m:J'W[`P;pGC0KK+`@#mZg$JYsWGeS+"3F;k8q'&T
+%LP$IZYT&`jF%%238Q.+a.m6rZ?[,rB<#%m-[&YX8#MS>je$pp,Wpcm39Osh!7C`"#@S^e"Pk\Xa2,67Y8N+qKgO/#!6K_Wd3)aBl
+%e6#gUo"4<oAW6SRHlPli!ZYD/ZEON@<kJJLF8'N7VBD=6IPmJH;I,uIZ+D[50A8a+HDa4*d']Q61j*T!jNjp2p*A@]5K/CD3BI`H
+%ieZQ#AL`d(BrYGUBN)Ol'e[-LnmY=n4(SNVZ,q6'I?(M".\A%Ka`B&uJY]8ODeHb\H9b:PO74!tfesfeqfk_f^bjG::E6?208`*t
+%*Q,nMEp!s;QV;i=aSujPS9kP;mqBiS$ar'8CkUH1 at 1hmb3T8]:$LDEPe]r<Em;\iGVP_#_9cef)Kk#HLS at kd4kW<9;11/-b$+ at p=
+%?]Z'qEj(\UP+%h3d;@bhGnr3rHQ`+J(Y'0e]<tJ;dbK[8(Sr<*)o&K<G at bfAF/?5d[a\an"g.Ah!$O%G;q>)n8X,L-ZPG:)+'AmI
+%.Qa.r_J[\Xh^A6Hc7_%/,H"PBMf1pI'SL+hF#GL"f>9[^Ql*O'RLT`6+p<lpGI&/*kXM)24A;6!=+O!N*B?ZM*"6$N7])0_Y:AX,
+%cn00)#=i.N:`E@$iMi-8T6=(Sc:-K56>S_"LPFW+d';.\:FT'^T<6LDEfN>I+MWd9+sOui/KJ'\I8'/cq1q]/F.,WZn%n.;S`[Iu
+%[A^4<+_PU"U3"QE+;Eg'nROD"So-mh\%B#ECZi)]86S#e"BZl.f4eo#jq\&s1q&tMQB]!b&JUNc=M?q%RcbqIcE0,'T%-f3(/a7d
+%'(!))>/h]5U1%V[p8Ok%^Yh>U5e?JT]k:g#\%u'5L7+.ejWM>:noI^0-8:k%=n'/N.6Q),KoDJ-40]gbXCNtq$><'O+h-?ha7qo9
+%!pm#8(W>J)9VJkXrQX_C>FGHKgq9U2A^a`8G=0/DQ5?ZMFPGJ(YSK7O+>L6-%r-926A904aqkHHdtB^.0F'fiKK!#^h>APRg\M7a
+%\//=C-r(CXPZ7;`0^8iU.>We+p$GhD2sP#DIQu+J+$6*E:gqG-0X.5tOBRSuH`_U*f9<6HF at r3"LR<&dIT_QM\Jd0Ps&18?U:lA4
+%%k_DM/75OO12[TEe;6@&b_XR-]pM#<LsMbB@(DfWT1rVEL)e*DA\<;M]3P_G:,;j\5C5-:`[P("HP7X4 at QT0h6u"<>fS.s;MNE\l
+%hu7j%Q"Kjj$OF5u at 8GE*jBq]8$46jVaj:!1/ibp-:6oh`SJ%.pfMC?`NYF&o#WBh;GEQfXOf#UF7.7p5D9D75/"Cl?E`3"?2D+eR
+%M.#FHIoD at 9RUtSa\t8N##\Fg:)t-aKC&m$ll',K.ai4CsLqC at OE.0m8oQ?dPN>lf"<89FY5PpV)*?t/kP-J$/b6MC at g:$1RhUZ-Q
+%MJpq,WBa6Y:_C(mAE)FPklVD+J3fr^VJYA(6@"DPk&#r1M=k/ba#hQq">3(r_J1=i(\&$:C#L0HGf'W3Ngjrb$dtoL7:)^[8C1(g
+%nf4j@]%8s*4_;K!*bXOr+-qikOKB9ADOEQErlQbPXRk5&IJ&f!`S>PcnC;"$B]-p;T)#B/7J-PTk[tpW6%]H]b&0=Qb_K_JgTt,H
+%^X-Glq8r8-KC$U)lR:(IbG\*^c=of]@uPE*GdOW'Y`Nk-#D"aE.5Y=O(Aa#CQ9asDd^3cS9We.^c$1kL>[#g[a`E?L;oO](?&@c=
+%a/Z:6G2F'Ss!:(hP=\+/URPB!-I5R;C$:<8EYoE9._KNi`/G)k,d4$+*W@\VB).C at 4o'fHFRYf/aZ6,'Jj(dQ8V\ZA*/rZrUXK',
+%/nH]bk$2;S"BR[eZe1$d2DOblfF]E!;m%=Y at AJb>2#Wp=TKG6i6)\@4-fIu)IE==b/mYes at q0/S6G>"<'6:YMcj!9N0DofBc(AOE
+%2H::`gNI\(O^hRVo.XS at KD=2 at jp!+Hs1*^I3judK/aP&'E[qkD(?[^V5a"1,[-+-pl)/_%B+bh>QNs%,#@2ePd?pPtYAMcX:mV#u
+%S+BYr+ilZ&e'u^$n+ at hle\!/]1+U[lS$!&\J29^\+BoGJ\cqVOoZK+hkiUc9(ocbiUi+4\<Q4+WV0oU`PQJ#c;$=V%$r=!_*)>eX
+%br[&T0F2OQJK+K#.)B/srbNRWS:.Q.&=:m\=+YM*G8oVBHW4Kc_".FrhHmGY7@'F1;nbX"f/39.-V2L!+ at MZn&d5"q484m(IdN!2
+%QJ.g"kHoYh!qh:CTlf#ulUKlV?C8sZd+M=AD$d, at 32c8MDLZV)Wpo,UNL!taYlIQ>/6(dEZ$/iBmj)WlXY/UH'%E>YP#ubNjap5r
+%o_q_]*VHWSV:E.q4TM2$SOLaqmRaiS?^+&)GGI4FpQq>;/O2OM4(2]u5jYTi(D6t(LA[cnW15&i;(ILr`-WFj'F?\qZnkjL$dP7-
+%@V`'9ZZD=oUA:Z\^*^Z7mbdpZ#.=/i,L>a`-8>_mE(%A%$2bi2;j/QI9uj1biI#99^Jc+F/NDiHR$snt9mHJ.(S5=pY)LJ\c)jJY
+%fkKA?@JTmsV#f:8Dk8NgK(JEU4,Kk8diq;-m]5FVWls$V>fi93^pn6."aG'$4j)OrQINP<C""MD^!j,*(Z\@k<<9Nm3L3u\T,cmT
+%"@ol[1T_aUW:;Xr3Hh)^?^e+FqS4FG`1\H$M0rjQk[;o.?-'+L2T3Zcm/)iHnZZfN:CGj at A]"2L1Jn*hq:4dm;pia%&.m"kB-+tR
+%+luJ5o+FS+?q=l+et^;pV>_.T_`dG-5 at Z"'Jh7#],G/1In:UXIEq2.l63JF2J%o+ukN"@/94q+QLLG[pH]fYu;#4E,=T\Y!-3Li#
+%1uBl\i3^DG+XfjNL5IVEPF.M'@)=_Pj)LM3=1.sd[3cm@:^\,m3&<\ic0IJm/rL$WUhKH)*t$(<c78<nhokL>0aGrl'qUo[PMJmV
+%Y?#,q4/ZaeNIk,C0ts;e&<"kiikdQ/;-m>`CQ_WFKhEh.,NV3613Xm`/tC7 at X8s#"*$mPLdI(Q15LMF""UVW3Fu,YVcAB_.>Hmp;
+%$1tfcNLa94G%*,.JkT4;G(_ZoCT*6BmdK3C,\Yri4PHDN]-S<r/\i4 at lfS?4F#eTodrpAscR0]M<a>h(YPc<r+;p^aKrVR1`S%5%
+%X\1#cR7D#uOCU5ZeV#4i!og23D\)J8N[(h/W?gf$BV_0?7E]I at RMGBB%9qab(r%V?=BCncUAF2C at P@D:+QkkaT^]au_oDnEF)Vbi
+%;_S&$/m/M7H-@\+HE`&%L%\%i1oP*RNo\a./_\c([b/:&d1I<5MiSZsYJdct9#aIto>Tm7M&R+eU=jT=ct`P*IPkDp--4&Ms2pbN
+%LTKe5Q0<5IX%kr)Sc+iHiB"ANNQp&YmIhuB:MZpI%]8kCe!3>AddTgHq=Z7bIqhq1hX"f<X\gXfH#R>Wku'Ij?NT7rT5h;PF,B88
+%RkoP5`i.!:``Og"C/%9khm.,.HZ^(,Rs+gti7BA2#(7+g;/34>d@(pGkj:'dY]2Ze'#++q;bC%a;RgeO8uYI#O)i*G,5rclO*ni'
+%Z$i)V'<qj'Nl4?b!F]P,U5+(T,b9!oOA/$U:YD=Pde9*.Mp^+[NK at 1a*=`1ce8kS0?eI'n^trlZ]kYWpWeb]iK$l@"W%4L]9f7V9
+%)(Re/4g7SR0"E9PMXBllC(=3 at TD4E^bkpMd>hGYCT:Z^/rcp+GS"tEH>aS!E18uM-A'k"e43Pn31q'VBf_H+s4'0tJ;bNklPF([f
+%%P7o:k)_`:Km8W+D-[@HVjt++0NG(JIOPhl2(Gl_TMe*knC`-c-rlC4H1o26P!dPO0G,hWeXS<nq$+'tP&u"lIC;Uag7H5(AMJ21
+%&dUq"\tX%K"RSrGR8c5M\`ZD_OeuC?R5C>TS--p$\Z81t/arlKMU at MZ3_NnFfN'@uQ*GE<LDSk4.LT%U6+fG at 0NTS-oX1u[gI<YF
+%<P`**]B't&O1KY4C9SeE%k4;aNDHb;]R]jr'Q1e&m/XT'!L]39 at A)T+jCsGTb=S&FcDK,P2#g#1Vrob`b"^qk[%t345D;dgYs9@'
+%R`U\9d+"o"[ihMuX at L].b/:-)R)-C!9Fa9 at A0q-#&mo_ at P4Q,*C8e63iGt)8jcH$>]KN:M-$<m"D_JJ&(=Le]A6\<Mabg,gGXsc/
+%c6O:gYfnMD,<rkB=FS)&YCMd$+=APu<;`u_,6p;lS.C!^6s0gCYPVjB2;=USY^bu>c"p/;IqBaY34Ij[8uTuga,HYe68$oJ;)qWc
+%krqd0N9"3$s*8o^aa6H2fha\dn=?KKSJK=M04#s^#e at .1N8hS[ced7*b)cb3KF]0&6fY;Q`gcRY=.IV=7SP.ro^5\8Oa3:#%LcQr
+%`ht?+->$F[ZJso:e:n(*Els3F(X;.DTmVES4O8puXaCb%0fR at k-%Ch6`\AlE-b+=eUO&+I45QjdXV4QECc#gm/bKgF!@ST>Kc`o:
+%KBCiNqiu87;\>gQXDUB<(,G"SbG9_tQg$)L9?LO5-qa:iD1hGehrL9"NEcUfj"72$_9/cA at k%m6)*dVV1 at c/ns4BU%0D":pD+i04
+%?)<abc)4B"8NdM^,K^"3\>0q)Aonm`R]!6X(Qaa^11ecDG#KdJ`3T%eDL5!RD_2<4Atg%5Nis.V+G6d"9^aKol$t;>o+u>Xi--G3
+%gMWGF6-#L<1hq!":>VS#A_=hsl?g]r;XJ)AaX5Kfpg`'L3prT?OJaDlepb/ahdMG^5(?cge:>iRKqt%a\d%4NEgn[lk/st-)e?O7
+%d at 40S;USRCOI7#CW+CkFQW at GL:JF<H)H0ThV]>X#q^%3$Q#bGT?V9 at p_i^ik#s??85:KRd=ZEn?OIboF_PA4=pDJV&GAc277nQ at o
+%r'8ipR7]PrRf7*QC*>r7XrN?s(`O!OZu6AV*5=<(+lMncet2`u]IC9F4NKBRC<7e%*ojsnIq!t$??SGq?KPo0a(G1#Y/XGAFl8o4
+%DRGe31jU8:YX_+grg4GXRTc^#H7*W'KuE<'lJKI%9p,6XGM[PW%N@))0iQhR8r8^@F at jPu,[i*03M-O.RZYs]2EI!oL'gJa5:)jC
+%YqrdZl:=tHDaHMiGNtWdnEpf3TC40QmV8LT@"Gp^7AVp6=/qH.L>rNG2Y];0Z4i&&4O&C38*_m9,$B;VW2GsiLYQ_*&sat^aJGEY
+%qR,BQ([G"h*]Fasgpc"Hqd[+#]6bd:BsE+7[;>iSV#BUs-/hu$Au0b',F[pG?UDUer>9-&+mD$al``0QclM&d30Cu0QD`I([iKcR
+%4XJFjYV:oHPeelSiBQBiV9G$BK4;p#$j at O_K!ec.jXMuRL*6.3JQB6jbLDmjg1&c2<3A$i\_lXk;6/St3F2sLbGm"_H<.[gNA:Yt
+%Z/J\3<-W8;UE8Rm>6>SHo5'O\'aDi(Bt#lGj*sngH?cF8'FN0Yc9l;HZ`o$ZYZJ9S(Jf%WJT:(&/,2a(=%a\l5u[3Y,W&9`ooH!W
+%R`EK&s#M4eVH75(25P;C76+^4MnVBST.`JrSkC5<%m5u;:=&MckU**:d[J4EQP0L3[B/*Z4K+i\&e[%f((V'7!bjLdH-&tgs5lZ0
+%@XB[LkG90f^952XhT\qn75)fW,Ig8SHqV3//-aDeLg9Kbc5/'<m-g.UCn<CJX4i'k6$Wt.=%P"=3,TXonEn?VGpa=WD_f*Va:_K,
+%cT5Jm?`D6q-,M^)!):s<Re<n_W,dCY>fi"h97 at 2IONi4?K7KKJ-GCfo^,E$6)h9g7SVYG*_]$QFFdHZ?#"P;GDo)cY2NSt%hbZ at H
+%Uh]!SH?-PSbRi%mQ520:K at u*&k=VVKmO>Ks2Z#2!C>j6pm8IfbM670"k8s-Oj`C+!7piCb2GuUBl_odl+1RYZZ6h6d%BT@?F!'oc
+%a-.7u_/6ArOLV/](!Y?5f]8:@erFK%8RZ![BGl#/XRbC<90Tl[S9dA@]GYJOq#RQGnG]'Cg>G5R<-^`-?M$+,^3ck.h3$_\)HKPk
+%<^8\nh0`T/$Z@&Od@[V:g=1?DiP_sl]Rs&%J%+2o(\XU&p?%/NKUSL3a$+[Hp at W!N1`]kEP&<RIZI$eW%gB&/HW7<4M+9DZ"%oMR
+%-3<35]b;JkKG_8q6go9E0B>NbW:nm6*_AYIUuqU at j:X5om%HJ\9QI()?D\J9a1h+Ehd(Z<ju[:<&pK*.o4d)iK?Y<B.VA_Q-%.%-
+%pZIr.^cuiN,p?j-=>:ef@#<BEM/]&YX_2cdC=LuN6'0P5Lfs1-`KHo@,iJWm$`WOrQcDK1]="Uk;E#l,k3QF/Q]a;t4QR["`2-]1
+%b[E25\"db^Qj[p$Guj`?ee3/,HTR;EDp<Ra]1S?+**,T3Ic=Dnon8N6]_a:^0-H?4fRiTS'*oPn.$U%(cI=S>kjq at JL>C[HL4V>'
+%IE\"I2c*%./Q6@?\WNdqnm at J.Xb>JG!j at .pogo:7o6,:Yo_#pr)IK%o-(dMp*4-^.Al^JFdEt9Qq)9<>PC]lZB(FKN!@"Y&'"NDO
+%R*5na2u3G5"GR\=lJ_!Z:,T?&6#^5l3U%RII`tKgPf_+Vk*\OU4"Con%TRQV<Lc#,m<+Ft$rMN!!,b*`H"[>CMG"N6a#&E at p;qBf
+%P8u3=dAhOEpcl[1iS;s9/.4pF!(s=\(@[M4PVe at JGqK,J\`=-flfp\N)q+qop'f\qrJs12TLGf1fQ2rGKS!/UU^;+5\2ugrKer\]
+%blr!K_>YuUV_4.OW'Y!lA+?\i^:MLR8-WQfmj_2;I6#?$&^RNGYLs"t\_k7UMTgLQ8T#+4j#.I^%^G0ljsJG</K6AXo6s1N>L)^_
+%"P&VjOK*,cm[aQ5TV-YCB@(7b]TtTFk@#YUCjPX6"!f'1VYTGV"Nl at h%/?,;7GI'4STHB:^AfrIK.,8kW##?`HVAbUUFToL/NAk@
+%Hk<er>bK+uho%C<Q5^ttV8uE*Nu-"PApLr]k%4RQdnIrRP.ajcVgOEX?',`2eO=o4AP0asdr^7F;SLLS6'IX\VVqf'kS+_i+7e`#
+%-RI8>OILIac3NA&R]eE)cL\(5i6coq_V,4$0MkJ/btF-VF$k.ELWL_Y-92)C9aJu6i&`92dn[H;DcnbWaaH9DM)Vn$+$=6d@%CEo
+%9n7](!#95:3\c&.o)>e$3GIgH[?Y&V;s,qb\U7)-F>92[]p!tj),+k*l)'9[P#?<H(76SgSmC6pP6E4G`]$Sl4RqLNC&4G$HZSsU
+%'lbrj\u)WH/l4_lc284f>3M\`s8SstB"(1#31XkC8&%dTb;mS5Z>f$!jWYd7&<\jH(7\pG1l+f[,OCMq/sWN9 at P(T"YB'[WCgNN;
+%r:UhFRcPBLFoAYhcJ]5$RfjWscdZs!.ei2qFl)qnS>r`kR*L0/-7VUqrQqD"meI+2C%ebC*d&12I.iI>,bMhE at n`TR!cmmi#ktQM
+%\?>9<<g8DGlq_S"Nc6;17b3/Rm1CbY6 at FEk\]>[,/7MND-.W6-gfL,;?RJ^IFtL6u`aWI7kjQYT,eMoMXYf-gmsNj0L&Edk^4j2k
+%2]Ko\BHI]I>j+%X*j/(SZ)D(D9.'NP3\'n-f1P*Oq3tg3SZc7q2oB9F,%'Z,4mP&'UeN]2)`u+(Ru,U[9Ygs[:LYkGQg+tTphkG(
+%jq,Hl0.j2o4?bCreLsJC&'2`6:Bc#AVEI_Xb7E]prc/5=k$Amr.?DT'N(4q?NEQ9DH,'6%3B^W at 5HXOifCA((@Ja3Z77c2:n-R/I
+%:S.0*Be>EhYg[e.3]$:@64bCXNLUN9VVad;V\eNsI6g[tdSn3L\W`&KmM.jV;N\lm9bfWR.pjjSS02Z$7*9DuaP4f`,Lrqs8QM7\
+%fn'T05UJ[R^qam4&rB'`7jgQ$K;!N]j!*!e(dO_VFK>6es4KIMh"\Zu at MJWV,^E)1d&mitXMOc3h&ciPH%;m#P%QcTg4QpLV]V.!
+%@_di5`uoeR#;p>oM<rl?N3QU>fK="$je at D>/d<iC2 at 8'i3%N(4,o<QM?(b8XKRP#LmTJM,+NM`+)XQ=MJpBk"B9gAY0R)a?CRH_u
+%k"HQe"Is*;+#.PfY0X at s$G=jm57Ua]h55Noff1qY>1[:XN(&J*8`(cC<+jN#2eaKOY+a4dG!!-DR<!u0:4fKb.R92F2/Z.YS-'Lj
+%R4Q,9rcT1l)P.onps\5i+m*,_2AoX at mXJSl0'4t5D9FA0$ThW%(<-#5W8n$9`hWep=T=c^''@Iq&$Sk"C[rB'A,3\.[0<OR2JWap
+%r@#$Gb)^jm5GpC$D6SI(Xm*cdZWQ6Z@,jFE>MXDNib^&kWM+'B0R8j_r/CQQjkcfjS.//G]eHp-s4*p869G3=-!ALe)2<,C3NY4m
+%=R5"Re^EdMl;s^-D;+l$X5tAajAOQE/jo\lR3!Q#^0Qan.a>BSj?&POM[%4E6\],("(L,?:PrNbYHjoofNV[SY('9?(-nN#E-%j(
+%REN`*b<@0A-DV*6AiWXTXAc-p%+j[aUVYD5gUb1"bb9R)+L^O4B8W\/?#D^:AN*/o;>KXZEO+#&BB&ajZ3=886 at ."NS\#'e-g<j<
+%$)+bkV`?/iQh]4=a?(dUjpa&"^ITjgo3\kC[FkVZmo9=-gIek:81'D4[f#d3RB2j^1\:I.I'7JBX<j3SpsEXm7/'GK&G.!h&#&FW
+%f1[9cge,'"FY2Ap$&0d<"ecpG6-#7:pmK?f';$T.&u6&\Gk`*h6C@$r.?X1(Y`"Nh]0ld+A5BE=NYrl4K_i\bb&jNIq%>9O/r2O0
+%S%Kab'&WT"]:!l[3me!9kSt&7g!!YuKP9=Im7_Ab=?e-m$'`\A9Y)._DkS(W3DT%lep]VkQ*@OP.uXKu8(]k>/Xr&tF081>0kZCk
+%1'1\\T5eIn!4TQ<3tiDPB''ds;R_]pgq$>RbtGlq:UOut?Kk4$O7lB+F2Qd=3J.GZ<c\Rpn=Y>TqJ4_a:@_-4cCjpRF+hSdU23$,
+%D!PEa=j(UN_A[+q<MS6&c:@:T8[N\U\gd3nePA6>!@r?0*_n/,Xu!FLTsRc)4%f25#n3BS\`04<oHH=OPY&sQ.&5ZFgSR7`AnI2Y
+%?d[Y-U*@U23?\-2Z_\D,YcpOG`'(\_)'0;%]&8hWf at gG08C)r6`@i*]Ks#@n,Xu-96/[ZtIsPJ1GAK0Z>MJe"Q at o]Y;!m$:N-n:3
+%3a7L;!@)UMcEUQ@;_Lf26%-475C[P7eX#r<Ss!L)&9fAmQ\_(th%c5H9k<BYP#prHV!g)WA)6?Q:47]R_[Nbg1D]%KgI.MVr#d[)
+%OsYqq0Uj!LCIk/!:a^#&HS4?td]7jsj;4"@%fsKt5O1,\WIrFdfVeZ!1rEUrKI=K?08]8X4+KX4-qFZ(-/W&kdUc'Rc=+4so[3Bt
+%`t+0)((@P1qkSsA at N]:eJO>Q_'*agT6)UOY*K2n%@#5m1ZLe>Clc/CZasIr'??fdRc^:c[_'C!1\?O at .[hF,l>[B>o8`OXD?)cWC
+%7_R;R;`5`ebTdFApjH_m\#mK&kd\I4N'\/NQuQMjI[\VpqY.^aSO?6\CC4E.QM6p+"t\k;jOt$V\i>;`k<E796DDZ=19'BW1[THU
+%g at 7&Y!ubW&[&4P8\\X[/#KbLAcNcgLOI:Uf;0;UU1tmJmQ3*0O&_:Lp6gM`H1)fVDAdZ$4:6=m-&u>,I/+W#Cfm,OFOF-US0*?_s
+%SUu7>K!-nA[(-;DI[4 at 38]jKbF/(hiQGD&\bPdeDEs]&W7YW_rXo\&=$<PuT>h=HqmQapPk7OJq5b1fsKlXk8c?q.c-2Bo1r)>!8
+%$BZor"H:_?3SA/DPiEa+Re?J!O+k)KJNe,?T.a9(Sl2d_*WT32M[nKiJcs0KYi=C-<-G9na"1JYS?\^D24lMo+2'@CZWG<fW&!"b
+%%>i,pqPFiP>Ee%:WaAJFoLX^E3]f"f;.f=IGeUWT"p=&:StFZ9eW=/-Uc/0R5]J2F/l#.m"08gkgPMcg-,?AM`E.==g=?(+NWk3\
+%NTOgIj=[l+jLj0!A=KO>F:SO&3mu.13H-EIfebPABeIX=]*7%*9)7p)#3p;-X$h-G+OjA at 48I6V^%\$t%n%?YJLB\,QtT2Be:h(R
+%GJQ&%H->M\"2D:7pi!PT[3e3$a7OcNlV.4^Iu01a]+hFK/^ucSZ!9UXm^hMrPUf>NEiD:6;1a-6kJRFqjbd_>)hf<0$k/'X+XW]Q
+%.<o",04o&I?c7+]*^%3EmAg!G(/"`<iJBFaPiKqI"bX;'EXO>OJGn#r]TJHp;HPU",%j^16_Wn?a`Zn#?j at 09g+C-prV;Z:Yb$&-
+%ZHJ1(jt965$?!Xb+"L#sV9J5GJ64-]f=>#=XoI"Ea:.rLAfR"1^j*/R19WGORs"0+GPWWL[upVqD*nPdjUR:n+^Ru-hfo%mgo6qk
+%rMA+Ph*qIr/eA3q_:A`KEY"JLmn"NEhG4:u\2Z2-[dJ4)#EhaYn@@^C0DFKhTHs0qGo5W'?0+jCWop at SWb>QK)]Js0C-T*0RDaIA
+%^>O>9d8&AnJN!)@(7K7g=^Fu<2c\_VVrO1IF\29i-?4Qc9UTK1+&h&SKhK1E9,!gbb!^Sm#=_l1^!,5)-?>38CZgfDU7_7k7nZ*?
+%@U8a;@b;t!gs_:N&j;ASeW,3:6MI&L<FR<T^1sbt?dsJkgi4<p5>EIfhk_rq$ME!KWe>^^anr((>O%1<gboa?hRC+8J$2X'faRgj
+%g[1J;Rb9\D05%9h4&9^Wktl=PWQ/i(dS+1sYb$Otpo2m7=?H?L!8:Bh<9+J3'Q^&!MOZBk_c*8dI'MoMV=rYbU2uNS+V7i;"im%$
+%HcemN]<,`T8e?RBSM%MO4DCmCYPFBTWi"#):0CRLZUmf/?gfWqY:Vs?mjX5\Z8`QhLfu,=U^DLQ>_JA=_8'ru23A9t*X2:jJ[Usn
+%.0)]8#nT\+FURE-FkNXo,6=Q=6C[M(\DLqqO=YA=/T8H\0'PE1R5o)4F20AeXiigLn:L1d=\l&W"I at 1](+TBK4KjuF2#YaKJUpqc
+%*9\g^Cs,p=pB1VN`)A]>bFK\&E>h)*!;r0_S/NPQqo"@%E4tjE;DF=ZRJOA@\7S5ja(@u<GGo5\NmF4FHrko0e,QFkAn9"Z.6:?g
+%FdkNcX9k4A;\(Hfo&b*J5ML<tg?gI9gK\5*quBdo)7b\/C:I#&1k"7i[[^9_5T.5TjQg9G<d%cZ)LTX\--mn3Fi-XBZ("6Oj6A>p
+%/V,6Y4c]tlYU*9>5Ufe7q69Q];omj354D=HA54a,)LDN$g_1689KkFe?25WaKn8QK?b>J_YOl"M7X5tiq=BosTAZe(BLCC0l,(?N
+%1p=Pc^$p#?_9KqG]9C.CI/2.uj2sk1mbYF`F._)qNkraZH-cc86B<r'VZic"C:LN&d<oj<ROn1fh/;l7gM15-8bcV4REOZfjYS8Y
+%>RHe_rc.V8-:3IX-3^q^,oKNVn9Yd7_B]/to:CRHNl1YpqjmHsn9%R6;h$(FnRokj^f)B*A35[N;dHo)GK-Y8^d_4(J3r+-67(Q9
+%lj&0_0j\35TDT&Q:EW4/+b9mN4BPmG-FY#kWLZ'hQ[t at n, at 0p3'4>4g5:BXT7VI\2'5*ksCjS^1DM`)gaUs]ZL9pUQcB5HG0`ecL
+%qQ`dirBd`*B<aJ*$-\#hQIiXD(d8_Q#D>D#McJkH+>Q+)P'847+Hdu,0Qg:=".(=48.<Ye%fT24s11A5^tDIiei%VfrgN/B^mFmW
+%^Vm.R(*2_jlQ\bCb?RusO-*,T-NpTL)#(:ANGX[rJn<4U?4<SqWeNld9>+O"*>0em!N!f4o^U+qIV,(fp&rbq'<j at 9X!LN<iZ]S#
+%RR?8YaoZj:9>r"1K=`0QY,f76<9s)f;:3E"j@\p!pXYp3>==,edm-&(FjF^SMLYV#/Zoe88Pb,&dZV?WHAd>:H6#j`:U]dKA/!f.
+%7J#jAT>B)M#q;9+kE:6aJ;l`eR5Crj&[Ip:=R[\fa'6NA9/%`A\c3EH_M&CYm8"TJ-RT-[79Iq]*P+q%S>W"q-N,'$>:32t:Apor
+%(;OS!XA at 4K=G93:=MIYLm9lt.UlM\qpjQZ\lt]<BeEtF`:#*9$,"+>5#b2Bj=O_A8m-Osj/LW`JBp`ub6sRe8H%qPaVT"gF6G\]k
+%\%@#!W-pXVVH2cB)6D_/'YZ(`L)N<N]Arj0YGoWDW?Q"AoA^.'%Tk_cI^sp!hpdT-!9K\V3O@%ABpEOFYTKfcQYAoE!VD\ho'=cf
+%i-M:ooZ@=`YbcdRKD=6EP_up>MB250lhE)h%K*O at c3ktH_Tg4AO)2YGcT,\LB$QMN0i>TDV(QG%qnm4n11F5oZRt91DbAZT[5pT)
+%l0WJf;T`k$WI>i7n$i&0d"&37o."LQjC_r/c;-fFg4go]3cQ;Do;)XNc<Zu2.mgRlTf\AJ7P)Ioh0Et.1#af1+d#C(r;7,j/]6A(
+%\8qX09#8,Hm'sH!Bfm^Z at Pi#uH$PRP=d'2+-t;hH*(f?ePeNbn("uIK3LsNm`fuhDf"eLsg!dB9li^Zo;,<$;ck&18,kBPo68ZB3
+%C0`7.J%YKPDNg4AH3:Lq8+r[=gPVCGZN/EC)"Kger50RLIK&B0<n^d#$/;Yn.et^:Jp@:21>Qga@#eN=,ZpsT)>_oc!#%Q"-,(M0
+%j;%Z=-eZYSjO892p"49[3^:aiOMr`_55PN0XLA:%DY)/u#_mOOX.(K1i+!!PAb^:&l]d+q23Z[AO8/b3e(QCopHY7\O:!_`k_j1R
+%>b/qU<UQBSST!g[e#<r?0!dP9'T`WL<sbN_jSoZJYKY6*-#^IjO6Ig,+pb+VBZXt73+4Tp[H`Z.)YbjN,Zu]%)f8S#aRQ(8(%<(_
+%I&Y3-F3Yd7p<U-^Al#r<(:Pp35"Uh-ZgGFj`DDXm!1=q at .AcBAMO*/)9eH7<ccU3Y?YFeYEhtV\N4in18=K9B. at 2[R6570ib[(VR
+%YUg.,fQkC]#FW]kL8qknV"5r0R"t1@`T?H>b9jOMg2kJ/*IRKR;dP["C3n>mr1%<-AeBlO?tusuKH)7@)TrN^$lc\<-0\p=J+Wki
+%\2P">TWC*O+d3>(^I:fi_am=5H8pj/p@;eiI1Jg9>_':WOnV@[eIM1<AUlc7QGcOKkI]ufYlYk(pQ_*gH,?a=4h"ce*oYWt\\LJ,
+%ALF0\4:b3j#D8TTPH4(m*EHoV\V,^8\#sUaJ]R.?V3$Fpk8*S__L*jmW$S.V3f4M+Q at Bi&fE+Lo-7)tENP[j[eH(>&>DHMIjLj6J
+%:Ei!c7?s3?<YiIA+M*[+QJa*s3gi$!;lMISO>\EM21_$_m%%HQ at d>ai_*sopSB;8KaUHTL/`bD;j"aop(8%GU%O>Fcq at n1bGLJ?7
+%[??+:C]ZbDmEW,AU(T4qamfZ3:)HS8D!a<@8`N^DTEh4p!uK4H`.6 at aH7asgK@]hh0Mf)Wa;nDbiYLP2Nf'.C.T96[^4&Pb&,3]"
+%iMoZ-U#YlAnS&X*Q(m`]0p!bFIg.7\@oWFh3I,hS87dQNh4MU3OuK!dn3)UG$0YG2F'DtW,B,!->u0S8C/=9?WD9=C&+``kUN%XG
+%,'97GkE=i_jr7VWW[b%A6#%q%rrLIaas?Uq3\]=-qC<+%nRl?5qN58pkNp9K+&rV3VWrM1Q at EW%XZof_[3QDbC=%u]L'G%a8*?Sg
+%`e]27ffRK3d7e<%kC2:#'O)SIJ%>Nc/uZZ%oJnF+6_4]O-m5J=nn95d=LO^J%3<*Wb_J^k]ul[UB:f!GTMEk^r at eHIrUDVp1RC4u
+%Pa$EdL";I5bS6rKLX$i3,la\dHK?$u21G!hHk,)\lVJWALsUOt'AH)]r"_p[DpI].FjX+kSbtVA?RZ52?:i66h at HY<KNnCAcKtGU
+%;j+Jg=3C)"Yl>_+L_!kV)HXkCqU3XK]9kXXBGTBaM)%:6bVS"r1f-0J&!C-%i`0WtPM_I at PFpAgQGBpEFF;a$Gh)[J4Jk$bIO'r_
+%p0G>-)*Um68o@?A,0>tJ4a!3]c6$[h^c2pI1&$-M!j;U5 at -^:ODOSR];r^_NY>)EW'[?H!BI-V8DN.D+Li01l`85;B?TFHL>gTro
+%_B41hW4m-[W`RApH)Z-BnuQ,p$de#eL!.Iq4#-2Lg!a;@c0IKV;"cMb8nR6$r(N-9":l\-mRSS2[>tLMNg!kBiKIL`gq*c3-$I&j
+%80,AdkE9L5E8$VQ9QQ at MDu[s9^6+k[,m7CWQJhZd@\Q25C;5PIE1uhD+ at kQr1P<fUD%eJlo:k\)DHT\/#n7XRI']f\9!\pA871IW
+%I;LY)ff[3VG)Ci6)=jVVSC`taJteFZ%,^E9i6TCnk:sNib89qc!L\$6_4$is2rouf-&itfg&oE[!k3)g?*BK-a\BT;O.&(kq*<i)
+%2K!k,Dt:&>b\$7u\m!tLqY$`\^mlP$diq76;*Sc1 at fRe2-5$Gc;^6PiBfJ1%=rGBNRa5%Eo#hh\U7;@aK0`'s1`K)Z>q-i2`4:j+
+%:EU6T,4aYOBbb@@Rd)pE2^3W^1@]o`8_FKpUXrgk9f5951a+jIP7pe)e69os#0nMiVs)e9F"WP<G^Gi.e(c=p"PaX=j.CLN68nTj
+%T/;W"gN7A5LAq_#Y6<E=+h$5hp"%U>%X at dNG'Z%06oHZp."#mqW%AA>NTA=#O!N-<ao)]74YW*t5ZXPQ=m8sJT)>mVpK2+DS0:Zm
+%3+/pdFQI(tUDm#M#akY\c_-S;p]?>LfM52r#qtq+prO>>^8"=8K9g^b5ol6.eX\a^30]gZad:NS*53&r;6:>O!0%J?TZmd0rbYHJ
+%fcO$t5LS*&\_a:uOZERV3CS;0;]beWn$0l-i#'N*c2EmNEZ+H:krZ5Q?cGUM6.i_Bs*/,[8[JVur[0oJ&DJr$[mf2%2TmGL7e>\M
+%44:CG'/8mNg_VcR0tUV*a`bjYM1YEdNAtGmcq/o!itaC#&+"bS at cd.V'cfZQHMMP/C0$IL,+hh]p at P_2CB?CT88qD`60/DCjcjUt
+%nenVTC;b2:N_W2C7W.J&@TFf/1HtU=P?3?rK2D at B"n/"V[7<gq-NuinoLln<s4hd]2:;0BgKZB5hiIRT"bATe23;>07rEm/aB_Um
+%4q5f%[=)c\."A[TWJ8th^i$+jAJ=*gJ*%W%Y^F37/2sIoo)'RGLoHpf(ZncVhHGHCam8#LZgpl<C`c527cnPR$$l]kNTs:P0MF8)
+%ASau:m%U:jUBsX0j-8Rd:FkG6M;P:?.I%t,?b4K5E_,:,4HnSB9W=)k:gQ at M1+H6UYCY-t/^@WTS]aLS3P9OcZU'=>PW+gpS2 at r*
+%#(6L^'GOU'<&l`Nhkp%l8p7p<So1iOmLd%O at a.=RF;Fr51i.L8/sJi:NSXQ4V!+5eeKcsa5U7c"bu1G`#>ajfbdm0-S@#-Fa9PlQ
+%EZSZsJT)q,,f/mo1[U<72G?9Wr;"i83J;k'B5Y%Z_76C@"O"@*1)o6u"I,R at Y"HI+=UlopO<\VpQ]&YR<W,sFbO)f[jBFrF[hhrO
+%T<ktiK,X];rJ at iq%LOIFhH%*1$+QA'@;#1\8-B>DXCfrX]cXg8On+Lum]bSPFe.jpPW/Co at H4r$+e=MaR`hN\'d.LeW?jJ,a+;?p
+%o\2AtT%'H4]EP.6\[Ats3 at 3/=P\ET^7e0ci+EKb at QBE'K2Nm/`Vt^e8P3g3imL!:ZUWDY\aqdIiS"DECd!`56r]A5u;%q;9bEG-?
+%,rlL#<Y*'Sa'S-]=4F!EF-K0m*a at p7ost]NZ\+?pV`/ITpc'3V1SST$Bn"O/n!IS:fHS*:OSVLTSQ*<[MD4d!41,GoPbp35?s/gu
+%:cfNK:Ohqdh/b1AFj>g]f+4]#E8\+ZT6jL[3\C)*mXB?e=_C$]aINt5'%CsBqbk\Z[W_[-9Z_391jqj?fgu\@S2Tn]:#70`&?$f;
+%\#I/K)MURDCMN\c=eOEoCjIm#TB4h_`QCt&5:":+E&d6nlX]RmnY3U^g'i,58ihN?jQ?cF:C[XOl6<2Rl)_TUQE`sOI.j8ZJGha=
+%fa6^4Jfq]L9B?5<ZSq:^'UTs%q%F9gd%IsT]A-2QrW at d)h^6D8pn]*XVMIKF3Dc;p]Pn908YaD&/\*-Vn6#6>?6!)\(MF$KR$d_P
+%S''#fdqhSfZ7lj26OI;\fU[!TjD>nW#08)Q<`<h3pH:f("UZ-DeF>P.j5?!^Meu.b:%K6O,%EdS46_=NZcXMB2;&U=D;_)OjnkcA
+%h<5qAJ]UBY3Q0J>>ui.75q4qSlZF'-fIn10`/4D;;`gP9PV6!nd3i%Mmse69-\Fh*f"B8X$pBG,i=<KIl<;rtZtlA)Ini.JdbMBB
+%\^h5Go,<k*(C"!$jkbPSGe_u!0 at Q-(&1qgh.>&E-;l8#<=UB'P^Qb]@70;M@$fnl6\b/&UZ0Ko(,D)pI>6XAt`R6of^OL5[d2bsX
+%Y1-L/9RW=HaX9N?;1>J\Dl^gI\5gi1C3XsPKTJ<dr)A^6Hug].*BB5upA^^7W#e(QEau;c\PL<YKN1naSObU`GD at cn>d at MHWld5_
+%bh,Tk90q1bZRsdu\s4kNW$JVnLVDJ$#Dh4L.K\0l%-VdDc&"b.S_=>dY.&SuBu<J%cC7\P at 4Fqk`1pYmP!%8TS3//'hLkX*mC9R]
+%8`u./AWgoQ3Snu05BEe2=qe`pdfL9]^B6C=WNfi7#XRUO"QMWj`/*C8"qp'J55Xb)+Qu\.7N'\bHG7J_kreF>V'\cBXd@%KP1CsD
+%c"".sg0Duk=q"i'f at mN+RG'alX9\CSQ at e^H546 at Jh=nS/:+]pX0I1^<\T(q/&k>R'O#9ZA[N5b65m6M9qC#u4Qg;\$l*f/;6li^/
+%MAM*^MZ`ciT_6EVEb3 at 4ck9&\b!SBPEFbO!I(Eh`jU%@No<gL2NVeo\XW%T+<i##Nd<\r1T-WH]Vk)JpQ7D:VLE=]QCcj:!n#C7V
+%NCq`4*5("M3XN/6g_!>doKp>&HJofHRI/Ac_j\dO+q:2s%"&Akj!*=Tp=Z+RC!5l[!p$HWF7##ndQg2ED[EEs#&S8Xj'!h,"NCY+
+%:m/5_QG8^bHf:285^-sdkM=f$nH;YH\tmsa^/(d#PI at .+Rm&!V8M$ZqkOf"]P8IK$L5o]&@I[ib^.f3W<4=(?fs$iqHV!hjhTc9_
+%`9nnsh#]%]Qp#_j9^BGsEm+UCaVs[!X*GJ(anYpAIq:)pp9HPI8\YE%fK1AKpDH=R3$k5`,8JjsFM=7'PAP/A&RHY+)hMT3;5.<I
+%5sC4C3u-).b,8NKf'I<<BT+!WGpg/cS`B at .mn?)cV`;)jEEi"a/logcX:e7=FmW"C/q246Vmi$`19])7[)^l'(LijZ5==7uiq(7q
+%,iYE$S&h+orhIB9:rU0YY=Xa=2S1C*XBMsjpTWf?rACGQ)I'P\.O"nSjJ8n^d,c,JVnS=;HLNr2e)Zc^hh'O:VAC6/:&8o#F#du(
+%Z.X_(!n'$ecRI=ak(84hb*j#$4=]I*^roInTA0QtLc8o*P&n_DJB_N_5'5m,Br(1>@`"Xlk5d9,-Wt:4cE=3&jZ:WeK%'IP,U$TN
+%5ZhcU'H$FOVOGm)4g=C'rq&ZY5MrOU/`eO]"oguee!GMDH>VhWEBRCg at hq:l=/6:?XrB77<L\&XNEdni(I%.#(Qo3AJ/fT=B at eTO
+%mBUScgOY'\R6*9cs"%R[UT+"TPEB?LG9LpmC92J)3DnQEaUXfr2O%<W/8Sim8VW13D,gAGo?bTIii^0#VBClSDr5mD>k<S4QKb7G
+%&>khZ>kWK++aBG?Zp>\Dh"ps("0J%B9?KG`l"GA6Q5Qj9IuhQlo)-[X9q]<B?3;koq at J_PV:i(Vr`BDN?^4:;aeR(ZX1<XOi_'hV
+%cpXi^:=tS%=YoA]kR<pi;=[D-;U%4X>Jb\Jplq_YVa=9Gn`2#W'4Ah<l:T,HA3be?Br]j9/&%[ug6I#tet5Qe'FqEg+P*l]f1lfJ
+%N3t59ICe%>ro-C>opSpg-QV1cVeip^jj[AO>ii5[30f:P$8*EU[[c>OCX)QK at XbP!,-N[kB.fk(oTO&N#KCL1lsq<'PL0UYRsh<_
+%f]c/\f[M^V'rdm6D_aRHgV9g?mQ?jbUug9pgqR#qQf2-d1[^em85PX5#+(giY1SfmF68\&41VW4SjCVP at 0(';I at Du9s#NZ0];agB
+%WA$[^&iL&'"3HIHfXc++&KsuTB,U-CgdRL?f1&Jb:eSZr0ZYAI1WE5,5=[ZAnZ at s"EGf>29"r7'9L\$_6%>)@fC^tXW7Va\ebX=6
+%SB:$j8kre9E)':DDX+Yq$L5Q_0PmLDX,3E)Ik_$9o_EY*=`MO%;On"r>15XKg^dt.h.Vg8aob(@.U&!ji9I1"G*bWN%?Eq:05'4;
+%:];'Ei1Z`^dm['Z%LVILp,pk+6kXll[(0iB\LZF[O&%R4hatTaW/%cECZeJrpeO,R0rM>/AWcIWWLm+QS%12YVS]\klV9REd[*!n
+%!`7BLO"$EZ(`ZM>JihLLIa=pCWc0EAO7'+,]H- at R-RIjWp62#'gZCNLfjEm=0gSI at 8:b;=cb]*I]s3)q-SG2DM9F!d.bA?)I>eL(
+%MOC^=/2&7P3\,4Kel1r'#lnXNfX`T>Tn!0lL+?&Nod+DkkW'YeoX/<2-qGP3p9F53OX_5X3Tm[s);7#GNiu$tFaEa10t\i4cCR`J
+%$?o-uqu4%p>Ok#EmDG-,+ct$1[s&1-]*796\F8C"\)dK"6QPR1$f5s'>N(9VO<G^7IbM\f8ZJW:Pc%QFEL5`YZE'jq2k<['mF4nc
+%A1u1?-J?k:?9mF</hhG+`mlMp2ISRbIJTNQNog\E#4A\`].U&m9mMQs>rc2A>KhFX6:K"sb#_>+f^HaG'"gYOHJefXHAF"q7aLV+
+%g,!!bOt1dLi!2qsgH/ssNEF`Q)*$K*EqQ%!Ol)d"mQ[P-TXFL<Ti+d'lE)@(L^_==(F:M'QET;o8hB?3OqQk60h>4(?gj1.YpUOa
+%3JQ5$Q,\1_cGoDFR''&l3)?\QTj43(KY"#/9hP:S<85)';^Zq/jF$M2a<(PufU04[7To,p5W7u>;t==eiIV9/k6B]J=]VX+om"_u
+%(6k]Te3h5[",/qaYi9.J at iHd3R*9hPE@"Ij]*f&q\E$#:/?-XN0#!15m%[>ejL],>k`2Me5)-85I%RXcV^oOcYOpE#8g-JpX)h]\
+%JO)uY1B3-Z+#$>UR=,;Y5_ at S-lSk_^b8'nR&tDP7I%:#A[U+OiEiqTM3CW'`Z($OL&!ha109H2La#^LF7A@`bEL,.X1.tCm!3%lu
+%[GQVKjto9bQEd]H]l-WX7frq+l?Q/'-4WU%2Wubb[]l;?PtoSAJ75RO)sM)8mj at NA3:gsP5j:5jH_EUqP<c"h[HC%8p/^ACaCR"b
+%Jo7\ADi`c1 at i^&6OlH0m_'E^o-6)PB]bA\+0(!%/OKY8m)a"5fi!ur3AVJB*l='qt-P*;H"G8GmJ`AP<$A7oU5,^InEY0baB;:?K
+%#[DE9V&KbGD0o>g+cK,nV&!:^Qu(uk.!9g0.oIOZ<q9iVE^2nT"BNeUX^^Ul?^X9qO3`)jaCb>lfMEG!mR[`6%4CWCkhN>&Z4\Gc
+%Z*=sF,:/XQJ-Ej]%<a?4kPHJ^$]]#o-h(CWXTEP,SFe>2kU,;W1 at .RR8$?6_*O`FrZ(4?..?9">P4S6E8H0L](]?s!Z$@+_?2N+r
+%&*oH/Ii<^)ceieZlH>T3cB6D92M:CQ]T+L\W7K_GfU^/0L_hT<c,JD^,b^IQ[VWMq?lfLgi,&p3j&cpJ>>kcHrg4!TYM"4iT'R7m
+%T_jm6PF'HIr;3n[N$DmWZ;-S/\Y\N!AUC$7 at GG!rfluEIr%'PKTZ9HPiO#1na_fN1nWG9?QXaY=+<0mEkproE^64cUVp45kZpBfE
+%i`l6/Ht9 at kV;2OL"RT5=Y),<pl/+Fd2faoPELer<pO'*=`,BC1C.<CNG"J2t4uqi\f1EClpI^)A\P>kTHu2Sf6!(_c,3"^_nr[qo
+%pHko:kKA&)R6hDXM&K7'a`s>drd[V57!9n"]%%no-^G at FX3'92)qc&epR*b7.)1oG^*o+@)pLei>eBROo4kD_,^er/dC9lP'-'pf
+%H>#,+?"'8X&epM\P!&7/^\d].XE>R5l85+)k%nCBF&OpWG,)Nu$oZZ.;n]l(=Qh\$c+lkB3(7cD2u#F6X*-lXN(;('e%NEsIU91=
+%0-SP%gTrYF:<)+N6rk*S5UDaHaS`6Z?>UolI7iM''Mi\lV<GH_M2I8;!Y0:SGK?'AF@,4]KjpgLB[8Mb+3XPUbBcBH8A5dJ_=hO4
+%bb*Nq;L8Jl-U$olW9Ia'kW,:&PR"[XXZPf=Y]Kq:WnaShp_o(^0&L`'q^M%<@Jl]C5_85r at iUPEFq[0a>;5]D?l+@%A!Y?LIqOc7
+%/?0KHM\DMrFikXLj*i at G*%;McnnTB-V#LL9lQeCOm]Xjr`YSLAe34gU*$8,I&Qd*uGSGMn<(Y4Ik:)$geqqLOgN`=F[8U.iI4;Ms
+%J at 6`iI#NG/>.^`SrP$F-^Xtnt5g?a4hqIO,72qn@=jG^(mtVEA;'l"F:0!1)>rIi@"$'f at ooc^I2KqGKoGG\J?hSj:+7`/bPnWG%
+%]i*A8CfZO)WV$b at Eqr@ZBW3A)9OC`!ESI/]Fj<Q*$,.>X&mf1`X](XOYg\f3nT`aV/L5s.?Cf[8<oE@,(OO_tL2ps.U(LblF5H%r
+%)9ThWbI?jno'- at P>*/8h47_0ESp]l"gDHfSl(%]U9-nqWT8lO/VcPJunMSQd*-fY`r=Cg]m-W5l,Mr++;uU"7=0_[Lc?I^hH-fn/
+%IadgZc$'T^\YQ;P2tB7k5V#%aG%,p/r*da-4/6dORV)tdf%*_C.5(PfS<ME21koZ&>GY*kB9AV3:!Ff;ITj>fDp\PYW6S8:EftZQ
+%VSRjXZVl2q8+n1q7,)1G(oM]92Ck]U`\;N(jdklh/M)SWU,e<rHr%X0HE,7Oq-3.;U-!/SAISnh$^^/MTX-$7SEDmo?YnM3in#bZ
+%V/sj?8F0W?0p-<F!fe^+XA5=?.Y3n>FkA at 6IXM:RO3&5$#nnr%#V#FF95lF3HMA928[L%ND?96PdXd5Uf#:ZS1\@L<*+;21p%RJA
+%B_!g:$-ram at q-ZO,fFX70_9IK+[>)lpCULu%oIL5mJGrPULa(H0I19j'W??)X at 1r"rlsK!4KohbG/?jO0Yr)";l_h,dp-`Q=b.Y"
+%p!8VXI*u,l[)umA3s at ++=;']6e<r/IQNT<+JlB?[+p)pY]B2.$[j!Xk$dY<tT`*GLCCk,tTsPaE\,<*3(@HNTnclT+BaM(A7[AJ%
+%Co9n&W"mO!/;S-l[7cq)2b@(uV,!hLe=Y;:!I,MUc!Iru)]Z-rE?n$hKL_gmdHF&Tg4kmAK2=q3ZP1QRP"t>>:S"1Fn0*9Tlq1R7
+%jOcn*50kAGdLqata<\!:Vedr.$`Gn;<];:*2]3tlTJ:O_<*M=#%:i at 7BQs:6m;=r2\RC%jMtf:&Kl`Q9lRm'kJmB"9,0e3*1uuCa
+%ftQN'f$]rOq)gX=<;MF<;"1^-55;f:."-o5cI&'(PIJQ>kt*9`gUgb?<Zm[[Pq7B4jMh5;'UD;jNUhHNE\E?h_Z+c>43D/RJF7iL
+%$^2VB*R\k(*q0q:85(gn8M8q6ZuP1n+X]dJ#J9_ at +8hZOrUcUnCmmbl&tEU00)mKqkt4p0)YDg"8\WPN>X)^()_!dpHSWRV6;H4d
+%LIJk//qRMQ&7/^A/QD=o<0Q,fY(a<hDUk^Y&,&`5i6HK*RWkW[r'E!P=mb%HOY,/<Y?-"_UY:M/\Ss^N4M0)c^tCuoIgrnJ8FdiR
+%Y;(0OKEI"SJ=a/Cfk_SRRh_RRnDh"3(dQ3sVoi.`%26)^Z at c99Dl2+"@uOa:RU#buKUQ<Eje]6HT!m(lDId.#kLjT6=Tp_k.B!E9
+%ijHL\:4-hKH1iPG]!']dZkK\%dm]u_n%ddSZ1d_Gmj\520tt)e"5q=<;[6C=6W^T0]/.9nWQB13=UWUT>3=8;(.tl+E;2muj5E3k
+%bs*MD23)k[88)"_Wn_Gc0.)WWWUlj at lRqO(O+b9YR[T"thfTU>*;iBK[("BP+%H6%))6:4SRZA7F>hid%=bt=>gL[K;Rp/j6UfIh
+%J&]i.GPIBr/6a5Dk&9V;Q4n$d>8fMVK at N=C'cY?SPDpb9Mh_H&!0;N/:+uY/b/hOX!E4m0VGq!-qR6)OT"pc>a?8,,hD=g/eDN>b
+%Gnh>Mm*\`so#9geQJh58H[5hO2f$`be&06]\0toEO%5B[TAU[d4JiF&-\c[]$:=o at Lip>eKdC2Ch7G_e.?nXj,bit89]/m6DZ/N>
+%^p*Q"&)o70gqs&63Z+#m4que2eFIrc;X^&iQ3al'F)s`dq:=CD#58G*EkJstOgo`b6>"2/^)uAN%\au4lg#62g1a:d<9Da7M/XMA
+%MNub^?NX9/TmkX`8AUGcU;P,jFD_,m6Ya$8DP!#%Of*?f*EdR;fdp`&"/ntdZBTFEgIaO_d at 7IGJhXCZkt^A#^?5*[DEr\(C7t/H
+%JM;S"8iuFPPX<Jjo;F#/-ckM[4UC0G[q5T@^SJ4U?Y*u+8[9nS`pY!lUl)@;[.+@?mlp!$)N0''D)uk!$/5JTA?+gSp\O61Sg:#W
+%@QLZ6dV<:SU at 9B2Vg4mkY[Ns0gP06L57c#:e%1Gf`t5(]:FBE. at 253j`!T7nXhPPmZ>%f3GbR3l[0]HN67[Wmg<sW)]9iGE1W5#L
+%^1n+_aJL0W"aT8[-U0T!3oYIYgLeb199<j7$Pp5_JEBG%>hmk$R3br>InmQ,ScY7d:I73>K/L%^l9#sMRJL.BFLLoU/`plDgQN#$
+%:U72'*`DaM.<gpK1rVB#ocu+]*$`Sji?6pX?LWG\FY5q=Z+U!@Et'0s_tik6d+O1PSDf3Y`\Q/lP;;`MpGUg`Z.o2SFc]M0bqurg
+%0L9+B5ek5g5&ZrP0+(JKQ\%.df-smTAH&AlkLM8VY1'6qlaF at Gd28UK6WYiOB[_2G,h[,A^ES26PQ9pgUo:]!AVo/;/c"]#0qlj\
+%\&kV1U<'Y2lb2iq<oIg*&BH.k=tc2q:V;gUnu18H$])>!9,epfZ!gsWGQ]J,H)H-e`^e]/pGU\M-R,0Zb;1l;.p at 4JVMm&k?OiV5
+%D`R/#@dQp\H5t+81,#C9\_$@InC<0J%=Oj+f=c1;)n%WYGKP_7!_-%t/oC$jIV%:Dc8b2%5:8lh$QNY+cl^EjG@>*E<&W+7/`IcI
+%Msm=TOdaOKTOD_l-`N;O4/8h1NXQ#SS7u9BNPf8&4[_PbC1\I:#oD*(o&++567%>de>'dkZK1/2c^M)D4FCA3WMOD?FCJaM!0_*0
+%U\LsI[4NbGj,K?5q"")XbHeRa\MK"6;mWNSptJoVgYImSA,1APWbL^\7t$G,9>J82ro`(3.u[D)C2-;%0hM3OhFSH0-XI!VljPVN
+%C at LX@M0hl=<cbstg`=!;;hRN^bK74lPt.FI>UC0n]9n9 at 3X&Y*:-ipHDma=F*/4LC6VF'c6qTq`%I+CF$0`=`=m=tBB`7Y/Od4fo
+%BK39YUg0&B5Y*6[Yj@(**<#YlpBbE!,f5:!(H<Du[1PPs`A69>?5V7,M<6"BF,j87)ZiSRI7KL.a`fK+4WdtsQ&#&s!+eeCpYVS8
+%oJT@$IdJaG]fjfpk3k;`r44u_KK%;3Al]8Ej#8mN^;4$iVFdXN/?,E9RoA.gL-k&87Cn2]W'PiC&tY:Y!/W8rTe&bD>LuL&m9>cl
+%P2QIpo7FG(U*Al&c4]qO-]=6E[;M$%bo,:(CO(k%mR3HuHdQm?[9?QnVUsiif5'+<.MU-0F)F;`6&M#)E%:k:g&%!55b-:Gnt]<.
+%1--p5rBWUL&$r/aA`AfffC(Z3G%g$(>UcX&0913GDS"^`Qg&QO=SZ"SBh;..)=lr"8<T;0.oPKhD(gT8Bb2%_K%4U[+?Kl2'ZYn+
+%mFJjQ$'*loe-3p+j:.9hT#"L$ol8O33V41#L_F0QlWFhFpT>HUPJIaVMM6p$j@^&)]30OB5eV$IB6)O"9uHG_ba1lrR50>S8cn"h
+%6r7Tp<W,(q6C]t72K/P4>I<.0]8jSZrhMHXM.F.WPLb08q"ol--/tc8W[[oWXW4bh6+CQZ-6o%0>J`qMpElL;-!BfO\CWoCFHOF7
+%cBP4hX at Ecc)*m\%"he-c#NqtSoMoB+@<4G?jiR\uIIg_)>lApYHYOBGK6"4!S;987I;ZP)/!hpVUjtZ5%*dHF-[qf9^&5CoFT3up
+%-3l49,W3kAi2"$enJ*4C&PLG3hE:JS2Fh4B:0@']?u)>mX.7\Y$(hI)W"`&'VB[2A1i<2CUFGI)AcWruL.KdQ9Tl@!IGo=:H)r;i
+%09bD=)N9saMj^@i)KPSgX7X'g(1Qpu=&XjSQ6P3rMGQ&e0rps,\VeXqY5A.aboMsq_H'E-J@!AlrC`eZ:?<5<ZkM\(jmRSXO^4-k
+%ahHk]OHTcRX>`nXP"e%!Z.0dMC5Td;2(.YF"S.h%G:pp+)OIV2/mQ,b9ni7`/d at d!!fZ4EEhUh09/Ons6V#YM3TlS*p&8UD-9'sG
+%01P9f_TgBj`Io'V(cs1PS!)39F]]8\457Vfb($(S-DbCSq#M3+"5.^O[bk,&Xq8 at YHNWBje[bDL-FkapW7TOX7h-sGi7*[U**.W,
+%haYV:(u%+W^1:FW_+P0#%=BDqpppZ\6Uem?`E_#.CGSdAInO<"Aj3/Ok<CtoQPRFNLcd4$&+8lmDE/l!UPufHp$=i(In?$S6>su0
+%G;;jr_.c`cK"'oG-H5/7V#YgX,k%_e/.FFFk/gKhQ6Z@?#8Q8]Rb_A7NEH;r65[ID7R)gUJ]4e@*3^e<d:UXg3t0^T=QDK_PQsIX
+%#kGK=bV9Q=9mTeaTM at VG[(Z^Z4LrqH at NJQ&-CN0JTo1eB<1Sl\(@"dE"Il`.bRNa<Stka6*IW[Ec&rqJnjLLUJ=L2`9<uW13X^5F
+%iM4M(.g,Rr"4ajHV8(iUCS*$3Y2 at a\CWPne,hAJ*A at o9jb<h_dX!B25X#uKZVJVs::]]LrZrYg<=pAN-/`G*EKS:lVeb`L2"&5h!
+%@O>9MkNo`Tk5&e1N0gZ/iD,R]-YYW9)7)!WL[[bPUTp>aO`Yl4F5-MNm<jTn+Q6XXKDBnGa%<Zf].nl?NKF"%>g,a.b'6FP-",O_
+%E<7Z14ke6UP_iT^=>s$JS)&@jL!;$*[r#6 at qJn@B`I*71Bju22_eWe&?kjHRWL_NRjnIhGT'H9'=5J^U<808HEH=A8IM2gFiT\^n
+%kq&X.$p+t$QM[%;fZi?\bQ_<HiKi7T;S_Eip+#k%TKqLj80041Pk'dJK9l9m9bC6dih2+<\'QKU1;WZTim6.Jd at RA2?b]QSq=IUT
+%1U%u\Y[2A_-kQErNe3:45aZa@,YLP^8da0L]N,i3\X#=n@*0Du"0:KL=>BU3'a[%K_PU_3qOi>MJpHPP'?F*jjE=k/Ki=f/l=!!)
+%$-I-Nn5t;*E(NHF:X3c7oEg^k_/IVMn+l*Q1[[mj2LXNSKcbEBr.q/DI':ed.7X>m,aGjE(PcDKmN at V(1Eg&q)W#oKFet44WXR)a
+%A#99#kste!&+*XJ&ou]_2Yj>O?>N^sRXhRS&62tBT7+@(D"LF0CPSFj-DgnTdi\sOTq&d.WUDJ!1_pU9$Bo(po.h.aHrTqF>E4&%
+%SF#g$BP!h7q.Qad+D^',#8T>$DX[FLQ"!7D$Q$Rjas9!I-Ao_an<7>-n(8KKg(JnUb1['4d(7oo*n#nW52$sBD$3$sp0gF';6PUb
+%C2r"#?3tOH(Sd7m:U/tb*CR2X-/L*K/)oNYA=WQgA]c-KY3K;0P("gA>=sercB1',`-82L_IHjI^mD`$H[^?\*_,>oeeI5EfB(Qd
+%.D[*;jlobO5Yo?Q/`iMeFh5.)8H. at 6O*9"0)8 at OZ@%i^K+I.P5=Mht:lc`GE/XZ%A.1);kE_!9=.f4W_pVpV'3L&MCSI_uVF'I%a
+%_oeD<'!n">BdJkF^$K@#UN#TS@])]OOtrW89au5B\/=!cH!<<"jKW_/oOis1B<">GiT"*n at ps6N@WS&]X*u)]9DGgTQV`++enuYP
+%bU0=#V#op8'8DJ_>iP3J_A;RnW><R_H!b%Q7W*Us8*WUun))9(;Bl7d3/,<5dH']"f6OL#jJk1M2KO2=P(0j;R+[PLD83!^_83dZ
+%#1?kGFud!M6TsU10uNFT]k?DY'5G[p/U"Eu<[><DP:fsCSE.qk4\D\K#=!EUh:cle7Nj#[7-huC:T[Ro-NAFCs.2lj=D#Xp%A<Q(
+%@tL=)=G,Dt&O0Y<UQHNaH7Gmb`QaX+T2g866(9d`l^2eU?\%Hk0H\M_X\"Ut)3VF,YFXmge at 29-KNdH_,fn.=93Z\=i^N1K-KF+p
+%0Dn*s9ggbfe=2$jb<&ud[H\hic2DEIA0)kAo2R.93*2))ff[?=/58A#aPR8^\F%m`Gc/K`$)h(+ol.4oHh+n2+#4ua07)E#]nsk-
+%<!YtLoph)Be>.55;UX0A=As4HlV.DY at 7Ab#m'3d<:;Nft`ZVpiJVK1fZig+r'7[7j'YH.iATPAbK[WGhW]rA0Er-2=AL$NO/1<'K
+%jE#M,B(\o`]b!mtR2["=D*^B)3&uSi, at AS`G_ITH)6"32-l8[sPI)Sl?=\41:gL7c.6m'0A7cu0=K$H9lGl^FC#4UC at gsQ3Sfq&N
+%Sk.P>o:&A/ZLm&a<8d#c(;X_TTN+_C'Pbte1+>u>0\%,KiLuH\Wa(0=Qb7k(X8nX+.d#>PA#Yl^ErqOpDMfCfgss!50HI:bLQU[]
+%.ke'i62&#X0Qg1%7N5h+[X.J?XM<J(ig-Zu)?AlG-CO#d&nV(('q?OE`Ca]4cBs="LWuqq4$oYj2a3-GG&duTP24D1F^Sb&i4=8?
+%8WjcrAt%IF6EQMhc$OBK)?G:kEoDd=PbV11,b[%WB!NtUDhGH@>Vo%`U9i<&0CNqd+nSnSUt>/T*g9uC=PPMbrmXE&C0?Y at Q6Vi=
+%M75p(g[Xi&cgT/s8ZadT%^Gh:$c61A$8T3-6Q=^EGp6GW!;_FG5XB;=)$id<Om;qq7=D_JSN.:nWJ)B%krMbHm at ot"[#Vp"p;$Kn
+%^(8A&m_RBi^IA;'cCK6\Q7ht?M9U[^q08;%d8c]G%>)GeX`iXL(T"#j$4S;Sd'U&c<F(gonL1I*dTU2E*"pTV)m\7cMmqd5:Sm/7
+%7AKdd>5+boD at Z]9Pf/1^E_1i[Z#6 at OZ;lpiq(d?9Nk>X`91kQ]V*5 at f]CtK6Q5ab*1f3Il%EuO+HZ&GjM>&L3,/76fI1KYjMOo3<
+%7am2uWGr3e4L@&U>3e$@d3Rk2YUlGpHbdWhX-s/M&k)-+BF_jEJ'R(E]r#juG=)XHQ=.OZY)DEmJ)l2YKG0eu;_8>[52C]:Abh/C
+%A-2C!m^WTkcLAmJS3l311$G]3$8^5P8U9<j8G5!R9!DdTe<'/LZ0QqTa):XGT=J*)DU5Qom>?P-dj:N1hCLFG`O2fcc^rb:o0?F2
+%IjK[!iPhKpdHQS'b=A6Y3.bd912p^T_+W3s_2MU8=/'pp%I9&2_/IMo$eBX(]fc$.a+3i?[/&2.kW0%(BgJ&lqlNS_3_Rt,(a1S.
+%7@:nAp8de.gGZKocIJI8G at c5=)28<6DJO2kP)T6h!1Lf:d<7A/Tt.IaNd6MGpRXI"3nRK+P&/J&1LcAc*.Mq;lkFs`\63Y2l0=mj
+%AMHDB<:5V*CR\:q@*G=fnm6.%<A=t`11IumeHXV/9]h4*>-?@2P&1$/9WPABfTm8J`GkNG\[O,B;@3QU+!:Nd-'.c9,U(htR*)j*
+%ZBRbD'iG5A\[rW:M!s,fdMlDCk?9t8hOL]II\H4br7[I&[%2e-mj+S6<?[c^fQA8$<o5q.U"=5lih%ZD[.otM1pbhBlU6qOK at fu]
+%/a!b^Bp+utf_gMFbD(lid&0hr.I00bR>YK.5:AboJ9?1mjZBBa4rjKK.RKnA/rSo#89k$Q6.m/$E?-jd<p,WMpV"LiW77!+b1!&5
+%8no;)?L6f;2o3M)#HJFdl9t&`il`D]G6&(m1\_+1*1]UZj'7:>op`nn"9SM76VkMoJn6:@)_'\$`1+VXl?WB!;M"0KD'M?_co7V(
+%guS&1=*^jDn\I]n4+H=)euh9TaqdebY7gaM3A%[U8aK at 15^Q*cUZ/\RMYDI<<0@%JHTrJDUug8.lkdQiB&YpaKC?J:Mh^2)CM[3p
+%-1X8)8#,Va4f*?0`[i3p>K;:6[XXM9XS&qrApEMtVMZT\:BCGsR6`+@^CUXdk:5Koa4`BZM#tN/+r`TS.6ng/H-<[ofQXgfG>0TO
+%`M=66!GS/U;nssihQuUX$l<^N(Ho[%lB$Xg]e&cm4<l2t3b%oI,6dCKK(A2)@TekQ1o^j=31cK8o'oF3_-m/QO44#\lDgBmMYGnJ
+%&<T$j1lN)DS=N_-<Je@\O^V_`4 at 8@dglL0WE0Z@/:pX*aE;hCe<rQOo#sOJYOMJTkK!Tj8"h=cVO'?n=K:VA!=t6HrQ\b6'TuURR
+%PUZ3`W5QpF9SLVGq/1c8mp+ZcH$$kMM*=uBa%FkCj$^Q0r2CAlRTj_$_3toR/<kL0o(%KE^YJ<EdDn#O6&h2S1T5EWRbAY:aXEu4
+%=gf<?'Z;SS9Hs[SSCG9T1GX\I4G,9X_`'uXOf2d]ZB58NWFt:i'$+n\rT@[?`otIhqgKAG:@4gO?qTgH;ijLXdIi%Pe?>!pR"T?@
+%5n^,eL5i?055 at 7od5T7@r4p3Ln&B<?FZedO(\oDfoDoJ5IF;Y8h1JM7mE[`#?X*#Bmf!W2c$Ekd5@"S+/[\eZ&0VsQ0m/iV/2P%j
+%m(I1q**[TXq7Qe-L\bIf%+o+G0?.CM]R", at C8'10jY6t!aG at oTNd/W'aWjO+YFkPlq[tt7Z\h3FBrNCXm;kg!<b5g[^9%3Xhbe^/
+%K1[(^f?7\BFfEJ&r#C!5(Z=eZ%:jYIkitF>D*"5ICY:janr;E0%`MR[9`F%JUnS`N[^qD8an.+-Bcp2O):Wa`\Ai?<(%\0ETl7=<
+%8["Ac;\2gL,oSLsAQ%`XZVp3$e<:'[Zr;NS6`YK-7LG1o;N"0sE=7T0*d<?a/=2%<ahte5[95O%aY1FrO3gA\9G.;j(?hogL`'JK
+%6`p6:4IJgf9*[/=/d!FS&<C"<$X\pbNZ((<H$+DrC2G,>4N'XWP"lAjQfqr-k!k)J"(=!]2 at -nJKZ532O'R[=;k&!6].!1^8MLfG
+%er<:Q%3q_*9a,'M"t3VC3K?!7$l_Q<Qo>;_)fbUEg./nN&jkkZqZN.3X#C"\\M:%TZ,?ki^Ft^@?a+>c3TLm>"-bER7#/CjS:\^_
+%p:1SY6Hqn;C#lj3;=CmW>Y<7 at h`P/e$Z0_PB+_!*5o->>R!91M9*<`%'_DH[E.o`_0\.\)SJ&3uWeV4b8Y//R@`W!a at E5Wd!D^nT
+%T^J1,)W52Oa=N[[:!#Fp->-DK:,3<X023Ac.i7+s>lO at N2;kKrKe$kIe!s&p>K>q5Asb]L%PW^U,3O at bU0K4D(6TGiYf^.=TI2/(
+%)5CkDP"OK7\=i3Bna_e--s%G_+P>;R!RL$@$:mT5 at g8254m-?9fVD=_b@\_>Q7^6Of-'@<_k[er#bt8\SV&e531Ek]9]HD\GrnlI
+%/IedQUUEu,,cNs"EYOD4-MQ+c1Mi;N4Rn`En&V:rB,`lM%OKrUfWHHEPnI-7)YO>\rRm5e"+&UJ3id6D(t_DS8DIt]JY\M at 79H@@
+%pj*pR*-`kXE'ZK(N$8Ap:nTLVRNJ[T[[Db;/MN\21H9 at grE63,C6?(..PdnDJt-6rqk7`'XjMdDPHEok_:Ht@$Zn/.VVZp9!"OXQ
+%9Sg,0qMPK2XI+o at iDA\tG`O/AY9caV1Aqh,g4B+&&^eXH9&d_M7>P,J0gYY:[f0j4r`N8&8-(lMKquWEMik6pIZla]BT&]J8u@@@
+%I1V\l\7$ZBB&-,eH9AI/C^)[pqF]0N`g@?WXXfQ,ZC^3*P%u@?)Xnkl`p$!2Sq)`abp'[YWKE\t3%<%75)Y=]8KC/i=jdTR7L+>g
+%]h5O$OH>qk$W7"M$[OEsj&S3L!4kM^TU?rn,OZ$V+aI\r3J!A at s$),?0u69Y3ritCi"[l;MWpLC%QF_G9S^,(%m]L>4\FFo=4nHJ
+%>KGK[MNJ\uqaD\E<d*0>Ql_6Q=WXPI*.$d_H,L.oUuMa&JLj3W]44F)+P<o"G5+<mrF at Ol9JaQ1,N)J@'tM*Ma0&7;9!_E\g_HTS
+%89mM3/33lIQmgOToZ[8ME9UFb#ogsb#Hb8V!5]Aje\\U]W`hojWG,A-6ta;Xc%4?9X-.4nJl]8dEktWH:]:@9_an_dOIDaD#'gdR
+%+7V0KnuT'SqWWkeo!X,o$!8rUnj&Ho5lO_#>'6=V0ouCa^'"&=V.XJ=@p[%;@W:0X^<9*8odOj<A0l2IA!m@?$M">U(dnSE21oZ,
+%!oKG4qoT_]MK``Y8gpu8bZ4%9>/UFrSq/hs3>L+g=OZhte2e<SNKbc;^@Iee8sVm/63$<oB#kTtlCJrIe79d)?9g#d8Re.BN^6m`
+%_2eR]ZN;odUK2$=V"7A_A"HWP.1nXcZRbt''>S?ZBniu+Gn%/#<QUfU'0+OGeim8AlNDm0ctu.UBCp>R^erq<a_h4^6O$Jdh-M$W
+%k(HG6P+7ZVP?K8HB/+(*AsO/e[_6M5/)F'_BP;"*iWAtb$A>LkTlq3cfE_>S>)H>JQ5"I"_WmhO_G#M^mb5Gn5b*!AH$*i;OjM+[
+%?LW<]QBf/aS>$HmFJ/D$WmDlZ!IBab2eFiU2oN)0I$/qnAc5I)hNKeEdCX)7^pYa@*_d:Xi)://'Bb*V9Y$fb:QDr:K>`:>^jsg;
+%U+](^jUrl&%_=XLpAL4aIcfc$lDjJ5[?(TQK7,4QL:Gc$-Nafo_?t0u=h(-n1tl"F:spNiLj7LoF9eqC]g)Y!%@ZVFZL#`m\Br4r
+%gcJYVMd+Ph>4r_<R&P)U/aDg6FSq-)OjQP7,:Ojq:4'"5.K/]]96?@%@ksgC>(]PZ8kMl5^m3Wf1UYdS0MI^E_8hcB"PV>Y.7^;$
+%T-kj"#^X$]V<1;&[t62#B"9f.M'9s/@'qC'M<tBPPR%`B"<^rJE6pq=-:nAm"fU3A+CE4TC;PaWr(q)7C]HPn"T`kJD9J+nCJ&ie
+%9#)jS[=ORRJ:"oC>T5FeA:itPo95rS;52d)Z9BPr.S'_Jl3Ha#SI)?F*9hqp0H.M at Ut;oJ4[?=S5\a%E0D-$Im%)SD4rOcH+d5A5
+%FMQQpB2S_//!$nfX[A\)ao`e'OBRIca\7k2JX/mQr$90!V?T")8c<D]!R\&%2>&fub3Ksdd-G8ZG,S`)CiV"O. at 14A>e<P4p&],n
+%<4B[o8g3Egje5%C?@W##qlK'67L9-K&WFW5.GNcaj:n[ie?DUFlc*MQ'?oq;:t(BPggqen*k?Hk1fX`/VJH[3Cg?SKgj3eH\nDFC
+%e?pP5@*MkW[Ys#5!($`4Ij=1uj-Z1pe%cPa,fY)h>BjK9.S2-sF=b61`N[KNY+,]eGR+I'ZE/)W6!TqXf$#?*[sS1Z<>)\c_O4?4
+%F+qC8o$DY%>&>V^**PcB-sQ"fQRaD0FQV:<V5,tPOpljHeM:ZH!)]7KRL78/,/<]6,nZdYOHZ[b"J4(r\<i.\));h+g13!EQNOJ<
+%4a7:/q"*jG+i5^q;9r/Y7"cPo;ANXj;$YMep0cEI&"_7u%7lgbrH5sj1*BYWq51SU-\tqLrIE)o[7cGr+Gj8LU1Krf+C.NWN)g'U
+%3FG4lH3)PH!CV4:c)$!TW!!2'A?,oXH6?@iM3HMRR7q"JZF7<LVS+&=2OQ*tl_H'$P[n]kd*0>46U&.*ES8[5EJ2pYlr+O%Eg\"!
+%aZOYc9ECB`"#-\.P&E6E'b/#'5]da^WmE.f&B%n^Z!(g at 5_?$^4%C2BB.9*[K(;CfJn1Hr7oPIhg?OO?(DnS*8_[G"NC5fF):TPk
+%5Q`uUQSpKBQ!.;I!/-^+Ftm[0JgOZ8foBn..,e"eggH[?l;@331=/l'NkbWg>t6=T at -i!c924[K:b<$6KFS("1$NKp`Fc+kF=OG>
+%N(.t10p_,?bYsBgUef+*6E$cF6 at l,k3(fO1>0NtqLRVkLg^jB:.W^Tn=n^bgMEbkU)f)d[TZ!]eX$^oq-O]KBRt7&#i<(27aGPS,
+%(>N,]R\W'hNa<ug^h[fTZ0TF\8Lu!TLo4Q&CI5LB"tD\F`kb=U^8&i-iaDJ'"*A-*Fc=V"7JEN."thqWga&2@#%eW2<mj9T%IP4_
+%-r>7)eG7Y7etDo&SH@\VD.Vg:r6$i#Q<=Qc3!A/gZ7$<J,;#>S#4deI50WUEp$"#s'YN:&f-$;:,PWZ)d+:;M2Y%2de/Ngf[Pb]k
+%bZ=tpSr>7L\kGS<AUqSF*oVa=o*4\uD>,c_H`$)8CEPpiVQXR9AO(?ieL<@\UKQMZR)*Iej23u&,<qsm6iI\!T2aOoTM7>304Y0#
+%cjo/I=o1u!2`0o3!s!'MDq42+]'1k%KjZ[Xrri\bE7R>Ekk2t232K8:i9tDo#f&f"[9J9C/l>flP+&TbaJ2oWVpPF@*82g0W55?!
+%#^U1L[QlU0=%2ijm=($\fAm.F?KRpKb&)puKe#*:H8%XQRq%BnZ;)hBI#qh=5erW#o*Gs5khr89@%r0#_B,:B(S/=K!@`XbFJZ0:
+%L9=c6iX8Yr`+oQJRjlpdSf?0$Q7W@$7_=p at .p^^7(pG5uYoDbr?*r&0rCKE[I7\0=QFO:-W,?,$PW^kf2"=kMe!;JYiMNK<='(N7
+%.C>P.**ZS_2FTqME6a_0db:WR$BlF%*:HLg^8AG8-`20NW6PdNG\62hK6WbQSbEaDA2nkVVSG)HeAr?g4tn-!aO[a.EhiK"bF(^n
+%J#(;t99t][SH0q2=d-oW3eI^1"KA3(h>m3f:s>)+1Uosj<"`8g%iQ<@&f$Y.i?3?2RO#- at Nm,h4jpc0]OX,I+8=<,/ipOqs^*VDt
+%:o0*`@$6>/TbN-$H8HY,R3qA1RC,[W"Ut[cr(tc'F="2hNrW[p2B$V/B'A'S_-!RJ:Vt?XjoFfLBe!DPe%.0,!-hP%01[D_10Ui&
+%<d'mKo1He1"067n!cu_qo1./>[Ci&aS#*%A<01HQr08ND'ueUm at pU'WZlT;P7M)U-Ge8"=9s.Ht'Gj.rD%V1"Iiehn/M)G'UbTYn
+%R"71?8HJH&kUo+n_67A!71Z_8Q$%mfB4GoG6"I#e/R0W,HC+ru&lMtlD^HnCMHrCYoHa!/f2UW.`$`q9rMhJ'>F$t>PU'Xp4YA_m
+%EL2Dp9:a0GZC*/>i4#Hm]-J=dn"<FVAjSsj2GB4Daaf/D9m]<H(?C.!RalM6=Ag]BY4/o9R:Oaf^[4=:D%%_W<M:4.)bu]l>Tt%n
+%NVjK89kLB?;-nHP4D5g7h-W$&[DFnV'opn!hSH/@NgaL>OG"_o!Y+*BdhOIdf)20KM(UhXWZ(VDQDm,5NZN8gkG16 at 7d.2ijEhJo
+%U8(/[APE`@7jXMk(/M5U_&=/L"^@TNqn/h.c^N7WGH!JC[0Y^L866n at fp;+1FTjUV'&W'Xo4/@d0<Rr#9dCTS&F6';\*j>Nk^b(n
+%<or+$Y['%U4*@.&8P@>bH"e-]E_V at A'GUJ-9`fj>Tt7A!_2UVeYcS*8ouQlO%0eYjC`%4Vh'q%bQ^mX8L'j1e;Dd'9]k.i(Ck>0]
+%`m=;7O]_o'(8,&3%eY<CjEh*-)(NA'#0<^(]j\,UHD<U..3m+dLJfU"m`5gsF&!+t85H\&ONrcs"UO!U\gsoc"N`DG>A\Q:UCWP!
+%O%D]3B$!6'.#0I3i5pZAVWb,^qGU<'+ at Qg8#+ZHQ7g$+X3!HT!M)39s[7p5r\BQ/*Pg$9"bL!1K8Mj$SbVG&t=?- at l2Bhm0.n^3\
+%Q."pY//0*V+2e\paTgRK$OT3RMlNGCUS<(b:7ET3-7^X^YoS0o9!Thd>o=`U$tuA3oL!!IT?^DSe5YYI(flq54a$0;FTjW03i at pP
+%+>?FH4*>T)`Q^g>A-Q?/25g:S;h,:0)tfC+AODu9BoM>aSgJE50X\8J+h-$$@Pn1'b=S03\f3a9X<`(I,IMP4S1Q;MV38<L_8WN>
+%/#cDZX#+gE\\]9rehuu$3&ouEjqk*VmDF4(m<p0m+MAq6L#tT>!>rmh2!ET?1b/6iYQ-U at kHm%\1OB;D;X0Ah<RV=0e3FX at P>S**
+%@bu^,e'%9LWU:TnR4Mhpl`ug4:P_T:FHgn4BrPKebKDGp#'Lc-:d*Wd/Y$`(akI1L,I4q-)>Gu]Ab0Y(?K?Kq_iT&8FA<1<OTV)r
+%F9PGRfXVBc1'N'p("N>g)p-pdNZf4?`Ku4+dI.JT0p[L`J:/Zu$6!=\]LIT28(5?YhR#1*Gp_n$]VCO\f:?Q.Fc.0PiWS]s'YGQJ
+%6J^JC#!PhKYa;lAAPBJB*U at I0JGn_f.f`J\]Q0Fh'[[AUCmIFZ=5!du$K-kE/OBhp'-EFSP=+M*$[SGp4'_NN"fZ$qds=]-*LSXN
+%mDt'C19.20W8tm!LClg""gS6PS^+5S1K\6YRZM0j1(d9uP9:%p_h"R8nd!ND0rB"!ShU']/7a.5a`-pLc_rsgnT5q,?<"/=f:Z*b
+%S1KTg._SGB'k at CaLblkhRU($j-hq"^!AchZi0V:S]Za?q?\k0#\:HVmr<2d1XG/K41E'M0Y2qG-!.b?%]91!@`OT%M&N&Hs!<Etg
+%UOF*fn$2(/="#gB8RJ\hA0=fb$Yb.XV/$I%O+__L&S*9V+Esf3TJgNb4^\1I'VsP"hfg&+_3+tTAHJeUNR,Pa1\b\,B`rQDPL`TW
+%>VqOB>6qllm(9Yhgg8im-G^jD2m%I<U1YL"Lf44R\k5##/Rtg-#45&[j?VY%_'%3l$;uj/Z)-T*I^NO5fPK`maMG(V20bZb!5>0%
+%SO^4?5dRg"ECYsDlO*eN&bnqc&0j0_&ot31!6W^_&!U2BZJaiNd`I,[;>.\6E=O5?Q&6omf5%m4)Ce?O/XDMQGNPbiIj@*^@],;9
+%0<:&3c"t+URP#oe,NL8ha:>+d-Y6HpI[-I/dimV1X-O;DPV4gJ#MrapFcLmMeWEUk?S3i<(sC%4Md_6kGu3etdK//`BAH[b!XukG
+%Op9:/G,-ZedR<r)24SS'c/HRM8=tum*,@\1#@MEL6C5[lHpDnI at E\g05V/n1/e>^_BNtdo%m<GeGbZSG^2bU:7-Qd(.B2sAJ<2;?
+%7-A8W)J5dD88a(!$WngJQ/qe at qOo-L6DPGCK*7Z%5msAbItcYe:<6<CNA3Y3k<VHgo1iBOXs4fC=UMQ*3Tqk\Jm[X8PG'.lPE?-*
+%%*9`Nb=/mp-_2bIb__6BkeuUD7L0o'!jF/]^+CAnP&IGN%(7NH`@saq&>Ek'=TEadbRoQK&b#o`r$?G7Z5<.,(2t<NA#dd!NjHaa
+%(!*,H8"R^.?D8WUTVJ;-mj?RX=TRo`UR[Fh?r=$t2P."nX;r\pV=Or+0);-n%g+[\Q\p)h83F'']3-9rN09ACW2S9*,sn-93(_F/
+%b#(^?UfJP8%A0UGDSRC.G4:jF0%!TY$4BW6huXA*-*rt3)-4(e%p[BsWc4Tq+.BKdUf at Z<rWW"rJk.AnVQ_3+:10)>"<mikZu[NH
+%;nne at OfK'([.7 at 7.U>]G!iXTP*Zoj]Ng)A(TEHLFBQ[?eJ5DIe>U`'"KPK-]/WHIa3+SDf(O`7-"*qp\[M[O//NjUXFJ#e#%M'+4
+%cu.BX(Y\cqZ"YP0+kNHNL!c']P$"Vp;u7&<I>Q8kI[V6IaVO1]fKJHk@,G],MLA&cEn[q,^]=lWCH?VqPt=G<iV0#>FdA>f\Ob>9
+%5GUH(j+)7Tfld.o#W?q3N(leX[*32UV!2$Db at SI,'a8T at FFUH1<<5E2ji>=5Q,Q!D%,Cc,Q1m3Ngm'H7V["DeI(9J%G\D"B>f1"P
+%Nbj<<WM/aiU2D#c?;gI#PKL\j4a0 at 5$c!Z3GUT>GWY*oO3,R/q>pq&%V!I+R<M`A/!rOfcA]3_aU^$\n17/hfs6=D:1B<%0R'rG/
+%+QmB^,\XuHVap%^)LP>32$0=<,i+(U_+9u877 at 80NSk(n^^ECPFfS]O+t&=;om'^6YU at M9^!_0u2<3d!H?KV>#4=D&1GUS639beV
+%<aaNLfid%Bi3(SjqC`joh`@:u+=ZnqF1Pg/+f&k]1!3Mp7D)]+T0ut/Bq`<CKPI<+6;oP0/sk(cb(n]d$()1=&^Z/MFrE`adh\4B
+%G-RdORBeHu6l1J%Vct!?jdJdZ;f%WWPd_&T9'>,J>d_u?-;lBao12oui)5ko0.TZgE<3E9!ARM=fgS<,QNjXPZYT^>8i'olFor)d
+%7)C)BgI!3-Q*MdF#]L9j=Sm]m#,of=@Gjligl,!'1#!J,+$B_.XsKFg!.e$h0BYd%]8&R9(+X6knnnZBApHIQ!XKgg]E(H21+L*P
+%PQ^Bc*;Gi*aK,tKT@?JIfAIe\['LP=?qLEm09_>hP1_]8'Ju(Ki,<.:'XUYjR^0pNaXD4D2UG.5gd_+8ZN&)&T[0dJku*pH>8*pi
+%@qa-7Dn8e[hFr\A(jg(YMR"tS?FeKbJY9$A+d;YDRAGpTn$R,.27'C4$fk at uKFh0,<._Jaa at E'a=2G8*"+2+[6MlKMnf4T[!oETj
+%Z:1T`R1e?D8t2:k"RDI>K+?BsXVtJgp^\Ys at rh#G@&@AePkhJS%K6(KdePX"7o^0]09'oQn@>U<b",W&q at H16Wo>;YEI9C3I)oa1
+%?LWD$2%jAX;4l,FONZEt.++3S#eLO/mk^nMO;YM=92X+e)(3alMPc\g'j\7*Jmi+sW)g]\McM1+oFgBb6ViDUVisMmVKO]-J7-1n
+%&sUT5/BQl[!.`Wc[F$l77^FGVd+5\oa at qo:V:U`nV*s<_WZO!O,n.YEp(TCm?.:o@&j_N,R4OB"TO at uE$o!FhKU%KYm%ok/e,cqo
+%\KVQD8Eb1+WVL?YA^57jo88_U=\:>adu:T/J?gCn=+I,%iE+2^!t.frP<=k7b-b"nFp,/W6sc<CJM/HcO3HZg+IllHU<'\a?OB`l
+%79b<-.VWHE*7AY"Z8/39CC2r,K-UKY<l.S+2a=YL`;oL4>Pe\+[#!KQmmXRd;[=)k-j/s*8R"An"1;s[$n+krfQ,fOoXE$:Jh-0p
+%-hB;lLAlm6I=ZDY3`(DKNGL/fW*'c2 at VnhLgPuuc8bn"j5`5o%cm:5W;[<"L"RErre)r91dMn]4Co]f8dB4k),,]LJ^s.TLMO,AH
+%D at R/P\puQYhs5h\Y7,]QKKsK3/sj+nTMC=RX`4F;Qb%tjPZWSj`6qO!;Pg$H8ri3QFf9&d`$raH):g94365X,-&gOYMB?TK`j-RU
+%S]G.^U8:N(!P#q<$%s@:$<h%L\KrcsIO$!]XYGsCOGBK)V3t8Cf3!Nm$pY+0qGa8nk<=[>US*"IQ#Y=e!@5J8Zm-^N'k'aL9>DXj
+%l at U;`@!c%-MJh6d):8pCb6RXnosg5mK,`GZYS2Z2;Dg4Ri9iIIl"`b`:(=ON7P/*+=\Q5i:KI$Ci*mCr3'jBo=9\aa$^F(uNfM]:
+%M="XV?3BF;^F$E>LIsLm&a"a1YOskb"[%IGeo!;KT@"R(15c5l"Vbr3AD(SE+-\$2R:IN,I8*q6b\U\"Mf,9?>bBhegJ'FtgP[el
+%=#qtFq$/qi-d\2k?e#k"%E,`sk%F=teK))`<03&[BNU'G"#tK*OBM9M"Z_Z.E2JEu&0Y2O:,ga%O7FOYIdA\;3a&WoO`J!kKL]dG
+%DQ%u:=/M/:6X>bhJ'1D5`t?m,E0MmZh,qK<M&h$$+D1b"`#?K<`&P:0gsZA$(H$J>lbBeh\7?bZ!S!(LWg3EsC08?G/sJtRJ=Hqd
+%RMH+pWX9%-+eupf*,s(X)[mS.MD?V9H3siY$G9p&!-O2N15dnYjiA$h,Fa'5N63rai3OsD>50l,Tuj7k&*4L9J]V)[E(%N.1d^>(
+%&qmU*_c`;]1kPI^=LrNR.r%F[>(l$rH<!.$^:-e-'$>NW<!f!kb#ZM/@!e%_")J5uosK2UadkIK.QM0^CGIdYd"9Y-enXFfRF2Pk
+%4\]3II>S;skqCH9[75>marZZ(T`%r5cl(1&<SKgO7&E'PRe$*lohY528Bh1h at Q!ua8Qsi>EYtH_5LAq9-/TW:;/I"f3S6l'ln;d9
+%/e.$Q5otb]N\3\EL_;dNnt?\Ri*2B*^X<g'd^9P.KuK+KO6%dBY"iiC9JhusPSr/G(=3C+KNAN+/e;u5M6JhDjYmoK[[;/Y=^EDe
+%B/j3EK2l^sSk`l/\.*BZ5`D+^'*JToQ$0EH`b+JCq2J:?Sm3*=9;<Mk<ffmED&P];cLM-?('Gu?cj7V,<<@r3p'>%jIF]uP<S#fp
+%_t=Jeh??R][KF<K'J^)-p8+69;_uMd"8F4V`GGUWd[#GCG/@k*>bO6N7gTr@;/b.nTH2,[bBfOh at r#esf11!@_2L6N5SA<)9HY$5
+%>,7J,p(D8;c60(MIl6p\8i\2V_1h?5).FtVod(6c-hBM;g:H3/!.^?VM:;;tK75!:9FqDuL^D?]SL@%-V%TrV8<a]TS94%.E+^.q
+%c'A45G#gsZV*%We"1>s80LPNTZ5hd3lKAAunW[qo=%?<n>QifC/?/Fg,J&Ph%1b"sAMB:.L"o+2\Z?uUKUl0S`aMN+F9[4q-VA1-
+%bjnf.(oW6j:j/p-Wm at 2#WhrWdNosf77k?\!7rnE9>7A;8b@#5g5G6=eVoGr-!tLKb=tjYNH$U4D'G?5OI,aciQo%n&*GN'J4XN*'
+%BV#RJ#^n*$ZD=mCb)4:]p@=)REZ4=1@[m'G,#\Yc/Ybr2!HX7/2(c/2oe%@5;]^9s1[+W^0KKU]5_b:/rR_*g=3)S>\.#=T&R_(`
+%VhTA^1O+Ln/.'9*/Y*:!BEFbUnKd.1[X`e"l,k/@+0k[akZ<$>D)Zm2[Ck3r(V1/`SVU*cnt'&V*bE]_!3#&,eQ;;\d?>H$jua;B
+%Rko$<ZERp1aQgd#e]siT`C_Cp?Um.$-JG2Or#ok;lrR^2AJE?"f&PL_?=5%Ii,[7p%^fgP3,1n$7F$ip*R4X-Pe9"Y<\>Y^8_qXA
+%Drd!4NBkd#2'l^03KcaO&6 at Eo-';Q%igNok8]X"5C\_o\G%&K.[(ZMn,OHXk+Rq;9o[?OM/^-VL?oO5?S at Nf/"6X(]"koGRm`81S
+%1rZc<En<8nD+R)MgC6+I>f#iZlDP3`A@[]RHf3W#\h.L(aQJjAlt#YN_s/FuZZ+KL-%3T1Uaf6a"O\%eOmJ8^n=9-0iT*_;?fLTQ
+%XTHR$*5G`Tl^am23!TS;Su#ad6$p$cVM#!,JufZsA4VG[[m8gfO9$"W(u;$]2ha#k),*M-(U(_A;loU]FsTIM5o at XeK&r5Q1i3sM
+%PXl^"jR:GuJb!W\&&sN%SoBbm]@+J'-TfOHkY"1tFa3%a"$X8k#eY!-flSmrjrf_'Y(;S(WU%%CH>0)M$O-AefV'1JX#cAE!e%B4
+%8#blLVI!>#1+d?Hapt<GUEn_!l(9\k<KpX,TFg`sqB.6f*X4AGZ=5I)*6\jU'92-7e9dY-$R(<<8t8LOVNVQ9aEFE9Q*O]6)dol_
+%BdG*>s$3j;Pee8-bs9hPbWMbqN&!p4M)/)s":Gu!Q=UTq(e(bgYX^;+oeaLl<snIQg^eERTEgPu]Y]oiEtiq.DWK^K3lY>k9f_:c
+%OuX95CCQkIf2Q_ at 2,lY/cE_nFB[GMe_s$_qU7 at 7f0$d*fG<L3BP#51?8ZqgD%/@$74*]]GQ:_Lj>Hc*fR4SO="]?q+>[#tWK+t[4
+%Z't0M<^gah<YO-+eBDWE-"2*<6U@'N6<((`Ti\^eE@=J%,$HGKT+-cjZQsr&7#S-fb5H*</=M27dZMp_;O.TTYfmM at .k3&*W+pX;
+%XjZZ)<uY073E>%i$I2*9cWQrY<`n*G7i)i<35X8#Mj"*JmP_Ei6Mr.m*ns$@P?_K#<jV/4Jqf.&/m%mC#Kfn!.KHdM5oU`@m?WKQ
+%39de:15Lcs!<@o47oQO01WdK#a:[?[2=_Zg'PeH7XE-8E3&rrS+ZT$B6sV'uBEJDlP9r]b_H%<W-3C<)=TnoL4;n9FO+=)JO.oPK
+%K-i)'AZB<FXU1['<tO-YH9oB,Z6HFoeS1ck4cs[g2?P_aY*(ZrB,Yh#5##0n:WQFaTEbJCJs%?oUUaVO,W]I5l!7C!jI)I!/k at +"
+%F-s"F]@Rme*N_A^I-dP\!u.t<r)"Xrf]Wcmopgj[F9=57Z^R10m<0 at l-%Sm5/.t"JVP,<8%-T6-+;IJC,(MG>Zqs+2,:@=q%o<^I
+%mm)`8Cj,5>gJ.SD6Knbf.4#D.`2FU'$t&5QJV8%dJ98n*)9J<gXgoSkJ::eQe1[4;bM](&s%5B`<i4QsDKQgGEeF<q-IE+iY0:c$
+%iYT/&"WK9#lB6[+6]22:?m?55'`cq&/!(^QLoF^?9aSQ:'T_AX\"k9dNS'D at .u0DVJ'jHD[*XSu=1FG>]a5&?*%k`6.LQ>,J8((m
+%jc6hNnN^Jsk%d\9r!H2>6ec?%=)f_;OjZNN,RWPu'P5QgV00ujX]K7,kNH?ukREb89,/32F>]n=TYSqn=i(*!@76?I=tLEkXe&b_
+%$7rmo'&]cMNfq%[8SK37Y,)C(KH/&<7uZ=6%Kq(>&t?*BG@\1e/$tcq*)+6QX0D,*dpmMmB(T'S+;$FVj:It^U&/u^h?-eakE)-G
+%:`7'6eNq_'UkoYA4)MCLqY#&&F;BUId!;I,:V2gf1mqGY#`W(19BhR0cWg0SjWirWC+.p(9G8t&U&-4a<eFronqIYLL%M at W^T&U=
+%!k(Bb+-Qi4PrSqAWX3TpMP\)L;?/X#ZO.l^m/`*@)e0R4Y8L:bnfJ5gmK00;d'\TGFJY_-0qsHiSj`aW$a*%2f.ED;R5T(S6"S"V
+%PHrVsee/c$[;d">8\('@fB'+:F[C($iC<<2MS,8.>Lj=-O_4i[S#`'=$R0i<$?Am^T?,HtV at K,!-RZ'nq!4A1Jm,.WM_r&>LJ:Z"
+%Q],fp3-__K#!63>B$/3Yk5jXL%R9K-cnR9XaTh$JU^G)-*_B*@3\sZ"<81]<Y>rS\$2"2s;[lG9BQ at 9/qVab(C'O!&dt+b5[R19Z
+%E2C_f"s"+^&La4B'ncETVc@;g[6^B&Gf at VK"NFXZ>?i<=]],LD\s4'%^R=__/hGhVI4uHQc-h'ZQN:A:,Eb`!M&'<)X.!Rfk-B!K
+%\k/;_(J)tGI:_Q1:bSO at P09_sJr^W6N%cXEd8TBrBsUU1KEZlcZrMVV.$l-M0L'U)Wdo)`-\u8tRiuN/OLWRn^rb[HP`q\o3c=fg
+%-KDQ?`(F'fN/)1AO,V<!LQR2,9X<J^mGXi*!Q`e(P8aPn$GmH*,[$9qHPPK(c_T_(^<Id/Oq>6)0Y\7^asc6j^a6UEA)59+8*Lk1
+%&Tt5[j:rtd4'<Rh;72Rn'C[hd+MtYifa"%4EWN3kn63,d-.-_Jkt5kC73\!@-Whi-fHki*AN*28l.pIFOm/d/];&1MVpZBhH%j6L
+%s%P^60T14&!!]'cr!<3BQ+:ulcN^Gc)&t)oK'keJLcS4u%r!fG*bM'#@1?nP2B]bnSV>:c#nkOgV#@s&QQioi#\m+kYfQpaLQ_.g
+%[ZZ&[W=AK at K\_XON"qPC!8:3o#Uo'dEeqsq&[J=qR$rM>"T]<lf1:6]\rLkL"=S:4WRrp0M4Tk6ig1>G'Jo)*/b##]jP5("#Mh>?
+%2gn'Q*YK[dcX=i at IOh8]Y7scrJ;,_3b'.!_7ZUhRKp`TQP6o^TDILYOM6[[e7n;D8#R5<D5nH2J3(m.4,mMHG!6nPK3\9=8j>+TJ
+%ZaId:\L+ccM"qJ?D,KpjhoZUr8#aa.&qTUP6LG;SdF\NJ4+bOSNC+5t5#c2Vcghs[Ou`]f&*6-B0GVAYWIG"mo0AA*Zs4)IK/O(e
+%=>bmNF&j#4'!qe?V'BNPi(H[#dp[Nq:f2D;+UCB7FbOA91DIPr at 7A.gmj_j,kj2e*akL)eYG^Ta6_QD!P8Nc![>`HE3YJ=m,I+(@
+%Un at oXJe)U^*cbA-?o?tDRWjifbVJ"o/u(n>@0NJGW<7":p2"/5e3jpiU2C$cPl^f04eWo=2YVTRP3h24e7</%!"=f!d8]l)d#n\[
+%.O>*V%)@X4Nr$SbmpSfk=gBZ950SH4A^\RR^ZF=A3EBV62mh"6%<s$R`MoLad%`(%0MpRL2m8s78ai.YekAKmRMfkRe2DtSR*!9A
+%FOVVXA<BCdJA5ncH#a-;RL*B/]Rk&i>p at LNn0.ob!s.SP>Lc"KN=`3@&1HZt369&j+!tG*ZL;0.)i%Ig<n:T8Cgf9ReOYof"%m&?
+%#g;HUp$6p1fc6A%`aB7d+LM=T-Sh,sFo8YHjJ>GP(cWgI,as2H?+lR1=j]l2e<EmSoV_$'^e31ATmf^D_GQPHD%5#)Uh*9)I0uoZ
+%1K"`W$4,O9.E[3hbWnU-:0E:p'*os)%$%k at i!.s at Q'CbL^k('Z0PBGW>'?@M0BRmjAKTu)-/I)L80,3X$i8G:mU-obZ9!5^?@"mr
+%,.mOMbLp:rehc]2J76R4+^*\g&lA\]I$IgN#IEn5OCgOGT\7MPQ_SuF-EBa8n#mFV%4,OW5g\f)6,:oH%6aFdLhKiiCt]!8,\8J^
+%bhC`\[5G<cC?L/X;8W&/f]<k?O:(?&m4Y1tfi88LF'8Z!rZDA'CRujc3#%Ci:T[i_]i,IfBn6^FFITU12+lHh.Ntb:8g#j1P,i:D
+%pEqhi"3^cCL855/&A#i\Q5]ppYS<p7M&,7A!d4jbJ<9=9ckO<.f<^X/)@5K5MC;'c,r8`Y)[L3U>dJ>SAe_C>/E73&PBGD].?W'C
+%lqM9BDaYtl6sh.HSF#UAJs?iU$o at hb2]ed^&)B'b1lpi5BMhlO.*Erg=mJ<kc80U3L/CE0GpMM(K,o<(JH`')*,7LH'#JZkWRpG^
+%:@#?=P7MQj\s>Bb,Jf1""!9'IXsKnF3[G7U<6Vk0<Mn6g'3D^(75;8t!I67oh8,=G(/.mFG)r?:1RSif',\pB1[3qm/?HlBm1n!!
+%<u at V?kRg:teA=q-\QhXVM6t>eJ at mE"9V,SM^<,&@='9<ZD#s;38mFh)r$R`U$tZOm,fdKgWEMc7&N69H.>LnT2\rP&^toRT5'`)D
+%L2)<^Qt1a!+9>$Y)9E8gBeXcE#e?#sf#;CR<'`l=F/9METMr1sAN:BeO<BsN;%O/A;LZ:]]$u92ePeE.I53_m!`?g<(e=tXPu'2H
+%6sFsF at F]neat5'#bJR<a+r.^fO[/THI;e1GRC4OW.O.GKf(M]R/_F20WRD2VpkiI#3D.:ik`5mCfn/X\dLZ,I1ZiDeQQ!9*A:K.-
+%8!P0t,m=H<dUkbQ:aS3>h^Fg'0EJs-n?JrAJO?fp%:j`Wh`QF:ROp*eQ-ih_d51pd<+c;M%6;CH(D$QIf`MDC(d;&F@$"n&1tu!X
+%2b'+[4m5'Un#[f?#Z^]L18$q?"no.&.>4RbUS]oUPE^ej]$JTBOFSY(8'#$QMfs+g_a?$gO;-CT^oC$>!"LdB2b[VO8m9&j48*\T
+%oLX)R8l3kg;X2KAe`Mg"5JrtSGl_O+giiKeC7_je@*GdV(r$<cL6`1%mF]LV/O;!ZH'>F`&/and9"O+@&)'),8)Z7<LBIMTTS$]j
+%[aZf04"dK@'>;'(TocZG<OA`47R0SA18/ri$K=ZGc,++Y*hWAL[32-s9!=oUYn>AS3Os#Q+t1IZrc3&aAk0FcGbhLn!dWl]/SFku
+%(r7=M=Iu1rk2`Wjl*V,b(I0WH<(:M!o.M-78k%!'M+NpjKXN_\Km!P]"I.4kSbubqn#o\d5gW/QYGOMXEh2=d4^<c&E(-YKg>Q*A
+%UulA1#>'h`05n[SMf+&Wm98+,2XBe(E6q!LE*:R./"&k_;'nt&adgk=c5"QVGb#ZI.,)\LM0''#I\>oAb/VUY%-K4hnK]W8Ba9Q4
+%@+33RaJj94e..)SK$`4RC at QGtn_bSJeg!go2W3e0J9&isPgptC!auLW1DkW+rLq4A!qi'hW0?m>s5la6E'`!@YR^X.V#`0jrOJ6"
+%EV!@WJ\4W`l8,tJ%=h)r?]r(P=R+hgE(6/iYRC)/'<%TBJP%\8KuNYc,+EMM/f<4qCc+33jO?Gp2Gk2NC>/chW\]jdI[A=1B8o+a
+%*FP((YX<ohp18<m1.mJe]qf9A9^F$7)=3gY8pQhH*FO\, at o?kP75`F"_.tRg+jUs2VYYl+d@<[7HrHJM!%]NGC'dD'5-5]'Ri/6E
+%!fJn5SMu=eLq5f6OF0LOP\ilm8r$>@hcXA6G$!?73pUj)(nWWX%^JkZaW'46/nGpB,.p1K;Ll(,;?3DYU$:5;#s,YGg5Dj!dU\"V
+%8"I0U<CRYlHemVQc#Y=JSLsp>-]A(8K]J)n1(nXkXbCdi-]&,uOsfb=O;)23J_i)jfV<HPG#p^tFCKdoUt;*29'(utDJiSUqNW=l
+%oNcT*$-LrGj=YPlCl3UnB2V2\jF#[tk'B9282uq?"sVZebfTs*&]h%'HCX.*gS9I)oh%.oYWcHDckk at 8F<Si+aQ--<UcXSnY]a-T
+%E(\KbB4tk>B-eNNR1Y#eqIrYM,'jN:LXs=L`8,IT at gB^+@>7LE`#RRhneFjEb0h3(keJ7^Usc&-BlUbH`p[JbO*!e2V&_0rEl&8G
+%=b$_I1l4X6&$SrCo[U<FSCb(,o,JRMa.u->i(=Je.^UUDd&\YDRr\\P(i+r'_*8&,U`i&RHW6GY*emNbFe-;rV6Y[D".Iq3Q)i,0
+%!%\,GQ5Iu&.:\Y?=VBhmTh<aEa@^\8MN"m,4WoL$,Y5-"@/mTtFu3cSK=ih]V!N?ARqOpTXS6rV[(aOr;/nq5./>CY*lcp4'+4q>
+%-*Pmm!bAr0 at j[8-c<Al'4*Y\#J'hC`!,`olYTYPJq*Lq at e5L%9K[N$)l6JUE"'[;-=*N=_\ctMZ@"&h>9[-]N;P at n9G_\OPL3QQR
+%2\blt1#2)^R>7D9FJ=;iR7lqOq103T%:]V at Xf3a[_t'T-PRMj?('gCe!-er50X`9$6Pf_UY/$[WSOL#kJRf\N]_74.!3O@>S`'+J
+%]hAXC%%U"t/gV.KUU::K0(eXc9HAfGEqDtE1mI2<Qs=0#jXJ[S;-/_\8>2NFprMD$"*?9 at 70;jU*t3:4Ik at qDXKGGBXh5H1+],?]
+%&9C?]R0;nrkoU,b+"B3Bkfn1q;CO&kQ+`;O%9Z8>aMe-,N!>9>fqZWaP4_`7edDM/ECUa&%:Bk"?d_knn[3"NW;</1"(4Yu"`Ik&
+%<=4G6%+,A(B./^\QCnl&A<:EGLITUMm6spQ1IsYAjpd8>3[F9qA0i?B#JcELeJT at iKLP=iHtrOX'[@jL0qql#-n)*Z=sST(e<FK7
+%muJ6!W2aW3lb$jD:2qX1.p:F>7Vh+Cf&a9\&HsCS,.SnC#]]oQiYJoO05B/IaleNiMr^\">SdD5'sj!j(Tc^&KECFRW*Lc[.;M`a
+%`,MPG["`k")3(@l7Ono'Z=3T]^hSG=L;9^^;@6%,N)Hhs]',Hg07)eO:kYVZY)%&!*3t2.32N/Y:rKN[69Z7f'3Sen_o18gRNJ2Q
+%i(AQL#jfIaQ*%A1ARII:.bPLV6jgNs)A<29Lgc#moEn"!PV%?4ae@*J]3%T$!;o_DJP+g+!O?SH'^I=7>?\&r9!U[VE^1Ek)k$^k
+%/JX'cI<W5j=G1c8Ek$uVZ9RU>c0GQ49jD*(0FsejIemdRr"!]ernY=NI at STT5(7qOn7DUqLLL+9pE+m_QZmpZr`28Zp%rJ&r8usf
+%^3M.(GQ7!l:LE9<qY>pBZ#ALtmdoq/o:sT7nq5-TAU\k%nEKQAO7(Q_ia/*=I!G[H0CQZgH$D7W^\cjbg&In@^Dl'[*e41RqI0AQ
+%hu.!_r:TfVIf;*MSDO533.1_tn_NY_IfI6erF*EhIJ9ekUNDU02D=9?p@$>rJ+riDnK[F&_`.!RQ_3s9f6?i,C&%8rGOnW(f at Ta=
+%VYT'"cVe+f3o5;<I&MD`Vto0 at l0F-#bEqsaZEE*`O6QW@=\ntWn_G#+R:`.lhMjaLr]GZMs/9k)GF-XJraGeN))QVae%H.(s).c,
+%LHkWNI[3t4l2AZs+8,?9Gk^1Gn(s,CLQA(A^AIjNs7#p]j1EY/n(rQAUWq9"T8&K_qJ;)]mLLCgrh=W9r8lbdJ,8g!B2.+W:S6Nm
+%rVbo)No(<+cX5jZ5Q1MIGNCo5D&VSumV:cE^&RS1d$6eC>i).nqJ#^[rqsV#W9a6;s8#l&7>n!lrdOW]Fe at W"r:28^o\Ig$JM+?O
+%T=@NpF6D\0(S?/s"2*BZhAuMG]K=g$hjs,Y]#lIIq^K8JYM='pQ2?BP8q,s,ipWDOrr1_\gB["!^N+8fQ$^EPOuN<]h:&ReqgSD;
+%_q4X4q!c=J^\[MP4n3aTJc<s.q<sJ*s':$(s):4#c0mlFeo$m?s.gZ^q=*M%i')AkcSHj8*o'6rnKNT[a"Y7I_fX,jmBaG$]Y%C6
+%RcF;%]AIr'Id;FQ&b"cKbaOQQmK5\a?iLi.ku7/-:]=GTqkj,fpmr;WAGkfNqQp'pT3(dYF*u:Uh2f>)AGe0pr8urs-^,furEk$N
+%RkI#+2#jJo^XbmFdUfW<rUKN"e45#dh1'bKmJf1rprE32Nkf0&QNYXHjn3i at De'd^j)=q#2aL2mlTFU4:RCl9J,I4^*M<8!pHQo0
+%ro=",LZrgSVg\:0mCVGGrZ%R0='p^nn&NK at S)b(7$h%-2qWGAH?V;nsHqaO1gk1%T0)`I"hgt[3hs08%7Q^UM$*h8EK-Xt&\Gqrq
+%b('E7iV<3 at 5<]!aq[_+Ds5EL_s8MuKq=3'_H2-mth`T\B=Z92?mO(q3=nqH8f:UspPs7892g!#J29KH/X&17>nY>cPZXK,0\mh<!
+%r7Ka`BH1lZ1sQNA$27G5PSuB$f/_4uie:[pC[<nORacb7aH%7;r+rhK!cb2j1XaWd<lj>QG/_0T'Z]34S9=]hm"/g1E$@s53HjMu
+%4I!la8%:Z_e0u/pbZ&VW-t0.PC0)FU at s+fsHH;h8L60VJ=82C%51IXLXG<ZcYATf+C\hZ#*1 at P6K5Vf7+S(AsmFjpSCsQB^fl5Pd
+%ICJ[*h&5bo.tQRML]4*k.<kHfh<fB at h0GX]X*qVKpP8_C:`SafHe?#Wd"F9s]r%klFf0j=XZ0DFk1lR*oDX,"TAMd/+1<QBkOV:&
+%+8"hn5O7q\c+2EoQ?l&Mc;*QOl#]$.:A`N.eE^<*WB&M?C3_:(q'eCsO/M%.GW>,P]46?WoZ=4!\NX'7nlTSZZbuTX3ZJZc_u?l%
+%oS639fB=if6`I]B&)$rp5OFNCqu(uAVs*b(c+_abQ2<noVQIHlmnUKiSoq4amWY4n][?=PRY=(dSFu(Ee/pP(Hd*):;Jf3YWM6as
+%1RE7Im\EuJBJ+Lt;;EJ(A-TVGFsK/Up=u5rmtZ(i($GsIBJnj#diI!@mrE;@bu*f7Dg#;Eq4:d-\fmG,5G[_P51_0anNgs(du)=/
+%[Z$7>l5:W6=ZbZB*O=9\l*Xl%m2NTng-[!AAEC?aBm1T)bBAEPBU?P^>_BmmJj5e at BC3s=p?5h0Q&ZZrafM9?7-u2Ace@>JmIe0d
+%4^?caHIl[YW,9hB!a8?i,>G^DQ_jrMC7RkC307s^KO=Jll^i at W'<ccB-$uA4r-,p34'+Cgbe3>,S*<fANIL`511bo]pP8W!iEa"o
+%Z2Hr>hRr=>a1QJCoJVk+XC*27 at 5T&hrB]9[L6DS'Y13a28DDiFfo=:<eje[iD'OFn[L at jAKcAm_Z"5qbEPV.T-/sCib)MsOhN,rO
+%lUTu*D'hbaMs7rdA7;NHj-Wu4f`Id_O]ghA)(dBtbKYXNd@"Flpegnt_#NMcLSD#T^rU=ZYU/)5?t6^OpD_&1c8LR7/<(NO[;?h!
+%RiinULF>/PnIVg`d7MCBTOW(jPY-.iA/;HA:<AW%NYUUhmU3T#V8MDUeknqQDoZVup1/3ZFJn)b,mWh!*4Ft=<QgLt%c)0pH<\'P
+%WtX'c%'/G"@!W*rHIT!j(_5TJcar7#bbZ+]-Fc`c/OIX;XE:Vso6aV=BeH"j<qjO4'NggQZd!1q=A`UC/o=@%k&[/NY1B5<E\j&?
+%#i#0]i8ud#Z?.^O3"('qh;)LHQ[VG[]kfJCk&U._SNeFVbmCA4/,?6VO^.MAXrC0W/iarC\K3]-_a\(/20[o at F(.ha\fl'*%aMm$
+%kP,0=W/m]H7[o>`);`J]oAKXKD+;&S`SGOSjbmcaf)DH:Z8Hka^384uHgT.3<9mCCp!fW$`gIkpRmjJ>N7u[=p2qn)gds[#-21*U
+%>5DQ?>BYW5pt6^[kq,SFZCNu#g7hL?g?O'Q%"R0*YCd5bGrZeK95O0 at V^s`Xf8d9tY07/>N<BkQabS!Vi(MXW9Fc><LU3kM`C6G7
+%CW\')[-9Rj3^PT%&88`cQQ70ggQ$ZPACR,d$/$@*jAH1X-*sL=BHcAG#VdVf*4O&1*Q)-NUR6C0&HqLZ0(-BiGgqFd)KTs=.ru\m
+%HoR0KF!$J>R'UX]]Ih?eXNZe0PcSMtFo$)+:N at mMU+&e'<0 at lRUd_1-ghB@k-Eg3c1G`n1Jd-!pB0Ef-ZWlIBX_q7q_QR]alfhL"
+%YN+;:0W\XK=,p;0HH.mQ]lI>Vb1<Mr2<t/*YVKk_qf>sT[iVZR6Z;;+)P"ZLhK.2=FOTu at UE8QI1]*>QpLjMLmPXSpo6rdeQ&Ni>
+%=hccUGNSeZChp1rG1O"5R;8;VgNgLlb;RBkZVGSqAD\<&*M+ at NAS=h7RrM\m_e/8qfYu88JS(8=CYEG>Ae`b_bF*7Ef277dWSH_f
+%doP\5PNf0D[fJ>0,$_ME9>C<N7Z_e2[&2GZs([aVn9C4Xg<7]TkD_s7[S5YioB4D-J(=oh4.0lrjUhIIS&MW+dWoK6"95jmp2mal
+%h#GZkW6GU6,GZjDT5Fkoep[QXXo9?T,VDmH"3\IXhs4\Pfjpp."I#EJ;5>XFVDO(65is8=OT6^9G32ijctO^J/IGFTBA;HnmJ#2e
+%8R0B]>fibd#>QQ-V)B,FPP.#r3bjprXkX??m)n(f^GC&6d4bCJp8f4XC;2s?A)2U!['H76m+%[$?$+&!CGjsQ$%C%Ji_"'jeiSo.
+%h^B7e9/_uMXtTt&\%gWYUK`^A%aAqIpj548I[J88MdNcTiH8 at B;RZ)/6"SKQ[ZBCJ1[DK1)UD"4U\Pa>1RF3>-AB/$$Zc$Vrf]1i
+%.F=JR/BF0;dhCc3N`$@/@YEjb./X?XPokHRGV at H=KC^4V2lSep]sfrVL\<fu#/hlPS)NPCe\\\edtb?uQe&NQB00g?qs*+HUNVpr
+%>aU'a8f$2X%G:(3MJ66:9aE$/J3.HFT*0s!J=$=u<PG7/3_KKU!l-q!UY5*K$i[d-Iq8kd8V6t$iIB+OAq$cq=0m!*%<=@",.#a%
+%Qp"=CZWqjhU:'U\,f%\VN4kPu7rN)qcIa)`da$+XF-]+r%YBBGXFst13,??7%+/hJs3e91FGckt'CCR((Nl5hV"(n`*db\=Y/9P-
+%encq6X"7P.Gi$;Sbe at r=Y!l)-]JR)N0B&Z18C#T(mJ]h#jXI7tY0FCWCmm;`RpIYSkb1*Vd(:7BqaN88dV at kc0@mbE*`A'.M]QfE
+%879`9aku,aq<Ol\G2!Wm8>L1`S#.6E#iMO&]HrB#S!SEk533EsdmKO9=F&eB)pE at N4c^u!MPme?V_XdaHRJCH<5rtsc=TVoFoI?2
+%;sI+m33,QAXs599k)"N?/pE>d`NNMJ0+<&jh/E\6c@#QHcF,gjmXuZ_EnX/s09:0-NRq&fQ,-5l2MqA!@RMjdCF4aX`?:!J?5>VJ
+%lt*IAd4Gm73QPh\UYV7Q-!I)UPAL1'Ene_(?#$o>M<n9KMCTQTCq>XU%9I=HXe][7<HJjrOf.A:3d"#mVG_P.X.H&%2$oon.XgA/
+%phlXpa1[fCMZugs=7(,H1XJYVYci.XJm[[eZBGu\J*/*I,(gE_mg+AKlK_H;2*1W:[pBW;LXbeAs3;sj'(:l7m#ZY\"/`fA]YMsS
+%^NS]H7W6Z,+IcA)f.cF1oIMUBENL,W$!c%YX4SeGnT^fF\!f%ATQ"oe$1;B7dufJ,muu9`HWcq1S"iP#qCYkgENN-LmW at Ts:19-&
+%>G(BT`ap0nrUKasOMqkD>1VrhTM:s^NrIi0W7B"Qms*^ah0 at cNgj%U7hY)kEVsc1UckW0)bIB at Z;86sAE/>@5$T-9UNQ!YGmB\u*
+%f*I\2m71H%.GQo&88!a+Y-g]u0pXt,Y=^k:O%$b0-bFWlZP=F]O[uB4g"U)f()j&S;gm&soS(m38HSO##0kQDTHliqKouij*D/Z*
+%24(/JZtO"P^9H[3DSb2f%=9a0G1,*fm4;u*Re'H^lElH*DJn$,jucsCU`M)p\[Q\GcKqp`ifpRA<?!#XW at Y_dRWH@<31ot^:A3(u
+%Xe]1q()-'el.UDYRFH"hemW-peA at BQ\bD]AQAdt0,k#+iftG at 8Hh44.c*lceeWul19I2Hng:O.qc.>/6UE;'r9?MFM`)8-i at QBMs
+%`^N36`5b-1G, at tLhpH8t6PAYI/NV_-pdVqg at kW]*1mK)Ffh"4d9kZ1/m?lDSS1f_9TA#;U:rSjKigberp6+??;V[T!edS,/XR>(q
+%2K:(%3.iC-]qi9,KQiUMedO-Emj7M;UqZ<\m1t%/Z'_*,/;\\[ls6icf at dcD4YOqH1iKiK`/C"j4.-n,n8XX</\WLM/N*N2N::bZ
+%(h)`MR$:A;cqCh7&2V`ehj.m1S0eMe[s#m-,p()f!uJ7^H-F/$r*,>4gO!ifjP,:4eG*i`\ac324nLIeO,m*a\_tDugLN")_Mjrm
+%VXFI(F2CS<7[IZC_fHRLdn>,&E;s4f%G'D!>J.[tFoPkZp\-i"ZA;KcbB*$5B3:bBSq.W9X11s<eC79rd]@+eMq_n.P5/HL6+m5_
+%mII#4cQr,XUj]Y0n,0b8",?^I)6G3o(p]'c?ef0/$e%9_bF%E0]9$fmA`9qS52R3Pm1Pl(r5(S5P]q!nmLm>`(NRK'_%Eq\.9T6t
+%^"GLQG=,VK.3\B;VO2:Z)5hhl]o[GA1/CPlcY*$sNX7_[K?LUt3=&Df-e[%3=nU*S:Zn=Oo$8T9d6Gt&T#3]Y]`2hTm8)!,a_G"N
+%DOn=sGtWLYgrIn!dtD at R:D08:SjN2/fW$Ju&FMcB9Vur*TlOkH?Rh8EKMM)K/-j2'Kh7"QN]qn,`]b8S?.66fBrQ!MM5C&.p2V[t
+%ase42dV1_E9B?!bCS$R#nk!oiV<U7Dn*#rbW)2Z^<-gCXra."G9^=kn\eJqT@[+7i\mO/UdJ`r1pQqcUo4XQZ:%p<05O*]9PF]s9
+%%GH<6s48%%'#,\/;(X[kCPUGC!TrM3/Ga>C)EX at J]XA&KbMLa_MQ04IW",*qa+3W,("M"raB/($>!^]+T3nMh;o)AYqB)"D'<Sh#
+%HUk&b[(g+_ at C]gU at C:5iY at 4PEAuT4:@AVNLh/S^MIF`\ubUbQb2ET+-`YpA,)eY-^[[=PB=9[Aa_%O@%6U"["gJ^!IZbEmS;RF<t
+%4=kZCk5;TdZ0H]`40c^^[b+Jb(%Zi7s,0SelQVL_?cS;sqISjQ9>si:`mVFG)cljsXKaI&8KH<l(2C+rRT3WmYQ--p+'r/bCJ4''
+%C2.OnV3Ou7(jjoUYtIR$);So3S)L+bAq.baWgIK+2,CsOaV7FWWdQ at E:q6'2:pj)H[RhK=n#L)+<68--*R$0[2,R"H<9C*kn?k-V
+%3bkXTC<Z-i<DljF-/H4l[8MAC.?C`ClK%kf=#FQa=B/*r5/#eIqC/J<db/Y@<'cl>I4`uI9m-#]6KY=mE\FT=Up@#oeQ%T/=1)(9
+%AX,Duh_%dd1h3n1aP#^7f!R]Bb`PZ@]&I at .o@'UW`ga!#FemF*)Qc%XA>PW;j1>5&<<6X%o\HIL736NNTO$i5es/Md>+k%oYG1-Q
+%oj933qGgM*nCa?ZAck at H^uYS`%`$-bA&L>pMi/n<YLWKP#-)UnAP)JU=deqmF]lFFi,3,WO4 at h+ZmM&@2^S!41Wee"m&amRrp2`F
+%Q"=O1^NA.$Is$o-r)L,sSauLs]muC!^FabY)eaNn$Q)epdPcJ#j]1TLdTs0"g<RCDX-6?Z_$dbK0AZ*%0\icg!5IB$r-B*]UGoUB
+%gHI9[a#<n[+*mVWWO3];=6ojsHdfNsa6pJeml^7:]mja.=EQWgeT3kbqPh*i]VrBRcBJ3,Pr\0#pU7 at bhmDf1FADa\oAn%YpjPG7
+%D9%=<mKrd5IU2,s[;PQj*n2OQ]rsu)l?hFbSW+S<rTPC/g,A;99j3rAD+$h+.-7Rp^Ebp[dhk#9hQ-B3L)AK-JrhZhVad8j=u7)a
+%Kd(Dm?G:DtM$^HsF)8lqBq+:FRVuL)hUS7.^92]bOM:[PHSb6B$n[=8DqC_tE(!XmDE[:na6IPj.FX?;o%q_.DdH"%>tYO7gSB?e
+%!]Wp60+.W;$CC$IM(e,igEN2jan:l:8!-H(qZ<aaM"cch,iG:JEF5bfVpHm.8W)<:8mg#YpW]g/YqN+?QMS^oMaj%7nQVc(CN_^<
+%?U_:OQ;KYph3VTSc*&mkk,f.9op`CD&1Ykufc:K=%.2mVPkH8*Q5%7RlP>1V(@Qj2GFK9&4N,V*[RFV=;V9e3*?Nf9?&KM2Y'\C$
+%0(k2_UO'b\C2mO!;a5.]5=<c+#%Nbpkm="E.3P6Dh55^o9*.8A#4dTn.6F./MM]Wrh*bN\e!]rnFKmCOg]J?*3k[(9pLK.6"=L:e
+%DUS`s:"*+3p:?><$A"(WW.G5cR&o$FLXH77-AEe<02`9/V/;ps\iK+`He?d%[;P?R?$[]/]M$^H];3u^9nF-R]&df2C"9r*KH/DO
+%_q&.nD`#9.'Z<%8OKC&+ehoae,&"_j"8N:^"X52BF)>[&9I9I-g]ELu_IKB!ZF=sAjf1Ks<cZ0Zj?p$39'_V+C?2`Cf`>fs9$bX]
+%GjZl[:_KU)UH at t(UF?>q6"<nr$ZnjHU*$YTMj6Foml1I%<B]p0,e??K:ER75.)J at 4+0fYa42ri;<Lq0.l&kiCe[GM:[`;f6,b2ce
+%(Qj'6Z.W`)dTk$L%]`(H4f7m#i?"2pI%j-k?9^o*O8I2Sh&ZI=k\c.Cd1fCoT`SghRP82H9"8?1Ya51Aa0(QE<*eHE7?45`kn0n"
+%Iu()S]rB`*iql0m):E<V.uP9X(5^dM`t$L+(Fe5<:>A_ph"BT[ke'<f"RB3;&T,ldj<DG(@jVo==gYl('KB8]Ygje]aRn:/Le?9W
+%^8W:\F=-7A76nF(9+ZuS1]1c2oJSp<3Upa?O3#f'PQX7u+lEoK:8ETPs3;l^@bPa8ftLI7p/J`Y`hbA1r$?LcgH+ at hQ1:lon[A/k
+%S4'JGghNfdh:\Fb>WHrcZe2iu:_IR*&0fdn0l/Z9]2aeMEPGPWQW!s"A\f%n\$&dbs85kMGA9*E;KmEPe860iEuMgTAD_U<[lK?\
+%3pU*Pk&#P/1(H6Qaf0rroVHm*FBce2;pW"5gFp)[2d)aCAgEe<9bm;0n#U<WT=/rqq\pa3joF^"DS(JN1?!],EtMp9BuTqom$sn]
+%4kM^4SZ:iajZ\@CU"D5ep40X'-+L*UGAa^-PXF4f\B5ug*MVF7rgiqH3K&G]-Z*/OD1-_nV772ber25D7Jnk^cm6,&G&K7-`T&Fs
+%rN\Al87^jLL:rN9`a=bQ05^Zrd"80^J)NKEoim>]]C9]-]KF3^IEXWkn][G(l()5[O1kQTA"LI7chkai&+;_h55c.gch(F)<Kfg9
+%^!D)lBpX[MQ^W9K0O:O/K>EnCG5'1B=%0<=92m*4JHYZ)PQs[C;]]LJ1?$_P.$l?pDsW\lWkp3B4ITBaBOkhCV$bMF)GghKe;764
+%5og)>i)E!="ATDN-"%'Fia7IWBB$[L7[UU:,5C\.?)aTa0_dCn=!$OP;(M/-"`_i?Z=6"UV_';i>F_NJ.Ge9q^)aoG[?$nh>'cRU
+%P&JLqU02kZ]`1R`"]tWQf;::X[?KM5Nn#QG7Zs@!)VI]lLHEka7N4i67t5`)<[tNlo/H2slP$`j?.n@^-#SudM#=N]bm_V%gNM^;
+%ZPK8=fk\J!c]mqt,t\Ai0uY.]NZThk[%.fP#+mFbr+2=[?;TYXm+41RCgU"nqjlb#nqnC<i<E6T:EJE-U@!eb'jFqCEW$)(L2,f%
+%K=#_D\_`\"M\O/pWS[lU,Mg",9K<6.j*p`$On:f-=4PYMSPe,Rf]rXb[d>U6&*FRk8%\IQoY1fYLj6[1H)s'4G'>04Br!5tFh/@m
+%F&re#]XdHF3KTr'\i2KFH2g&$L;heKL^-CLO<V!ce8eW[:[iMPn`q%(erl%NX"E2.\W)dN(D.Oo7qD!YhasT`"SC\(#=Wj"MCYO[
+%>,esDeCn%TXn8SgTD6'o`-,1dH8Gff&.)fn>*GLM?.CYrIIM!o.4J4qD`u!.;bi%%GXaDJ[</So[C:tba])+Tj4,P#+0CjoEJeBF
+%4&@eq;ECbHf$k/Ok%opP1,.q;.i?co;_I$>Vhucrc:$^QZJ.O67&W$K`a><>rKk%RTD(JG/%OYT[.<*@O5?K00R.GBge37TUmAH(
+%obj$2+tKOJ,/RTm)<K+f'!k/2I.Cpa&aAOpMBsj^Zm@;QgTB'HN^Gc;C!1M&C'II<_.c+DL=k&k>K5)h(7WI0\r`b^b5@)A]lom\
+%9;=dA@[oU3P"pC<BhJu=ktTU!DBgQnct34bIQ_bk?q(=;ndrG0QbNG\Sc'=E.(p<fHc=UBlmYN7FGNFY#$HRB3_2"Ra,jbUbXT$)
+%'1oEEB:6h5&h5]=58PRI&XZ7fKuZjs&KX:@SU>?JCRN8\16KYIhM9%8J/Ih\l%3^X_(_[BA;[),+B+ at M+W/f+r*p"d+[M23+lA+B
+%E0;HeNO at 8\<b<m/%t>JRl<hCCs"tWZJ+bAsAb$blH4=[Rdg^Z54Ed8?XHJ":fbo9ZHfOpmnbh7R[kh?H4KQ6d^&,\8MUe;CW]PO[
+%&a>km]-?Y>:A`n#WTB*kDmHIf='$I/'1`/MQXeq2!b=52hS2rGnp88knPc&6G4.ij[_$9Q+Itpa<[Rf,Q'E%FY7MMujA\Z>q0G4l
+%?V&4G1QH\!p30P)=+'`)h]+SIV^if52T5"XAM*Wur;-+%f8dpfpu4/YYmOjnP[E='e%8uRpru""B02<GB at YT3J9Y7&q*\<;MgN1H
+%*F at WEV/Q*eXflaEae$1<HA1"4Q)a?.T"o:=gr89s9g at 4r<Ou15pl[[@Q\I.9J at BNiAtAM`dUOr0YmqVHOsA&-?V5)2ONcpqJj1M:
+%Sraf1MZaH+%>Jk0 at QZ4q!h<8`C"g^g7:No/?GnVV(qquJR[j^#(A?_#cDBmXAUS](;jTArelgErYAIdOe?5Up]p at OZ$$a:)]*cWn
+%DAMGdfT5Isp<tNUs*O0;ST\'/TrWg)II0aTXlk2[hj8J`qo[/G<,Yg<>C,R9I-p-=Kr4L6^UPcDrUS,];R>hj7K)XHd,06MoS<2$
+%nDWnUJ,]4Sr^o'3p*F"O:4(uM`#<p@*r1OJE_l!chs$Y_%"G=rrLSFWa2[mD:]*kCl0ii#J*T\@A%\IerL8"RmiHu"icrc2n5b;q
+%Nai-$HY[i$QH._Q=KIS&rf@;XNSd2R?tY10]4-C=P!Yu[d2m9CaY<kpp2;"bA`@M>B:V$Z`*"K]QgDOrG!`+.l]hq8ZBZT`@C&K^
+%qlX'l9R2T1Z[5&Sl=1'9le-.?fLbBOed at I]Q$M<BZZWCBHuJE"e(j;;LTMMU(hY#9=ha036p*\d%'.)S[eSF`hlO<YTTMH"mXE^t
+%hrBo1'Bjf-\BQMDiCgoQjeB4-SeosBa(jKJdq. at b6Z7_&)ZR-rakmDK^?k/=/3J1ORJp at XnP@;\rFiY*3Tn5j%u,T6%0+_tKigDK
+%M]5Nh4\j!bk-uH*hsPJV3h4dBCC(i6KO2fIRJ&W]*ClL]`.]3_AHqJgZ%C(83Q8/!beORDaGUoig2KX;c@,?t4N&DO3OZ/eW>H#p
+%!mG$spOFI-+D)kFZT.6JK`nN;UJ")S1'Q:eC\duVOcPq?:/SQYR/B59jXqIs$_fmF0qeDEhR@<u(KtT)g\+iPkI7PIoH%@K0u(r@
+%Hk'0?Qc'$<'3C8t\3U7D0a-M\%bBQrV]-nSQU_eY`"[<LT:oHeOdH3#]Fj8gQ\[%L"J;50<K#7XD(K*78Qa"G68[Zblj7#`Fpm.I
+%P=g</[%,`Q`kT2l`^ZpY3UUbYqXZ?<3b'4PjgX/*rn:Qkop!P1Y6&T+pO6f973_KN_qiYM+"hi$]=pmJgf#3eT\c8?OESUtDZ;(]
+%MSK+8/(B,s:D=H[dH/*_)RDEYG4_NPI5Dq.]C*+f at rSmnLapHZ(u4IAJZ3Z"p>T0Z2Ap^(ND[\tA:kiW7^op3Yfn?loJ*ZDmNQjs
+%81M-VJq6r7pl<#6.G*u?3R0'+9:i at L0$mVq!*p<MGQ=os,MIR;i3f(;Q at 6QPml/TnSeo>=OVi8X!a;us<\9[a.5sf3iR^%XTW3g-
+%XZ_g+PcXVD5CNP?rBIc]PAU"FN!Gr]nJsatN#7s8\bS/Y28+8l(b`E;/f61RR4BXp'J,29&46UWjledPS:T\0k8Y$1aVuRo,o at p\
+%d;eaTJ%hs2i_Q+-!`bY1o^'6lP'^eLB7BLO4aoC"O2^HFYE5\fFk+kqbS;cd1tHB!Ul3PdH/t)j,UmAUoAH[NRT7D__D)[OP<:Ne
+%[nY#0R/1KoKZ,tHBN<43SG6cQ`()n-\=:[,GLe)<c+tnl/I[Mfa#SBORe8$(>63Z%JTtEb*Z'4kb+lAB@#lAsOYUgB/.461K#ta"
+%Z*saf4b>j=4S!e*qcJ*MFiUrA"J#,f?[Y4 at 5:;9P$^UWP#Y8=lDs[Sg4&pAq_nsjD\F^a:nC=DFcl8?&e1mGCUt7;70Rbl??]E?r
+%dCJWsNXPn/s535"K9oQ2R3f-X-Hq3qdkL8/SueeGm"A[*0l/&K?KGm:MNl0.1DucHPMm[*(i#t]H&*Rh/m30ffN`1KIIXGqEO(%P
+%mG at VLas9a%*<,l=\@3io4/,AlK5j_#S)(=*$hp$d_f"u at +m#<HhFRI`RV^7/Q,&aa=fmT(qmmT*]nc-c/QBT)6(P7!>kfW>h8cqV
+%Bef+/2.m^U][bI*Yfjj6(MCA at Ai$;MQ\3sFVeSMcWWV.4_(RIS\kCh$$+]Ek1?pol$Q!=/HOK#t&m:@[(p2Wj\>kIc*g=s/_qhCV
+%]5a0j?Ofge>DuOB-XE6//r.O20(Q!3?K"O`94jcN00,q8]M$<%d]L!OZc6O#_D&BJ?28*\fKNId?rnfR7,$RD?RIF/an1a.-fs%;
+%DfepidS3/n5X.be'R4a`X0,6o0<''>WLNDA/o8*,PO?;_]<LLF%UEQf4)NF3$Qn&b?=-gV^6)gt>&FA:^@h8fjSG$CDkko+P3PJ,
+%Vou\3a$fbIVU>:.4E%[a`NG0BJ[F[M$fe/+MkpP*HQ.5Z2Utb[J("d_KZa.njA#GP[r3R#WgD9ED;Y&m,,`#$gZY at b06Hc'n5jgF
+%A<$Pn0-dMaWE*#5.a%1flKn=R^F^1)Wk\-(/Q2J&;R,!6qp+c3^\deGph?<@J*10bbc.8Ho;YMS!iu(\Zb6,cX$CqS;CK'0#`Rjk
+%2JDNm?%*i%pli1*F+=3J2cYCa#6&b;^q-*]<3(daNI\'PKMN*9n/a44kl)RphpN4,Ju/a>p])##6H(TcnL*2rV7AH",=&5_Ht!(T
+%D8#2a-X7lFGl27X+E%Dh7XS=@JE1KQ1=[<'5j,KC4$O^#ShlOXM1T at ia]tfs2R#!-$VqKR$5_K!i%]4?$uWQ`ItS3D+f"?9PB"d*
+%;AtM at I53j%3_B_ at 2mBJ/e/!rc at OX^n'"[$m3<lup*IAT%gQL!qnqQbZg-\e[;PIl::u7S'CLbe\OpcF#@RPt?AS]@!c?p$37F#jW
+%RuJIp,L)-a@/<eQa:u'IWKU$"_Z^8E3LKgCF^h8<q^K35)pHuCd(8@'3G`$LC_8&H24Y]MrY<^h$K-Efi(`(/1.s>Hf7X3B1q7bD
+%c-T."h.&.A2ddIo`G(n\fqIEt(nLR$2,<o9kjEI8Xan0d<TW\_jP1MEI^]?j5-CQ\Xe3KY(':`<!_ltr7e&o:L5,3u1V\uIo8u]k
+%U!j:?o)W=3nWGYXc_kgS[%Z#P_+dRG#01fn2k:^o<?$c>R1moa('&5H%rhti&e(==lE$(t:DpBcd5BXu]&D#>F=1%sEefrG?1!WE
+%dZO;#i7q4'*6b*o<D-RDmS at eNDQ8PQi-THk(9X4(U,X<(:905XBJ(;=7gG5lc+:7Ch)QfRc%UF5-<-d7J&8kq;<,qg.So\LrKqRP
+%NUoi!erLYldY^hfG<]itl-)>"hYf\SK[1,%;5Lano/brh?*:^.#!ij,`fBK.'(>!?H`W.;m.&qFOBiX4pG>DaRiH\,(P_XJQT\"4
+%b7a0(K0=0e#N#-h\)&D.l at E#baYf^"q.A[?]gnKtE(!2KFO(/>o\&E at TDD:U=\BB:_+OtnE&TH'kKl&Pcm2$lFka\C at Q$Lh3M4Lb
+%\caF%7#l1b8:7N<#pAfV$As3kIP3a03c%Uh<p(k^dc4C^6GbSX0fahHKN?C,-KiOCUukkG*:=D[q$IAokLT+V1-(`rptF?6=(E8,
+%#0f0M"m2kkZRlR43[8l?U2mC+&`#C[^&al)1aMcN8.-A?\J<CVb*KD3Kk<$q6hacC_WP)+mMLU8O7Br&&6mcXR$stYlGC`+FL=$V
+%Bi1NEPPUIqMUeQo`+4Fp8>nUQ,f.b6g+K\hg_-Mr^'8.AS$k7&Tf$uH_N.X7HBa-Dr=4P8R`YNQ6X$1(QV-XoX]=c4_qPNs9ag]D
+%_t.TP.BULFFu%"uK2ZnbC),/hKes;Q>UuEQOVGocSTs7s_jBYAZo2?dT+&Bi+aP6cXaOB8n,rc'(Sgd4rM8V*?^"8<o`n[RV#FaF
+%T.GDD5K*?K\32"`T<7#TlNf/r-.N3+_Y@("['R,(+-JbFCGtB`0H5,K/)`ANoGVjuNB4aBSR/'dY>M4LW7,P3kr%bu)Kg at c3k\"R
+%?DC9!;5`$EdqdIt2<sfPFo!DZ:0-CX)X<ju^[m8(Di:487*STDi308`4MU3!X6Rm&Fu7";DUT7!9A`Vog1ojrpMfjbe"bf$@t*kM
+%go%p^L?nDI?P^nI4DT3-%m=k$V`o%hA'b$>X833gj7W/inbRb8Qp6n1*"Pg.Wj]YKmP-*]5%G/q0Q1k/:Af]*P%6.;<mp'KX`s=]
+%>@`TlTIs>1CPVoMNN4T7&=9&%'08cq.+8D7%FcU3 at YW6@iBrr)d'AKobMHb.38C-Vr8S!cY:"6J"VmMR1a%PY'S^[;C*/[F^&jC"
+%k=71LZ<rSs*;_,'iQatrMfcquH:/4Ik*NShTjP[lbA+1H2h"bTOP=/FC;7K"jJ?4fRK>SL.5KCchV]h@@@Z&KXgKY4Ac:(cpCc1_
+%6JbA^HO5(TE/tNWCCc*%H4p>jUJ&Tf+MIutQZ;NolS=K?gi.Q7nJ!ph+1gIV.t5H(J8RqY"L+D=ZJo15/qi2H[C"fg;bU=Fl^<Le
+%Q=/L2\-OJVAmMeLcH/XaYANNj+foVBP8RZ3_I8_i)LFZkm7OS63aM3Yk0'bX8Io$Lc#:96c/$c2Yp\rJ6P8(cZK`$L%Q<]'P2!T7
+%h#q8&M`Gf"n"X*@Gh5M?gJ-8fQj.u"[mAmg&J$gkIMLTkY]a$3a,j*R`6lTP`P?F7dqHqWDoTWACPO<fdW%lKatE\S[(9[3kKPO6
+%TDqri`$#.#>rj:_]b3oGK_<D>*>:li1Nb?]gT3`Mq5-s1K!qsVq]p-mmZUg@[qVI6g*r<\9)1`TI&tI4^=Y6,TVS**B\.B&*B^Kp
+%h1,`^$X^"XNBsY$Y,VJ.>"&_G0T'E%G=DWWirDm,YIq$jl\`BYfUmT2enp:b&K]1aG]XFI6)ETOD#V#b*<4<.HH5I8mjbZalGl*7
+%hW[5-nf=!`3F\F6]X$>^gu$[cZ22ppK!g%X93oX]^;QZ/jqW*R]OKVPkfn\7b+(S1Q%#Imdi<:s(m^bL:?qYXH"d<+V&j5g!n3U*
+%e at Z2bK<FE4bhsVTbjX,.aJ+5g7,tS1`atW?b/fN8%Eh*q._!FYeppGbKp?YVF0QR:rQ<q)FYef4/$Q"Fff5Y$grY8]IZ'/r?tK$^
+%-Qkk$/3RO]*J-O4of$j$)cqCfe6Q_=QT8>ZFZ#4lQlhLHq at 0t&SSF`pFM(Oc?0>lokaIEX>Qt-7mlEB>:j9Y]!+n/d%nQcjc%BR_
+%Eha=r4p^?P*k!6-V0^/es%j,4NVjfo'h;Klhjnu<\)>"%rjPM:jXtr6D;fu.5ir^'>b5MPSm;K&Lqlmmo]lRK99:qlj78FiRfIaL
+%_k$0UHqlaV$8VlL6eIU<kAC<[MJuFqG0,H]GHlV]m%G6<UNX9[#QaJr"a)r!0EktuPd-7j"i?<T_8_%3C2l."FO]:I at N[7H0s7-f
+%hX89XV at M=NWggr/^NIC+(Mr2ZXduV;jc'\$4)WX/>THj&32a]#b&?QaHn`Tms4_M<1!8Qu+tj^g;;[QU+`&CfEI%g-UJK<tbpjTW
+%*uJK(JMA.NHDn[5npYMXE7-e;D'dJ*MrW`a%S8fY+!EA--Qt4)&JAT?R%M)F7uI9]&E at k2Sb&'PRO:cBY0nVlgOo<I*t2WgI<gW<
+%jt52<QAjP<=)bO]I%Z$*"R7.U^3-R/!et`!'jpUTb#\uK8UL0Ho>_"1,QOId$0Xs23aKNrq>bWsfg,JaYF^63JM*6rKNVF>@@;rd
+%c88,YlhM>Ne!*.8WKgYeV3ZG,I8&_28IFA'pOn8F(rHEq&8J,/lD^V/C8mk0K8,X'?MKO*<P!iZ,6;R/VTdIQ<LK=hi*;&MDP+uU
+%IfGlrW%<\d;RT:?5ZSjab,s:hZ8_]\Y"O-!GL=V1W%)dnSuR*BNTdQjk9,aMViH@`jdEOe6aqnDY8rBmR=3:Jq/"QXd!j)02)1E0
+%0!i<"@\8n9le!cNEl_%!OcNrf&^l\20mq&3'eoq.Z;3NM11%S[@G4583h!$3\%ZFQ89l[_6WL"`KS;?b6g=NGb+jt:(&b#Xj-ZL4
+%-5`ZnGLi7a6-L)>c$8Ylf`K^KYj%-mX5Jjfc=i]3+SSIi,NM%Sr5Ts4:=^/D<fY^jgh&oO1TA'WmBW:\?2>23[Ckh2/fBVPn"_hK
+%9,As5\u.L4C$Cg,l\:F;PoJPkrFb>SIfIBWBUT;<Nngap'V(stFHUJ/BhtR")GSibX),WNSA?\)&B>I[K9umJjUbI)na/MEn#LcJ
+%LHJM[Z at BI9rn6_1&D5Wi2Nf)U*H7K4>ORpXl0u^+I:Bb6gKg!/&RVRPAQ,lredXimB37%QH=%YD4!2"R$L]TK)eZ]WSE76g4I0L4
+%"0:q4\&Pnf!9/6d"Qm77&#Xo:KtkpLD=_`$>hn<AhTa%XJa4d1\&lX,?,AGuQ8W6kFpol0?_"rT(-([JFZt:TZ#NFC at N#'4>)`[Z
+%F'T.h:d;97CDP,iG0UthdIp6#Ys.nj#97Wrp,?It7it5;8*bqI3m/\r&`N4#!cMb]825 at MrhK2Dc&:50L</-G+q<.[OZIk=#3+A$
+%]64"&j!T+sht>`s+?&)Yft)Sj%2pbh_j0I.*M()BHUbD`G>a4:%"GD2iq2$769OH)4Q6(&4dEN at Y<1Zb#JBJTf,]rR+5TtLVr@!Z
+%LU3=tFr.\$p:Ii(Sn<1K+\!91G;!C\]5ru($@s-?]R*lUDLq\P<\Q(?Z[j,u8*?:$cBcJ#T`]b(ZR%2<h(1P8-Tu7UMqns%BGu6+
+%AaD)8)T`mF.)>p/31^K(m<sNR[UjHDLL3dZaUt.(85I2gagh4AH]h_H3VAb&Dg_hA:mq'/(Fn9,a1GQ<nobsehM%U]N%1J-l\]7/
+%JlA,q),%lfq7.)OI^eA4UZ8f"oR#Kap<"ifrL>-:@kaedbU`*-Hd\[mL^gYhO28r&JZ84'Wq6=B4>tER,:Cs^l?ut%19`Pp=VaKA
+%l&=uW,u#8?A"TRBC[@B]8%IoVglD<C at 9jU41gXLLqL'Tkn'^UT`ABre$*<$=RY.bGo4khegN6_f<F&W^=j=I>/kWRR@'XgA]C':E
+%lI?6,X0kN3rcTWbc$[c](rslll\;m6`F8,a_tXl4NW,F-`RV$H2o>E+,"kMbK;<B8)4OikB<MtC=(cEO]@3c<`fnD7So"?d>;:?q
+%==%T)/A7I:[h)I7i&2a_lL]u`JRd+1m#"%pC*7Wr/NnSZFT<M3N+O1-c?;C7doiA:kQjpRLa/e;G)88GcOF1Mrmu#:F$!]5lhZ#S
+%7boI8$!eO%LO&. at GcDSH[-H+2r.!JC$.)>9Z7abpdZ>40ngVQo(Z&_]DJsd5qP8%=.Df3HgR6Z`7>u8R?Lu0=[omguVJB\s]8L4@
+%]4C9g33:,>4a^/pG+?<)mL^u+YM/lfn[cH<lhe9-s2rr;Q!2I=^LHVo`46VPq?66WJ+;/JDjtp8m/>3g\s+sm[$=9PLVFg_7pufD
+%X1p2ignZ%f,Ob>ulfrh4lcOV at qDP`=a\:lCgMHj=*Xgj%[SB'a#I!WLQ,;i$rXZ^@:JJ0>pN]4"ng;VQ/JQ8T8_?pfRPp;CTT*2G
+%LeB%i:#ms@,JRq:GH$5AGddsMFW5V[8A8sf?T42;QaA!U4XNi<6oY=ghM5F'K_?1c+P'c:>0GPnroRWVi-FgV at 4/tD=9q$I?+Ht;
+%>ZV`u,Ak&ZK%eX(Rs_Gdmr\3TD&Olu8;09Prm1!+<%KYYX*am#-*T8]oN(gpIJD:C5i.Ono)lMAo&l0&$\.T^GHn1=2QaDW3&;D2
+%Pe?CUV:+a$C>E@,Rmb'@(g'Sc]0->9F6\c9kBn;%=U/@.8atiM$LG,&Jj%f[6?JcOJn$Le]AZ>@iDKu.N4=07*bVGY9sOBBk^!R/
+%T*)faFeZq*6DEW-73e(dWuCYNYY[8^q*%_Y4dlTq[oc(F8dO!Q2<dH6k%[LMD_Zpfdb9'HV/KtO)H6$`g`sD#4oLheIQO\F)JK7_
+%8R+*70Jl@']Qq#RZA;)11i76f&s;.l5Cmp]_RX>CZh%)[*OqYE6UWYb8lsqfjkW%Hi78#-,VhFXaUJ3]8Tb]YI(@khHWYq9#B\l.
+%m]97?9#[PZ4]l^\;GQTt-;I2<4TTlRXfQFKC:ME_)fAa2bM(YL4(Ip>>KJ!HQC4S?qq at -.;3Y+27)2kbVH9lNBk<C0nQ60t?`J3)
+%7-(JUV"d]NW[E(l*(]-"XB`@iM9M\qZJl<%RBq(U)d(q at Qn?O593.]AGh$ZV/E%,Pe$JdZa'Ja*PS0&UH3odCasFR0F-+&1\Mn]$
+%d3k]9C3W:B4s at ZNcp5VS2Ci-#HNgsIU/jb)YR"RD*N(b/f*Xl&JJIc*Su$6T"_^0FK`\[/93'"V,?J2noHe.QpqsY$SHWGKmk+fG
+%0pE*C>sR7eo80cLs(>t$Y:"7nQ!Is\P)e2o@#6[0\*g=S='QSUm;ko9et1=H#jlQ/?,,&;nn`+AVF\g$R;NCqShDt4CZgC[f%H8S
+%rc^tn<eX!t=F](Og918SStjH`YNuCu'P(G"8K^5l)_]b4?#rq#IKS<Uq;=B7P?ZH/*Hgt1c#Jc0a!n8XS-?3#+VBVlYsiOAM*3\%
+%C6>T6P%QA0>C/c!Y#ALoHXp]I6q_&6H;1AFc2P3Z%O?^m:f^V;j`RLCqmXMj=%%Vcr0hiFXf(l0Afe99f9UQ3&)G)iC2`FpB!#C>
+%b."=WeFih/pU\]CICm5'h7^-)DlNWCdRD\rS%hC]-Qi(gDtBSHTgh/;CHTk>mj'MjGbUtcrf14_?#TV(h>-qJo:<;e0"=[6P$]m1
+%I_1k^]&M30m:i!^$kDsQ]3OFHdLUQ9J\5+f(T$p)<p8bj*02fuOVLM2E[Yl(/oWn`:7d!F91p2l(,W2;)+1BY-2MP<4mM4R4f#"&
+%;KQDLL)b]qT4No31;d[dBYk\@kF#jNG<0Ec$HXST-@<k?j+a$![C>HTZFB.,KLGNV:V?+Pf0/Z8-bcu9JmFeH_l$"AOPVlcV2^UO
+%6Zh#bR?kP6'mEj2>'G/@14h&`koS,RYaq)[ehUgAL8:](6jl7#aZc[L3BpY>d`6*c9eD4*,dBBCX(PW$87!8`H$XMg4<tSF"r-9W
+%"!:@t"8;=)pGq.pYL&m>!X-1!_Zo9a%>T/\/_9Nn(hqIXnq6__2HF2B2C;e9M#T67La/<a5dC$fg,BNC_)d_d"m"quU/q#[=t&</
+%41+9&+B>TnL3/J2"B at m4lJC"N*/Q&VmYTOYn[^)SpV`!``(f14#E/!Q?LIjG691N;Q@;d6Z2J4;/,mEVme):kk!drcqpFgj^,*Fn
+%hgb\*lhhhGpE,.[+,K6a^/$K=?3<6l!M.hmcE!`6lFan"M:Xo\\gMssJBffbDf+C at q;F:!,e`d'^]*lqDa(r9q"=U+hu1UqR+b@#
+%:Yn53ocNO5V>Js'$t$cpT0LK*gAQLcJ"@a3Xl&r+AX.`A=;5[hpIF'85If17hf-'`$31!cmdC+5rr)l\eUMnH*rk!Ts89X<a2rf!
+%msiU.QV78k^U9"!=2'Z\:VO5Dq60,Yg:&0kZG6*)7 at +s9*&2F;s*i!ao=&T8peUbR.LVTP&%?I-I4H])Yq4a4<RsCgMtS=fYL+tq
+%DsKT2Y>iW5Wc1,u283ie>pc`r_cthA>gE=[^DB)V?En:#G:bae^\B,1o.jbJX^+'&kBP0/GO/ZFmte^rDqM4Th!i#??d4T/&`0qn
+%pA0O2O6),>Cjj4E8hTQA2\7&V]W#)jMbSK*^?9("/9;Ukb$K)ZRO.^@>`a;=p>&Mahh<qr\#g]8R@*>Qdep^8G at TNb<=\J$epl?l
+%iR at -.H[g:lEf]P@?M9,%)cf#VG.d.1Rgs?HDqQ[tr at 9Gkl:Eq at YaQ`IM=@\0#1rU^C_-:+g%q;,mC0_egq[roiE_qtl=N4ahfc:5
+%]'X>f'-#f9r-#a?ANfCgh9u,,[M;t/J$N at lRs>CI at sp:O3RB'6`-u at P+lUo:(&K5gC\dAjD(duh^(&7+D`chKbtWt?NoFQ^->QJ?
+%53ZYp<\n8F&`0qNi;0%3*TDN2>Mo$m]TTnk;?;r<S]uUh97nkM+e(8'5&FGRn?1joj)+hPS!2I*d`,UshH.+?iMTI9?U"t6S'eUb
+%GGaobne"iR<4s&#<j,cd-he-Wa4-nj0E*bOs2r5DS.bdc00+&`DE28meEL)a:Zf9.>iScX'e%c7IW2d'[K,ZXIp.9Ao!ule/9c>e
+%A)0=sPs6mkDj@@0U>*e<Ug\)f"6;X(f:#Z=^O2FKhLAAP]PY9dfR=c(I!KpV$_b,S2&pc4B4_<EZ+8'SSGXDgZ9#'PlDO:/l><$V
+%&c/s?\=ggqY05#XST^!O=1;i?90&PIV=rm&U>C8r^?sW0W]a[&h\,J?f8.u4HsbrQZX/"3l-o-2p!tHVQd320GFF8`Y2UCF9dd9k
+%=riF.Fck35h_oDZ8u at o<T`2 at uD4;8Dm9C1&a4l&=I9PJ%%gfGIDmR#h*q]XFJmnV[NgUji5>gCI8ir^rFX,s1DnbU\JZ9"MAZmsH
+%r#. at 6R\n;I^9'8<=e&gm>5pLIe++@,;W!gd=2jX9>n3`A>$7<*^T`.'pYkimJhhU!nTsa&oJ>Ncrk>`VX8<=_Y9#:0kT at R<FVa<6
+%pA8q9_i%rhFce;[lJ(ckKaP#;`RN`+nsaO3:H([hd;PJJH!BuBIImDPho-Dff$n'tq7<&6e%Hc.$jWFj5*^?+:QJ>"d2t,L7/gJ?
+%o6kpU_e]5gLNW<'4FEX1?*OZg7&I'N.KbH;+C9%>NKsBDhWfnYd8K4n8EtNCikOM at OU[aPH._PN](g,gfAX+c:8FiblH],S#npY;
+%F/Vm"MdQD^m(HW,VE8f>G&LdgLVB"(m+0?9R9[j,!UO4UJCmJA(Q;NR'*5F/``O-Fs5&.'l7'FPIXCd1\"#]%)"R=!c&XM\//IPV
+%O2!=QiBTQ-8O,0-r:j3NgLu7*V25P2$>nYga5:OHEhH7$$u3jQ^&NMX@##Vbk;':tlJq?V<H4\fVi9eH'#<Pro;*_Z3Quju at is%3
+%0._lDit6IWA0LXo3DLHUBZbY:q"Gc"@i4G&.T<gePVJ5dIj5Ocb]PFC,VXZg@=GMHq8h[\hfJ?[YP\u`71sJ#SrNm]p\*e*C@?n&
+%!iKiL1:B/6$_6YTpCo=!@Gc&I?J^DoN7ck_cdY/!mX1VA1hF2mFHss>C5n:hj-[L'+"[OEU8N,=")m/smn&Rs4Gpp'2q1$pG_qV;
+%i'kB[?)G86m7.WpT2V79:R&7l_rL2D$)&-T[_U>SdJ>5^En2bY5E4P[QZ.->o4?9us*)6VjZe1h]8s^]#eL"cUd+^OV_C><-AS-;
+%gQ-V_.WW at fHD5Foq",C&ALIES+o.AOEV^3pr%HrT56L;j$G<M'$G?<7\$F)ie2<YR.,cdFZkNNs,V\&MEb8q9]3:/fR#;;"5[UQP
+%34_8Jk)&cQ#1GQ3M3eF:n%g`he at V9cr&W'22qtI:H-2=kibKNBQO3,QI]&M%kC<$6^]2KlrUT]4qffgR`UEfje,K^KT0E=*n[m]W
+%_YtQ?rV:s<mGEEi+7Sb!l-l:'a'\i.huD^)k9L`9bMW8R^\k8jo\\q`5QC/t`kVKEkPt)@J+pFerUod&J,,#;s2FehkPt7JIdu%)
+%q'B([s+^PLc[dpJa"hR*_CJ_gnCIc)ZM=gNK4b3298n)d8ef?YPN2>8&U`5@,/AK?NukI6bOZ&]L:Tr1%34atN\F4Q7=:\N1`.t'
+%5Q18QOoBiO)SEo!,_,IRLlepK4RO at g]%*jOTfii2k!3M,J=ub<n[t>^._h;(@;)7F4h'`2"3GYo?h1gY\f1SZ7'mMD=+e:EaV/m]
+%X-)Q/[!]P*KO"l?&V%M5pJ:h4\/J_"-0C[sHWH!/QUiXJ'QXaTV.TFO<@X?oc^anYVMX(oF`Ls$Nn[)+A[YpK5N`j_AR'tnHQORo
+%2X!M:8r31'-k+,8&oT1fb1i/>Rj!!uG?#C.23L4"H22`gT?#I"m=Dcrqd9"BR,V5=14;HA=0uUK.NTgV&br1ecMJJ=WP!GAOS%.g
+%fL+pncODXZ$eKq4b*4JbIa)g2/%uI(U*i\O5=olFdDh%LS5e?7-s)?dQ#Y#AX2=UB+G$'Rr9L=\V^6lL^AY833hud'16a+!h;1k_
+%p2V5\]T>.'I^p$JpA'.\#eXDuqq(i_hhZrMiu"pXK"qbf43hglK"V_Z_K/KN3g)bP\HFDZ\_N$-M<ag-Ii3Ii4/ic#$:;p;'r"Iq
+%PsI.HJFh%LQ.NgJf`lUq7'"=H)/-7tN;%8jbIAGI7?)hcZLI**&;I0MDoaGlc%"7]/cu:0U/-&'rUDn.UKeOjbK,2#(PL at qb6=TE
+%ksEYu?Kg5t+m05"HdcOOJX8Cc?iSRiED+[?M at b$+Hm8$,7;-\P$mb=/pl>4B'tJhl?c!QRq%i;rjWAsKlehX2'>FHQIOR"/2oqnR
+%jrc;TEXP\@q=,+Z`J=Du\E&#9B-;,.r_HXcs5=TNW)ZI7cY!tgZqfs;V^akrUT]"U79>l\%M&r"8bhIenB_+_N^_tI<d^4`<+#b4
+%F6W6;'-]I/$f_akpfCoYs2Q3<!;/SVNKE;#5Pqp^rq$0ga.:]ZqTHYLg\K1QrSk<$r5ES=rMRF/N?6X\$p.F[/1:Xo,f5HU at GrWo
+%g:X$9chB0L-N,p?ChB$_:1(WKptPPfI"'u^S%6K'1+)-rKVcuS;1*j'Gt;aNF-"C)f:s^I;$;Ke!J^kPd/lW#N!WiF-6p8GP>!^&
+%5XarY6XdYim.=QarUg[ZW<<2E/pj^5^*'$dUp0b1hq>.\f$?JhZ#PbF:g?O at 8'<RF%62*YeWogn,Wm"(g8E8u2."kJE:b'6J/&Z'
+%lHrCK_Or]mf6M&-O2lN=!Gk80X6`Q>DDd(d&Ds0)NZ6Se]f\ccr/QeuQ\aBj])0#4fip0J?R>&`StQ!@h15&6RK2F3'.=54E-l8J
+%rPOK?]0qP`-OLdf&A[XW0`k_0MR0["js)@[/Ns"t,.YrH0K;Jh)#X0. at fbQV?sE81JG9iIKADYYI(R"H0U*#_GJDG-?i at 2=`m4G@
+%HrsU1r.AO+S+4(bF`f=gl#Lp*PO)\<CNmCJJ"5-es7iMLrSljUs$e%Ds0m%*JM>Vo:JCP`a at Vdm=3OgnJ's at lMkKuNjl'Rc:!3+H
+%Z:+j2IA,7ZIWHG))e'AP,f1b3L]RK>X_/$9eGljJW7uReV>4InT0.TJM. at 2u^khj'"#]O0/@<S"nZ)W--dFe6Ij,Ch=dkjrWCBo*
+%0)P[>\+,5m[`.,G7s1mSB95oUP&^s*s*=8)3HVa$6[)$_L[G5Cs/_p+qEO`$?&6At]g?puk\cI6>sSE(]DJMYh*8mHr[E$b.q3]s
+%iO7BEI9RT$M[/QDZ+GLCh>L:=m[ms4^N8c0f;*V7rGV`(GQ7/>s'MDaci1C\rhIZ;BQJ9C65Q"bs7madpc&6BK/tNc+s at -@3(:?`
+%aJo=-O)8Y/T2AhW'C%9&iE\^4PneG!:@LZf%\eMJpR*Al[m0f.%u2b$J!ZI,.`LPu+j79mBn?`I?YXu0Wf.)U`5.Dm>^h2=!CPW>
+%`ah^S5urD3fT__#YU-22?a1a^S>S1[3+4\$OubmWZDfhu0Sl=lKBr8=jS*M3Y,QFB*dhq!08AhK at f]4,S)9X&Npqf[(fXQt&_&.O
+%)']2HR=1Lu_AX?VBdb[$8SA*icS=/W#m5<U'7:q3;;`'="5nQb7^^&e`b*!pK:2dm&i at BX/>o-[bHMs]+:`B28V%'#=AcT::a7]Y
+%-J-1"A[Q2.-Y";^"be84cZ/jrb=Rb,5*!\2D1W'a"It"]N2<c*%pNj;nSkCuHpZiIM6?CUkDEM,=Upe^/HGC\G`T:?%,On,>hZB1
+%J7h@$SdJJJ:;+1lr)**9U@`47>.frb0\L-h-hrp)WeZ'<;&m"b?m*T5-Rj'^>td,5,93,RHBN3oXgEKP)#*3H`\603Dj!DFPuk7c
+%;H*Fm8X[!7PhgmNn,/KQG!84q->8s,.iSuE4r=<Z[bl at XdHG64R-"f+[M&[Ah:lWQBc[c9gLIjd5<!RHJ+!,]r[4eNo:MKcrkCNQ
+%48uEk8GA,;U(K[mXPdCm%m$Dfpq^9U>laN?:3^#CY`:D!)4cg-<-0>dp`*'td%*50T,-5#b4)9eP3`<H$`iG8XAQ`[+,j*+###8Q
+%Z,gbuT[S+SY=;.l7S+GjU++g?ZN:^/V%Udq<Gc at Qqne7]godnW6tg>.fNPXK*'@m_dmSL*_^Tii,d6jO&H4e5EY(+T'^_UHQ$*XI
+%.q6USgPsiCFqc4sHr/2$=5+\hlFLm%p6H(K36%/E/3Id+E(d@;BR>(<FuO#kl'KGr3PWU3D^aOc4*I--ca%`lm;!aT-ZP<J*PPkc
+%_B0S,,4$[0frGLk]t4)f^1.LSp at 2NJG7G<N:UHsR(t>4`en>*m5Lst]MCU0_5u>Hak8uuYV?u_2.4T997!`Xf\;(Y1JTp*6%>GF(
+%K;8%&'*GKkgr\a%>W4cYnZ(&(4q=.%U[LiAk-,()"m`@dD./Vs,+-c%a!C*fFCLD;f))f+Zr,SD/pH&q[Ip02VSE%;D#Sueip.]Y
+%'@k#/4*CshIN'%KSp%WBel6+j:5d!0kA&?=\dIuLM^Jqnm['oI>0#b\'kNL%'[CkOl4]O#K20/3F;?b^,L^3u$'VI#*.C8TN)fT<
+%$WoW[!"0BIf>o7qbr(dW3+UdZj!s;:?(Bq(,_*C#(O)Fdo=Vg!0n/\Pqroc"Z/\2)=OreOD&M;bC#4pNN28-)lj2t^9lB3>8*F/&
+%^H.MEffdXVEVu.n@`se at N-ib0^Zm+/&btVO06b6nrd8MZ\N8WPdsH/HNn*iD3]]'?h(Etfc`98ESM&%UlLjh;-i[4eMHJk=CVi[1
+%oF"A(V[7lK+.F_HF9hNGJ2n-N_2ZrBiedB%A$<phH[$OFmeEs/22##am6 at oq5Q1JQIFCi8@rWFhBWfH?\`O80]B.%:^A[![:Y*:"
+%ZmD at sWP,%L/J2pCI>?oc-aGnIa#S'us7E=.?]a)BZ[%eL6'ZA\gZV4#J)HuYpE(bB'oU8si=[d[/M2,,F=V4#p\W,Oc?F]3bKh[b
+%*XO'Bi`GMDB-4iFr3V6/bH7CXK"0\:cBk7QhcT;1Bm.X at 4SO7"]s-?5p%Pl(bpCoeoiiRrM?K+R)_b(!V)`Lns(B1r_p?HlJP(NB
+%=m[!(&GRBAERs6t>_pO5p2aIEIieGFM at U?tXUMHeS)D4l9`-`a*J"-GbM;KXOSZ+MEp2n[X+@>-#\]+*-n_<K?B97ST^dCr-:r%8
+%#IBG.hN2+L1?e!m`PqA.QB=X;<D at 3,LaZiZ"a;aqDD03Ld4\9ASL?QpH@@t#l0(oa%L2[7V1HtuXa^U7Pck[]cVs^A&Y`odI-pRX
+%Pq"BtSM":CGOg,Wcaq$i:=Ch8^&9n`!ChW[GQ.-T4`eAHo&Fq_m,N(R_Rms8a([57rlD"T@",nZCU0'qB'X_6*d?[nQ`&UUf&Ikg
+%Dqf<K4i?(Geh%\eE:!Hf,kVVY7;_T.E\$F;o;P!DRfMX;f1ica]@it!iqQ_q/"8UNosh@!E]2N6d/<0"VL00kC+<RX%g]e:$-cr`
+%fRbbbWpAkTU%%m,6$47q2\imD>o*V^g.!%nXQ;bU'P-h.!$AS9Mn#<3f\B4nWXRu&ciqsF_u"R1lit#To-H,*qj6_$3IuMGk!/^1
+%&_JPoa]ViM=8L+"pNUs6bJg.?Vjs*f\*,Im-_BFfbUUThkV!G]7Eot%/?h]H(E]S=TZ^\Wj'908f.*EHjafQLFa(K(IXZ=c*VqHp
+%,X;o\$2$nL>lMVgBY/E4AMY!KiER&[mODjT"Q"CTBl$!2]U%2t5OWOL>n9%\]\3ak)r/1fV;6]?cM^$P:Vo,;?$B'6XnVaYX*s/s
+%hmr3b:>7;hS34GG?guNa]Q#?lm_kCmpU%N*l`\o,(.PS:<$+&%*L05FPT>5&KkH:_ji/ON$K]:cj-l;Ql^>E/&K`s**.CK*\&O.T
+%_#Vu'LNg:e!^*6G at 3d*?VlCc]IXfsl-C849a-dr/V;:\99tn/"2Ei0u_2tohn#N59*F#LbWh%GE\eXS=R30C*PK.Ot3s7]cH,%Q>
+%G1f.\Xlp1qW%p9-O>6ZpLJ&d9`c<sB:*Q5^C=B)>%!VU4D><3Cf"0nX0DY:$\Sn*kkF8`%92>,g-2-/sfNk/RN%QjNN'u$;4BAm_
+%lW<d at -a(I0-Y4ScUhpOe2-q]3XEfXR)YE6r+J]q(U:jL@;@PR#VPKo at FJ1n<&Da+Vb"WU.c_A@%g'(SL5i._\iFP`OQfdoU'Xpt\
+%k0%$4(20I^2c at c?g\j!dXkMKD&+itlJdUFU(Ie,$48EjE9,)*XA"4A\Fc(l&[!ccNVI0q\MV_;G]cjX+"%&pA'$W?A,534a;h3=[
+%?u-ccp(LkJGA>rsol`F#[f44l:Ef<NYdTU/gI/l+K71"g1JGBF2o=s?3U50Onh(%3Mhjb9!h88RO$n'304t;J3h!)'iD0,]!S?.C
+%.RN!qjA6<<Y%0`8<:QM__.h^Yfd2aIE1u5)o[`q6=*P]LFqON]7sm$$0nARlH:0k)IKk*0ppcEoATu\r<];r at 9HmS9H7*<E419'j
+%-ltI`7h)%J[7B-rg"V/4S`&P4n$,'C\@QP4iAO$m75X$gno5Hj\I6Wnd_I;fD\qj9N"(0]^kKM3KX<,;*I[qPL[A%"?DH\qZ[JNR
+%4_NNYDu3-j?I\kS^/4fp0l1"6$[/jf9j8sQ]fIh8g$V<nYOCLB02fa^Z/._23uQsX5Q'%BK2j]+l3E0Ys.=f<2qPS:T,3Rg#ftnY
+%ieMq)IQ+;JROTgV[=[[_i^4jdr=0>dH-e57p`%TV[0G_;*<4KkmrKf)2<arr9EkjkGVJ"]9sofY/YC7TRp"U!g3mD!5Pl&/&''o+
+%="Tk*qfi).0>;i0LQDK,n,E;&(jrG at K.gmHJXR]En at qO#r at mPNc_GMH;%crPrDhJm`hMG!!iK:f53]j>\f$=aQris?'+"F!:/c)'
+%$n5fAC`86c(`<ro#BM8UQemOtRLb&6,SVYj,,&&(2/bZ[co=B5-*7p+lX_tQ]D.c%LJD4i%u5PUHu2HgCMO,[03$IHq@]6V9h0(*
+%Pe9ICcdj)e"BVCKpJ[VuBXXBGEaP`568^l"[5<9j;-0oJSS>1M<\CooDa"9/I!"jk`<Op.D2,$qUeeTK]RBfC2C$V&:qFS>::_pu
+%(`g+)8WqHl7G`q'8)dhb5@/$QQ2[S\"W=`jr9hT`?\)Va'<HgJ6AD&%"W"246 at WtcYo$10ZiX/Fgs6t0Wkep>"3t&Z)1<a$huE+W
+%2W*V<Pg`\u#X<&[DK5:nfP5`ooc$$"f:/"&/]Ij4jP\D+Y3#m50K*CHS0jU6R*dVY*c3=\aa/FaLGiQ4RfTYIWMXmrN)6OW(7q4]
+%Gr&V\@-NZB*&qSY"\5FOBVaY6dTf4$#_uB\_"gc1>-2:^g7n>R+5fd!9oDCspIZ#ta9$DD]$7rTTPm"(%`USGZPGUtRej2e44#C9
+%LP1>"DeCSWUsr<9(E,1bEgr6Ul[@(Lh0Hu(ijs1U4HLY<B.&Y:`Xi^$\d62^"f88a-._E9FIQf3cCII%RVceYe>G!dCqt<[7[VVI
+%`+Ko8_l(@=F#r_mPY,j"T8BlZ;`;#=gNPkm<NK_b&T>UCK82Hn;_gIXot`,^Kg9&72So4VR.(s;cYM)FRC.412La at 3i-Xo(C"e7O
+%FlPom<^K8EO%%(]E2nco7KAeh&'SQA"Mjja(u_iNis[(Ml\R<R.dX+a#c*MKKsgI(]Zh$g)k@"g.?+'kb!&+78fC'"#ej95dGbLa
+%`!lSm7c`Yb;At`j%pN-'.3%hJ:NiNH%cjOS6_hknq]]:Z/Jk2hAIraa857O#P>)[rEU2R=B9Xe!<ua;S[L,]b2M"A=8RR-uC++Bo
+%DlK=?E&kW$?4J'9_BbE0<YJt8Uh86ul,;(G"HJmD3.We]3]O.^(O(c5B;!n+O>^1]Qb\B-kA-SYZA at Tb9)Yi_PC.;gM_l_](!>L(
+%*O:/!"b<Q`;e6"ML+O&I</a-B:ie7+8>!,R%-\WUZJIQ,/g6f3%L#IbZ[V:<<Wun"A at t)!2+*@Y_>SBu at O0UlH8JWj,eK!Y4J='n
+%!RI1=X+>&$A*j;b?Rm]IE.ik&nQ9=f:l3B2TlY#Z_*`/MZn=rlIJp`i7QjpC%+Z]3-?Q>di&(49&d*"3f(oS?+G2KG!i]n2\=/Rr
+%ZW=@OnaG*5"dMfP'eriu`b.nb\JU6VSV4"3EHL%#k.=unL_(@Pip6TrR2]e`,aC4?)JX at 0-uR/AS9bg0ULRL=:4M&-*JXLh!l"OA
+%MZnFd&0nRf5`ZV([P8UB"K)_Y2"=Mo;,ljX2X4cS3NhiIpAOHo5EqP/m$2$RCPVN73O=6[_YqjsIK"ZB.YjA.Y=j)i?0&]d#J^#!
+%HIfkg]qsY**tC6)JQYPEKVI)bI%'<2fL)Y.o_e!JM5"SrBVoj=eXu,8_J at IFmGu48<&A7#@dAZ!MrW=J&D43r%TKN%3A&'#5 at 7U!
+%-;ZnJbnc'4'OJXf9*49rTgc&>2V=:ges5qS7^1Noqrj%E4QijRNi"d'mHe_Co5P%)[rKt:(EV9i0aL--JpNu?eXVNuO$MAF4+fe;
+%o:RF-X,9"k_E^Y#$AplpL\CYpO\i"Drf-_26gkVE5Fpi1Ij\1[&Z\7b*[W[;(c_Ru='sFRi^Q<Fqufj')FI4o#+S:BQ(C5W45bm0
+%,,=ABd!@CU_5uq%VLk%iIB"-&:cMrFP<S"6>VF\7`ito<hl+O%T-6.cq,#nYU,!L&<B"u/[@1SdEjW9b)oIMP^@hP+2`WOl!_-cG
+%2]Sfu)2\gmUbTu2D7jXS,uB!?au5%0D's_&*u1 at _MLBBB5(tr--N\@''GZWA->?nJHHD-`-nF'B+F,Qfjq9!MP"MFXd(CPN;^-"n
+%I-;aYl!8)OG=\XP#i1$eAXH_l?QWN79$eLSMCYs'UoC)!"!319P7[]lR(lG<iSY-Bo.c6+'t%T<VkAtE$kd`aHNm]^]iFebBKRgg
+%_>tD5d=L\(K=5.QlKZ%pK+6'n=&e:W=e(aSB^uJTZnICOP_UgMH-n,kb_Ep'S at ntF#N+J+K53\"iO at 2C\F`k$"[55UM=6;'[VH"u
+%T#-rg'M)LGCE(L]-8?Al$pI3#)^W9En=:M9fKu/qZ%]$KG"%(n>E!i*Mk'obiftRaq&=qtLdj2.46XKS_d\XNE"qL`.71$u*8.lq
+%7%pf^a(:s;G&df.?]a#>i19k)PGJP!#b=AT9Pj";(B\/;i7fR at YBTa=peg(.>4G=<KBAJ3Mul):EV9ZUF2cMgWcIHRI`Io,o]N+d
+%o%iDtq\DC%k*$\U.Bt6^25BI^g)csM.do5rj*KTuU'kuQ7n\k*P3Qr[DPi^I.\U?$\Gc1Vru?R/iR"&I]fN"iDR*X\4 at aJ7M'nO(
+%2,Ue;pS\-DoD1j?1OkZM*Y"L-4RAL7kGJI<pd%>EWc3 at t529*g089KXD/?Tr1752:ekuC3bdT(Zl,QBH2oShGB.AU-0DW"Yg%RCb
+%+J12`V2&mK>7\X/mM<m"#?d%?E;\3YY`,eqcnh=6 at 4gs:\Us:!]\/![0\1BZLeKGVNu:#63"ZuV>A#n6iL[Tag#+IAi*a+rKSIRo
+%`EIZClPfa?f\,8Y_DFHTnRT,Kab0BVRZO028fc^2o=[_5jHJ(DRZO[o,e&A;25_mb[c>I79W]0D0'I_Jk?-&?"IatL^1fVd+#ME&
+%HV4Sj8m`2:m(]IrP<T9VK!fT3D`jTB$u`iVfk5N`FQcrAn+lT$1hiMVns6/R![_1_okoQ&-\rf\OiD):OfT:8lGEbU_C*/ThcbeK
+%88/Hi>;KCFW[LQk`b)RU_1$:JEV3JZMe`u*3o>MD6&B`96[)%cl0g$-9?W#_VL3c5g7#q[jY)2WVD+OZ_&3=)3(fod,i[u\Wdsoc
+%Agj8^:2m"&'>cLH2O!<dqT,^6o',>JciVqFf\-r2AQ"dJWk$TR]=U#*%4j(`W]$`hn#l*?6HmRUm-]>l$*"@<@e+Ng0#<DZ<o*-M
+%s$>_6pOg&G85MK)*V*(8G9mB<H1<bu<A]-4oNQ`s'@dd8;<>34-[a&#:65@\[VCQgNZ8>"&+Qs[`*HAQ)r#ee*RPq!!\m&&q>`=K
+%jgV6sIKI]c7Hu96>)pd0bt;k#q_u:.:(T5m@^&L/bq/PJcm$?m3.-IF8<ZPD+`O*A2=9:T]O>Kp[N/7bc!\%6(0*6"Kt3AgQa..8
+%9R8-?]-qk>^d,.:C5m<a9q]-^VAHaV at 0E2>(=?qL1*2GL7su=$\r%?TP]+<t*oIga`W&]qICO at PfrW5<Sg=2q:'/q-R&LPiElS=/
+%*rrqX12s6f"*P88$)t=KjNhpK90E.l?^i:%mocIPCZ#I&'\eDh&/]:R]Ca1Bo3nH4n<u&J]Z^/"MtBmWZX;Z'>`i;S8a41bo^H>o
+%*W`%@d'?i]n6"&dp1aKn at R`H4O<fJ;it!l%AR:P3As7<TLo"MWG388,p2PqrW2WY`_!B4^Up)r7kG?r=[C/e3F5&rQrW3K_Ogr!'
+%-I1"6d5:E=gC2:45>TX&B\T*7C0)?[qhXNGRPlu6_X'!XbNC\Xl/ZO`(lQK_Qa["fBI6SFI>2pNS>_)p#.e-'*HM\MjFKK4[P<CR
+%]VAX8qf-:6cL*SISO#:u)khV_WQ\$p[RHM)$tdr4<5&B<[P!:L);LW:bDdL?&ja]61$dcqf'm((,puE+F5+:JoJ5`OdnSCU]&R`[
+%3okk.Ou5bVd*_9Q!rtUhgi3WhJZs,o9"a3R)57B)A0*(Jd06bUp-esq=3/MiI0S0COKtd,V.D4<!Q:&!M]EidjAdu_Zo3u_e*$GD
+%^&k$;S at S0<#FrfgXS1.fSdto<:qi0)\n$1,%Rt$^=OsDZ^FAc/EaFRimt;d)T+&Fj<K2DRaf5b/]M;F%B<1ua98KN$!KZjoob>.X
+%j2&]+9SX*Y+\W[<^5M)n)CT4V[]n%GXOim4=Io01A8f49-R$cOFq`FVmAtE5:LJ4.4,8Nqb4s!l>_5C5<tZ-kdkZ`N,.O7]o=Jdk
+%Kc+jcU(oitYC(WU$KJrl,L+hL96l"Abs0*4Bo:2>&B5O?"8,,>3b.]/#L-W]=Jsnho]&UicCdpF,U/iN4[8_r!l"7NM2Q`UK0A-H
+%pi)PW1#o!>]b=.=L4DM6E. at is1;&.]9>7DpZau`8r9ep;;Bj7Z&'n39N3rpr at R68X%uY5Hg8IJl;]7R&Zb2"MWQ!aA<jFcf(l>q#
+%p0]25:.<X?ha>!D*egM[YQ./%2eZG9JFh=:r)32&jHIq>lELEPm5$A/X;ZsSkn.[1:N/("N:c?E1S&oG`UA7N%3@,O&W?:m#CE9>
+%RWZC3/i!I[,$EHRe-<SZ`IeOGE4^a&%644+HR()4s.0f(ECgmN4*@!f&/E;S<N,?*"IfGb4>NJHQK!%W]j67dHIlgp?,NJ\28_s9
+%1,LhM#/IMar(VANOI/ZtL<eF=^mDuLhYG:%cr&V)p6q'YJiZajmFF0]3-jN-%0k_t3Ya7Vi!NnM*nYB"l6`#FFp#t(kftIn$'=WJ
+%ZF9CUnkg)V/OTTSBI[hqHNc[8ha"63cS4,u=A!<dG\rH%TgM`F6q8;r$**kZL2*>DJ6 at -pKmMn^FB>lkMDdbd?mP\6%S^(Qg at i$s
+%DhY8>XEgIljmPmBjV3o.\:"DI_aJj=1FO5;q.q,8/_-PMY&]r46E;8_EUok0g+NK(DLTk`lOg!,8q0\oX"\Pe,ckO4=FmgCHn?[-
+%duW#%_)6>\6joI:JM3;.=^16ajEtX2E^+:/3ePWQ)Sh>p0tYWbfU'HVoFEI#`C'66]A!B$3,3CZ:7I'@_8?o)GRe-.mVKn#[,k!j
+%-^@!AAi<"uC"^X#^(W]ONm..CUYT3%Wh^=@pQQRjBf!!\/bu)OAIf-DRV"G\Rj$^q(t0;+=>tWsfpia\m*lnUPr6M5::R?G?+6,O
+%hUdK3/!T%qjM1oHCMcLBhFP>eBGBS,'9_-L0]gqQTZP;K1t##?VNgMJRPnfRX_2_\$3f)ab#gIp.9&/8!62enH[lRXabEP:-ugmR
+%of4f3aP`iLa?3G2F.sF;ER"q<i,H*'ZFEB.[%Zo&P-WBs#&t$nP at oUGPh7tH]B%NCac1]B2qJ_oL-7'm&4 at 1kAa8r`,6*f^*<'3n
+%A[<#WjIK\5cCFOuE[jT"e%j%L`!8%PfR34F83Aj64`h6EHs27:_M#DJlZ.l)':O4p]H#*=co?kd$DeK6M+:a5<0gA8&uB%[K4mc2
+%2Sg#*bfM'p%F-6Z11,8XV!_B*!&f.FGfC;[cEXN"3JD4=FhX4f=3u`d*'6aX]8L^[/Nd0=f8%8gOd-f9,"GpPg*!SHH2c at OXj"^h
+%RFYhYZV(JJ214ju51o9._=XTu0R7Q2s3>'T!F4L[F(oSarQ[.(O%g[UC;RfIl[Rej]W2ID2\!N'<-lioA5rR)Sl"@W%AnGkSop,#
+%DFt9tKD1R6q"?]Tj;Y5aHfIY%)kH[Ca,uWa2,DIY_<Z]rbP/`CjZAqaHGkG9.!0cn_g72q?I8cTGCr9h>$r5`5UBJ0(lrCG2g/,C
+%D*2R1T%BZOQ8u#9KC9<D"KaTS=e7mZn?JLKRu+oSd`VtD8YT<kH'EB9XVF7fOr`m$!`_6'HA&jH])iBE:(7KcKQfaam'YACOA7^"
+%"1DaR;I.2aC;01_qdQ;pZHjMVXCDT9Okr\7AC[VV4No+PfAqp<AjdT<q-!CBHr;":F?h=.LVWdj(k'bhR<;6blW-LQqMpg,TiGb<
+%2GQIhA0PXb#:qdB(ag'59%:T5MSnF7!m6aq%COPe2ug4OIdLEB3<UWhQ]^/'[N4Ha/Xe^V\/mnIhoroBe[!snEs)oplR,>j:nF(T
+%4O<LD*OjLg^i%giq6PjL!'Fg6L6tsm"'dr0$g!DNMC*/_?E1g.fViE#b`cjo`%q$pl&ppbNQQLJGtfEArlYGV8[E'*AMkn2mjC/T
+%"L at 0U8i=Rd>*G5I]pS;XgC@%$ZFGcg%>dY>s$d9?+*0I\JqRZN#"oReEB1<)Adrj`R$.qDg/YFbF._EaJkZgdrMpI<,0&R.8/dce
+%mU>d=:C2kt6RIJ]N]T+_)Ys8/<_HWZ#g_2(.AF2.[bK?)X3=n"-`%p<2EClM?lq5&'ceg>Vb*Y!3%"ng(Pa;?Gceb=fOe`k]V7$A
+%5*<9TMi4ru;kILTDQ5ic`@:&75mbI<0WC\+i*kcHaPS"3NBNgi=F0t0=9P0[gR;NuJXr/<XJ^(O`QTB;"n.p?Da1Gn_8m8!CTgf"
+%c!_c(nt]-2[;\GH,.FEVU4Kq90]c4sT1!N5E-NZ3Q4ZjSBIr6<Y8N?croI/C<mFk;18Ha_-]P=8hoCpE)5HJV. at dJj_le8G:*GbZ
+%A$d,6\K35Qk"HS!n[I$9SH(ZJd_BXR0ULX0mB)Ld?tT75BN%l':qm2I8jR[T/;BGc_Ug7Hn>@Q`9:WqGq'JueI at T)bED24\E4uDf
+%fXsOB3kTS#aR0BG^,bfpM8;a_=?Vcj.[F)DBW)e,(0;'QCYLSIi5ZRA#]TDiT[KSEmB5ph.prbC at +b=tocB6R6qL340^3154IJeZ
+%;`k:%Y0`u:P!rGa>D[)8^inO[DeUp+0&dOUif1GsL%Z=O.0X/@:;ooS'0)A(./K6*0[[tN5'kJe`V+#a&g/FA<k0.h-aSpe60WgB
+%b]p3a'45r^(>Zl+L"F2'&9uaNoKXF[MJkm"Ku[J]edo0GkldiS-Kks.H'OI5T<B,)7db^a/]1++p7`4l^'/KGg)P3.iR14TJD,#W
+%?8UpYeZ3T0/T_<4&!j#&W+3D<4nkV1j8g][a66)aR`bfY(VRa'[ubh\U?6ROn'gMrL#,oXO_)]%KGBk1F+-jnX@,dVYV3_3Ab4,f
+%:91%.TemY+;"qsGiE0gll=ke2Z7<PQf at l2.](40B`<+6G78.kJ!:rSdb7GJ_a0mU%P*Rh5ZF8FS=!:`*]7gp*o^mn>bd7D/&-f5#
+%K*b9k5H9oJ#!%#?*hL^nND#1%6C&p9R3ZG1>KsYmCE;APpeo$Y4ejoEFi46q7S/"28mG[3"Cp7EBG%*3qrj64.$sdE=f6#q.'gGt
+%9Y/X7:_om01j1g/bG(4:A"%B1Ts at d#%]1J-(2l`\N'6ko+,G05WD+Z#6Z"^Sg`J(ffu*B>0"'d"q_4)F!#[ZFK*uqq\S$SgQhQ,k
+%(Hl*<(<V'Y9 at hatJV]e at 8UD>#rP!u)^.n&1ZpXGJ-u8ntfu1:FJM7B,N5`.<7opM^""Easn#j\f#3n%?&^c:,H7"ig13@&ag*[%F
+%ea[o\/.WQng!i`p=_J/Q!8Y1=8_lQ2/R:qXTG8jmVRkVmJpGm/?/q7mT7r"M-eZTuYBD+[KB1C$NV6+n*E";cVh0J7C-a.N[jufl
+%>'.PNDVO_@&R?ac^%L6G#U2KI`rb#s9T at GK.sCu4$:@J`.k%6dmg at mtQUS[>O4,#Y%:6l)d+47OH,3$lW2lTKbgGVmR&Ha`gGE)E
+%\9-QOCQ%JB/jLINVaN!(<F0Q+^eu,b46K6n>P.,/C`0U,>V/\-gQXRpkYs)H(YX5RHKN/5Us9oW4ei()F;bNN`=fn>/F!Z0OpBX-
+%e)^>@ItfQ2f!r.faOMO(+[f8WT/TVnFgZ2#0;Stk>(7>>hbhsdW2QM6]%p0SI:(H6FTT$ro#!&0+h:<_YkL3=IaXt[G4MNnPGPIn
+%7`@DG3pWelOpJ]PiOdiOgF4te0(/u;PK9MPh7K(r/5NZDJ8XNFhT+%5[*bQW)houP7BI.H?njRQ'@,gsbUR/e4]E>Z[r&>k;=%h2
+%WsDjH<qB2HEc6GlEp"'T/O2tD"-D2W7>:@m0&^c]nh<?;A\1ZRRGqXb6Z*Poo3$OD/#kLC0alf@?.C:0I,g:98tksrXHZaG;`ZcO
+%RS!)X^.&VQ,HIR4ZZj:R&M&1(I[&"4/'Q`,rk$Z).u#iUiXdf7;roiQnG3XJAO$6jC$:eV;7.u3U@'<*<2:LS%Ab.T9mjH*.[a\"
+%;LXmn)bCE^!D&8tf%Xal9Bus(kUhf,L#"o0dH[2n;[PJ-eeK,HjTOgY1[PD^!dcu%rC?+fa/HUtm[St<JXNdsebd:2:okBC&X]co
+%A0jS\5B#ndKm`r2 at WJ0Y(pttpicEp<*9pMk&ePla\_0SQTYQGI/f(TF*Ve>t'g1>OF[<'WUjIoHV1aLB#LrXW^2ECm1QS<@[1Wc:
+%<%tAEW97AV#p,Ba-fHj;$:iH9g\F/"Bn"5]c;43=0dMXHoVp>?N?tq1Ki"a=?V*BDU>Ao)Rn5hb!PBlkdj:e>+<Q0-erk:\fjum`
+%8?'H:2fT(F<oE`"9 at dj4R=**Y4!g3@(Ubf`n;QW^m=57:W]A[BYfs[2?UF=n-Zb9skTTqn=^TTAi1Ok`Gc_ at h(F&,)hQr`^%!&Dq
+%,J[@,+/BQQA-o=gH>WslFtTb`Y.pE#"cd>*8uHW!:N5iI>;'SjbT[7'klAF)=G\=q3VNk5ATgYIVkE/82G=fP.X\:qT[p+D:HAN5
+%"sFth.J7qS^^J\7ZcAcrOO\3lqC_r^\MUFE4&g<B at GEs?FNq\5]KT!+2F=VS]"WO6oN'QT<3(meVSkh`]XeZK`KZY4=+;*[PNS>8
+%m`qlo/U^jM>.4-jCW$<I+ba?Rai!bd(/GB:L%b=S)^i'rZf\rN!OOhMLFD`,V)$Oo39^2uFb)i<KtpA/M9:8 at nR`ogXFc4fDg#Wr
+%S#&uHao%Idlo&Z1/(;/X-LCM85-FrUQQ:g9X2n[sFpeso"^$"2-W_pm[[[0NkX4+Hi+k`^[%a`/:BW1AQl"Zm..jH!%p7f+<1PV6
+%LNqjsR_nP`m0?L$QCt[Vc:)#,2F75Q>i]'I#;B2.aXhA[gTpil%JmI=<],JLef%Bd.o6Z*H9-*!(B./n#dtJW1ZYlP!q>>m[!<$V
+%J]kQ=d2,&4[A9t1Jf+SRH at JQHos5$$_M0&#]\2j*o-ihd*e\7$M^ZSVVW6Z%^1`Gk\-Q^e0D[_:P("m:;9XoKC+IRaI+siJR3s6:
+%N^%0r:/qZ67qi`7HC7Ics5HkP[q)oX!H971,<V^p`iG%13PB5WG at S0OKk7&jL;9aP9&pD:J6_M]bBuOe7W6k("TV"&F"aR7FZ_)[
+%X0`Ap-?g9W$L)".cUPfQ3P:8MK(i`bbG_i6a39\p[S`sPDKDsO[8fpdVkks%bc_CoM2GSurr(rr>9kY@&X'=(H=HWL[XP8_GjTn=
+%HY91?9#UNM8UooedsQ at G(;.RnOm81Vb30m4cO7-%K5I$`>L^4V'>+_e+(X$D*74Z<MQ.CMGkMl5?d98^O-P,pNW4>_>)N&<9B"?,
+%r"o:=laAVRc[EPSKPl1#I]>^rFp at aFH=*=O<%iM]s)\W2rE+Cul-dpul"c^n`jlQN0;%gX5GIsUpA4(&'fdu?(?S`H]eaF&7G9';
+%[?eFKB*[$g0eEoqkjl3sW*?5p'k/X?'^N>9[h:elWFX_IdC at TR'`</d6H/5XJ"a\a]lp;#MqKUWS_>eBDC;\Lk,EJJidoU9/V[\[
+%AX^37Upjs0pVl]G90@:."i#5dQG2g at Vo)dV(7fI10)\37Q`o`E$N%>^de_dFBV]o(:Ta$&/>q7ecID.<.lhh/KA*4s=\AXnWNp,W
+%0L6N$B)65u[<8"N?&=t?F6'AN]'mfVE>[KRK&QXPIo3nP0s()'j_Coa^<g.p`GqP7+h:KJD_Dla4^ZL6>4UhSr2tGTfD1uA[a%ZP
+%#?mAV*UR4JV5`WhVs"&/RGR_MdO<J1;%lspWpG7.qg,;nP81..g5/)<3dP$Hg/Op$'XY0C+U)O?,=2`0b;QtcR?s#N0?tSs^t.Fd
+%#ggYoUSHifWn[4UZI#-a!RD?0E6RFN:-:Vs5*<i8oJJ3XT>]k^YbB8]%6k0UN=WLnnVcm!a8Lk`G5;OtHN`2f]f?0TS&Z\B0%97B
+%D=?[inM-ptP)1tM.p53K!h7o\;,pi$DM+`:HaXsXCgZf7;mR1\,6uQ<.N[dS36dfC<%l$\*A32E:>d/kVnkCji4/3o\c^pXnU02Q
+%49!hp=r6UcL^2Leri^%dr4M?E##Dt;AKVM$o1!V=4.:@g]K+%"M=3A!$7e?%%=S$iW;]/Cn/GJY3ml';hoH6;-b+W[8qI@''515\
+%!fSKc\n).4H!X6bpeB:6%NW2_op[.K6^UfYH5K^geT2#I$*IPR<tpF,`KIF-QfGH6a/6V.AO#UZZg?iqhHom\B6`G>2p=>'fGqg&
+%^igZFKp=h#m^R]cJT6jn)4]@)N^7Nmg"11ZLq[VhDcQ2=*u*$YiYP%$'3h,$*(&.j4[(g%2_b:$n.=j5%`^Spmm<7Q;0?>:$W(u'
+%N-Wc*qBuEk\GjNhhnFeE4tbO/$`'<P3:8<N0)`N/c0iJACZ"%,h+`C%q!D;\(ZMF$o.`pC_isb6n^MX at pp6tDi!ep6XBbj7XRgpd
+%g/;85&.SDg4([fTe)4fFT?:UL2tdDJ`N_0ncBNI738kCqHmk4/Ybp[(K:EG?S,M.6gGc@?a$'6CJQPG#AjpM&_>TClr?!\g%F\(C
+%GH>QsF(LT\j1=(`r:ZD7j'YEPZ])f(D0=Mq:8P7^[o`3DYE?[=-YZi$#Zcihat+JNe,]:;q"X_F0RtOAIh8%"c[#lYC=?u2"P9cC
+%&+mI%Q)sI#l?Cr;(m#h%Jn9F5?<sWK[r?OsDd335!^IH`E^Ra1U(/mqC,<l]l&,nM^GO%c8+e-bTjJl)>gCYG*%L61aI/#neF5&m
+%Jt061aH'er*,;XH^u>e*0S>WeT:B0O]=?6\V-V#SH>mEF$F32Nb^=ETR$,M3QuXq_SPZtX7:!=4b:t6;'-eS7VlXQ6f0O$rr,V_f
+%0nj($IKI88IT,9LE/BT_$dm`MgUHAb%nnRMiuP*<gcpkA]h::gU`\L3DRm)lDU!4R"$G9+[ar0JBlIQ;P_4CO$r9j,V3_X.IJs'!
+%>[YKY at dtKgB8L]>mYBpb27I`P31D7m60A<4?WWL0QlS#P)1r=W\4k>r7D"rbW. at -Uhm8X6q;U\:e(MQ-rCj((%=',]E]bY%e'R\L
+%nRpm0W<E!>H]BH-VYho`7/[-BgF':3 at JbGM?dD>q at P)+o*gVh"poZaPGmrT+&NqiE6"=g,,I-gr3%#*;QpBff^,f5H8#Z&.REjqm
+%6menC'Q[]"GOa<</n$j<;1,>)PKq95H3`L1ZT"E?9ICBZWd]SfeKs^2<!l*6?tqeXn4J1EG6Yn1T$tR7kF95qKcSJ))D(sDVeF-N
+%?Lc/i=+/2B\,:QqfcSPUk'=I.92DkNh2`@RBliUKf5l;*J+^]$qq,hIioRF.:O#M=:U4u\j at o^F]DE9Yp4C76.:ag3r+q6'Uckp?
+%LXYO@&arlrNj67X69BYhA8^ff^YM]#LX4/V]Cdg;`0Qt\(seL at I?c)CZ,GWFlmEI0'n`#$](Rn7&7L-h-$\Y]GW at XQ'4/u*7dq%$
+%VK&iZOo\8iWQ`,.25tgKYGH[_lSS1mfa:mQ`Tge^I_$5qOeu$0Q#Qoq\BC&FZ9(4:IasWs[9T at u'sln2i[Rrphb1_!Ac`L5Y_KPc
+%6j&-5K%YAjGlK,&otsYnVtfm6n(c5b=7pTB?Otc-aX8BNBkG!)='4/9mjF4qoQY:Zj'+J=2]/\"?])t=K`/OAg1!N[CUN_beW\XC
+%.?qun%crbUs1=HD]`1L,QAu=%34)SrAm at D7o`ef!mW!-'Rk=RYdT&*:&obBadA#n53?lqsd<>&6+8uV=r8u7^d4GlU)=D-ADW*?'
+%3qi+f+3REE:P5:23W^Ci[cn4'5OdgEV*D>NUL1*VgOoAM;=h'AHf2^X/NX*L5kb1b[R^*PDl84l7"Wn(1O<IKk-,AQfS32g""cFY
+%!EUaQOTbQKK1CI/K*i%!G:iAZ8ird%;Q'q;O8%dh9#^CAg-0#m2t)_bqfZE*$/]%V/Jm&ZN%K8,nt at Z&^Ubij/+pE%NtWs$U[$u1
+%hE9WKBDtssS0H_eiTld,j=O(XYj@!SP2bGkVgpQ_-WY at -bF4QJHNHU:G]jIbNLXW+_Oc[P(8d%tJ6!N!CrSm((DRI0epd0D^Z9Qa
+%EiffehJ@:GnDNuB<_BS-9"p]N0^?fbBpmgmlc8A?V:?tZHGjbOfuf6t]:h&R"4g/Q2I5#Q at aiI+898[,;ib68/g-cY?ap?t^J[7t
+%W0\Ij[R(H[jXF>$=9MpZI`flm+^9W>A8M`JZ!o$;IoV=8&LpuUV<7C><UV&ck1qB%,Ci4Z+Qu;41OqSWI<`qB/GRjp(:n0$lA?QR
+%mlFS6!%58(pl?GFPF"lsLP56.cO[m>-;p",bH?tq$oPB+%Y.TR]UDUk7f?>F`DgVRilPk74gtTUS=()7'[>R(G'/k\i-ikQpd5s$
+%bI9:s;CU5H\o%7IT(sb-3!F3!C.j%X>4nhm)d[rfgI'U7f5m]OJX$]D*m"&_?-gNW[^cXt)md._?_sAQQ$,"JA/t6I8jJBIRE[.S
+%U<(/oIE^tDM+fFsES9?(r&d:B8Z=e7IZXTaMtOf6PHIcM=4Id4d.]gHU^-]XbT'9d/hDMS%jc'D#A]oX^AL:o_[S!8ZTPB]8`kNd
+%X-nLPe`OKAWqK]c\+k_cT)I\"*hBT>dVeH5I<qRANE//6lUb/^!dq*ECH]VlEYVfFIR!6<B=5+>Fn$36.MME+8*mMll?.`[H.d=m
+%a(I%D[u<!6$u+iuUaE4X<_9,,?=i-)gi)^55JQ0;Z- at m/$bu)VpO4?5hu!@uln6]G_S*Wbm5NjF"KlG""^!$O0o`gaJd!fG,K<Js
+%nCp"IW1"1c\p`d/]6 at 9AbfoPb-Ej.gO-KkYSlCt:42f&-]_W+$fDPV"5p;;m3:1XM">QK>:;6MG8,.giG/oPOTQlBVkU*q)7Cs0-
+%gPba=Iqqm%78q$J=rjI*Wlq at I7*$/7;,.R9R</W at 0nW]12]R<rmi-mFY2A`fDq:,ujUJ`jjAemWLK;&Sm</;+H,,^=\$tEaSo=KP
+%J*"4,ld7jr1[BP;NFFuLLR/kG?=XCZattLQPS%X4kq7)dE32nZIcSAU%;W)6Mml7BhFoA*.Y>%9!XH[;lFEZjL(!Zi]%VNc[Si.7
+%DSAqfNG714gk%5ZqWY-pYE$Q(4#`%ff5jBL?jlpQY,AYKTZuk at Ye%4RC2FDXSp:8N$i4qB+-+/B<aMKgJndN$X-2p!YVc]&9F%cf
+%$pSTn3$5uSf&996*R4Hj($A/;qSZ0Fqte>D<,?HWY3#m`ilmkb.^lsA.A^4j=:1 at .!_W3m]!-sei/[D]`M;bXoaVPMV=%,m4'%ke
+%>rbcr.UCi`"2uf8%,[.uK%WJj)1(!Mc$'^)@%F\C&pkQA&Um\+$*SQ-rD`XYGBUYTN5)mYQr@*Vp&\2a8QMl#lu8.iSD[Ri"u-Xj
+%(Va<DG^'T\D3*[\FQaB=-R6M\pu&])/I<u=4t at m&aI<[gZ%Zrj`6$GGQ/-bG3'\d+31nXWN_ETq"Z:I3#SA\[QXTk.P&;+Z2u8O.
+%^(\4le6A7<MZ5m_$Tor>]@=_+cesPF\nq^rU8,RHeoR%B*RMIO`023'S%d:EP7\`96oLLc2"[IUc:Yo;FWIiH$%`=Y+l3Z>W1HnX
+%cejP6pA3sTf?:cnOVR$VGqX(CN.MFLVaaMa`KAY-;X;Bs'f'N$(CUq-XJP"$a6ec\KqZOAD9m9IpdEL.hJMeq4cuArAe3J%AWj5V
+%lB_C_ at +;CJrg$Dt=N[4grchQV\t</XTF^$D*]%K?s)8/_X5&MdfYEP+kkqiD)[2aP+jfX[2+N[pnqK$\!h/rMY0n#>W^$?V<Qjb,
+%a="1#IspCQQQ!P>mB*)UftO'rm;d7PA at q6g32gp==<P;e(`4 at c_Af13879fOY2F8=*8Ojn$m9fSr9[_L]SC^mj2K+mYKLfT]=#E-
+%k0?9a_Nf1Fff'fJS,-F at 1C,`pZh4[;Y_W1JE4U4]f8r at 6/5>=s8XHGW?guroI2Ws<kIgN4fk<Jr8t<tF!Kg`)//gH7`C['&kEc1U
+%YC*0gD=4;e$Zn#PX^JX&D_XJ.2emP\pu,#7s1<p'j-lRRS/4qm at jd=%&aL*K:Ve#e;SPnNm;p6bp(BL`MhfbuR*gq04ZM6OT$5up
+%]fDW"kI<\I/VWP*ks9R.Zl;Y[f(\6t>=Q57aqr+j\!:3De6L[.>7(11/'5sjU1HX`9!;-SM4jSHl<^ZDeTH7k:-[6+.k%\I9Cepi
+%\]PtTq(HH#D'kms]X0$f$quVU7,&oB&O8MT.7\d^-W^:IcJj%to4%:J0LfOnV<2//mie"Y%^Q)ea@%`&>>OSe.%(2/b5RU*,OOuf
+%i5Df_k2o/MH;Io[9\ct_XM-3TG1JX+,q286&T.35.$[tk7Z#9Gr9A at odp@C*N7Q+IinA0.R_`-H=6^bP"4$d%em;"F02R$4^=V]+
+%r2>k,f6Wp(H8P^4+E)D!1f^peNIOTY+^'-I][X\>8ZX at jo0'9R4hg.fWR]V;I%%>PZ]W@:aTDo)o(n]4`$JR*P$VF[e?*:p5/Q!Y
+%Of%=fXg7M;BNLQC[@reK`L%'JP)P]<8)jo\K2/CJ3u35&bZ]cYNSqc6jjN(,8:=/q4M9j.KR]eKgXRa/,N-+fX><[Wb#V/65*mfk
+%RaKEdY`)u:0;K+QMo./L<Y;fJ)CJ7Y_?HPZ*iQ)(q[SE8a)L;'[2^8d at h*JB7/WgIDT;c<23$QXTVO&`ZdmSG:4]:2p7"Nkec;bj
+%5iL0KX<TiX#Qi$cLJ:FZ]eB$JTQ%Y>E*2.9aClUV*.0?DG0,,OC95"LJu0i$gr5M#dsT:"!lSi;O&K,;#7`jO%D!GPB1?7ejTCg)
+%g^0L^R;$YpS_>cQPe6fi&i?s=[iA4H@@^@!VBg.rKEr;`[Tg-YL9c_BL@#bag-$QTCi9An/^k"UJe1+hlL:`@mtDZX=hiR/nCW>7
+%%atUBY5>6Uo_jLF8'K?VVA\3I(Lo)]KQIL48Qp\^Zk>Q7nA#`CT-NS\81pnoXBSJ=S6:cAXu1<,LW_Lh/LHKo2]/Du&)rOGk7\Ni
+%,;E_"4#c/7eGiCT=OJd3B-8jsJ[PmOTibh@$93s4JIV at l9$^QYGRamLg43hs!1bI''tPU&Pm!\RQQF^9lM29tqKPp,Q`P`PWGmho
+%&R66$W5XW]i%S;p)o?LD),U$j9F!Ugf/liq%+ae,`7M;#8hhWfVX$P\fe4rl9,11fJL(tFiGq<X9DQMX.f[AkJ!@rHdSrb$MRjYE
+%Rd7n1#^Vhi>pSp&Wb55KHh;[ADb80725ZHP+AntEWWR`H[6jcU at 6M^p=4N1XB!bu935(<rg(e;X3- at S:Bkj4)%%$D[lL4[;:NF at 7
+%Ncd0:7Z_*C)::(XjS?J^9*/uD'h[qt[ZI,%Xu8rO4_:.X#KVLoqAOKj=ZFqD[C,7,C&91QW52,),KBt:dBt`675jBZ6O\mmWZ7:F
+%bAnT2N1u8[@OSB;H<m$*jNuG3 at B6X/qDmWe3pM1:^OO1h##YSmc`(>e%Z\ZCmDd.PP=P:`QY=C9g)9>NM!PAEgo>m)i,_MuYt>>E
+%q9h+gk(+:o.$6TB`LG at FZiLmE:F7(5`J]M^ScG*<)[b(#m#:,S%'MC!</RdC#bH5PE=%NjiNScA0knpgCm^O5-Pjd)6DZsX*%-&/
+%Asbg6?6eADW]/4eam*KW7CVX]!:g_cq-j!90:X/"(DJQ%j,]m!F7-WOq4&iE7ELu.PR^SLJS/R8LGno/0VYKL@*q-V+gLGdfFk?Y
+%:LJ0cTG&![6=K=n0O5?'Sk*hmTEUmB]CTA7b,lS.6nlY7!]lid at GMLJ-tH(/2<JR;[FsMtr3[##P)0?V<&VU%7Q<N2lsJXMk0jbe
+%pD=s2M.DAF+t?DmEXO()ne5W=kKm2JYSk*?TR9hUL*U\74G(#AfOBB at 3Jo9jo=lP.!Eb+u</9]Fc;b&!$+!*XGc!<Bs,`BtZA5-R
+%Loh*NN5Etk616r4TGo)Tf at iF$=#2IKn.a at s>*S/Hh<@KS<PHINlQV*Bm]E+1hl9K_Lp.#b5Zm7RAsJam3,n4(elOH]rEI?_r@'QV
+%7ZXrkpWl[+eK/&b2C'YBSQI]HK=*M+$I40gV!;)T,V*8n`V76Cm;1kXD'5uUX?S\u+a),cn/c!=L&\0ud$2FV_pZ$=-^Y7F/?GR[
+%#?S^k\s2nR_<nN$hQ?S8ZH5NKOlf6/L9k0\#/d&a0WHS]pUoQU)a]8F4k&O"2shJVi9tgMd)NTdTd?.<4*lPlZ"T9'e6K[EacToE
+%C'6Y,(i5L%+pemskA;\P9HMV/n!t>SX`M_TH#jGOWkP=PQ)s(mdm=X-2C=UiV#H85O at JG'P!/r26$8kEU@<fh&=Y*l@=0\4P'qaF
+%2"MO>4Z,WFTeMn2d88TJ69,Y,`AX_,M4"hug-tLnNbh`P^K at U.m.5Jjca5pb(Z#%iT3la8X'U;+h7po=nQ3L(m4UYPq)=p4\D&-,
+%L#S_AMjRZL?AEfr;^R.%lql`cI!<.k1+i:u'jbZW at H@AJcR\d9*jo=eZ<L"f"qbkHTq5nSlIP)_S8^m*c^QHS#1&ctSVJa-. at 6g)
+%OLR;Zn8VWdMnl08P/*b"lE?o5#\XRVKN6*F!\E#ST!`"#JAj58:3Zr'dEb8F*s.ZFp9LhF-,t,_;EMEs8NPno.NPgsUmo.1[*'&k
+%E_?Ge1f>bEg91RAS."VbBC"$F1RDc_4H9bAD%INpc>!T?=V!#n.r^tX>P%.+"_Z8D,S5.R!4N.j,_KZZSL8,$[_U?HA6ne\C+pe\
+%:jR!dY^i2M:bKL'LNR@&E&>Cj*'F&H:gd#/2E^QW_uqKZ%)6`j"ZiHp#?60VU<eFOQ1e/YRl%<&BgUam(\<Et[=e>Z_X(3D[10ZA
+%3[GgRh,^m,YQD!h1oS]tYV:`"d:!_%dKYD#22;rkJ_tB<Kn7hYn>(ir<LS:_4=f60W<dDb=N1K@]pf0RYn[>1AD4QOJP]h[9/h`P
+%JjjM)AI(pDTY/]6Yt.=k6q3qHN.q)G0ZOR2%Abg6)SGhY84?X2dKa*/a2ktMaMQI3(YliN_F*8V-J]U%Lg^3_ at +?hr86'+;q?$N+
+%+Ua%F+_Cit$C?a&E]u6e]!29#?hB=PBqbt^LG_#qDrn&S0nCfjaRpE:gBRQDRuNYMG;^c.`!MB'"[p*Y\/K?%*"['dFH*6\P2?SL
+%kl34'6C'J66Y[EFKqZL57f9du8'%TrHQh%(OJD.CobIA^Ud8'tI=2"f7nsCddI;a<_5MFTNi at E#72qR+D]XiI_1"#$BY^QZKkm:$
+%;QATOJJ`s5XLf:3O=(I]n?a]BlM_*o at kW!uCF*ej[\A(5;Rg#0KbW0I3g!=$@D>%Lq.Nr1Ca2.*i%^*1D6"]!BKdEQVXUF27c?V$
+%Y/&dk(jlYGVCc?j31jbdCM3YX]hO9$+BY#Me0i%6K#(!_E\3IV7EP$*jAH:HZbj'(B4]b`K+AYiLn)!;6r$\QGcaECShHo<<c#V+
+%hb/L%fSQT%,HqZaJt.+hI'S>lbR75[CD8\'CJl^4 at m;WZ+$#SYHZ>M?Fi$lfQrCBX;.,YITX#28YZ11^_-Sm:O5stm,d_=b=KHm/
+%K98Z+*URD>]*g<X21DWfBM9b\6(g&O<mF]C=XYipOJ/d`mtP^8je6OL'KCtE&<JKXO9fcZn_[Y4[L)C("0[8K&7=[2hf!m[`(d3!
+%"dl\LJ^4DdaR^Eni;r%-3;B.GFBDqR4ZH#IFD_r<VCq7<^r,kmpsopp<ceMG79tEg$7VNs;7O?WC at R47"$GoRO[dS"bg"uUF[.?/
+%%,4t+8Uo\-8LY0gE@>)._H5;U^LQ100p=g`iQH+'>So&'X96[5JN4^if-[pF-/Ut"-b%%5gn]uc3/GN5)=SaR0u>rH0pH[3,Lj;:
+%kf-*>^GJAh`:G9T=<t4>+g_r.bsPh(]g6Mb-%sJKP.b#^QY/G\NWg^KFKV&K=.#cVn/\CW%(*t_-JtfA7tA:A5^PnTSH<S^8],B3
+%X7PHt>X8.,+oP0U- at L08O&G#6UT$Y?(-kn/<b;X,Qj^PpRisjR9OJ%af5D+f+Otk2J<I?u1_YVP at 7hoqAmcHpi[uZV]L=^Z:8O>>
+%X:L*1C:>R)8Ac4"No!6sd8g?3!K3(/aAoEo!:+'[<VdB^^k7e\29)\)IF:Ms[$/iLP/^djJPpSl2;/diaeP#]^i:O5g'j98bgq>/
+%6-,o9keqe$dCcRNo1F4WM1oiRIn._5]OO(869m6K%(NX%_PKVl![kma-8c-%.kiBBUY+o%]a_AZbEEJK3ha>ioq`,K$p]?\Aj@;)
+%%EH=s60t"G@`5l^[&Ascp4.00Z2)V[`*D\bZ.n)k+CaQa,J"U;'"A6$@#EqX&`AfMC!)(4OiVuU4-;o\_744lAtgOc:"jN<-R(`l
+%qgCGd`/tP!2o/O1K9\g_D6(M!e62H(?$Ws#ad-AV[D?DI(Z5`/NZKnSCkl)RoC1]AgQLe+[Fr6I5BYWS<H4'M).jgiH<Iif%N[>;
+%Pu<$'2$DPr'KEj#8HkDPhq^i>i(7HcRph[hjFiB5fhK0kaWt"l6]?%(OMOgH7O]t!X$8s#];h#.<P3cbGN0MSN$:iqO'rZcp6HA"
+%N%2ocraR\KqR+`\NgNd5\Z0b%n\.-2_'KOin(50R[?dH.)X3@(@D_4-\I'(Y1(N.Pof>pRBF=(U'OcjX&E(^g<6:q+KgrB^`6Y=1
+%Qp]&)LEaF4*Q]T=.@)B$NKt+XQ\:k7d&eB]j+7F_*^@,gFdopuOJK3X at C%F76J#:H2]]DCFNI]Q)$ZGif,&];^t^p:%C^d>Wl0,F
+%jUPm''lY_G/p#9+aTj-bH,JSA[Pr)g?jcam(0O`3aJn15Ar(1%'EL6!"%'%e5*thSJk<"$J`ugIUgc'5*>befj!A$KmKQa at 7qQUp
+%5S5/`82po11f+YSW-u/e15\4,l?*`t(l)s'b:3mGW-#j!SAPs?Z=uZ[@cTp#_J[bk[N=+P&icl>6JV&JBWIWWL1kBgAL:g/P+JGt
+%-Kj;MS7W$VWWF!U*c#KHk_EEsV_&r06O->!<UCWXTL4YA!`o2q^a*]$JA'WgG.8mHO:L;+ecE'TE',TtkfT1lZr[X8:GtK]`97UY
+%&ARuW<ij*09X/A+khQHWE+`%%E`HRiFqH7YgBjPeZAudg#mP38QI0:0V!RQ0^K5+T^Lq;aJBKZ at P)_Z83QH+JEdX'd*t.+lCINU]
+%O@^7=/fF.(Y:\[0a]3lZ7ki$g^aSam8rq"`;F-7g&M$a:H1B_Loq9bWW8n#Q//g36&D8Xp'SKWtH>U6Ir99s7h!1<gP2rj9`dPp:
+%;f5'*AT($QKhB^FUM`?&H&#6U;I<GjBNiU\Y\J)GDgJJOpXK_Z9s_;C(tAflq-%dhQH:*.*4&BJ][^bs]&`H3Yc?AL"C1&=kUimm
+%J-Oi"Z3A%+C;!*pkQLb#LtpH>JJbFeS-#b_)01WlZju1Q=Dp=CP+l]!!2a at e[F%[GRiqSH.99dW3DtS,a;1iQ$a(qA>^QTog0ipC
+%ia];;/et5MEBmB0)]@R.NU%^u0u0G;h`D?.WYPb at 7&$(PfZdG52#UcQ6sTk]!&g$";OBU:iNk8Mk'E!m4d?_I!uE)g,l^#%WsB'W
+%r)W%eAUfPpQp?HteWq+G,+!(<.1'b;H=-/XpkbkhZ+$u5!`OaRmGrilo>HGs;5B[>MG08c>Q[mc8m7b7E&pXa^toJ^hb at IEDHW7u
+%]'+#"#kgB>p>WYI"182%P&Qj<YU:[Zg)N!`#s'a!+7R!`BQ"87AejMF's*nTG6O^_G.\gBDL*26Y%`r)A(_,X%W1bn]7IHr3`<3l
+%p*1k%GJ))/)"t+)mO<6OiB?ZR"3^7`XS6G)=r'5D5*F4!TK$q:U+C5taL0rn<5s[42$u at D^^mocV/41baod;!>Y5+l*[ia"hAFI5
+%o`6'KZ6mAW9;NK!DtS/\-UkF"nDFLbR6EE,H/LIiGS(m_l%q).l<p&*^j-Y/cW[%md;;Lfi\Ro4YmQ%6H1A=ndihK_Tr?Kn^.l_X
+%8'5Dj*7%7RAnF97,l<2jjb\G5(E\UsgQ)mA;@5R8LceC"P4XhX7S_sf0jqF;7H2i3(<een50's2l![AQ<12p-1=V07eAJ`j\h=F_
+%!Q2i%O"==VV8,USY.;diZu!%VUe;>d>q2<$b\857^+ZFr/!gqTT^lq"9hKjem'Ph&i6_Of7T`<d1eSfOXY3:QS?a_#f`cSRaPYu.
+%Z)%ff"98.d0*E>Bf9G22Z at t^3c?Q-^IK2WHa&I0YKg_ at 1Xkp`3c>*NI%.Pf8%aKp>/Lans^dGdRLBt]hHg-f'?n*Caa[_!:;:TR5
+%,YpLbZ;1ifeGH9L5Ial+bJ8Ig9->o1#!=>MRXI\N>'r(Jo$H7]^aB5-qNCVilGO7C4'tL2`I/nQHZZg:bUY9FqaOpU5#1Vnf#6iO
+%!YX"]WKAjmCV`!0Ma`]uoolS>[4+iknT:6n2M[fk&C+`42!`pG03,@@<6_uIqb/([HK-lLEE2EH7AJDA9CTn at oKg>,)_.7^*V at qa
+%%Ze+$h/"XA":"16Oa).*SY4Ct-_]Vt27Fl-$kC/(>h13GDNP&2Ot^jC]E4Bl"*GH3<-d4"2htQ:_=T+3fsJF=":if-T%#$G,+#<%
+%!a(\j+?R$$1cK.n;4rZA.Mkq[Z6:Ed]nMm+e3PP!7["c9NbkeD6g\;KV+s+^j>RSIKBTWUf:i.,E*^RJOZ#%ac&]<W#u$K\BG!LW
+%Jf9etR?Fi+]"GRm?E6b)K:1H4o9 at CdTI5&]`mP,1RfmD#7,en)bY_,qNQS-?W77lC._a+Y?TpOj5fHZ%+(7u#;-Se/onb[?egisB
+%kc:$`5LfH.kKC(CL]3eP2`,1K34OL6NjNCHST+ch3$TNB770g"b.Ed\&j1uC`3EpqlFRcAOueW'[/MbZ)qf1O-X3M3lu=8=<FbZk
+%eYB:G(cLhLUWIh\fG]Br)ouc2 at E$oDd23;p\oX"&IFc:"MOWgM7<L7kdA.de5U76kC@@JWqa0*R<BlV+eEOZFJ[WCnJR at jK-_nAR
+%DNG%::@l1`&-j5H\AtNC)+5\.p6pdb-'F1=YHr1oPhSFA7_%'L8;ClA6IK@/U&)n^WDV=U%(6^="FB)2o.dV;jJ)>LI'&QL2)o$R
+%KX\?K5(V)97pLs.>GrA[p"3eoYea7cW<O=I?Rgo,pXM"$jYDI6BSZDW\[lC^Vfqg,TGYZ;5SNRh_fsK;)-spC7>+m_6k.Eq!,k8q
+%MCukr6\(T<$c'bnd0?ame'NcFQ2$L!Gdq8=][Y$!ie<393 at U,kC^W[B>8s$2+Ul5Y_AGaAZi[W5^::W`7c>LL"aQGoB>]K;ASMTc
+%bq\lKK:*FsC(DZL'c]WH&7:>J8shgS,Lq`3Wlf6qin=\tM^`sBRj2\MUY=7p%7.4\;kQ1r0U9eRn>pQ<Zir.W7<9[f2MNeV8d;@3
+%N*u-E;THtrjUR+]&Khs*?.C'>D]4!1QV-os=DT3=beu<8a2/a2Xn.Bk!/8QC#q;t<It at i%eR%m&n+s,0F_3%`VQm95YSQ2b6"Xf=
+%N07Z[>_R:p<?SDb6Oa$EH\.A$h!IQWpmi=u]*<EAr<n1JWTI5"JBbW:O[I.P%Y$+9%p_Ue:*)@ah'nEjF>;\u at FYcb34R&7WKB`q
+%VG[qi/sRQ?-"=]E5cQH>TOG>6)-V?;Xj#YaU3TC9[RWD>qH0,\Q^->ja9nk5i)Osbj#R*ebs[%\T"B4*)=>[L-tIA250*O&e]ha^
+%OEQ3,fNtMZ3UI/<BR2q_(Qfd?(@T+lX1\Yd,uS%,g[+CPB at +7ce<GXAB@').D%ZnscohBV8RT63E><c1 at ZkDf1Ua)"1EG];UuHm#
+%NE<guZefj3rc39p^B at KG<D=B,d>9%mr_E6*r;2p33AEpGj<<Wt'^)Da3"jJM,\A\B_uR)@Z%9XZpP["*H%'%)8r^,gjJ:B2SG"r/
+%\lOg at r#j`S8hi4S=]W7,\f$F%V(_=\)W*S<9@[Np)mrHe-!C.KEe,!YD=,H.IKW2KG>b'N)e\*b:E#^=^qql=J')pD^A[-ll6:C7
+%>9'BP<,X7dd_-;h[ABgbmI9Eu^AHjFpRtmpqZ%&p])1ISSUq\u8BhU;3YFA5JM:&^W'De>CqE1gB2NV+HQt"0jK:2:OBT9G#577#
+%Z=oj2"^>4?C6/ae1k[dje_O*A5qK\d=kLS]i)/K"!1ug@$7s%9q^QpZSk("#d4Er-VW.SZo[u+tV-EGh!)6804!sL(!`YKdJh'a\
+%`K3DI(.r#j+,T,L(u57r"__U#0\$AgYsZcQ%uqJB^QKl`c<b?;QPX$;Ku\h'VZ)6'a9d.iVLWctFJ76_3Kj5!i%)^]P`8)pKZ<1S
+%"d$Su>Z\?a3A_&i-a79qdog5U=!GN$6@/\H;-]0&e:e+UiaD7S?Bb\3Gf-_e*2C5EjuW'C=<[tJ-$d"d"AqIa'KLV41X)(p at KIjC
+%iJ94n3j"gm&Efc_n-:D5oFFN'93RA#Pn28d!2^FXPlq*_/Z;Kl-UX'd6^M$fM0)-h)bj[94Uu`gV#io'F\<__9Ru^PL(C.r<G@?m
+%ORbu'CJK(M<CSTK?!Tm/a=P=(.\p`3\KSP`Eft?-2fQ"b'PM#dAHn7d0fSb#c%VBd9Wi6Q6-^ojDjnX1[I2<I:q<!QRV'&Hr%ZOp
+%@a/Y7D+I58M_e"3!eI5B-BF<`&-Yn%Ad,26#%0U"9<CeAYlN7l-"UDCV?.*!&Fp)8K=S7t8;A4LLn`U5;7e/R*7AYL!QM4X`m?ce
+%rb0?:C]U[TA[@TB%Od9/2'a+i[:t!poA/_e!sH0fe!(B4_,']X6Pi$!9<)c_eH>g/UEURb!,"*)(WtP81j'&t2<^e8MjPFlnh>bj
+%#2A`"2a/#[2 at V8NG-:$Xb)!cnkB(d6R4;g@'7gq7=NEu\baH'/&#0=8aok[W%lIGj-<2K'$0!HO,Qno(T?&0IVVqkXeBhktS%sZE
+%8U5:Um%.FU2UXE52?be-nr:Ck=]U^\peH(0oem_l"jA#-bOsRAbdj?OhNZ;`VhWe2o.peB'G]r=0FnP-Q]Xtu4]ZM08uUfeE5+"L
+%.2a\JU8sS8!S308SV2S^Fp#2Fjs-ek)R]uT8 at F;:qFRe)[VZF8;2^KuU*E at 6GFS8Y!9[Yn_osB:4j]@Kb'KB:!,]UOrm1*[#o'A&
+%j@>?Mi/=k.&5CnQ^+*aY5cJit9\kY33U.Ok=NbTUccN9Y,0Mj-G,!J:&=B>c#]'X-cFihFJ?.<I6u94I%P0(Dq\Wg&Si^mer^o[2
+%l?P<a5,);\9^qR>TL1f.%?_#YBIK,?T/Zc+D.]!3RuP[1*2^Ofc=?H[R5nPu"N(#jR)V*'<84Kd[3G]rO;'M.6?JQ*0:#\-4m':V
+%Hg'"C`u,PS#K8ss^TK`3H-V!WMT>*#B/('E=?'&Vo=E8`&FZ?s3e5mNZ/JR,=/92&^Lc*`mdc*X_1KUf]?t=@4k/mIosL34;``eI
+%A98Npcs%b4Ejsm#&1q&m#r%LQOKcX1Jn0G[Zn;#?G>hL/XaS<5\gl"$[/eGd!SI<kpq9/__[^=6:Lmp)L1&3riA7i79-F0o?)/aZ
+%W"b>i1hO&J>I*".J?EXa24EZh5 at YT4,X4/[ak<]0Bqjc0l0pBB20u[0$3]A<[$rdT1QsMKC1;BNb3:CoQ5U"odtml5#a?^ZJ-TY%
+%l-eNH<.7P^UB0[u%de%;h+b'g*GuOLP>X_KS>;WC'="l>^h_iRq*Yi%W*!`98p7<HVrF::htQec2)V!$$8a4>[Q8b0YhDEJSaU=T
+%Q.:!rTeL!iU+bD at jl+;!lA_9qcR#R>bJXP%;qnVg=WuNugF]c9K at R.6?rti'M-.$<I2qYq8;/*(CF/T??p"%[PlhGdh'F6NRt"Y9
+%#))sb%DtG&Z-%;Xa[iXS`QoULB*#&2h)<qi>>hViO=47K=2SlH'5T+2nEHBLNKRlY?,Do.QB9+$^0`<fn%[JI*S=YXaR?1A>mr[7
+%:6P:P&>3QaqXP.qjeWepjgR(M%K&;daY1Vsh_Z'l"(DGZm);6fcC(*;OZa<[F^Q+.cmKqFGX^Hc^,C:Z@"2,0JP=6gO?=Kjm`dbj
+%#AYZk<OmZOFj$#^\j5dB#9<1lH(aR!Y]/:]-kDm_bRnMRA5HjClGCR3eKI#*`PXGVdeo(\'[P>'2BkJ^#O`QgJ[E'@BYIXI5'YAa
+%fX]maH0,KIVkFj_"DCZiTFq]2GhtWNdZVQ\+b!0[=!*ZdoKWRt.>8WC[UR^q\jLaT:?JMifN at 8ZW'qmIU*LWL$#Se%Y[@MGSsWoL
+%L?1A<a`7D-ZHn+41[)AO\=Wn%Dtib0,Y.8H.$o/"0m'g.#?M)8G"*2`fdU=:)t5C>7Pb.>mV?ec:S2tOgJmF%c96e%C5j-6e9hs\
+%-"b*Xlj(R3s8?d>Dd##V7=F\*Unl=!A`QNaPH6&umt5Qt6CV"BI=F!NIEd0h(F2sk>dgV4i9X\?&:K0\#r'i2=&nWYlb.2!PI9W+
+%Ss?0j1])G9PV*SWf<>2W&u$.Y<)RYKd&:@\$8*CmQWB&<>4"He?C2'OTq:`Ml$ibG&<hjFA4a5V#N:ub<]#uqq+Nc8"*Ub:n`Ma3
+%.L.:#7]fP[_5/6t2IrC8@*+/ON1U/Y%Llfd%St at cXdY@^oroeWfH+CL4"\Xm8s3 at cD-_rK*)'K$*p*DAJ)6jK<j<'Qh]\3QZKHY4
+%_m:5ek;iV\4h.6[dk7'5BH^0[oinq*ner,9PS0Dd/`P.@$W4:J+6`NJDLb7bc,47XMX&L&i,1u>LW5%"qlLJ/Akl_JM2Me,c`kj]
+%iW*%7(fHiK3'q%ZMf(.b"1$:,W&Hn+3#J$T/aY)'McW4J\CiZ)VGIW!1SrP-7(^sb*]F:BMTe&]qVIp3T_a0>m.ro$XQE1!6?&D"
+%5%pR((4qG$YFg%<Hrs_&:c6dQhAc&$:!g_N9YEF\=on`uJf]g0Kc!U1jOFOTRHm.^2dmIe>?CHC5j1^MU5aXOH]lSbq;ZHKWE-YM
+%rqg[D$\)a?%M$+Vp^r^?;-((Z3BaPOClhM+O?8(E!ZhSB!]Kj31_4gsK"O1`6J$l,?*IlZTgE[.?n]bQU$De0+gpf`IGk=ZQ]TEF
+%)s at 9gK/$^8J6K at 7=c0qH`!RVDJRM^(62GVG4E&m,1,3O6&<)Y_+QFe<[n/=t)eQu4RU)2%$igqmZPce8[kWd*.rY]`8e[#HBUQ7u
+%DJ7%H:29p!_+hWmDILPl,3B3Y9M3W*E-njXMaT at kh!c*<XsX5Vf6etD2W"85)_>D?bAMPt1fjsqHYNokh*Ke^[k:alj^T92!mmb&
+%;E9"KnFf:8Zt/.Upb*6kn3O%e$UkAL`V63&^MA%=-Y`6Y[0'Ta7T.iuNjURqkI9:`7Lkai,ph/E;5:9<C5gA_]ZjK,Z<BW$4`%@@
+%WS-l]ZLK4L(t+")LKK)&![VMQ6t6TF9A(N.A_'!-6O%p["g`:N@%pK=E_!!%UN(jj2n)*3S;Q#QK*EIN^-X`_e=XM]Er<>/?qO("
+%l%p#RR'5Ui><@f:;B3oH9J-W7Ai\8<^+:IgLR&aI*kq8)Q>hVnRZWbZ-n!cbD'"/b(eh>N-9t]?c_1qU!gg1tmt>=,AEbBLG4V6t
+%^q5f;G4)qW=U?paj773ACcl?nGF#'3`RaWHoMm6C9"<43=hY;o?`+ZF_ at W&j:R#+O&0&0PO2Z/@*rQ^6kOC2NHC;B*eEdPK+^qdq
+%@-Q5ZS=-Mkbq03/Vm(1sQ,(.SY^R<MqgkVCR8pSYSkD$T/Zf/2\c at 0Uh4L`g\/7T\,+6Inj;ODC'A%rT=L/hbmb%WF:prn1W;^&<
+%gZaY9CR6X!0EdHTHr[lp&2Hp_%bAK^jgijd?,T9G/.%o%#Q_u0M7^[.T7:&M9(CH#,-M+A>g^'U&>.uY`+QiH`46^\<34WH+L"k\
+%]-82?_$4#<*F>jqbFu$D*.FC7Ddmf`SB_j*&p'5)<51;n)pRe&5h[ldl8JbYUXQMg7G:.%E;Nl+`Ng\/U##%CKTgGQH)tImnRruk
+%;j(?hg^H/UR>FAo1;FCC[U]T+JfAPdVD=rTAKBlpWJs-WIf?^W51FKTG@`<QU`K:cAe4#<-!DlHRISeZEmcQ&F+CQ`-_l5E#$66q
+%m:.;MWjoMQ]WD:t,CE'sKQY[qY\H<-'Gq>gC<W!G+\'XmnV]_%^:</Y1F"b[@pT%<5=d0224R^F=p=&S8r12Bk\9n8d[Vr6j4H1`
+%beD^$-"uK.XQRML]t.8Qd?JOib=6LtRn3=L/*Inc0(>-anX/GqJ'/`Ocns&EFFt)#Kg]MK7'.c<1lTlgDY*?*EO[FKe:hEgmQbfS
+%Da>J*FBEr at 6)?T8!7[)pX"*[0,DE"9aM_[Y`n,r>b(0?O$Jq)M5c#POT)NQ/ZJP'lKNsg:5Qc(Lm2eR+?7Aoa6VQ2NaX$Q$41T#m
+%!aABm!+E"`@!+jFcrC#-g.niBPod/;.VH67jrDQ`O=`"\4DJ0H8^b'mdf"@;)(DN*b[q^>LbAS[;1.*`&q"O$V(?j7&#UeS[:sXB
+%V[<JBIaG?BK3tO%IrqbRcp[M(g3rthhu)t^l5K46lH4T\HcTuNr.m=)BjKbQn/!KbboJn]aPVMK^H8J4s6Cc.Q]SXW=s(A,hL@/6
+%/Is/4IKG_A@'_;?'SofZYXV/PX2>7J"R at .?[cRbk_QR)IK^7P;Uts"8g8:Ug>/K#9Z`D+NhQ;]ST";kD?];6aRe]_tPJVM';efYk
+%!I*qV,OmaK[<Xa5>PDk'#5$/U&"`CF`g3,MX#@dBlqO<,@#On08ppXXr4To<r`HUA\3K=!cJGY100I"ahW)r/Rb/]&21h!fON?oj
+%.f7aDs0`(-$F#cMY,`r>MrR6Q!1a@=KKF?PX"B"On5d+Dl5CRfQp2/]cA=K8ZTH---b^mf/Krr4ApDR!NZqdO#^"!3mDb')47c&*
+%l8=iPJrB'ih5 at 6ki*)AhRXiMjU*rGldLG(<FF6a at cunhGXn8eZ:Q)S)m7T!GW/g>?AntVV2o'j5O2Eo3\NTXf1pSF+/a5FFCe%@V
+%gto7/W3qgKUrU:S6hG9_;gJXPgE1t]h,1CO&ded("R*hdjDuL0:8<L+kh7=*DSdY6]&.[L^b<W5d_7rD_$GbGAkb$rZTa7U't+jE
+%[]/cQ\6A8`=3^DQqpO'e(SK^%-?rA(3q3I.lj<"n2/Z!09B>hGZ\**+P>BNg"bHY"Cp:T7Q<-S$BFor@[MFYNO4qtqB%?]["NP6b
+%@AJhbBi\QP3glNEC6B?@.-5t#hmtFB0][!nemJ/Z5UQX!Jor+sV#IkuWa1<(0i7_)>uuQ(CRnRn)gUB$/(]dBSpuo^2C,c.bq1+!
+%X>&]+XMRkp?Jo at P][rO*91aFef;<sVMfnJ%i*e5)&GmO$\7tn(>MEKneVYHkoX2l,Pk)H"`WgMXMA!)DTn9(fS$W!h:etWl<_8dn
+%X;'n.+nY)l?Cg\J-MGBaUU4D,n2qiJL^T>@<,?RJ$GCatkQhr[>iXimCmah2D at S%eU\>VRF8J)0BhQ\9[!V^gO(*<FS)Zs4_30rk
+%BcIqiL<)Au,`;OQr$*:%.G8LLMksmB(V"Xi;7T&?/HSrd79)))/YM^].p-5C6#`CeZ/W6`9RZfZ;B.S&g8t4WbpE6._LU[n`p/SM
+%U(%4bd$DihB;M at AJ3!;WrXJ)gYL<C;4>p-pOBD\-0b]jg4ON0u/M>XmEVMrqmU5H<ojdk@/f5=;hZaH$HuL^K#2L$\3;N(0RLQ,g
+%36iTnd'8bp\t@"iMSj22jJ-JWo4/#[lY1QZ3EA&*h&X>4j4^*lQ3nZmgW7kTr&J(NQhHTH"-;Z$3nUkrREp'`W'qaJ\GI%g'ShqR
+%[AhFTi<K3HHqi9Wh?HJm;I?=2C*BrAKY!a,ao$Cbq/J_o&U5A[mbD0saGuk#K_N:Q7\kK at p4FPVK>gen*7EkqLMK[*"]c56dZ>r+
+%"tT7R+=jBn5,io`M4g0'Aio8B[Jss08(Y.Il"TkroE1;mKBqH'NF6<qCV2bXqT/f?ViAR$7:[=n(KE6&7%-8UlN.b?fG5NmE'!Lo
+%fk^u]'fBl#G>%"XF5'79%hs>>pa<X3a7AL$+i#q&+JYEh2LC.TTc_HDgJR:<Ju8oa6QXoV7n0<P4S?kroFY4Rnu^QOqtXq.#':bS
+%mARM1n5G7!i&iS8hK!lmiLoj>(0c%=6R=^./#p&TMMcQk[jTE@*T'<Na$0Hp2FuMqDi<hQh.e;sc::_N8u&fY+\b6K<*B)tQfbeF
+%1<LI"q,^0Si,4HP#\!=kDmbbJFcut)F/JEDH#1o.]Bc9?2g&Cke:?fLC8G6:jh=EhG]D/9Wn>bGNn@*)oj`ntmX:g>LUL84Y1iMf
+%_R&q&<,kUb3L[j`_?HBa8t[E^*gH9SUue;Qe%W]ip.0@>[l`b!>U/GhbHflrm53YuT$>u.W+SmDAjZ4#fV<35bRB7S[B*D#E0p5C
+%<96dXS8=V/U at _<<-<klV$r&UCU%&-jPB(6?$;lMc97BLb.I-#p<bP#_PnMb*(,*lU+ZO\uC8/*MQ;Ana2L+*4m_cd5bprJBH+!;s
+%T!fKLU#21pq35ZFLEDG!91:RNCk*"`7iS,Q-:Ommpj1*5cS%7Qm:E8[&41FQU61nQL+[;oh=3lK\])oDK5EG\_%m'Ce?*9'<k;%9
+%m`;IjW"MabU&l]0c\eaL>iBptUG$J2jq$0j,3:]YSnNQqlmYmu\,J\g##AH^51&b&+'Eh)W]D3;$)0\LPgp#@2WjKUas>,##.;f$
+%561e`15 at 3N$ZKX%7VgC(Dh]$L2Mg,q]\3@/`*sZlHB/-OLKcJ/b)+W96a9!PLS*/XE#lZdKItI8#j`m;5I^;Op]^sbA3CM$7_D8*
+%G3Mik!G[3)[IOA=@l&3I89e-BaM]5g^'%KW3oHldjn!hSFbA/(.G(_'[1trB.VPW>.$d52WnG`3F9T_o3iZ?TP*p.U7L]NXVqH`D
+%'EY&#YDoUrI*sdI!n>R/!MWnQ?DQM6MC0E(AtDDs-a+OBhB_CLmQ^VSSuC?eou-sI"-]b%V/Wbic0d"HA4cS&C&ernm/a:]XZ84<
+%E5E3+E,`%LFei,Q;7$P,3\"q4NV5 at PQJ(Y-oi@)!fN at c/%&tg$oi1W];8:V_bS^TH!mQ:Og)+kX at d=*F!2>f:YU,VF?#=<F-;r_[
+%q6?%R^rHi,mEl?5]+]'_>,cPXq^4=-$!!]tor)Y/]/78oOmmJLPUXXR-']AXcUh%oA[.nA4/bP?$n;UbqO`\c[gL>.`GKqOUcM]\
+%C/^!K5Uo$[BS0eq[YB%5plbrrV2?l'4 at sB]e;sQV&4%7?CpE[8_c]A&A8DP:rQPW2f(0k6cK:kOMtBq<n[hW)Bq)3J28Q:=P6EqB
+%kb#lbp-<dK[lNLq:r@"9j;jW[.%61UW#mjYj*iheF,0:!LI(``i+O,P8ib)^$9W&^TJg&>01mFf!2VaI(Tp/B9r]r.5uh<0EoV.F
+%U)F3-COSn*k[l'f$uXALYmMl_&&p-hT]UVY)c@\9ZT$hGMD_[hONukQ\).ML/p+_%rVj:IH at aZ%);*Z3S at L+[r]W3X*G/5hkoc;s
+%9grLE\TWV2s2NpMoidY$=(:V"p`Je?JAuQ9niLpI:Jqc,$sZRQO'k*[jH;>EUG!p,,T?UThCI07aM#n[\(HotgTi(9+PG0>k/krj
+%aS8m'frBN!"\gK!cqN9L)%Rr$Zq,h0J1_s+'3a(U[5%Ff"IXm,_,m*Ig7Q6&2E;GM:EbfUWa$#c].?lB@[<&5#5.R3Ie@"9@`;\m
+%NMe4NDt`%Uk1b8HS(,c*(NX=J$mmp3<HT=T79o_to+t-hYOO%e=VI*3)AA+R$S`$QR;GsP:*l8Fg%1YLc\V\_6n]HY)SEUmU60BC
+%;KHic#\JhPdsWt%T9j2Oj_6/NY5(0Vj4.1VB?r_7o!=h^H!9(;P:u(fS_8HoRP-k0fb.6qIblM.R+aDDDhSC`1ON"IfDQCJ/ql++
+%h=,*D2?kG1e at gQZcr[PsJ!7L>ltYtV4Zf8aQ'9aS$43-:fu\qX[i^8g#ao^h*@2]5cWafgmWm^&ggRCpj+C5,h#023Po!qY3 at jPl
+%+TgW6Zn&EI+GBdDT$.DU=.6!t't^!pbGoFH((spD4WCO*AVJtT+Mo/S`++'f82Fj'J(G*M_/fISe+Z$72G)c9__Z8I:!KH\2[65&
+%%FLa'3B;dZ!MG.GjDM5'/UG?(8`@L5?JMa at ZPP^^`Kke[]cPDZkMa2Or4SJu=-NL;![,88c6AQNm]=glkLg6*Q7/!nNs$Op4g>df
+%0Kk"pdrs at 7%5*!=<IrXKBsV)sAXM"'V$i#?r<"ZL)Z\5Z(S>JTU*`UN!kO8<+2kM8 at jC>(0PLse0:7m'@D0,R?LF.])sc$$g]mBA
+%(uJTtC-E\OmCi=4,WE%_V]8fk2knDdVJ.mVo!Z?%5nf"QH(_[-(X&M at DpI'6eCSEB);gkAQg=0^j^'P1[[22=2r5s5p3TI52gP,o
+%qPVMD2Z@@3gP4$t%\<,TW&+8/9+/eF(AHoGVsfjQ%OPaM[Za]FDI5"UXa"4<_LX?VF(`A=Wq at ./k_:$3PfIj;J,0. at iLbluqEDRT
+%XR:;1TX)_.;inHR^\[rJLi[^:A=E4rLG,>RGDE>;:, at 65?!X?4BP?tY<uriTFOEu3,F;%0"(r5rl\fu_5%QhNn7m8V0#W+;p1f:g
+%DM<j;qss)'J""1B-2)F/)Iu8miHm`!H;Eg%P:<sV2o+ at Z!,/3#]+"pJ_p)gES>Kn%o\E?rR&JON?'#aMdgAt#;8\gp1uT$2Ge#l=
+%QLXX2^YBq"m%fD>Hf6W-R_bBE2-jKp].\t^Wq!JL/k0=eV(.h at +1RkA,<4J`5F(.4H`0_!mGX7HY.dIBCr0du(7fa8'"&qLZWn\G
+%NMVm5D2,shX32TN-fcr4o#7WD[mf0,:X:!KBo8NWqkmTM0%K,&Ho9GMbOWX.94K7)(TRJ3gjfh^?e[H%Q9Hqh*l>=,BLoP,BXpr$
+%;K3O8SN.,)<ERu17H4V(79NlIZBJCj#_.*6C=C(CDs at VeBg^R[#23K74:&X/E5C(WFC?LD"f;Un),4NYhLaSa8-!cJ;gOstBrQP)
+%I<r<E[etD<^=]qK2YjZqrF&aD48V-oY:'4\Pqi+\4]bDOlMbNo<uF9XF+7gDY+ppo/6]!CrLZrMdmSn&KBe*"X7-8@/jqThM8]0f
+%Id.kH at +%>k1MPPn!1A(+Nb?9;9`5os:\LW9LT/q>@ambm*jk"B8k\II/_f=I?@'$D?>\&%=8Kg"_bp;?<aO)/H]pU#HE)Zc.hbBq
+%);8%r<rc[,X63k)+l'/R3+m8]8 at 1k!3pSG-d-7l3SR],sj)Cm=<R=B,jIcqF"%3nn=#*m9=_O9AM%-dt$g/omo+&ij]kIY,@/JdA
+%I^(igfgX4kmc%&m*93NH?d-R6R<rk at LFHGC^_6SoRtYd%`s6-g at 8oDV.\^e;]E'OPk3Gk&XX:+k'/#!3hjrnrC[uN=?EEdJ+Y3V&
+%HZ8rScs:VSco8-8E=%]#SGmo_-*g.]AjQ8,fC4ZTL</IY`F.h%>]P&q=&ESS at +^d>_WA#s-f:-6IJrkMG<c&ES%G_:okaG6V7m$4
+%,>H:l4=X`^mOn,j3p<'"B+8)q\e`DX9q2tX/'+ns5;kPC)kRk?R#2M^49Ek#(UN[QZ<o6-o=TH`&mn?+IEnFdmcXDX6n!qj"OnH:
+%RIj9p:uJ=HYVClgf6EDcFF&'uB<3<:/#S93D]@.u-raq9]L\fCfYZ.Q$$/'DSu;Idb?qEsX$qEHi%K;pHi*#8dU%1JT-c6SlGbs*
+%TQ#m*b'@aM<@'k"*#i$Gr_/-i&Je!\%#E;biFkQ(q;LO.@<Gf)>#X9HXUI"W_V-P,DA6ar%l;:5*f9?r#j?LR'=)k'm"NI`$Lu<Y
+%I'N&,ClrqMdu04[1s%C5l;&'4*^>;!20mr!(!,/L?E- at B1ij2"C:AUh,a_Gol7PGWQa$oB?BhM2h at 0Ti_P4!1LYaC\XDIe_8DI@*
+%cg)/4U6gf3 at X6ka$88m5b74/%Bj[IfiD8K`o+8q5>eQTUk8!dO52,V-jgsr;,)BZ$2N*PsT%7QN?"m8sZ+]5N2pIQ#<aE=Kk-L+t
+%%;Qf1.MDlJ,D3c4doWd8H`.2m_=ISX94YT2hf-4Z3cCj7Ct5J3D/FpgOAQi!MbrTmR.rk';4!ZoiW,M)I$jKu.e,/UlOTI3oYg>*
+%HasesD;,:gphBMA&S?<WW`O9<med1K2E%Fk4WJnYPecbAjAc at Y<RFi+fT,H`Hd5%@)j!5(%!psoeND,3lVnXPXj<"bV4tk==eY]%
+%%5$O\2t4BL.Ij\GNOG;p!_oHl)MjDdah1%73ud+sDL#l%4mg(DO8N^>D_?Mo))%oT]fGMp_i44Led*RVf"kjpCnd,oNDg-:e[Gfp
+%Uo>=LV:ZX$AC@^&./A3Gr*h87>IC at Trp*qhci<cu5KKIGq27JIfDkJ6K`d2(XrKP0%D(Ync$sXlpbm_Ca_r=XA3q_MjMbl^DQPgp
+%PdknQKkp`tMUD"nj*%ql[p-PeDEYMNGB\83Q[q<GJfYB9oLV)G;2Wf`>u=fs(p&Z=DGU&ckcZZ]2M"r*Gg1e!CA1N'hM at 0U$&)eB
+%?3mhbR0iTJTCT^dCE)p]96oK at fdSQoR;E1)db2CSG<U0OruOq"E2]6)lUlTsPWbf-Xr<Tj%A0MJHg8BDiX[[=l<\i0Elq^rrN[7.
+%p\9#UYGU:7.=3qeY?0`FU:jmjQTO0fPf94TO>"%!^`u`MYZ2).^%RW5a972S*p)!H+[2"_NMnD2hAOC_#8PjZI?DA-ZPCM/2XU1P
+%C&rscnnH$a+E;".jtGhj7^bR#iS"PgaKTOX\G.++4IMj(&E'U7GdXmG`DR42)0d\cqY,"Umg]0U*5.lepSRrO3k\eG=2TK2NaC#n
+%X/Wku/Cb[WIp\5)Z4Uq2C-qoMB4[`6\p-puo6QAVHQ7BkJf:nWros224s;^KgmBBOOANf]Y#SmoV2N7mT2d7QE&t3=Nl+M^AH6,7
+%?p_dI?T$#l(<bE at 6;H8u041]6Bo)-k)sVF5DuX"\q9NC8#NW at D,*pssPhSG%icfuq41e[dkhCW1P=+db"('7hq:E4u0Z[i-ID*,]
+%T)@:P^tuL,1=S6n,kOlh]NB+iSL6W6N@(&NErBor>U6Ae'\9+CH3p!X"dd=s>ia381qq$pQo:7<S\YjDZI-osFHm)MkR<j-`P`5n
+%LPRIC$+nkZS3kQC5t1<Df+0J`6a5*+dQ#0'C3b=*H^('2otZrK4r[/RC%k=/KC^bf4kduGhC]d-CC7qB[EYVN?P"\kFj=I:)kU4"
+%EMWOB#NR^(BaC16kfBSa`.4$RU%?oA&;XdPk9`o73^]U7%Wc6o1E9H#;D1oMI.IOnFDl6LZLd-NiL:lS,&+%59D%h^G"3WETVNB:
+%I22.#nWG!jG[uCHRsCJ+p1`_,*5hU3E,a/m=2nmgq]ZqrHQ%VK0il+`B/BUndFeRLpC(Fc(k9Z:-V57f6<KnN2b\;N>Fod(rTBq6
+%k94`=IDEmY%3a?p79!RF84O%mj#e=!G'7klg)ej[(jd8B;r9d&q)/hW[umkYdqF#>,J\08q2Kd=Tb^6J'qbR=ERQdtVY]9]9Mq<]
+%A/C?4't5a'9kF;gK[?@.TcYj5Z"&h9_P'2_fK^5pAca?`=[M_2'6j4<)@PEU__I$q:bN'b3 at 1*[f'I&\#!BuKLRMt^\O3<4>M2.U
+%-B7:e_PtJj(Tp*d*Ql2VTj9AaU+Eo-(RAa-3G4Q'O?bS2asOFl;@&g at eq>!&(YOQ!6&UfB$+)YZ:p61p'HnI1$'o'LS_M=A]bcs9
+%pn<Y#Llf2@%d]M._;bC9(=W+h2h<jLFNjr?3/%RA+C\tN%Q%<+Xq".-X+B^*gW:#qMEWA>T'^F^=g\g`e+Q>>5f+paU`(>9/k(%L
+%=D"q%L!XVFG2LpRP)Y3P09/Yr*rrtac'X'^6'aqfCV\YZ&j/p7nr3X01D7q5qE?e()4&eiS"UsV<T^#e=L<HLhD6U5NQu&qFb$n:
+%pbWJTALA*CY_Ai6,t"Q5`(!2d8n2C^[c2V`ioFGnN-05enB=PhX35XUZ_!%ZoCt4T/Qn"$3&+hl)EqgaTKdB6:cJO/f.mmc[#umG
+%F/[g1M$lDs%,+M at j!;(5S1ci]7h_0Sn7RWX0-XX?)r[6s1<mT[c/$5%!k")'P;!/1&8qFa1f2qE&@-94f09+UU-UqldMZf"J^'"u
+%bY"-L4DJr7Zp?TVoO,o&_A1jDm6\;M>b+#6Xgf5\WpApfPgYKOPi#_E*iVd"`:Ls9W&A$=Z<jFE`lMtmBb6"?NhbB7Xe$l$+IcZc
+%!@[ILfuf"o)@ftAG@!$9!<5ATL;QX-BSm(nKpr'`XVh+n71oVoG:#e at EB*9@\WgM8No1L at 9V2%Ap7iIM<R1YJ$**#(g=BAOL<'f^
+%o5+i;.<$>igGC>e9V9apfZ#a5\P$qf7\J9JBD],8>^\`'o8PDl%AruWGgo1mcI\R>%*hgej@[QYNCI0(8[-oH5Pm,E[2#a`P+^?W
+%V(`!58".TUls,?->pC at Af&71F0e$P$C7Y[VAA0p"f?Jb!5/FG`S,ebk8'#WeCY^XPA6TnKZ9eD8!fWZ\f=t^!%X<C,X2e^hCAd`9
+%%"IitlVj;jo95p;G>\nIZ-!Ff<b*@eHXhr@(=DF'1kAegA%8=,e]1]n7:ABGGaHPYD1G8of'[t5cRi5)`kT(6KnkGF"jd1Gs8#68
+%r:g6\bJ3lH%tF2[^\Wl's37JAomB[:f0B0A3fik]SH$L)5PiiYq"qi%eURJgLO\kBJ,J]g5JI*Z^\rr&^rQK6e,P"qs#9il?>.*L
+%-#(:I;UFQqiHo?l`J].2.M\QjZNnYaJiJ.nbf9Ao:\QbC-6.K;$d>/8K/s6Sq8'*I'O+MC9ljXn^<7uM%r*<Cc;&5KZ=:DK7e!)b
+%"lI at 5nl`H`AAL.]lkbi&WYf]EN%brH[c#[N&&^k)G*)hSD??4gV<M[lSbs&J2M]*E$V*E?k at u>9f!f=c4'96gf^WHAE>#^u-O)oP
+%;X\lUFBNfT#ous&P4;k&_Vm>A(#8S3W30mLd"3>cBl]SD`3n/A5gRH6..o3d`F7dujIGOT</X5ZZHSqhaN9,H$h<U/Q^\r*MR#:l
+%dc=;eiI#uf#.#+P0oN,RP6c?[FQB)"57oN6Gl3H-aKa5EQum[j:<B9#W@[482eKtg93m)!3Q-5RRM!E:]`M+$9"eC>F?@FoQr?+1
+%:\iqN^R!EO:e!W$Z=*2@`.pcL>..2`r9qt<2rtZe1oH6$>Z2u/<f at 4Kl8k(8:P:F8N>@TWQ1RjN+I&D6R-e4[hdQ4p/F'@*=^2k>
+%U=$2h=%jiqO(VqZJ+Mcmp'`YN,l%XtU-23?G)"AiOBG+]]R_f#P8]Fu)_g8/1)LaLlZjk+W+scK)&f81ejN#ui"q`mlV;;.BRj-d
+%YH-F!n]5M!0@#,imNn4E$mUf1[Fi._r!5lEIh.gALM_$/Z=>]\_<iFUp.XfGZb9%:pGmCZ)ADkUWCH$s[q=6UDD63_g0.mC3\@uX
+%-LPc*q;_BhT[=B*qIePbd]tZX*N>@-GIm^"L)HTUlV+dbCSNtnV3s!*^uT;Wb@@MpqOMOgZ^1LYp^_2<0>=Z5"UF/q/oS!1-`)r&
+%[]8YSmA$t*SW0Yh\"m.P at 4AC;V_.PgqUBObbj*E/:8bSR-*>:'f-eh7Z'`cf[i_5"dqB`F%9BX-fe^^]Es^:N8]VilR3bQ?n at AA5
+%cU&ZMjpe\8/qI9Lb=uF8Dd>e+ at D;9L'"S(2*-A.A6q8a47b0@$h,$UB:,XIr`li(g[GePTj@?^4H!8UIQs!3f,om_6B1BO-+CG+b
+%Q,a,3Za?bfk>T[6VhOp0V-Z=+I6-UVhV8lOHDP_[kEpET>Lt*'m(:/_]&H5gbbd%BpT>cRqrIUH"WpShA1WcjLbJPtWY)#99ddUJ
+%p\)ZrHo,9(SGJ_ZP^%e?m74,,(.<(BYDQeOPc=*K%!t@>22fY'm21.C%mt>/:\N>pU>2poaMmONl/\P>;Q!PBkPBs.NER/Mk.lh!
+%9>%Y`ioQulH:,T>5%U[]lVnhJQir/eFY1BVeg4j at NJ'&dXkYj?0o+uO at E?pZJ6#mVIKO-L_!4h_kJ829X;l*R[sE"'%1]k)'i at 5j
+%XrKPMGRc1K\jD:3lqLRm=8/OL(O#=P'l!rPS7GJ)g97RS2=L1_Po3&`m/c>"HF7D12`I"Kdf'_LH2V\cPN"*rE]VtCj2AgffY)h<
+%70BgXF:TILBI.Na at K<Ik!?>W/"bAY)*qFNteNc.O&b6?ji[utW6(UD*T;Piua7UlgFElMR[Rk-=b(jf+a/!9\J\k%Vi)hOIq\B3#
+%mc6h*!bM5T'`9Q\#bOgQguF;naU3@:/J3\'&]ucHX!fdU/K=2GWHC)?\kmqe`\\EN)`GUW?,fMB]^Pd1;kDh15FN.(l>ao at a@%%Q
+%_47D5Z9]AM=UY0M%._NL5gc!R/lYC*8Xk1-^AdqBb3F%]qfh'LX*, at ekef`=1PiNH$FUm6YhtcP$.lT04(fH1':o".rk7DGL]GOZ
+%cYkF+G,"&LKS?X563DmrWl at -\![c.1dj;,)QO[Uc6T27FSh)hmAIlMRXSsu`6pL at 6O*MA[AgNR,>;P7u0k!5Zh_u8oj!QW+%gnh<
+%eggS[RAlS"?&6dKcf5"4d9N#p';DDT!<bAA4IF='!o0c-Ub`S5.Y8sm.UTT2q9>>KEcWb$KY2>H*1Ld"j9J=mn3%+f6N5>,0[LtE
+%cH>l^jinAO9>XI+!SPb5/;J^kAVBn8%rn&?..qq)3.<W0h9SF!C6)?19[BES*G+XQ%^DejCQd:#AG-Wkq\O0ZoVrZN0+cA<s&bd`
+%c[G:3LYK=#79`(cZARpHnS7W"r&D.&0lQFMfp#d at aq"cIkHR4Xlb<]Fb&.AE/!Ib*b0oI[g?3%M&-o?(9W(@NP5q"IW_4*S<(+uR
+%_*hR4`8\9YOELL=[IgL at Gi)o_'@q&E<oHJFR1g*R6MUaY#ePJAQO8$^,H<l[;#U'._dE-2E5jL35fW6]<X&l:,oj?AW"j$adDDa%
+%VL0ku43Yl at H!\;g<OrQD63'li$.J at dm_H5;^7X0>e'DXZOJB0m:aCCt4K4Fq.VB8.Wd5Ar9US24J+3_2G%8]3Kl_*VAah1F;H=a]
+%C5D7e,t^CE/S5mGrTPS5!/h:QN\W/>)FZE(3eTU]^u-Weh,3DenQt-4_L(E<1sj<De=r7s(oM,b&I=u?E8(GnqtZ8 at btdH+`$3(.
+%I at C<mIXel$^E at F=Q&-"SH-,lmd<?:`ONU=aKSo=n15ffAeI]H2NLR%J(u&gq]g>MH#D-'CXeo8J at sWmOc>@W-c9^Yul"5Rsl^jRu
+%#WQmq0*fe;GMoq[U.KEpb0of)5l9lrFu0H?aP$6iA#nqMk-I6V%3:3W7EaI5n*?[Q>>DQ.FV2n at MTcaOM4dC>(Mff8QH<4.$%mGn
+%J$3EU/EtWE9e5Zu$O"(dmXTKj=(*E,C`tf0fQDd]LO:?:5X(B,YG7 at LfL*a>XlkH;-\5dKbieTT*8=5?]Jr2k&j=fVE=$M7'c!FF
+%E%\no>C]H*rnM^UrRUOd:DG8'*VeV/-_IN"/+r66Hg['Ci^a`;!4X"fDM_Bb[.4:00Ct?Yb_,[;(Zt<'hH&-b2WCfA,]AX"S0/o[
+%ZfF=2JsetfBmT`M&7f`)$"3r'/TM`'G6'c44h1D^4*JkZpQ at c)\P!YqE)jJ1 at YRh&ahl^G0sWi0F(8,LcfJ`<LYD.hnkqE$B+\?*
+%D1J5<F(1KicO'Oaje<tH,Q$c;@d^#mO0&s,B/aXk[&2m1m9oZIKg?pI'Ta!MXJNEbg3B`TUW,SC#mCcL_usJRMU/qNMnAVOeSdka
+%p&\?eYb)EAC8kG("4HK\,eAd\]%&H^3&k]H5$%pTiOlBq?ou"3^a>dpCcl5j,&#XsrF@"T$D]Bub2^Nt6Vd^2amo+WKgu6ApceC!
+%LWQTs8k`Zu$%KLYoR!R at S$j05E7F3;Pem8Q'-GgAB=RGY12+WZGhb!AFjCRY780Z0E?OACiXL''f99i72F&'lgF\`\:akCj\JZPl
+%@78"d?E^GR6VZ;<CoDmKO&I^o1Lk.`P0U)e4b])%cmphX5?]CE&l^p^SY=A#Nlt&i/>;1?l#E0Xrd-s063$7bZ#ls*V'si-T/*l.
+%r(55'Hs[$i0&dlh"a&=^B$'AFjG)ak<p at 6L25_C;m;g#KVWD8.@^&6(_ at -aU*.uf5*$qh9)6-X$TIj,?7a!Qf>#_?6q*7VkAGW<2
+%ApYe,,f0l-iRj.t/M(Zg=-%CC<<rk<_P[0A/-$heiDWA#7WWGCIER)7Y`SNdor+G".uHq<M&H3E_aB6XDF);J/f`ri2CV*ML^OGr
+%i_ul_6E.B.<U2m9qJEjem@:>]EG_s,9=6`CKm9)QV:!;T$ab&a]g8sUIO!TN=$3R\\pV3omg`UT]$GAUnJYM,GIot/gP!!07^,;+
+%h*Ujj]dDS9-9,?t$m#m4Oo+XniZ8P/B54"jK97gs,V#>$a[FjoFD0(1CLoQfG,;Xe?>SYr`VgBJYAAQ_HD]al]n9sP!-L2"fnG+o
+%_J\dhnJ3STM9NI9ne48I,b<O5o3aTe0fCfDE:4Z7/h]8h;q+hZk,u08lT]'U'n=Q=%EjB.+nb)0?JYp>$fZ.B8Aq0,Yuib#eq29I
+%E=fIX*^H7,+%4Eb(^3?/\<4PEhiHc'32bnjOO^`uF7OJ3cK?-ch2k.c/)ZE"Ftor1Z;!=0iBfIl"mQaQ8EFFBM,M>,"lC)s9c@^.
+%*n9)F%FYjZ8SaNh)Zqs**_UR<.URb2#eMTh-L"F<gaP&M`?O*_R_pMYZ#YEU,o$Vp25ph/?2d#FpLXmu3Z&jf7S5Q)AR=u\0JTnR
+%]bQhL:j.M]+N[hH9;j>M6fNq,T'5[!af*p.\8DHIihXFN"oBp@;.Y_M[s;I2Pc.rG9IaJ=5:L_o&e9[T?b.3a'5YC-"0;:YEA!$-
+%hXe%Yis]IMS`/Qm2APrEN5I.NkS+ReQ@>G`7"guZ_C/he%BRbPFL2X43q,)1Rq67jO/iXN>&^YGZt+0\#+Fu2?"sjW((<E91L1q2
+%.5^`l'.s.Ahs(!@!C at r*H+DB"!Xn8^leh7:^.-;a[5[bG`Z6n1:r!N1_G#$"$)Ei"GuS_8is(fJi!)u?_qr1qZKBBf3,2mA'nKj1
+%Ui6<-5).j":9!2Wd+g[Y41+R9(+q:Q^m/*J5B`j_+iJ3/$(""*$YocKB^thf('T&DA+eC6WZ*k6PU?P=*s=r7S&]@K3AFR[Rr(nV
+%"U2L=QpjbY:'X8uGLnl2PW'[sMcJLXm at _I]nX4t^)a_8HYg#d*d#Gi`6l-cd&>1eB'?f5a`IY5K?4c()[%LV5=#j;OF&O'6#3.[V
+%Nrc/Vq_kcI]?`eEd*rojPT%j+2p"HHV=5<Zb\a&S^]V;-4n]eR(97(a9K3</Qf4(#Gu2JRU7WJ5/5P!6hW&XWARY<5arnuk6\(q^
+%CCHUYD.!!M at Cb^4$FSf23Z),Z,A;/)LDB/jMSGLiH[04ZGtc2,A)!6gWiq?JB%S<^&Y"[[%VGTV$>$s1 at 3Cj%Cog:L9b#jqMOWFN
+%9R5+G:?PEYLJ89\jR$#8(9SYUb8_;1E0',jgI3[r,qP!L<GL^AHZiB'="g0*et4R=+OM0X?aGWH,>63iLUtI?ZRQ&'&U??>BPqrP
+%OL'X%]N'.loF^7)ahFGXN?Htm^FnsX9"]Rie&FX58/[;5dn5;<JCujZdVVb'WV=!gj5BKOFb>Yed- at OahZAK<NG="eSTb!G,P at NP
+%ZC_S>@<rp]d-ZY3F-7&=f:`e/<2VLC%7$]M,K68K_abk:(GgsiZ_J!@:mo=[#!@!jG7f2b_je52cU&as'L10'qAKb#DkA&1`^44I
+%iLmNg8"rn(iROXYh1Z"IR:hcD:O527JpVsTU4'MM''h4#6B+^&_Y&J at ZNkVXP9F.q;&ATS at pE1K+gml>j[p<GB>9Dm3i>f1c?:`L
+%s#Kgbf,q.YX4+c!LdstA8\qCK!tSgKaU17u4pM"Clta/<UYunaW0-t2)h#sL:Qj[roQZG@@(@YGVVV&<FLYSI8Ziqgn?R#_9(%`q
+%1FhD1771Qsc?.KYpE(-]_'g#QQlY+1i?e2r6D9^'(-K<7UBT_Bl`=sQD?Ql,WshKF"-Q1JG=iI0j874SKdrei2RJ>:Whmh'LU9fF
+%kJ<&SK'W6,)iF5SVpICL]W]Z/qb'n<9'b.&&n,_iG?L4*,s8p$HZuLM at g1(ELA(F3I/Ss^+N.[BW^59fE-a(,"7R.WHh1=_iN2O&
+%\835UNo6qYW,24=qZ,X..?:rPhmsim0.HBf/74DcA:5'6NJ9#JJBC,\[2DYjO)ECkB[^CGCnkfooCLBSiWo1XU)%'``[rU[X;RuA
+%1)"g5c0_5org5San_K.BDIEOLYB[GIn0$ZL]ODrU at W[A at 2na5'Mu7OHTK>`DI*OcEc,#*L/%YQ$Q*4OW2>1:KKR'&L5fISlVQ#7K
+%cu1^=[U6ZX_n58QH(Ygh:J;.HAE,FJ&!%!+*cV,dlZZ&O(-d"X;CH-b]?T>dK3I*%#U&L<OQO4EBu*]T(iH037P1u\5nQ0cL&Pt5
+%KqhtHDeuli2PDd#](P'sH-=Qm*]C,FEWaa:C89mML7S5h11tbe/GNh8*b[-oK:JAP>YrhuF#Db3]"<.,R*02Z%V,i(V(BSOgtpXV
+%h>5fTdT9M^A]O"nMGihf0EXbR`LielJAJ0*?#EtO<e))ZnSBkqCZ1>:WFD-P;4!fdh5nF`(B at NHnRmMpWs,cH$KY:K<X#jWn[/m6
+%i5<^>AC7hn1-m[X^SG(TU>FPd9;r5Z*Asqe/,QDTa-iT8d4p?5YSa*uH>\C'o-\M>e[L<-/jFaMq+8s#Fa=G-g"7QI?U`cI&nZ]1
+%G'JCt[()fX;L%Q,:^UPDfEFioA4cZRG?EJc4Kb_VErgIL&^NZM:8VCP<"skZE3o<r7Q@]EFT\`efl*cN(HJ8[Il+k1>V.mBjj-:3
+%I<$:$eR0%>^@Os4(H,rX at q-:)mh>*"2UYp/0Y>0hfOj#4ctGIAkPeMJ*I:qQAtdAS0]M+BDsLuIe'l`A3*M3GXns_<!H.VLO.Djs
+%04PrfcsKl0)qf,)[(bUA=:1RF9$Dlf$fT#if4OO)m(4I=(G*FpHt'K'C&pbrIbQgs6#F>LgK=XLPfO&CSeoY+4WQuL^0m(1q'#`?
+%X&HRfb>j,u^$;k\84_pUWKt%^jV6d2, at 4K=W!MVKZgp?*AI'0*34WAXlP,X0*8ZOj)+o]F at _Pb0U>LX8,Tu,.>+ at a'r&+&4%RN?U
+%[N\pUf0RY,-Xh>fg069\N>Q(@`J'80.Hu[IoU#_t'9Q8]JqtdF9qL&F$J4D\R'S];*@leu_UY":-Q:n_$Jn:JU?sh)e`^uWPc]TN
+%CfbjMWq9,+0 at AX.Ph\WEa$UYd3?k&Ml]2>aAaNI^McrG=/P-\CGTQffXWo>\,kGB#ne[M5oRadjOBe3V75;0eZ^mt*cr>MmH!.kn
+%$pmGd$g&N*%6Zk$>+Am(/CAf9=ES85$_\<P<ID4d%AU.Aaq&eT^3L)J at k/?VaNFjQ,r(?Mi<U7s#WoACR&"hrR<[>JiD6]mpS$]-
+%Kkj!MXQXQn73C8!Jr^F<$X$BPBU/E4lSB(?Y+EAiLDXm;T[YZj,]<U&Ho`K,V'fXCSVUTqeeFFPq`_KEE_sX??BjMt>0]O3S':#A
+%F<?a;_FnBc2_1$QTXOp,U5lea$aSmi12T7l5b"VRd)CW(]c_(m6VG65G4&gR"j9LIKq6=OKpX/#H'$;8=cG4B,,AUm2_3?`Q7_==
+%kX\&lF9J/%l3IqYXnd!).")nPKr?.WOp7ID_t+V!%%j%Be6Uq9&^^iqG'l/KCVdEUI*R"[DHE+a:dHR`W`C,u1n[>KL<s2?DYL`)
+%Jb^qgr2I:!elFo_:fU/\bI!1T?dq^<#1ma8.]ZH13SR,3 at CtrdmEr+:<ep6AS_++#Vc&sQA1s\Y>/*Q)*,0?AdKGdn\&RAbGiqF0
+%RnUg+KK@[o at li#ET=t_gn+g,T#YtIGZ3P5?\d8r6a3sA,`Upk4l0*@u/1nI!BAanY%^4]Dnb;Tn=peAVp0(EGT\UBd3P9a>5.>ds
+%(:2H)UAL&RfSX<&,8EJ4*pbo1BAQ5->9g/^$*E<-n`3BKUk3'rF-5T;\tSK[(7o2])/1_nYa_oL4]M]iBdOE/(.`Lr6g[7ADoD#4
+%qN"qD3Pl7*2^u(P[!9ru>/f&K[[JoZ-B6YYl)W!5ae4b@*hAKt*,Odt4?Hp/:aAdWe'm^I3dfZHrl$/tlR=#FQUR0kI"r7g!+:_)
+%>a#*"KP.X;_ at +B!#_Y8Qr$d\2ip8+[:=9>[lfJ'`4e-n(BPdCi_EPIFbbK,Q:&$c5ql_]go9,$G0*_$TI!,5s'B)Mr?u7rPqcJ=r
+%I'88LN^3u$lRZAI?tS'SX4nTZYUN$!psq;c_Gl)-3r+^T/J*6afGW:33a.Wug#G@!Vge3U>[G!@)5XPjbOu8cE^NNJ;d\9LhI;4$
+%;gLdE4GC,bN:GtB03d`dN\R6 at 2g,`WGonRdRmO0@=kE</0#S%h[Tm<&UNLK_Gk=XqA##r\hcV/$$2`"/lG7'qg[76FN,$-a2\A)d
+%T!Wlb>sZ2f5410t&BS(e$Q`nQA:DD"b2r(T^4UBRnXs2uDVsf&BBba"bFRXYJ*I%Ep%"1*(;ru%Z?oSN1a%AS/*$uI0SCU;4uRaa
+%IdBl^ISFO+05G,I079NVT+Zk3$XJ:u-5.2dET14*Y'b0iEA38D&aIs7KER$c&$;e'lJ1.a\an9eJnU/G&7)/@,6?t?Mft$Tc5&3V
+%mRFeSdn#89SgQ87:/..n\PU:[1J6i?(-6M;+s"MJg,21Fdh1l=UKnZ(ktsUBNKj293#T[[](eSe+\c(P<^9,(&f5:[,st&ro8=AD
+%2a]lr;l$5/cck\$N^>(0Ql8N=QnEU/eYo&l20U+AI at 7J5Q^\gp+S(Ju\2-YH5bq\$d0J:8N<!@K$'THf&2eXf'T]-Z at K=1s`aq/S
+%P3j+)*79cRp/-GuR+c7dbAFQ^,OQ\PfK#I7(hb>?J!_[Jo\6d"DC.O&XN-IR$fW>,U-SJ>gh&5r<A3/F.a+5_\bBqs?n!Em/Q3nA
+%FVZ_5XbV4>a;O!G)4d@&-fT"09#Y_ at b@\KT at Qed]EMej5Y`&02FJLqkb;o7_eHt at g'dApR;lq4%1<cd*n:&QmU;jP(cokH3h31#D
+%3rF]%4hl)7S[*P1L-S]h.UMGL^dhqB=/]VYc5 at pq)Ng^M,:fJu:C2W(Yh$e*-m+hGeS9Z<<sZLTp8Mt;DCc1=$Wu1)(eZSspq`_s
+%_[u;&P!s<r]KE[`jePFiMBl>GgqL=RgV5Fc4W3=<Ve(UI6N3'%[H7/Vj-M",!_-W[Hs$kp]SEm7bZ)1q(H_b^<PQ+W.2O<W*Q>j6
+%oM_OUkrnb`Zpu&6N[s[O6?N^G"nff"Eo6H^OG0I(JXjDmaZ\_&pkAYf(jWjM"eJ%V)MLXQ;&s@[\"Z%EgrRNn7VA!$'InoI]!5R^
+%`Q2Y$p0dCp'WSX_F,a5`lBd?d#'rt(LFD\.)Y/]KM'ItdED-*f$nBu.Ep>u=mo$pH_3\H546"e!VGEHC\rR)=<C^Sn+]+="8C.6&
+%G\ZDn<8c at Q?j_Op_l.sgHl&]LW;^16af;n;%SmVViGZ;<qEUWBBG*b0O3>/fP6d:YOE-:lgSi``h&-Z<72"9<:P8-C"LsW=e4GJ=
+%2n'imn7p3]lPD4'0Kb-U_Gh`aZe!*IWRID""iVM:1t#-+4B*Ku1Gjsd[_HJ%!fk>sLEX7l?E3,<dF1p>O at Uo.SUI<DaRC6`g`%cm
+%VC)_<6[TJ2UMXW-!::=sWoONUXf*+Pit at XJf3ZqT;o0RI)c<'62Nkt6kfk`pHQL.KHn*EJI-SGV?bu-o at jd@3B;%/SF*F;ZoiB<K
+%=m/S6c;R!oqXeaYPUA^6D+<"0?el(<M8M'9::38+2o:#[B8#'P(%_#N[]e:E*GmCcmP[uuoF]'"q)"#=X$na^3sf(0_\?0*LX]qj
+%L][25$i!K?Y4uVq;rcXm_ at P6\;<FRu\%<^\1-'D&n"2P*YNh^G=j&+&_;-/Bdq/^*ceZc4J:5u=(N6"dc8'-iBR,;m,grXVXo``9
+%nB6Qs2.sFQ-;F"iHHPqL1WVfl(R]U]k<;_k.>(>n`]ec`3IVVj+79]Ja$raqMZ;kp\PUO,^#k2S$\Wi!T'*</fZq`5h/#kH3V[dJ
+%L1g"T$f8E4j`MU[OV&K\Gnq1[rZ\>p;q\%Q<^cHUW?&aYi':WjTsTaTc-9Vi4s,09IW`3JOt=<_(>Eml\!)U6ME3l++U;IN%;%=&
+%]4Q90.lGZ\kSPtSOaC`7e87&b*p1J(<SD;8)m4bJ57u!b;m='LJa2L*mOt`*dYA#rA?WYt"b5,G4,;b`,Yb<LSDGoqk?G]E>!T<T
+%=s0X;a3%nF1<Vicf7rT0p-]#%%pq_+<[:55a>HIG8-FO)F\T>Zc*'&N)?.iRMQg<LNFurML[VM$0'OWEH`55j!NHD81^cCqk.V^B
+%&5)R]346^fmMN'2\i#(c(,_'QC0Sho^d15g9Bd9p0=u2NW\"Q:'B>U$/lu!Wd:(A-CS'%?_?Ol%REmuD]2R*lN3N/f$;F`,<gHmH
+%X66.2.2m/Hi<ZUqIP%:ia%isfY6uhG`u($sNb5sSbX&5"-R!SDBJtL1M:q-23*Km@\KpYbaVuu[.8hgC9HEmH>9$4.8]8N4_rp8O
+%e$J$Tqf-u!TC)8AO at o>sbE8QdIA[tV-lGK:XlV.L2m^Jplt'4@>Y/LO^=VJ+rMl.+M]FF"?bk,#%_BCnKki\&,C0B=QtIYD_Uamr
+%,OKWTCKC9%gl5>EcUq80g55nT;;CB/-lhK7<USN at 4&ZSQ=$:Wjb$s,="X@"'I2K[3c#$7Md/e7.SlLe5l)\AT`nCmo'$3.J4",u!
+%58qOol8>TVFY38P%dU#!^29-!08Ktt4V,+mYAb\U`qG88&9#prk at SV4%+emLni1"IrZbq)CumA9JZPETKNHhCj4Hr!BrAEA?b8bL
+%?Huk?lKMgC#Hr)nr;G at iJ6P3!.YWSBKnr[&[O>FpT/6$PcpapWo.(m9kGq90-Pl=`3hF2JL9o9WDX#&%IsNh5GO)-*nTl]kj"s+`
+%@"qW:Y.VQRn[Vg:37c]*ReaO7N%A[q\W?6I`t(T7UVf7?CN5\,(fK"\Hl^B0MuW`C]/PAaWs*e>qr++dF>(f)NFO)==Z2qm]YV!<
+%[,V6E0Ia3p["*>tJer81CIQ,,:gkDB[(AX6N,_-^aLfT"W/PmAHT%XG#Rn;aGL3F"ba>!LGpj._KLE767o7p7Q%0?e[7*'.aaTCj
+%W1MQ;;XsZ:g71 at V3Ni]RN.+sDn;,p:7tX>gHOH,]b%Zp\$-Wf&3X/+i3&a1RYoN3&rAjM>0aiD3$eAhVc2bGcYG,CPV at l5sF@RQ3
+%kCmQ=aeXR.G=hJW_-8XK`(0/1DkL'b,J+.3<ZKsIJd_ur+BECLWb9^uMm at hdddUM0Ia<7I(JJ1#_j8%KJ+%"eOGgtL=q!1>Uml,I
+%&>n'>>Z$iR#G"$$?<miXc`);@R)?dr/Xq*OI>G1NIuVZpJO?Y at 7h$ZBg+OTfi at 7L("Kk6;9pm0OHl`bN5\sEimn\q<6tBI+'%S8O
+%lF#q9iCUK34>(F025A9FXdZBNV:_AmqJ'lV[^M_`h8IqQ8+'G?$sD>21f&\p12m)4M6u],hO at BQ,'CA%Y]4^R93SKr'sLT%'MUa_
+%d&[&GR/DKh]6=&JG^;Z2AO.]!GOVX%'OfX^h"#u)Cf)VdK_+F=)iH%5N:/Uf4Lr!0b:Wtrcc-Qg3FFHPhem0Ha3U at f*jn6 at c-`WJ
+%\+Dema#K6_<u->TLn;*:fqNmT at dD]3Toen3\O#O_5CSWE#c6*TaNeQ5U;$*dk9!DV'suiRR#i-Y(RjZS_W<pP?<T@'TMW/'2#7X1
+%f>EDH-.D7MFuIM8&q8&GX_TlR50kJI)!\i9B7,&W$C]5R;ANZm>tBNZ<nk.Y_>G"\r0BX=X#k]PU8$G<kppMsT',XP#7t_7XbVD>
+%YE;*^-T]+`3<\V8,sm8j'.a"O:X)9mDuD at PFE!)((hAC,+c`dV"cQrOmMn]u,Ke7O9SGH][shmY*a-AG>=9pg0+i?N/uqfo#(E9N
+%>5Z(V_l(-nT7su<C%le!m(ZUc*-QN66ko_BDJ\_/oO&XK at HY-W@l`PnS<7lA'*dnUJ$(aB+^C+[W8dDV)=2.^mqWM)E$oDqMF977
+%6"I<I`7j/gJJ;E237)YoU70Jm1AAK1FbNu"NepgC4A*q\W#U0P_+bl!7q2=<0h=ED,PP+eRUEo\mZTg+*$->"efrg9"CtO"L/#C!
+%m4l7/`i9WV\"Sbi.>g\1W`3RKJQ"BU5d&9eWsLd1#>_''+J9$,'rW_I\@.9`7_>s0/](S:CpFSr[9pSQ&$trrp87DN`Y+:b#Q/-l
+%">GM-Y@(3h4XLm2!:gl;Bop/R1"5X]O)*g3R[<@1kO5I!0^j;k7!$#64glomgoi?>jg<pXVAE(6YK5&dqG-Xjs$9AhVhXV\>)ns4
+%k&=;0')AUb&pOih9:,?6W+R'`UC"oc-8PH#d;dp4IQrG=,Dr=8R.*6s/#m6g_b!Nl\QC^Wmsp,5%oN84@$uWGoK at rU4.^mb3nC&-
+%&hlI=5jA#nHE.XjJ["lrq,kLXE(H#S(r<d/HW8&9%=uk.c9`L(qsWu:F+&83p;q]H"I*seg"_]ilt5u>>YYdTCs`XtCY_EE00aX@
+%cqM4-b:`RCU5!9'GLiK,8t?']X-[?WIK^'o]TU[k at L>6mDQV.to7:h$5VeS_+)cP)CDkI3$fC[%omdT-']GE>\Z!3;o!?KMgoRpC
+%\*s!-Z?VWT;5gG;$[G6b!fNs?6p*&.I(U4t;A^mqO40[eg$@l:r3.![WL<eA5Miff;1P1Fc[tW*RPmLPMYA-?a`5t2FqA0b3gRIT
+%nu8\IG#5D#n!=cV7o6FM<F!g?8VpXJ'T#$c<j/RJqdkfmI/g_6V3V,18>3JaHZ09ncKkg\2G;FV99eCu.,VK8'^5&G2q=nZSJ?XY
+%'I5`K7Kc,4JU\$_JWko&nQt\Vn]$:tc7h:!25[0kH8US9HmCZ2%I.Fl#!n+K;8pjm6GWbk(Pp5XKZTM)[eWegdiB1>f))Mk<HnZM
+%cqC'W+>Dn_mf(SBk]I1k/YLfd(qH?/gH?LmW<7G2E&X+j48,A#MqBZW&e3nE.mQKZ8p_V.co!>2JYG!@ncdO.`tG2H*V,r9&MT(R
+%0#r_?a3A[jd2-`[i<Q,.ol?,<9==jR$,9Ll<Y,QIY/9JLAZ5f2YXVkJ4guC]@:]O\Q&S<e!j\CBf[%+G8Ne8&oc><(BI3p@!fNq[
+%phsdu2$[HnWp<2Dfsi+.,9Lp,LN_[n<Wc(!ge@*NX at hT"UKkL at nlq'Y'r/=\+pDcb:,n^RP0cRGH'%!q#@I0d`Jf-BRi0.AQE9GU
+%f<V=+0^TnAF&XL5&Kotn%3569WFbtO)dV&[T=M$&Z^AAGfk,nOi6O5d7hS2O.H7q#J%a$\+[bgOF(sbWn[0)cH+hPcAL)F'>"G72
+%WnRmQ+?q-HGg?^"Otgju,QcC(pf%SP/'=5 at X1S>K:Y3ZqatgJ*Q3ds*!#nbW:%?[M8i_1^ZSn>%D"\K%i[nn?K"G85V!HpP>Xhb.
+%jRjR\1c\\V+_Q at Y1[LYojP3T$*aRq\<@6G>T.b67(Li$RA>ll^hZJ&&*W182*dmj=#kfese/BHW`bc%q at kQB,JinMYQ$AkSP_c_5
+%iAuoa2.bp at fP4QLI`T7Y(GX%fbQYIB12F4<nchE_p&"/jUtD@*fItF9[RP%*qUk:&. at eC`I2k=eeAM_s/LDjtNX:[NSLfKg#V][1
+%f=).&h=mge+p+(&/;6UgAdPk]6=[FV6M4ck*8+L<BUT8!8ksiF7"0sj7ip'_d2YhtmSD!M.rc4ppJ<8Qilt#j?Rt-4[#:APPE"AW
+%%mlCAJm"bd65W=ho5J<d!Zogi3YV.!')#J?o6mN^C#S8"83RJ#G./[1=B*H:Eha3A18J1Kr-@>G4E;'S[2ErX#4Q#<``SX*3*aGI
+%BmuI`TfSI:eXo_$N/r[Y#_cuU)cEe-"+?@'1:&V.rc++9qpm;ROP8JA,c&GC- at 1O*'%jHV1tCa31mrTkQSO-A5c0:o/D)2m>2?!a
+%"5jCE*F8V_f$H.A[kh/M3Q9",9pt5N&sld8b_-9L)o)"^(>-:Fo8sQGpeKkAL!2Q1);-]H?QpGtYdaVeE[J.`(GJWUVg:l7<.X\6
+%_Tl,!'!fAAV\TKmXI%dIZR,/%@8A;oef]P2A5gm0bI<4]A&%05j?j4)7NQk,Y#jM[aOZ&U9\.THKo9cVP7LSi_BokN.o*#IJ,rNG
+%"LFJ_Ta?TrAu?VjjTcbV'ES`G3tF(BA$jLXoJ7A3Z-lO[%dIjsbAa[=XU%lX2"TAP<Dpb&C^d5TnCqC\Yh"LoenlC$LVi5K)8GmQ
+%!OtkqGS']s5^87%p,_uh>p22Q_Hb\#Q@"@Ll@:>8.9*hcpDg_I:"[MfI)&NA4"p at 5qNk:d.l]H_0`D_!(?F\Jn.78>ri+)q_8I3E
+%!Ac)/flCkNDAls=*G&.$B<IS<TUEVrGKfpm9VIU+[_YoSP/C";C#RAKW?/]oD7OZ:QfT-fd;/jT\gRB;Dn'"a:V$:pFCC$6*#U^h
+%NO3W]Ttggmhl1eb:M%=9TA23?Ipa(E#.Ip_g7(6]N0TX:R@$kB/X#jrAW+QNDXo:,KGVm\rU>AC%G\R<:($]G=-Th^<W!"XqiQX,
+%W$,R+59?nGKQ+3UDf9V:#K.ab>G_O&2u7=H6P(0X.YJ(sN-]2=/V*D$5+Dj.'&qd*Heb4>f0O@;,$m"'C%cF6[VnkQR`4i<)SZ.9
+%)f"-$e&q.:>[38.*8N2:m&0fiq&c6JCuchMP;oi]?P'\A\lig>XF/p_5JQp_WKe"^,qO)N?aOaGQ\]4AfLh4b#b#hWj9CA.olVc,
+%hoku1L(!\0c(`m:r4K\krM8k2n<smD_7K*l*ZnlQpg9Z.muFsKWh#3Bd'sg`EBNO0,6T,o.\3#gI9<rUda at 6$IV,DbC+8#6S`L.,
+%aU at SfDIL%E?-)?5=p:e.)/joQSUWG7efnA6aU&5EP'InCoG1QMeXAX//^\GsNbAIP3D-3N.566'G&*RL?o)$TC9Su at 00V4Z?b-UJ
+%pc at hDdaKK>ll%l';ceBL#Kld%BR`-nmi2194!2'(D,FJXe(H'02U!_dLpda65A"JY$+me$FqhjTAmXl-;cm((&%ecq(T)$XdT8#J
+%Fh'H:m:q"g/hT)uT1AX<4+U\0A^j at ShHW6VcBf]&Fa5Fm+eg3Ln7[m#!TcYZT$8qF^m8=kp0YE<+1h0nA"V`G]5O8)hTF#-^OFpc
+%Fgh:[p_kTJ?`u3=m."S_rkIa8#EKJc/a<)RS<CA%pJrTC$AE>W9VE2u5CRl;N""f`[#=iR."1sILCYCN9sAs)bPOB&$29,L]DUZ.
+%$kMaMhN9>`bB!b*%c*V)/8eP(nT,L1H6JCU19Xu2F86aGg7,:lEe at a!qV9ACEc:,nGG7=KbPBMfHR%f>aVu5Xk)KFQ^dU<[fJ2XX
+%mgEpC?N&Bo?_?5`@1!UZbkYcUFDic9eF1Z2<<-C^kgNueVo`,>8%WWTL/Zq<89d3.-'JGXh2S<DV9`Gm\fd+rjl`Ta9qGjXfUTek
+%m_33<I["sZQ.Ed!+#Qksra^$OBee:-2V<1.;cpVXB.]+7ce8FoX!&94WK'atK&ObpGC<4)8s\`/PDbi7aGVU&m&mmj9o-1SmBjQ]
+%bDrsq7BG<Td2VGTCGoAfbn4`>9pK2g5+TIU0sjmo(g'7SBeruS86+LqQbhT]k_/;27i'Sjd[<03-o^*M:5fK2n+"ptqO(VP]Fkc`
+%[4W<cai"'3%L9-oT`q;QL<P at a$YRTYrci,PB7=P7+F at A>,==d(pB&b[)@$l3HI0]C?#^%=B+:qG7?!)('[lu&MJD=nn,LU$re'\<
+%n.[C:-Q`:T:d8$:qIR at r&Sg2`gH1#ha4&)]_ at 3AW]J"X$1TTfq,$q1_fR!C*BOBZmre%Drg0'TJ6Se")Fn61pb'8[a>aDG'p&$6p
+%nrPEQ)jFFe\&-HMGrHQRqma+&*tuuL^0D^IgTOsL*3:cHC'ahR)N':J^"(fmHBgEm]T"%pV;#YHp&RX:PjFDP!L$]\B&/>Z5m]Y8
+%N!1Bq<eeZ!VVNZ9i'*KbX(:]%C&kn*]Dt+CCVk5dqmH at 7$6O-1=Xi(9oJ#uEC41!enb&I!5MA0Q^O+^Y(1PS0,nfsH6g5Gj&Mo';
+%&I*a8njcKP<F%+-3#t?3j<Jt,/mUE]gW,s7/<>VF>>9VS/cN9cq8HPtC9RC,-J6i%_pG$%p;'*<Yde;Y`9]MV!AndP.o1f=:;jA/
+%?OV64"d_nrjj9oE7d_5WoP0A..QN-F4S=LrUJPQJDNKF+3)^U>=/U9u1Yh%l]hW"uA1Z\,5fd2Xqp9).e:8_"@<]Pqd\rIXLJ,-R
+%BR53GT)D;43fOm`QJR)815mZPePq5KH04Y]hH:08!ke6(7ub:Ld'p>^aXl2jA=^gCUqD^:Y`0<TZ.:&X'>k)j)-/N2>gkl-*T-D6
+%9<St*B"iSp)RE_N!->7o09s;>_L'ca\JgGEOofLtDMVV`eJ(;g<:FJ*QOS+oRN,mih-*7hg.K*CbF\=C.^Si1 at ji,lU.X(E(^OBu
+%BsbJ$j"b?&,(Kg#,Uq#L[@+8!(a$Y_QI"L.0%#3C>a`6Hhff:D[D0EC44LR3f_?Ie16s(k"Yje+Mk*L(.3pabI;+&i'Xg`<IJXlZ
+%ahr>j.$B_5p:?_&W-2Dad"V`qn^<j,Lt=jdQ/3EuLK`JNbf\os[EoWKK:J4S-9Q5 at 8g3f-fW==\5XBq5ShD)13gtC.""&Wr.84!/
+%;cm;f20\CP2H0B66"S,"X]\e%%3`kC\FH#&ZgGqh$o(NPW;]E,a0\)@J=hBbbDVpX7AEP;[/3HR-sZ_]J*L/T_mi,"Vs at uZ]Nk<n
+%k&3YPUM1g%KW\N_RhZgh/I5CfW?q`,adT>W?8jjUg6Ra`WDGR,k,AWW&2SS#EJ1u*.N/DI*)4SR/f3*GUqJ=Rqop(I1sA_nQSj8C
+%Y&&<I#gbeW'1!JF%[X_\>+P;W"5]%bkX>N]GQU3bcarfWqT&IC!$5M+a'J%\\$#F!\SFP_Y3r%m!)cGSXrVY&:&.%.<YT2c55)Xk
+%8g#2]OZ[G?EB[b9i<(\!Bbk[+$N2)Be\DhZeLqOb>h-Y/]-Q]cB-F4\MN47d2Vg#AA/+:N29$;h@<^=J;S'lpRCTbZO at LJ=o2B81
+%\f-*_dk^=A&o3VP.ksKA!apH3<J3G^^A0$2dg#+LM7'`@;r2R!mCV)1*(`EsG+F8Df?%dS4BJaZ*Q?js+0#E\H,-"THoqr0"e(NQ
+%hQP.s&%8rL>G3L'Eir=N6a=d at -GNXbWN+;!Q?Couf1\MpbNH*k4.H3/2;P<5A8OI'i1j#h&OXCGV_BR'El(_AE--FVJrZ2C7tXLt
+%&ZpeS,+I$=[?$e;2.2c_Q5e&0!t+sFZc`VRp%Q_rF0/G?l'Z?_C5s2m/qB7#-EK&]2uih[BRP^RK0n=?-FC'R$<J+J$l6No**C<G
+%h[N\Pk;I80e]ID&rp6d.9K-?GX:+.BMo`9]MtVh*]3VS/!r1EZWu=P`^A-SmjC<K)^qdF%#p%iM-+B1uYIOK>4u6B2jgKJ;^t9X+
+%5HWQ0ad,fn37+;PJ)h2ufReEsHLg*P$5pi0>*\VAjK"(^a)T(d]K"\Or:pu$0uIO4[L-A4m2'7[Z;Q&BNsYBu<7PI0K]?Tm^>uJP
+%h&TcLSOVWbZr+c!Eq at Vh4F(i#ggtUJ15#-UO3EI7f&`_>mAc._@;QOK0dR=UJsCuY8k*urZf9k;<i\FlQ&U0@"ds/Sjo/`C*c,<m
+%m#`2:;b#l-4/JC_VPF;c]L;>)C%Sls7EbHVjN"3j_jY-\QCZYHrHEC/s7O6tTDNP42WA7U7[TO'l/9RL5!IfRb3IgOZ]?l^2P1Yf
+%008qRN$n3lmrl/*LHOj1^le#oD(O`Fmc/a+:uMRNqoaCt)Xpl#Ht>=EXk%?7UY=C%i`n,#m+u\nU=jr%136bY#u#_rl at Ql?:7o=Q
+%g%1"AHQ$mo:Ld[j-ff+[bU)c/j_]:d_Zpg0h_:^X$Z#0N"rO at 7[&bO%hk&59 at K=\]2J`?bpi1IgFVT3t#3:o9Is4O*m0AXja37=S
+%#Me;2o^ft`Uf(Ck?k2\XngUUE)F$*7r6;'g0.jX_4;GI3b2&,Q+(K-7D%*Po\ENHb:8tJ-_^r6]mmb at h2=UXbNULIP2;@upd1DuG
+%la+)_!T6<qn&a,(#H'L3]gLn8gS$$A%:i0sl6">]hGl(,ICh*j_S+ct43ADP7HuhOjk%OIX6]J!]m-.Ml&Ng$RB'fk$h-;jBmt\?
+%185YuI=08Nhr/8P^PC%!jAU&hU2.NMP)s%"s7&bYgB+9W_5_9hO,DHW1iFji4+m&Ld$:6+O0)f.2oYd+`#\^$KqI8nQ!NK7I=!-`
+%;%_s-bJ_?=](s(EYo1p#cI[3J?d?h^(I!.\DRHVt2o[g\Hg7:D:Kb3_pCCJcpkG8P(Fs.aK:C5W]PeGE4Pf^edJR_E&XiPss$-ML
+%5$0mdG29mDO at VOUXhO\uF$&j4]q(eoXLBt]`@-4_e,ek*UJ7)ID6uu/Zc<=)rSsnCh0'GrpYhn!nS/)2#H>;Q#OCV&l_/qI=a"iM
+%RostTN,,cS`'&5#k>u:WW>]K at oR3`VA.SKm&+R3.Aj3fO",M:&]B2FVW[jfKjYD6k?(;c\H]UHLoC;NZ3m-Pe&r/sELQttb6K(hL
+%3XOL"@ZG4Fj2gR_US`,tQnE<M`t!LdM4'KNM/koCI_WGK.)Ko+';2AOVKWIEG"uK="??0hNokL&@VMHP+j_\!j6c9-:m%4tpl`aG
+%XUjm/=g+DE9ef0lf6ir1oes"/2l4 at Z2)TaE&c=`t+.8dX<@l45<OCIV4!H81\T=);h'),Bo7IMHG9qMHNL+k(o94NRK.5E*WHljQ
+%<;-!86U";R&<)o%+,"GQ9]0P6-9 at 1G]omSWJUE8LfQF;6O!:@b5-YYn"R!J0ir&ObBp.YU*9gjSeQn4_6:0%9=BR"_H!KHb59TN!
+%Xp;-A'_:\ZH<Q)b?>)R+^7!k"mXN.;/U?(SpWl'-ICX&Q_/E:+M30i'kRR=`f at QYpr)QG\8;92_hct%MfXD8!*"'\kXtERjT_,:g
+%-B<u,0,rG?"L%!,[jkfCYiW41%17cK/GF72UA#Oc)#[4S]'IH_HSE=uOl'_H<T-RX1%""Z$:Z-$eTc!P(LL/4-q,8Hh$,SB at H2e>
+%`SMF at D"TRDdol*5=phn!'pmnI.3AR]!EiRjC19l^K!uM at n4'#aenr"dEiI<AepBoS<nlZWWR(GehS)/D_e at X4q^mISB:0P>H(Ta)
+%F[UQ\DE`DpCQUnfN[`Pu(JFVinLV&[1XWDsn59=SduShJ>,\>tp;'c5K"Cc$e%`FUVl;t.']cnDef#'2_'tm1Np?lT6!<RFfoHo?
+%IdYO3Aucm4(-,_;0A[^q3+2\^>Sd<L^.3P^?f,S[UWm[8YPi\&_MmpSTpPMWQ^:gfB]OeaM&1Afn*<D3a1'+$6LooL)6pZ!Z<%aJ
+%h)1_`?QV/A?A?KBHuVR+L:;Hno'b1k0)_,ajE=qjaLMMe"Y$(Ys(L.3/ulrlo;cI83p:2/?'fS=N&ML at eF3]e*,15bQ1h';qse[j
+%jB\]I0rlNUh,?sbo!-g+eqb]UhR_[fGL(^7pal(".BV1=84%N1A5E'&cTeul*n`i%5-;fk,4W(N$WG\$qeinHmh\S[b5Kte!CFP,
+%VYo"[^V"rc](YY!BTD-$n],s+#H`.Er#N&MnoFnAA-<O+MuJ!Cq)f^Z1$*H?p`b08Vk'I[E<<pa^D at lZj?`-2HoLgBjnEA9mM.15
+%?-\5LRu;tXq/B295I]SD$b>+]+7.19A(lEVgJgVuM#k]^a5F_DF-g2#k,3Ae</$ch1lCJGYFI5Z9qO-$g4qiQ'Ak_CkUE=Fef/nf
+%njb'^HBJV;>Ym`Uk2O9D8B(Wm3>#Tuf?B2 at +oH-`NEsGTFnJ9oO)P*iiL"H:g*u'k/M]s"UM4Tm_#Ptp]UTMN,1,9)X!a2k<kKTU
+%^EPPCYgs+$f\*kGT^q5[\b6eq\2NsAGR^,6o/2Bt'O'=WqG9INJ`Rj/h\qW%Y9X\KNujn:J"O[jFu$mdf at 4T2j-"gG*67YUV377S
+%A]W;P_]HrR"uAjD\ZhmiE0q8DF0?/m2jr2TH5&hd1I`I at a*'<<\JNV2Q`pE'Kre/W;[i.bj6m^%*?]_I&+8C28Ou=EeXtJ&Zl2-"
+%95aj`?d!j%%P]!:R)+hgTc5I?Y*!f'>63LYroGg4@!j5Up[QQ2nX^-a6O,UpgUST(GF1l,RTPH^5)?K)Gm,@)[.9f92tO*=+F'Nn
+%!.NTF^*9>$Huo+8$DfkK#KG[sV\94SjBG<t:T#kPk?j_6!86!kO1uJ7Pp)"RLCUgg8=8I-T?/[J5^k$N9:Kl?7D`(6df%,r^8J"t
+%)RAKB5?SAah9O<=M%OV\ePfdG4$'9li^7naVrYTcq)UfJECfm[6s&JLcRE3*A#1UeXtBd#7qH97X08F>lZ2j"gnP5f,P^IO.Kg(j
+%=dZNI!-:.]mKD'*EmDsV`>TU-VNE\Q[16ho!,P=#gmRKUCi@:Hfpf[!iT#-579-i at F)$%<bVYh0CliZX_X=2 at HYIViEMPu@FI//d
+%^t*k at BA(Hk0O+6l9&;fu;BO3IAT2bKRpbbJCGeX,Pa#N)_R&?nk[=OA^)=At65&36TAVbXS$0NuZXsJL[[>tkZU#E0S\;""'=.Jt
+%(uVq/A.:Aum'9ED4bcP2!RPopb7ISbd4\2G8G$UA_SJ/?l at G4jcF8s^&<L/5\-mWaZ3Fe8m_[q!>JOjoe&dbA%g6:ST\Aod!0sP?
+%/RpJ7"2ia.Ln.'F#^k)b`BckTiY69JCd\s&n9+"Y4f">d(D.4=S_;SGYr_'SBaD*Ok:0Lc#jRJUr5NIaolTsL;JL@^q&u[8.>N!"
+%BhG_^+.?#p#/VTD#to!XV%an;ORF6H8/+:TN\5&k.q at Ru[D[Z-e%TbEif'uD4iq+YX]T&+i2_k0Yo=F$LGOn7rNH at r"An3V\ui?n
+%A at 5DL=_@$65NfMsj;tK$8Os2^.$XJ:Rn.<%,"j.OepP?+ltX$JD\lqb^+,FERj/41 at EcgT9hMZ5/]]9*Zd+q7Zb4ATU_]+(pjD_Z
+%h*R5J"A*X*)K at 9+6DO)2P_gJ!?`"`iJ?;#cLXKqb`tneVdc8$.oT*?ZgQe:h,"+DSMe7,m.Fb^S99"\9-f5qR5H:U<5b97NI>'Ja
+%@ZmUP]Ga^N[*VYLVA9[16L!>Y.Z^Vr]IpS4PQuIaW<G:gs4.0h?Hp;VlhJ;?2:m0g\,efqKYiWr\as'9l<<S7BfZc`2G*clpZ<qh
+%)ukW at gGZ?Zk<^'u9es8?ZbUT<8,^lQE\:b[bb=BZ"q89O6D;V%kWC%9QYe82Hch<.Ku07YKL]t[AIf]dg^"dnO/^;Xb2fl>30=@o
+%!t2qjG:e/#=t%(>Hl_bI>^iEr(*908b0i/2OfL=Nc[#%Ee61;[HL*i>fYM$k;MRbD$V%G)Tah$HdLO/OW)maAW1 at 9rB2L"O/DH\M
+%X- at TD^SM#aF]WeHTEa-M-6LMYrliWCFgMs;Ou+Ccl4#`?>jhL!Z)#EN^%u_!7i76\[eLW]X8./1<PJgsks:BpEjACYf.e@*j*,Zu
+%bjH4YR^P%15O?C5g!5U<_4LJ*d9,GjG'"WV)7=/WqDcneN.V5ff*-ljD,q$JQ2u,M\_=cC",8JE;.Xka8RP9Q0D0;Cd.*L!d8Uq-
+%Ii at 0t3QUZU@10]L9?7MTRN##ao:CITkk(/elu)VTQ&e9&UU^]E>ECSDOu*eL1AnTc=V2hCIbR<IR`Tp#/d\7IU!bT-KSpL(+#Mkc
+%R?)"^kq#$[hV5?L'MGDF-5>Je- at A3'8n,T"K+JcB8PGW6cQS&>BE#005&/ci;Mm<g'P`d!MdgL7mJ5p#5M>cIRpGRSe/K2E$]afd
+%j^E^E-$:,_KVRTj`$8"f5+=>m3(F=Ag/m1GD"KePGgY?6"+,M5I"%FXSfp2a\(dgFD2Tgh;G:sER)od]8WD#7(esiF^=.]NMtV1:
+%TD$.r2pT;nqfDf4GtYm,]^P60[+q#>MYioT,Qt`9h:%t:W at s6MT'K\uWh;bp9eNeo%KYNC,[>ur<m/G[0VJY0fg6 at 9Pf['`GmYAO
+%.BF%CGXd%oOGB;pAdcD5iaW1s6t4C^NJ4)"ERb/>)L at K-S<c=^(4]5gBPSBWPFTKY]GD6eKQ\u\KR#f'7EUHlNPFn'YXS`ZDZn<8
+%.Ycs&kTc[d-t+,?RO%+,rO0C!punLM"O2iu[-S.u;a+p%nCa+AY0 at T'ag#"7%q?0[#-(4X:?hTLc6Pe)=!mc"`I1I:%3rS&.<NJM
+%\Ck;H;#K&`G#'d*\Q=\$@I\RO!T0S&5BX(@7e2f(Wh`"U:4Ej.cplIT:_#r`fKtsT+P8$5D"@o*Gl[cj7(K2D;HLPmXo at ggqq)jV
+%QH?b_7i^5 at SXUTiRlj+Eh\.?<@=&#Pbt5_XMe.,&ig+WZ\La@"k19S8[MpkWkCRVi-!1j_b<9q;/hB1c=(,/%\%"dte_lH]Y&%?h
+%@eW=E<E#q%)3+3.Cb$LW[bN-S^-^CO(27MTC)$0*C at cC@BNc\?P?Ge?^X]2[\VfB1j%\mP[@DU*@Q6fs=LE(a-%9RU[Sf)^EtBF>
+%CjkH at _0\(Oq\:e/35>9*rfS_tE8O1A6\'CROK2tFl<_hFd]JIGm2)'@43Z7qd=\s`0X`/e-(S4Tl/Ub-&^Hb*`bH#k%8oiS)R*im
+%Ki50Q]jsI/=SS_Q0Y[T&&)8(Kb`[H<F-Fqp?[33Cck$KR718LEk"4t]4,c4VXsl*1-R9EfbI^pIhu)r8^O=r#Hb]TdZS.+,H4H%>
+%;=noA*uJVumKPK$kKi92Zn at foDTFL!2:S\g+P;7gB\=JI8<\R4.4d=p(rTKf_]jQ<C8^JO<&2dtD/f[)n-IXDq9 at HF1t9Ba]Dj!t
+%2J!r'3&]'aak[Lm"Kl<7PMAYFhV1I at UeJ?sG6=uEF%ihoN+$=J=.?BqUWlq+Q22>E)TUeqhX[M]ld&iP'B!YUjr`49<fS+.i at IG9
+%#u-%rVgLS\NZ`sLKPTT&9Kqglp>6l02hVWnosVX<o(eR2ja3uKrrgXXoNlT'faa:9QE0H(-n1bJmATQ at Sc6EIZfpi3Bmp.i?\9cc
+%oYh:tgX#'9nlKb_YJG[-_mCZa*G-0-g&[n2+%Ge6M#?^&9cm&sD;n?Ss)TFRg77:EUZ9f)"b+Zirq.m^W+Efbru+VE&7,>4=,OD<
+%n:#YmrJ0qM5]`i(oL,taN),I[*m0/&55tK]'of^(ro$g?$YaUY70QgUO6ln'U!o/'s82qibeu?%e\Q4lI`;\I^gX[L&PSUF*FQLs
+%*:0?f0URYp=J:RkL_*:Ze)MPTM3r.UkH69+joPP2iZRW%Y)XiF'a/!7,O0t9f"fR+Gnk3Vj1&sif;t?mGH8q']6`f)G,F\[$.=]H
+%?bJ7'YK:Eg*&shj?rihZRXMA1+bCG\Yp:Q[ZAF-LVaj'+5OaqH/DtYe"!r0G)!ColU:*!V'L_*m*'2H;aY3!0BHY%"V.t99B>5"_
+%UP::ig^U;co=A,#kPreM-+%a:[,Dq+<dMqaGr'CPaC)41huY?kY+5V.AuocDQ>N9ZcL+OUfVa_9_GP(e^4DZ92\M^3[Y%B1hH47;
+%5[t,&ao*@kK_&[M%D\hGYM(I$0D3e(Y,sHZs6Ni'%*uHjYluhW!T+S#o`k163inFa+,5)%L]hqEG6;5Imq+MMn&U&JMVj(I\]jD$
+%h`_g0V"Le_\Ns#_(>b[om5V+[8jhI3(Y`gg$QfAqf+9/Y8nX!3V[tAMeg8OAc)5iqS4 at 1q@To>E.77:/,^('X*15j_bsP*OfGh?*
+%>"hG at O+imVisHs8=)E$<Ol\FL$t+3NXJt]%.]U%\^l%"jbsR8=[VH%kWgh>c<uT$Xe#.2;TU*5&pmD%KkSSSUZ$jV(nX;k?BTjA[
+%rE#>T+]MI at 9TaU59pc-;U8YleFO`^U!TsYXiPQG5!$0l84&AmrDU!@#bWM2gr%.%[j`Q[Y`8nq7EQ[4$n+sJeguOao4?N%^]lORY
+%:Oi#/Ie=5DrpZ!K;bit!rU&@srTuiKl7YC#O8o1qJ+m$:hZ!4%s6:a\(m"FrXaP(hk^T\i at Fr;/"*IlM=\9Zp0mfk]nUn`3=sQ(=
+%9+ at n(<U9?$[,0QW)=jt4`/O(E2[K%p0E[HI>/S.AS5bi@]kPXonDqIATI'WcFP;DY&=0IG#KN@^ZCJ\:4MWZ?f&OS,2+95'1^ZTE
+%3kc=W!e-^T98K5Pnl_/S/r"^jl6,K&%LI6ioq8Yt1a<uLc^9ZKFiGk-F9=sibKA`DcG0C?^I\&H!3S=/*7h.75;Ei at +N2ekO@-f/
+%3&iXO_oEIg4[Z^f/c2jXW4H"rBauec_N%9So85BS_k-<!oMP.oC;L$.Guo`fXc3)=7RcI^&OKD3UG=53bIFJQc5).T?_Dm_l&PA"
+%BR-8eGo)E- at AmYsO`XErlJk4P<R[addcK&ApM\YQB82Ne^mV(:<0 at MGK6#[l at 9t@[O`.LJOIGU,c`R[t!)aW5B2!S3,kQoIo/_8G
+%B755^bpkN]=o8p&OJ@*.ofPs$R3VO[k-s?kVHqIp\iY=][VZJW'C;-s_YrL<AB%ORj-fZ<&S?3kgtG&*G1nC:cr)397SKQi5+A^[
+%,2GECm96"p;uVNg(_0c&d'UFX]S*23Ctcb6W>o..<N#T4p1F(J8s>_J38TNAJkCpcfWrYXO!+*E at 1FOCr:YMr/;asMg#;Buo*u`I
+%Y2Jt-oH>p?^A6[0'Q"t0);]p)9OT)CI5-$T at A@^:@Xb[<kSlA]jmZW`I.pQq<-+Co^W#=h[n%tuboM8C.nepC88><=s#fi"@M3;E
+%^a+QaC55HXM(mjUV[t8`C#+a\60R)ujlOO-F#MbuZNN_C^uOoY4/Rcc+*R48=5W,nqm`mK!H#?n0dCUc]n=?8EaV?QcQ&uUQ2P!6
+%ZeDIPiR64YAf6W&C&r3sG`7<IrePHc@!'._J+U5<UYFq'q#W=J at tjG"a#ua/ZafrTApW8s;EX'-R6t-6REq2EB!1R7?0?H)FL,]?
+%)8SZ)p41Q:b8k97NOB5s*2^$egXQSnBQtQ:+$8S3Tm-sa."3R>T(U"624JJ6qL5gVqYMYNXkJQFM*L+B=7PbO-:WB\dWIE*Tfq4"
+%NEJ$"J%a%qZnkM;f6]UJafk(S+[(>O,s(cU/"Nm(]D.F)_^KWnS7f33dc[*X%pFtUH+#+aKo$ree$SabG,+&\3`mlsUtklHVu34V
+%OM^SmEDYlNX?cCE]k/<779Aabo^&+ul-OS*rOp[ao<K;Gb0Fm6T at fGr[\QC^;^?MdlA`!j2FYHu>FHYN]<_s#m&iXe]uK"iqU$j%
+%eWdYa<bF>>),F"_mBCroQ$='rK&-$^Of[^#Vl(*U41n\bC<f#!g>2F[:):664`FQU^AY)[LI%:P^fL2oT5kGsA`bq=d,W at cQpOfr
+%CH3l<nBJ:3K2S]-VflM at ot2VPf8WXW?n;VhU0cY#?%uRo#k]0cqBPqmqr8A?QOU9/2%8&&.A8jSdSp^uO.,n7JU/1sCm)YokDUJk
+%hh"%ua2Qp9#FK4fGXMp^=X,Me,PGme>'?06ah]FDNPf^1klfV7d-*YfkV!!RL-^H(n?,Rqh/gZ[%+cZH#_nqrfoHoG>:Htb0NftY
+%YMZ9$&`nc6B!38gAF2h^l;XC^n0b,oJqh(QgRMdCJAE>9bWD-:F\,7/[d$_#LWc"P.]tU,_Rr[MjU]?^A[kG&I-s*Sh'eeCj7[(t
+%k$U:E5]N(!.:LU'^[\;'D<RCJ%t4qH^hloF-uCqC*[bc8AA\8u5Agn3RR;aT#&:7S*U-KU*;K:n^?;KoD!2/f3VgeiX6sugF#D*\
+%236qWZ]#95X]^=Ho2lRGRkg`$A at 1CP^Sdc-\.O^1of%=<1W+$*U&JZ*r59qu;TL`]K3>Cd(nT<%%XfoiR*^iaAB1c%k7gDo?LAn@
+%OUc^*TGQN/Qe\*;6[Abf=tLCM)(%"FO at +f0K/!*4:AM;ibE5.N-qXg_g`a#ML`V'5QKthH?Ila<V_i0]/\h0m(A&.;jRUEb_Cb:*
+%5Q93:rphlXrqh3AV18*O^\c:UnXI:?Ea^NpUg[p_]!1^hJ1i/)p'C>B--7]&C.R)>QB[q%3fB7OBT'q:%:Lu6J>Wa5X)K._$%Zfe
+%2!@0>O3uJ`Q))"mD:*-Qf2A[Hl'7-Q^'nV6>("jLiG&<nD+5c"Z$g$lDI7cI)P`;Z]7UF/VF$UQ+mTX'TTHUIicis2?(s0j[Rg9?
+%iQNo:0Ak[*a4%.*mk>g_ftuOK8eA"r:tIX*8Dejtg:#@&76ZFNYb*AARH6M\a4dqdSY0nMSm4(rLmb^>rXW90M.R2,kG["CN>?8q
+%fSt=omF$2tWqMm]$Tg.Ai;@@P]r6;7aa(Sp=DP6e5ZrJ?ajOVr8-,()]%AZ0DoPKUj+=SR(F\ng?bdCj53Df+GEfdo^A3Yaf!T:!
+%#?OjVnfu?j7m<?'@Wo^cD]'t8d`#R_?FGIu:4DON"7SRTdHtV`?#<Y_?K%El\ZghpN`[oR&>lQ:1 at YRtK&Q;>LjqdFPKJgR1n<K\
+%7-J?W>(G;<)oOL&hYblo&#;O5`%)(d_-'rm6g56q&(i(0QnZ8:lnYr:,56>NO$f4kapT>._pX9YR)'@L#BqjhWYWq62Zp:)a428r
+%g]Ds^K<@2M4%BPqeL[F%b]ip"g\uQda0El4*KCJJ.nljLGE at Y!-)'ZTr(VQ3LDeBrN8nN,D19AU^Vag:hbQ at N__jAqkU5g/rV^9I
+%L4HIqH?K!K6rmMK@"(!IS(T;8rN's"q=!nl_6kAG>]UctZ2o`G_N2du"XDhTeLH>>/_>2-N)C*9W=GLpdqOho'%J_ at IoRtVoe*(Y
+%@sKcE*2cij:_iHbb$EL1X]MUidS4-a(Z.>Mk'rGIfl/%f6*CDbPbJ<2iT_9R9T!3qDAXEk9@@?pbtBtUQoIE5P5H-V4<Bgo#IP=,
+%i>%Yob$VJ#dHLnX.TLcZ'M?3 at m>Mf3UgilD2VPh<;i=0!i5;FU)ue+4SmH(G1[H0`>ML#`V:TsH9f#=TAsoPDcu;)dQdCm/5+C`_
+%<U>UdYCMnAp^73-"-6bP*.QdB3:q;Kini!=r06h'+E;OaMj(;8TaCWf2LsO^Zc[9CCt410lBn<oZ-:rS<HK`2=J'mYeTuJOX8EmE
+%_FMhe%!=BNTqnDT084+Br(1a]%Q9C"gFjcb7Zk!j+7O\!=u/qeK6>kJcE]Thj#!(,A/ZirB.lA:mW$q*iqi"M.su\VMu<@@e;iG&
+%^AR#P[P(u1&O?">K+P`:^&Ad2@(Po'V&t.''u`%Gj4$V.G&rF<^?9reKCg!Z?^lE-8&+T(oc$UK8X&'-TG<4s+*)Qc<;n4u$@paN
+%ir3;sgUJq&M1$T*9tk3>,QsY1EVH2co4)u*TJT:`B9nSU3ZQ;2Ntg8GGpq8X1 at 3.jHPkgC/*im;"9eZ at DbmD.=Dim],UlD&[IAR+
+%=W5b*nQhV\[hbY[ljQl.H(IY(fC,g,a6^s>QusHL,sO]Q"#2N0 at kKOMr-#1(X-%#g2]+3B(#Bq3`K)WP8gmsDLMmb-UmOi<&Ltuo
+%3IFS<*Dugd[Tjs`jCCj"fdk"l_=G?1FJ\f!Z2ue]4ucF+#0tAErO"`2:0h0T?V6g*7DQ:`Ur"+"/AIePof^p<L9E"<`9I1#$WDro
+%Ch29q?=GV2\n(M8O+ro0E6?EE6j7s;ZU=*>f(Vk1)mT:GcqH>F?;VomN.^Z5Z6-Z%cL6l?@)2?;P:,0Z"jE-L%I;uBJO8gLET*$<
+%8#PI-^:Cn_^(HZnJsomo_qp$"s1rTCfdt]k0_n8n[?nKO/KrlXA\He2=^q+:g7%U+[N*j$[&Nt"rW]W/TVXE\2iYDp=<,XW=T%/Y
+%]>+?t"`&?G-Q&^_[tDkJlCrj]Nb-kZ&2d5e'(E@",aF./Y,JMuAF-1^i%%c#$=9<-rS%r'!nMg?&%rqJh7%7eHm!@"+Q&OlLo0E3
+%W9fATQGHG=GCL,`kYip<p>D-R<97=i:1298K6XZDC.FOWd9<&`qQW7c$>A1sR&;D0i.\LRQt02K2X at Uu-dQ,Z^,=NQYF94dknnTF
+%?ZY>o9mnL_VXu])Vs3'XD2nbh?[F"aE.GZF?[2>!37qV8^"X!kE,kRgT/eVUc2#HsIcK6\g0"Hu1rID\IK%L+K[UF<#/1DIJMYN0
+%7pEWb%T+k`EN4OMjJ$P1YGTk.%^F&ts$`H$USC%aW0r5.k.Y/GSJAE/g;f3'Z00/o6\7;7)KK,on#;Z+A<Xqo^[[@,-7sfLLL+8O
+%\_,g:`QVL?\iEa*dS\1c'h1dL^C6C^P;;X_1H&C%?sP[MnS96@(eIO"+ZJ9L,^o==n_Vc=jo<t+)=L7WjqNa20Uh#pQ\[Q9#tpTu
+%h[*V"B$'\f6^i4DeSSe7JK?+R*:[?#!_SeLhs_q@*S2<!@\Pp`d3i#k0Ju;%/9pJ`FG.?Ag-riVTF8k\0U*d at 0Z,&;i,4RpcY%ia
+%B^E at 7`r2ThJZOAle5\'8'eSm\\XlcIMI`-*-Ya-dJ\=4YgM88BXd:^j49Y*L3jpQPU"mP6hMY6EGat.IK"&3NIPUG-9k^])n-Wc6
+%OnDUf>J)ou$"cfj7D]?5G>_=2U</uTK$2nIdN]n<=aRi.nWA+</0W]pCa5cF%LkmW/[*o\F(5RET*\Hi$6'86olZ*\ci_u\XoYiG
+%`h<gP2!?j&&;B62AHI((F%]/&3Xf)D=-D7`(0&YGs1!_SLJ1[CkE"*;[C]PM`ke`Ipai(5V+4OonF-87hnoA;ST47_8d%p6P*Z,r
+%+8kH[#ClT.s70SW%as+(n5jNfUqcj\HH<PQ-A,ZdnTsu?<Rk1]!ZJ;=@O?Rk+lnqPdosJ&'ZVVI\hQYhcb%1*lokK$!j=X3E?K`2
+%2,a9qr*\&!E!.jUcp1ufW.O'hOG(B9J_>ZF^rs"9D?"TZqVU)PrQb9*hpr57O+1Rc>:;#Kk]jAH75U/k<S5KHTX7[g--u?!.MYS#
+%q!*Nd%n.ET(LcBO-jrsLT4_"e(aj25._m7ZWUBhE^aq%BhE=M-;;Sr!\^1ED131(Z]ett-YkV,Dnpr"=@b%8!%0!Mjp=&:U98uc6
+%<LAB9:DqkOoj4`T>T5A.GdS at q@=#l>7e<p!PU(%GJ-052O<nDck at CE-S,eVgp>OqpE;p_;Z/C+C[&YogmH"CuY`\bMgZ)Z$p at t2$
+%oY5<sIs'N(?^?QEj91LC5J87;RDhK)F-l!cUo>!P+!<<NE$$khlPrk1oE`9(32bXu0$Lt9pfF%9\-S!o5[#I>3:4!a1Oqd1/<1M@
+%7:(3ZIOsG7Z68IYBHLttrnEpPhbe[t)k3MX]7'L%W13YH'i(_fg&h`K#GE)^Ti=QP@\isS(@jf!U+j_)f_:U$T:19,$-iM2NrJ])
+%nu)N]n9ncno&Y(#FT!6 at o@EL)A+,4t"'3UW]@*;VeXrbE1A:H%Nd&G?1;(pP#1.nJoL!$ibX$u:cNa2h*"J.#'f,o-;)!2r>rZam
+%U]1eaAYm`j!huoV>0_S*>H&#=mn<?gib,gekd%l*=)as3Af1roF'QWgRWoqfol)UZn]`"lKV9Gs_lkfp',.'sY:5,A68o+Kb6tkl
+%L90bgoZ#:8Sd2ja7R["=<>C%],-ctfI,/5>;W,5HOZajV2D?\_B at -dcD`S\p`ST*0Fkp\_,TtsD6')0[$sJ<hF+hC\D,Qg.N`">0
+%#l`s)e\^MgJb<F#+%0ekM/,U=h$H&L>Ye3.#js3Dq.!MV59,T#/0'sr29/!"5*"q7,7jR8NEH(7E@%ahP>0(eh?*'W_)-lHm:/(Y
+%D at 0[1Q+mO%U7UG,CmFl8+HpT?=\FF,WD/<`%KV)WW60p97,#Zg!Xa$-7t0kU^2[)IpAu"l\)9Y4"&!nUkUi9)d0u0TKW6O&M-9%B
+%`r*/$$)fRO,<Ju!$eAFLTnPJOM'D)9@@p7G6se0liqF`YZC#iIE5Vc\3gs\??/W.#kTTG5M06+SYg=B&Fk1dlS6AH4E#8#p%M_jA
+%T3jWp]2GNZgCYhD4f[achXkQfT<!EgfnJVfr9[@pg'NT5iI3ILbU1t@*_,8uj2-!LG\SBi=r=S%#uYZQXD'#BA2 at he9PkiB=DjTZ
+%11t7je8X/Q1j!?(?I^C_Wm0U)Ejj'k-")>FA,.IH)?VQ/1[](Cols5Gfs?%=3<Z>QECAKs-sf!Y4f/N]IW8JC at kZ,$3pTM_!mAco
+%YIP`DHOUmeCeP<:5!dX]jmm*KjA1:'GAb$YT3*JtYNF-dVVj]3\.5,1BfIdbJ+k=XdeW6)rq(]p7;\EbW+:.brkK'<'DA$qOBJU`
+%5G+eG0MCa+1/%"I1Rdp!c(%#DABmsdo?5.'C+'&X7=#+hS!iV<4:MPE@;cZsi!mT5_Nmuo9=U at 5`88YgG?SWT^-<"@%2I/bkJd;k
+%+MXE=BA8-:;t%iASZhLhIsXsbbDF[oI3D+K_!X=fEaJ]>nV&>>X!]O:5r>=?'3r9([<o6i%N'T,oKg?4 at Gm#&n+(J/nGbn_>BoVS
+%Q<u\cS%T6tBcd2<hZ!fZ4&l, at cB-4fK*GoMGRtn8K(h)baT2u,ZNDC(??)='8bb,(Q]LlkGH2n!G at 6?(X3p!N85J:?R=TY"T`9FP
+%?o?"*g!,JnPHs32/u!.%[WmjA2gH;-rr)`<S/_E7;Z-4Jjp3f1<^V'!^_TFAUWMh`T#Udm1VRqf*db>>oVH2I7pgqY*IX(=*IVXF
+%n*!Cdp5Zj_jlPMckEfeinD8pP^N=]ZHPtPd4FDJWh>)$]W^"DL?;63IGVoQ)ZDDQS+1J0^Vu*O0ai*?4N]:pV>FRn]bH;GO[aj^K
+%#/JX``mi at X@8.$2f^Q:,#/gq!-cf<MEk'nl#tEEO*KL&C';K\N1?"@UP/n_Ps6>Yc?8L,u\YRejhKA^AZbJ'^pKW7H:]PZ`#>e_'
+%n3\kI[oOQdS,RF%-3KOPZ$[#KE<-;kQaJF)P&iGs]R7Q5jWe&P:D&G_m9)WRk0TUndJXb2ke\tCSfG0Ice9!+(e>BdnbI5ZJ+B,a
+%0/X>YfX!S18Qq0^.UGQ!%#C<YaIeoH2<hl(bHCQG>n*CY)?2>DF_&fM]C3qRh'"_fqi<@6p%E/cH-5KXd\aWn;n0nn at db8aXjjE8
+%WJP8<Yn,H/j$RooT2%HJ4P*+G$o.AmlDlT3p^<5an^lB0rmUMq3L at U=^A%"=cZE().O7&4:P8G=HoBQcrTJ-$ikI-4g&Cclci3"-
+%A>DW6rS^nM^;n<&j2WhDr@<q'r6l-]9Y[4a[s5L*3I3dQ7W1mudmP=L+2_2/es!^n2kLCLodJ\!s$WD84U+)LaVnLC`koFpV<kth
+%6@<S2B/kS9q%/"j0c^#>0oSV9SAMnVs7FhbV"e$CfsmTmT<Pe[ghd/PKQ1g\h[8]rO.onV>]6VC<3IBN\"[1!'=>RfoJL,C_ZV3l
+%0BOk7I1j"^CR2JG5J5Qie's^nJuqf/MNhf:g54^(K3'[Z6,[%E<s0f26''WF,?XTUJhBPn]t-F5UmAd0rkYeQ-bRXq&Mt&C-QW,o
+%aG[9b!+u'ENfEs7^0WjpHs<*5#CrIU!*XNf0D&YG,`?H;(P"=oH:Jp%jH"0hA;(+!o@[Wsjfsj%N"iqOBGmHm2sUL*rV^0:r@&`t
+%o/%]9kg;D:oBfV:#BosXZ0))0hO?B(H<f'Rmu$%Q^l'DtLb:+=_0dFMamEt\#ZJH=*??./YR2(a%2=&&O at 9-Fc988"H-QEr'L7O_
+%<?4/;;99>oEnn3\[FYUK$9 at 5H+qUf:S;^5*f*?`a7k'$uh+Y!lAR*B=P4u_Z]FTV$('"/Y*VMQ\n!joTok1<OP7ce;8&VED;1_ei
+%Wd.2/:NLHsZD\"Vj%&,<iAr;9RY91u at NB;X7'ECn9;'e'Ku/&Cq4M[(.-3%feIc:KLG;??jU%_%8(iseh:XEk\Yk9GdH5=n\i(5G
+%bp=BUR*GLQ_%9mWG)69Cf644cr^gF"QX`\,`i`g,k"d&j]IP91cqTaGa9GhEJA,7C[+V4Cd6.2GR<6>-HBk\G*p(*e.7n70)'U.h
+%_KX;hS&3shlY2sCZ?-_9jV=r)3BuM`Oce#6BA4/=Dt[.O,pJXj,Oor9bBbtX_ap^aJ;ki,KdCAm?12HR^@V$%.J479X_D,iS,A<1
+%aMG#d=tWdG7t)IdcF+/spInnpffVbK`BlD747D[T(12VZ4!XOB1"^4W#8Gn)'DAK0i@=1P'+mQ_\AHUl,R8CGat=?/YdPYOW#jU,
+%)@=)49qV*Yr/4gj?o9"5-5L)sB2g$_l>pd?,2*0CZ(+m3=dKDra`ST>[YUoGJ;,IM,h)H\jU9%\;p'1EoqKmtIC;Y)Oj<)O<o#SY
+%,0G-'H*q9mIEr1bRLiueF9jrA_*7&9__rn;RI_W<#W-=Dm,kLG*X8B/Y&7Te'D?]S7`nK@`]]a7oD4.5FduNs\?bITR>X_[,^RDH
+%nk:)%Un))6-OFmf0=h<QN:d3Y"W!5k9n?k7A[7QN^8t=Rp,:K%W7V^qMuoo2kgu:*-BoKPgWNK%GAS_P$72=T3l++/Qbj%%%d_J?
+%muO[Tdg]bklNu*d*+K-u!jm9r!n8nh1)L-/kXYsh9MI$-.5WN8+/',0$q`)ug.>M^d>?krab;Qug&FWB:qEbe<ObRZ5<0(=LeMde
+%.Zjg+s&<cWSpV`aY%XFtKrAWIU.fWmXt)j_?-YH$XuQT7LY]E7'U*On\j'lRX!B6@#'Xr9Q/cWEX307Id76l[*b@?ao<@U%Hu)6:
+%TRf8'H]*^A2<:F0IaZYF.56BND7KlsrU^h1+2AfH#B2-rBkJSK*^#I#@t"dT#)ele8b6'/J1M5N3kDg2,FN(9MtEl:;3s;Gp&`VK
+%b7YD!a[;jUS$d?%>A4XgC2b1/?="pF1-G,@?A*==q at Sh1IZgsipA+7l09b8G-7TR"'3VRRBq62'CLtdjI<b`&eH2*)ht_^YfC!DJ
+%6IfQ)<gT8jLNR$@d!=t7mu7)--SfiA41\XsTYPI>p'aqglL2!7%q!IqAn*dq*IlCDPQ((g\+f^;$=I#-4?ocs9.;F_/4=hBW!9R'
+%&<$!,C7.WY$bZ0?9IH<mUmnc9Y;&fh_?sBN#[)070l(tKhoEYp/\>d$MFmD^_YZ^uJp..\K:a3:\d>BS4Q:e0`g5e]8APOX271@@
+%]cYAOSu&3q7Ssak3%<r36"4&)g;br at F.5iZbb;Lujp]7$o$S/]Q1Y34JV^h:[I;H+C-!%GbpW?\0c<ZnRjo]_ZnC'7!J[d1lDs;a
+%P&eLp>d/"._UK>sp>/SS0VpNfOh<N(S$eO5IakY]Z&:I^)RQL4G35Y84hj`0B_R%LQG_;HM'QbGdEk')p=j3J%WGdR4QK(:DDR.%
+%)8(KF6K,"^NmT,ks$WSO4%Bu4nC=70,qSF],`uI8djm`RIUN_e>,c"\n"N;JR*""7;9%GK<REdL>Gd8$E-#f5)'B9`;P-*C4Y\FZ
+%7T@=tfIG`\BsVrq[EOLlQ.Gu at C[4@#^Toh#M[8rAG<!EU0klpI23L8J8l^rhlZbH1LC??ri3$(OUqJSp;,YA#HEOB`AmAY,"&Dnn
+%9l*IIEqOW,C+J)f0)['S+Pi[YmONZE?e)jYGC,Jb$pd2CQYRSXCjq5JL_VP_-*iTGSl3EF@*>o;a$NQE;2CU(:sh\<gT0hr)2QB?
+%-.uo;Q^9+$1Af9g]<*s)GO*W=)R3(R\h[lE=c[GTd?fPUgeOf*^:_VC;K\ukXQ$dH*O7?B^#C)V>6?3?^jg97mbn4P]o-B0RGX$;
+%@VN%3CJ#DeU%18)lG'R().<1.\paZ?VA7ZaZM:7VZ.F=]GYtOL`Bh,;CK%O*I:WVXs5KqRlOEn^:C(=WS_/o!\)!"EI!_gO<cmjr
+%*Hcd'..\m<@P5g/)m-Cm&]efb^"mVD!pp-+%:?2QK]<MPZ:1Tr'[F\A>d6jM0JHkmN5WsaE/M/b<YHpgTVLSud%h9U(FQ=&eA0p:
+%()A>*B6[$R_W*4!\k<\R)TQ28k:]8BRoQuDm')]9nI.uQ$2ISaero,_M-J#M#'oI/ZAf9DZ8Jd.(KI8P`DOem.h39o&)-dSq#\;b
+%hFPsR4p=lSq:BfDR>YF;G+m8-fKg:Qo\r_W$]SfG_Q)\/UZX_NS\S6$$2%Cc8cTJRH.D+P\nFCai^H^+R)_lSfpgdMS at 7u_Gp/rT
+%hukL+LHi#8e-nHeDsb0mljGX#_m^ir2!;L<A]rOOm/V0Il"%sZih^Bf;`Fs*6E3cl=32prd%Ul^(MTI/YB.-2IL:8_;'pd_0KrAo
+%TR/N(g>OGbFu-)n8-)Y#1a#Mk.l[Y_dgZ#7@?&seVV0kea1Bcof,sT>@:]CPEKecp"4YVh*b[hjl4fML,;IL8.mp/)'\8b<15K0A
+%Uj8Tc"")W;rAKSm_&qj5l/,IO$I/oPL-3A3=eu<*jkD47",1EBN1,;^)2W8X3RoMQY+:t(e at 7p'qJjR;+^IHZOm1/QV4cg51_$X;
+%OuWZNSn&/,L:<)^e&.MLPZZ+We^`&ZBbR[dF&kJ\HuQYP5o;L36$9VWcE8uj:QCOBeOk^],uRT)Lf#D-mEHEFb;SV8fb9<Mn?_*p
+%kJ]o)k/-ZZXU9!pl]kq'I#+="63h'B"S'R84[?EOaCDNg#-$o`!&(B`_EN4t6Xj6$QAI-7'VSH'7G^;QWl/O#=@Ic at 8P!)%T[BM]
+%AcRUjT!>u,`Q:gkdN;!l5gm&L5uoEM<9><?32oJa3a2jaG+KDn$15??8)qE+i[*$fT5!"bScP6U'rG!:-BU^K;%flY>^V%pjCbKU
+%0M(VRd=i at X6:X>!.PU;7MH<D`=F8WpOp7D<.?<S!kGL9of/cG@(1]9fQG<a'l,C0![$-Xm$%](*mnjLKP!h0E?l<h$%3Xnt&a<XT
+%0tTD&4V9M^PSIOLP/Mtn!>Tn at Q8(D,r"bP[lI^.)2!BO,3Quc%aNg84]TsZ2Ec.L at 0"4 at 9$-KjsKSAuPceqldqhJc(W1m at 8i^<6D
+%:O#*pnp`8?q>Kuk+b='aO/,eBaC'lZ.AuNI*[50Cl[1<Ha-U;5g#rS"N0(qi.W]^Y!l"c4)"l\TEKOhhD9V"V39VO=.mbjN``e]a
+%V,'UtUYQD.O'*(6&snqC-^@Wp6,U*FVW'umT5!jd?WXCRYLeb)Q6[^f/J"F(E63lI05`ZK#e<D_RV#0'Cd+g)^4T<LWK!Q]R/kds
+%"(c'GKA0d(,9n'YEX8\:4X-nkPD5HH\/p\kNBq[nHO')74etn*K:Tm-;;I;M38Pn;73sa at 8#Iac/?9>bVLffYQt+,tNT4,LHc`m:
+%l@;K:MSc@:0,ZDd"l\0/qs!Wi#c<`WA*F`J#sf:`Voe.1E:?RNdW8 at 3']G!cpp9e1m:sI3MTSWs]k^4u;m+<Q]&[_jH!=K3-!HbR
+%d,D)*-99b4-B+JGHBuP]NE9&@rCe#F"42Z.,)0aWm\>/GX:@,lMYbc5CH\U^6>e;2Vl&-DQ-WpS0iGO/HGJ1-m?nGiK"B2M0muhX
+%58.>[mEo5\0^H4j/Aus%rC$OOOX_GFXOG4k213fS-RKcd98+;+\#dk00(!qmf)aUWDs>'%L_GPNC at YKZbscu`+(Ip+giaY$RE]u(
+%\6ID^oOG8cg"8!6]/n;_9O7`n/D7t-+fHj^*&:V684a+*B,j7JbPCF%-?ZQ9o35rGO.HBOEBm<"KbdUhND!==N2qYT#e,;29<WQ!
+%J@(dK4ZY'T*TIm/lG6_L?tU2aL2cqXXkhho"p/P=,!FN+6g5>WQo<'KBpke7&T:tblUuiBkEMMT'1"t0cM!U5=sr9H5EBK5PA^DI
+%H"!BFHFl at 6A(\=Ah0Se\?.1%Ok>edqZArb3Q?E3*]ROeT^U.aZoVG,\m5V6B)SOFSE[WQc*q!"PeG@];DI3>,e`Ft5QS8C8m$Y;g
+%LN38OTD[[ZhsnJQ:B'@As5W!cGBl'WqW&I-[XTVrZ=!XnpL!jWk/@N&o<5mek(T5i+4jRIa1m!ks,S.c9MK^-^]*!`eQ_kDroD]2
+%rpn>%^O:a'GJF.DeZ8<1%tFE7cYm0=rV#O9jn"C[ddMZH^NfbFjjf8j(W*iYlWqfESRG,L5<QSc]t&&.F/\%f*U<4K3&[rm^OH(B
+%i\c3FrlseQS^=Eqf5IkL4D7>kRLFqa5Fo"(?XNa!e]%Q;4')CYHY5cLKItG`DtNpjHhmC3O3c^Rs,I$9Ssb9a9ktdDrg[<0\U=#H
+%gHT%O4^_/@Dnb;9[ktRbnc'[qr:0dA^UZ>9\c2$Zp#VYpMnI6"pMS3A2fE%d^\G9>kML]7q0YiIF8>Cr`*L*ilZ-fCh!pd+-Z\h7
+%`N/Sh2toMfGOOJ917(#fqle1QcKbSNr\(af*k)FOJ%TDmprD>-rdO\&c!>pI:;a\\9ghLb5FHFC0)te8rCYMhAqOM68AH&9:?Ag3
+%s6?qkn%Lsbb&:u\2"6,fPYIJDI!PPMIKe`nli2+tr6=C`DdU3q?[[BEf00"6-FYdnHUQntIrk/)aeqX-mO'sT^3Oib1tScmgg%QW
+%)KT+Aju+NdIQUgeD/!0D>OH1J*Gr?^/U+S`Njda21q%#p*,W67>AdAs`6jlt5A[l[4+I/(p#Z"mc`c4)ZUXGJC,UGS[WGPfdq^"<
+%aF/L2SnuQ2Hi<*GD_D$4WPu!r-Z`pEjR6mur:-7p?=2L"O5%B,><?@k\1]eR*Bt[g2K`eAgopZolE7e07JhLQ^\YRE3W.nL\,=G<
+%/tThk3e-f+WG#c_5L2^qVjkkrDn^IPEr.Z8S,89=Z_;Y+\"tnN.&635hUjAsZ0VDdr`OoVD8q)*<3Ct:lQppA7+NI;hY#^%T#'#s
+%^;%6D:iiJ=pY#/-X.*2jqY+psG/XARMBpO-?ug0mI<5DcilgNJ&")CSY\Lcp5F at d$M80#0G;h0.?9Z<bZDkqd%0*I:T&%&,rT=#$
+%'AVUFk31]*l1mT]*?,]G+,<sJ8EaZl*h/3HK(EDCJG1POq*6rZFnt/qkEgD,9(/;nfUuJrRLhH.Fnt1Sl\d^V3cR6u?tWsKFdJG,
+%$"Ije-8aS33S^H_D06?fQ8unX9 at 9R**mEUBqnB0mKL\.b^V>$df72AhGhZ$CIt,5jj_['E0-:i3qET47Md"*;p>\[<V2+g9Xq'p)
+%/YpMKgt`p=`8a]gBj26r,)U)EZ[!IHl19hJ?!MgRmJ2[0^Mbk\jZQ*/r;Pj/GMh7^h>HqPH1`sW;6S8P>e[ln)<O^RQ2QY=+54Es
+%YQ*q9NepKTj"?D2K<=nbQWNA)$8^LT_*:3'DJF56+B*2U[#\[4K48Y$kNW at mb:V!!.(hIN3KFeZ*s>\f;nMOPX1g%[im,om"0TV?
+%-?<>=`rf_PcaJN>rVdCqqj8#r;fBkH.Idq2=kgM3:Cp^a;AanZXStpglGq*5h\;IHA'4(dk8/5=#OkTZj_lbYIs6&7r8RS4jdY/"
+%J%+AQkbAdBGK',3-*A<kce6qc\IFtuOGgiPrO>R%rr29=o9V*`Y.hQY\p42c)um5rc00-=qt'^*]?]k0[PYb:d2tKI%taUql575n
+%I/gfA3G4S2nb_qJh7^YbXW'CS5;\;mbgb=qfm:fq\LETT;uAG at R`K?,%M.WLe_cqUInpRRdI7"nQ6qR4]sE+`)/(aJ7WA at to(m7u
+%r>&r02j[TI%r`k$>l=>ngdj3er=-7)rkLn9&$C at Gho3ns\%PoaSEa07fC'M4=%9heO#K#dQhQ3R]0D&epPY;Djh%>Zcf5djH],m*
+%[)_ at E^UYH]qQ$[?QP\hS6Mf!$*sdM^cei'DrIO1sl4A<Q.I"8NrEre^?<k4Tr7h16H?I'\UeT+W`dWh4q<%V*"-?)UIm<s^;]!SG
+%^-AHtWM%T9$JD:'ULV#FchaWRL>1._T4%J2lKNVPjg1qCgh-Ap'5cF"oV*RIfa!-tH+p81on<4VXbf.UM:/ghM'EYp_a:)6m#!nk
+%BPf4AGUsVTO6X#"Qg><Bo"Nn[,8TCY&_NQ[$pFiQZEYqN81_olp>^rtq,jmMRkf2J=Hj=&Mm>&LpOp"s;m,5[G\AumOWP6pif at 3+
+%T3oAs6mca9"?o*uCs#cI'Uc2)M&`9IbI'Q4bWT+aD!Q%)q at L=>40c%un41,)>9rP0E?HJj!V#.nWU&;J@!cE=Rn_/dn`5.J>FTUX
+%pOdDRhnM4a\[hQaF(k&QPu at Q>8,gB'^V14(rn<TDm)eUJmn$rA%tuq--W"h)-GP&JlgiT'%e#OHF\?bWD!>UQjk<S7]o-.MeDWR5
+%[4TM.9g*bl\[FGtMcVi]]&Z%aZ1_C*QD:m3P\N^*m3pLK0WDL[U\k$`[J'f1nkM/p:#Se&'aO6Wh4Jhj^Y70U*O!j+Y>O-(&_ZA*
+%g=.%Sn(6b*TtPbpEIDmUdE72WY9&M/odBafi(eY at s50B+s8-p9oD$X-a1jUedOZ2jm1\]sjS8bqSI;bmDQeib8bm4#`]T5WlLf?h
+%.CH#J*!rJ0(5GCHWIKX=jhi at .g=r1e0$`APjoNouo&YdfD_>C'DCaqYN;n>9pAM?P50Ca/?Z3$+q,<*]2E$gJ-\ZBZ6 at 30>aP"i2
+%G;l_o(2E;p!8-'EHU92!G3"^&n+q95'&Wd9$QBSUgqpPii2Feh#BTJ[Pn-e#D"[)k8CCmEabW_/#9-XoSg"Tg?X:DApA3dn[KPCA
+%20/`_Y'A3#_/3m51u<jFgiXpO3X:/X*:<mYCbuNf`d9CpqsXHkjq&U(807B#J'@Y4;s.TTH(tlX,Q?ru*uA".\iTljX)0HVa-76]
+%b:N)lr%+[)ge$AP9=53,Sr7TIruU48R*5Zm^O4`a!Z^!nRlgGdR.!NYo0!j$qWAj1A'F["T><8Eqbp8P)"To1I"*JAneguSe5VG_
+%haIbIk45![hS-`!K'7EuKT:6/d4UXII"--YFn>?'s8)$?ioR)u$=A0A*l,t6hL,1/bF>Pj2kRgqGk(%CX7M[%\j>4`KC)9L_mAOE
+%rk50(r>8SiZ1RA0C-,U98#u#j[Jc&2oQ[G(2j\$(?bZ?q+ZtfMUX!t$21F^Sl?(^DbBFiuJY`23bNlVJTaGY+RZS'VrhK0#RHL'G
+%!$?-G^CYa+9=&nqBthF:ghNCpIJ(k3*56esfqD-FJa\Ws5[B`<5J)3_,5qJWbo@/kp)E\/:#"1AFp>ZFWs@=4qe#JdB"(!UG?-uC
+%r9iS?YQ\>RI7?`!d=JSt*[:+lW<7u_7n93!d:[Rn)'+,p2b0Lfd:`)M:ZgjsH=)(i&$T0>IUEMPYud"#YH?%4kkk2gI:'2.nCq&7
+%j^%khGOc[JpW.3)IJE1o^)K,j6i9F.RbYaKn!`1P*FkQO3etW1TAVdlObV])V>3:-KCj_jQu>qFIQS8BUWkGVP"fac&o<rajO(9k
+%lLN2lc7eX6I,@"OYf0`-O^qpF8t/`=*_A,lWDM_%8LCmR&!%s'f[_#`6Se1_4H<Wn8:H59EDuW0.1bH.Q2]h(\7pM;A74-2*0(G$
+%s((?@#K+?aabT4M at pch5.W-S6H"::9S`AilBKd"$V'Fg3QAq?87B,a7l+Tf^rha5p'D(krprtb$0/egGq5Bqt2nU.Va^/8cfUO(o
+%lh8!$\$ke7MHeMR&*@htd]q=_r8VJGr!]lCgDBKj<mHK21L#p*^?;BVQf"CL\G?#ap%N+*4-(02Aq\B/jo3Xodn,fVc0/i7D=3K+
+%/[WEP[4TY`OVZZZk&@]SNY^?r69A at a:U\X<(Z*JcroKGHoG6tF^\$C:,lVdCM8*E3GY#,LEgrMRNd?11hd/DjDtd<sDJM-IpAT0j
+%acE^+(s^NinUC6frquK?f5IiF?J\6nETAJCE4Cb]NMbn)o at FenHZeknhi?0*f5nVoQC`#$h-AiuXutN>U9BN$IjT)O*\`XL;=)bf
+%%uf9Kn;&&UPCC[M*(c@^QJ>!YUjnC8mrm-TO, at Z81&?Zaqjt4kk10;!2s47l\@LBqdcToi*Si3k[hY*T]PIKAVMqgm>j2dHoJWa2
+%m1"MoDD0mRs)D;(^HDSC]Idl_Fl<.\HN!!sc1>lRI!PC8=hVKDP/#l%gig^;#cG_OY*JiEhTZ*#JRkj"CaX+_e48Yb:!D^)QqncG
+%<ZgHRI<3--4P-@'<<(4j;>PBcr?,n7c$_D$OKJ";24LJMV9/X;MRNCI2=4+h>!=9%qkMY<[jE,U>3\VYV*70.s)LcunL2c-[\iP=
+%aG\g(7%O[0g":,4#'lWjpfD[EclB0uUG_cX=EEq4m,oV&k;JTCrSs;eS!qpUS3*0\7s"*3c5k0?UH,ep"6aFDh.k5Pb2[n,kM?_j
+%mR(JofPX%7LWmg.!*Q_;WSAhnhMG9B;l8<3<apC\lslfUG^p at 8q4Vl<))6)@0RQ[k0n+=hF*$fDq\c6]6_Wp4:nR9+]A]6KbO+cr
+%pCF4Rq@/uJ.6mX3?XK?gs0#3oV!7$RoB2HY^AlfEH)5XamsL$W&Ei3L:>SL=!'J&>]Bu#7YTDSD(#uKc(uoFR=6_O9,/98/N*g6a
+%iLe0:ns`:Tdeq'O>a.INSA"r9E+.mGjf[D0`*Zc/YrmsdE`9MabII;EFT10af5DbjY)f(C"P^0L^UQe[^jT/7@"$]U(^h:Qc)p-F
+%gK3:&5JR!aq=t,oL/$L;h2rfS#\<bWDI2ngFMD5:daSa2J,>4OfVWM#Aig+PT at K3A1!b<igmJiQqmRN>IFoYA4)8nEC*D!"3qjl!
+%F'C[K7r@[mc$^kkgd[2GhoWJ0Ja,PRL>W!j]:5-'%oJ!<-"IL at J(Fh\:JL:soLGbA_fXjU<$$KN')i0NhS`[U"ap8W8qIQcb_K*[
+%>FNi9"MkkeG>AhQkH?MqI!^:H0q+lLj*:TH(]7[_5hOLYBY4Rk\4bB-W%q!*4da,mM:>bcLNpu^m_A5FRR?jp+3,rs,fb+KlT5(9
+%D;;K\HedAcXZ8N3D;<_>rj]FW>B>&5gN]eWps`r%ld3Yl*fB]AB==aIr%lM)*[uL9ad`1kndV(2Y!-%$^\=sL9##j7>+uOnATh8Y
+%c6G!ih%#FFRod?h+5bnDm^I=9If2X?Ge\q,2FZI9AGEp!@D)R?eAnFS3"P-P,4<D6s5*HFf!;+i at qP0\-9a8LNt4fHg8_i2-OB([
+%On&EWT<00C-et=YDVFDsf.D:K`Pf)WfbTY0R!?%g$1K at +M%:kF\4I_/$2:%"Kl6j]2o]S.PfVglA_ at Z(pOOdB>J3?fP#U(5Nr"g2
+%:A\nYO+!`hbmu<N/H#=oq9.CIr*0Yt^O,kKq1!5U,!X.qp?);=D8#;F43r/=s5RMtRW,P]-hP^2htaA&+oAb/+ktcq409muA5cEQ
+%nhL%>Gg*U?bkuf>b`4%7K9act$pE`sQ`i;)V+(.V-s[p!h3TK122R$'D,O/*/_jmff?s82`/+C`U1g%jp.*(H5";@<%Y&YE[A?<;
+%priK#Km>olaD\+[c(h9]D/BoHYCi(K23B9;6/'t-SlQ*\J)8tnq!5!PD*>;I,"VQK:^$$LTDcBG?iB][$S-tMD4-j,qSUS$5E33.
+%&]unHs8:l[QS6s?o>rZbn/_AaJ,/4#f3dE?$+AgPjNm!Bs8"C at r5,"P7fVp1J,eRGDa0BaFXM[7-31aCJ,aOa/HC4tja6iBs4@%D
+%s#&O0IZdHTJ+EX=J*uC:ps["Ua!\WH<a5$j3P0OaEd+G3[?GA_44i5#DZ-rQ>Yh.Mq*JrcFSoM/[X+BWp@@slP`t;$pZ8dER'bTf
+%jP+^DRPak>mpeKU?9YNi\R]RgVkFhi546^ep5itk4eMG:$hlo9Qc<^^pt)@.VE[!De5NR#mSBmEr,XH[VV\.$f1s#f3lY0F[-b5r
+%P#'Bun#JOpNgja=51-:)SW<_?e*ZZ^e/#U"SG$'->.o+XrK9r^X%AU(qC3M]dh&pd"SqY6>%?(N>fud7itl1djf[VOQV[;oa(?$&
+%/7[e</WZT=#O0_cScQ72eoUmP(&kTqXl-fL7P?hrlfsfX>gG^iF3l(p0m(GXLXQmAY"PdT5P/Hp`n?IaC)Ca%6`=KRC?LXn*ciaZ
+%6*4XT69=pljQ!N,[885\8$Ydn@;.8FT;Bre3&A3Xj%)0*0V??=r^dXQkW%VkBhR^3N:Dk;aiJl%9b41`gqi3ges$Y>ka4"F.VUHJ
+%kopi1dQF3\n6$SYfj_qJDp at rdJ,Uc:O0+C1pL5Zq+,8/[>1LX at En87s6e-(T%;hWJfV147ij7KsX at I)C`E5ED*9X;^Xl:5-i,p]a
+%)okq'BcG[&n9sM<XMj=(4tasB'DXD+R9;N:/m/_\[-9:_8#s_7N<<HtabEW*TkO`hKHSmBZrGDg3$rZE`YhD&6'4ejNT6C at UVko/
+%d4GHV+U,FVFkg'S at 2;>f(eTH`g(e&V:4Mkl4*?""ktZjMdiYWPHk8F,=L(3l8?u-B./?h1.[?O!Ld3"_&ucSc4mEl#O7Mi91WQDJ
+%HLQbU*!b+"Rm at mL`.t>@_E$BAEFs>&ZR^B^A(ASqS-K)^Q$rc>+]LVNf&ldONja2to/_J0>F*P,6b;PrLV0Y1RFt_[lCk)0*laab
+%6%:JA(A62Ih,%fed`JW7W7t- at TktVo1!-aYmR3e8(i.VK9.k<]?N,>2e/k>>mS3<D2O#@\o]CkeWbdYJ0&Uk$?FM(>PHEm6;PJ>\
+%#DN5X.V`],qDcD:N`]DCfq_[0Fm(.iLZ%]^&+-m;A,#fJ+e)EVH>7fiD6.7,^3^a6\@.K!j)q>-Shdm\607n:DbV>&C<sebIY4"j
+%T81f874dELb#j>XFNYXU^&1i,BfD'bDs3l)l!Cp`1!//2IA"WBjVQ&$0dU+XEG_^4`j)K+TV%5Z:EjbYLh?L?&>QTmY:H+,#qmd4
+%BfYjC*Z_'%*@-a\Zo=,M[e>gEM&cgejP9OP'HM@*/3]Y-5D3K at 3!c)Dkh+8GA-=uWSPPtOr1Q$I&9kC)m at j0H9AVb%N';oQ>W[D)
+%VHhDeF(::PUPH\U8K?JeWgk<"9l^ug$H:(Zn at MJ>!Vq'.a4BsKoT='@#`3?Ong%:_N3MU%4W;!t33f<WD9^03V:PnQS at +E:7jr\e
+%DgtEZ8n1CHBVW;QUa>5<<Mp]Y<0jec!0naaZmY7Wl*7'+]JfUo,8dFhO_"r2#biu4M_hdjb!@#1=gYK.D9DYqLQ42Z4YfAMkb5,!
+%TB+)3W1As^mjGTY\7aGJ+8F'>p6;%ql`3Z\6t[O!;<YlU]gN+4-b7FSe78o?O*Y9*W#g&h`hh95(dj-Y9c5H_jcYdu/-9PL\G?]I
+%._ at qJF@"M)jbP9lr3sm+)n.08@#(*U.2T\@:!RbCVd9o.OK?aqmEjdsQe`*q/pP93e8+)LJ79q<2)UCU&Z>+I/n/n`n&Gi=7aMWf
+%IbX+n+bXq@>)R7sH-dKc6ojL=HB=V%7<r,5,^6e,AIN^[89U/[bIZW*Rr00c<o(2"O"mHiY[-m=Bb051-p^(8:,V:`fUuQ;'[Xpa
+%:p+;HBphE5qEhg\0js4sj&!-cFC:iHdSlb(//K5$k^R,>Q(k;N&8>:=()M@!WB=Ld+Ks.RF)g%@TBY.9m1Z"F5ub.g,K5qD2oN$t
+%aD+5OUR:6jAU/t2/WQ at I@E,81ja3#6)e/06k at H]IG+D_REdJ]32KY98q`^$JEu"Gk)YmX15m376#U1.7#[YPJj?f!k&6-1M at pmZt
+%;@@2&,H3LW$R$<h:l)D;T4kM29(^OkZmH%^Oui^5GqTY:8_%+0k[*.:GH,+7M.Dk]$Aj89caerXQ3rJAWp3C&1:+7MdK/`\c1<?n
+%U8o5\DK[7gWWPFtVuqBb_fJ_TG+Q56CFiYm9jUi'>1E=oChKCK,21K#Tie at 195\G/o8O]iRRFDX"d_t%g!A^>Og6V\e7qTM-ekuk
+%l84Z&j"g-ZjisY4*#Ueg)M])peKc>#;thZNZomupP%p:_-.F at h(`=L>"s5H!CRi0;lIVZAHF)r1q;k\mH:A)>h6t;]o_I[B4b*J)
+%qEJlS9YfO=^ETT$=#Q:Kg[Q2?'IqTB80lUn=SX1abZS/N0\V8,D0)KtPb;T!Ym0HSFDc/?ggl[C@!dBZKs at 7eY4?g`MJ?)G[V7k&
+%r)f'-%=":g$$\&EW__.n;UpURWcN+semKuSEV<Gl^3)'EVu"b_FshdI7?(Flk4*3XRJu"i3[ufVn5(<a]Rkk"9[AU_^Cf42(joXb
+%:J2RK-i9t>;"Ir:7TJi8jDT$I9+B]Anq,6uW30lFE_W[`[0P-3=N at +N:LAq*"B0a4Ph?5J^=`l>%rn.'<*5"<:)W1KISSDt7sZ:O
+%c`[/aJkuDq\cBt(Qh,nQ at sMdd(.uksp8;"'E+?-H6cDD'E*'u.%T7MNC'HEplnnUX.n1R"Eq5#XRT+M`redBhq2G1^@H`Rb,/>O"
+%*k$5kj_Lrb]F/26lbrS#Y^NIMAbj]amK,Ki,Y.PdL1Fc>e&i[Ue7YcTY!_S+T#M+u`ubPCJ"7WZ1/_s"I?aH!n(F,X#G2K8BO3d^
+%9?`AM9P6j at hb2FY;sClF3<kc'8T\f1o><]B"#j8T0+p][I<r45"Fj$HS[^:\A,#DSR-D*5-:?jmI5bJBG/dkK"ncAjV%;-7j^YgA
+%ngV5RF;_^e-,t"Y(O5SQl<&W_MMt-*%-%X,Sap_"4P9]3Un at SM?V^Uk5KOW]SNHZ6eJ'5cMFo?:c-Xrpk[<#2F?Ir<a_)JbbG\l7
+%%fP+,XS[8%(,K8+,1>DkN`'F2RKDT!7&/CFSQq>+d2^6%QKG3="?4i"Y2^P>f0dO'XIE,JFBU<WSO9?On$2CL/s=YVd-N@%RHb8=
+%NM9m*LccNEjJ3']A641fae9<Q3[-qS[s3k*UoI%1c=Z!q?S"XA"$&1!objrsl:Uh/D9TMEM&]K-kb4<LlHVFP;+SdOl:')B at n7(f
+%(eYhh_`D0E_[rM%Wn$FrEZM:a02L'7,[HB3TmN1'R/8bp4ko(3f!SF.RU-#?2CikjhX):pW'P5I;QA6/6GM'Fm\&9924,:-D77UP
+%?<KH4QCGO)SuhOpgGT1hlaB&lVOOVE4YOE++%AO at HdKaP8$48pUBir[W9:9PZ_Y/8-2&:'PALBT:.eq298`ZG/Z69^4kP>Ko*Fe;
+%XW?AofYd.j$C(=Z:ZM2D=PGoslge.>7?i,73*[6DDCG<D[,(+8UYSahdHl88;Uogt"oQXL*Z)OII<f8%d]XC`No4?gp>,C-UJ1gA
+%COSB6:D-/!LSN at 4R>j:T1u$(Ai80[eC/NgRh7IXX+og[<J+D9:[m_XO(\+bn\k=^7omStOAJNfH#HU=HE/+*j)f=Cm*'!Y/UaS[e
+%m;o`#n(Y+sG51FT:<Ar^\aL".NRQ"=_sY!T;G3pC/+?eMi4mtXF;Q+1ZE=_,A#e&p?dDo:*^46b8cou+11lATm!da/A\RlL2Y%-T
+%#AkQHM%pPSp<)pPh#U'1Xc<g4IYS4]^$SVoq8$k8mQOd=FP`nG:E]o=)XTn:W2YHK+uQZ9EBFn;ga;[fNYSupf;@<Ei`H1Pr:*SV
+%EJ5KVr)o'jl:OcW[<>?.JEP:'1gIl23V!'prQhdnZiEOK[OZa``_V<-GMcWUd0>pKa=\0!i7U$G at 4d5-X@m&.[]Vpsd><#fo7[KB
+%T!2a`Ye,^=U#/$rN`0)La_KG$7noPZ8V!f&ksK+i;c^3=oG!7rRPZMAOuXl1&aEJ4*</tp?:uFGO8*@(`L]9#%E#S+0;mNjj"f`u
+%AHqZV\tQ-rN%]V27R%UB7Df`1T9i,[BVk2Fb6+2895%;f#R-:Sm%K<_>26Yp]N:n(9C/6WB+<qg0B3Srggh)ZTm&WSjM"@C%q[Jo
+%j5q8dm]#FtYnokVkd!U%,)9rEE^S5jHCtPK at 6<XFk.-Sg><G5^"au^Po&PVBku/]1WNR$3[,=l,?.V'3JtPDJ*YBh-&9A at bDuk)<
+%[PiJ?$W=V[UftqeEiOF0P+'ZRS%"e23aQB<i'e@^[e7mGL17/to8NZad4ML(B!G>aHn%_DU(*A&di]1Y="tae,_`DlC;%Ps/8rpC
+%"0@$5W`f at uGT?"^Sc%Ha'19k?_>]ll*^AR)-Tk!e9t0,PhL82p;7D(GIea`WTBHs'r/(MNj$1Q^+6SU,Z*BE8MhXndD(:8'_]bro
+%&/;P-#(rXn!^ckVX(N&.&-iS)R!.6J*X=Jl=A^LB<$N2!@b:YV>lTslh0%m:p)^`JFuGgn`F$nKp)`@[V6f/`$K=#7?h'U&g at CY+
+%@!9!(PQ14!UTrt;IJN:+G8HlY?+bRTVt2k)rqgX+;#KVY^@RgY"/IliqWs+nDZ0"tk<p&0oD-?a2m4iWcPc32hD6fH)g8\k("S1s
+%CK#`XhS3c7+-Hi='*TO2!bW.Fo[&po/1ZGHEp:3.%io4drik/ICrA<7O83_6,H_;*l^1%#:6dSn_]!B=1$nT)Aa6V^_tEf`NW/::
+%[F(UpoB,&_r]UiAnWeq>BR#FXJ2oo/a*Xugrl)VWrO@(5++)rgHefcjfcPRk[s?ADa&TJ$g"A'V0fGA%k5H\7H-\(.C"DFrbN)kU
+%F#15;AciUkb44LoM?%=]#ok at umZ0il<K5JOO4i.O3US_N>oGGNl'Re1/pcp=.rClE^pB"#D0)1>g%fY`CA)n^!+Jl)r%.3:.4I]G
+%9STjU.7pr'2'lHp"6"67K at W`]Lo[D+LmsahYmR+?$"atl%1uG`$8Fal#J>Y:B=CMYL1&ka+G5GE'`]/8?AG(o.VIWCTM<lBi3CQ<
+%D+_.HK?7U`$!+LHS7Cr#3U*=lb=U[)rT,"#=e-FU*9"H"g.pA#Jp_9oR at g3?^se)Q'#_ at LUFg-bEd$h[=sG*m`b!sYN>R:"W4$o(
+%+0OGJ6:H=Z0Eec-29hi`HogGuoQdqP\upld&/:f1=P#Z)7-bbH*O`%b%d at A,2*f=*BqOP!,&g^3^("qIm0`tM(W#^M at GckC*fYo@
+%:^_W!9S"+9#gR=S7Z>0X3YP:+X!m/^D;g#:/<#S))X#96JCfkFe<Xt_f)\N;;?^H1=^$poNW-o&[);/h=PE0T"74l,i3T!@QNj-%
+%A)ijAVeY$$i^k?<g1K[9,D3\r;Z`sKapC5V-N(BV. at M+eOKkV0,HXiMhXCBR2;4598CrpcPa61tkDpo(@.Ch(2=Nt%Z?9<u0K+E)
+%8V\Y>PBnJp`Fl at Jg'O=EO>%Seo=BCP4Nb#fLB<IHWfch8laIQnXQ&oX:1kLMTZ`4)K#`/AAC2\T'\:3OhAYRWnlXM)kH'tU&!oO_
+%2)6Y.?.Eu4k%e7hPUtbk,or&53fZ3KID+7X&@r"j:($"U)r5_CTc6"Hr6f1-lCrO)ls%b-O\!a`F_Sc*ScbUXm=[=]&bnfZ[P/9I
+%G*RhjD)550_d1$J'3fcG>Qq4/pui\\pU[B)<0>7-(7)h`q[:SR'oBpFhrhjk4*_CDGr&BulHVsuFW-",05\;)jDN2Rhf;t+rB]$#
+%dYK(!_J2.5Soe8>>?\,X`D;12=PI*5;YRnr'3fcG>QlZ0ThreHL7#6MW`bHR0GcX1/[r?r"CVjT0-qcE"Eq5;(FrLDj*Io3>DA-Y
+%XD1:;C"/F at Pb"%_5GkM6=2SpbZOp\$(kK+/5"M5meh+"ipEf0b_&@0)A\dWPF)"@WL[0Je<@s,qFspS"bPJ6=7?PAsI1M8;e(Iq=
+%i5PA<qre`OCX*68EK<K15QGT+V2_V-SPMga'YM3R\2<H2:KX0b"q\kQ?sTVT6>73461t#$CRj^Z7;g>1kF at iU%i7L_2:RqXF]E"2
+%lk:!DSQ:/Af5c+PMnf`Laubj[\ZTVD!38.8%=Z)fo7eJ'JdY5H/e72mD>.POK at 0SPDO3g5K7V^_SamA^Ar`Qh>-Y#68/m1=cK4-g
+%Y92)i/_qJN".!"G/Wm5]a!`3$molVh?C!P%_fInoXDpO%+P,lWG!A"uGfU^],>R7TJTr26LeFMFDidfCr0@>$HMM0V9;<!5Q?QYB
+%5SMO\+n1Y,O4X`>ECN]J\Eh1V at S<n[X+8`#V$j=Smhogko\YEi\@uQp(^bVj4-SP_LYK!+S,JFQ$'/5'U(L46Qc]J(/59hmPc9Z1
+%C.`gpP:J8`[+jur-po[1K/QXd95JPm9!<r4XaJnAJi1j(D/o%)3O>R:K2p:;on5T#MlUdM.6V=7hRR3/q:XM,fa/kDitBV57=,k<
+%4QAG#PZZHe!L]9dDUk<-!BpOCk#jkpKUl\>T\H;?a'c?\[WC"h^tMDiZs5ma:GrDm['c/"Y92)i/_qJN!u at 5.]XKGpr--FZ>h1k/
+%I1*NA\EA>:mC_:o&+E6?B[u=uCg at +-\iuU*Aa.%erK-DEE=Q)p9:PqQ at N&<Bmd*[;:?[lahW#-pqWl]j(No2i3Lckg_l7-;l+53-
+%ba)3bYYNK"AP(#$Zb*#t!h_X*8\r-tCF4^Ba$\F>R1r;ZG>.&;ZdDg=dsuX+mK>**A[g9f;+G"PLUM9$K\@g;QI^sm+kAAMj2A3Y
+%.6PAQGqGR./:jrT-2fJHJkF]CW`Q*'n@>csf7!P)&X"73*TY8QhJ6a+dbtXN87V4n at 9Q[hgM#*5Xce:Jo._W(aBLBGSW+J</M5Z_
+%i$`OLl^!j[C]99P_&DLbk-FmO1?$pPi at 85TiT?kGSJjgr"cT%YAT_562g't#Td\VAoXVEa8mWcN==KT:.p<!g`Y at OcLkI\?i[V0T
+%q089*ih]e([5Ri/1Zu--'VgD*Poc?S!RWOt]J[uWjfts106<]?mOnR+F`h[u]sb!$7:Cm]=m>n>?e4asMHEJ.QFX6R:9J-C!sf at p
+%2*EfI^lMkIC?bEq(Z$R61/%&Sr0[&EK4Ij(DJ(36?tKYtbIm`9QBRYVbWB==7U+\dl-K-LR;uHL`83O_I:7r^[b>4s<A-,"Qh;XD
+%H$=Zu+e<^m-'nf+VsT^,!'j9^fSO!5&[7 at gei$gi%++qMPi-,AeM@#lN>R31`Fpn=Lm>qJY7tO7<C-gH!c+<ag[a4AbC!s3LPt["
+%LQIZ(@I at cP"M&a1*u3dap>c5JDYmq\gZsA3(YmkXB_t"Y&X8QiB_;)G(SCW"+P?XncX,CSI;qTgFM`I>rYPQYfN!Fse*&"g$9f_"
+%bY7o++jSj\s%iTQ:X\B`qs8B"l$Ds5n`T>KrsA6<akur5h='ucDY`l<%R4n"oAAs8.?-t"r0B at T-(=jqF3cBQR^o+P<nD"dQkMbV
+%2&V"o;+h'b[0PaDd*ObC(fOo`*0KlJ\_2P7+DYr8ndg)s4Bl1H_?_j6U"XB*H&WN<&PAjm[5O'GAb)-&8O8h%_[WE;bXFfB-_6p]
+%?6bu at QW^!`A<,"">qgbI)Ll@=.e^O^**Em_Dct.'\iA$W. at c/!I<`USrN&BC0]i"8UG^0^P/eh),U[_\@jGRoNu2FU!Rf10eT7W&
+%371OH=4)7_R*$YiqrXp1'R"D"1n;f;d,(J?Pc.53ZoH1H,&.c:s+MVC\oL=13Nu>OZ]mXaGQk<oE&'5J;0E`5LDH7._ss&)VZQ<.
+%"L1%8Fn>J&ao=r,l8G0gEZJ4`kW;XuEK6Ae]fCH2Z-\AR2>=b\VGT`U(^Pq3bR;$aRqW+]=K_3oK"C^!!Rip>L(^/,f,22t'O,s?
+%+t?6?i]MdFm?Pm, at Zk\%ZNfsbm5<25F_2#scb["a)4O1:ELP';-WF32kkU8L/mqH at p-=4S8]r6RK90V\5QF(8R(G7O`"+_h?ZIdf
+%X_[pF48.Z+F(a^oW4's4)n<qNasXnu+$`ib>uhbif+\QuGpIC\-*S?43?'NUB/F3piZL<K_Jn:4[#ssXcV3(.g"Qpm6-H56]p.fY
+%C.M<k3_^ee4"8\)PMl0$&R7\>Ou]oGafW`?He<2EKc<+<S*D1KPcpcC(!1p$e6oV4E+6j>:YOHTl at P'.Dt`fG<i8>9$L]>O>i$$4
+%WCA%0UIF\qpYh<YB&9%[OC'-YM&XEZ7`\sRd6k<8KX(`@8:)q75?q)I2PNoZ)C)8N"iS=t<G0>?R&Q1TF<jBA>=s.&N)]c`f4LCt
+%?R]1^RHE1rl<t/g-t6`/PpGU5+1-ZQG3g1pH\`?:CWQMoIo1?5hK4H+B(egdDT&=lao]<d)04S]\")>-:^B[dnb?5\Nm)32V1 at ij
+%)X/<5iOi`i,$BQNkWmc$B\BtaS=`]$IW88L<0B2J at GrEGnL=g4dOp<=>M$];fPAOM%;AAtd.6JLh7JFA:UUhZg*Xa%D=/,r$Kh[5
+%c`@6%X1aQ?i4aBH56;M^]?N7n/;`3\";f5:\;"\E<FU*G_Skue8Mr?-kR<C0bee:4DNnc0CU9NGAuq0rTOJ=sQ;%te$fqJ+"@;YW
+%R5%/!>rIuq29slh/UPfpn2#,s8$sFY6Rdj3mb-#M(gZhN@)Bj*gMP&a3?A(pDR2IW5N"X]I>S\K6M(^VG;n4rp>+"C/%oAWCk#]d
+%XF=b]],EdT,49b4TqDE:Bs.sff?ff5Y.Fl at B/cP2cB1$B(-J^PY]PC&"=%%8+??.9(+VL=W2SB>c1_=qJX6d:J1SWV?,uanm^=c!
+%mm9kaQ6jS=l!j.0R")df2^KJnLQJOQJ`nZ5Rqol;nJGq at H0<T-'KFYFC^j];hkr_8arQiqdP#+G/Xf("'P1<nJ?s&-Q[j1n085*j
+%-!?-$I2Z&fAa^i6K/gEJJhScJHSu\9?9)a_\TJMITC95C9A[o5Cr5=KbHCb4bW;]c[@MnYUfLLB.#Ua-1Dr7odp"!S\L?0g%WDNF
+%?Rc6LXsSs!H;1<'9(BTtnuoKX%<b2AM=bB-RXk+VANIp at CgZ099GfsPd;]_$LPkA^LQfr`24!Krcq+iL7fb3d>V0Kf+"lNbo"4:t
+%kf#e4?77GM3Z)Y/C,$?b8Z)njaZ#U[<G%eUPF*sCV6HQE1[^AS^RXtBdb(`%)if%H+E]H)@f0I=Wr#hhlktRoY>'<e>%@k&X4(9D
+%KGI_F5jiqXiMeX"[P&OGG`\E!TNpM^Y\kVaH,gd0%J6Sk4Mt<:_OsA[87I1T#JR30P/).VKH'c^,U8m'0=!3XOpc"p'0eF9H"`!c
+%B'l9d/N;U,'/-EPMaW.h9YU!+YYD*IEd(5X5?nEY at B\K$]P1Ou$*c+Q',h2)?t")8gSp%=*gD!3!>&!6b.aWlF,'E:/#RB<$u8JF
+%Ute]$Zpp1/PWV&akt-ZuMN%YSAiDaXc&$kgR=M;Q'*m6M>&b$gdWXXsCI7/5dk*/Bgq!^D_a1o:)F5s<.VBoZ1t?&,4f,)\Pm<?k
+%E91kQ_gi6:f;tE=&0oG+D=*^2``p?dW<#^bj$(=F86sSZ?K)O)mOGh_NH+t]d=Z*X2<h/DRD7Ct1UZd#P)c()q;Pm4NE&!'8ANQ!
+%bM?a6*qn<)iCI2f?(ltYPE:\p6g85u8MkB"AT-llo;=nn6clO\Ju1aG8QJj.8Y`('nIdj?lAHZarQYc`+M]GEXqQIc.(K=[MD"l?
+%!=.elA at no&OG&@WCpaOO\kK2?Z>MkVODa!s`n^?ZZn9Q(jLJlaa3n]F;>+B4[>0BXPE-UN7Wo`p-R9$j"lHU($a*VIiaCbBCE;2f
+%W@!Tb%k55_Q3:0j`Yp4s&Z,:i^_Z&9QF:<a/X5!?(Qt(A$RV]13%cW?U!0#(`"s-o$]$2LZaQ3ZEtpNHeq[t((X<+\hb,Xh<V2Bg
+%,pR7dN^4LJDI(-t9\XDk?R=*Xl%]!hAZP[AR_CYb&.lA4G-3eQn-aNPU1`-BVMo3<hK=DBi\P)PXZFoPaOnA*Os.CT$"q5&[@GoQ
+%=e&PiEkC%p9X891KCVl;];C;R&phoo_JIn4L&!(_1u#$UlWL2e9L_\d2[E]G9EN^HWqR*,Kt<`ia\&ZFqD\C7JUj<@`X^]KNoQ%h
+%m`Y0kPR'=IR(>`IWX#3%AN[iFmQ8_B385*#gmkW-lD>`tY;qEK]`g)-\(?):a7AcgcL'LpSR5a:^>#h#`'l'6$[<&VJp1`q3=A!X
+%pi(F9.7gj^TSO$<CU;J/Jk?6;.,aQ&D,g%U=k.r/T;S)`UrZ#Ljq"2ZPOR&+.:+Tg8E^hf0hlOWJlBI$0:'c.!f1OJ!bKN\XCS$K
+%RWjJrTFFhkTEhP&Y&;+`"D\G at X]j^>"SJh"cSOVE<39i_eIa+ at Y*fs\L+rF`^bF!TN`#d*I2Y*k8lp>t^,Uq)*O"`k1BKp^e at NpR
+%:DdP<<'cBt39Z2<;CP,\qXbPs8>\Z!.MX3$962VS(_B at QO)%1F.\(Y>C1E9/Y>I^]At?c*$BgZHi$+.ad)QRuXg&$ck_.fE=`NJ*
+%(I_A[L5%'@dIo[/0]B:U#]"rt/*gV#CHJkCC(F(-K\:XD*<a;TF0LX;P at ukqF"V2^LlnK(MmOZ#+ at u$jM,"][/YNE('.F^)_;UV%
+%K2%d+*#%)!iFR'>G7UcqPU%VZW9gl%Yk04c8HIDA*:Silk1]'B[j@,?"tN2)'oI?uja+C>HlDkk(4BXnMVoU*a\O;"b=W=fL-FAH
+%hGR=cCA'R=li at H()bM&r;M8&BjO;Uu9*uMVV-jUeOJDP&lCBcOSC at Yf-AmWF:M>K]]p%L.6I9WuqgVUl3r3e6"KLT_+;\@GKPUVq
+%GNTHsW\CmQ8/J%h4KXug:qCRcY->(N$\RYGUAR-L8^&JO96S\/*4l)POefC`A9o4Ue#[!/.d`pjfkDeA7GfL4-#t6XYBr)u@(UZg
+%q9GWdEB+4%f']Y=K7l<_-'`R?bm(3VD)<VpF<tAH8d2#j,UD?Qre<nageAF+[LRsmM2lR5^8IE>$;i"'3EYCYOjjXPX.Uk4e[:+m
+%b1.>jA^M&BJOlTVYS]>p?+9HI%4b2W9['fO-BDaLJJiF/",9s8o-?`6*1TLb>&.,.28'H9$,V#,g6h(b_\Vf6U+mjn#3rZe&?eOO
+%a0;'ZJ&n;$SOSTYnc4N)QuR>t?<8lpFW[/bPtGP,;<qDjXf5YC'g"!L=TqD[$p(_gg#:!<;_(^CklPXe$PO.50>%(\:mh^$:W^r(
+%+S^s?C8O[od7+gjP&ICu9N2Jn8A$r"IB/\W[-(Cd1U`$k`b<0p8ri\DRt/?gbT)<T69-]F^PkF*?OhjaMNL/-M5HY[#c=PmIO9+j
+%7h\"A`[<WjjV0U,Pi\XrAfec+VLWkJ:eEk6TW3W^N)DNT_#h\8gP!AK3,#2b'I7oK'KU23`e9@=9PoC+l,`W0fWU#3a>p#Gq']-3
+%)N,!g$<`cV)]mC-/;QTmTE,3o:]_P4&:b+^XCk,'Y/lpVLQU:?&glQYUGLr(&@*'[B1^>SdSqn'$:4sAAT^#l/2;[`)0tm;9ZC;;
+%08if.;9o^:Uf7`PP,TC(STBT.5U%U49KZR%*LheoWrB4>feY@$FqDH<5ke-6@<`/6ET$p$\]/JjR-h9-'Q\LZfXsO[7gDRtO:_mG
+%3,4k2*t:e14p;2gOnmaC<:DYT+e9:!3DFCsC^<pZ]K)3o;a:UWc8%E\JO<a22*A7%GckYCYhb@=UM(/6,or;'(<j!Oh2O&GEL@[7
+%ltS;^3#;9\3Lhh[:(H]@j9JX^m/T`IlEs6Ig<6t<]=d]a$?n[Jb0?k=6d^,i#$&7VR4>878(ed-99I"(3BoZW+hg`EAV&d&R72:U
+%r;#OlaqX(q1Qc(rBX"d<U<Bf<XB*'=!oc\;TE.&1TqRVTa:4&i;:;eVe-i"4$]m0dUOjX.L]Y\@TV'%.ba$[3riD,t;D*hT1=YFu
+%<e8\"ZH<SB/'e(9Or(iI`/:P08hkY>TLDfAZ.]LjNS1<4_TpsIAnG>#2N=prATA at 0q:t\Z)[h'N:cuLEm/$>a*?[#k$$siW8@@`b
+%"iu5H"):k4.n^4d<0(Hn6"4)>"9F:3H'`;=Eao6]CdSo,KpC&NNcl]$<\nq,.?`!SSsCN:7K.q_5^On%i9\=?/8ZlKlLY[JSHqi1
+%W$uk4(95mHToP<Plm[HhEfDGd6-s&i at UW7J+Z9HP*a!%tQG,dcVNtfO<+c6tE#B'?3[mR#.b#&];UUan*hh4C4!#I!dO"cj;W_W/
+%&Y0O50u&=f73rWTDm7lGbJ8tt=81*@g)lO$BGE=<$j_k/XdC5_-S(b.lB"be9?P+=9pl=)VpZpNAQ:BGmJ at O/+I5W]!gQl=+EA*?
+%.[6Q(TW7;dctG%G7=&p"L5dgW>l$=n-lk!QFNU>GCudiQB\*:m>h2D8't^djE,o?#W6VNX7R]>!HE[a^V)dZ&)--u-_Z<D!\4-Af
+%/kK6PZ>(A>7b'lij5Qo\K!PKbK`HeLM$g:F&HMJ0=rMf(Gugo7!""TiW,7iC#kDs)(pjPfj,QRA+hm!rd&eFjkS\B(mD]6u5u3Uk
+%(X1DR]b2-h'YWNrO_Nj?0pT*<:m>$+9'VH9RU2#Z0,O\^:gsIX%)bfTCo4Mur*,mbd(:C%>(p_+jMSHn=k]DZ>\QbR*^Gr`ab%/C
+%`a/n0q/Lp]4%Sjm0jQKkm>AMg(?8q@=94'85HtekEF1UFFiQUl71;/]9pfo)%T1t)LcruD78Ps$WYn:KTZ!@f8?7*>=Md;!*>IPH
+%M5YjD`DA@*(aO+`Etuq&k-9V3-CKbC\GVo+M:[irn#6$SKX8m%r,W3:4 at e2`L%'a7`CJXQ`&b;tN#(2ZEc4t.H#>WX5X7K!oPm6f
+%7YM`Ihb\H+1+YsN;TusMWC5$1keNB2G(Zih=>@OsQJ-%$lf_NWPH:;5N&B/_%'"@X*)284fEN5o8EPLb>Bm_JCRIXdO611U/^=s,
+%".Din#V;07;Xa+"+U`hUI&])%'#PU4+_o'k=]$LgAV")rc=9]?3**#tX948ZRAA&A6ad5&4;GF4JqiTk(g at 5K/hTF!O?u)rCG2W)
+%Y;:Pe.-072/?M,7f.>$DI!02&Z!4L@*9Dcdf&(]:Z/b\oqLh_<1V&64dR^.Ii+1lG*p*I0mN5.>Q&W@$r=h7;g8JnD._P6$6h+Q\
+%EiNjF(h at 7fj4>I(]BY+A(j,h2;RD=gU._UWAijg-C?2UY]kh0$ZEkf<bI.(>h(#'CiY[m+)CD`/cXuMmX4n,7-0cY+f>-L,>,8ko
+%9dX9G]o>;t at I0I\#<%8R]"3rj3F-6OCqY*/Up;?F at l75=W?=7%`SmdlD5?HV[Kb9^/!H6Kb*pGH'o"]M!%i4Cc+6feBNu]VY+rF5
+%r[c>`JQA<;OQ2M:V*H.u)lYf@>3q2242m)q2Ui3\jUOG8)bBtb:/(rlJa?%S5`h*5)8UpmU!&jd3M?ACDMC7GNZsB0k1],r at LSOg
+%CmkuKA]^\aEkL6ITr#2n8JEsMV_BGQGbYj73%^A\VTtK8e^-"+f%tj=bBqE^2H_<L][jmUI\??/%jXUBk/U*G"M$(HmQnacKW)a3
+%X8ua5gX/KlM&$E##AJuh$QIO2H>cer8>jrm2<KmoO)_gr\9:mKC"+U>(>5K->REbH<Jjl_[8R'3S9"Zf7-+Ru1ODY2%eIhW85ro7
+%4JK'"6ZAG:Wd_M'Y3 at a&qE5hu8Qt=KCUJ5(UrLiqjEju6Gd+gtUY;b4D-f=6Eg=3_-3SlDg3#$8m35M,/X-TDAo"KHb;Q^d^WHYl
+%N(B?#5i9to"?sQR"jN48@"/[l9K!tRmBf7>^nB=]Y$24"0ZO`r:SA1 at +*MGbN=n2X&'u2&V5Si at Nic$\Y"C[7gu/]=">Iqf`T, at F
+%d\FkgB$(c$,tEA<RLLab=pA&2KJ.ggnk@:Y)@9M(80BoU[4rTUY1$*U44#%6Xs%%2"r0 at 7$5TpU8:An&DLRH1d"@bEQUa(G0/Dh<
+%1`23@@n*PZ7LSq8>*X2on[R1>,P;u>jQLm?j9[GZCNE=N7-e$VL/stA*)][`@t&8L/>cj_4htjn,m+PG]0L3_C!Z9[(rT&.$.W\9
+%":T$294!TI7SB23Q8ZFUe=KN4X.UA=>S^DG6S+>li\)]tEK+^F.pT7uN^$r+QoR5G3O!cA$urO\Fm&I#TH9%n;Jd)?bN[Fh'MrGO
+%Nch"TY\=sD1("AV6gY0s&n%7[70&WFJ9.U5gE0itEl^RQ&h:Z(nDG2`>i/S55a_GCUU4(rJ>E73>*m*re./d<.b at iB><kB&bol4&
+%&;lP,=_H<:_V7Ti.:U:9^+p)e<F%0[R("iA_W2rNN%3Qd^JlgAQ6HjYS56hj*=Os%W#njB8>RuhS*PAj*5G66?6JXN=Ud;n%Za$!
+%DY8fuEo^3>.,^dBkAK4J3-!!p<0morif_f;5M!3YIYuX*TFPMP,cQaNO:t-VM at -=cY(o>eqUY.&fXLS*H+aI4W6^p$daj$pNk*B!
+%7h6Li+Y6Wb/5M]T8ipFP`&?XiA;53A1_A+$L;kG#>h%+-6T9)nMc<@c,Mbcs!=YusnLfft5s;2_I]CDYfG"_g(5*d_6k!@YL)A!p
+%qF8PtY-D9pVUd2,OH*t5o!Kp\4)8D?kWh:NI9,fNn9gBN&j,ZJJG#n)oP,V$\O%cm63g4 at T$7D3pgu=Y\1O231m3tP3mDjUW?b1Y
+%q\4&"pek9>cBLu%-Rh\hTJR"N+K64Y+_;=c<Dj13K4H?OZMnl9Gi[0&=jBoTOOnH=5RYFF:5PF%S0[2r)/OrDkd4Ht[Em&<8lQOA
+%;4*bJ6&R$DL^?X^6(JNsZuUJUmNQpKHiVa9W,-$\\VE"EHhC%[0 at JjDk,M70WDK5k&Ue;b08fOiAg:do at T[rT[_Z+G.%$dWWCJ)W
+%/:>:A#Wug-V]`2fDGR:tc87Z6\tr,,n?b2K at NA#aO+V at B1PjO\X3S`lo3&K;>hoJPL\N8'b`ZJA)ZL:*@SS(>FYrEWVl5Gpa;CME
+%G$I_Q:4/5icYgV1aC1+W`iMMM,')4Td4#)1oO\.qDZ"RG"CrD3M.JH\-E3md!sXEHYTi9$C^pKI!"MnhE3sR!J9@'%kR^]/*LQ&5
+%2KUa*d(l;b!89C?6:[KB\\^=UckTS4?n>.>XU&`5*/NVe2,+dH*lFkkiWf"NRf,U(&t at r+OD?YbBXW;<$FQkF.P69SD_aPAFW%kZ
+%LO1]`&;N#,Aq<p)V`#e<CD2B_:$nHnN15*%l(pbiN`ut<4JV:lID8_b&0*_FI2r?"]gn=AXbK3 at 0P1I@B!^u-0T-`BZ.e_%e+:*=
+%'fZJ0:=kQBZGAn%Ka!GG0H`T0WQ`^(J&qs.6[\rs*=[kF)ur^Lr at TZPi$?p=b at PJ_6T:=!l.i(o<<eF,SkE8h'Tej],r]Fq*uO.5
+%_>9fPcObp9b#.AESL#.(.MpO&B1T7C^LPIkSGh$gbmq*Z2>e'F5b^,^^mZ)En/NJD#2V,&`mo[hUrjIGLD5A7gCi+K"pqB?REEXH
+%!cSCg$"hnt6u5L$l6.LJY+Ps\QZU;(6UaNtk1_.5,qW4]VgIGuM'5Df6Wl^"n2RZVI*9,*R7.o=m$HFPS1]L=i+QZ-PG6QDf>#X4
+%^ljp?9?fepgJ5JJW]LpK?-3=`^t1RShq??+VJFp$%`42sO68J.$i1)2-:RW8-Z"X_%W(jlO;E$Ee!R&uC,\(S+iYjPSMY)=FC-&^
+%P`#_NehVr2Y_LO9B,F$I7tjN<T2:l<CpBL-JU8TpRsIUQ,U`t1aGfk/g;Xu<f'8oKQU-f=']`Sk=k60-a3X8L72=<c*3EI81TEjO
+%MT`i!!XQt1DmMOMQ7/b^ldBd7(78PcahoqV#,*LUf82=ce3kGG+D<`c%&5es3a]8bVY3h`m%&_4hJaR`oBRqi>nF"^eV=!3BB[0S
+%U`%4G'gib-*"Hi*E`=TV3AO5 at CIl[g8L59QdT+ at lAX8uh\Z6=SgI"R5R"=1I)DrF&]ZgeUBkA-k-0!37-YJ8FVe"En$[tG(.MF+1
+%,nauV+Es[76V(-SBj",4VsR at ZA7"l]#e_ES.c#79;9(f!UP/R<<kl7+%:_&25,obI6+i?//8*e$"fgghe<WCE_PW`\J=uJ]^=*+E
+%MD6MtG.2eHDC)-\k&7/Q>ub(2+PRV>Yhh2+Z'%M9I0!9k_T>r?0)@SDM]MO[ksr6)ZiQ0NW^ICZZN9kqJQE&[!p:q2>nO^rRCEod
+%<$<.trFto_9#!VfW8<'/6L at utHY9r'"b9$f8+l^X]M\UXLh,LOj[7:3YT]r$YVLErI]N4(Uo^"ogjrir.&c?q%KNdYBShBGkt61p
+%5TX)@Q<(?&8/rBQ][N$ZQFF2*/3[KI1JYcfd`+-4Jsol-,nDFm#C]^a<JWlq7'5*,i"Z at hXJkk%q+UN2)C/EJKFBT8:_lq3*,38d
+%(f"GMifPd7d^Hj=[</`)]sQ"'<>efE+bZCIJOr'@IL\OA7a7U29kp1Q42NsJUn$0IHl`phU[]Pnl_/1B?s?_@`5k\-p^]"!$2!fF
+%SAjdcB40st0$JR'(p%<!%ONl(;+_5,-B$BdK\q at 3b1Ql5TM\3oPba>baW+Xe5,PsmRPb&(0k_%N&ChM/=P6LfRZ#,T])m^Qk9`j&
+%#"87TM]B at W%%*`K*.hmmWkm<t;7PnCK*c^D4HcBA;PdHjj:qopNb*OZ6`B]oP3!d]b+ObeX&[,;f>?kSr*n_:bs7Pf>#c2-4^_4L
+%b9Z/B[YA)C\ht_G;W`KZ$u-J3ZE6F at b`k"T$)qmHaQVUe[mhsO`kNhOPg,u6$m&/0[bCk`P=6d?FC;.X"I[eR0-U+%+Ve#=8Su6o
+%?u](-J,i9,W/(;E1ITX5/nK8Knl^7_#B2Y]dF]P]4%jCb[L at J&R6np?J=s-llX=TN"JUjq[n.^f;,84Z5H6H#?'YnCW4ne!K$@&3
+%eE$J+V&]9bL0B,T2'CbEZcGM[b<B;G#[!Vuk0'd;PL\TM0NE3oE\[8/jrtp*,DqVe+KUGi5bZ:[VDOfW-WDnF!u*/D*:!f'M?\0J
+%>QsQfd$H8Z3WG>\/%NW(,V1+)fcgc\mD\S at 5]P)g3/V)IQ3?a!PpQnT5a#W4Pae2h)N.E\l.SJhl43@$,H?_A at qKae1a31%T2*-c
+%1GEBROV'^qePo3&IZXlWU\#M+\$H0")9iF*8-dbRUU!4.&Fup^!3pLE_H,k?Fc2_=W1OA)$oaut8TJIg@'Xe^1okFbC:tsU9P?Dr
+%/Br1 at 7aR$UktV9i:8HL7/[@4cH]FgYMm&K$c2#:MWrA;1Be:K?ot+$7e'nlInfX=T;b&eg\0Hl[77;rE.QtOS1QZ?k,ssLX_o;l"
+%2bI:T>-f>`]L<up25%T`Kk<^^rf97J.hUG7j<pFNQ^F%8J)=,&1hk,FA,u+]0\qorWa&b*fP4"M=]pYCjj[Tq\48kL0qGdFOjO2@
+%Dq.`bftr^;!rs'u2>>^#ioUe=;@s/[1jM9uH)5gBP&2AJCl2@[6P&HNDR8J<c_*3JP%cIaR$_J$b\2*R$O^[HN4s<n"K*kRZ:>KL
+%Ncg>[k7"'eeG6Q>QDQ=11eqbh,X?GHP3F^W%id6e$Ge?9gVJ'["/LjrDEmA"kh4(?Z]'F+p'">*p!4AMb&+Sp7_g)("JD]!S"\nV
+%%s%cm8aZhBg0C_\Mn%Qa$+^h2NqQB5=dh$Z<].LbMP1rmMcg\=D$a%63t!63)G@?-S%Qe at R*1X`i%648D(LuDhrbYH/@PY>8DD?M
+%0Vr1O.16tiHVf1^A;OLF#\$7e*]=5[lk.dp/`AgV)E=/NKk-<$N@!OVT!3_Fd[DkJ4K;u;<&eQDA/3kJrZ4&p3r-;!`NS#AHFD<1
+%k"CL\227t)1#%dHC9fJ6nGr-rAkj-0hf&Tj227.d98=6KJT?jWG,V5/6PI5gqEgdJ\g'QJ,+c4aN,Kq5l4j%@kC$gRlibsshVOfa
+%/]??07^U_G9d;E+B\+4I<d(/5+YqUa,fqU,81uAJ7hBi"U]Y>M#RW9B^?B;!Et,/nTW/R5l>LruFHe8I#A&-&p6<cYn9`A!%?NY_
+%]$`li^m+-$'3D<jBNSKY5q",g0.$dJ'S+?Z2`:^+2b-+QR1V5IPHeFqK82sB7.'`T7ONi`!-M,\<=pQ(_t82"@6Un:!-e+5cEJuj
+%m008:b]nkDZLP6Y[#AM&=O]62=uOJLFTjFq@,o$/5Vr34%"B1t(AJI3!nUh9Zul?W6T2sWCq-ig\4r,#WZMpHlSb(45-?\VCL.k+
+%2j8sV_3s$\,(F2jI5)f\s(t3XToN*>ZU-%"TIWN:C^`bufB5_k%^gp>Dm\>tZj%afZ_+V*PO9iVmdP%8^[/6,OJ,c-:H)HF?Eok*
+%>H]A1F.`0td1V50oW!mIqi%XfZrsefYqC0BJD=e3>;Sf\[A5gd`>V)DGrq31fEr`B:FL^2KF3TPlRVS.#&ZH]VleaE.]$(MJ1q&n
+%'Et)`,T^>=[PmOAlPpd5-NfNB):iVsLlC/I.k1YHGkr,hPp=GU+iN+$YpNJ#=i:;I4A?7>^E/65N,J9\B)t-DXVo at D'N\OpT@?Wm
+%XG%NoC(ArNX"TZRFS6:)HJf?\e!#;+WQ]A6e-&mH at LhZ$IDPO%FIGtWkXqCr*^n/sSBL&\B9b=s)&C_U5/jmakYcZ9/OGG1?;?(r
+%P*l!C)m*ZRCbdW!3G0X#[*4Ld_FZJ!=e]2AarNcnrb(`+6;ao*1Wfj1+T/C+*!Gs>Po#u.+_T?0ZK,W`MCJ0S8JE4/5S]b+64C$t
+%;`EWL$aE/heg:Y"<TVn*%&$7K0909hRYepRede])6G3g]'8^S`(P"nSJ4(!@?SkqE]F(YF*+9`s+(c$co--j^dKmk%@[RGE)<t5R
+%AVBa[(hh8Hc`jRKU6B&fQ!\8`.Zu?6+`k5IaWm8kV-<!la/1@*_:Xm'[rb+'jf4F3;\"D5UEgah at b!e=eAcVQ(;E(k9_nfa#>Cp9
+%bg5!F&@H.PRuK[oBojN.dODhS6.3K><FK%TT]"$%3Cd#<7 at 5ca!Xp\GT@)X9?EFM%B5-[@:=UVC$/2=H_ at rFNg]fQFaVA=:!WDme
+%Yl^7d[T)gOV_^sP)uG!P`3G#MT+;8T-rTM=Au_hpCqeLIGZ.:b=>>_M;JB#31;O8N"#JW3Ad!HbS*V>P0:A*&$i!;FfaBYhoHFQn
+%]<r=u-oWP[/gJDD at pj_?op^@-VIb^?kk_R at BNCc.i`aD`n_sa56Ossj8"hVo$UbOE((F*k at -A+&5K,N8#4QHtL>5*rdQGm>;/B!K
+%O1Z19Z%/k'[k'";)b'5&VH>[deRE,%Bfa_:7e'FY9hg>469[.Snu!o//HtBR;Chl21!U=Jf7^\B!%SNoFrbCg1Jk(R?5UG1KTUdW
+%'g%#0EQB*B4t\,]ZZ9i'Ar>^&E.A0?*l at g)VujK5Q&6i*^<X=>E?Z<6:%9iWcb(:R4HG7Vgf>%kH0YK4T2Pp$WM.*[+Q]uh$N[L%
+%\5C=JLbL6e*trT>n>$13T;l:HbFk`(Mr6GUD\QU)DQ,F5Z5S1U*menq-X$]!*%,&HD:Hc4-f-dr<6^M2gP%B'!SGG4<NH6]`Z&DW
+%Zq]RSFhQ1/AQkX)V$IJQ0-N&@.JX<>s$VjC`o`Vo/8<]=),Q<V#\54E6&g1)9/diCntA4e=k6gj*eH=QMThB89eSj;`.B-?E<48T
+%L4EQ:0I:2W107Cfeeg:"cUt_W6/cTYI1o"#oTD7h!@W!ps&<'C#q"Z:%b(YSB.Xud67a4uAOO=%5T/N]69tBc)F,B:;m at WMIg68g
+%%;F-%cB7.dCfu;t=slEcEJ_m!+=3fSW,'Y^b#i)3Ifmr!/Y^(C,f;o_ndYim]2ehQV+;$$;C8AN;kM#AWiqk:;T]JLI2A1qC5,6_
+%3 at 2Hag)N)=]M5CsebNqY.c-iB6J>i3UW0PZQFWc+\AK3&:.a"JW')b^?puSJDK/#)!Ep9-(0H+`6'u`9,Lo`cCIZ,W/-$)2<U.I=
+%/3jl&kYO0J];iQjD&*T3Z5$rE(t#1_Ldl>S:`)Oo";pfhVQ_c^,ZkU8ErNA[9>!]%2:b55fZshI"C4g&PFEb(<[9:#(*U(2SJ&Ua
+%e;2/ApN*W(F0".Ajkc.QMd at XQYa5X-"*VJF,o!M\?+QXcU'J)9kW4Ob]>>@bepX6nn4N>I7ZWYe!*#VeA.i]1!#7&hKF"M<M'MP=
+%$8BAuOB^pY&nKc[!YYF77KDI6YG!(rL(n%p:t.L[g8(PI-2si443bMe\T)/2'cVa.-3QMO$el,6X at p\?YT]s@>QTNAi#2tbkJ/=R
+%84_cCJUi9V+"(3N;\TT'mgE?[K9(dBHIW:YX>+o$bs[)S3="s\*FqaZ?r1qM7E8C$PL'n^HsEdQ$50N>(oe0Gr=<EU,%[r\EX6#J
+%%KEBPYq,rk'H#MKQdj$`<q;sr[0Kt`Z\.KRl;H.^+rC?H<\d118%No>nYlRaZXn5L*p*0Jr"tU<L`Rsr4)-ErJ$r;IS84:LVSOY\
+%!X*&M"rJI*f6p%P1#oKo/*hLNZ[qC at fFDOfX3!_f/fd5qB=>FU7TCm"i[=#pR+^#I$THQFJ#JfbhPls1J]6SYYSg$_1(6aS at n<@A
+%K@&os-;oJ:gdOXV1Y]d_aIpe0WfT[a\]S^8#4A/c8lL]@6Eo0<_p-Uf0dr`t$.d79_b#"E0]A1,6UXhI'h2R&k<>$ifl6u at W43&l
+%d at nR9bZr^SX95tFFu_I>cUgtm;NS>eF+k9&AiSD:Ttgc:Y88%L1:*/b3bYDfdAO"3:DbTP0l.!,)S?TG'&A`5*iD^BD\NX]<+SfL
+%DJ2EL0s?$<ME$tjCoK3%KURjqO%'4`i]0*Cb8S_:`aGj%%!AV"`<]5=VS")3Y$"jSU+J\G.Juk,apleB8gQG3f27L^1YYEtIr at X%
+%A:DWS$!a5#TqXs4B3;oV[,=C977c\uR`Y<,, at +ubPRoBZRA:6%c at Oh8"@OY3SK[G<%D3YQ*47"/Ru-QqdLe6\!&u//9roA3A4'bt
+%:`Ir-7q^YOgRRai/O=Madj0l^g8K9OC#Vm>iP^m]Qnp98n at 1="&>1mO[U<9oW13Y4PSq;`J2J2l=N\e(F*4%2*b%CD.ihNL3m?B\
+%"p<u"Bgb&j6\MDb5cZF1ndI6m+Bk"37iG7`-;Lq3T8,F$nkm]pJ6<EO$3sEa#^\FY?)Uh(S`ghPkf,0sLc^OQK:"TbOib`E<o\MZ
+%#S6Z'djt<SU[hgT:%CbhUQq0NT]4dj8=O/N86[mq?o80L,*_bO.OED*cTl_s(\-\)>kc6ii2j_M7O-7+J`_Fa\"OmjJ2Sre^Vcd_
+%Rb2'mD=qO]*7Y<"k$&&*4uilf?G5/-L^8QF^6CNf1kHHqTaQ+PQ:I6M1AWt at 9+%/25FN4Z8RmF#HsmRhO9Je0R7j=;eh_^&L4Cl%
+%6:lK8fRep&.k&pa]qil+6k#lS!>*j;FH+2B4'[-R!!hIBE]k$hJ1UB=/^'E[<dVUin=D8?MN#c0)$aB5P6dU$)Gkgm=b^L[PqX,H
+%KoGn2X/@()B;$>Zp@^Fd"WM-+Takt6*U(LdD+e2tK&4_I at 44H1%gt2f,Xbbee/?5f4iS4649W2P?-&`L at fR//=c+,3I,2)rW6k_,
+%iKjm,"^Z56,aUuSSFT*l(_qk'h9)gY].B!.g&NMI/.:P39&j"UYXm$CBEkLaf8%s at c_es6nSLlCfKu)f4_tD^OE7a39/]s/-O4jn
+%OY1(5iSg18fk)\nCcS'2MDOf?@!^msjs6b>"2fhsA<UK9)/VFp_Mk*u_4"o@/_>"n_5"#Q6dkY]=Mcfs-&-"9IB4X>G<h>>QkU97
+%\Cg$CCZEog=MeSkml\Xo"]u1/DI+fp/AkR(LN5$]^=TJcKO9Z,I*N4\,mV:7JY&0&+8B-i$K<n-R at 5^g)S(FkVJ3EI=<NXq at ppH1
+%`BRIIZ\2o.Z(iW2Ats+<VqkYqDsnW.bR3/V#+1hb7a8;c<i(U%&D?Cc24+KOlDjYa\HZ=@?Rda2_34bsACs\JK9e&A_BecT9!o?h
+%-EQ,G'%CW0A!nGCofBF!C*d*?$nQ16F)"\)1^cC%%08-"neTO at k"1ftc1djL?Y:bh!C_&0\BirYA1,SP.XQ2qWLgs4"Z[OA^>kLr
+%.E<mE&X=LVr]]iQ#mN1^puJ[(;#4&?Kp#Q4-"lBYd-LspN"TK]7U2$'OaM">nD*MJ>7\g$9N'>,)KA7\I%C`12q_mg0B%>Dj at Bmn
+%dRLW&PL1ke73c8+O`c118j"lkoiBLZ>/t6?<KO%L8?KO6'H.&K86qu[#N&=G*!drg&R/Kal\jj[!>3f)$,Muc&or<r'$m't`['m2
+%!k0S at JMM:IM5D^ACrZ0)3WMF$P6.G6_ZXQ/6rd`+iNo@%+ugg/>Y4q at N(. at 3;Yhcjr\a;[=C+e111%@>Au4V7()%a'-T#*cW62$8
+%TFPV@>iB/RHpE=TR$tkj*1U]aGT^Tb8/AC]1`!%jcurLrX47fWS(k%HM^H!>b&,Urih"gTXG87S5l<t=IGm;"b^PW(LeIf'W_A47
+%7*_($hA?A(GAD>3nq+)OEgW68!U2KjYu$X`S';<:<_D7'`RYnhS_C1NTK-dmTF8j,BB0*cL,GtL9aEUU[A3R"8oi<+=\LYT6^=GC
+%MD8cMDL623Ykg2BT#iFlC;FUAYo2 at u4f;N+%M!#nj_"RjFp;nGl"6gX\cj9[CI&Y:!VqqZ>_7_RU3#C^S\\mT0W,eJ%gGHm4i_;_
+%S%QWPZXZiN4sm^V8?8NFdMc-8ndT\5(W8s7dPblC%>5L'cWIVGZDL'&Y7*F5(Rn`T,D8nE:I\2bVb)oh%PX=M4JDh<b9#P18Zua%
+%TTtSg7Uca_'1\DITbIt]UfRe#0=G0hfRPr\5:njMAq>:jqq_r9'J:Mf:cW71=.B=a>WG:KBq$/`\&'eQ7+DeF/-EbE<)ZIh1/NWn
+%Vl.g8&N9/j&r\@p(]f<J-4$$cOk!_<1Pu9nRO)<Di$JUb&WGPb_=Smj#'q(uePXKR:)+CiA!s/>,F5L?lE_'(E^:;@+#:sq)*1UR
+%)N+IY/hXL8ab&8P&>O!GELoq!dU6-S_S,)X&U$GaMnosfoUuHs]s'*7%Q(S](a=&%M at Z^^&oqOiPTH%jY'"WVZ`5J!-mYjUKi'*S
+%feH<lD@/?VJs@$\G%"7&Hb`5(lpM2!K.+gnX%V,3%8jbAm7=W-8dI-l\>3#Up(B3H^J\2kKEeA\TC\'[%@'LOKc%LTgpe&FA"AnB
+%19.GY#d.)bEA==9MGT2<?<4fZ.;2H(j0M"NT8 at b;,O!H6c-IYH8Cs,GH$Sr-W^0!k#-C>NXi`ns<PKqmU-&`c[+8\^i-&MZoOf0+
+%doV>r#*a#+K*[J$(];.]O!Q%[?pG!=E]*'nQ5D/3Y)1Hh;;UC?a;p6[3(9*cVW8!,nkH&gnQ86%A,4RR^'WU4DUaltV8A-ZaH^nC
+%(o!T at 7<]n'SLYPCL'?h$.s\r;W:u\f86Gs!A_sJRVCGDtU(rV(nNM:r8[T7n$)f:R/Rl=9'uH-!bOP'/"G*$kkB_*XVG%/@5fGM7
+%2O>5]JJNQ'-q__*jViG at iec);HS[5%8cbUlTqJC5J@`[XJLs;#GuF`KaqA:SL.\[b-q6Bu.pN,1=O=RTm5sB6<%U,'@J6_jK)kK?
+%Nf8+l_g^apc(m%+=ZR8V(3iQCc8I.DiUOE0-$ai)C0XuC2)NsuIZbI*e%<;H6-mmYbVF)C*o5bA:!2Th)rdea]=HA092u$35b>r^
+%e at FdULq+D#hodq(.4BGs$(sndK!P9^8HVLd5gIC'B6nT,b3$-q[5$!,KLJjueX"S7AeLF/#rODq\e38T"elm*<V+k$lgI.DJku_p
+%o%c;T[7#7j8gYAD!e(q8^n-gk/'(TGCUE+AGcR%IhCp7\0MaC&mSV^OK#f at .bukesXtHi96!bg0a+8(L<brsYO",+ukX[ij\X]!"
+%p+fKK=MR2gq*=mPYE]3*?UD at q_I0!iH:%CncHO%3A9A8]%\h-&5"1H#N#.s<_)#r&7IQnM>&k_>\tCDRO'u at i@:Y\@HSo\*3:q/D
+%Z=$%!f.I>5/aQ?bd_[u?0>Ns4!"+'L+U-o#XQ%PbCFgAF^d.V at SBgpE0^s/k9ZHARaG*Ypb>Mq0<_H(b)90'&Rbu;@V`e"`$BQ"M
+%RMC')?7oekiC<A7<%Y10HP!qP]1NEN2&+nG\Hr&-NeI=B/+X1UO<[NgLY at 8t=+uYL-DTmZ08?QaC"#P]b*_Y>!TXTdD_NMuC0="/
+%_k#Wf9A(ZZWEQHY%'(ckU)ZVH@\Lr#/M(&!U/K79fp%_7Zqos>Uk`2lI6skj+TJtRR_EtH[6;'.OWsDnXHrrE0&^jJ%ZcBD]UZf"
+%Ze:L-fpir2,$&K at nkt3_Qt=N=gmO!O-D at 90<JlI1pp+,(1"k_:OAJrEJp$AB?W*o$2bD,4c7FpN*0Z5O3,(_`Zlm#Q\'!4`5>Z7[
+%[m,>P)6#1ILJ;d*od[fbj2<?$5_[L=dQi]*0GiqEOGuLDRM-/6`JZ&69fT\J]"lI6l6^$fic/LQnLS*VPmrPO<c^MD6_WX+S4nn8
+%5i'jWMK=mt5l+4 at 2mtmCH$]\dJM<m4,-UqC8sg0%H>iu60?Klaq6Cb"U7?S"Q6^C-+``ZEgN41IN$)*Ck6Vb*Yn#\gp9V\c4gdZ[
+%hf84UC[/*BZaMT`ob'N`?ja>7.9qd6PEnqOEoS'!$trX%=?aYh:T4Ldkm;G4,L%`QH%Q$,AI,$XrfBoES#5Vm^`e'L/$oT_r&DYH
+%W9V1(7\4kd\Dq?c!=@4j6XNr7B'KJ%N/l at 4Mb4=O^UKR<fP?,M`0m%JkqS":cbjWD"-4d=h at OQqoT3K5BB6]6'?[$a'd8niJBO5*
+%JQVGR]$qI$PNHXc!(%i%G.ROP!\UG^-kDpcU^!2C(b8lW1X\r&P-ndJ>ZVq.`,Ih/F/<ii>1-)0k"M=pLkJu5SM:KsQe./E6"W$7
+%L+n7qb:D<n'Vc`deE\]P@&S_Z9Ln=_=1\Y;aT$fr#BSJF5L"#]KhlT+;PSCU[?oV*!ea][-(.(<$g?YtSK.i at 5`"f)h7Ma^;G5>=
+%/N**(HW^#9[5Ts!!O at r+%gV4.WdeD#l.W6!RoXG3h%)5AW?"Db[&e"6<h#Bb/)L8jq4af$P+%S#W`14a*0$5]+^2`SRAA6d&o3nD
+%17J/VoTIAd,:Wk%/=c-G.YWU]aUKA-PuJ?RW`8`nGDl_Pl42E!QR'Xu5-P$_BW,\^/-:U1gN0ckkQ at uZ9b1\RLPc,`Sh6ob3:Jtp
+%L%(?XdTtV..G>h`W9#1%Qa>&Y_b5^T7VBX at fj%d]^qh%N3bU^R<^J=(]7?u+[kR?rqUZH"2Hn+T,DO#"Td"[o)I!)\H9U;4#=Cng
+%a</*o*hXfE%%%lR_.[PE_T`]Ec/?0N;K'dlD^U9moajN5e4DFI3/n7qXqj>[hDc,[1JutCcLB=-peQM+r32][OhfSWEnD),TA9or
+%b]"T(9E at J;K$4ZWmS)Lnp5Z.(Zd0>Pdd`Q;k`95o=PAH4SmL4W]>9,t,/Ol5B/tRp"L'p7V*F<p7C5SN*Cuq at ZtHX[O9h)Cne/2c
+%>Y";1;%/p\28/Ksj2kc!joV^sQ1-S37Q)Ui#UU at +8=3dBYW8#DD2Z_j=4O:IL72K"_?qkgG55`lr02o)Q;%)ab7Y\6"VimS]%msR
+%<\HPfV878m,ptgV*51X6At:=m3kY`Pl4V3>Da`tn(i"?$]'1Z6bF.ub063W;,nl=1N?SS.IdUBPbfNrl=YR!P_`DB*6?Q4ae-MG=
+%mPkkfY2tqNXr?<60%^YP"L6Y@?1i.n;d\U[[D5q2f:W$Kli7N`?PH!:%6<e?)s!MU;gM$a&>Qd4bV>bQKrX>_9uPiX_D*TWhMI7&
+%%'C>-iDh^s:pjL6D'UP<D3@=R=@Mm:'sEqgLrqMQ6UkHd'QM2EK;Q.+Mj;0;F>Acm.$HJPP(HNm\C"4E)HN!@H'DQ$F_QVCa\c'O
+%d2Wq1T3&^bcAr#qRGpb5Q`<6)0:]_;SP,6rfjY.+0:!kJQ(!k(DK0T5AOW$iV]Uuf/b;Nji*)8jb;hXaj.M]gP->Kt$R)(W'NNtu
+%.Uk]88d#SA82Q_30B-/(F5h/l>U8:9M6 at .sH5<YrBiM;p.GWdE^-6W;LeK<"fr]pEUnm,[W3tjX1pLY1+==J3b8c'%l:VAq"73.g
+%,1Jraa)Yq5-tL+5Ce[,(o<Hf^.U:sYYAiE-]!DUU)sW_e>B`WpeJ(.2Fb_X[\`gD_0O*(9cU9#,0.^of]Xu2%:+pD'p3%Qboh&4a
+%1SdmcIFL5bB7uXN>II-%%XD0a,U%6a(pHn_f]WWUlY at O1>/MZ.fcX,0C78+)VOF`PItlQYmpD^Vr!4:qC5bZYB_#A(b3VB7iRoud
+%`\_8.d5H["0C<p3Nl3E at LN_6/Je$`KBu#9?UcbqmEHu8232H_S#N)"`[87oJV>'WAj#54Ape[ON0[&LW\`pK,mD.-'Q=O@%]VE*;
+%%-7=cli!cj"LZ$n6[r#1o$D-/'0hioKIWFl;?c^h9J+qpDqr4o8mY.u(r at j!U5AYf(8#2JJuX+<_<O?fbN%P\rs&L?<DWbL)p&pr
+%i>U:s!",?urRN at 5%Qd>PLfR0JL;kQ=EI%_e4[d[#g8n[_Q4drPA67cjX,t at f+&bL>F[2;D/R<O5k7G=fiY$YLM5HO+-!J,#&ulCG
+%"?tNQ'-'@-/hHNS]cp_ at +X"<6M>.6o- at R*_;Yceb5kIG[Vae/8WHR=AMYl?PBOR?@gO$N/4%_X,5q!L$bW&moa`R$^m6-ZI;^q/d
+%RC[J^f`A/ROU,j!cQl(UdEFWK:uH<SN)iRn7s0N!M6PieJ^&50@!nE,Bab2pOBFH?RHBg)753'j6,ehdMSLX",sOCHB&T$Un4.-r
+%VGs%;%c at D!m!s_SLeB_pQ4bJ9?<0?4 at e?A)7QO)jkcCHp7"B!e$l(Jh9>ZO)'>6mZ>mZGl^S*[_lBjj-GuVD\BYD=H3)?O^G(CGZ
+%pV%DUn_eO)AqI1AKinnD,PtYZ,RW_3*3te/3)CE3Y>YG'__5u'YQbLPL19DWQ<T'D!@.kDC._^37,Gt!'MH;CUgmjUN-pBg&LE)f
+%I0rSJ5^=%Q/pAU<AJJ/5i_1M6e-^*<JJ2Jm/d#&F;[MWm&6?i1Aa`PoF%TK,^=Bt'I[VH_H8Whj76S.N587i-m)P0o&A$IU8F2pM
+%ojdfY6?.7`q#<R*n,'G,G*Rh;Scg:Y at j:9:V,<LFU]DG-*;8hCq*CE/Y)2*K,9**Q at u\L3#CBk($m![4p",F#"^5Ra,,NpgTGEVI
+%V(#6?XWj#pJ.G6C[JcJA62f/Z8>X`]^"6H>[J#'@kFJ#^c9!gAOs^UFfA,hDp:]ql?@2(IY'"$UgO[iX/L:)dbtrmX;K%bS*K\8J
+%jJjjg7Vac at h4VfJq[oC?a'ls5n!QQ]XZ/PTk)!U2Q-Qrp8G=dZ6XhJG]PD;`*Ad<Vh>0m^3 at huc'kUT>Le*>g"13f&@P:asGK!t9
+%:cTdT#n3]/'lb$E.dHel?O_.Ql\Feg)KcL"(BAM[c[MgZf)EbHHg-\q$U(PZ4LZeUG at Ujo^k_/X<qNb*YsR;O8aD[#[68`%"6n\l
+%=KNQX,He5*n4oZk*'>S;4C+JS>l)&DEE/hTp$[[(Kjp<d(obF4WF]0*e/CU+BULm8Z;aL:UBpZFS+k)Xe7mRF9FG%N<1B^>$qW#I
+%"cC;hp6;UqQ?*/,&8/nAeN-7KLgD(3YEHH*1#\:TJc:Pc't/6`pEJ$&c+0s':@7VAjL0O.FfXMYePT7Ks3YBkiR^4%M64p"`M#,k
+%C+>T6C-5CB<U0KI"H9R!/'ZV2XnZVI/D2'fah<?J=]JaEeWJU%on4L!&S<?YJa$lPG[K.oMn<]9H`GdV\%Z[?f!Xq2L".;!)t<>A
+%H#`MXeO?K[`KOOrI?Kc/"9Bc;%Z at mur'JDaG/[14+7[LtBu at LcIq\&W]bgNlZB*PR$D'XDP2kfb\mdErfRFJ1+Wb\0#qS\%"T at TT
+%3tW;1'X4IR'=a--Sm+iDNcX1`B(onB=&R0l0#L%,"FeHoY7,So_$E2d7rU$LWu/I1RL2PGL&im]l<>J072Z+B[`<059L6HL]dlB(
+%fDlpm7rW&+)fgBHcJ4 at FUEh(rZZN1b1U5lo)pJ(jL&E/ka;,_(chf'<?2I$OVGM])*sQ>&g=p\na69dSc*nHX_II]j7h?mg#COPV
+%`&K8+i%]NWWf:i2./Wp;OH9oEY#>_uLo/(E:.+&4CJ7_Ygp+Z7gJCo]32a&-;[6+%E_tP)f*rWFkscEhqGr.%L"s6Ig)Vj)R*OLu
+%`O!960nZL.ZBRup:YP6]8%24.?n`%`.YjG0U/ORo&bc3M:d[d"F8DqqKoM#e\2u3A<5%g%qSCpRHrj>-<ds4\L0@`5]QXq0pOKb9
+%HNd/kG2ZG?*`S/T6;LNb/TefS[;W%LV4%/RFD(G/#)s/hTp7"WgfN\-YA;OBO\%U37\d4&UR^k&!.YU5*/(d'8]=B3X[.c,\XH6K
+%_OHh`qfD3#3oK;q3+sBk#Y%c1[r$tF\gtlZ$o[_n5 at 0L-GDU<`dmN^o/*hW2?&07Q.;61fOe7)]GP/!@VD[Z=j*/-!jHAKNmPFa[
+%qFYe`g8`B=k-2r'dCCIinkq:_fakU;`?Z2Q9"dUW#q<fhiHqTZM]4bYm_0Wt_m2\5`WRnX%KM**PctfZ,5\e#@cRf&h3Il.>qEl4
+%*Kfd(`CH_"5%09-#fNtlO$EBWHePS4Id#?=5:RJnoj=>=lD$'rqsV8k\PIVKrb#SenJFS%:I"mT(LEj#KAZ_,F0Bs^7X@]+cSJpS
+%i]XJ.n_+Z6rL3YfO. at Mc_lY"?rnC3h[P-Gd[smPlV`ti4II<KO1EVs5pN]DV8?[G2dI2$EHr6>)&tned<Q\@,5?`+_'g\pkc8'Ce
+%)DBa at .4h0\"]6R&]gk.,5Je1P0h9\FCL#&3D!fV at .,_,P(BtXH)8[@_N`;*/^VBC at O:PD[_dN`7]M[R`3/Pd&1MF:N"3,Gs:M#p\
+%aPQW-!o6JR[cb]R)scXhlq!?moqOXA"Q:&Z`s#`e&q#`55$`/]0`lBtapi%MV4^hYeQbK<pi"ASUr>A:/MbqM;gGp#Sus*O,F?Ll
+%R)8aF#RXl-`0Dg\RRd"EkRlLR_2Wl>fk;5h7cr]UN=;EDhTr-7EB%,YdM;pu+]=4TQ6("c1-qN5OAitlhL95rYe?#&=5-M+A"nE5
+%=_SW9*n]b?P2`o\m+&!;Da`k>V:D)L*tiVc]:Omt"oc+>54RJZa"s"ts+JH'/9gZ`^c/3qQT=.U#ZZXd959tj^((pBf:POT+%mcO
+%GE3\D`%/&h9J$>0,[V!bQj-B6]!Kc4C-/HqrNU7cj*Q%/HaNO-\?$Jj[BfU88`It,8iRDS*%$Y^'@BP!OupQQ3tsSjRIAGnmkG*B
+%\kNH(&LMn at 8f;_hjcC.#Ni?tLI0GgsWHKVXYtWc3*K,27pm*U!Rg-`-.]UK(b2=O-ao%5uA at Ls==UJNc/_f$AmKe`8We&[+URT at 9
+%3]Tq>d\/I[jmbQs=&bs6b/]gBHRNGJWns(DklumK<lh8L\jfe4'4G%>?cSJY9ti1 at 7X^Ith4XLC'h*9Hl4.3'cIq`q.Ar$SO_[?i
+%UOku0g`/l$l`fU:RA]*Ks2#+E&q\L^^dq8VQB(@)#S.*!AJbY49=$!eV16cFZ<C%:Gc$-E[g`J3RAPktPns2\JCNs='6(uFj5\_A
+%PC(4O*8`kR!8>P;>;LV77+Q6ZA+s#ZmkfJs:CZI7iCY*40Ysa95qH]!Ir#s\LT>X[:[$0*pX\e[Rot9TZOK4G:WR8s;N,d_pf=0(
+%IQh^dD!l8!c>JD$.?_TH$Pk!X,j(@dq6$("6Gac_U,U:jU)f'KP?nD,fsP6+orl<D;c;O/loj)"Le'l_d+\mFD.M_h:q)^Ia-)ha
+%eoR$%c3.4Q*RYmaW%`ir8g*7n;5&3I&s=7Vh?R[/GRi,?aa5C.)$!`.U1/_Zs'"#ENFNFQP&hV at 5dB/*Vk&!pr4korV)CJ=XI3(g
+%k2[9`bXpmQBg"J!F!0q03irS06+_V(+>rR]ja,!I;k`C0%/Ded+:#n[g>2&4Y%k.sI)6Pk_=G`l0Ll8EK,<]-*F&&&Vqdgn,:(RY
+%2^^VF04jL3#)kODlf'2\B.3G60:Kul-tca1ijUj8gSc$rY<!5nP2Z*u$@D7O1)Z4V_gsna3'bBA.n7Zbj$?\%!A`Eb<"!gEWY_g!
+%fhbN_SeRkcbCX&7kA?K+X]s<dhgj,uGAj4a>ioibA80`#e#6P#GNkdY4(VsEo%p-I=]rujQ]n_2<q+Y1h at N)X;QpuG,Wr#EfUQhu
+%.K`p3U\;cucTs^5 at V^#i<Gf at p(=pD2$C/`E[8pc?/'-"Ui]ALn3h"KAH[I3*gmTX.qPe-(.=6K3[(B*mAi]<<V(s].WO<%'?F8X$
+%j`V`.`o&GZ;8'&iTV'2/002PDO3&(M_f1\4AuX85N!\;j7Or/lZ2iXj0B`CoX%fU!2MkfhTA-<3VJ`jYL`j#2UmMk>Z\k\ER^iXS
+%=LA>G1![apCM,K;Z)*O+$#dq8[SVr+iuZHD44hI>%,;.b\:q at fi8']q>FaqLnCc$SVO+0eE2.nF5\@-jGY)LH#!C4>CKa7MNCKQ7
+%4HW]T1qS3;%*_,UF2T[h1^T!heTH5WB<a]0X'O?#]4s`*;E7j)iET'G'p4YS!Eisp,`Mot?0O at 2SV^3:oc?r=*"#_DH36:&ed at YE
+%RMKEGQ"u!Kn>XFYCpC]/\uILQ8CUc-0KU5p,3i2aC1`8P4WX7GRl,oWAHf":Y"n;S8RRaJh6`e at N5n@nW+35[]'5)\DQ4e`Y\\p4
+%%Ck&5XTZFJ0/#;Pc"I-F^8K@#S2T,6]YEO7n&'&r/P2k6!l"A, at q!KTY9`D@`U_XTBKrrJ@;i_9l%$38NNPBCm"d$t"Z5T3_lcWO
+%bNQ2'\+I%82F[B)+r1\%'Hf:pgkC1oQrleC6gQ at A.[l=!&0ZmR<_ZMRSG#GJa;ODqH8I2%BU\c/%L)p:1j>DIOo#@/:3Hi09>Y#p
+%qde3Q at kmp-df<FD*eQS-1oF,N4T.Fs'i8T#&9V&G$?Z&@;L*&@e$c*`o*S+CY]\_>H$(Ce1GO`R-O5VLXi^R+(TK)i9,Dcf^kq<\
+%@:I,BITG4)9R<f,Z<Ok,[S*YMCYTg>%0RXl)fV>p&lpcODVAW3Eam5.8A_@[U*h2%0Vc'FW0(aR8ZlU9LL`XUN)9K9P&\CrUKot]
+%9Q\`KLOqLHMHZP90W,d[lE^*5;C<>U>FaUnKn/=UA&0)l"hiG7Y,UDCT$JA)AZ$iGn4Y.3+0M4\VqFVD at LBB@+qcomPalmX5bi>*
+%GCfUm&J>B9!i,q:Qn#$=l7-aDd:n[GPg(p<0fp\]IY)i@\I/q^2-&]&*\BOO<8l6rYf0opl_ghM#8/Rl+>Z"qQS2:UDidBeSo_eV
+%^%K4>554V\T7?R6O3VC!5PW0t?[hP at B@g.].J%fMWLo=QqdD/HF=)n\bB)RA)^>@9lf_8uX;.=W3`3SG-O)6h7T_<HhW2&fUU+/0
+%VeiTbg\-D&''B&L7-iQN7:"T$Y?G85DIUmW)Is[ni8cCDiFt`1;N[kRN4-4N"tTdf6\gGh/]$u?:OcErk_#LTl)!S25QA8uT7>t5
+%cb8iG9<[2E+1cT!J=ssUiR[B@!gFs(Qr_qk_QO`]n=Qp+Sjh6"YTIe^UgqTMVa(4"H`A'/V2D94.=(H(4\cVFX)r0?9=;J>eG"2Z
+%jPY-M)kT,3;%Deh\Xf3FIa%-WHDFqP_+0#<N.g0SX%33KV]Y\hNu&!@"I at r.!9S!rOPbB\BmkosqD\;`5P`(s5O at G,SrZ,9gl"Dh
+%goIWknF+Pmhtl9eV`stUGUIt$-XV>a^AU.=kM`;?V54^+K$i]WI%RsgbEr8*cfFc5WGB5_CHp<-po5u0^pU?)g5kOQcgTSko\*+;
+%D0(LTAle`[91bL;9d at c7'l/;UT"jS^EV871IMjmk3$qmM:H)PNh"Zo1Q,N%Mf*7H.e\WMGNUU2W0l'?O)bY=V.hf<'b^5;m<$FaX
+%$QSF94suCT6lp:43AhAKT]i"`DZ3 at 9TVTou!LjY*4GjBf!PqgfXOM5?no(r5.]EbLa4m[qVpSs.Wa5.F8ME]pL5N?u$BXiLDb!c5
+%<dB'_3$c3jWuHB7hgP>%J%$Nig[T_OA6:]qs+^DtE;'SQr,/WPpM#B%*0GF6I`?%[=%faEkZ9S*J]k_KZlp`BZKT>+-PHb:Q"$Xr
+%8VM\W\%\^aEhr_&6>AK*P4hZs:BCsq=Qg?56'B$n/n-`0/oW6ZnMkm#%.A]OP]km$'_f'+jGdb%e]L!>.:aUj8GhW]O:c#A>e`n(
+%7$d%+3,'QMJ9'sTDeum<Q)\ib]oAU-cKK"#Tb=5]H/)F1BJ,fi6MejV(r:B]5rLQi(IU^3"//P(bO>Mg0IdJWM`Xmdj[X<G\"gSA
+%LY%?FofKUN.*:Bl:lDX:7j>o=>:l\lD2:!\SZ3f,O1dIW6"_9dm,d-5,Uj6qmNho'a\rbKoOu#9oRm.Cp<hC8o:12ghf+8[l3aG/
+%U=cn,$(h%<CFb1*jlaJIVR>2UQirK,31;GQLc`/(EkF2d:)'I6B0ntV_\p";$.TQM(i1,kreP[C:$HI[h$@>hN*<oRcT8-Q.\6-3
+%K[7?T@^&H?/<b#MgKp=2>D@@?(S\:7,R2;b]ose&_;9mWdXDCT;$$q%$mh0&Y]+Y at E$u`66^jnEl.ge-IVB\/O\7r3F%jl=m9H-E
+%Q at C4ICQK`XjPe_A'.fZ_YRU(0?*Rq(U,VZF80pb0DcA!,qJmJ1e/&l$!RhjbY!E2:;Z<lr\L_C7,@'>[-<6(Brh"S%1q-Vo0r1b?
+%MfJeX>T!M4R_Pqe<74l.(DB\I0DA#Pq=K=<k)>=DSrd=WHLc%d2t4^P-ND),Y?lWCn=#toop(knqY<eVAC-h[>hd:.VRZ^VT6`Y&
+%V0'[]K<3SsP"!(C.4ZN(ZtKB*egI&6pcH%\_WS]'l=XINn["SV+F!@\MlC'&hS'RGe6XjsO%?9M^@V57k2peYBsk's$'``D*\c$i
+%kQp at pCOOFpI:CAH/Y-<[6$9LIrqhf+j^tuoT0)MrF;tGNN]FC[pbml:R9346CU\00>39r4CWLXrgWuLnb-fjtQtrOb%1hRukK@=@
+%p*$d63c7.mj8%#>fD:k=YFsXu`lYfnd5I>T&VK%E:OaBSLGn^+_1(k><EWh5kJ)I]g%JQ#l^IhlES]gOlR-IgmBo.?>3Ch47,;R1
+%+1WGQ+-L[SoY0nKDPi5A1_3`09:EgsFV$I'Cj8nr*U%.KhD@=>O$l9L$pC?UmeCQF`l1_tNW%_E]m,V&fQi>+52\4I)hrRK%l<+<
+%RJ4>un?pquk^49:?GF)GjDignmXsELn7=g=CPD8d6"g^q.,Q(-B;>X>D)PaE1^h4fbKcEh22!4_X_hqPYnQ0M=8gWrn(]H>pk.qH
+%S".?Y'?t?$<1=]8>M(TO'JFBM%C%M1qQYs4]R.2NK*uVpBb&15^7p&8+Gd8YZQUH1D*!mIUARND'9*^N(?M3$Ku\1p[O.sM4Du'r
+%Z2b3ZF:?bXN'k/9"<(mP'2;R=%0MHMP_b$`bRo+O*@o_Z;-^3 at 0)@+J9aB05;qUS*OP(;'b=4,bc),^jab+0j&:/Q)$U+pBDN;!K
+%/d2!j7?A?lOlh>qf3:hs[[c\0e6D>.A0X@/CCK=)l/VEfP]\=[D/'Pb:dMp?/,.?UlaA,'nIl)X8!)!8UjB>4D)sLi/UMPRT(RW@
+%NMO%l4\[Sso'hL6J+(m)0+)?(C0U"X1<b;Ua-Y,5Ue6MnfX%Wd#jIEH/]ki?W+`D?:lG!7[1K8a[?'B at QURU8/[j3Y>)_1jD--/k
+%[0:unG%QC(lO52rGkhC)r\XC=?3H,SiCsom%@#*2R@(kUp,KU-03j-9AaRbH``]q at MV5NooVLHKNGM,<#Gp-!-ZJg&-?d^qf<64p
+%T2%j2,u/-R4>]uooH6!@H[PBe>:sb[4eDF*WiZ*q2jDfl6rGDrg"p>[8sqN[DNo<aHZa1]%T6G$JDb5'^Z[*IDWo"I*K#T'N!+-g
+%]\`lhLanXSGLu2EdJF;,%hrC)lQ)pVfm>q at 8h_J]'H^iXGVj3e^:4)9SSSF4ZK!+4?,uUpKrDEI7Lh&RVNFP<rs]2Li037/[XkM@
+%eP:Qj*)NYFS"C5JYq3PaHftE<>6*X#YR^GFWK\g+j_ImtS=OZkD9kLP/DAbZ'42W5-CXG02F]BCSFoM0]DOV at r/^fPBcM&pR]=02
+%rPcG/&449iDn2Pt:!7ukNRHE4fH%!*dc-o,[!$No`Qss5a<m.385+4j/K^)l^&[cj7NY"E-)6u:0"_J+>[9+"X_U-U*TM:3/t[TN
+%RkC=\f&H0HT,f<)!@1[rpo]VE?ooFQ4X`6i,5>2hmIr:69j"-cKcQ$P!s9$')@gS9VX\E7Xg=(pX!^)4):uLP7)pKQ_Ja8rYfB!?
+%\WpXW33W:KQ<=[B4A00B[DhNMi4mr5PQNgn`Ps5 at UUBU-NSC!,5]4'S)[)'65tX;KMAA+(dR$]f.r+_&1(Wg<gG0TBP-03_Du<)<
+%eP&J/55WI^V`\,"FO?D(nQ8k60Q4B54]G&9g)]M!qpk$!<]Aj8DSB&_hEH)B?0_+VW#P2%YHpILG^$aphXl+UduF*uS*im-hihrl
+%,J at UadFca\-Z1(U9$d2Rh4>I?&#pZY#eYCP^*!DLej?@>"'O^+'I. at RSoc2YYNR@BSXHXCs4.p%!rMUiUie"CG-J^sU%n-iPfCp.
+%]V6no=`Gj*4"Do$+c!?YZ&Rb]Jo<!Z=sLYQ1`9&$:.*4-Zk*OhU3eJr;Q/DuJ+/>o+QX5G>/m[9;s`k#=:Bi%@'+AHl4ZlG:2>pb
+%!`s:bg,kU1-:(uf)=Onq9P*E'R*de3L$_q8ZbtS?F;*&k-,p8t]d at DPl;%@?<5mADo&>Pc7WkJ]52sBdUcRQXqV7ltfqm2"07Ha?
+%+C,e(,1OihAF%,LP#(NHLs%:d?sEKpj#ULZZY`NZm>C$9PC%>-9e2,rn at t>t1lB9Zl+FVZ;1_/?$GhD5GDAU$n&@,S>m`BIKsR-F
+%:C8'i7)t7sPDe.[^,qA'DY+O^T\#/g%=8;*[%"O!l*DR<KZXJq1JD;M[Ft7^NE].+LCg_Q=!EIminD[e-db)6Vh]\%ArKK$FQQHg
+%SnW_R7iJ_8W&XEI2ig?J!a2;9h7,s9[R_+c1Ri6WQr7 at _&.HorAI!qP>^7U"=+gPeb"+>@etUk"\WJG)i]f^dLK9]Z>ggLKKec%>
+%<M.^B\LR"IGX0 at GML,GNgR)3>CA_&n?G)u-@[=fAU?//O^*tpD)16a0dQhHn_ at d&MA&?in&o9`sc=k?,e-H`NRM*>1YJVcO;*SV$
+%527/-iMAR;[M+VFA&[Cd>`Bq[TM(8mld%'3Su?80 at VN2Wfe1G5"J at GkIp`'!SUHSSR;Ojp;27)fTKH6MoJ(:m_*+g:5K^bb\*J_$
+%!L0Ln0JP7uBZ_T[IFQH<`!g9S"BX4S>;dC"G=p]d?'U[u*s&`KWdgJ9EXaLEGrnnIE[%6]$1\YqQG>^5d#fUa"e'q[V`:1Jlm-W>
+%$9`6DWDo<:$XG$1(maZH0iLt?faE3.8cpT,&(e6b3dp1Nltj\h;O5c7)BV!7`_5AI&H!s9l:.SEU:bJ)=UTFGa&b*2GQ/<]4f`bQ
+%?L(RnG=pkMk`g8D^<uaFMpiC%$r9uG\h9j+NX?Vql.p;NL;E!&K_Htak_EnrDs^XNG/sKtK*FD_KV)ft!A72^6\B/9KG!^"FKCE>
+%dIp7`:nSpn<LS^5$'FcEJ62\?UHHtH_E-:Kk4-D#EDNE-SrqiV8/#&p?Noa<o+>_(VVH<R$Y3Z;'-1Cs2An(ASs>2Q1Y&qkaN%*H
+%=G'kqqZN.'-3#"@=IdN7;6(Fo;h0*DjjhTT@(R$!"V:Ae`V7Z"InWMH[=O7C`F+p0k*0ftOdh0-K/0Eh]\Y:P3!#/Aq.^HfM;th?
+%PZD5XE[XCKXS1T8Zrn6s&sfQ;Lu:i>q>C"(E7,D;N(h?]MI+*,U9?s*4cpK$X1L3N\5[Xb#5KAb4A?AgG3RN%moI&8a6$51DmS3L
+%N!S!Vof"J;5Rg at H7kC9s>\:%=P((9U@<r&HRVm+[Gq>RurPPLP'j9'7_;;DfH8?'#fF at .@>tuir-'[i2fH!Ro_gCu-S]^V#ag>I6
+%PQ[_qS._X$-&3lBi(b`26A at T3Gei?P5\.;pKn7e,=O1%6\P#f\Yd$n at p<b]c@@IAAKmdNZPS%T5'9Pn]Y'6po&.$&A7M;t-.1^&&
+%8H#406=pA,Ue6S-4V!qTA_iYU>6,8<g'bD1MTO?bdLubD'.icbMbCudb^beXraj3=B^S8Qe3kF:(9[=oc:^o8&jpV(dA1L#0,``\
+%G`'4[7nn/'NH&#<dg:gf3VCrkplqQt`g)AG/<#G*(+Ti0aVW8/,c/&JBPtq%KS#Lf\HdO at mZo]=A^gpD at 7mnCCg"J%@V=)B'o;3s
+%.\I[k(ibE0!*1mMb8-2[<pE'p!$^@M7%2@)d88pI02-M"CTE`fCMb`)8l;i*\k\&tPi-u[o4'__2b\6KC`^P4X2W:8q!K`=d5MJ.
+%^em0[;e8,m=A2].b`dCBH;gRhP).i3`$`,nXXc[jQ"J\r--df5+g2V^[Hp0>$:!s!mRe3%F*$.]$fuN\S at j^>e>6F=P*Dl6/kLBK
+%QJ.'klJ!LR0D0b)WocWkJL%nGV"1TA%]9p'=U<NE=4jnW,`#0O]hOM`>lXJ!A9L+$APea=(4F%L/h?[6,G.I^at5WDTp\6+)QO03
+%c$C,C=eY at PioJ%r%HIHH>\fKP)!pWkc>aq7/9[BDeD/*ALQ4;f.+23%N2^W70VpXL9B8.u2<-s^LH6pNaqq/_`E0bZN]<[IO.Ku%
+%^Sl%1Goo,CW)7594IJ7s]G\0cOGJ4+Uo@<[a8D+b!6]<*eU/Y2\L"98,'DPo;K8Fd$Fn>;$!6jn/EScj3#=']3.]>J*`61d0\QiC
+%S;KjhREHsG'O.+SYJWsH9kL$W+pubnRYAZ;H8+A5epY[:+Y+p]7GqDe]om-aVb*m4dPVBbRI/"Bf2MmmjbR5igo*=^3(T1s[Y9^#
+%!fdkl!)4>"dX<^,FZn<\rTY6PrDMXs6W"M/U`-l;q2O2`JS[u2b/1J'Bt8gb&S>g]XgKa40X%`+P?JK;LoD9[EWV;OkuQ*cdWN.,
+%]l%_e0Qp=^ia)qsaiVZW]?@:Q,m;YqFX:1MkXT:mi*lmN=p"mAcV at Dk"I3`F6)%5j?[#'rf`R^Mg6 at 4bFP87&h*rW\Zq,QN\-Qoo
+%A/;P<f#WsZ=_pZa7T\m`"']d4.o=B4J5h\h=/%C!9hQq#Oup5ll)$;9gBQ"kN&#j)@XCO-bJ)>'4i7;>fLa at OOpOS@3=.*IiQJUG
+%T&uHR]=R7mXiAr$B#`u0THj5N^%%8I'B4A7gE2F/M=2Lb2fi?ReH45HRA1.mNC3 at K]o,aR(mJhS]]4Q*TIP!u_SEs*Y2)>P?:c)H
+%Q;8qCeb2ZnEWdVBVS?3:A at EMp)'*WQdI[aTRMg*GlZ^-MXn:l.hP;uu.oYjYZ!($P:N(sZ,<`UX.i_?iVSqSX10`A`3o:goDp=GS
+%1m)W43fU)8E#P7uT]j#NR&!*4h#O#5<r1Xl\E=&H at Pr2UP6slMEFWSHe3\sJXsE`qg/t]EiQS?nc6F+&b;sbooLJJ@/:SqNEpf!3
+%Tn>fh2jGFr6^;16aG8cl1S$@ab,\WY<,"%%3:6%i-N$n^a+pSCU'Lf:b#Ag at PDVp7ao(TnLTehf^]P(RlN at Cl5:JA>+bKf6L..%N
+%SAG`F=0 at iC/<#,GOY_kA.+E"S@^-1hSK%=YZ2 at 2E@C:<?1ne(bK5F3*]25taFTpN_bh'_2AhlEVJR:;b2<^EQZ.H9&H:2K^I'A9m
+%Su"cK6Sa+%23qN:L-WpqbkgI`b/@_IoL15k<J[1cbF<T8:*XtiKh-o_ATH'%JYiHa,SKX%_Ch at S)6 at j!!iT"<%hiS7WaX%iWWYB[
+%Xl:#a/uTeRemd^>]!!6uW^*!_mqk/aWM$bdl"2.L\5D0aeRSb(=)pVt-o/D-l<pc0.kBM9Z/8)5g>LZnU](fgU?Hk*<=`p0FJeJc
+%*9f#8+?eiuP1>_%bV[la\4+2'knB@>;oD2*Gm6(5lFkWH?$iE:`8Q7S:aLZK/p88#Jb4O3]kV%+.b`#?="0+_E%\]HZ!?U]RM&Yg
+%>KV!3Ug'i3E+cbI;O1ZF7*[30i)V.-j,0j3V]il\-i(g&<NLdQR<E>R2IMc7R]7\>qc^*eN89c17Q8m/oh:TBPd^A4X_cus:eCj:
+%q:1@@?&gA,_d<,E$DT(9K124AqHlS_1RJ`2]4WpNBXQ<qaUTENK+P==]6'fB)A(I"Xl>#NU:YUB=2k]?3_-k_6qSrMk'kF645q"G
+%N9%Iqp.TNNc6a)A9O!Z_;=]\a.?Zq^5Z%KNaV=QT)N:/!S5shH*Fmn<9"CEqE_dq5ZO41;+/ujudi4P+F]G.AibXSsE at TPg'R=(C
+%qKB%t at P@BMm_]Ikhi)H?I`Zth)Po at Y,8`a;1Z/g.kc=euU8dtI9spm<U5Ks;@#u`oHa!e&>4CUMUm[0N?9X[o9!6I^C-g+0RCd8!
+%8F/u&A!KYDeLaEhV;c6In at +Nk$=HXNRC;B8fe1>"Gu0c.NMMbjN?q30OZi4T;l$[8U;Y*Y.i9G(@Tt9LV&XDK+E?OAY4kJap]d'1
+%@FK6gYmaIWBk`8AY%W\+F7J+5A$BiDD7YiB=<,E)mY]iq:\5&T.7R;'`>FLq;2ik?*r:\@!&-D]rG*bLTS%d)HVIM!/Rla>,%KhU
+%!d)a]\DB9;(MQtdNPf'`U\!*$J`phC#d%/f)HLKErXaIMUgR&peWS?5CbUDW0UDnJLeP<(KF[(JQW)V.OWX5<;)_P/A$DhTo1=gG
+%;"mfm&Y?7/\s0qVE.u;a="$a_YMa%Qhd/d08kFUnO/0m2nVEk%<JQgsO;)O9LEm*9SU]>taM>F/c1:e56&OLbl>mO^?kUgLEG#hJ
+%(`S<C8qmpGi[M"E-iJ_8X4H1gfJZeh9=R>Eq$q.Z$'ei40!-+^5/I_>0RP?4\g_4!D3u#`&d>UtbdUJd\ju$F:NRBpe^RM#nX6E&
+%_^?ba[K66uR8O[*]-+)E1)p]&2J`\-"Lkp.hFa6Y#/Hq\o\2<1SI\gX9ZG[5`g+[0PhhQ)88DJ_[jZ''=N=(,i]\gCL"gOna;`>N
+%M6\sdP*#T at Pd_?#jZY,==b48nUc9#tF+k/R8dR%W*F&fEB?`VgZ=DU#1&'<269eq\D:9ImYFUhf47n&Vl\>QlhF/AWcp@@efk;1j
+%^_21?7.0HM-M+;VLZu7mI9?(E5/?CO8Sg4"gK]]sTt)nq;(9-:)P at Y:e0lOtSF0N:@/L9<8p#l6?#^`Z,7DZ184?JlaC?o-3cdL0
+%MMGYW]6*$Ee&)91Eao<S_HZNY4iNt2S]W>T]53lPF,GSghXhmf-d:p8Y`2WHWeGQ:h,4<mW!NbE^OHnKeUq^r1`l*7M=JU at 1<e/*
+%_N9-mOV%XNhk!S8^aIhoZ?[0RJQkI2/JHte.[``4Fc6:aOjJY^2aDmNkp_Y$Z:+l[n7^n8[PF/6;]19X-JKL3_6nG,GV-:h8,#oI
+%ih$&mCO>GDj!1sE'Z(S\!'3Qk!, at sZZ,7&6mjlQ-B[gjqbbpkDcS;9EBNn0O_];0e;'q-qHK&jC2IW2&P\WE[<I&q9Ua#5 at GpMU0
+%CIKfJ:#nL#$aBc_TlM$plA]&>U^\l=deLJdh00cIf=n%3K.;j^(^iB5JbJiQkKuIT]oLV"@RmZiSl5J_^]A;RR[L0)'A;-N at +00?
+%@=@1"OIZrb?Ei>nh%+41K:9T'.n;X7fHu[nC>@<H-T4p!o'k"kJ#OZ5BZ"g[A3qA-$K4/t:D6<e/%(]Eo<RR+31$0.S]>]dQ5?3B
+%@g00\r"5^(YVI(0K!afk((a_d42`2F([K!i"_s)5Fut at pTQ9d!\MeKj7i->!E6[-O,!k;;=Qt$rOS+N0Hgs!/]u5qQ`%iYpTgt=<
+%>kNKO=31-oTc(A2jqdJYACls#<9End*q99\hn at H?4[r5*cs>;pZ,\>Ce at ea!!FGtTneC4cQmq2A=Ak,-dMR.p'Cnq/c]tDA-^Cre
+%O+N9HD^X5f]T^j46E*k5-RRE"_;\JH[I at 9goOg,E??],gf[NKJ`D+dA3o4S!k$"p39m`nPaD$[;8S[`.krL,IFk;:qV0U+86,@=h
+%alh+.1R`dP$p2^ofW at gqB:-U<L39"W?>',5kWFdCW8`7t<H&C39;^R+e!EP[,Z3nZ(.]@M[nS#lnbOVW$&M.T(7(6JQ`:ML#-G/f
+%`/tHhB):^?k+LK41e)jK>,P^0fK&3kn at ZfVHblY+]\1YhVP!J2(3TNm53HXKQhJ($?q_8l/'Ml`-$[ch3Gjsh&3Gp"?'1dD!fq8S
+%S_)Y>8DEsb7'b>rDLk\Nm`7IB"K4B?P-bqb/d_KJfgD:I]gcVe*(@!-#@52-[f!FOd at 5DeaeKeDQ1_`*N?ug9k[tNERUH7368S(H
+%adp5r$b^K]jsdA3-US;<!d!M;.L!;Yl\l*'TN$EobN=Y?Y$0%(1-e1OBmTG?Zf"!o\3g6q5JUN/o_8X4hWZ.E3Q]+F9S9:F/Hqid
+%FMU"l$ZK(+IYV]X9h!>Z2["[eoLmmg=A\CW$]]8d8$;SR@<4d;3*U8KGN at pFiE:^@2+tdhbLP<j&WGFEW^\S%!BD$LF.+`Th;uYX
+%a<>7i#'e,,9LaO>UIe,$a_\A<B]N6F>GDnS0RarDfsA2JHee>l&hg!OP3BgkE5RUMC364&Z,;kT;mctbd*8\MaE/RCbup:XOhYP8
+%Y9G at G!.gX>AB%:&G5*315rXR7l4j'q0*]Ho*4I`;a\T,W80:XJV?e4G2*>:K8gjK'!uI$V_PQsCkf#+0Z]Dn*6L#?K/$6#rc(ZGL
+%QQ,M!WrRsM!_#cKWN2s(deJ[d>fhCpU#)6L#>4U[&b]*=U<-pg<>\AE9\[*6,)B5/G&8=p'V+QN?&50hoBfuB=f.4i[]8E5*J(n1
+%C:>GW^]saRBcdWKO8t);)Rd5r7YDmPQg5EJA;Zp-M7!\6L'q)C63/q??Y]&K>MWb)$j+#8!#!fJJnZ9D>=p3,EchjL;a42jn5J3q
+%N$7cW>h'l0qUJi'$VpN:'^<=#.d+ojogqUK0Bn_$lr/h at D-Cg[.cbHS\n+YH-\%?_H:gYlRMi=e6nrCo5$-_969D_j1Jlo]pDqm!
+%1"sS9Chn#'[h^Ehk=;C=jMo]@P@^6iaAo7n;c0W>`J*5a5[16r?2%BZ*q;E9EPn*:2l1$];H!(D/_cDIc(8!33%RL+qZpBO2Wln:
+%=Yr4$0U-E&-JPM,[C4Xkq(`#GTHuT6rU$,Tc=2WZEF.,P4mnf";_cRGKj!'="[/rY8<"G]ZtU^qr]9Xi1`aZ?lk^<`UeHL0,#8Oh
+%Os'YW2>'8BUcp7a1*.t..,c^rk":q9=a?OU-fc-0j]Ra,&Jtrg6$A>I6B'FX.kV#A)R3#d3S#Eea#9h7MYe`kRN:OhODUmmm;Zm$
+%%a`@q^A4mJE64QU=tO>u_]#gBWYW*u:XfqQo"jFSlm*n`(\SG&A\)^WPUUgl^l806Uh at 5pMec)5pQuAt*k_SI%W[lB(?=]ZeCKa]
+%3Po_D8u!on(`^jAbM=teUcBb2S`lH:HYYVg3rNk325cNu2@'pf<#ulMljGqlAg6*0=A$Th;G%+#Hk1BUTKQap;0h7$fnR.$[Y0)T
+%QP6P,;DU>CQ&a!T48+B(O;'cU0V`i+8r=W(s5Z9rL5AC<1fl</ZDU"jU$CPYqN't]TmC8o.F.3POXV,H>3%$(q_fR<Df1F,UuFk#
+%e'dBE;ISRsoKZk,IZMA:j"+j:2(/eo/`c>AI/:2e_Mm(/W?]X/quLLmVEo0e>KX%Fp#4$G&-go&"'<n>$\YFuV=#oZI#(_Uauj5V
+%MTZVV'JugMQ#+LfFa=C[nrued08 at L&KHX9;hStbdSpJ5(OD1r_Nuhid\7X\>%NgIiSiS8A_9/BR`.aenck'>'8=CL65;'1::>t!:
+%jlm^.F1(bdkboAubfjD3("ZFPjj.-W=uE3&^<$rA0h&B9/e6ru9PcblT]2;K]pM@]842\f#b[-L?As;p)kb6rrZ8i[Go,F'db8q!
+%I*/i\.19+45,eitCLab(SUMb97?3'#/%(S01g)cP)TNhfJX(QrFIsB70i80]_>';_%tI^f?O,[l&qO.o>d2E<0#(UMHlJJ(G)mlo
+%W4%_Z-n_HgZ:OW:pJB?2%4;=f;i20D%/Ef@<]UYlor99r]U15hlnZ%YnMU!i?;pc8Zm7a?&$c$>2Ecma_.20#8pTO!BV&4k]GdjM
+%'kCL'Q[m5l1cc.R3J'mSb)m,A?rE>1mUWeLEeb(Q'\"OF3e*DHC_lpAh3hl--GLbR]tj]?Jd,N6N8d-#ojiT%i>IE\cH8%VfQF`O
+%3&s9!/2#UZeAtRYVj&r@;kQps"t5Mg^ih3B<[%on_[gb;\_P13HH"`;/P/W(=)\!P0QSFj)T8e:EVV/8Pc3\<DA`bQ7Ui[Q!=#+N
+%^>#-UN-)IKNurIL&9Urm'h8<n.Y?n&AUB<"ar at +#JZ`"YYZ/Y%[76K46Z5.;e'h!bPDI30Glb3rku4bZ8S+#32<i,W98]$(:j8SS
+%[emEBA:V$&bl_JVIpY"1W>X*$XDC<82O'MLUkP7[,Jo8%O[Yjj*.]5ZZ\IQ&e>T,#RZeU%B_p#u;ValK8mD6[as34>TOrqkTH'p!
+%EXWHP5sJAXcMr$CX<"QD$^km0MoilX^o!/hWAHb>Qd[>_1(%f(F;Ym&UW"ZZ]I9J=a;T-/%bfP;$X(S%Cdtq/LSpP2NG,^<MlBla
+%:5SbiYlM]UgrafF"6f"mi\>=jP3t/Ap;T)b8a*3tNIo=PSE<M*k*35o7+Zs[d#r:Hj;758(('8nb_;MR?82f"\@+%H+`57(h+1S:
+%<*VmTDGYk"J3)GBLdoJP6AZamAF!SVJbIWp-F7:?THsX]!%nn'5T4`##n]q?Q;mT-N1E at 8YV8OM/Tf[>?d2.9e96EhYcPA$nC>.$
+%mBEUifBu'aLmM)a?*D9c#6kGA$O%`"0s9XQ.lF91Cl*$k`iBun[=I.bbc(sdF5^*R-RklPI8\]_geB]-jclL5.26q[gN#o at TMmO[
+%@pOk*\8e?5FA?Pr;"MQ%WjEM6 at 4>S:]n8`Ej6/p^Xs*`'`g^lTB8S77pQBBTjVEn]Z8Z_JrKoaj.VMgT/"F_QfTq1eTo78M'/bfS
+%U87.X=8<?QJnh?b(WF>")Yhk$2Z5eg;^od]SSfblG]R!LGLHS`lqlM!BA#?n@:CJ6YleSoeseP1Lc(->cb5J&4OlV.*R?DHD_X.g
+%Ha53$)H5:3f/Sl,eejtGLo^fl5j")gacW+]N6<4ZMhAScoK[WeagtgFq39?%a+I6 at f$,)BSW+0J394cfk=/7=eJi!;T_;A1m:SiP
+%Z<8pKaVMDPbGB3QO'k4=8MLfa>,8,<@&6$o(C!FrfaQrRr"0X\S+/rkE5G2F=^(qIOt2cg[dP::%>g$+][tbU$Yi?F!<Ama[d/Y7
+%gnmbHB$\BjRnW]YN+B<_nGd+e)[%;Hkp(D\9nHiL/HFa`7raTso,K,tdI]t"OL_Yg_/&g5qeY`MN4p,8;&2pZTX1*N"!QE$e>0tl
+%RI63s0UK).&DH5BO?pg1Qol^-CLM9u]iV!P,EBO=`E;riYl?5)Hc4i/b:+bkr#kS2,7Z,r&`Or at H;B7 at BBsA*,YA__;uNrU$;3n"
+%A."L,b["TI`]aI(e(&!Pi.4]jCUQe+li7bQIR[mZB]+C3;][D1C@!3OSc[k+gIQVA2eS40We5C&cE"tEaeV%FiW)%I+JO.iY;94s
+%Mf5uKIZa^V[<slR$^-%93gRPpZ%WUkig#67iWmF$KR#=h5%,/fob<`"A)]5h"cfoV]X".Ik\V.?;bL4u9uU/q6ie/<*4inm[SMHK
+%/1`kSIihRfj,Q3iR*!J)(Ec/@Vq0K-^4Ml,^@?*n8q]sZA15I3p[B)8NnVSUKdHdWP'B?'VpZ+a'N'JR-Q*,l?0'!S_6`\g2c:>.
+%-+7ofA.VhMUYAP%-l!>JGI=#(Q0Wj]`_?"ra'Q:O,`=CaQ6g>hmZ`SZH>FcEQ(V31Ns0O>)Z<d/0nVV,]"*@[9'2QicKYEu_."Z]
+%>$P#YWm&YVV"QMcVTL=2Uno^P>BWUAQohe%b'J at jV,D[+Mn</L%d7EBk#Fp2LklB</;s0gC>%Z_M0I<V>-(eIGuZ)G4MF:53R#Q,
+%8s=WT^!($Y78"T"86ZJobMS+I-Xo"XmMud[*!iLMR!6NYM"3(P4-m;=]<cU?l:G?5/#h^`rB6a7+]7]pSFb$<,bTY>PY9(\P"']-
+%#1TB6ZWuI@:!.hMDFu3 at ms6lA3@3d#XRYiAQsJW<1?jGSln&A`p?6&o(>^kD#n5YKB/tb,CV6qWa=P]sparWa=JTXnE**t]6CBrK
+%hZ>+YKo@"liSGFYlX;%rE(PnCoKBtEd%.93iYSYEWu8`lTcb_;';sau,6q3Z9"\cFDpF<Z'`j_0)&E-$Vc<G,/J3791*MW4$:!c2
+%VfI!FC3t#)#X%#Q;2A0JUI[`(h;(=-JhHMSjWI=cO!4dZB6aS.#[=U(#XQ+51(^(*_Lrl&$TB(*q7.m0djPW518_PAYA`Yb?i6!l
+%/Ca)PI#K5e#D_W)+U7sZKG*_<5Q/Ji^if3Dam6\`Iibci-fNKumCs)P_*@MRl"p!6H2._AJ)lF):]==*KjVUWSgfEaZ0R&R7HLXf
+%;AZg-I at V&c.."O8`FR"qL3.rr at OBuM<t\iINbA_JH],fPhjg3O7>up14-FMGK2>9po9n;NJS[C2o">Lp$8G7N0.=%Q!F_H[>a;V/
+%*BQZo4Ci([A6jnm[ZJ$&ia'"<QJ%c^ZnBH\_8.9Ijl,ZK%H$A*\?0#Qa$.2Ml;'YCeCE)bpHSZJX3\o,Vsh1p6LG$V7\0L+g,kag
+%m+-%,aBgp/\_2oM"fHo8I?"')#A_)a%;mF4e(6rjRVu/K`l%,djY\Yg_i!`A4td'?YfHJOh:)ph&8dE$`bKSUG[/Ch(T[$plRX4>
+%&\!Du?02grhhP25rh8L]I/`h0T"fdQa/'QU#dm0$1KHLSj)l_!2]<pmlD[`2SE(:B,H0(5,;lgj>lAH at BBI[h.sdi0B$=l"p_N2,
+%Gh#Bt.ibJnb)$]TbfboE!jWN9b0h9m`b\*b at CJa5X:gU2GBU\+Dt'3K>Mo&"QX7Au6$]?:Y$SjB1G?N:dcYLr;7<'#pL!pTo,"$n
+%p*s%KO at W:,WV9P*MMq.5@/`Os:^/06n"h5;\2T"H>44#9iaq/B8,r1hs*=60LL6K.)i)XM[O]'61GVVA98fB#:/&o^r8b'CKM_O0
+%V;po?e*oK-h;r^k]JNpLcOBW\>8Qo,.U?sCB+'d0Wa%Z].2`a\j6=!qp>#3$bqEp_Bm3dlk0L72ooUmT^C?UWINA0SY*nMH2Vrd?
+%rUU<%7q=eqC'1+L1XM/#`X9$DBNQ1&Fs+NN2_^SVMi1/VLp=_O'G?iUm&25RO4d-qI9cVYBC?/N0:nTd";ZKrflI%no1Rj3;HbTX
+%BL`Ri^rk?KBI7FuDn<>3lkfQZp/-$<hnPCeSq_t_0l$So3#eOF#B2jlT6HU*%eNs`/o0-?Vo`MpP<0?>jY[jPCIV%M:E]ID[B+IZ
+%Cskmo at 6@bGAPQV:R1=\-F[_QkkcX:gBZ(0F1P2OVk&%e5+E[!,E-%),D at s)'Qg*!qc)q-W7Xo9hEN/ZZ6,'..W_`0:!ltG=BGig7
+%6H:Cgj9'o4PM_qOZ-D6?aq]_>$cKfk:s8j'Di`,W]Wp8`osWsl[Qc.]^:GP.,HP/Zm`\_t)Af<qTGNsk9;&fceHC-Z@,IDYqn#'A
+%s7mFho9u52K9u.\VV3U'B]I;f[YBs5S.#[Wh2K=3[SWHAWKjrtOg5*Xo:hXnC;e4W?$C;Yl7&s8VoE185Prp$f#?nEc7TmkXc0Mg
+%Z?I4'#F/"*b<D7,d:Pf"l-rgOKY-Cl1frsWagJ=AF!,:#p6-(DqDgF62(Z;ib%>2=8#tfB4D03L:ijK,QIc&"c]$?9E&*$lEt'md
+%n7$)SW(a9eD[AS7+^8$O\Q$_U!Fo"7:6D`:"AGS,n1b4#8R#eM^-8nibDo!MMIe>.nE'IYg66*M:Q:P8X(NXc"g,1j&Z"k+eB!OI
+%TA]+ZXALRd]X$".9A`dLk8.34rH&nbReg>-FfY/PQ0K0kA(uQ*DA3>F:]J-Oc=1".W1"M,?`ohuN>ZmW4oMME\^QIpis=*HcWnJ'
+%"N9%#)6r0bK"Z<Og*fa6qF*#\6*l"c\.i2JXfVpJ_.RZX2d$7$du+;s5?_FXZXk,'Q>"ru=HqfRP78[.m>5gf42Ng9>\ke.2PF%M
+%.4s9On'a.\k3L%2Y;645"`Y1'fu9HYJK$6X+o@/iD?q*d0t"_>CJ-.72GA(-);Qa\bDR=N.s+n#+)T#+<=7Wt?rpZlkSJjR2qV9n
+%e/3BRQ-I#e*AKVD"BcQ[iAb_n*%DPkgU.ccU;HB(OIIt.+a=s!Z<nU-qTC:"'ECQ\@lJ8^o+ at d,V-DNV<VAM8ZFkNE2dUKb)OD8D
+%/[7BUrT-6=FVch;bBn[8+nK#98]L*%DP^QEHK$gpCsZ,-S+e7+:g^\FI+ZK%n.SS[I/<8dT6oP,V%5fbfurFsEd#FU<O6F1$Wp\R
+%L5NJq]!))45'5 at NRJ0b.<pH`[AZ0d]haYSI+j=OD-Q.kLCKFd^9*RmbK9c5CR<2n^<fC2J;m]Np;V7,oOA%.sg0D?cM3KS,[fiWs
+%)ZVA=iC,K;1.'_TYtJ=7)CcJ33V,.s,gd*XZOpdLhrt&\;qNcN at 2hWVL`Y9I0PZ7r:Y&$pMRCfa&3-!L/+ir4f;:p4$<],1VkYgc
+%Y at l)1/qFV#h)h^V8>37$UR%jFnLd>)*>t0,M5a6CCo>HAj42g<$oW6%;'W?kEUCEf,ir"maC7&EVnh1+,6Lq!'Uu\YD&K0$C+M^B
+%FHj2_2VTq+=p<]6WXSTGG&]=kQW%DMpga"0.VWS*F]@mp4AO`QPmhjHRo?q+>_iFoZiP%gRs^+JY*bfdm*u$t_OT*?Ajgf6kV7BI
+%]6H79c`e?an+TO/IN>3_QB)##o"K8hA]%?)n27KD<M$AGWVtP/Y;IZ)gCQjWEOUY[cpH9s]]Ll%EHn#/_l<UGCG0OMVjpU$WMX/$
+%C7fJ.oX[Mg*:q>1Z6q,V]SS?\JBehnjrhW<_-)*4P6$us0"cPrFa`$M0]np25UnZ=8[/4u";:TB"@B:O"jbq*r_V><.N'G:nU4!o
+%N+ at L&aUIe=cNT)@ESFXt$%&`H=)N*5/j+E<-PuB2$"gf&Ea]*3.ub$md#OLBMn@)bT"LX842itXd,).['P(_:UR$n_mUV")%1=fG
+%h1h?!_r.f3]/pd'g5-qF9tcE"%4Si:$:43"^ZK!>n/;Q:XZT&lU.N1LQFV9RMtTjP@!Q?E))QF0e0;a0PH&QEkDQS^@So-M"-kg1
+%2ddNlSuq!qELRY=4L(H:l;Lf.6>/8eZp`-)H)*80dM%>YCdNMam*-jT&9^VY<*V!X],fCuRk7i1qJYm<J%X]bZbL2IB(Y]7^^E"m
+%q.bZ++&m/a>RQ)jrLVi(Xa7<2!tCgS'Xd(A/tW=60:pq1n\i)]lm9a0BX_K;&t#7/rUm)Y/mgGP"[B]1(l[Oo-7%e4>n4*nOd4X:
+%_qYBT=II:sXbge^_03)5(>GdLF$>MM[LZ<XFFd-A/tUA5ZT^W#pfq`PZ@)YWT<-[_jN<u%YaH4jq;U)0c(u%unmfUEXS_+E=(ctm
+%7?mZTadJu/648lU6j;`5pVr>Z_gf+':Q3DiY*5gXFC[-;Cq$j4i6RrqY1%N*&N>4dA\Fsm7N%eDVbsgP]b,\+kYh$Rl]lrf3!c%a
+%&W%l=fQ+1LUnYni=M4V-m.b_jWD9.IO)d;[RHIqfFmll-?@Dg<QS)(4IR]=5NhF8RU.)"d[9FPFE(1;2rUKB4<,%Fq#Z45!%_hBN
+%IFR"62EPMk-\@)j3/u>5K"u'4GoXXnJuZV0fSbT1hW$8 at Om9f42Nnq/mIAp#s+C!M'0Ib?!=!HY"DQ6;Ie$Y;eshN-C#N?RAac8k
+%$e5DrFM&c2\D<<lHn1#Fs80t<=p+@;d`Ib1$HflN%(U3PI?*7c at _.`H)V'MD8T_38DuB9sl$fJddMh]IrcNnG78lAJ<e31opsd!(
+%f3\2=cb4YtKcbU9l0!Qej]B`j85DEbpgAN]Dh\hSAa"i<Y1bLjr98,!+uq0ZKUPq9D8W<+Deii?0`WnJNQ#CCF38sBJ>!N$XarF+
+%9uDbUIj)MZ`L74e\3_fP^$hGJQS<H=2='Z#Far/](T[)Gch]3qlFtrXId/9kO*:N$&#]3h4GU7\%M-kQ9u$7SEc0KSK:DXfRsK[U
+%pjno\JZhikYWhm>,SN89HP0-0p:)6td)G]rV(p4T8oO0H0$GS:0GW`MFRLMp@<CE7QVk>\UXMO]HXEeB*4<5f"G=BI8#*g7aNL]D
+%,mVK.\rXE?:StALf6l2Sqjh#q_A,,ICrN.<LP_)pa;7j%<YO4SjL6]eW9liiI".F+84cQoJ3(@tlpmsbUKk2sgTZUK!d&F0<*::9
+%%Jpjpka?"D"0 at D<7qk<H53fGEb[?jjA:;PtXtH(!l@`7u$=TcElU#q`YS"a-,'ifdJA?i?[C[\EE`BCH-emTB+H;t]NlHcr at T<%L
+%D_>>hSm5oG%GQd33NP6fkd\'/P.p6kc,t>:#K(H!P<!IQD8L)@mFEoAiTc(.1g5`)lTeQGq65q!Pfi3uR"^W#V1QHX"H8Hscc$IQ
+%OqCIRM5XbuQ%1<"LE+tDU3,p&,n<@AFj5HV(!IRT`O]/letM/g6'ptL!mA5NG)a&gf&[NLSJ(P<'87Jf&.%g4<)WS,N.K%dBpH?W
+%!.2,k6Rb`9$j6;<'mFDO]A2n]9.dZ"UG#)Re\s/m$u#8ICc(#$Fg1p6<TecPFu,`6 at CNEHY@6%R>qEkG3qcF8]mjK3-]V?h.Q=m_
+%oG(GC\m>P&<t&-ASRIM4:c/bEdK.N.p=?lf(KlO[M(8ub&BNN"6=LE]H7Ct!c%<*VVm6c>E\cun4IO*)?P?b`DRXf"%VKQk2;Y&L
+%Zn8.mj*,7*@p_o.AC4GD9P."Q_5,>'>8*EtOqF'i1E>IfPc`/,'$IH3npuT9)mou:rbt:0RfSLT$O+BB\ld*@BW>=4DT7khm.N<o
+%2=,L!Q`G(Jb&JXg.[$7Cra*aE%0`90Pe_JjC];#njCC[!BQAjb,D^p1TsTh(bse*Kq7S,fbfOG7esM&!6uB_hT=-9$-B_ at Kf!R::
+%K$i2K]5aIZB&@44L>?b5 at L:>GdJbBV%W9H<r_Z,ak.ZdfKb]Ho5[HnD[EKe4G!n#q,4eH=j(6_^M/U%r*J>7W_m]!_`G5r?@P).]
+%dIbV*Z*8p19 at Z5mAiuL!Z>UC__eur,\IM]=Mujb)V%ld$%>diZ:5XT&L5Eq"\e]?*q(M-Do9O*3'4bj=VoB5.^FO4$ZmUc$:53WA
+%<4G`d5U2R=DE'+P4Iq:?)g4$/b[K26$*RdH>J"-qX%2B,^;t?M4NDI%%*-Wa)`Q&[HsPkmhY)]cnC64HYaeMhea#+EkL2Y\=hT:%
+%Z at M3lbHnZK)E@).>pQNS;)_p8*m.?S%_>gb+B'iL1uDf:]Rm[/6)eu3j8_`i-2:MYq#VVFSjE>GO"il\nX"9gBsC_`o6W%T6JK+*
+%6.+C0e596(-*T-5M.2ahF,?sOE2\ki)[Vetd0sbMYuehI<N1[R$rIgoZ$-n:j-'G*d);%,.QCLX`mFZ>"<m>:3o^55/8jQb`[WP&
+%Cso`'1DW<Dj-5"Rp1e%j at L"EEeC"a0/?3jGOe5GpQO;m-$H0s\VTaOar,Rk=#c09'aLm*j6B:mh`%&eO1lk1a/Q8o*k;HC5Yb;eR
+%B\/=Vg`Ul">iG0S:o1_,0i3\kd1[GHPVG*,=5u5<l=+Hl^W0UgX"<<i_IS"S5$8%8FDt<k:Th];9h,"YN-%-`2X3>Vb%jnj-EAn5
+%[hY#kDH8Uq\l#0lGB.D=`Jif!9NArt>kmNI>og$(b2,V-^1R5^H>>fKp4&#;P?f-5H?RL&o&Ke:7b*^7a68QcRFPEBm>,QUj4[k3
+%XbJ3o#Zg/O#-m1Iii3.sW6>Uj(38[)'02Z5O)ZCbNP*t#>.Cr+f_L\&k_XH`Y>6.<S%TYr(P at 7c+M!YdaS6)OLHk%.ZVVf7;m5q/
+%:XC'FVLbfqaKp!ZB5 at BU)*!U*Q]u"=N:4Xe4F&.Ql)Qe/6VU$dHH<RQ[I)gs at 74m_Wg2B$h]Hj`[*SAH&K`t&_ia=F=_97kIOA&J
+%rb@/I at 7tLX..-W.^+1_ at c3FP;>"$_lVnc0o'=sr>#E;:$\/q"SU#dC%!o[M"7ls\o<BA(\-CIcl3pgDt.FuG+Xnp"iRj$GRi"EEY
+%WqKoLg*+3VRu=0gVuSG>W.7S'q6.$-NC[94Pn7%f2.8LjV[PAUkl0VWI>[4V3>+^3#io[O6<GPCq at j$.\6/9mick@%@q_?+?MY^-
+%O>N*q,OLc%Qj'#7<$h$4*nArjeX;\%C*t0%UW8\Tg'Xe")]_qb<-RR>K!ioOgK<A_)Gl`_I1o)oHZUfA$+4<dd)Hi6':Fd-O[$f.
+%<*df9Ti3_ at j3_^)ai+A at U@K]$RDE2K1R%""H%/Im.cmI]P1A6UVBEX<91h!iO at BqQ*YX[#FMH1tr"q)I`YYfT=n@%c6>TWu0Y7"K
+%b0,FXg5N6$*ci792D$rgKp?)Pke4ST:SXeAG/K?jFHQM,-ZrWH,H"?%3DT]5HNjqDi'O:u>Y8)=4q^a/,=aNUP=@#@n(#-h_;lb(
+%R7l,-_YJ#?V)W_npI)6P.:Ao(UfiA^U`r)c4".'j/3GL4iiVcH1X=ggIY:*V<*b+"_SMMbO:e/h1`Ft:N5<,i[C%m0:1cDAL"aLB
+%&QHa)8`Q\D/#i/m\HOCmbBlIAZAE(qNV;^).)NoAc]AWR-D5CO^5UnA`H<[VlWF\YQ*%mJc>(<8+[itT_.U]HT"/MiLLrs$e!Cc7
+%(m/YcQ7VOM)`:XaDNT57Kkkl6nGU!'m>>6fBfAg$[5b_O6;b27(%A%+N&1YE<67Zap&Ya[a:YFYes&nj+?V#gag,*f"T'0cNHdsd
+%P`8O,2 at 0D\V+XKlF754$(#S#G0n/E,'^h7e/-3YWHhX at r"'MBn)F5"lB[$URWV_,XCKIF^E1A<=AEsr-\n5f`C3k'DWC#7g(J>GD
+%1d/k=BaDei&\;)[oMQ]5f1jH=pV at CI\Jlmb/0gBNBp*?j:V+2TlVQZ/_p(og6KuSM\!8-;Te]KS!pN>kbo04TD-E^6I92LM&96Mu
+%!V8!Y4';P9N!s)A&,B%4-MR<NUE+4tn'ICA/U185J-,BhenL6^'=Kk at h,_KcToESOHMoFqN+qJ:"K5:>Y]mW6'Vg^jSHHXZ"=4a$
+%?"lZG$C#W"9=o?,oe#jfq1^>lol.SY1`_s4hA*L%##ok^0m#S_0k-WD?7j;M6rGfb`N"t?X)/H>OFU5Lk2I!J_ssmEfr>3ekRXTF
+%9;>)-:3UM43V1M\S-C\\h]I/K#:)j"Wn(_=$*+80Sgdg8CD2ef;atq[]L6N_Qg^1(TH,jgW1\4465uh#picL2M&YiD-mM7*<H\^.
+%W"6a'+g>Ip9Hls<8/j'I!S&c$B5N;3J4'g0l<c8fdW6[Pig.7k*j9lI:%geUg1Ig=m;pW%,Ya$;G<Rj.&WmnE[\C#Y4![[/^)jAS
+%QSsInUtYo$Ff'.1:['*K)V<c-nOV8c4<uNKL&#7#03V[E=VA3t]qKB^[1(gN5(mu/Bpr+ at Hb1g#b8'osn"8>\AomK_.$-!*4b5,B
+%Q8bRO[o8uZ8`)R2!l[VW7^Eu5m`0*C!m,-S!3epU?9+0iY:79NY<AbpY2/NH/M_m87BfYlhNibI"o:m.(<,Rnm*2mgTn3W[C:A at G
+%`aYp;q^\2=S(YOQ&^?\DWnNFVR(H`SS%UJ/A-S$n%M1/h5@:I+/ofuW,+3d8Pk#L79U$r5+1jM9*3lqu"?JE3cHYas_->YTmCOC=
+%+=VNt6E.[[Y[INg0`'J!%'r_6FlV-`Q at 5.UT,C-)]WpnQ@;Q-f&heBnbq?(jM4`U+KQ'9?0e#3e6='s,g6q>=Ao?It0fmWVhhL_=
+%kNW,irNM[W:H\[G^%V")cb452nW`#;^`&@p895*+";B0:LrVkM*OS[mg=\)0)#*=%QW/2tK6\.0 at N5LWj-H28ZJ<87.374T"Ta/r
+%+ql(ar`HF&7L4=]eeM=bgH(&CKFY&#MJ4g'FS()-@$"+;&mRai'g+,t;6M"K28$1g<RN!%+\r-LQ121(M^3W#II"U4qkQ+mFYXLN
+%.$dpP'_b<FrBQpPk-eb.k/cm&!f+81[j at WM$98NVYo"k1>M4odG9Z3aUcmf%!+tJm=(s1K.RId-EkS?og=u6EKB*b&HUY;[b2Nk'
+%9e#bafVE0o`;V#bkHRV(BZN0IGfHLPUF27"]&HIb)nRq3C'4UUH81,NjLbaB#KVL'0o_b+dBB#d<")HEHUK>tX3 at qqC)`@6/<hao
+%F:QPtgbf:DV*^Fm,AI?iUGoAOQ+^^=<7&f$_(.1rgHbW4Pc):i#i]O[*@.>CXDpG&!3rYWEP<ihoFc!W]p70qA06CR!\7Yf\6o]'
+%+LFqA0':Kr?86"Ma2u%/J#A/5P^Tb+qu at RoF0.d@P?kR#fd.dGDfj%&fe,-)',>@RIdbHn+oobJc&1n-eO<'m<Q\`(\EFEIYn7CC
+%UoIkQj2(7SNA1j.gRC**;+kn$%Y^dU`Z;!U\;#<EA&0u?,mWTF.'KsZKB,AJ#5H80Bq"G#IH4)MoP>bjA9'YF)/@[7-83)^j;HJ2
+%1@,+HP8O#r_\?kEKM;a+jF-mm?5AaR,[*'_Y3`#o'!'0G`4"TJ8^Pp?;TC(fNUa4Z\W`e\<%CnVgGfW<BuV3Y6p-/,1Hf'!W at CY_
+%>4\Hn,F/cNH\]D&:uL"g(+XJ+P#]NF&DKeQ8RD7DHQ+cHX4`@g at am;WKV_eS]%&,#&W/G5gWu9KW>M2Vn5u0])I!eF4-+uQi(0Ra
+%T<J<Jbns81&R2 at TCt63UH3RsQMj-_E:+*Xdqli3RD9HE'9$HK?JIrBi#apDJ2&i6c-ilda:PEk*#&#hA-'s6`9;Jf]Z$eSjG.+T[
+%RZ"D\ifQePmMaDD#>L?V3M!O&5k\It<XG at kJpB*i,6s%c6m4\PXJMhu(K(kVjJh.05ap^"pa`Pm,Zb7?_.LC`A`I1sr,u;bB8!jh
+%*h.Nd;9]jl1i*`0\1[<Y1mO%]?1:7=npLY)D,thek5G'GaGVd98iQTY+tL2>J^qd.U:0W."6;!6%!>LLHtZ"!+R?0Pa at NHl-e!C;
+%OY#o<V906iW-g at O`R:5-WG0B4JRY[XaGsg-H:1H"FU=\Vk\+h(Q$fIM8e3SAlEnW1U1aeXR2RH_^`cFC9"AhVmh]f4ae+EPjj.Zi
+%5KBXa'1KXj8Tp%.5[@7m93R1VXLWGHAB.2V-\Y"&Eq072o][sN8&iBH;j$u9IU&mF(9.Q#CQqE/C?OTI>NUl$$(q<3XfG&Dg^'rB
+%5HtVf6<=1DF=*!.GSFjQjo2d\\o9:GZ?6e/J5T\GH9maUG#_1H/I<+?Tb$=)^`F\bGIoZ1LmUAcB#lduFb`oJnA3I5Odr+Zk=XD`
+%TkK>.EC*NA)#8%<;J7EQFHc)C-*2Zs\0sm\<`1ot"Q5<GpNoK))kUOXN/<3(-dRHl(Be?XiPXZ(9hqg*X<bIt0[a-W11L`TJEi8"
+%bsdUbN33G^p(ic7CC/<\A57ETekr\+Q!Cf0,Q!*e3MJ56MJ1-sP8ds"XGfQiPUeY at 6"9@(ji9+ra+P at e(s>SZ+1S9d8YK%i"Pk#!
+%r_hHblZCkC:f3^a)..'_37WsBo^sIQ!@hsFVPpBUEP$j2#RJ.!'CEWX6XI$uEr9 at 4r@7C(l^D4E#30 at u@JVT[92P!kPl&`a<@;&<
+%Kfm3pU_1[J/L7pJ_Gj(eHAF=UN8b,`Q7 at 28MFY?^7H\Q(_>&g>)Qm=q>R^]97W<TT at PsfjX1$j8j"@p_O"45Ul&(m79t?(J at bC6`
+%lb4W#5S^Y'!_2TX!B06PC?>=Bak1QUC9L:!</fCFFVr/&"Zc>3#uGrZ&Tc,C at tfZtkn7!lVeaI-9=3_cV,7D!?P2Y-g(qPSXU;fg
+%,64*-//d at jTN36?H$$DN;-`O[Y:boUXS1$'"/*l8oW3Uc&;Hu:p`+X3L*<U^][%ne>Ol<NEu:2U*]+egY!q>U"_.h!!_*_:abaQ<
+%(2.V:1/8,kJUY(09[S.J0Y>/4XuO:#8X3gG6Wq*q8I"^\/MCGM4g/qYEmW:(e$<uDiIC+123VR at I#"%lNG9(oX7f"T-LL)Dd\;U!
+%/OcGm\ntSm"gI<d?pk45d/r)/3m'&!WA/9ArZ+_pf0D1:FJ`RN.^c-R:*#u$j9VKL(:%_r9q5L[J06r.g9c[m at rEKL,eO2pZ-[,[
+%5`<:=;D'e*r.O.+f/scDB_\Y9AFh)17SXR- at T;ug7=E$5'>/N4>!Bf*7RCa*\IW_I&?6r-PJTj=/Y+ at W$f^1*FWrPD_h\Y<6-;V]
+%K*dC;m$/MAa'*P)Dhd@@P\DDF.KMQ"Q97R2!;dC1Q+:%nm+#t_0h+I:4QXZ:P<2;o5oj<eMB*c73 at KmI6d!EBLUq_<X5/B1.%6j8
+%/Mn&(-f7lZIl+[s9)VT<YtdqYpaSNU;W59PRi=mjjI7.GjJ2U])HR'?cT"C3AAoe_P2SM2d1D;V9_#J_Q;^O+>20c:0(clBTI$)2
+%B@^\Q^hg`6M02CD^prUIXW%7:/'=/0'`P)efItn9dq-t1/39"QIbFuhfjQ43;aaR]=?O_h1.#-_$WU+]A5TdRe_F\(7qo>`Or7oT
+%0Q(]@ip$clK>8TYXDYnOEYFXiA^<n1mm;O2#pjSIb#<^m;pU[X&EKiO(+Fd7CJm]2o=.'uG6WX*hD$[:^NLo7CPD_`Jr!$C].<l0
+%p',#&BF3KNl(upCgd]H9NY5'ICn at Uf^12=J5`8Z6PC\JrcH]p?WA#g:ZY'ZX'5B$Ic(6NA*KsEB9>]DsBK>IG<R$NMmks0?Uu5TI
+%s-3"QGNT<O'LC7Zhn,KAb1&1/N]!o:i92CTYT"+(W.mUBY33o;_ at 9M[#VW-&gm5ZI9IiZJ1/Yd`GkE)a0HmnJM2`/$q,40im6ssu
+%VeQEK;rr+d?:j"YcZeBl[gasoWdhHG*n1.F1XKY_hDB"]7UKK-0'6X1Up^;.qjFdVBXoc?2l1b!d[!R\,hO1&3n0?R`NZb^:$7s#
+%mB.t"/_D1uTM7M\R<,QB(s$go,0^KJ:+b+;"A'2a"F)C at +4[japnTG"'@!%]\tKo"P4p\9S>Joda:iD!n>#NXfq+_&(*%(n[CBD@
+%1iPtkT&Gc;LT*@SR3&U_FA:H<X#q*6HJ04m*FGYN[kmmhN+JEsP%JW>1*Om\rCo0K($9Ta:6,s-O]P1_9_7k.4_R;XXi+>Lm6fes
+%4,i.7?:&ad9&;UTLdTUu9`B1HO[S<hB^c5<3Rlh at M,brVgCc8m>2J#"Jl8s+rYgofI*o0o[XhsXO\&M"W$ia];+if^&d.)k$@t3?
+%#bu;+GP6[PPL"^=D'p<CEZ)iHkdN"hJDrh at 1JpPcs4a7ad8n9[@4(ju1o"@d7V)NcYe\e,8/\FDSW;`&1H1Ih at iK/#>3$9)?BdQh
+%#g)1_9)+&5-X,4_HWQ5B'MKc2[JbFo+g>m]1P^Hr0_"TX5nmh:mVH<$Zr.c[""2L$p,Yd:)9S%?"(js3D4mT>a#Hi+Q;nKOM\;jS
+%,)puW3?#qm)T`I#95aWrKPm8;4Y2kO+&7g?e`p.4R.3adq^ehk+jiu%d"\\oK1e=[Xq!2?A(%`7,bVS#OE?TuI.pu)QIB$mq<>DH
+%i&sj.@@XDf9bs!?Qcg$YA`7ckmW4+tkeYLu3p'ACQ5^R"`i!RNP`"\F?Ho&t]]%.6,uc8CpaZ:FB+ddM>/!poUoK8>P)6H_'/sW\
+%..No@\WAjMdN`iCQAIL!"E_0kNPh#+KPC/sSZkoTkQlnfHU-*BkS()?U:"hNGRnS5Lq=M+;I?7[ZVVs-`oEB5^)0 at b'cCX/9MR-&
+%='soS>bAAIN-=2od<!gQH]/2=-P-ST+PAP5)'I3BWG7HU9m9^rL#f`]p9Y<jH"8Y2ojNGjE*nUA+ug;EjG,(OM^Y>TZ>C%S%#L\H
+%D\d+Dfcg#$VY(..WLAP\/*f^L9(5l]p_o-l1)QFE7&g=jPYmuMa91O,>L+['a&KaKNWr6OrP]2X&IV7;DFQJtd>IV:qo2jB2#P.b
+%A<.;s4VW)&g&UZ?iSdL`_jcF92\-=8*Z!Tp.(jOjGgh34VW$H-K>AL^K'ueaW(G2"6a\gnj?ed4R4#5]m5.&M^ccM^ZKRks4l1p0
+%2jcj"i].i]+:peBl[XO)&96>iCF8n\J'WOHo.PD(jdJ]V&;0?kl^:It<\ugo9.__7]#G/c2&-#$_o9Qa/Zt=7dJ"aKASV<0Pdo.D
+%W!)T.li,26gOaGinpX`=7XN*/W[)<eHD=F]$R5eT1RkF2h-YtZ;FdMGlsTFP/G8\MlWD?@hg1K_dPAN1/t&e/6OLYg&1;=F`EtW1
+%$]T6`ouI`lnuOIF&ZF30L6"D0M\:R`DogL_53Nh0mRWHsp]ua'^)Te[Dif%:(6bPG1")G@$`,RtRB6qJ7lZMVah6g?>$!ZcXJ\ct
+%.go7G,"!*A3`"`,%d//VbQJV#D_$dH*en<.(eJHeQG3kI(K_gD-mSAJb-fSb)qoPh3IjKc-%_`tB`3AIoO0VYYA#b$$s$*<<YCdR
+%QB6E;M]2/fLcs!@`u&'6i0$#2FjM^b(Yc`WqZ[jfD3IJR8)=1$R%n5N$_8RU1l]V``Bt33,pTItm^SLIfWgE,pK-8]>1G6lit.DO
+%6BoVZ at V/i6KRJO6-qR=bQIr2VaVpJ])E&7EBALEVhi at 6X8_0O.WuU*-X?0u*4YIQXL#i%4%^-?V"G8cboo'6b"o5nZp6Z9lm3VX.
+%OObAOYKF1%/eX&6;]n^Ve at s7[5'ieJBqHN%+Qn=jGXJ9C&=QqT=A\A38%)EM#sMh5Pe;/sTEZ-#i*?IRb/8OCf*GZgO"hKT#^4.(
+%kVakQ2BJ,r*U#jenAS\d&]HUW94p$f2=+<SU+2JK8B):</8K%)Z7;'8-K=;`F5i(eS;\G*eV3>7`)Bij1JsrQBj8EH.tBpJL_I*j
+%(:\$/+"C%selo0M\%6j@=btlb`K)*q:R2G_?Tf7</ZKMb>r?S7iFgl1Pu?ZO/D[L6<ZaN-9NB8=A(ilT$uQDrC%@8SNFO3Ud)Q>M
+%G)@eKXiagT33%ZrnbA+m8^YlrKq+ at g7EPtFK%1rcb>Na\F0uU2oW$=IUHtL(Rc[iTi<]rFh9*%t5N'FX$q=ki#Aq_kO6*s4:^7KG
+%qGtB9<'jZ$!:0^:bBl2uD3stpAnKfS$B'F$gscqodo4H at 3-^*0@;I2b$>*+9b<hJ3\cG9L?a=hm-NSqphW4a6E3lLAHH7+7>H+/q
+%NFoAF-8P;O'_p at cGVu>sQPt([at1^m!1k#Dem9jg"'["tH:'RK-Oq-s*_7N9SVE.TqZb6/@%lNAJDjEZ&)13\Bul_ToE'@$Lc\[>
+%8R0/tftOS?VA:;U%QJ'Rar\?47t;<oX"1i]Ymrtgg+J=Ae at CWJbKsP)<T[\;j[*<2i]*Jr$Th+2]!c2altG=+0g!Jg[%krj(A);J
+%:1c at .cH%opBFU0Xods\h<RU.hA;]?S/s5*7_pjt_'__mr'Yb.9 at _'C*f0PPMJMO_3H3N'Vl)QUZ!SN]FEFY^Ch_]_Pl=0S4e3X*h
+%EKm;:!`#ci%:dO/WGS/>1'+bE7Dk.Td?763RE5 at c)RRHn%;"9L;*P`"QQCBP;lGD$fBLlI-s383!o<'YFLM=",'GJ(SJ]&7]Of4r
+%W19-N]2b,[/TrXue_R/%p^j[]0^+XWM_b6%3kdSM`3AlY<1)WF;*8.o+S$n+DtKDZln1X6^/\j=XY*1PnRr!'MkR7Cnc9#h-NBlS
+%i=nQE8-e`7SLj/eBSC+ZTW5OKiJ<2Mm]QMI#5R&2L)Ds(jS1$ZlK9e<l2nguA(tjh_*eG3!%*ogT9AW at Q'm=tIYFUP.ouOb];$$^
+%$QEVCn-:+V^L<^s;JrTm*f.Ln2s,rO+q(, at SMh\7[(U-i\.JuTMD^H&R46mk5c:Uk3L5T+V?+"]]4h:f+dCA8-n5;qJREtE\.\1a
+%\t(T.BW)5J&;*rNlBMSbGgeH4d13F^^21sL27Pa5MHJfqW$%W$jjsAWDD+=la]%m32OD9hZhI at la=eA'oc=gOcH1Mm+peMT<07&.
+%4&nSQ?Fjmi$go,I(D;"/J`/Dl_rW!u1]>Vge^F&nDg4C98LobogSRdY8;+6omjF.;Bf.Q"h7-[(Fe"%%,AK.)qXtMuPbckE-G_O7
+%6.#tpcIBnp&)QkMaVmb"0::rks,h,!9[?E)dO9ua1R8Ms*SlO"!2VP3e9*:SA&tdA1c\@B_'.gl-0.k=\mi&LEBQ/lBiWXY1o#dV
+%RYqK1lWd4*eb,498IT^;N),(o+&-0P_bi+Jmo[D&Mh:>8FkL.?!5T=-B*A:j<o at A*rOK0n=I*[tCnnGp#].\'@@CXuec`D`L38.j
+%Y[=@bT\Y4='!`6sKrSU^HL=A%3i3j^!7o+NC.J(6+JbX?N*TQt*pKtsgjl?o)iB!T:V4WGC(B)/DoVoB0]g.sFB>UM4TfR%jD:1H
+%*Kdd?GScB^(IaBVNL3C40QZ^8erE<`8i[/Iqde;Mb)CIo.G)*s%sSb)K1Am7VSNi2/=,^c5'AeqLQato)CI"Z)uYGfp#92+,#r6K
+%@m\jOR:=t%URJ. at GCeA36EQD=:;Z5]Z,fG;o3Ie4'!LS!NE&HXI#-j?(-q,mZr)70h2"N=0P<5rI[;$:.RqU'l6_h+.Hi>-T)^kt
+%7YB(<meoSl]+QUW07=_b.3SF4QIFo;Zk, at ka>KKr7pKf]:3S78-J--K4o/X(^,urk0nE$$L(b%67AVd27j_u=Y*VqW,c at clX=K>p
+%)[JG7Ynt-uXFm.@#`\:=NJgS81?Onl3N_QhXHsB35n,C?QMjET;;=N at Tu&R7FD"+^K5BI65Gu$:apOB)J at CWmltB7N1"nd, at D,p&
+%*N8)0s#m(g<e'bf40SrENoW[af:"G/Y%*%Q.7sP,8abf%mnaXH&0Y%o4NmRmQfGdaMDI.=IH)?@/OMRCBc. at RKk9Tb&dEO.]\i3W
+%70!KkF'Sj()%<&h&_(QQ*uu>R)O2!AJUlW\R^*<n at AjL7lcP:I3T7g:o9&kCCqcrnQo-+X^;hZ9OW>:G-]a=m&Lep2V0iKa+CJh9
+%Oel@*8BI</UZ16QY^&Q_.S41D_MhEHp-!3o$uAm*<up`9c8!AV7\Y8sZa=#CHm,sJj$5fI/S/lD)l<q;aX>gW&`hN\R])DoV>"+2
+%bAVr2gi2e(c@])tQ5<]#f=!NnVrI%C1b$q at T6B0O9k'3[2eP:PEP3(PX<Y779&FT4Ebn=B3%2]&gQlf$\d6uP/4$6h.5*2b.c0kJ
+%UdHteA+PjPo0g4-:!m"`jopIT##Gr:o3^:BTkl'K2sXRV&K?'9i:MtB8?/K0,:9;gN8CpQ[hcc6kFY4c0$?Pp:J7QolVWGD[b?t-
+%kg)N,Wj*<\_&O[4P.0o(D$EO7#i'hS at r(22.QC**'pN/FhX+^laF3H_'(<\KNWg"M'k#-^/_3EPRDoHC-6Kb<9R(Ek!HdXs/5AcG
+%po^4t.oU*k&.3[C<aP?9iHV8FI-Q&"&>ZpqBnD7)?I6Vo=<`u'>2NrHY4QoMD7?fHj[+ckf%+]1.Zp2:5k)A:p<CPjcgNmoQuoE0
+%/5 at JE7s].oct1oKi?O<4H'YRpDXMb)JViqX1c_QEgM6?d^IGFPN,1eqZ)]USqlQ%/X0F%I2FDBW#gbdIW#\:>jOVsl:g2iY@"E30
+%(]IPge(Vg/\R4*/gG]#*cA\Id[DfFgQSh]VT(LI:AC0]2cG2cEDV_p9gMCJ0Q&7D9AEMEp89It+5YYR%q=KcfOFko5KE+YZi(0eP
+%=E@?R"PmhbH2GqR_;>%:H!7.!a!&.&BtA:nKY8L8"iF/fmn.unXIDt9nV!<&%oiTaP!8Xu5e"'t1jU.s<X2c]k#&>h=Mqi=<o*W/
+%Cq"^MPV!m93QBX!iW]Zm7$*IgYJoB`1:e7p)dmIOlu%?TV>X82[;]Y85h3aNaI$.uDh+eJP!9kVQ9i`iUM7"-4>N5RY.Xk!(4j^>
+%E3onG*Z7BSq[G6dB"nY((,u0TpfVs)DM"I6r<CnWfH2+oqi9WIhgWD2qK<5&\:Dhn#i;*O,I;]E_&GXn#P=Q\`d!rdPH('/WfN!W
+%g]U1Cj%9Z7C7>,`0E`l^0J&Trnu+bDe-3)O:;?HJTu9rKe:bc:7[-R;0c$:l>5,\)&O#>I]/$@O'X at hs@/$1-P_C:#U'kk&ba:B3
+%#Y8!i+sN:L>M8pYc8anpZ=,UYcuPRrKscfXC8D&:bi6K*eiP:2]J`X7K!1e$GdB5Pd!us2i]=gX3.KI'$1)g<=g4"DXBsPA#LX,8
+%:SHH!.$I2WHQeaiG^rptU;5l;KJ at -m6L'ifLsBY8\\qpbk+%`f:+.f45q9/p^mQ3W%5B4$O1YMP=p3$]nB!6Gk\@MD,?$5EOq#=u
+%R=U;ZUCC:/lUKW^!?1JAII6=B%h'5pL2<mZ'S$k[M")7l8,d=f3. at TV_6=qnR6eUu76e($:KP+Ui_VeLB9qnSXRLb]c-NiZDY<iV
+%^.)<$<-'V9RMW*E,to;/*%<>6M*"8mhtK]Tfp:D3aA%A@,(eo#5^QE.$4(pAk3r0(2sOoVcuVeE\d?Zhi,Zqsg)I7R5JeBNQXYoi
+%bP9NM%tn^B9ogp8ec&7iWc#!P5`FN7(2ZsOYRUofabs+\D7OVU at L$k[\g$XB/.P>4P:7Fu$C:m.Dd1KqrQbNfBp2u>k+&PZSJ<6s
+%8k7l^d7`/tNE&$:i.pX/A:js?2G?Z>9Li5rS3j^8&]gni1l)Of5jB(A-e3jSF)MH+<h_BHg*Y9DQ/aD7r5l^S0*=H[!^sqEFd'JR
+%'XDkG)mKW^H)bkU=c/#g79Q!@E?\HSMCY/`\mnDCh;o6%Q,+lSHLZ2f2BK3:"m20PnU=)#"o#jmTVd$&"IF37MkjB`era"Ya1WYt
+%9WgfE&Hi>eo)L$2.N4R'pb'<pGXZW":^p=b\:U>GJQre,+DraZQ+dF9#u7bb?;W],n70_=3,iAa`p/F[9jjZ.X;F2V$T3YZ^OtWM
+%A>0_LRhD0u[#s%f$<B(UcDX9C6W1_S>;F&g"oP/"dRnuY>Y$[0F"\f)UT<_+7P8%=.VfA['=RH5&,o[TYqe!ol3&Ke_oErb&K7KS
+%pr[D(WqKsnMBG;7$)UNP%b;@0%Y,.eTLjl6;ECam(TpI]Oo7`+dp]W8D*oU^qm at 9l\UE3*#BJ,+Ks:cI7*$U,9tj#ROCDg>AobrB
+%+9slpl+Ik_oYLH"2EA%p4BX/I;u0/@kMjoB/V*&*>=1]:FlbPQEPX:2fVJtFZGZ,8R?rV9@(jW"Tifu-,q"CH"WBH5/3Y2uc*RM_
+%cFR!jV-Thtlg'"&_-&<N(uO(*U#IfDB:i:GW*tc"Lmg`2$gQH\F'bPrkVI3_l.nOL7%]$t%V9aR/n$t at 9k')V"]#boG&\amY?&Oq
+%?(0"5gQjG$gqF-8<gjd?e[LDn\3^mYj:F9.,.6fk23M\<+Mk5#]Ocqmc6kP?TNWHl>qiD.iCSbCQ=N``>O,C.!D/jk[1!@l5igN[
+%QF^>=/')!QKs6YG96,-g\h$]k,>5An-,3JeEefL>g:aO\A',"1QOZQ*EOra at mTX'L\O1`q3RNl8#U:Ls[NNibBD`TXWWkX`fl1SB
+%>9OnG**W>\Bj^1+&Ig69[H*[AH'#4S]cJUWU at Q#6EBOV)C#F+LkDGL#S(Cerg!D5-MP/7R^=qYe9Z[QGc,;8LFQtTOi=g?G87W'Z
+%eZ.K3"DI4;<eish at X3`i5\^K1Nfmri0ApRlaR1MJ3"W9UdY-,Ik7[t$6W)Y[Bi)otVrCW]c(1!FTP\E,oL)nFg#!%ZKc;ISpVu\(
+%U!b&d#8kT(nB6N]99SWer)](d\@@)Wk].9<^iT4bLL\XhCPgbk*^j8_&NhBLWU5SnWti[!#a41.Le0YA$F6)MQ)I(BY<X<Jr2V3C
+%o:A3)SSt?N?JVuO&Hf)?n1;Cm%AJghHJo(EfU at rKBa<2_b$b>:;H:Ye>'$<ii5MBnQ&=O;A&E&5LKAX`q?qjM2Aj&U_M5gi2;GjL
+%'EBMhaTA"E]`lSj2*]Sq5(osEBnZf?;u"`n4TG>;='p4?Ki`.TF`mBT(Vb3oXRI.9[@sg48?ZK3jnf"Ya;uG;03^KC-9[3ce)!<q
+%bNTI`LC:1.V]BG)M5XXZRh<\rm^5"++[7tY8\>7)bt`%JoO$?hS='iQFq&a#_0YS*?3'S#5Gk72WMEbqbhNIga#e9&KF3"ZgE:9[
+%f!"I!bj=c`XRSH!<F2FIbcT2aPS*=#Z(X;!0C,Z:TDch=00]D;nDEo at q=o#<I.d;:NjhK`NR*"P'CY`R*k!(>XP.d^1Udia-,Ig-
+%B>3lHQ\`a9Zi<+)APm11H?D7IT4A"qe6i1DF0 at e%=)N0*$9n(/p\`2>puhO_Iid\I\+ZH_H_#Zce0jaG:#h3\n.&.P5pl)E:ZK:S
+%nFfT:)fteo*<+KZ_qR#!#G9#j3e7O(`]Gl*2kIoK1P'JgiBcVq:/:9D at 2b1bLUVFFhjD;+s8#qWLMolE*WESg:>kN,lJ".H#G9#j
+%3e7O+`]Gl02kJ$Yro'L;*8^6dHF-+cCT$]9Msq3Mj'h-K#S6RnE"84e^EjP<ZtXpF"2+5DpB:Cq^+kE3Hg;`n,>[6)PrUtJ1u at lN
+%+(XjGTC'PQrYo5?aG]ku(SCZKg\4A`A-*;:c_(%:hSO!^A--\k1i>L.)c#FqR_U.Dj/nlf_bT7Zq"4l^bZct(2f8RWG5Ur+&+n1X
+%O2(RK-f4gsK3\AXGJF1"0qNdm]AN;DQi=Pa\GLuPqmeB8rQFYXr66SXmdKr3J,2D/dsq3YrF\@o_=t[caH+%'YPl<[rUE,PkC<EE
+%r7[3[a1L5RcL6)Z&,u8eqg\Ua^\E<Yc[Yj7s0_U7agE5ciSXUos6j(-5P\s,on2/q`fkYGCQCLRmsjm]+(u/)^&9>YjT#(?s8,+M
+%m9$\jJ*haa5Q8-AoDi\#:%*DsSQGg<5Q74?5Q'Ziig[[Hc[>VNrmlSn`Vb8lGfIcrI-fJ!p6i\fbn'I7]`/69oDe*R^[#)FjP%Z2
+%pXaoopO<+F^WCf\g2HeiTDJH"nq/%Z1[hW!hXIq&r7aI3)o)45n,*P8d!rdsIGar,2gO36Du at GtrkukVVYp$QJ"uu^DfD2dA,_HP
+%qO`9#f=q*Hj.B]SV4We:I=l=Mom;2QO8d7Ns-mqUmI=ceq1&:<5PQ?"K27!`c0"MuGCS at SqQASFrltK61Z.jAhW3N7J+%SDp#D[Y
+%qrqJbocO-jJ+elRm.'h!n<s=?.mNq$+90L at s/@r&Ef\!06U1+as6qt^o\gneL#;e'n,;j=^MEdh55MnJqn\p"jkp#`0DmohEVl[6
+%li5t4-h0%STD-+hoX0&4h1,6g?iJlrqjH4-J'Yn*afk[BhmS6C-h>["HL&oE(I.ouVgn[frk6X*k_[>%J,^%,oacQ0(AKCeq<D%r
+%qQ%C%+9'@\76U>rhtd**rgf[qrP[a:X4G&XQ!aPk]Cr;?qAWf=XoJ+hIdZIp5J at U(iEuM8?i9Bu%a/A>r9aHXr;@^djpSB*r3QFJ
+%Dh%aJI:41DpQM6L#JZ1 at r*A4X^2LnprG-m;s27Ppq at eAApOD_N54J*"s5G,LmGn5XrU7cJj'k1NXlITSkCk"*l$'ReO14H,s6pi>
+%pKPrck[RDI^\n[liF<u0V/>.7IGf&CqX;.Cq693Aq=o?r[rpWLE:'iXm5+dnTDefEqmmh?P2e7f#YCor`jB0kKOG6:;VpFbESFE[
+%Q'kWp-d()pY?S=$G&Cs]DFsB2W9L:Ll._ft;0U at Sm616\DnZH?#SKB at Q699B7.YsB7)AAN%GQF5QSTgM.dO^I]4Q52\+d-h'9sFQ
+%&XaLSR2HT>lHJ/^]heXm^[-CCmSA?2dl[U#G at 1BPYLQEUM>-6fJ,[?8]m]g:s)o<pH0q)AK^.f+UA)'6+T.j]oCbu[a++'Skf5bh
+%?UMDRq%k-#X/ME"riH_1r0O%iq>0QoH2O`CpYZ#95Q89Ep)6]`^Fh<t./mJGO<`[JrVBS[TC]1gBqbLIST!X&IpKLBUj_WS]_>24
+%+,'Y$AsCfX?i86b_suY!h7E.K(OpdR9ob^phY9%]^[j$7USR&NdEhg^k:k1t^OL[tqBnN)q_-I'H0r(jpU at p:Red4UrQemLIe.[^
+%II4GG^])IsTD[BGrq,`)oPenS_(##WT0L$\h/@`%p"t)o)rLM[mAE2GeXui:;Sb`Z5PrL9qif.>5Q's<IJ<U\I/;<!r;E8ejEe4c
+%LVc:Q?iTlPJ+M.2-VqMPMdQJ$hgY*?]5B3^PQ"'Zr6;GFci=!p?iT[=Ieade*:83eIbBh*j:<;,IeoC\q<.eRMbcS4I^<bXg@%S(
+%^Aii[huCM7]_S[J[$VgUX+0t!5UF'\UtJlJCX($%g9j#k6h!CqHK4P-g)EXNN%`[doT3"&L>)0Wi4nAU6AS$cQu_DFi3e[4^t0FO
+%6CjQQ"-kG at 6?=84dDWtHKn2i"'W=,)',)pm;DDPr at N6>kcn?oJ0U4<lpjUML02F)XmX]k$TW!Kr6opD0K%rbU^"?`NJKuX!Nr3/$
+%!Vg2u*G.$:JRflBOqXl4"g`g=e/$Cn7L,l]\"OK?*n_>i/5f#GTYmF>o*.*._UXl3AK@?tUh'QT(Od&@^@ad.5 at TpLjT,c=(%f[)
+%Om,AlIAHR2E#%o>,+PDj&79%jJr_[sY7PJ.@/Vh_k-2)\7sA&Cb];c46KANLl[-_DBH<a=K+#/kbYTJj[<'*2Ca"JU1cc%12N5A*
+%q_d?\^:/05](EGI)q>nP:=!P8dmJ$S1""kBm'%$/SXVH(-(%Lp6:#"ch>4Ea=mWqD\ECM5X+"%::=dZZoDE*45,ot9X(EW+WLB%9
+%6e/9Np&sHPAgYU]JblE,45gK04[72$No_-^r6fkNReJ;`T;;n4-M,`CI?U(FmE#Ak.&qu9kH!k5nr-RU2O^t&@aeIqSd=(]hO4[)
+%2jh-j9Q!%<Y<B.sf=o7.R_OaCWYqnZpeWSIgE01ga_?(bKs@&ad%@-S!Nl at i\9'r\Il?,PO/L1ko_?E8f>6/=ZLu67BD=&VhtAD[
+%o$7OGT;JB[c+pPF5 at 9q*mj6HD31YC,k(i4!HJ:qcID(n>-KF-3Ecs2Zl(X5NZcS4DG\9\<+UE7hU$-Vp;SJ,*"B;lm8X<[]"Y;-M
+%9pU4s/=F":'s?g/e5U*O::VpVE%1Y<X)QtCDMmkCP,1":Ya!"9b3hkf:(qQ5-:_'i9sKJqiAcs0FFT_&ST5'=WV!gcVodH#S#2GR
+%Qr8,U0-G8TXt2J&]cG at -IJNchVr%Cj_OJn=0nnreI!0*ob%^TXW`"1'AbXX;BKTu]UN#$M8`ldNdSff,q-huV6K-YgDTf"4l"ih4
+%0:=)X]r3OCN7ImSHo at Am2r7'HI%20IGn/<fnaaWJhEs:t.pA'6pP'_rZQ&HOmrkurO\0&33M/H/gZq'pT&pD0>ZF5eAs4%[F<Lle
+%45*o&A?ct%>bb!ZobI1ae!WUOh&C&+,'h:GQOD/>jm`SeaI,ur/+IeAVH)_7'69g60Gm37:kC-fjj_;c*u-b%n403s4%^48HK"@H
+%R9Y(]JiXC at qV9;<G8BajZ\]'N-pDl,R=H\i/m.=I0U)F(a-ro^,:Aq<!KT at aEWH1ln2QF*`M`K(,WUgJNRg0iR9J#I]q7KtC^;-Y
+%^jgR8Q0;H:_nRr*k?e@'TX-mf2$uCo"Ce17(:O0]#D\3O2c;aL9$ke7Zn"bk!r>:p*&)Dh-\@8=Z(n*&b]"k.7ApJG]fH)9K`8m$
+%JHJ8;$+.fOTS<O[M+^5)`4E!QJQbCj\>>=LAu60DQ7c0%!4a"_`^gJoII!LD'**<_7Z$+ur[S3Ya8Z2_s/2oZ]Pd>/M5/c8+V'KO
+%p^^QAaL9K,d`.G^hY3DufiS2\FShK.Bgg9agG#;b`AX?VJ#[e9\aW=0T_r`)Oh,/ZRFSCnp*(&31"p[p^AFKJQ'ReIe*3k#RCOF+
+%GiiA0Z1O004a:4=FEOBmK<RlQFX_km,69ocE#Ae0-!R/l^3mI>)n8EE+dYu]g+!q3>g));:fD<&=&DMZEKo-9?I4DK^*dK_-'&]Q
+%NW2k$Aelpn;Yu._^F0c4rLO<_GF@>aQSgLPS#qQb<\p at Q&R3.&c$`H:]&/.gW8)XfBjss-#:h1D:2rt]*e;aklH)jne/YF:(`[QS
+%RkoW=l'uR:g+r#hL>I^q>:P9&@_g^]Qc"X5$F__*CVPNSF%9b(7m[6[b4taZ'N&&1'8u0iPurHuWc<Oa at Zi@PhUqY_FS:*>^VPcl
+%2RrjskP9-Q5"s30PIj!"&tGccg`.odcVdtpkE\;P]fVh$*oUsI)N:Sc.\a`1Q.FGrhQ!_*2\Mm`h5d[+g28)lU/OS]3,,AOShj%5
+%B?Q(pBJr)>r<cm4JX1jgGC-l at g(@"uE<pEY8)?>aef3JS`K/'kP-S at R4MC+m([7K'l1DgN+i<.,OA,*`=_25!R4g(Y`H8a3EJkYh
+%G5W0OEqma1e.^]_Kc5fmCf(%@nmJU.[r\DRAusZIF5(o84*)T+-B_kB_(hfWcM+-`6AIb:24GYYO-b!JG*#qs]q8(&h.Q3"3d3b\
+%8*<-qqM6QB.Va//Rc7'1j-0"2%Z+n?+Y'K?8[W_(H9Ror<,QKLn?rHQQFM_ZP4=s97VQX/=C^PmA`TaZ at lP9@'g1RGMds<g4\QML
+%pQOi]it,BmUV>f7<puMe`g2]rMo40S]o/7l=%9CG\\qjL at VKFi[3g3+>ZY9$9-W(t'l at Q&Du\s.E[H9_Ee`'@akd/4G#9^T:!b2%
+%&02`jCBRpNFe-=I^@"0YQHB.$F2chXmb!c=\UWrErJ9?sFUf#@[;X6<^(]n[^\?=B\&R;9[c)H0cI%W4`nBgq+7DYu2Nm1Y\qrYj
+%n"lZ3p^_i[ZGDhf%'Yn.mRaao/=Lp,WIX:<K:ae_/<AZcpa?fnIIZ at 6[gsK6L%FgF:J`V;'E%BQou*R?O1XSIJ,[<303LCh9*E#c
+%3BE>SIJje!2jHIj/d$isjTCP/iVr]8R>n7Bj9mgbc;X2gCj'qZ1bWK%g-DQB]KLTj]="egZe^8X at bEnq5-Q(na)a8K;Q5'gEZM<j
+%!_fqW&,nuR%=#F=`?'R8AjVu4&CDI"b2(ms=gF7nJpUC6s!0Up4YLRnk@;10b$eCP$X"_JA2aJcH4KKsSM(RAZjK$b9Fp_`%OU@[
+%<Q+V at lnFhl2:WCOG*\'q6j`63):(CFBQ`ohCGqf^o0leO\^0qH.UZE4jQD8eq($Ud`qI$NC&29q4$E*,a-3E&7qq_/TmUg$Zq-PY
+%E`.1m3?RPl>7SQN6g]W9$t`!;2$97tS5.)%fC_agF7RfEo'B!:WSm1+cq.WK4FtjN,)d?cZ%j-ol8Mp1m^93V9ELKo?`->QnSfA;
+%`rU+X+:*Uc%B-cd#?t:(Zo?H-fBjGFFtWV]c78jNGP:,]$B?`XOn]Bi#HMZ+,-I\R)>Im=nOFG:=U5T?0 at 0Ll10OqW8#`tE50"nu
+%b;oI=<t[[(8$B-+nT3Fp*Xf*a9Q/gV9ZC_'e9S+bp3:R88RA?&F3Cr1XbMj>b&8=PAs;h_Jd0'mIlomtH_C^o2]X!4/FuCRVN\*g
+%$Zufs#-<d?f&MLVp<+Cl/2)!;<gJSkg;5XY_=`^?lZ3[+pB"ls9G^4*q.[eoM#$,f8Oa-nX+Om3H!kdRdaZfKlAPS54InW.hgMf>
+%X8mb2JoSLucVJK(cGo+cR(ini)c-3?j68>&K4VBEZVtqPBG&R'b at I#)\Xaefdr\I_9f^A]DZdVh>E"`%,kZ%1>0bVUQ2?8RHg,pB
+%((%fq_soRc`qWC5`fI,ScI8PFe6.h_Tg.hTKAJ\^54t_Y]\U[\WB(bY+$GlRg(O)=7$i;M?s7ho!tS_T"((,oi5nhCPF$<HTc]0R
+%JM[+/Y+*3W%Im%X][@?1BS]`"h2ZX*1t^bM[?*;*GZ$c_SHIaZ".n!QpEIJ4*q'oMN"GLH<7+A.(HQu5\=Zhqb*R at A"c[<?JCA<Z
+%pM+.4c!=F(6>-&o_:*?9j'`XnQKqJm0<)s9=k>-H9([V8U)<dtq"XIA\BL.iHTt8clhSp33iP?=9k:G$i at 2bd372A3p59saaf2AH
+%berT-jCSTCRAq/I*iE:]3\TLf2s6WR<@5XcmmpO*[J>'U*07afj+E!;o[6KXIoC7`HTF$$%RhtS?W418&EO8%1jZe1`OMgJplW1c
+%2.(7<;rd0aXh(4B9o&7#pDt<%qG<o3gWNT2'Dd_.h]ljfeoL)d4T&f8WcL/NF?8h#fW/>k]"Qbl[KBI:Ho_)q.X=3a79B==UD`Z"
+%RN[IE-i*8gma^i2Hf]!i at 9_$8fTN?%ThMC%n<cIoEBn#;l`Ek?lcs6lEK2Ia4lc>AcM0'e887X+&*^.BEMZpiC_tbE&6ITYn12$4
+%cd%SI,Yr,8q5UXo?(tV33?)=_Jq&:D/A^Nq(/g)d at Y#VI2]*X@(fCYMJq.1/KBh!C'XbbCa"qj4ePG8i8Ki-HhcE4+hH_dTZtE[d
+%?C=H%bbiO%^R&LU]p^paY"m.%a8#f):%m"n\28KAEH5.+BXuIq.=HVm^7:.[=TYc!DQjL><h8Osj(49I@*hp/RDFZugG2cM<O)\l
+%;.A%7]imX*-Bk0>V0ciLC at A5U;T[bXlgACl*V+[P'^ks65!Crn]^Y>9cS+scqQct;024Cb=3W\k)g8gZIa+^#R%d+%UZZ>hOVaj!
+%VBNIlP^V"glccHT:gbGaL'#>01*)qH+^dn'IU<pio'k?.o&=T^0/`YG*Qi%`_7_D8X*>&f%TPbPLZ%2cMK6<!REWMuF4P=[/r):%
+%-T]`_iJuABNfT:]%>BVVeT&+qC91XGUSW/b=Y-m1/luSqnEPVrjil5A;rt-tECr\alLIceDa#M/0Q['O-FUV)B1f^_j&J_NX7OW]
+%e'tum?7]a\$En^KCI at Bt*0-;FNMK!NbfKV$f)b'!\\Mk#7Z)Qu8?,8p>r%2!WfiTF(KcAIW%&[`Ote!HOBB/NMl!;9#4[5JJ@])E
+%ni2`;KFm;SWNB)G>lr3F"0b2)"I;Uai3SCQ%1acr.h3#Po*&ZEpN at qI%>cTV`R[7AUhm_3`-:X!HLg_"S'gH;n*gj*N=l5?qaqj3
+%'7A9miXa\VH?P5Di8uPJjXY,O>fGa*Q^V- at PYNi%e]C6D\"YH`F"<"=]YgUI7'GD>m#(K0d*iF5TuC\#cd=t?$hhcmm>;_VEn0(i
+%8U,8>=ao at F_>Wogfd,$u[4bEom$OKYBMWBmAWBH3>3+!$d!8`hrIpEJA<JR3W?Q*GTLdl3+$Gjb(<^t);YfB7IX:oP#bg`rDcF^E
+%2SK^[IW\A,onn;!3XF4VLdJ7Fq3QD!`tndeZ%W&tleS$X02+5DMbVRGI/o+2D-T^,5Lp`>VBjKi>F>t3HZtJR+]GYB/Rhh$i9M;E
+%&mKfe.c)'c^(#,/<Up#!@q\[ESpB>sbC2:>a\F<"'R6RO$4^10PX5P]F!N4]TqVj/76+faQ("IJ[ssW;-D2PW'<8C'fS(b(l#N^P
+%<&"i\Q]mLj>t[.VjX\^a+5RE+?gG(V6q&1(obagq_AV,7kh],>\/J_J+%IY.V&CD*Mh4pahK0?C.53&nVWsX\1_*=8=]SP;\s7%4
+%1">^=qHrGR3d>Z\$R&Z]A+(b;%kGX:;%FK=G,XRRP_WC/`"l=!Ql]iA%7dVK>cU.a/7FRCge'%6-rY7;^947neTU;+an[_c:ops2
+%)BOPTjR-iU/mu,bW>0!?a1NZ^;EpO$Udd!sV%jGi'6T,&Zh^38<D]SHN['C]%<<bK5olsTWhTo!WN)m<$H$,A>*%V2.?=75\RqLh
+%=e'WDd%.>>S^5V/<i?GQr<^_@,06!CkMtacl-i4D/?-ep4[uehKqgjGBqrLkom+Mc.3lC`A_WCZk/m6T/Z9#YNHga at 2C`fCTj"M.
+%:bjP$eZM9L%_^ug"Xd7DfohTq$l'*g/8"HfG<Ys$Q at 8f=ZTLob&QdP'W4XuL4#7XM!ub+^WVQ&?Xp6[7#G<VPWoqOUE2T3@>7dc#
+%%Mb&#oaL:1HMcmS"Y:uP#YO1ZfCjRUTp3l.G%-n6]gpL5?``=%?!S%>m_+u8VrPZ0nRSK$Ejn`KDK2cWK6)8q#WtAlB<-&NXFl=H
+%5tq=+,_;Z&$50g1,.RIEq-8qAB`tS07]lfcf\=Z08o$J2Hgbi#Xi?kC]iBm>g8]U-C<K=1\lB?@??->(.]"fUEo*Fe\qet=IX>u`
+%mol<,odUp;MSh;Y#:.%[\GtR\?oA$bs27b488:"mi>cdDTnhg;`PQs\=cQ8,X7pWnZG:Zs;tV=oIY)ggN"a^)#Nq;'laRX)dMmDZ
+%dmW.nRu5tBJbheb)/km9jciZk:&k!92GUEML6R9,S]Lc-GB5SB7ik%1j>][+g/"oPc2#'Km/65LoOt\p]Gu4ViKe at i@n5(QSuO!.
+%_soMb`3"JMb%9[EP[;(SH"k\`@pc]NV3/ouE4tVu7`]@tBC!=eL77+g>FM[=QJS\?A/d&NBPn%XE&7d"6`q$2Pr'KFj$HOSgr5G#
+%SW^&#06Ih:Xib17co]]hl""t'AoJ+Y#FLR9q:SBW_.bT0S7XNr+SOtu:s"PWGK at U-c/2\&\p:.fnEnomr%srsD^S1l03rq1 at fUIS
+%!P^\90F2q$hXGqQo>fasJ,`=]GCmIl4.T&VM&Yph*"Cs(b-`VI"eI$M&&Am`5#$(40416;cT=)I,$n!`Bt@!frPI\rOL;'4VB;qs
+%:Ed-u'qs]'&9?IpGUG!fQb(;t4Iqp=`=_JOQ!-_I$Kk'Qp'ACG<Q3JBMZh>u@*ZE<^@&d at JT.Qr!k$d$:)?\qd[6Gn^/Ita-(Vc'
+%DDA4lFUrqIqq6jSaq;4pg0DAj/.ZD4WU#TS.0hl!hacq<$LU/3WNlN7WcE0KW>ZtEg#sk):UMr=Q!8sCb+rJ*il=M)]lE`.e*7Pr
+%Lgb;qr8k)YMog59j]Y9=U]&mAI$F&NiI6KK.o?5>SPnHG\A,=n[9%)m]VnsqgY%JE/'6.NeI4TB&#?Qe`<^!eM8b`jmC at Z+V8V5I
+%Id*\g59>Z4@,]WUM^R2!2'iG;AkQin%b%37KD?@.\ujH,GX>Xa*m8q9X`[i#DI8]@]AF@(5;o%L&d/Nd"0Ua2o7$$PoB!e>R3-aM
+%fjm#8Lc;g*?#.htFY1+,iIe3r3Ft%I02!<(>)TsKZkbhRYLhlVKg>qI0]i17,(!bj6FJj;oP>B"[3sOL$qd,M;>"CGH9OWE'O<',
+%Sf3,W&'gMSk=b7e557>@*(tSg;iF2j.M88QoNo*gBrb,M*QG!XEb6-rD6X#mGYmHER>_qNfI9!]Y5#5:eQHqVC]eS3pMQQUB9p3S
+%)Y'pHM=2HZi66<n,rEYo2kHk-&)B<<-HU@/+jaJbR>tZ]VOoGA/@rX?L(["1d\FqZ9_LUhYC%\;hQ[c&>EuO?\k)#1;K)7[SY*_I
+%Vl at M&EH>3H#NbZq\J4H%Kf;\tV%YAh*S8-/d![2F1hW'SjO78_\2U!'"1,skR:b)E#TW$/_BJ8'\1U@>kN^J_?\f,S([528HFYu4
+%@I+Rdd?MZP#O(XWDrkPE:[ZPa;lu at P<GTR/pMWFY9e?62Q@;=1pPCFR5@)S at I0-mak`b`8q:6MJ>Ff$M_"7E5-i5I`[71HC:bJ0p
+%O>b[fhPl0*57\\o0M2STJXO)L0W4>Jl[.e[a?:t4)@^?k7:$PS!K2=8m:F']*eY6aJu!c*9+s7?6</oi^_G1X&_)Gl4`2]H6:?^u
+%6+m]J#F%e(/Z'@=3N]:<Yq8\4.8`Q3dF)JSODXe=k)uNJ5f,J`L)hBrScDs2#@SGS?4]R.!mb9Z,g^*2A-<X@(ZNLbk*Jp?`>5.V
+%#*aKhT6V<S-rS$i((CCN1k]GZb,?dn>\pZq%RLKm..i7t`g-]@W\t6LitdWA.`H(7MJ.f6a!_nF at Dpu2,tt\u+BC<akSN2hLuM<Z
+%Z.#;<b*EAAGY6a7e)1&LHC,b+U-Lrj/Ku-f=b.etcSC$)/kjS4mMBK,J[%0nbPVDmCI;4Vh(@u<q+D82"[,k<J\/-p*bJS&0u6oO
+%p=Y#m851*UCRI^SO?XN5QAO[f]!*?":k08.39/]/U=^nbO[9lH[_]8861gCTE<O3WCbuYA3\X#DOgBA$;tig4d75u-V[Qaqb/o5:
+%$^`Cg5@^.u8'eX#GdN5jc1TGnp-c"tO$D9CA*:tGl/Z!Y*01^cp8!N*1ql6\!K4W]7p'Q#?>"li++902V-8in%/ta(Y#[%OK.$C?
+%0@!>dcOUf7\%V.kpLhnS^q)IIo8e\%l]:P]O798M$'\*7j'B's@!fAg[dj*Q+k4Y]FO.$OO2b:/#PQ7LncJ:-$,ZZYU6t$!a/\L$
+%#t!&"psF0PP.9pCqFo>ErKFekl-TTX/Tps%p\86[.s<1hpUTDL$EP"oeL1YA3\\B*R&O9nF6]&QP3NW2<1/K$gqMCaKO1K@>]pG1
+%U2i7[,%rkd%8<oK"0)Zk6i`0I!s=udL&EUMK/c2GD?UaXEd?ZM:CJJc$qB;k2(82,![(D..0W)."]3]jCIs/s&TUWu3)bkR(-"Dl
+%]#e<Gb+%_hR3.`nb[:lZ_Rb&=<"`'*d_Zp$UuZ!2S5Qm=@H54m^BV[_4;OUq!1sE-TI24CAK"3PCGM0U66nM?:*Ee/6h>/SP_)u@
+%E"MgG'Ja?r at U"snb7J1lM'AAi?ajG1.0qe58Z6KPYe$T<OXYI\Kf*s/o at N?m&(dKf<otTk(=klbFGU?\Ji-K&d_Zp$jQf^Sf$kJ2
+%9VmG#:as7=WEa4DL45O_$YuCj'PR)D(6rkCQ#SmNdCQVgX2j6-=iMu5159cT46$7;:U(qN/!fRAd\u)-RBOU[r6<`'%G&$r>*Yo$
+%W"J?aEg=PE$#?S6Y/VA=R^F0tMDKk(X]W2,!4;iCa1BCRa/qU8nl'6c[jog<RX/#1Gq/c9._3o*"rB>pi>>5q6Gs]femITZ;J+\!
+%Rb3oeEkTb$c`WsQ.LiJA9)iA!"Of"N&[WU[UVYD!:o^Kk82F:5HqFDPWa[fXVG(Y6)SpBP#g3tS9;qbTMce@,iI!@heB:Z[;&*7k
+%OHC_e&XF/A,ud;SX))[[Ogtb:6!:bM%BQP\a\"D_A^(ioVUE8KW:Y]M)OkaYfmX<c3WsYWd6J6[:_I6X-5Js`c.GDiN"ihg[pr>Q
+%$VI at L6Anr#a9GU3 at 6dsp;H/>c%:l8*[:<,O$VRFU4PmAVOT^]#\^JReq*kiPb[<]%L$?0K0Xkri#g44E6>*`t7BSKai/"<kat0W&
+%P`b/bk5pL_F2>_^W!k=m/lYaeMDCG$ejQ?BQY;Hl&XKCQYU1j]/fF*\RuQ)q%2-M[*TPqLq:FmT?I;,fKcX]ig-_s9LY)qs'_';A
+%15O(P)H[Z<<*[Y;,[dt^q;j&Xkp6K5E$Ass*OtW>-*jq8ck+M=SO0'$`WBVIQA1gH`1f!PNGZjAPq550O<N;O.IpJI/ePD;Sn>Zr
+%VWAhWKf+"[DeNVFL8$oolS]CY'h#Jq8MBu,=E,g1p9V(P^,ck$ZA[f7?V=og/P4G;K)<crSo[LQhD(0Z*(P6b[s_'Odnq3r[F4HD
+%78=rs_.Z3iNQR>,M]5Qom6#k at U8"n)j^CL]7\*1o;n!*'lL17ZSDq+E2n/DLQt%S5Y]ZmdP]n[?a3Y at n5q&Y73e-F[9]]\K>EO(j
+%.\m!#UirLJ:HmKH^"EiF*[;i5I at fa2YnF/Z,nTW5#hq?.WG,2DX%Zt at l9.g+ZMVcmaMW`BbT*kuS[qfTVf'W65gk^Wf\C:$:#aH]
+%Tcb4eLC/:MY*VldEC8#(aoQ;-do!]q.Tk`1igNt:^af2uMIMj'TF#>Q\IhGf$[_ghdP.q0XPHYM%B4=q8VQfuI:tA\eNfR<Ef&dk
+%@^S!%:/1l-E\f<Q)`f[qF0hn_k1$N%ETer@>5"cXbrEL4_gZ6gnidF#-X90;9PPU;6=OC'a7s)A?*C2JH_FkQ1u,>aq\3_TKO]BA
+%Q)QUE-7\+9^)!""?&?L2.LiJ98kIiM;X%7Zl)u4&WkBak;Rt4rcIEsqTT4&TZHL(=%P2Q5M5a\_UCGA";l]t'PtO&Ic9cZn'p,q&
+%]6%9%^kE*&\^[!$X&fG[e-h8prESu7A;m^M<:qG84!@Gle2i`2H.^Jp8WGQn?Oq5CQ?lEVNR#L"C-I at 8^-nX?0oM=S1@*+1!BPKC
+%8ZZq\Z[25:,HVM)+<pHE-#las5IA!&7VYd)m:riMe3;O%L+Y%$gtesV0UdWV>+"UcDF.EVd(QgX<SrP6-b+a'Nha;!OU20:_.YDo
+%3%Yq*Wp1ulB^ohO]1g->;9>Uj$*r;KU',"76Pm`t14;;K7%Aml3`tUtZ9r*gln044$sL]*YDp-?)&Eo4>hIDW3TIt8/CGMseA?f`
+%G-ka\^mi#ig'l]^8CNFf#\,rlZ_JP<@CuZ-obbJ8&SBd:,<^qN"Ibm@>c<Gu:tQJ+4L6>-\1m*A.c=_=9K;D6)P7,<D+"j"pt at 36
+%G,/u]#iqXT:&,8\<0N`0FV9E9`hEfBk`?i8Ho[R3_hlVeYnIH`.'g\E+[Xul=K154S@/fr,7($)+9L\,_Pi.l)P7+Qg+]`d4*n-!
+%:"[&Dk^aHO%Qdjj#D#7RT$GW<M at 7V[0ak_uF5!R*7k8?&bYBP/%2aqEG[>;Y-BQXpGMqdkK'M9_ks[OT],Ba>6O2`p;Ob6tYbm%g
+%Y,?CA#M2Y?LB]?.JK8Yb[$tP*JU`*=#SZ1_=]p4mh at Uo2L\@CP_M1^YNe8.B?\8p_HP=tJ+pHL06P-;KM8oG0.Tac[#rI#f^^<[C
+%2+lp^IG+s`S>FQK,%hA3L.N*?@&+RXl4"E0mAt7Oj]^]pTGNO=SbF$<Ym.B9YmO3Rq='b=KH-8+4-`*VR8bq>VUE6e<'E!^f>\%7
+%9)WSf$hTQgkUbEl(-*n;WETOIlB_(G/^r]+gj+6>8?A,g0Q'j+h3L*S'Z7'M\l#=SK"jlOF at -mu3_]S[26=VcjX)!#f2Y'l?EW1s
+%ePXRIh2^"UK[an^]+H.MK=Daf;V]TEKSDR*Q#`?LNqL+0G.(DU2Xb*fcOjsa0'3m&B+#I?4\#uog1]2 at .FXCSc%^S7d1r^iL&'M4
+%8$+!OVB%u</?"(rL\+-tF((pTf!#Z>lngb[G3nc2Zm%lt\M#a1C(c at 9%WZlbqN*$I(.&YV2K;2/Z.]7Gm^fJMQ'lGsGQpGkN)dXp
+%kH'8MI#aV&gYha1)6:jeW=q0M?.)4hN&mk0qO#7=OA)?V5m>IqH4_'&q)ARWEO;5gZ- at I5E0/&C/Vo at F'K6d1:Xf_nc/[a<%4OGN
+%)3!f\"fT`G!aGld-Z4k3+qC2[#O>J'+7P)3%MDWP8(]kg'O;t:ilL^ijj4gaGj3+>:5nim+HV0a0p\B?qc`Y0(`kJJ[H3nhA2)&0
+%JnT;f_JC1Ek.Z4XWm2 at shrs.!2HF.aaU"#!;TYA8Gmu$OaG8g_EnU\e8H?DAV7kRa&k*[KU_q#u'rRE=/1ck(6?Ii)Q-;Z!K0^2l
+%cbUk35KPj_+X7`MTuaO9/EI(5O[%&e;]IH:%H'BV^K'N&g"2rgLFQCBE4="Wd^UstBEs*.'hJ-jIZM*HF>T3t&<!%Pq]0AS%o#>P
+%me_Dn70]uOQ<9!YM*k8T/"@e[.^?uV*m?kb,EOFR;'XYPG&*mC(<=&E^3U/\b;f&P.RDGm;Y6bSUgao/KT^<0RW(AWMUn),9aDc0
+%-Z`%hFX9kRGmgY]Ti3Ra]X+'\Le9tU<!q&E,q)\E)Pb.#aeGNb'0+i$q"=bo_2+,mPQ6LFi1[=];7X_K,r at l"2M'K^V[tMUiVBoO
+%.QNWCl*Vs-_hr:cVj8LI(5e#`$@GiBFM_&[-@"/_%)5Y07hm$b20Ukea66Df_$u[7?`#UPl`'OLE4jiE.r![/1,c^uW0/bgf6gf.
+%QHtm5VXVbIaMJkX[d\V[AeUH*4>8 at gM99G6mI`;tm#"VKN`Eg4di:%CFV(;aMO_]e#ur^;Nf]A*d9;@HdNj!nnId<XBMg9("b\jR
+%FKDpL+IQEI70=DV`tCgC<\,ks.e6]:NaV.1B()m^-FsI4H9GqC7j>H:FX1'l*=:;iNXV2Sl[etG<5oYP`pGR<[lEFB43r1OVNOI:
+%<&VAGoI*A.8;&uQ at i&0;V:rV@[S)>a(EaAn,Oc>AFq5-P0cmt43"4?RHY6,G9M<jO:fmZiWg5`sR6>DGBE2k#:jDRpGW3ru9.Ncs
+%hIncK;1\D#'ifB`=;`hqBod6`[^QP'eEJLY_dZ%fOa=)L`rI(sM+F+KoiO:K^kX<)nX5UG\TXPJ$>\96jNnL>Oar6+Z$t>""ILck
+%_bR^30;2&B][)ZR.fs\`kma\V!0^OTr^c[6'iRIB<e%IS6p=Shf5_<CZtsRipEEYZ-l5IVZrmu_$s99>iSjudX58iJEu:EPhRU]*
+%4r&Xbb##eD-!-!>U9E10fn7LjG\Ib$(Oc>t/o9ag*&mDLBpbNFO]iU$oa at MJ_\_f\E^LU^h,K]0#[kN'%:,?BOVd8/*nMcD#O,7+
+%U3_",rFOK+cdR&eBl:U/k<02oZQ;,0oaNHo]\[.Hcfoc"a82sE'#n_?$%-+AKk+Vu5C#or"Qha)bT%]+F);n/NXm!YF'\hb'TD*\
+%U_ZE=pegs,Yi1iq@(u[ca^,+#B.-jl3%P%c%O2F)U.)ln2/WQJ>qcL/7#$&HC_,T1"VU+F`di:[37i)DZI>6GDVQ'o`^Fl5GUJKA
+%@;XjWGJkE@/nC\@irZgun!\TD+pj(JB#%N0 at C\)gZ/7Q[AA+2K*r'\I(/"ROguFhA#Q"F"^fH9b'O2+u-JW;jmB#3+;%Y:e?r.1S
+%WjO at h;2QF=J.s#QHh--MSDLR/V1'&]8?I<<$[>LO$YO/iHAuu4j>*+/ZtiHe(bRG"eA4P$U_kAZ<?;@hb+[')7;-TOc>p2D_M&G)
+%R,_0m[,K"&*/rCa)@WfG]-]C*<O^_FZ?*pNU5IF&8K!=7[j"ZI&W?jImQM>>R4;V#N541#A6BKV(N<mblXlB46KM74+c-Qn7(++/
+%MCoMUETHqp3]Yfk*uWf].#mNe2aHE#D\asAkeI74]^"E4E3O at kU_X_(=PuOCW,3:NBe8bH_?(5t/F^H_^l<,9S:cqb=O8`rFiI6I
+%2p1k^[2U]jEHB\=(H-ADcMf5ln0!Z>4:!O?5+j^<^me8MFBqDI3_<_Ta--X.npMV2I)!^L16C8/-dp9LioZGXN`[MpCOjHIop3OB
+%&qG2mROj;5p6cFY)IK\CNQH*"k5<7m!/?O)rMA!uYH>cOT_7Bo%m+_%\c^R>on3!s$R!nhH&j?'BV09q:<lS0G0Ekf:3Wqm_mB49
+%_:m:%P:A)?6WC>hSLL>e(PK:.2&ZDLjN<mV!:05oM(rkAZK>iAY"oBq\OM^)p?h7e.NX7o:i<eVD>c0#8]2oU#-i],AI'P(!H8$/
+%j&4Che`rOGO:NVM>Zj%\?=@tOOVik('lV]u>$AOt=7FL3=QOcR4Y6eu68ac)L1(f?l0J-!Nso'.^$KN[JUj:>"ChG%#hRA(<lF8R
+%4TOG=9d+$&!eY!rX2_BVT&p"o<BsY?\6nua1Y1?6%j at W0SLM?j<EN[/M=hm#o.rW[h29ULZo3fGWtsb7X,mse_7Bjo.NK1$hOosX
+%-VLJYo!"ei$_;K&:#.:d;n&!OM<T7bdGd9q6G0>D%*$F`LnMtFJ[knb0ifHJEb7#Q1D>AnUhc9QOQKt=#NcY8l;k`iQk7E"CDA1P
+%&3>k/Mja.Gl'R2 at hL"ClXg,%;2R at +gqE(j7Qr""5ZM'.jrOgk[DnAN6rZI(CL08k4JQFKB-lPKYa</cg.Ssi,A0KUjkn<bQ^'?9u
+%8'IJIU51(I`3tg08JB\lN-cE\0RDQ at eF+VNSg$W?Z/f(6"eI2=S0/!V$IYs\aM,-DRiLSgN,T&5dkLsqH:Kthf@)q-f5]us2e2Df
+%oJJbA^A/)0As9nI<^HDZjc,is9^]`^4'sPN?R_=ZV[b%7*KJPDEf(.l=HG&Hg2rS,mFW_Bb]F+KgWETWgR.7BV+$]_+p7E4V])?g
+%fp2ZA-V%<O?bLVrb^^-Z11+9%NTT4]8#$7YqHP=e#I+Jml\%JV&m*HtY<X>oQUN-Y.VQ3)-5n&2f/dHFU[DPP9d3</EJr+m4NeXI
+%6"YK'PnK(Ie.;adUMakh_U;"a19M@(fUQ6I)l8q\LoV5S4^us;MN*440m$S:);Hk/%ZmZVa-g3<\aEI2?^K0%&Zf*>0qV,o()9\X
+%&FNN)5b[$VG>O!i(;m4_7[PbsMl961<gZdD7p'7',8;bep!h'cDuhA-^gR_??/dU\Bcr=S5gfXkCG1L2LpCo#DfRO?g>S'`&r'*C
+%'%m:t\'7SP_[t,p8HZ1\_(=%gBEQ^&(jJ_#[H*_*dP;OU,F2mWU(/lh3G%K1'n at P7,RqP8a"nKF$_D5-4r&ul>L(TR/?-qAbCImb
+%;kB!^(dpA,B`L%"4Y="sSBn^k:pdpl*ASY7%]Rd$]8^7oU6&2#[@?To3b"B/2G??gPb,H*8i)\#I]'+8E[FcV8.jAolZZQlKs1 at Z
+%e4 at 9RI)ff^BVai:da-ksgcZfY#!O6Dp7/K/qiH^@8!?o:+q/4kG3^Hs=qPok.,d<6K^DG at _JY,1Y_VNZ at 2/Bo:hMf)pJ8[&j83^u
+%C<U^M=Jb-oEDK\j_$\=0,X#Stgs at N.8:siO7rR<^j`uClXGPNRhS::me?^pD#lo-B]cs8b'k+R;$=!9 at KH5JM7*bt,#e;smpb#-3
+%ld]ru[Y_AD_l.a`BR>4DG.Bl.g>;_[)]t/=4:`FC5a&hEO]ARfqXs<)i)qnW`8%K at I!"[=8LNHPa?-Uc$hS9Agl_0!G044Q0mEa5
+%dp:Mekj12YW9a^8P[dKV%\ZWbK8.<)<nCP"$QQan.(d7:W`K8>qKMbr\41D7euQA^P,uPq%dkLUd3mt+'nAXf(qKkA-D5&3!qPO4
+%Z[2QsqGm at p13L[gM=gJLSfq/R&<*aY"f4Z5<$W"ah#!J3!$&R8-Pp2l]b213?]fq<Uqu2;]N+M4<+_A^pQUmn_hsnhVlXDH<m3/M
+%hhm4#<B#/AFEN^GcdMRL&qUDJE3oXSa5p;FKQGNFK\^2FB;3)^&7"PtUG0XB+oscGI5rbd5]nV#4>:\25TgELTaN]tB1'.S-.&Vt
+%dJssu+RL)?gLpimCQCIneIFhg%@YbGGGC</NAPC_HK_lB1.[n,T]jCE.+G\_TX(`PI3#etlF;Jn*cFUO',=$q9sVK>bE/NG`/biL
+%G*JqS<0[.s]u=7CI'<p%44_^;'_Xom,/m&2<tIX;M'&lIJ<#!7BI*\$%M7TJmsSaK7,"kg>AAP85Xj$PJSmZq0cb5DHHE//U^c'[
+%)AdXl:+inOXYbfNGG>n9>RI8ACs'J>mNG&_7.%@)IltGpX?;YJ_nP4>O&2s1[@:F_g:n9ONX:=8Mi]Hc(Ell$.+^[aGal$`XH6UK
+%'RId)L3Ic%VP]Xu+;':/=?@kmQ<KdQm8uHa;\NLD<li(2#$*P2DS6e(kaP;j[='p\SL9K<Vs33\_qA`ZQ!+hfiP:0dE(Iuu6]TG_
+%0)golYl#.6"NNq0h&J#-X*6(QlJnp)b]YM,'S&OU)#2Al``0,E]%'Hc'rKc`r5QNggp$--GrM9V9:+[9il,4`TQ0>STS%bDVUtE(
+%AD3/r`n;lH%ZocL]cLj$)8E*MTA-5gTa<po)eQ=EFEH=g=JNZVY`cBEngagSZn.4GfHLfE7Os?@X:Rm(+V%ee$J$U8JTpT"-4n!D
+%"Hidi"B&bO"VOf@,UtTW-):lVQ37h`<@?:":R;2-X,ojV,kW4j at D!4a%lAPN3Q)-AD^Itd#&GCq?K16D at uJ3ZkIr@WUI*r<0;6M0
+%JC4_]6K%0H!MohZ\%uP3$a%Tc#Xg(+*\`0J_%uW8W;Ju?=O at 0R(uN2O:kb_]6`6Y)bSF\7<(.k/iZ_i[kLH)YUWoFW&'EmRJ6E0H
+%.Tp)Ji3lo(-\F6d"`_O.EQ2#<N!hC[:kb_]6`3 at V&>qn.79/ERau@`Z=-up%9m"T8;4Ko^Y^Qd24G!5L1Y`/2?AA(mPbYm[,2p/E
+%$V at Z7'eG)hoTWAadXV=kQsZRO&O8ifS59kk)nk=DSOpcI"X&dKoZ:c6g@=[Z?]!3K#<a6@!;=BH83?\/cjN+]=?eRCcm at +>a5B]Z
+%Z=dc*=;Fj:rJFg6)IW9;D!B&IE"Id6YBaH&<Md%uY%g%3fh$V\]ZqAa[1>/X?Yhl!#h*TEiC)k&]a#p[SEGc-(R?^'=Lk58<@(#t
+%jM01j6g?(?>;@DaOqFZC)>iNYZ!UWhXsb/L-,91_<=c(YpFql"XUd,R_M3?'c1Mc)"ljS4ju:)]`1:k?%$\*FG9e.QjVBar@)BIT
+%,GBjsSEi[I$d8D?mM=FY*-2;tkM:bMdYWWK(=24F72AR6T%5,]J9 at q7+/joKVf?Yq;N:Qn[Vt](DT?sgFFdI2R/[ME_BC]n3,=&<
+%e%QU0n+]ZQ>/\/83oRl[`poa;Xpd4Dbch\H2-rM("7<uQS4R7!4Gupq"!04R(J>ZKXs=F#BFo9gMD]>o5E1>BEgo(MT5#3c"71/9
+%(Uh)tM$b]?YoFB$LMSM,"3X;'ib5-G3.Vbjnq"A*WY"VW4T25A8W_VY'HRG;b+$TJ/DTN2bheg$c`!:j`$JC-q>=*r)O,KS^Q'f$
+%SP9T`2>J<XH;hX'KfKaif;a2)gYoWeN"/T?%;XPg?I4H#G0/tkc5q+Zm`koi%Zh;nO.#9u5du')dfH7?C%Yuk at pO"D(o2Ed_A3aR
+%<Eq;hNoQq\,=g[MSHfX1+:BrtX^2<UWgD&uU&i;Y$ej\e<fmp*Ij8FkL(C2S_R"_8'G;;ZPiBA>@C=K#'siVYftn-'-!ZEVBg>T>
+%6>@ql%KG!U0[DFC-O)\%[FSmm;-Xb\$:I=RNn?)0!E#?OqEF,96/ld+8"^>8A28%MSl$sa^MP)XI]2*V`f)QjR$g?1BCkbdoppd4
+%Abg/!/(N0Y at YhLL6fS>34c_OSAWLfN\ui3BXlf=YDcp`jWJ"DhLecHfK4SmRVrb!jeoFb at Th8/Ab0kiPX^j2*U'=dRoZh0+<]67e
+%XSL&Z:W at J"Rj8qTC9hkZ[o.ssO]X=X&J\?B'NTmu!rgbIGQB`I6KO=UU<^6_@]g&$=2X$4hefo:l?s$]e"1Xb=ii8r.0N8Bo+3dW
+%q?s!9#Ufh2Vb*[2UUC)1H)eZqn2434;^K[)9i\5sTr8TT<1K,O0SGB/jtDDIrW-=jKPZSmTQQ#o'sc8^U0:NY+f^`S!7'&4RbV^"
+%FQob?4/-s,a4*15?nX at IU$n+DQZX3$*!%51CT$YY'EYh_&5pXXaKN;2$Anq9eI@%oeofSS&bd/OURB_&fU\>t^_cj$b/Pa7E1Xs4
+%"uN1[g?*CNH%.e;QqbmsP;HF<hOaK2rJh2n1b#ddYecEAJ!j!MUKUjh/4M#OHosG--f/Mp)0\6LQ!62U.OiV?nU>^Mg1h]7Us07G
+%&P)FE7"GP9OtAfLR?@F5L>3`&Z7=;-TDnA+3ZY'RgYPFuIg+5(hSV05I*:i!ln3M;E>5NIQKb4M]$dFA9KLQ4ka;;)6o0&qp0lI_
+%Pti[^`"D708h6(!k&1>J6)QHSibm#M9B'eS]BLt38pSp&K'tAUkG./7*(Jhtaa?9YF;oE815qa31j"l?%b*i#JVKH0SQ(d/:U\;B
+%mqeRJ(-f at d=nlt^$#5J(gV/0+*2hY,SgMVp`nsOqj87]L$h"<Bn'5RlVp13M\972\cHZ1Up3<qac_eh^L%k;l)qUZt,A6S>le[Zg
+%hsp?kgYUc"3?"H\5+F2<.!scs$VJ,8IlJ:#]+T)S5(@TcH8nT)V"5Na,iICJV"2nq),F.%o^O,NQ?pYp$E2B/@,P.EBK;8dBQ5eS
+%%M5RL.pT]0kJ>uV2uZ$Yr6./~>
+%AI9_PrivateDataEnd
diff --git a/documentation/figures/rnaseP-ecoli.pdf b/documentation/figures/rnaseP-ecoli.pdf
new file mode 100644
index 0000000..832cf21
Binary files /dev/null and b/documentation/figures/rnaseP-ecoli.pdf differ
diff --git a/documentation/format_a2m.tex b/documentation/format_a2m.tex
new file mode 100644
index 0000000..35cc643
--- /dev/null
+++ b/documentation/format_a2m.tex
@@ -0,0 +1,110 @@
+Easel and Easel-based tools like HMMER and Infernal are capable of
+writing alignments in UC Santa Cruz ``A2M'' (alignment to model)
+format, the native input format for the UCSC SAM profile HMM software
+package.
+
+To select A2M format, use the format code \ccode{a2m}: for example, 
+to reformat a Stockholm alignment to A2M:
+
+\user{esl-reformat a2m myali.sto}.
+
+Easel currently does not read A2M format, and it currently only writes
+in what UCSC calls ``dotless'' A2M format.
+
+The most official documentation for A2M format appears to be at
+\url{http://compbio.soe.ucsc.edu/a2m-desc.html}. You may refer to that
+document if anything in the brief description below is unclear.
+
+\subsubsection{An example A2M file}
+
+This alignment:
+
+\begin{cchunk}
+seq1  ACDEF...GHIKLMNPQTVWY
+seq2  ACDEF...GHIKLMNPQTVWY
+seq3  ---EFmnrGHIKLMNPQT---
+\end{cchunk}
+
+\noindent 
+is encoded in A2M format as:
+
+\begin{cchunk}
+>seq1  Sequence 1 description
+ACDEFGHIKLMNPQTVWY
+>seq2  Sequence 2 description
+ACDEFGHIKLMNPQTVWY
+>seq3  Sequence 3 description
+---EFmnrGHIKLMNPQT---
+\end{cchunk}
+
+A2M format looks a lot like aligned FASTA format. A crucial difference
+is that the aligned sequences in a ``dotless'' A2M file do not
+necessarily all have the same number of characters. The format
+distinguishes between ``consensus columns'' (where residues are in
+upper case and gaps are a dash, `-') and ``insert columns'' (where
+residues are in lower case and gaps are dots, `.', that aren't
+explicitly shown in the format -- hence ``dotless'' A2M). The position
+and number of gaps in insert columns (dots) is implicit in this
+representation.  An advantage of this format is its compactness.
+
+This representation only works if all insertions relative to consensus
+are considered to be unaligned characters. That is how insertions are
+handled by profile HMM implementations like SAM and HMMER, and profile
+SCFG implementations like Infernal.
+
+Thus every sequence must have the same number of consensus columns
+(upper case letters plus `-' characters), and may have additional lower
+case letters for insertions.
+
+\subsection{Legal characters}
+
+A2M (and SAM) do not support some special characters such as the `*'
+(not-a-residue) or `\verb+~+' (missing data) characters. Easel outputs these
+characters as gaps: either `-' in a consensus column, or nothing in an
+insert column.
+
+The SAM software parses only a subset of legal ambiguity codes for
+amino acids and nucleotides. For amino acids, it only reads \{BXZ\} in
+addition to the 20 standard one-letter codes. For nucleotides, it only
+reads \{NRY\} in addition to \{ACGTU\}. With one crucial exception, it
+treats all other letters as X or N. 
+
+The crucial exception is `O'. SAM reads an `O' as the position of a
+``free insertion module'' (FIM), a concept specific to SAM-style
+profile HMMs. This has no impact on nucleic acid sequences, where `O'
+is not a legal character. But in amino acid sequences, `O' means
+pyrrolysine, one of the unusual genetically-encoded amino acids.  This
+means that A2M format alignments must not contain pyrrolysine
+residues, lest they be read as FIMs. For this reason, Easel converts
+`O' residues to `X' when it writes an amino acid alignment in A2M
+format.
+
+\subsection{Determining consensus columns}
+
+Writing A2M format requires knowing which alignment columns are
+supposed to be considered consensus and which are considered
+inserts. If the alignment was produced by HMMER or Infernal, then the
+alignment has so-called ``reference annotation'' (what appears as a
+\verb+#=GC RF+ line in Stockholm format) marking the consensus
+columns. 
+
+Often, an alignment has no reference annotation; for example, if it
+has been read from an alignment format that has no reference
+annotation line (only Stockholm and SELEX formats support reference
+annotation). In this case, Easel internally generates a ``reasonable''
+guess at consensus columns, using essentially the same procedure that
+HMMER's \prog{hmmbuild} program uses by default: sequence fragments
+(sequences $<$50\% of the mean sequence length in the alignment
+overall) are ignored, and for the remaining sequences, any column
+containing $\geq$ 50\% residues is considered to be a consensus
+column.
+
+
+
+
+
+
+
+
+
+
diff --git a/documentation/format_ncbi.tex b/documentation/format_ncbi.tex
new file mode 100644
index 0000000..bc91b96
--- /dev/null
+++ b/documentation/format_ncbi.tex
@@ -0,0 +1,271 @@
+
+The NCBI BLAST databases are generated by the program \emph{formatdb}.
+The three files needed by Easel are index file, sequence file 
+and header file.For protein databases these files end with the extension 
+".pin", ".psq" and ".phr" respectively.  For DNA databases the 
+extensions are ".nin", ".nsq" and ".nhr" respectively.  The index 
+file contains information about the database, i.e. version number, 
+database type, file offsets, etc.  The sequence file contains residues
+for each of the sequences.  Finally, the header file contains the header 
+information for each of the sequences.  This document describes the
+structure of the NCBI version 4 database.
+
+If these files cannot be found, an alias file, extensions ".nal" or
+ ".pal", is processed.  The alias file is used to specify multiple
+volumes when databases are larger than 2 GB.
+
+
+\subsection{Index File (*.pin, *.nin)}
+
+The index file contains format information about the database.   The 
+layout of the version 4 index file is below:
+
+\bigskip
+\begin{center}
+\begin{tabular}{|l|l|p{3.5in}|} \hline
+Version &
+Int32 &
+Version number. \\ \hline
+Database type &
+Int32 &
+0-DNA 1-Protein.  \\ \hline
+Title length &
+Int32 &
+Length of the title string (\emph{T}).  \\ \hline
+Title &
+Char[\emph{T}] &
+Title string.  \\ \hline
+Timestamp length &
+Int32 &
+Length of the timestamp string (\emph{S}).  \\ \hline
+Timestamp &Char[\emph{S}] &
+Time of the database creation.  The length of the timestamp \emph{S} is 
+increased to force 8 byte alignment of the remaining integer 
+fields.  The timestamp is padded with NULs to achieve this alignment.   \\ \hline
+Number of sequences &
+Int32 &
+Number of sequences in the database (\emph{N})  \\ \hline
+Residue count &
+Int64 &
+Total number of residues in the database.  Note:  Unlike other integer 
+fields, this field is stored in little endian.  \\ \hline
+Maximum sequence &
+Int32 &
+Length of the longest sequence in the database  \\ \hline
+Header offset table &
+Int32[\emph{N+1}] &
+Offsets into the sequence's header file (*.phr, *nhr). \\ \hline
+Sequence offset table &
+Int32[\emph{N+1}] &
+Offsets into the sequence's residue file (*.psq, *.nsq). \\ \hline
+Ambiguity offset table &
+Int32[\emph{N+1}] &
+Offset into the sequence's residue file (*.nsq).  Note: This table is only 
+in DNA databases.  If the sequence does not have any ambiguity 
+residues, then the offset points to the beginning of the next 
+sequence.  \\ \hline
+\end{tabular}
+\end{center}
+\bigskip
+
+The integer fields 
+are stored in big endian format, except for the residue count which is 
+stored in little endian.  The two string fields, timestamp and title 
+are preceded by a 32 bit length field.  The title string is not NUL 
+terminated.  If the end of the timestamp field does not end on an offset 
+that is a multiple of 8 bytes, NUL characters are padded to the end of 
+the string to bring it to a multiple of 8 bytes.  This forces all the 
+following integer fields to be aligned on a 4-byte boundary for 
+performance reasons.  The length of the timestamp field reflects the 
+NUL padding if any.  The header offset table is a list of offsets to
+the beginning of each sequence's header.  These are offsets into
+the header file (*.phr, *.nhr).  The size of the header can be 
+calculated by subtracting the offset of the next header from the 
+current header.  
+The sequence offset table is a list of offsets to
+the beginning of each sequence's residue data.  These are offsets into
+the sequence file (*.psq, *.nsq).  The size of the sequence can be 
+calculated by subtracting the offset of the next sequence from the 
+current sequence.  
+Since one more offset is stored than the number 
+of sequences in the database, no special code is needed in calculating 
+the header size or sequence size for the last entry in the database.
+
+
+\subsection{Protein Sequence File (*.pin)}
+
+The sequence file contains the sequences, one after another.  The 
+sequences are in a binary format separated by a NUL byte.  Each 
+residue is encoded in eight bits.
+
+\bigskip
+\begin{center}
+\begin{tabular}{|c|c|c|c|c|c|c|c|} \hline
+Amino acid & Value & Amino acid & Value & Amino acid & Value & Amino acid & Value \\ \hline
+- & 0 & G &  7 & N & 13 & U & 24 \\ \hline
+A & 1 & H &  8 & O & 26 & V & 19 \\ \hline
+B & 2 & I &  9 & P & 14 & W & 20 \\ \hline
+C & 3 & J & 27 & Q & 15 & X & 21 \\ \hline
+D & 4 & K & 10 & R & 16 & Y & 22 \\ \hline
+E & 5 & L & 11 & S & 17 & Z & 23 \\ \hline
+F & 6 & M & 12 & T & 18 & * & 25 \\ \hline
+\end{tabular}
+\end{center}
+
+
+\subsection{DNA Sequence File (*.nsq)}
+
+The sequence file contains the sequences, one after another.  The 
+sequences are in a binary format but unlike the protein sequence 
+file, the sequences are not separated by a NUL byte.  The 
+sequence is first compressed using two bits per residue then 
+followed by an ambiguity correction table if 
+necessary.  If the sequence does not have an ambiguity table, 
+the sequence's ambiguity index points to the beginning of the 
+next sequence.
+
+\subsubsection{Two-bit encoding}
+
+The sequence is encoded first using two bits per nucleotide.
+
+\bigskip
+\begin{center}
+\begin{tabular}{|c|c|c|} \hline
+Nucleotide & Value & Binary \\ \hline
+A & 0 & 00 \\ \hline
+C & 1 & 01 \\ \hline
+G & 2 & 10 \\ \hline
+T or U & 3 & 11 \\ \hline
+\end{tabular}
+\end{center}
+\bigskip
+
+Any 
+ambiguous residues are replaced by an 'A', 'C', 'G' or 'T' in 
+the two bit encoding.  To calculate the number of residues 
+in the sequence, the least significant two bits in the 
+last byte of the sequence needs to be examined.  
+These last two bits indicate how many residues, if any, are 
+encoded in the most significant bits of the last byte.
+
+
+\subsubsection{Ambiguity Table}
+
+To correct a sequence containing any degenerate residues, an 
+ambiguity table follows the two bit encoded string.  
+The start of the ambiguity table is 
+pointed to by the ambiguity table index in the index file, 
+"*.nin".  The first four bytes contains the number of 32 bit 
+words in the correction table.  If the most significant bit 
+is set in the count, then two 32 bit entries will be used for 
+each correction.  
+The 64 bit entries are used for sequence with
+more than 16 million residues.  Each correction contains three 
+pieces of 
+information, the actual encoded nucleotide, how many nucleotides
+in the sequence are replaced by the correct nucleotide and finally 
+the offset into the sequences to apply the correction. 
+
+For 32 bit
+entries, the first 4 most significant bits encodes the nucleotide.
+Their bit pattern is 
+true of their representation, i.e. the value of 'H' is equal 
+to ('A'~or~'T'~or~'C').  
+
+\bigskip
+\begin{center}
+\begin{tabular}{|c|c|c|c|c|c|c|c|} \hline
+Nucleotide & Value & Nucleotide & Value & Nucleotide & Value & Nucleotide & Value \\ \hline
+- & 0 & G & 4 & T & 8  & K & 12 \\ \hline
+A & 1 & R & 5 & W & 9  & D & 13 \\ \hline
+C & 2 & S & 6 & Y & 10 & B & 14 \\ \hline
+M & 3 & V & 7 & H & 11 & N & 15 \\ \hline
+\end{tabular}
+\end{center}
+\bigskip
+
+The next field is the repeat count which is four bits wide. 
+One is added to the count giving it the range of 1 -- 256.  
+The last 24 bits is the offset into the sequence where the
+replacement starts.  The first residue start at offset zero,
+the second at offset one, etc.  With a 24 bit size, the offset
+can only address sequences around 16 million residues long.
+
+To address larger sequences, 64 bit
+entries are used.  For 64 bit entries, the order of the entries stays the same, 
+but their sizes change.  The nucleotide remains at four bits.
+The repeat count is increased to 12 bits giving it the range 
+of 1 -- 4096.  The offset size is increased to 48 bits.
+
+
+\subsection{Header File (*.phr, *.nhr)}
+
+The header file contains the headers for each sequence, one after another.  
+The sequences are in a binary encoded ASN.1 format.  The length 
+of a header can be calculated by subtracting the offset of the 
+next sequence from the current sequence offset.  The ASN.1 definition 
+for the headers can be found in the NCBI toolkit in the following 
+files: asn.all and fastadl.asn.
+
+The parsing of the header can be done with a simple recursive 
+descent parser.  The five basic types defined in the header are:
+
+\begin{itemize}
+\item Integer -- a variable length integer value.
+\item VisibleString -- a variable length string.
+\item Choice -- a union of one or more alternatives.  
+\item Sequence -- an ordered collection of one or more types.  
+\item SequenceOf -- an ordered collection of zero or more occurrences 
+of a given type.
+\end{itemize} 
+
+\subsubsection{Integer}
+
+The first byte of an encoded integer is a hex \verb+02+.  The next byte 
+is the number of bytes used to encode the integer value.  The 
+remaining bytes are the actual value.  The value is encoded 
+most significant byte first.
+
+\subsubsection{VisibleString}
+
+The first byte of a visible string is a hex \verb+1A+.  
+The next byte 
+starts encoding the length of the string.  If the most 
+significant bit is off, then the lower seven bits encode the 
+length of the string, i.e. the string has a length less than 128. 
+If the most significant bit is on, then 
+the lower seven bits is the number of bytes that hold the length of 
+the string, then the bytes encoding the string length, most significant 
+bytes first.
+Following the length are the actual string characters.
+The strings are not NUL terminated.  
+
+\subsubsection{Choice}
+
+
+The first byte indicates which selection of the choice.  The choices 
+start with a hex value \verb+A0+ for the first item, \verb+A1+ for 
+the second, etc.  
+The selection is followed by a hex \verb+80+.  Two NUL bytes follow 
+the choice.
+
+\subsubsection{Sequence}
+
+The first two bytes are a hex \verb+3080+.  The header is 
+then followed by 
+the encoded sequence types.  The first two bytes indicates which type 
+of the sequence is encoded.  This index starts with the hex value 
+\verb+A080+ 
+for the first item, \verb+A180+ for the second, etc. then 
+followed by the 
+encoded item and finally two NUL bytes, \verb+0000+, to indicate the end 
+of that type.  The next type in the sequence is then encoded.  If an 
+item is optional and is not defined, then none of it is encoded 
+including the index and NUL bytes.  This is repeated until the entire 
+sequence has been encoded.  Two NUL bytes then mark the end of the 
+sequence.
+
+\subsubsection{SequenceOf}
+
+The first two bytes are a hex \verb+3080+.  Then the lists of objects are 
+encoded.  Two NUL bytes encode the end of the list.
diff --git a/documentation/format_stockholm.tex b/documentation/format_stockholm.tex
new file mode 100644
index 0000000..04c58b7
--- /dev/null
+++ b/documentation/format_stockholm.tex
@@ -0,0 +1,252 @@
+
+Stockholm format was developed by the Pfam Consortium to support
+extensible markup and annotation of multiple sequence alignments.
+
+Why yet another alignment file format?  Most importantly, the existing
+formats of popular multiple alignment software (e.g. CLUSTAL, GCG MSF,
+PHYLIP) do not support rich documentation and markup of the
+alignment. And since there is not yet a standard accepted format for
+multiple sequence alignment files, we don't feel too guilty about
+inventing a new one.
+
+\subsection{A minimal Stockholm file}
+\begin{cchunk}
+# STOCKHOLM 1.0
+
+seq1  ACDEF...GHIKL
+seq2  ACDEF...GHIKL
+seq3  ...EFMNRGHIKL
+
+seq1  MNPQTVWY
+seq2  MNPQTVWY
+seq3  MNPQT...
+//
+\end{cchunk}
+
+The first line in the file must be \ccode{\# STOCKHOLM x.y}, where
+\ccode{x.y} is a major/minor version number for the format
+specification. This line allows a parser to instantly identify the
+file format. There is currently only one version of Stockholm format,
+\ccode{1.0}.
+
+In the alignment, each line contains a name followed by the aligned
+sequence. Neither the name nor the aligned sequence may contain
+whitespace characters. Stockholm does not enforce any other character
+conventions on the name or the aligned sequence. Typically, gaps
+(indels) are indicated in an aligned sequence by a dash or period, but
+Stockholm format does not require this.
+
+If the alignment is too long to fit on one line, the alignment may be
+split into multiple blocks, with blocks separated by blank lines. The
+number of sequences, their order, and their names must be the same in
+every block. Within a given block, each (sub)sequence (and any
+associated \ccode{\#=GR} and \ccode{\#=GC} markup, see below) is of
+equal length, called the \emph{block length}. Block lengths may differ
+from block to block; the block length must be at least one residue,
+and there is no maximum.
+
+Any line starting with a \ccode{\#} is considered to be a comment, and
+is ignored.
+
+Other blank lines in the file are ignored. 
+
+All other annotation is added using a tag/value comment style. The
+tag/value format is inherently extensible, and readily made
+backwards-compatible; unrecognized tags will simply be ignored. Extra
+annotation includes consensus and individual RNA or protein secondary
+structure, sequence weights, a reference coordinate system for the
+columns, and database source information including name, accession
+number, and coordinates (for subsequences extracted from a longer
+source sequence) See below for details.
+
+It is usually easy to convert other alignment formats into a least
+common denominator Stockholm format. For instance, SELEX, GCG's MSF
+format, and the output of the CLUSTALW multiple alignment program are
+all closely related interleaved formats.
+
+
+
+\subsection{Syntax of Stockholm markup}
+
+There are four types of Stockholm markup annotation, for per-file,
+per-sequence, per-column, and per-residue annotation:
+
+\begin{sreitems}{\emcode{\#=GR <seqname> <tag> <.....s.....>}}
+\item [\emcode{\#=GF <tag> <s>}]
+	Per-file annotation. \ccode{<s>} is a free format text line
+	of annotation type \ccode{<tag>}. For example, \ccode{\#=GF DATE
+	April 1, 2000}. Can occur anywhere in the file, but usually
+	all the \ccode{\#=GF} markups occur in a header.
+
+\item [\emcode{\#=GS <seqname> <tag> <s>}]
+	Per-sequence annotation. \ccode{<s>} is a free format text line
+	of annotation type \ccode{<tag>} associated with the sequence
+	named \ccode{<seqname>}. For example, \ccode{\#=GS seq1
+	SPECIES\_SOURCE Caenorhabditis elegans}. Can occur anywhere
+	in the file, but in single-block formats (e.g. the Pfam
+	distribution) will typically follow on the line after the
+	sequence itself, and in multi-block formats (e.g. HMMER
+	output), will typically occur in the header preceding the
+	alignment but following the \ccode{\#=GF} annotation.
+
+\item [\emcode{\#=GC <tag> <..s..>}]
+	Per-column annotation. \ccode{<..s..>} is an aligned text line
+	of annotation type \ccode{<tag>}.
+        \ccode{\#=GC} lines are
+	associated with a sequence alignment block; \ccode{<..s..>}
+	is aligned to the residues in the alignment block, and has
+	the same length as the rest of the block.
+	Typically \ccode{\#=GC} lines are placed at the end of each block.
+
+\item [\emcode{\#=GR <seqname> <tag> <..s..>}]
+	Per-residue annotation. \ccode{<..s..>} is an aligned text line
+	of annotation type \ccode{<tag>}, associated with the sequence
+	named \ccode{<seqname>}. 
+	\ccode{\#=GR} lines are 
+	associated with one sequence in a sequence alignment block; 
+	\ccode{<..s..>}
+	is aligned to the residues in that sequence, and has
+	the same length as the rest of the block.
+	Typically
+        \ccode{\#=GR} lines are placed immediately following the
+	aligned	sequence they annotate.
+\end{sreitems}
+
+\subsection{Semantics of Stockholm markup}
+
+Any Stockholm parser will accept syntactically correct files, but is
+not obligated to do anything with the markup lines. It is up to the
+application whether it will attempt to interpret the meaning (the
+semantics) of the markup in a useful way. At the two extremes are the
+Belvu alignment viewer and the HMMER profile hidden Markov model
+software package.
+
+Belvu simply reads Stockholm markup and displays it, without trying to
+interpret it at all. The tag types (\ccode{\#=GF}, etc.) are sufficient
+to tell Belvu how to display the markup: whether it is attached to the
+whole file, sequences, columns, or residues.
+
+HMMER uses Stockholm markup to pick up a variety of information from
+the Pfam multiple alignment database. The Pfam consortium therefore
+agrees on additional syntax for certain tag types, so HMMER can parse
+some markups for useful information. This additional syntax is imposed
+by Pfam, HMMER, and other software of mine, not by Stockholm format
+per se. You can think of Stockholm as akin to XML, and what my
+software reads as akin to an XML DTD, if you're into that sort of
+structured data format lingo.
+
+The Stockholm markup tags that are parsed semantically by my software
+are as follows:
+
+\subsubsection{Recognized \#=GF annotations}
+\begin{sreitems}{\emcode{TC  <f> <f>}}
+\item [\emcode{ID  <s>}] 
+	Identifier. \ccode{<s>} is a name for the alignment;
+	e.g. ``rrm''. One word. Unique in file.
+
+\item [\emcode{AC  <s>}]
+	Accession. \ccode{<s>} is a unique accession number for the
+	alignment; e.g. 
+	``PF00001''. Used by the Pfam database, for instance. 
+	Often a alphabetical prefix indicating the database
+	(e.g. ``PF'') followed by a unique numerical accession.
+	One word. Unique in file. 
+	
+\item [\emcode{DE  <s>}]
+	Description. \ccode{<s>} is a free format line giving
+	a description of the alignment; e.g.
+	``RNA recognition motif proteins''. One line. Unique in file.
+
+\item [\emcode{AU  <s>}]
+	Author. \emcode{<s>} is a free format line listing the 
+	authors responsible for an alignment; e.g. 
+	``Bateman A''. One line. Unique in file.
+
+\item [\emcode{GA  <f> <f>}]
+	Gathering thresholds. Two real numbers giving HMMER bit score
+	per-sequence and per-domain cutoffs used in gathering the
+	members of Pfam full alignments. See Pfam and HMMER
+	documentation for more detail.
+	
+\item [\emcode{NC  <f> <f>}]
+	Noise cutoffs. Two real numbers giving HMMER bit score
+	per-sequence and per-domain cutoffs, set according to the
+	highest scores seen for unrelated sequences when gathering
+	members of Pfam full alignments. See Pfam and HMMER
+	documentation for more detail.
+
+\item [\emcode{TC  <f> <f>}]
+	Trusted cutoffs. Two real numbers giving HMMER bit score
+	per-sequence and per-domain cutoffs, set according to the
+	lowest scores seen for true homologous sequences that
+	were above the GA gathering thresholds, when gathering
+	members of Pfam full alignments. See Pfam and HMMER
+	documentation for more detail.
+\end{sreitems}
+
+\subsection{Recognized \#=GS annotations}
+
+\begin{sreitems}{\emcode{WT  <f>}}
+\item [\emcode{WT  <f>}]
+	Weight. \ccode{<f>} is a nonnegative real number giving the
+	relative weight for a sequence, usually used to compensate
+	for biased representation by downweighting similar sequences.	
+	Usually the weights average 1.0 (e.g. the weights sum to
+	the number of sequences in the alignment) but this is not
+	required. Either every sequence must have a weight annotated, 
+	or none	of them can.  
+
+\item [\emcode{AC  <s>}]
+	Accession. \ccode{<s>} is a database accession number for 
+	this sequence. (Contrast to \ccode{\#=GF AC} markup, which gives
+	an accession for the whole alignment.) One word. 
+	
+\item [\emcode{DE  <s>}]
+	Description. \ccode{<s>} is one line giving a description for
+	this sequence. (Contrast to \ccode{\#=GF DE} markup, which gives
+	a description for the whole alignment.)
+\end{sreitems}
+
+
+\subsection{Recognized \#=GC annotations}
+
+\begin{sreitems}{\emcode{SA\_cons}}
+\item [\emcode{RF}]
+	Reference line. Any character is accepted as a markup for a
+	column. The intent is to allow labeling the columns with some
+	sort of mark.
+	
+\item [\emcode{SS\_cons}] 
+        Secondary structure consensus. For protein
+	alignments, DSSP codes or gaps are accepted as markup:
+	\ccode{[HGIEBTSCX.-\_]}, where H is alpha helix, G is
+	3/10-helix, I is p-helix, E is extended strand, B is a residue
+	in an isolated b-bridge, T is a turn, S is a bend, C is a
+	random coil or loop, and X is unknown (for instance, a residue
+	that was not resolved in a crystal structure). For RNA
+	alignments, the annotation is in WUSS format. Minimally, the
+	symbols \ccode{<} and \ccode{>} indicate a base pair,
+	\ccode{.} indicate single-stranded positions, and RNA
+	pseudoknots are represented by alphabetic characters, with
+	upper case letters representing the 5' side of the helix and
+	lower case letters representing the 3' side. Note that this
+	limits the annotation to a maximum of 26 pseudoknots per
+	sequence.
+
+\item [\emcode{SA\_cons}]
+	Surface accessibility consensus. 0-9, gap symbols, or X are
+	accepted as markup. 0 means $<$10\% accessible residue surface
+	area, 1 means $<$20\%, 9 means $<$100\%, etc. X means unknown
+	structure.
+\end{sreitems}
+
+\subsection{Recognized \#=GR annotations}
+
+\begin{sreitems}{\emcode{SA}}
+\item [\emcode{SS}]
+	Secondary structure consensus. See \ccode{\#=GC SS\_cons} above.
+\item [\emcode{SA}]
+	Surface accessibility consensus. See \ccode{\#=GC SA\_cons} above.
+\end{sreitems}
+
+
diff --git a/documentation/format_wuss.tex b/documentation/format_wuss.tex
new file mode 100644
index 0000000..f5c2ccf
--- /dev/null
+++ b/documentation/format_wuss.tex
@@ -0,0 +1,216 @@
+% Expects to be a section; whoever is including must 
+% provide section header.
+
+Easel supports RNA secondary structure annotation using a linear
+string representation called ``WUSS notation'' (Washington University
+Secondary Structure notation), as originally developed for Infernal
+and the Rfam database.
+
+WUSS notation extends the common bracket notation for RNA secondary
+structures, where open- and close-bracket symbols (or parentheses) are
+used to annotate base pairing partners: for example,
+\verb+((((...))))+ indicates a four-base stem with a three-base loop.
+Bracket notation is difficult for humans to look at, for anything much
+larger than a simple stem-loop. WUSS notation makes it somewhat easier
+to interpret the annotation for larger structures -- such as in
+structural alignments output by Infernal.
+
+The following figure shows an example with the key elements of WUSS
+notation.  At the top left is an example RNA structure. At the top
+right is the same structure, with different RNA structural elements
+marked. Below is the WUSS notation string for the structure, aligned
+to the sequence.
+
+\begin{center}
+\includegraphics[scale=0.8]{figures/rna_elements}
+\end{center}
+\begin{center}
+\begin{BVerbatim}
+  ::((((,<<<___>>>,,,<<-<<____>>-->>,))-))
+  AACGGAACCAACAUGGAUUCAUGCUUCGGCCCUGGUCGCG
+\end{BVerbatim}
+\end{center}
+
+\subsection{Full (output) WUSS notation}
+
+In detail, symbols used by WUSS notation in \emph{output} structure
+annotation strings are as follows:
+
+\begin{sreitems}{\textbf{Bulge, interior loops}}
+\item[\textbf{Base pairs}]
+  Base pairs are annotated by nested matching pairs of symbols
+  \verb+<>+, \verb+()+, \verb+[]+, or \verb+{}+.
+  The different symbols indicate the ``depth'' of the
+  helix in the RNA structure as follows:
+  \verb+<>+ are used for simple terminal stems;
+  \verb+()+ are used for ``internal'' helices enclosing a multifurcation of
+  all terminal stems; \verb+[]+ are used for internal helices
+  enclosing a multifurcation that includes at least one annotated
+  \verb+()+ stem already; and \verb+{}+ are used for all internal
+  helices enclosing deeper multifurcations.
+
+\item[\textbf{Hairpin loops}]
+  Hairpin loop residues are indicated by underscores, \verb+_+.
+  Simple stem loops stand out as, e.g.\ \verb+<<<<____>>>>+.
+
+\item[\textbf{Bulge, interior loops}]
+  Bulge and interior loop residues are indicated by dashes, \verb+-+.
+
+\item[\textbf{Multifurcation loops}]
+  Multifurcation loop residues are indicated by commas, \verb+,+.
+  The mnemonic is ``stem 1, stem2'', e.g.\ \verb+<<<___>>>,,<<<___>>>+.
+
+\item[\textbf{External residues}]
+  Unstructured single stranded residues completely outside the
+  structure (unenclosed by any base pairs) are annotated by
+  colons, \verb+:+.
+
+\item[\textbf{Insertions}]
+  Insertions relative to a known structure are indicated by periods,
+  \verb+.+. Regions where local structural alignment was invoked,
+  leaving regions of both target and query sequence unaligned,
+  are indicated by tildes, \verb+~+. These symbols only appear in
+  alignments of a known (query) structure annotation to a target
+  sequence of unknown structure.
+
+\item[\textbf{Pseudoknots}]
+  WUSS notation allows pseudoknots to be annotated as pairs of
+  upper case/lower case letters: for example,
+  \verb+<<<<_AAAA____>>>>aaaa+ annotates a simple pseudoknot;
+  additional pseudoknotted stems could be annotated by \verb+Bb+,
+  \verb+Cc+, etc. 
+
+  This is not a fully general notation. It is possible to come up with
+  pseudoknotted structures that could not be represented with 26
+  levels of nesting ($>$26th order pseudoknot, in the sense of
+  \citep{RivasEddy99}). However, it is unlikely you will ever see one
+  in nature. I believe the highest order pseudoknot known is the S1
+  (alpha operon) pseudoknot, which is 3rd order.
+\end{sreitems}
+
+An example of WUSS notation for a complicated structure
+(\emph{E. coli} RNase P) is shown in Figure~\ref{fig:RNaseP}.  An
+example of WUSS notation for a local alignment of \emph{B. subtilis}
+RNase P to \emph{E. coli} RNase P, illustrating the use of local
+alignment annotation symbols, is in Figure~\ref{fig:bsu-alignment}.
+
+\begin{figure}[tp]
+\begin{center}
+\includegraphics[scale=0.6]{figures/rnaseP-ecoli}
+\end{center}
+\begin{center}
+{\scriptsize
+\begin{BVerbatim}
+           {{{{{{{{{{{{{{{{{{,<<<<<<<<<<<<<-<<<<<____>>>>>>>>>->>>>>>>>
+         1 GAAGCUGACCAGACAGUCGCCGCUUCGUCGUCGUCCUCUUCGGGGGAGACGGGCGGAGGG 60
+
+           >,,,,AAA-AAAAA[[[[---BBBB-[[[[[<<<<<_____>>>>><<<<____>>>->(
+        61 GAGGAAAGUCCGGGCUCCAUAGGGCAGGGUGCCAGGUAACGCCUGGGGGGGAAACCCACG 120
+
+           (---(((((,,,,,,,,,,,,<<<<<--<<<<<<<<____>>>>>->>>>>>-->>,,,,
+       121 ACCAGUGCAACAGAGAGCAAACCGCCGAUGGCCCGCGCAAGCGGGAUCAGGUAAGGGUGA 180
+
+           ,,,<<<<<<_______>>>>>><<<<<<<<<____>>>->>>>>->,,)))--))))]]]
+       181 AAGGGUGCGGUAAGAGCGCACCGCGCGGCUGGUAACAGUCCGUGGCACGGUAAACUCCAC 240
+
+           ]]]]]],,,<<<<------<<<<<<----<<<<<_bbbb>>>>>>>>>>>----->>>>,
+       241 CCGGAGCAAGGCCAAAUAGGGGUUCAUAAGGUACGGCCCGUACUGAACCCGGGUAGGCUG 300
+
+           ,,,,,<<<<<<<<____>>>>>>>>,,,,,,,,,,}}}}}}}----------aaaaaaaa
+       301 CUUGAGCCAGUGAGCGAUUGCUGGCCUAGAUGAAUGACUGUCCACGACAGAACCCGGCUU 360
+
+           -}-}}}}}}}}}}::::
+       361 AUCGGUCAGUUUCACCU 377
+\end{BVerbatim}
+}
+\end{center}
+\caption{\small \textbf{Example of WUSS notation.} Top: Secondary
+structure of \emph{E. coli} RNase P, from Jim Brown's RNase P database
+\citep{Brown99}. Bottom: WUSS notation for the same structure,
+annotating the \emph{E. coli} RNase P sequence. Note that the P4 and P6
+pseudoknots are annotated, as A's and B's.}
+\label{fig:RNaseP}
+\end{figure}
+
+\begin{figure}[tp]
+\begin{center}
+\includegraphics[scale=0.6]{figures/rnaseP-bsu-alignment}
+\end{center}
+\begin{center}
+{\scriptsize
+\begin{BVerbatim}
+hit 0   :      4    399    52.56 bits
+           {{{{{{{{{{{{{{{{{{,<<<<<<<<<<<<<-<<<<<____>>>>>>>>>->>>>>>>>
+         1 ggAGuggGgcaGgCaguCGCugcuucggccuuGuucaguuaacugaaaaggAccgaagga 60
+           +: :::G::C:GG:A:UCGCU+C::::            U+            ::::G+A
+         4 CUUAACGUUCGGGUAAUCGCUGCAGAUC-----------UUG----------AAUCUGUA 42
+
+           >,,,,,,,,,,,,,[[[.[--------[[[[[~~~~~~~((---(((((,,,,~~~~~~)
+        61 GAGGAAAGUCCGGGCUC.CACAGGGCAgGGUG*[ 29]*GGAAAGUGCCACAG*[96]*G 229
+           GAGGAAAGUCC  GCUC C  A GG   :G G       :GAAAGUGCCACAG      G
+        43 GAGGAAAGUCCAUGCUCgC--ACGGUGCUGAG*[102]*UGAAAGUGCCACAG*[37]*G 226
+
+           ))--))))]]]]]].]]],,,~~~~~~,,,,,,,,,,}}}}}}}--..............
+       230 GUAAACCCCACCcG.GAGCAA*[77]*CuAGAUGAAUGacuGcCCA.............. 344
+           GUAAACC:C C: G GAG AA       UAGAU++AUGA:U:CC
+       227 GUAAACCCCUCGAGcGAGAAA*[64]*GUAGAUAGAUGAUUGCC--gccugaguacgagg 342
+
+           ..........................-----------------}-}}}}}}}}}}::::
+       345 ..........................CGACAGAACCCGGCUUAuagcCccaCUccucuu 377
+                                       ACA AAC  GGCUUA:AG::C::: :+ C
+       343 ugaugagccguuugcaguacgaugga--ACAAAACAUGGCUUACAGAACGUUAGACCAC 399
+\end{BVerbatim}
+}
+\end{center}
+\caption{\small \textbf{Local alignment annotation example.} Top:
+Secondary structure of \emph{B. subtilis} RNase P, from Jim Brown's
+RNase P database \citep{Brown99}. Residues in red are those that
+Infernal aligns to a CM of \emph{E. coli} type RNase
+P's. The local structural alignment is in four pieces; three regions
+of the structure (102, 37, and 64 nt long) are skipped over. One
+additional stem is treated as a 40 nt insertion. Bottom: the
+Infernal output, showing the \emph{E. coli} query structure
+aligned to the \emph{B. subtilis} sequence.}
+\label{fig:bsu-alignment}
+\end{figure}
+
+\subsection{Shorthand (input) WUSS notation}
+
+While WUSS notation makes it easier to visually interpret Infernal
+\emph{output} structural annotation, it would be painful to require
+people to \emph{input} all structures in full WUSS notation. Therefore
+when software like Infernal reads input secondary structure
+annotation, it also allows simpler rules:
+
+\begin{sreitems}{\textbf{Single stranded residues}}
+\item [\textbf{Base pairs}]
+  Any matching nested pair of \verb+()+, \verb+()+, \verb+[]+, \verb+{}+
+  symbols indicates a base pair; the exact choice of symbol has no
+  meaning, so long as the left and right partners match up.
+  Similarly, pseudoknotted pairs can also be annotated by matching nested
+  pairs of any alphabet character, such as \verb+Aa+, \verb+Bb+, etc.
+
+\item [\textbf{Single stranded residues}]
+  All other symbols \verb+_-,:.~+
+  indicate single stranded residues.
+  The choice of symbol has no special meaning.
+  Annotated pseudoknots (nested matched pairs of upper/lower case
+  alphabetic characters) are also interpreted as single
+  stranded residues in Infernal input.
+\end{sreitems}
+
+Thus, for instance, \verb+<<<<....>>>>+ and \verb+((((____))))+ and
+\verb+<(<(._._)>)>+ all indicate a four base stem with a four base
+loop (the last example is legal but weird).
+
+Remember that the key property of canonical (nonpseudoknotted) RNA
+secondary structure is that the pairs are \emph{nested}.
+\verb+((<<....))>>+ is not a legal annotation string: the pair symbols
+don't match up properly. 
+
+Because many other RNA secondary structure analysis programs use a
+simple bracket notation for annotating structure, the ability to input
+the simple format makes it easier to use data generated by other RNA
+software packages. Conversely, converting output WUSS notation to
+simple bracket notation is a matter of a simple Perl or sed script,
+substituting the symbols appropriately.
diff --git a/documentation/install.tex b/documentation/install.tex
new file mode 100644
index 0000000..aab3908
--- /dev/null
+++ b/documentation/install.tex
@@ -0,0 +1,18 @@
+
+\subsection{Make targets}
+
+\begin{description}
+
+\item[\emcode{make clean}]
+
+Deletes all files created by \ccode{make}, such as \ccode{.o} files
+and executables; also deletes files normally created in editing the
+source, such as emacs \ccode{~} files and \ccode{TAGS}.
+
+
+
+
+
+
+
+
diff --git a/documentation/installation.tex b/documentation/installation.tex
new file mode 100644
index 0000000..a716fb4
--- /dev/null
+++ b/documentation/installation.tex
@@ -0,0 +1,5 @@
+\label{chapter:installation}
+
+\subsection{Configuration options}
+
+
diff --git a/documentation/intro.tex b/documentation/intro.tex
new file mode 100644
index 0000000..1a7c2df
--- /dev/null
+++ b/documentation/intro.tex
@@ -0,0 +1,416 @@
+
+
+\Easel\ is a C code library for computational analysis of biological
+sequences using probabilistic models. \Easel\ is used by \HMMER\ 
+\citep{hmmer,Eddy98}, the profile hidden Markov model software that
+underlies the \Pfam\ protein family database
+\citep{Finn06,Sonnhammer97} and several other protein family
+databases. \Easel\ is also used by \Infernal\ 
+\citep{infernal,NawrockiEddy07}, the covariance model software that
+underlies the \Rfam\ RNA family database
+\citep{Griffiths-Jones05}. 
+
+There are other biosequence analysis libraries out there, in a variety
+of languages
+\citep{Vahrson96,Pitt01,Mangalam02,Butt05,Dutheil06,Giancarlo07,Doring08};
+but this is ours.  \Easel\ is not meant to be comprehensive.  \Easel
+is for supporting what's needed in our group's work on probabilistic
+modeling of biological sequences, in applications like \HMMER\ and
+\Infernal. It includes code for generative probabilistic models of
+sequences, phylogenetic models of evolution, bioinformatics tools for
+sequence manipulation and annotation, numerical computing, and some
+basic utilities.
+
+\Easel\ is written in ANSI/ISO C because its primary goals are high
+performance and portability. Additionally, \Easel\ aims to provide an
+ease of use reasonably close to Perl or Python code.
+
+\Easel\ is designed to be reused, but not only as a black box. I might
+use a black box library for routine functions that are tangential to
+my research, but for anything research-critical, I want to understand
+and control the source code.  It's rational to treat reusing other
+people's code like using their toothbrush, because god only knows what
+they've done to it. For me, code reuse more often means acting like a
+magpie, studying and stealing shiny bits of other people's source
+code, and weaving them into one's own nest. \Easel\ is designed so you
+can easily pull useful baubles from it.
+
+\Easel\ is also designed to enable us to publish reproducible and
+extensible research results as supplementary material for our research
+papers. We put work into documenting \Easel\ as carefully as any other
+research data we distribute.
+
+These considerations are reflected in \Easel design decisions.
+\Easel's documentation includes tutorial examples to make it easy to
+understand and get started using any given \Easel\ module, independent
+of other parts of \Easel.  \Easel\ is modular, in a way that should
+enable you to extract individual files or functions for use in your
+own code, with minimum disentanglement work. \Easel\ uses some
+precepts of object-oriented design, but its objects are just C
+structures with visible, documented contents. \Easel's source code is
+consciously designed to be read as a reference work. It reflects, in a
+modest way, principles of ``literate programming'' espoused by Donald
+Knuth. \Easel\ code and documentation are interwoven. Most of this
+book is automatically generated from \Easel's source code.
+
+
+
+\section{Quick start}
+
+Let's start with a quick tour. If you have any experience with the
+variable quality of bioinformatics software, the first thing you want
+to know is you can get Easel compiled -- without having to install a
+million dependencies first. The next thing you'll want to know is
+whether \Easel\ is going to be useful to you or not. We'll start with
+compiling it. You can compile \Easel\ and try it out without
+permanently installing it.
+
+
+
+\subsection{Downloading and compiling Easel for the first time}
+
+Easel is self-sufficient, with no dependencies other than what's
+already on your system, provided you have an ANSI C99 compiler
+installed.  You can obtain an \Easel\ source tarball and compile it
+cleanly on any UNIX, Linux, or Mac OS/X operating system with an
+incantation like the following (where \ccode{xxx} will be the current
+version number):
+
+\begin{cchunk}
+% wget http://eddylab.org/easel/easel.tar.gz
+% tar zxf easel.tar.gz
+% cd easel-xxx
+% ./configure
+% make
+% make check
+\end{cchunk}
+
+The \ccode{make check} command is optional. It runs a battery of
+quality control tests. All of these should pass. You should now see
+\ccode{libeasel.a} in the directory. If you look in the directory
+\ccode{miniapps}, you'll also see a bunch of small utility programs,
+the \Easel\ ``miniapps''.
+
+There are more complicated things you can do to customize the
+\ccode{./configure} step for your needs. That includes customizing the
+installation locations. If you decide you want to install
+\Easel\ permanently, see the full installation instructions in
+chapter~\ref{chapter:installation}.
+
+
+
+\subsection{Cribbing from code examples}
+
+Every source code module (that is, each \ccode{.c} file) ends with one
+or more \esldef{driver programs}, including programs for unit tests
+and benchmarks. These are \ccode{main()} functions that can be
+conditionally included when the module is compiled. The very end of
+each module is always at least one \esldef{example driver} that shows
+you how to use the module. You can find the example code in a module
+\eslmod{foo} by searching the \ccode{esl\_foo.c} file for the tag
+\ccode{eslFOO\_EXAMPLE}, or just navigating to the end of the file. To
+compile the example for module \eslmod{foo} as a working program, do:
+
+\begin{cchunk}
+   % cc -o example -L. -I. -DeslFOO_EXAMPLE esl_foo.c -leasel -lm
+\end{cchunk}
+
+You may need to replace the standard C compiler \ccode{cc} with a
+different compiler name, depending on your system. Linking to the
+standard math library (\ccode{-lm}) may not be necessary, depending on
+what module you're compiling, but it won't hurt. Replace \ccode{foo}
+with the name of a module you want to play with, and you can compile
+any of Easel's example drivers this way.
+
+To run it, read the source code (or the corresponding section in this
+book) to see if it needs any command line arguments, like the name of
+a file to open, then:
+
+\begin{cchunk}
+   % ./example <any args needed>
+\end{cchunk}
+
+You can edit the example driver to play around with it, if you like,
+but it's better to make a copy of it in your own file (say,
+\ccode{foo\_example.c}) so you're not changing \Easel's code. When you
+extract the code into a file, copy what's between the \ccode{\#ifdef
+eslFOO\_EXAMPLE} and \ccode{\#endif /*eslFOO\_EXAMPLE*/} flags that
+conditionally include the example driver (don't copy the flags
+themselves). Then compile your example code and link to \Easel\ like
+this:
+
+\begin{cchunk}
+   % cc -o foo_example -L. -I. foo_example.c -leasel -lm
+\end{cchunk}
+
+\subsection{Cribbing from Easel miniapplications}
+
+The \ccode{miniapps} directory contains \Easel's
+\esldef{miniapplications}: several utility programs that \Easel\
+installs, in addition to the library \ccode{libeasel.a} and its header
+files.
+
+The miniapplications are described in more detail later, but for the
+purpose of getting used to how \Easel\ is used, they provide you some
+more useful examples of small \Easel-based applications that are a
+little more complicated than individual module example drivers.
+
+You can probably get a long way into \Easel\ just by browsing the
+source code of the modules' examples and the miniapplications. If
+you're the type (like me) that prefers to learn by example, you're
+done, you can close this book now. 
+
+
+
+\section{Overview of Easel's modules}
+
+Possibly your next question is, does \Easel\ provide any functionality
+you're interested in?
+
+Each \ccode{.c} file in \Easel\ corresponds to one \Easel\
+\esldef{module}.  A module consists of a group of functions for some
+task. For example, the \eslmod{sqio} module can automatically parse
+many common unaligned sequence formats, and the \eslmod{msa} module
+can parse many common multiple alignment formats.
+
+There are modules concerned with manipulating biological sequences and
+sequence files (including a full-fledged parser for Stockholm multiple
+alignment format and all its complex and powerful annotation markup):
+
+\begin{center}
+\begin{tabular}{p{1in}p{3.7in}}
+\eslmod{sq}       & Single biological sequences            \\
+\eslmod{msa}      & Multiple sequence alignments and i/o   \\
+\eslmod{alphabet} & Digitized biosequence alphabets        \\
+\eslmod{randomseq}& Sampling random sequences              \\
+\eslmod{sqio}     & Sequence file i/o                      \\
+\eslmod{ssi}      & Indexing large sequence files for rapid random access \\
+\end{tabular}
+\end{center}
+
+There are modules implementing common operations on multiple sequence
+alignments (including many published sequence weighting algorithms,
+and a memory-efficient single linkage sequence clustering algorithm):
+
+\begin{center}
+\begin{tabular}{p{1in}p{3.7in}}
+\eslmod{msacluster} & Efficient single linkage clustering of aligned sequences by \% identity\\
+\eslmod{msaweight}  & Sequence weighting algorithms \\
+\end{tabular}
+\end{center}
+
+There are modules for probabilistic modeling of sequence residue
+alignment scores (including routines for solving for the implicit
+probabilistic basis of arbitrary score matrices):
+
+\begin{center}
+\begin{tabular}{p{1in}p{3.7in}}
+\eslmod{scorematrix} & Pairwise residue alignment scoring systems\\
+\eslmod{ratematrix}  & Standard continuous-time Markov models of residue evolution\\
+\eslmod{paml}        & Reading PAML data files (including rate matrices)\\
+\end{tabular}
+\end{center}
+
+There is a module for sequence annotation:
+
+\begin{center}
+\begin{tabular}{p{1in}p{3.7in}}
+\eslmod{wuss} & ASCII RNA secondary structure annotation strings\\
+\end{tabular}
+\end{center}
+
+There are modules implementing some standard scientific numerical
+computing concepts (including a free, fast implementation of conjugate
+gradient optimization):
+
+\begin{center}
+\begin{tabular}{p{1in}p{3.7in}}
+\eslmod{vectorops} & Vector operations\\
+\eslmod{dmatrix}   & 2D matrix operations\\
+\eslmod{minimizer} & Numerical optimization by conjugate gradient descent\\
+\eslmod{rootfinder}& One-dimensional root finding (Newton/Raphson)\\
+\end{tabular}
+\end{center}
+
+There are modules implementing phylogenetic trees and evolutionary
+distance calculations:
+
+\begin{center}
+\begin{tabular}{p{1in}p{3.7in}}
+\eslmod{tree}     & Manipulating phylogenetic trees\\
+\eslmod{distance} & Pairwise evolutionary sequence distance calculations\\
+\end{tabular}
+\end{center}
+
+There are a number of modules that implement routines for many common
+probability distributions (including maximum likelihood fitting
+routines):
+
+\begin{center}
+\begin{tabular}{p{1in}p{3.7in}}
+\eslmod{stats}       & Basic routines and special statistics functions\\
+\eslmod{histogram}   & Collecting and displaying histograms\\
+\eslmod{dirichlet}   & Beta, Gamma, and Dirichlet distributions\\
+\eslmod{exponential} & Exponential distributions\\
+\eslmod{gamma}       & Gamma distributions\\
+\eslmod{gev}         & Generalized extreme value distributions\\
+\eslmod{gumbel}      & Gumbel (Type I extreme value) distributions\\
+\eslmod{hyperexp}    & Hyperexponential distributions\\
+\eslmod{mixdchlet}   & Mixture Dirichlet distributions and priors\\
+\eslmod{mixgev}      & Mixture generalized extreme value distributions\\
+\eslmod{normal}      & Normal (Gaussian) distributions\\
+\eslmod{stretchexp}  & Stretched exponential distributions\\
+\eslmod{weibull}     & Weibull distributions\\
+\end{tabular}
+\end{center}
+
+There are several modules implementing some common utilities
+(including a good portable random number generator and a powerful
+command line parser):
+
+\begin{center}
+\begin{tabular}{p{1in}p{3.7in}}
+\eslmod{cluster}    & Efficient single linkage clustering\\
+\eslmod{fileparser} & Parsing simple token-based (tab/space-delimited) files\\
+\eslmod{getopts}    & Parsing command line arguments and options.\\
+\eslmod{keyhash}    & Hash tables for emulating Perl associative arrays\\
+\eslmod{random}     & Pseudorandom number generation and sampling\\
+\eslmod{regexp}     & Regular expression matching\\
+\eslmod{stack}      & Pushdown stacks for integers, chars, pointers\\
+\eslmod{stopwatch}  & Timing parts of programs\\
+\end{tabular}
+\end{center}
+
+There are some specialized modules in support of accelerated and/or parallel computing:
+
+\begin{center}
+\begin{tabular}{p{1in}p{3.7in}}
+\eslmod{sse}     & Routines for SSE (Streaming SIMD Intrinsics) vector computation support on Intel/AMD platforms\\
+\eslmod{vmx}     & Routines for Altivec/VMX vector computation support on PowerPC platforms\\
+\eslmod{mpi}     & Routines for MPI (message passing interface) support\\
+\end{tabular}
+\end{center}
+
+\section{Navigating documentation and source code}
+
+The quickest way to learn about what each module provides is to go to
+the corresponding chapter in this document. Each chapter starts with a
+brief introduction of what the module does, and highlights anything
+that \Easel's implementation does that we think is particularly
+useful, unique, or powerful. That's followed by a table describing
+each function provided by the module, and at least one example code
+listing of how the module can be used. The chapter might then go into
+more detail about the module's functionality, though many chapters do
+not, because the functionality is straightforward or self-explanatory.
+Finally, each chapter ends with detailed documentation on each
+function.
+
+\Easel's source code is designed to be read. Indeed, most of this
+documentation is generated automatically from the source code itself
+-- in particular, the table listing the available functions, the
+example code snippets, and the documentation of the individual
+functions.
+
+Each module \ccode{.c} file starts with a table of contents to help
+you navigate.\footnote{\Easel\ source files are designed as complete
+free-standing documents, so they tend to be larger than most people's
+\ccode{.c} files; the more usual practice in C programming is to have
+a smaller number of functions per file.} The first section will often
+define how to create one or more \esldef{objects} (C structures) that
+the module uses. The next section will typically define the rest of
+the module's exposed API. Following that are any private (internal)
+functions used in the module. Last are the drivers, including
+benchmarks, unit tests, and one or more examples.
+
+Each function has a structured comment header that describes how it is
+called and used, including what arguments it takes, what it returns,
+and what error conditions it may raise. These structured comments are
+extracted for inclusion in this document, so what you read here for
+each function's documentation is identical to what is in the source
+code.
+
+\section{Modularity, reuse, and ``augmentation''}
+
+The usual use of libraries as monolithic black boxes means that users
+have to install one or more third party libraries before installing
+\HMMER\ and \Infernal, or that we would incorporate third party
+libraries into our source trees. Though this isn't too impossible --
+modern software installation tools automate the process of installing
+dependencies, and modern code repository tools like Subversion
+simplify the process of tracking third party code -- it often seems
+awfully burdensome, because in many cases all I want from a third
+party library is a function or two. Biosequence code libraries
+invariably provide a bunch of routines that you could care less about
+(nobody needs another Smith/Waterman algorithm implementation, but
+every library is going to provide one -- \Easel\ is no exception), and
+they invariably use bewilderingly complicated structures or objects
+that you'd rather not have to learn about just to call one little
+calculation that really could have operated on a simple C datatype
+instead (everyone has their own sequence object, full of rich and
+complicated information -- \Easel\ is no exception).
+
+You would normally use \Easel\ as a monolithic C library
+(\ccode{libeasel.a}) that you just link with your code, but \Easel\ is
+also designed to be sufficiently modular that you can grab individual
+source files out of the library and use them directly in your own
+code. For example, to get Easel's sequence file i/o API, for example,
+you can take the sqio module (the C source \ccode{esl\_sqio.c} and the
+header \ccode{esl\_sqio.h}), plus the always-obligatory \Easel\
+foundation (\ccode{easel.c} and \ccode{easel.h}). Many of Easel's
+modules are free-standing, and only depend on the foundation
+\eslmod{easel} module. More complex modules will depend on a few other
+modules, but the total number of modules you have to take to get any
+particular \Easel\ API is always small, because \Easel's dependencies
+are constrained in a hierarchy. Each module's documentation shows its
+required dependencies.
+
+There is necessarily a tradeoff between modularity and power. A fully
+modular design would mean that no Easel module would be able to take
+advantage of functionality in any other module. 
+
+To minimize the number of modules you need to take to get some part of
+Easel into your code, \Easel\ uses something it calls
+\esldef{augmentation}. Each module provides a base functionality that
+is as simple as possible, and which depends on as few other modules as
+possible. When more powerful functionality would require additional
+modules, where possible, \Easel\ tries to isolate that functionality
+and make it optional. You need to \emph{augment} the module to
+activate these more powerful optional abilities by providing the
+appropriate modules; or you can just leave the optional modules out
+and use the core functionality.  For example, if you use only the
+\eslmod{sqio} module, you get the ability to read unaligned sequence
+files like FASTA or GenBank; but if you augment \eslmod{sqio} with the
+\eslmod{msa} multiple alignment module, you gain the ability to read
+individual sequences from multiple alignment files sequentially. At
+compile-time, you declare (by means of \ccode{\#define} flags in
+\ccode{easel.h}) what modules you've got, and this list is what
+defines what augmentations are possible. Each module's documentation
+shows what optional augmentations are activated by other modules. Of
+course, when \Easel\ is used as a complete \ccode{libeasel.a} library,
+all modules are fully augmented by default.
+
+There are also tradeoffs inherent in using objects. So long as you
+know how to create and use an object, it becomes a powerful
+organizational tool. But objects necessarily add a layer of complexity
+that impedes code reuse; for example, instead of just calling a
+sequence alignment routine on two C text strings, you'll have to know
+how to create sequence objects first, and you have to carry along
+whatever extra code is involved in dealing with the
+object. Additionally, nobody likes each others' objects.
+
+\Easel\ assumes you don't like my objects any more than I like yours,
+and that you are going to prefer to use \Easel\ objects only when
+calling \Easel\ functions, not your own, so you will probably build
+simple interfaces to exchange data between your code and \Easel. Thus,
+\Easel\ is designed to provide obvious ways to create new \Easel\
+objects from elemental C data types, and to extract elemental C data
+types from \Easel\ objects. Especially for purposes of extracting
+data, \Easel\ objects are \esldef{translucent}; often, some of their
+internal data fields are stable and documented, and (contrary to some
+key principles of object-oriented design) in these cases, you are
+encouraged to reach into an object and access elemental data
+directly. \Easel\ functions also try to minimize dependencies on
+\Easel\ objects as much as possible, preferring to pass elemental C
+data types as arguments where feasible.
+
+
diff --git a/documentation/macros.tex b/documentation/macros.tex
new file mode 100644
index 0000000..326a417
--- /dev/null
+++ b/documentation/macros.tex
@@ -0,0 +1,70 @@
+% Typography.
+\newcommand{\ccode}[1]{{\smaller\texttt{#1}}}
+\newcommand{\ccodeincmd}[1]{{\texttt{#1}}}
+\newcommand{\emcode}[1]{{\smaller\texttt{\textbf{#1}}}}
+\newcommand{\itcode}[1]{{\smaller\texttt{\textit{#1}}}}
+\newcommand{\itbfcode}[1]{{\smaller\texttt{\textit{\bfseries #1}}}}
+\newcommand{\esldef}[1]{\textbf{#1}}                    % Define/introduce a term (to be indexed)
+\newcommand{\prog}[1]{{\smaller\textsc{#1}}}
+\newcommand{\eslmod}[1]{{\smaller\textsf{\textup{\textbf{#1}}}}}
+\newcommand{\eslmodincmd}[1]{{\smaller\textsf{\textup{\textbf{#1}}}}}
+\newcommand{\user}[1]{\indent\indent{\small\bfseries\texttt{> #1}}}
+\newcommand{\response}[1]{\indent\indent{\small\texttt{#1}}}
+
+\newcommand{\Easel}    {Easel}
+\newcommand{\HMMER}    {HMMER}
+\newcommand{\Infernal} {Infernal}
+\newcommand{\Pfam}     {Pfam}
+\newcommand{\Rfam}     {Rfam}
+
+% \api* functions are for the API summary tables.
+\newcommand{\apisubhead}[1]{\multicolumn{2}{|c|}{\rule[-0.4em]{0em}{1.5em}\textbf{#1}}}
+
+\def\argmax{\mathop{\mathrm{argmax}}\limits}
+\def\argmin{\mathop{\mathrm{argmin}}\limits}
+
+\DefineVerbatimEnvironment{cchunk}       {Verbatim}{fontsize=\scriptsize,numbers=left,xleftmargin=1.0\parindent}%
+\DefineVerbatimEnvironment{userchunk}    {Verbatim}{fontsize=\small,fontseries=b,,xleftmargin=1.0\parindent}%
+\DefineVerbatimEnvironment{responsechunk}{Verbatim}{fontsize=\small,xleftmargin=1.0\parindent}%
+\DefineVerbatimEnvironment{asciiart}     {Verbatim}{fontsize=\scriptsize,xleftmargin=1.0\parindent}%
+
+% Set the color, size of the numbering of source code figures
+\renewcommand{\theFancyVerbLine}{\tiny\textcolor{SkyBlue}{\arabic{FancyVerbLine}}}
+
+
+% Description-like environment for documenting functions/APIs.
+% puts the description label in a minipage with a large hanging
+% indent.
+% Good christ this took a long time to develop.
+% hanging indent trick stolen from Peter Wilson's hanging.sty @CTAN
+% minipage allows multi-line label, and puts item on next line.
+% customized list inspired by Kopka/Daly _Guide to LaTeX_ p.213
+% SRE, Wed Dec 27 11:37:18 2000
+%
+\newenvironment{sreapi}{%
+     \begin{list}{}{%
+       \renewcommand{\makelabel}[1]{%
+         \begin{minipage}{\textwidth}%
+           \hangindent10em\hangafter1\noindent%
+           {\bfseries\texttt{##1}\vspace{0.8em}}%
+         \end{minipage}%
+     }}}%
+     {\end{list}}
+
+
+% Description-like environment for producing lists like:
+%
+%     label  stuff, stuff, stuff
+%
+%    label2  more stuff, more stuff,
+%            more stuff.
+% \begin{sreitems}{Longest label} \item[label] stuff, ... \end{sreitems}
+% SRE, Wed Dec 27 11:59:43 2000
+%
+\newenvironment{sreitems}[1]{%
+     \begin{list}{}{%
+       \settowidth{\labelwidth}{#1}%
+       \setlength{\leftmargin}{\labelwidth}%
+       \addtolength{\leftmargin}{\labelsep}%
+       }}
+     {\end{list}}
diff --git a/documentation/main.tex b/documentation/main.tex
new file mode 100644
index 0000000..c6a2e88
--- /dev/null
+++ b/documentation/main.tex
@@ -0,0 +1,614 @@
+\documentclass[10pt]{book}
+% alternative fonts: 
+% times, mathptmx, mathpazo, newcent, bookman
+% xref http://www.ce.cmu.edu/~kijoo/latex2pdf.pdf
+\usepackage{times}
+%\usepackage{fullpage}
+\usepackage{relsize}   % the \smaller command, used in \ccode for example
+\usepackage{fancyvrb}
+\usepackage{array}
+\usepackage[numbers,sort&compress]{natbib}
+\usepackage[pdftex]{graphicx}
+\usepackage[usenames,dvipsnames]{color}
+\usepackage[backref,colorlinks]{hyperref}
+
+\hypersetup{
+  linkcolor   = RoyalBlue,
+  anchorcolor = RoyalBlue,
+  citecolor   = RoyalBlue,
+  filecolor   = RoyalBlue,
+  menucolor   = RoyalBlue,
+  runcolor    = RoyalBlue,
+  urlcolor    = RoyalBlue,
+}
+
+\usepackage{ifthen}
+\newboolean{completedraft}
+\setboolean{completedraft}{true}   %  if compiling the entire guide
+%\setboolean{completedraft}{false}   % if writing/testing a piece at a time...
+                                     %   comment out the \ifthenelse
+                                     %   around the piece you're
+                                     %   working on. 
+
+\input{macros}
+
+\setcounter{secnumdepth}{1}
+
+\begin{document}
+
+\ifthenelse{\boolean{completedraft}}{
+   \input{titlepage}
+   \input{copyright}
+   \newpage
+   \tableofcontents
+}{}
+
+% A \sloppy command helps a lot with line justification; 
+% we have a lot of \texttt's in this thing, and they screw up justification.
+\sloppy
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Introduction}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \begin{quote}
+    \emph{...using another person's software is sometimes treated like 
+    using their toothbrush.}\\
+   \hspace*{1em}\hfill - Webb Miller \citep{Miller01}
+   \end{quote}
+   \input{intro}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{\eslmodincmd{easel}: the foundation}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \begin{quote}
+   \emph{Lack of skill dictates economy of style.} 
+   \hspace*{1em}\hfill -- Joey Ramone
+   \end{quote}     
+   \input{easel}
+   \section{Functions in the easel module}
+   \input{autotext/easel_functions}
+   \vspace*{\fill}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Biosequence data modules}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{alphabet}: digitized biosequences}
+   \input{esl_alphabet}
+   \subsection{Functions in the alphabet module}
+   \input{autotext/esl_alphabet_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{sq}: single biological sequences}
+   \input{esl_sq}
+   \subsection{Functions in the sq module}
+  \input{autotext/esl_sq_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{msa}: Multiple sequence alignments and i/o}
+   \input{esl_msa}
+   \subsection{Functions in the msa module}
+   \input{autotext/esl_msa_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{randomseq}: sampling random sequences}
+   \input{esl_randomseq}
+   \subsection{Functions in the randomseq module}
+   \input{autotext/esl_randomseq_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{sqio}: unaligned sequence file input/output}
+   \input{esl_sqio}
+   \subsection{Functions in the sqio module}
+   \input{autotext/esl_sqio_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{dsqdata}: faster sequence file input}
+   \input{esl_dsqdata}
+   \subsection{Functions in the dsqdata module}
+   \input{autotext/esl_dsqdata_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{ssi}: indexing flatfiles for record retrieval}
+   \input{esl_ssi}
+   \subsection{Functions in the ssi module}
+   \input{autotext/esl_ssi_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Multiple sequence alignment modules}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{msacluster}: Clustering aligned sequence families}
+   \input{esl_msacluster}
+   \subsection{Functions in the msacluster module}
+   \input{autotext/esl_msacluster_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{msaweight}: Ad hoc sequence weighting}
+
+   \begin{quote}
+    \emph{... as if someone were to buy several copies of the morning
+    newspaper to assure himself that what is said is true.}\\
+   \hspace*{1em}\hfill -- Ludwig Wittgenstein \citep[cited in]{Altschul89}
+   \end{quote}
+
+   \input{esl_msaweight}
+   \subsection{Functions in the msaweight module}
+   \input{autotext/esl_msaweight_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Multiple sequence alignment formats}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+   \section{\eslmodincmd{msafile}: input/output of multiple sequence alignments}
+%   \input{esl_msafile}
+   
+%   \subsection{Functions in the msafile module}
+%   \input{autotext/esl_msafile_functions}
+  
+   
+}{}
+
+%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% \chapter{Pairwise sequence alignment}
+%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% \begin{quote}
+%%  \emph{And how will it ever end?\\ 
+%%        unless the day finally arrives\\
+%%        when we have compared everything in the world\\
+%%        to everything else in the world,\\
+%%        and there is nothing left to do\\
+%%        but quietly close our notebooks\\
+%%        and sit with our hands folded on our desks.}\\
+%% \hspace*{1em}\hfill -- Billy Collins, \emph{The Trouble with Poetry}
+%% \end{quote}
+
+%% \newpage
+%% \section{\eslmodincmd{swat}: Smith/Waterman local alignment}
+%% \input{esl_swat}
+%% \subsection{Functions in the swat module}
+%% \input{autotext/esl_swat_functions}
+
+
+
+\ifthenelse{\boolean{completedraft}}{
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Probabilistic modeling modules}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \begin{quote}
+     \emph{Probability theory is nothing but common sense reduced to
+     calculation.}\\
+   \hspace*{1em}\hfill -- Laplace
+   \end{quote}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{scorematrix}: Pairwise alignment scores}
+   \input{esl_scorematrix}
+   \subsection{Functions in the scorematrix module}
+   \input{autotext/esl_scorematrix_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{ratematrix}: Continuous-time Markov models of evolution}
+   \input{esl_ratematrix}
+   \subsection{Functions in the ratematrix module}
+   \input{autotext/esl_ratematrix_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{paml}: Reading data files from PAML}
+   \input{esl_paml}
+   \subsection{Functions in the paml module}
+   \input{autotext/esl_paml_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Sequence annotation}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{wuss}: RNA secondary structure annotation}
+   \input{esl_wuss}
+   \subsection{Functions in the wuss module}
+   \input{autotext/esl_wuss_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Numerical computing}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{vectorops}: Vector operations}
+   \input{esl_vectorops}
+   \subsection{Functions in the vectorops module}
+   \input{autotext/esl_vectorops_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{dmatrix}: 2D matrices and linear algebra}
+   \input{esl_dmatrix}
+   \subsection{Functions in the dmatrix module}
+   \input{autotext/esl_dmatrix_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{minimizer}: Conjugate gradient descent}
+   \input{esl_minimizer}
+   \subsection{Functions in the minimizer module}
+   \input{autotext/esl_minimizer_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{rootfinder}: One-dimensional rootfinding}
+   \input{esl_rootfinder}
+   \subsection{Functions in the rootfinder module}
+   \input{autotext/esl_rootfinder_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Phylogenetic inference modules}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{tree}: Phylogenetic trees}
+   \input{esl_tree}
+   \subsection{Functions in the tree module}
+   \input{autotext/esl_tree_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+   \section{\eslmodincmd{distance}: Distance calculations}
+   \input{esl_distance}
+   \subsection{Functions in the distance module}
+   \input{autotext/esl_distance_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Statistics modules}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \begin{quote}
+   \emph{In any case, my experience is that while engaged in
+     cryptanalysis I started to believe in statistics!}\\
+   \hspace*{1em}\hfill -- Albrecht Beutelspacher, \emph{Cryptology}
+   \end{quote}
+
+   \input{statistics}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{stats}: Basic statistics routines}
+\input{esl_stats}
+\subsection{Functions in the stats module}
+\input{autotext/esl_stats_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{histogram}: Collecting histograms}
+\input{esl_histogram}
+\subsection{Functions in the histogram module}
+\input{autotext/esl_histogram_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{dirichlet}: Beta, Gamma, Dirichlet densities and priors}
+\input{esl_dirichlet}
+\subsection{Functions in the dirichlet module}
+\input{autotext/esl_dirichlet_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{exponential}: Exponential distributions}
+\input{esl_exponential}
+\subsection{Functions in the exponential module}
+\input{autotext/esl_exponential_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{gamma}: Gamma distributions}
+\input{esl_gamma}
+\subsection{Functions in the gamma module}
+\input{autotext/esl_gamma_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{gev}: Generalized extreme value distributions}
+\input{esl_gev}
+\subsection{Functions in the gev module}
+\input{autotext/esl_gev_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{gumbel}: Type I extreme value (Gumbel) statistics}
+\input{esl_gumbel}
+\subsection{Functions in the gumbel module}
+\input{autotext/esl_gumbel_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{hyperexp}: Hyperexponential distributions}
+\input{esl_hyperexp}
+\subsection{Functions in the hyperexp module}
+\input{autotext/esl_hyperexp_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{mixdchlet}: Mixture Dirichlet distributions}
+%\input{esl_mixdchlet}
+\subsection{Functions in the mixdchlet module}
+%\input{autotext/esl_mixdchlet_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{mixgev}: Mixture generalized extreme value distributions}
+%\input{esl_mixgev}
+%\subsection{Functions in the mixgev module}
+%\input{autotext/esl_mixgev_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{normal}: Normal (Gaussian) distributions}
+\input{esl_normal}
+\subsection{Functions in the normal module}
+\input{autotext/esl_normal_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{stretchexp}: Stretched exponential distributions}
+\input{esl_stretchexp}
+\subsection{Functions in the stretchexp module}
+\input{autotext/esl_stretchexp_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{weibull}: Weibull distributions}
+\input{esl_weibull}
+\subsection{Functions in the weibull module}
+\input{autotext/esl_weibull_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Utility modules}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\chapter{Core modules}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{buffer}: reading from any sort of input}
+\input{esl_buffer}
+\subsection{Functions in the buffer module}
+\input{autotext/esl_buffer_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{cluster}: single linkage clustering}
+\input{esl_cluster}
+\subsection{Functions in the cluster module}
+\input{autotext/esl_cluster_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{fileparser}: token-based data file input}
+\input{esl_fileparser}
+\subsection{Functions in the fileparser module}
+\input{autotext/esl_fileparser_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{getopts}: command line parsing}
+\input{esl_getopts}
+\subsection{Functions in the getopts module}
+\input{autotext/esl_getopts_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{keyhash}: associative hashes}
+\input{esl_keyhash}
+\subsection{Functions in the keyhash module}
+\input{autotext/esl_keyhash_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{random}: pseudorandom numbers and sampling}
+   \begin{quote}
+   \emph{Nec Babylonios temptaris numeros. \\
+   (Don't attempt the Babylonian numbers.)}\\
+   \hspace{3em} -- Horace, Ode 1.11. \\ 
+\end{quote}     
+\input{esl_random}
+\subsection{Functions in the random (rnd) module}
+\input{autotext/esl_random_functions}
+\vspace*{\fill}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{regexp}: regular expression matching}
+\input{esl_regexp}
+\subsection{Functions in the regexp module}
+\input{autotext/esl_regexp_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{stack}: pushdown stacks for integers, chars, and pointers}
+\input{esl_stack}
+\subsection{Functions in the stack module}
+\input{autotext/esl_stack_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{stopwatch}: timing parts of programs}
+\input{esl_stopwatch}
+\subsection{Functions in the stopwatch module}
+\input{autotext/esl_stopwatch_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+   \newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Optional parallel computing support}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{sse}: SIMD minivectors on Intel and AMD }
+\input{esl_sse}
+\subsection{Functions in the sse module}
+\input{autotext/esl_sse_functions}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{\eslmodincmd{mpi}: MPI parallelization}
+\input{esl_mpi}
+\subsection{Functions in the MPI module}
+\input{autotext/esl_mpi_functions}
+}{}
+
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{File formats}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\section{Stockholm format for multiple sequence alignments}
+\input{format_stockholm.tex}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\section{A2M format for multiple sequence alignments}
+\input{format_a2m.tex}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{WUSS notation for RNA secondary structures}
+\input{format_wuss.tex}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+\section{NCBI BLAST database foramt}
+\input{format_ncbi.tex}
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Developer's guide}
+
+\begin{quote}
+   \emph{This is the great nightmare, when you're doing something long
+     and hard, is you're terrified that it will be perceived as
+     gratuitously hard and difficult, that it is some
+     avant-garde-for-its-own-sake kind of exercise.}\\
+   \hspace*{1em}\hfill -- David Foster Wallace, speaking of \emph{Infinite Jest}
+\end{quote}
+
+   \input{codestyle}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Installation instructions}
+   \input{installation}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+}{}
+
+\ifthenelse{\boolean{completedraft}}{
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \chapter{Credits and acknowledgements}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   \begin{quote}
+   \emph{There are every year works published whose contents show them to
+     be by real lunatics.}
+   \hspace*{1em}\hfill -- William James, \emph{The Principles of Psychology}
+   \end{quote}
+}{}
+
+\newpage
+%\newcommand{\bibfont}{\footnotesize}
+\bibliographystyle{abbrvnat}
+%\bibliography{master,lab,books,new}
+\bibliography{master,lab,books}
+
+\end{document}
+
diff --git a/documentation/statistics.tex b/documentation/statistics.tex
new file mode 100644
index 0000000..d38135c
--- /dev/null
+++ b/documentation/statistics.tex
@@ -0,0 +1,103 @@
+
+\section{Overview of all the statistics modules}
+
+All statistics modules require the \eslmod{stats} module, in addition
+to the core \eslmod{easel} module.
+
+Sampling routines require augmentation with the \eslmod{random}
+module. Using histograms (including the \ccode{*\_Plot} functions and
+parameter fitting to binned data) requires augmentation with the
+\eslmod{histogram} module. Some parameter fitting functions require
+augmentation with the \eslmod{minimizer} module.
+
+\vspace{1em}
+\begin{tabular}{ll}\hline
+   \multicolumn{2}{c}{\textbf{Core support:}}\\
+\eslmod{stats}        & Shared and special functions. \\
+   \multicolumn{2}{c}{\textbf{Distributions:}}\\
+\eslmod{dirichlet}    & Dirichlet densities. \\
+\eslmod{exponential}  & Exponential densities.\\
+\eslmod{gamma}        & Gamma densities.\\
+\eslmod{gev}          & Generalized extreme value densities.\\
+\eslmod{gumbel}       & Gumbel densities.\\
+\eslmod{hyperexp}     & Hyperexponential densities.\\
+\eslmod{mixdchlet}    & Mixture Dirichlet densities.\\
+\eslmod{mixgev}       & Mixtures of generalized extreme value densities.\\
+\eslmod{stretchexp}   & Stretched exponential densities.\\
+\eslmod{weibull}      & Weibull densities.\\
+\hline
+\end{tabular}
+
+\subsection{Available densities and distributions}
+
+Every module implements seven functions:
+
+\begin{tabular}{lll}
+\ccode{esl\_*\_pdf}      & $P(X=x)$                     & probability density function\\
+\ccode{esl\_*\_logpdf}   & $\log P(X=x)$                & natural log of the PDF \\
+\ccode{esl\_*\_cdf}      & $P(X \leq x)$                & cumulative distribution function\\
+\ccode{esl\_*\_logcdf}   & $\log P(X \leq x)$           & natural log of the CDF\\
+\ccode{esl\_*\_surv}     & $P(X > x)$                   & survival function (right tail mass) \\
+\ccode{esl\_*\_logsurv}  & $\log P(X > x)$              & natural log of the survival function\\
+\ccode{esl\_*\_invcdf}   & ${ x \mid P(X \leq x) = p }$ & inverse CDF (often useful for sampling)\\
+\end{tabular}
+
+\subsubsection{Overview of parameters}
+
+A summary of the parameters of the elemental distributions is as
+follows:
+
+\begin{tabular}{lcccc} \hline
+\textbf{Distribution}&  \textbf{Location}  & \textbf{Scale} & \textbf{Shape} & \textbf{PDF} \\\hline
+\eslmod{dirichlet}   & \multicolumn{3}{c}{ $\alpha_i > 0$, $i=1..K$ } & 
+      $\frac{\Gamma{\sum_i \alpha_i}}{\prod_i \Gamma(\alpha_i)} \prod_i p_i^{\alpha_i-1}$\\
+\eslmod{exponential} &    $\mu$      &  $\lambda$     &   -          &    
+      $\lambda e^{-\lambda (x - \mu)}$\\
+\eslmod{gamma}       &    $\mu$      &  $\lambda$     &  $\tau$      & 
+      $ \frac{\lambda^{\tau}}{\Gamma(\tau)}  (x-\mu)^{\tau-1}  e^{-\lambda (x - \mu)} $\\
+\eslmod{gev}         &    $\mu$      &  $\lambda$     &  $\alpha$    & 
+      $ \lambda \left[ 1 + \alpha \lambda (x - \mu) \right]^{-\frac{\alpha+1}{\alpha}}
+        \exp \left\{ - \left[ 1 + \alpha \lambda (x - \mu)
+        \right]^{-\frac{1}{\alpha}} \right\} $\\
+\eslmod{gumbel}      &    $\mu$      &  $\lambda$     &   -          & 
+      $ \lambda \exp \left[ -\lambda (x - \mu) - e^{- \lambda (x - \mu)} \right] $\\
+\eslmod{stretchexp}  &    $\mu$      &  $\lambda$     &  $\tau$      &
+      $ \frac{\lambda \tau}{\Gamma(\frac{1}{\tau})} e^{- [\lambda(x-\mu)]^{\tau}} $\\
+\eslmod{weibull}     &    $\mu$      &  $\lambda$     &  $\tau$      &
+      $ \lambda \tau [\lambda(x - \mu)]^{\tau-1} e^{- [\lambda(x-\mu)]^{\tau}}$\\
+\hline
+\end{tabular}
+
+Additionally, there are \textbf{mixture distributions} composed of a
+sum of one of the above elemental densities:
+
+\vspace{1em}
+\begin{tabular}{ll} \hline
+\textbf{Distribution} &  \textbf{PDF}\\ \hline
+\eslmod{hyperexp}     &  $\sum_k q_k P(x \mid \mbox{exponential:}\mu^k,\lambda^k)$\\
+\eslmod{mixdchlet}    &  $\sum_k q_k P(\vec{p} \mid \mbox{Dirichlet:}\vec{\alpha}^k)$\\
+\eslmod{mixgev}       &  $\sum_k q_k P(x \mid \mbox{GEV:}\mu^k,\lambda^k,\alpha^k)$\\
+\hline
+\end{tabular}
+
+\subsubsection{Dynamic range}
+
+
+\subsection{Using histograms}
+
+\subsection{Parameter fitting}
+\subsubsection{Complete data}
+\subsubsection{Binned data}
+\subsubsection{Censored data}
+\subsubsection{Truncated data}
+
+
+
+\subsection{Sampling}
+
+
+
+
+
+
+
diff --git a/documentation/titlepage.tex b/documentation/titlepage.tex
new file mode 100644
index 0000000..55ee2ec
--- /dev/null
+++ b/documentation/titlepage.tex
@@ -0,0 +1,31 @@
+\begin{titlepage}
+{\Large
+
+\vspace*{\fill}
+
+\noindent
+{\Huge{Easel}} \\ 
+\rule[2pt]{\textwidth}{1pt} \\
+\hspace*{\fill} {\large {A library of C functions for
+    biological sequence analysis} \\ }
+
+\vspace*{\fill}
+
+\begin{center}
+\url{http://bioeasel.org/}\\
+Version 0.3dev; February 2016 \\ 
+
+\vspace*{\fill}
+
+Sean R. Eddy\\
+HHMI/Harvard University\\
+Dept. of Molecular and Cellular Biology\\
+Biological Laboratories 1008B\\
+16 Divinity Avenue\\
+Cambridge, Massachusetts 02138\\
+\url{http://eddylab.org/}\\
+\end{center}
+
+\vspace*{\fill}
+}
+\end{titlepage}
diff --git a/documentation/typography.tex b/documentation/typography.tex
new file mode 100644
index 0000000..622a808
--- /dev/null
+++ b/documentation/typography.tex
@@ -0,0 +1,31 @@
+\documentclass[10pt]{book}
+\usepackage{bookman}
+
+\usepackage{relsize}   % the \smaller command, used in \ccode for example
+\usepackage{fancyvrb}
+\usepackage[numbers,sort&compress]{natbib}
+\usepackage[pdftex]{graphicx}
+\usepackage[backref,colorlinks]{hyperref}
+
+\input{macros}
+
+\begin{document}
+
+This is a test document for looking at alternatives for typography in
+Easel.
+
+Source code, command lines, and output are shown \ccode{like this}. 
+
+User input is shown \emcode{like this}.
+
+Names of software and database distribution packages are in small
+caps, as in \prog{blast}.  (In our \LaTeX\ code, we have shortcuts for
+the \Easel\, \HMMER\, \Infernal\, \Pfam\, and \Rfam\ packages.)
+
+A \esldef{new term} is set in bold font when first defined, and
+associated with an entry in the index.
+
+Names of Easel's modules appear like this: \eslmod{buffer}.
+
+\end{document}
+
diff --git a/easel.c b/easel.c
new file mode 100644
index 0000000..4c5a2cf
--- /dev/null
+++ b/easel.c
@@ -0,0 +1,2338 @@
+/* Easel's foundation.
+ * 
+ * Contents:
+ *    1. Exception and fatal error handling.
+ *    2. Memory allocation/deallocation conventions.
+ *    3. Standard banner for Easel miniapplications.
+ *    4. Improved replacements for some C library functions.
+ *    5. Portable drop-in replacements for nonstandard C functions.
+ *    6. Additional string functions, esl_str*()
+ *    7. File path/name manipulation, including tmpfiles.
+ *    8. Typed comparison functions.
+ *    9. Unit tests.
+ *   10. Test driver.
+ *   11. Examples. 
+ *   12. Copyright and license. 
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <string.h>
+#include <math.h>
+#include <ctype.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>		
+#endif
+#ifdef _POSIX_VERSION
+#include <sys/stat.h>
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_MPI
+#include <mpi.h>		/* MPI_Abort() may be used in esl_fatal() or other program killers */
+#endif
+
+#include "easel.h"
+
+
+/*****************************************************************
+ * 1. Exception and fatal error handling.
+ *****************************************************************/
+static esl_exception_handler_f esl_exception_handler = NULL;
+
+/* Function:  esl_fail()
+ * Synopsis:  Handle a normal failure code/message before returning to caller.
+ *
+ * Purpose:   A "failure" is a normal error that we want to handle
+ *            without terminating the program; we're going to return
+ *            control to the caller with a nonzero error code and
+ *            (optionally) an informative error message formatted
+ *            in <errbuf>.
+ *            
+ *            <esl_fail()> is called internally by the <ESL_FAIL()>
+ *            and <ESL_XFAIL()> macros (see easel.h). The reason to
+ *            have the failure macros call such a simple little
+ *            function is to give us a convenient debugging
+ *            breakpoint. For example, in a <_Validate()> routine that
+ *            needs to do a normal return to a caller, you can set a
+ *            breakpoint in <esl_fail()> to see exactly where the
+ *            validation failed.
+ */
+void
+esl_fail(char *errbuf, const char *format, ...)
+{
+  if (format) {
+    va_list ap;
+    va_start(ap, format);
+    if (errbuf) vsnprintf(errbuf, eslERRBUFSIZE, format, ap);
+    va_end(ap);
+  }
+}
+
+
+/* Function:  esl_exception()
+ * Synopsis:  Throw an exception.
+ *
+ * Purpose:   Throw an exception. An "exception" is defined by Easel
+ *            as an internal error that shouldn't happen and/or is 
+ *            outside the user's control; as opposed to "failures", that       
+ *            are to be expected, and within user control, and
+ *            therefore normal. By default, exceptions are fatal.
+ *            A program that wishes to be more robust can register
+ *            a non-fatal exception handler.
+ *            
+ *            Easel programs normally call one of the exception-handling
+ *            wrappers <ESL_EXCEPTION()> or <ESL_XEXCEPTION()>, which
+ *            handle the overhead of passing in <use_errno>, <sourcefile>,
+ *            and <sourceline>. <esl_exception> is rarely called directly.
+ *            
+ *            If no custom exception handler has been registered, the
+ *            default behavior is to print a brief message to <stderr>
+ *            then <abort()>, resulting in a nonzero exit code from the
+ *            program.  Depending on what <errcode>, <sourcefile>,
+ *            <sourceline>, and the <sprintf()>-formatted <format>
+ *            are, this output looks like:
+ *            
+ *            Fatal exception (source file foo.c, line 42):
+ *            Something wicked this way came.
+ *
+ *            Additionally, in an MPI parallel program, the default fatal 
+ *            handler aborts all processes (with <MPI_Abort()>), not just
+ *            the one that called <esl_exception()>. 
+ *            
+ * Args:      errcode     - Easel error code, such as eslEINVAL. See easel.h.
+ *            use_errno   - if TRUE, also use perror() to report POSIX errno message.
+ *            sourcefile  - Name of offending source file; normally __FILE__.
+ *            sourceline  - Name of offending source line; normally __LINE__.
+ *            format      - <sprintf()> formatted exception message, followed
+ *                          by any additional necessary arguments for that 
+ *                          message.
+ *                          
+ * Returns:   void. 
+ *
+ * Throws:    No abnormal error conditions. (Who watches the watchers?)
+ */
+void
+esl_exception(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, ...)
+{
+  va_list argp;
+#ifdef HAVE_MPI
+  int     mpiflag;
+#endif
+
+  if (esl_exception_handler != NULL) 
+    {
+      va_start(argp, format);
+      (*esl_exception_handler)(errcode, use_errno, sourcefile, sourceline, format, argp);
+      va_end(argp);
+      return;
+    } 
+  else 
+    {
+      fprintf(stderr, "Fatal exception (source file %s, line %d):\n", sourcefile, sourceline);
+      va_start(argp, format);
+      vfprintf(stderr, format, argp);
+      va_end(argp);
+      fprintf(stderr, "\n");
+      if (use_errno && errno) perror("system error");
+      fflush(stderr);
+#ifdef HAVE_MPI
+      MPI_Initialized(&mpiflag);                 /* we're assuming we can do this, even in a corrupted, dying process...? */
+      if (mpiflag) MPI_Abort(MPI_COMM_WORLD, 1);
+#endif
+      abort();
+    }
+}
+
+/* Function:  esl_exception_SetHandler()
+ * Synopsis:  Register a different exception handling function.
+ *
+ * Purpose:   Register a different exception handling function,
+ *            <handler>. When an exception occurs, the handler
+ *            receives at least four arguments: <errcode>, <sourcefile>,
+ *            <sourceline>, and <format>. 
+ * 
+ *            <errcode> is an Easel error code, such as
+ *            <eslEINVAL>. See <easel.h> for a list of all codes.
+ * 
+ *            <use_errno> is TRUE for POSIX system call failures. The
+ *            handler may then use POSIX <errno> to format/print an
+ *            additional message, using <perror()> or <strerror_r()>.
+ *           
+ *            <sourcefile> is the name of the Easel source code file
+ *            in which the exception occurred, and <sourceline> is 
+ *            the line number.
+ *            
+ *            <format> is a <vprintf()>-formatted string, followed by
+ *            a <va_list> containing any additional arguments that
+ *            formatted message needs.  Your custom exception handler
+ *            will probably use <vfprintf()> or <vsnprintf()> to format
+ *            its error message.
+ *            
+ * Args:      handler -  ptr to your custom exception handler.
+ *
+ * Returns:   void.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+void
+esl_exception_SetHandler(void (*handler)(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, va_list argp))
+{ 
+  esl_exception_handler = handler; 
+}
+
+
+/* Function:  esl_exception_ResetDefaultHandler()
+ * Synopsis:  Restore default exception handling.
+ *
+ * Purpose:   Restore default exception handling, which is to print
+ *            a simple error message to <stderr> then <abort()> (see
+ *            <esl_exception()>. 
+ *      
+ *            An example where this might be useful is in a program
+ *            that only temporarily wants to catch one or more types
+ *            of normally fatal exceptions.
+ *            
+ *            If the default handler is already in effect, this 
+ *            call has no effect (is a no-op).
+ *
+ * Args:      (void)
+ *
+ * Returns:   (void)
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+void
+esl_exception_ResetDefaultHandler(void)
+{
+  esl_exception_handler = NULL; 
+}
+
+
+/* Function: esl_nonfatal_handler()
+ * Synopsis: A trivial example of a nonfatal exception handler.
+ * 
+ * Purpose:  This serves two purposes. First, it is the simplest
+ *           example of a nondefault exception handler. Second, this
+ *           is used in test harnesses, when they have
+ *           <eslTEST_THROWING> turned on to test that thrown errors
+ *           are handled properly when a nonfatal error handler is
+ *           registered by the application.
+ *           
+ * Args:      errcode     - Easel error code, such as eslEINVAL. See easel.h.
+ *            use_errno   - TRUE on POSIX system call failures; use <errno> 
+ *            sourcefile  - Name of offending source file; normally __FILE__.
+ *            sourceline  - Name of offending source line; normally __LINE__.
+ *            format      - <sprintf()> formatted exception message.
+ *            argp        - <va_list> containing any additional necessary arguments for 
+ *                          the <format> message.
+ *                          
+ * Returns:   void. 
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+void
+esl_nonfatal_handler(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, va_list argp)
+{
+  return; 
+}
+
+
+/* Function:  esl_fatal()
+ * Synopsis:  Kill a program immediately, for a "violation".
+ *
+ * Purpose:   Kill a program for a "violation". In general this should only be used
+ *            in development or testing code, not in production
+ *            code. The main use of <esl_fatal()> is in unit tests.
+ *            Another use is in assertions used in dev code.
+ *            
+ *            The only other case (and the only case that should be allowed in
+ *            production code) is in a true "function" (a function that returns
+ *            its answer, rather than an Easel error code), where Easel error
+ *            conventions can't be used (because it can't return an error code),
+ *            AND the error is guaranteed to be a coding error. For an example,
+ *            see <esl_opt_IsOn()>, which triggers a violation if the code
+ *            checks for an option that isn't in the code.
+ *            
+ *            In an MPI-parallel program, the entire job is
+ *            terminated; all processes are aborted (<MPI_Abort()>,
+ *            not just the one that called <esl_fatal()>.
+ *            
+ *            If caller is feeling lazy and just wants to terminate
+ *            without any informative message, use <abort()>.
+ * 
+ * Args:      format  - <sprintf()> formatted exception message, followed
+ *                      by any additional necessary arguments for that 
+ *                      message. 
+ *
+ * Returns:   (void)
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+void
+esl_fatal(const char *format, ...)
+{
+  va_list argp;
+#ifdef HAVE_MPI
+  int mpiflag;
+#endif
+
+  va_start(argp, format);
+  vfprintf(stderr, format, argp);
+  va_end(argp);
+  fprintf(stderr, "\n");
+  fflush(stderr);
+
+#ifdef HAVE_MPI
+  MPI_Initialized(&mpiflag);
+  if (mpiflag) MPI_Abort(MPI_COMM_WORLD, 1);
+#endif
+  exit(1);
+}
+/*---------------- end, error handling conventions --------------*/
+
+
+
+
+/*****************************************************************
+ * 2. Memory allocation/deallocation conventions.
+ *****************************************************************/
+
+/* Function:  esl_Free2D()
+ *
+ * Purpose:   Free a 2D pointer array <p>, where first dimension is
+ *            <dim1>. (That is, the array is <p[0..dim1-1][]>.)
+ *            Tolerates any of the pointers being NULL, to allow
+ *            sparse arrays.
+ *
+ * Returns:   void.
+ */
+void
+esl_Free2D(void **p, int dim1)
+{
+  int i;
+  if (p != NULL) {
+    for (i = 0; i < dim1; i++)
+      if (p[i] != NULL) free(p[i]);
+    free(p);
+  }
+  return;
+}
+
+/* Function:  esl_Free3D()
+ *
+ * Purpose:   Free a 3D pointer array <p>, where first and second
+ *            dimensions are <dim1>,<dim2>. (That is, the array is
+ *            <p[0..dim1-1][0..dim2-1][]>.) Tolerates any of the
+ *            pointers being NULL, to allow sparse arrays.
+ *
+ * Returns:   void.
+ */
+void
+esl_Free3D(void ***p, int dim1, int dim2)
+{
+  int i, j;
+
+  if (p != NULL) {
+    for (i = 0; i < dim1; i++)
+      if (p[i] != NULL) {
+        for (j = 0; j < dim2; j++)
+          if (p[i][j] != NULL) free(p[i][j]);
+        free(p[i]);
+      }
+    free(p);
+  }
+}
+/*------------- end, memory allocation conventions --------------*/
+
+
+
+/*****************************************************************
+ * 3. Standard banner for Easel miniapplications.
+ *****************************************************************/
+
+/* Function:  esl_banner()
+ * Synopsis:  print standard Easel application output header
+ *
+ * Purpose:   Print the standard Easel command line application banner
+ *            to <fp>, constructing it from <progname> (the name of the
+ *            program) and a short one-line description <banner>.
+ *            For example, 
+ *            <esl_banner(stdout, "compstruct", "compare RNA structures");>
+ *            might result in:
+ *            
+ *            \begin{cchunk}
+ *            # compstruct :: compare RNA structures
+ *            # Easel 0.1 (February 2005)
+ *            # Copyright (C) 2004-2007 HHMI Janelia Farm Research Campus
+ *            # Freely licensed under the Janelia Software License.
+ *            # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ *            \end{cchunk}
+ *              
+ *            <progname> would typically be an application's
+ *            <argv[0]>, rather than a fixed string. This allows the
+ *            program to be renamed, or called under different names
+ *            via symlinks. Any path in the <progname> is discarded;
+ *            for instance, if <progname> is "/usr/local/bin/esl-compstruct",
+ *            "esl-compstruct" is used as the program name.
+ *            
+ * Note:    
+ *    Needs to pick up preprocessor #define's from easel.h,
+ *    as set by ./configure:
+ *            
+ *    symbol          example
+ *    ------          ----------------
+ *    EASEL_VERSION   "0.1"
+ *    EASEL_DATE      "May 2007"
+ *    EASEL_COPYRIGHT "Copyright (C) 2004-2007 HHMI Janelia Farm Research Campus"
+ *    EASEL_LICENSE   "Freely licensed under the Janelia Software License."
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslEWRITE> on write error.
+ */
+int
+esl_banner(FILE *fp, char *progname, char *banner)
+{
+  char *appname = NULL;
+  int   status;
+
+  if ((status = esl_FileTail(progname, FALSE, &appname)) != eslOK) return status;
+
+  if (fprintf(fp, "# %s :: %s\n", appname, banner)                                               < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed");
+  if (fprintf(fp, "# Easel %s (%s)\n", EASEL_VERSION, EASEL_DATE)                                < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed");
+  if (fprintf(fp, "# %s\n", EASEL_COPYRIGHT)                                                     < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed");
+  if (fprintf(fp, "# %s\n", EASEL_LICENSE)                                                       < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed");
+  if (fprintf(fp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed");
+
+  if (appname) free(appname);
+  return eslOK;
+
+ ERROR:
+  if (appname) free(appname);
+  return status;
+}
+
+
+/* Function:  esl_usage()
+ * Synopsis:  print standard Easel application usage help line
+ *
+ * Purpose:   Given a usage string <usage> and the name of the program
+ *            <progname>, output a standardized usage/help
+ *            message. <usage> is minimally a one line synopsis like
+ *            "[options] <filename>", but it may extend to multiple
+ *            lines to explain the command line arguments in more 
+ *            detail. It should not describe the options; that's the
+ *            job of the getopts module, and its <esl_opt_DisplayHelp()> 
+ *            function.
+ *            
+ *            This is used by the Easel miniapps, and may be useful in
+ *            other applications as well.
+ *
+ *            As in <esl_banner()>, the <progname> is typically passed
+ *            as <argv[0]>, and any path prefix is ignored.
+ *            
+ *            For example, if <argv[0]> is </usr/local/bin/esl-compstruct>,
+ *            then 
+ *            
+ *            \begin{cchunk}
+ *              esl_usage(stdout, argv[0], "[options] <trusted file> <test file>">
+ *            \end{cchunk}
+ *            
+ *            produces
+ *            
+ *            \begin{cchunk}
+ *              Usage: esl-compstruct [options] <trusted file> <test file>
+ *            \end{cchunk}  
+ *              
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEWRITE> on write failure.
+ */
+int
+esl_usage(FILE *fp, char *progname, char *usage)
+{
+  char *appname = NULL;
+  int   status;
+
+  if ( (status = esl_FileTail(progname, FALSE, &appname)) != eslOK) return status;
+
+  if (fprintf(fp, "Usage: %s %s\n", appname, usage) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed");
+
+  if (appname) free(appname);
+  return eslOK;
+
+ ERROR:
+  if (appname) free(appname);
+  return status;
+}
+
+
+/* Function:  esl_dataheader()
+ * Synopsis:  Standard #-prefixed header lines for output data table
+ *
+ * Purpose:   Print column headers for a space-delimited, fixed-column-width
+ *            data table to <fp>.
+ * 
+ *            Takes a variable number of argument pairs. Each pair is
+ *            <width, label>. The absolute value of <width> is the max
+ *            width of the column. <label> is the column label.
+ *            
+ *            If <width> is negative, left justify the label. (This is
+ *            supposed to mirror the %-8s vs %8s of a printf format.)
+ *             
+ *            Caller marks the end of the argument list
+ *            with a 0 sentinel.
+ *            
+ *            Example: <esl_dataheader(stdout, 8, "name", 3, "A", -4, "B", 0)>
+ *            gives three columns:
+ *            
+ *            \begin{cchunk}
+ *            # name     A B
+ *            #------- --- ----
+ *            \end{cchunk}
+ *            
+ *            The <width> arguments match the widths given in
+ *            <fprintf()>'s or whatever generates the data rows.
+ *            Because the first header line is prefixed by \verb+#+, the
+ *            first column's width argument is inclusive of these two
+ *            extra chars, and therefore the first column label must
+ *            have no more than its <width>-2 chars.  For all other
+ *            column labels, a label's length cannot exceed its
+ *            <width>.
+ *            
+ *            Up to 1024 columns are allowed. (The only reason there's
+ *            a limit is because you're going to forget to add the 0
+ *            sentinel, and we don't want to risk a <while(1)> infinite
+ *            loop.)
+ *
+ * Args:      <fp>                 : output stream
+ *            [<width>, <label]... : width, label pairs
+ *            0                    : sentinel for end of argument list
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if a label is too wide for its width, or if
+ *            the number of columns exceeds the max limit.
+ *            <eslEWRITE> if a write to <fp> fails, which can happen
+ *            if a disk fills up, for example.
+ */
+int 
+esl_dataheader(FILE *fp, ...)
+{
+  va_list ap, ap2;
+  int     width, len;
+  char   *s;
+  int     col     = 0;
+  int     maxcols = 1024;  // limit, to avoid scary while(1) alternative
+  int     leftjustify;
+  int     status;
+
+  va_start(ap, fp);
+  va_copy(ap2, ap);
+  if ( fputc('#', fp) == EOF) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed");
+  for (col = 0; col < maxcols; col++)
+    {
+      width = va_arg(ap, int);
+      if (width == 0) break;
+      if (width < 0)  { leftjustify = TRUE;  width = -width; }
+      else            { leftjustify = FALSE;                 }
+      if (col == 0)  width -= 2;   // First column header -2 char for the "# " prefix
+
+      s   = va_arg(ap, char *);
+      len = strlen(s);
+      if (len > width) {
+	if (col == 0) ESL_XEXCEPTION(eslEINVAL, "esl_dataheader(): first arg (%s) too wide for %d-char column ('# ' leader took 2 chars)", col, s, width+2);
+	else          ESL_XEXCEPTION(eslEINVAL, "esl_dataheader(): arg %d (%s) too wide for %d-char column", col, s, width);
+      }
+
+      if (leftjustify) { if ( fprintf(fp, " %-*s", width, s) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); }
+      else             { if ( fprintf(fp, " %*s",  width, s) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); }
+    }
+  if (col == maxcols)          ESL_XEXCEPTION(    eslEINVAL, "esl_dataheader(): too many args");
+  if ( fputc('\n', fp) == EOF) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed");
+
+  maxcols = col;
+  for (col = 0; col < maxcols; col++)
+    {
+      width = va_arg(ap2, int);
+      if (width < 0) width = -width;
+      if (col == 0) width -= 1;   
+      (void) va_arg(ap2, char *);
+
+      if (col == 0) { if ( fputc('#', fp)   == EOF) ESL_EXCEPTION_SYS(eslEWRITE, "write failed");  }
+      else          { if ( fputc(' ', fp)   == EOF) ESL_EXCEPTION_SYS(eslEWRITE, "write failed");  }
+      while (width--) 
+	if ( fputc('-', fp) == EOF) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); 
+    }
+  if (fputc('\n', fp)       == EOF) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); 
+
+  va_end(ap);
+  va_end(ap2);
+  return eslOK;
+  
+ ERROR:
+  va_end(ap);
+  va_end(ap2);
+  return status;
+}
+
+
+/*-------------------- end, standard miniapp banner --------------------------*/
+
+
+
+
+/******************************************************************************
+ * 4. Replacements for C library functions
+ *  fgets()   ->  esl_fgets()     fgets() with dynamic allocation
+ *  strdup()  ->  esl_strdup()    strdup() is not ANSI
+ *  strcat()  ->  esl_strcat()    strcat() with dynamic allocation
+ *  strtok()  ->  esl_strtok()    threadsafe strtok()
+ *  sprintf() ->  esl_sprintf()   sprintf() with dynamic allocation
+ *  strcmp()  ->  esl_strcmp()    strcmp() tolerant of NULL strings
+ *****************************************************************************/
+
+/* Function: esl_fgets()
+ *
+ * Purpose:  Dynamic allocation version of fgets(),
+ *           capable of reading almost unlimited line lengths.
+ *
+ * Args:     buf - ptr to a string (may be reallocated)
+ *           n   - ptr to current allocated length of buf,
+ *                 (may be changed)
+ *           fp  - open file ptr for reading
+ *           
+ *           Before the first call to esl_fgets(), 
+ *           initialize buf to NULL and n to 0.
+ *           They're a linked pair, so don't muck with the
+ *           allocation of buf or the value of n while
+ *           you're still doing esl_fgets() calls with them.
+ *
+ * Returns:  <eslOK> on success. 
+ *           Returns <eslEOF> on normal end-of-file.
+ *
+ *           When <eslOK>:
+ *           <*buf> points to a <NUL>-terminated line from the file.
+ *           <*n> contains the current allocated length for <*buf>.
+ * 
+ *           Caller must free <*buf> eventually. 
+ *
+ * Throws:   <eslEMEM> on an allocation failure.
+ *
+ * Example:  char *buf = NULL;
+ *           int   n   = 0;
+ *           FILE *fp  = fopen("my_file", "r");
+ *
+ *           while (esl_fgets(&buf, &n, fp) == eslOK) 
+ *           {
+ *             do stuff with buf;
+ *           }
+ *           if (buf != NULL) free(buf);
+ */
+int
+esl_fgets(char **buf, int *n, FILE *fp)
+{
+  int   status;
+  char *s;
+  int   len;
+  int   pos;
+
+  if (*n == 0) 
+    {
+      ESL_ALLOC(*buf, sizeof(char) * 128);
+      *n   = 128;
+    }
+
+  /* Simple case 1. We're sitting at EOF, or there's an error.
+   *                fgets() returns NULL, so we return EOF.
+   */
+  if (fgets(*buf, *n, fp) == NULL) return eslEOF;
+
+  /* Simple case 2. fgets() got a string, and it reached EOF doing it.
+   *                return success status, so caller can use
+   *                the last line; on the next call we'll
+   *                return the 0 for the EOF.
+   */
+  if (feof(fp)) return eslOK;
+
+  /* Simple case 3. We got a complete string, with \n,
+   *                and don't need to extend the buffer.
+   */
+  len = strlen(*buf);
+  if ((*buf)[len-1] == '\n') return eslOK;
+
+  /* The case we're waiting for. We have an incomplete string,
+   * and we have to extend the buffer one or more times. Make
+   * sure we overwrite the previous fgets's \0 (hence +(n-1)
+   * in first step, rather than 128, and reads of 129, not 128).
+   */
+  pos = (*n)-1;
+  while (1) {
+    ESL_REALLOC(*buf, sizeof(char) * (*n+128));
+    *n  += 128;
+    s = *buf + pos;
+    if (fgets(s, 129, fp) == NULL) return eslOK;
+    len = strlen(s);
+    if (s[len-1] == '\n') return eslOK;
+    pos += 128;
+  } 
+  /*NOTREACHED*/
+  return eslOK;
+
+ ERROR:
+  if (*buf != NULL) free(*buf);
+  *buf = NULL;
+  *n   = 0;
+  return status;
+}
+
+/* Function: esl_strdup()
+ *
+ * Purpose: Makes a duplicate of string <s>, puts it in <ret_dup>.
+ *          Caller can pass string length <n>, if it's known,
+ *          to save a strlen() call; else pass -1 to have the string length
+ *          determined.
+ *          
+ *          Tolerates <s> being <NULL>; in which case,
+ *          returns <eslOK> with <*ret_dup> set to <NULL>.
+ *
+ * Args:     s       - string to duplicate (NUL-terminated)
+ *           n       - length of string, if known; -1 if unknown.
+ *           ret_dup - RETURN: duplicate of <s>.
+ *                
+ * Returns:  <eslOK> on success, and <ret_dup> is valid.
+ *
+ * Throws:   <eslEMEM> on allocation failure.
+ */
+int
+esl_strdup(const char *s, int64_t n, char **ret_dup)
+{
+  int   status;
+  char *new = NULL;
+
+  if (s == NULL) {*ret_dup = NULL; return eslOK; }
+  if (n < 0) n = strlen(s);
+
+  ESL_ALLOC(new, sizeof(char) * (n+1));
+  strcpy(new, s);
+
+  *ret_dup = new; 
+  return eslOK;
+
+ ERROR:
+  if (new) free(new);
+  *ret_dup = NULL;
+  return status;
+}
+
+
+/* Function: esl_strcat()
+ *
+ * Purpose:  Dynamic memory version of strcat().
+ *           Appends <src> to the string that <dest> points to,
+ *           extending allocation for dest if necessary. Caller
+ *           can optionally provide the length of <*dest> in
+ *           <ldest>, and the length of <src> in <lsrc>; if 
+ *           either of these is -1, <esl_strcat()> calls <strlen()>
+ *           to determine the length. Providing length information,
+ *           if known, accelerates the routine.
+ *           
+ *           <*dest> may be <NULL>, in which case this is equivalent
+ *           to a <strdup()> of <src> (that is, <*dest> is allocated
+ *           rather than reallocated). 
+ *           
+ *           <src> may be <NULL>, in which case <dest> is unmodified.
+ *           
+ * Note:     One timing experiment (100 successive appends of 
+ *           1-255 char) shows esl_strcat() has about a 20%
+ *           overhead relative to strcat(). If optional
+ *           length info is passed, esl_strcat() is about 30%
+ *           faster than strcat().
+ *           
+ * Args:     dest  - ptr to string (char **), '\0' terminated
+ *           ldest - length of dest, if known; or -1 if length unknown.
+ *           src   - string to append to dest, '\0' terminated       
+ *           lsrc  - length of src, if known; or -1 if length unknown.
+ *
+ * Returns:  <eslOK> on success; <*dest> is (probably) reallocated, 
+ *           modified, and nul-terminated.
+ *           
+ * Throws:   <eslEMEM> on allocation failure; initial state of <dest> 
+ *           is unaffected.
+ */
+int
+esl_strcat(char **dest, int64_t ldest, const char *src, int64_t lsrc)
+{
+  int       status;
+  int64_t   len1, len2;
+
+  if (ldest < 0) len1 = ((*dest == NULL) ? 0 : strlen(*dest));
+  else           len1 = ldest;
+
+  if (lsrc < 0)  len2 = ((  src == NULL) ? 0 : strlen(src)); 
+  else           len2 = lsrc;
+
+  if (len2 == 0) return eslOK;
+
+  ESL_REALLOC(*dest, sizeof(char) * (len1+len2+1));
+
+  memcpy((*dest)+len1, src, len2);
+  (*dest)[len1+len2] = '\0';
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_strmapcat()
+ * Synopsis:  Version of esl_strcat that uses an inmap.
+ *
+ * Purpose:   Append the contents of string or memory line <src>
+ *            of length <lsrc> to a string. The destination 
+ *            string and its length are passed as pointers <*dest>
+ *            and <*ldest>, so the string can be reallocated
+ *            and the length updated. When appending, map each
+ *            character <src[i]> to a new character <inmap[src[i]]>
+ *            in the destination string. The destination string
+ *            <*dest> is NUL-terminated on return (even if it 
+ *            wasn't to begin with).
+ *            
+ *            One reason to use the inmap is to enable parsers to
+ *            ignore some characters in an input string or buffer,
+ *            such as whitespace (mapped to <eslDSQ_IGNORED>).  Of
+ *            course this means, unlike <esl_strcat()> the new length
+ *            isn't just <ldest+lsrc>, because we don't know how many
+ *            characters get appended until we've processed them
+ *            through the inmap -- that's why this function takes
+ *            <*ldest> by reference, whereas <esl_strcat()> takes it
+ *            by value.
+ *            
+ *            If <*dest> is a NUL-terminated string and the caller
+ *            doesn't know its length, <*ldest> may be passed as -1.
+ *            Providing the length saves a <strlen()> call. If <*dest>
+ *            is a memory line, providing <*ldest> is mandatory.  Same
+ *            goes for <src> and <lsrc>.
+ *            
+ *            <*dest> may be <NULL>, in which case it is allocated
+ *            and considered to be an empty string to append to. 
+ *            When <*dest> is <NULL> the input <*ldest> should be <0>
+ *            or <-1>.
+ *
+ *            The caller must provide a <src> that it already knows
+ *            should be entirely appended to <*dest>, except for
+ *            perhaps some ignored characters. No characters may be
+ *            mapped to <eslDSQ_EOL> or <eslDSQ_EOD>. The reason for
+ *            this is that we're going to allocate <*dest> for
+ *            <*ldest+lsrc> chars. If <src> were a large memory buffer,
+ *            only a fraction of which needed to be appended (up to
+ *            an <eslDSQ_EOL> or <eslDSQ_EOD>), this reallocation would
+ *            be inefficient.
+ *
+ * Args:       inmap  - an Easel input map, inmap[0..127];
+ *                      inmap[0] is special: set to the 'unknown' character to
+ *                      replace invalid input chars.
+ *            *dest   - destination string or memory to append to, passed by reference
+ *            *ldest  - length of <*dest> (or -1), passed by reference
+ *             src    - string or memory to inmap and append to <*dest>
+ *             lsrc   - length of <src> to map and append (or -1).
+ *
+ * Returns:   <eslOK> on success. Upon successful return, <*dest> is
+ *            reallocated and contains the new string (with from 0 to <lsrc>
+ *            appended characters), NUL-terminated.
+ *            
+ *            <eslEINVAL> if one or more characters in the input <src>
+ *            are mapped to <eslDSQ_ILLEGAL>. Appending nonetheless
+ *            proceeds to completion, with any illegal characters
+ *            represented as '?' in <*dest> and counted in <*ldest>.
+ *            This is a normal error, because the string <src> may be
+ *            user input. The caller may want to call some sort of
+ *            validation function on <src> if an <eslEINVAL> error is
+ *            returned, in order to report some helpful diagnostics to
+ *            the user.
+ *
+ * Throws:    <eslEMEM> on allocation or reallocation failure.
+ *            <eslEINCONCEIVABLE> on internal coding error; for example,
+ *            if the inmap tries to map an input character to <eslDSQ_EOD>,
+ *            <eslDSQ_EOL>, or <eslDSQ_SENTINEL>. On exceptions, <*dest>
+ *            and <*ldest> should not be used by the caller except to
+ *            free <*dest>; their state may have been corrupted.
+ *
+ * Note:      This deliberately mirrors <esl_abc_dsqcat()>, so
+ *            that sequence file parsers have comparable behavior whether
+ *            they're working with text-mode or digital-mode input.
+ *            
+ *            Might be useful to create a variant that also handles
+ *            eslDSQ_EOD (and eslDSQ_EOL?) and returns the number of
+ *            residues parsed. This'd allow a FASTA parser, for
+ *            instance, to use this method while reading buffer pages
+ *            rather than lines; it could define '>' as eslDSQ_EOD.
+ */
+int
+esl_strmapcat(const ESL_DSQ *inmap, char **dest, int64_t *ldest, const char *src, esl_pos_t lsrc)
+{
+  int       status = eslOK;
+
+  if (*ldest < 0) *ldest = ( (*dest) ? strlen(*dest) : 0);
+  if ( lsrc  < 0)  lsrc  = ( (*src)  ? strlen(src)   : 0);
+
+  if (lsrc == 0) goto ERROR;	/* that'll return eslOK, leaving *dest untouched, and *ldest its length. */
+
+  ESL_REALLOC(*dest, sizeof(char) * (*ldest + lsrc + 1)); /* includes case of a new alloc of *dest */
+  return esl_strmapcat_noalloc(inmap, *dest, ldest, src, lsrc);
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_strmapcat_noalloc()
+ * Synopsis:  Version of esl_strmapcat() that does no reallocation.
+ *
+ * Purpose:   Same as <esl_strmapcat()>, but with no reallocation.  The
+ *            pointer to the destination string <dest> is passed by
+ *            value, not by reference, because it will not be changed.
+ *            Caller has allocated at least <*ldest + lsrc + 1> bytes
+ *            in <dest>. In this version, <*ldest> and <lsrc> are not
+ *            optional; caller must know the lengths of both the old
+ *            string and the new source.
+ * 
+ * Note:      (see note on esl_abc_dsqcat_noalloc() for rationale)
+ */
+int
+esl_strmapcat_noalloc(const ESL_DSQ *inmap, char *dest, int64_t *ldest, const char *src, esl_pos_t lsrc)
+{
+  int64_t   xpos;
+  esl_pos_t cpos;
+  ESL_DSQ   x;
+  int       status = eslOK;
+
+  for (xpos = *ldest, cpos = 0; cpos < lsrc; cpos++)
+    {
+      if (! isascii(src[cpos])) { dest[xpos++] = inmap[0]; status = eslEINVAL;  continue; }
+
+      x = inmap[(int) src[cpos]];
+      if       (x <= 127)      dest[xpos++] = x;
+      else switch (x) {
+	case eslDSQ_SENTINEL:  ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_SENTINEL"); break;
+	case eslDSQ_ILLEGAL:   dest[xpos++] = inmap[0]; status = eslEINVAL;                              break;
+	case eslDSQ_IGNORED:   break;
+	case eslDSQ_EOL:       ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_EOL");      break;
+	case eslDSQ_EOD:       ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_EOD");      break;
+	default:               ESL_EXCEPTION(eslEINCONCEIVABLE, "bad inmap, no such ESL_DSQ code");      break;
+	}
+    }
+
+  dest[xpos] = '\0';
+  *ldest = xpos;
+  return status;
+}
+
+
+/* Function: esl_strtok()
+ * Synopsis: Threadsafe version of C's <strtok()>
+ *
+ * Purpose:  Thread-safe version of <strtok()> for parsing next token in
+ *           a string.
+ *          
+ *           Increments <*s> while <**s> is a character in <delim>,
+ *           then stops; the first non-<delim> character defines the
+ *           beginning of a token. Increments <*s> until it reaches
+ *           the next delim character (or \verb+\0+); this defines the end
+ *           of the token, and this character is replaced with
+ *           \verb+\0+. <*s> is then reset to point to the next character
+ *           after the \verb+\0+ that was written, so successive calls can
+ *           extract tokens in succession. Sets <*ret_tok> to point at
+ *           the beginning of the token, and returns <eslOK>.
+ *
+ *           If a token is not found -- if <*s> already points to
+ *           \verb+\0+, or to a string composed entirely of characters in
+ *           <delim> -- then returns <eslEOL>, with <*ret_tok> set to
+ *           <NULL>.
+ *           
+ *           <*s> cannot be a constant string, since we write \verb+\0+'s
+ *           to it; caller must be willing to have this string
+ *           modified. And since we walk <*s> through the string as we
+ *           parse, the caller wants to use a tmp pointer <*s>, not
+ *           the original string itself.
+ *                      
+ * Example:  
+ *           char *tok;
+ *           char *s;             
+ *           char  buf[50] = "This is  a sentence.";
+ *           
+ *           s = buf;  
+ *           esl_strtok(&s, " ", &tok);
+ *                tok is "This"; s is "is  a sentence."
+ *           esl_strtok(&s, " ", &tok);
+ *                tok is "is"; s is " a sentence.".
+ *           esl_strtok(&s, " ", &tok);
+ *                tok is "a"; s is "sentence.".
+ *           esl_strtok(&s, " ", &tok, &len);
+ *                tok is "sentence."; s is "\0".
+ *           esl_strtok(&s, " ", &tok, &len);
+ *                returned eslEOL; tok is NULL; s is "\0".
+ *       
+ * Args:     s        - a tmp, modifiable ptr to a string
+ *           delim    - characters that delimits tokens
+ *           ret_tok  - RETURN: ptr to \0-terminated token 
+ *
+ * Returns:  <eslOK> on success, <*ret_tok> points to next token, and
+ *           <*s> points to next character following the token. 
+ *
+ *           Returns <eslEOL> on end of line; in which case <*s>
+ *           points to the terminal \verb+\0+ on the line, and <*ret_tok>
+ *           is <NULL>.
+ */
+int
+esl_strtok(char **s, char *delim, char **ret_tok)
+{
+  return esl_strtok_adv(s, delim, ret_tok, NULL, NULL);
+}
+
+
+/* Function: esl_strtok_adv()
+ * Synopsis: More advanced interface to <esl_strtok()>
+ *
+ * Purpose:  Same as <esl_strtok()>, except the caller may also 
+ *           optionally retrieve the length of the token in <*opt_toklen>,
+ *           and the token-ending character that was replaced by \verb+\0+ 
+ *           in <*opt_endchar>. 
+ *           
+ * Args:     s           - a tmp, modifiable ptr to string
+ *           delim       - characters that delimits tokens
+ *           ret_tok     - RETURN: ptr to \0-terminated token string
+ *           opt_toklen  - optRETURN: length of token; pass NULL if not wanted
+ *           opt_endchar - optRETURN: character that was replaced by <\0>.
+ *
+ * Returns:  <eslOK> on success, <*ret_tok> points to next token, <*s>
+ *           points to next character following the token,
+ *           <*opt_toklen> is the <strlen()> length of the token in
+ *           characters (excluding its terminal \verb+\0+), and <*opt_endchar>
+ *           is the character that got replaced by \verb+\0+ to form the token.
+ *           
+ *           Returns <eslEOL> if no token is found (end of line); in
+ *           which case <*s> points to the terminal \verb+\0+ on the line,
+ *           <*ret_tok> is <NULL>, <*opt_toklen> is 0 and
+ *           <*opt_endchar> is \verb+\0+.
+ */
+int
+esl_strtok_adv(char **s, char *delim, char **ret_tok, int *opt_toklen, char *opt_endchar)
+{
+  char *end;
+  char *tok    = *s;
+  char  c      = '\0';
+  int   n      = 0;
+  int   status = eslEOL;  /* unless proven otherwise */
+
+  /* contract checks */
+  ESL_DASSERT1(( s     != NULL ));
+  ESL_DASSERT1(( delim != NULL ));
+
+  tok += strspn(tok, delim);
+  if (! *tok) tok = NULL;         /* if *tok = 0, EOL, no token left */
+  else
+    {
+      n    = strcspn(tok, delim);
+      end  = tok + n;
+      if (*end == '\0') *s = end; /* a final token that extends to end of string */
+      else 
+	{
+	  c     = *end;		 /* internal token: terminate with \0 */
+	  *end  = '\0';
+	  *s    = end+1;
+	}
+      status = eslOK;
+    }
+
+  *ret_tok = tok;
+  if (opt_toklen  != NULL) *opt_toklen  = n;
+  if (opt_endchar != NULL) *opt_endchar = c;
+  return status;
+}
+
+
+/* Function:  esl_sprintf()
+ * Synopsis:  Dynamic allocation version of sprintf().
+ *
+ * Purpose:   Like ANSI C's <sprintf()>, except the string
+ *            result is dynamically allocated, and returned
+ *            through <*ret_s>. 
+ *
+ *            Caller is responsible for free'ing <*ret_s>.
+ *            
+ *            As a special case to facilitate some optional string
+ *            initializations, if <format> is <NULL>, <*ret_s> is set
+ *            to <NULL>.
+ *
+ * Returns:   <eslOK> on success, and <*ret_s> is the resulting
+ *            string.
+ *
+ * Throws:    <eslEMEM> on allocation failure. 
+ *            <eslESYS> if a <*printf()> library call fails.
+ */
+int
+esl_sprintf(char **ret_s, const char *format, ...)
+{
+  va_list ap;
+  int     status;
+
+  va_start(ap, format);
+  status = esl_vsprintf(ret_s, format, &ap);
+  va_end(ap);
+  return status;
+}
+
+/* Function:  esl_vsprintf()
+ * Synopsis:  Dynamic allocation version of vsprintf()
+ *
+ * Purpose:   Like ANSI C's <vsprintf>, except the string
+ *            result is dynamically allocated, and returned
+ *            through <*ret_s>.
+ *
+ *            Caller is responsible for free'ing <*ret_s>.
+ *            
+ *            As a special case to facilitate some optional string
+ *            initializations, if <format> is <NULL>, <*ret_s> is set
+ *            to <NULL>.
+ *            
+ * Returns:   <eslOK> on success, and <*ret_s> is the resulting
+ *            string.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslESYS> if a <*printf()> library call fails.
+ */
+int
+esl_vsprintf(char **ret_s, const char *format, va_list *ap)
+{
+  char   *s = NULL;
+  va_list ap2;
+  int     n1, n2;
+  int     status;
+
+  if (format == NULL) { *ret_s = NULL; return eslOK; }
+
+  va_copy(ap2, *ap);
+  n1 = strlen(format) * 2;	/* initial guess at string size needed */
+  ESL_ALLOC(s, sizeof(char) * (n1+1));
+  if ((n2 = vsnprintf(s, n1+1, format, *ap)) >= n1) 
+    {
+      ESL_REALLOC(s, sizeof(char) * (n2+1));
+      if (vsnprintf(s, n2+1, format, ap2) == -1) ESL_XEXCEPTION(eslESYS, "vsnprintf() failed");
+    }
+  else if (n2 == -1) ESL_XEXCEPTION(eslESYS, "vsnprintf() failed");
+
+  va_end(ap2);
+  *ret_s = s;
+  return eslOK;
+
+ ERROR:
+  if (s) free(s);
+  va_end(ap2);
+  *ret_s = NULL;
+  return status;
+}
+   
+
+/* Function:  esl_strcmp()
+ * Synopsis:  a strcmp() that treats NULL as empty string.
+ *
+ * Purpose:   A version of <strcmp()> that accepts <NULL>
+ *            strings. If both <s1> and <s2> are non-<NULL>
+ *            they are compared by <strcmp()>. If both are
+ *            <NULL>, return 0 (as if they are identical
+ *            strings). If only <s1> (or <s2>) is non-<NULL>,
+ *            return 1 (or -1), corresponding to ordering
+ *            any non-<NULL> string as greater than a <NULL>
+ *            string.
+ *
+ *            (Easel routinely uses NULL to mean an unset optional
+ *            string, and often needs to compare two strings for
+ *            equality.)
+ *
+ * Returns:   0 if <s1 == s2>; 1 if <s1 > s2>; -1 if <s1 < s2>.
+ */
+int 
+esl_strcmp(const char *s1, const char *s2)
+{
+  if      (s1 && s2) return strcmp(s1, s2);
+  else if (s1)       return 1;
+  else if (s2)       return -1;
+  else               return 0;
+}
+/*--------- end, improved replacement ANSI C functions ----------*/
+
+
+
+/*****************************************************************
+ * 5. Portable drop-in replacements for non-standard C functions
+ *****************************************************************/
+
+#ifndef HAVE_STRCASECMP
+/* Function:  esl_strcasecmp()
+ *
+ * Purpose:   Compare strings <s1> and <s2>. Return -1 if 
+ *            <s1> is alphabetically less than <s2>, 0 if they
+ *            match, and 1 if <s1> is alphabetically greater
+ *            than <s2>. All matching is case-insensitive.
+ *
+ * Args:      s1  - string 1, \0 terminated
+ *            s2  - string 2, \0 terminated      
+ *
+ * Returns:   -1, 0, or 1, if <s1> is less than, equal, or 
+ *            greater than <s2>, case-insensitively.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_strcasecmp(const char *s1, const char *s2)
+{
+  int i, c1, c2;
+
+  for (i = 0; s1[i] != '\0' && s2[i] != '\0'; i++)
+    {
+      c1 = s1[i];	/* total paranoia. don't trust toupper() to    */
+      c2 = s2[i];       /* leave the original unmodified; make a copy. */
+  
+      if (islower(c1)) c1 = toupper(c1);
+      if (islower(c2)) c2 = toupper(c2);
+      
+      if      (c1 < c2) return -1;
+      else if (c1 > c2) return 1;
+    }
+
+  if      (s1[i] != '\0') return 1;   /* prefixes match, but s1 is longer */
+  else if (s2[i] != '\0') return -1;  /* prefixes match, s2 is longer */
+
+  return 0;  /* else, a case-insensitive match. */
+}
+#endif /* ! HAVE_STRCASECMP */
+/*------------- end, portable drop-in replacements --------------*/
+
+
+/*****************************************************************
+ * 6. Additional string functions, esl_str*()
+ *****************************************************************/ 
+
+/* Function:  esl_strchop()
+ *
+ * Purpose:   Chops trailing whitespace off of a string <s> (or if <s>
+ *            is NULL, do nothing).
+ *            <n> is the length of the input string, if known; or pass <n=-1>
+ *            if length is unknown. 
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ *
+ * Xref:      from squid's StringChop().
+ */
+int
+esl_strchop(char *s, int64_t n)
+{
+  int i;
+  if (s == NULL) return eslOK;
+  if (n < 0) n = strlen(s);
+  for (i = n-1; i>=0 && isspace((int) s[i]); i--); 
+  s[i+1] = '\0';
+  return eslOK;
+}
+
+
+/* Function:  esl_strdealign()
+ * Synopsis:  Dealign a string according to gaps in a reference aseq.
+ *
+ * Purpose:   Dealign string <s> in place, by removing any characters 
+ *            aligned to gaps in <aseq>. Gap characters are defined in the 
+ *            string <gapstring>; for example, <-_.>. Optionally return the
+ *            unaligned length of <s> in characters in <*opt_rlen>.
+ *            
+ *            By providing a reference <aseq> to dealign against, this
+ *            function can dealign aligned annotation strings, such as
+ *            secondary structure or surface accessibility strings.
+ *            If <s> is the same as <aseq>, then the aligned sequence
+ *            itself is dealigned in place. 
+ *            
+ *            To dealign both annotations and sequence, do the
+ *            sequence last, since you need it as the reference <aseq>
+ *            when doing the annotations.
+ *           
+ *            It is safe to pass a <NULL> <s> (an unset optional
+ *            annotation), in which case the function no-ops and
+ *            returns <eslOK>.
+ *            
+ * Args:      s        - string to dealign
+ *            aseq     - reference aligned sequence seq
+ *            gapchars - definition of gap characters ("-_." for example)
+ *            opt_rlen - optRETURN: number of residues in <s> after dealign
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_strdealign(char *s, const char *aseq, const char *gapchars, int64_t *opt_rlen)
+{
+  int64_t n = 0;
+  int64_t apos;
+
+  if (s == NULL) return eslOK;
+
+  for (apos = 0; aseq[apos] != '\0'; apos++)
+    if (strchr(gapchars, aseq[apos]) == NULL)
+      s[n++] = s[apos];
+  s[n] = '\0';
+  
+  if (opt_rlen != NULL) *opt_rlen = n;
+  return eslOK;
+}
+
+
+/* Function:  esl_str_IsBlank()
+ * Synopsis:  Return TRUE if <s> is all whitespace; else FALSE.
+ *
+ * Purpose:   Given a NUL-terminated string <s>; return <TRUE> if 
+ *            string is entirely whitespace (as defined by <isspace()>),
+ *            and return FALSE if not.
+ */
+int
+esl_str_IsBlank(char *s)
+{
+  for (; *s; s++) if (!isspace(*s)) return FALSE;
+  return TRUE;
+}
+
+/* Function:  esl_str_IsInteger()
+ * Synopsis:  Return TRUE if <s> represents an integer; else FALSE.
+ *
+ * Purpose:   Given a NUL-terminated string <s>, return TRUE
+ *            if the complete string is convertible to a base-10 integer 
+ *            by the rules of <strtol()> or <atoi()>. 
+ *            
+ *            Leading and trailing whitespace is allowed, but otherwise
+ *            the entire string <s> must be convertable. (Unlike <strtol()>
+ *            itself, which will convert a prefix. ' 99 foo' converts
+ *            to 99, but <esl_str_IsInteger()> will return FALSE.
+ *            
+ *            If <s> is <NULL>, FALSE is returned.
+ */
+int
+esl_str_IsInteger(char *s)
+{
+  char *endp;
+
+  if (s == NULL) return FALSE;	        /* it's NULL */
+  (void) strtol(s, &endp, 10);		/* don't need result itself, discard to void */
+  if (endp == s) return FALSE;          /* strtol() can't convert it */
+  for (s = endp; *s != '\0'; s++)
+    if (! isspace(*s)) return FALSE;    /* it has trailing nonconverted nonwhitespace */
+  return TRUE;
+}
+
+/* Function:  esl_str_IsReal()
+ * Synopsis:  Return TRUE if string <s> represents a real number; else FALSE.
+ *
+ * Purpose:   Given a NUL-terminated string <s>, return <TRUE>
+ *            if the string is completely convertible to a floating-point
+ *            real number by the rules of <strtod()> and <atof()>. 
+ *            (Which allow for exponential forms, hexadecimal forms,
+ *            and case-insensitive INF, INFINITY, NAN, all w/ optional
+ *            leading +/- sign.)
+ * 
+ *            No trailing garbage is allowed, unlike <strtod()>. The
+ *            entire string must be convertible, allowing leading and
+ *            trailing whitespace is allowed. '99.0 foo' converts
+ *            to 99.0 with <strtod()> but is <FALSE> for 
+ *            <esl_str_IsReal()>. '  99.0  ' is <TRUE>.
+ *            
+ *            If <s> is <NULL>, return <FALSE>.
+ */
+int
+esl_str_IsReal(char *s)
+{
+  char   *endp;
+  double  val;
+
+  if (! s) return FALSE;		      /* <s> is NULL */
+  val = strtod(s, &endp);
+  if (val == 0.0f && endp == s) return FALSE; /* strtod() can't convert it */
+  for (s = endp; *s != '\0'; s++)
+    if (! isspace(*s)) return FALSE;          /* it has trailing nonconverted nonwhitespace */
+  return TRUE;
+}
+
+
+/* Function:  esl_str_GetMaxWidth()
+ * Synopsis:  Returns maximum strlen() in an array of strings.
+ *
+ * Purpose:   Returns the length of the longest string in 
+ *            an array of <n> strings <s[0..n-1]>. If <n=0>,
+ *            returns 0. Any <s[i]> that's <NULL> is counted
+ *            as zero length.
+ */
+int64_t
+esl_str_GetMaxWidth(char **s, int n)
+{
+  int64_t max = 0;
+  int64_t len;
+  int     i; 
+  
+  for (i = 0; i < n; i++)
+    if (s[i]) {
+      len = strlen(s[i]);
+      if (len > max) max = len;
+    }
+  return max;
+}
+
+
+/*-------------- end, additional string functions ---------------*/
+
+
+
+
+/*****************************************************************
+ * 7. File path/name manipulation, including tmpfiles
+ *****************************************************************/
+
+/* Function:  esl_FileExists()
+ * Synopsis:  Return TRUE if <filename> exists and is readable, else FALSE.
+ *
+ * Purpose:   Returns TRUE if <filename> exists and is readable, else FALSE.
+ *     
+ * Note:      Testing a read-only fopen() is the only portable ANSI C     
+ *            I'm aware of. We could also use a POSIX func here, since
+ *            we have a ESL_POSIX_AUGMENTATION flag in the code.
+ *            
+ * Xref:      squid's FileExists().
+ */
+int
+esl_FileExists(const char *filename)
+{
+#if defined _POSIX_VERSION
+  struct stat fileinfo;
+  if (stat(filename, &fileinfo) != 0) return FALSE;
+  if (! (fileinfo.st_mode & S_IRUSR)) return FALSE;
+  return TRUE;
+#else 
+  FILE *fp;
+  if ((fp = fopen(filename, "r"))) { fclose(fp); return TRUE; }
+  return FALSE;
+#endif
+}
+
+
+/* Function:  esl_FileTail()
+ * Synopsis:  Extract filename, removing path prefix.
+ *
+ * Purpose:   Given a full pathname <path>, extract the filename
+ *            without the directory path; return it via  
+ *            <ret_filename>. <ret_filename> space is allocated
+ *            here, and must be free'd by the caller.
+ *            For example: 
+ *               </foo/bar/baz.1> becomes <baz.1>;
+ *               <foo/bar>        becomes <bar>; 
+ *               <foo>            becomes <foo>; and
+ *               </>              becomes the empty string.
+ *            
+ *            If <nosuffix> is <TRUE>, the rightmost trailing ".foo" extension
+ *            is removed too. The suffix is defined as everything following
+ *            the rightmost period in the filename in <path>:
+ *            with <nosuffix> <TRUE>, 
+ *                <foo.2/bar.idx> becomes <bar>,
+ *                <foo.2/bar>     becomes <bar>, and
+ *                <foo.2/bar.1.3> becomes <bar.1>.  
+ *            
+ * Args:      path     - full pathname to process, "/foo/bar/baz.1"
+ *            nosuffix - TRUE to remove rightmost suffix from the filename
+ *            ret_file - RETURN: filename portion of the path.
+ *                     
+ * Returns:   <eslOK> on success, and <ret_file> points to a newly
+ *            allocated string containing the filename.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_FileTail(const char *path, int nosuffix, char **ret_file)
+{
+  int   status;
+  char *tail = NULL;
+  char *lastslash;
+  char *lastdot;
+				/* remove directory prefix */
+  lastslash = strrchr(path, eslDIRSLASH);
+  ESL_ALLOC(tail, sizeof(char) * (strlen(path)+1)); /* a little overkill */
+  if (lastslash == NULL) strcpy(tail, path);
+  else                   strcpy(tail, lastslash+1);
+				/* remove trailing suffix */
+  if (nosuffix) {
+    if ((lastdot = strrchr(tail, '.')) != NULL)
+      *lastdot = '\0';
+  }
+  *ret_file = tail;
+  return eslOK;
+
+ ERROR:
+  if (tail != NULL) free(tail);
+  *ret_file = NULL;
+  return status;
+}
+
+/* Function:  esl_file_Extension()
+ * Synopsis:  Find suffix of a file name; set a memory line on it.
+ *
+ * Purpose:   Given a path or file name <filename>, and ignoring the
+ *            last <n_ignore> characters, find the rightmost suffix;
+ *            return a pointer to its start in <*ret_sfx> (inclusive
+ *            of the ``.''), and its length in <*ret_n>. If no 
+ *            suffix is found, return <eslFAIL> with <*ret_sfx = NULL>
+ *            and <ret_n = 0>.
+ *            
+ *            The <n_ignore> argument allows iterating through more
+ *            than one suffix. 
+ *            
+ *            For example, if <filename> is ``./foo/bar/baz.xx.yyy''
+ *            and <n_ignore> is 0, <*ret_sfx> points to ``.yyy'' and
+ *            <*ret_n> is 4. If <n_ignore> is 4, then <*ret_sfx>
+ *            points to ``.xx'' and <ret_n> is 3. If <n_ignore> is 7
+ *            then status is <eslFAIL>.
+ */
+int
+esl_file_Extension(char *filename, esl_pos_t n_ignore, char **ret_sfx, esl_pos_t *ret_n)
+{
+  esl_pos_t n1 = strlen(filename) - n_ignore;
+  esl_pos_t n2;
+  
+  for (n2 = n1; n2 > 0 && filename[n2-1] != eslDIRSLASH && filename[n2-1] != '.'; n2--) ;
+  
+  if (n2 <= 0 || filename[n2-1] == eslDIRSLASH)
+    { *ret_sfx = NULL; *ret_n = 0; return eslFAIL; }
+
+  *ret_sfx = filename + n2 - 1; 
+  *ret_n   = n1-n2+1; 
+  return eslOK; 
+}
+
+
+/* Function:  esl_FileConcat()
+ *
+ * Purpose:   Concatenates directory path prefix <dir> and a filename
+ *            <file>, and returns the new full pathname through
+ *            <ret_path>. If <dir> does not already end in the
+ *            appropriate delimiter (e.g. / for UNIX), one is added.
+ *            
+ *            If <dir> is NULL, then <ret_path> is just the same as
+ *            <file>. Similarly, if <file> already appears to be a
+ *            full path (because its first character is a /), then
+ *            <dir> is ignored and <ret_path> is the same as
+ *            <file>. It wouldn't normally make sense for a caller to
+ *            call this function with such arguments.
+ *            
+ *            <file> may be a relative path. For example, 
+ *            if <dir> is "/usr/local" and <file> is "lib/myapp/data",
+ *            <ret_path> will be "/usr/local/lib/myapp/data".
+ *
+ * Returns:   <eslOK> on success, and puts the path
+ *            in <ret_path>; this string is allocated here, 
+ *            and must be free'd by caller with <free()>.
+ *
+ * Throws:    <eslEMEM>   on allocation failure.
+ *            <eslEINVAL> on bad argument.
+ *            In either case, <ret_path> is returned NULL.
+ *
+ * Xref:      squid's FileConcat().
+ */
+int
+esl_FileConcat(const char *dir, const char *file, char **ret_path)
+{
+  char *path = NULL;
+  int   nd, nf;
+  int   status;
+
+  if (ret_path != NULL) *ret_path = NULL;
+  if (file == NULL) ESL_EXCEPTION(eslEINVAL, "null file");
+
+  nd   = (dir  != NULL)? strlen(dir)  : 0;
+  nf   = strlen(file);
+  ESL_ALLOC(path, sizeof(char) * (nd+nf+2));
+
+  if (dir == NULL)		     /* 1. silly caller didn't give a path */
+    strcpy(path, file);
+  else if (*file == eslDIRSLASH)     /* 2. <file> is already a path?   */
+    strcpy(path, file); 
+  else if (dir[nd-1] == eslDIRSLASH) /* 3. <dir><file> (dir is / terminated) */
+    sprintf(path, "%s%s", dir, file);
+  else				     /* 4. <dir>/<file> (usual case)   */
+    sprintf(path, "%s%c%s", dir, eslDIRSLASH, file);	
+
+  *ret_path = path;
+  return eslOK;
+
+ ERROR:
+  if (path     != NULL) free(path);
+  if (ret_path != NULL) *ret_path = NULL;
+  return status;
+}
+
+
+/* Function:  esl_FileNewSuffix()
+ *
+ * Purpose:   Add a file suffix <sfx> to <filename>; or if <filename>
+ *            already has a suffix, replace it with <sfx>. A suffix is
+ *            usually 2-4 letters following a '.' character. Returns
+ *            an allocated string containing the result in <ret_newpath>.
+ *            
+ *            For example, if <filename> is "foo" and <sfx> is "ssi",
+ *            returns "foo.ssi". If <filename> is "foo.db" and <sfx>
+ *            is "idx", returns "foo.idx". You can remove a suffix
+ *            too; if <filename> is "foo.db", and <sfx> is "", the
+ *            result is "foo".
+ *            
+ *            Caller can either ask for <*ret_newpath> to be a new
+ *            allocation by passing <*ret_newpath = NULL>, or can
+ *            provide a ptr to a preallocated space.
+ *
+ * Returns:   <eslOK> on success, and <ret_newpath> is set
+ *            string "<base_filename>.<sfx>". Caller is 
+ *            responsible for free'ing this string, whether it
+ *            provided it as preallocated space or asked for a new
+ *            allocation.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *
+ * Xref:      squid's FileAddSuffix().
+ */
+int 
+esl_FileNewSuffix(const char *filename, const char *sfx, char **ret_newpath)
+{
+  char *new = *ret_newpath;  // caller either provides memory, or asks for allocation w/ <NULL>
+  char *lastdot;
+  int   nf;
+  int   status;
+
+  lastdot   = strrchr(filename, '.'); /* check for suffix to replace */
+  if (lastdot != NULL && 
+      strchr(lastdot, eslDIRSLASH) != NULL) 
+    lastdot = NULL; /*foo.1/filename case - don't be fooled.*/
+  nf = (lastdot == NULL)? strlen(filename) : lastdot-filename;
+  
+  if (! new) ESL_ALLOC(new, sizeof(char) * (nf+strlen(sfx)+2)); /* '.' too */
+  strncpy(new, filename, nf);
+  *(new+nf) = '.';
+  strcpy(new+nf+1, sfx);
+
+  *ret_newpath = new;  
+  return eslOK;
+
+ ERROR:
+  if (!(*ret_newpath) && new) free(new);
+  return status;
+}
+
+
+
+/* Function:  esl_FileEnvOpen()
+ *
+ * Purpose:   Looks for a file <fname> in a colon-separated list of
+ *            directories that is configured in an environment variable
+ *            <env>. The first occurrence of file <fname> in this directory 
+ *            list is opened read-only. The open file ptr is returned
+ *            through <opt_fp>, and the full path name to the file
+ *            that was opened is returned through <opt_path>. 
+ *            Caller can pass NULL in place of <opt_fp> or <opt_path>
+ *            if it is not interested in one or both of these. 
+ *            
+ *            Does not look in the current directory unless "." is
+ *            explicitly in the directory list provided by <env>.
+ *            
+ * Note:      One reason to pass <opt_path> back to the caller is that
+ *            sometimes we're opening the first in a group of files
+ *            (for example, a database and its SSI index), and we want
+ *            to make sure that after we find the main file, the
+ *            caller can look for the auxiliary file(s) in exactly the
+ *            same directory.
+ *            
+ * Examples:  % setenv BLASTDB /nfs/databases/blast-db:/nfs/databases/nr/
+ *           
+ *            FILE *fp;
+ *            char *path;
+ *            int   status;
+ *            status = esl_FileEnvOpen("swiss42", "BLASTDB", &fp, &path);
+ * 
+ * Returns:   <eslOK> on success, and provides <opt_fp> and <opt_path>;
+ *            <opt_fp> is opened here, and must be <fclose()>'d by caller;
+ *            <opt_path> is allocated here, and must be <free()>'d by caller.
+ *
+ *            Returns <eslENOTFOUND> if the file not found in any directory,
+ *            or if <env> does not contain any directories to look in.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *
+ * Xref:      squid's EnvFileOpen().
+ */
+int
+esl_FileEnvOpen(const char *fname, const char *env, FILE **opt_fp, char **opt_path)
+{
+  FILE *fp;
+  char *dirlist;		/* :-separated list of directories */
+  char *s, *s2;                 /* ptrs into elems in env list */
+  char *path = NULL;
+  int   np;
+  int   status;
+
+  fp = NULL;
+  if (opt_fp   != NULL) *opt_fp   = NULL;
+  if (opt_path != NULL) *opt_path = NULL;
+
+  if (env == NULL)               return eslENOTFOUND;
+  if ((s = getenv(env)) == NULL) return eslENOTFOUND;
+  if (esl_strdup(s, -1, &dirlist) != eslOK) return eslEMEM;
+
+  np   = strlen(fname) + strlen(s) + 2; /* upper bound on full path len */
+  ESL_ALLOC(path, sizeof(char) * np);
+
+  s  = dirlist;
+  while (s != NULL) 
+    {
+      if ((s2 = strchr(s, ':')) != NULL) { *s2 = '\0'; s2++;} /* ~=strtok() */
+      sprintf(path, "%s%c%s", s, eslDIRSLASH, fname); /* // won't hurt */
+      if ((fp = fopen(path, "r")) != NULL) break;      
+      s = s2;
+    }
+  if (fp == NULL) { free(path); free(dirlist); return eslENOTFOUND; }
+
+  if (opt_path != NULL) { *opt_path = path; } else free(path);
+  if (opt_fp   != NULL) { *opt_fp   = fp; }   else fclose(fp);
+  free(dirlist);
+  return eslOK;
+
+ ERROR:
+  if (path     != NULL) free(path);
+  if (fp       != NULL) fclose(fp);
+  if (dirlist  != NULL) free(dirlist);
+  if (opt_path != NULL) *opt_path = NULL;
+  if (opt_fp   != NULL) *opt_fp   = NULL;
+  return status;
+}
+
+/* Function:  esl_tmpfile()
+ *
+ * Purpose:   Open a secure temporary <FILE *> handle and return it in
+ *            <ret_fp>. The file is opened in read-write mode (<w+b>)
+ *            with permissions 0600, as an atomic operation using the
+ *            POSIX <mkstemp()> function.
+ * 
+ *            The <basename6X> argument is a modifiable string that must
+ *            end in "XXXXXX" (for example, "esltmpXXXXXX"). The
+ *            <basename6X> is used to construct a unique tmpfile name.
+ *            
+ *            Note that this string must be modifiable; do not declare
+ *            it <char *tmpfile = "esltmpXXXXXX";> nor <char tmpfile[]
+ *            = "esltmpXXXXXX";> because these will not work on some
+ *            compilers. Something like <char tmpfile[16] =
+ *            "esltmpXXXXXX";> that explicitly allocates storage will
+ *            suffice.
+ *            
+ *            The file is opened in a standard temporary file
+ *            directory. The path is obtained from the environment
+ *            variable <TMPDIR>; failing that, from the environment
+ *            variable <TMP>; and failing that, </tmp> is used. If the
+ *            process is running <setuid> or <setgid>, then the
+ *            environment variables are ignored, and the temp file is
+ *            always created in </tmp>.
+ *            
+ *            The created tmpfile is not persistent and is not visible
+ *            to a directory listing. The caller may <rewind()> the
+ *            <ret_fp> and do cycles of reading and/or writing, but
+ *            once the <ret_fp> is closed, the file disappears.  The
+ *            caller does not need to <remove()> or <unlink()> it (and
+ *            in fact, cannot do so, because it does not know the
+ *            tmpfile's name).
+ *            
+ *            This function is a secure replacement for ANSI C
+ *            <tmpfile()>, which is said to be insecurely implemented on
+ *            some platforms.
+ *
+ * Returns:   <eslOK> on success, and now <ret_fp> points to a new <FILE *>
+ *            stream for the opened tempfile. 
+ *
+ * Throws:    <eslESYS> if a system call (including the <mkstemp()> call)
+ *            fails, and and <ret_fp> is returned NULL. One possible
+ *            problem is if the temporary directory doesn't exist or
+ *            is not writable. This is considered to be a system
+ *            error, not a user error, so Easel handles it as an exception.
+ *            
+ * Xref:      STL11/85. Substantially copied from David Wheeler, 
+ *            "Secure Programming for Linux and Unix HOWTO", 
+ *            http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/introduction.html.
+ *            Copyright (C) 1999-2001 David A. Wheeler.
+ *            Licensed under the MIT license; see Appendix C of the HOWTO.
+ *            Thanks, David, for the clearest explanation of the issues 
+ *            that I've seen.
+ *            
+ *            I also referred to H. Chen, D. Dean, and D. Wagner,
+ *            "Model checking one million lines of C code", 
+ *            In: Network and Distributed System Security Symposium, pp 171-185,
+ *            San Diego, CA, February 2004;
+ *            http://www.cs.ucdavis.edu/~hchen/paper/ndss04.pdf.
+ *            Wheeler's implementation obeys Chen et al's "Property 5", 
+ *            governing secure use of tempfiles.
+ */
+int
+esl_tmpfile(char *basename6X, FILE **ret_fp)
+{
+  char *tmpdir = NULL;
+  char *path   = NULL;
+  FILE *fp     = NULL;
+  int   fd;
+  int   status;
+  mode_t old_mode;
+
+  /* Determine what tmp directory to use, and construct the
+   * file name.
+   */
+  if (getuid() == geteuid() && getgid() == getegid()) 
+    {
+      tmpdir = getenv("TMPDIR");
+      if (tmpdir == NULL) tmpdir = getenv("TMP");
+    }
+  if (tmpdir == NULL) tmpdir = "/tmp";
+  if ((status = esl_FileConcat(tmpdir, basename6X, &path)) != eslOK) goto ERROR; 
+
+  old_mode = umask(077);
+  if ((fd = mkstemp(path)) <  0)        ESL_XEXCEPTION(eslESYS, "mkstemp() failed.");
+  umask(old_mode);
+  if ((fp = fdopen(fd, "w+b")) == NULL) ESL_XEXCEPTION(eslESYS, "fdopen() failed.");
+  if (unlink(path) < 0)                 ESL_XEXCEPTION(eslESYS, "unlink() failed.");
+
+  *ret_fp = fp;
+  free(path);
+  return eslOK;
+
+ ERROR:
+  if (path != NULL) free(path);
+  if (fp   != NULL) fclose(fp);
+  *ret_fp = NULL;
+  return status;
+}
+
+/* Function:  esl_tmpfile_named()
+ *
+ * Purpose:   Open a persistent temporary file relative to the current
+ *            working directory. The file name is constructed from the
+ *            <basename6X> argument, which must be a modifiable string
+ *            ending in the six characters "XXXXXX".  These are
+ *            replaced by a unique character string by a call to POSIX
+ *            <mkstemp()>. For example, <basename6X> might be
+ *            <esltmpXXXXXX> on input, and <esltmp12ab34> on return; or, to
+ *            put the tmp file in a subdirectory under the current
+ *            working directory, something like <my_subdir/esltmpXXXXXX>
+ *            on input resulting in something like
+ *            <my_subdir/esltmp12ab34> on return.  The tmpfile is opened
+ *            for reading and writing (in mode <w+b> with permissions
+ *            0600) and the opened <FILE *> handle is returned through
+ *            <ret_fp>.
+ *            
+ *            The created tmpfile is persistent: it will be visible in
+ *            a directory listing, and will remain after program
+ *            termination unless the caller explicitly removes it by a
+ *            <remove()> or <unlink()> call.
+ *
+ *            To use this function securely, if you reopen the
+ *            tmpfile, you must only reopen it for reading, not
+ *            writing, and you must not trust the contents.
+ *            
+ *            Because the <basename6X> will be modified, it cannot be
+ *            a string constant (especially on a picky compiler like
+ *            gcc). You have to declare it with something like
+ *               <char tmpfile[32] = "esltmpXXXXXX";> 
+ *            not 
+ *               <char *tmpfile    = "esltmpXXXXXX";> 
+ *            because a compiler is allowed to make the <*tmpfile> version
+ *            a constant.
+ *
+ * Returns:   <eslOK> on success, <basename6X> contains the name of the
+ *            tmpfile, and <ret_fp> contains a new <FILE *> stream for the
+ *            opened file. 
+ *             
+ *            <eslFAIL> on failure, and <ret_fp> is returned NULL and
+ *            the contents of <basename6X> are undefined. The most
+ *            common reason for a failure will be that the caller does
+ *            not have write permission for the directory that
+ *            <basename6X> is in. Easel handles this as a normal (user)
+ *            failure, not an exception, because these permissions are
+ *            most likely in the user's control (in contrast to
+ *            <esl_tmpfile()>, which always uses a system <TMPDIR>
+ *            that should always be user-writable on a properly
+ *            configured POSIX system).
+ *
+ * Xref:      STL11/85.
+ */
+int
+esl_tmpfile_named(char *basename6X, FILE **ret_fp)
+{
+  FILE  *fp;
+  mode_t old_mode;
+  int    fd;
+
+  *ret_fp = NULL;
+  old_mode = umask(077);
+  if ((fd = mkstemp(basename6X)) <  0)    return eslFAIL;
+  umask(old_mode);
+  if ((fp = fdopen(fd, "w+b")) == NULL) return eslFAIL;
+
+  *ret_fp = fp;
+  return eslOK;
+}
+
+
+/* Function:  esl_getcwd()
+ * Synopsis:  Gets the path for the current working directory.
+ *
+ * Purpose:   Returns the path for the current working directory
+ *            in <*ret_cwd>, as reported by POSIX <getcwd()>.
+ *            <*ret_cmd> is allocated here and must be freed by 
+ *            the caller.
+ *
+ * Returns:   <eslOK> on success, and <*ret_cwd> points to
+ *            the pathname of the current working directory.
+ *            
+ *            If <getcwd()> is unavailable on this system, 
+ *            returns <eslEUNIMPLEMENTED> and <*ret_cwd> is <NULL>.
+ *            
+ *            If the pathname length exceeds a set limit (16384 char),
+ *            returns <eslERANGE> and <*ret_cwd> is <NULL>.
+ *
+ * Throws:    <eslEMEM> on allocation failure; <*ret_cwd> is <NULL>.
+ *            <eslESYS> on getcwd() failure; <*ret_cwd> is <NULL>.
+ *
+ * Xref:      J7/54.
+ */
+int
+esl_getcwd(char **ret_cwd)
+{
+  char *cwd      = NULL;
+  int   status   = eslOK;
+#ifdef _POSIX_VERSION
+  int   nalloc   = 256;
+  int   maxalloc = 16384;
+  do {
+    ESL_ALLOC(cwd, sizeof(char) * nalloc);
+    if (getcwd(cwd, nalloc) == NULL)
+      {
+	if (errno != ERANGE)       ESL_XEXCEPTION(eslESYS, "unexpected getcwd() error");
+	if (nalloc * 2 > maxalloc) { status = eslERANGE; goto ERROR; }
+	free(cwd);
+	cwd = NULL;
+	nalloc *= 2;
+      }
+  } while (cwd == NULL);
+  *ret_cwd = cwd;
+  return status;
+
+ ERROR:
+  if (cwd) free(cwd);
+  *ret_cwd = NULL;
+  return status;
+
+#else
+  *ret_cwd = NULL;
+  return eslEUNIMPLEMENTED;
+#endif
+}
+
+/*----------------- end of file path/name functions ------------------------*/
+
+
+
+
+/*****************************************************************
+ * 8. Typed comparison routines.
+ *****************************************************************/
+
+/* Function:  esl_DCompare()
+ *
+ * Purpose:   Compare two floating point scalars <a> and <b> for approximate equality.
+ *            Return <eslOK> if equal, <eslFAIL> if not.
+ *            
+ *            Equality is defined by being within a relative
+ *            epsilon <tol>, as <2*fabs(a-b)/(a+b)> $\leq$ <tol>.
+ *            Additionally, we catch the special cases where <a>
+ *            and/or <b> are 0 or -0. If both are, return <eslOK>; if
+ *            one is, check that the absolute value of the other is
+ *            $\leq$ <tol>.
+ *            
+ *            <esl_DCompare()> and <esl_FCompare()> work on <double> and <float>
+ *            scalars, respectively.
+ */
+int
+esl_DCompare(double a, double b, double tol)
+{
+  if (isinf(a) && isinf(b))                 return eslOK;
+  if (isnan(a) && isnan(b))                 return eslOK;
+  if (!isfinite(a) || !isfinite(b))         return eslFAIL;
+  if (a == b)                               return eslOK;
+  if (fabs(a) == 0. && fabs(b) <= tol)      return eslOK;
+  if (fabs(b) == 0. && fabs(a) <= tol)      return eslOK;
+  if (2.*fabs(a-b) / fabs(a+b) <= tol)      return eslOK;
+  return eslFAIL;
+}
+int
+esl_FCompare(float a, float b, float tol)
+{ 
+  if (isinf(a) && isinf(b))                 return eslOK;
+  if (isnan(a) && isnan(b))                 return eslOK;
+  if (!isfinite(a) || !isfinite(b))         return eslFAIL;
+  if (a == b)                               return eslOK;
+  if (fabs(a) == 0. && fabs(b) <= tol)      return eslOK;
+  if (fabs(b) == 0. && fabs(a) <= tol)      return eslOK;
+  if (2.*fabs(a-b) / fabs(a+b) <= tol)      return eslOK;
+  return eslFAIL;
+}
+
+/* Function:  esl_DCompareAbs()
+ *
+ * Purpose:   Compare two floating point scalars <a> and <b> for
+ *            approximate equality, by absolute difference.  Return
+ *            <eslOK> if equal, <eslFAIL> if not.
+ *            
+ *            Equality is defined as <fabs(a-b) $\leq$ tol> for finite
+ *            <a,b>; or <inf=inf>, <NaN=NaN> when either value is not
+ *            finite.
+ *            
+ *            Generally it is preferable to compare floating point
+ *            numbers for equality using relative difference: see
+ *            <esl_{DF}Compare()>, and also Knuth's Seminumerical
+ *            Algorithms. However, cases arise where absolute
+ *            difference comparison is preferred. One such case is in
+ *            comparing the log probability values of DP matrices,
+ *            where numerical error tends to accumulate on an absolute
+ *            scale, dependent more on the number of terms than on
+ *            their magnitudes. DP cells with values that happen to be
+ *            very close to zero can have high relative differences.
+ */
+int
+esl_DCompareAbs(double a, double b, double tol)
+{
+  if (isinf(a) && isinf(b))            return eslOK;
+  if (isnan(a) && isnan(b))            return eslOK;
+  if (!isfinite(a) || !isfinite(b))    return eslFAIL;
+  if (fabs(a-b) <= tol)                return eslOK;
+  return eslFAIL;
+}
+int
+esl_FCompareAbs(float a, float b, float tol)
+{ 
+  if (isinf(a) && isinf(b))            return eslOK;
+  if (isnan(a) && isnan(b))            return eslOK;
+  if (!isfinite(a) || !isfinite(b))    return eslFAIL;
+  if (fabs(a-b) <= tol)                return eslOK;
+  return eslFAIL;
+}
+
+
+
+
+
+/* Function:  esl_CCompare()
+ * Synopsis:  Compare two optional strings for equality.
+ *
+ * Purpose:   Compare two optional strings <s1> and <s2>
+ *            for equality. 
+ *            
+ *            If they're non-<NULL> and identical up to their
+ *            <NUL>-terminator, return <eslOK>.
+ *            
+ *            If they're both <NULL> (unset), return <eslOK>.
+ *            
+ *            Otherwise, they're not identical; return <eslFAIL>.
+ */
+int
+esl_CCompare(char *s1, char *s2)
+{
+  if (s1 == NULL && s2 == NULL) return eslOK;
+  if (s1 == NULL || s2 == NULL) return eslFAIL;
+  if (strcmp(s1, s2) != 0)      return eslFAIL;
+  return eslOK;
+}
+
+
+/*-------------- end, typed comparison routines --------------------*/
+
+
+
+
+
+
+
+/*****************************************************************
+ * 9. Unit tests.
+ *****************************************************************/
+#ifdef eslEASEL_TESTDRIVE
+
+static void
+utest_IsInteger(void)
+{
+  char *goodones[] = { " 99 " };
+  char *badones[]  = {  "",  " 99 foo " };
+  int ngood = sizeof(goodones) / sizeof(char *);
+  int nbad  = sizeof(badones)  / sizeof(char *);
+  int i;
+
+  for (i = 0; i < ngood; i++)
+    if (! esl_str_IsInteger(goodones[i])) esl_fatal("esl_str_IsInteger() should have recognized %s", goodones[i]);
+  for (i = 0; i < nbad;  i++)
+    if (  esl_str_IsInteger(badones[i]))  esl_fatal("esl_str_IsInteger() should not have recognized %s", badones[i]);
+}
+
+static void
+utest_IsReal(void)
+{
+  char *goodones[] = { "99", " \t 99", "-99.00", "+99.00e-12", "+0xabc.defp-12",  "  +INFINITY", "-nan" };
+  char *badones[] = {  "", 
+		       "FIBB_BOVIN/67-212",	/* testing for a fixed bug, 17 Dec 2012, reported by ER */
+  };
+  int ngood = sizeof(goodones) / sizeof(char *);
+  int nbad  = sizeof(badones)  / sizeof(char *);
+  int i;
+
+  for (i = 0; i < ngood; i++)
+    if (! esl_str_IsReal(goodones[i])) esl_fatal("esl_str_IsReal() should have recognized %s", goodones[i]);
+  for (i = 0; i < nbad;  i++)
+    if (  esl_str_IsReal(badones[i]))  esl_fatal("esl_str_IsReal() should not have recognized %s", badones[i]);
+}
+
+
+static void
+utest_strmapcat(void)
+{
+  char      *msg  = "esl_strmapcat() unit test failed";
+  ESL_DSQ   inmap[128];
+  char     *pfx     = "testing testing";
+  char     *append  = "one two three";
+  char     *bad     = "1 2 three";
+  char     *dest;
+  int64_t   L1;
+  esl_pos_t L2;
+  int       x;
+  
+  /* a simple input map, for testing */
+  for (x = 0;   x < 128; x++) inmap[x] = eslDSQ_ILLEGAL;
+  for (x = 'a'; x < 'z'; x++) inmap[x] = x;
+  for (x = 'A'; x < 'Z'; x++) inmap[x] = x;
+  inmap[' '] = eslDSQ_IGNORED;
+  inmap[0]   = '?';
+  
+  L1 = strlen(pfx);
+  L2 = strlen(append);
+  if ( ( esl_strdup   (pfx, L1, &dest))                != eslOK)  esl_fatal(msg);
+  if ( ( esl_strmapcat(inmap, &dest, &L1, append, L2)) != eslOK)  esl_fatal(msg);
+  if ( strcmp(dest, "testing testingonetwothree")      != 0)      esl_fatal(msg);
+  free(dest);
+  
+  L1 = -1;
+  L2 = -1;
+  if ( ( esl_strdup   (pfx, L1, &dest))                != eslOK)  esl_fatal(msg);
+  if ( ( esl_strmapcat(inmap, &dest, &L1, append, L2)) != eslOK)  esl_fatal(msg);
+  if ( strcmp(dest, "testing testingonetwothree")      != 0)      esl_fatal(msg);
+  free(dest);
+
+  L1   = 0;
+  dest = NULL;
+  if ( ( esl_strmapcat(inmap, &dest, &L1, pfx,    -1))   != eslOK)  esl_fatal(msg);
+  if ( ( esl_strmapcat(inmap, &dest, &L1, append, -1))   != eslOK)  esl_fatal(msg);
+  if ( strcmp(dest, "testingtestingonetwothree")         != 0)      esl_fatal(msg);
+  free(dest);
+
+
+  if ( ( esl_strdup(pfx, -1, &dest))                 != eslOK)      esl_fatal(msg);
+  L1   = 8;
+  if ( ( esl_strmapcat(inmap, &dest, &L1, bad, -1))  != eslEINVAL)  esl_fatal(msg);
+  if ( strcmp(dest, "testing ??three")               != 0)          esl_fatal(msg);
+  free(dest);
+}
+
+
+static void
+utest_strtok(void)
+{
+  char  msg[]       = "esl_strtok() unit test failed";
+  char *teststring;
+  char *s;
+  char *tok;
+  int   toklen;
+  char  endc;
+
+  if (esl_strdup("This is\t a sentence.", -1, &teststring) != eslOK) esl_fatal(msg);
+
+  s = teststring;
+  if (esl_strtok(&s, " ", &tok) != eslOK)                            esl_fatal(msg);
+  if (strcmp(tok, "This")       != 0)                                esl_fatal(msg);
+  if (*s != 'i')                                                     esl_fatal(msg);
+  
+  if (esl_strtok_adv(&s, " \t", &tok, &toklen, &endc) != eslOK)      esl_fatal(msg);
+  if (strcmp(tok, "is") != 0)                                        esl_fatal(msg);
+  if (*s != ' ')                                                     esl_fatal(msg);
+  if (toklen != 2)                                                   esl_fatal(msg);
+  if (endc != '\t')                                                  esl_fatal(msg);
+  
+  if (esl_strtok_adv(&s, "\n", &tok, NULL, NULL) != eslOK)           esl_fatal(msg);
+  if (strcmp(tok, " a sentence.") != 0)                              esl_fatal(msg);
+  if (*s != '\0')                                                    esl_fatal(msg);
+
+  free(teststring);
+  return;
+}
+  
+static void
+utest_sprintf(void)
+{
+  char  msg[] = "unit tests for esl_[v]sprintf() failed";
+  int   num   = 99;
+  char *what  = "beer";
+  char *s     = NULL;
+
+  if (esl_sprintf(&s, "%d bottles of %s", num, what) != eslOK) esl_fatal(msg);
+  if (strcmp(s, "99 bottles of beer")                != 0)     esl_fatal(msg);
+  free(s); 
+
+  if (esl_sprintf(&s, NULL) != eslOK) esl_fatal(msg);
+  if (s                     != NULL)  esl_fatal(msg);
+}
+
+
+
+static void
+utest_FileExists(void)
+{
+  char  msg[]       = "FileExists unit test failed";
+  char  tmpfile[32] = "esltmpXXXXXX";
+  FILE *fp         = NULL;
+#ifdef _POSIX_VERSION
+  struct stat st;
+  mode_t      mode;
+#endif
+
+  /* create a tmpfile */
+  if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg);
+  fprintf(fp, "Unit test.\n");
+  fclose(fp);
+
+  if (! esl_FileExists(tmpfile)) esl_fatal(msg);
+
+#ifdef _POSIX_VERSION
+  /* The FileExists doesn't just test existence; it also checks read permission */
+  if (stat(tmpfile, &st)   != 0) esl_fatal(msg);
+  mode = st.st_mode & ~S_IRUSR;
+  if (chmod(tmpfile, mode) != 0) esl_fatal(msg);
+  if (esl_FileExists(tmpfile))   esl_fatal(msg);
+#endif
+
+  remove(tmpfile);
+  if (esl_FileExists(tmpfile))   esl_fatal(msg);
+  return;
+}
+
+static void
+utest_tmpfile_named(void)
+{
+  char  msg[]        = "tmpfile_named unit test failed";
+  char  tmpfile[32]  = "esltmpXXXXXX";
+  FILE *fp           = NULL;
+  char  buf[256];
+
+  if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg);
+  fprintf(fp, "Unit test.\n");
+  fclose(fp);
+  if ((fp = fopen(tmpfile, "r"))   == NULL)  esl_fatal(msg);
+  if (fgets(buf, 256, fp)          == NULL)  esl_fatal(msg);
+  if (strcmp(buf, "Unit test.\n")  != 0)     esl_fatal(msg);
+  fclose(fp);
+  remove(tmpfile);
+  return;
+}
+
+#endif /*eslEASEL_TESTDRIVE*/
+
+
+/*****************************************************************
+ * 10. Test driver.
+ *****************************************************************/
+
+#ifdef eslEASEL_TESTDRIVE
+/* gcc -g -Wall -o easel_utest -I. -L. -DeslEASEL_TESTDRIVE easel.c -leasel -lm
+ * ./easel_utest
+ */
+#include "easel.h"
+
+int main(void)
+{
+#ifdef eslTEST_THROWING
+  esl_exception_SetHandler(&esl_nonfatal_handler);
+#endif
+
+  utest_IsInteger();
+  utest_IsReal();
+  utest_strmapcat();
+  utest_strtok();
+  utest_sprintf();
+  utest_FileExists();
+  utest_tmpfile_named();
+  return eslOK;
+}
+#endif /*eslEASEL_TESTDRIVE*/
+
+/*****************************************************************
+ * 11. Examples.
+ *****************************************************************/
+
+#ifdef eslEASEL_EXAMPLE
+/*::cexcerpt::easel_example_tmpfiles::begin::*/
+/* gcc -g -Wall -o example -I. -L. -DeslEASEL_EXAMPLE_TMPFILES easel.c -leasel -lm
+ * ./example
+ */
+#include "easel.h"
+
+int main(void)
+{
+  char  tmpfile1[32]  = "esltmpXXXXXX"; /* a transient, secure tmpfile: 6 X's are important */
+  char  tmpfile2[32]  = "esltmpXXXXXX"; /* a named tmpfile                                  */
+  FILE *fp            = NULL;
+  char  buf[256];
+
+  /* Example of using a secure, unnamed tmpfile. 
+   * Note, the new tmpfile is automatically deleted, so to cleanup, just fclose() the FILE */
+  esl_tmpfile(tmpfile1, &fp);
+  fprintf(fp, "Hello world!\n");
+  rewind(fp);
+  fgets(buf, 256, fp);
+  printf("first temp file says: %s\n", buf);
+  fclose(fp);
+
+  /* Example of reasonably securely using a named tmpfile. 
+   * To cleanup, must both fclose() the FILE and remove() the file by name */
+  esl_tmpfile_named(tmpfile2, &fp);
+  fprintf(fp, "Hello insecure world!\n");
+  fclose(fp);		/* tmpfile2 now exists on disk and can be closed/reopened */
+
+  fp = fopen(tmpfile2, "r");
+  fgets(buf, 256, fp);
+  printf("second temp file says: %s\n", buf);
+  fclose(fp);
+  remove(tmpfile2);	/* disk file cleanup necessary with this version. */
+
+  return eslOK;
+}
+/*::cexcerpt::easel_example_tmpfiles::end::*/
+#endif /*eslEASEL_EXAMPLE*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/  
diff --git a/easel.h b/easel.h
new file mode 100644
index 0000000..d275047
--- /dev/null
+++ b/easel.h
@@ -0,0 +1,498 @@
+/* Easel's foundation.
+ *
+ * Core functionality of easel: errors, memory allocations, constants,
+ * and configuration for portability.
+ * 
+ * Contents:
+ *   1. Macros implementing Easel error handling conventions
+ *   2. Macros implementing Easel memory allocation conventions
+ *   3. Macros implementing Easel function argument conventions
+ *   4. Macros implementing Easel debugging output conventions
+ *   5. Defined constants
+ *   6. Basic support for Easel digitized biosequences
+ *   7. Miscellaneous
+ *   8. Void declarations of missing augmentations
+ *   9. API declarations of easel.c
+ *  10. Copyright and license.
+ */
+#ifndef eslEASEL_INCLUDED
+#define eslEASEL_INCLUDED
+
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>		/* for FILE */
+#include <stdarg.h>		/* for va_list */
+#include <math.h>               /* for HUGE_VAL */
+#ifdef HAVE_STDINT_H
+#include <stdint.h>		/* for uint32_t and the like (C99) */
+#endif
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>		/* some systems allegedly put uints here */
+#endif
+
+/*****************************************************************
+ * 1. Macros implementing Easel's error handling conventions
+ *****************************************************************/
+/* Many objects contain a fixed length "errbuf" for failure
+ * diagnostics: ESL_FAIL() and ESL_XFAIL() fill this buffer.
+ */
+#define eslERRBUFSIZE 128
+
+/* ESL_FAIL()       - return an error message, without cleanup.
+ * ESL_XFAIL()      - return an error message, with cleanup.
+ * ESL_EXCEPTION()  - throwing an exception, without cleanup.
+ * ESL_XEXCEPTION() - throwing an exception, with cleanup.
+ * 
+ * The X versions (with cleanup) require the caller to have an
+ * <int status> variable and a <ERROR:> goto target in scope, 
+ * which, yes, is a little hacky.
+ *
+ * Wrapping these macros in <while(0)> loops allows a statement:
+ *       if (something) ESL_XEXCEPTION(code,mesg);
+ * without the trailing semicolon becoming a null statement after 
+ * macro expansion.
+ *
+ * All esl_fail() does is vsnprintf() to the <errbuf>; the reason to
+ * have ESL_FAIL and ESL_XFAIL call esl_fail() is to enable us to set
+ * a debugging breakpoint in esl_fail(), so we can break execution at
+ * a normal failure.
+ */
+/*::cexcerpt::error_macros::begin::*/
+#define ESL_FAIL(code, errbuf, ...) do {				\
+    esl_fail(errbuf, __VA_ARGS__);                                      \
+    return code; }							\
+  while (0)
+
+#define ESL_XFAIL(code, errbuf, ...) do {				\
+    status = code;							\
+    esl_fail(errbuf, __VA_ARGS__);                                      \
+    goto ERROR; }							\
+  while (0)
+
+#define ESL_EXCEPTION(code, ...)  do {					\
+    esl_exception(code, FALSE, __FILE__, __LINE__, __VA_ARGS__);	\
+    return code; }							\
+  while (0)
+
+#define ESL_XEXCEPTION(code, ...)  do {					\
+    status = code;							\
+    esl_exception(code, FALSE, __FILE__, __LINE__, __VA_ARGS__);	\
+    goto ERROR; }							\
+  while (0)
+
+#define ESL_EXCEPTION_SYS(code, ...) do {				\
+    esl_exception(code, TRUE, __FILE__, __LINE__, __VA_ARGS__);		\
+    return code; }							\
+  while (0)
+
+#define ESL_XEXCEPTION_SYS(code, ...)  do {				\
+    status = code;							\
+    esl_exception(code, TRUE, __FILE__, __LINE__, __VA_ARGS__);	\
+    goto ERROR; }							\
+  while (0)
+/*::cexcerpt::error_macros::end::*/
+
+
+
+
+/* Return codes for error handler
+ */
+/*::cexcerpt::statuscodes::begin::*/
+#define eslOK              0    /* no error/success             */
+#define eslFAIL            1    /* failure                      */
+#define eslEOL             2    /* end-of-line (often normal)   */
+#define eslEOF             3    /* end-of-file (often normal)   */
+#define eslEOD             4    /* end-of-data (often normal)   */
+#define eslEMEM            5    /* malloc or realloc failed     */
+#define eslENOTFOUND       6    /* file or key not found        */
+#define eslEFORMAT         7    /* file format not correct      */
+#define eslEAMBIGUOUS      8    /* an ambiguity of some sort    */
+#define eslEDIVZERO        9    /* attempted div by zero        */
+#define eslEINCOMPAT      10    /* incompatible parameters      */
+#define eslEINVAL         11    /* invalid argument/parameter   */
+#define eslESYS           12    /* generic system call failure  */
+#define eslECORRUPT       13    /* unexpected data corruption   */
+#define eslEINCONCEIVABLE 14    /* "can't happen" error         */
+#define eslESYNTAX        15    /* invalid user input syntax    */
+#define eslERANGE         16    /* value out of allowed range   */
+#define eslEDUP           17    /* saw a duplicate of something */
+#define eslENOHALT        18    /* a failure to converge        */      
+#define eslENORESULT      19    /* no result was obtained       */
+#define eslENODATA        20    /* no data provided, file empty */
+#define eslETYPE          21    /* invalid type of argument     */
+#define eslEOVERWRITE     22    /* attempted to overwrite data  */
+#define eslENOSPACE       23    /* ran out of some resource     */
+#define eslEUNIMPLEMENTED 24    /* feature is unimplemented     */
+#define eslENOFORMAT      25	/* couldn't guess file format   */
+#define eslENOALPHABET    26	/* couldn't guess seq alphabet  */
+#define eslEWRITE         27   	/* write failed (fprintf, etc)  */
+#define eslEINACCURATE    28    /* return val may be inaccurate */
+/*::cexcerpt::statuscodes::end::*/
+
+
+
+
+
+
+/*****************************************************************
+ * 2. Macros implementing Easel's memory allocation conventions
+ *****************************************************************/
+/* ESL_ALLOC(), ESL_RALLOC():
+ * 
+ * Allocation and reallocation wrappers.
+ * Both require <int status> in scope, and <ERROR:> goto target.
+ * ESL_RALLOC() also requires <void *> ptr to be provided as <tmp>.
+ *
+ * ESL_REALLOC() is a newer version of ESL_RALLOC() which doesn't
+ * need a tmp ptr. All ESL_RALLOC() calls can be safely converted
+ * to ESL_REALLOC() calls.
+ * 
+ * The result of malloc(0) is implementation-defined (either NULL or
+ * a ptr that may not be dereferenced), a bit of a hole in the C
+ * standard. In Easel, we want to avoid having NULL as a valid
+ * non-error result of malloc(), because it confuses static analysis
+ * tools when they see dereferences of possibly NULL pointers. We
+ * therefore treat malloc(0) as an eslEMEM error.
+ */
+/*::cexcerpt::alloc_macros::begin::*/
+#define ESL_ALLOC(p, size) do {\
+    if ( size <= 0 ) { \
+       p = NULL; \
+       status = eslEMEM; \
+       esl_exception(status, FALSE, __FILE__, __LINE__, "zero malloc disallowed"); \
+       goto ERROR;\
+    }\
+    if ( ((p) = malloc(size)) == NULL)  { \
+       status = eslEMEM;\
+       esl_exception(status, FALSE, __FILE__, __LINE__, "malloc of size %d failed", size); \
+       goto ERROR;\
+     }} while (0)
+
+#define ESL_RALLOC(p, tmp, newsize) do {\
+     if ((p) == NULL) { (tmp) = malloc(newsize);         }\
+     else             { (tmp) = realloc((p), (newsize)); }\
+     if ((tmp) != NULL) (p) = (tmp);\
+     else {\
+       status = eslEMEM;\
+       esl_exception(status, FALSE, __FILE__, __LINE__, "realloc for size %d failed", newsize);	\
+       goto ERROR;\
+     }} while (0)
+
+#define ESL_REALLOC(p, newsize) do {\
+     void *esltmpp;\
+     if ((p) == NULL) { (esltmpp) = malloc(newsize);         }\
+     else             { (esltmpp) = realloc((p), (newsize)); }\
+     if ((esltmpp) != NULL) (p) = (esltmpp);\
+     else {\
+       status = eslEMEM;\
+       esl_exception(status, FALSE, __FILE__, __LINE__, "realloc for size %d failed", newsize); \
+       goto ERROR;\
+     }} while (0)
+/*::cexcerpt::alloc_macros::end::*/
+
+/* Convert MiB,GiB,TiB to bytes, using binary definitions (2^20, 2^30, 2^40):
+ * Pedantically speaking, that's: mebibytes (MiB), gibibytes (GiB), tebibytes (TiB).
+ * 1 TB = 10^12 bytes; 1 TiB = 2^40 bytes.
+ */
+#define ESL_MBYTES(x) ((x) * 1048576) 
+#define ESL_GBYTES(x) ((x) * 1024 * 1048576) 
+#define ESL_TBYTES(x) ((x) * 1024 * 1024 * 1048576)
+
+/* Round integer <n> up to the nearest multiple of <m>. 
+ * Particularly useful when dealing w/ memory alignment issues.
+ */
+#define ESL_UPROUND(n, m)  ( ((n) + (m)-1) / (m) * (m))
+
+
+/*****************************************************************
+ * 3. Macros implementing Easel's function argument conventions
+ *****************************************************************/
+
+#define esl_byp_IsInternal(p) ((p) == NULL)
+#define esl_byp_IsReturned(p) ((p) != NULL && (*p) == NULL)
+#define esl_byp_IsProvided(p) ((p) != NULL && (*p) != NULL)
+
+/* Sometimes a shared function API dictates arguments that a function
+ * doesn't use, and we want to silence compiler warnings about this.
+ * Putting ESL_UNUSED(x) in the function, for an unused argument <x>,
+ * should silence the compiler, and should generate a no-op.
+ */
+#define ESL_UNUSED(x) (void)(sizeof((x)))
+
+
+/*****************************************************************
+ * 4. Macros implementing Easel's debugging output conventions
+ *****************************************************************/
+/* Debugging hooks, w/ three levels (1-3).
+ */
+#if eslDEBUGLEVEL >= 1		/* for ESL_DASSERT() macros */
+#include <assert.h>
+#endif
+
+#if (eslDEBUGLEVEL >= 1)
+#define ESL_DPRINTF1(x)  printf x
+#define ESL_DASSERT1(x)  assert x
+#else
+#define ESL_DPRINTF1(x)
+#define ESL_DASSERT1(x)
+#endif
+#if (eslDEBUGLEVEL >= 2)
+#define ESL_DPRINTF2(x)  printf x
+#define ESL_DASSERT2(x)  assert x
+#else
+#define ESL_DPRINTF2(x)
+#define ESL_DASSERT2(x)
+#endif
+#if (eslDEBUGLEVEL >= 3)
+#define ESL_DPRINTF3(x)  printf x
+#define ESL_DASSERT3(x)  assert x
+#else
+#define ESL_DPRINTF3(x)
+#define ESL_DASSERT3(x)
+#endif
+
+
+/*****************************************************************
+ * 5. Defined constants
+ *****************************************************************/
+
+/* Making sure TRUE/FALSE are defined, for convenience */
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+/* Some basic mathematical constants. 
+ * Assuming IEEE754 math with 64-bit doubles (53-bit mantissas), we 
+ * want 17 significant decimal digits in our constants. More is
+ * a waste (but we do it for some anyway).
+ */
+#define eslCONST_E     2.71828182845904523536028747135
+#define eslCONST_PI    3.14159265358979323846264338328
+#define eslCONST_EULER 0.57721566490153286060651209008
+#define eslCONST_GOLD  1.61803398874989484820458683437
+#define eslCONST_LOG2  0.69314718055994529
+#define eslCONST_LOG2R 1.44269504088896341
+
+/* Define <eslINFINITY>, <eslNaN> portably.  
+ * ANSI C99 makes it easy (at last!). The failovers to other pre-C99
+ * methods are legacy now that we require a C99 compiler - but no harm
+ * leaving them in Just In Case.
+ */
+#if defined (INFINITY)
+#define eslINFINITY    INFINITY  /* C99 */
+#elif defined (HUGE_VAL)
+#define eslINFINITY    HUGE_VAL	 /* assume IEEE754 HUGE_VAL = infinity. ok? */
+#else
+#define eslINFINITY    (1.0/0.0) /* portable? */
+#endif
+
+#if defined (NAN)
+#define eslNaN         NAN	/* C99 */
+#else
+#define eslNaN         (eslINFINITY/eslINFINITY) /* portably make a IEEE754 NaN */
+#endif
+
+/* Define crossovers for numerical approximations.
+ */
+/* log(1+x) ~ x and  1-e^x = -x approximation.
+ * Same threshold appears to be optimal for float or double x. xref STL9/138.
+ */
+#define eslSMALLX1    5e-9
+
+
+/*****************************************************************
+ * 6. Basic support for Easel's digitized biosequences.
+ *****************************************************************/
+
+/* Most of this support is in the alphabet module, but we externalize 
+ * some into the easel foundation because ESL_INMAP is used in unaugmented
+ * sqio, msa modules.
+ * 
+ * A digital sequence residue (ESL_DSQ) is an unsigned 8-bit type
+ * (0..255).  A valid digital residue has a value in the range 0..127
+ * (Easel can represent alphabets of up to 128 different characters).
+ * Values 128..255 are reserved for flags.
+ *
+ * An "inmap" is ESL_DSQ[128], or *ESL_DSQ allocated for 128 values;
+ * it is a many-to-one construct for mapping 7-bit ASCII chars (in
+ * range 0..127) either to new ASCII chars (in the case of raw
+ * sequence input in sqio, msa) or to digital codes (in the alphabet
+ * module).  Valid mapped values are 0..127; any value in range
+ * 128..255 is some kind of flag.
+ */
+typedef uint8_t ESL_DSQ;
+#define eslDSQ_SENTINEL 255	/* sentinel bytes 0,L+1 in a dsq */
+#define eslDSQ_ILLEGAL  254	/* input symbol is unmapped and unexpected */
+#define eslDSQ_IGNORED  253     /* input symbol is unmapped and ignored */
+#define eslDSQ_EOL      252	/* input symbol marks end of a line */
+#define eslDSQ_EOD      251     /* input symbol marks end of a seq record */
+
+/* If you try to test sym > 0 && sym <= 127 below, instead of isascii(sym),
+ * you'll get a compiler warning for an always-successful test regardless
+ * of whether a char is signed or unsigned. So we trust that isascii() is
+ * doing the Right Thing.
+ */
+#define esl_inmap_IsValid(inmap, sym)  (isascii(sym) && (inmap)[(int)sym] <= 127)
+
+
+/*****************************************************************
+ * 7. Miscellaneous.
+ *****************************************************************/
+/* A placeholder for helping w/ portability of filenames/paths.
+ * I think, but have not tested, that:
+ *   VMS:            #define DIRSLASH ']'
+ *   ancient MacOS:  #define DIRSLASH ':'
+ *   DOS:            #define DIRSLASH '\\'
+ * Setting DIRSLASH correctly is probably not the only thing
+ * that would need to be done to port to other OS's, but it's
+ * probably a start.
+ *
+ * The code assumes that '.' is used for file name extensions,
+ * such as "foo.bar".
+ *
+ * This gets used in easel.c's *_File*() functions.
+ */
+#define eslDIRSLASH '/'           /* UNIX directory paths have /foo/bar */
+
+/* Some generic macros for swapping, min, and max.
+ */
+#define ESL_SWAP(x, y, type)  do { type esltmpxyz = (x); (x) = (y); (y) = esltmpxyz; } while (0)
+#define ESL_MIN(a,b)          (((a)<(b))?(a):(b))
+#define ESL_MAX(a,b)          (((a)>(b))?(a):(b))
+
+static inline float esl_log (double x) { return (x == 0.0 ? -eslINFINITY : log(x));  } /* avoid fp exceptions; log(0) = -inf is fine */
+static inline float esl_logf(float x)  { return (x == 0.0 ? -eslINFINITY : logf(x)); }
+static inline float esl_log2f(float x) { return (x == 0.0 ? -eslINFINITY : eslCONST_LOG2R * logf(x)); }
+
+/* Typedef: <esl_pos_t> 
+ * 
+ * <esl_pos_t> is a signed integer type suitable for safe casting
+ * to EITHER an <off_t> or <size_t> on this system (i.e. as a position
+ * in memory or in a file on disk), where we may use a -1 as a flag
+ * (or even other negative numbers).
+ *
+ * <esl_pos_t> is for use for anything having to do with positions in
+ * large buffers, strings, or files, where we want strict control
+ * of integer range limits.
+ *
+ * Note that POSIX requires size_t to be unsigned, and off_t to be
+ * signed.
+ */
+typedef int64_t esl_pos_t;
+
+
+/* ESL_ANALYZER_NORETURN
+ *    adds some optional support for clang static analysis. 
+ *    The static analyzer sometimes needs to be clued in when a
+ *    function cannot return: fatal error handlers, for example.
+ *    clang, gcc, and other gcc-like compilers support the __attribute__
+ *    extension on function declarations. We detect this support
+ *    at compile-time in the configure script. Functions that
+ *    don't return are declared like:
+ *       extern void fatal(char *msg, ...) ESL_ANALYZER_NORETURN;    
+ */
+#ifndef ESL_ANALYZER_NORETURN
+#ifdef  HAVE_FUNC_ATTRIBUTE_NORETURN
+#define ESL_ANALYZER_NORETURN __attribute__((__noreturn__))
+#else
+#define ESL_ANALYZER_NORETURN
+#endif
+#endif
+
+
+
+
+/*****************************************************************
+ * 8. Void declarations of missing augmentations
+ *****************************************************************/
+#ifndef eslAUGMENT_ALPHABET
+typedef void ESL_ALPHABET;
+#endif
+#ifndef eslAUGMENT_KEYHASH
+typedef void ESL_KEYHASH;
+#endif
+
+/*****************************************************************
+ * 9. The API declarations for easel.c
+ *****************************************************************/
+
+/* 1. Error handling. */
+typedef void (*esl_exception_handler_f)(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, va_list argp);
+extern void esl_fail(char *errbuf, const char *format, ...);
+extern void esl_exception(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, ...);
+extern void esl_exception_SetHandler(esl_exception_handler_f);
+extern void esl_exception_ResetDefaultHandler(void);
+extern void esl_nonfatal_handler(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, va_list argp);
+extern void esl_fatal(const char *format, ...) ESL_ANALYZER_NORETURN;
+
+/* 2. Memory allocation/deallocation conventions. */
+extern void esl_Free2D(void  **p, int dim1);
+extern void esl_Free3D(void ***p, int dim1, int dim2);
+
+/* 3. Standard banner for Easel miniapplications. */
+extern int  esl_banner    (FILE *fp, char *progname, char *banner);
+extern int  esl_usage     (FILE *fp, char *progname, char *usage);
+extern int  esl_dataheader(FILE *fp, ...);
+
+/* 4. Improved replacements for some C library functions */
+extern int  esl_fgets(char **buf, int *n, FILE *fp);
+extern int  esl_strdup(const char *s, int64_t n, char **ret_dup);
+extern int  esl_strcat(char **dest, int64_t ldest, const char *src, int64_t lsrc);
+extern int  esl_strmapcat        (const ESL_DSQ *inmap, char **dest, int64_t *ldest, const char *src, esl_pos_t lsrc);
+extern int  esl_strmapcat_noalloc(const ESL_DSQ *inmap,  char *dest, int64_t *ldest, const char *src, esl_pos_t lsrc);
+extern int  esl_strtok    (char **s, char *delim, char **ret_tok);
+extern int  esl_strtok_adv(char **s, char *delim, char **ret_tok, int *opt_toklen, char *opt_endchar);
+extern int  esl_sprintf (char **ret_s, const char *format, ...);
+extern int  esl_vsprintf(char **ret_s, const char *format, va_list *ap);
+extern int  esl_strcmp(const char *s1, const char *s2);
+
+/* 5.  Portable drop-in replacements for non-standard C functions */
+#ifndef HAVE_STRCASECMP
+#ifdef _MSC_VER
+#define strcasecmp stricmp
+#else
+extern int  esl_strcasecmp(const char *s1, const char *s2);
+#define strcasecmp esl_strcasecmp
+#endif
+#endif
+
+/* 6. Additional string functions, esl_str*() */
+extern int     esl_strchop(char *s, int64_t n);
+extern int     esl_strdealign(char *s, const char *aseq, const char *gapchars, int64_t *opt_rlen);
+extern int     esl_str_IsBlank(char *s);
+extern int     esl_str_IsInteger(char *s);
+extern int     esl_str_IsReal(char *s);
+extern int64_t esl_str_GetMaxWidth(char **s, int n);
+
+/* 7. File path/name manipulation functions, including tmpfiles */
+extern int  esl_FileExists(const char *filename);
+extern int  esl_FileTail(const char *path, int nosuffix, char **ret_file);
+extern int  esl_file_Extension(char *filename, esl_pos_t n_ignore, char **ret_sfx, esl_pos_t *ret_n);
+extern int  esl_FileConcat(const char *dir, const char *file, char **ret_path);
+extern int  esl_FileNewSuffix(const char *filename, const char *sfx, char **ret_newpath);
+extern int  esl_FileEnvOpen(const char *fname, const char *env,
+			    FILE **ret_fp, char **ret_path);
+extern int  esl_tmpfile(char *basename6X, FILE **ret_fp);
+extern int  esl_tmpfile_named(char *basename6X, FILE **ret_fp);
+extern int  esl_getcwd(char **ret_cwd);
+
+/* 8. Typed comparison routines. */
+extern int  esl_DCompare   (double a, double b, double tol);
+extern int  esl_FCompare   (float  a, float  b, float  tol);
+extern int  esl_DCompareAbs(double a, double b, double tol);
+extern int  esl_FCompareAbs(float  a, float  b, float  tol);
+extern int  esl_CCompare(char *s1, char *s2);
+
+#endif /*eslEASEL_INCLUDED*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/easel.tex b/easel.tex
new file mode 100644
index 0000000..35dc71b
--- /dev/null
+++ b/easel.tex
@@ -0,0 +1,413 @@
+The easel (esl) module implements a small set of functionality shared
+by all the modules: notably, the error-handling system.
+
+\section{Error handling conventions}
+
+Easel might be used in applications ranging from small command line
+utilities to complex graphical user interfaces and parallel
+systems. Simple and complex applications have different needs for how
+errors should be handled by a library.
+
+In a simple application, we don't want to write a lot of code to
+checking return codes for unexpected problems. We would prefer to have
+Easel crash out with an appropriate message to \ccode{stderr} -- after
+all, that's all a simple application would do anyway.
+
+On the other hand, there are certain problems that even the simplest
+command-line applications should handle gracefully. Errors involving
+user input (including typos in command line arguments, bad file
+formats, nonexistent files, or bad file permissions) are ``normal''
+and should be expected. Users will do anything.
+
+In a complex application, we may want to guarantee that execution
+never terminates within a library routine. In this case, library
+functions always need to return control to the application, even in
+the most unexpected circumstances, so the application can fail
+gracefully. A failure in an Easel routine should not suddenly crash a
+whole graphical user environment, for example. Additionally, because a
+complex application may not even be associated with a terminal, a
+library cannot count on printing error messages directly to
+\ccode{stderr}.
+
+These considerations motivate Easel's error handling conventions.
+Most Easel procedures return an integer status code. An \ccode{eslOK}
+code indicates that the procedure succeeded. A nonzero code indicates
+an error. Easel distinguishes two kinds of errors:
+
+\begin{itemize}
+\item \textbf{Failures} include normal ``errors'' (like a read failing
+  when the end of a file is reached), and errors that are the user's
+  fault, such as bad input (which are also normal, because users will
+  do anything.) We say that failures are \textbf{returned} by Easel
+  functions. All applications should check the return status of any
+  Easel function that might return a failure code. Relatively few
+  Easel functions can return failure codes. The ones that do are
+  generally functions having to do with reading user input.
+
+\item \textbf{Exceptions} are errors that are the fault of Easel (bugs
+in my code) or your application (bugs in your code) or the system
+(resource allocation failures). We say that exceptions are
+\textbf{thrown} by Easel functions. By default, exceptions result in
+immediate termination of your program. Optionally, you may provide
+your own exception handler, in which case Easel functions may return
+nonzero exception codes (in addition to any nonzero failure codes).
+\end{itemize}
+
+The documentation for each Easel function lists what failure codes it
+may return, as well as what exception codes it may throw (if a
+nonfatal exception handler has been registered), in addition to the
+\ccode{eslOK} normal status code. The list of possible status codes is
+shown in Table~\ref{tbl:statuscodes}. There is no intrinsic
+distinction between failure codes and exception codes. Codes that
+indicate failures in one function may indicate exceptions in another
+function.
+
+\begin{table}
+\begin{center}
+\input{cexcerpts/statuscodes}
+\end{center}
+\caption{List of all status codes that might be returned by Easel functions.}
+\label{tbl:statuscodes}
+\end{table}
+
+Not all Easel functions return status codes. \ccode{*\_Create()}
+functions that allocate and create new objects usually follow a
+convention of returning a valid pointer on success, and \ccode{NULL}
+on failure; these are functions that only fail by memory allocation
+failure. Destructor functions (\ccode{*\_Destroy()}) always return
+\ccode{void}, and must have no points of failure of their own, because
+destructors can be called when we're already handling an
+exception. Functions with names containing \ccode{Is}, such as
+\ccode{esl\_abc\_XIsValid()}, are tests that return \ccode{TRUE} or
+\ccode{FALSE}. Finally, there are some ``true'' functions that simply
+return an answer, rather than a status code; these must be functions
+that have no points of failure.
+
+\subsection{Failure messages} 
+
+When failures occur, often the failure status code is sufficient for
+your application to know what went wrong. For instance, \ccode{eslEOF}
+means end-of-file, so your application might report \ccode{"premature
+end of file"} if it receives such a status code unexpectedly. But for
+failures involving a file format syntax problem (for instance) a terse
+\ccode{eslESYNTAX} return code is not as useful as knowing
+\ccode{"Parse failed at line 42 of file foo.data, where I expected to
+see an integer, but I saw nothing"}. When your application might want
+more information to format an informative failure message for the
+user, the Easel API provides (somewhere) a message buffer called
+\ccode{errbuf[]}.
+
+In many cases, file parsers in Easel are encapsulated in objects. In
+these cases, the object itself allocates an \ccode{errbuf[]} message
+string. (For instance, see the \eslmod{sqio} module and its
+\ccode{ESL\_SQFILE} object for sequence file parsing.)  In a few
+cases, the \ccode{errbuf[]} is part of the procedure's call API, and
+space is provided by the caller. In such cases, the caller either
+passes \ccode{NULL} (no failure message is requested) or a pointer to
+allocated space for at least \ccode{eslERRBUFSIZE} chars. (For
+instance, see the \eslmod{tree} module and the
+\ccode{esl\_tree\_ReadNewick()} parser.)
+
+Easel uses \ccode{sprintf()} to format the messages in
+\ccode{errbuf[]}'s. Each individual call guarantees that the size of
+its message cannot overflow \ccode{eslERRBUFSIZE} chars, so none of
+these \ccode{sprintf()} calls represent possible security
+vulnerabilities (buffer overrun attacks).
+
+
+\subsection{Exception handling}
+
+Easel's default exception handler prints a message to \ccode{stderr}
+and aborts execution of your program, as in:
+
+\begin{cchunk}
+   Easel exception: Memory allocation failed.
+   Aborted at file sqio.c, line 42. 
+\end{cchunk}
+
+Therefore, by default, Easel handles its own exceptions internally,
+and exception status codes are not returned to your
+application. Simple applications don't need to worry about checking
+for exceptions.
+
+If your application wants to handle exceptions itself -- for instance,
+if you want a guarantee that execution will never terminate from
+within Easel -- or even if you simply want to change the format of
+these messages, you can register a custom exception handler which will
+catch the information from Easel and react appropriately. If your
+exception handler prints a message and exits, Easel will still just
+abort without returning exception codes. If your exception handler is
+nonfatal (returning \ccode{void}), Easel procedures then percolate the
+exception code up through the call stack until the exception code is
+returned to your application.
+
+To provide your own exception handler, you define your exception
+handler with the following prototype:
+
+\begin{cchunk}
+extern void my_exception_handler(int code, char *file, int line, char *format, va_list arg);
+\end{cchunk}
+
+An example implementation of a nonfatal exception handler:
+
+\begin{cchunk}
+#include <stdarg.h>
+
+void
+my_exception_handler(int code, char *file, int line, char *format, va_list arg)
+{
+  fprintf(stderr, ``Easel threw an exception (code %d):\n'', code);
+  if (format != NULL) vfprintf(stderr, format, arg);
+  fprintf(stderr, ``at line %d, file %s\b'', line, file);
+  return;
+}
+\end{cchunk}
+
+The \ccode{code}, \ccode{file}, and \ccode{line} are always
+present. The formatted message (the \ccode{format} and \ccode{va\_list
+arg}) is optional; the \ccode{format} might be
+\ccode{NULL}. (\ccode{NULL} messages are used when percolating
+exceptions up a stack trace, for example.)
+
+Then, to register your exception handler, you call
+\ccode{esl\_exception\_SetHandler(\&my\_error\_handler)} in your
+application. Normally you would do this before calling any other Easel
+functions. However, in principle, you can change error handlers at any
+time. You can also restore the default handler at any time with
+\ccode{esl\_exception\_RestoreDefaultHandler()}.
+
+The implementation of the exception handler relies on a static
+function pointer that is not threadsafe. If you are writing a threaded
+program, you need to make sure that multiple threads do not try to
+change the handler at the same time.
+
+Because Easel functions call other Easel functions, the function that
+first throws an exception may not be the function that your
+application called.  If you implement a nonfatal handler, an exception
+may result in a partial or complete stack trace of exceptions, as the
+original exception percolates back to your application. Your exception
+handler should be able to deal with a stack trace. The first exception
+code and message will be the most relevant. Subsequent codes and
+messages arise from that exception percolating upwards. 
+
+For example, a sophisticated replacement exception handler might push
+each code/message pair into a FIFO queue. When your application
+receives an exception code from an Easel call, your application can
+might then access this queue, and see where the exception occurred in
+Easel, and what messages Easel left for you. A less sophisticated
+replacement exception handler might just register the first
+code/message pair, and ignore the subsequent exceptions from
+percolating up the stack trace. Note the difference between the
+exception handler that you register with Easel (which operates inside
+Easel, and must obey Easel's conventions) and any error handling you
+do in your own application after Easel returns a nonzero status code
+to you (which is your own business).
+
+Although each function's documentation \emph{in principle} lists all
+thrown exceptions, \emph{in practice}, you should not trust this
+list. Because of exceptions percolating up from other Easel calls, it
+is too easy to forget to document all possible exception
+codes.\footnote{Someday we should combine a static code analyzer with
+a script that understands Easel's exception conventions, and automate
+the enumeration of all possible codes.} If you are catching
+exceptions, you should program defensively here, and always have a
+failsafe catch for any nonzero return status. For example, a minimal
+try/catch idiom for an application calling a Easel function is
+something like:
+
+\begin{cchunk}
+     int status;
+     if ((status = esl_foo_function()) != eslOK)  my_failure();
+\end{cchunk}
+
+Or, a little more complex one that catches some specific errors, but
+has a failsafe for everything else, is:
+
+\begin{cchunk}
+     int status;
+     status = esl_foo_function();
+     if      (status == eslEMEM) my_failure("Memory allocation failure");
+     else if (status != eslOK)   my_failure("Unexpected exception %d\n\", status);
+\end{cchunk}
+
+
+\subsection{Violations}
+
+Internally, Easel also distinguishes a third class of error, termed a
+\textbf{fatal violation}. Violations never arise in production code;
+they are used to catch bugs during development and testing. Violations
+always result in immediate program termination. They are generated by
+two mechanisms: from assertions that can be optionally enabled in
+development code, or from test harnesses that call the always-fatal
+\ccode{esl\_fatal()} function when they detect a problem they're
+testing for.
+
+
+\subsection{Internal API for error handling}
+
+You only need to understand this section if you want to understand
+Easel's source code (or other code that uses Easel conventions, like
+HMMER), or if you want to use Easel's error conventions in your own
+source code.
+
+The potentially tricky design issue is the following. One the one
+hand, you want to be able to return an error or throw an exception
+``quickly'' (in less than a line of code). On the other hand, it might
+require several lines of code to free any resources, set an
+appropriate return state, and set the appropriate nonzero status code
+before leaving the function. 
+
+Easel uses the following error-handling macros:
+
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\ccode{ESL\_FAIL(code, errbuf, mesg, ...)}   & Format errbuf, return failure code. \\
+\ccode{ESL\_EXCEPTION(code, mesg, ...)}      & Throw an exception, return exception code. \\
+\ccode{ESL\_XFAIL(code, errbuf, mesg, ...)}  & A failure message, with cleanup convention.\\
+\ccode{ESL\_XEXCEPTION(code, mesg, ...)}     & An exception, with cleanup convention.\\
+\hline
+\end{tabular}
+}
+\end{center}
+
+They are implementated in \ccode{easel.h} as:
+
+\input{cexcerpts/error_macros}
+
+The \ccode{ESL\_FAIL} and \ccode{ESL\_XFAIL} macros are only used when
+a failure message needs to be formatted. For the simpler case where we
+just return an error code, Easel simply uses \ccode{return code;} or
+\ccode{status = code; goto ERROR;}, respectively.
+
+The \ccode{X} versions, with the cleanup convention, are sure to
+offend some programmers' sensibilities. They require the function to
+provide an \ccode{int status} variable in scope, and they require an
+\ccode{ERROR:} target for a \ccode{goto}. But if you can stomach that,
+they provide for a fairly clean idiom for catching exceptions and
+cleaning up, and cleanly setting different return variable states on
+success versus failure, as illustrated by this pseudoexample:
+
+\begin{cchunk}
+int 
+foo(char **ret_buf, char **ret_fp)
+{
+    int status;
+    char *buf = NULL;
+    FILE *fp  = NULL;
+
+    if ((buf = malloc(100))  == NULL) ESL_XEXCEPTION(eslEMEM,      "malloc failed");
+    if ((fp  = fopen("foo")) == NULL) ESL_XEXCEPTION(eslENOTFOUND, "file open failed");
+
+    *ret_buf = buf;
+    *ret_fp  = fp;
+    return eslOK;
+
+  ERROR:
+    if (buf != NULL) free(buf);  *ret_buf = NULL;
+    if (fp  != NULL) fclose(fp); *ret_fp  = NULL;
+    return status;
+}
+\end{cchunk}
+
+Additionally, for memory allocation and reallocation, Easel implements
+two macros \ccode{ESL\_ALLOC()} and \ccode{ESL\_RALLOC()}, which
+encapsulate standard \ccode{malloc()} and \ccode{realloc()} calls
+inside Easel's exception-throwing convention.
+
+
+\vspace*{\fill}
+\begin{quote}
+\emph{Only a complete outsider could ask your question. Are there
+control authorities? There are nothing but control authorities. Of
+course, their purpose is not to uncover errors in the ordinary meaning
+of the word, since errors do not occur and even when an error does in
+fact occur, as in your case, who can say conclusively that it is an
+error?}\\ \hspace*{\fill} -- Franz Kafka, \emph{The Castle}
+\end{quote}     
+
+
+\section{Memory management}
+
+
+\section{Replacements for C library functions}
+
+
+\section{Standard banner for Easel miniapplications}
+
+
+\section{File and path name manipulation}
+
+
+\subsection{Secure temporary files}
+
+A program may need to write and read temporary files.  Many of the
+methods for creating temporary files, even using standard library
+calls, are known to create exploitable security holes
+\citep{Wheeler03,ChenDeanWagner04}.
+
+Easel provides a secure and portable POSIX procedure for obtaining an
+open temporary file handle, \ccode{esl\_tmpfile()}. This replaces the
+ANSI C \ccode{tmpfile()} function, which is said to be insecurely
+implemented on some platforms.  Because closing and reopening a
+temporary file can create an exploitable race condition under certain
+circumstances, \ccode{esl\_tmpfile()} does not return the name of the
+invisible file it creates, only an open \ccode{FILE *} handle to
+it. The tmpfile is not persistent, meaning that it automatically
+vanishes when the \ccode{FILE *} handle is closed. The tmpfile is
+created in the usual system world-writable temporary directory, as
+indicated by \ccode{TMPDIR} or \ccode{TMP} environment variables, or
+\ccode{/tmp} if neither environment variable is defined.
+
+Still, it is sometimes useful, even necessary, to close and reopen a
+temporary file. For example, Easel's own test suites generate a
+variety of input files for testing input parsers.  Easel also provides
+the \ccode{esl\_tmpfile\_named()} procedure for creating a persistent
+tmpfile, which returns both an open \ccode{<FILE *>} handle and the
+name of the file. Because the tmpfile name is known, the file may be
+closed and reopened.  \ccode{esl\_tmpfile\_named()} creates its files
+relative to the current working directory, not in \ccode{TMPDIR}, in
+order to reduce the chances of creating the file in a shared directory
+where a race condition might be exploited. Nonetheless, secure use of
+\ccode{esl\_tmpfile\_named()} requires that you must only reopen a
+tmpfile for reading only, not for writing, and moreover, you must not
+trust the contents.  (It may be possible for an attacker to replace
+the tmpfile with a symlink to another file.)
+
+An example that shows both tmpfile mechanisms:
+
+\input{cexcerpts/easel_example_tmpfiles}
+
+\section{Internals}
+
+\subsection{Input maps}
+
+An \esldef{input map} is for converting input ASCII symbols to
+internal encodings. It is a many-to-one mapping of the 128 7-bit ASCII
+symbol codes (0..127) onto new ASCII symbol codes. It is defined as
+an \ccode{unsigned char inmap[128]} or a \ccode{unsigned char *}
+allocated for 128 entries.
+
+Input maps are used in two contexts: for filtering ASCII text input
+into internal text strings, and for converting ASCII input or internal
+ASCII strings into internal digitized sequences (an \eslmod{alphabet}
+object contains an input map that it uses for digitization).
+
+The rationale for input maps is the following. The ASCII strings that
+represent biosequence data require frequent massaging. An input file
+might have sequence data mixed up with numerical coordinates and
+punctuation for human readability. We might want to distinguish
+characters that represent residues (that should be input) from
+characters for coordinates and punctuation (that should be ignored)
+from characters that aren't supposed to be present at all (that should
+trigger an error or warning). Also, in representing a sequence string
+internally, we might want to map the symbols in an input string onto a
+smaller internal alphabet. For example, we might want to be
+case-insensitive (allow both T and t to represent thymine), or we
+might want to allow an input T to mean U in a program that deals with
+RNA sequence analysis, so that input files can either contain RNA or
+DNA sequence data.  Easel reuses the input map concept in routines
+involved in reading and representing input character sequences, for
+example in the \eslmod{alphabet}, \eslmod{sqio}, and \eslmod{msa}
+modules.
+
diff --git a/esl_alphabet.c b/esl_alphabet.c
new file mode 100644
index 0000000..4013f8f
--- /dev/null
+++ b/esl_alphabet.c
@@ -0,0 +1,2553 @@
+/* Implements the standard digitized alphabets for biosequences.
+ * 
+ *    1. ESL_ALPHABET object for digital alphabets.
+ *    2. Digitized sequences (ESL_DSQ *).
+ *    3. Other routines in the API.
+ *    4. Unit tests.
+ *    5. Test driver.
+ *    6. Examples.
+ *    7. Copyright notice and license.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#ifdef HAVE_STRINGS_H
+#include <strings.h>		/* POSIX strcasecmp() */
+#endif
+
+#include "easel.h"
+#include "esl_alphabet.h"
+
+
+
+/*****************************************************************
+ * 1. The ESL_ALPHABET object
+ *****************************************************************/ 
+
+static ESL_ALPHABET *create_rna(void);
+static ESL_ALPHABET *create_dna(void);
+static ESL_ALPHABET *create_amino(void);
+static ESL_ALPHABET *create_coins(void);
+static ESL_ALPHABET *create_dice(void);
+
+static int set_complementarity(ESL_ALPHABET *a);
+
+/* Function:  esl_alphabet_Create()
+ * Synopsis:  Create alphabet of a standard type.
+ *
+ * Purpose:   Creates one of the three standard bio alphabets:
+ *            <eslDNA>, <eslRNA>, or <eslAMINO>, and returns
+ *            a pointer to it.
+ *
+ * Args:      type  - <eslDNA>, <eslRNA>, or <eslAMINO>. 
+ *
+ * Returns:   pointer to the new alphabet.
+ *
+ * Throws:    <NULL> if any allocation or initialization fails.
+ */
+ESL_ALPHABET *
+esl_alphabet_Create(int type)
+{
+  ESL_ALPHABET *a = NULL;
+
+  switch(type) { 
+  case eslRNA:    a = create_rna();   break;
+  case eslDNA:    a = create_dna();   break;
+  case eslAMINO:  a = create_amino(); break;
+  case eslCOINS:  a = create_coins(); break;
+  case eslDICE:   a = create_dice();  break;
+  default:        esl_fatal("bad alphabet type: unrecognized");  // violation: must be a code error, not user.
+  }
+  return a;
+}
+
+/* Function:  esl_alphabet_CreateCustom()
+ * Synopsis:  Create a custom alphabet.
+ *
+ * Purpose:   Creates a customized biosequence alphabet,
+ *            and returns a ptr to it. The alphabet type is set 
+ *            to <eslNONSTANDARD>.
+ *            
+ *            <alphabet> is the internal alphabet string;
+ *            <K> is the size of the base alphabet;
+ *            <Kp> is the total size of the alphabet string. 
+ *            
+ *            In the alphabet string, residues <0..K-1> are the base alphabet; 
+ *            residue <K> is the canonical gap (indel) symbol; 
+ *            residues <K+1..Kp-4> are additional degeneracy symbols (possibly 0 of them);
+ *            residue <Kp-3> is an "any" symbol (such as N or X); 
+ *            residue <Kp-2> is a "nonresidue" symbol (such as *); 
+ *            and residue <Kp-1> is a "missing data" gap symbol.
+ *            
+ *            The two gap symbols, the nonresidue, and the "any"
+ *            symbol are mandatory even for nonstandard alphabets, so
+ *            <Kp> $\geq$ <K+4>.
+ *            
+ * Args:      alphabet - internal alphabet; example "ACGT-RYMKSWHBVDN*~"
+ *            K        - base size; example 4
+ *            Kp       - total size, including gap, degeneracies; example 18
+ *
+ * Returns:   pointer to new <ESL_ALPHABET> structure.
+ *
+ * Throws:    <NULL> if any allocation or initialization fails.
+ */
+ESL_ALPHABET *
+esl_alphabet_CreateCustom(const char *alphabet, int K, int Kp)
+{
+  ESL_ALPHABET *a = NULL;
+  int           c,x,y;
+  int           status;
+
+  /* Argument checks.
+   */
+  if (strlen(alphabet) != Kp) ESL_XEXCEPTION(eslEINVAL, "alphabet length != Kp");
+  if (Kp < K+4)               ESL_XEXCEPTION(eslEINVAL, "Kp too small in alphabet"); 
+
+  /* Allocation/init, level 1.
+   */
+  ESL_ALLOC(a, sizeof(ESL_ALPHABET));
+  a->sym        = NULL;
+  a->degen      = NULL;
+  a->ndegen     = NULL;
+  a->complement = NULL;
+  
+  /* Allocation/init, level 2.
+   */
+  ESL_ALLOC(a->sym,    sizeof(char)   * (Kp+1));
+  ESL_ALLOC(a->ndegen, sizeof(int)    * Kp);
+  ESL_ALLOC(a->degen,  sizeof(char *) * Kp);
+  a->degen[0] = NULL;
+
+  /* Allocation/init, level 3.
+   */
+  ESL_ALLOC(a->degen[0], sizeof(char) * (Kp*K));
+  for (x = 1; x < Kp; x++)
+    a->degen[x] = a->degen[0]+(K*x);
+
+  /* Initialize the internal alphabet: 
+   */
+  a->type = eslNONSTANDARD;
+  a->K    = K;
+  a->Kp   = Kp;
+  strcpy(a->sym, alphabet);
+
+  /* Initialize the input map, mapping ASCII seq chars to digital codes,
+   * and eslDSQ_ILLEGAL for everything else.
+   */
+  for (c = 0; c < 128; c++)   a->inmap[c]               = eslDSQ_ILLEGAL;
+  for (x = 0; x < a->Kp; x++) a->inmap[(int) a->sym[x]] = x;  
+
+  /* Initialize the degeneracy map:
+   *  Base alphabet (first K syms) are automatically
+   *  mapped uniquely; (Kp-3) is assumed to be
+   *  the "any" character; other degen chars (K+1..Kp-4) are 
+   *  unset; gap, nonresidue, missing character are unmapped (ndegen=0)
+   */
+  for (x = 0; x < a->Kp; x++)  	/* clear everything */
+    {
+      a->ndegen[x] = 0;
+      for (y = 0; y < a->K; y++) a->degen[x][y] = 0;
+    }
+  for (x = 0; x < a->K; x++) 	/* base alphabet */
+    {
+      a->ndegen[x]   = 1;
+      a->degen[x][x] = 1;
+    }
+                                /* "any" character */
+  a->ndegen[Kp-3]  = K;
+  for (x = 0; x < a->K; x++) a->degen[Kp-3][x] = 1;
+
+  return a;
+
+ ERROR:
+  esl_alphabet_Destroy(a);
+  return NULL;
+}
+
+
+/* create_rna(): 
+ * Creates a standard RNA alphabet.
+ */
+static ESL_ALPHABET *
+create_rna(void)
+{
+  ESL_ALPHABET *a = NULL;
+  int           status;
+
+  /* Create the fundamental alphabet
+   */
+  if ((a = esl_alphabet_CreateCustom("ACGU-RYMKSWHBVDN*~", 4, 18)) == NULL) return NULL;
+  a->type = eslRNA;
+  
+  /* Add desired synonyms in the input map.
+   */
+  esl_alphabet_SetEquiv(a, 'T', 'U');	    /* read T as a U */
+  esl_alphabet_SetEquiv(a, 'X', 'N');	    /* read X as an N (many seq maskers use X) */
+  esl_alphabet_SetEquiv(a, 'I', 'A');       /* Inosine is a deaminated Adenosine, appears in some RNACentral sequences */
+  esl_alphabet_SetEquiv(a, '_', '-');       /* allow _ as a gap too */
+  esl_alphabet_SetEquiv(a, '.', '-');       /* allow . as a gap too */
+  esl_alphabet_SetCaseInsensitive(a);       /* allow lower case input */
+
+  /* Define degenerate symbols.
+   */
+  esl_alphabet_SetDegeneracy(a, 'R', "AG");
+  esl_alphabet_SetDegeneracy(a, 'Y', "CU");
+  esl_alphabet_SetDegeneracy(a, 'M', "AC");
+  esl_alphabet_SetDegeneracy(a, 'K', "GU");
+  esl_alphabet_SetDegeneracy(a, 'S', "CG");
+  esl_alphabet_SetDegeneracy(a, 'W', "AU");
+  esl_alphabet_SetDegeneracy(a, 'H', "ACU");
+  esl_alphabet_SetDegeneracy(a, 'B', "CGU");
+  esl_alphabet_SetDegeneracy(a, 'V', "ACG");
+  esl_alphabet_SetDegeneracy(a, 'D', "AGU");  
+
+  if ( (status = set_complementarity(a)) != eslOK) goto ERROR;
+
+  return a;
+
+ ERROR:
+  esl_alphabet_Destroy(a);
+  return NULL;
+}
+
+
+/* create_dna(): 
+ * creates and returns a standard DNA alphabet.
+ */
+static ESL_ALPHABET *
+create_dna(void)
+{
+  ESL_ALPHABET *a = NULL;
+  int           status;
+
+  /* Create the fundamental alphabet.
+   */
+  if ((a = esl_alphabet_CreateCustom("ACGT-RYMKSWHBVDN*~", 4, 18)) == NULL) return NULL;
+  a->type = eslDNA;
+  
+  /* Add desired synonyms in the input map.
+   */
+  esl_alphabet_SetEquiv(a, 'U', 'T');	    /* read U as a T */
+  esl_alphabet_SetEquiv(a, 'X', 'N');	    /* read X as an N (many seq maskers use X) */
+  esl_alphabet_SetEquiv(a, 'I', 'A');       /* Inosine is a deaminated Adenosine, appears in some RNACentral sequences */
+  esl_alphabet_SetEquiv(a, '_', '-');       /* allow _ as a gap too */
+  esl_alphabet_SetEquiv(a, '.', '-');       /* allow . as a gap too */
+  esl_alphabet_SetCaseInsensitive(a);       /* allow lower case input */
+
+  /* Define IUBMB degenerate symbols other than the N.
+   */
+  esl_alphabet_SetDegeneracy(a, 'R', "AG");
+  esl_alphabet_SetDegeneracy(a, 'Y', "CT");
+  esl_alphabet_SetDegeneracy(a, 'M', "AC");
+  esl_alphabet_SetDegeneracy(a, 'K', "GT");
+  esl_alphabet_SetDegeneracy(a, 'S', "CG");
+  esl_alphabet_SetDegeneracy(a, 'W', "AT");
+  esl_alphabet_SetDegeneracy(a, 'H', "ACT");
+  esl_alphabet_SetDegeneracy(a, 'B', "CGT");
+  esl_alphabet_SetDegeneracy(a, 'V', "ACG");
+  esl_alphabet_SetDegeneracy(a, 'D', "AGT");  
+
+  if ( (status = set_complementarity(a)) != eslOK) goto ERROR;
+  return a;
+
+ ERROR:
+  esl_alphabet_Destroy(a);
+  return NULL;
+}
+
+
+/* create_amino():
+ * Creates a new standard amino acid alphabet.
+ */
+static ESL_ALPHABET *
+create_amino(void)
+{
+  ESL_ALPHABET *a = NULL;
+
+  /* Create the internal alphabet
+   */
+  if ((a = esl_alphabet_CreateCustom("ACDEFGHIKLMNPQRSTVWY-BJZOUX*~", 20, 29)) == NULL) return NULL;
+  a->type = eslAMINO;
+  
+  /* Add desired synonyms in the input map.
+   */
+  esl_alphabet_SetEquiv(a, '_', '-');       /* allow _ as a gap too */
+  esl_alphabet_SetEquiv(a, '.', '-');       /* allow . as a gap too */
+  esl_alphabet_SetCaseInsensitive(a);       /* allow lower case input */
+  
+  /* Define IUPAC degenerate symbols other than the X.
+   */
+  esl_alphabet_SetDegeneracy(a, 'B', "ND");
+  esl_alphabet_SetDegeneracy(a, 'J', "IL");
+  esl_alphabet_SetDegeneracy(a, 'Z', "QE");
+
+  /* Define unusual residues as one-to-one degeneracies.
+   */
+  esl_alphabet_SetDegeneracy(a, 'U', "C"); /* selenocysteine is scored as cysteine */
+  esl_alphabet_SetDegeneracy(a, 'O', "K"); /* pyrrolysine is scored as lysine      */
+
+  return a;
+}
+
+
+/* create_coins():
+ * Creates a toy alphabet for coin examples
+ */
+static ESL_ALPHABET *
+create_coins(void)
+{
+  ESL_ALPHABET *a = NULL;
+
+  /* Create the internal alphabet
+   */
+  if ((a = esl_alphabet_CreateCustom("HT-X*~", 2, 6)) == NULL) return NULL;
+  a->type = eslCOINS;
+
+  /* Add desired synonyms in the input map.
+   */
+  esl_alphabet_SetEquiv(a, '_', '-');       /* allow _ as a gap too */
+  esl_alphabet_SetEquiv(a, '.', '-');       /* allow . as a gap too */
+  esl_alphabet_SetCaseInsensitive(a);       /* allow lower case input */
+
+  /* There are no degeneracies in the coin alphabet. */
+  
+  return a;
+}
+
+/* create_dice():
+ * Creates a toy alphabet for dice examples
+ */
+static ESL_ALPHABET *
+create_dice(void)
+{
+  ESL_ALPHABET *a = NULL;
+
+  /* Create the internal alphabet
+   */
+  if ((a = esl_alphabet_CreateCustom("123456-X*~", 6, 10)) == NULL) return NULL;
+  a->type = eslCOINS;
+
+  /* Add desired synonyms in the input map.
+   */
+  esl_alphabet_SetEquiv(a, '_', '-');       /* allow _ as a gap too */
+  esl_alphabet_SetEquiv(a, '.', '-');       /* allow . as a gap too */
+  esl_alphabet_SetCaseInsensitive(a);       /* allow lower case input */
+
+  /* There are no degeneracies in the dice alphabet. */
+  
+  return a;
+}
+  
+/* set_complementarity()
+ * Builds the "complement" lookup table for DNA, RNA alphabets.
+ * 
+ * Throws <eslEINVAL> if the alphabet isn't <eslDNA> or <eslRNA>.
+ */
+static int
+set_complementarity(ESL_ALPHABET *a)
+{
+  int  status;
+
+  if (a->type != eslRNA && a->type != eslDNA)
+    ESL_EXCEPTION(eslEINVAL, "alphabet isn't nucleic: no complementarity to set");
+
+  /* We will assume that Kp=18 and sym="ACGT-RYMKSWHBVDN*~" (or RNA equiv).
+   * Bug #h108 happened because routine fell out of sync w/ a change in alphabet.
+   * Don't let that happen again.
+   */
+  ESL_DASSERT1((      a->Kp == 18  ));
+  ESL_DASSERT1(( a->sym[17] == '~' ));
+
+  ESL_ALLOC(a->complement, sizeof(ESL_DSQ) * a->Kp);
+  a->complement[0] = 3;	   /* A->T */
+  a->complement[1] = 2;    /* C->G */
+  a->complement[2] = 1;    /* G->C */
+  a->complement[3] = 0;    /* T->A */
+  a->complement[4] = 4;    /* -  - */
+  a->complement[5] = 6;	   /* R->Y */
+  a->complement[6] = 5;    /* Y->R */
+  a->complement[7] = 8;    /* M->K */
+  a->complement[8] = 7;    /* K->M */
+  a->complement[9] = 9;    /* S  S */
+  a->complement[10]= 10;   /* W  W */
+  a->complement[11]= 14;   /* H->D */
+  a->complement[12]= 13;   /* B->V */
+  a->complement[13]= 12;   /* V->B */
+  a->complement[14]= 11;   /* D->H */
+  a->complement[15]= 15;   /* N  N */
+  a->complement[16]= 16;   /* *  * */
+  a->complement[17]= 17;   /* ~  ~ */
+
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function:  esl_alphabet_SetEquiv()
+ * Synopsis:  Define an equivalent symbol.
+ *
+ * Purpose:   Maps an additional input alphabetic symbol <sym> to 
+ *            an internal alphabet symbol <c>; for example,
+ *            we might map T to U for an RNA alphabet, so that we
+ *            allow for reading input DNA sequences.
+ *            
+ * Args:      sym   - symbol to allow in the input alphabet; 'T' for example
+ *            c     - symbol to map <sym> to in the internal alphabet; 'U' for example
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <c> is not in the internal alphabet, or if <sym> is.
+ */
+int
+esl_alphabet_SetEquiv(ESL_ALPHABET *a, char sym, char c)
+{
+  char    *sp = NULL;
+  ESL_DSQ  x;
+
+  /* Contract checks */
+  if ((sp = strchr(a->sym, sym)) != NULL)
+    ESL_EXCEPTION(eslEINVAL, "symbol %c is already in internal alphabet, can't equivalence it", sym);
+  if ((sp = strchr(a->sym, c)) == NULL) 
+    ESL_EXCEPTION(eslEINVAL, "char %c not in the alphabet, can't map to it", c);
+
+  x = sp - a->sym;
+  a->inmap[(int) sym] = x;
+  return eslOK;
+}
+
+/* Function:  esl_alphabet_SetCaseInsensitive()
+ * Synopsis:  Make an alphabet's input map case-insensitive.
+ *
+ * Purpose:   Given a custom alphabet <a>, with all equivalences set,
+ *            make the input map case-insensitive: for every
+ *            letter that is mapped in either lower or upper
+ *            case, map the other case to the same internal
+ *            residue.
+ *
+ *            For the standard alphabets, this is done automatically.
+ *
+ * Args:      a  - alphabet to make case-insensitive.
+ *                 
+ * Returns:   <eslOK> on success.                
+ * 
+ * Throws:    <eslECORRUPT> if any lower/uppercase symbol pairs
+ *            are already both mapped to different symbols.
+ */
+int
+esl_alphabet_SetCaseInsensitive(ESL_ALPHABET *a)
+{
+  int lc, uc;
+
+  for (lc = 'a'; lc <= 'z'; lc++)
+    {
+      uc = toupper(lc);
+
+      if      (esl_abc_CIsValid(a, lc) && ! esl_abc_CIsValid(a, uc)) a->inmap[uc] = a->inmap[lc];
+      else if (esl_abc_CIsValid(a, uc) && ! esl_abc_CIsValid(a, lc)) a->inmap[lc] = a->inmap[uc];
+      else if (esl_abc_CIsValid(a, lc) && esl_abc_CIsValid(a, uc) && a->inmap[uc] != a->inmap[lc])
+	ESL_EXCEPTION(eslECORRUPT, "symbols %c and %c map differently already (%c vs. %c)",
+		  lc, uc, a->inmap[lc], a->inmap[uc]);
+    }
+  return eslOK;
+}
+
+/* Function:  esl_alphabet_SetDegeneracy()
+ * Synopsis:  Define degenerate symbol in custom alphabet.
+ *
+ * Purpose:   Given an alphabet under construction, 
+ *            define the degenerate character <c> to mean
+ *            any of the characters in the string <ds>.
+ *
+ *            <c> must exist in the digital alphabet, as
+ *            one of the optional degenerate residues (<K+1>..<Kp-3>).
+ *            All the characters in the <ds> string must exist
+ *            in the canonical alphabet (<0>..<K-1>).
+ *            
+ *            You may not redefine the mandatory all-degenerate character
+ *            (typically <N> or <X>; <Kp-3> in the digital alphabet).
+ *            It is defined automatically in all alphabets. 
+ *
+ * Args:      a   - an alphabet under construction.
+ *            c   - degenerate character code; example: 'R'
+ *            ds  - string of base characters for c; example: "AG"
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <c> or <ds> arguments aren't valid.
+ */
+int
+esl_alphabet_SetDegeneracy(ESL_ALPHABET *a, char c, char *ds)
+{
+  char   *sp;
+  ESL_DSQ x,y;
+
+  if ((sp = strchr(a->sym, c)) == NULL)
+    ESL_EXCEPTION(eslEINVAL, "no such degenerate character");
+  x = sp - a->sym;
+
+  /* A degenerate character must have code K+1..Kp-4.
+   * Kp-3, the all-degenerate character, is automatically
+   * created, and can't be remapped.
+   */
+  if (x == a->Kp-3) 
+    ESL_EXCEPTION(eslEINVAL, "can't redefine all-degenerate char %c", c);
+  if (x < a->K+1 || x >= a->Kp-2) 
+    ESL_EXCEPTION(eslEINVAL, "char %c isn't in expected position in alphabet", c);
+  
+  while (*ds != '\0') {
+    if ((sp = strchr(a->sym, *ds)) == NULL) ESL_EXCEPTION(eslEINVAL, "no such base character");
+    y = sp - a->sym;
+    if (! esl_abc_XIsCanonical(a, y))       ESL_EXCEPTION(eslEINVAL, "can't map degeneracy to noncanonical character");
+
+    a->degen[x][y] = 1;
+    a->ndegen[x]++;
+    ds++;
+  }
+  return eslOK;
+}
+
+
+/* Function:  esl_alphabet_SetIgnored()
+ * Synopsis:  Define a set of characters to be ignored in input.
+ *
+ * Purpose:   Given an alphabet <a> (either standard or custom), define
+ *            all the characters in string <ignoredchars> to be
+ *            unmapped: valid, but ignored when converting input text.
+ *            
+ *            By default, the standard alphabets do not define any
+ *            ignored characters.
+ *            
+ *            The most common ignored characters would be space, tab,
+ *            and digits, to skip silently over whitespace and
+ *            sequence coordinates when parsing loosely-defined
+ *            sequence file formats.
+ *
+ * Args:      a             - alphabet to modify
+ *            ignoredchars  - string listing characters to ignore; i.e. " \t"
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_alphabet_SetIgnored(ESL_ALPHABET *a, const char *ignoredchars)
+{
+  int i;
+  for (i = 0; ignoredchars[i] != '\0'; i++) a->inmap[(int)ignoredchars[i]] = eslDSQ_IGNORED;
+  return eslOK;
+}
+
+
+/* Function:  esl_alphabet_Sizeof()
+ * Synopsis:  Returns size of an alphabet object, in bytes.
+ *
+ * Purpose:   Returns the size of alphabet <a> object, in bytes.
+ */
+size_t
+esl_alphabet_Sizeof(ESL_ALPHABET *a)
+{
+  size_t n = 0;
+  n += sizeof(ESL_ALPHABET);
+  n += sizeof(char) * a->Kp;	                   /* a->sym        */
+  n += sizeof(char *) * a->Kp;	                   /* a->degen      */
+  n += sizeof(char) * (a->Kp * a->K);              /* a->degen[][]  */ 
+  n += sizeof(int)  * a->Kp;	                   /* a->ndegen     */
+  if (a->complement) n += sizeof(ESL_DSQ) * a->Kp; /* a->complement */
+  return n;
+}
+
+/* Function:  esl_alphabet_Destroy()
+ * Synopsis:  Frees an alphabet object.
+ *
+ * Purpose:   Free's an <ESL_ALPHABET> structure.
+ *
+ * Args:      a  - the <ESL_ALPHABET> to free.
+ *
+ * Returns:   (void).
+ */
+void
+esl_alphabet_Destroy(ESL_ALPHABET *a)
+{
+  if (a)
+    {
+      if (a->sym)    free(a->sym);
+      if (a->ndegen) free(a->ndegen);
+      if (a->degen)
+	{
+	  if (a->degen[0]) free(a->degen[0]);
+	  free(a->degen);
+	}
+      if (a->complement) free(a->complement);
+      free(a);
+    }
+}
+/*--------------- end, ESL_ALPHABET object ----------------------*/
+
+
+
+
+
+/*****************************************************************
+ * 2. Digitized sequences (ESL_DSQ *)
+ *****************************************************************/ 
+/* Design note:                 SRE, Mon Sep 18 09:11:41 2006
+ * 
+ * An ESL_DSQ is considered to a special string type, equivalent to
+ * <char *>, and is not considered to be an Easel "object".  Thus it
+ * does not have a standard object API.  Rather, the caller deals with
+ * an ESL_DSQ directly: allocate for <(L+2)*sizeof(ESL_DSQ)> to leave
+ * room for sentinels at <0> and <L+1>.  
+ * 
+ * Additionally, an ESL_DSQ is considered to be "trusted"
+ * data: we're 'guaranteed' that anything in an ESL_DSQ is a valid
+ * symbol, so we don't need to error-check. Anything else is a programming
+ * error.
+ */
+
+/* Function:  esl_abc_CreateDsq()
+ * Synopsis:  Digitizes a sequence into new space.
+ *
+ * Purpose:   Given an alphabet <a> and an ASCII sequence <seq>,
+ *            digitize the sequence into newly allocated space, and 
+ *            return a pointer to that space in <ret_dsq>.
+ *            
+ * Args:      a       - internal alphabet
+ *            seq     - text sequence to be digitized
+ *            ret_dsq - RETURN: the new digital sequence
+ *
+ * Returns:   <eslOK> on success, and <ret_dsq> contains the digitized
+ *            sequence; caller is responsible for free'ing this
+ *            memory. Returns <eslEINVAL> if <seq> contains
+ *            one or more characters that are not in the input map of
+ *            alphabet <a>. If this happens, <ret_dsq> is still valid upon
+ *            return: invalid characters are replaced by full ambiguities
+ *            (typically X or N).
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *
+ * Xref:      STL11/63
+ */
+int
+esl_abc_CreateDsq(const ESL_ALPHABET *a, const char *seq, ESL_DSQ **ret_dsq)
+{
+  ESL_DSQ *dsq = NULL;
+  int      status;
+  int64_t  L;
+
+  L = strlen(seq);
+  ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (L+2));
+  status = esl_abc_Digitize(a, seq, dsq);
+
+  if (ret_dsq != NULL) *ret_dsq = dsq; else free(dsq);
+  return status;
+
+ ERROR:
+  if (dsq != NULL)      free(dsq);
+  if (ret_dsq != NULL) *ret_dsq = NULL;
+  return status;
+}
+
+
+/* Function: esl_abc_Digitize()
+ * Synopsis: Digitizes a sequence into existing space.
+ * 
+ * Purpose:  Given an alphabet <a> and a nul-terminated ASCII sequence
+ *           <seq>, digitize the sequence and put it in <dsq>. Caller
+ *           provides space in <dsq> allocated for at least <L+2>
+ *           <ESL_DSQ> residues, where <L> is the length of <seq>.
+ *           
+ * Args:     a       - internal alphabet
+ *           seq     - text sequence to be digitized (\0-terminated)
+ *           dsq     - RETURN: the new digital sequence (caller allocates,
+ *                     at least <(L+2) * sizeof(ESL_DSQ)>).
+ *           
+ * Returns:  <eslOK> on success.
+ *           Returns <eslEINVAL> if <seq> contains one or more characters
+ *           that are not recognized in the alphabet <a>. (This is classed
+ *           as a normal error, because the <seq> may be untrusted user input.)
+ *           If this happens, the digital sequence <dsq> is still valid upon
+ *           return; invalid ASCII characters are replaced by ambiguities
+ *           (X or N).
+ */
+int
+esl_abc_Digitize(const ESL_ALPHABET *a, const char *seq, ESL_DSQ *dsq)
+{
+  int     status;
+  int64_t i;			/* position in seq */
+  int64_t j;			/* position in dsq */
+  ESL_DSQ x;
+
+  status = eslOK;
+  dsq[0] = eslDSQ_SENTINEL;
+  for (i = 0, j = 1; seq[i] != '\0'; i++) 
+    { 
+      x = a->inmap[(int) seq[i]];
+      if      (esl_abc_XIsValid(a, x)) dsq[j] = x;
+      else if (x == eslDSQ_IGNORED) continue; 
+      else {
+	status   = eslEINVAL;
+	dsq[j] = esl_abc_XGetUnknown(a);
+      }
+      j++;
+    }
+  dsq[j] = eslDSQ_SENTINEL;
+  return status;
+}
+
+/* Function:  esl_abc_Textize()
+ * Synopsis:  Convert digital sequence to text.
+ *
+ * Purpose:   Make an ASCII sequence <seq> by converting a digital
+ *            sequence <dsq> of length <L> back to text, according to
+ *            the digital alphabet <a>. 
+ *            
+ *            Caller provides space in <seq> allocated for at least
+ *            <L+1> bytes (<(L+1) * sizeof(char)>).
+ *
+ * Args:      a   - internal alphabet
+ *            dsq - digital sequence to be converted (1..L)
+ *            L   - length of dsq
+ *            seq - RETURN: the new text sequence (caller allocated
+ *                  space, at least <(L+1) * sizeof(char)>).
+ *            
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_abc_Textize(const ESL_ALPHABET *a, const ESL_DSQ *dsq, int64_t L, char *seq)
+{
+  int64_t i;
+  
+  for (i = 0; i < L; i++)
+    seq[i] = a->sym[dsq[i+1]];
+  seq[i] = '\0';
+  return eslOK;
+}
+
+
+/* Function:  esl_abc_TextizeN()
+ * Synopsis:  Convert subsequence from digital to text.
+ *
+ * Purpose:   Similar in semantics to <strncpy()>, this procedure takes
+ *            a window of <L> residues in a digitized sequence
+ *            starting at the residue pointed to by <dptr>,
+ *            converts them to ASCII text representation, and 
+ *            copies them into the buffer <buf>.
+ *            
+ *            <buf> must be at least <L> residues long; <L+1>, if the
+ *            caller needs to NUL-terminate it.
+ *            
+ *            If a sentinel byte is encountered in the digitized
+ *            sequence before <L> residues have been copied, <buf> is
+ *            NUL-terminated there. Otherwise, like <strncpy()>, <buf>
+ *            will not be NUL-terminated.
+ *            
+ *            Note that because digital sequences are indexed <1..N>,
+ *            not <0..N-1>, the caller must be careful about
+ *            off-by-one errors in <dptr>. For example, to copy from
+ *            the first residue of a digital sequence <dsq>, you must
+ *            pass <dptr=dsq+1>, not <dptr=dsq>. The text in <buf>
+ *            on the other hand is a normal C string indexed <0..L-1>.
+ *
+ * Args:      a     - reference to an internal alphabet
+ *            dptr  - ptr to starting residue in a digital sequence
+ *            L     - number of residues to convert and copy
+ *            buf   - text buffer to store the <L> converted residues in
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_abc_TextizeN(const ESL_ALPHABET *a, const ESL_DSQ *dptr, int64_t L, char *buf)
+{
+  int64_t i;
+
+  for (i = 0; i < L; i++)
+    {
+      if (dptr[i] == eslDSQ_SENTINEL) 
+	{ 
+	  buf[i] = '\0';
+	  return eslOK;
+	}
+      buf[i] = a->sym[dptr[i]];
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_abc_dsqcpy()
+ *
+ * Purpose:   Given a digital sequence <dsq> of length <L>,
+ *            make a copy of it in <dcopy>. Caller provides
+ *            storage in <dcopy> for at least <L+2> <ESL_DSQ>
+ *            residues.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_abc_dsqcpy(const ESL_DSQ *dsq, int64_t L, ESL_DSQ *dcopy)
+{
+  memcpy(dcopy, dsq, sizeof(ESL_DSQ) * (L+2));
+  return eslOK;
+}
+
+
+/* Function:  esl_abc_dsqdup()
+ * Synopsis:  Duplicate a digital sequence.
+ *
+ * Purpose:   Like <esl_strdup()>, but for digitized sequences:
+ *            make a duplicate of <dsq> and leave it in <ret_dup>.
+ *            Caller can pass the string length <L> if it's known, saving
+ *            some overhead; else pass <-1> and the length will be
+ *            determined for you.
+ *            
+ *            Tolerates <dsq> being <NULL>; in which case, returns
+ *            <eslOK> with <*ret_dup> set to <NULL>.
+ *
+ * Args:      dsq     - digital sequence to duplicate (w/ sentinels at 0,L+1)
+ *            L       - length of dsq in residues, if known; -1 if unknown
+ *            ret_dup - RETURN: allocated duplicate of <dsq>, which caller will
+ *                      free.
+ *
+ * Returns:   <eslOK> on success, and leaves a pointer in <ret_dup>.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *
+ * Xref:      STL11/48
+ */
+int 
+esl_abc_dsqdup(const ESL_DSQ *dsq, int64_t L, ESL_DSQ **ret_dup)
+{
+  int      status;
+  ESL_DSQ *new = NULL;
+
+  if (ret_dup == NULL) return eslOK; /* no-op. */
+
+  *ret_dup = NULL;
+  if (dsq == NULL) return eslOK;
+  if (L < 0) L = esl_abc_dsqlen(dsq);
+
+  ESL_ALLOC(new, sizeof(ESL_DSQ) * (L+2));
+  memcpy(new, dsq, sizeof(ESL_DSQ) * (L+2));
+  
+  *ret_dup = new;
+  return eslOK;
+
+ ERROR:
+  if (new     != NULL)  free(new);
+  if (ret_dup != NULL) *ret_dup = NULL;
+  return status;
+}
+
+
+/* Function:  esl_abc_dsqcat()
+ * Synopsis:  Concatenate and map input chars to a digital sequence.
+ *
+ * Purpose:   Append the contents of string or memory line <s> of
+ *            length <n> to a digital sequence, after digitizing  
+ *            each input character in <s> according to an Easel
+ *            <inmap>. The destination sequence and its length
+ *            are passed by reference, <*dsq> and <*L>, so that
+ *            the sequence may be reallocated and the length updated
+ *            upon return.
+ *            
+ *            The input map <inmap> may map characters to
+ *            <eslDSQ_IGNORED> or <eslDSQ_ILLEGAL>, but not to <eslDSQ_EOL>,
+ *            <eslDSQ_EOD>, or <eslDSQ_SENTINEL> codes. <inmap[0]> is
+ *            special, and must be set to the code for the 'unknown'
+ *            residue (such as 'X' for proteins, 'N' for DNA) that
+ *            will be used to replace any invalid <eslDSQ_ILLEGAL>
+ *            characters.
+ * 
+ *            If <*dsq> is properly terminated digital sequence and
+ *            the caller doesn't know its length, <*L> may be passed
+ *            as -1. Providing the length when it's known saves an
+ *            <esl_abc_dsqlen()> call. If <*dsq> is unterminated, <*L>
+ *            is mandatory. Essentially the same goes for <*s>, which
+ *            may be a NUL-terminated string (pass <n=-1> if length unknown),
+ *            or a memory line (<n> is mandatory). 
+ *            
+ *            <*dsq> may also be <NULL>, in which case it is allocated
+ *            and initialized here.
+ *            
+ *            Caller should provide an <s> that is expected to be
+ *            essentially all appendable to <*dsq> except for a small
+ *            number of chars that map to <eslDSQ_IGNORE>, like an
+ *            input sequence data line from a file, for example. We're
+ *            going to reallocate <*dsq> to size <*L+n>; if <n> is an
+ *            entire large buffer or file, this reallocation will be
+ *            inefficient.
+ *            
+ * Args:      inmap - an Easel input map, inmap[0..127];
+ *                    inmap[0] is special, set to the 'unknown' character
+ *                    to replace invalid input chars.
+ *            dsq   - reference to the current digital seq to append to 
+ *                    (with sentinel bytes at 0,L+1); may be <NULL>. 
+ *                    Upon return, this will probably have 
+ *                    been reallocated, and it will contain the original
+ *                    <dsq> with <s> digitized and appended.
+ *            L    -  reference to the current length of <dsq> in residues;
+ *                    may be <-1> if unknown and if <*dsq> is a properly
+ *                    terminated digital sequence. Upon return, <L> is set to
+ *                    the new length of <dsq>, after <s> is appended.
+ *            s    -  ASCII text sequence to append. May
+ *                    contain ignored text characters (flagged with
+ *                    <eslDSQ_IGNORED> in the input map of alphabet <abc>).  
+ *            n    -  Length of <s> in characters, if known; or <-1> if 
+ *                    unknown and if <s> is a NUL-terminated string.
+ *
+ * Returns:   <eslOK> on success; <*dsq> contains the result of digitizing
+ *            and appending <s> to the original <*dsq>; and <*L> contains
+ *            the new length of the <dsq> result in residues.
+ *            
+ *            If any of the characters in <s> are illegal in the
+ *            alphabet <abc>, these characters are digitized as
+ *            unknown residues (using <inmap[0]>) and
+ *            concatenation/digitization proceeds to completion, but
+ *            the function returns <eslEINVAL>. The caller might then
+ *            want to call <esl_abc_ValidateSeq()> on <s> if it wants
+ *            to figure out where digitization goes awry and get a
+ *            more informative error report. This is a normal error,
+ *            because the string <s> might be user input.
+ *
+ * Throws:    <eslEMEM> on allocation or reallocation failure;
+ *            <eslEINCONCEIVABLE> on coding error.
+ *            
+ * Xref:      SRE:STL11/48; SRE:J7/145.
+ *
+ * Note:      This closely parallels a text mode version, <esl_strmapcat()>.
+ */
+int
+esl_abc_dsqcat(const ESL_DSQ *inmap, ESL_DSQ **dsq, int64_t *L, const char *s, esl_pos_t n)
+{
+  int       status = eslOK;
+
+  if (*L < 0) *L = ((*dsq) ? esl_abc_dsqlen(*dsq) : 0);
+  if ( n < 0)  n = (   (s) ? strlen(s)            : 0);
+
+  if (n == 0) { goto ERROR; } 	/* that'll return eslOK, leaving *dest untouched, and *ldest its length */
+
+  if (*dsq == NULL) {		/* an entirely new dsq is allocated *and* initialized with left sentinel. */
+    ESL_ALLOC(*dsq, sizeof(ESL_DSQ)     * (n+2));
+    (*dsq)[0] = eslDSQ_SENTINEL;
+  } else			/* else, existing dsq is just reallocated; leftmost sentinel already in place. */
+    ESL_REALLOC(*dsq, sizeof(ESL_DSQ) * (*L+n+2)); /* most we'll need */
+
+  return esl_abc_dsqcat_noalloc(inmap, *dsq, L, s, n);
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_abc_dsqcat_noalloc()
+ * Synopsis:  Version of esl_abc_dsqcat() that does no reallocation.
+ *
+ * Purpose:   Same as <esl_abc_dsqcat()>, but with no reallocation of
+ *            <dsq>. The pointer to the destination string <dsq> is 
+ *            passed by value not by reference, because it will not
+ *            be reallocated or moved. Caller has already allocated 
+ *            at least <*L + n + 2> bytes in <dsq>. <*L> and <n> are
+ *            not optional; caller must know (and provide) the lengths
+ *            of both the old string and the new source.
+ *
+ * Note:      This version was needed in selex format parsing, where
+ *            we need to prepend and append some number of gaps on
+ *            each new line of each block of input; allocating once
+ *            then adding the gaps and the sequence seemed most efficient.
+ */
+int
+esl_abc_dsqcat_noalloc(const ESL_DSQ *inmap, ESL_DSQ *dsq, int64_t *L, const char *s, esl_pos_t n)
+{
+  int64_t   xpos;
+  esl_pos_t cpos;
+  ESL_DSQ   x;
+  int       status = eslOK;
+
+  /* Watch these coords. Start in the 0..n-1 text string at 0;
+   * start in the 1..L dsq at L+1, overwriting its terminal 
+   * sentinel byte.
+   */
+  for (xpos = *L+1, cpos = 0; cpos < n; cpos++)
+    {
+      if (! isascii(s[cpos])) { dsq[xpos++] = inmap[0]; status = eslEINVAL; continue; }
+
+      x = inmap[(int) s[cpos]];
+
+      if       (x <= 127)      dsq[xpos++] = x;
+      else switch (x) {
+	case eslDSQ_SENTINEL:  ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_SENTINEL"); break;
+	case eslDSQ_ILLEGAL:   dsq[xpos++] = inmap[0]; status = eslEINVAL;                               break;
+	case eslDSQ_IGNORED:   break;
+	case eslDSQ_EOL:       ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_EOL");      break;
+	case eslDSQ_EOD:       ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_EOD");      break;
+	default:               ESL_EXCEPTION(eslEINCONCEIVABLE, "bad inmap, no such ESL_DSQ code");      break;
+	}
+    }
+  dsq[xpos] = eslDSQ_SENTINEL;
+  *L = xpos-1;
+  return status;
+}
+
+/* Function:  esl_abc_dsqlen()
+ * Synopsis:  Returns the length of a digital sequence.
+ *
+ * Purpose:   Returns the length of digitized sequence <dsq> in
+ *            positions (including gaps, if any). The <dsq> must be
+ *            properly terminated by a sentinel byte
+ *            (<eslDSQ_SENTINEL>).  
+ */
+int64_t 
+esl_abc_dsqlen(const ESL_DSQ *dsq)
+{
+  int64_t n = 0;
+  while (dsq[n+1] != eslDSQ_SENTINEL) n++;
+  return n;
+}
+
+/* Function:  esl_abc_dsqrlen()
+ * Synopsis:  Returns the number of residues in a digital seq.
+ *
+ * Purpose:   Returns the unaligned length of digitized sequence
+ *            <dsq>, in residues, not counting any gaps or
+ *            missing data symbols. 
+ */
+int64_t
+esl_abc_dsqrlen(const ESL_ALPHABET *abc, const ESL_DSQ *dsq)
+{
+  int64_t n = 0;
+  int64_t i;
+
+  for (i = 1; dsq[i] != eslDSQ_SENTINEL; i++)
+    if (esl_abc_XIsResidue(abc, dsq[i])) n++;
+  return n;
+}
+
+/* Function:  esl_abc_CDealign()
+ * Synopsis:  Dealigns a text string, using a reference digital aseq.
+ *
+ * Purpose:   Dealigns <s> in place by removing characters aligned to
+ *            gaps (or missing data symbols) in the reference digital
+ *            aligned sequence <ref_ax>. Gaps and missing data symbols
+ *            in <ref_ax> are defined by its digital alphabet <abc>.
+ *            
+ *            <s> is typically going to be some kind of textual
+ *            annotation string (secondary structure, consensus, or
+ *            surface accessibility).
+ *            
+ *            Be supercareful of off-by-one errors here! The <ref_ax>
+ *            is a digital sequence that is indexed <1..L>. The
+ *            annotation string <s> is assumed to be <0..L-1> (a
+ *            normal C string), off by one with respect to <ref_ax>.
+ *            In a sequence object, ss annotation is actually stored
+ *            <1..L> -- so if you're going to <esl_abc_CDealign()> a
+ *            <sq->ss>, pass <sq->ss+1> as the argument <s>.
+ *
+ * Returns:   Returns <eslOK> on success; optionally returns the number
+ *            of characters in the dealigned <s> in <*opt_rlen>.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_abc_CDealign(const ESL_ALPHABET *abc, char *s, const ESL_DSQ *ref_ax, int64_t *opt_rlen)
+{
+  int64_t apos;
+  int64_t n = 0;
+
+  if (s == NULL) return eslOK;
+  
+  for (n=0, apos=1; ref_ax[apos] != eslDSQ_SENTINEL; apos++)
+    if (! esl_abc_XIsGap(abc, ref_ax[apos]) && ! esl_abc_XIsMissing(abc, ref_ax[apos]) )
+      s[n++] = s[apos-1];	/* apos-1 because we assume s was 0..alen-1, whereas ref_ax was 1..alen */
+  s[n] = '\0';
+
+  if (opt_rlen != NULL) *opt_rlen = n;
+  return eslOK;
+}
+
+/* Function:  esl_abc_XDealign()
+ * Synopsis:  Dealigns a digital string, using a reference digital aseq.
+ *
+ * Purpose:   Dealigns <x> in place by removing characters aligned to
+ *            gaps (or missing data) in the reference digital aligned
+ *            sequence <ref_ax>. Gaps and missing data symbols in
+ *            <ref_ax> are defined by its digital alphabet <abc>.
+ *
+ * Returns:   Returns <eslOK> on success; optionally returns the number
+ *            of characters in the dealigned <x> in <*opt_rlen>.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_abc_XDealign(const ESL_ALPHABET *abc, ESL_DSQ *x, const ESL_DSQ *ref_ax, int64_t *opt_rlen)
+{
+  int64_t apos;
+  int64_t n = 0;
+
+  if (x == NULL) return eslOK;
+  
+  x[0] = eslDSQ_SENTINEL;
+  for (n=1, apos=1; ref_ax[apos] != eslDSQ_SENTINEL; apos++)
+    if (! esl_abc_XIsGap(abc, ref_ax[apos]) && ! esl_abc_XIsMissing(abc, ref_ax[apos]) )
+      x[n++] = x[apos];
+  x[n] = eslDSQ_SENTINEL;
+  
+  if (opt_rlen != NULL) *opt_rlen = n-1;
+  return eslOK;
+}
+
+/* Function:  esl_abc_ConvertDegen2X()
+ * Synopsis:  Convert all degenerate residues to X or N.
+ *
+ * Purpose:   Convert all the degenerate residue codes in digital
+ *            sequence <dsq> to the code for the maximally degenerate 
+ *            "unknown residue" code, as specified in digital alphabet
+ *            <abc>. (For example, X for protein, N for nucleic acid.)
+ *            
+ *            This comes in handy when you're dealing with some piece
+ *            of software that can't deal with standard residue codes,
+ *            and you want to massage your sequences into a form that
+ *            can be accepted. For example, WU-BLAST can't deal with O
+ *            (pyrrolysine) residues, but UniProt has O codes.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_abc_ConvertDegen2X(const ESL_ALPHABET *abc, ESL_DSQ *dsq)
+{
+  int64_t i;
+
+  for (i = 1; dsq[i] != eslDSQ_SENTINEL; i++)  
+    if (esl_abc_XIsDegenerate(abc, dsq[i]))
+      dsq[i] = esl_abc_XGetUnknown(abc);
+  return eslOK;
+}
+
+
+/* Function:  esl_abc_revcomp()
+ * Synopsis:  Reverse complement a digital sequence
+ * Incept:    SRE, Wed Feb 10 11:54:48 2016 [JB251 BOS-MCO]
+ *
+ * Purpose:   Reverse complement <dsq>, in place, according to
+ *            its digital alphabet <abc>.
+ *            
+ * Args:      abc  - digital alphabet
+ *            dsq  - digital sequence, 1..n
+ *            n    - length of <dsq>
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINCOMPAT> if alphabet <abc> can't be reverse complemented
+ */
+int
+esl_abc_revcomp(const ESL_ALPHABET *abc, ESL_DSQ *dsq, int n)
+{
+  ESL_DSQ x;
+  int     pos;
+  
+  if (abc->complement == NULL)
+    ESL_EXCEPTION(eslEINCOMPAT, "tried to reverse complement using an alphabet that doesn't have one");
+
+  for (pos = 1; pos <= n/2; pos++)
+    {
+      x            = abc->complement[dsq[n-pos+1]];
+      dsq[n-pos+1] = abc->complement[dsq[pos]];
+      dsq[pos]     = x;
+    }
+  if (n%2) dsq[pos] = abc->complement[dsq[pos]];
+  return eslOK;
+}
+  
+  
+
+/*-------------- end, digital sequences (ESL_DSQ) ---------------*/
+
+
+/*****************************************************************
+ * 3. Other routines in the API.
+ *****************************************************************/ 
+
+/* Function:  esl_abc_ValidateType()
+ * Synopsis:  Check that an alphabet is known and valid
+ * Incept:    SRE, Thu Feb 11 15:48:23 2016
+ *
+ * Purpose:   Returns <eslOK> if <type> is a valid and known Easel
+ *            alphabet type code.
+ *            
+ *            Used to validate "user" input, where we're parsing a
+ *            file format that has stored an Easel alphabet code.
+ *            
+ *            Returns <eslFAIL> for the special <eslUNKNOWN> "unset"
+ *            value, even though that is a valid code, because it's
+ *            not an alphabet, so shouldn't show up in a file.
+ */
+int
+esl_abc_ValidateType(int type)
+{
+  if (type <= 0 || type > eslNONSTANDARD) return eslFAIL;
+  else                                    return eslOK;
+}
+
+
+/* Function:  esl_abc_GuessAlphabet()
+ * Synopsis:  Guess alphabet type from residue composition.
+ *
+ * Purpose:   Guess the alphabet type from a residue composition.
+ *            The input <ct[0..25]> array contains observed counts of 
+ *            the letters A..Z, case-insensitive. 
+ *            
+ *            The composition <ct> must contain more than 10 residues.
+ *
+ *            If it contains $\geq$98\% ACGTN and all four of the
+ *            residues ACGT occur, call it <eslDNA>. (Analogously for
+ *            ACGUN, ACGU: call <eslRNA>.)
+ *            
+ *            If it contains any amino-specific residue (EFIJLPQZ),
+ *            call it <eslAMINO>.  
+ *            
+ *            If it consists of $\geq$98\% canonical aa residues or X,
+ *            and at least 15 of the different 20 aa residues occur,
+ *            and the number of residues that are canonical aa/degenerate
+ *            nucleic (DHKMRSVWY) is greater than the number of canonicals
+ *            for both amino and nucleic (ACG); then call it <eslAMINO>.
+ *            
+ *            As a special case, if it consists entirely of N's, and
+ *            we have >2000 residues, call it <eslDNA>. This is a
+ *            special case that deals with genome sequence assemblies
+ *            that lead with a swath of N's.
+ *            
+ *            We aim to be very conservative, essentially never making
+ *            a false call; we err towards calling <eslUNKNOWN> if
+ *            unsure. Our test is to classify every individual
+ *            sequence in NCBI NR and NT (or equiv large messy
+ *            sequence database) with no false positives, only correct
+ *            calls or <eslUNKNOWN>.
+ *
+ * Returns:   <eslOK> on success, and <*ret_type> is set to
+ *            <eslAMINO>, <eslRNA>, or <eslDNA>.
+ *
+ *            Returns <eslENOALPHABET> if unable to determine the
+ *            alphabet type; in this case, <*ret_type> is set to 
+ *            <eslUNKNOWN>.
+ *            
+ * Notes:     As of Jan 2011:
+ *               nr         10M seqs :  6999 unknown,  0 misclassified 
+ *               Pfam full  13M seqs :  7930 unknown,  0 misclassified
+ *               Pfam seed  500K seqs:   366 unknown,  0 misclassified
+ *               trembl     14M seqs :  7748 unknown,  0 misclassified
+ *               
+ *               nt         10M seqs : 35620 unknown,  0 misclassified
+ *               Rfam full   3M seqs :  8146 unknown,  0 misclassified
+ *               Rfam seed  27K seqs :    49 unknown,  0 misclassified
+ *               
+ * xref:      esl_alphabet_example3 collects per-sequence classification
+ *            2012/0201-easel-guess-alphabet
+ *            J1/62; 2007-0517-easel-guess-alphabet
+ */
+int
+esl_abc_GuessAlphabet(const int64_t *ct, int *ret_type)
+{
+  int      type = eslUNKNOWN;
+  char     aaonly[]    = "EFIJLOPQZ";
+  char     allcanon[]  = "ACG";
+  char     aacanon[]   = "DHKMRSVWY";
+  int64_t  n1, n2, n3, nn, nt, nu, nx, n; /* n's are counts */
+  int      x1, x2, x3, xn, xt, xu;	  /* x's are how many different residues are represented */
+  int      i, x;
+
+  x1 = x2 = x3 = xn = xt = xu = 0;
+  n1 = n2 = n3 = n = 0;
+  for (i = 0; i < 26;                i++) n  += ct[i];
+  for (i = 0; aaonly[i]   != '\0'; i++) { x = ct[aaonly[i]   - 'A']; if (x > 0) { n1 += x; x1++; } }
+  for (i = 0; allcanon[i] != '\0'; i++) { x = ct[allcanon[i] - 'A']; if (x > 0) { n2 += x; x2++; } }
+  for (i = 0; aacanon[i]  != '\0'; i++) { x = ct[aacanon[i]  - 'A']; if (x > 0) { n3 += x; x3++; } }
+  nt = ct['T' - 'A']; xt = (nt ? 1 : 0);
+  nu = ct['U' - 'A']; xu = (nu ? 1 : 0);
+  nx = ct['X' - 'A']; 
+  nn = ct['N' - 'A']; xn = (nn ? 1 : 0);
+
+  if      (n  <= 10)                                                type = eslUNKNOWN;        // small sample, don't guess
+  else if (n  > 2000 && nn == n)                                    type = eslDNA;            // special case of many N's leading a genome assembly
+  else if (n1 > 0)                                                  type = eslAMINO;          // contains giveaway, aa-only chars 
+  else if (n-(n2+nt+nn) <= 0.02*n && x2+xt == 4)                    type = eslDNA;            // nearly all DNA canon (or N), all four seen 
+  else if (n-(n2+nu+nn) <= 0.02*n && x2+xu == 4)                    type = eslRNA;            // nearly all RNA canon (or N), all four seen 
+  else if (n-(n1+n2+n3+nn+nt+nx) <= 0.02*n && n3>n2 && x1+x2+x3+xn+xt >= 15) type = eslAMINO; // nearly all aa canon (or X); more aa canon than ambig; all 20 seen 
+  
+  *ret_type = type;
+  if (type == eslUNKNOWN) return eslENOALPHABET;
+  else                    return eslOK;
+}
+
+
+
+/* Function:  esl_abc_Match()
+ * Synopsis:  Returns the probability that two symbols match.
+ *
+ * Purpose:   Given two digital symbols <x> and <y> in alphabet
+ *            <abc>, calculate and return the probability that
+ *            <x> and <y> match, taking degenerate residue codes
+ *            into account.
+ *            
+ *            If <p> residue probability vector is NULL, the
+ *            calculation is a simple average. For example, for DNA,
+ *            R/A gives 0.5, C/N gives 0.25, N/R gives 0.25, R/R gives
+ *            0.5.
+ *            
+ *            If <p> residue probability vector is non-NULL, it gives
+ *            a 0..K-1 array of background frequencies, and the
+ *            returned match probability is an expectation (weighted
+ *            average) given those residue frequencies.
+ *            
+ *            <x> and <y> should only be residue codes. Any other
+ *            comparison, including comparisons involving gap or
+ *            missing data characters, or even comparisons involving
+ *            illegal digital codes, returns 0.0.
+ *            
+ *            Note that comparison of residues from "identical"
+ *            sequences (even a self-comparison) will not result in an
+ *            identity of 1.0, if the sequence(s) contain degenerate
+ *            residue codes.
+ *
+ * Args:      abc   - digtal alphabet to use
+ *            x,y   - two symbols to compare
+ *            p     - NULL, or background probabilities of the
+ *                    canonical residues in this alphabet [0..K-1]
+ *
+ * Returns:   the probability of an identity (match) between
+ *            residues <x> and <y>.
+ */
+double
+esl_abc_Match(const ESL_ALPHABET *abc, ESL_DSQ x, ESL_DSQ y, double *p)
+{
+  int    i;
+  double prob;
+  double sx, sy;
+
+  /* Easy cases */
+  if (esl_abc_XIsCanonical(abc, x) && esl_abc_XIsCanonical(abc, y))  
+    { 
+      if (x==y) return 1.0; else return 0.0;
+    }
+  if ( ! esl_abc_XIsResidue(abc, x) || ! esl_abc_XIsResidue(abc, x))  return 0.0;
+
+  /* Else, we have at least one degenerate residue, so calc an average or expectation.
+   */
+  if (p != NULL) 
+    {
+      prob = sx = sy = 0.;
+      for (i = 0; i < abc->K; i++)
+	{
+	  if (abc->degen[(int)x][i])                            sx += p[i];
+	  if (abc->degen[(int)y][i])                            sy += p[i];
+	  if (abc->degen[(int)x][i] && abc->degen[(int)y][i]) prob += p[i] * p[i];
+	}
+      prob = prob / (sx*sy);
+    }
+  else
+    {
+      double uniformp = 1. / (double) abc->K;
+      prob = sx = sy = 0.;
+      for (i = 0; i < abc->K; i++)
+	{
+	  if (abc->degen[(int)x][i])                            sx += uniformp;
+	  if (abc->degen[(int)y][i])                            sy += uniformp;
+	  if (abc->degen[(int)x][i] && abc->degen[(int)y][i]) prob += uniformp * uniformp;
+	}
+      prob = prob / (sx*sy);
+    }
+  return prob;
+}
+
+
+
+/* Function:  esl_abc_IAvgScore()
+ * Synopsis:  Returns average score for degenerate residue.
+ *
+ * Purpose:  Given a residue code <x> in alphabet <a>, and an array of
+ *           integer scores <sc> for the residues in the base
+ *           alphabet, calculate and return the average score
+ *           (rounded to nearest integer).
+ *           
+ *           <x> would usually be a degeneracy code, but it
+ *           may also be a canonical residue. It must not
+ *           be a gap, missing data, or illegal symbol; if it
+ *           is, these functions return a score of 0 without
+ *           raising an error.
+ *           
+ *           <esl_abc_FAvgScore()> and <esl_abc_DAvgScore()> do the
+ *           same, but for float and double scores instead of integers
+ *           (and for real-valued scores, no rounding is done).
+ *           
+ * Args:     a   - digital alphabet to use
+ *           x   - a symbol to score
+ *           sc  - score vector for canonical residues [0..K-1]
+ *           
+ * Returns:  average score for symbol <x>          
+ */
+int
+esl_abc_IAvgScore(const ESL_ALPHABET *a, ESL_DSQ x, const int *sc)
+{
+  float result = 0.;
+  int i;
+
+  if (! esl_abc_XIsResidue(a, x)) return 0;
+  for (i = 0; i < a->K; i++)
+    if (a->degen[(int) x][i]) result += (float) sc[i];
+  result /= (float) a->ndegen[(int) x];
+  if (result < 0) return (int) (result - 0.5);
+  else            return (int) (result + 0.5);
+}
+float
+esl_abc_FAvgScore(const ESL_ALPHABET *a, ESL_DSQ x, const float *sc)
+{
+  float result = 0.;
+  int   i;
+
+  if (! esl_abc_XIsResidue(a, x)) return 0.;
+  for (i = 0; i < a->K; i++)
+    if (a->degen[(int) x][i]) result += sc[i];
+  result /= (float) a->ndegen[(int) x];
+  return result;
+}
+double
+esl_abc_DAvgScore(const ESL_ALPHABET *a, ESL_DSQ x, const double *sc)
+{
+  double result = 0.;
+  int    i;
+
+  if (! esl_abc_XIsResidue(a, x)) return 0.;
+  for (i = 0; i < a->K; i++)
+    if (a->degen[(int) x][i]) result += sc[i];
+  result /= (double) a->ndegen[(int) x];
+  return result;
+}
+
+
+/* Function:  esl_abc_IExpectScore()
+ * Synopsis:  Returns expected score for degenerate residue.
+ *
+ * Purpose:   Given a residue code <x> in alphabet <a>, an
+ *            array of integer scores <sc> for the residues in the base
+ *            alphabet, and background frequencies <p> for the
+ *            occurrence frequencies of the residues in the base
+ *            alphabet, calculate and return the expected score
+ *            (weighted by the occurrence frequencies <p>).
+ *            
+ *            <x> would usually be a degeneracy code, but it
+ *            may also be a canonical residue. It must not
+ *            be a gap, missing data, or illegal symbol; if it
+ *            is, these functions return a score of 0 without
+ *            raising an error.
+ *
+ *            <esl_abc_FExpectScore()> and <esl_abc_DExpectScore()> do the
+ *            same, but for float and double scores instead of integers
+ *            (for real-valued scores, no rounding is done).
+ *
+ * Args:     a   - digital alphabet to use
+ *           x   - a symbol to score
+ *           sc  - score vector for canonical residues [0..K-1]
+ *           p   - background prob's of canonicals     [0..K-1]
+ *           
+ * Returns:  average score for symbol <x>          
+ */
+int
+esl_abc_IExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const int *sc, const float *p)
+{
+  float  result = 0.;
+  float  denom  = 0.;
+  int    i;
+
+  if (! esl_abc_XIsResidue(a, x)) return 0;
+  for (i = 0; i < a->K; i++)
+    if (a->degen[(int) x][i]) { 
+      result += (float) sc[i] * p[i];
+      denom  += p[i];
+    }
+  result /= denom;
+  if (result < 0) return (int) (result - 0.5);
+  else            return (int) (result + 0.5);
+}
+float
+esl_abc_FExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const float *sc, const float *p)
+{
+  float  result = 0.;
+  float  denom  = 0.;
+  int    i;
+
+  if (! esl_abc_XIsResidue(a, x)) return 0.;
+  for (i = 0; i < a->K; i++)
+    if (a->degen[(int) x][i]) { 
+      result += sc[i] * p[i];
+      denom  += p[i];
+    }
+  result /= denom;
+  return result;
+}
+double
+esl_abc_DExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const double *sc, const double *p)
+{
+  double result = 0.;
+  double denom  = 0.;
+  int    i;
+
+  if (! esl_abc_XIsResidue(a, x)) return 0.;
+  for (i = 0; i < a->K; i++)
+    if (a->degen[(int) x][i]) { 
+      result += sc[i] * p[i];
+      denom  += p[i];
+    }
+  result /= denom;
+  return result;
+}
+
+/* Function:  esl_abc_IAvgScVec()
+ * Synopsis:  Fill out score vector with average degenerate scores.
+ *
+ * Purpose:   Given an alphabet <a> and a score vector <sc> of length
+ *            <a->Kp> that contains integer scores for the base
+ *            alphabet (<0..a->K-1>), fill out the rest of the score 
+ *            vector, calculating average scores for 
+ *            degenerate residues using <esl_abc_IAvgScore()>.
+ *            
+ *            The score, if any, for a gap character <K>, the
+ *            nonresidue <Kp-2>, and the missing data character <Kp-1>
+ *            are untouched by this function. Only the degenerate
+ *            scores <K+1..Kp-3> are filled in.
+ *            
+ *            <esl_abc_FAvgScVec()> and <esl_abc_DAvgScVec()> do
+ *            the same, but for score vectors of floats or doubles,
+ *            respectively.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_abc_IAvgScVec(const ESL_ALPHABET *a, int *sc)
+{
+  ESL_DSQ x;
+  for (x = a->K+1; x <= a->Kp-3; x++)
+    sc[x] = esl_abc_IAvgScore(a, x, sc);
+  return eslOK;
+}
+int
+esl_abc_FAvgScVec(const ESL_ALPHABET *a, float *sc)
+{
+  ESL_DSQ x;
+  for (x = a->K+1; x <= a->Kp-3; x++)
+    sc[x] = esl_abc_FAvgScore(a, x, sc);
+  return eslOK;
+}
+int
+esl_abc_DAvgScVec(const ESL_ALPHABET *a, double *sc)
+{
+  ESL_DSQ x;
+  for (x = a->K+1; x <= a->Kp-3; x++)
+    sc[x] = esl_abc_DAvgScore(a, x, sc);
+  return eslOK;
+}
+
+/* Function:  esl_abc_IExpectScVec()
+ * Synopsis:  Fill out score vector with average expected scores.
+ *
+ * Purpose:   Given an alphabet <a>, a score vector <sc> of length
+ *            <a->Kp> that contains integer scores for the base
+ *            alphabet (<0..a->K-1>), and residue occurrence probabilities
+ *            <p[0..a->K-1]>; fill in the scores for the
+ *            degenerate residues <K+1..Kp-3> using <esl_abc_IExpectScore()>.
+ *            
+ *            The score, if any, for a gap character <K>, the
+ *            nonresidue <Kp-2>, and the missing data character <Kp-1>
+ *            are untouched by this function. Only the degenerate
+ *            scores <K+1..Kp-3> are filled in.
+ *            
+ *            <esl_abc_FExpectScVec()> and <esl_abc_DExpectScVec()> do
+ *            the same, but for score vectors of floats or doubles,
+ *            respectively. The probabilities <p> are floats for the
+ *            integer and float versions, and doubles for the double
+ *            version.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_abc_IExpectScVec(const ESL_ALPHABET *a, int *sc, const float *p)
+{
+  ESL_DSQ x;
+  for (x = a->K+1; x <= a->Kp-3; x++)
+    sc[x] = esl_abc_IExpectScore(a, x, sc, p);
+  return eslOK;
+}
+int
+esl_abc_FExpectScVec(const ESL_ALPHABET *a, float *sc, const float *p)
+{
+  ESL_DSQ x;
+  for (x = a->K+1; x <= a->Kp-3; x++)
+    sc[x] = esl_abc_FExpectScore(a, x, sc, p);
+  return eslOK;
+}
+int
+esl_abc_DExpectScVec(const ESL_ALPHABET *a, double *sc, const double *p)
+{
+  ESL_DSQ x;
+  for (x = a->K+1; x <= a->Kp-3; x++)
+    sc[x] = esl_abc_DExpectScore(a, x, sc, p);
+  return eslOK;
+}
+
+
+/* Function:  esl_abc_FCount()
+ * Synopsis:  Count a degenerate symbol into a count vector.
+ *
+ * Purpose:   Count a possibly degenerate digital symbol <x> (0..Kp-1)
+ *            into a counts array <ct> for base symbols (0..K-1).
+ *            Assign the symbol a weight of <wt> (often just 1.0).
+ *            The count weight of a degenerate symbol is divided equally
+ *            across the possible base symbols. 
+ *            
+ *            <x> can be a gap; if so, <ct> must be allocated 0..K,
+ *            not 0..K-1. If <x> is a missing data symbol, or a nonresidue
+ *            data symbol, nothing is done.
+ *            
+ *            <esl_abc_DCount()> does the same, but for double-precision
+ *            count vectors and weights.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_abc_FCount(const ESL_ALPHABET *abc, float *ct, ESL_DSQ x, float wt)
+{
+  ESL_DSQ y;
+
+  if (esl_abc_XIsCanonical(abc, x) || esl_abc_XIsGap(abc, x))
+    ct[x] += wt;
+  else if (esl_abc_XIsMissing(abc, x) || esl_abc_XIsNonresidue(abc, x))
+    return eslOK;
+  else
+    for (y = 0; y < abc->K; y++) {
+      if (abc->degen[x][y])
+	ct[y] += wt / (float) abc->ndegen[x];
+    }
+  return eslOK;
+}
+int
+esl_abc_DCount(const ESL_ALPHABET *abc, double *ct, ESL_DSQ x, double wt)
+{
+  ESL_DSQ y;
+
+  if (esl_abc_XIsCanonical(abc, x) || esl_abc_XIsGap(abc, x))
+    ct[x] += wt;
+  else if (esl_abc_XIsMissing(abc, x) || esl_abc_XIsNonresidue(abc, x))
+    return eslOK;
+  else
+    for (y = 0; y < abc->K; y++) {
+      if (abc->degen[x][y])
+	ct[y] += wt / (double) abc->ndegen[x];
+    }
+  return eslOK;
+}
+
+/* Function:  esl_abc_EncodeType()
+ * Synopsis:  Convert descriptive string to alphabet type code.
+ *
+ * Purpose:   Convert a string like "amino" or "DNA" to the
+ *            corresponding Easel internal alphabet type code
+ *            such as <eslAMINO> or <eslDNA>; return the code.
+ *
+ * Returns:   the code, such as <eslAMINO>; if <type> isn't
+ *            recognized, returns <eslUNKNOWN>.
+ */
+int
+esl_abc_EncodeType(char *type)
+{
+  if      (strcasecmp(type, "amino") == 0) return eslAMINO;
+  else if (strcasecmp(type, "rna")   == 0) return eslRNA;
+  else if (strcasecmp(type, "dna")   == 0) return eslDNA;
+  else if (strcasecmp(type, "coins") == 0) return eslCOINS;
+  else if (strcasecmp(type, "dice")  == 0) return eslDICE;
+  else if (strcasecmp(type, "custom")== 0) return eslNONSTANDARD;
+  else                                     return eslUNKNOWN;
+}
+
+/* Function:  esl_abc_DecodeType()
+ * Synopsis:  Returns descriptive string for alphabet type code.
+ *
+ * Purpose:   For diagnostics and other output: given an internal
+ *            alphabet code <type> (<eslRNA>, for example), return
+ *            pointer to an internal string ("RNA", for example). 
+ */
+char *
+esl_abc_DecodeType(int type)
+{
+  switch (type) {
+  case eslUNKNOWN:     return "unknown";
+  case eslRNA:         return "RNA";
+  case eslDNA:         return "DNA";
+  case eslAMINO:       return "amino";
+  case eslCOINS:       return "coins";
+  case eslDICE:        return "dice";
+  case eslNONSTANDARD: return "custom";
+  default:             break;
+  }
+  esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "no such alphabet type code %d\n", type);
+  return NULL;
+}
+
+
+/* Function:  esl_abc_ValidateSeq()
+ * Synopsis:  Assure that a text sequence can be digitized.
+ *
+ * Purpose:   Check that sequence <seq> of length <L> can be digitized
+ *            without error; all its symbols are valid in alphabet
+ *            <a>. If so, return <eslOK>. If not, return <eslEINVAL>.
+ *            
+ *            If <a> is <NULL>, we still validate that at least the
+ *            <seq> consists only of ASCII characters.
+ *            
+ *            <errbuf> is either passed as <NULL>, or a pointer to an
+ *            error string buffer allocated by the caller for
+ *            <eslERRBUFSIZE> characters. If <errbuf> is non-NULL, and
+ *            the sequence is invalid, an error message is placed in
+ *            <errbuf>.
+ *
+ * Args:      a      - digital alphabet (or NULL, if unavailable)
+ *            seq    - sequence to validate [0..L-1]; NUL-termination unnecessary
+ *            L      - length of <seq>
+ *            errbuf - NULL, or ptr to <eslERRBUFSIZE> chars of allocated space 
+ *                     for an error message.
+ *
+ * Returns:   <eslOK> if <seq> is valid; <eslEINVAL> if not.
+ *
+ * Throws:    (no abnormal error conditions).
+ */
+int
+esl_abc_ValidateSeq(const ESL_ALPHABET *a, const char *seq, int64_t L, char *errbuf)
+{
+  int     status;
+  int64_t i;
+  int64_t firstpos = -1;
+  int64_t nbad     = 0;
+
+  if (errbuf) *errbuf = 0;
+
+  
+  if (a)  // If we have digital alphabet <a>, it has an <inmap> we can check against 
+    {
+      for (i = 0; i < L; i++) {
+	if (! esl_abc_CIsValid(a, seq[i])) {
+	  if (firstpos == -1) firstpos = i;
+	  nbad++;
+	}
+      }
+    }
+  else  // Else, at least validate that the text string is an ASCII text string
+    {
+      for (i = 0; i < L; i++) {
+	if (! isascii(seq[i])) {
+	  if (firstpos == -1) firstpos = i;
+	  nbad++;
+	}
+      }
+    }
+
+  if      (nbad == 1) ESL_XFAIL(eslEINVAL, errbuf, "invalid char %c at pos %" PRId64,                                   seq[firstpos], firstpos+1);
+  else if (nbad >  1) ESL_XFAIL(eslEINVAL, errbuf, "%" PRId64 " invalid chars (including %c at pos %" PRId64 ")", nbad, seq[firstpos], firstpos+1);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+/*---------------- end, other API functions ---------------------*/
+
+
+
+/*****************************************************************
+ * 4. Unit tests.
+ *****************************************************************/
+#ifdef eslALPHABET_TESTDRIVE
+#include "esl_vectorops.h"
+
+static int
+utest_Create(void) 
+{
+  char msg[]  = "esl_alphabet_Create() unit test failed";
+  int  types[] = { eslDNA, eslRNA, eslAMINO, eslCOINS, eslDICE };
+  int  Karr[]  = {      4,      4,       20,        2,       6 };
+  int  Kparr[] = {     18,     18,       29,        6,      10 };
+  int  i;
+  ESL_ALPHABET *a;
+  ESL_DSQ       x;
+
+  for (i = 0; i < 3; i++)
+    {
+      if ((a = esl_alphabet_Create(types[i])) == NULL) esl_fatal(msg);
+      if (a->type != types[i])       esl_fatal(msg);
+      if (a->K    != Karr[i])        esl_fatal(msg);
+      if (a->Kp   != Kparr[i])       esl_fatal(msg);
+      if (strlen(a->sym) != a->Kp)   esl_fatal(msg);
+
+      x = esl_abc_XGetGap(a);
+      if (x            != a->K)    esl_fatal(msg);
+      if (a->ndegen[x] != 0)       esl_fatal(msg);
+
+      x = esl_abc_XGetUnknown(a);
+      if (x            != a->Kp-3) esl_fatal(msg);
+      if (a->ndegen[x] != a->K)    esl_fatal(msg);
+  
+      x = esl_abc_XGetNonresidue(a);
+      if (x            != a->Kp-2) esl_fatal(msg);
+      if (a->ndegen[x] != 0)       esl_fatal(msg);
+      
+      x = esl_abc_XGetMissing(a);
+      if (x            != a->Kp-1) esl_fatal(msg);
+      if (a->ndegen[x] != 0)       esl_fatal(msg);
+
+      esl_alphabet_Destroy(a);
+    }
+
+  /* Thrown errors
+   */
+#ifdef eslTEST_THROWING
+  if (esl_alphabet_Create(-1)             != NULL) esl_fatal(msg);
+  if (esl_alphabet_Create(eslUNKNOWN)     != NULL) esl_fatal(msg);
+  if (esl_alphabet_Create(eslNONSTANDARD) != NULL) esl_fatal(msg);
+#endif
+  
+  return eslOK;
+}
+
+static int
+utest_CreateCustom(void) 
+{
+  char msg[]  = "esl_alphabet_CreateCustom() unit test failed";
+  ESL_ALPHABET *a;
+  char         *testseq = "AaU-~Z";
+  ESL_DSQ      expect[] = { eslDSQ_SENTINEL, 0, 0, 15, 20, 26, 23, eslDSQ_SENTINEL };
+  ESL_DSQ      *dsq;
+  
+  if ((a = esl_alphabet_CreateCustom("ACDEFGHIKLMNPQRSTVWY-BJZX*~", 20, 27)) == NULL) esl_fatal(msg);
+  if (esl_alphabet_SetEquiv(a, 'O', 'K')       != eslOK) esl_fatal(msg);  /* read pyrrolysine O as lysine K */
+  if (esl_alphabet_SetEquiv(a, 'U', 'S')       != eslOK) esl_fatal(msg);  /* read selenocys U as serine S */
+  if (esl_alphabet_SetCaseInsensitive(a)       != eslOK) esl_fatal(msg);  /* allow lower case input */
+  if (esl_alphabet_SetDegeneracy(a, 'Z', "QE") != eslOK) esl_fatal(msg);
+  
+  if (esl_abc_CreateDsq(a, testseq, &dsq) != eslOK)   esl_fatal(msg);
+  if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (strlen(testseq)+2)) != 0) esl_fatal(msg);
+
+  free(dsq);
+  esl_alphabet_Destroy(a);
+
+#ifdef eslTEST_THROWING
+  if (esl_alphabet_CreateCustom("ACGT-RYMKSWHBVDN*~", 4, 21) != NULL) esl_fatal(msg); /* Kp mismatches string length */
+#endif
+
+  return eslOK;
+}
+
+static int
+utest_SetEquiv(void) 
+{
+  char msg[]  = "esl_alphabet_SetEquiv() unit test failed";
+  ESL_ALPHABET *a;
+  char         *testseq = "a1&";
+  ESL_DSQ       expect[] = { eslDSQ_SENTINEL, 0, 4, 7, eslDSQ_SENTINEL };
+  ESL_DSQ      *dsq;
+
+  if ((a = esl_alphabet_CreateCustom("ACGT-N*~", 4, 8)) == NULL) esl_fatal(msg);
+  if (esl_alphabet_SetEquiv(a, 'a', 'A') != eslOK)               esl_fatal(msg);
+  if (esl_alphabet_SetEquiv(a, '1', '-') != eslOK)               esl_fatal(msg);
+  if (esl_alphabet_SetEquiv(a, '&', '~') != eslOK)               esl_fatal(msg);
+  
+#ifdef eslTEST_THROWING
+  if (esl_alphabet_SetEquiv(a, 'G', 'C') != eslEINVAL)           esl_fatal(msg); /* sym is already in internal alphabet */
+  if (esl_alphabet_SetEquiv(a, '2', 'V') != eslEINVAL)           esl_fatal(msg); /* c is not in internal alphabet */
+#endif
+
+  if (esl_abc_CreateDsq(a, testseq, &dsq) != eslOK)                    esl_fatal(msg);
+  if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (strlen(testseq)+2)) != 0) esl_fatal(msg);
+  free(dsq);
+  esl_alphabet_Destroy(a);
+  return eslOK;
+}
+
+static int
+utest_SetCaseInsensitive(void)
+{
+  char msg[]  = "esl_alphabet_SetCaseInsensitive() unit test failed";
+  ESL_ALPHABET *a;
+  char         *testseq = "ACGT";
+  ESL_DSQ       expect[] = { eslDSQ_SENTINEL, 0, 1, 2, 3, eslDSQ_SENTINEL };
+  ESL_DSQ      *dsq;
+
+  if ((a = esl_alphabet_CreateCustom("acgt-n*~", 4, 8)) == NULL)       esl_fatal(msg);
+  if (esl_alphabet_SetCaseInsensitive(a)  != eslOK)                    esl_fatal(msg);
+  if (esl_abc_CreateDsq(a, testseq, &dsq) != eslOK)                    esl_fatal(msg);
+  if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (strlen(testseq)+2)) != 0) esl_fatal(msg);
+  free(dsq);
+  esl_alphabet_Destroy(a);
+
+#ifdef TEST_THROWING
+  if ((a = esl_alphabet_CreateCustom("acgt-n*~", 4, 8)) == NULL)       esl_fatal(msg);
+  if (esl_alphabet_SetEquiv(a, 'A', 'c')               != eslOK)       esl_fatal(msg); /* now input A maps to internal c */
+  if (esl_alphabet_SetCaseInsensitive(a)               != eslECORRUPT) esl_fatal(msg); /* and this fails, can't remap A  */
+  esl_alphabet_Destroy(a);
+#endif
+
+  return eslOK;
+}
+
+static int
+utest_SetDegeneracy(void) 
+{
+  char msg[]  = "esl_alphabet_SetDegeneracy() unit test failed";
+  ESL_ALPHABET *a;
+  char         *testseq = "yrn";
+  ESL_DSQ       expect[] = { eslDSQ_SENTINEL, 6, 5, 7, eslDSQ_SENTINEL };
+  ESL_DSQ      *dsq;
+  ESL_DSQ       x;
+
+  if ((a = esl_alphabet_CreateCustom("ACGT-RYN*~", 4, 10)) == NULL) esl_fatal(msg);
+  if (esl_alphabet_SetDegeneracy(a, 'R', "AG") != eslOK)            esl_fatal(msg);
+  if (esl_alphabet_SetDegeneracy(a, 'Y', "CT") != eslOK)            esl_fatal(msg);
+  if (esl_alphabet_SetCaseInsensitive(a)       != eslOK)            esl_fatal(msg);
+
+  if (esl_abc_CreateDsq(a, testseq, &dsq) != eslOK)                    esl_fatal(msg);
+  if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (strlen(testseq)+2)) != 0) esl_fatal(msg);
+
+  x = esl_abc_DigitizeSymbol(a, 'a');  if (a->ndegen[x] != 1) esl_fatal(msg);
+  x = esl_abc_DigitizeSymbol(a, 'r');  if (a->ndegen[x] != 2) esl_fatal(msg);
+  x = esl_abc_DigitizeSymbol(a, 'y');  if (a->ndegen[x] != 2) esl_fatal(msg);
+  x = esl_abc_DigitizeSymbol(a, 'n');  if (a->ndegen[x] != 4) esl_fatal(msg);
+
+  free(dsq);
+  esl_alphabet_Destroy(a);
+  
+#ifdef TEST_THROWING
+  if ((a = esl_alphabet_CreateCustom("ACGT-RYN*~", 4, 10)) == NULL) esl_fatal(msg);
+  if (esl_abc_SetDegeneracy(a, 'z', "AC")    != eslEINVAL)          esl_fatal(msg); /* can't map char not in alphabet */
+  if (esl_abc_SetDegeneracy(a, 'N', "ACGT")  != eslEINVAL)          esl_fatal(msg); /* can't remap N */
+  if (esl_abc_SetDegeneracy(a, 'A', "GT")    != eslEINVAL)          esl_fatal(msg); /* can't map a nondegen character */
+  if (esl_abc_SetDegeneracy(a, '-', "GT")    != eslEINVAL)          esl_fatal(msg); /*   ... or a gap... */
+  if (esl_abc_SetDegeneracy(a, '*', "GT")    != eslEINVAL)          esl_fatal(msg); /*   ... or nonresidues... */
+  if (esl_abc_SetDegeneracy(a, '~', "GT")    != eslEINVAL)          esl_fatal(msg); /*   ... or missing data. */
+  if (esl_abc_SetDegeneracy(a, 'R', "XY")    != eslEINVAL)          esl_fatal(msg); /* can't map to unknown chars... */
+  if (esl_abc_SetDegeneracy(a, 'R', "YN")    != eslEINVAL)          esl_fatal(msg); /*   ... nor to noncanonical chars... */
+  esl_alphabet_Destroy(a);
+#endif
+  return eslOK;
+}
+
+static int
+utest_SetIgnored(void)
+{
+  char msg[]  = "esl_alphabet_SetIgnored() unit test failed";
+  ESL_ALPHABET *a;
+  char         *testseq = "y \trn";
+  ESL_DSQ       expect[] = { eslDSQ_SENTINEL, 6, 5, 15, eslDSQ_SENTINEL };
+  int           L = 5;
+  ESL_DSQ      *dsq;
+
+  if ((a = esl_alphabet_Create(eslRNA)) == NULL)  esl_fatal(msg);
+  if (esl_alphabet_SetIgnored(a, " \t") != eslOK) esl_fatal(msg);
+
+  if (esl_abc_CreateDsq(a, testseq, &dsq) != eslOK)  esl_fatal(msg);
+  if (memcmp(dsq, expect, sizeof(ESL_DSQ) * L) != 0) esl_fatal(msg);
+  free(dsq);
+  esl_alphabet_Destroy(a);
+  return eslOK;
+}
+
+
+static int
+utest_Destroy(void) 
+{
+  char msg[]  = "esl_alphabet_Destroy() unit test failed";
+  ESL_ALPHABET *a;
+
+  if ((a = esl_alphabet_CreateCustom("ACGT-RYN*~", 4, 10)) == NULL) esl_fatal(msg);
+  esl_alphabet_Destroy(a);
+  esl_alphabet_Destroy(NULL);	/* should be robust against NULL pointers */
+  return eslOK;
+}
+
+static int
+utest_CreateDsq(void) 
+{
+  char msg[]  = "esl_abc_CreateDsq() unit test failed";
+  ESL_ALPHABET *a;
+  char          goodseq[] = "ACDEF";
+  char          badseq[]  = "1@%34";
+  ESL_DSQ      *dsq;
+  ESL_DSQ       x;
+
+  if ((a = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg);
+
+  if (esl_abc_CreateDsq(a, goodseq, &dsq) != eslOK) esl_fatal(msg);
+  if (dsq[1] != 0 || dsq[2] != 1) esl_fatal(msg); /* spot check */
+  free(dsq);
+  
+  if (esl_abc_CreateDsq(a, badseq, &dsq) != eslEINVAL) esl_fatal(msg);
+  x = esl_abc_XGetUnknown(a);
+  if (dsq[1] != x || dsq[2] != x) esl_fatal(msg); /* bad chars all X's now, upon failure */
+  free(dsq);
+
+  if (esl_abc_CreateDsq(a, goodseq, NULL) != eslOK) esl_fatal(msg);
+  
+  esl_alphabet_Destroy(a);
+  return eslOK;
+}
+
+static int
+utest_Digitize(void) 
+{
+  char msg[]  = "esl_abc_Digitize() unit test failed";
+  ESL_ALPHABET *a;
+  char          goodseq[] = "ACDEF";
+  char          badseq[]  = "1@%34";
+  ESL_DSQ      *dsq;
+  ESL_DSQ       x;  
+  int           status;
+
+  ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (strlen(goodseq)+2));
+
+  if ((a = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg);
+  esl_abc_Digitize(a, goodseq, dsq);
+  if (dsq[1] != 0 || dsq[2] != 1) esl_fatal(msg); /* spot check */
+
+  esl_abc_Digitize(a, badseq, dsq);
+  x = esl_abc_XGetUnknown(a);
+  if (dsq[1] != x || dsq[2] != x) esl_fatal(msg); /* bad chars all X's now, upon failure */
+
+  free(dsq);
+  esl_alphabet_Destroy(a);
+  return eslOK;
+  
+ ERROR:
+  esl_fatal(msg);
+  return status;
+}
+
+static int
+utest_Textize(void) 
+{
+  char msg[]  = "esl_abc_Textize() unit test failed";
+  ESL_ALPHABET *a;
+  char          goodseq[] = "acdef";
+  char         *newseq;
+  ESL_DSQ      *dsq;
+  int           L;
+  int           status;
+
+  L = strlen(goodseq);
+  ESL_ALLOC(newseq, sizeof(char) * (L+1));
+  if ((a = esl_alphabet_Create(eslAMINO))    == NULL) esl_fatal(msg);
+  if (esl_abc_CreateDsq(a, goodseq, &dsq)   != eslOK) esl_fatal(msg);
+  if (esl_abc_Textize(a, dsq, L, newseq )   != eslOK) esl_fatal(msg);
+  if (strcmp(newseq, "ACDEF")               != 0)     esl_fatal(msg);
+  free(dsq);
+  free(newseq);
+  esl_alphabet_Destroy(a);
+  return eslOK;
+
+ ERROR:
+  esl_fatal(msg);
+  return status;
+}
+
+static int
+utest_TextizeN(void) 
+{
+  char msg[]  = "esl_abc_TextizeN() unit test failed";
+  ESL_ALPHABET *a;
+  char          goodseq[] = "acdefrynacdef";
+  ESL_DSQ      *dsq;
+  ESL_DSQ      *dptr;
+  int           W;
+
+  if ((a = esl_alphabet_Create(eslAMINO)) == NULL)  esl_fatal(msg);
+  if (esl_abc_CreateDsq(a, goodseq, &dsq) != eslOK) esl_fatal(msg);
+
+  dptr = dsq+6; 		/* points to "r", residue 6         */
+  W    = 5;			/* copy/convert 5 residues "rynac"  */
+  if (esl_abc_TextizeN(a, dptr, W, goodseq)  != eslOK) esl_fatal(msg);
+  if (strcmp(goodseq, "RYNACrynacdef")       != 0)     esl_fatal(msg);
+
+  /* test a case where we hit eslDSQ_SENTINEL, and nul-terminate */
+  dptr = dsq+10; 		/* points to "c", residue 10        */
+  W    = 20;			/* copy/convert remaining residues "cdef"  */
+  if (esl_abc_TextizeN(a, dptr, W, goodseq)  != eslOK) esl_fatal(msg);
+  if (strcmp(goodseq, "CDEF")                != 0)     esl_fatal(msg);
+  
+  free(dsq);
+  esl_alphabet_Destroy(a);
+  return eslOK;
+}
+
+static int
+utest_dsqdup(void) 
+{
+  char msg[]  = "esl_abc_dsqdup() unit test failed";
+  ESL_ALPHABET *a;
+  char          goodseq[] = "ACGt";
+  ESL_DSQ       expect[] = { eslDSQ_SENTINEL, 0, 1, 2, 3, eslDSQ_SENTINEL };
+  ESL_DSQ      *d1, *d2;
+  int           L;
+
+  L = strlen(goodseq);
+  if ((a = esl_alphabet_Create(eslRNA))           == NULL)  esl_fatal(msg);
+  if (esl_abc_CreateDsq(a, goodseq, &d1)          != eslOK) esl_fatal(msg);
+
+  if (esl_abc_dsqdup(d1, -1, &d2)                 != eslOK) esl_fatal(msg);
+  if (memcmp(d2, expect, sizeof(ESL_DSQ) * (L+2)) != 0)     esl_fatal(msg);
+  free(d2);
+
+  if (esl_abc_dsqdup(d1, L, &d2)                  != eslOK) esl_fatal(msg);
+  if (memcmp(d2, expect, sizeof(ESL_DSQ) * (L+2)) != 0)     esl_fatal(msg);
+  free(d2);
+  
+  free(d1);
+  esl_alphabet_Destroy(a);
+  return eslOK;
+}
+
+static int
+utest_dsqcat(void) 
+{
+  char msg[]  = "esl_abc_dsqcat() unit test failed";
+  ESL_ALPHABET *a;
+  char          goodseq[] = "ACGt";
+  char          addseq[]  = "RYM KN";
+  char          badseq[]  = "RYM K&";
+  ESL_DSQ       expect[] = { eslDSQ_SENTINEL, 0, 1, 2, 3, 5, 6, 7, 8, 15, eslDSQ_SENTINEL };
+  ESL_DSQ      *dsq;
+  int64_t       L1;
+  esl_pos_t     L2;
+
+
+  if ((a = esl_alphabet_Create(eslRNA))             == NULL)  esl_fatal(msg);
+  a->inmap[0]   = esl_abc_XGetUnknown(a);
+  a->inmap[' '] = eslDSQ_IGNORED;
+
+  L1 = strlen(goodseq);
+  L2 = strlen(addseq);
+  if (esl_abc_CreateDsq(a, goodseq, &dsq)              != eslOK) esl_fatal(msg);
+  if (esl_abc_dsqcat(a->inmap, &dsq, &L1, addseq, L2)  != eslOK) esl_fatal(msg);
+  if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (L1+2))    != 0)     esl_fatal(msg);
+  free(dsq);
+
+  L1 = -1;
+  L2 = -1;
+  if (esl_abc_CreateDsq(a, goodseq, &dsq)              != eslOK) esl_fatal(msg);
+  if (esl_abc_dsqcat(a->inmap, &dsq, &L1, addseq, L2)  != eslOK) esl_fatal(msg);
+  if (L1 != esl_abc_dsqlen(dsq))                                 esl_fatal(msg);
+  if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (L1+2))    != 0)     esl_fatal(msg);
+  free(dsq);
+
+  L1  = 0;
+  dsq = NULL;
+  if (esl_abc_dsqcat(a->inmap, &dsq, &L1, goodseq, -1)    != eslOK) esl_fatal(msg);
+  if (esl_abc_dsqcat(a->inmap, &dsq, &L1, addseq,  -1)    != eslOK) esl_fatal(msg);
+  if (L1 != esl_abc_dsqlen(dsq))                                    esl_fatal(msg);
+  if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (L1+2))       != 0)    esl_fatal(msg);
+  free(dsq);
+
+  L1 = -1;
+  L2 = strlen(badseq);
+  if (esl_abc_CreateDsq(a, goodseq, &dsq)                != eslOK)     esl_fatal(msg);
+  if (esl_abc_dsqcat(a->inmap, &dsq, &L1, badseq,  L2)   != eslEINVAL) esl_fatal(msg);
+  if (L1 != esl_abc_dsqlen(dsq))                                       esl_fatal(msg);
+  if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (L1+2))      != 0)         esl_fatal(msg);
+  free(dsq);
+  
+  esl_alphabet_Destroy(a);
+  return eslOK;
+}
+
+/* dsqlen    unit test goes here */
+/* dsqrlen   unit test goes here */
+/* utest_Match goes here */
+  
+/* This serves to unit test multiple functions:
+ *    esl_abc_IAvgScore()
+ *    esl_abc_IExpectScore()
+ */
+static int
+degeneracy_integer_scores(void)
+{
+  char *msg = "degeneracy_integer_scores unit test failed";
+  ESL_ALPHABET *a;
+  ESL_DSQ       x;
+  float         p[]  = {0.4, 0.1, 0.1, 0.4}; /* A/T biased background */
+  int           sc[] = { -1,  -6,   6,   1};
+  int           val;
+
+  a     = esl_alphabet_Create(eslDNA);  
+
+  x     = esl_abc_DigitizeSymbol(a, 'N'); /* any: A/C/G/T */
+  val   = esl_abc_IAvgScore(a, x, sc); 
+  /* average of -1,-6,6,1 = 0 */
+  if (val != 0) esl_fatal(msg);
+
+  x     = esl_abc_DigitizeSymbol(a, 'M');     /* M = A/C */
+  val   = esl_abc_IExpectScore(a, x, sc, p);  
+  /* expectation of -1,-6 given p = 0.4,0.1 = -2 */
+  if (val != -2) esl_fatal(msg);
+
+  esl_alphabet_Destroy(a);
+  return eslOK;
+}
+
+/* This serves to unit test multiple functions:
+ *    esl_abc_FAvgScore()
+ *    esl_abc_FExpectScore()
+ */
+static int
+degeneracy_float_scores(void)
+{
+  char *msg = "degeneracy_float_scores unit test failed";
+  ESL_ALPHABET *a;
+  ESL_DSQ       x;
+  float         p[]  = {0.4, 0.1, 0.1, 0.4}; /* A/T biased background */
+  float         sc[] = { -1., -6.,  6., 1.};
+  float         val;
+
+  a     = esl_alphabet_Create(eslRNA);  
+
+  x     = esl_abc_DigitizeSymbol(a, 'N'); /* any: A/C/G/T */
+  val   = esl_abc_FAvgScore(a, x, sc); 
+  /* average of -1,-6,6,1 = 0 */
+  if (fabs(val - 0.) > 0.0001) esl_fatal(msg);
+
+  x     = esl_abc_DigitizeSymbol(a, 'M');     /* M = A/C */
+  val   = esl_abc_FExpectScore(a, x, sc, p);  
+  /* expectation of -1,-6 given p = 0.4,0.1 = -2 */
+  if (fabs(val + 2.) > 0.0001) esl_fatal(msg);
+
+  esl_alphabet_Destroy(a);
+  return eslOK;
+}
+
+/* This serves to unit test multiple functions:
+ *    esl_abc_DAvgScore()
+ *    esl_abc_DExpectScore()
+ */
+
+static int
+degeneracy_double_scores(void)
+{
+  char *msg = "degeneracy_double_scores unit test failed";
+  ESL_ALPHABET *a;
+  ESL_DSQ       x;
+  double        p[]  = {0.4, 0.1, 0.1, 0.4}; /* A/T biased background */
+  double        sc[] = { -1., -6.,  6., 1.};
+  double        val;
+
+  a     = esl_alphabet_Create(eslRNA);  
+
+  x     = esl_abc_DigitizeSymbol(a, 'N'); /* any: A/C/G/T */
+  val   = esl_abc_DAvgScore(a, x, sc); 
+  /* average of -1,-6,6,1 = 0 */
+  if (fabs(val - 0.) > 0.0001) esl_fatal(msg);
+
+  x     = esl_abc_DigitizeSymbol(a, 'M');     /* M = A/C */
+  val   = esl_abc_DExpectScore(a, x, sc, p); 
+  /* expectation of -1,-6 given p = 0.4,0.1 = -2 */
+  if (fabs(val + 2.) > 0.0001) esl_fatal(msg);
+
+  esl_alphabet_Destroy(a);
+  return eslOK;
+}
+
+/* utest_IAvgScVec */
+/* utest_FAvgScVec */
+/* utest_DAvgScVec */
+/* utest_IExpectScVec */
+/* utest_FExpectScVec */
+/* utest_DExpectScVec */
+
+static int
+utest_FCount(void)
+{
+  char         *msg = "FCount unit test failure";
+  ESL_ALPHABET *a = NULL;
+  ESL_DSQ       x;
+  char         *teststring = "X~-Z.UAX";
+  char         *s;
+  int           status;
+
+  /* 0.1 from 2 X's; U -> +1 C; A -> +1 A;  Z-> +0.5 Q,E; ~ ignored; .,- -> +2 gaps */
+  /*                          A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    - */
+  float       expect[21] = { 1.1, 1.1, 0.1, 0.6, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.6, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 2.0 };
+  float      *vec;
+
+  a = esl_alphabet_Create(eslAMINO);
+  ESL_ALLOC(vec, sizeof(float) * (a->K+1)); /* include gap char for this test */
+  esl_vec_FSet(vec, a->K+1, 0.);
+  for (s = teststring; *s != '\0'; s++)
+    {
+      x = esl_abc_DigitizeSymbol(a, *s);
+      if (esl_abc_FCount(a, vec, x, 1.0) != eslOK) esl_fatal(msg);
+    }
+  if (esl_vec_FCompare(vec, expect, a->K+1, 0.0001) != eslOK) esl_fatal(msg);
+  
+  esl_alphabet_Destroy(a);
+  free(vec);
+  return eslOK;
+      
+ ERROR:
+  esl_fatal("allocation failed");
+  return status;
+}
+
+static int
+utest_DCount(void)
+{
+  char         *msg = "DCount unit test failure";
+  ESL_ALPHABET *a = NULL;
+  ESL_DSQ       x;
+  char         *teststring = "X~-Z.UAX";
+  char         *s;
+  int           status;
+
+  /* 0.1 from 2 X's; U -> +1 C; A -> +1 A;  Z-> +0.5 Q,E; ~ ignored; .,- -> +2 gaps */
+  /*                          A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    - */
+  double      expect[21] = { 1.1, 1.1, 0.1, 0.6, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.6, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 2.0 };
+  double      *vec;
+
+  a = esl_alphabet_Create(eslAMINO);
+  ESL_ALLOC(vec, sizeof(double) * (a->K+1)); /* include gap char for this test */
+  esl_vec_DSet(vec, a->K+1, 0.);
+  for (s = teststring; *s != '\0'; s++)
+    {
+      x = esl_abc_DigitizeSymbol(a, *s);
+      if (esl_abc_DCount(a, vec, x, 1.0) != eslOK) esl_fatal(msg);
+    }
+  if (esl_vec_DCompare(vec, expect, a->K+1, 0.0001) != eslOK) esl_fatal(msg);
+  
+  esl_alphabet_Destroy(a);
+  free(vec);
+  return eslOK;
+      
+ ERROR:
+  esl_fatal("allocation failed");
+  return status;
+}
+#endif /* eslALPHABET_TESTDRIVE*/
+/*-------------------- end, unit tests --------------------------*/
+
+
+
+
+/*****************************************************************
+ * 5. Test driver.
+ *****************************************************************/
+
+/* gcc -g -Wall -std=gnu99 -I.     -o esl_alphabet_utest -DeslALPHABET_TESTDRIVE esl_alphabet.c esl_vectorops.c easel.c -lm
+ * gcc -g -Wall -std=gnu99 -I. -L. -o esl_alphabet_utest -DeslALPHABET_TESTDRIVE esl_alphabet.c -leasel
+ * ./test
+ * valgrind ./test
+ */
+#ifdef eslALPHABET_TESTDRIVE
+static int basic_examples(void);
+
+#include "easel.h"
+#include "esl_alphabet.h"
+
+int
+main(void)
+{
+  utest_Create();
+  utest_CreateCustom();
+  utest_SetEquiv();
+  utest_SetCaseInsensitive();
+  utest_SetDegeneracy();
+  utest_SetIgnored();
+  utest_Destroy();
+
+  utest_CreateDsq();
+  utest_Digitize();
+  utest_Textize();
+  utest_TextizeN();
+  utest_dsqdup();
+  utest_dsqcat();
+
+  utest_FCount();
+  utest_DCount();
+
+  basic_examples();
+  degeneracy_integer_scores();
+  degeneracy_float_scores();
+  degeneracy_double_scores();
+
+  return eslOK;
+}
+
+static int
+basic_examples(void)
+{
+  char *msg = "basic alphabet example tests failed";
+  ESL_ALPHABET  *a1, *a2;
+  char           dnaseq[] = "GARYtcN";
+  char           aaseq[]  = "EFILqzU";
+  int            L;
+  ESL_DSQ       *dsq, *dsq2;
+  int            i;
+
+  /* Example 1. 
+   * Create a DNA alphabet; digitize a DNA sequence.
+   */
+  if ((a1 = esl_alphabet_Create(eslDNA)) == NULL)      esl_fatal(msg);
+  L  = strlen(dnaseq);
+  if ((dsq = malloc(sizeof(ESL_DSQ) * (L+2))) == NULL) esl_fatal(msg);
+  if (esl_abc_Digitize(a1, dnaseq, dsq) != eslOK)      esl_fatal(msg);
+  if (esl_abc_dsqlen(dsq) != L)                        esl_fatal(msg);
+  esl_alphabet_Destroy(a1);
+
+  /* Example 2. 
+   * Create an RNA alphabet; digitize the same DNA sequence;
+   * make sure it is equal to the dsq above (so T=U were
+   * correctly synonymous on input).
+   */
+  if ((a2 = esl_alphabet_Create(eslRNA)) == NULL)       esl_fatal(msg);
+  if ((dsq2 = malloc(sizeof(ESL_DSQ) * (L+2))) == NULL) esl_fatal(msg);
+  if (esl_abc_Digitize(a2, dnaseq, dsq2) != eslOK)      esl_fatal(msg);
+  for (i = 1; i <= L; i++)
+    if (dsq[i] != dsq2[i]) esl_fatal(msg);
+  esl_alphabet_Destroy(a2);
+
+  /* Example 3.
+   * Create an amino alphabet; digitize a protein sequence, 
+   * while reusing memory already allocated in dsq.
+   */
+  if ((a1 = esl_alphabet_Create(eslAMINO)) == NULL)  esl_fatal(msg);
+  if (esl_abc_Digitize(a1, aaseq, dsq) != eslOK)     esl_fatal(msg);
+  
+  /* Example 4.
+   * Create a custom alphabet almost the same as the amino
+   * acid alphabet; digitize the same protein seq, reusing
+   * memory in dsq2; check that seqs are identical.
+   */
+  if ((a2 = esl_alphabet_CreateCustom("ACDEFGHIKLMNPQRSTVWY-BJZOUX~", 20, 28)) == NULL) esl_fatal(msg);
+  if (esl_alphabet_SetCaseInsensitive(a2)   != eslOK)     esl_fatal(msg);  /* allow lower case input */
+  if (esl_alphabet_SetDegeneracy(a2, 'Z', "QE") != eslOK) esl_fatal(msg);
+
+  if (esl_abc_Digitize(a2, aaseq, dsq2) != eslOK)      esl_fatal(msg);
+  for (i = 1; i <= L; i++)
+    if (dsq[i] != dsq2[i]) esl_fatal(msg);
+
+  /* clean up.
+   */
+  esl_alphabet_Destroy(a1);
+  esl_alphabet_Destroy(a2);
+  free(dsq);
+  free(dsq2);
+  return eslOK;
+}
+
+
+#endif /*eslALPHABET_TESTDRIVE*/
+
+/*****************************************************************
+ * 6. Examples.
+ *****************************************************************/ 
+
+/*   gcc -g -Wall -o example -I. -DeslALPHABET_EXAMPLE esl_alphabet.c easel.c
+ */
+#ifdef eslALPHABET_EXAMPLE
+/*::cexcerpt::alphabet_example::begin::*/
+#include "easel.h"
+#include "esl_alphabet.h"
+int main(void)
+{
+  ESL_ALPHABET *a;
+  char          dnaseq[] = "GARYTC";
+  int           L        = 6;
+  ESL_DSQ      *dsq;
+  
+  a = esl_alphabet_Create(eslDNA);
+
+  if ((dsq = malloc(sizeof(ESL_DSQ) * (L+2))) == NULL)  esl_fatal("malloc failed");
+  if (esl_abc_Digitize(a, dnaseq, dsq)       != eslOK)  esl_fatal("failed to digitize the sequence");
+
+  free(dsq);
+  esl_alphabet_Destroy(a);
+  return 0;
+}
+/*::cexcerpt::alphabet_example::end::*/
+#endif /*eslALPHABET_EXAMPLE*/
+
+
+/*   gcc -g -Wall -o example -I. -DeslALPHABET_EXAMPLE2 esl_alphabet.c easel.c
+ */
+#ifdef eslALPHABET_EXAMPLE2
+/*::cexcerpt::alphabet_example2::begin::*/
+#include "easel.h"
+#include "esl_alphabet.h"
+int main(void)
+{ 
+  ESL_ALPHABET *a;
+
+  /* 1. Create the base alphabet structure. */
+  a = esl_alphabet_CreateCustom("ACDEFGHIKLMNOPQRSTUVWY-BJZX~", 22, 28);
+
+  /* 2. Set your equivalences in the input map.  */
+  esl_alphabet_SetEquiv(a, '.', '-');     /* allow . as a gap character too */
+
+  /* 3. After all synonyms are set, (optionally) make map case-insensitive. */
+  esl_alphabet_SetCaseInsensitive(a);       /* allow lower case input too */
+
+  /* 4. Define your optional degeneracy codes in the alphabet, one at a time.
+   *    The 'any' character X was automatically set up.  */
+  esl_alphabet_SetDegeneracy(a, 'B', "DN"); /* read B as {D|N} */
+  esl_alphabet_SetDegeneracy(a, 'J', "IL"); /* read B as {I|L} */
+  esl_alphabet_SetDegeneracy(a, 'Z', "QE"); /* read Z as {Q|E} */
+
+  /* 5. (do your stuff) */
+
+  /* 6. Remember to free it when you're done with it. */
+  esl_alphabet_Destroy(a);
+  return 0;
+}
+/*::cexcerpt::alphabet_example2::end::*/
+#endif /*eslALPHABET_EXAMPLE2*/
+
+
+
+#ifdef eslALPHABET_EXAMPLE3
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+int 
+main(int argc, char **argv)
+{
+  ESL_SQ     *sq      = esl_sq_Create();
+  ESL_SQFILE *sqfp;
+  int         format  = eslSQFILE_UNKNOWN;
+  char       *seqfile = argv[1];
+  int         type;
+  int         status;
+
+  status = esl_sqfile_Open(seqfile, format, NULL, &sqfp);
+  if      (status == eslENOTFOUND) esl_fatal("No such file.");
+  else if (status == eslEFORMAT)   esl_fatal("Format couldn't be determined.");
+  else if (status != eslOK)        esl_fatal("Open failed, code %d.", status);
+
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+  {
+    esl_sq_GuessAlphabet(sq, &type);
+    printf("%-25s %s\n", sq->name, esl_abc_DecodeType(type));
+    esl_sq_Reuse(sq);
+  }
+  if      (status == eslEFORMAT) esl_fatal("Parse failed\n  %s", esl_sqfile_GetErrorBuf(sqfp));
+  else if (status != eslEOF)     esl_fatal("Unexpected read error %d", status);
+  
+  esl_sq_Destroy(sq);
+  esl_sqfile_Close(sqfp);
+  return 0;
+}
+#endif /*eslALPHABET_EXAMPLE3*/
+
+
+
+
diff --git a/esl_alphabet.h b/esl_alphabet.h
new file mode 100644
index 0000000..bb387e1
--- /dev/null
+++ b/esl_alphabet.h
@@ -0,0 +1,129 @@
+/* Digital representation of biosequence symbols in Easel.
+ */
+#ifndef eslALPHABET_INCLUDED
+#define eslALPHABET_INCLUDED
+
+#include <ctype.h>		/* isascii() */
+#include "easel.h"
+
+/* Flags for alphabet types.
+ * Do not change, only add, because these codes are used in file formats.
+ */
+#define eslUNKNOWN     0        /* 0=unknown is easel-wide convention; don't change */
+#define eslRNA         1
+#define eslDNA         2		
+#define eslAMINO       3		
+#define eslCOINS       4	/* for toy examples      */
+#define eslDICE        5	/* also for toy examples */
+#define eslNONSTANDARD 6
+/* ... if you add here, change esl_abc_ValidateType() too. */
+
+
+/* Structure: ESL_ALPHABET
+ */
+typedef struct {
+  int      type;	     /* eslDNA, eslRNA, eslAMINO, eslNONSTANDARD, etc.                 */
+  int      K;		     /* uniq alphabet size: 4 or 20                                    */
+  int      Kp;		     /* total size: alphabet + degen + gap + missing                   */
+  char    *sym;              /* "ACGT-RYMKSWHBVDN*~", for instance    [0..Kp-1]                */
+  ESL_DSQ  inmap[128];       /* inmap['A'] = 0, etc: dsq[] index for a symbol                  */
+  char   **degen;            /* 1/0, which syms inc which res [0..Kp-1][0..K-1]                */
+  int     *ndegen;	     /* # of degenerate residues per code  [0..Kp-1]                   */
+  ESL_DSQ *complement;       /* maps sym to complements, [0..Kp-1]; NULL if <type> not DNA/RNA */
+} ESL_ALPHABET;
+
+
+
+
+/* 1. An ESL_ALPHABET object.
+ */
+extern ESL_ALPHABET *esl_alphabet_Create(int type);
+extern ESL_ALPHABET *esl_alphabet_CreateCustom(const char *alphabet, int K, int Kp);
+extern int           esl_alphabet_SetEquiv(ESL_ALPHABET *a, char sym, char c);
+extern int           esl_alphabet_SetCaseInsensitive(ESL_ALPHABET *a);
+extern int           esl_alphabet_SetDegeneracy(ESL_ALPHABET *a, char c, char *ds);
+extern int           esl_alphabet_SetIgnored(ESL_ALPHABET *a, const char *ignoredchars);
+extern size_t        esl_alphabet_Sizeof(ESL_ALPHABET *a);
+extern void          esl_alphabet_Destroy(ESL_ALPHABET *a);
+
+/* 2. Digitized sequences.
+ */
+extern int     esl_abc_CreateDsq(const ESL_ALPHABET *a, const char    *seq,        ESL_DSQ **ret_dsq);
+extern int     esl_abc_Digitize (const ESL_ALPHABET *a, const char    *seq,        ESL_DSQ *dsq);
+extern int     esl_abc_Textize  (const ESL_ALPHABET *a, const ESL_DSQ *dsq,  int64_t L, char   *seq);
+extern int     esl_abc_TextizeN (const ESL_ALPHABET *a, const ESL_DSQ *dptr, int64_t L, char   *buf);
+extern int     esl_abc_dsqcpy(const ESL_DSQ *dsq, int64_t L, ESL_DSQ *dcopy);
+extern int     esl_abc_dsqdup(const ESL_DSQ *dsq, int64_t L, ESL_DSQ **ret_dup);
+extern int     esl_abc_dsqcat        (const ESL_DSQ *inmap, ESL_DSQ **dsq, int64_t *L, const char *s, esl_pos_t n);
+extern int     esl_abc_dsqcat_noalloc(const ESL_DSQ *inmap, ESL_DSQ  *dsq, int64_t *L, const char *s, esl_pos_t n);
+extern int64_t esl_abc_dsqlen(const ESL_DSQ *dsq);
+extern int64_t esl_abc_dsqrlen(const ESL_ALPHABET *a, const ESL_DSQ *dsq);
+extern int     esl_abc_CDealign(const ESL_ALPHABET *abc, char    *s, const ESL_DSQ *ref_ax, int64_t *opt_rlen);
+extern int     esl_abc_XDealign(const ESL_ALPHABET *abc, ESL_DSQ *x, const ESL_DSQ *ref_ax, int64_t *opt_rlen);
+extern int     esl_abc_ConvertDegen2X(const ESL_ALPHABET *abc, ESL_DSQ *dsq);
+extern int     esl_abc_revcomp(const ESL_ALPHABET *abc, ESL_DSQ *dsq, int n);
+
+/* 3. Other routines in the API.
+ */
+extern int    esl_abc_ValidateType(int type);
+extern int    esl_abc_GuessAlphabet(const int64_t *ct, int *ret_type);
+extern double esl_abc_Match       (const ESL_ALPHABET *a, ESL_DSQ x, ESL_DSQ y, double *p);
+extern int    esl_abc_IAvgScore   (const ESL_ALPHABET *a, ESL_DSQ x, const int    *sc);
+extern float  esl_abc_FAvgScore   (const ESL_ALPHABET *a, ESL_DSQ x, const float  *sc);
+extern double esl_abc_DAvgScore   (const ESL_ALPHABET *a, ESL_DSQ x, const double *sc);
+extern int    esl_abc_IExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const int    *sc, const float  *p);
+extern float  esl_abc_FExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const float  *sc, const float  *p);
+extern double esl_abc_DExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const double *sc, const double *p);
+
+extern int    esl_abc_IAvgScVec   (const ESL_ALPHABET *a, int    *sc);
+extern int    esl_abc_FAvgScVec   (const ESL_ALPHABET *a, float  *sc);
+extern int    esl_abc_DAvgScVec   (const ESL_ALPHABET *a, double *sc);
+extern int    esl_abc_IExpectScVec(const ESL_ALPHABET *a, int    *sc, const float  *p);
+extern int    esl_abc_FExpectScVec(const ESL_ALPHABET *a, float  *sc, const float  *p);
+extern int    esl_abc_DExpectScVec(const ESL_ALPHABET *a, double *sc, const double *p);
+extern int    esl_abc_FCount      (const ESL_ALPHABET *a, float  *ct, ESL_DSQ x, float  wt);
+extern int    esl_abc_DCount      (const ESL_ALPHABET *a, double *ct, ESL_DSQ x, double wt);
+extern int    esl_abc_EncodeType  (char *typestring);
+extern char  *esl_abc_DecodeType  (int type);
+extern int    esl_abc_ValidateSeq(const ESL_ALPHABET *a, const char *seq, int64_t L, char *errbuf);
+
+/* In the tests below, remember the rules of order in internal alphabets:
+ *   Canonical alphabet   Gap   Degeneracies   Any    None    Missing 
+ *        0..K-1           K      K+1..Kp-4   (Kp-3)  (Kp-2)   (Kp-1)
+ *         ACGT            -     RYMKSWHBVD     N       *        ~           DNA: K=4  Kp=18
+ *  ACDEFGHIKLMNPQRSTVWY   -        BJZOU       X       *        ~       protein: K=20 Kp=29
+ *                           
+ * ESL_DSQ is an unsigned 8-bit type, so don't test for >= 0 or compilers will complain.
+ */
+#define esl_abc_DigitizeSymbol(a, c) ((a)->inmap[(int)c])
+#define esl_abc_XIsValid(a, x)       ((x) < (a)->Kp)
+#define esl_abc_XIsResidue(a, x)     ((x) < (a)->K || ((x) > (a)->K && (x) < (a)->Kp-2))
+#define esl_abc_XIsCanonical(a, x)   ((x) < (a)->K)
+#define esl_abc_XIsGap(a, x)         ((x) == (a)->K)
+#define esl_abc_XIsDegenerate(a, x)  ((x) >  (a)->K && (x) < (a)->Kp-2)
+#define esl_abc_XIsUnknown(a, x)     ((x) == (a)->Kp-3)
+#define esl_abc_XIsNonresidue(a, x)  ((x) == (a)->Kp-2)
+#define esl_abc_XIsMissing(a, x)     ((x) == (a)->Kp-1)
+#define esl_abc_XGetGap(a)           ((a)->K)
+#define esl_abc_XGetUnknown(a)       ((a)->Kp-3)
+#define esl_abc_XGetNonresidue(a)    ((a)->Kp-2)
+#define esl_abc_XGetMissing(a)       ((a)->Kp-1)
+
+
+#define esl_abc_CIsValid(a, c)       (isascii(c) && (a)->inmap[(int)c] < (a)->Kp)
+#define esl_abc_CIsResidue(a, c)     ((a)->inmap[(int)c] < (a)->K || ((a)->inmap[(int)c] > (a)->K && (a)->inmap[(int)c] < (a)->Kp-2))
+#define esl_abc_CIsCanonical(a, c)   ((a)->inmap[(int)c] < (a)->K)
+#define esl_abc_CIsGap(a, c)         ((a)->inmap[(int)c] == (a)->K)
+#define esl_abc_CIsDegenerate(a, c)  ((a)->inmap[(int)c] > (a)->K  && (a)->inmap[(int)c] < (a)->Kp-2)
+#define esl_abc_CIsUnknown(a, c)     ((a)->inmap[(int)c] == (a)->Kp-3)
+#define esl_abc_CIsNonresidue(a, c)  ((a)->inmap[(int)c] == (a)->Kp-2)
+#define esl_abc_CIsMissing(a, c)     ((a)->inmap[(int)c] == (a)->Kp-1)
+#define esl_abc_CGetGap(a)           ((a)->sym[(int)(a)->K])
+#define esl_abc_CGetUnknown(a)       ((a)->sym[(int)(a)->Kp-3])
+#define esl_abc_CGetNonresidue(a)    ((a)->sym[(int)(a)->Kp-2])
+#define esl_abc_CGetMissing(a)       ((a)->sym[(int)(a)->Kp-1])
+
+#endif /*eslALPHABET_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_alphabet.tex b/esl_alphabet.tex
new file mode 100644
index 0000000..03c3853
--- /dev/null
+++ b/esl_alphabet.tex
@@ -0,0 +1,501 @@
+The \eslmod{alphabet} module contains routines for digitizing
+alphabetic biosequences.
+
+It is convenient to represent nucleotides and amino acids as array
+indices 0..3 or 0..19, respectively, for efficiency and other
+reasons. It is also convenient to index the residues in a biosequence
+in 1..L coordinates instead of the C language's 0..L-1 array
+representation, partly for human readability, and also because some
+codes (dynamic programming alignment algorithms, for example) have
+boundary conditions where initializing a boundary at coordinate 0 is
+convenient.
+
+Real biosequences do not consist of just four or twenty different
+canonical symbols, though. The \eslmod{alphabet} module provides
+mechanisms for dealing with several other biosequence coding issues:
+
+\begin{itemize}
+  \item Degenerate residue symbols representing uncertainties,
+        including both IUPAC/IUBMB standard one-letter nomenclature
+        and nonstandard extensions such as the use of \ccode{J} to
+        mean isoleucine or leucine (\ccode{I|L}) in protein sequences
+        determined by mass spec;
+
+  \item Symbols for ``any residue'' (N in DNA/RNA; X in amino acid
+    sequences) and ``not a residue'' (a ``translated'' stop codon '*'
+    in protein sequence;
+
+  \item Standard and nonstandard symbols for unusual residues, such as
+        selenocysteine (\ccode{U}) and pyrrolysine (\ccode{O}) in
+        proteins;
+
+  \item \emph{Ad hoc} symbols representing modified residues, such as
+        the slew of one-letter codes used to annotate
+        posttranscriptionally modified nucleotides in the Sprinzl tRNA
+        database \citep{Sprinzl98};
+
+  \item Case-insensitivity of input sequences, for instance allowing
+        both \ccode{a} and \ccode{A} to mean alanine in amino acid
+        sequences;
+
+  \item Tolerating common malpractices in the field, like the use of
+       \ccode{X} instead of \ccode{N} as a degeneracy code in nucleic
+       acid sequence;
+
+  \item The semantic difference between a gap symbol and a missing
+        data symbol in sequence alignments.
+\end{itemize}        
+
+The \eslmod{alphabet} module provides standard defaults for protein,
+RNA, and DNA alphabets which follow both community standards and
+IUPAC/IUBMB nomenclature for representing sequence residues in
+one-letter ASCII characters. Additionally, the design of the
+\eslmod{alphabet} module is flexible enough to allow an application to
+customize its own alphabet, to deal with these issues almost any way
+it chooses.
+
+Table~\ref{tbl:alphabet_api} lists the functions in the
+\eslmod{alphabet} API.  Easel maintains alphabet information in an
+\ccode{ESL\_ALPHABET} structure. An application usually creates its
+alphabet once, possibly even as a global variable.  A digitized
+sequence \ccode{dsq} is an \ccode{unsigned char *} array of length
+\ccode{L+2}, where \ccode{dsq[1..L]} are digitized residues, and
+\ccode{dsq[0]} and \ccode{dsq[L+1]} are sentinel bytes (of value
+\ccode{eslSENTINEL}, 127).
+
+\begin{table}[hbp]
+\begin{center}
+\begin{tabular}{ll}\hline
+   \multicolumn{2}{c}{\textbf{The \ccode{ESL\_ALPHABET} object}}\\
+\ccode{esl\_alphabet\_Create()}       & Create alphabet of standard type. \\
+\ccode{esl\_alphabet\_CreateCustom()} & Create a custom alphabet. \\
+\ccode{esl\_alphabet\_SetEquiv()}     & Define an equivalent symbol. \\
+\ccode{esl\_alphabet\_SetCaseInsensitive()} & Make an alphabet's input map case insensitive. \\
+\ccode{esl\_alphabet\_SetDegeneracy()} & Define degenerate symbol in custom alphabet. \\
+\ccode{esl\_alphabet\_Destroy()}      & Frees an alphabet object. \\
+   \multicolumn{2}{c}{\textbf{Digitized sequences}}\\
+\ccode{esl\_abc\_CreateDsq()}         & Digitize a sequence into new \ccode{dsq} space. \\
+\ccode{esl\_abc\_Digitize()}          & Digitize a sequence into existing \ccode{dsq} space. \\
+   \multicolumn{2}{c}{\textbf{Other functions}}\\
+\ccode{esl\_abc\_\{I,F,D\}AvgScore()}  & Calculate avg score of degenerate residue.\\
+\ccode{esl\_abc\_\{I,F,D\}ExpectScore()} & Calculate expected score of degenerate residue.\\
+\ccode{esl\_abc\_Type()}               & Convert internal alphabet type code to output string.\\
+\ccode{esl\_abc\_\{F,D\}Count()}       & Count a digital symbol towards a countvector.\\
+\ccode{esl\_abc\_DigitizeSymbol()}     & Returns digital code for one ASCII character.\\
+\ccode{esl\_abc\_XIsDegenerate()}      & Returns TRUE given code for a degeneracy.\\
+\ccode{esl\_abc\_XIsBasic()}           & Returns TRUE given code for a fundamental residue.\\
+\ccode{esl\_abc\_XIsGap()}             & Returns TRUE given code for a gap.\\
+\ccode{esl\_abc\_CIsDegenerate()}      & Returns TRUE given a degenerate character.\\
+\ccode{esl\_abc\_CIsBasic()}           & Returns TRUE given a fundamental residue.\\
+\ccode{esl\_abc\_CIsGap()}             & Returns TRUE given a gap character.\\
+
+\hline
+\end{tabular}
+\end{center}
+\caption{The \eslmod{alphabet} API.}
+\label{tbl:alphabet_api}
+\end{table}
+
+\subsection{An example of using the alphabet API}
+
+Figure~\ref{fig:alphabet_example} shows an example of creating a DNA
+alphabet and digitizing a short DNA sequence.
+
+\begin{figure}
+\input{cexcerpts/alphabet_example}
+\caption{An example of using the \eslmod{alphabet} module.}
+\label{fig:alphabet_example}
+\end{figure}
+
+\begin{itemize}
+\item A standard biosequence alphabet is created using
+\ccode{esl\_alphabet\_Create(type)}, where \ccode{type} can be
+\ccode{eslDNA}, \ccode{eslRNA}, or \ccode{eslAMINO}.
+
+\item An input sequence \ccode{seq} of length \ccode{L} is digitized
+according to alphabet \ccode{a}, creating a newly allocated digital
+sequence \ccode{dsq}, by calling \ccode{esl\_dsq\_Create(a, seq, L,
+\&dsq)}. The caller must free \ccode{dsq} using \ccode{free(dsq)}.
+Alternatively, if the caller has already allocated \ccode{L+2} (or
+more) bytes in \ccode{dsq}, it can call \ccode{esl\_dsq\_Set(a, seq,
+L, dsq)}, which is the non-allocating version of
+\ccode{esl\_dsq\_Create()}.
+
+\item For an input sequence of length \ccode{L}, the digitized
+sequence \ccode{dsq} is a \ccode{char *} array of \ccode{L+2}
+bytes. \ccode{dsq[0]} and \ccode{dsq[L+1]} contain a sentinel byte of
+value \ccode{eslSENTINEL} (127).  Positions \ccode{1..L} hold the
+residues, where values \ccode{0..3} encode \ccode{ACGT} in DNA
+sequences, \ccode{0..3} encode \ccode{ACGU} in RNA sequences, and
+\ccode{0..19} encode \ccode{AC..WY} in amino acid sequences.
+
+\item Both sequence-digitizing functions return \ccode{eslEINVAL} if
+the input sequence contains characters that are not in the
+alphabet. Because input sequences are often provided by a user (not
+the program), this is a common error that the application must check
+for.
+\end{itemize}
+
+\subsection{Concepts and terminology}
+
+A \esldef{symbol} is a 7-bit ASCII input character, representing a
+residue, gap, nonresidue, or degeneracy. A \esldef{code} is the
+digital internal representation of the symbol as an \ccode{unsigned
+ char} in the range $0..127$, suitable for use as an array index. The
+\eslmod{alphabet} module translates input symbols into internal
+digital codes.
+
+We distinguish between an input alphabet, an internal alphabet, and a
+canonical alphabet.  The \esldef{input alphabet} consists of all the
+symbols that Easel allows in an input biosequence character
+string. The \esldef{internal alphabet} is the standardized one-letter
+alphabet that Easel deals with. The \esldef{canonical alphabet} is the
+fundamental set of 4 nucleotides or 20 amino acids.
+
+Easel deals with all of the complications of sequence encoding using
+two concepts, equivalency and degeneracy.  \esldef{Equivalency}
+defines how the input alphabet maps to the internal
+alphabet. \esldef{Degeneracy} defines how the internal alphabet maps
+to the canonical alphabet.
+
+Equivalent residues are symbols that are accepted in an input sequence
+character string and silently translated into an appropriate internal
+code. Characters in the input alphabet are mapped many-to-one to the
+internal alphabet using an \esldef{input map}. One use of equivalency
+is to map both lower and upper case input to the same internal
+symbol. Another use is to allow several different input characters to
+mean a gap, 'any' symbol, or 'nonresidue' symbol. Another use is to
+silently accept and ``fix'' nonstandard but common input ``errors'',
+such as tolerating the use of X to mean N in nucleic acid sequences.
+
+Degenerate residues are codes in the internal alphabet that are mapped
+one-to-many onto canonical residue codes, using a \esldef{degeneracy
+map}. In addition to mapping the degeneracy codes onto the canonical
+alphabet, the degeneracy mechanism is also used to deal with unusual
+and modified residues. Selenocysteine, for instance, is represented by
+default as a \ccode{U}, but treated as a degenerate code for \ccode{C}
+(cysteine). The rationale for this will be described in more detail
+below.
+
+\subsubsection{The internal alphabet}
+
+Easel's internal alphabet is a string (\ccode{a->sym}) of length
+\ccode{Kp}, which contains:
+
+\begin{itemize}
+ \item the \ccode{K} symbols of the canonical alphabet;
+ \item a standard gap symbol;
+ \item (optionally) any other degenerate, unusual, or modified residue codes;
+ \item a mandatory ``any'' symbol (a completely degenerate residue);
+ \item a mandatory ``not-a-residue'' symbol;
+ \item a mandatory ``missing data'' symbol.
+\end{itemize}
+
+Residues \ccode{0..K-1} must be the canonical alphabet.  Residue
+\ccode{K} must be the gap symbol.  Residues \ccode{K+1..Kp-4} must be
+the degenerate and modified residue symbols (there can be zero of
+these). Residue \ccode{Kp-3} must be the completely degenerate symbol
+(such as \ccode{X} for protein sequence or \ccode{N} for nucleic acid
+sequence); all alphabets must have such a symbol. Residue \ccode{Kp-2}
+must be the not-a-residue symbol.  Residue \ccode{Kp-1} must be the
+missing data symbol.  Because the 'any' symbol, 'not-a-residue'
+symbol, and the two kinds of gap symbols are mandatory in any
+alphabet, \ccode{Kp} $\geq$ \ccode {K+4}. Aside from these
+constraints, symbols may occur in any order.
+
+The digital code used for each residue is then the index of a residue
+in this string, \ccode{0..Kp-1}. The only other value that can appear
+in a digitized sequence is \ccode{eslSENTINEL} (127), the sentinel
+byte in positions \ccode{0} and \ccode{L+1} of a digitized sequence of
+length \ccode{L}. 
+
+The rationale for the ordering is the following. Most applications
+will define residue scores in vectors and matrices that are smaller
+than the full range of the internal alphabet; for instance, it's
+common to only have \ccode{K} scores for the canonical residues.  As
+much as possible, we want array indices to be the same whether we're
+accessing the full internal alphabet or a smaller score vector or
+matrix. So: we expect many applications to have score vectors or
+matrices that only contain the \ccode{K} canonical residues, so the
+canonical residues go first.  We expect some applications to treat
+gaps as an extra symbol, and provide \ccode{K+1} position-specific
+scores or a \ccode{K+1} $\times$ \ccode{K+1} score matrix, so the gap
+character is next. We expect a few applications to optimize degeneracy
+scoring by precalculating them in \ccode{Kp-2} vectors or $Kp-2 \times
+Kp-2$ matrices, so the degeneracies go next (the gap character at $K$
+might then go unused in the score vectors and matrices, but that's a
+minor inefficiency). The 'any' symbol should be at a predictable
+position in the degeneracy list, so it's arbitrarily placed at the
+end, in position \ccode{Kp-3}. The most robust applications will also
+handle the not-a-residue symbol (they may see translated stop codons),
+so it's next.  Finally, the missing data symbol is expected to always
+require special handling when it occurs, rather than appearing in a
+score vector or matrix, so it's put last.
+
+\subsection{The standard alphabets: DNA, RNA, protein}
+
+The three standard internal alphabets are:
+
+\begin{table}[h]
+\begin{tabular}{llccrr}
+\textbf{Type} & \ccode{sym}  & \textbf{equivs} & \textbf{gaps}   & \ccode{K} & \ccode{Kp} \\
+\ccode{eslRNA}        & \ccode{ACGU-RYMKSWHBVDN*\~}            & T=U; X=N & \ccode{-\_.} & 4         &  18         \\
+\ccode{eslDNA}        & \ccode{ACGT-RYMKSWHBVDN*\~}            & U=T; X=N & \ccode{-\_.} & 4         &  18         \\
+\ccode{eslAMINO}      & \ccode{ACDEFGHIKLMNPQRSTVWY-BJZOUX*\~} &          & \ccode{-\_.} & 20        &  29         \\
+\end{tabular}
+\end{table}
+
+The \ccode{sym} string contains all the symbols that can be handled
+internally, and all the residues that can be represented when a
+digitized sequence is converted back to text. An application might
+still convert some characters for its own purposes before displaying
+an alphabetic string; for instance, to use different gap symbols for
+insertions versus deletions, or to use upper/lower case conventions to
+represent match/insert positions in a profile HMM alignment.
+
+The standard DNA and RNA alphabets follow published IUBMB
+recommendations (``Nomenclature for incompletely specified bases in
+nucleic acid'' \citep{IUBMB85}), with an addition of X as an
+equivalence for N (acquiescing to the \emph{de facto} BLAST filter
+standard of using X's to mask residues), and equivalencing T to U in
+RNA sequences (and vice versa in DNA).
+
+The one-letter code for amino acids follows section 3AA-21 of the
+IUPAC recommendations \citep{IUPAC84}. The code is augmented by U for
+selenocysteine, as recommended in 1999 by the JCBN/NC-IUBMB Newsletter
+(\url{http://www.chem.qmul.ac.uk/iubmb/newsletter/1999/item3.html}).
+It is also augmented by O for pyrrolysine and J for a
+leucine/isoleucine ambiguity (from a mass spectrometry experiment),
+following usage in the RESID database
+(\url{http://www.ebi.ac.uk/RESID/}).
+
+
+\subsection{Degenerate residues}
+
+The symbols from \ccode{K+1..Kp-4} in the internal alphabet are all
+treated as degenerate residues.
+
+When creating a custom alphabet, each degenerate symbol is initialized
+by calling \ccode{esl\_alphabet\_SetDegeneracy(alphabet, c, syms)} to
+assign degenerate alphabetic symbol \ccode{c} to the alphabetic
+symbols in the string \ccode{syms}. For example,
+\ccode{esl\_alphabet\_SetDegeneracy(a, 'R', \"AG\")} assigns R
+(purine) to mean A or G.  For the standard biosequence alphabets, this
+is done automatically to define the proper degeneracy codes.
+
+For amino acid alphabets, the default code is:
+
+\begin{cchunk}  
+  esl_alphabet_SetDegeneracy(a, 'B', "ND");
+  esl_alphabet_SetDegeneracy(a, 'J', "IL");
+  esl_alphabet_SetDegeneracy(a, 'Z', "QE");
+\end{cchunk}
+
+For RNA alphabets, the default code is:
+
+\begin{cchunk}
+  esl_alphabet_SetDegeneracy(a, 'R', "AG");
+  esl_alphabet_SetDegeneracy(a, 'Y', "CU");
+  esl_alphabet_SetDegeneracy(a, 'M', "AC");
+  esl_alphabet_SetDegeneracy(a, 'K', "GU");
+  esl_alphabet_SetDegeneracy(a, 'S', "CG");
+  esl_alphabet_SetDegeneracy(a, 'W', "AU");
+  esl_alphabet_SetDegeneracy(a, 'H', "ACU");
+  esl_alphabet_SetDegeneracy(a, 'B', "CGU");
+  esl_alphabet_SetDegeneracy(a, 'V', "ACG");
+  esl_alphabet_SetDegeneracy(a, 'D', "AGU");  
+\end{cchunk}
+
+For DNA alphabets, the calls are is the same as for RNA code, but with
+\ccode{T} in place of \ccode{U}.
+
+
+\subsubsection{Implementation: the degeneracy map}
+
+The alphabet's degeneracy map is implemented in an array
+\ccode{a->degen[0..Kp-1][0..K-1]} of 1/0 (TRUE/FALSE) flags.
+\ccode{a->degen[x][y] == TRUE} indicates that the residue set $D(x)$
+for degeneracy code \ccode{x} contains base residue \ccode{y}.
+\ccode{a->ndegen[x]} contains the cardinality $|D(x)|$, how many base
+residues are represented by degeneracy code \ccode{x}.
+
+For the two kinds of gap symbols, the degeneracy map is empty; all
+flags are FALSE and the cardinality is 0.
+
+Because character \ccode{Kp-3} in the internal alphabet is
+automatically assumed to be an ``any'' character (such as 'N' for DNA
+or RNA, 'X' for protein), \ccode{a->degen[Kp-3][i] = 1} for all
+$i=0..K-1$, and \ccode{a->ndegen[Kp-3] = K}.
+
+The storage of the degeneracy map is a little wasteful. We really only
+need rows \ccode{a->degen[K+1..Kp-3]}, but optimizing this would
+create some index translation hassles, and it doesn't seem worth it.
+
+
+\subsection{Equivalent residues}
+
+The concept of equivalent residues allows an input symbol to be mapped
+to a different internal symbol.  One use of equivalence is to map both
+lower and upper case input to the same internal representation.
+Another use is to allow several different input characters to mean a
+gap. Another use is to silently accept and ``fix'' nonstandard but
+common input ``errors'', such as the use of T instead of U in RNA
+sequences (or vice versa in DNA), or the use of X instead of N as an
+ambiguity code in nucleic acid sequences.
+
+The call \ccode{esl\_alphabet\_SetEquiv(a, 'U', 'T')}, for example,
+makes an alphabet interpret \ccode{U} as a \ccode{T} (encoding both as
+\ccode{3}, in the case of the standard DNA and RNA alphabets).
+ 
+All three standard alphabets accept \ccode{\_} or \ccode{.}  symbols
+as equivalences for the standard gap symbol \ccode{-}. An application
+can define additional gap characters, such as \ccode{,}, by calling
+\ccode{esl\_alphabet\_SetSynonym(a, ',', '-')} on one of the standard
+alphabets to define additional equivalences (that is, you don't have
+to create a custom alphabet to add new equivalences).
+
+\ccode{esl\_alphabet\_SetCaseInsensitive()} maps both upper case and
+lower case input alphabetic characters map to their equivalent in the
+internal alphabet in a case-insensitive manner.  This function works
+only on residues that have already been declared to be part of the
+alphabet, so when defining a custom alphabet, it must be called after
+all individual equivalences have been defined. The standard alphabets
+are always set to be case insensitive.
+
+\subsubsection{Implementation of equivalent residues: the input map}
+
+Internally, an \textbf{input map}, \ccode{a->inmap[0..127]}, specifies
+how an input ASCII 7-bit text symbol is converted to digital
+code. \ccode{a->inmap['T'] = 3} in the standard DNA alphabet, for
+example, and the call \ccode{esl\_alphabet\_SetSynonym(a, 'U', 'T')}
+sets \ccode{a->inmap['U'] = a->inmap['T']}. 
+
+The elements in input maps are of type \ccode{unsigned char}. Legal
+values are 0..127 (values that can be cast to the \ccode{unsigned
+char} codes in a digitized sequence) and two additional flags with
+negative values, \ccode{eslILLEGAL\_CHAR} (255) and
+\ccode{eslIGNORED\_CHAR} (254).
+
+\subsection{Unusual or modified residues}
+
+In addition to the canonical 4 or 20 residues and their ambiguity
+codes, there are many unusual and/or modified residues. For instance,
+there are many posttranscriptional or posttranslational modifications
+on residues in RNAs and proteins. Some databases try to capture this
+information in a single-letter alphabetic code, such as the Sprinzl
+transfer RNA database \cite{Sprinzl98}. 
+
+Additionally, and perhaps more importantly, proteins are known to
+contain at least two additional genetically encoded amino acids,
+selenocysteine and pyrrolysine. Selenocysteine is represented by a
+\ccode{U} according to the IUPAC standard, and pyrrolysine is
+represented by a \ccode{O} in the RESID database at EBI.
+
+Unusual one-letter residue codes pose a tradeoff issue for sequence
+analysis applications. On the one hand, an application should
+recognize symbols for unusual or modified residues, and be able to
+represent them both internally and in any sequence output. For
+example, no application should read an input selenocysteine residue
+(\ccode{U}) and output it as a cysteine (\ccode{C}) -- this changes
+the original sequence and causes data corruption.\footnote{However, at
+least one the main public protein databases (UniProt) has already
+chosen to replace all selenocysteines with \ccode{C} and all
+pyrrolysines with \ccode{K}, for fear of breaking legacy sequence
+analysis software.  So, this data corruption is already a fact of
+life.}  On the other hand, most sequence analysis applications would
+not want to take the trouble to define a canonical alphabet larger
+than the usual 4 or 20 residues, and then have to parameterize that
+alphabet, just to be able to handle a few rare residues. (Pyrrolysine,
+for example, has only been found in a handful of proteins in a few
+Archaea.) It is useful to be able to deal with probability parameters
+and scores only for the canonical alphabet. However (on yet another
+hand!) in some cases one \emph{would} want to write a specialized
+application that parameterizes unusual residues as part of its
+canonical alphabet -- for instance, an application for analyzing
+posttranscriptional tRNA modifications, for example.
+
+Therefore, Easel must not force an input selenocysteine or pyrrolysine
+(or any other unusual residue) to be recoded as an arbitrary symbol
+(such as cysteine or lysine). That is, unusual symbols cannot be
+treated as equivalences, but must be allowed to be part of the
+internal alphabet.  However, Easel \emph{can} allow unusual symbols to
+be treated as noncanonical, and \emph{score} them as some other
+arbitrary residue, as a reasonable approximation. Thus for most
+purposes, unusual symbols are best handled as a special kind of
+degeneracy, with a one-to-one degeneracy map from the unusual symbol
+to the ``closest'' canonical residue.
+
+Therefore, the default amino acid alphabet accepts selenocysteine
+(\ccode{U}) and pyrrolysine symbols (\ccode{O}) and represents them in
+the internal alphabet, and maps them as ``degeneracies'' onto cysteine
+(\ccode{C}) and lysine (\ccode{K}), respectively.
+
+When that behavior is not suitable, an application can also define any
+custom alphabet it chooses, as described below.
+
+
+\subsection{Creating a custom alphabet}
+
+Figure~\ref{fig:alphabet_example2} shows an example of creating a
+customized 22-letter amino acid alphabet that includes the \ccode{U}
+selenocysteine code and the \ccode{O} pyrrolysine code.
+
+\begin{figure}
+\input{cexcerpts/alphabet_example2}
+\caption{An example of creating a custom alphabet.}
+\label{fig:alphabet_example2}
+\end{figure}
+
+
+
+\subsection{Scoring degenerate residues}
+
+To score a degenerate residue code $x$, Easel provides two strategies.
+One set of functions assigns an average score:
+
+\[
+  S(x) =  \frac{\sum_{y \in D(x)}  S(y) } { |D(x)| },
+\]
+
+where $D(x)$ is the set of residues $y$ represented by degeneracy code
+$x$ (for example, $D(\mbox{R}) = \{ \mbox{A,G} \}$), $| D(x) |$ is the
+number of residues that the degeneracy code includes, and $S(y)$ is
+the score of a base residue $y$. Because scores $S(y)$ are commonly
+kept as integers, floats, or doubles, depending on the application,
+three functions are provided that differ only in the storage type of
+the scores: \ccode{esl\_abc\_IAvgScore(a,x,sc)},
+\ccode{esl\_abc\_FAvgScore(a,x,sc)}, and
+\ccode{esl\_abc\_DAvgScore(a,x,sc)} calculate and return the average
+score of residue \ccode{x} in alphabet \ccode{a} given a base score
+vector \ccode{sc[0]..sc[K-1]} for integers, floats, and doubles,
+respectively.
+
+A second set of functions assigns an expected score, weighted by an
+expected occurrence probability $p_y$ of the residues $y$ (often the
+random background frequencies):
+
+\[
+  S(x) =  \frac{\sum_{y \in D(x)}  p_y S(y) } { \sum_{y \in D(x)} p_y },
+\]
+
+These three functions are \ccode{esl\_abc\_IExpectScore(a,x,sc,p)},
+\ccode{esl\_abc\_FExpectScore(a,x,sc,p)}, and
+\ccode{esl\_abc\_DExpectScore(a,x,sc,p)}.  For the integer and float
+versions, the probability vector is in floats; for the double version,
+the probability vector is in doubles.
+
+For efficiency reasons, an application might choose to preculate
+scores for all possible degenerate codes it might see. HMMER, for
+example, turns probability vectors of length \ccode{K} into score
+residues of length \ccode{Kp}.
+
+An application might also choose to score residues on-the-fly, using
+score vectors of length \ccode{K}. Each input residue \ccode{x} would
+then have to be tested to see if it is degenerate, before scoring it
+appropriately.  \ccode{esl\_abc\_IsBasic(a, x)} returns \ccode{TRUE}
+if \ccode{x} is in the basic set of \ccode{K} residues in alphabet
+\ccode{a}, and \ccode{FALSE} otherwise. Similarly,
+\ccode{esl\_abc\_IsGap(a,x)} tests whether $x$ is a gap, and
+\ccode{esl\_abc\_IsDegenerate(a,x)} tests whether $x$ is a degenerate
+residue.
+
diff --git a/esl_avx.c b/esl_avx.c
new file mode 100644
index 0000000..4b49d45
--- /dev/null
+++ b/esl_avx.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#ifdef HAVE_AVX2
+// This file is just a dummy target to make sure that the functions defined in esl_avx.h get included in the library version of hmmer
+#include <immintrin.h>		/* AVX2 */
+#include "esl_avx.h"
+
+#else /* ! HAVE_AVX2 */
+
+/* If we don't have AVX compiled in, provide some nothingness to:
+ *   a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" 
+ *   b. prevent compiler from bitching about "empty compilation unit"
+ *   c. automatically pass the automated tests.
+ */
+#include "easel.h"
+
+void esl_avx_DoAbsolutelyNothing(void) { return; }
+#if defined eslAVX_TESTDRIVE || eslAVX_EXAMPLE || eslAVX_BENCHMARK
+int main(void) { return 0; }
+#endif
+
+#endif /* HAVE_AVX or not*/
+
+
+
diff --git a/esl_avx.h b/esl_avx.h
new file mode 100644
index 0000000..dc3bdd8
--- /dev/null
+++ b/esl_avx.h
@@ -0,0 +1,107 @@
+
+/* Vectorized utility routines for Intel AVX instructions and 
+ * compatible processors.
+ *
+ * This header file, unusually, provides many complete function
+ * implementations; this is so that they can be inlined by the
+ * compiler, for maximum efficiency.
+ * 
+ * Contents:
+ *    1. Inlined horizontal functions for 8 and 16-bit quantities
+ *       in 256-bit vectors (__m256i)
+ */
+
+#ifndef eslAVX_INCLUDED
+#define eslAVX_INCLUDED
+
+#include "easel.h"
+
+#include <stdio.h>
+#include <xmmintrin.h>		/* SSE  */
+#include <emmintrin.h>		/* SSE2 */
+
+
+#ifdef HAVE_AVX2 // don't include on architectures that can't compile avx2
+/* Function:  esl_avx_hmax_epu8()
+ * Synopsis:  Return the unsigned max of the 32 elements in epu8 vector.
+ *
+ * Purpose:   Returns the maximum value of the 32 elements in
+ *            an <epu8> vector.
+ */
+static inline uint8_t
+esl_avx_hmax_epu8(__m256i a)
+{
+
+      __m256i temp1_AVX = _mm256_permute2x128_si256(a, a, 0x01);
+      // Swap the 128-bit halves from a into temp1
+
+      __m256i temp2_AVX = _mm256_max_epu8(temp1_AVX, a); // each 8-bit field in temp2_AVX now has the max of the
+      //corresponding fields in the high and low halves of a
+
+      temp1_AVX = _mm256_shuffle_epi32(temp2_AVX, 0x4e);  // Swap the 64-bit halves of each 128-bit half of a
+      temp2_AVX = _mm256_max_epu8(temp1_AVX, temp2_AVX);  // Each 64-bit quantity in temp2 now has the max of the corresponding
+      // 8-bit fields from the 64-bit quarters of a
+
+      temp1_AVX = _mm256_shuffle_epi32(temp2_AVX, 0xb1);  // Swap the 32-bit halves of each 64-bit quarter of temp2_AVX
+      temp2_AVX = _mm256_max_epu8(temp1_AVX, temp2_AVX);  // Each 32-bit quantity in temp2 now has the max of the corresponding
+      // 8 bit fields from the 32-bit eighths of a
+
+      temp1_AVX = _mm256_shufflelo_epi16(temp2_AVX, 0xb1); // bottom 32-bits of temp1_AVX now contain the swapped 16-bit halves
+      // of the low 32 bits of temp2_AVX
+      temp2_AVX = _mm256_max_epu8(temp1_AVX, temp2_AVX);  //bottom 16 bits of temp2_AVX now contain the max of the 16-bit fields of a
+
+      uint8_t temp_stash = _mm256_extract_epi8(temp2_AVX, 1);
+      temp1_AVX = _mm256_insert_epi8(temp2_AVX, temp_stash, 0);  // low byte of temp1_AVX now has byte 2 of temp2_AVX
+      temp2_AVX = _mm256_max_epu8(temp1_AVX, temp2_AVX);  //bottom 16 bits of temp2_AVX now contain the max of the 16-bit fields of Dmaxv_AVX
+      return(_mm256_extract_epi8(temp2_AVX, 0));  // get low byte of temp2_AVX
+}
+
+/* Function:  esl_avx_hmax_epi16()
+ * Synopsis:  Return the signed max of the 16 elements in epu8 vector.
+ *
+ * Purpose:   Returns the maximum value of the 32 elements in
+ *            an <epu8> vector.
+ */
+static inline uint16_t
+esl_avx_hmax_epi16(__m256i a)
+{
+
+      __m256i temp1_AVX = _mm256_permute2x128_si256(a, a, 0x01);
+      // Swap the 128-bit halves from a into temp1
+
+      __m256i temp2_AVX = _mm256_max_epi16(temp1_AVX, a); // each 8-bit field in temp2_AVX now has the max of the
+      //corresponding fields in the high and low halves of a
+
+      temp1_AVX = _mm256_shuffle_epi32(temp2_AVX, 0x4e);  // Swap the 64-bit halves of each 128-bit half of a
+      temp2_AVX = _mm256_max_epi16(temp1_AVX, temp2_AVX);  // Each 64-bit quantity in temp2 now has the max of the corresponding
+      // 8-bit fields from the 64-bit quarters of a
+
+      temp1_AVX = _mm256_shuffle_epi32(temp2_AVX, 0xb1);  // Swap the 32-bit halves of each 64-bit quarter of temp2_AVX
+      temp2_AVX = _mm256_max_epi16(temp1_AVX, temp2_AVX);  // Each 32-bit quantity in temp2 now has the max of the corresponding
+      // 8 bit fields from the 32-bit eighths of a
+
+      temp1_AVX = _mm256_shufflelo_epi16(temp2_AVX, 0xb1); // bottom 32-bits of temp1_AVX now contain the swapped 16-bit halves
+      // of the low 32 bits of temp2_AVX
+      temp2_AVX = _mm256_max_epi16(temp1_AVX, temp2_AVX);  //bottom 16 bits of temp2_AVX now contain the max of the 16-bit fields of a
+
+      return(_mm256_extract_epi16(temp2_AVX, 0));  // get low 16 bits of temp2_AVX
+}
+
+// shifts vector left by num_bytes bytes.  Assumes that num_bytes < 16, and will fail horribly if not.
+static inline __m256i esl_avx_leftshift(__m256i vector, int num_bytes){
+   register __m256i temp_mask_AVX = _mm256_permute2x128_si256(vector, vector, _MM_SHUFFLE(0,0,3,0) );
+   return(_mm256_alignr_epi8(vector, temp_mask_AVX,(16-num_bytes)));
+}
+
+#endif
+
+
+
+#endif /*eslAVX_INCLUDED*/
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_buffer.c b/esl_buffer.c
new file mode 100644
index 0000000..43bf861
--- /dev/null
+++ b/esl_buffer.c
@@ -0,0 +1,3227 @@
+/*::cexcerpt::header_example::begin::*/
+/* An input parsing abstraction.
+ *
+ * Table of contents:
+ *   1. ESL_BUFFER object: opening/closing.
+ *   2. Positioning and anchoring an ESL_BUFFER.
+ *   3. Raw access to the buffer.
+ *   4. Line-based parsing.
+ *   5. Token-based parsing.
+ *   6. Binary (fread-like) parsing.
+ *   7. Private (static) functions.
+ *   8. Benchmark.
+ *   9. Unit tests.
+ *  10. Test driver.
+ *  11. Examples.
+ *  12. Copyright and license.
+ */
+/*::cexcerpt::header_example::end::*/
+
+
+/*::cexcerpt::include_example::begin::*/
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef _POSIX_VERSION
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#endif /* _POSIX_VERSION */
+
+#include "easel.h"
+#include "esl_mem.h"
+#include "esl_buffer.h"
+/*::cexcerpt::include_example::end::*/
+
+
+
+/*::cexcerpt::statics_example::begin::*/
+static int buffer_create           (ESL_BUFFER **ret_bf);
+static int buffer_init_file_mmap   (ESL_BUFFER *bf, esl_pos_t filesize);
+static int buffer_init_file_slurped(ESL_BUFFER *bf, esl_pos_t filesize);
+static int buffer_init_file_basic  (ESL_BUFFER *bf);
+
+static int buffer_refill   (ESL_BUFFER *bf, esl_pos_t nmin);
+static int buffer_countline(ESL_BUFFER *bf, esl_pos_t *opt_nc, esl_pos_t *opt_nskip);
+static int buffer_skipsep  (ESL_BUFFER *bf, const char *sep);
+static int buffer_newline  (ESL_BUFFER *bf);
+static int buffer_counttok (ESL_BUFFER *bf, const char *sep, esl_pos_t *ret_nc);
+/*::cexcerpt::statics_example::end::*/
+
+
+
+/*****************************************************************
+ *# 1. ESL_BUFFER object: opening/closing.
+ *****************************************************************/
+
+/* Function:  esl_buffer_Open()
+ * Synopsis:  Standard Easel idiom for opening a stream by filename.
+ *
+ * Purpose:   Open <filename> for parsing. Return an open
+ *            <ESL_BUFFER> for it.
+ *            
+ *            The standard Easel idiom allows reading from standard
+ *            input (pass <filename> as '-'), allows reading gzip'ed
+ *            files automatically (any <filename> ending in <.gz> is
+ *            opened as a pipe from <gzip -dc>), and allows using an
+ *            environment variable to specify a colon-delimited list
+ *            of directories in which <filename> may be found. Normal
+ *            files are memory mapped (if <mmap()> is available) when
+ *            they are large, and slurped into memory if they are
+ *            small.
+ *
+ *            If <filename> is '-' (a single dash character), 
+ *            capture the standard input stream rather than 
+ *            opening a file; return <eslOK>.
+ *
+ *            Else, try to find <filename> in a directory <d>,
+ *            starting with the current working directory. If
+ *            <./filename> is found (note that <filename> may include
+ *            a relative path), directory <d> is <.>.  Else, if
+ *            <envvar> is non-<NULL>, check the environment variable
+ *            <envvar> for a colon-delimited list of directories, and
+ *            for each directory <d> in that list, try to find
+ *            <d/filename>. Use the first <d> that succeeds. If
+ *            none succeed, return <eslENOTFOUND>.
+ *            
+ *            Now open the file. If <filename> ends in <.gz>, 'open'
+ *            it by running <gzip -dc d/filename 2>/dev/null>,
+ *            capturing the standard output from gunzip decompression
+ *            in the <ESL_BUFFER>. Otherwise, open <d/filename> as a
+ *            normal file. If its size is not more than
+ *            <eslBUFFER_SLURPSIZE> (default 4 MB), it is slurped into
+ *            memory; else, if <mmap()> is available, it is memory
+ *            mapped; else, it is opened as a read-only binary stream
+ *            with <fopen()> in mode <"rb">.
+ *
+ * Args:      filename  - file to open for reading; or '-' for STDIN
+ *            envvar    - name of an environment variable in which to
+ *                        find a colon-delimited list of directories;
+ *                        or <NULL> if none.
+ *            ret_bf    - RETURN: new ESL_BUFFER            
+ *
+ * Returns:   <eslOK> on success; <*ret_bf> is the new <ESL_BUFFER>.
+ * 
+ *            <eslENOTFOUND> if file isn't found or isn't readable.
+ *            <eslFAIL> if gzip -dc fails on a .gz file, probably 
+ *            because a gzip executable isn't found in PATH. 
+ *            
+ *            On any normal error, <*ret_bf> is still returned,
+ *            in an unset state, with a user-directed error message
+ *            in <*ret_bf->errmsg>.
+ *            
+ * Throws:    <eslESYS> on system call failures (such as fread()).
+ *            <eslEMEM> on allocation failure.
+ *            Now <*ret_bf> is <NULL>.
+ */
+int
+esl_buffer_Open(const char *filename, const char *envvar, ESL_BUFFER **ret_bf)
+{
+  char *path = NULL;
+  int   n;
+  int   status;
+
+  /* "-" => stdin */
+  if (strcmp(filename, "-") == 0) 
+    return esl_buffer_OpenStream(stdin, ret_bf);  
+
+  /* else, a file. find its fully qualified path  */
+  if (esl_FileExists(filename))   /* look in current working directory */
+    { if ( (status = esl_strdup(filename, -1, &path)) != eslOK) { *ret_bf = NULL; goto ERROR; } }
+  else {   	       	          /* then search directory list in envvar, if any */
+    status = esl_FileEnvOpen(filename, envvar, NULL, &path); 
+    if      (status == eslENOTFOUND)  { esl_buffer_OpenFile(filename, ret_bf); goto ERROR; }
+    else if (status != eslOK)         { *ret_bf = NULL;                        goto ERROR; }
+    /* yeah, the esl_buffer_OpenFile() looks weird - we know the file's not there! -
+     * but it's a clean way to set our error return status properly, 
+     * recording the correct error message in a live ESL_BUFFER's bf->errmsg.
+     * note that esl_FileEnvOpen() correctly handles envvar==NULL,
+     * returning eslENOTFOUND.
+     */
+  }
+
+  n = strlen(path);
+  if (n > 3 && strcmp(filename+n-3, ".gz") == 0)   /* if .gz => gzip -dc */
+    { if ( (status = esl_buffer_OpenPipe(path, "gzip -dc %s 2>/dev/null", ret_bf)) != eslOK) goto ERROR; }
+  else
+    { if ( (status = esl_buffer_OpenFile(path, ret_bf)) != eslOK) goto ERROR; }
+
+  free(path);
+  return eslOK;
+
+ ERROR:
+  if (path) free(path);
+  return status;
+}
+
+/* Function:  esl_buffer_OpenFile()
+ * Synopsis:  Open a file.
+ *
+ * Purpose:   Open <filename> for reading. Return an open <ESL_BUFFER> in
+ *            <*ret_bf>.
+ *            
+ *            <filename> may be a relative path such as <subdir/foo>
+ *            or a full path such as </my/dir/foo>.
+ *            
+ *            On a POSIX-compliant system, large files are memory 
+ *            mapped, and small files are just slurped into memory.
+ *
+ *            On non-POSIX systems, the file is opened as a stream.
+ *            On a short initial read (if the file size is smaller than
+ *            the buffer page size), the file is considered to be
+ *            completely slurped.
+ *
+ * Args:      filename  - name of (or path to) file to open
+ *           *ret_bf    - RETURN: new ESL_BUFFER
+ *                        
+ * Returns:   <eslOK> on success; <*ret_bf> is new <ESL_BUFFER>.
+ *           
+ *            <eslENOTFOUND> if <filename> isn't found or isn't readable.
+ *           
+ *            On normal errors, a new <*ret_bf> is still returned, in
+ *            an unset state, with a user-directed error message in
+ *            <*ret_bf->errmsg>.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int 
+esl_buffer_OpenFile(const char *filename, ESL_BUFFER **ret_bf)
+{
+  ESL_BUFFER *bf = NULL;
+#ifdef _POSIX_VERSION
+  struct stat fileinfo;
+#endif
+  esl_pos_t   filesize = -1;
+  int         status;
+
+  if ((status = buffer_create(&bf)) != eslOK) goto ERROR;
+  
+  if ((bf->fp = fopen(filename, "rb")) == NULL) 
+    ESL_XFAIL(eslENOTFOUND, bf->errmsg, "couldn't open %s for reading", filename);  
+
+  if ((status = esl_strdup(filename, -1, &(bf->filename))) != eslOK) goto ERROR;
+
+  /* Try to use POSIX fstat() to get file size and optimal read size.
+   * Use filesize to decide whether to slurp, mmap, or read normally. 
+   * If we don't have fstat(), we'll just read normally, and pagesize
+   * will be the Easel default 4096 (set in buffer_create().)
+   */
+#ifdef _POSIX_VERSION
+  if (fstat(fileno(bf->fp), &fileinfo) == -1) ESL_XEXCEPTION(eslESYS, "fstat() failed");
+  filesize     = fileinfo.st_size;
+  bf->pagesize = fileinfo.st_blksize;
+  if (bf->pagesize < 512)     bf->pagesize = 512;      /* I feel paranoid about st_blksize range not being guaranteed to be sensible */
+  if (bf->pagesize > 4194304) bf->pagesize = 4194304;
+#endif  
+
+  if      (filesize != -1 && filesize <= eslBUFFER_SLURPSIZE)  
+    { if ((status = buffer_init_file_slurped(bf, filesize)) != eslOK) goto ERROR; }
+#ifdef _POSIX_VERSION
+  else if (filesize > eslBUFFER_SLURPSIZE) 
+    { if ((status = buffer_init_file_mmap(bf, filesize))    != eslOK) goto ERROR; }
+#endif
+  else
+    { if ((status = buffer_init_file_basic(bf))             != eslOK) goto ERROR; }
+
+  *ret_bf = bf;
+  return status;
+
+ ERROR:
+  if (status != eslENOTFOUND) { esl_buffer_Close(bf); bf = NULL; }
+  if (bf) {
+    if (bf->fp)       { fclose(bf->fp);     bf->fp       = NULL; }
+    if (bf->filename) { free(bf->filename); bf->filename = NULL; }
+    bf->pagesize = eslBUFFER_PAGESIZE;
+  }
+  *ret_bf = bf;
+  return status;
+}
+
+
+/* Function:  esl_buffer_OpenPipe()
+ * Synopsis:  Open a file through a command's stdout pipe (e.g. gunzip).
+ *
+ * Purpose:   Run the command <cmdfmt> on <filename> and capture its <stdout>
+ *            stream for parsing. Return the open <ESL_BUFFER> in
+ *            <*ret_bf>.
+ *            
+ *            <cmdfmt> has a restricted format; it is a <printf()>-style
+ *            format string with a single <%s>, where <filename> is to
+ *            be substituted. An example <cmdfmt> is "gzip -dc %s
+ *            2>/dev/null".
+ *            
+ *            <filename> is checked for existence and read permission
+ *            before a command line is constructed.
+
+ *            <filename> may be <NULL>. In this case, <cmdfmt> is
+ *            assumed to be be the complete command, and (obviously)
+ *            the diagnostic check for <filename>
+ *            existence/readability is skipped. This gives you some
+ *            ability to skip the restricted single-argument format of
+ *            <cmdfmt>.  If you need to do something fancier with a
+ *            pipe, you can always open and manage it yourself and use
+ *            <esl_buffer_OpenStream()>.
+ *            
+ *            <popen()> executes the command under </bin/sh>.
+ *            
+ *            The <stderr> stream of the command should almost
+ *            certainly be redirected (else it will appear on output
+ *            of your program). In general it should be discarded
+ *            to </dev/null>. One of the only signs of a command
+ *            failure is that the command produces a "short read", of
+ *            less than <bf->pagesize> (and often 0, on a complete
+ *            failure, if <stderr> has been discarded).  If <stderr>
+ *            is longer than the buffer's <pagesize>, we may not
+ *            accurately detect error conditions. If you must capture
+ *            <stderr> (for example with a <cmdfmt> like
+ *            "gzip -dc %s 2>&1") be aware that the parser may
+ *            see that output as "successful" execution, if it's long
+ *            enough.
+ *            
+ *            The reason to pass <cmdfmt> and <filename> separately is
+ *            to enable better error diagnostics. <popen()> itself
+ *            tends to "succeed" whether the command or the file exist
+ *            or not.  By having <filename>, we can check for its
+ *            existence/readability first.
+ *            
+ *            The reason that error checking <popen()> isn't entirely
+ *            straightforward is that we don't see the exit status of
+ *            the command until we <pclose()>. We can only <pclose()>
+ *            when we're done loading data from the file, and that
+ *            only happens here on a short initial read. If we do get
+ *            a short read, we <pclose()>, get and check the command's
+ *            exit status, and return the <ESL_BUFFER> in an
+ *            <eslBUFFER_ALLFILE> state with <bf->cmdline> set.
+ *
+ * Args:      filename - file name (or path) to plug into <cmdfmt>; or NULL 
+ *                       if <cmdfmt> is complete command already
+ *            cmdfmt   - command to execute (with /bin/sh) and capture
+ *                       stdout from.
+ *           *ret_bf   - RETURN: new ESL_BUFFER
+ *
+ * Returns:   <eslOK> on success, and <*ret_bf> is the new <ESL_BUFFER>.
+ * 
+ *            <eslENOTFOUND> if <filename> isn't found or isn't readable.
+ *
+ *            <eslFAIL> if the constructed command fails - which
+ *            usually means that the program isn't found or isn't
+ *            executable, or that the command returned nonzero
+ *            (quickly, i.e. with zero or little output and a 'short
+ *            read').
+ *            
+ *            On any normal error, the <*ret_bf> is returned (in an
+ *            <eslBUFFER_UNSET> state) and <bf->errmsg> contains a
+ *            user-directed error message.
+ *
+ * Throws:    <eslESYS> on <*sprintf()> or <fread()> failure.
+ *            <eslEMEM> on allocation failure.
+ *            
+ *            On any exception, <*ret_bf> is NULL.
+ */
+int
+esl_buffer_OpenPipe(const char *filename, const char *cmdfmt, ESL_BUFFER **ret_bf)
+{
+  ESL_BUFFER *bf  = NULL;
+  char       *cmd = NULL;
+  int         status;
+
+  if ((status = buffer_create(&bf)) != eslOK) goto ERROR;
+
+  if (filename && ! esl_FileExists(filename)) 
+    ESL_XFAIL(eslENOTFOUND, bf->errmsg, "couldn't read file %s", filename);
+
+  if (filename) { if ((status = esl_sprintf(&cmd, cmdfmt, filename)) != eslOK) goto ERROR; }
+  else          { if ((status = esl_strdup(cmdfmt, -1, &cmd))        != eslOK) goto ERROR; }
+
+  if ((bf->fp = popen(cmd, "r")) == NULL) 
+    ESL_XFAIL(eslENOTFOUND, bf->errmsg, "couldn't popen() the command: %s\n", cmd);
+
+  if (            (status = esl_strdup(cmd,      -1, &(bf->cmdline)))  != eslOK) goto ERROR;
+  if (filename && (status = esl_strdup(filename, -1, &(bf->filename))) != eslOK) goto ERROR;
+
+  ESL_ALLOC(bf->mem, sizeof(char) * bf->pagesize);
+  bf->balloc  = bf->pagesize;
+
+  bf->n = fread(bf->mem, sizeof(char), bf->pagesize, bf->fp);
+  /* Now check for various errors on a short read. A short read can mean:
+   *    - a small file; success, and we have the whole file in one page 
+   *    - popen() "succeeded" but the command failed
+   *    - an fread() failure
+   * Sort it out. The trick here is that we don't get the exit status
+   * of <cmd> until we pclose(). So (assuming it isn't fread() itself
+   * that failed) we take advantage of the fact that we can set the
+   * ESL_BUFFER to a eslBUFFER_ALLFILE state on a short initial read;
+   * pclose() and check command exit status. 
+   * This pretty much relies on what <stderr> from <cmd> looks like;
+   * it needs to either be redirected, or short enough to be a short read.
+   */   
+  if (bf->n < bf->pagesize) 
+    {
+      /* Delayed exception throwing. If popen() failed, ferror() may be set too; evaluate what happened to popen() first. */
+      status = (ferror(bf->fp) ? eslESYS : eslOK);
+      if (pclose(bf->fp) != 0) {
+	bf->fp = NULL;		/* error block is going to try to pclose() too */
+	ESL_XFAIL(eslFAIL, bf->errmsg, "pipe command '%s' did not succeed", cmd);
+      }
+      /* now deal with an fread() error. */
+      if (status != eslOK) ESL_XEXCEPTION(eslESYS, "fread() failed"); 
+      bf->fp      = NULL;
+      bf->balloc  = 0;
+      bf->mode_is = eslBUFFER_ALLFILE;
+    }
+  else
+    bf->mode_is = eslBUFFER_CMDPIPE;
+
+  free(cmd);
+  *ret_bf = bf;
+  return eslOK;
+
+ ERROR:
+  if (status != eslENOTFOUND && status != eslFAIL) { esl_buffer_Close(bf); bf = NULL; }
+  if (bf) {	/* restore state to UNSET; w/ error message in errmsg */
+    if (bf->mem)      { free(bf->mem);      bf->mem      = NULL; }
+    if (bf->fp)       { pclose(bf->fp);     bf->fp       = NULL; }
+    if (bf->filename) { free(bf->filename); bf->filename = NULL; }
+    if (bf->cmdline)  { free(bf->cmdline);  bf->cmdline  = NULL; }
+    bf->n      = 0;
+    bf->balloc = 0;
+  }
+  if (cmd) free(cmd);
+  *ret_bf = bf;
+  return status;
+  
+}
+
+/* Function:  esl_buffer_OpenMem()
+ * Synopsis:  "Open" an existing string for parsing.
+ *
+ * Purpose:   Given a buffer or string <p> of length <n>, turn it into
+ *            an <ESL_BUFFER>. Return the new buffer in <*ret_bf>.
+ *            
+ *            The memory for <p> is still managed by the caller. 
+ *            Caller should free it, if necessary, only after the 
+ *            <ESL_BUFFER> has been closed. 
+ *            
+ *            As a special case, if <n> is -1, <p> is assumed to be a
+ *            \verb+\0+-terminated string and its length is calculated with
+ *            <strlen()>.
+ *
+ * Args:      p      - ptr to buffer or string
+ *            n      - length of buffer/string <p>, in bytes
+ *            ret_bf - RETURN: new ESL_BUFFER
+ *
+ * Returns:   <eslOK> on success, and <*ret_bf> points to new buffer.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            On any exception, <*ret_bf> is <NULL>.
+ */
+int
+esl_buffer_OpenMem(const char *p, esl_pos_t n, ESL_BUFFER **ret_bf)
+{
+  ESL_BUFFER *bf = NULL;
+  int         status;
+
+  if ((status = buffer_create(&bf)) != eslOK) goto ERROR;
+
+  bf->mem     = (char *) p;	/* force discard of const qualifier; this is ok; mem won't be altered in eslBUFFER_STRING mode */
+  bf->n       = (n == -1) ? strlen(p) : n;
+  bf->mode_is = eslBUFFER_STRING;
+
+  *ret_bf = bf;
+  return eslOK;
+
+ ERROR:
+  if (bf) { /* on error, restore to UNSET state */				
+    bf->mem     = NULL;
+    bf->n       = 0;
+    bf->mode_is = eslBUFFER_UNSET;
+  }
+  *ret_bf = bf;
+  return status;
+}
+
+
+/* Function:  esl_buffer_OpenStream()
+ * Synopsis:  "Open" an existing stream for parsing.
+ *
+ * Purpose:   Given an open stream <fp> for reading, create an
+ *            <ESL_BUFFER> around it.
+ *            
+ *            <fp> is often <stdin>, for example.
+ *            
+ *            The caller remains responsible for closing <fp>, if it
+ *            opened it. 
+ * 
+ * Args:      fp     - stream to associate with new ESL_BUFFER
+ *           *ret_bf - RETURN: new ESL_BUFFER.
+ *
+ * Returns:   <eslOK> on success, and <*ret_bf> points to a new <ESL_BUFFER>.
+ *
+ * Throws:    <eslEINVAL>: <fp> is NULL, in error state, or already at eof before any reading occurs.
+ *            <eslESYS> : fread() failed
+ *            <eslEMEM> : an allocation failed
+ */
+int 
+esl_buffer_OpenStream(FILE *fp, ESL_BUFFER **ret_bf)
+{
+  ESL_BUFFER *bf = NULL;
+  int         status;
+
+  if ((status = buffer_create(&bf)) != eslOK) goto ERROR;
+  bf->mode_is = eslBUFFER_STREAM;
+
+  if (fp == NULL || ferror(fp) || feof(fp)) ESL_XEXCEPTION(eslEINVAL, "invalid stream");
+  bf->fp = fp;			/* a copy of <fp>; caller is still responsible for it  */
+
+  ESL_ALLOC(bf->mem, sizeof(char) * bf->pagesize);
+  bf->balloc  = bf->pagesize;
+
+  bf->n       = fread(bf->mem, sizeof(char), bf->pagesize, bf->fp);
+  if (bf->n < bf->pagesize && ferror(bf->fp))
+    ESL_XEXCEPTION(eslESYS, "failed to read first chunk of stream");
+
+  *ret_bf = bf;
+  return eslOK;
+
+ ERROR:
+  esl_buffer_Close(bf);
+  *ret_bf = NULL;
+  return status;
+}
+
+/* Function:  esl_buffer_Close()
+ * Synopsis:  Close an input buffer.
+ * Incept:    SRE, Mon Feb 14 09:09:04 2011 [Janelia]
+ *
+ * Purpose:   Close the input buffer <bf>, freeing all resources that it
+ *            was responsible for.
+ *
+ * Args:      bf  - the input buffer
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslESYS> on a system call failure such as <munmap()>, <pclose()>, or <fclose()>.
+ *
+ * Note:      error handling here departs from usual idiom, because we try to tolerate errors
+ *            and continue free'ing resources; only at the end do we return a failure code, if
+ *            something went awry.
+ */
+int
+esl_buffer_Close(ESL_BUFFER *bf)
+{
+  if (bf) 
+    {
+      if (bf->mem) 
+	{
+	  switch (bf->mode_is) {
+	  case eslBUFFER_MMAP:   if (munmap(bf->mem, bf->n) == -1) ESL_EXCEPTION(eslESYS, "munmap() failed"); break;
+	  case eslBUFFER_STRING: break; /* caller provided and remains responsible for an input memory buffer */
+	  default:               free(bf->mem);
+	  }
+	}	
+
+      if (bf->fp)
+	{
+	  switch (bf->mode_is) {
+	  case eslBUFFER_CMDPIPE: if (pclose(bf->fp) == -1) ESL_EXCEPTION(eslESYS, "pclose() failed"); break;
+	  case eslBUFFER_STREAM:  break; /* caller provided and remains responsible for an open stream */
+	  default:                if (fclose(bf->fp) == -1) ESL_EXCEPTION(eslESYS, "fclose() failed"); break;
+	  }
+	}
+
+      if (bf->filename) free(bf->filename);
+      if (bf->cmdline)  free(bf->cmdline);
+      free(bf);
+    }
+  return eslOK;
+}
+/*--------------- end, ESL_BUFFER open/close --------------------*/
+
+
+
+
+
+/*****************************************************************
+ *# 2. Positioning and anchoring an ESL_BUFFER
+ *****************************************************************/
+
+/* Function:  esl_buffer_GetOffset()
+ * Synopsis:  Get the current position of parser in input buffer.
+ *
+ * Purpose:   Returns the current offset position of the parser
+ *            in the input buffer: <bf->baseoffset + bf->pos>.
+ */
+esl_pos_t
+esl_buffer_GetOffset(ESL_BUFFER *bf)
+{
+  return bf->baseoffset + bf->pos;
+}
+
+/* Function:  esl_buffer_SetOffset()
+ * Synopsis:  Reposition the input buffer to a new place.
+ * Incept:    SRE, Mon Jan 31 13:14:09 2011 [Janelia]
+ *
+ * Purpose:   Set the buffer's internal state (<bf->pos>) to position
+ *            <offset> in the input. Load new data into the buffer if
+ *            necessary.
+ * 
+ *            In modes where <bf->mem> contains the whole input
+ *            (ALLFILE, MMAP, STRING), this always works.
+ *             
+ *            In modes where we're reading a
+ *            nonrewindable/nonpositionable stream (STREAM, CMDPIPE),
+ *            <offset> may be at or ahead of the current position, but
+ *            rewinding to an offset behind the current position only
+ *            works if <offset> is within the current buffer
+ *            window. If the caller knows it wants to return to some
+ *            <offset> later, it should set an anchor to make sure it
+ *            stays in the buffer. New data may need to be read into
+ *            <bf->mem> to assure <pagesize> bytes are available. If
+ *            an anchor is set, this may require reoffset and/or
+ *            reallocation of <bf->mem>.
+ * 
+ *            FILE mode is handled as above, but additionally, if no
+ *            anchor is set and <offset> is not in the current buffer,
+ *            <fseeko()> is used to reposition in the open file. If
+ *            <fseeko()> is unavailable (non-POSIX compliant systems),
+ *            FILE mode is handled like other streams, with limited
+ *            rewind ability.
+ *
+ * Args:      bf     - input buffer being manipulated
+ *            offset - new position in the input
+ *                 
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <offset> is invalid, either because it 
+ *               would require rewinding the (nonrewindable) stream, 
+ *               or because it's beyond the end.
+ *            <eslESYS> if a system call fails, such as fread().
+ *            <eslEMEM> on allocation failure.
+ *            <eslEINCONCEIVABLE> if <bf> internal state is corrupt.
+ */
+int
+esl_buffer_SetOffset(ESL_BUFFER *bf, esl_pos_t offset)
+{
+  int status;
+
+  /* Case 1. We have the entire file in bf->mem (or an mmap of it);
+   *         Then this is trivial; we just set bf->pos.
+   */
+  if (bf->mode_is == eslBUFFER_ALLFILE ||
+      bf->mode_is == eslBUFFER_MMAP    || 
+      bf->mode_is == eslBUFFER_STRING)
+    {
+      bf->baseoffset = 0;  	/* (redundant: just to assure you that state is correctly set) */
+      bf->pos        = offset;
+    }
+
+  /* Case 2. We have an open stream.
+   *    Then:
+   *     - if offset is behind us, and in our current buffer window,
+   *       rewind is always possible and trivial: set bf->pos; or 
+   *     - if we're a FILE, and we're on a POSIX system with fseeko(),
+   *       and there's no anchor set -- then we can fseeko() to the
+   *       desired offset (no matter where it is) and 
+   *       reinitialize the buffer; or
+   *     - otherwise rewinding a stream is not possible, generating
+   *       an <eslEINVAL> error; or
+   *     - finally, the remaining possibility is that the offset is
+   *       ahead of (or at) the current parser position; fread()
+   *       (respecting any set anchor) until <offset> is in the
+   *       current buffer window, put bf->pos on it, and call
+   *       buffer_refill() to be sure that we either have at least
+   *       <bf->pagesize> bytes to parse (inclusive of current pos)
+   *       or the stream reaches EOF.
+   */
+  else if (bf->mode_is == eslBUFFER_STREAM  ||
+	   bf->mode_is == eslBUFFER_CMDPIPE ||
+	   bf->mode_is == eslBUFFER_FILE)
+    {
+      if (offset >= bf->baseoffset && offset < bf->baseoffset + bf->pos) /* offset is in our current window and behind our current pos; rewind is trivial */
+	{
+	  bf->pos = offset-bf->baseoffset;
+	}
+
+#ifdef _POSIX_VERSION
+      else if (bf->mode_is == eslBUFFER_FILE && bf->anchor == -1)
+	{			/* a posix-compliant system can always fseeko() on a file */
+	  if (fseeko(bf->fp, offset, SEEK_SET) != 0) ESL_EXCEPTION(eslEINVAL, "fseeko() failed, probably bad offset");
+	  bf->baseoffset = offset;
+	  bf->n          = 0;
+	  bf->pos        = 0;
+	  status = buffer_refill(bf, 0);
+	  if      (status == eslEOF) ESL_EXCEPTION(eslEINVAL, "requested offset is beyond end of file");
+	  else if (status != eslOK)  return status;
+	}
+#endif /*_POSIX_VERSION*/
+
+      else if (offset < bf->baseoffset)                /* we've already streamed past the requested offset. */
+	ESL_EXCEPTION(eslEINVAL, "can't rewind stream past base offset"); 
+
+      else  /* offset is ahead of pos (or on it); fast forward, put bf->pos on it, reloading bf->mem as needed, respecting any anchors */
+	{
+	  while (offset >= bf->baseoffset + bf->n)
+	    {
+	      bf->pos = bf->n;
+	      status  = buffer_refill(bf, 0);
+	      if      (status == eslEOF) ESL_EXCEPTION(eslEINVAL, "requested offset is beyond end of stream");
+	      else if (status != eslOK)  return status;
+	    }
+	  bf->pos = offset - bf->baseoffset;
+	  status  = buffer_refill(bf, 0);
+	  if (status != eslEOF && status != eslOK) return status;
+	}
+    }
+      
+  else ESL_EXCEPTION(eslEINCONCEIVABLE, "attempting to manipulate an uninitialized buffer");
+
+  return eslOK;
+}
+
+
+
+/* Function:  esl_buffer_SetAnchor()
+ * Synopsis:  Sets an anchor in an input stream.
+ *
+ * Purpose:   Set an anchor at byte <offset> (in input coords) in
+ *            input <bf>: which means, keep everything from this byte
+ *            on in buffer memory, until anchor is raised.
+ *            
+ *            The presence of an anchor affects new reads from <fp>;
+ *            <mem[r..n-1]> are protected from overwrite, and may be
+ *            moved to <mem[0..n-r-1]> as new data is read from the
+ *            stream.  Anchors are only needed for input streams that
+ *            we read chunkwise.  If entire input is already in <bf>,
+ *            setting an anchor is a no-op.
+ *            
+ *            In general, the caller should remember what anchor(s) it
+ *            sets, so it can raise them later with
+ *            <esl_buffer_RaiseAnchor()>.
+ * 
+ *            Byte <offset> must be in the current buffer window. If
+ *            not, an <eslEINVAL> exception is thrown.
+ * 
+ *            Only one anchor is active at a time. If an anchor is
+ *            already set for <bf>, the most upstream one is used.
+ *
+ * Args:      bf     - input buffer
+ *            offset - absolute position in input, <0..inputlen-1>
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <offset> is not in current buffer window.
+ */
+int
+esl_buffer_SetAnchor(ESL_BUFFER *bf, esl_pos_t offset)
+{
+  if (! bf->fp) return eslOK;	/* without an open stream, no-op */
+  if (offset < bf->baseoffset || offset > bf->baseoffset + bf->n)
+    ESL_EXCEPTION(eslEINVAL, "can't set an anchor outside current buffer");
+
+  if (bf->anchor == -1  || offset-bf->baseoffset < bf->anchor)
+    {   /* setting a new anchor */
+      bf->anchor  = offset-bf->baseoffset;
+      bf->nanchor = 1;
+    }
+  else if (offset-bf->baseoffset == bf->anchor) 
+    { /* reinforcing an anchor */
+      bf->nanchor++;
+    }
+
+  return eslOK;
+}
+
+/* Function:  esl_buffer_SetStableAnchor()
+ * Synopsis:  Set a stable anchor.
+ *
+ * Purpose:   Same as <esl_buffer_SetAnchor()>, except the anchor is
+ *            such that all pointers returned by <_Get*()> functions
+ *            (i.e. as opposed to just the last <_Get*> function)
+ *            will remain valid at least until the anchor is raised.
+ *
+ *            The main use of this is when the caller wants to get
+ *            multiple lines or tokens in the input before parsing 
+ *            them. 
+ *
+ *            A stable anchor prevents buffer refills/reloads from
+ *            moving the internal memory around while the anchor is
+ *            in place.
+ *
+ * Args:      bf     - input buffer
+ *            offset - absolute position in input, <0..inputlen-1>
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <offset> is not in current buffer window.
+ * 
+ * Notes:     We make a special call for stable anchors, as opposed
+ *            to most anchors, because the <memmove()> call here
+ *            to rebaseline the buffer's <mem> is expensive.
+ */
+int 
+esl_buffer_SetStableAnchor(ESL_BUFFER *bf, esl_pos_t offset)
+{
+  esl_pos_t ndel;
+  int       status;
+
+  if (! bf->fp) return eslOK;	/* without an open stream, no-op: everything is available */
+
+  if ( (status = esl_buffer_SetAnchor(bf, offset)) != eslOK) return status;
+
+  ndel       = bf->anchor;
+  bf->anchor = 0;
+  bf->n     -= ndel;
+  bf->pos   -= ndel;
+  if (bf->n) memmove(bf->mem, bf->mem+ndel, bf->n);
+  bf->baseoffset += ndel;
+  return eslOK;
+}
+
+
+/* Function:  esl_buffer_RaiseAnchor()
+ * Synopsis:  Raise an anchor.
+ *
+ * Purpose:   Declare that an anchor previously set at <offset>
+ *            in buffer <bf> may be raised. 
+ *            
+ *            <offset> is in absolute input coordinates (<0..len-1> for
+ *            an input of length <len>). Because it's supposed to be
+ *            anchored, this position ought to be in the current
+ *            buffer window. If an anchor is in effect in <bf>, 
+ *            <offset> should be at or distal to that anchor.
+ *
+ * Args:      bf      - input buffer
+ *            offset  - absolute position in input, <0..len-1>
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <offset> is outside current buffer window,
+ *            or if it is proximal to the active anchor in <bf>.
+ */
+int
+esl_buffer_RaiseAnchor(ESL_BUFFER *bf, esl_pos_t offset)
+{
+  if (offset < bf->baseoffset || offset > bf->baseoffset + bf->n)
+    ESL_EXCEPTION(eslEINVAL, "anchor is outside current buffer window? can't happen.");
+  if (bf->anchor > offset - bf->baseoffset)
+    ESL_EXCEPTION(eslEINVAL, "anchor is proximal to current active anchor");
+
+  if (bf->anchor ==  offset - bf->baseoffset) {
+    bf->nanchor--;
+    if (bf->nanchor == 0) bf->anchor = -1;
+  }
+  return eslOK;
+}
+/*--------------- end, ESL_BUFFER manipulation ------------------*/
+
+
+
+
+/*****************************************************************
+ *# 3. Raw access to the buffer
+ *****************************************************************/
+
+/* Function:  esl_buffer_Get()
+ * Synopsis:  Get a pointer into the current buffer window.
+ * Incept:    SRE, Mon Jan 31 20:45:22 2011 [Casa de Gatos]
+ *
+ * Purpose:   Given a buffer <bf>, return a pointer to the current
+ *            parsing position in <*ret_p>, and the number of valid
+ *            bytes from that position in <*ret_n>.
+ *            
+ *            If buffer is at EOF (no valid bytes remain), returns
+ *            <eslEOF> with <NULL> in <*ret_p> and 0 in <*ret_n>.
+ *            
+ *            The buffer's parsing position <bf->pos> is NOT 
+ *            changed. Another <Get()> call will return exactly
+ *            the same <p> and <n>. Each <Get()> call is generally
+ *            followed by a <Set()> call. It's the <Set()> call
+ *            that moves <bf->pos> and refills the buffer.
+ *            
+ *            Assumes that the buffer <bf> is correctly loaded,
+ *            with either at least <pagesize> bytes after the 
+ *            parser position, or near/at EOF.
+ *
+ * Args:      bf    - buffer to get ptr from
+ *            ret_p - RETURN: pointer to current parser position, or NULL on EOF
+ *            ret_n - RETURN: number of valid bytes at *ret_p, or 0 on EOF
+ *
+ * Returns:   <eslOK> on success;
+ *            <eslEOF> if no valid bytes remain in the input, or if
+ *               <*ret_n> is less than <nrequest>. 
+ *
+ * Throws:    <eslEMEM> on allocation failure. 
+ *            <eslESYS> if fread() fails mysteriously.
+ *            <eslEINCONCEIVABLE> if internal state of <bf> is corrupt.
+ */
+int
+esl_buffer_Get(ESL_BUFFER *bf, char **ret_p, esl_pos_t *ret_n)
+{
+  *ret_p = (bf->pos < bf->n ? bf->mem + bf->pos : NULL);
+  *ret_n = (bf->pos < bf->n ? bf->n - bf->pos   : 0);
+  return   (bf->pos < bf->n ? eslOK             : eslEOF);
+}
+
+/* Function:  esl_buffer_Set()
+ * Synopsis:  Set position and correct state of the <ESL_BUFFER>.
+ * Incept:    SRE, Sun Jan  2 11:56:00 2011 [Zaragoza]
+ *
+ * Purpose:   Reset the state of buffer <bf>: we were recently
+ *            given a pointer <p> by an <esl_buffer_Get()> call
+ *            and we parsed <nused> bytes starting at <p[0]>. 
+ *            
+ *            <bf->pos> is set to point at <p+nused>, and we
+ *            reload the buffer (if necessary) to try to have at
+ *            least <bf->pagesize> bytes of input following that
+ *            position.
+ *            
+ *            One use is in raw parsing, where we stop parsing
+ *            somewhere in the buffer:
+ *               \begin{cchunk}
+ *               esl_buffer_Get(bf, &p, &n);
+ *                 (do some stuff on p[0..n-1], using up <nused> bytes)
+ *               esl_buffer_Set(bf, p, nused);
+ *               \end{cchunk}
+ *            This includes the case of nused=n, where we parse the
+ *            whole buffer that Get() gave us, and the Set() call may
+ *            be needed to load new input data before the next Get().
+ *            
+ *            Another use is an idiom for peeking at a token, line, or
+ *            a number of bytes without moving the parser position:
+ *              \begin{cchunk}
+ *              esl_buffer_GetLine(bf, &p, &n);
+ *                (do we like what we see in p[0..n-1]? no? then put it back)
+ *              esl_buffer_Set(bf, p, 0);
+ *              \end{cchunk}
+ *              
+ *            Because it is responsible for loading new input as
+ *            needed, Set() may reoffset and reallocate <mem>. If the
+ *            caller wants an anchor respected, it must make sure that
+ *            anchor is still in effect; i.e., a caller that is
+ *            restoring state to an <ESL_BUFFER> should call Set()
+ *            BEFORE calling RaiseAnchor().
+ * 
+ *            As a special case, if <p> is NULL, then <nused> is
+ *            ignored, <bf->pos> is left whereever it was, and the
+ *            only thing the <Set()> attempts to do is to fulfill the
+ *            pagesize guarantee from the current position. If a
+ *            <NULL> <p> has been returned by a Get*() call because we
+ *            reached EOF, for example in some parsing loop that the
+ *            EOF has broken us out of, it is safe to call
+ *            <esl_buffer_Set(bf, NULL, 0)>: this is a no-op on a
+ *            buffer that is at EOF.
+ *
+ * Args:      bf    - buffer to set 
+ *            p     - pointer that previous Get() gave us
+ *            nused - number of bytes we used, starting at p[0]
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure. 
+ *            <eslESYS> if fread() fails mysteriously.
+ *            <eslEINCONCEIVABLE> if internal state of <bf> is corrupt.
+ */
+int
+esl_buffer_Set(ESL_BUFFER *bf, char *p, esl_pos_t nused)
+{
+  int status;
+  if (p) bf->pos = (p - bf->mem) + nused;
+  status = buffer_refill(bf, 0);
+  if (status == eslOK || status == eslEOF) return eslOK; 
+  else return status;
+}
+/*----------------- end, lowest level access --------------------*/
+
+
+
+
+/*****************************************************************
+ *# 4. Line-based parsing
+ *****************************************************************/
+
+/* Function:  esl_buffer_GetLine()
+ * Synopsis:  Get ptr to next line in buffer.
+ *
+ * Purpose:   Get a pointer <*opt_p> to the next line in buffer <bf>,
+ *            and the length of the line in <*opt_n> (in bytes, and
+ *            exclusive of newline bytes). Advance buffer position
+ *            past (one) newline, putting it on the next valid data
+ *            byte. Thus <p[0..n-1]> is one data line. It is not
+ *            NUL-terminated.
+ *            
+ *            <bf>'s buffer may be re(al)located as needed, to get
+ *            the whole line into the current window.
+ *            
+ *            Because the caller only gets a pointer into <bf>'s 
+ *            internal state, no other <esl_buffer> functions 
+ *            should be called until the caller is done with <p>.
+ *            
+ *            To peek at next line, use Set to restore <bf>'s state:
+ *            \begin{cchunk}
+ *               esl_buffer_GetLine(bf, &p, &n);
+ *               esl_buffer_Set(bf, p, 0);           
+ *            \end{cchunk}
+ *            
+ * Args:      bf    - buffer to get line from
+ *           *opt_p - optRETURN: pointer to next line
+ *           *opt_n - optRETURN: line length, exclusive of newline.
+ *
+ * Returns:   <eslOK> on success.  <*opt_p> is a valid pointer into <bf>'s buffer,
+ *            and <*opt_n> is >=0. (0 would be an empty line.)
+ *
+ *            <eslEOF> if there's no line (even blank).
+ *            On EOF, <*opt_p> is NULL and <*opt_n> is 0.
+ *
+ * Throws:    <eslEMEM> if allocation fails.
+ *            <eslESYS> if a system call such as fread() fails unexpectedly
+ *            <eslEINCONCEIVABLE> if <bf> internal state is corrupt.
+ */
+int
+esl_buffer_GetLine(ESL_BUFFER *bf, char **opt_p, esl_pos_t *opt_n)
+{
+  int       anch_set = FALSE;
+  esl_pos_t nc, nskip;
+  esl_pos_t anch;
+  int       status;
+
+  /* The next line starts at offset <baseoffset + pos> */
+  anch = bf->baseoffset + bf->pos;
+  status = esl_buffer_SetAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } /* we know bf->pos is in current window */
+  else if (status != eslOK)     { goto ERROR; }
+  anch_set = TRUE;
+
+  if ( (status = buffer_countline(bf, &nc, &nskip)) != eslOK) goto ERROR;  /* includes normal EOF. */
+
+  status = buffer_refill(bf, nskip);
+  if (status != eslEOF && status != eslOK) goto ERROR; /* accept EOF here, we've already got our line */
+  
+  anch_set = FALSE;
+  status = esl_buffer_RaiseAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } /* we know bf->pos is in current window */
+  else if (status != eslOK)     { goto ERROR; }
+  if (opt_p) *opt_p = bf->mem + bf->pos;
+  if (opt_n) *opt_n = nc;
+  bf->pos += nskip;
+  return eslOK;
+
+ ERROR:
+  if (anch_set) esl_buffer_RaiseAnchor(bf, anch);
+  if (opt_p)   *opt_p = NULL;
+  if (opt_n)   *opt_n = 0;
+  return status;
+}
+
+/* Function:  esl_buffer_FetchLine()
+ * Synopsis:  Fetch next line from a buffer.
+ * Incept:    SRE, Tue Feb  1 15:37:34 2011 [Janelia]
+ *
+ * Purpose:   Get the next line from the buffer <bf>, starting from its
+ *            current position.  Return an allocated copy of it in
+ *            <*opt_p>, and its length in bytes in <*opt_n>.  Advance
+ *            the buffer position past (one) newline, putting it on
+ *            the next valid byte. The last line in a file does not
+ *            need to be terminated by a newline. The returned memory is not
+ *            NUL-terminated.
+ *            
+ *            If the next line is empty (solely a newline character),
+ *            returns <eslOK>, but with <*opt_p> as <NULL> and
+ *            <*opt_n> as 0.
+ *            
+ *            Caller is responsible for free'ing <*opt_p>. 
+ *            
+ *            Because <*ret_p> is a copy of <bf>'s internal buffer,
+ *            caller may continue to manipulate <bf>, unlike
+ *            <esl_buffer_GetLine()>.
+ *            
+ * Args:      bf      - buffer to get line from
+ *            *opt_p  - optRETURN: pointer to allocated copy of next line
+ *            *opt_n  - optRETURN: length of <*opt_p>
+ *
+ * Returns:   <eslOK> on success.  Either <*opt_p> is an allocated copy
+ *            of next line and <*opt_n> is $>0$, or <*opt_p> is <NULL>
+ *            and <*opt_n> is 0 (in the case where the line is empty, 
+ 8            immediately terminated by newline, such as \verb+"\n"+.).
+ *
+ *            <eslEOF> if there's no line (even blank).
+ *            On EOF, <*opt_p> is NULL and <*opt_n> is 0.
+ *
+ * Throws:    <eslEMEM> if allocation fails.
+ *            <eslESYS> if a system call such as fread() fails unexpectedly
+ *            <eslEINCONCEIVABLE> if <bf> internal state is corrupt.
+ */
+int 
+esl_buffer_FetchLine(ESL_BUFFER *bf, char **opt_p, esl_pos_t *opt_n)
+{
+  int       anch_set = FALSE;
+  char     *p        = NULL;
+  esl_pos_t anch;
+  esl_pos_t nc, nskip;
+  int       status;
+
+  anch = bf->baseoffset + bf->pos;
+  status = esl_buffer_SetAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } /* we know bf->pos is in current window */
+  else if (status != eslOK)     { goto ERROR; }
+  anch_set = TRUE;
+
+  if ( (status = buffer_countline(bf, &nc, &nskip)) != eslOK) goto ERROR; /* inc. normal EOF */
+  
+  if (nc) { /* nc==0 on an empty line - then <*opt_p> comes back NULL */ 
+    ESL_ALLOC(p, sizeof(char) * nc);
+    memcpy(p, bf->mem+bf->pos, nc);
+  }
+  bf->pos += nskip;
+
+  anch_set = FALSE;
+  status = esl_buffer_RaiseAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } 
+  else if (status != eslOK)     { goto ERROR; }
+
+  status = buffer_refill(bf, 0);
+  if (status != eslEOF && status != eslOK) goto ERROR; /* accept EOF here, we've already got our line */
+
+  if (opt_p) *opt_p = p; else free(p);
+  if (opt_n) *opt_n = nc;
+  return eslOK;
+
+ ERROR:
+  if (anch_set) esl_buffer_RaiseAnchor(bf, anch);
+  if (p)        free(p);
+  if (opt_p)    *opt_p = NULL;
+  if (opt_n)    *opt_n = 0;
+  return status;
+}
+
+/* Function:  esl_buffer_FetchLineAsStr()
+ * Synopsis:  Fetch next line from buffer, and NUL-terminate it.
+ * Incept:    SRE, Thu Feb 10 09:22:47 2011 [Janelia]
+ *
+ * Purpose:   Same as <esl_buffer_FetchLine()> except the
+ *            returned line is <NUL>-terminated and can be treated
+ *            as a string.
+ *
+ * Args:      bf    - input buffer
+ *           *opt_s - optRETURN: pointer to allocated copy of next line
+ *           *opt_n - optRETURN: strlen() of <*opt_s>
+ *
+ * Returns:   <eslOK> on success.  <*opt_p> is an allocated copy
+ *            of next line and <*opt_n> is >=0. (0 would be an empty line
+ *            terminated by newline, such as \verb+\n+.)
+ *
+ *            <eslEOF> if there's no line (even blank).
+ *            On EOF, <*opt_p> is NULL and <*opt_n> is 0.
+ *
+ * Throws:    <eslEMEM> if allocation fails.
+ *            <eslEINVAL> if an anchoring attempt is invalid
+ *            <eslESYS> if a system call such as fread() fails unexpectedly
+ *            <eslEINCONCEIVABLE> if <bf> internal state is corrupt.
+ */
+int 
+esl_buffer_FetchLineAsStr(ESL_BUFFER *bf, char **opt_s, esl_pos_t *opt_n)
+{
+  int       anch_set = FALSE;
+  char     *s        = NULL;
+  esl_pos_t anch;
+  esl_pos_t nc, nskip;
+  int       status;
+	  
+  anch = bf->baseoffset + bf->pos;
+  status = esl_buffer_SetAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } /* we know bf->pos is in current window */
+  else if (status != eslOK)     { goto ERROR; }
+  anch_set = TRUE;
+
+  if ( (status = buffer_countline(bf, &nc, &nskip)) != eslOK) goto ERROR; /* inc normal EOF */
+
+  ESL_ALLOC(s, sizeof(char) * (nc+1));
+  memcpy(s, bf->mem+bf->pos, nc);
+  s[nc] = '\0';
+  bf->pos += nskip;
+
+  anch_set = FALSE;
+  status = esl_buffer_RaiseAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } 
+  else if (status != eslOK)     { goto ERROR; }
+
+  status = buffer_refill(bf, 0);
+  if (status != eslEOF && status != eslOK) goto ERROR; /* accept EOF here, we've already got our line */
+
+  if (opt_s) *opt_s = s; else free(s);
+  if (opt_n) *opt_n = nc;
+  return eslOK;
+
+ ERROR:
+  if (anch_set) esl_buffer_RaiseAnchor(bf, anch);
+  if (s)        free(s);
+  if (opt_s)    *opt_s = NULL;
+  if (opt_n)    *opt_n = 0;
+  return status;
+
+}
+/*------------------ end, line-based parsing --------------------*/
+
+/*****************************************************************
+ *# 5. Token-based parsing
+ *****************************************************************/
+
+/* Function:  esl_buffer_GetToken()
+ * Synopsis:  Get next token.
+ * Incept:    SRE, Sat Jan  1 19:42:44 2011 [Janelia]
+ *
+ * Purpose:   Find the next token in <bf> delimited by the separator
+ *            characters in <sep> or newline. Return a pointer
+ *            to that token in <*opt_tok>, and its length in <*opt_n>.
+ *            A 'token' consists of one or more characters that are
+ *            neither in <sep> nor a newline (verb+\r+ or \verb+\n+).
+ *            
+ *            Because the caller only gets a pointer into the buffer's
+ *            current memory, it should not call another
+ *            <esl_buffer_*> function until it's done with the token
+ *            or made a copy of it.
+ *            
+ *            In detail, starting from the buffer <bf>'s current
+ *            point; first skip past any leading characters in <sep>. If EOF
+ *            is reached, return <eslEOF>. If the point is now on a
+ *            newline, skip past it and return <eslEOL>. Set an anchor
+ *            at the current point. Count how many non-separator
+ *            characters <n> occur from the current point <p>
+ *            (expand/refill buffer as needed), and define the token
+ *            as <p[0..n-1]>. Skip any trailing characters in <sep>. 
+ *            Set the point to the start of the next token (a char not
+ *            in <sep>.) Release the anchor and return.
+ *            
+ *            If caller knows how many tokens it expects on each line,
+ *            it should not include \verb+"\r\n"+ in its <sep>. This way,
+ *            hitting a newline will cause a <eslEOL> return. The
+ *            caller can check for expected or unexpected <EOL>'s.
+ *            
+ *            If the caller doesn't care how many tokens it allows per
+ *            line, it should include \verb+"\r\n"+ in its <sep>. Now
+ *            newlines will be skipped like any other separator
+ *            character, and the only normal returns are <eslEOF> and
+ *            <eslOK>.
+ *            
+ * Args:      bf      - open buffer
+ *            sep     - string defining separator characters; <" \t\r\n"> for example.
+ *            opt_tok - optRETURN: pointer to token in the <bf>
+ *            opt_n   - optRETURN: number of characters in the token
+ *
+ * Returns:   <eslOK> if a token is found; <*ret_p> points to it,
+ *            and <*opt_n> is its length in chars (> 0). The current
+ *            point is at the start of the next token.
+ *            
+ *            <eslEOF> if the input ends before any token is found.
+ *            Now <*ret_p> is <NULL> and <*opt_n> is 0. The current
+ *            point is at EOF.
+ *            
+ *            <eslEOL> if a line ends before a token is found.  (This
+ *            case only arises if *sep does not contain newline.)
+ *            Now <*ret_p> is <NULL> and <*opt_n> is 0. The current
+ *            point is at the next character following the newline.
+ *            
+ *            <bf->mem> may be modified and/or reallocated, if new
+ *            input reads are required to find the entire token.
+ *
+ * Throws:    <eslEMEM> if an allocation fails.
+ *            Now <*ret_p> is <NULL> and <*opt_n> is 0. The
+ *            current point is undefined.
+ */
+int
+esl_buffer_GetToken(ESL_BUFFER *bf, const char *sep, char **opt_tok, esl_pos_t *opt_n)
+{
+  esl_pos_t anch;
+  esl_pos_t nc;
+  int       anch_set = FALSE;
+  int       status;
+
+  if ( (status = buffer_skipsep(bf, sep)) != eslOK) goto ERROR; /* includes EOF */
+  /* Now bf->pos is sitting on first char after seps */
+
+  if ( ( status = buffer_newline(bf)) != eslOK) goto ERROR; /* includes EOL */
+
+  anch = bf->baseoffset + bf->pos;
+  status = esl_buffer_SetAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } /* we know bf->pos is in current window */
+  else if (status != eslOK)     { goto ERROR; }
+
+  anch_set = TRUE;
+
+  if ( (status = buffer_counttok(bf, sep, &nc)) != eslOK) goto ERROR;
+  bf->pos     += nc;
+
+  if ((status = buffer_skipsep(bf, sep))  != eslOK && status != eslEOF) goto ERROR;
+  if ((status = buffer_refill(bf, 0))     != eslOK && status != eslEOF) goto ERROR;
+
+  if (opt_tok) *opt_tok = bf->mem + (anch - bf->baseoffset);
+  if (opt_n)   *opt_n   = nc;
+  anch_set     = FALSE;
+
+  status = esl_buffer_RaiseAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; }
+  else if (status != eslOK)     { goto ERROR; }
+  return eslOK;
+  
+ ERROR:
+  if (anch_set) esl_buffer_RaiseAnchor(bf, anch);
+  if (opt_tok) *opt_tok = NULL;
+  if (opt_n)   *opt_n   = 0;
+  return status;
+}
+
+/* Function:  esl_buffer_FetchToken()
+ * Synopsis:  Fetch copy of next token. 
+ * Incept:    SRE, Thu Feb 24 08:54:54 2011 [Janelia]
+ *
+ * Purpose:   Essentially the same as <esl_buffer_GetToken()>, except a
+ *            copy of the token is made into newly allocated memory,
+ *            and a pointer to this memory is returned in <*opt_tok>.
+ *            The caller is responsible for freeing the memory. 
+ *
+ *            The token is raw memory, not a <NUL>-terminated string. 
+ *            To fetch tokens as <NUL>-terminated strings, see 
+ *            <esl_buffer_GetTokenAsStr()>.
+ *
+ * Args:      bf      - open buffer
+ *            sep     - string defining separator characters; <" \t\r\n"> for example.
+ *            opt_tok - optRETURN: allocated copy of token
+ *            opt_n   - optRETURN: number of characters in the token
+ *
+ * Returns:   <eslOK> if a token is found; <*ret_p> points to it,
+ *            and <*opt_n> is its length in chars (> 0). The current
+ *            point is at the start of the next token.
+ *            
+ *            <eslEOF> if the input ends before any token is found.
+ *            Now <*ret_p> is <NULL> and <*opt_n> is 0. The current
+ *            point is at EOF.
+ *            
+ *            <eslEOL> if a line ends before a token is found.  (This
+ *            case only arises if *sep does not contain newline.)
+ *            Now <*ret_p> is <NULL> and <*opt_n> is 0. The current
+ *            point is at the next character following the newline.
+ *            
+ *            <bf->mem> may be modified and/or reallocated, if new
+ *            input reads are required to find the entire token.
+ *
+ * Throws:    <eslEMEM> if an allocation fails.
+ *            Now <*ret_p> is <NULL> and <*opt_n> is 0. The
+ *            current point is undefined.
+ */
+int
+esl_buffer_FetchToken(ESL_BUFFER *bf, const char *sep, char **opt_tok, esl_pos_t *opt_n)
+{
+  char     *tok      = NULL;
+  esl_pos_t anch;
+  esl_pos_t nc;
+  int       anch_set = FALSE;
+  int       status;
+
+  if ( (status = buffer_skipsep(bf, sep)) != eslOK) goto ERROR; /* includes EOF */
+  /* Now bf->pos is sitting on first char after seps */
+
+  if ( ( status = buffer_newline(bf)) != eslOK) goto ERROR; /* includes EOL */
+
+  anch = bf->baseoffset + bf->pos;
+  status = esl_buffer_SetAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; }
+  else if (status != eslOK)     { goto ERROR; }
+  anch_set = TRUE;
+
+  if ( (status = buffer_counttok(bf, sep, &nc)) != eslOK) goto ERROR;
+  /* now we know that pos..pos+nc-1 is a token; pos+nc is the next parser position */
+
+  /* copy the token */
+  ESL_ALLOC(tok, sizeof(char) * nc);
+  memcpy(tok, bf->mem+bf->pos, nc);
+  bf->pos     += nc;
+
+  /* in a Fetch, we can raise the anchor before the new refill */
+  status = esl_buffer_RaiseAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; }
+  else if (status != eslOK)     { goto ERROR; }
+  anch_set     = FALSE;
+
+  if ((status = buffer_skipsep(bf, sep))  != eslOK && status != eslEOF) goto ERROR;
+  if ((status = buffer_refill(bf, 0))     != eslOK && status != eslEOF) goto ERROR; 
+
+  if (opt_tok) *opt_tok = tok; else free(tok);
+  if (opt_n)   *opt_n   = nc;
+  return eslOK;
+  
+ ERROR:
+  if (tok)      free(tok);
+  if (anch_set) esl_buffer_RaiseAnchor(bf, anch);
+  if (opt_tok) *opt_tok = NULL;
+  if (opt_n)   *opt_n   = 0;
+  return status;
+}
+
+
+/* Function:  esl_buffer_FetchTokenAsStr()
+ * Synopsis:  Fetch copy of next token as \verb+\0+-terminated string.
+ * Incept:    SRE, Sat Jan  1 19:31:57 2011 [Zaragoza]
+ *
+ * Purpose:   Essentially the same as <esl_buffer_FetchToken()> 
+ *            except the copied token is \verb+\0+-terminated so it
+ *            can be treated as a string.
+ *
+ * Args:      bf      - open buffer
+ *            sep     - string defining separator characters; <" \t\r\n"> for example.
+ *            opt_tok - optRETURN: allocated copy of token
+ *            opt_n   - optRETURN: number of characters in the token
+ *
+ * Returns:   <eslOK> if a token is found; <*ret_p> points to it,
+ *            and <*opt_n> is its length in chars (> 0). The current
+ *            point is at the start of the next token.
+ *            
+ *            <eslEOF> if the input ends before any token is found.
+ *            Now <*ret_p> is <NULL> and <*opt_n> is 0. The current
+ *            point is at EOF.
+ *            
+ *            <eslEOL> if a line ends before a token is found.  (This
+ *            case only arises if *sep does not contain newline.)
+ *            Now <*ret_p> is <NULL> and <*opt_n> is 0. The current
+ *            point is at the next character following the newline.
+ *            
+ *            <bf->mem> may be modified and/or reallocated, if new
+ *            input reads are required to find the entire token.
+ *
+ * Throws:    <eslEMEM> if an allocation fails.
+ *            Now <*ret_p> is <NULL> and <*opt_n> is 0. The
+ *            current point is undefined.
+ */
+int
+esl_buffer_FetchTokenAsStr(ESL_BUFFER *bf, const char *sep, char **opt_tok, esl_pos_t *opt_n)
+{
+  char     *tok      = NULL;
+  esl_pos_t anch;
+  esl_pos_t nc;
+  int       anch_set = FALSE;
+  int       status;
+
+  if ( (status = buffer_skipsep(bf, sep)) != eslOK) goto ERROR; /* includes EOF */
+  /* Now bf->pos is sitting on first char after seps */
+
+  if ( ( status = buffer_newline(bf)) != eslOK) goto ERROR; /* includes EOL */
+
+  anch = bf->baseoffset + bf->pos;
+  status = esl_buffer_SetAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; }
+  else if (status != eslOK)     { goto ERROR; }
+  anch_set = TRUE;
+
+  if ( (status = buffer_counttok(bf, sep, &nc)) != eslOK) goto ERROR;
+  /* now we know that pos..pos+nc-1 is a token; pos+nc is the next parser position */
+
+  /* copy the token */
+  ESL_ALLOC(tok, sizeof(char) * (nc+1));
+  memcpy(tok, bf->mem+bf->pos, nc);
+  tok[nc] = '\0';
+  bf->pos += nc;
+
+  /* in a Fetch, we can raise the anchor before the new refill */
+  status = esl_buffer_RaiseAnchor(bf, anch);
+  if      (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; }
+  else if (status != eslOK)     { goto ERROR; }
+  anch_set     = FALSE;
+
+  
+  if ((status = buffer_skipsep(bf, sep))  != eslOK && status != eslEOF) goto ERROR;
+  if ((status = buffer_refill(bf, 0))     != eslOK && status != eslEOF) goto ERROR; 
+
+  if (opt_tok) *opt_tok = tok; else free(tok);
+  if (opt_n)   *opt_n   = nc;
+  return eslOK;
+  
+ ERROR:
+  if (tok)      free(tok);
+  if (anch_set) esl_buffer_RaiseAnchor(bf, anch);
+  if (opt_tok) *opt_tok = NULL;
+  if (opt_n)   *opt_n   = 0;
+  return status;
+}
+/*----------------- end, token-based parsing --------------------*/
+  
+
+
+/*****************************************************************
+ *# 6. Binary (fread-like) parsing
+ *****************************************************************/
+
+/* Function:  esl_buffer_Read()
+ * Synopsis:  Copy a fixed number of bytes from a buffer. 
+ * Incept:    SRE, Thu Feb 24 09:25:04 2011 [Janelia]
+ *
+ * Purpose:   Given an input buffer <bf>, read exactly <nbytes>
+ *            characters into memory <p> provided by the caller.
+ * 
+ *            Suitable for copying known-width scalars from
+ *            binary files, as in:
+ *            \begin{cchunk}
+ *                char c;
+ *                int  n;
+ *                esl_buffer_Read(bf, sizeof(char), c);
+ *                esl_buffer_Read(bf, sizeof(int),  n);
+ *            \end{cchunk}
+ *
+ * Args:      bf     - open input buffer
+ *            nbytes - number of characters to read
+ *            p      - caller-provided memory for storing the copied bytes
+ *
+ * Returns:   <eslOK> on success; <p> contains exactly <nbytes>
+ *            of data from <bf>, and the point is advanced by <nbytes>.
+ *
+ *            <eslEOF> if less than <nbytes> characters remain 
+ *            in <bf>. Point is unchanged.
+ * 
+ * Throws:    <eslEMEM> if an allocation fails.
+ *            <eslESYS> if an fread() fails mysteriously.
+ *            <eslEINCONCEIVABLE> if internal state of <bf> is corrupted.
+ */
+int 
+esl_buffer_Read(ESL_BUFFER *bf, size_t nbytes, void *p)
+{
+  int status;
+
+  if (bf->n - bf->pos < nbytes)
+    {
+      status = buffer_refill(bf, nbytes + bf->pagesize);
+      if       (status == eslEOF)       return eslEOF;
+      else if  (status != eslOK)        return status; /* EMEM, ESYS, EINCONCEIVABLE */
+      else if  (bf->n-bf->pos < nbytes) return eslEOF;
+    }
+
+  memcpy(p, bf->mem+bf->pos, nbytes);
+  bf->pos += nbytes;
+
+  if ((status = buffer_refill(bf, 0)) != eslOK && status != eslEOF) return status; /* accept EOF, we've already copied what we need */
+  return eslOK;
+}
+/*------------ end, binary (fread-like) parsing -----------------*/
+
+
+/*****************************************************************
+ * 7. Private (static) functions
+ *****************************************************************/
+
+/* buffer_create()
+ * SRE, Sun Jan 23 19:18:40 2011 [UA975 IAD->SFO]
+ * 
+ * Allocate a new ESL_BUFFER and return it in <*ret_bf>;
+ * with all fields initialized; return <eslOK>.
+ * 
+ * On allocation failure, returns <eslEMEM> and <*ret_bf>
+ * is <NULL>.
+ */
+static int
+buffer_create(ESL_BUFFER **ret_bf)
+{
+  ESL_BUFFER *bf  = NULL;
+  int         status;
+
+  ESL_ALLOC(bf, sizeof(ESL_BUFFER));
+  bf->mem        = NULL;
+  bf->n          = 0;
+  bf->balloc     = 0;
+  bf->pos        = 0;
+  bf->baseoffset = 0;
+  bf->anchor     = -1;
+  bf->fp         = NULL;
+  bf->filename   = NULL;
+  bf->cmdline    = NULL;
+  bf->pagesize   = eslBUFFER_PAGESIZE;
+  bf->errmsg[0]  = '\0';
+  bf->mode_is    = eslBUFFER_UNSET;
+
+  *ret_bf = bf;
+  return eslOK;
+
+ ERROR:
+  if (bf) free(bf);
+  *ret_bf = NULL;
+  return status;
+}
+	    
+/* buffer_init_file_mmap()
+ * SRE, Sun Jan 23 19:02:34 2011 [UA975 IAD->SFO]
+ * 
+ * On entry, we've already opened the file;
+ *   bf->fp       = open stream for reading
+ *   bf->filename = name of the file
+ *
+ * On success, returns eslOK, and *ret_bf has:
+ *  bf->mem       mmap'ed file
+ *  bf->n         size of the entire file, in bytes
+ *  bf->mode_is   eslBUFFER_MMAP
+ * 
+ * On failure, returns error code, and *ret_bf has:
+ *  bf->errmsg    helpful error message
+ *  (all other fields at creation defaults)
+ *  
+ * On exception, returns error code, and *ret_bf
+ * is left with all fields at creation defaults. 
+ */
+static int
+buffer_init_file_mmap(ESL_BUFFER *bf, esl_pos_t filesize)
+{
+  int          status;
+  /*    mmap(addr, len,          prot,      flags,       fd,             offset */
+  bf->mem = mmap(0,    filesize, PROT_READ, MAP_PRIVATE, fileno(bf->fp), 0);
+  if (bf->mem == MAP_FAILED) ESL_XEXCEPTION(eslESYS, "mmap()");
+
+  bf->n       = filesize;
+  bf->mode_is = eslBUFFER_MMAP;
+
+  /* open fp no longer needed - close it. */
+  fclose(bf->fp);
+  bf->fp = NULL;
+  return eslOK;
+
+ ERROR:
+  if (bf->mem != MAP_FAILED) munmap(bf->mem, bf->n); 
+  bf->mem     = NULL; 
+  bf->n       = 0;
+  bf->mode_is = eslBUFFER_UNSET;
+  return status;
+}
+
+int
+buffer_init_file_slurped(ESL_BUFFER *bf, esl_pos_t filesize)
+{
+  int status;
+
+  ESL_ALLOC(bf->mem, sizeof(char) * filesize);
+  bf->balloc = filesize;
+
+  bf->n = fread(bf->mem, sizeof(char), filesize, bf->fp);
+  if (bf->n < filesize)
+    ESL_XEXCEPTION(eslESYS, "failed to slurp %s\n", bf->filename);
+
+  bf->mode_is = eslBUFFER_ALLFILE;
+
+  fclose(bf->fp);   /* open fp no longer needed - close it. */
+  bf->fp = NULL;
+  return eslOK;
+
+ ERROR:
+  if (bf->mem) { free(bf->mem); bf->mem = NULL; }
+  return status;
+}
+
+int
+buffer_init_file_basic(ESL_BUFFER *bf)
+{
+  int status;
+
+  ESL_ALLOC(bf->mem, sizeof(char) * bf->pagesize);
+  bf->balloc  = bf->pagesize;
+
+  bf->n       = fread(bf->mem, sizeof(char), bf->pagesize, bf->fp);
+  if (bf->n < bf->pagesize && ferror(bf->fp))
+    ESL_XEXCEPTION(eslESYS, "failed to read first chunk of %s", bf->filename);
+
+  bf->mode_is = eslBUFFER_FILE;
+  return eslOK;
+
+ ERROR:
+  if (bf->mem)  { free(bf->mem); bf->mem = NULL; }
+  return status;
+}
+
+/* buffer_refill()      
+ * For current buffer position bf->pos, try to assure that
+ * we have at least <bf->pagesize> bytes loaded in <bf->mem> to parse.
+ *
+ *  If new read won't fit (space remaining: balloc-n; read size: memreadsize)
+ *  then make room for it:
+ *       if no anchor:   ndel = pos
+ *       else w/ anchor: ndel = anchor; anchor = 0
+ *       n      -= ndel               bytes are moved
+ *       pos    -= ndel
+ *       if (n) move <n> bytes from <ndel> to 0.
+ *       base_offset += ndel
+ *       if (n + memreadsize > balloc) reallocate mem
+ *       fread() a block into position mem+n
+ *       n += memreadsize
+ *           
+ *  For example, suppose we've completely parsed the buffer (pos == n) and we have no
+ *  anchor: then:
+ *       ndel        = n
+ *       n           = 0   (no bytes are moved)
+ *       pos         = 0
+ *       base_offset += n
+ *       fread a new block into mem+0
+ *       n += memreadsize
+ *
+ * Returns: <eslOK> on success.
+ *          <eslEOF> if no data remain in buffer nor to be read. Now pos == n.
+ *          
+ * Throws:  <eslEMEM> if an allocation fails. 
+ *          <eslESYS> if fread() fails mysteriously.
+ *          <eslEINCONCEIVABLE> if internal state of <bf> is corrupt.
+ */
+static int 
+buffer_refill(ESL_BUFFER *bf, esl_pos_t nmin)
+{
+  esl_pos_t ndel;
+  esl_pos_t nread;
+  int       status;
+
+  if (! bf->fp || feof(bf->fp)) return ( (bf->pos < bf->n) ? eslOK : eslEOF); /* without an active fp, we have whole buffer in memory; either no-op OK, or EOF */
+  if (bf->n - bf->pos >= nmin + bf->pagesize) return eslOK;                   /* if we already have enough data in buffer window, no-op       w  */
+
+  if (bf->pos > bf->n) ESL_EXCEPTION(eslEINCONCEIVABLE, "impossible position for buffer <pos>"); 
+  
+  /* Relocation, shift left to conserve memory */
+  if (bf->balloc - bf->n < bf->pagesize && bf->pos > 0)
+    {
+      if (bf->anchor == -1)   ndel = bf->pos;                   
+      else                  { ndel = bf->anchor; bf->anchor = 0; }
+      bf->n   -= ndel;
+      bf->pos -= ndel;
+      if (bf->n) {
+	ESL_DASSERT1(( bf->mem != NULL ));
+	memmove(bf->mem, bf->mem+ndel, bf->n);
+      }
+      bf->baseoffset += ndel;
+    }
+
+  if (bf->n + bf->pagesize > bf->balloc)
+    {
+      ESL_REALLOC(bf->mem, sizeof(char) * (bf->n + bf->pagesize));
+      bf->balloc = bf->n + bf->pagesize;
+    }
+
+  nread = fread(bf->mem+bf->n, sizeof(char), bf->pagesize, bf->fp);
+  if (nread == 0 && !feof(bf->fp) && ferror(bf->fp)) ESL_EXCEPTION(eslESYS, "fread() failure");
+
+  bf->n += nread;
+  if (nread == 0 && bf->pos == bf->n) return eslEOF; else return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* buffer_countline()
+ * The guts of esl_buffer_GetLine().
+ * 
+ * Starting from the current buffer position bf->pos, count the number
+ * of characters to the next newline or EOF. Return the number of
+ * chars EXCLUSIVE of newline in <*opt_nc>; this is the line length to
+ * be parsed starting from bf->pos. Return the number of chars
+ * INCLUSIVE of newline in <*opt_nskip>; this is the amount the caller
+ * should increment bf->pos by, to position the parser at the start of
+ * the next line.
+ * 
+ * This is used in GetLine() and FetchLine*(). They differ in the order
+ * of calling RaiseAnchor() and buffer_refill(): if we're
+ * fetching, we don't need to keep the memory of the current
+ * line in the buffer's window, so we can raise the anchor
+ * before refilling the buffer, which can save some memory.
+ * 
+ * If necessary, the buffer is refilled. This relies on the caller having
+ * already set an anchor at the beginning of the line.
+ *
+ * Newlines are defined by esl_memnewline().
+ * 
+ * Returns: <eslOK> on success.
+ *          <*opt_nc> is >= 0. (0 means an empty line.)
+ *          <*opt_nskip> is >= <*opt_nc>. (Equality means the line ended at EOF.)
+ *
+ *          <eslEOF> if there's no line (even blank).
+ *          On EOF, <*opt_p> is NULL and <*opt_n> is 0.
+ *
+ * Throws:  <eslEMEM> if allocation fails.
+ *          <eslESYS> if a system call such as fread() fails unexpectedly.
+ *          <eslEINCONCEIVABLE> if <bf> internal state is corrupt.
+ */
+static int
+buffer_countline(ESL_BUFFER *bf, esl_pos_t *opt_nc, esl_pos_t *opt_nskip)
+{
+  esl_pos_t nc;			/* line length exclusive of newline */
+  esl_pos_t nc2;		/* tmp nc for a suffix of the current line */
+  int       nterm;		/* length of newline; 0..2 */
+  int       status;
+
+  if (bf->pos == bf->n) { status = eslEOF; goto ERROR; } /* normal EOF */
+
+  nc = 0;
+  do {
+    if ((status = esl_memnewline(bf->mem + bf->pos + nc, bf->n - bf->pos - nc, &nc2, &nterm)) != eslOK && status != eslEOD) goto ERROR;
+    nc += nc2;
+    if (nc2 && bf->mem[bf->pos+nc-1] == '\r') nc--; /* handle case where we've only read up to \r of a \r\n newline */
+    if (nterm) break;
+    if (( status = buffer_refill(bf, nc+nterm)) != eslOK && status != eslEOF) goto ERROR;
+  } while (bf->n - bf->pos > nc);
+      
+  /* EOF check. If we get here with status == eslEOF, nc = nterm = 0,
+   * then esl_memnewline found no data for a line and buffer_refill returned EOF.
+   */
+  if (status == eslEOF && nc == 0 && nterm == 0) goto ERROR; 
+
+   /* Now the line extends from bf->pos..pos+nc-1 in the buffer window 
+    * The newline itself is position pos+nc..pos+nc+nterm-1 (one or two chars) 
+    * The next line starts at pos+nc+nterm
+    * We know that everything up to pos+nc+nterm-1 is in the buffer window.
+    * It's safe to set the current buffer position to pos+nc+nterm, which
+    * may be bf->n; the next buffer_refill() will do the right thing with it.
+    */
+  if (opt_nc)    *opt_nc    = nc;
+  if (opt_nskip) *opt_nskip = nc + nterm;
+  return eslOK;
+
+ ERROR: /* including normal EOF */
+  if (opt_nc)    *opt_nc    = 0;
+  if (opt_nskip) *opt_nskip = 0;
+  return status;
+}
+
+/* First chunk of token parsing, shared amongst GetToken(), FetchToken(), FetchTokenAsStr()
+ * Skip the parser past chars in *sep; return eslEOF if no non-sep char is found. 
+ *   Now parser is bf->pos == bf->n, buffer is in EOF state.
+ * eslOK on success, and bf->pos is on the first nonsep char.
+ *
+ * Returns:  eslOK or eslEOF
+ * Throws:   eslEMEM, eslESYS, eslEINCONCEIVABLE
+ */
+static int
+buffer_skipsep(ESL_BUFFER *bf, const char *sep)
+{
+  int       status;
+
+  /* skip characters in sep[], or hit EOF. */
+  do {
+    for ( ; bf->pos < bf->n; bf->pos++)
+      if (strchr(sep, bf->mem[bf->pos]) == NULL) goto DONE;
+    if ( (status = buffer_refill(bf, 0)) != eslOK && status != eslEOF) return status; 
+  } while (bf->n > bf->pos);
+
+ DONE:
+  return (bf->pos == bf->n ? eslEOF : eslOK);
+}
+
+/* buffer_skipnewline()
+ * if bf->pos is on a newline (1 or 2 chars);
+ *   advance bf->pos to next byte after newline and return eslEOL
+ * else do nothing, and return eslOK.
+ */
+static int
+buffer_newline(ESL_BUFFER *bf)
+{
+  esl_pos_t nc = bf->n - bf->pos;
+  int       status;
+
+  if (nc == 0) 
+    return eslEOL;	/* no newline, but EOF is as good as */
+  if (nc >= 1 && bf->mem[bf->pos] == '\n')  
+    { bf->pos += 1; return eslEOL; }
+  if (nc >= 2 && memcmp(bf->mem + bf->pos, "\r\n", 2) == 0)
+    { bf->pos += 2; return eslEOL; }
+  
+  status = buffer_refill(bf, 0);
+  if (status != eslEOF && status != eslOK) return status;
+
+  return eslOK;
+}
+
+/* bf->pos is sitting on a non-sep, non-newline character, starting
+ * a token (i.e., the way buffer_skipsep() left us on
+ * success). Caller has set anchor to be sure this position stays in
+ * buffer. Count how many nonsep, nonnewline characters there are,
+ * starting here. Expand bf as needed.
+ */
+static int
+buffer_counttok(ESL_BUFFER *bf, const char *sep, esl_pos_t *ret_nc)
+{
+  esl_pos_t nc;
+  int       status;
+
+  /* skip chars NOT in sep[]. */
+  nc = 1;
+  do {
+    for ( ; nc < bf->n-bf->pos; nc++)
+      {
+	if (strchr(sep, bf->mem[bf->pos+nc]) != NULL) break; /* token ends on any char in sep       */
+	if (bf->mem[bf->pos+nc] == '\n')              break; /* token also always ends on a newline */
+      }
+    if (nc < bf->n-bf->pos) break; /* token ended in our current buffer */
+    
+    if ( (status = buffer_refill(bf, nc)) != eslOK && status != eslEOF) goto ERROR;
+  } while (bf->n - bf->pos > nc);
+
+  if (bf->mem[bf->pos+nc] == '\n' && bf->mem[bf->pos+nc-1] == '\r') { nc--; }
+
+  /* bf->mem[bf->pos+nc] now sitting on the first char that's in sep, or a newline char */
+  *ret_nc = nc;
+  return eslOK;
+
+ ERROR:
+  *ret_nc = 0;
+  return status;
+}
+/*----------------- end, private functions ----------------------*/
+
+
+
+
+/*****************************************************************
+ * 8. Benchmark
+ *****************************************************************/
+#ifdef eslBUFFER_BENCHMARK
+
+/* compile: gcc -g -Wall -I. -L. -o esl_buffer_benchmark -DeslBUFFER_BENCHMARK esl_buffer.c -leasel -lm
+ * run:     ./esl_buffer_benchmark
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+
+#include "easel.h"
+#include "esl_buffer.h"
+#include "esl_getopts.h"
+#include "esl_stopwatch.h"
+
+static ESL_OPTIONS options[] = {
+  /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options] <infile>";
+static char banner[] = "benchmark driver for buffer module";
+
+
+static void
+benchmark_buffer_raw(char *filename, esl_pos_t *counts)
+{
+  ESL_BUFFER *bf = NULL;
+  char       *p;
+  esl_pos_t   nc;
+  esl_pos_t   pos;
+
+  esl_buffer_OpenFile(filename, &bf);
+  while (esl_buffer_Get(bf, &p, &nc) == eslOK)
+    {
+      for (pos = 0; pos < nc; pos++)
+	counts[(int) p[pos]]++;
+
+      esl_buffer_Set(bf, p, nc);
+    }
+  esl_buffer_Close(bf);
+  return;
+}
+
+static void
+benchmark_buffer_lines(char *filename, esl_pos_t *counts)
+{
+  ESL_BUFFER *bf = NULL;
+  char       *p;
+  esl_pos_t   nc;
+  esl_pos_t   pos;
+
+  esl_buffer_OpenFile(filename, &bf);
+  while (esl_buffer_GetLine(bf, &p, &nc) == eslOK)
+    {
+      for (pos = 0; pos < nc; pos++)
+	counts[(int) p[pos]]++;
+    }
+  esl_buffer_Close(bf);
+  return;
+}
+
+static void
+benchmark_buffer_stream_raw(char *filename, esl_pos_t *counts)
+{
+  FILE       *fp = fopen(filename, "rb");
+  ESL_BUFFER *bf = NULL;
+  char       *p;
+  esl_pos_t   nc;
+  esl_pos_t   pos;
+
+  esl_buffer_OpenStream(fp, &bf);
+  while (esl_buffer_Get(bf, &p, &nc) == eslOK)
+    {
+      for (pos = 0; pos < nc; pos++)
+	counts[(int) p[pos]]++;
+
+      esl_buffer_Set(bf, p, nc);
+    }
+  esl_buffer_Close(bf);
+  return;
+}
+
+static void
+benchmark_buffer_stream_lines(char *filename, esl_pos_t *counts)
+{
+  FILE       *fp = fopen(filename, "rb");
+  ESL_BUFFER *bf = NULL;
+  char       *p;
+  esl_pos_t   nc;
+  esl_pos_t   pos;
+
+  esl_buffer_OpenStream(fp, &bf);
+  while (esl_buffer_GetLine(bf, &p, &nc) == eslOK)
+    {
+      for (pos = 0; pos < nc; pos++)
+	counts[(int) p[pos]]++;
+    }
+  esl_buffer_Close(bf);
+  return;
+}
+
+static void
+benchmark_buffer_tokens(char *filename, esl_pos_t *counts)
+{
+  FILE       *fp   = fopen(filename, "rb");
+  ESL_BUFFER *bf   = NULL;
+  char       sep[] = " \t\r\n";
+  char       *tok;
+  esl_pos_t   nc;
+  esl_pos_t   pos;
+
+  esl_buffer_OpenStream(fp, &bf);
+  while (esl_buffer_GetToken(bf, sep, &tok, &nc) == eslOK)
+    {
+      for (pos = 0; pos < nc; pos++)
+	counts[(int) tok[pos]]++;
+    }
+  esl_buffer_Close(bf);
+  return;
+}
+  
+
+static void
+benchmark_mmap(char *filename, esl_pos_t filesize, esl_pos_t *counts)
+{
+  char     *buf      = NULL;
+  int       prot     = PROT_READ;
+  int       flags    = MAP_FILE | MAP_PRIVATE;
+  int       fd       = -1;
+  off_t     offset   = 0;
+  esl_pos_t pos;
+
+  fd = open(filename, O_RDONLY);
+  buf = (char *) mmap(0, filesize, prot, flags, fd, offset);
+  //  posix_madvise(buf, len,  POSIX_MADV_SEQUENTIAL);
+  close(fd);
+
+  for (pos = 0; pos < filesize; pos++)
+    counts[(int) buf[pos]]++;
+
+  munmap(buf, filesize);
+  return;
+}
+
+static void
+benchmark_one_read(char *filename, esl_pos_t filesize, esl_pos_t *counts)
+{
+  int       fd    = -1;
+  char     *buf   = malloc(filesize);
+  esl_pos_t pos;
+
+  fd = open(filename, O_RDONLY);
+  read(fd, buf, filesize);
+  close(fd);
+
+  for (pos = 0; pos < filesize; pos++)
+    counts[(int) buf[pos]]++;
+
+  free(buf);
+  return;
+}  
+
+static void
+benchmark_one_fread(char *filename, esl_pos_t filesize, esl_pos_t *counts)
+{
+  FILE     *fp    = fopen(filename, "rb");
+  char     *buf   = malloc(filesize);
+  esl_pos_t pos;
+
+  fread(buf, 1, filesize, fp);
+  fclose(fp);
+  
+  for (pos = 0; pos < filesize; pos++)
+    counts[(int) buf[pos]]++;
+  free(buf);
+  return;
+}
+
+static void
+benchmark_fgets(char *filename, esl_pos_t *counts)
+{
+  FILE *fp  = fopen(filename, "rb");
+  char *buf = malloc(4096);
+  char *p;
+
+  while (fgets(buf, 4096, fp) != NULL)
+    {
+      for (p = buf; *p != '\0'; p++) 
+	counts[(int) (*p)]++;
+    }
+  fclose(fp);
+  free(buf);
+  return;
+}
+
+static void
+benchmark_strtok(char *filename, esl_pos_t *counts)
+{
+  FILE *fp  = fopen(filename, "rb");
+  char *buf = malloc(8192);
+  char *tok = NULL;
+  char *p, *p2;
+
+  while (fgets(buf, 8192, fp) != NULL)
+    {
+      p = buf;
+      do {
+	if ((tok = strtok(p, " \t\r\n")) != NULL)
+	  {
+	    for (p2 = tok; *p2 != '\0'; p2++) 
+	      counts[(int) (*p2)]++;
+	  } 
+	p = NULL;
+      }	while (tok);
+    }
+  fclose(fp);
+  free(buf);
+  return;
+}
+
+static void
+benchmark_esl_fgets(char *filename, esl_pos_t *counts)
+{
+  FILE *fp  = fopen(filename, "rb");
+  char *buf = NULL;
+  int   n   = 0;
+  char *p;
+
+  while (esl_fgets(&buf, &n, fp) == eslOK)
+    {
+      for (p = buf; *p != '\0'; p++) 
+	counts[(int) (*p)]++;
+    }
+  fclose(fp);
+  free(buf);
+  return;
+}
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go          = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  ESL_STOPWATCH  *w           = esl_stopwatch_Create();
+  char           *infile      = esl_opt_GetArg(go, 1);
+  struct stat     fstats;
+  esl_pos_t       filesize;
+  esl_pos_t       counts[256];
+  
+  stat(infile, &fstats);
+  filesize = fstats.st_size;  
+
+  /* roughly in fastest->slowest order */
+  esl_stopwatch_Start(w);  benchmark_mmap               (infile, filesize, counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "mmap():                      ");
+  esl_stopwatch_Start(w);  benchmark_buffer_stream_raw  (infile,           counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "ESL_BUFFER (stream, raw):    ");
+  esl_stopwatch_Start(w);  benchmark_buffer_raw         (infile,           counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "ESL_BUFFER (mmap, raw):      ");
+  esl_stopwatch_Start(w);  benchmark_one_read           (infile, filesize, counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "one read():                  ");
+  esl_stopwatch_Start(w);  benchmark_one_fread          (infile, filesize, counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "one fread():                 ");
+  esl_stopwatch_Start(w);  benchmark_fgets              (infile,           counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "fgets():                     ");
+  esl_stopwatch_Start(w);  benchmark_esl_fgets          (infile,           counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "esl_fgets():                 ");
+  esl_stopwatch_Start(w);  benchmark_buffer_lines       (infile,           counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "ESL_BUFFER (mmap, lines):    ");
+  esl_stopwatch_Start(w);  benchmark_buffer_stream_lines(infile,           counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "ESL_BUFFER (stream, lines):  ");
+  esl_stopwatch_Start(w);  benchmark_strtok             (infile,           counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "strtok():                    ");
+  esl_stopwatch_Start(w);  benchmark_buffer_tokens      (infile,           counts);  esl_stopwatch_Stop(w);  esl_stopwatch_Display(stdout, w, "ESL_BUFFER (stream, tokens): ");
+
+  esl_stopwatch_Destroy(w);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+#endif /*eslBUFFER_BENCHMARK*/
+/*----------------- end, benchmark driver -----------------------*/
+
+
+
+
+
+/*****************************************************************
+ * 9. Unit tests
+ *****************************************************************/
+#ifdef eslBUFFER_TESTDRIVE
+
+#include "esl_random.h"
+#include <ctype.h>
+
+/* A variant of esl_buffer_OpenFile() that lets us specify
+ * whether we want to slurp, mmap, or basic, using
+ * eslBUFFER_ALLFILE, eslBUFFER_MMAP, eslBUFFER_FILE flags.
+ * We use this to force code coverage of the different
+ * buffer_init_file_*() functions.
+ * For example, the default unit test driver generates a 
+ * test file of ~3 MB, which is always slurped and never 
+ * mmap()'ed; if we want to test mmap() we have to force it.
+ */
+static int
+buffer_OpenFileAs(const char *filename, enum esl_buffer_mode_e mode_is, ESL_BUFFER **ret_bf)
+{
+  char        msg[] = "buffer_OpenFileAs() failed";
+  ESL_BUFFER *bf    = NULL;
+#ifdef _POSIX_VERSION
+  struct stat fileinfo;
+#endif
+  esl_pos_t   filesize = -1;
+
+  if (buffer_create(&bf)                         != eslOK) esl_fatal(msg);
+  if ((bf->fp = fopen(filename, "rb"))           == NULL)  esl_fatal(msg);
+  if (esl_strdup(filename, -1, &(bf->filename))  != eslOK) esl_fatal(msg);
+
+#ifdef _POSIX_VERSION
+  if (fstat(fileno(bf->fp), &fileinfo)           == -1)    esl_fatal(msg);
+  filesize     = fileinfo.st_size;
+  bf->pagesize = fileinfo.st_blksize;
+  if (bf->pagesize < 512)     bf->pagesize = 512;     
+  if (bf->pagesize > 4194304) bf->pagesize = 4194304;
+#endif  
+
+  switch (mode_is) {
+  case eslBUFFER_ALLFILE: if (buffer_init_file_slurped(bf, filesize) != eslOK) esl_fatal(msg); break;
+  case eslBUFFER_MMAP:    if (buffer_init_file_mmap   (bf, filesize) != eslOK) esl_fatal(msg); break;
+  case eslBUFFER_FILE:    if (buffer_init_file_basic  (bf)           != eslOK) esl_fatal(msg); break;
+  default:                                                                     esl_fatal(msg);                
+  }
+  *ret_bf = bf;
+  return eslOK;
+}
+
+
+
+
+/* Test lines:
+ *   long:  \s{0,1}[<line#> _{0,5000} <line#>]\s{0,1}\r?\n  (line length > pagesize)
+ *   short: \s{0,1}[<line#> _{0,60} <line#>]\s{0,1}\r?\n    (typical text file lines)
+ *   empty: \s{0,1}\r?\n                                    (parser shouldn't lose track of blank lines)
+ * Final line in file does not necessarily end in newline.
+ */
+static void
+create_testfile_lines(ESL_RANDOMNESS *r, char *tmpfile, int nlines)
+{
+  char    msg[]          = "create_testfile_lines() failed";
+  FILE   *fp             = NULL;
+  double fq_leadspace    = 0.2;
+  double fq_longline     = 0.1;
+  double fq_empty        = 0.2;
+  double fq_dos          = 0.5;
+  double fq_finalnewline = 0.5;
+  int    longxnum        = 5000;
+  int    shortxnum       = 60;
+  double roll;
+  int    i, n;
+
+  if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg);
+
+  for (i = 0; i < nlines; i++)
+    {
+      if (esl_random(r) < fq_leadspace) fputc(' ', fp);
+      
+      roll = esl_random(r);
+      if (roll < fq_empty) {
+	if (esl_random(r) < fq_dos) fputs("\r\n", fp); else fputc('\n', fp);
+	continue;
+      }
+
+      if (roll < fq_empty + fq_longline) { n = esl_rnd_Roll(r, longxnum+1);  }
+      else                               { n = esl_rnd_Roll(r, shortxnum+1); }
+
+      fprintf(fp, "[%d %*s %d]", i+1, n, " ", i+1);
+
+      if (esl_random(r) < fq_leadspace) fputc(' ', fp);
+      if   (i < nlines-1 || esl_random(r) < fq_finalnewline) {
+	if (esl_random(r) < fq_dos) fputs("\r\n", fp); else fputc('\n', fp); 
+      }
+    }
+  fclose(fp);
+}
+
+static void
+utest_compare_line(char *p, esl_pos_t n, int nline_expected)
+{
+  const char msg[] = "line input fails to match expected";
+  int32_t    which = 0;
+  int        nc; 
+
+  if (esl_memspn(p, n, " \t\r\n") == n) return; /* blank test lines */
+
+  if (n && *p == ' ') { p++; n--; }
+  if (n && *p == '[') { p++; n--; }                else esl_fatal(msg);
+  
+  if (! isdigit(*p))                                    esl_fatal(msg);
+  if (esl_mem_strtoi32(p, n, 10, &nc, &which) != eslOK) esl_fatal(msg);
+  if (which != nline_expected)                          esl_fatal(msg);
+  p += nc; n -= nc;
+
+  while (n && isspace(*p)) { p++; n--; }        if (!n) esl_fatal(msg);
+  if (! isdigit(*p))                                    esl_fatal(msg);
+  if (esl_mem_strtoi32(p, n, 10, &nc, &which) != eslOK) esl_fatal(msg);
+  if (which != nline_expected)                          esl_fatal(msg);
+  p += nc; n -= nc;
+
+  if (n && *p == ']') { p++; n--; } else esl_fatal(msg);
+  if (n && *p == ' ') { p++; n--; }
+  if (n != 0) esl_fatal(msg);
+}
+
+static int
+utest_whichline(char *p, esl_pos_t n)
+{
+  char msg[] = "utest_whichline() failed";
+  int  which;
+
+  if (esl_memspn(p, n, " \t\r\n") == n) return -1;
+  while (n && isspace(*p)) { p++; n--; }
+  if (n && *p == '[')      { p++; n--; }  else esl_fatal(msg);
+  if (esl_mem_strtoi32(p, n, 10, NULL, &which) != eslOK) esl_fatal(msg);
+  return which;
+}
+
+static void
+utest_SetOffset(const char *tmpfile, int nlines_expected)
+{
+  char        msg[]        = "utest_Position() failed";
+  FILE       *fp;
+  ESL_BUFFER *bf;
+  char       *p;
+  esl_pos_t   n;
+  esl_pos_t   thisoffset;
+  esl_pos_t   testoffset1 = -1;
+  esl_pos_t   testoffset2 = -1;
+  int         testline1   = -1;
+  int         testline2   = -2;
+  int         thisline; 
+#ifdef HAVE_GZIP
+  char        gzipfile[32];
+  char        cmd[256];     
+#endif
+
+  /* Find offsets of lines ~2000 and ~5000; we'll use these positions as tests. */
+  if (nlines_expected <= 8000) return; /* require at least 8000 lines to do this test */
+  if (esl_buffer_Open(tmpfile, NULL, &bf)  != eslOK) esl_fatal(msg);
+  testline1 = -1;
+  thisoffset = esl_buffer_GetOffset(bf);
+  while (esl_buffer_GetLine(bf, &p, &n) == eslOK)
+    {
+      if ((thisline = utest_whichline(p, n)) == -1) continue;
+      if (testline1 == -1 && thisline >= 2000) {
+	testline1 = thisline; testoffset1 = thisoffset;
+      }
+      if (thisline >= 5000) {
+	testline2 = thisline; testoffset2 = thisoffset;
+	break;
+      }
+      thisoffset = esl_buffer_GetOffset(bf);
+    }
+  esl_buffer_Close(bf);
+
+  /* Now we're going to walk through SetOffset()'s various cases;
+   *  we'll also exercise Open() while we're at it.
+   */
+  /* Test 1. We have the entire file in bf->mem and SetOffset() is trivial.
+   *         Since a file is either slurped or mmap'ed, this is what we expect.
+   */
+  if ( esl_buffer_Open(tmpfile, NULL, &bf)   != eslOK) esl_fatal(msg);
+  if ( esl_buffer_SetOffset(bf, testoffset2) != eslOK) esl_fatal(msg);
+  if ( esl_buffer_GetLine(bf, &p, &n)        != eslOK) esl_fatal(msg);
+  utest_compare_line(p, n, testline2);
+  esl_buffer_Close(bf);
+
+  /* All subsequent tests are for streams. */
+  /* Test 2.  Offset *forward* to line ~2000 (testline1), and read it.
+   *          Anchor.
+   *          Offset forward again to line ~5000 (testline2), read it.
+   *          Anchor (should no-op; first anchor is already in effect)
+   *          Offset backward to testline1, read it.
+   *          Try to offset back to 0; this should throw eslEINVAL.
+   *   (also exercise gzip reading, if we can) 
+   */
+#if defined HAVE_GZIP
+  snprintf(gzipfile,   32, "%s.gz", tmpfile);
+  snprintf(cmd,       256, "gzip -c %s 2>/dev/null > %s", tmpfile, gzipfile);
+  if (system(cmd) != 0) esl_fatal(msg);
+  if (esl_buffer_Open(gzipfile, NULL, &bf)  != eslOK) esl_fatal(msg);
+  fp = NULL;
+#else
+  if ( (fp = fopen(tmpfile, "r"))            == NULL) esl_fatal(msg);
+  if (esl_buffer_OpenStream(fp, &bf)        != eslOK) esl_fatal(msg);
+#endif
+  if (esl_buffer_SetOffset(bf, testoffset1) != eslOK) esl_fatal(msg);
+  if (esl_buffer_GetLine(bf, &p, &n)        != eslOK) esl_fatal(msg);
+  utest_compare_line(p, n, testline1);
+
+  if (esl_buffer_SetAnchor(bf, testoffset1) != eslOK) esl_fatal(msg);
+  if (esl_buffer_SetOffset(bf, testoffset2) != eslOK) esl_fatal(msg);
+  if (esl_buffer_GetLine(bf, &p, &n)        != eslOK) esl_fatal(msg);
+  utest_compare_line(p, n, testline2);
+
+  if (esl_buffer_SetAnchor(bf, testoffset2)   != eslOK) esl_fatal(msg);
+  if (esl_buffer_RaiseAnchor(bf, testoffset2) != eslOK) esl_fatal(msg);
+  if (esl_buffer_SetOffset(bf, testoffset1)   != eslOK) esl_fatal(msg);
+  if (esl_buffer_GetLine(bf, &p, &n)          != eslOK) esl_fatal(msg);
+  utest_compare_line(p, n, testline1);
+
+  esl_exception_SetHandler(&esl_nonfatal_handler);
+  if (esl_buffer_SetOffset(bf, 0)             != eslEINVAL) esl_fatal(msg);
+  esl_exception_ResetDefaultHandler();  
+
+  esl_buffer_Close(bf);
+  if (fp) fclose(fp);
+
+
+  /* test 3. The remaining case is using fseeko(), which
+   *         can only happen on a eslBUFFER_FILE opened in basic mode.
+   */
+#ifdef _POSIX_VERSION
+  if (buffer_OpenFileAs(tmpfile, eslBUFFER_FILE, &bf) != eslOK) esl_fatal(msg);
+  if (esl_buffer_SetOffset(bf, testoffset2) != eslOK) esl_fatal(msg);
+  if (esl_buffer_GetLine(bf, &p, &n)        != eslOK) esl_fatal(msg);
+  utest_compare_line(p, n, testline2);
+
+  if (esl_buffer_SetOffset(bf, testoffset1) != eslOK) esl_fatal(msg);
+  if (esl_buffer_GetLine(bf, &p, &n)        != eslOK) esl_fatal(msg);
+  utest_compare_line(p, n, testline1);
+  esl_buffer_Close(bf);
+#endif /*_POSIX_VERSION*/
+  
+#if defined HAVE_GZIP
+  remove(gzipfile);
+#endif
+
+}
+
+static void
+utest_Get(ESL_BUFFER *bf, int nlines_expected)
+{
+  const char msg[]  = "utest_Get() failed";
+  char      *p      = NULL;
+  esl_pos_t  n      = 0;
+  int        nlines = 0;
+  char       line[8192];
+  int        lpos   = 0;
+  esl_pos_t  i;
+  int        status;
+
+  while ( (status = esl_buffer_Get(bf, &p, &n)) == eslOK)
+    {
+      for (i = 0; i < n; i++)
+	{
+	  if (p[i] == '\n') 
+	    {
+	      nlines++;
+	      if (lpos && line[lpos-1] == '\r') lpos--;
+	      utest_compare_line(line, lpos, nlines);
+	      lpos = 0;
+	      i++;
+	      break;
+	    }
+	  else 
+	    line[lpos++] = p[i];
+	}
+      esl_buffer_Set(bf, p, i);
+    }
+  if (lpos) { nlines++; utest_compare_line(line, lpos, nlines); }
+  if (status != eslEOF)          esl_fatal(msg);
+  if (nlines != nlines_expected) esl_fatal(msg);
+}
+
+static void
+utest_GetLine(ESL_BUFFER *bf, int nlines_expected)
+{
+  const char msg[]  = "utest_GetLine() failed";
+  char      *p      = NULL;
+  esl_pos_t  n      = 0;
+  int        nlines = 0;
+  int        status;
+  
+  while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK)
+    {
+      nlines++;
+      utest_compare_line(p, n, nlines);
+    }
+  if (status != eslEOF)          esl_fatal(msg);
+  if (nlines != nlines_expected) esl_fatal(msg);
+  return;
+}
+
+static void
+utest_FetchLine(ESL_BUFFER *bf, int nlines_expected)
+{
+  const char msg[]  = "utest_FetchLine() failed";
+  char      *p      = NULL;
+  esl_pos_t  n      = 0;
+  int        nlines = 0;
+  int        status;
+  
+  while ( (status = esl_buffer_FetchLine(bf, &p, &n)) == eslOK)
+    {
+      nlines++;
+      utest_compare_line(p, n, nlines);
+      free(p);
+    }
+  if (status != eslEOF)          esl_fatal(msg);
+  if (nlines != nlines_expected) esl_fatal(msg);
+  return;
+}  
+
+static void
+utest_FetchLineAsStr(ESL_BUFFER *bf, int nlines_expected)
+{
+  const char msg[]  = "utest_FetchLineAsStr() failed";
+  char      *p      = NULL;
+  esl_pos_t  n      = 0;
+  int        nlines = 0;
+  int        status;
+  
+  while ( (status = esl_buffer_FetchLineAsStr(bf, &p, &n)) == eslOK)
+    {
+      nlines++;
+      utest_compare_line(p, n, nlines);
+      if (p[n] != '\0') esl_fatal(msg);
+      free(p);
+    }
+  if (status != eslEOF)          esl_fatal(msg);
+  if (nlines != nlines_expected) esl_fatal(msg);
+  return;
+}  
+
+
+static void
+utest_GetToken(ESL_BUFFER *bf, int nlines_expected)
+{
+  char       msg[]  = "utest_GetToken() failed";
+  const char sep[]  = " \t"; /* without newline chars \r\n, GetToken() will return EOL when it reaches end of line. *Next* GetToken() succeeds. */
+  int        nlines = 0;
+  char      *tok;
+  int        which;
+  int        nc;
+  esl_pos_t  n;
+  int        status;
+  
+  while ((status = esl_buffer_GetToken(bf, sep, &tok, &n)) == eslOK || status == eslEOL) /* EOL needed for blank lines */
+    { /* each line has two tokens: "[%d" and "%d]" */
+      nlines++;
+      if (status == eslEOL) continue;
+
+      if (*tok == '[') { tok++; n--; }                    else esl_fatal(msg);
+      if (! isdigit(*tok))                                     esl_fatal(msg);
+      if (esl_mem_strtoi32(tok, n, 10, &nc, &which)  != eslOK) esl_fatal(msg);
+      if (nc    != n)                                          esl_fatal(msg);
+      if (which != nlines)                                     esl_fatal(msg);
+
+      if (esl_buffer_GetToken(bf, sep, &tok, &n)     != eslOK) esl_fatal(msg);
+      if (! isdigit(*tok))                                     esl_fatal(msg);
+      if (esl_mem_strtoi32(tok, n, 10, &nc, &which)  != eslOK) esl_fatal(msg);
+      if (nc    != n-1)                                        esl_fatal(msg);
+      if (which != nlines)                                     esl_fatal(msg);
+      if (*(tok+nc) != ']')                                    esl_fatal(msg);
+      
+      if ( (status = esl_buffer_GetToken(bf, sep, &tok, &n)) != eslEOL && status != eslEOF) esl_fatal(msg);
+      if (tok != NULL || n != 0)                               esl_fatal(msg);
+    }
+  if (status != eslEOF)          esl_fatal(msg);
+  if (nlines != nlines_expected) esl_fatal(msg);
+  return;
+}
+
+
+static void
+utest_GetTokenWrapped(ESL_BUFFER *bf, int nlines_expected)
+{
+  char       msg[]  = "utest_GetTokenWrapped() failed";
+  const char sep[]  = " \t\r\n"; /* with newline chars \r\n, GetToken() wraps to next line to find token. */
+  int        nlines = 0;
+  char      *tok;
+  int        which;
+  int        nc;
+  esl_pos_t  n;
+  int        status;
+  
+  while ((status = esl_buffer_GetToken(bf, sep, &tok, &n)) == eslOK)
+    { /* each line has two tokens: "[%d" and "%d]" */
+      nlines++;
+
+      if (*tok == '[') { tok++; n--; }                    else esl_fatal(msg);
+      if (! isdigit(*tok))                                     esl_fatal(msg);
+      if (esl_mem_strtoi32(tok, n, 10, &nc, &which)  != eslOK) esl_fatal(msg);
+      if (nc    != n)                                          esl_fatal(msg);
+      if      (which > nlines) nlines = which; /* can skip lines that are all newline */
+      else if (which < nlines)                                 esl_fatal(msg);
+
+      if (esl_buffer_GetToken(bf, sep, &tok, &n)     != eslOK) esl_fatal(msg);
+      if (! isdigit(*tok))                                     esl_fatal(msg);
+      if (esl_mem_strtoi32(tok, n, 10, &nc, &which)  != eslOK) esl_fatal(msg);
+      if (nc    != n-1)                                        esl_fatal(msg);
+      if (which != nlines)                                     esl_fatal(msg);
+      if (*(tok+nc) != ']')                                    esl_fatal(msg);
+    }
+  if (status != eslEOF)          esl_fatal(msg);
+  if (nlines > nlines_expected)  esl_fatal(msg); /* probably can't happen. can't check for equality though - last line(s) could be blank */
+  return;
+}
+
+static void
+utest_FetchToken(ESL_BUFFER *bf, int nlines_expected)
+{
+  char       msg[]  = "utest_FetchToken() failed";
+  const char sep[]  = " \t"; 
+  int        nlines = 0;
+  char      *tok;
+  int        which;
+  int        nc;
+  esl_pos_t  n;
+  int        status;
+  
+  while ((status = esl_buffer_FetchToken(bf, sep, &tok, &n)) == eslOK || status == eslEOL) /* EOL needed for blank lines */
+    { /* each line has two tokens: "[%d" and "%d]" */
+      nlines++;
+      if (status == eslEOL) { if (tok != NULL) esl_fatal(msg);  else continue; }
+
+      if (*tok != '[')                                            esl_fatal(msg);
+      if (! isdigit(*(tok+1)))                                    esl_fatal(msg);
+      if (esl_mem_strtoi32(tok+1, n-1, 10, &nc, &which) != eslOK) esl_fatal(msg);
+      if (nc    != n-1)                                           esl_fatal(msg);
+      if (which != nlines)                                        esl_fatal(msg);
+      free(tok);
+
+      if (esl_buffer_FetchToken(bf, sep, &tok, &n)   != eslOK) esl_fatal(msg);
+      if (! isdigit(*tok))                                     esl_fatal(msg);
+      if (esl_mem_strtoi32(tok, n, 10, &nc, &which)  != eslOK) esl_fatal(msg);
+      if (nc    != n-1)                                        esl_fatal(msg);
+      if (which != nlines)                                     esl_fatal(msg);
+      if (*(tok+nc) != ']')                                    esl_fatal(msg);
+      free(tok);
+      
+      if ( (status = esl_buffer_FetchToken(bf, sep, &tok, &n)) != eslEOL && status != eslEOF) esl_fatal(msg);
+      if (tok != NULL || n != 0)                               esl_fatal(msg);
+    }
+  if (status != eslEOF)          esl_fatal(msg);
+  if (nlines != nlines_expected) esl_fatal(msg);
+  return;
+}
+
+
+static void
+utest_FetchTokenAsStrWrapped(ESL_BUFFER *bf, int nlines_expected)
+{
+  char       msg[]  = "utest_FetchTokenAsStrWrapped() failed";
+  const char sep[]  = " \t\r\n"; 
+  int        nlines = 0;
+  char      *tok;
+  int        which;
+  int        nc;
+  esl_pos_t  n;
+  int        status;
+  
+  while ((status = esl_buffer_FetchTokenAsStr(bf, sep, &tok, &n)) == eslOK)
+    { /* each line has two tokens: "[%d" and "%d]" */
+      nlines++;
+
+      if (strlen(tok) != n)                                       esl_fatal(msg);
+      if (*tok != '[')                                            esl_fatal(msg);
+      if (! isdigit(*(tok+1)))                                    esl_fatal(msg);
+      if (esl_mem_strtoi32(tok+1, n-1, 10, &nc, &which) != eslOK) esl_fatal(msg);
+      if (nc    != n-1)                                           esl_fatal(msg);
+      if      (which > nlines) nlines = which; /* can skip lines that are all newline */
+      else if (which < nlines)                                    esl_fatal(msg);
+      free(tok);
+
+      if (esl_buffer_FetchTokenAsStr(bf, sep, &tok, &n) != eslOK) esl_fatal(msg);
+      if (strlen(tok) != n)                                       esl_fatal(msg);
+      if (! isdigit(*tok))                                        esl_fatal(msg);
+      if (esl_mem_strtoi32(tok, n, 10, &nc, &which)     != eslOK) esl_fatal(msg);
+      if (nc    != n-1)                                           esl_fatal(msg);
+      if (which != nlines)                                        esl_fatal(msg);
+      if (*(tok+nc) != ']')                                       esl_fatal(msg);
+      free(tok);
+    }
+  if (status != eslEOF)          esl_fatal(msg);
+  if (nlines > nlines_expected)  esl_fatal(msg); /* probably can't happen. can't check for equality though - last line(s) could be blank */
+  return;
+}
+
+static void
+utest_Read(void)
+{
+  char        msg[]       = "utest_Read() failed";
+  char        tmpfile[32] = "esltmpXXXXXX";
+  int32_t     ntotal      = 1000000;
+  int32_t     testi       = 456789; /* arbitrary */
+  esl_pos_t   testoffset  = testi * sizeof(int32_t);
+  int32_t     i, val;
+  FILE       *fp;
+  ESL_BUFFER *bf;
+  
+  if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg);
+  for (i = 0; i < 1000000; i++) 
+    fwrite(&i, sizeof(int32_t), 1, fp);
+  fclose(fp);
+
+  if (esl_buffer_OpenFile (tmpfile, &bf)   != eslOK) esl_fatal(msg);
+  if (esl_buffer_SetOffset(bf, testoffset) != eslOK) esl_fatal(msg);
+  for (i = testi; i < ntotal; i++)
+    {
+      if (esl_buffer_Read(bf, sizeof(int32_t), &val) != eslOK) esl_fatal(msg);
+      if (val != i)                                            esl_fatal(msg);
+    }
+  if (esl_buffer_Read(bf, sizeof(int32_t), &val) != eslEOF)    esl_fatal(msg);
+  esl_buffer_Close(bf);
+
+  remove(tmpfile);
+}
+
+
+static void
+utest_OpenFile(const char *tmpfile, int nlines)
+{
+  char        msg[] = "utest_OpenFile failed";
+  ESL_BUFFER *bf;
+
+  /* Normal errors */
+  if (esl_buffer_OpenFile("esltmpXYZXYZXYZ", &bf) != eslENOTFOUND || bf == NULL) esl_fatal(msg); else esl_buffer_Close(bf);
+}
+
+static void 
+utest_OpenStream(const char *tmpfile, int nlines)
+{
+  char        msg[] = "utest_OpenStream failed";
+  ESL_BUFFER *bf;
+
+  /* Exceptions */
+  esl_exception_SetHandler(&esl_nonfatal_handler);
+  if (esl_buffer_OpenStream(NULL, &bf) != eslEINVAL) esl_fatal(msg); else esl_buffer_Close(bf);
+  esl_exception_ResetDefaultHandler();
+}
+
+static void
+utest_OpenPipe(const char *tmpfile, int nlines)
+{
+  ESL_BUFFER *bf;
+  char        msg[]      = "utest_OpenPipe failed";
+  char        goodcmd[]  = "cat %s 2>/dev/null";
+  char        badcmd[]   = "./esltmpXYZXYZXYZ %s 2>/dev/null";
+
+  /* Normal errors */
+  if (esl_buffer_OpenPipe("esltmpXYZXYZXYZ", goodcmd, &bf) != eslENOTFOUND || bf == NULL) esl_fatal(msg); else esl_buffer_Close(bf);
+  if (esl_buffer_OpenPipe(tmpfile,           badcmd,  &bf) != eslFAIL      || bf == NULL) esl_fatal(msg); else esl_buffer_Close(bf);
+}
+
+
+#endif /* eslBUFFER_TESTDRIVE */
+
+/*****************************************************************
+ * 10. Test driver
+ *****************************************************************/
+
+#ifdef eslBUFFER_TESTDRIVE
+/* compile: gcc -g -Wall -I. -L. -o esl_buffer_utest -DeslBUFFER_TESTDRIVE esl_buffer.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_buffer_utest -DeslBUFFER_TESTDRIVE esl_buffer.c -leasel -lm
+ * run:     ./esl_buffer_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_buffer.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  {"-n",  eslARG_INT,   "10000", NULL, NULL, NULL, NULL, NULL, "set number of lines in line-based tests to <n>", 0},
+  {"-s",  eslARG_INT,       "0", NULL, NULL, NULL, NULL, NULL, "set random number seed to <n>",                  0},
+  {"-v",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose commentary/output",                 0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for buffer module";
+
+int
+main(int argc, char **argv)
+{
+  char            msg[]       = "esl_buffer unit test driver failed";
+  ESL_GETOPTS    *go          = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r           = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s"));
+  ESL_BUFFER     *bf          = NULL;
+  ESL_BUFFER     *bftmp       = NULL;
+  FILE           *fp          = NULL;
+  int             be_verbose  = esl_opt_GetBoolean(go, "-v");
+  int             nlines      = esl_opt_GetInteger(go, "-n");
+  char            tmpfile[32] = "esltmpXXXXXX";
+  char            cmdfmt[]    = "cat %s 2>/dev/null";
+  int             bufidx,  nbuftypes;
+  int             testidx, ntesttypes;
+  int             status;
+
+  create_testfile_lines(r, tmpfile, nlines);    
+  if (be_verbose) printf("created file %s; rng seed %" PRIu32 "\n", tmpfile, esl_randomness_GetSeed(r));
+
+  utest_OpenFile  (tmpfile, nlines);
+  utest_OpenStream(tmpfile, nlines);
+  utest_OpenPipe  (tmpfile, nlines);
+
+  utest_SetOffset (tmpfile, nlines);
+  utest_Read();
+
+  nbuftypes  = 7;
+  ntesttypes = 8;
+  for (bufidx = 0; bufidx < nbuftypes; bufidx++)
+    for (testidx = 0; testidx < ntesttypes; testidx++)
+      {
+	switch (bufidx) {
+	case 0:  if (esl_buffer_OpenFile  (tmpfile,                    &bf) != eslOK) esl_fatal(msg);  break;
+	case 1:  if (    buffer_OpenFileAs(tmpfile, eslBUFFER_ALLFILE, &bf) != eslOK) esl_fatal(msg);  break;
+	case 2:  if (    buffer_OpenFileAs(tmpfile, eslBUFFER_MMAP,    &bf) != eslOK) esl_fatal(msg);  break;
+	case 3:  if (    buffer_OpenFileAs(tmpfile, eslBUFFER_FILE,    &bf) != eslOK) esl_fatal(msg);  break;
+	case 4: 
+	  if ((fp = fopen(tmpfile, "rb"))    == NULL)  esl_fatal(msg);
+	  if (esl_buffer_OpenStream(fp, &bf) != eslOK) esl_fatal(msg);
+	  break;
+	case 5:
+	  if (esl_buffer_OpenPipe(tmpfile, cmdfmt, &bf) != eslOK) esl_fatal(msg);
+	  break;
+	case 6:
+	  if (esl_buffer_OpenFile(tmpfile, &bftmp) != eslOK) esl_fatal(msg);
+	  if (esl_buffer_SetAnchor(bftmp, 0)       != eslOK) esl_fatal(msg);
+	  while ( (status = esl_buffer_GetLine(bftmp, NULL, NULL)) == eslOK); /*empty loop, do nothing*/
+	  if (status != eslEOF) esl_fatal(msg);
+	  /* now bftmp->mem is a slurped file */
+	  if (esl_buffer_OpenMem(bftmp->mem, bftmp->n, &bf) != eslOK) esl_fatal(msg);
+	  break;
+	default: esl_fatal(msg);
+	}
+	
+	switch (testidx) {
+	case 0: utest_Get            (bf, nlines); break;
+	case 1: utest_GetLine        (bf, nlines); break;
+	case 2: utest_FetchLine      (bf, nlines); break;
+	case 3: utest_FetchLineAsStr (bf, nlines); break;
+	case 4: utest_GetToken       (bf, nlines); break;
+	case 5: utest_GetTokenWrapped(bf, nlines); break;
+	case 6: utest_FetchToken     (bf, nlines); break;
+	case 7: utest_FetchTokenAsStrWrapped(bf, nlines); break;
+	default: esl_fatal(msg);
+	}
+
+	//printf("allocation: %" PRId64 "\n", bf->balloc);
+
+	esl_buffer_Close(bf);                 bf    = NULL; 
+	if (fp)    { fclose(fp);              fp    = NULL; }
+	if (bftmp) { esl_buffer_Close(bftmp); bftmp = NULL; }
+      }
+
+  esl_randomness_Destroy(r);
+  esl_getopts_Destroy(go);
+  remove(tmpfile);
+  return 0;
+}
+#endif /* eslBUFFER_TESTDRIVE */
+  
+
+/*****************************************************************
+ * 11. Examples.
+ *****************************************************************/
+
+/* compile: gcc -g -Wall -I. -L. -o esl_buffer_example -DeslBUFFER_EXAMPLE esl_buffer.c -leasel -lm
+ * run:     ./esl_buffer_example <file>
+ */
+#ifdef eslBUFFER_EXAMPLE
+/*::cexcerpt::buffer_example::begin::*/
+#include "easel.h"
+#include "esl_buffer.h"
+
+#include <stdio.h>
+
+int main(int argc, char **argv)
+{
+  char       *filename  = argv[1];
+  int         xcount    = 0;
+  int         linecount = 0;
+  ESL_BUFFER *bf;
+  char       *p;
+  esl_pos_t   n, i;
+  int         status;
+
+  status = esl_buffer_Open(filename, "TESTDIR", &bf);
+  if      (status == eslENOTFOUND) esl_fatal("open failed: %s",   bf->errmsg);
+  else if (status == eslFAIL)      esl_fatal("gzip -dc failed: %s", bf->errmsg);
+  else if (status != eslOK)        esl_fatal("open failed with error code %d", status);
+  
+  while (( status = esl_buffer_GetLine(bf, &p, &n)) == eslOK) 
+    {
+      linecount++;
+      for (i = 0; i < n; i++)
+	if (p[i] == 'x') xcount++;
+    }
+  if (status != eslEOF) esl_fatal("file %s: expected EOF, got code %d", bf->filename, status);
+
+  esl_buffer_Close(bf);
+  printf("Counted %d x's in %d lines.\n", xcount, linecount);
+  return 0;
+}
+/*::cexcerpt::buffer_example::end::*/
+#endif /*eslBUFFER_EXAMPLE*/
+  
+
+
+#ifdef eslBUFFER_EXAMPLE2
+/*::cexcerpt::buffer_example2::begin::*/
+#include "easel.h"
+#include "esl_buffer.h"
+
+#include <stdio.h>
+
+int main(int argc, char **argv)
+{
+  char       *filename = argv[1];
+  int         xcount   = 0;
+  int         tokcount = 0;
+  ESL_BUFFER *bf;
+  char       *tok;
+  esl_pos_t   n, i;
+  int         status;
+
+  status = esl_buffer_Open(filename, "TESTDIR", &bf);
+  if      (status == eslENOTFOUND) esl_fatal("open failed: %s",   bf->errmsg);
+  else if (status == eslFAIL)      esl_fatal("gzip -dc failed: %s", bf->errmsg);
+  else if (status != eslOK)        esl_fatal("open failed with error code %d", status);
+  
+  while ( (status = esl_buffer_GetToken(bf, " \t\r\n", &tok, &n)) == eslOK)
+    {
+      tokcount++;
+      for (i = 0; i < n; i++)
+	if (tok[i] == 'x') xcount++;
+    }
+  if (status != eslEOF) esl_fatal("did not see expected EOF; code %d instead", status);
+  esl_buffer_Close(bf);
+  printf("Counted %d x's in %d words\n", xcount, tokcount);
+  return 0;
+}
+/*::cexcerpt::buffer_example2::end::*/
+#endif /*eslBUFFER_EXAMPLE2*/
+
+
+
+/* compile: gcc -g -Wall -I. -L. -o esl_buffer_example3 -DeslBUFFER_EXAMPLE3 esl_buffer.c -leasel -lm
+ * run:     ./esl_buffer_example3 <file>
+ */
+#ifdef eslBUFFER_EXAMPLE3
+/*::cexcerpt::buffer_example3::begin::*/
+#include "easel.h"
+#include "esl_buffer.h"
+
+#include <stdio.h>
+
+int main(int argc, char **argv)
+{
+  char       *filename = argv[1];
+  int         xcount    = 0;
+  int         tokcount  = 0;
+  int         linecount = 0;
+  ESL_BUFFER *bf;
+  char       *tok;
+  esl_pos_t   n,i;
+  int         status;
+
+  status = esl_buffer_Open(filename, "TESTDIR", &bf);
+  if      (status == eslENOTFOUND) esl_fatal("open failed: %s",     bf->errmsg);
+  else if (status == eslFAIL)      esl_fatal("gzip -dc failed: %s", bf->errmsg);
+  else if (status != eslOK)        esl_fatal("open failed with error code %d", status);
+  
+  while (1) 
+    {
+      status = esl_buffer_GetToken(bf, " \t", &tok, &n);
+      if      (status == eslOK)  
+	{
+	  tokcount++;  
+	  for (i = 0; i < n; i++)
+	    if (tok[i] == 'x') xcount++;
+	}
+      else if (status == eslEOL) linecount++;
+      else if (status == eslEOF) break;
+    }
+  esl_buffer_Close(bf);
+  printf("Counted %d x's in %d words on %d lines\n", xcount, tokcount, linecount);
+  return 0;
+}
+/*::cexcerpt::buffer_example3::end::*/
+#endif /*eslBUFFER_EXAMPLE3*/
+
+
+
+
+/* compile: gcc -g -Wall -I. -L. -o esl_buffer_example4 -DeslBUFFER_EXAMPLE4 esl_buffer.c -leasel -lm
+ * run:     ./esl_buffer_example4 <file>
+ */
+#ifdef eslBUFFER_EXAMPLE4
+/*::cexcerpt::buffer_example4::begin::*/
+#include "easel.h"
+#include "esl_buffer.h"
+
+#include <stdio.h>
+#include <string.h>
+
+int main(void)
+{
+  char        tmpfile[32] = "esltmpXXXXXX";
+  char        s1[]        = "hello world!";
+  char        s2[]        = "... and goodbye!";
+  char        buf[256];
+  int         n;
+  FILE       *fp;
+  ESL_BUFFER *bf;
+  int         status;
+
+  esl_tmpfile_named(tmpfile, &fp);
+  n = strlen(s1)+1; fwrite(&n, sizeof(int), 1, fp); fwrite(s1, sizeof(char), n, fp);
+  n = strlen(s2)+1; fwrite(&n, sizeof(int), 1, fp); fwrite(s2, sizeof(char), n, fp);
+  fclose(fp);
+
+  status = esl_buffer_Open(tmpfile, NULL, &bf);
+  if      (status == eslENOTFOUND) esl_fatal("open failed: %s",     bf ? bf->errmsg : "(no other diagnostics available)");
+  else if (status == eslFAIL)      esl_fatal("gzip -dc failed: %s", bf ? bf->errmsg : "(no other diagnostics available)");
+  else if (status != eslOK)        esl_fatal("open failed with error code %d", status);
+  
+  esl_buffer_Read(bf, sizeof(int), &n);
+  esl_buffer_Read(bf, sizeof(char) * n, buf);
+  puts(buf);
+
+  esl_buffer_Read(bf, sizeof(int), &n);
+  esl_buffer_Read(bf, sizeof(char) * n, buf);
+  puts(buf);
+  
+  esl_buffer_Close(bf);
+  return 0;
+}
+/*::cexcerpt::buffer_example4::end::*/
+#endif /*eslBUFFER_EXAMPLE4*/
+
+
+
+
+/* compile: gcc -g -Wall -I. -L. -o esl_buffer_example5 -DeslBUFFER_EXAMPLE5 esl_buffer.c -leasel -lm
+ * run:     ./esl_buffer_example5 <fastafile>
+ */
+#ifdef eslBUFFER_EXAMPLE5
+/*::cexcerpt::buffer_example5a::begin::*/
+#include "easel.h"
+#include "esl_buffer.h"
+
+#include <stdio.h>
+#include <ctype.h>
+
+int
+example_read_fasta(ESL_BUFFER *bf, char **ret_name, char **ret_desc, char **ret_seq, int *ret_seqlen)
+{
+  char      *seqname = NULL;
+  char      *seqdesc = NULL;
+  char      *seq     = NULL;
+  esl_pos_t  seqlen  = 0;
+  esl_pos_t  salloc  = 0;
+  char      *p;
+  void      *tmp;
+  esl_pos_t  n, i;
+  int        status;
+
+  if ((status = esl_buffer_Get(bf, &p, &n)) != eslOK) goto ERROR; /* includes normal EOF */
+  if (p[0] != '>') ESL_XFAIL(eslEINVAL, bf->errmsg, "Expected FASTA record to start with >");
+  esl_buffer_Set(bf, p, 1);
+
+  status = esl_buffer_FetchTokenAsStr(bf, " \t", &seqname, NULL);
+  if      (status == eslEOF) ESL_XFAIL(eslEINVAL, bf->errmsg, "Premature eof while trying to parse sequence name");
+  else if (status == eslEOL) ESL_XFAIL(eslEINVAL, bf->errmsg, "No sequence name found");
+
+  status = esl_buffer_FetchLineAsStr(bf, &seqdesc, NULL);
+  if (status == eslEOF) goto DONE; /* weird but ok. name, no desc, and a blank sequence. */
+
+  ESL_ALLOC(seq, sizeof(char) * 256);
+  salloc = 256;
+
+  while (esl_buffer_GetLine(bf, &p, &n) == eslOK)
+    {
+      if (p[0] == '>') { esl_buffer_Set(bf, p, 0); break; }
+
+      if (seqlen+n+1 > salloc) { 
+	ESL_RALLOC(seq, tmp, sizeof(char) * (seqlen+n+1));  
+	salloc = seqlen+n+1; 
+      }
+
+      for (i = 0; i < n; i++) {
+	if (! isspace(p[i])) { seq[seqlen++] = p[i]; }
+      }
+    }
+    
+ DONE:
+  seq[seqlen] = '\0';
+  *ret_name   = seqname;
+  *ret_desc   = seqdesc;
+  *ret_seq    = seq;
+  *ret_seqlen = seqlen;
+  return eslOK;
+
+ ERROR:
+  if (seqname) free(seqname);  *ret_name   = NULL;
+  if (seqdesc) free(seqdesc);  *ret_desc   = NULL;
+  if (seq)     free(seq);      *ret_seq    = NULL;
+  *ret_seqlen = 0;
+  return status;
+}
+/*::cexcerpt::buffer_example5a::end::*/
+
+/*::cexcerpt::buffer_example5b::begin::*/
+int
+main(int argc, char **argv)
+{
+  char       *filename = argv[1];
+  ESL_BUFFER *bf;
+  char       *seqname, *seqdesc, *seq;
+  int         seqlen;
+  int         status;
+
+  status = esl_buffer_Open(filename, "TESTDIR", &bf);
+  if      (status == eslENOTFOUND) esl_fatal("open failed: %s",     bf ? bf->errmsg : "(no other diagnostics available)");
+  else if (status == eslFAIL)      esl_fatal("gzip -dc failed: %s", bf ? bf->errmsg : "(no other diagnostics available)");
+  else if (status != eslOK)        esl_fatal("open failed with error code %d", status);
+
+  while ( (status = example_read_fasta(bf, &seqname, &seqdesc, &seq, &seqlen)) == eslOK)
+    {
+      printf("sequence: %20s  length: %6d   description: %s\n", seqname, seqlen, seqdesc);
+      free(seqname);
+      free(seqdesc);
+      free(seq);
+    }
+  if (status != eslEOF) esl_fatal("bad FASTA format: %s", bf->errmsg);
+  esl_buffer_Close(bf);
+  return 0;
+}
+/*::cexcerpt::buffer_example5b::end::*/
+#endif /*eslBUFFER_EXAMPLE5*/
+
+
+
+/* compile: gcc -g -Wall -I. -L. -o esl_buffer_example6 -DeslBUFFER_EXAMPLE6 esl_buffer.c -leasel -lm
+ * run:     ./esl_buffer_example6 <alifile>
+ */
+#ifdef eslBUFFER_EXAMPLE6
+/*::cexcerpt::buffer_example6a::begin::*/
+#include "easel.h"
+#include "esl_buffer.h"
+
+#include <stdio.h>
+#include <ctype.h>
+
+int
+example_read_lineblock(ESL_BUFFER *bf, char ***ret_lines, esl_pos_t **ret_lens, esl_pos_t *ret_nlines)
+{
+  char      **lines  = NULL;
+  esl_pos_t  *lens   = NULL;
+  esl_pos_t   nlines = 0;
+  char       *p;
+  esl_pos_t   n;
+  esl_pos_t   start_offset;
+  int         status;
+
+  /* skip blank lines */
+  do {
+    start_offset = esl_buffer_GetOffset(bf);
+    if ( (status = esl_buffer_GetLine(bf, &p, &n)) != eslOK) goto ERROR; /* includes normal EOF */
+  } while (esl_memspn(p, n, " \t\r\n") == n);
+  /* now p[0..n-1] is a non-blank line, start_offset is offset of p[0], point's on start of next line after it */
+  
+  /* anchor stably at start of line block */
+  esl_buffer_SetStableAnchor(bf, start_offset);
+
+  /* set pointers to non-blank lines */
+  do {
+    ESL_REALLOC(lines, sizeof(char *)    * (nlines+1));
+    ESL_REALLOC(lens,  sizeof(esl_pos_t) * (nlines+1));
+    
+    lines[nlines] = p;   // cppcheck complains about these assignments: "possible null pointer deference";
+    lens[nlines]  = n;   // but cppcheck is wrong. ESL_REALLOC will fail if lines[] or lens[] are NULL.
+    nlines++;
+  } while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK && esl_memspn(p, n, " \t\r\n") < n);
+  
+  /* now p[0] is on a blank line, and point is on start of next line
+   * after it.  you might be fine with that; or you might want to push
+   * the blank line back onto the parser. If so, you need to push
+   * the line back *before* raising the anchor, because the _Set() function
+   * is allowed to relocate the buffer's internal memory.
+   */
+  esl_buffer_Set(bf, p, 0);
+  esl_buffer_RaiseAnchor(bf, start_offset);
+
+  *ret_lines  = lines;
+  *ret_lens   = lens;
+  *ret_nlines = nlines;
+  return eslOK;
+
+ ERROR:
+  if (lines) free(lines);
+  if (lens)  free(lens);
+  *ret_lines  = NULL;
+  *ret_lens   = NULL;
+  *ret_nlines = 0;
+  return status;
+}
+/*::cexcerpt::buffer_example6a::end::*/
+
+/*::cexcerpt::buffer_example6b::begin::*/
+int
+main(int argc, char **argv)
+{
+  char       *filename = argv[1];
+  int         blockcount = 0;
+  int         linecount  = 0;
+  int         xcount     = 0;
+  int         i,j;
+  ESL_BUFFER *bf;
+  char      **lines;
+  esl_pos_t  *lens;
+  esl_pos_t   nlines;
+  int         status;
+
+  status = esl_buffer_Open(filename, "TESTDIR", &bf);
+  if      (status == eslENOTFOUND) esl_fatal("open failed: %s",   bf->errmsg);
+  else if (status == eslFAIL)      esl_fatal("gzip -dc failed: %s", bf->errmsg);
+  else if (status != eslOK)        esl_fatal("open failed with error code %d", status);
+
+  while ( (status = example_read_lineblock(bf, &lines, &lens, &nlines)) == eslOK)
+    {
+      blockcount++;
+      linecount += nlines;
+      for (i = 0; i < nlines; i++)
+	for (j = 0; j < lens[i]; j++) 
+	  if (lines[i][j] == 'x') xcount++;
+
+      free(lines);
+      free(lens);
+    }
+  if (status != eslEOF) esl_fatal("bad MSA format: %s", bf->errmsg);
+  esl_buffer_Close(bf);
+  printf("Counted %d x's in %d blocks of %d total lines\n", xcount, blockcount, linecount);
+  return 0;
+}
+/*::cexcerpt::buffer_example6b::end::*/
+#endif /*eslBUFFER_EXAMPLE6*/
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_buffer.h b/esl_buffer.h
new file mode 100644
index 0000000..6180a2a
--- /dev/null
+++ b/esl_buffer.h
@@ -0,0 +1,111 @@
+/* An input parsing abstraction: an input buffer (file, stream, etc.)
+ */
+#ifndef eslBUFFER_INCLUDED
+#define eslBUFFER_INCLUDED
+
+#include <stdio.h>
+
+#define eslBUFFER_PAGESIZE      4096    /* default for b->pagesize                       */
+#define eslBUFFER_SLURPSIZE  4194304	/* switchover from slurping whole file to mmap() */
+
+enum esl_buffer_mode_e {
+  eslBUFFER_UNSET   = 0,
+  eslBUFFER_STREAM  = 1,  /* chunk in mem[0..n-1] = input[baseoffset..baseoffset-n-1];  balloc>0; offset>=0; fp open  */
+  eslBUFFER_CMDPIPE = 2,  /* chunk in mem[0..n-1] = input[baseoffset..baseoffset-n-1];  balloc>0; offset>=0; fp open  */
+  eslBUFFER_FILE    = 3,  /* chunk in mem[0..n-1] = input[baseoffset..baseoffset-n-1];  balloc>0; offset>=0; fp open  */
+  eslBUFFER_ALLFILE = 4,  /* whole file in mem[0..n-1];  balloc=0; offset=0;  fp=NULL  */
+  eslBUFFER_MMAP    = 5,  /* whole file in mem[0..n-1];  balloc=0; offset=0;  fp=NULL  */
+  eslBUFFER_STRING  = 6   /* whole str in mem[0..n-1];   balloc=0; offset=0;  fp=NULL  */
+};
+
+typedef struct {
+  char      *mem;	          /* the buffer                                            */
+  esl_pos_t  n;		          /* curr buf length; mem[0..n-1] contains valid bytes     */
+  esl_pos_t  balloc;              /* curr buf alloc;  mem[0..balloc-1] may be used         */
+  esl_pos_t  pos;	          /* curr buf parse position; n-pos = # of parseable bytes */
+  esl_pos_t  baseoffset;          /* offset of byte mem[0] in the stream                   */
+
+  esl_pos_t  anchor;	          /* buf[anchor..n-1] safe from overwrite [-1=unset]       */
+  int        nanchor;		  /* number of anchors set at <anchor>                     */
+
+  FILE      *fp;	          /* open stream; NULL if already entirely in memory       */
+  char      *filename;	          /* for diagnostics. filename; or NULL (stdin, string)    */
+  char      *cmdline;		  /* for diagnostics. NULL, or cmd for CMDPIPE             */
+
+  esl_pos_t  pagesize;	          /* size of new <fp> reads. Guarantee: n-pos >= pagesize  */
+
+  char     errmsg[eslERRBUFSIZE]; /* error message storage                                 */
+  enum esl_buffer_mode_e mode_is; /* mode (stdin, cmdpipe, file, allfile, mmap, string)    */
+} ESL_BUFFER;
+
+
+/* 1. The ESL_BUFFER object: opening/closing.  */
+extern int esl_buffer_Open      (const char *filename, const char *envvar, ESL_BUFFER **ret_bf);
+extern int esl_buffer_OpenFile  (const char *filename,                     ESL_BUFFER **ret_bf);
+extern int esl_buffer_OpenPipe  (const char *filename, const char *cmdfmt, ESL_BUFFER **ret_bf);
+extern int esl_buffer_OpenMem   (const char *p,         esl_pos_t  n,      ESL_BUFFER **ret_bf);
+extern int esl_buffer_OpenStream(FILE *fp,                                 ESL_BUFFER **ret_bf);
+extern int esl_buffer_Close(ESL_BUFFER *bf);
+
+/* 2. Positioning and anchoring an ESL_BUFFER. */
+extern esl_pos_t esl_buffer_GetOffset      (ESL_BUFFER *bf);
+extern int       esl_buffer_SetOffset      (ESL_BUFFER *bf, esl_pos_t offset);
+extern int       esl_buffer_SetAnchor      (ESL_BUFFER *bf, esl_pos_t offset);
+extern int       esl_buffer_SetStableAnchor(ESL_BUFFER *bf, esl_pos_t offset);
+extern int       esl_buffer_RaiseAnchor    (ESL_BUFFER *bf, esl_pos_t offset);
+
+/* 3. Raw access to the buffer */
+extern int esl_buffer_Get(ESL_BUFFER *bf, char **ret_p, esl_pos_t *ret_n);
+extern int esl_buffer_Set(ESL_BUFFER *bf, char  *p,     esl_pos_t  nused);
+
+/* 4. Line-based parsing */
+extern int esl_buffer_GetLine       (ESL_BUFFER *bf, char **opt_p, esl_pos_t *opt_n);
+extern int esl_buffer_FetchLine     (ESL_BUFFER *bf, char **opt_p, esl_pos_t *opt_n);
+extern int esl_buffer_FetchLineAsStr(ESL_BUFFER *bf, char **opt_s, esl_pos_t *opt_n);
+
+/* 5. Token-based parsing */
+extern int esl_buffer_GetToken       (ESL_BUFFER *bf, const char *sep, char **opt_p, esl_pos_t *opt_n);
+extern int esl_buffer_FetchToken     (ESL_BUFFER *bf, const char *sep, char **opt_p, esl_pos_t *opt_n);
+extern int esl_buffer_FetchTokenAsStr(ESL_BUFFER *bf, const char *sep, char **opt_p, esl_pos_t *opt_n);
+
+/* 6. Binary (fread-like) parsing */
+extern int esl_buffer_Read(ESL_BUFFER *bf, size_t nbytes, void *p);
+
+
+
+/* Replaces functionality of esl_fileparser module as follows
+ * 
+ *  esl_fileparser_Open()             -> esl_buffer_Open()
+ *  esl_fileparser_Create()           -> esl_buffer_OpenStream()
+ *  esl_fileparser_CreateMapped()     -> esl_buffer_OpenMem()
+ *  esl_fileparser_SetCommentChar()   -> esl_buffer_SetCommentChar()
+ *  esl_fileparser_GetToken()         -> esl_buffer_GetToken()
+ *  esl_fileparser_NextLine()         -> do { esl_buffer_GetLine() } while esl_line_IsBlank();
+ *  esl_fileparser_NextLinePeeked()   -> unneeded. esl_buffer_Peek*() functionality, syntax different
+ *  esl_fileparser_GetTokenOnLine()   -> unneeded. esl_buffer_GetToken() has an idiom.
+ *  esl_fileparser_GetRemainingLine() -> esl_buffer_GetLine()
+ *  esl_fileparser_Destroy()          -> esl_buffer_Close()
+ *  esl_fileparser_Close()            -> esl_buffer_Close()
+ */
+
+/* Replaces functionality of esl_recorder module as follows:
+ * 
+ *  esl_recorder_Create()             -> esl_buffer_OpenStream()
+ *  esl_recorder_ResizeTo()  
+ *  esl_recorder_GetFirst()           -> 
+ *  esl_recorder_GetLast()            -> 
+ *  esl_recorder_GetCurrent()         ->
+ *  esl_recorder_GetNext()            -> 
+ *  esl_recorder_Destroy()            -> esl_buffer_Close()
+ *  esl_recorder_Read()               -> esl_buffer_GetLine()
+ *  esl_recorder_Position()
+ *  esl_recorder_MarkBlock()
+ *  esl_recorder_UnmarkBlock()
+ *  esl_recorder_GetBlock()
+ *  
+ */
+
+#endif	/*eslBUFFER_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_buffer.tex b/esl_buffer.tex
new file mode 100644
index 0000000..a52a7f9
--- /dev/null
+++ b/esl_buffer.tex
@@ -0,0 +1,456 @@
+The \eslmod{buffer} module provides an abstract layer for building
+input parsers. Different types of input -- including files, standard
+input, piped output from executed commands, C strings, and raw memory
+-- can be handled efficiently in a single API and a single object, an
+\ccode{ESL\_BUFFER}. 
+%The API is summarized in Table~\ref{tbl:buffer_api}.
+
+The main rationale for \eslmod{buffer} is to enable multipass parsing
+of any input, even a nonrewindable stream or pipe. A canonical problem
+in sequence file parsing is that we need to know both the format (
+FASTA or Genbank, for instance) and the alphabet (protein or nucleic
+acid, for instance) in order to parse Easel-digitized sequence data
+records. To write ``smart'' parsers that automagically determine the
+file format and alphabet, so programs work transparently on lots of
+different file types without users needing to specify them, we need
+three-pass parsing: one pass to read raw data and determine the
+format, a second pass to parse the format for sequence data and
+determine its alphabet, and finally the actual parsing of digitized
+sequences. Multiple pass parsing of a nonrewindable stream, such as
+standard input or the output of a \ccode{gunzip} call, isn't possible
+without extra support. The \eslmod{buffer} module standardizes that
+support for all Easel input.
+
+\subsection{Examples of using the buffer API}
+
+Here's an example of using \eslmod{buffer} to read a file line by
+line:
+
+\input{cexcerpts/buffer_example}
+
+This shows how to open an input, get each line sequentially, do
+something to each line (here, count the number of x's), and close the
+input.  To compile this example, then run it on a file (any file would
+do, but here, \ccode{esl\_buffer.c} itself):
+
+\user{gcc -I. -o esl\_buffer\_example -DeslBUFFER\_EXAMPLE esl\_buffer.c easel.c -lm}
+\user{./esl\_buffer\_example esl\_buffer.c}
+\response{Counted 181 x's in 3080 lines.}
+
+The most important thing to notice here is that
+\ccode{esl\_buffer\_Open()} function implements a standard Easel idiom
+for finding input sources. If the \ccode{filename} argument is a
+single dash '-', it will read from \ccode{stdin}. If the
+\ccode{filename} argument ends in \ccode{.gz}, it will assume the file
+is a \ccode{gzip}-compressed input, and it will decompress it on the
+fly with \ccode{gzip -dc} before reading it. If it does not find the
+\ccode{filename} relative to the current directory, and if the second
+argument (here \ccode{"TESTDIR"}) is non-\ccode{NULL}, it looks at the
+setting of an environment variable \ccode{envvar}, which should
+contain a colon-delimited list of directories to search to try to find
+\ccode{filename}. Therefore all of the following commands will work
+and give the same result:
+
+\begin{userchunk}
+% ./esl_buffer_example esl_buffer.c
+\end{userchunk}
+
+\begin{userchunk}
+  % cat esl_buffer.c | ./esl_buffer_example -
+\end{userchunk}
+
+\begin{userchunk}
+  % cp esl_buffer.c foo
+  % gzip foo
+  % ./esl_buffer_example foo.gz
+\end{userchunk}
+
+\begin{userchunk}
+  % cp esl_buffer.c ${HOME}/mydir2/baz
+  % export TESTDIR=${HOME}/mydir1:${HOME}/mydir2
+  % ./esl_buffer_example baz
+\end{userchunk}
+
+This idiomatic flexibility comes in handy when using biological data.
+Data are are often kept in standard directories on systems (for
+example, we maintain a symlink \ccode{/misc/data0/databases/Uniprot}
+on ours), so having applications look for directory path listings in
+standardized environment variables can help users save a lot of typing
+of long paths. Data files can be big, so it's convenient to be able to
+compress them and not have to decompress them to use them. It's
+convenient to have applications support the power of using UNIX
+command invocations in pipes, chaining the output of one command into
+the input of another, so it's nice to automatically have any
+Easel-based application read from standard input.
+
+A couple of other things to notice about this example:
+
+\begin{enumerate}
+\item If the \ccode{esl\_buffer\_Open()} fails, it still returns a
+  valid \ccode{ESL\_BUFFER} structure, which contains nothing except a
+  user-directed error message \ccode{bf->errmsg}. If you were going to
+  continue past this error, you'd want to \ccode{esl\_buffer\_Close()}
+  the buffer.
+
+\item \ccode{esl\_buffer\_GetLine()} returns a pointer to the start of
+  the next line \ccode{p}, and its length in chars \ccode{n}
+  (exclusive of any newline character). It does \emph{not} return a
+  string - \ccode{p[n]} is \emph{not} a \ccode{NUL} byte
+  \verb+\0+. Standard C string functions, which expect
+  \ccode{NUL}-terminated strings, can't be used on \ccode{p}. The
+  reason is efficiency: the \ccode{ESL\_BUFFER} is potentially looking
+  at a read-only exact image of the input, and
+  \ccode{esl\_buffer\_GetLine()} is not wasting any time making a copy
+  of it. If you need a string, with an appended \verb+\0+ in the
+  right place, see \ccode{esl\_buffer\_FetchLineAsStr()}.
+\end{enumerate}
+  
+\subsubsection{Reading tokens}
+
+Because \ccode{ESL\_BUFFER} prefers to give you pointers into a
+read-only image of the input, the standard C \ccode{strtok()} function
+can't be used to define tokens (whitespace-delimited fields, for
+example), because \ccode{strtok()} tries to write a \verb+\0+ byte
+after each token it defines. Therefore \ccode{ESL\_BUFFER} provides
+its own token parsing mechanism. Depending on whether or not you
+include newline characters (\verb+\r\n+) in the list of separator
+(delimiter) characters, it either ignores newlines altogether, or it
+detects newlines separately and expects to find a known number of
+tokens per line.
+
+For example, our x counting program could be implemented to parse
+every token instead of every line:
+
+\input{cexcerpts/buffer_example2}
+
+\user{gcc -I. -o esl\_buffer\_example2 -DeslBUFFER\_EXAMPLE2 esl\_buffer.c easel.c -lm}
+\user{./esl\_buffer\_example2 esl\_buffer.c}
+\response{Counted 181 x's in 14141 words.}
+
+In the \ccode{esl\_buffer\_GetToken()} call, including \verb+\r\n+
+with \verb+" \t"+ in the separators causes newlines to be treated like
+delimiters like any space or tab character. If you omit \verb+\r\n+
+newline characters from the separators, then the parser detects them
+specially anyway; when it sees a newline instead of a token, it
+returns \ccode{eslEOL} and sets the point to the next character
+following the newline. For example, we can count both lines and
+tokens:
+
+\input{cexcerpts/buffer_example3}
+
+\user{gcc -I. -o esl\_buffer\_example3 -DeslBUFFER\_EXAMPLE3 esl\_buffer.c easel.c -lm}
+\user{./esl\_buffer\_example3 esl\_buffer.c}
+\response{Counted 181 x's in 14141 words on 3080 lines.}
+
+What happens if the last line in a text file is missing its terminal
+newline? In the example above, the number of lines would be one fewer;
+the nonterminated last line wouldn't be
+counted. \ccode{esl\_buffer\_GetToken()} would return \ccode{eslEOF}
+on the last line of the file, rather than \ccode{eslEOL} followed by
+\ccode{eslEOF} at its next call as it'd do if the newline were there.
+
+
+\subsubsection{Reading fixed-width binary input}
+
+You can also read fixed-width binary input directly into storage,
+including scalar variables, using the \ccode{esl\_buffer\_Read()}
+call. This is similar to C's \ccode{fread()}:
+
+\input{cexcerpts/buffer_example4}
+
+The \ccode{Read()} call needs to know exactly how many bytes \ccode{n}
+it will read. For variable-width binary input, see the
+\ccode{esl\_buffer\_Get()}/\ccode{esl\_buffer\_Set()} calls.
+
+In fact all inputs are treated by \ccode{ESL\_BUFFER} as binary
+input. That is, platform-dependent newlines are not converted
+automatically to C \verb+\n+ characters, as would happen when using
+the C \ccode{stdio.h} library to read an input stream in ``text
+mode''. You can freely mix different types of \ccode{esl\_buffer\_*}
+parsing calls as you see appropriate.
+
+
+\subsubsection{A more complicated example, a FASTA parser}
+
+An example of a simple FASTA parsing function:
+
+\input{cexcerpts/buffer_example5a}
+
+and an example of using that function in a program:
+
+\input{cexcerpts/buffer_example5b}
+
+One thing to note here is the use of \ccode{esl\_buffer\_Set()} to
+push characters back into the parser. For example, when we look for
+the starting '>', we do a raw \ccode{esl\_buffer\_Get()}, look at the
+first character, then call \ccode{esl\_buffer\_Set()} with
+\ccode{nused=1} to tell the parser we used 1 character of what it gave
+us. This is an idiomatic usage of the
+\ccode{esl\_buffer\_Get()}/\ccode{esl\_buffer\_Set()} pair.  The
+\ccode{esl\_buffer\_Get()} call doesn't even move the point until the
+companion \ccode{esl\_buffer\_Set()} tells it where to move to.
+
+The other idiomatic use of \ccode{esl\_buffer\_Set()} is to implement
+a ``peek'' at a next line or a next token, using a
+\ccode{esl\_buffer\_GetLine()}/\ccode{esl\_buffer\_Set()} or
+\ccode{esl\_buffer\_GetToken()}/\ccode{esl\_buffer\_Set()}
+combination. You see this when we're in the sequence reading loop, we
+get a line, and we want to peek at its first character. If it's a '>'
+we're seeing the start of the next sequence, so we want to return
+while leaving the point on the '>'. To do this, we use
+\ccode{esl\_buffer\_GetLine()} to get the line, and if the first char
+is a '>' we use \ccode{esl\_buffer\_Set()} to push the line pointer
+(with 0 used characters) back to the parser.
+
+You can also see examples here of using
+\ccode{esl\_buffer\_FetchTokenAsStr()}
+\ccode{esl\_buffer\_FetchLineAsStr()} to copy the name and description
+directly to allocated, \verb+\0+-terminated C strings. Note how they
+interact: because \ccode{esl\_buffer\_FetchTokenAsStr()} moves the
+point past any trailing separator characters to the start of the next
+token, and because \ccode{esl\_buffer\_FetchLineAsStr()} doesn't need
+the point to be at the start of a line, the
+\ccode{esl\_buffer\_FetchLineAsStr()} call finds the description
+without leading spaces or trailing newline (but with any trailing
+spaces).
+
+
+
+
+
+
+
+
+
+
+
+
+      
+
+
+
+
+
+\subsection{Using anchors: caller-defined limits on random access}
+
+The naive way to enable random access on a sequential stream is to
+slurp the whole stream into memory. If the stream is large, this may
+be very memory inefficient. Many parsers do not need full random
+access, but instead need a limited form of it -- for instance, the
+three-pass case of determining format and alphabet from the start of a
+sequence file. \ccode{ESL\_BUFFER} allows the caller to define an
+\emph{anchor} to define a start point in the input that is not allowed
+to go away until the caller says so. 
+
+Setting an anchor declares that \ccode{mem[anchor..n-1]} is not be
+overwritten by new input reads. A new input read may first relocate
+(``reoffset'') \ccode{mem[anchor..n-1]} to \ccode{mem[0..n-anchor-1]}
+in order to use its current allocation efficiently. Setting an anchor
+may therefore cause \ccode{mem} to be reoffset and/or reallocated, and
+\ccode{balloc} may grow, if the buffer is not large enough to hold
+everything starting from the \ccode{anchor} position. When no anchors
+are set, \ccode{mem} will not be reoffset or reallocated.
+
+If we set an anchor at offset 0 in the input, then the entire input
+will be progressively slurped into a larger and larger allocation of
+memory as we read sequentially. We are guaranteed to be able to
+reposition the buffer anywhere from the anchor to n-1, even in a
+normally nonrewindable, nonpositionable stream. If we've read enough
+to determine what we need (format, alphabet...), we can release the
+anchor, and the buffer's memory usage will stop growing.
+
+The functions that get a defined chunk of memory --
+\ccode{esl\_buffer\_GetLine()}, \ccode{esl\_buffer\_GetToken()}, and
+\ccode{esl\_buffer\_CopyBytes()} -- set an anchor at the start of the
+line, token, or chunk of bytes before they go looking for its end.
+This takes advantage of the anchor mechanism to make sure that the
+buffer will contain the entire line, token, or chunk of bytes, not just a
+truncated part.
+
+
+\subsection{Token-based parsing}
+
+A \esldef{token} is a substring consisting of characters not in a set
+of caller-defined \esldef{separator} characters. Typically, separator
+chararacters might be whitespace (\ccode{" \t"}).
+
+Additionally, newlines are always considered to be separators. Tokens
+cannot include newlines. 
+
+In token-based parsing, we can handle newlines in two ways. Sometimes
+we might know exactly how many tokens we expect on the line. Sometimes
+we don't care. 
+
+If the caller knows exactly how many tokens are expected on each line
+of the input, it should not include newline characters in its
+separator string. Now, if the caller asks for a token but no token
+remains on the line, it will see a special \ccode{eslEOL} return code
+(and the parser will be positioned at the next character after that
+newline). A caller can check for this deliberately with one last call
+to \ccode{esl\_buffer\_GetToken()} per line, to be sure that it sees
+\ccode{eslEOL} rather than an unexpected token.
+
+If the caller doesn't care how many tokens occur on each line, it
+should include newline characters (\verb+"\r\n"+) in the separator
+string. Then newlines are treated (and skipped) like any other
+separator.
+
+Starting from the current buffer position, the procedure for defining
+a token is:
+
+\begin{itemize}
+\item Skip characters in the separator string. (If end-of-file is
+      reached, return \ccode{eslEOF}.)
+\item If parser is on a newline, skip past it, and return
+      \ccode{eslEOL}. (Note that if the caller had newline characters
+      in the separator string, the first step already skipped any
+      newline, and no \ccode{eslEOL} return is possible.)
+\item Anchor at the current buffer position, \ccode{p}.
+\item From the current point, count characters \emph{not} in the
+      separator, \ccode{n}. (Expand/refill the buffer as needed.)
+\item Define the token: \ccode{p[0..n]}.
+\item Move the current point to the character following the token.
+\end{itemize}
+
+\subsection{Newline handling.}
+
+Easel assumes that newlines are encoded as \verb+\n+ (UNIX, Mac OS/X)
+or \verb+\r\n+ (MS Windows).
+
+All streams are opened as binary data. This is necessary to guarantee
+a one:one correspondence between data offsets in memory and data
+offsets on the filesystem, which we need for file positioning
+purposes. It is also necessary to guarantee that we can read text
+files that have been produced on a system other than the system we're
+reading them on (that we can read Windows text files on a Linux
+system, for example).\footnote{That is, the usual ANSI C convention of
+  reading/writing in ``text mode'' does not suffice, because it
+  assumes the newlines of the system we're on, not necessarily the
+  system that produced the file.}  However, it makes us responsible
+for handling system-specific definition of ``newline'' character(s) in
+ASCII text files.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+\subsection{Implementation notes (for developers)}
+
+\paragraph{The state guarantee.} An \ccode{ESL\_BUFFER} is exchangeable
+and sharable even amongst entirely different types of parsers because
+it is virtually always guaranteed to be in a well-defined
+state. Specifically:
+
+\begin{itemize}
+\item \ccode{bf->mem[bf->pos]} is ALWAYS positioned at the next byte
+      that a parser needs to parse, unless the buffer is at EOF. 
+
+\item There are ALWAYS at least \ccode{pagesize} bytes available to
+      parse, provided the input stream has not reached EOF.
+\end{itemize}
+
+
+\paragraph{State in different input type modes}
+
+There are six types (``modes'') of inputs:
+
+\begin{tabular}{ll}
+    Mode                    &   Description                                   \\ \hline
+\ccode{eslBUFFER\_STDIN}    &  Standard input.                                \\
+\ccode{eslBUFFER\_CMDPIPE}  &  Output piped from a command.                   \\
+\ccode{eslBUFFER\_FILE}     &  A \ccode{FILE} being streamed.                 \\
+\ccode{eslBUFFER\_ALLFILE}  &  A file entirely slurped into RAM.              \\
+\ccode{eslBUFFER\_MMAP}     &  A file that's memory mapped (\ccode{mmap()}).  \\
+\ccode{eslBUFFER\_STRING}   &  A string or memory.                            \\ \hline
+\end{tabular}
+
+The main difference between modes is whether the input is being read
+into the buffer's memory in chunks, or whether the buffer's memory 
+effectively contains the entire input:
+
+\begin{tabular}{lll}
+               &   \ccode{STDIN, CMDPIPE, FILE}                                                   & \ccode{ALLFILE, MMAP, STRING}        \\ 
+\ccode{mem}    &   input chunk: \ccode{mem[0..n-1]} is \ccode{input[baseoffset..baseoffset+n-1]}  & entire input: \ccode{mem[0..n-1]} is \ccode{input[0..n-1]}     \\
+\ccode{n}      &   current chunk size                                                             & entire input size (exclusive of \verb+\0+ on a \ccode{STRING}) \\
+\ccode{balloc} &   $>0$; \ccode{mem} is reallocatable                                             & 0; \ccode{mem} is not reallocated  \\
+\ccode{fp}     &   open; \ccode{feof(fp) = TRUE} near EOF                                         & \ccode{NULL}                        \\
+\ccode{baseoffset} &  offset of byte \ccode{mem[0]} in input                                      & 0                                  \\
+\end{tabular}
+
+
+\paragraph{Behavior at end-of-input (``end-of-file'', EOF).}
+
+The buffer can three kinds of states with respect to how near to EOF
+it is, as follows.
+
+During normal parsing, \ccode{bf->n - bf->pos >= bf->pagesize}:
+
+\begin{cchunk}
+  mem->  {[. . . . . . . . . . . . . . . .] x x x x}
+           ^ baseoffset    ^ pos            ^ n   ^ balloc
+                          [~ ~ ~ ~ ~ ~ ~ ~]
+                          n-pos >= pagesize
+\end{cchunk}
+
+As input is nearing EOF, and we are within last <pagesize> bytes,
+\ccode{bf->n - bf->pos < bf->pagesize}:
+
+\begin{cchunk}
+ mem->  {[. . . . . . . . . . . . . . . .] x x x x}
+          ^ baseoffset              ^ pos  ^ n   ^ balloc
+\end{cchunk}
+
+In modes where we might be reading input in streamed chunks
+(\ccode{eslBUFFER\_STDIN}, \ccode{eslBUFFER\_CMDPIPE}
+\ccode{eslBUFFER\_FILE}), \ccode{feof(bf->fp)} becomes \ccode{TRUE}
+when the buffer nears EOF.
+
+When the input is entirely EOF, then \ccode{bf->pos == bf->n}:
+
+\begin{cchunk}
+  mem->  {[. . . . . . . . . . . . . . . .] x x x x}
+           ^ baseoffset                     ^ n   ^ balloc
+                                            ^ pos
+\end{cchunk}
+
+
+
+
+
+\paragraph{ The use of \ccode{esl\_pos\_t}. }
+
+All integer variables for a position or length in memory or in a file
+are of type \ccode{esl\_pos\_t}. In POSIX, memory positions are an
+unsigned integer type \ccode{size\_t}, and file positions are a signed
+integer type \ccode{off\_t}. Easel wants to assure an integer type
+that we can safely cast to either \ccode{size\_t} or \ccode{off\_t},
+and in which we can safely store a negative number as a status flag
+(such as -1 for ``currently unset''). \ccode{esl\_pos\_t} is defined
+as the largest signed integer type that can be safely cast to
+\ccode{size\_t} or \ccode{off\_t}.
diff --git a/esl_cluster.c b/esl_cluster.c
new file mode 100644
index 0000000..c1385b3
--- /dev/null
+++ b/esl_cluster.c
@@ -0,0 +1,345 @@
+/* Generalized single linkage clustering.
+ * 
+ * Table of contents:
+ *     1. Single linkage clustering, generalized
+ *     2. Unit tests
+ *     3. Test driver
+ *     4. Example
+ *     5. Copyright and license
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+
+#include "easel.h"
+#include "esl_cluster.h"
+
+
+/*****************************************************************
+ * 1. Single linkage clustering, generalized
+ *****************************************************************/
+
+/* Function:  esl_cluster_SingleLinkage()
+ * Synopsis:  Generalized single linkage clustering.
+ * Incept:    SRE, Mon Jan  7 08:35:10 2008 [Janelia]
+ *
+ * Purpose:   Given a set of vertices, cluster them by single-linkage
+ *            clustering.
+ *            
+ *            The data describing each vertex is provided in an array
+ *            starting at <base>, consisting of <n> vertices. Each
+ *            vertex can be of any type (structure, scalar, pointer)
+ *            so long as each vertex element is of fixed size <n>
+ *            bytes.
+ *            
+ *            A pointer to the clustering function is provided in
+ *            <(*linkfunc)()>, and a pointer to any necessary
+ *            parameters for that function (for example, any
+ *            thresholds) is provided in <param>. 
+ *            
+ *            The <int (*linkfunc)()> must be written by the
+ *            caller. It takes arguments <(void *v1, void *v2, void
+ *            *param, int *ret_link)>: pointers to two vertices to
+ *            test for linkage and a pointer to any necessary
+ *            parameters, and it passes the answer <TRUE> (1) or
+ *            <FALSE> (0) back in <*ret_link>. The <(*linkfunc)()>
+ *            returns <eslOK> (0) on success, and a nonzero error code
+ *            on failure (see <easel.h> for a list of Easel's error
+ *            codes).
+ *            
+ *            The caller provides an allocated <workspace> with space
+ *            for at least <2n> integers. (Allocation in the caller
+ *            allows the caller to reuse memory and save
+ *            allocation/free cycles, if it has many rounds of
+ *            clustering to do.)
+ *            
+ *            The caller also provides allocated space in
+ *            <assignments> for <n> integers which, upon successful
+ *            return, contains assignments of the <0..n-1> vertices to
+ *            <0..C-1> clusters. That is, if <assignments[42] = 1>,
+ *            that means vertex 42 is assigned to cluster 1.  The
+ *            total number of clusters is returned in <ret_C>.
+ *            
+ *            The algorithm runs in $O(N)$ memory; importantly, it
+ *            does not require a $O(N^2)$ adjacency matrix. Worst case
+ *            time complexity is $O(N^2)$ (multiplied by any
+ *            additional complexity in the <(*linkfunc()> itself), but
+ *            the worst case (no links at all; <C=n> clusters) should
+ *            be unusual. More typically, time scales as about $N \log
+ *            N$. Best case is $N$, for a completely connected graph
+ *            in which all vertices group into one cluster. (More
+ *            precisely, best case complexity arises when vertex 0 is
+ *            connected to all other <n-1> vertices.)
+ *            
+ * Notes:    I don't know if this algorithm is published. I 
+ *           haven't seen it in graph theory books, but that might
+ *           be because it's so obvious that nobody's bothered.
+ *           
+ *           In brief, we're going to do a breadth-first search of the
+ *           graph, and we're going to calculate links on the fly
+ *           rather than precalculating them into a standard adjacency
+ *           matrix.
+ *           
+ *           While working, we keep two stacks of maximum length N:
+ *                a : list of vertices that are still unconnected.
+ *                b : list of vertices that we've connected to 
+ *                    in our current breadth level, but we haven't
+ *                    yet tested for other connections to a.
+ *           The current length (number of elements in) a and b are
+ *           kept in na, nb.
+ *                    
+ *           We store our results in an array of length N:
+ *                c : assigns each vertex to a component. for example
+ *                    c[4] = 1 means that vertex 4 is in component 1.
+ *                    nc is the number of components. Components
+ *                    are numbered from 0 to nc-1. We return c and nc
+ *                    to our caller.
+ *                    
+ *           The algorithm is:
+ *           
+ *           Initialisation: 
+ *                a  <-- all the vertices
+ *                na <-- N
+ *                b  <-- empty set
+ *                nb <-- 0
+ *                nc <-- 0
+ *                
+ *           Then:
+ *                while (a is not empty)
+ *                  pop a vertex off a, push onto b
+ *                  while (b is not empty)
+ *                    pop vertex v off b
+ *                    assign c[v] = nc
+ *                    for each vertex w in a:
+ *                       compare v,w. If w is linked to v, remove w
+ *                       from a, push onto b.
+ *                  nc++     
+ *           q.e.d. 
+ *
+ * Args:      base        - pointer to array of n fixed-size vertices to be clustered.
+ *            n           - number of vertices
+ *            size        - size of each vertex element
+ *            linkfunc    - pointer to caller's function for defining linked pairs
+ *            param       - pointer to any data that needs to be provided to <(*linkfunc)>
+ *            workspace   - caller provides at least 2n*sizeof(int) of workspace
+ *            assignments - RETURN: assignments to clusters (caller provides n*sizeof(int) space)
+ *            ret_C       - RETURN: number of clusters
+ *
+ * Returns:   <eslOK> on success; <assignments[0..n-1]> contains cluster assigments 
+ *            <0..C-1> for each vertex, and <*ret_C> contains the number of clusters
+ *            <C>
+ *
+ * Throws:    status codes from the caller's <(*linkfunc)> on failure; in this case, 
+ *            the contents of <*assignments> is undefined, and <*ret_C> is 0.
+ */
+int
+esl_cluster_SingleLinkage(void *base, size_t n, size_t size, 
+			  int (*linkfunc)(const void *, const void *, const void *, int *), void *param,
+			  int *workspace, int *assignments, int *ret_C)
+{
+  int na, *a = NULL;		/* stack of available vertices (still unconnected)       */
+  int nb, *b = NULL; 		/* stack of connected but unextended vertices            */
+  int nc, *c = NULL;		/* array of results: # clusters, assignments to clusters */
+  int v,w;			/* indices of vertices                                   */
+  int i;			/* counter over the available list                       */
+  int do_link;
+  int status;
+
+  a = workspace;
+  b = workspace + n;
+  c = assignments;
+
+   for (v = 0; v < n; v++) a[v] = n-v-1; /* initialize by pushing all vertices onto available list (backwards) */
+   na = n;
+   nb = 0;
+   nc = 0;
+
+   while (na > 0)		/* while vertices remain unexamined or unclustered: */
+     {
+       v = a[na-1]; na--;	/* pop a vertex off a, */
+       b[nb] = v;   nb++;	/* and push it onto b  */
+
+       while (nb > 0) 		/* while vertices remain unextended: */
+	 {
+	   v = b[nb-1]; nb--;	/* pop vertex off b        */
+	   c[v] = nc;		/* assign it to cluster nc */
+	   for (i = na-1; i >= 0; i--) /* backwards, because of deletion/swapping we do*/
+	     {
+	       if ((status = (*linkfunc)( (char *) base + v*size, (char *) base + a[i]*size, param, &do_link)) != eslOK) goto ERROR;
+	       if (do_link)
+		 {
+		   w = a[i]; a[i] = a[na-1]; na--; /* delete w from a    */
+		   b[nb] = w; nb++;                /* and push it onto b */
+		 }
+	     }
+	 }
+       nc++;
+     }
+ 
+   *ret_C = nc;
+   return eslOK;
+
+ ERROR:
+   *ret_C = 0;
+   return status;
+}
+/*------------------ end, single linkage clustering -------------*/
+
+
+
+
+
+
+/*****************************************************************
+ * 2. Unit tests
+ *****************************************************************/
+#ifdef eslCLUSTER_TESTDRIVE
+#include <math.h>
+
+static int
+test_linkage_definition(const void *v1, const void *v2, const void *param, int *ret_link)
+{
+  double a         = *((double *) v1); /* you have to cast a void ptr before you can dereference it */
+  double b         = *((double *) v2);
+  double threshold = *((double *) param);
+
+  *ret_link =  ((fabs(a-b) <= threshold) ? TRUE : FALSE);
+  return eslOK;
+}
+
+static void
+utest_singlelinkage(double *testdata, int n, double threshold, int *correct_assignment, int correct_C)
+{
+  int   *workspace;
+  int   *assignment;
+  int    C;
+  int    v;
+
+  if ((workspace  = malloc(sizeof(int) * n * 2)) == NULL) esl_fatal("allocation failed");
+  if ((assignment = malloc(sizeof(int) * n))     == NULL) esl_fatal("allocation failed");
+
+  if (esl_cluster_SingleLinkage(testdata, n, sizeof(double),
+				test_linkage_definition, &threshold,
+				workspace, assignment, &C) != eslOK) esl_fatal("single linkage clustering failed");
+  
+  if (C != correct_C) esl_fatal("expected %d clusters, but got %d\n", correct_C, C);
+  for (v = 0; v < n; v++) 
+    if (correct_assignment[v] != assignment[v])
+      esl_fatal("expected vertex %d to be in cluster %d, but it's in %d\n", v, correct_assignment[v], assignment[v]);
+
+  free(workspace);
+  free(assignment);
+}
+#endif /* eslCLUSTER_TESTDRIVE */
+
+
+
+
+/*****************************************************************
+ * 3. Test driver
+ *****************************************************************/
+#ifdef eslCLUSTER_TESTDRIVE
+/* gcc -g -Wall -o test -I. -L. -DeslCLUSTER_TESTDRIVE esl_cluster.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_cluster.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",          0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for cluster module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go      = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  double vertex[]      = { 1.0, 2.0, 4.0, 5.0, 7.0, 8.0 };
+  int    na1 = 3, a1[] = { 0,   0,   1,   1,   2,   2   };     /* correct answer when threshold = 1.5 */
+  int    na2 = 6, a2[] = { 0,   1,   2,   3,   4,   5   };     /* correct answer when threshold < 1.0 */ 
+  int    na3 = 1, a3[] = { 0,   0,   0,   0,   0,   0   };     /* correct answer when threshold > 2.0 */ 
+  int    n         = sizeof(vertex) / sizeof(double);
+
+  utest_singlelinkage(vertex, n, 1.5, a1, na1);
+  utest_singlelinkage(vertex, n, 0.5, a2, na2);
+  utest_singlelinkage(vertex, n, 2.5, a3, na3);
+
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /* eslCLUSTER_TESTDRIVE*/
+
+
+
+
+
+/*****************************************************************
+ * 4. Example
+ *****************************************************************/
+#ifdef eslCLUSTER_EXAMPLE
+/*::cexcerpt::cluster_example::begin::*/
+/* gcc -g -Wall -o example -I. -L. -DeslCLUSTER_EXAMPLE esl_cluster.c easel.c -lm  */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_cluster.h"
+
+static int
+my_linkage_definition(const void *v1, const void *v2, const void *param, int *ret_link)
+{
+  double a         = *((double *) v1); /* you have to cast a void ptr before you can dereference it */
+  double b         = *((double *) v2);
+  double threshold = *((double *) param);
+
+  *ret_link =  ((fabs(a-b) <= threshold) ? TRUE : FALSE);
+  return eslOK;
+}
+
+int
+main(int argc, char **argv)
+{
+  double vertex[]  = { 1.0, 2.0, 4.0, 5.0, 7.0, 8.0 };
+  int    n         = sizeof(vertex) / sizeof(double);
+  double threshold = 1.5;
+  int   *workspace;
+  int   *assignment;
+  int    C;
+  int    v;
+
+  workspace  = malloc(sizeof(int) * n * 2);
+  assignment = malloc(sizeof(int) * n);
+
+  esl_cluster_SingleLinkage(vertex, n, sizeof(double),
+			    my_linkage_definition, &threshold,
+			    workspace, assignment, &C);
+
+  printf("There are %d clusters.\n", C);
+  for (v = 0; v < n; v++) printf("vertex %d is in cluster %d\n", v, assignment[v]); 
+  
+  free(workspace);
+  free(assignment);
+  return 0;
+}
+/*::cexcerpt::cluster_example::end::*/
+#endif /*eslCLUSTER_EXAMPLE*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
diff --git a/esl_cluster.h b/esl_cluster.h
new file mode 100644
index 0000000..e1da779
--- /dev/null
+++ b/esl_cluster.h
@@ -0,0 +1,16 @@
+/* Generalized single linkage clustering.
+ * 
+ * SRE, Mon Jan  7 09:40:06 2008 [Janelia]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslCLUSTER_INCLUDED
+#define eslCLUSTER_INCLUDED
+
+extern int esl_cluster_SingleLinkage(void *base, size_t n, size_t size, 
+				     int (*linkfunc)(const void *, const void *, const void *, int *), void *param,
+				     int *workspace, int *assignments, int *ret_C);
+#endif /*eslCLUSTER_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_cluster.tex b/esl_cluster.tex
new file mode 100644
index 0000000..8db8c65
--- /dev/null
+++ b/esl_cluster.tex
@@ -0,0 +1,53 @@
+The \eslmod{cluster} module implements a generalized, efficient
+discrete single linkage clustering algorithm. 
+
+The clustering algorithm tests for links on the fly, thus avoiding
+construction of an $O(N^2)$ adjacency matrix. This results in an
+algorithm of $O(N)$ memory, $O(N^2)$ time worst-case complexity for
+$N$ vertices. Average case behavior typically scales much better than
+this, as efficiently as $O(N)$ for a densely connected graph that
+forms a single cluster.
+
+In order to work on generalized vertices of any data type, the
+implementation uses an interface akin to that of the C \ccode{qsort()}
+utility: the caller provides a void pointer to an untyped array of
+vertices, the number of vertices, and the size of each vertex data
+element, and a function that can take untyped pointers to two vertices
+and compute whether they are linked or not.
+
+The API is summarized in Table~\ref{tbl:cluster_api}. Only the
+\eslmod{easel} module is required.
+
+% Table generated by autodoc -t esl_cluster.c (so don't edit here, edit esl_cluster.c:)
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\hyperlink{func:esl_cluster_SingleLinkage()}{\ccode{esl\_cluster\_SingleLinkage()}} & Generalized single linkage clustering.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{cluster} API.}
+\label{tbl:cluster_api}
+\end{table}
+
+\subsection{Example of using the msacluster API}
+
+An example of clustering some numbers together, according to their
+difference:
+
+\input{cexcerpts/cluster_example}
+
+The thing to pay most attention to here is the mechanism of dealing
+with vertices via generic untyped pointers; in particular, the way the
+caller-provided linkage-determining function takes its \ccode{void *}
+arguments and immediately casts them back to data types that the
+caller wants to use in computing whether the two vertices are linked.
+
+In the example here, the linkage function needs only one parameter
+from the caller, so a pointer to \ccode{threshold} itself is passed
+into the API. If your linkage function needs more parameters, you
+would define a structure that bundles them together, then pass a
+pointer to that structure into \ccode{esl\_cluster\_SingleLinkage()}.
+
diff --git a/esl_composition.c b/esl_composition.c
new file mode 100644
index 0000000..c8d0252
--- /dev/null
+++ b/esl_composition.c
@@ -0,0 +1,150 @@
+#include "esl_config.h"
+
+#include "easel.h"
+#include "esl_composition.h"
+
+
+/* Function:  esl_composition_BL62()
+ *
+ * Purpose:   Sets <f> to the background frequencies used in
+ *            \citep{Henikoff92} to calculate the BLOSUM62
+ *            substitution matrix. Caller provides space in <f>
+ *            allocated for at least 20 doubles.  The entries are in
+ *            alphabetic order A..Y, same as the standard Easel amino
+ *            acid alphabet order.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_composition_BL62(double *f)
+{
+  f[0]  = 0.074;
+  f[1]  = 0.025;
+  f[2]  = 0.054;
+  f[3]  = 0.054;
+  f[4]  = 0.047;
+  f[5]  = 0.074;
+  f[6]  = 0.026;
+  f[7]  = 0.068;
+  f[8]  = 0.058;
+  f[9]  = 0.099;
+  f[10] = 0.025;
+  f[11] = 0.045;
+  f[12] = 0.039;
+  f[13] = 0.034;
+  f[14] = 0.052;
+  f[15] = 0.057;
+  f[16] = 0.051;
+  f[17] = 0.073;
+  f[18] = 0.013;
+  f[19] = 0.032;
+  return eslOK;
+}
+
+/* Function:  esl_composition_WAG()
+ *
+ * Purpose:   Sets <f> to the background frequencies used in
+ *            \citep{WhelanGoldman01} to calculate the WAG rate
+ *            matrix. Caller provides space in <f> allocated for at
+ *            least 20 doubles.  The entries are in alphabetic order
+ *            A..Y, same as the standard Easel amino acid alphabet
+ *            order.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_composition_WAG(double *f)
+{
+  f[0]  = 0.086628;                     /* A */
+  f[1]  = 0.019308;	                /* C */
+  f[2]  = 0.057045;	                /* D */
+  f[3]  = 0.058059;	                /* E */
+  f[4]  = 0.038432;	                /* F */
+  f[5]  = 0.083252;	                /* G */
+  f[6]  = 0.024431;	                /* H */
+  f[7]  = 0.048466;	                /* I */
+  f[8]  = 0.062029;	                /* K */
+  f[9]  = 0.086209;	                /* L */
+  f[10] = 0.019503;	                /* M */
+  f[11] = 0.039089;	                /* N */
+  f[12] = 0.045763;	                /* P */
+  f[13] = 0.036728;	                /* Q */
+  f[14] = 0.043972;	                /* R */
+  f[15] = 0.069518;	                /* S */
+  f[16] = 0.061013;	                /* T */
+  f[17] = 0.070896;	                /* V */
+  f[18] = 0.014386;	                /* W */
+  f[19] = 0.035274;	                /* Y */
+  return eslOK;
+}
+
+/* Function:  esl_composition_SW34()
+ *
+ * Purpose:   Sets <f> to the background frequencies observed in
+ *            Swiss-Prot release 34 (21.2M residues).  Caller provides
+ *            space in <f> allocated for at least 20 doubles.  The
+ *            entries are in alphabetic order A..Y, same as the
+ *            standard Easel amino acid alphabet order.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_composition_SW34(double *f)
+{
+  f[0]  = 0.075520;                     /* A */
+  f[1]  = 0.016973;                     /* C */
+  f[2]  = 0.053029;                     /* D */
+  f[3]  = 0.063204;                     /* E */
+  f[4]  = 0.040762;                     /* F */
+  f[5]  = 0.068448;                     /* G */
+  f[6]  = 0.022406;                     /* H */
+  f[7]  = 0.057284;                     /* I */
+  f[8]  = 0.059398;                     /* K */
+  f[9]  = 0.093399;                     /* L */
+  f[10] = 0.023569;                     /* M */
+  f[11] = 0.045293;                     /* N */
+  f[12] = 0.049262;                     /* P */
+  f[13] = 0.040231;                     /* Q */
+  f[14] = 0.051573;                     /* R */
+  f[15] = 0.072214;                     /* S */
+  f[16] = 0.057454;                     /* T */
+  f[17] = 0.065252;                     /* V */
+  f[18] = 0.012513;                     /* W */
+  f[19] = 0.031985;                     /* Y */
+  return eslOK;
+}
+
+
+/* Function:  esl_composition_SW50()
+ *
+ * Purpose:   Sets <f> to the background frequencies observed in
+ *            Swiss-Prot release 50.8 (86.0M residues; Oct 2006).
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_composition_SW50(double *f)
+{
+  f[0] = 0.0787945;		/* A */
+  f[1] = 0.0151600;		/* C */
+  f[2] = 0.0535222;		/* D */
+  f[3] = 0.0668298;		/* E */
+  f[4] = 0.0397062;		/* F */
+  f[5] = 0.0695071;		/* G */
+  f[6] = 0.0229198;		/* H */
+  f[7] = 0.0590092;		/* I */
+  f[8] = 0.0594422;		/* K */
+  f[9] = 0.0963728;		/* L */
+  f[10]= 0.0237718;		/* M */
+  f[11]= 0.0414386;		/* N */
+  f[12]= 0.0482904;		/* P */
+  f[13]= 0.0395639;		/* Q */
+  f[14]= 0.0540978;		/* R */
+  f[15]= 0.0683364;		/* S */
+  f[16]= 0.0540687;		/* T */
+  f[17]= 0.0673417;		/* V */
+  f[18]= 0.0114135;		/* W */
+  f[19]= 0.0304133;		/* Y */
+  return eslOK;
+}
+
diff --git a/esl_composition.h b/esl_composition.h
new file mode 100644
index 0000000..a87fe66
--- /dev/null
+++ b/esl_composition.h
@@ -0,0 +1,4 @@
+extern int  esl_composition_BL62(double *f);
+extern int  esl_composition_WAG (double *f);
+extern int  esl_composition_SW34(double *f);
+extern int  esl_composition_SW50(double *f);
diff --git a/esl_config.h.in b/esl_config.h.in
new file mode 100644
index 0000000..4acefc1
--- /dev/null
+++ b/esl_config.h.in
@@ -0,0 +1,155 @@
+/* esl_config.h.in  [input to configure]
+ * 
+ * System-dependent configuration of Easel, by autoconf.
+ * 
+ * This file should be included in all Easel .c files before
+ * anything else, because it may set #define's that control
+ * behaviour of system includes and system libraries. An example
+ * is large file support.
+ * 
+ */
+#ifndef eslCONFIG_INCLUDED
+#define eslCONFIG_INCLUDED
+
+/* Version info.
+ */
+#undef EASEL_VERSION    
+#undef EASEL_DATE      
+#undef EASEL_COPYRIGHT 
+#undef EASEL_LICENSE   
+
+/* Large file support
+ * Must precede any header file inclusion.
+ */
+#undef _FILE_OFFSET_BITS
+#undef _LARGE_FILES
+#undef _LARGEFILE_SOURCE
+
+/* Debugging verbosity (0=none;3=most verbose)
+ */
+#undef eslDEBUGLEVEL
+
+/* System headers
+ */
+#undef HAVE_ENDIAN_H
+#undef HAVE_INTTYPES_H
+#undef HAVE_STDINT_H
+#undef HAVE_UNISTD_H
+#undef HAVE_SYS_TYPES_H
+#undef HAVE_STRINGS_H
+
+#undef HAVE_SYS_PARAM_H
+#undef HAVE_SYS_SYSCTL_H
+
+#undef HAVE_EMMINTRIN_H
+#undef HAVE_PMMINTRIN_H
+#undef HAVE_XMMINTRIN_H
+
+#undef HAVE_ALTIVEC_H
+
+/* Types
+ */
+#undef WORDS_BIGENDIAN
+#undef int8_t
+#undef int16_t
+#undef int32_t
+#undef int64_t
+#undef uint8_t
+#undef uint16_t
+#undef uint32_t
+#undef uint64_t
+#undef off_t
+
+/* Optional packages
+ */
+#undef HAVE_LIBGSL
+
+/* Optional parallel implementation support
+ */
+#undef HAVE_SSE2
+#undef HAVE_VMX
+#undef HAVE_MPI
+#undef HAVE_PTHREAD
+
+#undef HAVE_SSE2_CAST
+
+/* Programs */
+#undef HAVE_GZIP
+
+/* Functions */
+#undef HAVE_CHMOD
+#undef HAVE_FSEEKO
+#undef HAVE_FSTAT
+#undef HAVE_GETCWD
+#undef HAVE_GETPID
+#undef HAVE_MKSTEMP
+#undef HAVE_POPEN
+#undef HAVE_PUTENV
+#undef HAVE_STAT
+#undef HAVE_STRCASECMP
+#undef HAVE_SYSCONF
+#undef HAVE_SYSCTL
+#undef HAVE_TIMES
+#undef HAVE_ERFC
+
+#undef HAVE_FUNC_ATTRIBUTE_NORETURN // Compiler supports __attribute__ tag, which we use to help w/ clang static analysis.
+
+/* Function behavior */
+#define eslSTOPWATCH_HIGHRES
+
+/*****************************************************************
+ * Available augmentations.
+ * 
+ * If you grab a single module from Easel to use it by itself,
+ * leave all these #undef'd; you have no augmentations.
+ * 
+ * If you grab additional Easel .c files, you can enable any
+ * augmentations they provide to other modules by #defining the
+ * modules you have below. Alternatively, you can -D them on
+ * the compile line, as in cc -DeslAUGMENT_SSI -DeslAUGMENT_MSA.
+ * 
+ * If you compile and install the complete Easel library, all of these
+ * get #defined automatically by ./configure, plus the eslLIBRARY flag
+ * which means the full library with all augmentations is
+ * available. So, if you steal files from an installed library, just
+ * set these all back to #undef (depending on which files you have).
+ *****************************************************************/
+#undef eslLIBRARY
+
+#ifndef eslLIBRARY
+#undef eslAUGMENT_ALPHABET
+#undef eslAUGMENT_NCBI
+#undef eslAUGMENT_DMATRIX
+#undef eslAUGMENT_FILEPARSER
+#undef eslAUGMENT_GEV
+#undef eslAUGMENT_GUMBEL
+#undef eslAUGMENT_HISTOGRAM
+#undef eslAUGMENT_KEYHASH 
+#undef eslAUGMENT_MINIMIZER
+#undef eslAUGMENT_MSA		
+#undef eslAUGMENT_RANDOM
+#undef eslAUGMENT_RANDOMSEQ
+#undef eslAUGMENT_SSI
+#undef eslAUGMENT_STATS
+#endif
+
+#ifdef eslLIBRARY
+#define eslAUGMENT_ALPHABET
+#define eslAUGMENT_NCBI
+#define eslAUGMENT_DMATRIX
+#define eslAUGMENT_FILEPARSER
+#define eslAUGMENT_GEV
+#define eslAUGMENT_GUMBEL
+#define eslAUGMENT_HISTOGRAM
+#define eslAUGMENT_KEYHASH 
+#define eslAUGMENT_MINIMIZER
+#define eslAUGMENT_MSA		
+#define eslAUGMENT_RANDOM
+#define eslAUGMENT_RANDOMSEQ
+#define eslAUGMENT_SSI
+#define eslAUGMENT_STATS
+#endif
+
+
+#endif /*eslCONFIG_INCLUDED*/
+
diff --git a/esl_dirichlet.c b/esl_dirichlet.c
new file mode 100644
index 0000000..3711e83
--- /dev/null
+++ b/esl_dirichlet.c
@@ -0,0 +1,1684 @@
+/* Functions relevant to Beta, Gamma, and Dirichlet densities,
+ * including simple and mixture Dirichlet priors.
+ * 
+ * Contents:
+ *   1. The <ESL_MIXDCHLET> object for mixture Dirichlet priors
+ *   2. Dirichlet likelihood functions
+ *   3. Sampling from Dirichlets              [with <random>]
+ *   4. Reading mixture Dirichlets from files [with <fileparser>]
+ *   5. Unit tests
+ *   6. Test driver
+ *   7. Example
+ *   8. Copyright and license information
+ *   
+ * To-do:
+ *   -  Fit*() functions should return eslEINVAL on n=0, eslENORESULT
+ *      on failure due to small n. Compare esl_gumbel. xref J12/93.
+ *      SRE, Wed Nov 27 11:18:12 2013
+ */
+#include <esl_config.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#ifdef eslAUGMENT_MINIMIZER
+#include "esl_minimizer.h"
+#endif
+#ifdef eslAUGMENT_FILEPARSER
+#include "esl_fileparser.h"
+#endif
+#include "esl_vectorops.h"
+#include "esl_stats.h"
+#include "esl_dirichlet.h"
+
+
+/*****************************************************************
+ *# 1. The <ESL_MIXDCHLET> object for mixture Dirichlet priors
+ *****************************************************************/
+
+/* Function:  esl_mixdchlet_Create()
+ *
+ * Purpose:   Create a new mixture Dirichlet prior with <N> components,
+ *            each with <K> parameters.
+ *
+ * Returns:   initialized <ESL_MIXDCHLET *> on success.
+ *
+ * Throws:    NULL on allocation failure.
+ */
+ESL_MIXDCHLET *
+esl_mixdchlet_Create(int N, int K)
+{
+  int status;
+  ESL_MIXDCHLET *pri = NULL;
+  int q;
+
+  ESL_DASSERT1( (N > 0) );
+  ESL_DASSERT1( (K > 0) );
+
+  ESL_ALLOC(pri, sizeof(ESL_MIXDCHLET));
+  pri->pq = NULL; 
+  pri->alpha = NULL;
+
+  ESL_ALLOC(pri->pq,    sizeof(double)   * N);
+  ESL_ALLOC(pri->alpha, sizeof(double *) * N);
+  pri->alpha[0] = NULL;
+
+  ESL_ALLOC(pri->alpha[0], sizeof(double) * N * K);
+  if (pri->alpha[0] == NULL) goto ERROR;               // to silence clang static analysis, which gets overzealous about N=0/K=0 -> NULL result
+  for (q = 1; q < N; q++)
+    pri->alpha[q] = pri->alpha[0] + q*K;
+
+  pri->N = N;
+  pri->K = K;
+  return pri;
+
+ ERROR:
+  esl_mixdchlet_Destroy(pri);
+  return NULL;
+}
+
+/* Function:  esl_mixdchlet_PerfectBipartiteMatchExists()
+ * Synopsis:  Given a 2D table representing presence of edges between vertices represented by
+ * 			the rows and columns, test whether a perfect matching exists.
+ * 			Note 1: this doesn't find a perfect matching, just checks if one exists.
+ * 			Note 2: written as a private function for use by esl_mixdchlet_Compare
+ * Incept:    TW, Fri Nov  6 14:23:23 EST 2009 [janelia]
+ *
+ * Args:      A      - 2-dimensional square table representing presence of edges between vertices
+ *            N      - size of that table
+ *
+ * Returns:   <eslOK> if a perfect matching exists; <eslFAIL> otherwise.
+ */
+int
+esl_mixdchlet_PerfectBipartiteMatchExists(int **A, int N ) 
+{
+  /*
+    Basic idea:
+    -Scan through the rows, and create a matching edge any time a row has only
+    one matching column (i.e. a single column with eslOK value)
+    * This is conservative: if the row isn't matched with this column, no perfect matching is possible.
+    -Repeat, this time scanning columns.
+    -Repeat  rows then columns - until no rows or columns are found with a single eslOK value.
+
+    -If a row or column is found with no possible matches, then no complete matching is possible.
+    -If a point is reached where all rows and all columns have more than one match, I'm pretty sure a
+    perfect matching is guaranteed.
+    - This is unproven; the intuition is that for any imperfect matching an augmenting path
+    should (I think) exist: it will contain an edge from one unmatched element to a matched
+    element, followed by the existing edge from that element to it's mate, followed by a 2nd
+    edge from that mate to another, and so on.
+
+    It's a O(n^3) algorithm, though it'll typically run fast in practice
+  */
+  int matched_row[N], matched_col[N];
+  esl_vec_ISet(matched_row, N, 0);
+  esl_vec_ISet(matched_col, N, 0);
+
+  int i,j;
+  int unassigned = N;
+  int do_row = 1; // otherwise, do_column
+  while (unassigned > 0) {
+    int changed = 0;
+
+    for (i=0; i<N; i++) {
+      int match_cnt = 0;
+      int match = -1;
+
+      if ( 1 == (do_row == 1 ? matched_row[i] : matched_col[i]) ) continue;
+
+      for (j=0; j<N; j++) {
+	if ( eslOK == (do_row == 1 ? A[i][j] : A[j][i] ) ) {
+	  match_cnt++;
+	  match = j;
+	}
+      }
+
+      if (match_cnt == 0) return eslFAIL;  // mixtures can't possibly match
+      if (match_cnt == 1) { // found a pair s.t. only this col can match this row within tol.
+	changed++;
+	if (do_row == 1  ) {
+	  matched_row[i] = matched_col[match] = 1;
+	  for (j=0; j<N; j++)
+	    A[j][match] = eslFAIL; // don't allow the matched col to match other rows, too.
+	} else {
+	  matched_col[i] = matched_row[match] = 1;
+	  for (j=0; j<N; j++)
+	    A[match][j] = eslFAIL; // don't allow the matched rwo to match other cols, too.
+	}
+      }
+      //if (match_cnt > 1), leave it for a later pass
+    }
+    unassigned -= changed;
+
+    if (changed == 0) { // All had multiple hits, so (I think) we are guaranteed of being able to pick some mapping that will be legal
+      return eslOK;
+    }
+    do_row = 1 - do_row; // flip value
+
+  }
+  //got here, all mapping must've been done
+  return eslOK;
+}
+
+/* Function:  esl_mixdchlet_Compare()
+ * Synopsis:  Compare two mixture Dirichlets for equality.
+ *
+ * Purpose:   Compare mixture Dirichlet objects <d1> and <d2>
+ *            for equality. For real numbered values, equality
+ *            is defined by <esl_DCompare()> with a fractional
+ *            tolerance <tol>.
+ *
+ * Returns:   <eslOK> on equality; <eslFAIL> otherwise.
+ */
+int
+esl_mixdchlet_Compare(ESL_MIXDCHLET *d1, ESL_MIXDCHLET *d2, double tol)
+{
+  int   i,j;
+  int **A = NULL;
+  int   status;
+
+  if (d1->N != d2->N) return eslFAIL;
+  if (d1->K != d2->K) return eslFAIL;
+
+  //set up a 2-D matrix, to store the pairs of components that meet tolerance requirements
+  ESL_ALLOC(A, d1->N * sizeof(int*));
+  for (i = 0; i < d1->N; i++) A[i] = NULL;
+  for (i = 0; i < d1->N; i++) ESL_ALLOC(A[i], d1->N * sizeof(int) );
+
+  // Fill in matrix - OK if component i from d1 is a viable match with component q from d2
+  for (i=0; i<d1->N; i++)
+    {
+      for (j=0; j<d1->N; j++)
+	{
+	  A[i][j] = esl_DCompare( d1->pq[i], d2->pq[j], tol);
+	  if (A[i][j] == eslOK)
+	    A[i][j] = esl_vec_DCompare(d1->alpha[i], d2->alpha[j], d1->K, tol) ;
+	}
+    }
+
+  /* In most cases, there should be only a one-to-one mapping (if
+   * any), which is easy to test.  But in the unlikely case of a
+   * many-to-one mapping, we need to do a little more.  The problem
+   * amounts to asking whether there exists a perfect bipartite
+   * matching (aka the marriage problem)
+   */
+  status = esl_mixdchlet_PerfectBipartiteMatchExists( A, d1->N);
+  
+  /* fallthrough */
+ ERROR:
+  if (A) {
+    for (i = 0; i < d1->N; i++)
+      if (A[i]) free (A[i]);
+    free (A);
+  }
+  return status;
+}
+
+
+
+/* Function:  esl_mixdchlet_Copy()
+ * Synopsis:  Copy a mixture Dirichlet object.
+ *
+ * Purpose:   Copies mixture dirichlet object <d> to <d_dst>.
+ *            Both objects are of size <N> and <K>.  
+ *            <d> is unchanged.                    
+ *
+ * Returns:   <eslOK> on equality; <eslFAIL> otherwise.
+ */
+int
+esl_mixdchlet_Copy(ESL_MIXDCHLET *d, ESL_MIXDCHLET *d_dst)
+{
+  int q;
+
+  if (d->N != d_dst->N) return eslFAIL;
+  if (d->K != d_dst->K) return eslFAIL;
+
+  esl_vec_DCopy(d->pq, d->N, d_dst->pq);
+  
+  for (q = 0; q < d->N; q++)
+    esl_vec_DCopy(d->alpha[q], d->K, d_dst->alpha[q]);
+
+  return eslOK;
+}
+
+
+/* Function:  esl_mixdchlet_Destroy()
+ *
+ * Purpose:   Free's the mixture Dirichlet <pri>.
+ */
+void
+esl_mixdchlet_Destroy(ESL_MIXDCHLET *pri)
+{
+  if (pri     == NULL)  return;
+  if (pri->pq != NULL)  free(pri->pq);
+  if (pri->alpha != NULL) {
+    if (pri->alpha[0] != NULL) free(pri->alpha[0]); 
+    free(pri->alpha);
+  }
+  free(pri);
+}
+
+
+/* Function:  esl_mixdchlet_Dump()
+ *
+ * Purpose:   Dump the mixture Dirichlet <d>.
+ */
+int
+esl_mixdchlet_Dump(FILE *fp, ESL_MIXDCHLET *d)
+{
+  int  q;  /* counter over mixture components */
+  int  i;  /* counter over params */
+
+  fprintf(fp, "Mixture Dirichlet: N=%d K=%d\n", d->N, d->K);
+  for (q = 0; q < d->N; q++) {
+    fprintf(fp, "q[%d] %f\n", q, d->pq[q]);
+    for (i = 0; i < d->K; i++)
+      fprintf(fp, "alpha[%d][%d] %f\n", q, i, d->alpha[q][i]);
+  }
+  
+  return eslOK;
+}
+
+/* esl_dirichlet_MixturePosterior()
+ *
+ * Purpose:   For a count vector <c> of cardinality <K>, and a
+ *            mixture Dirichlet prior <pri>. Calculate mix[],
+ *            the posterior probability P(q | c) of mixture
+ *            component q given the count vector c. Caller must
+ *            provide allocated space for <mix>, of length <K>.
+ *
+ * Returns:   <eslOK> on success, <mix> contains posterior probabilities of
+ *            the Dirichlet components.
+ */
+static int
+esl_dirichlet_MixturePosterior(double *c, int K, ESL_MIXDCHLET *pri, double *mix)
+{
+  int q;      /* counter over mixture components */
+  double val;
+
+  for (q = 0; q < pri->N; q++) {
+    if (pri->pq[q] > 0.0) {
+      esl_dirichlet_LogProbData(c, pri->alpha[q], K, &val);
+      mix[q] =  val + log(pri->pq[q]);
+    }
+    else
+    {
+      mix[q] = -HUGE_VAL;
+    }
+  }
+
+  esl_vec_DLogNorm(mix, pri->N); /* mix[q] is now P(q|c) */
+
+  return eslOK;
+}
+
+/* Function:  esl_mixdchlet_MPParameters()
+ *
+ * Purpose:   Parameter estimation for a count vector <c> of cardinality
+ *            <K>, and a mixture Dirichlet prior <pri>. Calculates
+ *            mean posterior estimates for probability parameters, and
+ *            returns them in <p>. Also returns the posterior probabilities
+ *            of each Dirichlet mixture component, $P(q \mid c)$, in <mix>.
+ *            Caller must provide allocated space for <mix> and <p>, both
+ *            of length <K>.
+ *
+ * Returns:   <eslOK> on success; <mix> contains posterior probabilities of
+ *            the Dirichlet components, and <p> contains mean posterior
+ *            probability parameter estimates.
+ *
+ * Throws:    <esl_EINCOMPAT> if <pri> has different cardinality than <c>.
+ */
+int
+esl_mixdchlet_MPParameters(double *c, int K, ESL_MIXDCHLET *pri, double *mix, double *p)
+{
+  int q;			/* counter over mixture components */
+  int x;
+  double totc;
+  double tota;
+  
+  if (K != pri->K) ESL_EXCEPTION(eslEINCOMPAT, "cvec's K != mixture Dirichlet's K");
+
+  /* Calculate mix[], the posterior probability
+   * P(q | c) of mixture component q given the count vector c.
+   */
+  esl_dirichlet_MixturePosterior(c, K, pri, mix);
+
+
+  /* Compute mean posterior estimates for probability parameters
+   */
+  totc = esl_vec_DSum(c, K);
+  esl_vec_DSet(p, K, 0.);
+  for (x = 0; x < K; x++)
+    for (q = 0; q < pri->N; q++)
+      {
+	tota = esl_vec_DSum(pri->alpha[q], K);
+	p[x] += mix[q] * (c[x] + pri->alpha[q][x]) / (totc + tota);
+      }
+  /* should be normalized already, but for good measure: */
+  esl_vec_DNorm(p, K);
+  return eslOK;
+}
+
+
+/* Function:  esl_mixdchlet_BILD_score()
+ *
+ * Purpose:   Compute the BILD score (sensu Altschul et al PLos Compbio 2010)
+ *            for a given count vector <c> of cardinality (alphabet size) <K>,
+ *            under a mixture Dirichlet prior <pri>, and a background
+ *            character distribution <bg>, also cardinality K. The score is
+ *            in bits. Also computes posterior values for (1) Dirichlet mixture
+ *            coefficients ($P(q \mid c)$, performed and returned in a previously
+ *            allocated array, <mix>).
+ *
+ *            Caller must provide allocated space for <mix> (length K), and
+ *            <q> (length 1).
+ *
+ * Returns:   <eslOK> on success; <mix> contains posterior probabilities of
+ *            the Dirichlet components, and <sc> contains the BILD score of
+ *            observation under the prior and bg.
+ *
+ * Throws:    <esl_EINCOMPAT> if <pri> has different cardinality than <c>.
+ */
+int
+esl_mixdchlet_BILD_score(double *c, int K, int N, ESL_MIXDCHLET *pri,
+                   double *mix, double *bg, double *sc)
+{
+  int i;      /* counter over mixture components */
+  int j;
+  double tmp;
+  double val;
+  double totc;
+  double tota;
+
+  if (K != pri->K) ESL_EXCEPTION(eslEINCOMPAT, "cvec's K != mixture Dirichlet's K");
+  if (N != pri->N) ESL_EXCEPTION(eslEINCOMPAT, "cvec's N != mixture Dirichlet's N");
+
+  /* Calculate mix[], the posterior probability
+   * P(q | c) of mixture component q given the count vector c.
+   */
+  esl_dirichlet_MixturePosterior(c, K, pri, mix);
+
+
+  /* Compute probability of observing the given count vector
+   * under the mixture Dirichlet prior, which depends on the
+   * posterior.
+   */
+  *sc = 0.0;
+  totc = esl_vec_DSum(c, K);
+  for (i = 0; i < N; i++) {
+    if (mix[i] > 0) {
+      tota = esl_vec_DSum(pri->alpha[i], K);
+      esl_stats_LogGamma(tota, &tmp);
+      val = tmp;
+
+      esl_stats_LogGamma(tota + totc, &tmp);
+      val -= tmp;
+
+      for (j = 0; j < K; j++) {
+        esl_stats_LogGamma(pri->alpha[i][j] + c[j], &tmp);
+        val += tmp;
+        esl_stats_LogGamma(pri->alpha[i][j], &tmp);
+        val -= tmp;
+      }
+
+      *sc += mix[i] * exp(val);
+    }
+  }
+
+  /* At this point, sc holds the Q value from the Altschul paper.
+   * Get the odds ratio by dividing by the product of background
+   * probabilities for observed counts, (accounting for sequence
+   * weighting).
+   */
+  for (j = 0; j < K; j++) {
+    *sc /= pow(bg[j], c[j]);
+  }
+  *sc = log(*sc)*eslCONST_LOG2R;
+
+  return eslOK;
+}
+/*---------------- end, ESL_MIXDCHLET ---------------------------*/
+
+
+/*****************************************************************
+ *# 2. Dirichlet likelihood functions
+ *****************************************************************/
+
+/* Function:  esl_dirichlet_LogProbData()
+ *
+ * Purpose:   Given an observed count vector $c[0..K-1]$, 
+ *            and a simple Dirichlet density parameterized by
+ *            $\alpha[0..K-1]$;
+ *            calculate $\log P(c \mid \alpha)$.
+ *            
+ *            This is $\int P(c \mid p) P(p \mid \alpha) dp$,
+ *            an integral that can be solved analytically.
+ *
+ * Args:      c          - count vector, [0..K-1]
+ *            alpha      - Dirichlet parameters, [0..K-1]
+ *            K          - size of c, alpha vectors
+ *            ret_answer - RETURN: log P(c | \alpha)
+ *
+ * Returns:   <eslOK> on success, and puts result $\log P(c \mid \alpha)$
+ *            in <ret_answer>.
+ */
+int
+esl_dirichlet_LogProbData(double *c, double *alpha, int K, double *ret_answer)
+{
+  double lnp;      
+  double sum1, sum2, sum3;
+  double a1, a2, a3;
+  int    x;
+
+  sum1 = sum2 = sum3 = lnp = 0.0;
+  for (x = 0; x < K; x++)
+    {
+      sum1 += c[x] + alpha[x];
+      sum2 += alpha[x];
+      sum3 += c[x];
+      esl_stats_LogGamma(alpha[x] + c[x], &a1); 
+      esl_stats_LogGamma(c[x] + 1.,       &a2);
+      esl_stats_LogGamma(alpha[x],        &a3);
+      lnp  += a1 - a2 - a3;
+    }
+  esl_stats_LogGamma(sum1,      &a1);
+  esl_stats_LogGamma(sum2,      &a2);
+  esl_stats_LogGamma(sum3 + 1., &a3);
+  lnp += a2 + a3 - a1;
+
+  *ret_answer = lnp;
+  return eslOK;
+}
+
+/* Function:  esl_dirichlet_LogProbData_Mixture()
+ *
+ * Purpose:   Given an observed count vector $c[0..K-1]$, 
+ *            and a mixture Dirichlet density parameterized by
+ *		$\alpha_1[0..K-1]$ ... $\alpha_N[0..K-1]$,
+ *            calculate $\log \sum_i pq_i * P(c \mid \alpha_i)$.
+ *            
+ *
+ * Args:      c          - count vector, [0..K-1]
+ *            d          - Dirichlet parameters, [0..K-1]
+ *            ret_answer - RETURN: log P(c | \alpha)
+ *
+ * Returns:   <eslOK> on success, and puts result $\log P(c \mid \alpha)$
+ *            in <ret_answer>.
+ *            
+ * Throws:    <eslEMEM> on allocation error. Now <*ret_answer> is 
+ *            <-eslINFINITY>.           
+ */
+int
+esl_dirichlet_LogProbData_Mixture(double *c, ESL_MIXDCHLET *d, double *ret_answer)
+{
+  double *mixq = NULL;
+  double  lnp;
+  double  val;
+  int     q;             /* counter over mixture components */
+  int     status;
+
+  ESL_ALLOC(mixq, sizeof(double)*d->N);
+
+  for (q = 0; q < d->N; q++) {
+    esl_dirichlet_LogProbData(c, d->alpha[q], d->K, &val);
+    mixq[q] = val + log(d->pq[q]);
+  }
+  lnp = esl_vec_DLogSum(mixq, d->N);
+
+  free(mixq);
+
+  *ret_answer = lnp;
+  return eslOK;
+
+ ERROR:
+  free(mixq);
+  *ret_answer = -eslINFINITY;
+  return status;
+}
+
+
+/* esl_dirichlet_LogProbDataSet_Mixture()
+ *
+ * Purpose:   Given an observed set of count vectors $c[0..N-1][0..K-1]$, 
+ *            and a mixture Dirichlet density parameterized by
+ *			  $\alpha_1[0..K-1]$ ... $\alpha_N[0..K-1]$,
+ *            calculate $ \sum_n \log \sum_i pq_i * P(c[n] \mid \alpha_i)$.
+ *            This is a convenience function, which simply wraps
+ *            esl_dirichlet_LogProbData_Mixture
+ *
+ * Args:      ntrials      - number of count vectors (aka N)
+ *            counts       - count vector set, [0..N-1][0..K-1]
+ *            md           - Dirichlet parameters
+ *            ret_answer   - RETURN: log P(c | \alpha)
+ *
+ * Returns:   <eslOK> on success, and puts result $\log P(c \mid \alpha)$
+ *            in <ret_answer>.
+ *            
+ * Throws:    <eslEMEM> on allocation error. Now <*ret_answer> is            
+ *            <-eslINFINITY>.
+ */
+static int 
+esl_dirichlet_LogProbDataSet_Mixture(int ntrials, double** counts, ESL_MIXDCHLET* md, double *ret_answer) 
+{
+  double val;
+  int    i;
+  int    status;
+
+  *ret_answer = 0;
+  for (i = 0; i < ntrials; i++) 
+    {
+      if (( status = esl_dirichlet_LogProbData_Mixture(counts[i], md, &val)) != eslOK) goto ERROR;
+      *ret_answer += val;
+    }
+  return eslOK;
+
+ ERROR:
+  *ret_answer = -eslINFINITY;
+  return status;
+}
+
+/* Function:  esl_dirichlet_LogProbProbs()
+ *
+ * Purpose:   Given Dirichlet parameter vector <alpha> and a probability
+ *            vector <p>, both of cardinality <K>; return
+ *            $\log P(p \mid alpha)$.
+ *            
+ * Returns:   <eslOK> on success, and the result is in <ret_answer>.           
+ *            
+ * Xref:      Sjolander (1996) appendix, lemma 2.
+ */
+int
+esl_dirichlet_LogProbProbs(double *p, double *alpha, int K, double *ret_answer)
+{
+  double sum;		        /* for Gammln(|alpha|) in Z     */
+  double logp;			/* RETURN: log P(p|alpha)       */
+  double val;
+  int x;
+
+  sum = logp = 0.0;
+  for (x = 0; x < K; x++)
+    if (p[x] > 0.0)		/* any param that is == 0.0 doesn't exist */
+      {
+	esl_stats_LogGamma(alpha[x], &val);
+	logp -= val;
+	logp += (alpha[x]-1.0) * log(p[x]);
+	sum  += alpha[x];
+      }
+  esl_stats_LogGamma(sum, &val);
+  logp += val;
+  *ret_answer = logp;
+  return eslOK;
+}
+/*----------- end, Dirichlet likelihood functions ---------------*/
+
+/*****************************************************************
+ * Dirichlet Maximum likelihood fit from counts
+ *****************************************************************/
+
+#ifdef eslAUGMENT_MINIMIZER
+/* This structure is used to sneak the data into minimizer's generic
+ * (void *) API for all aux data
+ */
+struct mixdchlet_data {
+  ESL_MIXDCHLET  *d;      /* the dirichlet mixture parameters */
+  double        **c;      /* count vector array [0..nc-1][0..alphabet_size(d->K)] */
+  int             nc;     /* number of count samples */
+};
+
+/*****************************************************************
+ * Parameter vector packing/unpacking
+ *
+ * The conjugate gradient code takes a single parameter vector <p>,
+ * where the values are unconstrained real numbers.
+ *
+ * We have a mixture Dirichlet with two kinds of parameters.
+ * pq_i are mixture coefficients, constrained to be >= 0 and
+ * \sum_i pq_i = 1.  alpha^i_x are the Dirichlet parameters
+ * for component i, constrained to be > 0.
+ *
+ * Our p's are therefore not only packed into a single vector;
+ * they're reparameterized to implement the constraints:
+ *   for a Dirichlet parameter:
+ *      alpha = exp(p)   p = log(alpha)
+ *      (thus, alpha > 0 for all real p)
+ *
+ *   for a mixture coefficient:
+ *      pq = exp(-exp(p)) / \sum_a exp(-exp(p_a))
+ *      (thus, 0 < pq < 1 and \sum_a pq_a = 1, for all real p)
+ *
+ *   In my hands (ER), this parametrization works better that
+ *      pq = exp(p) / \sum_a exp(p_a)
+ *
+ * Conjugate gradients optimizes the <p> parameter vector,
+ * but we can convert that back out into a Dirichlet answer.
+ *
+ * The packing order is: the first N terms of a parameter vector are
+ * the mixture coefficients pq_i. N different alpha_i vectors follow.
+ *
+ * [0 ... N-1] [0 ... K-1] [0 ... K-1]  ... 
+ *     q's      alpha_0     alpha_1     ...
+ *
+ * In both functions below, p, pq, and alpha are all allocated
+ * and free'd by the caller.
+ *      p : length N + N*K = N*(K+1)  [0.. N*(K+1)-1]
+ *     pq : length N,   [0..N-1]
+ *  alpha : length NxK, [0..N-1][0..K-1].
+ *
+ * Special cases:
+ *
+ * - For (N >= 1 && K == 1) there is nothing to optimize.
+ *  
+ * - For (N == 1 && K >  1) the only variables to optimize are the K alphas
+ *
+ *              [0 ... K-1] 
+ *                 alpha    
+ *
+ *      p : length N*K = N*K  [0.. N*K-1]
+ *  alpha : length NxK, [0][0..K-1].
+ *
+ */
+static void
+mixdchlet_pack_paramvector(double *p, int np, ESL_MIXDCHLET *d)
+{
+  int nq;        /* number the mixture components to optimize */
+  int q;	 /* counter over mixture components */
+  int x;         /* counter in alphabet size */
+
+  nq = (d->N > 1)? d->N : 0;
+
+  /* the mixture coeficients */
+  for (q = 0; q < nq; q++)
+	  p[q] = log(d->pq[q]);
+    //p[q] = log(-log(d->pq[q]));  TW changed to the above; this was causing fit to fail
+
+  /* the dirichlet parameters */
+  for (q = 0; q < d->N; q++)
+    for (x = 0; x < d->K; x++)
+      p[nq + q*d->K + x] = log(d->alpha[q][x]);
+ 
+}
+
+/* Same as above but in reverse: given parameter vector <p>,
+ * do appropriate c.o.v. back to desired parameter space, and
+ * update the mixdchlet <d>.
+ */
+static void
+mixdchlet_unpack_paramvector(double *p, int np, ESL_MIXDCHLET *d)
+{
+  int nq;        /* number the mixture components to optimize */
+  int q;	 /* counter over mixture components */
+  int x;         /* counter in alphabet size */
+
+  nq = (d->N > 1)? d->N : 0;
+
+  /* the mixture coeficients */
+  for (q = 0; q < nq; q++) 
+	d->pq[q] = exp(p[q]);
+	//d->pq[q] = exp(-exp(p[q])); TW changed to the above; this was causing fit to fail
+  esl_vec_DNorm(d->pq, d->N);
+
+  /* the dirichlet parameters */
+  for (q = 0; q < d->N; q++)
+    for (x = 0; x < d->K; x++) 
+      d->alpha[q][x] = exp(p[nq + q*d->K + x]);      
+ 
+  /*esl_mixdchlet_Dump(stdout, d);*/
+
+}
+
+/* The log likelihood function to be optimized by ML fitting:
+ *   This needs to be careful of a case where a lambda = inf.
+ */
+static double
+mixdchlet_complete_func(double *p, int np, void *dptr)
+{
+  struct mixdchlet_data *data = (struct mixdchlet_data *) dptr;
+  ESL_MIXDCHLET         *d    = data->d;
+  double  logPsample;
+  double  logP = 0.;
+  int     m;             /* counter over count samples */
+ 
+  mixdchlet_unpack_paramvector(p, np, d);
+
+  for (m = 0; m < data->nc; m++) {
+    esl_dirichlet_LogProbData_Mixture(data->c[m], d, &logPsample);
+    logP += logPsample;
+  }
+
+  if (isnan(logP)) esl_fatal("logP is NaN");
+  return -logP;
+}
+
+/* The gradient of the NLL w.r.t. each free parameter in p.
+ * Modified by ER 11/03/09 to compute derivative of log(alpha) instead of alpha
+ * (committed by TW)
+ */
+static void
+mixdchlet_complete_gradient(double *p, int np, void *dptr, double *dp)
+{
+  struct mixdchlet_data *data = (struct mixdchlet_data *) dptr;
+  ESL_MIXDCHLET         *d    = data->d;
+  double  sum_alpha;             /* \sum_x alpha[q][x]                        */
+  double  sum_c;                 /* \sum_x c[m][x]                            */
+  double  val;                   /* val    is         p_q * P(c_m | alpha_q)  */
+  double *valsum;                /* valsum is  sum_q [p_q * P(c_m | alpha_q)] */
+  double  term;                  /* term   is  q * P(alpha_q | c_m)           */
+  double  psi1;                  /* Psi(sum_alpha[q])                         */
+  double  psi2;                  /* Psi(sum_alpha[q] + sum_c[m])              */
+  double  psi3;                  /* Psi(sum_alpha[q][x]+ c[m][x])             */
+  double  psi4;                  /* Psi(sum_alpha[q][x])                      */
+  int     nq;                    /* number the mixture components to optimize */
+  int     m;                     /* counter over count samples                */
+  int     q;                     /* counter over mixture components           */
+  int     x;                     /* counter in alphabet size                  */
+
+  nq = (d->N > 1)? d->N : 0;
+
+  mixdchlet_unpack_paramvector(p, np, d);
+
+  /* initialize */
+  valsum = malloc(sizeof(double) * data->nc);
+  esl_vec_DSet(dp, np, 0.0);
+
+  /* Some precalculation of sums for efficiency.
+   * valsum is  sum_q [p_q * P(c_m | alpha_q)]
+   */
+   for (m = 0; m < data->nc; m++)
+    esl_dirichlet_LogProbData_Mixture(data->c[m], d, &(valsum[m]));
+
+   for (q = 0; q < d->N; q++) {
+
+     sum_alpha = esl_vec_DSum(d->alpha[q], d->K);
+     esl_stats_Psi(sum_alpha, &psi1);  /* psi1 = Psi(sum_alpha[q]) */
+
+     for (m = 0; m < data->nc; m++) {
+       sum_c = esl_vec_DSum(data->c[m], d->K);
+       esl_stats_Psi(sum_alpha+sum_c, &psi2); /* psi2 = Psi(sum_alpha[q] + sum_c[m]) */
+
+      /* val is pq * P(c_m | alpha_q)    */
+       esl_dirichlet_LogProbData(data->c[m], d->alpha[q], d->K, &val);
+
+
+       /* derivative respect to the mixture coeficients */
+       /* term is  pq * P(alpha_q | c_m) */
+       term = exp(val - valsum[m] + log(d->pq[q]));
+       if (nq > 0) dp[q] += term - d->pq[q];
+
+
+       /* derivative respect to the dirichlet parameters */
+       for (x = 0; x < d->K; x++) {
+         esl_stats_Psi(d->alpha[q][x]+data->c[m][x], &psi3); /* psi3 = Psi(sum_alpha[q][x]+ c[m][x]) */
+         esl_stats_Psi(d->alpha[q][x],               &psi4); /* psi4 = Psi(sum_alpha[q][x]+ c[m][x]) */
+
+         dp[nq + q*d->K + x] += term * d->alpha[q][x] * (psi1 - psi2 + psi3 - psi4);
+
+
+      }
+     }
+   }
+
+
+
+   /* Return the negative, because we're minimizing the NLP, not maximizing.
+    */
+   for (q = 0; q < nq; q++) {
+     if (isnan(dp[q])) esl_fatal("dp for pq[%d] is NaN", q);
+     dp[q] *= -1.;
+   }
+   for (q = 0; q < d->N; q++)
+     for (x = 0; x < d->K; x++) {
+       if(isnan(dp[nq + q*d->K + x])) esl_fatal("dp for alpha[%d][%d] is NaN", q, x);
+       dp[nq + q*d->K + x] *= -1.0;
+     }
+
+   free(valsum);
+ }
+
+/* Function:  esl_mixdchlet_Fit()
+ *
+ * Purpose:   Given a count vector <c>, and an initial guess <d> for
+ *            a mixdchlet, find maximum likelihood parameters
+ *            by conjugate gradient descent optimization, starting
+ *            from <d> and leaving the final optimized solution in
+ *            <d>.
+ *            
+ * Returns:   <eslOK> on success, and <d> contains the fitted 
+ *            mixdchlet parameters.
+ *            
+ * Throws:    <eslEMEM> on allocation error, and <d> is left in
+ *            in its initial state.           
+ */
+int
+esl_mixdchlet_Fit(double **c, int nc, ESL_MIXDCHLET *d, int be_verbose)
+{
+  struct mixdchlet_data data;
+  double *p   = NULL;
+  double *u   = NULL;
+  double *wrk = NULL;
+  double  tol;
+  double  fx;
+  int     np;      /* number of parameters to optimize */
+  int     nq;      /* number the mixture components to optimize */
+  int     i;
+  int     status;
+
+  /* nothing to optimize for a dirichlet of K = 1 (alphabet size = 1)*/
+  if (d->K == 1) return eslOK;
+
+  tol = 1e-6;
+
+  /* Allocate parameters
+   */
+  nq = (d->N > 1)? d->N : 0;
+  np = nq + d->N*d->K;
+  ESL_ALLOC(p,   sizeof(double) * np);
+  ESL_ALLOC(u,   sizeof(double) * np);
+  ESL_ALLOC(wrk, sizeof(double) * np * 4);
+
+  /* Copy shared info into the "data" structure
+   */
+  data.d  = d;
+  data.c  = c;
+  data.nc = nc;
+
+  /* From d, create the parameter vector.
+   */
+  mixdchlet_pack_paramvector(p, np, d);
+
+  /* Define the step size vector u.
+   */
+  for (i = 0; i < np; i++) u[i] = 0.1;
+
+  /* Feed it all to the mighty optimizer.
+   */
+  status = esl_min_ConjugateGradientDescent(p, u, np, 
+					    &mixdchlet_complete_func, 
+					    &mixdchlet_complete_gradient,
+					    (void *) (&data), tol, wrk, &fx);
+  if (status != eslOK && status != eslENOHALT) // eslENOHALT? Then take what we've got - it's probably pretty good
+    goto ERROR;
+
+  /* Convert the final parameter vector back to a mixdchlet
+   */
+  mixdchlet_unpack_paramvector(p, np, d);
+
+  free(p);
+  free(u);
+  free(wrk);
+  return eslOK;
+
+ ERROR:
+  if (p   != NULL) free(p);
+  if (u   != NULL) free(u);
+  if (wrk != NULL) free(wrk);
+  return status;
+}
+
+
+#ifdef eslAUGMENT_RANDOM
+/* Function:  esl_mixdchlet_Fit_Multipass()
+ *
+ * Purpose:   Given a set of count vectors <c>, find maximum
+ *            likelihood mixdchlet parameters. A number <reps>
+ *            of initial guesses <d> for a mixdchlet are used,
+ *            with conjugate gradient descent performed for
+ *            each guess. The mixdchlet returned is the one
+ *            among these multiple local searches with
+ *            best likelihood.  This is a convenience
+ *            function, which simply wraps <esl_mixdchlet_Fit()>
+ *            for multiple start points.
+ *
+ * Args:      r  - pointer to random generator
+ * 	      c  - set of count vectors, [0..M-1][0..N-1]
+ * 	      nc - number of count samples
+ *            reps - number of random starting points
+ *            best_md  - an initialized mixdchlet, which will
+ *            		contain the correct q and alpha values
+ *            		at completion
+ *            verbose - if >0, output is verbose
+ *
+ * Returns:   <eslOK> on success, and <best_md> contains the fitted
+ *            mixdchlet parameters with best likelihood.
+ *
+ * Throws:    <eslEMEM> on allocation error, and the state of <best_md> 
+ *            is undefined.
+ */
+int
+esl_mixdchlet_Fit_Multipass(ESL_RANDOMNESS *rng, double **c, int nc, int reps, ESL_MIXDCHLET *best_md, int verbose)
+{
+  ESL_MIXDCHLET *md      = esl_mixdchlet_Create(best_md->N, best_md->K);
+  double         best_lk = -eslINFINITY;
+  int            err_cnt = 0;
+  int            i, q, k;
+  double         lk;
+  int            status;
+  
+  for (i = 0; i < reps; i++) 
+    {
+      /* for each pass, establish a new random starting point */
+      if (( status = esl_dirichlet_DSampleUniform(rng, md->N, md->pq)) != eslOK) goto ERROR;
+      for (q = 0; q < md->N; q++) 
+	for (k = 0; k < md->K; k++)
+	  md->alpha[q][k] = 10.0 * esl_rnd_UniformPositive(rng);
+
+      /* then use Fit to do local search */
+      status = esl_mixdchlet_Fit(c, nc, md, 0);
+      if (status != eslOK) {
+	err_cnt++;
+	if (err_cnt==2*reps) {
+	  goto ERROR;
+	} else {
+	  i--; /* try another starting point */
+	  continue;
+	}
+      }
+      esl_dirichlet_LogProbDataSet_Mixture (nc, c, md, &lk);
+
+      if (verbose)
+	{
+	  fprintf(stderr, "Repetition # %d\n------------\n", i);
+	  esl_mixdchlet_Dump(stderr, md);
+	  fprintf(stderr, "llk = %.3f  (vs best = %.3f)\n", lk, best_lk);
+	}
+
+      if (lk > best_lk) 
+	{
+	  if (verbose) fprintf(stderr, "... so copy md -> best_md\n");
+	  best_lk = lk;
+	  esl_mixdchlet_Copy(md, best_md);
+	}
+    }
+
+  if (verbose) 
+    {
+      fprintf(stdout, "\n\n----------------\nbest mixture:\n");
+      esl_mixdchlet_Dump(stdout, best_md);
+      fprintf(stdout, "llk = %.3f", best_lk);
+    }
+
+  esl_mixdchlet_Destroy(md);
+  return eslOK;
+
+ ERROR:
+  esl_mixdchlet_Destroy(md);
+  return status;
+}
+#endif /*eslAUGMENT_RANDOM*/
+
+#endif /*eslAUGMENT_MINIMIZER*/
+/*----------- end, Dirichlet Maximum likelihood fit from counts ---------------*/
+
+
+/*****************************************************************
+ *# 3. Sampling from Dirichlets: requires <esl_random>
+ *****************************************************************/
+#ifdef eslAUGMENT_RANDOM
+
+/* Function:  esl_dirichlet_DSample()
+ *
+ * Purpose:   Given a Dirichlet density parameterized by $\alpha[0..K-1]$,
+ *            sample a probability vector $p[0..K-1]$ from
+ *            $P(p \mid \alpha)$.
+ *
+ * Args:      r      - random number generation object
+ *            alpha  - parameters of Dirichlet density [0..K-1]
+ *            K      - vector size
+ *            p      - RETURN: sampled probability vector
+ *                     (caller allocates 0..K-1).         
+ *
+ * Returns:   <eslOK>, and <p> will contain the sampled vector.
+ */
+int
+esl_dirichlet_DSample(ESL_RANDOMNESS *r, double *alpha, int K, double *p)
+{
+  int x;
+
+  for (x = 0; x < K; x++) 
+    p[x] = esl_rnd_Gamma(r, alpha[x]);
+  esl_vec_DNorm(p, K);
+  return eslOK;
+}
+
+/* Function:  esl_dirichlet_FSample()
+ *
+ * Purpose:   Same as <esl_dirichlet_DSample()>, except it
+ *            works in single-precision floats, not doubles.
+ */
+int
+esl_dirichlet_FSample(ESL_RANDOMNESS *r, float *alpha, int K, float *p)
+{
+  int x;
+
+  for (x = 0; x < K; x++) 
+    p[x] = (float) esl_rnd_Gamma(r, (double) alpha[x]);
+  esl_vec_FNorm(p, K);
+  return eslOK;
+}
+
+/* Function:  esl_dirichlet_DSampleUniform()
+ *
+ * Purpose:   Sample a probability vector $p[0..K-1]$ uniformly, by
+ *            sampling from a Dirichlet of $\alpha_i = 1.0 \forall i$.
+ *
+ * Args:      r  - source of random numbers
+ *            K  - vector size
+ *            p  - RETURN: sampled prob vector, caller alloc'ed 0..K-1
+ *
+ * Returns:   <eslOK>, and <p> will contain the sampled vector.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_dirichlet_DSampleUniform(ESL_RANDOMNESS *r, int K, double *p)
+{
+  int x;
+  for (x = 0; x < K; x++) 
+    p[x] = esl_rnd_Gamma(r, 1.0);
+  esl_vec_DNorm(p, K);
+  return eslOK;
+}
+
+/* Function:  esl_dirichlet_FSampleUniform()
+ *
+ * Purpose:   Same as <esl_dirichlet_DSampleUniform()>, except it
+ *            works in single-precision floats, not doubles.
+ */
+int
+esl_dirichlet_FSampleUniform(ESL_RANDOMNESS *r, int K, float *p)
+{
+  int x;
+  for (x = 0; x < K; x++) 
+    p[x] = (float) esl_rnd_Gamma(r, 1.0);
+  esl_vec_FNorm(p, K);
+  return eslOK;
+}
+
+
+/* Function:  esl_dirichlet_SampleBeta()
+ *
+ * Purpose:   Samples from a Beta(theta1, theta2) density, leaves answer
+ *            in <ret_answer>. (Special case of sampling Dirichlet.)
+ *            
+ * Returns:   <eslOK>.           
+ */
+int
+esl_dirichlet_SampleBeta(ESL_RANDOMNESS *r, double theta1, double theta2, double *ret_answer)
+{
+  double p, q;
+
+  p = esl_rnd_Gamma(r, theta1);
+  q = esl_rnd_Gamma(r, theta2);
+  *ret_answer = p / (p+q);
+  return eslOK;
+}
+#endif /*eslAUGMENT_RANDOM*/
+/*---------------- end, Dirichlet sampling ----------------------*/
+
+
+/*****************************************************************
+ *# 4. Reading mixture Dirichlets from files [requires esl_fileparser]
+ *****************************************************************/
+#ifdef eslAUGMENT_FILEPARSER 
+
+/* Function:  esl_mixdchlet_Read()
+ *
+ * Purpose:   Reads a mixture Dirichlet from an open stream <efp>, using the 
+ *            <ESL_FILEPARSER> token-based parser. 
+ *            
+ *            The first two tokens are <K>, the length of the Dirichlet parameter
+ *            vector(s), and <N>, the number of mixture components. Then for
+ *            each of the <N> mixture components <i>, it reads a mixture coefficient
+ *            <pq[i]> followed by <K> Dirichlet parameters <alpha[i][0..K-1]>.
+ *            
+ *            This function may be called more than once on the same open file,
+ *            to read multiple different mixture Dirichlets from it (transitions,
+ *            match emissions, insert emissions, for example).
+ *            
+ * Note:      One reason this function takes an ESL_FILEPARSER instead of 
+ *            a filename or an open FILE pointer is that file format errors
+ *            in Easel are non-fatal "normal" errors, and we want to record
+ *            an informative error message. The ESL_FILEPARSER has an error
+ *            buffer for this purpose. 
+ *
+ * Returns:   <eslOK> on success, and <ret_pri> contains a new <ESL_MIXDCHLET> object 
+ *            that the caller is responsible for free'ing.
+ *
+ *            <eslEFORMAT> on 'normal' parse failure, in which case <efp->errbuf>
+ *            contains an informative diagnostic message, and <efp->linenumber>
+ *            contains the linenumber at which the parse failed.
+ */
+int
+esl_mixdchlet_Read(ESL_FILEPARSER *efp,  ESL_MIXDCHLET **ret_pri)
+{
+  ESL_MIXDCHLET *pri;
+  int   K;			/* Dirichlet param vector size */
+  int   N;			/* number of mixture components */
+  char *tok;			/* ptr to a whitespace-delim, noncomment token */
+  int   toklen;			/* length of a parsed token */
+  int   status;			/* return status of an Easel call */
+  int   q;			/* counter over mixture components (0..N-1) */
+  int   i;			/* counter over params (0..K-1) */
+  
+  *ret_pri = pri = NULL;
+
+  if ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) goto ERROR;
+  K = atoi(tok);
+  if (K < 1) { sprintf(efp->errbuf, "Bad vector size %.32s", tok); goto ERROR; }
+  
+  if ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) goto ERROR;
+  N = atoi(tok);
+  if (N < 1) { sprintf(efp->errbuf, "Bad mixture number %.32s", tok); goto ERROR; }
+
+  pri = esl_mixdchlet_Create(N, K);
+  if (pri == NULL) { sprintf(efp->errbuf, "mxdchlet alloc failed"); goto ERROR; }
+ 
+  for (q = 0; q < N; q++)
+    {
+      if ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) goto ERROR;
+      pri->pq[q] = atof(tok);
+      if (pri->pq[q] < 0.0 || pri->pq[q] > 1.0) 
+	{ sprintf(efp->errbuf, "bad mixture coefficient %.32s", tok); goto ERROR; }      
+
+      for (i = 0; i < K; i++)
+	{
+	  if ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) goto ERROR;
+	  pri->alpha[q][i] = atof(tok);
+	  if (pri->alpha[q][i] <= 0.0)
+	    { sprintf(efp->errbuf, "Dirichlet params must be positive, got %.32s", tok); goto ERROR; } 
+	}
+    }
+  esl_vec_DNorm(pri->pq, N);
+  *ret_pri = pri;
+  return eslOK;
+
+ ERROR:
+  esl_mixdchlet_Destroy(pri);
+  return eslEFORMAT;
+}
+
+/* Function:  esl_mixdchlet_Write()
+ * Synopsis:  Write a mixture Dirichlet to an open output stream.
+ *
+ * Purpose:   Write mixture Dirichlet <d> to open output stream <d>.
+ *
+ * Args:      fp   - open output stream
+ *            d    - mixture Dirichlet to write
+ * 
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEWRITE> on any write error, such as filled disk.
+ */
+int
+esl_mixdchlet_Write(FILE *fp, ESL_MIXDCHLET *d)
+{
+  int q,i;
+
+  if (fprintf(fp, "%d %d\n", d->K, d->N)         < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixture dirichlet write failed");
+  for (q = 0; q < d->N; q++)
+    {
+      if (fprintf(fp, "%.3f ", d->pq[q])         < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixture dirichlet write failed");
+      for (i = 0; i < d->K; i++)
+	if (fprintf(fp, "%.3f ", d->alpha[q][i]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixture dirichlet write failed");
+      if (fprintf(fp, "\n")                      < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixture dirichlet write failed");
+    }
+  return eslOK;
+}
+
+
+#endif /* eslAUGMENT_FILEPARSER */
+/*-------------- end, reading mixture Dirichlets ----------------*/
+
+
+
+/*****************************************************************
+ * 5. Unit tests
+ *****************************************************************/
+#ifdef eslDIRICHLET_TESTDRIVE
+
+static void
+utest_io(ESL_MIXDCHLET *d, double tol)
+{
+  char           *msg         = "esl_dirichlet: io unit test failed";
+  ESL_MIXDCHLET  *d2          = NULL;
+  ESL_FILEPARSER *efp         = NULL;
+  FILE           *fp          = NULL;
+  char            tmpfile[16] = "esltmpXXXXXX";
+
+  /* Create a mixture Dirichlet file, as a named tmpfile.  */
+  if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg);
+  if (esl_mixdchlet_Write(fp, d)      != eslOK) esl_fatal(msg);
+  fclose(fp);
+
+  /* Read it back in */
+  if ((fp = fopen(tmpfile, "r")) == NULL)        esl_fatal(msg);
+  if ((efp = esl_fileparser_Create(fp)) == NULL) esl_fatal(msg);
+  if (esl_mixdchlet_Read(efp, &d2) != eslOK)     esl_fatal(msg);
+  esl_fileparser_Destroy(efp);
+  fclose(fp);
+
+  if (esl_mixdchlet_Compare(d, d2, tol) != eslOK) esl_fatal(msg);
+
+  esl_mixdchlet_Destroy(d2);
+  remove(tmpfile);
+  return;
+}
+
+static void
+utest_bild()
+{
+  char           *msg         = "esl_dirichlet: BILD unit test failed";
+  ESL_MIXDCHLET  *d           = NULL;
+  int             K           = 4;
+  int             N           = 2;
+  double         *counts;
+  double         *mix;
+  double         *bg;
+  double          sc;
+
+
+  /* Create a mixture Dirichlet */
+  if ((d = esl_mixdchlet_Create(N, K)) == NULL) esl_fatal(msg);
+  //esl_vec_DSet(d->pq,       N, 1.0/N);
+  d->pq[0]       = 0.4;
+  d->pq[1]       = 0.6;
+
+  d->alpha[0][0] = 0.1;
+  d->alpha[0][1] = 0.2;
+  d->alpha[0][2] = 0.3;
+  d->alpha[0][3] = 0.4;
+  esl_vec_DSet(d->alpha[1], K, 1.0);
+
+
+  //simulate count vector
+  counts = malloc(K*sizeof(double));
+  counts[0] = 3.0; //2.2;
+  counts[1] = 1.0; //0.9;
+  counts[2] = 0.0; //4.5;
+  counts[3] = 0.0; //3.0;
+
+  //simulate background probabilities
+  bg = malloc(K*sizeof(double));
+  esl_vec_DSet(bg, K, 1.0/K);
+
+  //allocate working space
+  mix = malloc(K*sizeof(double));
+
+  esl_mixdchlet_BILD_score(counts, K, N, d, mix, bg, &sc);
+
+  if (esl_DCompare(sc, 0.701, 0.001) != eslOK)
+    esl_fatal(msg);
+
+//  fprintf(stderr, "Score is %.3f\n", sc);
+
+  esl_mixdchlet_Destroy(d);
+  free(bg);
+  free(counts);
+  free(mix);
+
+  return;
+}
+
+
+/*
+ * For any given sampling effort, there is always a possibility that the resulting
+ * count vector will have a higher likelihood under the wrong component than under the
+ * correct component. This unit test runs multiple inferences and only fail if
+ * more of the inferences fail than is expected
+ */
+static void
+utest_inference(ESL_RANDOMNESS *r, ESL_MIXDCHLET *d, int ntrials, int ncounts, int be_verbose)
+{
+  char   *msg    = "esl_dirichlet: inference unit test failed";
+  double *counts = malloc(sizeof(double) * d->K);
+  double *probs  = malloc(sizeof(double) * d->K);
+  double *iq     = malloc(sizeof(double) * d->N);
+  double *ip     = malloc(sizeof(double) * d->K);
+  int     qused, qguess;
+  int     c, i, q, j;
+  double  maxdeviation;
+
+  int fail_cnt_1 = 0;
+  int fail_cnt_2 = 0;
+  int fail_cnt_3 = 0;
+
+  for (j=0; j<ntrials; j++) {
+	  /* Sample component, p vector, c vector from mixture Dirichlet */
+	  qused = esl_rnd_DChoose(r, d->pq, d->N);
+	  //printf("qused=%1d\n", qused);
+	  esl_dirichlet_DSample(r, d->alpha[qused], d->K, probs);
+	  esl_vec_DSet(counts, d->K, 0.);
+	  for (c = 0; c < ncounts; c++)
+		{
+		  i = esl_rnd_DChoose(r, probs, d->K);
+		  counts[i] += 1.;
+		}
+
+	  /* First inference test:
+	   * classify by posterior inference on the sampled probability vector.
+	   */
+	  for (q = 0; q < d->N; q++)
+		{
+		  esl_dirichlet_LogProbProbs(probs, d->alpha[q], d->K, &(iq[q]));
+		  iq[q] += log(d->pq[q]);
+		}
+	  qguess = esl_vec_DArgMax(iq, d->N); /* the MP guess from the probs */
+	  //printf("qguess: %1d\n", qguess);
+	  if (qused != qguess) {
+		  fail_cnt_1++;
+	  }
+
+	  /* Second inference test:
+	   * classify by posterior inference on the sampled count vector;
+	   * then attempt to estimate the probability vector.
+	   */
+	  esl_mixdchlet_MPParameters(counts, d->K, d, iq, ip);
+	  qguess = esl_vec_DArgMax(iq, d->N); /* the MP guess from the counts */
+	  //printf("%1d\n", qguess);
+	  if (qused != qguess) {
+		  fail_cnt_2++;
+	  }
+
+	  for (i = 0; i < d->K; i++)
+		ip[i] = fabs(ip[i] - probs[i]); /* ip[] is now the differences rel to probs */
+
+	  maxdeviation = esl_vec_DMax(ip, d->K);
+	  //  printf("maxdev=%.3f\n", maxdeviation);
+	  if (maxdeviation > 0.05) {
+		  fail_cnt_3++;
+	  }
+
+  }
+
+  if (fail_cnt_1 > 2 || fail_cnt_2 > 2 || fail_cnt_3 > 0) { 
+    char m1[100], m2[100], m3[100], m4[100], final_msg[500];
+    sprintf(m1, "Out of %d total trials:", ntrials);
+    sprintf(m2, "* classification sampled probability vector, failed %d times", fail_cnt_1);
+    sprintf(m3, "* classification sampled count vector, failed %d times", fail_cnt_2);
+    sprintf(m4, "* gross error in posterior probs estimated from counts, %d times", fail_cnt_3);
+
+    sprintf(final_msg, "%s\n%s\n%s\n%s\n%s\n", m1, m2, m3, m4, msg );
+    
+    esl_fatal(final_msg);
+  }
+
+  free(counts);
+  free(probs);
+  free(iq);
+  free(ip);
+  return;
+}
+
+
+/*
+ * Performs two tests:
+ * (1) Check to see if the inferred mixdchlt is similar to true one;
+ * (2) Check if the likelihood under the inferred mixdchlt is at least as good as under the true mixdchlt.
+ *
+ * Also, now calls the Fit routine multiple times (via esl_mixdchlet_Fit_Multipass),
+ * since any single random starting point might lead to a terrible locally optimal mixdchlet
+ */
+static void
+utest_fit(ESL_RANDOMNESS *r, ESL_MIXDCHLET *d, int ntrials, int ncounts, double tol, int reps, int be_verbose)
+{
+  char           *msg ; //   = "esl_dirichlet: fit unit test failed";
+  ESL_MIXDCHLET  *id = NULL;
+  double        **counts;
+  double         *probs = malloc(sizeof(double) * d->K);
+  int             qused;
+  int             m;
+  int             c;
+  int             i;			/* counter over params (0..K-1) */
+
+  counts = malloc(sizeof(double *) * ntrials);
+  for (m = 0; m < ntrials; m ++)
+    counts[m] = malloc(sizeof(double) * d->K);
+
+  for (m = 0; m < ntrials; m ++) {
+    /* Sample component, p vector, c vector from mixture Dirichlet */
+    qused = esl_rnd_DChoose(r, d->pq, d->N); 
+    esl_dirichlet_DSample(r, d->alpha[qused], d->K, probs);
+    esl_vec_DSet(counts[m], d->K, 0.);
+
+    for (c = 0; c < ncounts; c++)
+      {
+    	i = esl_rnd_DChoose(r, probs, d->K);
+    	counts[m][i] += 1.;
+      }
+
+
+#ifdef eslDIRICHLET_TESTDRIVE_PRINTCOUNTS
+    printf ("%d  ", m);
+    for (i=0; i<d->K; i++)
+    	printf ("%.2f  ", counts[m][i]);
+    printf("\n");
+#endif /*eslDIRICHLET_TESTDRIVE_PRINTCOUNTS*/
+
+  }
+  
+  /* Start with a random id, use the counts to infer d by 
+   * maximum likelihood gradient descent.
+   * Generate a random starting point, alphas range from 0..10. 
+   */
+  id = esl_mixdchlet_Create(d->N, d->K);
+
+  /* optimize id */
+//  esl_mixdchlet_Fit(counts, ntrials, id, be_verbose);
+  esl_mixdchlet_Fit_Multipass(r, counts, ntrials, reps, id, 0);
+
+  double lp_true;
+  esl_dirichlet_LogProbDataSet_Mixture (ntrials, counts, d, &lp_true);
+
+  double lp_inf;
+  esl_dirichlet_LogProbDataSet_Mixture (ntrials, counts, id, &lp_inf);
+
+  //Test if the likelihood under the inferred model is at least as good as the
+  //likelihood under the true model
+  int lk_ok = eslOK;
+  if (lp_true > lp_inf +.00001)
+	  lk_ok = eslFAIL;
+
+  //Test if the inferred q and alpha values are close
+  // (note: "close" is relative - under the default conditions, they're all
+  //   within 35% of the true value)
+  int alphas_ok =  esl_mixdchlet_Compare(d, id, tol);
+
+
+  if (lk_ok== eslFAIL || alphas_ok==eslFAIL) {
+	  fprintf(stderr, "\nGiven dirichlet\n");
+	  esl_mixdchlet_Dump(stderr, d);
+	  fprintf (stderr, "logP = %.5f\n\n", lp_true);
+
+	  fprintf(stderr, "\nInferred dirichlet\n");
+	  esl_mixdchlet_Dump(stderr, id);
+	  fprintf (stderr, "logP = %.5f\n\n", lp_inf);
+
+
+	  if (lk_ok==eslFAIL)
+		  msg    = "esl_dirichlet: fit unit test failed (likelihood)";
+	  else
+		  msg    = "esl_dirichlet: fit unit test failed (similarity tolerance exceeded)";
+
+	  esl_fatal(msg);
+  }
+  
+  for (m = 0; m < ntrials; m ++)
+    free(counts[m]);
+  free(counts);
+  free(probs);
+  esl_mixdchlet_Destroy(id);
+
+  return;
+}
+
+#endif /*eslDIRICHLET_TESTDRIVE*/
+/*--------------------- end, unit tests -------------------------*/
+
+
+
+/*****************************************************************
+ * 6. Test driver
+ *****************************************************************/
+#ifdef eslDIRICHLET_TESTDRIVE
+/*
+ * gcc -g -Wall -I. -L. -o esl_dirichlet_utest -DeslDIRICHLET_TESTDRIVE esl_dirichlet.c -leasel -lm
+ * ./esl_dirichlet_utest
+ */
+#include "easel.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_dirichlet.h"
+/* Note that the RNG seed of 10 is carefully chosen to make the stochastic 
+ * tests work reproducibly. Other choices will tend to fail.
+ */
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-s",        eslARG_INT,     "10",  NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                    0 },
+  { "-t",        eslARG_REAL,   ".35",  NULL, NULL,  NULL,  NULL, NULL, "tolerance for real-value equality comparisons",    0 },
+  { "-C",        eslARG_INT,      "2",  NULL, NULL,  NULL,  NULL, NULL, "number of components in test mixture D'chlets",    0 },
+  { "-K",        eslARG_INT,      "6",  NULL, NULL,  NULL,  NULL, NULL, "alphabet size in test mixture D'chlets",           0 },
+  { "-N",        eslARG_INT,   "1000",  NULL, NULL,  NULL,  NULL, NULL, "number of sample counts in mixture D'chlet tests", 0 },
+  { "-T",        eslARG_INT,    "100",  NULL, NULL,  NULL,  NULL, NULL, "number of trials of mixture D'chlet tests",        0 },
+  { "-R",        eslARG_INT,    "5",    NULL, NULL,  NULL,  NULL, NULL, "number of repetitions of the D'chlet fitting procedure",        0 },
+  { "-v",        eslARG_NONE,    NULL,  NULL, NULL,  NULL,  NULL, NULL, "show verbose output",                              0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for dirichlet module";
+
+int
+main(int argc, char **argv)
+{
+  char           *msg          = "esl_dirichlet unit test failed";
+  ESL_GETOPTS    *go           = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r            = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  ESL_MIXDCHLET  *d            = NULL;
+  int             K            = esl_opt_GetInteger(go, "-K");
+  int             ncounts      = esl_opt_GetInteger(go, "-N");
+  int             ntrials      = esl_opt_GetInteger(go, "-T");
+  int             nfit_reps    = esl_opt_GetInteger(go, "-R");
+  double          tol          = esl_opt_GetReal   (go, "-t");
+  int             be_verbose   = esl_opt_GetBoolean(go, "-v");
+
+  if (be_verbose) printf("rng seed = %" PRIu32 "\n", esl_randomness_GetSeed(r));
+
+  /* Create a two-component mixture Dirichlet for testing */
+  if ((d = esl_mixdchlet_Create(2, K)) == NULL) esl_fatal(msg);
+  esl_vec_DSet(d->pq,       2, 0.5);
+  esl_vec_DSet(d->alpha[0], K, 1.0);
+  esl_vec_DSet(d->alpha[1], K, 0.1);
+
+  utest_io(d, tol);
+  utest_fit(r, d, ntrials, ncounts, tol, nfit_reps, be_verbose);
+  utest_inference(r, d, ntrials, ncounts, be_verbose);
+  utest_bild();
+
+
+  esl_randomness_Destroy(r);
+  esl_mixdchlet_Destroy(d);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslDIRICHLET_TESTDRIVE*/
+/*--------------------- end, test driver ------------------------*/
+
+
+
+/*****************************************************************
+ * 7. Example 
+ *****************************************************************/
+#ifdef eslDIRICHLET_EXAMPLE
+/*::cexcerpt::dirichlet_example::begin::*/
+/* compile: 
+    gcc -g -Wall -I. -o example -DeslDIRICHLET_EXAMPLE\
+      -DeslAUGMENT_RANDOM -DeslAUGMENT_FILEPARSER esl_random.c esl_fileparser.c\
+      esl_vectorops.c esl_dirichlet.c easel.c -lm
+ * run:     ./example <mixture Dirichlet file>
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_fileparser.h"
+#include "esl_vectorops.h"
+#include "esl_dirichlet.h"
+
+int
+main(int argc, char **argv)
+{
+  FILE           *fp;
+  ESL_FILEPARSER *efp;
+  ESL_RANDOMNESS *r;
+  ESL_MIXDCHLET  *pri;
+  int             c,i,q,qused;
+  double         *counts, *probs, *iq, *ip;
+
+  /* Read in a mixture Dirichlet from a file. */
+  fp  = fopen(argv[1], "r");
+  efp = esl_fileparser_Create(fp);
+  if (esl_mixdchlet_Read(efp, &pri) != eslOK) {
+    fprintf(stderr, "%s;\ndirichlet file %s parse failed at line %d\n",
+	    efp->errbuf, argv[1], efp->linenumber);
+    exit(1);
+  }
+  esl_fileparser_Destroy(efp);
+  fclose(fp);  
+
+  /* Allocate some working spaces */
+  probs  = malloc(sizeof(double) * pri->K);
+  counts = malloc(sizeof(double) * pri->K);
+  iq     = malloc(sizeof(double) * pri->N);
+  ip     = malloc(sizeof(double) * pri->K);
+
+  /* Sample a probability vector from it. */
+  r = esl_randomness_Create(0);            /* init the random generator */
+  qused = esl_rnd_DChoose(r, pri->pq, pri->N); /* sample a component */
+  esl_dirichlet_DSample(r, pri->alpha[qused], pri->K, probs);
+
+  printf("Component %2d: p[] = ", qused);
+  for (i = 0; i < pri->K; i++) printf("%.3f ", probs[i]);
+  printf("\n");
+
+  /* Sample a count vector from that prob vector. */
+  esl_vec_DSet(counts, pri->K, 0.);
+  for (c = 0; c < 20; c++)
+    counts[esl_rnd_DChoose(r, probs, pri->K)] += 1.;
+
+  printf("              c[] = ");
+  for (i = 0; i < pri->K; i++) printf("%5.0f ", counts[i]);
+  printf("\n");
+
+  /* Estimate a probability vector (ip) from those counts, and
+   * also get back the posterior prob P(q|c) of each component (iq). */
+  esl_mixdchlet_MPParameters(counts, pri->K, pri, iq, ip);
+
+  printf("  reestimated p[] = ");
+  for (i = 0; i < pri->K; i++) printf("%.3f ", ip[i]);
+  printf("\n");
+
+  q = esl_vec_DArgMax(iq, pri->N);
+  printf("probably generated by component %d; P(q%d | c) = %.3f\n",
+	 q, q, iq[q]);
+
+  esl_mixdchlet_Destroy(pri);
+  esl_randomness_Destroy(r);
+  free(probs); free(counts); free(iq); free(ip);
+  return 0;
+}
+/*::cexcerpt::dirichlet_example::end::*/
+#endif /*eslDIRICHLET_EXAMPLE*/
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
diff --git a/esl_dirichlet.h b/esl_dirichlet.h
new file mode 100644
index 0000000..e3b6dd8
--- /dev/null
+++ b/esl_dirichlet.h
@@ -0,0 +1,78 @@
+/* Functions relevant to Beta, gamma, and Dirichlet densities,
+ * and simple and mixture Dirichlet priors.
+ * 
+ * SRE, Tue Nov  2 14:35:06 2004 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslDIRICHLET_INCLUDED
+#define eslDIRICHLET_INCLUDED
+
+/* Structure: MIXDCHLET
+ * 
+ * A mixture Dirichlet density, usually used as a prior 
+ * for a multinomial model (turning count vectors into probability
+ * parameters).
+ */
+typedef struct {
+ /*::cexcerpt::dirichlet_mixdchlet::begin::*/
+  double  *pq;			/* mixture coefficients pq[0..N-1]          */
+  double **alpha;               /* Dirichlet params alpha[0..N-1][0..K-1]   */
+  int      N;			/* number of mixtures, e.g. 9 for Sjolander */
+  int      K;			/* alphabet size, e.g. 20                   */
+ /*::cexcerpt::dirichlet_mixdchlet::end::*/
+} ESL_MIXDCHLET;
+
+extern ESL_MIXDCHLET *esl_mixdchlet_Create(int N, int K);
+extern int            esl_mixdchlet_Compare(ESL_MIXDCHLET *d1, ESL_MIXDCHLET *d2, double tol);
+extern int            esl_mixdchlet_Copy(ESL_MIXDCHLET *d, ESL_MIXDCHLET *d_dst);
+extern int            esl_mixdchlet_Dump(FILE *fp, ESL_MIXDCHLET *d);
+extern void           esl_mixdchlet_Destroy(ESL_MIXDCHLET *pri);
+extern int            esl_mixdchlet_MPParameters(double *c, int K,
+ 						 ESL_MIXDCHLET *pri, double *mix, double *p);
+extern int            esl_mixdchlet_BILD_score(double *c, int K, int N, ESL_MIXDCHLET *pri,
+                                                 double *mix, double *bg, double *q);
+
+
+extern int esl_dirichlet_LogProbData(double *c, double *alpha, int K, 
+				     double *ret_answer);
+extern int esl_dirichlet_LogProbData_Mixture(double *c, ESL_MIXDCHLET *d, 
+					     double *ret_answer);
+extern int esl_dirichlet_LogProbProbs(double *p, double *alpha, int K, 
+				      double *ret_answer);
+
+/* Optional fitting code, when augmented by minimizing module.
+ */
+#ifdef eslAUGMENT_MINIMIZER
+#include "esl_minimizer.h"
+extern int esl_mixdchlet_Fit(double **c, int nc, ESL_MIXDCHLET *d, int be_verbose);
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+extern int esl_mixdchlet_Fit_Multipass(ESL_RANDOMNESS *rng, double **c, int nc, int reps, ESL_MIXDCHLET *best_md, int verbose);
+#endif /*eslAUGMENT_RANDOM*/
+#endif /*eslAUGMENT_MINIMIZER*/
+
+/* Optional sampling code, when augmented by random module.
+ */
+#ifdef eslAUGMENT_RANDOM
+extern int esl_dirichlet_DSample(ESL_RANDOMNESS *r, double *alpha, int K, double *p);
+extern int esl_dirichlet_FSample(ESL_RANDOMNESS *r, float  *alpha, int K, float  *p);
+extern int esl_dirichlet_DSampleUniform(ESL_RANDOMNESS *r, int K, double *p);
+extern int esl_dirichlet_FSampleUniform(ESL_RANDOMNESS *r, int K, float  *p);
+extern int esl_dirichlet_SampleBeta(ESL_RANDOMNESS *r, double theta1,
+				    double theta2, double *ret_answer);
+#endif /*eslAUGMENT_RANDOM*/
+
+/* Optional file input code, when augmented by fileparser module
+ */
+#ifdef eslAUGMENT_FILEPARSER
+#include "esl_fileparser.h"
+extern int esl_mixdchlet_Read(ESL_FILEPARSER *efp,  ESL_MIXDCHLET **ret_pri);
+extern int esl_mixdchlet_Write(FILE *fp,  ESL_MIXDCHLET *d);
+#endif /*eslAUGMENT_FILEPARSER*/
+
+
+#endif /*eslDIRICHLET_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_dirichlet.tex b/esl_dirichlet.tex
new file mode 100644
index 0000000..3be33e9
--- /dev/null
+++ b/esl_dirichlet.tex
@@ -0,0 +1,63 @@
+
+The dirichlet module contains routines for using Beta, Gamma, and
+Dirichlet densities. In particular, it implements mixture Dirichlet
+priors, which are useful in a variety of parameter estimation tasks.
+
+The Dirichlet PDF is:
+
+\begin{equation}
+ P(\vec{p}) = \frac{\Gamma{\sum_i \alpha_i}}{\prod_i \Gamma(\alpha_i)} \prod_i p_i^{\alpha_i-1}
+\end{equation}
+
+
+\subsection{The dirichlet API}
+
+The module implements one object, \ccode{ESL\_MIXDCHLET}, which holds
+a mixture Dirichlet prior. 
+
+The API consists of the following functions:
+
+\vspace{1em}
+\begin{tabular}{ll}\hline
+   \multicolumn{2}{c}{\textbf{mixture Dirichlet priors}}\\
+\ccode{esl\_mixdchlet\_Create()}            & Allocates a new mixture Dirichlet.\\
+\ccode{esl\_mixdchlet\_Destroy()}           & Free's a mixture Dirichlet.\\
+\ccode{esl\_mixdchlet\_MPParameters()}      & Mean posterior probability parameter estimation.\\
+   \multicolumn{2}{c}{\textbf{Dirichlet, Gamma density routines}}\\
+\ccode{esl\_dirichlet\_LogProbData()}       & $\log P( \mbox{count vector} \mid \mbox{mixture Dirichlet}$.\\
+\ccode{esl\_dirichlet\_LogProbProbs()}      & $\log P( \mbox{prob vector} \mid \mbox{mixture Dirichlet}$.\\
+\ccode{esl\_dirichlet\_LogGamma()}          & $\log \Gamma(x)$.\\
+   \multicolumn{2}{c}{\textbf{Sampling code (requires augmentation w/ random)}}\\
+\ccode{esl\_dirichlet\_\{D,F\}Sample()}            & Sample a probability vector from a Dirichlet.\\
+\ccode{esl\_dirichlet\_\{D,F\}SampleUniform()}     & Sample a probability vector uniformly.\\
+\ccode{esl\_dirichlet\_SampleBeta()}        & Sample from Beta$(\theta_1, \theta_2$).\\
+   \multicolumn{2}{c}{\textbf{Input from file (requires augmentation w/ fileparser)}}\\
+\ccode{esl\_mixdchlet\_Read()}              & Input of a mixture Dirichlet from a file.\\ \hline
+\end{tabular}
+
+\subsection{Example of using the dirichlet API}
+
+An example that reads a mixture Dirichlet prior from a file, samples a
+probability vector from it, samples a count vector from the
+probability vector, then infers which mixture component generated the
+data and uses mean posterior estimation to reestimate the probability
+vector from the counts:
+
+\input{cexcerpts/dirichlet_example}
+
+\subsection{Accessing information in the ESL\_MIXDCHLET object}
+
+You may need to access the information in the \ccode{ESL\_MIXDCHLET}
+object. The data fields inside this structure are:
+
+\input{cexcerpts/dirichlet_mixdchlet}
+
+
+\subsection{Augmentations}
+
+The \ccode{esl\_dirichlet\_Sample*()} functions are only available
+when the module is augmented with the \ccode{random} module.
+
+The \ccode{esl\_dirichlet\_Read()} function is only available when the
+module is augmented with the \ccode{fileparser} module.
+
diff --git a/esl_distance.c b/esl_distance.c
new file mode 100644
index 0000000..49edc94
--- /dev/null
+++ b/esl_distance.c
@@ -0,0 +1,1648 @@
+/* Pairwise identities, distances, and distance matrices.
+ *
+ * Contents:
+ *    1. Pairwise distances for aligned text sequences.
+ *    2. Pairwise distances for aligned digital seqs.       [alphabet]
+ *    3. Distance matrices for aligned text sequences.      [dmatrix]
+ *    4. Distance matrices for aligned digital sequences.   [alphabet,dmatrix]
+ *    5. Average pairwise identity for multiple alignments. [alphabet,random]
+ *    6. Private (static) functions.
+ *    7. Unit tests.
+ *    8. Test driver.
+ *    9. Example.
+ *   10. Copyright notice and license.
+ *    
+ */
+#include "esl_config.h"
+
+#include <ctype.h>
+#include <string.h>
+#include <math.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#ifdef eslAUGMENT_DMATRIX
+#include "esl_dmatrix.h"
+#endif
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#include "esl_distance.h"
+
+/* Forward declaration of our static functions.
+ */
+static int jukescantor(int n1, int n2, int alphabet_size, double *opt_distance, double *opt_variance);
+
+
+/*****************************************************************
+ * 1. Pairwise distances for aligned text sequences.
+ *****************************************************************/
+
+/* Function:  esl_dst_CPairId()
+ * Synopsis:  Pairwise identity of two aligned text strings.
+ * Incept:    SRE, Mon Apr 17 20:06:07 2006 [St. Louis]
+ *
+ * Purpose:   Calculates pairwise fractional identity between two
+ *            aligned character strings <asq1> and <asq2>. 
+ *            Return this distance in <opt_pid>; return the
+ *            number of identities counted in <opt_nid>; and
+ *            return the denominator <MIN(len1,len2)> in
+ *            <opt_n>.
+ *            
+ *            Alphabetic symbols <[a-zA-Z]> are compared
+ *            case-insensitively for identity. Any nonalphabetic
+ *            character is assumed to be a gap symbol.
+ *            
+ *            This simple comparison rule is unaware of synonyms and
+ *            degeneracies in biological alphabets.  For a more
+ *            sophisticated and biosequence-aware comparison, use
+ *            digitized sequences and the <esl_dst_XPairId()> function
+ *            instead. Note that currently <esl_dst_XPairId()> does
+ *            not correctly handle degeneracies, but is set up to.
+ *
+ * Args:      asq1         - aligned character string 1
+ *            asq2         - aligned character string 2
+ *            opt_pid      - optRETURN: pairwise identity, 0<=x<=1
+ *            opt_nid      - optRETURN: # of identities
+ *            opt_n        - optRETURN: denominator MIN(len1,len2)
+ *
+ * Returns:   <eslOK> on success. <opt_pid>, <opt_nid>, <opt_n>
+ *            contain the answers (for whichever were passed non-NULL). 
+ *
+ * Throws:    <eslEINVAL> if the strings are different lengths
+ *            (not aligned).
+ */
+int
+esl_dst_CPairId(const char *asq1, const char *asq2, 
+		double *opt_pid, int *opt_nid, int *opt_n)
+{
+  int     status;
+  int     idents;               /* total identical positions  */
+  int     len1, len2;           /* lengths of seqs            */
+  int     i;                    /* position in aligned seqs   */
+
+  idents = len1 = len2 = 0;
+  for (i = 0; asq1[i] != '\0' && asq2[i] != '\0'; i++) 
+    {
+      if (isalpha(asq1[i])) len1++;
+      if (isalpha(asq2[i])) len2++;
+      if (isalpha(asq1[i]) && isalpha(asq2[i])
+	  && toupper(asq1[i]) == toupper(asq2[i])) 
+	idents++;
+    }
+  if (asq1[i] != '\0' || asq2[i] != '\0') 
+    ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned");
+
+  if (opt_pid  != NULL)  *opt_pid = ( len1==0 ? 0. : (double) idents / (double) ESL_MIN(len1,len2));
+  if (opt_nid  != NULL)  *opt_nid = idents;
+  if (opt_n    != NULL)  *opt_n   = len1;
+  return eslOK;
+
+ ERROR:
+  if (opt_pid  != NULL)  *opt_pid = 0.;
+  if (opt_nid  != NULL)  *opt_nid = 0;
+  if (opt_n    != NULL)  *opt_n   = 0;
+  return status;
+}
+
+/* Function:  esl_dst_CPairMatch()
+ * Synopsis:  Pairwise matches of two aligned text strings.
+ * Incept:    ER, Wed Oct 29 09:02:35 EDT 2014 [janelia]
+ *
+ * Purpose:   Calculates pairwise fractional matches between two
+ *            aligned character strings <asq1> and <asq2>. 
+ *            Return this distance in <opt_pmatch>; return the
+ *            number of matches counted in <opt_nmatch>; and
+ *            return the denominator <alen - double_gaps> in
+ *            <opt_n>.
+ *            
+ *            Alphabetic symbols <[a-zA-Z]> are compared
+ *            case-insensitively for identity. Any nonalphabetic
+ *            character is assumed to be a gap symbol.
+ *            
+ *            This simple comparison rule is unaware of synonyms and
+ *            degeneracies in biological alphabets.  For a more
+ *            sophisticated and biosequence-aware comparison, use
+ *            digitized sequences and the <esl_dst_XPairmatch()> function
+ *            instead. Note that currently <esl_dst_XPairMatch()> does
+ *            not correctly handle degeneracies, but is set up to.
+ *
+ * Args:      asq1         - aligned character string 1
+ *            asq2         - aligned character string 2
+ *            opt_pmatch   - optRETURN: pairwise matches, 0<=x<=1
+ *            opt_nmatch   - optRETURN: # of matches
+ *            opt_n        - optRETURN: denominator alen - double_gaps
+ *
+ * Returns:   <eslOK> on success. <opt_pmatch>, <opt_nmatch>, <opt_n>
+ *            contain the answers (for whichever were passed non-NULL). 
+ *
+ * Throws:    <eslEINVAL> if the strings are different lengths
+ *            (not aligned).
+ */
+int
+esl_dst_CPairMatch(const char *asq1, const char *asq2, 
+		   double *opt_pmatch, int *opt_nmatch, int *opt_n)
+{
+  int     status;
+  int     match;                /* total matched positions              */
+  int     len;                  /* length of alignment (no double gaps) */
+  int     i;                    /* position in aligned seqs             */
+
+  match = len = 0;
+  for (i = 0; asq1[i] != '\0' && asq2[i] != '\0'; i++) 
+    {
+      if (isalpha(asq1[i]) || isalpha(asq2[i])) len++;
+      if (isalpha(asq1[i]) && isalpha(asq2[i])) match++;
+    }
+  if (asq1[i] != '\0' || asq2[i] != '\0') 
+    ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned");
+
+  if (opt_pmatch != NULL)  *opt_pmatch = ( len==0 ? 0. : (double)match / (double)len);
+  if (opt_nmatch != NULL)  *opt_nmatch = match;
+  if (opt_n      != NULL)  *opt_n      = len;
+  return eslOK;
+
+ ERROR:
+  if (opt_pmatch != NULL)  *opt_pmatch = 0.;
+  if (opt_nmatch != NULL)  *opt_nmatch = 0;
+  if (opt_n      != NULL)  *opt_n      = 0;
+  return status;
+}
+
+/* Function:  esl_dst_CJukesCantor()
+ * Synopsis:  Jukes-Cantor distance for two aligned strings.
+ * Incept:    SRE, Tue Apr 18 14:00:37 2006 [St. Louis]
+ *
+ * Purpose:   Calculate the generalized Jukes-Cantor distance between
+ *            two aligned character strings <as1> and <as2>, in
+ *            substitutions/site, for an alphabet of <K> residues
+ *            (<K=4> for nucleic acid, <K=20> for proteins). The
+ *            maximum likelihood estimate for the distance is
+ *            optionally returned in <opt_distance>. The large-sample
+ *            variance for the distance estimate is
+ *            optionally returned in <opt_variance>.
+ *            
+ *            Alphabetic symbols <[a-zA-Z]> are compared
+ *            case-insensitively to count the number of identities
+ *            (<n1>) and mismatches (<n2>>). Any nonalphabetic
+ *            character is assumed to be a gap symbol, and aligned
+ *            columns containing gap symbols are ignored.  The
+ *            fractional difference <D> used to calculate the
+ *            Jukes/Cantor distance is <n2/n1+n2>.
+ *            
+ * Args:      K            - size of the alphabet (4 or 20)
+ *            as1          - 1st aligned seq, 0..L-1, \0-terminated
+ *            as2          - 2nd aligned seq, 0..L-1, \0-terminated 
+ *            opt_distance - optRETURN: ML estimate of distance d
+ *            opt_variance - optRETURN: large-sample variance of d
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ *            Infinite distances are possible, in which case distance
+ *            and variance are both <HUGE_VAL>. Caller has to deal
+ *            with this case as it sees fit, perhaps by enforcing
+ *            an arbitrary maximum distance.
+ *
+ * Throws:    <eslEINVAL> if the two strings aren't the same length (and
+ *            thus can't have been properly aligned).
+ *            <eslEDIVZERO> if no aligned residues were counted.
+ *            On either failure, distance and variance are both returned
+ *            as <HUGE_VAL>.
+ */
+int
+esl_dst_CJukesCantor(int K, const char *as1, const char *as2, 
+		     double *opt_distance, double *opt_variance)
+{
+  int     status;
+  int     n1, n2;               /* number of observed identities, substitutions */
+  int     i;                    /* position in aligned seqs   */
+
+  /* 1. Count identities, mismatches.
+   */
+  n1 = n2 = 0;
+  for (i = 0; as1[i] != '\0' && as2[i] != '\0'; i++) 
+    {
+      if (isalpha(as1[i]) && isalpha(as2[i]))
+	{
+	  if (toupper(as1[i]) == toupper(as2[i])) n1++; else n2++;
+	}
+    }
+  if (as1[i] != '\0' || as2[i] != '\0') 
+    ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned");
+  
+  return jukescantor(n1, n2, K, opt_distance, opt_variance); /* can throw eslEDIVZERO */
+
+ ERROR:
+  if (opt_distance != NULL)  *opt_distance = HUGE_VAL;
+  if (opt_variance != NULL)  *opt_variance = HUGE_VAL;
+  return status;
+}
+
+/*------- end, pairwise distances for aligned text seqs ---------*/
+
+
+
+
+
+/*****************************************************************
+ * 2. Pairwise distances for aligned digitized sequences. [alphabet]
+ *****************************************************************/
+#ifdef eslAUGMENT_ALPHABET
+
+/* Function:  esl_dst_XPairId()
+ * Synopsis:  Pairwise identity of two aligned digital seqs.
+ * Incept:    SRE, Tue Apr 18 09:24:05 2006 [St. Louis]
+ *
+ * Purpose:   Digital version of <esl_dst_CPairId()>: <adsq1> and
+ *            <adsq2> are digitized aligned sequences, in alphabet
+ *            <abc>. Otherwise, same as <esl_dst_CPairId()> except
+ *            that only canonical residues are counted and checked for
+ *            identity, while <esl_dst_CPairId()> (which has no
+ *            alphabet) counts and checks identity of all alphanumeric
+ *            characters.
+ *            
+ *            This function does not use <esl_abc_Match()> to handle
+ *            degeneracies but it is set up to do so. Doing that would
+ *            require that <opt_nid> be changed to a float or double,
+ *            or its meaning be changed to be the number of canonical
+ *            identities.
+ *
+ * Args:      abc          - digital alphabet in use
+ *            ax1          - aligned digital seq 1
+ *            ax2          - aligned digital seq 2
+ *            opt_pid      - optRETURN: pairwise identity, 0<=x<=1
+ *            opt_nid      - optRETURN: # of identities
+ *            opt_n        - optRETURN: denominator MIN(len1,len2)
+ *
+ * Returns:   <eslOK> on success. <opt_distance>, <opt_nid>, <opt_n>
+ *            contain the answers, for any of these that were passed
+ *            non-<NULL> pointers.
+ *
+ * Throws:    <eslEINVAL> if the strings are different lengths (not aligned).
+ */
+int
+esl_dst_XPairId(const ESL_ALPHABET *abc, const ESL_DSQ *ax1, const ESL_DSQ *ax2, 
+		double *opt_distance, int *opt_nid, int *opt_n)
+{
+  int     status;
+  int     idents;               /* total identical positions  */
+  int     len1, len2;           /* lengths of seqs            */
+  int     i;                    /* position in aligned seqs   */
+
+  idents = len1 = len2 = 0;
+  for (i = 1; ax1[i] != eslDSQ_SENTINEL && ax2[i] != eslDSQ_SENTINEL; i++) 
+    {
+      if (esl_abc_XIsCanonical(abc, ax1[i])) len1++;
+      if (esl_abc_XIsCanonical(abc, ax2[i])) len2++;
+
+      if (esl_abc_XIsCanonical(abc, ax1[i]) && esl_abc_XIsCanonical(abc, ax2[i])
+	  && ax1[i] == ax2[i])
+	idents++;
+    }
+  if (len2 < len1) len1 = len2;
+
+  if (ax1[i] != eslDSQ_SENTINEL || ax2[i] != eslDSQ_SENTINEL) 
+    ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned");
+
+  if (opt_distance != NULL)  *opt_distance = ( len1==0 ? 0. : (double) idents / (double) len1 );
+  if (opt_nid      != NULL)  *opt_nid      = idents;
+  if (opt_n        != NULL)  *opt_n        = len1;
+  return eslOK;
+
+ ERROR:
+  if (opt_distance != NULL)  *opt_distance = 0.;
+  if (opt_nid      != NULL)  *opt_nid      = 0;
+  if (opt_n        != NULL)  *opt_n        = 0;
+  return status;
+}
+
+/* Function:  esl_dst_XPairMatch()
+ * Synopsis:  Pairwise matches of two aligned digital seqs.
+ * Incept:    ER, Wed Oct 29 09:09:07 EDT 2014 [janelia]
+ *
+ * Purpose:   Digital version of <esl_dst_CPairMatch()>: <adsq1> and
+ *            <adsq2> are digitized aligned sequences, in alphabet
+ *            <abc>. Otherwise, same as <esl_dst_CPairId()> except
+ *            that only canonical residues are counted and checked for
+ *            identity, while <esl_dst_CPairId()> (which has no
+ *            alphabet) counts and checks identity of all alphanumeric
+ *            characters.
+ *
+ * Args:      abc          - digital alphabet in use
+ *            ax1          - aligned digital seq 1
+ *            ax2          - aligned digital seq 2
+ *            opt_pmatch   - optRETURN: pairwise matches, 0<=x<=1
+ *            opt_nmatch   - optRETURN: # of maches
+ *            opt_n        - optRETURN: denominator alen-double_gaps
+ *
+ * Returns:   <eslOK> on success. <opt_distance>, <opt_nmatch>, <opt_n>
+ *            contain the answers, for any of these that were passed
+ *            non-<NULL> pointers.
+ *
+ * Throws:    <eslEINVAL> if the strings are different lengths (not aligned).
+ */
+int
+esl_dst_XPairMatch(const ESL_ALPHABET *abc, const ESL_DSQ *ax1, const ESL_DSQ *ax2, 
+		   double *opt_distance, int *opt_nmatch, int *opt_n)
+{
+  int     status;
+  int     match;                /* total matched positions              */
+  int     len;                  /* length of alignment (no double gaps) */
+  int     i;                    /* position in aligned seqs             */
+
+  match = len = 0;
+  for (i = 1; ax1[i] != eslDSQ_SENTINEL && ax2[i] != eslDSQ_SENTINEL; i++) 
+    {
+      if (esl_abc_XIsCanonical(abc, ax1[i]) || esl_abc_XIsCanonical(abc, ax2[i])) len ++;
+      if (esl_abc_XIsCanonical(abc, ax1[i]) && esl_abc_XIsCanonical(abc, ax2[i])) match++;
+    }
+
+  if (ax1[i] != eslDSQ_SENTINEL || ax2[i] != eslDSQ_SENTINEL) 
+    ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned");
+
+  if (opt_distance != NULL)  *opt_distance = ( len==0 ? 0. : (double)match / (double)len );
+  if (opt_nmatch   != NULL)  *opt_nmatch   = match;
+  if (opt_n        != NULL)  *opt_n        = len;
+  return eslOK;
+
+ ERROR:
+  if (opt_distance != NULL)  *opt_distance = 0.;
+  if (opt_nmatch   != NULL)  *opt_nmatch   = 0;
+  if (opt_n        != NULL)  *opt_n        = 0;
+  return status;
+}
+
+
+/* Function:  esl_dst_XJukesCantor()
+ * Synopsis:  Jukes-Cantor distance for two aligned digitized seqs.
+ * Incept:    SRE, Tue Apr 18 15:26:51 2006 [St. Louis]
+ *
+ * Purpose:   Calculate the generalized Jukes-Cantor distance between two
+ *            aligned digital strings <ax> and <ay>, in substitutions/site, 
+ *            using alphabet <abc> to evaluate identities and differences.
+ *            The maximum likelihood estimate for the distance is optionally returned in
+ *            <opt_distance>. The large-sample variance for the distance
+ *            estimate is optionally returned in <opt_variance>.
+ *            
+ *            Identical to <esl_dst_CJukesCantor()>, except that it takes
+ *            digital sequences instead of character strings.
+ *
+ * Args:      abc          - bioalphabet to use for comparisons
+ *            ax           - 1st digital aligned seq
+ *            ay           - 2nd digital aligned seq
+ *            opt_distance - optRETURN: ML estimate of distance d
+ *            opt_variance - optRETURN: large-sample variance of d
+ *
+ * Returns:   <eslOK> on success. As in <esl_dst_CJukesCantor()>, the
+ *            distance and variance may be infinite, in which case they
+ *            are returned as <HUGE_VAL>.
+ *
+ * Throws:    <eslEINVAL> if the two strings aren't the same length (and
+ *            thus can't have been properly aligned).
+ *            <eslEDIVZERO> if no aligned residues were counted.
+ *            On either failure, the distance and variance are set
+ *            to <HUGE_VAL>.
+ */
+int
+esl_dst_XJukesCantor(const ESL_ALPHABET *abc, const ESL_DSQ *ax, const ESL_DSQ *ay, 
+		     double *opt_distance, double *opt_variance)
+{
+  int     status;
+  int     n1, n2;               /* number of observed identities, substitutions */
+  int     i;                    /* position in aligned seqs   */
+
+  n1 = n2 = 0;
+  for (i = 1; ax[i] != eslDSQ_SENTINEL && ay[i] != eslDSQ_SENTINEL; i++) 
+    {
+      if (esl_abc_XIsCanonical(abc, ax[i]) && esl_abc_XIsCanonical(abc, ay[i]))
+	{
+	  if (ax[i] == ay[i]) n1++;
+	  else                n2++;
+	}
+    }
+  if (ax[i] != eslDSQ_SENTINEL || ay[i] != eslDSQ_SENTINEL) 
+    ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned");
+  
+  return jukescantor(n1, n2, abc->K, opt_distance, opt_variance);
+
+ ERROR:
+  if (opt_distance != NULL)  *opt_distance = HUGE_VAL;
+  if (opt_variance != NULL)  *opt_variance = HUGE_VAL;
+  return status;
+}
+
+#endif /*eslAUGMENT_ALPHABET*/
+/*---------- end pairwise distances, digital seqs --------------*/
+
+
+
+
+/*****************************************************************
+ * 3. Distance matrices for aligned text sequences.
+ *****************************************************************/
+#ifdef eslAUGMENT_DMATRIX
+
+/* Function:  esl_dst_CPairIdMx()
+ * Synopsis:  NxN identity matrix for N aligned text sequences.
+ * Incept:    SRE, Thu Apr 27 08:46:08 2006 [New York]
+ *
+ * Purpose:   Given a multiple sequence alignment <as>, consisting
+ *            of <N> aligned character strings; calculate
+ *            a symmetric fractional pairwise identity matrix by $N(N-1)/2$
+ *            calls to <esl_dst_CPairId()>, and return it in 
+ *            <ret_D>.
+ *
+ * Args:      as      - aligned seqs (all same length), [0..N-1]
+ *            N       - # of aligned sequences
+ *            ret_S   - RETURN: symmetric fractional identity matrix
+ *
+ * Returns:   <eslOK> on success, and <ret_S> contains the fractional
+ *            identity matrix. Caller free's <S> with
+ *            <esl_dmatrix_Destroy()>.
+ *
+ * Throws:    <eslEINVAL> if a seq has a different
+ *            length than others. On failure, <ret_D> is returned <NULL>
+ *            and state of inputs is unchanged.
+ *            
+ *            <eslEMEM> on allocation failure.
+ */
+int
+esl_dst_CPairIdMx(char **as, int N, ESL_DMATRIX **ret_S)
+{
+  ESL_DMATRIX *S = NULL;
+  int status;
+  int i,j;
+
+  if (( S = esl_dmatrix_Create(N,N) ) == NULL) { status = eslEMEM; goto ERROR; }
+  
+  for (i = 0; i < N; i++)
+    {
+      S->mx[i][i] = 1.;
+      for (j = i+1; j < N; j++)
+	{
+	  status = esl_dst_CPairId(as[i], as[j], &(S->mx[i][j]), NULL, NULL);
+	  if (status != eslOK)
+	    ESL_XEXCEPTION(status, "Pairwise identity calculation failed at seqs %d,%d\n", i,j);
+	  S->mx[j][i] =  S->mx[i][j];
+	}
+    }
+  if (ret_S != NULL) *ret_S = S; else esl_dmatrix_Destroy(S);
+  return eslOK;
+
+ ERROR:
+  if (S     != NULL)  esl_dmatrix_Destroy(S);
+  if (ret_S != NULL) *ret_S = NULL;
+  return status;
+}
+
+
+/* Function:  esl_dst_CDiffMx()
+ * Synopsis:  NxN difference matrix for N aligned text sequences.
+ * Incept:    SRE, Fri Apr 28 06:27:20 2006 [New York]
+ *
+ * Purpose:   Same as <esl_dst_CPairIdMx()>, but calculates
+ *            the fractional difference <d=1-s> instead of the
+ *            fractional identity <s> for each pair.
+ *
+ * Args:      as      - aligned seqs (all same length), [0..N-1]
+ *            N       - # of aligned sequences
+ *            ret_D   - RETURN: symmetric fractional difference matrix
+ *
+ * Returns:   <eslOK> on success, and <ret_D> contains the
+ *            fractional difference matrix. Caller free's <D> with 
+ *            <esl_dmatrix_Destroy()>.
+ *
+ * Throws:    <eslEINVAL> if any seq has a different
+ *            length than others. On failure, <ret_D> is returned <NULL>
+ *            and state of inputs is unchanged.
+ */
+int
+esl_dst_CDiffMx(char **as, int N, ESL_DMATRIX **ret_D)
+{
+  ESL_DMATRIX *D = NULL;
+  int status;
+  int i,j;
+
+  status = esl_dst_CPairIdMx(as, N, &D);
+  if (status != eslOK) goto ERROR;
+
+  for (i = 0; i < N; i++)
+    {
+      D->mx[i][i] = 0.;
+      for (j = i+1; j < N; j++) 
+	{
+	  D->mx[i][j] = 1. - D->mx[i][j];
+	  D->mx[j][i] = D->mx[i][j];
+	}
+    }
+
+  if (ret_D != NULL) *ret_D = D; else esl_dmatrix_Destroy(D);
+  return eslOK;
+
+ ERROR:
+  if (D     != NULL)  esl_dmatrix_Destroy(D);
+  if (ret_D != NULL) *ret_D = NULL;
+  return status;
+
+}
+
+/* Function:  esl_dst_CJukesCantorMx()
+ * Synopsis:  NxN Jukes/Cantor distance matrix for N aligned text seqs.
+ * Incept:    SRE, Tue Apr 18 16:00:16 2006 [St. Louis]
+ *
+ * Purpose:   Given a multiple sequence alignment <aseq>, consisting of
+ *            <nseq> aligned character sequences in an alphabet of
+ *            <K> letters (usually 4 for DNA, 20 for protein);
+ *            calculate a symmetric Jukes/Cantor pairwise distance
+ *            matrix for all sequence pairs, and optionally return the distance
+ *            matrix in <ret_D>, and optionally return a symmetric matrix of the
+ *            large-sample variances for those ML distance estimates
+ *            in <ret_V>.
+ *            
+ *            Infinite distances (and variances) are possible; they
+ *            are represented as <HUGE_VAL> in <D> and <V>. Caller must
+ *            be prepared to deal with them as appropriate.
+ *
+ * Args:      K      - size of the alphabet (usually 4 or 20)
+ *            aseq   - aligned sequences [0.nseq-1][0..L-1]
+ *            nseq   - number of aseqs
+ *            opt_D  - optRETURN: [0..nseq-1]x[0..nseq-1] symmetric distance mx
+ *            opt_V  - optRETURN: matrix of variances.
+ *
+ * Returns:   <eslOK> on success. <D> and <V> contain the
+ *            distance matrix (and variances); caller frees these with
+ *            <esl_dmatrix_Destroy()>. 
+ *
+ * Throws:    <eslEINVAL> if any pair of sequences have differing lengths
+ *            (and thus cannot have been properly aligned). 
+ *            <eslEDIVZERO> if some pair of sequences had no aligned
+ *            residues. On failure, <D> and <V> are both returned <NULL>
+ *            and state of inputs is unchanged.
+ *            
+ *            <eslEMEM> on allocation failure.
+ */
+int
+esl_dst_CJukesCantorMx(int K, char **aseq, int nseq, 
+		       ESL_DMATRIX **opt_D, ESL_DMATRIX **opt_V)
+{
+  int          status;
+  ESL_DMATRIX *D = NULL;
+  ESL_DMATRIX *V = NULL;
+  int          i,j;
+
+  if (( D = esl_dmatrix_Create(nseq, nseq) ) == NULL) { status = eslEMEM; goto ERROR; }
+  if (( V = esl_dmatrix_Create(nseq, nseq) ) == NULL) { status = eslEMEM; goto ERROR; }
+
+  for (i = 0; i < nseq; i++)
+    {
+      D->mx[i][i] = 0.;
+      V->mx[i][i] = 0.;
+      for (j = i+1; j < nseq; j++)
+	{
+	  status = esl_dst_CJukesCantor(K, aseq[i], aseq[j], 
+					&(D->mx[i][j]), &(V->mx[i][j]));
+	  if (status != eslOK) 
+	    ESL_XEXCEPTION(status, "J/C calculation failed at seqs %d,%d", i,j);
+
+	  D->mx[j][i] = D->mx[i][j];
+	  V->mx[j][i] = V->mx[i][j];
+	}
+    }
+  if (opt_D != NULL) *opt_D = D;  else esl_dmatrix_Destroy(D);
+  if (opt_V != NULL) *opt_V = V;  else esl_dmatrix_Destroy(V);
+  return eslOK;
+
+ ERROR:
+  if (D     != NULL) esl_dmatrix_Destroy(D);
+  if (V     != NULL) esl_dmatrix_Destroy(V);
+  if (opt_D != NULL) *opt_D = NULL;
+  if (opt_V != NULL) *opt_V = NULL;
+  return status;
+}
+
+#endif /*eslAUGMENT_DMATRIX*/
+/*----------- end, distance matrices for aligned text seqs ---------*/
+
+
+
+
+/*****************************************************************
+ * 4. Distance matrices for aligned digital sequences.
+ *****************************************************************/
+#if defined(eslAUGMENT_ALPHABET) && defined(eslAUGMENT_DMATRIX)
+
+
+/* Function:  esl_dst_XPairIdMx()
+ * Synopsis:  NxN identity matrix for N aligned digital seqs.
+ * Incept:    SRE, Thu Apr 27 09:08:11 2006 [New York]
+ *
+ * Purpose:   Given a digitized multiple sequence alignment <ax>, consisting
+ *            of <N> aligned digital sequences in alphabet <abc>; calculate
+ *            a symmetric pairwise fractional identity matrix by $N(N-1)/2$
+ *            calls to <esl_dst_XPairId()>, and return it in <ret_S>.
+ *            
+ * Args:      abc   - digital alphabet in use
+ *            ax    - aligned dsq's, [0..N-1][1..alen]                  
+ *            N     - number of aligned sequences
+ *            ret_S - RETURN: NxN matrix of fractional identities
+ *
+ * Returns:   <eslOK> on success, and <ret_S> contains the distance
+ *            matrix. Caller is obligated to free <S> with 
+ *            <esl_dmatrix_Destroy()>. 
+ *
+ * Throws:    <eslEINVAL> if a seq has a different
+ *            length than others. On failure, <ret_S> is returned <NULL>
+ *            and state of inputs is unchanged.
+ *            
+ *            <eslEMEM> on allocation failure.
+ */
+int
+esl_dst_XPairIdMx(const ESL_ALPHABET *abc,  ESL_DSQ **ax, int N, ESL_DMATRIX **ret_S)
+{
+  int status;
+  ESL_DMATRIX *S = NULL;
+  int i,j;
+
+  if (( S = esl_dmatrix_Create(N,N) ) == NULL) { status = eslEMEM; goto ERROR; }
+  
+  for (i = 0; i < N; i++)
+    {
+      S->mx[i][i] = 1.;
+      for (j = i+1; j < N; j++)
+	{
+	  status = esl_dst_XPairId(abc, ax[i], ax[j], &(S->mx[i][j]), NULL, NULL);
+	  if (status != eslOK)
+	    ESL_XEXCEPTION(status, "Pairwise identity calculation failed at seqs %d,%d\n", i,j);
+	  S->mx[j][i] =  S->mx[i][j];
+	}
+    }
+  if (ret_S != NULL) *ret_S = S; else esl_dmatrix_Destroy(S);
+  return eslOK;
+
+ ERROR:
+  if (S     != NULL)  esl_dmatrix_Destroy(S);
+  if (ret_S != NULL) *ret_S = NULL;
+  return status;
+}
+
+
+/* Function:  esl_dst_XDiffMx()
+ * Synopsis:  NxN difference matrix for N aligned digital seqs.         
+ * Incept:    SRE, Fri Apr 28 06:37:29 2006 [New York]
+ *
+ * Purpose:   Same as <esl_dst_XPairIdMx()>, but calculates fractional
+ *            difference <1-s> instead of fractional identity <s> for
+ *            each pair.
+ *
+ * Args:      abc   - digital alphabet in use
+ *            ax    - aligned dsq's, [0..N-1][1..alen]                  
+ *            N     - number of aligned sequences
+ *            ret_D - RETURN: NxN matrix of fractional differences
+ *            
+ * Returns:   <eslOK> on success, and <ret_D> contains the difference
+ *            matrix; caller is obligated to free <D> with 
+ *            <esl_dmatrix_Destroy()>. 
+ *
+ * Throws:    <eslEINVAL> if a seq has a different
+ *            length than others. On failure, <ret_D> is returned <NULL>
+ *            and state of inputs is unchanged.
+ */
+int
+esl_dst_XDiffMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_D)
+{
+  int status;
+  ESL_DMATRIX *D = NULL;
+  int i,j;
+
+  status = esl_dst_XPairIdMx(abc, ax, N, &D);
+  if (status != eslOK) goto ERROR;
+
+  for (i = 0; i < N; i++)
+    {
+      D->mx[i][i] = 0.;
+      for (j = i+1; j < N; j++) 
+	{
+	  D->mx[i][j] = 1. - D->mx[i][j];
+	  D->mx[j][i] = D->mx[i][j];
+	}
+    }
+  if (ret_D != NULL) *ret_D = D; else esl_dmatrix_Destroy(D);
+  return eslOK;
+
+ ERROR:
+  if (D     != NULL)  esl_dmatrix_Destroy(D);
+  if (ret_D != NULL) *ret_D = NULL;
+  return status;
+}
+
+/* Function:  esl_dst_XJukesCantorMx()
+ * Synopsis:  NxN Jukes/Cantor distance matrix for N aligned digital seqs.
+ * Incept:    SRE, Thu Apr 27 08:38:08 2006 [New York City]
+ *
+ * Purpose:   Given a digitized multiple sequence alignment <ax>,
+ *            consisting of <nseq> aligned digital sequences in
+ *            bioalphabet <abc>, calculate a symmetric Jukes/Cantor
+ *            pairwise distance matrix for all sequence pairs;
+ *            optionally return the distance matrix in <ret_D> and 
+ *            a matrix of the large-sample variances for those ML distance
+ *            estimates in <ret_V>.
+ *            
+ *            Infinite distances (and variances) are possible. They
+ *            are represented as <HUGE_VAL> in <D> and <V>. Caller must
+ *            be prepared to deal with them as appropriate.
+ *
+ * Args:      abc    - bioalphabet for <aseq>
+ *            ax     - aligned digital sequences [0.nseq-1][1..L]
+ *            nseq   - number of aseqs
+ *            opt_D  - optRETURN: [0..nseq-1]x[0..nseq-1] symmetric distance mx
+ *            opt_V  - optRETURN: matrix of variances.
+ *
+ * Returns:   <eslOK> on success. <D> (and optionally <V>) contain the
+ *            distance matrix (and variances). Caller frees these with
+ *            <esl_dmatrix_Destroy()>. 
+ *
+ * Throws:    <eslEINVAL> if any pair of sequences have differing lengths
+ *            (and thus cannot have been properly aligned). 
+ *            <eslEDIVZERO> if some pair of sequences had no aligned
+ *            residues. On failure, <D> and <V> are both returned <NULL>
+ *            and state of inputs is unchanged.
+ *            
+ *            <eslEMEM> on allocation failure.
+ */
+int
+esl_dst_XJukesCantorMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int nseq, 
+		       ESL_DMATRIX **opt_D, ESL_DMATRIX **opt_V)
+{
+  ESL_DMATRIX *D = NULL;
+  ESL_DMATRIX *V = NULL;
+  int          status;
+  int          i,j;
+
+  if (( D = esl_dmatrix_Create(nseq, nseq) ) == NULL) { status = eslEMEM; goto ERROR; }
+  if (( V = esl_dmatrix_Create(nseq, nseq) ) == NULL) { status = eslEMEM; goto ERROR; }
+
+  for (i = 0; i < nseq; i++)
+    {
+      D->mx[i][i] = 0.;
+      V->mx[i][i] = 0.;
+      for (j = i+1; j < nseq; j++)
+	{
+	  status = esl_dst_XJukesCantor(abc, ax[i], ax[j], 
+					&(D->mx[i][j]), &(V->mx[i][j]));
+	  if (status != eslOK) 
+	    ESL_XEXCEPTION(status, "J/C calculation failed at digital aseqs %d,%d", i,j);
+
+	  D->mx[j][i] = D->mx[i][j];
+	  V->mx[j][i] = V->mx[i][j];
+	}
+    }
+  if (opt_D != NULL) *opt_D = D;  else esl_dmatrix_Destroy(D);
+  if (opt_V != NULL) *opt_V = V;  else esl_dmatrix_Destroy(V);
+  return eslOK;
+
+ ERROR:
+  if (D     != NULL) esl_dmatrix_Destroy(D);
+  if (V     != NULL) esl_dmatrix_Destroy(V);
+  if (opt_D != NULL) *opt_D = NULL;
+  if (opt_V != NULL) *opt_V = NULL;
+  return status;
+}
+#endif /*eslAUGMENT_ALPHABET && eslAUGMENT_DMATRIX*/
+/*------- end, distance matrices for digital alignments ---------*/
+
+
+
+/*****************************************************************
+ * 5. Average pairwise identity for multiple alignments
+ *****************************************************************/
+
+#ifdef eslAUGMENT_RANDOM
+/* Function:  esl_dst_CAverageId()
+ * Synopsis:  Calculate avg identity for multiple alignment
+ * Incept:    SRE, Fri May 18 15:02:38 2007 [Janelia]
+ *
+ * Purpose:   Calculates the average pairwise fractional identity in
+ *            a multiple sequence alignment <as>, consisting of <N>
+ *            aligned character sequences of identical length.
+ *            
+ *            If an exhaustive calculation would require more than
+ *            <max_comparisons> pairwise comparisons, then instead of
+ *            looking at all pairs, calculate the average over a
+ *            stochastic sample of <max_comparisons> random pairs.
+ *            This allows the routine to work efficiently even on very
+ *            deep MSAs.
+ *            
+ *            Each fractional pairwise identity (range $[0..$ pid $..1]$
+ *            is calculated using <esl_dst_CPairId()>.
+ *
+ * Returns:   <eslOK> on success, and <*ret_id> contains the average
+ *            fractional identity.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEINVAL> if any of the aligned sequence pairs aren't 
+ *            of the same length.
+ *            In either case, <*ret_id> is set to 0.
+ */
+int
+esl_dst_CAverageId(char **as, int N, int max_comparisons, double *ret_id)
+{
+  int    status;
+  double id;
+  double sum = 0.;
+  int    i,j,n;
+  
+  if (N <= 1) { *ret_id = 1.; return eslOK; }
+  *ret_id = 0.;
+
+  /* Is nseq small enough that we can average over all pairwise comparisons? */
+  if ((N * (N-1) / 2) <= max_comparisons)
+    {
+      for (i = 0; i < N; i++)
+	for (j = i+1; j < N; j++)
+	  {
+	    if ((status = esl_dst_CPairId(as[i], as[j], &id, NULL, NULL)) != eslOK) return status;
+	    sum += id;
+	  }
+      sum /= (double) (N * (N-1) / 2);
+    }
+
+  /* If nseq is large, calculate average over a stochastic sample. */
+  else				
+    {
+      ESL_RANDOMNESS *r = esl_randomness_Create(0);
+      for (n = 0; n < max_comparisons; n++)
+	{
+	  do { i = esl_rnd_Roll(r, N); j = esl_rnd_Roll(r, N); } while (j == i); /* make sure j != i */
+	  if ((status = esl_dst_CPairId(as[i], as[j], &id, NULL, NULL)) != eslOK) return status;
+	  sum += id;
+	}
+      sum /= (double) max_comparisons;
+      esl_randomness_Destroy(r);
+    }
+
+  *ret_id = sum;
+  return eslOK;
+}
+
+/* Function:  esl_dst_CAverageMatch()
+ * Synopsis:  Calculate avg matches for multiple alignment
+ * Incept:    ER, Wed Oct 29 09:25:09 EDT 2014 [Janelia]
+ *
+ * Purpose:   Calculates the average pairwise fractional matches in
+ *            a multiple sequence alignment <as>, consisting of <N>
+ *            aligned character sequences of identical length.
+ *            
+ *            If an exhaustive calculation would require more than
+ *            <max_comparisons> pairwise comparisons, then instead of
+ *            looking at all pairs, calculate the average over a
+ *            stochastic sample of <max_comparisons> random pairs.
+ *            This allows the routine to work efficiently even on very
+ *            deep MSAs.
+ *            
+ *            Each fractional pairwise matches (range $[0..$ pid $..1]$
+ *            is calculated using <esl_dst_CPairMatch()>.
+ *
+ * Returns:   <eslOK> on success, and <*ret_match> contains the average
+ *            fractional matches.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEINVAL> if any of the aligned sequence pairs aren't 
+ *            of the same length.
+ *            In either case, <*ret_match> is set to 0.
+ */
+int
+esl_dst_CAverageMatch(char **as, int N, int max_comparisons, double *ret_match)
+{
+  int    status;
+  double match;
+  double sum = 0.;
+  int    i,j,n;
+  
+ if (N <= 1) { *ret_match = 1.; return eslOK; }
+  *ret_match = 0.;
+
+  /* Is nseq small enough that we can average over all pairwise comparisons? */
+  if ((N * (N-1) / 2) <= max_comparisons)
+    {
+      for (i = 0; i < N; i++)
+	for (j = i+1; j < N; j++)
+	  {
+	    if ((status = esl_dst_CPairMatch(as[i], as[j], &match, NULL, NULL)) != eslOK) return status;
+	    sum += match;
+	  }
+      sum /= (double) (N * (N-1) / 2);
+    }
+
+  /* If nseq is large, calculate average over a stochastic sample. */
+  else				
+    {
+      ESL_RANDOMNESS *r = esl_randomness_Create(0);
+      for (n = 0; n < max_comparisons; n++)
+	{
+	  do { i = esl_rnd_Roll(r, N); j = esl_rnd_Roll(r, N); } while (j == i); /* make sure j != i */
+	  if ((status = esl_dst_CPairMatch(as[i], as[j], &match, NULL, NULL)) != eslOK) return status;
+	  sum += match;
+	}
+      sum /= (double) max_comparisons;
+      esl_randomness_Destroy(r);
+    }
+
+  *ret_match = sum;
+  return eslOK;
+}
+
+#endif /* eslAUGMENT_RANDOM */
+
+#if defined(eslAUGMENT_RANDOM) && defined(eslAUGMENT_ALPHABET)
+/* Function:  esl_dst_XAverageId()
+ * Synopsis:  Calculate avg identity for digital MSA 
+ * Incept:    SRE, Fri May 18 15:19:14 2007 [Janelia]
+ *
+ * Purpose:   Calculates the average pairwise fractional identity in
+ *            a digital multiple sequence alignment <ax>, consisting of <N>
+ *            aligned digital sequences of identical length.
+ *            
+ *            If an exhaustive calculation would require more than
+ *            <max_comparisons> pairwise comparisons, then instead of
+ *            looking at all pairs, calculate the average over a
+ *            stochastic sample of <max_comparisons> random pairs.
+ *            This allows the routine to work efficiently even on very
+ *            deep MSAs.
+ *            
+ *            Each fractional pairwise identity (range $[0..$ pid $..1]$
+ *            is calculated using <esl_dst_XPairId()>.
+ *
+ * Returns:   <eslOK> on success, and <*ret_id> contains the average
+ *            fractional identity.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEINVAL> if any of the aligned sequence pairs aren't 
+ *            of the same length.
+ *            In either case, <*ret_id> is set to 0.
+ */
+int
+esl_dst_XAverageId(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, int max_comparisons, double *ret_id)
+{
+  int    status;
+  double id;
+  double sum = 0.;
+  int    i,j,n;
+  
+  if (N <= 1) { *ret_id = 1.; return eslOK; }
+  *ret_id = 0.;
+
+  /* Is N small enough that we can average over all pairwise comparisons? 
+     watch out for numerical overflow in this: Pfam N's easily overflow when squared
+   */
+  if (N <= max_comparisons &&
+      N <= sqrt(2. * max_comparisons) &&
+      (N * (N-1) / 2) <= max_comparisons)
+    {
+      for (i = 0; i < N; i++)
+	for (j = i+1; j < N; j++)
+	  {
+	    if ((status = esl_dst_XPairId(abc, ax[i], ax[j], &id, NULL, NULL)) != eslOK) return status;
+	    sum += id;
+	  }
+      sum /= (double) (N * (N-1) / 2);
+    }
+
+  /* If nseq is large, calculate average over a stochastic sample. */
+  else				
+    {
+      ESL_RANDOMNESS *r = esl_randomness_Create(0);
+      for (n = 0; n < max_comparisons; n++)
+	{
+	  do { i = esl_rnd_Roll(r, N); j = esl_rnd_Roll(r, N); } while (j == i); /* make sure j != i */
+	  if ((status = esl_dst_XPairId(abc, ax[i], ax[j], &id, NULL, NULL)) != eslOK) return status;
+	  sum += id;
+	}
+      sum /= (double) max_comparisons;
+      esl_randomness_Destroy(r);
+    }
+
+  *ret_id = sum;
+  return eslOK;
+}
+
+/* Function:  esl_dst_XAverageMatch()
+ * Synopsis:  Calculate avg matches for digital MSA 
+ * Incept:    ER, ed Oct 29 09:29:05 EDT 2014 [Janelia]
+ *
+ * Purpose:   Calculates the average pairwise fractional matches in
+ *            a digital multiple sequence alignment <ax>, consisting of <N>
+ *            aligned digital sequences of identical length.
+ *            
+ *            If an exhaustive calculation would require more than
+ *            <max_comparisons> pairwise comparisons, then instead of
+ *            looking at all pairs, calculate the average over a
+ *            stochastic sample of <max_comparisons> random pairs.
+ *            This allows the routine to work efficiently even on very
+ *            deep MSAs.
+ *            
+ *            Each fractional pairwise matches (range $[0..$ pid $..1]$
+ *            is calculated using <esl_dst_XPairMatch()>.
+ *
+ * Returns:   <eslOK> on success, and <*ret_match> contains the average
+ *            fractional identity.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEINVAL> if any of the aligned sequence pairs aren't 
+ *            of the same length.
+ *            In either case, <*ret_match> is set to 0.
+ */
+int
+esl_dst_XAverageMatch(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, int max_comparisons, double *ret_match)
+{
+  int    status;
+  double match;
+  double sum = 0.;
+  int    i,j,n;
+  
+  if (N <= 1) { *ret_match = 1.; return eslOK; }
+  *ret_match = 0.;
+
+  /* Is N small enough that we can average over all pairwise comparisons? 
+     watch out for numerical overflow in this: Pfam N's easily overflow when squared
+   */
+  if (N <= max_comparisons &&
+      N <= sqrt(2. * max_comparisons) &&
+      (N * (N-1) / 2) <= max_comparisons)
+    {
+      for (i = 0; i < N; i++)
+	for (j = i+1; j < N; j++)
+	  {
+	    if ((status = esl_dst_XPairMatch(abc, ax[i], ax[j], &match, NULL, NULL)) != eslOK) return status;
+	    sum += match;
+	  }
+      sum /= (double) (N * (N-1) / 2);
+    }
+
+  /* If nseq is large, calculate average over a stochastic sample. */
+  else				
+    {
+      ESL_RANDOMNESS *r = esl_randomness_Create(0);
+      for (n = 0; n < max_comparisons; n++)
+	{
+	  do { i = esl_rnd_Roll(r, N); j = esl_rnd_Roll(r, N); } while (j == i); /* make sure j != i */
+	  if ((status = esl_dst_XPairMatch(abc, ax[i], ax[j], &match, NULL, NULL)) != eslOK) return status;
+	  sum += match;
+	}
+      sum /= (double) max_comparisons;
+      esl_randomness_Destroy(r);
+    }
+
+  *ret_match = sum;
+  return eslOK;
+}
+
+#endif /* eslAUGMENT_RANDOM && eslAUGMENT_ALPHABET */
+
+
+
+
+
+/*****************************************************************
+ * 6. Private (static) functions
+ *****************************************************************/
+
+/* jukescantor()
+ * 
+ * The generalized Jukes/Cantor distance calculation.
+ * Given <n1> identities and <n2> differences, for a
+ * base alphabet size of <alphabet_size> (4 or 20);
+ * calculate J/C distance in substitutions/site and
+ * return it in <ret_distance>; calculate large-sample
+ * variance and return it in <ret_variance>.
+ *
+ * Returns <eslEDIVZERO> if there are no data (<n1+n2=0>).
+ */
+static int
+jukescantor(int n1, int n2, int alphabet_size, double *opt_distance, double *opt_variance)
+{
+  int    status;
+  double D, K, N;
+  double x;
+  double distance, variance;
+
+  ESL_DASSERT1( (n1 >= 0) );
+  ESL_DASSERT1( (n2 >= 0) );
+  ESL_DASSERT1( (alphabet_size >= 0) );
+
+  if (n1+n2 == 0) { status = eslEDIVZERO; goto ERROR; }
+
+  K = (double) alphabet_size;
+  D = (double) n2 / (double) (n1+n2);
+  N = (double) (n1+n2);
+
+  x = 1. - D * K/(K-1.);
+  if (x <= 0.) 
+    {
+      distance = HUGE_VAL;
+      variance = HUGE_VAL;
+    }
+  else
+    {
+      distance =   -log(x) * K/(K-1);
+      variance =  exp( 2.*K*distance/(K-1) ) * D * (1.-D) / N;
+    }
+  if (opt_distance != NULL)  *opt_distance = distance;
+  if (opt_variance != NULL)  *opt_variance = variance;
+  return eslOK;
+
+ ERROR:
+  if (opt_distance != NULL)  *opt_distance = HUGE_VAL;
+  if (opt_variance != NULL)  *opt_variance = HUGE_VAL;
+  return status;
+}
+/*--------------- end of private functions ----------------------*/
+
+
+/*****************************************************************
+ * 7. Unit tests.
+ *****************************************************************/ 
+#ifdef eslDISTANCE_TESTDRIVE
+
+/* Each unit test is given an alignment with certain known
+ * properties:
+ *    seqs 0,1 are identical
+ *    seqs 0,2 are completely different
+ *    seqs 3..N are random
+ * The alignment may contain gaps, so don't assume that the 
+ * # of compared residues == alignment length. The alignment
+ * contains only canonical residues, because one of our tests
+ * is that C and X functions give the same results.
+ */
+static int 
+utest_CPairId(char **as, int N)
+{
+  double pid;
+  int    nid;
+  int    nres;	
+  int    L;
+  int    i,j;
+
+  /* Self comparison gives identity = 1. */
+  L = strlen(as[0]);
+  if (esl_dst_CPairId(as[0], as[0], &pid, &nid, &nres) != eslOK) abort();
+  if (pid  != 1.0 || nid != L || nres > L) abort();
+
+  /* So does 0,1 comparison  */
+  if (esl_dst_CPairId(as[0], as[1], &pid, &nid, &nres) != eslOK) abort();
+  if (pid  != 1.0 || nid != L || nres > L) abort();
+
+  /* 0,2 comparison gives 0.0, 0 */
+  if (esl_dst_CPairId(as[0], as[2], &pid, &nid, &nres) != eslOK) abort();
+  if (pid  != 0.0 || nid != 0 || nres > L) abort();
+  
+  /* remaining comparisons shouldn't fail */
+  for (i = 3; i < N; i++)
+    for (j = i; j < N; j++)
+      {
+	if (esl_dst_CPairId(as[i], as[j], &pid, &nid, &nres) != eslOK) abort();
+	if (pid < 0. || pid > 1. || nid < 0 || nid > L || nres > L)    abort();
+      }
+
+  /* API should accept NULL for return values */
+  if (esl_dst_CPairId(as[0], as[0], NULL, NULL, NULL) != eslOK) abort();  
+  return eslOK;
+}
+
+static int 
+utest_CJukesCantor(int K, char **as, int N)
+{
+  double d, V;
+  int    i,j;
+
+  /* Self comparison gives distance = 0. */
+  if (esl_dst_CJukesCantor(K, as[0], as[0], &d, &V) != eslOK) abort();
+  if (d != 0.0) abort();
+
+  /* So does 0,1 comparison  */
+  if (esl_dst_CJukesCantor(K, as[0], as[1], &d, &V) != eslOK) abort();
+  if (d != 0.0) abort();
+
+  /* 0,2 comparison gives infinite distance (HUGE_VAL) */
+  if (esl_dst_CJukesCantor(K, as[0], as[2], &d, &V) != eslOK) abort();
+  if (d != HUGE_VAL) abort();
+  
+  /* remaining comparisons shouldn't fail */
+  for (i = 3; i < N; i++)
+    for (j = i; j < N; j++)
+      if (esl_dst_CJukesCantor(K, as[i], as[j], &d, &V) != eslOK) abort();
+
+  /* API should accept NULL for return values */
+  if (esl_dst_CJukesCantor(K, as[0], as[0], NULL, NULL) != eslOK) abort();  
+  return eslOK;
+}
+
+#ifdef eslAUGMENT_ALPHABET
+static int 
+utest_XPairId(ESL_ALPHABET *abc, char **as, ESL_DSQ **ax, int N)
+{
+  double pid, pid2;
+  int    nid, nid2;
+  int    nres, nres2;	
+  int    dL, L;
+  int    i,j;
+
+  /* Self comparison gives identity = 1. */
+  dL = esl_abc_dsqlen(ax[0]);
+  L  = strlen(as[0]); 
+  if (dL != L) abort();
+  if (esl_dst_XPairId(abc, ax[0], ax[0], &pid, &nid, &nres) != eslOK) abort();
+  if (pid  != 1.0 || nid != L || nres > dL) abort();
+
+  /* So does 0,1 comparison  */
+  if (esl_dst_XPairId(abc, ax[0], ax[1], &pid, &nid, &nres) != eslOK) abort();
+  if (pid  != 1.0 || nid != L || nres > L) abort();
+
+  /* 0,2 comparison gives 0.0, 0 */
+  if (esl_dst_XPairId(abc, ax[0], ax[2], &pid, &nid, &nres) != eslOK) abort();
+  if (pid  != 0.0 || nid != 0 || nres > L) abort();
+  
+  /* remaining comparisons shouldn't fail, and should be identical to text mode */
+  for (i = 3; i < N; i++)
+    for (j = i; j < N; j++)
+      {
+	if (esl_dst_XPairId(abc, ax[i], ax[j], &pid, &nid, &nres) != eslOK) abort();
+	if (esl_dst_CPairId(as[i], as[j], &pid2, &nid2, &nres2)   != eslOK) abort();
+	if (pid < 0. || pid > 1. || nid < 0 || nid > L || nres > L)         abort();
+	if (pid != pid2 || nid != nid2 || nres != nres2)                    abort();
+      }
+
+  /* API should accept NULL for return values */
+  if (esl_dst_XPairId(abc, ax[0], ax[0], NULL, NULL, NULL) != eslOK) abort();  
+  return eslOK;
+
+}
+
+static int 
+utest_XJukesCantor(ESL_ALPHABET *abc, char **as, ESL_DSQ **ax, int N)
+{
+  double d, V;
+  int    i,j;
+
+  /* Self comparison gives distance = 0. */
+  if (esl_dst_XJukesCantor(abc, ax[0], ax[0], &d, &V) != eslOK) abort();
+  if (d != 0.0) abort();
+
+  /* So does 0,1 comparison  */
+  if (esl_dst_XJukesCantor(abc, ax[0], ax[1], &d, &V) != eslOK) abort();
+  if (d != 0.0) abort();
+
+  /* 0,2 comparison gives infinite distance (HUGE_VAL) */
+  if (esl_dst_XJukesCantor(abc, ax[0], ax[2], &d, &V) != eslOK) abort();
+  if (d != HUGE_VAL) abort();
+  
+  /* remaining comparisons shouldn't fail */
+  for (i = 3; i < N; i++)
+    for (j = i; j < N; j++)
+      if (esl_dst_XJukesCantor(abc, ax[i], ax[j], &d, &V) != eslOK) abort();
+
+  /* API should accept NULL for return values */
+  if (esl_dst_XJukesCantor(abc, ax[0], ax[0], NULL, NULL) != eslOK) abort();  
+  return eslOK;
+
+}
+#endif /*eslAUGMENT_ALPHABET*/
+
+
+#ifdef eslAUGMENT_DMATRIX
+static int 
+utest_CPairIdMx(char **as, int N)
+{
+  ESL_DMATRIX *S;
+  int          i,j;
+  double       pid;
+
+  if (esl_dst_CPairIdMx(as, N, &S) != eslOK) abort();
+
+  for (i = 0; i < N; i++) 
+    if (S->mx[i][i] != 1.0) abort();
+
+  pid = 0.;
+  for (i = 3; i < N; i++)
+    for (j = i+1; j < N; j++)
+      pid += S->mx[i][j];
+  pid /= (double) ((N-3) * (N-4) / 2); /* first 3 don't count */
+  if (pid < 0.15 || pid > 0.35) abort(); /* should be 0.25 */
+
+  esl_dmatrix_Destroy(S);
+  return eslOK;
+}
+
+static int 
+utest_CDiffMx(char **as, int N)
+{
+  ESL_DMATRIX *D;
+  int          i,j;
+  double       diff;
+
+  if (esl_dst_CDiffMx(as, N, &D) != eslOK) abort();
+
+  for (i = 0; i < N; i++) 
+    if (D->mx[i][i] != 0.0) abort();
+
+  diff = 0.;
+  for (i = 3; i < N; i++)
+    for (j = i+1; j < N; j++)
+      diff += D->mx[i][j];
+  diff /= (double) ((N-3) * (N-4) / 2);	/* first 3 don't count */
+  if (diff < 0.65 || diff > 0.85) abort(); /* should be 0.75 */
+
+  esl_dmatrix_Destroy(D);
+  return eslOK;
+}
+
+static int 
+utest_CJukesCantorMx(int K, char **as, int N)
+{
+  ESL_DMATRIX *D, *V;
+  /* just a crash test */
+  if (esl_dst_CJukesCantorMx(K, as, N, &D, &V) != eslOK) abort();
+  esl_dmatrix_Destroy(D);
+  esl_dmatrix_Destroy(V);
+  return eslOK;
+}
+#endif /*eslAUGMENT_DMATRIX*/
+
+#if defined (eslAUGMENT_ALPHABET) && defined (eslAUGMENT_DMATRIX)
+ 
+static int 
+utest_XPairIdMx(ESL_ALPHABET *abc, char **as, ESL_DSQ **ax, int N)
+{
+  ESL_DMATRIX *S, *S2;
+  int i, j;
+
+  if (esl_dst_XPairIdMx(abc, ax, N, &S) != eslOK) abort();
+  if (esl_dst_CPairIdMx(as, N, &S2)     != eslOK) abort();
+
+  for (i = 0; i < N; i++) 
+    for (j = i; j < N; j++)
+      if (fabs(S->mx[i][j] - S2->mx[j][i]) > 0.01) abort();
+
+  esl_dmatrix_Destroy(S);
+  esl_dmatrix_Destroy(S2);
+  return eslOK;
+}
+
+static int 
+utest_XDiffMx(ESL_ALPHABET *abc, char **as, ESL_DSQ **ax, int N)
+{
+  ESL_DMATRIX *D, *D2;
+  int i, j;
+
+  if (esl_dst_XDiffMx(abc, ax, N, &D) != eslOK) abort();
+  if (esl_dst_CDiffMx(as, N, &D2)     != eslOK) abort();
+
+  for (i = 0; i < N; i++) 
+    for (j = i; j < N; j++)
+      if (fabs(D->mx[i][j] - D2->mx[j][i]) > 0.01) abort();
+
+  esl_dmatrix_Destroy(D);
+  esl_dmatrix_Destroy(D2);
+  return eslOK;
+}
+
+static int 
+utest_XJukesCantorMx(ESL_ALPHABET *abc, char **as, ESL_DSQ **ax, int N)
+{
+  ESL_DMATRIX *D, *D2, *V, *V2;
+  int i, j;
+
+  if (esl_dst_XJukesCantorMx(abc, ax, N, &D, &V)      != eslOK) abort();
+  if (esl_dst_CJukesCantorMx(abc->K, as, N, &D2, &V2) != eslOK) abort();
+
+  for (i = 0; i < N; i++) 
+    for (j = i; j < N; j++)
+      {
+	if (fabs(D->mx[i][j] - D2->mx[j][i]) > 0.01) abort();
+	if (fabs(V->mx[i][j] - V2->mx[j][i]) > 0.01) abort();
+      }
+
+  esl_dmatrix_Destroy(D);
+  esl_dmatrix_Destroy(D2);
+  esl_dmatrix_Destroy(V);
+  esl_dmatrix_Destroy(V2);
+  return eslOK;
+}
+#endif /*eslAUGMENT_ALPHABET && eslAUGMENT_DMATRIX*/
+
+/*------------------ end of unit tests --------------------------*/
+#endif /* eslDISTANCE_TESTDRIVE */
+
+
+
+/*****************************************************************
+ * 8. Test driver.
+ *****************************************************************/ 
+
+/* 
+   gcc -g -Wall -o testdriver -I. -DeslDISTANCE_TESTDRIVE esl_distance.c esl_getopts.c esl_random.c easel.c -lm
+
+   gcc -g -Wall -o testdriver -I. -DeslDISTANCE_TESTDRIVE\
+     -DeslAUGMENT_ALPHABET \
+     esl_distance.c esl_getopts.c esl_random.c \
+     esl_alphabet.c easel.c -lm
+
+   gcc -g -Wall -o testdriver -I. -DeslDISTANCE_TESTDRIVE\
+     -DeslAUGMENT_DMATRIX \
+     esl_distance.c esl_getopts.c esl_random.c \
+     esl_dmatrix.c easel.c -lm
+
+   gcc -g -Wall -o testdriver -I. -DeslDISTANCE_TESTDRIVE\
+     -DeslALPHABET -DeslAUGMENT_DMATRIX \
+     esl_distance.c esl_getopts.c esl_random.c \
+     esl_alphabet.c esl_dmatrix.c easel.c -lm
+
+   gcc -g -Wall -o testdriver -I. -L. -DeslDISTANCE_TESTDRIVE esl_distance.c -leasel -lm
+ */
+#ifdef eslDISTANCE_TESTDRIVE
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_randomseq.h"
+#include "esl_distance.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#ifdef eslAUGMENT_DMATRIX
+#include "esl_dmatrix.h"
+#endif
+
+static ESL_OPTIONS options[] = {
+  /* name        type       def   env  range toggles reqs incomp help                       docgroup*/
+  { "-h",     eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",            0},
+  { "-N",     eslARG_INT,    "10", NULL,"n>3", NULL, NULL, NULL, "number of iid seqs in alignment",0},
+  { "-L",     eslARG_INT,    "50", NULL,"n>0", NULL, NULL, NULL, "length of seqs in alignment",    0},
+  { "--seed", eslARG_INT,    "42", NULL,"n>=0",NULL, NULL, NULL, "random # seed",                  0},
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[] = "Usage: ./testdrive-distance [-options]";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS   *go = NULL;
+  ESL_RANDOMNESS *r = NULL;
+  char  **as = NULL;		/* aligned character seqs (random, iid) */
+  int     N,L;			/* # of seqs, and their aligned lengths */
+  int seed;
+  int i,j;
+  int status;
+  double p[4];			/* ACGT probabilities */
+#ifdef eslAUGMENT_ALPHABET
+  ESL_DSQ      **ax = NULL;		/* digitized alignment                  */
+  ESL_ALPHABET *abc = NULL;
+#endif
+
+  /* Process command line
+   */
+  go = esl_getopts_Create(options);
+  esl_opt_ProcessCmdline(go, argc, argv);
+  esl_opt_VerifyConfig(go);
+  if (esl_opt_GetBoolean(go, "-h") == TRUE) {
+    puts(usage); 
+    puts("\n  where options are:");
+    esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2=indentation; 80=width */
+    return 0;
+  }
+  L    = esl_opt_GetInteger(go, "-L");
+  N    = esl_opt_GetInteger(go, "-N");
+  seed = esl_opt_GetInteger(go, "--seed");
+  if (esl_opt_ArgNumber(go) != 0) {
+    puts("Incorrect number of command line arguments.");
+    puts(usage);
+    return 1;
+  }
+  esl_getopts_Destroy(go);
+
+  /* Create a random DNA alignment;
+   * force it to obey the conventions of the unit tests:
+   *   0,1 are identical
+   *   0,2 are completely dissimilar
+   */
+  r   = esl_randomness_Create(seed);
+  for (i = 0; i < 4; i++) p[i] = 0.25;
+  ESL_ALLOC(as, sizeof(char *) * N);
+  for (i = 0; i < N; i++) 
+    ESL_ALLOC(as[i], sizeof(char) * (L+1));
+  esl_rsq_IID(r, "ACGT", p, 4, L, as[0]);
+  strcpy(as[1], as[0]);
+  esl_rsq_IID(r, "ACGT", p, 4, L, as[2]);
+  for (j = 0; j < L; j++)
+    while (as[2][j] == as[0][j])
+      as[2][j] = "ACGT"[esl_rnd_Roll(r, 4)];
+  for (i = 3; i < N; i++)
+    esl_rsq_IID(r, "ACGT", p, 4, L, as[i]);
+
+#ifdef eslAUGMENT_ALPHABET
+  abc = esl_alphabet_Create(eslDNA);
+  ESL_ALLOC(ax, sizeof(ESL_DSQ *) * N);
+  for (i = 0; i < N; i++) 
+    esl_abc_CreateDsq(abc, as[i], &(ax[i]));
+#endif /*eslAUGMENT_ALPHABET*/
+
+
+  /* Unit tests
+   */
+  if (utest_CPairId(as, N)               != eslOK) return eslFAIL;
+  if (utest_CJukesCantor(4, as, N)       != eslOK) return eslFAIL;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (utest_XPairId(abc, as, ax, N)      != eslOK) return eslFAIL;
+  if (utest_XJukesCantor(abc, as, ax, N) != eslOK) return eslFAIL;
+#endif /*eslAUGMENT_ALPHABET*/
+
+#ifdef eslAUGMENT_DMATRIX
+  if (utest_CPairIdMx(as, N)             != eslOK) return eslFAIL;
+  if (utest_CDiffMx(as, N)               != eslOK) return eslFAIL;
+  if (utest_CJukesCantorMx(4, as, N)     != eslOK) return eslFAIL;
+#endif /* eslAUGMENT_DMATRIX*/
+
+#if defined (eslAUGMENT_ALPHABET) && defined (eslAUGMENT_DMATRIX)
+  if (utest_XPairIdMx(abc, as, ax, N)       != eslOK) return eslFAIL;
+  if (utest_XDiffMx(abc, as, ax, N)         != eslOK) return eslFAIL;
+  if (utest_XJukesCantorMx(abc, as, ax, N)  != eslOK) return eslFAIL;
+#endif
+
+  esl_randomness_Destroy(r);
+  esl_Free2D((void **) as, N);
+#ifdef eslAUGMENT_ALPHABET
+  esl_alphabet_Destroy(abc);
+  esl_Free2D((void **) ax, N);
+#endif
+  return eslOK;
+
+ ERROR:
+  return eslFAIL;
+}
+#endif /*eslDISTANCE_TESTDRIVE*/
+
+
+
+
+/*****************************************************************
+ * 9. Example.
+ *****************************************************************/ 
+
+#ifdef eslDISTANCE_EXAMPLE
+/*::cexcerpt::distance_example::begin::*/
+/* gcc -g -Wall -o example -I. -DeslDISTANCE_EXAMPLE esl_distance.c\
+       esl_dmatrix.c esl_msa.c easel.c -lm
+   ./example <msa file>
+ */
+#include "easel.h"
+#include "esl_distance.h"
+#include "esl_dmatrix.h"
+#include "esl_msa.h"
+
+int main(int argc, char **argv)
+{
+  ESL_MSAFILE  *afp; 
+  ESL_MSA      *msa;
+  ESL_DMATRIX  *P;
+  int           i,j;
+  double        min, avg, max;
+  int           status;
+
+  if ((status = esl_msafile_Open(NULL, argv[1], NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+  if ((status = esl_msafile_Read(afp, &msa)) != eslOK)
+    esl_msafile_ReadFailure(afp, status);
+
+  esl_dst_CPairIdMx(msa->aseq, msa->nseq, &P);
+
+  min = 1.0;
+  max = 0.0;
+  avg = 0.0;
+  for (i = 0; i < msa->nseq; i++)
+    for (j = i+1; j < msa->nseq; j++)
+      {
+	avg += P->mx[i][j];
+	if (P->mx[i][j] < min) min = P->mx[i][j];
+	if (P->mx[i][j] > max) max = P->mx[i][j];
+      }
+  avg /= (double) (msa->nseq * (msa->nseq-1) / 2);
+
+  printf("Average pairwise %% id:  %.1f%%\n", avg * 100.);
+  printf("Minimum pairwise %% id:  %.1f%%\n", min * 100.);
+  printf("Maximum pairwise %% id:  %.1f%%\n", max * 100.);
+
+  esl_dmatrix_Destroy(P);
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  return 0;
+}
+/*::cexcerpt::distance_example::end::*/
+#endif /*eslDISTANCE_EXAMPLE*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
+
diff --git a/esl_distance.h b/esl_distance.h
new file mode 100644
index 0000000..8f3759b
--- /dev/null
+++ b/esl_distance.h
@@ -0,0 +1,77 @@
+/* Distances between aligned sequences, including both
+ * probabilistic evolutionary models and ad hoc measures.
+ * 
+ * SRE, Fri Apr 28 06:41:13 2006 [New York]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslDISTANCE_INCLUDED
+#define eslDISTANCE_INCLUDED
+
+#include "easel.h"		/* ESL_DSQ declaration      */
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"	/* ESL_ALPHABET declaration */
+#endif
+#ifdef eslAUGMENT_DMATRIX
+#include "esl_dmatrix.h"	/* ESL_DMATRIX declaration  */
+#endif
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"  
+#endif
+
+/* 1. Pairwise distances for aligned text sequences.
+ */
+extern int esl_dst_CPairId(const char *asq1, const char *asq2, 
+			   double *opt_pid, int *opt_nid, int *opt_n);
+extern int esl_dst_CPairmatch(const char *asq1, const char *asq2, 
+			      double *opt_pmatch, int *opt_nmatch, int *opt_n);
+extern int esl_dst_CJukesCantor(int K, const char *as1, const char *as2, 
+				double *opt_distance, double *opt_variance);
+
+/* 2. Pairwise distances for aligned digital seqs.  
+ */
+#ifdef eslAUGMENT_ALPHABET
+extern int esl_dst_XPairId(const ESL_ALPHABET *abc, const ESL_DSQ *ax1, const ESL_DSQ *ax2, 
+			   double *opt_pid, int *opt_nid, int *opt_n);
+extern int esl_dst_XPairMatch(const ESL_ALPHABET *abc, const ESL_DSQ *ax1, const ESL_DSQ *ax2, 
+			      double *opt_distance, int *opt_nmatch, int *opt_n);
+extern int esl_dst_XJukesCantor(const ESL_ALPHABET *abc, const ESL_DSQ *ax, const ESL_DSQ *ay, 
+				double *opt_distance, double *opt_variance);
+#endif
+
+
+/* 3. Distance matrices for aligned text sequences. 
+ */
+#ifdef eslAUGMENT_DMATRIX
+extern int esl_dst_CPairIdMx     (char **as, int N, ESL_DMATRIX **ret_S);
+extern int esl_dst_CDiffMx       (char **as, int N, ESL_DMATRIX **ret_D);
+extern int esl_dst_CJukesCantorMx(int K, char **as, int N, ESL_DMATRIX **opt_D, ESL_DMATRIX **opt_V);
+#endif
+
+/* 4. Distance matrices for aligned digital sequences. 
+ */
+#if defined(eslAUGMENT_DMATRIX) && defined(eslAUGMENT_ALPHABET)
+extern int esl_dst_XPairIdMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_S);
+extern int esl_dst_XDiffMx  (const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_D);
+
+extern int esl_dst_XJukesCantorMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int nseq, 
+				  ESL_DMATRIX **opt_D, ESL_DMATRIX **opt_V);
+#endif
+
+/*  5. Average pairwise identity for multiple alignments.
+ */
+#ifdef eslAUGMENT_RANDOM
+extern int esl_dst_CAverageId   (char **as, int nseq, int max_comparisons, double *ret_id);
+extern int esl_dst_CAverageMatch(char **as, int N, int max_comparisons, double *ret_match);
+#endif
+#if defined(eslAUGMENT_RANDOM) && defined(eslAUGMENT_ALPHABET)
+extern int esl_dst_XAverageId   (const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, int max_comparisons, double *ret_id);
+extern int esl_dst_XAverageMatch(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, int max_comparisons, double *ret_match);
+
+#endif
+
+
+#endif /*eslDISTANCE_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_distance.tex b/esl_distance.tex
new file mode 100644
index 0000000..199f4b3
--- /dev/null
+++ b/esl_distance.tex
@@ -0,0 +1,149 @@
+
+The \eslmod{distance} module implements routines for inferring
+mutational distances between pairs of aligned sequences.
+
+Augmentation with the \eslmod{alphabet} module provides distance
+routines for digitized sequences, in addition to text sequences.
+
+Augmentation with the \eslmod{dmatrix} module provides routines for
+constructing distance matrices from multiple sequence alignments.
+
+The API for the \eslmod{distance} module is summarized in
+Table~\ref{tbl:distance_api}.
+
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+   \apisubhead{Pairwise distances for aligned text sequences}\\
+\hyperlink{func:esl_dst_CPairId()}{\ccode{esl\_dst\_CPairId()}} & Pairwise identity of two aligned text strings.\\
+\hyperlink{func:esl_dst_CJukesCantor()}{\ccode{esl\_dst\_CJukesCantor()}} & Jukes-Cantor distance for two aligned strings.\\
+   \apisubhead{Pairwise distances for aligned digital seqs [\eslmod{alphabet}]}\\
+\hyperlink{func:esl_dst_XPairId()}{\ccode{esl\_dst\_XPairId()}} & Pairwise identity of two aligned digital seqs.\\
+\hyperlink{func:esl_dst_XJukesCantor()}{\ccode{esl\_dst\_XJukesCantor()}} & Jukes-Cantor distance for two aligned digitized seqs.\\
+   \apisubhead{Distance matrices for aligned text sequences [\eslmod{dmatrix}]}\\
+\hyperlink{func:esl_dst_CPairIdMx()}{\ccode{esl\_dst\_CPairIdMx()}} & NxN identity matrix for N aligned text sequences. \\
+\hyperlink{func:esl_dst_CDiffMx()}{\ccode{esl\_dst\_CDiffMx()}} & NxN difference matrix for N aligned text sequences.\\
+\hyperlink{func:esl_dst_CJukesCantorMx()}{\ccode{esl\_dst\_CJukesCantorMx()}} & NxN Jukes/Cantor distance matrix for N aligned text seqs.\\
+   \apisubhead{Distance matrices for aligned digital sequences [\eslmod{dmatrix}$,$\eslmod{alphabet}]}\\
+\hyperlink{func:esl_dst_XPairIdMx()}{\ccode{esl\_dst\_XPairIdMx()}} & NxN identity matrix for N aligned digital seqs.\\
+\hyperlink{func:esl_dst_XDiffMx()}{\ccode{esl\_dst\_XDiffMx()}} & NxN difference matrix for N aligned digital seqs.\\
+\hyperlink{func:esl_dst_XJukesCantorMx()}{\ccode{esl\_dst\_XJukesCantorMx()}} & NxN Jukes/Cantor distance matrix for N aligned digital seqs.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{distance} API. Requires: \eslmod{easel}. Optional augmentation: \eslmod{alphabet}, \eslmod{dmatrix}.}
+\label{tbl:distance_api}
+\end{table}
+
+
+\subsection{Example of using the distance API}
+
+The example code below opens a multiple sequence alignment file and
+reads an alignment from it, then uses one of the routines from the
+\eslmod{distance} module to calculate a fractional identity matrix
+from it. The example then finds the average, minimum, and maximum of
+the values in the identity matrix.
+
+\input{cexcerpts/distance_example}
+
+\subsection{Definition of pairwise identity and pairwise difference}
+
+Given a pairwise sequence alignment of length $L$, between two
+sequences of $n_1$ and $n_2$ residues ($n_1 \leq L$, $n_2 \leq L$),
+where the $L$ aligned symbol pairs are classified and counted as
+$c_{\mbox{ident}}$ identities, $c_{\mbox{mismat}}$ mismatches, and
+$c_{\mbox{indel}}$ pairs that have a gap symbol in either or both
+sequences ($c_{\mbox{ident}} + c_{\mbox{mismat}} + c_{\mbox{indel}} =
+L$), \esldef{pairwise sequence identity} is defined as:
+
+\[
+   \mbox{pid} = \frac{c_{\mbox{ident}}}{\mbox{MIN}(n_1, n_2)},
+\]
+
+and \esldef{pairwise sequence difference} is defined as
+\[
+   \mbox{diff} = 1 - \mbox{pid} = \frac{\mbox{MIN}(n_1,n_2) - c_{\mbox{ident}}}{\mbox{MIN}(n_1, n_2)}.
+\]
+
+Both pid and diff range from 0 to 1. 
+
+In the unusual case where $\mbox{MIN}(n_1,n_2)=0$ -- that is, one of
+the aligned sequences consists entirely of gaps -- the percent
+identity $0/0$ is defined as 0. The calculation is robust against
+length 0 sequences, which do arise in real applications. (Not just in
+bad input, either. For example, this arises when dealing with subsets
+of the columns of a multiple alignment.)
+
+There are many ways that pairwise identity might be calculated,
+because there are a variety of choices for the denominator. In Easel,
+identity calculations are used primarily in \emph{ad hoc} sequence
+weight calculations for multiple sequence alignments, as part of
+profile HMM or profile SCFG construction. Multiple alignments will
+often contain short sequence fragments. We want to deal robustly with
+cases where two short fragments may have little overlap, or none at
+all. The most obvious calculation of pairwise identity,
+$c_{\mbox{ident}} / c_{\mbox{ident}} + c_{\mbox{mismat}}$, is not
+robust, because alignments with few aligned residues (either because
+they are highly gappy, or they are partially overlapping fragments)
+may receive artifactually high identities. Other definitions,
+$c_{\mbox{ident}} / L$ or $c_{\mbox{ident}} / \mbox{MEAN}(n_1, n_2)$
+or $c_{\mbox{ident}} / \mbox{MAX}(n_1, n_2)$ are also not robust,
+sharing the disadvantage that good alignments of fragments to longer
+sequences would be scored as artifactually low identities.
+
+
+\subsection{Generalized Jukes-Cantor distances}
+
+The Jukes-Cantor model of DNA sequence evolution assumes that all
+substitutions occur at the same rate $\alpha$
+\citep{JukesCantor69}. It is a reversible, multiplicative evolutionary
+model. It implies equiprobable stationary probabilities. The
+\esldef{Jukes/Cantor distance} is the maximum likelihood estimate of
+the number of substitutions per site that have occurred between the
+two sequences, correcting for multiple substitutions that may have
+occurred the same site. Given an ungapped pairwise alignment of length
+$L$ consisting of $c_{\mbox{ident}}$ identities and
+$c_{\mbox{mismat}}$ mismatches (observed substitutions)
+($c_{\mbox{ident}} + c_{\mbox{mismat}} = L$, the fractional observed
+difference $D$ is defined as
+
+\[
+  D = \frac{c_{\mbox{mismat}}}{c_{\mbox{ident}} + c_{\mbox{mismat}}},
+\]
+
+and the Jukes-Cantor distance $d$ is defined in terms of $D$ as:
+
+\[
+  d = -\frac{3}{4} \log \left( 1 - \frac{4}{3} D \right)
+\]
+
+The Jukes/Cantor model does not allow insertions or deletions.  When
+calculating ``Jukes/Cantor distances'' for gapped alignments, gap
+symbols are simply ignored, and the same calculations above are
+applied.
+
+The Jukes-Cantor model readily generalizes from the four-letter DNA
+alphabet to any alphabet size $K$, using the same definition of
+observed fractional difference $D$. A \esldef{generalized Jukes-Cantor
+distance} is:
+
+\[
+  d = -\frac{K-1}{K} \log \left( 1 - \frac{K}{K-1} D \right).
+\]
+
+The large-sample variance of this estimate $d$ is:
+
+\[
+   \sigma^2 = e^\frac{2Kd}{K-1} \frac{D(1-D)}{L'}
+\]
+
+where $L'$ is the total number of columns counted, exclusive of gaps,
+$L' = c_{\mbox{ident}} + c_{\mbox{mismat}}$.
+
+If the observed $D \geq \frac{K-1}{K}$, the maximum likelihood
+Jukes-Cantor distance is infinity, as is the variance. In this case,
+both $d$ and $V$ are returned as \ccode{HUGE\_VAL}. 
+
+
diff --git a/esl_dmatrix.c b/esl_dmatrix.c
new file mode 100644
index 0000000..7b15bd1
--- /dev/null
+++ b/esl_dmatrix.c
@@ -0,0 +1,1593 @@
+/* Linear algebra operations in double-precision matrices.
+ * 
+ * Implements ESL_DMATRIX (double-precision matrix) and 
+ * ESL_PERMUTATION (permutation matrix) objects.
+ * 
+ * Table of contents:
+ *   1. The ESL_DMATRIX object
+ *   2. Debugging/validation code for ESL_DMATRIX
+ *   3. Visualization tools
+ *   4. The ESL_PERMUTATION object
+ *   5. Debugging/validation code for ESL_PERMUTATION
+ *   6. The rest of the dmatrix API
+ *   7. Optional: Interoperability with GSL
+ *   8. Optional: Interfaces to LAPACK
+ *   9. Unit tests
+ *  10. Test driver
+ *  11. Examples
+ *  12. Copyright and license 
+ *
+ * To do:
+ *   - eventually probably want additional matrix types
+ *   - unit tests poor 
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_vectorops.h"
+#include "esl_dmatrix.h"
+
+
+/*****************************************************************
+ * 1. The ESL_DMATRIX object.
+ *****************************************************************/
+
+/* Function:  esl_dmatrix_Create()
+ *
+ * Purpose:   Creates a general <n> x <m> matrix (<n> rows, <m> 
+ *            columns).
+ *
+ * Args:      <n> - number of rows;    $>= 1$
+ *            <m> - number of columns; $>= 1$
+ * 
+ * Returns:   a pointer to a new <ESL_DMATRIX> object. Caller frees
+ *            with <esl_dmatrix_Destroy()>.
+ *
+ * Throws:    <NULL> if an allocation failed.
+ */
+ESL_DMATRIX *
+esl_dmatrix_Create(int n, int m)
+{
+  ESL_DMATRIX *A = NULL;
+  int r;
+  int status;
+
+  ESL_ALLOC(A, sizeof(ESL_DMATRIX));
+  A->mx = NULL;
+  A->n  = n;
+  A->m  = m;
+
+  ESL_ALLOC(A->mx, sizeof(double *) * n);
+  A->mx[0] = NULL;
+
+  ESL_ALLOC(A->mx[0], sizeof(double) * n * m);
+  for (r = 1; r < n; r++)
+    A->mx[r] = A->mx[0] + r*m;
+
+  A->type   = eslGENERAL;
+  A->ncells = n * m; 
+  return A;
+  
+ ERROR:
+  esl_dmatrix_Destroy(A);
+  return NULL;
+}
+
+
+/* Function:  esl_dmatrix_CreateUpper()
+ * Incept:    SRE, Wed Feb 28 08:45:45 2007 [Janelia]
+ *
+ * Purpose:   Creates a packed upper triangular matrix of <n> rows and
+ *            <n> columns. Caller may only access cells $i \leq j$.
+ *            Cells $i > j$ are not stored and are implicitly 0.
+ *            
+ *            Not all matrix operations in Easel can work on packed
+ *            upper triangular matrices.
+ *
+ * Returns:   a pointer to a new <ESL_DMATRIX> object of type
+ *            <eslUPPER>. Caller frees with <esl_dmatrix_Destroy()>.
+ *
+ * Throws:    <NULL> if allocation fails.
+ *
+ * Xref:      J1/10
+ */
+ESL_DMATRIX *
+esl_dmatrix_CreateUpper(int n)
+{
+  int status;
+  ESL_DMATRIX *A = NULL;
+  int r;			/* counter over rows */
+  int nc;			/* cell counter */
+
+  /* matrix structure allocation */
+  ESL_ALLOC(A, sizeof(ESL_DMATRIX)); 
+  A->mx = NULL;
+  A->n  = n;
+  A->m  = n;
+
+  /* n row ptrs */
+  ESL_ALLOC(A->mx, sizeof(double *) * n); 
+  A->mx[0] = NULL;
+
+  /* cell storage */
+  ESL_ALLOC(A->mx[0], sizeof(double) * n * (n+1) / 2);
+  
+  /* row pointers set in a tricksy overlapping way, so
+   * mx[i][j] access works normally but only i<=j are valid.
+   * xref J1/10.
+   */
+  nc = n;  /* nc is the number of valid cells assigned to rows so far */
+  for (r = 1; r < n; r++) {
+    A->mx[r] = A->mx[0] + nc - r; /* -r overlaps this row w/ previous row */
+    nc += n-r;
+  }
+  A->type   = eslUPPER;
+  A->ncells = n * (n+1) / 2; 
+  return A;
+
+ ERROR:
+  esl_dmatrix_Destroy(A);
+  return NULL;
+}
+
+
+/* Function:  esl_dmatrix_Destroy()
+ *            
+ * Purpose:   Frees an <ESL_DMATRIX> object <A>.
+ */
+int
+esl_dmatrix_Destroy(ESL_DMATRIX *A)
+{
+  if (A != NULL && A->mx != NULL && A->mx[0] != NULL) free(A->mx[0]);
+  if (A != NULL && A->mx != NULL)                     free(A->mx);
+  if (A != NULL)                                      free(A);
+  return eslOK;
+}
+
+
+/* Function:  esl_dmatrix_Copy()
+ *
+ * Purpose:   Copies <src> matrix into <dest> matrix. <dest> must
+ *            be allocated already by the caller.
+ * 
+ *            You may copy to a matrix of a different type, so long as
+ *            the copy makes sense. If <dest> matrix is a packed type
+ *            and <src> is not, the values that should be zeros must
+ *            be zero in <src>, else the routine throws
+ *            <eslEINCOMPAT>. If the <src> matrix is a packed type and
+ *            <dest> is not, the values that are implicitly zeros are
+ *            set to zeros in the <dest> matrix.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINCOMPAT> if <src>, <dest> are different sizes,
+ *            or if their types differ and <dest> cannot represent
+ *            <src>.
+ */
+int
+esl_dmatrix_Copy(const ESL_DMATRIX *src, ESL_DMATRIX *dest)
+{
+  int i,j;
+
+  if (dest->n != src->n || dest->m != src->m)
+    ESL_EXCEPTION(eslEINCOMPAT, "matrices of different size");
+
+  if (src->type == dest->type)   /* simple case. */
+    memcpy(dest->mx[0], src->mx[0], src->ncells * sizeof(double));
+
+  else if (src->type == eslGENERAL && dest->type == eslUPPER)		
+    {
+      for (i = 1; i < src->n; i++)
+	for (j = 0; j < i; j++)
+	  if (src->mx[i][j] != 0.) 
+	    ESL_EXCEPTION(eslEINCOMPAT, "general matrix isn't upper triangular, can't be copied/packed");
+      for (i = 0; i < src->n; i++)
+	for (j = i; j < src->m; j++)
+	  dest->mx[i][j] = src->mx[i][j];
+    }
+  
+  else if (src->type == eslUPPER && dest->type == eslGENERAL)		
+    {
+      for (i = 1; i < src->n; i++)
+	for (j = 0; j < i; j++)
+	  dest->mx[i][j] = 0.;
+      for (i = 0; i < src->n; i++)
+	for (j = i; j < src->m; j++)
+	  dest->mx[i][j] = src->mx[i][j];      
+    }
+
+  return eslOK;
+}
+
+
+/* Function:  esl_dmatrix_Clone()
+ * Incept:    SRE, Tue May  2 14:38:45 2006 [St. Louis]
+ *
+ * Purpose:   Duplicates matrix <A>, making a copy in newly
+ *            allocated space.
+ *
+ * Returns:   a pointer to the copy. Caller frees with 
+ *            <esl_dmatrix_Destroy()>.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_DMATRIX *
+esl_dmatrix_Clone(const ESL_DMATRIX *A)
+{
+  ESL_DMATRIX *new;
+
+  switch (A->type) {
+  case eslUPPER:             if ( (new = esl_dmatrix_CreateUpper(A->n))  == NULL) return NULL; break;
+  default: case eslGENERAL:  if ( (new = esl_dmatrix_Create(A->n, A->m)) == NULL) return NULL; break;
+  }
+  esl_dmatrix_Copy(A, new);
+  return new;
+}
+
+
+/* Function:  esl_dmatrix_Compare()
+ *
+ * Purpose:   Compares matrix <A> to matrix <B> element by element,
+ *            using <esl_DCompare()> on each cognate element pair,
+ *            with relative equality defined by a fractional tolerance
+ *            <tol>.  If all elements are equal, return <eslOK>; if
+ *            any elements differ, return <eslFAIL>.
+ *            
+ *            <A> and <B> may be of different types; for example,
+ *            a packed upper triangular matrix A is compared to
+ *            a general matrix B by assuming <A->mx[i][j] = 0.> for
+ *            all $i>j$.
+ */
+int
+esl_dmatrix_Compare(const ESL_DMATRIX *A, const ESL_DMATRIX *B, double tol)
+{
+  int i,j,c;
+  double x1,x2;
+
+  if (A->n != B->n) return eslFAIL;
+  if (A->m != B->m) return eslFAIL;
+
+  if (A->type == B->type) 
+    {  /* simple case. */
+      for (c = 0; c < A->ncells; c++) /* can deal w/ packed or unpacked storage */
+	if (esl_DCompare(A->mx[0][c], B->mx[0][c], tol) == eslFAIL) return eslFAIL;
+    }
+  else 
+    { /* comparing matrices of different types */
+      for (i = 0; i < A->n; i++)
+	for (j = 0; j < A->m; j++)
+	  {
+	    if (A->type == eslUPPER && i > j) x1 = 0.;
+	    else                              x1 = A->mx[i][j];
+
+	    if (B->type == eslUPPER && i > j) x2 = 0.;
+	    else                              x2 = B->mx[i][j];
+
+	    if (esl_DCompare(x1, x2, tol) == eslFAIL) return eslFAIL;
+	  }
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_dmatrix_CompareAbs()
+ *
+ * Purpose:   Compares matrix <A> to matrix <B> element by element,
+ *            using <esl_DCompareAbs()> on each cognate element pair,
+ *            with absolute equality defined by a absolute difference tolerance
+ *            <tol>.  If all elements are equal, return <eslOK>; if
+ *            any elements differ, return <eslFAIL>.
+ *            
+ *            <A> and <B> may be of different types; for example,
+ *            a packed upper triangular matrix A is compared to
+ *            a general matrix B by assuming <A->mx[i][j] = 0.> for
+ *            all $i>j$.
+ */
+int
+esl_dmatrix_CompareAbs(const ESL_DMATRIX *A, const ESL_DMATRIX *B, double tol)
+{
+  int i,j,c;
+  double x1,x2;
+
+  if (A->n != B->n) return eslFAIL;
+  if (A->m != B->m) return eslFAIL;
+
+  if (A->type == B->type) 
+    {  /* simple case. */
+      for (c = 0; c < A->ncells; c++) /* can deal w/ packed or unpacked storage */
+	if (esl_DCompareAbs(A->mx[0][c], B->mx[0][c], tol) == eslFAIL) return eslFAIL;
+    }
+  else 
+    { /* comparing matrices of different types */
+      for (i = 0; i < A->n; i++)
+	for (j = 0; j < A->m; j++)
+	  {
+	    if (A->type == eslUPPER && i > j) x1 = 0.;
+	    else                              x1 = A->mx[i][j];
+
+	    if (B->type == eslUPPER && i > j) x2 = 0.;
+	    else                              x2 = B->mx[i][j];
+
+	    if (esl_DCompareAbs(x1, x2, tol) == eslFAIL) return eslFAIL;
+	  }
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_dmatrix_Set()
+ *
+ * Purpose:   Set all elements $a_{ij}$ in matrix <A> to <x>,
+ *            and returns <eslOK>.
+ */
+int
+esl_dmatrix_Set(ESL_DMATRIX *A, double x)
+{
+  int i;
+  for (i = 0; i < A->ncells; i++) A->mx[0][i] = x;
+  return eslOK;
+}
+
+
+/* Function:  esl_dmatrix_SetZero()
+ *
+ * Purpose:   Sets all elements $a_{ij}$ in matrix <A> to 0,
+ *            and returns <eslOK>.
+ */
+int
+esl_dmatrix_SetZero(ESL_DMATRIX *A)
+{
+  int i;
+  for (i = 0; i < A->ncells; i++) A->mx[0][i] = 0.;
+  return eslOK;
+}
+  
+
+/* Function:  esl_dmatrix_SetIdentity()
+ *
+ * Purpose:   Given a square matrix <A>, sets all diagonal elements 
+ *            $a_{ii}$ to 1, and all off-diagonal elements $a_{ij},
+ *            j \ne i$ to 0. Returns <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if the matrix isn't square.
+ */
+int
+esl_dmatrix_SetIdentity(ESL_DMATRIX *A)
+{
+  int i;
+  
+  if (A->n != A->m) ESL_EXCEPTION(eslEINVAL, "matrix isn't square");
+  esl_dmatrix_SetZero(A);
+  for (i = 0; i < A->n; i++) A->mx[i][i] = 1.;
+  return eslOK;
+}
+  
+/*****************************************************************
+ * 2. Debugging, validation code
+ *****************************************************************/
+
+/* Function:  esl_dmatrix_Dump()
+ * Incept:    SRE, Mon Nov 29 19:21:20 2004 [St. Louis]
+ *
+ * Purpose:   Given a matrix <A>, dump it to output stream <ofp> in human-readable
+ *            format.
+ * 
+ *            If <rowlabel> or <collabel> are non-NULL, they specify a
+ *            string of single-character labels to put on the rows and
+ *            columns, respectively. (For example, these might be a
+ *            sequence alphabet for a 4x4 or 20x20 rate matrix or
+ *            substitution matrix.)  Numbers <1..ncols> or <1..nrows> are
+ *            used if <collabel> or <rowlabel> are passed as <NULL>.
+ *
+ * Args:      ofp      -  output file pointer; stdout, for example.
+ *            A        -  matrix to dump.
+ *            rowlabel -  optional: NULL, or character labels for rows
+ *            collabel -  optional: NULL, or character labels for cols
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_dmatrix_Dump(FILE *ofp, const ESL_DMATRIX *A, const char *rowlabel, const char *collabel)
+{
+  int a,b;
+
+  fprintf(ofp, "     ");
+  if (collabel != NULL) 
+    for (b = 0; b < A->m; b++) fprintf(ofp, "       %c ", collabel[b]);
+  else
+    for (b = 0; b < A->m; b++) fprintf(ofp, "%8d ", b+1);
+  fprintf(ofp, "\n");
+
+  for (a = 0; a < A->n; a++) {
+    if (rowlabel != NULL)      fprintf(ofp, "    %c ", rowlabel[a]);
+    else                       fprintf(ofp, "%5d ",    a+1);
+
+    for (b = 0; b < A->m; b++) {
+      switch (A->type) {
+      case eslUPPER:
+	if (a > b) 	fprintf(ofp, "%8s ", "");
+	else            fprintf(ofp, "%8.4f ", A->mx[a][b]); 
+	break;
+
+       default: case eslGENERAL:
+	fprintf(ofp, "%8.4f ", A->mx[a][b]); 
+	break;
+      }
+    }
+    fprintf(ofp, "\n");
+  }
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 3. Visualization tools
+ *****************************************************************/
+
+/* Function:  esl_dmatrix_PlotHeatMap()
+ * Synopsis:  Export a heat map visualization, in PostScript
+ *
+ * Purpose:   Export a heat map visualization of the matrix in <D>
+ *            to open stream <fp>, in PostScript format. 
+ *            
+ *            All values between <min> and <max> in <D> are rescaled
+ *            linearly and assigned to shades. Values below <min>
+ *            are assigned to the lowest shade; values above <max>, to
+ *            the highest shade.
+ *
+ *            The plot is hardcoded to be a full US 8x11.5" page,
+ *            with at least a 20pt margin.
+ *
+ *            Several color schemes are enumerated in the code
+ *            but all but one is commented out. The currently enabled
+ *            scheme is a 10-class scheme consisting of the 9-class
+ *            Reds from colorbrewer2.org plus a blue background class.
+ *          
+ * Note:      Binning rules basically follow same convention as
+ *            esl_histogram. nb = xmax-xmin/w, so w = xmax-xmin/nb; 
+ *            picking bin is (int) ceil((x - xmin)/w) - 1. (xref
+ *            esl_histogram_Score2Bin()). This makes bin b contain
+ *            values bw+min < x <= (b+1)w+min. (Which means that 
+ *            min itself falls in bin -1, whoops - but we catch
+ *            all bin<0 and bin>=nshades and put them in the extremes.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_dmatrix_PlotHeatMap(FILE *fp, ESL_DMATRIX *D, double min, double max)
+{
+#if 0
+  /*
+   * This color scheme roughly follows Tufte, Envisioning Information,
+   * p.91, where he shows a beautiful bathymetric chart. The CMYK
+   * values conjoin two recommendations from ColorBrewer (Cindy Brewer
+   * and Mark Harrower, colorbrewer2.org), specifically the 9-class
+   * sequential2 Blues and 9-class sequential YlOrBr.
+   */
+  int    nshades   = 18;
+  double cyan[]    = { 1.00, 1.00, 0.90, 0.75, 0.57, 0.38, 0.24, 0.13, 0.03,
+                       0.00, 0.00, 0.00, 0.00, 0.00, 0.07, 0.20, 0.40, 0.60};
+  double magenta[] = { 0.55, 0.45, 0.34, 0.22, 0.14, 0.08, 0.06, 0.03, 0.01,
+                       0.00, 0.03, 0.11, 0.23, 0.40, 0.55, 0.67, 0.75, 0.80};
+  double yellow[]  = { 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+                       0.10, 0.25, 0.40, 0.65, 0.80, 0.90, 1.00, 1.00, 1.00};
+  double black[]   = { 0.30, 0.07, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+                       0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00};
+#endif
+#if 0
+  /* colorbrewer2.org 5-class YlOrBr scheme: sequential, multihue, 5-class, CMYK */
+  int    nshades   = 5;
+  double cyan[]    = { 0.00, 0.00, 0.00, 0.15, 0.40 };
+  double magenta[] = { 0.00, 0.15, 0.40, 0.60, 0.75 };
+  double yellow[]  = { 0.17, 0.40, 0.80, 0.95, 1.00 };
+  double black[]   = { 0,    0,    0,    0,    0    };
+#endif
+#if 0
+  /* colorbrewer2.org 9-class YlOrBr scheme, +zero class */
+  int    nshades   = 10;
+  double cyan[]    = { 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.07, 0.20, 0.40, 0.60 };
+  double magenta[] = { 0.00, 0.00, 0.03, 0.11, 0.23, 0.40, 0.55, 0.67, 0.75, 0.80 };
+  double yellow[]  = { 0.00, 0.10, 0.25, 0.40, 0.65, 0.80, 0.90, 1.00, 1.00, 1.00 };
+  double black[]   = { 0.05, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 };
+#endif
+  /* colorbrewer2.org 9-class Reds + zero class as dim blue */
+  int    nshades   = 10;
+  double cyan[]    = { 0.30, 0.00, 0.00, 0.00, 0.00, 0.00, 0.05, 0.20, 0.35, 0.60 };
+  double magenta[] = { 0.03, 0.04, 0.12, 0.27, 0.43, 0.59, 0.77, 0.90, 0.95, 1.00 };
+  double yellow[]  = { 0.00, 0.04, 0.12, 0.27, 0.43, 0.59, 0.72, 0.80, 0.85, 0.90 };
+  double black[]   = { 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 };
+
+  int    pageheight = 792;
+  int    pagewidth  = 612;
+  double w;                     
+  int    i,j;
+  int    bin;
+  float  boxsize;               /* box size in points */
+  float  xcoord, ycoord;        /* postscript coords in points */
+  float  leftmargin;
+  float  bottommargin;
+
+  /* Set some defaults that might become arguments later.
+   */
+  leftmargin  = 20.;
+  bottommargin = 20.;
+
+  /* Determine some working parameters 
+   */
+  w = (max-min) / (double) nshades; /* w = bin size for assigning values->colors*/
+  boxsize = ESL_MIN( (pageheight - (bottommargin * 2.)) / (float) D->n, 
+                     (pagewidth - (leftmargin * 2.))   / (float) D->m);
+  
+  /* or start from j=i, to do diagonals */
+  for (i = 0; i < D->n; i++)
+    for (j = 0; j < D->m; j++)
+      {
+        xcoord = (float) j * boxsize + leftmargin;
+        ycoord = (float) (D->n-i+1) * boxsize + bottommargin;
+
+        if      (D->mx[i][j] == -eslINFINITY) bin = 0;
+        else if (D->mx[i][j] ==  eslINFINITY) bin = nshades-1;
+        else {
+          bin    = (int) ceil((D->mx[i][j] - min) / w) - 1;
+          if (bin < 0)        bin = 0;
+          if (bin >= nshades) bin = nshades-1;
+        }
+
+        fprintf(fp, "newpath\n");
+        fprintf(fp, "  %.2f %.2f moveto\n", xcoord, ycoord);
+        fprintf(fp, "  0  %.2f rlineto\n", boxsize);
+        fprintf(fp, "  %.2f 0  rlineto\n", boxsize);
+        fprintf(fp, "  0 -%.2f rlineto\n", boxsize);
+        fprintf(fp, "  closepath\n");
+        fprintf(fp, " %.2f %.2f %.2f %.2f setcmykcolor\n",
+                cyan[bin], magenta[bin], yellow[bin], black[bin]);
+        fprintf(fp, "  fill\n");
+      }
+  fprintf(fp, "showpage\n");
+  return eslOK;
+}
+
+
+
+/*****************************************************************
+ * 4. The ESL_PERMUTATION object.
+ *****************************************************************/
+
+/* Function:  esl_permutation_Create()
+ *
+ * Purpose:   Creates a new permutation "matrix" of size <n> for
+ *            permuting <n> x <n> square matrices; returns a 
+ *            pointer to it.
+ *
+ *            A permutation matrix consists of 1's and 0's such that
+ *            any given row or column contains only one 1. We store it
+ *            more efficiently as a vector; each value $p_i$
+ *            represents the column $j$ that has the 1. Thus, on
+ *            initialization, $p_i = i$ for all $i = 0..n-1$.
+ *
+ * Returns:   a pointer to a new <ESL_PERMUTATION> object. Free with 
+ *            <esl_permutation_Destroy()>.
+ *
+ * Throws:    <NULL> if allocation fails.
+ */
+ESL_PERMUTATION *
+esl_permutation_Create(int n)
+{
+  int status;
+  ESL_PERMUTATION *P = NULL;
+
+  ESL_DASSERT1(( n > 0 ));
+
+  ESL_ALLOC(P, sizeof(ESL_PERMUTATION));
+  P->pi = NULL;
+  P->n  = n;
+  ESL_ALLOC(P->pi, sizeof(int) * n);
+
+  esl_permutation_Reuse(P);	/* initialize it */
+  return P;
+
+ ERROR:
+  esl_permutation_Destroy(P);
+  return NULL;
+}
+  
+/* Function:  esl_permutation_Destroy()
+ *
+ * Purpose:   Frees an <ESL_PERMUTATION> object <P>.
+ */
+int
+esl_permutation_Destroy(ESL_PERMUTATION *P)
+{
+  if (P != NULL && P->pi != NULL) free(P->pi);
+  if (P != NULL)                  free(P);
+  return eslOK;
+}
+
+/* Function:  esl_permutation_Reuse()
+ *
+ * Purpose:   Resets a permutation matrix <P> to
+ *            $p_i = i$ for all $i = 0..n-1$.
+ *            
+ * Returns:   <eslOK> on success.           
+ */
+int
+esl_permutation_Reuse(ESL_PERMUTATION *P)
+{
+  int i;
+  for (i = 0; i < P->n; i++)
+    P->pi[i] = i;
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 5. Debugging/validation for ESL_PERMUTATION.
+ *****************************************************************/
+
+/* Function:  esl_permutation_Dump()
+ *
+ * Purpose:   Given a permutation matrix <P>, dump it to output stream <ofp>
+ *            in human-readable format.
+ *            
+ *            If <rowlabel> or <collabel> are non-NULL, they represent
+ *            single-character labels to put on the rows and columns,
+ *            respectively. (For example, these might be a sequence
+ *            alphabet for a 4x4 or 20x20 rate matrix or substitution
+ *            matrix.)  Numbers 1..ncols or 1..nrows are used if
+ *            <collabel> or <rowlabel> are NULL.
+ *
+ * Args:      ofp      - output file pointer; stdout, for example
+ *            P        - permutation matrix to dump
+ *            rowlabel - optional: NULL, or character labels for rows
+ *            collabel - optional: NULL, or character labels for cols
+ *
+ * Returns:   <eslOK> on success.
+ */
+int 
+esl_permutation_Dump(FILE *ofp, const ESL_PERMUTATION *P, const char *rowlabel, const char *collabel)
+{
+  int i,j;
+
+  fprintf(ofp, "    ");
+  if (collabel != NULL)
+    for (j = 0; j < P->n; j++) fprintf(ofp, "  %c ", collabel[j]);
+  else
+    for (j = 0; j < P->n; j++) fprintf(ofp, "%3d ", j+1);
+  fprintf(ofp, "\n");
+
+  for (i = 0; i < P->n; i++) {
+    if (rowlabel != NULL) fprintf(ofp, "  %c ", rowlabel[i]);
+    else                  fprintf(ofp, "%3d ", i+1);
+
+    for (j = 0; j < P->n; j++)
+      fprintf(ofp, "%3d ", (j == P->pi[i]) ? 1 : 0);
+    fprintf(ofp, "\n");
+  }
+  return eslOK;
+}
+
+/*****************************************************************
+ * 6. The rest of the dmatrix API.
+ *****************************************************************/
+
+
+
+/* Function:  esl_dmx_Max()
+ * Incept:    SRE, Thu Mar  1 14:46:48 2007 [Janelia]
+ *
+ * Purpose:   Returns the maximum value of all the elements $a_{ij}$ in matrix <A>.
+ */
+double
+esl_dmx_Max(const ESL_DMATRIX *A)
+{
+  int    i;
+  double best;
+
+  best = A->mx[0][0];
+  for (i = 0; i < A->ncells; i++)
+    if (A->mx[0][i] > best) best = A->mx[0][i];
+  return best;
+}
+
+/* Function:  esl_dmx_Min()
+ * Incept:    SRE, Thu Mar  1 14:49:29 2007 [Janelia]
+ *
+ * Purpose:   Returns the minimum value of all the elements $a_{ij}$ in matrix <A>.
+ */
+double
+esl_dmx_Min(const ESL_DMATRIX *A)
+{
+  int    i;
+  double best;
+
+  best = A->mx[0][0];
+  for (i = 0; i < A->ncells; i++)
+    if (A->mx[0][i] < best) best = A->mx[0][i];
+  return best;
+}
+
+
+/* Function:  esl_dmx_MinMax()
+ * Incept:    SRE, Wed Mar 14 16:58:03 2007 [Janelia]
+ *
+ * Purpose:   Finds the maximum and minimum values of the
+ *            elements $a_{ij}$ in matrix <A>, and returns
+ *            them in <ret_min> and <ret_max>.
+ *            
+ * Returns:   <eslOK> on success.            
+ *            
+ */
+int
+esl_dmx_MinMax(const ESL_DMATRIX *A, double *ret_min, double *ret_max)
+{
+  double min, max;
+  int i;
+
+  min = max = A->mx[0][0];
+  for (i = 0; i < A->ncells; i++) {
+    if (A->mx[0][i] < min) min = A->mx[0][i];
+    if (A->mx[0][i] > max) max = A->mx[0][i];
+  }
+  *ret_min = min;
+  *ret_max = max;
+  return eslOK;
+}
+
+
+
+/* Function:  esl_dmx_Sum()
+ * Incept:    SRE, Thu Mar  1 16:45:16 2007
+ *
+ * Purpose:   Returns the scalar sum of all the elements $a_{ij}$ in matrix <A>,
+ *            $\sum_{ij} a_{ij}$.
+ */
+double
+esl_dmx_Sum(const ESL_DMATRIX *A)
+{
+  int    i;
+  double sum = 0.;
+
+  for (i = 0; i < A->ncells; i++)
+    sum += A->mx[0][i];
+  return sum;
+}
+
+
+/* Function:  esl_dmx_FrobeniusNorm()
+ * Incept:    SRE, Thu Mar 15 17:59:35 2007 [Janelia]
+ *
+ * Purpose:   Calculates the Frobenius norm of a matrix, which
+ *            is the element-wise equivalant of a 
+ *            Euclidean vector norm: 
+ *               $ = \sqrt(\sum a_{ij}^2)$
+ *
+ * Args:      A         - matrix
+ *            ret_fnorm - Frobenius norm.
+ * 
+ * Returns:   <eslOK> on success, and the Frobenius norm
+ *            is in <ret_fnorm>.
+ */
+int
+esl_dmx_FrobeniusNorm(const ESL_DMATRIX *A, double *ret_fnorm)
+{
+  double F = 0.;
+  int    i;
+
+  for (i = 0; i < A->ncells; i++)
+    F += A->mx[0][i] * A->mx[0][i];
+  *ret_fnorm = sqrt(F);
+  return eslOK;
+}
+
+
+/* Function: esl_dmx_Multiply()
+ * 
+ * Purpose:  Matrix multiplication: calculate <AB>, store result in <C>.
+ *           <A> is $n times m$; <B> is $m \times p$; <C> is $n \times p$.
+ *           Matrix <C> must be allocated appropriately by the caller.
+ *
+ *           Not supported for anything but general (<eslGENERAL>)
+ *           matrix type, at present.
+ *           
+ * Throws:   <eslEINVAL> if matrices don't have compatible dimensions,
+ *           or if any of them isn't a general (<eslGENERAL>) matrix.
+ */
+int
+esl_dmx_Multiply(const ESL_DMATRIX *A, const ESL_DMATRIX *B, ESL_DMATRIX *C)
+{
+  int i, j, k;
+
+  if (A->m    != B->n)       ESL_EXCEPTION(eslEINVAL, "can't multiply A,B");
+  if (A->n    != C->n)       ESL_EXCEPTION(eslEINVAL, "A,C # of rows not equal");
+  if (B->m    != C->m)       ESL_EXCEPTION(eslEINVAL, "B,C # of cols not equal");
+  if (A->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "A isn't of type eslGENERAL");
+  if (B->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "B isn't of type eslGENERAL");
+  if (C->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "B isn't of type eslGENERAL");
+
+  /* i,k,j order should optimize stride, relative to a more textbook
+   * order for the indices
+   */
+  esl_dmatrix_SetZero(C);
+  for (i = 0; i < A->n; i++)
+    for (k = 0; k < A->m; k++)
+      for (j = 0; j < B->m; j++)
+	C->mx[i][j] += A->mx[i][k] * B->mx[k][j];
+
+  return eslOK;
+}
+
+
+/*::cexcerpt::function_comment_example::begin::*/
+/* Function:  esl_dmx_Exp()
+ * Synopsis:  Calculates matrix exponential $\mathbf{P} = e^{t\mathbf{Q}}$.
+ * Incept:    SRE, Thu Mar  8 18:41:38 2007 [Janelia]
+ *
+ * Purpose:   Calculates the matrix exponential $\mathbf{P} = e^{t\mathbf{Q}}$,
+ *            using a scaling and squaring algorithm with
+ *            the Taylor series approximation \citep{MolerVanLoan03}.
+ *                              
+ *            <Q> must be a square matrix of type <eslGENERAL>.
+ *            Caller provides an allocated <P> matrix of the same size and type as <Q>.
+ *            
+ *            A typical use of this function is to calculate a
+ *            conditional substitution probability matrix $\mathbf{P}$
+ *            (whose elements $P_{xy}$ are conditional substitution
+ *            probabilities $\mathrm{Prob}(y \mid x, t)$ from time $t$
+ *            and instantaneous rate matrix $\mathbf{Q}$.
+ *
+ * Args:      Q  - matrix to exponentiate (an instantaneous rate matrix)
+ *            t  - time units
+ *            P  - RESULT: $e^{tQ}$.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *
+ * Xref:      J1/19.
+ */
+int
+esl_dmx_Exp(const ESL_DMATRIX *Q, double t, ESL_DMATRIX *P)
+{
+/*::cexcerpt::function_comment_example::end::*/
+  ESL_DMATRIX *Qz   = NULL;	/* Q/2^z rescaled matrix*/
+  ESL_DMATRIX *Qpow = NULL;	/* keeps running product Q^k */
+  ESL_DMATRIX *C    = NULL;	/* tmp storage for matrix multiply result */
+  double factor     = 1.0;
+  double fnorm;
+  int    z;
+  double zfac;
+  int    k;
+  int    status;
+    
+  /* Contract checks  */
+  if (Q->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "Q isn't general");
+  if (Q->n    != Q->m)       ESL_EXCEPTION(eslEINVAL, "Q isn't square");
+  if (P->type != Q->type)    ESL_EXCEPTION(eslEINVAL, "P isn't of same type as Q");
+  if (P->n    != P->m)       ESL_EXCEPTION(eslEINVAL, "P isn't square");
+  if (P->n    != Q->n)       ESL_EXCEPTION(eslEINVAL, "P isn't same size as Q");
+
+  /* Allocation of working space */
+  if ((Qz   = esl_dmatrix_Create(Q->n, Q->n)) == NULL) { status = eslEMEM; goto ERROR; }
+  if ((Qpow = esl_dmatrix_Create(Q->n, Q->n)) == NULL) { status = eslEMEM; goto ERROR; }
+  if ((C    = esl_dmatrix_Create(Q->n, Q->n)) == NULL) { status = eslEMEM; goto ERROR; }
+  
+  /* Figure out how much to scale the matrix down by.  This is not
+   * magical; we're just knocking its magnitude down in an ad hoc way.
+   */
+  esl_dmx_FrobeniusNorm(Q, &fnorm);
+  zfac = 1.;
+  z    = 0;
+  while (t*fnorm*zfac > 0.1) { zfac /= 2.; z++; }
+
+  /* Make a scaled-down copy of Q in Qz. 
+   */ 
+  esl_dmatrix_Copy(Q, Qz);       
+  esl_dmx_Scale(Qz, zfac);
+
+  /* Calculate e^{t Q_z} by the Taylor, to complete convergence. */
+  esl_dmatrix_SetIdentity(P);
+  esl_dmatrix_Copy(Qz, Qpow);       /* Qpow is now Qz^1 */
+  for (k = 1; k < 100; k++)
+    {
+      factor *= t/k;
+      esl_dmatrix_Copy(P, C);	            /* C now holds the previous P */
+      esl_dmx_AddScale(P, factor, Qpow);    /* P += factor*Qpow */
+      if (esl_dmatrix_Compare(C, P, 0.) == eslOK) break;
+
+      esl_dmx_Multiply(Qpow, Qz, C);        /* C = Q^{k+1} */
+      esl_dmatrix_Copy(C, Qpow);            /* Qpow = C = Q^{k+1} */
+    }
+
+  /* Now square it back up: e^{tQ} = [e^{tQ_z}]^{2^z} */
+  while (z--) {
+    esl_dmx_Multiply(P, P, C);
+    esl_dmatrix_Copy(C, P);
+  }
+
+  esl_dmatrix_Destroy(Qz);
+  esl_dmatrix_Destroy(Qpow);
+  esl_dmatrix_Destroy(C);
+  return eslOK;
+
+ ERROR:
+  if (Qz   != NULL) esl_dmatrix_Destroy(Qz);
+  if (Qpow != NULL) esl_dmatrix_Destroy(Qpow);
+  if (C    != NULL) esl_dmatrix_Destroy(C);
+  return status;
+}
+
+
+/* Function:  esl_dmx_Transpose()
+ *
+ * Purpose:   Transpose a square matrix <A> in place.
+ *
+ *            <A> must be a general (<eslGENERAL>) matrix type.
+ *
+ * Throws:    <eslEINVAL> if <A> isn't square, or if it isn't
+ *            of type <eslGENERAL>.
+ */
+int
+esl_dmx_Transpose(ESL_DMATRIX *A)
+{
+  int    i,j;
+  double swap;
+
+  if (A->n    != A->m)       ESL_EXCEPTION(eslEINVAL, "matrix isn't square");
+  if (A->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "A isn't of type eslGENERAL");
+
+  for (i = 0; i < A->n; i++)
+    for (j = i+1; j < A->m; j++)
+      { swap = A->mx[i][j]; A->mx[i][j] = A->mx[j][i]; A->mx[j][i] = swap; }
+  return eslOK;
+}
+
+
+/* Function:  esl_dmx_Add()
+ *
+ * Purpose:   <A = A+B>; adds matrix <B> to matrix <A> and leaves result
+ *            in matrix <A>.
+ *
+ *            <A> and <B> may be of any type. However, if <A> is a
+ *            packed upper triangular matrix (type
+ *            <eslUPPER>), all values $i>j$ in <B> must be
+ *            zero (i.e. <B> must also be upper triangular, though
+ *            not necessarily packed upper triangular).
+ *
+ * Throws:    <eslEINVAL> if matrices aren't the same dimensions, or
+ *            if <A> is <eslUPPER> and any cell $i>j$ in
+ *            <B> is nonzero.
+ */
+int
+esl_dmx_Add(ESL_DMATRIX *A, const ESL_DMATRIX *B)
+{
+  int    i,j;
+  
+  if (A->n    != B->n)              ESL_EXCEPTION(eslEINVAL, "matrices of different size");
+  if (A->m    != B->m)              ESL_EXCEPTION(eslEINVAL, "matrices of different size");
+
+  if (A->type == B->type)	/* in this case, can just add cell by cell */
+    {
+      for (i = 0; i < A->ncells; i++)
+	A->mx[0][i] += B->mx[0][i];
+    }
+  else if (A->type == eslUPPER || B->type == eslUPPER)
+    {
+      /* Logic is: if either matrix is upper triangular, then the operation is
+       * to add upper triangles only. If we try to add a general matrix <B>
+       * to packed UT <A>, make sure all lower triangle entries in <B> are zero.
+       */
+      if (B->type != eslUPPER) {
+	for (i = 1; i < A->n; i++)
+	  for (j = 0; j < i; j++)
+	    if (B->mx[i][j] != 0.) ESL_EXCEPTION(eslEINVAL, "<B> has nonzero cells in lower triangle");
+      }
+      for (i = 0; i < A->n; i++)
+	for (j = i; j < A->m; j++)
+	  A->mx[i][j] += B->mx[i][j];
+    }
+  return eslOK;
+}
+
+/* Function:  esl_dmx_Scale()
+ *
+ * Purpose:   Calculates <A = kA>: multiply matrix <A> by scalar
+ *            <k> and leave answer in <A>.
+ */
+int 
+esl_dmx_Scale(ESL_DMATRIX *A, double k)
+{
+  int i;
+
+  for (i = 0; i < A->ncells; i++)  A->mx[0][i] *=  k;
+  return eslOK;
+}
+
+
+/* Function:  esl_dmx_AddScale()
+ * 
+ * Purpose:   Calculates <A + kB>, leaves answer in <A>.
+ * 
+ *            Only defined for matrices of the same type (<eslGENERAL>
+ *            or <eslUPPER>).
+ * 
+ * Throws:    <eslEINVAL> if matrices aren't the same dimensions, or
+ *            of different types.
+ */
+int
+esl_dmx_AddScale(ESL_DMATRIX *A, double k, const ESL_DMATRIX *B)
+{
+  int i;
+
+  if (A->n    != B->n)    ESL_EXCEPTION(eslEINVAL, "matrices of different size");
+  if (A->m    != B->m)    ESL_EXCEPTION(eslEINVAL, "matrices of different size");
+  if (A->type != B->type) ESL_EXCEPTION(eslEINVAL, "matrices of different type");
+
+  for (i = 0; i < A->ncells; i++) A->mx[0][i] +=  k * B->mx[0][i];
+  return eslOK;
+}
+
+
+/* Function:  esl_dmx_Permute_PA()
+ *
+ * Purpose:   Computes <B = PA>: do a row-wise permutation of a square
+ *            matrix <A>, using the permutation matrix <P>, and put
+ *            the result in a square matrix <B> that the caller has
+ *            allocated.
+ *
+ * Throws:    <eslEINVAL> if <A>, <B>, <P> do not have compatible dimensions,
+ *            or if <A> or <B> is not of type <eslGENERAL>.
+ */
+int
+esl_dmx_Permute_PA(const ESL_PERMUTATION *P, const ESL_DMATRIX *A, ESL_DMATRIX *B)
+{
+  int i,ip,j;
+
+  if (A->n    != P->n)       ESL_EXCEPTION(eslEINVAL, "matrix dimensions not compatible");
+  if (A->n    != B->n)       ESL_EXCEPTION(eslEINVAL, "matrix dimensions not compatible");
+  if (A->n    != A->m)       ESL_EXCEPTION(eslEINVAL, "matrix dimensions not compatible");
+  if (B->n    != B->m)       ESL_EXCEPTION(eslEINVAL, "matrix dimensions not compatible");
+  if (A->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix A not of type eslGENERAL");
+  if (B->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix B not of type eslGENERAL");
+
+  for (i = 0; i < A->n; i++)
+    {
+      ip = P->pi[i];
+      for (j = 0; j < A->m; j++)
+	B->mx[i][j] = A->mx[ip][j];
+    }
+  return eslOK;
+}
+
+/* Function:  esl_dmx_LUP_decompose()
+ *
+ * Purpose:   Calculates a permuted LU decomposition of square matrix
+ *            <A>; upon return, <A> is replaced by this decomposition,
+ *            where <U> is in the lower triangle (inclusive of the 
+ *            diagonal) and <L> is the upper triangle (exclusive of
+ *            diagonal, which is 1's by definition), and <P> is the
+ *            permutation matrix. Caller provides an allocated 
+ *            permutation matrix <P> compatible with the square matrix
+ *            <A>.
+ *            
+ *            Implements Gaussian elimination with pivoting 
+ *            \citep[p.~759]{Cormen99}.
+ *
+ * Throws:    <eslEINVAL> if <A> isn't square, or if <P> isn't the right
+ *            size for <A>, or if <A> isn't of general type.
+ */
+int
+esl_dmx_LUP_decompose(ESL_DMATRIX *A, ESL_PERMUTATION *P)
+{
+  int    i,j,k;
+  int    kpiv = 0;    // initialization serves to quiet overzealous static analyzers
+  double max;
+  double swap;
+
+  if (A->n    != A->m)       ESL_EXCEPTION(eslEINVAL, "matrix isn't square");
+  if (P->n    != A->n)       ESL_EXCEPTION(eslEINVAL, "permutation isn't the right size");
+  if (A->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix isn't of general type");
+  esl_permutation_Reuse(P);
+
+  for (k = 0; k < A->n-1; k++)
+    {
+      /* Identify our pivot; find row with maximum value in col[k]. 
+       * This is guaranteed to succeed and set <kpiv> 
+       * (no matter what a static analyzer tells you)
+       */
+      max  = 0.; 
+      for (i = k; i < A->n; i++)
+	if (fabs(A->mx[i][k]) > max) {
+	  max = fabs(A->mx[i][k]);
+	  kpiv = i;
+	}
+      if (max == 0.) ESL_EXCEPTION(eslEDIVZERO, "matrix is singular");
+      
+      /* Swap those rows (k and kpiv);
+       * and keep track of that permutation in P. (misuse j for swapping integers)
+       */
+      j = P->pi[k]; P->pi[k] = P->pi[kpiv]; P->pi[kpiv] = j;
+      for (j = 0; j < A->m; j++)
+	{ swap = A->mx[k][j]; A->mx[k][j] = A->mx[kpiv][j]; A->mx[kpiv][j] = swap; }
+
+      /* Gaussian elimination for all rows k+1..n.
+       */
+      for (i = k+1; i < A->n; i++)
+	{
+	  A->mx[i][k] /= A->mx[k][k];
+	  for (j = k+1; j < A->m; j++)
+	    A->mx[i][j] -= A->mx[i][k] * A->mx[k][j];
+	}
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_dmx_LU_separate()
+ *
+ * Purpose:   Separate a square <LU> decomposition matrix into its two
+ *            triangular matrices <L> and <U>. Caller provides two
+ *            allocated <L> and <U> matrices of same size as <LU> for
+ *            storing the results.
+ *            
+ *            <U> may be an upper triangular matrix in either unpacked
+ *            (<eslGENERAL>) or packed (<eslUPPER>) form.
+ *            <LU> and <L> must be of <eslGENERAL> type.
+ *
+ * Throws:    <eslEINVAL> if <LU>, <L>, <U> are not of compatible dimensions,
+ *            or if <LU> or <L> aren't of general type. 
+ */
+int
+esl_dmx_LU_separate(const ESL_DMATRIX *LU, ESL_DMATRIX *L, ESL_DMATRIX *U)
+{
+  int i,j;
+
+  if (LU->n    != LU->m)      ESL_EXCEPTION(eslEINVAL, "LU isn't square");
+  if (L->n     != L->m)       ESL_EXCEPTION(eslEINVAL, "L isn't square");
+  if (U->n     != U->m)       ESL_EXCEPTION(eslEINVAL, "U isn't square");
+  if (LU->n    != L->n)       ESL_EXCEPTION(eslEINVAL, "LU, L have incompatible dimensions");
+  if (LU->n    != U->n)       ESL_EXCEPTION(eslEINVAL, "LU, U have incompatible dimensions");
+  if (LU->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix isn't of general type");
+  if (L->type  != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix isn't of general type");
+
+  esl_dmatrix_SetZero(L);
+  esl_dmatrix_SetZero(U);
+
+  for (i = 0; i < LU->n; i++)
+    for (j = i; j < LU->m; j++)
+      U->mx[i][j] = LU->mx[i][j];
+
+  for (i = 0; i < LU->n; i++) 
+    {
+      L->mx[i][i] = 1.;
+      for (j = 0; j < i; j++)
+	L->mx[i][j] = LU->mx[i][j];
+    }
+  return eslOK;
+}
+
+/* Function:  esl_dmx_Invert()
+ *
+ * Purpose:   Calculates the inverse of square matrix <A>, and stores the
+ *            result in matrix <Ai>. Caller provides an allocated
+ *            matrix <Ai> of same dimensions as <A>. Both must be
+ *            of type <eslGENERAL>.
+ *            
+ *            Peforms the inversion by LUP decomposition followed by 
+ *            forward/back-substitution \citep[p.~753]{Cormen99}.
+ *
+ * Throws:    <eslEINVAL> if <A>, <Ai> do not have same dimensions, 
+ *                        if <A> isn't square, or if either isn't of
+ *                        type <eslGENERAL>.
+ *            <eslEMEM>   if internal allocations (for LU, and some other
+ *                         bookkeeping) fail.
+ */
+int
+esl_dmx_Invert(const ESL_DMATRIX *A, ESL_DMATRIX *Ai)
+{
+  ESL_DMATRIX      *LU = NULL;
+  ESL_PERMUTATION  *P  = NULL;
+  double           *y  = NULL;	/* column vector, intermediate calculation   */
+  double           *b  = NULL;	/* column vector of permuted identity matrix */
+  int               i,j,k;
+  int               status;
+
+  if (A->n     != A->m)                   ESL_EXCEPTION(eslEINVAL, "matrix isn't square");
+  if (A->n     != Ai->n || A->m != Ai->m) ESL_EXCEPTION(eslEINVAL, "matrices are different size");
+  if (A->type  != eslGENERAL)             ESL_EXCEPTION(eslEINVAL, "matrix A not of general type");
+  if (Ai->type != eslGENERAL)             ESL_EXCEPTION(eslEINVAL, "matrix B not of general type");
+
+  /* Copy A to LU, and do an LU decomposition.
+   */
+  if ((LU = esl_dmatrix_Create(A->n, A->m))    == NULL)  { status = eslEMEM; goto ERROR; }
+  if ((P  = esl_permutation_Create(A->n))      == NULL)  { status = eslEMEM; goto ERROR; }
+  if (( status = esl_dmatrix_Copy(A, LU))      != eslOK) goto ERROR;
+  if (( status = esl_dmx_LUP_decompose(LU, P)) != eslOK) goto ERROR;
+
+  /* Now we have:
+   *   PA = LU
+   *   
+   * to invert a matrix A, we want A A^-1 = I;
+   * that's PAx = Pb, for columns x of A^-1 and b of the identity matrix;
+   * and that's n equations LUx = Pb;
+   * 
+   * so, solve Ly = Pb for y by forward substitution;
+   * then Ux = y by back substitution;
+   * x is then a column of A^-1.
+   * 
+   * Do that for all columns.
+   */
+  ESL_ALLOC(b, sizeof(double) * A->n);
+  ESL_ALLOC(y, sizeof(double) * A->n);
+
+  for (k = 0; k < A->m; k++)	/* for each column... */
+    {
+      /* build Pb for column j of the identity matrix */
+      for (i = 0; i < A->n; i++)
+	if (P->pi[i] == k) b[i] = 1.; else b[i] = 0.;
+
+      /* forward substitution
+       */
+      for (i = 0; i < A->n; i++)
+	{
+	  y[i] = b[i];
+	  for (j = 0; j < i; j++) y[i] -= LU->mx[i][j] * y[j];
+	}
+
+      /* back substitution
+       */
+      for (i = A->n-1; i >= 0; i--)
+	{
+	  Ai->mx[i][k] = y[i];
+	  for (j = i+1; j < A->n; j++) Ai->mx[i][k] -= LU->mx[i][j] * Ai->mx[j][k];
+	  Ai->mx[i][k] /= LU->mx[i][i];
+	}
+    }
+
+  free(b);
+  free(y);
+  esl_dmatrix_Destroy(LU);
+  esl_permutation_Destroy(P);
+  return eslOK;
+
+ ERROR:
+  if (y  != NULL) free(y);
+  if (b  != NULL) free(b);
+  if (LU != NULL) esl_dmatrix_Destroy(LU);
+  if (P  != NULL) esl_permutation_Destroy(P);
+  return status;
+}
+
+
+/*****************************************************************
+ * 7. Optional: interoperability with GSL
+ *****************************************************************/
+#ifdef HAVE_LIBGSL
+
+#include <gsl/gsl_matrix.h>
+
+int
+esl_dmx_MorphGSL(const ESL_DMATRIX *E, gsl_matrix **ret_G)
+{
+  gsl_matrix *G = NULL;
+  int i,j;
+
+  if (E->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "can only morph general matrices to GSL right now");
+
+  G = gsl_matrix_alloc(E->m, E->n);
+  for (i = 0; i < E->m; i++)
+    for (j = 0; j < E->n; j++)
+      gsl_matrix_set(G, i, j, E->mx[i][j]);
+  *ret_G = G;
+  return eslOK;
+}
+
+int
+esl_dmx_UnmorphGSL(const gsl_matrix *G, ESL_DMATRIX **ret_E)
+{
+  ESL_DMATRIX *E = NULL;
+  int i,j;
+  
+  if ((E = esl_dmatrix_Create(G->size1, G->size2)) == NULL) return eslEMEM;
+  for (i = 0; i < G->size1; i++)
+    for (j = 0; j < G->size2; j++)
+      E->mx[i][j] = gsl_matrix_get(G, i, j);
+  *ret_E = E;
+  return eslOK;
+}
+
+#endif /*HAVE_LIBGSL*/
+
+/*****************************************************************
+ * 8. Optional: Interfaces to LAPACK
+ *****************************************************************/
+#ifdef HAVE_LIBLAPACK
+
+/* To include LAPACK code, you need to:
+ *   1. declare the C interface to the Fortran routine,
+ *      appending _ to the Fortran routine's name (dgeev becomes dgeev_)
+ *      
+ *   2. Remember to transpose matrices into column-major
+ *      Fortran form
+ *      
+ *   3. everything must be passed by reference, not by value
+ *   
+ *   4. you don't need any include files, just lapack.a
+ *   
+ *   5. Add -llapack to the compile line.
+ *      (It doesn't appear that blas or g2c are needed?)
+ */   
+
+/* Declare the C interface to the Fortran77 dgeev routine
+ * provided by the LAPACK library:
+ */
+extern void  dgeev_(char *jobvl, char *jobvr, int *n, double *a,
+                    int *lda, double *wr, double *wi, double *vl,
+                    int *ldvl, double *vr, int *ldvr,
+                    double *work, int *lwork, int *info);
+
+
+/* Function:  esl_dmx_Diagonalize()
+ * Incept:    SRE, Thu Mar 15 09:28:03 2007 [Janelia]
+ *
+ * Purpose:   Given a square real matrix <A>, diagonalize it:
+ *            solve for $U^{-1} A U = diag(\lambda_1... \lambda_n)$.
+ *            
+ *            Upon return, <ret_Er> and <ret_Ei> are vectors
+ *            containing the real and complex parts of the eigenvalues
+ *            $\lambda_i$; <ret_UL> is the $U^{-1}$ matrix containing
+ *            the left eigenvectors; and <ret_UR> is the $U$ matrix
+ *            containing the right eigenvectors.
+ *            
+ *            <ret_UL> and <ret_UR> are optional; pass <NULL> for
+ *            either if you don't want that set of eigenvectors.
+ *
+ *            This is a C interface to the <dgeev()> routine in the
+ *            LAPACK linear algebra library.
+ *            
+ * Args:      A       -  square nxn matrix to diagonalize
+ *            ret_Er  - RETURN: real part of eigenvalues (0..n-1)
+ *            ret_Ei  - RETURN: complex part of eigenvalues (0..n-1)
+ *            ret_UL  - optRETURN: nxn matrix of left eigenvectors
+ *            ret_UR  - optRETURN: 
+ *
+ * Returns:   <eslOK> on success.
+ *            <ret_Er> and <ret_Ei> (and <ret_UL>,<ret_UR> when they are
+ *            requested) are allocated here, and must be free'd by the caller.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            In this case, the four return pointers are returned <NULL>.
+ *
+ * Xref:      J1/19.
+ */
+int
+esl_dmx_Diagonalize(const ESL_DMATRIX *A, double **ret_Er, double **ret_Ei, 
+		    ESL_DMATRIX **ret_UL, ESL_DMATRIX **ret_UR)
+{
+  int          status;
+  double      *Er   = NULL;
+  double      *Ei   = NULL;
+  ESL_DMATRIX *At   = NULL;
+  ESL_DMATRIX *UL   = NULL;
+  ESL_DMATRIX *UR   = NULL;
+  double      *work = NULL;
+  char   jobul, jobur;
+  int    lda;
+  int    ldul, ldur;
+  int    lwork;
+  int    info;
+
+  if (A->n != A->m) ESL_EXCEPTION(eslEINVAL, "matrix isn't square");
+
+  if ((At = esl_dmatrix_Clone(A))          == NULL)       { status = eslEMEM; goto ERROR; } 
+  if ((UL = esl_dmatrix_Create(A->n,A->n)) == NULL)       { status = eslEMEM; goto ERROR; }
+  if ((UR = esl_dmatrix_Create(A->n,A->n)) == NULL)       { status = eslEMEM; goto ERROR; }
+  ESL_ALLOC(Er,   sizeof(double) * A->n);
+  ESL_ALLOC(Ei,   sizeof(double) * A->n);
+  ESL_ALLOC(work, sizeof(double) * 8 * A->n);
+
+  jobul = (ret_UL == NULL) ? 'N' : 'V';	/* do we want left eigenvectors? */
+  jobur = (ret_UR == NULL) ? 'N' : 'V'; /* do we want right eigenvectors? */
+  lda   = A->n; 
+  ldul  = A->n;
+  ldur  = A->n;
+  lwork = 8*A->n;
+
+  /* Fortran convention is colxrow, not rowxcol; so transpose
+   * a copy of A before passing it to a Fortran routine.
+   */
+  esl_dmx_Transpose(At);
+
+  /* The Fortran77 interface call to LAPACK's dgeev().
+   * All args must be passed by reference.
+   * Fortran 2D arrays are 1D: so pass the A[0] part of a DSMX.
+   */
+  dgeev_(&jobul, &jobur, &(At->n), At->mx[0], &lda, Er, Ei, 
+	 UL->mx[0], &ldul, UR->mx[0], &ldur, work, &lwork, &info);
+  if (info < 0) ESL_XEXCEPTION(eslEINVAL, "argument %d to LAPACK dgeev is invalid", -info);
+  if (info > 0) ESL_XEXCEPTION(eslEINVAL, 
+			       "diagonalization failed; only eigenvalues %d..%d were computed",
+			       info+1, At->n);
+
+  /* Now, UL, UR are transposed (col x row), so transpose them back to
+   * C language convention.
+   */
+  esl_dmx_Transpose(UL);
+  esl_dmx_Transpose(UR);
+
+  esl_dmatrix_Destroy(At);
+  if (ret_UL != NULL) *ret_UL = UL; else esl_dmatrix_Destroy(UL);
+  if (ret_UR != NULL) *ret_UR = UR; else esl_dmatrix_Destroy(UR);
+  if (ret_Er != NULL) *ret_Er = Er; else free(Er);
+  if (ret_Ei != NULL) *ret_Ei = Ei; else free(Ei);
+  free(work);
+  return eslOK;
+
+ ERROR:
+  if (ret_UL != NULL) *ret_UL = NULL;
+  if (ret_UR != NULL) *ret_UR = NULL;
+  if (ret_Er != NULL) *ret_Er = NULL;
+  if (ret_Ei != NULL) *ret_Ei = NULL;
+  if (At   != NULL) esl_dmatrix_Destroy(At);
+  if (UL   != NULL) esl_dmatrix_Destroy(UL);
+  if (UR   != NULL) esl_dmatrix_Destroy(UR);
+  if (Er   != NULL) free(Er);
+  if (Ei   != NULL) free(Ei);
+  if (work != NULL) free(work);
+  return status;
+}
+
+
+#endif /*HAVE_LIBLAPACK*/
+
+/*****************************************************************
+ * 9. Unit tests
+ *****************************************************************/ 
+#ifdef eslDMATRIX_TESTDRIVE
+
+static void 
+utest_misc_ops(void)
+{
+  char *msg = "miscellaneous unit test failed";
+  ESL_DMATRIX *A, *B, *C;
+  int  n = 20;
+
+  if ((A = esl_dmatrix_Create(n,n)) == NULL) esl_fatal(msg);
+  if ((B = esl_dmatrix_Create(n,n)) == NULL) esl_fatal(msg);
+  if ((C = esl_dmatrix_Create(n,n)) == NULL) esl_fatal(msg);
+  
+  if (esl_dmatrix_SetIdentity(A)    != eslOK) esl_fatal(msg);   /* A=I */
+  if (esl_dmx_Invert(A, B)          != eslOK) esl_fatal(msg);	/* B=I^-1=I */
+  if (esl_dmx_Multiply(A,B,C)       != eslOK) esl_fatal(msg);	/* C=I */
+  if (esl_dmx_Transpose(A)          != eslOK) esl_fatal(msg);   /* A=I still */
+
+  if (esl_dmx_Scale(A, 0.5)         != eslOK) esl_fatal(msg);	/* A= 0.5I */
+  if (esl_dmx_AddScale(B, -0.5, C)  != eslOK) esl_fatal(msg);	/* B= 0.5I */
+  
+  if (esl_dmx_Add(A,B)              != eslOK) esl_fatal(msg);	/* A=I */
+  if (esl_dmx_Scale(B, 2.0)         != eslOK) esl_fatal(msg);	/* B=I */
+  
+  if (esl_dmatrix_Compare(A, B, 1e-12) != eslOK) esl_fatal(msg);
+  if (esl_dmatrix_Compare(A, C, 1e-12) != eslOK) esl_fatal(msg);
+  if (esl_dmatrix_Copy(B, C)           != eslOK) esl_fatal(msg);
+  if (esl_dmatrix_Compare(A, C, 1e-12) != eslOK) esl_fatal(msg);
+
+  esl_dmatrix_Destroy(A);
+  esl_dmatrix_Destroy(B);
+  esl_dmatrix_Destroy(C);
+  return;
+}
+
+
+static void
+utest_Invert(ESL_DMATRIX *A)
+{
+  char *msg = "Failure in matrix inversion unit test";
+  ESL_DMATRIX *Ai = NULL;
+  ESL_DMATRIX *B  = NULL;
+  ESL_DMATRIX *I  = NULL;
+
+  if ((Ai = esl_dmatrix_Create(A->n, A->m)) == NULL)  esl_fatal(msg);
+  if ((B  = esl_dmatrix_Create(A->n, A->m)) == NULL)  esl_fatal(msg);
+  if ((I  = esl_dmatrix_Create(A->n, A->m)) == NULL)  esl_fatal(msg);
+  if (esl_dmx_Invert(A, Ai)                 != eslOK) esl_fatal("matrix inversion failed");
+  if (esl_dmx_Multiply(A,Ai,B)              != eslOK) esl_fatal(msg);
+  if (esl_dmatrix_SetIdentity(I)            != eslOK) esl_fatal(msg);
+  if (esl_dmatrix_Compare(B,I, 1e-12)       != eslOK) esl_fatal("inverted matrix isn't right");
+  
+  esl_dmatrix_Destroy(Ai);
+  esl_dmatrix_Destroy(B);
+  esl_dmatrix_Destroy(I);
+  return;
+}
+
+
+#endif /*eslDMATRIX_TESTDRIVE*/
+
+
+
+/*****************************************************************
+ * 10. Test driver
+ *****************************************************************/ 
+
+/*   gcc -g -Wall -o test -I. -L. -DeslDMATRIX_TESTDRIVE esl_dmatrix.c -leasel -lm
+ */
+#ifdef eslDMATRIX_TESTDRIVE
+#include "easel.h"
+#include "esl_dmatrix.h"
+#include "esl_random.h"
+
+int main(void)
+{
+  ESL_RANDOMNESS *r;
+  ESL_DMATRIX *A;
+  int          n    = 30;
+  int          seed = 42;
+  int          i,j;
+  double       range = 100.;
+
+  /* Create a square matrix with random values from  -range..range */
+  if ((r = esl_randomness_Create(seed)) == NULL) esl_fatal("failed to create random source");
+  if ((A = esl_dmatrix_Create(n, n))    == NULL) esl_fatal("failed to create matrix");
+  for (i = 0; i < n; i++)
+    for (j = 0; j < n; j++)
+      A->mx[i][j] = esl_random(r) * range * 2.0 - range;
+
+  utest_misc_ops();
+  utest_Invert(A);
+
+  esl_randomness_Destroy(r);
+  esl_dmatrix_Destroy(A);
+  return 0;
+}
+#endif /*eslDMATRIX_TESTDRIVE*/
+
+
+/*****************************************************************
+ * 11. Examples
+ *****************************************************************/ 
+
+/*   gcc -g -Wall -o example -I. -DeslDMATRIX_EXAMPLE esl_dmatrix.c easel.c -lm
+ */
+#ifdef eslDMATRIX_EXAMPLE
+/*::cexcerpt::dmatrix_example::begin::*/
+#include "easel.h"
+#include "esl_dmatrix.h"
+
+int main(void)
+{
+  ESL_DMATRIX *A, *B, *C;
+
+  A = esl_dmatrix_Create(4,4);
+  B = esl_dmatrix_Create(4,4);
+  C = esl_dmatrix_Create(4,4);
+  
+  esl_dmatrix_SetIdentity(A);
+  esl_dmatrix_Copy(A, B);
+
+  esl_dmx_Multiply(A,B,C);
+
+  esl_dmatrix_Dump(stdout, C, NULL, NULL);
+
+  esl_dmatrix_Destroy(A);
+  esl_dmatrix_Destroy(B);
+  esl_dmatrix_Destroy(C);
+  return 0;
+}
+/*::cexcerpt::dmatrix_example::end::*/
+#endif /*eslDMATRIX_EXAMPLE*/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_dmatrix.h b/esl_dmatrix.h
new file mode 100644
index 0000000..af12174
--- /dev/null
+++ b/esl_dmatrix.h
@@ -0,0 +1,89 @@
+/* Double-precision two-dimensional matrices, and some linear algebra
+ * 
+ * SRE, Tue Jul 13 14:41:07 2004 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslDMATRIX_INCLUDED
+#define eslDMATRIX_INCLUDED
+
+#include <stdio.h>
+
+typedef struct {
+  /*mx, mx[0] are allocated. */
+/*::cexcerpt::dmatrix_obj::begin::*/
+  double **mx;                  /* mx[i][j] is i'th row, j'th col */
+  int      n;                   /* rows    */
+  int      m;                   /* columns */
+  enum { eslGENERAL, eslUPPER } type;
+/*::cexcerpt::dmatrix_obj::end::*/
+  int      ncells;		/* number of valid cells (nxm in standard matrix) */
+} ESL_DMATRIX;
+
+typedef struct {
+  int     *pi;
+  int      n;
+} ESL_PERMUTATION;
+
+/* 1. The ESL_DMATRIX object. */
+extern ESL_DMATRIX *esl_dmatrix_Create(int n, int m);
+extern ESL_DMATRIX *esl_dmatrix_CreateUpper(int n);
+extern int          esl_dmatrix_Destroy(ESL_DMATRIX *A);
+extern int          esl_dmatrix_Copy       (const ESL_DMATRIX *src, ESL_DMATRIX *dest);
+extern ESL_DMATRIX *esl_dmatrix_Clone      (const ESL_DMATRIX *old);
+extern int          esl_dmatrix_Compare    (const ESL_DMATRIX *A, const ESL_DMATRIX *B, double tol);
+extern int          esl_dmatrix_CompareAbs (const ESL_DMATRIX *A, const ESL_DMATRIX *B, double tol);
+extern int          esl_dmatrix_Set        (ESL_DMATRIX *A, double x);
+extern int          esl_dmatrix_SetZero    (ESL_DMATRIX *A);
+extern int          esl_dmatrix_SetIdentity(ESL_DMATRIX *A);
+
+/* 2. Debugging/validation for ESL_DMATRIX. */
+extern int          esl_dmatrix_Dump(FILE *ofp, const ESL_DMATRIX *A, 
+				     const char *rowlabel, const char *collabel);
+
+/* 3. Visualization tools. */
+extern int          esl_dmatrix_PlotHeatMap(FILE *fp, ESL_DMATRIX *D, double min, double max);
+
+/* 4. The ESL_PERMUTATION object. */
+extern ESL_PERMUTATION *esl_permutation_Create(int n);
+extern int              esl_permutation_Destroy(ESL_PERMUTATION *P);
+extern int              esl_permutation_Reuse(ESL_PERMUTATION *P);
+
+/* 5. Debugging/validation for ESL_PERMUTATION. */
+extern int              esl_permutation_Dump(FILE *ofp, const ESL_PERMUTATION *P, 
+					     const char *rowlabel, const char *collabel);
+
+/* 6. The rest of the dmatrix API. */
+extern double       esl_dmx_Max    (const ESL_DMATRIX *A);
+extern double       esl_dmx_Min    (const ESL_DMATRIX *A);
+extern double       esl_dmx_Sum    (const ESL_DMATRIX *A);
+extern int          esl_dmx_MinMax(const ESL_DMATRIX *A, double *ret_min, double *ret_max);
+extern int          esl_dmx_FrobeniusNorm(const ESL_DMATRIX *A, double *ret_fnorm);
+extern int          esl_dmx_Multiply(const ESL_DMATRIX *A, const ESL_DMATRIX *B, ESL_DMATRIX *C);
+extern int          esl_dmx_Exp(const ESL_DMATRIX *Q, double t, ESL_DMATRIX *P);
+extern int          esl_dmx_Transpose(ESL_DMATRIX *A);
+extern int          esl_dmx_Add(ESL_DMATRIX *A, const ESL_DMATRIX *B);
+extern int          esl_dmx_Scale(ESL_DMATRIX *A, double k);
+extern int          esl_dmx_AddScale(ESL_DMATRIX *A, double k, const ESL_DMATRIX *B);
+extern int          esl_dmx_Permute_PA(const ESL_PERMUTATION *P, const ESL_DMATRIX *A, ESL_DMATRIX *B);
+extern int          esl_dmx_LUP_decompose(ESL_DMATRIX *A, ESL_PERMUTATION *P);
+extern int          esl_dmx_LU_separate(const ESL_DMATRIX *LU, ESL_DMATRIX *L, ESL_DMATRIX *U);
+extern int          esl_dmx_Invert(const ESL_DMATRIX *A, ESL_DMATRIX *Ai);
+
+/* 7. Optional: interoperability with GSL */
+#ifdef HAVE_LIBGSL
+#include <gsl/gsl_matrix.h>
+extern int          esl_dmx_MorphGSL(const ESL_DMATRIX *E, gsl_matrix **ret_G);
+extern int          esl_dmx_UnmorphGSL(const gsl_matrix *G, ESL_DMATRIX **ret_E);
+#endif
+
+/* 8. Optional: interfaces to LAPACK  */
+#ifdef HAVE_LIBLAPACK
+extern int esl_dmx_Diagonalize(const ESL_DMATRIX *A, double **ret_Er, double **ret_Ei, ESL_DMATRIX **ret_UL, ESL_DMATRIX **ret_UR);
+#endif
+
+#endif /*eslDMATRIX_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
diff --git a/esl_dmatrix.tex b/esl_dmatrix.tex
new file mode 100644
index 0000000..47956a4
--- /dev/null
+++ b/esl_dmatrix.tex
@@ -0,0 +1,187 @@
+The \eslmod{dmatrix} module implements 2D matrices and linear algebra
+operations.
+
+There are two objects. The main one is a \ccode{ESL\_DMATRIX}, a 2D
+real-valued matrix of n rows and m columns. There is also
+\ccode{ESL\_PERMUTATION}, a special matrix used in LU decompositions.
+
+It is straightforward to call standard BLAS and LAPACK linear algebra
+routines on the data in an \ccode{ESL\_DMATRIX}.
+
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\hyperlink{func:esl_dmatrix_Create()}{\ccode{esl\_dmatrix\_Create()}} & Create general matrix.\\
+\hyperlink{func:esl_dmatrix_CreateUpper()}{\ccode{esl\_dmatrix\_CreateUpper()}} & Create packed upper triangular matrix.\\
+\hyperlink{func:esl_dmatrix_Destroy()}{\ccode{esl\_dmatrix\_Destroy()}} & Free a matrix.\\
+\hyperlink{func:esl_dmatrix_Dump()}{\ccode{esl\_dmatrix\_Dump()}} & Dump matrix internals to output stream.\\
+\hyperlink{func:esl_dmatrix_Copy()}{\ccode{esl\_dmatrix\_Copy()}} & Make a copy of a matrix (no new allocation).\\
+\hyperlink{func:esl_dmatrix_Clone()}{\ccode{esl\_dmatrix\_Clone()}} & Duplicate a matrix (allocate new storage).\\
+\hyperlink{func:esl_dmatrix_Compare()}{\ccode{esl\_dmatrix\_Compare()}} & Compare two matrices for equality.\\
+\hyperlink{func:esl_dmatrix_Set()}{\ccode{esl\_dmatrix\_Set()}} & Set all cells in matrix to same scalar value.\\
+\hyperlink{func:esl_dmatrix_SetZero()}{\ccode{esl\_dmatrix\_SetZero()}} & Set all cells in matrix to zero.\\
+\hyperlink{func:esl_dmatrix_SetIdentity()}{\ccode{esl\_dmatrix\_SetIdentity()}} & Set diagonal elements to 1, all others to zero.\\
+\hyperlink{func:esl_dmx_Max()}{\ccode{esl\_dmx\_Max()}} &Returns maximum element value.\\
+\hyperlink{func:esl_dmx_Min()}{\ccode{esl\_dmx\_Min()}} &Returns maximum element value.\\
+\hyperlink{func:esl_dmx_Sum()}{\ccode{esl\_dmx\_Sum()}} &Returns sum of all elements.\\
+\hyperlink{func:esl_permutation_Create()}{\ccode{esl\_permutation\_Create()}} & Create a permutation matrix.\\
+\hyperlink{func:esl_permutation_Destroy()}{\ccode{esl\_permutation\_Destroy()}} & Free a permutation matrix.\\
+\hyperlink{func:esl_permutation_Reuse()}{\ccode{esl\_permutation\_Reuse()}} & Reuse a permutation matrix.\\
+\hyperlink{func:esl_permutation_Dump()}{\ccode{esl\_permutation\_Dump()}} & Dump permutation matrix internals to output stream.\\
+\hyperlink{func:esl_dmx_Multiply()}{\ccode{esl\_dmx\_Multiply()}} & Matrix multiplication.\\
+\hyperlink{func:esl_dmx_Transpose()}{\ccode{esl\_dmx\_Transpose()}} & Matrix transpostion.\\
+\hyperlink{func:esl_dmx_Add()}{\ccode{esl\_dmx\_Add()}} & Matrix addition.\\
+\hyperlink{func:esl_dmx_Scale()}{\ccode{esl\_dmx\_Scale()}} & Multiply a matrix by a scalar.\\
+\hyperlink{func:esl_dmx_AddScale()}{\ccode{esl\_dmx\_AddScale()}} & $A + kB$ \\
+\hyperlink{func:esl_dmx_Permute_PA()}{\ccode{esl\_dmx\_Permute\_PA()}} & $B = PA$, a row-wise permutation of $A$.\\
+\hyperlink{func:esl_dmx_LUP_decompose()}{\ccode{esl\_dmx\_LUP\_decompose()}} & Permuted LU decomposition.\\
+\hyperlink{func:esl_dmx_LU_separate()}{\ccode{esl\_dmx\_LU\_separate()}} & Get answers from a LU decomposition.\\
+\hyperlink{func:esl_dmx_Invert()}{\ccode{esl\_dmx\_Invert()}} & Matrix inversion.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{dmatrix} API.}
+\label{tbl:dmatrix_api}
+\end{table}
+
+
+\subsection{Example of using the dmatrix API}
+
+A toy example that demonstrates the syntax of creating three 4x4
+square matrices and doing some simple operations on them:
+
+\input{cexcerpts/dmatrix_example}
+
+
+\subsection{Accessing matrix values}
+
+The accessible internals of the \ccode{ESL\_DMATRIX} structure are:
+
+\input{cexcerpts/dmatrix_obj}
+
+The matrix is stored in row-major orientation: the value in cell
+$(i,j)$ in row $i$ and column $j$ is in \ccode{mx->mx[i][j]}.
+
+Elements are stored in a single array \ccode{mx->mx[0]}. This is
+important for interoperability with BLAS and LAPACK; see below. The
+row pointers \ccode{mx->mx[i]} are initialized so that elements may be
+accessed simply as \ccode{mx->mx[i][j]}, rather than by pointer
+arithmetic \ccode{mx->mx[0] + i*mx->m + j}.
+
+\subsection{Specialized matrix types}
+
+Normally matrices are created with \ccode{esl\_dmatrix\_Create()},
+which allocates storage for all $n \times m$ cells. Easel calls this a
+matrix of type \ccode{eslGENERAL}. 
+
+Matrices may have more restricted forms, which may constrain certain
+values and may allow packed storage. For example, an upper triangular
+matrix is one in which all elements $i>j$ have a value of zero. When
+we calculate the minimum in such a matrix with
+\ccode{esl\_dmatrix\_Min()}, we probably don't want to consider the
+$i>j$ elements. We also can save almost two-fold in storage by not
+storing the $i>j$ elements at all. Other types include square, lower
+triagonal, and symmetric matrices.
+
+We expect to need to expand Easel's implementation of different matrix
+types in the future, but right now, Easel has just one other matrix
+type, \ccode{eslUPPER}, for packed upper triangular matrices.
+
+\subsubsection{\ccode{eslUPPER}: packed upper triangular matrices}
+
+An \ccode{eslUPPER} matrix is created with
+\ccode{esl\_dmatrix\_CreateUpper(int n)}. It is necessarily square $n
+\times n$, so only one dimension argument is passed. Most but not all
+functions in \eslmod{dmatrix} can operate on \ccode{eslUPPER} matrix
+types in addition to the usual \ccode{eslGENERAL} type.
+
+The caller must not access any cell $i>j$ in an \ccode{eslUPPER}
+matrix. Setting a cell $i>j$ will corrupt the matrix. Accessing cell
+$i>j$ will return an incorrect value, not zero.
+
+The $n (n+1) / 2$ elements of the upper triagonal matrix are packed
+into an array \ccode{mx->mx[0]}. You can access element $i,j$ by
+pointer arithmetic at \ccode{mx->mx[j + i(2*mx->m-i-1)/2]} if you
+like, but it is easier to access element $i,j$ by the usual
+\ccode{mx->mx[i][j]}. This is made possible because the row pointers
+\ccode{mx->mx[i]} in an \ccode{eslUPPER} matrix are tricksily
+initialized in an overlapping fashion so that \ccode{mx->mx[i][j]}
+does the right thing for $i \leq j$. This overlapping is also the
+reason why \ccode{mx->mx[i][j]} accesses the wrong element when $i>j$.
+
+\subsubsection{Notes on the current implementation of matrix types}
+
+Easel matrix types conflate packing and element validity together. For
+example, an upper triangular matrix may be stored either in an
+\ccode{eslGENERAL} matrix type (in which case elements $i>j$ are set
+to zero) or the packed \ccode{eslUPPER} matrix type (in which case
+elements $i>j$ aren't even stored). Using the \ccode{eslUPPER} matrix
+type is 2x more space efficient, and also, operations like
+\ccode{esl\_dmatrix\_Min()} and \ccode{esl\_dmatrix\_Max()} will
+examine all elements in an \ccode{eslGENERAL} matrix (including the
+zeros), but only the elements $i \leq j$ in a \ccode{eslUPPER} matrix.
+
+This design is provisional. We may adopt a system more closely akin to
+BLAS/LAPACK in the future, which distinguish between matrix type and
+matrix storage. For example, BLAS has matrices of form \ccode{TR} and
+\ccode{TP} for triangular and packed triangular. Easel's
+implementation seems sufficient for the moment, and should also extend
+to lower diagonal and symmetric matrices without difficulty when and
+if they become needed. In any future development, look to BLAS and
+LAPACK for guidance.
+
+\subsection{Interoperability with BLAS and LAPACK}
+
+The BLAS and LAPACK libraries provide optimized, standardized linear
+algebra routines. The storage in \ccode{ESL\_DMATRIX} is designed so
+you can call routines in these libraries. The \ccode{mx->mx[0]} array
+is a valid matrix for BLAS and LAPACK so long as you know the right
+incantations. These are summarized here:
+
+{\small
+\begin{tabular}{llllll}
+Easel type          & \ccode{CBLAS\_ORDER}   & stride  & \ccode{CBLAS\_UPLO} & type &  code \\ \hline
+\ccode{eslGENERAL}  & \ccode{CblasRowMajor}  & \ccode{mx->m} &        n/a          &     double & \ccode{GE} (GEneral) \\
+\ccode{eslUPPER}    & \ccode{CBlasRowMajor}  & \ccode{mx->m} & \ccode{CblasUpper}  &     double & \ccode{TP} (Triangular Packed) \\
+\end{tabular}
+}
+
+For example, to call the CBLAS (C implementation of BLAS) for an
+operation on an Easel matrix of type \ccode{eslGENERAL}, you look for
+a routine that starts with prefix \ccode{cblas\_dge*} (\ccode{d} for
+double, \ccode{ge} for general).  An example is
+\ccode{cblas\_dgemm()}, the matrix multiplication (\ccode{mm})
+routine, which computes $C = \alpha \mathit{op}(A) \mathit{op}(B) +
+\beta C$ for matrices $A,B,C$ and scalars $\alpha,\beta$, where
+$\mathit{op}(A)$ means $A$, $A^T$ (the transpose), or $A^H$ (the
+conjugate transpose). $\mathit{op}(A)$ is an $M \times K$ matrix,
+$\mathit{op}(B)$ is $K \times N$ matrix, and the result $C$ is $M
+\times N$. The prototype for \ccode{cblas\_dgemm} is:
+ 
+\begin{cchunk}
+    void
+    cblas_dgemm (const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
+                 const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
+                 const int K, const double alpha, const double *A, const int lda,
+                 const double *B, const int ldb, const double beta, double *C,
+                 const int ldc)
+\end{cchunk}
+
+The \ccode{Order} argument is always \ccode{CblasRowMajor} for Easel
+matrices.  The \ccode{TransA} and \ccode{TransB} arguments specify
+$\mathit{op}()$: \ccode{CblasNoTrans} means just the matrix
+itself. The \ccode{ld*} arguments are the major strides for each
+matrix: the number of elements in each row, for our row-major
+matrices. So, we could call:
+
+\begin{cchunk}
+    cblas_dgemm (CblasRowMajor, CblasNoTrans, CblasNoTrans, 
+                 A->n, B->m, A->m,
+		 1.0, A->mx[0], A->m,
+		 B->mx[0], B->m,
+		 1.0, C->mx[0], C->m);
+\end{cchunk}
+
+
diff --git a/esl_dsqdata.c b/esl_dsqdata.c
new file mode 100644
index 0000000..14b6872
--- /dev/null
+++ b/esl_dsqdata.c
@@ -0,0 +1,1700 @@
+/* esl_dsqdata : faster sequence input
+ *
+ * Implements a predigitized binary file format for biological
+ * sequences. Sequence data are packed bitwise into 32-bit packets,
+ * where each packet contains either six 5-bit residues or fifteen
+ * 2-bit residues, plus two control bits.  Input is asynchronous,
+ * using POSIX threads, with a "reader" thread doing disk reads and an
+ * "unpacker" thread preparing chunks of sequences for
+ * analysis. Sequence data and metadata are stored in separate files,
+ * which sometimes may allow further input acceleration by deferring
+ * metadata accesses until they're actually needed.
+ * 
+ * A DSQDATA database <basename> is stored in four files:
+ *    - basename       : a human-readable stub
+ *    - basename.dsqi  : index file, enabling random access & parallel chunking
+ *    - basename.dsqm  : metadata including names, accessions, descs, taxonomy
+ *    - basename.dsqs  : sequences, in a packed binary format
+ * 
+ * Contents:
+ *   1. ESL_DSQDATA: reading dsqdata format
+ *   2. Creating dsqdata format from a sequence file
+ *   3. ESL_DSQDATA_CHUNK, a chunk of input sequence data
+ *   4. Loader and unpacker, the input threads
+ *   5. Packing sequences and unpacking chunks
+ *   6. Notes and references
+ *   7. Unit tests
+ *   8. Test driver
+ *   9. Examples
+ */
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_dsqdata.h"
+#include "esl_random.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include <pthread.h>
+
+static ESL_DSQDATA_CHUNK *dsqdata_chunk_Create (ESL_DSQDATA *dd);
+static void               dsqdata_chunk_Destroy(ESL_DSQDATA_CHUNK *chu);
+
+static void *dsqdata_loader_thread  (void *p);
+static void *dsqdata_unpacker_thread(void *p);
+
+static int   dsqdata_unpack_chunk(ESL_DSQDATA_CHUNK *chu, int do_pack5);
+static int   dsqdata_unpack5(uint32_t *psq, ESL_DSQ *dsq, int *ret_L, int *ret_P);
+static int   dsqdata_unpack2(uint32_t *psq, ESL_DSQ *dsq, int *ret_L, int *ret_P);
+static int   dsqdata_pack5  (ESL_DSQ *dsq, int L, uint32_t *psq, int *ret_P);
+static int   dsqdata_pack2  (ESL_DSQ *dsq, int L, uint32_t *psq, int *ret_P);
+
+
+/* Embedded magic numbers allow us to validate the correct binary
+ * format, with version (if needed in the future), and to detect
+ * byteswapping.
+ */
+static uint32_t eslDSQDATA_MAGIC_V1     = 0xc4d3d1b1; // "dsq1" + 0x80808080             
+static uint32_t eslDSQDATA_MAGIC_V1SWAP = 0xb1d1d3c4; //  ... as above, but byteswapped. 
+
+/*****************************************************************
+ *# 1. <ESL_DSQDATA>: reading dsqdata format
+ *****************************************************************/
+
+/* Function:  esl_dsqdata_Open()
+ * Synopsis:  Open a digital sequence database for reading
+ * Incept:    SRE, Wed Jan 20 09:50:00 2016 [Amtrak 2150, NYP-BOS]
+ *
+ * Purpose:   Open digital sequence database <basename> for reading.
+ *            Configure it for a specified number of 1 or
+ *            more parallelized <nconsumers>. The consumers are one or
+ *            more threads that are processing chunks of data in
+ *            parallel.
+ *            
+ *            The file <basename> is a human-readable stub describing
+ *            the database. The bulk of the data are in three
+ *            accompanying binary files: the index file
+ *            <basename>.dsqi, the metadata file <basename>.dsqm, and
+ *            the sequence file <basename>.dsqs.
+ *            
+ *            <byp_abc> provides a way to either tell <dsqdata> to
+ *            expect a specific alphabet in the <basename> database
+ *            (and return a normal failure on a mismatch), or, when
+ *            the alphabet remains unknown, to figure out the alphabet
+ *            in <basename> is and allocate and return a new alphabet.
+ *            <byp_abc> uses a partial Easel "bypass" idiom for this:
+ *            if <*byp_abc> is NULL, we allocate and return a new
+ *            alphabet; if <*byp_abc> is a ptr to an existing
+ *            alphabet, we use it for validation. That is,
+ *                
+ *            \begin{cchunk}
+ *                abc = NULL;
+ *                esl_dsqdata_Open(&abc, basename...)
+ *                // <abc> is now the alphabet of <basename>; 
+ *                // you're responsible for Destroy'ing it
+ *            \end{cchunk}
+ *                
+ *            or:
+ *            \begin{cchunk}
+ *                abc = esl_alphabet_Create(eslAMINO);
+ *                status = esl_dsqdata_Open(&abc, basename);
+ *                // if status == eslEINCOMPAT, alphabet in basename 
+ *                // doesn't match caller's expectation
+ *            \end{cchunk}
+ *
+ * Args:      byp_abc    : optional alphabet hint; pass &abc or NULL.
+ *            basename   : data are in files <basename> and <basename.dsq[ism]>
+ *            nconsumers : number of consumer threads caller is going to Read() with
+ *            ret_dd     : RETURN : the new ESL_DSQDATA object.
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ *            <eslENOTFOUND> if one or more of the expected datafiles
+ *            aren't there or can't be opened.
+ *
+ *            <eslEFORMAT> if something looks wrong in parsing file
+ *            formats.  Includes problems in headers, and also the
+ *            case where caller provides a digital alphabet in
+ *            <*byp_abc> and it doesn't match the database's alphabet.
+ *
+ *            On any normal error, <*ret_dd> is still returned, but in
+ *            an error state, and <dd->errbuf> is a user-directed
+ *            error message that the caller can relay to the user. Other
+ *            than the <errbuf>, the rest of the contents are undefined.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslESYS> on system call failure.
+ *            <eslEUNIMPLEMENTED> if data are byteswapped
+ *               TODO: handle byteswapping
+ * 
+ *            On any thrown exception, <*ret_dd> is returned NULL.
+ */
+int
+esl_dsqdata_Open(ESL_ALPHABET **byp_abc, char *basename, int nconsumers, ESL_DSQDATA **ret_dd)
+{
+  ESL_DSQDATA *dd        = NULL;
+  int          bufsize   = 4096;
+  uint32_t     magic     = 0;
+  uint32_t     tag       = 0;
+  uint32_t     alphatype = eslUNKNOWN;
+  char        *p;                       // used for strtok() parsing of fields on a line
+  char         buf[4096];
+  int          status;
+  
+  ESL_DASSERT1(( nconsumers > 0 ));
+  
+  ESL_ALLOC(dd, sizeof(ESL_DSQDATA));
+  dd->stubfp          = NULL;
+  dd->ifp             = NULL;
+  dd->sfp             = NULL;
+  dd->mfp             = NULL;
+  dd->abc_r           = *byp_abc;        // This may be NULL; if so, we create it later.
+  dd->magic           = 0;
+  dd->uniquetag       = 0;
+  dd->flags           = 0;
+  dd->max_namelen     = 0;
+  dd->max_acclen      = 0;
+  dd->max_desclen     = 0;
+  dd->max_seqlen      = 0;
+  dd->nseq            = 0;
+  dd->nres            = 0;
+
+  dd->chunk_maxseq    = eslDSQDATA_CHUNK_MAXSEQ;    // someday we may want to allow tuning these
+  dd->chunk_maxpacket = eslDSQDATA_CHUNK_MAXPACKET;
+  dd->do_byteswap     = FALSE;
+  dd->pack5           = FALSE;  
+
+  dd->nconsumers      = nconsumers;
+  dd->loader_outbox   = NULL;
+  dd->unpacker_outbox = NULL;
+  dd->recycling       = NULL;
+  dd->errbuf[0]       = '\0';
+  dd->at_eof          = FALSE;
+  dd->lt_c = dd->lom_c = dd->lof_c = dd->loe_c = FALSE;  
+  dd->ut_c = dd->uom_c = dd->uof_c = dd->uoe_c = FALSE;
+  dd->rm_c = dd->r_c   = FALSE;
+  dd->errbuf[0] = '\0';
+
+  /* Open the four files.
+   */
+  ESL_ALLOC( dd->basename, sizeof(char) * (strlen(basename) + 6)); // +5 for .dsqx; +1 for \0
+  if ( sprintf(dd->basename, "%s.dsqi", basename) <= 0)   ESL_XEXCEPTION_SYS(eslESYS, "sprintf() failure");
+  if (( dd->ifp = fopen(dd->basename, "rb"))   == NULL)   ESL_XFAIL(eslENOTFOUND, dd->errbuf, "Failed to find or open index file %s\n", dd->basename);
+
+  if ( sprintf(dd->basename, "%s.dsqm", basename) <= 0)   ESL_XEXCEPTION_SYS(eslESYS, "sprintf() failure");
+  if (( dd->mfp = fopen(dd->basename, "rb"))   == NULL)   ESL_XFAIL(eslENOTFOUND, dd->errbuf, "Failed to find or open metadata file %s\n", dd->basename);
+
+  if ( sprintf(dd->basename, "%s.dsqs", basename) <= 0)   ESL_XEXCEPTION_SYS(eslESYS, "sprintf() failure");
+  if (( dd->sfp = fopen(dd->basename, "rb"))   == NULL)   ESL_XFAIL(eslENOTFOUND, dd->errbuf, "Failed to find or open sequence file %s\n", dd->basename);
+
+  strcpy(dd->basename, basename);
+  if (( dd->stubfp = fopen(dd->basename, "r")) == NULL)   ESL_XFAIL(eslENOTFOUND, dd->errbuf, "Failed to find or open stub file %s\n", dd->basename);
+
+  /* The stub file is unparsed, intended to be human readable, with one exception:
+   * The first line contains the unique tag that we use to validate linkage of the 4 files.
+   * The format of that first line is:
+   *     Easel dsqdata v123 x0000000000 
+   */
+  if ( fgets(buf, bufsize, dd->stubfp) == NULL)           ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file is empty - no tag line found");
+  if (( p = strtok(buf,  " \t\n\r"))   == NULL)           ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file has bad format: tag line has no data");
+  if (  strcmp(p, "Easel") != 0)                          ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file has bad format in tag line");
+  if (( p = strtok(NULL, " \t\n\r"))   == NULL)           ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file has bad format in tag line");
+  if (  strcmp(p, "dsqdata") != 0)                        ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file has bad format in tag line");
+  if (( p = strtok(NULL, " \t\n\r"))   == NULL)           ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file has bad format in tag line");
+  if ( *p != 'v')                                         ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file has bad format: no v on version");                        
+  if ( ! esl_str_IsInteger(p+1))                          ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file had bad format: no version number");
+  // version number is currently unused: there's only 1
+  if (( p = strtok(NULL, " \t\n\r"))   == NULL)           ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file has bad format in tag line");
+  if ( *p != 'x')                                         ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file has bad format: no x on tag");                        
+  if ( ! esl_str_IsInteger(p+1))                          ESL_XFAIL(eslEFORMAT, dd->errbuf, "stub file had bad format: no integer tag");
+  dd->uniquetag = strtoul(p+1, NULL, 10);
+    
+  /* Index file has a header of 7 uint32's, 3 uint64's */
+  if ( fread(&(dd->magic),       sizeof(uint32_t), 1, dd->ifp) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file has no header - is empty?");
+  if ( fread(&tag,               sizeof(uint32_t), 1, dd->ifp) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file header truncated, no tag");
+  if ( fread(&alphatype,         sizeof(uint32_t), 1, dd->ifp) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file header truncated, no alphatype");
+  if ( fread(&(dd->flags),       sizeof(uint32_t), 1, dd->ifp) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file header truncated, no flags");
+  if ( fread(&(dd->max_namelen), sizeof(uint32_t), 1, dd->ifp) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file header truncated, no max name len");
+  if ( fread(&(dd->max_acclen),  sizeof(uint32_t), 1, dd->ifp) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file header truncated, no max accession len");
+  if ( fread(&(dd->max_desclen), sizeof(uint32_t), 1, dd->ifp) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file header truncated, no max description len");
+
+  if ( fread(&(dd->max_seqlen),  sizeof(uint64_t), 1, dd->ifp) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file header truncated, no max seq len");
+  if ( fread(&(dd->nseq),        sizeof(uint64_t), 1, dd->ifp) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file header truncated, no nseq");
+  if ( fread(&(dd->nres),        sizeof(uint64_t), 1, dd->ifp) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file header truncated, no nres");
+
+  /* Check the magic and the tag */
+  if      (tag != dd->uniquetag)                 ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file has bad tag, doesn't go with stub file");
+  // Eventually we would set dd->do_byteswap = TRUE; below.
+  if      (dd->magic == eslDSQDATA_MAGIC_V1SWAP) ESL_XEXCEPTION(eslEUNIMPLEMENTED, "dsqdata cannot yet read data in different byte orders");
+  else if (dd->magic != eslDSQDATA_MAGIC_V1)     ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file has bad magic");
+
+  /* Either validate, or create the alphabet */
+  if  (dd->abc_r)
+    {
+      if (alphatype != dd->abc_r->type) 
+	ESL_XFAIL(eslEFORMAT, dd->errbuf, "data files use %s alphabet; expected %s alphabet", 
+		  esl_abc_DecodeType(alphatype), 
+		  esl_abc_DecodeType(dd->abc_r->type));
+    }
+  else
+    {
+      if ( esl_abc_ValidateType(alphatype)             != eslOK) ESL_XFAIL(eslEFORMAT, dd->errbuf, "index file has invalid alphabet type %d", alphatype);
+      if (( dd->abc_r = esl_alphabet_Create(alphatype)) == NULL) ESL_XEXCEPTION(eslEMEM, "alphabet creation failed");
+    }
+
+  /* If it's protein, flip the switch to expect all 5-bit packing */
+  if (dd->abc_r->type == eslAMINO) dd->pack5 = TRUE;
+
+  /* Metadata file has a header of 2 uint32's, magic and uniquetag */
+  if (( fread(&magic, sizeof(uint32_t), 1, dd->mfp)) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "metadata file has no header - is empty?");
+  if (( fread(&tag,   sizeof(uint32_t), 1, dd->mfp)) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "metadata file header truncated - no tag?");
+  if ( magic != dd->magic)                                 ESL_XFAIL(eslEFORMAT, dd->errbuf, "metadata file has bad magic");
+  if ( tag   != dd->uniquetag)                             ESL_XFAIL(eslEFORMAT, dd->errbuf, "metadata file has bad tag, doesn't match stub");
+
+  /* Sequence file also has a header of 2 uint32's, magic and uniquetag */
+  if (( fread(&magic, sizeof(uint32_t), 1, dd->sfp)) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "sequence file has no header - is empty?");
+  if (( fread(&tag,   sizeof(uint32_t), 1, dd->sfp)) != 1) ESL_XFAIL(eslEFORMAT, dd->errbuf, "sequence file header truncated - no tag?");
+  if ( magic != dd->magic)                                 ESL_XFAIL(eslEFORMAT, dd->errbuf, "sequence file has bad magic");
+  if ( tag   != dd->uniquetag)                             ESL_XFAIL(eslEFORMAT, dd->errbuf, "sequence file has bad tag, doesn't match stub");
+
+  /* Create the loader and unpacker threads.
+   */
+  if ( pthread_mutex_init(&dd->loader_outbox_mutex,      NULL) != 0) ESL_XEXCEPTION(eslESYS, "pthread_mutex_init() failed");    dd->lom_c = TRUE;
+  if ( pthread_mutex_init(&dd->unpacker_outbox_mutex,    NULL) != 0) ESL_XEXCEPTION(eslESYS, "pthread_mutex_init() failed");    dd->uom_c = TRUE;
+  if ( pthread_mutex_init(&dd->recycling_mutex,          NULL) != 0) ESL_XEXCEPTION(eslESYS, "pthread_mutex_init() failed");    dd->rm_c  = TRUE;
+
+  if ( pthread_cond_init(&dd->loader_outbox_full_cv,     NULL) != 0) ESL_XEXCEPTION(eslESYS, "pthread_cond_init() failed");     dd->lof_c = TRUE;
+  if ( pthread_cond_init(&dd->loader_outbox_empty_cv,    NULL) != 0) ESL_XEXCEPTION(eslESYS, "pthread_cond_init() failed");     dd->loe_c = TRUE;
+  if ( pthread_cond_init(&dd->unpacker_outbox_full_cv,   NULL) != 0) ESL_XEXCEPTION(eslESYS, "pthread_cond_init() failed");     dd->uof_c = TRUE;
+  if ( pthread_cond_init(&dd->unpacker_outbox_empty_cv,  NULL) != 0) ESL_XEXCEPTION(eslESYS, "pthread_cond_init() failed");     dd->uoe_c = TRUE;
+  if ( pthread_cond_init(&dd->recycling_cv,              NULL) != 0) ESL_XEXCEPTION(eslESYS, "pthread_cond_init() failed");     dd->r_c   = TRUE;
+  
+  if ( pthread_create(&dd->unpacker_t, NULL, dsqdata_unpacker_thread, dd) != 0) ESL_XEXCEPTION(eslESYS, "pthread_create() failed");  dd->ut_c = TRUE;
+  if ( pthread_create(&dd->loader_t,   NULL, dsqdata_loader_thread,   dd) != 0) ESL_XEXCEPTION(eslESYS, "pthread_create() failed");  dd->lt_c = TRUE;
+
+  *ret_dd  = dd;
+  *byp_abc = dd->abc_r;     // If caller provided <*byp_abc> this is a no-op, because we set abc_r = *byp_abc.
+  return eslOK;             //  .. otherwise we're passing the created <abc> back to caller, caller's
+                            //     responsibility, we just keep the reference to it.
+ ERROR:
+  if (status == eslENOTFOUND || status == eslEFORMAT || status == eslEINCOMPAT)
+    {    /* on normal errors, we return <dd> with its <errbuf>, don't change *byp_abc */
+      *ret_dd  = dd;
+      if (*byp_abc == NULL && dd->abc_r) esl_alphabet_Destroy(dd->abc_r);
+      return status;
+    }
+  else
+    {   /* on exceptions, we free <dd>, return it NULL, don't change *byp_abc */
+      esl_dsqdata_Close(dd);
+      *ret_dd = NULL;
+      if (*byp_abc == NULL && dd->abc_r) esl_alphabet_Destroy(dd->abc_r);
+      return status;
+    }
+}
+
+
+/* Function:  esl_dsqdata_Read()
+ * Synopsis:  Read next chunk of sequence data.
+ * Incept:    SRE, Thu Jan 21 11:21:38 2016 [Harvard]
+ *
+ * Purpose:   Read the next chunk from <dd>, return a pointer to it in
+ *            <*ret_chu>, and return <eslOK>. When data are exhausted,
+ *            return <eslEOF>, and <*ret_chu> is <NULL>. 
+ *
+ *            Threadsafe. All thread operations in the dsqdata reader
+ *            are handled internally. Caller does not have to worry
+ *            about wrapping this in a mutex. Multiple caller threads
+ *            can call <esl_dsqdata_Read()>.
+ *
+ *            All chunk allocation and deallocation is handled
+ *            internally. After using a chunk, caller gives it back to
+ *            the reader using <esl_dsqdata_Recycle()>.
+ *
+ * Args:      dd      : open dsqdata object to read from
+ *            ret_chu : RETURN : next chunk of seq data
+ *
+ * Returns:   <eslOK> on success. <*ret_chu> is a chunk of seq data.
+ *            Caller must call <esl_dsqdata_Recycle()> on each chunk
+ *            that it Read()'s.
+ *             
+ *            <eslEOF> if we've reached the end of the input file;
+ *            <*ret_chu> is NULL.
+ *
+ * Throws:    <eslESYS> if a pthread call fails. 
+ *            Caller should treat this as disastrous. Without correctly
+ *            working pthread calls, we cannot read, and we may not be able
+ *            to correctly clean up and close the reader. Caller should
+ *            treat <dd> as toxic, clean up whatever else it may need to,
+ *            and exit.
+ */
+int
+esl_dsqdata_Read(ESL_DSQDATA *dd, ESL_DSQDATA_CHUNK **ret_chu)
+{
+  ESL_DSQDATA_CHUNK *chu = NULL;
+
+  /* The loader and unpacker have already done the work.  All that
+   * _Read() needs to do is take a finished chunk from the unpacker's
+   * outbox. There's three possibilities here:
+   *   
+   * 1. A chunk is waiting in the outbox (unpacker_outbox != NULL, chu->N > 0).
+   *    Pick it up; signal back to the unpacker that we've done so.
+   *
+   * 2. An empty chunk is waiting in the outbox (unpacker_outbox !=
+   *    NULL, chu->N == 0). This is the EOF signal from the unpacker.
+   *    There's only one of them, so only one reader will see it.
+   *    This reader raises the at_eof flag for all other readers to
+   *    see. Now instead of signalling the *unpacker* (which already
+   *    knows it is EOF), we must signal the other *readers*, who may
+   *    be sitting on a conditional wait for the outbox to be
+   *    non-NULL, which it will never be again: so we signal "outbox
+   *    full", which really means "outbox full or at EOF".  Then the
+   *    reader recycles the empty chunk itself, and caller just gets a
+   *    NULL chunk and a eslEOF return status.
+   *
+   * 3. The at_eof flag is up. Again we signal "outbox full or at EOF"
+   *    to the remaining readers to wake them up, then return eslEOF.
+   *    
+   * The reason for the above verbosity is that it's super easy to
+   * get a low-probability race condition here, and stall the threads.
+   */
+  if ( pthread_mutex_lock(&dd->unpacker_outbox_mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread call failed");
+  while (! dd->at_eof && dd->unpacker_outbox == NULL)  {                                                  
+    if ( pthread_cond_wait(&dd->unpacker_outbox_full_cv, &dd->unpacker_outbox_mutex) != 0) 
+      ESL_EXCEPTION(eslESYS, "pthread call failed");
+  }
+
+  chu = dd->unpacker_outbox; 
+  dd->unpacker_outbox = NULL;
+
+  /* Case 1: A data chunk. */
+  if (chu && chu->N)
+    {
+      if ( pthread_mutex_unlock(&dd->unpacker_outbox_mutex)    != 0) ESL_EXCEPTION(eslESYS, "pthread call failed");
+      if ( pthread_cond_signal (&dd->unpacker_outbox_empty_cv) != 0) ESL_EXCEPTION(eslESYS, "pthread call failed");
+      *ret_chu = chu;
+      return eslOK;      
+    }
+  /* Case 2. The EOF chunk. */
+  else if (chu)
+    {
+      dd->at_eof = TRUE;      
+      if ( pthread_mutex_unlock(&dd->unpacker_outbox_mutex)   != 0) ESL_EXCEPTION(eslESYS, "pthread call failed");
+      if ( pthread_cond_signal (&dd->unpacker_outbox_full_cv) != 0) ESL_EXCEPTION(eslESYS, "pthread call failed");  
+      esl_dsqdata_Recycle(dd, chu);  
+      *ret_chu = NULL;
+      return eslEOF;
+    }
+  /* Case 3: Another reader already set eof */
+  else
+    {
+      if ( pthread_mutex_unlock(&dd->unpacker_outbox_mutex)   != 0) ESL_EXCEPTION(eslESYS, "pthread call failed");
+      if ( pthread_cond_signal (&dd->unpacker_outbox_full_cv) != 0) ESL_EXCEPTION(eslESYS, "pthread call failed");  
+      *ret_chu = NULL;
+      return eslEOF;
+    }
+  /*NOTREACHED*/
+}
+
+
+/* Function:  esl_dsqdata_Recycle()
+ * Synopsis:  Give a chunk back to the reader.
+ * Incept:    SRE, Thu Feb 11 19:24:33 2016
+ *
+ * Purpose:   Recycle chunk <chu> back to the reader <dd>.  The reader
+ *            is responsible for all allocation and deallocation of
+ *            chunks. The reader will either reuse the chunk's memory
+ *            if more chunks remain to be read, or it will free it.
+ *            
+ *            If <chu> is <NULL>, do nothing. This case arises when
+ *            the reader is at EOF.
+ *
+ * Args:      dd  : the dsqdata reader
+ *            chu : chunk to recycle
+ *
+ * Returns:   <eslOK> on success. 
+ *
+ * Throws:    <eslESYS> on a pthread call failure. Caller should regard
+ *            such an error as disastrous; if pthread calls are
+ *            failing, you cannot depend on the reader to be working
+ *            at all, and you should treat <dd> as toxic. Do whatever
+ *            desperate things you need to do and exit.
+ */
+int
+esl_dsqdata_Recycle(ESL_DSQDATA *dd, ESL_DSQDATA_CHUNK *chu)
+{
+  if (chu)
+    {
+      if ( pthread_mutex_lock(&dd->recycling_mutex)   != 0) ESL_EXCEPTION(eslESYS, "pthread mutex lock failed");
+      chu->nxt = dd->recycling;      // Push chunk onto head of recycling stack
+      dd->recycling = chu;
+      if ( pthread_mutex_unlock(&dd->recycling_mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread mutex unlock failed");
+      if ( pthread_cond_signal(&dd->recycling_cv)     != 0) ESL_EXCEPTION(eslESYS, "pthread cond signal failed");
+      // That signal told the loader that there's a chunk it can recycle.
+    }
+  return eslOK;
+}
+
+
+
+/* Function:  esl_dsqdata_Close()
+ * Synopsis:  Close a dsqdata reader.
+ * Incept:    SRE, Thu Feb 11 19:32:54 2016
+ *
+ * Purpose:   Close a dsqdata reader.
+ *
+ * Returns:   <eslOK> on success.
+
+ * Throws:    <eslESYS> on a system call failure, including pthread
+ *            calls and fclose(). Caller should regard such a failure
+ *            as disastrous: treat <dd> as toxic and exit as soon as 
+ *            possible without making any other system calls, if possible.
+ */
+int
+esl_dsqdata_Close(ESL_DSQDATA *dd)
+{
+  if (dd)
+    {
+      if (dd->lt_c)   { if ( pthread_join(dd->loader_t,   NULL)                  != 0)  ESL_EXCEPTION(eslESYS, "pthread join failed");          }
+      if (dd->ut_c)   { if ( pthread_join(dd->unpacker_t, NULL)                  != 0)  ESL_EXCEPTION(eslESYS, "pthread join failed");          }
+      if (dd->lof_c)  { if ( pthread_cond_destroy(&dd->loader_outbox_full_cv)    != 0)  ESL_EXCEPTION(eslESYS, "pthread cond destroy failed");  }
+      if (dd->loe_c)  { if ( pthread_cond_destroy(&dd->loader_outbox_empty_cv)   != 0)  ESL_EXCEPTION(eslESYS, "pthread cond destroy failed");  }
+      if (dd->uof_c)  { if ( pthread_cond_destroy(&dd->unpacker_outbox_full_cv)  != 0)  ESL_EXCEPTION(eslESYS, "pthread cond destroy failed");  }
+      if (dd->uoe_c)  { if ( pthread_cond_destroy(&dd->unpacker_outbox_empty_cv) != 0)  ESL_EXCEPTION(eslESYS, "pthread cond destroy failed");  }
+      if (dd->r_c)    { if ( pthread_cond_destroy(&dd->recycling_cv)             != 0)  ESL_EXCEPTION(eslESYS, "pthread cond destroy failed");  }
+      if (dd->lom_c)  { if ( pthread_mutex_destroy(&dd->loader_outbox_mutex)     != 0)  ESL_EXCEPTION(eslESYS, "pthread mutex destroy failed"); }
+      if (dd->uom_c)  { if ( pthread_mutex_destroy(&dd->unpacker_outbox_mutex)   != 0)  ESL_EXCEPTION(eslESYS, "pthread mutex destroy failed"); }
+      if (dd->rm_c)   { if ( pthread_mutex_destroy(&dd->recycling_mutex)         != 0)  ESL_EXCEPTION(eslESYS, "pthread mutex destroy failed"); }
+
+      if (dd->ifp)    { if ( fclose(dd->ifp)    != 0) ESL_EXCEPTION(eslESYS, "fclose failed"); }
+      if (dd->sfp)    { if ( fclose(dd->sfp)    != 0) ESL_EXCEPTION(eslESYS, "fclose failed"); }
+      if (dd->mfp)    { if ( fclose(dd->mfp)    != 0) ESL_EXCEPTION(eslESYS, "fclose failed"); }
+      if (dd->stubfp) { if ( fclose(dd->stubfp) != 0) ESL_EXCEPTION(eslESYS, "fclose failed"); }
+
+      if (dd->basename) free(dd->basename);
+
+      /* Loader thread is responsible for freeing all chunks it created, even on error. */
+      ESL_DASSERT1(( dd->loader_outbox   == NULL ));
+      ESL_DASSERT1(( dd->unpacker_outbox == NULL ));
+      ESL_DASSERT1(( dd->recycling       == NULL ));
+
+      free(dd);
+    }
+  return eslOK;
+}
+
+
+/*****************************************************************
+ *# 2. Creating dsqdata format from a sequence file
+ *****************************************************************/
+
+/* Function:  esl_dsqdata_Write()
+ * Synopsis:  Create a dsqdata database
+ * Incept:    SRE, Sat Feb 13 07:33:30 2016 [AGBT 2016, Orlando]
+ *
+ * Purpose:   Caller has just opened <sqfp>, in digital mode.
+ *            Create a dsqdata database <basename> from the sequence
+ *            data in <sqfp>.
+ *
+ *            <sqfp> must be protein, DNA, or RNA sequence data.  It
+ *            must be rewindable (i.e. a file), because we have to
+ *            read it twice. It must be newly opened (i.e. positioned
+ *            at the start).
+ *
+ * Args:      sqfp     - newly opened sequence data file
+ *            basename - base name of dsqdata files to create
+ *            errbuf   - user-directed error message on normal errors
+ *
+ * Returns:   <eslOK> on success.
+ *           
+ *            <eslEWRITE> if an output file can't be opened. <errbuf>
+ *            contains user-directed error message.
+ *
+ *            <eslEFORMAT> if a parse error is encountered while
+ *            reading <sqfp>.
+ * 
+ *
+ * Throws:    <eslESYS>   A system call failed, such as fwrite().
+ *            <eslEINVAL> Sequence handle <sqfp> isn't digital and rewindable.
+ *            <eslEMEM>   Allocation failure
+ *            <eslEUNIMPLEMENTED> Sequence is too long to be encoded.
+ *                               (TODO: chromosome-scale DNA sequences)
+ */
+int
+esl_dsqdata_Write(ESL_SQFILE *sqfp, char *basename, char *errbuf)
+{
+  ESL_RANDOMNESS *rng         = NULL;
+  ESL_SQ         *sq          = NULL;
+  FILE           *stubfp      = NULL;
+  FILE           *ifp         = NULL;
+  FILE           *mfp         = NULL;
+  FILE           *sfp         = NULL;
+  char           *outfile     = NULL;
+  uint32_t        magic       = eslDSQDATA_MAGIC_V1;
+  uint32_t        uniquetag;
+  uint32_t        alphatype;
+  uint32_t        flags       = 0;
+  uint32_t        max_namelen = 0;
+  uint32_t        max_acclen  = 0;
+  uint32_t        max_desclen = 0;
+  uint64_t        max_seqlen  = 0;
+  uint64_t        nseq        = 0;
+  uint64_t        nres        = 0;
+  int             do_pack5    = FALSE;
+  uint32_t       *psq;
+  ESL_DSQDATA_RECORD idx;                    // one index record to write
+  int             plen;
+  int64_t         spos        = 0;
+  int64_t         mpos        = 0;
+  int             n;
+  int             status;
+
+  if (! esl_sqfile_IsRewindable(sqfp))  ESL_EXCEPTION(eslEINVAL, "sqfp must be rewindable (e.g. an open file)");
+  if (! sqfp->abc)                      ESL_EXCEPTION(eslEINVAL, "sqfp must be digital");
+  // Could also check that it's positioned at the start.
+  if ( (sq = esl_sq_CreateDigital(sqfp->abc)) == NULL) { status = eslEMEM; goto ERROR; }
+
+  /* First pass over the sequence file, to get statistics.
+   * Read it now, before opening any files, in case we find any parse errors.
+   */
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+    {
+      if (sq->n >= 6 * eslDSQDATA_CHUNK_MAXPACKET)  // guaranteed limit
+	ESL_EXCEPTION(eslEUNIMPLEMENTED, "dsqdata cannot currently deal with large sequences");
+
+      nseq++;
+      nres += sq->n;
+      if (sq->n > max_seqlen) max_seqlen = sq->n;
+      n = strlen(sq->name); if (n > max_namelen) max_namelen = n;
+      n = strlen(sq->acc);  if (n > max_acclen)  max_acclen  = n;
+      n = strlen(sq->desc); if (n > max_desclen) max_desclen = n;
+      esl_sq_Reuse(sq);
+    }
+  if      (status == eslEFORMAT) ESL_XFAIL(eslEFORMAT, errbuf, sqfp->get_error(sqfp));
+  else if (status != eslEOF)     return status;
+
+  if ((status = esl_sqfile_Position(sqfp, 0)) != eslOK) return status;
+
+
+  if ((    rng = esl_randomness_Create(0) )        == NULL)  { status = eslEMEM; goto ERROR; }
+  uniquetag = esl_random_uint32(rng);
+  alphatype = sqfp->abc->type;
+
+  if      (alphatype == eslAMINO)                      do_pack5 = TRUE;
+  else if (alphatype != eslDNA && alphatype != eslRNA) ESL_EXCEPTION(eslEINVAL, "alphabet must be protein or nucleic");
+
+
+  if (( status = esl_sprintf(&outfile, "%s.dsqi", basename)) != eslOK) goto ERROR;
+  if ((    ifp = fopen(outfile, "wb"))             == NULL)  ESL_XFAIL(eslEWRITE, errbuf, "failed to open dsqdata index file %s for writing", outfile);
+  sprintf(outfile, "%s.dsqm", basename);
+  if ((    mfp = fopen(outfile, "wb"))             == NULL)  ESL_XFAIL(eslEWRITE, errbuf, "failed to open dsqdata metadata file %s for writing", outfile);
+  sprintf(outfile, "%s.dsqs", basename);
+  if ((    sfp = fopen(outfile, "wb"))             == NULL)  ESL_XFAIL(eslEWRITE, errbuf, "failed to open dsqdata sequence file %s for writing", outfile);
+  if (( stubfp = fopen(basename, "w"))             == NULL)  ESL_XFAIL(eslEWRITE, errbuf, "failed to open dsqdata stub file %s for writing", basename);
+
+
+  
+
+  /* Header: index file */
+  if (fwrite(&magic,       sizeof(uint32_t), 1, ifp) != 1 ||
+      fwrite(&uniquetag,   sizeof(uint32_t), 1, ifp) != 1 ||
+      fwrite(&alphatype,   sizeof(uint32_t), 1, ifp) != 1 ||
+      fwrite(&flags,       sizeof(uint32_t), 1, ifp) != 1 ||
+      fwrite(&max_namelen, sizeof(uint32_t), 1, ifp) != 1 ||
+      fwrite(&max_acclen,  sizeof(uint32_t), 1, ifp) != 1 ||
+      fwrite(&max_desclen, sizeof(uint32_t), 1, ifp) != 1 ||
+      fwrite(&max_seqlen,  sizeof(uint64_t), 1, ifp) != 1 ||
+      fwrite(&nseq,        sizeof(uint64_t), 1, ifp) != 1 ||
+      fwrite(&nres,        sizeof(uint64_t), 1, ifp) != 1) 
+    ESL_XEXCEPTION_SYS(eslESYS, "fwrite() failed, index file header");
+
+  /* Header: metadata file */
+  if (fwrite(&magic,       sizeof(uint32_t), 1, mfp) != 1 ||
+      fwrite(&uniquetag,   sizeof(uint32_t), 1, mfp) != 1)
+    ESL_XEXCEPTION_SYS(eslESYS, "fwrite() failed, metadata file header");
+
+  /* Header: sequence file */
+  if (fwrite(&magic,       sizeof(uint32_t), 1, sfp) != 1 ||
+      fwrite(&uniquetag,   sizeof(uint32_t), 1, sfp) != 1)
+    ESL_XEXCEPTION_SYS(eslESYS, "fwrite() failed, metadata file header");
+
+  /* Second pass: index, metadata, and sequence files */
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+    {
+      /* Packed sequence */
+      psq = (uint32_t *) sq->dsq;        // pack-in-place
+      ESL_DASSERT1(( sq->salloc >= 4 )); // required min space for pack-in-place
+      if (do_pack5) dsqdata_pack5(sq->dsq, sq->n, psq, &plen);
+      else          dsqdata_pack2(sq->dsq, sq->n, psq, &plen);
+      if ( fwrite(psq, sizeof(uint32_t), plen, sfp) != plen) 
+	ESL_XEXCEPTION(eslESYS, "fwrite() failed, packed seq");
+      spos += plen;
+
+      /* Metadata */
+      n = strlen(sq->name); 
+      if ( fwrite(sq->name, sizeof(char), n+1, mfp) != n+1) 
+	ESL_XEXCEPTION(eslESYS, "fwrite () failed, metadata, name");
+      mpos += n+1;
+
+      n = strlen(sq->acc);  
+      if ( fwrite(sq->acc,  sizeof(char), n+1, mfp) != n+1) 
+	ESL_XEXCEPTION(eslESYS, "fwrite () failed, metadata, accession");
+      mpos += n+1;
+
+      n = strlen(sq->desc); 
+      if ( fwrite(sq->desc, sizeof(char), n+1, mfp) != n+1)
+	ESL_XEXCEPTION(eslESYS, "fwrite () failed, metadata, description");
+      mpos += n+1;
+
+      if ( fwrite( &(sq->tax_id), sizeof(int32_t), 1, mfp) != 1)                  
+	ESL_XEXCEPTION(eslESYS, "fwrite () failed, metadata, taxonomy id");
+      mpos += sizeof(int32_t); 
+      
+      /* Index file */
+      idx.psq_end      = spos-1;  // could be -1, on 1st seq, if 1st seq L=0.
+      idx.metadata_end = mpos-1; 
+      if ( fwrite(&idx, sizeof(ESL_DSQDATA_RECORD), 1, ifp) != 1) 
+	ESL_XEXCEPTION(eslESYS, "fwrite () failed, index file");
+
+      esl_sq_Reuse(sq);
+    }
+
+  /* Stub file */
+  fprintf(stubfp, "Easel dsqdata v1 x%" PRIu32 "\n", uniquetag);
+  fprintf(stubfp, "\n");
+  fprintf(stubfp, "Original file:   %s\n",          sqfp->filename);
+  fprintf(stubfp, "Original format: %s\n",          esl_sqio_DecodeFormat(sqfp->format));
+  fprintf(stubfp, "Type:            %s\n",          esl_abc_DecodeType(sqfp->abc->type));
+  fprintf(stubfp, "Sequences:       %" PRIu64 "\n", nseq);
+  fprintf(stubfp, "Residues:        %" PRIu64 "\n", nres);
+  
+  esl_sq_Destroy(sq);
+  esl_randomness_Destroy(rng);
+  free(outfile);
+  fclose(stubfp);
+  fclose(ifp);
+  fclose(mfp);
+  fclose(sfp);
+  return eslOK;
+
+ ERROR:
+  if (sq)      esl_sq_Destroy(sq);
+  if (rng)     esl_randomness_Destroy(rng);
+  if (outfile) free(outfile);
+  if (stubfp)  fclose(stubfp);
+  if (ifp)     fclose(ifp);
+  if (mfp)     fclose(mfp);
+  if (sfp)     fclose(sfp);
+  return status;
+}
+
+
+
+/*****************************************************************
+ * 3. ESL_DSQDATA_CHUNK: a chunk of input sequence data
+ *****************************************************************/
+
+static ESL_DSQDATA_CHUNK *
+dsqdata_chunk_Create(ESL_DSQDATA *dd)
+{
+  ESL_DSQDATA_CHUNK *chu = NULL;
+  int                U;               // max size of unpacked seq data, in bytes (smem allocation)
+  int                status;
+
+  ESL_ALLOC(chu, sizeof(ESL_DSQDATA_CHUNK));
+  chu->i0       = 0;
+  chu->N        = 0;
+  chu->pn       = 0;
+  chu->dsq      = NULL;
+  chu->name     = NULL;
+  chu->acc      = NULL;
+  chu->desc     = NULL;
+  chu->taxid    = NULL;
+  chu->L        = NULL;
+  chu->metadata = NULL;
+  chu->smem     = NULL;
+  chu->nxt      = NULL;
+
+  /* dsq, name, acc, desc are arrays of pointers into smem, metadata.
+   * taxid is cast to int, from the metadata.
+   * L is figured out by the unpacker.
+   * All of these are set by the unpacker.
+   */
+  ESL_ALLOC(chu->dsq,   dd->chunk_maxseq * sizeof(ESL_DSQ *));   
+  ESL_ALLOC(chu->name,  dd->chunk_maxseq * sizeof(char *));
+  ESL_ALLOC(chu->acc,   dd->chunk_maxseq * sizeof(char *));
+  ESL_ALLOC(chu->desc,  dd->chunk_maxseq * sizeof(char *));
+  ESL_ALLOC(chu->taxid, dd->chunk_maxseq * sizeof(int));
+  ESL_ALLOC(chu->L,     dd->chunk_maxseq * sizeof(int64_t));
+
+  /* On the <smem> allocation, and the <dsq> and <psq> pointers into it:
+   *
+   * <maxpacket> (in uint32's) sets the maximum single fread() size:
+   * one load of a new chunk of packed sequence, up to maxpacket*4
+   * bytes. <smem> needs to be able to hold both that and the fully
+   * unpacked sequence, because we unpack in place.  Each packet
+   * unpacks to at most 6 or 15 residues (5-bit or 2-bit packing) We
+   * don't pack sentinels, so the maximum unpacked size includes
+   * <maxseq>+1 sentinels... because we concat the digital seqs so
+   * that the trailing sentinel of seq i is the leading sentinel of
+   * seq i+1.
+   *
+   * The packed seq (max of P bytes) loads overlap with the unpacked
+   * data (max of U bytes):
+   *                   psq
+   *                   v[    P bytes    ]
+   * smem: 0........0........0..........0
+   *       ^[         U bytes           ]
+   *       ^dsq[0]  ^dsq[1]  ^dsq[2]
+   *
+   * and as long as we unpack psq left to right -- and as long as we
+   * read the last packet before we write the last unpacked residues
+   * to smem - we're guaranteed that the unpacking works without
+   * overwriting any unpacked data.
+   */
+  U  = (dd->pack5 ? 6 * dd->chunk_maxpacket : 15 * dd->chunk_maxpacket);
+  U += dd->chunk_maxseq + 1;
+  ESL_ALLOC(chu->smem, sizeof(ESL_DSQ) * U);
+  chu->psq = (uint32_t *) (chu->smem + U - 4*dd->chunk_maxpacket);
+
+  /* We don't have any guarantees about the amount of metadata
+   * associated with the N sequences, so <metadata> has to be a
+   * reallocatable space. We make a lowball guess for the initial
+   * alloc, on the off chance that the metadata size is small (names
+   * only, no acc/desc): minimally, say 12 bytes of name, 3 \0's, and
+   * 4 bytes for the taxid integer: call it 20.
+   */
+  chu->mdalloc = 20 * dd->chunk_maxseq;
+  ESL_ALLOC(chu->metadata, sizeof(char) * chu->mdalloc);
+
+  return chu;
+  
+ ERROR:
+  dsqdata_chunk_Destroy(chu);
+  return NULL;
+}
+
+
+static void
+dsqdata_chunk_Destroy(ESL_DSQDATA_CHUNK *chu)
+{
+  if (chu)
+    {
+      if (chu->metadata) free(chu->metadata);
+      if (chu->smem)     free(chu->smem);
+      if (chu->L)        free(chu->L);
+      if (chu->taxid)    free(chu->taxid);
+      if (chu->desc)     free(chu->desc);
+      if (chu->acc)      free(chu->acc);
+      if (chu->name)     free(chu->name);
+      if (chu->dsq)      free(chu->dsq);
+      free(chu);
+    }
+}
+
+
+/*****************************************************************
+ * 4. Loader and unpacker, the input threads
+ *****************************************************************/
+
+static void *
+dsqdata_loader_thread(void *p)
+{
+  ESL_DSQDATA         *dd        = (ESL_DSQDATA *) p;
+  ESL_DSQDATA_RECORD  *idx       = NULL;
+  ESL_DSQDATA_CHUNK   *chu       = NULL;
+  int                  nchunk    = 0;             // number of chunks we create, and need to destroy.
+  int                  nidx      = 0;             // how many records in <idx>: usually MAXSEQ, until end
+  int                  nload     = 0;             // how many sequences we load: >=1, <=nidx
+  int                  ncarried  = 0;             // how many records carry over to next iteration: nidx-nload
+  int                  nread     = 0;             // fread()'s return value
+  int                  nmeta     = 0;             // how many bytes of metadata we want to read for this chunk
+  int                  i0        = 0;             // absolute index of first record in <idx>, 0-offset
+  int64_t              psq_last  = -1;            // psq_end for record i0-1
+  int64_t              meta_last = -1;            // metadata_end for record i0-1
+  int                  done      = FALSE;
+  int                  status;
+
+  ESL_ALLOC(idx, sizeof(ESL_DSQDATA_RECORD) * dd->chunk_maxseq);
+
+  while (! done)
+    {
+
+      /* Get a chunk - either by creating it, or recycling it.
+       * We'll create up to <nconsumers>+2 of them.
+       */
+      if (nchunk < dd->nconsumers+2)
+	{
+	  if ( (chu = dsqdata_chunk_Create(dd)) == NULL) { status = eslEMEM; goto ERROR; }
+	  nchunk++;
+	}
+      else
+	{
+	  if ( pthread_mutex_lock(&dd->recycling_mutex) != 0) ESL_XEXCEPTION(eslESYS, "pthread mutex lock failed");
+	  while (dd->recycling == NULL)
+	    {
+	      if ( pthread_cond_wait(&dd->recycling_cv, &dd->recycling_mutex) != 0) 
+		ESL_XEXCEPTION(eslESYS, "pthread cond wait failed");
+	    }
+	  chu = dd->recycling;
+	  dd->recycling = chu->nxt;                    // pop one off recycling stack
+	  if ( pthread_mutex_unlock(&dd->recycling_mutex) != 0) ESL_XEXCEPTION(eslESYS, "pthread mutex unlock failed");
+	  if ( pthread_cond_signal(&dd->recycling_cv)     != 0) ESL_XEXCEPTION(eslESYS, "pthread cond signal failed");
+	  // signal *after* unlocking mutex
+	}
+      
+      /* Refill index. (The memmove is avoidable. Alt strategy: we could load in 2 frames)
+       * The previous loop loaded packed sequence for <nload'> of the <nidx'> entries,
+       * where the 's indicate the variable has carried over from prev iteration:
+       *       |----- nload' ----||--- (ncarried) ---|
+       *       |-------------- nidx' ----------------|
+       * Now we're going to shift the remainder ncarried = nidx-nload to the left, then refill:
+       *       |---- ncarried ----||--- (MAXSEQ-ncarried) ---|
+       *       |-------------- MAXSEQ -----------------------|
+       * while watching out for the terminal case where we run out of
+       * data, loading less than (MAXSEQ-ncarried) records:
+       *       |---- ncarried ----||--- nidx* ---|
+       *       |------------- nidx --------------|
+       * where the <nidx*> is what fread() returns to us.
+       */
+      i0      += nload;               // this chunk starts with seq #<i0>
+      ncarried = (nidx - nload);
+      memmove(idx, idx + nload, sizeof(ESL_DSQDATA_RECORD) * ncarried);
+      nidx  = fread(idx + ncarried, sizeof(ESL_DSQDATA_RECORD), dd->chunk_maxseq - ncarried, dd->ifp);
+      nidx += ncarried;               // usually, this'll be MAXSEQ, unless we're near EOF.
+      
+      if (nidx == 0) 
+	{ // We're EOF. This chunk will be the empty EOF signal to unpacker, consumers.
+	  chu->i0 = i0;
+	  chu->N  = 0;
+	  chu->pn = 0;
+	  done    = TRUE;
+	}
+      else
+	{
+	  /* Figure out how many sequences we're going to load: <nload>
+	   *  nload = max i : i <= MAXSEQ && idx[i].psq_end - psq_last <= CHUNK_MAX
+	   */
+	  ESL_DASSERT1(( idx[0].psq_end - psq_last <= dd->chunk_maxpacket ));
+	  if (idx[nidx-1].psq_end - psq_last <= dd->chunk_maxpacket)
+	    nload = nidx;
+	  else
+	    { // Binary search for nload = max_i idx[i-1].psq_end - lastend <= MAX
+	      int righti = nidx;
+	      int mid;
+	      nload = 1;
+	      while (righti - nload > 1)
+		{
+		  mid = nload + (righti - nload) / 2;
+		  if (idx[mid-1].psq_end - psq_last <= dd->chunk_maxpacket) nload = mid;
+		  else righti = mid;
+		}                                                  
+	    }
+	  
+	  /* Read packed sequence. */
+	  chu->pn = idx[nload-1].psq_end - psq_last;
+	  nread   = fread(chu->psq, sizeof(uint32_t), chu->pn, dd->sfp);
+	  //printf("Read %d packed ints from seq file\n", nread);
+	  if ( nread != chu->pn ) ESL_XEXCEPTION(eslEOD, "dsqdata packet loader: expected %d, got %d", chu->pn, nread);
+
+	      
+	  /* Read metadata, reallocating if needed */
+	  nmeta = idx[nload-1].metadata_end - meta_last;
+	  if (nmeta > chu->mdalloc) {
+	    ESL_REALLOC(chu->metadata, sizeof(char) * nmeta);   // should be realloc by doubling instead?
+	    chu->mdalloc = nmeta;
+	  }
+	  nread  = fread(chu->metadata, sizeof(char), nmeta, dd->mfp);
+	  if ( nread != nmeta ) ESL_XEXCEPTION(eslEOD, "dsqdata metadata loader: expected %d, got %d", nmeta, nread); 
+
+	  chu->i0   = i0;
+	  chu->N    = nload;
+	  psq_last  = idx[nload-1].psq_end;
+	  meta_last = idx[nload-1].metadata_end;
+	}
+
+      /* Put the finished chunk into outbox;
+       * unpacker will pick it up and unpack it.
+       */
+      if ( pthread_mutex_lock(&dd->loader_outbox_mutex) != 0) ESL_XEXCEPTION(eslESYS, "pthread mutex lock failed");
+      while (dd->loader_outbox != NULL) 
+	{ 
+	  if (pthread_cond_wait(&dd->loader_outbox_empty_cv, &dd->loader_outbox_mutex) != 0)
+	    ESL_XEXCEPTION(eslESYS, "pthread cond wait failed");
+	}
+      dd->loader_outbox = chu;   
+      if ( pthread_mutex_unlock(&dd->loader_outbox_mutex)  != 0) ESL_XEXCEPTION(eslESYS, "pthread mutex unlock failed");
+      if ( pthread_cond_signal(&dd->loader_outbox_full_cv) != 0) ESL_XEXCEPTION(eslESYS, "pthread cond signal failed");
+    }
+
+  /* done == TRUE: we've sent the empty EOF chunk downstream, and now
+   * we wait to get all our chunks back through the recycling, so we
+   * can free them and exit cleanly. We counted them as they went out,
+   * in <nchunk>, so we know how many need to come home.
+   */
+  while (nchunk)
+    {
+      if ( pthread_mutex_lock(&dd->recycling_mutex) != 0) ESL_XEXCEPTION(eslESYS, "pthread mutex lock failed");
+      while (dd->recycling == NULL)                 // Readers may still be working, will Recycle() their chunks
+	{
+	  if ( pthread_cond_wait(&dd->recycling_cv, &dd->recycling_mutex) != 0)
+	    ESL_XEXCEPTION(eslESYS, "pthread cond wait failed");
+	}
+      while (dd->recycling != NULL) {               // Free entire stack, while we have the mutex locked.
+	chu           = dd->recycling;   
+	dd->recycling = chu->nxt;
+	dsqdata_chunk_Destroy(chu);
+	nchunk--;
+      }
+      if ( pthread_mutex_unlock(&dd->recycling_mutex) != 0) ESL_XEXCEPTION(eslESYS, "pthread mutex unlock failed");
+      /* Because the recycling is a stack, readers never have to wait
+       * on a condition to Recycle(); the recycling, unlike the
+       * outboxes, doesn't need to be empty.
+       */
+    }
+  free(idx);
+  pthread_exit(NULL);
+
+ ERROR: 
+  /* Defying Easel standards, we treat all exceptions as fatal, at
+   * least for the moment.  This isn't a problem in HMMER, Infernal
+   * because they already use fatal exception handlers (i.e., we never
+   * reach this code anyway, if the parent app is using default fatal
+   * exception handling). It would become a problem if an Easel-based
+   * app needs to assure no exits from within Easel. Because the other
+   * threads will block waiting for chunks to come from the loader, if
+   * the loader fails, we would need a back channel signal of some
+   * sort to get the other threads to clean up and terminate.
+   */
+  if (idx) free(idx);    
+  esl_fatal("  ... dsqdata loader thread failed: unrecoverable");
+}
+
+
+
+static void *
+dsqdata_unpacker_thread(void *p)
+{
+  ESL_DSQDATA          *dd   = (ESL_DSQDATA *) p;
+  ESL_DSQDATA_CHUNK    *chu  = NULL;
+  int                   done = FALSE;
+  int                   status;
+
+  while (! done)
+    {
+      /* Get a chunk from loader's outbox. Wait if necessary. */
+      if ( pthread_mutex_lock(&dd->loader_outbox_mutex) != 0) ESL_XEXCEPTION(eslESYS, "pthread mutex lock failed");
+      while (dd->loader_outbox == NULL) 
+	{
+	  if ( pthread_cond_wait(&dd->loader_outbox_full_cv, &dd->loader_outbox_mutex) != 0)
+	    ESL_XEXCEPTION(eslESYS, "pthread cond wait failed");
+	}
+      chu = dd->loader_outbox;
+      dd->loader_outbox  = NULL;
+      if ( pthread_mutex_unlock(&dd->loader_outbox_mutex)   != 0) ESL_XEXCEPTION(eslESYS, "pthread mutex unlock failed");
+      if ( pthread_cond_signal(&dd->loader_outbox_empty_cv) != 0) ESL_XEXCEPTION(eslESYS, "pthread cond signal failed");
+
+      /* Unpack the metadata.
+       * If chunk is empty (N==0), it's the EOF signal - let it go straight out to a consumer.
+       * (The first consumer that sees it will set the at_eof flag in <dd>, which all
+       *  consumers check. So we only need the one empty EOF chunk to flow downstream.)
+       */
+      if (! chu->N) done = TRUE; // still need to pass the chunk along to a consumer.
+      else
+	{ 	
+	  if (( status = dsqdata_unpack_chunk(chu, dd->pack5)) != eslOK) goto ERROR;
+	}
+
+      /* Put unpacked chunk into the unpacker's outbox.
+       * May need to wait for it to be empty/available.
+       */
+      if ( pthread_mutex_lock(&dd->unpacker_outbox_mutex) != 0) ESL_XEXCEPTION(eslESYS, "pthread mutex lock failed");
+      while (dd->unpacker_outbox != NULL) 
+	{ 
+	  if ( pthread_cond_wait(&dd->unpacker_outbox_empty_cv, &dd->unpacker_outbox_mutex) != 0)
+	    ESL_XEXCEPTION(eslESYS, "pthread cond wait failed");
+	}
+      dd->unpacker_outbox = chu;
+      if ( pthread_mutex_unlock(&dd->unpacker_outbox_mutex)  != 0) ESL_XEXCEPTION(eslESYS, "pthread mutex unlock failed");
+      if ( pthread_cond_signal(&dd->unpacker_outbox_full_cv) != 0) ESL_XEXCEPTION(eslESYS, "pthread cond signal failed");
+    }
+  pthread_exit(NULL);
+
+ ERROR:
+  /* See comment in loader thread: for lack of a back channel mechanism
+   * to tell other threads to clean up and terminate, we violate Easel standards
+   * and turn nonfatal exceptions into fatal ones.
+   */
+  esl_fatal("  ... dsqdata unpacker thread failed: unrecoverable"); 
+}
+
+
+/*****************************************************************
+ * 5. Packing sequences and unpacking chunks
+ *****************************************************************/
+
+/* dsqdata_unpack_chunk()
+ * 
+ * <do_pack5> is a hint: if caller knows that all the packets in the
+ * chunk are 5-bit encoded (i.e. amino acid sequence), it can pass
+ * <TRUE>, enabling a small optimization. Otherwise the packed
+ * sequences will be treated as mixed 2- and 5-bit encoding, as is
+ * needed for DNA/RNA sequences; protein sequences also unpack fine
+ * that way, but the 5-bit flag on every packet needs to be checked.
+ *
+ * Throws:    <eslEFORMAT> if a problem is seen in the binary format 
+ */
+static int
+dsqdata_unpack_chunk(ESL_DSQDATA_CHUNK *chu, int do_pack5)
+{
+  char     *ptr = chu->metadata;           // ptr will walk through metadata
+  int       r;                             // position in unpacked dsq array
+  int       i;                             // sequence index: 0..chu->N-1
+  int       pos;                           // position in packet array
+  int       L;                             // an unpacked sequence length
+  int       P;                             // number of packets unpacked
+  
+  /* "Unpack" the metadata */
+  for (i = 0; i < chu->N; i++)
+    {
+      /* The data are user input, so we cannot trust that it has \0's where we expect them.  */
+      if ( ptr >= chu->metadata + chu->mdalloc) ESL_EXCEPTION(eslEFORMAT, "metadata format error");
+      chu->name[i] = ptr;                           ptr = 1 + strchr(ptr, '\0');   if ( ptr >= chu->metadata + chu->mdalloc) ESL_EXCEPTION(eslEFORMAT, "metadata format error");
+      chu->acc[i]  = ptr;                           ptr = 1 + strchr(ptr, '\0');   if ( ptr >= chu->metadata + chu->mdalloc) ESL_EXCEPTION(eslEFORMAT, "metadata format error");
+      chu->desc[i] = ptr;                           ptr = 1 + strchr(ptr, '\0');   if ( ptr >= chu->metadata + chu->mdalloc) ESL_EXCEPTION(eslEFORMAT, "metadata format error");
+      chu->taxid[i] = (int32_t) *((int32_t *) ptr); ptr += sizeof(int32_t);     
+    }
+
+  /* Unpack the sequence data */
+  i            = 0;
+  r            = 0;
+  pos          = 0;
+  chu->smem[0] = eslDSQ_SENTINEL;
+  while (pos < chu->pn)
+    {
+      chu->dsq[i] = (ESL_DSQ *) chu->smem + r;
+      if (do_pack5) dsqdata_unpack5(chu->psq + pos, chu->dsq[i], &L, &P);
+      else          dsqdata_unpack2(chu->psq + pos, chu->dsq[i], &L, &P);
+
+      r   += L+1;     // L+1, not L+2, because we overlap start/end sentinels
+      pos += P;
+      chu->L[i] = L;
+      i++;
+    }
+  ESL_DASSERT1(( pos == chu->pn ));  // we should've unpacked exactly pn packets,
+  ESL_DASSERT1((   i == chu->N ));   //  .. and exactly N sequences.
+  return eslOK;
+}
+
+
+/* Unpack 5-bit encoded sequence, starting at <psq>.
+ * Important: dsq[0] is already initialized to eslDSQ_SENTINEL,
+ * as a nitpicky optimization (the sequence data in a chunk are
+ * concatenated so that they share end/start sentinels).
+ */
+static int
+dsqdata_unpack5(uint32_t *psq, ESL_DSQ *dsq, int *ret_L, int *ret_P)
+{
+  int      pos = 0;          // position in psq[]
+  int      r   = 1;          // position in dsq[]. caller set dsq[0] to eslDSQ_SENTINEL.
+  uint32_t v   = psq[pos++];
+  int      b;                // bit shift counter
+
+  while (! ESL_DSQDATA_EOD(v))               // we trust that we'll see a sentinel at the end
+    {
+      ESL_DASSERT1(( ESL_DSQDATA_5BIT(v) )); // All packets are 5-bit encoded
+      dsq[r++] = (v >> 25) & 31; dsq[r++] = (v >> 20) & 31; dsq[r++] = (v >> 15) & 31;
+      dsq[r++] = (v >> 10) & 31; dsq[r++] = (v >>  5) & 31; dsq[r++] = (v >>  0) & 31;
+      v = psq[pos++];
+    }
+
+  /* Unpack sentinel packet, which may be partial; it can even contain
+   * zero residues in the edge case of an L=0 sequence.
+   */
+  ESL_DASSERT1(( ESL_DSQDATA_5BIT(v) ));
+  for (b = 25; b >= 0 && ((v >> b) & 31) != 31; b -= 5)
+    dsq[r++] = (v >> b) & 31;
+  dsq[r++] = eslDSQ_SENTINEL;
+  // r is now L+2:   the raw sequence length + 2 sentinels
+  // P = pos, because pos index advanced to next packet after sentinel
+  *ret_L = r-2;
+  *ret_P = pos;
+  return eslOK;
+}
+
+/* Unpack 2-bit (+ mixed 5-bit for noncanonicals) encoding.
+ * Important: dsq[0] is already initialized to eslDSQ_SENTINEL
+ *
+ * This will work for protein sequences just fine; just a little
+ * slower than calling dsqdata_unpack5(), because here we have
+ * to check the 5-bit encoding bit on every packet.
+ */
+static int
+dsqdata_unpack2(uint32_t *psq, ESL_DSQ *dsq, int *ret_L, int *ret_P)
+{
+  int      pos = 0;
+  int      r   = 1;
+  uint32_t v   = psq[pos++];
+  int      b;                  // bit shift counter
+
+  while (! ESL_DSQDATA_EOD(v))
+    {
+      if ( ESL_DSQDATA_5BIT(v))  // 5-bit encoded, full. Don't need mask on bit 31 because we know it's down.
+	{
+	  dsq[r++] = (v >> 25) & 31; dsq[r++] = (v >> 20) & 31; dsq[r++] = (v >> 15) & 31;
+	  dsq[r++] = (v >> 10) & 31; dsq[r++] = (v >>  5) & 31; dsq[r++] = (v >>  0) & 31;
+	}
+      else                      // 2-bit encoded, full
+	{ 
+	  dsq[r++] = (v >> 28) & 3;  dsq[r++] = (v >> 26) & 3;  dsq[r++] = (v >> 24) & 3;
+	  dsq[r++] = (v >> 22) & 3;  dsq[r++] = (v >> 20) & 3;  dsq[r++] = (v >> 18) & 3;
+	  dsq[r++] = (v >> 16) & 3;  dsq[r++] = (v >> 14) & 3;  dsq[r++] = (v >> 12) & 3;
+	  dsq[r++] = (v >> 10) & 3;  dsq[r++] = (v >>  8) & 3;  dsq[r++] = (v >>  6) & 3;
+	  dsq[r++] = (v >>  4) & 3;  dsq[r++] = (v >>  2) & 3;  dsq[r++] = (v >>  0) & 3;
+	}
+      v = psq[pos++];
+    }
+
+  /* Sentinel packet. 
+   * If 2-bit, it's full. If 5-bit, it's usually partial, and may even be 0-len.
+   */
+  if ( ESL_DSQDATA_5BIT(v)) // 5-bit, partial
+    {
+      for (b = 25; b >= 0 && ((v >> b) & 31) != 31; b -= 5)
+	dsq[r++] = (v >> b) & 31;
+    }
+  else
+    {
+      dsq[r++] = (v >> 28) & 3;  dsq[r++] = (v >> 26) & 3;  dsq[r++] = (v >> 24) & 3;
+      dsq[r++] = (v >> 22) & 3;  dsq[r++] = (v >> 20) & 3;  dsq[r++] = (v >> 18) & 3;
+      dsq[r++] = (v >> 16) & 3;  dsq[r++] = (v >> 14) & 3;  dsq[r++] = (v >> 12) & 3;
+      dsq[r++] = (v >> 10) & 3;  dsq[r++] = (v >>  8) & 3;  dsq[r++] = (v >>  6) & 3;
+      dsq[r++] = (v >>  4) & 3;  dsq[r++] = (v >>  2) & 3;  dsq[r++] = (v >>  0) & 3;
+    }
+  dsq[r++] = eslDSQ_SENTINEL;
+
+  *ret_L = r-2;
+  *ret_P = pos;
+  return eslOK;
+}
+
+
+/* dsqdata_pack5()
+ *
+ * Pack a digital (protein) sequence <dsq> of length <n>, into <psq>
+ * using 5-bit encoding; return the number of packets <*ret_P>.
+ * 
+ * <psq> must be allocated for at least $MAX(1, (n+5)/6)$ packets.
+ * 
+ * You can pack in place, by passing the same pointer <dsq> as <psq>,
+ * provided that dsq is allocated for at least 1 packet (4 bytes).  We
+ * know that <psq> is either smaller than <dsq> ($4P <= n$) or that it
+ * consists of one EOD packet (in the case n=0). 
+ */
+static int
+dsqdata_pack5(ESL_DSQ *dsq, int n, uint32_t *psq, int *ret_P)
+{
+  int        r   = 1;    // position in <dsq>
+  int        pos = 0;    // position in <psq>. 
+  int        b;          // bitshift
+  uint32_t   v;          // tmp var needed to guarantee pack-in-place works
+
+  while (r <= n)
+    {
+      v = eslDSQDATA_5BIT;            // initialize packet with 5-bit flag
+      for (b = 25; b >= 0 && r <= n; b -= 5)  v  |= (uint32_t) dsq[r++] << b;
+      for (      ; b >= 0;           b -= 5)  v  |= (uint32_t)       31 << b;
+
+      if (r > n) v |= eslDSQDATA_EOD; // EOD bit
+      psq[pos++] = v;                 // we know we've already read all the dsq we need under psq[pos]
+    }
+
+  /* Special case of n=0: we need an empty EOD sentinel packet. */
+  if (pos == 0) { v = 0; psq[pos++] = ~v; }   // all bits set: | EOD | 5BIT | all sentinels |
+
+  *ret_P = pos;
+  return eslOK;
+}
+
+
+/* dsqdata_pack2()
+ *
+ * Pack a digital (nucleic) sequence <dsq> of total length
+ * <n>, into <psq>; return the number of packets <*ret_P>.
+ * 
+ * <psq> must be allocated for at least $MAX(1, (n+5)/6)$ packets.
+ * (Yes, even in 2-bit packing, because worst case, the sequence
+ * contains so many noncanonicals that it's entirely 5-bit encoded.)
+ * 
+ * You can pack in place, by passing the same pointer <dsq> as <psq>,
+ * provided that dsq is allocated for at least 1 packet (4 bytes).  We
+ * know that <psq> is either smaller than <dsq> ($4P <= n$) or that it
+ * consists of one EOD packet (in the case n=0). 
+ */
+static int
+dsqdata_pack2(ESL_DSQ *dsq, int n, uint32_t *psq, int *ret_P)
+{
+  int        pos  = 0;     // position in <psq>
+  int        d    = 0;     // position of next degen residue, 1..n, n+1 if none
+  int        r    = 1;     // position in <dsq> 1..n
+  int        b;            // bitshift
+  uint32_t   v;            // tmp var needed to guarantee pack-in-place works  
+
+  while (r <= n)
+    {
+      // Slide the "next degenerate residue" detector
+      if (d < r)
+	for (d = r; d <= n; d++)
+	  if (dsq[d] > 3) break;
+
+      // Can we 2-bit pack the next 15 residues, r..r+14?
+      // n-r+1 = number of residues remaining to be packed.
+      if (n-r+1 >= 15 && d > r+14)
+	{
+	  v  = 0;
+	  for (b = 28; b >= 0; b -=2) v |= (uint32_t) dsq[r++] << b;
+	}
+      else
+	{
+	  v = eslDSQDATA_5BIT; // initialize v with 5-bit packing bit
+	  for (b = 25; b >= 0 && r <= n; b -= 5) v  |= (uint32_t) dsq[r++] << b;
+	  for (      ; b >= 0;           b -= 5) v  |= (uint32_t)       31 << b;
+	}
+
+      if (r > n) v |= eslDSQDATA_EOD; // EOD bit
+      psq[pos++] = v;                 // we know we've already read all the dsq we need under psq[pos]
+    }
+  
+  /* Special case of n=0: we need an empty EOD sentinel packet. 
+   * Sentinel packets are 5-bit encoded, even in 2-bit coding scheme
+   */
+  if (pos == 0) { v = 0; psq[pos++] = ~v; }   // all bits set: | EOD | 5BIT | all sentinels |
+
+  *ret_P = pos;
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 6. Notes
+ ***************************************************************** 
+ *
+ * [1] Packed sequence data format.
+ * 
+ *      Format of a single packet:
+ *      [31] [30] [29..25]  [24..20]  [19..15]  [14..10]  [ 9..5 ]  [ 4..0 ]
+ *       ^    ^   |------------  6 5-bit packed residues ------------------|
+ *       |    |   []  []  []  []  []  []  []  []  []  []  []  []  []  []  []
+ *       |    |   |----------- or 15 2-bit packed residues ----------------|
+ *       |    |    
+ *       |    "packtype" bit 30 = 0 if packet is 2-bit packed; 1 if 5-bit packed
+ *       "sentinel" bit 31 = 1 if last packet in packed sequence; else 0
+ *       
+ *       (packet & (1 << 31)) tests for end of sequence
+ *       (packet & (1 << 30)) tests for 5-bit packing vs. 2-bit
+ *       ((packet >> shift) && 31) decodes 5-bit, for shift=25..0 in steps of 5
+ *       ((packet >> shift) && 3)  decodes 2-bit, for shift=28..0 in steps of 2
+ *       
+ *       Packets without the sentinel bit set are always full (unpack
+ *       to 15 or 6 residue codes).
+ *       
+ *       5-bit EOD packets may be partial: they unpack to 0..6
+ *       residues.  The remaining residue codes are set to 0x1f
+ *       (11111) to indicate EOD within a partial packet. 
+ *
+ *       A 0-length sequence is encoded by a 5-bit partial EOD packet
+ *       with 0 residues. This is the only case in which a partial
+ *       packet contains 0 residues. (Because we can end with an EOD
+ *       full packet, there is no other case where we end up with 0
+ *       leftover residues to encode.)
+ *       
+ *       2-bit EOD packets must be full, because there is no way to
+ *       signal EOD locally within a 2-bit packet. Can't use 0x03 (11)
+ *       because that's T/U. Generally, then, the last packet of a
+ *       nucleic acid sequence must be 5-bit encoded, solely to be
+ *       able to encode EOD in a partial packet. 
+ *  
+ *       A packed sequence consists of an integer number of packets,
+ *       P, which ends with an EOD packet that may contain a partial
+ *       number of residues. P packets are guaranteed to be able to 
+ *       encode at least 6P residues in either scheme.
+ *       
+ *       A sequence of length L packs into P <= MAX(1, (N+5)/6)
+ *       packets. (1, because a 0-length sequence still requires an
+ *       EOD packet.) This is true even for nucleic sequences, because
+ *       noncanonical residues can force DNA/RNA sequence to pack
+ *       entirely in 5-bit coding.
+ *       
+ *       A packed amino acid sequence unpacks to 6P-5 <= L <= 6P
+ *       residues (for P>1; 0 <= L <= 6 for P=1) and all packets are
+ *       5-bit encoded.
+ *       
+ *       A packed nucleic acid sequence unpacks to 6P-5 <= L <= 15P
+ *       residues (for P>1; 0 <= L <= 15 for P=1). The packets are a
+ *       mix of 2-bit and 5-bit. Degenerate residues must be 5-bit
+ *       packed, and the EOD packet usually is too. A 5-bit packet
+ *       does not have to contain degenerate residues, because it may
+ *       have been necessary to get "in frame" to pack a downstream
+ *       degenerate residue. For example, the sequence
+ *       ACGTACGTNNA... must be packed as [ACGTAC][CGTNNA]... to get
+ *       the N's packed correctly.
+ *       
+ * [2] Compression: relative incompressibility of biological sequences.
+ *
+ *      Considered using fast (de)compression algorithms that are fast
+ *      enough to keep up with disk read speed, including LZ4 and
+ *      Google's Snappy. However, lz4 only achieves 1.0-1.9x global
+ *      compression of protein sequence (compared to 1.5x for
+ *      packing), and 2.0x for DNA (compared to 3.75x for packing).
+ *      With local, blockwise compression, which we need for random
+ *      access and indexing, it gets worse. Packing is superior.
+ *      
+ *      Metadata compression is more feasible, but I still opted
+ *      against it. Although metadata are globally quite compressible
+ *      (3.2-6.9x in trials with lz4), locally in 64K blocks lz4 only
+ *      achieves 2x.  [xref SRE:2016/0201-seqfile-compression]
+ *      
+ * [3] Maybe getting more packing using run-length encoding.
+ * 
+ *      Genome assemblies typically have long runs of N's (human
+ *      GRCh38.p2 is about 5% N), and it's excruciating to have to
+ *      pack it into bulky 5-bit degenerate packets. I considered
+ *      run-length encoding (RLE). One possibility is to use a special
+ *      packet format akin to the 5-bit packet format:
+ *      
+ *        [0] [?] [11111] [.....] [....................]
+ *        ^        ^       ^       20b number, <=2^20-1
+ *        |        |       5-bit residue code       
+ *        |        sentinel residue 31 set
+ *        sentinel bit unset
+ *        
+ *      This is a uniquely detectable packet structure because a full
+ *      packet (with unset sentinel bit) would otherwise never contain
+ *      a sentinel residue (code 31).
+ *      
+ *      However, using RLE would make our unpacked data sizes too
+ *      unpredictable; we wouldn't have the <=6P or <=15P guarantee,
+ *      so we couldn't rely on fixed-length allocation of <smem> in
+ *      our chunk. Consumers wouldn't be getting predictable chunk
+ *      sizes, which could complicate load balancing. I decided
+ *      against it.
+ */
+
+
+/*****************************************************************
+ * 7. Unit tests
+ *****************************************************************/
+#ifdef eslDSQDATA_TESTDRIVE
+
+#include "esl_randomseq.h"
+
+/* Exercise the packing and unpacking routines:
+ *    dsqdata_pack2, dsqdata_pack5, and dsqdata_unpack
+ */
+static void
+utest_packing(ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, int nsamples)
+{
+  char      msg[] = "esl_dsqdata :: packing unit test failed";
+  ESL_DSQ  *dsq   = NULL;  // We start with a dirty random sequence...
+  uint32_t *psq   = NULL;  //   ... pack it ...
+  ESL_DSQ  *dsq2  = NULL;  //   ... and unpack it. Then check that it's the same seq.
+  int       L_max = 46;    // We'll sample L on 0..L_max. L_max doesn't need to be large to exercise well.
+  int       P_max = ESL_MAX(1, (L_max + 5) / 6); // So sayeth the docs, so let's test it.
+  int       L, P, L2, P2;              
+  int       i;
+
+  if ((dsq  = malloc(sizeof(ESL_DSQ)  * (L_max + 2))) == NULL) esl_fatal(msg);
+  if ((psq  = malloc(sizeof(uint32_t) * P_max))       == NULL) esl_fatal(msg);
+  if ((dsq2 = malloc(sizeof(ESL_DSQ)  * (L_max + 2))) == NULL) esl_fatal(msg);
+
+  for (i = 0; i < nsamples; i++)
+    {
+      L = esl_rnd_Roll(rng, L_max+1); // 0..L_max
+
+      esl_rsq_SampleDirty(rng, abc, NULL, L, dsq);
+   
+      if (abc->type == eslAMINO) { if ( dsqdata_pack5(dsq, L, psq, &P) != eslOK) esl_fatal(msg); }
+      else                       { if ( dsqdata_pack2(dsq, L, psq, &P) != eslOK) esl_fatal(msg); }
+
+      dsq2[0] = eslDSQ_SENTINEL;  // interface to _unpack functions requires caller to do this
+      if (abc->type == eslAMINO) { if ( dsqdata_unpack5(psq, dsq2, &L2, &P2) != eslOK) esl_fatal(msg); }
+      else                       { if ( dsqdata_unpack2(psq, dsq2, &L2, &P2) != eslOK) esl_fatal(msg); }
+
+      if (L2 != L)                                       esl_fatal(msg);
+      if (P2 != P)                                       esl_fatal(msg);
+      if (memcmp((void *) dsq, (void *) dsq2, L+2) != 0) esl_fatal(msg);
+
+      /* Write garbage into the buffers, so nobody's cheating on the test somehow */
+      esl_rnd_mem(rng, (void *) dsq,  L_max+2);
+      esl_rnd_mem(rng, (void *) dsq2, L_max+2);
+      esl_rnd_mem(rng, (void *) psq,  (sizeof(uint32_t) * P_max));
+    }
+
+  free(dsq);
+  free(psq);
+  free(dsq2);
+}
+
+
+static void
+utest_readwrite(ESL_RANDOMNESS *rng, ESL_ALPHABET *abc)
+{
+  char               msg[]         = "esl_dsqdata :: readwrite unit test failed";
+  char               tmpfile[32]   = "esltmpXXXXXX";
+  char               basename[32];
+  ESL_SQ           **sqarr         = NULL;
+  FILE              *tmpfp         = NULL;
+  ESL_SQFILE        *sqfp          = NULL;
+  ESL_DSQDATA       *dd            = NULL;
+  ESL_DSQDATA_CHUNK *chu           = NULL;
+  int               nseq           = 1 + esl_rnd_Roll(rng, 20000);  // 1..20000
+  int               maxL           = 100;
+  int               i;
+  int               status;
+
+  /* 1. Sample <nseq> random dirty digital sequences, storing them for later comparison;
+   *    write them out to a tmp FASTA file. The Easel FASTA format writer writes <name> <acc> 
+   *    <desc> on the descline, but the reader only reads <name> <desc> (as is standard 
+   *    for FASTA format), so blank the accession to avoid confusion.
+   */
+  if (( status = esl_tmpfile_named(tmpfile, &tmpfp)) != eslOK) esl_fatal(msg);
+  if (( sqarr = malloc(sizeof(ESL_SQ *) * nseq))      == NULL) esl_fatal(msg);
+  for (i = 0; i < nseq; i++)   
+    {
+      sqarr[i] = NULL;
+      if (( status = esl_sq_Sample(rng, abc, maxL, &(sqarr[i])))              != eslOK) esl_fatal(msg);
+      if (( status = esl_sq_SetAccession(sqarr[i], ""))                       != eslOK) esl_fatal(msg);
+      if (( status = esl_sqio_Write(tmpfp, sqarr[i], eslSQFILE_FASTA, FALSE)) != eslOK) esl_fatal(msg);
+    }
+  fclose(tmpfp);
+
+  /* 2.  Make a dsqdata database from the FASTA tmpfile.
+   */   
+  if (( status = esl_sqfile_OpenDigital(abc, tmpfile, eslSQFILE_FASTA, NULL, &sqfp)) != eslOK) esl_fatal(msg);
+  if ((          snprintf(basename, 32, "%s-db", tmpfile))                           <= 0)     esl_fatal(msg);
+  if (( status = esl_dsqdata_Write(sqfp, basename, NULL))                            != eslOK) esl_fatal(msg);
+  esl_sqfile_Close(sqfp);
+
+  /* 3.  Open and read the dsqdata; compare to the original sequences.
+   */
+  if    (( status = esl_dsqdata_Open(&abc, basename, 1, &dd)) != eslOK)  esl_fatal(msg);
+  while (( status = esl_dsqdata_Read(dd, &chu)) == eslOK)
+    {
+      for (i = 0; i < chu->N; i++) 
+	{
+	  if ( chu->L[i]          != sqarr[i+chu->i0]->n )                   esl_fatal(msg);
+	  if ( memcmp( chu->dsq[i],  sqarr[i+chu->i0]->dsq, chu->L[i]) != 0) esl_fatal(msg);
+	  if ( strcmp( chu->name[i], sqarr[i+chu->i0]->name)           != 0) esl_fatal(msg);
+	  // FASTA does not read accession - instead we get both accession/description as <desc>
+	  if ( strcmp( chu->desc[i], sqarr[i+chu->i0]->desc)           != 0) esl_fatal(msg);
+	  // FASTA also does not store taxid - so don't test that either
+	}
+      esl_dsqdata_Recycle(dd, chu);
+    }
+  if (status != eslEOF) esl_fatal(msg);
+  esl_dsqdata_Close(dd);
+
+  remove(tmpfile);
+  remove(basename);
+  snprintf(basename, 32, "%s-db.dsqi", tmpfile); remove(basename);
+  snprintf(basename, 32, "%s-db.dsqm", tmpfile); remove(basename);
+  snprintf(basename, 32, "%s-db.dsqs", tmpfile); remove(basename);
+  for (i = 0; i < nseq; i++) esl_sq_Destroy(sqarr[i]);
+  free(sqarr);
+}
+#endif /*eslDSQDATA_TESTDRIVE*/
+
+
+
+/*****************************************************************
+ * 8. Test driver
+ *****************************************************************/
+#ifdef eslDSQDATA_TESTDRIVE
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_dsqdata.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE, NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",           0 },
+  { "-s",        eslARG_INT,      "0", NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                  0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "unit test driver for Easel dsqdata module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go       = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *rng      = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  ESL_ALPHABET   *amino    = esl_alphabet_Create(eslAMINO);
+  ESL_ALPHABET   *nucleic  = esl_alphabet_Create(eslRNA);
+  int             nsamples = 100;
+
+  fprintf(stderr, "## %s\n", argv[0]);
+  fprintf(stderr, "#  rng seed = %" PRIu32 "\n", esl_randomness_GetSeed(rng));
+
+  utest_packing(rng, nucleic, nsamples);
+  utest_packing(rng, amino,   nsamples);
+  
+  utest_readwrite(rng, nucleic);
+  utest_readwrite(rng, amino);
+
+  fprintf(stderr, "#  status = ok\n");
+
+  esl_alphabet_Destroy(amino);
+  esl_alphabet_Destroy(nucleic);
+  esl_randomness_Destroy(rng);
+  esl_getopts_Destroy(go);
+  exit(0); 
+}
+#endif /*eslDSQDATA_TESTDRIVE*/
+
+/*****************************************************************
+ * 9. Examples
+ *****************************************************************/
+
+/* esl_dsqdata_example2
+ * Example of creating a new dsqdata database from a sequence file.
+ */
+#ifdef eslDSQDATA_EXAMPLE2
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_dsqdata.h"
+#include "esl_getopts.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",    0 },
+  { "--dna",     eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use DNA alphabet",                        0 },
+  { "--rna",     eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use RNA alphabet",                        0 },
+  { "--amino",   eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use protein alphabet",                    0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <seqfile_in> <binary seqfile_out>";
+static char banner[] = "experimental: create binary database for esl_dsqdata";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go        = esl_getopts_CreateDefaultApp(options, 2, argc, argv, banner, usage);
+  ESL_ALPHABET   *abc       = NULL;
+  char           *infile    = esl_opt_GetArg(go, 1);
+  char           *basename  = esl_opt_GetArg(go, 2);
+  int             format    = eslSQFILE_UNKNOWN;
+  int             alphatype = eslUNKNOWN;
+  ESL_SQFILE     *sqfp      = NULL;
+  char            errbuf[eslERRBUFSIZE];
+  int             status;
+
+  status = esl_sqfile_Open(infile, format, NULL, &sqfp);
+  if      (status == eslENOTFOUND) esl_fatal("No such file.");
+  else if (status == eslEFORMAT)   esl_fatal("Format unrecognized.");
+  else if (status != eslOK)        esl_fatal("Open failed, code %d.", status);
+
+  if      (esl_opt_GetBoolean(go, "--rna"))   alphatype = eslRNA;
+  else if (esl_opt_GetBoolean(go, "--dna"))   alphatype = eslDNA;
+  else if (esl_opt_GetBoolean(go, "--amino")) alphatype = eslAMINO;
+  else {
+    status = esl_sqfile_GuessAlphabet(sqfp, &alphatype);
+    if      (status == eslENOALPHABET) esl_fatal("Couldn't guess alphabet from first sequence in %s", infile);
+    else if (status == eslEFORMAT)     esl_fatal("Parse failed (sequence file %s)\n%s\n", infile, sqfp->get_error(sqfp));     
+    else if (status == eslENODATA)     esl_fatal("Sequence file %s contains no data?", infile);
+    else if (status != eslOK)          esl_fatal("Failed to guess alphabet (error code %d)\n", status);
+  }
+  abc = esl_alphabet_Create(alphatype);
+  esl_sqfile_SetDigital(sqfp, abc);
+
+  status = esl_dsqdata_Write(sqfp, basename, errbuf);
+  if      (status == eslEWRITE)  esl_fatal("Failed to open dsqdata output files:\n  %s", errbuf);
+  else if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s)\n  %s", infile, sqfp->get_error(sqfp));
+  else if (status != eslOK)      esl_fatal("Unexpected error while creating dsqdata file (code %d)\n", status);
+
+  esl_sqfile_Close(sqfp);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  return eslOK;
+}
+#endif /*eslDSQDATA_EXAMPLE2*/
+
+
+/* esl_dsqdata_example
+ * Example of opening and reading a dsqdata database.
+ */
+#ifdef eslDSQDATA_EXAMPLE
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_dsqdata.h"
+#include "esl_getopts.h"
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",        0 },
+  { "-n",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "no residue counting: faster time version",    0 },
+  { "-t",          eslARG_INT,          "4",  NULL, NULL,  NULL,  NULL, NULL, "set number of threads to <n>",                0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+static char usage[]  = "[-options] <basename>";
+static char banner[] = "example of using ESL_DSQDATA to read sequence db";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS       *go       = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  ESL_ALPHABET      *abc      = NULL;
+  char              *basename = esl_opt_GetArg(go, 1);
+  int                no_count = esl_opt_GetBoolean(go, "-n");
+  int                ncpu     = esl_opt_GetInteger(go, "-t");
+  ESL_DSQDATA       *dd       = NULL;
+  ESL_DSQDATA_CHUNK *chu      = NULL;
+  int                i;
+  int64_t            pos;
+  int64_t            ct[128], total;
+  int                x;
+  int                status;
+  
+  status = esl_dsqdata_Open(&abc, basename, ncpu, &dd);
+  if      (status == eslENOTFOUND) esl_fatal("Failed to open dsqdata files:\n  %s",    dd->errbuf);
+  else if (status == eslEFORMAT)   esl_fatal("Format problem in dsqdata files:\n  %s", dd->errbuf);
+  else if (status != eslOK)        esl_fatal("Unexpected error in opening dsqdata (code %d)", status);
+
+  for (x = 0; x < 127; x++) ct[x] = 0;
+
+  while ((status = esl_dsqdata_Read(dd, &chu)) == eslOK)
+    {
+      if (! no_count)
+	for (i = 0; i < chu->N; i++)
+	  for (pos = 1; pos <= chu->L[i]; pos++)
+	    ct[ chu->dsq[i][pos] ]++;
+
+      esl_dsqdata_Recycle(dd, chu);
+    }
+  if (status != eslEOF) esl_fatal("unexpected error %d in reading dsqdata", status);
+
+  if (! no_count)
+    {
+      total = 0;
+      for (x = 0; x < abc->Kp; x++) 
+	{
+	  printf("%c  %" PRId64 "\n", abc->sym[x], ct[x]);
+	  total += ct[x];
+	}
+      printf("Total = %" PRId64 "\n", total);
+    }
+
+  esl_alphabet_Destroy(abc);
+  esl_dsqdata_Close(dd);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslDSQDATA_EXAMPLE*/
+
+
+
diff --git a/esl_dsqdata.h b/esl_dsqdata.h
new file mode 100644
index 0000000..1c0ac83
--- /dev/null
+++ b/esl_dsqdata.h
@@ -0,0 +1,141 @@
+/* esl_dsqdata : faster sequence input
+ */
+#ifndef eslDSQDATA_INCLUDED
+#define eslDSQDATA_INCLUDED
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_sqio.h"
+
+#include <stdio.h>
+#include <stdint.h>
+#include <pthread.h>
+
+
+
+/* ESL_DSQDATA_CHUNK
+ * A data chunk returned by esl_dsqdata_Read().
+ */
+typedef struct esl_dsqdata_chunk_s {
+  int64_t   i0;           // Chunk contains sequences i0..i0+N-1 from the database, 0-offset
+  int       N;            // Chunk contains N sequences
+
+  ESL_DSQ **dsq;          // Pointers to each of the N sequences
+  char    **name;         // Names, \0 terminated.  Ptr into <metadata> buffer.
+  char    **acc;          // Optional accessions, \0 terminated;   "\0" if none. 
+  char    **desc;         // Optional descriptions, \0 terminated; "\0" if none
+  int32_t  *taxid;        // NCBI taxonomy identifiers. (>=1 is a taxid; -1 means none)
+  int64_t  *L;            // Sequence lengths, in residues. The unpacker figures these out.
+
+  /* Memory management */
+  char     *smem;         // Unpacked (dsq[]) and packed (psq) data ptrs share this allocation.
+  uint32_t *psq;          // Pointer into smem; packed data fread()'s go here.
+  int       pn;           // how many uint32's are loaded in <psq>
+  char     *metadata;     // Raw fread() buffer of all name/acc/desc/taxid data.
+  int       mdalloc;      // Current allocation size for <metadata> in bytes
+  struct esl_dsqdata_chunk_s *nxt; // Chunks can be put in linked lists
+} ESL_DSQDATA_CHUNK;
+
+
+
+/* ESL_DSQDATA_RECORD
+ * The dsqi index file is composed of an array of these, aside from its header.
+ */
+typedef struct esl_dsqdata_record_s {
+  int64_t  metadata_end;
+  int64_t  psq_end;
+} ESL_DSQDATA_RECORD;
+
+
+
+
+/* ESL_DSQDATA
+ * The object created by esl_dsqdata_Open() and used by esl_dsqdata_Read()
+ * to read chunks of sequence data from the database.
+ */              
+typedef struct esl_dsqdata_s {
+  char         *basename;    // Basename of the four dsqdata data files
+  FILE         *stubfp;      // Open <basename> stub file
+  FILE         *ifp;         // Open basename.dsqi index file
+  FILE         *sfp;         // Open basename.dsqs sequence file
+  FILE         *mfp;         // Open basename.dsqm metadata file
+  ESL_ALPHABET *abc_r;       // Copy of ptr to the alphabet the caller told us to read in.
+  
+  /* Header information from dsqi index file
+   *  .. dsqm, dsqs have magic and uniquetag for integrity checking
+   *  .. and stub file has uniquetag as text.
+   */
+  uint32_t     magic;       // Binary magic format code, for detecting byteswapping
+  uint32_t     uniquetag;   // Random number tag that links the four files
+  uint32_t     flags;       // Currently unused (0); reserved for future bitflags
+  uint32_t     max_namelen; // Max name length in the dataset
+  uint32_t     max_acclen;  //  .. and max accession length
+  uint32_t     max_desclen; //  .. and max description length 
+  uint64_t     max_seqlen;  //  .. and max seq length. 64b = bring on Paris japonica.
+  uint64_t     nseq;        // Total number of sequences in the dataset
+  uint64_t     nres;        //  .. and total number of residues
+
+  /* Control parameters. */
+  int          chunk_maxseq;    // default = eslDSQDATA_CHUNK_MAXSEQ
+  int          chunk_maxpacket; // default = eslDSQDATA_CHUNK_MAXPACKET
+  int          do_byteswap;     // TRUE if we need to byteswap (bigendian <=> littleendian)
+  int          pack5;           // TRUE if we're using all 5bit packing; FALSE for mixed 2+5bit
+
+  /* Managing the reader's threaded producer/consumer pipeline:
+   * consisting of 1 loader thread and 1 unpacker thread that we manage,
+   * and <nconsumers> consumer threads that caller created to get
+   * successive chunks with esl_dsqdata_Read().
+   */
+  int                nconsumers;               // Caller's reading with this # of readers
+
+  pthread_t          loader_t;                 // Loader thread id
+  ESL_DSQDATA_CHUNK *loader_outbox;            // A loaded chunk goes here, for unpacker
+  pthread_mutex_t    loader_outbox_mutex;      // mutex protecting the outbox
+  pthread_cond_t     loader_outbox_full_cv;    // signal to unpacker that next chunk is ready
+  pthread_cond_t     loader_outbox_empty_cv;   // signal from unpacker that it's got the chunk
+
+  pthread_t          unpacker_t;               // Unpacker thread id
+  ESL_DSQDATA_CHUNK *unpacker_outbox;          // Unpacked chunk goes here, for _Read() 
+  pthread_mutex_t    unpacker_outbox_mutex;    // mutex protecting the outbox
+  pthread_cond_t     unpacker_outbox_full_cv;  // signal to _Read() that chunk is ready (or at_eof)
+  pthread_cond_t     unpacker_outbox_empty_cv; // signal from _Read() that it's got the chunk
+  int                at_eof;                   // flag that goes up at end of the input file; 
+                                               //  .. <at_eof> change is in unpacker's mutex
+  ESL_DSQDATA_CHUNK *recycling;                // Linked list of chunk memory for reuse
+  pthread_mutex_t    recycling_mutex;          // mutex protecting the recycling list
+  pthread_cond_t     recycling_cv;             // signal to loader that a chunk is available
+
+  /* Error handling.
+   * Pthread variables don't define a value for "unset", so for pristine cleanup after
+   * errors, we must use separate booleans to track which thread resources are  created.
+   */
+  int  lt_c;  int lom_c;  int lof_c;  int loe_c;
+  int  ut_c;  int uom_c;  int uof_c;  int uoe_c;
+  int  rm_c;  int r_c;
+  char errbuf[eslERRBUFSIZE];   // User-directed error message in case of a failed open or read.
+} ESL_DSQDATA;  
+  
+
+
+/* Defaults for size of eslDSQDATA_CHUNK 
+ */
+#define eslDSQDATA_CHUNK_MAXSEQ       4096      // max number of sequences
+#define eslDSQDATA_CHUNK_MAXPACKET  262144      // max number of uint32 sequence packets 
+
+/* Reading the control bits on a packet v
+ */
+#define eslDSQDATA_EOD   (1 << 31)
+#define eslDSQDATA_5BIT  (1 << 30)
+#define ESL_DSQDATA_EOD(v)   ((v) & eslDSQDATA_EOD)
+#define ESL_DSQDATA_5BIT(v)  ((v) & eslDSQDATA_5BIT)
+  
+/* Functions in the API
+ */
+extern int  esl_dsqdata_Open   (ESL_ALPHABET **byp_abc, char *basename, int nconsumers, ESL_DSQDATA **ret_dd);
+extern int  esl_dsqdata_Read   (ESL_DSQDATA *dd, ESL_DSQDATA_CHUNK **ret_chu);
+extern int  esl_dsqdata_Recycle(ESL_DSQDATA *dd, ESL_DSQDATA_CHUNK *chu);
+extern int  esl_dsqdata_Close  (ESL_DSQDATA *dd);
+
+extern int  esl_dsqdata_Write  (ESL_SQFILE *sqfp, char *basename, char *errbuf);
+
+#endif /*eslDSQDATA_INCLUDED*/
diff --git a/esl_dsqdata.tex b/esl_dsqdata.tex
new file mode 100644
index 0000000..471e9e3
--- /dev/null
+++ b/esl_dsqdata.tex
@@ -0,0 +1,332 @@
+The \eslmod{dsqdata} module implements a binary sequence data
+format. It accelerates sequence data input in four ways, compared to
+Easel flatfile parsers (\eslmod{sqio}):
+
+\paragraph{Asynchronous input.}
+   Disk and CPU resources are used concurrently, using POSIX threads.
+   A ``loader'' thread does essentially nothing but read chunks of
+   data.  An ``unpacker'' thread does CPU work to prepare loaded
+   sequence data chunks for consumption. If it takes time $R$ to read
+   and $P$ to process the data, instead of overall time $R+P$, with
+   asynchronous input we only need time $\mathrm{MAX}(R,P)$.
+
+\paragraph{Predigitization.} 
+  Sequence data in the \eslmod{dsqdata} format are already encoded in
+  Easel digital sequence format.  User-oriented error checking is done
+  up front when the \eslmod{dsqdata} file is created.
+                                                                     
+\paragraph{Bit packing.} 
+  Disk read time is rate-limiting in \eslmod{dsqdata}, so minimizing
+  data volume is critical.  Sequence data are packed bitwise
+  in 32-bit packets to reduce volume by a factor of 1.5 (protein) to
+  3.75 (nucleic). A packet contains six 5-bit residues (protein or
+  degenerate nucleic) or fifteen 2-bit residues (canonical nucleic) and two
+  control bits.
+                                                                     
+\paragraph{Separate metadata.} 
+  Sequence data and metadata (name, accession, description, taxonomy
+  identifier) are stored separately in \ccode{.dsqs} and \ccode{.dsqm}
+  files. This streamlines unpacking, because these data are handled
+  differently.  It also allows a deferred metadata read: sequences may
+  be identified simply by index number during an initial processing
+  sweep, and metadata can be loaded later by random access for a small
+  number of targets of interest.
+
+Table~\ref{tbl:dsqdata_api} lists the functions in the
+\eslmod{dsqdata} API.
+
+% API table is auto generated by the Makefile,
+% using autodoc -t esl_dsqdata.c 
+%
+\input{apitables/esl_dsqdata_api}
+
+\subsection{Files in the \eslmodincmd{dsqdata} format}
+
+The format of a database \ccode{mydb} consists of four files:
+
+\vspace{0.5em}
+\begin{tabular}{lll}
+\ccode{mydb}      & Stub      & Human-readable information about the data \\
+\ccode{mydb.dsqi} & Index     & Disk offsets for each seq in metadata and sequence files\\
+\ccode{mydb.dsqm} & Metadata  & Name, accession, description, and taxonomy ids\\
+\ccode{mydb.dsqs} & Sequence  & Sequences (digitized, packed)\\
+\end{tabular}
+\vspace{0.5em}
+
+The database is specified on command lines by the name of the stub
+file (\ccode{mydb}), without any suffix. For example,
+
+\begin{userchunk} 
+   % myprogram mydb
+\end{userchunk}
+
+says to open \ccode{mydb}. The \ccode{esl\_dsqdata\_Open()} call then
+opens all four files.
+
+
+\subsection{Definition of the \eslmodincmd{dsqdata} file formats}
+
+\subsubsection{Stub file}
+
+An example stub file:
+
+\begin{cchunk}
+Easel dsqdata v1 x4019752601
+
+Original file:   refprot.fa
+Original format: FASTA
+Type:            amino
+Sequences:       11432138
+Residues:        4358716588
+\end{cchunk}
+
+The first line is parsed by the reader. Its text format matches
+\ccode{/Easel dsqdata v(\textbackslash d+) x(\textbackslash d+)/}.
+The first field is a version number for the format, $\geq 1$. It is
+currently unused, but in the future we might need it to parse
+different versions of the format, if we need to update it. The second
+field is a 32-bit unsigned integer tag in the range
+(0..$2^{32}-1$). Each of the four files carries the same randomly
+generated tag. The tag is used to make sure the four files belong
+together in the same database, as opposed to one or more of them being
+inadvertently clobbered somehow by the user.
+
+After the first line, the rest of the stub file is ignored, and can
+contain anything -- even your own notes, if you want to add any.
+
+\subsubsection{Index file: .dsqi}
+
+The header of the binary index file consists of:
+
+\vspace{0.5em}
+\begin{tabular}{lll}
+\textbf{name} & \textbf{type}    & \textbf{description} \\
+\ccode{magic}         & \ccode{uint32\_t} & magic number (version, byte order)\\
+\ccode{uniquetag}     & \ccode{uint32\_t} & random integer tag (0..$2^{32}-1$)\\
+\ccode{alphatype}     & \ccode{uint32\_t} & alphabet type code (1,2,3 = RNA, DNA, amino)\\
+\ccode{flags}         & \ccode{uint32\_t} & Currently 0. Reserved for future flags\\
+\ccode{max\_namelen}  & \ccode{uint32\_t} & Maximum seq name length in metadata\\
+\ccode{max\_acclen}   & \ccode{uint32\_t} & Maximum accession length in metadata\\
+\ccode{max\_desclen}  & \ccode{uint32\_t} & Maximum description length in metadata\\
+\ccode{max\_seqlen}   & \ccode{uint64\_t} & Maximum sequence length\\
+\ccode{nseq}          & \ccode{uint64\_t} & Total number of sequences in database\\
+\ccode{nres}          & \ccode{uint64\_t} & Total number of residues in database\\
+\end{tabular}
+\vspace{0.5em}
+
+The \textbf{magic} is used to check that the file is indeed a dsqdata
+format file, and to detect byte order swapping. Valid values for the
+magic version/byteorder number are:
+
+\vspace{0.5em}
+\begin{tabular} {lll}
+\textbf{value} & \textbf{derivation}   & \textbf{description}     \\
+\ccode{0xc4d3d1b1}    & ``dsq1'' + 0x80808080 & dsqdata version 1 format \\
+\ccode{0xb1d1d3c4}    & above, byteswapped    & above, byteswapped       \\
+\end{tabular}
+\vspace{0.5em}
+
+The random integer \textbf{uniquetag} must match the tag seen in
+the other files.
+
+The dsqdata packet format is only defined for biological sequence alphabets.
+Valid values for the \textbf{alphatype} code come from a subset of the codes
+used in \ccode{esl\_alphabet.h}:
+\begin{tabular}{lll}
+
+\vspace{0.5em}
+\textbf{integer} & \emcode{esl\_alphabet.h} & \textbf{description} \\
+1 & \ccode{eslRNA}   & RNA        \\
+2 & \ccode{eslDNA}   & DNA        \\
+3 & \ccode{eslAMINO} & protein    \\
+\end{tabular}
+\vspace{0.5em}
+
+The unused \textbf{flags} field gives us some flexibility for future
+versions of the format.
+
+The maximum lengths of the names, accessions, and descriptions in the
+metadata file might someday be useful (in making allocations, for
+example) but they are currently unused.
+
+Likewise, the maximum sequence length, total number of sequences, and
+total number of residues in the database may someday be useful (for
+making decisions about how to partition a parallel search, for
+example), but they are currently unused too.
+
+After the header, the remainder of the file consists of \ccode{nseq}
+records of type \ccode{ESL\_DSQDATA\_RECORD} (defined in
+\ccode{esl\_dsqdata.h}): 
+
+\vspace{0.5em}
+\begin{tabular}{lll}
+\textbf{name}         & \textbf{type}    & \textbf{description} \\
+\ccode{metadata\_end} & \ccode{int64\_t}  & Position of terminal \ccode{\textbackslash 0} of metadata for seq i, in bytes\\
+\ccode{psq\_end}      & \ccode{int64\_t}  & Position of final packet for sequence i, in packets\\
+\end{tabular}
+\vspace{0.5em}
+
+Storing \emph{end} positions instead of \emph{start} positions allows
+us to determine lengths, without needing an $N+1$'th sentinel record,
+albeit at the cost of special casing what happens for the first
+sequence $i=0$. For example:
+
+\vspace{0.5em}
+\begin{tabular}{ll}
+Length: &  \ccode{i == 0 ? r[i].end + 1 : r[i].end - r[i-1].end} \\
+Start:  &  \ccode{i == 0 ? 0 : r[i-1].end + 1}\\
+\end{tabular}
+\vspace{0.5em}
+
+This is equivalent to treating \ccode{r[-1].end = -1}. Some of the
+reader's code tracks a \ccode{last\_end} variable for the end of the
+previous metadata or packed sequence field $i-1$, which is initialized
+to -1. This -1 boundary condition is why we use signed
+\ccode{int64\_t} types.
+
+Packet sequence endpoints are stored in units of 32-bit
+\emph{packets}, not in bytes. To convert to a disk offset or a length
+in bytes you multiply by 4 (\ccode{sizeof(uint32\_t)}).
+
+Keeping the size of the dsqdata files as small as possible is critical
+because the reading speed is limited by the raw size of the
+data. Therefore we don't store separate positions for the different
+metadata fields (name/accession/description/taxonomy id), only one
+position for all the metadata associated with sequence $i$. The reader
+reads all of it in one chunk, and parses it for the stored \ccode{\textbackslash 0}
+sentinels.
+
+For the same reason, we don't store any information about
+\emph{unpacked} sequence lengths, only the bare minimum of information
+that the dsqdata loader and unpacker need to locate, load, and unpack
+the packed data for any given sequence $i$. The unpacker determines
+the unpacked sequence length when it unpacks the data.
+
+
+\subsubsection{Metadata file, .dsqm}
+
+The metadata file starts with two header fields, the same two that the
+index file starts with:
+
+\vspace{0.5em}
+\begin{tabular}{lll}
+\textbf{name} & \textbf{type}    & \textbf{description} \\
+\ccode{magic}         & \ccode{uint32\_t} & magic number (version, byte order)\\
+\ccode{uniquetag}     & \ccode{uint32\_t} & random integer tag (0..$2^32-1$)\\
+\end{tabular}
+\vspace{0.5em}
+
+After the header, the remainder of the file consists of the following
+data for each sequence $i =$ \ccode{0..nseq-1}:
+
+\vspace{0.5em}
+\begin{tabular}{lll}
+\textbf{field} & \textbf{type} & \textbf{description} \\
+name         & \ccode{char *}; ends in \ccode{\textbackslash 0} & Sequence name (1 word, no whitespace) \\
+accession    & \ccode{char *}; ends in \ccode{\textbackslash 0} & Sequence accession (1 word, no whitespace)\\
+description  & \ccode{char *}; ends in \ccode{\textbackslash 0} & Sequence description line \\
+taxonomy id  & \ccode{int32\_t}                   & NCBI taxonomy identifier; -1 if none\\
+\end{tabular}
+\vspace{0.5em}
+
+The name, accession, and description are variable length strings. The
+name and accession are single ``words'' with no whitespace
+(\ccode{\textbackslash S+}). The description is one line, may contain spaces, but
+may not contain any newlines. All sequences must have a name, so
+\ccode{strlen(name) > 0}. The accession and description are optional;
+if they are not present, these are 0-length strings (\ccode{"\textbackslash 0"})
+
+The taxonomy identifier is an integer in NCBI's taxonomy. Valid
+taxonomy identifiers are $\geq 1$\footnote{I cannot find any
+  documentation at NCBI on the maximum range of the taxid, nor can I
+  find a clear statement of whether 0 is valid or not. 0 is currently
+  unused in the NCBI taxonomy.  1 indicates the top level. That makes
+  it look like it's safe to treat 0 as ``unset'' but it seems even
+  safer to go with -1 and a signed integer. Unless NCBI ends up having
+  more than two billion species. Currently there are about 1.8
+  million.} 
+ This field is optional; use a value of -1 to indicate unset.
+
+These names, types, and semantics match the corresponding fields in an
+\ccode{ESL\_SQ}.
+
+\subsubsection{Sequence file, .dsqs}
+
+The sequence file also starts with the same two header fields that the
+index and metadata files started with:
+
+\vspace{0.5em}
+\begin{tabular}{lll}
+\textbf{name} & \textbf{type}    & \textbf{description} \\
+\ccode{magic}         & \ccode{uint32\_t} & magic number (version, byte order)\\
+\ccode{uniquetag}     & \ccode{uint32\_t} & random integer tag (0..$2^32-1$)\\
+\end{tabular}
+\vspace{0.5em}
+
+After the header, the remainder of the file consists of the packed
+sequences, with one packet array for each sequence $i =$
+\ccode{0..nseq-1}. Each packet array ends with a specially marked
+sentinel packet. The packet format is described next.
+
+\subsubsection{Packet format}
+
+Each packet is an unsigned 32 bit integer.  The two leading (most
+significant) bits are control bits. Bit 31 signals EOD (end of data):
+the last packet in a packed sequence. Bit 30 signals the packet
+format: 1 for 5-bit, 0 for 2-bit.  The remaining bits are the packed
+residue codes:
+
+\begin{asciiart}
+      [31] [30] [29..25]  [24..20]  [19..15]  [14..10]  [ 9..5 ]  [ 4..0 ]
+       ^    ^   |------------  6 5-bit packed residues ------------------|
+       |    |   []  []  []  []  []  []  []  []  []  []  []  []  []  []  []
+       |    |   |----------- or 15 2-bit packed residues ----------------|
+       |    |    
+       |    "packtype" bit 30 = 0 if packet is 2-bit packed; 1 if 5-bit packed
+       "sentinel" bit 31 = 1 if last packet in packed sequence; else 0
+       
+       (packet & (1 << 31)) tests for end of sequence
+       (packet & (1 << 30)) tests for 5-bit packing vs. 2-bit
+       ((packet >> shift) && 31) decodes 5-bit, for shift=25..0 in steps of 5
+       ((packet >> shift) && 3)  decodes 2-bit, for shift=28..0 in steps of 2
+\end{asciiart}
+
+Packets without the sentinel bit set are full. They unpack to 15 or 6
+residues.
+ 
+5-bit EOD packets may be partial: they unpack to 0..6 residues. The
+remaining residue codes are set to 0x1f (11111), indicating EOD within
+the packet. The only case in which a partial EOD packet encodes 0
+residues is a zero-length sequence: there has to be at least one EOD
+packet.
+
+2-bit EOD packets must be full, because there is no way to signal EOD
+locally within a 2-bit packet. It can't use 0x03 (11), because that
+encodes U/T. Generally, therefore, the last packet(s) of a nucleic
+acid sequence must be 5-bit encoded, solely to be able to use sentinel
+residues in a partial packet, unless the end happens to come flush at
+the end of a 2-bit packet.\footnote{If we ever needed to pack an
+  alphabet of 2 or 3 residues, we could use 0x03 as a sentinel.  This
+  seems unlikely to ever happen, so I'm simply not going to include
+  any code to read EOD 2-bit partial packets.}
+
+A protein sequence of length $L$ packs into exactly P $= MAX(1,
+(L+5)/6)$ 5-bit packets. A DNA sequence packs into P $\leq MAX(1,
+(L+14)/15)$ mixed 2- and 5-bit packets. P $\geq 1$ because even a
+zero-length sequence ($L=0$) requires an EOD packet.
+
+A packed sequence consists of an integer number of packets, P, ending
+with an EOD packet.
+ 
+A packed amino acid sequence unpacks to $\leq$ 6P residues. All its
+packets are 5-bit encoded.
+ 
+A packed nucleic acid sequence unpacks to $\leq$ 15P residues.  The
+packets are a mix of 2-bit and 5-bit. Degenerate residues must be
+5-bit packed, and the EOD packet usually is too. A 5-bit packet does
+not have to contain degenerate residues, because it might have been
+necessary to get ``in frame'' to pack a downstream degenerate
+residue. For example, the sequence ACGTACGTNNA... must be packed as
+[ACGTAC][CGTNNA]... to get the N's packed correctly.
+ 
+
diff --git a/esl_exponential.c b/esl_exponential.c
new file mode 100644
index 0000000..2ca2ba0
--- /dev/null
+++ b/esl_exponential.c
@@ -0,0 +1,699 @@
+/* Statistical routines for exponential distributions.
+ * 
+ * Contents:
+ *   1. Routines for evaluating densities and distributions
+ *   2. Generic API routines: for general interface w/ histogram module
+ *   3. Routines for dumping plots for files
+ *   4. Routines for sampling (requires random module)
+ *   5. Maximum likelihood fitting
+ *   6. Stats driver
+ *   7. Unit tests
+ *   8. Test driver
+ *   9. Example
+ *  10. Copyright and license information
+ *
+ * xref STL9/138  
+ * 
+ * To do:
+ *    - Fit*() functions should return eslEINVAL on n=0, eslENORESULT
+ *      on failure due to small n. Compare esl_gumbel. xref J12/93.
+ *      SRE, Wed Nov 27 11:03:07 2013
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_stats.h"
+#include "esl_exponential.h"
+
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#ifdef eslAUGMENT_HISTOGRAM
+#include "esl_histogram.h"
+#endif
+
+/****************************************************************************
+ * 1. Routines for evaluating densities and distributions
+ ****************************************************************************/ 
+/* lambda > 0
+ * mu <= x < infinity
+ * 
+ * watch out: 
+ *   - any lambda > 0 is valid... including infinity. Fitting code
+ *     may try to test such lambdas, and it must get back valid numbers,
+ *     never an NaN, or it will fail. IEEE754 allows us
+ *     to calculate log(inf) = inf, exp(-inf) = 0, and exp(inf) = inf.
+ *     But inf-inf = NaN, so Don't Do That.
+ */
+
+/* Function:  esl_exp_pdf()
+ *
+ * Purpose:   Calculates the probability density function for the
+ *            exponential, $P(X=x)$, given value <x>, offset <mu>,
+ *            and decay parameter <lambda>.
+ */
+double
+esl_exp_pdf(double x, double mu, double lambda)
+{
+  if (x < mu) return 0.;
+  return (lambda * exp(-lambda*(x-mu)));
+}
+
+/* Function:  esl_exp_logpdf()
+ *
+ * Purpose:   Calculates the log probability density function for the
+ *            exponential, $P(X=x)$, given value <x>, offset <mu>,
+ *            and decay parameter <lambda>.
+ */
+double
+esl_exp_logpdf(double x, double mu, double lambda)
+{
+  if (x < mu) return -eslINFINITY;
+
+  if (lambda == eslINFINITY) 
+    {	/* limit as lambda->inf: avoid inf-inf! */
+      if (x == mu) return  eslINFINITY;
+      else         return -eslINFINITY;
+    }
+  return (log(lambda) - lambda*(x-mu));
+}
+
+/* Function:  esl_exp_cdf()
+ *
+ * Purpose:   Calculates the cumulative distribution function for the
+ *            exponential, $P(X \leq x)$, given value <x>, offset <mu>,
+ *            and decay parameter <lambda>.
+ */
+double
+esl_exp_cdf(double x, double mu, double lambda)
+{
+  double y = lambda*(x-mu);	/* y>=0 because lambda>0 and x>=mu */
+
+  if (x < mu) return 0.;
+
+  /* 1-e^-y ~ y for small |y| */
+  if (y < eslSMALLX1) return y;
+  else                return 1 - exp(-y);
+}
+
+/* Function:  esl_exp_logcdf()
+ *
+ * Purpose:   Calculates the log of the cumulative distribution function
+ *            for the exponential, $log P(X \leq x)$, given value <x>,
+ *            offset <mu>, and decay parameter <lambda>.
+ */
+double
+esl_exp_logcdf(double x, double mu, double lambda)
+{
+  double y  = lambda * (x-mu);
+  double ey = exp(-y);
+
+  if (x < mu) return -eslINFINITY;
+
+  /* When y is small, 1-e^-y = y, so answer is log(y);
+   * when y is large, exp(-y) is small, log(1-exp(-y)) = -exp(-y).
+   */
+  if      (y == 0)           return -eslINFINITY; /* don't allow NaN */
+  else if (y  < eslSMALLX1)  return log(y);
+  else if (ey < eslSMALLX1)  return -ey;
+  else                       return log(1-ey);
+}
+
+/* Function:  esl_exp_surv()
+ *
+ * Purpose:   Calculates the survivor function, $P(X>x)$ (that is, 1-CDF,
+ *            the right tail probability mass) for an exponential distribution,
+ *            given value <x>, offset <mu>, and decay parameter <lambda>.
+ */
+double
+esl_exp_surv(double x, double mu, double lambda)
+{
+  if (x < mu) return 1.0;
+  return exp(-lambda * (x-mu));
+}
+
+/* Function:  esl_exp_logsurv()
+ *
+ * Purpose:   Calculates the log survivor function, $\log P(X>x)$ (that is,
+ *            log(1-CDF), the log of the right tail probability mass) for an 
+ *            exponential distribution, given value <x>, offset <mu>, and 
+ *            decay parameter <lambda>.
+ */
+double
+esl_exp_logsurv(double x, double mu, double lambda)
+{
+  if (x < mu) return 0.0;
+  return -lambda * (x-mu);
+}
+
+
+/* Function:  esl_exp_invcdf()
+ *
+ * Purpose:   Calculates the inverse of the CDF; given a <cdf> value
+ *            $0 <= p < 1$, returns the value $x$ at which the CDF
+ *            has that value.
+ */
+double 
+esl_exp_invcdf(double p, double mu, double lambda)
+{
+  return mu - 1/lambda * log(1. - p);
+}
+
+
+
+/* Function:  esl_exp_invsurv()
+ *
+ * Purpose:   Calculates the inverse of the survivor function, the score
+ *            at which the right tail's mass is $0 <= p < 1$, for an
+ *            exponential function with parameters <mu> and <lambda>.
+ */
+double
+esl_exp_invsurv(double p, double mu, double lambda)
+{
+
+  return mu - 1./lambda * log(p);
+}
+/*------------------ end of densities and distributions --------------------*/
+
+
+/*------------------ end of densities and distributions --------------------*/
+
+
+
+
+/*****************************************************************
+ * 2. Generic API routines: for general interface w/ histogram module
+ *****************************************************************/ 
+
+/* Function:  esl_exp_generic_pdf()
+ *
+ * Purpose:   Generic-API version of PDF.
+ */
+double
+esl_exp_generic_pdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_exp_pdf(x, p[0], p[1]);
+}
+
+/* Function:  esl_exp_generic_cdf()
+ *
+ * Purpose:   Generic-API version of CDF.
+ */
+double
+esl_exp_generic_cdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_exp_cdf(x, p[0], p[1]);
+}
+
+/* Function:  esl_exp_generic_surv()
+ *
+ * Purpose:   Generic-API version of survival function.
+ */
+double
+esl_exp_generic_surv(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_exp_surv(x, p[0], p[1]);
+}
+
+/* Function:  esl_exp_generic_invcdf()
+ *
+ * Purpose:   Generic-API version of inverse CDF.
+ */
+double
+esl_exp_generic_invcdf(double p, void *params)
+{
+  double *v = (double *) params;
+  return esl_exp_invcdf(p, v[0], v[1]);
+}
+/*------------------------- end of generic API --------------------------*/
+
+
+
+/****************************************************************************
+ * 3. Routines for dumping plots for files
+ ****************************************************************************/ 
+
+/* Function:  esl_exp_Plot()
+ *
+ * Purpose:   Plot some exponential function <func> (for instance,
+ *            <esl_exp_pdf()>) for parameters <mu> and <lambda>, for
+ *            a range of values x from <xmin> to <xmax> in steps of <xstep>;
+ *            output to an open stream <fp> in xmgrace XY input format.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error, such as a filled disk.
+ */
+int
+esl_exp_Plot(FILE *fp, double mu, double lambda, 
+	     double (*func)(double x, double mu, double lambda), 
+	     double xmin, double xmax, double xstep)
+{
+  double x;
+  for (x = xmin; x <= xmax; x += xstep)
+    if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "exponential plot write failed");
+  if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "exponential plot write failed");
+  return eslOK;
+}
+/*-------------------- end plot dumping routines ---------------------------*/
+
+
+
+/****************************************************************************
+ * 4. Routines for sampling (requires augmentation w/ random module)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_RANDOM
+
+/* Function:  esl_exp_Sample()
+ *
+ * Purpose:   Sample an exponential random variate
+ *            by the transformation method, given offset <mu>
+ *            and decay parameter <lambda>.
+ */
+double
+esl_exp_Sample(ESL_RANDOMNESS *r, double mu, double lambda)
+{
+  double p, x;
+  p = esl_rnd_UniformPositive(r); 
+
+  x = mu - 1./lambda * log(p);	/* really log(1-p), but if p uniform on 0..1 
+				 * then so is 1-p. 
+                                 */
+  return x;
+} 
+#endif /*eslAUGMENT_RANDOM*/
+/*--------------------------- end sampling ---------------------------------*/
+
+
+
+
+/****************************************************************************
+ * 5. Maximum likelihood fitting
+ ****************************************************************************/ 
+
+/* Function:  esl_exp_FitComplete()
+ *
+ * Purpose:   Given an array of <n> samples <x[0]..x[n-1]>, fit
+ *            them to an exponential distribution.
+ *            Return maximum likelihood parameters <ret_mu> and <ret_lambda>.
+ *
+ * Args:      x          - complete exponentially-distributed data [0..n-1]
+ *            n          - number of samples in <x>  (n>0)
+ *            ret_mu     - lower bound of the distribution (all x_i >= mu)
+ *            ret_lambda - RETURN: maximum likelihood estimate of lambda
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if n=0 (no data).
+ *
+ * Xref:      STL9/138.
+ */
+int
+esl_exp_FitComplete(double *x, int n, double *ret_mu, double *ret_lambda)
+{
+  double mu, mean;
+  int    i;
+  int    status;
+
+  if (!n) ESL_XEXCEPTION(eslEINVAL, "empty data vector provided for exponential fit");
+
+  /* ML mu is the lowest score. mu=x is ok in the exponential. */
+  mu = x[0];
+  for (i = 1; i < n; i++) if (x[i] < mu) mu = x[i];
+
+  mean = 0.;
+  for (i = 0; i < n; i++) mean += x[i] - mu;
+  mean /= (double) n;
+
+  *ret_mu     = mu;
+  *ret_lambda = 1./mean;	/* ML estimate trivial & analytic */
+  return eslOK;
+
+ ERROR:
+  *ret_mu     = 0.0;
+  *ret_lambda = 0.0;
+  return status;
+}
+
+/* Function:  esl_exp_FitCompleteScale()
+ *
+ * Purpose:   Given an array of <n> samples <x[0]..x[n-1]>, fit
+ *            them to an exponential distribution of known location
+ *            parameter <mu>. Return maximum likelihood scale 
+ *            parameter <ret_lambda>. 
+ *            
+ *            All $x_i \geq \mu$.
+ *
+ * Args:      x          - complete exponentially-distributed data [0..n-1]
+ *            n          - number of samples in <x>
+ *            mu         - lower bound of the distribution (all x_i >= mu)
+ *            ret_lambda - RETURN: maximum likelihood estimate of lambda
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Xref:      J1/49.
+ */
+int
+esl_exp_FitCompleteScale(double *x, int n, double mu, double *ret_lambda)
+{
+  double mean;
+  int    i;
+
+  mean = 0.;
+  for (i = 0; i < n; i++) mean += x[i] - mu;
+  mean /= (double) n;
+
+  *ret_lambda = 1./mean;	/* ML estimate trivial & analytic */
+  return eslOK;
+}
+
+
+#ifdef eslAUGMENT_HISTOGRAM
+/* Function:  esl_exp_FitCompleteBinned()
+ *
+ * Purpose:   Fit a complete exponential distribution to the observed
+ *            binned data in a histogram <g>, where each
+ *            bin i holds some number of observed samples x with values from 
+ *            lower bound l to upper bound u (that is, $l < x \leq u$);
+ *            find maximum likelihood parameters $\mu,\lambda$ and 
+ *            return them in <*ret_mu>, <*ret_lambda>.
+ *            
+ *            If the binned data in <g> were set to focus on 
+ *            a tail by virtual censoring, the "complete" exponential is 
+ *            fitted to this tail. The caller then also needs to
+ *            remember what fraction of the probability mass was in this
+ *            tail.
+ *            
+ *            The ML estimate for $mu$ is the smallest observed
+ *            sample.  For complete data, <ret_mu> is generally set to
+ *            the smallest observed sample value, except in the
+ *            special case of a "rounded" complete dataset, where
+ *            <ret_mu> is set to the lower bound of the smallest
+ *            occupied bin. For tails, <ret_mu> is set to the cutoff
+ *            threshold <phi>, where we are guaranteed that <phi> is
+ *            at the lower bound of a bin (by how the histogram
+ *            object sets tails). 
+ *
+ *            The ML estimate for <ret_lambda> has an analytical 
+ *            solution, so this routine is fast. 
+ *            
+ *            If all the data are in one bin, the ML estimate of
+ *            $\lambda$ will be $\infty$. This is mathematically correct,
+ *            but is probably a situation the caller wants to avoid, perhaps
+ *            by choosing smaller bins.
+ *
+ *            This function currently cannot fit an exponential tail
+ *            to truly censored, binned data, because it assumes that
+ *            all bins have equal width, but in true censored data, the
+ *            lower cutoff <phi> may fall anywhere in the first bin.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if dataset is true-censored.
+ */
+int
+esl_exp_FitCompleteBinned(ESL_HISTOGRAM *g, double *ret_mu, double *ret_lambda)
+{
+  int    i;
+  double ai, bi, delta;
+  double sa, sb;
+  double mu = 0.;
+
+  if (g->dataset_is == COMPLETE)
+    {
+      if   (g->is_rounded) mu = esl_histogram_Bin2LBound(g, g->imin);
+      else                 mu = g->xmin;
+    }
+  else if (g->dataset_is == VIRTUAL_CENSORED) /* i.e., we'll fit to tail */
+    mu = g->phi;
+  else if (g->dataset_is == TRUE_CENSORED)
+    ESL_EXCEPTION(eslEINVAL, "can't fit true censored dataset");
+
+  delta = g->w;
+  sa = sb = 0.;
+  for (i = g->cmin; i <= g->imax; i++) /* for each occupied bin */
+    {
+      if (g->obs[i] == 0) continue;
+      ai = esl_histogram_Bin2LBound(g,i);
+      bi = esl_histogram_Bin2UBound(g,i);
+      sa += g->obs[i] * (ai-mu);
+      sb += g->obs[i] * (bi-mu);
+    }
+  *ret_mu     = mu;
+  *ret_lambda = 1/delta * (log(sb) - log(sa));
+  return eslOK;
+}
+#endif /*eslAUGMENT_HISTOGRAM*/
+
+
+/****************************************************************************
+ * 6. Stats driver
+ ****************************************************************************/ 
+#ifdef eslEXPONENTIAL_STATS
+/* Compiles statistics on the accuracy of ML estimation of an exponential tail.
+ * compile: gcc -g -O2 -Wall -I. -L. -o stats -DeslEXPONENTIAL_STATS esl_exponential.c -leasel -lm
+ * run:     ./stats > stats.out
+ * 
+ * Output is, for each trial:
+ *     <trial #>   <fitted mu>  <fitted lambda> 
+ *
+ * To get mean, stddev of lambda estimates:
+ *    % ./stats | avg -f2      
+ */
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_exponential.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_RANDOMNESS *r = esl_randomness_Create(0);
+  int    ntrials;		/* number of estimates to gather */
+  int    N;			/* number of samples collected to make each estimate */
+  double mu, lambda;		/* parametric location, scale */
+  double est_mu, est_lambda;	/* estimated location, scale */
+  int    trial;
+  int    i;
+  double *x;
+
+  /* Configuration: (change & recompile as needed)
+   */
+  ntrials = 1000;
+  mu      = 0.;
+  lambda  = 0.693;
+  N       = 95;
+
+  x = malloc(sizeof(double) *N);
+  for (trial = 0; trial < ntrials; trial++)
+    {
+      for (i = 0; i < N; i++)
+	x[i] = esl_exp_Sample(r, mu, lambda);
+      esl_exp_FitComplete(x, N, &est_mu, &est_lambda);
+
+      /*
+      est_mu = mu;
+      esl_exp_FitCompleteScale(x, N, est_mu, &est_lambda);
+      */      
+      printf("%4d  %8.4f  %8.4f\n", i, est_mu, est_lambda);
+    }
+  free(x);
+  return 0;
+}
+#endif /*eslEXPONENTIAL_STATS*/  
+
+
+
+
+
+/****************************************************************************
+ * 7. Unit tests
+ ****************************************************************************/ 
+
+/****************************************************************************
+ * 8. Test driver
+ ****************************************************************************/ 
+#ifdef eslEXPONENTIAL_TESTDRIVE
+/* Compile:
+   gcc -g -Wall -I. -L. -o test -DeslEXPONENTIAL_TESTDRIVE esl_exponential.c -leasel -lm
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_exponential.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_HISTOGRAM  *h;
+  ESL_RANDOMNESS *r;
+  double  mu        = 10.0;
+  double  lambda    =  1.0;  
+  int     n         = 10000;
+  double  binwidth  = 0.1;
+  double  emu, elambda;
+  int     i;
+  double  x;
+  double *data;
+  int     ndata;
+
+  int     opti;
+  int     be_verbose   = FALSE;
+  char   *plotfile     = NULL;
+  FILE   *pfp          = stdout;
+  int     plot_pdf     = FALSE;
+  int     plot_logpdf  = FALSE;
+  int     plot_cdf     = FALSE;
+  int     plot_logcdf  = FALSE;
+  int     plot_surv    = FALSE;
+  int     plot_logsurv = FALSE;
+  int     xmin_set     = FALSE;
+  double  xmin;
+  int     xmax_set     = FALSE;
+  double  xmax;
+  int     xstep_set    = FALSE;
+  double  xstep;
+
+  for (opti = 1; opti < argc && *(argv[opti]) == '-'; opti++)
+    {
+      if      (strcmp(argv[opti], "-m")  == 0) mu           = atof(argv[++opti]);
+      else if (strcmp(argv[opti], "-l")  == 0) lambda       = atof(argv[++opti]);
+      else if (strcmp(argv[opti], "-n")  == 0) n            = atoi(argv[++opti]);
+      else if (strcmp(argv[opti], "-o")  == 0) plotfile     = argv[++opti];
+      else if (strcmp(argv[opti], "-v")  == 0) be_verbose   = TRUE;
+      else if (strcmp(argv[opti], "-w")  == 0) binwidth     = atof(argv[++opti]);
+      else if (strcmp(argv[opti], "-C")  == 0) plot_cdf     = TRUE;
+      else if (strcmp(argv[opti], "-LC") == 0) plot_logcdf  = TRUE;
+      else if (strcmp(argv[opti], "-P")  == 0) plot_pdf     = TRUE;
+      else if (strcmp(argv[opti], "-LP") == 0) plot_logpdf  = TRUE;
+      else if (strcmp(argv[opti], "-S")  == 0) plot_surv    = TRUE;
+      else if (strcmp(argv[opti], "-LS") == 0) plot_logsurv = TRUE;
+      else if (strcmp(argv[opti], "-XL") == 0) { xmin_set  = TRUE; xmin  = atof(argv[++opti]); }
+      else if (strcmp(argv[opti], "-XH") == 0) { xmax_set  = TRUE; xmax  = atof(argv[++opti]); }
+      else if (strcmp(argv[opti], "-XS") == 0) { xstep_set = TRUE; xstep = atof(argv[++opti]); }
+      else esl_fatal("bad option");
+    }
+
+  if (be_verbose)
+    printf("Parametric:  mu = %f   lambda = %f\n", mu, lambda);
+
+  r = esl_randomness_Create(0);
+  h = esl_histogram_CreateFull(mu, 100., binwidth);
+  if (plotfile != NULL) {
+    if ((pfp = fopen(plotfile, "w")) == NULL) esl_fatal("Failed to open plotfile");
+  }
+  if (! xmin_set)  xmin  = mu;
+  if (! xmax_set)  xmax  = mu+20* (1./lambda);
+  if (! xstep_set) xstep = 0.1;
+
+  for (i = 0; i < n; i++)
+    {
+      x = esl_exp_Sample(r, mu, lambda);
+      esl_histogram_Add(h, x);
+    }
+  esl_histogram_GetData(h, &data, &ndata);
+
+  esl_exp_FitComplete(data, ndata, &emu, &elambda);
+  if (be_verbose) printf("Complete data fit:  mu = %f   lambda = %f\n", emu, elambda);
+  if (fabs( (emu-mu)/mu )             > 0.01) esl_fatal("Error in (complete) fitted mu > 1%\n");
+  if (fabs( (elambda-lambda)/lambda ) > 0.10) esl_fatal("Error in (complete) fitted lambda > 10%\n");
+
+  esl_exp_FitCompleteBinned(h, &emu, &elambda);
+  if (be_verbose) printf("Binned data fit:  mu = %f   lambda = %f\n", emu, elambda);
+  if (fabs( (emu-mu)/mu )             > 0.01) esl_fatal("Error in (binned) fitted mu > 1%\n");
+  if (fabs( (elambda-lambda)/lambda ) > 0.10) esl_fatal("Error in (binned) fitted lambda > 10%\n");
+
+  if (plot_pdf)     esl_exp_Plot(pfp, mu, lambda, &esl_exp_pdf,     xmin, xmax, xstep);
+  if (plot_logpdf)  esl_exp_Plot(pfp, mu, lambda, &esl_exp_logpdf,  xmin, xmax, xstep);
+  if (plot_cdf)     esl_exp_Plot(pfp, mu, lambda, &esl_exp_cdf,     xmin, xmax, xstep);
+  if (plot_logcdf)  esl_exp_Plot(pfp, mu, lambda, &esl_exp_logcdf,  xmin, xmax, xstep);
+  if (plot_surv)    esl_exp_Plot(pfp, mu, lambda, &esl_exp_surv,    xmin, xmax, xstep);
+  if (plot_logsurv) esl_exp_Plot(pfp, mu, lambda, &esl_exp_logsurv, xmin, xmax, xstep);
+
+  if (plotfile != NULL) fclose(pfp);
+
+  esl_randomness_Destroy(r);
+  esl_histogram_Destroy(h);
+  return 0;
+}
+#endif /*eslEXPONENTIAL_TESTDRIVE*/
+
+
+/****************************************************************************
+ * 9. Example 
+ ****************************************************************************/ 
+#ifdef eslEXPONENTIAL_EXAMPLE
+/*::cexcerpt::exp_example::begin::*/
+/* compile:
+   gcc -g -Wall -I. -o example -DeslEXPONENTIAL_EXAMPLE\
+     -DeslAUGMENT_HISTOGRAM -DeslAUGMENT_RANDOM -DeslAUGMENT_STATS\
+     esl_exponential.c esl_histogram.c esl_random.c esl_stats.c easel.c -lm
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_exponential.h"
+
+int
+main(int argc, char **argv)
+{
+  double mu         = -50.0;
+  double lambda     = 0.5;
+  ESL_RANDOMNESS *r = esl_randomness_Create(0);
+  ESL_HISTOGRAM  *h = esl_histogram_CreateFull(mu, 100., 0.1);
+  int    n          = 10000;
+  double emu, elambda;
+  int    i;
+  double x;
+  double *data;
+  int     ndata;
+
+  for (i = 0; i < n; i++)
+    {
+      x = esl_exp_Sample(r, mu, lambda);
+      esl_histogram_Add(h, x);
+    }
+  esl_histogram_GetData(h, &data, &ndata);
+
+  /* Plot the empirical (sampled) and expected survivals */
+  esl_histogram_PlotSurvival(stdout, h);
+  esl_exp_Plot(stdout, mu, lambda,
+	       &esl_exp_surv, h->xmin, h->xmax, 0.1);
+
+  /* ML fit to complete data, and plot fitted survival curve */
+  esl_exp_FitComplete(data, ndata, &emu, &elambda);
+  esl_exp_Plot(stdout, emu, elambda, 
+	       &esl_exp_surv,  h->xmin, h->xmax, 0.1);
+
+  /* ML fit to binned data, plot fitted survival curve  */
+  esl_exp_FitCompleteBinned(h, &emu, &elambda);
+  esl_exp_Plot(stdout, emu, elambda,
+	       &esl_exp_surv,  h->xmin, h->xmax, 0.1);
+
+  esl_randomness_Destroy(r);
+  esl_histogram_Destroy(h);
+  return 0;
+}
+/*::cexcerpt::exp_example::end::*/
+#endif /*eslEXPONENTIAL_EXAMPLE*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_exponential.h b/esl_exponential.h
new file mode 100644
index 0000000..c7fa0e4
--- /dev/null
+++ b/esl_exponential.h
@@ -0,0 +1,52 @@
+/* Exponential distributions.
+ * 
+ * SRE, Wed Aug 10 08:32:45 2005 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslEXPONENTIAL_INCLUDED
+#define eslEXPONENTIAL_INCLUDED
+
+#ifdef eslAUGMENT_RANDOM
+#include <esl_random.h>
+#endif
+#ifdef eslAUGMENT_HISTOGRAM
+#include <esl_histogram.h>
+#endif
+
+extern double esl_exp_pdf    (double x, double mu, double lambda);
+extern double esl_exp_logpdf (double x, double mu, double lambda);
+extern double esl_exp_cdf    (double x, double mu, double lambda);
+extern double esl_exp_logcdf (double x, double mu, double lambda);
+extern double esl_exp_surv   (double x, double mu, double lambda);
+extern double esl_exp_logsurv(double x, double mu, double lambda);
+extern double esl_exp_invcdf (double p, double mu, double lambda);
+extern double esl_exp_invsurv(double p, double mu, double lambda);
+
+
+extern double esl_exp_generic_pdf   (double x, void *params);
+extern double esl_exp_generic_cdf   (double x, void *params);
+extern double esl_exp_generic_surv  (double x, void *params);
+extern double esl_exp_generic_invcdf(double p, void *params);
+
+extern int    esl_exp_Plot(FILE *fp, double mu, double lambda, 
+			   double (*func)(double x, double mu, double lambda), 
+			   double xmin, double xmax, double xstep);
+
+#ifdef eslAUGMENT_RANDOM
+extern double esl_exp_Sample(ESL_RANDOMNESS *r, double mu, double lambda);
+#endif
+
+extern int esl_exp_FitComplete     (double *x, int n, double *ret_mu, double *ret_lambda);
+extern int esl_exp_FitCompleteScale(double *x, int n, double      mu, double *ret_lambda);
+
+#ifdef eslAUGMENT_HISTOGRAM
+extern int esl_exp_FitCompleteBinned(ESL_HISTOGRAM *h, 
+				     double *ret_mu, double *ret_lambda);
+#endif
+
+
+#endif /*eslEXPONENTIAL_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_exponential.tex b/esl_exponential.tex
new file mode 100644
index 0000000..55cb448
--- /dev/null
+++ b/esl_exponential.tex
@@ -0,0 +1,41 @@
+
+\begin{tabular}{lcll}\hline
+Variate    & $x$         & \ccode{double} & $\mu \leq x < \infty$ \\
+Location   & $\mu$       & \ccode{double} & $-\infty < \mu < \infty$\\
+Scale      & $\lambda$   & \ccode{double} & $\lambda > 0$ \\ \hline
+\end{tabular}
+
+The probability density function (PDF) is:
+
+\begin{equation}
+P(X=x) =  \lambda e^{-\lambda (x - \mu)}
+\end{equation}
+
+The cumulative distribution function (CDF) is:
+
+\begin{equation}
+P(X \leq x) = 1 - e^{-\lambda (x - \mu)}
+\end{equation}
+
+
+\subsection{Sampling}
+
+An exponentially distributed sample $x$ is generated by the
+transformation method, using the fact that if $R$ is uniformly
+distributed on $(0,1]$, $1-R$ is uniformly distributed on $[0,1)$:
+
+\[
+   R = \mbox{uniform positive sample in (0,1]}\\
+   x = \mu - \frac{1}{lambda} \log(R)
+\]
+
+\subsection{Maximum likelihood fitting}
+
+The maximum likelihood estimate $\hat{\lambda}$ is $\frac{1}{\sum_i
+x_i}$. The distribution of $\frac{\lambda}{\hat{\lambda}}$ is
+approximately normal with mean 1 and standard error $\frac{1}{\sqrt{N}}$
+\citep{Lawless82}.
+
+% xref J1/p49 for derivation of standard error.
+
+
diff --git a/esl_fileparser.c b/esl_fileparser.c
new file mode 100644
index 0000000..f03327e
--- /dev/null
+++ b/esl_fileparser.c
@@ -0,0 +1,805 @@
+/* A simple token-based file parsing system.
+ * 
+ * Contents:
+ *    1. The ESL_FILEPARSER object and its API.
+ *    2. Private functions.
+ *    3. Unit tests.
+ *    4. Test driver.
+ *    5. Examples.
+ *    6. Copyright/license information.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#include "esl_fileparser.h"
+
+static int nextline(ESL_FILEPARSER *efp);
+
+/*****************************************************************
+ * 1. The ESL_FILEPARSER object and its API.
+ *****************************************************************/
+
+/* Function:  esl_fileparser_Open()
+ * Incept:    SRE, Tue Apr  3 08:09:56 2007 [Janelia]
+ *
+ * Purpose:   Opens <filename> for reading. 
+ * 
+ *            As a special case, if <filename> is "-", set up the
+ *            fileparser to read and parse <stdin>.
+ *            
+ *            <envvar> is optional name of an environment variable,
+ *            such as <BLASTDB>. This environment variable contains a
+ *            colon-delimited list of directories in which the
+ *            <filename> may lie relative to.  We looks first relative
+ *            to the current working directory, then in any
+ *            directories specified by <envvar>. If <envvar> is <NULL>,
+ *            we only look in the current working directory.
+ *            
+ * Args:      filename  - filename, relative path, or fully qualified path
+ *            envvar    - optional environment variable name to find 
+ *                        colon-delimited list of directories <filename>
+ *                        may reside in; or <NULL>
+ *            ret_efp   - RETURN: opened <ESL_FILEPARSER>            
+ *
+ * Returns:   <eslOK> on success, and <ret_fp> points
+ *            to a new <ESL_FILEPARSER> object.
+ *            
+ *            Returns <eslENOTFOUND> if <filename> can't
+ *            be opened for reading, and <ret_fp> is set
+ *            to <NULL>.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_fileparser_Open(const char *filename, const char *envvar, ESL_FILEPARSER **ret_efp)
+{
+  int             status;
+  ESL_FILEPARSER *efp = NULL;
+
+  if ((efp = esl_fileparser_Create(NULL)) == NULL) { status = eslEMEM;      goto ERROR; }
+
+  if (strcmp(filename, "-") == 0) 
+    efp->fp = stdin;
+  else if ((efp->fp = fopen(filename, "r")) != NULL) { 
+    if ((status  = esl_strdup(filename, -1, &(efp->filename))) != eslOK) goto ERROR;
+  }
+  else if ((status = esl_FileEnvOpen(filename, envvar, &(efp->fp), &(efp->filename))) != eslOK) 
+    { status = eslENOTFOUND; goto ERROR; }    
+    
+  *ret_efp = efp;
+  return eslOK;
+
+ ERROR:
+  esl_fileparser_Close(efp);
+  *ret_efp = NULL;
+  return status;
+}
+
+
+/* Function:  esl_fileparser_Create()
+ * Incept:    SRE, Fri Jul  9 12:50:29 2004 [St. Louis]
+ *
+ * Purpose:   Take an open file <fp>, and transform it to
+ *            a fileparser object -- preparing to parse it
+ *            one whitespace-delimited field at a time.
+ *
+ * Args:      fp  - open FILE to parse
+ *
+ * Returns:   a new <ESL_FILEPARSER> object, which must be 
+ *            free'd by the caller with <esl_fileparser_Destroy()>.
+ *
+ * Throws:    <eslEMEM> if an allocation failed.
+ *            
+ * Xref:      STL8 p.56.
+ */
+ESL_FILEPARSER *
+esl_fileparser_Create(FILE *fp)
+{
+  int status;
+  ESL_FILEPARSER *efp = NULL;
+
+  ESL_ALLOC(efp, sizeof(ESL_FILEPARSER));
+  efp->fp          = fp;
+  efp->buf         = NULL;
+  efp->buflen      = 0;
+  efp->s           = NULL;
+  efp->commentchar = '\0';
+  efp->filename    = NULL;
+  efp->linenumber  = 0;
+  efp->errbuf[0]   = '\0';
+  efp->is_buffer   = FALSE;
+  efp->mem_buffer  = NULL;
+  efp->mem_size    = 0;
+  efp->mem_pos     = 0;
+  return efp;
+  
+ ERROR:
+  esl_fileparser_Destroy(efp);
+  return NULL;
+}
+
+
+/* Function:  esl_fileparser_CreateMapped()
+ * Incept:    MSF, Mon Aug 16 2010 [Janelia]
+ *
+ * Purpose:   Sets up a memory buffer to be parsed with the
+ *            file parser routines.Take an open file <fp>, and transform it to
+ *            a fileparser object -- preparing to parse it
+ *            one whitespace-delimited field at a time.
+ *
+ * Args:      fp  - open FILE to parse
+ *
+ * Returns:   a new <ESL_FILEPARSER> object, which must be 
+ *            free'd by the caller with <esl_fileparser_Destroy()>.
+ *
+ * Throws:    <eslEMEM> if an allocation failed.
+ *            
+ * Xref:      STL8 p.56.
+ */
+ESL_FILEPARSER *
+esl_fileparser_CreateMapped(void *buffer, int size)
+{
+  ESL_FILEPARSER *efp = NULL;
+
+  if ((efp = esl_fileparser_Create(NULL)) == NULL) return NULL;
+  
+  efp->is_buffer   = TRUE;
+  efp->mem_buffer  = buffer;
+  efp->mem_size    = size;
+  return efp;
+}
+
+
+
+
+/* Function:  esl_fileparser_SetCommentChar()
+ *
+ * Purpose:   Defines a single character <c> for comments. Anything
+ *            on a line following this character is ignored
+ *            when parsing.
+ *
+ * Args:      efp - open fileparser
+ *            c    - comment character ('#', for example)        
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_fileparser_SetCommentChar(ESL_FILEPARSER *efp, char c)
+{
+  efp->commentchar = c;
+  return eslOK;
+}
+
+
+
+/* Function:  esl_fileparser_GetToken()
+ * Incept:    SRE, Fri Jul  9 13:03:50 2004 [St. Louis]
+ *
+ * Purpose:   Sets a pointer to the next field in the 
+ *            file we're parsing.
+ *            
+ *            The <opt_tok> pointer is into an internal line buffer
+ *            that may be invalidated upon the next call to a
+ *            <fileparser> function. If you want to store it, make a
+ *            copy.
+ *
+ * Args:      efp        - open fileparser
+ *            opt_tok    - optRETURN: ptr to next field
+ *            opt_toklen - optRETURN: length of tok.       
+ *
+ * Returns:   <eslOK> if <tok>, <toklen> contain valid data.
+ *            <eslEOF> on normal end-of-file.
+ *            
+ * Throws:    <eslEMEM> if an allocation fails.
+ *
+ * Xref:      STL8 p.56.
+ */
+int
+esl_fileparser_GetToken(ESL_FILEPARSER *efp, char **opt_tok, int *opt_toklen)
+{
+  char *tok    = NULL;
+  int   toklen = 0;
+  int   tokcode;
+  int   fcode;
+  int   goodtok;
+
+  if (opt_tok)    *opt_tok    = NULL;
+  if (opt_toklen) *opt_toklen = 0;
+
+  /* First, make sure we have a line loaded. 
+   * On the first call to GetToken, we won't.
+   */
+  if (efp->buf == NULL) {
+    fcode = nextline(efp);
+    if (fcode != eslOK) return fcode;
+  }
+
+  /* Start strtok()'ing this line to try to find token.
+   * If we don't find one, keep loading lines until we
+   * do, or we run out of data.
+   * efp->s was set either by nextline() or previous GetToken().
+   */
+  do {
+    goodtok = FALSE;
+    tokcode = esl_strtok_adv(&(efp->s), " \t\r\n", &tok, &toklen, NULL);
+    if (tokcode == eslEOL || (tokcode == eslOK && *tok == efp->commentchar)) 
+      {
+	fcode = nextline(efp);
+	if (fcode != eslOK) return fcode;
+      } 
+    else if (tokcode == eslOK) goodtok = TRUE;
+    else 
+      { sprintf(efp->errbuf, "esl_strtok() failed"); return tokcode;}
+  } while (! goodtok);
+
+  if (opt_tok)    *opt_tok    = tok;
+  if (opt_toklen) *opt_toklen = toklen;
+  return eslOK;
+}
+
+
+/* Function:  esl_fileparser_NextLine()
+ * Incept:    SRE, Tue Apr  3 08:27:22 2007 [Janelia]
+ *
+ * Purpose:   Advance the parser to the next non-blank, non-comment
+ *            data line that contains at least one token. 
+ *            
+ *            Upon return, <efp->buf> is a data-containing line, and
+ *            <efp->s> points to the first non-whitespace character on
+ *            it. A line-based parser can work on one or both of these.
+ *            
+ *            A line-oriented but token-based parser will call
+ *            <esl_fileparser_GetTokenOnLine()> to extract successive
+ *            tokens from it.
+ *            
+ *            A pure token-based parser will generally not call
+ *            <_NextLine()>.  The only reason would be to skip the
+ *            remainder of a line it's in the middle of parsing, and
+ *            advance to the next one -- but that's a sort of
+ *            line-oriented thing to do.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslEOF> if no more data lines remain in the file.  
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_fileparser_NextLine(ESL_FILEPARSER *efp)
+{
+  int   status;
+
+  while ((status = nextline(efp)) == eslOK) 
+    {
+      while (efp->s != '\0' && isspace(*(efp->s))) efp->s++;
+      if    (*efp->s != '\0' && *efp->s != efp->commentchar) break;
+    } 
+  if (status == eslEOF) return status;
+  if (status != eslOK)  ESL_FAIL(status, efp->errbuf, "nextline() failed");
+  return eslOK;
+}  
+
+
+/* Function:  esl_fileparser_NextLinePeeked()
+ * Synopsis:  Read the next line, prepending a peek.
+ * Incept:    SRE, Wed Oct 15 10:08:37 2008 [Janelia]
+ *
+ * Purpose:   Sometimes we need to peek at the start of an input stream
+ *            to see whether it is in a binary format, before we start
+ *            parsing it as ASCII lines. When this happens, the caller
+ *            will typically have used <fread()> to read a fixed
+ *            number of bytes from the input stream, checked to see if
+ *            they are a magic number representing a binary format,
+ *            and found that they are not. The caller then wants to
+ *            switch to reading in ASCII format with the <fileparser>
+ *            API, but with those bytes included on the first
+ *            line. Because the file might start with comments or
+ *            blank lines that need to be skipped, we want to deal
+ *            with the peeked data in the context of the
+ *            <ESL_FILEPARSER>. The caller cannot simply close and
+ *            reopen the stream, because the stream may be a pipe
+ *            (<stdin> or <gzip -dc> for example).
+ *            
+ *            The caller passes the bytes it peeked at with <fread()>
+ *            in <prefix>, and the number of bytes it peeked at in
+ *            <plen>.
+ *            
+ *            The parser is advanced to the next non-blank,
+ *            non-comment data line that contains at least one token,
+ *            taking the prepended <prefix> into account.
+ *
+ *            There is a significant flaw in this mechanism, and as a
+ *            result the caller must be able to guarantee the
+ *            following limitation. The first data-containing line
+ *            must be longer than <prefix>. It is sufficient for the
+ *            first data token to be longer than <prefix>.
+ *            (Equivalently, if <prefix> contains any data token, it
+ *            must not contain any newline \verb+\n+ after that data.)  The
+ *            reason is that we need to avoid a situation where the
+ *            concatenated prefix+nextline contains more than one data
+ *            line, because other routines in the module assume that
+ *            <efp->buf> is a single \verb+\n+-terminated line of input.  For
+ *            example: HMMER save files either start with a 4-byte
+ *            binary magic number, or with "HMMER", and "HMMER" is
+ *            longer than 4 bytes.
+ *
+ * Args:      efp      - open fileparser
+ *            prefix   - bytes that caller obtained by peeking with fread()
+ *            plen     - number of bytes in prefix
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslEOF> if no more tokens remain in the file.  
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *
+ * Xref:      For an example, see HMMER's HMM save file input.
+ */
+int
+esl_fileparser_NextLinePeeked(ESL_FILEPARSER *efp, char *prefix, int plen)
+{
+  int   blen;
+  int   status;
+  
+  /* First, make buf = the first line again, by prepending <prefix>. */
+  if ((status = nextline(efp)) != eslOK)  goto ERROR; /* EOF, EMEM */
+  blen = strlen(efp->buf);
+  
+  if (blen + plen + 1 > efp->buflen) {
+    ESL_REALLOC(efp->buf, sizeof(char) * (blen + plen + 1));
+    efp->buflen = blen + plen + 1;
+  }
+  memmove(efp->buf+plen, efp->buf, blen+1);
+  memcpy(efp->buf, prefix, plen);
+  efp->s = efp->buf;
+
+  while (efp->s != '\0' && isspace(*(efp->s))) efp->s++;
+  if    (*efp->s != '\0' && *efp->s != efp->commentchar) return eslOK;
+  else                                                   return esl_fileparser_NextLine(efp);
+
+ ERROR:
+  return status;
+}  
+
+
+
+
+/* Function:  esl_fileparser_GetTokenOnLine()
+ * Incept:    SRE, Tue Apr  3 08:46:59 2007 [Janelia]
+ *
+ * Purpose:   Same as <esl_fileparser_GetToken()>, except that it only
+ *            retrieves tokens from the line that the parser is
+ *            on. When it runs out of tokens on the line, it returns
+ *            <eslEOL>. This allows a caller to count the tokens on a
+ *            line (whereas <GetToken()> reads through newlines
+ *            silently).
+ *            
+ *            The <opt_tok> pointer is into an internal line buffer
+ *            that may be invalidated upon the next call to a
+ *            <fileparser> function. If you want to store it, make a
+ *            copy.
+ *            
+ *            Normally, a call to <esl_fileparser_GetTokenOnLine()>
+ *            would be preceded by <esl_fileparser_NextLine()> to
+ *            position the parser on the next data line with at least
+ *            one token on it. However, you could also conceivably
+ *            call <esl_fileparser_GetTokenOnLine()> after one or more
+ *            calls to <esl_fileparser_GetToken()>, to get remaining
+ *            tokens from a given line. What you can't do is to call
+ *            <esl_fileparser_GetTokenOnLine()> immediately after 
+ *            opening a file; the parser won't have a line loaded yet.
+ *            (In this case, it would return <eslEOL>.)
+ *
+ * Returns:   <eslOK> on success, and the token and its length are
+ *            in <opt_tok> and <opt_toklen>.
+ *            
+ *            Returns <eslEOL> if no more tokens exist on the line;
+ *            in this case <opt_tok> is set to <NULL> and <opt_toklen>
+ *            to 0.
+ */
+int
+esl_fileparser_GetTokenOnLine(ESL_FILEPARSER *efp, char **opt_tok, int *opt_toklen)
+{
+  char *tok    = NULL;
+  int   toklen = 0;
+  int status;
+
+  /* No line loaded? Then we can't find any token on it. */
+  if (efp->buf == NULL) { status = eslEOL;  goto ERROR; }
+
+  /* Find next token in the line that's already loaded in the parser. */
+  status = esl_strtok_adv(&(efp->s), " \t\r\n", &tok, &toklen, NULL);
+  if (status == eslEOL) goto ERROR;
+  if (status != eslOK)  goto ERROR;
+  if (status == eslOK && *tok == efp->commentchar) { status = eslEOL; goto ERROR; }
+
+  if (opt_tok)    *opt_tok    = tok;
+  if (opt_toklen) *opt_toklen = toklen;
+  return eslOK;
+
+ ERROR:
+  if (opt_tok)    *opt_tok    = NULL;
+  if (opt_toklen) *opt_toklen = 0;
+  return status;
+}
+
+
+/* Function:  esl_fileparser_GetRemainingLine()
+ * Synopsis:  Returns pointer to the rest of the current line.
+ * Incept:    SRE, Mon Oct 13 08:59:26 2008 [Janelia]
+ *
+ * Purpose:   Set a pointer <*ret_s> to the rest of the current line
+ *            held by the fileparser <efp>. Trailing newline char,
+ *            if any, is removed.
+ *            
+ *            Because <ret_s> points to internal storage in the
+ *            fileparser, the caller should be finished with it before
+ *            making its next call to any fileparser function.
+ *            
+ *            Any comment characters on the rest of the line are
+ *            ignored: this is designed for a case where the rest of
+ *            the line is to be read as free text.
+ *            
+ * Args:      efp    - fileparser 
+ *            ret_s  - RETURN: pointer to the remainder of the line
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslEOL> if nothing remains on the line, and <*ret_s>
+ *            is <NULL>.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_fileparser_GetRemainingLine(ESL_FILEPARSER *efp, char **ret_s)
+{
+  /* No line loaded? Then we can't find anything on it. */
+  if (efp->buf == NULL) { *ret_s = NULL; return eslEOL; }
+
+  /* skip leading whitespace */
+  while (isspace(*(efp->s))) efp->s++;  
+
+  /* Return everything to end of line as a "token", stripping newline  */
+  return esl_strtok(&(efp->s), "\r\n", ret_s);
+}
+
+
+/* Function:  esl_fileparser_Destroy()
+ * Incept:    SRE, Fri Jul  9 13:22:36 2004 [St. Louis]
+ *
+ * Purpose:   Frees an open <ESL_FILEPARSER>. The original fp is
+ *            still open - whoever opened it is still
+ *            responsible for closing it.
+ *
+ * Xref:      STL8 p.56.
+ */
+void
+esl_fileparser_Destroy(ESL_FILEPARSER *efp)
+{
+  if (efp) {
+    if (efp->buf != NULL) free(efp->buf);
+    free(efp);
+  }
+}
+
+/* Function:  esl_fileparser_Close()
+ * Incept:    SRE, Tue Apr  3 08:18:11 2007 [Janelia]
+ *
+ * Purpose:   Closes an open <ESL_FILEPARSER>, including the 
+ *            file it opened. 
+ */
+void
+esl_fileparser_Close(ESL_FILEPARSER *efp)
+{
+  if (efp == NULL) return;
+  
+  if (efp->fp != NULL && efp->fp != stdin) fclose(efp->fp);
+  if (efp->filename != NULL) free(efp->filename);
+  esl_fileparser_Destroy(efp);
+}
+
+
+
+/*****************************************************************
+ * 2. Private functions
+ *****************************************************************/
+
+/* nextline()
+ *
+ * Purpose:   Skip the file parser to the next line (for instance,
+ *            if an end-of-line comment is found). The new line might
+ *            have no tokens on it.
+ *
+ * Args:      efp  - open file parser
+ *
+ * Returns:   eslOK:   success
+ *            eslEOF:  normal end of file
+ *
+ * Throws:    <eslEMEM> if a reallocation failed in fgets()
+ *
+ * Xref:      STL8 p.56
+ */
+static int
+nextline(ESL_FILEPARSER *efp)
+{
+  int status;
+
+  /* check if we are reading from a file or a buffer */
+  if (efp->is_buffer) {
+    int   len;
+    int   end;
+    char *ptr;
+
+    if (efp->mem_pos >= efp->mem_size) return eslEOF;
+
+    len = 0;
+    end = efp->mem_size - efp->mem_pos;
+    ptr = efp->mem_buffer + efp->mem_pos;
+    while (len < end && *ptr++ != '\n') ++len;
+    if (len < end) ++len;
+
+    if (len + 1 > efp->buflen) {
+      ESL_REALLOC(efp->buf, ESL_MAX(64, len * 2));
+      efp->buflen = ESL_MAX(64, len * 2);
+    }
+    memcpy(efp->buf, efp->mem_buffer + efp->mem_pos, len);
+    efp->buf[len] = 0;
+
+    efp->mem_pos += len;
+
+  } else {
+    if ((status = esl_fgets(&(efp->buf), &(efp->buflen), efp->fp)) != eslOK) 
+      { sprintf(efp->errbuf, "esl_fgets() failed"); return status;}
+  }
+  efp->s = efp->buf;
+  efp->linenumber++;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+
+/*****************************************************************
+ * 3. Unit tests.
+ *****************************************************************/
+#ifdef eslFILEPARSER_TESTDRIVE
+/* test the interface for getting all tokens in a file, regardless
+ * of newlines. Also, uses the Create/Destroy interface instead of
+ * Open/Close.
+ */
+static void
+utest_GetToken(char *filename)
+{
+  int status;
+  ESL_FILEPARSER *efp = NULL;
+  FILE           *fp  = NULL;
+  char           *tok = NULL;
+  int             toklen = 0;
+  int             ntok   = 0;
+
+  if ((fp  = fopen(filename, "r"))      == NULL)  esl_fatal("File open failed");
+  if ((efp = esl_fileparser_Create(fp)) == NULL)  esl_fatal("Failed to associate stream with fileparser");
+  esl_fileparser_SetCommentChar(efp, '#');
+  
+  while ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK)
+    {
+      if (toklen != 6)                   esl_fatal("bad token %s", tok);
+      if (strncmp(tok, "token", 5) != 0) esl_fatal("bad token %s", tok);
+      ntok++;
+    }
+  if (status != eslEOF)  esl_fatal("Abnormal parse termination");
+  if (ntok != 5)         esl_fatal("bad total token number %d\n", ntok);
+  
+  esl_fileparser_Destroy(efp);
+  fclose(fp);
+  return;
+}
+
+/* test the NextLine and GetTokenOnLine interface, as well as the
+ * Open/Close interface.
+ */
+static void
+utest_GetTokenOnLine(char *filename)
+{
+  int status;
+  ESL_FILEPARSER *efp = NULL;
+  char           *tok = NULL;
+  int             toklen = 0;
+  int             ntok   = 0;
+  int             nlines = 0;
+  char            expect[32];
+
+  if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) esl_fatal("File open failed");
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  while ((status = esl_fileparser_NextLine(efp)) == eslOK)
+    {
+      nlines++;
+      while ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) == eslOK)
+	{
+	  ntok++;
+	  sprintf(expect, "token%d", ntok);
+	  if (toklen != 6)               esl_fatal("bad token length for %s", tok);
+	  if (strcmp(expect, tok) != 0)  esl_fatal("bad token %s", tok);
+	}
+      if (status != eslEOL) esl_fatal("Unexpected code in place of end-of-line");
+    }
+  if (status != eslEOF) esl_fatal("Unexpected code in place of end-of-file.");
+
+  if (nlines != 3) esl_fatal("expected to parse 3 lines; parsed %d", nlines);
+  if (ntok   != 5) esl_fatal("expected to parse 5 tokens; parsed %d", ntok);
+  
+  esl_fileparser_Close(efp);
+  return;
+}
+
+static void
+utest_GetTokenBuffered(char *buffer)
+{
+  int status;
+  ESL_FILEPARSER *efp = NULL;
+  char           *tok = NULL;
+  int             toklen = 0;
+  int             ntok   = 0;
+
+  if ((efp = esl_fileparser_CreateMapped(buffer, strlen(buffer))) == NULL)  
+    esl_fatal("Failed to associate buffer with fileparser");
+
+  esl_fileparser_SetCommentChar(efp, '#');
+  
+  while ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK)
+    {
+      if (toklen != 6)                   esl_fatal("bad token %s", tok);
+      if (strncmp(tok, "token", 5) != 0) esl_fatal("bad token %s", tok);
+      ntok++;
+    }
+  if (status != eslEOF)  esl_fatal("Abnormal parse termination");
+  if (ntok != 5)         esl_fatal("bad total token number %d\n", ntok);
+  
+  esl_fileparser_Destroy(efp);
+
+  return;
+}
+
+#endif /*eslFILEPARSER_TESTDRIVE*/
+
+/*****************************************************************
+ * 4. Test driver.
+ *****************************************************************/
+
+/*
+    gcc -g -Wall -I. -o test -DeslFILEPARSER_TESTDRIVE esl_fileparser.c easel.c
+    ./test
+*/
+#ifdef eslFILEPARSER_TESTDRIVE
+#include <stdio.h>
+#include <string.h>
+#include "easel.h"
+#include "esl_fileparser.h"
+
+int 
+main(int argc, char **argv)
+{
+  char  tmpfile[32] = "esltmpXXXXXX";
+  FILE *fp;
+
+  char stream[] = "# Full line comment\n"
+                  "token1  # Trailing comment\n"
+                  "\n"                                   /* blank line */
+                  "   \n"                                /* whitespace line */
+                  "   # sowing comment/whitespace confusion...\n"
+                  "token2\ttoken3  token4\n"
+                  "token5";                              /* file ends w/ no \n */
+
+  /* Create a test file to read.
+   */
+  if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal("File open failed");
+  fprintf(fp, "%s", stream);
+  fclose(fp);
+
+  /* Run unit tests using that file.
+   * Unit tests have hardwired knowledge of what's supposed to be in the file.
+   */
+  utest_GetToken(tmpfile);
+  utest_GetTokenOnLine(tmpfile);
+  utest_GetTokenBuffered(stream);
+
+  remove(tmpfile);
+  return 0;
+}
+#endif /*eslFILEPARSER_TESTDRIVE*/
+
+
+/*****************************************************************
+ * 5. Examples.
+ *****************************************************************/
+
+/* The first example shows the simplest interface: get all tokens
+ * in the file, one at a time.
+ *
+     gcc -g -Wall -I. -o example -DeslFILEPARSER_EXAMPLE esl_fileparser.c easel.c
+     ./example <any file>
+ */
+#ifdef eslFILEPARSER_EXAMPLE
+/*::cexcerpt::fileparser_example::begin::*/
+#include <stdio.h>
+#include "easel.h"
+#include "esl_fileparser.h"
+
+int 
+main(int argc, char **argv)
+{
+  char           *filename = argv[1];
+  int             ntok     = 1;
+  ESL_FILEPARSER *efp;
+  char           *tok;
+  int             toklen;
+
+  if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) esl_fatal("File open failed");
+  esl_fileparser_SetCommentChar(efp, '#');
+  
+  while (esl_fileparser_GetToken(efp, &tok, &toklen) == eslOK) { 
+    printf("%5d %3d %s\n", ntok, toklen, tok); 
+    ntok++;  
+  }
+  esl_fileparser_Close(efp);
+  return 0;
+}
+/*::cexcerpt::fileparser_example::end::*/
+#endif /*eslFILEPARSER_EXAMPLE*/
+
+/* The second example shows the more line-oriented interface
+ * of NextLine(), GetTokenOnLine().
+     gcc -g -Wall -I. -o example -DeslFILEPARSER_EXAMPLE2 esl_fileparser.c easel.c
+     ./example <any file>
+ */
+#ifdef eslFILEPARSER_EXAMPLE2
+/*::cexcerpt::fileparser_example2::begin::*/
+#include <stdio.h>
+#include "easel.h"
+#include "esl_fileparser.h"
+
+int 
+main(int argc, char **argv)
+{
+  char           *filename = argv[1];
+  int             nline    = 1;
+  int             ntok;
+  ESL_FILEPARSER *efp;
+  char           *tok;
+  int             toklen;
+
+  if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) esl_fatal("File open failed");
+  esl_fileparser_SetCommentChar(efp, '#');
+  
+  while (esl_fileparser_NextLine(efp) == eslOK)
+  {
+    ntok = 0;
+    while (esl_fileparser_GetTokenOnLine(efp, &tok, &toklen) == eslOK)
+      ntok++;
+    printf("Line %d in the file (%d non-blank, non-comment) contains %d tokens...\n", 
+	   efp->linenumber, nline, ntok);
+    nline++;
+  }
+  esl_fileparser_Close(efp);
+  return 0;
+}
+/*::cexcerpt::fileparser_example2::end::*/
+#endif /*eslFILEPARSER_EXAMPLE*/
+
+
+
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
diff --git a/esl_fileparser.h b/esl_fileparser.h
new file mode 100644
index 0000000..27b4b91
--- /dev/null
+++ b/esl_fileparser.h
@@ -0,0 +1,41 @@
+/* A simple token-based file parsing system.
+ */
+#ifndef eslFILEPARSER_INCLUDED
+#define eslFILEPARSER_INCLUDED
+
+#include <stdio.h>
+#include "easel.h"
+
+typedef struct {
+  FILE *fp;			/* open file pointer, for reading                  */
+  char *buf;			/* current line; will be modified by esl_strtok(). */
+  int   buflen;			/* current allocated length of buf                 */
+  char *s;			/* used by esl_strtok(); current position in buf.  */
+  char  commentchar;		/* often '#'                                       */
+
+  char *filename;		/* name of opened file; or NULL (if just a stream) */
+  int   linenumber;		/* what line is loaded into buf; 1..nlines         */
+  char  errbuf[eslERRBUFSIZE];  /* for holding error diagnostics                   */
+
+  int   is_buffer;              /* the file has been buffered into memory          */
+  char *mem_buffer;             /* pointer to the buffered file                    */
+  int   mem_size;               /* size of the buffered file                       */
+  int   mem_pos;                /* current position in the buffer                  */
+} ESL_FILEPARSER;
+
+extern int  esl_fileparser_Open(const char *filename, const char *envvar, ESL_FILEPARSER **ret_efp);
+extern ESL_FILEPARSER *esl_fileparser_Create(FILE *fp);
+extern ESL_FILEPARSER *esl_fileparser_CreateMapped(void *buffer, int size);
+extern int  esl_fileparser_SetCommentChar  (ESL_FILEPARSER *efp, char c);
+extern int  esl_fileparser_GetToken        (ESL_FILEPARSER *efp, char **opt_tok, int *opt_toklen);
+extern int  esl_fileparser_NextLine        (ESL_FILEPARSER *efp);
+extern int  esl_fileparser_NextLinePeeked  (ESL_FILEPARSER *efp, char *prefix, int plen);
+extern int  esl_fileparser_GetTokenOnLine  (ESL_FILEPARSER *efp, char **opt_tok, int *opt_toklen);
+extern int  esl_fileparser_GetRemainingLine(ESL_FILEPARSER *efp, char **ret_s);
+extern void esl_fileparser_Destroy         (ESL_FILEPARSER *efp);
+extern void esl_fileparser_Close           (ESL_FILEPARSER *efp);
+
+#endif /*eslFILEPARSER_INCLUDED */
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_fileparser.tex b/esl_fileparser.tex
new file mode 100644
index 0000000..679bbf3
--- /dev/null
+++ b/esl_fileparser.tex
@@ -0,0 +1,97 @@
+
+The \eslmod{fileparser} module parses simple input text data files
+that consist of whitespace-delimited tokens. 
+
+Data files can contain blank lines and comments. Comments are defined
+by a single character; for instance, a \verb+#+ character commonly
+means that everything following the \verb+#+ on the line is a comment.
+
+Two different styles of token input are supported. The simplest style
+reads tokens one at a time, regardless of what line they occur on,
+until the file ends. You can also read in a line-oriented way, in
+which you get one data line at a time, then read all the tokens on
+that line; this style lets you count how many tokens occur on a data
+line, which allows better checking of your input.
+
+The module implements one object, an \ccode{ESL\_FILEPARSER}, that
+holds the open input stream and the state of the parser.  The
+functions in the API are summarized in Table~\ref{tbl:fileparser_api}.
+
+\begin{table}[hbp]
+\begin{center}
+{\scriptsize
+\begin{tabular}{|lp{3.5in}|}\hline
+\hyperlink{func:esl_fileparser_Open()}{\ccode{esl\_fileparser\_Open()}}
+& Open a file for parsing.\\
+\hyperlink{func:esl_fileparser_Create()}{\ccode{esl\_fileparser\_Create()}}
+& Associate already open stream with a new parser.\\
+\hyperlink{func:esl_fileparser_SetCommentChar()}{\ccode{esl\_fileparser\_SetCommentChar()}}
+& Set character that defines start of a comment.\\
+\hyperlink{func:esl_fileparser_NextLine()}{\ccode{esl\_fileparser\_NextLine()}}
+& Advance the parser to next line containing a token.\\
+\hyperlink{func:esl_fileparser_GetToken()}{\ccode{esl\_fileparser\_GetToken()}}
+& Get the next token in the file.\\
+\hyperlink{func:esl_fileparser_GetTokenOnLine()}{\ccode{esl\_fileparser\_GetTokenOnLine()}}
+& Get the next token on the current line.\\
+\hyperlink{func:esl_fileparser_Destroy()}{\ccode{esl\_fileparser\_Destroy()}}
+& Deallocate a parser that was \ccode{Create()}'d.\\
+\hyperlink{func:esl_fileparser_Close()}{\ccode{esl\_fileparser\_Close()}}
+& Close a parser that was \ccode{Open()}'d.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{fileparser} API.}
+\label{tbl:fileparser_api}
+\end{table}
+
+\subsection{Example of using the fileparser API}
+
+An example that opens a file, reads all its tokens one at a time, and
+prints out token number, token length, and the token itself:
+
+\input{cexcerpts/fileparser_example}
+
+A single character can be defined to serve as a comment character
+(often \ccode{\#}), using the \ccode{esl\_fileparser\_SetCommentChar()}
+call. The parser will ignore the comment character, and the remainder
+of any line following a comment character.
+
+Each call to \ccode{esl\_fileparser\_GetToken()} retrieves one
+whitespace-delimited token from the input stream; the call returns
+\ccode{eslOK} if a token is parsed, and \ccode{eslEOF} when there are
+no more tokens in the file. Whitespace is defined as space, tab,
+newline, or carriage return (\verb+" \t\n\r"+).
+
+When the caller is done, the fileparser is closed with
+\ccode{esl\_fileparser\_Close()}.
+
+\subsection{A second example: line-oriented parsing}
+
+The \ccode{esl\_fileparser\_GetToken()} call provides a simple style
+of parsing a file: read one token at a time until the file ends,
+regardless of what line the tokens are on. However, you may want to
+know how many tokens are on a given data line, either because you know
+how many there should be (and you want to verify) or because you don't
+(and you need to allocate some variable-size data structure
+appropriately). The following is an example that reads a file line by
+line:
+
+\input{cexcerpts/fileparser_example2}
+
+The output from this example is, for each data line, the actual line
+number (starting from 1), the data line number (a count that excludes
+comments and blank lines), and the number of tokens on the line.
+
+Note the use of \ccode{efp->linenumber} to obtain the current line in
+the file. You can use this to produce informative error messages.  If
+a token is not what you expected, you probably want to provide some
+diagnostic output to the user, and \ccode{efp->linenumber} lets you
+direct the user to the line that the failure occurred at.
+
+
+
+
+
+
+
diff --git a/esl_gamma.c b/esl_gamma.c
new file mode 100644
index 0000000..76f260c
--- /dev/null
+++ b/esl_gamma.c
@@ -0,0 +1,839 @@
+/* Statistical routines for gamma distributions.
+ * 
+ * Contents:
+ *   1. Routines for evaluating densities and distributions
+ *   2. Generic API routines: for general interface w/ histogram module
+ *   3. Dumping plots for files
+ *   4. Sampling (requires augmentation w/ random module)
+ *   5. ML fitting to complete data
+ *   6. Test driver
+ *   7. Example
+ *   8. Copyright and license information
+ *   
+ * Xref:  STL10/65
+ * 
+ * To do:
+ *    - Fit*() functions should return eslEINVAL on n=0, eslENORESULT
+ *      on failure due to small n. Compare esl_gumbel. xref J12/93.
+ *      SRE, Wed Nov 27 11:18:19 2013
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <float.h>
+
+#include "easel.h"
+#include "esl_stats.h"
+#include "esl_gamma.h"
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#ifdef eslAUGMENT_HISTOGRAM
+#include "esl_histogram.h"
+#endif
+
+static int    tau_by_moments(double *x, int n, double mu, double *ret_tau, 
+			     double *ret_mean, double *ret_logsum);
+static int    tau_by_moments_binned(ESL_HISTOGRAM *g, double mu, double *ret_tau, 
+				    double *ret_mean, double *ret_logsum);
+static double tau_function(double tau, double mean, double logsum);
+
+
+/****************************************************************************
+ * 1. Routines for evaluating densities and distributions
+ ****************************************************************************/ 
+
+/* Function:  esl_gam_pdf()
+ *
+ * Purpose:   Calculates the gamma PDF $P(X=x)$ given value <x>,
+ *            location parameter <mu>, scale parameter <lambda>, and shape
+ *            parameter <tau>.
+ */
+double
+esl_gam_pdf(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x - mu);
+  double gamtau;
+  double val;
+
+  if (y < 0.) return 0.;
+
+  esl_stats_LogGamma(tau, &gamtau);
+  val  = ((tau*log(lambda) + (tau-1.)*log(x-mu)) - gamtau) - y;
+  return exp(val);
+}
+
+/* Function:  esl_gam_logpdf()
+ *
+ * Purpose:   Calculates log of the probability density function
+ *            for the gamma, $\log P(X=x)$, given value <x>,
+ *            location parameter <mu>, scale parameter <lambda>, and 
+ *            shape parameter <tau>.
+ */
+double
+esl_gam_logpdf(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x - mu);
+  double gamtau;
+  double val;
+
+  if (x < 0.) return -eslINFINITY;
+
+  esl_stats_LogGamma(tau, &gamtau);
+  val = ((tau*log(lambda) + (tau-1.)*log(x-mu)) - gamtau) - y;
+  return val;
+}
+
+/* Function:  esl_gam_cdf()
+ *
+ * Purpose:   Calculates the cumulative distribution function
+ *            for the gamma, $P(X \leq x)$, given value <x>, 
+ *            location parameter <mu>, scale parameter <lambda>, and 
+ *            shape parameter <tau>.
+ *
+ *            (For $\mu=0$, $\lambda = 1$, this is the
+ *            incomplete Gamma function $P(\tau,x)$.)
+ */
+double
+esl_gam_cdf(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x - mu);
+  double val;
+
+  if (y <= 0.) return 0.;
+
+  esl_stats_IncompleteGamma(tau, y, &val, NULL);
+  return val;
+}
+
+/* Function:  esl_gam_logcdf()
+ *
+ * Purpose:   Calculates the log of the cumulative distribution function 
+ *            for the gamma, $\log P(X \leq x)$, given value <x>, location
+ *            parameter <mu>, scale parameter <lambda>, and shape 
+ *            parameter <tau>.
+ */
+double
+esl_gam_logcdf(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x - mu);
+  double val;
+
+  if (y <= 0.) return -eslINFINITY;
+
+  esl_stats_IncompleteGamma(tau, y, &val, NULL);
+  return log(val);
+}
+
+/* Function:  esl_gam_surv()
+ *
+ * Purpose:   Calculates the survival function for the gamma, $P(X > x)$,
+ *            given value <x>, location parameter <mu>, scale parameter 
+ *            <lambda>, and shape parameter <tau>.
+ */
+double
+esl_gam_surv(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x - mu);
+  double val;
+
+  if (y <= 0.) return 1.0;
+
+  esl_stats_IncompleteGamma(tau, y, NULL, &val);
+  return val;
+}
+
+
+/* Function:  esl_gam_logsurv()
+ *
+ * Purpose:   Calculates the log of the survival function for the gamma, 
+ *            $\log P(X > x)$, given value <x>, location parameter <mu>,
+ *            scale parameter <lambda>, and shape parameter <tau>.
+ *            
+ *            Relies on <esl_stats_IncompleteGamma()>, which has limited
+ *            dynamic range. Any result of < -700 or so will be -infinity.
+ *            To fix this, we need a log version of <esl_stats_IncompleteGamma()>.
+ */
+double
+esl_gam_logsurv(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x - mu);
+  double val;
+
+  if (y <= 0.) return 0.;
+
+  esl_stats_IncompleteGamma(tau, y, NULL, &val);
+  return log(val);
+}
+
+
+/* Function:  esl_gam_invcdf()
+ *
+ * Purpose:   Calculates the inverse CDF for a gamma with location
+ *            parameter <mu>, scale parameter <lambda> and shape
+ *            parameter <tau>, returning the value <x> at which the
+ *            CDF is <p>.
+ *            
+ *            This inverse CDF is solved by a computationally expensive,
+ *            brute force bisection search on the CDF of <x>.
+ */
+double
+esl_gam_invcdf(double p, double mu, double lambda, double tau)
+{
+  double x1, x2, xm;		/* low, high guesses at x */
+  double f2, fm;
+  double tol = 1e-6;
+  
+  x1 = 0.;
+  x2 = tau / lambda;
+  do {				/* bracket */
+    x2 = x2*2.;
+    f2 = esl_gam_cdf(x2, mu, lambda, tau);
+  } while (f2 < p);
+
+  do {				/* bisection */
+    xm = (x1+x2)/ 2.;
+    fm = esl_gam_cdf(xm, mu, lambda, tau);
+    
+    if      (fm > p) x2 = xm;
+    else if (fm < p) x1 = xm;
+    else return xm;		/* unlikely exact fm==p */
+  } while ( (x2-x1)/(x1+x2) > tol);
+
+  xm = (x1+x2)/2.;
+  return xm;
+}
+/*-------------------- end densities & distributions ------------------------*/
+	  
+
+
+
+/****************************************************************************
+ * 2. Generic API routines: for general interface w/ histogram module
+ ****************************************************************************/ 
+
+/* Function:  esl_gam_generic_pdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_gam_pdf()>, taking 
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_gam_generic_pdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_gam_pdf(x, p[0], p[1], p[2]);
+}
+
+
+/* Function:  esl_gam_generic_cdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_gam_cdf()>, taking 
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_gam_generic_cdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_gam_cdf(x, p[0], p[1], p[2]);
+}
+
+
+/* Function:  esl_gam_generic_surv()
+ *
+ * Purpose:   Generic-API wrapper around <esl_gam_surv()>, taking 
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_gam_generic_surv(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_gam_surv(x, p[0], p[1], p[2]);
+}
+
+
+/* Function:  esl_gam_generic_invcdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_gam_invcdf()>, taking 
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_gam_generic_invcdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_gam_invcdf(x, p[0], p[1], p[2]);
+}
+/*------------------------ end generic API ---------------------------------*/
+
+
+
+/****************************************************************************
+ * 3. Dumping plots for files
+ ****************************************************************************/ 
+
+/* Function:  esl_gam_Plot()
+ *
+ * Purpose:   Plot some gamma distribution function <func> (for instance,
+ *            <esl_gam_pdf()>) for parameters <mu>, <lambda>, and <tau>, for
+ *            a range of values x from <xmin> to <xmax> in steps of <xstep>;
+ *            output to an open stream <fp> in xmgrace XY input format.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error, such as a filled disk.
+ */
+int
+esl_gam_Plot(FILE *fp, double mu, double lambda, double tau,
+	     double (*func)(double x, double mu, double lambda, double tau), 
+	     double xmin, double xmax, double xstep)
+{
+  double x;
+  for (x = xmin; x <= xmax; x += xstep)
+    if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda, tau)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gamma plot write failed");
+  if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gamma plot write failed");
+  return eslOK;
+}
+/*-------------------- end plot dumping routines ---------------------------*/
+
+
+/****************************************************************************
+ * 4. Sampling (requires augmentation w/ random module)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_RANDOM
+/* Function:  esl_gam_Sample()
+ *
+ * Purpose:   Sample a gamma-distributed random variate.
+ */
+double
+esl_gam_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau)
+{
+  double x;
+
+  x = esl_rnd_Gamma(r, tau);
+  return (mu + x / lambda);
+} 
+#endif /*eslAUGMENT_RANDOM*/
+/*--------------------------- end sampling ---------------------------------*/
+
+
+
+/****************************************************************************
+ * 5. ML fitting to complete data
+ ****************************************************************************/ 
+
+/* Function:  esl_gam_FitComplete()
+ *
+ * Purpose:   Given complete data consisting of <n> samples <x[0]..x[n-1]>,
+ *            and a known location parameter <mu>, determine and return
+ *            maximum likelihood parameters <ret_lambda> and <ret_tau>.
+ *
+ * Args:      x          - complete gamma-distributed data [0..n-1]
+ *            n          - number of samples in <x>
+ *            mu         - known location parameter
+ *            ret_lambda - RETURN: ML estimate of lambda            
+ *            ret_tau    - RETURN: ML estimate of tau
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslENOHALT> if bracketing or bisection fails;
+ *            <eslEINVAL> if data cannot be gamma distributed (some <x[i] < mu>,
+ *            or zero variance in x).
+ *
+ * Xref:      STL10/65.
+ */
+int
+esl_gam_FitComplete(double *x, int n, double mu, double *ret_lambda, double *ret_tau)
+{
+  double mean, logsum;
+  int    i;
+  double c, fc;
+  double a, fa;
+  double b, fb;
+  int    status;
+
+  if ((status = tau_by_moments(x, n, mu, &c, &mean, &logsum) != eslOK)) goto ERROR;
+  a = b = c;
+  fc = tau_function(c, mean, logsum);
+
+  /* Rootfinding, 1.: bracketing the root with points a,b.
+   */
+  if (fc > 0.)			/* fx>0 means tau is too small, search right */
+    {
+      for (i = 0; i < 100; i++)	/* 100 = max iterations */
+	{
+	  b = a * 2.;
+	  fb = tau_function(b, mean, logsum);
+	  if (fb < 0.) break;	/* a,b now bracket */
+	  a = b;                /* else fb>0, so b is a better left bracket than a */
+	}
+      if (i == 100) ESL_XEXCEPTION(eslENOHALT, "failed to bracket");
+    }
+  else if (fc < 0.)		/* fx<0 means tau is too large, search left */
+    {
+      for (i = 0; i < 100; i++)
+	{
+	  a = b/2.;
+	  fa = tau_function(a, mean, logsum);
+	  if (fa > 0.) break;   /* a,b now bracket */
+	  b = a;                /* else fa<0, so a is a better right bracket than b */
+	}
+      if (i == 100) ESL_XEXCEPTION(eslENOHALT, "failed to bracket");
+    }  
+  
+  /* Rootfinding, 2.: Bisection search.
+   * We have the root in interval (a,b).
+   */
+  for (i = 0; i < 100; i++)
+    {
+      c  = (a+b)/2.;		/* bisection */
+      fc = tau_function(c, mean, logsum);
+      if      (fc > 0.)  a = c;
+      else if (fc < 0.)  b = c;
+      else    break;		/* unlikely event that we nail it */
+
+      if ((b-a) <= 2.* DBL_EPSILON) { 
+	c  = (a+b)/2.;
+	break;
+      }
+    }
+  if (i == 100) ESL_XEXCEPTION(eslENOHALT, "bisection search failed");
+
+  *ret_lambda = c / mean;
+  *ret_tau    = c;
+  return eslOK;
+
+
+ ERROR:
+  *ret_lambda = 0.0;
+  *ret_tau    = 0.0;
+  return status;
+}
+
+/* tau_by_moments()
+ * 
+ * Obtain an initial estimate for tau by 
+ * matching moments. Also returns mean and
+ * logsum, which we need for ML fitting.
+ * To obtain a lambda estimate, use
+ * lambda = tau / mean.
+ */
+static int
+tau_by_moments(double *x, int n, double mu, double *ret_tau, double *ret_mean, double *ret_logsum)
+{
+  int    i;
+  double mean, var, logsum;
+
+  mean = var = logsum = 0.;
+  for (i = 0; i < n; i++)
+    {
+      if (x[i] < mu) ESL_EXCEPTION(eslEINVAL, "No x[i] can be < mu in gamma data");
+      mean   += x[i] - mu;	   /* mean is temporarily just the sum */
+      logsum += log(x[i] - mu);
+      var  += (x[i]-mu)*(x[i]-mu); /* var is temporarily the sum of squares */
+    }
+  var     = (var - mean*mean/(double)n) / ((double)n-1); /* now var is the variance */
+  mean   /= (double) n;		/* and now mean is the mean */
+  logsum /= (double) n;
+
+  if (var == 0.)		/* and if mean = 0, var = 0 anyway. */
+    ESL_EXCEPTION(eslEINVAL, "Zero variance in allegedly gamma-distributed dataset");
+  
+  if (ret_tau    != NULL) *ret_tau    = mean * mean / var;
+  if (ret_mean   != NULL) *ret_mean   = mean;
+  if (ret_logsum != NULL) *ret_logsum = logsum;
+  return eslOK;
+}
+
+
+/* tau_function()
+ *
+ * This is the rootfinding equation for tau...
+ * \ref{eqn:gamma_tau_root} in the documentation.
+ *   mean   is  1/N \sum (x_i - \mu) 
+ *   logsum is  1/N \sum \log (x_i - \mu)
+ * These are both independent of tau, and dependent
+ * on all data points, so we require the caller to
+ * precalculate them for us.
+ * 
+ * This is a decreasing function of tau:
+ * the return value is > 0 when tau is too small,
+ * and < 0 when tau is too large.
+ */
+static double
+tau_function(double tau, double mean, double logsum)
+{
+  double psitau;
+  
+  esl_stats_Psi(tau, &psitau);
+  return ( ((log(tau) - psitau) - log(mean)) + logsum );  
+}
+
+#ifdef eslAUGMENT_HISTOGRAM
+/* Function:  esl_gam_FitCompleteBinned()
+ *
+ * Purpose:   Fit a complete exponential distribution to the observed
+ *            binned data in a histogram <g>, where each
+ *            bin i holds some number of observed samples x with values from 
+ *            lower bound l to upper bound u (that is, $l < x \leq u$);
+ *            determine and return maximum likelihood estimates for the
+ *            parameters $\mu, \lambda, \tau$ and 
+ *            return them in <*ret_mu>, <*ret_lambda>, <*ret_tau>.
+ *            
+ *            Unlike the <esl_exp_FitCompleteBinned()> case where the
+ *            ML fit optimizes $\sum_i n_i \log P(a_i \leq x < b_i)$
+ *            where $a_i \leq b_i$ are the bounds of bin i with
+ *            occupancy $n_i$, here we take the approximation that
+ *            $c_i = a_i + 0.5*(b_i-a_i)$ and optimize $\log P(a_i
+ *            \leq x < b_i) \simeq \log(w) + \log P(x=c_i)$.
+ *
+ *            Since $b_i-a_i = w$ is fixed, optimizing the above
+ *            becomes equivalent to optimizing $\sum_i n_i * log P(x=c_i)$.
+ *
+ *            The optimization is then equivalent to the non-binned case,
+ *            but subsituting in averages such as $\sum_i x(i)$ by
+ *            $\sum_i n_i*c_i i$, and so forth.
+ *
+ *            If the binned data in <g> were set to focus on 
+ *            a tail by virtual censoring, the "complete" exponential is 
+ *            fitted to this tail. The caller then also needs to
+ *            remember what fraction of the probability mass was in this
+ *            tail.
+ *
+ * Args:      g          - histogram
+ *            ret_mu     - RETURN: given by the histogram           
+ *            ret_lambda - RETURN: ML estimate of lambda            
+ *            ret_tau    - RETURN: ML estimate of tau
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslENOHALT> if bracketing or bisection fails;
+ *            <eslEINVAL> if data cannot be gamma distributed (some <x[i] < mu>,
+ *            or zero variance in x).
+ *
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if dataset is true-censored.
+ */
+int
+esl_gam_FitCompleteBinned(ESL_HISTOGRAM *g, double *ret_mu, double *ret_lambda, double *ret_tau)
+{
+  double mu = 0.;
+  double mean, logsum;
+  int    i;
+  double c, fc;
+  double a, fa;
+  double b, fb;
+  double tol = 1e-6;
+  int    maxit = 100;
+  int    status;
+
+  if (g->dataset_is == COMPLETE)
+    {
+      if   (g->is_rounded) mu = esl_histogram_Bin2LBound(g, g->imin);
+      else                 mu = g->xmin;
+    }
+  else if (g->dataset_is == VIRTUAL_CENSORED) /* i.e., we'll fit to tail */
+    mu = g->phi;
+  else if (g->dataset_is == TRUE_CENSORED)
+    ESL_EXCEPTION(eslEINVAL, "can't fit true censored dataset");
+
+  if ((status = tau_by_moments_binned(g, mu, &c, &mean, &logsum) != eslOK)) goto ERROR;
+  a = b = c;
+  if (c == 1.0) {
+    *ret_mu     = mu;
+    *ret_lambda = c / mean;
+    *ret_tau    = c;
+    return eslOK;
+  }
+  fc = tau_function(c, mean, logsum);
+
+  /* Rootfinding, 1.: bracketing the root with points a,b.
+   */
+  if (fc > 0.)			/* fx>0 means tau is too small, search right */
+    {
+      for (i = 0; i < maxit; i++)	/* max iterations */
+	{
+	  b = a * 2.;
+	  fb = tau_function(b, mean, logsum);
+
+	  if (fb < 0.) break;	/* a,b now bracket */
+	  a = b;                /* else fb>0, so b is a better left bracket than a */
+	}
+      if (i == maxit) ESL_XEXCEPTION(eslENOHALT, "failed to bracket");
+    }
+  else if (fc < 0.)		/* fx<0 means tau is too large, search left */
+    {
+      for (i = 0; i < maxit; i++)
+	{
+	  a = b/2.;
+	  fa = tau_function(a, mean, logsum);
+	  if (fa > 0.) break;   /* a,b now bracket */
+	  b = a;                /* else fa<0, so a is a better right bracket than b */
+	}
+      if (i == maxit) ESL_XEXCEPTION(eslENOHALT, "failed to bracket");
+    }  
+
+  /* Rootfinding, 2.: Bisection search.
+   * We have the root in interval (a,b).
+   */
+  for (i = 0; i < maxit; i++)
+    {
+      c  = (a+b)/2.;		/* bisection */
+      fc = tau_function(c, mean, logsum);
+
+      if      (fc > 0.)  a = c;
+      else if (fc < 0.)  b = c;
+      else    break;		/* unlikely event that we nail it */
+
+      if ((b-a) <= tol) { 
+	c  = (a+b)/2.;
+	break;
+      }
+    }
+  if (i == maxit) ESL_XEXCEPTION(eslENOHALT, "bisection search failed");
+
+  *ret_mu     = mu;
+  *ret_lambda = (mean > 0.)? c / mean : 0.0;
+  *ret_tau    = c;
+  return eslOK;
+
+ ERROR:
+  *ret_mu     = 0.;
+  *ret_lambda = 0.;
+  *ret_tau    = 0.;
+  return status;
+}
+
+/* tau_by_moments_binned()
+ * 
+ * similar to tau_by_moments()
+ * where mean=\sum_i x_i now becomes mean=\sum_i n(i)*ci, ...
+ *
+ * note: the whole method relies on the property log(sum) >= logsum;
+ * which works if all points are valide, that is positive; 
+ * log(0) = -inf is not a valid point,
+ * and the inequality (Jensen's inequality) does not hold. 
+ */
+static int
+tau_by_moments_binned(ESL_HISTOGRAM *g, double mu, double *ret_tau, double *ret_mean, double *ret_logsum)
+{
+  int    i;
+  double ai, bi, ci;
+  double sum, mean, var, logsum;
+  double tol = 1e-6;
+
+  sum = mean = var = logsum = 0.;
+  for (i = g->cmin+1; i <= g->imax; i++) /* for each occupied bin */
+    {
+      if (g->obs[i] == 0) continue;
+      ai = esl_histogram_Bin2LBound(g,i);
+      bi = esl_histogram_Bin2UBound(g,i);
+      ci = ai + 0.5 * (bi-ai);
+      
+      if (ci < mu) ESL_EXCEPTION(eslEINVAL, "No point can be < mu in gamma data");
+      sum    += (double)g->obs[i];
+      mean   += (double)g->obs[i] * (ci-mu);	                   /* mean is temporarily just the sum */
+      logsum += (ci>mu)? (double)g->obs[i] * log(ci-mu):0.0;       
+      var    += (double)g->obs[i] * (ci-mu) * (ci-mu);             /* var is temporarily the sum of squares */
+    }
+
+  var     = (sum > 1.)? (var - mean*mean/sum) / (sum-1.) : 0.0; /* now var is the variance */
+  mean   /= (sum > 0.)? sum : 1.;	                                        /* and now mean is the mean */
+  logsum /= (sum > 0.)? sum : 1.;
+
+  if (ret_tau    != NULL) *ret_tau    = (var < tol || mean == 0.)? 1. :  mean * mean / var;
+  if (ret_mean   != NULL) *ret_mean   = mean;
+  if (ret_logsum != NULL) *ret_logsum = logsum;
+  return eslOK;
+}
+
+
+#endif /*eslAUGMENT_HISTOGRAM*/
+
+
+/****************************************************************************
+ * 6. Test driver
+ ****************************************************************************/ 
+#ifdef eslGAMMA_TESTDRIVE
+/* Compile:
+   gcc -g -Wall -I. -I ~/src/easel -L ~/src/easel -o test -DeslGAMMA_TESTDRIVE\
+    esl_gamma.c -leasel -lm
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_gamma.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_HISTOGRAM  *h;
+  ESL_RANDOMNESS *r;
+  double  mu        = -5.0;
+  double  lambda    =  2.0;  
+  double  tau       =  0.7;
+  int     n         = 10000;
+  double  binwidth  = 0.0001;
+  double  emu, elambda, etau;
+  int     i;
+  double  x;
+  double *data;
+  int     ndata;
+
+  int     opti;
+  int     be_verbose   = FALSE;
+  char   *plotfile     = NULL;
+  FILE   *pfp          = stdout;
+  int     plot_pdf     = FALSE;
+  int     plot_logpdf  = FALSE;
+  int     plot_cdf     = FALSE;
+  int     plot_logcdf  = FALSE;
+  int     plot_surv    = FALSE;
+  int     plot_logsurv = FALSE;
+  int     xmin_set     = FALSE;
+  double  xmin;
+  int     xmax_set     = FALSE;
+  double  xmax;
+  int     xstep_set    = FALSE;
+  double  xstep;
+
+  for (opti = 1; opti < argc && *(argv[opti]) == '-'; opti++)
+    {
+      if      (strcmp(argv[opti], "-m")  == 0) mu           = atof(argv[++opti]);
+      else if (strcmp(argv[opti], "-l")  == 0) lambda       = atof(argv[++opti]);
+      else if (strcmp(argv[opti], "-n")  == 0) n            = atoi(argv[++opti]);
+      else if (strcmp(argv[opti], "-o")  == 0) plotfile     = argv[++opti];
+      else if (strcmp(argv[opti], "-t")  == 0) tau          = atof(argv[++opti]);
+      else if (strcmp(argv[opti], "-v")  == 0) be_verbose   = TRUE;
+      else if (strcmp(argv[opti], "-w")  == 0) binwidth     = atof(argv[++opti]);
+      else if (strcmp(argv[opti], "-C")  == 0) plot_cdf     = TRUE;
+      else if (strcmp(argv[opti], "-LC") == 0) plot_logcdf  = TRUE;
+      else if (strcmp(argv[opti], "-P")  == 0) plot_pdf     = TRUE;
+      else if (strcmp(argv[opti], "-LP") == 0) plot_logpdf  = TRUE;
+      else if (strcmp(argv[opti], "-S")  == 0) plot_surv    = TRUE;
+      else if (strcmp(argv[opti], "-LS") == 0) plot_logsurv = TRUE;
+      else if (strcmp(argv[opti], "-XL") == 0) { xmin_set  = TRUE; xmin  = atof(argv[++opti]); }
+      else if (strcmp(argv[opti], "-XH") == 0) { xmax_set  = TRUE; xmax  = atof(argv[++opti]); }
+      else if (strcmp(argv[opti], "-XS") == 0) { xstep_set = TRUE; xstep = atof(argv[++opti]); }
+      else esl_fatal("bad option");
+    }
+
+  if (be_verbose)
+    printf("Parametric:  mu = %f   lambda = %f    tau = %f\n", mu, lambda, tau);
+
+  r = esl_randomness_Create(0);
+  h = esl_histogram_CreateFull(mu, 100., binwidth);
+  if (plotfile != NULL) {
+    if ((pfp = fopen(plotfile, "w")) == NULL) esl_fatal("Failed to open plotfile");
+  }
+  if (! xmin_set)  xmin  = mu;
+  if (! xmax_set)  xmax  = mu+40*(1./lambda);
+  if (! xstep_set) xstep = 0.1;
+
+  for (i = 0; i < n; i++)
+    {
+      x = esl_gam_Sample(r, mu, lambda, tau);
+      esl_histogram_Add(h, x);
+    }
+  esl_histogram_GetData(h, &data, &ndata);
+
+  esl_gam_FitComplete(data, ndata, mu, &elambda, &etau);
+  if (be_verbose)
+    printf("Complete data fit:  mu = %f   lambda = %f   tau = %f\n", mu, elambda, etau);
+  if (fabs( (elambda-lambda)/lambda ) > 0.10) esl_fatal("Error in (complete) fitted lambda > 10%%\n");
+  if (fabs( (etau-tau)/tau )          > 0.10) esl_fatal("Error in (complete) fitted tau > 10%%\n");
+
+  esl_gam_FitCompleteBinned(h, &emu, &elambda, &etau);
+  if (be_verbose) printf("Binned data fit:  mu = %f   lambda = %f  tau = %f\n", emu, elambda, etau);
+  if (fabs( (emu-mu)/mu )             > 0.01) esl_fatal("Error in (binned) fitted mu > 1%%\n");
+  if (fabs( (elambda-lambda)/lambda ) > 0.10) esl_fatal("Error in (binned) fitted lambda > 10%%\n");
+  if (fabs( (etau-tau)/tau )          > 0.10) esl_fatal("Error in (binned) fitted tau > 10%%\n");
+
+  if (plot_pdf)     esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_pdf,     xmin, xmax, xstep);
+  if (plot_logpdf)  esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_logpdf,  xmin, xmax, xstep);
+  if (plot_cdf)     esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_cdf,     xmin, xmax, xstep);
+  if (plot_logcdf)  esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_logcdf,  xmin, xmax, xstep);
+  if (plot_surv)    esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_surv,    xmin, xmax, xstep);
+  if (plot_logsurv) esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_logsurv, xmin, xmax, xstep);
+
+  if (plotfile != NULL) fclose(pfp);
+
+  esl_randomness_Destroy(r);
+  esl_histogram_Destroy(h);
+  return 0;
+}
+#endif /*eslGAMMA_TESTDRIVE*/
+
+/****************************************************************************
+ * Example main()
+ ****************************************************************************/ 
+#ifdef eslGAMMA_EXAMPLE
+/*::cexcerpt::gam_example::begin::*/
+/* compile:
+   gcc -g -Wall -I. -o example -DeslGAMMA_EXAMPLE\
+     -DeslAUGMENT_RANDOM -DeslAUGMENT_HISTOGRAM\
+     esl_gamma.c esl_random.c esl_histogram.c esl_stats.c easel.c -lm
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_gamma.h"
+
+int
+main(int argc, char **argv)
+{
+  double mu         = -5.0;
+  double lambda     = 2.0;
+  double tau        = 0.7;
+  ESL_HISTOGRAM  *h = esl_histogram_CreateFull(mu, 100., 0.1);
+  ESL_RANDOMNESS *r = esl_randomness_Create(0);
+  int    n          = 10000;
+  double elam, etau;
+  int    i;
+  double x;
+  double *data;
+  int     ndata;
+
+  /* Take <n> gamma-distributed random samples. */
+  for (i = 0; i < n; i++)
+    {
+      x  =  esl_gam_Sample(r, mu, lambda, tau);
+      esl_histogram_Add(h, x);
+    }
+  esl_histogram_GetData(h, &data, &ndata);
+
+  /* Plot the empirical (sampled) and expected survivals */
+  esl_histogram_PlotSurvival(stdout, h);
+  esl_gam_Plot(stdout, mu, lambda, tau,
+	       &esl_gam_surv,  h->xmin, h->xmax, 0.1);
+
+  /* ML fit to complete data, and plot fitted survival curve */
+  esl_gam_FitComplete(data, ndata, mu, &elam, &etau);
+  esl_gam_Plot(stdout, mu, elam, etau,
+	       &esl_gam_surv,  h->xmin, h->xmax, 0.1);
+
+  esl_randomness_Destroy(r);
+  esl_histogram_Destroy(h);
+  return 0;
+}
+/*::cexcerpt::gam_example::end::*/
+#endif /*eslGAMMA_EXAMPLE*/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_gamma.h b/esl_gamma.h
new file mode 100644
index 0000000..96585d0
--- /dev/null
+++ b/esl_gamma.h
@@ -0,0 +1,48 @@
+/* Gamma distributions.
+ * 
+ * SRE, Wed Nov 16 19:15:33 2005 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslGAMMA_INCLUDED
+#define eslGAMMA_INCLUDED
+
+#ifdef eslAUGMENT_RANDOM
+#include <esl_random.h>
+#endif
+#ifdef eslAUGMENT_HISTOGRAM
+#include "esl_histogram.h"
+#endif
+
+
+double esl_gam_pdf    (double x, double mu, double lambda, double tau);
+double esl_gam_logpdf (double x, double mu, double lambda, double tau);
+double esl_gam_cdf    (double x, double mu, double lambda, double tau);
+double esl_gam_logcdf (double x, double mu, double lambda, double tau);
+double esl_gam_surv   (double x, double mu, double lambda, double tau);
+double esl_gam_logsurv(double x, double mu, double lambda, double tau);
+double esl_gam_invcdf (double p, double mu, double lambda, double tau);
+
+double esl_gam_generic_pdf   (double x, void *params);
+double esl_gam_generic_cdf   (double x, void *params);
+double esl_gam_generic_surv  (double x, void *params);
+double esl_gam_generic_invcdf(double x, void *params);
+
+extern int esl_gam_Plot(FILE *fp, double mu, double lambda, double tau,
+			double (*func)(double x, double mu, double lambda, double tau), 
+			double xmin, double xmax, double xstep);
+
+#ifdef eslAUGMENT_RANDOM
+extern double esl_gam_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau);
+#endif
+
+extern int esl_gam_FitComplete(double *x, int n, double mu, double *ret_lambda, double *ret_tau);
+
+#ifdef eslAUGMENT_HISTOGRAM
+extern int esl_gam_FitCompleteBinned(ESL_HISTOGRAM *h, double *ret_mu, double *ret_lambda, double *ret_tau);
+#endif
+
+#endif /*eslGAMMA_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_gamma.tex b/esl_gamma.tex
new file mode 100644
index 0000000..8990000
--- /dev/null
+++ b/esl_gamma.tex
@@ -0,0 +1,53 @@
+
+\begin{tabular}{lcll}\hline
+Variate    & $x$         & \ccode{double} &  $\mu \leq x < \infty$ \\
+Location   & $\mu$       & \ccode{double} &  $-\infty < \mu < \infty$\\
+Scale      & $\lambda$   & \ccode{double} &  $\lambda > 0$ \\
+Shape      & $\tau$      & \ccode{double} &  $\tau > 0$ \\ \hline
+\end{tabular}
+
+The probability density function (PDF) is:
+
+\begin{equation}
+P(X=x) =  \frac{\lambda^{\tau}}{\Gamma(\tau)}  (x-\mu)^{\tau-1}  e^{-\lambda (x - \mu)}
+\label{eqn:gamma_pdf}
+\end{equation}
+
+The cumulative distribution function (CDF) does not have an analytical
+expression. It is calculated numerically, using the incomplete Gamma
+function (\ccode{esl\_stats\_IncompleteGamma()}).
+
+The ``standard Gamma distribution'' has $\mu = 0$, $\lambda = 1$.
+
+\subsection{Sampling}
+
+
+
+\subsection{Parameter estimation}
+
+\subsubsection{Complete data; known location}
+
+We usually know the location $\mu$. It is often 0, or in the case of
+fitting a gamma density to a right tail, we know the threshold $\mu$
+at which we truncated the tail.
+
+Given a complete dataset of $N$ observed samples $x_i$ ($i=1..N$) and
+a \emph{known} location parameter $\mu$, maximum likelihood estimation
+of $\lambda$ and $\tau$ is performed by first solving this rootfinding
+equation for $\hat{\tau}$ by binary search:
+
+\begin{equation}
+  \log \hat{\tau} 
+  - \Psi(\hat{\tau}) 
+  - \log \left[ \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu) \right]
+  + \frac{1}{N} \sum_{i=1}^N \log (x_i - \mu)
+\label{eqn:gamma_tau_root}
+\end{equation}
+
+then using that to obtain $\hat{\lambda}$:
+
+\begin{equation}
+\hat{\lambda} = \frac{N \hat{\tau}} {\sum_{i=1}^{N} (x_i - \mu)}
+\end{equation}
+
+Equation~\ref{eqn:gamma_tau_root} decreases as $\tau$ increases.
diff --git a/esl_gencode.c b/esl_gencode.c
new file mode 100644
index 0000000..926780e
--- /dev/null
+++ b/esl_gencode.c
@@ -0,0 +1,1182 @@
+/* Genetic code tables for translation, whether canonical or noncanonical.
+ * 
+ * Table of contents:
+ *   1. NCBI genetic code tables, in Easel digital form
+ *   2. ESL_GENCODE genetic code object
+ *   3. Reading and writing genetic codes in NCBI format
+ *   4. DNA->protein digital translation, allowing ambiguity chars
+ *   5. Functions fo/////ting/destroying ESL_TRANS_WORKSTATE
+ *   6. Functions for processing ORFs
+ *   7. Debugging/development utilities
+ *   8. Unit tests
+ *   9. Test driver
+ *   10. Examples
+ *   11. Copyright and license
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_fileparser.h"
+#include "esl_regexp.h"
+#include "esl_gencode.h"
+
+
+/*****************************************************************
+ * 1. NCBI genetic code tables, in Easel digital form
+ *****************************************************************/
+
+/* 
+ * From: http://www.ncbi.nlm.nih.gov/Taxonomy/taxonomyhome.html/index.cgi?chapter=cgencodes
+ * NCBI text files are digitized by the esl_gencode_example driver:
+ *     make esl_gencode_example
+ *     ./esl_gencode_example <file>
+ *
+ * The NCBI page has useful information about these code tables, references and caveats.
+ */
+
+static const ESL_GENCODE esl_transl_tables[] = {
+  { 1, "Standard",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 27,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   *   C   W   C   L   F   L   F */
+    NULL, NULL },
+  
+  { 2, "Vertebrate mitochondrial",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 27, 15, 27, 15, 10,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 18,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   K   N   K   N   T   T   T   T   *   S   *   S   M   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   W   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 3, "Yeast mitochondrial",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 10,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14, 16, 16, 16, 16,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 18,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   M   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   T   T   T   T   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   W   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 4, "Mold, protozoan, coelenterate mitochondrial; Mycoplasma/Spiroplasma",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 18,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   W   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 5, "Invertebrate mitochondrial",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 15, 15, 15, 15, 10,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 18,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0 },
+  /*   K   N   K   N   T   T   T   T   S   S   S   S   M   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   W   C   W   C   L   F   L   F */
+    NULL, NULL },
+  
+  { 6, "Ciliate, dasycladacean, Hexamita nuclear",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 13, 19, 13, 19, 15, 15, 15, 15, 27,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   Q   Y   Q   Y   S   S   S   S   *   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 9, "Echinoderm and flatworm mitochondrial",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    { 11, 11,  8, 11, 16, 16, 16, 16, 15, 15, 15, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 18,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   N   N   K   N   T   T   T   T   S   S   S   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   W   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 10, "Euplotid nuclear",
+   /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15,  1,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   C   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 11, "Bacterial, archaeal; and plant plastid",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 27,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   *   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 12, "Alternative yeast", 
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9, 15,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 27,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   S   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   *   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 13, "Ascidian mitochondrial", 
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16,  5, 15,  5, 15, 10,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 18,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0 },
+  /*   K   N   K   N   T   T   T   T   G   S   G   S   M   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   W   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 14, "Alternative flatworm mitochondrial",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    { 11, 11,  8, 11, 16, 16, 16, 16, 15, 15, 15, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 19, 19, 27, 19, 15, 15, 15, 15, 18,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   N   N   K   N   T   T   T   T   S   S   S   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   Y   Y   *   Y   S   S   S   S   W   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 16, "Chlorophycean mitochondrial",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19,  9, 19, 15, 15, 15, 15, 27,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   L   Y   S   S   S   S   *   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 21, "Trematode mitochondrial", 
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    { 11, 11,  8, 11, 16, 16, 16, 16, 15, 15, 15, 15, 10,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 18,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   N   N   K   N   T   T   T   T   S   S   S   S   M   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   W   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 22, "Scenedesmus obliquus mitochondrial",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19,  9, 19, 27, 15, 15, 15, 27,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   L   Y   *   S   S   S   *   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 23, "Thraustochytrium mitochondrial", 
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 27,  1, 18,  1, 27,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   *   C   W   C   *   F   L   F */
+    NULL, NULL },
+
+  { 24, "Pterobranchia mitochondrial", 
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 15, 15,  8, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15, 18,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0 },
+  /*   K   N   K   N   T   T   T   T   S   S   K   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   W   C   W   C   L   F   L   F */
+    NULL, NULL },
+
+  { 25, "Candidate Division SR1 and Gracilibacteria",
+  /* AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT */
+    {  8, 11,  8, 11, 16, 16, 16, 16, 14, 15, 14, 15,  7,  7, 10,  7, 13,  6, 13,  6, 12, 12, 12, 12, 14, 14, 14, 14,  9,  9,  9,  9,  3,  2,  3,  2,  0,  0,  0,  0,  5,  5,  5,  5, 17, 17, 17, 17, 27, 19, 27, 19, 15, 15, 15, 15,  5,  1, 18,  1,  9,  4,  9,  4 },
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0 },
+  /*   K   N   K   N   T   T   T   T   R   S   R   S   I   I   M   I   Q   H   Q   H   P   P   P   P   R   R   R   R   L   L   L   L   E   D   E   D   A   A   A   A   G   G   G   G   V   V   V   V   *   Y   *   Y   S   S   S   S   G   C   W   C   L   F   L   F */
+    NULL, NULL },
+};
+
+
+/*****************************************************************
+ * 2. The ESL_GENCODE genetic code object
+ *****************************************************************/
+
+/* Function:  esl_gencode_Create()
+ * Synopsis:  Create a new genetic code object
+ *
+ * Purpose:   Create a new genetic code object for translating DNA/RNA alphabet
+ *            <nt_abc> to protein alphabet <aa_abc>, using the standard 
+ *            genetic code (NCBI transl_table 1).
+ *            
+ *            If you want a different code than transl_table 1, use
+ *            <esl_gencode_Set()> to reset your <ESL_GENCODE> to a
+ *            different code after you create it.
+ *
+ *            Because the built-in genetic code tables have been
+ *            pre-digitized with the standard Easel alphabets,
+ *            <nt_abc> and <aa_abc> must generally also be standard
+ *            Easel alphabets: <eslDNA> or <eslRNA> for <nt_abc>, and
+ *            <eslAMINO> for <aa_abc>. The exception is if you're
+ *            going to digitize NCBI data files for different Easel
+ *            alphabets (for instance, if you're going to build a new,
+ *            or your own version of the pre-digitized
+ *            <esl_transl_tables[]>). As a special case, if either
+ *            <nt_abc> or <aa_abc> are not standard Easel alphabets, 
+ *            the new <ESL_GENCODE> is left uninitialized, rather than
+ *            setting it to transl_table 1.
+ *            
+ *            The <ESL_GENCODE> object keeps a copy of the two
+ *            alphabet pointers. Caller is still responsible for their
+ *            deallocation.  They should not be deallocated until
+ *            after the <ESL_GENCODE> object is.
+ *
+ * Returns:   A pointer to the new object.
+ *
+ * Throws:    <NULL> if allocation fails.
+ */
+ESL_GENCODE *
+esl_gencode_Create(const ESL_ALPHABET *nt_abc, const ESL_ALPHABET *aa_abc)
+{
+  ESL_GENCODE *gcode = NULL;
+  int status;
+
+  ESL_ALLOC(gcode, sizeof(ESL_GENCODE));
+
+  gcode->nt_abc = nt_abc;      // Keep a reference to the nucleic alphabet; caller remains responsible for it
+  gcode->aa_abc = aa_abc;      //  ditto for amino alphabet
+
+  if ( (nt_abc->type == eslDNA || nt_abc->type == eslRNA) && aa_abc->type == eslAMINO) 
+    esl_gencode_Set(gcode, 1);   // Default = standard code (NCBI trans table 1) 
+  return gcode;
+
+ ERROR:
+  esl_gencode_Destroy(gcode);
+  return NULL;
+}
+
+
+/* Function:  esl_gencode_Destroy()
+ * Synopsis:  Deallocate an <ESL_GENCODE>
+ */
+void
+esl_gencode_Destroy(ESL_GENCODE *gcode)
+{
+  if (gcode) free(gcode);
+}
+
+
+
+/* Function:  esl_gencode_Set()
+ * Synopsis:  Set one of the NCBI standard genetic codes
+ *
+ * Purpose:   Set <gcode> to use one of the standard NCBI genetic code tables,
+ *            using the NCBI identifier <ncbi_transl_table>. 
+ *            
+ *            <ncbi_transl_table> is an integer from 1..25 (not all of
+ *            which are valid). For example, 1 is the standard code,
+ *            and 6 is the ciliate nuclear code.
+ *            
+ *            The alphabets in <gcode> must be standard Easel
+ *            alphabets: <eslAMINO> for <aa_abc> and either <eslDNA>
+ *            or <eslRNA> for <nt_abc>. This is because <_Set()>
+ *            simply copies precomputed digitized data for the
+ *            appropriate genetic code, and that precomputation is
+ *            done with the standard Easel digital alphabets.  If the
+ *            <aa_abc> and <nt_abc> alphabet reference ptrs in <gcode>
+ *            are set (and this is recommended, but not necessary)
+ *            they're used to verify that the alphabets are Easel
+ *            standard ones.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslENOTFOUND> if the <ncbi_transl_table> code is not 
+ *            in our available table of genetic codes.
+ *
+ * Throws:    <eslEINVAL> if either of the alphabets in <gcode> are 
+ *            nonstandard.
+ */
+int
+esl_gencode_Set(ESL_GENCODE *gcode,  int ncbi_transl_table)
+{
+  int ntables = sizeof(esl_transl_tables) / sizeof(ESL_GENCODE);
+  int t, c;
+  
+  if (gcode->nt_abc && (gcode->nt_abc->type != eslDNA && gcode->nt_abc->type != eslRNA))
+    ESL_EXCEPTION(eslEINVAL, "NCBI translation tables are precomputed using Easel standard alphabets; your nucleic alphabet is nonstandard");
+  if (gcode->aa_abc && gcode->aa_abc->type != eslAMINO)
+    ESL_EXCEPTION(eslEINVAL, "NCBI translation tables are precomputed using Easel standard alphabets; your amino alphabet is nonstandard");
+
+  for (t = 0; t < ntables; t++)
+    if ( esl_transl_tables[t].transl_table == ncbi_transl_table) break;
+  if (t == ntables) return eslENOTFOUND;
+  
+  gcode->transl_table = esl_transl_tables[t].transl_table;
+  strcpy(gcode->desc, esl_transl_tables[t].desc);
+  for (c = 0; c < 64; c++)
+    {
+      gcode->basic[c] = esl_transl_tables[t].basic[c];
+      gcode->is_initiator[c] = esl_transl_tables[t].is_initiator[c];
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_gencode_SetInitiatorAny()
+ * Synopsis:  Set initiator field so ORFs can start with any aa
+ *
+ * Purpose:   Set <gcode> to allow ORFs to start with any amino acid, as
+ *            opposed to looking for initiation codons.
+ *            
+ *            We do this by overwriting the <is_initiator> field to be
+ *            TRUE for all codons except terminators. Because we
+ *            overwrite, the only way to revert a genetic code to use
+ *            its official set of initiators is to reinitialize it
+ *            completely.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_gencode_SetInitiatorAny(ESL_GENCODE *gcode)
+{
+  int c; 	
+  for (c = 0; c < 64; c++)
+    gcode->is_initiator[c] = (esl_abc_XIsCanonical(gcode->aa_abc, gcode->basic[c]) ? TRUE : FALSE);
+  return eslOK;
+}
+
+
+/* Function:  esl_gencode_SetInitiatorOnlyAUG
+ * Synopsis:  Set initiator field so ORFs must start with AUG
+ *
+ * Purpose:   Set <gcode> so that ORFs can only start with AUG, as opposed
+ *            to using the possibly larger set of plausible initiator codons
+ *            associated with the standard NCBI genetic codes. (For example,
+ *            the standard code 1 allows ATG, CTG, and UUG initiators.)
+ *            
+ *            We do this by overwriting the <is_initiator> field to be TRUE
+ *            only for the ATG codon.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_gencode_SetInitiatorOnlyAUG(ESL_GENCODE *gcode)
+{
+  int c;
+  int atgcodon = 16 * esl_abc_DigitizeSymbol(gcode->nt_abc, 'A') +
+                  4 * esl_abc_DigitizeSymbol(gcode->nt_abc, 'T') +
+                      esl_abc_DigitizeSymbol(gcode->nt_abc, 'G');
+
+  for (c = 0; c < 64; c++) gcode->is_initiator[c] = FALSE;
+  gcode->is_initiator[atgcodon] = TRUE;
+  return eslOK;
+}
+  
+
+
+/*****************************************************************
+ * 3. Reading and writing genetic codes in NCBI format
+ *****************************************************************/
+
+/* Function:  esl_gencode_Read()
+ * Synopsis:  Read a genetic code in NCBI text format from a stream.
+ *
+ * Purpose:   Read an NCBI genetic code text file from <efp>; parse it
+ *            and convert to Easel digitized data using the nucleic 
+ *            acid alphabet <nt_abc> and the protein alphabet <aa_abc>;
+ *            return a pointer to the newly created <ESL_GENCODE> object
+ *            via <*ret_gcode>.
+ *
+ *            Example of an NCBI genetic code datafile:
+ * 
+ *            AAs    = FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+ *            Starts = ---M---------------M---------------M----------------------------
+ *            Base1  = TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+ *            Base2  = TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+ *            Base3  = TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+ *
+ *            Caller is responsible for opening the <efp> first.  This
+ *            allows caller to take input from files, streams, or even
+ *            to have data embedded as a piece of a larger file format
+ *            it's parsing. 
+ *            
+ *            The <efp> is configured so that lines beginning with '#' 
+ *            are ignored as comments, and upon return, the <efp> remains
+ *            configured this way.
+ *
+ *            This function is and must remain independent of the
+ *            order of residues in the amino and nucleic
+ *            alphabets. This allows us to convert NCBI genetic code
+ *            text files to digitized Easel translation tables even
+ *            for other orders of the symbols in DNA/protein digital
+ *            alphabets, including the case of us someday changing the
+ *            order of the Easel standard alphabet(s). Once digitized,
+ *            Easel encodings of the genetic code are dependent on the
+ *            <eslAMINO> and <eslNUCLEIC> alphabets they were created
+ *            with.
+ *            
+ *            Slightly confusing case: if we *did* change the order in
+ *            the Easel standard alphabets, the esl_gencode module has
+ *            no way to know that it changed. All it sees is the
+ *            <eslDNA>, <eslRNA>, or <eslAMINO> <type>. <ESL_GENCODE>
+ *            data will be corrupted, and unit testing of
+ *            <esl_gencode> will fail, until the <esl_transl_tables[]>
+ *            data are rebuilt for the new alphabets using the
+ *            <esl_gencode_example> program.
+ *
+ * Returns:   <eslOK> on success. <*ret_gcode> contains the new <ESL_GENCODE>.
+ *            <efp> has been set to ignore lines beginning with '#'.
+ *            
+ *            On a parse error, returns <eslEFORMAT>, and an informative message is
+ *            left in <efp->errbuf>. Now <*ret_gcode> is NULL, but <efp> has
+ *            still been configured to ignore lines beginning with '#'.
+ */
+int
+esl_gencode_Read(ESL_FILEPARSER *efp, const ESL_ALPHABET *nt_abc, const ESL_ALPHABET *aa_abc, ESL_GENCODE **ret_gcode)
+{
+  ESL_GENCODE *gcode = esl_gencode_Create(nt_abc, aa_abc);
+  ESL_REGEXP  *mach  = esl_regexp_Create();
+  int   start, end, s, e;
+  char  aas[65];
+  char  mline[65];
+  char  base1[65];
+  char  base2[65];
+  char  base3[65];
+  int   aa_seen[20];
+  int   stop_seen;
+  int   codon_seen[64];
+  int   x, codon, pos;
+  int   status;
+
+  ESL_DASSERT1(( nt_abc->K == 4  ));  // We're going to hardcode ncodons = 64, so "trust but verify"
+  ESL_DASSERT1(( aa_abc->K   == 20 ));
+
+  if (( status = esl_fileparser_SetCommentChar(efp, '#') != eslOK)) goto ERROR;
+
+  if ((status = esl_fileparser_NextLine(efp))                                           != eslOK)  {  if (status == eslEOF) ESL_XFAIL(eslEFORMAT, efp->errbuf, "File empty or truncated? No AAs line found");  else goto ERROR; }
+  if ((status = esl_regexp_Match(mach, "^\\s*[Aa][Aa]s\\s*=\\s*(\\S+)\\s*$", efp->buf)) != eslOK)  {  if (status == eslEOD) ESL_XFAIL(eslEFORMAT, efp->errbuf, "First data line doesn't start with 'AAs ='");  else goto ERROR; }
+  if ((status = esl_regexp_SubmatchCoords(mach, efp->buf, 1, &start, &end))             != eslOK)  goto ERROR;  
+  if (end - start + 1 != 64) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Expected 64 char of AAs data");
+  strncpy(aas, efp->buf+start, 64); 
+  aas[64] = '\0';
+  
+  if ((status = esl_fileparser_NextLine(efp))                                           != eslOK)  {  if (status == eslEOF) ESL_XFAIL(eslEFORMAT, efp->errbuf, "File empty or truncated? No Starts line found");   else goto ERROR; }
+  if ((status = esl_regexp_Match(mach, "^\\s*[Ss]tarts\\s*=\\s*(\\S+)\\s*$", efp->buf)) != eslOK)  {  if (status == eslEOD) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Second data line doesn't start with 'Starts ='");  else goto ERROR; }
+  if ((status = esl_regexp_SubmatchCoords(mach, efp->buf, 1, &s, &e))                   != eslOK)  goto ERROR;
+  if (e - s + 1 != 64)  ESL_XFAIL(eslEFORMAT, efp->errbuf, "Expected 64 char of Starts data");
+  if (s != start)       ESL_XFAIL(eslEFORMAT, efp->errbuf, "Starts data is not aligned with AAs data above it");
+  strncpy(mline, efp->buf+start, 64); 
+  mline[64] = '\0';
+
+  if ((status = esl_fileparser_NextLine(efp))                                           != eslOK)  {  if (status == eslEOF) ESL_XFAIL(eslEFORMAT, efp->errbuf, "File empty or truncated? No Base1 line found");  else goto ERROR; }
+  if ((status = esl_regexp_Match(mach, "^\\s*[Bb]ase1\\s*=\\s*(\\S+)\\s*$", efp->buf))  != eslOK)  {  if (status == eslEOD) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Third data line doesn't start with 'Base1 ='");  else goto ERROR; }
+  if ((status = esl_regexp_SubmatchCoords(mach, efp->buf, 1, &s, &e))                   != eslOK)  goto ERROR;
+  if (e - s + 1 != 64)  ESL_XFAIL(eslEFORMAT, efp->errbuf, "Expected 64 char of Base1 data");
+  if (s != start)       ESL_XFAIL(eslEFORMAT, efp->errbuf, "Base1 data is not aligned with data above it");
+  strncpy(base1, efp->buf+start, 64); 
+  base1[64] = '\0';
+
+  if ((status = esl_fileparser_NextLine(efp))                                           != eslOK)  {  if (status == eslEOF) ESL_XFAIL(eslEFORMAT, efp->errbuf, "File empty or truncated? No Base2 line found");  else goto ERROR; }
+  if ((status = esl_regexp_Match(mach, "^\\s*[Bb]ase2\\s*=\\s*(\\S+)\\s*$", efp->buf))  != eslOK)  {  if (status == eslEOD) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Fourth data line doesn't start with 'Base2 ='"); else goto ERROR; }
+  if ((status = esl_regexp_SubmatchCoords(mach, efp->buf, 1, &s, &e))                   != eslOK)  goto ERROR;
+  if (e - s + 1 != 64)  ESL_XFAIL(eslEFORMAT, efp->errbuf, "Expected 64 char of Base2 data");
+  if (s != start)       ESL_XFAIL(eslEFORMAT, efp->errbuf, "Base2 data is not aligned with data above it");
+  strncpy(base2, efp->buf+start, 64); 
+  base2[64] = '\0';
+
+  if ((status = esl_fileparser_NextLine(efp))                                           != eslOK)  {  if (status == eslEOF) ESL_XFAIL(eslEFORMAT, efp->errbuf, "File empty or truncated? No Base3 line found"); else goto ERROR; }
+  if ((status = esl_regexp_Match(mach, "^\\s*[Bb]ase3\\s*=\\s*(\\S+)\\s*$", efp->buf))  != eslOK)  {  if (status == eslEOD) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Fifth data line doesn't start with 'Base3 ='"); else goto ERROR; }
+  if ((status = esl_regexp_SubmatchCoords(mach, efp->buf, 1, &s, &e))                   != eslOK)  goto ERROR;
+  if (e - s + 1 != 64)  ESL_XFAIL(eslEFORMAT, efp->errbuf, "Expected 64 char of Base3 data");
+  if (s != start)       ESL_XFAIL(eslEFORMAT, efp->errbuf, "Base3 data is not aligned with data above it");
+  strncpy(base3, efp->buf+start, 64); 
+  base3[64] = '\0';
+
+  stop_seen = FALSE;
+  for (    x = 0;     x < 20;     x++)    aa_seen[x]     = FALSE;
+  for (codon = 0; codon < 64; codon++) codon_seen[codon] = FALSE;
+  
+  for (pos = 0; pos < 64; pos++)
+    {
+      if (! esl_abc_CIsValid(aa_abc,   aas[pos])   || ! (esl_abc_CIsCanonical(aa_abc, aas[pos]) || esl_abc_CIsNonresidue(aa_abc, aas[pos])))  ESL_XFAIL(eslEFORMAT, efp->errbuf, "Character %c on AAs line is not an amino acid or a * (stop)", aas[pos]);
+      if (! esl_abc_CIsValid(nt_abc, base1[pos]) || ! esl_abc_CIsCanonical(nt_abc, base1[pos]))                                              ESL_XFAIL(eslEFORMAT, efp->errbuf, "Character %c on Base1 line is not a nucleotide", base1[pos]);
+      if (! esl_abc_CIsValid(nt_abc, base2[pos]) || ! esl_abc_CIsCanonical(nt_abc, base2[pos]))                                              ESL_XFAIL(eslEFORMAT, efp->errbuf, "Character %c on Base2 line is not a nucleotide", base2[pos]);
+      if (! esl_abc_CIsValid(nt_abc, base3[pos]) || ! esl_abc_CIsCanonical(nt_abc, base3[pos]))                                              ESL_XFAIL(eslEFORMAT, efp->errbuf, "Character %c on Base3 line is not a nucleotide", base3[pos]);
+      if ( mline[pos] != '-' && mline[pos] != 'm' && mline[pos] != 'M')                                                                                ESL_XFAIL(eslEFORMAT, efp->errbuf, "Character %c on Starts line is neither a - or an M", mline[pos]);
+
+      codon = 16 * esl_abc_DigitizeSymbol(nt_abc, base1[pos]) +
+	       4 * esl_abc_DigitizeSymbol(nt_abc, base2[pos]) +
+                   esl_abc_DigitizeSymbol(nt_abc, base3[pos]);
+      x    = esl_abc_DigitizeSymbol(aa_abc, aas[pos]);
+
+      ESL_DASSERT1(( codon >= 0 && codon < 64 ));
+      ESL_DASSERT1(( x >= 0 && (x < 20 || x == esl_abc_XGetNonresidue(aa_abc))));
+
+      if (x < 20) aa_seen[x]++; else stop_seen++;
+      codon_seen[codon]++;
+      
+      gcode->basic[codon]        = x;
+      gcode->is_initiator[codon] = ( mline[pos] == '-' ? FALSE : TRUE );   // We already checked above that it's one of "-mM"
+    }
+
+  /* A genetic code must provide a translation for all 64 codons, and
+   * all 20 amino acids to be encoded. (No organism is yet known to
+   * encode fewer than 20 amino acids [Kawahara-Kobayashi et al, NAR
+   * 40:10576, 2012].) The code must include at least one stop codon.
+   */
+  if (! stop_seen)           ESL_XFAIL(eslEFORMAT, efp->errbuf, "No stop codon found in that genetic code");
+  for (codon = 0; codon < 64; codon++)
+    if (! codon_seen[codon]) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Data for fewer than 64 codons was found");
+  for (x = 0; x < 20; x++)
+    if (aa_seen[x] == 0)     ESL_XFAIL(eslEFORMAT, efp->errbuf, "No codon for residue %c found", aa_abc->sym[x]);
+
+  
+  esl_regexp_Destroy(mach);
+  gcode->transl_table = -1;         // It was initialized to 1, the NCBI standard table; reset
+  gcode->desc[0]     = '\0';        // Was initialized to desc of NCBI table 1; blank it
+  gcode->nt_abc      = nt_abc;
+  gcode->aa_abc      = aa_abc;
+  *ret_gcode         = gcode;
+  return eslOK;
+
+ ERROR:
+  if (gcode) esl_gencode_Destroy(gcode);
+  if (mach)  esl_regexp_Destroy(mach);
+  *ret_gcode = NULL;
+  return status;
+}
+
+
+/* Function:  esl_gencode_Write()
+ * Synopsis:  Write a genetic code to a stream, in NCBI format
+ *
+ * Purpose:   Write the genetic code <gcode> to stream <ofp> in NCBI format.
+ *
+ *            If <add_comment> is TRUE and if it's a standard NCBI genetic code
+ *            (i.e. with an NCBI transl_table number), also add a comment
+ *            line at the top to document which transl_table it is, and the
+ *            description line. This is an Easel extension. Other programs 
+ *            that read NCBI genetic code files will probably not be able to 
+ *            parse the Easel comment line, and for such programs you'll want
+ *            <add_comment> to be FALSE.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on a write failure, such as a disk running out of space.
+ */
+int
+esl_gencode_Write(FILE *ofp, const ESL_GENCODE *gcode, int add_comment)
+{
+  char order[] = "TCAG";
+  int  x,c;
+
+  if (add_comment && gcode->transl_table > 0) 
+    if ( fprintf(ofp, "# %d %s\n", 
+		 gcode->transl_table, gcode->desc) < 0)             ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+
+  
+  if ( fprintf(ofp, "    AAs  = ")  < 0)                            ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+  for (x = 0; x < 64; x++) {
+    c =  16 * esl_abc_DigitizeSymbol(gcode->nt_abc, order[ x/16 ])     
+        + 4 * esl_abc_DigitizeSymbol(gcode->nt_abc, order[ (x%16)/4 ]) 
+        +     esl_abc_DigitizeSymbol(gcode->nt_abc, order[ x%4]);
+    if (fputc( gcode->aa_abc->sym[gcode->basic[c]], ofp) < 0)       ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed"); 
+  }
+  if ( fputc('\n', ofp) < 0)                                        ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+
+  if ( fprintf(ofp, "  Starts = ")  < 0)                            ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+  for (x = 0; x < 64; x++) {
+    c =  16 * esl_abc_DigitizeSymbol(gcode->nt_abc, order[ x/16 ])     
+        + 4 * esl_abc_DigitizeSymbol(gcode->nt_abc, order[ (x%16)/4 ]) 
+        +     esl_abc_DigitizeSymbol(gcode->nt_abc, order[ x%4]);
+    if (fputc( (gcode->is_initiator[c] ? 'M' : '-'), ofp) < 0)      ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+  }
+  if ( fputc('\n', ofp) < 0)                                        ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+
+  if ( fprintf(ofp, "  Base1  = ")  < 0)                            ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+  for (x = 0; x < 64; x++) if ( fputc( order[ x/16 ], ofp) < 0)     ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+  if ( fputc('\n', ofp) < 0)                                        ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+
+  if ( fprintf(ofp, "  Base2  = ")  < 0)                            ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+  for (x = 0; x < 64; x++) if ( fputc( order[ (x%16)/4 ], ofp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+  if ( fputc('\n', ofp) < 0)                                        ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+
+  if ( fprintf(ofp, "  Base3  = ")  < 0)                            ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+  for (x = 0; x < 64; x++) if ( fputc( order[ x%4 ], ofp) < 0)      ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+  if ( fputc('\n', ofp) < 0)                                        ESL_EXCEPTION_SYS(eslEWRITE, "genetic code write failed");
+  
+  return eslOK;
+}
+
+
+
+
+/*****************************************************************
+ * 4. DNA->protein digital translation, allowing ambiguity chars
+ *****************************************************************/
+
+
+/* Function:  esl_gencode_GetTranslation()
+ * Synopsis:  Returns translation of a degenerate digital codon.
+ *
+ * Purpose:   Translate the digital DNA/RNA codon sequence starting at 
+ *            pointer <dsqp> and return the digital amino acid code.
+ *
+ *            <dsqp> is a pointer into a digital sequence,
+ *            not a complete digital sequence, so there are no sentinels.
+ *            Also, caller must be sure that a full codon dsqp[0..2] exists
+ *            at this location.
+ *            
+ *            Ambiguity codes are allowed in the DNA/RNA codon. If 
+ *            the amino acid is unambiguous, despite codon ambiguity,
+ *            the correct amino acid is still determined: for example,
+ *            GGR translates as Gly, UUY as Phe, AUH as Ile. If 
+ *            there is no single unambiguous amino acid translation, the codon
+ *            is translated as X (unknown). 
+ *            
+ *            Other than X, no amino acid ambiguity code is
+ *            returned. We do not, for example, decode SAR as Z (Q|E),
+ *            MUH as J (I|L), or RAY as B (N|D), because the extra
+ *            complexity needed to do this doesn't seem worthwhile.
+ *
+ * Returns:   digital amino acid code (0..19 or esl_abc_XGetUnknown()) in
+ *            the protein alphabet.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_gencode_GetTranslation(const ESL_GENCODE *gcode, ESL_DSQ *dsqp)
+{
+  ESL_DSQ x, y, z;
+  int     codon;
+  int     aa = -1;
+
+  if (esl_abc_XIsCanonical(gcode->nt_abc, dsqp[0]) && esl_abc_XIsCanonical(gcode->nt_abc, dsqp[1]) && esl_abc_XIsCanonical(gcode->nt_abc, dsqp[2]))
+    {
+      codon = 16*dsqp[0] + 4*dsqp[1] + dsqp[2];
+      return gcode->basic[codon];
+    }
+
+  for (x = 0; x < 4; x++)
+    {
+      if (! gcode->nt_abc->degen[dsqp[0]][x]) continue;
+      for (y = 0; y < 4; y++)
+	{
+	  if (! gcode->nt_abc->degen[dsqp[1]][y]) continue;
+	  for (z = 0; z < 4; z++)
+	    {
+	      if (! gcode->nt_abc->degen[dsqp[2]][z]) continue;
+	      /* xyz is one possible basic codon included in the dsqp[3] degeneracy */
+	      codon = x * 16 + y * 4 + z;
+	      if      (aa == -1) aa = gcode->basic[codon];
+	      else if (aa != gcode->basic[codon]) return esl_abc_XGetUnknown(gcode->aa_abc);
+	    }
+	}
+    }
+  return aa;
+}
+
+/* Function:  esl_gencode_IsInitiator()
+ * Synopsis:  Returns TRUE if degenerate codon is an initiator
+ *
+ * Purpose:   Determine if all possible codons consistent with the 
+ *            degenerate codon sequence starting at <dsqp> are
+ *            all initiation codons; return TRUE if so, else FALSE.
+ *
+ *            For example, the standard code allows AUG|CUG|UUG 
+ *            initiators. Given HUG, MUG, or YUG, we would return
+ *            TRUE.
+ *            
+ *            Because stop codons never have the <is_initiator> flag,
+ *            even if we used <esl_gencode_SetAnyInitiator()>, NNN
+ *            will never be used to initiate an open reading frame,
+ *            nor will other degenerate codons that are consistent
+ *            with at least one stop. This is desirable: we don't want
+ *            to call all-X ORFs across long stretches of N's that
+ *            are prevalent in DNA sequence assemblies.
+ *            
+ *            Works fine on nondegenerate codons too, but if caller
+ *            knows the codon is nondegenerate, it should simply
+ *            test <gcode->is_initiator[0..63]> directly.
+ *            
+ *            <dsqp> is a pointer into a digital sequence, not 
+ *            a digital sequence itself, so there are no sentinels:
+ *            the codon is dsqp[0..2]. Moreover, caller must be
+ *            sure that a full codon exists at this location;
+ *            don't call this function at dsq[L-1] or dsq[L].
+ *
+ * Returns:   TRUE|FALSE
+ */
+int
+esl_gencode_IsInitiator(const ESL_GENCODE *gcode, ESL_DSQ *dsqp)
+{
+  ESL_DSQ x, y, z;
+  int     codon;
+  int     ncodons = 0;
+
+  /* Handle the canonical case (no degeneracies) even though it's
+   * wasteful to call esl_gencode_IsInitiator() if there's no 
+   * degeneracies.
+   */
+  if (esl_abc_XIsCanonical(gcode->nt_abc, dsqp[0]) && esl_abc_XIsCanonical(gcode->nt_abc, dsqp[1]) && esl_abc_XIsCanonical(gcode->nt_abc, dsqp[2]))
+    {
+      codon = 16*dsqp[0] + 4*dsqp[1] + dsqp[2];
+      return gcode->is_initiator[codon];
+    }
+
+  /* Main case: if there's degeneracies then all possible
+   * codons must be initiators to call the ambig codon an initiator.
+   */
+  for (x = 0; x < 4; x++)
+    {
+      if (! gcode->nt_abc->degen[dsqp[0]][x]) continue;
+      for (y = 0; y < 4; y++)
+	{
+	  if (! gcode->nt_abc->degen[dsqp[1]][y]) continue;
+	  for (z = 0; z < 4; z++)
+	    {
+	      if (! gcode->nt_abc->degen[dsqp[2]][z]) continue;
+	      /* xyz is one possible basic codon included in the dsqp[3] degeneracy */
+	      codon = x * 16 + y * 4 + z;
+	      ncodons++;
+	      if (! gcode->is_initiator[codon]) return FALSE;
+	    }
+	}
+    }
+
+  /* I can't imagine a degeneracy that doesn't correspond to at least one codon, 
+   * but it creeps me out to leave the door open to this returning TRUE if it
+   * hasn't seen any. Hence, <ncodons> test.
+   */
+  return (ncodons ? TRUE : FALSE); 
+}
+
+
+/*****************************************************************
+ * 5. Functions for creating/destroying ESL_TRANS_WORKSTATE
+ *****************************************************************/
+void
+esl_gencode_WorkstateDestroy(ESL_GENCODE_WORKSTATE *wrk)
+{
+  int f;
+  if (wrk)
+    {
+      for (f = 0; f < 3; f++) esl_sq_Destroy(wrk->psq[f]);
+
+      if(wrk->orf_block != NULL)
+      {
+         esl_sq_DestroyBlock(wrk->orf_block);
+         wrk->orf_block = NULL;
+      }
+
+      free(wrk);
+    }
+}
+
+ESL_GENCODE_WORKSTATE *
+esl_gencode_WorkstateCreate(ESL_GETOPTS *go, ESL_GENCODE *gcode)
+{
+  ESL_GENCODE_WORKSTATE *wrk = NULL;
+  int    f;
+  int    status;
+
+  ESL_ALLOC(wrk, sizeof(ESL_GENCODE_WORKSTATE));
+  for (f = 0; f < 3; f++) wrk->psq[f] = NULL;
+
+  for (f = 0; f < 3; f++)
+    {
+      wrk->psq[f]         = esl_sq_CreateDigital(gcode->aa_abc);
+      wrk->psq[f]->dsq[0] = eslDSQ_SENTINEL;
+      wrk->in_orf[f]      = FALSE;
+    }
+
+  wrk->apos             = 1;
+  wrk->frame            = 0;
+  wrk->codon            = 0;
+  wrk->inval            = 0;
+  wrk->is_revcomp       = FALSE;
+  wrk->orfcount         = 0;
+
+  wrk->orf_block           = NULL;
+
+  wrk->do_watson        = (esl_opt_GetBoolean(go, "--crick")  ? FALSE : TRUE);
+  wrk->do_crick         = (esl_opt_GetBoolean(go, "--watson") ? FALSE : TRUE);
+  wrk->using_initiators = ((esl_opt_GetBoolean(go, "-m") || esl_opt_GetBoolean(go, "-M")) ? TRUE : FALSE);
+  wrk->minlen           = esl_opt_GetInteger(go, "-l");
+  wrk->outfp            = stdout;
+  wrk->outformat        = eslSQFILE_FASTA;
+
+  return wrk;
+
+ ERROR:
+  esl_gencode_WorkstateDestroy(wrk);
+  return NULL;
+}
+
+/*****************************************************************
+ *  6. Functions for processing ORFs
+ *****************************************************************/
+
+int
+esl_gencode_ProcessOrf(ESL_GENCODE_WORKSTATE *wrk, ESL_SQ *sq)
+{
+
+  int              status   = eslOK;
+  ESL_SQ *psq = wrk->psq[wrk->frame];
+
+  psq->end = (wrk->is_revcomp ? wrk->apos+1 : wrk->apos-1);
+
+  if (wrk->in_orf[wrk->frame] && psq->n >= wrk->minlen)
+    {
+      wrk->orfcount++;
+      if (psq->n+2 > psq->salloc)
+        esl_sq_Grow(psq, /*opt_nsafe=*/NULL);
+      psq->dsq[1+psq->n] = eslDSQ_SENTINEL;
+
+      esl_sq_FormatName(psq, "orf%d", wrk->orfcount);
+      esl_sq_FormatDesc(psq, "source=%s coords=%d..%d length=%d frame=%d  %s", psq->source, psq->start, psq->end, psq->n, wrk->frame + 1 + (wrk->is_revcomp ? 3 : 0), sq->desc);
+      /* if we do not have a block to write ORFs to then write ORFs to file */
+      if (wrk->orf_block == NULL)
+      {
+        esl_sqio_Write(wrk->outfp, psq, wrk->outformat, /*sq ssi offset update=*/FALSE);
+      }
+      else
+      {
+        if (wrk->orf_block->count == wrk->orf_block->listSize)
+        {
+          status = esl_sq_BlockGrowTo(wrk->orf_block, wrk->orf_block->listSize + 128, TRUE, psq->abc);
+          if (status != eslOK) ESL_XEXCEPTION(eslEMEM, "Cannot increase size of ORF sequence block");
+        }
+        //printf("adding seq to block list num %d\n",wrk->orf_block->count);
+        //esl_sqio_Write(stdout, psq, eslSQFILE_FASTA, 0);
+        //printf("\n");
+        esl_sq_Copy(psq, &(wrk->orf_block->list[wrk->orf_block->count]));
+        //printf("incrementing block count to %d\n",wrk->orf_block->count+1);
+
+        wrk->orf_block->count++;
+      }
+    }
+
+  esl_sq_Reuse(psq);
+  esl_sq_SetSource(psq, sq->name);
+  wrk->in_orf[wrk->frame] = FALSE;
+
+ ERROR:
+  return status;
+}
+
+void
+esl_gencode_ProcessStart(ESL_GENCODE *gcode, ESL_GENCODE_WORKSTATE *wrk, ESL_SQ *sq)
+{
+  int f;
+
+  ESL_DASSERT1(( sq->n >= 3 ));
+
+  for (f = 0; f < 3; f++)
+    {
+      esl_sq_SetSource(wrk->psq[f], sq->name);
+      wrk->in_orf[f] = FALSE;
+    }
+  wrk->frame      = 0;
+  wrk->codon      = 0;
+  wrk->inval      = 0;
+  wrk->is_revcomp = (sq->end > sq->start ? FALSE : TRUE  );   // this test fails for seqs of length 1, but we know that L>=3
+  wrk->apos       = (wrk->is_revcomp ?     sq->L : 1     );
+
+  if (esl_abc_XIsCanonical(gcode->nt_abc, sq->dsq[1])) wrk->codon += 4 * sq->dsq[1]; else wrk->inval = 1;
+  if (esl_abc_XIsCanonical(gcode->nt_abc, sq->dsq[2])) wrk->codon +=     sq->dsq[2]; else wrk->inval = 2;
+}
+
+
+int
+esl_gencode_ProcessPiece(ESL_GENCODE *gcode, ESL_GENCODE_WORKSTATE *wrk, ESL_SQ *sq)
+{
+  ESL_DSQ aa;
+  int     rpos;
+
+  for (rpos = 1; rpos <= sq->n-2; rpos++)
+    {
+      wrk->codon = (wrk->codon * 4) % 64;
+      if   ( esl_abc_XIsCanonical(gcode->nt_abc, sq->dsq[rpos+2])) wrk->codon += sq->dsq[rpos+2];
+      else wrk->inval = 3;
+
+      /* Translate the current codon starting at <pos>;
+       * see if it's an acceptable initiator
+       */
+      if (wrk->inval > 0) // degenerate codon: needs special, tedious handling
+      {
+        aa =  esl_gencode_GetTranslation(gcode, sq->dsq+rpos);                         // This function can deal with any degeneracy
+        if (! wrk->in_orf[wrk->frame] && esl_gencode_IsInitiator(gcode, sq->dsq+rpos)) //   ...as can IsInitiator.
+          {
+            if (wrk->using_initiators)  // If we're using initiation codons, initial codon translates to M even if it's something like UUG or CUG
+              aa = esl_abc_DigitizeSymbol(gcode->aa_abc, 'M');
+            wrk->in_orf[wrk->frame]     = TRUE;
+            wrk->psq[wrk->frame]->start = wrk->apos;
+          }
+        wrk->inval--;
+      }
+      else
+      {
+        aa = gcode->basic[wrk->codon];                             // If we know the digitized codon has no degeneracy, translation is a simple lookup
+        if (gcode->is_initiator[wrk->codon] && ! wrk->in_orf[wrk->frame])
+          {
+            if (wrk->using_initiators)  // If we're using initiation codons, initial codon translates to M even if it's something like UUG or CUG
+              aa = esl_abc_DigitizeSymbol(gcode->aa_abc, 'M');
+            wrk->psq[wrk->frame]->start = wrk->apos;
+            wrk->in_orf[wrk->frame]     = TRUE;
+          }
+      }
+
+      /* Stop codon: deal with this ORF sequence and reinitiate */
+      if ( esl_abc_XIsNonresidue(gcode->aa_abc, aa))
+        esl_gencode_ProcessOrf(wrk, sq);
+
+      /* Otherwise: we have a residue. If we're in an orf (if we've
+       * seen a suitable initiator), add this residue, reallocating as needed.
+       */
+      if (wrk->in_orf[wrk->frame])
+      {
+        if (wrk->psq[wrk->frame]->n + 2 > wrk->psq[wrk->frame]->salloc)
+          esl_sq_Grow(wrk->psq[wrk->frame], /*opt_nsafe=*/NULL);
+        wrk->psq[wrk->frame]->dsq[1+ wrk->psq[wrk->frame]->n] = aa;
+        wrk->psq[wrk->frame]->n++;
+      }
+
+      /* Advance +1 */
+      if (wrk->is_revcomp) wrk->apos--; else wrk->apos++;
+      wrk->frame = (wrk->frame + 1) % 3;
+    }
+  return eslOK;
+}
+
+
+int
+esl_gencode_ProcessEnd(ESL_GENCODE_WORKSTATE *wrk, ESL_SQ *sq)
+{
+  int f;
+
+  /* Done with the sequence. Now terminate all the orfs we were working on.
+   * <apos> is sitting at L-1 (or 2, if revcomp) and we're in some <frame>
+   * there.
+   */
+  ESL_DASSERT1(( (wrk->is_revcomp && wrk->apos == 2) || (! wrk->is_revcomp && wrk->apos == sq->L-1) ));
+  for (f = 0; f < 3; f++) // f counts 0..2, but it is *not* the <frame> index; <frame> is stateful
+    {
+      esl_gencode_ProcessOrf(wrk, sq);
+      if (wrk->is_revcomp) wrk->apos--; else wrk->apos++;
+      wrk->frame = (wrk->frame + 1) % 3;
+    }
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 7. Debugging/development utilities
+ *****************************************************************/ 
+
+/* Function:  esl_gencode_DecodeDigicodon()
+ * Synopsis:  Convert digital codon code 0..63 to a text string
+ *
+ * Purpose:   Routines in the gencode module encode unambiguous codons
+ *            as an index 0..63, by 16 x_0 + 4 x_1 + x_2.  Convert
+ *            <digicodon> (an index 0..63) to a NUL-terminated codon
+ *            string in <codon>, where caller provides allocated space
+ *            for the <codon> string for at least 4 characters.
+ *            
+ * Returns:   <codon> ptr itself; this allows <esl_gencode_DecodeDigicodon()>
+ *            to be called directly as a function in printf() arguments, 
+ *            for example.
+ */
+char *
+esl_gencode_DecodeDigicodon(const ESL_GENCODE *gcode, int digicodon, char *codon)
+{
+  codon[0] = gcode->nt_abc->sym[ digicodon / 16 ];
+  codon[1] = gcode->nt_abc->sym[ (digicodon % 16) / 4 ];
+  codon[2] = gcode->nt_abc->sym[ digicodon % 4 ];
+  codon[3] = '\0';
+  return codon;
+}
+
+
+/* Function:  esl_gencode_DumpAltCodeTable()
+ * Synopsis:  Dump a table of available alternative genetic codes
+ *
+ * Purpose:   Write a table of the available options for alternative
+ *            genetic codes: the NCBI transl_table index number and a
+ *            brief description for each.
+ *            
+ *            Main use of this function is to format help messages,
+ *            listing what the options for transl_table indices are.
+ */
+int
+esl_gencode_DumpAltCodeTable(FILE *ofp)
+{
+  int ntables = sizeof(esl_transl_tables) / sizeof(ESL_GENCODE);
+  int t;
+
+  fprintf(ofp, "id  description\n");
+  fprintf(ofp, "--- -----------------------------------\n");
+  for (t = 0; t < ntables; t++)
+    fprintf(ofp, "%3d %s\n", esl_transl_tables[t].transl_table, esl_transl_tables[t].desc);
+  return eslOK;
+}
+  
+
+/* Function:  esl_gencode_Compare()
+ * Synopsis:  Compare two genetic codes for equality.
+ *
+ * Purpose:   Compare the two genetic codes <gc1> and <gc2>. Return 
+ *            <eslOK> if they are identical, <eslFAIL> if they differ.
+ */
+int 
+esl_gencode_Compare(const ESL_GENCODE *gc1, const ESL_GENCODE *gc2, int metadata_too)
+{
+  int x;
+
+
+  if (gc1->nt_abc->type != gc2->nt_abc->type) return eslFAIL;
+  if (gc1->aa_abc->type != gc2->aa_abc->type) return eslFAIL;
+
+  if (metadata_too) {
+    if (gc1->transl_table != gc2->transl_table) return eslFAIL;
+    if (strcmp(gc1->desc, gc2->desc) != 0)      return eslFAIL;
+  }
+
+  for (x = 0; x < 64; x++)
+    {
+      if (gc1->basic[x]        != gc2->basic[x])        return eslFAIL;
+      if (gc1->is_initiator[x] != gc2->is_initiator[x]) return eslFAIL;
+    }
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 8. Unit tests
+ *****************************************************************/
+#ifdef eslGENCODE_TESTDRIVE
+
+static void
+utest_ReadWrite(void)
+{
+  char msg[]             = "esl_gencode :: Read/Write unit test failed";
+  char tmpfile[16]       = "esltmpXXXXXX";
+  int  ntables           = sizeof(esl_transl_tables) / sizeof(ESL_GENCODE);
+  ESL_ALPHABET   *nt_abc = esl_alphabet_Create(eslDNA);
+  ESL_ALPHABET   *aa_abc = esl_alphabet_Create(eslAMINO);
+  ESL_GENCODE    *gc1    = NULL;
+  ESL_GENCODE    *gc2    = NULL;
+  FILE           *ofp    = NULL;
+  ESL_FILEPARSER *efp    = NULL;
+  int  t;
+
+  for (t = 0; t < ntables; t++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX");
+      if ( (gc1 = esl_gencode_Create(nt_abc, aa_abc))              == NULL)  esl_fatal(msg);
+      if ( esl_gencode_Set(gc1, esl_transl_tables[t].transl_table) != eslOK) esl_fatal(msg);
+
+      if ( esl_tmpfile_named(tmpfile, &ofp)                        != eslOK) esl_fatal(msg);
+      if ( esl_gencode_Write(ofp, gc1, /*add_comment=*/TRUE)       != eslOK) esl_fatal(msg);
+      fclose(ofp);			
+
+      if ( esl_fileparser_Open(tmpfile, /*envvar=*/NULL, &efp)     != eslOK) esl_fatal(msg);
+      if ( esl_gencode_Read(efp, nt_abc, aa_abc, &gc2)             != eslOK) esl_fatal(msg);
+      if ( esl_gencode_Compare(gc1, gc2, /*metadata_too=*/FALSE)   != eslOK) esl_fatal(msg);  // _Read() does not read the metadata (transl_table, desc)
+
+      esl_gencode_Destroy(gc1);
+      esl_gencode_Destroy(gc2);
+      esl_fileparser_Close(efp);
+      remove(tmpfile);  
+    }
+  esl_alphabet_Destroy(nt_abc);
+  esl_alphabet_Destroy(aa_abc);
+}
+
+#endif /*eslGENCODE_TESTDRIVE*/
+
+
+/*****************************************************************
+ * 9. Test driver
+ *****************************************************************/
+#ifdef eslGENCODE_TESTDRIVE
+
+#include "esl_config.h"
+
+#include "esl_gencode.h"
+
+int 
+main(int argc, char **argv)
+{
+  utest_ReadWrite();
+  return eslOK;
+}
+#endif /*eslGENCODE_TESTDRIVE*/
+
+
+/****************************************************************
+ * 10. Example
+ ****************************************************************/
+
+#ifdef eslGENCODE_EXAMPLE
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_fileparser.h"
+#include "esl_gencode.h"
+
+#include <stdio.h>
+
+/* The esl_gencode_example driver isn't an example so much as it's a tool.
+ * It's for digitizing NCBI genetic code tables into the form that
+ * we keep in esl_transl_tables[]. This program does the hard work; 
+ * you then just have to add the transl_table index and the short
+ * description manually.
+ */
+int
+main(int argc, char **argv)
+{
+  char           *codefile = argv[1];
+  ESL_FILEPARSER *efp      = NULL;
+  ESL_GENCODE    *gcode    = NULL;
+  ESL_ALPHABET   *nt_abc   = esl_alphabet_Create(eslDNA);
+  ESL_ALPHABET   *aa_abc   = esl_alphabet_Create(eslAMINO);
+  int  digicodon;
+  char codon[4];
+  int  status;
+
+  if (esl_fileparser_Open(codefile, /*env=*/NULL, &efp) != eslOK) esl_fatal("Failed to open code file %s", codefile);
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  status = esl_gencode_Read(efp, nt_abc, aa_abc, &gcode);
+  if      (status == eslEFORMAT) esl_fatal("Failed to parse genetic code datafile %s\n  %s\n", codefile, efp->errbuf);
+  else if (status != eslOK)      esl_fatal("Unexpected failure parsing genetic code datafile %s : code %d\n", codefile, status);
+
+  printf("/* ");
+  for (digicodon = 0; digicodon < 64; digicodon++)
+    printf("%3s ", esl_gencode_DecodeDigicodon(gcode, digicodon, codon));
+  printf("*/\n");
+
+  printf("  {");
+  for (digicodon = 0; digicodon < 64; digicodon++)
+    printf("%3d%c", gcode->basic[digicodon], (digicodon < 63 ? ',' : ' '));
+  printf("},\n");
+
+  printf("  {");
+  for (digicodon = 0; digicodon < 64; digicodon++)
+    printf("%3d%c", gcode->is_initiator[digicodon], (digicodon < 63 ? ',' : ' '));
+  printf("},\n");
+
+  printf("/* ");
+  for (digicodon = 0; digicodon < 64; digicodon++)
+    printf("  %c ", gcode->aa_abc->sym [gcode->basic[digicodon]]);
+  printf("*/\n");
+
+  esl_alphabet_Destroy(aa_abc);
+  esl_alphabet_Destroy(nt_abc);
+  esl_gencode_Destroy(gcode);
+  esl_fileparser_Close(efp);
+}
+#endif /*eslGENCODE_EXAMPLE*/
+
+
+#ifdef eslGENCODE_EXAMPLE2
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_fileparser.h"
+#include "esl_gencode.h"
+
+#include <stdio.h>
+
+/* The second example, esl_gencode_example2, is the reverse of the first;
+ * it's a little utility for writing the standard code in NCBI format.
+ */
+int
+main(int argc, char **argv)
+{
+  ESL_ALPHABET   *nt_abc   = esl_alphabet_Create(eslDNA);
+  ESL_ALPHABET   *aa_abc   = esl_alphabet_Create(eslAMINO);
+  ESL_GENCODE    *gcode    = esl_gencode_Create(nt_abc, aa_abc);
+
+  esl_gencode_Write(stdout, gcode, TRUE);
+  
+  esl_gencode_Destroy(gcode);
+  return eslOK;
+}
+#endif /*eslGENCODE_EXAMPLE2*/
+
+
+/****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ ****************************************************************/
diff --git a/esl_gencode.h b/esl_gencode.h
new file mode 100644
index 0000000..62d179e
--- /dev/null
+++ b/esl_gencode.h
@@ -0,0 +1,88 @@
+/* Genetic code tables for translation, whether canonical or non.
+ */
+#ifndef eslGENCODE_INCLUDED
+#define eslGENCODE_INCLUDED
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_fileparser.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_getopts.h"
+
+typedef struct {
+  int     transl_table;      // NCBI transl_table number, or -1. Only set for a standard NCBI table, with _Set(); _Read() from file doesn't set this.
+  char    desc[128];         // Description, or "".                ... ditto 
+
+  ESL_DSQ basic[64];         // Basic code table. aacode[0..63; pos1^16 + pos2^4 + pos3] = residue code for amino acid, 0..19 or the Nonresidue code. No degeneracies.
+  int8_t  is_initiator[64];  // TRUE for allowed initiator codons; FALSE if not
+
+  const ESL_ALPHABET *nt_abc;  // A reference to nucleic alphabet that caller is maintaining elsewhere
+  const ESL_ALPHABET *aa_abc;  // A reference to amino alphabet that caller is maintaining 
+} ESL_GENCODE;
+
+/* struct esl_gencode_workstate_s
+ *   keeps state in DNA sequence <sq>, allowing us to process a sequence
+ *   either in a single gulp (using ReadSeq) or in overlapping windows
+ *   (using ReadWindow).
+ *
+ *   also contains one-time configuration information for translation
+ */
+typedef struct esl_gencode_workstate_s {
+  /* stateful info (which may get updated with each new seq, strand, and/or window): */
+  ESL_SQ *psq[3];     // Growing ORFs in each frame
+  int8_t  in_orf[3];  // TRUE|FALSE: TRUE if we're growing an ORF in this frame
+  int     apos;       // 1..L:  current nucleotide we're on (starting a codon) in <sq>
+  int     frame;      // 0..2:  which frame <apos> is in
+  int     codon;      // 0..63: Digitized codon for apos,apos+1,apos+2
+  int     inval;      // 0..3:  how many apos increments we need to get past an ambiguous nucleotide
+  int     is_revcomp; // TRUE|FALSE: TRUE if we're doing reverse complement strand
+  int     orfcount;   // >=0:   How many ORFs we've processed so far
+
+  ESL_SQ_BLOCK  *orf_block; // block of sequences to which to write ORFs
+
+  /* one-time configuration information (from options) */
+  int     do_watson;         // TRUE|FALSE:  TRUE if we translate the top strand
+  int     do_crick;          // TRUE|FALSE:  TRUE if we translate the reverse complement strand
+  int     using_initiators;  // TRUE|FALSE : TRUE if -m or -M, only valid initiators can start an ORF, and initiator codon always translates to Met
+  int     minlen;            // >=0: minimum orf length that process_orf will deal with
+  FILE   *outfp;             // default stdout: where to write output ORF data
+  int     outformat;         // default eslSQFILE_FASTA: sqfile format to write ORFs in
+} ESL_GENCODE_WORKSTATE;
+
+/* Create/Destroy workstate */
+extern void esl_gencode_WorkstateDestroy(ESL_GENCODE_WORKSTATE *wrk);
+extern ESL_GENCODE_WORKSTATE * esl_gencode_WorkstateCreate(ESL_GETOPTS *go, ESL_GENCODE *gcode);
+
+
+/* the ESL_GENCODE genetic code object */
+extern ESL_GENCODE *esl_gencode_Create(const ESL_ALPHABET *nt_abc, const ESL_ALPHABET *aa_abc);
+extern void         esl_gencode_Destroy            (ESL_GENCODE *gcode);
+extern int          esl_gencode_Set                (ESL_GENCODE *gcode,  int ncbi_transl_table);
+extern int          esl_gencode_SetInitiatorAny    (ESL_GENCODE *gcode);
+extern int          esl_gencode_SetInitiatorOnlyAUG(ESL_GENCODE *gcode);
+
+/* reading and writing genetic codes in NCBI format */
+extern int          esl_gencode_Read(ESL_FILEPARSER *efp, const ESL_ALPHABET *nucleic_abc, const ESL_ALPHABET *amino_abc, ESL_GENCODE **ret_gcode);
+extern int          esl_gencode_Write(FILE *ofp, const ESL_GENCODE *gcode, int add_comment);
+
+/* DNA->protein digital translation, allowing ambiguity chars */
+extern int   esl_gencode_GetTranslation(const ESL_GENCODE *gcode, ESL_DSQ *dsqp);
+extern int   esl_gencode_IsInitiator   (const ESL_GENCODE *gcode, ESL_DSQ *dsqp);
+
+/* Debugging/development utilities */
+extern char *esl_gencode_DecodeDigicodon(const ESL_GENCODE *gcode, int digicodon, char *codon);
+extern int   esl_gencode_DumpAltCodeTable(FILE *ofp);
+extern int   esl_gencode_Compare(const ESL_GENCODE *gc1, const ESL_GENCODE *gc2, int metadata_too);
+
+/* Functions for processing ORFs  */
+extern int esl_gencode_ProcessOrf(ESL_GENCODE_WORKSTATE *wrk, ESL_SQ *sq);
+extern void esl_gencode_ProcessStart(ESL_GENCODE *gcode, ESL_GENCODE_WORKSTATE *wrk, ESL_SQ *sq);
+extern int esl_gencode_ProcessPiece(ESL_GENCODE *gcode, ESL_GENCODE_WORKSTATE *wrk, ESL_SQ *sq);
+extern int esl_gencode_ProcessEnd(ESL_GENCODE_WORKSTATE *wrk, ESL_SQ *sq);
+
+
+#endif	/*eslGENCODE_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_getopts.c b/esl_getopts.c
new file mode 100644
index 0000000..2474d29
--- /dev/null
+++ b/esl_getopts.c
@@ -0,0 +1,2170 @@
+/* Implements a somewhat more powerful command line getopt interface
+ * than the standard UNIX/POSIX call.
+ * 
+ * Contents:
+ *    1. The ESL_GETOPTS object.
+ *    2. Setting and testing a configuration.
+ *    3. Retrieving option settings and command line args.
+ *    4. Formatting option help.
+ *    5. Private functions.
+ *    6. Test driver.
+ *    7. Examples.
+ * 
+ * xref STL8/p152; STL9/p5.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h> 
+#include <stdio.h> 
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+
+/* Forward declarations of private functions. */
+static int set_option(ESL_GETOPTS *g, int opti, char *optarg, 
+		      int setby, int do_alloc);
+static int get_optidx_exactly(const ESL_GETOPTS *g, char *optname, int *ret_opti);
+static int get_optidx_abbrev(ESL_GETOPTS *g, char *optname, int n, 
+			     int *ret_opti);
+static int esl_getopts(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg);
+static int process_longopt(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg);
+static int process_stdopt(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg);
+static int verify_type_and_range(ESL_GETOPTS *g, int i, char *val, int setby);
+static int verify_integer_range(char *arg, char *range);
+static int verify_real_range(char *arg, char *range);
+static int verify_char_range(char *arg, char *range);
+static int parse_rangestring(char *range, char c, char **ret_lowerp, 
+			     int *ret_geq, char **ret_upperp, int *ret_leq);
+static int process_optlist(ESL_GETOPTS *g, char **ret_s, int *ret_opti);
+
+
+
+/*****************************************************************
+ *# 1. The <ESL_GETOPTS> object
+ *****************************************************************/ 
+
+/* Function:  esl_getopts_Create()
+ * Synopsis:  Create a new <ESL_GETOPTS> object.
+ *
+ * Purpose:   Creates an <ESL_GETOPTS> object, given the
+ *            array of valid options <opt> (NULL-element-terminated).
+ *            Sets default values for all config 
+ *            options (as defined in <opt>).
+ *
+ * Returns:   ptr to the new <ESL_GETOPTS> object.
+ *
+ * Throws:    NULL on failure, including allocation failures or
+ *            an invalid <ESL_OPTIONS> structure.
+ */
+ESL_GETOPTS *
+esl_getopts_Create(ESL_OPTIONS *opt)
+{
+  ESL_GETOPTS *g = NULL;
+  int status;
+  int i;
+
+  ESL_ALLOC(g, sizeof(ESL_GETOPTS));
+
+  g->opt       = opt;
+  g->argc      = 0;
+  g->argv      = NULL;
+  g->optind    = 1;
+  g->nfiles    = 0;
+  g->val       = NULL;
+  g->setby     = NULL;
+  g->valloc    = NULL;
+  g->optstring = NULL;
+  g->spoof     = NULL;
+  g->spoof_argv= NULL;
+  g->errbuf[0] = '\0';
+
+  /* Figure out the number of options.  
+   *
+   * Using the NULL-terminated structure array is a design decision.
+   * Alternatively, the caller could provide us with noptions, and use
+   * a #define noptions (sizeof(options) / sizeof(ESL_GETOPTS)) idiom.
+   * Note that we can't use sizeof() here, because now <opt> is just a
+   * pointer.
+   * 
+   * A drawback of requiring NULL termination is, what happens when
+   * the caller forgets? Thus the check for a leading '-' on all
+   * options; if we start straying into memory, that check should 
+   * catch us.
+   */
+  g->nopts = 0;
+  while (g->opt[g->nopts].name != NULL) {
+    if (g->opt[g->nopts].name[0] != '-') 
+      ESL_XEXCEPTION(eslEINVAL, "option %d didn't start with '-';\nyou may have forgotten to NULL-terminate the ESL_OPTIONS array", g->nopts);
+    g->nopts++;
+  }
+  
+  /* Set default values for all options.
+   * Note the valloc[] setting: we only need to dup strings
+   * into allocated space if the value is volatile memory, and
+   * that only happens in config files; not in defaults, cmdline,
+   * or environment.
+   */
+  ESL_ALLOC(g->val,    sizeof(char *) * g->nopts);
+  ESL_ALLOC(g->setby,  sizeof(int)    * g->nopts);
+  ESL_ALLOC(g->valloc, sizeof(int)    * g->nopts);
+
+  for (i = 0; i < g->nopts; i++) 
+    {
+      g->val[i]    = g->opt[i].defval;
+      g->setby[i]  = eslARG_SETBY_DEFAULT;
+      g->valloc[i] = 0;	
+    }
+
+  /* Verify type/range of the defaults, even though it's
+   * an application error (not user error) if they're invalid. 
+   */
+  for (i = 0; i < g->nopts; i++) 
+    if (verify_type_and_range(g, i, g->val[i], eslARG_SETBY_DEFAULT) != eslOK) 
+      ESL_XEXCEPTION(eslEINVAL, "%s\n", g->errbuf);
+  return g;
+
+ ERROR:
+  esl_getopts_Destroy(g); 
+  return NULL;
+}
+
+/* Function:  esl_getopts_CreateDefaultApp()
+ * Synopsis:  Initialize a standard Easel application.
+ *
+ * Purpose:   Carry out the usual sequence of events in initializing a
+ *            small Easel-based application: parses the command line,
+ *            process the <-h> option to produce a (single-sectioned)
+ *            help page, and check that the number of command line
+ *            options is right.
+ *            
+ *            <options> is an array of <ESL_OPTIONS> structures describing
+ *            the options, terminated by an all-<NULL> structure.
+ *
+ *            <nargs> is the number of commandline arguments
+ *            expected. If the number of commandline arguments isn't
+ *            equal to this, an error message is printed, with the
+ *            <usage> string, and <exit()> is called. If <nargs> is
+ *            -1, this check isn't done; if your program deliberately
+ *            has a variable number of commandline arguments (i.e.
+ *            if the number is unknown at compile time), pass -1
+ *            for <nargs>.
+ *
+ *            <argc> and <argv> are the command line
+ *            arguments (number and pointer array) from <main()>.
+ *            
+ *            <banner> is an optional one-line description of the
+ *            program's function, such as <"compare RNA structures">.
+ *            When the <-h> help option is selected, this description
+ *            will be combined with the program's name (the tail of
+ *            <argv[0]>) and Easel's copyright and license information
+ *            to give a header like:
+ *            
+ *            \begin{cchunk}
+ *            # esl-compstruct :: compare RNA structures
+ *            # Easel 0.1 (February 2005)
+ *            # Copyright (C) 2004-2007 HHMI Janelia Farm Research Campus
+ *            # Freely licensed under the Janelia Software License.
+ *            # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ *            \end{cchunk}
+ *            
+ *            <usage> is an optional one-line description of command
+ *            line usage (without the command name), such as
+ *            \begin{cchunk}
+ *              [options] <trusted file> <test file>
+ *            \end{cchunk}
+ *            On errors, or
+ *            on the help page, this usage string is combined with 
+ *            the program's name to give a usage line like:
+ *            
+ *            \begin{cchunk}
+ *            Usage: esl-compstruct [options] <trusted file> <test file>
+ *            \end{cchunk}  
+ *            
+ *            <banner> and <usage> are optional, meaning that either
+ *            can be provided as <NULL> and they won't be shown.
+ *
+ * Returns:   a pointer to a new <ESL_GETOPTS> object, which contains
+ *            all the option settings and command line arguments.
+ *            
+ *            On command line errors, this routine exits with abnormal
+ *            (1) status.
+ *            
+ *            If the <-h> help option is seen, this routine exits with
+ *            normal (0) status after printing a help page.
+ *
+ */
+ESL_GETOPTS *
+esl_getopts_CreateDefaultApp(ESL_OPTIONS *options, int nargs, int argc, char **argv, char *banner, char *usage)
+{
+  ESL_GETOPTS *go = NULL;
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK) 
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      if (usage != NULL) esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+  if (esl_opt_GetBoolean(go, "-h") == TRUE) 
+    {
+      if (banner != NULL) esl_banner(stdout, argv[0], banner);
+      if (usage  != NULL) esl_usage (stdout, argv[0], usage);
+      puts("\nOptions:");
+      esl_opt_DisplayHelp(stdout, go, 0, 2, 80);
+      exit(0);
+    }
+  if (nargs != -1 && esl_opt_ArgNumber(go) != nargs) 
+    {
+      puts("Incorrect number of command line arguments.");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+  return go;
+}
+
+
+/* Function:  esl_getopts_Reuse()
+ * Synopsis:  Reset application state to default.
+ *
+ * Purpose:   Reset application configuration <g> to initial defaults,
+ *            as if it were newly created (before any 
+ *            processing of environment, config files, or
+ *            command line). 
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ *
+ * Xref:      J4/24.
+ */
+int
+esl_getopts_Reuse(ESL_GETOPTS *g)
+{
+  int i;
+
+  /* Restore defaults for all options */
+  for (i = 0; i < g->nopts; i++)
+    {
+      if (g->valloc[i] > 0) { free(g->val[i]); }
+      g->val[i]    = g->opt[i].defval;
+      g->setby[i]  = eslARG_SETBY_DEFAULT;
+      g->valloc[i] = 0;	
+    }
+
+  if (g->spoof      != NULL) free(g->spoof);
+  if (g->spoof_argv != NULL) free(g->spoof_argv);
+
+  g->argc       = 0;
+  g->argv       = NULL;
+  g->optind     = 1;
+  g->nfiles     = 0;
+  g->optstring  = NULL;
+  g->spoof      = NULL;
+  g->spoof_argv = NULL;
+  g->errbuf[0]  = '\0';
+  return eslOK;
+}
+
+
+/* Function:  esl_getopts_Destroy()
+ * Synopsis:  Destroys an <ESL_GETOPTS> object.
+ *
+ * Purpose:   Free's a created <ESL_GETOPTS> object.
+ *
+ * Returns:   void.
+ */
+void
+esl_getopts_Destroy(ESL_GETOPTS *g)
+{
+  int i;
+
+  if (g != NULL)
+    {
+      if (g->val   != NULL) 
+	{
+	  /* A few of our vals may have been allocated.
+	   */
+	  for (i = 0; i < g->nopts; i++)
+	    if (g->valloc[i] > 0)
+	      free(g->val[i]);
+	  free(g->val);
+	}
+      if (g->setby      != NULL) free(g->setby);
+      if (g->valloc     != NULL) free(g->valloc);
+      if (g->spoof      != NULL) free(g->spoof);
+      if (g->spoof_argv != NULL) free(g->spoof_argv);
+      free(g);
+    }
+}
+
+
+/* Function:  esl_getopts_Dump()
+ * Synopsis:  Dumps a summary of a <ESL_GETOPTS> configuration.
+ *
+ * Purpose:   Dump the state of <g> to an output stream
+ *            <ofp>, often stdout or stderr.
+ */
+void
+esl_getopts_Dump(FILE *ofp, ESL_GETOPTS *g)
+{
+  int i, j;
+
+  if (g->argv != NULL) 
+    {
+      fprintf(ofp,   "argv[0]:                %s\n", g->argv[0]);
+      for (i = 1, j = g->optind; j < g->argc; j++, i++)
+	fprintf(ofp, "argument %2d (argv[%2d]): %s\n", i, j, g->argv[j]);
+      fputc('\n', ofp); 
+    }
+
+  fprintf(ofp, "%12s %12s %9s\n", "Option", "Setting", "Set by");
+  fprintf(ofp, "------------ ------------ ---------\n");
+
+  for (i = 0; i < g->nopts; i++)
+    {
+      fprintf(ofp, "%-12s ", g->opt[i].name);
+
+      if (g->opt[i].type == eslARG_NONE)  fprintf(ofp, "%-12s ", g->val[i] == NULL ? "off" : "on");
+      else                                fprintf(ofp, "%-12s ", g->val[i]);
+
+      if      (g->setby[i] == eslARG_SETBY_DEFAULT) fprintf(ofp, "(default) ");
+      else if (g->setby[i] == eslARG_SETBY_CMDLINE) fprintf(ofp, "cmdline   ");
+      else if (g->setby[i] == eslARG_SETBY_ENV)     fprintf(ofp, "environ   ");
+      else if (g->setby[i] >= eslARG_SETBY_CFGFILE) fprintf(ofp, "cfgfile   ");
+
+      fprintf(ofp, "\n");
+    }
+  return;
+}
+  
+
+/*****************************************************************
+ *# 2. Setting and testing a configuration
+ *****************************************************************/ 
+
+/* Function:  esl_opt_ProcessConfigfile()
+ * Synopsis:  Parses options in a config file.
+ *
+ * Purpose:   Given an open configuration file <fp> (and
+ *            its name <filename>, for error reporting),
+ *            parse it and set options in <g> accordingly.
+ *            Anything following a <\#> in the file is a
+ *            comment. Blank (or all-comment) lines are
+ *            ignored. Data lines contain one option and
+ *            its optional argument: for example <--foo arg>
+ *            or <-a>. All option arguments are type and
+ *            range checked, as specified in <g>.
+ *            
+ * Returns:   <eslOK> on success.  
+ * 
+ *            Returns <eslESYNTAX> on parse or format error in the
+ *            file, or f option argument fails a type or range check,
+ *            or if an option is set twice by the same config file.
+ *            In any of these "normal" (user) error cases, <g->errbuf>
+ *            is set to a useful error message to indicate the error.
+ *            
+ * Throws:    <eslEMEM> on allocation problem.            
+ */
+int
+esl_opt_ProcessConfigfile(ESL_GETOPTS *g, char *filename, FILE *fp)
+{
+  char *buf = NULL;
+  int   n   = 0;
+  char *s;
+  char *optname;		/* tainted: from user's input file */
+  char *optarg;			/* tainted: from user's input file */
+  char *comment;
+  int   line;
+  int   opti;
+  int   status;
+
+  line = 0;
+  while ((status = esl_fgets(&buf, &n, fp)) != eslEOF)
+    {
+      if (status != eslOK) return status; /* esl_fgets() failed (EMEM) */
+
+      line++;
+      optname = NULL;
+      optarg  = NULL;
+
+      /* First token is the option, e.g. "--foo"
+       */
+      s = buf;
+      esl_strtok(&s, " \t\n", &optname);
+      if (optname   == NULL) continue; /* blank line */
+      if (*optname  == '#')  continue; /* comment line */
+      if (*optname  != '-') 
+	ESL_FAIL(eslESYNTAX, g->errbuf,
+		 "Parse failed at line %d of cfg file %.24s (saw %.24s, not an option)\n",
+		 line, filename, optname);
+      
+      /* Second token, if present, is the arg
+       */
+      if (*s == '"')  esl_strtok(&s, "\"",    &optarg); /* quote-delimited arg */
+      else            esl_strtok(&s, " \t\n", &optarg); /* space-delimited arg */
+      
+      /* Anything else on the line had better be a comment
+       */
+      esl_strtok(&s, " \t\n", &comment);
+      if (comment != NULL && *comment != '#') 
+	ESL_FAIL(eslESYNTAX, g->errbuf,
+		 "Parse failed at line %d of cfg file %.24s (saw %.24s, not a comment)\n",
+		 line, filename, comment);
+	
+      /* Now we've got an optname and an optional optarg;
+       * figure out what option this is.
+       */
+      if (get_optidx_exactly(g, optname, &opti) != eslOK) 
+	ESL_FAIL(eslESYNTAX, g->errbuf,
+		 "%.24s is not a recognized option (config file %.24s, line %d)\n",
+		 optname, filename, line);
+
+      /* Set that option.
+       * Pass TRUE to set_option's do_alloc flag, because our buffer
+       * is volatile memory that's going away soon - set_option needs
+       * to strdup the arg, not just point to it.
+       */
+      status = set_option(g, opti, optarg, 
+			  eslARG_SETBY_CFGFILE+g->nfiles,
+			  TRUE);
+      if (status != eslOK) return status;
+    }
+
+  if (buf != NULL) free(buf);
+  g->nfiles++;
+  return eslOK;
+}
+
+
+
+
+/* Function:  esl_opt_ProcessEnvironment()
+ * Synopsis:  Parses options in the environment.
+ *
+ * Purpose:   For any option defined in <g> that can be modified
+ *            by an environment variable, check the environment
+ *            and set that option accordingly. The value provided
+ *            by the environment is type and range checked.
+ *            When an option is turned on that has other options 
+ *            toggle-tied to it, those options are turned off.
+ *            An option's state may only be changed once by the
+ *            environment (even indirectly thru toggle-tying);
+ *            else an error is generated.
+ *            
+ * Returns:   <eslOK> on success, and <g> is loaded with all
+ *            options specified in the environment.
+ *
+ *            Returns <eslEINVAL> on user input problems, 
+ *            including type/range check failures, and 
+ *            sets <g->errbuf> to a useful error message.
+ *            
+ * Throws:    <eslEMEM> on allocation problem.            
+ */
+int
+esl_opt_ProcessEnvironment(ESL_GETOPTS *g)
+{
+  int   i;
+  char *optarg;
+  int   status;
+
+  for (i = 0; i < g->nopts; i++)
+    if (g->opt[i].envvar != NULL &&
+	(optarg = getenv(g->opt[i].envvar)) != NULL)
+      {
+	status = set_option(g, i, optarg, eslARG_SETBY_ENV, FALSE);
+	if (status != eslOK) return status;
+      }
+  return eslOK;
+}
+
+
+
+/* Function:  esl_opt_ProcessCmdline()
+ * Synopsis:  Parses options from the command line.
+ *
+ * Purpose:   Process a command line (<argc> and <argv>), parsing out
+ *            and setting application options in <g>. Option arguments
+ *            are type and range checked before they are set, if type
+ *            and range information was set when <g> was created.
+ *            When an option is set, if it has any other options
+ *            "toggle-tied" to it, those options are also turned off.
+ *            
+ *            Any given option can only change state (on/off) once
+ *            per command line; trying to set the same option more than
+ *            once generates an error.
+ *            
+ *            On successful return, <g> contains settings of all
+ *            command line options and their option arguments, for
+ *            subsequent retrieval by <esl_opt_Get*()>
+ *            functions.  <g> also contains an <optind> state variable
+ *            pointing to the next <argv[]> element that is not an
+ *            option. <esl_opt_GetArg()> needs this to know
+ *            where the options end and command line arguments begin
+ *            in <argv[0]>.
+ *            
+ *            The parser starts with <argv[1]> and reads <argv[]> elements
+ *            in order until it reaches an element that is not an option; 
+ *            at this point, all subsequent <argv[]> elements are 
+ *            interpreted as arguments to the application.
+ *            
+ *            Any <argv[]> element encountered in the command line that
+ *            starts with <- > is an option, except <- > or <-- > by
+ *            themselves. <- > by itself is interpreted as a command
+ *            line argument (usually meaning ``read from stdin instead
+ *            of a filename''). <-- > by itself is interpreted as
+ *            ``end of options''; all subsequent <argv[]> elements are
+ *            interpreted as command-line arguments even if they
+ *            begin with <- >. 
+ *
+ * Returns:   <eslOK> on success. <g> is loaded with
+ *            all option settings specified on the cmdline.
+ *            Returns <eslEINVAL> on any cmdline parsing problem,
+ *            including option argument type/range check failures,
+ *            and sets <g->errbuf> to a useful error message for
+ *            the user.
+ *            
+ * Throws:    <eslEMEM> on allocation problem.           
+ */
+int
+esl_opt_ProcessCmdline(ESL_GETOPTS *g, int argc, char **argv)
+{
+  int   opti;
+  char *optarg;
+  int   status, setstatus;
+
+  g->argc      = argc;
+  g->argv      = argv;
+  g->optind    = 1;		/* start at argv[1]             */
+  g->optstring = NULL;		/* not in a -abc optstring yet  */
+
+  /* Walk through each option in the command line using esl_getopts(),
+   * which advances g->optind as the index of the next argv element we need
+   * to look at.
+   */
+  while ((status = esl_getopts(g, &opti, &optarg)) == eslOK)
+    {
+      setstatus = set_option(g, opti, optarg, eslARG_SETBY_CMDLINE, FALSE);
+      if (setstatus != eslOK) return setstatus;
+    }
+  if (status == eslEOD) return eslOK;
+  else                  return status;
+}
+
+
+/* Function:  esl_opt_ProcessSpoof()
+ * Synopsis:  Parses a string as if it were a command line.
+ *
+ * Purpose:   Process the string <cmdline> as if it were a 
+ *            complete command line. 
+ *            
+ *            Essentially the same as <esl_opt_ProcessCmdline()>
+ *            except that whitespace-delimited tokens first need to be
+ *            identified in the <cmdline> first, then passed as
+ *            <argc>,<argv> to <esl_opt_ProcessCmdline()>.
+ *
+ * Returns:   <eslOK> on success, and <g> is loaded with the
+ *            application configuration.
+ *
+ *            Returns <eslEINVAL> on any parsing problem, and sets
+ *            <g->errbuf> to an informative error message.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *
+ * Xref:      J4/24.
+ */
+int
+esl_opt_ProcessSpoof(ESL_GETOPTS *g, const char *cmdline)
+{
+  int    argc = 0;
+  char  *s    = NULL;
+  void  *p;
+  char  *tok;
+  int    status;
+
+  if (g->spoof != NULL || g->spoof_argv != NULL)
+    ESL_XFAIL(eslEINVAL, g->errbuf, "cannot process more than one spoofed command line");
+
+  if ((status = esl_strdup(cmdline, -1, &(g->spoof))) != eslOK) goto ERROR;
+  s = g->spoof;
+
+  while (esl_strtok(&s, " \t\n", &tok) == eslOK)
+    {
+      argc++;
+      ESL_RALLOC(g->spoof_argv, p, sizeof(char *) * argc);
+      g->spoof_argv[argc-1] = tok;
+    }
+  
+  status = esl_opt_ProcessCmdline(g, argc, g->spoof_argv);
+  return status;
+  
+ ERROR:
+  if (g->spoof      != NULL) { free(g->spoof);      g->spoof      = NULL; }
+  if (g->spoof_argv != NULL) { free(g->spoof_argv); g->spoof_argv = NULL; }
+  return status;
+}
+
+/* Function:  esl_opt_VerifyConfig()
+ * Synopsis:  Validates configuration after options are set.
+ *
+ * Purpose:   Given a <g> that we think is fully configured now --
+ *            from config file(s), environment, and command line --
+ *            verify that the configuration is self-consistent:
+ *            for every option that is set, make sure that any
+ *            required options are also set, and that no
+ *            incompatible options are set. ``Set'' means
+ *            the configured value is non-default and non-NULL (including booleans),
+ *            and ``not set'' means the value is default or NULL. (That is,
+ *            we don't go solely by <setby>, which refers to who
+ *            determined the state of an option, even if
+ *            it is turned off.)
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslESYNTAX> if a required option is not set, or
+ *            if an incompatible option is set; in this case, sets 
+ *            <g->errbuf> to contain a useful error message for
+ *            the user.
+ *            
+ * Throws:    <eslEINVAL> if something's wrong with the <ESL_OPTIONS>
+ *            structure itself -- a coding error in the application.           
+ */
+int
+esl_opt_VerifyConfig(ESL_GETOPTS *g)
+{
+  int   i,reqi,incompati;
+  char *s;
+  int   status;
+
+  /* For all options that are set (not in default configuration,
+   * and turned on with non-NULL vals), 
+   * verify that all their required_opts are set.
+   */
+  for (i = 0; i < g->nopts; i++)
+    {
+      if (g->setby[i] != eslARG_SETBY_DEFAULT && g->val[i] != NULL)
+	{
+	  s = g->opt[i].required_opts;
+	  while ((status = process_optlist(g, &s, &reqi)) != eslEOD) 
+	    {
+	      if (status != eslOK) ESL_EXCEPTION(eslEINVAL, "something's wrong with format of optlist: %s\n", s);
+	      if (g->val[reqi] == NULL)
+		{
+		  if (g->setby[i] >= eslARG_SETBY_CFGFILE)
+		    ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s (set by cfg file %d) requires (or has no effect without) option(s) %.24s", 
+			     g->opt[i].name, g->setby[i]-2, g->opt[i].required_opts);
+		  else if (g->setby[i] == eslARG_SETBY_ENV)
+		    ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s (set by env var %s) requires (or has no effect without) option(s) %.24s", 
+			     g->opt[i].name, g->opt[i].envvar, g->opt[i].required_opts);
+		  else
+		    ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s requires (or has no effect without) option(s) %.24s", 
+			     g->opt[i].name, g->opt[i].required_opts);
+		}
+	    }
+	}
+    }
+
+  /* For all options that are set (turned on with non-NULL vals),
+   * verify that no incompatible options are set to non-default
+   * values (notice the setby[incompati] check)
+   */
+  for (i = 0; i < g->nopts; i++)
+    {
+      if (g->setby[i] != eslARG_SETBY_DEFAULT && g->val[i] != NULL)
+	{
+	  s = g->opt[i].incompat_opts;
+	  while ((status = process_optlist(g, &s, &incompati)) != eslEOD)
+	    {
+	      if (status != eslOK) ESL_EXCEPTION(eslEINVAL, "something's wrong with format of optlist: %s\n", s);
+	      if (incompati != i && (g->setby[incompati] != eslARG_SETBY_DEFAULT && g->val[incompati] != NULL))
+		{
+		  if (g->setby[i] >= eslARG_SETBY_CFGFILE)
+		    ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s (set by cfg file %d) is incompatible with option(s) %.24s", 
+			     g->opt[i].name, g->setby[i]-2, g->opt[i].incompat_opts); 
+		  
+		  else if (g->setby[i] == eslARG_SETBY_ENV)
+		    ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s (set by env var %s) is incompatible with option(s) %.24s", 
+			     g->opt[i].name, g->opt[i].envvar, g->opt[i].incompat_opts); 
+		  else
+		    ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s is incompatible with option(s) %.24s", 
+			     g->opt[i].name, g->opt[i].incompat_opts); 
+		}
+	    }
+	}
+    }
+  return eslOK;
+}
+
+/* Function:  esl_opt_ArgNumber()
+ * Synopsis:  Returns number of command line arguments.
+ *
+ * Purpose:   Returns the number of command line arguments.
+ *            
+ *            Caller must have already called
+ *            <esl_opt_ProcessCmdline()>, in order for all the options
+ *            to be parsed first.  Everything left on the command line
+ *            is taken to be an argument.
+ */
+int
+esl_opt_ArgNumber(const ESL_GETOPTS *g)
+{
+  return ((g)->argc - (g)->optind);
+}
+
+
+/* Function:  esl_opt_SpoofCmdline()
+ * Synopsis:  Create faux command line from current option configuration.
+ *
+ * Purpose:   Given the current configuration state of the application
+ *            <g>, create a command line that would recreate the same
+ *            state by itself (without any environment or config file
+ *            settings), and return it in <*ret_cmdline>.
+ *            
+ * Returns:   <eslOK> on success. The <*ret_cmdline> is allocated here,
+ *            and caller is responsible for freeing it.
+ *
+ * Throws:    <eslEMEM> on allocation error, and <*ret_cmdline> is <NULL>.
+ *
+ * Xref:      J4/24
+ */
+int
+esl_opt_SpoofCmdline(const ESL_GETOPTS *g, char **ret_cmdline)
+{
+  char *cmdline = NULL;
+  char *p       = NULL;
+  int   ntot    = 0;
+  int   n;
+  int   i, j;
+  int   status;
+
+  /* Application name/path */
+  ntot = strlen(g->argv[0]) + 1;
+  ESL_ALLOC(cmdline, sizeof(char) * (ntot+1));
+  sprintf(cmdline, "%s ", g->argv[0]);
+  
+  /* Options */
+  for (i = 0; i < g->nopts; i++)
+    if (g->setby[i] != eslARG_SETBY_DEFAULT) 
+      {
+	if (g->opt[i].type == eslARG_NONE) n = strlen(g->opt[i].name) + 1;
+	else                               n = (strlen(g->opt[i].name) + strlen(g->val[i])) + 2;
+
+	ESL_RALLOC(cmdline, p, sizeof(char) * (ntot + n + 1));
+
+	if (g->opt[i].type == eslARG_NONE) sprintf(cmdline + ntot, "%s ",    g->opt[i].name);
+	else                               sprintf(cmdline + ntot, "%s %s ", g->opt[i].name, g->val[i]);
+
+	ntot += n;
+      }
+
+  /* Arguments */
+  for (j = g->optind; j < g->argc; j++)
+    {
+      n = strlen(g->argv[j]) + 1;
+      ESL_RALLOC(cmdline, p, sizeof(char) * (ntot + n + 1));
+      sprintf(cmdline + ntot, "%s ", g->argv[j]);
+      ntot += n;
+    }
+
+  /* Terminate */
+  cmdline[ntot] = '\0';
+  *ret_cmdline = cmdline;
+  return eslOK;
+
+ ERROR:
+  if (cmdline != NULL) free(cmdline);
+  *ret_cmdline = NULL;
+  return status;
+}
+
+/*****************************************************************
+ *# 3. Retrieving option settings and command line args
+ *****************************************************************/ 
+
+/* Function:  esl_opt_IsDefault()
+ * Synopsis:  Returns <TRUE> if option remained at default setting.
+ *
+ * Purpose:   Returns <TRUE> if option <optname> is in its
+ *            default state; returns <FALSE> if <optname> was 
+ *            changed on the command line, in the environment, or in 
+ *            a configuration file.
+ */
+int
+esl_opt_IsDefault(const ESL_GETOPTS *g, char *optname)
+{
+  int opti;
+
+  if (get_optidx_exactly(g, optname, &opti) != eslOK)  esl_fatal("no such option %s\n", optname);
+  if (g->setby[opti] == eslARG_SETBY_DEFAULT)          return TRUE;
+
+  if (g->val[opti] == NULL && g->opt[opti].defval == NULL) return TRUE;
+  if (esl_strcmp(g->opt[opti].defval, g->val[opti]) == 0)  return TRUE; /* option may have been set but restored to original default value */
+  return FALSE;
+}    
+
+/* Function:  esl_opt_IsOn()
+ * Synopsis:  Returns <TRUE> if option is set to a non-<NULL> value.
+ *
+ * Purpose:   Returns <TRUE> if option is on (set to a non-<NULL>
+ *            value). 
+ *            
+ *            This is most useful when using integer-, real-, char-,
+ *            or string-valued options also as boolean switches, where
+ *            they can either be OFF, or they can be turned ON by
+ *            having a value. Caller can test <esl_opt_IsOn()> to see
+ *            if the option's active at all, then use
+ *            <esl_opt_GetString()> or whatever to extract the option
+ *            value.
+ *            
+ *            For a boolean option, the result is identical to
+ *            <esl_opt_GetBoolean()>.
+ *
+ * Xref:      J4/83.
+ */
+int 
+esl_opt_IsOn(const ESL_GETOPTS *g, char *optname)
+{
+   int opti;
+
+   if (get_optidx_exactly(g, optname, &opti) != eslOK)  esl_fatal("no such option %s\n", optname);
+   if (g->val[opti] == NULL) return FALSE;
+   else                      return TRUE;
+}
+
+
+/* Function:  esl_opt_IsUsed()
+ * Synopsis:  Returns <TRUE> if option is on, and this is not the default.
+ *
+ * Purpose:   Returns <TRUE> if option <optname> is in use: it has been
+ *            set to a non-default value, and that value correspond to
+ *            the option being "on" (a non-<NULL> value).
+ *            
+ *            This is used in printing application headers, where
+ *            we want to report all the options that are in effect that
+ *            weren't already on by default.
+ *            
+ * Xref:      J4/83
+ */
+int
+esl_opt_IsUsed(const ESL_GETOPTS *g, char *optname)
+{
+  int opti;
+
+  if (get_optidx_exactly(g, optname, &opti) != eslOK)  esl_fatal("no such option %s\n", optname);
+  if (esl_opt_IsDefault(g, optname)) return FALSE;
+  if (g->val[opti] == NULL)          return FALSE;
+  return TRUE;
+}
+
+
+/* Function:  esl_opt_GetSetter()
+ * Synopsis:  Returns code for who set this option.
+ *
+ * Purpose:   For a processed options object <g>, return the code
+ *            for who set option <optname>. This code is <eslARG_SETBY_DEFAULT>,
+ *            <eslARG_SETBY_CMDLINE>, <eslARG_SETBY_ENV>, or it
+ *            is $\geq$ <eslARG_SETBY_CFGFILE>. If the option 
+ *            was configured by a config file, the file number (the order
+ *            of <esl_opt_ProcessConfigFile()> calls) is encoded in codes
+ *            $\geq <eslARG_SETBY_CFGFILE>$ as
+ *            file number $=$ <code> - <eslARG_SETBY_CFGFILE> + 1.
+ */
+int
+esl_opt_GetSetter(const ESL_GETOPTS *g, char *optname)
+{
+  int opti;
+
+  if (get_optidx_exactly(g, optname, &opti) != eslOK)  esl_fatal("no such option %s\n", optname);
+  return g->setby[opti];
+}
+
+
+/* Function:  esl_opt_GetBoolean()
+ * Synopsis:  Retrieve <TRUE>/<FALSE> for a boolean option.
+ *
+ * Purpose:   Retrieves the configured TRUE/FALSE value for option <optname>
+ *            from <g>.
+ */
+int
+esl_opt_GetBoolean(const ESL_GETOPTS *g, char *optname)
+{
+  int opti;
+
+  if (get_optidx_exactly(g, optname, &opti) == eslENOTFOUND)
+    esl_fatal("no such option %s\n", optname);
+  if (g->opt[opti].type != eslARG_NONE)
+    esl_fatal("option %s is not a boolean; code called _GetBoolean", optname);
+
+  if (g->val[opti] == NULL) return FALSE;
+  else                      return TRUE;
+}
+
+/* Function:  esl_opt_GetInteger()
+ * Synopsis:  Retrieve value of an integer option.
+ *
+ * Purpose:   Retrieves the configured value for option <optname>
+ *            from <g>.
+ */
+int
+esl_opt_GetInteger(const ESL_GETOPTS *g, char *optname)
+{
+  int opti;
+
+  if (get_optidx_exactly(g, optname, &opti) == eslENOTFOUND)
+    esl_fatal("no such option %s\n", optname);
+  if (g->opt[opti].type != eslARG_INT)
+    esl_fatal("option %s does not take an integer arg; code called _GetInteger", optname);
+  return atoi(g->val[opti]);
+}
+		
+/* Function:  esl_opt_GetReal()
+ * Synopsis:  Retrieve value of a real-valued option.
+ *
+ * Purpose:   Retrieves the configured value for option <optname>
+ *            from <g>.
+ */
+double
+esl_opt_GetReal(const ESL_GETOPTS *g, char *optname)
+{
+  int opti;
+
+  if (get_optidx_exactly(g, optname, &opti) == eslENOTFOUND)
+    esl_fatal("no such option %s\n", optname);
+  if (g->opt[opti].type != eslARG_REAL)
+    esl_fatal("option %s does not take a real-valued arg; code called _GetReal", optname);
+
+  return (atof(g->val[opti]));
+}
+
+/* Function:  esl_opt_GetChar()
+ * Synopsis:  Retrieve value of a character option.
+ *
+ * Purpose:   Retrieves the configured value for option <optname>
+ *            from <g>.
+ */
+char
+esl_opt_GetChar(const ESL_GETOPTS *g, char *optname)
+{
+  int opti;
+
+  if (get_optidx_exactly(g, optname, &opti) == eslENOTFOUND)
+    esl_fatal("no such option %s\n", optname);
+  if (g->opt[opti].type != eslARG_CHAR)
+    esl_fatal("option %s does not take a char arg; code called _GetChar", optname);
+
+  return (*g->val[opti]);
+}
+
+/* Function:  esl_opt_GetString()
+ * Synopsis:  Retrieve value of a string option.
+ *
+ * Purpose:   Retrieves the configured value for option <optname>
+ *            from <g>.
+ *
+ *            This retrieves options of type <eslARG_STRING>,
+ *            obviously, but also options of type <eslARG_INFILE>
+ *            and <eslARG_OUTFILE>.
+ */
+char *
+esl_opt_GetString(const ESL_GETOPTS *g, char *optname)
+{
+  int opti;
+
+  if (get_optidx_exactly(g, optname, &opti) == eslENOTFOUND)
+    esl_fatal("no such option %s\n", optname);
+  if (g->opt[opti].type != eslARG_STRING &&
+      g->opt[opti].type != eslARG_INFILE &&
+      g->opt[opti].type != eslARG_OUTFILE)
+    esl_fatal("option %s does not take a string arg; code called _GetString", optname);
+
+  return g->val[opti];
+}
+
+
+/* Function:  esl_opt_GetArg()
+ * Synopsis:  Retrieve numbered command line argument.
+ *
+ * Purpose:   Returns a pointer to command line argument number
+ *            <which>, where <which> ranges from <1..n> for <n>
+ *            total arguments.
+ *
+ *            If the caller has already verified that <n> arguments
+ *            exist by testing <esl_opt_ArgNumber(g) == n>,
+ *            <esl_opt_GetArg()> is guaranteed to return non-<NULL>
+ *            arguments for <which = 1..n>.
+ *            
+ *            Caller is responsible for verifying that the argument
+ *            makes sense for what it's supposed to be.
+ *
+ * Returns:   A pointer to command line argument <which> on success, or 
+ *            <NULL> if there is no such argument.
+ */
+char *
+esl_opt_GetArg(const ESL_GETOPTS *g, int which)
+{
+  if (which <= 0)                    return NULL;
+  if (g->optind+which-1 >= g->argc)  return NULL;
+  return g->argv[g->optind+which-1];
+}
+
+
+/*****************************************************************
+ * 4. Formatting option help
+ *****************************************************************/ 
+
+/* Function:  esl_opt_DisplayHelp()
+ * Synopsis:  Formats one-line help for each option.
+ *
+ * Purpose:   For each option in <go>, print one line of brief
+ *            documentation for it, consisting of the option name
+ *            (and argument, if any) and the help string. If space
+ *            allows, default values for the options (if any) are
+ *            shown in brackets. If space still allows, range restrictions 
+ *            for the options (if any) are shown in parentheses.
+ *
+ *            If <docgroup> is non-zero, help lines are only printed
+ *            for options with the matching <go->opt[i].docgrouptag>.
+ *            This allows the caller to group option documentation
+ *            into multiple sections with different headers. To
+ *            print all options in one call, pass 0 for <docgroup>.
+ *            
+ *            <indent> specifies how many spaces to prefix each line with.
+ *            
+ *            <textwidth> specifies the maximum text width for the
+ *            line.  This would typically be 80 characters. Lines are
+ *            not allowed to exceed this length. If a line does exceed
+ *            this length, range restriction display is silently
+ *            dropped (for all options). If any line still exceeds
+ *            <textwidth>, the default value display is silently dropped,
+ *            for all options. If any line still exceeds <textwidth>, even 
+ *            though it now consists almost solely of the option name and 
+ *            its help string, an <eslEINVAL> error is thrown. The
+ *            caller should either shorten the help string(s) or 
+ *            increase the <textwidth>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if one or more help lines are too long for
+ *                        the specified <textwidth>.
+ *            <eslEWRITE> if a write fails.
+ */
+int
+esl_opt_DisplayHelp(FILE *ofp, ESL_GETOPTS *go, int docgroup, int indent,
+		    int textwidth)
+{
+  int optwidth     = 0;		/* maximum width for "-foo <n>" options */
+  int helpwidth[3] = {0,0,0};	/* 0=everything; 1=with defaults, no range; 2=help string only */
+  int show_defaults;
+  int show_ranges;
+  int i, n;
+
+  /* Figure out the field widths we need in the output.
+   */
+  for (i = 0; i < go->nopts; i++)
+    if (! docgroup || docgroup == go->opt[i].docgrouptag)
+      {
+	n = strlen(go->opt[i].name);                /* "--foo"  */
+	if (go->opt[i].type != eslARG_NONE) n += 4; /* + " <n>" */ 
+	if (n > optwidth) optwidth = n;
+
+	n = 2;                                 /* init with " : " */
+	if (go->opt[i].help != NULL) 
+	  n = strlen(go->opt[i].help) + 1;     /* include " " in width */
+	if (n > helpwidth[2]) helpwidth[2] = n;
+
+	if (go->opt[i].defval != NULL)
+	  n += strlen(go->opt[i].defval) + 4;  /* include "  []" in width */
+	if (n > helpwidth[1]) helpwidth[1] = n;
+
+	if (go->opt[i].range != NULL)
+	  n += strlen(go->opt[i].range) + 4;   /* include "  ()" in width */
+	if (n > helpwidth[0]) helpwidth[0] = n;
+      }
+
+  /* Figure out what we have room for.
+   */
+  if (indent + optwidth + helpwidth[0] <= textwidth)
+    {
+      show_defaults = TRUE;
+      show_ranges   = TRUE;
+    }
+  else if (indent + optwidth + helpwidth[1] <= textwidth)
+    {
+      show_defaults = TRUE;
+      show_ranges   = FALSE;
+    }
+  else if (indent + optwidth + helpwidth[2] <= textwidth)
+    {
+      show_defaults = FALSE;
+      show_ranges   = FALSE;
+    }
+  else ESL_EXCEPTION(eslEINVAL, "Help line too long");
+
+  /* Format and print the options in this docgroup. */
+  for (i = 0; i < go->nopts; i++)
+    if (! docgroup || docgroup == go->opt[i].docgrouptag)
+      {
+	if (fprintf(ofp, "%*s", indent, "")      < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed");
+	n = 0;
+	if (fprintf(ofp, "%s",  go->opt[i].name) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed");
+	n += strlen(go->opt[i].name);
+
+	switch (go->opt[i].type) {
+	case eslARG_NONE:    break;
+	case eslARG_INT:     if (fprintf(ofp, " <n>") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break;
+	case eslARG_REAL:    if (fprintf(ofp, " <x>") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break;
+	case eslARG_CHAR:    if (fprintf(ofp, " <c>") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break;
+	case eslARG_STRING:  if (fprintf(ofp, " <s>") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break;
+	case eslARG_INFILE:  if (fprintf(ofp, " <f>") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break;
+	case eslARG_OUTFILE: if (fprintf(ofp, " <f>") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break;
+	}
+
+	if (fprintf(ofp, "%*s", optwidth-n, "") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed");
+	if (fprintf(ofp, " :")                  < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed");
+
+	if (go->opt[i].help != NULL)
+	  { if (fprintf(ofp, " %s", go->opt[i].help) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); }
+	
+	if (show_defaults && go->opt[i].defval != NULL) 
+	  if (go->opt[i].type != eslARG_CHAR || *(go->opt[i].defval) != '\0')
+	    { if (fprintf(ofp, "  [%s]", go->opt[i].defval) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); }
+
+	if (show_ranges && go->opt[i].range != NULL)
+	  { if (fprintf(ofp, "  (%s)", go->opt[i].range) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); }
+
+	if (fprintf(ofp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed");
+      }
+  return eslOK;
+}
+/*------------------ end of the public API -----------------------*/
+
+
+
+
+
+/*****************************************************************
+ * 5. Miscellaneous private functions 
+ *****************************************************************/ 
+
+/* set_option()
+ * 
+ * Turn option <opti> ON (if it's a boolean) or set its option
+ * argument to <optarg>. Record that it was set by <setby> (e.g. 
+ * <eslARG_SETBY_CMDLINE>). 
+ * 
+ * <do_alloc> is a TRUE/FALSE flag. If <arg> is a pointer to a string
+ * that isn't going to go away (e.g. into argv[], or into the
+ * environment) we can get away with just pointing our option's val
+ * at <arg>. But if <arg> is pointing to something volatile (e.g. 
+ * the line buffer as we're reading a file) then we need to
+ * strdup the arg -- and remember that we did that, so we free()
+ * it when we destroy the getopts object.
+ * 
+ * All user errors (problems with optarg) are normal (returned) errors of 
+ * type <eslESYNTAX>, which leave an error message in <g->errbuf>. 
+ * 
+ * May also throw <eslEMEM> on allocation failure, or <eslEINVAL>
+ * if something's wrong internally, usually indicating a coding error
+ * in the application's <ESL_OPTIONS> structure.
+ */
+int
+set_option(ESL_GETOPTS *g, int opti, char *optarg, int setby, int do_alloc)
+{
+  int   arglen;
+  char *where = NULL;
+  char *s;
+  int   togi;
+  int   status;
+  void *tmp;
+
+  if       (setby == eslARG_SETBY_DEFAULT) where = "as default";
+  else if  (setby == eslARG_SETBY_CMDLINE) where = "on cmdline";
+  else if  (setby == eslARG_SETBY_ENV)     where = "in env";
+  else if  (setby >= eslARG_SETBY_CFGFILE) where = "in cfgfile";
+
+  /* Have we already set this option? */
+  if (g->setby[opti] == setby)
+    ESL_FAIL(eslESYNTAX, g->errbuf,
+	     "Option %.24s has already been set %s.", 
+	     g->opt[opti].name, where);
+
+  /* Type and range check the option argument.
+   */
+  if (verify_type_and_range(g, opti, optarg, setby) != eslOK) return eslESYNTAX;	
+  
+  /* Set the option, being careful about when val 
+   * is alloc'ed vs. not.
+   */
+  g->setby[opti] = setby;
+  if (g->opt[opti].type == eslARG_NONE)	/* booleans: any non-NULL is TRUE... */
+    {					                           /* watch out for booleans getting toggled off/on */
+      if (g->opt[opti].defval) g->val[opti] = g->opt[opti].defval; /* use default string if provided: IsDefault() needs this */
+      else                     g->val[opti] = (char *) TRUE;       /* else 0x1 will do fine. */
+    }
+  else
+    {
+      /* If do_alloc is FALSE or the optarg is NULL, then:
+       *    - free any previous alloc; 
+       *    - set the pointer.
+       */
+      if (!do_alloc || optarg == NULL) 
+	{
+	  if (g->valloc[opti] > 0) { free(g->val[opti]); g->valloc[opti] = 0; }
+	  g->val[opti] = optarg;
+	}
+      /* else do_alloc is TRUE, so:
+       *    - make sure we have enough room, either reallocating or allocating
+       *    - copy the arg.
+       */
+      else
+	{
+	  arglen = strlen(optarg);
+	  if (g->valloc[opti] < arglen+1) 
+	    {
+	      if (g->valloc[opti] == 0)	ESL_ALLOC (g->val[opti],      sizeof(char) * (arglen+1));
+	      else    		        ESL_RALLOC(g->val[opti], tmp, sizeof(char) * (arglen+1));
+	      g->valloc[opti] = arglen+1;
+	    }
+	  strcpy(g->val[opti], optarg);
+	}
+    }
+
+  /* Unset all options toggle-tied to this one.
+   */
+  s = g->opt[opti].toggle_opts;
+  while ((status = process_optlist(g, &s, &togi)) != eslEOD)
+    {
+      if (status != eslOK) ESL_EXCEPTION(eslEINVAL, "something's wrong with format of optlist: %s\n", s);
+      if (togi == opti)         continue; /* ignore ourself, so we can have one toggle list per group */
+      if (g->val[togi] == NULL) continue; /* it's already off; don't touch it */
+
+      if (g->setby[togi] == setby)
+	ESL_FAIL(eslESYNTAX, g->errbuf,
+		 "Options %.24s and %.24s conflict, toggling each other.", 
+		 g->opt[togi].name, g->opt[opti].name);
+	  
+      g->setby[togi] = setby;   /* indirectly, but still */
+      if (g->valloc[togi] > 0) 	/* careful about val's that were alloc'ed */
+	{ free(g->val[togi]); g->valloc[togi] = 0; }
+      g->val[togi] = NULL;    /* ok for false booleans too */
+    }
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* get_optidx_exactly():
+ * 
+ * Find option named <optname> in <g>; set <ret_opti> to be
+ * the index of the option, and return eslOK. <optname>
+ * must exactly match one of the options in <g>.
+ * 
+ * If the option is not found, return <eslENOTFOUND>; in this
+ * case <*ret_opti> is -1 (and caller should not use it!)
+ */
+static int
+get_optidx_exactly(const ESL_GETOPTS *g, char *optname, int *ret_opti)
+{
+  int i;
+
+  for (i = 0; i < g->nopts; i++)
+    if (strcmp(optname, g->opt[i].name) == 0) { *ret_opti = i; return eslOK; }
+  *ret_opti = -1;
+  return eslENOTFOUND;
+}
+
+/* get_optidx_abbrev():
+ * 
+ * Find option named <optname> in <g>; set <ret_opti> to be the index
+ * of the option, and return eslOK. Allow <optname> to be an
+ * abbreviation of one of the option names in <g>, so long as it is
+ * unambiguous. If <n> is >0, the <optname> has an attached argument
+ * (--foo=arg) and <n> is the # of characters before the = character
+ * that we should match to find the option (5, in this example).
+ * 
+ * If the option is not found, return <eslENOTFOUND>.
+ * If <optname> ambiguously matches two or more options in <g>,
+ * return <eslEAMBIGUOUS>.
+ */
+static int
+get_optidx_abbrev(ESL_GETOPTS *g, char *optname, int n, int *ret_opti)
+{
+  int nabbrev = 0;
+  int nexact  = 0;
+  int i;
+
+  if (n == 0) 			/* unless we're told otherwise: */
+    n = strlen(optname);	/* all of optname abbrev must match against the real name */
+
+  for (i = 0; i < g->nopts; i++)
+    if (strncmp(g->opt[i].name, optname, n) == 0)
+      {
+	nabbrev++;
+	*ret_opti = i;
+	if (n == strlen(g->opt[i].name)) { nexact++; break; } /* an exact match; can stop now (xref bug #e4) */
+      }
+  if (nexact != 1 && nabbrev > 1)  return eslEAMBIGUOUS;
+  if (nabbrev == 0)                return eslENOTFOUND;
+  return eslOK;
+}
+/*----------- end of private functions for retrieving option indices -------------*/
+
+
+
+/*****************************************************************
+ * Private functions for processing options out of a command line
+ *****************************************************************/ 
+
+/* esl_getopts():
+ * 
+ * Get the next option in argv[], and its argument (if any),
+ * and pass this information back via <ret_opti> (index of
+ * next option) and <ret_optarg).
+ * 
+ * Return <eslOK> on success, <eslEOD> if we're out of
+ * options. 
+ * 
+ * Returns <eslESYNTAX> and sets <g->errbuf> to a useful error
+ * message if something's wrong with one of the user's options.
+ *
+ * Throws <eslEINVAL> if something's wrong internally with the 
+ * <ESL_OPTIONS> structure. 
+ */
+static int
+esl_getopts(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg)
+{
+  *ret_optarg  = NULL; 
+
+  /* Check to see if we've run out of options.
+   * A '-' by itself is an argument (e.g. "read from stdin"), not an option.
+   */
+  if (g->optstring == NULL &&
+      (g->optind >= g->argc || g->argv[g->optind][0] != '-' || strcmp(g->argv[g->optind], "-") == 0))
+    return eslEOD; 		/* normal end-of-data (end of options) return  */
+
+  /* Check to see if we're being told that this is the end
+   * of the options with the special "--" flag.
+   */
+  if (g->optstring == NULL &&
+      strcmp(g->argv[g->optind], "--") == 0)
+    { 
+      g->optind++;
+      return eslEOD; 		/* also a normal end-of-data return */
+    }
+
+  /* We have an option: an argv element that starts with -, but is
+   * not "-" or "--".
+   * 
+   * We know the strncmp() test is ok for 2 chars, because if the option was
+   * 1 char, we would've already caught it above (either it's a bare "-"
+   * or it's a single non-option char, and in either case it's not an option
+   * and we returned eslEOD.
+   * 
+   * Watch out for the case where we're in the middle of a concatenated optstring
+   * of single-letter options, a la -abc
+   */
+  if (g->optstring == NULL && strncmp(g->argv[g->optind], "--", 2) == 0)
+    return process_longopt(g, ret_opti, ret_optarg);
+  else 
+    return process_stdopt(g, ret_opti, ret_optarg);
+}
+
+/* process_longopt():
+ *
+ * optind is sitting on a long option, w/ syntax of one of these forms:
+ *       --foo        
+ *       --foo arg
+ *       --foo=arg
+ * (GNU getopt long option syntax.)
+ * 
+ * Allow unambiguous abbreviations of long options when matching;
+ * e.g. --foo is ok for matching a long option --foobar.
+ * 
+ * Returns <eslOK> on success, returning the option number through
+ * <ret_opti>, and a ptr to its argument through <ret_optarg> (or NULL
+ * if this option takes no argument.) Internally, g->optind is
+ * advanced to next argv element (+1, +2, +1, respectively, for --foo,
+ * --foo arg, --foo=arg).
+ *
+ * Returns <eslESYNTAX> and sets a useful error mesg in <g->errbuf> if:
+ *   1. Option can't be found in opt[].
+ *   2. Option abbreviation is ambiguous, matching opt[] nonuniquely.
+ *   3. Option takes an argument, but no argument found.
+ *   4. Option does not take an argument, but one was provided by =arg syntax.
+ * All of these are user input errors.
+
+ */
+static int
+process_longopt(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg)
+{
+  int   opti;		/* option number found                               */
+  char *argptr;		/* ptr to arg in --foo=arg syntax                    */
+  int   n;		/* length of argv elem's option part (up to = or \0) */
+  int   status;
+
+  /* Deal with options of syntax "--foo=arg" w/o modifying argv.
+   */
+  if ((argptr = strchr(g->argv[g->optind], '=')) != NULL)
+    { n = argptr - g->argv[g->optind]; argptr++; } /* bump argptr off the = to the arg itself */
+  else
+    { n = strlen(g->argv[g->optind]); } /* and argptr == NULL from above. */
+
+  /* Figure out which option this is.
+   * The trick here is to allow abbreviations, and identify
+   * ambiguities while we're doing it. (GNU getopt allows abbrevs.)
+   */
+  status = get_optidx_abbrev(g, g->argv[g->optind], n, &opti);
+  if (status == eslEAMBIGUOUS)
+    ESL_FAIL(eslESYNTAX, g->errbuf, "Abbreviated option \"%.24s\" is ambiguous.", g->argv[g->optind]);
+  else if (status == eslENOTFOUND)
+    ESL_FAIL(eslESYNTAX, g->errbuf, "No such option \"%.24s\".", g->argv[g->optind]);
+  else if (status != eslOK)
+    ESL_EXCEPTION(eslEINCONCEIVABLE, "Something went wrong with option \"%.24s\".", g->argv[g->optind]);
+
+  *ret_opti    = opti;
+  g->optind++;	/* optind was on the option --foo; advance the counter to next argv element */
+
+  /* Find the argument, if there is supposed to be one.
+   */
+  if (g->opt[opti].type != eslARG_NONE) 
+    {
+      if (argptr != NULL)	/* if --foo=arg syntax, then we already found it */
+	*ret_optarg = argptr;
+      else if (g->optind >= g->argc)
+	ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s requires an argument.", g->opt[opti].name);
+      else {			/* "--foo 666" style, with a space */
+	*ret_optarg = g->argv[g->optind++];	/* assign optind as the arg, advance counter */
+
+	/* Watch out for options masquerading as missing arguments. */
+	if ((g->opt[opti].type == eslARG_STRING || g->opt[opti].type == eslARG_INFILE || g->opt[opti].type == eslARG_OUTFILE)
+	    && **ret_optarg == '-')
+	  ESL_FAIL(eslESYNTAX, g->errbuf,
+		   "Arg looks like option? Use %.24s=%.24s if you really mean it.",  
+		   g->opt[opti].name, *ret_optarg);
+      }
+    }
+  else  /* if there's not supposed to be an arg, but there is, then die */
+    {
+      if (argptr != NULL) 
+	ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s does not take an argument.", g->opt[opti].name);
+      *ret_optarg = NULL;
+    }
+  return eslOK;
+}
+
+/* process_stdopt():
+ * 
+ * Either we're in the middle of working on an optstring (and optind
+ * is sitting on the next argv element, which may be an argument of
+ * the last char in the optstring), or optind is sitting on a "-"
+ * option and we should start working on a new optstring. That is,
+ * we're dealing with standard one-char options, which may be
+ * concatenated into an optstring.
+ * 
+ * Only the last optchar in a optstring may take an argument. The argument
+ * is either the remainder of the argv element (if any) or if not, the
+ * next argv element.
+ * 
+ * Examples of syntax:
+ *       -a
+ *       -W arg
+ *       -Warg
+ *       -abc
+ *       -abcW arg
+ *       -abcWarg
+ *       
+ * Process next optchar; return <eslOK> on success, returning option
+ * number through <ret_opti> and a pointer to any argument through
+ * <ret_optarg>. Internally, optind is advanced to the next argv element;
+ * either 0, +1, or +2, depending on whether we're still processing an
+ * optstring from a prev optind, starting a new optstring, or reading
+ * a "-W arg" form, respectively.
+ * 
+ * Returns <eslESYNTAX> and sets <g->errbuf> to a helpful error mesg if:
+ *   1. The option doesn't exist.
+ *   2. The option takes an argument, but none was found.
+ *   3. The option takes an untypechecked argument (eslARG_STRING, 
+ *      eslARG_INFILE, or eslARG_OUTFILE), the argument is unattached 
+ *      (space-delimited), and it appears to be an option instead of 
+ *      an argument, because it starts with '-'. 
+ * All these are user input errors.
+ */
+static int
+process_stdopt(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg)
+{
+  int opti;
+
+  /* Do we need to start a new optstring in a new argv element?
+   * (as opposed to still being in an optstring from a prev parse)
+   */
+  if (g->optstring == NULL)     
+    g->optstring = g->argv[g->optind++]+1; /* init optstring on first option char; advance optind */
+
+  /* Figure out what option this optchar is
+   */
+  for (opti = 0; opti < g->nopts; opti++)
+    if (*(g->optstring) == g->opt[opti].name[1]) break;	/* this'll also fail appropriately for long opts. */
+  if (opti == g->nopts)
+    ESL_FAIL(eslESYNTAX, g->errbuf, "No such option \"-%c\".", *(g->optstring));
+  *ret_opti    = opti;
+
+  /* Find the argument, if there's supposed to be one */
+  if (g->opt[opti].type != eslARG_NONE) 
+    {
+      if (*(g->optstring+1) != '\0')   /* attached argument case, a la -Warg */
+	*ret_optarg = g->optstring+1;
+      else if (g->optind < g->argc) {  /* unattached argument; assign optind, advance counter  */
+	*ret_optarg = g->argv[g->optind++];
+
+	/* Watch out for options masquerading as missing arguments. */
+	if ((g->opt[opti].type == eslARG_STRING || g->opt[opti].type == eslARG_INFILE || g->opt[opti].type == eslARG_OUTFILE)
+	    && **ret_optarg == '-')
+	  ESL_FAIL(eslESYNTAX, g->errbuf,
+		   "Arg looks like option? Use %.24s%.24s if you really mean it.",
+		   g->opt[opti].name, *ret_optarg);
+      } else 
+	ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s requires an argument", g->opt[opti].name);
+
+      g->optstring = NULL;   /* An optchar that takes an arg must terminate an optstring. */
+    }
+  else  /* if there's not supposed to be an argument, then check if we're still in an optstring */
+    {
+      *ret_optarg = NULL;
+      if (*(g->optstring+1) != '\0')   /* yup, we're still in an optstring */
+	g->optstring++; 
+      else
+	g->optstring = NULL;           /* nope, that's it; move to next field in args */
+    }
+  return eslOK;
+}
+/*----------- end of private functions for processing command line options -------------*/
+
+
+
+
+/*****************************************************************
+ * Private functions for type and range checking.
+ *****************************************************************/
+
+/* verify_type_and_range():
+ *
+ * Implementation of type and range checking for options.
+ *
+ * Given a value <val> (as a string) for option <i> in the option
+ * object <g>, verify that <val> satisfies the appropriate type and
+ * range.  If successful, return <eslOK>. 
+ * 
+ * The <setby> flag is used to help format useful error messages,
+ * by saying who was responsible for a bad <val>.
+ *
+ * Returns: <eslOK> on success.
+ *          Returns <eslESYNTAX> if <val> fails type/range checking,
+ *          and <g->errbuf> is set to contain an error report for the user.
+ *
+ * Throws:  <eslEINVAL>:         a range string format was bogus.
+ *          <eslEINCONCEIVABLE>: "can't happen" internal errors.
+ */
+static int
+verify_type_and_range(ESL_GETOPTS *g, int i, char *val, int setby)
+{
+  char *where = NULL;
+
+  if       (setby == eslARG_SETBY_DEFAULT) where = "as default";
+  else if  (setby == eslARG_SETBY_CMDLINE) where = "on cmdline";
+  else if  (setby == eslARG_SETBY_ENV)     where = "in env";
+  else if  (setby >= eslARG_SETBY_CFGFILE) where = "in cfgfile";
+
+  /* A special case: Any option may be "unset" by default by having a
+   * NULL default value.  Thus, for instance, an eslARG_REAL can be
+   * off by default, or set to a value by a command line option.
+   */
+  if (setby == eslARG_SETBY_DEFAULT && val == NULL) 
+    return eslOK;
+
+  switch (g->opt[i].type) {
+  case eslARG_NONE:	
+    /* treat as unchecked, because val may be "on", 0x1, "true", etc.:
+     * any non-NULL ptr means on, and NULL means off.
+     */
+    break;
+
+  case eslARG_INT:
+    if (! esl_str_IsInteger(val))
+      ESL_FAIL(eslESYNTAX, g->errbuf, 
+	       "Option %.24s takes integer arg; got %.24s %s", 
+	       g->opt[i].name, val, where);
+
+    if (verify_integer_range(val, g->opt[i].range) != eslOK)
+      ESL_FAIL(eslESYNTAX, g->errbuf,
+	       "option %.24s takes integer arg in range %.24s; got %.24s %s", 
+	       g->opt[i].name, g->opt[i].range, val, where);
+    break;
+
+  case eslARG_REAL:
+    if (! esl_str_IsReal(val))
+      ESL_FAIL(eslESYNTAX, g->errbuf, 
+	       "Option %.24s takes real-valued arg; got %.24s %s",
+	       g->opt[i].name, val, where);
+
+    if (verify_real_range(val, g->opt[i].range) != eslOK)
+      ESL_FAIL(eslESYNTAX, g->errbuf,
+	       "Option %.24s takes real-valued arg in range %.24s; got %.24s %s", 
+	       g->opt[i].name, g->opt[i].range, val, where);
+    break;
+
+  case eslARG_CHAR:
+    if (strlen(val) > 1)
+      ESL_FAIL(eslESYNTAX, g->errbuf,
+	       "Option %.24s takes char arg; got %.24s %s",
+	       g->opt[i].name, val, where);
+
+    if (verify_char_range(val, g->opt[i].range) != eslOK)
+      ESL_FAIL(eslESYNTAX, g->errbuf, 
+	       "Option %.24s takes char arg in range %.24s; got %.24s %s", 
+	       g->opt[i].name, g->opt[i].range, val, where);
+    break;
+
+  case eslARG_STRING:  /* unchecked type. */
+  case eslARG_INFILE:  
+  case eslARG_OUTFILE: 
+    if (g->opt[i].range != NULL)
+      ESL_EXCEPTION(eslEINVAL, "option %s takes a string arg that can't be range checked",  g->opt[i].name);
+    break;			
+    
+  default: 
+    ESL_EXCEPTION(eslEINVAL, "no such argument type");
+  }
+
+  return eslOK;
+}
+
+
+/* verify_integer_range():
+ * 
+ * Returns <eslOK> if the string <arg>, when converted to an integer
+ * by atoi(), gives a value that lies within the given <range>, if
+ * <range> is non-NULL. (If <range> is NULL, there is no constraint on
+ * the range of this <arg>, so return TRUE.) Else, <arg> does not lie
+ * in the <range>; return <eslERANGE> (a user input error). If <range>
+ * itself is misformatted, return <eslEINVAL> (a coding error).
+ * 
+ * Range must be in one of three formats, matched
+ * by these regexps (though regexps aren't used by the
+ * parser):
+ *        n>=?(\d+)           lower bound 
+ *        n<=?(\d+)           upper bound
+ *        (\d+)<=?n<=?(\d+)   lower and upper bound
+ * Optional = signs indicate whether a bound is 
+ * inclusive or not. The "n" character indicates the
+ * given integer value.       
+ * 
+ * Returns:  <eslOK>:      <arg> is within allowed <range>.
+ *           <eslERANGE>:  <arg> is not within allowed <range>.
+ *           <eslEINVAL>:  something wrong with <range> string.
+ */
+static int
+verify_integer_range(char *arg, char *range)
+{
+  int   n;
+  int   upper, lower;		/* upper, lower bounds */
+  char *up, *lp;		
+  int   geq, leq;	        /* use >=, <= instead of >, < */
+  
+  if (range == NULL) return eslOK;
+  n = atoi(arg);
+
+  if (parse_rangestring(range, 'n', &lp, &geq, &up, &leq) != eslOK) return eslEINVAL;
+
+  if (lp != NULL) {
+    lower = atoi(lp);
+    if ((geq && ! (n >= lower)) || (!geq && !(n > lower))) return eslERANGE;
+  }
+
+  if (up != NULL) {
+    upper = atoi(up);
+    if ((leq && ! (n <= upper)) || (!leq && !(n < upper))) return eslERANGE;
+  }
+  return eslOK;
+}
+
+
+
+/* verify_real_range():
+ * 
+ * Verify that a string <arg>, when converted to a
+ * double-precision real by atof(), gives a value that lies
+ * within the range defined by <range>. If <range> is NULL,
+ * there is no range constraint, and any <arg> is valid.
+ *
+ * Returns:  <eslOK>:      <arg> is within allowed <range>.
+ *           <eslERANGE>:  <arg> is not within allowed <range>.
+ *           <eslEINVAL>: something wrong with <range> string.
+ */
+static int
+verify_real_range(char *arg, char *range)
+{
+  double x;
+  double upper, lower;		/* upper, lower bounds */
+  char  *up, *lp;		
+  int    geq, leq;	        /* use >=, <= instead of >, < */
+  
+  if (range == NULL) return eslOK;
+  x = atof(arg);
+  
+  if (parse_rangestring(range, 'x', &lp, &geq, &up, &leq) != eslOK) 
+    return eslEINVAL;
+
+  if (lp != NULL)
+    {
+      lower = atof(lp);
+      if ((geq && ! (x >= lower)) || (!geq && !(x > lower)))
+	return eslERANGE;
+    }
+
+  if (up != NULL) 
+    {
+      upper = atof(up);
+      if ((leq && ! (x <= upper)) || (!leq && !(x < upper)))
+	return eslERANGE;
+    }
+  return eslOK;
+}
+
+
+/* verify_char_range():
+ * 
+ * Verify that a string <arg>, when interpreted as a single
+ * char argument, is a character that lies within the defined
+ * <range>. If <range> is NULL, there is no range constraint,
+ * and any <arg> is valid.
+ *
+ * Currently, <range> expression is limited to ASCII chars that can be
+ * expressed as single chars. Could improve by allowing integer ASCII
+ * codes, or backslash escapes.
+ *
+ * Returns:  <eslOK>:      <arg> is within allowed <range>.
+ *           <eslERANGE>:  <arg> is not within allowed <range>.
+ *           <eslEINVAL>: something wrong with <range> string.
+ */
+static int
+verify_char_range(char *arg, char *range)
+{
+  char   c;
+  char  *upper, *lower;		
+  int    geq, leq;	        /* use >=, <= instead of >, < */
+  
+  if (range == NULL) return eslOK;
+  c = *arg;
+
+  if (parse_rangestring(range, 'c', &lower, &geq, &upper, &leq) != eslOK) 
+    return eslEINVAL;
+
+  if (lower != NULL)
+    {
+      if ((geq && ! (c >= *lower)) || (!geq && !(c > *lower)))
+	return eslERANGE;
+    }
+
+  if (upper != NULL) 
+    {
+      if ((leq && ! (c <= *upper)) || (!leq && !(c < *upper)))
+	return eslERANGE;
+    }
+  return eslOK;
+}
+
+
+
+/* parse_rangestring():
+ * 
+ * Given a range definition string in one of the following forms:
+ *        c>=?(\d+)           lower bound 
+ *        c<=?(\d+)           upper bound
+ *        (\d+)<=?c<=?(\d+)   lower and upper bound
+ * where <c> is a one-character marker expected for the 
+ * argument type ('n' for integers, 'f' for floating-point values,
+ * 'c' for characters).
+ * 
+ * Sets pointers to upper and lower bound strings, for parsing by
+ * atoi() or atof() as appropriate.
+ * Sets geq, leq flags to TRUE if bounds are supposed to be inclusive.
+ * 
+ * Returns <eslOK> on success, <eslEINVAL> if the range string
+ * is invalid. No errors are thrown here, so caller can format a
+ * useful error message if range string is bogus.
+ */
+static int
+parse_rangestring(char *range, char c, char **ret_lowerp, int *ret_geq, char **ret_upperp, int *ret_leq)
+{
+  char *ptr;
+
+  *ret_geq    = *ret_leq    = FALSE;	/* 'til proven otherwise */
+  *ret_lowerp = *ret_upperp = NULL;     /* 'til proven otherwise */
+
+  if ((ptr = strchr(range, c)) == NULL) return eslEINVAL;
+  if (ptr == range)	/* we're "n>=a" or "n<=b" form, where n came first */  
+    {
+      if (ptr[1] == '>') /* "n>=a" form; lower bound */
+	{
+	  if (ptr[2] == '=') { *ret_geq = TRUE; *ret_lowerp = ptr+3; } 
+	  else *ret_lowerp = ptr+2;
+	}
+      else if (ptr[1] == '<') /* "n<=a" form; upper bound */
+	{
+	  if (ptr[2] == '=') { *ret_leq = TRUE; *ret_upperp = ptr+3; }
+	  else *ret_upperp = ptr+2;
+	}
+      else return eslEINVAL;
+    }
+  else	/* we're in a<=n<=b form; upper bound after n, lower before */
+    {
+      if (*(ptr+1) != '<') return eslEINVAL;
+      if (*(ptr+2) == '=') { *ret_leq = TRUE; *ret_upperp = ptr+3; } else *ret_upperp = ptr+2;
+
+      ptr--;
+      if (*ptr == '=') { *ret_geq = TRUE; ptr--; }
+      if (*ptr != '<') return eslEINVAL;
+      *ret_lowerp = range;	/* start of string */
+    }
+  return eslOK;
+}
+
+/*-------------- end of private type/range-checking functions ----------------*/
+
+
+
+
+/*****************************************************************
+ * Private functions for checking optlists (toggles, required options, 
+ * and incompatible options
+ *****************************************************************/
+
+/* process_optlist():
+ *
+ * Given a pointer <s> to the next option name in 
+ * a comma-delimited list, figure out what option
+ * this is; set <ret_opti> to its index. If another
+ * option remains in the optlist, reset <s> to
+ * the start of it, for the next call to process_optlist().
+ * If no options remain after this one, reset <s> to NULL.
+ * 
+ * Returns: <eslOK> if an option has been successfully parsed
+ *          out of the list and <ret_opti> is valid;
+ *          <eslEOD> if no more option remains (<s> is NULL,
+ *          or points to a \0).
+ *          <eslEINVAL> if an option in the list isn't
+ *          recognized (a coding error).         
+ */
+static int 
+process_optlist(ESL_GETOPTS *g, char **ret_s, int *ret_opti)
+{
+  char *s;
+  int   i;
+  int   n;
+  
+  if ((s = *ret_s) == NULL) return eslEOD;
+  if (*s == '\0')           return eslEOD;
+
+  n = strcspn(s, ",");
+
+  /* a little weak here; we're only matching a n-long prefix, so we're
+   * not going to catch the case where the optlist contains a
+   * truncated, ambiguous optionname.  but optlists are not user
+   * input, so the answer to this problem is "don't do that".
+   */
+  for (i = 0; i < g->nopts; i++)
+    if (strncmp(g->opt[i].name, s, n) == 0) break;
+  if (i == g->nopts) return eslEINVAL;
+
+  *ret_opti = i;
+  if (s[n] == ',') *ret_s = s+n+1; 
+  else             *ret_s = NULL;
+
+  return eslOK;
+}
+
+/*------- end of private functions for processing optlists -----------*/
+
+
+
+/*****************************************************************
+ * 6. Test driver.
+ *****************************************************************/
+
+#ifdef eslGETOPTS_TESTDRIVE 
+/* gcc -g -Wall -o getopts_utest -I. -DeslGETOPTS_TESTDRIVE esl_getopts.c easel.c
+ */
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+
+/*::cexcerpt::getopts_bigarray::begin::*/
+#define BGROUP "-b,--no-b"
+static ESL_OPTIONS options[] = {
+  /* name    type        default env_var  range toggles req  incompat help                  docgroup */
+ { "-a",     eslARG_NONE, FALSE,"FOOTEST",NULL,  NULL,  NULL,  NULL,  "toggle a on",               1 },
+ { "-b",     eslARG_NONE, FALSE,  NULL,   NULL, BGROUP, NULL,  NULL,  "toggle b on",               1 },
+ { "--no-b", eslARG_NONE,"TRUE",  NULL,   NULL, BGROUP, NULL,  NULL,  "toggle b off",              1 },
+ { "-c",     eslARG_CHAR,   "x",  NULL,"a<=c<=z",NULL,  NULL,  NULL,  "character arg",             2 },
+ { "--d1",   eslARG_NONE,"TRUE",  NULL,   NULL, "--d2", NULL,  NULL,  "toggle d1 on, d2 off",      2 },
+ { "--d2",   eslARG_NONE, FALSE,  NULL,   NULL, "--d1", NULL,  NULL,  "toggle d2 on, d1 off",      2 },
+ { "-n",     eslARG_INT,    "0",  NULL,"0<=n<10",NULL,  NULL,  NULL,  "integer arg",               2 },
+ { "-x",     eslARG_REAL, "0.8",  NULL, "0<x<1", NULL,  NULL,  NULL,  "real-value arg",            2 },
+ { "--lowx", eslARG_REAL, "1.0",  NULL,   "x>0", NULL,  NULL,  NULL,  "real arg with lower bound", 2 },
+ { "--hix",  eslARG_REAL, "0.9",  NULL,   "x<1", NULL,  NULL,  NULL,  "real arg with upper bound", 2 },
+ { "--lown", eslARG_INT,   "42",  NULL,   "n>0", NULL,"-a,-b", NULL,  "int arg with lower bound",  2 },
+ { "--hin",  eslARG_INT,   "-1",  NULL,   "n<0", NULL,  NULL,"--no-b","int arg with upper bound",  2 },
+ { "--host", eslARG_STRING, "","HOSTTEST",NULL,  NULL,  NULL,  NULL,  "string arg with env var",   3 },
+ { "--multi",eslARG_STRING,NULL,  NULL,   NULL,  NULL,  NULL,  NULL,  "test quoted configfile arg",3 },
+ { "--mul",  eslARG_NONE, FALSE,  NULL,   NULL,  NULL,  NULL,  NULL,  "test long opt abbreviation",3 }, /* xref bug #e4 */
+ {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+/*::cexcerpt::getopts_bigarray::end::*/
+
+int
+main(void)
+{
+  ESL_GETOPTS *go;
+  char         file1[32] = "esltmpXXXXXX";
+  char         file2[32] = "esltmpXXXXXX";
+  char        *errmsg    = "getopts unit test failure";
+  FILE        *f1, *f2;
+  int          i;
+
+  /* Declare a "command line" internally.  */
+  int   argc = 11;		/* progname; 8 options; 2 args */
+  char *argv[] = { "progname", "-bc", "y", "--d1", "-n9", "--hix=0.0", "--lown", "43", "--mul", "arg1", "2005"};
+
+  /* Create a config file #1. */
+  if (esl_tmpfile_named(file1, &f1) != eslOK) esl_fatal("failed to create named tmpfile 1");
+  fprintf(f1, "# Test config file #1\n");
+  fprintf(f1, "#\n");
+  fprintf(f1, "-b\n");
+  fprintf(f1, "--d2\n"); 
+  fprintf(f1, "-n 3\n");
+  fprintf(f1, "-x 0.5\n");
+  fprintf(f1, "--multi \"one two three\"\n"); 
+  fclose(f1);
+
+  /* Create config file #2. */
+  if (esl_tmpfile_named(file2, &f2) != eslOK) esl_fatal("failed to create named tmpfile 2");
+  fprintf(f2, "# Test config file #2\n");
+  fprintf(f2, "#\n");
+  fprintf(f2, "--no-b\n");
+  fprintf(f2, "--hin -33\n");
+  fprintf(f2, "--host www.nytimes.com\n");
+  fclose(f2);
+
+  /* Put some test vars in the environment.
+   * (Note: apparently, on some OS's (Mac OS/X), setenv() necessarily leaks memory.)
+   */
+  setenv("FOOTEST",  "",                         1);
+  setenv("HOSTTEST", "wasp.cryptogenomicon.org", 1);
+
+  /* Open the test config files for reading.
+   */
+  if ((f1 = fopen(file1, "r")) == NULL) esl_fatal("getopts fopen() 1 failed");
+  if ((f2 = fopen(file2, "r")) == NULL) esl_fatal("getopts fopen() 2 failed");
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessConfigfile(go, file1, f1) != eslOK) esl_fatal("getopts failed to process config file 1\n%s\n", go->errbuf);
+  if (esl_opt_ProcessConfigfile(go, file2, f2) != eslOK) esl_fatal("getopts failed to process config file 2\n%s\n", go->errbuf);
+  if (esl_opt_ProcessEnvironment(go)           != eslOK) esl_fatal("getopts failed to process environment:\n%s\n",  go->errbuf);
+  if (esl_opt_ProcessCmdline(go, argc, argv)   != eslOK) esl_fatal("getopts failed to process command line:\n%s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)                 != eslOK) esl_fatal("getopts config fails validation:\n%s\n",        go->errbuf);
+
+  fclose(f1);
+  fclose(f2);
+
+  if (esl_opt_GetBoolean(go, "-a")     != TRUE)  esl_fatal("getopts failed on -a"); /* -a is ON: by environment */
+  if (esl_opt_GetBoolean(go, "-b")     != TRUE)  esl_fatal("getopts failed on -b"); /* -b is toggled thrice, ends up ON */
+  if (esl_opt_GetBoolean(go, "--no-b") != FALSE) esl_fatal("getopts failed on --no-b");	/* so --no-b is OFF */
+  if (esl_opt_GetChar   (go, "-c")     != 'y')   esl_fatal("getopts failed on -c"); /* set to y on cmdline in an optstring */
+  if (esl_opt_GetInteger(go, "-n")     != 9)     esl_fatal("getopts failed on -n"); /* cfgfile, then on cmdline as linked arg*/
+  if (esl_opt_GetReal   (go, "-x")     != 0.5)   esl_fatal("getopts failed on -x"); /* cfgfile #1 */
+  if (esl_opt_GetReal   (go, "--lowx") != 1.0)   esl_fatal("getopts failed on --lowx"); /* stays at default */
+  if (esl_opt_GetReal   (go, "--hix")  != 0.0)   esl_fatal("getopts failed on --hix"); /* arg=x format on cmdline */
+  if (esl_opt_GetInteger(go, "--lown") != 43)    esl_fatal("getopts failed on --lown"); /* cmdline; requires -a -b */
+  if (esl_opt_GetInteger(go, "--hin")  != -33)   esl_fatal("getopts failed on --hin"); /* cfgfile 2; requires --no-b to be off */
+  if (esl_opt_GetBoolean(go, "--mul")  != TRUE)  esl_fatal("getopts failed on --mul"); /* --mul should not be confused with --multi by abbrev parser*/
+  if (strcmp(esl_opt_GetString(go, "--host"), "wasp.cryptogenomicon.org") != 0)
+    esl_fatal("getopts failed on --host"); /* cfgfile 2, then overridden by environment */
+  if (strcmp(esl_opt_GetString(go, "--multi"), "one two three") != 0)
+    esl_fatal("config file didn't handle quoted argument");
+
+  /* --d1, --d2 test that we can resolve the difference between IsDefault(), IsOn(), and IsUsed() */
+  /* these options, despite getting toggled twice on/off, remain at default values;
+   * so d1 is default, on, and not used (because it's default); d2 is default, off, and not used.
+   *         IsDefault      IsOn      IsUsed
+   *          -------       -----     -------
+   *            true        true       true      [can't happen: option must be non-default to be considered  "in use"]
+   *            true        true       false     --d1 for example, despite being toggled twice
+   *            true        false      true      [can't happen: option must be non-default to be considered  "in use"]
+   *            true        false      false     --d2 for example, despite being toggled twice
+   *            false       true       true      -a,-b for example
+   *            false       true       false     [can't happen: if option is ON and not in default state, it's "in use"]
+   *            false       false      true      [can't happen: if option is OFF, it's not "in use"]
+   *            false       false      false     --no-b for example
+   */
+  if (! esl_opt_IsDefault(go, "--d1"))   esl_fatal(errmsg);
+  if (! esl_opt_IsOn     (go, "--d1"))   esl_fatal(errmsg);
+  if (  esl_opt_IsUsed   (go, "--d1"))   esl_fatal(errmsg);
+  if (! esl_opt_IsDefault(go, "--d2"))   esl_fatal(errmsg);
+  if (  esl_opt_IsOn     (go, "--d2"))   esl_fatal(errmsg);
+  if (  esl_opt_IsUsed   (go, "--d2"))   esl_fatal(errmsg);
+  if (  esl_opt_IsDefault(go, "-a"))     esl_fatal(errmsg);
+  if (! esl_opt_IsOn     (go, "-a"))     esl_fatal(errmsg);
+  if (! esl_opt_IsUsed   (go, "-a"))     esl_fatal(errmsg);  
+  if (  esl_opt_IsDefault(go, "-b"))     esl_fatal(errmsg);
+  if (! esl_opt_IsOn     (go, "-b"))     esl_fatal(errmsg);
+  if (! esl_opt_IsUsed   (go, "-b"))     esl_fatal(errmsg);  
+  if (  esl_opt_IsDefault(go, "--no-b")) esl_fatal(errmsg);
+  if (  esl_opt_IsOn     (go, "--no-b")) esl_fatal(errmsg);
+  if (  esl_opt_IsUsed   (go, "--no-b")) esl_fatal(errmsg);  
+  
+  for (i = 0; i < go->nopts; i++)
+    {   /* Test that no option is in an impossible default/on/used state according to logic table above */
+      if (  esl_opt_IsDefault(go, go->opt[i].name) &&   esl_opt_IsOn(go, go->opt[i].name) &&   esl_opt_IsUsed(go, go->opt[i].name)) esl_fatal(errmsg);
+      if (  esl_opt_IsDefault(go, go->opt[i].name) && ! esl_opt_IsOn(go, go->opt[i].name) &&   esl_opt_IsUsed(go, go->opt[i].name)) esl_fatal(errmsg);
+      if (! esl_opt_IsDefault(go, go->opt[i].name) &&   esl_opt_IsOn(go, go->opt[i].name) && ! esl_opt_IsUsed(go, go->opt[i].name)) esl_fatal(errmsg);
+      if (! esl_opt_IsDefault(go, go->opt[i].name) && ! esl_opt_IsOn(go, go->opt[i].name) &&   esl_opt_IsUsed(go, go->opt[i].name)) esl_fatal(errmsg);
+    }
+
+  /* Now the two remaining argv[] elements are the command line args
+   */
+  if (esl_opt_ArgNumber(go) != 2) esl_fatal("getopts failed with wrong arg number");
+
+  if (strcmp("arg1", esl_opt_GetArg(go, 1)) != 0) esl_fatal("getopts failed on argument 1");
+  if (strcmp("2005", esl_opt_GetArg(go, 2)) != 0) esl_fatal("getopts failed on argument 2");
+
+  esl_getopts_Destroy(go);
+  remove(file1);
+  remove(file2);
+  exit(0);
+}
+
+#endif /*eslGETOPTS_TESTDRIVE*/
+/*-------------- end of test driver -------------------------*/
+
+/*****************************************************************
+ * 7. Examples.
+ *****************************************************************/
+
+/* The starting example of "standard" getopts behavior, without
+ * any of the bells and whistles.
+ * Compile:
+     gcc -g -Wall -o getopts_example -I. -DeslGETOPTS_EXAMPLE esl_getopts.c easel.c
+ */
+#ifdef eslGETOPTS_EXAMPLE
+/*::cexcerpt::getopts_example::begin::*/
+#include <stdio.h>
+#include "easel.h"
+#include "esl_getopts.h"
+
+static ESL_OPTIONS options[] = {
+  /* name        type       def   env  range toggles reqs incomp help                       docgroup*/
+  { "-h",     eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",            0},
+  { "-a",     eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "a boolean switch",               0},
+  { "-b",     eslARG_NONE,"default",NULL,NULL, NULL, NULL, NULL, "another boolean switch",         0},
+  { "-n",     eslARG_INT,     "0", NULL, NULL, NULL, NULL, NULL, "an integer argument",            0},
+  { "-s",     eslARG_STRING,"hi!", NULL, NULL, NULL, NULL, NULL, "a string argument",              0},
+  { "-x",     eslARG_REAL,  "1.0", NULL, NULL, NULL, NULL, NULL, "a real-valued argument",         0},
+  { "--file", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "long option, with filename arg", 0},
+  { "--char", eslARG_CHAR,     "", NULL, NULL, NULL, NULL, NULL, "long option, with character arg",0},
+  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 
+};
+static char usage[] = "Usage: ./example [-options] <arg>";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS *go;
+  char        *arg;
+
+  if ((go = esl_getopts_Create(options))     == NULL)  esl_fatal("Bad options structure\n");  
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal("Failed to parse command line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) esl_fatal("Failed to parse command line: %s\n", go->errbuf);
+
+  if (esl_opt_GetBoolean(go, "-h") == TRUE) {
+    puts(usage); 
+    puts("\n  where options are:");
+    esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2=indentation; 80=width */
+    return 0;
+  }
+  if (esl_opt_ArgNumber(go) != 1) esl_fatal("Incorrect number of command line arguments.\n%s\n", usage);
+  
+  arg = esl_opt_GetArg(go, 1);
+
+  printf("Option -a:      %s\n", esl_opt_GetBoolean(go, "-a") ? "on" : "off");
+  printf("Option -b:      %s\n", esl_opt_GetBoolean(go, "-b") ? "on" : "off");
+  printf("Option -n:      %d\n", esl_opt_GetInteger(go, "-n"));
+  printf("Option -s:      %s\n", esl_opt_GetString( go, "-s"));
+  printf("Option -x:      %f\n", esl_opt_GetReal(   go, "-x"));
+  if (esl_opt_IsUsed(go, "--file")) printf("Option --file:  %s\n", esl_opt_GetString(go, "--file"));
+  else                              printf("Option --file:  (not set)\n");
+  printf("Option --char:  %c\n", esl_opt_GetChar(go, "--char"));
+  printf("Cmdline arg:    %s\n", arg);
+
+  esl_getopts_Destroy(go);
+  return 0;
+}
+/*::cexcerpt::getopts_example::end::*/
+#endif /*eslGETOPTS_EXAMPLE*/
+
+/* Using <esl_getopts_CreateDefaultApp()> implements a standard series
+ * of events, including how the -h (help) option is handled.
+ * Compile:
+     gcc -g -Wall -o getopts_example2 -I. -DeslGETOPTS_EXAMPLE2 esl_getopts.c easel.c
+ */
+#ifdef eslGETOPTS_EXAMPLE2
+/*::cexcerpt::getopts_example2::begin::*/
+#include <stdio.h>
+#include "easel.h"
+#include "esl_getopts.h"
+
+static ESL_OPTIONS options[] = {
+  /* name          type     default  env range toggles reqs incomp     help                   docgroup*/
+  { "-h",     eslARG_NONE,   FALSE, NULL, NULL,  NULL, NULL, NULL, "show help and usage",            0},
+  { "-a",     eslARG_NONE,   FALSE, NULL, NULL,  NULL, NULL, NULL, "a boolean switch",               0},
+  { "-n",     eslARG_INT,      "42",NULL, NULL,  NULL, NULL, NULL, "an integer",                     0},
+  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 
+};
+static char banner[] = "example of using simplest getopts creation";
+static char usage[]  = "[-options] <arg1> <arg2>";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS *go   = esl_getopts_CreateDefaultApp(options, 2, argc, argv, banner, usage);
+  char        *arg1 = esl_opt_GetArg(go, 1);
+  char        *arg2 = esl_opt_GetArg(go, 2);
+  int          a    = esl_opt_GetBoolean(go, "-a");
+  int          n    = esl_opt_GetInteger(go, "-n");
+
+  printf("arg 1: %s\n", arg1);
+  printf("arg 2: %s\n", arg2);
+  printf("option a: %s\n", (a ? "true" : "false")); 
+  printf("option n: %d\n", n);
+
+  esl_getopts_Destroy(go);
+  return 0;
+}
+/*::cexcerpt::getopts_example2::end::*/
+#endif /*eslGETOPTS_EXAMPLE2*/
+/*-------------- end of examples ---------------------*/
+
+/*****************************************************************  
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
+
+
diff --git a/esl_getopts.h b/esl_getopts.h
new file mode 100644
index 0000000..0839a5c
--- /dev/null
+++ b/esl_getopts.h
@@ -0,0 +1,121 @@
+/* Command line, config file, and environment variable
+ * configuration of an application. Extends standard
+ * UNIX/POSIX/GNU getopt().
+ * 
+ */
+#ifndef eslGETOPTS_INCLUDED
+#define eslGETOPTS_INCLUDED
+
+#include "easel.h"
+
+/* Object: ESL_OPTIONS
+ * 
+ * The application main.c defines an array of <ESL_OPTIONS> structures to
+ * define what configuration options are used. The array is 
+ * terminated by a structure containing { NULL, NULL, NULL, 0, NULL,
+ * NULL, NULL, NULL} (or more simply, just 0 in all 8 fields.)
+ */
+/*::cexcerpt::options_object::begin::*/
+typedef struct {
+  char *name;           /* either short "-a" or long "--foo" style               */
+  int   type;           /* arg type, for type checking: (eslARG_INT, etc.)       */
+  char *defval;         /* default setting, or NULL ("default" is a C keyword)   */
+  char *envvar;         /* associated environ var ("BLASTDB"), or NULL           */
+  char *range;          /* for range checking arg: ("0<=x<=1", etc.)             */
+  char *toggle_opts;    /* comma-sep'd optlist: turn these off if this opt is on */
+  char *required_opts;  /* comma-sep'd optlist: these must also be set           */
+  char *incompat_opts;  /* comma-sep'd optlist: these must not be set            */
+  char *help;           /* help/usage string                                     */
+  int   docgrouptag;    /* integer tag for documentation groups                  */
+} ESL_OPTIONS;
+/*::cexcerpt::options_object::end::*/
+
+/* Argument types: the "type" variable in <ESL_OPTIONS>.
+ */
+#define eslARG_NONE      0	/* option takes no argument (so, is boolean)   */
+#define eslARG_INT       1	/* arg convertable by atoi()               <n> */
+#define eslARG_REAL      2	/* arg convertable by atof()               <x> */
+#define eslARG_CHAR      3	/* arg is a single character               <c> */
+#define eslARG_STRING    4	/* unchecked arg type                      <s> */
+#define eslARG_INFILE    5      /* input file - same as string, shown as   <f> */
+#define eslARG_OUTFILE   6      /* output file - same as string, shown as  <f> */
+
+
+
+/* Object: ESL_GETOPTS
+ * 
+ * An <ESL_GETOPTS> object is created to parse configuration
+ * from command line options, config file(s), and environment
+ * variables.
+ */
+typedef struct {
+  ESL_OPTIONS *opt;       /* array of app-defined options              */
+  int          nopts;     /* number of options                         */
+
+  int    argc;		  /* argc from command line                    */
+  char **argv;		  /* argv from command line                    */
+  int    optind;	  /* position in argc; eventually 1st arg idx  */
+  int    nfiles;	  /* # of cfgfiles that have been processed    */
+
+  char **val;		  /* config'ed val for each option (as string) */
+  int   *setby;		  /* array [0..nopts-1] for who set option i   */
+  int   *valloc;          /* 0, or length of alloc for val[i]          */
+
+  char  *optstring;	  /* internal: ptr into string of 1-char opts in argv[]          */
+  char  *spoof;	    	  /* internal allocation: ProcessSpoof() stores cmdline          */
+  char **spoof_argv;	  /* internal allocation: ProcessSpoof()'s ptrs into its cmdline */
+
+  char  errbuf[eslERRBUFSIZE];	/* buffer for reporting user error     */
+} ESL_GETOPTS;
+
+
+/* Possible values of the <setby> variable in ESL_GETOPTS.
+ * Additionally, values of >3 also indicate a config file, in order 
+ * of _ProcessConfigFile() calls (that is, setby=3 is the first 
+ * config file, setby=4 is the second, etc.).
+ */
+#define eslARG_SETBY_DEFAULT  0
+#define eslARG_SETBY_CMDLINE  1
+#define eslARG_SETBY_ENV      2
+#define eslARG_SETBY_CFGFILE  3
+
+
+/* The visible API.
+ */
+extern ESL_GETOPTS *esl_getopts_Create(ESL_OPTIONS *opt);
+extern ESL_GETOPTS *esl_getopts_CreateDefaultApp(ESL_OPTIONS *options, int nargs, int argc, char **argv, char *banner, char *usage);
+extern int          esl_getopts_Reuse  (ESL_GETOPTS *g);
+extern void         esl_getopts_Destroy(ESL_GETOPTS *g);
+extern void         esl_getopts_Dump(FILE *ofp, ESL_GETOPTS *g);
+
+extern int esl_opt_ProcessConfigfile (ESL_GETOPTS *g, char *filename, FILE *fp);
+extern int esl_opt_ProcessEnvironment(ESL_GETOPTS *g);
+extern int esl_opt_ProcessCmdline    (ESL_GETOPTS *g, int argc, char **argv);
+extern int esl_opt_ProcessSpoof      (ESL_GETOPTS *g, const char *cmdline);
+extern int esl_opt_VerifyConfig      (ESL_GETOPTS *g);
+extern int esl_opt_ArgNumber   (const ESL_GETOPTS *g);
+extern int esl_opt_SpoofCmdline(const ESL_GETOPTS *g, char **ret_cmdline);
+
+extern int esl_opt_GetSetter(const ESL_GETOPTS *g, char *optname);
+
+extern int    esl_opt_IsDefault (const ESL_GETOPTS *g, char *optname);
+extern int    esl_opt_IsOn      (const ESL_GETOPTS *g, char *optname);
+extern int    esl_opt_IsUsed    (const ESL_GETOPTS *g, char *optname);
+
+extern int    esl_opt_GetBoolean(const ESL_GETOPTS *g, char *optname);
+extern int    esl_opt_GetInteger(const ESL_GETOPTS *g, char *optname);
+extern double esl_opt_GetReal   (const ESL_GETOPTS *g, char *optname);
+extern char   esl_opt_GetChar   (const ESL_GETOPTS *g, char *optname);
+extern char  *esl_opt_GetString (const ESL_GETOPTS *g, char *optname);
+extern char  *esl_opt_GetArg    (const ESL_GETOPTS *g, int which);
+
+extern int esl_opt_DisplayHelp(FILE *ofp, ESL_GETOPTS *go, int docgroup, int indent, int textwidth);
+
+#endif /*eslGETOPTS_INCLUDED*/
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_getopts.tex b/esl_getopts.tex
new file mode 100644
index 0000000..c18ab16
--- /dev/null
+++ b/esl_getopts.tex
@@ -0,0 +1,668 @@
+
+The \eslmod{getopts} module interprets UNIX command line syntax. It
+allows both standard POSIX one-character options and GNU-style long
+options, in addition to command line arguments. The implementation
+shares similarities with POSIX \ccode{getopt()} and GNU's
+\ccode{getopt\_long()}. It has additional abilities, at the cost of
+enforcing a specific style.
+
+In addition to setting options from the command line, options may also
+be configured so they can be set by environment variables, or by one
+or more configuration files.
+
+Option arguments can be automatically checked for valid type
+(integers, real numbers, characters, or strings). Numeric arguments
+can also be checked for valid range (for instance, ensuring that a
+probability is in the range $0 \leq x \leq 1$).
+
+Options can be linked into ``toggle groups'', such that setting one
+option automatically unsets others. 
+
+You can specify that an option isn't legal unless other required
+options are also set, or conversely that an option is incompatible
+with one or more other options.
+
+A standardized usage/help display for command line options can be
+printed directly from the internal information, including default
+values and range restrictions when line length allows.
+
+This is all configured by defining an array of \ccode{ESL\_OPTIONS}
+structures that provide the necessary information. This array is
+turned into a \ccode{ESL\_GETOPTS} object, which is used to determine
+and store the configuration state of your application according to the
+command line, environment variables, and configuration files.
+
+The \ccode{ESL\_GETOPTS} object can be queried directly when your
+program executes configuration-dependent steps. There is often no need
+to store configuration information in other variables in your
+program. This simplifies code structure, by allowing you to pass the
+complete configuration state of your application in one capsule to
+functions other than \ccode{main()}. This is especially useful in
+applications where \ccode{main()} is a dispatch wrapper, such as the
+masters and workers in a parallelized MPI program, for example.
+
+Table~\ref{tbl:getopts_api} lists the functions in the
+\eslmod{getopts} API. The module implements a \ccode{ESL\_GETOPTS}
+object that holds the configuration state of the application, and an
+\ccode{ESL\_OPTIONS} structure that contains information about one
+configurable option. An application defines an array of
+\ccode{ESL\_OPTIONS} to declare what options it will allow.
+
+% Table generated by autodoc -t esl_getopts.c (so don't edit here, edit esl_getopts.c:)
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\apisubhead{The \ccode{ESL\_GETOPTS} object}\\
+\hyperlink{func:esl_getopts_Create()}{\ccode{esl\_getopts\_Create()}} & Create a new \ccode{ESL\_GETOPTS} object.\\
+\hyperlink{func:esl_getopts_CreateDefaultApp()}{\ccode{esl\_getopts\_CreateDefaultApp()}} & Initialize a standard Easel application.\\
+\hyperlink{func:esl_getopts_Reuse()}{\ccode{esl\_getopts\_Reuse()}} & Reset application state to default.\\
+\hyperlink{func:esl_getopts_Destroy()}{\ccode{esl\_getopts\_Destroy()}} & Destroys an \ccode{ESL\_GETOPTS} object.\\
+\hyperlink{func:esl_getopts_Dump()}{\ccode{esl\_getopts\_Dump()}} & Dumps a summary of a \ccode{ESL\_GETOPTS} configuration.\\
+\apisubhead{Setting and testing a configuration}\\
+\hyperlink{func:esl_opt_ProcessConfigfile()}{\ccode{esl\_opt\_ProcessConfigfile()}} & Parses options in a config file.\\
+\hyperlink{func:esl_opt_ProcessEnvironment()}{\ccode{esl\_opt\_ProcessEnvironment()}} & Parses options in the environment.\\
+\hyperlink{func:esl_opt_ProcessCmdline()}{\ccode{esl\_opt\_ProcessCmdline()}} & Parses options from the command line.\\
+\hyperlink{func:esl_opt_ProcessSpoof()}{\ccode{esl\_opt\_ProcessSpoof()}} & Parses a string as if it were a command line.\\
+\hyperlink{func:esl_opt_VerifyConfig()}{\ccode{esl\_opt\_VerifyConfig()}} & Validates configuration after options are set.\\
+\hyperlink{func:esl_opt_ArgNumber()}{\ccode{esl\_opt\_ArgNumber()}} & Returns number of command line arguments.\\
+\hyperlink{func:esl_opt_SpoofCmdline()}{\ccode{esl\_opt\_SpoofCmdline()}}& Create faux command line from current option configuration.\\
+\apisubhead{Retrieving option settings and command line args}\\
+\hyperlink{func:esl_opt_IsDefault()}{\ccode{esl\_opt\_IsDefault()}} & Returns \ccode{TRUE} if option remained at default setting.\\
+\hyperlink{func:esl_opt_IsOn()}{\ccode{esl\_opt\_IsOn()}} & Returns \ccode{TRUE} if option is set.\\
+\hyperlink{func:esl_opt_IsUsed()}{\ccode{esl\_opt\_IsUsed()}} & Returns \ccode{TRUE} if option is on, but not default.\\
+\hyperlink{func:esl_opt_GetBoolean()}{\ccode{esl\_opt\_GetBoolean()}} & Retrieve \ccode{TRUE}/\ccode{FALSE} for a boolean option.\\
+\hyperlink{func:esl_opt_GetInteger()}{\ccode{esl\_opt\_GetInteger()}} & Retrieve value of an integer option.\\
+\hyperlink{func:esl_opt_GetReal()}{\ccode{esl\_opt\_GetReal()}} & Retrieve value of a real-valued option.\\
+\hyperlink{func:esl_opt_GetChar()}{\ccode{esl\_opt\_GetChar()}} & Retrieve value of a character option.\\
+\hyperlink{func:esl_opt_GetString()}{\ccode{esl\_opt\_GetString()}} & Retrieve value of a string option.\\
+\hyperlink{func:esl_opt_GetArg()}{\ccode{esl\_opt\_GetArg()}} & Retrieve numbered command line argument.\\
+\hyperlink{func:esl_opt_DisplayHelp()}{\ccode{esl\_opt\_DisplayHelp()}} & Formats one-line help for each option.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{getopts} API.}
+\label{tbl:getopts_api}
+\end{table}
+
+
+\subsection{An example of using the getopts API}
+
+Figure~\ref{fig:getopts_example} shows an example of using five short
+options (including help) and two long options, without using any of
+getopts' optional validation or configuration mechanisms. The steps
+are:
+
+\begin{figure}
+\input{cexcerpts/getopts_example}
+\caption{An example of using the \eslmod{getopts} module.}
+\label{fig:getopts_example}
+\end{figure}
+
+\begin{itemize}
+\item The application defines an array of \ccode{ESL\_OPTIONS}
+      structures, one per option. Name, type, and default value fields
+      are required. The other fields are optional (though the help
+      string shouldn't be left NULL unless you're being lazy). The
+      array is terminated by an entry of all 0's.
+
+\item An application typically defines a helpful ``usage'' string,
+      which it prints out as part of help messages or error messages.
+      The \eslmod{getopts} module doesn't need this, though, so you're
+      free to format your messages however you like.
+
+\item A \ccode{ESL\_GETOPTS} object is created, using the options
+      array. At this point, all options are initialized to default
+      values inside the object.
+
+\item The application now processes option settings from the command
+      line, environment variables, and one or more configuration
+      files. The application can do this in any precedence order it
+      chooses. In the example, only the command line is processed.
+ 
+\item The call to \ccode{esl\_opt\_VerifyConfig(go)} validates the
+      configuration, before you attempt to retrieve any information
+      from it.
+
+\item Many of my applications (including Easel applications) typically
+      look for a \ccode{-h} option immediately, to print a short help
+      page. This isn't required by \eslmod{getopts}.
+
+\item The application will typically retrieve, validate, and store its
+      non-optional command line arguments in order and one at a time
+      using \ccode{esl\_opt\_GetArg()} calls early in the program.
+  
+\item The application may then go off and do its thing, using
+  \ccode{\_Get*()} calls (and \ccode{\_IsUsed()} and
+  \ccode{\_IsDefault()} calls) to retrieve option information when
+  needed.
+
+\item On exit, the \ccode{ESL\_GETOPTS} object is free'd. This 
+      object is the only place where memory is allocated. Any string
+      retrieved as an option or argument, for example, is a pointer
+      to internal memory maintained by the object. This makes it
+      dangerous to free the object until you know you're not accessing
+      any pointers it's returned to you, unless you've made copies.
+\end{itemize}
+
+An example of running this program:
+\begin{cchunk}
+   % ./getopts_example -ax 0.3 -n 42 --file foo --char x baz
+  Option -a:      on
+  Option -b:      on
+  Option -n:      42
+  Option -s:      hi!
+  Option -x:      0.300000
+  Option --file:  foo
+  Option --char:  x
+  Cmdline arg:    baz
+\end{cchunk}
+
+Note that because we set the default value of \ccode{-b} to TRUE in
+this example, it is always on whether we use the \ccode{-b} option or
+not.
+
+
+
+\subsection{Defining options in the \ccodeincmd{ESL\_OPTIONS} array}
+
+Since you define your options in a static array of
+\ccode{ESL\_OPTIONS} structures, you need to know what an
+\ccode{ESL\_OPTIONS} structure contains.  The \ccode{ESL\_OPTIONS}
+structure is declared in \ccode{getopts.h} as:
+
+\input{cexcerpts/options_object}
+
+Each of these fields in the options array is described in detail below:
+
+   \subsubsection{Legal option names}
+
+All options must start with '-'. Options that start with one '-' are
+\textbf{short options}. Options that start with \ccode{--} are
+\textbf{long options}.
+
+Short option names must be a single alphanumeric character: \ccode{-n}
+or \ccode{-1}, for example.  Short options can be concatenated on the
+command line: \ccode{-abc} is the same as \ccode{-a -b -c}.
+
+Long option names should contain only alphanumeric characters,
+\ccode{-}, or \ccode{\_}: \ccode{--foo} or \ccode{--foo-tastic}, for
+example. They must not contain space, tab, newline, \ccode{=}, or
+\ccode{,} characters, which will certainly confuse the option argument
+parsers. Other characters may happen to work, but nonetheless should
+not be used. Long options can be abbreviated (unambiguously) on the
+command line: if \ccode{--foobar} is an option, \ccode{--f} works too,
+so long as no other long option starts with the same prefix
+\ccode{--f}.
+
+You should avoid using option names that look like negative numbers if
+any of your other options would accept that value as a valid argument,
+so that Easel can robustly detect when a user forgets an option
+argument on the command line.  For example, if \ccode{-n} takes an
+integer argument and \ccode{-1} is an option, and a user types
+\ccode{-n -1} on a commandline, the \ccode{-1} will be parsed as
+\ccode{-n}'s option, even if the user meant the \ccode{-1} as an
+option and had forgotten to add an argument for \ccode{-n}.
+
+   \subsubsection{Type checking}
+
+Seven argument types are recognized:
+
+% Any addition or subtraction to this list also requires updating
+% the c2optlist script in easel/devkit.
+\begin{center}
+\begin{tabular}{llll}
+\textbf{flag}           & \textbf{description}     & \textbf{abbrev} & \textbf{type checking} \\\hline
+\ccode{eslARG\_NONE}     & Boolean switch (on/off) & n/a             &  n/a                   \\
+\ccode{eslARG\_INT}      & integer                 & \ccode{<n>}     & convertible by \ccode{atoi()}\\
+\ccode{eslARG\_REAL}     & float or double         & \ccode{<x>}     & convertible by \ccode{atof()}\\
+\ccode{eslARG\_CHAR}     & one character           & \ccode{<c>}     & single ASCII char \\
+\ccode{eslARG\_STRING}   & any string              & \ccode{<s>}     & not checked\\
+\ccode{eslARG\_INFILE}   & an input filename       & \ccode{<f>}     & not checked\\
+\ccode{eslARG\_OUTFILE}  & an output filename      & \ccode{<f>}     & not checked\\
+\end{tabular}
+\end{center}
+
+
+All arguments are declared, configured, and stored internally as
+strings in a \ccode{ESL\_GETOPTS} object. For arguments that are
+declared to be of types \ccode{eslARG\_INT}, \ccode{eslARG\_REAL}, or
+\ccode{eslARG\_CHAR}, the string is checked to be sure it can be
+completely converted to the declared type.
+
+Strings are of type \ccode{eslARG\_STRING}, and since any string is
+valid (including a NULL pointer), this type is not checked. An
+application can also declare an argument to be of type
+\ccode{eslARG\_STRING} if for some reason it wants to bypass type
+checking. The application would recover the option setting with
+\ccode{esl\_opt\_GetStringOption()} and then deal with any type
+conversion itself.
+
+Input and output filenames can be declared as \ccode{eslARG\_INFILE}
+and \ccode{eslARG\_OUTFILE}, respectively. Currently both are unchecked
+types that are treated the same as a \ccode{eslARG\_STRING}, except
+that their arguments are indicated as \ccode{<f>} instead of
+\ccode{<s>} in help output. In the future, it might be useful to
+automatically check that input files exist and can be read, and that
+output files can be written.
+
+   \subsubsection{Default values}
+
+Since the \ccode{ESL\_GETOPTS} object stores all values internally as
+strings, default settings in the options array are also all provided
+as strings.
+
+For any type of option, \ccode{NULL}, \ccode{FALSE}, or 0 are all
+interpreted as the option being unset (OFF). Any non-NULL string value
+is interpreted as the option being set (ON).
+
+For boolean defaults, any non-NULL string is interpreted as
+\ccode{TRUE}, and the option is ON.  For a boolean option that is ON
+by default, the only place where the string value matters is in
+formatting option help, where this string will be displayed as the
+default setting. Therefore, strings like \ccode{"default"},
+\ccode{"on"}, or \ccode{"true"} would be typical, to make the help
+string look right.
+
+Note that the syntax here is a little weird. The quotes around
+\ccode{"true"} and the absence of quotes around \ccode{FALSE} are
+important. \ccode{FALSE}, \ccode{NULL}, and \ccode{0} are all
+identical in the internal representation (evaluating to a null
+pointer).
+
+Integer, real-valued, and character arguments must be provided as
+strings: ``42'' not 42, ``1.0'' not 1.0, and ``x'' not 'x'.  String
+arguments can be set to any string.
+
+Sometimes you want to have an option that is off by default, but can
+be optionally set to a value. That is, you may want to combine a
+boolean switch and a integer-, real-, char-, or string-valued
+option. To do this, make the default value \ccode{NULL}, which means
+``unset'', and when your code checks for the value of such an option,
+it must first use \ccode{esl\_opt\_IsOn()} to check if it's been set,
+before attempting to \ccode{esl\_opt\_Get*()} the value.
+
+There is no way to turn a boolean option off by a command line option,
+environment variable, or configuration file if its default setting is
+ON. Booleans (and strings, for that matter) can only be turned on when
+their option is selected. Booleans can be set to off by default, or
+toggled off indirectly by another option is turned on (see the section
+on toggle groups further below). The way to do this (to turn
+\ccode{-b} off) is to provide a counteroption (\ccode{--no-b}), and
+toggle-tie them together.
+
+   \subsubsection{Connecting an option to an environment variable}
+
+When an option is connected to an environment variable, setting the
+environment variable has the same result as setting the option on the
+command line.
+
+To check and process environment variables, the application calls
+\ccode{esl\_opt\_ProcessEnvironment()}.
+
+Boolean options are set by setting the environment variable with no
+argument, for instance (in a C-shell),
+
+\begin{cchunk}
+  % setenv FOO_DEBUGGING
+\end{cchunk}
+
+and other options are set by setting the environment variable to the
+appropriate argument, for instance (in a C-shell),
+
+\begin{cchunk}
+  % setenv FOO_DEBUG_LEVEL 5
+\end{cchunk}
+
+For example, if we connected the option name \ccode{--debug} to
+environment variable \ccode{"FOO\_DEBUGGING"} and option
+\ccode{--debuglevel} to environment variable \ccode{"FOO\_DEBUG\_LEVEL"}
+in an application \ccode{myapp}, then
+
+\begin{cchunk}
+  % myapp --debug --debuglevel 5
+\end{cchunk}
+
+is the same as 
+
+\begin{cchunk}
+  % setenv FOO_DEBUGGING
+  % setenv FOO_DEBUG_LEVEL 5
+  % myapp 
+\end{cchunk}
+
+An advantage of using environment variables is that if you want to
+configure some optional behavior more or less permanently, you can
+save yourself a lot of command line typing by setting that
+configuration in the environment (in your \ccode{.cshrc} or
+\ccode{.bashrc}, for example).
+
+
+   \subsubsection{Range checking}
+
+If a non-NULL range is provided, a configured argument (including the
+specified default setting) will be checked to be sure it satisfies a
+lower bound, upper bound, or both. Range checking only applies to
+integer, real, and char arguments. Boolean and string arguments should
+set their range fields to NULL.
+
+In a range string, a character \ccode{n}, \ccode{x}, or \ccode{c} is
+used to represent the argument. Bounds may either be exclusive ($<$ or
+$>$) or inclusive ($>=$ or $<=$). Examples of range strings specifying
+lower bounds are \ccode{"n>=0"}, \ccode{"x>1.0"}, and
+\ccode{"c>=A"}. Examples of range strings specifying upper bounds are
+\ccode{"n<0"}, \ccode{"x<=100.0"}, and \ccode{"c<=Z"}. Examples of
+range strings specifying both lower and upper bounds are
+\ccode{"0<n<=100"}, \ccode{"0<=x<=1"}, and \ccode{"a<=c<=z"}.
+
+Range checking occurs before any option is set.
+
+
+
+   \subsubsection{Setting toggle groups of options}
+
+If a non-NULL string \ccode{toggle\_opts} of ``toggle-tied'' options
+is set for option X, this is a comma-delimited list of options that
+are turned off when option X is turned on. This allows the application
+to define a group of options for which only one may be on. The
+application would set an appropriate one to be on by default, and the
+others to be off by default.
+
+For example, if you configure an option \ccode{-a} to have a
+\ccode{toggle\_opts} of \ccode{"-b,-c"}, then whenever \ccode{-a} is
+turned on, both \ccode{-b} and \ccode{-c} are automatically turned
+off. 
+
+But this only defines the behavior when \ccode{-a} is selected.  To
+get all three options to behave as a toggle group, you'd also want to
+set \ccode{toggle\_opts} for \ccode{-b} to \ccode{"-a,-c"}, and
+\ccode{toggle\_opts} for \ccode{-c} to \ccode{"-a,-b"}. This is a
+little redundant and messy; it's the result of the line-oriented,
+one-option-at-a-time definition of the \ccode{ESL\_OPTIONS}.  These
+lists can get quite long, too.
+
+An option has no effect on itself when it appears in its own
+toggle-tied list. This lets you reduce the mess a bit. You can
+\ccode{\#define} a toggle group string: 
+
+\begin{cchunk}
+  #define OPTGROUP1 "--option1,--option2,--option3,--option4"
+\end{cchunk}
+
+and use that \ccode{\#define} macro in the \ccode{ESL\_OPTIONS}.
+
+Although booleans may only be turned ON when their option is present,
+you can easily get the semantics of an on/off switch by defining
+another option that works as the off switch when it is selected. For
+example, you could define (GNU-ish) boolean options \ccode{--foo} and
+\ccode{--no-foo}, and set \ccode{toggle\_opts} for \ccode{--foo} to be
+\ccode{"--no-foo"} and vice versa.  
+
+Toggle-tying should only be used for boolean options, but it will also
+work for string options (where turning a string option off means
+setting it to NULL). Toggle-tying an integer, real-valued, or char
+option will result in undefined behavior, because these options may
+not be turned off.
+
+Toggling behavior occurs immediately, whenever an option with a
+non-NULL \ccode{toggle\_opts} field is set.
+
+
+
+   \subsubsection{Specifying required or incompatible options}
+
+If a non-NULL string \ccode{required\_opts} is provided for option X,
+this specifies a comma-delimited list of additional options that must
+be on if option X is set. 
+
+One case where this behavior is useful is when one (primary) option
+turns on a mode of application behavior, and other (secondary) options
+configure that mode. If a user tried to set the secondary options
+without turning on the mode in the first place, the application should
+issue a warning. So, if a mode was turned on by \ccode{--foomode} and
+configured by \ccode{--foolevel <x>}, one could set
+\ccode{required\_opts} to \ccode{"--foomode"} for the option
+\ccode{--foolevel}.
+
+Required options are validated when the application calls
+\ccode{esl\_opt\_VerifyConfig()}, presumably after all configuration
+information has been processed. This delayed verification allows the
+primary options to be set anywhere and in any order, before or after
+secondary options are set.
+
+The \ccode{incompat\_opts} field is the converse of
+\ccode{required\_opts}.It specifies a comma-delimited list of options
+that may \emph{not} also be on if option X is on.
+
+
+
+   \subsubsection{Example of a more fully featured \ccode{ESL\_OPTIONS} array}
+
+The test driver in \ccode{getopts.c} uses an options array that
+exercises all the optional features at least once:
+
+\input{cexcerpts/getopts_bigarray}
+
+
+\subsection{Formatting help}
+
+
+The \ccode{esl\_opt\_DisplayHelp()} function is intended to streamline
+the job of printing a brief help message, reminding the user of the
+command line options. It uses the help string to produce output like
+(from the example code above):
+
+\begin{cchunk}
+% ./example -h
+Usage: ./example [-options] <arg>
+
+  where options are:
+  -h         : show help and usage
+  -a         : a boolean switch
+  -b         : another boolean switch  [default]
+  -n <n>     : an integer argument  [0]
+  -x <x>     : a real-valued argument  [1.0]
+  --file <s> : long option, with filename arg
+  --char <c> : long option, with character arg
+\end{cchunk}
+
+One line is printed for each option, in the same order that they
+appear in the \ccode{ESL\_OPTIONS} array. The line is constructed from
+the mandatory option name, the mandatory argument type, and the
+optional help string.
+
+If there is room on the lines, default values are shown in brackets
+(when they are on or non-\ccode{NULL}). This display is all or none;
+if any line is too long, no default values are displayed.
+
+If there is still room on the lines, range restrictions are shown in
+parentheses. Like the default values, this display is also all or
+none.
+
+The amount of space on the line (in characters) is specified by the
+\ccode{textwidth} argument to \ccode{esl\_opt\_DisplayHelp()}, which
+might typically be 80. If any line is too long even without printing a
+default value and range restriction, an error is thrown; you need to
+either shorten the help string or increase the specified
+\ccode{textwidth}. (This is not a memory allocation
+issue. \ccode{textwidth} is provided as a tool to help you keep all
+your text within the bounds of a user's terminal window, and warn you
+when you're going to wrap or truncate lines.)
+
+You can indent all the lines by some number of spaces using the
+\ccode{indent} argument, which was set to 2 in the example above.
+
+
+The base behavior of \ccode{esl\_opt\_DisplayHelp()} is to show all
+the options in one list. You might want to have separate lists. For
+example, you might want to consider some options as ``expert''
+options, and only show help for those when a user really asks for it.
+Or you might simply want to group your options into sections, with
+different headers. This is what the \ccode{docgrouptag} field is for
+in the \ccode{ESL\_OPTIONS} structure. If you pass
+\ccode{esl\_opt\_DisplayHelp()} a nonzero value for \ccode{docgroup},
+it will only show help lines for options that have a matching
+\ccode{docgrouptag}. If you had some options with a
+\ccode{docgrouptag} of 1, and some more options with a 
+\ccode{docgrouptag} of 2, you could format them into two help sections
+with this:
+
+\begin{cchunk}
+ if (show_help) {
+    puts(usage); 
+    puts("\n  where some options are:");
+    esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1=docgroup 1; 2=indentation; 80=width */
+    puts("\n  and some more options are:");
+    esl_opt_DisplayHelp(stdout, go, 2, 2, 80); /* 1=docgroup 2; 2=indentation; 80=width */
+    return 0;
+  }
+\end{cchunk}
+
+which, if you modified the above example in this way (setting the
+first three options to have a \ccode{docgrouptag} of 1 and the other
+four to be 2) would give you:
+
+\begin{cchunk}
+./example -h
+Usage: ./example [-options] <arg>
+
+  where some options are:
+  -h : show help and usage
+  -a : a boolean switch
+  -b : another boolean switch  [default]
+
+  and some more options are:
+  -n <n>     : an integer argument  [0]
+  -x <x>     : a real-valued argument  [1.0]
+  --file <s> : long option, with filename arg
+  --char <c> : long option, with character arg
+\end{cchunk}
+
+
+
+
+\subsection{Command line parsing, config files, and the environment}
+
+Once a \ccode{ESL\_GETOPTS} object has been loaded with an options
+array and initialized to default state by
+\ccode{esl\_getopts\_Create()}, a \ccode{esl\_opt\_ProcessCmdline()}
+call then processes all the options on the command line, updating the
+configuration. 
+
+Internally, the object keeps track of where the options end and
+command line arguments begin. The macro \ccode{esl\_opt\_ArgNumber()}
+returns the number of arguments remaining after the options.  Calls to
+\ccode{esl\_opt\_GetArg()} recover the command line arguments by
+number.
+
+The getopts module can configure options not only via the command
+line, but via environment and/or config files.  Connections to the
+environment -- the \ccode{env\_var} field of the options array -- are
+processed by a \ccode{esl\_opt\_ProcessEnvironment()} call.  An open
+config file is processed by a \ccode{esl\_opt\_ProcessConfigfile()}
+call. (The format of a config file is described below.) The
+application may process any number of config files -- for instance,
+there may be a master configuration installed in a system directory,
+and a personalized configuration in a user's home directory.
+
+The order of the different \ccode{Process*()} calls defines the
+precedence of who overrides who. For example, in the following code
+fragment:
+
+\begin{cchunk}
+   ESL_GETOPTS *g;        /* a created, initialized getopts config  */
+   FILE *masterfp;        /* a master config file, open for reading */
+   FILE *userfp;          /* a user's config file, open for reading */
+
+   esl_opt_ProcessConfigfile(g, "/usr/share/myapp/master.cfg", masterfp);
+   esl_opt_ProcessConfigfile(g, "~/.myapp.cfg",                userfp);
+   esl_opt_ProcessEnvironment(g);
+   esl_opt_ProcessCmdline(g, argc, argv);
+\end{cchunk}
+
+the precedence is defined as: defaults, master config file, local
+config file, environment, command line arguments. 
+
+
+\subsection{Configuring an application that uses getopts}
+
+(This section might usefully by cut and pasted into the documentation
+for a specific application, with modifications as appropriate.)
+
+   \subsubsection{Command line option syntax}
+
+Command line syntax is essentially identical to the syntax used by GNU
+programs. Options must precede the mandatory arguments.
+
+Options are either short or long. Short options are a single character
+preceded by a single \ccode{-}; for example, \ccode{-a}. Long options
+are preceded by two dashes, and can have any wordlength; for example,
+\ccode{--option1}.
+
+If a short option takes an argument, the argument may either be
+attached (immediately follows the option character) or unattached (a
+space between the optchar and the argument. For example, \ccode{-n5}
+and \ccode{-n 5} both specify an argument \ccode{5} to option
+\ccode{-n}.
+
+Short options can be concatenated into a string of characters;
+\ccode{-abc} is equivalent to \ccode{-a -b -c}. (Concatenation may
+only be used on the command line, not in configuration files or in
+fields of the \ccode{ESL\_OPTIONS} structure array.) Only the last
+option in such a string can take an argument, and the other options in
+the optstring must be simple on/off booleans. For example, if
+\ccode{-a} and \ccode{-b} are boolean switches, and \ccode{-W} takes a
+\ccode{<string>} argument, either \ccode{-abW foo} or \ccode{-abWfoo}
+is correct, but \ccode{-aWb foo} is not.
+
+For a long option that takes an argument, the argument can be provided
+either by \ccode{--foo arg} or \ccode{--foo=arg}.
+
+Long options may be abbreviated, if the abbreviation is unambiguous;
+for instance, \ccode{--foo} or \ccode{--foob} suffice to active an
+option \ccode{--foobar}. (Like concatenation of short options,
+abbreviation of long options is a shorthand that may only be used on
+the command line.)
+
+Multi-word arguments may be quoted: for example, \ccode{--hostname "my
+host"} or \ccode{-s="my string"}.
+
+Nonnumeric arguments may not start with '-' unless you use an
+argument-attached syntax: \ccode{-W-myarg} and \ccode{--foo=-myarg}
+are accepted, but \ccode{-W myarg} or \ccode{--foo -myarg} will result
+in an error message. This is so if you forget a required argument on
+the command line, we don't silently parse the following option as that
+argument. Numeric arguments aren't checked this way, but forgotten
+numeric argument errors would still usually be caught in typechecking
+(if \ccode{-n} takes an integer argument, \ccode{-n -a} would be an
+invalid argument error); stylistically, we want \ccode{-n -1} and
+\ccode{--param -1} to be a valid way of passing negative-valued
+arguments.  However, this does mean that some forgotten numeric
+argument cases will be undetectable by Easel: in the case where
+\ccode{-n} takes an integer argument, \ccode{-1} is a valid option,
+and the user types \ccode{-n -1}, the \ccode{-1} is parsed as
+\ccode{-n}'s option.
+
+   \subsubsection{Configuration file format}
+
+Each line of a configuration file contains an option and an argument
+(if the option takes an argument). Blank lines are ignored.  Anything
+following a \ccode{\#} character on a line is a comment and is
+ignored. The syntax of options and arguments is stricter than on
+command lines.  Concatenation of short options is not allowed,
+abbreviation of long options is not allowed, and arguments must always
+be separated from options by whitespace (not by \ccode{=}). For
+example:
+
+\begin{cchunk}
+   # Customized configuration file for my application.
+   #
+   -a                        # Turn -a on.
+   -b                        # Turn -b on.
+   -W      arg               # Set -W to "arg"
+   --multi "one two three"   # Multiword args can be quoted.
+\end{cchunk}
+
+
+
diff --git a/esl_gev.c b/esl_gev.c
new file mode 100644
index 0000000..ce9bb5a
--- /dev/null
+++ b/esl_gev.c
@@ -0,0 +1,996 @@
+/* Statistical routines for generalized extreme value (GEV) distributions.
+ *
+ * Contents:
+ *    1. Evaluating densities and distributions
+ *    2. Generic API routines: for general interface w/ histogram module
+ *    3. Dumping plots to files
+ *    4. Sampling (requires augmentation w/ random module)
+ *    5. ML fitting to complete or censored data
+ *    6. Stats driver
+ *    7. Example
+ *    8. Copyright and license information
+ *    
+ * Xref:
+ *    STL9/118, 2005/0712-easel-gev-impl. Verified against evd package in R.
+ *    
+ * To-do:
+ *    - Fit*() functions should return eslEINVAL on n=0, eslENORESULT
+ *      on failure due to small n. Compare esl_gumbel. xref J12/93.
+ *      SRE, Wed Nov 27 11:18:07 2013
+ *
+ *****************************************************************
+ * GEV distribution 
+ *     G(x) = exp{ -[1 + \alpha \lambda(x - \mu)]^{-1/\alpha} }
+ * where:
+ *    \mu     = location parameter
+ *    \lambda = scale parameter   (\lambda = 1/\sigma, in [Coles01] notation)
+ *    \alpha  = shape parameter   (\alpha  = \xi, in [Coles01] notation) 
+ * 
+ * lim_{\alpha -> 0} is a type I EVD (Gumbel)
+ * \alpha > 0  is a Type II  EVD (Frechet)
+ * \alpha < 0  is a Type III EVD (Weibull)
+ * 
+ * Reference: 
+ *   [Coles01] 
+ *   S. Coles, An Introduction to Statistical Modeling of Extreme Values, 
+ *   Springer, 2001.
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <float.h>
+
+#include "easel.h"
+#include "esl_stats.h"
+#include "esl_gev.h"
+
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#ifdef eslAUGMENT_MINIMIZER
+#include "esl_minimizer.h"
+#endif
+
+/****************************************************************************
+ * 1. Evaluating densities and distributions
+ ****************************************************************************/ 
+
+/* Function:  esl_gev_pdf()
+ *
+ * Purpose:   Calculates the probability density function for the 
+ *            generalized extreme value distribution, $P(X=x)$, given
+ *            quantile <x> and GEV location, scale, shape parameters 
+ *            <mu>, <lambda>, <alpha>.
+ */
+double
+esl_gev_pdf(double x, double mu, double lambda, double alpha)
+{
+  double y     = lambda * (x-mu);
+  double ya1   = 1. + alpha * y;
+  double lya1;  
+
+  /* Special case: if alpha is tiny, approximate by a Gumbel */
+  if (fabs(y*alpha) < 1e-12) return (lambda * exp(-y - exp(-y)));
+
+  /* Else, use GEV; but use log/exp to avoid a pow() call,
+   * as that's almost 2x faster (on my machine anyway).
+   */
+  if (ya1 <= 0) return 0.;
+  lya1 = log(ya1);
+  return (lambda * exp(-(1.+ 1./alpha)*lya1 - exp(-lya1/alpha)));
+}
+
+/* Function:  esl_gev_logpdf()
+ *
+ * Purpose:   Calculates the log probability density function for the
+ *            generalized extreme value distribution, $\log P(X=x)$, 
+ *            given quantile <x> and GEV location, scale, shape
+ *            parameters <mu>, <lambda>, <alpha>.
+ */
+double
+esl_gev_logpdf(double x, double mu, double lambda, double alpha)
+{
+  double y          = lambda *(x-mu);
+  double ya1        = 1. + alpha*y;
+  double lya1;
+
+  /* Special case: if alpha is tiny, approx by a Gumbel */
+  if (fabs(y*alpha) < 1e-12) return ((log(lambda) - y) - exp(-y));
+
+  /* It's important not to return NaN for this domain error;
+   * minimizer relies on being able to compare logL's for any parameter,
+   * and you can't compare NaN to anything.
+   */
+  if (ya1 <= 0) return -eslINFINITY;
+
+  lya1 = log(ya1);
+  return ( (log(lambda) - (1.+1./alpha)*lya1) - exp(-lya1/alpha));
+}
+
+
+/* Function:  esl_gev_cdf()
+ *
+ * Purpose:   Calculates the cumulative distribution function for the
+ *            generalized extreme value distribution, $P(X \leq x)$, 
+ *            given quantile <x> and GEV location, scale, shape
+ *            parameters <mu>, <lambda>, <alpha>.
+ */
+double
+esl_gev_cdf(double x, double mu, double lambda, double alpha)
+{
+  double y          = lambda *(x-mu);
+  double ya1        = 1. + alpha*y;
+  double lya1;
+
+  /* Special case: if alpha is tiny, approx by a Gumbel */
+  if (fabs(y*alpha) < 1e-12) return (exp(-exp(-y)));
+
+  if (ya1 <= 0) {
+    if (x < mu) return 0.0; /* the frechet case */
+    else        return 1.0; /* the weibull case */
+  }
+  lya1 = log(ya1);
+  return (exp(-exp(-lya1/alpha)));
+}
+
+
+
+/* Function:  esl_gev_logcdf()
+ *
+ * Purpose:   Calculates the log of the cumulative distribution function for a
+ *            generalized extreme value distribution, $\log P(X \leq x)$, 
+ *            given quantile <x> and GEV location, scale, shape
+ *            parameters <mu>, <lambda>, <alpha>.
+ */
+double
+esl_gev_logcdf(double x, double mu, double lambda, double alpha)
+{
+  double y          = lambda *(x-mu);
+  double ya1        = 1. + alpha*y;
+  double lya1;
+
+  /* Special case: if alpha is tiny, approx by a Gumbel */
+  if (fabs(y*alpha) < 1e-12) return (-exp(-y));
+
+  if (ya1 <= 0) {
+    if (x < mu) return -eslINFINITY;    /* Frechet  */
+    else        return 0.0;     	/* Weibull  */
+  }
+
+  lya1 = log(ya1);
+  return (-exp(-lya1/alpha));
+}
+
+
+/* Function:  esl_gev_surv()
+ *
+ * Purpose:   Calculates the survivor function, $P(X>x)$ (that is, 1-cdf),
+ *            the right tail's probability mass,  given quantile <x> and
+ *            GEV location, scale, shape parameters <mu>, <lambda>, <alpha>.
+ */
+double
+esl_gev_surv(double x, double mu, double lambda, double alpha)
+{
+   double y          = lambda *(x-mu);
+   double ya1        = 1. + alpha*y;
+   double lya1;
+
+   /* Special case: for tiny alpha, use Gumbel (xref esl_gumbel.c) */
+   if (fabs(y*alpha) < 1e-12) 
+     return ((y > -0.5*log(DBL_EPSILON)) ? exp(-y) : (1 - exp(-exp(-y))));
+   
+   if (ya1 <= 0) {
+     if (x < mu) return 1.0;	/* the frechet case */
+     else        return 0.0;	/* the weibull case */
+   }
+   lya1 = log(ya1)/alpha;
+   return ((lya1 > -0.5*log(DBL_EPSILON)) ? exp(-lya1) : (1 - exp(-exp(-lya1))));
+}
+
+
+/* Function:  esl_gev_logsurv()
+ *
+ * Purpose:   Calculates the log survivor function $\log P(X>x)$ for a 
+ *            generalized extreme value distribution (that is, 
+ *            $\log (1 - \mbox{cdf})$, the log of the right tail's probability
+ *            mass), given quantile <x> and GEV location, scale, shape
+ *            parameters <mu>, <lambda>, <alpha>.
+ */
+double
+esl_gev_logsurv(double x, double mu, double lambda, double alpha)
+{
+   double y          = lambda *(x-mu);
+   double ya1        = 1. + alpha*y;
+   double lya1;
+
+   /* Special case: for tiny alpha, use Gumbel (xref esl_gumbel.c) */
+   if (fabs(y*alpha) < 1e-12) 
+     {
+       if      (y > -0.5 * log(DBL_EPSILON)) return (-y);
+       else if (y < -2.9)                    return (-exp(-exp(-y)));
+       else                                  return (log(1-exp(-exp(-y))));
+     }
+   
+   /* See esl_gumbel.c for analysis of the crossovers in
+    * the three cases (small, large, and ok lya1)
+    */
+   if (ya1 <= 0) {
+     if (x < mu) return 1.0;        	/* Frechet case */
+     else        return -eslINFINITY;   /* Weibull case */
+   }
+
+   lya1 = log(ya1)/alpha;
+   if      (lya1 > -0.5 * log(DBL_EPSILON)) return (-lya1);
+   else if (lya1 < -2.9)                    return (-exp(-exp(-lya1)));
+   else                                     return (log(1-exp(-exp(-lya1))));
+}
+
+/* Function:  esl_gev_invcdf()
+ *
+ * Purpose:   Calculates the inverse CDF of the GEV: given a probability
+ *            <p> ($0 < p < 1$), returns the quantile <x> which would
+ *            give <p> as its CDF, for a generalized extreme value 
+ *            distribution with parameters <mu>, <lambda>, and <alpha>.
+ */
+double
+esl_gev_invcdf(double p, double mu, double lambda, double alpha)
+{
+  /* failover to Gumbel sample, for tiny alpha */
+  if (fabs(alpha) < 1e-12) return (mu - log(-1. * log(p)) / lambda);
+
+  return mu + (exp(-alpha*log(-log(p))) - 1.) / (alpha * lambda) ;
+}
+/*-------------------- end densities & distributions ------------------------*/
+
+
+
+/*****************************************************************
+ * 2. Generic API routines: for general interface w/ histogram module
+ *****************************************************************/ 
+
+/* Function:  esl_gev_generic_pdf()
+ *
+ * Purpose:   Generic-API version of PDF.
+ */
+double
+esl_gev_generic_pdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_gev_pdf(x, p[0], p[1], p[2]);
+}
+
+/* Function:  esl_gev_generic_cdf()
+ *
+ * Purpose:   Generic-API version of CDF.
+ */
+double
+esl_gev_generic_cdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_gev_cdf(x, p[0], p[1], p[2]);
+}
+
+/* Function:  esl_gev_generic_surv()
+ *
+ * Purpose:   Generic-API version of survival function.
+ */
+double
+esl_gev_generic_surv(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_gev_surv(x, p[0], p[1], p[2]);
+}
+
+/* Function:  esl_gev_generic_invcdf()
+ *
+ * Purpose:   Generic-API version of inverse CDF.
+ */
+double
+esl_gev_generic_invcdf(double p, void *params)
+{
+  double *v = (double *) params;
+  return esl_gev_invcdf(p, v[0], v[1], v[2]);
+}
+/*------------------------- end of generic API --------------------------*/
+
+
+
+/****************************************************************************
+ * 3. Dumping plots to files
+ ****************************************************************************/ 
+
+/* Function:  esl_gev_Plot()
+ *
+ * Purpose:   Plot some GEV function <func> (for instance,
+ *            <esl_gev_pdf()>) for parameters <mu> and <lambda>, for
+ *            a range of quantiles x from <xmin> to <xmax> in steps of <xstep>;
+ *            output to an open stream <fp> in xmgrace XY input format.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error, such as filled disk.
+ */
+int
+esl_gev_Plot(FILE *fp, double mu, double lambda, double alpha,
+	     double (*func)(double x, double mu, double lambda, double alpha), 
+	     double xmin, double xmax, double xstep)
+{
+  double x;
+  for (x = xmin; x <= xmax; x += xstep)
+    if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda, alpha)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gev plot write failed");
+  if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gev plot write failed");
+  return eslOK;
+}
+/*-------------------- end plot dumping routines ---------------------------*/
+
+
+
+
+/****************************************************************************
+ * 4. Sampling (requires augmentation w/ random module)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_RANDOM
+/* Function:  esl_gev_Sample()
+ *
+ * Purpose:   Sample a GEV-distributed random variate,
+ *            by the transformation method.
+ */
+double
+esl_gev_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double alpha)
+{
+  double p;
+  p = esl_rnd_UniformPositive(r); 
+  return esl_gev_invcdf(p, mu, lambda, alpha);
+} 
+#endif /*eslAUGMENT_RANDOM*/
+/*--------------------------- end sampling ---------------------------------*/
+
+
+
+
+/****************************************************************************
+ * 5. ML fitting to complete or censored data
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_MINIMIZER
+/* Easel's conjugate gradient descent code allows a single void ptr to
+ * point to any necessary fixed data, so we put everything into one
+ * structure:
+ */
+struct gev_data {
+  double *x;	        /* data: n observed samples    */
+  int     n;		/* number of observed samples  */
+
+  int     is_censored;	/* TRUE if a censored, not complete dataset      */
+  double  phi;	        /* censoring/truncation threshold: obs x_i > phi */
+  int     z;	        /* # of censored samples                         */
+};
+
+/* gev_func():
+ * Returns the neg log likelihood of a complete or censored GEV data sample;
+ * in the API of the conjugate gradient descent optimizer in esl_minimizer.
+ */
+static double
+gev_func(double *p, int nparam, void *dptr)
+{
+  double mu, w, lambda, alpha;
+  struct gev_data *data;
+  double logL;
+  int    i; 
+    
+  /* Unpack what the optimizer gave us.
+   */
+  mu     = p[0];
+  w      = p[1];   /* w is a c.o.v. to allow unconstrained opt of lambda>0 */
+  lambda = exp(w);
+  alpha  = p[2];
+  data   = (struct gev_data *) dptr;
+
+  logL = 0.;
+  for (i = 0; i < data->n; i++)
+    logL += esl_gev_logpdf(data->x[i], mu, lambda, alpha);
+
+  if (data->is_censored)
+    logL += data->z * esl_gev_logcdf(data->phi, mu, lambda, alpha);
+
+  return -logL;			/* goal: minimize NLL */
+}
+
+/* gev_gradient()
+ * Computes the gradient of the negative log likelihood of a complete
+ * or censored GEV sample; in the API of the CG optimizer.
+ */
+static void
+gev_gradient(double *p, int nparam, void *dptr, double *dp)
+{
+  double mu, w, lambda, alpha;
+  struct gev_data *data;
+  double *x;
+  int    i; 
+  double dmu, dw, dalpha;
+  double y, ay, ay1, lay1;
+    
+  /* Unpack what the optimizer gave us */
+  mu     = p[0];
+  w      = p[1];   /* w is a c.o.v. to allow unconstrained opt of lambda>0 */
+  lambda = exp(w);
+  alpha  = p[2];
+  data   = (struct gev_data *) dptr;
+  x      = data->x;
+
+  dmu    = 0.;
+  dw     = data->n; /* d/dw, term1 */
+  dalpha = 0.;
+
+  for (i = 0; i < data->n; i++)
+    {
+      y    = lambda * (x[i]-mu);
+      ay   = alpha*y;
+      ay1  = 1+ay;		/* 1+ay=1, for ay < DBL_EPSILON */
+      lay1 = log(ay1);
+      
+      /* d/dmu, term1. (will become 1, for small alpha.) */
+      dmu += (alpha+1) / ay1;
+      
+      /* d/dmu, term2. For tiny ay, use log(1+x) ~ x to simplify. */
+      if (fabs(ay) < 1e-12) dmu -= exp(-y);
+      else                  dmu -= exp(-(1+1/alpha) * lay1);
+
+      /* d/dw, term2. converges to -y, for small alpha. */
+      dw -= y*(1+alpha) / ay1;
+
+      /* d/dw, term2. For tiny ay, use log(1+x) ~ x to simplify. */
+      if (fabs(ay) < 1e-12) dw += y*exp(-y);
+      else                  dw += y*exp(-(1+1/alpha) * lay1);
+
+      /* d/dalpha, term1
+       */
+      dalpha -= (1 + 1/alpha) * y/ay1;
+
+      /* d/dalpha, terms 2,3,4: for tiny ay, simplify.
+       * d/dalpha will go to +/-inf for alpha ~ 0, so watch out.
+       */
+      if (fabs(ay) < 1e-12) {
+	dalpha += y/alpha;
+	dalpha += y*exp(-y) / (alpha*ay1);
+	dalpha -= y*exp(-y) / alpha;
+      } else {
+	dalpha += lay1 / (alpha*alpha);
+	dalpha += y    * exp(-lay1/alpha) / (alpha*ay1);
+	dalpha -= lay1 * exp(-lay1/alpha) / (alpha*alpha);
+      }
+    }
+  dmu *= lambda;
+
+  /* Add the terms that come from the censored data gradient,
+   * if it's a censored dataset.
+   */
+  if (data->is_censored)
+    {
+      y    = lambda * (data->phi - mu);
+      ay   = alpha * y;
+      ay1  = 1 + ay;
+      lay1 = log(ay1);
+
+      if (fabs(ay) < 1e-12) 
+	{	/* special case of small alpha, converging towards Gumbel */
+	  dmu    -= data->z * lambda * exp(-y) / ay1;
+	  dw     += data->z * y      * exp(-y) / ay1;
+	  dalpha -= data->z * exp(-y) * y/alpha * ay/ay1;
+	}
+      else 
+	{	/* normal case */
+	  dmu    -= data->z * lambda * exp(-lay1/alpha) / ay1;
+	  dw     += data->z * y      * exp(-lay1/alpha) / ay1;
+	  dalpha -= data->z * exp(-lay1/alpha) *
+	    (lay1/(alpha*alpha) - y/(alpha*ay1));
+	}
+    }
+
+  /* Return the negative gradient, because we're minimizing NLL,
+   * not maximizing LL.
+   */
+  dp[0] = -dmu;
+  dp[1] = -dw;
+  dp[2] = -dalpha;
+  return;
+}
+
+/* fitting_engine()
+ * Fitting code shared by the FitComplete() and FitCensored() API.
+ * 
+ * The fitting_engine(), in turn, is just an adaptor wrapped around
+ * the conjugate gradient descent minimizer.
+ */
+static int
+fitting_engine(struct gev_data *data, 
+	       double *ret_mu, double *ret_lambda, double *ret_alpha)
+{
+  double p[3];			/* parameter vector                  */
+  double u[3];			/* max initial step size vector      */
+  double wrk[12];		/* 4 tmp vectors of length 3         */
+  double mean, variance;
+  double mu, lambda, alpha;	/* initial param guesses             */
+  double tol = 1e-6;		/* convergence criterion for CG      */
+  double fx;			/* f(x) at minimum; currently unused */
+  int    status;
+
+  /* Make an initial guess. 
+   * (very good guess for complete data; merely sufficient for censored)
+   */
+  esl_stats_DMean(data->x, data->n, &mean, &variance);
+  lambda = eslCONST_PI / sqrt(6.*variance);
+  mu     = mean - 0.57722/lambda;
+  alpha  = 0.0001;
+
+  p[0] = mu;
+  p[1] = log(lambda);	/* c.o.v. from lambda to w */
+  p[2] = alpha;
+
+  /* max initial step sizes: keeps bracketing from exploding */
+  u[0] = 1.0;
+  u[1] = fabs(log(0.02));
+  u[2] = 0.02;
+
+  /* pass problem to the optimizer
+   */
+  status = esl_min_ConjugateGradientDescent(p, u, 3, 
+					    &gev_func, 
+					    &gev_gradient,
+					    (void *)data,
+					    tol, wrk, &fx);
+  *ret_mu     = p[0];
+  *ret_lambda = exp(p[1]);
+  *ret_alpha  = p[2];
+  return status;
+}
+
+
+/* Function:  esl_gev_FitComplete()
+ *
+ * Purpose:   Given an array of <n> GEV-distributed samples <x[0]..x[n-1>,
+ *            return maximum likelihood parameters <ret_mu>, 
+ *            <ret_lambda>, and <ret_alpha>.
+ *            
+ *            Uses a conjugate gradient descent algorithm that
+ *            can be computationally intensive. A typical problem
+ *            involving 10,000-100,000 points may take a second 
+ *            to solve.
+ *            
+ * Note:      Just a wrapper: sets up the problem for fitting_engine().            
+ *
+ * Args:      x          - complete GEV-distributed data [0..n-1]
+ *            n          - number of samples in <x>
+ *            ret_mu     - RETURN: maximum likelihood estimate of mu         
+ *            ret_lambda - RETURN: maximum likelihood estimate of lambda
+ *            ret_alpha  - RETURN: maximum likelihood estimate of alpha
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslENOHALT> if the fit doesn't converge.
+ *
+ * Xref:      STL9/118-120.
+ */
+int
+esl_gev_FitComplete(double *x, int n, 
+		    double *ret_mu, double *ret_lambda, double *ret_alpha)
+{
+  struct gev_data data;
+
+  data.x           = x;
+  data.n           = n;
+  data.is_censored = FALSE;
+  data.phi         = -DBL_MAX;
+  data.z           = 0;
+
+  return (fitting_engine(&data, ret_mu, ret_lambda, ret_alpha));
+}
+
+/* Function:  esl_gev_FitCensored()
+ *
+ * Purpose:   Given a left-censored array of <n> GEV-distributed samples
+ *            <x[0]..x[n-1>, the number of censored samples <z>, and
+ *            the censoring value <phi> (where all $x_i > \phi$ and
+ *            all $z$ censored samples are $\leq \phi$);
+ *            return maximum likelihood parameters <ret_mu>, 
+ *            <ret_lambda>, and <ret_alpha>.
+ *            
+ * Args:      x          - censored GEV-distributed data [0..n-1], all > phi
+ *            n          - number of samples in <x>
+ *            z          - number of censored samples, all <= phi
+ *            phi        - censoring threshold
+ *            ret_mu     - RETURN: maximum likelihood estimate of mu         
+ *            ret_lambda - RETURN: maximum likelihood estimate of lambda
+ *            ret_alpha  - RETURN: maximum likelihood estimate of alpha
+ *
+ * Note:      Just a wrapper: sets up the problem for fitting_engine().            
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslENOHALT> if the fit doesn't converge.
+ *
+ * Xref:      STL9/133
+ */
+int
+esl_gev_FitCensored(double *x, int n, int z, double phi,
+		    double *ret_mu, double *ret_lambda, double *ret_alpha)
+{
+  struct gev_data data;
+
+  data.x           = x;
+  data.n           = n;
+  data.is_censored = TRUE;
+  data.phi         = phi;
+  data.z           = z;
+
+  return (fitting_engine(&data, ret_mu, ret_lambda, ret_alpha));
+}
+#endif /*eslAUGMENT_MINIMIZER*/
+/*--------------------------- end fitting ----------------------------------*/
+
+
+
+
+
+/****************************************************************************
+ * 6. Stats driver
+ ****************************************************************************/ 
+
+#ifdef eslGEV_STATS
+/* compile: 
+     gcc -g -Wall -I. -o stats -DeslGEV_STATS -DeslAUGMENT_RANDOM\
+       -DeslAUGMENT_MINIMIZER esl_gev.c esl_random.c esl_minimizer.c\
+       esl_vectorops.c easel.c -lm
+ * run:     ./stats <test#>...
+ * e.g. 
+ *          ./stats 1 2 3
+ * would run tests 1, 2, 3.
+ */
+#include <stdio.h>
+#include <math.h>
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_minimizer.h"
+#include "esl_gev.h"
+
+#define MAX_STATS_TESTS 10
+static void stats_sample(FILE *fp);
+static int  stats_fittest(FILE *fp, int ntrials, int n, double mu, 
+			  double lambda, double alpha);
+int
+main(int argc, char **argv)
+{
+  FILE *fp;
+  double  mu        = 0.0;
+  double  lambda    = 1.0;  
+  double  xmin      = -20.;
+  double  xmax      = 60.;
+  double  xstep     = 0.1; 
+  double  x,z;
+  int     do_test[MAX_STATS_TESTS+1];
+  int     i;
+
+  for (i = 0; i <= MAX_STATS_TESTS; i++) do_test[i] = 0;
+  for (i = 1; i < argc; i++)
+    do_test[atoi(argv[i])] = 1;
+
+  /* stats.1: xmgrace xy file w/ densities for Gumbel, Frechet, Weibull */
+  if (do_test[1]) {
+    if ((fp = fopen("stats.1", "w")) == NULL) abort();
+    for (x = xmin; x <= xmax; x+= xstep)
+      fprintf(fp, "%.1f  %9.7f\n", x, esl_gev_pdf(x, mu, lambda, 0.0));
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep)
+      fprintf(fp, "%.1f  %9.7f\n", x, esl_gev_pdf(x, mu, lambda, 0.1));
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep)
+      fprintf(fp, "%.1f  %9.7f\n", x, esl_gev_pdf(x, mu, lambda, -0.1));
+    fprintf(fp, "&\n");
+    fclose(fp);
+  }
+
+  /* stats.2: xmgrace xy file w/ log densities for Gumbel, Frechet, Weibull */
+  if (do_test[2]) {
+    if ((fp = fopen("stats.2", "w")) == NULL) abort();
+    for (x = xmin; x <= xmax; x+= xstep) {
+      z = esl_gev_logpdf(x, mu, lambda, 0.0);
+      if (finite(z)) fprintf(fp, "%.1f  %9.7f\n", x, z);
+    }
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep) {
+      z = esl_gev_logpdf(x, mu, lambda, 0.1);
+      if (finite(z)) fprintf(fp, "%.1f  %9.7f\n", x, z);
+    }
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep) {
+      z = esl_gev_logpdf(x, mu, lambda, -0.1);
+      if (finite(z)) fprintf(fp, "%.1f  %9.7f\n", x, z);
+    }
+    fprintf(fp, "&\n");
+    fclose(fp);
+  }
+
+  /* stats.3: xmgrace xy file w/ CDF for Gumbel, Frechet, Weibull */
+  if (do_test[3]) {
+    if ((fp = fopen("stats.3", "w")) == NULL) abort();
+    for (x = xmin; x <= xmax; x+= xstep)
+      fprintf(fp, "%.1f  %9.7f\n", x, esl_gev_cdf(x, mu, lambda, 0.0));
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep)
+      fprintf(fp, "%.1f  %9.7f\n", x, esl_gev_cdf(x, mu, lambda, 0.6));
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep)
+      fprintf(fp, "%.1f  %9.7f\n", x, esl_gev_cdf(x, mu, lambda, -0.6));
+    fprintf(fp, "&\n");
+    fclose(fp);
+  }
+
+  /* stats.4: xmgrace xy file w/ logCDF for Gumbel, Frechet, Weibull */
+  if (do_test[4]) {
+    if ((fp = fopen("stats.4", "w")) == NULL) abort();
+    for (x = xmin; x <= xmax; x+= xstep) {
+      z = esl_gev_logcdf(x, mu, lambda, 0.0);
+      if (finite(z)) fprintf(fp, "%.1f  %9.7f\n", x, z);
+    }
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep) {
+      z = esl_gev_logcdf(x, mu, lambda, 0.2);
+      if (finite(z)) fprintf(fp, "%.1f  %9.7f\n", x, z);
+    }
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep) {
+      z = esl_gev_logcdf(x, mu, lambda, -0.2);
+      if (finite(z)) fprintf(fp, "%.1f  %9.7f\n", x, z);
+    }
+    fprintf(fp, "&\n");
+    fclose(fp);
+  }
+
+ /* stats.5: xmgrace xy file w/ surv for Gumbel, Frechet, Weibull */
+  if (do_test[5]) {
+    if ((fp = fopen("stats.5", "w")) == NULL) abort();
+    for (x = xmin; x <= xmax; x+= xstep)
+      fprintf(fp, "%.1f  %9.7f\n", x, esl_gev_surv(x, mu, lambda, 0.0));
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep)
+      fprintf(fp, "%.1f  %9.7f\n", x, esl_gev_surv(x, mu, lambda, 0.6));
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep)
+      fprintf(fp, "%.1f  %9.7f\n", x, esl_gev_surv(x, mu, lambda, -0.6));
+    fprintf(fp, "&\n");
+    fclose(fp);
+  }
+
+ /* stats.6: xmgrace xy file w/ logsurv for Gumbel, Frechet, Weibull */
+  if (do_test[6]) {
+    if ((fp = fopen("stats.6", "w")) == NULL) abort();
+    for (x = xmin; x <= xmax; x+= xstep) {
+      z = esl_gev_logsurv(x, mu, lambda, 0.0);
+      if (finite(z)) fprintf(fp, "%.1f  %9.7f\n", x, z);
+    }
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep) {
+      z = esl_gev_logsurv(x, mu, lambda, 0.2);
+      if (finite(z)) fprintf(fp, "%.1f  %9.7f\n", x, z);
+    }
+    fprintf(fp, "&\n");
+    for (x = xmin; x <= xmax; x+= xstep) {
+      z = esl_gev_logsurv(x, mu, lambda, -0.2);
+      if (finite(z)) fprintf(fp, "%.1f  %9.7f\n", x, z);
+    }
+    fprintf(fp, "&\n");
+    fclose(fp);
+  }
+
+  /* stats.7. R input file of 10,000 random GEV samples.
+   */
+  if (do_test[7]) {
+    if ((fp = fopen("stats.7", "w")) == NULL) abort();  
+    stats_sample(fp);
+    fclose(fp);
+  }
+
+  /* stats.8. Test 500 fits of the Frechet.
+   */
+  if (do_test[8]) {
+    if ((fp = fopen("stats.8", "w")) == NULL) abort();  
+    stats_fittest(fp, 500, 10000, mu, lambda, 0.2);
+    fclose(fp);
+  }
+
+  /* stats.9. Test 500 fits of the near-Gumbel
+   */
+  if (do_test[9]) {
+    if ((fp = fopen("stats.9", "w")) == NULL) abort();  
+    stats_fittest(fp, 500, 10000, mu, lambda, 0.00001);
+    fclose(fp);
+  }
+
+  /* stats.10. Test 500 fits of the Weibull
+   */
+  if (do_test[10]) {
+    if ((fp = fopen("stats.10", "w")) == NULL) abort();  
+    stats_fittest(fp, 500, 10000, mu, lambda, -0.2);
+    fclose(fp);
+  }
+  return 0;
+}
+
+/* stats_sample()
+ * Creates an R input table containing 10,000 random samples
+ * each in columns labeled "gumbel", "frechet", "weibull".
+ * To process in R (remember that R uses 1/lambda for scale):
+     library(ismev)
+     library(evd)
+     z=read.table("stats.7")
+     x1 <- sort(z$gumbel,  decreasing=T)
+     x2 <- sort(z$frechet, decreasing=T)
+     x3 <- sort(z$weibull, decreasing=T)
+     q1 <- qgumbel(ppoints(10000), -20., 1./0.4)
+     q2 <- qgev(ppoints(10000), -20., 1./0.4, 0.2)
+     q3 <- qgev(ppoints(10000), -20., 1./0.4, -0.2)
+     xax<- seq(-40,40,by=0.1)
+     a1 <- dgumbel(xax, -20, 1/0.4)
+     a2 <- dgev(xax, -20, 1/0.4, 0.2)
+     a3 <- dgev(xax, -20, 1/0.4, -0.2)
+     qqplot(x1,q1); abline(0,1)
+     qqplot(x2,q2); abline(0,1)
+     qqplot(x3,q3); abline(0,1)
+     plot(density(x1,bw=0.2)); lines(xax,a1)
+     plot(density(x2,bw=0.2)); lines(xax,a2)
+     plot(density(x3,bw=0.2)); lines(xax,a3)
+ */
+static void
+stats_sample(FILE *fp)
+{
+  ESL_RANDOMNESS *r;
+  double mu     = -20.;
+  double lambda = 0.4;
+  int    n      = 10000;
+  double a,b,c;
+  int    i;
+
+  r = esl_randomness_Create(42);
+  fprintf(fp, "         gumbel  \t  frechet\t  weibull\n");
+  for (i = 1; i <= n; i++)
+    {
+      a  = esl_gev_Sample(r, mu, lambda, 0.0);
+      b  = esl_gev_Sample(r, mu, lambda, 0.2);
+      c  = esl_gev_Sample(r, mu, lambda, -0.2);
+      fprintf(fp, "%d\t%8.4f\t%8.4f\t%8.4f\n", i, a,b,c);
+    }
+  esl_randomness_Destroy(r);
+}
+
+/* stats_fittest()
+ * Samples <n> numbers from a GEV w/ parameters <mu>, <lambda>, <alpha>;
+ * then fits to a GEV and print info about how good the fit is.
+ * 
+ * Repeat this <ntrials> times. 
+ * 
+ * For each trial, outputs a line to <fp>:
+ *   <trial> <nll> <est_nll> <est_mu> <mu %error> <est_lambda> <%err>\
+ *     <est_alpha> <%err> <est E-val at parametric E=1>
+ * 
+ * Each sampled set is done with the random number generator seeded to
+ * the trial number. This should make each set reproducible and
+ * identical to the sets used to test R's fitting.
+ * 
+ * xref STL9/191; xref 2005/0718-weibull-debugging
+ */
+static int
+stats_fittest(FILE *fp, int ntrials, int n, double mu, double lambda, double alpha)
+{
+  ESL_RANDOMNESS *r = NULL;
+  double *x         = NULL;
+  int     i;
+  int     trial;
+  double  est_mu, est_lambda, est_alpha;
+  double  z;
+  double  nll, est_nll;
+  int     status;
+
+  ESL_ALLOC(x, sizeof(double) * n);
+  for (trial = 1; trial <= ntrials; trial++)
+    {
+      r = esl_randomness_Create(trial);
+      nll = 0.;
+      for (i = 0; i < n; i++) 
+	{
+	  x[i] = esl_gev_Sample(r, mu, lambda, alpha);
+	  nll -= esl_gev_logpdf(x[i], mu, lambda, alpha);
+	}
+      esl_randomness_Destroy(r);
+
+      esl_gev_FitComplete(x, n, &est_mu, &est_lambda, &est_alpha);      
+
+      est_nll = 0.;
+      for (i = 0; i < n; i++) 
+	est_nll -= esl_gev_logpdf(x[i], est_mu, est_lambda, est_alpha);
+
+      z = mu + (exp(-alpha*log(1/(double)n)) - 1 ) / (alpha*lambda);/* x at E=1*/
+      z = (double) n * esl_gev_surv(z, est_mu, est_lambda, est_alpha); /* E at x */
+
+      printf("%4d  %10.2f %10.2f  %8.3f  %8.3f %8.5f %8.3f %8.5f %8.3f %6.4f\n", 
+	     trial, nll, est_nll,
+	     est_mu,      100* fabs((est_mu-mu)/mu),
+	     est_lambda,  100* fabs((est_lambda-lambda)/lambda),
+	     est_alpha,   100* fabs((est_alpha-alpha)/alpha),
+	     z);
+    }
+  free(x);
+  return eslOK;
+
+ ERROR:
+  return status; 
+}
+#endif /*eslGEV_STATS*/
+
+
+/*****************************************************************
+ * 7. Example
+ *****************************************************************/
+#ifdef eslGEV_EXAMPLE
+/*::cexcerpt::gev_example::begin::*/
+/* compile: 
+     gcc -g -Wall -I. -o example -DeslGEV_EXAMPLE -DeslAUGMENT_RANDOM\
+       -DeslAUGMENT_MINIMIZER esl_gev.c esl_random.c esl_minimizer.c\
+       esl_vectorops.c easel.c -lm
+ * run:     ./example
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_minimizer.h"
+#include "esl_gev.h"
+
+int
+main(int argc, char **argv)
+{
+  double  est_mu, est_lambda, est_alpha;
+  double  z;
+  int     i;
+  int     n         = 10000; 	   /* simulate 10,000 samples */
+  double  mu        = -20.0;       /* with mu = -20    */ 
+  double  lambda    = 0.4;         /* and lambda = 0.4 */
+  double  alpha     = 0.1;	   /* and alpha = 0.1  */
+  double  min       =  9999.;
+  double  max       = -9999.;
+  double *x         = malloc(sizeof(double) * n);
+  ESL_RANDOMNESS *r = esl_randomness_Create(0);;
+
+  for (i = 0; i < n; i++)	/* generate the 10,000 samples */
+    { 
+      x[i] = esl_gev_Sample(r, mu, lambda, alpha);
+      if (x[i] < min) min = x[i];
+      if (x[i] > max) max = x[i];
+    }
+
+  z = esl_gev_surv(max, mu, lambda, alpha);       /* right tail p~1e-4 >= max */
+  printf("max = %6.1f  P(>max)  = %g   E=%6.3f\n", max, z, z*(double)n);
+  z = esl_gev_cdf(min, mu, lambda, alpha);        /* left tail p~1e-4 < min */
+  printf("min = %6.1f  P(<=min) = %g   E=%6.3f\n", min, z, z*(double)n);
+
+  esl_gev_FitComplete(x, n, &est_mu, &est_lambda, &est_alpha);
+ 
+  printf("Parametric mu     = %6.1f.  Estimated mu     = %6.2f.  Difference = %.1f%%.\n",
+	 mu,     est_mu,     100. * fabs((est_mu - mu) / mu));
+  printf("Parametric lambda = %6.2f.  Estimated lambda = %6.2f.  Difference = %.1f%%.\n",
+	 lambda, est_lambda, 100. * fabs((est_lambda - lambda) /lambda));
+  printf("Parametric alpha  = %6.4f.  Estimated alpha  = %6.4f.  Difference = %.1f%%.\n",
+	 alpha,  est_alpha,  100. * fabs((est_alpha - alpha) /alpha));
+
+  free(x);
+  esl_randomness_Destroy(r);
+  return 0;
+}
+/*::cexcerpt::gev_example::end::*/
+#endif /*eslGEV_EXAMPLE*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_gev.h b/esl_gev.h
new file mode 100644
index 0000000..da19902
--- /dev/null
+++ b/esl_gev.h
@@ -0,0 +1,50 @@
+/* esl_gev.h
+ * Generalized extreme value (GEV) distributions.
+ * 
+ * SRE, Tue Jul 12 09:15:56 2005
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslGEV_INCLUDED
+#define eslGEV_INCLUDED
+
+#ifdef eslAUGMENT_RANDOM
+#include <esl_random.h>
+#endif
+
+extern double esl_gev_pdf    (double x, double mu, double lambda, double alpha);
+extern double esl_gev_logpdf (double x, double mu, double lambda, double alpha);
+extern double esl_gev_cdf    (double x, double mu, double lambda, double alpha);
+extern double esl_gev_logcdf (double x, double mu, double lambda, double alpha);
+extern double esl_gev_surv   (double x, double mu, double lambda, double alpha);
+extern double esl_gev_logsurv(double x, double mu, double lambda, double alpha);
+extern double esl_gev_invcdf (double p, double mu, double lambda, double alpha);
+
+extern double esl_gev_generic_pdf   (double x, void *params);
+extern double esl_gev_generic_cdf   (double x, void *params);
+extern double esl_gev_generic_surv  (double x, void *params);
+extern double esl_gev_generic_invcdf(double p, void *params);
+
+extern int    esl_gev_Plot(FILE *fp, double mu, double lambda, double alpha,
+			   double (*func)(double x, double mu, double lambda, double alpha), 
+			   double xmin, double xmax, double xstep);
+
+
+#ifdef eslAUGMENT_RANDOM
+extern double esl_gev_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double alpha);
+#endif
+
+#ifdef eslAUGMENT_MINIMIZER
+extern int esl_gev_FitComplete(double *x, int n, 
+			       double *ret_mu, double *ret_lambda, 
+			       double *ret_alpha);
+extern int esl_gev_FitCensored(double *x, int n, int z, double phi,
+			       double *ret_mu, double *ret_lambda, 
+			       double *ret_alpha);
+#endif /*eslAUGMENT_MINIMIZER*/
+
+
+#endif /*eslGEV_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_gev.tex b/esl_gev.tex
new file mode 100644
index 0000000..f64c8fe
--- /dev/null
+++ b/esl_gev.tex
@@ -0,0 +1,205 @@
+
+The generalized extreme value distribution (GEV) includes all three
+types of extreme value distributions: Type I (Gumbel), type II
+(Fr\'{e}chet), and type III (Weibull). Empirically, the scores of some
+sequence alignment algorithms appear to follow GEV distributions.  The
+\eslmod{gev} module is used in estimating the statistical significance
+of such scores.
+
+Most local sequence alignment scores follow the Gumbel distribution.
+Easel's \eslmod{gumbel} module applies specifically to the Gumbel. The
+\eslmod{gev} module is used for Type II or III extreme value
+distributions, or for determining which of the three types of
+distribution that a dataset best fits.
+
+\subsection{The gev API}
+
+The \eslmod{gev} API consists of the following functions:
+
+\vspace{0.5em}
+\begin{center}
+\begin{tabular}{ll}\hline
+    \multicolumn{2}{c}{\textbf{evaluating densities and distributions:}}\\
+\ccode{esl\_gev\_pdf()}     & Returns the probability density, $P(S=x)$.\\
+\ccode{esl\_gev\_logpdf()}  & Returns the log of the pdf, $\log P(S=x)$.\\
+\ccode{esl\_gev\_cdf()}     & Returns the cumulative probability distribution, $P(S \leq x)$.\\
+\ccode{esl\_gev\_logcdf()}  & Returns the log of the cdf, $\log P(S \leq x)$.\\
+\ccode{esl\_gev\_surv()}    & Returns right tail mass, 1-cdf, $P(S > x)$\\
+\ccode{esl\_gev\_logsurv()} & Returns log of 1-cdf, $\log P(S > x)$.\\
+    \multicolumn{2}{c}{\textbf{sampling:}}\\
+\ccode{esl\_gev\_Sample()}  & Returns a GEV-distributed random sample.\\
+    \multicolumn{2}{c}{\textbf{maximum likelihood parameter fitting:}}\\
+\ccode{esl\_gev\_FitComplete()} & Estimates GEV parameters from complete data.\\
+\end{tabular}
+\end{center}
+\vspace{0.5em}
+
+The Gumbel distribution depends on three parameters, $\mu$, $\lambda$,
+and $\alpha$. When these parameters are known, the statistical
+significance (P-value) of a single score $x$ is $P(S>x)$, obtained by
+a call to \ccode{esl\_gev\_surv()}.  The E-value for obtaining that
+score or better in searching a database of $N$ sequences is just
+$NP(S>x)$.
+
+When the parameters are unknown, they can be estimated from scores
+obtained from comparisons of simulated random data. The
+\ccode{esl\_gev\_FitComplete()} function performs maximum likelihood
+parameter fitting \citep{Coles01}.
+
+\subsubsection{Augmentations: random, minimizer}
+
+The \ccode{esl\_gev\_Sample()} function requires augmenting with the
+\eslmod{random} module.
+
+The \ccode{esl\_gev\_FitComplete()} function requires augmenting with
+the \eslmod{minimizer} module.
+
+\subsection{Example of using the gev API}
+
+Below is a code example that samples 10,000 data points from a
+Fr\'{e}chet distribution with $\mu=-20$, $\lambda=0.4$, $\alpha=0.1$;
+reports the min and max samples, and the probability mass to the left
+of the min and to the right of the max (both of which should be about
+$\frac{1}{10000}$, since we took 10,000 samples); and then fits those
+simulated data to a Gumbel and reports the fitted $\mu$ and $\lambda$:
+
+\input{cexcerpts/gev_example}
+
+\subsection{GEV densities}
+
+The probability density function (pdf) and the cumulative distribution
+function (cdf) of the generalized extreme value distribution are
+\citep{Coles01}:
+
+\begin{eqnarray}
+P(X=x) & = & \lambda \left[ 1 + \alpha \lambda (x - \mu) \right]^{-\frac{\alpha+1}{\alpha}}
+       \exp \left\{ - \left[ 1 + \alpha \lambda (x - \mu)
+       \right]^{-\frac{1}{\alpha}} \right\} 
+\\%
+\label{eqn:gev_density}
+P(X \geq x) & = & \exp \left\{ - \left[ 1 +
+     \alpha\lambda(x-\mu) \right]^{-\frac{1}{\alpha}} \right\} 
+\\%
+\label{eqn:gev_distribution}
+\end{eqnarray}
+
+The parameters $\mu$, $\lambda$, and $\alpha$ are location, scale, and
+shape parameters, respectively, with $-\infty < \mu < \infty$, $0 <
+\lambda < \infty$, and $-\infty < \alpha < \infty$.
+
+The Type II (Fr\'{e}chet) distribution corresponds to $\alpha > 0$,
+and the Type III (Weibull) distribution corresponds to $\alpha < 0$.
+The Type I (Gumbel) distribution arises in the limit $\alpha
+\rightarrow 0$. At values $\alpha \simeq 0$, Easel's GEV functions
+revert to the Gumbel limit case, as opposed to dividing by zero and
+failing.
+
+Technically the GEV is only defined for values of $x$ such that $1 +
+\alpha \lambda (x - \mu) > 0$. However, Easel's functions return
+sensible values outside this domain, such as 0 for nonexistent
+densities.
+
+Generalized extreme value densities for $\mu = 0$ and $\lambda = 1$
+are shown below (left) for three settings of $\alpha$; $\alpha = 0$
+(Gumbel), $\alpha = 0.1$ (Fr\'{e}chet), and $\alpha = -0.1$
+(Weibull). The figure on the right shows the log densities, which more
+clearly show how, relative to the exponential right tail of the
+Gumbel, the Fr\'{e}chet's tail is longer, and the Weibull's tail is
+shorter.
+
+\centerline{
+\begin{minipage}{3in}
+\includegraphics[width=2.8in]{figures/gev_density}
+\end{minipage}
+\begin{minipage}{3in}
+\includegraphics[width=2.8in]{figures/gev_logdensity}
+\end{minipage}
+}
+
+For more details, see the excellent description in \citep{Coles01}.
+Easel's $\{ \mu, \lambda, \alpha \}$ notation differs from the $\{
+\mu, \sigma, \xi \}$ parameterization used by Coles. Use $\lambda =
+\frac{1}{\sigma}$ and $\alpha = \xi$ to translate.
+
+\subsection{Fitting GEV distributions to observed data}
+
+Easel fits GEVs by maximum likelihood estimation by numerically
+optimizing the log likelihood function, using first derivative
+information and conjugate gradient descent.  See the \eslmod{gumbel}
+chapter for a more general introduction to maximum likelihood fitting.
+
+\subsubsection{Maximum likelihood estimation, complete data}
+
+The function \ccode{esl\_gev\_FitComplete()} uses gradient information
+to find parameters that optimize the likelihood function, using the
+conjugate gradient descent code in the \eslmod{minimizer} module.
+
+Given $n$ samples $x_1..x_n$, we want to estimate maximum likelihood
+parameter estimates $\{ \hat{\mu}, \hat{\lambda}, \hat{\alpha} \}$
+that maximize the log likelihood:
+
+\begin{equation}
+\log L(\lambda, \mu, \alpha) = n \log \lambda 
+       - \frac{\alpha+1}{\alpha} 
+           \sum_{i=1}^{n} \log\left[1+ \alpha\lambda(x_i - \mu) \right]
+       - \sum_{i=1}^{n} \left[ 1 + \alpha\lambda (x_i - \mu) \right]^{\frac{1}{\alpha}}
+\label{eqn:gev_logL}
+\end{equation}
+
+The $\left[ 1 + \alpha\lambda (x_i - \mu) \right]^{\frac{1}{\alpha}}$
+term can be rewritten in a more conveniently differentiable form as
+$\exp \left\{ \frac{1}{\alpha} \log \left[ 1 + \alpha\lambda (x_i - \mu)
+\right] \right\}$.
+
+Since the $\lambda$ parameter is constrained to $\lambda > 0$ but the
+numerical optimizer expects unconstrained parameters, we use a change
+of variables $\lambda = e^w$ and optimize an unconstrained value $w$.
+
+The gradient of the log likelihood with respect to $\mu$, $w$, and
+$\alpha$ is:
+
+%% xref: STL9/118-120
+\begin{eqnarray}
+\frac{\partial \log L}{\partial \mu} & = &
+  \sum_{i=1}^n \frac{\lambda (\alpha+1)}{1+\alpha\lambda(x_i-\mu)} 
+ -\sum_{i=1}^n \lambda \exp 
+    \left\{ -\frac{\alpha+1}{\alpha} \log
+          \left[1+\alpha\lambda(x_i-\mu)\right] \right\}
+\\%
+\label{eqn:gev_mupartial}
+\frac{\partial \log L}{\partial w} & = &
+  n - \sum_{i=1}^{n} \frac{\lambda (\alpha+1) (x_i - \mu)} 
+                          {1 + \alpha \lambda (x_i - \mu)}
+  + \sum_{i=1}^n \lambda (x_i - \mu) 
+         \exp \left\{ -\frac{\alpha+1}{\alpha} \log
+          \left[1+\alpha\lambda(x_i-\mu)\right] \right\}
+\\%
+\label{eqn:gev_wpartial}
+\frac{\partial \log L}{\partial \alpha} & = &
+   \sum_{i=1}^n \left\{
+      \begin{array}{l}
+      - \frac{\alpha+1}{\alpha} \frac{\lambda(x_i-\mu)}
+                                  {1 +\alpha\lambda(x_i-\mu)}\\
+      + \frac{1}{\alpha^2} \log \left[ 1 + \alpha\lambda(x_i - \mu) \right]\\
+      + \frac{1}{\alpha} \frac{\lambda(x_i-\mu)}
+                          {1 +\alpha\lambda(x_i-\mu)}
+      e^{-\frac{1}{\alpha} \log\left[ 1 + \alpha\lambda(x_i - \mu) \right]}\\
+     -  \frac{1}{\alpha^2} \log \left[ 1 + \alpha\lambda(x_i - \mu) \right]
+      e^{-\frac{1}{\alpha} \log\left[ 1 + \alpha\lambda(x_i - \mu)
+	 \right]} 
+     \end{array}
+     \right.
+\\%
+\label{eqn:gev_alphapartial}
+\end{eqnarray}
+
+When $|\alpha\lambda(x_i - \mu)|$ approaches $0$, the GEV approximates
+a Gumbel distribution and these equations can be simplified using the
+approximation $\log(1+a) \simeq a$.
+
+
+
+
+
+
+
diff --git a/esl_gumbel.c b/esl_gumbel.c
new file mode 100644
index 0000000..4f37e5e
--- /dev/null
+++ b/esl_gumbel.c
@@ -0,0 +1,1420 @@
+/* Statistical routines for Gumbel (type I extreme value) distributions.
+ * 
+ * Contents:
+ *   1. Routines for evaluating densities and distributions
+ *   2. Generic API routines: for general interface w/ histogram module
+ *   3. Dumping plots to files
+ *   4. Sampling (augmentation: random module)
+ *   5. ML fitting to complete data
+ *   6. ML fitting to censored data  (x_i >= phi; z known)
+ *   7. ML fitting to truncated data (x_i >= phi; z unknown) (augmentation: minimizer)
+ *   8. Stats driver
+ *   9. Unit tests
+ *  10. Test driver
+ *  11. Example
+ *  12. Copyright and license information
+ * 
+ * To-do:
+ *   - ML fitting routines will be prone to over/underfitting 
+ *     problems for scores outside a "normal" range, because
+ *     of exp(-lambda * x) calls. The Lawless ML estimation
+ *     may eventually need to be recast in log space.
+ *     SRE, Mon Aug  6 13:42:09 2007
+ *
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <float.h>
+
+#include "easel.h"
+#include "esl_stats.h"
+#include "esl_vectorops.h"
+#include "esl_gumbel.h"
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#ifdef eslAUGMENT_MINIMIZER
+#include "esl_minimizer.h"
+#endif
+
+/*****************************************************************
+ * 1. Routines for evaluating densities and distributions
+ *****************************************************************/ 
+
+/* Function:  esl_gumbel_pdf()
+ * Synopsis:  Returns the probability density at $x$, $P(S=x)$.
+ *
+ * Purpose:   Calculates the probability density function for the Gumbel,
+ *            $P(X=x)$, given quantile <x> and Gumbel location and
+ *            scale parameters <mu> and <lambda>.
+ *            
+ *            Let $y = \lambda(x-\mu)$; for 64-bit doubles,
+ *            useful dynamic range is about $-6.5 <= y <= 710$.
+ *            Returns 0.0 for smaller $y$, 0.0 for larger $y$.
+ */
+double
+esl_gumbel_pdf(double x, double mu, double lambda)
+{
+  double y;
+  y = lambda * (x - mu);
+  return (lambda * exp(-y - exp(-y)));
+}
+
+
+/* Function:  esl_gumbel_logpdf()
+ * Synopsis:  Returns the log of the pdf at $x$, $\log P(S=x)$.
+ *
+ * Purpose:   Calculates the log probability density function for the Gumbel,
+ *            $\log P(X=x)$.
+ *                                                     
+ *            Let $y = \lambda(x-\mu)$; for 64-bit doubles,
+ *            useful dynamic range is about $-708 <= y <= \infty$.
+ *            Returns $-\infty$ for smaller or larger $y$.
+ */
+double
+esl_gumbel_logpdf(double x, double mu, double lambda)
+{
+  double y;
+  y = lambda * (x - mu);
+  return (log(lambda) -y - exp(-y));
+}
+
+
+/* Function:  esl_gumbel_cdf()
+ * Synopsis:  Returns the cumulative distribution at $x$, $P(S \leq x)$.
+ *
+ * Purpose:   Calculates the cumulative distribution function
+ *            for the Gumbel, $P(X \leq x)$.
+ *            
+ *            Let $y = \lambda(x-\mu)$; for 64-bit doubles,
+ *            useful dynamic range for $y$ is about $-6.5 <= y <=36$.
+ *            Returns 0.0 for smaller $y$, 1.0 for larger $y$.
+ */
+double 
+esl_gumbel_cdf(double x, double mu, double lambda)
+{
+  double y;
+  y = lambda*(x-mu);
+  return exp(-exp(-y));
+}
+
+/* Function:  esl_gumbel_logcdf()
+ * Synopsis:  Returns the log of the cdf at $x$, $\log P(S \leq x)$.
+ *
+ * Purpose:   Calculates the log of the cumulative distribution function
+ *            for the Gumbel, $\log P(X \leq x)$.
+ *            
+ *            Let $y = \lambda(x-\mu)$; for 64-bit doubles,
+ *            useful dynamic range for $y$ is about $-708 <= y <= 708$.
+ *            Returns $-\infty$ for smaller $y$, 0.0 for larger $y$.
+ */
+double 
+esl_gumbel_logcdf(double x, double mu, double lambda)
+{
+  double y;
+  y = lambda*(x-mu);
+  return (-exp(-y));
+}
+
+/* Function:  esl_gumbel_surv()
+ * Synopsis:  Returns right tail mass above $x$, $P(S > x)$.
+ *
+ * Purpose:   Calculates the survivor function, $P(X>x)$ for a Gumbel 
+ *            (that is, 1-cdf), the right tail's probability mass.
+ * 
+ *            Let $y=\lambda(x-\mu)$; for 64-bit doubles, 
+ *            useful dynamic range for $y$ is $-3.6 <= y <= 708$.
+ *            Returns 1.0 for $y$ below lower limit, and 0.0
+ *            for $y$ above upper limit.
+ */
+double
+esl_gumbel_surv(double x, double mu, double lambda)
+{
+  double y  = lambda*(x-mu);
+  double ey = -exp(-y);
+
+  /* Use 1-e^x ~ -x approximation here when e^-y is small. */
+  if (fabs(ey) < eslSMALLX1) return -ey;
+  else                       return 1 - exp(ey);
+}
+
+/* Function:  esl_gumbel_logsurv()
+ * Synopsis:  Returns log survival at $x$, $\log P(S > x)$.
+ *
+ * Purpose:   Calculates $\log P(X>x)$ for a Gumbel (that is, $\log$(1-cdf)):
+ *            the log of the right tail's probability mass.
+ * 
+ *            Let $y=\lambda(x-\mu)$; for 64-bit doubles, 
+ *            useful dynamic range for $y$ is $-6.5 <= y <= \infty$.
+ *            Returns 0.0 for smaller $y$.
+ */
+double
+esl_gumbel_logsurv(double x, double mu, double lambda)
+{
+  double y  = lambda*(x-mu);
+  double ey = -exp(-y);
+
+  /* The real calculation is log(1-exp(-exp(-y))).
+   * For "large" y, -exp(-y) is small, so 1-exp(-exp(-y) ~ exp(-y),
+   * and log of that gives us -y.
+   * For "small y", exp(-exp(-y) is small, and we can use log(1-x) ~ -x. 
+   */
+  if      (fabs(ey)      < eslSMALLX1) return -y;
+  else if (fabs(exp(ey)) < eslSMALLX1) return -exp(ey);
+  else                                 return log(1-exp(ey));
+}
+
+/* Function:  esl_gumbel_invcdf()
+ *
+ * Purpose:   Calculates the inverse CDF for a Gumbel distribution
+ *            with parameters <mu> and <lambda>. That is, returns
+ *            the quantile <x> at which the CDF is <p>.
+ */
+double
+esl_gumbel_invcdf(double p, double mu, double lambda)
+{
+    return mu - ( log(-1. * log(p)) / lambda);
+}
+
+/* Function:  esl_gumbel_invsurv()
+ *
+ * Purpose:   Calculates the score at which the right tail's mass
+ *            is p, for a Gumbel distribution
+ *            with parameters <mu> and <lambda>. That is, returns
+ *            the quantile <x> at which 1-CDF is <p>.
+ */
+double
+esl_gumbel_invsurv(double p, double mu, double lambda)
+{
+	/* The real calculation is mu - ( log(-1. * log(1-p)) / lambda).
+	*  But there's a problem with small p:
+	*     for p<1e-15, 1-p will be viewed as 1, so
+	*     log ( -log(1-p) ) == log (0) -> inf
+	*  Instead, use two approximations;
+	*    (1) log( 1-p) ~= -p   for small p (e.g. p<0.001)
+	*      so log(-1. * log(1-p)) ~= log(p)
+	*    (2) log (p) ~= (p^p - 1) / p
+	*
+	*    See notes Mar 1, 2010.
+	*/
+	double log_part;
+	if (p < eslSMALLX1) {
+		log_part = (pow(p,p) - 1 ) / p;
+	} else {
+		log_part = log(-1. * log(1-p));
+	}
+
+	//test 2
+
+    return mu - ( log_part / lambda);
+}
+/*------------------ end of densities and distributions --------------------*/
+
+
+/*****************************************************************
+ * 2. Generic API routines: for general interface w/ histogram module
+ *****************************************************************/ 
+
+/* Function:  esl_gumbel_generic_pdf()
+ *
+ * Purpose:   Generic-API version of PDF function.
+ */
+double
+esl_gumbel_generic_pdf(double p, void *params)
+{
+  double *v = (double *) params;
+  return esl_gumbel_pdf(p, v[0], v[1]);
+}
+
+/* Function:  esl_gumbel_generic_cdf()
+ *
+ * Purpose:   Generic-API version of CDF function.
+ */
+double
+esl_gumbel_generic_cdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_gumbel_cdf(x, p[0], p[1]);
+}
+
+/* Function:  esl_gumbel_generic_surv()
+ *
+ * Purpose:   Generic-API version of survival function.
+ */
+double
+esl_gumbel_generic_surv(double p, void *params)
+{
+  double *v = (double *) params;
+  return esl_gumbel_surv(p, v[0], v[1]);
+}
+
+/* Function:  esl_gumbel_generic_invcdf()
+ *
+ * Purpose:   Generic-API version of inverse CDF.
+ */
+double
+esl_gumbel_generic_invcdf(double p, void *params)
+{
+  double *v = (double *) params;
+  return esl_gumbel_invcdf(p, v[0], v[1]);
+}
+
+
+/*------------------------- end of generic API --------------------------*/
+
+
+
+/****************************************************************************
+ * 3. Routines for dumping plots for files
+ ****************************************************************************/ 
+
+/* Function:  esl_gumbel_Plot()
+ * Synopsis:  Plot a Gumbel function in XMGRACE XY format.
+ *
+ * Purpose:   Plot a Gumbel function <func> (for instance,
+ *            <esl_gumbel_pdf()>) for parameters <mu> and <lambda>, for
+ *            a range of quantiles x from <xmin> to <xmax> in steps of <xstep>;
+ *            output to an open stream <fp> in xmgrace XY input format.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error, such as filled disk.
+ */
+int
+esl_gumbel_Plot(FILE *fp, double mu, double lambda, 
+		double (*func)(double x, double mu, double lambda), 
+		double xmin, double xmax, double xstep)
+{
+  double x;
+  for (x = xmin; x <= xmax; x += xstep)
+    if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gumbel plot write failed");
+  if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gumbel plot write failed");
+  return eslOK;
+}
+/*-------------------- end plot dumping routines ---------------------------*/
+
+
+
+/*****************************************************************
+ * 4. Routines for sampling (requires augmentation w/ random module)
+ *****************************************************************/ 
+
+#ifdef eslAUGMENT_RANDOM
+/* Function:  esl_gumbel_Sample()
+ * Synopsis:  Return a Gumbel-distributed random sample $x$.
+ *
+ * Purpose:   Sample a Gumbel-distributed random variate
+ *            by the transformation method.
+ */
+double
+esl_gumbel_Sample(ESL_RANDOMNESS *r, double mu, double lambda)
+{
+  double p;
+  p = esl_rnd_UniformPositive(r); 
+  return esl_gumbel_invcdf(p, mu, lambda);
+} 
+#endif /*eslAUGMENT_RANDOM*/
+
+/*------------------------ end of sampling --------------------------------*/
+
+
+
+/*****************************************************************
+ * 5. Maximum likelihood fitting to complete data
+ *****************************************************************/ 
+
+/* lawless416()
+ * SRE, Thu Nov 13 11:48:50 1997 [St. Louis]
+ * 
+ * Purpose:  Equation 4.1.6 from [Lawless82], pg. 143, and
+ *           its first derivative with respect to lambda,
+ *           for finding the ML fit to Gumbel lambda parameter.
+ *           This equation gives a result of zero for the maximum
+ *           likelihood lambda.
+ *           
+ * Args:     x      - array of sample values 
+ *           n      - number of samples 
+ *           lambda - a lambda to test
+ *           ret_f  - RETURN: 4.1.6 evaluated at lambda
+ *           ret_df - RETURN: first derivative of 4.1.6 evaluated at lambda
+ *           
+ * Return:   (void)
+ */ 
+static void
+lawless416(double *x, int n, double lambda, double *ret_f, double *ret_df)
+{
+  double esum;			/* \sum e^(-lambda xi)      */
+  double xesum;			/* \sum xi e^(-lambda xi)   */
+  double xxesum;		/* \sum xi^2 e^(-lambda xi) */
+  double xsum;			/* \sum xi                  */
+  int i;
+
+  esum = xesum = xsum  = xxesum = 0.;
+  for (i = 0; i < n; i++)
+    {
+      xsum   += x[i];
+      xesum  += x[i] * exp(-1. * lambda * x[i]);
+      xxesum += x[i] * x[i] * exp(-1. * lambda * x[i]);
+      esum   += exp(-1. * lambda * x[i]);
+    }
+  *ret_f  = (1./lambda) - (xsum / n)  + (xesum / esum);
+  *ret_df = ((xesum / esum) * (xesum / esum))
+    - (xxesum / esum)
+    - (1. / (lambda * lambda));
+}
+
+/* Function: esl_gumbel_FitComplete()
+ * Synopsis: Estimates $\mu$, $\lambda$ from complete data.
+ * 
+ * Purpose:  Given an array of Gumbel-distributed samples
+ *           <x[0]..x[n-1]>, find maximum likelihood parameters <mu>
+ *           and <lambda>.
+ *           
+ *           The number of samples <n> must be reasonably large to get
+ *           an accurate fit. <n=100> suffices to get an accurate
+ *           location parameter $\mu$ (to about 1% error), but
+ *           <n~10000> is required to get a similarly accurate
+ *           estimate of $\lambda$. It's probably a bad idea to try to
+ *           fit a Gumbel to less than about 1000 data points.
+ *
+ *           On a very small number of samples, the fit can fail
+ *           altogether, in which case the routine will return a
+ *           <eslENORESULT> code. Caller must check for this.
+ *           
+ *           Uses approach described in [Lawless82]. Solves for lambda
+ *           using Newton/Raphson iterations, then substitutes lambda
+ *           into Lawless' equation 4.1.5 to get mu.
+ *           
+ * Args:     x          - list of Gumbel distributed samples
+ *           n          - number of samples (n>1)
+ *           ret_mu     - RETURN: ML estimate of mu
+ *           ret_lambda - RETURN: ML estimate of lambda
+ *           
+ * Returns:  <eslOK> on success.
+ * 
+ *           <eslEINVAL> if n<=1.
+ *           <eslENORESULT> if the fit fails, likely because the
+ *           number of samples is too small. On either error,
+ *           <*ret_mu> and <*ret_lambda> are 0.0.  These are classed
+ *           as failures (normal errors) because the data vector may
+ *           have been provided by a user.
+ */
+int
+esl_gumbel_FitComplete(double *x, int n, double *ret_mu, double *ret_lambda)
+{
+  double  variance;
+  double  lambda, mu;
+  double  fx;			/* f(x)  */
+  double  dfx;			/* f'(x) */
+  double  esum;                 /* \sum e^(-lambda xi) */ 
+  double  tol = 1e-5;
+  int     i;
+  int     status;
+
+  if (n <= 1) { status = eslEINVAL; goto FAILURE; }
+
+  /* 1. Find an initial guess at lambda
+   *    (Evans/Hastings/Peacock, Statistical Distributions, 2000, p.86)
+   */
+  esl_stats_DMean(x, n, NULL, &variance);
+  lambda = eslCONST_PI / sqrt(6.*variance);
+
+  /* 2. Use Newton/Raphson to solve Lawless 4.1.6 and find ML lambda
+   */
+  for (i = 0; i < 100; i++)
+    {
+      lawless416(x, n, lambda, &fx, &dfx);
+      if (fabs(fx) < tol) break;             /* success */
+      lambda = lambda - fx / dfx;	     /* Newton/Raphson is simple */
+      if (lambda <= 0.) lambda = 0.001;      /* but be a little careful  */
+    }
+
+  /* 2.5: If we did 100 iterations but didn't converge, Newton/Raphson failed.
+   *      Resort to a bisection search. Worse convergence speed
+   *      but guaranteed to converge (unlike Newton/Raphson).
+   *      We assume that fx is a monotonically decreasing function of x;
+   *      i.e. fx > 0 if we are left of the root, fx < 0 if we
+   *      are right of the root.
+   */ 
+  if (i == 100)
+    {
+      double left, right, mid;
+      ESL_DPRINTF2(("esl_gumbel_FitComplete(): Newton/Raphson failed; switchover to bisection\n"));
+
+      /* First bracket the root */
+      left  = 0.;	                 	/* for sure */
+      right = eslCONST_PI / sqrt(6.*variance);  /* an initial guess */
+      lawless416(x, n, lambda, &fx, &dfx);
+      while (fx > 0.) 
+	{		
+	  right *= 2.;		/* arbitrary leap to the right */
+	  if (right > 1000.)    /* no reasonable lambda should be > 1000, we assert */
+	    { 
+	      ESL_DPRINTF2(("Failed to bracket root in esl_gumbel_FitComplete()."));
+	      status = eslENORESULT; 
+	      goto FAILURE;
+	    }
+	      
+	  lawless416(x, n, right, &fx, &dfx);
+	}
+
+      /* Now, bisection search in left/right interval */
+      for (i = 0; i < 100; i++)
+	{
+	  mid = (left + right) / 2.; 
+	  lawless416(x, n, mid, &fx, &dfx);
+	  if (fabs(fx) < tol) break;             /* success */
+	  if (fx > 0.)	left = mid;
+	  else          right = mid;
+	}
+
+      /* Too many iterations? Give up. */
+      if (i == 100) 
+	{
+	  ESL_DPRINTF2(("Even bisection search failed in esl_gumbel_FitComplete().\n"));
+	  status = eslENORESULT;
+	  goto FAILURE;
+	}
+
+      lambda = mid;
+    }
+
+  /* 3. Substitute into Lawless 4.1.5 to find mu
+   */
+  esum = 0.;
+  for (i = 0; i < n; i++)
+    esum  += exp(-lambda * x[i]);
+  mu = -log(esum / n) / lambda;
+
+  *ret_lambda = lambda;
+  *ret_mu     = mu;   
+  return eslOK;
+
+ FAILURE:
+  *ret_mu     = 0.0;
+  *ret_lambda = 0.0;
+  return status;
+}
+
+/* Function:  esl_gumbel_FitCompleteLoc()
+ * Synopsis:  Estimates $\mu$ from complete data, given $\lambda$.
+ *
+ * Purpose:   Given an array of Gumbel-distributed samples 
+ *            <x[0]..x[n-1]> (complete data), and a known
+ *            (or otherwise fixed) <lambda>, find a maximum
+ *            likelihood estimate for location parameter <mu>.
+ *            
+ *            Algorithm is a straightforward simplification of
+ *            <esl_gumbel_FitComplete()>.
+ *
+ * Args:     x          - list of Gumbel distributed samples
+ *           n          - number of samples
+ *           lambda     - known lambda (scale) parameter
+ *           ret_mu     : RETURN: ML estimate of mu
+ *           
+ * Returns:  <eslOK> on success.
+ *           
+ *           <eslEINVAL> if n<=1; on this error, <*ret_mu> = 0.
+ *
+ * Throws:   (no abnormal error conditions)
+ */
+int
+esl_gumbel_FitCompleteLoc(double *x, int n, double lambda, double *ret_mu)
+{
+  double esum;
+  int    i;
+  int    status;
+
+  if (n <= 1) { status = eslEINVAL; goto FAILURE; }
+
+  /* Substitute into Lawless 4.1.5 to find mu */
+  esum = 0.;
+  for (i = 0; i < n; i++)
+    esum  += exp(-lambda * x[i]);
+  *ret_mu = -log(esum / n) / lambda;
+  return eslOK;
+
+#if 0
+  /* Replace the code above w/ code below to test the direct method. */
+  double mean, variance;
+  esl_stats_DMean(x, n, &mean, &variance);
+  *ret_mu     = mean - 0.57722/lambda;
+  return eslOK;
+#endif
+
+ FAILURE:
+  *ret_mu = 0.;
+  return status;
+}
+
+
+#if eslDEBUGLEVEL >=3
+/* direct_mv_fit()
+ * SRE, Wed Jun 29 08:23:47 2005
+ * 
+ * Purely for curiousity: a complete data fit using the
+ * simple direct method, calculating mu and lambda from mean
+ * and variance.
+ */
+static int
+direct_mv_fit(double *x, int n, double *ret_mu, double *ret_lambda)
+{
+  double mean, variance;
+
+  esl_stats_DMean(x, n, &mean, &variance);
+  *ret_lambda = eslCONST_PI / sqrt(6.*variance);
+  *ret_mu     = mean - 0.57722/(*ret_lambda);
+  return eslOK;
+}
+#endif
+
+/*------------------- end of complete data fit ---------------------------------*/
+
+
+/*****************************************************************
+ * 6. Maximum likelihood fitting to censored data (x_i >= phi; z known)
+ *****************************************************************/ 
+
+/* lawless422()
+ * SRE, Mon Nov 17 09:42:48 1997 [St. Louis]
+ * 
+ * Purpose:  Equation 4.2.2 from [Lawless82], pg. 169, and
+ *           its first derivative with respect to lambda,
+ *           for finding the ML fit to Gumbel lambda parameter
+ *           for Type I censored data. 
+ *           This equation gives a result of zero for the maximum
+ *           likelihood lambda.
+ *           
+ * Args:     x      - array of observed sample values 
+ *           n      - number of observed samples 
+ *           z      - number of censored samples = N-n 
+ *           phi    - censoring value; all observed x_i >= phi         
+ *           lambda - a lambda to test
+ *           ret_f  - RETURN: 4.2.2 evaluated at lambda
+ *           ret_df - RETURN: first derivative of 4.2.2 evaluated at lambda
+ *           
+ * Return:   (void)
+ */ 
+static void
+lawless422(double *x, int n, int z, double phi,
+	   double lambda, double *ret_f, double *ret_df)
+{
+  double esum;			/* \sum e^(-lambda xi)      + z term    */
+  double xesum;			/* \sum xi e^(-lambda xi)   + z term    */
+  double xxesum;		/* \sum xi^2 e^(-lambda xi) + z term    */
+  double xsum;			/* \sum xi                  (no z term) */
+  int i;
+
+  esum = xesum = xsum  = xxesum = 0.;
+  for (i = 0; i < n; i++)
+    {
+      xsum   += x[i];
+      esum   +=               exp(-1. * lambda * x[i]);
+      xesum  +=        x[i] * exp(-1. * lambda * x[i]);
+      xxesum += x[i] * x[i] * exp(-1. * lambda * x[i]);
+    }
+
+  /* Add z terms for censored data
+   */
+  esum   += (double) z *             exp(-1. * lambda * phi);
+  xesum  += (double) z * phi *       exp(-1. * lambda * phi);
+  xxesum += (double) z * phi * phi * exp(-1. * lambda * phi);
+
+  *ret_f  = 1./lambda - xsum / n + xesum / esum;
+  *ret_df = ((xesum / esum) * (xesum / esum))
+    - (xxesum / esum)
+    - (1. / (lambda * lambda));
+
+  return;
+}
+
+/* Function: esl_gumbel_FitCensored()
+ * Synopsis: Estimates $\mu$, $\lambda$ from censored data.
+ * 
+ * Purpose:  Given a left-censored array of Gumbel-distributed samples
+ *           <x[0]..x[n-1]>, the number of censored samples <z>, and
+ *           the censoring value <phi> (all <x[i]> $\geq$ <phi>).  Find
+ *           maximum likelihood parameters <mu> and <lambda>.
+ *           
+ * Algorithm: Uses approach described in [Lawless82]. Solves
+ *            for lambda using Newton/Raphson iterations;
+ *            then substitutes lambda into Lawless' equation 4.2.3
+ *            to get mu. 
+ *           
+ * Args:     x          - array of Gumbel-distributed samples, 0..n-1
+ *           n          - number of observed samples
+ *           z          - number of censored samples
+ *           phi        - censoring value (all x_i >= phi)
+ *           ret_mu     - RETURN: ML estimate of mu
+ *           ret_lambda - RETURN: ML estimate of lambda
+ *           
+ * Returns:  <eslOK> on success.
+ * 
+ *           <eslEINVAL> if n<=1. 
+ *           <eslENORESULT> if the fit fails, likey because the number
+ *           of samples is too small.
+ *           On either error, <*ret_mu> and <*ret_lambda> are 0.0.
+ *           These are classed as failures (normal errors) because the
+ *           data vector may have been provided by a user.
+ */
+int
+esl_gumbel_FitCensored(double *x, int n, int z, double phi, double *ret_mu, double *ret_lambda)
+{
+  double variance;
+  double lambda, mu;
+  double fx;			/* f(x)  */
+  double dfx;			/* f'(x) */
+  double esum;                  /* \sum e^(-lambda xi) */ 
+  double tol = 1e-5;
+  int    i;
+  int    status;
+
+  if (n <= 1) { status = eslEINVAL; goto FAILURE; }
+
+  /* 1. Find an initial guess at lambda
+   *    (Evans/Hastings/Peacock, Statistical Distributions, 2000, p.86)
+   */
+  esl_stats_DMean(x, n, NULL, &variance);
+  lambda = eslCONST_PI / sqrt(6.*variance);
+
+  /* 2. Use Newton/Raphson to solve Lawless 4.2.2 and find ML lambda
+   */
+  for (i = 0; i < 100; i++)
+    {
+      lawless422(x, n, z, phi, lambda, &fx, &dfx);
+      if (fabs(fx) < tol) break;             /* success */
+      lambda = lambda - fx / dfx;	     /* Newton/Raphson is simple */
+      if (lambda <= 0.) lambda = 0.001;      /* but be a little careful  */
+    }
+
+ /* 2.5: If we did 100 iterations but didn't converge, Newton/Raphson failed.
+   *      Resort to a bisection search. Worse convergence speed
+   *      but guaranteed to converge (unlike Newton/Raphson).
+   *      We assume (!?) that fx is a monotonically decreasing function of x;
+   *      i.e. fx > 0 if we are left of the root, fx < 0 if we
+   *      are right of the root.
+   */ 
+  if (i == 100)
+    {
+      double left, right, mid;
+      ESL_DPRINTF2(("esl_gumbel_FitCensored(): Newton/Raphson failed; switched to bisection\n"));
+
+      /* First bracket the root */
+      left  = 0.;		               /* we know that's the left bound */
+      right = eslCONST_PI / sqrt(6.*variance); /* start from here, move "right"... */
+      lawless422(x, n, z, phi, right, &fx, &dfx);
+      while (fx > 0.)
+	{
+	  right *= 2.;
+	  if (right > 1000.) /* no reasonable lambda should be > 1000, we assert */
+	    {
+	      ESL_DPRINTF2(("Failed to bracket root in esl_gumbel_FitCensored()."));
+	      status = eslENORESULT;
+	      goto FAILURE;
+	    }
+	  lawless422(x, n, z, phi, right, &fx, &dfx);
+	}
+
+      /* Now we bisection search in left/right interval */
+      for (i = 0; i < 100; i++)
+	{
+	  mid = (left + right) / 2.; 
+	  lawless422(x, n, z, phi, mid, &fx, &dfx);
+	  if (fabs(fx) < tol) break;             /* success */
+	  if (fx > 0.)	left = mid;
+	  else          right = mid;
+	}
+      if (i == 100) 
+	{
+	  ESL_DPRINTF2(("Even bisection search failed in esl_gumbel_FitCensored().\n"));
+	  status = eslENORESULT;
+	  goto FAILURE;
+	}
+      lambda = mid;
+    }
+
+  /* 3. Substitute into Lawless 4.2.3 to find mu
+   */
+  esum = 0.;
+  for (i = 0; i < n; i++)
+    esum  += exp(-lambda * x[i]);
+  esum += z * exp(-1. * lambda * phi);    /* term from censored data */
+  mu = -log(esum / n) / lambda;        
+
+  *ret_lambda = lambda;
+  *ret_mu     = mu;   
+  return eslOK;
+
+ FAILURE:
+  *ret_lambda = 0.0;
+  *ret_mu     = 0.0;
+  return status;
+}
+
+
+/* Function:  esl_gumbel_FitCensoredLoc()
+ * Synopsis:  Estimates $\mu$ from censored data, given $\lambda$.
+ *
+ * Purpose:   Given a left-censored array of Gumbel distributed samples
+ *            <x[0>..x[n-1]>, the number of censored samples <z>, and the censoring
+ *            value <phi> (where all <x[i]> $\geq$ <phi>), and a known
+ *            (or at least fixed) <lambda>;
+ *            find the maximum likelihood estimate of the location
+ *            parameter $\mu$ and return it in <ret_mu>.
+ *
+ * Note:      A straightforward simplification of FitCensored().
+ *
+ * Args:     x          - array of Gumbel-distributed samples, 0..n-1
+ *           n          - number of observed samples
+ *           z          - number of censored samples
+ *           phi        - censoring value (all x_i >= phi)
+ *           lambda     - known scale parameter $\lambda$      
+ *           ret_mu     - RETURN: ML estimate of $\mu$
+ *           
+ * Returns:   <eslOK> on success.
+ *
+ *            <eslEINVAL> if n<=1; on this error, <*ret_mu> = 0.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_gumbel_FitCensoredLoc(double *x, int n, int z, double phi, double lambda, 
+			  double *ret_mu)
+{
+  double esum;
+  int    i;
+  int    status;
+
+  if (n <= 1) { status = eslEINVAL; goto FAILURE; }
+
+  /* Immediately substitute into Lawless 4.2.3 to find mu, because
+   * lambda is known.
+   */
+  esum = 0.;
+  for (i = 0; i < n; i++) 	          /* contribution from observed data */
+    esum  += exp(-lambda * x[i]);
+  esum += z * exp(-1. * lambda * phi);    /* term from censored data */
+
+  *ret_mu = -log(esum / (double) n) / lambda;        
+  return eslOK;
+
+ FAILURE:
+  *ret_mu = 0.;
+  return status;
+}
+
+
+/*****************************************************************
+ * 7. Maximum likelihood fitting to truncated data (x_i >= phi and z unknown) (requires minimizer augmentation)
+ *****************************************************************/ 
+#ifdef eslAUGMENT_MINIMIZER
+/* Easel's conjugate gradient descent code allows a single void ptr to
+ * point to any necessary fixed data, so we'll put everything into one
+ * structure:
+ */
+struct tevd_data {
+  double *x;	/* data: n observed samples from a Gumbel */
+  int     n;	/* number of observed samples */
+  double  phi;	/* truncation threshold: all observed x_i >= phi */
+};
+
+/* tevd_func()
+ * 
+ * Called by the optimizer: evaluate the objective function
+ * for the negative posterior log probability of a particular choice 
+ * of parameters mu and lambda, given truncated Gumbel samples.
+ */
+static double 
+tevd_func(double *p, int nparam, void *dptr)
+{
+  double mu, w, lambda;
+  struct tevd_data *data;
+  double *x;
+  int     n;
+  double  phi;
+  double  logL;
+  int     i;
+  
+  /* unpack what the optimizer gave us; nparam==2 always
+   */
+  mu     = p[0];
+  w      = p[1];
+  lambda = exp(w);
+  data   = (struct tevd_data *) dptr;
+  x      = data->x;
+  n      = data->n;
+  phi    = data->phi;
+
+  /* The log likelihood equation
+   */
+  logL   = n * log(lambda);
+  for (i = 0; i < n; i++) 
+    logL -= lambda * (x[i] - mu);
+  for (i = 0; i < n; i++)
+    logL -= exp(-1. * lambda * (x[i] - mu));
+  logL -= n * esl_gumbel_logsurv(phi, mu, lambda);    
+
+  return -1.0 * logL;		/* objective: minimize the NLP */
+}
+
+/* tevd_grad()
+ * 
+ * Called by the optimizer: evaluate the gradient of the objective
+ * function (the negative posterior log probability of the parameters
+ * mu and w, where w = log(lambda), at a particular choice of mu and
+ * lambda.
+ */
+static void
+tevd_grad(double *p, int nparam, void *dptr, double *dp)
+{
+  double mu, lambda, w;
+  struct tevd_data *data;
+  double *x;
+  int     n;
+  double  phi;
+  double  dmu, dw;
+  double  coeff;
+  int     i;
+  
+  /* unpack what the optimizer gave us; nparam==2 always
+   */
+  mu     = p[0];
+  w      = p[1];
+  lambda = exp(w);
+  data   = (struct tevd_data *) dptr;
+  x      = data->x;
+  n      = data->n;
+  phi    = data->phi;
+
+  /* Both partials include a coefficient that
+   * basically looks like P(S=phi) / P(S>=phi); pre-calculate it.
+   * Watch out when phi >> mu, which'll give us 0/0; instead,
+   * recognize that for phi >> mu, coeff converges to \lambda.
+   */
+  if (lambda*(phi-mu) > 50.)	/* arbitrary crossover. */
+    coeff = lambda;
+  else
+    coeff = esl_gumbel_pdf(phi, mu, lambda) / esl_gumbel_surv(phi, mu, lambda); 
+
+  /* Partial derivative w.r.t. mu.
+   */
+  dmu = n * lambda;
+  for (i = 0; i < n; i++) 
+    dmu -= lambda * exp(-1. * lambda * (x[i] - mu));
+  dmu -= n * coeff;    
+
+  /* Partial derivative w.r.t. w=log(lambda).
+   */
+  dw = n;
+  for (i = 0; i < n; i++) dw -= (x[i] - mu) * lambda;
+  for (i = 0; i < n; i++) dw += (x[i] - mu) * lambda * exp(-1. * lambda * (x[i] - mu));
+  dw += n * (phi - mu) * coeff;   
+
+  /* Return the negative, because we're minimizing NLP, not maximizing.
+   */
+  dp[0] = -1. * dmu;	/* negative because we're minimizing NLP, not maximizing */
+  dp[1] = -1. * dw;
+  return;
+}
+  
+/* Function:  esl_gumbel_FitTruncated()
+ * Synopsis:  Estimates $\mu$, $\lambda$ from truncated data.
+ *
+ * Purpose:   Given a left-truncated array of Gumbel-distributed
+ *            samples <x[0]..x[n-1]> and the truncation threshold
+ *            <phi> (such that all <x[i]> $\geq$ <phi>).
+ *            Find maximum likelihood parameters <mu> and <lambda>.
+ *            
+ *            <phi> should not be much greater than <mu>, the
+ *            mode of the Gumbel, or the fit will become unstable
+ *            or may even fail to converge. The problem is
+ *            that for <phi> $>$ <mu>, the tail of the Gumbel
+ *            becomes a scale-free exponential, and <mu> becomes
+ *            undetermined.
+ *            
+ * Algorithm: Uses conjugate gradient descent to optimize the
+ *            log likelihood of the data. Follows a general
+ *            approach to fitting missing data problems outlined
+ *            in [Gelman95].
+ *
+ * Args:      x          - observed data samples [0..n-1]
+ *            n          - number of samples
+ *            phi        - truncation threshold; all x[i] >= phi
+ *            ret_mu     - RETURN: ML estimate of mu       
+ *            ret_lambda - RETURN: ML estimate of lambda
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ *            <eslEINVAL> if n<=1.
+ *            <eslENORESULT> if the fit fails, likely because the
+ *            number of samples <n> is too small, or because the
+ *            truncation threshold is high enough that the tail
+ *            looks like a scale-free exponential and we can't
+ *            obtain <mu>.
+ *            On either error, <*ret_mu> and <*ret_lambda> are 
+ *            returned as 0.0.
+ *            These are "normal" (returned) errors because 
+ *            the data might be provided directly by a user.
+ */
+int
+esl_gumbel_FitTruncated(double *x, int n, double phi, double *ret_mu, double *ret_lambda)
+{
+  struct tevd_data data;
+  double wrk[8];		/* workspace for CG: 4 tmp vectors of size 2 */
+  double p[2];			/* mu, w;  lambda = e^w */
+  double u[2];			/* max initial step size for mu, lambda */
+  double mean, variance;
+  double mu, lambda;
+  double fx;
+  int    i;
+  int    status;
+  
+  /* Can't fit to n<=1 */
+  if (n <= 1) { status = eslEINVAL; goto FAILURE; }
+  
+  /* Can fail on small <n>. One way is if x_i are all identical, so
+   * ML lambda is undefined. 
+   */
+  for (i = 1; i < n; i++) if (x[i] != x[0]) break;
+  if  (i == n) { status = eslENORESULT; goto FAILURE; }
+
+  data.x   = x;
+  data.n   = n;
+  data.phi = phi;
+
+  /* The source of the following magic is Evans/Hastings/Peacock, 
+   * Statistical Distributions, 3rd edition (2000), p.86, which gives
+   * eq's for the mean and variance of a Gumbel in terms of mu and lambda;
+   * we turn them around to get mu and lambda in terms of the mean and variance.
+   * These would be reasonable estimators if we had a full set of Gumbel
+   * distributed variates. They'll be off for a truncated sample, but
+   * close enough to be a useful starting point.
+   */
+  esl_stats_DMean(x, n, &mean, &variance);
+  lambda = eslCONST_PI / sqrt(6.*variance);
+  mu     = mean - 0.57722/lambda;
+
+  p[0] = mu;
+  p[1] = log(lambda);		/* c.o.v. because lambda is constrained to >0 */
+
+  u[0] = 2.0;
+  u[1] = 0.1;
+
+  /* Pass the problem to the optimizer. The work is done by the
+   * equations in tevd_func() and tevd_grad().
+   */
+  status = esl_min_ConjugateGradientDescent(p, u, 2, 
+					    &tevd_func, &tevd_grad,(void *)(&data),
+					    1e-4, wrk, &fx);
+  if (status != eslOK) { status = eslENORESULT; goto FAILURE; }
+  
+  *ret_mu     = p[0];
+  *ret_lambda = exp(p[1]);	/* reverse the c.o.v. */
+  return status;
+
+ FAILURE:
+  *ret_mu     = 0.0;
+  *ret_lambda = 0.0;
+  return status;
+}
+#endif /*eslAUGMENT_MINIMIZER*/
+/*------------------------ end of fitting --------------------------------*/
+
+/*****************************************************************
+ * 8. Stats driver
+ *****************************************************************/
+#ifdef eslGUMBEL_STATS
+/* compile: gcc -g -O2 -Wall -I. -L. -o stats -DeslGUMBEL_STATS esl_gumbel.c -leasel -lm
+ * run:     ./stats > stats.out
+ * process w/ lines like:
+ *    grep "complete    100" stats.out | awk '{$i = 100*($5-$4)/$4; if ($i < 0) $i = -$i; print $i}' | avg
+ *    grep "complete    100" stats.out | awk '{$i = 100*($7-$6)/$6; if ($i < 0) $i = -$i; print $i}' | avg
+ * to get accuracy summary (in %) for mu, lambda; first part of the grep pattern may be "complete", "censored", or
+ * "truncated", second part may be "    100", "   1000", "  10000", or " 100000".
+ *
+ * This is the routine that collects the accuracy statistics that appear
+ * in tables in the Gumbel chapter of the guide, esl_gumbel.tex.
+ */
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_minimizer.h"
+#include "esl_gumbel.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_RANDOMNESS *r;
+  int    totalN[4] = {100, 1000, 10000, 100000}; /*biggest last; one malloc*/
+  int    nexps = 4;
+  int    exp;
+  int    trial, ntrials;
+  double phi;		/* truncation threshold. */
+  int    i;
+  int    n;
+  double *x;
+  double  mu, lambda;
+  double  est_mu, est_lambda;
+  double  val;
+  int     do_complete, do_censored, do_truncated, do_location;
+
+  ntrials = 500;
+  mu      = -20.0;
+  lambda  = 0.693;
+  phi     = -15.;
+
+  do_complete  = TRUE;		/* Flip these on/off as desired */
+  do_censored  = FALSE;
+  do_truncated = FALSE;
+  do_location  = FALSE;
+
+  r = esl_randomness_Create(0);
+  x = malloc(sizeof(double) * totalN[nexps-1]);
+  
+  /* Fitting to simulated complete datasets
+   */
+  if (do_complete) {
+    for (exp = 0; exp < nexps; exp++)
+      {
+	for (trial = 0; trial < ntrials; trial++)
+	  {
+	    for (i = 0; i < totalN[exp]; i++)
+	      x[i] = esl_gumbel_Sample(r, mu, lambda);
+
+	    /*direct_mv_fit(x, totalN[exp], &est_mu, &est_lambda);*/
+	    if (esl_gumbel_FitComplete(x, totalN[exp], &est_mu, &est_lambda) != eslOK)
+	      esl_fatal("gumbel complete fit fit failed");
+	  
+	    printf("complete %6d %6d %9.5f %9.5f %8.6f %8.6f\n", 
+		   totalN[exp], totalN[exp], mu, est_mu, lambda, est_lambda);
+	  }
+	printf("\n");
+      }
+  }
+
+  /* Fitting to simulated censored datasets
+   */
+  if (do_censored) {
+    for (exp = 0; exp < nexps; exp++)
+      {
+	for (trial = 0; trial < ntrials; trial++)
+	  {
+	    for (n = 0, i = 0; i < totalN[exp]; i++)
+	      {
+		val = esl_gumbel_Sample(r, mu, lambda);
+		if (val >= phi) x[n++] = val;
+	      }
+	    if (esl_gumbel_FitCensored(x, n, totalN[exp]-n, phi, &est_mu, &est_lambda) != eslOK)
+	      esl_fatal("gumbel censored fit failed");
+	  
+	    printf("censored %6d %6d %9.5f %9.5f %8.6f %8.6f\n", 
+		   totalN[exp], n, mu, est_mu, lambda, est_lambda);
+	  }
+	printf("\n");
+      }
+  }
+
+  /* Fitting to simulated truncated datasets
+   */
+#ifdef eslAUGMENT_MINIMIZER
+  if (do_truncated) {
+    for (exp = 0; exp < nexps; exp++)
+      {
+	for (trial = 0; trial < ntrials; trial++)
+	  {
+	    for (n = 0, i = 0; i < totalN[exp]; i++)
+	      {
+		val = esl_gumbel_Sample(r, mu, lambda);
+		if (val >= phi) x[n++] = val;
+	      }
+	    if (esl_gumbel_FitTruncated(x, n, phi, &est_mu, &est_lambda) != eslOK)
+	      esl_fatal("gumbel truncated fit failed");
+	  
+	    printf("truncated %6d %6d %9.5f %9.5f %8.6f %8.6f\n", 
+		   totalN[exp], n, mu, est_mu, lambda, est_lambda);
+	  }
+	printf("\n");
+      }
+  }
+#endif /*eslAUGMENT_MINIMIZER*/
+
+  /* Fitting mu given lambda 
+   */
+  if (do_location) {
+    for (exp = 0; exp < nexps; exp++)
+      {
+	for (trial = 0; trial < ntrials; trial++)
+	  {
+	    for (i = 0; i < totalN[exp]; i++)
+	      x[i] = esl_gumbel_Sample(r, mu, lambda);
+
+	    if (esl_gumbel_FitCompleteLoc(x, totalN[exp], lambda, &est_mu) != eslOK)
+	      esl_fatal("gumbel location-only complete fit failed");
+	  
+	    printf("location %6d %6d %9.5f %9.5f\n",
+		   totalN[exp], totalN[exp], mu, est_mu);
+	  }
+	printf("\n");
+      }
+  }    
+
+  esl_randomness_Destroy(r);
+  free(x);
+  return 0;
+}
+#endif /*eslGUMBEL_STATS*/
+
+/*****************************************************************
+ * 9. Unit tests.
+ *****************************************************************/ 
+#ifdef eslGUMBEL_TESTDRIVE
+
+#include "esl_getopts.h"
+#include "esl_random.h"
+
+static void
+utest_fitting(ESL_RANDOMNESS *rng)
+{
+  char    msg[]   = "esl_gumbel: fitting unit test failed";
+  int     totalN  = 10000;
+  double  pmu     = -20.;
+  double  plambda = 0.4;
+  double  phi     = -20.;
+  double *x       = NULL;
+  int     i;
+  int     n;
+  double  mu;
+  double  lambda;
+  int     status;
+
+  /* Simulate a complete Gumbel distributed dataset of <totalN> samples */
+  ESL_ALLOC(x, sizeof(double) * totalN);
+  for (i = 0; i < totalN; i++)
+    x[i] = esl_gumbel_Sample(rng, pmu, plambda);
+
+  /* Complete data fitting.
+   * Don't tolerate more than 1% error in mu, 3% in lambda.
+   */
+  if ((status = esl_gumbel_FitComplete(x, totalN, &mu, &lambda)) != eslOK) esl_fatal(msg);
+  if (fabs((mu    -pmu)    /pmu)     > 0.01) esl_fatal(msg);
+  if (fabs((lambda-plambda)/plambda) > 0.03) esl_fatal(msg);
+
+  /* Complete data, known lambda; fit location <mu>
+   */
+  if ((status = esl_gumbel_FitCompleteLoc(x, totalN, plambda, &mu)) != eslOK) esl_fatal(msg);
+  if (fabs((mu   - pmu) / pmu)      > 0.01) esl_fatal(msg);
+
+
+  /* Left censor/truncate the data set, to <n> values x_i >= phi;
+   * <Ntotal-n> are censored
+   */
+  for (n=0, i = 0; i < totalN; i++)
+    if (x[i] >= phi) x[n++] = x[i];
+
+  /* Censored fitting.
+   * Don't tolerate more than 1% error in mu, 4% in lambda.
+   */
+  if ((status = esl_gumbel_FitCensored(x, n, totalN-n, phi, &mu, &lambda)) != eslOK) esl_fatal(msg);
+  if (fabs((mu     - pmu)    /pmu)     > 0.01) esl_fatal(msg);
+  if (fabs((lambda - plambda)/plambda) > 0.04) esl_fatal(msg);
+
+  /* Censored data, known lambda; fit location <mu>
+   */
+  if ((status = esl_gumbel_FitCensoredLoc(x, n, totalN-n, phi, plambda, &mu)) != eslOK) esl_fatal(msg);
+  if (fabs((mu   - pmu) / pmu) > 0.01) esl_fatal(msg);
+
+  /* Truncated fitting.
+   * Don't tolerate more than 5% error in mu, 8% in lambda.
+   */
+#ifdef eslAUGMENT_MINIMIZER
+  if ((status = esl_gumbel_FitTruncated(x, n, phi, &mu, &lambda)) != eslOK) esl_fatal(msg);
+  if (fabs((mu     - pmu)    /pmu)     > 0.05) esl_fatal(msg);
+  if (fabs((lambda - plambda)/plambda) > 0.08) esl_fatal(msg);
+#endif /*eslAUGMENT_MINIMIZER*/
+  
+  free(x);
+  return;
+
+ ERROR:
+  if (x) free(x);
+  esl_fatal("allocation failure in esl_gumbel : fitting unit test");
+}
+
+
+static void
+utest_fit_failure(void)
+{
+  char   msg[] = "esl_gumbel: fit_failure unit test failed";
+  double x[10];
+  double mu;
+  double lambda;
+  int    status;
+
+  x[0] = 1.0;
+  x[1] = 1.0;
+
+  /* n=0 or 1 => eslEINVAL. */
+  status = esl_gumbel_FitComplete(x, 1, &mu, &lambda);
+  if (status != eslEINVAL)    esl_fatal(msg);
+  if (mu     != 0.0)          esl_fatal(msg);
+  if (lambda != 0.0)          esl_fatal(msg);
+
+  /* Test for failure on small n => eslENORESULT */
+  status = esl_gumbel_FitComplete(x, 2, &mu, &lambda);
+  if (status != eslENORESULT) esl_fatal(msg);
+  if (mu     != 0.0)          esl_fatal(msg);
+  if (lambda != 0.0)          esl_fatal(msg);
+
+  /* FitCompleteLoc() invalid on n=0,1; but always succeeds for n>1 */
+  status = esl_gumbel_FitCompleteLoc(x, 1, 1.0, &mu);
+  if (status != eslEINVAL)    esl_fatal(msg);
+  if (mu     != 0.0)          esl_fatal(msg);
+
+  /* FitCensored() is eslEINVAL on n=0,1, like FitComplete().
+   */
+  status = esl_gumbel_FitCensored(x, 1, 1, 0.0, &mu, &lambda);
+  if (status != eslEINVAL)    esl_fatal(msg);
+  if (mu     != 0.0)          esl_fatal(msg);
+  if (lambda != 0.0)          esl_fatal(msg);
+
+  /* FitCensored() can fail on small n, w/ eslENORESULT */
+  status = esl_gumbel_FitCensored(x, 2, 1, 0.0, &mu, &lambda);
+  if (status != eslENORESULT) esl_fatal(msg);
+  if (mu     != 0.0)          esl_fatal(msg);
+  if (lambda != 0.0)          esl_fatal(msg);
+
+  /* FitCensoredLoc()invalid on n=0,1; but always succeeds for n>1 */
+  status = esl_gumbel_FitCensoredLoc(x, 1, 1, 0.0, 1.0, &mu);
+  if (status != eslEINVAL)    esl_fatal(msg);
+  if (mu     != 0.0)          esl_fatal(msg);
+
+  /* FitTruncated() w/ n=0,1 => eslEINVAL. */
+  status = esl_gumbel_FitTruncated(x, 1, 0.0, &mu, &lambda);
+  if (status != eslEINVAL)    esl_fatal(msg);
+  if (mu     != 0.0)          esl_fatal(msg);
+  if (lambda != 0.0)          esl_fatal(msg);
+
+  /* FitTruncated() can fail on small n, w/ eslENORESULT */
+  status = esl_gumbel_FitTruncated(x, 2, 0.0, &mu, &lambda);
+  if (status != eslENORESULT) esl_fatal(msg);
+  if (mu     != 0.0)          esl_fatal(msg);
+  if (lambda != 0.0)          esl_fatal(msg);
+
+  return;
+}
+#endif /*eslGUMBEL_TESTDRIVE*/
+
+/*****************************************************************
+ * 10. Test driver.
+ *****************************************************************/ 
+#ifdef eslGUMBEL_TESTDRIVE
+/* compile: gcc -g -Wall -I. -L. -o esl_gumbel_utest -DeslGUMBEL_TESTDRIVE esl_gumbel.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_gumbel_utest -DeslGUMBEL_TESTDRIVE esl_gumbel.c -leasel -lm
+ * run:       ./esl_gumbel_utest
+ * coverage:  ./esl_gumbel_utest; gcov esl_gumbel.c; more esl_gumbel.c.gcov
+ */
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_minimizer.h"
+#include "esl_gumbel.h"
+#include "esl_stats.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs incomp  help                        docgrp */
+  { "-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",           0},
+  { "-s",  eslARG_INT,      "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to <n>", 0},
+  { "-v",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "verbose: show verbose output",  0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for Gumbel distribution routines";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go         = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *rng        = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  int             be_verbose = esl_opt_GetBoolean(go, "-v");
+
+  if (be_verbose) printf("seed = %" PRIu32 "\n", esl_randomness_GetSeed(rng));
+
+  utest_fitting(rng);
+  utest_fit_failure();
+
+  esl_randomness_Destroy(rng);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslGUMBEL_TESTDRIVE*/
+
+
+/*****************************************************************
+ * 11. Example.
+ *****************************************************************/ 
+#ifdef eslGUMBEL_EXAMPLE
+/*::cexcerpt::gumbel_example::begin::*/
+/* compile: gcc -g -Wall -I. -o example -DeslGUMBEL_EXAMPLE -DeslAUGMENT_RANDOM esl_gumbel.c esl_random.c esl_vectorops.c easel.c -lm
+ * run:     ./example
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_gumbel.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_RANDOMNESS *r = esl_randomness_Create(0);;
+  int     n         = 10000; 	/* simulate 10,000 samples */
+  double  mu        = -20.0;       /* with mu = -20 */ 
+  double  lambda    = 0.4;         /* and lambda = 0.4 */
+  double  min       =  9999.;
+  double  max       = -9999.;
+  double *x         = malloc(sizeof(double) * n);
+  double  z, est_mu, est_lambda;
+  int     i;
+
+  for (i = 0; i < n; i++)	/* generate the 10,000 samples */
+    { 
+      x[i] = esl_gumbel_Sample(r, mu, lambda);
+      if (x[i] < min) min = x[i];
+      if (x[i] > max) max = x[i];
+    }
+
+  z = esl_gumbel_surv(max, mu, lambda);           /* right tail p~1e-4 >= max */
+  printf("max = %6.1f  P(>max)  = %g\n", max, z);
+  z = esl_gumbel_cdf(min, mu, lambda);             /* left tail p~1e-4 < min */
+  printf("min = %6.1f  P(<=min) = %g\n", min, z);
+
+  if (esl_gumbel_FitComplete(x, n, &est_mu, &est_lambda) != eslOK) /* fit params to the data */
+    esl_fatal("gumbel ML complete data fit failed");
+
+  z = 100. * fabs((est_mu - mu) / mu);
+  printf("Parametric mu     = %6.1f.  Estimated mu     = %6.2f.  Difference = %.1f%%.\n",
+	 mu, est_mu, z);
+  z = 100. * fabs((est_lambda - lambda) /lambda);
+  printf("Parametric lambda = %6.1f.  Estimated lambda = %6.2f.  Difference = %.1f%%.\n",
+	 lambda, est_lambda, z);
+
+  free(x);
+  esl_randomness_Destroy(r);
+  return 0;
+}
+/*::cexcerpt::gumbel_example::end::*/
+#endif /*eslGUMBEL_EXAMPLE*/
+
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_gumbel.h b/esl_gumbel.h
new file mode 100644
index 0000000..4dddf16
--- /dev/null
+++ b/esl_gumbel.h
@@ -0,0 +1,50 @@
+/* esl_gumbel.h
+ * Gumbel (type I extreme value) distributions.
+ * 
+ * SRE, Mon Jun 27 08:44:41 2005 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslGUMBEL_INCLUDED
+#define eslGUMBEL_INCLUDED
+
+#ifdef eslAUGMENT_RANDOM
+#include <esl_random.h>
+#endif
+
+extern double  esl_gumbel_pdf    (double x, double mu, double lambda);
+extern double  esl_gumbel_logpdf (double x, double mu, double lambda);
+extern double  esl_gumbel_cdf    (double x, double mu, double lambda);
+extern double  esl_gumbel_logcdf (double x, double mu, double lambda);
+extern double  esl_gumbel_surv   (double x, double mu, double lambda);
+extern double  esl_gumbel_logsurv(double x, double mu, double lambda);
+extern double  esl_gumbel_invcdf (double p, double mu, double lambda);
+extern double  esl_gumbel_invsurv(double p, double mu, double lambda);
+
+
+extern double  esl_gumbel_generic_pdf   (double x, void *params);
+extern double  esl_gumbel_generic_cdf   (double x, void *params);
+extern double  esl_gumbel_generic_surv  (double x, void *params);
+extern double  esl_gumbel_generic_invcdf(double p, void *params);
+
+extern int esl_gumbel_Plot(FILE *fp, double mu, double lambda, 
+			   double (*func)(double x, double mu, double lambda), 
+			   double xmin, double xmax, double xstep);
+
+#ifdef eslAUGMENT_RANDOM
+extern double esl_gumbel_Sample(ESL_RANDOMNESS *r, double mu, double lambda);
+#endif
+
+extern int esl_gumbel_FitComplete   (double *x, int n,                    double *ret_mu, double *ret_lambda);
+extern int esl_gumbel_FitCompleteLoc(double *x, int n,                    double lambda,  double *ret_mu);
+extern int esl_gumbel_FitCensored   (double *x, int n, int z, double phi, double *ret_mu, double *ret_lambda);
+extern int esl_gumbel_FitCensoredLoc(double *x, int n, int z, double phi, double lambda,  double *ret_mu);
+#ifdef eslAUGMENT_MINIMIZER
+extern int esl_gumbel_FitTruncated  (double *x, int n,        double phi, double *ret_mu, double *ret_lambda);
+#endif
+
+
+#endif /*eslGUMBEL_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_gumbel.tex b/esl_gumbel.tex
new file mode 100644
index 0000000..8fbf91c
--- /dev/null
+++ b/esl_gumbel.tex
@@ -0,0 +1,624 @@
+
+Gumbel statistics are often used to estimate the statistical
+significance of local alignment scores.
+
+The Gumbel distribution is the so-called Type I extreme value
+distribution (EVD). It occurs so frequently in sequence analysis
+applications, compared to the type II (Fr\'{e}chet) and type III
+(Weibull) extreme value distributions, that ``Gumbel'' and ``EVD'' are
+often used interchangeably in bioinformatics. Easel has a separate
+module, the \eslmod{gev} module, that implements the generalized
+extreme value distribution.
+
+Karlin/Altschul statistics are a special case of the Gumbel
+distribution that apply to the scores of ungapped local alignments
+between infinitely long random sequences. Empirically, Karlin/Altschul
+statistics also apply reasonably well to the more useful case of
+gapped alignment of finite-length sequences. Karlin/Altschul
+statistics predict how the Gumbel's two parameters depend on the
+length of the query and target sequences. In the case of ungapped
+alignments, Karlin/Altschul statistics allow the Gumbel parameters to
+be estimated directly, without the need for a compute-intensive
+simulation.
+
+\subsection{The gumbel API}
+
+The \eslmod{gumbel} API consists of the following functions:
+
+\vspace{0.5em}
+\begin{center}
+\begin{tabular}{ll}\hline
+    \multicolumn{2}{c}{\textbf{evaluating densities and distributions:}}\\
+\ccode{esl\_gumbel\_pdf()}     & Returns the probability density, $P(S=x)$.\\
+\ccode{esl\_gumbel\_logpdf()}  & Returns the log of the pdf, $\log P(S=x)$.\\
+\ccode{esl\_gumbel\_cdf()}     & Returns the cumulative probability distribution, $P(S \leq x)$.\\
+\ccode{esl\_gumbel\_logcdf()}  & Returns the log of the cdf, $\log P(S \leq x)$.\\
+\ccode{esl\_gumbel\_surv()}    & Returns right tail mass, 1-cdf, $P(S > x)$\\
+\ccode{esl\_gumbel\_logsurv()} & Returns log of 1-cdf, $\log P(S > x)$.\\
+    \multicolumn{2}{c}{\textbf{sampling:}}\\
+\ccode{esl\_gumbel\_Sample()}  & Returns a Gumbel-distributed random sample.\\
+    \multicolumn{2}{c}{\textbf{maximum a posteriori parameter fitting:}}\\
+\ccode{esl\_gumbel\_FitComplete()} & Estimates $\mu,\lambda$ from complete data.\\
+\ccode{esl\_gumbel\_FitCompleteLoc()} & Estimates $\mu$ when $\lambda$ is known.\\
+\ccode{esl\_gumbel\_FitCensored()} & Estimates $\mu,\lambda$ from censored data.\\
+\ccode{esl\_gumbel\_FitCensoredLoc()} & Estimates $\mu$ when $\lambda$ is known.\\
+\ccode{esl\_gumbel\_FitTruncated()}& Estimates $\mu,\lambda$ from truncated data.\\\hline
+\end{tabular}
+\end{center}
+\vspace{0.5em}
+
+The Gumbel distribution depends on two parameters, $\mu$ and
+$\lambda$. When $\mu$ and $\lambda$ are known, the statistical
+significance (P-value) of a single score $x$ is $P(S>x)$, obtained by
+a call to \ccode{esl\_gumbel\_surv()}.  The E-value for obtaining that
+score or better in searching a database of $N$ sequences is just
+$NP(S>x)$.
+
+When $\mu$ and $\lambda$ are unknown, they are estimated from scores
+obtained from comparisons of simulated random data. (Analytical
+solutions for $\mu$ and $\lambda$ are only available in the case of
+ungapped sequence alignments.)  The \ccode{esl\_evd\_Fit*()} functions
+provide maximum likelihood parameter fitting routines for different
+types of data. 
+
+\subsubsection{Augmentations: random, minimizer}
+
+The \ccode{esl\_gumbel\_Sample()} function requires augmenting with the
+\eslmod{random} module.
+
+The \ccode{esl\_gumbel\_FitTruncated()} function requires augmenting
+with the \eslmod{minimizer} module.
+
+
+\subsection{Example of using the gumbel API}
+
+An example that samples 10,000 data points from a Gumbel distribution
+with $\mu=-20$, $\lambda=0.4$; reports the min and max samples, and
+the probability mass to the left of the min and to the right of the
+max (both of which should be about $\frac{1}{10000}$, since we took
+10,000 samples); and then fits those simulated data to a Gumbel and
+reports the fitted $\mu$ and $\lambda$:
+
+\input{cexcerpts/gumbel_example}
+
+
+
+\subsection{Gumbel densities}
+
+The probability density function (pdf) and the cumulative distribution
+function (cdf) of the extreme value distribution are:
+
+\begin{equation}
+P(x) = \lambda \exp \left[ -\lambda (x - \mu) - e^{- \lambda (x - \mu)} \right]
+\label{eqn:gumbel_density}
+\end{equation}
+
+\begin{equation}
+P(S < x) = \exp \left[ -e^{-\lambda(x - \mu)} \right]
+\label{eqn:gumbel_distribution}
+\end{equation}
+
+The extreme value density and distribution functions for $\mu = 0$ and
+$\lambda = 1.0$ are shown below.
+
+\begin{center}
+\includegraphics[width=3in]{figures/evd_basic}
+\end{center}
+
+The $\mu$ and $\lambda$ parameters are {\em location} and {\em scale}
+parameters, respectively:
+
+\centerline{
+\begin{minipage}{3in}
+\includegraphics[width=2.8in]{figures/evd_location}
+\end{minipage}
+\begin{minipage}{3in}
+\includegraphics[width=2.8in]{figures/evd_scale}
+\end{minipage}
+}
+
+For more details, a classic reference is \citep{Lawless82}.  Gumbel
+distributions can have their long tail to the right or to the
+left. The form given here is for the long tail to the right.  This is
+the form that arises when the extreme value is a maximum, such as when
+our score is the maximum over the individual scores of all possible
+alignments. The equations in \citep{Lawless82} are for extremal
+minima; use $(x - u) = -(x - \mu)$ and $b = 1 / \lambda$ to convert
+Lawless' notation to the notation used here.
+
+
+\subsection{Fitting Gumbel distributions to observed data}
+
+Given a set of $n$ observed samples $\mathbf{x}$, we may want to
+estimate the $\mu$ and $\lambda$ parameters.
+
+One might try to use linear regression to fit to a $\log \log$
+transformation of the $P(S < x)$ histogram, which gives a straight
+line with slope $-\lambda$ and $x$ intercept $\mu$:
+
+\begin{equation}
+\log \left[ -\log P(S<x) \right] = -\lambda x + \lambda \mu
+\end{equation}
+
+However, the linear regression method is undesirable because it is
+sensitive to outliers. The following table shows the \% error for
+estimating $\hat{\mu}$ and $\hat{\lambda}$ from 500 simulated complete
+datasets, sampled from a Gumbel with $\mu = -20.0$ and $\lambda =
+0.4$, for four different dataset sizes:
+
+\begin{center}
+\begin{tabular}{lrrrr} \hline
+                              & \multicolumn{4}{c}{\# of samples}\\
+                              & 100 & 1000  & 10,000 & 100,000 \\
+\% error in $\hat{\mu}$       &  2\%&   1\% & 0.9\%  &  0.9\%  \\
+max error in $\hat{\mu}$      & 24\%&  13\% &  10\%  &   10\%  \\
+\% error in $\hat{\lambda}$   & 12\%&   7\% &   5\%  &    3\%  \\
+max error in $\hat{\lambda}$  & 49\%&  33\% &  25\%  &   20\%  \\ \hline
+\end{tabular}
+\end{center}
+
+
+A better rough estimate of $\hat{\mu}$ and $\hat{\lambda}$ can be
+obtained from the sample mean $m$ and variance $s^2$ of the observed
+data \citep{Evans00}:\footnote{All simulation data are generated by
+the \eslmod{evd} module's stats driver. The only exception is the
+linear regression fit data, which come from an old version of HMMER.}
+
+\begin{eqnarray*}
+  \hat{\lambda} & = & \frac{\pi}{\sqrt{6s^2}}\\
+  \hat{\mu}     & = & m - \frac{0.57722}{\hat{\lambda}}
+\end{eqnarray*}
+
+The mean/variance method is more accurate than linear regression, as
+shown by the following simulation results:
+
+\begin{center}
+\begin{tabular}{lrrrr} \hline
+                              & \multicolumn{4}{c}{\# of samples}\\
+                              & 100 & 1000  & 10,000 & 100,000 \\
+\% error in $\hat{\mu}$       &  1\%& 0.3\% &  0.1\% & 0.03\%  \\
+max error in $\hat{\mu}$      &  5\%&   1\% &  0.4\% &  0.1\%  \\
+\% error in $\hat{\lambda}$   &  9\%&   3\% &  0.8\% &  0.3\%  \\
+max error in $\hat{\lambda}$  & 40\%&  12\% &    3\% &  0.9\%  \\ \hline
+\end{tabular}
+\end{center}
+
+Still, the mean/variance method is not as accurate as a maximum
+likelihood estimation (especially for $\lambda$). Also, it requires
+complete data, whereas we also need to solve problems where we fit to
+\emph{truncated} or \emph{censored} data. Easel's main estimation
+methods are therefore maximum likelihood methods.
+
+\subsubsection{Maximum likelihood estimation, complete data}
+
+Given $n$ samples $x_1..x_n$ from some distribution that depends on
+parameters $\theta$, we want to estimate maximum likelihood parameter
+estimates $\hat{\theta}$ that maximize the log likelihood:
+
+\[
+   \hat{\theta} = \argmax_{\theta} \sum_{i=1}^{n} \log P(x_i \mid \theta)
+\]
+
+These are also \emph{maximum a posteriori} parameter estimates, if we
+assume a uniform prior $P(\theta)$.
+
+Specifically, for samples $x_i$ drawn from an extreme value
+distribution, the log likelihood to optimize is:
+
+\begin{equation}
+\log L(\lambda, \mu) = n \log \lambda - \sum_{i=1}^{n} \lambda(x_i -
+\mu) - \sum_{i=1}^{n} e^{-\lambda(x_i - \mu)}
+\label{eqn:gumbel_logL}
+\end{equation}
+
+This objective function is differentiable with respect to $\mu$ and
+$\lambda$:
+
+\begin{eqnarray}
+\frac{\partial \log L}{\partial \mu} & = &
+n \lambda - \lambda \sum_{i=1}^{n} e^{-\lambda (x_i - \mu)}\\%
+\\%
+\label{eqn:mupartial}
+\frac{\partial \log L}{\partial \lambda} & = &
+\frac{n}{\lambda} - \sum_{i=1}^{n} (x_i - \mu) +  
+\sum_{i=1}^{n} (x_i - \mu) e^{-\lambda (x_i - \mu)}
+\label{eqn:lambdapartial}
+\end{eqnarray}
+
+The maximum likelihood estimates $\hat{\lambda}$ and $\hat{\mu}$ are
+the solutions to $\frac{\partial \log L}{\partial \mu} = 0$ and
+$\frac{\partial \log L}{\partial \lambda} = 0$. Lawless
+\citep{Lawless82} gives a useful trick here that lets us solve both of
+these simultaneously. When (\ref{eqn:mupartial}) is set to zero, it
+can be used to get $\hat{\mu}$ in terms of $\hat{\lambda}$:
+
+\begin{eqnarray}
+e^{-\hat{\lambda} \hat{\mu}} & = & \frac{1}{n} \sum_{i=1}^{n} e^{-\hat{\lambda} x_i} 
+\label{eqn:substitute}\\
+\hat{\mu} & = & - \frac{1}{\hat{\lambda}} 
+	\log \left[ \frac{1}{n} \sum_{i=1}^{n} e^{-\hat{\lambda} x_i} \right]
+\label{eqn:solvemu}
+\end{eqnarray}
+
+Substituting (\ref{eqn:substitute}) into (\ref{eqn:lambdapartial}),
+gives us an equation for solving $\hat{\lambda}$ in terms of the
+$x_i$'s:
+
+\begin{eqnarray}
+\frac{1}{\hat{\lambda}} - \frac{1}{n} \sum_{i=1}^{n} x_i +
+\frac{\sum_{i=1}^{n} x_i e^{-\hat{\lambda} x_i}}
+     {\sum_{i=1}^{n} e^{-\hat{\lambda} x_i}} 
+& = & 0
+\label{eqn:newtontarget}
+\end{eqnarray}
+
+This is our target function. We could solve it readily enough (by
+bisection search, for example) and obtain $\hat{\lambda}$. We can
+solve it even faster using the Newton/Raphson algorithm, because it is
+differentiable with respect to lambda:
+
+\begin{equation}
+\frac{d}{d\hat{\lambda}} = 
+\frac{\left( \sum_{i=1}^{n} x_i e^{-\hat{\lambda} x_i} \right)^2 } 
+     {\left( \sum_{i=1}^{n} e^{-\hat{\lambda} x_i}     \right)^2 }
+-
+\frac{\sum_{i=1}^{n} x_i^2 e^{-\hat{\lambda} x_i}}
+     {\sum_{i=1}^{n} e^{-\hat{\lambda} x_i}}
+-
+\frac{1}{\hat{\lambda}^2}
+\label{eqn:newtonderivative}
+\end{equation}
+
+Now, the key equations are (\ref{eqn:solvemu}),
+(\ref{eqn:newtontarget}), and (\ref{eqn:newtonderivative}). In
+summary, the inference procedure is the following:
+
+\begin{itemize}
+\item Guess an initial $\hat{\lambda}$ (using the mean/variance
+  method, for example, but any reasonable guess works).
+\item Use Newton/Raphson iterations to find the $\hat{\lambda}$ that satisfies
+      (\ref{eqn:newtontarget}):
+	\begin{itemize}
+	\item calculate the target function $f$ and 
+         its first derivative $f'$ at $\hat{\lambda}$, using 
+	(\ref{eqn:newtontarget}) to calculate $f$ and 
+	(\ref{eqn:newtonderivative}) to calculate $f'$.
+	\item If $f$ is within some absolute tolerance of zero 
+	(e.g., $10^{-6}$), stop; we have found $\hat{\lambda}$.
+	\item Else, estimate a new $\hat{\lambda} = \hat{\lambda} - \frac{f}{f'}$,
+	  and do another iteration.
+	\end{itemize}
+\item Plug $\hat{\lambda}$ into (\ref{eqn:solvemu}) to get $\hat{\mu}$.
+\end{itemize}
+
+This algorithm is implemented in \ccode{esl\_evd\_FitComplete()}.  An
+auxiliary function, \ccode{lawless416()}, calculates the target
+function and its derivative (equations (\ref{eqn:newtontarget}) and
+(\ref{eqn:newtonderivative})) given the current estimate of
+$\hat{\lambda}$.  The name comes from Lawless' equation 4.1.6, the
+target function \citep{Lawless82}.
+
+The accuracy of fitting to simulated data (generated with $\mu=-20$
+and $\lambda=0.4$), collated over 500 simulations, is shown in the
+following table:
+
+\begin{center}
+\begin{tabular}{lrrrr} \hline
+                              & \multicolumn{4}{c}{\# of samples}\\
+                              & 100 & 1000  & 10,000 & 100,000 \\
+\% error in $\hat{\mu}$       &  1\%& 0.3\% &  0.1\% & 0.03\%  \\
+max error in $\hat{\mu}$      &  4\%&   2\% &  0.5\% &  0.1\%  \\
+\% error in $\hat{\lambda}$   &  6\%&   2\% &  0.6\% &  0.2\%  \\
+max error in $\hat{\lambda}$  & 36\%&   9\% &    2\% &  0.8\%  \\ \hline
+\end{tabular}
+\end{center}
+
+This is in accord with theoretical expectation. The distribution of
+$\frac{\lambda}{\hat{\lambda}}$ is approximately normal with mean 1 and
+standard error $\frac{0.78}{\sqrt{N}}$ \citep{Lawless82,Altschul01}. 
+
+% Altschul says \frac{\hat{\lambda}}{\lambda}, actually, but I believe
+% that's wrong. xref J1/46.
+
+
+\subsubsection{Maximum likelihood fitting to censored data}
+
+A \emph{censored} data problem is when we have $N$ samples, but we
+only observe the values of a subset of $n$ samples $x_1..x_n$ that are
+greater or equal to some cutoff $\phi$. The remaining $z = N-n$
+samples are \emph{censored}, and for these we only know that $x <
+\phi$.  $x_i..x_n$, $n$, $\phi$, and $z$ are all known in a censored
+data problem.
+
+To estimate maximum likelihood parameters $\hat{\theta}$ for some
+distribution from censored data \citep{Gelman95}, the log likelihood
+to maximize is:
+
+
+\[ 
+  \hat{\theta} = \argmax_{\theta} z \log P(x<\phi \mid \theta)
+                         + \sum_{i=1}^n \log P(x_i \mid \theta)
+\]
+
+Specifically, when fitting a Gumbel distribution, the log likelihood
+to optimize is:
+
+\begin{equation}
+  \log L(\lambda, \mu) = 
+    n \log \lambda 
+     - z e^{-\lambda(\phi - \mu)}
+     - \sum_{i=1}^{n} \lambda(x_i - \mu) 
+     - \sum_{i=1}^{n} e^{-\lambda(x_i - \mu)}
+\label{eqn:censor_logL}
+\end{equation}
+
+To optimize this, we follow a similar procedure as used for complete
+data \citep{Lawless82}. The log likelihood is differentiable with
+respect to $\lambda$ and $\mu$:
+
+\begin{eqnarray}
+\frac{\partial \log L}{\partial \mu} & = &
+n \lambda  
+- z \lambda e^{-\lambda (\phi - \mu)}
+- \lambda \sum_{i=1}^{n} e^{-\lambda (x_i - \mu)}
+\label{eqn:censor_dmu}
+\\%
+\frac{\partial \log L}{\partial \lambda} & = &
+\frac{n}{\lambda} 
++ z (\phi - \mu) e^{-\lambda (\phi - \mu)}
+- \sum_{i=1}^{n} (x_i - \mu) 
++ \sum_{i=1}^{n} (x_i - \mu) e^{-\lambda (x_i - \mu)}
+\label{eqn:censor_dlambda}
+\end{eqnarray}
+
+Setting (\ref{eqn:censor_dmu}) to zero and solving for $\hat{\mu}$ in
+terms of $\hat{\lambda}$ gives:
+
+\begin{equation}
+\hat{\mu}  =  - \frac{1}{\hat{\lambda}} 
+	\log \left[ \frac{1}{n} 
+	\left( z e^{-\hat{\lambda} \phi} 
+               + \sum_{i=1}^{n} e^{-\hat{\lambda} x_i} \right)
+	\right]
+\label{eqn:censor_solvemu}
+\end{equation}
+
+Substituting (\ref{eqn:censor_solvemu}) into
+(\ref{eqn:censor_dlambda}) gives the target equation:
+
+\begin{equation}
+\frac{1}{\hat{\lambda}} 
+- \frac{1}{n} \sum_{i=1}^{n} x_i +
+\frac{z \phi e^{-\hat{\lambda} \phi} + \sum_{i=1}^{n} x_i e^{-\hat{\lambda} x_i}} 
+     {z e^{-\hat{\lambda} \phi} + \sum_{i=1}^{n} e^{-\hat{\lambda} x_i}} 
+ =  0
+\label{eqn:censor_newtontarget}
+\end{equation}
+
+To use Newton-Raphson root finding (instead of a slower bisection
+search) we also need the first derivative of this target equation with
+respect to $\lambda$:
+
+\begin{equation}
+\frac{d}{d\hat{\lambda}} = 
+\frac{\left( 
+        z \phi e^{-\hat{\lambda} \phi}
+        + \sum_{i=1}^{n} x_i e^{-\hat{\lambda} x_i} 
+       \right)^2 } 
+     {\left( 
+        z e^{-\hat{\lambda} \phi}
+        + \sum_{i=1}^{n} e^{-\hat{\lambda} x_i}     
+       \right)^2 }
+-
+\frac{z \phi^2 e^{-\hat{\lambda} \phi} + \sum_{i=1}^{n} x_i^2 e^{-\hat{\lambda} x_i}}
+     {z  e^{-\hat{\lambda} \phi} + \sum_{i=1}^{n} e^{-\hat{\lambda} x_i}}
+-
+\frac{1}{\hat{\lambda}^2}
+\label{eqn:censor_newtonderiv}
+\end{equation}
+
+In summary: given $n$ observed samples $x_1..x_n$ from a total sample
+of $N$ samples, $z = N-n$ of which were censored because they have
+values $< \phi$, we solve for maximum likelihood estimates
+$\hat{\lambda}$ and $\hat{\mu}$ using the same procedure we used for
+complete data, by using equations (\ref{eqn:censor_solvemu}),
+(\ref{eqn:censor_newtontarget}), and (\ref{eqn:censor_newtonderiv}) in
+place of equations (\ref{eqn:solvemu}), (\ref{eqn:newtontarget}), and
+(\ref{eqn:newtonderivative}). Easel implements this procedure in
+\ccode{esl\_evd\_FitCensored()}.  The target function
+(\ref{eqn:censor_newtontarget}) and its derivative
+(\ref{eqn:censor_newtonderiv}) are implemented in the auxiliary
+function \ccode{lawless422()} \citep{Lawless82}.
+
+Results on 500 simulated datasets with $\mu = -20, \lambda = 0.4$,
+censored at $\phi = -20$ -- the expected peak of the histogram; that
+is, a censored fit only to the right tail, which contains about 63\%
+of the samples:
+
+\begin{center}
+\begin{tabular}{lrrrr} \hline
+ & \multicolumn{4}{c}{\# samples in EVD histogram}\\
+                        & 100 & 1000  & 10,000 & 100,000 \\
+\% error in $\mu$       &  1\%& 0.4\% &  0.1\% &  0.04\%  \\
+max error in $\mu$      &  5\%&   2\% &  0.5\% &  0.2\%  \\
+\% error in $\lambda$   &  9\%&   3\% &  0.9\% &  0.3\%  \\
+max error in $\lambda$  & 33\%&  11\% &    3\% &    1\%  \\ \hline
+\end{tabular}
+\end{center}
+
+\subsubsection{Maximum likelihood fitting to truncated data}
+
+A \emph{truncated} dataset is when we only observe $n$ samples $x_i$,
+and an \emph{unknown} number $z$ of samples less than some threshold
+$\phi$ were unobserved. Thus, only the right tail of $n$ samples $x_i
+\geq \phi$ as observed. In a truncated dataset, $x_1..x_n$, $n$, and
+$\phi$ are known, but $z$ is unknown.
+
+Solving a truncated data problem motivates a Bayesian approach,
+because we need to integrate out (marginalize) the nuisance $z$
+parameter, and to do this, we have to specify a prior distribution for
+$P(z)$. Gelman \emph{et al.} describe a general Bayesian framework for
+thinking about various types of missing data problems, including
+censored and truncated data \citep{Gelman95}.
+
+In short, to obtain maximum likelihood parameters $\hat{\theta}$ for
+some distribution, given truncated data, the log likelihood we wish to
+maximize is:
+
+\begin{equation}
+  \hat{\theta} = \argmax_\theta -n \log P(x \geq \phi \mid \theta) 
+                   + \sum_{i=1}^n \log P(x_i \mid \theta).
+\label{eqn:truncated_objective}
+\end{equation}
+
+\textbf{Detour: derivation of the truncated data likelihood}
+
+The derivation of the above equation may not be immediately obvious.
+The presence of the $n P(x \geq \phi \mid \theta)$ term may be
+counterintuitive, as opposed to the more intuitive $z P(x < \phi \mid
+\theta)$ term that accounts for the missing data in a censored data
+problem. Gelman \emph{et al.} actually don't even show the equation in
+their book; I obtained it from an exercise solution on their web site.
+To convince you (and to remind me) of its correctness, a sketch of the
+derivation follows.
+
+We start with the same likelihood equation that arises in censored
+data for a \emph{known} total number of samples $N$ (where $N=n+z$),
+but since $N$ is unknown, we need to integrate over all possible $N$
+from $n$ to $\infty$:
+
+\begin{eqnarray*}
+   P(\mathbf{x} \mid \theta, \phi) & = &
+    \sum_{N=n}^{\infty}   P(\mathbf{x} \mid \theta, \phi, N) P(N)\\
+   & = & 
+    \prod_{i=1}^n P(x_i \mid \theta) 
+    \left[
+      \sum_{N=n}^\infty {N \choose n} P(x < \phi \mid \theta)^{N-n} P(N)
+    \right]\\
+\end{eqnarray*}
+
+The $\prod_{i=1}^n P(x_i \mid \theta)$ is straightforward; that sum is
+our problem. The trick is to rearrange it so we can treat it as a
+convergent negative binomial series:
+
+\[
+   (1-p)^{-a} = 1 + ap + \frac{a(a+1)}{2!} p^2 +
+   \frac{a(a+1)(a+2)}{3!} p^3...
+\]
+
+To get the sum into the form of this series, Gelman \emph{et al.}
+suggest using an informative prior $P(N) = \frac{1}{N}$, an apparently
+unmotivated choice that happens to make the sum collapse nicely:
+
+\begin{eqnarray*}
+ &=& P(N=n) 
+    + (n+1) P(x < \phi \mid \theta) P(N=n+1) 
+    + \frac{(n+1)(n+2)}{2!} P(x < \phi \mid \theta)^2 P(N=n+2) ...\\
+ &= & \frac{1}{n} \left[
+      1 
+      + n P(x < \phi \mid \theta)
+      + \frac{n(n+1)}{2!} P(x < \phi \mid \theta)^2 
+      + \frac{n(n+1)(n+2)}{3!} P(x < \phi \mid \theta)^3 \right]\\
+ &=& \frac{1}{n} (1 - P(x < \phi \mid \theta))^{-n}\\
+ &=& \frac{1}{n} P(x \geq \phi \mid \theta)^{-n}\\
+\end{eqnarray*}
+
+The $\frac{1}{n}$ is a constant, so we drop it from the likelihood
+equation we'll maximize. Putting this term back together with the
+probability of the observed data and taking the log, we obtain the log
+likelihood in equation (\ref{eqn:truncated_objective}).
+
+Alternatively, we might choose an uninformative improper uniform prior
+$P(N) \propto 1$. This gives a log likelihood that only differs by a
+term of $n+1$ versus $n$:
+
+\begin{equation}
+  \hat{\theta} = \argmax_\theta -(n+1) \log P(x \geq \phi \mid \theta) 
+                   + \sum_{i=1}^n \log P(x_i \mid \theta).
+\end{equation}
+
+However, empirically, this form is ineffective, at least for fitting
+Gumbels. The $\frac{1}{N}$ prior performs much better, probably
+because it constrains the solutions to favor smaller, finite, more
+reasonable choices of $N$.
+
+
+
+\textbf{Back to fitting a truncated Gumbel}
+
+For the specific case of fitting a truncated Gumbel, the log
+likelihood (\ref{eqn:truncated_objective}) to optimize is:
+
+\[
+  \log L(\lambda, \mu) =
+     n \log \lambda 
+     - \sum_{i=1}^{n} \lambda(x_i - \mu) 
+     - \sum_{i=1}^{n} e^{-\lambda(x_i - \mu)}
+     - n \log (1 - \exp(-e^{-\lambda(\phi - \mu)}))
+\label{eqn:truncated_logL}
+\]
+
+This is differentiable with respect to $\lambda$ and $\mu$, but it's
+not going to reduce to the clean root-finding problem that we obtained
+for complete data or censored data. Instead we're going to be left
+with a numerical optimization problem. We can use standard numerical
+optimization code, such as steepest descent or conjugate gradient
+descent. There's just one hitch. These algorithms assume unconstrained
+parameters, but $\lambda$ is constrained to values $>0$. We do a
+change of variables, and use the transformation $\lambda = e^w$ so we
+can optimize the unconstrained parameter $w = \log \lambda$ instead of
+optimizing $\lambda$ directly.  The necessary partial derivatives are
+then:
+
+\begin{eqnarray}
+\frac{\partial \log L}{\partial \mu} & = &
+n \lambda  
+- \lambda \sum_{i=1}^{n} e^{-\lambda (x_i - \mu)}
+- \frac{n \lambda \exp \left[ -\lambda (\phi - \mu) - e^{- \lambda (\phi - \mu)} \right]}
+       {1 - \exp(-e^{-\lambda(\phi - \mu)})}
+\label{eqn:truncated_dmu}
+\\%
+\frac{\partial \log L}{\partial w} & = &
+n 
+- \sum_{i=1}^{n} \lambda(x_i - \mu) 
++ \sum_{i=1}^{n} \lambda(x_i - \mu) e^{-\lambda (x_i - \mu)}
++ \frac{n\lambda (\phi-\mu) \exp \left[ -\lambda (\phi - \mu) - e^{- \lambda (\phi - \mu)} \right]}
+       {1 - \exp(-e^{-\lambda(\phi - \mu)})}
+\label{eqn:truncated_dw}
+\end{eqnarray}
+
+This optimization is carried out by \ccode{esl\_evd\_FitTruncated()}.
+The likelihood (\ref{eqn:truncated_logL}) is implemented in
+\ccode{tevd\_func()}, and the derivatives (\ref{eqn:truncated_dmu}) and
+(\ref{eqn:truncated_dw}) are implemented in \ccode{tevd\_dfunc()}.
+\ccode{esl\_evd\_FitTruncated()} simply sets up the problem and passes
+it all off to a conjugate gradient descent optimizer.
+
+Results on 500 simulated datasets with $\mu = -20, \lambda = 0.4$,
+truncated at $\phi = -20$ (leaving the right tail, containing about
+63\% of the samples):
+
+\begin{center}
+\begin{tabular}{lrrrr} \hline
+                              & \multicolumn{4}{c}{\# samples}\\
+                              & 100 & 1000  & 10,000 & 100,000 \\
+\% error in $\hat{\mu}$       & 13\%&   2\% &  0.8\% &  0.3\%  \\
+max error in $\hat{\mu}$      &260\%&  42\% &    3\% &    1\%  \\
+\% error in $\hat{\lambda}$   & 15\%&   5\% &    2\% &  0.6\%  \\
+max error in $\hat{\lambda}$  & 68\%&  18\% &    6\% &    2\%  \\ \hline
+\end{tabular}
+\end{center}
+
+Fitting truncated Gumbel distributions is difficult, requiring much
+more data than fitting complete or censored data. The problem is that
+the right tail becomes a scale-free exponential when $\phi >> \mu$,
+and $\mu$ becomes undetermined. Fits become very inaccurate as $\phi$
+gets larger than $\mu$, and for sufficiently large $\phi$, the
+numerical optimizer will completely fail.
+
+
+
+
+
+
+
diff --git a/esl_heap.c b/esl_heap.c
new file mode 100644
index 0000000..59a8bdf
--- /dev/null
+++ b/esl_heap.c
@@ -0,0 +1,343 @@
+/* Heaps and priority queues.
+ * See TH Cormen, CE Leiserson, and RL Rivest, _Introduction to Algorithms_, MIT Press, 1999.
+ * 
+ * Contents:
+ *    1. The <ESL_HEAP> object: creation, access.
+ *    2. Rest of the API: inserting, extracting values.
+ *    3. Debugging, development.
+ *    4. Internal functions.
+ *    5. Unit tests.
+ *    6. Test driver.
+ *    7. Copyright and license.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_heap.h"
+
+static int  heap_grow(ESL_HEAP *hp);
+static void iheapify (ESL_HEAP *hp, int idx);
+
+/*****************************************************************
+ * 1. The <ESL_HEAP> object.
+ *****************************************************************/
+
+/* Function:  esl_heap_ICreate()
+ * Synopsis:  Create a heap for storing integers.
+ *
+ * Purpose:   Create a heap for storing integers. <maxormin> is
+ *            <eslHEAP_MIN> or <eslHEAP_MAX>; it states whether
+ *            minimum or maximum values are sorted to the top of the
+ *            heap. 
+ *
+ * Args:      maxormin :  <eslHEAP_MIN | eslHEAP_MAX>
+ *
+ * Returns:   a pointer to the new heap.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_HEAP *
+esl_heap_ICreate(int maxormin)
+{
+  ESL_HEAP *hp = NULL;
+  int       status;
+
+  ESL_DASSERT1(( maxormin == eslHEAP_MIN || maxormin == eslHEAP_MAX));
+
+  ESL_ALLOC(hp, sizeof(ESL_HEAP));
+  hp->idata    = NULL;
+  hp->n        = 0;
+  hp->maxormin = maxormin;
+  
+  ESL_ALLOC(hp->idata, sizeof(int) * eslHEAP_INITALLOC);
+  hp->nalloc   = eslHEAP_INITALLOC;
+
+  return hp;
+
+ ERROR:
+  esl_heap_Destroy(hp);
+  return NULL;
+}
+
+/* Function:  esl_heap_GetCount()
+ * Synopsis:  Returns the number of items in the heap.
+ */
+int
+esl_heap_GetCount(ESL_HEAP *hp)
+{
+  return hp->n;
+}
+
+/* Function:  esl_heap_IGetTopVal()
+ * Synopsis:  Peeks at and returns the best (topmost) value in the heap.
+ *
+ * Purpose:   Peek at the best (topmost) value in heap <hp> and
+ *            return it. The heap is unaffected. If the heap is
+ *            empty, return 0.
+ */
+int
+esl_heap_IGetTopVal(ESL_HEAP *hp)
+{
+  return (hp->n ? hp->idata[0] : 0);
+}
+
+
+/* Function:  esl_heap_Reuse()
+ * Synopsis:  Reuse a heap.
+ *
+ * Purpose:   As an alternative to destroy'ing an old heap and
+ *            create'ing a new one, empty this heap and reinitialize
+ *            it, as if it is a freshly created heap of the same
+ *            data type and same <maxormin>.
+ *
+ * Returns:   <eslOK>
+ */
+int
+esl_heap_Reuse(ESL_HEAP *hp)
+{
+  hp->n = 0;
+  return eslOK;
+}
+
+
+/* Function:  esl_heap_Destroy()
+ * Synopsis:  Free a heap.
+ *
+ * Purpose:   Destroys heap <hp>, of any data type.
+ *
+ * Returns:   (void)
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+void
+esl_heap_Destroy(ESL_HEAP *hp)
+{
+  if (hp) 
+    {
+      if (hp->idata) free(hp->idata);
+      free (hp);
+    }
+}
+
+/*****************************************************************
+ * 2. Rest of the API: inserting, extracting values
+ *****************************************************************/
+
+/* Function:  esl_heap_IInsert()
+ * Synopsis:  Insert a value into the heap.
+ *
+ * Purpose:   Insert value <val> into heap <hp>.
+ * 
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int 
+esl_heap_IInsert(ESL_HEAP *hp, int val)
+{
+  int idx, parentidx;
+  int status;
+
+  if (hp->n == hp->nalloc && (status = heap_grow(hp)) != eslOK) return status;
+
+  hp->n++;
+  idx = hp->n - 1;
+  while (idx > 0 && (hp->maxormin == eslHEAP_MIN ? hp->idata[ESL_HEAP_PARENT(idx)] > val : hp->idata[ESL_HEAP_PARENT(idx)] < val))
+    {
+      parentidx = ESL_HEAP_PARENT(idx);
+      hp->idata[idx] = hp->idata[parentidx];
+      idx = parentidx;
+    }
+  hp->idata[idx] = val;
+  return eslOK;
+}
+
+
+/* Function:  esl_heap_IExtractTop()
+ * Synopsis:  Extract the top value from the heap.
+ *
+ * Purpose:   Extract the best (topmost) value from heap <hp>.
+ *            Delete it from the heap. Return it in <*opt_val>.
+ *
+ *            To simply delete the topmost value (without retrieving
+ *            its value), pass <NULL> for <opt_val>.
+
+ *            If the heap is empty, return <eslEOD>, and
+ *            <*opt_val> is 0.
+ *
+ * Returns:   <eslOK> on success, and <*opt_val> is the extracted
+ *            topmost value.
+ *
+ *            <eslEOD> if the heap is empty; <*opt_val> is 0.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_heap_IExtractTop(ESL_HEAP *hp, int *opt_val)
+{
+  int bestval;
+
+  if (hp->n == 0) { *opt_val = 0; return eslEOD; }
+
+  bestval = hp->idata[0];
+
+  hp->idata[0] = hp->idata[hp->n-1];
+  hp->n--;
+  iheapify(hp, 0);
+  
+  if (opt_val) *opt_val = bestval;
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 3. Debugging, development.
+ *****************************************************************/
+
+int
+esl_heap_Validate(ESL_HEAP *hp, char *errbuf)
+{
+  int idx, lidx, ridx;
+
+  for (idx = 0; idx < hp->n; idx++)
+    {
+      lidx = ESL_HEAP_LEFT(idx);
+      ridx = lidx+1;
+      if (lidx < hp->n && ( hp->maxormin == eslHEAP_MIN ? hp->idata[lidx] < hp->idata[idx] : hp->idata[lidx] > hp->idata[idx] ))
+	ESL_FAIL(eslFAIL, errbuf, "at %d (value %d): left child %d (value %d) is better", idx, hp->idata[idx], lidx, hp->idata[lidx]);
+      if (ridx < hp->n && ( hp->maxormin == eslHEAP_MIN ? hp->idata[ridx] < hp->idata[idx] : hp->idata[ridx] > hp->idata[idx] ))
+	ESL_FAIL(eslFAIL, errbuf, "at %d (value %d): right child %d (value %d) is better", idx, hp->idata[idx], ridx, hp->idata[ridx]);
+    }
+  return eslOK;
+}
+
+/*****************************************************************
+ * 4. Internal functions
+ *****************************************************************/
+
+static int
+heap_grow(ESL_HEAP *hp)
+{
+  int status;
+
+  if (hp->idata) {
+    ESL_REALLOC(hp->idata, sizeof(int) * (hp->nalloc*2));
+    hp->nalloc += hp->nalloc;
+  }
+  return eslOK;
+
+ ERROR:
+  return eslEMEM;
+}
+
+
+static void
+iheapify(ESL_HEAP *hp, int idx)
+{
+  int bestidx  = idx;
+  int leftidx, rightidx;
+
+  while (1)			/* while loop avoids recursive heapify call */
+    {
+      leftidx  = ESL_HEAP_LEFT(idx);
+      rightidx = leftidx+1;
+      if (leftidx  < hp->n && (hp->maxormin == eslHEAP_MIN ? hp->idata[leftidx]  < hp->idata[idx]     : hp->idata[leftidx]  > hp->idata[idx]) )     bestidx = leftidx;
+      if (rightidx < hp->n && (hp->maxormin == eslHEAP_MIN ? hp->idata[rightidx] < hp->idata[bestidx] : hp->idata[rightidx] > hp->idata[bestidx]) ) bestidx = rightidx;
+      if (bestidx == idx) break; /* nothing needed to be changed: either because <idx> satisfies heap property, or because it has no children */
+      ESL_SWAP(hp->idata[idx], hp->idata[bestidx], int);
+      idx = bestidx;
+    }
+}
+
+
+/*****************************************************************
+ * 5. Unit tests
+ *****************************************************************/
+#ifdef eslHEAP_TESTDRIVE
+#include "esl_random.h"
+
+static void
+utest_sorting(ESL_RANDOMNESS *rng)
+{
+  char     *msg = "utest_sorting():: unit test failure";
+  ESL_HEAP *hp  = NULL;
+  int *val      = NULL;
+  int  nv       = 1 + esl_rnd_Roll(rng, 10000);
+  char errbuf[eslERRBUFSIZE];
+  int  i,n2,x;
+
+  /* Create an array of numbers 1..nv in randomized order. */
+  if ( (val = malloc(sizeof(int) * nv)) == NULL) esl_fatal("utest_sorting():: allocation failed");
+  for (i = 0; i < nv; i++) val[i] = i+1;
+  for (n2 = nv; n2 > 1; n2--)  
+    { /* a compact Fisher-Yates shuffle. Can't put the Roll() into the ESL_SWAP(), because it's a macro: avoid double evaluation */
+      i = esl_rnd_Roll(rng, n2);
+      ESL_SWAP( val[i], val[n2-1], int); 
+    }
+
+  /* Add those numbers (in their randomized order) to a min heap */
+  if ( (hp = esl_heap_ICreate(eslHEAP_MIN)) == NULL) esl_fatal(msg);
+  for (i = 0; i < nv; i++)
+    if (esl_heap_IInsert(hp, val[i])  != eslOK) esl_fatal(msg);
+  if (esl_heap_Validate(hp, errbuf) != eslOK) esl_fatal("utest: heap validation fails: %s", errbuf);  
+
+  /* Now if we pull numbers off the heap, they'll come off in sorted order, 1..nv */
+  for (i = 1; i <= nv; i++)
+    {
+      if (esl_heap_IExtractTop(hp, &x) != eslOK) esl_fatal(msg);
+      if (x != i)                                esl_fatal(msg);
+      if (hp->n != nv-i)                         esl_fatal(msg);
+    }
+
+  esl_heap_Destroy(hp);
+  free(val);
+}
+  
+#endif /*eslHEAP_TESTDRIVE*/
+
+/*****************************************************************
+ * 6. Test driver
+ *****************************************************************/
+#ifdef eslHEAP_TESTDRIVE
+
+#include "easel.h"
+#include "esl_getopts.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                              docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                     0},
+  {"-s",  eslARG_INT,       "0", NULL, NULL, NULL, NULL, NULL, "set random number seed to <n>",           0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for ESL_HEAP: heaps and priority queues";
+
+int
+main(int argc, char **argv)
+{
+   ESL_GETOPTS    *go  = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+   ESL_RANDOMNESS *rng = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+
+   fprintf(stderr, "## %s\n", argv[0]);
+   fprintf(stderr, "#  rng seed = %" PRIu32 "\n", esl_randomness_GetSeed(rng));
+
+   utest_sorting(rng);
+   
+   fprintf(stderr, "#  status = ok\n");
+
+   esl_getopts_Destroy(go);
+   esl_randomness_Destroy(rng);
+   return 0;
+}
+
+#endif /*eslHEAP_TESTDRIVE*/
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_heap.h b/esl_heap.h
new file mode 100644
index 0000000..88caa45
--- /dev/null
+++ b/esl_heap.h
@@ -0,0 +1,44 @@
+/* Heaps and priority queues.
+ * See TH Cormen, CE Leiserson, and RL Rivest, _Introduction to Algorithms_, MIT Press, 1999.
+ */
+#ifndef eslHEAP_INCLUDED
+#define eslHEAP_INCLUDED
+
+#include "esl_config.h"
+
+#define eslHEAP_INITALLOC 128
+
+#define eslHEAP_MIN   0
+#define eslHEAP_MAX   1
+
+#define ESL_HEAP_PARENT(i)  ( ((i)-1) / 2  )
+#define ESL_HEAP_LEFT(i)    ( ((i)*2) + 1 )
+#define ESL_HEAP_RIGHT(i)   ( ((i)+1) * 2  )
+
+typedef struct esl_heap_s {
+  int *idata;
+
+  int  n;
+  int  nalloc;
+  int  maxormin;		/* eslHEAP_MAX | eslHEAP_MIN */
+} ESL_HEAP;
+
+extern ESL_HEAP *esl_heap_ICreate   (int maxormin);
+extern int       esl_heap_GetCount  (ESL_HEAP *hp);
+extern int       esl_heap_IGetTopVal(ESL_HEAP *hp);
+extern int       esl_heap_Reuse     (ESL_HEAP *hp);
+extern void      esl_heap_Destroy   (ESL_HEAP *hp);
+
+extern int       esl_heap_IInsert(ESL_HEAP *hp, int val);
+
+extern int       esl_heap_IExtractTop(ESL_HEAP *hp, int *ret_val);
+
+extern int       esl_heap_IGetTop(ESL_HEAP *hp);
+
+#endif /*eslHEAP_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_histogram.c b/esl_histogram.c
new file mode 100644
index 0000000..df4d463
--- /dev/null
+++ b/esl_histogram.c
@@ -0,0 +1,2070 @@
+/* Collecting and displaying histograms.
+ * 
+ *  1. Creating/destroying histograms and collecting data.
+ *  2. Declarations about the binned data before parameter fitting.
+ *  3. Routines for accessing data samples in a full histogram.
+ *  4. Setting expected counts
+ *  5. Output and display of binned data.
+ *  6. Test driver.
+ *  7. Examples.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <float.h>
+#include <limits.h>
+
+#include "easel.h"
+#include "esl_stats.h"
+#include "esl_histogram.h"
+#include "esl_vectorops.h"
+
+static int esl_histogram_sort(ESL_HISTOGRAM *h);
+
+
+/*****************************************************************
+ * 1. Creating/destroying histograms and collecting data.
+ *****************************************************************/
+
+/* Function:  esl_histogram_Create()
+ * Synopsis:  Create a new <ESL_HISTOGRAM>.
+ *
+ * Purpose:   Creates and returns a new histogram object, initially
+ *            allocated to count values $>$ <bmin> and $<=$ <bmax> into
+ *            bins of width <w>. Thus, a total of <bmax>-<bmin>/<w> bins
+ *            are initially created. 
+ *            
+ *            The lower bound <bmin> and the width <w> permanently
+ *            determine the offset and width of the binning, but not
+ *            the range.  For example, <esl_histogram_Create(-100,
+ *            100, 0.5)> would initialize the object to collect scores into
+ *            400 bins $[-100< x \leq -99.5],[-99.5 < x \leq
+ *            -99.0]...[99.5 <x \leq 100.0]$.  Aside from this, the
+ *            range specified by the bounds <bmin> and <bmax> only
+ *            needs to be an initial guess. The histogram object will
+ *            reallocate itself dynamically as needed to accommodate
+ *            scores that exceed current bounds.
+ *
+ *            You can be sloppy about <bmax>; it does not have to
+ *            exactly match a bin upper bound. The initial allocation
+ *            is for all full-width bins with upper bounds $\leq
+ *            bmax$.
+ *
+ *            <esl_histogram_Create()> creates a simplified histogram
+ *            object that collates only the "display" histogram. For
+ *            a more complex object that also keeps the raw data samples,
+ *            better suited for fitting distributions and goodness-of-fit
+ *            testing, use <esl_histogram_CreateFull()>.
+ *            
+ *            There is currently no way to alter where the equals sign
+ *            is, in setting the bin bounds: that is, you can't make bins
+ *            that have <bmin> $\leq x$ and $x <$ <bmax>, alas.
+
+ *  
+ * Args:      bmin - caller guesses that minimum score will be > bmin
+ *            bmax - caller guesses that max score will be <= bmax
+ *            w    - size of bins (1.0, for example)
+ *            
+ * Returns:   ptr to new <ESL_HISTOGRAM> object, which caller is responsible
+ *            for free'ing with <esl_histogram_Destroy()>.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_HISTOGRAM *
+esl_histogram_Create(double bmin, double bmax, double w)
+{
+  ESL_HISTOGRAM *h = NULL;
+  int status;
+  int i;
+
+  ESL_ALLOC(h, sizeof(ESL_HISTOGRAM));
+
+  h->xmin      =  DBL_MAX;	/* xmin/xmax are the observed min/max */
+  h->xmax      = -DBL_MAX;
+  h->n         = 0;
+  h->obs       = NULL;		/* will get allocated below... */
+  h->bmin      = bmin;		/* bmin/bmax are the allocated bounds */
+  h->bmax      = bmax;
+  h->nb        = (int)((bmax-bmin)/w);
+  h->imin      = h->nb;
+  h->imax      = -1;
+  h->w         = w;
+
+  h->x         = NULL;
+  h->nalloc    = 0;
+
+  h->phi       = 0.;
+  h->cmin      = h->imin;	/* sentinel: no observed data yet */
+  h->z         = 0;
+  h->Nc        = 0;
+  h->No        = 0;
+
+  h->expect    = NULL;		/* 'til a Set*() call */
+  h->emin      = -1;            /* sentinel: no expected counts yet */
+  h->tailbase  = 0.;		/* unused unless is_tailfit TRUE */
+  h->tailmass  = 1.0;		/* <= 1.0 if is_tailfit TRUE */
+
+  h->is_full       = FALSE;
+  h->is_done       = FALSE;
+  h->is_sorted     = FALSE;
+  h->is_tailfit    = FALSE;
+  h->is_rounded    = FALSE;
+  h->dataset_is    = COMPLETE;
+
+  ESL_ALLOC(h->obs, sizeof(uint64_t) * h->nb);
+  for (i = 0; i < h->nb; i++) h->obs[i] = 0;
+  return h;
+
+ ERROR:
+  esl_histogram_Destroy(h);
+  return NULL;
+}
+
+/* Function:  esl_histogram_CreateFull()
+ * Synopsis:  A <ESL_HISTOGRAM> to keep all data samples.
+ *
+ * Purpose:   Alternative form of <esl_histogram_Create()> that 
+ *            creates a more complex histogram that will contain not just the 
+ *            display histogram, but also keeps track of all
+ *            the raw sample values. Having a complete vector of raw
+ *            samples improves distribution-fitting and goodness-of-fit 
+ *            tests, but will consume more memory. 
+ */
+ESL_HISTOGRAM *
+esl_histogram_CreateFull(double bmin, double bmax, double w)
+{
+  int status;
+  ESL_HISTOGRAM *h = esl_histogram_Create(bmin, bmax, w);
+  if (h == NULL) return NULL;
+
+  h->n      = 0;		/* make sure */
+  h->nalloc = 128;		/* arbitrary initial allocation size */
+  ESL_ALLOC(h->x, sizeof(double) * h->nalloc);
+  h->is_full = TRUE;
+  return h;
+
+ ERROR:
+  esl_histogram_Destroy(h);
+  return NULL;
+}
+
+
+/* Function:  esl_histogram_Destroy()
+ * Synopsis:  Frees a <ESL_HISTOGRAM>.
+ *
+ * Purpose:   Frees an <ESL_HISTOGRAM> object <h>.
+ */
+void
+esl_histogram_Destroy(ESL_HISTOGRAM *h)
+{
+  if (h ==  NULL) return;
+  if (h->x      != NULL) free(h->x);
+  if (h->obs    != NULL) free(h->obs); 
+  if (h->expect != NULL) free(h->expect);
+  free(h);
+  return;
+}
+
+/* Function:  esl_histogram_Score2Bin()
+ * Synopsis:  Given a real-valued <x>; calculate integer bin <b>
+ *
+ * Purpose:   For a real-valued <x>, figure out what bin it would
+ *            go into in the histogram <h>; return this value in
+ *            <*ret_b>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslERANGE> if bin <b> would exceed the range of
+ *            an integer; for instance, if <x> isn't finite.
+ *
+ * Xref:      J5/122. Replaces earlier macro implementation;
+ *            we needed to range check <x> better.
+ */
+int
+esl_histogram_Score2Bin(ESL_HISTOGRAM *h, double x, int *ret_b)
+{
+  int status;
+
+  if (! isfinite(x)) ESL_XEXCEPTION(eslERANGE, "value added to histogram is not finite");
+
+  x = ceil( ((x - h->bmin) / h->w) - 1.); 
+  
+  /* x is now the bin number as a double, which we will convert to
+   * int. Because x is a double (64-bit), we know all ints are exactly
+   * represented.  Check for under/overflow before conversion.
+   */
+  if (x < (double) INT_MIN || x > (double) INT_MAX) 
+    ESL_XEXCEPTION(eslERANGE, "value %f isn't going to fit in histogram", x);
+
+  *ret_b = (int) x;
+  return eslOK;
+
+ ERROR:
+  *ret_b = 0;
+  return status;
+}
+
+
+/* Function:  esl_histogram_Add()
+ * Synopsis:  Add a sample to the histogram.
+ *
+ * Purpose:   Adds score <x> to a histogram <h>.
+ *           
+ *            The histogram will be automatically reallocated as
+ *            needed if the score is smaller or larger than the
+ *            current allocated bounds.  
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on reallocation failure.
+ *
+ *            <eslERANGE> if <x> is beyond the reasonable range for
+ *            the histogram to store -- either because it isn't finite,
+ *            or because the histogram would need to allocate a number
+ *            of bins that exceeds <INT_MAX>.
+ *
+ *            Throws <eslEINVAL> for cases where something has been done
+ *            to the histogram that requires it to be 'finished', and
+ *            adding more data is prohibited; for example, 
+ *            if tail or censoring information has already been set.
+ *            On either failure, initial state of <h> is preserved.
+ */
+int
+esl_histogram_Add(ESL_HISTOGRAM *h, double x)
+{
+  int   status;
+  void *tmp;
+  int b;			/* what bin we're in                       */
+  int nnew;			/* # of new bins created by a reallocation */
+  int bi;
+
+  /* Censoring info must only be set on a finished histogram;
+   * don't allow caller to add data after configuration has been declared
+   */
+  if (h->is_done)
+    ESL_EXCEPTION(eslEINVAL, "can't add more data to this histogram");
+
+  /* If we're a full histogram, check whether we need to reallocate
+   * the full data vector.
+   */
+  if (h->is_full && h->nalloc == h->n) 
+    {
+      ESL_RALLOC(h->x, tmp, sizeof(double) * h->nalloc * 2);
+      h->nalloc *= 2;
+    }
+
+  /* Which bin will we want to put x into?
+   */
+  if ((status = esl_histogram_Score2Bin(h,x, &b)) != eslOK) return status;
+
+  /* Make sure we have that bin. Realloc as needed.
+   * If that reallocation succeeds, we can no longer fail;
+   * so we can change the state of h.
+   */
+  if (b < 0)    /* Reallocate below? */
+    {				
+      nnew = -b*2;	/* overallocate by 2x */
+      if (nnew > INT_MAX - h->nb)
+	ESL_EXCEPTION(eslERANGE, "value %f requires unreasonable histogram bin number", x);
+      ESL_RALLOC(h->obs, tmp, sizeof(uint64_t) * (nnew+ h->nb));
+      
+      memmove(h->obs+nnew, h->obs, sizeof(uint64_t) * h->nb);
+      h->nb    += nnew;
+      b        += nnew;
+      h->bmin  -= nnew*h->w;
+      h->imin  += nnew;
+      h->cmin  += nnew;
+      if (h->imax > -1) h->imax += nnew;
+      for (bi = 0; bi < nnew; bi++) h->obs[bi] = 0;
+    }
+  else if (b >= h->nb)  /* Reallocate above? */
+    {
+      nnew = (b-h->nb+1) * 2; /* 2x overalloc */
+      if (nnew > INT_MAX - h->nb) 
+	ESL_EXCEPTION(eslERANGE, "value %f requires unreasonable histogram bin number", x);
+      ESL_RALLOC(h->obs, tmp, sizeof(uint64_t) * (nnew+ h->nb));
+      for (bi = h->nb; bi < h->nb+nnew; bi++) h->obs[bi] = 0;
+      if (h->imin == h->nb) { /* boundary condition of no data yet*/
+	h->imin+=nnew; 
+	h->cmin+=nnew;
+      }
+      h->bmax  += nnew*h->w;
+      h->nb    += nnew;
+    }
+
+  /* If we're a full histogram, then we keep the raw x value,
+   * reallocating as needed.
+   */
+  if (h->is_full)  h->x[h->n] = x;
+  h->is_sorted = FALSE;		/* not any more! */
+
+  /* Bump the bin counter, and all the data sample counters.
+   */
+  h->obs[b]++;
+  h->n++;
+  h->Nc++;
+  h->No++;
+
+  if (b > h->imax) h->imax = b;
+  if (b < h->imin) { h->imin = b; h->cmin = b; }
+  if (x > h->xmax) h->xmax = x;
+  if (x < h->xmin) h->xmin = x;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+  
+
+/* esl_histogram_sort()
+ *
+ * Purpose:   Sort the raw scores in a full histogram, from smallest to
+ *            largest. Has no effect on a normal histogram, or on a full
+ *            histogram that is already sorted.
+ *
+ * Returns:   <eslOK> on success.
+ *            Upon return, <h->x[h->n-1]> is the high score, <h->x[0]> is the 
+ *            low score. 
+ */
+int
+esl_histogram_sort(ESL_HISTOGRAM *h)
+{
+  if (h->is_sorted) return eslOK; /* already sorted, don't do anything */
+  if (! h->is_full) return eslOK; /* nothing to sort */
+  
+  esl_vec_DSortIncreasing(h->x, h->n);
+  h->is_sorted = TRUE;
+  return eslOK;
+}
+
+/*****************************************************************
+ * 2. Declarations about the binned data before parameter fitting
+ *****************************************************************/ 
+
+/* Function:  esl_histogram_DeclareCensoring()
+ * Synopsis:  Collected data were left-censored.
+ *
+ * Purpose:   Declare that the dataset collected in <h> is known to be a
+ *            censored distribution, where <z> samples were unobserved because
+ *            they had values $\leq$ some threshold <phi> ($\phi$).
+ *            
+ *            No more data can be added to the histogram with <_Add()>
+ *            after censoring information has been set.
+ *            
+ *            This function is for "true" censored datasets, where
+ *            the histogram truly contains no observed points
+ *            $x \leq \phi$, and the number that were censored is known
+ *            to be <z>. 
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if you try to set <phi> to a value that is
+ *            greater than the minimum <x> stored in the histogram.
+ */
+int
+esl_histogram_DeclareCensoring(ESL_HISTOGRAM *h, int z, double phi)
+{
+  if (phi > h->xmin) ESL_EXCEPTION(eslEINVAL, "no uncensored x can be <= phi");
+
+  h->phi         = phi;
+  h->cmin        = h->imin;
+  h->z           = z;
+  h->Nc          = h->n + z;
+  h->No          = h->n;
+  h->dataset_is  = TRUE_CENSORED;
+  h->is_done     = TRUE;
+  return eslOK;
+}
+
+/* Function:  esl_histogram_DeclareRounding()
+ * Synopsis:  Declare collected data were no more accurate than bins.
+ *
+ * Purpose:   Declare that the data sample values in the histogram <h>
+ *            are rounded off. Ideally, your bins in <h> should exactly 
+ *            match the rounding procedure. This raises a flag that
+ *            binned parameter fitting routines will use when they set
+ *            an origin, using the lower bound of the bin instead of
+ *            the lowest raw value in the bin.
+ */
+int
+esl_histogram_DeclareRounding(ESL_HISTOGRAM *h)
+{
+  h->is_rounded = TRUE;
+  return eslOK;
+}
+
+
+/* Function:  esl_histogram_SetTail()
+ * Synopsis:  Declare only tail $>$ some threshold is considered "observed".
+ *
+ * Purpose:   Suggest a threshold <phi> to split a histogram <h>
+ *            into "unobserved" data (values $\leq \phi$) and "observed" 
+ *            data (values $> \phi$). 
+ *
+ *            The suggested <phi> is revised downwards to a $\phi$ at the next 
+ *            bin lower bound, because operations on binned data in <h>
+ *            need to know unambiguously whether all the data in a given bin
+ *            will be counted as observed or unobserved. 
+ *
+ *            The probability mass that is in the resulting right tail
+ *            is optionally returned in <ret_newmass>. You need to know
+ *            this number if you're fitting a distribution solely to the
+ *            tail (an exponential tail, for example).
+ *
+ *            Any data point $x_i \leq \phi$ is then considered to be
+ *            in a censored (unobserved) region for purposes of parameter
+ *            fitting, calculating expected binned counts,
+ *            and binned goodness-of-fit tests. 
+ *            
+ *            No more data can be added to the histogram after
+ *            censoring information has been set.
+ *            
+ *            This function defines a "virtual" left-censoring: the
+ *            histogram actually contains complete data, but appropriate
+ *            flags are set to demarcate the "observed" data in the right
+ *            tail.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslERANGE> if <phi> is an unreasonable value that
+ *            can't be converted to an integer bin value.
+ */
+int
+esl_histogram_SetTail(ESL_HISTOGRAM *h, double phi, double *ret_newmass)
+{
+  int b;
+  int status;
+
+  /* Usually, put true phi at the next bin lower bound, but
+   * watch for a special case where phi is already exactly equal to a 
+   * bin upper bound.
+   */
+  if ((status = esl_histogram_Score2Bin(h,phi, &(h->cmin))) != eslOK) return status;
+  if (phi == esl_histogram_Bin2UBound(h,h->cmin)) h->phi = phi;
+  else   h->phi  = esl_histogram_Bin2LBound(h, h->cmin);
+
+  h->z    = 0;
+  for (b = h->imin; b < h->cmin; b++)
+    h->z += h->obs[b];
+  h->Nc         = h->n;		/* (redundant) */
+  h->No         = h->n - h->z;
+  h->dataset_is = VIRTUAL_CENSORED;
+  h->is_done    = TRUE;
+  if (ret_newmass != NULL) *ret_newmass = (double) h->No / (double) h->Nc;
+  return eslOK;
+}
+
+/* Function:  esl_histogram_SetTailByMass()
+ * Synopsis:  Declare only right tail mass is considered "observed".
+ *
+ * Purpose:   Given a histogram <h> (with or without raw data samples),
+ *            find a cutoff score that at least fraction <pmass> of the samples
+ *            exceed. This threshold is stored internally in the histogram
+ *            as <h->phi>. The number of "virtually censored" samples (to the 
+ *            left, with scores $\leq \phi$) is stored internally in <h->z>.
+ *            
+ *            The identified cutoff score must be a lower bound for some bin
+ *            (bins can't be partially censored). The censored mass
+ *            will thus usually be a bit greater than <pmass>, as the
+ *            routine will find the highest satisfactory <h->phi>. The
+ *            narrower the bin widths, the more accurately the routine
+ *            will be able to satisfy the requested <frac>. The actual
+ *            probability mass in the right tail is optionally returned
+ *            in <ret_newmass>. You need to know this number if you're 
+ *            fitting a distribution solely to the tail (an exponential tail,
+ *            for example). It is safe for <ret_newmass> to point at 
+ *            <pmass>, in which case the suggested <pmass> will be overwritten
+ *            with the actual mass upon return.
+ *
+ *            This function defines that the binned data will be
+ *            fitted either as a tail, or as a (virtually) left-censored dataset.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_histogram_SetTailByMass(ESL_HISTOGRAM *h, double pmass, double *ret_newmass)
+{
+  int b;
+  uint64_t sum = 0;
+	    
+  for (b = h->imax; b >= h->imin; b--)
+    {
+      sum += h->obs[b];
+      if (sum >= (pmass * (double)h->n)) break;
+    }
+
+  h->phi         = esl_histogram_Bin2LBound(h,b);
+  h->z           = h->n - sum;
+  h->cmin        = b;
+  h->Nc          = h->n;	/* (redundant) */
+  h->No          = h->n - h->z;
+  h->dataset_is  = VIRTUAL_CENSORED;
+  h->is_done     = TRUE;
+  if (ret_newmass != NULL) *ret_newmass = (double) h->No / (double) h->Nc;
+  return eslOK;
+}
+
+
+
+/*****************************************************************
+ * 3. Routines for accessing data samples in a full histogram.
+ *****************************************************************/
+
+/* Function:  esl_histogram_GetRank()
+ * Synopsis:  Retrieve n'th high score.
+ *
+ * Purpose:   Retrieve the <rank>'th highest score from a 
+ *            full histogram <h>. <rank> is <1..n>, for
+ *            <n> total samples in the histogram; return it through
+ *            <ret_x>.
+ *            
+ *            If the raw scores aren't sorted, they are sorted
+ *            first (an $N \log N$ operation).
+ *            
+ *            This can be called at any time, even during data
+ *            collection, to see the current <rank>'th highest score.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if the histogram is display-only,
+ *            or if <rank> isn't in the range 1..n.
+ */
+int
+esl_histogram_GetRank(ESL_HISTOGRAM *h, int rank, double *ret_x)
+{
+  if (! h->is_full) 
+    ESL_EXCEPTION(eslEINVAL, 
+	      "esl_histogram_GetRank() needs a full histogram");
+  if (rank > h->n)
+    ESL_EXCEPTION(eslEINVAL, 
+	      "no such rank: not that many scores in the histogram");
+  if (rank < 1)
+    ESL_EXCEPTION(eslEINVAL, "histogram rank must be a value from 1..n");
+
+  esl_histogram_sort(h);	/* make sure */
+  *ret_x = h->x[h->n - rank];
+  return eslOK;
+}
+
+/* Function:  esl_histogram_GetData()
+ * Synopsis:  Retrieve vector of all raw scores.
+ *
+ * Purpose:   Retrieve the raw data values from the histogram <h>.
+ *            Return them in the vector <ret_x>, and the number
+ *            of values in <ret_n>. The values are indexed <[0..n-1]>,
+ *            from smallest to largest (<x[n-1]> is the high score).
+ *            
+ *            <ret_x> is a pointer to internal memory in the histogram <h>.
+ *            The histogram <h> is still responsible for that storage;
+ *            its memory will be free'd when you call
+ *            <esl_histogram_Destroy()>.
+ *            
+ *            You can only call this after you have finished collecting
+ *            all the data. Subsequent calls to <esl_histogram_Add()>
+ *            will fail.
+ *            
+ * Internal note:
+ *            The prohibition against adding more data (by raising
+ *            the h->is_done flag) is because we're passing a pointer
+ *            to internal data storage back to the caller. Subsequent
+ *            calls to Add() will modify that memory -- in the worst case,
+ *            if Add() has to reallocate that storage, completely invalidating
+ *            the pointer that the caller has a copy of. We want to make
+ *            sure that the <ret_x> pointer stays valid.
+ *            
+ * Args:      h     - histogram to retrieve data values from
+ *            ret_x - RETURN: pointer to the data samples, [0..n-1] 
+ *            ret_n - RETURN: number of data samples
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if the histogram <h> is not a full histogram.
+ */
+int
+esl_histogram_GetData(ESL_HISTOGRAM *h, double **ret_x, int *ret_n)
+{
+  if (! h->is_full) ESL_EXCEPTION(eslEINVAL, "not a full histogram");
+  esl_histogram_sort(h);
+
+  *ret_x = h->x;
+  *ret_n = h->n;
+
+  h->is_done = TRUE;
+  return eslOK;
+}
+
+
+/* Function:  esl_histogram_GetTail()
+ * Synopsis:  Retrieve all raw scores above some threshold.
+ *
+ * Purpose:   Given a full histogram <h>, retrieve all data values 
+ *            above the threshold <phi> in the right (high scoring) 
+ *            tail, as a ptr <ret_x> to an array of <ret_n> values 
+ *            indexed <[0..n-1]> from lowest to highest score. 
+ *            Optionally, it also returns the number of values in 
+ *            rest of the histogram in <ret_z>;
+ *            this number is useful if you are going to fit
+ *            the tail as a left-censored distribution.
+ *            
+ *            The test is strictly greater than <phi>, not greater
+ *            than or equal to.
+ *            
+ *            <ret_x> is a pointer to internal memory in the histogram <h>.
+ *            The histogram <h> is still responsible for that storage;
+ *            its memory will be free'd when you call 
+ *            <esl_histogram_Destroy()>.
+ *            
+ *            You can only call this after you have finished collecting
+ *            all the data. Subsequent calls to <esl_histogram_Add()>
+ *            will fail.             
+ *            
+ * Args:      h     - histogram to retrieve the tail from
+ *            phi   - threshold: tail is all scores > phi
+ *            ret_x - optRETURN: ptr to vector of data values [0..n-1]
+ *            ret_n - optRETURN: number of data values in tail
+ *            ret_z - optRETURN: number of data values not in tail.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if the histogram is not a full histogram.
+ */
+int
+esl_histogram_GetTail(ESL_HISTOGRAM *h, double phi, 
+		      double **ret_x, int *ret_n, int *ret_z)
+{
+  int hi, lo, mid;
+
+  if (! h->is_full) ESL_EXCEPTION(eslEINVAL, "not a full histogram");
+  esl_histogram_sort(h);
+
+  if      (h->n         == 0)   mid = h->n;  /* we'll return NULL, 0, n */  
+  else if (h->x[0]       > phi) mid = 0;     /* we'll return x, n, 0    */
+  else if (h->x[h->n-1] <= phi) mid = h->n;  /* we'll return NULL, 0, n */
+  else /* binary search, faster than a brute force scan */
+    {
+      lo = 0;
+      hi = h->n-1; /* know hi>0, because above took care of n=0 and n=1 cases */
+      while (1) {
+	mid = (lo + hi + 1) / 2;  /* +1 makes mid round up, mid=0 impossible */
+	if      (h->x[mid]  <= phi) lo = mid; /* we're too far left  */
+	else if (h->x[mid-1] > phi) hi = mid; /* we're too far right */
+	else break;		              /* ta-da! */
+      }
+    }
+
+  if (ret_x != NULL) *ret_x = h->x + mid;
+  if (ret_n != NULL) *ret_n = h->n - mid;
+  if (ret_z != NULL) *ret_z = mid;
+  h->is_done = TRUE;
+  return eslOK;
+}
+
+
+/* Function:  esl_histogram_GetTailByMass()
+ * Synopsis:  Retrieve all raw scores in right tail mass.
+ *
+ * Purpose:   Given a full histogram <h>, retrieve the data values in
+ *            the right (high scoring) tail, as a pointer <ret_x>
+ *            to an array of <ret_n> values indexed <[0..n-1]> from
+ *            lowest to highest score. The tail is defined by a
+ *            given mass fraction threshold <pmass>; the mass in the returned
+ *            tail is $\leq$ this threshold. <pmass> is a probability,
+ *            so it must be $\geq 0$ and $\leq 1$.
+ *            
+ *            Optionally, the number of values in the rest of the
+ *            histogram can be returned in <ret_z>. This is useful
+ *            if you are going to fit the tail as a left-censored
+ *            distribution.
+ *            
+ *            <ret_x> is a pointer to internal memory in <h>. 
+ *            The histogram <h> remains responsible for its storage,
+ *            which will be free'd when you call <esl_histogram_Destroy()>.
+ *            As a consequence, you can only call 
+ *            <esl_histogram_GetTailByMass()> after you have finished
+ *            collecting data. Subsequent calls to <esl_histogram_Add()>
+ *            will fail.
+ *
+ * Args:      h     - histogram to retrieve the tail from
+ *            pmass - fractional mass threshold; tail contains <= pmass
+ *            ret_x - optRETURN: ptr to vector of data values [0..n-1]
+ *            ret_n - optRETURN: number of data values in tail x
+ *            ret_z - optRETURN: number of data values not in tail
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if the histogram is not a full histogram, 
+ *            or <pmass> is not a probability.
+ */
+int
+esl_histogram_GetTailByMass(ESL_HISTOGRAM *h, double pmass,
+			    double **ret_x, int *ret_n, int *ret_z)
+{
+  uint64_t n;
+
+  if (! h->is_full) 
+    ESL_EXCEPTION(eslEINVAL, "not a full histogram");
+  if (pmass < 0. || pmass > 1.) 
+    ESL_EXCEPTION(eslEINVAL, "pmass not a probability");
+
+  esl_histogram_sort(h);
+
+  n = (uint64_t) ((double) h->n * pmass); /* rounds down, guaranteeing <= pmass */
+
+  if (ret_x != NULL) *ret_x = h->x + (h->n - n);
+  if (ret_n != NULL) *ret_n = n;
+  if (ret_z != NULL) *ret_z = h->n - n;
+  h->is_done = TRUE;
+  return eslOK;
+}
+
+
+
+
+
+/*****************************************************************
+ * 4. Setting expected counts
+ *****************************************************************/ 
+
+/* Function:  esl_histogram_SetExpect()
+ * Synopsis:  Set expected counts for complete distribution.
+ *
+ * Purpose:   Given a histogram <h> containing some number of empirically
+ *            observed binned counts, and a pointer to a function <(*cdf)()>
+ *            that describes the expected cumulative distribution function 
+ *            (CDF) for the complete data, conditional on some parameters 
+ *            <params>; calculate the expected counts in each bin of the 
+ *            histogram, and hold that information internally in the structure.
+ *            
+ *            The caller provides a function <(*cdf)()> that calculates
+ *            the CDF via a generic interface, taking only two
+ *            arguments: a quantile <x> and a void pointer to whatever
+ *            parameters it needs, which it will cast and interpret.
+ *            The <params> void pointer to the given parameters is
+ *            just passed along to the generic <(*cdf)()> function. The
+ *            caller will probably implement this <(*cdf)()> function as
+ *            a wrapper around its real CDF function that takes
+ *            explicit (non-void-pointer) arguments.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure; state of <h> is preserved.
+ */
+int
+esl_histogram_SetExpect(ESL_HISTOGRAM *h, 
+			double (*cdf)(double x, void *params), void *params)
+{
+  int    i;
+  double ai,bi;			/* ai < x <= bi : lower,upper bounds in bin */
+  int    status;
+
+  if (h->expect == NULL) 
+    ESL_ALLOC(h->expect, sizeof(double) * h->nb);
+
+  for (i = 0; i < h->nb; i++)
+    {
+      ai = esl_histogram_Bin2LBound(h, i);
+      bi = esl_histogram_Bin2UBound(h, i);
+
+      h->expect[i] = h->Nc * ( (*cdf)(bi, params) - (*cdf)(ai, params) );
+
+      if (h->emin == -1 && h->expect[i] > 0.) h->emin = i;
+    }
+
+  h->is_done = TRUE;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_histogram_SetExpectedTail()
+ * Synopsis:  Set expected counts for right tail.
+ *
+ * Purpose:   Given a histogram <h>, and a pointer to a generic function
+ *            <(*cdf)()> that describes the expected cumulative
+ *            distribution function for the right (high-scoring) tail
+ *            starting at <base_val> (all expected <x> $>$ <base_val>) and
+ *            containing a fraction <pmass> of the complete data
+ *            distribution (<pmass> $\geq 0$ and $\leq 1$);
+ *            set the expected binned counts for all complete bins
+ *            $\geq$ <base_val>. 
+ *            
+ *            If <base_val> falls within a bin, that bin is considered
+ *            to be incomplete, and the next higher bin is the starting
+ *            point. 
+ *           
+ * Args:      h          - finished histogram
+ *            base_val   - threshold for the tail: all expected x > base_val
+ *            pmass      - fractional mass in the tail: 0 <= pmass <= 1
+ *            cdf        - generic-interface CDF function describing the tail
+ *            params     - void pointer to parameters for (*cdf)()
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on memory allocation failure.
+ *            <eslERANGE> if <base_val> isn't a reasonable value within
+ *              the histogram (it converts to a bin value outside
+ *              integer range).
+ */
+int
+esl_histogram_SetExpectedTail(ESL_HISTOGRAM *h, double base_val, double pmass,
+			      double (*cdf)(double x, void *params), 
+			      void *params)
+{
+  int status;
+  int b;
+  double ai, bi;
+
+  if (h->expect == NULL)  ESL_ALLOC(h->expect, sizeof(double) * h->nb);
+
+  if ((status = esl_histogram_Score2Bin(h, base_val, &(h->emin))) != eslOK) return status;
+  h->emin += 1;
+  esl_vec_DSet(h->expect, h->emin, 0.);
+
+  for (b = h->emin; b < h->nb; b++)
+    {
+      ai = esl_histogram_Bin2LBound(h, b);
+      bi = esl_histogram_Bin2UBound(h, b);
+      h->expect[b] = pmass * (double) h->Nc * 
+	             ( (*cdf)(bi, params) - (*cdf)(ai, params) );
+    }
+  
+  h->tailbase   = base_val;
+  h->tailmass   = pmass;
+  h->is_tailfit = TRUE;
+  h->is_done    = TRUE;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+
+
+/*****************************************************************
+ * 5. Output and display of binned data.
+ *****************************************************************/ 
+
+/* Function:  esl_histogram_Write() 
+ * Synopsis:  Write a "pretty" ASCII histogram to a stream.
+ *
+ * Purpose:   Print a "prettified" display histogram <h> to a file
+ *            pointer <fp>.  Deliberately a look-and-feel clone of
+ *            Bill Pearson's excellent FASTA output.
+ *            
+ *            Also displays expected binned counts, if they've been
+ *            set.
+ *            
+ *            Display will only work well if the bin width (w) is 0.1
+ *            or more, because the score labels are only shown to one
+ *            decimal point.
+ * 
+ * Args:      fp     - open file to print to (stdout works)
+ *            h      - histogram to print
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEWRITE> on any system write error, such as a
+ *                        filled disk.
+ */
+int
+esl_histogram_Write(FILE *fp, ESL_HISTOGRAM *h)
+{
+  int      i;
+  double   x;
+  uint64_t maxbar;
+  int      imode;
+  uint64_t units;
+  int      num;
+  char     buffer[81];		  /* output line buffer */
+  int      pos;			  /* position in output line buffer */
+  uint64_t lowcount, highcount;	  
+  int      ilowbound, ihighbound; 
+  int      nlines;
+  int      emptybins = 3;
+
+
+  /* Find out how we'll scale the histogram.  We have 58 characters to
+   * play with on a standard 80-column terminal display: leading "%6.1f
+   * %6d %6d|" occupies 21 chars.  Save the peak position, we'll use
+   * it later.
+   */
+  maxbar = 0;
+  imode  = 0;
+  for (i = 0; i < h->nb; i++)
+    if (h->obs[i] > maxbar) 
+      {
+	maxbar  = h->obs[i];     /* max height    */
+	imode   = i;
+      }
+
+  /* Truncate histogram display on both sides, ad hoc fashion.
+   * Start from the peak; then move out until we see <emptybins> empty bins,
+   * and stop.
+   */
+  for (num = 0, ihighbound = imode; ihighbound < h->imax; ihighbound++)
+    {
+      if (h->obs[ihighbound] > 0) { num = 0; continue; } /* reset */
+      if (++num == emptybins)     { break;             } /* stop  */
+    }
+  for (num = 0, ilowbound = imode; ilowbound > h->imin; ilowbound--)
+    {
+      if (h->obs[ilowbound] > 0)  { num = 0; continue; } /* reset */
+      if (++num == emptybins)     { break;             } /* stop  */
+    }
+
+		/* collect counts outside of bounds */
+  for (lowcount = 0, i = h->imin; i < ilowbound; i++)
+    lowcount += h->obs[i];
+  for (highcount = 0, i = h->imax; i > ihighbound; i--)
+    highcount += h->obs[i];
+
+		/* maxbar might need to be raised now; then set our units  */
+  if (lowcount  > maxbar) maxbar = lowcount;
+  if (highcount > maxbar) maxbar = highcount;
+
+  if (maxbar > 0) units = ((maxbar-1)/ 58) + 1;
+  else            units = 1;	                 /* watch out for an empty histogram w/ no data points. */
+
+  /* Print the histogram header
+   */
+  if (fprintf(fp, "%6s %6s %6s  (one = represents %llu sequences)\n", 
+	      "score", "obs", "exp", (unsigned long long) units) < 0) 
+    ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed");
+  if (fprintf(fp, "%6s %6s %6s\n", "-----", "---", "---") < 0)
+    ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed");
+
+  /* Print the histogram itself */
+  buffer[80] = '\0';
+  buffer[79] = '\n';
+  nlines     = 0;		/* Count the # of lines we print, so we know if it ends up being zero */
+  for (i = h->imin; i <= h->imax; i++)
+    {
+      memset(buffer, ' ', 79 * sizeof(char));
+      x = i*h->w + h->bmin;
+
+      /* Deal with special cases at edges
+       */
+      if      (i < ilowbound)  continue;
+      else if (i > ihighbound) continue;
+      else if (i == ilowbound && i != h->imin) 
+	{
+	  sprintf(buffer, "<%5.1f %6llu %6s|", x+h->w, (unsigned long long) lowcount, "-");
+	  if (lowcount > 0) {
+	    num = 1+(lowcount-1) / units;
+	    for (pos = 21; num > 0; num--)  buffer[pos++] = '=';
+	  }
+	  if (fputs(buffer, fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed");
+	  nlines++;
+	  continue;
+	}
+      else if (i == ihighbound && i != h->imax)
+	{
+	  sprintf(buffer, ">%5.1f %6llu %6s|", x, (unsigned long long) highcount, "-");
+	  if (highcount > 0) {
+	    num = 1+(highcount-1) / units;
+	    for (pos = 21; num > 0; num--)  buffer[pos++] = '=';
+	  }
+	  if (fputs(buffer, fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed");
+	  nlines++;
+	  continue;
+	}
+
+      /* Deal with most cases
+       */
+      if (h->obs[i] < 1000000)	/* displayable in 6 figures or less? */
+	{
+	  if (h->expect != NULL) 
+	    sprintf(buffer, "%6.1f %6llu %6d|", x, (unsigned long long) h->obs[i], (int) h->expect[i]);
+	  else
+	    sprintf(buffer, "%6.1f %6llu %6s|", x, (unsigned long long) h->obs[i], "-");
+	}
+      else
+	{
+	  if (h->expect != NULL) 
+	    sprintf(buffer, "%6.1f %6.2e %6.2e|", x, (double) h->obs[i], h->expect[i]);
+	  else
+	    sprintf(buffer, "%6.1f %6.2e %6s|",   x, (double) h->obs[i], "-");
+	}
+      buffer[21] = ' ';		/* sprintf writes a null char; replace it */
+
+      /* Mark the histogram bar for observed hits
+       */ 
+      if (h->obs[i] > 0) {
+	num = 1 + (h->obs[i]-1) / units;
+	for (pos = 21; num > 0; num--)  buffer[pos++] = '=';
+      }
+	  
+      /* Mark the theoretically expected value
+       * (The test > 0. also suffices to remove any censored region.)
+       */
+      if (h->expect != NULL && h->expect[i] > 0.)
+	{
+	  pos = 21 + (int)(h->expect[i]-1) / units;
+	  if (pos >= 78) pos = 78; /* be careful of buffer bounds */
+	  buffer[pos] = '*';
+	}
+
+      /* Print the line
+       */
+      if (fputs(buffer, fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed");
+      nlines++;
+    }
+
+  if (nlines == 0 && fprintf(fp, "[histogram contained no data points]\n") < 0)
+    ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed");    
+
+  return eslOK;
+}
+  
+/* Function:  esl_histogram_Plot()
+ * Synopsis:  Output a histogram in xmgrace XY format.
+ *
+ * Purpose:   Print observed (and expected, if set) binned counts
+ *            in a histogram <h> to open file pointer <fp>
+ *            in xmgrace XY input file format.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error.
+ */
+int
+esl_histogram_Plot(FILE *fp, ESL_HISTOGRAM *h)
+{
+  int    imin, imax;
+  int    i;
+  double x;
+
+  /* First data set is the observed histogram
+   */
+  for (i = h->imin; i <= h->imax; i++)
+    {
+      x = esl_histogram_Bin2LBound(h,i);
+      if (fprintf(fp, "%f %llu\n", x, (unsigned long long) h->obs[i]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram plot write failed");
+    }
+  if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram plot write failed");
+
+  /* Second data set is the theoretical (expected) histogram
+   */
+  if (h->expect != NULL)
+    {
+      for (imin = 0; imin < h->nb; imin++) 
+	if (h->expect[imin] > 0.) break;
+      for (imax = h->nb-1; imax >= 0; imax--)
+	if (h->expect[imax] > 0.) break;
+
+      for (i = imin; i <= imax; i++)
+	{
+	  x = esl_histogram_Bin2LBound(h,i);
+	  if (fprintf(fp, "%f %g\n", x, h->expect[i]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram plot write failed");
+	}
+      if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram plot write failed");
+    }
+  return eslOK;
+}
+
+/* Function:  esl_histogram_PlotSurvival()
+ * Synopsis:  Output $P(X>x)$ in xmgrace XY format.
+ *
+ * Purpose:   Given a histogram <h>, output the observed (and
+ *            expected, if available) survival function $P(X>x)$
+ *            to file pointer <fp> in xmgrace XY input file format.
+ *            
+ *            One point is plotted per bin, so the narrower the
+ *            bin width, the more smooth and accurate the resulting
+ *            plots will be.
+ *            
+ *            As a special case, always plot the highest score with
+ *            survival probability 1/N, if it occurred in a bin with
+ *            other samples. This is to prevent a survival plot from
+ *            looking like it was artificially truncated.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error.
+ */
+int
+esl_histogram_PlotSurvival(FILE *fp, ESL_HISTOGRAM *h)
+{
+  int i;
+  uint64_t c = 0;
+  double   esum;
+  double ai;
+  
+  /* The observed binned counts:
+   */
+  if (h->obs[h->imax] > 1) 
+    if (fprintf(fp, "%f\t%g\n", h->xmax, 1.0 / (double) h->Nc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram survival plot write failed");
+  for (i = h->imax; i >= h->imin; i--)
+    {
+      if (h->obs[i] > 0) {
+	c   += h->obs[i];
+	ai = esl_histogram_Bin2LBound(h, i);
+	if (fprintf(fp, "%f\t%g\n", ai, (double) c / (double) h->Nc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram survival plot write failed");
+      }
+    }
+  if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram survival plot write failed");
+
+  /* The expected binned counts:
+   */
+  if (h->expect != NULL) 
+    {
+      esum = 0.;
+      for (i = h->nb-1; i >= 0; i--)
+	{
+	  if (h->expect[i] > 0.) { 
+	    esum += h->expect[i];        /* some worry about 1+eps=1 problem here */
+	    ai = esl_histogram_Bin2LBound(h, i);
+	    if (fprintf(fp, "%f\t%g\n", ai, esum / (double) h->Nc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram survival plot write failed");
+	  }
+	}
+      if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram survival plot write failed");
+    }
+  return eslOK;
+}
+
+/* Function:  esl_histogram_PlotQQ()
+ * Synopsis:  Output a Q-Q plot in xmgrace XY format.
+ *
+ * Purpose:   Given a histogram <h> containing an empirically observed
+ *            distribution, and a pointer to a function <(*invcdf)()>
+ *            for an expected inverse cumulative distribution
+ *            function conditional on some parameters <params>;
+ *            output a Q-Q plot in xmgrace XY format to file <fp>.
+ *            
+ *            Same domain limits as goodness-of-fit testing: output
+ *            is restricted to overlap between observed data (excluding
+ *            any censored data) and expected data (which may be limited
+ *            if only a tail was fit).
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error.
+ */
+int
+esl_histogram_PlotQQ(FILE *fp, ESL_HISTOGRAM *h, 
+		     double (*invcdf)(double x, void *params), void *params)
+{
+  int      i;
+  double   cdf;
+  double   bi;
+  int      bbase;
+  uint64_t sum;
+
+  /* on censored data, start counting observed cdf at z, not 0
+   */
+  if (h->dataset_is == TRUE_CENSORED || h->dataset_is == VIRTUAL_CENSORED)
+    sum = h->z; 
+  else
+    sum = 0;
+
+  /* Determine smallest bin included in goodness of fit eval
+   */
+  bbase = h->cmin;
+  if (h->is_tailfit && h->emin > bbase) bbase = h->emin;
+  for (i = h->cmin; i < bbase; i++) sum +=  h->obs[i];
+  
+  /* The q-q plot:
+   */
+  for (i = bbase; i < h->imax; i++) /* avoid last bin where upper cdf=1.0 */
+    {
+      sum += h->obs[i];
+      cdf = (double) sum / (double) h->Nc;
+
+      if (h->is_tailfit) cdf = (cdf + h->tailmass - 1.) / (h->tailmass);
+
+      bi = esl_histogram_Bin2UBound(h, i);
+      if (fprintf(fp, "%f\t%f\n", bi, (*invcdf)(cdf, params)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram QQ plot write failed");
+    }
+  if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram QQ plot write failed");
+
+  /* Plot a 45-degree expected QQ line:
+   */
+  bi = esl_histogram_Bin2LBound(h, bbase);
+  if (fprintf(fp, "%f\t%f\n", bi,  bi)          < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram QQ plot write failed");
+  if (fprintf(fp, "%f\t%f\n", h->xmax, h->xmax) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram QQ plot write failed");
+  if (fprintf(fp, "&\n")                        < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram QQ plot write failed");
+
+  return eslOK;
+}
+
+
+
+/* Function:  esl_histogram_Goodness()
+ * Synopsis:  Evaluate fit between observed, expected. 
+ *
+ * Purpose:   Given a histogram <h> with observed and expected counts,
+ *            where, for the expected counts, <nfitted> ($\geq 0$)
+ *            parameters were fitted (and thus should be subtracted
+ *            from the degrees of freedom);
+ *            Perform a G-test and/or a $\chi^2$ test for goodness of 
+ *            fit between observed and expected, and optionally return
+ *            the number of bins the data were sorted into
+ *            (<ret_bins>), the G statistic and its probability (<ret_G> and
+ *            <ret_Gp>), and the $\chi^2$ statistic and its probability
+ *            (<ret_X2> and <ret_X2p>). 
+ *            
+ *            If a goodness-of-fit probability is less than some threshold
+ *            (usually taken to be 0.01 or 0.05), that is considered to
+ *            be evidence that the observed data are unlikely to be consistent
+ *            with the tested distribution.
+ *            
+ *            The two tests should give similar
+ *            probabilities. However, both tests are sensitive to
+ *            arbitrary choices in how the data are binned, and
+ *            neither seems to be on an entirely sound theoretical
+ *            footing.
+ *
+ *            On some datasets, pathological and/or very small, it may
+ *            be impossible to calculate goodness of fit
+ *            statistics. In this case, <eslENORESULT> is returned.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ *            <eslENORESULT> if the data are such that goodness-of-fit
+ *            statistics can't be calculated, probably because there
+ *            just aren't many data points. On this error, <*ret_G>
+ *            and <*ret_X2> are 0.0, and <*ret_Gp> and <*ret_X2p> are
+ *            1.0. (Because suppose n=1: then any fit to a single data
+ *            point is "perfect".)
+ *
+ * Throws:    <eslEINVAL> if expected counts have not been set in
+ *            the histogram; <eslERANGE> or <eslENOHALT> on different internal
+ *            errors that can arise in calculating the probabilities;
+ *            <eslEMEM> on internal allocation failure.
+ */
+int
+esl_histogram_Goodness(ESL_HISTOGRAM *h, 
+		       int nfitted, int *ret_nbins,
+		       double *ret_G,  double *ret_Gp,
+		       double *ret_X2, double *ret_X2p)
+{
+  uint64_t *obs  = NULL;	/* observed in bin i, [0..nb-1]   */
+  double   *exp  = NULL;	/* expected in bin i, [0..nb-1]   */
+  double   *topx = NULL;	/* all values in bin i <= topx[i] */
+  int      nb;			/* # of re-bins                   */
+  uint64_t minc;		/* minimum target # of counts/bin */
+  int      i,b;
+  double   G, Gp;
+  double   X2, X2p;
+  double   tmp;
+  int      status;
+  int      bbase;
+  uint64_t hmax;
+  uint64_t nobs;
+  double   nexp;
+
+  if (h->expect == NULL) ESL_EXCEPTION(eslEINVAL, "no expected counts in that histogram");
+
+  /* Determine the smallest histogram bin included in 
+   * the goodness of fit evaluation.
+   */
+  bbase = h->cmin;		
+  if (h->is_tailfit && h->emin > bbase) bbase = h->emin;
+  
+  /* How many observed total counts are in the evaluated range,
+   * and what is the maximum in any given histogram bin?
+   */
+  nobs = 0;
+  hmax = 0;
+  for (i = bbase; i <= h->imax; i++)
+    {
+      nobs += h->obs[i];
+      if (h->obs[i] > hmax) hmax = h->obs[i];
+    }
+  if (nobs == 0) { status = eslENORESULT; goto ERROR; }
+
+  /* Figure out how many eval bins we'd like to have, then allocate
+   * for re-binning.
+   * Number of bins for goodness-of-fit tests like G and X^2 
+   * is crucial but arbitrary, unfortunately. Some literature suggests
+   * using 2*n^{0.4}, which gives:
+   *        n    nbins     #/bin
+   *    -----    ------   ------
+   *     1000      31       32
+   *    10000      79      127
+   *   100000     200      500
+   *  1000000     502     1992
+   *  
+   * The most important thing seems to be to get the # of counts
+   * in each bin to be roughly equal.
+   */
+  nb   = 2* (int) pow((double) nobs, 0.4);      /* "desired" nb. */
+  minc = 1 + nobs / (2*nb);	                /* arbitrarily set min = 1/2 of the target # */
+  ESL_ALLOC(obs,  sizeof(uint64_t) * (nb*2+1)); /* final nb must be <= 2*nb+1 */
+  ESL_ALLOC(exp,  sizeof(double)   * (nb*2+1));
+  ESL_ALLOC(topx, sizeof(double)   * (nb*2+1));
+
+  /* Determine the observed counts in each bin: that is, partition 
+   * the <sum> in the evaluated region.
+   * Sweep left to right on the histogram bins,
+   * collecting sum of counts, dropping the sum into the next re-bin 
+   * whenever we have more than <minc> counts.
+   */
+  nobs = 0;
+  nexp = 0.;
+  for (i = 0, b = bbase; b <= h->imax; b++) 
+    {
+      nobs += h->obs[b];
+      nexp += h->expect[b];
+
+      /* if we have enough counts, drop into bin i: */
+      if (nobs >= minc && nexp >= minc) {
+	ESL_DASSERT1( (i < (nb*2+1)) );
+	obs[i]  = nobs;
+	exp[i]  = nexp;
+	topx[i] = esl_histogram_Bin2UBound(h,b);
+	nobs = 0;
+	nexp = 0.;
+	i++;
+      }
+    }
+  if (i == 0) { status = eslENORESULT; goto ERROR; }
+  obs[i-1]  += nobs;		/* add the right tail to final bin */
+  exp[i-1]  += nexp;
+  topx[i-1]  = esl_histogram_Bin2UBound(h, h->imax);
+  nb         = i;		/* nb is now actual # of bins, not target */
+
+  /* We have to have at least one degree of freedom, else
+   * goodness-of-fit testing isn't defined (and moreover, will
+   * fail numerically if we proceed)
+   */
+  if (nb-nfitted-1 <= 0) { status = eslENORESULT; goto ERROR; }
+
+  /* Calculate the X^2 statistic: \sum (obs_i - exp_i)^2 / exp_i */
+  X2 = 0.;
+  for (i = 0; i < nb; i++)
+    {
+      tmp = (double) obs[i] - exp[i];
+      X2 += tmp*tmp / exp[i];
+    }
+  /* X^2 is distributed approximately chi^2. */
+  if (X2 == 0.) 
+    X2p = 1.0;
+  else if (X2 != eslINFINITY) {
+    if ((status = esl_stats_ChiSquaredTest(nb-nfitted, X2, &X2p)) != eslOK) goto ERROR;
+  }
+  else 
+    X2p = 0.;
+
+  /* The G test assumes that #exp=#obs (the X^2 test didn't).
+   * If that's not true, renormalize to make it so. 
+   * This normalization subtracts a degree of freedom.
+   */
+  nobs = 0;
+  nexp = 0.;
+  for (i = 0; i < nb; i++) 
+    {
+      nobs += obs[i];
+      nexp += exp[i];
+    }
+  for (i = 0; i < nb; i++)
+    exp[i] = exp[i] * (double) nobs / nexp;
+  
+  /* Calculate the G statistic: 2 * LLR  */
+  G = 0.;
+  for (i = 0; i < nb; i++)
+    G += (double) obs[i] * log ((double) obs[i] / exp[i]);
+  G *= 2;
+  
+  /* G is distributed approximately as \chi^2.
+   * -1 is because total #obs=#exp 
+   */
+  if (G == 0.)
+    Gp = 1.0;
+  else if (G != eslINFINITY)
+    {
+      if ((status = esl_stats_ChiSquaredTest(nb-nfitted-1, G, &Gp)) != eslOK) goto ERROR;
+    }
+  else Gp = 0.;
+
+  if (ret_nbins) *ret_nbins = nb;
+  if (ret_G)     *ret_G     = G;
+  if (ret_Gp)    *ret_Gp    = Gp;
+  if (ret_X2)    *ret_X2    = X2;
+  if (ret_X2p)   *ret_X2p   = X2p;
+  free(obs);
+  free(exp);
+  free(topx);
+  return eslOK;
+
+ ERROR:
+  if (ret_nbins) *ret_nbins = 0;
+  if (ret_G)     *ret_G     = 0.;
+  if (ret_Gp)    *ret_Gp    = 1.;
+  if (ret_X2)    *ret_X2    = 0.;
+  if (ret_X2p)   *ret_X2p   = 1.;
+  if (obs)       free(obs);
+  if (exp)       free(exp);
+  if (topx)      free(topx);
+  return status;
+}
+
+/*****************************************************************
+ * 6. Test driver.
+ *****************************************************************/
+#ifdef eslHISTOGRAM_TESTDRIVE
+/* compile: 
+ *   gcc -g -Wall -I. -L. -o test -DeslHISTOGRAM_TESTDRIVE esl_histogram.c -leasel -lm
+ * run:     
+ *   ./test -t1; ./test -t2; ./test -t3; ./test -t4; ./test -t5
+ *   
+ *   -t1    - complete data, fit to complete Gumbel\n\
+ *   -t2    - complete data, high scores fit as censored Gumbel\n\
+ *   -t3    - complete data, high scores fit to exponential tail\n\
+ *   -t4    - censored data, fit as censored Gumbel\n\
+ *   -t5    - complete data, binned, high scores fit to exponential tail\n\
+ *
+ * Some suggestions for manual testing:
+ *   ./test -t1 -j1 -v --surv test.xy; xmgrace test.xy          
+ *        examine survivor plot fit, for -t1 
+ *        do -t2 thru -t5 too
+ *
+ *   ./test -t1 --j1 -v -qq test.xy; xmgrace test.xy          
+ *        examine QQ plot fit, for -t1 
+ *        do -t2 thru -t5 too
+ *        
+ *   ./test -t1 -v > foo
+ *   grep "^Estimated" foo | awk '{print $9}' | sort -g > test.xy
+ *        Look for straight line fit to G-test p values.
+ *        sub $9->$13 for chi-squared
+ *        sub Estimated -> Parametric for the parametric fits
+ */
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "easel.h"
+#include "esl_stats.h"
+#include "esl_gumbel.h"
+#include "esl_exponential.h"
+#include "esl_random.h"
+#include "esl_getopts.h"
+
+
+
+static ESL_OPTIONS options[] = {
+  /* name         type      default   env_var   range   toggles     reqs   incompat */
+  { "-j",       eslARG_INT,   "100",  NULL,     "n>0",     NULL,  NULL,   NULL, "number of trials",                  0 },
+  { "-m",       eslARG_INT,     "0",  NULL,    "n>=0",     NULL,  NULL,   NULL, "number of test samples",            0 },
+  { "-n",       eslARG_INT, "10000",  NULL,     "n>0",     NULL,  NULL,   NULL, "number of training samples",        0 },
+  { "-t",       eslARG_INT,     "1",  NULL, "1<=n<=5",     NULL,  NULL,   NULL, "test type choice, 1-5",             0 },
+  { "-v",       eslARG_NONE,  FALSE,  NULL,      NULL,     NULL,  NULL,   NULL, "be verbose?",                       0 },
+  { "--ascii",  eslARG_STRING, NULL,  NULL,      NULL,     NULL,  NULL,   NULL, "output ASCII histogram to <f>",     0 },
+  { "--cmass",  eslARG_REAL,  "0.7",  NULL, "0<=x<=1",     NULL,  NULL,   NULL, "set virtual censoring mass to <x>", 0 },
+  { "--lambda", eslARG_REAL,  "0.8",  NULL,     "x>0",     NULL,  NULL,   NULL, "set Gumbel lambda param to <x>",    0 },
+  { "--mu",     eslARG_REAL, "10.0",  NULL,      NULL,     NULL,  NULL,   NULL, "set Gumbel mu param to <x>",        0 },
+  { "--phi",    eslARG_REAL, "10.0",  NULL,      NULL,     NULL,  NULL,   NULL, "set censoring threshold to <x>",    0 },
+  { "--plot",   eslARG_STRING, NULL,  NULL,      NULL,     NULL,  NULL,   NULL, "output histogram to xmgrace file <f>", 0 },
+  { "--qq",     eslARG_STRING, NULL,  NULL,      NULL,     NULL,  NULL,   NULL, "output Q-Q goodness of fit to xmgrace file <f>", 0 },
+  { "--surv",   eslARG_STRING, NULL,  NULL,      NULL,     NULL,  NULL,   NULL, "output survival plot to xmgrace file <f>", 0 },
+  { "--tail",   eslARG_REAL,  "0.1",  NULL, "0<=x<=1",     NULL,  NULL,   NULL, "set tail mass for fitting to <x>", 0 },
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+static void
+binmacro_utest(void)
+{
+  char          *msg = "esl_histogram: binmacro unit test failure";
+  ESL_HISTOGRAM *h = esl_histogram_Create(-100, 100, 1.0);
+  double trialx[3]  = { -42.42, 0, 42.42 };
+  double x, ai, bi;  
+  int    i,b;
+
+  /* test bin<->score conversion macros.
+   */
+  for (i = 0; i < 3; i++)
+    {
+      x  = trialx[i];
+      esl_histogram_Score2Bin(h, x, &b);
+      ai = esl_histogram_Bin2LBound(h, b);
+      bi = esl_histogram_Bin2UBound(h, b);
+      if (x <= ai || x > bi) esl_fatal(msg);
+    }
+  esl_histogram_Destroy(h);
+  return;
+}
+
+static void
+valuerange_utest(void)
+{
+  char          *msg = "esl_histogram: value range unit test failure";
+  ESL_HISTOGRAM *h   = esl_histogram_Create(-100, 100, 1.0);
+  int            b;
+
+  esl_exception_SetHandler(&esl_nonfatal_handler);
+
+  if (esl_histogram_Score2Bin(h,  eslINFINITY, &b) != eslERANGE) esl_fatal(msg);
+  if (esl_histogram_Score2Bin(h, -eslINFINITY, &b) != eslERANGE) esl_fatal(msg);
+  if (esl_histogram_Score2Bin(h,  eslNaN,      &b) != eslERANGE) esl_fatal(msg);
+  if (esl_histogram_Score2Bin(h,  1e20,        &b) != eslERANGE) esl_fatal(msg);
+  if (esl_histogram_Score2Bin(h, -1e20,        &b) != eslERANGE) esl_fatal(msg);
+
+  esl_exception_ResetDefaultHandler();
+  esl_histogram_Destroy(h);
+  return;
+}
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go;
+  ESL_RANDOMNESS *r;
+  ESL_HISTOGRAM  *h;
+  ESL_HISTOGRAM  *h1;
+  double          p[2];		/* parametric mu, lambda */
+  double          ep[2];	/* estimated mu, lambda  */
+  double          avg_ep[2];	/* average estimated mu, lambda over many trials */
+  int             ntrials, trial;
+  int             ntrain, ntest;
+  int             test_type;
+  enum { COLLECT_COMPLETE, COLLECT_CENSORED }   cstrategy;
+  enum { FIT_BINNED, FIT_SAMPLES }              bstrategy;
+  enum { FIT_COMPLETE, FIT_CENSORED, FIT_TAIL}  fstrategy;
+  double          phi;		/* censoring threshold   */
+  int             z;
+  double          cmass;
+  double          tailmass, save_tailmass;
+  int             nfitted;
+  int             nbins;
+  double          G, Gp, X2, X2p, minGp, minX2p;
+  int             verbose;
+  FILE           *outfp;
+  char           *ascfile, *plotfile, *survfile, *qqfile;
+  int     i;
+  double  x;
+  double *xv;
+  int     n;
+
+  go = esl_getopts_Create(options);
+  esl_opt_ProcessCmdline(go, argc, argv);
+  test_type     = esl_opt_GetInteger(go, "-t");
+  ntrials       = esl_opt_GetInteger(go, "-j");
+  ntrain        = esl_opt_GetInteger(go, "-n");
+  ntest         = esl_opt_GetInteger(go, "-m");
+  verbose       = esl_opt_GetBoolean(go, "-v");
+  cmass         = esl_opt_GetReal   (go, "--cmass");
+  p[1]          = esl_opt_GetReal   (go, "--lambda");
+  p[0]          = esl_opt_GetReal   (go, "--mu");
+  phi           = esl_opt_GetReal   (go, "--phi");
+  save_tailmass = esl_opt_GetReal   (go, "--tail");
+  ascfile       = esl_opt_GetString (go, "--ascii");
+  plotfile      = esl_opt_GetString (go, "--plot");
+  qqfile        = esl_opt_GetString (go, "--qq");
+  survfile      = esl_opt_GetString (go, "--surv");
+  esl_getopts_Destroy(go);
+
+  r         = esl_randomness_Create(42);
+  avg_ep[0] = 0.;
+  avg_ep[1] = 0.;
+  minGp     = 1.;
+  minX2p    = 1.;
+  tailmass  = save_tailmass;
+
+  if (test_type == 1)
+    {
+      cstrategy = COLLECT_COMPLETE;
+      bstrategy = FIT_SAMPLES;
+      fstrategy = FIT_COMPLETE;
+    }
+  else if (test_type == 2)
+    {
+      cstrategy = COLLECT_COMPLETE;
+      bstrategy = FIT_SAMPLES;
+      fstrategy = FIT_CENSORED;
+    }
+  else if (test_type == 3)
+    {
+      cstrategy = COLLECT_COMPLETE;
+      bstrategy = FIT_SAMPLES;
+      fstrategy = FIT_TAIL;
+    }
+  else if (test_type == 4)
+    {
+      cstrategy = COLLECT_CENSORED;
+      bstrategy = FIT_SAMPLES;
+      fstrategy = FIT_CENSORED;
+    }
+  else if (test_type == 5)
+    {
+      cstrategy = COLLECT_COMPLETE;
+      bstrategy = FIT_BINNED;
+      fstrategy = FIT_TAIL;
+    }
+  else
+    esl_fatal("no such test type");
+
+
+  for (trial = 0; trial < ntrials; trial++)
+    {
+      /* Collection of the training data in <h>.
+       * Data set can either be complete, true censored, or virtual censored.
+       */
+      h = esl_histogram_CreateFull(-100, 100, 0.1);
+      z = 0;
+      for (i = 0; i < ntrain; i++) {
+	x = esl_gumbel_Sample(r, p[0], p[1]);
+	if (cstrategy != COLLECT_CENSORED || x > phi)
+	  esl_histogram_Add(h, x);
+	else
+	  z++;
+      }
+      if (cstrategy == COLLECT_CENSORED)
+	esl_histogram_DeclareCensoring(h, z, phi);
+
+      /* Parameter fitting.
+       * We test for four of twelve possible combinations of
+       * collection strategy, binned vs. raw data, and complete,
+       * censored, vs. tail fitting.
+       *   1. complete Gumbel data, raw, fit to a Gumbel.
+       *   2. complete Gumbel data, raw, tail fit as a censored Gumbel
+       *   3. complete Gumbel data, raw, tail fit to an exponential tail
+       *   4. censored Gumbel data, raw, censored fit to a Gumbel
+       *   5  complete Gumbel data, binned, fit to an exponential tail.
+       */
+      if (cstrategy == COLLECT_COMPLETE &&
+	  bstrategy == FIT_SAMPLES &&
+	  fstrategy == FIT_COMPLETE)
+	{
+	  esl_histogram_GetData(h, &xv, &n);
+	  if (esl_gumbel_FitComplete(xv, n, &(ep[0]), &ep[1]) != eslOK) esl_fatal("gumbel complete fit failed");
+	}
+      else if (cstrategy == COLLECT_COMPLETE &&
+	       bstrategy == FIT_SAMPLES &&
+	       fstrategy == FIT_CENSORED)
+	{
+	  esl_histogram_GetTailByMass(h, cmass, &xv, &n, &z);
+	  if (esl_gumbel_FitCensored(xv, n, z, xv[0], &(ep[0]), &ep[1]) != eslOK) esl_fatal("gumbel censored fit failed");
+	}
+      else if (cstrategy == COLLECT_COMPLETE &&
+	       bstrategy == FIT_SAMPLES &&
+	       fstrategy == FIT_TAIL)
+	{
+	  esl_histogram_GetTailByMass(h, tailmass, &xv, &n, &z);
+	  if (esl_exp_FitComplete(xv, n, &(ep[0]), &ep[1]) != eslOK) esl_fatal("exponential complete fit failed");
+	}
+      else if (cstrategy == COLLECT_CENSORED &&
+	       bstrategy == FIT_SAMPLES &&
+	       fstrategy == FIT_CENSORED)
+	{
+	  esl_histogram_GetData(h, &xv, &n);
+	  if (esl_gumbel_FitCensored(xv, n, h->z, h->phi, &(ep[0]), &ep[1]) != eslOK) esl_fatal("gumbel censored fit failed");
+	}
+      else if (cstrategy == COLLECT_COMPLETE &&
+	       bstrategy == FIT_BINNED &&
+	       fstrategy == FIT_TAIL)
+	{
+	  tailmass = save_tailmass; /* reset to original for each trial. */
+	  esl_histogram_SetTailByMass(h, tailmass, &tailmass);
+	  if (esl_exp_FitCompleteBinned(h, &(ep[0]), &ep[1]) != eslOK) esl_fatal("exponential binned complete fit failed");
+	}
+      else
+	ESL_EXCEPTION(eslEINVAL, "not a scenario we currently test");
+
+      /* Keep track of average estimated mu, lambda
+       * for automated testing purposes.
+       */
+      avg_ep[0] += ep[0] / (double) ntrials;
+      avg_ep[1] += ep[1] / (double) ntrials;
+
+      /* Test data can either be the same as the training data,
+       * or a new test set.
+       */
+      if (ntest > 0)
+	{
+	  h1 = esl_histogram_CreateFull(-100.05, 100.05, 0.2);
+	  z = 0;
+	  for (i = 0; i < ntest; i++) {
+	    x = esl_gumbel_Sample(r, p[0], p[1]);
+	    if (cstrategy != COLLECT_CENSORED || x > phi)
+	      esl_histogram_Add(h1, x);
+	    else
+	      z++;
+	  }
+	  if (cstrategy == COLLECT_CENSORED)
+	    esl_histogram_DeclareCensoring(h, z, phi);
+	}
+      else h1 = h;
+      
+
+      /* Set expected binned counts in the test data, h1:
+       */
+      if (fstrategy == FIT_TAIL)
+	esl_histogram_SetExpectedTail(h1, ep[0], tailmass, 
+				      &esl_exp_generic_cdf, ep);
+      else
+	esl_histogram_SetExpect(h1, &esl_gumbel_generic_cdf, ep);
+
+  
+      /* Evaluate goodness-of-fit
+       */
+      nfitted =  (ntest == 0)? 2 : 0;
+      if (esl_histogram_Goodness(h1, nfitted, &nbins, &G, &Gp, &X2, &X2p) != eslOK)
+	esl_fatal("esl_histogram unit testing: goodness-of-fit failed");
+
+      /* Track minimum goodness of fit probs, for automated testing
+       */
+      if (Gp  < minGp)  minGp  = Gp;
+      if (X2p < minX2p) minX2p = X2p;
+
+      if (verbose)
+	printf("Estimated:  %6.2f %6.4f nb %4d G %g\tGp %g\tX2 %g\tX2p %g\n",
+	       ep[0], ep[1], nbins, G, Gp, X2, X2p);
+
+      /* Output files, if requested.
+       * (Best if ntrials=1. Will overwrite previous trials.)
+       */
+      if (ascfile != NULL)
+	{
+	  outfp = fopen(ascfile, "w");
+	  esl_histogram_Write(outfp, h1);
+	  fclose(outfp);
+	}
+      if (plotfile != NULL)
+	{
+	  outfp = fopen(plotfile, "w");
+	  esl_histogram_Plot(outfp,  h1);
+	  fclose(outfp);
+	}
+      if (survfile != NULL)  
+	{
+	  outfp = fopen(survfile, "w");
+	  esl_histogram_PlotSurvival(outfp,  h1);
+	  fclose(outfp);
+	}
+      if (qqfile != NULL)
+	{
+	  outfp = fopen(qqfile, "w");
+	  if (fstrategy == FIT_TAIL)
+	    esl_histogram_PlotQQ(outfp, h1, &esl_exp_generic_invcdf, ep);
+	  else
+	    esl_histogram_PlotQQ(outfp, h1, &esl_gumbel_generic_invcdf, ep);
+	  fclose(outfp);
+	}
+
+      esl_histogram_Destroy(h);
+      if (ntest > 0) esl_histogram_Destroy(h1);
+    }
+
+  /* Trap badness in an automated test.
+   */
+  if (fstrategy != FIT_TAIL && fabs(avg_ep[0] - p[0]) > 0.1)
+    ESL_EXCEPTION(eslFAIL, "Something awry with Gumbel mu fit");
+  if (fabs(avg_ep[1] - p[1]) > 0.1)
+    ESL_EXCEPTION(eslFAIL, "Something awry with lambda fit");
+ if (minGp < 1. / (1000. * ntrials))
+    ESL_EXCEPTION(eslFAIL, "Something awry with G-test");
+  if (minX2p < 1. / (1000. * ntrials))
+    ESL_EXCEPTION(eslFAIL, "Something awry with chi squared test");
+
+  /* Smaller final tests
+   */
+  binmacro_utest();
+  valuerange_utest();
+  
+  esl_randomness_Destroy(r);
+  return 0;
+}
+#endif /*eslHISTOGRAM_TESTDRIVE*/
+
+
+
+/*****************************************************************
+ * 7. Examples
+ *****************************************************************/
+
+/*****************************************************************
+ * Five example main()'s for five use cases:
+ *    - complete data, fit to complete Gumbel
+ *    - complete data, high scores fit as censored Gumbel
+ *    - complete data, high scores fit to exponential tail
+ *    - censored data, fit as censored Gumbel
+ *    - complete data, binned, high scores fit to exponential tail
+ *
+ * (These same five cases are tested by ./test -t1 through ./test -t5.)
+ *****************************************************************/
+/* Case 1. Complete data fit to complete Gumbel.
+ * compile: gcc -I. -L. -o example -DeslHISTOGRAM_EXAMPLE esl_histogram.c -leasel -lm
+ * run:     ./example 
+ */
+#ifdef eslHISTOGRAM_EXAMPLE
+/*::cexcerpt::histogram_example::begin::*/
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_gumbel.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_RANDOMNESS *r  = esl_randomness_Create(0);
+  ESL_HISTOGRAM  *h  = esl_histogram_CreateFull(-100, 100, 0.2);
+  int     nsamples    = 10000;
+  double  mu          = 10.0;
+  double  lambda      = 0.8;
+  double  params[2];
+  int     i;
+  double  x;
+  double *xv;
+  int     n;
+  double  G, Gp, X2, X2p;
+
+  for (i = 0; i < nsamples; i++) {
+    x = esl_gumbel_Sample(r, mu, lambda);
+    esl_histogram_Add(h, x);
+  }
+
+  esl_histogram_GetData(h, &xv, &n);
+  if (esl_gumbel_FitComplete(xv, n, &mu, &lambda) != eslOK)
+    esl_fatal("gumbel complete data fit failed");
+
+  params[0] = mu;
+  params[1] = lambda;
+  esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, &params);
+
+  esl_histogram_Write(stdout, h);
+  if (esl_histogram_Goodness(h, 0, NULL, &G, &Gp, &X2, &X2p) != eslOK)
+    esl_fatal("goodness of fit testing failed");
+
+  printf("G   = %f  p = %f\n", G, Gp);
+  printf("X^2 = %f  p = %f\n", X2, X2p);
+
+  esl_histogram_Destroy(h);
+  esl_randomness_Destroy(r);
+  return 0;
+}
+/*::cexcerpt::histogram_example::end::*/
+#endif /*eslHISTOGRAM_EXAMPLE*/
+
+
+
+/* Case 2. complete data, high scores fit as censored Gumbel 
+ * compile: gcc -I. -L. -o example -DeslHISTOGRAM_EXAMPLE2 esl_histogram.c -leasel -lm
+ * run:     ./example 
+ */
+#ifdef eslHISTOGRAM_EXAMPLE2
+/*::cexcerpt::histogram_example2::begin::*/
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_gumbel.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_RANDOMNESS *r  = esl_randomness_Create(0);
+  ESL_HISTOGRAM  *h  = esl_histogram_CreateFull(-100, 100, 0.2);
+  int     nsamples    = 10000;
+  double  mu          = 10.0;
+  double  lambda      = 0.8;
+  double  params[2];
+  int     i;
+  double  x;
+  double *xv;
+  int     n, z;
+  double  G, Gp, X2, X2p;
+
+  for (i = 0; i < nsamples; i++) {
+    x = esl_gumbel_Sample(r, mu, lambda);
+    esl_histogram_Add(h, x);
+  }
+
+  esl_histogram_GetTailByMass(h, 0.5, &xv, &n, &z); /* fit to right 50% */
+  if (esl_gumbel_FitCensored(xv, n, z, xv[0], &mu, &lambda) != eslOK)
+    esl_fatal("gumbel censored fit failed");
+
+  params[0] = mu;
+  params[1] = lambda;
+  esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, &params);
+
+  esl_histogram_Write(stdout, h);
+  if (esl_histogram_Goodness(h, 0, NULL, &G, &Gp, &X2, &X2p) != eslOK)
+    esl_fatal("goodness of fit testing failed");
+
+  printf("G   = %f  p = %f\n", G, Gp);
+  printf("X^2 = %f  p = %f\n", X2, X2p);
+
+  esl_histogram_Destroy(h);
+  esl_randomness_Destroy(r);
+  return 0;
+}
+/*::cexcerpt::histogram_example2::end::*/
+#endif /*eslHISTOGRAM_EXAMPLE2*/
+
+
+/* Case 3. complete data, high scores fit to exponential tail
+ * compile: gcc -I. -L. -o example -DeslHISTOGRAM_EXAMPLE3 esl_histogram.c -leasel -lm
+ * run:     ./example 
+ */
+#ifdef eslHISTOGRAM_EXAMPLE3
+/*::cexcerpt::histogram_example3::begin::*/
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_gumbel.h"
+#include "esl_exponential.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_RANDOMNESS *r  = esl_randomness_Create(0);
+  ESL_HISTOGRAM  *h  = esl_histogram_CreateFull(-100, 100, 0.2);
+  int     nsamples    = 10000;
+  double  mu          = 10.0;
+  double  lambda      = 0.8;
+  double  params[2];
+  int     i;
+  double  x;
+  double *xv;
+  int     n;
+  double  G, Gp, X2, X2p;
+
+  for (i = 0; i < nsamples; i++) {
+    x = esl_gumbel_Sample(r, mu, lambda);
+    esl_histogram_Add(h, x);
+  }
+
+  esl_histogram_GetTailByMass(h, 0.1, &xv, &n, NULL); /* fit to 10% tail */
+  esl_exp_FitComplete(xv, n, &mu, &lambda);
+
+  params[0] = mu;
+  params[1] = lambda;
+  esl_histogram_SetExpectedTail(h, mu, 0.1, &esl_exp_generic_cdf, &params);
+
+  esl_histogram_Write(stdout, h);
+  if (esl_histogram_Goodness(h, 0, NULL, &G, &Gp, &X2, &X2p) != eslOK)
+    esl_fatal("goodness of fit testing failed");
+
+  printf("G   = %f  p = %f\n", G, Gp);
+  printf("X^2 = %f  p = %f\n", X2, X2p);
+
+  esl_histogram_Destroy(h);
+  esl_randomness_Destroy(r);
+  return 0;
+}
+/*::cexcerpt::histogram_example3::end::*/
+#endif /*eslHISTOGRAM_EXAMPLE3*/
+
+/* Case 4. censored data, high scores fit as a censored Gumbel tail
+ * compile: 
+     gcc -I. -L. -o example -DeslHISTOGRAM_EXAMPLE4 esl_histogram.c -leasel -lm
+ * run:     ./example 
+ */
+#ifdef eslHISTOGRAM_EXAMPLE4
+/*::cexcerpt::histogram_example4::begin::*/
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_gumbel.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_RANDOMNESS *r  = esl_randomness_Create(0);
+  ESL_HISTOGRAM  *h  = esl_histogram_CreateFull(-100, 100, 0.2);
+  int     nsamples    = 10000;
+  double  mu          = 10.0;
+  double  lambda      = 0.8;
+  double  phi         = 9.0;
+  double  params[2];
+  int     i;
+  double  x;
+  double *xv;
+  int     n, z;
+  double  G, Gp, X2, X2p;
+
+  z = 0;
+  for (i = 0; i < nsamples; i++) {
+    x = esl_gumbel_Sample(r, mu, lambda);
+    if (x > phi) esl_histogram_Add(h, x);
+    else         z++;
+  }
+
+  esl_histogram_GetData(h, &xv, &n);
+  if (esl_gumbel_FitCensored(xv, n, z, phi, &mu, &lambda) != eslOK)
+    esl_fatal("gumbel censored fit failed");
+
+  params[0] = mu;
+  params[1] = lambda;
+  esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, &params);
+
+  esl_histogram_Write(stdout, h);
+  if (esl_histogram_Goodness(h, 0, NULL, &G, &Gp, &X2, &X2p) != eslOK)
+    esl_fatal("goodness of fit testing failed");
+
+  printf("G   = %f  p = %f\n", G, Gp);
+  printf("X^2 = %f  p = %f\n", X2, X2p);
+
+  esl_histogram_Destroy(h);
+  esl_randomness_Destroy(r);
+  return 0;
+}
+/*::cexcerpt::histogram_example4::end::*/
+#endif /*eslHISTOGRAM_EXAMPLE4*/
+
+/* Case 5. complete data, binned high scores fit to exponential tail
+ * compile:
+     gcc -I. -L. -o example -DeslHISTOGRAM_EXAMPLE5 esl_histogram.c -leasel -lm
+ * run:     ./example 
+ */
+#ifdef eslHISTOGRAM_EXAMPLE5
+/*::cexcerpt::histogram_example5::begin::*/
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_gumbel.h"
+#include "esl_exponential.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_RANDOMNESS *r  = esl_randomness_Create(0);
+  ESL_HISTOGRAM  *h  = esl_histogram_Create(-100, 100, 1.0);
+  int     nsamples    = 10000;
+  double  mu          = 10.0;
+  double  lambda      = 0.8;
+  double  params[2];
+  int     i;
+  double  x;
+  double  actual_mass;
+  double  G, Gp, X2, X2p;
+
+  for (i = 0; i < nsamples; i++) {
+    x = esl_gumbel_Sample(r, mu, lambda);
+    x = ceil(x);      /* crudely simulate an x of limited precision */
+    esl_histogram_Add(h, x);
+  }
+
+  esl_histogram_SetTailByMass(h, 0.1, &actual_mass);
+  esl_histogram_DeclareRounding(h);
+  if (esl_exp_FitCompleteBinned(h, &mu, &lambda) != eslOK)
+    esl_fatal("exponential ML fitting failed");
+
+  params[0] = mu;
+  params[1] = lambda;
+  esl_histogram_SetExpectedTail(h, mu, actual_mass, &esl_exp_generic_cdf, &params);
+
+  esl_histogram_Write(stdout, h);
+  if (esl_histogram_Goodness(h, 0, NULL, &G, &Gp, &X2, &X2p) != eslOK)
+    esl_fatal("goodness of fit testing failed");
+
+  printf("G   = %f  p = %f\n", G, Gp);
+  printf("X^2 = %f  p = %f\n", X2, X2p);
+
+  esl_histogram_Destroy(h);
+  esl_randomness_Destroy(r);
+  return 0;
+}
+/*::cexcerpt::histogram_example5::end::*/
+#endif /*eslHISTOGRAM_EXAMPLE5*/
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
+
diff --git a/esl_histogram.h b/esl_histogram.h
new file mode 100644
index 0000000..893a301
--- /dev/null
+++ b/esl_histogram.h
@@ -0,0 +1,130 @@
+/* Collection and display of score histograms.
+ * 
+ * SRE, Fri Jul  1 13:22:45 2005 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslHISTOGRAM_INCLUDED
+#define eslHISTOGRAM_INCLUDED
+
+#include <math.h>   /* floor() is in one of the macros */
+
+
+/* Structure: ESL_HISTOGRAM
+ * 
+ * Keeps a score histogram, in which scores are counted into bins of
+ * size (width) w. 
+ *   histogram starts at bmin <  floor(xmin/w) * w
+ *   histogram ends at   bmax >= ceil(xmax/w)*w
+ *   nb = (bmax-bmin)/w
+ *   each score x is counted into bin b = nb - (int) (bmax-x)/w
+ *   each bin b contains scores bw+bmin < x <= (b+1)w + bmin
+ * 
+ * Anything having to do with the counts themselves (obs, n, etc)
+ * is a uint64_t, with range 0..2^64-1  (up to 2e19).
+ */  
+typedef struct {
+  /* The histogram is kept as counts in fixed-width bins.
+   */
+  uint64_t *obs;	/* observed counts in bin b, 0..nb-1 (dynamic)      */
+  int       nb;         /* number of bins                                   */
+  double    w;		/* fixed width of each bin                          */
+  double    bmin, bmax;	/* histogram bounds: all x satisfy bmin < x <= bmax */
+  int       imin, imax;	/* smallest, largest bin that contain obs[i] > 0    */
+
+  /* Optionally, in a "full" h, we can also keep all the raw samples in x.
+   */
+  double    xmin, xmax;	/* smallest, largest sample value x observed        */
+  uint64_t  n;          /* total number of raw data samples                 */
+  double   *x;		/* optional: raw sample values x[0..n-1]            */
+  uint64_t  nalloc;	/* current allocated size of x                      */
+
+  /* The binned data might be censored (either truly, or virtually).
+   * This information has to be made available to a binned/censored
+   * parameter fitting function, and to goodness-of-fit tests.
+   */
+  double   phi;		/* censoring value; all x_i > phi                   */
+  int      cmin;	/* smallest bin index that contains uncensored data */
+  uint64_t z;		/* # of censored values <= phi                      */
+  uint64_t Nc;	        /* # samples in complete data (including unobs)     */
+  uint64_t No;		/* # of samples in observed data                    */
+
+  /* Expected binned counts are set by SetExpect() or SetExpectedTail().
+   */
+  double *expect;	/* expected counts in bin b, 0..nb-1 (not resized)  */
+  int     emin;		/* smallest bin index that contains expected counts */
+  double  tailbase;	/* for tail fits: fitted x > tailbase               */
+  double  tailmass;	/* for tail fits: fractional prob in the tail       */
+
+  /* Some status flags
+   */
+  int is_full;		/* TRUE when we're keeping raw data in x           */
+  int is_done;		/* TRUE if we prevent more Add()'s                 */
+  int is_sorted;	/* TRUE if x is sorted smallest-to-largest         */
+  int is_tailfit;	/* TRUE if expected dist only describes tail       */
+  int is_rounded;	/* TRUE if values aren't more accurate than bins   */
+  enum { COMPLETE, VIRTUAL_CENSORED, TRUE_CENSORED } dataset_is; 
+
+} ESL_HISTOGRAM;
+
+#define esl_histogram_Bin2LBound(h,b)  ((h)->w*(b) + (h)->bmin)
+#define esl_histogram_Bin2UBound(h,b)  ((h)->w*((b)+1) + (h)->bmin)
+
+/* Creating/destroying histograms and collecting data:
+ */
+extern ESL_HISTOGRAM *esl_histogram_Create    (double bmin, double bmax, double w);
+extern ESL_HISTOGRAM *esl_histogram_CreateFull(double bmin, double bmax, double w);
+extern void           esl_histogram_Destroy  (ESL_HISTOGRAM *h);
+extern int            esl_histogram_Score2Bin(ESL_HISTOGRAM *h, double x, int *ret_b);
+extern int            esl_histogram_Add      (ESL_HISTOGRAM *h, double x);
+
+/* Declarations about the binned data before parameter fitting:
+ */
+extern int esl_histogram_DeclareCensoring(ESL_HISTOGRAM *h, int z, double phi);
+extern int esl_histogram_DeclareRounding (ESL_HISTOGRAM *h);
+extern int esl_histogram_SetTail         (ESL_HISTOGRAM *h, double phi,   
+					  double *ret_newmass);
+extern int esl_histogram_SetTailByMass   (ESL_HISTOGRAM *h, double pmass,
+					  double *ret_newmass);
+
+/* Accessing data samples in a full histogram:
+ */
+extern int esl_histogram_GetRank(ESL_HISTOGRAM *h, int rank, double *ret_x);
+extern int esl_histogram_GetData(ESL_HISTOGRAM *h, double **ret_x, int *ret_n);
+extern int esl_histogram_GetTail(ESL_HISTOGRAM *h, double phi, double **ret_x,
+				 int *ret_n, int *ret_z);
+extern int esl_histogram_GetTailByMass(ESL_HISTOGRAM *h, double pmass, 
+				       double **ret_x, int *ret_n, int *ret_z);
+
+
+/* Setting expected binned counts:
+ */
+extern int esl_histogram_SetExpect(ESL_HISTOGRAM *h, 
+				   double (*cdf)(double x, void *params),
+				   void *params);
+extern int esl_histogram_SetExpectedTail(ESL_HISTOGRAM *h, double base_val,
+					 double pmass,
+					 double (*cdf)(double x, void *params), 
+					 void *params);
+
+/* Output/display of binned data:
+ */
+extern int esl_histogram_Write       (FILE *fp, ESL_HISTOGRAM *h);
+extern int esl_histogram_Plot        (FILE *fp, ESL_HISTOGRAM *h);
+extern int esl_histogram_PlotSurvival(FILE *fp, ESL_HISTOGRAM *h);
+extern int esl_histogram_PlotQQ      (FILE *fp, ESL_HISTOGRAM *h, 
+				      double (*invcdf)(double, void *), void *params);
+
+/* Goodness of fit testing
+ */
+extern int esl_histogram_Goodness(ESL_HISTOGRAM *h, int nfitted, 
+				  int *ret_nbins,
+				  double *ret_G,  double *ret_Gp,
+				  double *ret_X2, double *ret_X2p);
+
+
+
+#endif /*eslHISTOGRAM_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_histogram.tex b/esl_histogram.tex
new file mode 100644
index 0000000..d8e39d3
--- /dev/null
+++ b/esl_histogram.tex
@@ -0,0 +1,299 @@
+
+The \eslmod{histogram} module is for collecting scores, fitting
+them to expected distributions, and displaying them.
+
+The histogram automatically reallocates its bins as data points
+arrive, so the caller only needs to provide some initial guidance
+about bin size and ``phase'' (offset of the bins relative to the real
+number line).  It accumulates counts in 64-bit unsigned integers, so
+it can handle over $10^19$ total counts.  Optionally (and provided
+that the caller knows it has enough memory to support this), a
+``full'' histogram can be created and used to collect a sorted vector
+of raw (unbinned) values.
+
+Various different ways of fitting histogram data to different sorts of
+expected distributions are supported, with interfaces to all of
+Easel's statistical distribution modules. Data fitting is oriented
+toward the case where the values are scores, with high scores being of
+the most interest; for instance, routines for obtaining and fitting
+the right (high-scoring) tail are provided, but not for the left tail.
+
+Several of the output functions output data as XY data files suitable
+for input into the popular and freely available \prog{xmgrace}
+graphing program [\url{http://plasma-gate.weizmann.ac.il/Grace/}].
+
+The API for the \eslmod{histogram} module is summarized in
+Table~\ref{tbl:histogram_api}.
+
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+    \apisubhead{Collecting data in an \ccode{ESL\_HISTOGRAM}}\\
+\hyperlink{func:esl_histogram_Create()}{\ccode{esl\_histogram\_Create()}} & Create a new \ccode{ESL\_HISTOGRAM}.\\
+\hyperlink{func:esl_histogram_CreateFull()}{\ccode{esl\_histogram\_CreateFull()}} & A \ccode{ESL\_HISTOGRAM} to keep all data samples.\\
+\hyperlink{func:esl_histogram_Destroy()}{\ccode{esl\_histogram\_Destroy()}} & Frees a \ccode{ESL\_HISTOGRAM}.\\
+\hyperlink{func:esl_histogram_Add()}{\ccode{esl\_histogram\_Add()}} & Add a sample to the histogram.\\
+    \apisubhead{Declarations about binned data, before fitting}\\
+\hyperlink{func:esl_histogram_DeclareCensoring()}{\ccode{esl\_histogram\_DeclareCensoring()}} & Collected data were left-censored.\\
+\hyperlink{func:esl_histogram_DeclareRounding()}{\ccode{esl\_histogram\_DeclareRounding()}} & Declare collected data were no more accurate than bins.\\
+\hyperlink{func:esl_histogram_SetTail()}{\ccode{esl\_histogram\_SetTail()}} & Declare only tail $>$ some threshold is considered "observed".\\
+\hyperlink{func:esl_histogram_SetTailByMass()}{\ccode{esl\_histogram\_SetTailByMass()}} & Declare only right tail mass is considered "observed".\\
+    \apisubhead{Accessing raw data samples}\\
+\hyperlink{func:esl_histogram_GetRank()}{\ccode{esl\_histogram\_GetRank()}} & Retrieve n'th high score.\\
+\hyperlink{func:esl_histogram_GetData()}{\ccode{esl\_histogram\_GetData()}} & Retrieve vector of all raw scores.\\
+\hyperlink{func:esl_histogram_GetTail()}{\ccode{esl\_histogram\_GetTail()}} & Retrieve all raw scores above some threshold.\\
+\hyperlink{func:esl_histogram_GetTailByMass()}{\ccode{esl\_histogram\_GetTailByMass()}} & Retrieve all raw scores in right tail mass.\\
+    \apisubhead{Setting expected counts}\\
+\hyperlink{func:esl_histogram_SetExpect()}{\ccode{esl\_histogram\_SetExpect()}} & Set expected counts for complete distribution.\\
+\hyperlink{func:esl_histogram_SetExpectedTail()}{\ccode{esl\_histogram\_SetExpectedTail()}} & Set expected counts for right tail.\\
+    \apisubhead{Output}\\
+\hyperlink{func:esl_histogram_Write()}{\ccode{esl\_histogram\_Write()}} & Print a "pretty" ASCII histogram.\\
+\hyperlink{func:esl_histogram_Plot()}{\ccode{esl\_histogram\_Plot()}} & Output a histogram in xmgrace XY format.\\
+\hyperlink{func:esl_histogram_PlotSurvival()}{\ccode{esl\_histogram\_PlotSurvival()}} & Output $P(X>x)$ in xmgrace XY format.\\
+\hyperlink{func:esl_histogram_PlotQQ()}{\ccode{esl\_histogram\_PlotQQ()}} & Output a Q-Q plot in xmgrace XY format.\\
+\hyperlink{func:esl_histogram_Goodness()}{\ccode{esl\_histogram\_Goodness()}} & Evaluate fit between observed, expected. \\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{histogram} API.}
+\label{tbl:histogram_api}
+\end{table}
+
+\subsection{Example of using the histogram API}
+
+The example code below stores 10,000 samples from a Gumbel
+distribution in a histogram, retrieves a vector containing the sorted
+samples, fits a Gumbel distribution to that dataset, sets the expected
+counts in the histogram, prints the observed and expected counts in an
+ASCII histogram, and evaluates the goodness-of-fit.
+
+\input{cexcerpts/histogram_example}
+
+Some points of interest:
+
+\begin{itemize}
+\item When the histogram is created, the arguments \ccode(-100, 100, 0.5)
+      tell it to bin data into bins of width 0.5, initially
+      starting at -100 and ending at 100. This initialization
+      is described below (see ``Specifying binning of data values'').
+
+\item Samples are collected one at a time with
+  \ccode{esl\_histogram\_Add()}.
+
+\item After the data have been collected in a \emph{full} histogram, a
+   vector of sorted raw data values can be retrieved using functions
+   like \ccode{esl\_histogram\_GetData()}, and used to fit parameters
+   of an expected distribution to the data.
+
+\item In addition to the observed binned counts, you can optionally
+   set \emph{expected} binned counts in the histogram by calling
+   \ccode{esl\_histogram\_SetExpect()} and providing pointers
+   to an appropriate distribution function and its parameters.
+
+\item The \ccode{esl\_histogram\_Print()} function shows an ASCII text
+   representation of the observed counts (and expected counts, if set)
+   that looks a lot like FASTA's nice histogram output.
+
+\item The \ccode{esl\_histogram\_Goodness()} function compares the
+   observed and expected binned counts, and calculates two goodness of
+   fit tests: a G-test, and a $\chi^2$ test.
+\end{itemize}
+
+
+\subsection{Specifying binning of data values}
+
+The histogram collects data values into bins. When the histogram is
+created, the bin width and the relative offset of the bins is
+permanently set, and an initial range is allocated. 
+
+For example, the call \ccode{esl\_histogram\_Create(-10, 10, 0.5)}
+creates 40 bins of width 0.5 from -10 to 10, with the first bin
+collecting scores from $-10 < x \leq -9.5$, and the last bin
+collecting scores $9.5 < x \leq 10.0$.
+
+The lower bound of the initialization permanently sets the relative
+offset of the bins. That is, \ccode{esl\_histogram\_Create(-10, 10,
+0.5)} makes the first bin $-10 < x \leq -9.5$, whereas
+\ccode{esl\_histogram\_Create(-10.1, 9.9, 0.5)} makes the first bin
+$-10.1 < x \leq -9.6$.
+
+Aside from that, the initial range is only a suggestion. You can add
+any real-valued $x$ to the histogram. The histogram will silently
+reallocate itself to a wider range as needed.  The ability of a
+histogram to store data is effectively unlimited. Up to $2^{64}-1$
+(more than $10^{19}$) counts can be collected. The histogram requires 16
+bytes of storage per bin, and the number of bins it allocates scales
+as $x_{\mbox{max}} - x_{\mbox{min}} / w$.
+
+\subsection{Optional collection of raw data values: full histograms}
+
+Normally a histogram would store only binned counts, so it can
+efficiently summarize even very large numbers of samples.
+
+In some cases it is useful to keep a list of the raw data values --
+for instance, for more accurate parameter fitting to expected
+distributions. This can be done by creating a ``full'' histogram with
+\ccode{esl\_histogram\_CreateFull()} instead of
+\ccode{esl\_histogram\_Create()}. (The example code above did this,
+because it did parameter fitting to the raw data.) After data have
+been collected in a full histogram, individual raw values or pointers
+to sorted arrays of raw values can be retrieved using the
+\ccode{esl\_histogram\_Get*} functions.
+
+A full histogram may require much more memory: about 4 bytes per data
+point. You may not want to use full histograms if your problem
+involves collecting many ($> 10^9$, say) data points.
+
+
+
+\subsection{Different parameter fitting scenarios}
+
+By default, the data you collect are assumed to be \emph{complete}.
+You observed all samples; if you fit to any expected distribution, the
+expected distribution is assumed to describe the complete data; the
+parameters of the expected distribution are to be fitted to an array
+of the complete raw data samples; and any goodness of fit test is to
+be applied to the complete data. This is the simplest, most obvious
+case.
+
+Other situations may arise. In addition to complete data, Easel is
+designed to deal with four other cases:
+
+\begin{enumerate}
+\item The collected data are complete, and they are fit to a
+      distribution that describes the complete data, but parameter
+      fitting is done only in the right (highest-scoring) tail. This
+      makes parameter fitting focus on the most important,
+      high-scoring region of a score distribution, and ignore
+      low-scoring outliers.
+
+\item The collected data are complete, but they are fit to a
+      distribution that only describes the right (highest scoring)
+      tail, and the goodness-of-fit test is only performed on that
+      tail. This case arises when we don't know the form of the
+      expected distribution for the complete data, but the tail
+      follows a predictable decay (an exponential tail, for example).
+
+\item The collected data are left-censored such that no values $<
+      \phi$ were recorded in the histogram, but the data are fit to a
+      complete distribution that predicts the probability even of the
+      censored (unobserved) values. Goodness of fit is only evaluated
+      in the observed data. (This case is what is actually meant by
+      left-censored data.)
+
+\item The high-scoring right tail of the collected data are fit as the
+      \emph{binned} counts in the histogram (not raw sample values) to
+      a distribution that describes the tail, such as an
+      exponential. This case becomes useful when the raw data values
+      have limited precision (because of rounding, for example), which
+      can cause numerical problems with parameter fitting to tails.
+      Another case where this is useful is when there are so many data
+      points that the data must be binned just as a matter of
+      practicality (not enough memory to hold a full histogram).
+\end{enumerate}
+
+A variety of other situations can be dealt with by using different
+combinations of the function calls that deal with these four cases.
+
+
+\subsubsection{Focusing parameter fitting on the highest scores}
+
+An example of focusing a Gumbel parameter fit on the right half of an
+observed distribution:
+
+\input{cexcerpts/histogram_example2}
+
+The key differences from the complete data case are:
+
+\begin{itemize}
+\item Only the high-scoring 50\% of the data samples are
+      retrieved, by calling 
+      \ccode{esl\_histogram\_GetTailByMass(h, 0.5, \&xv, \&n, \&z)}.
+      This returns \ccode{z}, the number of samples that 
+      were \emph{censored}.
+
+\item These data are fit to a Gumbel distribution
+      as a \emph{left-censored} dataset by calling
+      \ccode{esl\_gumbel\_FitCensored(xv, n, z, xv[0], \&mu, \&lambda)}.
+\end{itemize}
+
+The expected counts and the goodness of fit tests are still evaluated
+for the complete data, even though the fit was performed only on the
+highest scores.
+
+
+\subsubsection{Fitting to a tail distribution}
+
+An example of fitting an exponential tail to the high-scoring 10\% of
+a Gumbel-distributed dataset:
+
+\input{cexcerpts/histogram_example3}
+
+The differences to note are:
+
+\begin{itemize}
+\item The tail is fit as if it is \emph{complete} data as far
+      as the exponential distribution is concerned.
+
+\item As a result, to use the exponential tail to predict expected
+      data, we have to keep in mind how much probability mass the tail
+      is supposed to predict (here, 10\%), and that
+      is provided to
+      \ccode{esl\_histogram\_SetExpectedTail()}, which specifically
+      calculates expected counts for a tail.
+\end{itemize}
+
+\subsubsection{Fitting left-censored data}
+
+Fitting a Gumbel distribution to data that are \emph{truly} left
+censored looks a lot like the case where we extracted the high scoring
+data for a censored fit:
+
+\input{cexcerpts/histogram_example4}
+
+\subsubsection{Fitting binned data to a tail distribution}
+
+Normally, you want to fit parameters to the actual individual data
+samples, not to binned data, because you'll get more accurate results.
+An exception can arise when the data samples have limited precision
+because they've been rounded off. Most distributions are not sensitive
+to this, but some tail densities are, especially those with
+singularities ($P(X=x) \rightarrow \infty$) at their origin. In such a
+case, a fit to binned data may be superior, especially if you can
+match the histogram's bins to the rounding procedure that was used.
+
+The following code shows an example of fitting for samples that were
+already rounded up to the nearest integer before adding them to the
+histogram:
+
+\input{cexcerpts/histogram_example5}
+
+Issues to note:
+
+\begin{itemize}
+\item The \ccode{esl\_histogram\_Create(-100, 100, 1.0)} call
+      defined bins that exactly match the rounding procedure
+      defined by \ccode{ceil(x)} -- all $x$ that are rounded
+      to the same value by \ccode{ceil(x)} would also go in
+      the same bin of the histogram.
+
+\item The \ccode{esl\_histogram\_SetTailByMass()} function sets flags
+      in the histogram to demarcate the desired tail.  However,
+      because the data have been binned, and we can only define the
+      tail by a range of bins, it will generally be impossible to
+      match the requested tail mass with adequate accuracy; the actual
+      tail mass is $\geq$ the requested tail mass. It is returned
+      to the caller, and it is the actual mass, not the requested mass,
+      that should be used when setting expected counts.
+
+\item The \ccode{esl\_histogram\_SetRounding()} declaration
+      sets a flag in the histogram that tells binned parameter
+      fitting functions that the origin of the fitted
+      density ($\mu$) should be set at the lower bound of the smallest bin,
+      rather than the smallest raw data value observed in that 
+      bin. 
+\end{itemize}
+
+
diff --git a/esl_hmm.c b/esl_hmm.c
new file mode 100644
index 0000000..bdab83d
--- /dev/null
+++ b/esl_hmm.c
@@ -0,0 +1,812 @@
+/* General hidden Markov models (discrete, of alphabetic strings)
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_hmm.h"
+#include "esl_random.h"
+#include "esl_vectorops.h"
+
+/* Function:  esl_hmm_Create()
+ * Synopsis:  Allocates a new HMM.
+ *
+ * Purpose:   Allocates a new HMM of <M> states for
+ *            generating or modeling strings in the
+ *            alphabet <abc>.
+ *
+ * Returns:   a pointer to the new HMM.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_HMM *
+esl_hmm_Create(const ESL_ALPHABET *abc, int M)
+{
+  ESL_HMM *hmm = NULL;
+  int      k,x;
+  int      status;
+
+  ESL_ALLOC(hmm, sizeof(ESL_HMM));
+  hmm->t  = NULL;
+  hmm->e  = NULL;
+  hmm->eo = NULL;
+  hmm->pi = NULL;
+
+  ESL_ALLOC(hmm->t,  sizeof(float *) * M);           hmm->t[0]  = NULL;
+  ESL_ALLOC(hmm->e,  sizeof(float *) * M);           hmm->e[0]  = NULL;
+  ESL_ALLOC(hmm->eo, sizeof(float *) * abc->Kp);     hmm->eo[0] = NULL;
+  ESL_ALLOC(hmm->pi, sizeof(float) * (M+1));         // initial transition to state M means a L=0 sequence 
+
+  ESL_ALLOC(hmm->t[0],  sizeof(float) * M * (M+1));  // state M is the implicit end state 
+  ESL_ALLOC(hmm->e[0],  sizeof(float) * M * abc->K);
+  ESL_ALLOC(hmm->eo[0], sizeof(float) * abc->Kp * M);
+
+  
+  for (k = 1; k < M; k++)
+    {
+      hmm->t[k] = hmm->t[0] + k*(M+1);
+      hmm->e[k] = hmm->e[0] + k*abc->K;
+    }
+  for (x = 1; x < abc->Kp; x++)
+    hmm->eo[x] = hmm->eo[0] + x*M;
+  
+  hmm->M   = M;
+  hmm->K   = abc->K;
+  hmm->abc = abc;
+  return hmm;
+
+ ERROR:
+  esl_hmm_Destroy(hmm);
+  return NULL;
+}
+
+/* Function:  esl_hmm_Clone()
+ * Synopsis:  Duplicate an HMM.
+ *
+ * Purpose:   Make a newly allocated duplicate of the HMM <hmm>,
+ *            and return a pointer to the duplicate.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_HMM *
+esl_hmm_Clone(const ESL_HMM *hmm)
+{
+  ESL_HMM *dup = NULL;
+  int      k, x;
+
+  if ((dup = esl_hmm_Create(hmm->abc, hmm->M)) == NULL) return NULL;
+
+  for (k = 0; k < hmm->M; k++)
+    {
+      memcpy(dup->t[k],  hmm->t[k],  sizeof(float) * (hmm->M+1));
+      memcpy(dup->e[k],  hmm->e[k],  sizeof(float) * (hmm->abc->K));
+    }
+  for (x = 0; x < hmm->abc->Kp; x++)
+    {
+      memcpy(dup->eo[x], hmm->eo[x], sizeof(float) * (hmm->M));
+    }
+  memcpy(dup->pi, hmm->pi, sizeof(float) * (hmm->M+1));
+  return dup;
+}
+
+
+/* Function:  esl_hmm_Configure()
+ * Synopsis:  Set an HMM's emission odds ratios, including degenerate residues.
+ *
+ * Purpose:   Given a parameterized <hmm>, and some background
+ *            residue frequencies <fq>, set the emission odds ratios
+ *            (<hmm->eo[0..Kp-1][0..M-1]>) in the model.
+ *            
+ *            The frequencies <fq> do not necessarily have to
+ *            correspond to a null model. They are only used for
+ *            rescaling.
+ * 
+ *            If <fq> is <NULL>, uniform background frequencies are
+ *            used ($\frac{1}{K}$, for alphabet size $K$).
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_hmm_Configure(ESL_HMM *hmm, float *fq)
+{
+  int   Kp = hmm->abc->Kp;
+  int   K  = hmm->abc->K;
+  int   k,x,y;
+  float uniform = 1.0f / (float) K;
+  float use_fq;
+  float denom;
+
+  for (x = 0; x < K; x++) {
+    use_fq = (fq == NULL) ? uniform : fq[x];
+    for (k = 0; k < hmm->M; k++)
+      hmm->eo[x][k] = hmm->e[k][x] / use_fq;
+  }
+
+  for (k = 0; k < hmm->M; k++)
+    {				/* -,*,~: treat as X */
+      hmm->eo[K][k]    = 1.0;	/* gap char          */
+      hmm->eo[Kp-2][k] = 1.0;	/* nonresidue        */
+      hmm->eo[Kp-1][k] = 1.0;	/* missing data char */
+    }
+  
+  for (x = K+1; x <= Kp-3; x++) {
+    for (k = 0; k < hmm->M; k++)
+      {
+	hmm->eo[x][k] = 0.0f;
+	denom         = 0.0f;
+	for (y = 0; y < K; y++) 
+	  if (hmm->abc->degen[x][y]) 
+	    {
+	      hmm->eo[x][k] += hmm->e[k][y];  
+	      denom         += (fq == NULL) ? uniform : fq[y];
+	    }
+	hmm->eo[x][k] = ((denom > 0.0f) ? hmm->eo[x][k] / denom : 0.0f);
+      }
+  }
+  return eslOK;
+}
+
+
+/* Function:  esl_hmm_Destroy()
+ * Synopsis:  Destroys an HMM.
+ *
+ * Purpose:   Frees an HMM.
+ */
+void
+esl_hmm_Destroy(ESL_HMM *hmm)
+{
+  if (hmm == NULL) return;
+
+  if (hmm->t != NULL) {
+    if (hmm->t[0] != NULL) free(hmm->t[0]);
+    free(hmm->t);
+  }
+  if (hmm->e != NULL) {
+    if (hmm->e[0] != NULL) free(hmm->e[0]);
+    free(hmm->e);
+  }
+  if (hmm->eo != NULL) {
+    if (hmm->eo[0] != NULL) free(hmm->eo[0]);
+    free(hmm->eo);
+  }
+  if (hmm->pi != NULL) free(hmm->pi);
+  free(hmm);
+  return;
+}
+
+
+ESL_HMX *
+esl_hmx_Create(int allocL, int allocM)
+{
+  ESL_HMX *mx = NULL;
+  int      i;
+  int      status;
+  
+  ESL_ALLOC(mx, sizeof(ESL_HMX));
+  mx->dp_mem = NULL;
+  mx->dp     = NULL;
+  mx->sc     = NULL;
+
+  ESL_ALLOC(mx->dp_mem, sizeof(float) * (allocL+1) * allocM);
+  mx->ncells = (allocL+1) * allocM;
+  
+  ESL_ALLOC(mx->dp, sizeof (float *) * (allocL+1));
+  ESL_ALLOC(mx->sc, sizeof (float)   * (allocL+2));
+  mx->allocR = allocL+1;
+
+  for (i = 0; i <= allocL; i++)
+    mx->dp[i] = mx->dp_mem + i*allocM;
+  mx->validR = allocL+1;
+  mx->allocM = allocM;
+
+  mx->L = 0;
+  mx->M = 0;
+  return mx;
+
+ ERROR:
+  esl_hmx_Destroy(mx);
+  return NULL;
+}
+
+int
+esl_hmx_GrowTo(ESL_HMX *mx, int L, int M)
+{
+  uint64_t ncells;
+  void    *p;
+  int      do_reset = FALSE;
+  int      i;
+  int      status;
+
+  if (L < mx->allocR && M <= mx->allocM) return eslOK;
+
+  /* Do we have to reallocate the 2D matrix, or can we get away with
+   * rejiggering the row pointers into the existing memory? 
+   */
+  ncells = (L+1) * M;
+  if (ncells > mx->ncells) 
+    {
+      ESL_RALLOC(mx->dp_mem, p, sizeof(float) * ncells);
+      mx->ncells = ncells;
+      do_reset   = TRUE;
+    }
+
+  /* must we reallocate row pointers? */
+  if (L >= mx->allocR)
+    {
+      ESL_RALLOC(mx->dp, p, sizeof(float *) * (L+1));
+      ESL_RALLOC(mx->sc, p, sizeof(float)   * (L+2));
+      mx->allocR = L+1;
+      mx->allocM = M;
+      do_reset   = TRUE;
+    }
+
+  /* must we widen the rows? */
+  if (M > mx->allocM)
+    {
+      mx->allocM = M;
+      do_reset = TRUE;
+    }
+
+  /* must we set some more valid row pointers? */
+  if (L >= mx->validR)
+    do_reset = TRUE;
+
+  /* did we trigger a relayout of row pointers? */
+  if (do_reset)
+    {
+      mx->validR = ESL_MIN(mx->ncells / mx->allocM, mx->allocR);
+      for (i = 0; i < mx->validR; i++)
+	mx->dp[i] = mx->dp_mem + i*mx->allocM;
+    }
+  mx->M = 0;
+  mx->L = 0;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+void
+esl_hmx_Destroy(ESL_HMX *mx)
+{
+  if (mx == NULL) return;
+
+  if (mx->dp_mem != NULL) free(mx->dp_mem);
+  if (mx->dp     != NULL) free(mx->dp);
+  if (mx->sc     != NULL) free(mx->sc);
+  free(mx);
+  return;
+}
+
+
+/* Function:  esl_hmm_Emit()
+ * Synopsis:  Emit a sequence from an HMM.
+ *
+ * Purpose:   Sample one sequence from an <hmm>, using random
+ *            number generator <r>. Optionally return the sequence,
+ *            the state path, and/or the length via <opt_dsq>, 
+ *            <opt_path>, and <opt_L>.
+ *            
+ *            If <opt_dsq> or <opt_path> are requested, caller
+ *            becomes responsible for free'ing their memory.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_hmm_Emit(ESL_RANDOMNESS *r, const ESL_HMM *hmm, ESL_DSQ **opt_dsq, int **opt_path, int *opt_L)
+{
+  int      k, L, allocL;
+  int     *path = NULL;
+  ESL_DSQ *dsq  = NULL;
+  void    *tmp  = NULL;
+  int      status;
+  
+  ESL_ALLOC(dsq,  sizeof(ESL_DSQ) * 256);
+  ESL_ALLOC(path, sizeof(int)     * 256);
+  allocL = 256;
+
+  dsq[0]  = eslDSQ_SENTINEL;
+  path[0] = -1;
+  
+  k = esl_rnd_FChoose(r, hmm->pi, hmm->M+1);
+  L = 0;
+  while (k != hmm->M)		/* M is the implicit end state */
+    {
+      L++;
+      if (L >= allocL-1) {	/* Reallocate path and seq if needed */
+	ESL_RALLOC(dsq,  tmp, sizeof(ESL_DSQ) * (allocL*2));
+	ESL_RALLOC(path, tmp, sizeof(int)     * (allocL*2));
+	allocL *= 2;
+      }
+	
+      path[L] = k;
+      dsq[L]  = esl_rnd_FChoose(r, hmm->e[k], hmm->abc->K);
+      k       = esl_rnd_FChoose(r, hmm->t[k], hmm->M+1);
+    }
+
+  path[L+1] = hmm->M;		/* sentinel for "end state" */
+  dsq[L+1]  = eslDSQ_SENTINEL;
+  
+  if (opt_dsq  != NULL) *opt_dsq  = dsq;   else free(dsq);
+  if (opt_path != NULL) *opt_path = path;  else free(path);
+  if (opt_L    != NULL) *opt_L    = L;     
+  return eslOK;
+
+ ERROR:
+  if (path != NULL) free(path);
+  if (dsq  != NULL) free(dsq);
+  return status;
+}
+
+
+int
+esl_hmm_Forward(const ESL_DSQ *dsq, int L, const ESL_HMM *hmm, ESL_HMX *fwd, float *opt_sc)
+{
+  int   i, k, m;
+  int   M     = hmm->M;
+  float logsc = 0;
+  float max;
+
+  fwd->sc[0] = 0.0;
+
+  if (L == 0) {
+    fwd->sc[L+1] = logsc = log(hmm->pi[M]);
+    if (opt_sc != NULL) *opt_sc = logsc;
+    return eslOK;
+  }
+
+  max = 0.0;
+  for (k = 0; k < M; k++) {
+    fwd->dp[1][k] = hmm->eo[dsq[1]][k] * hmm->pi[k];
+    max = ESL_MAX(fwd->dp[1][k], max);
+  }
+  for (k = 0; k < M; k++) {
+    fwd->dp[1][k] /= max;
+  }
+  fwd->sc[1] = log(max);
+
+  for (i = 2; i <= L; i++)
+    {
+      max = 0.0;
+      for (k = 0; k < M; k++)
+	{
+	  fwd->dp[i][k] = 0.0;
+	  for (m = 0; m < M; m++)
+	    fwd->dp[i][k] += fwd->dp[i-1][m] * hmm->t[m][k];
+
+	  fwd->dp[i][k] *= hmm->eo[dsq[i]][k];
+	  
+	  max = ESL_MAX(fwd->dp[i][k], max);
+	}
+      
+      for (k = 0; k < M; k++)
+	fwd->dp[i][k] /= max;
+      fwd->sc[i] = log(max);
+    }
+	  
+  
+  fwd->sc[L+1] = 0.0;
+  for (m = 0; m < M; m++) 
+    fwd->sc[L+1] += fwd->dp[L][m] * hmm->t[m][M];
+  fwd->sc[L+1] = log(fwd->sc[L+1]);
+
+  logsc = 0.0;
+  for (i = 1; i <= L+1; i++)
+    logsc += fwd->sc[i];
+
+  fwd->M = hmm->M;
+  fwd->L = L;
+  if (opt_sc != NULL) *opt_sc = logsc;
+  return eslOK;
+}
+
+
+int
+esl_hmm_Backward(const ESL_DSQ *dsq, int L, const ESL_HMM *hmm, ESL_HMX *bck, float *opt_sc)
+{
+  int   i,k,m;
+  int   M     = hmm->M;
+  float logsc = 0.0;
+  float max;
+  
+  bck->sc[L+1] = 0.0;
+
+  if (L == 0) {
+    bck->sc[0] = logsc = log(hmm->pi[M]);
+    if (opt_sc != NULL) *opt_sc = logsc;
+    return eslOK;
+  }
+  
+  max = 0.0;
+  for (k = 0; k < M; k++)
+    {
+      bck->dp[L][k] = hmm->t[k][M];
+      max = ESL_MAX(bck->dp[L][k], max);
+    }
+  for (k = 0; k < M; k++)
+    bck->dp[L][k] /= max;
+  bck->sc[L] = log(max);
+
+  for (i = L-1; i >= 1; i--)
+    {
+      max = 0.0;
+      for (k = 0; k < M; k++)
+	{
+	  bck->dp[i][k] = 0.0;
+	  for (m = 0; m < M; m++)
+	    bck->dp[i][k] += bck->dp[i+1][m] * hmm->eo[dsq[i+1]][m] * hmm->t[k][m];
+	  
+	  max = ESL_MAX(bck->dp[i][k], max);
+	}
+
+      for (k = 0; k < M; k++)
+	bck->dp[i][k] /= max;
+      bck->sc[i] = log(max);
+    }
+
+  bck->sc[0] = 0.0;
+  for (m = 0; m < M; m++)
+    bck->sc[0] += bck->dp[1][m] * hmm->eo[dsq[1]][m] * hmm->pi[m];
+  bck->sc[0] = log(bck->sc[0]);
+
+  logsc = 0.0;
+  for (i = 0; i <= L; i++) 
+    logsc += bck->sc[i];
+
+  bck->M = hmm->M;
+  bck->L = L;
+  if (opt_sc != NULL) *opt_sc = logsc;
+  return eslOK;
+}  
+		   
+
+int
+esl_hmm_PosteriorDecoding(const ESL_DSQ *dsq, int L, const ESL_HMM *hmm, ESL_HMX *fwd, ESL_HMX *bck, ESL_HMX *pp)
+{
+  int i,k;
+
+  for (i = 1; i <= L; i++)
+    {
+      for (k = 0; k < hmm->M; k++)
+	pp->dp[i][k] = fwd->dp[i][k] * bck->dp[i][k];
+      esl_vec_FNorm(pp->dp[i], hmm->M);
+    }
+  return eslOK;
+}
+
+
+
+
+/*****************************************************************
+ * x. Functions used in unit testing
+ *****************************************************************/
+#ifdef eslHMM_TESTDRIVE
+static int
+make_occasionally_dishonest_casino(ESL_HMM **ret_hmm, ESL_ALPHABET **ret_abc)
+{
+  ESL_ALPHABET *abc = esl_alphabet_Create(eslDICE);
+  ESL_HMM      *hmm = esl_hmm_Create(abc, 2);
+  int           x;
+
+  /* State 0 = fair die */
+  hmm->pi[0] = 1.0;
+  hmm->pi[1] = 0.0;
+  hmm->pi[2] = 0.0;		/* no L=0 seqs */
+
+  hmm->t[0][0] = 0.96;
+  hmm->t[0][1] = 0.03;
+  hmm->t[0][2] = 0.01;		/* end from state 0; mean length 100 */
+
+  for (x = 0; x < abc->K; x++)
+    hmm->e[0][x] = 1.0 / (float) abc->K;
+
+  /* State 1 = loaded die */
+  hmm->t[1][0] = 0.05;
+  hmm->t[1][1] = 0.95;
+  hmm->t[1][2] = 0.0;		/* no end from state 1 */
+
+  for (x = 0; x < abc->K-1; x++) hmm->e[1][x] = 0.5 / ((float) abc->K-1);
+  hmm->e[1][abc->K-1] = 0.5;
+
+  esl_hmm_Configure(hmm, NULL);
+
+  *ret_hmm = hmm;
+  *ret_abc = abc;
+  return eslOK;
+}
+#endif /*eslHMM_TESTDRIVE*/
+
+  
+/*****************************************************************
+ * x. Test driver.
+ *****************************************************************/
+#ifdef eslHMM_TESTDRIVE
+/* gcc -g -Wall -o hmm_utest -L. -I. -DeslHMM_TESTDRIVE esl_hmm.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_hmm.h"
+
+static ESL_OPTIONS options[] = {
+  /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",               0},
+  {"-s",  eslARG_INT,      "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to <n>",     0},
+  {"-v",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose output",               0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for hmm module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go         = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r          = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  ESL_ALPHABET   *abc        = NULL;
+  ESL_HMM        *hmm        = NULL;
+  ESL_DSQ        *dsq        = NULL;
+  int            *path       = NULL;
+  ESL_HMX        *fwd        = NULL;
+  ESL_HMX        *bck        = NULL;		
+  ESL_HMX        *pp         = NULL;		
+  int             be_verbose = esl_opt_GetBoolean(go, "-v");
+  float           fsc, bsc;
+  int             L;
+  int             i;
+  float           fsum, bsum;
+
+  make_occasionally_dishonest_casino(&hmm, &abc);
+
+  esl_hmm_Emit(r, hmm, &dsq, &path, &L);
+
+  fwd = esl_hmx_Create(L, hmm->M);
+  bck = esl_hmx_Create(L, hmm->M);
+  pp  = esl_hmx_Create(L, hmm->M);
+
+  esl_hmm_Forward (dsq, L, hmm, fwd, &fsc);
+  esl_hmm_Backward(dsq, L, hmm, bck, &bsc);
+  esl_hmm_PosteriorDecoding(dsq, L, hmm, fwd, bck, pp);
+
+  fsum = 0.0;
+  bsum = bsc;
+
+  fsum += fwd->sc[0];
+  if (be_verbose) printf("%4d %c %s %8.3f %8.3f\n", 0, '-', "--", fwd->sc[0], bck->sc[0]);
+  bsum -= bck->sc[0];
+
+  for (i = 1; i <= L; i++)
+    {
+      fsum += fwd->sc[i];
+      if (be_verbose)
+	printf("%4d %c %s %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n",
+	       i, abc->sym[dsq[i]], path[i] == 0 ? "F " : " L", 
+	       fwd->sc[i], bck->sc[i],
+	       fsum, bsum, fsum+bsum,
+	       pp->dp[i][0], pp->dp[i][1]);
+      bsum -= fwd->sc[i];
+    }
+
+  if (be_verbose) {
+    printf("%4d %c %s %8.3f %8.3f\n", 0, '-', "--", fwd->sc[L+1], bck->sc[L+1]);
+    printf("Forward score  = %f\n", fsc);
+    printf("Backward score = %f\n", bsc);
+  }
+
+  free(path);
+  free(dsq);
+  esl_hmx_Destroy(pp);
+  esl_hmx_Destroy(bck);
+  esl_hmx_Destroy(fwd);
+  esl_alphabet_Destroy(abc);
+  esl_hmm_Destroy(hmm);
+  esl_randomness_Destroy(r);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslHMM_TESTDRIVE*/
+
+
+
+/*****************************************************************
+ * x. Example
+ *****************************************************************/
+#ifdef eslHMM_EXAMPLE
+/*::cexcerpt::hmm_example::begin::*/
+/* compile: gcc -g -Wall -I. -L. -o hmm_example -DeslHMM_EXAMPLE esl_hmm.c -leasel -lm
+ * run:     ./hmm_example <sequence file>
+ */
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_hmm.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",    0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <seqfile>";
+static char banner[] = "example of the HMM module";
+
+ESL_HMM *
+create_test_hmm(ESL_ALPHABET *abc)
+{
+  ESL_HMM *hmm;
+  int      L   = 400;
+  int      M   = 200;
+
+  hmm = esl_hmm_Create(abc, 2);
+
+  /* state 0 = normal iid model. state 1 = biased state */
+
+  hmm->t[0][0] = (float) L / (float) (L+1);
+  hmm->t[0][1] = 1.0f / (float) (L+1);
+  hmm->t[0][2] = 1.0;		            /* external length distribution */
+  
+  hmm->t[1][0] = (float) 2.0f / (float) (M+2);
+  hmm->t[1][1] = (float) M / (float) (M+2);
+  hmm->t[1][2] = 1.0;
+
+  /* SW50 iid frequencies: H3 default background */
+  hmm->e[0][0]  =  0.0787945;		/* A */
+  hmm->e[0][1]  =  0.0151600;		/* C */
+  hmm->e[0][2]  =  0.0535222;		/* D */
+  hmm->e[0][3]  =  0.0668298;		/* E */
+  hmm->e[0][4]  =  0.0397062;		/* F */
+  hmm->e[0][5]  =  0.0695071;		/* G */
+  hmm->e[0][6]  =  0.0229198;		/* H */
+  hmm->e[0][7]  =  0.0590092;		/* I */
+  hmm->e[0][8]  =  0.0594422;		/* K */
+  hmm->e[0][9]  =  0.0963728;		/* L */
+  hmm->e[0][10] =  0.0237718;		/* M */
+  hmm->e[0][11] =  0.0414386;		/* N */
+  hmm->e[0][12] =  0.0482904;		/* P */
+  hmm->e[0][13] =  0.0395639;		/* Q */
+  hmm->e[0][14] =  0.0540978;		/* R */
+  hmm->e[0][15] =  0.0683364;		/* S */
+  hmm->e[0][16] =  0.0540687;		/* T */
+  hmm->e[0][17] =  0.0673417;		/* V */
+  hmm->e[0][18] =  0.0114135;		/* W */
+  hmm->e[0][19] =  0.0304133;		/* Y */
+
+  /* average of MFS_1 core emissions */
+  hmm->e[1][0]  =  0.1068;              /* A */
+  hmm->e[1][1]  =  0.0110; 		/* C */
+  hmm->e[1][2]  =  0.0242; 		/* D */
+  hmm->e[1][3]  =  0.0293; 		/* E */
+  hmm->e[1][4]  =  0.0621; 		/* F */
+  hmm->e[1][5]  =  0.0899; 		/* G */
+  hmm->e[1][6]  =  0.0139; 		/* H */
+  hmm->e[1][7]  =  0.0762; 		/* I */
+  hmm->e[1][8]  =  0.0319; 		/* K */
+  hmm->e[1][9]  =  0.1274; 		/* L */
+  hmm->e[1][10] =  0.0338; 		/* M */
+  hmm->e[1][11] =  0.0285; 		/* N */
+  hmm->e[1][12] =  0.0414; 		/* P */
+  hmm->e[1][13] =  0.0266; 		/* Q */
+  hmm->e[1][14] =  0.0375; 		/* R */
+  hmm->e[1][15] =  0.0747; 		/* S */
+  hmm->e[1][16] =  0.0568; 		/* T */
+  hmm->e[1][17] =  0.0815; 		/* V */
+  hmm->e[1][18] =  0.0161; 		/* W */
+  hmm->e[1][19] =  0.0303; 		/* Y */
+
+  hmm->pi[0]    = 0.99;
+  hmm->pi[1]    = 0.01;
+
+  esl_hmm_Configure(hmm, NULL);
+  return hmm;
+}
+
+
+ESL_HMM *
+create_null_hmm(ESL_ALPHABET *abc)
+{
+  ESL_HMM *hmm;
+  hmm = esl_hmm_Create(abc, 1);
+
+  /* state 0 = normal iid model.*/
+  hmm->t[0][0] = 1.0f;
+  hmm->t[0][1] = 1.0f;		            /* external length distribution */
+
+  /* SW50 iid frequencies: H3 default background */
+  hmm->e[0][0]  =  0.0787945;		/* A */
+  hmm->e[0][1]  =  0.0151600;		/* C */
+  hmm->e[0][2]  =  0.0535222;		/* D */
+  hmm->e[0][3]  =  0.0668298;		/* E */
+  hmm->e[0][4]  =  0.0397062;		/* F */
+  hmm->e[0][5]  =  0.0695071;		/* G */
+  hmm->e[0][6]  =  0.0229198;		/* H */
+  hmm->e[0][7]  =  0.0590092;		/* I */
+  hmm->e[0][8]  =  0.0594422;		/* K */
+  hmm->e[0][9]  =  0.0963728;		/* L */
+  hmm->e[0][10] =  0.0237718;		/* M */
+  hmm->e[0][11] =  0.0414386;		/* N */
+  hmm->e[0][12] =  0.0482904;		/* P */
+  hmm->e[0][13] =  0.0395639;		/* Q */
+  hmm->e[0][14] =  0.0540978;		/* R */
+  hmm->e[0][15] =  0.0683364;		/* S */
+  hmm->e[0][16] =  0.0540687;		/* T */
+  hmm->e[0][17] =  0.0673417;		/* V */
+  hmm->e[0][18] =  0.0114135;		/* W */
+  hmm->e[0][19] =  0.0304133;		/* Y */
+
+  hmm->pi[0]    = 1.0;
+  esl_hmm_Configure(hmm, NULL);
+  return hmm;
+}
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go        = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  ESL_ALPHABET *abc       = esl_alphabet_Create(eslAMINO);
+  ESL_SQ       *sq        = esl_sq_CreateDigital(abc);
+  ESL_SQFILE   *sqfp      = NULL;
+  ESL_HMM      *hmm       = create_test_hmm(abc);
+  ESL_HMM      *bg        = create_null_hmm(abc);
+  ESL_HMX      *hmx       = esl_hmx_Create(400, hmm->M);
+  int           format    = eslSQFILE_UNKNOWN;
+  char         *seqfile   = esl_opt_GetArg(go, 1);
+  float         fwdsc, nullsc;
+  int           status;
+
+  status = esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp);
+  if      (status == eslENOTFOUND) esl_fatal("No such file.");
+  else if (status == eslEFORMAT)   esl_fatal("Format unrecognized.");
+  else if (status != eslOK)        esl_fatal("Open failed, code %d.", status);
+
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+    {   
+      esl_hmx_GrowTo(hmx, sq->n, hmm->M);
+
+      esl_hmm_Forward(sq->dsq, sq->n, hmm,  hmx, &fwdsc);
+      esl_hmm_Forward(sq->dsq, sq->n, bg, hmx, &nullsc);
+
+      printf("%-16s %5d  %11.4f %8.4f    %11.4f %8.4f    %11.4f %8.4f\n", sq->name, (int) sq->n,
+	     fwdsc  * eslCONST_LOG2R, (fwdsc  * eslCONST_LOG2R) / sq->n,
+	     nullsc * eslCONST_LOG2R, (nullsc * eslCONST_LOG2R) / sq->n,
+	     (fwdsc - nullsc) * eslCONST_LOG2R, (fwdsc-nullsc) * eslCONST_LOG2R / sq->n);
+
+      esl_sq_Reuse(sq);
+    }
+  if      (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s)\n%s\n",
+					   sqfp->filename, sqfp->get_error(sqfp));     
+  else if (status != eslEOF)     esl_fatal("Unexpected error %d reading sequence file %s",
+					   status, sqfp->filename);
+ 
+  
+  esl_sqfile_Close(sqfp);
+  esl_sq_Destroy(sq);
+  esl_hmm_Destroy(hmm);
+  esl_hmm_Destroy(bg);
+  esl_hmx_Destroy(hmx);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+/*::cexcerpt::hmm_example::end::*/
+#endif /*eslHMM_EXAMPLE*/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_hmm.h b/esl_hmm.h
new file mode 100644
index 0000000..e07b6ec
--- /dev/null
+++ b/esl_hmm.h
@@ -0,0 +1,58 @@
+/* General hidden Markov models (discrete; of alphabetic strings)
+ * 
+ * SRE, Fri Jul 18 08:54:41 2008 [Janelia] 
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslHMM_INCLUDED
+#define eslHMM_INCLUDED
+
+#include "esl_alphabet.h"
+#include "esl_random.h"
+
+
+typedef struct {
+  int     M;                    /* number of states in the model          */
+  int     K;                    /* size of alphabet (redundant w/ abc->K) */
+  float  *pi;                   /* initial (begin) distribution (0..M)    */
+  float **t;                    /* Mx(M+1) state transition probabilities */
+  float **e;                    /* MxK emission probabilities             */
+
+  float **eo;			/* K'xM emission odds ratios              */
+  const ESL_ALPHABET *abc;      /* ptr to alphabet                        */
+} ESL_HMM;
+
+typedef struct {
+  float **dp;			/* [0..L][0..M-1] DP matrix                              */
+  float  *sc;			/* [0..L+1] scale factors (log probs)                    */
+  int     M;			/* actual model dimension (0..M-1)                       */
+  int     L;			/* actual sequence dimension (1..L)                      */
+
+  float    *dp_mem;		/* memory allocated for the resizable DP matrix          */
+  int       allocR;		/* current allocated # of rows: L+1 <= validR <= allocR  */
+  int       validR; 		/* # of dp rows actually pointing at DP memory           */
+  int       allocM;		/* current set row width; M <= allocM                    */
+  uint64_t  ncells;		/* total allocation of dp_mem; ncells >= (validR)(allocM)*/
+} ESL_HMX;
+
+
+
+extern ESL_HMM *esl_hmm_Create(const ESL_ALPHABET *abc, int M);
+extern ESL_HMM *esl_hmm_Clone(const ESL_HMM *hmm);
+extern int      esl_hmm_Configure(ESL_HMM *hmm, float *fq);
+extern int      esl_hmm_SetDegeneracies(ESL_HMM *hmm);
+extern void     esl_hmm_Destroy(ESL_HMM *hmm);
+
+extern ESL_HMX *esl_hmx_Create(int allocL, int allocM);
+extern int      esl_hmx_GrowTo (ESL_HMX *mx, int L, int M);
+extern void     esl_hmx_Destroy(ESL_HMX *mx);
+
+extern int      esl_hmm_Emit(ESL_RANDOMNESS *r, const ESL_HMM *hmm, ESL_DSQ **opt_dsq, int **opt_path, int *opt_L);
+extern int      esl_hmm_Forward(const ESL_DSQ *dsq, int L, const ESL_HMM *hmm, ESL_HMX *fwd, float *opt_sc);
+extern int      esl_hmm_Backward(const ESL_DSQ *dsq, int L, const ESL_HMM *hmm, ESL_HMX *bck, float *opt_sc);
+
+
+#endif /*eslHMM_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_hyperexp.c b/esl_hyperexp.c
new file mode 100644
index 0000000..4e83c9a
--- /dev/null
+++ b/esl_hyperexp.c
@@ -0,0 +1,1418 @@
+/* Statistical routines for hyperexponential distributions.
+ * 
+ * Contents:
+ *   1. The ESL_HYPEREXP object
+ *   2. Evaluating densities and distributions
+ *   3. Generic API routines: for general interface w/ histogram module
+ *   4. Dumping plots for files
+ *   5. Sampling                    (augmentation: random)
+ *   6. File input                  (augmentation: fileparser)
+ *   7. ML fitting to complete data (augmentation: minimizer)
+ *   8. ML fitting to binned data   (augmentation: histogram, minimizer)
+ *   9. Test driver
+ *  10. Example
+ *  11. Copyright and license information
+ *   
+ * Xrefs:
+ *   STL9/140     :  original implementation
+ *   STL9/143-144 :  ML fitting to binned data  
+ *   
+ * To-do:
+ *   - Fit*() functions should return eslEINVAL on n=0, eslENORESULT
+ *     on failure due to small n. Compare esl_gumbel. xref J12/93.  
+ *     SRE, Wed Nov 27 11:17:59 2013
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_stats.h"
+#include "esl_vectorops.h"
+#include "esl_exponential.h"
+#include "esl_hyperexp.h"
+
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#ifdef eslAUGMENT_HISTOGRAM
+#include "esl_histogram.h"
+#endif
+#ifdef eslAUGMENT_MINIMIZER
+#include "esl_minimizer.h"
+#endif
+#ifdef eslAUGMENT_FILEPARSER
+#include "esl_fileparser.h"
+#endif
+
+/****************************************************************************
+ *# 1. The ESL_HYPEREXP object
+ ****************************************************************************/ 
+
+/* Function:  esl_hyperexp_Create()
+ *
+ * Purpose:   Creates an object to hold parameters for a <K>-component
+ *            hyperexponential. 
+ *
+ *            Parameters in the object are initialized 
+ *            ($q_k = \frac{1}{K}$, $\lambda_k = 1$, $\mu = 0$), but
+ *            the caller will want to set these according to its own
+ *            purposes.
+ *
+ * Args:      K  - number of components in the mixture
+ *
+ * Returns:   ptr to newly allocated/initialized <ESL_HYPEREXP> object.
+ *
+ * Throws:    NULL on allocation failure.
+ */
+ESL_HYPEREXP *
+esl_hyperexp_Create(int K)
+{
+  int           status;
+  ESL_HYPEREXP *h = NULL;
+  int           k;
+
+  ESL_ALLOC(h, sizeof(ESL_HYPEREXP));
+  h->q = h->lambda = h->wrk = NULL;
+  h->fixlambda = NULL;
+  h->K         = K;
+  h->fixmix    = FALSE;
+
+  ESL_ALLOC(h->q,         sizeof(double) * K);
+  ESL_ALLOC(h->lambda,    sizeof(double) * K);
+  ESL_ALLOC(h->wrk,       sizeof(double) * K);
+  ESL_ALLOC(h->fixlambda, sizeof(char)   * K);
+
+  for (k = 0; k < K; k++)
+    {
+      h->q[k]        = 1. / (double) K;
+      h->lambda[k]   = 1.;
+      h->fixlambda[k]= 0;
+    }
+  h->mu = 0.;
+  return h;
+  
+ ERROR:
+  esl_hyperexp_Destroy(h);
+  return NULL;
+}
+
+/* Function:  esl_hyperexp_Destroy()
+ *
+ * Purpose:   Deallocates the hyperexponential parameter object <h>.
+ *
+ * Args:      h  - ptr to the object to be deallocated.
+ *
+ * Returns:   (void).
+ */
+void
+esl_hyperexp_Destroy(ESL_HYPEREXP *h)
+{
+  if (h == NULL) return;
+
+  if (h->q        != NULL) free(h->q);
+  if (h->lambda   != NULL) free(h->lambda);
+  if (h->wrk      != NULL) free(h->wrk);
+  if (h->fixlambda!= NULL) free(h->fixlambda);
+  free(h);
+}
+  
+
+/* Function:  esl_hyperexp_Copy()
+ *
+ * Purpose:   Makes a copy of the hyperexponential parameter object <src>
+ *            in <dest>. Caller must have already allocated <dest> to have
+ *            (at least) the same number of components as <src>.
+ *
+ * Args:      src   - object to be copied
+ *            dest  - allocated object to copy <src> into
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINCOMPAT> if <dest> isn't allocated with enough
+ *            components to hold a copy of <src>.
+ */
+int
+esl_hyperexp_Copy(ESL_HYPEREXP *src, ESL_HYPEREXP *dest)
+{
+  int k;
+
+  if (dest->K < src->K) 
+    ESL_EXCEPTION(eslEINCOMPAT, "hyperexponential too small to copy into");
+
+  for (k = 0; k < src->K; k++)
+    {
+      dest->q[k]        = src->q[k];
+      dest->lambda[k]   = src->lambda[k];
+      dest->fixlambda[k]= src->fixlambda[k];
+    }
+  dest->mu     = src->mu;
+  dest->K      = src->K;
+  dest->fixmix = src->fixmix;
+  return eslOK;
+}
+
+/* Function:  esl_hyperexp_FixedUniformMixture()
+ *
+ * Purpose:   Set the mixture coeffients to a uniform (1/K) distribution,
+ *            and fix them there so they aren't estimable parameters.
+ */
+int
+esl_hyperexp_FixedUniformMixture(ESL_HYPEREXP *h)
+{
+  int k;
+  for (k = 0; k < h->K; k++) h->q[k] = 1./(double)h->K;
+  h->fixmix = TRUE;
+  return eslOK;
+}
+
+
+/* Function:  esl_hyperexp_SortComponents()
+ *
+ * Purpose:   Rearrange the components in a hyperexponential in
+ *            order of lambda values, with the highest lambda first.
+ *
+ *            Stupid $O(K^2)$ selection sort algorithm here, because we
+ *            expect $K$ to be small.
+ */
+int
+esl_hyperexp_SortComponents(ESL_HYPEREXP *h)
+{
+  int    k, kp;
+  char   ctmp;
+  double dtmp;
+
+  for (k = 0; k < h->K-1; k++)
+    {
+      kp = k + esl_vec_DArgMax(h->lambda+k, h->K-k);
+      if (k != kp) 
+	{
+	  dtmp = h->q[k];         h->q[k]         = h->q[kp];         h->q[kp]         = dtmp;
+	  dtmp = h->lambda[k];    h->lambda[k]    = h->lambda[kp];    h->lambda[kp]    = dtmp;
+	  ctmp = h->fixlambda[k]; h->fixlambda[k] = h->fixlambda[kp]; h->fixlambda[kp] = ctmp;
+	}
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_hyperexp_Write()
+ *
+ * Purpose:   Write hyperexponential parameters from <hxp> to an open <fp>.
+ *            
+ *            The output format is suitable for input by <esl_hyperexp_Read()>.
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEWRITE> on any write error.
+ */
+int
+esl_hyperexp_Write(FILE *fp, ESL_HYPEREXP *hxp)
+{
+  int k;
+
+  if (fprintf(fp, "%8d     # number of components\n", hxp->K)     < 0) ESL_EXCEPTION(eslEWRITE, "hyperexp write failed");
+  if (fprintf(fp, "%8.2f   # mu (for all components)\n", hxp->mu) < 0) ESL_EXCEPTION(eslEWRITE, "hyperexp write failed");
+  for (k = 0; k < hxp->K; k++)
+    if (fprintf(fp, "%8.6f %12.6f  # q[%d], lambda[%d]\n",
+		hxp->q[k], hxp->lambda[k], k, k)                  < 0) ESL_EXCEPTION(eslEWRITE, "hyperexp write failed");
+  return eslOK;
+}
+
+
+/* Function:  esl_hyperexp_Dump()
+ *
+ * Purpose:   Dump hyperexponential parameters from <hxp> to an open <fp>,
+ *            all on one line with no comments.
+ *            
+ *            The output format is suitable for input by
+ *            <esl_hyperexp_Read()>, like <esl_hyperexp_Write()>,
+ *            though it's intended as a diagnostic dump of the
+ *            contents of the object.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_hyperexp_Dump(FILE *fp, ESL_HYPEREXP *hxp)
+{
+  int k;
+
+  fprintf(fp, "%2d ", hxp->K);
+  fprintf(fp, "%6.2f ", hxp->mu);
+  for (k = 0; k < hxp->K; k++)
+    fprintf(fp, "%5.3f %9.6f ", hxp->q[k], hxp->lambda[k]);
+  fprintf(fp, "\n");
+  return eslOK;
+}
+
+/*----------------- end ESL_HYPEREXP object maintenance --------------------*/
+
+
+
+/****************************************************************************
+ * 2. Evaluating densities and distributions
+ ****************************************************************************/ 
+/* all lambda_k > 0
+ * all q_k are probabilities, \sum_k q_k = 1 [watch out for q_k=0 in log(q_k)].
+ * mu <= x < infinity   [mu=x is not a problem]
+ */
+
+/* Function:  esl_hxp_pdf()
+ *
+ * Purpose:   Returns the probability density function $P(X=x)$ for
+ *            quantile <x>, given hyperexponential parameters <h>.
+ */
+double
+esl_hxp_pdf(double x, ESL_HYPEREXP *h)
+{
+  double pdf = 0.;
+  int    k;
+
+  if (x < h->mu) return 0.;
+
+  for (k = 0; k < h->K; k++)
+    pdf += h->q[k] * esl_exp_pdf(x, h->mu, h->lambda[k]);
+  return pdf;
+}
+
+
+/* Function:  esl_hxp_logpdf()
+ *
+ * Purpose:   Returns the log of the PDF ($\log P(X=x)$) for quantile <x>,
+ *            given hyperexponential parameters <h>.
+ */
+double
+esl_hxp_logpdf(double x, ESL_HYPEREXP *h)
+{
+  int    k;
+  double z;
+
+  if (x < h->mu) return -eslINFINITY;
+
+  for (k = 0; k < h->K; k++)
+    if (h->q[k] == 0.0) 
+      h->wrk[k] = -eslINFINITY;	
+    else
+      h->wrk[k] = log(h->q[k]) + esl_exp_logpdf(x, h->mu, h->lambda[k]);
+
+  z = esl_vec_DLogSum(h->wrk, h->K);
+  return z;
+}
+
+/* Function:  esl_hxp_cdf()
+ *
+ * Purpose:   Returns the cumulative distribution function $P(X \leq x)$
+ *            for quantile <x>, given hyperexponential parameters <h>.
+ */
+double
+esl_hxp_cdf(double x, ESL_HYPEREXP *h)
+{
+  double cdf = 0.;
+  int    k;
+  
+  if (x < h->mu) return 0.;
+
+  for (k = 0; k < h->K; k++)
+    cdf += h->q[k] * esl_exp_cdf(x, h->mu, h->lambda[k]);
+  return cdf;
+}
+
+/* Function:  esl_hxp_logcdf()
+ *
+ * Purpose:   Returns the log of the CDF $\log P(X \leq x)$
+ *            for quantile <x>, given hyperexponential parameters <h>.
+ */
+double
+esl_hxp_logcdf(double x, ESL_HYPEREXP *h)
+{
+  int k;
+
+  if (x < h->mu) return -eslINFINITY;
+
+  for (k = 0; k < h->K; k++)
+    if (h->q[k] == 0.0) 
+      h->wrk[k] = -eslINFINITY;
+    else
+      h->wrk[k] = log(h->q[k]) + esl_exp_logcdf(x, h->mu, h->lambda[k]);
+
+  return esl_vec_DLogSum(h->wrk, h->K);
+}
+
+
+/* Function:  esl_hxp_surv()
+ *
+ * Purpose:   Returns the survivor function $P(X > x)$ (1-CDF)
+ *            for quantile <x>, given hyperexponential parameters <h>.
+ */
+double
+esl_hxp_surv(double x, ESL_HYPEREXP *h)
+{
+  double srv = 0.;
+  int    k;
+  
+  if (x < h->mu) return 1.0;
+
+  for (k = 0; k < h->K; k++)
+    srv += h->q[k] * esl_exp_surv(x, h->mu, h->lambda[k]);
+  return srv;
+}
+
+  
+/* Function:  esl_hxp_logsurv()
+ *
+ * Purpose:   Returns the log survivor function $\log P(X > x)$ (log(1-CDF))
+ *            for quantile <x>, given hyperexponential parameters <h>.
+ */
+double
+esl_hxp_logsurv(double x, ESL_HYPEREXP *h)
+{
+  int k;
+  
+  if (x < h->mu) return 0.0;
+
+  for (k = 0; k < h->K; k++)
+    if (h->q[k] == 0.0) 
+      h->wrk[k] = -eslINFINITY;
+    else
+      h->wrk[k] = log(h->q[k]) + esl_exp_logsurv(x, h->mu, h->lambda[k]);
+  
+  return esl_vec_DLogSum(h->wrk, h->K);
+}
+
+/* Function:  esl_hxp_invcdf()
+ *
+ * Purpose:   Calculates the inverse CDF for a hyperexponential <h>
+ *            returning the quantile <x> at which the CDF is <p>.
+ *            
+ *            The inverse CDF of a mixture model has no
+ *            analytical expression as far as I'm aware. The calculation
+ *            here is a computationally expensive, brute force bisection
+ *            search in <x> using the CDF function. It will suffice for
+ *            a small number of calls (for plotting applications, for example),
+ *            but it is not sufficient for a large number of calls.
+ */
+double
+esl_hxp_invcdf(double p, ESL_HYPEREXP *h)
+{
+  double x1, x2, xm;		/* low, high guesses at x */
+  double f2, fm;
+  double tol = 1e-6;
+
+  x1 = h->mu;
+  x2 = h->mu + 1.;
+  do {				/* bracket */
+    x2 = x2 + 2.*(x2-x1);
+    f2 = esl_hxp_cdf(x2, h);
+  } while (f2 < p);
+
+  do {				/* bisection */
+    xm = (x1+x2) / 2.;
+    fm = esl_hxp_cdf(xm, h);
+    
+    if      (fm > p) x2 = xm;
+    else if (fm < p) x1 = xm;
+    else return xm;		/* unlikely case of fm==cdf */
+  } while ( (x2-x1)/(x1+x2-2*h->mu) > tol);
+
+  xm = (x1+x2) / 2.;
+  return xm;
+  
+}
+/*-------------------- end densities & distributions ------------------------*/
+
+
+
+
+/****************************************************************************
+ * 3. Generic API routines: for general interface w/ histogram module
+ ****************************************************************************/ 
+
+/* Function:  esl_hxp_generic_pdf()
+ *
+ * Purpose:   Generic-API version of PDF call.
+ */
+double
+esl_hxp_generic_pdf(double x, void *params)
+{
+  ESL_HYPEREXP *h = (ESL_HYPEREXP *) params;
+  return esl_hxp_pdf(x, h);
+}
+
+/* Function:  esl_hxp_generic_cdf()
+ *
+ * Purpose:   Generic-API version of CDF call.
+ */
+double
+esl_hxp_generic_cdf(double x, void *params)
+{
+  ESL_HYPEREXP *h = (ESL_HYPEREXP *) params;
+  return esl_hxp_cdf(x, h);
+}
+
+/* Function:  esl_hxp_generic_surv()
+ *
+ * Purpose:   Generic-API version of survivor function.
+ */
+double
+esl_hxp_generic_surv(double x, void *params)
+{
+  ESL_HYPEREXP *h = (ESL_HYPEREXP *) params;
+  return esl_hxp_surv(x, h);
+}
+
+/* Function:  esl_hxp_generic_invcdf()
+ *
+ * Purpose:   Generic-API version of inverse CDF.
+ */
+double
+esl_hxp_generic_invcdf(double p, void *params)
+{
+  ESL_HYPEREXP *h = (ESL_HYPEREXP *) params;
+  return esl_hxp_invcdf(p, h);
+}
+/*------------------------ end generic API ---------------------------------*/
+
+
+
+
+
+
+/****************************************************************************
+ * 4. Dumping plots for files
+ ****************************************************************************/ 
+
+/* Function:  esl_hxp_Plot()
+ *
+ * Purpose:   Plot some function <func> (for instance, <esl_hxp_pdf()>)
+ *            for hyperexponential parameters <h>, for a range of
+ *            quantiles x from <xmin> to <xmax> in steps of <xstep>;
+ *            output to an open stream <fp> in xmgrace XY input format.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error. 
+ */
+int
+esl_hxp_Plot(FILE *fp, ESL_HYPEREXP *h,
+	     double (*func)(double x, ESL_HYPEREXP *h), 
+	     double xmin, double xmax, double xstep)
+{
+  double x;
+  for (x = xmin; x <= xmax; x += xstep)
+    if (fprintf(fp, "%f\t%g\n", x, (*func)(x, h)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hyperexp plot write failed");
+  if (fprintf(fp, "&\n")                          < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hyperexp plot write failed");
+  return eslOK;
+}
+/*-------------------- end plot dumping routines ---------------------------*/
+
+
+
+
+
+/****************************************************************************
+ * 5. Sampling (requires augmentation w/ random module)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_RANDOM
+/* Function:  esl_hxp_Sample()
+ *
+ * Purpose:   Sample a random variate x from a hyperexponential <h>, 
+ *            given random number source <r>.
+ */
+double
+esl_hxp_Sample(ESL_RANDOMNESS *r, ESL_HYPEREXP *h)
+{
+  int k;	
+  k = esl_rnd_DChoose(r, h->q, h->K);
+  return esl_exp_Sample(r, h->mu, h->lambda[k]);
+}
+#endif /*eslAUGMENT_RANDOM*/
+/*--------------------------- end sampling ---------------------------------*/
+
+
+
+/****************************************************************************
+ * 6. File input (mixture models are a little too complex to set on commandline)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_FILEPARSER
+/* Function:  esl_hyperexp_Read()
+ *
+ * Purpose:   Reads hyperexponential parameters from an open <e>.
+ *            which is an <ESL_FILEPARSER> tokenizer for an open stream.
+ *            
+ *            The first token is <K>, the number of mixture components.
+ *            The second token is <mu>, the x offset shared by all components.
+ *            Then for each mixture component <k=1..K>, it reads
+ *            a mixture coefficient <q[k]> and a decay parameter
+ *            <lambda[k]>.
+ *            
+ *            The <2K+2> data tokens must occur in this order, but
+ *            they can be grouped into any number of lines, because the
+ *            parser ignores line breaks.
+ *            
+ *            Anything after a <\#> character on a line is a comment, and
+ *            is ignored.
+ *            
+ * Returns:   <eslOK> on success, and <ret_hxp> points to a new <ESL_HYPEREXP>
+ *            object.
+ *            <eslEFORMAT> on "normal" parse failure caused by a bad file 
+ *            format that's likely the user's fault.
+ *
+ * Throws:    <eslEMEM> if allocation of the new <ESL_HYPEREXP> fails.
+ *
+ * 
+ * FIXME: All our mixture models (esl_dirichlet, for example) should be
+ *        reconciled w/ identical interfaces & behaviour.
+ */
+int
+esl_hyperexp_Read(ESL_FILEPARSER *e, ESL_HYPEREXP **ret_hxp)
+{
+  ESL_HYPEREXP   *hxp = NULL;
+  char           *tok;
+  int             status = eslOK;
+  int             nc;
+  int             k;
+  double          sum;
+
+  esl_fileparser_SetCommentChar(e, '#');
+
+  if ((status = esl_fileparser_GetToken(e, &tok, NULL)) != eslOK) goto ERROR;
+  nc = atoi(tok);
+  if (nc < 1) {  
+    sprintf(e->errbuf, "Expected # of components K >= 1 as first token");
+    goto ERROR;
+  }
+
+  if ((hxp = esl_hyperexp_Create(nc)) == NULL) return eslEMEM; /* percolation */
+  
+  if ((status = esl_fileparser_GetToken(e, &tok, NULL)) != eslOK) goto ERROR;
+  hxp->mu = atof(tok);
+
+  for (k = 0; k < hxp->K; k++)
+    {
+      if ((status = esl_fileparser_GetToken(e, &tok, NULL)) != eslOK) goto ERROR;
+      hxp->q[k] = atof(tok);
+      
+      if ((status = esl_fileparser_GetToken(e, &tok, NULL)) != eslOK) goto ERROR;
+      hxp->lambda[k] = atof(tok);
+
+      if (hxp->q[k] < 0. || hxp->q[k] > 1.) {
+	sprintf(e->errbuf, "Expected a mixture coefficient q[k], 0<=q[k]<=1");
+	goto ERROR;
+      }
+      if (hxp->lambda[k] <= 0.) {
+	sprintf(e->errbuf, "Expected a lambda parameter, lambda>0");
+	goto ERROR;
+      }
+    }
+  sum = esl_vec_DSum(hxp->q, hxp->K);
+  if (fabs(sum-1.0) > 0.05) {
+    sprintf(e->errbuf, "Expected mixture coefficients to sum to 1");
+    goto ERROR;
+  }
+  esl_vec_DNorm(hxp->q, hxp->K);
+  *ret_hxp = hxp;
+  return eslOK;
+
+ ERROR:
+  esl_hyperexp_Destroy(hxp); 
+  return eslEFORMAT;
+}
+
+/* Function:  esl_hyperexp_ReadFile()
+ *
+ * Purpose:   Convenience wrapper around <esl_hyperexp_Read()> that takes
+ *            a filename as an argument, instead of an open <ESL_FILEPARSER>.
+ *            
+ *            This lets you quickly read an object from a file, but it
+ *            limits your ability to deal gracefully and flexibly with
+ *            'normal' errors like 'file not found' or 'bad file format'.
+ *            Here, all errors are fatal.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on an allocation failure.
+ *            
+ *            <eslEFORMAT> on any parse error. Diagnostic information is
+ *            unavailable, because the <ESL_FILEPARSER> that's holding 
+ *            that information is internal to this function. 
+ *            
+ *            <eslENOTFOUND> on any failure to open the file.
+ */
+int
+esl_hyperexp_ReadFile(char *filename, ESL_HYPEREXP **ret_hxp)
+{
+  FILE           *fp;
+  ESL_FILEPARSER *e;
+  int             status;
+
+  if ((fp = fopen(filename, "r")) == NULL) 
+    ESL_EXCEPTION(eslENOTFOUND, "file not found");
+
+  if ((e = esl_fileparser_Create(fp)) == NULL) {
+    fclose(fp);
+    ESL_EXCEPTION(eslEMEM, "failed to create fileparser");
+  }
+  esl_fileparser_SetCommentChar(e, '#');
+
+  status = esl_hyperexp_Read(e, ret_hxp);
+
+  esl_fileparser_Destroy(e);
+  fclose(fp);
+  return status;
+}
+#endif /*eslAUGMENT_FILEPARSER*/
+
+
+
+
+
+
+
+/****************************************************************************
+ * 7. ML fitting to complete data
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_MINIMIZER
+/* This structure is used to sneak the data into minimizer's generic
+ * (void *) API for all aux data
+ */
+struct hyperexp_data {
+  double *x;
+  int     n;
+  ESL_HYPEREXP *h;
+};
+
+/* Given hyperexponential parameters in <h>;
+ * do appropriate c.o.v.'s to unconstrained real parameters
+ * and fill in the packed parameter vector <p>.
+ * 
+ * <p> must be allocated for at least (2K-1) doubles: K-1 mixture 
+ * coefficients and K lambda parameters. (mu is not a free param).
+ *
+ * First K-1 are $Q_1..Q_{K-1}$ mixture coefficient parameters; $Q_0$ implicitly 0;
+ *  cov is $q_k = \frac{e^{Q_k}}{\sum_j e^{Q_j}}$;  $Q_k = \log(q_k) - \log(q_0)$.
+ * Then K lambda params;
+ * lambda cov is $\lambda = e^w$, $w = \log(\lambda)$.
+ */
+static void
+hyperexp_pack_paramvector(double *p, int np, ESL_HYPEREXP *h)
+{
+  int    i;			/* counter in parameter vector p */
+  int    k;			/* counter in mixture components */
+  double z;			/* tmp variable */
+
+  /* mixture coefficients */
+  i = 0;
+  if (! h->fixmix) {
+    z = log(h->q[0]);
+    for (k = 1; k < h->K; k++) 
+      p[i++] = log(h->q[k]) - z;
+  }
+  
+  /* exponential parameters */
+  for (k = 0; k < h->K; k++)
+    if (! h->fixlambda[k])
+      p[i++] = log(h->lambda[k]);
+}
+
+/* Same as above but in reverse: given parameter vector <p>,
+ * <np> = 2K-1, do appropriate c.o.v. back to desired parameter space, and
+ * update the hyperexponential <h>.
+ */
+static void
+hyperexp_unpack_paramvector(double *p, int np, ESL_HYPEREXP *h)
+{
+  int    i;			/* counter in parameter vector p */
+  int    k;			/* counter in mixture components */
+  double z;			/* tmp variable  */
+
+  /* Fetch the params in their c.o.v. space first
+   */
+  i = 0;
+  if (! h->fixmix) {
+    h->q[0] = 0;	/* implicitly */
+    for (k = 1; k < h->K; k++) 
+      h->q[k] = p[i++]; 
+  }
+  for (k = 0; k < h->K; k++)
+    if (! h->fixlambda[k]) 
+      h->lambda[k] = p[i++];
+  
+  /* Convert mix coefficients back to probabilities;
+   * their  c.o.v. is q_k = e^{Q_k} / \sum_k e^{Q_k}
+   * which rearranges to exp(Q_k - log[\sum_k e^Q_k]),
+   * and we have the DLogSum() function to compute the log sum.
+   */
+  if (! h->fixmix) {
+    z = esl_vec_DLogSum(h->q, h->K);
+    for (k = 0; k < h->K; k++)
+      h->q[k] = exp(h->q[k] - z);
+  }
+  
+  /* lambda c.o.v. is \lambda = e^w */
+  for (k = 0; k < h->K; k++)
+    if (! h->fixlambda[k]) 
+      h->lambda[k] = exp(h->lambda[k]);
+}
+
+/* The log likelihood function to be optimized by ML fitting:
+ *   This needs to be careful of a case where a lambda = inf.
+ */
+static double
+hyperexp_complete_func(double *p, int np, void *dptr)
+{
+  struct hyperexp_data *data = (struct hyperexp_data *) dptr;
+  ESL_HYPEREXP         *h    = data->h;
+  double logL = 0.;
+  int    i;
+
+  hyperexp_unpack_paramvector(p, np, h);
+  for (i = 0; i < data->n; i++)
+    logL += esl_hxp_logpdf(data->x[i], h);
+  return -logL;
+}
+
+/* The gradient of the NLL w.r.t. each free parameter in p.
+ */
+static void
+hyperexp_complete_gradient(double *p, int np, void *dptr, double *dp)
+{
+  struct hyperexp_data *data = (struct hyperexp_data *) dptr;
+  ESL_HYPEREXP         *h    = data->h;
+  double pdf;
+  int i,k;
+  int pidx;			
+  
+  hyperexp_unpack_paramvector(p, np, h);
+  esl_vec_DSet(dp, np, 0.);
+  for (i = 0; i < data->n; i++)
+    {
+      /* FIXME: I think the calculation below may need to be done
+       * in log space, to avoid underflow errors; see complete_binned_gradient()
+       */
+      /* Precalculate q_k PDF_k(x) terms, and their sum */
+      for (k = 0; k < h->K; k++)
+	h->wrk[k] = h->q[k] * esl_exp_pdf(data->x[i], h->mu, h->lambda[k]);
+      pdf = esl_vec_DSum(h->wrk, h->K);
+
+      pidx = 0;
+      if (! h->fixmix) {
+	for (k = 1; k < h->K; k++) /* generic d/dQ solution for mixture models */
+	  dp[pidx++] -= h->wrk[k]/pdf - h->q[k];
+      }
+      
+      for (k = 0; k < h->K; k++)
+	if (! h->fixlambda[k])
+	  dp[pidx++] -= (1.-h->lambda[k]*(data->x[i]-h->mu))*h->wrk[k]/pdf; /* d/dw */
+    }
+}
+
+
+/* Function:  esl_hxp_FitGuess()
+ *
+ * Purpose:   Given a sorted vector of <n> observed data samples <x[]>,
+ *            from smallest <x[0]> to largest <x[n-1]>, calculate a
+ *            very crude guesstimate of a fit -- suitable only as a starting
+ *            point for further optimization -- and return those parameters
+ *            in <h>.
+ *
+ *            Assigns $q_k \propto \frac{1}{k}$ and  $\mu = \min_i x_i$;
+ *            splits $x$ into $K$ roughly equal-sized bins, and
+ *            and assigns $\lambda_k$ as the ML estimate from bin $k$.
+ *            (If $q_k$ coefficients have already been fixed to 
+ *            known values, this step is skipped.)
+ */
+int
+esl_hxp_FitGuess(double *x, int n, ESL_HYPEREXP *h)
+{
+  double tmu;			/* current mu */
+  double mean;			/* mean (x-tmu) in a bin */
+  int    i,k;
+  int    imin, imax;
+
+  h->mu = x[0];  /* minimum */
+  for (k = 0; k < h->K; k++)
+    {
+      if (! h->fixmix) 
+	h->q[k] = 1 / (double)(k+1); /* priors ~ 1, 1/2, 1/3... */
+
+      imin = (int) ((double)(k*n)/(double)h->K);
+      imax = (int) ((double)((k+1)*n)/(double)h->K);
+      tmu = x[imin];
+      mean = 0.;
+      for (i = imin; i < imax; i++)
+	mean += x[i] - tmu;
+      mean /= (double)(imax-imin);
+      h->lambda[k] = 1 / mean;
+    }
+  esl_vec_DNorm(h->q, h->K);
+  return eslOK;
+}
+
+/* Function:  esl_hxp_FitComplete()
+ *
+ * Purpose:   Given a vector of <n> observed data samples <x[]> 
+ *            (sorted or unsorted), and an initial guess <h> for
+ *            a hyperexponential, find maximum likelihood parameters
+ *            by conjugate gradient descent optimization, starting
+ *            from <h> and leaving the final optimized solution in
+ *            <h>.
+ *            
+ * Returns:   <eslOK> on success, and <h> contains the fitted 
+ *            hyperexponential parameters.
+ *            
+ * Throws:    <eslEMEM> on allocation error, and <h> is left in
+ *            in its initial state.           
+ */
+int
+esl_hxp_FitComplete(double *x, int n, ESL_HYPEREXP *h)
+{
+  struct hyperexp_data data;
+  int     status;
+  double *p   = NULL;
+  double *u   = NULL;
+  double *wrk = NULL;
+  double  tol;
+  int     np;
+  double  fx;
+  int     i;
+
+  tol = 1e-6;
+
+  /* Determine number of free parameters and allocate 
+   */
+  np = 0;
+  if (! h->fixmix) np += h->K-1;  /* K-1 mix coefficients...     */
+  for (i = 0; i < h->K; i++)      /* ...and up to K lambdas free */
+    if (! h->fixlambda[i]) np++;	
+  ESL_ALLOC(p,   sizeof(double) * np);
+  ESL_ALLOC(u,   sizeof(double) * np);
+  ESL_ALLOC(wrk, sizeof(double) * np * 4);
+
+  /* Copy shared info into the "data" structure
+   */
+  data.x   = x;
+  data.n   = n;
+  data.h   = h;
+
+  /* From h, create the parameter vector.
+   */
+  hyperexp_pack_paramvector(p, np, h);
+
+  /* Define the step size vector u.
+   */
+  for (i = 0; i < np; i++) u[i] = 1.0;
+
+  /* Feed it all to the mighty optimizer.
+   */
+  status = esl_min_ConjugateGradientDescent(p, u, np, 
+					    &hyperexp_complete_func, 
+					    &hyperexp_complete_gradient,
+					    (void *) (&data), tol, wrk, &fx);
+  if (status != eslOK) goto ERROR;
+
+  /* Convert the final parameter vector back to a hyperexponential
+   */
+  hyperexp_unpack_paramvector(p, np, h);
+  
+  free(p);
+  free(u);
+  free(wrk);
+  esl_hyperexp_SortComponents(h);
+  return eslOK;
+
+ ERROR:
+  if (p   != NULL) free(p);
+  if (u   != NULL) free(u);
+  if (wrk != NULL) free(wrk);
+  return status;
+}
+
+
+/****************************************************************************
+ * 8. Maximum likelihood fitting, complete binned data         xref STL9/143-144
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_HISTOGRAM
+/* minimizer API only allows us one generic void ptr to pass
+ * our data through:
+ */
+struct hyperexp_binned_data {
+  ESL_HISTOGRAM *g;	
+  ESL_HYPEREXP  *h;
+};
+  
+static double 
+hyperexp_complete_binned_func(double *p, int np, void *dptr)
+{
+  struct hyperexp_binned_data *data = (struct hyperexp_binned_data *) dptr;
+  ESL_HISTOGRAM               *g    = data->g;
+  ESL_HYPEREXP                *h    = data->h;
+  double logL = 0.;
+  double ai, delta;
+  int    i,k;
+
+  hyperexp_unpack_paramvector(p, np, h);
+  delta = g->w;
+  /* counting over occupied, uncensored histogram bins */
+  for (i = g->cmin; i <= g->imax; i++) 
+    {
+      if (g->obs[i] == 0) continue; /* skip unoccupied ones */
+
+      ai    = esl_histogram_Bin2LBound(g, i);
+      if (ai < h->mu) ai = h->mu; /* careful about the left boundary: no x < h->mu */
+
+      for (k = 0; k < h->K; k++)
+	{
+	  h->wrk[k] = log(h->q[k]) - h->lambda[k]*(ai-h->mu);
+	  if (delta * h->lambda[k] < eslSMALLX1) 
+	    h->wrk[k] += log(delta * h->lambda[k]);
+	  else
+	    h->wrk[k] += log(1 - exp(-delta * h->lambda[k]));
+	}
+      logL += g->obs[i] * esl_vec_DLogSum(h->wrk, h->K);
+    }
+  return -logL;
+}
+
+static void
+hyperexp_complete_binned_gradient(double *p, int np, void *dptr, double *dp)
+{
+  struct hyperexp_binned_data *data = (struct hyperexp_binned_data *) dptr;
+  ESL_HISTOGRAM               *g    = data->g;
+  ESL_HYPEREXP                *h    = data->h;
+  int i,k;
+  int pidx;			
+  double z;
+  double tmp;
+  double ai, delta;
+  
+  hyperexp_unpack_paramvector(p, np, h);
+  esl_vec_DSet(dp, np, 0.);
+  delta = g->w;
+
+  /* counting over occupied, uncensored histogram bins */
+  for (i = g->cmin; i <= g->imax; i++)
+    {
+      if (g->obs[i] == 0) continue;
+      ai = esl_histogram_Bin2LBound(g, i);
+      if (ai < h->mu) ai = h->mu; /* careful about the left boundary: no x < h->mu */
+
+      /* Calculate log (q_m alpha_m(a_i) terms
+       */
+      for (k = 0; k < h->K; k++)
+	{
+	  h->wrk[k] = log(h->q[k]) - h->lambda[k]*(ai-h->mu);
+	  if (delta * h->lambda[k] < eslSMALLX1) 
+	    h->wrk[k] += log(delta * h->lambda[k]);
+	  else
+	    h->wrk[k] += log(1 - exp(-delta * h->lambda[k]));
+	}
+      z = esl_vec_DLogSum(h->wrk, h->K); /* z= log \sum_k q_k alpha_k(a_i) */
+
+      /* Bump the gradients for Q_1..Q_{K-1} */
+      pidx = 0;
+      if (! h->fixmix) {
+	for (k = 1; k < h->K; k++)
+	  dp[pidx++] -= g->obs[i] * (exp(h->wrk[k] - z) - h->q[k]);
+      }
+	
+      /* Bump the gradients for w_0..w_{K-1}
+       */
+      for (k = 0; k < h->K; k++)
+	if (! h->fixlambda[k])
+	  {
+	    tmp  = log(h->q[k]) + log(h->lambda[k])- h->lambda[k]*(ai-h->mu);
+	    tmp  = exp(tmp - z);
+	    tmp *= (ai + delta - h->mu) * exp(-delta * h->lambda[k]) - (ai - h->mu);
+	    dp[pidx++] -= g->obs[i] * tmp;
+	  }
+    }  
+}
+
+/* Function:  esl_hxp_FitGuessBinned()
+ *
+ * Purpose:   Given a histogram <g> with binned observations;
+ *            obtain a very crude guesstimate of a fit -- suitable only 
+ *            as a starting point for further optimization -- and return 
+ *            those parameters in <h>.
+ *
+ *            Assigns $q_k \propto \frac{1}{k}$ and  $\mu = \min_i x_i$;
+ *            splits $x$ into $K$ roughly equal-sized bins, and
+ *            and assigns $\lambda_k$ as the ML estimate from bin $k$.
+ *            If the coefficients have already been set to known values,
+ *            this step is skipped.
+ */
+int
+esl_hxp_FitGuessBinned(ESL_HISTOGRAM *g, ESL_HYPEREXP *h)
+{
+  double sum;
+  int    n;
+  int    i,k;
+  int    nb;
+  double ai;
+
+  if      (g->is_tailfit) h->mu = g->phi;  /* all x > mu in this case */
+  else if (g->is_rounded) h->mu = esl_histogram_Bin2LBound(g, g->imin);
+  else                    h->mu = g->xmin; 
+
+  nb    = g->imax - g->cmin + 1;
+  k     = h->K-1;
+  sum   = 0;
+  n     = 0;
+  for (i = g->imax; i >= g->cmin; i--)
+    {
+      ai = esl_histogram_Bin2LBound(g,i);
+      if (ai < g->xmin) ai = g->xmin;
+      n      += g->obs[i];
+      sum    += g->obs[i] * ai;
+      
+      if (i == g->cmin + (k*nb)/h->K)
+	h->lambda[k--] = 1 / ((sum/(double) n) - ai);
+    }
+
+  if (! h->fixmix) {
+    for (k = 0; k < h->K; k++)
+      h->q[k] = 1 / (double) h->K;
+  }
+
+  return eslOK;
+}
+
+
+/* Function:  esl_hxp_FitCompleteBinned()
+ *
+ * Purpose:   Given a histogram <g> with binned observations, where each
+ *            bin i holds some number of observed samples x with values from 
+ *            lower bound l to upper bound u (that is, $l < x \leq u$),
+ *            and given a starting guess <h> for hyperexponential parameters;
+ *
+ *            Find maximum likelihood parameters <h> by conjugate gradient
+ *            descent, starting from the initial <h> and leaving the
+ *            optimized solution in <h>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error, and <h> is left in its
+ *            initial state.
+ */
+int 
+esl_hxp_FitCompleteBinned(ESL_HISTOGRAM *g, ESL_HYPEREXP *h)
+{
+  struct hyperexp_binned_data data;
+  int     status;
+  double *p   = NULL;
+  double *u   = NULL;
+  double *wrk = NULL;
+  double  fx;
+  int     i;
+  double  tol = 1e-6;
+  int     np;
+
+  np = 0;
+  if (! h->fixmix) np = h->K-1;  /* K-1 mix coefficients...      */
+  for (i = 0; i < h->K; i++)     /* ...and up to K lambdas free. */
+    if (! h->fixlambda[i]) np++;
+
+  ESL_ALLOC(p,   sizeof(double) * np);
+  ESL_ALLOC(u,   sizeof(double) * np);
+  ESL_ALLOC(wrk, sizeof(double) * np * 4);
+
+  /* Copy shared info into the "data" structure  */
+  data.g     = g;
+  data.h     = h;
+
+  /* From h, create the parameter vector. */
+  hyperexp_pack_paramvector(p, np, h);
+
+  /* Define the step size vector u.
+   */
+  for (i = 0; i < np; i++) u[i] = 1.0;
+
+  /* Feed it all to the mighty optimizer.
+   */
+  status = esl_min_ConjugateGradientDescent(p, u, np, 
+					    &hyperexp_complete_binned_func, 
+					    &hyperexp_complete_binned_gradient,
+					    (void *) (&data), tol, wrk, &fx);
+  if (status != eslOK) goto ERROR;
+
+  /* Convert the final parameter vector back to a hyperexponential
+   */
+  hyperexp_unpack_paramvector(p, np, h);
+  
+  free(p);
+  free(u);
+  free(wrk);
+  esl_hyperexp_SortComponents(h);
+  return eslOK;
+
+ ERROR:
+  if (p   != NULL) free(p);
+  if (u   != NULL) free(u);
+  if (wrk != NULL) free(wrk);
+  return status;
+}
+#endif /*eslAUGMENT_HISTOGRAM*/
+#endif /*eslAUGMENT_MINIMIZER*/
+/*--------------------------- end fitting ----------------------------------*/
+
+
+
+
+
+
+/****************************************************************************
+ * 9. Test driver
+ ****************************************************************************/ 
+#ifdef eslHYPEREXP_TESTDRIVE
+/* Compile:
+   gcc -g -Wall -I. -I ~/src/easel -L ~/src/easel -o test\
+    -DeslHYPEREXP_TESTDRIVE esl_hyperexp.c -leasel -lm
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_hyperexp.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_HISTOGRAM  *h;
+  ESL_RANDOMNESS *r;
+  ESL_HYPEREXP   *hxp;
+  ESL_HYPEREXP   *ehxp;
+  int     n         = 20000;
+  double  binwidth  = 0.1;
+  int     i;
+  double  x;
+  double *data;
+  int     ndata;
+  int     k, ek, mink;
+  double  mindiff, diff;
+
+  int     opti;
+  int     be_verbose   = FALSE;
+  char   *paramfile    = NULL;
+  char   *plotfile     = NULL;
+  FILE   *pfp          = stdout;
+  int     plot_pdf     = FALSE;
+  int     plot_logpdf  = FALSE;
+  int     plot_cdf     = FALSE;
+  int     plot_logcdf  = FALSE;
+  int     plot_surv    = FALSE;
+  int     plot_logsurv = FALSE;
+  int     xmin_set     = FALSE;
+  double  xmin;
+  int     xmax_set     = FALSE;
+  double  xmax;
+  int     xstep_set    = FALSE;
+  double  xstep;
+  int     do_fixmix    = FALSE;
+  int     status;
+
+  for (opti = 1; opti < argc && *(argv[opti]) == '-'; opti++)
+    {
+      if      (strcmp(argv[opti], "-f")  == 0) do_fixmix    = TRUE;
+      else if (strcmp(argv[opti], "-i")  == 0) paramfile    = argv[++opti];
+      else if (strcmp(argv[opti], "-n")  == 0) n            = atoi(argv[++opti]);
+      else if (strcmp(argv[opti], "-o")  == 0) plotfile     = argv[++opti];
+      else if (strcmp(argv[opti], "-v")  == 0) be_verbose   = TRUE;
+      else if (strcmp(argv[opti], "-w")  == 0) binwidth     = atof(argv[++opti]);
+      else if (strcmp(argv[opti], "-C")  == 0) plot_cdf     = TRUE;
+      else if (strcmp(argv[opti], "-LC") == 0) plot_logcdf  = TRUE;
+      else if (strcmp(argv[opti], "-P")  == 0) plot_pdf     = TRUE;
+      else if (strcmp(argv[opti], "-LP") == 0) plot_logpdf  = TRUE;
+      else if (strcmp(argv[opti], "-S")  == 0) plot_surv    = TRUE;
+      else if (strcmp(argv[opti], "-LS") == 0) plot_logsurv = TRUE;
+      else if (strcmp(argv[opti], "-XL") == 0) { xmin_set  = TRUE; xmin  = atof(argv[++opti]); }
+      else if (strcmp(argv[opti], "-XH") == 0) { xmax_set  = TRUE; xmax  = atof(argv[++opti]); }
+      else if (strcmp(argv[opti], "-XS") == 0) { xstep_set = TRUE; xstep = atof(argv[++opti]); }
+      else esl_fatal("bad option");
+    }
+
+  if (paramfile != NULL)
+    {
+      status = esl_hyperexp_ReadFile(paramfile, &hxp);
+      if      (status == eslENOTFOUND) esl_fatal("Param file %s not found", paramfile);
+      else if (status == eslEFORMAT)   esl_fatal("Parse failed: param file %s invalid format", paramfile);
+      else if (status != eslOK)        esl_fatal("Unusual failure opening param file %s", paramfile);
+    }
+  else 
+    {
+      hxp = esl_hyperexp_Create(3);
+      hxp->mu = -2.0;
+      hxp->q[0]      = 0.5;    hxp->q[1]      = 0.3;   hxp->q[2]      = 0.2; 
+      hxp->lambda[0] = 1.0;    hxp->lambda[1] = 0.3;   hxp->lambda[2] = 0.1;
+    }
+  if (do_fixmix) esl_hyperexp_FixedUniformMixture(hxp);	/* overrides q's above */
+
+  if (be_verbose) esl_hyperexp_Dump(stdout, hxp);
+
+  r = esl_randomness_Create(42);
+  h = esl_histogram_CreateFull(hxp->mu, 100., binwidth);
+  if (plotfile != NULL) {
+    if ((pfp = fopen(plotfile, "w")) == NULL) 
+      esl_fatal("Failed to open plotfile");
+  }
+  if (! xmin_set)  xmin  = hxp->mu;
+  if (! xmax_set)  xmax  = hxp->mu+ 20*(1. / esl_vec_DMin(hxp->lambda, hxp->K));
+  if (! xstep_set) xstep = 0.1;
+
+  for (i = 0; i < n; i++)
+    {
+      x = esl_hxp_Sample(r, hxp);
+      esl_histogram_Add(h, x);
+    }
+
+  esl_histogram_GetData(h, &data, &ndata); /* get sorted data vector */
+
+  ehxp = esl_hyperexp_Create(hxp->K);
+  if (do_fixmix) esl_hyperexp_FixedUniformMixture(ehxp);
+  esl_hxp_FitGuess(data, ndata, ehxp);  
+  if ( esl_hxp_FitComplete(data, ndata, ehxp) != eslOK) esl_fatal("Failed to fit hyperexponential");
+
+  if (be_verbose) esl_hyperexp_Dump(stdout, ehxp);
+
+  if (fabs( (ehxp->mu-hxp->mu)/hxp->mu ) > 0.01)
+    esl_fatal("Error in (complete) fitted mu > 1%\n");
+  for (ek = 0; ek < ehxp->K; ek++)
+    {  /* try to match each estimated lambda up to a parametric lambda */
+      mindiff = 1.0;
+      mink    = -1;
+      for (k = 0; k < hxp->K; k++)
+	{
+	  diff =  fabs( (ehxp->lambda[ek] - hxp->lambda[k]) / hxp->lambda[k]);
+	  if (diff < mindiff) {
+	    mindiff = diff;
+	    mink    = k;
+	  }
+	}
+      if (mindiff > 0.50)
+	esl_fatal("Error in (complete) fitted lambda > 50%\n");
+      if (fabs( (ehxp->q[ek] - hxp->q[mink]) / hxp->q[mink]) > 1.0)
+	esl_fatal("Error in (complete) fitted q > 2-fold%\n");
+    }
+
+  esl_hxp_FitGuessBinned(h, ehxp);  
+  if ( esl_hxp_FitCompleteBinned(h, ehxp) != eslOK) esl_fatal("Failed to fit binned hyperexponential");
+  if (be_verbose)  esl_hyperexp_Dump(stdout, ehxp);
+
+  if (fabs( (ehxp->mu-hxp->mu)/hxp->mu ) > 0.01)
+    esl_fatal("Error in (binned) fitted mu > 1%\n");
+  for (ek = 0; ek < ehxp->K; ek++)
+    {  /* try to match each estimated lambda up to a parametric lambda */
+      mindiff = 1.0;
+      mink    = -1;
+      for (k = 0; k < hxp->K; k++)
+	{
+	  diff =  fabs( (ehxp->lambda[ek] - hxp->lambda[k]) / hxp->lambda[k]);
+	  if (diff < mindiff) {
+	    mindiff = diff;
+	    mink    = k;
+	  }
+	}
+      if (mindiff > 0.50)
+	esl_fatal("Error in (binned) fitted lambda > 50%\n");
+      if (fabs( (ehxp->q[ek] - hxp->q[mink]) / hxp->q[mink]) > 1.0)
+	esl_fatal("Error in (binned) fitted q > 2-fold\n");
+    }
+
+  if (plot_pdf)     esl_hxp_Plot(pfp, hxp, &esl_hxp_pdf,     xmin, xmax, xstep);
+  if (plot_logpdf)  esl_hxp_Plot(pfp, hxp, &esl_hxp_logpdf,  xmin, xmax, xstep);
+  if (plot_cdf)     esl_hxp_Plot(pfp, hxp, &esl_hxp_cdf,     xmin, xmax, xstep);
+  if (plot_logcdf)  esl_hxp_Plot(pfp, hxp, &esl_hxp_logcdf,  xmin, xmax, xstep);
+  if (plot_surv)    esl_hxp_Plot(pfp, hxp, &esl_hxp_surv,    xmin, xmax, xstep);
+  if (plot_logsurv) esl_hxp_Plot(pfp, hxp, &esl_hxp_logsurv, xmin, xmax, xstep);
+
+  if (plotfile != NULL) fclose(pfp);
+  esl_histogram_Destroy(h);
+  esl_hyperexp_Destroy(hxp);
+  esl_hyperexp_Destroy(ehxp);
+  esl_randomness_Destroy(r);
+  return 0;
+}
+#endif /*eslHYPEREXP_TESTDRIVE*/
+
+/****************************************************************************
+ * Example main()
+ ****************************************************************************/ 
+#ifdef eslHYPEREXP_EXAMPLE
+/*::cexcerpt::hyperexp_example::begin::*/
+/* compile: 
+   gcc -g -Wall -I. -o example -DeslHYPEREXP_EXAMPLE\
+     -DeslAUGMENT_HISTOGRAM -DeslAUGMENT_RANDOM -DeslAUGMENT_MINIMIZER\
+      esl_hyperexp.c esl_exponential.c esl_histogram.c esl_random.c esl_minimizer.c\
+       esl_stats.c esl_vectorops.c easel.c -lm
+ * run:     ./example
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_hyperexp.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_RANDOMNESS *r;		/* source of random numbers        */
+  ESL_HISTOGRAM  *h;		/* histogram to store the data     */
+  ESL_HYPEREXP   *hxp;		/* hyperexponential to sample from */
+  ESL_HYPEREXP   *ehxp;		/* estimated hyperexponential      */
+  double      x;		/* sampled data point              */
+  int         n = 100000;	/* number of samples               */
+  double     *data;
+  int         ndata;
+  int         i;
+
+  hxp = esl_hyperexp_Create(3);
+  hxp->mu = -2.0;
+  hxp->q[0]      = 0.6;    hxp->q[1]      = 0.3;   hxp->q[2]      = 0.1; 
+  hxp->lambda[0] = 1.0;    hxp->lambda[1] = 0.3;   hxp->lambda[2] = 0.1;
+
+  r   = esl_randomness_Create(0);
+  h   = esl_histogram_CreateFull(hxp->mu, 100, 1.0);
+
+  for (i = 0; i < n; i++)
+    {
+      x    = esl_hxp_Sample(r, hxp);
+      esl_histogram_Add(h, x);
+    }
+  esl_histogram_GetData(h, &data, &ndata);
+
+  /* Plot the empirical (sampled) and expected survivals */
+  esl_histogram_PlotSurvival(stdout, h);
+  esl_hxp_Plot(stdout, hxp, &esl_hxp_surv, h->xmin, h->xmax, 0.1);
+
+  /* ML fit to complete data, and plot fitted survival curve */
+  ehxp = esl_hyperexp_Create(3);
+  esl_hxp_FitGuess(data, ndata, ehxp);
+  esl_hxp_FitComplete(data, ndata, ehxp);
+  esl_hxp_Plot(stdout, ehxp, &esl_hxp_surv,  h->xmin, h->xmax, 0.1);
+
+  /* ML fit to binned data, plot fitted survival curve  */
+  esl_hxp_FitGuessBinned(h, ehxp);
+  esl_hxp_FitCompleteBinned(h, ehxp);
+  esl_hxp_Plot(stdout, ehxp, &esl_hxp_surv,  h->xmin, h->xmax, 0.1);
+
+  esl_randomness_Destroy(r);
+  esl_histogram_Destroy(h);
+  esl_hyperexp_Destroy(hxp);
+  esl_hyperexp_Destroy(ehxp);
+  return 0;
+}
+/*::cexcerpt::hyperexp_example::end::*/
+#endif /*eslHYPEREXP_EXAMPLE*/
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
+
diff --git a/esl_hyperexp.h b/esl_hyperexp.h
new file mode 100644
index 0000000..7e06aff
--- /dev/null
+++ b/esl_hyperexp.h
@@ -0,0 +1,75 @@
+/* Hyperexponential (mixture exponential) distributions.
+ * 
+ */
+#ifndef eslHYPEREXP_INCLUDED
+#define eslHYPEREXP_INCLUDED
+
+#ifdef eslAUGMENT_RANDOM
+#include <esl_random.h>
+#endif
+#ifdef eslAUGMENT_HISTOGRAM
+#include <esl_histogram.h>
+#endif
+#ifdef eslAUGMENT_FILEPARSER
+#include <esl_fileparser.h>
+#endif
+
+typedef struct {
+  double *q;			/* mixture coefficients   [0..K-1]*/
+  double *lambda;		/* scale params           [0..K-1]*/
+  double *wrk;			/* tmp K-vector, for logpdf calc  */
+  double  mu;			/* location (x offset) parameter  */
+  int     K;			/* # of components                */
+  char   *fixlambda;		/* TRUE to constrain a lambda val */
+  int     fixmix;		/* TRUE to constrain the q's      */
+} ESL_HYPEREXP;
+
+
+extern ESL_HYPEREXP *esl_hyperexp_Create(int K);
+extern void          esl_hyperexp_Destroy(ESL_HYPEREXP *h);
+extern int           esl_hyperexp_Copy(ESL_HYPEREXP *src, ESL_HYPEREXP *dest);
+extern int           esl_hyperexp_FixedUniformMixture(ESL_HYPEREXP *h);
+extern int           esl_hyperexp_SortComponents(ESL_HYPEREXP *h);
+extern int           esl_hyperexp_Write(FILE *fp, ESL_HYPEREXP *hxp);
+extern int           esl_hyperexp_Dump(FILE *fp, ESL_HYPEREXP *hxp);
+#ifdef eslAUGMENT_FILEPARSER
+extern int           esl_hyperexp_Read(ESL_FILEPARSER *ef, ESL_HYPEREXP **ret_hxp);
+extern int           esl_hyperexp_ReadFile(char *filename, ESL_HYPEREXP **ret_hxp);
+#endif
+
+extern double  esl_hxp_pdf    (double x, ESL_HYPEREXP *h);
+extern double  esl_hxp_logpdf (double x, ESL_HYPEREXP *h);
+extern double  esl_hxp_cdf    (double x, ESL_HYPEREXP *h);
+extern double  esl_hxp_logcdf (double x, ESL_HYPEREXP *h);
+extern double  esl_hxp_surv   (double x, ESL_HYPEREXP *h);
+extern double  esl_hxp_logsurv(double x, ESL_HYPEREXP *h);
+extern double  esl_hxp_invcdf (double p, ESL_HYPEREXP *h);
+
+extern double  esl_hxp_generic_pdf   (double x, void *params);
+extern double  esl_hxp_generic_cdf   (double x, void *params);
+extern double  esl_hxp_generic_surv  (double x, void *params);
+extern double  esl_hxp_generic_invcdf(double x, void *params);
+
+extern int esl_hxp_Plot(FILE *fp, ESL_HYPEREXP *h,
+			double (*func)(double x, ESL_HYPEREXP *h), 
+			double xmin, double xmax, double xstep);
+
+#ifdef eslAUGMENT_RANDOM
+extern double esl_hxp_Sample(ESL_RANDOMNESS *r, ESL_HYPEREXP *h);
+#endif
+#ifdef eslAUGMENT_MINIMIZER
+extern int esl_hxp_FitGuess   (double *x, int n, ESL_HYPEREXP *h);
+extern int esl_hxp_FitComplete(double *x, int n, ESL_HYPEREXP *h);
+#ifdef eslAUGMENT_HISTOGRAM
+extern int esl_hxp_FitGuessBinned   (ESL_HISTOGRAM *g, ESL_HYPEREXP *h);
+extern int esl_hxp_FitCompleteBinned(ESL_HISTOGRAM *g, ESL_HYPEREXP *h);
+#endif
+#endif
+
+#endif /*eslHYPEREXP_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_hyperexp.tex b/esl_hyperexp.tex
new file mode 100644
index 0000000..9cbd753
--- /dev/null
+++ b/esl_hyperexp.tex
@@ -0,0 +1,37 @@
+
+The hyperexponential (mixture exponential) distribution may be useful
+for fitting fat-tailed empirical distributions. 
+
+\subsection{Hyperexponential densities}
+
+The hyperexponential distribution is a mixture of $K$ independent
+exponentials with a common location $\mu$ and different decay
+constants $\lambda_k$.
+
+The probability density function (PDF) is:
+
+\begin{equation}
+P(X=x) = \sum_k^{K} q_k \lambda_k e^{- \lambda_k (x - \mu)}
+\label{eqn:hyperexp_pdf}
+\end{equation}
+
+The cumulative distribution function (CDF) is:
+
+\begin{equation}
+P(X \leq x) = \sum_k^{K} q_k (1 - e^{- \lambda_k (x - \mu)})
+\label{eqn:hyperexp_cdf}
+\end{equation}
+
+Variate $x$ ranges $\mu \leq x < \infty$.
+
+Mixture coefficients $q_k$ specify the prior probability of each
+component $k$; $0 \leq q_k \leq 1$ and $\sum_k q_k = 1$.
+
+The single location parameter $\mu$ is unconstrained, $-\infty < \mu <
+\infty$. (Exponential distributions are usually represented without an
+explicit location parameter, implicitly assuming $\mu = 0$.)
+
+The scale parameters $\lambda_k$ for each component are nonnegative,
+$\lambda_k > 0$.
+
+
diff --git a/esl_keyhash.c b/esl_keyhash.c
new file mode 100644
index 0000000..97cd625
--- /dev/null
+++ b/esl_keyhash.c
@@ -0,0 +1,853 @@
+/* Partial emulation of Perl hashes (associative arrays),
+ * mapping keys (ASCII char strings) to array indices.
+ * 
+ * Contents:
+ *    1. The <ESL_KEYHASH> object.
+ *    2. Storing and retrieving keys.
+ *    3. Internal functions.        
+ *    4. Benchmark drivers.
+ *    5. Unit tests.
+ *    6. Test driver.
+ *    7. Example.
+ *    8. Copyright and license information.
+ * 
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "easel.h"
+#include "esl_mem.h"
+#include "esl_keyhash.h"
+
+static ESL_KEYHASH *keyhash_create(uint32_t hashsize, int init_key_alloc, int init_string_alloc);
+static uint32_t     jenkins_hash(const char *key, esl_pos_t n, uint32_t hashsize);
+static int          key_upsize(ESL_KEYHASH *kh);
+
+
+/*****************************************************************
+ *# 1. The <ESL_KEYHASH> object
+ *****************************************************************/ 
+
+/* Function:  esl_keyhash_Create()
+ * Synopsis:  Allocates a new keyhash.
+ *
+ * Purpose:   Create a new hash table for key indexing, and returns
+ *            a pointer to it.
+ *            
+ * Throws:    <NULL> on allocation failure.
+ *            
+ * Note:      128*sizeof(int)*3 + 2048*sizeof(char) + sizeof(ESL_KEYHASH):
+ *            about 2400 bytes for an initial KEYHASH.
+ */
+ESL_KEYHASH *
+esl_keyhash_Create(void)
+{
+  return keyhash_create(128,   /* initial hash table size (power of 2)              */
+			128,   /* initial alloc for up to 128 keys                  */
+			2048); /* initial alloc for keys totalling up to 2048 chars */
+}
+
+
+/* Function:  esl_keyhash_CreateCustom()
+ * Synopsis:  Allocate a new keyhash with customized initial allocations.
+ *
+ * Purpose:   Create a new hash table, initially allocating for
+ *            a hash table of size <hashsize> entries, <kalloc> 
+ *            keys, and a total key string length of <salloc>.
+ *            <hashsize> must be a power of 2, and all allocations
+ *            must be $\geq 0$. 
+ *            
+ *            The object will still expand as needed, so the reason to
+ *            use a customized allocation is when you're trying to
+ *            minimize memory footprint and you expect your keyhash to
+ *            be smaller than the default (of up to 128 keys, of total
+ *            length up to 2048).
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_KEYHASH *
+esl_keyhash_CreateCustom(uint32_t hashsize, int kalloc, int salloc)
+{
+  ESL_DASSERT1((hashsize && ((hashsize & (hashsize-1)) == 0))); /* hashsize is a power of 2 (bitshifting trickery) */
+  return keyhash_create(hashsize, kalloc, salloc);
+}
+
+/* Function:  esl_keyhash_Clone()
+ * Synopsis:  Duplicates a keyhash.
+ *
+ * Purpose:   Allocates and duplicates a keyhash <kh>. Returns a
+ *            pointer to the duplicate.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_KEYHASH *
+esl_keyhash_Clone(const ESL_KEYHASH *kh)
+{
+  ESL_KEYHASH *nw;		
+  int          h;
+
+  if ((nw = keyhash_create(kh->hashsize, kh->kalloc, kh->salloc)) == NULL) goto ERROR;
+
+  for (h = 0; h < kh->hashsize; h++)
+    nw->hashtable[h] = kh->hashtable[h];
+
+  for (h = 0; h < kh->nkeys; h++)  
+    {
+      nw->nxt[h]        = kh->nxt[h];
+      nw->key_offset[h] = kh->key_offset[h];
+    }
+  nw->nkeys = kh->nkeys;
+
+  memcpy(nw->smem, kh->smem, sizeof(char) * kh->sn);
+  nw->sn = kh->sn;
+  return nw;
+  
+ ERROR:
+  esl_keyhash_Destroy(nw);
+  return NULL;
+}
+
+
+/* Function:  esl_keyhash_Get()
+ * Synopsis:  Returns a key name, given its index.
+ *
+ * Purpose:   Returns a pointer to the key name associated
+ *            with index <idx>. The key name is a <NUL>-terminated 
+ *            string whose memory is managed internally in
+ *            the keyhash <kh>.
+ */
+char *
+esl_keyhash_Get(const ESL_KEYHASH *kh, int idx)
+{
+  return kh->smem + kh->key_offset[idx];
+}
+
+/* Function:  esl_keyhash_GetNumber()
+ * Synopsis:  Returns the total number of keys stored.
+ *
+ * Purpose:   Returns the total number of keys currently stored in the
+ *            keyhash <kh>.
+ */
+int 
+esl_keyhash_GetNumber(const ESL_KEYHASH *kh)
+{
+  return kh->nkeys;
+}
+
+/* Function:  esl_keyhash_Sizeof()
+ * Synopsis:  Returns the size of a keyhash object, in bytes.
+ */
+size_t
+esl_keyhash_Sizeof(const ESL_KEYHASH *kh)
+{
+  size_t n = 0;
+
+  n += sizeof(ESL_KEYHASH);
+  n += sizeof(int)  * kh->hashsize;
+  n += sizeof(int)  * kh->kalloc * 2;
+  n += sizeof(char) * kh->salloc;
+  return n;
+}
+
+/* Function:  esl_keyhash_Reuse()
+ * Synopsis:  Recycle a keyhash.
+ *
+ * Purpose:   Empties keyhash <kh> so it can be reused without
+ *            creating a new one. 
+ *
+ * Returns:   <eslOK> on success.
+ */
+int 
+esl_keyhash_Reuse(ESL_KEYHASH *kh)
+{
+  int i;
+
+  for (i = 0; i < kh->hashsize; i++) kh->hashtable[i] = -1;
+  kh->nkeys = 0;
+  kh->sn = 0;
+  return eslOK;
+}
+
+
+
+/* Function:  esl_keyhash_Destroy()
+ * Synopsis:  Frees a keyhash.
+ *
+ * Purpose:   Destroys <kh>.
+ *
+ * Returns:   (void)
+ */
+void
+esl_keyhash_Destroy(ESL_KEYHASH *kh)
+{
+  if (kh == NULL) return;	
+  if (kh->hashtable  != NULL) free(kh->hashtable);
+  if (kh->key_offset != NULL) free(kh->key_offset);
+  if (kh->nxt        != NULL) free(kh->nxt);
+  if (kh->smem       != NULL) free(kh->smem);
+  free(kh);
+}
+
+/* Function:  esl_keyhash_Dump()
+ * Synopsis:  Dumps debugging information about a keyhash.
+ *
+ * Purpose:   Mainly for debugging purposes. Dump 
+ *            some information about the hash table <kh>
+ *            to the stream <fp>, which might be stderr
+ *            or stdout.
+ */
+void
+esl_keyhash_Dump(FILE *fp, const ESL_KEYHASH *kh)
+{
+  int idx;
+  int h;
+  int nkeys;
+  int nempty  = 0;
+  int maxkeys = -1;
+  int minkeys = INT_MAX;
+
+  for (h = 0; h < kh->hashsize; h++)
+    {
+      for (nkeys = 0, idx = kh->hashtable[h]; idx != -1; idx = kh->nxt[idx]) nkeys++;
+
+      if (nkeys == 0)      nempty++;
+      if (nkeys > maxkeys) maxkeys = nkeys;
+      if (nkeys < minkeys) minkeys = nkeys;
+    }
+
+  fprintf(fp, "Total keys:             %d\n", kh->nkeys);
+  fprintf(fp, "Hash table size:        %d\n", kh->hashsize);
+  fprintf(fp, "Average occupancy:      %.2f\n", (float) kh->nkeys /(float) kh->hashsize);
+  fprintf(fp, "Unoccupied slots:       %d\n", nempty);
+  fprintf(fp, "Most in one slot:       %d\n", maxkeys);
+  fprintf(fp, "Least in one slot:      %d\n", minkeys);
+  fprintf(fp, "Keys allocated for:     %d\n", kh->kalloc);
+  fprintf(fp, "Key string space alloc: %d\n", kh->salloc);
+  fprintf(fp, "Key string space used:  %d\n", kh->sn);
+  fprintf(fp, "Total obj size, bytes:  %d\n", (int) esl_keyhash_Sizeof(kh));
+}
+/*--------------- end, <ESL_KEYHASH> object ---------------------*/
+
+
+
+
+/*****************************************************************
+ *# 2. Storing and retrieving keys 
+ *****************************************************************/ 
+
+/* Function: esl_keyhash_Store()
+ * Synopsis: Store a key and get a key index for it.
+ *
+ * Purpose:  Store a string <key> of length <n> in the key index hash table <kh>.
+ *           Associate it with a unique key index, counting from
+ *           0. It's this index that lets us map the hashed keys to
+ *           integer-indexed C arrays, clumsily emulating Perl's
+ *           hashes. Optionally returns the index through <opt_index>.
+ *           
+ *           <key>, <n> follow the standard idiom for strings and
+ *           unterminated buffers.
+ *
+ * Returns:  <eslOK> on success; stores <key> in <kh>; <opt_index> is 
+ *           returned, set to the next higher index value.
+ *           Returns <eslEDUP> if <key> was already stored in the table;
+ *           <opt_index> is set to the existing index for <key>.
+ *
+ * Throws:   <eslEMEM> on allocation failure, and sets <opt_index> to -1.
+ */
+int
+esl_keyhash_Store(ESL_KEYHASH *kh, const char *key, esl_pos_t n, int *opt_index)
+{
+  uint32_t val = jenkins_hash(key, n, kh->hashsize);
+  int idx;
+  int status;
+  
+  if (n == -1) n = strlen(key);
+
+  /* Was this key already stored?  */
+  for (idx = kh->hashtable[val]; idx != -1; idx = kh->nxt[idx])
+    if (esl_memstrcmp(key, n, kh->smem + kh->key_offset[idx]))
+      { 
+	if (opt_index != NULL) *opt_index = idx; 
+	return eslEDUP; 
+      }
+
+  /* Reallocate key ptr/index memory if needed */
+  if (kh->nkeys == kh->kalloc) 
+    { 
+      ESL_REALLOC(kh->key_offset, sizeof(int)*kh->kalloc*2);
+      ESL_REALLOC(kh->nxt,        sizeof(int)*kh->kalloc*2);
+      kh->kalloc *= 2;
+    }
+
+  /* Reallocate key string memory if needed */
+  while (kh->sn + n + 1 > kh->salloc)
+    {
+      ESL_REALLOC(kh->smem, sizeof(char) * kh->salloc * 2);
+      kh->salloc *= 2;
+    }
+
+  /* Copy the key, assign its index */
+  idx                 = kh->nkeys;
+  kh->key_offset[idx] = kh->sn;
+  kh->sn             += n+1;
+  esl_memstrcpy(key, n, kh->smem + kh->key_offset[idx]);
+  kh->nkeys++;
+
+  /* Insert new element at head of the approp linked list in hashtable */
+  kh->nxt[idx]       = kh->hashtable[val];
+  kh->hashtable[val] = idx;
+
+  /* Time to upsize? If we're 3x saturated, expand the hash table */
+  if (kh->nkeys > 3*kh->hashsize)
+    if ((status = key_upsize(kh)) != eslOK) goto ERROR;
+
+  if (opt_index != NULL) *opt_index = idx;
+  return eslOK;
+
+ ERROR:
+  if (opt_index != NULL) *opt_index = -1;
+  return status;
+}
+
+/* Function:  esl_keyhash_Lookup()
+ * Synopsis:  Look up a key's array index.
+ *
+ * Purpose:   Look up a <key> in the hash table <kh>.
+ *            If <key> is found, return <eslOK>, and optionally set <*opt_index>
+ *            to its array index (0..nkeys-1).
+ *            If <key> is not found, return <eslENOTFOUND>, and
+ *            optionally set <*opt_index> to -1.
+ */
+int
+esl_keyhash_Lookup(const ESL_KEYHASH *kh, const char *key, esl_pos_t n, int *opt_index)
+{
+  uint32_t val  = jenkins_hash(key, n, kh->hashsize);
+  int      idx;
+
+  for (idx = kh->hashtable[val]; idx != -1; idx = kh->nxt[idx])
+    if (strcmp(key, kh->smem + kh->key_offset[idx]) == 0) 
+      { 
+	if (opt_index != NULL) *opt_index = idx;
+	return eslOK; 
+      }
+
+  if (opt_index != NULL) *opt_index = -1;
+  return eslENOTFOUND;
+}
+
+
+/*---------- end, API for storing/retrieving keys ---------------*/
+
+
+
+
+/*****************************************************************
+ * 3. Internal functions
+ *****************************************************************/ 
+
+/* keyhash_create()
+ * 
+ * The real creation function, which takes arguments for memory sizes.
+ * This is abstracted to a static function because it's used by both
+ * Create() and Clone() but slightly differently.
+ *
+ * Args:  hashsize          - size of hash table; this must be a power of two.
+ *        init_key_alloc    - initial allocation for # of keys.
+ *        init_string_alloc - initial allocation for total size of key strings.
+ *
+ * Returns:  An allocated hash table structure; or NULL on failure.
+ */
+ESL_KEYHASH *
+keyhash_create(uint32_t hashsize, int init_key_alloc, int init_string_alloc)
+{
+  ESL_KEYHASH *kh = NULL;
+  int  i;
+  int  status;
+
+  ESL_ALLOC(kh, sizeof(ESL_KEYHASH));
+  kh->hashtable  = NULL;
+  kh->key_offset = NULL;
+  kh->nxt        = NULL;
+  kh->smem       = NULL;
+
+  kh->hashsize  = hashsize;
+  kh->kalloc    = init_key_alloc;
+  kh->salloc    = init_string_alloc;
+
+  ESL_ALLOC(kh->hashtable, sizeof(int) * kh->hashsize);
+  for (i = 0; i < kh->hashsize; i++)  kh->hashtable[i] = -1;
+
+  ESL_ALLOC(kh->key_offset, sizeof(int) * kh->kalloc);
+  ESL_ALLOC(kh->nxt,        sizeof(int) * kh->kalloc);
+  for (i = 0; i < kh->kalloc; i++)  kh->nxt[i] = -1;
+
+  ESL_ALLOC(kh->smem,   sizeof(char) * kh->salloc);
+  kh->nkeys = 0;
+  kh->sn    = 0;
+  return kh;
+
+ ERROR:
+  esl_keyhash_Destroy(kh);
+  return NULL;
+}
+
+
+/* jenkins_hash()
+ * 
+ * The hash function.
+ * This is Bob Jenkins' "one at a time" hash.
+ * <key> is a NUL-terminated string of any length.
+ * <hashsize> must be a power of 2.
+ * 
+ * References:
+ * [1]  http://en.wikipedia.org/wiki/Hash_table
+ * [2]  http://www.burtleburtle.net/bob/hash/doobs.html
+ */
+static uint32_t
+jenkins_hash(const char *key, esl_pos_t n, uint32_t hashsize)
+{
+  esl_pos_t pos;
+  uint32_t  val = 0;
+
+  if (n == -1) 
+    { /* string version */
+      for (; *key != '\0'; key++)
+	{
+	  val += *key;
+	  val += (val << 10);
+	  val ^= (val >>  6);
+	}
+    } 
+  else 
+    { /* buffer version */
+      for (pos = 0; pos < n; pos++)
+      {
+	val += key[pos];
+	val += (val << 10);
+	val ^= (val >>  6);
+      }
+    }
+  val += (val <<  3);
+  val ^= (val >> 11);
+  val += (val << 15);
+
+  return (val & (hashsize - 1));
+}
+
+/* key_upsize()
+ *
+ * Grow the hash table to the next available size.
+ *
+ * Args:     old - the KEY hash table to reallocate.
+ *
+ * Returns:  <eslOK> on success. 'Success' includes the case
+ *           where the hash table is already at its maximum size,
+ *           and cannot be upsized any more.
+ *           
+ * Throws:   <eslEMEM> on allocation failure, and
+ *           the hash table is left in its initial state.
+ */
+static int
+key_upsize(ESL_KEYHASH *kh)
+{
+  void     *p;
+  int       i;
+  uint32_t  val;
+  int       status;
+
+  /* 28 below because we're going to upsize in steps of 8x (2^3); need to be < 2^{31-3} */
+  if (kh->hashsize >= (1<<28)) return eslOK; /* quasi-success (can't grow any more)    */
+
+  /* The catch here is that when you upsize the table, all the hash functions
+   * change; so you have to go through all the keys, recompute their hash functions,
+   * and store them again in the new table.
+   */
+  /* Allocate a new, larger hash table. (Don't change <kh> until this succeeds) */
+  ESL_RALLOC(kh->hashtable, p, sizeof(int) * (kh->hashsize << 3));
+  kh->hashsize  = kh->hashsize << 3; /* 8x */
+  for (i = 0; i < kh->hashsize; i++) kh->hashtable[i] = -1;
+
+  /* Store all the keys again. */
+  for (i = 0; i < kh->nkeys; i++) 
+    {
+      val                = jenkins_hash(kh->smem + kh->key_offset[i], -1, kh->hashsize);
+      kh->nxt[i]         = kh->hashtable[val];
+      kh->hashtable[val] = i;
+    }
+  return eslOK;
+
+ ERROR:
+  return eslEMEM;
+}
+/*--------------- end, internal functions -----------------*/
+
+
+/*****************************************************************
+ * 4. Benchmark driver
+ *****************************************************************/
+#ifdef eslKEYHASH_BENCHMARK
+/* 
+   gcc -g -O2 -o keyhash_benchmark -I. -L. -DeslKEYHASH_BENCHMARK esl_keyhash.c -leasel -lm
+   time ./keyhash_benchmark /usr/share/dict/words /usr/share/dict/words
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_keyhash.h"
+#include "esl_stopwatch.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <keyfile1> <keyfile2>";
+static char banner[] = "benchmarking speed of keyhash module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go      = esl_getopts_CreateDefaultApp(options, 2, argc, argv, banner, usage);
+  ESL_KEYHASH    *kh      = esl_keyhash_Create();
+  ESL_STOPWATCH  *w       = esl_stopwatch_Create();
+  char           *file1   = esl_opt_GetArg(go, 1);
+  char           *file2   = esl_opt_GetArg(go, 2);
+  FILE           *fp;
+  char            buf[256];
+  char           *s, *tok;
+  int             idx;
+  int             nstored, nsearched, nshared;
+
+  /* Read/store keys from file 1.
+   */
+  esl_stopwatch_Start(w);
+  if ((fp = fopen(file1, "r")) == NULL)
+    { fprintf(stderr, "couldn't open %s\n", argv[1]); exit(1); }
+  nstored = 0;
+  while (fgets(buf, 256, fp) != NULL)
+    {
+      s = buf;
+      esl_strtok(&s, " \t\r\n", &tok);
+      esl_keyhash_Store(kh, tok, -1, &idx);
+      nstored++;
+    }
+  fclose(fp);
+  printf("Stored %d keys.\n", nstored);
+
+  /* Look up keys from file 2.
+   */
+  if ((fp = fopen(file2, "r")) == NULL)
+    { fprintf(stderr, "couldn't open %s\n", argv[2]); exit(1); }
+  nsearched = nshared = 0;
+  while (fgets(buf, 256, fp) != NULL)
+    {
+      s = buf;
+      esl_strtok(&s, " \t\r\n", &tok);
+
+      if (esl_keyhash_Lookup(kh, tok, -1, &idx) == eslOK) nshared++;
+      nsearched++;
+    }
+  fclose(fp);
+  esl_stopwatch_Stop(w);
+  printf("Looked up %d keys.\n", nsearched);
+  printf("In common: %d keys.\n", nshared);
+  esl_stopwatch_Display(stdout, w, "# CPU Time: ");
+
+  esl_stopwatch_Destroy(w);
+  esl_keyhash_Destroy(kh);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslKEYHASH_BENCHMARK*/
+
+
+
+#ifdef eslKEYHASH_BENCHMARK2
+
+/* Benchmark #2 is a benchmark just of the hash function.
+ * First we read in a bunch of keys from any file, one key per line.
+ * Then we start timing, and compute a hash for each key.
+ */
+
+/* gcc -O2 -o keyhash_benchmark2 -I. -L. -DeslKEYHASH_BENCHMARK2 esl_keyhash.c -leasel -lm
+ * ./keyhash_benchmark2 <keyfile>
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_keyhash.h"
+#include "esl_stats.h"
+#include "esl_stopwatch.h"
+#include "esl_vectorops.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-s",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show statistical test for hash uniformity",        0 },
+  { "-v",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "be verbose: print hash values for keys",           0 },
+  { "-x",        eslARG_INT,   "32768", NULL, NULL,  NULL,  NULL, NULL, "set hash table size to <n>",                       0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <keyfile>";
+static char banner[] = "benchmarking speed of hash function in keyhash module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go         = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  ESL_FILEPARSER *efp        = NULL;
+  ESL_STOPWATCH  *w          = esl_stopwatch_Create();
+  ESL_KEYHASH    *kh         = esl_keyhash_Create();
+  char           *keyfile    = esl_opt_GetArg(go, 1);
+  uint32_t        hashsize   = esl_opt_GetInteger(go, "-x");
+  char           *key;
+  int             keylen;
+  char          **karr       = NULL;
+  int             kalloc;
+  int            *ct         = NULL;
+  int             nkeys;
+  int             i;
+  int             status;
+  uint32_t (*hashfunc)(const char*,uint32_t) = jenkins_hash;
+  
+  /* 1. Store the keys from the file, before starting the benchmark timer. */
+  kalloc = 256;
+  ESL_ALLOC(karr, sizeof(char *) * kalloc);
+
+  if (esl_fileparser_Open(keyfile, NULL, &efp) != eslOK) esl_fatal("Failed to open key file %s\n", keyfile);
+  
+  nkeys = 0;
+  while (esl_fileparser_NextLine(efp) == eslOK)
+    {
+      if (esl_fileparser_GetTokenOnLine(efp, &key, &keylen) != eslOK) esl_fatal("Failure in parsing key file\n");
+
+      if (nkeys == kalloc) {
+	void *tmp;
+	ESL_RALLOC(karr, tmp, sizeof(char *) * kalloc * 2);
+	kalloc *= 2;
+      }
+
+      esl_strdup(key, keylen, &(karr[nkeys]));
+      nkeys++;
+    }
+  esl_fileparser_Close(efp);
+  /* and karr[0..nkeys-1] are now the keys. */
+
+
+  /* 2. benchmark hashing the keys. */
+  esl_stopwatch_Start(w);
+  for (i = 0; i < nkeys; i++) (*hashfunc)(karr[i], hashsize);
+  esl_stopwatch_Stop(w);
+  esl_stopwatch_Display(stdout, w, "# CPU Time: ");
+
+  /* If user wanted to see the hashes, do that 
+   * separately, outside the timing loop.
+   */
+  if (esl_opt_GetBoolean(go, "-v"))
+    {
+      for (i = 0; i < nkeys; i++) 
+	printf("%-20s %9d\n", karr[i], (*hashfunc)(karr[i], hashsize));
+    }
+
+  /* Likewise, if user wanted to see statistical uniformity test...
+   */
+  if (esl_opt_GetBoolean(go, "-s"))
+    {
+      double mean, var, X2, pval;
+
+      ESL_ALLOC(ct, sizeof(int) * hashsize);
+      esl_vec_ISet(ct, hashsize, 0);
+      for (i = 0; i < nkeys; i++) ct[(*hashfunc)(karr[i], hashsize)]++;
+      
+      esl_stats_IMean(ct, hashsize, &mean, &var);
+      for (X2 = 0.0, i = 0; i < hashsize; i++)
+	X2 += (((double) ct[i] - mean) *  ((double) ct[i] - mean)) / mean;
+
+      esl_stats_ChiSquaredTest(hashsize-1, X2, &pval);
+
+      printf("Number of keys:      %d\n",   nkeys);
+      printf("Hash table size:     %d\n",   hashsize);
+      printf("Mean hash occupancy: %.2f\n", mean);
+      printf("Minimum:             %d\n",   esl_vec_IMin(ct, hashsize));
+      printf("Maximum:             %d\n",   esl_vec_IMax(ct, hashsize));
+      printf("Variance:            %.2f\n", var);
+      printf("Chi-squared:         %.2f\n", X2);
+      printf("Chi-squared p-value: %.4f\n", pval);
+    }
+      
+
+  /* 3. cleanup, exit. */
+  for (i = 0; i < nkeys; i++) free(karr[i]);
+  free(karr);
+  esl_stopwatch_Destroy(w);
+  esl_getopts_Destroy(go);
+  return 0;
+
+ ERROR:
+  return status;
+}
+#endif /*eslKEYHASH_BENCHMARK2*/
+
+
+/*------------------- end, benchmark drivers --------------------*/
+
+
+/*****************************************************************
+ * 5. Unit tests
+ *****************************************************************/
+
+
+/*---------------------- end, unit tests ------------------------*/
+
+/*****************************************************************
+ * 6. Test driver
+ *****************************************************************/
+#ifdef eslKEYHASH_TESTDRIVE
+/* gcc -g -Wall -o test -I. -DeslKEYHASH_TESTDRIVE keyhash.c easel.c 
+ * ./test
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include "easel.h"
+#include "esl_keyhash.h"
+
+#define NSTORE  1200
+#define NLOOKUP 1200
+#define KEYLEN  2
+
+int
+main(int argc, char **argv)
+{
+  ESL_KEYHASH *h;
+  char keys[NSTORE+NLOOKUP][KEYLEN+1]; 
+  int  i,j,nk,k42;
+  int  nmissed;
+  int  status;
+
+  /* Generate 2400 random k=2 keys. 26^2 = 676 possible.
+   * We'll store the first 1200 and search on the remaining
+   * 1200. We're ~1.775x saturated; expect Poisson P(0) = 17% miss
+   * rate on the searches, so we ought to exercise hits and
+   * misses on the lookups.
+   */
+  srand(31);
+  for (i = 0; i < NSTORE+NLOOKUP; i++)
+    {
+      for (j = 0; j < KEYLEN; j++)
+	keys[i][j] = 'a' + (rand() % 26); /* yeah, low-order bits; so sue me */
+      keys[i][j] = '\0';
+    }
+  /* spike a known one in (XX.. at key 42).
+   */
+  for (j = 0; j < KEYLEN; j++)
+    keys[42][j] = 'X';
+
+  h = esl_keyhash_Create();
+  nk = 0;
+  for (i = 0; i < NSTORE; i++)
+    {
+      status = esl_keyhash_Store(h, keys[i], -1, &j);
+      if      (status == eslOK)   { assert(j==nk); nk++; }
+      else if (status == eslEDUP) { assert(j<nk); }
+      else esl_fatal("store failed.");
+
+      if (i == 42) { k42 = j;}	/* remember where key 42 went */
+    }
+  nmissed = 0;
+  for (i = NSTORE; i < NSTORE+NLOOKUP; i++)
+    {
+      if (esl_keyhash_Lookup(h, keys[i], -1, &j) != eslOK) nmissed++;
+    }
+  esl_keyhash_Lookup(h, keys[42], -1, &j);
+  assert(j==k42);
+
+  /* 
+  printf("missed %d/%d (%.1f%%)\n", nmissed, NLOOKUP, 
+	 100. * (float) nmissed / (float) NLOOKUP);
+  esl_keyhash_Dump(stdout, h);
+  */
+
+  esl_keyhash_Destroy(h);
+  exit (0);
+}
+#endif /*eslKEYHASH_TESTDRIVE*/
+
+/*--------------------- end, test driver ------------------------*/
+
+
+
+/*****************************************************************
+ * 7. Example
+ *****************************************************************/
+#ifdef eslKEYHASH_EXAMPLE
+/*::cexcerpt::keyhash_example::begin::*/
+/* gcc -g -Wall -o keyhash_example -I. -DeslKEYHASH_EXAMPLE esl_keyhash.c easel.c 
+ * ./example /usr/share/dict/words /usr/share/dict/words
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_keyhash.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_KEYHASH *h   = esl_keyhash_Create();
+  FILE        *fp;
+  char         buf[256];
+  char        *s, *tok;
+  int          idx;
+  int          nstored, nsearched, nshared;
+
+  /* Read/store keys from file 1. */
+  if ((fp = fopen(argv[1], "r")) == NULL) esl_fatal("couldn't open %s\n", argv[1]);
+  nstored = 0;
+  while (fgets(buf, 256, fp) != NULL)
+    {
+      s = buf;
+      esl_strtok(&s, " \t\r\n", &tok);
+      esl_keyhash_Store(h, tok, -1, &idx);
+      nstored++;
+    }
+  fclose(fp);
+  printf("Stored %d keys.\n", nstored);
+
+  /* Look up keys from file 2. */
+  if ((fp = fopen(argv[2], "r")) == NULL) esl_fatal("couldn't open %s\n", argv[1]);
+  nsearched = nshared = 0;
+  while (fgets(buf, 256, fp) != NULL)
+    {
+      s = buf;
+      esl_strtok(&s, " \t\r\n", &tok);
+      if (esl_keyhash_Lookup(h, tok, -1, &idx) == eslOK) nshared++;
+      nsearched++;
+    }
+  fclose(fp);
+  printf("Looked up %d keys.\n", nsearched);
+  printf("In common: %d keys.\n", nshared);
+  esl_keyhash_Destroy(h);
+  return 0;
+}
+/*::cexcerpt::keyhash_example::end::*/
+#endif /*eslKEYHASH_EXAMPLE*/
+/*----------------------- end, example --------------------------*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_keyhash.h b/esl_keyhash.h
new file mode 100644
index 0000000..afa4508
--- /dev/null
+++ b/esl_keyhash.h
@@ -0,0 +1,64 @@
+/* Storing keys in hash tables, similar to Perl's associative arrays.
+ * 
+ */
+#ifndef eslKEYHASH_INCLUDED
+#define eslKEYHASH_INCLUDED
+
+#include <stdio.h>		/* for FILE */
+
+/* ESL_KEYHASH:
+ *    a dynamically resized hash structure; 
+ *    contains a hash table and associated data
+ *
+ * Each key string is associated with an index i = (0..nkeys-1).
+ * Key strings are stored in one array, in smem.
+ * Each key has an offset in this array, key_offset[i].
+ * Thus key number <i> is at: smem + key_offset[i].
+ * 
+ * The keys are hashed, and stored in linked lists in
+ * a hashtable by their index i = (0..nkeys-1), with -1
+ * as a sentinel for end-of-list.
+ *
+ * hashtable[0..hashsize-1] = head of linked list; 
+ *                            index of first elem in list (0..nkeys-1), 
+ *                            or -1 if empty.
+ * nxt[0..nkeys-1] = next elem in list (0..nkeys-1), or -1 if none.
+ *
+ * Thus a typical loop, looking for a <key>:
+ *    uint32_t val = jenkins_hash(key, kh->hashsize);
+ *    for (i = kh->hashtable[val]; i != -1; i = kh->nxt[i])
+ *      if (strcmp(key, kh->smem + kh->key_offset[i]) == 0) found_it;
+ *
+ */
+typedef struct {
+  int      *hashtable;          /* hashtable[0..hashsize-1] = index of first elem, or -1 */
+  uint32_t  hashsize;	        /* size of the hash table                                */
+
+  int      *key_offset;		/* key [idx=0..nkeys-1] starts at smem + key_offset[idx] */
+  int      *nxt;		/* nxt [idx=0..nkeys-1], next "pointers" in hash table   */
+  int       nkeys;		/* number of keys stored                                 */
+  int       kalloc;		/* number of keys allocated for                          */
+
+  char *smem;	 	        /* Array of memory for storing key strings (w/ \0's)     */
+  int   salloc;			/* current allocated size of <key_mem>                   */
+  int   sn; 			/* current used size of key strings, inclusive \0's      */
+} ESL_KEYHASH;
+
+extern ESL_KEYHASH *esl_keyhash_Create(void);
+extern ESL_KEYHASH *esl_keyhash_CreateCustom(uint32_t hashsize, int kalloc, int salloc);
+extern ESL_KEYHASH *esl_keyhash_Clone(const ESL_KEYHASH *kh);
+extern char *       esl_keyhash_Get(const ESL_KEYHASH *kh, int idx);
+extern int          esl_keyhash_GetNumber(const ESL_KEYHASH *kh);
+extern size_t       esl_keyhash_Sizeof(const ESL_KEYHASH *kh);
+extern int          esl_keyhash_Reuse(ESL_KEYHASH *kh);
+extern void         esl_keyhash_Destroy(ESL_KEYHASH *kh);
+extern void         esl_keyhash_Dump(FILE *fp, const ESL_KEYHASH *kh);
+
+extern int  esl_keyhash_Store (      ESL_KEYHASH *kh, const char *key, esl_pos_t n, int *ret_index);
+extern int  esl_keyhash_Lookup(const ESL_KEYHASH *kh, const char *key, esl_pos_t n, int *ret_index);
+
+
+#endif /* eslKEYHASH_INCLUDED */
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_keyhash.tex b/esl_keyhash.tex
new file mode 100644
index 0000000..8fc9560
--- /dev/null
+++ b/esl_keyhash.tex
@@ -0,0 +1,89 @@
+
+The \eslmod{keyhash} module provides a semblance of associative arrays
+(for example, Perl hashes), by associating keywords with an integer
+array index, and storing the association in an internal hash table for
+rapid access.
+
+Table~\ref{tbl:keyhash_api} lists the functions in the
+\eslmod{keyhash} API. The module implements one object: the
+\ccode{ESL\_KEYHASH}.
+
+% Table generated by autodoc -t esl_keyhash.c (so don't edit here, edit esl_keyhash.c:)
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\apisubhead{The \ccode{ESL\_KEYHASH} object}\\
+\hyperlink{func:esl_keyhash_Create()}{\ccode{esl\_keyhash\_Create()}} & Allocates a new keyhash.\\
+\hyperlink{func:esl_keyhash_Clone()}{\ccode{esl\_keyhash\_Clone()}} & Duplicates a keyhash.\\
+\hyperlink{func:esl_keyhash_Get()}{\ccode{esl\_keyhash\_Get()}} & Returns a key name, given its index.\\
+\hyperlink{func:esl_keyhash_GetNumber()}{\ccode{esl\_keyhash\_GetNumber()}} & Returns the total number of keys stored.\\
+\hyperlink{func:esl_keyhash_Reuse()}{\ccode{esl\_keyhash\_Reuse()}} & Reuse a keyhash.\\
+\hyperlink{func:esl_keyhash_Destroy()}{\ccode{esl\_keyhash\_Destroy()}} & Frees a keyhash.\\
+\hyperlink{func:esl_keyhash_Dump()}{\ccode{esl\_keyhash\_Dump()}} & Dumps debugging information about a keyhash.\\
+\apisubhead{Storing and retrieving keys }\\
+\hyperlink{func:esl_keyhash_Store()}{\ccode{esl\_key\_Store()}} & Store a key and get a key index for it.\\
+\hyperlink{func:esl_keyhash_Lookup()}{\ccode{esl\_key\_Lookup()}} & Look up a key's array index.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{keyhash} API.}
+\label{tbl:keyhash_api}
+\end{table}
+
+\subsection{Example of using the keyhash API}
+
+The idea behind using the keyhash module is shown in this fragment of
+pseudocode:
+
+\begin{cchunk}
+       #include "easel.h"
+       #include "esl_keyhash.h"
+     
+       ESL_KEYHASH *kh = esl_keyhash_Create();
+       int          idx;
+       char        *key;
+       esl_pos_t    keylen;
+       
+       /* To store keys: */
+       (foreach key) {
+          esl_keyhash_Store(hash, key, keylen, &idx);       
+          (reallocate foo, bar as needed)
+          foo[idx] = whatever;
+          bar[idx] = whatever;
+       }     
+       /* To look up keys: */
+       (foreach key) {
+          if (esl_keyhash_Lookup(hash, key, keylen, &idx) != eslOK) { no_such_key; }
+          (do something with) foo[idx];
+          (do something with) bar[idx];
+       }   
+       esl_keyhash_Destroy();
+\end{cchunk}
+
+That is, the application maintains data in normal C-style arrays that
+are indexed by an integer index value, and it uses the keyhash to
+associate a specific key with that integer index. To store info, you
+first store the keyword and obtain a new index value (this simply
+starts at 0 and counts up, as you store successive keys), then you
+store the info your arrays at that index. To look up info, you look up
+the keyword to obtain the index, then you access the info by indexing
+into your arrays.
+
+This is the moral equivalent of Perl's associative arrays, as in
+\ccode{\$foo\{\$key\} = whatever; \$bar\{\$key\} = whatever}.
+
+For example, Figure~\ref{fig:keyhash_example} is a contrived example
+of storing the keywords obtained from a list in one file, then looking
+up keywords listed in a second file. It doesn't demonstrate the idea
+of using the index to store and retrieve additional info associated
+with the keyword, but it demonstrates the essentials of the
+\eslmod{keyhash} API.
+
+\begin{figure}
+\input{cexcerpts/keyhash_example}
+\caption{Example of using the \eslmod{keyhash} API.}
+\label{fig:keyhash_example}
+\end{figure}
+
diff --git a/esl_mem.c b/esl_mem.c
new file mode 100644
index 0000000..931abe9
--- /dev/null
+++ b/esl_mem.c
@@ -0,0 +1,825 @@
+/* str*()-like functions for raw memory "lines" (non-NUL terminated strings).
+ * 
+ * Especially when we're parsing input in an ESL_BUFFER, we need to be
+ * able to parse non-writable raw memory buffers. Because an
+ * ESL_BUFFER may have memory mapped a file, we cannot assume that the
+ * input is NUL-terminated, and we can't even assume it's writable (so
+ * we can't NUL-terminate it ourselves). These functions provide
+ * a set of utilities for parsing raw memory (in terms of a char * pointer
+ * and a length in bytes; <char *p>, <esl_pos_t n> by convention).
+ * 
+ * Contents:
+ *    1. The esl_mem*() API.
+ *    2. Unit tests.
+ *    3. Test driver.
+ *    4. Copyright and license.
+ */
+
+#include "esl_config.h"
+
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+
+/*****************************************************************
+ *# 1. The esl_mem*() API.
+ *****************************************************************/
+
+/* Function:  esl_mem_strtoi32()
+ * Synopsis:  Convert a chunk of text memory to an int32_t.
+ *
+ * Purpose:   Convert the text starting at <p> to an <int32_t>, converting
+ *            no more than <n> characters (the valid length of non-<NUL>
+ *            terminated memory buffer <p>).  Interpret the text as
+ *            base <base> (2 or 10, for example). <base> must be 2..36,
+ *            or 0. 0 is treated specially as base 8, 10, or 16, autodetected
+ *            according to the leading characters of the number format.
+ *            
+ *            Any leading whitespace is skipped.  The next letter may
+ *            be a '-' for a negative number.  If <base> is 0 or 16,
+ *            the next two characters may be "0x", in which case hex base
+ *            16 is assumed.  Else if <base> is 0 and the next
+ *            character is '0', octal base 8 is assumed.  All subsequent
+ *            characters are converted to a number, until an invalid
+ *            character is reached. Upper or lower case letters are
+ *            accepted, starting at A or a, for bases over 10. For
+ *            example, In base 16, characters A-F or a-f are accepted.
+ *            The base of the representation is limited to 36 because
+ *            'Z' or 'z' represents 35.
+ *
+ *            The converted value is optionally returned in <*opt_val>.
+ *            The number of characters parsed (up to the first invalid
+ *            character, or <n>, whichever comes first) is optionally
+ *            returned in <*opt_nc>. The caller can reposition a parser
+ *            to <p + *opt_nc> to exactly skip past the parsed number.
+ * 
+ *            If no valid digit is found (including pathological cases
+ *            of leader-only, such as "0x" or "-"), then return <eslEINVAL>,
+ *            and <*opt_nc> and <*opt_val> are both 0.
+ *            
+ *            This syntax is essentially identical to <strtol()>,
+ *            except that we can operate on a non-NUL-terminated
+ *            memory buffer of maximum length <n>, rather than on a
+ *            NUL-terminated string.
+ *
+ * Args:      p        - pointer to text buffer to convert to int32_t
+ *            n        - maximum number of chars to parse in <p>: p[0..n-1] are valid.
+ *            base     - integer base. Often 10, 2, 8, or 16. Must be
+ *                       <2..36>, or 0. 0 means base 8, 10, or 16 depending on
+ *                       autodetected format.
+ *            *opt_nc  - optRETURN: number of valid chars parsed from p.
+ *                       First invalid char is p[*opt_nc].       
+ *            *opt_val - optRETURN: parsed value.         
+ *
+ * Returns:   <eslOK> on success. 
+ *
+ *            <eslEFORMAT> if no valid integer digits are found. Now
+ *            <*opt_val> and <*opt_nc> are 0.
+ *            
+ *            <eslERANGE> on an overflow error. In this case
+ *            <*opt_val> is <INT32_MAX> or <INT32_MIN> for an
+ *            overflow or underflow, respectively. <*opt_nc> is
+ *            set to the number of characters parsed INCLUDING
+ *            the digit that caused the overflow.
+ *
+ * Throws:    <eslEINVAL> if <base> isn't in range <0..36>. Now
+ *            <*opt_nc> and <*opt_val> are 0.
+ *
+ * Note:      An example of why you need this instead of 
+ *            strtol(): suppose you've mmap()'ed a file to memory,
+ *            and it ends in ... "12345". You can't strtol the
+ *            end of the mmap'ed memory buffer because it is not
+ *            a NUL-terminated string. (Same goes anywhere in the file,
+ *            though elsewhere in the file you could overwrite
+ *            a NUL where you need it. At EOF of an mmap'ed() buffer,
+ *            you can't even do that.)
+ *            
+ *            sscanf() doesn't work either - I don't see a way to 
+ *            limit it to a buffer of at most <n> chars.
+ *            
+ *            I could copy <p> to a temporary allocated string that I
+ *            NUL-terminate, then use strtol() or suchlike, but that's
+ *            just as awful as what I've done here (rewriting
+ *            strtol()). Plus, here I get complete control of the integer
+ *            type (<int32_t>) whereas strtol() gives me the less satisfying
+ *            <long>.
+ */
+int
+esl_mem_strtoi32(char *p, esl_pos_t n, int base, int *opt_nc, int32_t *opt_val)
+{
+  esl_pos_t i           = 0;
+  int32_t   sign        = 1;
+  int32_t   currval     = 0;
+  int32_t   digit       = 0;
+  int       ndigits     = 0;
+
+  if    (base < 0 || base == 1 || base > 36)  ESL_EXCEPTION(eslEINVAL, "base must be 2..36 or 0");
+  while (i < n && isspace(p[i])) i++; /* skip leading whitespace */
+  if    (i < n && p[i] == '-')   { sign = -1; i++; }
+
+  if      ((base == 0 || base == 16) && i < n-1 && p[i] == '0' && p[i+1] == 'x') 
+    { i += 2; base = 16; }
+  else if (base == 0 && i < n && p[i] == '0')                                    
+    { i += 1; base = 8; }
+  else if (base == 0) 
+    { base = 10; }
+
+  for (ndigits = 0; i < n; i++, ndigits++)
+    {
+      if      (isdigit(p[i])) digit = p[i] - '0';
+      else if (isupper(p[i])) digit = 10 + (p[i] - 'A');
+      else if (islower(p[i])) digit = 10 + (p[i] - 'a');
+      else    break;
+      if (digit >= base) break;
+
+      if (sign == 1)
+	{
+	  if (currval > (INT32_MAX - digit) / base) 
+	    { 
+	      if (opt_val) *opt_val = INT32_MAX; 
+	      if (opt_nc)  *opt_nc  = i+1;
+	      return eslERANGE; 
+	    }
+	  currval = currval * base + digit;
+	}
+      else
+	{
+	  if (currval < (INT32_MIN + digit) / base)
+	    { 
+	      if (opt_val) *opt_val = INT32_MIN; 
+	      if (opt_nc)  *opt_nc  = i+1;
+	      return eslERANGE;
+	    }
+	  currval = currval * base - digit;
+	}
+    }
+  if (opt_nc)  { *opt_nc  = (ndigits ? i : 0); }
+  if (opt_val) { *opt_val = currval; }
+  return (ndigits ? eslOK : eslEFORMAT);
+}
+
+/* Function:  esl_memnewline()
+ * Synopsis:  Find next newline in memory.
+ *
+ * Purpose:   Given a memory buffer <*m> of <n> bytes, delimit a
+ *            next line by finding the next newline character(s).
+ *            Store the number of bytes in the line (exclusive of
+ *            the newline character(s)) in <*ret_nline>. Store
+ *            the number of bytes in the newline in <*ret_nterm>.
+ *             
+ *            If no newline is found, <nline=n> and <nterm=0>, and the
+ *            return status is <eslEOD>.
+ *            
+ *            Currently we assume newlines are either UNIX-style \verb+\n+
+ *            or Windows-style \verb+\r\n+, in this implementation. 
+ *            
+ *            Caller should not rely on this, though. Caller may only
+ *            assume that a newline is an arbitrary one- or two-byte
+ *            code.
+ *            
+ *            For example, if <*m> = \verb+"line one\r\nline two"+, <nline>
+ *            is 8 and <nterm> is 2.  If <*m> = \verb+"try two\ntry three"+,
+ *            <nline> is 7 and <nterm> is 1. If <*m> = "attempt
+ *            four", <nline> is 12 and <nterm> is 0.
+ *            
+ *            In cases where the caller may have an incompletely read
+ *            buffer, it should be careful of cases where one possible
+ *            newline may be a prefix of another; for example, suppose
+ *            a file has \verb+"line one\r\nline two"+, but we only input the
+ *            buffer \verb+"line one\r"+ at first. The \verb+"\r"+ looks like an old
+ *            MacOS newline. Now we read more input, and we think the
+ *            buffer is \verb+"\nline two"+. Now we think the \verb+"\n"+ is a UNIX
+ *            newline. The result is that we read two newlines where
+ *            there's only one. Instead, caller should check for the
+ *            case of nterm==1 at the end of its buffer, and try to
+ *            extend the buffer. See <esl_buffer_GetLine()> for an
+ *            example.
+ *            
+ * Args:      m         - ptr to memory buffer
+ *            n         - length of p in bytes
+ *           *ret_nline - length of line found starting at p[0], exclusive of newline; up to n
+ *           *ret_nterm - # of bytes in newline code: 1 or 2, or 0 if no newline found
+ *
+ * Returns:   <eslOK> on success. Now <*ret_nline> is the number of
+ *            bytes in the next line (exclusive of newline) and
+ *            <*ret_nterm> is the number of bytes in the newline code
+ *            (1 or 2). Thus the next line is <m[0..nline-1]>, and
+ *            the line after this starts at <m[nline+nterm]>.
+ *            
+ *            <eslEOD> if no newline is found. Now <*ret_nline> is <n>,
+ *            and <*ret_nterm> is 0.
+ *
+ * Xref:      http://en.wikipedia.org/wiki/Newline
+ */
+int
+esl_memnewline(const char *m, esl_pos_t n, esl_pos_t *ret_nline, int *ret_nterm)
+{
+  char *ptr = memchr(m, '\n', n);
+  if      (ptr == NULL)                 { *ret_nline = n;       *ret_nterm = 0; }
+  else if (ptr > m && *(ptr-1) == '\r') { *ret_nline = ptr-m-1; *ret_nterm = 2; }
+  else                                  { *ret_nline = ptr-m;   *ret_nterm = 1; }
+  return eslOK;
+}
+
+/* Function:  esl_memtok()
+ * Synopsis:  Get next delimited token from a line.
+ *
+ * Purpose:   Given references to a line and its length, <*p> and <*n>,
+ *            find the next token delimited by any of the characters
+ *            in the string <delim>. Set <*ret_tok> to point at the
+ *            start of the token, and <*ret_toklen> to its length.
+ *            Increment <*p> to point to the next non-delim character
+ *            that follows, and decrement <*n> by the same,
+ *            so that <*p> and <*n> are ready for another
+ *            call to <esl_memtok()>. 
+ * 
+ *            Three differences between <esl_strtok()> and <esl_memtok()>:
+ *            first, <esl_strtok()> expects a NUL-terminated string,
+ *            whereas <esl_memtok()>'s line does not need to be
+ *            NUL-terminated; second, <esl_memtok()> does not modify
+ *            the string, whereas <esl_strtok()> writes NUL bytes
+ *            to delimit tokens; third, <esl_memtok()> skips trailing
+ *            <delim> characters as well as leading ones.
+ *
+ * Args:      *p          - pointer to line;
+ *                          will be incremented to next byte after token.
+ *            *n          - pointer to line length, in bytes;
+ *                          will be decremented
+ *            delim       - delimiter chars (example: " \t\r\n") 
+ *            *ret_tok    - RETURN: ptr to token found in <*p>
+ *            *ret_toklen - RETURN: length of token
+ *
+ * Returns:   <eslOK> if a delimited token is found. 
+ *            <eslEOL> if not; now <*ret_tok> is <NULL> and <*ret_toklen> is <0>.
+ *
+ */
+int
+esl_memtok(char **p, esl_pos_t *n, const char *delim, char **ret_tok, esl_pos_t *ret_toklen)
+{
+  char     *s   = *p;
+  esl_pos_t so, xo, eo;
+
+  for (so = 0;  so < *n; so++) if (strchr(delim, s[so]) == NULL)  break;
+  for (xo = so; xo < *n; xo++) if (strchr(delim, s[xo]) != NULL)  break; 
+  for (eo = xo; eo < *n; eo++) if (strchr(delim, s[eo]) == NULL)  break; 
+  
+  if (so == *n) {                     *ret_tok = NULL;   *ret_toklen = 0;       return eslEOL; }
+  else          { *p += eo; *n -= eo; *ret_tok = s + so; *ret_toklen = xo - so; return eslOK;  }
+}
+
+
+/* Function:  esl_memspn()
+ * Synopsis:  Finds length of prefix consisting only of given chars
+ *
+ * Purpose:   For line <p> of length <n>, return the length of
+ *            a prefix that consists only of characters in the
+ *            string <allow>. 
+ *            
+ *            A commonly used idiom for "buffer is all whitespace"
+ *            is <esl_memspn(p, n, " \t\r\n") == n>.
+ */
+esl_pos_t
+esl_memspn(char *p, esl_pos_t n, const char *allow)
+{
+  esl_pos_t so;
+  for (so = 0; so < n; so++) if (strchr(allow, p[so]) == NULL) break;
+  return so;
+}
+
+/* Function:  esl_memcspn()
+ * Synopsis:  Finds length of prefix consisting of anything other than given chars
+ *
+ * Purpose:   For line <p> of length <n>, return the length of
+ *            a prefix that consists only of characters NOT in the
+ *            string <disallow>. 
+ */
+esl_pos_t
+esl_memcspn(char *p, esl_pos_t n, const char *disallow)
+{
+  esl_pos_t so;
+  for (so = 0; so < n; so++) if (strchr(disallow, p[so]) != NULL) break;
+  return so;
+}
+
+/* Function:  esl_memstrcmp()
+ * Synopsis:  Compare a memory line and string for equality.
+ *
+ * Purpose:   Compare line <p> of length <n> to a NUL-terminated
+ *            string <s>, and return TRUE if they are exactly
+ *            equal: <strlen(s) == n> and <p[0..n-1] == s[0..n-1]>.
+ *            Else, return FALSE.
+ */
+int
+esl_memstrcmp(const char *p, esl_pos_t n, const char *s)
+{
+  esl_pos_t pos;
+
+  if (p == NULL && n == 0 && (s == NULL || s[0] == '\0')) return TRUE;
+  if (!p || !s)                                           return FALSE;
+
+  for (pos = 0; pos < n && s[pos] != '\0'; pos++)
+    if (p[pos] != s[pos]) return FALSE;
+  if (pos    != n)    return FALSE;
+  if (s[pos] != '\0') return FALSE;
+  return TRUE;
+}
+
+
+/* Function:  esl_memstrpfx()
+ * Synopsis:  Return TRUE if memory line starts with string.
+ *
+ * Purpose:   Compare line <p> of length <n> to a NUL-terminated
+ *            string <s>. Return TRUE if the prefix of <p> exactly
+ *            matches <s> up to its NUL sentinel byte. Else,
+ *            return FALSE.
+ */
+int
+esl_memstrpfx(const char *p, esl_pos_t n, const char *s)
+{
+  esl_pos_t pos;
+
+  if (!p || !s) return FALSE;
+
+  for (pos = 0; pos < n && s[pos] != '\0'; pos++)
+    if (p[pos] != s[pos]) return FALSE;
+  if (s[pos] != '\0')    return FALSE;
+  return TRUE;
+}
+
+
+/* Function:  esl_memstrcontains()
+ * Synopsis:  Return TRUE if memory line matches a string.
+ *
+ * Purpose:   Compare line <p> of length <n> to NUL-terminated
+ *            string <s>. Return <TRUE> if <p> contains an exact
+ *            match to <s> at any position.
+ */
+int 
+esl_memstrcontains(const char *p, esl_pos_t n, const char *s)
+{
+  esl_pos_t s0, pos;
+
+  if (! p || ! s) return FALSE;
+  for (s0 = 0; s0 < n; s0++)
+    {
+      for (pos = 0; s0+pos < n && s[pos] != '\0'; pos++)
+	if (p[s0+pos] != s[pos]) break;
+      if (s[pos] == '\0') return TRUE;
+    }
+  return FALSE;
+}
+
+/* Function:  esl_memstrdup()
+ * Synopsis:  Duplicate a memory line as a NUL-terminated string.
+ *
+ * Purpose:   Given memory line <p> of length <n>, duplicate it
+ *            as a NUL-terminated string; return the new string
+ *            in <*ret_s>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure; now <*ret_s> is <NULL>.
+ */
+int
+esl_memstrdup(const char *p, esl_pos_t n, char **ret_s)
+{
+  char *s = NULL;
+  int  status;
+
+  if (! p) { *ret_s = NULL; return eslOK; }
+
+  ESL_ALLOC(s, sizeof(char) * (n+1));
+  memcpy(s, p, n);
+  s[n] = '\0';
+  *ret_s = s;
+  return eslOK;
+
+ ERROR:
+  *ret_s = NULL;
+  return status;
+}
+
+/* Function:  esl_memstrcpy()
+ * Synopsis:  Copy a memory line as a string.
+ *
+ * Purpose:   Given memory line <p> of length <n>, copy
+ *            it to <dest> and NUL-terminate it. Caller must
+ *            be sure that <dest> is already allocated for
+ *            at least <n+1> bytes.
+ *              
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_memstrcpy(const char *p, esl_pos_t n, char *dest)
+{
+  memcpy(dest, p, n);
+  dest[n] = '\0';
+  return eslOK;
+}
+
+
+
+/* Function:  esl_memtod()
+ * Synopsis:  esl_mem equivalent to strtod().
+ *
+ * Purpose:   Given a buffer <p> of length <n>, convert it to a
+ *            double-precision floating point value, just as
+ *            <strtod()> would do for a NUL-terminated string.
+ *            
+ * Returns:   <eslOK> on success, and <*ret_val> contains the
+ *            converted value.
+ *
+ * Throws:    <eslEMEM> on allocation error, and <*ret_val> is 0.
+ */
+int
+esl_memtod(const char *p, esl_pos_t n, double *ret_val)
+{
+  char  fixedbuf[128];
+  char *bigbuf = NULL;
+  int   status;
+
+  if (n < 128) 
+    { 
+      memcpy(fixedbuf, p, sizeof(char) * n);
+      fixedbuf[n] = '\0';
+      *ret_val = strtod(fixedbuf, NULL);
+      return eslOK;
+    }
+  else 
+    {    
+      ESL_ALLOC(bigbuf, sizeof(char) * (n+1));
+      memcpy(bigbuf, p, sizeof(char) * n);
+      bigbuf[n] = '\0';
+      *ret_val = strtod(bigbuf, NULL);
+      free(bigbuf);
+      return eslOK;
+    }
+
+ ERROR:
+  *ret_val = 0.;
+  return status;
+}
+
+/* Function:  esl_memtof()
+ * Synopsis:  esl_mem equivalent to strtod(), for a float
+ *
+ * Purpose:   Given a buffer <p> of length <n>, convert it to a
+ *            single-precision floating point value, just as
+ *            <strtod()> would do for a NUL-terminated string.
+ *            
+ * Returns:   <eslOK> on success, and <*ret_val> contains the
+ *            converted value.
+ *
+ * Throws:    <eslEMEM> on allocation error, and <*ret_val> is 0.
+ */
+int
+esl_memtof(const char *p, esl_pos_t n, float *ret_val)
+{
+  char  fixedbuf[128];
+  char *bigbuf = NULL;
+  int   status;
+
+  if (n < 128) 
+    { 
+      memcpy(fixedbuf, p, sizeof(char) * n);
+      fixedbuf[n] = '\0';
+      *ret_val = (float) strtod(fixedbuf, NULL);
+      return eslOK;
+    }
+  else 
+    {    
+      ESL_ALLOC(bigbuf, sizeof(char) * (n+1));
+      memcpy(bigbuf, p, sizeof(char) * n);
+      bigbuf[n] = '\0';
+      *ret_val = (float) strtod(bigbuf, NULL);
+      free(bigbuf);
+      return eslOK;
+    }
+
+ ERROR:
+  *ret_val = 0.;
+  return status;
+}
+  
+
+/* Function:  esl_mem_IsReal()
+ * Synopsis:  Return TRUE if <p> is a real number; else FALSE.
+ *
+ * Purpose:   If the memory <p> of <n> bytes is convertible 
+ *            to a floating point real number by the rules of
+ *            atof(), return TRUE; else return FALSE.
+ * 
+ * Xref:      easel.c::esl_str_IsReal() for string version.
+ */
+int
+esl_mem_IsReal(const char *p, esl_pos_t n)
+{
+  int gotdecimal = 0;
+  int gotexp     = 0;
+  int gotreal    = 0;
+
+  if (!p || !n) return FALSE;
+
+  while (n && isspace((int) *p))     { p++; n--; } /* skip leading whitespace */
+  if (n && (*p == '-' || *p == '+')) { p++; n--; } /* skip leading sign */
+
+  /* Examine remainder for garbage. Allowed one '.' and
+   * one 'e' or 'E'; if both '.' and e/E occur, '.'
+   * must be first.
+   */
+  while (n)
+    {
+      if (isdigit((int) (*p))) 	gotreal++;
+      else if (*p == '.')
+	{
+	  if (gotdecimal) return FALSE; /* can't have two */
+	  if (gotexp)     return FALSE; /* e/E preceded . */
+	  else gotdecimal++;
+	}
+      else if (*p == 'e' || *p == 'E')
+	{
+	  if (gotexp) return FALSE;	/* can't have two */
+	  else gotexp++;
+	}
+      else if (isspace((int) (*p))) break;
+      p++;
+      n--;
+    }
+  while (n && isspace((int) *p)) { p++; n--; } /* skip trailing whitespace */
+
+  return ( (n == 0 && gotreal) ? TRUE : FALSE);
+}
+
+/*----------------- end, esl_mem*() API  ------------------------*/
+
+
+/*****************************************************************
+ * 2. Benchmark driver.
+ *****************************************************************/
+#ifdef eslMEM_BENCHMARK
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_buffer.h"
+#include "esl_getopts.h"
+#include "esl_stopwatch.h"
+
+static ESL_OPTIONS options[] = {
+  /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options] <infile>";
+static char banner[] = "benchmark driver for mem module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go          = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  ESL_STOPWATCH  *w           = esl_stopwatch_Create();
+  char           *infile      = esl_opt_GetArg(go, 1);
+  ESL_BUFFER     *bf          = NULL;
+  int64_t         nlines      = 0;
+  int64_t         ntokens     = 0;
+  int64_t         nchar       = 0;
+  char           *p, *tok;
+  esl_pos_t       n,  toklen;
+  int             status;
+
+  esl_stopwatch_Start(w);
+
+  if ( esl_buffer_Open(infile, NULL, &bf) != eslOK) esl_fatal("open failed");
+  while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK)
+    {
+      nlines++;
+      while ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) == eslOK)
+	{
+      	  ntokens++;
+      	  nchar += toklen;
+	}
+      if (status != eslEOL) esl_fatal("memtok failure");
+    }
+  if (status != eslEOF) esl_fatal("GetLine failure");
+
+  esl_stopwatch_Stop(w);
+  esl_stopwatch_Display(stdout, w, NULL);
+  printf("lines  = %" PRId64 "\n", nlines);
+  printf("tokens = %" PRId64 "\n", ntokens);
+  printf("chars  = %" PRId64 "\n", nchar);
+
+  esl_buffer_Close(bf);
+  esl_stopwatch_Destroy(w);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslMEM_BENCHMARK*/
+/*---------------- end, benchmark driver ------------------------*/
+
+/*****************************************************************
+ * 2. Unit tests
+ *****************************************************************/
+#ifdef eslMEM_TESTDRIVE
+
+static void
+utest_mem_strtoi32(void)
+{
+  char    msg[] = "esl_mem_strtoi32() unit test failed";
+  int     nc;
+  int32_t val;
+  int     status;
+  
+  if ( (status = esl_mem_strtoi32("-1234",          5, 10, &nc, &val)) != eslOK      || nc !=  5 || val !=     -1234) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32("\t  -1234",      8, 10, &nc, &val)) != eslOK      || nc !=  8 || val !=     -1234) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32("1234",           4,  0, &nc, &val)) != eslOK      || nc !=  4 || val !=      1234) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32("12345",          4,  0, &nc, &val)) != eslOK      || nc !=  4 || val !=      1234) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32(" 0xff",          5,  0, &nc, &val)) != eslOK      || nc !=  5 || val !=       255) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32(" 0777",          4,  0, &nc, &val)) != eslOK      || nc !=  4 || val !=        63) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32("FFGG",           4, 16, &nc, &val)) != eslOK      || nc !=  2 || val !=       255) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32("0xffff",         6,  0, &nc, &val)) != eslOK      || nc !=  6 || val !=     65535) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32("0xffffff",       8,  0, &nc, &val)) != eslOK      || nc !=  8 || val !=  16777215) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32(" 2147483647",   11,  0, &nc, &val)) != eslOK      || nc != 11 || val != INT32_MAX) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32("-2147483648",   11,  0, &nc, &val)) != eslOK      || nc != 11 || val != INT32_MIN) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32(" 2147483648",   11,  0, &nc, &val)) != eslERANGE  || nc != 11 || val != INT32_MAX) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32("-2147483649",   11,  0, &nc, &val)) != eslERANGE  || nc != 11 || val != INT32_MIN) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32(" 214748364800", 13,  0, &nc, &val)) != eslERANGE  || nc != 11 || val != INT32_MAX) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32("-214748364900", 13,  0, &nc, &val)) != eslERANGE  || nc != 11 || val != INT32_MIN) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32(" 0x1234",        3, 16, &nc, &val)) != eslEFORMAT || nc !=  0 || val !=         0) esl_fatal(msg);
+  if ( (status = esl_mem_strtoi32("09999999",       7,  0, &nc, &val)) != eslEFORMAT || nc !=  0 || val !=         0) esl_fatal(msg);
+  return;
+}
+
+
+static void
+utest_memtok(void)
+{
+  char      msg[]       = "esl_memtok() unit test failed";
+  char     *teststring;
+  esl_pos_t n;
+  char     *s;
+  char     *tok;
+  esl_pos_t toklen;
+
+  if (esl_strdup("This is\t a sentence.", -1, &teststring) != eslOK) esl_fatal(msg);
+
+  s = teststring;
+  n = strlen(teststring);
+  if (esl_memtok(&s, &n, " ", &tok, &toklen) != eslOK)     esl_fatal(msg);
+  if (toklen != 4)                                         esl_fatal(msg);
+  if (memcmp(tok, "This", toklen) != 0)                    esl_fatal(msg);
+  if (*s != 'i')                                           esl_fatal(msg);
+  
+  if (esl_memtok(&s, &n, " \t", &tok, &toklen) != eslOK)   esl_fatal(msg);
+  if (toklen != 2)                                         esl_fatal(msg);
+  if (memcmp(tok, "is", toklen) != 0)                      esl_fatal(msg);
+  if (*s != 'a')                                           esl_fatal(msg);
+
+  if (esl_memtok(&s, &n, "\n", &tok, &toklen)  != eslOK)   esl_fatal(msg);
+  if (toklen != 11)                                        esl_fatal(msg);
+  if (memcmp(tok, "a sentence.", toklen) != 0)             esl_fatal(msg);
+  if (*s != '\0')                                          esl_fatal(msg);
+  if (n  != 0)                                             esl_fatal(msg);
+
+  if (esl_memtok(&s, &n, "\n", &tok, &toklen)  != eslEOL)  esl_fatal(msg);
+  if (toklen != 0)                                         esl_fatal(msg);
+  if (tok    != NULL)                                      esl_fatal(msg);
+
+  free(teststring);
+  return;
+}
+
+
+/* memspn, memcspn() */
+static void
+utest_memspn_memcspn(void)
+{
+  char      msg[]   = "memspn/memcspn unit test failed";
+  char      test1[] = "  this is a test";
+  char     *p;
+  esl_pos_t n;
+  
+  p = test1;
+  n = 13;	/* so the memory is "  this is a t" */
+  if (esl_memspn (p, n, " \t\n\r") != 2) esl_fatal(msg);
+  if (esl_memcspn(p, n, " \t\n\r") != 0) esl_fatal(msg);
+
+  p = test1+2;
+  n = 11;  /* "this is a t" */
+  if (esl_memspn (p, n, " \t\n\r") != 0) esl_fatal(msg);
+  if (esl_memcspn(p, n, " \t\n\r") != 4) esl_fatal(msg);
+  
+  p = test1; 
+  n = 2;
+  if (esl_memspn (p, n, " \t\n\r") != 2) esl_fatal(msg);
+  if (esl_memcspn(p, n, " \t\n\r") != 0) esl_fatal(msg);
+
+  p = test1+2;
+  n = 4;  
+  if (esl_memspn (p, n, " \t\n\r") != 0) esl_fatal(msg);
+  if (esl_memcspn(p, n, " \t\n\r") != 4) esl_fatal(msg);
+}
+
+/* memstrcmp/memstrpfx */
+static void
+utest_memstrcmp_memstrpfx(void)
+{
+  char      msg[]  = "memstrcmp/memstrpfx unit test failed";
+  char      test[] = "this is a test";
+  char     *p;
+  esl_pos_t n;
+
+  p = test;
+  n = strlen(p);
+  if (! esl_memstrcmp(p, n, test))   esl_fatal(msg);
+  if (  esl_memstrcmp(p, n, "this")) esl_fatal(msg);
+  if (! esl_memstrpfx(p, n, "this")) esl_fatal(msg);
+  if (  esl_memstrpfx(p, n, "that")) esl_fatal(msg);
+
+  p = test;
+  n = 2;			/* now p is just "th" */
+  if (! esl_memstrcmp(p, n, "th"))   esl_fatal(msg);
+  if (  esl_memstrcmp(p, n, test))   esl_fatal(msg);
+  if (! esl_memstrpfx(p, n, "th"))   esl_fatal(msg);
+  if (  esl_memstrpfx(p, n, "this")) esl_fatal(msg);
+
+  /* special cases involving NULLs */
+  p = test;
+  n = strlen(p);
+  if (! esl_memstrcmp(NULL, 0, NULL))   esl_fatal(msg);
+  if (  esl_memstrcmp(NULL, 0, test))   esl_fatal(msg);
+  if (  esl_memstrcmp(p,    n, NULL))   esl_fatal(msg);
+  if (  esl_memstrpfx(NULL, 0, NULL))   esl_fatal(msg);
+  if (  esl_memstrpfx(NULL, 0, "this")) esl_fatal(msg);
+  if (  esl_memstrpfx(p,    n, NULL))   esl_fatal(msg);
+}
+
+static void
+utest_memstrcontains(void)
+{
+  char      msg[]  = "memstrcontains unit test failed";
+  char      test[] = "CLUSTAL W (1.83) multiple sequence alignment";
+  char     *p;
+  esl_pos_t n;
+  
+  p = test; 
+  n = strlen(p);
+  if (! esl_memstrcontains(p, n, "multiple sequence alignment")) esl_fatal(msg);
+  if (! esl_memstrcontains(p, n, "CLUSTAL"))                     esl_fatal(msg);
+  if (  esl_memstrcontains(p, n, "alignmentx"))                  esl_fatal(msg);
+}
+
+#endif /*eslMEM_TESTDRIVE*/
+/*------------------ end, unit tests ----------------------------*/
+
+
+
+
+/*****************************************************************
+ * 3. Test driver
+ *****************************************************************/
+#ifdef eslMEM_TESTDRIVE
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_mem.h"
+#include "esl_getopts.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for mem module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go          = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+
+  utest_mem_strtoi32();
+  utest_memtok();
+  utest_memspn_memcspn();
+  utest_memstrcmp_memstrpfx();
+  utest_memstrcontains();
+
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /* eslMEM_TESTDRIVE */
+
+
+/*------------------ end, test driver ---------------------------*/
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
+
diff --git a/esl_mem.h b/esl_mem.h
new file mode 100644
index 0000000..783baea
--- /dev/null
+++ b/esl_mem.h
@@ -0,0 +1,27 @@
+/* str*()-like functions for raw memory "lines" (non-NUL terminated strings)
+ */
+#ifndef eslMEM_INCLUDED
+#define eslMEM_INCLUDED
+
+#include "easel.h"
+
+extern int       esl_mem_strtoi32(char *p, esl_pos_t n, int base, int *opt_nc, int32_t *opt_val);
+extern int       esl_memnewline(const char *p, esl_pos_t n, esl_pos_t *ret_nline, int *ret_nterm);
+extern int       esl_memtok(char **p, esl_pos_t *n, const char *delim, char **ret_tok, esl_pos_t *ret_toklen);
+extern esl_pos_t esl_memspn (char *p, esl_pos_t n, const char *allow);
+extern esl_pos_t esl_memcspn(char *p, esl_pos_t n, const char *disallow);
+extern int       esl_memstrcmp     (const char *p, esl_pos_t n, const char *s);
+extern int       esl_memstrpfx     (const char *p, esl_pos_t n, const char *s);
+extern int       esl_memstrcontains(const char *p, esl_pos_t n, const char *s);
+extern int       esl_memstrdup(const char *p, esl_pos_t n, char **ret_s);
+extern int       esl_memstrcpy(const char *p, esl_pos_t n, char *dest);
+extern int       esl_memtof(const char *p, esl_pos_t n, float  *ret_val);
+extern int       esl_memtod(const char *p, esl_pos_t n, double *ret_val);
+extern int       esl_mem_IsReal(const char *p, esl_pos_t n);
+
+#endif /*eslMEM_INCLUDED*/
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
diff --git a/esl_minimizer.c b/esl_minimizer.c
new file mode 100644
index 0000000..8b35a3c
--- /dev/null
+++ b/esl_minimizer.c
@@ -0,0 +1,654 @@
+/* Multidimensional optimization using conjugate gradient descent.
+ * 
+ * Can be used even without derivative information; falls back to
+ * a numeric gradient if analytic gradient is unavailable.
+ */
+#include "esl_config.h"
+
+#include <math.h>
+#include <float.h>
+
+#include "easel.h"
+#include "esl_vectorops.h"
+#include "esl_minimizer.h"
+
+/* Return the negative gradient at a point, determined 
+ * numerically.
+ */
+static void
+numeric_derivative(double *x, double *u, int n, 
+		   double (*func)(double *, int, void*),
+		   void *prm, double relstep,
+		   double *dx)
+{
+  int    i;
+  double delta;
+  double f1, f2;
+  double tmp;
+
+  for (i = 0; i < n; i++)
+    {
+      delta = fabs(u[i] * relstep);
+
+      tmp = x[i]; 
+      x[i] = tmp + delta;
+      f1  = (*func)(x, n, prm);
+      x[i] = tmp - delta;
+      f2  = (*func)(x, n, prm);
+      x[i] = tmp;
+
+      dx[i] = (-0.5 * (f1-f2)) / delta;
+
+      ESL_DASSERT1((! isnan(dx[i])));
+    }
+}
+
+/* bracket():
+ * SRE, Wed Jul 27 11:43:32 2005 [St. Louis]
+ *
+ * Purpose:   Bracket a minimum. 
+ *
+ *            The minimization is quasi-one-dimensional, 
+ *            starting from an initial <n>-dimension vector <ori>
+ *            in the <n>-dimensional direction <d>.
+ *            
+ *            Caller passes a ptr to the objective function <*func()>,
+ *            and a void pointer to any necessary conditional 
+ *            parameters <prm>. The objective function will
+ *            be evaluated at a point <x> by calling
+ *            <(*func)(x, n, prm)>. The caller's function
+ *            is responsible to casting <prm> to whatever it's
+ *            supposed to be, which might be a ptr to a structure,
+ *            for example; typically, for a parameter optimization
+ *            problem, this holds the observed data.
+ *            
+ *            The routine works in scalar multipliers relative
+ *            to origin <ori> and direction <d>; that is, a new <n>-dimensional
+ *            point <b> is defined as <ori> + <bx><d>, for a scalar <bx>.
+ *            
+ *            The routine identifies a triplet <ax>, <bx>, <cx> such
+ *            that $a < b < c$ and such that a minimum is known to
+ *            exist in the $(a,b)$ interval because $f(b) < f(a),
+ *            f(c)$. Also, the <a..b> and <b...c> intervals are in
+ *            a golden ratio; the <b..c> interval is 1.618 times larger
+ *            than <a..b>.
+ *
+ *            Since <d> is usually in the direction of the gradient,
+ *            the points <ax>,<bx>,<cx> might be expected to be $\geq 0$;
+ *            however, when <ori> is already close to the minimum, 
+ *            it is often faster to bracket the minimum using
+ *            a negative <ax>. The caller might then try to be "clever"
+ *            and assume that the minimum is in the <bx..cx> interval
+ *            when <ax> is negative, rather than the full <ax..cx>
+ *            interval. That cleverness can fail, though, if <ori>
+ *            is already in fact the minimum, because the line minimizer
+ *            in brent() assumes a non-inclusive interval. Use
+ *            <ax..cx> as the bracket.
+ *            
+ * Args:      ori       - n-dimensional starting vector
+ *            d         - n-dimensional direction to minimize along
+ *            n         - # of dimensions
+ *            firststep - bx is initialized to this scalar multiplier
+ *            *func()   - objective function to minimize
+ *            prm       - void * to any constant data that *func() needs
+ *            wrk       - workspace: 1 allocated n-dimensional vector
+ *            ret_ax    - RETURN:  ax < bx < cx scalar bracketing triplet
+ *            ret_bx    - RETURN:    ...ax may be negative
+ *            ret_cx    - RETURN:    
+ *            ret_fa    - RETURN:  function evaluated at a,b,c
+ *            ret_fb    - RETURN:    ... f(b) < f(a),f(c)
+ *            ret_fc    - RETURN:
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslENOHALT> if it fails to converge.
+ *
+ * Xref:      STL9/130.
+ */
+static int
+bracket(double *ori, double *d, int n, double firststep,
+	double (*func)(double *, int, void *), void *prm, 
+	double *wrk, 
+	double *ret_ax, double *ret_bx, double *ret_cx,
+	double *ret_fa, double *ret_fb, double *ret_fc)
+{
+  double ax,bx,cx;		/* scalar multipliers */
+  double fa,fb,fc;		/* f() evaluations at those points */
+  double swapper;
+  int    niter;
+  
+  /* Set and evaluate our first two points f(a) and f(b), which
+   * are initially at 0.0 and <firststep>.
+   */
+  ax = 0.;  /* always start w/ ax at the origin, ax=0 */
+  fa = (*func)(ori, n, prm);
+
+  bx = firststep;
+  esl_vec_DCopy(ori, n, wrk);
+  esl_vec_DAddScaled(wrk, d, bx, n);
+  fb = (*func)(wrk, n, prm);
+
+  /* In principle, we usually know that the minimum m lies to the
+   * right of a, m>=a, because d is likely to be a gradient.  You
+   * might think we want 0 = a < b < c.  In practice, there's problems
+   * with that. It's far easier to identify bad points (f(x) > f(a))
+   * than to identify good points (f(x) < f(a)), because letting f(x)
+   * blow up to infinity is fine as far as bracketing is concerned.
+   * It can be almost as hard to identify a point b that f(b) < f(a)
+   * as it is to find the minimum in the first place!
+   * Counterintuitively, in cases where f(b)>f(a), it's better
+   * to just swap the a,b labels and look for c on the wrong side
+   * of a! This often works immediately, if f(a) was reasonably
+   * close to the minimum and f(b) and f(c) are both terrible.
+   */
+  if (fb > fa)
+    {
+      swapper = ax; ax = bx; bx = swapper;
+      swapper = fa; fa = fb; fb = swapper;
+    }
+
+  /* Make our first guess at c.
+   * Remember, we don't know that b>a any more, and c might go negative.
+   * We'll either have:      a..b...c with a=0;
+   *                or:  c...b..a     with b=0.
+   * In many cases, we'll immediately be done.
+   */
+  cx = bx + (bx-ax)*1.618;
+  esl_vec_DCopy(ori, n, wrk);
+  esl_vec_DAddScaled(wrk, d, cx, n);
+  fc = (*func)(wrk, n, prm);
+  
+  /* We're not satisfied until fb < fa, fc; 
+   * throughout the routine, we guarantee that fb < fa;
+   * so we just check fc.
+   */
+  niter = 0;
+  while (fc <= fb)
+    {
+      /* Slide over, discarding the a point; choose 
+       * new c point even further away.
+       */
+      ax = bx; bx = cx;
+      fa = fb; fb = fc;
+      cx = bx+(bx-ax)*1.618;
+      esl_vec_DCopy(ori, n, wrk);
+      esl_vec_DAddScaled(wrk, d, cx, n);
+      fc = (*func)(wrk, n, prm);
+
+      /* This is a rare instance. We've reach the minimum
+       * by trying to bracket it. Also check that not all
+       * three points are the same.
+       */
+      if (ax != bx && bx != cx && fa == fb && fb == fc) break;
+
+      niter++;
+      if (niter > 100)
+    	  ESL_EXCEPTION(eslENORESULT, "Failed to bracket a minimum.");
+    }
+
+  /* We're about to return. Assure the caller that the points
+   * are in order a < b < c, not the other way.
+   */
+  if (ax > cx)
+    {
+      swapper = ax; ax = cx; cx = swapper;
+      swapper = fa; fa = fc; fc = swapper;
+    }
+
+  /* Return.
+   */
+  ESL_DPRINTF2(("\nbracket(): %d iterations\n", niter));
+  ESL_DPRINTF2(("bracket(): triplet is %g  %g  %g along current direction\n", 
+		ax, bx, cx));
+  ESL_DPRINTF2(("bracket(): f()'s there are: %g  %g  %g\n\n", 
+		fa, fb, fc));
+
+  *ret_ax = ax;  *ret_bx = bx;  *ret_cx = cx;
+  *ret_fa = fa;  *ret_fb = fb;  *ret_fc = fc;
+  return eslOK;
+}
+
+/* brent():
+ * SRE, Sun Jul 10 19:07:05 2005 [St. Louis]
+ *
+ * Purpose:   Quasi-one-dimensional minimization of a function <*func()>
+ *            in <n>-dimensions, along vector <dir> starting from a
+ *            point <ori>. Identifies a scalar $x$ that approximates
+ *            the position of the minimum along this direction, in a
+ *            given bracketing interval (<a,b>).  The minimum must
+ *            have been bracketed by the caller in the <(a,b)>
+ *            interval.  <a> is often 0, because we often start at the
+ *            <ori>.
+ *
+ *            A quasi-1D scalar coordinate $x$ (such as <a> or <b>) is
+ *            transformed to a point $\mathbf{p}$ in n-space as:
+ *            $\mathbf{p} = \mathbf{\mbox{ori}} + x
+ *            \mathbf{\mbox{dir}}$.
+ *
+ *            Any extra (fixed) data needed to calculate <func> can be
+ *            passed through the void <prm> pointer.
+ *
+ *            <eps> and <t> define the relative convergence tolerance,
+ *            $\mbox{tol} = \mbox{eps} |x| + t$. <eps> should not be
+ *            less than the square root of the machine precision.  The
+ *            <DBL_EPSILON> is 2.2e-16 on many machines with 64-bit
+ *            doubles, so <eps> is on the order of 1e-8 or more. <t>
+ *            is a yet smaller number, used to avoid nonconvergence in
+ *            the pathological case $x=0$.
+ *
+ *            Upon convergence (which is guaranteed), returns <xvec>,
+ *            the n-dimensional minimum. Optionally, will also return
+ *            <ret_x>, the scalar <x> that resulted in that
+ *            n-dimensional minimum, and <ret_fx>, the objective
+ *            function <*func(x)> at the minimum.
+ *
+ *            This is an implementation of the R.P. Brent (1973)
+ *            algorithm for one-dimensional minimization without
+ *            derivatives (modified from Brent's ALGOL60 code). Uses a
+ *            combination of bisection search and parabolic
+ *            interpolation; should exhibit superlinear convergence in
+ *            most functions.
+ *
+ *
+ * Args:      ori     - n-vector at origin
+ *            dir     - direction vector (gradient) we're following from ori
+ *            n       - dimensionality of ori, dir, and xvec
+ *            (*func) - ptr to caller's objective function
+ *            prm     - ptr to any additional data (*func)() needs
+ *            a,b     - minimum is bracketed on interval [a,b]
+ *            eps     - tol = eps |x| + t; eps >= 2 * relative machine precision
+ *            t       - additional factor for tol to avoid x=0 case.
+ *            xvec    - RETURN: minimum, as an n-vector (caller allocated)
+ *            ret_x   - optRETURN: scalar multiplier that gave xvec
+ *            ret_fx  - optRETURN: f(x)
+ *
+ * Returns:   (void)
+ *
+ * Reference: See [Brent73], Chapter 5. My version is derived directly
+ *            from Brent's description and his ALGOL60 code. I've
+ *            preserved his variable names as much as possible, to
+ *            make the routine follow his published description
+ *            closely. The Brent algorithm is also discussed in
+ *            Numerical Recipes [Press88].
+ */
+static void
+brent(double *ori, double *dir, int n,
+      double (*func)(double *, int, void *), void *prm,
+      double a, double b, double eps, double t,
+      double *xvec, double *ret_x, double *ret_fx)
+{
+  double w,x,v,u;               /* with [a,b]: Brent's six points     */
+  double m;                     /* midpoint of current [a,b] interval */
+  double tol;                   /* tolerance = eps|x| + t */
+  double fu,fv,fw,fx;           /* function evaluations */
+  double p,q;                   /* numerator, denominator of parabolic interpolation */
+  double r;
+  double d,e;                   /* last, next-to-last values of p/q  */
+  double c = 1. - (1./eslCONST_GOLD); /* Brent's c; 0.381966; golden ratio */
+  int    niter;			/* number of iterations */
+
+  x=v=w= a + c*(b-a);           /* initial guess of x by golden section */
+  esl_vec_DCopy(ori, n, xvec);  /* build xvec from ori, dir, x */
+  esl_vec_DAddScaled(xvec, dir, x, n);
+  fx=fv=fw = (*func)(xvec, n, prm);   /* initial function evaluation */
+
+  d = e = 0.;
+  niter = 0;
+  while (1) /* algorithm is guaranteed to converge. */
+    {
+      m   = 0.5 * (a+b);
+      tol = eps*fabs(x) + t;
+      if (fabs(x-m) <= 2*tol - 0.5*(b-a)) break; /* convergence test. */
+      niter++;
+
+      p = q = r = 0.;
+      if (fabs(e) > tol)
+        { /* Compute parabolic interpolation, u = x + p/q */
+          r = (x-w)*(fx-fv);
+          q = (x-v)*(fx-fw);
+          p = (x-v)*q - (x-w)*r;
+          q = 2*(q-r);
+          if (q > 0) { p = -p; } else {q = -q;}
+          r = e;
+          e=d;                  /* e is now the next-to-last p/q  */
+        }
+
+      if (fabs(p) < fabs(0.5*q*r) || p < q*(a-x) || p < q*(b-x))
+        { /* Seems well-behaved? Use parabolic interpolation to compute new point u */
+          d = p/q;              /* d remembers last p/q */
+          u = x+d;              /* trial point, for now... */
+
+          if (2.0*(u-a) < tol || 2.0*(b-u) < tol) /* don't evaluate func too close to a,b */
+            d = (x < m)? tol : -tol;
+        }
+      else /* Badly behaved? Use golden section search to compute u. */
+        {
+          e = (x<m)? b-x : a-x;  /* e = largest interval */
+          d = c*e;
+        }
+
+      /* Evaluate f(), but not too close to x.  */
+      if      (fabs(d) >= tol) u = x+d;
+      else if (d > 0)          u = x+tol;
+      else                     u = x-tol;
+      esl_vec_DCopy(ori, n, xvec);  /* build xvec from ori, dir, u */
+      esl_vec_DAddScaled(xvec, dir, u, n);
+      fu = (*func)(xvec, n, prm);   /* f(u) */
+
+      /* Bookkeeping.  */
+     if (fu <= fx)
+        {
+          if (u < x) b = x; else a = x;
+          v = w; fv = fw; w = x; fw = fx; x = u; fx = fu;
+        }
+      else
+        {
+          if (u < x) a = u; else b = u;
+          if (fu <= fw || w == x)
+            { v = w; fv = fw; w = u; fw = fu; }
+          else if (fu <= fv || v==x || v ==w)
+            { v = u; fv = fu; }
+        }
+    }
+
+  /* Return.
+   */
+  esl_vec_DCopy(ori, n, xvec);  /* build final xvec from ori, dir, x */
+  esl_vec_DAddScaled(xvec, dir, x, n);
+  if (ret_x  != NULL) *ret_x  = x;
+  if (ret_fx != NULL) *ret_fx = fx;
+  ESL_DPRINTF2(("\nbrent(): %d iterations\n", niter));
+  ESL_DPRINTF2(("xx=%10.8f fx=%10.1f\n", x, fx));
+}
+
+
+/* Function:  esl_min_ConjugateGradientDescent()
+ * Incept:    SRE, Wed Jun 22 08:49:42 2005 [St. Louis]
+ *
+ * Purpose:   n-dimensional minimization by conjugate gradient descent.
+ *           
+ *            An initial point is provided by <x>, a vector of <n>
+ *            components. The caller also provides a function <*func()> that 
+ *            compute the objective function f(x) when called as 
+ *            <(*func)(x, n, prm)>, and a function <*dfunc()> that can
+ *            compute the gradient <dx> at <x> when called as 
+ *            <(*dfunc)(x, n, prm, dx)>, given an allocated vector <dx>
+ *            to put the derivative in. Any additional data or fixed
+ *            parameters that these functions require are passed by
+ *            the void pointer <prm>.
+ *            
+ *            The first step of each iteration is to try to bracket
+ *            the minimum along the current direction. The initial step
+ *            size is controlled by <u[]>; the first step will not exceed 
+ *            <u[i]> for any dimension <i>. (You can think of <u> as
+ *            being the natural "units" to use along a graph axis, if
+ *            you were plotting the objective function.)
+ *
+ *            The caller also provides an allocated workspace sufficient to
+ *            hold four allocated n-vectors. (4 * sizeof(double) * n).
+ *
+ *            Iterations continue until the objective function has changed
+ *            by less than a fraction <tol>. This should not be set to less than
+ *            sqrt(<DBL_EPSILON>). 
+ *
+ *            Upon return, <x> is the minimum, and <ret_fx> is f(x),
+ *            the function value at <x>.
+ *            
+ * Args:      x        - an initial guess n-vector; RETURN: x at the minimum
+ *            u        - "units": maximum initial step size along gradient when bracketing.
+ *            n        - dimensionality of all vectors
+ *            *func()  - function for computing objective function f(x)
+ *            *dfunc() - function for computing a gradient at x
+ *            prm      - void ptr to any data/params func,dfunc need 
+ *            tol      - convergence criterion applied to f(x)
+ *            wrk      - allocated 4xn-vector for workspace
+ *            ret_fx   - optRETURN: f(x) at the minimum
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslENOHALT> if it fails to converge in MAXITERATIONS.
+ *            <eslERANGE> if the minimum is not finite, which may
+ *            indicate a problem in the implementation or choice of <*func()>.
+ *
+ * Xref:      STL9/101.
+ */
+int
+esl_min_ConjugateGradientDescent(double *x, double *u, int n, 
+       				 double (*func)(double *, int, void *),
+				 void (*dfunc)(double *, int, void *, double *),
+				 void *prm, double tol, double *wrk, double *ret_fx)
+{
+  double oldfx;
+  double coeff;
+  int    i, i1;
+  double *dx, *cg, *w1, *w2;
+  double cvg;
+  double fa,fb,fc;
+  double ax,bx,cx;
+  double fx;
+
+  dx = wrk;
+  cg = wrk + n;
+  w1 = wrk + 2*n;
+  w2 = wrk + 3*n;
+
+  oldfx = (*func)(x, n, prm);	/* init the objective function */
+  
+  /* Bail out if the function is +/-inf or nan: this can happen if the caller
+   * has screwed something up, or has chosen a bad start point.
+   */
+  if (! isfinite(oldfx)) ESL_EXCEPTION(eslERANGE, "minimum not finite");
+
+  if (dfunc != NULL) 
+    {
+      (*dfunc)(x, n, prm, dx);	/* find the current negative gradient, - df(x)/dxi  */
+      esl_vec_DScale(dx, n, -1.0);
+    } 
+  else numeric_derivative(x, u, n, func, prm, 1e-4, dx); /* resort to brute force */
+
+  esl_vec_DCopy(dx, n, cg);	/* and make that the first conjugate direction, cg  */
+
+
+
+  /* (failsafe) convergence test: a zero direction can happen, 
+   * and it either means we're stuck or we're finished (most likely stuck)
+   */
+  for (i1 = 0; i1 < n; i1++) 
+    if (cg[i1] != 0.) break;
+  if  (i1 == n) {
+    if (ret_fx != NULL) *ret_fx = oldfx;
+    return eslOK;
+  }
+  
+  for (i = 0; i < MAXITERATIONS; i++)
+  {
+
+      /* Figure out the initial step size.
+       */
+       bx = fabs(u[0] / cg[0]);
+       for (i1 = 1; i1 < n; i1++)
+	 {
+	   cx = fabs(u[i1] / cg[i1]);
+	   if (cx < bx) bx = cx;
+	 }
+ 
+       /* Bracket the minimum.
+	*/
+       bracket(x, cg, n, bx, func, prm, w1,
+	      &ax, &bx, &cx, 
+	      &fa, &fb, &fc);
+       
+       /* Minimize along the line given by the conjugate gradient <cg> */
+       brent(x, cg, n, func, prm, ax, cx, 1e-3, 1e-8, w2, NULL, &fx);
+       esl_vec_DCopy(w2, n, x);
+
+      /* Bail out if the function is now +/-inf: this can happen if the caller
+       * has screwed something up.
+       */
+      if (fx == eslINFINITY || fx == -eslINFINITY)
+    	  ESL_EXCEPTION(eslERANGE, "minimum not finite");
+
+
+      /* Find the negative gradient at that point (temporarily in w1) */
+      if (dfunc != NULL) 
+	  {
+	    (*dfunc)(x, n, prm, w1);
+	    esl_vec_DScale(w1, n, -1.0);
+	  }
+      else numeric_derivative(x, u, n, func, prm, 1e-4, w1); /* resort to brute force */
+
+      /* Calculate the Polak-Ribiere coefficient */
+      for (coeff = 0., i1 = 0; i1 < n; i1++)
+	      coeff += (w1[i1] - dx[i1]) * w1[i1];
+      coeff /= esl_vec_DDot(dx, dx, n);
+      
+      /* Calculate the next conjugate gradient direction in w2 */
+      esl_vec_DCopy(w1, n, w2);
+      esl_vec_DAddScaled(w2, cg, coeff, n);
+
+      /* Finishing set up for next iteration: */
+      esl_vec_DCopy(w1, n, dx);
+      esl_vec_DCopy(w2, n, cg);
+
+      /* Now: x is the current point; 
+       *      fx is the function value at that point;
+       *      dx is the current gradient at x;
+       *      cg is the current conjugate gradient direction. 
+       */
+
+      /* Main convergence test. 1e-9 factor is fudging the case where our
+       * minimum is at exactly f()=0.
+       */
+      cvg = 2.0 * fabs((oldfx-fx)) / (1e-10 + fabs(oldfx) + fabs(fx));
+
+//      fprintf(stderr, "(%d): Old f() = %.9f    New f() = %.9f    Convergence = %.9f\n", i, oldfx, fx, cvg);
+//      fprintf(stdout, "(%d): Old f() = %.9f    New f() = %.9f    Convergence = %.9f\n", i, oldfx, fx, cvg);
+
+#if eslDEBUGLEVEL >= 2
+      printf("\nesl_min_ConjugateGradientDescent():\n");
+      printf("new point:     ");
+      for (i1 = 0; i1 < n; i1++)
+	    printf("%g ", x[i1]);
+
+      printf("\nnew gradient:    ");
+      for (i1 = 0; i1 < n; i1++)
+	    printf("%g ", dx[i1]);
+
+      numeric_derivative(x, u, n, func, prm, 1e-4, w1);
+      printf("\n(numeric grad):  ");
+      for (i1 = 0; i1 < n; i1++)
+	    printf("%g ", w1[i1]);
+
+      printf("\nnew direction: ");
+      for (i1 = 0; i1 < n; i1++)
+	    printf("%g ", cg[i1]);
+
+      printf("\nOld f() = %g    New f() = %g    Convergence = %g\n\n", oldfx, fx, cvg);
+#endif
+
+     if (cvg <= tol) break;
+
+      /* Second (failsafe) convergence test: a zero direction can happen, 
+       * and it either means we're stuck or we're finished (most likely stuck)
+       */
+      for (i1 = 0; i1 < n; i1++) 
+	     if (cg[i1] != 0.) break;
+      if  (i1 == n) break;
+
+      oldfx = fx;
+    }
+
+
+	if (ret_fx != NULL) *ret_fx = fx;
+
+    if (i == MAXITERATIONS)
+	  ESL_FAIL(eslENOHALT, NULL, " ");
+// 	  ESL_EXCEPTION(eslENOHALT, "Failed to converge in ConjugateGradientDescent()");
+
+
+
+  return eslOK;
+}
+
+
+
+
+
+
+/*****************************************************************
+ * Example main()
+ *****************************************************************/
+#ifdef eslMINIMIZER_EXAMPLE
+/*::cexcerpt::minimizer_example::begin::*/
+/* compile: gcc -g -Wall -I. -o example -DeslMINIMIZER_EXAMPLE esl_minimizer.c esl_vectorops.c easel.c -lm
+ * run:     ./example 
+ */
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_vectorops.h"
+#include "esl_minimizer.h"
+
+/* a simple multidimensional quadratic w/ a minimum at 0:
+ *    $f(x) = a_1 x_1^2 + ... a_n x_n^2$
+ */ 
+static double
+example_func(double *x, int n, void *prm)
+{
+  double *a;
+  double  fx;
+  int     i;
+
+  a = (double *) prm;	/* cast the data vector */
+  for (fx = 0., i = 0; i < n; i++)
+    fx += a[i] * x[i] * x[i];
+  return fx;
+}
+/* gradient of the f(x): d/dx_i = 2 a_i x_i
+ */
+static void
+example_dfunc(double *x, int n, void *prm, double *dx)
+{
+  double *a;
+  int     i;
+
+  a = (double *) prm;	/* cast the data vector */
+  for (i = 0; i < n; i++)
+    dx[i] = 2.0 * a[i] * x[i];
+}
+int
+main(int argc, char **argv)
+{
+  int    n = 6;
+  double a[6] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
+  double x[6] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
+  double u[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
+  double wrk[24];
+  double fx;
+  int    i;
+
+  esl_min_ConjugateGradientDescent(x, u, n, 
+				   &example_func, &example_dfunc, (void *) a, 
+				   0.0001, wrk, &fx);
+
+  printf("At minimum: f(x) = %g\n", fx);
+  printf("vector x = ");
+  for (i = 0; i < 6; i++) printf("%g  ", x[i]);
+  printf("\n");
+
+  return 0;
+}
+/*::cexcerpt::minimizer_example::end::*/
+#endif /*eslMINIMIZER_EXAMPLE*/
+
+
+
+
+
+
+/*****************************************************************  
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_minimizer.h b/esl_minimizer.h
new file mode 100644
index 0000000..2b71a23
--- /dev/null
+++ b/esl_minimizer.h
@@ -0,0 +1,29 @@
+/* Multidimensional optimization by conjugate gradient descent.
+ * 
+ * SRE, Wed Jun 22 09:53:05 2005
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslMINIMIZER_INCLUDED
+#define eslMINIMIZER_INCLUDED
+
+#define MAXITERATIONS 100
+
+extern int esl_min_Bracket(double *a, double *d, double *u, int n, 
+			   double (*func)(double *, int, void *), void *prm, 
+			   double *ret_fa,
+			   double *b, double *ret_bx, double *ret_fb,
+			   double *c, double *ret_cx, double *ret_fc);
+extern int esl_min_LineSearch(double *ori, double *d, double *u, int n,
+			      double (*func)(double *, int, void *), void *prm,
+			      double tol, double *b, 
+			      double *x, double *ret_xx, double *ret_fx);
+extern int esl_min_ConjugateGradientDescent(double *x, double *u, int n, 
+					    double (*func)(double *, int, void *),
+					    void (*dfunc)(double *, int, void *, double *),
+					    void *prm, double tol, double *wrk, double *ret_fx);
+
+#endif /*eslMINIMIZER_INCLUDED*/
+/*****************************************************************  
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_minimizer.tex b/esl_minimizer.tex
new file mode 100644
index 0000000..22ba5b1
--- /dev/null
+++ b/esl_minimizer.tex
@@ -0,0 +1,13 @@
+
+
+
+\subsection{The minimizer API}
+
+The \eslmod{minimizer} API has just one function:
+\ccode{esl\_min\_ConjugateGradientDescent()}.
+
+\subsection{Example of using the minimizer API}
+
+The code sample below 
+
+\input{cexcerpts/minimizer_example}
diff --git a/esl_mixgev.c b/esl_mixgev.c
new file mode 100644
index 0000000..b194d5d
--- /dev/null
+++ b/esl_mixgev.c
@@ -0,0 +1,834 @@
+/* Statistical routines for mixtures of generalized extreme value distributions.
+ * 
+ * Contents:
+ *   1. The ESL_MIXGEV object
+ *   2. Evaluating densities and distributions
+ *   3. Generic API routines: for general interface w/ histogram module
+ *   4. Dumping plots to xmgrace XY format
+ *   5. Sampling                    (augmentation: random)
+ *   6. ML fitting to complete data (augmentation: minimizer)
+ *   7. Example
+ *   8. Copyright and license information
+ *   
+ * Xrefs:
+ *  SRE:STL9/139  original implementation
+ *  
+ * To-do:
+ *   - Fit*() functions should return eslEINVAL on n=0, eslENORESULT
+ *     on failure due to small n. Compare esl_gumbel. xref J12/93. 
+ *     SRE, Wed Nov 27 11:02:14 2013
+ *     
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <assert.h>
+
+#include "easel.h"
+#include "esl_vectorops.h"
+#include "esl_stats.h"
+#include "esl_gev.h"
+#include "esl_mixgev.h"
+
+#ifdef eslAUGMENT_RANDOM
+#include "esl_dirichlet.h"  /* for uniform sampling of a probability vector */
+#include "esl_random.h"
+#endif 
+
+#ifdef eslAUGMENT_MINIMIZER
+#include "esl_minimizer.h"
+#endif
+
+
+/****************************************************************************
+ * 1. The ESL_MIXGEV object
+ ****************************************************************************/ 
+
+/* Function:  esl_mixgev_Create()
+ *
+ * Purpose:   Creates an object to hold parameters for a <K>-component
+ *            mixture of generalized extreme value distributions.
+ *
+ *            Parameters in the object are initialized ($q_k =
+ *            \frac{1}{K}$, $\mu_k = 0$, $\lambda_k = 1$, $\alpha_k =
+ *            0$), but the caller will want to set these according to
+ *            its own purposes.
+ *
+ *            After an object is created, the caller can constrain any
+ *            of the components to be a Gumbel (that is, constrain
+ *            $\alpha_k = 0$ by calling <esl_mixgev_ForceGumbel(obj,
+ *            k)>.
+ *
+ * Args:      K  - number of components in the mixture
+ *
+ * Returns:   ptr to newly allocated/initialized <ESL_MIXGEV> object.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_MIXGEV *
+esl_mixgev_Create(int K)
+{
+  ESL_MIXGEV *mg = NULL;
+  int         k;
+  int         status;
+
+  ESL_ALLOC(mg, sizeof(ESL_MIXGEV));
+  mg->q = mg->mu = mg->lambda = mg->alpha = mg->wrk = NULL;
+  mg->isgumbel = NULL;
+  mg->K = K;
+
+  ESL_ALLOC(mg->q,        sizeof(double) * K);
+  ESL_ALLOC(mg->mu,       sizeof(double) * K);
+  ESL_ALLOC(mg->lambda,   sizeof(double) * K);
+  ESL_ALLOC(mg->alpha,    sizeof(double) * K);
+  ESL_ALLOC(mg->wrk,      sizeof(double) * K);
+  ESL_ALLOC(mg->isgumbel, sizeof(int)    * K);
+
+  for (k = 0; k < K; k++)
+    {
+      mg->q[k]        = 1. / (double) K;
+      mg->mu[k]       = 0.;
+      mg->lambda[k]   = 1.;
+      mg->alpha[k]    = 0.;
+      mg->isgumbel[k] = FALSE;
+    }
+  return mg;
+  
+ ERROR:
+  esl_mixgev_Destroy(mg);
+  return NULL;
+}
+
+/* Function:  esl_mixgev_Destroy()
+ *
+ * Purpose:   Deallocates the mixture GEV parameter object <mg>.
+ *
+ * Args:      mg  - ptr to the object to be deallocated.
+ *
+ * Returns:   (void)
+ */
+void
+esl_mixgev_Destroy(ESL_MIXGEV *mg)
+{
+  if (mg == NULL) return;
+
+  if (mg->q        != NULL) free(mg->q);
+  if (mg->mu       != NULL) free(mg->mu);
+  if (mg->lambda   != NULL) free(mg->lambda);
+  if (mg->alpha    != NULL) free(mg->alpha);
+  if (mg->wrk      != NULL) free(mg->wrk);
+  if (mg->isgumbel != NULL) free(mg->isgumbel);
+
+  free(mg);
+}
+
+/* Function:  esl_mixgev_Copy()
+ *
+ * Purpose:   Makes a copy of the mixture GEV parameter object <src>
+ *            in <dest>. Caller must have already allocated <dest> to have
+ *            (at least) the same number of components as <src>.
+ *
+ * Args:      src   - object to be copied
+ *            dest  - allocated object to copy <src> into
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINCOMPAT> if <dest> isn't allocated with enough
+ *            components to hold a copy of <src>.
+ */
+int
+esl_mixgev_Copy(ESL_MIXGEV *src, ESL_MIXGEV *dest)
+{
+  int k;
+
+  if (dest->K < src->K) 
+    ESL_EXCEPTION(eslEINCOMPAT, "mixture GEV too small to copy into");
+
+  for (k = 0; k < src->K; k++)
+    {
+      dest->q[k]        = src->q[k];
+      dest->mu[k]       = src->mu[k];
+      dest->lambda[k]   = src->lambda[k];
+      dest->alpha[k]    = src->alpha[k];
+      dest->isgumbel[k] = src->isgumbel[k];
+    }
+  dest->K = src->K;
+  return eslOK;
+}
+
+/* Function:  esl_mixgev_ForceGumbel()
+ *
+ * Purpose:   Constrain component <which> of the mixture GEV <mg>
+ *            to be a Gumbel (that is, constrain $\alpha=0$ for
+ *            that component. This constraint will be obeyed by
+ *            any subsequent calls to parameter fitting routines.
+ *
+ *            Normally would be called just after creating the <mg>
+ *            object, as part of its configuration before trying to 
+ *            fit some observed data to a mixture GEV.
+ *
+ * Args:      mg    - mixture GEV object being configured
+ *            which - which component to constrain to a Gumbel
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_mixgev_ForceGumbel(ESL_MIXGEV *mg, int which)
+{
+  mg->isgumbel[which] = TRUE;
+  return eslOK;
+}
+/*----------------- end ESL_MIXGEV object maintenance ----------------------*/
+
+
+
+
+/****************************************************************************
+ * 2. Evaluating densities and distributions
+ ****************************************************************************/ 
+
+/* Function:  esl_mixgev_pdf()
+ *
+ * Purpose:   Returns the probability density function $P(X=x)$ for
+ *            quantile <x>, given mixture GEV parameters <mg>.
+ */
+double
+esl_mixgev_pdf(double x, ESL_MIXGEV *mg)
+{
+  double pdf = 0.;
+  int    k;
+
+  for (k = 0; k < mg->K; k++)
+    pdf += mg->q[k] * esl_gev_pdf(x, mg->mu[k], mg->lambda[k], mg->alpha[k]);
+  return pdf;
+}
+
+/* Function:  esl_mixgev_logpdf()
+ *
+ * Purpose:   Returns the log of the PDF ($\log P(X=x)$) for quantile <x>,
+ *            given mixture GEV parameters <mg>.
+ */
+double
+esl_mixgev_logpdf(double x, ESL_MIXGEV *mg)
+{
+  int k;
+  for (k = 0; k < mg->K; k++)
+    if (mg->q[k] == 0.0) 
+      mg->wrk[k] = -eslINFINITY;
+    else 
+      mg->wrk[k] =  log(mg->q[k]) +
+	esl_gev_logpdf(x, mg->mu[k], mg->lambda[k], mg->alpha[k]);
+
+  return esl_vec_DLogSum(mg->wrk, mg->K);
+}
+
+/* Function:  esl_mixgev_cdf()
+ *
+ * Purpose:   Returns the cumulative distribution function $P(X \leq x)$
+ *            for quantile <x>, given mixture GEV parameters <mg>.
+ */
+double
+esl_mixgev_cdf(double x, ESL_MIXGEV *mg)
+{
+  double cdf = 0.;
+  int    k;
+
+  for (k = 0; k < mg->K; k++)
+    cdf += mg->q[k] * esl_gev_cdf(x, mg->mu[k], mg->lambda[k], mg->alpha[k]);
+  return cdf;
+}
+
+/* Function:  esl_mixgev_logcdf()
+ *
+ * Purpose:   Returns the log of the CDF $\log P(X \leq x)$
+ *            for quantile <x>, given mixture GEV parameters <mg>.
+ */
+double
+esl_mixgev_logcdf(double x, ESL_MIXGEV *mg)
+{
+  int k;
+
+  for (k = 0; k < mg->K; k++)
+    if (mg->q[k] == 0.0) 
+      mg->wrk[k] = -eslINFINITY;
+    else
+      mg->wrk[k] = log(mg->q[k]) + 
+	esl_gev_logcdf(x, mg->mu[k], mg->lambda[k], mg->alpha[k]);
+
+  return esl_vec_DLogSum(mg->wrk, mg->K);
+}
+
+/* Function:  esl_mixgev_surv()
+ *
+ * Purpose:   Returns the survivor function $P(X > x)$ (1-CDF)
+ *            for quantile <x>, given mixture GEV parameters <mg>.
+ */
+double
+esl_mixgev_surv(double x, ESL_MIXGEV *mg)
+{
+  double srv = 0.;
+  int    k;
+
+  for (k = 0; k < mg->K; k++)
+    srv += mg->q[k] * esl_gev_surv(x, mg->mu[k], mg->lambda[k], mg->alpha[k]);
+  return srv;
+}
+
+/* Function:  esl_mixgev_logsurv()
+ *
+ * Purpose:   Returns the log survivor function $\log P(X > x)$ (log(1-CDF))
+ *            for quantile <x>, given mixture GEV parameters <mg>.
+ */
+double
+esl_mixgev_logsurv(double x, ESL_MIXGEV *mg)
+{
+  int k;
+  for (k = 0; k < mg->K; k++)
+    {
+      mg->wrk[k] =  log(mg->q[k]);
+      mg->wrk[k] += esl_gev_logsurv(x, mg->mu[k], mg->lambda[k], mg->alpha[k]);
+    }
+  return esl_vec_DLogSum(mg->wrk, mg->K);
+}
+
+/* Function:  esl_mixgev_invcdf()
+ *
+ * Purpose:   Calculates the inverse CDF for a mixture GEV <mg>,
+ *            returning the quantile <x> at which the CDF is <p>,
+ *            where $0 < p < 1$.
+ *            
+ *            The inverse CDF of a mixture model has no analytical
+ *            expression as far as I'm aware. The calculation here is
+ *            a brute force bisection search in <x> using the CDF
+ *            function. It will suffice for a small number of calls
+ *            (for plotting applications, for example), but beware, it is not
+ *            efficient.
+ */
+double
+esl_mixgev_invcdf(double p, ESL_MIXGEV *mg)
+{
+  double x1, x2, xm;		/* low, high guesses at x */
+  double f1, f2, fm;
+  double tol = 1e-6;
+
+  x2 = esl_vec_DMin(mg->mu, mg->K);
+  x1 = x2 - 1.;
+  do {				/* bracket, left side */
+    x1 = x1 + 2.*(x2-x1);
+    f1 = esl_mixgev_cdf(x1, mg);
+  } while (f1 > p);
+  do {				/* bracket, right side */
+    x2 = x2 + 2.*(x2-x1);
+    f2 = esl_mixgev_cdf(x2, mg);
+  } while (f2 < p);		
+
+  do {				/* bisection */
+    xm = (x1+x2) / 2.;
+    fm = esl_mixgev_cdf(xm, mg);
+    
+    if      (fm > p) x2 = xm;
+    else if (fm < p) x1 = xm;
+    else return xm;		/* unlikely case of fm==p */
+  } while ( (x2-x1)/(x1+x2+1e-9) > tol);
+
+  xm = (x1+x2) / 2.;
+  return xm;
+}
+/*-------------------- end densities & distributions ------------------------*/
+
+
+
+
+/****************************************************************************
+ * 3. Generic API routines: for general interface w/ histogram module
+ ****************************************************************************/ 
+
+/* Function:  esl_mixgev_generic_pdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_mixgev_pdf()>, taking
+ *            a void ptr to a <ESL_MIXGEV> parameter structure.
+ */
+double
+esl_mixgev_generic_pdf(double x, void *params)
+{
+  ESL_MIXGEV *mg = (ESL_MIXGEV *) params;
+  return esl_mixgev_pdf(x, mg);
+}
+
+/* Function:  esl_mixgev_generic_cdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_mixgev_cdf()>, taking
+ *            a void ptr to a <ESL_MIXGEV> parameter structure.
+ */
+double
+esl_mixgev_generic_cdf(double x, void *params)
+{
+  ESL_MIXGEV *mg = (ESL_MIXGEV *) params;
+  return esl_mixgev_cdf(x, mg);
+}
+
+/* Function:  esl_mixgev_generic_surv()
+ *
+ * Purpose:   Generic-API wrapper around <esl_mixgev_surv()>, taking
+ *            a void ptr to a <ESL_MIXGEV> parameter structure.
+ */
+double
+esl_mixgev_generic_surv(double x, void *params)
+{
+  ESL_MIXGEV *mg = (ESL_MIXGEV *) params;
+  return esl_mixgev_surv(x, mg);
+}
+
+/* Function:  esl_mixgev_generic_invcdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_mixgev_invcdf()>, taking
+ *            a void ptr to a <ESL_MIXGEV> parameter structure.
+ */
+double
+esl_mixgev_generic_invcdf(double p, void *params)
+{
+  ESL_MIXGEV *mg = (ESL_MIXGEV *) params;
+  return esl_mixgev_invcdf(p, mg);
+}
+/*------------------------ end generic API ---------------------------------*/
+
+
+
+
+/****************************************************************************
+ * 4. Dumping plots to xmgrace XY format
+ ****************************************************************************/ 
+
+/* Function:  esl_mixgev_Plot()
+ *
+ * Purpose:   Plot some function <func> (for instance, <esl_mixgev_pdf()>)
+ *            for mixture GEV parameters <mg>, for a range of
+ *            quantiles x from <xmin> to <xmax> in steps of <xstep>;
+ *            output to an open stream <fp> in xmgrace XY input format.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error.
+ */
+int
+esl_mixgev_Plot(FILE *fp, ESL_MIXGEV *mg,
+		double (*func)(double x, ESL_MIXGEV *mg), 
+		double xmin, double xmax, double xstep)
+{
+  double x;
+  for (x = xmin; x <= xmax; x += xstep)
+    if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mg)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixgev plot write failed");
+  if (fprintf(fp, "&\n")                           < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixgev plot write failed");
+  return eslOK;
+}
+/*-------------------- end plot dumping routines ---------------------------*/
+
+
+
+
+
+/****************************************************************************
+ * 5. Sampling (requires augmentation w/ random module)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_RANDOM
+
+/* Function:  esl_mixgev_Sample()
+ *
+ * Purpose:   Sample a random variate x from a mixture GEV <mg>, 
+ *            given random number source <r>.
+ */
+double
+esl_mixgev_Sample(ESL_RANDOMNESS *r, ESL_MIXGEV *mg)
+{
+  int k;	
+  k = esl_rnd_DChoose(r, mg->q, mg->K);
+  return esl_gev_Sample(r, mg->mu[k], mg->lambda[k], mg->alpha[k]);
+}
+
+#endif /*eslAUGMENT_RANDOM*/
+/*--------------------------- end sampling ---------------------------------*/
+
+
+
+
+
+
+/****************************************************************************
+ * 6. ML fitting to complete data (augmentation: minimizer)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_MINIMIZER
+
+struct mixgev_data {
+  double *x;
+  int     n;
+  double *wrk;	    /* workspace vector               [0..K-1]*/
+  ESL_MIXGEV *mg;
+};
+
+/* Given mixture GEV parameters in <mg>;
+ * do appropriate c.o.v.'s to unconstrained real parameters
+ * and fill in the packed parameter vector <p>.
+ * 
+ * First K-1 are Q_1..Q_K-1 mixture coefficient parameters; Q_0 implicitly 0;
+ *  cov is q_k = e^{Q_k} / \sum_j e^{Q_j},
+ *  so     Q_k = log(q_k) - log(q_0).
+ * Then K components: mu, lambda, optional alpha;
+ * mu, alpha are already unconstrained real;
+ * lambda cov is lambda = e^w, w = log(lambda).
+ */
+static void
+mixgev_pack_paramvector(double *p, int np, ESL_MIXGEV *mg)
+{
+  int    i;			/* counter in parameter vector p */
+  int    k;			/* counter in mixture components */
+  double z;			/* tmp variable */
+
+  /* mixture coefficients */
+  z = log(mg->q[0]);
+  i = 0;
+  for (k = 1; k < mg->K; k++) 
+    p[i++] = log(mg->q[k]) - z;
+  
+  /* gev parameters */
+  for (k = 0; k < mg->K; k++)
+    {
+      p[i++] = mg->mu[k];
+      p[i++] = log(mg->lambda[k]);
+      if (! mg->isgumbel[k]) p[i++] = mg->alpha[k];
+    }
+  /* assert(i==np) in debugging, if you want */
+}
+
+/* Same as above but in reverse: given parameter vector <p>,
+ * do appropriate c.o.v. back to desired parameter space, and
+ * fill in the mixture GEV structure <mg>.
+ */
+static void
+mixgev_unpack_paramvector(double *p, int np, ESL_MIXGEV *mg)
+{
+  int    i;			/* counter in parameter vector p */
+  int    k;			/* counter in mixture components */
+  double z;			/* tmp variable  */
+
+  /* Fetch the params in their c.o.v. space first
+   */
+  i = 0;
+  mg->q[0] = 0;	/* implicitly */
+  for (k = 1; k < mg->K; k++) 
+    mg->q[k] = p[i++]; 
+  for (k = 0; k < mg->K; k++)
+    {
+      mg->mu[k]     = p[i++];
+      mg->lambda[k] = p[i++];
+      if (!mg->isgumbel[k]) mg->alpha[k]  = p[i++];
+      else                  mg->alpha[k]  = 0.;
+    }
+  assert(i==np);
+  
+  /* Convert mix coefficients back to probabilities;
+   * their  c.o.v. is q_k = e^{Q_k} / \sum_k e^{Q_k}
+   * which rearranges to exp(Q_k - log[\sum_k e^Q_k]),
+   * and we have the DLogSum() function to compute the log sum.
+   */
+  z = esl_vec_DLogSum(mg->q, mg->K);
+  for (k = 0; k < mg->K; k++)
+    mg->q[k] = exp(mg->q[k] - z);
+  
+  /* lambda c.o.v. is \lambda = e^w
+   */
+  for (k = 0; k < mg->K; k++)
+    mg->lambda[k] = exp(mg->lambda[k]);
+}
+
+static double
+mixgev_complete_func(double *p, int np, void *dptr)
+{
+  struct mixgev_data *data = (struct mixgev_data *) dptr;
+  ESL_MIXGEV         *mg   = data->mg;
+  int    i;
+  double logL;
+
+  /* Use the current parameter vector (in its unconstrained
+   * real c.o.v. space) to deduce what the current mixture GEV
+   * parameters are:
+   */
+  mixgev_unpack_paramvector(p, np, mg);
+
+  /* Calculate the log likelihood:
+   */
+  logL = 0;
+  for (i = 0; i < data->n; i++)
+    logL += esl_mixgev_logpdf(data->x[i], mg);
+
+  /* return the NLL
+   */
+  return -logL;
+}
+
+
+/* Function:  esl_mixgev_FitGuess()
+ *
+ * Purpose:   Make initial randomized guesses at the parameters
+ *            of mixture GEV <mg>, using random number generator
+ *            <r> and observed data consisting of <n> values
+ *            <x[0..n-1]>. This guess is a suitable starting
+ *            point for a parameter optimization routine, such
+ *            as <esl_mixgev_FitComplete()>.
+ *            
+ *            Specifically, we estimate one 'central' guess 
+ *            for a single Gumbel fit to the data, using the
+ *            method of moments. Then we add $\pm 10\%$ to that 'central' 
+ *            $\mu$ and $\lambda$ to get each component 
+ *            $\mu_i$ and $\lambda_i$. The $\alpha_i$ parameters
+ *            are generated by sampling uniformly from $-0.1..0.1$.
+ *            Mixture coefficients $q_i$ are sampled uniformly.
+ *
+ * Args:      r   - randomness source 
+ *            x   - vector of observed data values to fit, 0..n-1
+ *            n   - number of values in <x>
+ *            mg  - mixture GEV to put guessed params into
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_mixgev_FitGuess(ESL_RANDOMNESS *r, double *x, int n, ESL_MIXGEV *mg)
+{
+  double mean, variance;
+  double mu, lambda;
+  int    k;
+
+  esl_stats_DMean(x, n, &mean, &variance);
+  lambda = eslCONST_PI / sqrt(6.*variance);
+  mu     = mean - 0.57722/lambda;
+
+  esl_dirichlet_DSampleUniform(r, mg->K, mg->q);
+  for (k = 0; k < mg->K; k++)
+    {
+      mg->mu[k]     = mu     + 0.2 * mu     * (esl_random(r) - 0.5);
+      mg->lambda[k] = lambda + 0.2 * lambda * (esl_random(r) - 0.5);
+      if (mg->isgumbel[k]) mg->alpha[k] = 0.;
+      else mg->alpha[k] = 0.2 * (esl_random(r) - 0.5);
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_mixgev_FitComplete()
+ *
+ * Purpose:   Given <n> observed data values <x[0..n-1]>, and
+ *            an initial guess at a mixture GEV fit to those data
+ *            <mg>, use conjugate gradient descent to perform
+ *            a locally optimal maximum likelihood mixture
+ *            GEV parameter fit to the data.
+ *            
+ *            To obtain a reasonable initial guess for <mg>,
+ *            see <esl_mixgev_FitGuess()>. 
+ *
+ * Args:      x   - observed data, <x[0..n-1]>.
+ *            n   - number of samples in <x>
+ *            mg  - mixture GEV to estimate, w/ params set to
+ *                  an initial guess.
+ *
+ * Returns:   <eslOK> on success, and <mg> contains local
+ *            ML estimate for mixture GEV parameters.
+ *
+ * Throws:    <eslEMEM> on allocation error, and <mg> is unchanged
+ *            from its initial state.
+ */
+int
+esl_mixgev_FitComplete(double *x, int n, ESL_MIXGEV *mg)
+{
+  struct mixgev_data data;
+  int     status;
+  double *p = NULL;
+  double *u = NULL;
+  double *wrk = NULL;
+  double  tol;
+  int     np;
+  double  fx;
+  int     k;
+  int     i;
+
+  tol = 1e-6;
+
+  /* Determine number of free parameters and allocate 
+   */
+  np = mg->K-1;			/* K-1 mix coefficients free */
+  for (k = 0; k < mg->K; k++)
+    np += (mg->isgumbel[k])? 2 : 3;
+  ESL_ALLOC(p,   sizeof(double) * np);
+  ESL_ALLOC(u,   sizeof(double) * np);
+  ESL_ALLOC(wrk, sizeof(double) * np * 4);
+
+  /* Copy shared info into the "data" structure
+   */
+  data.x   = x;
+  data.n   = n;
+  data.wrk = wrk;
+  data.mg  = mg;
+
+  /* From mg, create the parameter vector.
+   */
+  mixgev_pack_paramvector(p, np, mg);
+
+  /* Define the step size vector u.
+   */
+  i = 0;
+  for (k = 1; k < mg->K; k++) u[i++] = 1.0;
+  for (k = 0; k < mg->K; k++)
+    {
+      u[i++] = 1.0;
+      u[i++] = 1.0;
+      if (! mg->isgumbel[k]) u[i++] = 0.02;
+    }
+  ESL_DASSERT1( (np == i) );
+
+  /* Feed it all to the mighty optimizer.
+   */
+
+  status = esl_min_ConjugateGradientDescent(p, u, np, &mixgev_complete_func, NULL,
+					    (void *) (&data), tol, wrk, &fx);
+  if (status != eslOK) goto ERROR;
+
+  /* Convert the final parameter vector back to a mixture GEV
+   */
+  mixgev_unpack_paramvector(p, np, mg);
+  
+  free(p);
+  free(u);
+  free(wrk);
+  return eslOK;
+
+ ERROR:
+  if (p != NULL)   free(p);
+  if (u != NULL)   free(u);
+  if (wrk != NULL) free(wrk);
+  return status;
+}
+#endif /*eslAUGMENT_MINIMIZER*/
+/*--------------------------- end fitting ----------------------------------*/
+
+
+
+
+/****************************************************************************
+ * Example main()
+ ****************************************************************************/ 
+
+#ifdef eslMIXGEV_EXAMPLE
+/*::cexcerpt::mixgev_example::begin::*/
+/* compile: 
+   gcc -g -Wall -I. -L. -o example -DeslMIXGEV_EXAMPLE esl_mixgev.c -leasel -lm 
+ * run:     ./example
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include "easel.h"
+#include "esl_mixgev.h"
+#include "esl_random.h"
+
+int
+main(int argc, char **argv)
+{
+  FILE *fp;
+  ESL_RANDOMNESS *r;		/* source of random numbers   */
+  ESL_MIXGEV *mg;		/* mixture GEV to sample from */
+  ESL_MIXGEV *emg;		/* estimated mixture GEV      */
+  double     *x;		/* sampled dataset            */
+  int         n = 100000;	/* number of samples          */
+  int         i;
+  int         k;
+  double      nll;
+  double      min, max;
+
+  r  = esl_randomness_Create(42);
+  mg = esl_mixgev_Create(2);
+  mg->q[0]      = 0.85;   mg->q[1]      = 0.15; 
+  mg->mu[0]     = -2.72;  mg->mu[1]     = -2.0; 
+  mg->lambda[0] = 2.5;    mg->lambda[1] = 1.0;  
+  mg->alpha[0]  = 0.;     mg->alpha[1]  = 0.09; 
+
+  nll = 0.;
+  min = 99999;
+  max = -99999;
+
+  x = malloc(sizeof(double) * n);
+  for (i = 0; i < n; i++)
+    {
+      x[i] = esl_mixgev_Sample(r, mg);
+      nll -= esl_mixgev_logpdf(x[i], mg);
+      if (x[i] > max) max = x[i];
+      if (x[i] < min) min = x[i];
+    }
+  printf("NLL of known mixGEV: %g\n", nll);
+
+  /* Dump the raw data samples to an R file.
+   */
+  fp = fopen("data.out", "w");
+  fprintf(fp, "     val\n");
+  for (i = 0; i < n; i++)
+    fprintf(fp, "%d   %f\n", i+1, x[i]);
+  fclose(fp);
+
+  emg = esl_mixgev_Create(2);
+  esl_mixgev_FitGuess(r, x, n, emg); 
+  /*  esl_mixgev_Copy(mg, emg); */
+  esl_mixgev_ForceGumbel(emg, 0); 
+  esl_mixgev_FitComplete(x, n, emg);
+
+  printf("Component   q      mu   lambda  alpha\n");
+  for (k=0; k < 2; k++)
+    printf("%d\t%7.4f\t%7.2f\t%7.4f\t%7.4f\n", 
+	   k, emg->q[k], emg->mu[k], emg->lambda[k], emg->alpha[k]);
+
+  nll = 0.;
+  for (i = 0; i < n; i++)
+    nll -= esl_mixgev_logpdf(x[i], emg);
+  printf("NLL of fitted mixGEV: %g\n", nll);
+
+  /* Dump some R commands for showing these distributions
+   */
+  printf("library(ismev)\n");
+  printf("library(evd)\n");
+
+  printf("d <- read.table(\"data.out\")$val\n");
+  printf("plot(density(d,bw=0.2), log=\"y\")\n");
+  printf("min <- %f\n", min);
+  printf("max <- %f\n", max);
+  printf("xax <- seq(min-2, max+5, by=0.1)\n");
+  printf("cc <- xax - xax\n");
+  printf("zc <- xax - xax\n");
+  for (k = 0; k < mg->K; k++)
+    {
+      printf("c%d  <- %f * dgev(xax, %f, %f, %f)\n", 
+	     k, mg->q[k], mg->mu[k], 1./mg->lambda[k], mg->alpha[k]);
+      printf("cc   <- cc + c%d\n", k);
+      printf("lines(xax, c%d, col=\"blue\")\n", k);
+    }
+  for (k = 0; k < emg->K; k++)
+    {
+      printf("z%d  <- %f * dgev(xax, %f, %f, %f)\n", 
+	     k, emg->q[k], emg->mu[k], 1./emg->lambda[k], emg->alpha[k]);
+      printf("zc   <- zc + z%d\n", k);
+      printf("lines(xax, z%d, col=\"blue\")\n", k);
+    }
+  printf("lines(xax, cc, col=\"green\")\n");
+  printf("lines(xax, zc, col=\"red\")\n");
+
+  esl_mixgev_Destroy(mg);
+  esl_mixgev_Destroy(emg);
+  esl_randomness_Destroy(r);
+  free(x);
+  return 0;
+}
+/*::cexcerpt::mixgev_example::end::*/
+#endif /*eslMIXGEV_EXAMPLE*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_mixgev.h b/esl_mixgev.h
new file mode 100644
index 0000000..94326e0
--- /dev/null
+++ b/esl_mixgev.h
@@ -0,0 +1,63 @@
+/* Mixture generalized extreme value distributions.
+ * 
+ * SRE, Mon Aug 15 08:33:57 2005 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslMIXGEV_INCLUDED
+#define eslMIXGEV_INCLUDED
+
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+
+typedef struct {
+  double *q;			/* mixture coefficients      [0..K-1]*/
+  double *mu;			/* location parameters       [0..K-1]*/
+  double *lambda;		/* scale parameters          [0..K-1]*/
+  double *alpha;		/* shape parameters          [0..K-1]*/
+  double *wrk;			/* tmp vector needed for logpdf calc */
+  int    *isgumbel;		/* flag:TRUE to constrain k to Gumbel*/
+  int     K;			/* # of components                   */
+} ESL_MIXGEV;
+
+
+
+extern ESL_MIXGEV *esl_mixgev_Create(int K);
+extern void        esl_mixgev_Destroy(ESL_MIXGEV *mg);
+extern int         esl_mixgev_Copy(ESL_MIXGEV *dest, ESL_MIXGEV *src);
+extern int         esl_mixgev_ForceGumbel(ESL_MIXGEV *mg, int which);
+
+extern double      esl_mixgev_pdf    (double x, ESL_MIXGEV *mg);
+extern double      esl_mixgev_logpdf (double x, ESL_MIXGEV *mg);
+extern double      esl_mixgev_cdf    (double x, ESL_MIXGEV *mg);
+extern double      esl_mixgev_logcdf (double x, ESL_MIXGEV *mg);
+extern double      esl_mixgev_surv   (double x, ESL_MIXGEV *mg);
+extern double      esl_mixgev_logsurv(double x, ESL_MIXGEV *mg);
+extern double      esl_mixgev_invcdf (double p, ESL_MIXGEV *mg);
+
+extern double      esl_mixgev_generic_pdf   (double x, void *params);
+extern double      esl_mixgev_generic_cdf   (double x, void *params);
+extern double      esl_mixgev_generic_surv  (double x, void *params);
+extern double      esl_mixgev_generic_invcdf(double p, void *params);
+
+extern int         esl_mixgev_Plot(FILE *fp, ESL_MIXGEV *mg,
+				   double (*func)(double x, ESL_MIXGEV *mg), 
+				   double xmin, double xmax, double xstep);
+
+#ifdef eslAUGMENT_RANDOM
+extern double      esl_mixgev_Sample(ESL_RANDOMNESS *r, ESL_MIXGEV *mg);
+extern int         esl_mixgev_FitGuess(ESL_RANDOMNESS *r, double *x, int n, 
+				       ESL_MIXGEV *mg);
+#endif /*eslAUGMENT_RANDOM*/
+
+
+#ifdef eslAUGMENT_MINIMIZER
+extern int         esl_mixgev_FitComplete(double *x, int n, ESL_MIXGEV *mg);
+#endif /*eslAUGMENT_MINIMIZER*/
+
+
+#endif /*eslMIXGEV_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_mpi.c b/esl_mpi.c
new file mode 100644
index 0000000..ddf6ed5
--- /dev/null
+++ b/esl_mpi.c
@@ -0,0 +1,1238 @@
+/* Support for MPI parallelization.
+ * 
+ * Only available when the entire Easel library is in use (HAVE_MPI
+ * and eslLIBRARY are defined).
+ * 
+ * Contents:
+ *    1. Communicating optional arrays.
+ *    2. Communicating ESL_SQ (single biosequences)
+ *    3. Communicating ESL_MSA (multiple sequence alignments).
+ *    4. Communicating ESL_STOPWATCH (process timing).
+ *    5. Unit tests.
+ *    6. Test driver.
+ *    7. Example.
+ *    8. Copyright and license information.
+ */
+#include "esl_config.h"		
+#if defined(HAVE_MPI) && defined(eslLIBRARY)
+#include <string.h>
+#include "mpi.h"
+
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_sq.h"
+#include "esl_stopwatch.h"
+#include "esl_mpi.h"
+
+
+
+/*****************************************************************
+ *# 1. Communicating optional arrays.
+ *****************************************************************/
+
+/* Function:  esl_mpi_PackOpt()
+ * Synopsis:  Pack an optional, variable-sized array (or string).
+ * Incept:    SRE, Sat Jun  2 08:40:39 2007 [Janelia]
+ *
+ * Purpose:   Pack data array <inbuf> of <incount> elements of type <type> into
+ *            an MPI packed buffer <pack_buf> of total size <pack_buf_size> destined
+ *            for MPI communicator <comm> that is currently filled to position <*position>.
+ *            
+ *            <inbuf> may be <NULL>, in which case <incount> is
+ *            assumed to be 0, and a `null array' is packed that
+ *            <esl_mpi_UnpackOpt()> knows how to decode as a <NULL>
+ *            pointer.
+ *            
+ *            As a special case for strings, if <type> is <MPI_CHAR>,
+ *            <incount> may be passed as <-1> to indicate `unknown';
+ *            the routine will use <strlen(inbuf)+1> to determine the
+ *            size of the string including its <NUL> terminator.
+ *
+ * Returns:   <eslOK> on success, the array is packed into <pack_buf>, 
+ *            and the <*position> counter is updated to point to the next byte
+ *            in <pack_buf> after the packed array.
+ * 
+ * Throws:    <eslESYS> if an MPI call fails.
+ */
+int
+esl_mpi_PackOpt(void *inbuf, int incount, MPI_Datatype type, void *pack_buf, int pack_buf_size, int *position, MPI_Comm comm)
+{
+  if (inbuf == NULL) {
+    incount = 0;
+    if (MPI_Pack(&incount,    1, MPI_INT, pack_buf, pack_buf_size, position, comm) != 0)  ESL_EXCEPTION(eslESYS, "MPI pack failed");
+  } else {
+    if (incount == -1 && type == MPI_CHAR) incount = strlen(inbuf) + 1;
+    if (MPI_Pack(&incount,    1, MPI_INT, pack_buf, pack_buf_size, position, comm) != 0)  ESL_EXCEPTION(eslESYS, "MPI pack failed");
+    if (MPI_Pack(inbuf, incount,    type, pack_buf, pack_buf_size, position, comm) != 0)  ESL_EXCEPTION(eslESYS, "MPI pack failed");
+  }
+  return eslOK;
+}
+
+/* Function:  esl_mpi_PackOptSize()
+ * Synopsis:  Determine the size of a packed optional, variable-sized array.
+ * Incept:    SRE, Sat Jun  2 10:09:16 2007 [Janelia]
+ *
+ * Purpose:   Determine an upper bound on the size (in bytes) required
+ *            to pack an array <inbuf> of <incount> elements of type
+ *            <type> destined for MPI communicator <comm> using
+ *            <esl_mpi_PackOpt()>, and return it in <*ret_n>.
+ *            
+ *            If <inbuf> is non-<NULL>, the packed message consists
+ *            of 1 integer (the length, <incount>) followed by the array.
+ *            If <inbuf> is <NULL>, the packed message consists of one
+ *            integer (0). 
+ *            
+ *            As a special case for strings, if <type> is <MPI_CHAR>,
+ *            <incount> may be passed as <-1> to indicate `unknown';
+ *            in this case, the routine uses <strlen(inbuf)+1> to determine the
+ *            size of the string including its <NUL> terminator.
+ *
+ * Returns:   <eslOK> on success, and <*ret_n> contains the upper limit size in
+ *            bytes.
+ *            
+ * Throws:    <eslESYS> if an MPI call fails, and <*ret_n> is 0.           
+ */
+int
+esl_mpi_PackOptSize(void *inbuf, int incount, MPI_Datatype type, MPI_Comm comm, int *ret_n)
+{
+  int status;
+  int sz;
+
+  *ret_n = 0;
+  if (inbuf == NULL) {
+    status = MPI_Pack_size(1,    MPI_INT, MPI_COMM_WORLD, &sz);  *ret_n += sz;   if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed");
+  } else {
+    if (incount == -1 && type == MPI_CHAR) incount = strlen(inbuf) + 1;
+    status = MPI_Pack_size(1,    MPI_INT, MPI_COMM_WORLD, &sz);  *ret_n += sz;   if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed");
+    status = MPI_Pack_size(incount, type, MPI_COMM_WORLD, &sz);  *ret_n += sz;   if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed");
+  }
+  return eslOK;
+
+ ERROR:
+  *ret_n = 0;
+  return status;
+}
+
+
+
+/* Function:  esl_mpi_UnpackOpt()
+ * Synopsis:  Unpack an optional, variable-sized array (or string).
+ * Incept:    SRE, Sat Jun  2 08:39:39 2007 [Janelia]
+ *
+ * Purpose:   Unpack a packed MPI message in buffer <pack_buf>, of total size
+ *            <pack_buf_size>, at current position <*pos> in <pack_buf>,
+ *            for MPI communicator <comm>, where the next packed element is an optional
+ *            array of type <type>, consisting of a <(n,data)> pair, with <n=0>
+ *            indicating no data. 
+ *            
+ *            If array data is present (<n>0>), allocate <*outbuf>,
+ *            put the array in it, and optionally return <n> in
+ *            <*opt_n>. The caller is responsible for free'ing this
+ *            <*outbuf>.
+ *
+ *            If data are not present (<n=0>), no allocation is done,
+ *            <*outbuf> is set to <NULL>, and the optional <*opt_n> is
+ *            0.
+ *            
+ *            <*pos> is updated to point at the next element in <pack_buf>
+ *            that needs to be unpacked.
+ *
+ *            This routine is designed for an optional-array idiom in
+ *            which <array==NULL> means the array isn't available, and
+ *            otherwise the array contains valid data. For instance,
+ *            this is used for optional annotation on multiple
+ *            alignments. 
+ *            
+ * Returns:   <eslOK> on success; <*pos> is updated; <*outbuf> is either a newly allocated 
+ *            array (that caller is responsible for freeing) and optional <*opt_n>
+ *            is its length, or <*outbuf> is <NULL> and optional <*opt_n> is 0.
+ *
+ * Throws:    <eslESYS> on an MPI call failure; <eslEINVAL> if something's wrong
+ *            with the arguments; <eslEMEM> on allocation failure. 
+ *            In either case, <*outbuf> is <NULL> and optional <*opt_n> is 0.
+ */
+int
+esl_mpi_UnpackOpt(void *pack_buf, int pack_buf_size, int *pos, void **outbuf, int *opt_n, MPI_Datatype type, MPI_Comm comm)
+{
+  int sz;
+  int status;
+  
+  if (MPI_Unpack(pack_buf, pack_buf_size, pos, &sz, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+
+  if (sz == 0) {
+    *outbuf = NULL;
+  } else {
+    if      (type == MPI_CHAR)           ESL_ALLOC(*outbuf, sizeof(char)           * sz); 
+    else if (type == MPI_SHORT)          ESL_ALLOC(*outbuf, sizeof(short)          * sz); 
+    else if (type == MPI_INT)            ESL_ALLOC(*outbuf, sizeof(int)            * sz);  
+    else if (type == MPI_LONG)           ESL_ALLOC(*outbuf, sizeof(long)           * sz);  
+    else if (type == MPI_UNSIGNED_CHAR)  ESL_ALLOC(*outbuf, sizeof(unsigned char)  * sz);
+    else if (type == MPI_UNSIGNED_SHORT) ESL_ALLOC(*outbuf, sizeof(unsigned short) * sz);  
+    else if (type == MPI_UNSIGNED)       ESL_ALLOC(*outbuf, sizeof(unsigned int)   * sz);
+    else if (type == MPI_UNSIGNED_LONG)  ESL_ALLOC(*outbuf, sizeof(unsigned long)  * sz); 
+    else if (type == MPI_FLOAT)          ESL_ALLOC(*outbuf, sizeof(float)          * sz); 
+    else if (type == MPI_DOUBLE)         ESL_ALLOC(*outbuf, sizeof(double)         * sz);  
+    else if (type == MPI_LONG_DOUBLE)    ESL_ALLOC(*outbuf, sizeof(long double)    * sz); 
+    else if (type == MPI_BYTE)           ESL_ALLOC(*outbuf, sz);                       
+    else if (type == MPI_PACKED)         ESL_ALLOC(*outbuf, sz);
+    else ESL_XEXCEPTION(eslEINVAL, "no such MPI datatype");
+
+    if (MPI_Unpack(pack_buf, pack_buf_size, pos, *outbuf, sz, type, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  }
+  if (opt_n != NULL) *opt_n = sz;
+  return eslOK;
+
+ ERROR:
+  if (*outbuf != NULL) free(*outbuf);
+  *outbuf = NULL;
+  if (opt_n != NULL) *opt_n = 0;
+  return status;
+}
+/*--------------------- end, optional arrays -------------------*/
+
+
+
+/*****************************************************************
+ *# 2. Communicating ESL_SQ (single biosequences)
+ *****************************************************************/
+
+/* Function:  esl_sq_MPISend()
+ * Synopsis:  Send an ESL_SQ as an MPI work unit.
+ * Incept:    ER, Thu Jun 19 10:39:49 EDT 2008 [Janelia]
+ *
+ * Purpose:   Sends an <ESL_SQ> <esl_sq> as a work unit to MPI process
+ *            <dest> (where <dest> ranges from 0..<nproc-1>), tagged
+ *            with MPI tag <tag>, for MPI communicator <comm>, as 
+ *            the sole workunit or result. 
+ *            
+ *            Work units are prefixed by a status code. If <esl_sq> is
+ *            <non-NULL>, the work unit is an <eslOK> code followed by
+ *            the packed <ESL_SQ>. If <esl_sq> is NULL, the work unit is an
+ *            <eslEOD> code, which <esl_sq_MPIRecv()> knows how to
+ *            interpret; this is typically used for an end-of-data
+ *            signal to cleanly shut down worker processes.
+ *            
+ *            In order to minimize alloc/free cycles in this routine,
+ *            caller passes a pointer to a working buffer <*buf> of
+ *            size <*nalloc> characters. If necessary (i.e. if <esl_sq> is
+ *            too big to fit), <*buf> will be reallocated and <*nalloc>
+ *            increased to the new size. As a special case, if <*buf>
+ *            is <NULL> and <*nalloc> is 0, the buffer will be
+ *            allocated appropriately, but the caller is still
+ *            responsible for free'ing it.
+ *            
+ * Returns:   <eslOK> on success; <*buf> may have been reallocated and
+ *            <*nalloc> may have been increased.
+ * 
+ * Throws:    <eslESYS> if an MPI call fails; <eslEMEM> if a malloc/realloc
+ *            fails. In either case, <*buf> and <*nalloc> remain valid and useful
+ *            memory (though the contents of <*buf> are undefined). 
+ * 
+ */
+int
+esl_sq_MPISend(ESL_SQ *sq, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc)
+{
+  int   status;
+  int   code;
+  int   sz, n, pos;
+
+  /* Figure out size */
+  if (MPI_Pack_size(1, MPI_INT, comm, &n) != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed");
+  if (sq != NULL) {
+    if ((status = esl_sq_MPIPackSize(sq, comm, &sz)) != eslOK) return status;
+    n += sz;
+  }
+  ESL_DPRINTF2(("esl_sq_MPISend(): sq has size %d\n", n));
+
+  /* Make sure the buffer is allocated appropriately */
+  if (*buf == NULL || n > *nalloc) {
+    void *tmp;
+    ESL_RALLOC(*buf, tmp, sizeof(char) * n);
+    *nalloc = n; 
+  }
+  ESL_DPRINTF2(("esl_sq_MPISend(): buffer is ready\n"));
+
+  /* Pack the status code and ESL_SQ into the buffer */
+  pos  = 0;
+  code = (sq == NULL) ? eslEOD : eslOK;
+  if (MPI_Pack(&code, 1, MPI_INT, *buf, n, &pos, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi pack failed");
+  if (sq != NULL) {
+    if ((status = esl_sq_MPIPack(sq, *buf, n, &pos, comm)) != eslOK) return status;
+  }
+  ESL_DPRINTF2(("esl_sq_MPISend(): sq is packed into %d bytes\n", pos));
+
+  /* Send the packed ESL_SQ to the destination. */
+  if (MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm) != 0)  ESL_EXCEPTION(eslESYS, "mpi send failed");
+  ESL_DPRINTF2(("esl_sq_MPISend(): sq is sent.\n"));
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_sq_MPIPackSize()
+ * Synopsis:  Calculates size needed to pack an ESL_SQ.
+ * Incept:    ER, Thu Jun 19 10:48:25 EDT 2008 [Janelia]
+ *
+ * Purpose:   Calculate an upper bound on the number of bytes
+ *            that <esl_sq_MPIPack()> will need to pack an <ESL_SQ>
+ *            <sq> in a packed MPI message for MPI communicator
+ *            <comm>; return that number of bytes in <*ret_n>.
+ *
+ * Returns:   <eslOK> on success, and <*ret_n> contains the answer.
+ *
+ * Throws:    <eslESYS> if an MPI call fails, and <*ret_n> is 0.
+ */
+int
+esl_sq_MPIPackSize(ESL_SQ *sq, MPI_Comm comm, int *ret_n)
+{
+  int   status;
+  int   n = 0;
+  int   x;       /* index for optional extra residue markups */
+  int   sz;
+
+  status = MPI_Pack_size        (                          1, MPI_INT,           comm, &sz); n += 5*sz; if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+  status = MPI_Pack_size        (                          1, MPI_UNSIGNED_LONG, comm, &sz); n += 7*sz; if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+  status = MPI_Pack_size        (                 sq->nalloc, MPI_CHAR,          comm, &sz); n += sz;   if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+  status = MPI_Pack_size        (                 sq->aalloc, MPI_CHAR,          comm, &sz); n += sz;   if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+  status = MPI_Pack_size        (                 sq->dalloc, MPI_CHAR,          comm, &sz); n += sz;   if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+  status = MPI_Pack_size        (               sq->srcalloc, MPI_CHAR,          comm, &sz); n += sz;   if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+
+  /* sequence, digital or text; the ss and extra residue markups are optional */
+  if (sq->dsq != NULL) {
+    status = MPI_Pack_size      (                    sq->n+2, MPI_UNSIGNED_CHAR, comm, &sz); n += sz;   if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+    status = esl_mpi_PackOptSize(sq->ss,             sq->n+2, MPI_CHAR,          comm, &sz); n += sz;   if (status != eslOK) goto ERROR;
+    for (x = 0; x < sq->nxr; x ++) {
+      status = esl_mpi_PackOptSize(sq->xr_tag[x], sq->nalloc, MPI_CHAR,          comm, &sz); n += sz;   if (status != eslOK) goto ERROR;
+      status = esl_mpi_PackOptSize(sq->xr[x],        sq->n+2, MPI_CHAR,          comm, &sz); n += sz;   if (status != eslOK) goto ERROR;
+    }
+    
+  }
+  else { 
+    status = MPI_Pack_size      (                    sq->n+1, MPI_CHAR,          comm, &sz); n += sz;   if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+    status = esl_mpi_PackOptSize(sq->ss,             sq->n+1, MPI_CHAR,          comm, &sz); n += sz;   if (status != eslOK) goto ERROR;
+    for (x = 0; x < sq->nxr; x ++) {
+      status = esl_mpi_PackOptSize(sq->xr_tag[x], sq->nalloc, MPI_CHAR,          comm, &sz); n += sz;   if (status != eslOK) goto ERROR;
+      status = esl_mpi_PackOptSize(sq->xr[x],        sq->n+1, MPI_CHAR,          comm, &sz); n += sz;   if (status != eslOK) goto ERROR;
+      }
+    
+  }
+  
+  *ret_n = n;
+  return eslOK;
+
+ ERROR:
+  *ret_n = 0;
+  return status;
+}
+
+/* Function:  esl_sq_MPIPack()
+ * Synopsis:  Packs an <ESL_SQ> into MPI buffer.
+ * Incept:    ER, Thu Jun 19 10:49:10 EDT 2008 [Janelia]
+ *
+ * Purpose:   Packs <ESL_SQ> <esl_sq> into an MPI packed message buffer <buf>
+ *            of length <n> bytes, starting at byte position <*position>,
+ *            for MPI communicator <comm>.
+ *            
+ *            The caller must know that <buf>'s allocation of <n>
+ *            bytes is large enough to append the packed <ESL_SQ> at
+ *            position <*pos>. This typically requires a call to
+ *            <esl_sq_MPIPackSize()> first, and reallocation if
+ *            needed.
+ *            
+ * Returns:   <eslOK> on success; <buf> now contains the
+ *            packed <esl_sq>, and <*position> is set to the byte
+ *            immediately following the last byte of the <ESL_SQ>
+ *            in <buf>. 
+ *
+ * Throws:    <eslESYS> if an MPI call fails; or <eslEMEM> if the
+ *            buffer's length <n> was overflowed in trying to pack
+ *            <sq> into <buf>. In either case, the state of
+ *            <buf> and <*position> is undefined, and both should
+ *            be considered to be corrupted.
+ */
+int
+esl_sq_MPIPack(ESL_SQ *sq, char *buf, int n, int *pos, MPI_Comm comm)
+{
+  unsigned long int  sq_n;
+  unsigned long int  start;
+  unsigned long int  end;
+  unsigned long int  C;
+  unsigned long int  W;
+  unsigned long int  L;
+  unsigned long int  salloc;
+  int                x;       /* index for optional extra residue markups */
+  int                status;
+ 
+  sq_n   = (unsigned long int)sq->n;
+  start  = (unsigned long int)sq->start;
+  end    = (unsigned long int)sq->end;
+  C      = (unsigned long int)sq->C;
+  W      = (unsigned long int)sq->W;
+  L      = (unsigned long int)sq->L;
+  salloc = (unsigned long int)sq->salloc;
+ 
+  /* pack allocation values */
+  status = MPI_Pack         ((              int *) &(sq->nalloc),              1, MPI_INT,           buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         ((              int *) &(sq->aalloc),              1, MPI_INT,           buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         ((              int *) &(sq->dalloc),              1, MPI_INT,           buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         ((              int *) &(sq->srcalloc),            1, MPI_INT,           buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         ((              int *) &(sq->nxr),                 1, MPI_INT,           buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         ((unsigned long int *) &(    salloc),              1, MPI_UNSIGNED_LONG, buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+
+  /* pack coordenate info */
+  status = MPI_Pack         ((unsigned long int *) &(sq_n),                    1, MPI_UNSIGNED_LONG, buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         ((unsigned long int *) &(start),                   1, MPI_UNSIGNED_LONG, buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         ((unsigned long int *) &(end),                     1, MPI_UNSIGNED_LONG, buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         ((unsigned long int *) &(C),                       1, MPI_UNSIGNED_LONG, buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         ((unsigned long int *) &(W),                       1, MPI_UNSIGNED_LONG, buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         ((unsigned long int *) &(L),                       1, MPI_UNSIGNED_LONG, buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+
+  /* pack strings */
+  status = MPI_Pack         (sq->name,                                sq->nalloc, MPI_CHAR,          buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         (sq->acc,                                 sq->aalloc, MPI_CHAR,          buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         (sq->desc,                                sq->dalloc, MPI_CHAR,          buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack         (sq->source,                            sq->srcalloc, MPI_CHAR,          buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+
+  /* sequences, digital or text; the ss and extra residue markups are optional */
+  if (sq->dsq != NULL) {   
+    status = MPI_Pack       (sq->dsq,                                    sq->n+2, MPI_UNSIGNED_CHAR, buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+    status = esl_mpi_PackOpt(sq->ss,                                     sq->n+2, MPI_CHAR,          buf, n, pos,  comm); if (status != eslOK) return status;
+    for (x = 0; x < sq->nxr; x ++) {
+      status = esl_mpi_PackOpt(sq->xr_tag[x],                         sq->nalloc, MPI_CHAR,          buf, n, pos,  comm); if (status != eslOK) return status;
+      status = esl_mpi_PackOpt(sq->xr[x],                                sq->n+2, MPI_CHAR,          buf, n, pos,  comm); if (status != eslOK) return status;
+    }
+  }
+  else {
+    status = MPI_Pack       (sq->seq,                                    sq->n+1, MPI_CHAR,          buf, n, pos,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+    status = esl_mpi_PackOpt(sq->ss,                                     sq->n+1, MPI_CHAR,          buf, n, pos,  comm); if (status != eslOK) return status;
+    for (x = 0; x < sq->nxr; x ++) {
+      status = esl_mpi_PackOpt(sq->xr_tag[x],                         sq->nalloc, MPI_CHAR,          buf, n, pos,  comm); if (status != eslOK) return status;
+      status = esl_mpi_PackOpt(sq->xr[x],                                sq->n+1, MPI_CHAR,          buf, n, pos,  comm); if (status != eslOK) return status;
+    }
+  }
+  
+  if (*pos > n) ESL_EXCEPTION(eslEMEM, "buffer overflow");
+  return eslOK;
+}
+
+/* Function:  esl_sq_MPIUnpack()
+ * Synopsis:  Unpacks an <ESL_SQ> from an MPI buffer.
+ * Incept:    SRE, Thu Jun  7 11:04:46 2007 [Janelia]
+ *
+ * Purpose:   Unpack a newly allocated <ESL_SQ> from MPI packed buffer
+ *            <buf>, starting from position <*pos>, where the total length
+ *            of the buffer in bytes is <n>. 
+ *            
+ *            Caller may or may not already know what alphabet the <ESL_SQ>
+ *            is expected to be in.  
+ *
+ * Returns:   <eslOK> on success. <*pos> is updated to the position of
+ *            the next element in <buf> to unpack (if any). <*ret_hmm>
+ *            contains a newly allocated <ESL_SQ>, which the caller is
+ *            responsible for free'ing. 
+ *
+ *            
+ * Throws:    <eslESYS> on an MPI call failure. <eslEMEM> on allocation failure.
+ *            In either case, <*ret_esl_sq> is <NULL>, and the state of <buf>
+ *            and <*pos> is undefined and should be considered to be corrupted.
+ */
+int
+esl_sq_MPIUnpack(const ESL_ALPHABET *abc, char *buf, int n, int *pos, MPI_Comm comm, ESL_SQ **ret_sq)
+{
+  ESL_SQ            *sq  = NULL;
+  unsigned long int  sq_n;
+  unsigned long int  start;
+  unsigned long int  end;
+  unsigned long int  C;
+  unsigned long int  W;
+  unsigned long int  L;
+  unsigned long int  salloc;
+  int                x;       /* index for optional extra residue markups */
+  int                do_digital = FALSE;
+  int                status;
+
+  if (abc != NULL) do_digital = TRUE;
+  
+  /* allocate sq */
+  ESL_ALLOC(sq, sizeof(ESL_SQ));
+
+  /* unpack allocation values */
+  status = MPI_Unpack(buf, n, pos, &(sq->nalloc),   1, MPI_INT,            comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack(buf, n, pos, &(sq->aalloc),   1, MPI_INT,            comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack(buf, n, pos, &(sq->dalloc),   1, MPI_INT,            comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack(buf, n, pos, &(sq->srcalloc), 1, MPI_INT,            comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack(buf, n, pos, &(sq->nxr),      1, MPI_INT,            comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack(buf, n, pos, &(salloc),       1, MPI_UNSIGNED_LONG,  comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+
+  /* unpack coordenate info */
+  status = MPI_Unpack(buf, n, pos, &(sq_n),         1, MPI_UNSIGNED_LONG,  comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack(buf, n, pos, &(start),        1, MPI_UNSIGNED_LONG,  comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack(buf, n, pos, &(end),          1, MPI_UNSIGNED_LONG,  comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack(buf, n, pos, &(C),            1, MPI_UNSIGNED_LONG,  comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack(buf, n, pos, &(W),            1, MPI_UNSIGNED_LONG,  comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack(buf, n, pos, &(L),            1, MPI_UNSIGNED_LONG,  comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+
+  sq->salloc = (int64_t) salloc;
+  sq->n      = (int64_t) sq_n;
+  sq->start  = (int64_t) start;
+  sq->end    = (int64_t) end;
+  sq->C      = (int64_t) C;
+  sq->W      = (int64_t) W;
+  sq->L      = (int64_t) L;
+  
+  /* allocate strings */
+  sq->name   = NULL; ESL_ALLOC(sq->name,   sizeof(char) * sq->nalloc);
+  sq->acc    = NULL; ESL_ALLOC(sq->acc,    sizeof(char) * sq->aalloc);
+  sq->desc   = NULL; ESL_ALLOC(sq->desc,   sizeof(char) * sq->dalloc);
+  sq->source = NULL; ESL_ALLOC(sq->source, sizeof(char) * sq->srcalloc);
+  sq->seq    = NULL; if (!do_digital) ESL_ALLOC(sq->seq, sizeof(char)    * sq->salloc);
+  sq->dsq    = NULL; if ( do_digital) ESL_ALLOC(sq->dsq, sizeof(ESL_DSQ) * sq->salloc); 	
+  sq->ss     = NULL; /* ss and extra residue markups are optional - they will only be allocated if needed */
+  sq->xr_tag = NULL;
+  sq->xr     = NULL;
+
+  /* unpack strings */
+  status = MPI_Unpack       (buf, n, pos, sq->name,                   sq->nalloc, MPI_CHAR,           comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack       (buf, n, pos, sq->acc,                    sq->aalloc, MPI_CHAR,           comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack       (buf, n, pos, sq->desc,                   sq->dalloc, MPI_CHAR,           comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack       (buf, n, pos, sq->source,               sq->srcalloc, MPI_CHAR,           comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+ 
+ if (do_digital) {
+    status = MPI_Unpack     (buf, n, pos, sq->dsq,                       sq->n+2, MPI_UNSIGNED_CHAR,  comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+   }
+  else {
+    status = MPI_Unpack     (buf, n, pos, sq->seq,                       sq->n+1, MPI_CHAR,           comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  }
+
+  /* unpack the optional ss */
+  status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(sq->ss),              NULL, MPI_CHAR,           comm); if (status != eslOK) goto ERROR;
+  
+  /* unpack the optional extra residue markups */
+  if (sq->nxr > 0) { 
+    ESL_ALLOC(sq->xr,     sizeof(char *) * sq->nxr);
+    ESL_ALLOC(sq->xr_tag, sizeof(char *) * sq->nxr);
+    for (x = 0; x < sq->nxr; x ++) {
+      sq->xr[x]     = NULL;
+      sq->xr_tag[x] = NULL;
+       status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(sq->xr_tag[x]),  NULL, MPI_CHAR,           comm); if (status != eslOK) goto ERROR;
+       status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(sq->xr[x]),      NULL, MPI_CHAR,           comm); if (status != eslOK) goto ERROR;
+    }
+  }
+  
+  /* set disk offset bookkeeping */
+  sq->doff  = -1;
+  sq->roff  = -1;
+  sq->eoff  = -1;
+  
+  /* pointer to alphabet */
+  if (do_digital) sq->abc = abc;
+  
+  *ret_sq = sq;
+  return eslOK;
+  
+ ERROR:
+  if (sq  != NULL) esl_sq_Destroy(sq);
+  *ret_sq = NULL;
+  return status;
+}
+
+
+/* Function:  esl_sq_MPIRecv()
+ * Synopsis:  Receives an <ESL_SQ> as a work unit from an MPI sender.
+ * Incept:    ER, Thu Jun 19 10:53:40 EDT 2008 [Janelia]
+ *
+ * Purpose:   Receive a work unit that consists of a single <ESL_SQ>
+ *            sent by MPI <source> (<0..nproc-1>, or
+ *            <MPI_ANY_SOURCE>) tagged as <tag> for MPI communicator <comm>.
+ *            
+ *            Work units are prefixed by a status code. If the unit's
+ *            code is <eslOK> and no errors are encountered, this
+ *            routine will return <eslOK> and a non-<NULL> <*ret_esl_sq>.
+ *            If the unit's code is <eslEOD> (a shutdown signal), 
+ *            this routine returns <eslEOD> and <*ret_esl_sq> is <NULL>.
+ *   
+ *            Caller provides a working buffer <*buf> of size
+ *            <*nalloc> characters. These are passed by reference, so
+ *            that <*buf> can be reallocated and <*nalloc> increased
+ *            if necessary. As a special case, if <*buf> is <NULL> and
+ *            <*nalloc> is 0, the buffer will be allocated
+ *            appropriately, but the caller is still responsible for
+ *            free'ing it.
+ *
+ * Returns:   <eslOK> on success. <*ret_esl_sq> contains the received <ESL_SQ>;
+ *            it is allocated here, and the caller is responsible for
+ *            free'ing it.  <*buf> may have been reallocated to a
+ *            larger size, and <*nalloc> may have been increased. 
+ *            
+ * Throws:    <eslEMEM> on allocation error, in which case <*ret_esl_sq> is 
+ *            <NULL>.           
+ */
+int
+esl_sq_MPIRecv(int source, int tag, MPI_Comm comm, const ESL_ALPHABET *abc, char **buf, int *nalloc, ESL_SQ **ret_sq)
+{
+  int         status;
+  int         code;
+  int         n;
+  int         pos;
+  MPI_Status  mpistatus;
+
+  /* Probe first, because we need to know if our buffer is big enough. */
+  MPI_Probe(source, tag, comm, &mpistatus);
+  MPI_Get_count(&mpistatus, MPI_PACKED, &n);
+
+  /* Make sure the buffer is allocated appropriately */
+  if (*buf == NULL || n > *nalloc) {
+    void *tmp;
+    ESL_RALLOC(*buf, tmp, sizeof(char) * n);
+    *nalloc = n; 
+  }
+
+  /* Receive the packed work unit */
+  MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus);
+
+  /* Unpack it, looking at the status code prefix for EOD/EOK  */
+  pos = 0;
+  if (MPI_Unpack(*buf, n, &pos, &code, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  if (code == eslEOD)  { *ret_sq = NULL;  return eslEOD; }
+
+  return esl_sq_MPIUnpack(abc, *buf, *nalloc, &pos, comm, ret_sq);
+
+ ERROR:
+   return status;
+}
+/*----------------- end, ESL_SQ communication -------------------*/
+
+
+/*****************************************************************
+ *# 3. Communicating ESL_MSA (multiple sequence alignments).
+ *****************************************************************/
+
+/* Function:  esl_msa_MPISend()
+ * Synopsis:  Send essential msa info as an MPI work unit.
+ *
+ * Purpose:   Sends the essential elements of a multiple alignment <msa> 
+ *            as a work unit to MPI process <dest> (<dest> ranges from <0..nproc-1>),
+ *            tagging the message with MPI tag <tag> for MPI communicator
+ *            <comm>. The receiver uses <esl_msa_MPIRecv()> to receive the MSA.
+ *            
+ *            Work units are prefixed by a status code. If <msa> is
+ *            <non-NULL>, the work unit is an <eslOK> code followed by
+ *            the packed MSA. If <msa> is NULL, the work unit is an
+ *            <eslEOD> code, which <esl_msa_hmm_MPIRecv()> knows how
+ *            to interpret; this is typically used for an end-of-data
+ *            signal to cleanly shut down worker processes.
+ *
+ *            Only an essential subset of the elements in <msa> are
+ *            transmitted, sufficient to do computationally intensive
+ *            work on the <msa>. Most msa annotation is not
+ *            transmitted, for example. Specifically, <name>, <nseq>,
+ *            <alen>, <flags>, <wgt>, <ax> or <aseq>, <desc>, <acc>,
+ *            <au>, <ss_cons>, <sa_cons>, <rf>, <cutoff>, and <cutset>
+ *            are transmitted.
+ *            
+ *            In order to minimize alloc/free cycles, caller passes a
+ *            pointer to a working buffer <*buf> of size <*nalloc>
+ *            characters. If necessary (i.e. if <msa> is too big to
+ *            fit), <*buf> will be reallocated and <*nalloc> increased
+ *            to the new size. As a special case, if <*buf> is <NULL>
+ *            and <*nalloc> is 0, the buffer will be allocated
+ *            appropriately, but the caller is still responsible for
+ *            free'ing it.
+ *            
+ * Args:      msa    - msa to send
+ *            dest   - MPI destination (0..nproc-1)
+ *            tag    - MPI tag
+ *            buf    - pointer to a working buffer 
+ *            nalloc - current allocated size of <*buf>, in characters
+ *
+ * Returns:   <eslOK> on success; <*buf> may have been reallocated and
+ *            <*nalloc> may have been increased.
+ *
+ * Throws:    <eslESYS> if an MPI call fails; <eslEMEM> if a malloc/realloc
+ *            fails. In either case, <*buf> and <*nalloc> remain valid and useful
+ *            memory (though the contents of <*buf> are undefined). 
+ *
+ * Xref:      J1/72.
+ */
+int
+esl_msa_MPISend(const ESL_MSA *msa, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc)
+{
+  int   status;
+  int   code;
+  int   sz, n, position;
+
+  /* First, figure out the size of the MSA */
+  if (MPI_Pack_size(1, MPI_INT, comm, &n) != 0) ESL_EXCEPTION(eslESYS, "mpi pack size failed"); 
+  if (msa != NULL) { 
+    if ((status = esl_msa_MPIPackSize(msa,  comm, &sz)) != eslOK) return status;
+    n += sz;
+  }
+  ESL_DPRINTF2(("esl_msa_MPISend(): msa has size %d\n", n));
+
+  /* Make sure the buffer is allocated appropriately */
+  if (*buf == NULL || n > *nalloc) {
+    void *tmp;
+    ESL_RALLOC(*buf, tmp, sizeof(char) * n);
+    *nalloc = n; 
+  }
+  ESL_DPRINTF2(("esl_msa_MPISend(): buffer is ready\n"));
+
+  /* Pack the status code and MSA into the buffer */
+  position = 0;
+  code     = (msa == NULL) ? eslEOD : eslOK;
+  if (MPI_Pack(&code, 1, MPI_INT, *buf, n, &position, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi pack failed"); 
+  if (msa != NULL) {
+    if ((status = esl_msa_MPIPack(msa,  *buf, n, &position, comm)) != eslOK) return status;
+  }
+  ESL_DPRINTF2(("esl_msa_MPISend(): msa is packed into %d bytes\n", position));
+
+  /* Send the packed profile to destination  */
+  if (MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi send failed");
+  ESL_DPRINTF2(("esl_msa_MPISend(): msa is sent.\n"));
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+
+/* Function:  esl_msa_MPIPackSize()
+ * Synopsis:  Calculates number of bytes needed to pack an MSA.
+ * Incept:    SRE, Wed Jun  6 11:36:22 2007 [Janelia]
+ *
+ * Purpose:   Calculate an upper bound on the number of bytes
+ *            that <esl_msa_MPIPack()> will need to pack an 
+ *            essential subset of the data in MSA <msa>
+ *            in a packed MPI message in communicator <comm>;
+ *            return that number of bytes in <*ret_n>. 
+ *            
+ *            Caller will generally use this result to determine how
+ *            to allocate a buffer before starting to pack into it.
+ *            
+ *            If <msa> is <NULL> (which can happen, if <msa> is
+ *            optional in the caller), size <*ret_n> is set to 0.
+ *
+ * Returns:   <eslOK> on success, and <*ret_n> contains the answer.
+ *
+ * Throws:    <eslESYS> if an MPI call fails, and <*ret_n> is set to 0. 
+ *
+ * Xref:      J1/78-79.
+ * 
+ * Note:      The sizing calls here need to stay matched up with
+ *            the calls in <esl_msa_MPIPack()>.
+ */
+int
+esl_msa_MPIPackSize(const ESL_MSA *msa, MPI_Comm comm, int *ret_n)
+{
+  int status;
+  int sz;
+  int n = 0;
+  int i;
+
+  if (msa == NULL) { *ret_n = 0; return eslOK; }
+
+  status = MPI_Pack_size      (                        1, MPI_INT,           comm, &sz); n += 3*sz;   if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+  status = MPI_Pack_size      (                msa->nseq, MPI_DOUBLE,        comm, &sz); n += sz;     if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+  status = esl_mpi_PackOptSize(msa->name,             -1, MPI_CHAR,          comm, &sz); n += sz;     if (status != eslOK) goto ERROR;
+  status = esl_mpi_PackOptSize(msa->desc,             -1, MPI_CHAR,          comm, &sz); n += sz;     if (status != eslOK) goto ERROR;
+  status = esl_mpi_PackOptSize(msa->acc,              -1, MPI_CHAR,          comm, &sz); n += sz;     if (status != eslOK) goto ERROR;
+  status = esl_mpi_PackOptSize(msa->au,               -1, MPI_CHAR,          comm, &sz); n += sz;     if (status != eslOK) goto ERROR;
+  status = esl_mpi_PackOptSize(msa->ss_cons, msa->alen+1, MPI_CHAR,          comm, &sz); n += sz;     if (status != eslOK) goto ERROR;
+  status = esl_mpi_PackOptSize(msa->sa_cons, msa->alen+1, MPI_CHAR,          comm, &sz); n += sz;     if (status != eslOK) goto ERROR;
+  status = esl_mpi_PackOptSize(msa->pp_cons, msa->alen+1, MPI_CHAR,          comm, &sz); n += sz;     if (status != eslOK) goto ERROR;
+  status = esl_mpi_PackOptSize(msa->rf,      msa->alen+1, MPI_CHAR,          comm, &sz); n += sz;     if (status != eslOK) goto ERROR;
+  status = esl_mpi_PackOptSize(msa->mm,   msa->alen+1, MPI_CHAR,          comm, &sz); n += sz;     if (status != eslOK) goto ERROR;
+  status = MPI_Pack_size      (             eslMSA_NCUTS, MPI_FLOAT,         comm, &sz); n += sz;     if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+  status = MPI_Pack_size      (             eslMSA_NCUTS, MPI_INT,           comm, &sz); n += sz;     if (status != 0)     ESL_XEXCEPTION(eslESYS, "pack size failed");
+
+  /* alignment, digital or text: */
+  if (msa->ax != NULL) {
+    if ((status = MPI_Pack_size      (              msa->alen+2, MPI_UNSIGNED_CHAR, comm, &sz)) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed");
+    n += sz*msa->nseq;  
+  } else {
+    if ((status = MPI_Pack_size      (              msa->alen+1, MPI_CHAR,          comm, &sz)) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed");
+    n += sz*msa->nseq;  
+  }
+
+  /* seqnames: */
+  for (i = 0; i < msa->nseq; i++) {
+    if ((status = esl_mpi_PackOptSize(msa->sqname[i], -1, MPI_CHAR, comm, &sz)) != eslOK) goto ERROR;
+    n += sz;
+  }
+
+  *ret_n = n;
+  return eslOK;
+
+ ERROR:
+  *ret_n = 0;
+  return status;
+}
+
+/* Function:  esl_msa_MPIPack()
+ * Synopsis:  Packs an MSA into MPI buffer.
+ * Incept:    SRE, Wed Jun  6 13:17:45 2007 [Janelia]
+ *
+ * Purpose:   Packs essential subset of data in MSA <msa> into an MPI
+ *            packed message buffer <buf> of length <n> bytes,
+ *            starting at byte position <*position>, for MPI
+ *            communicator <comm>.
+ *            
+ *            If <msa> is <NULL> (which can happen, if <msa> is being
+ *            treated as optional in the caller), does nothing, and
+ *            just return <eslOK>.
+ *
+ * Returns:   <eslOK> on success; <buf> now contains the
+ *            packed <msa>, and <*position> is set to the byte
+ *            immediately following the last byte of the MSA
+ *            in <buf>. 
+ *
+ * Throws:    <eslESYS> if an MPI call fails; or <eslEMEM> if the
+ *            buffer's length <n> is overflowed by trying to pack
+ *            <msa> into <buf>. In either case, the state of
+ *            <buf> and <*position> is undefined, and both should
+ *            be considered to be corrupted.
+ *
+ * Xref:     J1/78-79. 
+ */
+int
+esl_msa_MPIPack(const ESL_MSA *msa, char *buf, int n, int *position, MPI_Comm comm)
+{
+  int status;
+  int i;
+
+  ESL_DPRINTF2(("esl_msa_MPIPack(): ready.\n"));
+
+  if (msa == NULL) return eslOK;
+
+  status = MPI_Pack       ((void *) &(msa->nseq),           1, MPI_INT,           buf, n, position,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack       ((void *) &(msa->alen),           1, MPI_INT,           buf, n, position,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack       ((void *) &(msa->flags),          1, MPI_INT,           buf, n, position,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack       (msa->wgt,                msa->nseq, MPI_DOUBLE,        buf, n, position,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = esl_mpi_PackOpt(msa->name,                      -1, MPI_CHAR,          buf, n, position,  comm); if (status != eslOK) return status;
+  status = esl_mpi_PackOpt(msa->desc,                      -1, MPI_CHAR,          buf, n, position,  comm); if (status != eslOK) return status;
+  status = esl_mpi_PackOpt(msa->acc,                       -1, MPI_CHAR,          buf, n, position,  comm); if (status != eslOK) return status;
+  status = esl_mpi_PackOpt(msa->au,                        -1, MPI_CHAR,          buf, n, position,  comm); if (status != eslOK) return status;
+  status = esl_mpi_PackOpt(msa->ss_cons,          msa->alen+1, MPI_CHAR,          buf, n, position,  comm); if (status != eslOK) return status;
+  status = esl_mpi_PackOpt(msa->sa_cons,          msa->alen+1, MPI_CHAR,          buf, n, position,  comm); if (status != eslOK) return status;
+  status = esl_mpi_PackOpt(msa->pp_cons,          msa->alen+1, MPI_CHAR,          buf, n, position,  comm); if (status != eslOK) return status;
+  status = esl_mpi_PackOpt(msa->rf,               msa->alen+1, MPI_CHAR,          buf, n, position,  comm); if (status != eslOK) return status;
+  status = esl_mpi_PackOpt(msa->mm,            msa->alen+1, MPI_CHAR,          buf, n, position,  comm); if (status != eslOK) return status;
+  status = MPI_Pack       ((void *) msa->cutoff, eslMSA_NCUTS, MPI_FLOAT,         buf, n, position,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+  status = MPI_Pack       ((void *) msa->cutset, eslMSA_NCUTS, MPI_INT,           buf, n, position,  comm); if (status != 0)     ESL_EXCEPTION(eslESYS, "pack failed");
+
+  for (i = 0; i < msa->nseq; i++) {
+    status = esl_mpi_PackOpt(msa->sqname[i],      -1, MPI_CHAR,          buf, n, position, comm);  if (status != eslOK) return status;
+    if (msa->flags & eslMSA_DIGITAL) {
+      if ((status = MPI_Pack      (msa->ax[i],    msa->alen+2, MPI_UNSIGNED_CHAR, buf, n, position, comm)) != 0) ESL_EXCEPTION(eslESYS, "pack failed");
+    } else {
+      if ((status = MPI_Pack      (msa->aseq[i],  msa->alen+1, MPI_CHAR,          buf, n, position, comm)) != 0) ESL_EXCEPTION(eslESYS, "pack failed");
+    }
+  }
+  ESL_DPRINTF2(("esl_msa_MPIPack(): done. Packed %d bytes into buffer of size %d\n", *position, n));
+
+  if (*position > n) ESL_EXCEPTION(eslEMEM, "buffer overflow");
+  return eslOK;
+}
+
+/* Function:  esl_msa_MPIUnpack()
+ * Synopsis:  Unpacks an MSA from an MPI buffer.
+ * Incept:    SRE, Wed Jun  6 15:49:11 2007 [Janelia]
+ *
+ * Purpose:   Unpack a newly allocated MSA from MPI packed buffer
+ *            <buf>, starting from position <*pos>, where the total length
+ *            of the buffer in bytes is <n>. 
+ *
+ *            MSAs are usually transmitted in digital mode. In digital
+ *            mode, caller must provide the alphabet <abc> for this
+ *            MSA. (Thus the caller already know it before the MSA
+ *            arrives, by an appropriate initialization.) If MSAs are
+ *            being transmitted in text mode, <abc> is ignored; caller
+ *            may pass <NULL> for it.
+ *
+ * Returns:   <eslOK> on success. <*pos> is updated to the position of
+ *            the next element in <buf> to unpack (if any). <*ret_msa>
+ *            contains a newly allocated MSA, which the caller is 
+ *            responsible for free'ing.
+ *            
+ * Throws:    <eslESYS> on an MPI call failure. <eslEMEM> on allocation failure.
+ *            In either case, <*ret_msa> is <NULL>, and the state of <buf>
+ *            and <*pos> is undefined and should be considered to be corrupted.
+ *
+ * Xref:      J1/78-79
+ */
+int
+esl_msa_MPIUnpack(const ESL_ALPHABET *abc, char *buf, int n, int *pos, MPI_Comm comm, ESL_MSA **ret_msa)
+{
+  int         status;
+  ESL_MSA    *msa     = NULL;
+  int         nseq, alen, flags;
+  int         i;
+
+  status = MPI_Unpack       (buf, n, pos, &nseq,                   1, MPI_INT,           comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack       (buf, n, pos, &alen,                   1, MPI_INT,           comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack       (buf, n, pos, &flags,                  1, MPI_INT,           comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+
+  if (flags & eslMSA_DIGITAL) {
+    if ((msa = esl_msa_CreateDigital(abc, nseq, alen)) == NULL) { status = eslEMEM; goto ERROR; }    
+  } else {
+    if ((msa = esl_msa_Create(nseq, alen)) == NULL) { status = eslEMEM; goto ERROR; }    
+  }
+  msa->flags = flags;
+
+  status = MPI_Unpack       (buf, n, pos, msa->wgt,                  nseq,  MPI_DOUBLE,  comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->name),    NULL,  MPI_CHAR,    comm); if (status != eslOK) goto ERROR;
+  status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->desc),    NULL,  MPI_CHAR,    comm); if (status != eslOK) goto ERROR;
+  status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->acc),     NULL,  MPI_CHAR,    comm); if (status != eslOK) goto ERROR;
+  status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->au),      NULL,  MPI_CHAR,    comm); if (status != eslOK) goto ERROR;
+  status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->ss_cons), NULL,  MPI_CHAR,    comm); if (status != eslOK) goto ERROR;
+  status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->sa_cons), NULL,  MPI_CHAR,    comm); if (status != eslOK) goto ERROR;
+  status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->pp_cons), NULL,  MPI_CHAR,    comm); if (status != eslOK) goto ERROR;
+  status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->rf)     , NULL,  MPI_CHAR,    comm); if (status != eslOK) goto ERROR;
+  status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->mm)  , NULL,  MPI_CHAR,    comm); if (status != eslOK) goto ERROR;
+  status = MPI_Unpack       (buf, n, pos,  msa->cutoff,      eslMSA_NCUTS,  MPI_FLOAT,   comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  status = MPI_Unpack       (buf, n, pos,  msa->cutset,      eslMSA_NCUTS,  MPI_INT,     comm); if (status != 0)     ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+
+  for (i = 0; i < msa->nseq; i++) {
+    status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->sqname[i]), NULL, MPI_CHAR,          comm); if (status != eslOK) goto ERROR;
+    if (msa->flags & eslMSA_DIGITAL) {
+      if ((status = MPI_Unpack       (buf, n, pos, msa->ax[i],   msa->alen+2, MPI_UNSIGNED_CHAR, comm)) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+    } else {
+      if ((status = MPI_Unpack       (buf, n, pos, msa->aseq[i], msa->alen+1, MPI_CHAR,          comm)) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+    }
+  }
+  *ret_msa = msa;
+  return eslOK;
+
+ ERROR:
+  if (msa != NULL) esl_msa_Destroy(msa);
+  *ret_msa = NULL;
+  return status;
+}
+
+
+
+/* Function:  esl_msa_MPIRecv()
+ * Synopsis:  Receive essential MSA info as a work unit from MPI sender.
+ * Incept:    SRE, Fri Jun  1 11:01:04 2007 [Janelia]
+ *
+ * Purpose:   Receives a work unit that consists of a single MSA from <source> (<0..nproc-1>, or
+ *            <MPI_ANY_SOURCE>) tagged as <tag> from communicator <comm>.
+ *            
+ *            Work units are prefixed by a status code. If the unit's
+ *            code is <eslOK> and no errors are encountered, this
+ *            routine will return <eslOK> and a non-<NULL> <*ret_msa>.
+ *            If the unit's code is <eslEOD> (a shutdown signal), 
+ *            this routine returns <eslEOD> and <*ret_msa> is <NULL>.
+ *            
+ *            MSAs are transmitted in digital mode. Caller must know and
+ *            provide the alphabet <abc> for this MSA.
+ *            
+ *            To minimize alloc/free cycles in this routine, caller
+ *            passes a pointer to a buffer <*buf> of size <*nalloc>
+ *            characters. These are passed by reference, because when
+ *            necessary, <*buf> will be reallocated and <*nalloc>
+ *            increased to the new size. As a special case, if <*buf>
+ *            is <NULL> and <*nalloc> is 0, the buffer will be
+ *            allocated appropriately, but the caller is still
+ *            responsible for free'ing it.
+ *
+ *            If the packed MSA is an end-of-data signal, return
+ *            <eslEOD>, and <*ret_msa> is <NULL>.
+ *            
+ * Returns:   <eslOK> on success. <*ret_msa> contains the new MSA; it
+ *            is allocated here, and the caller is responsible for
+ *            free'ing it.  <*buf> may have been reallocated to a
+ *            larger size, and <*nalloc> may have been increased.
+ *
+ *
+ * Throws:    <eslESYS> if an MPI call fails; <eslEMEM> if an allocation fails.
+ *            In either case, <*ret_msa> is NULL, and the <buf> and its size
+ *            <*nalloc> remain valid.
+ * Xref:      J1/72.
+ */
+int
+esl_msa_MPIRecv(int source, int tag, MPI_Comm comm, const ESL_ALPHABET *abc, char **buf, int *nalloc, ESL_MSA **ret_msa)
+{
+  int         status, code;
+  ESL_MSA    *msa     = NULL;
+  int         n;
+  int         pos;
+  MPI_Status  mpistatus;
+
+  /* Probe first, because we need to know if our buffer is big enough. */
+  if (MPI_Probe(source, tag, comm, &mpistatus)  != 0) ESL_XEXCEPTION(eslESYS, "mpi probe failed");
+  if (MPI_Get_count(&mpistatus, MPI_PACKED, &n) != 0) ESL_XEXCEPTION(eslESYS, "mpi get count failed");
+
+  /* Make sure the buffer is allocated appropriately */
+  if (*buf == NULL || n > *nalloc) {
+    void *tmp;
+    ESL_RALLOC(*buf, tmp, sizeof(char) * n);
+    *nalloc = n; 
+  }
+
+  /* Receive the packed work unit */
+  if (MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus) != 0) ESL_XEXCEPTION(eslESYS, "mpi recv failed");
+
+  /* Unpack it - where the first integer is a status code, OK or EOD */
+  pos = 0;
+  if (MPI_Unpack       (*buf, n, &pos, &code,                   1, MPI_INT,           comm) != 0)  ESL_XEXCEPTION(eslESYS, "mpi unpack failed");
+  if (code == eslEOD) { status = eslEOD; goto ERROR; }
+
+  return esl_msa_MPIUnpack(abc, *buf, *nalloc, &pos, comm, ret_msa);
+
+ ERROR:
+  if (msa != NULL) esl_msa_Destroy(msa);
+  *ret_msa = NULL;
+  return status;
+}
+/*-------------------------- end, ESL_MSA -----------------------*/
+
+
+/*****************************************************************
+ *# 4. Communicating ESL_STOPWATCH (process timing)
+ *****************************************************************/
+
+/* Function:  esl_stopwatch_MPIReduce()
+ * Synopsis:  Collect total parallel process time into master watch.
+ * Incept:    SRE, Thu Jun 14 13:27:20 2007 [Janelia]
+ *
+ * Purpose:   Collect all user/sys times from stopped stopwatch <w> from
+ *            all MPI processes, and sum them into the watch on the
+ *            master process of rank <root>, for MPI communicator
+ *            <comm>.  A subsequent <esl_stopwatch_Display()> will
+ *            then show total user/sys times, not just the master's
+ *            usage.
+ *            
+ *            This routine needs to be called synchronously on all
+ *            processes; it does a collective communication using
+ *            <MPI_Reduce()>.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslESYS> on MPI call failure.
+ */
+int
+esl_stopwatch_MPIReduce(ESL_STOPWATCH *w, int root, MPI_Comm comm)
+{
+  double user_total;
+  double sys_total;
+  
+  if (MPI_Reduce(&(w->user), &user_total, 1, MPI_DOUBLE, MPI_SUM, root, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi reduce failed");
+  if (MPI_Reduce(&(w->sys),  &sys_total,  1, MPI_DOUBLE, MPI_SUM, root, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi reduce failed");
+
+  w->user = user_total;
+  w->sys  = sys_total;
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 5. Unit tests.
+ *****************************************************************/
+#ifdef eslMPI_TESTDRIVE
+
+/* Each MPI unit test for communications routines follows a similar 
+ * pattern:
+ *   - workers and master generate identical objects, possibly using
+ *     the same RNG
+ *   - each worker sends object to master
+ *   - master receives object, compares it to known object, and fails
+ *     if they aren't the same.
+ *     
+ * This way, master is doing the failing and error output.
+ */
+static void
+utest_MSASendRecv(ESL_ALPHABET *abc, ESL_MSA *msa, int my_rank, int nproc)
+{
+  ESL_MSA      *xmsa = NULL;
+  char         *wbuf = NULL;
+  int           wn   = 0;
+  int           i;
+
+  if (my_rank == 0) 
+    {
+      for (i = 1; i < nproc; i++)
+	{
+	  ESL_DPRINTF1(("Master: receiving test msa\n"));
+	  esl_msa_MPIRecv(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, abc, &wbuf, &wn, &xmsa);
+	  ESL_DPRINTF1(("Master: test msa received\n"));
+
+	  if ((esl_msa_CompareMandatory(msa, xmsa)       != eslOK) ||
+	      (esl_CCompare(msa->name,    xmsa->name)    != eslOK) ||
+	      (esl_CCompare(msa->desc,    xmsa->desc)    != eslOK) ||
+	      (esl_CCompare(msa->acc,     xmsa->acc)     != eslOK) ||
+	      (esl_CCompare(msa->au,      xmsa->au)      != eslOK) ||
+	      (esl_CCompare(msa->ss_cons, xmsa->ss_cons) != eslOK) ||
+	      (esl_CCompare(msa->sa_cons, xmsa->sa_cons) != eslOK) ||
+	      (esl_CCompare(msa->pp_cons, xmsa->pp_cons) != eslOK) ||
+	      (esl_CCompare(msa->rf,      xmsa->rf)      != eslOK) ||
+	      (esl_CCompare(msa->mm,   xmsa->mm)   != eslOK))
+	    esl_fatal("Received MSA is not identical to what was sent.");
+
+	  esl_msa_Destroy(xmsa);
+	}
+    }
+  else 
+    {
+      ESL_DPRINTF1(("Worker %d: sending test msa\n", my_rank));
+      esl_msa_MPISend(msa, 0, 0, MPI_COMM_WORLD, &wbuf, &wn);
+      ESL_DPRINTF1(("Worker %d: test msa sent\n", my_rank));
+    }
+
+  free(wbuf);
+  return;
+}
+
+static void
+utest_MSAPackUnpack(ESL_ALPHABET *abc, ESL_MSA *msa, int my_rank, int nproc)
+{
+  ESL_MSA      *xmsa = NULL;
+  char         *wbuf = NULL;
+  int           wn   = 0;
+  int           pin, pout;
+
+  if (my_rank != 0) return;	/* only execute this utest on the master. */
+
+  esl_msa_MPIPackSize(msa, MPI_COMM_WORLD, &wn);
+  wbuf = malloc(sizeof(char) * wn);
+
+  pin  = 0;
+  esl_msa_MPIPack(msa, wbuf, wn,  &pin, MPI_COMM_WORLD);
+
+  pout = 0;
+  esl_msa_MPIUnpack(abc, wbuf, wn, &pout, MPI_COMM_WORLD, &xmsa);
+
+  if (pin != pout) esl_fatal("unit test failed: packed and unpacked sizes differ");
+  if ((esl_msa_CompareMandatory(msa, xmsa)       != eslOK) ||
+      (esl_CCompare(msa->name,    xmsa->name)    != eslOK) ||
+      (esl_CCompare(msa->desc,    xmsa->desc)    != eslOK) ||
+      (esl_CCompare(msa->acc,     xmsa->acc)     != eslOK) ||
+      (esl_CCompare(msa->au,      xmsa->au)      != eslOK) ||
+      (esl_CCompare(msa->ss_cons, xmsa->ss_cons) != eslOK) ||
+      (esl_CCompare(msa->sa_cons, xmsa->sa_cons) != eslOK) ||
+      (esl_CCompare(msa->pp_cons, xmsa->pp_cons) != eslOK) ||
+      (esl_CCompare(msa->rf,      xmsa->rf)      != eslOK) ||
+      (esl_CCompare(msa->mm,   xmsa->mm)   != eslOK))
+    esl_fatal("Unpacked MSA is not identical to what was packed.");
+  
+  esl_msa_Destroy(xmsa);
+  free(wbuf);
+  return;
+}
+
+
+
+#endif /*eslMPI_TESTDRIVE*/
+/*----------------------- end, unit tests -----------------------*/
+
+
+/*****************************************************************
+ * 6. Test driver.
+ *****************************************************************/
+#ifdef eslMPI_TESTDRIVE
+/* mpicc -o mpi_utest -g -Wall -I. -L. -DeslMPI_TESTDRIVE esl_mpi.c -leasel -lm
+ * In an MPI environment:
+ *    mpirun C ./mpi_utest
+ */
+#include "esl_getopts.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage",              0 },
+  { "-m",        eslARG_INFILE, FALSE, NULL, NULL, NULL, NULL, NULL, "read test MSA from file <f>",                       0 },
+  { "-x",        eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL, NULL, "test digital mode MSA communication",               0 },
+  { "--stall",   eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging MPI under gdb",   0 },  
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for the Easel mpi module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go  = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_ALPHABET *abc = NULL;
+  ESL_MSAFILE  *afp = NULL;
+  ESL_MSA      *msa = NULL;
+  int           do_stall = FALSE;
+  int           my_rank;
+  int           nproc;
+
+  /* For debugging: stall until GDB can be attached */
+  if (esl_opt_GetBoolean(go, "--stall")) do_stall = TRUE;
+  while (do_stall);
+
+  /* Get a test MSA and alphabet. */
+  if (esl_opt_GetString(go, "-m") != NULL) 
+    {
+      if (esl_msafile_Open(&abc, esl_opt_GetString(go, "-m"), eslMSAFILE_UNKNOWN, NULL, &afp) != eslOK) esl_fatal("msa file open failed");
+      if (esl_msafile_Read(afp, &msa)                                                         != eslOK) esl_fatal("msa read failed");
+      esl_msafile_Close(afp);
+    }
+  else
+    {
+      abc = esl_alphabet_Create(eslAMINO);
+      if ( (esl_msafile_OpenMem(&abc, 
+				 "# STOCKHOLM 1.0\n\nNIFE_CLOPA GYVGS\nNIFD_AZOVI GFDGF\nNIFD_BRAJA GYDGF\nNIFK_ANASP GYQGG\n//\n",
+				 -1, eslMSAFILE_STOCKHOLM, NULL, &afp)) != eslOK)
+	esl_fatal("msa creation failed");
+      if (esl_msafile_Read(afp, &msa) != eslOK) esl_fatal("msa read failed");
+      esl_msafile_Close(afp);
+    }
+
+
+  MPI_Init(&argc, &argv);
+  MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
+  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+  utest_MSAPackUnpack(abc, msa, my_rank, nproc);
+  utest_MSASendRecv  (abc, msa, my_rank, nproc);
+
+  MPI_Finalize();
+
+  esl_alphabet_Destroy(abc);
+  esl_msa_Destroy(msa);
+  return eslOK;
+}
+
+#endif /*eslMPI_TESTDRIVE*/
+/*---------------------- end, test driver -----------------------*/
+
+
+
+
+/*****************************************************************
+ * 7. Example.
+ *****************************************************************/
+
+
+
+
+
+/*------------------------ end, example -------------------------*/
+
+
+
+
+
+#else /*!(HAVE_MPI && eslLIBRARY)*/
+
+/* If we don't have MPI compiled in, provide some nothingness to:
+ *   a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" 
+ *   b. prevent compiler from bitching about "empty compilation unit"
+ *   c. automatically pass the automated tests.
+ */
+#include "easel.h"
+
+void esl_mpi_DoAbsolutelyNothing(void) { return; }
+#if defined eslMPI_TESTDRIVE || eslMPI_EXAMPLE || eslMPI_BENCHMARK
+int main(void) { return 0; }
+#endif
+
+#endif /*HAVE_MPI && eslLIBRARY*/
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_mpi.h b/esl_mpi.h
new file mode 100644
index 0000000..5bef281
--- /dev/null
+++ b/esl_mpi.h
@@ -0,0 +1,74 @@
+/* Support for MPI parallelization.
+ * 
+ */
+#if defined(HAVE_MPI) && defined(eslLIBRARY)
+#ifndef eslMPI_INCLUDED
+#define eslMPI_INCLUDED
+#include <mpi.h>
+
+#include "esl_alphabet.h"
+#include "esl_msa.h"
+#include "esl_sq.h"
+#include "esl_stopwatch.h"
+
+/* Many MPI implementations are not MPI2.2 compliant, and do not
+ * support new MPI2.2 datatypes; work around that absence. [J10/152]
+ * This configuration is better here than esl_config.h.in, because
+ * we need to #include <mpi.h> first to see if the system MPI does
+ * the right thing, and esl_config.h.in is intended to be included
+ * BEFORE any system includes.
+ */
+#if MPI_VERSION < 2 || MPI_SUBVERSION < 2
+#ifndef MPI_INT64_T
+#define MPI_INT64_T  MPI_LONG_LONG_INT
+#endif
+#ifndef MPI_UINT64_T
+#define MPI_UINT64_T MPI_UNSIGNED_LONG_LONG
+#endif
+#ifndef MPI_UINT32_T
+#define MPI_UINT32_T MPI_UNSIGNED
+#endif
+#ifndef MPI_INT16_T
+#define MPI_INT16_T  MPI_SHORT
+#endif
+#ifndef MPI_UINT8_T
+#define MPI_UINT8_T  MPI_UNSIGNED_CHAR
+#endif
+#endif /*MPI_VERSION,MPI_SUBVERSION*/
+
+/* 1. Communicating optional arrays */
+extern int esl_mpi_PackOpt(void *inbuf, int incount, MPI_Datatype type, void *pack_buf, 
+			   int pack_buf_size, int *position, MPI_Comm comm);
+extern int esl_mpi_PackOptSize(void *inbuf, int incount, MPI_Datatype type, MPI_Comm comm, int *ret_n);
+extern int esl_mpi_UnpackOpt(void *pack_buf, int pack_buf_size, int *pos, void **outbuf, 
+			     int *opt_n, MPI_Datatype type, MPI_Comm comm);
+
+/* 2. Communicating ESL_SQ (single sequences) */
+extern int esl_sq_MPISend(ESL_SQ *sq, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc);
+extern int esl_sq_MPIPackSize(ESL_SQ *sq, MPI_Comm comm, int *ret_n);
+extern int esl_sq_MPIPack(ESL_SQ *sq, char *buf, int n, int *pos, MPI_Comm comm);
+extern int esl_sq_MPIUnpack(const ESL_ALPHABET *abc, char *buf, int n, int *pos, MPI_Comm comm, ESL_SQ **ret_sq);
+extern int esl_sq_MPIRecv(int source, int tag, MPI_Comm comm, const ESL_ALPHABET *abc, 
+			  char **buf, int *nalloc, ESL_SQ **ret_sq);
+
+/* 3. Communicating ESL_MSA (multiple sequence alignments) */
+extern int esl_msa_MPISend(const ESL_MSA *msa, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc);
+extern int esl_msa_MPIPackSize(const ESL_MSA *msa, MPI_Comm comm, int *ret_n);
+extern int esl_msa_MPIPack(const ESL_MSA *msa, char *buf, int n, int *position, MPI_Comm comm);
+extern int esl_msa_MPIUnpack(const ESL_ALPHABET *abc, char *buf, int n, int *pos, MPI_Comm comm, ESL_MSA **ret_msa);
+extern int esl_msa_MPIRecv(int source, int tag, MPI_Comm comm, const ESL_ALPHABET *abc, char **buf, int *nalloc, ESL_MSA **ret_msa);
+
+/* 4. Communicating ESL_STOPWATCH (process timing) */
+extern int esl_stopwatch_MPIReduce(ESL_STOPWATCH *w, int root, MPI_Comm comm);
+
+
+#endif /*eslMPI_INCLUDED*/
+#endif /*HAVE_MPI && eslLIBRARY*/
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SRE, Sat Jun  2 09:07:25 2007 [Janelia]
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_mpi.tex b/esl_mpi.tex
new file mode 100644
index 0000000..8378229
--- /dev/null
+++ b/esl_mpi.tex
@@ -0,0 +1,24 @@
+The \eslmod{mpi} module contains a small number of utilities useful
+for using an MPI (Message Passing Interface) library for
+parallelization. Table~\ref{tbl:mpi_api} lists the routines in the
+\eslmod{mpi} API.
+
+
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\hyperlink{func:esl_mpi_PackOpt()}{\ccode{esl\_mpi\_PackOpt()}} & Pack an optional, variable-sized array (or string).\\
+\hyperlink{func:esl_mpi_PackOptSize()}{\ccode{esl\_mpi\_PackOptSize()}}& Determine the size of a packed optional, variable-sized array.\\
+\hyperlink{func:esl_mpi_UnpackOpt()}{\ccode{esl\_mpi\_UnpackOpt()}} & Unpack an optional, variable-sized array (or string).\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{mpi} API.}
+\label{tbl:mpi_api}
+\end{table}
+
+
+
+
diff --git a/esl_msa.c b/esl_msa.c
new file mode 100644
index 0000000..7d4de11
--- /dev/null
+++ b/esl_msa.c
@@ -0,0 +1,3740 @@
+/* Multiple sequence alignment file i/o.
+ *    
+ * Contents:   
+ *    1. The <ESL_MSA> object
+ *    2. Digital mode MSA's         (augmentation: alphabet)
+ *    3. Setting, checking data fields in an <ESL_MSA>
+ *    4. Miscellaneous functions for manipulating MSAs
+ *    5. Debugging, testing, development
+ *    6. Unit tests
+ *    7. Test driver
+ *    8. Copyright and license information
+ *   
+ * Augmentations:
+ *   alphabet:  adds support for digital MSAs
+ *   keyhash:   speeds up Stockholm file input
+ *   ssi:       enables indexed random access in a file of many MSAs
+ */
+
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <limits.h>
+#ifdef HAVE_STRINGS_H
+#include <strings.h>		/* POSIX strcasecmp() */
+#endif
+
+#include "easel.h"
+#include "esl_mem.h"
+#ifdef eslAUGMENT_KEYHASH
+#include "esl_keyhash.h"
+#endif
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#ifdef eslAUGMENT_SSI
+#include "esl_ssi.h"
+#endif
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_vectorops.h"
+#include "esl_wuss.h"
+
+
+
+/******************************************************************************
+ *# 1. The <ESL_MSA> object                                           
+ *****************************************************************************/
+
+static ESL_MSA *msa_create_mostly(int nseq, int64_t alen);
+
+
+/* Function:  esl_msa_Create()
+ * Synopsis:  Creates an <ESL_MSA> object.
+ *
+ * Purpose:   Creates and initializes an <ESL_MSA> object, and returns a
+ *            pointer to it. 
+ *  
+ *            If caller already knows the dimensions of the alignment,
+ *            both <nseq> and <alen>, then <msa = esl_msa_Create(nseq,
+ *            alen)> allocates the whole thing at once. The MSA's
+ *            <nseq> and <alen> fields are set accordingly, and the
+ *            caller doesn't have to worry about setting them; it can
+ *            just fill in <aseq>.
+ *            
+ *            If caller doesn't know the dimensions of the alignment
+ *            (for example, when parsing an alignment file), then
+ *            <nseq> is taken to be an initial allocation size, and
+ *            <alen> must be -1. <alen=-1> is used as a flag for a
+ *            "growable" MSA. For example, the call <msa =
+ *            esl_msa_Create(16, -1)>.  allocates internally for an
+ *            initial block of 16 sequences, but without allocating
+ *            any space for individual sequences.  This allocation can
+ *            be expanded (by doubling) by calling <esl_msa_Expand()>.
+ *            A created <msa> can only be <_Expand()>'ed if <alen> is
+ *            -1.
+ *            
+ *            In a growable alignment, caller becomes responsible for
+ *            memory allocation of each individual <aseq[i]>. Caller
+ *            is also responsible for setting <nseq> and <alen> when
+ *            it is done parsing and creating the new MSA. In
+ *            particular, the <esl_msa_Destroy()> function relies on
+ *            <nseq> to know how many individual sequences are
+ *            allocated.
+ *
+ * Args:      <nseq> - number of sequences, or nseq allocation blocksize
+ *            <alen> - length of alignment in columns, or -1      
+ *
+ * Returns:   pointer to new MSA object, w/ all values initialized.
+ *           
+ * Throws:    <NULL> on allocation failure.          
+ */
+ESL_MSA *
+esl_msa_Create(int nseq, int64_t alen)
+{
+  int      status;
+  ESL_MSA *msa;
+  int      i;
+
+  ESL_DASSERT1(( nseq > 0 ));
+  ESL_DASSERT1(( alen >= -1));
+
+  msa = msa_create_mostly(nseq, alen); /* aseq is null upon successful return */
+  if (msa == NULL) return NULL; /* already threw error in msa_create_mostly, so percolate */
+
+  ESL_ALLOC(msa->aseq,   sizeof(char *) * msa->sqalloc);
+  for (i = 0; i < msa->sqalloc; i++)
+    msa->aseq[i] = NULL;
+  
+  if (alen != -1) {
+    for (i = 0; i < nseq; i++)
+      {
+	ESL_ALLOC(msa->aseq[i], sizeof(char) * (alen+1));
+	msa->aseq[i][alen] = '\0'; /* caller might forget to null terminate; help the poor */
+      }
+    msa->nseq = nseq;
+  }
+  return msa;
+
+ ERROR:
+  esl_msa_Destroy(msa);
+  return NULL;
+}
+
+
+/* Function:  esl_msa_Expand()
+ * Synopsis:  Reallocate for more sequences.
+ *
+ * Purpose:   Double the current sequence allocation in <msa>.
+ *            Typically used when we're reading an alignment sequentially 
+ *            from a file, so we don't know nseq 'til we're done.
+ *            
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEMEM> on reallocation failure; <msa> is undamaged,
+ *            and the caller may attempt to recover from the error.
+ *            
+ *            Throws <eslEINVAL> if <msa> is not growable: its <alen>
+ *            field must be -1 to be growable.
+ *
+ * Xref:      squid's MSAExpand(), 1999.
+ */
+int
+esl_msa_Expand(ESL_MSA *msa)
+{
+  int   status;
+  int   old, new;		/* old & new allocation sizes (max # seqs) */
+  int   i,j;
+
+  if (msa->alen != -1) 
+    ESL_EXCEPTION(eslEINVAL, "that MSA is not growable");
+
+  old = msa->sqalloc;
+  new = 2*old;
+
+  /* Normally either aseq (ascii) or ax (digitized) would be active, not both.
+   * We could make sure that that's true, but that's checked elsewhere.           
+   */
+  if (msa->aseq) ESL_REALLOC(msa->aseq, sizeof(char *)    * new);
+#ifdef eslAUGMENT_ALPHABET
+  if (msa->ax)   ESL_REALLOC(msa->ax,   sizeof(ESL_DSQ *) * new);
+#endif /*eslAUGMENT_ALPHABET*/
+
+  ESL_REALLOC(msa->sqname, sizeof(char *) * new);
+  ESL_REALLOC(msa->wgt,    sizeof(double) * new);
+  ESL_REALLOC(msa->sqlen,  sizeof(int64_t)* new);
+
+  if (msa->ss)
+    {
+      ESL_REALLOC(msa->ss,    sizeof(char *)  * new);
+      ESL_REALLOC(msa->sslen, sizeof(int64_t) * new);
+    }
+  
+  if (msa->sa)
+    {
+      ESL_REALLOC(msa->sa,    sizeof(char *)  * new);
+      ESL_REALLOC(msa->salen, sizeof(int64_t) * new);
+    }
+
+  if (msa->pp)
+    {
+      ESL_REALLOC(msa->pp,    sizeof(char *)  * new);
+      ESL_REALLOC(msa->pplen, sizeof(int64_t) * new);
+    }
+
+  if (msa->sqacc)   ESL_REALLOC(msa->sqacc,  sizeof(char *) * new);
+  if (msa->sqdesc)  ESL_REALLOC(msa->sqdesc, sizeof(char *) * new);
+
+  for (i = old; i < new; i++)
+    {
+      if (msa->aseq) msa->aseq[i] = NULL;
+#ifdef eslAUGMENT_ALPHABET
+      if (msa->ax)   msa->ax[i]   = NULL;
+#endif /*eslAUGMENT_ALPHABET*/
+      msa->sqname[i] = NULL;
+      msa->wgt[i]    = -1.0;	/* -1.0 means "unset so far" */
+      msa->sqlen[i]  = 0;
+
+      if (msa->ss) { msa->ss[i] = NULL; msa->sslen[i] = 0; }
+      if (msa->sa) { msa->sa[i] = NULL; msa->salen[i] = 0; }
+      if (msa->pp) { msa->pp[i] = NULL; msa->pplen[i] = 0; }
+
+      if (msa->sqacc)  msa->sqacc[i]  = NULL;
+      if (msa->sqdesc) msa->sqdesc[i] = NULL;
+    }
+
+  /* Reallocate and re-init for unparsed #=GS tags, if we have some.
+   * gs is [0..ngs-1][0..nseq-1][], so we're reallocing the middle
+   * set of pointers.
+   */
+  if (msa->gs)
+    for (i = 0; i < msa->ngs; i++)
+      {
+	if (msa->gs[i])
+	  {
+	    ESL_REALLOC(msa->gs[i], sizeof(char *) * new);
+	    for (j = old; j < new; j++)
+	      msa->gs[i][j] = NULL;
+	  }
+      }
+  /* Reallocate and re-init for unparsed #=GR tags, if we have some.
+   * gr is [0..ngs-1][0..nseq-1][], so we're reallocing the middle
+   * set of pointers.
+   */
+  if (msa->gr)
+    for (i = 0; i < msa->ngr; i++)
+      {
+	if (msa->gr[i])
+	  {
+	    ESL_REALLOC(msa->gr[i], sizeof(char *) * new);
+	    for (j = old; j < new; j++)
+	      msa->gr[i][j] = NULL;
+	  }
+      }
+
+  msa->sqalloc = new;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_msa_Copy()
+ * Synopsis:  Copies an MSA.
+ *
+ * Purpose:   Makes a copy of <msa> in <new>. Caller has
+ *            already allocated <new> to hold an MSA of
+ *            at least <msa->nseq> sequences and <msa->alen>
+ *            columns.
+ *            
+ * Note:      Because MSA's are not reusable, this function does a
+ *            lot of internal allocation for optional fields, without
+ *            checking <new> to see if space was already allocated. To
+ *            reuse an MSA <new> and copy new data into it, we'll
+ *            eventually need a <esl_msa_Reuse()> function, and/or
+ *            recode this to reuse or free any already-allocated
+ *            optional memory it encounters in <new>. Until then, 
+ *            it's unlikely that <esl_msa_Copy()> is useful on its own;
+ *            the caller would be expected to call <esl_msa_Clone()> 
+ *            instead.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure. In this case, <new>
+ *            was only partially constructed, and should be treated
+ *            as corrupt.
+ */
+int
+esl_msa_Copy(const ESL_MSA *msa, ESL_MSA *new)
+{
+  int i, x, j;
+  int status;
+
+  /* aseq[0..nseq-1][0..alen-1] strings,
+   * or ax[0..nseq-1][(0) 1..alen (alen+1)] digital seqs 
+   * <new> must have one of them allocated already.
+   */
+  if (! (msa->flags & eslMSA_DIGITAL))
+    for (i = 0; i < msa->nseq; i++)
+      strcpy(new->aseq[i], msa->aseq[i]);
+#ifdef eslAUGMENT_ALPHABET
+  else
+    {
+      for (i = 0; i < msa->nseq; i++)
+	memcpy(new->ax[i], msa->ax[i], (msa->alen+2) * sizeof(ESL_DSQ));
+      new->abc = msa->abc;
+    }
+#endif
+  
+  for (i = 0; i < msa->nseq; i++) {
+    esl_strdup(msa->sqname[i], -1, &(new->sqname[i]));
+    new->wgt[i] = msa->wgt[i];
+  }
+  /* alen, nseq were already set by Create() */
+  new->flags = msa->flags;
+
+  esl_strdup(msa->name,    -1, &(new->name));
+  esl_strdup(msa->desc,    -1, &(new->desc));
+  esl_strdup(msa->acc,     -1, &(new->acc));
+  esl_strdup(msa->au,      -1, &(new->au));
+  esl_strdup(msa->ss_cons, -1, &(new->ss_cons));
+  esl_strdup(msa->sa_cons, -1, &(new->sa_cons));
+  esl_strdup(msa->pp_cons, -1, &(new->pp_cons));
+  esl_strdup(msa->rf,      -1, &(new->rf));
+  esl_strdup(msa->mm,      -1, &(new->mm));
+
+  if (msa->sqacc != NULL) {
+    ESL_ALLOC(new->sqacc, sizeof(char *) * new->sqalloc);
+    for (i = 0; i < msa->nseq;    i++) esl_strdup(msa->sqacc[i], -1, &(new->sqacc[i]));
+    for (     ; i < new->sqalloc; i++) new->sqacc[i] = NULL;
+  }
+  if (msa->sqdesc != NULL) {
+    ESL_ALLOC(new->sqdesc, sizeof(char *) * new->sqalloc);
+    for (i = 0; i < msa->nseq;    i++) esl_strdup(msa->sqdesc[i], -1, &(new->sqdesc[i]));
+    for (     ; i < new->sqalloc; i++) new->sqdesc[i] = NULL;
+  }
+  if (msa->ss != NULL) {
+    ESL_ALLOC(new->ss, sizeof(char *) * new->sqalloc);
+    for (i = 0; i < msa->nseq;    i++) esl_strdup(msa->ss[i], -1, &(new->ss[i]));
+    for (     ; i < new->sqalloc; i++) new->ss[i] = NULL;
+  }
+  if (msa->sa != NULL) {
+    ESL_ALLOC(new->sa, sizeof(char *) * msa->nseq);
+    for (i = 0; i < msa->nseq;    i++) esl_strdup(msa->sa[i], -1, &(new->sa[i]));
+    for (     ; i < new->sqalloc; i++) new->sa[i] = NULL;
+  }
+  if (msa->pp != NULL) {
+    ESL_ALLOC(new->pp, sizeof(char *) * msa->nseq);
+    for (i = 0; i < msa->nseq;    i++) esl_strdup(msa->pp[i], -1, &(new->pp[i]));
+    for (     ; i < new->sqalloc; i++) new->pp[i] = NULL;
+  }
+  
+  for (x = 0; x < eslMSA_NCUTS; x++) {
+    new->cutoff[x] = msa->cutoff[x];
+    new->cutset[x] = msa->cutset[x];
+  }
+
+  if (msa->ncomment > 0) {
+    ESL_ALLOC(new->comment, sizeof(char *) * msa->ncomment);
+    new->ncomment       = msa->ncomment;
+    new->alloc_ncomment = msa->ncomment;
+    for (i = 0; i < msa->ncomment; i++)
+      esl_strdup(msa->comment[i], -1, &(new->comment[i]));
+  }
+
+  if (msa->ngf > 0) {
+    ESL_ALLOC(new->gf_tag, sizeof(char *) * msa->ngf);
+    ESL_ALLOC(new->gf,     sizeof(char *) * msa->ngf);
+    new->ngf       = msa->ngf;
+    new->alloc_ngf = msa->ngf;
+    for (i = 0; i < msa->ngf; i++) {
+      esl_strdup(msa->gf_tag[i], -1, &(new->gf_tag[i]));
+      esl_strdup(msa->gf[i],     -1, &(new->gf[i]));
+    }
+  }
+
+  if (msa->ngs > 0) {
+    ESL_ALLOC(new->gs_tag, sizeof(char *)  * msa->ngs);
+    ESL_ALLOC(new->gs,     sizeof(char **) * msa->ngs);
+    new->ngs       = msa->ngs;
+    for (i = 0; i < msa->ngs; i++) {
+      ESL_ALLOC(new->gs[i], sizeof(char *) * msa->nseq);
+      esl_strdup(msa->gs_tag[i], -1, &(new->gs_tag[i]));
+      for (j = 0; j < msa->nseq; j++)
+	esl_strdup(msa->gs[i][j],  -1, &(new->gs[i][j]));
+    }
+  }
+
+  if (msa->ngc > 0) {
+    ESL_ALLOC(new->gc_tag, sizeof(char *) * msa->ngc);
+    ESL_ALLOC(new->gc,     sizeof(char *) * msa->ngc);
+    new->ngc       = msa->ngc;
+    for (i = 0; i < msa->ngc; i++) {
+      esl_strdup(msa->gc_tag[i], -1, &(new->gc_tag[i]));
+      esl_strdup(msa->gc[i],     -1, &(new->gc[i]));
+    }
+  }
+  
+  if (msa->ngr > 0) {
+    ESL_ALLOC(new->gr_tag, sizeof(char *)  * msa->ngr);
+    ESL_ALLOC(new->gr,     sizeof(char **) * msa->ngr);
+    new->ngr       = msa->ngr;
+    for (i = 0; i < msa->ngr; i++) {
+      ESL_ALLOC(new->gr[i], sizeof(char *) * msa->nseq);
+      esl_strdup(msa->gr_tag[i], -1, &(new->gr_tag[i]));
+      for (j = 0; j < msa->nseq; j++)
+	esl_strdup(msa->gr[i][j],  -1, &(new->gr[i][j]));
+    }
+  }
+
+#ifdef eslAUGMENT_KEYHASH
+  esl_keyhash_Destroy(new->index);  new->index  = NULL;
+  esl_keyhash_Destroy(new->gs_idx); new->gs_idx = NULL;
+  esl_keyhash_Destroy(new->gc_idx); new->gc_idx = NULL;
+  esl_keyhash_Destroy(new->gr_idx); new->gr_idx = NULL;
+
+  if (msa->index  != NULL) new->index  = esl_keyhash_Clone(msa->index);
+  if (msa->gs_idx != NULL) new->gs_idx = esl_keyhash_Clone(msa->gs_idx);
+  if (msa->gc_idx != NULL) new->gc_idx = esl_keyhash_Clone(msa->gc_idx);
+  if (msa->gr_idx != NULL) new->gr_idx = esl_keyhash_Clone(msa->gr_idx);
+#endif
+
+#ifdef eslAUGMENT_SSI
+  new->offset = msa->offset;
+#endif
+
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_msa_Clone()
+ * Synopsis:  Duplicates an MSA.
+ *
+ * Purpose:   Make a duplicate of <msa>, in newly 
+ *            allocated space. 
+ *
+ * Returns:   a pointer to the newly allocated clone.
+ *            Caller is responsible for free'ing it.
+ *
+ * Throws:    <NULL> on allocation error.
+ */
+ESL_MSA *
+esl_msa_Clone(const ESL_MSA *msa)
+{
+  ESL_MSA *nw = NULL;
+  int      status;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (msa->flags & eslMSA_DIGITAL) {
+      if ((nw = esl_msa_CreateDigital(msa->abc, msa->nseq, msa->alen)) == NULL)  return NULL;
+  } else
+#endif
+  if ((nw     = esl_msa_Create(msa->nseq, msa->alen)) == NULL)  return NULL;  
+
+  if ((status = esl_msa_Copy(msa, nw) )               != eslOK) goto ERROR;
+  return nw;
+
+ ERROR:
+  esl_msa_Destroy(nw);
+  return NULL;
+}
+
+
+/* Function:  esl_msa_Destroy()
+ * Synopsis:  Frees an <ESL_MSA>.
+ *
+ * Purpose:   Destroys <msa>.
+ *
+ * Xref:      squid's MSADestroy().
+ */
+void
+esl_msa_Destroy(ESL_MSA *msa)
+{
+  if (msa == NULL) return;
+
+  if (msa->aseq != NULL) 
+    esl_Free2D((void **) msa->aseq, msa->nseq);
+#ifdef eslAUGMENT_ALPHABET
+  if (msa->ax != NULL) 
+    esl_Free2D((void **) msa->ax, msa->nseq);
+#endif /*eslAUGMENT_ALPHABET*/
+
+  esl_Free2D((void **) msa->sqname, msa->nseq);
+  esl_Free2D((void **) msa->sqacc,  msa->nseq);
+  esl_Free2D((void **) msa->sqdesc, msa->nseq);
+  esl_Free2D((void **) msa->ss,     msa->nseq);
+  esl_Free2D((void **) msa->sa,     msa->nseq);
+  esl_Free2D((void **) msa->pp,     msa->nseq);
+
+  if (msa->sqlen   != NULL) free(msa->sqlen);
+  if (msa->wgt     != NULL) free(msa->wgt);
+
+  if (msa->name    != NULL) free(msa->name);
+  if (msa->desc    != NULL) free(msa->desc);
+  if (msa->acc     != NULL) free(msa->acc);
+  if (msa->au      != NULL) free(msa->au);
+  if (msa->ss_cons != NULL) free(msa->ss_cons);
+  if (msa->sa_cons != NULL) free(msa->sa_cons);
+  if (msa->pp_cons != NULL) free(msa->pp_cons);
+  if (msa->rf      != NULL) free(msa->rf);
+  if (msa->mm      != NULL) free(msa->mm);
+  if (msa->sslen   != NULL) free(msa->sslen);
+  if (msa->salen   != NULL) free(msa->salen);
+  if (msa->pplen   != NULL) free(msa->pplen);  
+
+  esl_Free2D((void **) msa->comment, msa->ncomment);
+  esl_Free2D((void **) msa->gf_tag,  msa->ngf);
+  esl_Free2D((void **) msa->gf,      msa->ngf);
+
+  esl_Free2D((void **) msa->gs_tag,  msa->ngs);
+  esl_Free3D((void ***)msa->gs,      msa->ngs, msa->nseq);
+  esl_Free2D((void **) msa->gc_tag,  msa->ngc);
+  esl_Free2D((void **) msa->gc,      msa->ngc);
+  esl_Free2D((void **) msa->gr_tag,  msa->ngr);
+  esl_Free3D((void ***)msa->gr,      msa->ngr, msa->nseq);
+
+#ifdef eslAUGMENT_KEYHASH
+  esl_keyhash_Destroy(msa->index);
+  esl_keyhash_Destroy(msa->gs_idx);
+  esl_keyhash_Destroy(msa->gc_idx);
+  esl_keyhash_Destroy(msa->gr_idx);
+#endif /* keyhash augmentation */  
+
+  free(msa);
+  return;
+}
+
+
+/* msa_create_mostly()
+ *
+ * This is the routine called by esl_msa_Create() and esl_msa_CreateDigital()
+ * that does all allocation except the aseq/ax alignment data.
+ * 
+ * <nseq> may be the exact known # of seqs in an alignment; or <nseq>
+ * may be an allocation block size (to be expanded by doubling, in
+ * esl_msa_Expand(), as in:
+ *     <if (msa->nseq == msa->sqalloc) esl_msa_Expand(msa);>
+ * <nseq> should not be 0.
+ *
+ * <alen> may be the exact length of an alignment, in columns; or it
+ * may be -1, which states that your parser will take responsibility
+ * for expanding as needed as new input is read into a growing new
+ * alignment.
+ *
+ * A created <msa> can only be <_Expand()>'ed if <alen> is -1.
+ *
+ * Args:     <nseq> - number of sequences, or nseq allocation blocksize
+ *           <alen> - length of alignment in columns, or -1     
+ *
+ * Returns:   pointer to new MSA object, w/ all values initialized.
+ *            Note that msa->nseq is initialized to 0 here, even though space
+ *            is allocated.
+ *           
+ * Throws:    <NULL> on allocation failure.          
+ */
+static ESL_MSA *
+msa_create_mostly(int nseq, int64_t alen)
+{
+  int      status;
+  ESL_MSA *msa     = NULL;
+  int      i;
+
+  ESL_ALLOC(msa, sizeof(ESL_MSA));
+  msa->aseq    = NULL;
+  msa->sqname  = NULL;
+  msa->wgt     = NULL;
+  msa->alen    = alen;		/* if -1, then we're growable. */
+  msa->nseq    = 0;		/* our caller (text or digital allocation) sets this.  */
+  msa->flags   = 0;
+
+#ifdef eslAUGMENT_ALPHABET
+  msa->abc     = NULL;
+  msa->ax      = NULL;
+#endif /*eslAUGMENT_ALPHABET*/
+
+  msa->name    = NULL;
+  msa->desc    = NULL;
+  msa->acc     = NULL;
+  msa->au      = NULL;
+  msa->ss_cons = NULL;
+  msa->sa_cons = NULL;
+  msa->pp_cons = NULL;
+  msa->rf      = NULL;
+  msa->mm      = NULL;
+  msa->sqacc   = NULL;
+  msa->sqdesc  = NULL;
+  msa->ss      = NULL;
+  msa->sa      = NULL;
+  msa->pp      = NULL;
+  for (i = 0; i < eslMSA_NCUTS; i++) {
+    msa->cutoff[i] = 0.;
+    msa->cutset[i] = FALSE;
+  }
+  msa->sqalloc = nseq;
+  msa->sqlen   = NULL;
+  msa->sslen   = NULL;
+  msa->salen   = NULL;
+  msa->pplen   = NULL;
+  msa->lastidx = 0;
+
+  /* Unparsed markup, including comments and Stockholm tags.
+   * GS, GC, and GR Stockholm tags require keyhash augmentation
+   */
+  msa->comment        = NULL;
+  msa->ncomment       = 0;
+  msa->alloc_ncomment = 0;
+
+  msa->gf_tag         = NULL;
+  msa->gf             = NULL;
+  msa->ngf            = 0;
+  msa->alloc_ngf      = 0;
+
+  msa->gs_tag         = NULL;
+  msa->gs             = NULL;
+  msa->ngs            = 0;
+
+  msa->gc_tag         = NULL;
+  msa->gc             = NULL;
+  msa->ngc            = 0;
+
+  msa->gr_tag         = NULL;
+  msa->gr             = NULL;
+  msa->ngr            = 0;
+
+#ifdef eslAUGMENT_KEYHASH
+  msa->index     = esl_keyhash_Create();
+  msa->gs_idx    = NULL;
+  msa->gc_idx    = NULL;
+  msa->gr_idx    = NULL;
+#endif /*eslAUGMENT_KEYHASH*/
+
+#ifdef eslAUGMENT_SSI
+  msa->offset    = 0;
+#endif
+
+  /* Allocation, round 2.
+   */
+  if(nseq > 0) { 
+    ESL_ALLOC(msa->sqname, sizeof(char *) * nseq);
+    ESL_ALLOC(msa->wgt,    sizeof(double) * nseq);
+    ESL_ALLOC(msa->sqlen,  sizeof(int64_t)* nseq);
+  }    
+  /* Initialize at the second level.
+   */
+  for (i = 0; i < nseq; i++)
+    {
+      msa->sqname[i] = NULL;
+      msa->sqlen[i]  = 0;
+      msa->wgt[i]    = -1.0;	/* "unset so far" */
+    }
+
+  return msa;
+
+ ERROR:
+  esl_msa_Destroy(msa);
+  return NULL;
+}
+/*------------------- end, ESL_MSA object -----------------------*/
+
+
+
+/*****************************************************************
+ *# 2. Digital mode MSA's (augmentation: alphabet)
+ *****************************************************************/
+#ifdef eslAUGMENT_ALPHABET
+
+/* Function:  esl_msa_GuessAlphabet()
+ * Synopsis:  Guess alphabet of MSA.
+ *
+ * Purpose:   Guess whether the sequences in the <msa> are
+ *            <eslDNA>, <eslRNA>, or <eslAMINO>, and return
+ *            that guess in <*ret_type>.
+ *            
+ *            The determination is made based on the classifications
+ *            of the individual sequences in the alignment. At least
+ *            one sequence must contain ten residues or more to be
+ *            classified. If one or more sequences is called
+ *            <eslAMINO> and one or more is called <eslDNA>/<eslRNA>,
+ *            the alignment's alphabet is considered to be
+ *            indeterminate (<eslUNKNOWN>). If some sequences are
+ *            <eslDNA> and some are <eslRNA>, the alignment is called
+ *            <eslDNA>; this should cause no problems, because Easel
+ *            reads U as a synonym for T in DNA sequence anyway.
+ *            
+ *            Tested on Pfam 21.0 and Rfam 7.0, this routine correctly
+ *            classified all 8957 Pfam alignments as protein, and 503
+ *            Rfam alignments as RNA (both seed and full alignments).
+ *
+ * Returns:   <eslOK> on success, and <*ret_type> is set
+ *            to <eslDNA>, <eslRNA>, or <eslAMINO>. 
+ *            
+ *            Returns <eslENOALPHABET> and sets <*ret_type> to
+ *            <eslUNKNOWN> if the alphabet cannot be reliably guessed.
+ *
+ * Xref:      J1/62
+ */
+int
+esl_msa_GuessAlphabet(const ESL_MSA *msa, int *ret_type)
+{
+  int64_t namino   = 0,
+          ndna     = 0,
+          nrna     = 0,
+          nunknown = 0;
+  int     type;
+  int     i,x;
+  int64_t j,n;
+  int64_t ct[26];
+
+  if (msa->flags & eslMSA_DIGITAL) { *ret_type = msa->abc->type; return eslOK; }
+
+  *ret_type = eslUNKNOWN;
+
+  /* On wide alignments, we're better off looking at individual sequence
+   * classifications. We don't want to end up calling the whole alignment
+   * indeterminate just because a few sequences have degenerate residue
+   * codes.
+   */
+  for (i = 0; i < msa->nseq; i++) 
+    {
+      for (x = 0; x < 26; x++) ct[x] = 0;
+      for (n = 0, j = 0; j < msa->alen; j++) {
+	x = toupper(msa->aseq[i][j]) - 'A';
+	if (x < 0 || x > 25) continue;
+	ct[x]++;
+	n++;
+	if (n > 10000) break;	/* ought to know by now */
+      }
+      esl_abc_GuessAlphabet(ct, &type);
+
+      switch (type) {
+      case eslAMINO:   namino++; break;
+      case eslDNA:     ndna++;   break;
+      case eslRNA:     nrna++;   break;
+      default:         nunknown++; 
+      }
+    }
+  if      (namino    > 0 && (ndna+nrna)   == 0) *ret_type = eslAMINO;
+  else if (ndna      > 0 && (nrna+namino) == 0) *ret_type = eslDNA;
+  else if (nrna      > 0 && (ndna+namino) == 0) *ret_type = eslRNA;
+  else if (ndna+nrna > 0 && namino        == 0) *ret_type = eslDNA;
+
+  /* On narrow alignments, no single sequence may be long enough to 
+   * be classified, but we can determine alphabet from composition
+   * of the complete alignment. Of course, degenerate residue codes in
+   * a DNA alignment will still screw us.
+   */
+  if (*ret_type == eslUNKNOWN)
+    {
+
+      n = 0;
+      for (x = 0; x < 26; x++) ct[x] = 0;
+      for (i = 0; i < msa->nseq; i++) {
+	for (j = 0; j < msa->alen; j++) {
+	  x = toupper(msa->aseq[i][j]) - 'A';
+	  if (x < 0 || x > 26) continue;
+	  ct[x]++;
+	  n++;
+	  if (n > 10000) break;	/* ought to know by now */
+	}
+	if (n > 10000) break;	
+      }
+      esl_abc_GuessAlphabet(ct, ret_type);
+    }
+
+  if (*ret_type == eslUNKNOWN) return eslENOALPHABET;
+  else                         return eslOK;
+}
+
+
+/* Function:  esl_msa_CreateDigital()
+ * Synopsis:  Create a digital <ESL_MSA>.
+ *
+ * Purpose:   Same as <esl_msa_Create()>, except the returned MSA is configured
+ *            for a digital alignment using internal alphabet <abc>, instead of 
+ *            a text alignment.
+ *   
+ *            Internally, this means the <ax> field is allocated instead of
+ *            the <aseq> field, and the <eslMSA_DIGITAL> flag is raised.
+ *
+ * Args:     <nseq> - number of sequences, or nseq allocation blocksize
+ *           <alen> - length of alignment in columns, or -1
+ *
+ * Returns:   pointer to new MSA object, w/ all values initialized.
+ *            Note that <msa->nseq> is initialized to 0, even though space
+ *            is allocated.
+ *           
+ * Throws:    NULL on allocation failure.          
+ *
+ * Xref:      squid's MSAAlloc()
+ */
+ESL_MSA *
+esl_msa_CreateDigital(const ESL_ALPHABET *abc, int nseq, int64_t alen)
+{
+  int      status;
+  ESL_MSA *msa;
+  int      i;
+
+  msa = msa_create_mostly(nseq, alen); /* aseq is null upon successful return */
+  if (msa == NULL) return NULL; /* already threw error in mostly_create, so percolate */
+
+  ESL_ALLOC(msa->ax,   sizeof(ESL_DSQ *) * msa->sqalloc); 
+  for (i = 0; i < msa->sqalloc; i++)
+    msa->ax[i] = NULL;
+
+  if (alen != -1)
+    {
+      for (i = 0; i < nseq; i++) {
+	ESL_ALLOC(msa->ax[i], sizeof(ESL_DSQ) * (alen+2));
+	msa->ax[i][0] = msa->ax[i][alen+1] = eslDSQ_SENTINEL; /* help the poor */
+      }
+      msa->nseq = nseq;
+    }
+
+  msa->abc    = (ESL_ALPHABET *) abc; /* this cast away from const-ness is deliberate & safe. */
+  msa->flags |= eslMSA_DIGITAL;
+  return msa;
+
+ ERROR:
+  esl_msa_Destroy(msa);
+  return NULL;
+}
+
+/* Function:  esl_msa_Digitize()
+ * Synopsis:  Digitizes an msa, converting it from text mode.
+ *
+ * Purpose:   Given an alignment <msa> in text mode, convert it to
+ *            digital mode, using alphabet <abc>.
+ *            
+ *            Internally, the <ax> digital alignment field is filled,
+ *            the <aseq> text alignment field is destroyed and free'd,
+ *            a copy of the alphabet pointer is kept in the msa's
+ *            <abc> reference, and the <eslMSA_DIGITAL> flag is raised
+ *            in <flags>.
+ *            
+ *            Because <esl_msa_Digitize()> may be called on
+ *            unvalidated user data, <errbuf> may be passed, for
+ *            capturing an informative error message. For example, in
+ *            reading alignments from files, invalid characters in the
+ *            alignment are caught at the digitization step.
+ *            
+ * Args:      abc    - digital alphabet
+ *            msa    - multiple alignment to digitize
+ *            errbuf - optional: error message buffer, or <NULL>
+ *
+ * Returns:   <eslOK> on success;
+ *            <eslEINVAL> if one or more sequences contain invalid characters
+ *            that can't be digitized. If this happens, the <msa> is returned
+ *            unaltered - left in text mode, with <aseq> as it was. (This is
+ *            a normal error, because <msa->aseq> may be user input that we 
+ *            haven't validated yet.)
+ *
+ * Throws:    <eslEMEM> on allocation failure; in this case, state of <msa> may be 
+ *            wedged, and it should only be destroyed, not used.
+ */
+int
+esl_msa_Digitize(const ESL_ALPHABET *abc, ESL_MSA *msa, char *errbuf)
+{
+  char errbuf2[eslERRBUFSIZE];
+  int  i;
+  int  status;
+
+  /* Contract checks */
+  if (msa->aseq == NULL)           ESL_EXCEPTION(eslEINVAL, "msa has no text alignment");
+  if (msa->ax   != NULL)           ESL_EXCEPTION(eslEINVAL, "msa already has digital alignment");
+  if (msa->flags & eslMSA_DIGITAL) ESL_EXCEPTION(eslEINVAL, "msa is flagged as digital");
+
+  /* Validate before we convert. Then we can leave the <aseq> untouched if
+   * any of the sequences contain invalid characters.
+   */
+  for (i = 0; i < msa->nseq; i++)
+    if (esl_abc_ValidateSeq(abc, msa->aseq[i], msa->alen, errbuf2) != eslOK) 
+      ESL_FAIL(eslEINVAL, errbuf, "%s: %s", msa->sqname[i], errbuf2);
+
+  /* Convert, sequence-by-sequence, free'ing aseq as we go.  */
+  ESL_ALLOC(msa->ax, msa->sqalloc * sizeof(ESL_DSQ *));
+  for (i = 0; i < msa->nseq; i++)
+    {
+      ESL_ALLOC(msa->ax[i], (msa->alen+2) * sizeof(ESL_DSQ));
+      status = esl_abc_Digitize(abc, msa->aseq[i], msa->ax[i]);
+      if (status != eslOK) goto ERROR;
+      free(msa->aseq[i]);
+    }    
+  for (; i < msa->sqalloc; i++) 
+    msa->ax[i] = NULL;
+  free(msa->aseq);
+  msa->aseq = NULL;
+
+  msa->abc   =  (ESL_ALPHABET *) abc; /* convince compiler that removing const-ness is safe */
+  msa->flags |= eslMSA_DIGITAL;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_msa_Textize()
+ * Synopsis:  Convert a digital msa to text mode.
+ *
+ * Purpose:   Given an alignment <msa> in digital mode, convert it
+ *            to text mode.
+ *            
+ *            Internally, the <aseq> text alignment field is filled, the
+ *            <ax> digital alignment field is destroyed and free'd, the
+ *            msa's <abc> digital alphabet reference is nullified, and 
+ *            the <eslMSA_DIGITAL> flag is dropped in <flags>.
+ *            
+ * Args:      msa   - multiple alignment to convert to text
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslECORRUPT> if one or more of the digitized alignment strings
+ *            contain invalid characters.
+ */
+int
+esl_msa_Textize(ESL_MSA *msa)
+{
+  int status;
+  int i;
+
+  /* Contract checks
+   */
+  if (msa->ax   == NULL)               ESL_EXCEPTION(eslEINVAL, "msa has no digital alignment");
+  if (msa->aseq != NULL)               ESL_EXCEPTION(eslEINVAL, "msa already has text alignment");
+  if (! (msa->flags & eslMSA_DIGITAL)) ESL_EXCEPTION(eslEINVAL, "msa is not flagged as digital");
+  if (msa->abc  == NULL)               ESL_EXCEPTION(eslEINVAL, "msa has no digital alphabet");
+
+  /* Convert, sequence-by-sequence, free'ing ax as we go.
+   */
+  ESL_ALLOC(msa->aseq, msa->sqalloc * sizeof(char *));
+  for (i = 0; i < msa->nseq; i++)
+    {
+      ESL_ALLOC(msa->aseq[i], (msa->alen+1) * sizeof(char));
+      status = esl_abc_Textize(msa->abc, msa->ax[i], msa->alen, msa->aseq[i]);
+      if (status != eslOK) goto ERROR;
+      free(msa->ax[i]);
+    }
+  for (; i < msa->sqalloc; i++)
+    msa->aseq[i] = NULL;
+  free(msa->ax);
+  msa->ax = NULL;
+  
+  msa->abc    = NULL;      	 /* nullify reference (caller still owns real abc) */
+  msa->flags &= ~eslMSA_DIGITAL; /* drop the flag */
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_msa_ConvertDegen2X()
+ * Synopsis:  Convert all degenerate residues to X/N
+ *
+ * Purpose:   Convert all the degenerate residue codes in digital
+ *            MSA <msa> to the code for "unknown residue" (maximum
+ *            degeneracy); for example, X for protein, N for 
+ *            nucleic acid. 
+ *            
+ *            This is handy when you need to be compatible with
+ *            software that can't deal with unusual residue codes.
+ *            For example, WU-BLAST can't deal with O (pyrrolysine)
+ *            codes. 
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <msa> isn't in digital mode. 
+ *            (We only know how to interpret the alphabet in digital
+ *            mode. In text mode, letters are just letters.)
+ */
+int
+esl_msa_ConvertDegen2X(ESL_MSA *msa)
+{ 
+  int i;
+  int status;
+
+  if (! (msa->flags & eslMSA_DIGITAL)) ESL_EXCEPTION(eslEINVAL, "esl_msa_ConvertDegen2X only works on digital sequences");
+  
+  for (i = 0; i < msa->nseq; i++)
+    if ((status = esl_abc_ConvertDegen2X(msa->abc, msa->ax[i])) != eslOK) return status;
+
+  return eslOK;
+}
+
+
+#endif /* eslAUGMENT_ALPHABET */
+/*---------------------- end of digital MSA functions -----------------------*/
+
+
+
+/*****************************************************************
+ *# 3. Setting, checking data fields in an ESL_MSA
+ *****************************************************************/
+
+/* These get used by parsers, which might be using an ESL_BUFFER.
+ * They need to handle either NUL-terminated strings or memory lines.
+ */
+
+/* Function:  esl_msa_SetName()
+ * Synopsis:  Set name of an MSA.
+ *
+ * Purpose:   Sets the name of the msa <msa> to string <s>,
+ *            of length <n>. 
+ *            
+ *            If <s> is a NUL-terminated string, <n> is optional; if
+ *            the length is unknown, pass <n=-1>. <s> may also be a
+ *            memory line, non-NUL terminated, in which case <n> is
+ *            required.
+ *
+ *            <s> can also be <NULL> because the MSA name is an
+ *            optional field. (In this case, <n> is irrelevant and
+ *            ignored.)
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_msa_SetName(ESL_MSA *msa, const char *s, esl_pos_t n)
+{
+  if (msa->name) free(msa->name); 
+  if (n > 0) return esl_memstrdup(s,  n, &(msa->name)); 
+  else       return esl_strdup(   s, -1, &(msa->name)); 
+}
+
+
+/* Function:  esl_msa_SetDesc()
+ * Synopsis:  Set the description line of an MSA.
+ *
+ * Purpose:   Sets the optional description line of the msa <msa> to
+ *            string <s> of length <n>.
+ *            
+ *            If <s> is a NUL-terminated string, <n> is optional; if
+ *            the length is unknown, pass <n=-1>. <s> may also be a
+ *            memory line, non-NUL terminated, in which case <n> is
+ *            required.
+ * 
+ *            <s> can also be <NULL> because the MSA description is an
+ *            optional field. (In this case, <n> is irrelevant and
+ *            ignored.)
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_msa_SetDesc(ESL_MSA *msa, const char *s, esl_pos_t n)
+{
+  if (msa->desc) free(msa->desc);
+  if (n > 0) return esl_memstrdup(s,  n, &(msa->desc)); 
+  else       return esl_strdup(   s, -1, &(msa->desc)); 
+}
+
+/* Function:  esl_msa_SetAccession()
+ * Synopsis:  Set the accession field of an MSA.
+ *
+ * Purpose:   Sets accession field of the msa <msa> to string <s> of
+ *            length <n>.
+ *            
+ *            If <s> is a NUL-terminated string, <n> is optional; if
+ *            the length is unknown, pass <n=-1>. <s> may also be a
+ *            memory line, non-NUL terminated, in which case <n> is
+ *            required.
+ *
+ *            <s> can also be <NULL> because the MSA accession is an
+ *            optional field. (In this case, <n> is irrelevant and
+ *            ignored.)
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_msa_SetAccession(ESL_MSA *msa, const char *s, esl_pos_t n)
+{
+  if (msa->acc) free(msa->acc);
+  if (n > 0) return esl_memstrdup(s,  n, &(msa->acc)); 
+  else       return esl_strdup(   s, -1, &(msa->acc)); 
+}
+
+
+/* Function:  esl_msa_SetAuthor()
+ * Synopsis:  Set the author string in an MSA.
+ *
+ * Purpose:   Sets the author string in <msa> to string <s> of
+ *            length <n>.
+ *            
+ *            If <s> is a NUL-terminated string, <n> is optional; if
+ *            the length is unknown, pass <n=-1>. <s> may also be a
+ *            memory line, non-NUL terminated, in which case <n> is
+ *            required.
+ *
+ *            <s> can also be <NULL> because the MSA author is an
+ *            optional field. (In this case, <n> is irrelevant and
+ *            ignored.)
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_msa_SetAuthor(ESL_MSA *msa, const char *s, esl_pos_t n)
+{
+  if (msa->au) free(msa->au);
+  if (n > 0) return esl_memstrdup(s,  n, &(msa->au)); 
+  else       return esl_strdup(   s, -1, &(msa->au)); 
+}
+
+
+/* Function:  esl_msa_SetSeqName()
+ * Synopsis:  Set an individual sequence name in an MSA.
+ *
+ * Purpose:   Set the name of sequence number <idx> in <msa>
+ *            to string <s> of length <n>.
+ *  
+ *            If <s> is a NUL-terminated string, <n> is optional; if
+ *            the length is unknown, pass <n=-1>. <s> may also be a
+ *            memory line, non-NUL terminated, in which case <n> is
+ *            required.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslEINCONCEIVABLE> on coding errors.
+ *
+ * Note:      msa->sqname[] is not optional, so we may
+ *            rely on it already being allocated for 
+ *            i=0..sqalloc-1.
+ */
+int
+esl_msa_SetSeqName(ESL_MSA *msa, int idx, const char *s, esl_pos_t n)
+{
+  if (idx  >= msa->sqalloc) ESL_EXCEPTION(eslEINCONCEIVABLE, "no such sequence %d (only %d allocated)", idx, msa->sqalloc);
+  if (s == NULL)            ESL_EXCEPTION(eslEINCONCEIVABLE, "seq names are mandatory; NULL is not a valid name");
+
+  if (msa->sqname[idx]) free(msa->sqname[idx]);
+  if (n > 0) return esl_memstrdup(s,  n, &(msa->sqname[idx])); 
+  else       return esl_strdup(   s, -1, &(msa->sqname[idx])); 
+}
+
+/* Function:  esl_msa_SetSeqAccession()
+ * Synopsis:  Sets individual sequence accession in an MSA.
+ *
+ * Purpose:   Set the accession of sequence number <idx> in <msa> to
+ *            string <s> of length <n>.
+ *  
+ *            If <s> is a NUL-terminated string, <n> is optional; if
+ *            the length is unknown, pass <n=-1>. <s> may also be a
+ *            memory line, non-NUL terminated, in which case <n> is
+ *            required.
+ *
+ *            <s> can also be <NULL> because a seq accession is an
+ *            optional field. (In this case, <n> is irrelevant and
+ *            ignored.)
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslEINCONCEIVABLE> on coding errors.
+ */
+int 
+esl_msa_SetSeqAccession(ESL_MSA *msa, int idx, const char *s, esl_pos_t n)
+{
+  int     i;
+  int     status;
+
+  if (idx  >= msa->sqalloc) ESL_EXCEPTION(eslEINCONCEIVABLE, "no such sequence %d (only %d allocated)", idx, msa->sqalloc);
+
+  if (msa->sqacc && msa->sqacc[idx]) { free(msa->sqacc[idx]); msa->sqacc[idx] = NULL; }
+
+  /* erasure case */
+  if (! s && msa->sqacc) {				
+    for (i = 0; i < msa->sqalloc; i++) if (msa->sqacc[i]) break;
+    if (i == msa->sqalloc) { free(msa->sqacc); msa->sqacc = NULL; }
+    return eslOK;
+  }
+
+  /* Allocate/initialize the optional sqacc array, if it's not already done: */
+  if (! msa->sqacc) {
+    ESL_ALLOC(msa->sqacc, sizeof(char *) * msa->sqalloc);
+    for (i = 0; i < msa->sqalloc; i++) msa->sqacc[i] = NULL;
+  } 
+
+  if (n > 0) status = esl_memstrdup(s,  n, &(msa->sqacc[idx])); 
+  else       status = esl_strdup(   s, -1, &(msa->sqacc[idx])); 
+
+  return status;
+  
+ ERROR:
+  return status;
+}
+  
+/* Function:  esl_msa_SetSeqDescription()
+ * Synopsis:  Sets individual sequence description in an MSA.
+ *
+ * Purpose:   Set the description of sequence number <idx> in <msa> to
+ *             string <s> of length <n>.
+ *  
+ *            If <s> is a NUL-terminated string, <n> is optional; if
+ *            the length is unknown, pass <n=-1>. <s> may also be a
+ *            memory line, non-NUL terminated, in which case <n> is
+ *            required.
+ *
+ *            <s> can also be <NULL> because a seq accession is an
+ *            optional field. (In this case, <n> is irrelevant and
+ *            ignored.)
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslEINCONCEIVABLE> on coding error
+ */
+int
+esl_msa_SetSeqDescription(ESL_MSA *msa, int idx, const char *s, esl_pos_t n)
+{
+  int     i;
+  int     status;
+
+  if (idx  >= msa->sqalloc) ESL_EXCEPTION(eslEINCONCEIVABLE, "no such sequence %d (only %d allocated)", idx, msa->sqalloc);
+
+  if (msa->sqdesc && msa->sqdesc[idx]) { free(msa->sqdesc[idx]); msa->sqdesc[idx] = NULL; }
+
+  /* erasure case. If we just freed the only description, free the entire optional <sqdesc> array */
+  if (! s && msa->sqdesc) {				
+    for (i = 0; i < msa->sqalloc; i++) if (msa->sqdesc[i]) break;
+    if (i == msa->sqalloc) { free(msa->sqdesc); msa->sqdesc = NULL; }
+    return eslOK;
+  }
+
+  /* Allocate/initialize the optional sqdesc array, if it's not already done: */
+  if (msa->sqdesc == NULL) {
+    ESL_ALLOC(msa->sqdesc, sizeof(char *) * msa->sqalloc);
+    for (i = 0; i < msa->sqalloc; i++) msa->sqdesc[i] = NULL;
+  } 
+
+  if (n > 0) status = esl_memstrdup(s,  n, &(msa->sqdesc[idx])); 
+  else       status = esl_strdup(   s, -1, &(msa->sqdesc[idx])); 
+
+ ERROR:
+  return status;
+}
+
+
+
+/* Function:  esl_msa_SetDefaultWeights()
+ * Synopsis:  Set all sequence weights to default 1.0.
+ *
+ * Purpose:   Set all the sequence weights in <msa> to default,
+ *            1.0. Drop the <eslMSA_HASWGTS> flag in <msa->flags>.
+ *            
+ *            The <ESL_MSA> data structure has its <wgt> values
+ *            initialized to -1.0, by create and expand functions, as
+ *            a special value for "unset yet". File format parsers use
+ *            this to tell when a weight is mistakenly set twice, or
+ *            not at all. However, when an <msa> is used, you're
+ *            allowed to assume that <wgt> is valid even if the
+ *            <eslMSA_HASWGTS> flag is down. So all creators of new
+ *            MSAs (file format parsers, for example) must assure that
+ *            <msa->wgt> is set correctly, even if the file format
+ *            doesn't include weights. This function gives parsers
+ *            (and other MSA creators) a quick way to do this.
+ */
+int
+esl_msa_SetDefaultWeights(ESL_MSA *msa)
+{
+  int idx;
+
+  for (idx = 0; idx < msa->nseq; idx++) 
+    msa->wgt[idx] = 1.0;
+  msa->flags &= ~eslMSA_HASWGTS;
+  return eslOK;
+}
+
+
+/* Function:  esl_msa_FormatName()
+ * Synopsis:  Format name of an MSA, printf()-style.
+ *
+ * Purpose:   Sets the name of the msa <msa> using <name>, where 
+ *            <name> is a <printf()>-style format with
+ *            arguments; for example, <esl_msa_FormatName(msa, "random%d", i)>.
+ *            
+ *            <name> can be <NULL>, because the MSA name is an
+ *            optional field; in which case any existing name in
+ *            the <msa> is erased.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ *            <eslESYS> if a <*printf()> library call fails.
+ */
+int
+esl_msa_FormatName(ESL_MSA *msa, const char *name, ...)
+{
+  va_list ap;
+  int     status;
+
+  if (msa->name != NULL) free(msa->name); 
+  if (name      == NULL) { msa->name = NULL; return eslOK; }
+
+  va_start(ap, name);
+  status = esl_vsprintf(&(msa->name), name, &ap);
+  va_end(ap);
+  return status;
+}
+
+
+/* Function:  esl_msa_FormatDesc()
+ * Synopsis:  Format the description line of an MSA, printf()-style.
+ *
+ * Purpose:   Format the description line of the msa <msa> using <desc>.
+ *            where <desc> is a <printf()>-style format with
+ *            arguments.
+ *            For example, <esl_msa_FormatDesc(msa, "sample %d", i)>.
+ *
+ *            As a special case, <desc> may be <NULL>, to facilitate
+ *            handling of optional annotation.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ *            <eslESYS> if a <*printf()> library call fails.
+ */
+int
+esl_msa_FormatDesc(ESL_MSA *msa, const char *desc, ...)
+{
+  va_list ap;
+  int     status;
+
+  if (msa->desc != NULL) free(msa->desc);
+  va_start(ap, desc);
+  status = esl_vsprintf(&(msa->desc), desc, &ap);
+  va_end(ap);
+  return status;
+
+}
+
+/* Function:  esl_msa_FormatAccession()
+ * Synopsis:  Format the accession number of an MSA, printf()-style.
+ *
+ * Purpose:   Sets accession number of the msa <msa> using <acc>, 
+ *            where <acc> is a <printf()>-style format with arguments.
+ *            For example, <esl_msa_FormatAccession(msa, "PF%06d", i)>.
+ *
+ *            As a special case, <acc> may be <NULL>, to facilitate
+ *            handling of optional annotation.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ *            <eslESYS> if a <*printf()> library call fails.
+ */
+int
+esl_msa_FormatAccession(ESL_MSA *msa, const char *acc, ...)
+{
+  va_list ap;
+  int     status;
+
+  if (msa->acc != NULL) free(msa->acc);
+  va_start(ap, acc);
+  status = esl_vsprintf(&(msa->acc), acc, &ap);
+  va_end(ap);
+  return status;
+}
+
+
+/* Function:  esl_msa_FormatAuthor()
+ * Synopsis:  Format the author string in an MSA, printf()-style.
+ *
+ * Purpose:   Sets the author string in <msa>, using an <author> string
+ *            and arguments in same format as <printf()> would take.
+ *            
+ *            As a special case, <author> may be <NULL>, to facilitate
+ *            handling of optional annotation.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ *            <eslESYS> if a <*printf()> library call fails.
+ */
+int
+esl_msa_FormatAuthor(ESL_MSA *msa, const char *author, ...)
+{
+  va_list ap;
+  int     status;
+
+  if (msa->au != NULL) free(msa->au);
+  va_start(ap, author);
+  status = esl_vsprintf(&(msa->au), author, &ap);
+  va_end(ap);
+  return status;
+}
+
+
+/* Function:  esl_msa_FormatSeqName()
+ * Synopsis:  Formats an individual sequence name in an MSA, printf()-style.
+ *
+ * Purpose:   Set the name of sequence number <idx> in <msa>
+ *            to <name>, where <name> is a <printf()>
+ *            style format and arguments.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <name> is <NULL>;
+ *            <eslEMEM> on allocation error;
+ *            <eslESYS> if a <*printf()> library call fails.
+ *
+ * Note:      msa->sqname[] is not optional, so we may
+ *            rely on it already being allocated for 
+ *            i=0..sqalloc-1.
+ */
+int
+esl_msa_FormatSeqName(ESL_MSA *msa, int idx, const char *name, ...)
+{
+  va_list ap;
+  int     status;
+
+  if (idx  >= msa->sqalloc) ESL_EXCEPTION(eslEINVAL, "no such sequence %d (only %d allocated)", idx, msa->sqalloc);
+  if (name == NULL)         ESL_EXCEPTION(eslEINVAL, "seq names are mandatory; NULL is not a valid name");
+
+  if (msa->sqname[idx] != NULL) free(msa->sqname[idx]);
+
+  va_start(ap, name);
+  status = esl_vsprintf(&(msa->sqname[idx]), name, &ap);
+  va_end(ap);
+  return status;
+}
+
+/* Function:  esl_msa_FormatSeqAccession()
+ * Synopsis:  Format individual sequence accession in an MSA, printf()-style.
+ *
+ * Purpose:   Set the accession of sequence number <idx> in <msa> to
+ *            <acc>, where <acc> is a <printf()> style format and
+ *            arguments.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ *            <eslESYS> if a <*printf()> library call fails.
+ */
+int 
+esl_msa_FormatSeqAccession(ESL_MSA *msa, int idx, const char *acc, ...)
+{
+  va_list ap;
+  int     i;
+  int     status;
+
+  if (idx  >= msa->sqalloc) ESL_EXCEPTION(eslEINVAL, "no such sequence %d (only %d allocated)", idx, msa->sqalloc);
+  if (acc == NULL) {
+    if (msa->sqacc != NULL) { free(msa->sqacc[idx]); msa->sqacc[idx] = NULL; }
+    return eslOK;
+  }
+
+  /* Allocate/initialize the optional sqacc array, if it's not already done: */
+  if (msa->sqacc == NULL) {
+    ESL_ALLOC(msa->sqacc, sizeof(char *) * msa->sqalloc);
+    for (i = 0; i < msa->sqalloc; i++) msa->sqacc[i] = NULL;
+  } 
+  if (msa->sqacc[idx] != NULL) free(msa->sqacc[idx]);
+
+  va_start(ap, acc);
+  status = esl_vsprintf(&(msa->sqacc[idx]), acc, &ap);
+  va_end(ap);
+  return status;
+
+ ERROR:
+  return status;
+}
+  
+/* Function:  esl_msa_FormatSeqDescription()
+ * Synopsis:  Formats individual sequence description in an MSA, printf()-style.
+ *
+ * Purpose:   Set the description of sequence number <idx> in <msa> to
+ *            <desc>, where <desc> may be a <printf()> style format and
+ *            arguments.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ *            <eslESYS> if a <*printf()> library call fails.
+ */
+int
+esl_msa_FormatSeqDescription(ESL_MSA *msa, int idx, const char *desc, ...)
+{
+  va_list ap;
+  int     i;
+  int     status;
+
+  if (idx  >= msa->sqalloc) ESL_EXCEPTION(eslEINVAL, "no such sequence %d (only %d allocated)", idx, msa->sqalloc);
+  if (desc == NULL) {
+    if (msa->sqdesc != NULL) { free(msa->sqdesc[idx]); msa->sqdesc[idx] = NULL; }
+    return eslOK;
+  }
+
+  /* Allocate/initialize the optional sqdesc array, if it's not already done: */
+  if (msa->sqdesc == NULL) {
+    ESL_ALLOC(msa->sqdesc, sizeof(char *) * msa->sqalloc);
+    for (i = 0; i < msa->sqalloc; i++) msa->sqdesc[i] = NULL;
+  } 
+  if (msa->sqdesc[idx] != NULL) free(msa->sqdesc[idx]);
+
+  va_start(ap, desc);
+  status = esl_vsprintf(&(msa->sqdesc[idx]), desc, &ap);
+  va_end(ap);
+  return status;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_msa_AddComment()
+ * Synopsis:  Add an unparsed command to an <ESL_MSA>
+ *
+ * Purpose:   Add an (unparsed) comment line to the MSA structure, 
+ *            allocating as necessary.
+ *
+ * Args:      msa - a multiple alignment
+ *            p   - comment line to add
+ *            n   - length of <p>, or -1 if <p> is a NUL-terminated string and length is unknown.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_msa_AddComment(ESL_MSA *msa, char *p, esl_pos_t n)
+{
+  int   status;
+
+  if (n == -1) n = strlen(p);
+
+  /* If this is our first recorded comment, we need to allocate;
+   * and if we've filled available space, we need to reallocate.
+   */
+  if (msa->comment == NULL) {
+    ESL_ALLOC(msa->comment, sizeof(char *) * 16);
+    msa->alloc_ncomment = 16;
+  }
+  if (msa->ncomment == msa->alloc_ncomment) {
+    ESL_REALLOC(msa->comment, sizeof(char *) * msa->alloc_ncomment * 2);
+    msa->alloc_ncomment *= 2;
+  }
+  if ((status = esl_memstrdup(p, n, &(msa->comment[msa->ncomment]))) != eslOK) goto ERROR;
+  msa->ncomment++;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function:  esl_msa_AddGF()
+ * Synopsis:  Add an unparsed #=GF markup line to an <ESL_MSA>
+ *
+ * Purpose:   Add an unparsed \verb+#=GF+ markup line to the MSA, 
+ *            allocating as necessary. <tag> is the GF markup 
+ *            tag; <value> is the text associated w/ that tag.
+ *
+ * Args:      msa    - a multiple alignment
+ *            tag    - markup tag 
+ *            taglen - length of <tag>; or -1 if <tag> is a string of unknown length
+ *            value  - markup text
+ *            vlen   - length of <value>; or -1 if <value> is a string of unknown length
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_msa_AddGF(ESL_MSA *msa, char *tag, esl_pos_t taglen, char *value, esl_pos_t vlen)
+{  
+  int   n;
+  int   status;
+
+  if (taglen == -1) taglen = strlen(tag);
+  if (vlen   == -1) vlen   = strlen(value);
+
+  /* Initialize or grow the allocation? */
+  if (msa->ngf == msa->alloc_ngf) {
+    n = (msa->alloc_ngf == 0 ? 16 : msa->alloc_ngf * 2);
+    ESL_REALLOC(msa->gf_tag, sizeof(char *) * n);
+    ESL_REALLOC(msa->gf,     sizeof(char *) * n);
+    msa->alloc_ngf = n;
+  }
+
+  if ((status = esl_memstrdup(tag,   taglen, &(msa->gf_tag[msa->ngf]))) != eslOK) goto ERROR;
+  if ((status = esl_memstrdup(value, vlen,   &(msa->gf[msa->ngf])))     != eslOK) goto ERROR;
+  msa->ngf++;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function:  esl_msa_AddGS()
+ * Synopsis:  Add an unparsed #=GS markup line to an <ESL_MSA>
+ *
+ * Purpose:   Add an unparsed \verb+#=GS+ markup line to the MSA, 
+ *            allocating as necessary. It's possible that we 
+ *            could get more than one of the same type of GS 
+ *            tag per sequence; for example, "DR PDB;" structure 
+ *            links in Pfam.  Hack: handle these by appending to 
+ *            the string, in a \verb+\n+ separated fashion.
+ *
+ * Args:      msa    - multiple alignment structure
+ *            tag    - markup tag (e.g. "AC")
+ *            taglen - length of <tag>; or -1 if <tag> is a string of unknown length
+ *            sqidx  - index of sequence to assoc markup with (0..nseq-1)
+ *            value  - markup (e.g. "P00666")
+ *            vlen   - length of <value>; or -1 if <value> is string of unknown length
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_msa_AddGS(ESL_MSA *msa, char *tag, esl_pos_t taglen, int sqidx, char *value, esl_pos_t vlen)
+{
+  int   tagidx;
+  int   i;
+  int   status;
+
+  if (taglen == -1) taglen = strlen(tag);
+  if (vlen   == -1) vlen   = strlen(value);
+
+  /* first GS tag? init&allocate  */
+  if (msa->gs_tag == NULL)	
+    {
+#ifdef eslAUGMENT_KEYHASH
+      msa->gs_idx = esl_keyhash_Create();
+      status = esl_keyhash_Store(msa->gs_idx, tag, taglen, &tagidx);
+      if (status != eslOK && status != eslEDUP) return status;
+      ESL_DASSERT1((tagidx == 0));
+#else
+      tagidx = 0;
+#endif
+      ESL_ALLOC(msa->gs_tag, sizeof(char *));  /* one at a time. */
+      ESL_ALLOC(msa->gs,     sizeof(char **));
+      ESL_ALLOC(msa->gs[0],  sizeof(char *) * msa->sqalloc);
+      for (i = 0; i < msa->sqalloc; i++)
+	msa->gs[0][i] = NULL;
+    }
+  else 
+    {
+      /* Get a tagidx for this GS tag.
+       * tagidx < ngs; we already saw this tag;
+       * tagidx == ngs; this is a new one.
+       */
+#ifdef eslAUGMENT_KEYHASH
+      status = esl_keyhash_Store(msa->gs_idx, tag, taglen, &tagidx);
+      if (status != eslOK && status != eslEDUP) return status;
+#else
+      for (tagidx = 0; tagidx < msa->ngs; tagidx++)
+	if (esl_memstrcmp(tag, taglen, msa->gs_tag[tagidx])) break;
+#endif
+      /* Reallocation (in blocks of 1) */
+      if (tagidx == msa->ngs ) 
+	{
+	  ESL_REALLOC(msa->gs_tag, (msa->ngs+1) * sizeof(char *));
+	  ESL_REALLOC(msa->gs,     (msa->ngs+1) * sizeof(char **));
+	  msa->gs[tagidx] = NULL;
+	  ESL_ALLOC(msa->gs[tagidx], sizeof(char *) * msa->sqalloc);
+	  for (i = 0; i < msa->sqalloc; i++) 
+	    msa->gs[tagidx][i] = NULL;
+	}
+    }
+
+  /* Store the tag, if it's new.
+   */
+  if (tagidx == msa->ngs) 
+    {
+      if ((status = esl_memstrdup(tag, taglen, &(msa->gs_tag[tagidx]))) != eslOK) goto ERROR;
+      msa->ngs++;
+    }
+  
+  /* Store the annotation on the sequence.
+   * If seq is unannotated, dup the value; if
+   * seq already has a GS annotation, cat a \n, then cat the value.
+   */
+  if (msa->gs[tagidx][sqidx] == NULL)
+    {
+      if ((status = esl_memstrdup(value, vlen, &(msa->gs[tagidx][sqidx]))) != eslOK) goto ERROR;
+    }
+  else 
+    {			
+      esl_pos_t n1,n2;
+      n1 = strlen(msa->gs[tagidx][sqidx]);
+      n2 = (vlen == -1 ? strlen(value) : vlen);
+      ESL_REALLOC(msa->gs[tagidx][sqidx], sizeof(char) * (n1+n2+2)); /* +2 for \n, \0 */
+      msa->gs[tagidx][sqidx][n1] = '\n';
+      memcpy(msa->gs[tagidx][sqidx]+n1+1, value, n2);
+      msa->gs[tagidx][sqidx][n1+n2+1] = '\0';
+    }
+  return eslOK;
+
+ ERROR:
+  return status;
+} 
+
+/* Function:  esl_msa_AppendGC()
+ * Synopsis:  Add an unparsed #=GC markup line to an <ESL_MSA>
+ *
+ * Purpose:   Add an unparsed \verb+#=GC+ markup line to the MSA 
+ *            structure, allocating as necessary. When called 
+ *            multiple times for the same tag, appends value 
+ *            strings together -- used when parsing multiblock 
+ *            alignment files, for example.
+ *
+ * Args:      msa   - multiple alignment structure
+ *            tag   - markup tag (e.g. "CS")
+ *            value - markup, one char per aligned column      
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_msa_AppendGC(ESL_MSA *msa, char *tag, char *value)
+{
+  int   tagidx;
+  int   status;
+  void *p;
+
+  /* Is this an unparsed tag name that we recognize?
+   * If not, handle adding it to index, and reallocating
+   * as needed.
+   */
+  if (msa->gc_tag == NULL)	/* first tag? init&allocate  */
+    {
+#ifdef eslAUGMENT_KEYHASH
+      msa->gc_idx = esl_keyhash_Create();
+      status = esl_keyhash_Store(msa->gc_idx, tag, -1, &tagidx);      
+      if (status != eslOK && status != eslEDUP) return status;
+      ESL_DASSERT1((tagidx == 0));
+#else
+      tagidx = 0;
+#endif
+      ESL_ALLOC(msa->gc_tag, sizeof(char *));
+      ESL_ALLOC(msa->gc,     sizeof(char *));
+      msa->gc[0]  = NULL;
+    }
+  else
+    {			/* new tag? */
+      /* get tagidx for this GC tag. existing tag: <ngc; new: == ngc. */
+#ifdef eslAUGMENT_KEYHASH
+      status = esl_keyhash_Store(msa->gc_idx, tag, -1, &tagidx);
+      if (status != eslOK && status != eslEDUP) goto ERROR;
+#else
+      for (tagidx = 0; tagidx < msa->ngc; tagidx++)
+	if (strcmp(msa->gc_tag[tagidx], tag) == 0) break;
+#endif
+      /* Reallocate, in block of one tag at a time
+       */
+      if (tagidx == msa->ngc)
+	{
+	  ESL_RALLOC(msa->gc_tag, p, (msa->ngc+1) * sizeof(char **));
+	  ESL_RALLOC(msa->gc,     p, (msa->ngc+1) * sizeof(char **));
+	  msa->gc[tagidx] = NULL;
+	}
+    }
+  /* new tag? store it.
+   */
+  if (tagidx == msa->ngc) 
+    {
+      if ((status = esl_strdup(tag, -1, &(msa->gc_tag[tagidx]))) != eslOK) goto ERROR;
+      msa->ngc++;
+    }
+  return (esl_strcat(&(msa->gc[tagidx]), -1, value, -1));
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_msa_AppendGR()
+ * Synopsis:  Add an unparsed #=GR markup line to an <ESL_MSA>
+ *
+ * Purpose:   Add an unparsed \verb+#=GR+ markup line to the MSA structure, 
+ *            allocating as necessary.
+ *              
+ *            When called multiple times for the same tag, appends 
+ *            value strings together -- used when parsing multiblock 
+ *            alignment files, for example.
+ *
+ * Args:      msa    - multiple alignment structure
+ *            tag    - markup tag (e.g. "SS")
+ *            sqidx  - index of seq to assoc markup with (0..nseq-1)
+ *            value  - markup, one char per aligned column      
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_msa_AppendGR(ESL_MSA *msa, char *tag, int sqidx, char *value)
+{
+  void *p;
+  int tagidx;
+  int i;
+  int status;
+
+  if (msa->gr_tag == NULL)	/* first tag? init&allocate  */
+    {
+#ifdef eslAUGMENT_KEYHASH
+      msa->gr_idx = esl_keyhash_Create();
+      status = esl_keyhash_Store(msa->gr_idx, tag, -1, &tagidx);
+      if (status != eslOK && status != eslEDUP) return status;
+      ESL_DASSERT1((tagidx == 0));
+#else
+      tagidx = 0;
+#endif
+      ESL_ALLOC(msa->gr_tag, sizeof(char *));
+      ESL_ALLOC(msa->gr,     sizeof(char **));
+      ESL_ALLOC(msa->gr[0],  sizeof(char *) * msa->sqalloc);
+      for (i = 0; i < msa->sqalloc; i++) 
+	msa->gr[0][i] = NULL;
+    }
+  else 
+    {
+      /* get tagidx for this GR tag. existing<ngr; new=ngr.
+       */
+#ifdef eslAUGMENT_KEYHASH
+      status = esl_keyhash_Store(msa->gr_idx, tag, -1, &tagidx);
+      if (status != eslOK && status != eslEDUP) return status;
+#else
+      for (tagidx = 0; tagidx < msa->ngr; tagidx++)
+	if (strcmp(msa->gr_tag[tagidx], tag) == 0) break;
+#endif
+      /* if a new tag, realloc for it */      
+      if (tagidx == msa->ngr)
+	{ 
+	  ESL_RALLOC(msa->gr_tag, p, (msa->ngr+1) * sizeof(char *));
+	  ESL_RALLOC(msa->gr,     p, (msa->ngr+1) * sizeof(char **));
+	  ESL_ALLOC(msa->gr[msa->ngr], sizeof(char *) * msa->sqalloc);
+	  for (i = 0; i < msa->sqalloc; i++) 
+	    msa->gr[msa->ngr][i] = NULL;
+	}
+    }
+
+  if (tagidx == msa->ngr) 
+    {
+      if ((status = esl_strdup(tag, -1, &(msa->gr_tag[tagidx]))) != eslOK) goto ERROR;
+      msa->ngr++;
+    }
+  return (esl_strcat(&(msa->gr[tagidx][sqidx]), -1, value, -1));
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_msa_CheckUniqueNames()
+ * Synopsis:  Check if all seq names are unique.
+ *
+ * Purpose:   Check whether all the sequence names in <msa>
+ *            are unique; if so, return <eslOK>, and if not,
+ *            return <eslFAIL>. 
+ * 
+ *            Stockholm files require names to be unique.  This
+ *            function lets us check whether we need to munge seqnames
+ *            before writing a Stockholm file.
+ *            
+ *            The check uses a keyhash, so it's efficient.
+ *
+ * Args:      msa   - alignment
+ *
+ * Returns:   <eslOK> if names are unique.
+ *            <eslFAIL> if not.
+ *
+ * Throws:    <eslMEM> on allocation failure.
+ */
+int
+esl_msa_CheckUniqueNames(const ESL_MSA *msa)
+{
+  ESL_KEYHASH *kh     = NULL;
+  int          idx;
+  int          status = TRUE;
+
+  if  ((kh = esl_keyhash_Create()) == NULL) { status = eslEMEM; goto ERROR; }
+  for (idx = 0; idx < msa->nseq; idx++)
+    {
+      status = esl_keyhash_Store(kh, msa->sqname[idx], -1, NULL);
+      if      (status == eslEDUP) { status = eslFAIL; break; }
+      else if (status != eslOK)   goto ERROR;
+    }
+  esl_keyhash_Destroy(kh);
+  return status;
+
+ ERROR:
+  if (kh) esl_keyhash_Destroy(kh);
+  return status;
+
+}
+
+/* msa_set_seq_ss() 
+ *
+ * Set the secondary structure annotation for sequence number
+ * <seqidx> in an alignment <msa> by copying the string <ss>.
+ *
+ * Returns:  <eslOK> on success.
+ * 
+ * Throws:   <eslEMEM> on allocation failure.
+ */
+static int
+msa_set_seq_ss(ESL_MSA *msa, int seqidx, const char *ss)
+{
+  int status;
+  int i;
+
+  if (msa->ss == NULL) 
+    {
+      ESL_ALLOC(msa->ss, sizeof(char *) * msa->sqalloc);
+      for (i = 0; i < msa->sqalloc; i++) msa->ss[i] = NULL;
+    }
+  if (msa->ss[seqidx] != NULL) free(msa->ss[seqidx]);
+  return (esl_strdup(ss, -1, &(msa->ss[seqidx])));
+
+ ERROR:
+  return status;
+}
+
+/* msa_set_seq_sa() 
+ *
+ * Set the surface accessibility annotation for sequence number
+ * <seqidx> in an alignment <msa> by copying the string <sa>.
+ *
+ * Returns:  <eslOK> on success.
+ * 
+ * Throws:   <eslEMEM> on allocation failure.
+ */
+static int
+msa_set_seq_sa(ESL_MSA *msa, int seqidx, const char *sa)
+{
+  int status;
+  int i;
+
+  if (msa->sa == NULL) 
+    {
+      ESL_ALLOC(msa->sa, sizeof(char *) * msa->sqalloc);
+      for (i = 0; i < msa->sqalloc; i++) msa->sa[i] = NULL;
+    }
+  if (msa->sa[seqidx] != NULL) free(msa->sa[seqidx]);
+  return (esl_strdup(sa, -1, &(msa->sa[seqidx])));
+
+ ERROR:
+  return status;
+}
+
+/* msa_set_seq_pp() 
+ *
+ * Set the posterior probability annotation for sequence number
+ * <seqidx> in an alignment <msa> by copying the string <pp>.
+ *
+ * Returns:  <eslOK> on success.
+ * 
+ * Throws:   <eslEMEM> on allocation failure.
+ */
+static int
+msa_set_seq_pp(ESL_MSA *msa, int seqidx, const char *pp)
+{
+  int status;
+  int i;
+
+  if (msa->pp == NULL) 
+    {
+      ESL_ALLOC(msa->pp, sizeof(char *) * msa->sqalloc);
+      for (i = 0; i < msa->sqalloc; i++) msa->pp[i] = NULL;
+    }
+  if (msa->pp[seqidx] != NULL) free(msa->pp[seqidx]);
+  return (esl_strdup(pp, -1, &(msa->pp[seqidx])));
+
+ ERROR:
+  return status;
+}
+/*---------- end of ESL_MSA field setting/checking --------------*/
+
+
+
+/*****************************************************************
+ *# 4. Miscellaneous functions for manipulating MSAs
+ *****************************************************************/
+
+static int64_t msa_get_rlen(const ESL_MSA *msa, int seqidx);
+
+
+/* Function:  esl_msa_ReasonableRF()
+ * Synopsis:  Determine a reasonable #=RF line marking "consensus" columns.
+ *
+ * Purpose:   Define an <rfline> for the multiple alignment <msa> that
+ *            marks consensus columns with an 'x' (or the consensus
+ *            letter if useconsseq is TRUE), and non-consensus columns
+ *            with a '.'.
+ *            
+ *            Consensus columns are defined as columns with fractional
+ *            occupancy of $\geq$ <symfrac> in residues. For example,
+ *            if <symfrac> is 0.7, columns containing $\geq$ 70\%
+ *            residues are assigned as 'x' (or consensus letter) in the
+ *            <rfline>, roughly speaking. "Roughly speaking", because the
+ *            fractional occupancy is in fact calculated as a weighted
+ *            frequency using sequence weights in <msa->wgt>, and because
+ *            missing data symbols are ignored in order to be able to
+ *            deal with sequence fragments. 
+ *            
+ *            The greater <symfrac> is, the more stringent the
+ *            definition, and the fewer columns will be defined as
+ *            consensus. <symfrac=0> will define all columns as
+ *            consensus. <symfrac=1> will only define a column as
+ *            consensus if it contains no gap characters at all.
+ *            
+ *            If the caller wants to designate any sequences as
+ *            fragments, it must convert all leading and trailing gaps
+ *            to the missing data symbol '~'.
+ *
+ *            For text mode alignments, any alphanumeric character is
+ *            considered to be a residue, and any non-alphanumeric
+ *            character is considered to be a gap.
+ *            
+ *            The <rfline> is a NUL-terminated string, indexed
+ *            <0..alen-1>.
+ *
+ *            The <rfline> result can be <msa->rf>, if the caller
+ *            wants to set the <msa's> own RF line; or it can be any
+ *            alternative storage provided by the caller. In either
+ *            case, the caller must provide allocated space for at
+ *            least <msa->alen+1> chars.
+ *            
+ * Args:      msa          - MSA to define a consensus RF line for
+ *            symfrac      - threshold for defining consensus columns
+ *            useconsseq   - if FALSE, use x for a consensus position; else use the consensus letter
+ *            rfline       - RESULT: string containing a letter for consensus position, . for not
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Xref:      HMMER p7_Fastmodelmaker() uses an essentially identical
+ *            calculation to define model architecture, and could be
+ *            rewritten now to use this function. 
+ *            
+ *            A2M format alignment output uses this to define
+ *            consensus columns when #=RF annotation isn't available.
+ */
+int
+esl_msa_ReasonableRF(ESL_MSA *msa, double symfrac, int useconsseq, char *rfline)
+{
+  int    apos;
+  int    idx;
+  double r;
+  double totwgt;
+  float *counts = NULL;
+  int    status;
+
+  if (useconsseq)
+    ESL_ALLOC(counts, msa->abc->K * sizeof(float));
+
+#ifdef eslAUGMENT_ALPHABET
+  if (msa->flags & eslMSA_DIGITAL)
+  {
+
+      for (apos = 1; apos <= msa->alen; apos++) 
+      {
+        r = totwgt = 0.;
+        esl_vec_FSet(counts, msa->abc->K, 0.0);
+        for (idx = 0; idx < msa->nseq; idx++)
+        {
+          if  (esl_abc_XIsResidue(msa->abc, msa->ax[idx][apos]))
+          {
+            r += msa->wgt[idx]; totwgt += msa->wgt[idx];
+            if (useconsseq) esl_abc_FCount(msa->abc, counts, msa->ax[idx][apos], msa->wgt[idx]);
+          }
+          else if  (esl_abc_XIsGap(msa->abc,     msa->ax[idx][apos]))            totwgt += msa->wgt[idx];
+          else if  (esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos]))            continue;
+        }
+        if (r > 0. && r / totwgt >= symfrac) {
+          if (useconsseq) rfline[apos-1] = msa->abc->sym[esl_vec_FArgMax(counts, msa->abc->K)];
+          else            rfline[apos-1] = 'x';
+        }
+        else              rfline[apos-1] = '.';
+
+      }
+  }
+#endif
+  if (! (msa->flags & eslMSA_DIGITAL))
+  {
+      for (apos = 0; apos < msa->alen; apos++) 
+      {
+        r = totwgt = 0.;
+        for (idx = 0; idx < msa->nseq; idx++)
+        {
+            if    (isalpha(msa->aseq[idx][apos]))
+            {
+              r += msa->wgt[idx]; totwgt += msa->wgt[idx];
+              if (useconsseq)   esl_abc_FCount(msa->abc, counts, msa->abc->inmap[ (int) msa->aseq[idx][apos] ], msa->wgt[idx]);
+            }
+            else          totwgt += msa->wgt[idx];
+        }
+        if (r > 0. && r / totwgt >= symfrac) {
+          if (useconsseq) rfline[apos-1] = msa->abc->sym[esl_vec_FArgMax(counts, msa->abc->K)];
+          else            rfline[apos] = 'x';
+        }
+        else              rfline[apos] = '.';
+      }
+  }
+
+  rfline[msa->alen] = '\0';
+  if (counts) free(counts);
+  return eslOK;
+
+ERROR:
+  if (counts) free(counts);
+  return status;
+}
+
+
+/* Function:  esl_msa_MarkFragments()
+ * Synopsis:  Heuristically define seq fragments in an alignment.
+ *
+ * Purpose:   Use a heuristic to define sequence fragments (as opposed
+ *            to "full length" sequences) in alignment <msa>.
+ *            
+ *            The rule is that if the sequence has a raw (unaligned)
+ *            length not greater than <fragthresh> times the alignment
+ *            length in columns, the sequence is defined as a fragment.
+ *            
+ *            For each fragment, all leading and trailing gap symbols
+ *            (all gaps before the first residue and after the last
+ *            residue) are converted to missing data symbols
+ *            (typically '~', but nonstandard digital alphabets may
+ *            have defined another character).
+ *            
+ *            If <fragthresh> is 0.0, no nonempty sequence is defined
+ *            as a fragment.
+ *            
+ *            If <fragthresh> is 1.0, all sequences are defined as
+ *            fragments.
+ *
+ * Args:      msa        - alignment in which to define and mark seq fragments 
+ *            fragthresh - define frags if rlen <= fragthresh * alen.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_msa_MarkFragments(ESL_MSA *msa, double fragthresh)
+{
+  int    i;
+  int    pos;
+
+  for (i = 0; i < msa->nseq; i++)
+    if (msa_get_rlen(msa, i) <= fragthresh * msa->alen)
+      {  
+#ifdef eslAUGMENT_ALPHABET
+	if (msa->flags & eslMSA_DIGITAL) {
+	  for (pos = 1; pos <= msa->alen; pos++) {
+	    if (esl_abc_XIsResidue(msa->abc, msa->ax[i][pos])) break;
+	    msa->ax[i][pos] = esl_abc_XGetMissing(msa->abc);
+	  }
+	  for (pos = msa->alen; pos >= 1; pos--) {	  
+	    if (esl_abc_XIsResidue(msa->abc, msa->ax[i][pos])) break;
+	    msa->ax[i][pos] = esl_abc_XGetMissing(msa->abc);
+	  }
+	}
+#endif
+	if (! (msa->flags & eslMSA_DIGITAL)) 
+	  {
+	    for (pos = 0; pos < msa->alen; pos++) {
+	      if (isalnum(msa->aseq[i][pos])) break;
+	      msa->aseq[i][pos] = '~';
+	    }
+	    for (pos = msa->alen-1; pos >= 0; pos--) {	  
+	      if (isalnum(msa->aseq[i][pos])) break;
+	      msa->aseq[i][pos] = '~';
+	    }
+	  }
+      }
+  return eslOK;
+}
+
+
+/* Function:  esl_msa_SequenceSubset()
+ * Synopsis:  Select subset of sequences into a smaller MSA.
+ *
+ * Purpose:   Given an array <useme> (0..nseq-1) of TRUE/FALSE flags for each
+ *            sequence in an alignment <msa>; create a new alignment containing
+ *            only those seqs which are flagged <useme=TRUE>. Return a pointer
+ *            to this newly allocated alignment through <ret_new>. Caller is
+ *            responsible for freeing it.
+ *            
+ *            The smaller alignment might now contain columns
+ *            consisting entirely of gaps or missing data, depending
+ *            on what sequence subset was extracted. The caller may
+ *            want to immediately call <esl_msa_MinimGaps()> on the
+ *            new alignment to clean this up.
+ *
+ *            Unparsed GS and GR Stockholm annotation that is presumably still
+ *            valid is transferred to the new alignment. Unparsed GC, GF, and
+ *            comments that are potentially invalidated by taking the subset
+ *            of sequences are not transferred to the new MSA.
+ *            
+ *            Weights are transferred exactly. If they need to be
+ *            renormalized to some new total weight (such as the new,
+ *            smaller total sequence number), the caller must do that.
+ *            
+ *            <msa> may be in text mode or digital mode. The new MSA
+ *            in <ret_new> will have the same mode.
+ *
+ * Returns:   <eslOK> on success, and <ret_new> is set to point at a new
+ *            (smaller) alignment.
+ *
+ * Throws:    <eslEINVAL> if the subset has no sequences in it;
+ *            <eslEMEM> on allocation error.
+ *
+ * Xref:      squid's MSASmallerAlignment(), 1999.
+ */
+int
+esl_msa_SequenceSubset(const ESL_MSA *msa, const int *useme, ESL_MSA **ret_new)
+{
+  ESL_MSA *new = NULL;
+  int  nnew;			/* number of seqs in the new MSA */
+  int  oidx, nidx;		/* old, new indices */
+  int  i;
+  int  status;
+  
+  ESL_DASSERT1(( msa->nseq >  0 ));
+  ESL_DASSERT1(( msa->alen >= 0 ));  // This silences static checkers that think msa->alen might be -1.
+  *ret_new = NULL;
+
+  nnew = 0; 
+  for (oidx = 0; oidx < msa->nseq; oidx++)
+    if (useme[oidx]) nnew++;
+  if (nnew == 0) ESL_EXCEPTION(eslEINVAL, "No sequences selected");
+
+  /* Note that the Create() calls allocate exact space for the sequences,
+   * so we will strcpy()/memcpy() into them below.
+   */
+#ifdef eslAUGMENT_ALPHABET
+  if ((msa->flags & eslMSA_DIGITAL) &&
+      (new = esl_msa_CreateDigital(msa->abc, nnew, msa->alen)) == NULL)
+    {status = eslEMEM; goto ERROR; }
+#endif
+  if (! (msa->flags & eslMSA_DIGITAL) &&
+      (new = esl_msa_Create(nnew, msa->alen)) == NULL) 
+    {status = eslEMEM; goto ERROR; }
+  if (new == NULL) 
+    {status = eslEMEM; goto ERROR; }
+  
+
+  /* Copy the old to the new */
+  for (nidx = 0, oidx = 0; oidx < msa->nseq; oidx++)
+    if (useme[oidx])
+      {
+#ifdef eslAUGMENT_ALPHABET
+	if (msa->flags & eslMSA_DIGITAL)
+	  memcpy(new->ax[nidx], msa->ax[oidx], sizeof(ESL_DSQ) * (msa->alen+2));
+#endif
+	if (! (msa->flags & eslMSA_DIGITAL))
+	  strcpy(new->aseq[nidx], msa->aseq[oidx]);
+
+	if ((status = esl_strdup(msa->sqname[oidx], -1, &(new->sqname[nidx])))    != eslOK) goto ERROR;
+
+	new->wgt[nidx] = msa->wgt[oidx];
+      
+	if (msa->sqacc  && msa->sqacc[oidx]  && (status = esl_msa_SetSeqAccession  (new, nidx, msa->sqacc[oidx],  -1)) != eslOK) goto ERROR;
+	if (msa->sqdesc && msa->sqdesc[oidx] && (status = esl_msa_SetSeqDescription(new, nidx, msa->sqdesc[oidx], -1)) != eslOK) goto ERROR;
+	if (msa->ss     && msa->ss[oidx]     && (status = msa_set_seq_ss           (new, nidx, msa->ss[oidx]))         != eslOK) goto ERROR;
+	if (msa->sa     && msa->sa[oidx]     && (status = msa_set_seq_sa           (new, nidx, msa->sa[oidx]))         != eslOK) goto ERROR;
+	if (msa->pp     && msa->pp[oidx]     && (status = msa_set_seq_pp           (new, nidx, msa->pp[oidx]))         != eslOK) goto ERROR;
+
+	/* unparsed annotation */
+	for(i = 0; i < msa->ngs; i++) { if (msa->gs[i] && msa->gs[i][oidx] && (status = esl_msa_AddGS   (new, msa->gs_tag[i], -1, nidx, msa->gs[i][oidx], -1)) != eslOK) goto ERROR; }
+	for(i = 0; i < msa->ngr; i++) { if (msa->gr[i] && msa->gr[i][oidx] && (status = esl_msa_AppendGR(new, msa->gr_tag[i],     nidx, msa->gr[i][oidx]))     != eslOK) goto ERROR; }
+
+	nidx++;
+      }
+
+  new->flags = msa->flags;
+
+  if ((status = esl_strdup(msa->name,           -1, &(new->name)))    != eslOK) goto ERROR;
+  if ((status = esl_strdup(msa->desc,           -1, &(new->desc)))    != eslOK) goto ERROR;
+  if ((status = esl_strdup(msa->acc,            -1, &(new->acc)))     != eslOK) goto ERROR;
+  if ((status = esl_strdup(msa->au,             -1, &(new->au)))      != eslOK) goto ERROR;
+  if ((status = esl_strdup(msa->ss_cons, msa->alen, &(new->ss_cons))) != eslOK) goto ERROR;
+  if ((status = esl_strdup(msa->sa_cons, msa->alen, &(new->sa_cons))) != eslOK) goto ERROR;
+  if ((status = esl_strdup(msa->pp_cons, msa->alen, &(new->pp_cons))) != eslOK) goto ERROR;
+  if ((status = esl_strdup(msa->rf,      msa->alen, &(new->rf)))      != eslOK) goto ERROR;
+  if ((status = esl_strdup(msa->mm,      msa->alen, &(new->mm)))      != eslOK) goto ERROR;
+
+  for (i = 0; i < eslMSA_NCUTS; i++) {
+    new->cutoff[i] = msa->cutoff[i];
+    new->cutset[i] = msa->cutset[i];
+  }
+  
+  new->nseq  = nnew;
+  new->sqalloc = nnew;
+
+  /* Since we have a fully constructed MSA, we don't need the
+   * aux info used by parsers.
+   */
+  if (new->sqlen != NULL) { free(new->sqlen);  new->sqlen = NULL; }
+  if (new->sslen != NULL) { free(new->sslen);  new->sslen = NULL; }
+  if (new->salen != NULL) { free(new->salen);  new->salen = NULL; }
+  if (new->pplen != NULL) { free(new->pplen);  new->pplen = NULL; }
+  new->lastidx = -1;
+
+  *ret_new = new;
+  return eslOK;
+
+ ERROR:
+  if (new != NULL) esl_msa_Destroy(new);
+  *ret_new = NULL;
+  return status;
+}
+
+
+/* Function:  esl_msa_ColumnSubset()
+ * Synopsis:  Remove a selected subset of columns from the MSA
+ *
+ * Purpose:   Given an array <useme> (0..alen-1) of TRUE/FALSE flags,
+ *            where TRUE means "keep this column in the new alignment"; 
+ *            remove all columns annotated as FALSE in the <useme> 
+ *            array. This is done in-place on the MSA, so the MSA is 
+ *            modified: <msa->alen> is reduced, <msa->aseq> is shrunk 
+ *            (or <msa->ax>, in the case of a digital mode alignment), 
+ *            and all associated per-residue or per-column annotation
+ *            is shrunk.
+ * 
+ * Returns:   <eslOK> on success.
+ *            Possibilities from <esl_msa_RemoveBrokenBasepairs()> call:
+ *            <eslESYNTAX> if WUSS string for <SS_cons> or <msa->ss>
+ *            following <esl_wuss_nopseudo()> is inconsistent.
+ *            <eslEINVAL> if a derived ct array implies a pknotted SS.
+ */
+int
+esl_msa_ColumnSubset(ESL_MSA *msa, char *errbuf, const int *useme)
+{
+  int     status;
+  int64_t opos;			/* position in original alignment */
+  int64_t npos;			/* position in new alignment      */
+  int     idx;			/* sequence index */
+  int     i;			/* markup index */
+
+  /* For RNA/DNA digital alignments only:
+   * Remove any basepairs from SS_cons and individual sequence SS
+   * for aln columns i,j for which useme[i-1] or useme[j-1] are FALSE 
+   */
+  if ( msa->abc && (msa->abc->type == eslRNA || msa->abc->type == eslDNA) &&
+       (status = esl_msa_RemoveBrokenBasepairs(msa, errbuf, useme)) != eslOK) return status;
+
+  /* Since we're minimizing, we can overwrite in place, within the msa
+   * we've already got. 
+   * opos runs all the way to msa->alen to include (and move) the \0
+   * string terminators (or sentinel bytes, in the case of digital mode)
+   */
+  for (opos = 0, npos = 0; opos <= msa->alen; opos++)
+    {
+      if (opos < msa->alen && useme[opos] == FALSE) continue;
+
+      if (npos != opos)	/* small optimization */
+	{
+	  /* The alignment, and per-residue annotations */
+	  for (idx = 0; idx < msa->nseq; idx++)
+	    {
+#ifdef eslAUGMENT_ALPHABET
+	      if (msa->flags & eslMSA_DIGITAL) /* watch off-by-one in dsq indexing */
+		msa->ax[idx][npos+1] = msa->ax[idx][opos+1];
+	      else
+		msa->aseq[idx][npos] = msa->aseq[idx][opos];
+#else
+	      msa->aseq[idx][npos] = msa->aseq[idx][opos];
+#endif /*eslAUGMENT_ALPHABET*/
+	      if (msa->ss != NULL && msa->ss[idx] != NULL) msa->ss[idx][npos] = msa->ss[idx][opos];
+	      if (msa->sa != NULL && msa->sa[idx] != NULL) msa->sa[idx][npos] = msa->sa[idx][opos];
+	      if (msa->pp != NULL && msa->pp[idx] != NULL) msa->pp[idx][npos] = msa->pp[idx][opos];
+	      for (i = 0; i < msa->ngr; i++)
+		if (msa->gr[i][idx] != NULL)
+		  msa->gr[i][idx][npos] = msa->gr[i][idx][opos];
+	    }	  
+	  /* The per-column annotations */
+	  if (msa->ss_cons != NULL) msa->ss_cons[npos] = msa->ss_cons[opos];
+	  if (msa->sa_cons != NULL) msa->sa_cons[npos] = msa->sa_cons[opos];
+	  if (msa->pp_cons != NULL) msa->pp_cons[npos] = msa->pp_cons[opos];
+	  if (msa->rf      != NULL) msa->rf[npos]      = msa->rf[opos];
+	  if (msa->mm      != NULL) msa->mm[npos]      = msa->mm[opos];
+	  for (i = 0; i < msa->ngc; i++)
+	    msa->gc[i][npos] = msa->gc[i][opos];
+	}
+      npos++;
+    }
+  msa->alen = npos-1;	/* -1 because npos includes NUL terminators */
+  return eslOK;
+}
+
+/* Function:  esl_msa_MinimGaps()
+ * Synopsis:  Remove columns containing all gap symbols.
+ *
+ * Purpose:   Remove all columns in the multiple alignment <msa>
+ *            that consist entirely of gaps or missing data.
+ *            
+ *            For a text mode alignment, <gaps> is a string defining
+ *            the gap characters, such as <"-_.~">. For a digital mode
+ *            alignment, <gaps> may be passed as <NULL>, because the
+ *            internal alphabet already knows what the gap and missing
+ *            data characters are.
+ *            
+ *            <msa> is changed in-place to a narrower alignment
+ *            containing fewer columns. All per-residue and per-column
+ *            annotation is altered appropriately for the columns that
+ *            remain in the new alignment.
+ * 
+ *            If <consider_rf> is TRUE, only columns that are gaps
+ *            in all sequences of <msa> and a gap in the RF annotation 
+ *            of the alignment (<msa->rf>) will be removed. It is 
+ *            okay if <consider_rf> is TRUE and <msa->rf> is NULL
+ *            (no error is thrown), the function will behave as if 
+ *            <consider_rf> is FALSE.
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEMEM> on allocation failure.
+ *            Possibilities from <esl_msa_ColumnSubset()> call:
+ *            <eslESYNTAX> if WUSS string for <SS_cons> or <msa->ss>
+ *            following <esl_wuss_nopseudo()> is inconsistent.
+ *            <eslEINVAL> if a derived ct array implies a pknotted SS.
+ *
+ * Xref:      squid's MSAMingap().
+ */
+int
+esl_msa_MinimGaps(ESL_MSA *msa, char *errbuf, const char *gaps, int consider_rf)
+{
+  int    *useme = NULL;	/* array of TRUE/FALSE flags for which cols to keep */
+  int64_t apos;		/* column index   */
+  int     idx;		/* sequence index */
+  int     status;
+  int     rf_is_nongap; /* TRUE if current position is not a gap in msa->rf OR msa->rf is NULL */
+
+#ifdef eslAUGMENT_ALPHABET	   /* digital mode case */
+  if (msa->flags & eslMSA_DIGITAL) /* be careful of off-by-one: useme is 0..L-1 indexed */
+    {
+      ESL_ALLOC(useme, sizeof(int) * (msa->alen+1)); /* +1 is just to deal w/ alen=0 special case */
+
+      for (apos = 1; apos <= msa->alen; apos++)
+	{
+	  rf_is_nongap = ((msa->rf != NULL) && 
+			  (! esl_abc_CIsGap    (msa->abc, msa->rf[apos-1])) &&
+			  (! esl_abc_CIsMissing(msa->abc, msa->rf[apos-1]))) ?
+	    TRUE : FALSE;
+	  if(rf_is_nongap && consider_rf) { /* RF is not a gap and consider_rf is TRUE, keep this column */
+	    useme[apos-1] = TRUE;
+	  }
+	  else { /* check all seqs to see if this column is all gaps */
+	    for (idx = 0; idx < msa->nseq; idx++)
+	      if (! esl_abc_XIsGap    (msa->abc, msa->ax[idx][apos]) &&
+		  ! esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos]))
+		break;
+	    if (idx == msa->nseq) useme[apos-1] = FALSE; else useme[apos-1] = TRUE;
+	  }
+	}
+      if ((status = esl_msa_ColumnSubset(msa, errbuf, useme)) != eslOK) goto ERROR;
+    }
+#endif
+  if (! (msa->flags & eslMSA_DIGITAL)) /* text mode case */
+    {
+      if ( (status = esl_msa_MinimGapsText(msa, errbuf, gaps, consider_rf, FALSE)) != eslOK) goto ERROR;
+    }
+
+  if (useme) free(useme);
+  return eslOK;
+
+ ERROR:
+  if (useme) free(useme);
+  return status;
+}
+
+/* Function:  esl_msa_MinimGapsText()
+ * Synopsis:  Remove columns containing all gap symbols, from text mode msa
+ *
+ * Purpose:   Same as esl\_msa\_MinimGaps(), but specialized for a text mode
+ *            alignment where we don't know the alphabet. The issue is what 
+ *            to do about RNA secondary structure annotation (SS, SS\_cons)
+ *            when we remove columns, which can remove one side of a bp and
+ *            invalidate the annotation string. For digital alignments,
+ *            <esl_msa_MinimGaps()> knows the alphabet and will fix base pairs
+ *            for RNA/DNA alignments. For text mode, though, we have to 
+ *            get told to do it, because the default behavior for text mode
+ *            alis is to assume that the alphabet is totally arbitrary, and we're
+ *            not allowed to make assumptions about its symbols' meaning.
+ *            Hence, the <fix_bps> flag here. 
+ *            
+ *            Ditto for the <gaps> string: we don't know what symbols
+ *            are supposed to be gaps unless we're told something like 
+ *            <"-_.~">.
+ *
+ * Args:      msa         - alignment to remove all-gap cols from
+ *            errbuf      - if non-<NULL>, space for an informative error message on failure
+ *            gaps        - string of gap characters
+ *            consider_rf - if TRUE, also consider gap/nongap cols in RF annotation line
+ *            fix_bps     - if TRUE, fix any broken bps in SS/SS\_cons annotation lines.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure. 
+ *            Possibilities from <esl_msa_ColumnSubset()> call:
+ *            <eslESYNTAX> if WUSS string for <SS_cons> or <msa->ss>
+ *            following <esl_wuss_nopseudo()> is inconsistent.
+ *            <eslEINVAL> if a derived ct array implies a pknotted SS.
+ */
+int
+esl_msa_MinimGapsText(ESL_MSA *msa, char *errbuf, const char *gaps, int consider_rf, int fix_bps)
+{
+  int    *useme = NULL;	/* array of TRUE/FALSE flags for which cols to keep */
+  int64_t apos;		/* column index   */
+  int     idx;		/* sequence index */
+  int     status;
+  int     rf_is_nongap; /* TRUE if current position is not a gap in msa->rf OR msa->rf is NULL */
+
+  ESL_ALLOC(useme, sizeof(int) * (msa->alen+1)); /* +1 is just to deal w/ alen=0 special case */
+
+  for (apos = 0; apos < msa->alen; apos++)
+    {
+      rf_is_nongap = ((msa->rf != NULL) && (strchr(gaps, msa->rf[apos]) == NULL)) ?  TRUE : FALSE;
+      if (rf_is_nongap && consider_rf) useme[apos] = TRUE;  /* RF is not a gap and consider_rf is TRUE, keep this column */
+      else
+	{ /* check all seqs to see if this column is all gaps */
+	  for (idx = 0; idx < msa->nseq; idx++)
+	    if (strchr(gaps, msa->aseq[idx][apos]) == NULL) break;
+	  useme[apos] = (idx == msa->nseq ? FALSE : TRUE);
+	}
+    }
+
+  if (fix_bps && (status = esl_msa_RemoveBrokenBasepairs(msa, errbuf, useme)) != eslOK) goto ERROR;
+  if (           (status = esl_msa_ColumnSubset         (msa, errbuf, useme)) != eslOK) goto ERROR;
+
+  free(useme);
+  return eslOK;
+  
+ ERROR:
+  if (useme) free(useme);
+  return status;
+}
+
+
+/* Function:  esl_msa_NoGaps()
+ * Synopsis:  Remove columns containing any gap symbol.
+ *
+ * Purpose:   Remove all columns in the multiple alignment <msa> that
+ *            contain any gaps or missing data, such that the modified
+ *            MSA consists only of ungapped columns (a solid block of
+ *            residues). 
+ *            
+ *            This is useful for filtering alignments prior to
+ *            phylogenetic analysis using programs that can't deal
+ *            with gaps.
+ *            
+ *            For a text mode alignment, <gaps> is a string defining
+ *            the gap characters, such as <"-_.~">. For a digital mode
+ *            alignment, <gaps> may be passed as <NULL>, because the
+ *            internal alphabet already knows what the gap and
+ *            missing data characters are.
+ *    
+ *            <msa> is changed in-place to a narrower alignment
+ *            containing fewer columns. All per-residue and per-column
+ *            annotation is altered appropriately for the columns that
+ *            remain in the new alignment.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            Possibilities from <esl_msa_ColumnSubset()> call:
+ *            <eslESYNTAX> if WUSS string for <SS_cons> or <msa->ss>
+ *            following <esl_wuss_nopseudo()> is inconsistent.
+ *            <eslEINVAL> if a derived ct array implies a pknotted SS.
+ *
+ * Xref:      squid's MSANogap().
+ */
+int
+esl_msa_NoGaps(ESL_MSA *msa, char *errbuf, const char *gaps)
+{
+  int    *useme = NULL;	/* array of TRUE/FALSE flags for which cols to keep */
+  int64_t apos;		/* column index */
+  int     idx;		/* sequence index */
+  int     status;
+
+#ifdef eslAUGMENT_ALPHABET	   /* digital mode case */
+  if (msa->flags & eslMSA_DIGITAL) /* be careful of off-by-one: useme is 0..L-1 indexed */
+    {
+      ESL_ALLOC(useme, sizeof(int) * (msa->alen+1)); /* +1 is only to deal with alen=0 special case */
+
+      for (apos = 1; apos <= msa->alen; apos++)
+	{
+	  for (idx = 0; idx < msa->nseq; idx++)
+	    if (esl_abc_XIsGap    (msa->abc, msa->ax[idx][apos]) ||
+		esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos]))
+	      break;
+	  if (idx == msa->nseq) useme[apos-1] = TRUE; else useme[apos-1] = FALSE;
+	}
+
+      if ((status = esl_msa_ColumnSubset(msa, errbuf, useme)) != eslOK) goto ERROR;
+    }
+#endif
+  if (! (msa->flags & eslMSA_DIGITAL)) /* text mode case */
+    {
+      if ((status = esl_msa_NoGapsText(msa, errbuf, gaps, FALSE)) != eslOK) goto ERROR;
+    }
+  if (useme) free(useme);
+  return eslOK;
+
+ ERROR:
+  if (useme) free(useme);
+  return status;
+}
+
+
+/* Function:  esl_msa_NoGapsText()
+ * Synopsis:  Remove columns containing any gap symbol at all, for text mode msa.
+ *
+ * Purpose:   Like <esl_msa_NoGaps()> but specialized for textmode <msa> where
+ *            we don't know the alphabet, yet might need to fix alphabet-dependent
+ *            problems. 
+ *            
+ *            Like <esl_msa_MinimGapsText()>, the alphabet-dependent issue we might
+ *            want to fix is RNA secondary structure annotation (SS, SS\_cons);
+ *            removing a column might remove one side of a base pair annotation, and
+ *            invalidate a secondary structure string. <fix_bps> tells the function
+ *            that SS and SS\_cons are RNA WUSS format strings, and the function is
+ *            allowed to edit (and fix) them. Normally, in text mode msa's, we
+ *            are not allowed to interpret any meaning of symbols.
+ *
+ * Args:      msa     - alignment to remove any-gap cols from
+ *            errbuf  - if non-<NULL>, space for an informative error message on failure
+ *            gaps    - string of gap characters
+ *            fix_bps - if TRUE, fix any broken bps in SS/SS\_cons annotation lines
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            Possibilities from <esl_msa_ColumnSubset()> call:
+ *            <eslESYNTAX> if WUSS string for <SS_cons> or <msa->ss>
+ *            following <esl_wuss_nopseudo()> is inconsistent.
+ *            <eslEINVAL> if a derived ct array implies a pknotted SS.
+ */
+int
+esl_msa_NoGapsText(ESL_MSA *msa, char *errbuf, const char *gaps, int fix_bps)
+{
+  int    *useme = NULL;	/* array of TRUE/FALSE flags for which cols to keep */
+  int64_t apos;		/* column index */
+  int     idx;		/* sequence index */
+  int     status;
+
+  ESL_ALLOC(useme, sizeof(int) * (msa->alen+1)); /* +1 is only to deal with alen=0 special case */
+
+  for (apos = 0; apos < msa->alen; apos++)
+    {
+      for (idx = 0; idx < msa->nseq; idx++)
+	if (strchr(gaps, msa->aseq[idx][apos]) != NULL) break;
+      useme[apos] = (idx == msa->nseq ? TRUE : FALSE);
+    }
+  
+  if (fix_bps && (status = esl_msa_RemoveBrokenBasepairs(msa, errbuf, useme)) != eslOK) goto ERROR;
+  if (           (status = esl_msa_ColumnSubset         (msa, errbuf, useme)) != eslOK) goto ERROR;
+  
+  free(useme);
+  return eslOK;
+  
+ ERROR:
+  if (useme) free(useme);
+  return status;
+}
+
+
+/* Function:  esl_msa_SymConvert()
+ * Synopsis:  Global search/replace of symbols in an MSA.
+ *
+ * Purpose:   In the aligned sequences in a text-mode <msa>, convert any
+ *            residue in the string <oldsyms> to its counterpart (at the same
+ *            position) in string <newsyms>.
+ * 
+ *            To convert DNA to RNA, <oldsyms> could be "Tt" and
+ *            <newsyms> could be "Uu". To convert IUPAC symbols to
+ *            N's, <oldsyms> could be "RYMKSWHBVDrymkswhbvd" and
+ *            <newsyms> could be "NNNNNNNNNNnnnnnnnnnn". 
+ *            
+ *            As a special case, if <newsyms> consists of a single
+ *            character, then any character in the <oldsyms> is 
+ *            converted to this character. 
+ *            
+ *            Thus, <newsyms> must either be of the same length as
+ *            <oldsyms>, or of length 1. Anything else will cause
+ *            undefined behavior (and probably segfault). 
+ *            
+ *            The conversion is done in-place, so the <msa> is
+ *            modified.
+ *            
+ *            This is a poor man's hack for processing text mode MSAs
+ *            into a more consistent text alphabet. It is unnecessary
+ *            for digital mode MSAs, which are already in a standard
+ *            internal alphabet. Calling <esl_msa_SymConvert()> on a
+ *            digital mode alignment throws an <eslEINVAL> error.
+ *            
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEINVAL> if <msa> is in digital mode, or if the <oldsyms>
+ *            and <newsyms> strings aren't valid together.
+ */
+int
+esl_msa_SymConvert(ESL_MSA *msa, const char *oldsyms, const char *newsyms)
+{
+  int64_t apos;			/* column index */
+  int     idx;			/* sequence index */
+  char   *sptr;
+  int     special;
+
+  if (msa->flags & eslMSA_DIGITAL)
+    ESL_EXCEPTION(eslEINVAL, "can't SymConvert on digital mode alignment");
+  if ((strlen(oldsyms) != strlen(newsyms)) && strlen(newsyms) != 1)
+    ESL_EXCEPTION(eslEINVAL, "invalid newsyms/oldsyms pair");
+
+  special = (strlen(newsyms) == 1 ? TRUE : FALSE);
+
+  for (apos = 0; apos < msa->alen; apos++)
+    for (idx = 0; idx < msa->nseq; idx++)
+      if ((sptr = strchr(oldsyms, msa->aseq[idx][apos])) != NULL)
+	msa->aseq[idx][apos] = (special ? *newsyms : newsyms[sptr-oldsyms]);
+  return eslOK;
+}
+
+
+/* Function:  esl_msa_Checksum()
+ * Synopsis:  Calculate a checksum for an MSA.
+ * Incept:    SRE, Tue Sep 16 13:23:34 2008 [Janelia]
+ *
+ * Purpose:   Calculates a 32-bit checksum for <msa>.
+ * 
+ *            Only the alignment data are considered, not the sequence
+ *            names or other annotation. For text mode alignments, the
+ *            checksum is case sensitive.
+ *            
+ *            This is used as a quick way to try to verify that a
+ *            given alignment is identical to an expected one; for
+ *            example, when HMMER is mapping new sequence alignments
+ *            onto exactly the same seed alignment an HMM was built
+ *            from.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Xref:      The checksum is a modified version of Jenkin's hash;
+ *            see <esl_keyhash> for the original and citations.
+ */
+int
+esl_msa_Checksum(const ESL_MSA *msa, uint32_t *ret_checksum)
+{
+  uint32_t val = 0;
+  int      i,pos;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (msa->flags & eslMSA_DIGITAL)
+    {
+      for (i = 0; i < msa->nseq; i++)
+	for (pos = 1; pos <= msa->alen; pos++)
+	  {
+	    val += msa->ax[i][pos];
+	    val += (val << 10);
+	    val ^= (val >>  6);
+	  }
+    }
+#endif
+  if (! (msa->flags & eslMSA_DIGITAL))
+    {
+      for (i = 0; i < msa->nseq; i++)
+	for (pos = 0; pos < msa->alen; pos++)
+	  {
+	    val += msa->aseq[i][pos];
+	    val += (val << 10);
+	    val ^= (val >>  6);
+	  }
+    }
+  val += (val <<  3);
+  val ^= (val >> 11);
+  val += (val << 15);
+
+  *ret_checksum = val;
+  return eslOK;
+}
+
+
+/* Function:  esl_msa_RemoveBrokenBasepairsFromSS()
+ * Synopsis:  Remove basepairs about to be broken by a column downselect.
+ *
+ * Purpose:   Given an array <useme> (0..alen-1) of TRUE/FALSE flags,
+ *            remove any basepair from an SS string that is between
+ *            alignment columns (i,j) for which either <useme[i-1]> or
+ *            <useme[j-1]> is FALSE.  Called by
+ *            <esl_msa_RemoveBrokenBasepairs()>.
+ * 
+ *            The input SS string will be overwritten. If it was not
+ *            in full WUSS format when passed in, it will be upon
+ *            exit.  Note that that means if there's residues in the
+ *            input ss that correspond to gaps in an aligned sequence
+ *            or RF annotation, they will not be treated as gaps in
+ *            the returned SS. For example, a gap may become a '-'
+ *            character, a '<_>' character, or a ':' character. I'm not
+ *            sure how to deal with this in a better way. We could
+ *            demand an aligned sequence to use to de-gap the SS
+ *            string, but that would require disallowing any gap to be
+ *            involved in a basepair, which I'm not sure is something
+ *            we want to forbid.
+ * 
+ *            If the original SS is inconsistent it's left untouched
+ *            and non-<eslOK> is returned as listed below.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslESYNTAX> if SS string 
+  *            <eslEINVAL> if a derived ct array implies a pknotted 
+ *            SS, this should be impossible.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_msa_RemoveBrokenBasepairsFromSS(char *ss, char *errbuf, int len, const int *useme)
+{
+  int64_t  apos;                 /* alignment position */
+  int     *ct = NULL;	         /* 0..alen-1 base pair partners array for current sequence */
+  int      status;
+
+  ESL_ALLOC(ct, sizeof(int)  * (len+1));
+
+  if ((status = esl_wuss2ct(ss, len, ct)) != eslOK)  
+    ESL_FAIL(status, errbuf, "Consensus structure string is inconsistent.");
+  for (apos = 1; apos <= len; apos++) { 
+    if (!(useme[apos-1])) { 
+      if (ct[apos] != 0) ct[ct[apos]] = 0;
+      ct[apos] = 0;
+    }
+  }
+  /* All broken bps removed from ct, convert to WUSS SS string and overwrite SS */
+  if ((status = esl_ct2wuss(ct, len, ss)) != eslOK) 
+    ESL_FAIL(status, errbuf, "Error converting de-knotted bp ct array to WUSS notation.");
+  
+  free(ct);
+  return eslOK;
+
+ ERROR: 
+  if (ct != NULL) free(ct);
+  return status; 
+}  
+
+/* Function:  esl_msa_RemoveBrokenBasepairs()
+ * Synopsis:  Remove all annotated bps about to be broken by column downselect.
+ *
+ * Purpose:   Given an array <useme> (0..alen-1) of TRUE/FALSE flags,
+ *            remove any basepair from <SS_cons> and individual SS
+ *            annotation in alignment columns (i,j) for which either
+ *            <useme[i-1]> or <useme[j-1]> is FALSE.  Called
+ *            automatically from <esl_msa_ColumnSubset()> with same
+ *            <useme>.
+ * 
+ *            If the original structure data is inconsistent it's left
+ *            untouched.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslESYNTAX> if WUSS string for <SS_cons> or <msa->ss>
+ *            following <esl_wuss_nopseudo()> is inconsistent.
+ *            <eslEINVAL> if a derived ct array implies a pknotted 
+ *            SS, this should be impossible
+ *            
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_msa_RemoveBrokenBasepairs(ESL_MSA *msa, char *errbuf, const int *useme)
+{
+  int status;
+  int  i;
+
+  if (msa->ss_cons) {
+    if((status = esl_msa_RemoveBrokenBasepairsFromSS(msa->ss_cons, errbuf, msa->alen, useme)) != eslOK) return status; 
+  }
+  /* per-seq SS annotation */
+  if (msa->ss) {
+    for(i = 0; i < msa->nseq; i++) { 
+      if (msa->ss[i]) {
+	if ((status = esl_msa_RemoveBrokenBasepairsFromSS(msa->ss[i], errbuf, msa->alen, useme)) != eslOK) return status; 
+      }
+    }
+  }
+  return eslOK;
+}  
+
+/* msa_get_rlen()
+ *
+ * Returns the raw (unaligned) length of sequence number <seqidx>
+ * in <msa>. 
+ */
+static int64_t
+msa_get_rlen(const ESL_MSA *msa, int seqidx)
+{
+  int64_t rlen = 0;
+  int     pos;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (msa->flags & eslMSA_DIGITAL) rlen = esl_abc_dsqrlen(msa->abc, msa->ax[seqidx]);
+#endif
+  if (! (msa->flags & eslMSA_DIGITAL))
+    {
+      for (pos = 0; pos < msa->alen; pos++)
+	if (isalnum(msa->aseq[seqidx][pos])) rlen++;
+    }
+  return rlen;
+}
+
+
+
+/* Function:  esl_msa_ReverseComplement()
+ * Synopsis:  Reverse complement a multiple alignment
+ * Incept:    SRE, Wed Feb 10 12:52:13 2016 [JB251 BOS-MCO]
+ *
+ * Purpose:   Reverse complement the multiple alignment <msa>, in place.
+ *
+ *            <msa> must be in digital mode, and it must be in an alphabet
+ *            that permits reverse complementation (<eslDNA>, <eslRNA>).
+ *          
+ *            In addition to reverse complementing the sequence data,
+ *            per-column and per-residue annotation also gets reversed
+ *            or reverse complemented. Secondary structure annotations
+ *            (the consensus structure <ss_cons>, and any individual
+ *            structures <ss[i]>) are assumed to be in WUSS format,
+ *            and are "reverse complemented" using
+ *            <esl_wuss_reverse()>.  Other annotations are assumed to
+ *            be textual, and are simply reversed. Beware, because
+ *            this can go awry if an optional <gc> or <gr> annotation
+ *            has semantics that would require complementation (an RNA
+ *            structure annotation, for example).
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINCOMPAT> if <msa> isn't digital, or isn't in an alphabet 
+ *                that allows reverse complementation.
+ */
+int
+esl_msa_ReverseComplement(ESL_MSA *msa)
+{
+  int i;
+  int m;
+  int status;
+
+  if (! (msa->flags & eslMSA_DIGITAL)) ESL_EXCEPTION(eslEINCOMPAT, "msa isn't digital");
+  if ( msa->abc->complement == NULL)   ESL_EXCEPTION(eslEINCOMPAT, "msa alphabet can't be reverse complemented");
+
+  if (msa->ss_cons) esl_wuss_reverse(msa->ss_cons, msa->ss_cons);
+  if (msa->sa_cons) esl_vec_CReverse(msa->sa_cons, msa->sa_cons, msa->alen);
+  if (msa->pp_cons) esl_vec_CReverse(msa->pp_cons, msa->pp_cons, msa->alen);
+  if (msa->rf)      esl_vec_CReverse(msa->rf,      msa->rf,      msa->alen);
+  if (msa->mm)      esl_vec_CReverse(msa->mm,      msa->mm,      msa->alen);
+  
+  for (m = 0; m < msa->ngc; m++)
+    if (msa->gc && msa->gc[m]) esl_vec_CReverse(msa->gc[m], msa->gc[m], msa->alen);
+
+  for (i = 0; i < msa->nseq; i++)
+    {
+      if ((status = esl_abc_revcomp(msa->abc, msa->ax[i], msa->alen)) != eslOK) goto ERROR;
+      if (msa->ss && msa->ss[i]) esl_wuss_reverse(msa->ss[i], msa->ss[i]);
+      if (msa->sa && msa->sa[i]) esl_vec_CReverse(msa->sa[i], msa->sa[i], msa->alen);
+      if (msa->pp && msa->pp[i]) esl_vec_CReverse(msa->pp[i], msa->pp[i], msa->alen);
+    }
+
+  for (m = 0; m < msa->ngr; m++)
+    for (i = 0; i < msa->nseq; i++)
+      if (msa->gr && msa->gr[m] && msa->gr[m][i]) 
+	esl_vec_CReverse(msa->gr[m][i], msa->gr[m][i], msa->alen);
+
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+
+
+#ifdef eslAUGMENT_KEYHASH
+/* Function:  esl_msa_Hash()
+ * Synopsis:  Hash sequence names, internally, for faster access/lookup.
+ *
+ * Purpose:   Caller wants to map sequence names to integer index in the
+ *            <ESL_MSA> structure, using the internal <msa->index> keyhash.
+ *            Create (or recreate) that index.
+ *            
+ *            Each sequence name must be unique. If not, returns
+ *            <eslEDUP>, and <msa->index> is <NULL> (if it already
+ *            existed, it is destroyed).
+ *
+ * Returns:   <eslOK> on success, and <msa->index> is available for 
+ *            keyhash lookups.
+ *            
+ *            <eslEDUP> if any sequence names are duplicated, and 
+ *            <msa->index> is <NULL>.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_msa_Hash(ESL_MSA *msa)
+{
+  int idx;
+  int status;
+
+  if   (msa->index)  esl_keyhash_Reuse(msa->index);
+  else  msa->index = esl_keyhash_Create();
+  if (! msa->index) { status = eslEMEM; goto ERROR; }
+  
+  for (idx = 0; idx < msa->nseq; idx++)
+    if ((status = esl_keyhash_Store(msa->index, msa->sqname[idx], -1, NULL)) != eslOK) goto ERROR;
+
+  return eslOK;
+
+ ERROR:
+  if (msa->index) { esl_keyhash_Destroy(msa->index); msa->index = NULL; }
+  return status;
+}
+#endif /*eslAUGMENT_KEYHASH*/
+
+/*----------------- end of misc MSA functions -------------------*/
+
+
+/*****************************************************************
+ * 5. Debugging, testing, development
+ *****************************************************************/
+
+/* Function:  esl_msa_Validate()
+ * Synopsis:  Validate an ESL_MSA structure.
+ *
+ * Purpose:   Validates the fields of the <ESL_MSA> structure
+ *            <msa>. Makes sure required information is present,
+ *            consistent. If so, return <eslOK>.
+ *
+ *            If a problem is detected, return <eslFAIL>. Caller may
+ *            also provide an optional <errmsg> pointer to a buffer of
+ *            at least <eslERRBUFSIZE>; if this message buffer is
+ *            provided, an informative error message is put there.
+ *            
+ * Args:      msa    - MSA structure to validate
+ *            errmsg - OPTIONAL: error message buffer, at least <eslERRBUFSIZE>; or <NULL>
+ *            
+ * Returns:   <eslOK> on success, and <errmsg> (if provided) is set
+ *            to an empty string.
+ *            
+ *            <eslFAIL> on failure and <errmsg> (if provided) contains 
+ *            the reason for the failure.
+ */
+int
+esl_msa_Validate(const ESL_MSA *msa, char *errmsg)
+{
+  int idx;
+
+  if (msa->nseq == 0) ESL_FAIL(eslFAIL, errmsg, "no alignment data found");
+
+  for (idx = 0; idx < msa->nseq; idx++)
+    {
+#ifdef eslAUGMENT_ALPHABET
+      if (msa->flags & eslMSA_DIGITAL)
+	{
+	  if (! msa->ax || ! msa->ax[idx])               ESL_FAIL(eslFAIL, errmsg, "seq %d: no sequence", idx); 
+	  if (esl_abc_dsqlen(msa->ax[idx]) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "seq %d: wrong length", idx);
+	}
+#endif
+      if (! (msa->flags & eslMSA_DIGITAL))
+	{
+	  if (! msa->aseq || ! msa->aseq[idx])     ESL_FAIL(eslFAIL, errmsg, "seq %d: no sequence", idx); 
+	  if (strlen(msa->aseq[idx]) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "seq %d: wrong length", idx);
+	}
+
+      /* either all weights must be set, or none of them */
+      if (   msa->flags & eslMSA_HASWGTS) { if (msa->wgt[idx] == -1.0) ESL_FAIL(eslFAIL, errmsg, "seq %d: no weight set", idx);}
+      else                                { if (msa->wgt[idx] != 1.0)  ESL_FAIL(eslFAIL, errmsg, "seq %d: HASWGTS flag down, wgt must be default", idx); }
+
+      if (msa->ss &&  msa->ss[idx] &&  strlen(msa->ss[idx]) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "seq %d: SS wrong length", idx);
+      if (msa->sa &&  msa->sa[idx] &&  strlen(msa->sa[idx]) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "seq %d: SA wrong length", idx);
+      if (msa->pp &&  msa->pp[idx] &&  strlen(msa->pp[idx]) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "seq %d: PP wrong length", idx);
+    }
+
+  /* if cons SS is present, must have length right */
+  if (msa->ss_cons && strlen(msa->ss_cons) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "SS_cons wrong length");
+  if (msa->sa_cons && strlen(msa->sa_cons) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "SA_cons wrong length");
+  if (msa->pp_cons && strlen(msa->pp_cons) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "PP_cons wrong length");
+  if (msa->rf      && strlen(msa->rf)      != msa->alen) ESL_FAIL(eslFAIL, errmsg, "RF wrong length");
+  if (msa->mm      && strlen(msa->mm   )   != msa->alen) ESL_FAIL(eslFAIL, errmsg, "MM wrong length");
+
+  return eslOK;
+}
+
+
+/* Function:  esl_msa_CreateFromString()
+ * Synopsis:  Creates a small <ESL_MSA> from a test case string.
+ *
+ * Purpose:   A convenience for making small test cases in the test
+ *            suites: given the contents of a complete multiple
+ *            sequence alignment file as a single string <s> in
+ *            alignment format <fmt>, convert it to an <ESL_MSA>.
+ *            
+ *            For example, 
+ *            {\small\begin{verbatim}
+ *            esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nseq1 AAAAA\nseq2 AAAAA\n//\n", 
+ *                                     eslMSAFILE_STOCKHOLM)
+ *            \end{verbatim}}
+ *            creates an ungapped alignment of two AAAAA sequences.
+ *
+ * Returns:   a pointer to the new <ESL_MSA> on success.
+ *
+ * Throws:    <NULL> if it fails to obtain, open, or read the temporary file
+ *            that it puts the string <s> in.
+ */
+ESL_MSA *
+esl_msa_CreateFromString(const char *s, int fmt)
+{
+  ESL_MSAFILE  *mfp  = NULL;
+  ESL_MSA      *msa  = NULL;
+
+  if (esl_msafile_OpenMem(NULL, s, -1, fmt, NULL, &mfp) != eslOK) goto ERROR;
+  if (esl_msafile_Read(mfp, &msa)                       != eslOK) goto ERROR;
+  esl_msafile_Close(mfp);
+  return msa;
+
+ ERROR:
+  if (mfp) esl_msafile_Close(mfp);
+  if (msa) esl_msa_Destroy(msa);                        
+  return NULL;
+}
+
+
+/* Function:  esl_msa_Compare()
+ * Synopsis:  Compare two MSAs for equality.
+ *
+ * Purpose:   Returns <eslOK> if the mandatory and optional contents
+ *            of MSAs <a1> and <a2> are identical; otherwise return
+ *            <eslFAIL>.
+ *            
+ *            Only mandatory and parsed optional information is
+ *            compared. Unparsed Stockholm markup is not compared.
+ */
+int
+esl_msa_Compare(ESL_MSA *a1, ESL_MSA *a2)
+{
+  if (esl_msa_CompareMandatory(a1, a2) != eslOK) return eslFAIL;
+  if (esl_msa_CompareOptional(a1, a2)  != eslOK) return eslFAIL;
+  return eslOK;
+}
+
+/* Function:  esl_msa_CompareMandatory()
+ * Synopsis:  Compare mandatory subset of MSA contents.
+ * Incept:    SRE, Wed Jun 13 09:42:56 2007 [Janelia]
+ *
+ * Purpose:   Compare mandatory contents of two MSAs, <a1> and <a2>.
+ *            This comprises <aseq> (or <ax>, for a digital alignment);
+ *            <sqname>, <wgt>, <alen>, <nseq>, and <flags>.
+ *
+ * Returns:   <eslOK> if the MSAs are identical; 
+ *            <eslFAIL> if they are not.
+ */
+int
+esl_msa_CompareMandatory(ESL_MSA *a1, ESL_MSA *a2)
+{
+  int i;
+
+  if (a1->nseq  != a2->nseq)  return eslFAIL;
+  if (a1->alen  != a2->alen)  return eslFAIL;
+  if (a1->flags != a2->flags) return eslFAIL;
+
+  for (i = 0; i < a1->nseq; i++)
+    {
+      if (strcmp(a1->sqname[i], a2->sqname[i])        != 0)     return eslFAIL;
+      if (esl_DCompare(a1->wgt[i], a2->wgt[i], 0.001) != eslOK) return eslFAIL;
+#ifdef eslAUGMENT_ALPHABET
+      if ((a1->flags & eslMSA_DIGITAL) &&
+	  memcmp(a1->ax[i], a2->ax[i], sizeof(ESL_DSQ) * (a1->alen+2)) != 0) 
+	return eslFAIL;
+#endif
+      if (! (a1->flags & eslMSA_DIGITAL) && strcmp(a1->aseq[i], a2->aseq[i]) != 0) return eslFAIL;
+    }
+  return eslOK;
+}
+
+/* Function:  esl_msa_CompareOptional()
+ * Synopsis:  Compare optional subset of MSA contents.
+ * Incept:    SRE, Wed Jun 13 09:52:48 2007 [Janelia]
+ *
+ * Purpose:   Compare optional contents of two MSAs, <a1> and <a2>.
+ *
+ * Returns:   <eslOK> if the MSAs are identical; 
+ *            <eslFAIL> if they are not.
+ */
+int
+esl_msa_CompareOptional(ESL_MSA *a1, ESL_MSA *a2)
+{
+  int i;
+
+  if (esl_CCompare(a1->name,    a2->name)    != eslOK) return eslFAIL;
+  if (esl_CCompare(a1->desc,    a2->desc)    != eslOK) return eslFAIL;
+  if (esl_CCompare(a1->acc,     a2->acc)     != eslOK) return eslFAIL;
+  if (esl_CCompare(a1->au,      a2->au)      != eslOK) return eslFAIL;
+  if (esl_CCompare(a1->ss_cons, a2->ss_cons) != eslOK) return eslFAIL;
+  if (esl_CCompare(a1->sa_cons, a2->sa_cons) != eslOK) return eslFAIL;
+  if (esl_CCompare(a1->pp_cons, a2->pp_cons) != eslOK) return eslFAIL;
+  if (esl_CCompare(a1->rf,      a2->rf)      != eslOK) return eslFAIL;
+  if (esl_CCompare(a1->mm,      a2->mm)      != eslOK) return eslFAIL;
+  
+  if (a1->sqacc != NULL && a2->sqacc != NULL) {
+    for (i = 0; i < a1->nseq; i++) if (esl_CCompare(a1->sqacc[i], a2->sqacc[i]) != eslOK) return eslFAIL;
+  } else if (a1->sqacc != NULL || a2->sqacc != NULL) return eslFAIL;
+
+  if (a1->sqdesc != NULL && a2->sqdesc != NULL) {
+    for (i = 0; i < a1->nseq; i++) if (esl_CCompare(a1->sqdesc[i], a2->sqdesc[i]) != eslOK) return eslFAIL;
+  } else if (a1->sqdesc != NULL || a2->sqdesc != NULL) return eslFAIL;
+
+  if (a1->ss != NULL && a2->ss != NULL) {
+    for (i = 0; i < a1->nseq; i++) if (esl_CCompare(a1->ss[i], a2->ss[i]) != eslOK) return eslFAIL;
+  } else if (a1->ss != NULL || a2->ss != NULL) return eslFAIL;
+
+  if (a1->sa != NULL && a2->sa != NULL) {
+    for (i = 0; i < a1->nseq; i++) if (esl_CCompare(a1->sa[i], a2->sa[i]) != eslOK) return eslFAIL;
+  } else if (a1->sa != NULL || a2->sa != NULL) return eslFAIL;
+
+  if (a1->pp != NULL && a2->pp != NULL) {
+    for (i = 0; i < a1->nseq; i++) if (esl_CCompare(a1->pp[i], a2->pp[i]) != eslOK) return eslFAIL;
+  } else if (a1->pp != NULL || a2->pp != NULL) return eslFAIL;
+  
+  for (i = 0; i < eslMSA_NCUTS; i++)
+    {
+      if (a1->cutset[i] && a2->cutset[i]) {
+	if (esl_FCompare(a1->cutoff[i], a2->cutoff[i], 0.01) != eslOK) return eslFAIL;
+      } else if (a1->cutset[i] || a2->cutset[i]) return eslFAIL;
+    }
+  return eslOK;
+}
+/*---------------- end of debugging/development routines  -------------------*/
+
+
+/******************************************************************************
+ * 15. Unit tests
+ *****************************************************************************/
+#ifdef eslMSA_TESTDRIVE
+
+/* write_known_msa()
+ * Write a known MSA to a tmpfile in Stockholm format.
+ */
+static void
+write_known_msa(FILE *ofp)
+{
+  fprintf(ofp, "# STOCKHOLM 1.0\n");
+  fprintf(ofp, "seq1 --ACDEFGHIK~LMNPQRS-TVWY\n");
+  fprintf(ofp, "seq2 aaACDEFGHIK~LMNPQRS-TVWY\n");
+  fprintf(ofp, "seq3 aaACDEFGHIK~LMNPQRS-TVWY\n");
+  fprintf(ofp, "\n");
+  fprintf(ofp, "seq1 ACDEFGHIKLMNPQRSTVWY~~~\n");
+  fprintf(ofp, "seq2 ACDEFGHIKLMNPQRSTVWYyyy\n");
+  fprintf(ofp, "seq3 ACDEFGHIKLMNPQRSTVWYyyy\n");
+  fprintf(ofp, "//\n");
+  return;
+}
+  
+
+/* compare_to_known() 
+ * SRE, Thu Sep  7 09:52:07 2006 [Janelia]
+ * Spotcheck an ESL_MSA to make sure it matches the test known alignment.
+ */
+static void
+compare_to_known(ESL_MSA *msa)
+{
+  if (msa->alen != 47)                     esl_fatal("bad alen");
+  if (msa->nseq != 3)                      esl_fatal("bad nseq");
+  if (strcmp(msa->sqname[1], "seq2") != 0) esl_fatal("bad sqname");
+#ifdef eslAUGMENT_ALPHABET
+  if (msa->flags & eslMSA_DIGITAL)
+    {
+      if (! esl_abc_XIsGap(msa->abc, msa->ax[0][2]))      esl_fatal("no gap where expected");
+      if (! esl_abc_XIsMissing(msa->abc, msa->ax[0][47])) esl_fatal("no missing-data symbol where expected");
+      if (msa->ax[1][1]  != 0)                            esl_fatal("spotcheck on ax failed"); /* 0=A */
+      if (msa->ax[1][47] != 19)                           esl_fatal("spotcheck on ax failed"); /*19=Y */
+    }
+#endif
+  if (! (msa->flags & eslMSA_DIGITAL))
+    {
+      if (strcasecmp(msa->aseq[0], "--ACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWY~~~") != 0) esl_fatal("aseq 0 is bad");
+      if (strcasecmp(msa->aseq[1], "aaACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWYyyy") != 0) esl_fatal("aseq 1 is bad");
+      if (strcasecmp(msa->aseq[2], "aaACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWYyyy") != 0) esl_fatal("aseq 2 is bad");
+    }
+  return;
+}
+
+/* Unit tests for every function in the exposed API
+ */
+static void
+utest_Create(void)
+{
+  ESL_MSA *msa = NULL;
+
+  msa = esl_msa_Create(16, -1);	  /* nseq blocksize 16, growable */
+  esl_msa_Destroy(msa);
+  msa = esl_msa_Create(16, 100);  /* nseq=16, alen=100, not growable */
+  esl_msa_Destroy(msa);
+
+  return;
+}
+
+static void
+utest_Destroy(void)
+{
+  ESL_MSA *msa = NULL;
+#ifdef eslAUGMENT_ALPHABET
+  ESL_ALPHABET *abc;
+#endif
+
+  msa = esl_msa_Create(16, -1);	
+  esl_msa_Destroy(msa);	 	  /* normal usage */
+
+#ifdef eslAUGMENT_ALPHABET
+  abc = esl_alphabet_Create(eslRNA);
+  msa = esl_msa_CreateDigital(abc, 16, 100);	
+  esl_msa_Destroy(msa);	 	  /* normal usage, digital mode */
+  esl_alphabet_Destroy(abc);
+#endif
+
+  esl_msa_Destroy(NULL);	  /* should tolerate NULL argument */
+  return;
+}
+
+static void
+utest_Expand(void)
+{
+  ESL_MSA *msa = NULL;
+#ifdef eslAUGMENT_ALPHABET
+  ESL_ALPHABET *abc;
+#endif
+
+  msa = esl_msa_Create(16, -1);                	    /* growable */
+  if (esl_msa_Expand(msa) != eslOK) esl_fatal("Expand failed"); /* expand by 2x in nseq */
+  esl_msa_Destroy(msa);
+
+  msa = esl_msa_Create(16, 100);                        /* not growable */
+#ifdef eslTEST_THROWING
+  if (esl_msa_Expand(msa) != eslEINVAL) esl_fatal("Expand should have failed but didn't"); /* should fail w/ EINVAL*/
+#endif
+  esl_msa_Destroy(msa);
+  
+#ifdef eslAUGMENT_ALPHABET
+  abc = esl_alphabet_Create(eslDNA);
+  msa = esl_msa_CreateDigital(abc, 16, -1);               /* growable */
+  if (esl_msa_Expand(msa) != eslOK) esl_fatal("Expand failed"); /* expand by 2x in nseq */
+  esl_msa_Destroy(msa);
+
+  msa = esl_msa_CreateDigital(abc, 16, 100);                 /* not growable */
+#ifdef eslTEST_THROWING
+  if (esl_msa_Expand(msa) != eslEINVAL) esl_fatal("Expand should have failed but didn't"); /* should fail w/ EINVAL*/
+#endif /* eslTEST_THROWING*/
+  esl_msa_Destroy(msa);
+  esl_alphabet_Destroy(abc);
+#endif
+  return;
+}
+
+
+#ifdef eslAUGMENT_ALPHABET
+static void
+utest_CreateDigital(ESL_ALPHABET *abc)
+{
+  char    *msg = "CreateDigital() unit test failure";
+  ESL_MSA *msa = NULL;
+
+  msa = esl_msa_CreateDigital(abc, 16, -1);	  /* nseq blocksize 16, growable */
+  if (! (msa->flags & eslMSA_DIGITAL)) esl_fatal(msg);
+  if (msa->ax   == NULL)               esl_fatal(msg);
+  if (msa->aseq != NULL)               esl_fatal(msg);
+  if (esl_msa_Expand(msa) != eslOK)    esl_fatal(msg);
+  esl_msa_Destroy(msa);
+
+  msa = esl_msa_CreateDigital(abc, 16, 100);  /* nseq=16, alen=100, not growable */
+#ifdef eslTEST_THROWING
+  if (esl_msa_Expand(msa) != eslEINVAL) esl_fatal(msg); /* shouldn't grow */
+#endif
+  esl_msa_Destroy(msa);
+
+  return;
+}
+#endif /*eslAUGMENT_ALPHABET*/
+
+#ifdef eslAUGMENT_ALPHABET
+static void
+utest_Digitize(ESL_ALPHABET *abc, char *filename)
+{
+  char         *msg = "Digitize() unit test failure";
+  ESL_MSAFILE  *mfp = NULL;
+  ESL_MSA      *msa = NULL;
+  int c, i, pos;
+
+  /* Get ourselves a copy of the known alignment that we can muck with */
+  if (esl_msafile_Open(NULL, filename, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK)  esl_fatal(msg);
+  if (esl_msafile_Read(mfp, &msa) != eslOK)                                               esl_fatal(msg);
+  esl_msafile_Close(mfp);
+  
+  /* Deliberately corrupt it with inval character in the middle */
+  i   = msa->nseq / 2;
+  pos = msa->alen / 2;
+  c   = msa->aseq[i][pos];
+  msa->aseq[i][pos] = '%';
+  if (esl_msa_Digitize(abc, msa, NULL) != eslEINVAL) esl_fatal(msg); /* should detect corruption as normal error */
+  msa->aseq[i][pos] = c;	                               /* restore original         */
+  compare_to_known(msa);
+  if (esl_msa_Digitize(abc, msa, NULL) != eslOK)     esl_fatal(msg); /* should be fine now       */
+  compare_to_known(msa);
+
+  esl_msa_Destroy(msa);
+  return;
+}
+#endif /*eslAUGMENT_ALPHABET*/
+
+
+#ifdef eslAUGMENT_ALPHABET
+static void
+utest_Textize(ESL_ALPHABET *abc, char *filename)
+{
+  char         *msg = "Textize() unit test failure";
+  ESL_MSAFILE  *mfp = NULL;
+  ESL_MSA      *msa = NULL;
+
+  if (esl_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &mfp) != eslOK)  esl_fatal(msg);
+  if (esl_msafile_Read(mfp, &msa) != eslOK)   esl_fatal(msg);
+  if (esl_msa_Textize(msa)        != eslOK)   esl_fatal(msg);
+  compare_to_known(msa);
+
+  esl_msafile_Close(mfp);
+  esl_msa_Destroy(msa);
+  return;
+}
+#endif /*eslAUGMENT_ALPHABET*/
+
+static void
+utest_SequenceSubset(ESL_MSA *m1)
+{
+  char    *msg   = "SequenceSubset() unit test failure";
+  ESL_MSA *m2    = NULL;
+  int     *useme = NULL;
+  int      i,j;
+  int      n2;
+
+  /* Make every other sequence (1,3..) get excluded from the subset */
+  useme = malloc(m1->nseq * sizeof(int));
+  for (i = 0, n2 = 0; i < m1->nseq; i++)
+    if (i%2 == 0) { useme[i] = TRUE; n2++; }
+    else          useme[i] = FALSE;
+
+  if (esl_msa_SequenceSubset(m1, useme, &m2) != eslOK) esl_fatal(msg);
+  if (m2->nseq != n2) esl_fatal(msg);
+  
+  for (i = 0, j = 0; i < m1->nseq; i++)
+    {
+      if (useme[i])
+	{
+	  if (strcmp(m1->sqname[i], m2->sqname[j]) != 0) esl_fatal(msg);
+	  if (! (m1->flags & eslMSA_DIGITAL) && (strcmp(m1->aseq[i],   m2->aseq[j])  != 0)) esl_fatal(msg);
+#ifdef eslAUGMENT_ALPHABET
+	  if (  (m1->flags & eslMSA_DIGITAL) && memcmp(m1->ax[i], m2->ax[j], sizeof(ESL_DSQ) * (m1->alen+2)) != 0) esl_fatal(msg);
+#endif
+	  j++;
+	}
+    }  
+  esl_msa_Destroy(m2);
+  free(useme);
+  return;
+}
+
+static void
+utest_MinimGaps(char *tmpfile)
+{
+  char         *msg = "MinimGaps() unit test failure";
+  ESL_MSAFILE  *mfp = NULL;
+  ESL_MSA      *msa = NULL;
+#ifdef eslAUGMENT_ALPHABET
+  ESL_ALPHABET *abc = NULL;
+#endif
+
+  if (esl_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_Read(mfp, &msa) != eslOK)                                             esl_fatal(msg);
+  esl_msafile_Close(mfp);
+  if (esl_msa_MinimGaps(msa, NULL, "-~", FALSE) != eslOK) esl_fatal(msg);
+  if (msa->alen        != 45)  esl_fatal(msg); /* orig =47, with one all - column and one all ~ column */
+  if (msa->aseq[0][11] != 'L') esl_fatal(msg); /* L shifted from column 13->12 */
+  if (msa->aseq[0][18] != 'T') esl_fatal(msg); /* T shifted from column 21->19 */
+  esl_msa_Destroy(msa);
+
+#ifdef eslAUGMENT_ALPHABET
+  if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg);
+  if (esl_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg);
+  esl_msafile_Close(mfp);
+  if (esl_msa_MinimGaps(msa, NULL, NULL, FALSE) != eslOK) esl_fatal(msg);
+  if (msa->alen            != 45)  esl_fatal(msg); /* orig =47, with one all - column and one all ~ column */
+  if (esl_msa_Textize(msa) != eslOK) esl_fatal(msg);
+  if (msa->aseq[0][11] != 'L') esl_fatal(msg); /* L shifted from column 13->12 */
+  if (msa->aseq[0][18] != 'T') esl_fatal(msg); /* T shifted from column 21->19 */
+  esl_msa_Destroy(msa);
+  esl_alphabet_Destroy(abc);
+#endif
+  return;
+}  
+
+static void
+utest_NoGaps(char *tmpfile)
+{
+  char         *msg = "NoGaps() unit test failure";
+  ESL_MSAFILE  *mfp = NULL;
+  ESL_MSA      *msa = NULL;
+#ifdef eslAUGMENT_ALPHABET
+  ESL_ALPHABET *abc = NULL;
+#endif
+
+  if (esl_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_Read(mfp, &msa) != eslOK)                                             esl_fatal(msg);
+  esl_msafile_Close(mfp);
+  if (esl_msa_NoGaps(msa, NULL, "-~") != eslOK) esl_fatal(msg);
+  if (msa->alen        != 40)  esl_fatal(msg); /* orig =47, w/ 7 columns with gaps */
+  if (msa->aseq[0][9]  != 'L') esl_fatal(msg); /* L shifted from column 13->10  */
+  if (msa->aseq[0][16] != 'T') esl_fatal(msg); /* T shifted from column 21->17 */
+  if (msa->aseq[0][39] != 'Y') esl_fatal(msg); /* Y shifted from column 47->40 */
+  esl_msa_Destroy(msa);
+
+#ifdef eslAUGMENT_ALPHABET
+  if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg);
+  if (esl_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg);
+  esl_msafile_Close(mfp);
+  if (esl_msa_NoGaps(msa, NULL, NULL) != eslOK) esl_fatal(msg);
+  if (msa->alen        != 40)  esl_fatal(msg); /* orig =47, with one all - column and one all ~ column */
+  if (esl_msa_Textize(msa) != eslOK) esl_fatal(msg);
+  if (msa->aseq[0][9]  != 'L') esl_fatal(msg); /* L shifted from column 13->10  */
+  if (msa->aseq[0][16] != 'T') esl_fatal(msg); /* T shifted from column 21->17 */
+  if (msa->aseq[0][39] != 'Y') esl_fatal(msg); /* Y shifted from column 47->40 */
+  esl_msa_Destroy(msa);
+  esl_alphabet_Destroy(abc);
+#endif
+  return;
+}  
+
+static void
+utest_SymConvert(char *tmpfile)
+{
+  char         *msg = "SymConvert() unit test failure";
+  ESL_MSAFILE  *mfp = NULL;
+  ESL_MSA      *msa = NULL;
+#ifdef eslAUGMENT_ALPHABET
+  ESL_ALPHABET *abc = NULL;
+#endif
+
+  if (esl_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_Read(mfp, &msa) != eslOK)                                             esl_fatal(msg);
+  esl_msafile_Close(mfp);
+
+  /* many->one version */
+  if (esl_msa_SymConvert(msa, "VWY", "-")          != eslOK) esl_fatal(msg); /* 6 columns convert to all-gap: now 8/47 */
+  if (esl_msa_MinimGaps(msa, NULL, "-~", FALSE)    != eslOK) esl_fatal(msg); /* now we're 39 columns long */
+  if (msa->alen                                    != 39)    esl_fatal(msg);
+
+  /* many->many version */
+  if (esl_msa_SymConvert(msa, "DEF", "VWY") != eslOK) esl_fatal(msg);
+  if (msa->aseq[0][4]                       != 'V')   esl_fatal(msg);
+  if (msa->aseq[0][5]                       != 'W')   esl_fatal(msg);
+  if (msa->aseq[0][23]                      != 'Y')   esl_fatal(msg); /* F in orig col 29; -5; converted to Y */
+
+  /* bad calls */
+#ifdef eslTEST_THROWING
+  if (esl_msa_SymConvert(msa, "XXX", "XX")  != eslEINVAL) esl_fatal(msg); /* check for clean fail on mismatched args */
+#endif
+  esl_msa_Destroy(msa);
+  
+#ifdef eslAUGMENT_ALPHABET
+  if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg);
+  if (esl_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg);
+  esl_msafile_Close(mfp);
+#ifdef eslTEST_THROWING
+  if (esl_msa_SymConvert(msa, "Tt", "Uu") != eslEINVAL) esl_fatal(msg); /* must cleanly fail on digital mode msa */
+#endif
+  esl_msa_Destroy(msa);
+  esl_alphabet_Destroy(abc);
+#endif
+  return;
+}
+
+/* Exercise a boundary case: zero length MSA (alen=0) */
+/* Given an input *digital* MSA as a starting point, we clone it, 
+ * column subset it to zero length, then make sure that 
+ * various MSA functions operate correctly on it;
+ * then we textize it and test it in text mode; then we 
+ * digitize it again, and throw it away.
+ * (The input <msa> is unchanged.)
+ */
+static void
+utest_ZeroLengthMSA(const char *tmpfile)
+{
+  char         *msg      = "zero length msa unit test failed";
+  ESL_MSAFILE  *mfp      = NULL;
+  ESL_MSA      *z1       = NULL;
+  ESL_MSA      *z2       = NULL;
+  ESL_MSA      *z3       = NULL;
+  int          *useme    = NULL;
+  int           nuseme   = 0;
+  int           i;
+  char          errbuf[eslERRBUFSIZE];
+
+  /* Read a text mode alignment from the tmpfile */
+  if (esl_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_Read(mfp, &z1) != eslOK)                                              esl_fatal(msg);
+  esl_msafile_Close(mfp);
+
+  /* make an alen=0 text alignment by column subsetting */
+  nuseme = ESL_MAX(z1->alen, z1->nseq);
+  if ((useme = malloc(sizeof(int) * nuseme)) == NULL)  esl_fatal(msg);
+  for (i = 0; i < z1->alen; i++) useme[i] = 0;
+  if (esl_msa_ColumnSubset(z1, errbuf, useme) != eslOK) esl_fatal(msg);
+
+  /* These should all no-op if alen=0*/
+  if (esl_msa_MinimGaps(z1, NULL, "-", FALSE) != eslOK) esl_fatal(msg);
+  if (esl_msa_NoGaps(z1, NULL, "-")           != eslOK) esl_fatal(msg);
+  if (esl_msa_SymConvert(z1,"RY","NN")        != eslOK) esl_fatal(msg);
+  
+  /* test sequence subsetting by removing the first sequence */
+  for (i = 1; i < z1->nseq; i++) useme[i] = 1;  
+  if (esl_msa_SequenceSubset(z1, useme, &z2) != eslOK) esl_fatal(msg);
+  esl_msa_Destroy(z1);
+  z1 = NULL;  // we may reuse z1 below.
+  /* keep z2; we'll compare it to z3 in the end */
+      
+#ifdef eslAUGMENT_ALPHABET
+  ESL_ALPHABET *abc;
+
+  /* Now read the same alignment, in digital mode */
+  if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg);
+  if (esl_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_Read(mfp, &z1) != eslOK) esl_fatal(msg);
+  esl_msafile_Close(mfp);
+
+  /* Now make an alen=0 alignment in digital mode */
+  for (i = 0; i < z1->alen; i++) useme[i] = 0;
+  if (esl_msa_ColumnSubset(z1, errbuf, useme) != eslOK) esl_fatal(msg);
+
+  /* again these should all no-op if alen=0*/
+  if (esl_msa_MinimGaps(z1, NULL, NULL, FALSE) != eslOK) esl_fatal(msg);
+  if (esl_msa_NoGaps(z1, NULL, NULL)           != eslOK) esl_fatal(msg);
+  /* SymConvert throws EINVAL on a digital mode alignment */
+
+  /* test sequence subsetting by removing the first sequence */
+  for (i = 1; i < z1->nseq; i++) useme[i] = 1;  
+  if (esl_msa_SequenceSubset(z1, useme, &z3) != eslOK) esl_fatal(msg);
+  esl_msa_Destroy(z1);
+
+  if ((z1 = esl_msa_Clone(z3))        == NULL)  esl_fatal(msg); /* z1 is now alen=0, digital */
+  if (esl_msa_Textize(z3)             != eslOK) esl_fatal(msg); /* convert z3 back to text mode */
+  if (esl_msa_Compare(z2, z3)         != eslOK) esl_fatal(msg); /* compare in text mode */
+  if (esl_msa_Digitize(abc, z2, NULL) != eslOK) esl_fatal(msg); /* now z2 is digital */
+  if (esl_msa_Compare(z1, z2)         != eslOK) esl_fatal(msg); /* compare digital mode z1,z2 */
+
+  esl_alphabet_Destroy(abc);
+  esl_msa_Destroy(z1);
+  esl_msa_Destroy(z3);
+#endif /*eslAUGMENT_ALPHABET*/
+
+  esl_msa_Destroy(z2);
+  free(useme);
+}
+
+#endif /*eslMSA_TESTDRIVE*/
+/*------------------------ end of unit tests --------------------------------*/
+
+
+/*****************************************************************************
+ * 7. Test driver
+ *****************************************************************************/
+#ifdef eslMSA_TESTDRIVE
+/* 
+ * gcc -g -Wall -o esl_msa_utest -I. -DeslMSA_TESTDRIVE -DAUGMENT_KEYHASH esl_msa.c esl_keyhash.c easel.c -lm
+ * gcc -g -Wall -o esl_msa_utest -I. -DeslMSA_TESTDRIVE -DAUGMENT_ALPHABET esl_msa.c esl_alphabet.c easel.c -lm
+ * gcc -g -Wall -o esl_msa_utest -I. -DeslMSA_TESTDRIVE -DAUGMENT_SSI esl_msa.c esl_ssi.c easel.c -lm
+ * gcc -g -Wall -o esl_msa_utest -L. -I. -DeslMSA_TESTDRIVE esl_msa.c -leasel -lm
+ * gcc -g -Wall -o esl_msa_utest -L. -I. -DeslTEST_THROWING -DeslMSA_TESTDRIVE esl_msa.c -leasel -lm
+ * ./msa_utest
+ */
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#ifdef eslAUGMENT_KEYHASH
+#include "esl_keyhash.h"
+#endif
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#ifdef eslAUGMENT_SSI
+#include "esl_ssi.h"
+#endif
+#include "esl_msa.h"
+
+
+int
+main(int argc, char **argv)
+{
+  ESL_MSAFILE    *mfp          = NULL;
+  ESL_MSA        *msa          = NULL;
+  FILE           *fp           = NULL;
+  char            tmpfile[16]  = "esltmpXXXXXX"; /* tmpfile template */
+#ifdef eslAUGMENT_ALPHABET
+  ESL_ALPHABET   *abc          = NULL;
+#endif
+
+#ifdef eslTEST_THROWING
+  esl_exception_SetHandler(&esl_nonfatal_handler);
+#endif
+
+  /* Create a known Stockholm test alignment in a tempfile.
+   */
+  if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal("failed to create tmpfile");
+  write_known_msa(fp);
+  fclose(fp);
+
+  /* Read it back in for use in tests.
+   */
+  if (esl_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal("Failed to open MSA tmp file");
+  if (esl_msafile_Read(mfp, &msa)                                             != eslOK) esl_fatal("Failed to read MSA tmp file");
+  esl_msafile_Close(mfp);
+
+  /* Unit tests
+   */
+  utest_Create();
+  utest_Destroy();
+  utest_Expand();
+  utest_SequenceSubset(msa);
+  utest_MinimGaps(tmpfile);
+  utest_NoGaps(tmpfile);
+  utest_SymConvert(tmpfile);
+  utest_ZeroLengthMSA(tmpfile);	/* this tests in digital mode too if eslAUGMENT_ALPHABET */
+  esl_msa_Destroy(msa);
+
+#ifdef eslAUGMENT_ALPHABET
+  if ((abc = esl_alphabet_Create(eslAMINO)) == NULL)                                     esl_fatal("alphabet creation failed");
+  if (esl_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK)  esl_fatal("MSA digital open failed");
+  if (esl_msafile_Read(mfp, &msa) != eslOK)  esl_fatal("MSA digital read failed");
+  esl_msafile_Close(mfp);
+
+  utest_CreateDigital(abc);
+  utest_Digitize(abc, tmpfile);
+  utest_Textize(abc, tmpfile);
+
+  esl_alphabet_Destroy(abc);
+  esl_msa_Destroy(msa);
+#endif
+
+  remove(tmpfile);
+  exit(0);	/* success  */
+}
+#endif /*eslMSA_TESTDRIVE*/
+/*-------------------- end of test driver ---------------------*/
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msa.h b/esl_msa.h
new file mode 100644
index 0000000..cde88a8
--- /dev/null
+++ b/esl_msa.h
@@ -0,0 +1,211 @@
+/* Multiple sequence alignments 
+ */
+#ifndef eslMSA_INCLUDED
+#define eslMSA_INCLUDED
+
+#include <stdio.h>
+
+#include "esl_alphabet.h"	/* digital alphabets                         */
+#include "esl_keyhash.h"	/* string hashes, for mapping uniq seq names */
+#include "esl_ssi.h"		/* indexes of large flatfiles on disk        */
+
+/* The following constants define the Pfam/Rfam cutoff set we propagate
+ * from Stockholm format msa's into HMMER and Infernal models.
+ */
+/*::cexcerpt::msa_cutoffs::begin::*/
+#define eslMSA_TC1     0
+#define eslMSA_TC2     1
+#define eslMSA_GA1     2
+#define eslMSA_GA2     3
+#define eslMSA_NC1     4
+#define eslMSA_NC2     5
+#define eslMSA_NCUTS   6
+/*::cexcerpt::msa_cutoffs::end::*/
+
+/* Object: ESL_MSA
+ * 
+ * A multiple sequence alignment.
+ */
+typedef struct {
+  /* Mandatory information associated with the alignment.
+   * (The important stuff.)
+   */
+  /*::cexcerpt::msa_mandatory::begin::*/
+  char  **aseq;       /* alignment itself, [0..nseq-1][0..alen-1], \0-terminated */
+  char  **sqname;     /* sequence names [0..nseq-1][], \0-terminated             */
+  double *wgt;        /* sequence weights [0..nseq-1], default 1.0               */
+  int64_t alen;       /* length of alignment (columns); or (if growable) -1      */
+  int     nseq;       /* number of seqs in alignment; or (if growable) blocksize */
+  int     flags;      /* flags for what info has been set                        */
+  /*::cexcerpt::msa_mandatory::end::*/
+
+#ifdef eslAUGMENT_ALPHABET
+  /* When augmented w/ digital alphabets, we can store pre-digitized data in
+   * ax[][], instead of the text info in aseq[][].
+   */
+  ESL_ALPHABET  *abc;    	/* reference ptr to alphabet            */
+  ESL_DSQ      **ax;		/* digitized aseqs [0..nseq-1][1..alen] */
+#endif
+
+  /* Optional information that we understand, and that we might have.
+   * (The occasionally useful stuff.)
+   */
+  /*::cexcerpt::msa_optional::begin::*/
+  char  *name;      /* name of alignment, or NULL                                           */
+  char  *desc;      /* description of alignment, or NULL                                    */
+  char  *acc;       /* accession of alignment, or NULL                                      */
+  char  *au;        /* "author" information, or NULL                                        */
+  char  *ss_cons;   /* consensus sec structure, or NULL;  [0..alen-1], even in digital mode */
+  char  *sa_cons;   /* consensus surface access, or NULL; [0..alen-1], even in digital mode */
+  char  *pp_cons;   /* consensus posterior prob, or NULL; [0..alen-1], even in digital mode */
+  char  *rf;        /* reference coord system, or NULL;   [0..alen-1], even in digital mode */
+  char  *mm;        /* model mask, or NULL;   [0..alen-1], even in digital mode             */
+  char **sqacc;     /* accession numbers for sequences i                                    */
+  char **sqdesc;    /* description lines for sequences i                                    */
+  char **ss;        /* per-seq secondary structures, or NULL                                */
+  char **sa;        /* per-seq surface accessibilities, or NULL                             */
+  char **pp;        /* posterior prob per residue, or NULL                                  */
+  float  cutoff[eslMSA_NCUTS];  /* NC/TC/GA cutoffs propagated to Pfam/Rfam                 */
+  int    cutset[eslMSA_NCUTS];  /* TRUE if a cutoff is set; else FALSE                      */
+  /*::cexcerpt::msa_optional::end::*/
+
+  /* Info needed for maintenance of the data structure 
+   * (internal stuff.)
+   */
+  int      sqalloc;		/* # seqs currently allocated for           */
+  int64_t *sqlen;               /* individual seq lengths during parsing    */
+  int64_t *sslen;               /* individual ss lengths during parsing     */
+  int64_t *salen;               /* individual sa lengths during parsing     */
+  int64_t *pplen;               /* individual pp lengths during parsing     */
+  int      lastidx;		/* last index we saw; use for guessing next */
+
+  /* Optional information, especially Stockholm markup.
+   * (The stuff we don't understand, but we can regurgitate.)
+   *
+   * That is, we know what type of information it is, but it's
+   * either (interpreted as) free-text comment, or it's Stockholm 
+   * markup with unfamiliar tags.
+   */
+  char  **comment;              /* free text comments, or NULL      */
+  int     ncomment;		/* number of comment lines          */
+  int     alloc_ncomment;	/* number of comment lines alloc'ed */
+
+  char  **gf_tag;               /* markup tags for unparsed #=GF lines  */
+  char  **gf;                   /* annotations for unparsed #=GF lines  */
+  int     ngf;			/* number of unparsed #=GF lines        */
+  int     alloc_ngf;		/* number of gf lines alloc'ed          */
+
+  char  **gs_tag;               /* markup tags for unparsed #=GS lines     */
+  char ***gs;                   /* [0..ngs-1][0..nseq-1][free text] markup */
+  int     ngs;                  /* number of #=GS tag types                */
+  
+  char  **gc_tag;               /* markup tags for unparsed #=GC lines  */
+  char  **gc;                   /* [0..ngc-1][0..alen-1] markup         */
+  int     ngc;                  /* number of #=GC tag types             */
+
+  char  **gr_tag;               /* markup tags for unparsed #=GR lines     */
+  char ***gr;                   /* [0..ngr-1][0..nseq-1][0..alen-1] markup */
+  int     ngr;			/* number of #=GR tag types                */
+
+  /* Optional augmentation w/ keyhashes. 
+   * This can significantly speed up parsing of large alignments
+   * with many (>1,000) sequences.
+   */
+#ifdef eslAUGMENT_KEYHASH 
+  ESL_KEYHASH  *index;	        /* name ->seqidx hash table */
+  ESL_KEYHASH  *gs_idx;         /* hash of #=GS tag types   */
+  ESL_KEYHASH  *gc_idx;         /* hash of #=GC tag types   */
+  ESL_KEYHASH  *gr_idx;         /* hash of #=GR tag types   */
+#endif /*eslAUGMENT_KEYHASH*/
+
+#ifdef eslAUGMENT_SSI
+  off_t         offset;		/* disk offset to start of 1st line of this MSA's record */
+#endif
+} ESL_MSA;
+
+
+
+/* Flags for msa->flags */
+#define eslMSA_HASWGTS (1 << 0)  /* 1 if wgts were set, 0 if default 1.0's */
+#define eslMSA_DIGITAL (1 << 1)	 /* if ax[][] is used instead of aseq[][]  */  
+
+
+/* Declarations of the API */
+
+/* 1. The ESL_MSA object */
+extern ESL_MSA *esl_msa_Create(int nseq, int64_t alen);
+extern int      esl_msa_Expand(ESL_MSA *msa);
+extern int      esl_msa_Copy (const ESL_MSA *msa, ESL_MSA *new);
+extern ESL_MSA *esl_msa_Clone(const ESL_MSA *msa);
+extern void     esl_msa_Destroy(ESL_MSA *msa);
+
+/* 2. Digital mode MSA's (augmentation: alphabet) */
+#ifdef eslAUGMENT_ALPHABET
+extern int      esl_msa_GuessAlphabet(const ESL_MSA *msa, int *ret_type);
+extern ESL_MSA *esl_msa_CreateDigital(const ESL_ALPHABET *abc, int nseq, int64_t alen);
+extern int      esl_msa_Digitize(const ESL_ALPHABET *abc, ESL_MSA *msa, char *errmsg);
+extern int      esl_msa_Textize(ESL_MSA *msa);
+extern int      esl_msa_ConvertDegen2X(ESL_MSA *msa);
+#endif /*eslAUGMENT_ALPHABET*/
+
+/* 3. Setting or checking data fields in an ESL_MSA */
+extern int esl_msa_SetName          (ESL_MSA *msa, const char *s, esl_pos_t n);
+extern int esl_msa_SetDesc          (ESL_MSA *msa, const char *s, esl_pos_t n);
+extern int esl_msa_SetAccession     (ESL_MSA *msa, const char *s, esl_pos_t n);
+extern int esl_msa_SetAuthor        (ESL_MSA *msa, const char *s, esl_pos_t n);
+extern int esl_msa_SetSeqName       (ESL_MSA *msa, int idx, const char *s, esl_pos_t n);
+extern int esl_msa_SetSeqAccession  (ESL_MSA *msa, int idx, const char *s, esl_pos_t n);
+extern int esl_msa_SetSeqDescription(ESL_MSA *msa, int idx, const char *s, esl_pos_t n);
+extern int esl_msa_SetDefaultWeights(ESL_MSA *msa);
+
+extern int esl_msa_FormatName          (ESL_MSA *msa, const char *name,    ...);
+extern int esl_msa_FormatDesc          (ESL_MSA *msa, const char *desc,    ...);
+extern int esl_msa_FormatAccession     (ESL_MSA *msa, const char *acc,     ...);
+extern int esl_msa_FormatAuthor        (ESL_MSA *msa, const char *author,  ...);
+extern int esl_msa_FormatSeqName       (ESL_MSA *msa, int idx, const char *name, ...);
+extern int esl_msa_FormatSeqAccession  (ESL_MSA *msa, int idx, const char *acc, ...);
+extern int esl_msa_FormatSeqDescription(ESL_MSA *msa, int idx, const char *desc, ...);
+
+extern int esl_msa_AddComment(ESL_MSA *msa, char *p,   esl_pos_t n);
+extern int esl_msa_AddGF     (ESL_MSA *msa, char *tag, esl_pos_t taglen,            char *value, esl_pos_t vlen);
+extern int esl_msa_AddGS     (ESL_MSA *msa, char *tag, esl_pos_t taglen, int sqidx, char *value, esl_pos_t vlen);
+extern int esl_msa_AppendGC  (ESL_MSA *msa, char *tag, char *value);
+extern int esl_msa_AppendGR  (ESL_MSA *msa, char *tag, int sqidx, char *value);
+
+extern int esl_msa_CheckUniqueNames(const ESL_MSA *msa);
+
+/* 4. Miscellaneous functions for manipulating MSAs */
+extern int esl_msa_ReasonableRF(ESL_MSA *msa, double symfrac, int useconsseq, char *rfline);
+extern int esl_msa_MarkFragments(ESL_MSA *msa, double fragthresh);
+extern int esl_msa_SequenceSubset(const ESL_MSA *msa, const int *useme, ESL_MSA **ret_new);
+extern int esl_msa_ColumnSubset (ESL_MSA *msa, char *errbuf, const int *useme);
+extern int esl_msa_MinimGaps    (ESL_MSA *msa, char *errbuf, const char *gaps, int consider_rf);
+extern int esl_msa_MinimGapsText(ESL_MSA *msa, char *errbuf, const char *gaps, int consider_rf, int fix_bps);
+extern int esl_msa_NoGaps       (ESL_MSA *msa, char *errbuf, const char *gaps);
+extern int esl_msa_NoGapsText   (ESL_MSA *msa, char *errbuf, const char *gaps, int fix_bps);
+extern int esl_msa_SymConvert(ESL_MSA *msa, const char *oldsyms, const char *newsyms);
+extern int esl_msa_Checksum(const ESL_MSA *msa, uint32_t *ret_checksum);
+
+extern int esl_msa_RemoveBrokenBasepairsFromSS(char *ss, char *errbuf, int len, const int *useme);
+extern int esl_msa_RemoveBrokenBasepairs(ESL_MSA *msa, char *errbuf, const int *useme);
+
+extern int esl_msa_ReverseComplement(ESL_MSA *msa);
+#ifdef eslAUGMENT_KEYHASH
+extern int esl_msa_Hash(ESL_MSA *msa);
+#endif
+
+/* 5. Debugging, testing, development */
+extern int      esl_msa_Validate(const ESL_MSA *msa, char *errmsg);
+extern ESL_MSA *esl_msa_CreateFromString(const char *s, int fmt);
+extern int      esl_msa_Compare         (ESL_MSA *a1, ESL_MSA *a2);
+extern int      esl_msa_CompareMandatory(ESL_MSA *a1, ESL_MSA *a2);
+extern int      esl_msa_CompareOptional (ESL_MSA *a1, ESL_MSA *a2);
+#endif /*eslMSA_INCLUDED*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $URL$
+ * SVN $Id$
+ *****************************************************************/
diff --git a/esl_msa.tex b/esl_msa.tex
new file mode 100644
index 0000000..aee50f0
--- /dev/null
+++ b/esl_msa.tex
@@ -0,0 +1,282 @@
+The \eslmod{msa} module reads and writes multiple sequence alignment
+files. The API is summarized in Table~\ref{tbl:msa_api}.
+
+The module uses two objects. An \ccode{ESL\_MSA} holds a multiple
+sequence alignment. A \ccode{ESL\_MSAFILE} is an alignment file,
+opened for input. No object is needed for output of an alignment file;
+a normal C \ccode{FILE} stream is used for output.  
+
+Augmentation with the \eslmod{alphabet} module allows MSAs to be input
+as digital Easel sequence data (\ccode{ESL\_DSQ}), or converted to and
+from digital data. Normally aligned sequences are stored in an
+\ccode{ESL\_MSA} just as text strings, exactly as they appeared in the
+input file.
+
+Augmentation with the \eslmod{ssi} module allows rapid random access
+of SSI-indexed large MSA database files like Pfam or Rfam. When
+augmented, the \ccode{esl\_msafile\_Open()} and
+\ccode{esl\_msafile\_OpenDigital()} functions automatically open an
+accompanying SSI index, if it is present.
+
+Augmentation with the \eslmod{keyhash} module allows much better
+performance on parsing large Stockholm alignment files, by
+accelerating indexing of some internal data structures.
+
+
+% Table generated by autodoc -t esl_msa.c (so don't edit here, edit esl_msa.c:)
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\apisubhead{The ESL\_MSA object                                           }\\
+\hyperlink{func:esl_msa_Create()}{\ccode{esl\_msa\_Create()}} & Creates an \ccode{ESL\_MSA} object.\\
+\hyperlink{func:esl_msa_CreateFromString()}{\ccode{esl\_msa\_CreateFromString()}} & Creates a small \ccode{ESL\_MSA} from a test case string.\\
+\hyperlink{func:esl_msa_Expand()}{\ccode{esl\_msa\_Expand()}} & Reallocate for more sequences.\\
+\hyperlink{func:esl_msa_Destroy()}{\ccode{esl\_msa\_Destroy()}} & Frees an \ccode{ESL\_MSA}.\\
+\apisubhead{The ESL\_MSAFILE object                                       }\\
+\hyperlink{func:esl_msafile_Open()}{\ccode{eslx\_msafile\_Open()}} & Open an MSA file for input.\\
+\hyperlink{func:esl_msafile_Close()}{\ccode{eslx\_msafile\_Close()}} & Closes an open MSA file.\\
+\apisubhead{Digital mode MSA's (augmentation: alphabet)}\\
+\hyperlink{func:esl_msa_GuessAlphabet()}{\ccode{esl\_msa\_GuessAlphabet()}} & Guess alphabet of MSA.\\
+\hyperlink{func:esl_msa_CreateDigital()}{\ccode{esl\_msa\_CreateDigital()}} & Create a digital \ccode{ESL\_MSA}.\\
+\hyperlink{func:esl_msa_Digitize()}{\ccode{esl\_msa\_Digitize()}} & Digitizes an msa, converting it from text mode.\\
+\hyperlink{func:esl_msa_Textize()}{\ccode{esl\_msa\_Textize()}} & Convert a digital msa to text mode.\\
+\hyperlink{func:esl_msafile_GuessAlphabet()}{\ccode{eslx\_msafile\_GuessAlphabet()}} & Guess what kind of sequences the alignment file contains.\\
+\hyperlink{func:esl_msafile_OpenDigital()}{\ccode{eslx\_msafile\_OpenDigital()}} & Open an msa file for digital input.\\
+\hyperlink{func:esl_msafile_SetDigital()}{\ccode{eslx\_msafile\_SetDigital()}} & Set an open \ccode{ESL\_MSAFILE} to read in digital mode.\\
+\apisubhead{Random MSA database access (augmentation: ssi)}\\
+\hyperlink{func:esl_msafile_PositionByKey()}{\ccode{eslx\_msafile\_PositionByKey()}} & Use SSI to reposition file to start of named MSA.\\
+
+\apisubhead{General i/o API, all alignment formats                                 }\\
+%\hyperlink{func:esl_msa_Read()}{\ccode{esl\_msa\_Read()}} & Read next MSA from a file.\\
+%\hyperlink{func:esl_msa_Write()}{\ccode{esl\_msa\_Write()}} & Write an MSA to a file.\\
+%\hyperlink{func:esl_msa_GuessFileFormat()}{\ccode{esl\_msa\_GuessFileFormat()}} & Determine the format of an open MSA file.\\
+\apisubhead{Miscellaneous functions for manipulating MSAs}\\
+\hyperlink{func:esl_msa_SequenceSubset()}{\ccode{esl\_msa\_SequenceSubset()}} & Select subset of sequences into a smaller MSA.\\
+\hyperlink{func:esl_msa_ColumnSubset()}{\ccode{esl\_msa\_ColumnSubset()}} & Remove a selected subset of columns from the MSA
+\\
+\hyperlink{func:esl_msa_MinimGaps()}{\ccode{esl\_msa\_MinimGaps()}} & Remove columns containing all gym symbols.\\
+\hyperlink{func:esl_msa_NoGaps()}{\ccode{esl\_msa\_NoGaps()}} & Remove columns containing any gap symbol.\\
+\hyperlink{func:esl_msa_SymConvert()}{\ccode{esl\_msa\_SymConvert()}} & Global search/replace of symbols in an MSA.\\
+\hyperlink{func:esl_msa_AddComment()}{\ccode{esl\_msa\_AddComment()}} & Description.\\
+\hyperlink{func:esl_msa_AddGF()}{\ccode{esl\_msa\_AddGF()}} & Description.\\
+\hyperlink{func:esl_msa_AddGS()}{\ccode{esl\_msa\_AddGS()}} & Description.\\
+\hyperlink{func:esl_msa_AppendGC()}{\ccode{esl\_msa\_AppendGC()}} & Description.\\
+\hyperlink{func:esl_msa_AppendGR()}{\ccode{esl\_msa\_AppendGR()}} & Description.\\
+\hyperlink{func:esl_msa_Compare()}{\ccode{esl\_msa\_Compare()}} & Compare two MSAs for equality.\\
+\hyperlink{func:esl_msa_CompareMandatory()}{\ccode{esl\_msa\_CompareMandatory()}} & Compare mandatory subset of MSA contents.\\
+\hyperlink{func:esl_msa_CompareOptional()}{\ccode{esl\_msa\_CompareOptional()}} & Compare optional subset of MSA contents.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{msa} API.}
+\label{tbl:msa_api}
+\end{table}
+
+
+
+
+\subsection{Example of using msa}
+
+Here's an example of opening an MSA file and reading one or more
+alignments from it:
+
+%%\input{cexcerpts/msa_example}
+
+Some things about the use of the API in the example are worth noting:
+
+\begin{enumerate}
+\item The format of the alignment file can either be automatically
+      detected, or set by the caller when the file is opened.
+      Autodetection is invoked when the caller passes a format code
+      (here, \ccode{fmt}) of
+      \ccode{eslMSAFILE\_UNKNOWN}. Autodetection is a ``best effort''
+      guess, but it is not 100\% reliable - especially if the input
+      file isn't an alignment file at all. So autodetection is a
+      convenient default, but the caller will probably want to provide
+      a way for the user to specify the input file format and override
+      autodetection, just in case.
+
+\item Errors can occur either in opening or reading the file that you
+      must check for. This error checking could be as simple as making
+      sure that \ccode{esl\_msafile\_Open()} and
+      \ccode{esl\_msa\_Read()} returned \ccode{eslOK}, but the example
+      shows how to catch all the normal errors returned by these
+      calls, and how to format some reasonably informative error
+      messages for the user. For example, when parsing the file fails
+      and \ccode{esl\_msa\_Read()} returns an \ccode{eslEFORMAT}
+      error, information about the problem is stored in \ccode{afp}:
+      the caller can use \ccode{afp->linenumber}, \ccode{afp->buf},
+      and \ccode{afp->errbuf} to get the line number in the file that
+      the error occurred, the text that was on that line, and a short
+      error message about what was wrong with it, respectively.
+
+\item To output (write) an alignment, open a normal C \ccode{FILE}
+      stream, write the alignment(s) with \ccode{esl\_msa\_Write()},
+      and close the stream with C's \ccode{fclose()}. Here, the
+      example is regurgitating the alignments it reads to
+      \ccode{stdout}.
+
+\item Note the example of how to compile with \eslmod{keyhash}
+      augmentation, just by defining \ccode{-DeslAUGMENT\_KEYHASH} and
+      adding the \ccode{esl\_keyhash.c} file when you compile. The
+      effects of \eslmod{keyhash} augmentation are all internal the
+      \eslmod{msa} module, rather than providing any new functions.
+\end{enumerate}
+
+\subsection{Accessing alignment data}
+
+The information in the \ccode{ESL\_MSA} object is meant to be accessed
+directly, so you need to know what it contains. This object is defined
+and documented in \ccode{esl\_msa.h}. It contains various information,
+as follows:
+
+\subsubsection{Important/mandatory information}
+
+The following information is always available in an MSA (except
+digital-mode alignments, which replace \ccode{aseq[][]} with
+\ccode{ax[][]}, as described later):
+
+\input{cexcerpts/msa_mandatory}
+
+The alignment contains \ccode{nseq} sequences, each of which contains
+\ccode{alen} characters.
+
+\ccode{aseq[i]} is the i'th aligned sequence, numbered
+\ccode{0..nseq-1}. 
+
+\ccode{aseq[i][j]} is the j'th character in aligned sequence i,
+numbered \ccode{0..alen-1}.
+
+\ccode{sqname[i]} is the name of the i'th sequence.
+
+\ccode{wgt[i]} is a non-negative real-valued weight for sequence
+i. This defaults to 1.0 if the alignment file did not provide weight
+data. You can determine whether weight data was parsed by checking
+\ccode{(flags \& eslMSA\_HASWGTS)}.
+
+
+
+\subsubsection{Optional information}
+
+The following information is optional. It is usually only provided by
+annotated Stockholm alignments (for instance, Pfam and Rfam database
+alignments):
+
+\input{cexcerpts/msa_optional}
+
+These should be self-explanatory; but for more information, see the
+Stockholm format documentation. Each of these fields corresponds to
+Stockholm markup.
+
+These pointers will be NULL for any optional annotation that was not
+present in the alignment file. This is true at any level; for
+instance, \ccode{ss} will be NULL if no secondary structures are
+available for any sequence, and \ccode{ss[i]} will be NULL if some
+secondary structures are available, but not for sequence i.
+
+The \ccode{cutoff} array contains Pfam/Rfam curated trusted, gathering
+and noise score cutoffs. They are indexed as follows:
+
+\input{cexcerpts/msa_cutoffs}
+
+
+
+\subsubsection{Unparsed information}
+
+The MSA object also stores additional ``unparsed'' information from
+Stockholm files; that is, tags that are present but not recognized by
+the MSA module. This information is stored so that it may be
+regurgitated if the application needs to faithfully output the entire
+alignment file, even the bits that it didn't understand. If you need
+to access unparsed Stockholm tags, see the comments in
+\ccode{esl\_msa.h}.
+
+
+
+\subsubsection{Off-by-one issues in indexing alignment columns}
+
+With one exception, all arrays over alignment columns are normal C
+string arrays, indexed \ccode{0..alen-1}. This includes optional
+information such as \ccode{msa->rf[]} (the reference annotation line)
+and \ccode{msa->cs[]} (the consensus structure annotation line).
+
+The exception is a digitized sequence alignment, \ccode{msa->ax[][]}
+(see below), where columns are indexed 1..alen and sentinel bytes at
+positions 0 and alen+1, following Easel's convention for digitized
+sequences.
+
+Thus, when your code is manipulating a digitized alignment and using
+optional information like the reference annotation line or the
+consensus structure line, you must be careful of the off-by-one
+difference in how the two types of data are indexed.
+
+\subsection{Accepted formats}
+
+Currently, the MSA module only parses Stockholm format. 
+
+Stockholm format and other alignment formats are documented in a later
+chapter.
+
+\subsection{Digital versus text representation}
+
+The multiple alignment is normally stored as ASCII text symbols in a
+2D array \ccode{char ** aseq[0..nseq-1][0..alen-1]}. These strings are
+stored exactly as they appeared in the original file; they aren't
+converted to upper or lower case, for example.  
+
+Optionally, when augmented with the \eslmod{alphabet} module, the
+multiple alignment may alternatively be stored as digital data in an
+Easel internal alphabet. This enables more consistent, robust, and
+speedy handling of the sequence data.
+
+An \ccode{ESL\_MSA} may therefore be in either \esldef{text mode} or
+\esldef{digital mode}. Text mode is the default behavior. An
+\ccode{ESL\_MSA} is in digital mode if its \ccode{eslMSA\_DIGITAL} flag
+is up (\ccode{msa->flags \& eslMSA\_DIGITAL} is \ccode{TRUE}). When the
+alignment data are in digital mode, they are stored internally as a 2D
+digital sequence array \ccode{ESL\_DSQ ** ax[0..nseq-1][1..alen]}, and
+the \ccode{aseq} field is \ccode{NULL}.
+
+To use a digital internal representation, it is most efficient to read
+directly as digital data, using a \ccode{esl\_msafile\_OpenDigital()}
+call in place of \ccode{esl\_msafile\_Open()}. You can also change the
+mode of an MSA from text to digital using
+\ccode{esl\_msa\_Digitize()}, and digital to text using
+\ccode{esl\_msa\_Textize()}.
+
+Suppose you want to open an alignment file and read its alignments in
+digital mode, but you don't know whether the file contains DNA or
+protein alignments. You can't use \ccode{esl\_msafile\_OpenDigital()}
+unless you have an alphabet; but you can't see the alphabet until
+you've read an alignment. \Easel provides
+\ccode{esl\_msafile\_GuessAlphabet()} to peek at the first alignment
+and guess its alphabet\footnote{Because the stream that alignments are
+being read from may be non-rewindable, the implementation of
+\ccode{esl\_msafile\_GuessAlphabet()} reads and caches the first
+alignment.}, and \ccode{esl\_msafile\_SetDigital()} to set an
+already-open \ccode{ESL\_MSAFILE} so that all subsequent alignments
+are read in digital mode. For example: 
+
+%%\input{cexcerpts/msa_example2}
+
+
+\subsection{Reading from stdin or gzip-compressed files}
+
+The module can read compressed alignment files.  If the
+\ccode{filename} passed to \ccode{esl\_msafile\_Open()} ends in
+\ccode{.gz}, the file is assumed to be compressed with gzip. Instead
+of opening it normally, \ccode{esl\_msafile\_Open()} opens it as a pipe
+through \ccode{gzip -dc}. Obviously this only works on a POSIX
+system -- pipes have to work, specifically the \ccode{popen()} system
+call -- and \ccode{gzip} must be installed and in the PATH.
+
+The module can also read from a standard input pipe. If the
+\ccode{filename} passed to \ccode{esl\_msafile\_Open()} is \ccode{-},
+the alignment is read from \ccode{STDIN} rather than from a file.
+
+Because of the way format autodetection works, you cannot use it when
+reading from a pipe or compressed file. The application must know the
+appropriate format and pass that code it calls
+\ccode{esl\_msafile\_Open()}.
diff --git a/esl_msa_testfiles/a2m/a2m.good.1 b/esl_msa_testfiles/a2m/a2m.good.1
new file mode 100644
index 0000000..a766c74
--- /dev/null
+++ b/esl_msa_testfiles/a2m/a2m.good.1
@@ -0,0 +1,16 @@
+>MYG_PHYCA
+VLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTEAEMKASED
+LKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHP
+GDFGADAQGAMNKALELFRKDIAAKYKELGYQG
+>GLB5_PETMA
+pivdtgsvApLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT
+ADQLKKSADVRWHAERIINAVNDAVASMDDtekMSMKLRDLSGKHAKSFQVDPQYFKVLA
+AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------
+>HBB_HUMAN
+VhLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNP
+KVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHF
+GKEFTPPVQAAYQKVVAGVANALAHKYH------
+>HBA_HUMAN
+VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF------DLSHGSAQ
+VKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLP
+AEFTPAVHASLDKFLASVSTVLTSKYR------
diff --git a/esl_msa_testfiles/a2m/a2m.good.2 b/esl_msa_testfiles/a2m/a2m.good.2
new file mode 100644
index 0000000..828797d
--- /dev/null
+++ b/esl_msa_testfiles/a2m/a2m.good.2
@@ -0,0 +1,15 @@
+>tRNA2
+UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGGAGACCGGGGUUCGACUC
+CCCGUAUCGGAG
+>tRNA3
+UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCcAGAUCGGGGUUCAAUU
+CCCCGUCGCGGAG
+>tRNA5
+GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGaGGUCAUCGGUUCGAUU
+CCGGUUGCGUCCA
+>tRNA1
+GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGaGGUCCUGUGUUCGAUC
+CACAGAAUUCGCA
+>tRNA4
+GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUuGGUCCUUAGUUCGAUC
+CUGAGUGCGAGCU
diff --git a/esl_msa_testfiles/afa/afa.good.1 b/esl_msa_testfiles/afa/afa.good.1
new file mode 100644
index 0000000..7f94e20
--- /dev/null
+++ b/esl_msa_testfiles/afa/afa.good.1
@@ -0,0 +1,16 @@
+>MYG_PHYCA
+--------V-LSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKT
+EAEMKASEDLKKHGVTVLTALGAILKKKGH---HEAELKPLAQSHATKHKIPIKYLEFIS
+EAIIHVLHSRHPGDFGADAQGAMNKALELFRKDIAAKYKELGYQG
+>GLB5_PETMA
+PIVDTGSVAPLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT
+ADQLKKSADVRWHAERIINAVNDAVASMDDTEKMSMKLRDLSGKHAKSFQVDPQYFKVLA
+AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------
+>HBB_HUMAN
+--------VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLST
+PDAVMGNPKVKAHGKKVLGAFSDGLAHLDN---LKGTFATLSELHCDKLHVDPENFRLLG
+NVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH------
+>HBA_HUMAN
+--------V-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-----
+-DLSHGSAQVKGHGKKVADALTNAVAHVDD---MPNALSALSDLHAHKLRVDPVNFKLLS
+HCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR------
diff --git a/esl_msa_testfiles/afa/afa.good.2 b/esl_msa_testfiles/afa/afa.good.2
new file mode 100644
index 0000000..4c49d13
--- /dev/null
+++ b/esl_msa_testfiles/afa/afa.good.2
@@ -0,0 +1,15 @@
+>tRNA2
+UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGG-AGACCGGGGUUCGACU
+CCCCGUAUCGGAG
+>tRNA3
+UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCCAGAUCGGGGUUCAAUU
+CCCCGUCGCGGAG
+>tRNA5
+GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGAGGUCAUCGGUUCGAUU
+CCGGUUGCGUCCA
+>tRNA1
+GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGAGGUCCUGUGUUCGAUC
+CACAGAAUUCGCA
+>tRNA4
+GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUUGGUCCUUAGUUCGAUC
+CUGAGUGCGAGCU
diff --git a/esl_msa_testfiles/afa/afa.good.3 b/esl_msa_testfiles/afa/afa.good.3
new file mode 100644
index 0000000..07df173
--- /dev/null
+++ b/esl_msa_testfiles/afa/afa.good.3
@@ -0,0 +1,24 @@
+>7295730___KOG0003
+mqifvktltgktitlevepsdtienvkakiqdkegippdqqrlifagkql
+edgrtlsdyniqkestlhlvlrlrggiiepslrilaqkyncdkmicrkcy
+arlhpratncrkkkcghtnnlrpkkklk
+>Hs4507761___KOG0003
+mqifvktltgktitlevepsdtienvkakiqdkegippdqqrlifagkql
+edgrtlsdyniqkestlhlvlrlrggiiepslrqlaqkyncdkmicrkcy
+arlhpravncrkkkcghtnnlrpkkkvk
+>At3g52590___KOG0003
+mqifvktltgktitlevessdtidnvkakiqdkegippdqqrlifagkql
+edgrtladyniqkestlhlvlrlrggiiepslmmlarkynqdkmicrkcy
+arlhpravncrkkkcghsnqlrpkkkik
+>CE15495___KOG0003
+mqifvktltgktitleveasdtienvkakiqdkegippdqqrlifagkql
+edgrtlsdyniqkestlhlvlrlrggiiepslrqlaqkyncdkqicrkcy
+arlpprasncrkkkcghsselrikkklk
+>SPAC1805.12c___KOG0003
+mqifvktltgktitlevessdtidnvkskiqdkegippdqqrlifagkql
+edgrtlsdyniqkestlhlvlrlrggiiepslkalaskyncekqicrkcy
+arlppratncrkkkcghtnqlrpkkklk
+>YIL148w___KOG0003
+mqifvktltgktitlevessdtidnvkskiqdkegippdqqrlifagkql
+edgrtlsdyniqkestlhlvlrlrggiiepslkalaskyncdksvcrkcy
+arlppratncrkrkcghtnqlrpkkklk
diff --git a/esl_msa_testfiles/clustal/clustal.good.1 b/esl_msa_testfiles/clustal/clustal.good.1
new file mode 100644
index 0000000..900f12f
--- /dev/null
+++ b/esl_msa_testfiles/clustal/clustal.good.1
@@ -0,0 +1,20 @@
+MUSCLE (3.7) multiple sequence alignment
+
+
+MYG_PHYCA       --------V-LSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKT
+GLB5_PETMA      PIVDTGSVAPLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT
+HBB_HUMAN       --------VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLST
+HBA_HUMAN       --------V-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-----
+                        . *:  :.  :   *. *       * : * .::   * :   *  *     
+
+MYG_PHYCA       EAEMKASEDLKKHGVTVLTALGAILKKKGH---HEAELKPLAQSHATKHKIPIKYLEFIS
+GLB5_PETMA      ADQLKKSADVRWHAERIINAVNDAVASMDDTEKMSMKLRDLSGKHAKSFQVDPQYFKVLA
+HBB_HUMAN       PDAVMGNPKVKAHGKKVLGAFSDGLAHLDN---LKGTFATLSELHCDKLHVDPENFRLLG
+HBA_HUMAN       -DLSHGSAQVKGHGKKVADALTNAVAHVDD---MPNALSALSDLHAHKLRVDPVNFKLLS
+                      . .:. *.  :  *.   :   .        :  *:  *. . .:    : .:.
+
+MYG_PHYCA       EAIIHVLHSRHPGDFGADAQGAMNKALELFRKDIAAKYKELGYQG
+GLB5_PETMA      AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------
+HBB_HUMAN       NVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH------
+HBA_HUMAN       HCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR------
+                  :          :  .   .. :* :  .   :   *       
diff --git a/esl_msa_testfiles/clustal/clustal.good.2 b/esl_msa_testfiles/clustal/clustal.good.2
new file mode 100644
index 0000000..32e11ad
--- /dev/null
+++ b/esl_msa_testfiles/clustal/clustal.good.2
@@ -0,0 +1,15 @@
+CLUSTAL W (1.81) multiple sequence alignment
+
+tRNA2           UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGG-AGACCGGGGUUCGACU
+tRNA3           UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCCAGAUCGGGGUUCAAUU
+tRNA5           GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGAGGUCAUCGGUUCGAUU
+tRNA1           GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGAGGUCCUGUGUUCGAUC
+tRNA4           GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUUGGUCCUUAGUUCGAUC
+                       * *   *   *  *           *            *      **** *  
+
+tRNA2           CCCCGUAUCGGAG
+tRNA3           CCCCGUCGCGGAG
+tRNA5           CCGGUUGCGUCCA
+tRNA1           CACAGAAUUCGCA
+tRNA4           CUGAGUGCGAGCU
+                *            
diff --git a/esl_msa_testfiles/phylip/phylip.ambig.1 b/esl_msa_testfiles/phylip/phylip.ambig.1
new file mode 100644
index 0000000..64e584e
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.ambig.1
@@ -0,0 +1,9 @@
+ 2 49
+seq1      AAAAAAAAAA CCCCCCCCCC
+YYYYYYYYY DDDDDDDDDD EEEEEEEEEE
+YYYYYYYYY FFFFFFFFFF GGGGGGGGGG 
+HHHHHHHHH IIIIIIIIII KKKKKKKKKK
+
+
+
+
diff --git a/esl_msa_testfiles/phylip/phylip.bad.1 b/esl_msa_testfiles/phylip/phylip.bad.1
new file mode 100644
index 0000000..9ecbaf7
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.1
@@ -0,0 +1,3 @@
+  2    20
+Turkey    xAAGCTNGGGC ATTTCAGGGT
+Salmo gairxAAGCCTTGGC AGTGCAGGGT
diff --git a/esl_msa_testfiles/phylip/phylip.bad.10 b/esl_msa_testfiles/phylip/phylip.bad.10
new file mode 100644
index 0000000..65eeb17
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.10
@@ -0,0 +1,6 @@
+  3 40
+seq1_name   ACDEFGHIKLMNPQRSTVWY
+seq2_name   ACDEFGHIKLMNPQRSTVWY
+
+ACDEFGHIKLMNPQRSTVWY
+ACDEFGHIKLMNPQRSTVWY
diff --git a/esl_msa_testfiles/phylip/phylip.bad.11 b/esl_msa_testfiles/phylip/phylip.bad.11
new file mode 100644
index 0000000..d2e395c
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.11
@@ -0,0 +1,7 @@
+  2 30
+seq1_name   ACDEFGHIKLMNPQRSTVWY
+seq2_name   ACDEFGHIKLMNPQRSTVWY
+
+            ACDEFGHIKLMNPQRSTVWY
+            ACDEFGHIKLMNPQRSTVWY
+
diff --git a/esl_msa_testfiles/phylip/phylip.bad.2 b/esl_msa_testfiles/phylip/phylip.bad.2
new file mode 100644
index 0000000..e51b510
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.2
@@ -0,0 +1,3 @@
+  x  2    20
+Turkey    AAGCTNGGGC ATTTCAGGGT
+Salmo gairAAGCCTTGGC AGTGCAGGGT
diff --git a/esl_msa_testfiles/phylip/phylip.bad.3 b/esl_msa_testfiles/phylip/phylip.bad.3
new file mode 100644
index 0000000..c7f6530
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.3
@@ -0,0 +1,3 @@
+  2    x
+Turkey    AAGCTNGGGC ATTTCAGGGT
+Salmo gairAAGCCTTGGC AGTGCAGGGT
diff --git a/esl_msa_testfiles/phylip/phylip.bad.4 b/esl_msa_testfiles/phylip/phylip.bad.4
new file mode 100644
index 0000000..8694905
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.4
@@ -0,0 +1,3 @@
+  2
+Turkey    AAGCTNGGGC ATTTCAGGGT
+Salmo gairAAGCCTTGGC AGTGCAGGGT
diff --git a/esl_msa_testfiles/phylip/phylip.bad.5 b/esl_msa_testfiles/phylip/phylip.bad.5
new file mode 100644
index 0000000..0c95f98
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.5
@@ -0,0 +1,2 @@
+  2  20
+
diff --git a/esl_msa_testfiles/phylip/phylip.bad.6 b/esl_msa_testfiles/phylip/phylip.bad.6
new file mode 100644
index 0000000..d988143
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.6
@@ -0,0 +1,3 @@
+ 2 20
+seq1 
+seq2  ACDEFGHIKLMNPQRSTVWY
diff --git a/esl_msa_testfiles/phylip/phylip.bad.7 b/esl_msa_testfiles/phylip/phylip.bad.7
new file mode 100644
index 0000000..56d6f1a
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.7
@@ -0,0 +1,3 @@
+  2 20
+	seq1_name   ACDEFGHIKLMNPQRSTVWY
+seq2_name   ACDEFGHIKLMNPQRSTVWY
diff --git a/esl_msa_testfiles/phylip/phylip.bad.8 b/esl_msa_testfiles/phylip/phylip.bad.8
new file mode 100644
index 0000000..fa9c9a1
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.8
@@ -0,0 +1,3 @@
+  2 20
+seq1_name   ACDEFGHIKLMNPQRSTVWY
+seq2_name   ACDEFGHI~LMNPQRSTVWY
diff --git a/esl_msa_testfiles/phylip/phylip.bad.9 b/esl_msa_testfiles/phylip/phylip.bad.9
new file mode 100644
index 0000000..965cef4
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.bad.9
@@ -0,0 +1,3 @@
+  2 20
+seq1_name   ACDEFGHIKLMNPQRSTVWY
+seq2_name   ACDEFGHIKLMNPQRSTVW
diff --git a/esl_msa_testfiles/phylip/phylip.good.1 b/esl_msa_testfiles/phylip/phylip.good.1
new file mode 100644
index 0000000..1bc5dad
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.good.1
@@ -0,0 +1,12 @@
+  5    42
+Turkey    AAGCTNGGGC ATTTCAGGGT
+Salmo gairAAGCCTTGGC AGTGCAGGGT
+H. SapiensACCGGTTGGC CGTTCAGGGT
+Chimp     AAACCCTTGC CGTTACGCTT
+Gorilla   AAACCCTTGC CGGTACGCTT
+
+GAGCCCGGGC AATACAGGGT AT
+GAGCCGTGGC CGGGCACGGT AT
+ACAGGTTGGC CGTTCAGGGT AA
+AAACCGAGGC CGGGACACTC AT
+AAACCATTGC CGGTACGCTT AA
diff --git a/esl_msa_testfiles/phylip/phylip.good.2 b/esl_msa_testfiles/phylip/phylip.good.2
new file mode 100644
index 0000000..b4015a4
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.good.2
@@ -0,0 +1,8 @@
+7 50 
+thermotogaATGGCGAAGGAAAAATTTGTGAGAACAAAACCGCATGTTAACGTTGGAAC
+TthermophiATGGCGAAGGGCGAGTTTGTTCGGACGAAGCCTCACGTGAACGTGGGGAC  
+TaquaticusATGGCGAAGGGCGAGTTTATCCGGACGAAGCCCCACGTGAACGTGGGGAC 
+deinonema-ATGGCTAAGGGAACGTTTGAACGCACCAAACCCCACGTGAACGTGGGCAC  
+ChlamydiaBATGTCAAAAGAAACTTTTCAACGTAATAAGCCTCATATCAACATAGGGGC 
+flexistipsATGTCCAAGCAAAAGTACGAAAGGAAGAAACCTCACGTAAACGTAGGCAC 
+borrelia-bATGGCAAAAGAAGTTTTTCAAAGAACAAAGCCGCACATGAATGTTGGAAC 
diff --git a/esl_msa_testfiles/phylip/phylip.good.3 b/esl_msa_testfiles/phylip/phylip.good.3
new file mode 100644
index 0000000..b3d56ea
--- /dev/null
+++ b/esl_msa_testfiles/phylip/phylip.good.3
@@ -0,0 +1,28 @@
+ 3 384
+CYS1_DICDI   -----MKVIL LFVLAVFTVF VSS------- --------RG IPPEEQ---- --------SQ 
+ALEU_HORVU   MAHARVLLLA LAVLATAAVA VASSSSFADS NPIRPVTDRA ASTLESAVLG ALGRTRHALR 
+CATH_HUMAN   ------MWAT LPLLCAGAWL LGV------- -PVCGAAELS VNSLEK---- --------FH 
+
+             FLEFQDKFNK KY-SHEEYLE RFEIFKSNLG KIEELNLIAI NHKADTKFGV NKFADLSSDE 
+             FARFAVRYGK SYESAAEVRR RFRIFSESLE EVRSTN---- RKGLPYRLGI NRFSDMSWEE 
+             FKSWMSKHRK TY-STEEYHH RLQTFASNWR KINAHN---- NGNHTFKMAL NQFSDMSFAE 
+
+             FKNYYLNNKE AIFTDDLPVA DYLDDEFINS IPTAFDWRTR G-AVTPVKNQ GQCGSCWSFS 
+             FQATRL-GAA QTCSATLAGN HLMRDA--AA LPETKDWRED G-IVSPVKNQ AHCGSCWTFS 
+             IKHKYLWSEP QNCSAT--KS NYLRGT--GP YPPSVDWRKK GNFVSPVKNQ GACGSCWTFS 
+
+             TTGNVEGQHF ISQNKLVSLS EQNLVDCDHE CMEYEGEEAC DEGCNGGLQP NAYNYIIKNG 
+             TTGALEAAYT QATGKNISLS EQQLVDCAGG FNNF------ --GCNGGLPS QAFEYIKYNG 
+             TTGALESAIA IATGKMLSLA EQQLVDCAQD FNNY------ --GCQGGLPS QAFEYILYNK 
+
+             GIQTESSYPY TAETGTQCNF NSANIGAKIS NFTMIP-KNE TVMAGYIVST GPLAIAADAV 
+             GIDTEESYPY KGVNGV-CHY KAENAAVQVL DSVNITLNAE DELKNAVGLV RPVSVAFQVI 
+             GIMGEDTYPY QGKDGY-CKF QPGKAIGFVK DVANITIYDE EAMVEAVALY NPVSFAFEVT 
+
+             E-WQFYIGGV F-DIPCN--P NSLDHGILIV GYSAKNTIFR KNMPYWIVKN SWGADWGEQG 
+             DGFRQYKSGV YTSDHCGTTP DDVNHAVLAV GYGVENGV-- ---PYWLIKN SWGADWGDNG 
+             QDFMMYRTGI YSSTSCHKTP DKVNHAVLAV GYGEKNGI-- ---PYWIVKN SWGPQWGMNG 
+
+             YIYLRRGKNT CGVSNFVSTS II-- 
+             YFKMEMGKNM CAIATCASYP VVAA 
+             YFLIERGKNM CGLAACASYP IPLV
diff --git a/esl_msa_testfiles/phylips/phylips.good.1 b/esl_msa_testfiles/phylips/phylips.good.1
new file mode 100644
index 0000000..3c033d0
--- /dev/null
+++ b/esl_msa_testfiles/phylips/phylips.good.1
@@ -0,0 +1,11 @@
+  5    42
+Turkey    AAGCTNGGGC ATTTCAGGGT
+GAGCCCGGGC AATACAGGGT AT
+Salmo gairAAGCCTTGGC AGTGCAGGGT
+GAGCCGTGGC CGGGCACGGT AT
+H. SapiensACCGGTTGGC CGTTCAGGGT
+ACAGGTTGGC CGTTCAGGGT AA
+Chimp     AAACCCTTGC CGTTACGCTT
+AAACCGAGGC CGGGACACTC AT
+Gorilla   AAACCCTTGC CGGTACGCTT
+AAACCATTGC CGGTACGCTT AA
diff --git a/esl_msa_testfiles/phylips/phylips.good.2 b/esl_msa_testfiles/phylips/phylips.good.2
new file mode 100644
index 0000000..a7a7ea4
--- /dev/null
+++ b/esl_msa_testfiles/phylips/phylips.good.2
@@ -0,0 +1,17 @@
+ 3 384
+CYS1_DICDI-----MKVILLFVLAVFTVFVSS---------------RGIPPEEQ------------SQFLEFQDKFNKKY-SHEEY
+LERFEIFKSNLGKIEELNLIAINHKADTKFGVNKFADLSSDEFKNYYLNNKEAIFTDDLPVADYLDDEFINSIPTAFDWRTRG-AVTP
+VKNQGQCGSCWSFSTTGNVEGQHFISQNKLVSLSEQNLVDCDHECMEYEGEEACDEGCNGGLQPNAYNYIIKNGGIQTESSYPYTAET
+GTQCNFNSANIGAKISNFTMIP-KNETVMAGYIVSTGPLAIAADAVE-WQFYIGGVF-DIPCN--PNSLDHGILIVGYSAKNTIFRKN
+MPYWIVKNSWGADWGEQGYIYLRRGKNTCGVSNFVSTSII--
+ALEU_HORVUMAHARVLLLALAVLATAAVAVASSSSFADSNPIRPVTDRAASTLESAVLGALGRTRHALRFARFAVRYGKSYESAAEVR
+RRFRIFSESLEEVRSTN----RKGLPYRLGINRFSDMSWEEFQATRL-GAAQTCSATLAGNHLMRDA--AALPETKDWREDG-IVSPVK
+NQAHCGSCWTFSTTGALEAAYTQATGKNISLSEQQLVDCAGGFNNF--------GCNGGLPSQAFEYIKYNGGIDTEESYPYKGVNGV-
+CHYKAENAAVQVLDSVNITLNAEDELKNAVGLVRPVSVAFQVIDGFRQYKSGVYTSDHCGTTPDDVNHAVLAVGYGVENGV-----PYW
+LIKNSWGADWGDNGYFKMEMGKNMCAIATCASYPVVAA
+CATH_HUMAN------MWATLPLLCAGAWLLGV--------PVCGAAELSVNSLEK------------FHFKSWMSKHRKTY-STEEYH
+HRLQTFASNWRKINAHN----NGNHTFKMALNQFSDMSFAEIKHKYLWSEPQNCSAT--KSNYLRGT--GPYPPSVDWRKKGNFVSPVK
+NQGACGSCWTFSTTGALESAIAIATGKMLSLAEQQLVDCAQDFNNY--------GCQGGLPSQAFEYILYNKGIMGEDTYPYQGKDGY-
+CKFQPGKAIGFVKDVANITIYDEEAMVEAVALYNPVSFAFEVTQDFMMYRTGIYSSTSCHKTPDKVNHAVLAVGYGEKNGI-----PYW
+IVKNSWGPQWGMNGYFLIERGKNMCGLAACASYPIPLV
+
diff --git a/esl_msa_testfiles/psiblast/psiblast.good.1 b/esl_msa_testfiles/psiblast/psiblast.good.1
new file mode 100644
index 0000000..9ba424b
--- /dev/null
+++ b/esl_msa_testfiles/psiblast/psiblast.good.1
@@ -0,0 +1,14 @@
+MYG_PHYCA   --------V-LSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKT
+GLB5_PETMA  pivdtgsvApLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT
+HBB_HUMAN   --------VhLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLST
+HBA_HUMAN   --------V-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-----
+
+MYG_PHYCA   EAEMKASEDLKKHGVTVLTALGAILKKKGH---HEAELKPLAQSHATKHKIPIKYLEFIS
+GLB5_PETMA  ADQLKKSADVRWHAERIINAVNDAVASMDDtekMSMKLRDLSGKHAKSFQVDPQYFKVLA
+HBB_HUMAN   PDAVMGNPKVKAHGKKVLGAFSDGLAHLDN---LKGTFATLSELHCDKLHVDPENFRLLG
+HBA_HUMAN   -DLSHGSAQVKGHGKKVADALTNAVAHVDD---MPNALSALSDLHAHKLRVDPVNFKLLS
+
+MYG_PHYCA   EAIIHVLHSRHPGDFGADAQGAMNKALELFRKDIAAKYKELGYQG
+GLB5_PETMA  AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------
+HBB_HUMAN   NVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH------
+HBA_HUMAN   HCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR------
diff --git a/esl_msa_testfiles/psiblast/psiblast.good.2 b/esl_msa_testfiles/psiblast/psiblast.good.2
new file mode 100644
index 0000000..6b36b92
--- /dev/null
+++ b/esl_msa_testfiles/psiblast/psiblast.good.2
@@ -0,0 +1,11 @@
+tRNA2  UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGG-AGACCGGGGUUCGACU
+tRNA3  UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCcAGAUCGGGGUUCAAUU
+tRNA5  GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGaGGUCAUCGGUUCGAUU
+tRNA1  GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGaGGUCCUGUGUUCGAUC
+tRNA4  GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUuGGUCCUUAGUUCGAUC
+
+tRNA2  CCCCGUAUCGGAG
+tRNA3  CCCCGUCGCGGAG
+tRNA5  CCGGUUGCGUCCA
+tRNA1  CACAGAAUUCGCA
+tRNA4  CUGAGUGCGAGCU
diff --git a/esl_msa_testfiles/selex/00MANIFEST b/esl_msa_testfiles/selex/00MANIFEST
new file mode 100644
index 0000000..7269736
--- /dev/null
+++ b/esl_msa_testfiles/selex/00MANIFEST
@@ -0,0 +1,24 @@
+#                                    in whole file     in last alignment
+#                                    ----------------  -----------------
+#                                    nali  nseq  nres    nseq    nres
+#                                    ----  ----  ----    ----    ----
+selex.good.1    eslOK       amino       1     5    20       5      20 
+selex.good.2    eslOK       amino       1     5    40       5      40 
+selex.good.3    eslOK       amino       1     7    40       7      40 
+#
+selex.bad.1	eslEOF      /no alignment data found/            
+selex.bad.2     eslEFORMAT  /\(line 11\): expected \d+ lines/    
+selex.bad.3     eslEFORMAT  /\(line 1\): #=SS must follow/
+selex.bad.4     eslEFORMAT  /\(line 4\): #=SA must follow/
+selex.bad.5     eslEFORMAT  /\(line 7\): too many #=RF lines/   
+selex.bad.6     eslEFORMAT  /\(line 7\): too many #=CS lines/   
+selex.bad.7     eslEFORMAT  /\(line 7\): too many #=SS lines/   
+selex.bad.8     eslEFORMAT  /\(line 5\): too many #=SA lines/   
+selex.bad.9     eslEFORMAT  /\(line 8\): #=RF line isn't in expected order/   
+selex.bad.10    eslEFORMAT  /\(line 9\): #=CS line isn't in expected order/   
+selex.bad.11    eslEFORMAT  /\(line 9\): #=SS line isn't in expected order/   
+selex.bad.12    eslEFORMAT  /\(line 8\): #=SA line isn't in expected order/   
+selex.bad.13    eslEFORMAT  /\(line 11\): seq line isn't in expected order/   
+selex.bad.14    eslEFORMAT  /\(line 10\): expected seq \S+, saw/   
+
+
diff --git a/esl_msa_testfiles/selex/selex.bad.1 b/esl_msa_testfiles/selex/selex.bad.1
new file mode 100644
index 0000000..b2d2ef5
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.1
@@ -0,0 +1,4 @@
+
+# No alignment data.
+# Should return EOF.
+
diff --git a/esl_msa_testfiles/selex/selex.bad.10 b/esl_msa_testfiles/selex/selex.bad.10
new file mode 100644
index 0000000..d1feae1
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.10
@@ -0,0 +1,16 @@
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+#=CS  xxxxxxxxxxxxxxxxxxxx
+
+
+#=CS  xxxxxxxxxxxxxxxxxxxx
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
+
diff --git a/esl_msa_testfiles/selex/selex.bad.11 b/esl_msa_testfiles/selex/selex.bad.11
new file mode 100644
index 0000000..fa41f71
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.11
@@ -0,0 +1,15 @@
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+#=SS  xxxxxxxxxxxxxxxxxxxx
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+#=SS  xxxxxxxxxxxxxxxxxxxx
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
+
diff --git a/esl_msa_testfiles/selex/selex.bad.12 b/esl_msa_testfiles/selex/selex.bad.12
new file mode 100644
index 0000000..3379697
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.12
@@ -0,0 +1,15 @@
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+#=SA  xxxxxxxxxxxxxxxxxxxx
+
+#=SA  xxxxxxxxxxxxxxxxxxxx
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
+
diff --git a/esl_msa_testfiles/selex/selex.bad.13 b/esl_msa_testfiles/selex/selex.bad.13
new file mode 100644
index 0000000..5e4ffee
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.13
@@ -0,0 +1,15 @@
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+#=SS  xxxxxxxxxxxxxxxxxxxx
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+#=SS  xxxxxxxxxxxxxxxxxxxx
+seq5  ACDEFGHIKLMNPQRSTVWY
+
+
diff --git a/esl_msa_testfiles/selex/selex.bad.14 b/esl_msa_testfiles/selex/selex.bad.14
new file mode 100644
index 0000000..7caa449
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.14
@@ -0,0 +1,14 @@
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seqX  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
+
+
diff --git a/esl_msa_testfiles/selex/selex.bad.2 b/esl_msa_testfiles/selex/selex.bad.2
new file mode 100644
index 0000000..24a2e7c
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.2
@@ -0,0 +1,10 @@
+# Number of lines in each block must be the same.
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
diff --git a/esl_msa_testfiles/selex/selex.bad.3 b/esl_msa_testfiles/selex/selex.bad.3
new file mode 100644
index 0000000..ec6f25e
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.3
@@ -0,0 +1,7 @@
+#=SS  xxxxxxxxxxxxxxxxxxxx
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
diff --git a/esl_msa_testfiles/selex/selex.bad.4 b/esl_msa_testfiles/selex/selex.bad.4
new file mode 100644
index 0000000..4123f4f
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.4
@@ -0,0 +1,10 @@
+# 
+#
+
+#=SA  xxxxxxxxxxxxxxxxxxxx
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
diff --git a/esl_msa_testfiles/selex/selex.bad.5 b/esl_msa_testfiles/selex/selex.bad.5
new file mode 100644
index 0000000..9f3064f
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.5
@@ -0,0 +1,11 @@
+# 
+#
+
+#=RF  xxxxxxxxxxxxxxxxxxxx
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+#=RF  xxxxxxxxxxxxxxxxxxxx
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
diff --git a/esl_msa_testfiles/selex/selex.bad.6 b/esl_msa_testfiles/selex/selex.bad.6
new file mode 100644
index 0000000..74bff83
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.6
@@ -0,0 +1,8 @@
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+#=CS  xxxxxxxxxxxxxxxxxxxx
+#=CS  xxxxxxxxxxxxxxxxxxxx
+
diff --git a/esl_msa_testfiles/selex/selex.bad.7 b/esl_msa_testfiles/selex/selex.bad.7
new file mode 100644
index 0000000..71d2906
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.7
@@ -0,0 +1,12 @@
+seq1  ACDEFGHIKLMNPQRSTVWY
+#=SS  xxxxxxxxxxxxxxxxxxxx
+seq2  ACDEFGHIKLMNPQRSTVWY
+#=SS  xxxxxxxxxxxxxxxxxxxx
+seq3  ACDEFGHIKLMNPQRSTVWY
+#=SS  xxxxxxxxxxxxxxxxxxxx
+#=SS  xxxxxxxxxxxxxxxxxxxx
+seq4  ACDEFGHIKLMNPQRSTVWY
+#=SS  xxxxxxxxxxxxxxxxxxxx
+seq5  ACDEFGHIKLMNPQRSTVWY
+#=SS  xxxxxxxxxxxxxxxxxxxx
+
diff --git a/esl_msa_testfiles/selex/selex.bad.8 b/esl_msa_testfiles/selex/selex.bad.8
new file mode 100644
index 0000000..dd7dad0
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.8
@@ -0,0 +1,8 @@
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+#=SA  xxxxxxxxxxxxxxxxxxxx
+#=SA  xxxxxxxxxxxxxxxxxxxx
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
diff --git a/esl_msa_testfiles/selex/selex.bad.9 b/esl_msa_testfiles/selex/selex.bad.9
new file mode 100644
index 0000000..2417eb0
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.bad.9
@@ -0,0 +1,14 @@
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+#=RF  xxxxxxxxxxxxxxxxxxxx
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
+#=RF  xxxxxxxxxxxxxxxxxxxx
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+seq3  ACDEFGHIKLMNPQRSTVWY
+seq4  ACDEFGHIKLMNPQRSTVWY
+seq5  ACDEFGHIKLMNPQRSTVWY
+
diff --git a/esl_msa_testfiles/selex/selex.good.1 b/esl_msa_testfiles/selex/selex.good.1
new file mode 100644
index 0000000..6e970ee
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.good.1
@@ -0,0 +1,5 @@
+seq1 ACDEFGHIKLMNPQRSTVWY
+seq2 ACDEFGHIKLMNPQRSTVWY
+seq3 ACDEFGHIKLMNPQRSTVWY
+seq4 ACDEFGHIKLMNPQRSTVWY
+seq5 ACDEFGHIKLMNPQRSTVWY
diff --git a/esl_msa_testfiles/selex/selex.good.2 b/esl_msa_testfiles/selex/selex.good.2
new file mode 100644
index 0000000..db72a72
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.good.2
@@ -0,0 +1,37 @@
+# DOS format (\r\n), and doesn't end in a newline.
+# 
+#=RF xxxxxxxxxxxxxxxxxxxx
+#=CS xxxxxxxxxxxxxxxxxxxx
+seq1 ACDEFGHIKLMNPQRSTVWY
+#=SS xxxxxxxxxxxxxxxxxxxx
+#=SA xxxxxxxxxxxxxxxxxxxx
+seq2 ACDEFGHIKLMNPQRSTVWY
+#=SS xxxxxxxxxxxxxxxxxxxx
+#=SA xxxxxxxxxxxxxxxxxxxx
+seq3 ACDEFGHIKLMNPQRSTVWY
+#=SS xxxxxxxxxxxxxxxxxxxx
+#=SA xxxxxxxxxxxxxxxxxxxx
+seq4 ACDEFGHIKLMNPQRSTVWY
+#=SS xxxxxxxxxxxxxxxxxxxx
+#=SA xxxxxxxxxxxxxxxxxxxx
+seq5 ACDEFGHIKLMNPQRSTVWY
+#=SS xxxxxxxxxxxxxxxxxxxx
+#=SA xxxxxxxxxxxxxxxxxxxx
+
+#=RF xxxxxxxxxxxxxxxxxxxx
+#=CS xxxxxxxxxxxxxxxxxxxx
+seq1 ACDEFGHIKLMNPQRSTVWY
+#=SS xxxxxxxxxxxxxxxxxxxx
+#=SA xxxxxxxxxxxxxxxxxxxx
+seq2 ACDEFGHIKLMNPQRSTVWY
+#=SS xxxxxxxxxxxxxxxxxxxx
+#=SA xxxxxxxxxxxxxxxxxxxx
+seq3 ACDEFGHIKLMNPQRSTVWY
+#=SS xxxxxxxxxxxxxxxxxxxx
+#=SA xxxxxxxxxxxxxxxxxxxx
+seq4 ACDEFGHIKLMNPQRSTVWY
+#=SS xxxxxxxxxxxxxxxxxxxx
+#=SA xxxxxxxxxxxxxxxxxxxx
+seq5 ACDEFGHIKLMNPQRSTVWY
+#=SS xxxxxxxxxxxxxxxxxxxx
+#=SA xxxxxxxxxxxxxxxxxxxx
\ No newline at end of file
diff --git a/esl_msa_testfiles/selex/selex.good.3 b/esl_msa_testfiles/selex/selex.good.3
new file mode 100644
index 0000000..0facbd5
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.good.3
@@ -0,0 +1,27 @@
+
+#=CS
+#=RF
+seq1 ACDEFGHIKLMNPQRSTVWY
+long_name GHIKLMNPQRSTVWY
+blank_seq_all_gaps 
+seq2 ACDEF---KLMNPQRSTVWY
+seq3 ACDEF...KLMNPQRSTVWY
+# embedded comments ok
+seq4 ACDEFGHIKLMNPQRSTVWY
+ seq5 CDEFGHIKLMNPQRSTVWY
+#=SS 
+#=SA
+
+
+
+#=CS
+#=RF
+seq1 ACDEFGHIKLMNPQRSTVWY
+long_name GHIKLMNPQRSTVWY
+blank_seq_all_gaps 
+seq2 ACDEFGHIKLMNPQRSTVWY
+seq3 ACDEFGHIKLMNPQRSTVWY
+seq4 ACDEFGHIKLMNPQRSTVWY
+seq5 ACDEFGHIKLMNPQRSTVWY
+#=SS 
+#=SA
\ No newline at end of file
diff --git a/esl_msa_testfiles/selex/selex.good.4 b/esl_msa_testfiles/selex/selex.good.4
new file mode 100644
index 0000000..199b6f0
--- /dev/null
+++ b/esl_msa_testfiles/selex/selex.good.4
@@ -0,0 +1,19 @@
+# A complicated SELEX example
+# SRE, Tue Dec  1 19:17:48 1998
+
+
+#=RF        xxxxxxx xxxx xxxxxx
+#=CS        >>>>+>> ^^^^ <<<<<<
+28    gGAGUAAGAUAGC AUCA GCAUCUUGUUCC
+#=SS  +++++>>>>>+>> ^^^^ <<<<<<<+++++
+longname    GUUCACC AUCA GGGGAc
+#=SS        >>>>+>> ^^^^ <<<<<<
+2     AUGGAUGCGCACC AUCA GGGCGUaucuau
+3           GAUCACC AUCA GGGauc
+4           GGUCACC AUCA GGGauc
+5           GGACACC AUCA GGGucu
+6              CACC AUCA GGG
+7           GAUCACC AUCA GGGauc
+8            CUCACC AUCA GGGGG
+9           AUGCACC AUCA GGGCAU
+10           CUCACC AUCA GGGGG
diff --git a/esl_msa_testfiles/stockholm/stockholm.bad.1 b/esl_msa_testfiles/stockholm/stockholm.bad.1
new file mode 100644
index 0000000..ea254db
--- /dev/null
+++ b/esl_msa_testfiles/stockholm/stockholm.bad.1
@@ -0,0 +1 @@
+missing Stockholm header
diff --git a/esl_msa_testfiles/stockholm/stockholm.bad.2 b/esl_msa_testfiles/stockholm/stockholm.bad.2
new file mode 100644
index 0000000..73d9112
--- /dev/null
+++ b/esl_msa_testfiles/stockholm/stockholm.bad.2
@@ -0,0 +1,7 @@
+# STOCKHOLM 1.0
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+//
diff --git a/esl_msa_testfiles/stockholm/stockholm.bad.3 b/esl_msa_testfiles/stockholm/stockholm.bad.3
new file mode 100644
index 0000000..af46199
--- /dev/null
+++ b/esl_msa_testfiles/stockholm/stockholm.bad.3
@@ -0,0 +1,7 @@
+# STOCKHOLM 1.0
+
+#=GS seq1 FOO baz
+#=GS seq2 FOO boz
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+//
diff --git a/esl_msa_testfiles/stockholm/stockholm.bad.4 b/esl_msa_testfiles/stockholm/stockholm.bad.4
new file mode 100644
index 0000000..28a3913
--- /dev/null
+++ b/esl_msa_testfiles/stockholm/stockholm.bad.4
@@ -0,0 +1,4 @@
+# STOCKHOLM 1.0
+
+seq1    ACDEFGHIKLMNPQRSTVWY
+seq2    ACDEFGHIKLMNPQRSTVWY
diff --git a/esl_msa_testfiles/stockholm/stockholm.bad.5 b/esl_msa_testfiles/stockholm/stockholm.bad.5
new file mode 100644
index 0000000..752b318
--- /dev/null
+++ b/esl_msa_testfiles/stockholm/stockholm.bad.5
@@ -0,0 +1,4 @@
+# STOCKHOLM 1.0
+
+# No data
+//
diff --git a/esl_msa_testfiles/stockholm/stockholm.bad.6 b/esl_msa_testfiles/stockholm/stockholm.bad.6
new file mode 100644
index 0000000..bf8e3d5
--- /dev/null
+++ b/esl_msa_testfiles/stockholm/stockholm.bad.6
@@ -0,0 +1,7 @@
+# STOCKHOLM 1.0
+
+#=GF 
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+//
diff --git a/esl_msa_testfiles/stockholm/stockholm.bad.7 b/esl_msa_testfiles/stockholm/stockholm.bad.7
new file mode 100644
index 0000000..a54e227
--- /dev/null
+++ b/esl_msa_testfiles/stockholm/stockholm.bad.7
@@ -0,0 +1,7 @@
+# STOCKHOLM 1.0
+
+#=GFX tag 
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+seq2  ACDEFGHIKLMNPQRSTVWY
+//
diff --git a/esl_msa_testfiles/stockholm/stockholm.bad.8 b/esl_msa_testfiles/stockholm/stockholm.bad.8
new file mode 100644
index 0000000..e5c0636
--- /dev/null
+++ b/esl_msa_testfiles/stockholm/stockholm.bad.8
@@ -0,0 +1,5 @@
+# STOCKHOLM 1.0
+#=GF ID
+
+seq1  ACDEFGHIKLMNPQRSTVWY
+//
diff --git a/esl_msa_testfiles/stockholm/stockholm.good.1 b/esl_msa_testfiles/stockholm/stockholm.good.1
new file mode 100644
index 0000000..557e59c
--- /dev/null
+++ b/esl_msa_testfiles/stockholm/stockholm.good.1
@@ -0,0 +1,96 @@
+# STOCKHOLM 1.0
+#
+# This is an example of a Stockholm multiple sequence alignment
+# file. It is deliberately designed to be weird, to exercise many of the
+# features of Stockholm format, in order to test a parser.
+#
+#=GF ID   14-3-3
+#=GF AC   PF00244
+#=GF DE   14-3-3 proteins
+#=GF AU   Finn RD
+#=GF AL   Clustalw
+#=GF SE   Prosite
+#=GF GA   25 25
+#=GF TC   35.40 35.40
+#=GF NC   8.80 8.80
+#=GF BM   hmmbuild -f HMM SEED
+#=GF BM   hmmcalibrate --seed 0 HMM
+#=GF RN   [1]
+#=GF RM   95327195
+#=GF RT   Structure of a 14-3-3 protein and implications for
+#=GF RT   coordination of multiple signalling pathways. 
+#=GF RA   Xiao B, Smerdon SJ, Jones DH, Dodson GG, Soneji Y, Aitken
+#=GF RA   A, Gamblin SJ; 
+#=GF RL   Nature 1995;376:188-191.
+#=GF RN   [2]
+#=GF RM   95327196
+#=GF RT   Crystal structure of the zeta isoform of the 14-3-3
+#=GF RT   protein. 
+#=GF RA   Liu D, Bienkowska J, Petosa C, Collier RJ, Fu H, Liddington
+#=GF RA   R; 
+#=GF RL   Nature 1995;376:191-194.
+#=GF DR   PROSITE; PDOC00633;
+#=GF DR   SMART; 14_3_3;
+#=GF DR   PRINTS; PR00305;
+#=GF SQ   119
+	
+#=GS 1431_ENTHI/4-239 WT  0.42
+#=GS seq1             WT  0.40
+#=GS seq2             WT  0.41
+#=GS seq3             WT  0.43
+#=GS seq4             WT  0.44
+#=GS seq5             WT  0.45
+#=GS seq6             WT  0.46
+
+#=GS seq4             AC  PF00001
+#=GS seq4             DE  A description of seq4.
+
+#=GS seq1             NEWTAG  foo
+#=GS seq2             NEWTAG  bar
+#=GS seq3             NEWTAG  baz  
+
+#=GS seq3             TAG2    foo2
+#=GS seq4             TAG2    foo3
+#=GS seq5             TAG2    foo4
+
+#=GC SS_cons                 xxxxxxxxxxxxxxxxxxx
+#=GC SA_cons                 xxxxxxxxxxxxxxxxxxx  
+#=GC New_long_tag_thingie    xxxxxxxxxxxxxxxxxxx
+1431_ENTHI/4-239             ACDEFGHKLMNPQRSTVWY             
+#=GR seq1 SS                 ...................  
+#=GR seq1 SA                 0000000000000000000
+seq1                         ACDEFGHKLMNPQRSTVWY
+seq2                         ACDEFGHKLMNPQRSTVWY
+seq3                         ACDEFGHKLMNPQRSTVWY
+seq4                         ACDEFGHKLMNPQRSTVWY
+seq5                         ACDEFGHKLMNPQRSTVWY
+seq6                         ACDEFGHKLMNPQRSTVWY
+#=GR seq6 SS                 ...................
+#=GR seq6 SA                 9999999999999999999
+#=GR seq6 Invented_tag       *******************
+#=GR seq6 Another_tag        -------------------
+    
+  
+#=GC SS_cons                 xxxxxxxxxxxxxxxxxxx
+#=GC SA_cons                 xxxxxxxxxxxxxxxxxxx
+#=GC New_long_tag_thingie    xxxxxxxxxxxxxxxxxxx    
+1431_ENTHI/4-239             ACDEFGHKLMNPQRSTVWY   
+#=GR seq1 SS                 ...................
+#=GR seq1 SA                 0000000000000000000
+seq1                         ACDEFGHKLMNPQRSTVWY
+seq2                         ACDEFGHKLMNPQRSTVWY        
+seq3                         ACDEFGHKLMNPQRSTVWY
+seq4                         ACDEFGHKLMNPQRSTVWY
+seq5                         ACDEFGHKLMNPQRSTVWY
+seq6                         ACDEFGHKLMNPQRSTVWY
+#=GR seq6 SS                 ...................
+#=GR seq6 SA                 9999999999999999999
+#=GR seq6 Invented_tag       ******************* 
+#=GR seq6 Another_tag        -------------------
+
+#
+# And here's some trailing comments, just to
+# try to confuse a parser.
+#
+
+//
\ No newline at end of file
diff --git a/esl_msacluster.c b/esl_msacluster.c
new file mode 100644
index 0000000..e9e9aca
--- /dev/null
+++ b/esl_msacluster.c
@@ -0,0 +1,430 @@
+/* Clustering sequences in an MSA by % identity.
+ *
+ * Table of contents:
+ *    1. Single linkage clustering an MSA by %id
+ *    2. Internal functions, interface to the clustering API
+ *    3. Some internal functions needed for regression tests
+ *    4. Unit tests
+ *    5. Test driver
+ *    6. Example
+ *    7. Copyright and license.
+ * 
+ *  Augmentations:
+ *    eslAUGMENT_ALPHABET:  adds support for digital MSAs
+ *  
+ * (Wondering why isn't this just part of the cluster or MSA modules?
+ * esl_cluster itself is a core module, dependent only on easel. MSA
+ * clustering involves at least the distance, cluster, and msa
+ * modules. We're better off separating its functionality away into a
+ * more highly derived module.)
+ */
+#include "esl_config.h"
+
+#include "easel.h"
+#include "esl_cluster.h"
+#include "esl_distance.h"
+#include "esl_msa.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#include "esl_msacluster.h"
+
+/* These functions are going to get defined in an internal regression 
+ * testing section further below:
+ */
+#if defined(eslMSACLUSTER_REGRESSION) || defined(eslMSAWEIGHT_REGRESSION)
+#include <ctype.h>
+static double squid_distance(char *s1, char *s2);
+#ifdef eslAUGMENT_ALPHABET
+static double squid_xdistance(ESL_ALPHABET *a, ESL_DSQ *x1, ESL_DSQ *x2);
+#endif
+#endif
+
+/* These functions will define linkage between a pair of text or
+ *  digital aseq's: 
+ */
+static int msacluster_clinkage(const void *v1, const void *v2, const void *p, int *ret_link);
+#ifdef eslAUGMENT_ALPHABET
+static int msacluster_xlinkage(const void *v1, const void *v2, const void *p, int *ret_link);
+#endif
+
+/* In digital mode, we'll need to pass the clustering routine two parameters -
+ * %id threshold and alphabet ptr - so make a structure that bundles them.
+ */
+#ifdef eslAUGMENT_ALPHABET
+struct msa_param_s {
+  double        maxid;
+  ESL_ALPHABET *abc;
+};
+#endif
+
+
+/*****************************************************************
+ * 1. Single linkage clustering an MSA by %id
+ *****************************************************************/
+
+/* Function:  esl_msacluster_SingleLinkage()
+ * Synopsis:  Single linkage clustering by percent identity.
+ * Incept:    SRE, Sun Nov  5 10:11:45 2006 [Janelia]
+ *
+ * Purpose:   Perform single link clustering of the sequences in 
+ *            multiple alignment <msa>. Any pair of sequences with
+ *            percent identity $\geq$ <maxid> are linked (using
+ *            the definition from the \eslmod{distance} module).
+ *            
+ *            The resulting clustering is optionally returned in one
+ *            or more of <opt_c>, <opt_nin>, and <opt_nc>.  The
+ *            <opt_c[0..nseq-1]> array assigns a cluster index
+ *            <(0..nc-1)> to each sequence. For example, <c[4] = 1>
+ *            means that sequence 4 is assigned to cluster 1.  The
+ *            <opt_nin[0..nc-1]> array is the number of sequences
+ *            in each cluster. <opt_nc> is the number of clusters.
+ *
+ *            Importantly, this algorithm runs in $O(N)$ memory, and
+ *            produces one discrete clustering. Compare to
+ *            <esl_tree_SingleLinkage()>, which requires an $O(N^2)$ 
+ *            adjacency matrix, and produces a hierarchical clustering
+ *            tree.
+ *            
+ *            The algorithm is worst case $O(LN^2)$ time, for $N$
+ *            sequences of length $L$. However, the worst case is no
+ *            links at all, and this is unusual. More typically, time
+ *            scales as about $LN \log N$. The best case scales as
+ *            $LN$, when there is just one cluster in a completely
+ *            connected graph.
+ *            
+ * Args:      msa     - multiple alignment to cluster
+ *            maxid   - pairwise identity threshold: cluster if $\geq$ <maxid>
+ *            opt_c   - optRETURN: cluster assignments for each sequence, [0..nseq-1]
+ *            opt_nin - optRETURN: number of seqs in each cluster, [0..nc-1] 
+ *            opt_nc  - optRETURN: number of clusters        
+ *
+ * Returns:   <eslOK> on success; the <opt_c[0..nseq-1]> array contains
+ *            cluster indices <0..nc-1> assigned to each sequence; the
+ *            <opt_nin[0..nc-1]> array contains the number of seqs in
+ *            each cluster; and <opt_nc> contains the number of
+ *            clusters. The <opt_c> array and <opt_nin> arrays will be
+ *            allocated here, if non-<NULL>, and must be free'd by the
+ *            caller. The input <msa> is unmodified.
+ *            
+ *            The caller may pass <NULL> for either <opt_c> or
+ *            <opt_nc> if it is only interested in one of the two
+ *            results.
+ *
+ * Throws:    <eslEMEM> on allocation failure, and <eslEINVAL> if a pairwise
+ *            comparison is invalid (which means the MSA is corrupted, so it
+ *            shouldn't happen). In either case, <opt_c> and <opt_nin> are set to <NULL>
+ *            and <opt_nc> is set to 0, and the <msa> is unmodified.
+ */
+int
+esl_msacluster_SingleLinkage(const ESL_MSA *msa, double maxid, 
+			     int **opt_c, int **opt_nin, int *opt_nc)
+
+{
+  int   status;
+  int  *workspace  = NULL;
+  int  *assignment = NULL;
+  int  *nin        = NULL;
+  int   nc;
+  int   i;
+#ifdef eslAUGMENT_ALPHABET
+  struct msa_param_s param;
+#endif
+
+  /* Allocations */
+  ESL_ALLOC(workspace,  sizeof(int) * msa->nseq * 2);
+  ESL_ALLOC(assignment, sizeof(int) * msa->nseq);
+
+  /* call to SLC API: */
+  if (! (msa->flags & eslMSA_DIGITAL))
+    status = esl_cluster_SingleLinkage((void *) msa->aseq, (size_t) msa->nseq, sizeof(char *),
+				       msacluster_clinkage, (void *) &maxid, 
+				       workspace, assignment, &nc);
+#ifdef eslAUGMENT_ALPHABET
+  else {
+    param.maxid = maxid;
+    param.abc   = msa->abc;
+    status = esl_cluster_SingleLinkage((void *) msa->ax, (size_t) msa->nseq, sizeof(ESL_DSQ *),
+				       msacluster_xlinkage, (void *) &param, 
+				       workspace, assignment, &nc);
+  }
+#endif
+  if (status != eslOK) goto ERROR;
+
+
+  if (opt_nin != NULL) 
+    {
+      ESL_ALLOC(nin, sizeof(int) * nc);
+      for (i = 0; i < nc; i++) nin[i] = 0;
+      for (i = 0; i < msa->nseq; i++)
+	nin[assignment[i]]++;
+      *opt_nin = nin;
+    }
+
+  /* cleanup and return */
+  free(workspace);
+  if (opt_c  != NULL) *opt_c  = assignment; else free(assignment);
+  if (opt_nc != NULL) *opt_nc = nc;
+  return eslOK;
+
+ ERROR:
+  if (workspace  != NULL) free(workspace);
+  if (assignment != NULL) free(assignment);
+  if (nin        != NULL) free(nin);
+  if (opt_c  != NULL) *opt_c  = NULL;
+  if (opt_nc != NULL) *opt_nc = 0;
+  return status;
+}
+
+
+
+
+
+/*****************************************************************
+ * 2. Internal functions, interface to the clustering API
+ *****************************************************************/
+
+/* Definition of %id linkage in text-mode aligned seqs (>= maxid): */
+static int
+msacluster_clinkage(const void *v1, const void *v2, const void *p, int *ret_link)
+{
+  char  *as1   = *(char **) v1;
+  char  *as2   = *(char **) v2;
+  double maxid = *(double *) p;
+  double pid;
+  int    status = eslOK;
+
+#if defined(eslMSACLUSTER_REGRESSION) || defined(eslMSAWEIGHT_REGRESSION)
+  pid = 1. - squid_distance(as1, as2);
+#else  
+  if ((status = esl_dst_CPairId(as1, as2, &pid, NULL, NULL)) != eslOK) return status;
+#endif
+
+  *ret_link = (pid >= maxid ? TRUE : FALSE); 
+  return status;
+}
+  
+/* Definition of % id linkage in digital aligned seqs (>= maxid) */
+#ifdef eslAUGMENT_ALPHABET
+static int
+msacluster_xlinkage(const void *v1, const void *v2, const void *p, int *ret_link)
+{
+  ESL_DSQ *ax1              = *(ESL_DSQ **) v1;
+  ESL_DSQ *ax2              = *(ESL_DSQ **) v2;
+  struct msa_param_s *param = (struct msa_param_s *) p;
+  double   pid;
+  int      status = eslOK;
+
+#if defined(eslMSACLUSTER_REGRESSION) || defined(eslMSAWEIGHT_REGRESSION)
+  pid = 1. - squid_xdistance(param->abc, ax1, ax2);
+#else  
+  if ( (status = esl_dst_XPairId(param->abc, ax1, ax2, &pid, NULL, NULL)) != eslOK) return status;
+#endif
+
+  *ret_link = (pid >= param->maxid ? TRUE : FALSE); 
+  return status;
+}
+#endif
+
+
+
+
+/*****************************************************************
+ * 3. Some internal functions needed for regression tests
+ *****************************************************************/
+
+/* When regression testing against squid, we have to replace
+ * Easel's distance calculations with a simpler, (even) less robust 
+ * calculation that squid did.
+ */
+#if defined(eslMSACLUSTER_REGRESSION) || defined(eslMSAWEIGHT_REGRESSION)
+static double 
+squid_distance(char *s1, char *s2)
+{
+  int diff  = 0;
+  int valid = 0;
+
+  for (; *s1 != '\0'; s1++, s2++)
+    {
+      if (!isalpha(*s1) || !isalpha(*s2)) continue;
+      if (*s1 != *s2) diff++;
+      valid++;
+    }
+  return (valid > 0 ? ((double) diff / (double) valid) : 0.0);
+}
+#ifdef eslAUGMENT_ALPHABET
+static double
+squid_xdistance(ESL_ALPHABET *a, ESL_DSQ *x1, ESL_DSQ *x2)
+{
+  int diff  = 0;
+  int valid = 0;
+
+  for (; *x1 != eslDSQ_SENTINEL; x1++, x2++)
+    {
+      if (esl_abc_XIsGap(a, *x1) || esl_abc_XIsGap(a, *x2)) continue;
+      if (*x1 != *x2) diff++;
+      valid++;
+    }
+  return (valid > 0 ? ((double) diff / (double) valid) : 0.0);
+}
+#endif
+#endif /* eslMSACLUSTER_REGRESSION || eslMSAWEIGHT_REGRESSION */
+
+
+/*****************************************************************
+ * 4. Unit tests
+ *****************************************************************/
+#ifdef eslMSACLUSTER_TESTDRIVE
+#include "esl_getopts.h"
+
+static void
+utest_SingleLinkage(ESL_GETOPTS *go, const ESL_MSA *msa, double maxid, int expected_nc, int last_assignment)
+{
+  char *msg        = "utest_SingleLinkage() failed";
+  int  *assignment = NULL;
+  int  *nin        = NULL;
+  int   nc;
+
+  if (esl_msacluster_SingleLinkage(msa, maxid, &assignment, &nin, &nc) != eslOK) esl_fatal(msg);
+  if (nc != expected_nc)                                                   esl_fatal(msg);
+  if (assignment[msa->nseq-1] != last_assignment)                          esl_fatal(msg);
+  free(assignment);
+  free(nin);
+}
+#endif /*eslMSACLUSTER_TESTDRIVE*/
+
+/*****************************************************************
+ * 5. Test driver
+ *****************************************************************/
+#ifdef eslMSACLUSTER_TESTDRIVE
+/* gcc -g -Wall -o msacluster_utest -I. -L. -DeslMSACLUSTER_TESTDRIVE esl_msacluster.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msacluster.h"
+#include "esl_msafile.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for msacluster module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go      = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_ALPHABET   *abc     = esl_alphabet_Create(eslAMINO);
+  ESL_MSA        *msa     = esl_msa_CreateFromString("\
+# STOCKHOLM 1.0\n\
+\n\
+seq0  AAAAAAAAAA\n\
+seq1  AAAAAAAAAA\n\
+seq2  AAAAAAAAAC\n\
+seq3  AAAAAAAADD\n\
+seq4  AAAAAAAEEE\n\
+seq5  AAAAAAFFFF\n\
+seq6  AAAAAGGGGG\n\
+seq7  AAAAHHHHHH\n\
+seq8  AAAIIIIIII\n\
+seq9  AAKKKKKKKK\n\
+seq10 ALLLLLLLLL\n\
+seq11 MMMMMMMMMM\n\
+//",   eslMSAFILE_STOCKHOLM);
+
+
+  utest_SingleLinkage(go, msa, 1.0, 11, 10);    /* at 100% id, only seq0/seq1 cluster */
+  utest_SingleLinkage(go, msa, 0.5,  6,  5);    /* at 50% id, seq0-seq6 cluster       */
+  utest_SingleLinkage(go, msa, 0.0,  1,  0);    /* at 0% id, everything clusters      */
+
+  /* Do the same tests, but now with a digital MSA */
+  esl_msa_Digitize(abc, msa, NULL);
+  utest_SingleLinkage(go, msa, 1.0, 11, 10);    /* at 100% id, only seq0/seq1 cluster */
+  utest_SingleLinkage(go, msa, 0.5,  6,  5);    /* at 50% id, seq0-seq6 cluster       */
+  utest_SingleLinkage(go, msa, 0.0,  1,  0);    /* at 0% id, everything clusters      */
+
+  esl_msa_Destroy(msa);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /* eslMSACLUSTER_TESTDRIVE*/
+
+
+
+
+/*****************************************************************
+ * 6. Example
+ *****************************************************************/
+
+#ifdef eslMSACLUSTER_EXAMPLE
+/*::cexcerpt::msacluster_example::begin::*/
+/*
+   gcc -g -Wall -o msacluster_example -I. -L. -DeslMSACLUSTER_EXAMPLE esl_msacluster.c -leasel -lm
+   ./msacluster_example <MSA file>
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msacluster.h"
+#include "esl_msafile.h"
+
+int
+main(int argc, char **argv)
+{
+  char        *filename   = argv[1];
+  int          fmt        = eslMSAFILE_UNKNOWN; 
+  ESL_ALPHABET *abc       = NULL;
+  ESL_MSAFILE  *afp       = NULL;
+  ESL_MSA      *msa       = NULL;
+  double       maxid      = 0.62; /* cluster at 62% identity: the BLOSUM62 rule */
+  int         *assignment = NULL;
+  int         *nin        = NULL;
+  int          nclusters;
+  int          c, i;		  
+  int          status;
+
+  /* Open; guess alphabet; set to digital mode */
+  if ((status = esl_msafile_Open(&abc, filename, NULL, fmt, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+
+  /* read one alignment */
+  if ((status = esl_msafile_Read(afp, &msa)) != eslOK)
+    esl_msafile_ReadFailure(afp, status);
+
+  /* do the clustering */
+  esl_msacluster_SingleLinkage(msa, maxid, &assignment, &nin, &nclusters);
+
+  printf("%d clusters at threshold of %f fractional identity\n", nclusters, maxid);
+  for (c = 0; c < nclusters; c++) {
+    printf("cluster %d:\n", c);
+    for (i = 0; i < msa->nseq; i++) if (assignment[i] == c) printf("  %s\n", msa->sqname[i]);
+    printf("(%d sequences)\n\n", nin[c]);
+  }
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  free(assignment);
+  free(nin);
+  return 0;
+}
+/*::cexcerpt::msacluster_example::end::*/
+#endif /*eslMSACLUSTER_EXAMPLE*/
+/*------------------------ end of example -----------------------*/
+
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
diff --git a/esl_msacluster.h b/esl_msacluster.h
new file mode 100644
index 0000000..6121dd0
--- /dev/null
+++ b/esl_msacluster.h
@@ -0,0 +1,18 @@
+/* Clustering sequences in an MSA by % identity.
+ * 
+ */
+#ifndef eslMSACLUSTER_INCLUDED
+#define eslMSACLUSTER_INCLUDED
+
+#include "esl_msa.h"
+
+extern int esl_msacluster_SingleLinkage(const ESL_MSA *msa, double maxid, 
+					int **opt_c, int **opt_nin, int *opt_nc);
+
+#endif /*eslMSACLUSTER_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_msacluster.tex b/esl_msacluster.tex
new file mode 100644
index 0000000..2035b58
--- /dev/null
+++ b/esl_msacluster.tex
@@ -0,0 +1,33 @@
+The \eslmod{msacluster} module implements single linkage clustering by
+sequence identity for the sequences in a multiple sequence
+alignment. The API is summarized in Table~\ref{tbl:msacluster_api}.
+
+Clustering is done using the generalized single linkage clustering
+algorithm in the \eslmod{cluster} module. 
+
+\eslmod{msacluster} requires the \eslmod{cluster}, \eslmod{distance},
+and \eslmod{msa} and \eslmod{distance} modules. It can be augmented
+with the \eslmod{alphabet} module, which adds the ability to deal with
+digitized MSAs.
+
+% Table generated by autodoc -t esl_msacluster.c (so don't edit here, edit esl_msacluster.c:)
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\hyperlink{func:esl_msacluster_SingleLinkage()}{\ccode{esl\_msacluster\_SingleLinkage()}} & Single linkage clustering by percent identity.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{msacluster} API.}
+\label{tbl:msacluster_api}
+\end{table}
+
+\subsection{Example of using the msacluster API}
+
+An example of reading an MSA from a file and doing
+single-linkage-clustering on the aligned sequences at $\geq$ 62\%
+sequence identity:
+
+\input{cexcerpts/msacluster_example}
diff --git a/esl_msafile.c b/esl_msafile.c
new file mode 100644
index 0000000..b567697
--- /dev/null
+++ b/esl_msafile.c
@@ -0,0 +1,1492 @@
+/* Multiple sequence alignment file i/o 
+ * 
+ * Table of contents:
+ *    1. Opening/closing an ESL_MSAFILE.
+ *    2. ESL_MSAFILE_FMTDATA: optional added constraints on formats.
+ *    3. Guessing file formats.
+ *    4. Guessing alphabets.
+ *    5. Random MSA flatfile access. [augmentation: ssi]
+ *    6. Reading an MSA from an ESL_MSAFILE.
+ *    7. Writing an MSA to a stream.
+ *    8. Utilities used by specific format parsers.
+ *    9. Unit tests.
+ *   10. Test driver.
+ *   11. Examples.
+ *   12. Copyright and license.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_mem.h"
+#include "esl_msafile.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+
+
+
+
+/*****************************************************************
+ *# 1. Opening/closing an ESL_MSAFILE
+ *****************************************************************/
+
+static int msafile_Create    (ESL_MSAFILE **ret_afp);
+static int msafile_OpenBuffer(ESL_ALPHABET **byp_abc, ESL_BUFFER *bf, int format, ESL_MSAFILE_FMTDATA *fmtd, ESL_MSAFILE *afp);
+
+/* Function:  esl_msafile_Open()
+ * Synopsis:  Open a multiple sequence alignment file for input.
+ *
+ * Purpose:   Open a multiple sequence alignment file <msafile> for input.
+ *            Return an open <ESL_MSAFILE> handle in <*ret_afp>.
+ *
+ *            <msafile> is usually the name of a file. Alignments may
+ *            also be read from standard input, or from
+ *            gzip-compressed files.  If <msafile> is ``-'', alignment
+ *            input is taken from the standard input stream. If
+ *            <msafile> ends in ``.gz'', alignment input is read
+ *            through a pipe from <gzip -dc>.
+ *            
+ *            <byp_abc>, <env>, <format>, and <fmtd> support a variety
+ *            of optional/advanced operations, as described
+ *            below. Minimally, a caller can set <byp_abc> to <NULL>,
+ *            <format> to <eslMSAFILE_UNKNOWN>, and <fmtd> to <NULL>,
+ *            and <msafile> will be opened in text mode; in the
+ *            current working directory; and its format will be
+ *            autodetected.
+ *            
+ *            The <byp_abc> argument controls whether data are to be
+ *            read in text or digital mode. In digital mode, alignment
+ *            data are immediately digitized into an Easel internal
+ *            alphabet (which among other things, allows various
+ *            things to operate on sequence data more efficiently) and
+ *            because an expected alphabet is known, parsers are able
+ *            to detect invalid characters. The caller may either
+ *            provide an alphabet (thus asserting what it's expected
+ *            to be), or have <esl_msafile_Open()> look at the file
+ *            and guess what alphabet it appears to be (DNA or amino
+ *            acid code, usually).  In text mode, alignment data are
+ *            read verbatim. It might be advantageous for an
+ *            application to read in text mode -- for example, if a
+ *            variant alignment format is using characters in some
+ *            special way, and you need to deal with them specially.
+ *            All this goes through the setting of the passed-by-reference
+ *            alphabet pointer <byp_abc>. If caller passes NULL for
+ *            the <byp_abc> argument, input is in text mode. If caller
+ *            provides a valid non-NULL <byp_abc> pointer but
+ *            <*byp_abc> is NULL (that is, caller has declared
+ *            <ESL_ALPHABET *abc = NULL> and passed <&abc> as an
+ *            argument), then we attempt to guess the digital alphabet
+ *            using <esl_msafile_GuessAlphabet()>, based on the first
+ *            alignment in the input. In this case, the new alphabet
+ *            is allocated here and returned to the caller. If caller
+ *            provides a digital alphabet (that is, <ESL_ALPHABET *abc
+ *            = esl_alphabet_Create...()> and passed <&abc>), that's
+ *            the alphabet we use.
+ * 
+ *            The <env> argument controls where we search for the
+ *            <msafile>.  If <env> is <NULL>, only the current working
+ *            directory is checked.  Optionally, caller can provide in
+ *            <env> the name of an environment variable ("PFAMDB",
+ *            perhaps), in which the routine can find a
+ *            colon-delimited list of directories.  Then, if <msafile>
+ *            is not found in the current working directory, we look
+ *            for it in these directories, in the order they're
+ *            listed.
+ *
+ *            The <format> argument allows the caller to either allow
+ *            <esl_msafile_Open()> to autodetect the file format of
+ *            <msafile>, or to assert that it knows the file is in a
+ *            particular format. If <format> is <eslMSAFILE_UNKNOWN>,
+ *            format autodetection is performed. Other valid codes include:
+ *             | <eslMSAFILE_STOCKHOLM>   | Stockholm format                    |
+ *             | <eslMSAFILE_AFA>         | Aligned FASTA format                | 
+ *             | <eslMSAFILE_CLUSTAL>     | Clustal format (strict)             |
+ *             | <eslMSAFILE_CLUSTALLIKE> | Clustal-like  (MUSCLE, PROBCONS...) |
+ *             | <eslMSAFILE_PHYLIP>      | PHYLIP interleaved format           |
+ *             | <eslMSAFILE_PHYLIPS>     | PHYLIP sequential format            |
+ *             | <eslMSAFILE_A2M>         | UCSC SAM A2M (dotless or dotful)    |
+ *             | <eslMSAFILE_PSIBLAST>    | NCBI PSI-BLAST                      |
+ *             | <eslMSAFILE_SELEX>       | a general alignment block format    |
+ *
+ *            The <fmtd> argument is an optional pointer to a
+ *            <ESL_MSAFILE_FMTDATA> structure that the caller may
+ *            initialize and provide, in order to assert any
+ *            additional unusual constraints on the input format --
+ *            for example, to dictate that a PHYLIP format file must
+ *            have some nonstandard name field width. Generally,
+ *            though, <fmtd> will be <NULL>, and such things would
+ *            either be autodetected as part of the autodetected
+ *            format, or the strict version of the parser will be
+ *            used.  (That is, if you open a PHYLIP file with
+ *            <format=eslMSAFILE_UNKNOWN> and a <NULL fmtd>, the
+ *            format autodetector is used, and it will automagically
+ *            detect nonstandard PHYLIP namewidths != 10. But if you
+ *            open a PHYLIP file with <format=eslMSAFILE_PHYLIP> and a
+ *            <NULL fmtd>, then you get the strict interleaved PHYLIP
+ *            parser, which requires a name width of exactly 10.)
+ *
+ * Args:      byp_abc   - digital alphabet to use, or NULL for text mode
+ *                        if <*byp_abc> is NULL, guess the digital alphabet,
+ *                        create it, and return it in <*byp_abc>.
+ *                        If <*byp_abc> is a digital alphabet, use it.
+ *            msafile   - name of alignment input to open;
+ *                        if "-", read standard input;
+ *                        if "*.gz", read through a <gzip -dc> pipe.
+ *            env       - <NULL>, or the name of an environment variable
+ *                        containing colon-delimited list of directories
+ *                        in which to search for <msafile> (e.g. "PFAMDB").
+ *            format    - format code, such as <eslMSAFILE_STOCKHOLM>;
+ *                        or <eslMSAFILE_UNKNOWN> to autodetect format.
+ *            fmtd      - <NULL>, or a pointer to an initialized 
+ *                        <ESL_MSAFILE_FMTDATA> structure, containing
+ *                        any additional unusual constraints to apply
+ *                        to the input format.
+ *            *ret_afp  - RETURN: open MSA input stream.
+ *
+ * Returns:   <eslOK> on success, and <*ret_afp> is the newly opened msa file.
+ *
+ *            <eslENOTFOUND> if <msafile> doesn't exist or can't be
+ *            opened for reading; or (in the case of a <.gz> file) if
+ *            a <gzip> executable doesn't exist in user's <PATH> or
+ *            can't be executed. <afp->errmsg> is something like 
+ *            "couldn't open %s for reading", with <%s> being the 
+ *            name of the msafile.
+ *
+ *            <eslENOFORMAT> if we tried to autodetect the file format
+ *            (caller provided <format=eslMSAFILE_UNKNOWN>), and
+ *            failed. <afp->errmsg> is an informative user-directed
+ *            message, minimally something like "couldn't determine alignment 
+ *            input format", possibly more detailed.
+ *
+ *            <eslENOALPHABET> if we tried to autodetect the alphabet
+ *            (caller provided <&abc>, <abc=NULL> to request digital
+ *            mode w/ alphabet autodetection) but the alphabet could
+ *            not be reliably guessed.
+ *            
+ *            <eslFAIL> in the case of a <.gz> file and the <gzip -dc>
+ *            command fails on it.
+ *            
+ *            On any of these normal errors, <*ret_afp> is returned in
+ *            an error state, containing a user-directed error message
+ *            in <afp->errmsg> and (if relevant) the full path to
+ *            <msafile> that we attempted to open in
+ *            <afp->bf->filename>. See <esl_msafile_OpenFailure()> for
+ *            a function that gives a standard way of reporting these
+ *            diagnostics to <stderr>.
+ *            
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslESYS> on a system call failure, such as <fread()>.
+ *            <eslEINVAL> if we tried to use <stdin> but the <stdin> stream was
+ *            invalid (in an error state, <NULL>, or at <EOF>).
+ *            On thrown exceptions, <*ret_afp> is <NULL>.
+ */
+int
+esl_msafile_Open(ESL_ALPHABET **byp_abc, const char *msafile, const char *env, int format, ESL_MSAFILE_FMTDATA *fmtd, ESL_MSAFILE **ret_afp)
+{
+  ESL_MSAFILE *afp = NULL;
+  int          status;
+
+  if ( (status = msafile_Create(&afp)) != eslOK) goto ERROR;
+
+  if ((status = esl_buffer_Open(msafile, env, &(afp->bf))) != eslOK)
+    ESL_XFAIL(status, afp->errmsg, "%s", afp->bf->errmsg); /* ENOTFOUND; FAIL are normal here */
+
+  if ( (status = msafile_OpenBuffer(byp_abc, afp->bf, format, fmtd, afp)) != eslOK) goto ERROR;
+
+  *ret_afp = afp; 
+  return eslOK;
+
+ ERROR:  /* on normal errors, afp is returned in an error state */
+  if (status == eslENOTFOUND || status == eslFAIL || status == eslENOFORMAT || status == eslENODATA || status == eslENOALPHABET) 
+    { afp->abc = NULL; *ret_afp = afp;}
+  else 
+    { if (afp) esl_msafile_Close(afp);  *ret_afp = NULL; }
+  return status;
+}
+
+
+/* Function:  esl_msafile_OpenMem()
+ * Synopsis:  Open a string or buffer for parsing as an MSA.
+ *
+ * Purpose:   Essentially the same as <esl_msafile_Open()>, except
+ *            we ``open'' the string or buffer <p>, <n> as the 
+ *            input source.
+ *            
+ *            If <p> is a NUL-terminated string, providing its length
+ *            <n> is optional; <n> may be passed as -1. If <p> is an
+ *            unterminated buffer, providing the length <n> is
+ *            mandatory.
+ */
+int
+esl_msafile_OpenMem(ESL_ALPHABET **byp_abc, const char *p, esl_pos_t n, int format, ESL_MSAFILE_FMTDATA *fmtd, ESL_MSAFILE **ret_afp)
+{
+  ESL_MSAFILE *afp = NULL;
+  int status;
+
+  if ( (status = msafile_Create(&afp))                 != eslOK) goto ERROR;
+  if ( (status = esl_buffer_OpenMem(p, n, &(afp->bf))) != eslOK) goto ERROR;
+
+  if ( (status = msafile_OpenBuffer(byp_abc, afp->bf, format, fmtd, afp)) != eslOK) goto ERROR;
+  *ret_afp = afp; 
+  return eslOK;
+
+ ERROR:
+  if (status == eslENOTFOUND || status == eslFAIL || status == eslEFORMAT || status == eslENODATA || status == eslENOALPHABET) 
+    { afp->abc = NULL; *ret_afp = afp;}
+  else 
+    { if (afp) esl_msafile_Close(afp);  *ret_afp = NULL; }
+  return status;
+}
+
+
+/* Function:  esl_msafile_OpenBuffer()
+ * Synopsis:  Open an input buffer for parsing as an MSA.
+ *
+ * Purpose:   Essentially the same as <esl_msafile_Open()>, except
+ *            we ``open'' an <ESL_BUFFER> <bf> that's already been
+ *            opened by the caller for some input source.
+ */
+int
+esl_msafile_OpenBuffer(ESL_ALPHABET **byp_abc, ESL_BUFFER *bf, int format, ESL_MSAFILE_FMTDATA *fmtd, ESL_MSAFILE **ret_afp)
+{
+  ESL_MSAFILE *afp = NULL;
+  int status;
+
+  if ( (status = msafile_Create(&afp)) != eslOK) goto ERROR;
+
+  afp->bf = bf;
+  if ((status = msafile_OpenBuffer(byp_abc, afp->bf, format, fmtd, afp)) != eslOK) goto ERROR;
+  *ret_afp = afp; 
+  return eslOK;
+
+ ERROR:
+  if (status == eslENOTFOUND || status == eslFAIL || status == eslEFORMAT || status == eslENODATA || status == eslENOALPHABET) 
+    { afp->abc = NULL; *ret_afp = afp;}
+  else 
+    { if (afp) esl_msafile_Close(afp);  *ret_afp = NULL; }
+  return status;
+}
+
+/* Function:  esl_msafile_OpenFailure()
+ * Synopsis:  Report diagnostics of normal error in opening MSA file, and exit.
+ *
+ * Purpose:   Report user-directed diagnostics of a normal error in opening
+ *            an MSA input. Print a message to <stderr>, then exit. 
+ */
+void
+esl_msafile_OpenFailure(ESL_MSAFILE *afp, int status)
+{
+  int show_source = FALSE;
+  int show_fmt    = FALSE;
+
+  fprintf(stderr, "Alignment input open failed.\n");
+
+  if      (status == eslENOTFOUND)   { fprintf(stderr, "   %s\n", afp->errmsg);                                      }
+  else if (status == eslFAIL)	     { fprintf(stderr, "   %s\n", afp->errmsg);                                      }
+  else if (status == eslENOFORMAT)   { fprintf(stderr, "   %s\n", afp->errmsg); show_source = TRUE;                  }
+  else if (status == eslENOALPHABET) { fprintf(stderr, "   %s\n", afp->errmsg); show_source = TRUE; show_fmt = TRUE; }
+  else if (status == eslEMEM)        { fprintf(stderr, "   Memory allocation failure\n");                            }
+  else if (status == eslESYS)        { fprintf(stderr, "   System call failed, possibly fread()\n");                 }
+  else                               { fprintf(stderr, "   Unexpected error code %d\n", status);                     }
+
+  if (show_source) {
+    switch (afp->bf->mode_is) {
+    case eslBUFFER_STREAM:   fprintf(stderr, "   while reading from an input stream (not a file)\n");   break;
+    case eslBUFFER_CMDPIPE:  fprintf(stderr, "   while reading through a pipe (not a file)\n");         break;
+    case eslBUFFER_FILE:     
+    case eslBUFFER_ALLFILE:
+    case eslBUFFER_MMAP:     fprintf(stderr, "   while reading file %s\n", afp->bf->filename);          break;
+    case eslBUFFER_STRING:   fprintf(stderr, "   while reading from a provided string (not a file)\n"); break;
+    default:                 break; 
+    }
+  }
+
+  if (show_fmt) {
+    fprintf(stderr, "   while parsing for %s format\n", esl_msafile_DecodeFormat(afp->format));
+  }
+
+  esl_msafile_Close(afp);
+  exit(status);
+}
+
+/* Function:  esl_msafile_SetDigital()
+ * Synopsis:  Convert an open text-mode ESL_MSAFILE to digital mode.
+ *
+ * Purpose:   Convert the open <afp> from text mode to digital mode,
+ *            using alphabet <abc>.
+ *
+ * Note:      This function is only here for legacy support: it's
+ *            called by esl_sqio, which still uses an outdated
+ *            open / guess alphabet / set digital pattern. When 
+ *            sqio is upgraded next, this function should be removed.
+ */
+int
+esl_msafile_SetDigital(ESL_MSAFILE *afp, const ESL_ALPHABET *abc)
+{
+  int status;
+
+  afp->abc = abc;
+
+  switch (afp->format) {
+  case eslMSAFILE_A2M:          status = esl_msafile_a2m_SetInmap(      afp); break;
+  case eslMSAFILE_AFA:          status = esl_msafile_afa_SetInmap(      afp); break;
+  case eslMSAFILE_CLUSTAL:      status = esl_msafile_clustal_SetInmap(  afp); break;
+  case eslMSAFILE_CLUSTALLIKE:  status = esl_msafile_clustal_SetInmap(  afp); break;
+  case eslMSAFILE_PFAM:         status = esl_msafile_stockholm_SetInmap(afp); break;
+  case eslMSAFILE_PHYLIP:       status = esl_msafile_phylip_SetInmap(   afp); break;
+  case eslMSAFILE_PHYLIPS:      status = esl_msafile_phylip_SetInmap(   afp); break;
+  case eslMSAFILE_PSIBLAST:     status = esl_msafile_psiblast_SetInmap( afp); break;
+  case eslMSAFILE_SELEX:        status = esl_msafile_selex_SetInmap(    afp); break;
+  case eslMSAFILE_STOCKHOLM:    status = esl_msafile_stockholm_SetInmap(afp); break;
+  default:                      ESL_EXCEPTION(eslEINCONCEIVABLE, "no such alignment file format");
+  }
+  return status;
+}
+
+/* Function:  esl_msafile_Close()
+ * Synopsis:  Close an open <ESL_MSAFILE>.
+ */
+void
+esl_msafile_Close(ESL_MSAFILE *afp)
+{
+  if (afp) {
+    if (afp->bf)        esl_buffer_Close(afp->bf);
+    if (afp->ssi)       esl_ssi_Close(afp->ssi);
+    free(afp);
+  }
+}
+
+static int
+msafile_Create(ESL_MSAFILE **ret_afp)
+{
+  ESL_MSAFILE  *afp = NULL;
+  int           status;
+
+  ESL_ALLOC(afp, sizeof(ESL_MSAFILE));
+  afp->bf         = NULL;
+  afp->line       = NULL;
+  afp->n          = 0;
+  afp->linenumber = 0;
+  afp->lineoffset = 0;
+  afp->format     = eslMSAFILE_UNKNOWN;
+  afp->abc        = NULL;
+  afp->ssi        = NULL;
+  afp->errmsg[0]  = '\0';
+
+  esl_msafile_fmtdata_Init(&(afp->fmtd));
+
+  *ret_afp = afp;
+  return eslOK;
+
+ ERROR:
+  *ret_afp = NULL;
+  return status;
+}
+
+
+
+/* All input sources funnel through here.
+ * Here, <afp> is already allocated and initialized, and the input
+ * <bf> is opened successfully.
+ */
+static int
+msafile_OpenBuffer(ESL_ALPHABET **byp_abc, ESL_BUFFER *bf, int format, ESL_MSAFILE_FMTDATA *fmtd,  ESL_MSAFILE *afp)
+{
+  ESL_ALPHABET        *abc       = NULL;
+  int                  alphatype = eslUNKNOWN;
+  int                  status;
+
+  /* if caller provided <fmtd>, copy it into afp->fmtd */
+  if (fmtd) esl_msafile_fmtdata_Copy(fmtd, &(afp->fmtd));
+
+  /* Determine the format */
+  if (format == eslMSAFILE_UNKNOWN && 
+      (status = esl_msafile_GuessFileFormat(afp->bf, &format, &(afp->fmtd), afp->errmsg)) != eslOK)
+    goto ERROR;
+  afp->format = format;
+
+  /* Determine the alphabet; set <abc>. (<abc> == NULL means text mode.)  */
+  /* Note that GuessAlphabet() functions aren't allowed to use the inmap, because it isn't set yet */
+#ifdef eslAUGMENT_ALPHABET
+  if (byp_abc && *byp_abc)	/* Digital mode, and caller provided the alphabet */
+    { 
+      abc       = *byp_abc;
+      alphatype = abc->type;
+    } 
+  else if (byp_abc)		/* Digital mode, and caller wants us to guess and create an alphabet */
+    {
+      status = esl_msafile_GuessAlphabet(afp, &alphatype);
+      if      (status == eslENOALPHABET) ESL_XFAIL(eslENOALPHABET, afp->errmsg, "couldn't guess alphabet (maybe try --dna/--rna/--amino if available)");
+      else if (status != eslOK)          goto ERROR;
+      if ( (abc = esl_alphabet_Create(alphatype))                == NULL) { status = eslEMEM; goto ERROR; }
+    }    
+#endif
+  if (abc && ! byp_abc) ESL_EXCEPTION(eslEINCONCEIVABLE, "Your version of Easel does not include digital alphabet code."); 
+  /* ^^^^^^^^^^^^^^^^^  this test interacts tricksily with the #ifdef above */
+  afp->abc = abc;	/* with afp->abc set, the inmap config functions know whether to do digital/text    */
+
+  /* Configure the format-specific, digital or text mode character
+   * input map in afp->inmap.
+   * All of these must:
+   *    
+   *    set inmap[0] to an appropriate 'unknown' character, to replace
+   *       invalid input with.
+   *    set ' ' to eslDSQ_IGNORE (if we're supposed to accept and skip
+   *       it), or map it to a gap, or set it as eslDSQ_ILLEGAL.
+   *    in digital mode, copy the abc->inmap
+   *    in text mode, decide if we should accept most any
+   *        non-whitespace character (isgraph()), or if the format is
+   *        inherently restrictive and we should go with isalpha() +
+   *        some other valid characters "_-.~*" instead.
+   */
+  switch (afp->format) {
+  case eslMSAFILE_A2M:          if ((status = esl_msafile_a2m_SetInmap(      afp)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_AFA:          if ((status = esl_msafile_afa_SetInmap(      afp)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_CLUSTAL:      if ((status = esl_msafile_clustal_SetInmap(  afp)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_CLUSTALLIKE:  if ((status = esl_msafile_clustal_SetInmap(  afp)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_PFAM:         if ((status = esl_msafile_stockholm_SetInmap(afp)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_PHYLIP:       if ((status = esl_msafile_phylip_SetInmap(   afp)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_PHYLIPS:      if ((status = esl_msafile_phylip_SetInmap(   afp)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_PSIBLAST:     if ((status = esl_msafile_psiblast_SetInmap( afp)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_SELEX:        if ((status = esl_msafile_selex_SetInmap(    afp)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_STOCKHOLM:    if ((status = esl_msafile_stockholm_SetInmap(afp)) != eslOK) goto ERROR; break;
+  default: ESL_XEXCEPTION(eslENOFORMAT, "no such alignment file format");
+  }
+
+  if (esl_byp_IsReturned(byp_abc)) *byp_abc = abc;
+  return eslOK;
+
+ ERROR:  /* on normal errors, afp is returned in an error state */
+  if (abc && ! esl_byp_IsProvided(byp_abc)) { esl_alphabet_Destroy(abc); }
+  if (esl_byp_IsReturned(byp_abc)) *byp_abc = NULL;
+  afp->abc = NULL;
+  return status;
+}
+/*------------- end, open/close an ESL_MSAFILE -----------------*/
+
+
+
+/*****************************************************************
+ *# 2. ESL_MSAFILE_FMTDATA: optional extra constraints on formats.
+ *****************************************************************/
+
+/* Function:  esl_msafile_fmtdata_Init()
+ * Synopsis:  Initialize a <ESL_MSAFILE_FMTDATA> structure.
+ */
+int
+esl_msafile_fmtdata_Init(ESL_MSAFILE_FMTDATA *fmtd)
+{
+  fmtd->namewidth = 0;
+  fmtd->rpl       = 0;
+  return eslOK;
+}
+
+/* Function:  esl_msafile_fmtdata_Copy()
+ * Synopsis:  Copy one <ESL_MSAFILE_FMTDATA> structure to another.
+ */
+int
+esl_msafile_fmtdata_Copy(ESL_MSAFILE_FMTDATA *src, ESL_MSAFILE_FMTDATA *dst)
+{
+  dst->namewidth = src->namewidth;
+  dst->rpl       = src->rpl;
+  return eslOK;
+}
+
+/*--------------- ESL_MSAFILE_FMTDATA --------------------------*/
+
+
+/*****************************************************************
+ *# 3. Guessing file format.
+ *****************************************************************/
+
+static int msafile_check_selex  (ESL_BUFFER *bf);
+
+/* Function:  esl_msafile_GuessFileFormat()
+ * Synopsis:  Guess the MSA file format of an open buffer.
+ *
+ * Purpose:   Peek into an open buffer, and try to determine what
+ *            alignment file format (if any) its input is in. If a
+ *            format can be determined, return <eslOK> and set
+ *            <*ret_fmtcode> to the format code.  If not, return
+ *            <eslENOFORMAT> and set <*ret_fmtcode> to
+ *            <eslMSAFILE_UNKNOWN>.  In either case, the buffer <bf> is
+ *            restored to its original position upon return.
+ *            
+ *            Some formats may have variants that require special
+ *            handling. Caller may pass a pointer <*opt_fmtd> to a
+ *            <ESL_MSAFILE_FMTDATA> structure to capture this
+ *            information from format autodetection, or <NULL>. If the
+ *            structure is provided, it is reinitialized, and any
+ *            fields that can be determined by the appropriate
+ *            format-guessing function are filled in. If <*opt_fmtd>
+ *            is <NULL>, the range of variation that can be captured
+ *            by some formats may be limited. Currently this only
+ *            affects PHYLIP format, where <opt_fmtd->namewidth>
+ *            allows files with nonstandard name field widths to be
+ *            autodetected and parsed.
+ *
+ * Args:      bf          - the open buffer to read input from
+ *            ret_fmtcode - RETURN:    format code that's determined
+ *            opt_fmtd    - optRETURN: ptr to an <ESL_MSAFILE_FMTDATA> structure to
+ *                          be filled in with additional format-specific data, or <NULL>
+ *            errbuf      - optRETURN: space for an informative error message if 
+ *                          format autodetection fails; caller allocates for <eslERRBUFSIZE> bytes.
+ *
+ * Returns:   <eslOK> on success, and <*ret_fmtcode> contains the format code.
+ *
+ *            <eslENOFORMAT> if format can't be guessed; now <*ret_fmtcode> contains
+ *            <eslMSAFILE_UNKNOWN>, and optional <errbuf> contains an explanation.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_msafile_GuessFileFormat(ESL_BUFFER *bf, int *ret_fmtcode, ESL_MSAFILE_FMTDATA *opt_fmtd, char *errbuf)
+{
+  esl_pos_t  initial_offset;
+  char      *p;
+  esl_pos_t  n;
+  int        fmt_bysuffix    = eslMSAFILE_UNKNOWN;
+  int        fmt_byfirstline = eslMSAFILE_UNKNOWN;
+  int        status;
+
+  /* Initialize the optional data, if provided (move this initialization to a function someday) */
+  if (opt_fmtd) esl_msafile_fmtdata_Init(opt_fmtd);
+  if (errbuf)   errbuf[0] = '\0';
+
+  /* As we start, save parser status:
+   *   remember the offset where we started (usually 0, but not necessarily)
+   *   set an anchor to be sure that this offset stays in the buffer's memory
+   */
+  initial_offset = esl_buffer_GetOffset(bf);
+  esl_buffer_SetAnchor(bf, initial_offset);
+
+  /* We may use a filename suffix as a clue, especially when 
+   * distinguishing formats that may not be distinguishable.
+   * (if there's a filename, and if it has a suffix, anyway.)
+   */
+  if (bf->filename)
+    {
+      esl_file_Extension(bf->filename, 0, &p, &n);
+      if (esl_memstrcmp(p, n, ".gz")) esl_file_Extension(bf->filename, 3, &p, &n);
+      if (p)
+	{
+	  if      (esl_memstrcmp(p, n, ".sto"))    fmt_bysuffix = eslMSAFILE_STOCKHOLM;
+	  else if (esl_memstrcmp(p, n, ".sth"))    fmt_bysuffix = eslMSAFILE_STOCKHOLM;
+	  else if (esl_memstrcmp(p, n, ".stk"))    fmt_bysuffix = eslMSAFILE_STOCKHOLM;
+	  else if (esl_memstrcmp(p, n, ".afa"))    fmt_bysuffix = eslMSAFILE_AFA;
+	  else if (esl_memstrcmp(p, n, ".afasta")) fmt_bysuffix = eslMSAFILE_AFA;
+	  else if (esl_memstrcmp(p, n, ".pfam"))   fmt_bysuffix = eslMSAFILE_PFAM;
+	  else if (esl_memstrcmp(p, n, ".a2m"))    fmt_bysuffix = eslMSAFILE_A2M;
+	  else if (esl_memstrcmp(p, n, ".slx"))    fmt_bysuffix = eslMSAFILE_SELEX;
+	  else if (esl_memstrcmp(p, n, ".selex"))  fmt_bysuffix = eslMSAFILE_SELEX;
+	  else if (esl_memstrcmp(p, n, ".pb"))     fmt_bysuffix = eslMSAFILE_PSIBLAST;
+	  else if (esl_memstrcmp(p, n, ".ph"))     fmt_bysuffix = eslMSAFILE_PHYLIP;
+	  else if (esl_memstrcmp(p, n, ".phy"))    fmt_bysuffix = eslMSAFILE_PHYLIP;
+	  else if (esl_memstrcmp(p, n, ".phyi"))   fmt_bysuffix = eslMSAFILE_PHYLIP;
+	  else if (esl_memstrcmp(p, n, ".phys"))   fmt_bysuffix = eslMSAFILE_PHYLIPS;
+	}
+    }
+
+  /* We peek at the first non-blank line of the file.
+   * Multiple sequence alignment files are often identifiable by a token on this line.
+   */
+  /* Skip blank lines, get first non-blank one */
+  do   { 
+    status = esl_buffer_GetLine(bf, &p, &n);
+  } while (status == eslOK && esl_memspn(p, n, " \t") == n);
+  if (status == eslEOF) ESL_XFAIL(eslENOFORMAT, errbuf, "can't guess alignment input format: empty file/no data");
+
+  if      (esl_memstrpfx(p, n, "# STOCKHOLM"))                      fmt_byfirstline = eslMSAFILE_STOCKHOLM;
+  else if (esl_memstrpfx(p, n, ">"))                                fmt_byfirstline = eslMSAFILE_AFA;
+  else if (esl_memstrpfx(p, n, "CLUSTAL"))                          fmt_byfirstline = eslMSAFILE_CLUSTAL;
+  else if (esl_memstrcontains(p, n, "multiple sequence alignment")) fmt_byfirstline = eslMSAFILE_CLUSTALLIKE;
+  else {
+    char     *tok;
+    esl_pos_t toklen;
+    /* look for <nseq> <alen>, characteristic of PHYLIP files */
+    if (esl_memtok(&p, &n, " \t", &tok, &toklen) == eslOK  && esl_memspn(tok, toklen, "0123456789") == toklen &&
+	esl_memtok(&p, &n, " \t", &tok, &toklen) == eslOK  && esl_memspn(tok, toklen, "0123456789") == toklen)
+      fmt_byfirstline = eslMSAFILE_PHYLIP; /* interleaved for now; we'll look more closely soon */
+  }
+
+  /* Restore parser status, rewind to start */
+  esl_buffer_SetOffset  (bf, initial_offset);
+  esl_buffer_RaiseAnchor(bf, initial_offset);
+
+  /* Rules to determine formats.
+   * If we have to call a routine that looks deeper into the buffer
+   * than the first line, that routine must restore buffer status.
+   */
+  if      (fmt_byfirstline == eslMSAFILE_STOCKHOLM) 
+    {
+      if      (fmt_bysuffix == eslMSAFILE_STOCKHOLM) *ret_fmtcode = eslMSAFILE_STOCKHOLM;
+      else if (fmt_bysuffix == eslMSAFILE_PFAM)      *ret_fmtcode = eslMSAFILE_PFAM;
+      else    *ret_fmtcode = eslMSAFILE_STOCKHOLM;
+    }
+  else if (fmt_byfirstline == eslMSAFILE_CLUSTAL)  
+    {
+      *ret_fmtcode = eslMSAFILE_CLUSTAL;
+    }
+  else if (fmt_byfirstline == eslMSAFILE_CLUSTALLIKE) 
+    {
+      *ret_fmtcode = eslMSAFILE_CLUSTALLIKE;
+    }
+  else if (fmt_byfirstline == eslMSAFILE_AFA)
+    {
+      if      (fmt_bysuffix == eslMSAFILE_A2M) *ret_fmtcode = eslMSAFILE_A2M;  // A2M requires affirmative identification by caller,
+      else                                     *ret_fmtcode = eslMSAFILE_AFA;  //  because of ambiguity w/ AFA.
+    }
+  else if (fmt_byfirstline == eslMSAFILE_PHYLIP)
+    {
+      if      (fmt_bysuffix == eslMSAFILE_PHYLIP)  *ret_fmtcode = eslMSAFILE_PHYLIP;
+      else if (fmt_bysuffix == eslMSAFILE_PHYLIPS) *ret_fmtcode = eslMSAFILE_PHYLIPS;
+      else 
+	{
+	  int namewidth;
+	  status = esl_msafile_phylip_CheckFileFormat(bf, ret_fmtcode, &namewidth);  
+	  if      (status == eslEAMBIGUOUS) ESL_XFAIL(eslENOFORMAT, errbuf, "can't guess format: it's consistent w/ both phylip, phylips.");
+	  else if (status == eslFAIL)       ESL_XFAIL(eslENOFORMAT, errbuf, "format unrecognized, though it looks phylip-like");
+	  
+	  if      (opt_fmtd)                opt_fmtd->namewidth = namewidth;
+	  else if (namewidth != 10)         ESL_XFAIL(eslENOFORMAT, errbuf, "can't parse nonstandard PHYLIP name width (expected 10)"); /* if we can't store the nonstandard width, we can't allow the caller to think it can parse this */
+	}
+    }
+  else // if we haven't guessed so far, try selex.
+    {				/* selex parser can handle psiblast too */
+      if      (fmt_bysuffix == eslMSAFILE_SELEX) *ret_fmtcode = eslMSAFILE_SELEX;
+      else if (msafile_check_selex(bf) == eslOK) *ret_fmtcode = eslMSAFILE_SELEX;
+      else    ESL_XFAIL(eslENOFORMAT, errbuf, "couldn't guess alignment input format - doesn't even look like selex");
+    }
+
+  return eslOK;
+
+ ERROR:
+  *ret_fmtcode = eslMSAFILE_UNKNOWN;
+  return status;
+}
+
+
+/* Function:  esl_msafile_IsMultiRecord()
+ * Synopsis:  Test if a format supports multiple MSAs per file.
+ *
+ * Purpose:   Return <TRUE> if MSA file format <fmt> supports
+ *            more than one MSA record per file. Return <FALSE>
+ *            otherwise (including the cases of <fmt> being
+ *            invalid or <eslMSAFILE_UNKNOWN>).
+ */
+int
+esl_msafile_IsMultiRecord(int fmt)
+{
+  switch (fmt) {
+  case eslMSAFILE_UNKNOWN:     return FALSE;
+  case eslMSAFILE_STOCKHOLM:   return TRUE;
+  case eslMSAFILE_PFAM:        return TRUE;
+  case eslMSAFILE_A2M:         return FALSE;
+  case eslMSAFILE_PSIBLAST:    return FALSE;
+  case eslMSAFILE_SELEX:       return FALSE;
+  case eslMSAFILE_AFA:         return FALSE;
+  case eslMSAFILE_CLUSTAL:     return FALSE;
+  case eslMSAFILE_CLUSTALLIKE: return FALSE;
+  case eslMSAFILE_PHYLIP:      return TRUE; /* because seqboot. undocumented in phylip,  phylip format can come out multi-msa */
+  case eslMSAFILE_PHYLIPS:     return TRUE; /* ditto */
+  default:                     return FALSE;
+  }
+  return FALSE;			/* keep compilers happy */
+}
+  
+
+/* Function:  esl_msafile_EncodeFormat()
+ * Synopsis:  Convert text string to an MSA file format code.
+ *
+ * Purpose:   Given a text string, match it case-insensitively
+ *            against a list of possible formats, and return the
+ *            appropriate MSA file format code. For example,
+ *            <esl_msafile_EncodeFormat("Stockholm")> returns
+ *            <eslMSAFILE_STOCKHOLM>.
+ *            
+ *            If the format is unrecognized, return
+ *            <eslMSAFILE_UNKNOWN>.
+ *            
+ * Note:      Keep in sync with <esl_sqio_EncodeFormat()>, 
+ *            which decodes all possible sequence file formats,
+ *            both unaligned and aligned.           
+ */
+int
+esl_msafile_EncodeFormat(char *fmtstring)
+{
+  if (strcasecmp(fmtstring, "stockholm")   == 0) return eslMSAFILE_STOCKHOLM;
+  if (strcasecmp(fmtstring, "pfam")        == 0) return eslMSAFILE_PFAM;
+  if (strcasecmp(fmtstring, "a2m")         == 0) return eslMSAFILE_A2M;
+  if (strcasecmp(fmtstring, "phylip")      == 0) return eslMSAFILE_PHYLIP;
+  if (strcasecmp(fmtstring, "phylips")     == 0) return eslMSAFILE_PHYLIPS;
+  if (strcasecmp(fmtstring, "psiblast")    == 0) return eslMSAFILE_PSIBLAST;
+  if (strcasecmp(fmtstring, "selex")       == 0) return eslMSAFILE_SELEX;
+  if (strcasecmp(fmtstring, "afa")         == 0) return eslMSAFILE_AFA;
+  if (strcasecmp(fmtstring, "clustal")     == 0) return eslMSAFILE_CLUSTAL;
+  if (strcasecmp(fmtstring, "clustallike") == 0) return eslMSAFILE_CLUSTALLIKE;
+  return eslMSAFILE_UNKNOWN;
+}
+
+
+/* Function:  esl_msafile_DecodeFormat()
+ * Synopsis:  Convert internal file format code to text string.
+ *
+ * Purpose:   Given an internal file format code <fmt> 
+ *            (<eslMSAFILE_STOCKHOLM>, for example), returns
+ *            a string suitable for printing ("Stockholm",
+ *            for example).
+ *            
+ * Returns:   a pointer to a static description string.
+ * 
+ * Throws:    If code isn't valid, throws an <eslEINCONCEIVABLE> exception 
+ *            internally, and returns <NULL>. 
+ *            
+ * Note:      Keep in sync with <esl_sqio_DecodeFormat()>.
+ */
+char *
+esl_msafile_DecodeFormat(int fmt)
+{
+  switch (fmt) {
+  case eslMSAFILE_UNKNOWN:     return "unknown";
+  case eslMSAFILE_STOCKHOLM:   return "Stockholm";
+  case eslMSAFILE_PFAM:        return "Pfam";
+  case eslMSAFILE_A2M:         return "UCSC A2M";
+  case eslMSAFILE_PSIBLAST:    return "PSI-BLAST";
+  case eslMSAFILE_SELEX:       return "SELEX";
+  case eslMSAFILE_AFA:         return "aligned FASTA";
+  case eslMSAFILE_CLUSTAL:     return "Clustal";
+  case eslMSAFILE_CLUSTALLIKE: return "Clustal-like";
+  case eslMSAFILE_PHYLIP:      return "PHYLIP (interleaved)";
+  case eslMSAFILE_PHYLIPS:     return "PHYLIP (sequential)";
+  default:                     break;
+  }
+  esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "no such msa format code %d\n", fmt);
+  return NULL;
+}
+
+
+
+/* msafile_check_selex()
+ * Checks whether an input source appears to be in SELEX format.
+ *
+ * Check whether the input source <bf> appears to be a 
+ * SELEX-format alignment file, starting from the current point,
+ * to the end of the input. Return <eslOK> if so, <eslFAIL>
+ * if not.
+ * 
+ * The checker is more rigorous than the parser. To be autodetected,
+ * the SELEX file can't use whitespace for gaps. The parser, though,
+ * allows whitespace. A caller would have to specific SELEX format
+ * explicitly in that case.
+ */
+static int
+msafile_check_selex(ESL_BUFFER *bf)
+{
+  esl_pos_t start_offset = -1;
+  int       block_nseq   = 0;	 /* Number of seqs in each block is checked     */
+  int       nseq         = 0;
+  esl_pos_t block_nres   = 0;	 /* Number of residues in each line is checked  */
+  char     *firstname    = NULL; /* First seq name of every block is checked    */
+  esl_pos_t namelen      = 0;
+  int       blockidx     = 0;
+  int       in_block     = FALSE;
+  char     *p, *tok;
+  esl_pos_t n,  toklen;
+  int       status;
+
+  /* Anchor at the start of the input, so we can rewind */
+  start_offset = esl_buffer_GetOffset(bf);
+  if ( (status = esl_buffer_SetAnchor(bf, start_offset)) != eslOK) goto ERROR;
+
+  while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK)
+    {
+      /* Some automatic giveaways of SELEX format */
+      if (esl_memstrpfx(p, n, "#=RF")) { status = eslOK; goto DONE; }
+      if (esl_memstrpfx(p, n, "#=CS")) { status = eslOK; goto DONE; }
+      if (esl_memstrpfx(p, n, "#=SS")) { status = eslOK; goto DONE; }
+      if (esl_memstrpfx(p, n, "#=SA")) { status = eslOK; goto DONE; }
+      
+      /* skip comments */
+      if (esl_memstrpfx(p, n, "#"))    continue;
+      
+      /* blank lines: end block, reset block counters */
+      if (esl_memspn(p, n, " \t") == n)
+	{
+	  if (block_nseq && block_nseq != nseq) { status = eslFAIL; goto DONE;} /* each block has same # of seqs */
+	  if (in_block) blockidx++;
+	  if (blockidx >= 3) { status = eslOK; goto DONE; } /* stop after three blocks; we're pretty sure by now */
+	  in_block   = FALSE;
+	  block_nres = 0;
+	  block_nseq = nseq;
+	  nseq       = 0;
+	  continue;
+	}
+
+      /* else we're a "sequence" line. test for two and only two non-whitespace
+       * fields; test that second field has same length; test that each block
+       * starts with the same seq name..
+       */
+      in_block = TRUE;
+      if ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK) goto ERROR; /* there's at least one token - we already checked for blank lines */
+      if (nseq == 0)	/* check first seq name in each block */
+	{
+	  if (blockidx == 0) { firstname = tok; namelen = toklen; } /* First block: set the name we check against. */
+	  else if (toklen != namelen || memcmp(tok, firstname, toklen) != 0) { status = eslFAIL; goto DONE; } /* Subsequent blocks */
+	}
+      if (esl_memtok(&p, &n, " \t", &tok, &toklen) != eslOK) { status = eslFAIL; goto DONE; }
+      if (block_nres && toklen != block_nres)                { status = eslFAIL; goto DONE; }
+      block_nres = toklen;
+      if (esl_memtok(&p, &n, " \t", &tok, &toklen) == eslOK) { status = eslFAIL; goto DONE; }
+      nseq++;
+    }
+  if (status != eslEOF) goto ERROR;  /* EOF is expected and good; anything else is bad */
+
+  if (in_block) blockidx++; 
+  status = (blockidx ? eslOK : eslFAIL); /* watch out for the case of no input */
+  /* deliberate readthru */
+ DONE:
+  if (start_offset != -1) { 
+    if (esl_buffer_SetOffset(bf, start_offset)   != eslOK) goto ERROR;
+    if (esl_buffer_RaiseAnchor(bf, start_offset) != eslOK) goto ERROR;
+  }
+  return status;
+
+ ERROR:
+  if (start_offset != -1) { 
+    esl_buffer_SetOffset(bf, start_offset);
+    esl_buffer_RaiseAnchor(bf, start_offset);
+  }
+  return status;
+}
+/*---------------- end, file format utilities -------------------*/
+
+
+/*****************************************************************
+ *# 4. Guessing alphabet
+ *****************************************************************/
+#ifdef eslAUGMENT_ALPHABET
+
+/* Function:  esl_msafile_GuessAlphabet()
+ * Synopsis:  Guess what kind of sequences the MSA file contains.
+ *
+ * Purpose:   Guess the alphabet of the sequences in the open
+ *            <ESL_MSAFILE> <afp> -- <eslDNA>, <eslRNA>, or <eslAMINO> --
+ *            based on the residue composition of the input.
+ *            
+ * Returns:   Returns <eslOK> on success, and <*ret_type> is set
+ *            to <eslDNA>, <eslRNA>, or <eslAMINO>. 
+ *            
+ *            Returns <eslENOALPHABET> and sets <*ret_type> to
+ *            <eslUNKNOWN> if the alphabet cannot be reliably 
+ *            guessed.
+ * 
+ *            Either way, the <afp>'s buffer is restored to its original
+ *            state, no matter how much data we had to read while trying
+ *            to guess.
+ *
+ * Throws:    <eslEMEM> - an allocation error.
+ *            <eslESYS> - a system call such as <fread()> failed.
+ *            <eslEINCONCEIVABLE> - "impossible" corruption, internal bug
+ */
+int
+esl_msafile_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type)
+{
+  int status = eslENOALPHABET;
+  switch (afp->format) {
+  case eslMSAFILE_STOCKHOLM:   status = esl_msafile_stockholm_GuessAlphabet(afp, ret_type); break;
+  case eslMSAFILE_PFAM:        status = esl_msafile_stockholm_GuessAlphabet(afp, ret_type); break;
+  case eslMSAFILE_A2M:         status = esl_msafile_a2m_GuessAlphabet      (afp, ret_type); break;
+  case eslMSAFILE_PSIBLAST:    status = esl_msafile_psiblast_GuessAlphabet (afp, ret_type); break;
+  case eslMSAFILE_SELEX:       status = esl_msafile_selex_GuessAlphabet    (afp, ret_type); break;
+  case eslMSAFILE_AFA:         status = esl_msafile_afa_GuessAlphabet      (afp, ret_type); break;
+  case eslMSAFILE_CLUSTAL:     status = esl_msafile_clustal_GuessAlphabet  (afp, ret_type); break;
+  case eslMSAFILE_CLUSTALLIKE: status = esl_msafile_clustal_GuessAlphabet  (afp, ret_type); break;
+  case eslMSAFILE_PHYLIP:      status = esl_msafile_phylip_GuessAlphabet   (afp, ret_type); break; 
+  case eslMSAFILE_PHYLIPS:     status = esl_msafile_phylip_GuessAlphabet   (afp, ret_type); break; 
+  }
+  return status;
+}
+#endif /*eslAUGMENT_ALPHABET*/
+/*----------- end, utilities for alphabets ----------------------*/
+
+
+/*****************************************************************
+ *# 5. Random msa flatfile database access (with SSI)
+ *****************************************************************/
+#ifdef eslAUGMENT_SSI
+
+/* Function:  esl_msafile_PositionByKey()
+ * Synopsis:  Use SSI to reposition file to start of named MSA.
+ *
+ * Purpose:   Reposition <afp> so that the next MSA we read
+ *            will be the one named (or accessioned) <key>.
+ *
+ * Returns:   <eslOK> on success, and the file <afp> is repositioned
+ *            such that the next <esl_msafile_Read()> call will read the
+ *            alignment named <key>.
+ *            
+ *            Returns <eslENOTFOUND> if <key> isn't found in the index
+ *            for <afp>. 
+ *            
+ *            Returns <eslEFORMAT> if something goes wrong trying to
+ *            read the index, indicating some sort of file format
+ *            problem in the SSI file.
+ *
+ * Throws:    <eslENODATA> if there's no open SSI index;
+ *            <eslEINVAL> if the <offset> is invalid, either requiring rewind
+ *              of a nonrewindable stream, or off the end of the data;
+ *            <eslESYS> if a system call such as <fread()> fails;
+ *            <eslEMEM> on allocation failure.
+ *            In all these cases, the state of the <afp> is uncertain
+ *            and may be corrupt; the application should not continue
+ *            to use it.
+ */
+int
+esl_msafile_PositionByKey(ESL_MSAFILE *afp, const char *key)
+{
+  uint16_t fh;
+  off_t    offset;
+  int      status;
+
+  if (afp->ssi == NULL) ESL_EXCEPTION(eslENODATA, "Need an open SSI index to call esl_msafile_PositionByKey()");
+  if ((status = esl_ssi_FindName(afp->ssi, key, &fh, &offset, NULL, NULL)) != eslOK) return status; /* eslENOTFOUND|eslEFORMAT [eslEMEM] */
+  if ((status = esl_buffer_SetOffset(afp->bf, offset))                     != eslOK) return status; /* [eslEINVAL|eslESYS|eslEMEM] */
+
+  /* The linenumber gets messed up after a file positioning. Best we can do
+   * is to turn it off (set it to -1). FIX THIS next time SSI format is 
+   * changed: add linenumber to a primary key record.
+   */
+  afp->linenumber = -1; 
+  return eslOK;
+}
+#endif /*eslAUGMENT_SSI*/
+/*------------- end of functions added by SSI augmentation -------------------*/
+
+
+/*****************************************************************
+ *# 6. Reading MSAs from input
+ *****************************************************************/
+
+/* Function:  esl_msafile_Read()
+ * Synopsis:  Read next MSA from input.
+ *
+ * Purpose:   Reads the next MSA from open MSA input <afp>, and return it in 
+ *            <*ret_msa>.
+ *
+ * Args:      afp      - open alignment input stream
+ 8            *ret_msa - RETURN: alignment
+ *
+ * Returns:   <eslOK> on success. 
+ *
+ *            <eslEFORMAT> on a parse error, and <afp->errmsg> is set
+ *            to a user-directed error message; <*ret_msa> is <NULL>.
+ *
+ *            If no alignment is found at all, returns <eslEOF>,
+ *            and <afp->errmsg> is blank; <*ret_msa> is <NULL>.
+ *
+ *            On normal error, <afp> and the return status code may be
+ *            passed to <esl_msafile_ReadFailure()> to print diagnostics
+ *            to <stderr> (including input source information and line
+ *            number) and exit.
+ *
+ * Throws:    <eslEMEM> - an allocation failed.
+ *            <eslESYS> - a system call such as fread() failed
+ *            <eslEINCONCEIVABLE> - "impossible" corruption 
+ */
+int
+esl_msafile_Read(ESL_MSAFILE *afp, ESL_MSA **ret_msa)
+{
+  ESL_MSA  *msa    = NULL;
+  int       status = eslOK;
+#ifdef eslAUGMENT_SSI
+  esl_pos_t offset = esl_buffer_GetOffset(afp->bf);
+#endif
+
+  switch (afp->format) {
+  case eslMSAFILE_A2M:          if ((status = esl_msafile_a2m_Read      (afp, &msa)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_AFA:          if ((status = esl_msafile_afa_Read      (afp, &msa)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_CLUSTAL:      if ((status = esl_msafile_clustal_Read  (afp, &msa)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_CLUSTALLIKE:  if ((status = esl_msafile_clustal_Read  (afp, &msa)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_PFAM:         if ((status = esl_msafile_stockholm_Read(afp, &msa)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_PHYLIP:       if ((status = esl_msafile_phylip_Read   (afp, &msa)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_PHYLIPS:      if ((status = esl_msafile_phylip_Read   (afp, &msa)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_PSIBLAST:     if ((status = esl_msafile_psiblast_Read (afp, &msa)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_SELEX:        if ((status = esl_msafile_selex_Read    (afp, &msa)) != eslOK) goto ERROR; break;
+  case eslMSAFILE_STOCKHOLM:    if ((status = esl_msafile_stockholm_Read(afp, &msa)) != eslOK) goto ERROR; break;
+  default:                      ESL_EXCEPTION(eslEINCONCEIVABLE, "no such msa file format");
+  }
+  
+#ifdef eslAUGMENT_SSI
+  msa->offset = offset;
+#endif
+  *ret_msa = msa;
+  return eslOK;
+
+ ERROR:
+  if (msa) esl_msa_Destroy(msa);
+  *ret_msa = NULL;
+  return status;
+}
+
+/* Function:  esl_msafile_ReadFailure()
+ * Synopsis:  Report diagnostics of a normal error in parsing MSA file, and exit.
+ *
+ * Purpose:   Report user-directed diagnostics of a normal error from
+ *            parsing an MSA file.  Output the error message to
+ *            <stderr>, along with information about what we were
+ *            parsing (filename, if it was a file) and where we were
+ *            in the input (linenumber, if we know it). This
+ *            information is all available in <afp>. Then close <afp>
+ *            and exit with the <status> provided by the caller.
+ *
+ * Args:      afp    - open ESL_MSAFILE, containing information about
+ *                     the error and the input source.
+ *            status - exit status; generally eslEFORMAT. 
+ *
+ * Returns:   no return. Exits here with <status>.
+ */
+void
+esl_msafile_ReadFailure(ESL_MSAFILE *afp, int status)
+{
+  switch (status) {
+  case eslEFORMAT:  fprintf(stderr, "Alignment input parse error:\n   %s\n", afp->errmsg);       break;
+  case eslEOF:      fprintf(stderr, "Alignment input appears empty?\n");                         break;
+  default:          fprintf(stderr, "Alignment input read error; unexpected code %d\n", status); break;
+  }
+  
+  switch (afp->bf->mode_is) {
+  case eslBUFFER_STREAM:   fprintf(stderr, "   while reading %s from an input stream (not a file)\n", esl_msafile_DecodeFormat(afp->format));   break;
+  case eslBUFFER_CMDPIPE:  fprintf(stderr, "   while reading %s through a pipe (not a file)\n",       esl_msafile_DecodeFormat(afp->format));   break;
+  case eslBUFFER_FILE:     
+  case eslBUFFER_ALLFILE:
+  case eslBUFFER_MMAP:     fprintf(stderr, "   while reading %s file %s\n", esl_msafile_DecodeFormat(afp->format), afp->bf->filename);          break;
+  case eslBUFFER_STRING:   fprintf(stderr, "   while reading %s from a provided string (not a file)\n", esl_msafile_DecodeFormat(afp->format)); break;
+  default:                 break; 
+  }
+
+  if (afp->linenumber > 0) fprintf(stderr, "   at or near line %" PRIu64 "\n", afp->linenumber);
+  else                     fprintf(stderr, "   at or near byte %" PRIu64 "\n", esl_buffer_GetOffset(afp->bf));
+
+  esl_msafile_Close(afp);
+  exit(status);
+}
+/*------------ end, reading MSA from ESL_MSAFILE ---------------*/
+
+
+
+
+/*****************************************************************
+ *# 7. Writing an MSA to a stream.
+ *****************************************************************/
+
+/* Function:  esl_msafile_Write()
+ * Synopsis:  Write an MSA to a stream.
+ *
+ * Purpose:   Writes alignment <msa> to open stream <fp> in format <fmt>.
+ * 
+ *            In general, the <msa> is unchanged, but there are some
+ *            exceptions. For example, writing an alignment in A2M format
+ *            will alter alignment data (marking missing data
+ *            symbols on heuristically defined sequence fragments) and
+ *            create an <\#=RF> annotation line, if an <msa->rf>
+ *            annotation line isn't already present in the <msa>.
+ *
+ * Args:      fp   - open stream (such as <stdout>)  
+ *            msa  - alignment to write
+ *            fmt  - format code (such as <eslMSAFILE_STOCKHOLM>)
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslEWRITE> on any system write error, such as a filled disk.
+ */
+int
+esl_msafile_Write(FILE *fp, ESL_MSA *msa, int fmt)
+{
+  int status;
+
+  switch (fmt) {
+  case eslMSAFILE_STOCKHOLM:   status = esl_msafile_stockholm_Write(fp, msa, eslMSAFILE_STOCKHOLM);     break;
+  case eslMSAFILE_PFAM:        status = esl_msafile_stockholm_Write(fp, msa, eslMSAFILE_PFAM);          break;
+  case eslMSAFILE_A2M:         status = esl_msafile_a2m_Write      (fp, msa);                           break;
+  case eslMSAFILE_PSIBLAST:    status = esl_msafile_psiblast_Write (fp, msa);                           break;
+  case eslMSAFILE_SELEX:       status = esl_msafile_selex_Write    (fp, msa);                           break;
+  case eslMSAFILE_AFA:         status = esl_msafile_afa_Write      (fp, msa);                           break;
+  case eslMSAFILE_CLUSTAL:     status = esl_msafile_clustal_Write  (fp, msa, eslMSAFILE_CLUSTAL);       break;
+  case eslMSAFILE_CLUSTALLIKE: status = esl_msafile_clustal_Write  (fp, msa, eslMSAFILE_CLUSTALLIKE);   break;
+  case eslMSAFILE_PHYLIP:      status = esl_msafile_phylip_Write   (fp, msa, eslMSAFILE_PHYLIP,  NULL); break;
+  case eslMSAFILE_PHYLIPS:     status = esl_msafile_phylip_Write   (fp, msa, eslMSAFILE_PHYLIPS, NULL); break;
+  default:                     ESL_EXCEPTION(eslEINCONCEIVABLE, "no such msa file format");
+  }
+  return status;
+}
+
+/*-------------- end, writing MSA to stream ---------------------*/
+
+
+/*****************************************************************
+ *# 8. Utilities used by specific format parsers.
+ *****************************************************************/
+
+/* Function:  esl_msafile_GetLine()
+ * Synopsis:  Read next line of input alignment file.
+ *
+ * Purpose:   Read next line of input <afp>, into its internal
+ *            data fields: <afp->line> points to the start of the
+ *            line in <afp->bf>, <afp->n> is its length in
+ *            bytes, <afp->lineoffset> is the offset in the input
+ *            to the start of the line, and <afp->linenumber> is
+ *            the linenumber from <1..N> for <N> total lines in the
+ *            input.
+ *            
+ *            Optionally, caller can request <*opt_p>, <*opt_n>,
+ *            which are set to <afp->line>,<afp->n>. This gives the
+ *            caller a modifiable line pointer that it can step
+ *            through, while <afp->line> is preserved for possible
+ *            diagnostics if anything goes awry.
+ *            
+ * Args:      <afp>    : an open alignment file input
+ *            <*opt_p> : optRETURN: modifiable copy of <afp->line> pointer
+ *            <*opt_n> : optRETURN: modifiable copy of <afp->n>
+ *
+ * Returns:   <eslOK> on success.
+ *            
+ *            <eslEOF> at EOF. Now <afp->line> is <NULL>, <afp->n>
+ *            is <0>, and <afp->lineoffset> is <0>. <afp->linenumber>
+ *            is the total number of lines in the input.
+ *            
+ * Throws:    <eslEMEM> if an allocation fails.
+ *            <eslESYS> if a system call fails, such as fread().
+ *            <eslEINCONCEIVABLE> on internal code errors.
+ */
+int
+esl_msafile_GetLine(ESL_MSAFILE *afp, char **opt_p, esl_pos_t *opt_n)
+{
+  int status;
+
+  afp->lineoffset = esl_buffer_GetOffset(afp->bf);
+  if ((status = esl_buffer_GetLine(afp->bf, &(afp->line), &(afp->n))) != eslOK) goto ERROR;
+  if (afp->linenumber != -1) afp->linenumber++;
+
+  if (opt_p) *opt_p = afp->line;
+  if (opt_n) *opt_n = afp->n;
+  return eslOK;
+
+ ERROR:
+  afp->line       = NULL;
+  afp->n          = 0;
+  afp->lineoffset = -1;
+  /* leave linenumber alone. on EOF, it is the number of lines in the file, and that might be useful. */
+  if (opt_p) *opt_p = NULL;
+  if (opt_n) *opt_n = 0;
+  return status;
+}
+
+
+/* Function:  esl_msafile_PutLine()
+ * Synopsis:  Put the line we just read back in the input stream
+ *
+ * Purpose:   Put the line we just read back in the input stream
+ *            and unset <afp->line> and its associated information
+ *            internally. The next <esl_msafile_GetLine()> call 
+ *            will read exactly the same line again.
+ * 
+ *            This gets used in parsing files that contain multiple
+ *            MSAs. If the way we determine that an MSA record has
+ *            ended is by reading the first line of the next MSA
+ *            record, then we may want to stuff it back in the input
+ *            buffer, so it gets parsed properly as part of the next
+ *            record.  In Pfam/Stockholm parsing we don't have to
+ *            do this, because the first line is just a format code,
+ *            with no record-specific data. But in PHYLIP multiple MSA
+ *            format, for example, the first line is nseq,alen.
+ *            
+ * Args:      afp  - the open input stream
+ *
+ * Returns:   <eslOK> on succes
+ *
+ * Throws:    <eslEMEM>, <eslESYS>, <eslEINCONCEIVABLE> if the
+ *            <esl_buffer_Set()> call fails.
+ */
+int
+esl_msafile_PutLine(ESL_MSAFILE *afp)
+{
+  int status;
+  if ((status = esl_buffer_Set(afp->bf, afp->line, 0)) != eslOK) return status;
+  afp->line       = NULL;
+  afp->n          = 0;
+  if (afp->linenumber != -1) afp->linenumber--;
+  afp->lineoffset = -1;
+  return eslOK;
+}
+
+/*--------------- end, parser utilities -------------------------*/
+
+
+
+/*****************************************************************
+ * 9. Unit tests
+ *****************************************************************/
+#ifdef eslMSAFILE_TESTDRIVE
+
+
+static void
+utest_format2format(int fmt1, int fmt2)
+{
+  char          msg[]        = "esl_msafile: format2format unit test failed";
+  char          tmpfile1[32] = "esltmpXXXXXX";
+  char          tmpfile2[32] = "esltmpXXXXXX";
+  char          tmpfile3[32] = "esltmpXXXXXX";
+  FILE         *ofp = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  ESL_MSAFILE  *afp;
+  int           alphatype    = eslAMINO;
+  ESL_ALPHABET *abc          = esl_alphabet_Create(alphatype);
+  ESL_ALPHABET *abc2         = NULL;
+
+  char *testmsa = "\
+# STOCKHOLM 1.0\n\
+seq1    ACDEFGHIKLMNPQRSTVWYacdefghiklmnpq------ACDEFGHIKLMNPQRSTVWYacde......mnpqrstvwyACDEFGHI______RSTVWYacdefghiklmnpqrstvwy\n\
+seq2    ACDEFGHIKLMNPQRSTVWYacdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWYacdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWYacdefghiklmnpqrstvwy\n\
+//\n";
+
+  /* Create the test msa, msa1, digital mode, no autodetections */
+  if ( esl_msafile_OpenMem(&abc, testmsa, strlen(testmsa), eslMSAFILE_STOCKHOLM, NULL, &afp) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Read(afp, &msa1) != eslOK) esl_fatal(msg);
+  esl_msafile_Close(afp);
+
+  /* Write it to tmpfile1 in fmt1. (This exercises writing of digital MSAs, in all <fmt1> formats) */
+  if ( esl_tmpfile_named(tmpfile1, &ofp)  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Write(ofp, msa1, fmt1) != eslOK) esl_fatal(msg);
+  fclose(ofp);
+
+  /* Read it back from <fmt1> in TEXT mode (verbatim), with format autodetection (except A2M) */
+  if (fmt1 != eslMSAFILE_A2M)
+    {
+      if ( esl_msafile_Open(NULL, tmpfile1, NULL, eslMSAFILE_UNKNOWN, NULL, &afp) != eslOK) esl_fatal(msg);
+      if (fmt1 == eslMSAFILE_PFAM     && afp->format == eslMSAFILE_STOCKHOLM) afp->format = eslMSAFILE_PFAM;
+      if (fmt1 == eslMSAFILE_PSIBLAST && afp->format == eslMSAFILE_SELEX)     afp->format = eslMSAFILE_PSIBLAST;
+      if ( esl_msafile_Read(afp, &msa2) != eslOK) esl_fatal(msg);
+      esl_msafile_Close(afp);
+    }
+  else // without autodetection:
+    {
+      if ( esl_msafile_Open(NULL, tmpfile1, NULL, fmt1, NULL, &afp) != eslOK) esl_fatal(msg);
+      if ( esl_msafile_Read(afp, &msa2) != eslOK) esl_fatal(msg);
+      esl_msafile_Close(afp);
+    }
+
+  /* Write it to tmpfile2 in fmt2. (This exercises writing of text-mode MSAs, in all <fmt2> formats) */
+  if ( esl_tmpfile_named(tmpfile2, &ofp)  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Write(ofp, msa2, fmt2) != eslOK) esl_fatal(msg);
+  fclose(ofp);
+
+  /* Read it back in TEXT mode, with format autodetection  (except A2M) */
+  if (fmt2 != eslMSAFILE_A2M)
+    {
+      if ( esl_msafile_Open(NULL, tmpfile2, NULL, eslMSAFILE_UNKNOWN, NULL, &afp) != eslOK) esl_fatal(msg);
+      if (fmt2 == eslMSAFILE_PFAM     && afp->format == eslMSAFILE_STOCKHOLM) afp->format = eslMSAFILE_PFAM;
+      if (fmt2 == eslMSAFILE_PSIBLAST && afp->format == eslMSAFILE_SELEX)     afp->format = eslMSAFILE_PSIBLAST;
+      if ( esl_msafile_Read(afp, &msa3) != eslOK) esl_fatal(msg);
+      esl_msafile_Close(afp);
+    }
+  else // without autodetection:
+    {
+      if ( esl_msafile_Open(NULL, tmpfile2, NULL, fmt2, NULL, &afp) != eslOK) esl_fatal(msg);
+      if ( esl_msafile_Read(afp, &msa3) != eslOK) esl_fatal(msg);
+      esl_msafile_Close(afp);
+    }
+
+  /* Write it to tmpfile4 in fmt2. (This exercises writing of digital-mode MSAs, in all <fmt2> formats */
+  if ( esl_tmpfile_named(tmpfile3, &ofp)   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Write(ofp, msa3, fmt2) != eslOK) esl_fatal(msg);
+  fclose(ofp);
+
+  /* Read it back in DIGITAL mode, with alphabet autodetection but not format */
+  if ( esl_msafile_Open(&abc2, tmpfile3, NULL, fmt2, NULL, &afp) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Read(afp, &msa4) != eslOK) esl_fatal(msg);
+  esl_msafile_Close(afp);
+
+  /* Now:
+   *   msa1 = digital mode test alignment, created from Stockholm string
+   *   msa2 = TEXT mode, read from <fmt1> tmpfile1 
+   *   msa3 = TEXT mode, read from <fmt2> tmpfile2
+   *   msa4 = digital mode, read from <fmt2> tmpfile3
+   * So we expect:
+   *   msa2==msa3
+   *   msa1==msa4
+   */
+
+  /* some normalization before comparing alignments. */
+  esl_msa_SymConvert(msa2, "abcdefghijklmnopqrstuvwxyz.", "ABCDEFGHIJKLMNOPQRSTUVWXYZ-");
+  esl_msa_SymConvert(msa3, "abcdefghijklmnopqrstuvwxyz.", "ABCDEFGHIJKLMNOPQRSTUVWXYZ-");
+
+  if (msa2->rf) { free (msa2->rf); msa2->rf = NULL; }
+  if (msa3->rf) { free (msa3->rf); msa3->rf = NULL; }
+  if (msa4->rf) { free (msa4->rf); msa4->rf = NULL; }
+
+  if (esl_msa_Compare(msa2, msa3) != eslOK) esl_fatal(msg);
+  if (esl_msa_Compare(msa1, msa4) != eslOK) esl_fatal(msg);
+
+  remove(tmpfile1);
+  remove(tmpfile2);
+  remove(tmpfile3);     
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2); 
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+  esl_alphabet_Destroy(abc);
+  esl_alphabet_Destroy(abc2);
+}
+#endif /*eslMSAFILE_TESTDRIVE*/
+/*----------------- end, unit tests -----------------------------*/
+
+
+/*****************************************************************
+ * 10. Test driver
+ *****************************************************************/
+#ifdef eslMSAFILE_TESTDRIVE
+
+/* compile: gcc -g -Wall -I. -L. -o esl_msafile_utest -DeslMSAFILE_TESTDRIVE esl_msafile.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_utest -DeslMSAFILE_TESTDRIVE esl_msafile.c -leasel -lm
+ * run:     ./esl_msafile_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_msafile.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for MSA input/output format module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go          = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  int fmt1, fmt2;
+  
+  for (fmt1 = eslMSAFILE_STOCKHOLM; fmt1 <= eslMSAFILE_PHYLIPS; fmt1++)
+    for (fmt2 = eslMSAFILE_STOCKHOLM; fmt2 <= eslMSAFILE_PHYLIPS; fmt2++)
+      utest_format2format(fmt1, fmt2);
+
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+
+#endif /*eslMSAFILE_TESTDRIVE*/
+/*----------------- end, test driver ----------------------------*/
+
+
+
+/*****************************************************************
+ * 11. Examples.
+ *****************************************************************/
+
+#ifdef eslMSAFILE_EXAMPLE
+/*::cexcerpt::msafile_example::begin::*/
+#include <stdio.h>
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",        0 },
+  { "-i",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show info, instead of converting format",     0 },
+  { "--informat",  eslARG_STRING,      NULL,  NULL, NULL,  NULL,  NULL, NULL, "specify the input MSA file is in format <s>", 0 }, 
+  { "--outformat", eslARG_STRING, "Clustal",  NULL, NULL,  NULL,  NULL, NULL, "write the output MSA in format <s>",          0 }, 
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use DNA alphabet",                            0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use RNA alphabet",                            0 },
+  { "--amino",     eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use protein alphabet",                        0 },
+  { "--text",      eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use text mode: no digital alphabet",          0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msafile>";
+static char banner[] = "example of multiple alignment input and output using the msafile module(s)";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go        = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char         *msafile   = esl_opt_GetArg(go, 1);
+  int           infmt     = eslMSAFILE_UNKNOWN;
+  int           outfmt    = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET *abc       = NULL;
+  ESL_MSAFILE  *afp       = NULL;
+  ESL_MSA      *msa       = NULL;
+  int           textmode  = esl_opt_GetBoolean(go, "--text");
+  int           showinfo  = esl_opt_GetBoolean(go, "-i");
+  int           nali      = 0;
+  int           status;
+
+  /* If you know the alphabet you want, create it - you'll pass it to esl_msafile_Open() */
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); 
+
+  /* If you know the MSA file format, set it (<infmt>, here). */
+  if (esl_opt_IsOn(go, "--informat") &&
+      (infmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"))) == eslMSAFILE_UNKNOWN)
+    esl_fatal("%s is not a valid MSA file format for --informat", esl_opt_GetString(go, "--informat"));
+
+  /* Open in text or digital mode.
+   *   To let the Open() function autoguess the format, you pass <infmt=eslMSAFILE_UNKNOWN>. 
+   *   To let it autoguess the alphabet, you set <abc=NULL> and pass <&abc>.
+   *   To open in text mode instead of digital, you pass <NULL> for the alphabet argument.
+   * esl_msafile_OpenFailure() is a convenience, printing various diagnostics of any
+   * open failure to <stderr>. You can of course handle your own diagnostics instead.
+   */
+  if (textmode) status = esl_msafile_Open(NULL, msafile, NULL, infmt, NULL, &afp);
+  else          status = esl_msafile_Open(&abc, msafile, NULL, infmt, NULL, &afp);
+  if (status != eslOK)   esl_msafile_OpenFailure(afp, status);
+  
+  if (showinfo) {
+    printf("# Format:    %s\n", esl_msafile_DecodeFormat(afp->format));
+    printf("# Alphabet:  %s\n", (afp->abc ? esl_abc_DecodeType(afp->abc->type) : "text mode"));
+  }
+
+  /* Choose the output file format */
+  if ( (outfmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat"))) == eslMSAFILE_UNKNOWN)
+    esl_fatal("%s is not a valid MSA file format for --outformat", esl_opt_GetString(go, "--outformat"));
+
+  while ((status = esl_msafile_Read(afp, &msa)) == eslOK)
+    {	
+      /* if digital MSA: msa->ax[idx=0..nseq-1][acol=1..alen] is the alignment data; 
+       * if text MSA:  msa->aseq[idx=0..nseq-1][acol=0..alen-1] */
+      nali++;
+      
+      if (showinfo) printf("# alignment %5d: %15s: %6d seqs, %5d columns\n\n", nali, msa->name, (int) msa->nseq, (int) msa->alen);
+      else   	    esl_msafile_Write(stdout, msa, outfmt);
+
+      esl_msa_Destroy(msa);
+    }
+  if (nali == 0 || status != eslEOF) esl_msafile_ReadFailure(afp, status); /* a convenience, like esl_msafile_OpenFailure() */
+
+  esl_alphabet_Destroy(abc);
+  esl_msafile_Close(afp);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+/*::cexcerpt::msafile_example::end::*/
+#endif /*eslMSAFILE_EXAMPLE*/
+/*------------------------ end of examples -----------------------*/
+      
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
diff --git a/esl_msafile.h b/esl_msafile.h
new file mode 100644
index 0000000..3f0b890
--- /dev/null
+++ b/esl_msafile.h
@@ -0,0 +1,145 @@
+/* Multiple sequence alignment file i/o
+ *
+ * See also: esl_msafile2.[ch], which contains a legacy ESL_MSAFILE2 interface
+ * that includes support for --small option in various tools.
+ */
+#ifndef eslMSAFILE_INCLUDED
+#define eslMSAFILE_INCLUDED
+
+#include <stdio.h>
+
+#include "esl_alphabet.h"	/* digital alphabets                         */
+#include "esl_buffer.h"		/* string hashes, for mapping uniq seq names */
+#include "esl_msa.h"		/* ESL_MSA structure                         */
+#include "esl_ssi.h"        	/* indexes of large flatfiles on disk        */
+
+/* Object: ESL_MSAFILE_FMTDATA
+ * 
+ * Additional (often optional) information about variants of some file
+ * formats. Not much in here right now - but figured this might need
+ * to expand in the future, best to have the mechanism in place.    
+ *
+ * Used in three ways:
+ *   1. When opening an MSA file in a known format (as opposed to
+ *      guessing an unknown format), caller may provide an <ESL_MSAFILE_FMTDATA>
+ *      structure containing any additional constraints on the format.
+ *      The new <afp> will copy this information into <afp->fmtd>.
+ *   2. When opening an MSA file in an unknown format (calling GuessFileFormat()),
+ *      format-specific autodetectors fill in <afp->fmtd> with any additional
+ *      constraints.
+ *   3. When writing an MSA file, caller may provide additional constraints on
+ *      the format; notably <fmtd->rpl>, the number of residues per line, 
+ *      used for many formats.
+ *      
+ * TODO: If this fills up with more information, we should eventually
+ *       consolidate the format code too; create ESL_MSAFORMAT structure
+ *       to hold both integer code and optional information; implement
+ *       it in esl_msaformat.[ch]; put format guessing routines there;
+ *       rename eslMSAFILE_* -> eslMSAFORMAT_*. For now, not worth the
+ *       time, because it's really only a placeholder dealing with a small
+ *       PHYLIP-specific format issue. <format>, <fmtd> are generally
+ *       an ordered pair, to facilitate eventual replacement w/ single 
+ *       <fmt>. [SRE, 19 Jul 11]
+ */
+typedef struct {
+  int namewidth;   /* PHYLIP only:     width of the name field (usually 10, but can vary) unset=0 */
+  int rpl;	   /* several formats: residues per line                                  unset=0 */
+} ESL_MSAFILE_FMTDATA;
+
+
+
+/* Object: ESL_MSAFILE
+ * 
+ * An alignment file open for parsing.
+ */
+typedef struct {
+  ESL_BUFFER          *bf;            /* input file/data being parsed                          */
+
+  int32_t              format;	      /* format of alignment file we're reading                */
+  ESL_MSAFILE_FMTDATA  fmtd;          /* additional (often optional) format-specific details.  */
+
+  char                *line;	      /* line read from <bf> by <esl_msafile_GetLine()>        */
+  esl_pos_t            n;	      /* length of line in bytes (line is not NUL-terminated)  */
+  int64_t              linenumber;    /* input linenumber for diagnostics; -1 if we lose track */
+  esl_pos_t            lineoffset;    /* offset of start of <line> in <bf>; -1 if line unset   */
+
+  ESL_DSQ              inmap[128];    /* input map, 0..127                                     */
+  const ESL_ALPHABET  *abc;	      /* non-NULL if augmented and in digital mode             */
+  ESL_SSI             *ssi;	      /* open SSI index; or NULL, if none or not augmented     */
+  char                 errmsg[eslERRBUFSIZE];   /* user-directed message for normal errors     */
+} ESL_MSAFILE;
+
+
+/* Alignment file format codes.
+ * Must coexist with sqio unaligned file format codes.
+ * Rules:
+ *     - 0 is an unknown/unassigned format 
+ *     - <=100 reserved for unaligned formats
+ *     - >100 reserved for aligned formats
+ */
+#define eslMSAFILE_UNKNOWN     0    /* unknown format                              */
+#define eslMSAFILE_STOCKHOLM   101  /* Stockholm format, interleaved               */
+#define eslMSAFILE_PFAM        102  /* Pfam/Rfam one-line-per-seq Stockholm format */
+#define eslMSAFILE_A2M         103  /* UCSC SAM's fasta-like a2m format            */
+#define eslMSAFILE_PSIBLAST    104  /* NCBI PSI-BLAST alignment format             */
+#define eslMSAFILE_SELEX       105  /* old SELEX format (largely obsolete)         */
+#define eslMSAFILE_AFA         106  /* aligned FASTA format                        */
+#define eslMSAFILE_CLUSTAL     107  /* CLUSTAL format                              */
+#define eslMSAFILE_CLUSTALLIKE 108  /* CLUSTAL-like formats (MUSCLE, PROBCONS)     */
+#define eslMSAFILE_PHYLIP      109  /* interleaved PHYLIP format                   */
+#define eslMSAFILE_PHYLIPS     110  /* sequential PHYLIP format                    */
+
+
+/* 1. Opening/closing an ESL_MSAFILE */
+extern int   esl_msafile_Open      (ESL_ALPHABET **byp_abc, const char *msafile, const char *env, int format, ESL_MSAFILE_FMTDATA *fmtd, ESL_MSAFILE **ret_afp);
+extern int   esl_msafile_OpenMem   (ESL_ALPHABET **byp_abc, const char *p, esl_pos_t n,           int format, ESL_MSAFILE_FMTDATA *fmtd, ESL_MSAFILE **ret_afp);
+extern int   esl_msafile_OpenBuffer(ESL_ALPHABET **byp_abc, ESL_BUFFER *bf,                       int format, ESL_MSAFILE_FMTDATA *fmtd, ESL_MSAFILE **ret_afp);
+extern void  esl_msafile_OpenFailure(ESL_MSAFILE *afp, int status);
+extern int   esl_msafile_SetDigital (ESL_MSAFILE *afp, const ESL_ALPHABET *abc);
+extern void  esl_msafile_Close(ESL_MSAFILE *afp);
+
+/* 2. ESL_MSAFILE_FMTDATA: optional extra constraints on formats */
+extern int   esl_msafile_fmtdata_Init(ESL_MSAFILE_FMTDATA *fmtd);
+extern int   esl_msafile_fmtdata_Copy(ESL_MSAFILE_FMTDATA *src,  ESL_MSAFILE_FMTDATA *dst);
+
+/* 3. Utilities for different file formats */
+extern int   esl_msafile_GuessFileFormat(ESL_BUFFER *bf, int *ret_fmtcode, ESL_MSAFILE_FMTDATA *fmtd, char *errbuf); 
+extern int   esl_msafile_IsMultiRecord(int fmt);
+extern int   esl_msafile_EncodeFormat(char *fmtstring);
+extern char *esl_msafile_DecodeFormat(int fmt);
+
+/* 4. Utilities for different alphabets */
+#ifdef eslAUGMENT_ALPHABET
+extern int esl_msafile_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type);
+#endif
+
+/* 5. Random access in a MSA flatfile database */
+#ifdef eslAUGMENT_SSI
+extern int esl_msafile_PositionByKey(ESL_MSAFILE *afp, const char *key);
+#endif
+
+/* 6. Reading an MSA from an ESL_MSAFILE */
+extern int  esl_msafile_Read(ESL_MSAFILE *afp, ESL_MSA **ret_msa);
+extern void esl_msafile_ReadFailure(ESL_MSAFILE *afp, int status);
+
+/* 7. Writing an MSA to a stream */
+extern int esl_msafile_Write(FILE *fp, ESL_MSA *msa, int fmt);
+
+/* 8. Utilities for specific parsers */
+extern int esl_msafile_GetLine(ESL_MSAFILE *afp, char **opt_p, esl_pos_t *opt_n);
+extern int esl_msafile_PutLine(ESL_MSAFILE *afp);
+
+#include "esl_msafile_a2m.h"
+#include "esl_msafile_afa.h"
+#include "esl_msafile_clustal.h"
+#include "esl_msafile_phylip.h"
+#include "esl_msafile_psiblast.h"
+#include "esl_msafile_selex.h"
+#include "esl_msafile_stockholm.h"
+#endif /*eslMSAFILE_INCLUDED*/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile.md b/esl_msafile.md
new file mode 100644
index 0000000..4545993
--- /dev/null
+++ b/esl_msafile.md
@@ -0,0 +1,181 @@
+
+### Multiple sequence alignment file formats
+
+Easel programs can input and output ten different multiple sequence
+alignment formats. There are five main formats:
+
+| format        |   i.e.             | suffix           |
+|---------------|--------------------|------------------|
+| `stockholm`   | Stockholm          | .sto, .sth, .stk |
+| `afa`         | aligned FASTA      | .afa, .afasta    |
+| `clustal`     | CLUSTAL            |                  |
+| `phylip`      | interleaved PHYLIP | .ph, .phy, .phyi |
+| `selex`       | SELEX              | .slx, .selex     |
+
+and five variants:
+
+| format        | i.e.              | is like:    |  but:                                                |   suffix  |
+|---------------|-------------------|-------------|------------------------------------------------------|-----------|
+| `pfam`        | Pfam              | `stockholm` | is restricted to one block                           |  .pfam    |
+| `a2m`         | UCSC A2M, dotless | `afa`       | has additional semantics for consensus columns       |  .a2m     |
+| `clustallike` | Clustal-like      | `clustal`   | has another program name on first line (e.g. MUSCLE) |           |
+| `phylips`     | sequential Phylip | `phylip`    | "sequential", rather than "interleaved"              |  .phys    |
+| `psiblast`    | NCBI PSI-BLAST    | `selex`     | is just an alignment, has no selex annotation lines  |  .pb      |
+
+
+The _format_ code is what you type to select a format in a command
+line option, as in `--informat selex` or `--outformat afa`. These
+codes are treated case-insensitively, so `--informat SELEX` or
+`--outformat AFA` are also fine.
+
+### How alignment file formats are guessed
+
+Normally when you open an alignment file, an Easel-based program tries
+to guess its format. This saves typing and synapses when you're
+working at the command line.
+
+The guesser will never misidentify the format in a way that would
+corrupt the input alignment or change the annotation. There are
+formats that are problematic to distinguish based on content alone:
+`afa` versus `a2m`, and `phylip` versus `phylips`. 
+
+For PHYLIP files, if no hint is available from a file suffix, the
+guesser will nonetheless almost always be able tell the difference and
+call `phylip` versus `phylips`.  Pathological edge cases do exist,
+though, where the guesser will return an error about not being able to
+distinguish interleaved from sequential.
+
+However, `afa` and `a2m` files are so easily confusable that the
+guesser will not try to distinguish them based on content alone. The
+only way to get the guesser to call `a2m` is on a file with an
+explicit .a2m suffix.
+ 
+If you are doing scripted high throughput analysis on files in one of
+these formats, consider specifying your input file format and
+disabling the format guesser. The commandline option for this is
+usually something like `--informat <fmtcode>`. Alternatively, use file
+suffixes: `.afa` versus `.a2m`, or `.ph`/`.phy`/`.phyi` versus `.phys`
+to tip off the guesser.
+
+The guesser works with the following information:
+ * an initial guess based on peeking at the first line of the input
+ * if the input is a file with a file name, it uses the suffix as a clue (to distinguish .a2m versus .afa, 
+   or .phyi from .phys, for example)
+ * in more difficult cases, the guesser looks more deeply into the input
+ 
+More specifically:
+
+#### `stockholm`, `pfam` formats
+
+If the first line starts with `# STOCKHOLM`: guess `stockholm`, unless
+the file suffix is `.pfam`, then guess `pfam`.
+
+Pfam format is just Stockholm, but restricted to a single alignment
+block. There is no difference in the alignment or annotation, so it is
+harmless to read a Pfam file as Stockholm.
+
+#### `afa`, `a2m` formats
+
+If the first line starts with `>`: if the file suffix is `.a2m`, guess
+`a2m`. Otherwise, call `afa`.
+
+The guesser does not autodetect a2m format unless we have a `.a2m`
+suffix on the file, even though it is usually possible to distinguish
+afa from a2m. In afa, the number of aligned characters is always the
+same but the number of upper case + dash characters can vary, whereas
+the opposite is true for a2m. However, it is common to have an afa
+format alignment that consists of all upper case and dashes:
+
+```bash 
+>seq1
+GGG-CCC-TT
+>seq2
+GG-GCC-TT-
+```
+
+which is also valid as a2m. Although the alignment would be the same
+in either format, in a2m we would infer reference consensus
+annotation, and in afa we wouldn't. The guesser is not allowed to risk
+altering either alignment or annotation. Therefore a2m input requires
+something affirmative like the `.a2m` file suffix or a `--informat
+a2m` option.
+
+It's also worth noting that other ambiguous cases exist that imply
+different alignments in the two formats, as in this singularly
+terrifying example:
+
+```bash
+this input:    means in AFA:    means in A2M:
+>seq1          seq1 AAAcAA      seq1 A.AAcAA 
+AAAcAA         seq2 AcAAAA      seq2 AcAA.AA
+>seq2         
+AcAAAA
+```
+
+
+#### `clustal`, `clustallike` formats
+
+If the first line of the input starts with `CLUSTAL`, guess `clustal`.
+If the first line contains the phrase `multiple sequence alignment`,
+guess `clustallike`. The file suffix doesn't matter.
+
+Clustal and Clustal-like formats are parsed identically. The only
+difference is the name of the program on the first line.
+
+#### `phylip`, `phylips` formats
+
+If the first line of the input starts with two integers, assume that
+they are _nseq_ and _alen_, the number of sequences and number of
+alignment columns for a Phylip-format alignment that follows.  If we
+have a suffix and it is `.ph`, `.phy`, or `.phyi`, guess `phylip`; if
+it is `.phys`, guess `phylips`. In both cases, the name width is
+assumed to be the Phylip standard 10.
+
+Otherwise the guesser then looks deeper into the input to distinguish
+interleaved from sequential variants of the format, and to check
+whether the input is using the standard 10-character Phylip name width
+or a noncanonical width:
+
+ * If the file is consistent with interleaved format, it is called
+   `phylip` format. The standard 10 character namewidth is tried first,
+   and if that doesn't work, a nonstandard namewidth is determined.
+
+ * else, if the file is consistent with sequential format, it is
+   called `phylips` format. The standard 10 character namewidth is
+   tried first; if that fails, a nonstandard namewidth is determined.
+
+It is possible to construct pathological files that are consistent
+with both interleaved and sequential formats.  If you're working with
+sequential Phylip files and you need to guarantee accuracy, use a
+command line option like `--informat phylips`.
+
+
+#### `selex`, `psiblast` formats
+
+If the first line of the input doesn't conform to any of the formats
+above, and we have a suffix `.slx`, guess `selex`; if we have a suffix `.pb`, guess
+`psiblast`. 
+
+Otherwise the guesser looks deeper, and tests for whether the input
+consistent with SELEX format; if it is, guess `selex`.
+
+Because PSI-BLAST is a strict subset, any file consistent with SELEX
+format will be guessed to be _selex_; reading a _psiblast_ file as
+_selex_ is harmless.  If you have a legitimate _psiblast_ file and you
+want to enforce stricter parsing, use a `.pb` file suffix on it, or
+use a commandline option like `--informat psiblast` to bypass the
+guesser.
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
diff --git a/esl_msafile2.c b/esl_msafile2.c
new file mode 100644
index 0000000..dcae0e1
--- /dev/null
+++ b/esl_msafile2.c
@@ -0,0 +1,1481 @@
+/* Memory-efficient multiple sequence alignment i/o from Pfam format
+ * 
+ * Legacy interface, now that ESL_MSAFILE is rewritten. Just enough
+ * of the old interface is retained to support --small option in
+ * various tools, for reading Pfam format in memory-efficient ways.
+ *
+ * Table of contents:
+ *    1. The ESL_MSAFILE2 object
+ *    2. Memory efficient read/write in Pfam format
+ *    3. Legacy Stockholm parsing tools
+ *    4. Unit tests
+ *    5. Test driver
+ *    6. Copyright and license information.
+ * 
+ * to-do:
+ *   :: add memory-efficient interface in ESL_MSAFILE
+ *   :: add memory-efficient ESL_MSA w/ API
+ *   :: add space-efficient MSA file format
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "esl_msa.h"		/* ESL_MSA structure                                                  */
+#include "esl_msafile.h"	/* preferred msafile interface, inc. fmt codes shared w/ ESL_MSAFILE2 */
+#include "esl_msafile2.h"	/* legacy ESL_MSAFILE2 interface                                      */
+#include "esl_vectorops.h"
+#include "esl_wuss.h"
+
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"	/* digital alphabet                                                   */
+#endif
+#ifdef eslAUGMENT_KEYHASH
+#include "esl_keyhash.h"	/* string hashes, for mapping unique seq names                        */
+#endif
+#ifdef eslAUGMENT_SSI
+#include "esl_ssi.h"        	/* indexing large flatfiles on disk                                   */
+#endif
+
+static int     msafile2_getline(ESL_MSAFILE2 *afp);
+static int     is_blankline(char *s);
+static int     parse_gf(ESL_MSA *msa, char *buf);
+static int     parse_gc(ESL_MSA *msa, char *buf);
+static int     parse_comment(ESL_MSA *msa, char *buf);
+
+/*****************************************************************
+ *# 1. The ESL_MSAFILE2 object
+ *****************************************************************/
+
+static int msafile2_open(const char *filename, const char *env, ESL_MSAFILE2 **ret_afp);
+
+/* Function: esl_msafile2_Open()
+ * Synopsis: Open an MSA file for small-memory input.
+ *
+ * Purpose:  Open an alignment database file <filename>, which must be
+ *           in Pfam format (<eslMSAFILE_PFAM>), and prepare for
+ *           reading information through the legacy small-memory 
+ *           interface. Return  the opened file pointer in <ret_msafp>.
+ *          
+ *           There are one or two special cases for <filename>. If
+ *           <filename> is "-", then the alignment is read from
+ *           <stdin>. If <filename> ends in ".gz", then the file is
+ *           assumed to be compressed by gzip, and it is opened as a
+ *           pipe from <gzip -dc>. (Auto-decompression of gzipp'ed files
+ *           is only available on POSIX-compliant systems w/ popen(), when 
+ *           <HAVE_POPEN> is defined at compile-time.)
+ *          
+ *           If <env> is non-NULL, then we look for <filename> in
+ *           one or more directories in a colon-delimited list
+ *           that is the value of the environment variable <env>.
+ *           For example, if we had 
+ *              <setenv HMMERDB /nfs/db/Pfam:/nfs/db/Rfam> 
+ *           in the environment, a profile HMM application
+ *           might pass "HMMERDB" as <env>.
+ *          
+ * Returns:  <eslOK> on success, and <ret_msafp> is set to point at
+ *           an open <ESL_MSAFILE2>. Caller frees this file pointer with
+ *           <esl_msafile2_Close()>.
+ *           
+ *           Returns <eslENOTFOUND> if <filename> cannot be opened.
+ *           
+ * Throws:   <eslEMEM> on allocation failure.
+ * 
+ * Note:     Implemented as a wrapper around msafile2_open(), because
+ *           esl_msafile2_OpenDigital() shares almost all the same code.
+ */
+int
+esl_msafile2_Open(const char *filename, const char *env, ESL_MSAFILE2 **ret_afp)
+{
+  return msafile2_open(filename, env, ret_afp);
+}
+
+/* Function:  esl_msafile2_Close()
+ * Synopsis:  Closes an open MSA file.
+ *
+ * Purpose:   Close an open <ESL_MSAFILE2>.
+ */
+void
+esl_msafile2_Close(ESL_MSAFILE2 *afp)
+{
+  if (afp == NULL) return;
+
+#ifdef HAVE_POPEN /* gzip functionality */
+  if (afp->do_gzip && afp->f != NULL)    pclose(afp->f);
+#endif
+  if (!afp->do_gzip && ! afp->do_stdin && afp->f != NULL) fclose(afp->f);
+  if (afp->fname != NULL) free(afp->fname);
+  if (afp->buf  != NULL)  free(afp->buf);
+#ifdef eslAUGMENT_SSI
+  if (afp->ssi  != NULL)  esl_ssi_Close(afp->ssi); 
+#endif /* eslAUGMENT_SSI*/
+  if (afp->msa_cache != NULL) esl_msa_Destroy(afp->msa_cache);
+  free(afp);
+}
+
+
+
+
+#ifdef eslAUGMENT_ALPHABET
+/* Function:  esl_msafile2_OpenDigital()
+ * Synopsis:  Open an msa file for digital input.
+ *
+ * Purpose:   Same as <esl_msafile2_Open()>, except the alignment file
+ *            will be read into a digitized internal representation,
+ *            using internal alphabet <abc>, rather than the default
+ *            internal ASCII text representation.
+ *            
+ *            The file must be in Pfam format (<eslMSAFILE_PFAM>).
+ *            
+ * Args:      abc      - pointer to internal alphabet
+ *            filename - name of alignment data file to open;
+ *                       if "*.gz", attempt to read through <gzip -dc> using <popen()>;
+ *                       or "-" for stdin 
+ *            env      - NULL, or the name of an environment variable from which
+ *                       to retrieve a colon-delimited directory list to search
+ *                       for <filename> in. (e.g. "HMMERDB")
+ *            ret_msafp - RETURN: open <ESL_MSAFILE2>.
+ *
+ * Returns:  <eslOK> on success, and <ret_msafp> is set to point at
+ *           an open <ESL_MSAFILE2>. Caller frees this file pointer with
+ *           <esl_msafile2_Close()>.
+ *           
+ *           <eslENOTFOUND> if <filename> cannot be opened;
+ *           <eslEFORMAT> if <filename> doesn't seem to be in Pfam format.
+ *           
+ * Throws:   <eslEMEM> on allocation failure.
+ *           <eslEINVAL> if format autodetection is attempted on 
+ *           stdin or a gzip -dc pipe.
+ */
+int
+esl_msafile2_OpenDigital(const ESL_ALPHABET *abc, const char *filename, 
+			 const char *env, ESL_MSAFILE2 **ret_msafp)
+{
+  ESL_MSAFILE2 *msafp;
+  int           status;
+
+  if ((status = msafile2_open(filename, env, &msafp)) != eslOK) return status;
+
+  msafp->abc        = abc;
+  msafp->do_digital = TRUE;
+
+  *ret_msafp = msafp;
+  return eslOK;
+}
+#endif /*eslAUGMENT_ALPHABET*/
+
+/* msafile2_open():
+ * this is the routine that actually opens an ESL_MSAFILE2;
+ * esl_msafile2_Open() and esl_msafile2_OpenDigital() are wrappers around it.
+ */
+static int
+msafile2_open(const char *filename, const char *env, ESL_MSAFILE2 **ret_afp)
+{
+  ESL_MSAFILE2 *afp     = NULL;
+  char         *ssifile = NULL;
+  char         *envfile = NULL;
+  char         *cmd     = NULL;
+  int           n       = strlen(filename);
+  int           status;
+  
+  ESL_ALLOC(afp, sizeof(ESL_MSAFILE2));
+  afp->f          = NULL;
+  afp->fname      = NULL;
+  afp->linenumber = 0;
+  afp->errbuf[0]  = '\0';
+  afp->buf        = NULL;
+  afp->buflen     = 0;
+  afp->do_gzip    = FALSE;
+  afp->do_stdin   = FALSE;
+  afp->format     = eslMSAFILE_PFAM;   /* legacy interface is stripped down to support ONLY --small, Pfam */
+  afp->do_digital = FALSE;
+  afp->abc        = NULL;	        
+  afp->ssi        = NULL;	         
+  afp->msa_cache  = NULL;
+
+  if (strcmp(filename, "-") == 0)
+    {
+      afp->f         = stdin;
+      afp->do_stdin  = TRUE; 
+      if ((status = esl_strdup("[STDIN]", -1, &(afp->fname))) != eslOK) goto ERROR;
+    }
+#ifdef HAVE_POPEN
+  /* popen(), pclose() aren't portable to non-POSIX systems; 
+   * disable this section in strict ANSI C mode.
+   */
+  /* tricky: if n= length of a string s, then
+   * s+n-i repositions pointer s at the last i chars
+   * of the string.
+   */
+  else if (n > 3 && strcmp(filename+n-3, ".gz") == 0)
+    {
+      /* Note that popen() will return "successfully"
+       * if file doesn't exist, because gzip works fine
+       * and prints an error! So we have to check for
+       * existence of file ourself.
+       */
+      if (! esl_FileExists(filename))	      { status = eslENOTFOUND; goto ERROR; }
+      ESL_ALLOC(cmd, sizeof(char) * (n+1+strlen("gzip -dc ")));
+      sprintf(cmd, "gzip -dc %s", filename);
+      if ((afp->f = popen(cmd, "r")) == NULL) { status = eslENOTFOUND; goto ERROR; }
+      if ((status = esl_strdup(filename, n, &(afp->fname))) != eslOK)  goto ERROR;
+      afp->do_gzip  = TRUE;
+    }
+#endif /*HAVE_POPEN*/
+  else	/* Normal file open or env file open: set ssifile */
+    {
+      /* When we open a file, it may be either in the current
+       * directory, or in the directory indicated by the env
+       * argument - and we construct an SSI filename accordingly.
+       * (Whether or not we're SSI augmented, in fact, for simplicity.)
+       */
+      if ((afp->f = fopen(filename, "r")) != NULL)
+	{
+	  if ((status = esl_strdup(filename, n, &ssifile))           != eslOK) goto ERROR;
+	  if ((status = esl_strcat(&ssifile, n, ".ssi", 4))          != eslOK) goto ERROR;
+	  if ((status = esl_strdup(filename, n, &(afp->fname)))      != eslOK) goto ERROR;
+	}
+      else if (esl_FileEnvOpen(filename, env, &(afp->f), &envfile) == eslOK)
+	{
+	  if ((status = esl_strdup(envfile, n, &ssifile))           != eslOK) goto ERROR;
+	  if ((status = esl_strcat(&ssifile, n, ".ssi", 4))         != eslOK) goto ERROR;
+	  if ((status = esl_strdup(envfile, n, &(afp->fname)))      != eslOK) goto ERROR;
+	}
+      else 
+	{ status = eslENOTFOUND; goto ERROR;}
+    }
+
+#ifdef eslAUGMENT_SSI
+  /* If augmented by SSI indexing:
+   * Open the SSI index file. If it doesn't exist, or
+   * it's corrupt, or some error happens, afp->ssi stays NULL.
+   * We should warn, probably, or provide some way for caller to 
+   * to know that we've opened the index successfully or not.
+   */
+  esl_ssi_Open(ssifile, &(afp->ssi));
+#endif
+
+  if (envfile != NULL) free(envfile);
+  if (ssifile != NULL) free(ssifile);
+  if (cmd     != NULL) free(cmd);
+  *ret_afp = afp;
+  return eslOK;
+
+ ERROR:
+  if (envfile != NULL) free(envfile);
+  if (ssifile != NULL) free(ssifile);
+  if (cmd     != NULL) free(cmd);
+  if (afp     != NULL) esl_msafile2_Close(afp); 
+  *ret_afp = NULL;
+  return status;
+}
+/*--------------- end, ESL_MSAFILE2 object ----------------------*/
+
+/*------------------ end, digital mode  -------------------------*/
+
+
+/******************************************************************************
+ * 2. Memory efficient routines for PFAM format
+ *****************************************************************************/
+
+static int  get_pp_idx(ESL_ALPHABET *abc, char ppchar);
+static int  gapize_string(char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, char **ret_dst_str);
+static void shrink_string(char *str, const int *useme, int len);
+static int  determine_spacelen(char *s);
+
+/* Function: esl_msafile2_ReadInfoPfam()
+ * Synopsis: Read Pfam formatted MSA information but not sequence data.
+ *
+ * Purpose:  Read the next alignment from an open Stockholm Pfam
+ *           (non-interleaved, one line per seq) format alignment file
+ *           <afp> and store all non-sequence information (comments,
+ *           GF annotation and GC annotation) in a new msa object.
+ *
+ *           This function is not as rigorous about validating the
+ *           input msa as the other read functions that store the full
+ *           alignment. Here, we only verify that there is only one
+ *           line for the first sequence read. Verifying that all
+ *           sequences are only one line would require storing and
+ *           looking up all sequence names.
+ *
+ *           Many optional return values (<opt_*>) allow this function
+ *           to serve the diverse needs of the miniapps that can run
+ *           in a memory-efficient mode (esl-alimerge, esl-alimask,
+ *           esl-alistat, esl-ssdraw). For any that are unwanted, pass
+ *           <NULL>.
+ *
+ * Args:     afp           - open alignment file pointer
+ *           listfp        - if non-NULL, dump each sequence name we read 
+ *                           to listfp, separated by newlines
+ *           abc           - alphabet to use, only nec and used if one 
+ *                           of the opt_*_ct arrays is non-NULL
+ *           known_alen    - known length of the alignment, -1 if unknown
+ *                           must not be -1, if known_rf != NULL or
+ *                           known_ss_cons != NULL.
+ *           known_rf      - known RF annot. (msa->rf) for this alignment, 
+ *                           might be known from prev call of this func,
+ *                           for example. NULL if unknown.
+ *           known_ss_cons - the known SS_cons annotation (msa->ss_cons) 
+ *                           for this alignment, NULL if unknown.
+ *           ret_msa       - RETURN: msa with comments, GC, GF 
+ *                           annotation  but no sequence info (nor GS, GR),
+ *                           pass NULL if not wanted.
+ *           opt_nseq      - optRETURN: number of sequences in msa 
+ *           opt_alen      - optRETURN: length of first aligned sequence 
+ *           opt_ngs       - optRETURN: number of GS lines in alignment 
+ *           opt_maxname   - optRETURN: maximum seqname length 
+ *           opt_maxgf     - optRETURN: maximum GF tag length
+ *           opt_maxgc     - optRETURN: maximum GC tag length 
+ *           opt_maxgr     - optRETURN: maximum GR tag length 
+ *           opt_abc_ct    - optRETURN: [0..apos..alen-1][0..abc->K] 
+ *                           per position count of each symbol in abc over all seqs
+ *           opt_pp_ct     - optRETURN: [0..apos..alen-1][0..11], 
+ *                           per position count of PPs over all seqs, 
+ *                           [11] is gaps, [10] is '*', [0-9] are '0'-'9'
+ *           opt_bp_ct     - optRETURN: [0..apos..alen-1][0..abc->K-1][0..abc->K-1]
+ *                           per position count of each possible basepair 
+ *                           in alignment, for pair apos:apos2, where 
+ *                           apos < apos2 and apos:apos2 form a basepair 
+ *                           in <known_ss_cons>. If non-NULL, <known_ss_cons> 
+ *                           must be non-NULL.
+ *           opt_spos_ct   - optRETURN: [0..apos..alen-1] per position count 
+ *                           of first nongap residue in each sequence, 
+ *                           ex: opt_spos_ct[100] = x means x seqs have their 
+ *                           first nongap residue at position 100
+ *           opt_epos_ct   - optRETURN: [0..apos..alen-1] same as opt_spos_ct,
+ *                           except for final position instead of first
+ * 
+ * Returns:  <eslOK> on success.  Returns <eslEOF> if there are no more
+ *           alignments in <afp>, and <ret_msa> is set to NULL and
+ *           <opt_*> are set to 0.
+ *           <eslEFORMAT> if parse fails because of a file format
+ *           problem, in which case <afp->errbuf> is set to contain a
+ *           formatted message that indicates the cause of the
+ *           problem, <ret_msa> is set to <NULL> and <opt_*> are set 
+ *           to 0.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ * 
+ * Xref:      ~nawrockie/notebook/9_1206_esl_msa_mem_efficient/
+ */
+int
+esl_msafile2_ReadInfoPfam(ESL_MSAFILE2 *afp, FILE *listfp, ESL_ALPHABET *abc, int64_t known_alen, char *known_rf, char *known_ss_cons, ESL_MSA **ret_msa, 
+			   int *opt_nseq, int64_t *opt_alen, int *opt_ngs, int *opt_maxname, int *opt_maxgf, int *opt_maxgc, int *opt_maxgr, 
+			   double ***opt_abc_ct, double ***opt_pp_ct, double ****opt_bp_ct, int **opt_spos_ct, int **opt_epos_ct)
+{
+  char      *s;                    /* pointer to current character in afp */
+  int        status;               /* easel status code */
+  int        status2;              /* another easel status code */
+  ESL_MSA   *msa = NULL;           /* the msa we're creating */
+  int        nseq = 0;             /* number of sequences read */
+  int64_t    alen = -1;            /* length of the alignment */
+  int        ngs = 0;              /* number of GS lines read */
+  int        maxname = 0;          /* max length seq name */
+  int        maxgf = 0;            /* max length GF tag */
+  int        maxgc = 0;            /* max length GC tag */
+  int        maxgr = 0;            /* max length GR tag */
+  char      *seqname;              /* ptr to a sequence name */
+  int        namelen;              /* length of a sequence name */
+  char      *first_seqname = NULL; /* name of first sequence read */
+  char      *gf, *gc, *gr;         /* for storing '#=GF', '#=GC', '#=GR', temporarily */
+  char      *tag;                  /* a GC or GR tag */
+  int        taglen;               /* length of a tag */
+  char      *text;                 /* text string */
+  int        textlen;              /* length of text string */
+  int        i, x;                 /* counters */
+  int        j;                    /* position for a right half of a bp */
+  int        apos;                 /* counter over alignment positions */
+  double   **abc_ct = NULL;        /* [0..alen-1][0..abc->K] per position count of each residue in abc and gaps over all seqs */
+  double  ***bp_ct = NULL;         /* [0..alen-1][0..abc->Kp][0..abc->Kp], count of each possible base pair at each position, over all sequences, missing and nonresidues are *not counted* 
+                                       base pairs are indexed by 'i' for a base pair between positions i and j, where i < j. */
+  int        nppvals = 12;         /* '0'-'9' = 0-9, '*' = 10, gap = '11' */
+  double   **pp_ct = NULL;         /* [0..alen-1][0..nppvals-1] per position count of each possible PP char over all seqs */
+  int        ppidx;                /* index for 2nd dim of pp_ct array */
+  int       *spos_ct = NULL;       /* [0..alen-1] number of seqs that start (have first nongap residue) at each position */
+  int       *epos_ct = NULL;       /* [0..alen-1] number of seqs that end   (have final nongap residue) at each position */
+  ESL_DSQ   *tmp_dsq = NULL;       /* temporary digitized sequence, only used if opt_abc_ct != NULL */
+  int       *a2rf_map = NULL;      /* [0..apos..known_alen-1] = rfpos, nongap RF position apos maps to, 
+				    * -1 if apos is not a nongap RF position */
+  int       *ct = NULL; 	   /* 0..known_alen-1 base pair partners array for known_ss_cons */
+  char      *ss_nopseudo = NULL;   /* no-pseudoknot version of known_ss_cons */
+
+  if(afp->format   != eslMSAFILE_PFAM) ESL_EXCEPTION(eslEINCONCEIVABLE, "only non-interleaved (1 line /seq, Pfam) Stockholm formatted files can be read in small memory mode");
+  if(opt_abc_ct    != NULL && abc == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, abc == NULL, opt_abc_ct  != NULL");
+  if(opt_pp_ct     != NULL && abc == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, abc == NULL, opt_pp_ct   != NULL");
+  if(opt_bp_ct     != NULL && abc == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, abc == NULL, opt_bp_ct != NULL");
+  if(opt_spos_ct   != NULL && abc == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, abc == NULL, opt_spos_ct != NULL");
+  if(opt_epos_ct   != NULL && abc == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, abc == NULL, opt_epos_ct != NULL");
+  if(opt_spos_ct   != NULL && known_alen == -1)      ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, opt_spos_ct != NULL, known_alen == -1");
+  if(opt_epos_ct   != NULL && known_alen == -1)      ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, opt_epos_ct != NULL, known_alen == -1");
+  if(opt_bp_ct     != NULL && known_ss_cons == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, known_ss_cons == NULL, opt_bp_ct != NULL");
+  if(known_rf      != NULL && known_alen == -1)      ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, known_rf != NULL, known_alen == -1");
+  if(known_ss_cons != NULL && known_alen == -1)      ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, known_ss_cons != NULL, known_alen == -1");
+
+  if (feof(afp->f))  { status = eslEOF; goto ERROR; }
+  afp->errbuf[0] = '\0';
+
+  /* Preliminaries */
+  /* allocate and initialize spos_ct and epos_ct, if we'll return them */
+  if(opt_spos_ct != NULL || opt_epos_ct != NULL) { 
+    ESL_ALLOC(spos_ct, sizeof(int) * known_alen); 
+    ESL_ALLOC(epos_ct, sizeof(int) * known_alen);
+    esl_vec_ISet(spos_ct, known_alen, 0); 
+    esl_vec_ISet(epos_ct, known_alen, 0);   
+  }
+
+  /* if bp_ct != NULL, determine the ct array from the known_ss_cons, and allocate the bp_ct */
+  if(opt_bp_ct != NULL) { /* contract enforces that if this is true, known_ss_cons != NULL and known_alen != -1 */
+    /* get ct array which defines the consensus base pairs */
+    ESL_ALLOC(ct,  sizeof(int)  * (known_alen+1));
+    ESL_ALLOC(ss_nopseudo, sizeof(char) * (known_alen+1));
+    esl_wuss_nopseudo(known_ss_cons, ss_nopseudo);
+    if ((status = esl_wuss2ct(ss_nopseudo, known_alen, ct)) != eslOK) ESL_FAIL(status, afp->errbuf, "consensus structure string is inconsistent.");
+    ESL_ALLOC(bp_ct,  sizeof(double **) * known_alen); 
+    for(apos = 0; apos < known_alen; apos++) { 
+      /* careful ct is indexed 1..alen, not 0..alen-1 */
+      if(ct[(apos+1)] > (apos+1)) { /* apos+1 is an 'i' in an i:j pair, where i < j */
+	ESL_ALLOC(bp_ct[apos], sizeof(double *) * (abc->Kp));
+	for(x = 0; x < abc->Kp; x++) { 
+	  ESL_ALLOC(bp_ct[apos][x], sizeof(double) * (abc->Kp));
+	  esl_vec_DSet(bp_ct[apos][x], abc->Kp, 0.);
+	}
+      }
+      else { /* apos+1 is not an 'i' in an i:j pair, where i < j, set to NULL */
+	bp_ct[apos] = NULL;
+      }
+    }
+  }
+  /* end of preliminaries */
+
+  /* Initialize allocation of the MSA:
+   * We won't store any sequence information, so initial blocksize is
+   * 0 seqs of 0 length.
+   */
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->do_digital == TRUE && (msa = esl_msa_CreateDigital(afp->abc, 16, -1))  == NULL) 
+    { status = eslEMEM; goto ERROR; }
+#endif
+  if (afp->do_digital == FALSE && (msa = esl_msa_Create(16, -1))  == NULL)
+    { status = eslEMEM; goto ERROR; }
+  if (msa == NULL)    
+    { status = eslEMEM; goto ERROR; }
+  
+  /* Check the magic Stockholm header line.
+   * We have to skip blank lines here, else we perceive
+   * trailing blank lines in a file as a format error when
+   * reading in multi-record mode.
+   */
+  do {
+    if ((status = msafile2_getline(afp)) != eslOK) goto ERROR; /* includes EOF  */
+  } while (is_blankline(afp->buf));
+  
+  if (strncmp(afp->buf, "# STOCKHOLM 1.", 14) != 0)
+    ESL_XFAIL(eslEFORMAT, afp->errbuf, "parse failed (line %d): missing \"# STOCKHOLM\" header", afp->linenumber);
+  
+  /* Read the alignment file one line at a time.
+   */
+  while ((status2 = msafile2_getline(afp)) == eslOK) 
+    {
+      s = afp->buf;
+      while (*s == ' ' || *s == '\t') s++;  /* skip leading whitespace */
+      
+      if (*s == '#') {
+	if(strncmp(s, "#=GF", 4) == 0)
+	  {
+	    if (ret_msa != NULL) { 
+	      if ((status = parse_gf(msa, s)) != eslOK)
+		ESL_XFAIL(status, afp->errbuf, "parse failed (line %d): bad #=GF line", afp->linenumber);
+	    }
+	    else if (opt_maxgf != NULL) { /* we need to parse out GF tag len to see if it is > maxgf */
+	      s = afp->buf;
+	      if (esl_strtok    (&s, " \t\n\r", &gf)                  != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GF line", afp->linenumber);
+	      if (esl_strtok_adv(&s, " \t\n\r", &tag,  &taglen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GF line", afp->linenumber);
+	      maxgf = ESL_MAX(maxgf, taglen); 
+	    }
+	  }
+
+	else if (strncmp(s, "#=GC", 4) == 0)
+	  {
+	    if  (ret_msa != NULL) { 
+	      if  ((status = parse_gc(msa, s)) != eslOK)
+		ESL_XFAIL(status, afp->errbuf, "parse failed (line %d): bad #=GC line", afp->linenumber);
+	    }
+	    else if (opt_maxgc != NULL) { /* we need to parse out GC tag len to see if it is > maxgc */
+	      s = afp->buf;
+	      if (esl_strtok    (&s, " \t\n\r", &gc)                  != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line", afp->linenumber);
+	      if (esl_strtok_adv(&s, " \t\n\r", &tag,  &taglen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line", afp->linenumber);
+	      maxgc = ESL_MAX(maxgc, taglen); 
+	    }
+	  }
+	else if (strncmp(s, "#=GS", 4) == 0)
+	  {
+	    ngs++; 
+	  }
+	else if (strncmp(s, "#=GR", 4) == 0)
+	  {
+	    if(opt_maxgr != NULL || opt_pp_ct != NULL) { 
+	      s = afp->buf;
+	      if (esl_strtok    (&s, " \t\n\r", &gr)                      != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber);
+	      if (esl_strtok_adv(&s, " \t\n\r", &seqname, &namelen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber);
+	      if (esl_strtok_adv(&s, " \t\n\r", &tag,      &taglen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber);
+	      maxgr = ESL_MAX(maxgr, taglen); 
+	      if(opt_pp_ct != NULL) { 
+		if (strncmp(tag, "PP", 2) == 0) { 
+		  if (esl_strtok_adv(&s, " \t\n\r", &text, &textlen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR PP line", afp->linenumber);
+		  /* verify, or set alignment length */
+		  if(alen == -1) { /* first aligned text line, need to allocate pp_ct, and possibly abc_ct, spos_ct, epos_ct */
+		    alen = textlen;
+		    if(known_alen != -1 && known_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): known alen (%" PRId64 " passed in) != actual alen (%d)", afp->linenumber, known_alen, textlen);
+		    ESL_ALLOC(pp_ct, sizeof(double *) * alen);
+		    for(apos = 0; apos < alen; apos++) { 
+		      ESL_ALLOC(pp_ct[apos], sizeof(double) * nppvals);
+		      esl_vec_DSet(pp_ct[apos], nppvals, 0.);
+		    }
+		    if(opt_abc_ct != NULL || opt_bp_ct != NULL) { 
+		      ESL_ALLOC(tmp_dsq, (alen+2) * sizeof(ESL_DSQ));
+		    }
+		    if(opt_abc_ct != NULL) { 
+		      ESL_ALLOC(abc_ct, sizeof(double *) * alen); 
+		      for(apos = 0; apos < alen; apos++) { 
+			ESL_ALLOC(abc_ct[apos], sizeof(double) * (abc->K+1));
+			esl_vec_DSet(abc_ct[apos], (abc->K+1), 0.);
+		      }
+		    }
+		  }
+		  else if(alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR PP line, len %d, expected %" PRId64, afp->linenumber, textlen, alen);
+		  for(apos = 0; apos < alen; apos++) { /* update appropriate PP count */
+		    if((ppidx = get_pp_idx(abc, text[apos])) == -1) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR PP char: %c", afp->linenumber, text[apos]);
+		    pp_ct[apos][ppidx] += 1.;
+		  }
+		}
+	      }
+	    }
+	  }
+	else if (ret_msa != NULL && ((status = parse_comment(msa, s)) != eslOK)) { 
+	  ESL_XFAIL(status, afp->errbuf, "parse failed (line %d): bad comment line", afp->linenumber);
+	}
+      } /* end of 'if (*s == '#')' */ 
+      else if (strncmp(s, "//",   2) == 0)   break; /* normal way out */
+      else if (*s == '\n' || *s == '\r')     continue;
+      else { /* sequence line */
+	if(listfp != NULL || opt_maxname != NULL || opt_alen != NULL || opt_abc_ct != NULL || opt_spos_ct != NULL || opt_epos_ct != NULL) { /* we need to parse out the seqname */
+	  s = afp->buf;
+	  if (esl_strtok_adv(&s, " \t\n\r", &seqname, &namelen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad sequence line", afp->linenumber);
+	  if (listfp != NULL) fprintf(listfp, "%s\n", seqname);
+	  maxname = ESL_MAX(maxname, namelen);
+	  if (opt_alen != NULL || opt_abc_ct != NULL || opt_spos_ct != NULL || opt_epos_ct != NULL) { /* we need to parse out the seq */
+	    if (esl_strtok_adv(&s, " \t\n\r", &text, &textlen, NULL)  != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad sequence line", afp->linenumber);
+	    /* if first aligned seq read, store it's name, else see if it is an additional line of first aseq */
+	    if(nseq == 0) { 
+	      if ((status = esl_strdup(seqname, -1, &(first_seqname))) != eslOK) goto ERROR; 
+	    }
+	    else if(strcmp(first_seqname, seqname) == 0) { ESL_XFAIL(eslEFORMAT, afp->errbuf, "parse failed (line %d): two seqs with same name. Alignment may be in interleaved Stockholm. Reformat to Pfam with esl-reformat.", afp->linenumber); }
+	    if(alen == -1) { /* first aligned text line, need to allocate pp_ct, and possibly abc_ct, spos_ct, epos_ct */
+	      alen = textlen;
+	      if(known_alen != -1 && known_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): known alen (%" PRId64 " passed in) != actual alen (%d)", afp->linenumber, known_alen, textlen);
+	      if(opt_abc_ct != NULL || opt_bp_ct != NULL) { 
+		ESL_ALLOC(tmp_dsq, (alen+2) * sizeof(ESL_DSQ));
+	      }
+	      if(opt_abc_ct != NULL) { 
+		ESL_ALLOC(abc_ct, sizeof(double *) * alen); 
+		for(apos = 0; apos < alen; apos++) { 
+		  ESL_ALLOC(abc_ct[apos], sizeof(double) * (abc->K+1));
+		  esl_vec_DSet(abc_ct[apos], (abc->K+1), 0.);
+		}
+	      }
+	      if(opt_pp_ct != NULL) { 
+		ESL_ALLOC(pp_ct, sizeof(double *) * alen);
+		for(apos = 0; apos < alen; apos++) { 
+		  ESL_ALLOC(pp_ct[apos], sizeof(double) * nppvals);
+		  esl_vec_DSet(pp_ct[apos], nppvals, 0.);
+		}
+	      }
+	    }
+	    else if(alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad aligned seq line, len %d, expected %" PRId64, afp->linenumber, textlen, alen);
+	    if(opt_abc_ct != NULL || opt_bp_ct != NULL) { 
+	      /* update appropriate abc and/or bp count. first, digitize the text */
+	      if((status = esl_abc_Digitize(abc, text, tmp_dsq)) != eslOK) ESL_XFAIL(status, afp->errbuf, "small mem parse failed (line %d): problem digitizing sequence", afp->linenumber);
+	    }
+	    if(opt_abc_ct != NULL) { 
+	      for(apos = 0; apos < alen; apos++) { /* update appropriate abc count, careful, tmp_dsq ranges from 1..alen (not 0..alen-1) */
+		if((status = esl_abc_DCount(abc, abc_ct[apos], tmp_dsq[apos+1], 1.0)) != eslOK) ESL_XFAIL(status, afp->errbuf, "small mem parse failed (line %d): problem counting residue %d", afp->linenumber, apos+1);
+	      }
+	    }	    
+	    if(opt_bp_ct != NULL) { 
+	      for(apos = 0; apos < alen; apos++) { /* update appropriate abc count, careful, tmp_dsq ranges from 1..alen (not 0..alen-1) */
+		if(bp_ct[apos] != NULL) { /* our flag for whether position (apos+1) is an 'i' in an i:j pair where i < j */
+		  j = ct[apos+1] - 1; /* ct is indexed 1..alen */
+		  bp_ct[apos][tmp_dsq[(apos+1)]][tmp_dsq[(j+1)]]++;
+		}
+	      }
+	    }
+	    if(opt_spos_ct != NULL) { 
+	      for(apos = 0; apos < alen; apos++) { /* find first non-gap position */
+		if(! esl_abc_XIsGap(abc, tmp_dsq[apos+1])) { 
+		  spos_ct[apos]++; 
+		  break;
+		}
+	      }
+	    }
+	    if(opt_epos_ct != NULL) { /* find final non-gap position */
+	      for(apos = alen-1; apos >= 0; apos--) { 
+		if(! esl_abc_XIsGap(abc, tmp_dsq[apos+1])) { 
+		  epos_ct[apos]++;
+		  break;
+		}
+	      }
+	    }
+	  }
+	}
+	nseq++; 
+      }
+    }
+
+  /* If we saw a normal // end, we would've successfully read a line,
+   * so when we get here, status (from the line read) should be eslOK.
+   */ 
+  if (status2 != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "parse failed (line %d): didn't find // at end of alignment", afp->linenumber);
+
+  /* if we're returning maxgc and an msa, determine maxgc, which we didn't do above b/c we parsed GC lines with parse_gc()
+   * If msa != NULL, we already know maxgc */
+  if(ret_msa != NULL && opt_maxgc != NULL) { 
+    for(i = 0; i < msa->ngc; i++) maxgc = ESL_MAX(maxgc, strlen(msa->gc_tag[i])); 
+    if (msa->rf      != NULL)     maxgc = ESL_MAX(maxgc, 2); /* 2 == strlen("RF") */
+    if (msa->mm      != NULL)     maxgc = ESL_MAX(maxgc, 2); /* 2 == strlen("MM") */
+    if (msa->ss_cons != NULL)     maxgc = ESL_MAX(maxgc, 7); /* 7 == strlen("SS_cons") */
+    if (msa->sa_cons != NULL)     maxgc = ESL_MAX(maxgc, 7); /* 7 == strlen("SA_cons") */
+    if (msa->pp_cons != NULL)     maxgc = ESL_MAX(maxgc, 7); /* 7 == strlen("PP_cons") */
+  }
+  /* same as for maxgc, but now for maxgf */
+  if(ret_msa != NULL && opt_maxgf != NULL) { 
+    for(i = 0; i < msa->ngf; i++) maxgf = ESL_MAX(maxgf, strlen(msa->gf_tag[i])); 
+    if (msa->name != NULL) maxgf = ESL_MAX(maxgf, 2); /* 2 == strlen("ID") */
+    if (msa->desc != NULL) maxgf = ESL_MAX(maxgf, 2); /* 2 == strlen("DE") */
+    if (msa->acc  != NULL) maxgf = ESL_MAX(maxgf, 2); /* 2 == strlen("AC") */
+    if (msa->au   != NULL) maxgf = ESL_MAX(maxgf, 2); /* 2 == strlen("AU") */
+  }
+
+  if (first_seqname) free(first_seqname);
+  if (tmp_dsq)       free(tmp_dsq);
+  if (ct)            free(ct);
+  if (ss_nopseudo)   free(ss_nopseudo);
+  if (a2rf_map)      free(a2rf_map);
+
+  if (ret_msa)       *ret_msa       = msa;       else if (msa)      esl_msa_Destroy(msa);
+  if (opt_nseq)      *opt_nseq      = nseq; 
+  if (opt_alen)      *opt_alen      = alen;
+  if (opt_ngs)       *opt_ngs       = ngs;
+  if (opt_maxname)   *opt_maxname   = maxname;
+  if (opt_maxgf)     *opt_maxgf     = maxgf;
+  if (opt_maxgc)     *opt_maxgc     = maxgc;
+  if (opt_maxgr)     *opt_maxgr     = maxgr;
+  if (opt_abc_ct)    *opt_abc_ct    = abc_ct;    else if (abc_ct)    esl_Free2D((void **) abc_ct, alen);
+  if (opt_pp_ct)     *opt_pp_ct     = pp_ct;     else if (pp_ct)     esl_Free2D((void **) pp_ct, alen);
+  if (opt_bp_ct)     *opt_bp_ct     = bp_ct;     else if (bp_ct)     esl_Free3D((void ***) bp_ct, known_alen, abc->Kp);
+  if (opt_spos_ct)   *opt_spos_ct   = spos_ct;   else if (spos_ct)   free(spos_ct);
+  if (opt_epos_ct)   *opt_epos_ct   = epos_ct;   else if (epos_ct)   free(epos_ct);
+  return eslOK;
+
+ ERROR:
+  if (first_seqname)  free(first_seqname);
+  if (tmp_dsq)        free(tmp_dsq);
+  if (ct)             free(ct);
+  if (ss_nopseudo)    free(ss_nopseudo);
+  if (a2rf_map)       free(a2rf_map);
+
+  if (msa)            esl_msa_Destroy(msa);
+  if (pp_ct)          esl_Free2D((void **)  pp_ct,  alen);
+  if (abc_ct)         esl_Free2D((void **)  abc_ct, alen);
+  if (bp_ct)          esl_Free3D((void ***) bp_ct,  known_alen, abc->Kp);
+  if (spos_ct)        free(spos_ct);
+  if (epos_ct)        free(epos_ct);
+
+  if (ret_msa)       *ret_msa       = NULL;
+  if (opt_nseq)      *opt_nseq      = 0;
+  if (opt_alen)      *opt_alen      = 0;
+  if (opt_ngs)       *opt_ngs       = 0;
+  if (opt_maxname)   *opt_maxname   = 0;
+  if (opt_maxgf)     *opt_maxgf     = 0;
+  if (opt_maxgc)     *opt_maxgc     = 0;
+  if (opt_maxgr)     *opt_maxgr     = 0;
+  if (opt_pp_ct)     *opt_pp_ct     = NULL;
+  if (opt_abc_ct)    *opt_abc_ct    = NULL;
+  if (opt_bp_ct)     *opt_bp_ct     = NULL;
+  if (opt_spos_ct)   *opt_spos_ct   = NULL;
+  if (opt_epos_ct)   *opt_epos_ct   = NULL;
+  return status;
+}
+
+#ifdef eslAUGMENT_KEYHASH
+/* Function: esl_msafile2_RegurgitatePfam()
+ * Synopsis: Read and write next Pfam formatted MSA without storing it.
+ *
+ * Purpose:  Read and immediately write each line of a MSA after
+ *           optionally modifying aligned data by either adding all
+ *           gap columns or removing some columns. Do this without
+ *           creating an msa object, so memory usage is minimized.
+ *
+ *           The alignment file <afp> must be in Pfam format (1
+ *           line/seq non-interleaved Stockholm). The <do_*> arguments
+ *           specify which parts of the alignment to write.  <useme>
+ *           specifies which positions to keep in aligned strings, if
+ *           NULL then all are kept. <add2me> specifies how many gap
+ *           characters to add after each aligned position, if NULL
+ *           then none are added. Only one of <useme> and <add2me> 
+ *           can be non-NULL. 
+ * 
+ *           If one of the <seqs2regurg> or <seqs2skip> keyhashes are
+ *           non-NULL, they specify names of sequences (and affiliated
+ *           annotation) to output (<seqs2regurg>) or not output
+ *           (<seqs2skip>).  Only one of these may be non-NULL.
+ *
+ *           <maxname>, <maxgf>, <maxgc> and <maxgr> specify the max
+ *           length sequence name, GF tag, GC tag, and GR tag, and can
+ *           be provided by a caller that knows their values, e.g. as
+ *           revealed by a previous call to <esl_msafile2_ReadInfoPfam()>.
+ *           If any are -1, the caller didn't know the value, and the
+ *           spacing in the alignment file we read in will be
+ *           preserved. An example of useful non -1 values is if we're
+ *           merging multiple alignments into a single alignment, and
+ *           the spacing of any given alignment should change when all
+ *           alignments are considered (like what the esl-alimerge
+ *           miniapp does).
+ *
+ *           This function is not as rigorous about validating the
+ *           input as the other read functions that store the full
+ *           alignment. Here, we verify that there is only one line
+ *           for the first sequence read (verifying that all sequences
+ *           are only one line would require storing and looking up
+ *           all sequence names), that each aligned data line (<aseq>,
+ *           GC, GR) are all the same length. The aligned length must
+ *           equal <exp_alen> if it is not passed in as -1 (indicating
+ *           caller doesn't know alignment length). If <useme> or
+ *           <add2me> is non-NULL, <exp_alen> must not be -1. 
+ * 
+ *           Aligned sequence residues are not checked to make sure
+ *           they are consistent with an alphabet, they are simply
+ *           rewritten as they are read from the input file.
+ *
+ * Args:     afp         - open alignment file pointer
+ *           ofp         - output file pointer
+ *           maxname     - maximum length of a sequence name (-1 if unknown) 
+ *           maxgf       - maximum length of a GF tag (-1 if unknown) 
+ *           maxgc       - maximum length of a GC tag (-1 if unknown) 
+ *           maxgr       - maximum length of a GR tag (-1 if unknown) 
+ *           do_header   - TRUE to write magic Stockholm header at top to ofp 
+ *           do_trailer  - TRUE to write '//' at end to ofp
+ *           do_blanks   - TRUE to regurgitate blank lines, FALSE not to
+ *           do_comments - TRUE to write comments to ofp
+ *           do_gf       - TRUE to write GF annotation to ofp
+ *           do_gs       - TRUE to write GS annotation to ofp
+ *           do_gc       - TRUE to write GC annotation to ofp
+ *           do_gr       - TRUE to write GR annotation to ofp
+ *           do_aseq     - TRUE to write aligned sequences to ofp
+ *           seqs2regurg - keyhash of names of the sequences to write, all others
+ *                         will not be written. Associated annotation (GS, GR) 
+ *                         will be written for these sequences only. Must be NULL
+ *                         if seqs2skip is non-NULL (enforced by contract).
+ *                         If both are NULL all seqs are written.
+ *           seqs2skip   - keyhash of names of the sequences to skip (not write), 
+ *                         all others will be written. Associated annotation (GS, GR) 
+ *                         will not be written for these sequences. Must be NULL
+ *                         if seqs2regurg is NULL (enforced by contract).
+ *                         If both are NULL all seqs are written.
+ *           useme       - [0..apos..exp_alen-1] TRUE to include position apos in output of 
+ *                         aligned data (GC,GR,aseq), FALSE to remove it, can be NULL
+ *           add2me      - [0..apos..exp_alen-1] number of all gaps to add after each
+ *                         position of aligned data (GC,GR,aseq), can be NULL
+ *           exp_alen    - expected alignment length, -1 if unknown, which
+ *                         is okay as long as useme == add2me == NULL
+ *           gapchar2add   - gap character, only relevant if add2me != NULL
+ *           opt_nseq_read     - RETURN: optional, number of aligned sequences read
+ *           opt_nseq_regurged - RETURN: optional, number of aligned sequences regurgitated,
+ *                               same as opt_nseq_read unless seqs2regurg != NULL or 
+ *                               seqs2skip != NULL.
+ * 
+ * Returns:   <eslOK> on success. 
+ *            Returns <eslEOF> if there are no more alignments in <afp>.
+ *            <eslEFORMAT> if parse fails because of a file format problem,
+ *            in which case <afp->errbuf> is set to contain a formatted message 
+ *            that indicates the cause of the problem.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ * 
+ * Xref:      ~nawrockie/notebook/9_1206_esl_msa_mem_efficient/
+ */
+int
+esl_msafile2_RegurgitatePfam(ESL_MSAFILE2 *afp, FILE *ofp, int maxname, int maxgf, int maxgc, int maxgr, 
+			     int do_header, int do_trailer, int do_blanks, int do_comments, int do_gf, 
+			     int do_gs, int do_gc, int do_gr, int do_aseq, ESL_KEYHASH *seqs2regurg, 
+			     ESL_KEYHASH *seqs2skip, int *useme, int *add2me, int exp_alen, char gapchar2add,
+			     int *opt_nseq_read, int *opt_nseq_regurged)
+{
+  char      *s = NULL;
+  int        status;
+  int        status2;
+  char      *seqname = NULL;
+  char      *first_seqname = NULL;
+  char      *text = NULL;
+  char      *gapped_text = NULL;
+  char      *tag = NULL;
+  char      *gf = NULL;
+  char      *gc = NULL;
+  char      *gs = NULL;
+  char      *gr = NULL;
+  int       curmargin, curmargin2, namelen, spacelen, spacelen2, textlen, taglen;
+  int       gaps2addlen;
+  int       margin;             /* width of left hand side margin */
+  int       flushpoint = 10000; /* number of lines read at which to flush ofp */
+  int       nseq_read = 0;
+  int       nseq_regurged = 0;
+
+  /* contract check */
+  if ( ofp == NULL)                    ESL_EXCEPTION(eslEINCONCEIVABLE, "ofp is NULL");
+  if ( afp->format != eslMSAFILE_PFAM) ESL_EXCEPTION(eslEINCONCEIVABLE, "only Pfam (1 line /seq) Stockholm formatted files allowed in small mem mode");
+  if(add2me != NULL && useme != NULL)  ESL_EXCEPTION(eslEINCONCEIVABLE, "add2me and useme both non-NULL");
+  if((add2me != NULL || useme != NULL) && exp_alen == -1) ESL_EXCEPTION(eslEINCONCEIVABLE, "exp_alen == -1, but add2me or useme non-NULL");
+  if(seqs2regurg != NULL && seqs2skip != NULL)            ESL_EXCEPTION(eslEINVAL, "seqs2regurg and seqs2skip both non-NULL, only one may be");
+
+  gaps2addlen = (add2me == NULL) ? 0 : esl_vec_ISum(add2me, (exp_alen+1));
+
+  margin = -1;
+  if (maxgf != -1 && maxgf < 2) maxgf = 2;
+  if (maxname != -1)                         margin = maxname+1; 
+  if (maxgc > 0 && maxgc+6 > margin)         margin = maxgc+6;
+  if (maxgr > 0 && maxname+maxgr+7 > margin) margin = maxname+maxgr+7; 
+  /* if margin is still -1, we'll use the same spacing we read in from the file */
+
+  if (feof(afp->f))  { status = eslEOF; goto ERROR; }
+  afp->errbuf[0] = '\0';
+   
+  /* Check the magic Stockholm header line.
+   * We have to skip blank lines here, else we perceive
+   * trailing blank lines in a file as a format error when
+   * reading in multi-record mode.
+   */
+  do {
+    if ((status = msafile2_getline(afp)) != eslOK) goto ERROR; /* includes EOF  */
+  } while (is_blankline(afp->buf));
+  
+  if (strncmp(afp->buf, "# STOCKHOLM 1.", 14) != 0)
+    ESL_XFAIL(eslEFORMAT, afp->errbuf, "parse failed (line %d): missing \"# STOCKHOLM\" header", afp->linenumber);
+  if(do_header) fprintf(ofp, "%s", afp->buf);
+
+  /* Read the alignment file one line at a time.
+   */
+  while ((status2 = msafile2_getline(afp)) == eslOK) 
+    {
+      if(afp->linenumber % flushpoint == 0) fflush(ofp);
+      s = afp->buf;
+      while (*s == ' ' || *s == '\t') s++;  /* skip leading whitespace */
+      
+      if (*s == '#') {
+	
+	if      (strncmp(s, "#=GF", 4) == 0)
+	  {
+	    if (do_gf) { 
+	      if(maxgf == -1) { /* just print line as is */
+		fprintf(ofp, "%s", afp->buf); 
+	      }
+	      else { /* parse line into temporary strings, then print it out with correct formatting */
+		s = afp->buf;
+		if (esl_strtok(&s, " \t\n\r", &gf)   != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GF line", afp->linenumber);
+		if (esl_strtok(&s, " \t\n\r", &tag)  != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GF line", afp->linenumber);
+		if (esl_strtok(&s, "\n\r",    &text) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GF line", afp->linenumber);
+		fprintf(ofp, "#=GF %-*s %s\n", maxgf, tag, text);
+	      }
+	    }
+	  }
+	else if (strncmp(s, "#=GC", 4) == 0)
+	  {
+	    if(do_gc) { 
+	      /* parse line into temporary strings */
+	      s = afp->buf;
+	      if (esl_strtok    (&s, " \t\n\r", &gc)                  != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line", afp->linenumber);
+	      if (esl_strtok_adv(&s, " \t\n\r", &tag,  &taglen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line", afp->linenumber);
+	      spacelen = determine_spacelen(s);
+	      if (esl_strtok_adv(&s, " \t\n\r", &text, &textlen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line", afp->linenumber);
+
+	      /* verify alignment length */
+	      if(exp_alen == -1) exp_alen = textlen;
+	      else if(exp_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line, len %d, expected %d", afp->linenumber, textlen, exp_alen);
+
+	      /* determine margin length of sequence name field for output formatting */
+	      curmargin = (margin == -1) ? taglen + spacelen : margin - 6; 
+
+	      /* output, after optionally removing some characters (if useme != NULL) or adding gaps (if add2me != NULL) (contract enforces only one can be non-null) */
+	      if(useme  != NULL) { 
+		/* if this is a GC SS_cons line, remove broken basepairs first - only if it's in WUSS RNA format (NOT for a protein SS!) */
+		if (strncmp(tag, "SS_cons", 7) == 0 && afp->abc && (afp->abc->type == eslRNA || afp->abc->type == eslDNA)) {
+		  if((status = esl_msa_RemoveBrokenBasepairsFromSS(text, afp->errbuf, textlen, useme)) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC SS_cons line", afp->linenumber);
+		}
+		shrink_string(text, useme, exp_alen); /* this is done in place on text */
+	      }
+	      if(add2me != NULL) { 
+		if((status = gapize_string(text, textlen, textlen + gaps2addlen, add2me, gapchar2add, &gapped_text)) != eslOK) goto ERROR; 
+		fprintf(ofp, "#=GC %-*s %s\n", curmargin, tag, gapped_text);
+		free(gapped_text);
+	      }
+	      else { 
+		fprintf(ofp, "#=GC %-*s %s\n", curmargin, tag, text);
+	      }
+	    }
+	  }
+	else if (strncmp(s, "#=GS", 4) == 0)
+	  {
+	    /* we don't validate the sequence exists, this would require storing all seqnames */
+	    if (do_gs) { 
+	      if(maxname == -1 && seqs2regurg == NULL) { /* just print line as is */
+		fprintf(ofp, "%s", afp->buf); 
+	      }
+	      else { /* parse line into temporary strings, then print it out with correct formatting */
+		if((seqs2regurg == NULL && seqs2skip == NULL) || 
+		   (seqs2regurg != NULL && (status = esl_keyhash_Lookup(seqs2regurg, seqname, -1, NULL)) == eslOK) || 
+		   (seqs2skip   != NULL && (status = esl_keyhash_Lookup(seqs2skip,   seqname, -1, NULL)) == eslENOTFOUND))
+		  { /* this if() will evaluate as TRUE if seqs2regurg and seqs2skip are both NULL, or the seqname exists in seqs2regurg or does not exist in seqs2skip, else it will return FALSE */
+		    s = afp->buf;
+		    if (esl_strtok(&s, " \t\n\r", &gs)      != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GS line", afp->linenumber);
+		    if (esl_strtok(&s, " \t\n\r", &seqname) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GS line", afp->linenumber);
+		    if (esl_strtok(&s, " \t\n\r", &tag)     != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GS line", afp->linenumber);
+		    if (esl_strtok(&s, "\n\r",    &text)    != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GS line", afp->linenumber);
+		    fprintf(ofp, "#=GS %-*s %s %s\n", maxname, seqname, tag, text);
+		  }
+	      }
+	    }
+	  }
+	else if (strncmp(s, "#=GR", 4) == 0)
+	  {
+	    if(do_gr) { 
+	      /* parse line into temporary strings */
+	      s = afp->buf;
+	      if (esl_strtok    (&s, " \t\n\r", &gr)                      != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber);
+	      if (esl_strtok_adv(&s, " \t\n\r", &seqname, &namelen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber);
+	      spacelen = determine_spacelen(s);
+	      if (esl_strtok_adv(&s, " \t\n\r", &tag,      &taglen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber);
+	      spacelen2 = determine_spacelen(s);
+	      if (esl_strtok_adv(&s, " \t\n\r", &text, &textlen, NULL)   != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber);
+
+	      /* verify alignment length */
+	      if(exp_alen == -1) exp_alen = textlen;
+	      else if(exp_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line, len %d, expected %d", afp->linenumber, textlen, exp_alen);
+
+	      /* determine length of fields for output formatting */
+	      curmargin  = (maxname == -1) ? namelen + spacelen : maxname; 
+	      curmargin2 = (maxname == -1) ? taglen + spacelen2 : margin - maxname - 7;
+
+	      /* determine if we should regurgitate GR for this sequence or not */
+	      if((seqs2regurg == NULL && seqs2skip == NULL) || 
+		 (seqs2regurg != NULL && (status = esl_keyhash_Lookup(seqs2regurg, seqname, -1, NULL)) == eslOK) || 
+		 (seqs2skip   != NULL && (status = esl_keyhash_Lookup(seqs2skip,   seqname, -1, NULL)) == eslENOTFOUND))
+		{ /* this if() will evaluate as TRUE if seqs2regurg and seqs2skip are both NULL, or the seqname exists in seqs2regurg or does not exist in seqs2skip, else it will return FALSE */
+		  /* output GR, after optionally removing some characters (if useme != NULL) or adding gaps (if add2me != NULL) (contract enforces only one can be non-null) */
+		  if(useme  != NULL) { 
+		    /* if this is a GR SS line, remove broken basepairs first */
+		    if( strncmp(tag, "SS", 2) == 0 && afp->abc && (afp->abc->type == eslRNA || afp->abc->type == eslDNA)) {
+		      if((status = esl_msa_RemoveBrokenBasepairsFromSS(text, afp->errbuf, textlen, useme)) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR SS line", afp->linenumber);
+		    }
+		    shrink_string(text, useme, exp_alen); /* this is done in place on text */
+		  }
+		  if(add2me != NULL) { 
+		    if((status = gapize_string(text, textlen, textlen + gaps2addlen, add2me, gapchar2add, &gapped_text)) != eslOK) goto ERROR; 
+		    fprintf(ofp, "#=GR %-*s %-*s %s\n", curmargin, seqname, curmargin2, tag, gapped_text);
+		    free(gapped_text);
+		  }
+		  else { 
+		    fprintf(ofp, "#=GR %-*s %-*s %s\n", curmargin, seqname, curmargin2, tag, text);
+		  }
+		}
+	    }
+	  }
+	else if (do_comments) fprintf(ofp, "%s", afp->buf); /* print comment line, if desired */
+      } /* end of 'if (*s == '#')' */ 
+      else if (strncmp(s, "//",   2) == 0)   { if(do_trailer) fprintf(ofp, "%s", afp->buf); break; /* normal way out */ }
+      else if (*s == '\n' || *s == '\r')     { if(do_blanks)  { fprintf(ofp, "%s", afp->buf); } continue; } 
+      else { /* sequence line */
+	if(do_aseq) { 
+	  /* parse line into temporary strings */
+	  s = afp->buf;
+	  if (esl_strtok_adv(&s, " \t\n\r", &seqname, &namelen,  NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad sequence line", afp->linenumber);
+	  spacelen = determine_spacelen(s);
+	  if (esl_strtok_adv(&s, " \t\n\r", &text,    &textlen, NULL)  != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad sequence line", afp->linenumber);
+
+	  /* verify alignment length */
+	  if((exp_alen != -1) && (exp_alen != textlen)) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad seq line, len %d, expected %d", afp->linenumber, textlen, exp_alen);
+
+	  /* determine length of sequence name field for output formatting */
+	  curmargin = (margin == -1) ? namelen + spacelen : margin-1; 
+
+	  /* make sure we haven't just read a second line of the first sequence in file (we must be in Pfam 1 line/seq file) */
+	  if(nseq_read == 0) { if ((status = esl_strdup(seqname, -1, &(first_seqname))) != eslOK) goto ERROR; }
+	  else if(strcmp(first_seqname, seqname) == 0) { ESL_XFAIL(eslEFORMAT, afp->errbuf, "parse failed (line %d): two seqs named %s. Alignment appears to be in Stockholm format. Reformat to Pfam with esl-reformat.", afp->linenumber, seqname); }
+	  nseq_read++;
+
+	  /* determine if we should regurgitate this sequence or not */
+	  if((seqs2regurg == NULL && seqs2skip == NULL) || 
+	     (seqs2regurg != NULL && (status = esl_keyhash_Lookup(seqs2regurg, seqname, -1, NULL)) == eslOK) || 
+	     (seqs2skip   != NULL && (status = esl_keyhash_Lookup(seqs2skip,   seqname, -1, NULL)) == eslENOTFOUND))
+	    { /* this if() will evaluate as TRUE if seqs2regurg and seqs2skip are both NULL, or the seqname exists in seqs2regurg or does not exist in seqs2skip, else it will return FALSE */
+	      /* output sequence, after optionally removing some characters (if useme != NULL) or adding gaps (if add2me != NULL) (contract enforces only one can be non-null) */
+	      nseq_regurged++;
+	      if(useme  != NULL) shrink_string(text, useme, exp_alen); /* this is done in place on text */
+	      if(add2me != NULL) { 
+		if((status = gapize_string(text, textlen, textlen + gaps2addlen, add2me, gapchar2add, &gapped_text)) != eslOK) goto ERROR; 
+		fprintf(ofp, "%-*s %s\n", curmargin, seqname, gapped_text);
+		free(gapped_text);
+	      }
+	      else { 
+		fprintf(ofp, "%-*s %s\n", curmargin, seqname, text);
+	      }
+	    }
+	}
+      }
+    }
+
+  /* If we saw a normal // end, we would've successfully read a line,
+   * so when we get here, status (from the line read) should be eslOK.
+   */ 
+  if (status2 != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): didn't find // at end of alignment", afp->linenumber);
+  if (first_seqname     != NULL) free(first_seqname);
+  if (opt_nseq_read     != NULL) *opt_nseq_read    = nseq_read;
+  if (opt_nseq_regurged != NULL) *opt_nseq_regurged = nseq_regurged;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+#endif
+
+/* get_pp_idx
+ *                   
+ * Given a GR PP or GC PP_cons character, return the appropriate index
+ * in a pp_ct[] vector. 
+ * '0' return 0;
+ * '1' return 1;
+ * '2' return 2;
+ * '3' return 3;
+ * '4' return 4;
+ * '5' return 5;
+ * '6' return 6;
+ * '7' return 7;
+ * '8' return 8;
+ * '9' return 9;
+ * '*' return 10;
+ * gap return 11;
+ * 
+ * Anything else (including missing or nonresidue) return -1;
+ *
+ * This mapping of PP chars to return values should probably be 
+ * stored in some internal map structure somewhere, instead of 
+ * only existing in this function as used by esl_msafile2_ReadInfoPfam().
+ */
+static int
+get_pp_idx(ESL_ALPHABET *abc, char ppchar)
+{
+  if(esl_abc_CIsGap(abc, ppchar)) return 11;
+  if(ppchar == '*')               return 10;
+  if(ppchar == '9')               return 9;
+  if(ppchar == '8')               return 8;
+  if(ppchar == '7')               return 7;
+  if(ppchar == '6')               return 6;
+  if(ppchar == '5')               return 5;
+  if(ppchar == '4')               return 4;
+  if(ppchar == '3')               return 3;
+  if(ppchar == '2')               return 2;
+  if(ppchar == '1')               return 1;
+  if(ppchar == '0')               return 0;
+  return -1;
+}
+
+/* gapize_string
+ *                   
+ * Given a string, create a new one that is a copy of it, 
+ * but with gaps added before each position (apos) as specified 
+ * by ngapA[0..apos..len]. <gapchar> specifies the gap character
+ * to add.
+ * 
+ * ngapA[0]    - number of gaps to add before first posn
+ * ngapA[apos] - number of gaps to add before posn apos
+ * ngapA[len]  - number of gaps to add after  final posn
+ * 
+ * ret_str is allocated here.
+ *
+ * Returns eslOK on success.
+ *         eslEMEM on memory error.
+ */
+static int 
+gapize_string(char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, char **ret_dst_str)
+{
+  int status;
+  int src_apos = 0;
+  int dst_apos  = 0;
+  int i;
+  char *dst_str;
+
+  ESL_ALLOC(dst_str, sizeof(char) * (dst_len+1));
+  dst_str[dst_len] = '\0';
+
+  /* add gaps before first position */
+  for(i = 0; i < ngapA[0]; i++) dst_str[dst_apos++] = gapchar;
+
+  /* add gaps after every position */
+  for(src_apos = 0; src_apos < src_len; src_apos++) { 
+    dst_str[dst_apos++] = src_str[src_apos];
+    for(i = 0; i < ngapA[(src_apos+1)]; i++) dst_str[dst_apos++] = gapchar;
+  }
+
+  *ret_dst_str = dst_str;
+  return eslOK;
+
+ ERROR: 
+  return eslEMEM;
+}
+
+/* shrink_string
+ *                   
+ * Remove some characters of a string in place.
+ * If useme[0..pos..len-1] == FALSE, remove position pos.
+ * 
+ */
+static void
+shrink_string(char *str, const int *useme, int len)
+{
+  int opos, npos;
+
+  for (opos = 0, npos = 0; opos < len; opos++) { 
+      if (useme[opos] == FALSE) continue;
+      str[npos++] = str[opos];
+  }
+  str[npos] = '\0';
+  return;
+}
+
+
+/* determine_spacelen
+ *                   
+ * Determine number of consecutive ' ' characters 
+ * in the string pointed to by s.
+ */
+static int
+determine_spacelen(char *s)
+{
+  int spacelen = 0;
+  while (*s == ' ') { spacelen++; s++; } 
+  return spacelen;
+}
+/*------------- end, memory efficient Pfam i/o  -----------------*/
+
+
+
+/*****************************************************************
+ * 3. Legacy Stockholm parsing tools
+ *****************************************************************/
+
+/* msafile_getline():
+ * load the next line of <afp> into <afp->buf>. 
+ * Returns eslOK on success, eslEOF on normal eof.
+ * Throws eslEMEM on alloc failure.
+ */
+static int
+msafile2_getline(ESL_MSAFILE2 *afp)
+{
+  int status;
+  status = esl_fgets(&(afp->buf), &(afp->buflen), afp->f);
+  afp->linenumber++;
+  return status;
+}
+
+
+static int
+is_blankline(char *s)
+{
+  for (; *s != '\0'; s++)
+    if (! isspace((int) *s)) return FALSE;
+  return TRUE;
+}
+
+/* Format of a GF line:
+ *    #=GF <tag> <text>
+ * Returns eslOK on success; eslEFORMAT on parse failure.
+ * Throws eslEMEM on allocation failure.
+ */
+static int
+parse_gf(ESL_MSA *msa, char *buf)
+{
+  char *gf;
+  char *tag;
+  char *text;
+  char *tok;
+  char *s;
+  int   n;
+  int   status;
+
+  s = buf;
+  if (esl_strtok(&s, " \t\n\r", &gf)  != eslOK) return eslEFORMAT;
+  if (esl_strtok(&s, " \t\n\r", &tag) != eslOK) return eslEFORMAT;
+
+  /* special case: accept a blank #=GF CC line. Otherwise, <s> is required. */
+  while (isspace(*s)) s++;
+  status = esl_strtok_adv(&s, "\n\r", &text, &n, NULL);
+  if      (status == eslEOL) { if (strcmp(tag, "CC") != 0) return eslEFORMAT; }
+  else if (status != eslOK)  { return eslEFORMAT; }
+
+  if      (strcmp(tag, "ID") == 0) status = esl_strdup(text, n, &(msa->name));
+  else if (strcmp(tag, "AC") == 0) status = esl_strdup(text, n, &(msa->acc));
+  else if (strcmp(tag, "DE") == 0) status = esl_strdup(text, n, &(msa->desc));
+  else if (strcmp(tag, "AU") == 0) status = esl_strdup(text, n, &(msa->au));
+  else if (strcmp(tag, "GA") == 0) 
+    {				/* Pfam has GA1, GA2. Rfam just has GA1. */
+      s = text;
+      if ((esl_strtok(&s, " \t\n\r", &tok)) != eslOK) 
+	return eslEFORMAT;
+      msa->cutoff[eslMSA_GA1] = atof(tok);
+      msa->cutset[eslMSA_GA1] = TRUE;
+      if ((esl_strtok(&s, " \t\n\r", &tok)) == eslOK) 
+	{
+	  msa->cutoff[eslMSA_GA2] = atof(tok);
+	  msa->cutset[eslMSA_GA2] = TRUE;
+	}
+      status = eslOK;
+    }
+  else if (strcmp(tag, "NC") == 0) 
+    {
+      s = text;
+      if ((esl_strtok(&s, " \t\n\r", &tok)) != eslOK) 
+	return eslEFORMAT;
+      msa->cutoff[eslMSA_NC1] = atof(tok);
+      msa->cutset[eslMSA_NC1] = TRUE;
+      if ((esl_strtok(&s, " \t\n\r", &tok)) == eslOK) 
+	{
+	  msa->cutoff[eslMSA_NC2] = atof(tok);
+	  msa->cutset[eslMSA_NC2] = TRUE;
+	}
+      status = eslOK;
+    }
+  else if (strcmp(tag, "TC") == 0) 
+    {
+      s = text;
+      if ((esl_strtok(&s, " \t\n\r", &tok)) != eslOK) 
+	return eslEFORMAT;
+      msa->cutoff[eslMSA_TC1] = atof(tok);
+      msa->cutset[eslMSA_TC1] = TRUE;
+      if ((esl_strtok(&s, "\t\n\r", &tok)) == eslOK) 
+	{
+	  msa->cutoff[eslMSA_TC2] = atof(tok);
+	  msa->cutset[eslMSA_TC2] = TRUE;
+	}
+      status = eslOK;
+    }
+  else if (strcmp(tag, "CC") == 0 && text == NULL)   
+    status = esl_msa_AddGF (msa, tag, -1, "", -1);
+  else
+    status = esl_msa_AddGF(msa, tag, -1, text, -1);
+
+  return status;
+}
+
+/* parse_gc():
+ * Format of a GC line:
+ *    #=GC <tag> <aligned text>
+ */
+static int 
+parse_gc(ESL_MSA *msa, char *buf)
+{
+  char *gc;
+  char *tag;
+  char *text; 
+  char *s;
+  int   len;
+  int   status;
+
+  s = buf;
+  if (esl_strtok    (&s, " \t\n\r", &gc)               != eslOK) return eslEFORMAT;
+  if (esl_strtok    (&s, " \t\n\r", &tag)              != eslOK) return eslEFORMAT;
+  if (esl_strtok_adv(&s, " \t\n\r", &text, &len, NULL) != eslOK) return eslEFORMAT;
+  
+  if      (strcmp(tag, "SS_cons") == 0)  status = esl_strcat(&(msa->ss_cons), -1, text, len);
+  else if (strcmp(tag, "SA_cons") == 0)  status = esl_strcat(&(msa->sa_cons), -1, text, len);
+  else if (strcmp(tag, "PP_cons") == 0)  status = esl_strcat(&(msa->pp_cons), -1, text, len);
+  else if (strcmp(tag, "RF")      == 0)  status = esl_strcat(&(msa->rf),      -1, text, len);
+  else if (strcmp(tag, "MM")      == 0)  status = esl_strcat(&(msa->mm),      -1, text, len);
+  else                                   status = esl_msa_AppendGC(msa, tag, text);
+
+  return status;
+}
+
+
+/* parse_comment():
+ * comments are simply stored verbatim, not parsed
+ */
+static int
+parse_comment(ESL_MSA *msa, char *buf)
+{
+  char *s;
+  char *comment;
+
+  s = buf + 1;			               /* skip leading '#' */
+  if (*s == '\n' || *s == '\r') { *s = '\0'; comment = s; }  /* deal with blank comment */
+  else if (esl_strtok(&s, "\n\r", &comment)!= eslOK) return eslEFORMAT;
+  return (esl_msa_AddComment(msa, comment, -1));
+}
+/*-------------- end, legacy stockholm parser -------------------*/
+
+/*****************************************************************
+ * 4. Unit tests 
+ *****************************************************************/
+#ifdef eslMSAFILE2_TESTDRIVE
+
+/* write_known_pfam_msa()
+ * Write a known MSA to a tmpfile in Pfam Stockholm format.
+ */
+static void
+write_known_pfam_msa(FILE *ofp)
+{
+  fprintf(ofp, "# STOCKHOLM 1.0\n");
+  fprintf(ofp, "#=GF ID pfam-test\n");
+  fprintf(ofp, "#=GS seq2 DE seq2 is interesting\n");
+  fprintf(ofp, "seq1    --ACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWY~~~\n");
+  fprintf(ofp, "seq2    aaACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWYyyy\n");
+  fprintf(ofp, "seq3    aaACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWYyyy\n");
+  fprintf(ofp, "#=GC RF ..xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...\n");
+  fprintf(ofp, "//\n");
+  return;
+}
+
+
+static void
+utest_ReadInfoPfam(char *filename)
+{
+  char         *msg = "ReadInfo() unit test failure";
+  ESL_MSAFILE2 *mfp = NULL;
+  ESL_MSA      *msa = NULL;
+  int           nseq = 0;
+  int64_t       alen = 0;
+  int           ngs = 0;
+  int           maxname = 0;
+  int           maxgf = 0;
+  int           maxgc = 0;
+  int           maxgr = 0;
+
+  if (esl_msafile2_Open(filename, NULL, &mfp) != eslOK) esl_fatal(msg);  
+  if (esl_msafile2_ReadInfoPfam(mfp, NULL, NULL, -1, NULL, NULL, &msa, &nseq, &alen, &ngs, &maxname, &maxgf, &maxgc, &maxgr, NULL, NULL, NULL, NULL, NULL) != eslOK)  esl_fatal(msg);
+
+  if (msa->nseq != 0)  esl_fatal("bad msa->nseq");
+  if (msa->alen != -1) esl_fatal("bad msa->alen");
+  if (nseq      != 3)  esl_fatal("bad nseq");
+  if (alen      != 47) esl_fatal("bad alen");
+  if (ngs       != 1)  esl_fatal("bad ngs");
+  if (maxname   != 4)  esl_fatal("bad maxname");
+  if (maxgf     != 2)  esl_fatal("bad maxgf");
+  if (maxgc     != 2)  esl_fatal("bad maxgc");
+  if (maxgr     != 0)  esl_fatal("bad maxgr");
+  esl_msa_Destroy(msa);
+
+  if (esl_msafile2_ReadInfoPfam(mfp, NULL, NULL, -1, NULL, NULL, &msa, &nseq, &alen, &ngs, &maxname, &maxgf, &maxgc, &maxgr, NULL, NULL, NULL, NULL, NULL) != eslEOF) esl_fatal(msg);
+  if (msa  != NULL) esl_fatal(msg);
+  if (nseq != 0 || alen != 0 || ngs != 0 || maxname != 0 || maxgf != 0 || maxgc != 0 || maxgr != 0) esl_fatal("bad nseq");
+
+  esl_msafile2_Close(mfp);
+}
+
+static void
+utest_RegurgitatePfam(char *filename)
+{
+  char         *msg         = "RegurgitatePfam() unit test failure";
+  ESL_MSAFILE2 *mfp         = NULL;
+  ESL_MSAFILE  *afp         = NULL;
+  char          tmpfile[16] = "esltmpXXXXXX";
+  FILE         *fp          = NULL;
+  ESL_MSA      *msa1        = NULL;
+  ESL_MSA      *msa2        = NULL;
+
+  /* regurgitate msa in filename to tmpfile (an msa structure will not be created) */
+  if (esl_msafile2_Open(filename, NULL, &mfp) != eslOK) esl_fatal(msg); 
+  if (esl_tmpfile_named(tmpfile, &fp)         != eslOK) esl_fatal(msg);
+  if (esl_msafile2_RegurgitatePfam(mfp, fp, 
+				   -1, -1, -1, -1, /* maxname, maxgf, maxgc, maxgr unknown: output msa formatting will match input msa formatting */
+				   TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, /* do_header, do_trailer, do_blanks, do_comments, do_gf, do_gs, do_gc, do_gr, do_aseq: print all components */
+				   NULL,          /* seqs2regurg: if non-NULL specifies which sequences to keep in output */
+				   NULL,          /* seqs2skip:   if non-NULL specifies which sequences to skip in output */
+				   NULL,          /* useme:  if non-NULL specifies which columns to keep in output */
+				   NULL,          /* add2me: if non-NULL specifies how many gap columns to add in output */
+				   -1,            /* expected alignment length, unknown (must not be if useme != NULL or add2me != NULL */
+				   '.',           /* gapchar2add, irrelevant since add2me is NULL */
+				   NULL,          /* don't return num seqs read */
+				   NULL)          /* don't return num seqs read */
+      != eslOK) esl_fatal(msg);
+  fclose(fp);
+  esl_msafile2_Close(mfp);
+
+  /* Using normal interface, read in msa from filename as msa1 */
+  if (esl_msafile_Open(NULL, filename, NULL, eslMSAFILE_PFAM, NULL, &afp) != eslOK) esl_fatal(msg); 
+  if (esl_msafile_Read(afp, &msa1)                                        != eslOK) esl_fatal(msg);
+  esl_msafile_Close(afp);
+
+  /* Using normal interface, read in msa from tmpfile as msa2 */
+  if (esl_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_PFAM, NULL, &afp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_Read(afp, &msa2)                                       != eslOK) esl_fatal(msg);
+  esl_msafile_Close(afp);
+
+  if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  remove(tmpfile);
+}
+#endif /* eslMSAFILE2_TESTDRIVE */
+/*------------------ end, unit tests ----------------------------*/
+
+
+/*****************************************************************
+ * 5. Test driver
+ *****************************************************************/
+#ifdef eslMSAFILE2_TESTDRIVE
+
+/* compile: gcc -g -Wall -I. -L. -o esl_msafile2_utest -DeslMSAFILE2_TESTDRIVE esl_msafile2.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile2_utest -DeslMSAFILE2_TESTDRIVE esl_msafile2.c -leasel -lm
+ * run:     ./esl_msafile2_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_msafile2.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for legacy memory-efficient Pfam format input/output";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS *go          = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  FILE        *fp          = NULL;
+  char         tmpfile[16] = "esltmpXXXXXX";
+  
+  if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal("failed to create tmpfile");
+  write_known_pfam_msa(fp);
+  fclose(fp);
+
+  utest_ReadInfoPfam(tmpfile);
+  utest_RegurgitatePfam(tmpfile);
+
+  remove(tmpfile);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+#endif /*eslMSAFILE2_TESTDRIVE*/
+/*----------------- end, test driver ----------------------------*/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile2.h b/esl_msafile2.h
new file mode 100644
index 0000000..68ab4b6
--- /dev/null
+++ b/esl_msafile2.h
@@ -0,0 +1,86 @@
+/* Memory-efficient multiple sequence alignment i/o from Pfam format
+ * 
+ * Legacy interface, now that ESL_MSAFILE is rewritten.  Still need
+ * to support --small option in various tools, so the necessary parts
+ * of the old interface were moved here.
+ * 
+ * To-do: 
+ *   :: add memory-efficient interface in ESL_MSAFILE
+ *   :: add memory-efficient ESL_MSA w/ API
+ *   :: add space-efficient MSA file format
+ */
+#ifndef eslMSAFILE2_INCLUDED
+#define eslMSAFILE2_INCLUDED
+
+#include "esl_msa.h"		/* ESL_MSA structure                                                  */
+#include "esl_msafile.h"	/* preferred msafile interface, inc. fmt codes shared w/ ESL_MSAFILE2 */
+
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"	/* digital alphabet                                                   */
+#endif
+#ifdef eslAUGMENT_KEYHASH
+#include "esl_keyhash.h"	/* string hashes, for mapping unique seq names                        */
+#endif
+#ifdef eslAUGMENT_SSI
+#include "esl_ssi.h"        	/* indexing large flatfiles on disk                                   */
+#endif
+
+/* Object: ESL_MSAFILE2
+ * 
+ * Defines an alignment file that we open for reading,
+ * in our legacy version. See ESL_MSAFILE (esl_msafile.c) for the
+ * preferred version.
+ */
+typedef struct {
+  FILE *f;                      /* open file pointer                         */
+  char *fname;			/* name of file. used for diagnostic output  */
+  int   linenumber;		/* what line are we on in the file           */
+  char  errbuf[eslERRBUFSIZE];  /* buffer for holding parse error info       */
+
+  char *buf;			/* buffer for line input w/ sre_fgets()      */
+  int   buflen;			/* current allocated length for buf          */
+
+  int   do_gzip;		/* TRUE if f is "gzip -dc |" (will pclose(f))*/
+  int   do_stdin;		/* TRUE if f is stdin (won't close f)        */
+  int   format;			/* format of alignment file we're reading    */
+
+  int   do_digital;		/* TRUE to digitize seqs directly into ax    */
+#if defined(eslAUGMENT_ALPHABET)
+  const ESL_ALPHABET *abc;	/* AUGMENTATION (alphabet): digitized input  */
+#else
+  void               *abc;
+#endif
+
+#if defined(eslAUGMENT_SSI)		/* AUGMENTATION: SSI indexing of an MSA db   */
+  ESL_SSI *ssi;		        /* open SSI index file; or NULL, if none.    */
+#else
+  void    *ssi;
+#endif
+
+  ESL_MSA *msa_cache;		/* occasional lookahead at next MSA; GuessAlphabet() */
+} ESL_MSAFILE2;
+
+
+
+/* 1. The ESL_MSAFILE2 object */
+extern int  esl_msafile2_Open(const char *filename, const char *env, ESL_MSAFILE2 **ret_afp);
+#ifdef eslAUGMENT_ALPHABET
+extern int  esl_msafile2_OpenDigital(const ESL_ALPHABET *abc, const char *filename, const char *env, ESL_MSAFILE2 **ret_afp);
+#endif
+extern void esl_msafile2_Close(ESL_MSAFILE2 *afp);
+
+/* 2. Memory efficient reading/writing in Pfam format (augmentation: keyhash, for regurgitating some but not all seqs) */
+extern int   esl_msafile2_ReadInfoPfam(ESL_MSAFILE2 *afp, FILE *listfp, ESL_ALPHABET *abc, int64_t known_alen, char *known_rf, char *known_ss_cons, ESL_MSA **ret_msa, 
+				       int *opt_nseq, int64_t *opt_alen, int *opt_ngs, int *opt_maxname, int *opt_maxgf, int *opt_maxgc, int *opt_maxgr, 
+				       double ***opt_abc_ct, double ***opt_pp_ct, double ****opt_bp_ct, int **opt_spos_ct, int **opt_epos_ct);
+#ifdef eslAUGMENT_KEYHASH
+extern int   esl_msafile2_RegurgitatePfam(ESL_MSAFILE2 *afp, FILE *ofp, int maxname, int maxgf, int maxgc, int maxgr,
+					  int do_header, int do_trailer, int do_blanks, int do_comments, int do_gf, 
+					  int do_gs, int do_gc, int do_gr, int do_aseq, ESL_KEYHASH *seqs2regurg, ESL_KEYHASH *seqs2skip, 
+					  int *useme, int *add2me, int exp_alen, char gapchar2add, int *opt_nseq_read, int *opt_nseq_written);
+#endif
+
+#endif //eslMSAFILE2_INCLUDED
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_a2m.c b/esl_msafile_a2m.c
new file mode 100644
index 0000000..42dee28
--- /dev/null
+++ b/esl_msafile_a2m.c
@@ -0,0 +1,1049 @@
+/* I/O of multiple sequence alignments in A2M format (UCSC SAM)
+ * 
+ * Contents:
+ *   1. API for reading/writing A2M format
+ *   2. Internal functions used by the A2M parser
+ *   3. Unit tests.
+ *   4. Test driver.
+ *   5. Examples.
+ *   6. License and copyright.
+ *
+ * Reference:
+ *   http://compbio.soe.ucsc.edu/a2m-desc.html
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#include "esl_mem.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_a2m.h"
+
+#ifdef eslAUGMENT_ALPHABET
+static int a2m_padding_digital(ESL_MSA *msa, char **csflag, int *nins, int ncons);
+#endif
+static int a2m_padding_text   (ESL_MSA *msa, char **csflag, int *nins, int ncons);
+
+/*****************************************************************
+ *# 1. API for reading/writing A2M format
+ *****************************************************************/
+
+
+/* Function:  esl_msafile_a2m_SetInmap()
+ * Synopsis:  Set input map specific for A2M format
+ *
+ * Purpose:   Set the <afp->inmap> for A2M format.
+ *
+ *            A2M ignores whitespace and periods (and ignoring
+ *            periods makes us agnostic whether the input is
+ *            "dotless" format or not). Make ' ', '\t', and
+ *            '.' ignored.
+ *            
+ *            A2M format only allows - for a gap, so make
+ *            all other Easel gap characters illegal on input.
+ *            
+ *            A2M format handles an 'O' specially: this indicates
+ *            a FIM (free insertion module) to the SAM software.
+ *            We ignore it.
+
+ *            A2M allows ACDEFGHIKLMNPQRSTVWY for aa, plus XBZ.
+ *            Unknown letters (including other ambig codes) are mapped
+ *            to X.  A2M allows ACGTU for nucleic, plus YRN.  Unknown
+ *            letters (including other ambig codes) are mapped to N.
+ *            However, Easel enforces its normal input restrictions on
+ *            residues: digital bioalphabets allow only valid residue
+ *            symbols, and text mode allows any isalpha() character
+ *            verbatim.
+ */
+int
+esl_msafile_a2m_SetInmap(ESL_MSAFILE *afp)
+{
+  int sym;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc)
+    {
+      for (sym = 0; sym < 128; sym++) 
+	afp->inmap[sym] = afp->abc->inmap[sym];
+      afp->inmap[0] = esl_abc_XGetUnknown(afp->abc);
+      afp->inmap['_']  = eslDSQ_ILLEGAL;
+      afp->inmap['*']  = eslDSQ_ILLEGAL;
+      afp->inmap['~']  = eslDSQ_ILLEGAL;
+    }
+#endif
+  if (! afp->abc)
+    {
+      for (sym = 1; sym < 128; sym++) 
+	afp->inmap[sym] = (isalpha(sym) ? sym : eslDSQ_ILLEGAL);
+      afp->inmap[0]   = '?';
+      afp->inmap['-'] = '-';
+    }
+
+  afp->inmap[' ']  = eslDSQ_IGNORED;
+  afp->inmap['\t'] = eslDSQ_IGNORED;
+  afp->inmap['.']  = eslDSQ_IGNORED;
+  afp->inmap['O']  = eslDSQ_IGNORED;
+  afp->inmap['o']  = eslDSQ_IGNORED;
+  return eslOK;
+}
+
+/* Function:  esl_msafile_a2m_GuessAlphabet()
+ * Synopsis:  Guess the alphabet of an open A2M MSA file.
+ *
+ * Purpose:   Guess the alpbabet of the sequences in open
+ *            A2M format MSA file <afp>.
+ *            
+ *            On a normal return, <*ret_type> is set to <eslDNA>,
+ *            <eslRNA>, or <eslAMINO>, and <afp> is reset to its
+ *            original position.
+ *
+ * Args:      afp      - open A2M format MSA file
+ *            ret_type - RETURN: <eslDNA>, <eslRNA>, or <eslAMINO>       
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslENOALPHABET> if alphabet type can't be determined.
+ *            In either case, <afp> is rewound to the position it
+ *            started at.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslESYS> on failures of fread() or other system calls
+ */
+int
+esl_msafile_a2m_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type)
+{
+  int       alphatype     = eslUNKNOWN;
+  esl_pos_t anchor        = -1;
+  int       threshold[3]  = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */
+  int       nsteps        = 3;
+  int       step          = 0;
+  int       nres          = 0;
+  int       x;
+  int64_t   ct[26];
+  char     *p;
+  esl_pos_t n, pos;
+  int       status;
+
+  for (x = 0; x < 26; x++) ct[x] = 0;
+
+  anchor = esl_buffer_GetOffset(afp->bf);
+  if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */
+
+  while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK)
+    {
+      while (n && isspace(*p)) { p++; n--; }
+      if    (!n || *p == '>') continue;
+
+      for (pos = 0; pos < n; pos++)
+	if (isalpha(p[pos])) {
+	  x = toupper(p[pos]) - 'A'; 
+	  ct[x]++;
+	  nres++;
+	}
+
+      /* try to stop early, checking after 500, 5000, and 50000 residues: */
+      if (step < nsteps && nres > threshold[step]) {
+	if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */
+	step++;
+      }
+    }
+  if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */
+  status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */
+
+  /* deliberate flowthrough...*/
+ DONE:
+  esl_buffer_SetOffset(afp->bf, anchor);   /* Rewind to where we were. */
+  esl_buffer_RaiseAnchor(afp->bf, anchor);
+  *ret_type = alphatype;
+  return status;
+
+ ERROR:
+  if (anchor != -1) {
+    esl_buffer_SetOffset(afp->bf, anchor);
+    esl_buffer_RaiseAnchor(afp->bf, anchor);
+  }
+  *ret_type = eslUNKNOWN;
+  return status;
+}
+
+
+/* Function:  esl_msafile_a2m_Read()
+ * Synopsis:  Read a UCSC A2M format alignment.
+ *
+ * Purpose:   Read an MSA from an open <ESL_MSAFILE> <afp>, parsing
+ *            for UCSC A2M (SAM) format. Create a new MSA,
+ *            and return a ptr to it in <*ret_msa>. Caller is responsible
+ *            for freeing this <ESL_MSA>.
+ *            
+ *            The <msa> has a reference line (<msa->rf[]>) that
+ *            corresponds to the uppercase/lowercase columns in the
+ *            alignment: consensus (uppercase) columns are marked 'X',
+ *            and insert (lowercase) columns are marked '.' in the RF
+ *            annotation line.
+ *
+ *            This input parser can deal both with "dotless" A2M, and
+ *            full A2M format with dots.
+ *            
+ * Args:      afp     - open <ESL_MSAFILE>
+ *            ret_msa - RETURN: newly parsed <ESL_MSA>
+ *
+ * Returns:   <eslOK> on success. <*ret_msa> is set to the newly
+ *            allocated MSA, and <afp> is at EOF.
+ *
+ *            <eslEOF> if no (more) alignment data are found in
+ *            <afp>, and <afp> is returned at EOF. 
+ *
+ *            <eslEFORMAT> on a parse error. <*ret_msa> is set to
+ *            <NULL>. <afp> contains information sufficient for
+ *            constructing useful diagnostic output: 
+ *            | <afp->errmsg>       | user-directed error message     |
+ *            | <afp->linenumber>   | line # where error was detected |
+ *            | <afp->line>         | offending line (not NUL-term)   |
+ *            | <afp->n>            | length of offending line        |
+ *            | <afp->bf->filename> | name of the file                |
+ *            and <afp> is poised at the start of the following line,
+ *            so (in principle) the caller could try to resume
+ *            parsing.
+ *            
+ * Throws:    <eslEMEM> - an allocation failed.
+ *            <eslESYS> - a system call such as fread() failed
+ *            <eslEINCONCEIVABLE> - "impossible" corruption 
+ *            On these, <*ret_msa> is returned <NULL>, and the state of
+ *            <afp> is undefined.
+ */
+int
+esl_msafile_a2m_Read(ESL_MSAFILE *afp, ESL_MSA **ret_msa)
+{
+  ESL_MSA  *msa        = NULL;
+  char    **csflag     = NULL;	/* csflag[i][pos] is TRUE if aseq[i][pos] was uppercase consensus   */
+  int      *nins       = NULL;	/* # of inserted residues before each consensus col [0..ncons-1]    */
+  int      *this_nins  = NULL;	/* # of inserted residues before each consensus residue in this seq */
+  int       nseq       = 0;
+  int       ncons      = 0;
+  int       idx;
+  int64_t   thislen;
+  int64_t   spos;
+  int       this_ncons;
+  int       cpos, bpos;
+  char     *p, *tok;
+  esl_pos_t n,  toklen;
+  int       status;
+
+  ESL_DASSERT1( (afp->format == eslMSAFILE_A2M) );
+
+  afp->errmsg[0] = '\0';	
+
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc   &&  (msa = esl_msa_CreateDigital(afp->abc, 16, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+#endif
+  if (! afp->abc &&  (msa = esl_msa_Create(                 16, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+  ESL_ALLOC(csflag, sizeof(char *) * msa->sqalloc);
+  for (idx = 0; idx < msa->sqalloc; idx++) csflag[idx] = NULL; 
+
+  /* skip leading blank lines in file */
+  while ( (status = esl_msafile_GetLine(afp, &p, &n)) == eslOK  && esl_memspn(afp->line, afp->n, " \t") == afp->n) ;
+  if      (status != eslOK) goto ERROR; /* includes normal EOF */
+
+  /* tolerate sloppy space at start of name/desc line */
+  while (n && isspace(*p)) { p++; n--; }    
+  if (*p != '>') ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected A2M name/desc line starting with >");    
+
+  do {	/* for each record starting in '>': */
+    p++; n--; 			/* advance past > */
+    
+    if ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen))   != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "no name found for A2M record");
+    if (nseq >= msa->sqalloc) {
+      int old_sqalloc = msa->sqalloc;
+      if ( (status = esl_msa_Expand(msa)) != eslOK) goto ERROR;
+      ESL_REALLOC(csflag, sizeof(char *) * msa->sqalloc);
+      for (idx = old_sqalloc; idx < msa->sqalloc; idx++) csflag[idx] = NULL;
+    }
+
+    if (     (status = esl_msa_SetSeqName       (msa, nseq, tok, toklen)) != eslOK) goto ERROR;
+    if (n && (status = esl_msa_SetSeqDescription(msa, nseq, p,   n))      != eslOK) goto ERROR;
+
+    /* now for each sequence line... */
+    thislen = 0;		/* count of lowercase, uppercase, and '-': w/o dots, on first pass */
+    this_ncons = 0;		/* count of uppercase + '-': number of consensus columns in alignment: must match for all seqs */
+    if (nseq) {
+      for (cpos = 0; cpos <= ncons; cpos++) // A little tricksy. <this_nins> is allocated on first seq, when nseq=0. 
+	this_nins[cpos] = 0;                // cppcheck gets confused and erroneously calls "possible null pointer deference"; ignore it.
+    }
+
+    while ( (status = esl_msafile_GetLine(afp, &p, &n)) == eslOK)
+      {				
+	while (n && isspace(*p)) { p++; n--; } /* tolerate and skip leading whitespace on line */
+	if (n  == 0)   continue;	       /* tolerate and skip blank lines */
+	if (*p == '>') break;
+
+	ESL_REALLOC(csflag[nseq], sizeof(char) * (thislen + n + 1)); /* might be an overalloc by a bit, depending on whitespace on line */
+	if (nseq == 0) {
+	  ESL_REALLOC(this_nins, sizeof(int) * (this_ncons + n + 1));
+	  for (cpos = this_ncons; cpos <= this_ncons+n; cpos++)
+	    this_nins[cpos] = 0;
+	}
+
+	for (spos = thislen, bpos = 0; bpos < n; bpos++)
+	  {
+	    if      (p[bpos] == 'O')   continue;
+	    else if (isupper(p[bpos])) { csflag[nseq][spos++] = TRUE;  this_ncons++;            }
+	    else if (islower(p[bpos])) { csflag[nseq][spos++] = FALSE; this_nins[this_ncons]++; }
+	    else if (p[bpos] == '-')   { csflag[nseq][spos++] = TRUE;  this_ncons++;            }
+	    if (ncons && this_ncons > ncons) ESL_XFAIL(eslEFORMAT, afp->errmsg,  "unexpected # of consensus residues, didn't match previous seq(s)");
+	  }
+	csflag[nseq][spos] = TRUE; /* need a sentinel, because of the way the padding functions work */
+
+#ifdef eslAUGMENT_ALPHABET
+	if (msa->abc)   { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[nseq]),   &thislen, p, n); } 
+#endif
+	if (! msa->abc) { status = esl_strmapcat (afp->inmap, &(msa->aseq[nseq]), &thislen, p, n); }
+	if (status == eslEINVAL)   ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters");
+	else if (status != eslOK)  goto ERROR;
+	ESL_DASSERT1( (spos == thislen) );
+      }	
+    if (status != eslOK && status != eslEOF) goto ERROR; /* exception thrown by esl_msafile_GetLine() */
+    /* status == OK: then *p == '>'. status == eslEOF: we're eof.  status == anything else: error */
+    /* Finished reading a sequence record. */
+    
+    if (nseq == 0) 
+      {
+	ncons = this_ncons;
+	ESL_ALLOC(nins, sizeof(int) * (ncons+1));
+	for (cpos = 0; cpos <= ncons; cpos++)
+	  nins[cpos] = this_nins[cpos];
+      } 
+    else 
+      {
+	if (this_ncons != ncons) ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected # of consensus residues, didn't match previous seq(s)");
+	for (cpos = 0; cpos <= ncons; cpos++) 
+	  nins[cpos]      = ESL_MAX(nins[cpos], this_nins[cpos]);
+      }
+    nseq++;
+  } while (status == eslOK);
+  
+  /* Now we have nseq *unaligned* sequences in ax/aseq[0..nseq-1]; call the length slen, though we don't explicitly store it
+   * csflag[idx][spos] tells us whether each unaligned residue is an insertion or consensus, for spos==0..slen-1.
+   * nins[0..ncons] tells us the max number of inserted residues before each consensus column
+   * This is sufficient information to reconstruct each aligned sequence.
+   */
+  msa->nseq = nseq;
+#ifdef eslAUGMENT_ALPHABET
+  if (msa->abc)  { if ((status = a2m_padding_digital(msa, csflag, nins, ncons)) != eslOK) goto ERROR; }
+#endif
+  if (!msa->abc) { if ((status = a2m_padding_text   (msa, csflag, nins, ncons)) != eslOK) goto ERROR; }
+
+  if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR;
+
+  *ret_msa  = msa;
+  free(nins);
+  free(this_nins);
+  for (idx = 0; idx < msa->nseq; idx++) free(csflag[idx]);
+  free(csflag);
+  return eslOK;
+  
+ ERROR:
+  if (nins)      free(nins);
+  if (this_nins) free(this_nins);
+  if (csflag) {
+    for (idx = 0; idx < msa->nseq; idx++) 
+      if (csflag[idx]) free(csflag[idx]);
+    free(csflag);
+  }
+  if (msa) esl_msa_Destroy(msa);
+  return status;
+}
+
+
+/* Function:  esl_msafile_a2m_Write()
+ * Synopsis:  Write an A2M (UCSC SAM) dotless format alignment to a stream.
+ *
+ * Purpose:   Write alignment <msa> in dotless UCSC A2M format to a
+ *            stream <fp>.
+ *            
+ *            The <msa> should have a valid reference line <msa->rf>,
+ *            with alphanumeric characters marking consensus (match)
+ *            columns, and non-alphanumeric characters marking
+ *            nonconsensus (insert) columns. If it does not,
+ *            then as a fallback, the first sequence in the alignment is
+ *            considered to be the consensus.
+ *            
+ *            In "dotless" A2M format, gap characters (.) in insert
+ *            columns are omitted; therefore sequences can be of
+ *            different lengths, but each sequence has the same number
+ *            of consensus columns (residue or -).
+ *            
+ *            A2M format cannot represent missing data symbols
+ *            (Easel's ~). Any missing data symbols are converted to
+ *            gaps.
+ *            
+ *            A2M format cannot represent pyrrolysine residues in
+ *            amino acid sequences, because it treats 'O' symbols
+ *            specially, as indicating a position at which a
+ *            free-insertion module (FIM) should be created. Any 'O'
+ *            in the <msa> is written instead as an unknown
+ *            residue ('X', in protein sequences).
+ *            
+ * Args:      fp  - open output stream
+ *            msa - MSA to write       
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEWRITE> on any system write error, such as filled disk.
+ */
+int
+esl_msafile_a2m_Write(FILE *fp, const ESL_MSA *msa)
+{
+  char   *buf = NULL;
+  int     cpl = 60;
+  int     bpos;
+  int     pos;
+  int     is_consensus;
+  int     is_residue;
+  int     do_dotless = TRUE;	/* just changing this to FALSE makes it write dots too */
+  int     i;
+  int     sym;
+  int     status;
+
+  ESL_ALLOC(buf, sizeof(char) * (cpl+1));
+
+  for (i = 0; i < msa->nseq; i++)
+    {
+      /* Construct the name/description line */
+      if (fprintf(fp, ">%s", msa->sqname[i])                                                      < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed");
+      if (msa->sqacc  != NULL && msa->sqacc[i]  != NULL) { if (fprintf(fp, " %s", msa->sqacc[i])  < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed"); }
+      if (msa->sqdesc != NULL && msa->sqdesc[i] != NULL) { if (fprintf(fp, " %s", msa->sqdesc[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed"); }
+      if (fputc('\n', fp)                                                                         < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed"); 
+
+#ifdef eslAUGMENT_ALPHABET
+      if (msa->abc)
+	{
+	  pos = 0;
+	  while (pos < msa->alen)
+	    {
+	      for (bpos = 0; pos < msa->alen && bpos < cpl; pos++)
+		{
+		  sym          = msa->abc->sym[msa->ax[i][pos+1]]; /* note off-by-one in digitized aseq: 1..alen */
+		  is_residue   = esl_abc_XIsResidue(msa->abc, msa->ax[i][pos+1]);
+		  if (msa->rf) is_consensus = (isalnum(msa->rf[pos]) ? TRUE : FALSE);
+		  else         is_consensus = (esl_abc_XIsResidue(msa->abc, msa->ax[0][pos+1]) ? TRUE : FALSE);
+
+		  if (sym == 'O') sym = esl_abc_XGetUnknown(msa->abc); /* watch out: O means "insert a FIM" in a2m format, not pyrrolysine */
+		  
+		  if      (is_consensus) { buf[bpos++] = (is_residue ? toupper(sym) : '-'); }
+		  else if (is_residue)   { buf[bpos++] = tolower(sym); }
+		  else if (! do_dotless) { buf[bpos++] = '.'; }
+		}
+	      buf[bpos] = '\0';
+	      if (bpos) { if (fprintf(fp, "%s\n", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed");}
+	    }
+	}
+#endif
+      if (! msa->abc)
+	{
+	  pos = 0;
+	  while (pos < msa->alen)
+	    {
+	      for (bpos = 0; pos < msa->alen && bpos < cpl; pos++)
+		{
+		  sym          = msa->aseq[i][pos];
+		  is_residue   = isalpha(msa->aseq[i][pos]);
+		  if (msa->rf) is_consensus = (isalnum(msa->rf[pos]) ? TRUE : FALSE);
+		  else         is_consensus = (isalnum(msa->aseq[0][pos]) ? TRUE : FALSE);
+
+		  if (sym == 'O') sym = 'X';
+
+		  if      (is_consensus) { buf[bpos++] = ( is_residue ? toupper(sym) : '-'); }
+		  else if (is_residue)   { buf[bpos++] = tolower(sym); }
+		  else if (! do_dotless) { buf[bpos++] = '.'; }
+		  
+		}
+	      buf[bpos] = '\0';
+	      if (bpos) { if (fprintf(fp, "%s\n", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed"); }
+	    } 
+	}
+    } /* end, loop over sequences in the MSA */
+
+  free(buf);
+  return eslOK;
+
+ ERROR:
+  if (buf) free(buf);
+  return status;
+}
+/*------------- end, API for i/o of a2m format ------------------*/
+
+
+/*****************************************************************
+ * 2. Internal functions used by the A2M parser
+ *****************************************************************/
+
+/* A2M parser has an input phase, followed by an alignment padding phase.
+ * The a2m_padding_{digital,text} functions do the padding phase.
+ * 
+ * Upon call:
+ *   msa->nseq is set;
+ *   msa->ax[0..nseq-1][1..slen] are unaligned seqs (consensus cols +
+ *   inserted residues); or msa->aseq[0..nseq-1][0..slen-1], for text mode
+ *   csflag[0..nseq-1][0..slen-1] is TRUE/FALSE for whether each pos
+ *   in msa->ax[][1..slen]/msa->aseq[][0..slen-1] is consensus or insert
+ *   nins[0..ncons] is the number of insert columns preceding each consensus column
+ *
+ * watch out, ax[] is a digital sequence, 1..alen not 0..alen-1: hence
+ * the [apos+1], [spos+1] indexing
+ *         
+ * these functions may not fail with any normal (eslEFORMAT) error, because
+ * we wouldn't be able to tell the line/linenumber of the error
+ *
+ * Upon successful return:
+ *  msa->alen is set
+ *  all msa->ax[]/msa->aseq are now aligned digital sequences         
+ *  msa->rf is set
+ */
+#ifdef eslAUGMENT_ALPHABET
+static int
+a2m_padding_digital(ESL_MSA *msa, char **csflag, int *nins, int ncons)
+{
+  ESL_DSQ *ax     = NULL;		/* new aligned sequence - will be swapped into msa->ax[] */
+  ESL_DSQ  gapsym = esl_abc_XGetGap(msa->abc);
+  int      apos, cpos, spos;	/* position counters for alignment 0..alen, consensus cols 0..cpos-1, sequence position 0..slen-1 */
+  int      alen;
+  int      icount;
+  int      idx;
+  int      status;
+
+  alen = ncons;
+  for (cpos = 0; cpos <= ncons; cpos++)
+    alen += nins[cpos];
+
+  ESL_ALLOC(msa->rf, sizeof(char) * (alen+1));
+  for (apos = 0, cpos = 0; cpos <= ncons; cpos++)
+    {
+      for (icount = 0; icount < nins[cpos]; icount++) msa->rf[apos++] = '.';
+      if  (cpos < ncons) msa->rf[apos++] = 'x';
+    }
+  msa->rf[apos] = '\0';
+
+  for (idx = 0; idx < msa->nseq; idx++)
+    {
+      ESL_ALLOC(ax, sizeof(ESL_DSQ) * (alen + 2));    
+      ax[0] = eslDSQ_SENTINEL;
+      apos = spos  = 0; 
+      for (cpos = 0; cpos <= ncons; cpos++)
+	{
+	  icount = 0;   
+	  while (csflag[idx][spos] == FALSE)  { ax[apos+1] = msa->ax[idx][spos+1]; apos++; spos++; icount++; }
+	  while (icount < nins[cpos]) 	      { ax[apos+1] = gapsym;               apos++;         icount++; }
+	  if (cpos < ncons)                   { ax[apos+1] = msa->ax[idx][spos+1]; apos++; spos++;           }
+	}
+      ESL_DASSERT1( (msa->ax[idx][spos+1] == eslDSQ_SENTINEL) );
+      ESL_DASSERT1( (apos == alen) );
+      ax[alen+1] = eslDSQ_SENTINEL;
+      free(msa->ax[idx]);
+      msa->ax[idx] = ax;
+      ax = NULL;
+    }
+  msa->alen = alen;
+
+
+
+  return eslOK;
+  
+ ERROR:
+  if (ax) free(ax);
+  return status;
+}
+#endif /*eslAUGMENT_ALPHABET*/
+
+static int
+a2m_padding_text(ESL_MSA *msa, char **csflag, int *nins, int ncons)
+{
+  char   *aseq = NULL;		/* new aligned sequence - will be swapped into msa->aseq[] */
+  int     apos, cpos, spos;	/* position counters for alignment 0..alen, consensus cols 0..cpos-1, sequence position 0..slen-1 */
+  int     alen;
+  int     icount;
+  int     idx;
+  int     status;
+
+  alen = ncons;
+  for (cpos = 0; cpos <= ncons; cpos++)
+    alen += nins[cpos];
+
+  ESL_ALLOC(msa->rf, sizeof(char) * (alen+1));
+  for (apos = 0, cpos = 0; cpos <= ncons; cpos++)
+    {
+      for (icount = 0; icount < nins[cpos]; icount++) msa->rf[apos++] = '.';
+      if  (cpos < ncons) msa->rf[apos++] = 'x';
+    }
+  msa->rf[apos] = '\0';
+  
+  for (idx = 0; idx < msa->nseq; idx++)
+    {
+      ESL_ALLOC(aseq, sizeof(char) * (alen + 1));    
+      apos = spos  = 0; 
+      for (cpos = 0; cpos <= ncons; cpos++)
+	{
+	  icount = 0;   
+	  while (csflag[idx][spos] == FALSE)  { aseq[apos] = msa->aseq[idx][spos]; apos++; spos++; icount++; }
+	  while (icount < nins[cpos]) 	      { aseq[apos] = '.';                  apos++;         icount++; }
+	  if (cpos < ncons) 	              { aseq[apos] = msa->aseq[idx][spos]; apos++; spos++;           }
+	}
+      ESL_DASSERT1( (msa->aseq[idx][spos] == '\0') );
+      ESL_DASSERT1( (apos == alen) );
+      aseq[alen] = '\0';
+      free(msa->aseq[idx]);
+      msa->aseq[idx] = aseq;
+      aseq = NULL;
+    }
+  msa->alen = alen;
+  return eslOK;
+  
+ ERROR:
+  if (aseq) free(aseq);
+  return status;
+}
+/*---------- end, internal functions for the parser -------------*/
+
+
+/*****************************************************************
+ * 3. Unit tests.
+ *****************************************************************/
+#ifdef eslMSAFILE_A2M_TESTDRIVE
+
+static void
+utest_write_good1(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs(">MYG_PHYCA\n", ofp);
+  fputs("VLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTEAEMKASED\n", ofp);
+  fputs("LKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHP\n", ofp);
+  fputs("GDFGADAQGAMNKALELFRKDIAAKYKELGYQG\n", ofp);
+  fputs(">GLB5_PETMA\n", ofp);
+  fputs("pivdtgsvApLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT\n", ofp);
+  fputs("ADQLKKSADVRWHAERIINAVNDAVASMDDtekMSMKLRDLSGKHAKSFQVDPQYFKVLA\n", ofp);
+  fputs("AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------\n", ofp);
+  fputs(">HBB_HUMAN\n", ofp);
+  fputs("VhLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNP\n", ofp);
+  fputs("KVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHF\n", ofp);
+  fputs("GKEFTPPVQAAYQKVVAGVANALAHKYH------\n", ofp);
+  fputs(">HBA_HUMAN\n", ofp);
+  fputs("VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF------DLSHGSAQ\n", ofp);
+  fputs("VKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLP\n", ofp);
+  fputs("AEFTPAVHASLDKFLASVSTVLTSKYR------\n", ofp);
+
+  *ret_alphatype = eslAMINO;
+  *ret_nseq      = 4;
+  *ret_alen      = 165;
+}
+
+static void
+utest_write_good2(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs(">tRNA2\n", ofp);
+  fputs("UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGGAGACCGGGGUUCGACUC\n", ofp);
+  fputs("CCCGUAUCGGAG\n", ofp);
+  fputs(">tRNA3\n", ofp);
+  fputs("UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCcAGAUCGGGGUUCAAUU\n", ofp);
+  fputs("CCCCGUCGCGGAG\n", ofp);
+  fputs(">tRNA5\n", ofp);
+  fputs("GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGaGGUCAUCGGUUCGAUU\n", ofp);
+  fputs("CCGGUUGCGUCCA\n", ofp);
+  fputs(">tRNA1\n", ofp);
+  fputs("GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGaGGUCCUGUGUUCGAUC\n", ofp);
+  fputs("CACAGAAUUCGCA\n", ofp);
+  fputs(">tRNA4\n", ofp);
+  fputs("GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUuGGUCCUUAGUUCGAUC\n", ofp);
+  fputs("CUGAGUGCGAGCU\n", ofp);
+
+  *ret_alphatype = eslRNA;
+  *ret_nseq      = 5;
+  *ret_alen      = 73;
+}
+
+static void
+utest_goodfile(char *filename, int testnumber, int expected_alphatype, int expected_nseq, int expected_alen)
+{
+  ESL_ALPHABET        *abc          = NULL;
+  ESL_MSAFILE         *afp          = NULL;
+  ESL_MSA             *msa1         = NULL;
+  ESL_MSA             *msa2         = NULL;
+  char                 tmpfile1[32] = "esltmpXXXXXX";   
+  char                 tmpfile2[32] = "esltmpXXXXXX";
+  FILE                *ofp          = NULL;
+  int                  status;
+
+  /* A2M must be specified (no format guessing, unless we use .a2m suffix) but guessing the alphabet should work: this is a digital open */
+  if ( (status = esl_msafile_Open(&abc, filename, NULL, eslMSAFILE_A2M, NULL, &afp)) != eslOK) esl_fatal("a2m good file test %d failed: digital open",           testnumber);  
+  if (afp->format != eslMSAFILE_A2M)                                                           esl_fatal("a2m good file test %d failed: bad format",             testnumber);
+  if (abc->type   != expected_alphatype)                                                       esl_fatal("a2m good file test %d failed: alphabet autodetection", testnumber);
+
+  /* This is a digital read, using <abc>. */
+  if ( (status = esl_msafile_a2m_Read(afp, &msa1))   != eslOK)     esl_fatal("a2m good file test %d failed: msa read, digital", testnumber);  
+  if (msa1->nseq != expected_nseq || msa1->alen != expected_alen)  esl_fatal("a2m good file test %d failed: nseq/alen",         testnumber);
+  if (esl_msa_Validate(msa1, NULL) != eslOK)                       esl_fatal("a2m good file test %d failed: msa invalid",       testnumber);
+  esl_msafile_Close(afp);  
+
+  /* write it back out to a new tmpfile (digital write) */
+  if ( (status = esl_tmpfile_named(tmpfile1, &ofp)) != eslOK) esl_fatal("a2m good file test %d failed: tmpfile creation",   testnumber);
+  if ( (status = esl_msafile_a2m_Write(ofp, msa1))  != eslOK) esl_fatal("a2m good file test %d failed: msa write, digital", testnumber);
+  fclose(ofp);
+
+  /* now open and read it as text mode, in known format. */
+  if ( (status = esl_msafile_Open(NULL, tmpfile1, NULL, eslMSAFILE_A2M, NULL, &afp)) != eslOK) esl_fatal("a2m good file test %d failed: text mode open", testnumber);  
+  if ( (status = esl_msafile_a2m_Read(afp, &msa2))                                   != eslOK) esl_fatal("a2m good file test %d failed: msa read, text", testnumber);  
+  if (msa2->nseq != expected_nseq || msa2->alen != expected_alen)                              esl_fatal("a2m good file test %d failed: nseq/alen",      testnumber);
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                   esl_fatal("a2m good file test %d failed: msa invalid",       testnumber);
+  esl_msafile_Close(afp);
+  
+  /* write it back out to a new tmpfile (text write) */
+  if ( (status = esl_tmpfile_named(tmpfile2, &ofp)) != eslOK) esl_fatal("a2m good file test %d failed: tmpfile creation", testnumber);
+  if ( (status = esl_msafile_a2m_Write(ofp, msa2))  != eslOK) esl_fatal("a2m good file test %d failed: msa write, text",  testnumber);
+  fclose(ofp);
+  esl_msa_Destroy(msa2);
+
+  /* open and read it in digital mode */
+  if ( (status = esl_msafile_Open(&abc, tmpfile1, NULL, eslMSAFILE_A2M, NULL, &afp)) != eslOK) esl_fatal("a2m good file test %d failed: 2nd digital mode open", testnumber);  
+  if ( (status = esl_msafile_a2m_Read(afp, &msa2))                                   != eslOK) esl_fatal("a2m good file test %d failed: 2nd digital msa read",  testnumber);  
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                   esl_fatal("a2m good file test %d failed: msa invalid",           testnumber);
+  esl_msafile_Close(afp);
+
+  /* this msa <msa2> should be identical to <msa1> */
+  if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("a2m good file test %d failed: msa compare", testnumber);  
+
+  remove(tmpfile1);
+  remove(tmpfile2);
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_alphabet_Destroy(abc);
+}
+
+
+static void
+write_test_msas(FILE *ofp1, FILE *ofp2)
+{
+  fprintf(ofp1, ">seq1 description line for seq1\n");
+  fprintf(ofp1, "ACDEFGHIKLMNPQRSTVWY\n");
+  fprintf(ofp1, "ACDEFGHIKLMNPQRSTVWY\n");
+  fprintf(ofp1, ">seq2 description line for seq2\n");
+  fprintf(ofp1, "ACDEFGHIKLMNPQRSTV--\n");
+  fprintf(ofp1, "ACDEFGHIKLMNPQRSTVWY\n");
+  fprintf(ofp1, "yy\n");
+  fprintf(ofp1, ">seq3\n");
+  fprintf(ofp1, "aaACDEFGHIKLMNPQRSTV\n");
+  fprintf(ofp1, "--ACDEFGHIKLMNPQRSTVWY\n");
+  fprintf(ofp1, ">seq4  \n");
+  fprintf(ofp1, "ACDEFGHIKLMNPQR\n");
+  fprintf(ofp1, "STVWYACDEFGHIKL\n");
+  fprintf(ofp1, "MNPQRSTVWY\n");
+
+  fprintf(ofp2, "# STOCKHOLM 1.0\n");
+  fprintf(ofp2, "\n");
+  fprintf(ofp2, "#=GS seq1 DE description line for seq1\n");
+  fprintf(ofp2, "#=GS seq2 DE description line for seq2\n");
+  fprintf(ofp2, "\n");
+  fprintf(ofp2, "#=GC RF ..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..\n");
+  fprintf(ofp2, "seq1    ..ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "seq2    ..ACDEFGHIKLMNPQRSTV--ACDEFGHIKLMNPQRSTVWYyy\n");
+  fprintf(ofp2, "seq3    aaACDEFGHIKLMNPQRSTV--ACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "seq4    ..ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "//\n");
+}
+
+static void
+read_test_msas_digital(char *a2mfile, char *stkfile)
+{
+  char msg[]         = "A2M msa digital read unit test failed";
+  ESL_ALPHABET *abc  = NULL;
+  ESL_MSAFILE  *afp1 = NULL;
+  ESL_MSAFILE  *afp2 = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  FILE         *a2mfp, *stkfp;
+  char          a2mfile2[32] = "esltmpa2m2XXXXXX";
+  char          stkfile2[32] = "esltmpstk2XXXXXX";
+
+  if ( esl_msafile_Open(&abc, a2mfile, NULL, eslMSAFILE_A2M,       NULL, &afp1) != eslOK)  esl_fatal(msg);
+  if ( !abc || abc->type != eslAMINO)                                                      esl_fatal(msg);
+  if ( esl_msafile_Open(&abc, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_a2m_Read      (afp1, &msa1)                                  != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa2)                                  != eslOK)  esl_fatal(msg);
+  if ( esl_msa_Compare(msa1, msa2)                                              != eslOK)  esl_fatal(msg);
+
+  if ( esl_msafile_a2m_Read      (afp1, &msa3) != eslEOF) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg);
+
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  /* Now write stk to a2m file, and vice versa; then retest */
+  if ( esl_tmpfile_named(a2mfile2, &a2mfp)                       != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile2, &stkfp)                       != eslOK) esl_fatal(msg);
+  if ( esl_msafile_a2m_Write      (a2mfp, msa2)                  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_PFAM) != eslOK) esl_fatal(msg);
+  fclose(a2mfp);
+  fclose(stkfp);
+  if ( esl_msafile_Open(&abc, a2mfile2, NULL, eslMSAFILE_A2M,       NULL, &afp1) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Open(&abc, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_a2m_Read      (afp1, &msa3)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa4)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msa_Compare(msa3, msa4)                                               != eslOK) esl_fatal(msg);
+
+  remove(a2mfile2);
+  remove(stkfile2);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+  esl_alphabet_Destroy(abc);
+}
+
+static void
+read_test_msas_text(char *a2mfile, char *stkfile)
+{
+  char msg[]         = "A2M msa text-mode read unit test failed";
+  ESL_MSAFILE  *afp1 = NULL;
+  ESL_MSAFILE  *afp2 = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  FILE         *a2mfp, *stkfp;
+  char          a2mfile2[32] = "esltmpa2m2XXXXXX";
+  char          stkfile2[32] = "esltmpstk2XXXXXX";
+
+  /*                     vvvv-- everything's the same as the digital utest except these NULLs  */
+  if ( esl_msafile_Open(NULL, a2mfile, NULL, eslMSAFILE_A2M,       NULL, &afp1) != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_Open(NULL, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_a2m_Read      (afp1, &msa1)                                  != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa2)                                  != eslOK)  esl_fatal(msg);
+  if ( esl_msa_Compare(msa1, msa2)                                              != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_a2m_Read      (afp1, &msa3)                                  != eslEOF) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa3)                                  != eslEOF) esl_fatal(msg);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  if ( esl_tmpfile_named(a2mfile2, &a2mfp)                        != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile2, &stkfp)                        != eslOK) esl_fatal(msg);
+  if ( esl_msafile_a2m_Write      (a2mfp, msa2)                   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_PFAM)  != eslOK) esl_fatal(msg);
+  fclose(a2mfp);
+  fclose(stkfp);
+  if ( esl_msafile_Open(NULL, a2mfile2, NULL, eslMSAFILE_A2M,       NULL, &afp1) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Open(NULL, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_a2m_Read      (afp1, &msa3)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa4)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msa_Compare(msa3, msa4)                                               != eslOK) esl_fatal(msg);
+
+  remove(a2mfile2);
+  remove(stkfile2);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+}
+
+#endif /*eslMSAFILE_A2M_TESTDRIVE*/
+/*---------------------- end, unit tests ------------------------*/
+
+
+
+/*****************************************************************
+ * 4. Test driver.
+ *****************************************************************/
+#ifdef eslMSAFILE_A2M_TESTDRIVE
+/* compile: gcc -g -Wall -I. -L. -o esl_msafile_a2m_utest -DeslMSAFILE_A2M_TESTDRIVE esl_msafile_a2m.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_a2m_utest -DeslMSAFILE_A2M_TESTDRIVE esl_msafile_a2m.c -leasel -lm
+ * run:     ./esl_msafile_a2m_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_msafile.h"
+#include "esl_msafile_a2m.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for A2M MSA format module";
+
+int
+main(int argc, char **argv)
+{
+  char            msg[]        = "a2m MSA i/o module test driver failed";
+  ESL_GETOPTS    *go           = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  char            a2mfile[32] = "esltmpa2mXXXXXX";
+  char            stkfile[32] = "esltmpstkXXXXXX";
+  FILE           *a2mfp, *stkfp;
+  int             testnumber;
+  int             ngoodtests = 2;
+  char            tmpfile[32];
+  FILE           *ofp;
+  int             expected_alphatype;
+  int             expected_nseq;
+  int             expected_alen;
+
+  if ( esl_tmpfile_named(a2mfile, &a2mfp) != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile, &stkfp) != eslOK) esl_fatal(msg);
+  write_test_msas(a2mfp, stkfp);
+  fclose(a2mfp);
+  fclose(stkfp);
+
+  read_test_msas_digital(a2mfile, stkfile);
+  read_test_msas_text   (a2mfile, stkfile);
+
+  /* Various "good" files that should be parsed correctly */
+  for (testnumber = 1; testnumber <= ngoodtests; testnumber++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX");   
+      if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+      switch (testnumber) {
+      case  1:  utest_write_good1 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  2:  utest_write_good2 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      }
+      fclose(ofp);
+      utest_goodfile(tmpfile, testnumber, expected_alphatype, expected_nseq, expected_alen);
+      remove(tmpfile);
+    }
+
+  remove(a2mfile);
+  remove(stkfile);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslMSAFILE_A2M_TESTDRIVE*/
+/*--------------------- end, test driver ------------------------*/
+
+
+
+/*****************************************************************
+ * 5. Examples.
+ *****************************************************************/
+
+#ifdef eslMSAFILE_A2M_EXAMPLE
+/* A full-featured example of reading/writing an MSA in A2M format.
+   gcc -g -Wall -o esl_msafile_a2m_example -I. -L. -DeslMSAFILE_A2M_EXAMPLE esl_msafile_a2m.c -leasel -lm
+   ./esl_msafile_a2m_example <msafile>
+ */
+/*::cexcerpt::msafile_a2m_example::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_a2m.h"
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",            0 },
+  { "-1",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "override autodetection; force A2M format",        0 },
+  { "-q",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "quieter: don't write msa back, just summary",     0 },
+  { "-t",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use text mode: no digital alphabet",              0 },
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is DNA",                    0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is RNA",                    0 },
+  { "--amino",     eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is protein",                0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msafile>";
+static char banner[] = "example of guessing, reading, writing A2M format";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS        *go          = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char               *filename    = esl_opt_GetArg(go, 1);
+  int                 infmt       = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET       *abc         = NULL;
+  ESL_MSAFILE        *afp         = NULL;
+  ESL_MSA            *msa         = NULL;
+  int                 status;
+
+  if      (esl_opt_GetBoolean(go, "-1"))      infmt = eslMSAFILE_A2M;  /* override format autodetection */
+
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); 
+
+  /* Text mode: pass NULL for alphabet.
+   * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed 
+   */
+  if   (esl_opt_GetBoolean(go, "-t"))  status = esl_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp);
+  else                                 status = esl_msafile_Open(&abc, filename, NULL, infmt, NULL, &afp);
+  if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+
+  if ((status = esl_msafile_a2m_Read(afp, &msa)) != eslOK)
+    esl_msafile_ReadFailure(afp, status);
+
+  printf("alphabet:       %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)"));
+  printf("# of seqs:      %d\n", msa->nseq);
+  printf("# of cols:      %d\n", (int) msa->alen);
+  printf("\n");
+
+  if (! esl_opt_GetBoolean(go, "-q"))
+    esl_msafile_a2m_Write(stdout, msa);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  if (abc) esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+/*::cexcerpt::msafile_a2m_example::end::*/
+#endif /*eslMSAFILE_A2M_EXAMPLE*/
+
+
+#ifdef eslMSAFILE_A2M_EXAMPLE2
+/* A minimal example. Read A2M MSA, in text mode
+   gcc -g -Wall -o esl_msafile_a2m_example2 -I. -L. -DeslMSAFILE_A2M_EXAMPLE2 esl_msafile_a2m.c -leasel -lm
+   ./esl_msafile_a2m_example <msafile>
+ */
+/*::cexcerpt::msafile_a2m_example2::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_a2m.h"
+
+int 
+main(int argc, char **argv)
+{
+  char         *filename = argv[1];
+  int           fmt      = eslMSAFILE_A2M;
+  ESL_MSAFILE  *afp      = NULL;
+  ESL_MSA      *msa      = NULL;
+  int           status;
+
+  if ( (status = esl_msafile_Open(NULL, filename, NULL, fmt, NULL, &afp)) != eslOK) esl_msafile_OpenFailure(afp, status);
+  if ( (status = esl_msafile_a2m_Read(afp, &msa))                         != eslOK) esl_msafile_ReadFailure(afp, status);
+
+  printf("%6d seqs, %5d columns\n", msa->nseq, (int) msa->alen);
+
+  esl_msafile_a2m_Write(stdout, msa);
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  exit(0);
+}
+/*::cexcerpt::msafile_a2m_example2::end::*/
+#endif /*eslMSAFILE_A2M_EXAMPLE2*/
+/*--------------------- end of examples -------------------------*/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_a2m.h b/esl_msafile_a2m.h
new file mode 100644
index 0000000..b05643e
--- /dev/null
+++ b/esl_msafile_a2m.h
@@ -0,0 +1,18 @@
+/* i/o of multiple sequence alignment files in dotless UCSC A2M format
+ */
+#ifndef eslMSAFILE_A2M_INCLUDED
+#define eslMSAFILE_A2M_INCLUDED
+
+#include "esl_msa.h"
+#include "esl_msafile.h"
+
+extern int esl_msafile_a2m_SetInmap     (ESL_MSAFILE *afp);
+extern int esl_msafile_a2m_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type);
+extern int esl_msafile_a2m_Read         (ESL_MSAFILE *afp, ESL_MSA **ret_msa);
+extern int esl_msafile_a2m_Write        (FILE *fp,    const ESL_MSA *msa);
+
+#endif /* eslMSAFILE_A2M_INCLUDED */
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_afa.c b/esl_msafile_afa.c
new file mode 100644
index 0000000..7bd8808
--- /dev/null
+++ b/esl_msafile_afa.c
@@ -0,0 +1,732 @@
+/* i/o of multiple sequence alignment files in "aligned FASTA" format
+ *
+ * Contents:
+ *   1. API for reading/writing AFA format
+ *   2. Unit tests.
+ *   3. Test driver.
+ *   4. Examples.
+ *   5. License and copyright.
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#include "esl_mem.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_afa.h"
+
+/*****************************************************************
+ *# 1. API for reading/writing AFA format
+ *****************************************************************/
+
+/* Function:  esl_msafile_afa_SetInmap()
+ * Synopsis:  Set input map for aligned FASTA format.
+ *
+ * Purpose:   Set the <afp->inmap> for aligned FASTA format.
+ *
+ *            Text mode accepts any <isgraph()> character. 
+ *            Digital mode enforces the usual Easel alphabets.
+ * 
+ *            We skip spaces in input lines of aligned FASTA format;
+ *            map ' ' to <eslDSQ_IGNORED>.
+ */
+int
+esl_msafile_afa_SetInmap(ESL_MSAFILE *afp)
+{
+  int sym;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc)
+    {
+      for (sym = 0; sym < 128; sym++) 
+	afp->inmap[sym] = afp->abc->inmap[sym];
+      afp->inmap[0] = esl_abc_XGetUnknown(afp->abc);
+    }
+#endif
+  if (! afp->abc)
+    {
+      for (sym = 1; sym < 128; sym++) 
+	afp->inmap[sym] = (isgraph(sym) ? sym : eslDSQ_ILLEGAL);
+      afp->inmap[0]   = '?';
+    }
+
+  afp->inmap[' '] = eslDSQ_IGNORED;
+  return eslOK;
+}
+
+
+/* Function:  esl_msafile_afa_GuessAlphabet()
+ * Synopsis:  Guess the alphabet of an open AFA MSA file.
+ *
+ * Purpose:   Guess the alpbabet of the sequences in open
+ *            AFA format MSA file <afp>.
+ *            
+ *            On a normal return, <*ret_type> is set to <eslDNA>,
+ *            <eslRNA>, or <eslAMINO>, and <afp> is reset to its
+ *            original position.
+ *
+ * Args:      afp      - open AFA format MSA file
+ *            ret_type - RETURN: <eslDNA>, <eslRNA>, or <eslAMINO>       
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslENOALPHABET> if alphabet type can't be determined.
+ *            In either case, <afp> is rewound to the position it
+ *            started at.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslESYS> on failures of fread() or other system calls
+ *            
+ * Note:      Essentially identical to <esl_msafile_a2m_GuessAlphabet()>,
+ *            but we provide both versions because design calls for
+ *            modularity/separability of parsers.
+ */
+int
+esl_msafile_afa_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type)
+{
+  int       alphatype     = eslUNKNOWN;
+  esl_pos_t anchor        = -1;
+  int       threshold[3]  = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */
+  int       nsteps        = 3;
+  int       step          = 0;
+  int       nres          = 0;
+  int       x;
+  int64_t   ct[26];
+  char     *p;
+  esl_pos_t n, pos;
+  int       status;
+
+  for (x = 0; x < 26; x++) ct[x] = 0;
+
+  anchor = esl_buffer_GetOffset(afp->bf);
+  if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */
+
+  while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK)
+    {
+      while (n && isspace(*p)) { p++; n--; }
+      if    (!n || *p == '>') continue;
+
+      for (pos = 0; pos < n; pos++)
+	if (isalpha(p[pos])) {
+	  x = toupper(p[pos]) - 'A'; 
+	  ct[x]++;
+	  nres++;
+	}
+
+      /* try to stop early, checking after 500, 5000, and 50000 residues: */
+      if (step < nsteps && nres > threshold[step]) {
+	if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */
+	step++;
+      }
+    }
+  if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */
+  status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */
+
+  /* deliberate flowthrough...*/
+ DONE:
+  esl_buffer_SetOffset(afp->bf, anchor);   /* Rewind to where we were. */
+  esl_buffer_RaiseAnchor(afp->bf, anchor);
+  *ret_type = alphatype;
+  return status;
+
+ ERROR:
+  if (anchor != -1) {
+    esl_buffer_SetOffset(afp->bf, anchor);
+    esl_buffer_RaiseAnchor(afp->bf, anchor);
+  }
+  *ret_type = eslUNKNOWN;
+  return status;
+}
+
+/* Function:  esl_msafile_afa_Read()
+ * Synopsis:  Read in an aligned FASTA format alignment.
+ *
+ * Purpose:   Read an MSA from an open <ESL_MSAFILE> <afp>,
+ *            parsing for aligned FASTA format. Create
+ *            a new MSA, and return a ptr to that alignment
+ *            in <*ret_msa>. Caller is responsible for free'ing 
+ *            this <ESL_MSA>.
+ *
+ * Args:      afp     - open <ESL_MSAFILE>
+ *            ret_msa - RETURN: newly parsed <ESL_MSA>
+ *
+ * Returns:   <eslOK> on success. <*ret_msa> is set to the newly
+ *            allocated MSA, and <afp> is at EOF.
+ *
+ *            <eslEOF> if no (more) alignment data are found in
+ *            <afp>;, and <afp> is returned at EOF. 
+ *
+ *            <eslEFORMAT> on a parse error. <*ret_msa> is set to
+ *            <NULL>. <afp> contains information sufficient for
+ *            constructing useful diagnostic output: 
+ *            | <afp->errmsg>       | user-directed error message     |
+ *            | <afp->linenumber>   | line # where error was detected |
+ *            | <afp->line>         | offending line (not NUL-term)   |
+ *            | <afp->n>            | length of offending line        |
+ *            | <afp->bf->filename> | name of the file                |
+ *            and <afp> is poised at the start of the following line,
+ *            so (in principle) the caller could try to resume
+ *            parsing.
+ *            
+ * Throws:    <eslEMEM> - an allocation failed.
+ *            <eslESYS> - a system call such as fread() failed
+ *            <eslEINCONCEIVABLE> - "impossible" corruption 
+ *            On these, <*ret_msa> is returned <NULL>, and the state of
+ *            <afp> is undefined.
+ */
+int
+esl_msafile_afa_Read(ESL_MSAFILE *afp, ESL_MSA **ret_msa)
+{
+  ESL_MSA  *msa  = NULL;
+  int       idx  = 0;
+  int64_t   alen = 0;
+  int64_t   this_alen = 0;
+  char     *p, *tok;
+  esl_pos_t n, ntok;
+  int       status;
+
+  ESL_DASSERT1( (afp->format == eslMSAFILE_AFA) );
+
+  afp->errmsg[0] = '\0';	                                  /* Blank the error message. */
+
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc   &&  (msa = esl_msa_CreateDigital(afp->abc, 16, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+#endif
+  if (! afp->abc &&  (msa = esl_msa_Create(                 16, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+  
+  /* skip leading blank lines in file */
+  while ( (status = esl_msafile_GetLine(afp, &p, &n)) == eslOK && esl_memspn(afp->line, afp->n, " \t") == afp->n) ;
+  if      (status != eslOK)  goto ERROR; /* includes normal EOF */
+
+  /* tolerate sloppy space at start of line */
+  while (n && isspace(*p)) { p++; n--; }    
+  if (*p != '>') ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected aligned FASTA name/desc line starting with >");    
+ 
+  do {
+    if (n <= 1 || *p != '>' ) ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected aligned FASTA name/desc line starting with >");    
+    p++; n--;			/* advance past > */
+
+    if ( (status = esl_memtok(&p, &n, " \t", &tok, &ntok)) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "no name found for aligned FASTA record");
+    if (idx >= msa->sqalloc && (status = esl_msa_Expand(msa))    != eslOK) goto ERROR;
+
+    if (     (status = esl_msa_SetSeqName       (msa, idx, tok, ntok)) != eslOK) goto ERROR;
+    if (n && (status = esl_msa_SetSeqDescription(msa, idx, p,   n))    != eslOK) goto ERROR;
+
+    /* The code below will do a realloc on every line. Possible optimization: once you know
+     * alen (from first sequence), allocate subsequent seqs once, use noalloc versions of
+     * esl_strmapcat/esl_abc_dsqcat(). Requires implementing protection against overrun, if
+     * input is bad and a sequence is too long. Could gain ~25% or so that way (quickie
+     * test on PF00005 Full)
+     */
+    this_alen = 0;
+    while ((status = esl_msafile_GetLine(afp, &p, &n)) == eslOK)
+    {
+      while (n && isspace(*p)) { p++; n--; } /* tolerate and skip leading whitespace on line */
+      if (n  == 0)   continue;	       /* tolerate and skip blank lines */
+      if (*p == '>') break;
+
+#ifdef eslAUGMENT_ALPHABET
+      if (msa->abc)   { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[idx]),   &this_alen, p, n); }
+#endif
+      if (! msa->abc) { status = esl_strmapcat (afp->inmap, &(msa->aseq[idx]), &this_alen, p, n); }
+      if (status == eslEINVAL)   ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters");
+      else if (status != eslOK)  goto ERROR;
+    }
+    if (this_alen == 0)            ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence %s has alen %" PRId64 , msa->sqname[idx], this_alen);
+    if (alen && alen != this_alen) ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence %s has alen %" PRId64 "; expected %" PRId64, msa->sqname[idx], this_alen, alen);
+
+    alen = this_alen;
+    idx++;
+  } while (status == eslOK);	/* normally ends on eslEOF. */
+
+  msa->nseq = idx;
+  msa->alen = alen;
+  if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR;
+
+  *ret_msa = msa;
+  return eslOK;
+
+ ERROR:
+  if (msa) esl_msa_Destroy(msa);
+  *ret_msa = NULL;
+  return status;
+
+}
+
+/* Function:  esl_msafile_afa_Write()
+ * Synopsis:  Write an aligned FASTA format alignment file to a stream.
+ *
+ * Purpose:   Write alignment <msa> in aligned FASTA format to a stream
+ *            <fp>.
+ * 
+ *            If <msa> is in text mode, residues and gaps are written
+ *            exactly as they appear in the data structure. If <msa>
+ *            is digital, residues are in uppercase and all gaps are
+ *            dots (.). Dots are preferred to dashes because it 
+ *            minimizes confusion with A2M format.
+ *
+ * Args:      fp  - open stream to write to
+ *            msa - MSA to write
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write failure, such as filled disk.
+ */
+int
+esl_msafile_afa_Write(FILE *fp, const ESL_MSA *msa)
+{
+  int     i;
+  int64_t pos;
+  char    buf[61];
+  int     acpl;       /* actual number of characters per line */
+  
+  for (i = 0; i < msa->nseq; i++)
+    {
+      if (fprintf(fp, ">%s", msa->sqname[i])                                                      < 0) ESL_EXCEPTION_SYS(eslEWRITE, "afa msa file write failed");
+      if (msa->sqacc  != NULL && msa->sqacc[i]  != NULL) { if (fprintf(fp, " %s", msa->sqacc[i])  < 0) ESL_EXCEPTION_SYS(eslEWRITE, "afa msa file write failed"); }
+      if (msa->sqdesc != NULL && msa->sqdesc[i] != NULL) { if (fprintf(fp, " %s", msa->sqdesc[i]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "afa msa file write failed"); }
+      if (fputc('\n', fp)                                                                         < 0) ESL_EXCEPTION_SYS(eslEWRITE, "afa msa file write failed");
+
+      pos = 0;
+      while (pos < msa->alen)
+	{
+	  acpl = (msa->alen - pos > 60)? 60 : msa->alen - pos;
+#ifdef eslAUGMENT_ALPHABET
+	  if (msa->abc)   esl_abc_TextizeN(msa->abc, msa->ax[i] + pos + 1, acpl, buf);
+#endif
+	  if (! msa->abc) strncpy(buf, msa->aseq[i] + pos, acpl);
+
+	  buf[acpl] = '\0';
+	  if (fprintf(fp, "%s\n", buf) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "afa msa file write failed");
+	  pos += 60;
+	}
+    } 
+  return eslOK;
+}
+
+/*****************************************************************
+ * 2. Unit tests.
+ *****************************************************************/
+#ifdef eslMSAFILE_AFA_TESTDRIVE
+/* a standard globin example, dusted with evil:
+ *  1. \r\n DOS line terminators;
+ *  2. extra blank lines and whitespace
+ *  3. unusual but legal residues
+ */
+static void
+utest_write_good1(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("   \r\n", ofp);
+  fputs(">   MYG_PHYCA   description   \r\n", ofp);
+  fputs("--------V-LSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKT\r\n", ofp);
+  fputs("EAEMKASEDLKKHGVTVLTALGAILKKKGH---HEABJZOUX*SHATKHKIPIKYLEFIS  \r\n", ofp);
+  fputs("EAIIHVLHSRHPGDFGADAQGAMNKALELFRKDIAAKYKELGYQG\r\n", ofp);
+  fputs("   \r\n", ofp);
+  fputs(">GLB5_PETMA\r\n", ofp);
+  fputs("PIVDTGSVAPLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT\r\n", ofp);
+  fputs("ADQLKKSADVRWHAERIINAVNDAVASMDDTEKMSMKLRDLSGKHAKSFQVDPQYFKVLA\r\n", ofp);
+  fputs("AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------\r\n", ofp);
+  fputs(">HBB_HUMAN\r\n", ofp);
+  fputs("--------VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLST\r\n", ofp);
+  fputs("PDAVMGNPKVKAHGKKVLGAFSDGLAHLDN---LKGTFATLSELHCDKLHVDPENFRLLG\r\n", ofp);
+  fputs("NVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH------\r\n", ofp);
+  fputs(">HBA_HUMAN\r\n", ofp);
+  fputs("--------V-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-----\r\n", ofp);
+  fputs("-DLSHGSAQVKGHGKKVADALTNAVAHVDD---MPNALSALSDLHAHKLRVDPVNFKLLS\r\n", ofp);
+  fputs("HCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR------\r\n", ofp);
+  fputs("   \r\n", ofp);
+
+  *ret_alphatype = eslAMINO;
+  *ret_nseq      = 4;
+  *ret_alen      = 165;
+}
+
+
+static void
+utest_goodfile(char *filename, int testnumber, int expected_alphatype, int expected_nseq, int expected_alen)
+{
+  ESL_ALPHABET        *abc          = NULL;
+  ESL_MSAFILE         *afp          = NULL;
+  ESL_MSA             *msa1         = NULL;
+  ESL_MSA             *msa2         = NULL;
+  char                 tmpfile1[32] = "esltmpXXXXXX";
+  char                 tmpfile2[32] = "esltmpXXXXXX";
+  FILE                *ofp          = NULL;
+  int                  status;
+
+  /* guessing both the format and the alphabet should work: this is a digital open */
+  if ( (status = esl_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("afa good file test %d failed: digital open",           testnumber);  
+  if (afp->format != eslMSAFILE_AFA)                                                               esl_fatal("afa good file test %d failed: format autodetection",   testnumber);
+  if (abc->type   != expected_alphatype)                                                           esl_fatal("afa good file test %d failed: alphabet autodetection", testnumber);
+
+  /* This is a digital read, using <abc>. */
+  if ( (status = esl_msafile_afa_Read(afp, &msa1))   != eslOK)     esl_fatal("afa good file test %d failed: msa read, digital", testnumber);  
+  if (msa1->nseq != expected_nseq || msa1->alen != expected_alen)  esl_fatal("afa good file test %d failed: nseq/alen",         testnumber);
+  if (esl_msa_Validate(msa1, NULL) != eslOK)                       esl_fatal("afa good file test %d failed: msa invalid",       testnumber);
+
+  esl_msafile_Close(afp);  
+
+  /* write it back out to a new tmpfile (digital write) */
+  if ( (status = esl_tmpfile_named(tmpfile1, &ofp)) != eslOK) esl_fatal("afa good file test %d failed: tmpfile creation",   testnumber);
+  if ( (status = esl_msafile_afa_Write(ofp, msa1))  != eslOK) esl_fatal("afa good file test %d failed: msa write, digital", testnumber);
+  fclose(ofp);
+
+  /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */
+  if ( (status = esl_msafile_Open(NULL, tmpfile1, NULL, eslMSAFILE_AFA, NULL, &afp)) != eslOK) esl_fatal("afa good file test %d failed: text mode open", testnumber);  
+  if ( (status = esl_msafile_afa_Read(afp, &msa2))                                   != eslOK) esl_fatal("afa good file test %d failed: msa read, text", testnumber);  
+  if (msa2->nseq != expected_nseq || msa2->alen != expected_alen)                              esl_fatal("afa good file test %d failed: nseq/alen",      testnumber);
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                   esl_fatal("afa good file test %d failed: msa invalid",    testnumber);
+  esl_msafile_Close(afp);
+  
+  /* write it back out to a new tmpfile (text write) */
+  if ( (status = esl_tmpfile_named(tmpfile2, &ofp)) != eslOK) esl_fatal("afa good file test %d failed: tmpfile creation", testnumber);
+  if ( (status = esl_msafile_afa_Write(ofp, msa2))  != eslOK) esl_fatal("afa good file test %d failed: msa write, text",  testnumber);
+  fclose(ofp);
+  esl_msa_Destroy(msa2);
+
+  /* open and read it in digital mode */
+  if ( (status = esl_msafile_Open(&abc, tmpfile1, NULL, eslMSAFILE_AFA, NULL, &afp)) != eslOK) esl_fatal("afa good file test %d failed: 2nd digital mode open", testnumber);  
+  if ( (status = esl_msafile_afa_Read(afp, &msa2))                                   != eslOK) esl_fatal("afa good file test %d failed: 2nd digital msa read",  testnumber);  
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                   esl_fatal("afa good file test %d failed: msa invalid",           testnumber);
+  esl_msafile_Close(afp);
+
+  /* this msa <msa2> should be identical to <msa1> */
+  if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("afa good file test %d failed: msa compare", testnumber);  
+
+  remove(tmpfile1);
+  remove(tmpfile2);
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_alphabet_Destroy(abc);
+}
+
+
+static void
+write_test_msas(FILE *ofp1, FILE *ofp2)
+{
+  fprintf(ofp1, "\n");
+  fprintf(ofp1, ">seq1    description line for seq1\n");
+  fprintf(ofp1, "..acdefghiklmnpqrstvwy\n");
+  fprintf(ofp1, "ACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp1, "\n");
+  fprintf(ofp1, ">seq2 description line for seq2\n");
+  fprintf(ofp1, "..acdefghiklmnpqrstv--\n");
+  fprintf(ofp1, "ACDEFGHIKLMNPQRSTVWYyy\n");
+  fprintf(ofp1, "  >seq3\n");
+  fprintf(ofp1, "aaacdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp1, ">seq4\n");
+  fprintf(ofp1, "..acdefghiklm\n");
+  fprintf(ofp1, "npqrstvwyACDE\n");
+  fprintf(ofp1, "FGHIKLMNPQRSTVWY..\n");
+
+  fprintf(ofp2, "# STOCKHOLM 1.0\n");
+  fprintf(ofp2, "\n");
+  fprintf(ofp2, "#=GS seq1 DE description line for seq1\n");
+  fprintf(ofp2, "#=GS seq2 DE description line for seq2\n");
+  fprintf(ofp2, "\n");
+  fprintf(ofp2, "seq1    ..acdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "seq2    ..acdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWYyy\n");
+  fprintf(ofp2, "seq3    aaacdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "seq4    ..acdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "//\n");
+}
+
+static void
+read_test_msas_digital(char *afafile, char *stkfile)
+{
+  char msg[]         = "aligned FASTA msa digital read unit test failed";
+  ESL_ALPHABET *abc  = NULL;
+  ESL_MSAFILE  *afp1 = NULL;
+  ESL_MSAFILE  *afp2 = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  FILE         *afafp, *stkfp;
+  char          afafile2[32] = "esltmpafa2XXXXXX";
+  char          stkfile2[32] = "esltmpstk2XXXXXX";
+
+  if ( esl_msafile_Open(&abc, afafile, NULL, eslMSAFILE_AFA,       NULL, &afp1) != eslOK)  esl_fatal(msg);
+  if ( !abc || abc->type != eslAMINO)                                                      esl_fatal(msg);
+  if ( esl_msafile_Open(&abc, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_afa_Read      (afp1, &msa1)                                  != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa2)                                  != eslOK)  esl_fatal(msg);
+  if ( esl_msa_Compare(msa1, msa2)                                              != eslOK)  esl_fatal(msg);
+
+  if ( esl_msafile_afa_Read      (afp1, &msa3) != eslEOF) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg);
+
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  /* Now write stk to afa file, and vice versa; then retest */
+  if ( esl_tmpfile_named(afafile2, &afafp)                             != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile2, &stkfp)                             != eslOK) esl_fatal(msg);
+  if ( esl_msafile_afa_Write      (afafp, msa2)                        != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM)  != eslOK) esl_fatal(msg);
+  fclose(afafp);
+  fclose(stkfp);
+  if ( esl_msafile_Open(&abc, afafile2, NULL, eslMSAFILE_AFA,       NULL, &afp1) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Open(&abc, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_afa_Read      (afp1, &msa3)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa4)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msa_Compare(msa3, msa4)                                               != eslOK) esl_fatal(msg);
+
+  remove(afafile2);
+  remove(stkfile2);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+  esl_alphabet_Destroy(abc);
+}
+
+static void
+read_test_msas_text(char *afafile, char *stkfile)
+{
+  char msg[]         = "aligned FASTA msa text-mode read unit test failed";
+  ESL_MSAFILE  *afp1 = NULL;
+  ESL_MSAFILE  *afp2 = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  FILE         *afafp, *stkfp;
+  char          afafile2[32] = "esltmpafa2XXXXXX";
+  char          stkfile2[32] = "esltmpstk2XXXXXX";
+
+  /*                    vvvv-- everything's the same as the digital utest except these NULLs  */
+  if ( esl_msafile_Open(NULL, afafile, NULL, eslMSAFILE_AFA,       NULL, &afp1) != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_Open(NULL, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_afa_Read      (afp1, &msa1)                                  != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa2)                                  != eslOK)  esl_fatal(msg);
+  if ( esl_msa_Compare(msa1, msa2)                                              != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_afa_Read      (afp1, &msa3)                                  != eslEOF) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa3)                                  != eslEOF) esl_fatal(msg);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  if ( esl_tmpfile_named(afafile2, &afafp)                             != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile2, &stkfp)                             != eslOK) esl_fatal(msg);
+  if ( esl_msafile_afa_Write      (afafp, msa2)                        != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM)  != eslOK) esl_fatal(msg);
+  fclose(afafp);
+  fclose(stkfp);
+  if ( esl_msafile_Open(NULL, afafile2, NULL, eslMSAFILE_AFA,       NULL, &afp1) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Open(NULL, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_afa_Read      (afp1, &msa3)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa4)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msa_Compare(msa3, msa4)                                               != eslOK) esl_fatal(msg);
+
+  remove(afafile2);
+  remove(stkfile2);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+}
+#endif /*eslMSAFILE_AFA_TESTDRIVE*/
+/*---------------------- end, unit tests ------------------------*/
+
+
+/*****************************************************************
+ * 3. Test driver.
+ *****************************************************************/
+#ifdef eslMSAFILE_AFA_TESTDRIVE
+/* compile: gcc -g -Wall -I. -L. -o esl_msafile_afa_utest -DeslMSAFILE_AFA_TESTDRIVE esl_msafile_afa.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_afa_utest -DeslMSAFILE_AFA_TESTDRIVE esl_msafile_afa.c -leasel -lm
+ * run:     ./esl_msafile_afa_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_msafile.h"
+#include "esl_msafile_afa.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for AFA MSA format module";
+
+int
+main(int argc, char **argv)
+{
+  char            msg[]        = "aligned FASTA MSA i/o module test driver failed";
+  ESL_GETOPTS    *go           = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  char            afafile[32] = "esltmpafaXXXXXX";
+  char            stkfile[32] = "esltmpstkXXXXXX";
+  FILE           *afafp, *stkfp;
+  int             testnumber;
+  int             ngoodtests  = 1;
+  char            tmpfile[32];
+  FILE           *ofp;
+  int             expected_alphatype;
+  int             expected_nseq;
+  int             expected_alen;
+
+
+  if ( esl_tmpfile_named(afafile, &afafp) != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile, &stkfp) != eslOK) esl_fatal(msg);
+  write_test_msas(afafp, stkfp);
+  fclose(afafp);
+  fclose(stkfp);
+
+  read_test_msas_digital(afafile, stkfile);
+  read_test_msas_text   (afafile, stkfile);
+
+  /* Various "good" files that should be parsed correctly */
+  for (testnumber = 1; testnumber <= ngoodtests; testnumber++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX"); 
+      if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+      switch (testnumber) {
+      case  1:  utest_write_good1 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      }
+      fclose(ofp);
+      utest_goodfile(tmpfile, testnumber, expected_alphatype, expected_nseq, expected_alen);
+      remove(tmpfile);
+    }
+
+  remove(afafile);
+  remove(stkfile);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslMSAFILE_AFA_TESTDRIVE*/
+/*--------------------- end, test driver ------------------------*/
+
+
+
+/*****************************************************************
+ * 4. Examples.
+ *****************************************************************/
+
+#ifdef eslMSAFILE_AFA_EXAMPLE
+/* A full-featured example of reading/writing an MSA in aligned FASTA (AFA) format.
+   gcc -g -Wall -o esl_msafile_afa_example -I. -L. -DeslMSAFILE_afa_EXAMPLE esl_msafile_afa.c -leasel -lm
+   ./esl_msafile_afa_example <msafile>
+ */
+/*::cexcerpt::msafile_afa_example::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_afa.h"
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",            0 },
+  { "-1",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "override autodetection; force AFA format",        0 },
+  { "-q",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "quieter: don't write msa back, just summary",     0 },
+  { "-t",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use text mode: no digital alphabet",              0 },
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is DNA",                    0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is RNA",                    0 },
+  { "--amino",     eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is protein",                0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msafile>";
+static char banner[] = "example of guessing, reading, writing AFA format";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS        *go          = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char               *filename    = esl_opt_GetArg(go, 1);
+  int                 infmt       = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET       *abc         = NULL;
+  ESL_MSAFILE        *afp         = NULL;
+  ESL_MSA            *msa         = NULL;
+  int                 status;
+
+  if      (esl_opt_GetBoolean(go, "-1"))      infmt = eslMSAFILE_AFA;  /* override format autodetection */
+
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); 
+
+  /* Text mode: pass NULL for alphabet.
+   * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed 
+   */
+  if   (esl_opt_GetBoolean(go, "-t"))  status = esl_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp);
+  else                                 status = esl_msafile_Open(&abc, filename, NULL, infmt, NULL, &afp);
+  if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+
+  if ((status = esl_msafile_afa_Read(afp, &msa)) != eslOK)
+    esl_msafile_ReadFailure(afp, status);
+
+  printf("alphabet:       %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)"));
+  printf("# of seqs:      %d\n", msa->nseq);
+  printf("# of cols:      %d\n", (int) msa->alen);
+  printf("\n");
+
+  if (! esl_opt_GetBoolean(go, "-q"))
+    esl_msafile_afa_Write(stdout, msa);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  if (abc) esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+/*::cexcerpt::msafile_afa_example::end::*/
+#endif /*eslMSAFILE_AFA_EXAMPLE*/
+
+#ifdef eslMSAFILE_AFA_EXAMPLE2
+/* A minimal example. Read AFA format MSA, in text mode.
+   gcc -g -Wall -o esl_msafile_afa_example2 -I. -L. -DeslMSAFILE_AFA_EXAMPLE2 esl_msafile_afa.c -leasel -lm
+   ./esl_msafile_afa_example2 <msafile>
+*/
+/*::cexcerpt::msafile_afa_example2::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_afa.h"
+
+int 
+main(int argc, char **argv)
+{
+  char         *filename = argv[1];
+  int           fmt      = eslMSAFILE_AFA;
+  ESL_MSAFILE  *afp      = NULL;
+  ESL_MSA      *msa      = NULL;
+  int           status;
+
+  if ( (status = esl_msafile_Open(NULL, filename, NULL, fmt, NULL, &afp)) != eslOK) esl_msafile_OpenFailure(afp, status);
+  if ( (status = esl_msafile_afa_Read(afp, &msa))                         != eslOK) esl_msafile_ReadFailure(afp, status);
+
+  printf("%6d seqs, %5d columns\n", msa->nseq, (int) msa->alen);
+
+  esl_msafile_afa_Write(stdout, msa);
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  exit(0);
+}
+/*::cexcerpt::msafile_afa_example2::end::*/
+#endif /*eslMSAFILE_AFA_EXAMPLE2*/
+/*--------------------- end of examples -------------------------*/
+
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_afa.h b/esl_msafile_afa.h
new file mode 100644
index 0000000..a8da0f6
--- /dev/null
+++ b/esl_msafile_afa.h
@@ -0,0 +1,18 @@
+/* i/o of multiple sequence alignment files in aligned FASTA format
+ */
+#ifndef eslMSAFILE_AFA_INCLUDED
+#define eslMSAFILE_AFA_INCLUDED
+
+#include "esl_msa.h"
+#include "esl_msafile.h"
+
+extern int esl_msafile_afa_SetInmap     (ESL_MSAFILE *afp);
+extern int esl_msafile_afa_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type);
+extern int esl_msafile_afa_Read         (ESL_MSAFILE *afp, ESL_MSA **ret_msa);
+extern int esl_msafile_afa_Write        (FILE *fp, const ESL_MSA *msa);
+
+#endif /* eslMSAFILE_AFA_INCLUDED */
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_clustal.c b/esl_msafile_clustal.c
new file mode 100644
index 0000000..bc7ebeb
--- /dev/null
+++ b/esl_msafile_clustal.c
@@ -0,0 +1,1075 @@
+/* i/o of multiple sequence alignment files in Clustal-like formats
+ *
+ * Contents:
+ *   1. API for reading/writing Clustal and Clustal-like formats
+ *   2. Internal routines for Clustal formats.
+ *   3. Unit tests.
+ *   4. Test driver.
+ *   5. Example.
+ *   6. Copyright and license information.
+ *   
+ * This module is responsible for i/o of both eslMSAFILE_CLUSTAL and
+ * eslMSAFILE_CLUSTALLIKE alignment formats.
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#include "esl_mem.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_clustal.h"
+
+static int make_text_consensus_line(const ESL_MSA *msa, char **ret_consline);
+#ifdef eslAUGMENT_ALPHABET
+static int make_digital_consensus_line(const ESL_MSA *msa, char **ret_consline);
+#endif
+
+/*****************************************************************
+ *# 1. API for reading/writing Clustal and Clustal-like formats
+ *****************************************************************/
+
+/* Function:  esl_msafile_clustal_SetInmap()
+ * Synopsis:  Configure input map for CLUSTAL, CLUSTALLIKE formats.
+ *
+ * Purpose:   Set the <afp->inmap> for Clustal-like formats. 
+ *
+ *            Text mode accepts any <isgraph()> character. 
+ *            Digital mode enforces the usual Easel alphabets.
+ */
+int
+esl_msafile_clustal_SetInmap(ESL_MSAFILE *afp)
+{
+  int sym;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc)
+    {
+      for (sym = 0; sym < 128; sym++) 
+	afp->inmap[sym] = afp->abc->inmap[sym];
+      afp->inmap[0] = esl_abc_XGetUnknown(afp->abc);
+    }
+#endif
+  if (! afp->abc)
+    {
+      for (sym = 1; sym < 128; sym++) 
+	afp->inmap[sym] = (isgraph(sym) ? sym : eslDSQ_ILLEGAL);
+      afp->inmap[0] = '?';
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_msafile_clustal_GuessAlphabet()
+ * Synopsis:  Guess the alphabet of an open Clustal MSA input.
+ *
+ * Purpose:   Guess the alpbabet of the sequences in open
+ *            Clustal format MSA file <afp>.
+ *            
+ *            On a normal return, <*ret_type> is set to <eslDNA>,
+ *            <eslRNA>, or <eslAMINO>, and <afp> is reset to its
+ *            original position.
+ *
+ * Args:      afp      - open Clustal format MSA file
+ *            ret_type - RETURN: <eslDNA>, <eslRNA>, or <eslAMINO>       
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslENOALPHABET> if alphabet type can't be determined.
+ *            In either case, <afp> is rewound to the position it
+ *            started at.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslESYS> on failures of fread() or other system calls
+ */
+int 
+esl_msafile_clustal_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type)
+{
+  int       alphatype     = eslUNKNOWN;
+  esl_pos_t anchor        = -1;
+  int       threshold[3]  = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */
+  int       nsteps        = 3;
+  int       step          = 0;
+  int       nres          = 0;
+  int       x;
+  int64_t   ct[26];
+  char     *p, *tok;
+  esl_pos_t n,  toklen, pos;
+  int       status;
+
+  for (x = 0; x < 26; x++) ct[x] = 0;
+
+  anchor = esl_buffer_GetOffset(afp->bf);
+  if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */
+
+  /* Ignore the first nonblank line, which says "CLUSTAL W (1.83) multiple sequence alignment" or some such */
+  while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK  && esl_memspn(p, n, " \t") == n) ;
+  if      (status == eslEOF) ESL_XFAIL(eslENOALPHABET, afp->errmsg, "can't determine alphabet: no alignment data found");
+  else if (status != eslOK)  goto ERROR;
+  
+  while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK)
+    {
+      if ((status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK) continue; /* ignore blank lines */
+      /* p now points to the rest of the sequence line, after a name */
+      
+      /* count characters into ct[] array */
+      for (pos = 0; pos < n; pos++)
+	if (isalpha(p[pos])) {
+	  x = toupper(p[pos]) - 'A';
+	  ct[x]++;
+	  nres++; 	  
+	} 
+      /* note that GuessAlphabet() is robust against the optional coord lines
+       * and the annotation lines -- it only counts ascii characters.
+       */
+
+      /* try to stop early, checking after 500, 5000, and 50000 residues: */
+      if (step < nsteps && nres > threshold[step]) {
+	if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */
+	step++;
+      }
+    }
+  if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */
+  status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */
+
+ DONE:
+  esl_buffer_SetOffset(afp->bf, anchor);   /* Rewind to where we were. */
+  esl_buffer_RaiseAnchor(afp->bf, anchor);
+  *ret_type = alphatype;
+  return status;
+
+ ERROR:
+  if (anchor != -1) {
+    esl_buffer_SetOffset(afp->bf, anchor);
+    esl_buffer_RaiseAnchor(afp->bf, anchor);
+  }
+  *ret_type = eslUNKNOWN;
+  return status;
+}
+
+
+/* Function:  esl_msafile_clustal_Read()
+ * Synopsis:  Read in a CLUSTAL or CLUSTALLIKE alignment.
+ *
+ * Purpose:   Read an MSA from an open <ESL_MSAFILE> <afp>, parsing
+ *            for Clustal or Clustal-like format, starting from the 
+ *            current point. (<afp->format> is expected to be
+ *            <eslMSAFILE_CLUSTAL> or <eslMSAFILE_CLUSTALLIKE>.) Create a
+ *            new multiple alignment, and return a ptr to that
+ *            alignment in <*ret_msa>.  Caller is responsible for
+ *            free'ing this <ESL_MSA>.
+ *
+ * Args:      afp     - open <ESL_MSAFILE>
+ *            ret_msa - RETURN: newly parsed <ESL_MSA>
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ *            <eslEOF> if no (more) alignment data are found in
+ *            <afp>, and <afp> is returned at EOF. 
+ *
+ *            <eslEFORMAT> on a parse error. <*ret_msa> is set to
+ *            <NULL>. <afp> contains information sufficient for
+ *            constructing useful diagnostic output: 
+ *            | <afp->errmsg>       | user-directed error message     |
+ *            | <afp->linenumber>   | line # where error was detected |
+ *            | <afp->line>         | offending line (not NUL-term)   |
+ *            | <afp->n>            | length of offending line        |
+ *            | <afp->bf->filename> | name of the file                |
+ *            and <afp> is poised at the start of the following line,
+ *            so (in principle) the caller could try to resume
+ *            parsing.
+ *
+ * Throws:    <eslEMEM> - an allocation failed.
+ *            <eslESYS> - a system call such as fread() failed
+ *            <eslEINCONCEIVABLE> - "impossible" corruption 
+ */
+int
+esl_msafile_clustal_Read(ESL_MSAFILE *afp, ESL_MSA **ret_msa)
+{
+  ESL_MSA  *msa     = NULL;
+  char     *p       = NULL;
+  esl_pos_t n       = 0;
+  char     *tok     = NULL;
+  esl_pos_t ntok    = 0;
+  int       nblocks = 0;
+  int       idx     = 0;
+  int       nseq    = 0;
+  int64_t   alen    = 0;
+  int64_t   cur_alen;
+  esl_pos_t pos;
+  esl_pos_t name_start, name_len;
+  esl_pos_t seq_start, seq_len;
+  esl_pos_t block_seq_start, block_seq_len;
+  int       status;
+
+  ESL_DASSERT1( (afp->format == eslMSAFILE_CLUSTAL || afp->format == eslMSAFILE_CLUSTALLIKE) );
+
+  afp->errmsg[0] = '\0';
+  
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc   &&  (msa = esl_msa_CreateDigital(afp->abc, 16, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+#endif
+  if (! afp->abc &&  (msa = esl_msa_Create(                 16, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+
+  /* skip leading blank lines in file */
+  while ( (status = esl_msafile_GetLine(afp, &p, &n)) == eslOK  && esl_memspn(afp->line, afp->n, " \t") == afp->n) ;
+  if      (status != eslOK)  goto ERROR; /* includes normal EOF */
+    
+  /* That first line says something like: "CLUSTAL W (1.83) multiple sequence alignment" */
+  if (esl_memtok(&p, &n, " \t", &tok, &ntok) != eslOK)                             ESL_XFAIL(eslEFORMAT, afp->errmsg, "missing CLUSTAL header");
+  if (afp->format == eslMSAFILE_CLUSTAL && ! esl_memstrpfx(tok, ntok, "CLUSTAL"))  ESL_XFAIL(eslEFORMAT, afp->errmsg, "missing CLUSTAL header"); 
+  if (! esl_memstrcontains(p, n, "multiple sequence alignment"))                   ESL_XFAIL(eslEFORMAT, afp->errmsg, "missing CLUSTAL header");
+
+  /* skip blank lines again */
+  do {
+    status = esl_msafile_GetLine(afp, &p, &n);
+    if      (status == eslEOF) ESL_XFAIL(eslEFORMAT, afp->errmsg, "no alignment data following header");
+    else if (status != eslOK) goto ERROR;
+  } while (esl_memspn(afp->line, afp->n, " \t") == afp->n); /* idiom for "blank line" */
+
+  /* Read the file a line at a time. */
+  do { 		/* afp->line, afp->n is now the first line of a block... */
+    idx = 0;
+    do {
+      for (pos = 0;     pos < n; pos++) if (! isspace(p[pos])) break;  name_start = pos; 
+      for (pos = pos+1; pos < n; pos++) if (  isspace(p[pos])) break;  name_len   = pos - name_start;
+      for (pos = pos+1; pos < n; pos++) if (! isspace(p[pos])) break;  seq_start  = pos;      
+      if (pos >= n) ESL_XFAIL(eslEFORMAT, afp->errmsg, "invalid alignment line");
+      for (pos = pos+1; pos < n; pos++) if (  isspace(p[pos])) break;  seq_len    = pos - seq_start; /* expect one block; ignore trailing stuff, inc. optional coords */
+
+      if (idx == 0) {
+	block_seq_start = seq_start;
+	block_seq_len   = seq_len;
+      } else {
+	if (seq_start != block_seq_start) ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence start is misaligned");
+	if (seq_len   != block_seq_len)   ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence end is misaligned");
+      }
+
+      /* Store the sequence name. */
+      if (nblocks == 0)	{
+	/* make sure we have room for another sequence */
+	if (idx >= msa->sqalloc &&  (status = esl_msa_Expand(msa))           != eslOK) goto ERROR;
+	if ( (status = esl_msa_SetSeqName(msa, idx, p+name_start, name_len)) != eslOK) goto ERROR;
+	nseq++;
+      } else {
+	if (! esl_memstrcmp(p+name_start, name_len, msa->sqname[idx]))
+	  ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected sequence %s on this line, but saw %.*s", msa->sqname[idx], (int) name_len, p+name_start);
+      }
+
+      /* Append the sequence. */
+      cur_alen = alen;
+#ifdef eslAUGMENT_ALPHABET
+      if (msa->abc)    { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[idx]),   &(cur_alen), p+seq_start, seq_len); }
+#endif
+      if (! msa->abc)  { status = esl_strmapcat (afp->inmap, &(msa->aseq[idx]), &(cur_alen), p+seq_start, seq_len); }
+      if      (status == eslEINVAL)    ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters");
+      else if (status != eslOK)        goto ERROR;
+      if (cur_alen - alen != seq_len) ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected number of seq characters");
+
+      /* get next line. if it's a consensus line, we're done with the block */
+      status = esl_msafile_GetLine(afp, &p, &n);
+      if      (status == eslEOF) ESL_XFAIL(eslEFORMAT, afp->errmsg, "alignment block did not end with consensus line");
+      else if (status != eslOK)  goto ERROR;
+
+      idx++;
+    } while (esl_memspn(afp->line, afp->n, " .:*") < afp->n); /* end loop over a block */
+    
+    if (idx != nseq) ESL_XFAIL(eslEFORMAT, afp->errmsg, "last block didn't contain same # of seqs as earlier blocks");
+
+    /* skip blank lines until we find start of next block, or EOF */
+    do {
+      status = esl_msafile_GetLine(afp, &p, &n);
+      if      (status == eslEOF) break;
+      else if (status != eslOK)  goto ERROR;
+    } while (esl_memspn(p, n, " \t") == n); 
+    
+    alen += block_seq_len;
+    nblocks++;
+  } while (status == eslOK);	/* normal end has status == EOF after last block. */
+
+  msa->nseq = nseq;
+  msa->alen = alen;
+  if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR;
+  *ret_msa = msa;
+  return eslOK;
+
+ ERROR:
+  if (msa) esl_msa_Destroy(msa);
+  *ret_msa = NULL;
+  return status;
+}  
+
+
+/* Function:  esl_msafile_clustal_Write()
+ * Synopsis:  Write a CLUSTAL format alignment file to a stream.
+ *
+ * Purpose:   Write alignment <msa> to output stream <fp>, in
+ *            format <fmt>. If <fmt> is <eslMSAFILE_CLUSTAL>,
+ *            write strict CLUSTAL 2.1 format. If <fmt>
+ *            is <eslMSAFILE_CLUSTALLIKE>, put "EASEL (VERSION)"
+ *            in the header.
+ *            
+ *            The alignment is written in blocks of 60 aligned
+ *            residues at a time.
+ *            
+ *            Constructing the CLUSTAL consensus line properly
+ *            requires knowing the alphabet. If the <msa> is in text
+ *            mode, we don't know the alphabet, so then we use a
+ *            simplified consensus line, with '*' marking completely
+ *            conserved columns, ' ' on everything else. If the <msa>
+ *            is in digital mode and of type <eslAMINO>, then we also
+ *            use Clustal's "strong" and "weak" residue group
+ *            annotations, ':' and '.'.  Strong groups are STA, NEQK,
+ *            NHQK, NDEQ, QHRK, MILV, MILF, HY, and FYW. Weak groups
+ *            are CSA, ATV, SAG, STNK, STPA, SGND, SNDEQK, NDEQHK,
+ *            NEQHRK, FVLIM, and HFY.
+ *            
+ * Args:      fp  - open output stream, writable
+ *            msa - alignment to write      
+ *            fmt - eslMSAFILE_CLUSTAL or eslMSAFILE_CLUSTALLIKE      
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslEWRITE> on any system write error, such as filled disk.
+ */
+int
+esl_msafile_clustal_Write(FILE *fp, const ESL_MSA *msa, int fmt)
+{
+  int       cpl        = 60;
+  int       maxnamelen = 0;
+  int       namelen;
+  char     *consline   = NULL;
+  char     *buf        = NULL;
+  int64_t   apos;
+  int       i;
+  int       status;
+
+  ESL_ALLOC(buf, sizeof(char) * (cpl+1));
+  buf[cpl] = '\0';
+  for (i = 0; i < msa->nseq; i++)
+    {
+      namelen = strlen(msa->sqname[i]);
+      maxnamelen = ESL_MAX(namelen, maxnamelen);
+    }
+
+  /* Make a CLUSTAL-like consensus line */
+#ifdef eslAUGMENT_ALPHABET 
+  //  if (msa->abc &&  (status = make_digital_consensus_line(msa, &consline)) != eslOK) goto ERROR;
+  if (msa->abc &&  (status = make_digital_consensus_line(msa, &consline)) != eslOK) goto ERROR;
+#endif
+  if (! msa->abc && (status = make_text_consensus_line(msa, &consline))   != eslOK) goto ERROR;
+
+  /* The magic header */
+  if      (fmt == eslMSAFILE_CLUSTAL)     { if (fprintf(fp, "CLUSTAL 2.1 multiple sequence alignment\n")               < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "clustal msa write failed");  }
+  else if (fmt == eslMSAFILE_CLUSTALLIKE) { if (fprintf(fp, "EASEL (%s) multiple sequence alignment\n", EASEL_VERSION) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "clustal msa write failed");  }
+
+  /* The alignment */
+  for (apos = 0; apos < msa->alen; apos += cpl)
+    {
+      if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "clustal msa write failed"); 
+      for (i = 0; i < msa->nseq; i++)
+	{
+#ifdef eslAUGMENT_ALPHABET 
+	  if (msa->abc)   esl_abc_TextizeN(msa->abc, msa->ax[i]+apos+1, cpl, buf);
+#endif
+	  if (! msa->abc) strncpy(buf, msa->aseq[i]+apos, cpl);
+	  if (fprintf(fp, "%-*s %s\n", maxnamelen, msa->sqname[i], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "clustal msa write failed"); 
+	}
+      strncpy(buf, consline+apos, cpl);
+      if (fprintf(fp, "%-*s %s\n", maxnamelen, "", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "clustal msa write failed"); 
+    }
+
+  free(buf);
+  free(consline);
+  return eslOK;
+
+ ERROR:
+  if (buf)      free(buf);
+  if (consline) free(consline);
+  return status;
+}
+/*---------------- end, Clustal API -----------------------------*/
+
+
+
+/*****************************************************************
+ * 2. Internal routines for Clustal formats
+ *****************************************************************/
+
+/* Clustal consensus lines. 
+ *    '*' :  100% conserved positions
+ *    ':' :  all residues in column belong to a "strong group" 
+ *    '.' :  all residues in column belong to a "weak group"
+ *    ' ' :  otherwise
+ *    
+ * Gap characters count, and ambiguity codes are interpreted verbatim,
+ * so even a single gap or ambiguity code makes the column a ' '.
+ *
+ * From examining the source code for ClustalW (as it writes its
+ * "self explanatory format", ahem!):
+ *   strong groups = STA, NEQK, NHQK, NDEQ, QHRK, MILV, MILF,
+ *                   HY,  FYW
+ *   weak groups =   CSA, ATV,  SAG,  STNK, STPA, SGND, SNDEQK,
+ *	             NDEQHK, NEQHRK, FVLIM, HFY
+ *    
+ * These groups only apply to protein data, and therefore only to
+ * digital alignments using an <eslAMINO> alphabet.  
+
+ * Calculating the consensus line can be compute-intensive, for large
+ * alignments. A naive implementation (for each column, collect
+ * residue counts, compare to each conservation group) was judged too
+ * slow: 16.2s to write the Pkinase full alignment, compared to 1.5s
+ * to write Stockholm format [SRE:J8/22]. Here we use a slightly less
+ * naive implementation, which collects a bit vector (one bit per
+ * residue) for each column, and traverses the alignment in stride
+ * (sequences, then columns). Writing Clustal format Pkinase now takes
+ * 2.3s, and most of the difference w.r.t. Stockholm is now assignable
+ * to the smaller width (thus greater number of blocks) written for
+ * Clustal (60 cpl vs 200) rather than to consensus construction.
+ * 
+ * An oversophisticated approach could use a finite
+ * automaton to store all groups in one machine, then to use the FA to
+ * process each residue seen in a column; for most columns, we would
+ * quickly reach a rejection state (most columns don't belong to 
+ * a conservation group, especially in large alignments). For a sketch 
+ * of how to construct and use such an automaton, xref SRE:J8/22.
+ * I decided this was probably overkill, and didn't implement it.
+ */
+
+
+/* make_text_consensus_line()
+ * 
+ * Given a text mode <msa>, allocate and create a CLUSTAL-style
+ * consensus line; return it in <*ret_consline>. Caller is responsible
+ * for free'ing this string.
+ * 
+ * In text mode, we don't know the alphabet; in particular, we can't
+ * know if the data are amino acids, so we don't know if it's
+ * appropriate to use the amino acid group codes. So we don't;
+ * in text mode, only '*' and ' ' appear in consensus lines.
+ * 
+ * The consensus line is numbered 0..alen-1, and is NUL-terminated.
+ * 
+ * Returns <eslOK> on success.
+ * No normal failure codes.
+ * Throws <eslEMEM> on allocation error.
+ */
+static int
+make_text_consensus_line(const ESL_MSA *msa, char **ret_consline)
+{
+  char     *consline = NULL;
+  uint32_t *v        = NULL;
+  uint32_t  tmpv, maxv;
+  int       n;
+  int       idx, apos, x;
+  int       status;
+
+  ESL_ALLOC(consline, sizeof(char)     * (msa->alen+1));
+  ESL_ALLOC(v,        sizeof(uint32_t) * (msa->alen));
+  for (apos = 0; apos < msa->alen; apos++)
+    v[apos] = 0;
+
+  for (idx = 0; idx < msa->nseq; idx++)
+    for (apos = 0; apos < msa->alen; apos++)
+      {
+	x = toupper(msa->aseq[idx][apos]) - 'A';
+	if (x >= 0 && x < 26) v[apos] |= (1 <<  x);
+	else                  v[apos] |= (1 << 26);
+      }	
+  maxv = (1 << 26) - 1;
+
+  for (apos = 0; apos < msa->alen; apos++)
+    {
+      for (n = 0, tmpv = v[apos]; tmpv; n++) tmpv &= tmpv-1; /* Kernighan magic: count # of bits set in tmpv */
+      consline[apos] = ((n == 1 && v[apos] < maxv) ? '*' : ' ');
+    }
+  consline[msa->alen] = '\0';
+
+  *ret_consline = consline;
+  free(v);
+  return eslOK;
+
+ ERROR:
+  if (v)        free(v);
+  if (consline) free(consline);
+  *ret_consline = NULL;
+  return status;
+}
+
+
+/* make_digital_consensus_line()
+ * 
+ * Exactly the same as make_text_consensus_line(), except for
+ * digital mode <msa>.
+ */
+#ifdef eslAUGMENT_ALPHABET
+static int
+matches_group_digital(ESL_ALPHABET *abc, uint32_t v, char *group)
+{
+  uint32_t gv  = 0;
+  ESL_DSQ  sym;
+  char    *c;
+
+  for (c = group; *c; c++) {
+    sym = esl_abc_DigitizeSymbol(abc, *c);
+    gv |= (1 << sym);
+  }
+  return ( ((v & gv) == v) ? TRUE : FALSE);
+}
+  
+static int
+make_digital_consensus_line(const ESL_MSA *msa, char **ret_consline)
+{
+  char     *consline = NULL;
+  uint32_t *v        = NULL;
+  uint32_t  tmpv, maxv;
+  int       n;
+  int       idx, apos;
+  int       status;
+
+  /* if this ever becomes a problem, easy enough to make v a uint64_t to get up to Kp<=64 */
+  if (msa->abc->Kp > 32) ESL_EXCEPTION(eslEINVAL, "Clustal format writer cannot handle digital alphabets of Kp>32 residues");
+
+  ESL_ALLOC(v,        sizeof(uint32_t) * (msa->alen+1));
+  ESL_ALLOC(consline, sizeof(char)     * (msa->alen+1));
+  for (apos = 0; apos <= msa->alen; apos++)
+    v[apos] = 0;
+
+  for (idx = 0; idx < msa->nseq; idx++)
+    for (apos = 1; apos <= msa->alen; apos++)
+      v[apos] |= (1 << msa->ax[idx][apos]);
+
+  maxv = (1 << msa->abc->K) - 1; /* maxv: has all canonical residue bits set */
+
+  for (apos = 1; apos <= msa->alen; apos++)
+    {
+      consline[apos-1] = ' ';
+
+      for (n = 0, tmpv = v[apos]; tmpv; n++) tmpv &= tmpv-1; /* Kernighan magic: count # of bits set in tmpv */
+
+      if      (n == 0 || n > 6)  continue;               /* n==0 shouldn't happen; n > 6 means too many different residues seen */
+      else if (v[apos] > maxv)   continue;	         /* gap or ambiguity chars seen; column must be left unannotated */
+      else if (n == 1)           consline[apos-1] = '*'; /* complete conservation of a canonical residue */
+      else if (msa->abc->type == eslAMINO) 
+	{
+	  if      (matches_group_digital(msa->abc, v[apos], "STA"))  consline[apos-1] = ':';
+	  else if (matches_group_digital(msa->abc, v[apos], "NEQK")) consline[apos-1] = ':';
+	  else if (matches_group_digital(msa->abc, v[apos], "NHQK")) consline[apos-1] = ':';
+	  else if (matches_group_digital(msa->abc, v[apos], "NDEQ")) consline[apos-1] = ':';
+	  else if (matches_group_digital(msa->abc, v[apos], "QHRK")) consline[apos-1] = ':';
+	  else if (matches_group_digital(msa->abc, v[apos], "MILV")) consline[apos-1] = ':';
+	  else if (matches_group_digital(msa->abc, v[apos], "MILF")) consline[apos-1] = ':';
+	  else if (matches_group_digital(msa->abc, v[apos], "HY"))   consline[apos-1] = ':';
+	  else if (matches_group_digital(msa->abc, v[apos], "FYW"))  consline[apos-1] = ':';
+
+	  else if (matches_group_digital(msa->abc, v[apos], "CSA"))    consline[apos-1] = '.'; 
+	  else if (matches_group_digital(msa->abc, v[apos], "ATV"))    consline[apos-1] = '.';
+	  else if (matches_group_digital(msa->abc, v[apos], "SAG"))    consline[apos-1] = '.';
+	  else if (matches_group_digital(msa->abc, v[apos], "STNK"))   consline[apos-1] = '.';
+	  else if (matches_group_digital(msa->abc, v[apos], "STPA"))   consline[apos-1] = '.';
+	  else if (matches_group_digital(msa->abc, v[apos], "SGND"))   consline[apos-1] = '.';
+	  else if (matches_group_digital(msa->abc, v[apos], "SNDEQK")) consline[apos-1] = '.';
+	  else if (matches_group_digital(msa->abc, v[apos], "NDEQHK")) consline[apos-1] = '.';
+	  else if (matches_group_digital(msa->abc, v[apos], "NEQHRK")) consline[apos-1] = '.';
+	  else if (matches_group_digital(msa->abc, v[apos], "FVLIM"))  consline[apos-1] = '.';
+	  else if (matches_group_digital(msa->abc, v[apos], "HFY"))    consline[apos-1] = '.';
+	}
+    }
+  consline[apos-1] = '\0';
+
+  *ret_consline = consline;
+  free(v);
+  return eslOK;
+
+ ERROR:
+  if (v)        free(v);
+  if (consline) free(consline);
+  *ret_consline = NULL;
+  return eslOK;
+}
+
+
+#endif /*eslAUGMENT_ALPHABET*/
+/*-------------- end, internal clustal routines -----------------*/
+
+
+/*****************************************************************
+ * 3. Unit tests.
+ *****************************************************************/
+#ifdef eslMSAFILE_CLUSTAL_TESTDRIVE
+
+static void
+utest_write_good1(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("MUSCLE (3.7) multiple sequence alignment\n", ofp);
+  fputs("\n", ofp);
+  fputs("\n", ofp);
+  fputs("MYG_PHYCA       --------V-LSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKT\n", ofp);
+  fputs("GLB5_PETMA      PIVDTGSVAPLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT\n", ofp);
+  fputs("HBB_HUMAN       --------VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLST\n", ofp);
+  fputs("HBA_HUMAN       --------V-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-----\n", ofp);
+  fputs("                        . *:  :.  :   *. *       * : * .::   * :   *  *     \n", ofp);
+  fputs("\n", ofp);
+  fputs("MYG_PHYCA       EAEMKASEDLKKHGVTVLTALGAILKKKGH---HEAELKPLAQSHATKHKIPIKYLEFIS\n", ofp);
+  fputs("GLB5_PETMA      ADQLKKSADVRWHAERIINAVNDAVASMDDTEKMSMKLRDLSGKHAKSFQVDPQYFKVLA\n", ofp);
+  fputs("HBB_HUMAN       PDAVMGNPKVKAHGKKVLGAFSDGLAHLDN---LKGTFATLSELHCDKLHVDPENFRLLG\n", ofp);
+  fputs("HBA_HUMAN       -DLSHGSAQVKGHGKKVADALTNAVAHVDD---MPNALSALSDLHAHKLRVDPVNFKLLS\n", ofp);
+  fputs("                                                                            \n", ofp); /* deliberately made blank */
+  fputs("\n", ofp);
+  fputs("MYG_PHYCA       EAIIHVLHSRHPGDFGADAQGAMNKALELFRKDIAAKYKELGYQG\n", ofp);
+  fputs("GLB5_PETMA      AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------\n", ofp);
+  fputs("HBB_HUMAN       NVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH------\n", ofp);
+  fputs("HBA_HUMAN       HCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR------\n", ofp);
+  fputs("                  :          :  .   .. :* :  .   :   *       \n", ofp);
+  fputs("\n", ofp);
+
+  *ret_format    = eslMSAFILE_CLUSTALLIKE;
+  *ret_alphatype = eslAMINO;
+  *ret_nseq      = 4;
+  *ret_alen      = 165;
+}
+
+static void
+utest_write_good2(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("CLUSTAL W (1.81) multiple sequence alignment\n", ofp);
+  fputs("\n", ofp);
+  fputs("tRNA2           UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGG-AGACCGGGGUUCGACU\n", ofp);
+  fputs("tRNA3           UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCCAGAUCGGGGUUCAAUU\n", ofp);
+  fputs("tRNA5           GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGAGGUCAUCGGUUCGAUU\n", ofp);
+  fputs("tRNA1           GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGAGGUCCUGUGUUCGAUC\n", ofp);
+  fputs("tRNA4           GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUUGGUCCUUAGUUCGAUC\n", ofp);
+  fputs("                       * *   *   *  *           *            *      **** *  \n", ofp);
+  fputs("\n", ofp);
+  fputs("tRNA2           CCCCGUAUCGGAG\n", ofp);
+  fputs("tRNA3           CCCCGUCGCGGAG\n", ofp);
+  fputs("tRNA5           CCGGUUGCGUCCA\n", ofp);
+  fputs("tRNA1           CACAGAAUUCGCA\n", ofp);
+  fputs("tRNA4           CUGAGUGCGAGCU\n", ofp);
+  fputs("                *            \n", ofp);
+
+  *ret_format    = eslMSAFILE_CLUSTAL;
+  *ret_alphatype = eslRNA;
+  *ret_nseq      = 5;
+  *ret_alen      = 73;
+}
+
+/* An example of clustal format with optional sequence coords;
+ * a quickly-taken subset of a larger alignment reported as a bug.
+ */
+static void
+utest_write_good3(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("CLUSTAL 2.1 multiple sequence alignment\n", ofp);
+  fputs("\n", ofp);
+  fputs("gi|85091828|ref|XP_959093.1|        MSDFTSKVKVLRDGQKPEFPSN----ANTLEYAQSLDAQDELRHFRNEFI 46\n", ofp);
+  fputs("gi|70993990|ref|XP_751842.1|        ----MSTNGTLS---KPEFPAN----AASKEYAASLDAADPFAGFREKFI 39\n", ofp);
+  fputs("gi|71001376|ref|XP_755369.1|        ---MGSRLHVQVIHGGPPLPYKDDIRAFGKEYAEQLDAQDPLRRFRDEFI 47\n", ofp);
+  fputs("gi|71744026|ref|XP_803513.1|        -----------------------------------MDRNDPLQVHRDAFN 15\n", ofp);
+  fputs("                                                                                 :  : \n",    ofp);
+  fputs("\n", ofp);
+  fputs("gi|85091828|ref|XP_959093.1|        IPTRASLKKKALDGI--------------IPGTQANGTTTSTDADTPCIY 82\n", ofp);
+  fputs("gi|70993990|ref|XP_751842.1|        IPSKANIASTKLA----------------KPGLSSE----------PCIY 63\n", ofp);
+  fputs("gi|71001376|ref|XP_755369.1|        IPSKKDLKRKTLFPNDGMYSCGHPICFANTSCACVHAAETEETSDEKCIY 97\n", ofp);
+  fputs("gi|71744026|ref|XP_803513.1|        IPKRRDGS--------------------------------------DHVY 27\n", ofp);
+  fputs("                                                                                     *\n",    ofp);
+
+  *ret_format    = eslMSAFILE_CLUSTAL;
+  *ret_alphatype = eslAMINO;
+  *ret_nseq      = 4;
+  *ret_alen      = 100;
+}
+
+
+static void
+utest_goodfile(char *filename, int testnumber, int expected_format, int expected_alphatype, int expected_nseq, int expected_alen)
+{
+  ESL_ALPHABET        *abc          = NULL;
+  ESL_MSAFILE         *afp          = NULL;
+  ESL_MSA             *msa1         = NULL;
+  ESL_MSA             *msa2         = NULL;
+  char                 tmpfile1[32] = "esltmpXXXXXX";
+  char                 tmpfile2[32] = "esltmpXXXXXX";
+  FILE                *ofp          = NULL;
+  int                  status;
+
+  /* guessing both the format and the alphabet should work: this is a digital open */
+  if ( (status = esl_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("clustal good file test %d failed: digital open",           testnumber);  
+  if (afp->format != expected_format)                                                              esl_fatal("clustal good file test %d failed: format autodetection",   testnumber);
+  if (abc->type   != expected_alphatype)                                                           esl_fatal("clustal good file test %d failed: alphabet autodetection", testnumber);
+
+  /* This is a digital read, using <abc>. */
+  if ( (status = esl_msafile_clustal_Read(afp, &msa1))   != eslOK) esl_fatal("clustal good file test %d failed: msa read, digital", testnumber);  
+  if (msa1->nseq != expected_nseq || msa1->alen != expected_alen)  esl_fatal("clustal good file test %d failed: nseq/alen",         testnumber);
+  if (esl_msa_Validate(msa1, NULL) != eslOK)                       esl_fatal("clustal good file test %d failed: msa1 invalid",      testnumber);
+  esl_msafile_Close(afp);  
+
+  /* write it back out to a new tmpfile (digital write) */
+  if ( (status = esl_tmpfile_named(tmpfile1, &ofp))                     != eslOK) esl_fatal("clustal good file test %d failed: tmpfile creation",   testnumber);
+  if ( (status = esl_msafile_clustal_Write(ofp, msa1, expected_format)) != eslOK) esl_fatal("clustal good file test %d failed: msa write, digital", testnumber);
+  fclose(ofp);
+
+  /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */
+  if ( (status = esl_msafile_Open(NULL, tmpfile1, NULL, expected_format, NULL, &afp)) != eslOK) esl_fatal("clustal good file test %d failed: text mode open", testnumber);  
+  if ( (status = esl_msafile_clustal_Read(afp, &msa2))                                != eslOK) esl_fatal("clustal good file test %d failed: msa read, text", testnumber);  
+  if (msa2->nseq != expected_nseq || msa2->alen != expected_alen)                               esl_fatal("clustal good file test %d failed: nseq/alen",      testnumber);
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                    esl_fatal("clustal good file test %d failed: msa2 invalid",   testnumber);
+  esl_msafile_Close(afp);
+  
+  /* write it back out to a new tmpfile (text write) */
+  if ( (status = esl_tmpfile_named(tmpfile2, &ofp))                     != eslOK) esl_fatal("clustal good file test %d failed: tmpfile creation", testnumber);
+  if ( (status = esl_msafile_clustal_Write(ofp, msa2, expected_format)) != eslOK) esl_fatal("clustal good file test %d failed: msa write, text",  testnumber);
+  fclose(ofp);
+  esl_msa_Destroy(msa2);
+
+  /* open and read it in digital mode */
+  if ( (status = esl_msafile_Open(&abc, tmpfile1, NULL, expected_format, NULL, &afp)) != eslOK) esl_fatal("clustal good file test %d failed: 2nd digital mode open", testnumber);  
+  if ( (status = esl_msafile_clustal_Read(afp, &msa2))                                != eslOK) esl_fatal("clustal good file test %d failed: 2nd digital msa read",  testnumber);  
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                    esl_fatal("clustal good file test %d failed: msa2 invalid",          testnumber);
+  esl_msafile_Close(afp);
+
+  /* this msa <msa2> should be identical to <msa1> */
+  if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("clustal good file test %d failed: msa compare", testnumber);  
+
+  remove(tmpfile1);
+  remove(tmpfile2);
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_alphabet_Destroy(abc);
+}
+
+static void
+write_test_msas(FILE *ofp1, FILE *ofp2)
+{
+  fprintf(ofp1, "EASEL (X.x) multiple sequence alignment\n");
+  fprintf(ofp1, "\n");
+  fprintf(ofp1, "seq1 ..acdefghiklmnpqrstvwy\n");
+  fprintf(ofp1, "seq2 ..acdefghiklmnpqrstv--\n");
+  fprintf(ofp1, "seq3 aaacdefghiklmnpqrstv--\n");
+  fprintf(ofp1, "seq4 ..acdefghiklmnpqrstvwy\n");
+  fprintf(ofp1, "       ******************  \n");
+  fprintf(ofp1, "\n");
+  fprintf(ofp1, "seq1 ACDEFGHIKLMNPQRSTVWY\n");
+  fprintf(ofp1, "seq2 ACDEFGHIKLMNPQRSTVWY\n");
+  fprintf(ofp1, "seq3 ACDEFGHIKLMNPQRSTVWY\n");
+  fprintf(ofp1, "seq4 ACDEFGHIKLMNPQRSTVWY\n");
+  fprintf(ofp1, "     ********************\n");
+  fprintf(ofp1, "\n");
+  fprintf(ofp1, "seq1 ..\n");
+  fprintf(ofp1, "seq2 YY\n");
+  fprintf(ofp1, "seq3 ..\n");
+  fprintf(ofp1, "seq4 ..\n");
+  fprintf(ofp1, "\n");
+
+  fprintf(ofp2, "# STOCKHOLM 1.0\n");
+  fprintf(ofp2, "\n");
+  fprintf(ofp2, "seq1    ..acdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "seq2    ..acdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWYYY\n");
+  fprintf(ofp2, "seq3    aaacdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "seq4    ..acdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "//\n");
+}
+
+static void
+read_test_msas_digital(char *alnfile, char *stkfile)
+{
+  char msg[]         = "CLUSTAL msa digital read unit test failed";
+  ESL_ALPHABET *abc  = NULL;
+  ESL_MSAFILE  *afp1 = NULL;
+  ESL_MSAFILE  *afp2 = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  FILE         *alnfp, *stkfp;
+  char          alnfile2[32] = "esltmpaln2XXXXXX";
+  char          stkfile2[32] = "esltmpstk2XXXXXX";
+
+  if ( esl_msafile_Open(&abc, alnfile, NULL, eslMSAFILE_CLUSTALLIKE, NULL, &afp1) != eslOK)  esl_fatal(msg);
+  if ( !abc || abc->type != eslAMINO)                                                        esl_fatal(msg);
+  if ( esl_msafile_Open(&abc, stkfile, NULL, eslMSAFILE_STOCKHOLM,   NULL, &afp2) != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_clustal_Read  (afp1, &msa1)                                    != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa2)                                    != eslOK)  esl_fatal(msg);
+  if ( esl_msa_Compare(msa1, msa2)                                                != eslOK)  esl_fatal(msg);
+  
+  if ( esl_msafile_clustal_Read  (afp1, &msa3) != eslEOF) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg);
+
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  /* Now write stk to clustal file, and vice versa; then retest */
+  if ( esl_tmpfile_named(alnfile2, &alnfp)                                  != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile2, &stkfp)                                  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_clustal_Write  (alnfp, msa2, eslMSAFILE_CLUSTAL)         != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM)       != eslOK) esl_fatal(msg);
+  fclose(alnfp);
+  fclose(stkfp);
+  if ( esl_msafile_Open(&abc, alnfile2, NULL, eslMSAFILE_CLUSTAL,   NULL, &afp1) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Open(&abc, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_clustal_Read  (afp1, &msa3)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa4)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msa_Compare(msa3, msa4)                                               != eslOK) esl_fatal(msg);
+
+  remove(alnfile2);
+  remove(stkfile2);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+  esl_alphabet_Destroy(abc);
+}
+
+static void
+read_test_msas_text(char *alnfile, char *stkfile)
+{
+  char msg[]         = "CLUSTAL msa text-mode read unit test failed";
+  ESL_MSAFILE  *afp1 = NULL;
+  ESL_MSAFILE  *afp2 = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  FILE         *alnfp, *stkfp;
+  char          alnfile2[32] = "esltmpaln2XXXXXX";
+  char          stkfile2[32] = "esltmpstk2XXXXXX";
+
+  /*                    vvvv-- everything's the same as the digital utest except these NULLs  */
+  if ( esl_msafile_Open(NULL, alnfile, NULL, eslMSAFILE_CLUSTALLIKE, NULL, &afp1) != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_Open(NULL, stkfile, NULL, eslMSAFILE_STOCKHOLM,   NULL, &afp2) != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_clustal_Read  (afp1, &msa1)                                    != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa2)                                    != eslOK)  esl_fatal(msg);
+  if ( esl_msa_Compare(msa1, msa2)                                                != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_clustal_Read  (afp1, &msa3)                                    != eslEOF) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa3)                                    != eslEOF) esl_fatal(msg);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  if ( esl_tmpfile_named(alnfile2, &alnfp)                                   != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile2, &stkfp)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_clustal_Write  (alnfp, msa2, eslMSAFILE_CLUSTAL)          != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM)        != eslOK) esl_fatal(msg);
+  fclose(alnfp);
+  fclose(stkfp);
+  if ( esl_msafile_Open(NULL, alnfile2, NULL, eslMSAFILE_CLUSTAL,   NULL, &afp1)  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Open(NULL, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2)  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_clustal_Read  (afp1, &msa3)                                    != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa4)                                    != eslOK) esl_fatal(msg);
+  if ( esl_msa_Compare(msa3, msa4)                                                != eslOK) esl_fatal(msg);
+
+  remove(alnfile2);
+  remove(stkfile2);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+}
+#endif /*eslMSAFILE_CLUSTAL_TESTDRIVE*/
+/*---------------------- end, unit tests ------------------------*/
+
+
+/*****************************************************************
+ * 4. Test driver.
+ *****************************************************************/
+#ifdef eslMSAFILE_CLUSTAL_TESTDRIVE
+/* compile: gcc -g -Wall -I. -L. -o esl_msafile_clustal_utest -DeslMSAFILE_CLUSTAL_TESTDRIVE esl_msafile_clustal.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_clustal_utest -DeslMSAFILE_CLUSTAL_TESTDRIVE esl_msafile_clustal.c -leasel -lm
+ * run:     ./esl_msafile_clustal_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_msafile.h"
+#include "esl_msafile_clustal.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for CLUSTAL MSA format module";
+
+int
+main(int argc, char **argv)
+{
+  char            msg[]        = "CLUSTAL MSA i/o module test driver failed";
+  ESL_GETOPTS    *go           = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  char            alnfile[32] = "esltmpalnXXXXXX";
+  char            stkfile[32] = "esltmpstkXXXXXX";
+  FILE           *alnfp, *stkfp;
+  int             testnumber;
+  int             ngoodtests = 3;
+  char            tmpfile[32];
+  FILE           *ofp;
+  int             expected_format;
+  int             expected_alphatype;
+  int             expected_nseq;
+  int             expected_alen;
+
+  if ( esl_tmpfile_named(alnfile, &alnfp) != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile, &stkfp) != eslOK) esl_fatal(msg);
+  write_test_msas(alnfp, stkfp);
+  fclose(alnfp);
+  fclose(stkfp);
+
+  read_test_msas_digital(alnfile, stkfile);
+  read_test_msas_text   (alnfile, stkfile);
+
+  /* Various "good" files that should be parsed correctly */
+  for (testnumber = 1; testnumber <= ngoodtests; testnumber++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX"); 
+      if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+      switch (testnumber) {
+      case  1:  utest_write_good1 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  2:  utest_write_good2 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  3:  utest_write_good3 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      }
+      fclose(ofp);
+      utest_goodfile(tmpfile, testnumber, expected_format, expected_alphatype, expected_nseq, expected_alen);
+      remove(tmpfile);
+    }
+
+  remove(alnfile);
+  remove(stkfile);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslMSAFILE_CLUSTAL_TESTDRIVE*/
+/*--------------------- end, test driver ------------------------*/
+
+
+/*****************************************************************
+ * 5. Examples.
+ *****************************************************************/
+
+
+#ifdef eslMSAFILE_CLUSTAL_EXAMPLE
+/* A full-featured example of reading/writing an MSA in Clustal format(s).
+   gcc -g -Wall -o esl_msafile_clustal_example -I. -L. -DeslMSAFILE_CLUSTAL_EXAMPLE esl_msafile_clustal.c -leasel -lm
+   ./esl_msafile_clustal_example <msafile>
+ */
+/*::cexcerpt::msafile_clustal_example::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_clustal.h"
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",        0 },
+  { "-1",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "no autodetection; use CLUSTAL format",        0 },
+  { "-2",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "no autodetection; use CLUSTALLIKE format",    0 },
+  { "-q",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "quieter: don't write msa back, just summary", 0 },
+  { "-t",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use text mode: no digital alphabet",          0 },
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is DNA",                0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is RNA",                0 },
+  { "--amino",     eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is protein",            0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msafile>";
+static char banner[] = "example of guessing, reading, writing Clustal formats";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS        *go          = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char               *filename    = esl_opt_GetArg(go, 1);
+  int                 infmt       = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET       *abc         = NULL;
+  ESL_MSAFILE        *afp         = NULL;
+  ESL_MSA            *msa         = NULL;
+  int                 status;
+
+  if      (esl_opt_GetBoolean(go, "-1"))      infmt = eslMSAFILE_CLUSTAL;
+  else if (esl_opt_GetBoolean(go, "-2"))      infmt = eslMSAFILE_CLUSTALLIKE;
+
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); 
+
+  /* Text mode: pass NULL for alphabet.
+   * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed 
+   */
+  if   (esl_opt_GetBoolean(go, "-t"))  status = esl_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp);
+  else                                 status = esl_msafile_Open(&abc, filename, NULL, infmt, NULL, &afp);
+  if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+
+  if ( (status = esl_msafile_clustal_Read(afp, &msa)) != eslOK)
+    esl_msafile_ReadFailure(afp, status);
+
+  printf("format variant: %s\n", esl_msafile_DecodeFormat(afp->format));
+  printf("alphabet:       %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)"));
+  printf("# of seqs:      %d\n", msa->nseq);
+  printf("# of cols:      %d\n", (int) msa->alen);
+  printf("\n");
+
+  if (! esl_opt_GetBoolean(go, "-q"))
+    esl_msafile_clustal_Write(stdout, msa, eslMSAFILE_CLUSTAL);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  if (abc) esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+/*::cexcerpt::msafile_clustal_example::end::*/
+#endif /*eslMSAFILE_CLUSTAL_EXAMPLE*/
+
+#ifdef eslMSAFILE_CLUSTAL_EXAMPLE2
+/* A minimal example. Read Clustal MSA, in text mode.
+   gcc -g -Wall -o esl_msafile_clustal_example2 -I. -L. -DeslMSAFILE_CLUSTAL_EXAMPLE2 esl_msafile_clustal.c -leasel -lm
+   ./esl_msafile_clustal_example2 <msafile>
+ */
+
+/*::cexcerpt::msafile_clustal_example2::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_clustal.h"
+
+int 
+main(int argc, char **argv)
+{
+  char         *filename = argv[1];
+  int           fmt      = eslMSAFILE_CLUSTAL; /* or eslMSAFILE_CLUSTALLIKE */
+  ESL_MSAFILE  *afp      = NULL;
+  ESL_MSA      *msa      = NULL;
+  int          status;
+
+  if ( (status = esl_msafile_Open(NULL, filename, NULL, fmt, NULL, &afp)) != eslOK)  esl_msafile_OpenFailure(afp, status);
+  if ( (status = esl_msafile_clustal_Read(afp, &msa))                     != eslOK)  esl_msafile_ReadFailure(afp, status);
+
+  printf("%6d seqs, %5d columns\n", msa->nseq, (int) msa->alen);
+
+  esl_msafile_clustal_Write(stdout, msa, eslMSAFILE_CLUSTAL);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  exit(0);
+}
+/*::cexcerpt::msafile_clustal_example2::end::*/
+#endif /*eslMSAFILE_CLUSTAL_EXAMPLE2*/
+/*--------------------- end of example --------------------------*/
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_clustal.h b/esl_msafile_clustal.h
new file mode 100644
index 0000000..6dc5c99
--- /dev/null
+++ b/esl_msafile_clustal.h
@@ -0,0 +1,18 @@
+/* i/o of multiple sequence alignment files in Clustal-like formats
+ */
+#ifndef eslMSAFILE_CLUSTAL_INCLUDED
+#define eslMSAFILE_CLUSTAL_INCLUDED
+
+#include "esl_msa.h"
+#include "esl_msafile.h"
+
+extern int esl_msafile_clustal_SetInmap     (ESL_MSAFILE *afp);
+extern int esl_msafile_clustal_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type);
+extern int esl_msafile_clustal_Read         (ESL_MSAFILE *afp, ESL_MSA **ret_msa);
+extern int esl_msafile_clustal_Write        (FILE *fp,    const ESL_MSA *msa, int fmt);
+
+#endif /* eslMSAFILE_CLUSTAL_INCLUDED */
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_phylip.c b/esl_msafile_phylip.c
new file mode 100644
index 0000000..fe16d62
--- /dev/null
+++ b/esl_msafile_phylip.c
@@ -0,0 +1,1914 @@
+/* I/O of multiple sequence alignment files in PHYLIP format(s)
+ * 
+ * Contents:
+ *   1. API for reading/writing PHYLIP format alignment files
+ *   2. I/O of the interleaved variant of the format
+ *   3. I/O of the sequential variant of the format
+ *   4. Autodetection of format and its variants
+ *   5. Rectifying valid input/output symbols in names, seqs
+ *   6. Unit tests
+ *   7. Test driver
+ *   8. Example
+ *   9. Copyright and license information.
+ *
+ * See: http://evolution.genetics.washington.edu/phylip/doc/sequence.html
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#include "esl_mem.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_phylip.h"
+
+#define eslMSAFILE_PHYLIP_LEGALSYMS  "-ABCDEFGHIJKLMNOPQRSTUVWZYX*?."
+
+static int phylip_interleaved_Read(ESL_MSAFILE *afp, ESL_MSA *msa, int nseq, int32_t alen_stated);
+static int phylip_interleaved_Write(FILE *fp, const ESL_MSA *msa, ESL_MSAFILE_FMTDATA *opt_fmtd);
+
+static int phylip_sequential_Read(ESL_MSAFILE *afp, ESL_MSA *msa, int nseq, int32_t alen_stated);
+static int phylip_sequential_Write(FILE *fp, const ESL_MSA *msa, ESL_MSAFILE_FMTDATA *opt_fmtd);
+
+static int phylip_check_interleaved       (ESL_BUFFER *bf, int *ret_nblocks, int *ret_namewidth);
+static int phylip_check_sequential_known  (ESL_BUFFER *bf, int namewidth);
+static int phylip_check_sequential_unknown(ESL_BUFFER *bf, int *ret_namewidth);
+static int phylip_parse_header(ESL_BUFFER *bf, int32_t *ret_nseq, int32_t *ret_alen, char **ret_p, esl_pos_t *ret_n);
+static int phylip_collate_colcodes(char *p, esl_pos_t n, char *colcodes, int ncols);
+static int phylip_deduce_namewidth(char *colcodes0, int ncols0, int alen, int nres2, int *ret_namewidth);
+
+static int phylip_rectify_input_name(char *namebuf, char *p, int n);
+static int phylip_rectify_output_seq_digital(char *buf);
+static int phylip_rectify_output_seq_text(char *buf);
+
+/*****************************************************************
+ * 1. API for reading/writing PHYLIP format alignment files
+ *****************************************************************/
+
+/* Function:  esl_msafile_phylip_SetInmap()
+ * Synopsis:  Configure input map for PHYLIP formats.
+ *
+ * Purpose:   Set the <afp->inmap> for PHYLIP formats.
+ * 
+ *            Phylip documentation states that DNA programs accept
+ *            'ABCDGHKMNORSTUVWXY?-', that 'a period was previously
+ *            allowed' and that O means a deletion. Protein programs
+ *            accept 'ABCDEFGHIJKLMNOPQRSTUVWXYZ*?-', and while JOU
+ *            are accepted, they are unused. 
+ *
+ *            So: in text mode, we accept any alphabetic character
+ *            plus '-*?.', verbatim. '~_', which Easel would normally
+ *            accept, are illegal. Whitespace and numbers are ignored.
+ *            
+ *            In digital mode, we modify the digital alphabet by
+ *            demapping '~_' and making them illegal; '?' is mapped to
+ *            missing data; whitespace and numbers are ignored;
+ *            and ONLY in <eslDNA> or <eslRNA> alphabets, 'O' is
+ *            mapped to a gap.
+ *            
+ *            The inconsistent mapping of 'O' poses potential
+ *            problems. In text mode (where we don't know the
+ *            alphabet, and thus don't know what to do with O), we
+ *            input the O verbatim. In digital mode, in a DNA or RNA
+ *            alphabet, we map O to a gap; in other digital alphabets,
+ *            we use the default digital alphabet mapping of O.
+ *            
+ * Xref:      http://evolution.genetics.washington.edu/phylip/doc/sequence.html
+ */
+int 
+esl_msafile_phylip_SetInmap(ESL_MSAFILE *afp)
+{
+  int sym;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc)
+    {
+      for (sym = 1;   sym < 128; sym++) afp->inmap[sym] = afp->abc->inmap[sym];
+      for (sym = '0'; sym < '9'; sym++) afp->inmap[sym] = eslDSQ_IGNORED;
+      afp->inmap['?']  = esl_abc_XGetMissing(afp->abc);
+      afp->inmap['~']  = eslDSQ_ILLEGAL;
+      afp->inmap['_']  = eslDSQ_ILLEGAL;
+      afp->inmap[' ']  = eslDSQ_IGNORED;
+      afp->inmap['\t'] = eslDSQ_IGNORED;
+      afp->inmap[0]    = esl_abc_XGetUnknown(afp->abc);
+
+      if (afp->abc->type == eslDNA || afp->abc->type == eslRNA) 
+	afp->inmap['O'] = esl_abc_XGetGap(afp->abc);
+    }
+#endif
+  if (! afp->abc)
+    {
+      for (sym = 1; sym < 128; sym++)    afp->inmap[sym] = eslDSQ_ILLEGAL;
+      for (sym = 'a'; sym <= 'z'; sym++) afp->inmap[sym] = sym;
+      for (sym = 'A'; sym <= 'Z'; sym++) afp->inmap[sym] = sym;
+      for (sym = '0'; sym <= '9'; sym++) afp->inmap[sym] = eslDSQ_IGNORED;
+      afp->inmap['-']  = '-';
+      afp->inmap['*']  = '*';
+      afp->inmap['?']  = '?';
+      afp->inmap['.']  = '.';
+      afp->inmap[' ']  = eslDSQ_IGNORED;
+      afp->inmap['\t'] = eslDSQ_IGNORED;
+      afp->inmap[0]    = '?';
+    } 
+  return eslOK;
+}
+  
+  
+/* Function:  esl_msafile_phylip_GuessAlphabet()
+ * Synopsis:  Guess the alphabet of an open PHYLIP MSA input.
+ *
+ * Purpose:   Guess the alphabet of the sequences in open 
+ *            PHYLIP format MSA file <afp>.
+ *            
+ *            On normal return, <*ret_type> is set to <eslDNA>,
+ *            <eslRNA>, or <eslAMINO>, and <afp> is reset to its
+ *            original point.
+ *
+ * Args:      afp      - open PHYLIP format MSA file
+ *           *ret_type - RETURN: <eslDNA>, <eslRNA>, <eslAMINO>; or <eslUNKNOWN>.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslENOALPHABET> if autodetection fails.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslESYS> on failures of fread() or other system calls
+ */
+int
+esl_msafile_phylip_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type)
+{
+  int       namewidth     = (afp->fmtd.namewidth ? afp->fmtd.namewidth : 10); /* default: strict PHYLIP, namewidth 10 */
+  int       alphatype     = eslUNKNOWN;
+  int       threshold[3]  = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */
+  int       nsteps        = 3;		          /* ...there's 3 threshold[]'s we check */
+  int       step          = 0;		          /* ...starting on threshold[0] */
+  int64_t   nres          = 0;
+  char     *p;
+  esl_pos_t n, pos;
+  int       x;
+  esl_pos_t anchor;
+  int64_t   ct[26];
+  int       status;
+
+  for (x = 0; x < 26; x++) ct[x] = 0;
+
+  anchor = esl_buffer_GetOffset(afp->bf);
+  if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */
+
+  /* Find the first nonblank line, which says " <nseq> <alen>" and may also have options. we ignore this header */
+  while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK  && esl_memspn(p, n, " \t") == n) ;
+  if      (status == eslEOF) ESL_XFAIL(eslENOALPHABET, afp->errmsg, "can't determine alphabet: no alignment data found");
+  else if (status != eslOK)  goto ERROR;
+
+  /* Read line by line, just looking for residues, not worrying about nseq/alen or sequential/interleaved 
+   * Always skip the name field, even in continuation lines/blocks 
+   * This may miss some residues, but it means we work on both sequential and interleaved formats 
+   */
+  while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK)
+    {
+      if (esl_memspn(p, n, " \t") == n) continue;
+      if (n < namewidth)                continue;
+
+      p += namewidth;
+      n -= namewidth;
+      
+      /* count characters into ct[] array */
+      for (pos = 0; pos < n; pos++)
+	if (isalpha(p[pos])) {
+	  x = toupper(p[pos]) - 'A';
+	  ct[x]++;
+	  nres++; 
+	}
+
+      /* try to stop early, checking after 500, 5000, and 50000 residues: */
+      if (step < nsteps && nres > threshold[step]) {
+	if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */
+	step++;
+      }
+    }
+  if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */
+  status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */
+
+ DONE:
+  esl_buffer_SetOffset(afp->bf, anchor);   /* Rewind to where we were. */
+  esl_buffer_RaiseAnchor(afp->bf, anchor);
+  *ret_type = alphatype;
+  return status;
+
+ ERROR:
+   if (anchor != -1) {
+    esl_buffer_SetOffset(afp->bf, anchor);
+    esl_buffer_RaiseAnchor(afp->bf, anchor);
+  }
+  *ret_type = eslUNKNOWN;
+  return status;
+}
+
+/* Function:  esl_msafile_phylip_Read()
+ * Synopsis:  Read in a PHYLIP format alignment.
+ *
+ * Purpose:   Read an MSA from an open <ESL_MSAFILE> <afp>, parsing for
+ *            Phylip format, starting from the current point. The
+ *            format may be either the interleaved or sequential
+ *            variant, according to the format set in <afp->format>:
+ *            <eslMSAFILE_PHYLIP> means interleaved, and
+ *            <eslMSAFILE_PHYLIPS> means sequential. Create a new
+ *            multiple alignment, and return a ptr to that alignment
+ *            in <*ret_msa>.  Caller is responsible for free'ing this
+ *            <ESL_MSA>.
+ *
+ * Args:      afp       - open <ESL_MSAFILE>
+ *            ret_msa   - RETURN: newly parsed <ESL_MSA>
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ *            <eslEOF> if no (more) alignment data were found in
+ *            <afp>, and <afp> is returned at EOF. 
+ *
+ *            <eslEFORMAT> on a parse error. <*ret_msa> is set to
+ *            <NULL>. <afp> contains information sufficient for
+ *            constructing useful diagnostic output: 
+ *            | <afp->errmsg>       | user-directed error message     |
+ *            | <afp->linenumber>   | line # where error was detected |
+ *            | <afp->line>         | offending line (not NUL-term)   |
+ *            | <afp->n>            | length of offending line        |
+ *            | <afp->bf->filename> | name of the file                |
+ *            and <afp> is poised at the start of the following line,
+ *            so (in principle) the caller could try to resume
+ *            parsing.
+ *
+ * Throws:    <eslEMEM> - an allocation failed.
+ *            <eslESYS> - a system call such as fread() failed
+ *            <eslEINCONCEIVABLE> - "impossible" corruption 
+ */
+int
+esl_msafile_phylip_Read(ESL_MSAFILE *afp, ESL_MSA **ret_msa)
+{
+  ESL_MSA  *msa       = NULL;
+  int32_t   alen_stated;	/* int32_t because we're using strtoi32() to parse it from the file */
+  int       nseq;
+  char     *p, *tok;
+  esl_pos_t n, toklen;
+  int       status;
+  
+  ESL_DASSERT1( (afp->format == eslMSAFILE_PHYLIP || afp->format == eslMSAFILE_PHYLIPS) );
+
+  afp->errmsg[0] = '\0';
+
+  /* skip leading blank lines (though there shouldn't be any) */
+  while ( (status = esl_msafile_GetLine(afp, &p, &n)) == eslOK  && esl_memspn(p, n, " \t") == n) ;
+  if      (status != eslOK)  goto ERROR; /* includes normal EOF */
+
+  /* the first line: <nseq> <alen> */
+  esl_memtok(&p, &n, " \t", &tok, &toklen);
+  if (esl_mem_strtoi32(tok, toklen, 0, NULL, &nseq)        != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "first PHYLIP line should be <nseq> <alen>: first field isn't an integer");
+  if (esl_memtok(&p, &n, " \t", &tok, &toklen)             != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "first PHYLIP line should be <nseq> <alen>: only one field found");
+  if (esl_mem_strtoi32(tok, toklen, 0, NULL, &alen_stated) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "first PHYLIP line should be <nseq> <alen>: second field isn't an integer");
+
+  /* believe <nseq> and allocate accordingly */
+  /* don't believe <alen_stated>; use it for validation, after we've parsed everything. */
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc   &&  (msa = esl_msa_CreateDigital(afp->abc, nseq, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+#endif
+  if (! afp->abc &&  (msa = esl_msa_Create(                 nseq, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+
+  /* load next line, skipping any blank ones (though there shouldn't be any) */
+  do {
+    status = esl_msafile_GetLine(afp, &p, &n);
+    if      (status == eslEOF) ESL_XFAIL(eslEFORMAT, afp->errmsg, "no alignment data following PHYLIP header");
+    else if (status != eslOK) goto ERROR;
+  } while (esl_memspn(p, n, " \t") == n); /* idiom for "blank line" */
+
+  /* hand off to interleaved vs. sequential parser for the rest */
+  if      (afp->format == eslMSAFILE_PHYLIP)  status = phylip_interleaved_Read(afp, msa, nseq, alen_stated);
+  else if (afp->format == eslMSAFILE_PHYLIPS) status = phylip_sequential_Read (afp, msa, nseq, alen_stated);
+  if (status != eslOK) goto ERROR;
+
+  if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR;
+  *ret_msa = msa;
+  return eslOK;
+
+ ERROR:
+  if (msa) esl_msa_Destroy(msa);
+  *ret_msa = NULL;
+  return status;
+}
+
+
+/* Function:  esl_msafile_phylip_Write()
+ * Synopsis:  Write an MSA to a stream in PHYLIP format.
+ *
+ * Purpose:   Write alignment <msa> in PHYLIP format to stream <fp>.
+ *            If <format> is <eslMSAFILE_PHYLIP>, write interleaved format;
+ *            if <format> is <eslMSAFILE_PHYLIPS>, write sequential format.
+ *            
+ *            Optionally, caller may pass additional formatting
+ *            information by passing a ptr to a valid <opt_fmtd>
+ *            structure. <opt_fmtd->namewidth> sets the width of the
+ *            name field. For strict PHYLIP format, this must be 10.
+ *            <opt_fmtd->rpl> sets the number of residues per line.
+ *            The default is 60. For either value, if it is unset or
+ *            if <opt_fmtd> is <NULL>, the default is used.
+ *            
+ * Args:      fp        - open output stream
+ *            msa       - alignment to write
+ *            format    - <eslMSAFILE_PHYLIP> for interleaved; <eslMSAFILE_PHYLIPS> for sequential.
+ *            fmtd      - optional: <NULL>, or additional format information
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <format> isn't <eslMSAFILE_PHYLIP> or <eslMSAFILE_PHYLIPS>.
+ *            <eslEMEM> on allocation failure.
+ *            <eslEWRITE> on any system write error, such as a filled disk.
+ */
+int
+esl_msafile_phylip_Write(FILE *fp, const ESL_MSA *msa, int format, ESL_MSAFILE_FMTDATA *opt_fmtd)
+{
+  if      (format == eslMSAFILE_PHYLIP)  return phylip_interleaved_Write(fp, msa, opt_fmtd);
+  else if (format == eslMSAFILE_PHYLIPS) return phylip_sequential_Write (fp, msa, opt_fmtd);
+  else ESL_EXCEPTION(eslEINVAL, "format %s is not a PHYLIP format", esl_msafile_DecodeFormat(format));
+}
+
+/* Function:  esl_msafile_phylip_CheckFileFormat()
+ * Synopsis:  Check whether an input seems to be in PHYLIP format.
+ *
+ * Purpose:   Check whether input buffer <bf> appears to be
+ *            in a PHYLIP format, starting from the current point.
+ *            Return <eslOK> if it is, and <eslFAIL> if it isn't.
+ *            
+ *            There are two main variants of the format, interleaved
+ *            and sequential. Upon successful return, <*ret_format> is
+ *            set to <eslMSAFILE_PHYLIP> for interleaved, or
+ *            <eslMSAFILE_PHYLIPS> for sequential.
+ *            
+ *            Strict PHYLIP format has a name/identifier field width
+ *            of exactly 10 characters, but variants of the format are
+ *            in common use with different name widths. The
+ *            name width is determined and returned in <*ret_namewidth>. 
+ *            
+ *            If the input doesn't appear to be in PHYLIP format,
+ *            return <eslFAIL>, with <*ret_format> as
+ *            <eslMSAFILE_UNKNOWN> and <*ret_namewidth> as 0.
+ *            
+ *            The PHYLIP format definition is ambiguous; it is
+ *            possible to construct pathological inputs that could be
+ *            validly parsed to yield different data when read as
+ *            interleaved versus sequential. (This requires names that
+ *            use a character set that looks like sequence, among
+ *            other unusual edge conditions.) If the format variant
+ *            cannot be unambiguously determined, we do not attempt to
+ *            make a guess that might result in corrupted input;
+ *            rather, return <eslEAMBIGUOUS>.
+ *
+ * Args:      bf             - input buffer 
+ *            *ret_format    - RETURN: format variant, <eslMSAFILE_PHYLIP>, <_PHYLIPS>, <_UNKNOWN>
+ *            *ret_namewidth - RETURN: width of name field, in characters
+ * 
+ * Returns:   <eslOK> if input is in PHYLIP format; <*ret_format> is set to 
+ *            <eslMSAFILE_PHYLIP> or <eslMSAFILE_PHYLIPS>; <*ret_namewidth>
+ *            is the name width, either the usual 10, or something nonstandard.
+ *            
+ *            <eslEAMBIGUOUS> if the input appears to be in a PHYLIP format but
+ *            we can't tell which one. <*ret_format> is <eslMSAFILE_UNKNOWN>, 
+ *            <*ret_namewidth> is 0.
+ *            
+ *            <eslFAIL> if the input is not in either PHYLIP format; 
+ *            <*ret_format> is <eslMSAFILE_UNKNOWN>, <*ret_namewidth> is 0.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_msafile_phylip_CheckFileFormat(ESL_BUFFER *bf, int *ret_format, int *ret_namewidth)
+{
+  int maybe_interleaved = FALSE;  // Must worry about pathological files consistent with both formats.
+  int maybe_sequential  = FALSE;
+  int nblocks;                    // number of interleaved blocks. if only 1, interleaved == sequential
+  int w1, w2;                     // name widths if interleaved, sequential
+  
+  if      ( phylip_check_interleaved(bf, &nblocks, &w1) == eslOK)  { maybe_interleaved = TRUE; }
+
+  if      (maybe_interleaved && nblocks == 1)      { *ret_namewidth = w1; *ret_format = eslMSAFILE_PHYLIP;  return eslOK; }
+
+  if      ( phylip_check_sequential_known  (bf, 10)     == eslOK) { maybe_sequential  = TRUE; w2 = 10; }
+  else if ( phylip_check_sequential_unknown(bf, &w2)    == eslOK) { maybe_sequential  = TRUE;          }
+
+  if      (maybe_interleaved && maybe_sequential)  { *ret_namewidth = 0;  *ret_format = eslMSAFILE_UNKNOWN; return eslEAMBIGUOUS; }
+  else if (maybe_interleaved)                      { *ret_namewidth = w1; *ret_format = eslMSAFILE_PHYLIP;  return eslOK;         }
+  else if (maybe_sequential)                       { *ret_namewidth = w2; *ret_format = eslMSAFILE_PHYLIPS; return eslOK;         }
+  else                                             { *ret_namewidth = 0;  *ret_format = eslMSAFILE_UNKNOWN; return eslFAIL;       }
+}
+/*-------------- end, API for PHYLIP format i/o -----------------*/
+
+
+/*****************************************************************
+ * 2. i/o of the interleaved variant of the format
+ *****************************************************************/
+
+/* Read the interleaved variant.
+ * header told us to expect <nseq>, <alen_stated>.
+ * <msa> is already allocated <nseq>, <-1>.
+ * In <afp>, we've loaded the first line of the alignment data.
+ */
+static int
+phylip_interleaved_Read(ESL_MSAFILE *afp, ESL_MSA *msa, int nseq, int32_t alen_stated)
+{
+  int       namewidth  = (afp->fmtd.namewidth ? afp->fmtd.namewidth : 10); /* default: strict PHYLIP, namewidth 10 */
+  char     *namebuf    = NULL;
+  int       nblocks    = 0;
+  int64_t   alen       = 0;		/* alignment length observed so far */
+  char     *p          = afp->line;
+  esl_pos_t n          = afp->n;
+  int64_t   block_alen;		/* # of residues being added by current block */
+  int64_t   cur_alen;
+  int       idx;
+  int       status;
+  
+  ESL_ALLOC(namebuf, sizeof(char) * (namewidth+1));
+
+  /* p, n is now the first line of a block */
+  /* read the alignment data */
+  do {			
+    idx = 0;
+    do {  /* First block? store the sequence names */
+      if (nblocks == 0)
+	{
+	  if (n < namewidth)                                                    ESL_XFAIL(eslEFORMAT, afp->errmsg, "PHYLIP line too short to find sequence name");
+	  if (phylip_rectify_input_name(namebuf, p, namewidth)        != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "invalid character(s) in sequence name");
+	  if ( (status = esl_msa_SetSeqName(msa, idx, namebuf, -1))   != eslOK) goto ERROR;
+	  p += namewidth;
+	  n -= namewidth;
+	}
+      
+      /* Append the sequence. */
+      cur_alen = alen;
+#ifdef eslAUGMENT_ALPHABET
+      if (msa->abc)    { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[idx]),   &(cur_alen), p, n); }
+#endif
+      if (! msa->abc)  { status = esl_strmapcat (afp->inmap, &(msa->aseq[idx]), &(cur_alen), p, n); }
+      if      (status == eslEINVAL)    ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters");
+      else if (status != eslOK)        goto ERROR;
+
+      /* validate # of residues added */
+      if      (idx == 0)                      block_alen = cur_alen - alen;
+      else if (cur_alen - alen != block_alen) ESL_XFAIL(eslEFORMAT, afp->errmsg, "number of residues on line differs from previous seqs in alignment block");
+
+      /* get next line. */
+      idx++;
+      status = esl_msafile_GetLine(afp, &p, &n);
+    } while (status == eslOK && idx < nseq && esl_memspn(p, n, " \t") < n); /* stop block on: read error, EOF; idx == nseq; or blank line */
+    
+    if (idx != nseq) ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected number of sequences in block (saw %d, expected %d)", idx, nseq);
+    nblocks += 1;
+    alen    += block_alen;
+
+    /* tolerate blank lines only at the end of a block */
+    while (status == eslOK && esl_memspn(p, n, " \t") == n)
+      status = esl_msafile_GetLine(afp, &p, &n); /* [eslEMEM,eslESYS] */
+    /* now status can be: read error, EOF, or OK.  */
+  } while (status == eslOK && alen < alen_stated);
+
+  /* End of all blocks. We swallowed blank lines following last block,
+   * so we should be EOF; unless we're in a seqboot file, in which
+   * case we just read the first line of the next MSA.
+   */
+  if      (status == eslOK)     esl_msafile_PutLine(afp); /* put <nseq> <alen> line back in the stream, so we will read it properly w/ next msa read */
+  else if (status != eslEOF)    goto ERROR;
+  else if (alen != alen_stated) ESL_XFAIL(eslEFORMAT, afp->errmsg, "alignment length disagrees with header: header said %d, parsed %" PRId64, alen_stated, alen);
+
+  msa->nseq = nseq;
+  msa->alen = alen;
+  free(namebuf);
+  return eslOK;
+
+ ERROR:
+  msa->nseq = nseq;		/* we're allocated and initialized for <nseq>: this makes sure we free everything we need to in <msa> */
+  if (namebuf) free(namebuf);
+  return status;
+}
+
+/* Write an interleaved PHYLIP file.
+ * Returns <eslOK> on success.
+ * Throws <eslEWRITE> on any system write error.
+ */
+static int
+phylip_interleaved_Write(FILE *fp, const ESL_MSA *msa, ESL_MSAFILE_FMTDATA *opt_fmtd)
+{
+  int     rpl        = ( (opt_fmtd && opt_fmtd->rpl)       ? opt_fmtd->rpl       : 60);
+  int     namewidth  = ( (opt_fmtd && opt_fmtd->namewidth) ? opt_fmtd->namewidth : 10);
+  char   *buf        = NULL;
+  int     idx;
+  int64_t apos;
+  int     status;
+  
+  ESL_ALLOC(buf, sizeof(char) * (rpl+1));
+  buf[rpl] = '\0';
+
+  if (fprintf(fp, " %d %" PRId64, msa->nseq, msa->alen) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "interleaved phylip write failed");
+
+  for (apos = 0; apos < msa->alen; apos += rpl)
+    {
+      if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "interleaved phylip write failed");
+      for (idx = 0; idx < msa->nseq; idx++)
+	{
+#ifdef eslAUGMENT_ALPHABET 
+	  if (msa->abc) 
+	    {
+	      esl_abc_TextizeN(msa->abc, msa->ax[idx]+apos+1, rpl, buf);
+	      phylip_rectify_output_seq_digital(buf);
+	    }
+#endif
+	  if (! msa->abc) 
+	    {
+	      strncpy(buf, msa->aseq[idx]+apos, rpl);
+	      phylip_rectify_output_seq_text(buf);
+	    }
+
+	  if (apos == 0) { if (fprintf(fp, "%-*.*s %s\n", namewidth, namewidth, msa->sqname[idx], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "interleaved phylip write failed"); }
+	  else           { if (fprintf(fp, "%s\n", buf)                                                < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "interleaved phylip write failed"); }
+	}
+    }
+  free(buf);
+  return eslOK;
+
+ ERROR:
+  if (buf) free(buf);
+  return status;
+}
+/*----------------- end, interleaved variant -------------------*/
+
+
+/*****************************************************************
+ * 3. i/o of sequential variant of the format
+ *****************************************************************/
+
+/* Read the sequential variant.
+ * header told us to expect <nseq>, <alen_stated>.
+ * <msa> is already allocated <nseq>, <-1>.
+ * In <afp>, we've loaded the first line of the alignment data.
+ */
+static int
+phylip_sequential_Read(ESL_MSAFILE *afp, ESL_MSA *msa, int nseq, int32_t alen_stated)
+{
+  int       namewidth = (afp->fmtd.namewidth ? afp->fmtd.namewidth : 10); /* default: strict PHYLIP, namewidth 10 */
+  char     *namebuf   = NULL;
+  char     *p         = afp->line;
+  esl_pos_t n         = afp->n;
+  int       idx;
+  int64_t   alen      = 0;
+  int       status    = eslOK;
+  
+  ESL_ALLOC(namebuf, sizeof(char) * (namewidth+1));
+
+  for (idx = 0; idx < nseq; idx++)
+    {
+      alen   = 0;
+      status = eslOK;
+      while (status == eslOK && alen < alen_stated)
+	{
+	  if (alen == 0) /* First line? Store the sequence name */
+	    {		  
+	      if (n < namewidth)                                                    ESL_XFAIL(eslEFORMAT, afp->errmsg, "PHYLIP line too short to find sequence name");
+	      if (phylip_rectify_input_name(namebuf, p, namewidth)        != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "invalid character(s) in sequence name");
+	      if ( (status = esl_msa_SetSeqName(msa, idx, namebuf, -1))   != eslOK) goto ERROR;
+	      p += namewidth;
+	      n -= namewidth;
+	    }
+	  
+#ifdef eslAUGMENT_ALPHABET
+	  if (msa->abc)    { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[idx]),   &alen, p, n); }
+#endif
+	  if (! msa->abc)  { status = esl_strmapcat (afp->inmap, &(msa->aseq[idx]), &alen, p, n); }
+	  if      (status == eslEINVAL)    ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters");
+	  else if (status != eslOK)        goto ERROR;
+
+	  /* get next line */
+	  status = esl_msafile_GetLine(afp, &p, &n);
+	} /* end looping over a seq */
+
+      /* tolerate blank lines after sequences. */
+      while (status == eslOK && esl_memspn(p, n, " \t") == n) 
+	status = esl_msafile_GetLine(afp, &p, &n);
+
+      if      (status == eslEOF) { if (idx < nseq-1) ESL_XFAIL(eslEFORMAT, afp->errmsg, "premature end of file: header said to expect %d sequences", nseq); }
+      else if (status != eslOK)                      goto ERROR;
+      else if (alen   != alen_stated)                ESL_XFAIL(eslEFORMAT, afp->errmsg, "aligned length of sequence disagrees with header: header says %d, parsed %" PRId64, alen_stated, alen);
+    } /* end looping over all seqs */
+
+  /* we should be EOF; we've swallowed all trailing blank lines.
+   * Exception: if we're in a seqboot file, we just read the <nseq> <alen> line of the next msa record; push it back on stream
+   */
+  if (status == eslOK) esl_msafile_PutLine(afp);
+
+  msa->nseq = nseq;
+  msa->alen = alen;
+  free(namebuf);
+  return eslOK;
+
+ ERROR:
+  msa->nseq = nseq;		/* we're allocated and initialized for <nseq>: this makes sure we free everything we need to in <msa> */
+  if (namebuf) free(namebuf);
+  return status;
+}
+
+static int
+phylip_sequential_Write(FILE *fp, const ESL_MSA *msa, ESL_MSAFILE_FMTDATA *opt_fmtd)
+{
+  int     rpl        = ( (opt_fmtd && opt_fmtd->rpl)       ? opt_fmtd->rpl       : 60);
+  int     namewidth  = ( (opt_fmtd && opt_fmtd->namewidth) ? opt_fmtd->namewidth : 10);
+  char   *buf        = NULL;
+  int     idx;
+  int64_t apos;
+  int     status;
+  
+  ESL_ALLOC(buf, sizeof(char) * (rpl+1));
+  buf[rpl] = '\0';
+
+  fprintf(fp, " %d %" PRId64 "\n", msa->nseq, msa->alen);
+
+  for (idx = 0; idx < msa->nseq; idx++)
+    {
+      for (apos = 0; apos < msa->alen; apos += rpl)
+	{
+#ifdef eslAUGMENT_ALPHABET 
+	  if (msa->abc) 
+	    {
+	      esl_abc_TextizeN(msa->abc, msa->ax[idx]+apos+1, rpl, buf);
+	      phylip_rectify_output_seq_digital(buf);
+	    }
+#endif
+	  if (! msa->abc) 
+	    {
+	      strncpy(buf, msa->aseq[idx]+apos, rpl);
+	      phylip_rectify_output_seq_text(buf);
+	    }
+	  
+	  if (apos == 0) fprintf(fp, "%-*.*s %s\n", namewidth, namewidth, msa->sqname[idx], buf);
+	  else           fprintf(fp, "%s\n", buf);
+	}
+    }
+  free(buf);
+  return eslOK;
+
+ ERROR:
+  if (buf) free(buf);
+  return status;
+}
+/*------------------ end, sequential variant --------------------*/
+
+
+/*****************************************************************
+ * 4. Autodetection of the format and its variants
+ *****************************************************************/
+
+/* return <eslOK> if input is consistent with interleaved format;
+ * set <*ret_namewidth> to the apparent name width; 
+ * set <*ret_nblocks> to the number of interleaved blocks seen.
+ *
+ * If <nblocks=1>, it doesn't matter whether we read the file as
+ * interleaved or sequential; it will also appear to be consistent
+ * with sequential format, but we will parse it as interleaved.
+ *
+ * <namewidth> can be uniquely determined because we know <nseq> and
+ * <alen> (from the Phylip header), so we know how many characters
+ * should be accounted for by the alignment; the rest have to be
+ * the names.
+ * 
+ * If the input is not consistent with interleaved Phylip format,
+ * return <eslFAIL>, and <*ret_namewidth> and <*ret_nblocks> are 0.
+ * 
+ * upon return, restore the <bf> to its original position.
+ */
+static int
+phylip_check_interleaved(ESL_BUFFER *bf, int *ret_nblocks, int *ret_namewidth)
+{
+  esl_pos_t anchor     = -1;
+  char     *p;
+  esl_pos_t n;
+  int32_t   nseq, alen;
+  char     *colcodes   = NULL;
+  char     *colcodes0  = NULL;
+  int       ncols, ncols0;
+  int       c, idx;
+  int       nblocks    = 0;
+  int       nres2      = 0;
+  int       nres1;
+  int       status;
+
+  anchor = esl_buffer_GetOffset(bf);
+  if (esl_buffer_SetAnchor(bf, anchor)                         != eslOK) { status = eslFAIL; goto ERROR; } 
+  if ((status = phylip_parse_header(bf, &nseq, &alen, &p, &n)) != eslOK) goto ERROR;
+  
+  /* read the whole file, one block at a time */
+  while (status == eslOK)
+    {
+      ncols = n;
+      ESL_REALLOC(colcodes, sizeof(char) * ncols);
+      for (c = 0; c < ncols; c++) colcodes[c] = '?';
+
+      /* read a block: for each line, update the colcodes[] array. */
+      for (idx = 0; idx < nseq; idx++)
+	{
+	  if (status == eslEOF) goto ERROR;
+	  if ((status = phylip_collate_colcodes(p, n, colcodes, ncols)) != eslOK) goto ERROR;
+	  status = esl_buffer_GetLine(bf, &p, &n);
+	  if (status != eslOK && status != eslEOF) goto ERROR; /* EOF is ok on last seq of single-block data */
+	}
+
+      /* finished a block. status may be EOF or OK.
+       * save the first block's colcodes[] to defer its analysis 
+       * for all other blocks: count x columns, reject n columns, ignore . and o
+       */
+      if (nblocks == 0) 
+	{
+	  colcodes0 = colcodes;  ncols0    = ncols;
+	  colcodes  = NULL;      
+	  /* let's speculate that it's strictly conforming PHYLIP with a namewidth of 10 
+	   * in that case, we'll be able to stop parsing blocks when we reach the full
+	   * alignment length
+	   */
+	  for (nres1 = 0, c = 10; c < ncols0; c++) 
+	    if  (colcodes0[c] != '.') nres1++; /* for this test, consider even invalid symbols to be "residues". */
+	}
+      else
+	{
+	  for (c = 0; c < ncols; c++)
+	    {
+	      if (colcodes[c] == 'x') nres2++;
+	      if (colcodes[c] == 'n') { status = eslFAIL; goto ERROR; } /* subsequent blocks can't contain name-like columns */
+	    }
+	}
+      nblocks++;
+      
+      /* if it's strictly conforming w/ namewidth=10, we know when we're done,
+       * and in that case we can tolerate trailing data (tree, whatever) in the
+       * input. status will be eslOK if we break this way.
+       */
+      if (nres1+nres2 == alen) break;
+
+      /* skip blank lines until we load start of next block in <p>, <n> */
+      while (status == eslOK && esl_memspn(p, n, "\t") == n)
+	status = esl_buffer_GetLine(bf, &p, &n);
+    }
+
+  if (nres1+nres2 == alen) *ret_namewidth = 10; 
+  else if ((status = phylip_deduce_namewidth(colcodes0, ncols0, alen, nres2, ret_namewidth)) != eslOK) goto ERROR;
+
+  free(colcodes);
+  free(colcodes0);
+  esl_buffer_SetOffset(bf, anchor);
+  esl_buffer_RaiseAnchor(bf, anchor);
+  *ret_nblocks = nblocks;
+  return eslOK;
+
+ ERROR:
+  if (anchor != -1) { 
+    esl_buffer_SetOffset(bf, anchor);
+    esl_buffer_RaiseAnchor(bf, anchor);
+   }
+  if (colcodes) free(colcodes);
+  if (colcodes0) free(colcodes0);
+  *ret_namewidth = 0;
+  *ret_nblocks   = 0;
+  return status;
+}
+
+
+/* check for a sequential format file, given a known namewidth (10, for strict PHYLIP) */
+static int
+phylip_check_sequential_known(ESL_BUFFER *bf, int namewidth)
+{
+  esl_pos_t anchor     = -1;
+  char     *p;
+  esl_pos_t n;
+  int32_t   nseq, alen;
+  int       idx, nres, line, c;
+  int       status;
+
+  anchor = esl_buffer_GetOffset(bf);
+  if (esl_buffer_SetAnchor(bf, anchor)                         != eslOK) { status = eslFAIL; goto ERROR; } 
+  if ((status = phylip_parse_header(bf, &nseq, &alen, &p, &n)) != eslOK) goto ERROR;  
+
+  for (idx = 0; idx < nseq; idx++)
+    {
+      nres = 0;
+      line = 0;
+      while (nres < alen)
+	{
+	  if (status == eslEOF) goto ERROR;
+
+	  c = (line == 0 ? namewidth : 0);
+	  for ( ; c < n; c++) 
+	    if (strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[c]) != NULL) 
+	      nres++;
+
+	  status = esl_buffer_GetLine(bf, &p, &n);
+	  if (status != eslOK && status != eslEOF) goto ERROR;
+	}
+      if (nres != alen) { status = eslFAIL; goto ERROR; }
+
+      /* tolerate blank spaces after individual sequences */
+      while (status == eslOK && esl_memspn(p, n, "\t") == n)
+	status = esl_buffer_GetLine(bf, &p, &n);
+      if (status != eslOK && status != eslEOF) goto ERROR;
+    }
+  
+  esl_buffer_SetOffset(bf, anchor);
+  esl_buffer_RaiseAnchor(bf, anchor);
+  return eslOK;
+
+ ERROR:
+  if (anchor != -1) { 
+    esl_buffer_SetOffset(bf, anchor);
+    esl_buffer_RaiseAnchor(bf, anchor);
+   }
+  return status;
+}
+
+
+/* phylip_check_sequential_unknown()
+ * Check for sequential format when namewidth may deviate from standard 10.
+ * 
+ * Returns: <eslOK> if file is consistent with sequential Phylip format,
+ *                  and <*ret_namewidth> is the name width.
+ * 
+ *          <eslFAIL> if file is inconsistent with sequential format.
+ *   
+ * Throws:  <eslEMEM> on allocation failure
+ */
+static int
+phylip_check_sequential_unknown(ESL_BUFFER *bf, int *ret_namewidth)
+{
+  esl_pos_t anchor  = -1;
+  int       nlines  = 0;
+  int       nblocks = 0;
+  int32_t   nseq, alen;
+  int      *rth     = NULL;  // rth[i=0..L1-1] = # of legal chars, inclusive, in i..L1-1, or 0
+  int       r;               // total # of legal seq chars on line 1 of a seq
+  int       L1;              // total length of line 1, including all chars & whitespace
+  int       b;               // # of legal seq chars on remainder of lines of a seq
+  int       a;               // # of seq chars we need on line 1: alen - b
+  char     *p;               // pointer to current line in input buffer
+  esl_pos_t n;               // length of current line in input buffer
+  int       i, j, k;
+  int       w;               // name width we determine
+  int       len2;            // alen of subsequent seqs in file
+  int       status;
+  
+  /* Set an anchor where we are in the input, so we can rewind */
+  anchor = esl_buffer_GetOffset(bf);
+  if ( esl_buffer_SetStableAnchor(bf, anchor) != eslOK) { status = eslFAIL; goto ERROR; }
+
+  /* Pass 1: number of data lines in file / nseq = integral # of lines per sequence */
+  while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK)
+    if (esl_memspn(p, n, " \t") != n) nlines++;
+  if (status != eslEOF) { status = eslFAIL; goto ERROR; }
+  nlines--;                         /* not counting the <nseq> <alen> header */
+  esl_buffer_SetOffset(bf, anchor); /* rewind */
+
+  /* pass 2: first, parse the <nseq> <alen> line */
+  if ((status = phylip_parse_header(bf, &nseq, &alen, &p, &n)) != eslOK) { status = eslFAIL; goto ERROR; }
+  if (nlines % nseq != 0) { status = eslFAIL; goto ERROR; } 
+  nblocks = nlines / nseq;
+
+  /* ... evaluate the first line, already at point in p,n */
+  ESL_ALLOC(rth, sizeof(int) * n);
+  for (i = n-1, r = 0; i >= 0; i--)
+    rth[i] = ( strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[i]) != NULL ? ++r : 0 );
+  L1 = n;
+
+  /* rth[i] =      0 if line1[i] is not a legal seq char
+   *          else # of legal chars in line1[i..L1-1]
+   *      r = total # of legal chars on line 1 
+   *     L1 = total length of line 1, all chars (including whitespace)
+   * Once we know how many seq residues we need to get on the first line,
+   * we can use rth[] to find the position of the first one.
+   */
+
+  /* Now count b: # of legal chars on subsequent lines for 1st seq */
+  for (k = 1, b = 0; k < nblocks; k++)
+    {
+      while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK  && esl_memspn(p, n, " \t") == n) ;
+      if (status != eslOK) { status = eslFAIL; goto ERROR; }
+      for (i = 0; i < n; i++)
+	if (strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[i]) != NULL) b++;
+    }
+
+  /* We need to find (alen - b) = a residues on the first line.  */
+  a = alen - b;
+  if (a > r)  { status = eslFAIL; goto ERROR; }
+  for (w = 0; w < L1; w++)                           // find the leftmost seq residue
+    if (rth[w] == a) break;
+  if (w == L1) { status = eslFAIL; goto ERROR; }
+  for (i = 0; i < w; i++)                            // make sure there's a name of some sort
+    if (! isspace(p[i])) break;
+  if ( i == w) { status = eslFAIL; goto ERROR; }
+  /* Now we "know" the name width is w. */
+
+  /* Check that the rest of the sequences (up to 100 of them) are consistent w/ that. */
+  for (j = 1; j < nseq && j < 100; j++)
+    {
+      while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK  && esl_memspn(p, n, " \t") == n) ;
+      if (status != eslOK) { status = eslFAIL; goto ERROR; }
+      if ( strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[w])  == NULL)  { status = eslFAIL; goto ERROR; }
+      for (i = 0; i < w; i++) 
+	if (! isspace(p[i])) break;
+      if ( i == w) { status = eslFAIL; goto ERROR; }
+
+      for (i = w, len2 = 0; i < n; i++)
+	if ( strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[i])  != NULL) len2++;
+
+      for (k = 1; k < nblocks; k++)
+	{
+	  while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK  && esl_memspn(p, n, " \t") == n) ;
+	  if (status != eslOK) { status = eslFAIL; goto ERROR; }
+	  for (i = 0; i < n; i++)
+	    if ( strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[i])  != NULL) len2++;
+	}
+      if (len2 != alen) { status = eslFAIL; goto ERROR; }
+    }
+
+  esl_buffer_SetOffset(bf, anchor);
+  esl_buffer_RaiseAnchor(bf, anchor);
+  free(rth);
+  *ret_namewidth = w;
+  return eslOK;
+
+ ERROR:
+  if (anchor != -1) { 
+    esl_buffer_SetOffset(bf, anchor);
+    esl_buffer_RaiseAnchor(bf, anchor);
+  }
+  free(rth);
+  *ret_namewidth = 0;
+  return status;
+}
+
+
+/* parse the header from a buffer (note, NOT an open MSAFILE).
+ * used by the format checkers (before an MSAFILE is open)
+ * return <eslOK> on success, <eslFAIL> on parse failure.
+ *
+ * Upon return <p>, <n> contains the first alignment data line,
+ * and the <bf>'s point is on the line following that.
+ * 
+ */
+static int
+phylip_parse_header(ESL_BUFFER *bf, int32_t *ret_nseq, int32_t *ret_alen, char **ret_p, esl_pos_t *ret_n)
+{
+  char     *p, *tok;
+  esl_pos_t n, toklen;
+  int32_t   nseq, alen;
+  int       status;
+  
+  /* Find the first nonblank line, which says " <nseq> <alen>" and may also have options (which we'll ignore) */
+  while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK  && esl_memspn(p, n, " \t") == n) ;
+  if (status == eslEOF) status = eslFAIL;
+  if (status != eslOK) goto ERROR;
+
+  esl_memtok(&p, &n, " \t", &tok, &toklen);
+  if (esl_mem_strtoi32(tok, toklen, 0, NULL, &nseq)  != eslOK) { status = eslFAIL; goto ERROR; }
+  if (esl_memtok(&p, &n, " \t", &tok, &toklen)       != eslOK) { status = eslFAIL; goto ERROR; }
+  if (esl_mem_strtoi32(tok, toklen, 0, NULL, &alen)  != eslOK) { status = eslFAIL; goto ERROR; }
+
+  /* skip any blank lines, load p,n as first line of putative block */
+  while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK  && esl_memspn(p, n, " \t") == n) ;
+  if (status == eslEOF) status = eslFAIL;
+  if (status != eslOK) goto ERROR;
+
+  *ret_nseq = nseq;
+  *ret_alen = alen;
+  *ret_p    = p;
+  *ret_n    = n;
+  return eslOK;
+
+ ERROR:
+  *ret_nseq = 0;
+  *ret_alen = 0;
+  *ret_p    = NULL;
+  *ret_n    = 0;
+  return status;
+}
+ 
+
+/* 
+ *   '?' : unset
+ *   'x' : column consists only of valid data symbols
+ *   '.' : column consists only of spaces 
+ *   'o' : column consists only of spaces or other (invalid) symbols such as numbers
+ *   'n' : column mixes x and (. or o):  must be a name column
+ *
+ * A name can contain spaces, valid symbols, other symbols ('x', 'n', '.', 'o')
+ * Any whitespace between name, data must contain only '.'
+ * Spacer columns elsewhere can contain spaces or other symbols (such as numbers): 'o'
+ * Alignment columns must contain only valid data symbols: 'x'.
+ */
+static int
+phylip_collate_colcodes(char *p, esl_pos_t n, char *colcodes, int ncols)
+{
+  int   c;
+
+  for (c = 0; c < ncols && c < n; c++)
+    {
+      if (strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[c]) != NULL)
+	{
+	  switch (colcodes[c]) {
+	  case '?': colcodes[c] = 'x'; break;
+	  case '.': colcodes[c] = 'n'; break;
+	  }
+	}
+      else if (p[c] == ' ')
+	{
+	  switch (colcodes[c]) {
+	  case '?': colcodes[c] = '.'; break;
+	  case 'x': colcodes[c] = 'n'; break;
+	  }
+	}
+      else if (isgraph(p[c]))
+	{
+	  switch (colcodes[c]) {
+	  case '?': colcodes[c] = 'o'; break;
+	  case 'x': colcodes[c] = 'n'; break;
+	  case '.': colcodes[c] = 'o'; break;
+	  }
+	}
+      else return eslFAIL;
+    }
+  for ( ; c < n; c++)
+    if (strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[c]) != NULL) return eslFAIL;
+
+  return eslOK;
+}
+
+static int
+phylip_deduce_namewidth(char *colcodes0, int ncols0, int alen, int nres2, int *ret_namewidth)
+{
+  int nres1;
+  int c;
+  int nwA, nwB, namewidth;
+
+  /* nres1 = alen - nres2  : # of columns that must be provided in first block */
+  nres1 = alen - nres2;
+  if (nres1 <= 0) return eslFAIL;
+
+  /* search leftward in first block until we've accounted for enough cols */
+  /* c becomes the position of the rightmost col before ali data, and hence = maximal namewidth-1 */
+  for (c = ncols0-1; nres1 && c >= 0; c--) 
+    if (colcodes0[c] == 'x') nres1--;
+  if (nres1 > 0) return eslFAIL;
+  nwB = c+1;
+
+  /* search leftward past whitespace columns that might be trailing the name  */
+  /* c becomes the position of the rightmost non-whitespace column, and hence = minimal namewidth-1 */
+  for ( ; c >= 0; c--)
+    if (colcodes0[c] != '.') break;
+  nwA = c+1;
+
+  /* if nwA <= 10 <= nwB, the namewidth is consistent with strict PHYLIP namewidth of 10 */
+  if (nwA <= 10 && nwB >= 10) namewidth = 10;
+  else                        namewidth = nwA;
+ 
+  *ret_namewidth = namewidth;
+  return eslOK;
+}
+/*-------------- end, format autodetection ----------------------*/
+
+
+/*****************************************************************
+ * 5. Rectifying valid input/output symbols in names and seqs
+ *****************************************************************/
+
+/* We allow any isprint() char in a name, except tabs.
+ * Phylip allows spaces in names, but Easel doesn't.
+ * Internal spaces are converted to underscore _
+ * Leading and trailing spaces are ignored
+ * namebuf must be allocated at least n+1 chars
+ * returns eslEINVAL if it sees an invalid character
+ */
+static int
+phylip_rectify_input_name(char *namebuf, char *p, int n)
+{
+  int pos, endpos;
+  int npos = 0;
+
+  for (endpos = n-1; endpos > 0;    endpos--) if (p[endpos] != ' ') break;
+  for (pos    = 0;   pos <= endpos; pos++)    if (p[pos]    != ' ') break; 
+  for (          ;   pos <= endpos; pos++) 
+    {
+      if (! isgraph(p[pos]) && p[pos] != ' ') return eslEINVAL;
+      namebuf[npos++] = (p[pos] == ' ' ? '_' : p[pos]);
+    }
+  namebuf[npos] = '\0';
+  return eslOK;
+}
+
+/* Easel's internal alphabet (and output syms) are compatible with PHYLIP
+ * (upper case, '-' for gaps, '*' for stop codon; except that PHYLIP uses
+ * '?' for missing data
+ */
+static int
+phylip_rectify_output_seq_digital(char *buf)
+{
+  int i;
+  for (i = 0; buf[i]; i++)
+    {
+      if (buf[i] == '~') buf[i] = '?';
+    }
+  return eslOK;
+}
+
+static int
+phylip_rectify_output_seq_text(char *buf)
+{
+  int i;
+  for (i = 0; buf[i]; i++)
+    {
+      if (islower(buf[i]))               buf[i] = toupper(buf[i]);
+      if (strchr("._ ", buf[i]) != NULL) buf[i] = '-';
+      if (buf[i] == '~')                 buf[i] = '?';
+    }
+  return eslOK;
+}
+/*---------- end, rectification of name, seq symbols ------------*/
+  
+
+
+
+/*****************************************************************
+ * 6. Unit tests
+ *****************************************************************/
+#ifdef eslMSAFILE_PHYLIP_TESTDRIVE
+static void
+utest_write_good1(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("  5    42\n", ofp);
+  fputs("Turkey    AAGCTNGGGC ATTTCAGGGT\n", ofp);
+  fputs("Salmo gairAAGCCTTGGC AGTGCAGGGT\n", ofp);
+  fputs("H. SapiensACCGGTTGGC CGTTCAGGGT\n", ofp);
+  fputs("Chimp     AAACCCTTGC CGTTACGCTT\n", ofp);
+  fputs("Gorilla   AAACCCTTGC CGGTACGCTT\n", ofp);
+  fputs("\n", ofp);
+  fputs("GAGCCCGGGC AATACAGGGT AT\n", ofp);
+  fputs("GAGCCGTGGC CGGGCACGGT AT\n", ofp);
+  fputs("ACAGGTTGGC CGTTCAGGGT AA\n", ofp);
+  fputs("AAACCGAGGC CGGGACACTC AT\n", ofp);
+  fputs("AAACCATTGC CGGTACGCTT AA\n", ofp);
+
+  *ret_format   = eslMSAFILE_PHYLIP;
+  *ret_alphatype = eslDNA;
+  *ret_nseq     = 5;
+  *ret_alen     = 42;
+}
+
+static void
+utest_write_good2(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("7 50 \n", ofp);
+  fputs("thermotogaATGGCGAAGGAAAAATTTGTGAGAACAAAACCGCATGTTAACGTTGGAAC\n", ofp);
+  fputs("TthermophiATGGCGAAGGGCGAGTTTGTTCGGACGAAGCCTCACGTGAACGTGGGGAC  \n", ofp);
+  fputs("TaquaticusATGGCGAAGGGCGAGTTTATCCGGACGAAGCCCCACGTGAACGTGGGGAC \n", ofp);
+  fputs("deinonema-ATGGCTAAGGGAACGTTTGAACGCACCAAACCCCACGTGAACGTGGGCAC  \n", ofp);
+  fputs("ChlamydiaBATGTCAAAAGAAACTTTTCAACGTAATAAGCCTCATATCAACATAGGGGC \n", ofp);
+  fputs("flexistipsATGTCCAAGCAAAAGTACGAAAGGAAGAAACCTCACGTAAACGTAGGCAC \n", ofp);
+  fputs("borrelia-bATGGCAAAAGAAGTTTTTCAAAGAACAAAGCCGCACATGAATGTTGGAAC \n", ofp);
+
+  *ret_format   = eslMSAFILE_PHYLIP;
+  *ret_alphatype = eslDNA;
+  *ret_nseq     = 7;
+  *ret_alen     = 50;
+}
+
+static void
+utest_write_good3(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs(" 3 384\n", ofp);
+  fputs("CYS1_DICDI   -----MKVIL LFVLAVFTVF VSS------- --------RG IPPEEQ---- --------SQ \n", ofp);
+  fputs("ALEU_HORVU   MAHARVLLLA LAVLATAAVA VASSSSFADS NPIRPVTDRA ASTLESAVLG ALGRTRHALR \n", ofp);
+  fputs("CATH_HUMAN   ------MWAT LPLLCAGAWL LGV------- -PVCGAAELS VNSLEK---- --------FH \n", ofp);
+  fputs("\n", ofp);
+  fputs("             FLEFQDKFNK KY-SHEEYLE RFEIFKSNLG KIEELNLIAI NHKADTKFGV NKFADLSSDE \n", ofp);
+  fputs("             FARFAVRYGK SYESAAEVRR RFRIFSESLE EVRSTN---- RKGLPYRLGI NRFSDMSWEE \n", ofp);
+  fputs("             FKSWMSKHRK TY-STEEYHH RLQTFASNWR KINAHN---- NGNHTFKMAL NQFSDMSFAE \n", ofp);
+  fputs("\n", ofp);
+  fputs("             FKNYYLNNKE AIFTDDLPVA DYLDDEFINS IPTAFDWRTR G-AVTPVKNQ GQCGSCWSFS \n", ofp);
+  fputs("             FQATRL-GAA QTCSATLAGN HLMRDA--AA LPETKDWRED G-IVSPVKNQ AHCGSCWTFS \n", ofp);
+  fputs("             IKHKYLWSEP QNCSAT--KS NYLRGT--GP YPPSVDWRKK GNFVSPVKNQ GACGSCWTFS \n", ofp);
+  fputs("\n", ofp);
+  fputs("             TTGNVEGQHF ISQNKLVSLS EQNLVDCDHE CMEYEGEEAC DEGCNGGLQP NAYNYIIKNG \n", ofp);
+  fputs("             TTGALEAAYT QATGKNISLS EQQLVDCAGG FNNF------ --GCNGGLPS QAFEYIKYNG \n", ofp);
+  fputs("             TTGALESAIA IATGKMLSLA EQQLVDCAQD FNNY------ --GCQGGLPS QAFEYILYNK \n", ofp);
+  fputs("\n", ofp);
+  fputs("             GIQTESSYPY TAETGTQCNF NSANIGAKIS NFTMIP-KNE TVMAGYIVST GPLAIAADAV \n", ofp);
+  fputs("             GIDTEESYPY KGVNGV-CHY KAENAAVQVL DSVNITLNAE DELKNAVGLV RPVSVAFQVI \n", ofp);
+  fputs("             GIMGEDTYPY QGKDGY-CKF QPGKAIGFVK DVANITIYDE EAMVEAVALY NPVSFAFEVT \n", ofp);
+  fputs("\n", ofp);
+  fputs("             E-WQFYIGGV F-DIPCN--P NSLDHGILIV GYSAKNTIFR KNMPYWIVKN SWGADWGEQG \n", ofp);
+  fputs("             DGFRQYKSGV YTSDHCGTTP DDVNHAVLAV GYGVENGV-- ---PYWLIKN SWGADWGDNG \n", ofp);
+  fputs("             QDFMMYRTGI YSSTSCHKTP DKVNHAVLAV GYGEKNGI-- ---PYWIVKN SWGPQWGMNG \n", ofp);
+  fputs("\n", ofp);
+  fputs("             YIYLRRGKNT CGVSNFVSTS II-- \n", ofp);
+  fputs("             YFKMEMGKNM CAIATCASYP VVAA \n", ofp);
+  fputs("             YFLIERGKNM CGLAACASYP IPLV\n", ofp);
+
+  *ret_format   = eslMSAFILE_PHYLIP;
+  *ret_alphatype = eslAMINO;
+  *ret_nseq     = 3;
+  *ret_alen     = 384;
+}
+
+static void
+utest_write_good4(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("  5    42\n", ofp);
+  fputs("Turkey    AAGCTNGGGC ATTTCAGGGT\n", ofp);
+  fputs("GAGCCCGGGC AATACAGGGT AT\n", ofp);
+  fputs("Salmo gairAAGCCTTGGC AGTGCAGGGT\n", ofp);
+  fputs("GAGCCGTGGC CGGGCACGGT AT\n", ofp);
+  fputs("H. SapiensACCGGTTGGC CGTTCAGGGT\n", ofp);
+  fputs("ACAGGTTGGC CGTTCAGGGT AA\n", ofp);
+  fputs("Chimp     AAACCCTTGC CGTTACGCTT\n", ofp);
+  fputs("AAACCGAGGC CGGGACACTC AT\n", ofp);
+  fputs("Gorilla   AAACCCTTGC CGGTACGCTT\n", ofp);
+  fputs("AAACCATTGC CGGTACGCTT AA\n", ofp);
+
+  *ret_format   = eslMSAFILE_PHYLIPS;
+  *ret_alphatype = eslDNA;
+  *ret_nseq     = 5;
+  *ret_alen     = 42;
+}
+
+static void
+utest_write_good5(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+ fputs(" 3 384\n", ofp);
+ fputs("CYS1_DICDI-----MKVILLFVLAVFTVFVSS---------------RGIPPEEQ------------SQFLEFQDKFNKKY-SHEEY\n", ofp);
+ fputs("LERFEIFKSNLGKIEELNLIAINHKADTKFGVNKFADLSSDEFKNYYLNNKEAIFTDDLPVADYLDDEFINSIPTAFDWRTRG-AVTP\n", ofp);
+ fputs("VKNQGQCGSCWSFSTTGNVEGQHFISQNKLVSLSEQNLVDCDHECMEYEGEEACDEGCNGGLQPNAYNYIIKNGGIQTESSYPYTAET\n", ofp);
+ fputs("GTQCNFNSANIGAKISNFTMIP-KNETVMAGYIVSTGPLAIAADAVE-WQFYIGGVF-DIPCN--PNSLDHGILIVGYSAKNTIFRKN\n", ofp);
+ fputs("MPYWIVKNSWGADWGEQGYIYLRRGKNTCGVSNFVSTSII--\n", ofp);
+ fputs("\n", ofp);
+ fputs("ALEU_HORVUMAHARVLLLALAVLATAAVAVASSSSFADSNPIRPVTDRAASTLESAVLGALGRTRHALRFARFAVRYGKSYESAAEVR\n", ofp);
+ fputs("RRFRIFSESLEEVRSTN----RKGLPYRLGINRFSDMSWEEFQATRL-GAAQTCSATLAGNHLMRDA--AALPETKDWREDG-IVSPVK\n", ofp);
+ fputs("NQAHCGSCWTFSTTGALEAAYTQATGKNISLSEQQLVDCAGGFNNF--------GCNGGLPSQAFEYIKYNGGIDTEESYPYKGVNGV-\n", ofp);
+ fputs("CHYKAENAAVQVLDSVNITLNAEDELKNAVGLVRPVSVAFQVIDGFRQYKSGVYTSDHCGTTPDDVNHAVLAVGYGVENGV-----PYW\n", ofp);
+ fputs("LIKNSWGADWGDNGYFKMEMGKNMCAIATCASYPVVAA\n", ofp);
+ fputs("\n", ofp);
+ fputs("CATH_HUMAN------MWATLPLLCAGAWLLGV--------PVCGAAELSVNSLEK------------FHFKSWMSKHRKTY-STEEYH\n", ofp);
+ fputs("HRLQTFASNWRKINAHN----NGNHTFKMALNQFSDMSFAEIKHKYLWSEPQNCSAT--KSNYLRGT--GPYPPSVDWRKKGNFVSPVK\n", ofp);
+ fputs("NQGACGSCWTFSTTGALESAIAIATGKMLSLAEQQLVDCAQDFNNY--------GCQGGLPSQAFEYILYNKGIMGEDTYPYQGKDGY-\n", ofp);
+ fputs("CKFQPGKAIGFVKDVANITIYDEEAMVEAVALYNPVSFAFEVTQDFMMYRTGIYSSTSCHKTPDKVNHAVLAVGYGEKNGI-----PYW\n", ofp);
+ fputs("IVKNSWGPQWGMNGYFLIERGKNMCGLAACASYPIPLV\n", ofp);
+ fputs("\n", ofp);
+
+ *ret_format   = eslMSAFILE_PHYLIPS;
+ *ret_alphatype = eslAMINO;
+ *ret_nseq     = 3;
+ *ret_alen     = 384;
+}
+
+/* a tricky one, with a nonstandard name width of 12 (all names end in xx) */
+static void
+utest_write_good6(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("  5    42\n", ofp);
+  fputs("Turkey    xxAAGCTNGGGC ATTTCAGGGT\n", ofp);
+  fputs("Salmo gairxxAAGCCTTGGC AGTGCAGGGT\n", ofp);
+  fputs("H. SapiensxxACCGGTTGGC CGTTCAGGGT\n", ofp);
+  fputs("Chimp     xxAAACCCTTGC CGTTACGCTT\n", ofp);
+  fputs("Gorilla   xxAAACCCTTGC CGGTACGCTT\n", ofp);
+  fputs("\n", ofp);
+  fputs("GAGCCCGGGC AATACAGGGT AT\n", ofp);
+  fputs("GAGCCGTGGC CGGGCACGGT AT\n", ofp);
+  fputs("ACAGGTTGGC CGTTCAGGGT AA\n", ofp);
+  fputs("AAACCGAGGC CGGGACACTC AT\n", ofp);
+  fputs("AAACCATTGC CGGTACGCTT AA\n", ofp);
+
+  *ret_format   = eslMSAFILE_PHYLIP;
+  *ret_alphatype = eslDNA;
+  *ret_nseq     = 5;
+  *ret_alen     = 42;
+}
+
+/* nonstandard name field width in a sequential file. */
+static void
+utest_write_good7(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("  5    42\n", ofp);
+  fputs("Turkey    xxAAGCTNGGGC ATTTCAGGGT\n", ofp);
+  fputs("GAGCCCGGGC AATACAGGGT AT\n", ofp);
+  fputs("\n", ofp);
+  fputs("Salmo gairxxAAGCCTTGGC AGTGCAGGGT\n", ofp);
+  fputs("GAGCCGTGGC CGGGCACGGT AT\n", ofp);
+  fputs("\n", ofp);
+  fputs("H. SapiensxxACCGGTTGGC CGTTCAGGGT\n", ofp);
+  fputs("ACAGGTTGGC CGTTCAGGGT AA\n", ofp);
+  fputs("\n", ofp);
+  fputs("Chimp     xxAAACCCTTGC CGTTACGCTT\n", ofp);
+  fputs("AAACCGAGGC CGGGACACTC AT\n", ofp);
+  fputs("\n", ofp);
+  fputs("Gorilla   xxAAACCCTTGC CGGTACGCTT\n", ofp);
+  fputs("AAACCATTGC CGGTACGCTT AA\n", ofp);
+
+  *ret_format   = eslMSAFILE_PHYLIPS;
+  *ret_alphatype = eslDNA;
+  *ret_nseq     = 5;
+  *ret_alen     = 42;
+}
+
+/* if using strict PHYLIP, 10 char namewidth results in reading a M=21 alignment,
+ * which disagrees with alen=20
+ */
+static void
+utest_write_bad1(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs("  2    20\n", ofp);
+  fputs("Turkey    xAAGCTNGGGC ATTTCAGGGT\n", ofp);
+  fputs("Salmo gairxAAGCCTTGGC AGTGCAGGGT\n", ofp);
+
+  *ret_alphatype   = eslDNA;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 3;
+  strcpy(errmsg,   "alignment length disagrees");
+}
+
+static void
+utest_write_bad2(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs("  x  2    20\n", ofp);
+  fputs("Turkey    AAGCTNGGGC ATTTCAGGGT\n", ofp);
+  fputs("Salmo gairAAGCCTTGGC AGTGCAGGGT\n", ofp);
+
+  *ret_alphatype   = eslDNA;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 1;
+  strcpy(errmsg,   "first field isn't an integer");
+}
+
+static void
+utest_write_bad3(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs("  2    x\n", ofp);
+  fputs("Turkey    AAGCTNGGGC ATTTCAGGGT\n", ofp);
+  fputs("Salmo gairAAGCCTTGGC AGTGCAGGGT\n", ofp);
+
+  *ret_alphatype   = eslDNA;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 1;
+  strcpy(errmsg,   "second field isn't an integer");
+}
+
+static void
+utest_write_bad4(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs("  2\n", ofp);
+  fputs("Turkey    AAGCTNGGGC ATTTCAGGGT\n", ofp);
+  fputs("Salmo gairAAGCCTTGGC AGTGCAGGGT\n", ofp);
+
+  *ret_alphatype   = eslDNA;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 1;
+  strcpy(errmsg,   "only one field found");
+}
+
+static void
+utest_write_bad5(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs("  2  20\n", ofp);
+  fputs("\n", ofp);
+
+  *ret_alphatype   = eslDNA;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 2;
+  strcpy(errmsg,   "no alignment data");
+}
+
+static void
+utest_write_bad6(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs(" 2 20\n", ofp);
+  fputs("seq1 \n", ofp);
+  fputs("seq2  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+
+  *ret_alphatype   = eslAMINO;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 2;
+  strcpy(errmsg,   "line too short");
+}
+
+static void
+utest_write_bad7(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs("  2 20\n", ofp);
+  fputs("\tseq1_name   ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2_name   ACDEFGHIKLMNPQRSTVWY\n", ofp);
+
+  *ret_alphatype   = eslAMINO;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 2;
+  strcpy(errmsg,   "invalid character(s) in sequence name");
+}
+
+static void
+utest_write_bad8(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs("  2 20\n", ofp);
+  fputs("seq1_name   ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2_name   ACDEFGHI~LMNPQRSTVWY\n", ofp);
+
+  *ret_alphatype   = eslAMINO;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 3;
+  strcpy(errmsg,   "one or more invalid sequence characters");
+}
+
+static void
+utest_write_bad9(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs("  2 20\n", ofp);
+  fputs("seq1_name   ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2_name   ACDEFGHIKLMNPQRSTVW\n", ofp);
+
+  *ret_alphatype   = eslAMINO;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 3;
+  strcpy(errmsg,   "number of residues on line differs from previous seqs");
+}
+
+static void
+utest_write_bad10(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs("  3 40\n", ofp);
+  fputs("seq1_name   ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2_name   ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("\n", ofp);
+  fputs("ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("ACDEFGHIKLMNPQRSTVWY\n", ofp);
+
+  *ret_alphatype   = eslAMINO;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 4;
+  strcpy(errmsg,   "unexpected number of sequences in block");
+}
+
+static void
+utest_write_bad11(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg)
+{
+  fputs("  2 30\n", ofp);
+  fputs("seq1_name   ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2_name   ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("\n", ofp);
+  fputs("            ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("            ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("\n", ofp);
+
+  *ret_alphatype   = eslAMINO;
+  *ret_errstatus  = eslEFORMAT;
+  *ret_linenumber = 7;
+  strcpy(errmsg,   "alignment length disagrees with header");
+}
+
+/* example of a pathological file where interleaved, sequential 
+ * can't be distinguished. If we read this as interleaved:
+ *  seq1      AAAAAAAAAA CCCCCCCCCC YYYYYYYYY FFFFFFFFFF GGGGGGGGGG 
+ *  YYYYYYYYY DDDDDDDDDD EEEEEEEEEE HHHHHHHHH IIIIIIIIII KKKKKKKKKK
+ * whereas if we read it as sequential:
+ *  seq1      AAAAAAAAAA CCCCCCCCCC YYYYYYYYY DDDDDDDDDD EEEEEEEEEE
+ *  YYYYYYYYY FFFFFFFFFF GGGGGGGGGG HHHHHHHHH IIIIIIIIII KKKKKKKKKK
+ * 
+ * To fall into this, sequence names have to look like a chunk of
+ * aligned sequence, with exactly the right length to give a correct 
+ * <alen> whichever way we read the file.
+ */
+static void
+utest_write_ambig1(FILE *ofp)
+{
+  fputs(" 2 49\n", ofp);
+  fputs("seq1      AAAAAAAAAA CCCCCCCCCC\n", ofp);
+  fputs("YYYYYYYYY DDDDDDDDDD EEEEEEEEEE\n", ofp);
+  fputs("YYYYYYYYY FFFFFFFFFF GGGGGGGGGG\n", ofp);
+  fputs("HHHHHHHHH IIIIIIIIII KKKKKKKKKK\n", ofp);
+};
+
+
+
+
+
+static void
+utest_goodfile(char *filename, int testnumber, int expected_format, int expected_alphatype, int expected_nseq, int expected_alen)
+{
+  ESL_ALPHABET        *abc          = NULL;
+  ESL_MSAFILE         *afp          = NULL;
+  ESL_MSAFILE_FMTDATA fmtd;                      /* for writing formats with nonstandard name field widths */
+  ESL_MSA             *msa1         = NULL;
+  ESL_MSA             *msa2         = NULL;
+  char                 tmpfile1[32] = "esltmpXXXXXX";
+  char                 tmpfile2[32] = "esltmpXXXXXX";
+  FILE                *ofp          = NULL;
+  int                  status;
+
+  esl_msafile_fmtdata_Init(&fmtd);
+  
+  /* guessing both the format and the alphabet should work: this is a digital open */
+  if ( (status = esl_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("phylip good file unit test %d failed: digital open",           testnumber);  
+  if (afp->format != expected_format)                                                              esl_fatal("phylip good file unit test %d failed: format autodetection",   testnumber);
+  if (abc->type   != expected_alphatype)                                                           esl_fatal("phylip good file unit test %d failed: alphabet autodetection", testnumber);
+
+  /* This is a digital read, using <abc>. */
+  if ( (status = esl_msafile_phylip_Read(afp, &msa1))   != eslOK) esl_fatal("phylip good file unit test %d failed: msa read, digital", testnumber);  
+  if (msa1->nseq != expected_nseq || msa1->alen != expected_alen) esl_fatal("phylip good file unit test %d failed: nseq/alen",         testnumber);
+  if (esl_msa_Validate(msa1, NULL) != eslOK)                      esl_fatal("phylip good file test %d failed: msa1 invalid",           testnumber);
+  fmtd.namewidth = afp->fmtd.namewidth;
+  esl_msafile_Close(afp);  
+
+  /* write it back out to a new tmpfile (digital write) */
+  if ( (status = esl_tmpfile_named(tmpfile1, &ofp))                           != eslOK) esl_fatal("phylip good file unit test %d failed: tmpfile creation",   testnumber);
+  if ( (status = esl_msafile_phylip_Write(ofp, msa1, expected_format, &fmtd)) != eslOK) esl_fatal("phylip good file unit test %d failed: msa write, digital", testnumber);
+  fclose(ofp);
+
+  /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */
+  if ( (status = esl_msafile_Open(NULL, tmpfile1, NULL, expected_format, &fmtd, &afp)) != eslOK) esl_fatal("phylip good file unit test %d failed: text mode open", testnumber);  
+  if ( (status = esl_msafile_phylip_Read(afp, &msa2))                                  != eslOK) esl_fatal("phylip good file unit test %d failed: msa read, text", testnumber);  
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                     esl_fatal("phylip good file test %d failed: msa2 invalid",        testnumber);
+  if (msa2->nseq != expected_nseq || msa2->alen != expected_alen)                                esl_fatal("phylip good file unit test %d failed: nseq/alen",      testnumber);
+  fmtd.namewidth = afp->fmtd.namewidth;
+  esl_msafile_Close(afp);
+  
+  /* write it back out to a new tmpfile (text write) */
+  if ( (status = esl_tmpfile_named(tmpfile2, &ofp))                           != eslOK) esl_fatal("phylip good file unit test %d failed: tmpfile creation", testnumber);
+  if ( (status = esl_msafile_phylip_Write(ofp, msa2, expected_format, &fmtd)) != eslOK) esl_fatal("phylip good file unit test %d failed: msa write, text", testnumber);
+  fclose(ofp);
+  esl_msa_Destroy(msa2);
+
+  /* open and read it in digital mode */
+  if ( (status = esl_msafile_Open(&abc, tmpfile1, NULL, expected_format, &fmtd, &afp)) != eslOK) esl_fatal("phylip good file unit test %d failed: 2nd digital mode open", testnumber);  
+  if ( (status = esl_msafile_phylip_Read(afp, &msa2))                                  != eslOK) esl_fatal("phylip good file unit test %d failed: 2nd digital msa read",  testnumber);  
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                     esl_fatal("phylip good file test %d failed: msa2 invalid",               testnumber);
+  esl_msafile_Close(afp);
+
+  /* this msa <msa2> should be identical to <msa1> */
+  if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("phylip good file unit test %d failed: msa compare", testnumber);  
+
+  remove(tmpfile1);
+  remove(tmpfile2);
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_alphabet_Destroy(abc);
+}
+
+/* utest_badfile:
+ * Test the strict PHYLIP parser's ability to detect bad input;
+ * regression test its user-directed error messages.
+ *
+ * note: this test uses strict phylip, with 10 char name width.
+ *       it's not using the format guesser, which could determine a nonstandard name width
+ *       some "bad" utests can be parsed differently by esl_msafile_phylip_example, 
+ *       which does use the format guesser
+ *
+ * TODO: we should also have "bad" tests for sequential PHYLIP, and for
+ *       nonstandard name widths.
+ *       
+ */
+static void
+utest_badfile(char *filename, int testnumber, int expected_alphatype, int expected_status, int expected_linenumber, char *expected_errmsg)
+{
+  ESL_ALPHABET *abc = esl_alphabet_Create(expected_alphatype);
+  ESL_MSAFILE  *afp = NULL;
+  ESL_MSA      *msa = NULL;
+  int           status;
+
+  if ( (status = esl_msafile_Open(&abc, filename, NULL, eslMSAFILE_PHYLIP, NULL, &afp)) != eslOK)  esl_fatal("phylip bad file unit test %d failed: unexpected open failure", testnumber);
+  if ( (status = esl_msafile_phylip_Read(afp, &msa)) != expected_status)                           esl_fatal("phylip bad file unit test %d failed: unexpected error code",   testnumber);
+  if (strstr(afp->errmsg, expected_errmsg) == NULL)                                                esl_fatal("phylip bad file unit test %d failed: unexpected errmsg",       testnumber);
+  if (afp->linenumber != expected_linenumber)                                                      esl_fatal("phylip bad file unit test %d failed: unexpected linenumber",   testnumber);
+  esl_msafile_Close(afp);
+  esl_alphabet_Destroy(abc);
+  esl_msa_Destroy(msa);
+}
+
+static void
+utest_ambigfile(char *filename, int testnumber)
+{
+  ESL_BUFFER *bf = NULL;
+  int         fmt;
+  int         namewidth;
+
+  if ( esl_buffer_Open(filename, NULL, &bf)                     != eslOK)         esl_fatal("phylip ambig file unit test %d failed: buffer open",         testnumber);
+  if ( esl_msafile_phylip_CheckFileFormat(bf, &fmt, &namewidth) != eslEAMBIGUOUS) esl_fatal("phylip ambig file unit test %d failed: ambiguity detection", testnumber);
+  if ( fmt       != eslMSAFILE_UNKNOWN )                                          esl_fatal("phylip ambig file unit test %d failed: format code",         testnumber);
+  if ( namewidth != 0 )                                                           esl_fatal("phylip ambig file unit test %d failed: namewidth not 0",     testnumber);
+  esl_buffer_Close(bf);
+}
+  
+
+/* PHYLIP's seqboot program can output many MSAs to the same phylip file.
+ * For this reason (only), we allow PHYLIP format to have multiple MSAs per file.
+ * PHYLIP format 'officially' does not document this!
+ */
+static void
+utest_seqboot(void)
+{
+  char  msg[] = "seqboot unit test failed";
+  char  tmpfile[32];
+  FILE *ofp;
+  int   expected_fmt;
+  int   expected_alphatype;
+  int   expected_nseq;
+  int   expected_alen;
+  int   expected_nali;
+  int   i;
+  ESL_ALPHABET *abc = NULL;
+  ESL_MSAFILE  *afp = NULL;
+  ESL_MSA      *msa = NULL;
+
+  /* Write a tmp testfile with good1 concatenated 3 times. */
+  expected_nali = 3;
+  strcpy(tmpfile, "esltmpXXXXXX");
+  if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+  for (i = 0; i < expected_nali; i++)
+    utest_write_good1(ofp, &expected_fmt, &expected_alphatype, &expected_nseq, &expected_alen);
+  fclose(ofp);
+  
+  /* open it and loop over it, reading MSAs. there should be 3, of the expected size.  */
+  if (esl_msafile_Open(&abc, tmpfile, /*env=*/NULL, eslMSAFILE_UNKNOWN, /*fmtd=*/NULL, &afp) != eslOK) esl_fatal(msg);
+  if (abc->type   != expected_alphatype) esl_fatal(msg);
+  if (afp->format != expected_fmt)       esl_fatal(msg);
+  i = 0;
+  while ( esl_msafile_Read(afp, &msa) == eslOK)
+    {
+      i++;
+      if (msa->nseq != expected_nseq) esl_fatal(msg);
+      if (msa->alen != expected_alen) esl_fatal(msg);
+      esl_msa_Destroy(msa);
+    }
+  if (i != expected_nali) esl_fatal(msg);
+
+  remove(tmpfile);
+  esl_msafile_Close(afp);
+  esl_alphabet_Destroy(abc);
+}
+
+#endif /*eslMSAFILE_PHYLIP_TESTDRIVE*/
+/*---------------------- end, unit tests ------------------------*/
+
+
+
+/*****************************************************************
+ * 7. Test driver
+ *****************************************************************/
+
+#ifdef eslMSAFILE_PHYLIP_TESTDRIVE
+/* compile: gcc -g -Wall -I. -L. -o esl_msafile_phylip_utest -DeslMSAFILE_PHYLIP_TESTDRIVE esl_msafile_phylip.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_phylip_utest -DeslMSAFILE_PHYLIP_TESTDRIVE esl_msafile_phylip.c -leasel -lm
+ * run:     ./esl_msafile_phylip_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_msafile.h"
+#include "esl_msafile_phylip.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for PHYLIP MSA format module";
+
+int
+main(int argc, char **argv)
+{
+  char            msg[]        = "PHYLIP MSA i/o module test driver failed";
+  ESL_GETOPTS    *go           = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  FILE           *ofp          = NULL;
+  int             ngoodtests   = 7;
+  int             nbadtests    = 11;
+  int             nambigtests  = 1;
+  int             testnumber   = 0;
+  char            tmpfile[32];
+  int             expected_format;
+  int             expected_alphatype;
+  int             expected_errstatus;
+  int             expected_linenumber;
+  int             expected_nseq;
+  int             expected_alen;
+  char            expected_errmsg[eslERRBUFSIZE];
+
+  /* Test various correct versions of the format */
+  for (testnumber = 1; testnumber <= ngoodtests; testnumber++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX"); 
+      if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+      switch (testnumber) {
+      case  1:  utest_write_good1 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  2:  utest_write_good2 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  3:  utest_write_good3 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  4:  utest_write_good4 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  5:  utest_write_good5 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  6:  utest_write_good6 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  7:  utest_write_good7 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      }
+      fclose(ofp);
+      utest_goodfile(tmpfile, testnumber, expected_format, expected_alphatype, expected_nseq, expected_alen);
+      remove(tmpfile);
+    }
+
+  /* Test for all the possible EFORMAT errors (using strict Phylip interleaved parser) */
+  for (testnumber = 1; testnumber <= nbadtests; testnumber++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX"); 
+      if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+    
+      switch (testnumber) {
+      case  1:  utest_write_bad1 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      case  2:  utest_write_bad2 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      case  3:  utest_write_bad3 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      case  4:  utest_write_bad4 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      case  5:  utest_write_bad5 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      case  6:  utest_write_bad6 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      case  7:  utest_write_bad7 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      case  8:  utest_write_bad8 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      case  9:  utest_write_bad9 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      case 10:  utest_write_bad10(ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      case 11:  utest_write_bad11(ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break;
+      }
+      fclose(ofp);
+      
+      utest_badfile(tmpfile, testnumber, expected_alphatype, expected_errstatus, expected_linenumber, expected_errmsg);
+      remove(tmpfile);
+    }
+
+  /* Test that we correctly detect pathological files that look both interleaved and sequential */
+  for (testnumber = 1; testnumber <= nambigtests; testnumber++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX"); 
+      if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+
+      switch (testnumber) {
+      case  1:  utest_write_ambig1 (ofp);
+      }
+      fclose(ofp);
+
+      utest_ambigfile(tmpfile, testnumber);
+      remove(tmpfile);
+    }
+
+
+  /* Other tests */
+  utest_seqboot();
+
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslMSAFILE_PHYLIP_TESTDRIVE*/
+/*--------------------- end, test driver ------------------------*/
+
+  
+
+/*****************************************************************
+ * 8. Example.
+ *****************************************************************/
+
+#ifdef eslMSAFILE_PHYLIP_EXAMPLE
+/* A full-featured example of reading/writing an MSA in Phylip format(s).
+   gcc -g -Wall -o esl_msafile_phylip_example -I. -L. -DeslMSAFILE_PHYLIP_EXAMPLE esl_msafile_phylip.c -leasel -lm
+   ./esl_msafile_phylip_example <msafile>
+ */
+/*::cexcerpt::msafile_phylip_example::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_phylip.h"
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",        0 },
+  { "-1",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-1", "no autodetection; use interleaved PHYLIP",    0 },
+  { "-2",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-2", "no autodetection; use sequential PHYLIPS",    0 },
+  { "-q",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "quieter: don't write msa back, just summary", 0 },
+  { "-t",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use text mode: no digital alphabet",          0 },
+  { "-w",          eslARG_INT,         "10",  NULL, NULL,  NULL,  NULL, NULL, "specify that format's name width is <n>",     0 },
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is DNA",                0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is RNA",                0 },
+  { "--amino",     eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is protein",            0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msafile>";
+static char banner[] = "example of guessing, reading, writing PHYLIP formats";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS        *go          = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char               *filename    = esl_opt_GetArg(go, 1);
+  int                 infmt       = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET       *abc         = NULL;
+  ESL_MSAFILE        *afp         = NULL;
+  ESL_MSA            *msa         = NULL;
+  ESL_MSAFILE_FMTDATA fmtd;
+  int                 status;
+
+  if      (esl_opt_GetBoolean(go, "-1"))      infmt = eslMSAFILE_PHYLIP;  /* interleaved format */
+  else if (esl_opt_GetBoolean(go, "-2"))      infmt = eslMSAFILE_PHYLIPS; /* sequential format  */
+
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); 
+
+  /* Variant PHYLIP formats allow nonstandard name field width. 
+   * Usually we can successfully guess this, when guessing format.
+   * But if PHYLIP or PHYLIPS format is set (no guessing), caller may also 
+   * want to allow a nonstandard name field width to be set.
+   */
+  esl_msafile_fmtdata_Init(&fmtd);
+  fmtd.namewidth = esl_opt_GetInteger(go, "-w");
+  
+  /* Text mode: pass NULL for alphabet.
+   * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed 
+   */
+  if   (esl_opt_GetBoolean(go, "-t"))  status = esl_msafile_Open(NULL, filename, NULL, infmt, &fmtd, &afp);
+  else                                 status = esl_msafile_Open(&abc, filename, NULL, infmt, &fmtd, &afp);
+  if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+
+  if ( (status = esl_msafile_phylip_Read(afp, &msa)) != eslOK)
+    esl_msafile_ReadFailure(afp, status);
+
+  printf("format variant: %s\n", esl_msafile_DecodeFormat(afp->format));
+  printf("name width:     %d\n", afp->fmtd.namewidth); 
+  printf("alphabet:       %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)"));
+  printf("# of seqs:      %d\n", msa->nseq);
+  printf("# of cols:      %d\n", (int) msa->alen);
+  printf("\n");
+
+  if (afp->fmtd.namewidth != 10) fmtd.namewidth = afp->fmtd.namewidth;
+
+  if (! esl_opt_GetBoolean(go, "-q"))
+    esl_msafile_phylip_Write(stdout, msa, eslMSAFILE_PHYLIP, &fmtd);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  if (abc) esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+/*::cexcerpt::msafile_phylip_example::end::*/
+#endif /*eslMSAFILE_PHYLIP_EXAMPLE*/
+
+
+
+#ifdef eslMSAFILE_PHYLIP_EXAMPLE2
+/* A minimal example. Reading a strict interleaved PHYLIP MSA in text mode. 
+   gcc -g -Wall -o esl_msafile_phylip_example2 -I. -L. -DeslMSAFILE_PHYLIP_EXAMPLE2 esl_msafile_phylip.c -leasel -lm
+   ./esl_msafile_phylip_example2 <msafile>
+ */
+/*::cexcerpt::msafile_phylip_example2::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_phylip.h"
+
+int 
+main(int argc, char **argv)
+{
+  char         *filename = argv[1];
+  int           infmt    = eslMSAFILE_PHYLIP; /* or eslMSAFILE_PHYLIPS, for sequential format */
+  ESL_MSAFILE  *afp      = NULL;
+  ESL_MSA      *msa      = NULL;
+  int           status;
+
+  if ( (status = esl_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp)) != eslOK) esl_msafile_OpenFailure(afp, status);
+  if ( (status = esl_msafile_phylip_Read(afp, &msa))                        != eslOK) esl_msafile_ReadFailure(afp, status);
+
+  printf("# of seqs:      %d\n", msa->nseq);
+  printf("# of cols:      %d\n", (int) msa->alen);
+  printf("\n");
+
+  esl_msafile_phylip_Write(stdout, msa, eslMSAFILE_PHYLIP, NULL);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  exit(0);
+}
+/*::cexcerpt::msafile_phylip_example::end::*/
+#endif /*eslMSAFILE_PHYLIP_EXAMPLE*/
+/*--------------------- end of examples -------------------------*/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_phylip.h b/esl_msafile_phylip.h
new file mode 100644
index 0000000..4157c91
--- /dev/null
+++ b/esl_msafile_phylip.h
@@ -0,0 +1,19 @@
+/* I/O of multiple sequence alignments in PHYLIP format
+ */
+#ifndef eslMSAFILE_PHYLIP_INCLUDED
+#define eslMSAFILE_PHYLIP_INCLUDED
+
+#include "esl_msa.h"
+#include "esl_msafile.h"
+
+extern int esl_msafile_phylip_SetInmap     (ESL_MSAFILE *afp);
+extern int esl_msafile_phylip_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type);
+extern int esl_msafile_phylip_Read         (ESL_MSAFILE *afp, ESL_MSA **ret_msa);
+extern int esl_msafile_phylip_Write        (FILE *fp, const ESL_MSA *msa, int format, ESL_MSAFILE_FMTDATA *opt_fmtd);
+
+extern int esl_msafile_phylip_CheckFileFormat(ESL_BUFFER *bf, int *ret_format, int *ret_namewidth);
+
+#endif /* eslMSAFILE_PHYLIP_INCLUDED */
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_psiblast.c b/esl_msafile_psiblast.c
new file mode 100644
index 0000000..b83f005
--- /dev/null
+++ b/esl_msafile_psiblast.c
@@ -0,0 +1,819 @@
+/* I/O of multiple sequence alignments in PSI-BLAST format
+ * 
+ * Contents:
+ *   1. API for reading/writing PSI-BLAST format
+ *   2. Unit tests.
+ *   3. Test driver.
+ *   4. Examples.
+ *   5. Copyright and license information.
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#include "esl_mem.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_psiblast.h"
+
+/*****************************************************************
+ *# 1. API for reading/writing PSI-BLAST format
+ *****************************************************************/
+
+/* Function:  esl_msafile_psiblast_SetInmap()
+ * Synopsis:  Set input map specific for PSI-BLAST input.
+ *
+ * Purpose:   Set the <afp->inmap> for PSI-BLAST format.
+ *            
+ *            PSI-BLAST only allows - for a gap. It also disallows O residues.
+ *
+ *            Text mode accepts any <isalpha()> character plus '-' but not 'O' or 'o'.
+ *            Digital mode enforces the usual Easel alphabets, but disallows "._*~".
+ */
+int
+esl_msafile_psiblast_SetInmap(ESL_MSAFILE *afp)
+{
+   int sym;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc)
+    {
+      for (sym = 0; sym < 128; sym++) 
+	afp->inmap[sym] = afp->abc->inmap[sym];
+      afp->inmap[0]   = esl_abc_XGetUnknown(afp->abc);
+      afp->inmap['.'] = eslDSQ_ILLEGAL;
+      afp->inmap['_'] = eslDSQ_ILLEGAL;
+      afp->inmap['*'] = eslDSQ_ILLEGAL;
+      afp->inmap['~'] = eslDSQ_ILLEGAL;
+    }
+#endif
+  if (! afp->abc)
+    {
+      for (sym = 1; sym < 128; sym++) 
+	afp->inmap[sym] = (isalpha(sym) ? sym : eslDSQ_ILLEGAL);
+      afp->inmap[0]   = '?';
+      afp->inmap['-'] = '-';
+    }
+
+  afp->inmap['O'] = eslDSQ_ILLEGAL;
+  afp->inmap['o'] = eslDSQ_ILLEGAL;
+  return eslOK;
+}
+
+/* Function:  esl_msafile_psiblast_GuessAlphabet()
+ * Synopsis:  Guess the alphabet of an open PSI-BLAST MSA file.
+ *
+ * Purpose:   Guess the alpbabet of the sequences in open
+ *            PSI-BLAST format MSA file <afp>.
+ *            
+ *            On a normal return, <*ret_type> is set to <eslDNA>,
+ *            <eslRNA>, or <eslAMINO>, and <afp> is reset to its
+ *            original position.
+ *
+ * Args:      afp      - open PSI-BLAST format MSA file
+ *            ret_type - RETURN: <eslDNA>, <eslRNA>, or <eslAMINO>       
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslENOALPHABET> if alphabet type can't be determined.
+ *            In either case, <afp> is rewound to the position it
+ *            started at.
+ */
+int
+esl_msafile_psiblast_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type)
+{
+  int       alphatype     = eslUNKNOWN;
+  esl_pos_t anchor        = -1;
+  int       threshold[3]  = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */
+  int       nsteps        = 3;
+  int       step          = 0;
+  int       nres          = 0;
+  int       x;
+  int64_t   ct[26];
+  char     *p, *tok;
+  esl_pos_t n,  toklen, pos;
+  int       status;
+
+  for (x = 0; x < 26; x++) ct[x] = 0;
+
+  anchor = esl_buffer_GetOffset(afp->bf);
+  if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */
+
+  while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK)
+    {
+      if ((status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK) continue; /* blank lines */
+      /* p now points to the rest of the sequence line, after a name */
+      
+      /* count characters into ct[] array */
+      for (pos = 0; pos < n; pos++)
+	if (isalpha(p[pos])) {
+	  x = toupper(p[pos]) - 'A';
+	  ct[x]++;
+	  nres++; 
+	}
+
+      /* try to stop early, checking after 500, 5000, and 50000 residues: */
+      if (step < nsteps && nres > threshold[step]) {
+	if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */
+	step++;
+      }
+    }
+  if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */
+  status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */
+
+ DONE:
+  esl_buffer_SetOffset(afp->bf, anchor);   /* Rewind to where we were. */
+  esl_buffer_RaiseAnchor(afp->bf, anchor);
+  *ret_type = alphatype;
+  return status;
+
+ ERROR:
+  if (anchor != -1) {
+    esl_buffer_SetOffset(afp->bf, anchor);
+    esl_buffer_RaiseAnchor(afp->bf, anchor);
+  }
+  *ret_type = eslUNKNOWN;
+  return status;
+}
+
+/* Function:  esl_msafile_psiblast_Read()
+ * Synopsis:  Read an alignment in PSI-BLAST's input format.
+ *
+ * Purpose:   Read an MSA from an open <ESL_MSAFILE> <afp>, parsing for
+ *            PSI-BLAST input format, starting from the current point.
+ *            Create a new multiple alignment, and return a ptr to 
+ *            that alignment via <*ret_msa>. Caller is responsible for
+ *            free'ing this <ESL_MSA>.
+ *            
+ *            The <msa> has a reference line (<msa->rf[]>) that
+ *            corresponds to the uppercase/lowercase columns in the
+ *            alignment: consensus (uppercase) columns are marked 'x',
+ *            and insert (lowercase) columns are marked '.' in this RF
+ *            line.
+ *            
+ * Args:      afp     - open <ESL_MSAFILE>
+ *            ret_msa - RETURN: newly parsed <ESL_MSA>
+ *
+ * Returns:   <eslOK> on success. <*ret_msa> contains the newly
+ *            allocated MSA. <afp> is at EOF.
+ *
+ *            <eslEOF> if no (more) alignment data are found in
+ *            <afp>, and <afp> is returned at EOF. 
+ *
+ *            <eslEFORMAT> on a parse error. <*ret_msa> is set to
+ *            <NULL>. <afp> contains information sufficient for
+ *            constructing useful diagnostic output: 
+ *            | <afp->errmsg>       | user-directed error message     |
+ *            | <afp->linenumber>   | line # where error was detected |
+ *            | <afp->line>         | offending line (not NUL-term)   |
+ *            | <afp->n>            | length of offending line        |
+ *            | <afp->bf->filename> | name of the file                |
+ *            and <afp> is poised at the start of the following line,
+ *            so (in principle) the caller could try to resume
+ *            parsing.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslESYS> if a system call fails, such as fread().
+ *            <eslEINCONCEIVABLE> - "impossible" corruption 
+ *            On these, <*ret_msa> is returned <NULL>, and the state of
+ *            <afp> is undefined.
+ */
+int
+esl_msafile_psiblast_Read(ESL_MSAFILE *afp, ESL_MSA **ret_msa)
+{
+  ESL_MSA  *msa      = NULL;
+  int       idx      = 0;	/* counter over sequences in a block */
+  int       nblocks  = 0;	/* counter over blocks */
+  int64_t   alen     = 0;	
+  int       nseq     = 0;
+  int64_t   cur_alen;
+  esl_pos_t pos;		/* position on a line */
+  esl_pos_t name_start,      name_len;
+  esl_pos_t seq_start,       seq_len;
+  esl_pos_t block_seq_start, block_seq_len;
+  int       status;
+
+  ESL_DASSERT1( (afp->format == eslMSAFILE_PSIBLAST) );
+
+  afp->errmsg[0] = '\0';
+  
+  /* allocate a growable MSA. We set msa->{nseq,alen} only when we're done. */
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc   &&  (msa = esl_msa_CreateDigital(afp->abc, 16, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+#endif
+  if (! afp->abc &&  (msa = esl_msa_Create(                 16, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+
+  /* skip leading blank lines in file */
+  while ( (status = esl_msafile_GetLine(afp, NULL, NULL)) == eslOK && esl_memspn(afp->line, afp->n, " \t") == afp->n) ;
+  if (status != eslOK)  goto ERROR; /* includes normal EOF */
+  
+  /* Read the file a line at a time; if a parsing error occurs, detect immediately, with afp->linenumber set correctly */
+   do { /* while in the file... */
+    idx = 0;
+    do { /* while in a block... */
+      for (pos = 0;     pos < afp->n; pos++) if (! isspace(afp->line[pos])) break;  name_start = pos; 
+      for (pos = pos+1; pos < afp->n; pos++) if (  isspace(afp->line[pos])) break;  name_len   = pos - name_start;
+      for (pos = pos+1; pos < afp->n; pos++) if (! isspace(afp->line[pos])) break;  seq_start  = pos;      
+      if (pos >= afp->n) ESL_XFAIL(eslEFORMAT, afp->errmsg, "invalid alignment line");
+      for (pos = afp->n-1; pos > 0; pos--)   if (! isspace(afp->line[pos])) break;  seq_len    = pos - seq_start + 1;
+
+      if (idx == 0) {
+	block_seq_start = seq_start;
+	block_seq_len   = seq_len;
+      } else {
+	if (seq_start != block_seq_start) ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence start is misaligned");
+	if (seq_len   != block_seq_len)   ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence end is misaligned");
+      }
+      
+      /* Process the consensus #=RF line. */
+      if (idx == 0) {
+	ESL_REALLOC(msa->rf, sizeof(char) * (alen + seq_len + 1));
+	for (pos = 0; pos < seq_len; pos++) msa->rf[alen+pos] = '-'; /* anything neutral other than . or x will do. */
+	msa->rf[alen+pos] = '\0';
+      }
+      for (pos = 0; pos < seq_len; pos++) 
+	{
+	  if (afp->line[seq_start+pos] == '-') continue;
+	  if (isupper(afp->line[seq_start+pos])) {
+	    if (msa->rf[alen+pos] == '.') ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected upper case residue (#%d on line)", (int) pos+1);
+	    msa->rf[alen+pos] = 'x';
+	  }
+	  if (islower(afp->line[seq_start+pos])) {
+	    if (msa->rf[alen+pos] == 'x') ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected lower case residue (#%d on line)", (int) pos+1);
+	    msa->rf[alen+pos] = '.';
+	  }
+	}
+
+      /* Store the sequence name. */
+      if (nblocks == 0)	{
+	/* make sure we have room for another sequence */
+	if (idx >= msa->sqalloc &&  (status = esl_msa_Expand(msa))                   != eslOK) goto ERROR;
+	if ( (status = esl_msa_SetSeqName(msa, idx, afp->line+name_start, name_len)) != eslOK) goto ERROR;
+      } else {
+	if (! esl_memstrcmp(afp->line+name_start, name_len, msa->sqname[idx]))
+	  ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected sequence %s on this line, but saw %.*s", msa->sqname[idx], (int) name_len, afp->line+name_start);
+      }
+
+      /* Append the sequence. */
+      cur_alen = alen;
+#ifdef eslAUGMENT_ALPHABET
+      if (msa->abc)    { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[idx]),   &(cur_alen), afp->line+seq_start, seq_len); }
+#endif
+      if (! msa->abc)  { status = esl_strmapcat (afp->inmap, &(msa->aseq[idx]), &(cur_alen), afp->line+seq_start, seq_len); }
+      if      (status == eslEINVAL)    ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters");
+      else if (status != eslOK)        goto ERROR;
+      if (cur_alen - alen != seq_len)  ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected number of seq characters");
+      
+      /* get next line. if it's blank, or if we're EOF, we're done with the block */
+      idx++;
+      status = esl_msafile_GetLine(afp, NULL, NULL);
+    } while (status == eslOK && esl_memspn(afp->line, afp->n, " \t") < afp->n); /* blank line ends a block. */
+    if (status != eslOK && status != eslEOF) goto ERROR; 
+    /* End of one block */
+    
+    if     (nblocks == 0) nseq = idx;
+    else if (idx != nseq) ESL_XFAIL(eslEFORMAT, afp->errmsg, "last block didn't contain same # of seqs as earlier blocks");
+    alen += block_seq_len;
+    nblocks++;
+
+    /* skip blank lines to start of next block, if any */
+    while ( (status = esl_msafile_GetLine(afp, NULL, NULL)) == eslOK  && esl_memspn(afp->line, afp->n, " \t") == afp->n) ;
+   } while (status == eslOK);
+   if (status != eslEOF) goto ERROR;
+   
+   msa->nseq = nseq;
+   msa->alen = alen;
+   if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR;
+   *ret_msa  = msa;
+   return eslOK;
+
+ ERROR:
+  if (msa) esl_msa_Destroy(msa);
+  *ret_msa = NULL;
+  return status;
+}
+
+
+/* Function:  esl_msafile_psiblast_Write()
+ * Synopsis:  Write an MSA to a stream in PSI-BLAST format
+ *
+ * Purpose:   Write alignment <msa> in NCBI PSI-BLAST format to 
+ *            stream <fp>.
+ *            
+ *            The <msa> should have a valid reference line <msa->rf>,
+ *            with alphanumeric characters marking consensus (match)
+ *            columns, and non-alphanumeric characters marking
+ *            nonconsensus (insert) columns. If it does not have RF
+ *            annotation, then the first sequence in the <msa> 
+ *            defines the "consensus".
+ *            
+ *            PSI-BLAST format allows only one symbol ('-') for gaps,
+ *            and cannot represent missing data symbols (Easel's
+ *            '~'). Any missing data symbols are converted to gaps.
+ *
+ * Args:      fp  - open output stream
+ *            msa - MSA to write       
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEWRITE> on any system write failure, such as filled disk.
+ */
+int
+esl_msafile_psiblast_Write(FILE *fp, const ESL_MSA *msa)
+{
+  char    *buf = NULL;
+  int      cpl = 60;
+  int      acpl;
+  int      i;
+  int      sym;
+  int64_t  pos, bpos;
+  int      maxnamewidth = esl_str_GetMaxWidth(msa->sqname, msa->nseq);
+  int      is_consensus;
+  int      is_residue;
+  int      status;
+
+  ESL_ALLOC(buf, sizeof(char) * (cpl+1));
+
+  for (pos = 0; pos < msa->alen; pos += cpl)
+    {
+      for (i = 0; i < msa->nseq; i++)
+	{
+	  acpl =  (msa->alen - pos > cpl)? cpl : msa->alen - pos;
+
+#ifdef eslAUGMENT_ALPHABET
+	  if (msa->abc)
+	    {
+	      for (bpos = 0; bpos < acpl; bpos++)
+		{
+		  sym          = msa->abc->sym[msa->ax[i][pos + bpos + 1]];
+		  is_residue   = esl_abc_XIsResidue(msa->abc, msa->ax[i][pos+bpos+1]);
+		  if (msa->rf) is_consensus = (isalnum(msa->rf[pos + bpos]) ? TRUE : FALSE);
+		  else         is_consensus = (esl_abc_XIsResidue(msa->abc, msa->ax[0][pos+bpos+1]) ? TRUE : FALSE);
+				      
+		  if (is_consensus) { buf[bpos] = (is_residue ? toupper(sym) : '-'); }
+		  else              { buf[bpos] = (is_residue ? tolower(sym) : '-'); }
+		}
+	    }
+#endif
+	  if (! msa->abc)
+	    {
+	      for (bpos = 0; bpos < acpl; bpos++)
+		{
+		  sym          = msa->aseq[i][pos + bpos];
+		  is_residue   = isalnum(sym);
+		  if (msa->rf) is_consensus = (isalnum(msa->rf[pos + bpos]) ? TRUE : FALSE);
+		  else         is_consensus = (isalnum(msa->aseq[0][pos+bpos]) ? TRUE : FALSE);
+
+		  if (is_consensus) { buf[bpos] = (is_residue ? toupper(sym) : '-'); }
+		  else              { buf[bpos] = (is_residue ? tolower(sym) : '-'); }
+		}
+	    }
+	  buf[acpl] = '\0';	      
+	  if (fprintf(fp, "%-*s  %s\n", maxnamewidth, msa->sqname[i], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "psiblast msa write failed");
+	}  /* end loop over sequences */
+
+      if (pos + cpl < msa->alen) 
+	{ if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "psiblast msa write failed"); }
+    }
+  free(buf);
+  return eslOK;
+
+ ERROR:
+  if (buf) free(buf);
+  return status;
+}
+/*----------- end, API for i/o of psi-blast format --------------*/
+
+
+
+/*****************************************************************
+ * 2. Unit tests.
+ *****************************************************************/
+#ifdef eslMSAFILE_PSIBLAST_TESTDRIVE
+static void
+utest_write_good1(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("MYG_PHYCA   --------V-LSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKT\n", ofp);
+  fputs("GLB5_PETMA  pivdtgsvApLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT\n", ofp);
+  fputs("HBB_HUMAN   --------VhLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLST\n", ofp);
+  fputs("HBA_HUMAN   --------V-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-----\n", ofp);
+  fputs("\n", ofp);
+  fputs("MYG_PHYCA   EAEMKASEDLKKHGVTVLTALGAILKKKGH---HEAELKPLAQSHATKHKIPIKYLEFIS\n", ofp);
+  fputs("GLB5_PETMA  ADQLKKSADVRWHAERIINAVNDAVASMDDtekMSMKLRDLSGKHAKSFQVDPQYFKVLA\n", ofp);
+  fputs("HBB_HUMAN   PDAVMGNPKVKAHGKKVLGAFSDGLAHLDN---LKGTFATLSELHCDKLHVDPENFRLLG\n", ofp);
+  fputs("HBA_HUMAN   -DLSHGSAQVKGHGKKVADALTNAVAHVDD---MPNALSALSDLHAHKLRVDPVNFKLLS\n", ofp);
+  fputs("\n", ofp);
+  fputs("MYG_PHYCA   EAIIHVLHSRHPGDFGADAQGAMNKALELFRKDIAAKYKELGYQG\n", ofp);
+  fputs("GLB5_PETMA  AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------\n", ofp);
+  fputs("HBB_HUMAN   NVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH------\n", ofp);
+  fputs("HBA_HUMAN   HCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR------\n", ofp);
+
+  *ret_alphatype = eslAMINO;
+  *ret_nseq      = 4;
+  *ret_alen      = 165;
+}
+
+static void
+utest_write_good2(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("tRNA2  UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGG-AGACCGGGGUUCGACU\n", ofp);
+  fputs("tRNA3  UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCcAGAUCGGGGUUCAAUU\n", ofp);
+  fputs("tRNA5  GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGaGGUCAUCGGUUCGAUU\n", ofp);
+  fputs("tRNA1  GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGaGGUCCUGUGUUCGAUC\n", ofp);
+  fputs("tRNA4  GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUuGGUCCUUAGUUCGAUC\n", ofp);
+  fputs("\n", ofp);
+  fputs("tRNA2  CCCCGUAUCGGAG\n", ofp);
+  fputs("tRNA3  CCCCGUCGCGGAG\n", ofp);
+  fputs("tRNA5  CCGGUUGCGUCCA\n", ofp);
+  fputs("tRNA1  CACAGAAUUCGCA\n", ofp);
+  fputs("tRNA4  CUGAGUGCGAGCU\n", ofp);
+  *ret_alphatype = eslRNA;
+  *ret_nseq      = 5;
+  *ret_alen      = 73;
+}
+
+static void
+utest_goodfile(char *filename, int testnumber, int expected_alphatype, int expected_nseq, int expected_alen)
+{
+  ESL_ALPHABET        *abc          = NULL;
+  ESL_MSAFILE         *afp          = NULL;
+  ESL_MSA             *msa1         = NULL;
+  ESL_MSA             *msa2         = NULL;
+  char                 tmpfile1[32] = "esltmpXXXXXX";
+  char                 tmpfile2[32] = "esltmpXXXXXX";
+  FILE                *ofp          = NULL;
+  int                  status;
+
+  /* guessing both the format and the alphabet should work: this is a digital open */
+  /* PSIBLAST format is autodetected as SELEX, which is fine - selex parser is more general */
+  if ( (status = esl_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("psiblast good file test %d failed: digital open",           testnumber);  
+  if (afp->format != eslMSAFILE_SELEX)                                                             esl_fatal("psiblast good file test %d failed: format autodetection",   testnumber); 
+  if (abc->type   != expected_alphatype)                                                           esl_fatal("psiblast good file test %d failed: alphabet autodetection", testnumber);
+  afp->format = eslMSAFILE_PSIBLAST;
+
+  /* This is a digital read, using <abc>. */
+  if ( (status = esl_msafile_psiblast_Read(afp, &msa1))   != eslOK) esl_fatal("psiblast good file test %d failed: msa read, digital", testnumber);  
+  if (msa1->nseq != expected_nseq || msa1->alen != expected_alen)   esl_fatal("psiblast good file test %d failed: nseq/alen",         testnumber);
+  if (esl_msa_Validate(msa1, NULL) != eslOK)                        esl_fatal("psiblast good file test %d failed: msa1 invalid",      testnumber);
+  esl_msafile_Close(afp);  
+
+  /* write it back out to a new tmpfile (digital write) */
+  if ( (status = esl_tmpfile_named(tmpfile1, &ofp))      != eslOK) esl_fatal("psiblast good file test %d failed: tmpfile creation",   testnumber);
+  if ( (status = esl_msafile_psiblast_Write(ofp, msa1))  != eslOK) esl_fatal("psiblast good file test %d failed: msa write, digital", testnumber);
+  fclose(ofp);
+
+  /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */
+  if ( (status = esl_msafile_Open(NULL, tmpfile1, NULL, eslMSAFILE_PSIBLAST, NULL, &afp)) != eslOK) esl_fatal("psiblast good file test %d failed: text mode open", testnumber);  
+  if ( (status = esl_msafile_psiblast_Read(afp, &msa2))                                   != eslOK) esl_fatal("psiblast good file test %d failed: msa read, text", testnumber);  
+  if (msa2->nseq != expected_nseq || msa2->alen != expected_alen)                                   esl_fatal("psiblast good file test %d failed: nseq/alen",      testnumber);
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                        esl_fatal("psiblast good file test %d failed: msa2 invalid",   testnumber);
+  esl_msafile_Close(afp);
+  
+  /* write it back out to a new tmpfile (text write) */
+  if ( (status = esl_tmpfile_named(tmpfile2, &ofp))      != eslOK) esl_fatal("psiblast good file test %d failed: tmpfile creation", testnumber);
+  if ( (status = esl_msafile_psiblast_Write(ofp, msa2))  != eslOK) esl_fatal("psiblast good file test %d failed: msa write, text",  testnumber);
+  fclose(ofp);
+  esl_msa_Destroy(msa2);
+
+  /* open and read it in digital mode */
+  if ( (status = esl_msafile_Open(&abc, tmpfile1, NULL, eslMSAFILE_PSIBLAST, NULL, &afp)) != eslOK) esl_fatal("psiblast good file test %d failed: 2nd digital mode open", testnumber);  
+  if ( (status = esl_msafile_psiblast_Read(afp, &msa2))                                   != eslOK) esl_fatal("psiblast good file test %d failed: 2nd digital msa read",  testnumber);  
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                        esl_fatal("psiblast good file test %d failed: msa2 invalid",          testnumber);
+  esl_msafile_Close(afp);
+
+  /* this msa <msa2> should be identical to <msa1> */
+  if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("psiblast good file test %d failed: msa compare", testnumber);  
+
+  remove(tmpfile1);
+  remove(tmpfile2);
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_alphabet_Destroy(abc);
+}
+
+static void
+write_test_msas(FILE *ofp1, FILE *ofp2)
+{
+  fprintf(ofp1, "\n");
+  fprintf(ofp1, "seq1  --ACDEFGHIKLMNPQRSTVWY\n");
+  fprintf(ofp1, "seq2  --ACDEFGHIKLMNPQRSTV-- \n");
+  fprintf(ofp1, "seq3  aaACDEFGHIKLMNPQRSTV--  \n");
+  fprintf(ofp1, "seq4  --ACDEFGHIKLMNPQRSTVWY  \n");
+  fprintf(ofp1, "\n");
+  fprintf(ofp1, "seq1  ACDEFGHIKLMNPQRSTVWY--\n");
+  fprintf(ofp1, "seq2  ACDEFGHIKLMNPQRSTVWYyy\n");
+  fprintf(ofp1, "seq3  ACDEFGHIKLMNPQRSTVWY--\n");
+  fprintf(ofp1, "seq4  ACDEFGHIKLMNPQRSTVWY--\n");
+  fprintf(ofp1, "\n");
+
+  fprintf(ofp2, "# STOCKHOLM 1.0\n");
+  fprintf(ofp2, "\n");
+  fprintf(ofp2, "#=GC RF ..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..\n");
+  fprintf(ofp2, "seq1    --ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY--\n");
+  fprintf(ofp2, "seq2    --ACDEFGHIKLMNPQRSTV--ACDEFGHIKLMNPQRSTVWYyy\n");
+  fprintf(ofp2, "seq3    aaACDEFGHIKLMNPQRSTV--ACDEFGHIKLMNPQRSTVWY--\n");
+  fprintf(ofp2, "seq4    --ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY--\n");
+  fprintf(ofp2, "//\n");
+}
+
+static void
+read_test_msas_digital(char *pbfile, char *stkfile)
+{
+  char msg[]         = "PSIBLAST msa digital read unit test failed";
+  ESL_ALPHABET *abc  = NULL;
+  ESL_MSAFILE  *afp1 = NULL;
+  ESL_MSAFILE  *afp2 = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  FILE         *pbfp, *stkfp;
+  char          pbfile2[32]  = "esltmppb2XXXXXX";
+  char          stkfile2[32] = "esltmpstk2XXXXXX";
+
+  if ( esl_msafile_Open(&abc, pbfile,  NULL, eslMSAFILE_PSIBLAST,  NULL, &afp1) != eslOK)  esl_fatal(msg);
+  if ( !abc || abc->type != eslAMINO)                                                       esl_fatal(msg);
+  if ( esl_msafile_Open(&abc, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_psiblast_Read (afp1, &msa1)                                  != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa2)                                  != eslOK)  esl_fatal(msg);
+  if ( esl_msa_Compare(msa1, msa2)                                              != eslOK)  esl_fatal(msg);
+  
+  if ( esl_msafile_psiblast_Read (afp1, &msa3) != eslEOF) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg);
+
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  /* Now write stk to psiblast file, and vice versa; then retest */
+  if ( esl_tmpfile_named(pbfile2,  &pbfp)                                   != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile2, &stkfp)                                  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_psiblast_Write  (pbfp, msa2)                             != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM)       != eslOK) esl_fatal(msg);
+  fclose(pbfp);
+  fclose(stkfp);
+  if ( esl_msafile_Open(&abc, pbfile2,  NULL, eslMSAFILE_PSIBLAST,  NULL, &afp1) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Open(&abc, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_psiblast_Read (afp1, &msa3)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa4)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msa_Compare(msa3, msa4)                                               != eslOK) esl_fatal(msg);
+
+  remove(pbfile2);
+  remove(stkfile2);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+  esl_alphabet_Destroy(abc);
+}
+
+static void
+read_test_msas_text(char *pbfile, char *stkfile)
+{
+  char msg[]         = "PSIBLAST msa text-mode read unit test failed";
+  ESL_MSAFILE  *afp1 = NULL;
+  ESL_MSAFILE  *afp2 = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  FILE         *pbfp, *stkfp;
+  char          pbfile2[32]  = "esltmppb2XXXXXX";
+  char          stkfile2[32] = "esltmpstk2XXXXXX";
+
+  /*                    vvvv-- everything's the same as the digital utest except these NULLs  */
+  if ( esl_msafile_Open(NULL, pbfile,  NULL, eslMSAFILE_PSIBLAST,  NULL, &afp1)   != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_Open(NULL, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2)   != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_psiblast_Read (afp1, &msa1)                                    != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa2)                                    != eslOK)  esl_fatal(msg);
+  if ( esl_msa_Compare(msa1, msa2)                                                != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_psiblast_Read (afp1, &msa3)                                    != eslEOF) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa3)                                    != eslEOF) esl_fatal(msg);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  if ( esl_tmpfile_named(pbfile2, &pbfp)                                     != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile2, &stkfp)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_psiblast_Write (pbfp,  msa2)                              != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM)        != eslOK) esl_fatal(msg);
+  fclose(pbfp);
+  fclose(stkfp);
+  if ( esl_msafile_Open(NULL, pbfile2,  NULL, eslMSAFILE_PSIBLAST,  NULL, &afp1)  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Open(NULL, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2)  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_psiblast_Read (afp1, &msa3)                                    != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa4)                                    != eslOK) esl_fatal(msg);
+  if ( esl_msa_Compare(msa3, msa4)                                                != eslOK) esl_fatal(msg);
+
+  remove(pbfile2);
+  remove(stkfile2);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+}
+#endif /*eslMSAFILE_PSIBLAST_TESTDRIVE*/
+/*---------------------- end, unit tests ------------------------*/
+
+
+/*****************************************************************
+ * 3. Test driver.
+ *****************************************************************/
+#ifdef eslMSAFILE_PSIBLAST_TESTDRIVE
+/* compile: gcc -g -Wall -I. -L. -o esl_msafile_psiblast_utest -DeslMSAFILE_PSIBLAST_TESTDRIVE esl_msafile_psiblast.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_psiblast_utest -DeslMSAFILE_PSIBLAST_TESTDRIVE esl_msafile_psiblast.c -leasel -lm
+ * run:     ./esl_msafile_psiblast_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_msafile.h"
+#include "esl_msafile_psiblast.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for PSIBLAST MSA format module";
+
+int
+main(int argc, char **argv)
+{
+  char            msg[]        = "PSI-BLAST MSA i/o module test driver failed";
+  ESL_GETOPTS    *go           = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  char            pbfile[32]   = "esltmppbXXXXXX";
+  char            stkfile[32]  = "esltmpstkXXXXXX";
+  FILE           *pbfp, *stkfp;
+  int             testnumber;
+  int             ngoodtests = 2;
+  char            tmpfile[32];
+  FILE           *ofp;
+  int             expected_alphatype;
+  int             expected_nseq;
+  int             expected_alen;
+
+  if ( esl_tmpfile_named(pbfile,  &pbfp)  != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile, &stkfp) != eslOK) esl_fatal(msg);
+  write_test_msas(pbfp, stkfp);
+  fclose(pbfp);
+  fclose(stkfp);
+
+  read_test_msas_digital(pbfile, stkfile);
+  read_test_msas_text   (pbfile, stkfile);
+
+  /* Various "good" files that should be parsed correctly */
+  for (testnumber = 1; testnumber <= ngoodtests; testnumber++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX"); 
+      if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+      switch (testnumber) {
+      case  1:  utest_write_good1 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  2:  utest_write_good2 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      }
+      fclose(ofp);
+      utest_goodfile(tmpfile, testnumber, expected_alphatype, expected_nseq, expected_alen);
+      remove(tmpfile);
+    }
+
+  remove(pbfile);
+  remove(stkfile);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslMSAFILE_PSIBLAST_TESTDRIVE*/
+/*--------------------- end, test driver ------------------------*/
+
+
+
+
+/*****************************************************************
+ * 4. Examples.
+ *****************************************************************/
+
+#ifdef eslMSAFILE_PSIBLAST_EXAMPLE
+/* A full-featured example of reading/writing an MSA in PSIBLAST format.
+   gcc -g -Wall -o esl_msafile_psiblast_example -I. -L. -DeslMSAFILE_PSIBLAST_EXAMPLE esl_msafile_psiblast.c -leasel -lm
+   ./esl_msafile_psiblast_example <msafile>
+ */
+/*::cexcerpt::msafile_psiblast_example::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_psiblast.h"
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",            0 },
+  { "-1",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "override autodetection; force PSIBLAST format",   0 },
+  { "-q",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "quieter: don't write msa back, just summary",     0 },
+  { "-t",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use text mode: no digital alphabet",              0 },
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is DNA",                    0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is RNA",                    0 },
+  { "--amino",     eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is protein",                0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msafile>";
+static char banner[] = "example of guessing, reading, writing PSIBLAST format";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS        *go          = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char               *filename    = esl_opt_GetArg(go, 1);
+  int                 infmt       = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET       *abc         = NULL;
+  ESL_MSAFILE        *afp         = NULL;
+  ESL_MSA            *msa         = NULL;
+  int                 status;
+
+  if      (esl_opt_GetBoolean(go, "-1"))      infmt = eslMSAFILE_PSIBLAST;  /* override format autodetection */
+
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); 
+
+  /* Text mode: pass NULL for alphabet.
+   * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed 
+   */
+  if   (esl_opt_GetBoolean(go, "-t"))  status = esl_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp);
+  else                                 status = esl_msafile_Open(&abc, filename, NULL, infmt, NULL, &afp);
+  if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+
+  if ((status = esl_msafile_psiblast_Read(afp, &msa)) != eslOK)
+    esl_msafile_ReadFailure(afp, status);
+
+  printf("alphabet:       %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)"));
+  printf("# of seqs:      %d\n", msa->nseq);
+  printf("# of cols:      %d\n", (int) msa->alen);
+  printf("\n");
+
+  if (! esl_opt_GetBoolean(go, "-q"))
+    esl_msafile_psiblast_Write(stdout, msa);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  if (abc) esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+/*::cexcerpt::msafile_psiblast_example::end::*/
+#endif /*eslMSAFILE_PSIBLAST_EXAMPLE*/
+
+
+#ifdef eslMSAFILE_PSIBLAST_EXAMPLE2
+/* A minimal example. Read PSIBLAST format MSA, in text mode.
+   gcc -g -Wall -o esl_msafile_psiblast_example2 -I. -L. -DeslMSAFILE_PSIBLAST_EXAMPLE2 esl_msafile_psiblast.c -leasel -lm
+   ./esl_msafile_psiblast_example2 <msafile>
+ */
+
+/*::cexcerpt::msafile_psiblast_example2::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_psiblast.h"
+
+int 
+main(int argc, char **argv)
+{
+  char         *filename = argv[1];
+  int           fmt      = eslMSAFILE_PSIBLAST;
+  ESL_MSAFILE  *afp      = NULL;
+  ESL_MSA      *msa      = NULL;
+  int           status;
+
+  if ( (status = esl_msafile_Open(NULL, filename, NULL, fmt, NULL, &afp)) != eslOK) esl_msafile_OpenFailure(afp, status);
+  if ( (status = esl_msafile_psiblast_Read(afp, &msa))                    != eslOK) esl_msafile_ReadFailure(afp, status);
+
+  printf("%6d seqs, %5d columns\n", msa->nseq, (int) msa->alen);
+
+  esl_msafile_psiblast_Write(stdout, msa);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  exit(0);
+}
+/*::cexcerpt::msafile_psiblast_example2::end::*/
+#endif /*eslMSAFILE_PSIBLAST_EXAMPLE2*/
+/*--------------------- end of examples -------------------------*/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_psiblast.h b/esl_msafile_psiblast.h
new file mode 100644
index 0000000..d7ed17a
--- /dev/null
+++ b/esl_msafile_psiblast.h
@@ -0,0 +1,17 @@
+/* I/O of multiple sequence alignments in PSI-BLAST format
+ */
+#ifndef eslMSAFILE_PSIBLAST_INCLUDED
+#define eslMSAFILE_PSIBLAST_INCLUDED
+
+#include "esl_msa.h"
+#include "esl_msafile.h"
+
+extern int esl_msafile_psiblast_SetInmap     (ESL_MSAFILE *afp);
+extern int esl_msafile_psiblast_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type);
+extern int esl_msafile_psiblast_Read         (ESL_MSAFILE *afp, ESL_MSA **ret_msa);
+extern int esl_msafile_psiblast_Write        (FILE *fp, const ESL_MSA *msa);
+
+#endif /* eslMSAFILE_PSIBLAST_INCLUDED */
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_selex.c b/esl_msafile_selex.c
new file mode 100644
index 0000000..1df354d
--- /dev/null
+++ b/esl_msafile_selex.c
@@ -0,0 +1,1254 @@
+/* I/O of multiple sequence alignment files in SELEX format
+ *
+ * Contents:
+ *   1. API for reading/writing SELEX input.
+ *   2. Internal functions for a block of input lines.
+ *   3. Internal functions for parsing SELEX input.
+ *   4. Unit tests.
+ *   5. Test driver.
+ *   6. Examples.
+ *   7. License and copyright.
+ *   
+ * Notes:
+ *   In SELEX, a tricky and unusual issue is that spaces are allowed
+ *   as gaps, and can even overlap names. Alignments like this are
+ *   legitimate:
+ *        seq1_longname ACCCGGT
+ *        seq2      AAAAACCCGGTT
+ *  
+ *  You can't determine the aligned length of any sequence in the
+ *  block without seeing the whole block.  We define an internal
+ *  object (an ESL_SELEX_BLOCK) and some local functions to handle
+ *  reading a block of input lines from an input buffer.
+ *
+ *  Even though spaces are allowed as gaps in input files, Easel
+ *  disallows them internally, even in text-mode alignments. Any
+ *  spaces are mapped to '.'.
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#include "esl_mem.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_selex.h"
+
+#define eslSELEX_LINE_SQ 1
+#define eslSELEX_LINE_RF 2
+#define eslSELEX_LINE_CS 3
+#define eslSELEX_LINE_SS 4
+#define eslSELEX_LINE_SA 5
+#define eslSELEX_LINE_MM 6
+
+typedef struct {
+  char     **line;		/* line[0..nlines-1][0..llen-1]: memory lines in input buffer */
+  esl_pos_t *llen;		/* length of line[] in bytes                                  */
+  esl_pos_t *offsets;		/* offset of start of each line in input buffer               */
+  int64_t   *linenum;		/* line number of each line[] in input                        */
+  int       *ltype;		/* code for line type: eslSELEX_LINE_SQ, etc.                 */
+  esl_pos_t *lpos;		/* leftmost position of seq data on line[], 0..llen-1 [or -1] */
+  esl_pos_t *rpos;              /* rightmost pos of seq data on line[], 0..llen-1 [or -1]     */
+  int        nlines;		/* number of lines in this block                              */
+  int        nalloc;		/* number of lines allocated for (>=nlines)                   */
+  esl_pos_t  anchor;		/* input buffer anchor set at the start of the block          */
+} ESL_SELEX_BLOCK;
+
+static ESL_SELEX_BLOCK *selex_block_Create(int nalloc);
+static int              selex_block_Grow(ESL_SELEX_BLOCK *b);
+static void             selex_block_Destroy(ESL_SELEX_BLOCK *b);
+
+static int selex_ErrorInBlock(ESL_MSAFILE *afp, ESL_SELEX_BLOCK *b, int idx);
+static int selex_read_block  (ESL_MSAFILE *afp, ESL_SELEX_BLOCK **block_p);
+static int selex_first_block (ESL_MSAFILE *afp, ESL_SELEX_BLOCK *b, ESL_MSA **ret_msa);
+static int selex_other_block (ESL_MSAFILE *afp, ESL_SELEX_BLOCK *b, ESL_MSA *msa);
+static int selex_append_block(ESL_MSAFILE *afp, ESL_SELEX_BLOCK *b, ESL_MSA *msa);
+
+
+/*****************************************************************
+ * 1. API for reading/writing SELEX input
+ *****************************************************************/
+
+/* Function:  esl_msafile_selex_SetInmap()
+ * Synopsis:  Set the input map for SELEX format
+ *
+ * Purpose:   Set <afp->inmap> for selex input.
+ *
+ *            In text mode, accept any <isgraph()> character, plus space.
+ *            In digital mode, accept standard Easel alphabets, plus map
+ *            space to gap.
+ *
+ *            SELEX not only tolerates spaces in input, it
+ *            allows a space as a gap character. (Which significantly
+ *            complicates parsing.)
+ *            
+ *            The inmap may not contain any <eslDSQ_IGNORED> mappings.
+ *            Annotation lines are parsed literally: every character
+ *            is copied. If some characters of the aligned sequence
+ *            were ignored, we'd be misaligned with the annotation.
+ *            In general, because of this, it seems unlikely that any
+ *            alignment format would use <eslDSQ_IGNORED> mappings.
+ */
+int
+esl_msafile_selex_SetInmap(ESL_MSAFILE *afp)
+{
+  int sym;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc)
+    {
+      for (sym = 0; sym < 128; sym++) 
+	afp->inmap[sym] = afp->abc->inmap[sym];
+      afp->inmap[0]   = esl_abc_XGetUnknown(afp->abc);
+      afp->inmap[' '] = esl_abc_XGetGap(afp->abc);
+    }
+#endif
+  if (! afp->abc)
+    {
+      for (sym = 1; sym < 128; sym++) 
+	afp->inmap[sym] = (isgraph(sym) ? sym : eslDSQ_ILLEGAL);
+      afp->inmap[0]   = '?';
+      afp->inmap[' '] = '.'; /* Easel does not allow spaces as gap characters. */
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_msafile_selex_GuessAlphabet()
+ * Synopsis:  Guess the alphabet of an open PSI-BLAST MSA file.
+ *
+ * Purpose:   Guess the alpbabet of the sequences in open
+ *            SELEX format MSA file <afp>.
+ *            
+ *            On a normal return, <*ret_type> is set to <eslDNA>,
+ *            <eslRNA>, or <eslAMINO>, and <afp> is reset to its
+ *            original position.
+ *
+ * Args:      afp      - open SELEX format MSA file
+ *            ret_type - RETURN: <eslDNA>, <eslRNA>, or <eslAMINO>       
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslENOALPHABET> if alphabet type can't be determined.
+ *            In either case, <afp> is rewound to the position it
+ *            started at.
+ */
+int
+esl_msafile_selex_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type)
+{
+  int       alphatype     = eslUNKNOWN;
+  esl_pos_t anchor        = -1;
+  int       threshold[3]  = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */
+  int       nsteps        = 3;
+  int       step          = 0;
+  int       nres          = 0;
+  int       x;
+  int64_t   ct[26];
+  char     *p, *tok;
+  esl_pos_t n,  toklen, pos;
+  int       status;
+
+  for (x = 0; x < 26; x++) ct[x] = 0;
+
+  anchor = esl_buffer_GetOffset(afp->bf);
+  if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */
+
+  while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK)
+    {
+      if ((status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK) continue; /* blank lines */
+      if (*tok == '#') continue; /* comments and annotation */
+      /* p now points to the rest of the sequence line, after a name */
+      
+      /* count characters into ct[] array */
+      for (pos = 0; pos < n; pos++)
+	if (isalpha(p[pos])) {
+	  x = toupper(p[pos]) - 'A';
+	  ct[x]++; 
+	  nres++; 
+	}
+
+      /* try to stop early, checking after 500, 5000, and 50000 residues: */
+      if (step < nsteps && nres > threshold[step]) {
+	if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */
+	step++;
+      }
+    }
+  if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */
+  status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */
+
+ DONE:
+  esl_buffer_SetOffset(afp->bf, anchor);   /* Rewind to where we were. */
+  esl_buffer_RaiseAnchor(afp->bf, anchor);
+  *ret_type = alphatype;
+  return status;
+
+ ERROR:
+  if (anchor != -1) {
+    esl_buffer_SetOffset(afp->bf, anchor);
+    esl_buffer_RaiseAnchor(afp->bf, anchor);
+  }
+  *ret_type = eslUNKNOWN;
+  return status;
+}
+
+
+/* Function:  esl_msafile_selex_Read()
+ * Synopsis:  Read in a SELEX format alignment.
+ *
+ * Purpose:   Read an MSA from an open <ESL_MSAFILE> <afp>, 
+ *            parsing for SELEX format, starting from the
+ *            current point. (<afp->format> is expected to
+ *            be <eslMSAFILE_SELEX>.) Create a new multiple
+ *            alignment and return it via <*ret_msa>. 
+ *            Caller is responsible for free'ing this
+ *            <ESL_MSA>.
+ *
+ * Args:      afp     - open <ESL_MSAFILE>
+ *            ret_msa - RETURN: newly parsed <ESL_MSA>
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ *            <eslEOF> if no (more) alignment data are found in
+ *            <afp>, and <afp> is returned at EOF. 
+ *
+ *            <eslEFORMAT> on a parse error. <*ret_msa> is set to
+ *            <NULL>. <afp> contains information sufficient for
+ *            constructing useful diagnostic output: 
+ *            | <afp->errmsg>       | user-directed error message     |
+ *            | <afp->linenumber>   | line # where error was detected |
+ *            | <afp->line>         | offending line (not NUL-term)   |
+ *            | <afp->n>            | length of offending line        |
+ *            | <afp->bf->filename> | name of the file                |
+ *            and <afp> is poised at the start of the following line,
+ *            so (in principle) the caller could try to resume
+ *            parsing.
+ *
+ * Throws:    <eslEMEM> - an allocation failed.
+ *            <eslESYS> - a system call such as fread() failed
+ *            <eslEINCONCEIVABLE> - "impossible" corruption 
+ */
+int
+esl_msafile_selex_Read(ESL_MSAFILE *afp, ESL_MSA **ret_msa)
+{
+  ESL_MSA         *msa     = NULL;
+  ESL_SELEX_BLOCK *b       = NULL;
+  int32_t          nblocks = 0;
+  int              status;
+
+  ESL_DASSERT1( (afp->format == eslMSAFILE_SELEX) );
+  
+  afp->errmsg[0] = '\0';
+
+  while ( (status = selex_read_block(afp, &b)) == eslOK)
+    {
+      if      (! nblocks &&  (status = selex_first_block(afp, b, &msa)) != eslOK) goto ERROR;
+      else if (  nblocks &&  (status = selex_other_block(afp, b, msa))  != eslOK) goto ERROR;
+
+      if ((status = selex_append_block(afp, b, msa)) != eslOK) goto ERROR;
+
+      esl_buffer_RaiseAnchor(afp->bf, b->anchor);
+      b->anchor = -1;
+
+      nblocks++;
+    }
+  /* selex_read_block took care of destroying the block! */
+  if (status != eslEOF || nblocks == 0) goto ERROR;
+
+  msa->offset = 0;
+  if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR;
+  *ret_msa = msa;
+  return eslOK;
+
+ ERROR:
+  if (b) {
+    if (b->anchor != -1) esl_buffer_RaiseAnchor(afp->bf, b->anchor);
+    selex_block_Destroy(b);
+  }
+  *ret_msa = NULL;
+  return status;
+}
+
+/* Function:  esl_msafile_selex_Write()
+ * Synopsis:  Write a SELEX format alignment to a stream
+ *
+ * Purpose:   Write alignment <msa> to output stream <fp>,
+ *            in SELEX format. The alignment is written
+ *            in blocks of 60 aligned residues at a time.
+ *
+ * Args:      fp  - open output stream, writable
+ *            msa - alignment to write
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslEWRITE> on any system write error, such
+ *             as a filled disk.
+ */
+int
+esl_msafile_selex_Write(FILE *fp, const ESL_MSA *msa)
+{
+  int     cpl        = 60;
+  int     maxnamelen = 4;		/* init to 4 because minimum name field is #=CS, etc. */
+  int     namelen;
+  char   *buf        = NULL;
+  int     i;
+  int64_t apos;
+  int     status;
+
+  ESL_ALLOC(buf, sizeof(char) * (cpl+1));
+  buf[cpl] = '\0';
+  for (i = 0; i < msa->nseq; i++) {
+    namelen    = strlen(msa->sqname[i]);
+    maxnamelen = ESL_MAX(namelen, maxnamelen);
+  }
+
+  for (apos = 0; apos < msa->alen; apos += cpl)
+    {
+      if (apos         && fprintf(fp, "\n")                                                      < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "selex msa write failed");
+      if (msa->ss_cons && fprintf(fp, "%-*s %.*s\n", maxnamelen, "#=CS", cpl, msa->ss_cons+apos) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "selex msa write failed");
+      if (msa->rf      && fprintf(fp, "%-*s %.*s\n", maxnamelen, "#=RF", cpl, msa->rf+apos)      < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "selex msa write failed");
+      if (msa->mm      && fprintf(fp, "%-*s %.*s\n", maxnamelen, "#=MM", cpl, msa->mm+apos)      < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "selex msa write failed");
+
+      for (i = 0; i < msa->nseq; i++)
+	{
+#ifdef eslAUGMENT_ALPHABET 
+	  if (msa->abc)   esl_abc_TextizeN(msa->abc, msa->ax[i]+apos+1, cpl, buf);
+#endif
+	  if (! msa->abc) strncpy(buf, msa->aseq[i]+apos, cpl);
+	  if (fprintf(fp, "%-*s %s\n", maxnamelen, msa->sqname[i], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "selex msa write failed");
+
+	  if (msa->ss && msa->ss[i]) { if (fprintf(fp, "%-*s %.*s\n", maxnamelen, "#=SS", cpl, msa->ss[i]+apos) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "selex msa write failed"); }
+	  if (msa->sa && msa->sa[i]) { if (fprintf(fp, "%-*s %.*s\n", maxnamelen, "#=SA", cpl, msa->sa[i]+apos) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "selex msa write failed"); }
+	}
+    }
+
+  free(buf);
+  return eslOK;
+  
+ ERROR:
+  if (buf) free(buf);
+  return status;
+}
+/*--------------------- end, SELEX i/o API ----------------------*/
+
+
+
+/*****************************************************************
+ * 2. Internal functions handling a block of input lines.
+ *****************************************************************/
+
+static ESL_SELEX_BLOCK *
+selex_block_Create(int nalloc)
+{
+  ESL_SELEX_BLOCK *b = NULL;
+  int              idx;
+  int              status;
+  
+  ESL_ALLOC(b,       sizeof(ESL_SELEX_BLOCK));
+  b->line    = NULL;
+  b->llen    = NULL;
+  b->offsets = NULL;
+  b->linenum = NULL;
+  b->ltype   = NULL;
+  b->lpos    = NULL;
+  b->rpos    = NULL;
+  b->nlines  = 0;
+  b->anchor  = -1;		/* -1 is a flag for "unused" */
+
+  ESL_ALLOC(b->line,    sizeof(char *)    * nalloc);
+  ESL_ALLOC(b->llen,    sizeof(esl_pos_t) * nalloc);
+  ESL_ALLOC(b->offsets, sizeof(esl_pos_t) * nalloc);
+  ESL_ALLOC(b->linenum, sizeof(int64_t)   * nalloc);
+  ESL_ALLOC(b->ltype,   sizeof(int)       * nalloc);
+  ESL_ALLOC(b->lpos,    sizeof(esl_pos_t) * nalloc);
+  ESL_ALLOC(b->rpos,    sizeof(esl_pos_t) * nalloc);
+  for (idx = 0; idx < nalloc; idx++) 
+    { 
+      b->line[idx]    = NULL; 
+      b->llen[idx]    = 0; 
+      b->offsets[idx] = 0; 
+      b->linenum[idx] = 0; 
+      b->ltype[idx]   = 0; 
+      b->lpos[idx]    = 0; 
+      b->rpos[idx]    = 0; 
+    }
+  b->nalloc = nalloc;
+  return b;
+
+ ERROR:
+  if (b) selex_block_Destroy(b);
+  return NULL;
+}
+
+static int
+selex_block_Grow(ESL_SELEX_BLOCK *b)
+{
+  int idx;
+  int status;
+
+  ESL_REALLOC(b->line,    sizeof(char *)    * b->nalloc * 2);
+  ESL_REALLOC(b->llen,    sizeof(esl_pos_t) * b->nalloc * 2);
+  ESL_REALLOC(b->offsets, sizeof(esl_pos_t) * b->nalloc * 2);
+  ESL_REALLOC(b->linenum, sizeof(int64_t)   * b->nalloc * 2);
+  ESL_REALLOC(b->ltype,   sizeof(int)       * b->nalloc * 2);
+  ESL_REALLOC(b->lpos,    sizeof(esl_pos_t) * b->nalloc * 2);
+  ESL_REALLOC(b->rpos,    sizeof(esl_pos_t) * b->nalloc * 2);
+  for (idx = b->nalloc; idx < b->nalloc*2; idx++) 
+    { 
+      b->line[idx]    = NULL; 
+      b->llen[idx]    = 0; 
+      b->offsets[idx] = 0; 
+      b->linenum[idx] = 0; 
+      b->ltype[idx]   = 0; 
+      b->lpos[idx]    = 0;
+      b->rpos[idx]    = 0; 
+    }	
+  b->nalloc  *= 2;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+  
+static void
+selex_block_Destroy(ESL_SELEX_BLOCK *b)
+{
+  if (!b) return;
+  if (b->line)    free(b->line);
+  if (b->llen)    free(b->llen);
+  if (b->offsets) free(b->offsets);
+  if (b->linenum) free(b->linenum);
+  if (b->ltype)   free(b->ltype);
+  if (b->lpos)    free(b->lpos);
+  if (b->rpos)    free(b->rpos);
+  free(b);
+  return;
+}
+/*------- end, internal functions for input line blocks ---------*/
+
+
+
+
+/*****************************************************************
+ * 3. Internal functions for parsing SELEX input.
+ *****************************************************************/
+
+/* Before we return a parse error,
+ * reset the <afp> so its current line is the one at fault.
+ */
+static int
+selex_ErrorInBlock(ESL_MSAFILE *afp, ESL_SELEX_BLOCK *b, int which)
+{
+  afp->line       = b->line[which];
+  afp->n      = b->llen[which];
+  afp->lineoffset = b->offsets[which];
+  afp->linenumber = b->linenum[which];
+  return esl_buffer_SetOffset(afp->bf, b->offsets[which] + b->llen[which]);
+}
+
+/* selex_read_block:  read one block of alignment data.
+ *
+ * Note that line numbers aren't necessarily consecutive,
+ * because we're stripping out comment lines here. On a parse error
+ * on a specific line, we're going to reset the buffer to that line,
+ * and we'll need the linenumber to do that reset.
+ * 
+ * The <afp> detected the end of the block by reading a blank line, or EOF.
+ * Thus its point is at the next line after that blank, or at EOF.
+ * 
+ * The <afp> has a stable anchor set at (*block_p)->anchor.
+ * Caller must raise this anchor when it's done parsing the block.
+ * 
+ * Returns: <eslOK> on success.
+ *          
+ *          <eslEOF> if no more blocks are found in the input.
+ *          <eslEFORMAT> on failure, if a subsequent block has a
+ *          different number of data lines than the first block.
+ *          On normal errors, all the references are returned set to NULL.
+ *       
+ * Throws:  <eslEMEM> on allocation failure.      
+ */
+static int
+selex_read_block(ESL_MSAFILE *afp, ESL_SELEX_BLOCK **block_p) 
+{
+  ESL_SELEX_BLOCK *b      = *block_p; /* now b==NULL if first block; or on subsequent blocks, reuse prev block storage. */
+  int              idx    = 0;
+  int              status;
+
+  /* Advance past blank lines until we have the first line of next
+   * block.  We may hit a normal EOF here, in which case we return
+   * EOF, we're done.
+   */
+  do { 
+    if ( ( status = esl_msafile_GetLine(afp, NULL, NULL)) != eslOK) goto ERROR;                   /* EOF here is a normal EOF   */
+  } while (esl_memspn(afp->line, afp->n, " \t") == afp->n ||                                       /* idiomatic for "blank line" */
+	   (esl_memstrpfx(afp->line, afp->n, "#") && ! esl_memstrpfx(afp->line, afp->n, "#=")));   /* a SELEX comment line       */
+
+  /* if this is first block, allocate block; subsequent blocks reuse it */
+  if (!b && (b = selex_block_Create(16)) == NULL) { status = eslEMEM; goto ERROR; }
+  
+  /* Anchor stably at this point. */
+  b->anchor = afp->lineoffset;
+  if ((status = esl_buffer_SetStableAnchor(afp->bf, b->anchor)) != eslOK) goto ERROR;
+
+  /* Parse for a block of lines. */
+  do {
+    if (b->nalloc && idx == b->nalloc && (status = selex_block_Grow(b)) != eslOK) goto ERROR;
+
+    b->line[idx]     = afp->line;
+    b->llen[idx]     = afp->n;
+    b->offsets[idx]  = afp->lineoffset;
+    b->linenum[idx]  = afp->linenumber;   /* ltype, lpos, rpos aren't set yet */
+    idx++;
+    
+    /* Get next non-comment line; this can be next line of block, blank (end of block), or EOF. */
+    do { 
+      status = esl_msafile_GetLine(afp, NULL, NULL); 
+    } while ( status == eslOK && (esl_memstrpfx(afp->line, afp->n, "#") && ! esl_memstrpfx(afp->line, afp->n, "#=")));
+
+  } while (status == eslOK && esl_memspn(afp->line, afp->n, " \t") < afp->n); /* end of block on EOF or blank line */
+  
+  if (*block_p && b->nlines != idx) 
+    ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected %d lines in block, saw %d", b->nlines, idx);
+
+  b->nlines  = idx;
+  *block_p   = b;
+  return eslOK;	/* EOF status gets turned into OK: we've read a block successfully and hit EOF. Next call will generate the EOF */
+
+ ERROR:
+  if (b && b->anchor != -1) esl_buffer_RaiseAnchor(afp->bf, b->anchor);
+  if (b) selex_block_Destroy(b);
+  *block_p = NULL;
+  return status;
+}
+
+
+/* selex_first_block()
+ * 
+ * 1. Determine and store line types, in b->ltype[0..b->nlines-1].
+ * 2. From the number of eslSELEX_LINE_SQ lines, we know nseq.
+ * 3. From nseq, we can allocate a new MSA.
+ * 4. Parse each line for sequence names, and store them.
+ * 5. Determine lpos[] for each line.
+ */
+static int
+selex_first_block(ESL_MSAFILE *afp, ESL_SELEX_BLOCK *b, ESL_MSA **ret_msa)
+{
+  ESL_MSA  *msa = NULL;
+  int       nrf, nmm, ncs, nss, nsa, nseq;
+  int       has_ss, has_sa;
+  char     *p, *tok;
+  esl_pos_t n,  ntok;
+  int       idx, seqi;
+  int       status;
+
+  afp->errmsg[0] = '\0';
+
+  nrf = nmm = ncs = nss = nsa = nseq = 0;
+  has_ss = has_sa = FALSE;
+  for (idx = 0; idx < b->nlines; idx++)
+    {
+      if      (esl_memstrpfx(b->line[idx], b->llen[idx], "#=RF")) { b->ltype[idx] = eslSELEX_LINE_RF; nrf++; }
+      else if (esl_memstrpfx(b->line[idx], b->llen[idx], "#=MM")) { b->ltype[idx] = eslSELEX_LINE_MM; nmm++; }
+      else if (esl_memstrpfx(b->line[idx], b->llen[idx], "#=CS")) { b->ltype[idx] = eslSELEX_LINE_CS; ncs++; }
+      else if (esl_memstrpfx(b->line[idx], b->llen[idx], "#=SS")) { b->ltype[idx] = eslSELEX_LINE_SS; nss++; has_ss = TRUE; }
+      else if (esl_memstrpfx(b->line[idx], b->llen[idx], "#=SA")) { b->ltype[idx] = eslSELEX_LINE_SA; nsa++; has_sa = TRUE; }
+      else                                                        { b->ltype[idx] = eslSELEX_LINE_SQ; nseq++; nss = nsa = 0; }
+
+      if (nss && !nseq) { selex_ErrorInBlock(afp, b, idx); ESL_XFAIL(eslEFORMAT, afp->errmsg, "#=SS must follow a sequence");   }
+      if (nsa && !nseq) { selex_ErrorInBlock(afp, b, idx); ESL_XFAIL(eslEFORMAT, afp->errmsg, "#=SA must follow a sequence");   }
+      if (nrf > 1)      { selex_ErrorInBlock(afp, b, idx); ESL_XFAIL(eslEFORMAT, afp->errmsg, "Too many #=RF lines for block"); }
+      if (ncs > 1)      { selex_ErrorInBlock(afp, b, idx); ESL_XFAIL(eslEFORMAT, afp->errmsg, "Too many #=CS lines for block"); }
+      if (nss > 1)      { selex_ErrorInBlock(afp, b, idx); ESL_XFAIL(eslEFORMAT, afp->errmsg, "Too many #=SS lines for seq");   }
+      if (nsa > 1)      { selex_ErrorInBlock(afp, b, idx); ESL_XFAIL(eslEFORMAT, afp->errmsg, "Too many #=SA lines for seq");   }
+    }
+
+#ifdef eslAUGMENT_ALPHABET
+  if ( afp->abc && (msa = esl_msa_CreateDigital(afp->abc, nseq, -1)) == NULL) { status = eslEMEM; goto ERROR; } /* a growable MSA */
+#endif
+  if (!afp->abc && (msa = esl_msa_Create(                 nseq, -1)) == NULL) { status = eslEMEM; goto ERROR; } 
+  if (has_ss) {
+    ESL_ALLOC(msa->ss, sizeof(char *) * nseq);
+    for (seqi = 0; seqi < nseq; seqi++) msa->ss[seqi] = NULL;
+  }
+  if (has_sa) {
+    ESL_ALLOC(msa->sa, sizeof(char *) * nseq);
+    for (seqi = 0; seqi < nseq; seqi++) msa->sa[seqi] = NULL;
+  }
+  msa->nseq = nseq;
+  msa->alen = 0;
+
+  for (seqi = 0, idx = 0; idx < b->nlines; idx++)
+    {
+      p = b->line[idx];
+      n = b->llen[idx];
+      if ( esl_memtok(&p, &n, " \t", &tok, &ntok) != eslOK) ESL_XEXCEPTION(eslEINCONCEIVABLE, "can't happen"); /* because a block by definition consists of non-blank lines */
+      if (b->ltype[idx] == eslSELEX_LINE_SQ) /* otherwise, first token is #=XX marking annotation of some sort */
+	{
+	  if ((status = esl_msa_SetSeqName(msa, seqi, tok, ntok)) != eslOK) goto ERROR;
+	  seqi++;
+	}
+      b->lpos[idx] = (n ? p-b->line[idx] : -1);  /* set lpos[] to position of first seq or annotation residue */
+    }
+
+  *ret_msa = msa;
+  return eslOK;
+
+ ERROR:
+  if (msa) esl_msa_Destroy(msa);
+  *ret_msa = NULL;
+  return status;
+}
+
+
+/* selex_other_block()
+ * We've already parsed the first block.
+ * So we know the order of line types, nseq, and sequence names.
+ * Validate that a subsequent block has the same.
+ */
+static int
+selex_other_block(ESL_MSAFILE *afp, ESL_SELEX_BLOCK *b, ESL_MSA *msa)
+{
+  char     *p, *tok;
+  esl_pos_t n, ntok;
+  int       idx, seqi;
+
+  /* Validate line types */
+  for (idx = 0; idx < b->nlines; idx++)
+    {
+      if      (esl_memstrpfx(b->line[idx], b->llen[idx], "#=RF")) { if (b->ltype[idx] != eslSELEX_LINE_RF) { selex_ErrorInBlock(afp, b, idx); ESL_FAIL(eslEFORMAT, afp->errmsg, "#=RF line isn't in expected order in block"); } }
+      else if (esl_memstrpfx(b->line[idx], b->llen[idx], "#=MM")) { if (b->ltype[idx] != eslSELEX_LINE_MM) { selex_ErrorInBlock(afp, b, idx); ESL_FAIL(eslEFORMAT, afp->errmsg, "#=MM line isn't in expected order in block"); } }
+      else if (esl_memstrpfx(b->line[idx], b->llen[idx], "#=CS")) { if (b->ltype[idx] != eslSELEX_LINE_CS) { selex_ErrorInBlock(afp, b, idx); ESL_FAIL(eslEFORMAT, afp->errmsg, "#=CS line isn't in expected order in block"); } }
+      else if (esl_memstrpfx(b->line[idx], b->llen[idx], "#=SS")) { if (b->ltype[idx] != eslSELEX_LINE_SS) { selex_ErrorInBlock(afp, b, idx); ESL_FAIL(eslEFORMAT, afp->errmsg, "#=SS line isn't in expected order in block"); } }
+      else if (esl_memstrpfx(b->line[idx], b->llen[idx], "#=SA")) { if (b->ltype[idx] != eslSELEX_LINE_SA) { selex_ErrorInBlock(afp, b, idx); ESL_FAIL(eslEFORMAT, afp->errmsg, "#=SA line isn't in expected order in block"); } }
+      else                                                        { if (b->ltype[idx] != eslSELEX_LINE_SQ) { selex_ErrorInBlock(afp, b, idx); ESL_FAIL(eslEFORMAT, afp->errmsg, "sequence line isn't in expected order in block"); } }
+    }
+  
+  /* Validate seq names, and set lpos */
+  for (seqi = 0, idx = 0; idx < b->nlines; idx++)
+    {
+      p = b->line[idx];
+      n = b->llen[idx];
+      if ( esl_memtok(&p, &n, " \t", &tok, &ntok) != eslOK) ESL_EXCEPTION(eslEINCONCEIVABLE, "can't happen"); /* because a block by definition consists of non-blank lines */      
+      if (b->ltype[idx] == eslSELEX_LINE_SQ)
+	{
+	  if (! esl_memstrcmp(tok, ntok, msa->sqname[seqi]))  { selex_ErrorInBlock(afp, b, idx); ESL_FAIL(eslEFORMAT, afp->errmsg, "expected sequence %s at this line of block", msa->sqname[seqi]); }
+	  seqi++;
+	}
+      b->lpos[idx] = (n ? p-b->line[idx] : -1);  /* set lpos[] to position of first seq or annotation residue */
+    }
+  return eslOK;
+}
+
+static int
+selex_append_block(ESL_MSAFILE *afp, ESL_SELEX_BLOCK *b, ESL_MSA *msa)
+{
+  char     *p;
+  esl_pos_t pos;
+  int       idx, seqi;
+  esl_pos_t leftmost, rightmost;
+  int64_t   nadd;		/* width of this sequence block, in aligned columns added to msa */
+  esl_pos_t nleft, ntext;
+  int64_t   alen;
+  int       status;
+  
+  /* Determine rpos for each line.  */
+  for (idx = 0; idx < b->nlines; idx++)
+    {
+      p   = b->line[idx];
+      pos = b->llen[idx] - 1;
+      while (pos>=0 && isspace(p[pos])) pos--;
+      b->rpos[idx] = ( (pos < b->lpos[idx]) ? -1 : pos); /* -1: a completely blank seq line is valid */
+    }
+
+  /* Determine leftmost and rightmost positions for entire block */
+  leftmost  = b->lpos[0];
+  rightmost = b->rpos[0];
+  for (idx = 1; idx < b->nlines; idx++) {
+    leftmost  = (b->lpos[idx] == -1) ? leftmost  : ESL_MIN(leftmost,  b->lpos[idx]);
+    rightmost = (b->rpos[idx] == -1) ? rightmost : ESL_MAX(rightmost, b->rpos[idx]);
+  }
+  if (rightmost == -1) return eslOK; /* super special case: no sequence or annotation data in this block at all! */
+  nadd = rightmost - leftmost + 1;
+
+  /* Appends */
+  for (seqi = 0, idx = 0; idx < b->nlines; idx++)
+    {
+      nleft  = ((b->lpos[idx] != -1) ? b->lpos[idx] - leftmost         : nadd); /* watch special case of all whitespace on data line, lpos>rpos */
+      ntext  = ((b->lpos[idx] != -1) ? b->rpos[idx] - b->lpos[idx] + 1 : 0);
+      //nright = ((b->lpos[idx] != -1) ? rightmost    - b->rpos[idx]     : 0);  // someday you might want to know nright, but for now the code doesn't use it
+
+      if      (b->ltype[idx] == eslSELEX_LINE_SQ)
+	{
+#ifdef eslAUGMENT_ALPHABET
+	  if (msa->abc)
+	    {			/* digital sequence append - mapped, preallocated */
+	      ESL_REALLOC(msa->ax[seqi],   sizeof(ESL_DSQ) * (msa->alen + nadd + 2)); 
+	      if (msa->alen == 0) msa->ax[seqi][0] = eslDSQ_SENTINEL;
+	      for (alen = msa->alen; alen < msa->alen+nleft;  alen++) msa->ax[seqi][alen+1] = esl_abc_XGetGap(msa->abc);
+
+	      status = esl_abc_dsqcat_noalloc(afp->inmap, msa->ax[seqi], &alen, b->line[idx] + b->lpos[idx], ntext);
+	      if      (status == eslEINVAL) { selex_ErrorInBlock(afp, b, idx); ESL_FAIL(eslEFORMAT, afp->errmsg, "illegal residue(s) in sequence line"); }
+	      else if (status != eslOK)     { selex_ErrorInBlock(afp, b, idx); goto ERROR; }
+	      if (alen != msa->alen + nleft + ntext) { selex_ErrorInBlock(afp, b, idx); ESL_EXCEPTION(eslEINCONCEIVABLE, afp->errmsg, "unexpected inconsistency appending a sequence"); };
+
+	      for (; alen < msa->alen+nadd;   alen++) msa->ax[seqi][alen+1] = esl_abc_XGetGap(msa->abc);
+	      msa->ax[seqi][alen+1] = eslDSQ_SENTINEL;
+	    }
+#endif
+	  if (! msa->abc)
+	    {			/* text mode sequence append - mapped, preallocated */
+	      ESL_REALLOC(msa->aseq[seqi], sizeof(char)    * (msa->alen + nadd + 1)); 
+	      for (alen = msa->alen; alen < msa->alen+nleft; alen++) msa->aseq[seqi][alen] = '.';
+
+	      status = esl_strmapcat_noalloc(afp->inmap, msa->aseq[seqi], &alen, b->line[idx] + b->lpos[idx], ntext);
+	      if      (status == eslEINVAL) { selex_ErrorInBlock(afp, b, idx); ESL_FAIL(eslEFORMAT, afp->errmsg, "illegal residue(s) in input line"); }
+	      else if (status != eslOK)     { selex_ErrorInBlock(afp, b, idx); goto ERROR; }
+	      if (alen != msa->alen + nleft + ntext) { selex_ErrorInBlock(afp, b, idx); ESL_EXCEPTION(eslEINCONCEIVABLE, afp->errmsg, "unexpected inconsistency appending a sequence"); };
+
+	      for  (; alen < msa->alen+nadd;  alen++) msa->aseq[seqi][alen] = '.';
+	      msa->aseq[seqi][alen] = '\0';
+	    }
+	  seqi++;
+	}
+      else 
+	{			/* annotation append: not mapped, characters are copied exactly as they are */
+	  if      (b->ltype[idx] == eslSELEX_LINE_RF) { ESL_REALLOC(msa->rf,         sizeof(char) * (msa->alen + nadd + 1)); p = msa->rf;         }
+	  if      (b->ltype[idx] == eslSELEX_LINE_MM) { ESL_REALLOC(msa->mm,         sizeof(char) * (msa->alen + nadd + 1)); p = msa->mm;         }
+	  else if (b->ltype[idx] == eslSELEX_LINE_CS) { ESL_REALLOC(msa->ss_cons,    sizeof(char) * (msa->alen + nadd + 1)); p = msa->ss_cons;    }
+	  else if (b->ltype[idx] == eslSELEX_LINE_SS) { ESL_REALLOC(msa->ss[seqi-1], sizeof(char) * (msa->alen + nadd + 1)); p = msa->ss[seqi-1]; }
+	  else if (b->ltype[idx] == eslSELEX_LINE_SA) { ESL_REALLOC(msa->sa[seqi-1], sizeof(char) * (msa->alen + nadd + 1)); p = msa->sa[seqi-1]; }
+
+	  for (alen = msa->alen; alen < msa->alen+nleft; alen++) p[alen] = '.';
+	  if (ntext) memcpy(p+msa->alen+nleft, b->line[idx]+b->lpos[idx], sizeof(char)*ntext);
+	  for (alen = msa->alen+nleft+ntext; alen < msa->alen+nadd; alen++) p[alen] = '.';
+	  p[alen] = '\0';
+	}
+    }
+  msa->alen += nadd;
+  return eslOK;
+
+ ERROR:
+  return status;
+}    
+    
+
+/*****************************************************************
+ * 4. Unit tests.
+ *****************************************************************/
+#ifdef eslMSAFILE_SELEX_TESTDRIVE
+
+static void
+utest_write_good1(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("seq1 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq3 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq4 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq5 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+
+  *ret_alphatype = eslAMINO;
+  *ret_nseq      = 5;
+  *ret_alen      = 20;
+}
+
+static void
+utest_write_good2(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("# DOS format (\\r\\n), and doesn't end in a newline.\r\n", ofp);
+  fputs("# \r\n", ofp);
+  fputs("#=RF xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=CS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("seq1 ACDEFGHIKLMNPQRSTVWY\r\n", ofp);
+  fputs("#=SS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=SA xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("seq2 ACDEFGHIKLMNPQRSTVWY\r\n", ofp);
+  fputs("#=SS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=SA xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("seq3 ACDEFGHIKLMNPQRSTVWY\r\n", ofp);
+  fputs("#=SS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=SA xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("seq4 ACDEFGHIKLMNPQRSTVWY\r\n", ofp);
+  fputs("#=SS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=SA xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("seq5 ACDEFGHIKLMNPQRSTVWY\r\n", ofp);
+  fputs("#=SS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=SA xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("\r\n", ofp);
+  fputs("#=RF xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=CS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("seq1 ACDEFGHIKLMNPQRSTVWY\r\n", ofp);
+  fputs("#=SS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=SA xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("seq2 ACDEFGHIKLMNPQRSTVWY\r\n", ofp);
+  fputs("#=SS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=SA xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("seq3 ACDEFGHIKLMNPQRSTVWY\r\n", ofp);
+  fputs("#=SS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=SA xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("seq4 ACDEFGHIKLMNPQRSTVWY\r\n", ofp);
+  fputs("#=SS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=SA xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("seq5 ACDEFGHIKLMNPQRSTVWY\r\n", ofp);
+  fputs("#=SS xxxxxxxxxxxxxxxxxxxx\r\n", ofp);
+  fputs("#=SA xxxxxxxxxxxxxxxxxxxx",    ofp);
+
+  *ret_alphatype = eslAMINO;
+  *ret_nseq      = 5;
+  *ret_alen      = 40;
+}
+
+static void
+utest_write_good3(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("\n", ofp);
+  fputs("#=CS\n", ofp);
+  fputs("#=RF\n", ofp);
+  fputs("seq1 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("long_name GHIKLMNPQRSTVWY\n", ofp);
+  fputs("blank_seq_all_gaps \n", ofp);
+  fputs("seq2 ACDEF---KLMNPQRSTVWY\n", ofp);
+  fputs("seq3 ACDEF...KLMNPQRSTVWY\n", ofp);
+  fputs("# embedded comments ok\n", ofp);
+  fputs("seq4 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs(" seq5 CDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=SS \n", ofp);
+  fputs("#=SA\n", ofp);
+  fputs("\n", ofp);
+  fputs("\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=CS\n", ofp);
+  fputs("#=RF\n", ofp);
+  fputs("seq1 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("long_name GHIKLMNPQRSTVWY\n", ofp);
+  fputs("blank_seq_all_gaps \n", ofp);
+  fputs("seq2 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq3 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq4 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq5 ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=SS \n", ofp);
+  fputs("#=SA\n", ofp);
+
+  *ret_alphatype = eslAMINO;
+  *ret_nseq      = 7;
+  *ret_alen      = 52;
+}
+
+static void
+utest_write_good4(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("# A complicated SELEX example\n", ofp);
+  fputs("\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=RF        xxxxxxx xxxx xxxxxx\n", ofp);
+  fputs("#=CS        >>>>+>> ^^^^ <<<<<<\n", ofp);
+  fputs("28    gGAGUAAGAUAGC AUCA GCAUCUUGUUCC\n", ofp);
+  fputs("#=SS  +++++>>>>>+>> ^^^^ <<<<<<<+++++\n", ofp);
+  fputs("longname    GUUCACC AUCA GGGGAc\n", ofp);
+  fputs("#=SS        >>>>+>> ^^^^ <<<<<<\n", ofp);
+  fputs("2     AUGGAUGCGCACC AUCA GGGCGUaucuau\n", ofp);
+  fputs("3           GAUCACC AUCA GGGauc\n", ofp);
+  fputs("4           GGUCACC AUCA GGGauc\n", ofp);
+  fputs("5           GGACACC AUCA GGGucu\n", ofp);
+  fputs("6              CACC AUCA GGG\n", ofp);
+  fputs("7           GAUCACC AUCA GGGauc\n", ofp);
+  fputs("8            CUCACC AUCA GGGGG\n", ofp);
+  fputs("9           AUGCACC AUCA GGGCAU\n", ofp);
+  fputs("10           CUCACC AUCA GGGGG\n", ofp);
+
+  *ret_alphatype = eslRNA;
+  *ret_nseq      = 11;
+  *ret_alen      = 31;
+}
+
+static void
+utest_goodfile(char *filename, int testnumber, int expected_alphatype, int expected_nseq, int expected_alen)
+{
+  ESL_ALPHABET        *abc          = NULL;
+  ESL_MSAFILE        *afp          = NULL;
+  ESL_MSA             *msa1         = NULL;
+  ESL_MSA             *msa2         = NULL;
+  char                 tmpfile1[32] = "esltmpXXXXXX";
+  char                 tmpfile2[32] = "esltmpXXXXXX";
+  FILE                *ofp          = NULL;
+  int                  status;
+
+  /* guessing both the format and the alphabet should work: this is a digital open */
+  if ( (status = esl_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("selex good file test %d failed: digital open",           testnumber);  
+  if (afp->format != eslMSAFILE_SELEX)                                                             esl_fatal("selex good file test %d failed: format autodetection",   testnumber);
+  if (abc->type   != expected_alphatype)                                                           esl_fatal("selex good file test %d failed: alphabet autodetection", testnumber);
+
+  /* This is a digital read, using <abc>. */
+  if ( (status = esl_msafile_selex_Read(afp, &msa1))   != eslOK)  esl_fatal("selex good file test %d failed: msa read, digital", testnumber);  
+  if (msa1->nseq != expected_nseq || msa1->alen != expected_alen) esl_fatal("selex good file test %d failed: nseq/alen",         testnumber);
+  if (esl_msa_Validate(msa1, NULL) != eslOK)                      esl_fatal("selex good file test %d failed: msa1 invalid",      testnumber);
+  esl_msafile_Close(afp);  
+
+  /* write it back out to a new tmpfile (digital write) */
+  if ( (status = esl_tmpfile_named(tmpfile1, &ofp))  != eslOK) esl_fatal("selex good file test %d failed: tmpfile creation",   testnumber);
+  if ( (status = esl_msafile_selex_Write(ofp, msa1)) != eslOK) esl_fatal("selex good file test %d failed: msa write, digital", testnumber);
+  fclose(ofp);
+
+  /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */
+  if ( (status = esl_msafile_Open(NULL, tmpfile1, NULL, eslMSAFILE_SELEX, NULL, &afp)) != eslOK) esl_fatal("selex good file test %d failed: text mode open", testnumber);  
+  if ( (status = esl_msafile_selex_Read(afp, &msa2))                                   != eslOK) esl_fatal("selex good file test %d failed: msa read, text", testnumber);  
+  if (msa2->nseq != expected_nseq || msa2->alen != expected_alen)                                esl_fatal("selex good file test %d failed: nseq/alen",      testnumber);
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                     esl_fatal("selex good file test %d failed: msa2 invalid",   testnumber);
+  esl_msafile_Close(afp);
+  
+  /* write it back out to a new tmpfile (text write) */
+  if ( (status = esl_tmpfile_named(tmpfile2, &ofp))   != eslOK) esl_fatal("selex good file test %d failed: tmpfile creation", testnumber);
+  if ( (status = esl_msafile_selex_Write(ofp, msa2))  != eslOK) esl_fatal("selex good file test %d failed: msa write, text",  testnumber);
+  fclose(ofp);
+  esl_msa_Destroy(msa2);
+
+  /* open and read it in digital mode */
+  if ( (status = esl_msafile_Open(&abc, tmpfile1, NULL, eslMSAFILE_SELEX, NULL, &afp)) != eslOK) esl_fatal("selex good file test %d failed: 2nd digital mode open", testnumber);  
+  if ( (status = esl_msafile_selex_Read(afp, &msa2))                                   != eslOK) esl_fatal("selex good file test %d failed: 2nd digital msa read",  testnumber);  
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                     esl_fatal("selex good file test %d failed: msa2 invalid",          testnumber);
+  esl_msafile_Close(afp);
+
+  /* this msa <msa2> should be identical to <msa1> */
+  if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("selex good file test %d failed: msa compare", testnumber);  
+
+  remove(tmpfile1);
+  remove(tmpfile2);
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_alphabet_Destroy(abc);
+}
+
+
+static void
+write_test_msas(FILE *ofp1, FILE *ofp2)
+{
+  fprintf(ofp1, "# selex comments ignored \n");
+  fprintf(ofp1, "#=RF ..xxxxxxxxxxxxxxxxxxxx\n");
+  fprintf(ofp1, "seq1 ..acdefghiklmnpqrstvwy\n");
+  fprintf(ofp1, "seq2 ..acdefghiklmnpqrstv--\n");
+  fprintf(ofp1, "seq3 aaacdefghiklmnpqrstv--\n");
+  fprintf(ofp1, "# selex comments ignored \n");
+  fprintf(ofp1, "seq4 ..acdefghiklmnpqrstvwy\n");
+  fprintf(ofp1, "\n");
+  fprintf(ofp1, "#=RF xxxxxxxxxxxxxxxxxxxx..\n");
+  fprintf(ofp1, "seq1 ACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp1, "seq2 ACDEFGHIKLMNPQRSTVWYYY\n");
+  fprintf(ofp1, "seq3 ACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp1, "seq4 ACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp1, "\n");
+
+  fprintf(ofp2, "# STOCKHOLM 1.0\n");
+  fprintf(ofp2, "\n");
+  fprintf(ofp2, "#=GC RF ..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..\n");
+  fprintf(ofp2, "seq1    ..acdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "seq2    ..acdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWYYY\n");
+  fprintf(ofp2, "seq3    aaacdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "seq4    ..acdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWY..\n");
+  fprintf(ofp2, "//\n");
+}
+
+static void
+read_test_msas_digital(char *slxfile, char *stkfile)
+{
+  char msg[]         = "SELEX msa digital read unit test failed";
+  ESL_ALPHABET *abc  = NULL;
+  ESL_MSAFILE *afp1 = NULL;
+  ESL_MSAFILE *afp2 = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  FILE         *slxfp, *stkfp;
+  char          slxfile2[32]  = "esltmpslx2XXXXXX";
+  char          stkfile2[32]  = "esltmpstk2XXXXXX";
+
+  if ( esl_msafile_Open(&abc, slxfile, NULL, eslMSAFILE_SELEX,     NULL, &afp1)   != eslOK)  esl_fatal(msg);
+  if ( !abc || abc->type != eslAMINO)                                                        esl_fatal(msg);
+  if ( esl_msafile_Open(&abc, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2)   != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_selex_Read    (afp1, &msa1)                                    != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa2)                                    != eslOK)  esl_fatal(msg);
+  if ( esl_msa_Compare(msa1, msa2)                                                != eslOK)  esl_fatal(msg);
+  
+  if ( esl_msafile_selex_Read    (afp1, &msa3)  != eslEOF) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa3)  != eslEOF) esl_fatal(msg);
+
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  /* Now write stk to selex file, and vice versa; then retest */
+  if ( esl_tmpfile_named(slxfile2, &slxfp)                                  != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile2, &stkfp)                                  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_selex_Write    (slxfp, msa2)                             != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM)       != eslOK) esl_fatal(msg);
+  fclose(slxfp);
+  fclose(stkfp);
+  if ( esl_msafile_Open(&abc, slxfile2, NULL, eslMSAFILE_SELEX,     NULL, &afp1) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Open(&abc, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg);
+  if ( esl_msafile_selex_Read    (afp1, &msa3)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa4)                                   != eslOK) esl_fatal(msg);
+  if ( esl_msa_Compare(msa3, msa4)                                               != eslOK) esl_fatal(msg);
+
+  remove(slxfile2);
+  remove(stkfile2);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+  esl_alphabet_Destroy(abc);
+}
+
+static void
+read_test_msas_text(char *slxfile, char *stkfile)
+{
+  char msg[]         = "SELEX msa text-mode read unit test failed";
+  ESL_MSAFILE *afp1 = NULL;
+  ESL_MSAFILE *afp2 = NULL;
+  ESL_MSA      *msa1, *msa2, *msa3, *msa4;
+  FILE         *slxfp, *stkfp;
+  char          slxfile2[32]  = "esltmpslx2XXXXXX";
+  char          stkfile2[32]  = "esltmpstk2XXXXXX";
+
+  /*                     vvvv-- everything's the same as the digital utest except these NULLs  */
+  if ( esl_msafile_Open(NULL, slxfile, NULL, eslMSAFILE_SELEX,     NULL, &afp1)   != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_Open(NULL, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2)   != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_selex_Read    (afp1, &msa1)                                    != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa2)                                    != eslOK)  esl_fatal(msg);
+  if ( esl_msa_Compare(msa1, msa2)                                                != eslOK)  esl_fatal(msg);
+  if ( esl_msafile_selex_Read    (afp1, &msa3)                                    != eslEOF) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa3)                                    != eslEOF) esl_fatal(msg);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  if ( esl_tmpfile_named(slxfile2, &slxfp)                               != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile2, &stkfp)                               != eslOK) esl_fatal(msg);
+  if ( esl_msafile_selex_Write    (slxfp, msa2)                          != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM)    != eslOK) esl_fatal(msg);
+  fclose(slxfp);
+  fclose(stkfp);
+  if ( esl_msafile_Open(NULL, slxfile2, NULL, eslMSAFILE_SELEX,     NULL, &afp1)  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_Open(NULL, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2)  != eslOK) esl_fatal(msg);
+  if ( esl_msafile_selex_Read    (afp1, &msa3)                                    != eslOK) esl_fatal(msg);
+  if ( esl_msafile_stockholm_Read(afp2, &msa4)                                    != eslOK) esl_fatal(msg);
+  if ( esl_msa_Compare(msa3, msa4)                                                != eslOK) esl_fatal(msg);
+
+  remove(slxfile2);
+  remove(stkfile2);
+  esl_msafile_Close(afp2);
+  esl_msafile_Close(afp1);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);  
+  esl_msa_Destroy(msa4);
+}
+#endif /*eslMSAFILE_SELEX_TESTDRIVE*/
+/*---------------------- end, unit tests ------------------------*/
+
+
+/*****************************************************************
+ * 5. Test driver.
+ *****************************************************************/
+#ifdef eslMSAFILE_SELEX_TESTDRIVE
+/* compile: gcc -g -Wall -I. -L. -o esl_msafile_selex_utest -DeslMSAFILE_SELEX_TESTDRIVE esl_msafile_selex.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_selex_utest -DeslMSAFILE_SELEX_TESTDRIVE esl_msafile_selex.c -leasel -lm
+ * run:     ./esl_msafile_selex_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_msafile.h"
+#include "esl_msafile_selex.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for SELEX MSA format module";
+
+int
+main(int argc, char **argv)
+{
+  char            msg[]        = "PSI-BLAST MSA i/o module test driver failed";
+  ESL_GETOPTS    *go           = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  char            slxfile[32]  = "esltmpslxXXXXXX";
+  char            stkfile[32]  = "esltmpstkXXXXXX";
+  FILE           *slxfp, *stkfp;
+  int             testnumber;
+  int             ngoodtests = 4;
+  char            tmpfile[32];
+  FILE           *ofp;
+  int             expected_alphatype;
+  int             expected_nseq;
+  int             expected_alen;
+
+  if ( esl_tmpfile_named(slxfile, &slxfp) != eslOK) esl_fatal(msg);
+  if ( esl_tmpfile_named(stkfile, &stkfp) != eslOK) esl_fatal(msg);
+  write_test_msas(slxfp, stkfp);
+  fclose(slxfp);
+  fclose(stkfp);
+
+  read_test_msas_digital(slxfile, stkfile);
+  read_test_msas_text   (slxfile, stkfile);
+
+  /* Various "good" files that should be parsed correctly */
+  for (testnumber = 1; testnumber <= ngoodtests; testnumber++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX"); 
+      if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+      switch (testnumber) {
+      case  1:  utest_write_good1 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  2:  utest_write_good2 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  3:  utest_write_good3 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      case  4:  utest_write_good4 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      }
+      fclose(ofp);
+      utest_goodfile(tmpfile, testnumber, expected_alphatype, expected_nseq, expected_alen);
+      remove(tmpfile);
+    }
+
+
+  remove(slxfile);
+  remove(stkfile);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslMSAFILE_SELEX_TESTDRIVE*/
+/*--------------------- end, test driver ------------------------*/
+
+
+
+
+/*****************************************************************
+ * 6. Examples.
+ *****************************************************************/
+
+#ifdef eslMSAFILE_SELEX_EXAMPLE
+/* A full-featured example of reading/writing an MSA in SELEX format(s).
+   gcc -g -Wall -o esl_msafile_selex_example -I. -L. -DeslMSAFILE_SELEX_EXAMPLE esl_msafile_selex.c -leasel -lm
+   ./esl_msafile_selex_example <msafile>
+ */
+/*::cexcerpt::msafile_selex_example::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_selex.h"
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",        0 },
+  { "-1",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "no autodetection; force SELEX format",        0 },
+  { "-q",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "quieter: don't write msa back, just summary", 0 },
+  { "-t",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use text mode: no digital alphabet",          0 },
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is DNA",                0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is RNA",                0 },
+  { "--amino",     eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is protein",            0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msafile>";
+static char banner[] = "example of guessing, reading, writing SELEX format";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS        *go          = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char               *filename    = esl_opt_GetArg(go, 1);
+  int                 infmt       = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET       *abc         = NULL;
+  ESL_MSAFILE        *afp         = NULL;
+  ESL_MSA            *msa         = NULL;
+  int                 status;
+
+  if      (esl_opt_GetBoolean(go, "-1"))      infmt = eslMSAFILE_SELEX;
+
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); 
+
+  /* Text mode: pass NULL for alphabet.
+   * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed 
+   */
+  if   (esl_opt_GetBoolean(go, "-t"))  status = esl_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp);
+  else                                 status = esl_msafile_Open(&abc, filename, NULL, infmt, NULL, &afp);
+  if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+
+  if ( (status = esl_msafile_selex_Read(afp, &msa)) != eslOK)
+    esl_msafile_ReadFailure(afp, status);
+
+  printf("alphabet:       %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)"));
+  printf("# of seqs:      %d\n", msa->nseq);
+  printf("# of cols:      %d\n", (int) msa->alen);
+  printf("\n");
+
+  if (! esl_opt_GetBoolean(go, "-q"))
+    esl_msafile_selex_Write(stdout, msa);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  if (abc) esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+/*::cexcerpt::msafile_selex_example::end::*/
+#endif /*eslMSAFILE_SELEX_EXAMPLE*/
+
+#ifdef eslMSAFILE_SELEX_EXAMPLE2
+/* A minimal example. Read SELEX MSA, in text mode.
+   gcc -g -Wall -o esl_msafile_selex_example2 -I. -L. -DeslMSAFILE_SELEX_EXAMPLE2 esl_msafile_selex.c -leasel -lm
+   ./esl_msafile_selex_example2 <msafile>
+ */
+
+/*::cexcerpt::msafile_selex_example2::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_selex.h"
+
+int 
+main(int argc, char **argv)
+{
+  char         *filename = argv[1];
+  int           fmt      = eslMSAFILE_SELEX;
+  ESL_MSAFILE  *afp      = NULL;
+  ESL_MSA      *msa      = NULL;
+  int           status;
+
+  if ( (status = esl_msafile_Open(NULL, filename, NULL, fmt, NULL, &afp)) != eslOK)  esl_msafile_OpenFailure(afp, status);
+  if ( (status = esl_msafile_selex_Read(afp, &msa))                       != eslOK)  esl_msafile_ReadFailure(afp, status);
+
+  printf("%6d seqs, %5d columns\n",  msa->nseq, (int) msa->alen);
+
+  esl_msafile_selex_Write(stdout, msa);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+  exit(0);
+}
+/*::cexcerpt::msafile_selex_example2::end::*/
+#endif /*eslMSAFILE_SELEX_EXAMPLE2*/
+/*--------------------- end of example --------------------------*/
+
+
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_selex.h b/esl_msafile_selex.h
new file mode 100644
index 0000000..419fe49
--- /dev/null
+++ b/esl_msafile_selex.h
@@ -0,0 +1,18 @@
+/* i/o of multiple sequence alignment files in SELEX format
+ */
+#ifndef eslMSAFILE_SELEX_INCLUDED
+#define eslMSAFILE_SELEX_INCLUDED
+
+#include "esl_msa.h"
+#include "esl_msafile.h"
+
+extern int esl_msafile_selex_SetInmap     (ESL_MSAFILE *afp);
+extern int esl_msafile_selex_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type);
+extern int esl_msafile_selex_Read         (ESL_MSAFILE *afp, ESL_MSA **ret_msa);
+extern int esl_msafile_selex_Write        (FILE *fp,    const ESL_MSA *msa);
+
+#endif /* eslMSAFILE_SELEX_INCLUDED */
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_stockholm.c b/esl_msafile_stockholm.c
new file mode 100644
index 0000000..1bbeb2f
--- /dev/null
+++ b/esl_msafile_stockholm.c
@@ -0,0 +1,2749 @@
+/* I/O of multiple sequence alignment files in Stockholm/Pfam format
+ * (Pfam format = always single block; Stockholm = multiblock allowed)
+ * 
+ * Contents:
+ *   1. API for reading/writing Stockholm/Pfam input.
+ *   2. Internal: ESL_STOCKHOLM_PARSEDATA auxiliary structure.
+ *   3. Internal: parsing Stockholm line types.
+ *   4. Internal: looking up seq, tag indices.
+ *   5. Internal: writing Stockholm/Pfam formats
+ *   6. Unit tests.
+ *   7. Test driver.
+ *   8. Example.
+ *   9. License and copyright.
+ */
+#include "esl_config.h"
+
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#include "esl_mem.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_stockholm.h"
+
+/* Valid line types in an alignment block */
+#define eslSTOCKHOLM_LINE_SQ        1
+#define eslSTOCKHOLM_LINE_GC_SSCONS 2
+#define eslSTOCKHOLM_LINE_GC_SACONS 3
+#define eslSTOCKHOLM_LINE_GC_PPCONS 4
+#define eslSTOCKHOLM_LINE_GC_RF     5
+#define eslSTOCKHOLM_LINE_GC_OTHER  6
+#define eslSTOCKHOLM_LINE_GR_SS     7
+#define eslSTOCKHOLM_LINE_GR_SA     8
+#define eslSTOCKHOLM_LINE_GR_PP     9
+#define eslSTOCKHOLM_LINE_GR_OTHER  10
+#define eslSTOCKHOLM_LINE_GC_MM     11
+
+typedef struct {
+  /* information about the size of the growing alignment parse */
+  int       nseq;		/* # of sqnames currently stored, sqname[0..nseq-1]. Copy of msa->nseq */
+  int64_t   alen;		/* alignment length not including current block being parsed. Becomes msa->alen when done */
+
+  /* Having to do with the expected order of lines in each Stockholm block: */
+  int       in_block;		/* TRUE if we're in a block (GC, GR, or sequence lines) */
+  char     *blinetype;		/* blinetype[bi=0..npb-1] = code for linetype on parsed block line [bi]: GC, GR, or seq  */
+  int      *bidx;		/* bidx[bi=0.npb-1] = seq index si=0..nseq-1 of seq or GR on parsed block line [bi]; or -1 for GC lines */
+  int       npb;		/* number of lines per block. Set by bi in 1st block; checked against bi thereafter */
+  int       bi;			/* index of current line in a block, 0..npb-1  */
+  int       si;		        /* current (next expected) sequence index, 0..nseq */
+  int       balloc;		/* number of lines per block currently allocated for. */
+
+  /* Other information kept per block */
+  int       nblock;		/* current block number (starting at 0 while in first block) */
+  int       nseq_b;             /* number of sequences seen in this block so far */
+  int64_t   alen_b;     	/* residues added by each seq field in curr block            */
+
+  /* Having to do with the growing lengths (and numbers) of sequences and annotations in <msa>: */
+  /* yes, needed: used to catch dup lines in a block, such as seq1 xxx, seq1 xxx.               */
+  int64_t    ssconslen;		/* current length of #=GC SS_cons annotation */
+  int64_t    saconslen;		/* current length of #=GC SA_cons annotation */
+  int64_t    ppconslen;		/* current length of #=GC PP_cons annotation */
+  int64_t    rflen;		    /* current length of #=GC RF annotation */
+  int64_t    mmasklen;    /* current length of #=GC MM annotation */
+  int64_t   *sqlen;		/* current lengths of ax[0..nseq-1] or aseq[0..nseq-1]  */
+  int64_t   *sslen;		/* current lengths of ss[0..nseq-1] */
+  int64_t   *salen;		/* current lengths of sa[0..nseq-1] */
+  int64_t   *pplen;		/* current lengths of pp[0..nseq-1] */
+  int64_t   *ogc_len;		/* current lengths of unparsed gc[0..ngc-1]  */
+  int64_t  **ogr_len;		/* current lengths of unparsed gr[0..ngr-1][0..nseq-1] */
+  int        salloc;		/* # of sqnames currently allocated for (synced to msa->sqalloc) */
+} ESL_STOCKHOLM_PARSEDATA;
+
+static ESL_STOCKHOLM_PARSEDATA *stockholm_parsedata_Create(ESL_MSA *msa);
+static int                      stockholm_parsedata_ExpandSeq  (ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa);
+static int                      stockholm_parsedata_ExpandBlock(ESL_STOCKHOLM_PARSEDATA *pd);
+static void                     stockholm_parsedata_Destroy    (ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa);
+
+static int stockholm_parse_gf(ESL_MSAFILE *afp, ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa, char *p, esl_pos_t n);
+static int stockholm_parse_gs(ESL_MSAFILE *afp, ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa, char *p, esl_pos_t n);
+static int stockholm_parse_gc(ESL_MSAFILE *afp, ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa, char *p, esl_pos_t n);
+static int stockholm_parse_gr(ESL_MSAFILE *afp, ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa, char *p, esl_pos_t n);
+static int stockholm_parse_sq(ESL_MSAFILE *afp, ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa, char *p, esl_pos_t n);
+static int stockholm_parse_comment(ESL_MSA *msa, char *p, esl_pos_t n);
+
+static int stockholm_get_seqidx   (ESL_MSA *msa, ESL_STOCKHOLM_PARSEDATA *pd, char *name, esl_pos_t n,      int *ret_idx);
+static int stockholm_get_gr_tagidx(ESL_MSA *msa, ESL_STOCKHOLM_PARSEDATA *pd, char *tag,  esl_pos_t taglen, int *ret_tagidx);
+static int stockholm_get_gc_tagidx(ESL_MSA *msa, ESL_STOCKHOLM_PARSEDATA *pd, char *tag,  esl_pos_t taglen, int *ret_tagidx);
+
+static int stockholm_write(FILE *fp, const ESL_MSA *msa, int64_t cpl);
+
+
+/*****************************************************************
+ *# 1. API for reading/writing Stockholm input.
+ *****************************************************************/
+
+/* Function:  esl_msafile_stockholm_SetInmap()
+ * Synopsis:  Configure the input map for Stockholm format.
+ *
+ * Purpose:   Configure <afp->inmap> for Stockholm format.
+ *
+ *            Text mode accepts any <isgraph()> character. 
+ *            Digital mode enforces the usual Easel alphabets.
+ *            
+ *            No characters may be ignored in the input. We cannot
+ *            skip whitespace in the inmap, because we'd misalign
+ *            relative to the text-mode annotation lines (GR, GC),
+ *            where we don't do mapped input.)
+ */
+int
+esl_msafile_stockholm_SetInmap(ESL_MSAFILE *afp)
+{
+  int sym;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc)
+    {
+      for (sym = 0; sym < 128; sym++) 
+	afp->inmap[sym] = afp->abc->inmap[sym];
+      afp->inmap[0] = esl_abc_XGetUnknown(afp->abc);
+    }
+#endif
+  if (! afp->abc)
+    {
+      for (sym = 1; sym < 128; sym++) 
+	afp->inmap[sym] = (isgraph(sym) ? sym : eslDSQ_ILLEGAL);
+      afp->inmap[0] = '?';
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_msafile_stockholm_GuessAlphabet()
+ * Synopsis:  Guess the alphabet of an open Stockholm MSA file.
+ *
+ * Purpose:   Guess the alphabet of the sequences in open
+ *            Stockholm-format MSA file <afp>.
+ *            
+ *            On a normal return, <*ret_type> is set to <eslDNA>,
+ *            <eslRNA>, or <eslAMINO>, and <afp> is reset to its
+ *            original position.
+ *
+ * Args:      afp      - open Stockholm-format MSA file
+ *            ret_type - RETURN: <eslDNA>, <eslRNA>, or <eslAMINO>       
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslENOALPHABET> if alphabet type can't be determined.
+ *            In either case, <afp> is rewound to the position it
+ *            started at.
+ */
+int
+esl_msafile_stockholm_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type)
+{
+  int       alphatype     = eslUNKNOWN;
+  esl_pos_t anchor        = -1;
+  int       threshold[3]  = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */
+  int       nsteps        = 3;
+  int       step          = 0;
+  int       nres          = 0;
+  int       x;
+  int64_t   ct[26];
+  char     *p, *tok;
+  esl_pos_t n,  toklen, pos;
+  int       status;
+
+  for (x = 0; x < 26; x++) ct[x] = 0;
+
+  anchor = esl_buffer_GetOffset(afp->bf);
+  if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */
+
+  while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK)
+    {
+      if ((status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK || *tok == '#') continue; /* blank lines, annotation, comments */
+      /* p now points to the rest of the sequence line */
+      
+      /* count characters into ct[] array */
+      for (pos = 0; pos < n; pos++)
+	if (isalpha(p[pos])) {
+	  x = toupper(p[pos]) - 'A';
+	  ct[x]++; 
+	  nres++; 
+	}
+
+      /* try to stop early, checking after 500, 5000, and 50000 residues: */
+      if (step < nsteps && nres > threshold[step]) {
+	if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */
+	step++;
+      }
+    }
+  if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */
+  status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */
+
+ DONE:
+  esl_buffer_SetOffset(afp->bf, anchor);   /* Rewind to where we were. */
+  esl_buffer_RaiseAnchor(afp->bf, anchor);
+  *ret_type = alphatype;
+  return status;
+
+ ERROR:
+  if (anchor != -1) {
+    esl_buffer_SetOffset(afp->bf, anchor);
+    esl_buffer_RaiseAnchor(afp->bf, anchor);
+  }
+  *ret_type = eslUNKNOWN;
+  return status;
+}
+
+
+/* Function:  esl_msafile_stockholm_Read()
+ * Synopsis:  Read an alignment in Stockholm format.
+ *
+ * Purpose:   Read an MSA from open <ESL_MSAFILE> <afp>, 
+ *            parsing for Stockholm format. Create a new
+ *            MSA, and return it by reference through 
+ *            <*ret_msa>. Caller is responsible for freeing
+ *            this <ESL_MSA>.
+ *            
+ * Args:      <afp>     - open <ESL_MSAFILE> to read from
+ *            <ret_msa> - RETURN: newly parsed, created <ESL_MSA>
+ *
+ * Returns:   <eslOK> on success. <*ret_msa> contains the newly
+ *            allocated MSA. <afp> is poised at start of next
+ *            alignment record, or is at EOF.
+ *
+ *            <eslEOF> if no (more) alignment data are found in
+ *            <afp>, and <afp> is returned at EOF. 
+ *
+ *            <eslEFORMAT> on a parse error. <*ret_msa> is set to
+ *            <NULL>. <afp> contains information sufficient for
+ *            constructing useful diagnostic output: 
+ *            | <afp->errmsg>       | user-directed error message     |
+ *            | <afp->linenumber>   | line # where error was detected |
+ *            | <afp->line>         | offending line (not NUL-term)   |
+ *            | <afp->n>            | length of offending line        |
+ *            | <afp->bf->filename> | name of the file                |
+ *            and <afp> is poised at the start of the following line,
+ *            so (in principle) the caller could try to resume
+ *            parsing.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslESYS> if a system call fails, such as fread().
+ *            <*ret_msa> is returned <NULL>.
+ */
+int
+esl_msafile_stockholm_Read(ESL_MSAFILE *afp, ESL_MSA **ret_msa)
+{
+  ESL_MSA                 *msa      = NULL;
+  ESL_STOCKHOLM_PARSEDATA *pd       = NULL;
+  char                    *p;
+  esl_pos_t                n;
+  int                      idx;
+  int                      status;
+
+  ESL_DASSERT1( (afp->format == eslMSAFILE_PFAM || afp->format == eslMSAFILE_STOCKHOLM) );
+
+  afp->errmsg[0] = '\0';
+
+  /* Allocate a growable MSA, and auxiliary parse data coupled to the MSA allocation */
+#ifdef eslAUGMENT_ALPHABET
+  if (afp->abc   &&  (msa = esl_msa_CreateDigital(afp->abc, 16, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+#endif
+  if (! afp->abc &&  (msa = esl_msa_Create(                 16, -1)) == NULL) { status = eslEMEM; goto ERROR; }
+  if ( (pd = stockholm_parsedata_Create(msa))                        == NULL) { status = eslEMEM; goto ERROR; }
+
+  /* Skip leading blank lines in file. EOF here is a normal EOF return. */
+  do { 
+    if ( ( status = esl_msafile_GetLine(afp, &p, &n)) != eslOK) goto ERROR;  /* eslEOF is OK here - end of input (eslEOF) [eslEMEM|eslESYS] */
+  } while (esl_memspn(afp->line, afp->n, " \t") == afp->n ||                  /* skip blank lines             */
+	   (esl_memstrpfx(afp->line, afp->n, "#")                             /* and skip comment lines       */
+	    && ! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM")));           /* but stop on Stockholm header */
+
+  /* Check for the magic Stockholm header */
+  if (! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM 1."))  ESL_XFAIL(eslEFORMAT, afp->errmsg, "missing Stockholm header");
+
+  while ( (status = esl_msafile_GetLine(afp, &p, &n)) == eslOK) /* (eslEOF) [eslEMEM|eslESYS] */
+    {
+      while (n && ( *p == ' ' || *p == '\t')) { p++; n--; } /* skip leading whitespace */
+
+      if (!n || esl_memstrpfx(p, n, "//"))
+	{ /* blank lines and the Stockholm end-of-record // trigger end-of-block logic */
+	  if (pd->in_block) {
+	    if (pd->nblock) { if (pd->nseq_b != pd->nseq) ESL_XFAIL(eslEFORMAT, afp->errmsg, "number of seqs in block did not match number in earlier block(s)");     }
+	    else            { if (pd->nseq_b < pd->nseq)  ESL_XFAIL(eslEFORMAT, afp->errmsg, "number of seqs in block did not match number annotated by #=GS lines"); };
+	    if (pd->nblock) { if (pd->bi != pd->npb)      ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected number of lines in alignment block"); }
+
+	    pd->nseq     = msa->nseq = pd->nseq_b;
+	    pd->alen    += pd->alen_b;
+	    pd->in_block = FALSE;
+	    pd->npb      = pd->bi;
+	    pd->bi       = 0;
+	    pd->si       = 0;
+	    pd->nblock  += 1;
+	    pd->nseq_b   = 0;
+	    pd->alen_b   = 0;
+	  }
+	  if   (esl_memstrpfx(p, n, "//"))   break; /* Stockholm end-of-record marker */
+	  else continue;			    /* else, on to next block */
+	}
+
+      if (*p == '#') 
+	{
+	  if      (esl_memstrpfx(p, n, "#=GF")) { if ((status = stockholm_parse_gf     (afp, pd, msa, p, n)) != eslOK) goto ERROR; }
+	  else if (esl_memstrpfx(p, n, "#=GS")) { if ((status = stockholm_parse_gs     (afp, pd, msa, p, n)) != eslOK) goto ERROR; }
+	  else if (esl_memstrpfx(p, n, "#=GC")) { if ((status = stockholm_parse_gc     (afp, pd, msa, p, n)) != eslOK) goto ERROR; }
+	  else if (esl_memstrpfx(p, n, "#=GR")) { if ((status = stockholm_parse_gr     (afp, pd, msa, p, n)) != eslOK) goto ERROR; }
+	  else if (esl_memstrcmp(p, n, "# STOCKHOLM 1.0")) ESL_XFAIL(eslEFORMAT, afp->errmsg, "two # STOCKHOLM 1.0 headers in a row?");
+	  else                                  { if ((status = stockholm_parse_comment(         msa, p, n)) != eslOK) goto ERROR; }
+	}
+      else if (                                       (status = stockholm_parse_sq     (afp, pd, msa, p, n)) != eslOK) goto ERROR;
+    }
+  if      (status == eslEOF) ESL_XFAIL(eslEFORMAT, afp->errmsg, "missing // terminator after MSA");
+  else if (status != eslOK)  goto ERROR;
+  if (pd->nblock == 0)       ESL_XFAIL(eslEFORMAT, afp->errmsg, "no alignment data followed Stockholm header");
+
+  msa->alen = pd->alen;
+
+  /* Stockholm file can set weights. If eslMSA_HASWGTS flag is up, at least one was set: then all must be. */
+  if (msa->flags & eslMSA_HASWGTS)
+    {
+      for (idx = 0; idx < msa->nseq; idx++)
+	if (msa->wgt[idx] == -1.0) ESL_XFAIL(eslEFORMAT, afp->errmsg, "stockholm record ended without a weight for %s", msa->sqname[idx]);
+    }
+  else if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR;
+
+  stockholm_parsedata_Destroy(pd, msa);
+  *ret_msa  = msa;
+  return eslOK;
+
+ ERROR:
+  if (pd)  stockholm_parsedata_Destroy(pd, msa);
+  if (msa) esl_msa_Destroy(msa);
+  *ret_msa = NULL;
+  return status;
+}
+
+
+/* Function:  esl_msafile_stockholm_Write()
+ * Synopsis:  Write a Stockholm format alignment to a stream.
+ *
+ * Purpose:   Write alignment <msa> to output stream <fp>, in Stockholm
+ *            format. <fmt> may either be <eslMSAFILE_STOCKHOLM> or
+ *            <eslMSAFILE_PFAM>.  <eslMSAFILE_PFAM> puts the alignment
+ *            into a single block, one alignment line per sequence.
+ *            <eslMSAFILE_STOCKHOLM> is a multiple block format, with
+ *            a width of 200 aligned residues per line.
+ *
+ * Args:      fp  - open output stream, writable
+ *            msa - alignment to write
+ *            fmt - eslMSAFILE_STOCKHOLM | eslMSAFILE_PFAM
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslEWRITE> on any system write error, such as filled disk.
+ */
+int
+esl_msafile_stockholm_Write(FILE *fp, const ESL_MSA *msa, int fmt)
+{
+  switch (fmt) {
+  case eslMSAFILE_PFAM:       return stockholm_write(fp, msa, msa->alen);
+  case eslMSAFILE_STOCKHOLM:  return stockholm_write(fp, msa, 200);
+  }
+  return eslEINCONCEIVABLE;
+}
+/*--------------- end, api for stockholm i/o --------------------*/
+
+
+/*****************************************************************
+ * 2. Internal: ESL_STOCKHOLM_PARSEDATA auxiliary structure 
+ *****************************************************************/
+
+/* The auxiliary parse data is sufficient to validate each line as we
+ * see it. Our design requires that we immediately report any errors
+ * and the line number they occur on. We do not want to detect errors
+ * in some later validation step, after we've lost track of original
+ * line numbers of the input. 
+ */
+
+static ESL_STOCKHOLM_PARSEDATA *
+stockholm_parsedata_Create(ESL_MSA *msa)
+{
+  ESL_STOCKHOLM_PARSEDATA *pd = NULL;
+  int z;
+  int status;
+
+  ESL_ALLOC(pd, sizeof(ESL_STOCKHOLM_PARSEDATA));
+  pd->nseq          = 0;
+  pd->alen          = 0;
+
+  pd->in_block      = FALSE;
+  pd->blinetype     = NULL;
+  pd->bidx          = NULL;
+  pd->npb           = 0;
+  pd->bi            = 0;
+  pd->si            = 0;
+  pd->balloc        = 0;
+
+  pd->nblock        = 0;
+  pd->nseq_b        = 0;
+  pd->alen_b        = 0;
+
+  pd->ssconslen     = 0;
+  pd->saconslen     = 0;
+  pd->ppconslen     = 0;
+  pd->rflen         = 0;
+  pd->mmasklen      = 0;
+  pd->sqlen         = NULL;
+  pd->sslen         = NULL;
+  pd->salen         = NULL;
+  pd->pplen         = NULL;
+  pd->ogc_len       = NULL;
+  pd->ogr_len       = NULL;
+  pd->salloc        = 0;
+
+  ESL_ALLOC(pd->blinetype, sizeof(char) * 16);
+  ESL_ALLOC(pd->bidx,      sizeof(int)  * 16);
+  pd->balloc = 16;
+
+  ESL_ALLOC(pd->sqlen,     sizeof(int64_t) * msa->sqalloc);
+  for (z = 0; z < msa->sqalloc; z++) 
+    pd->sqlen[z] = 0;
+  pd->salloc = msa->sqalloc;
+  return pd;
+
+ ERROR:
+  stockholm_parsedata_Destroy(pd, msa);
+  return NULL;
+}
+
+static int
+stockholm_parsedata_ExpandSeq(ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa)
+{
+  int tagidx;
+  int z;
+  int status;
+
+  ESL_REALLOC(pd->sqlen, sizeof(int64_t) * msa->sqalloc);  
+  for (z = pd->salloc; z < msa->sqalloc; z++) pd->sqlen[z] = 0; 
+
+  if (pd->sslen) {
+    ESL_REALLOC(pd->sslen,   sizeof(int64_t) * msa->sqalloc);
+    for (z = pd->salloc; z < msa->sqalloc; z++) pd->sslen[z] = 0;
+  }
+
+  if (pd->salen) {
+    ESL_REALLOC(pd->salen,   sizeof(int64_t) * msa->sqalloc);
+    for (z = pd->salloc; z < msa->sqalloc; z++) pd->salen[z] = 0;
+  }
+
+  if (pd->pplen) {
+    ESL_REALLOC(pd->pplen,   sizeof(int64_t) * msa->sqalloc);
+    for (z = pd->salloc; z < msa->sqalloc; z++) pd->pplen[z] = 0;
+  }
+
+  /* don't need to reallocate ogc_len here: it's [0..ngc-1], not by seq */
+
+  if (pd->ogr_len) {
+    for (tagidx = 0; tagidx < msa->ngr; tagidx++) 
+      if (pd->ogr_len[tagidx]) {
+	ESL_REALLOC(pd->ogr_len[tagidx], sizeof(int64_t) * msa->sqalloc);
+	for (z = pd->salloc; z < msa->sqalloc; z++) pd->ogr_len[tagidx][z] = 0;
+      }
+  }
+
+  pd->salloc = msa->sqalloc;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+  
+
+static int
+stockholm_parsedata_ExpandBlock(ESL_STOCKHOLM_PARSEDATA *pd)
+{
+  int status;
+
+  ESL_REALLOC(pd->blinetype, sizeof(char) * (pd->balloc * 2));
+  ESL_REALLOC(pd->bidx,      sizeof(int)  * (pd->balloc * 2));
+  pd->balloc *= 2;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+static void
+stockholm_parsedata_Destroy(ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa)
+{
+  int i;
+  if (! pd) return;
+
+  if (pd->blinetype) free(pd->blinetype);
+  if (pd->bidx)      free(pd->bidx);
+
+  if (pd->sqlen)     free(pd->sqlen);
+  if (pd->sslen)     free(pd->sslen);
+  if (pd->salen)     free(pd->salen);
+  if (pd->pplen)     free(pd->pplen);
+  if (pd->ogc_len)   free(pd->ogc_len);
+  if (pd->ogr_len) {
+    for (i = 0; i < msa->ngr; i++)
+      if (pd->ogr_len[i]) free(pd->ogr_len[i]);
+    free(pd->ogr_len);
+  }
+  free(pd);
+  return;
+}
+/*------------------ end, ESL_STOCKHOLM_PARSEDATA auxiliary structure -------------*/
+
+
+
+
+/*****************************************************************
+ * 3. Internal: parsing Stockholm line types
+ *****************************************************************/ 
+
+/* stockholm_parse_gf()
+ * Line format is:
+ *   #=GF <tag> <text>
+ * recognized featurenames: { ID | AC | DE | AU | GA | NC | TC }
+ */
+static int
+stockholm_parse_gf(ESL_MSAFILE *afp, ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa, char *p, esl_pos_t n)
+{
+  char      *gf,  *tag,   *tok;
+  esl_pos_t gflen, taglen, toklen;
+  int       status;
+
+  if ( (status = esl_memtok(&p, &n, " \t", &gf,  &gflen))  != eslOK) ESL_EXCEPTION(eslEINCONCEIVABLE, "EOL can't happen here.");
+  if ( (status = esl_memtok(&p, &n, " \t", &tag, &taglen)) != eslOK) ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GF line is missing <tag>, annotation");
+  if (! esl_memstrcmp(gf, gflen, "#=GF"))                            ESL_FAIL(eslEFORMAT, afp->errmsg, "faux #=GF line?");
+
+  if      (esl_memstrcmp(tag, taglen, "ID")) 
+    {
+      if ((status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK) ESL_FAIL(eslEFORMAT, afp->errmsg, "No name found on #=GF ID line");
+      if (n)                                                            ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GF ID line should have only one name (no whitespace allowed)");
+      if ( (status = esl_msa_SetName (msa, tok, toklen))      != eslOK) return status; /* [eslEMEM] */
+    }
+  else if (esl_memstrcmp(tag, taglen, "AC")) 
+    {
+      if ((status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK) ESL_FAIL(eslEFORMAT, afp->errmsg, "No accession found on #=GF AC line");
+      if (n)                                                            ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GF AC line should have only one accession (no whitespace allowed)");
+      if ((status = esl_msa_SetAccession(msa, tok, toklen))   != eslOK) return status; /* [eslEMEM] */
+    }
+  else if (esl_memstrcmp(tag, taglen, "DE")) 
+    {
+      if ((status = esl_msa_SetDesc     (msa, p, n))          != eslOK) return status; /* [eslEMEM] */
+    }
+  else if (esl_memstrcmp(tag, taglen, "AU")) 
+    {
+      if ((status = esl_msa_SetAuthor   (msa, p, n))          != eslOK) return status; /* [eslEMEM] */
+    }
+  else if (esl_memstrcmp(tag, taglen, "GA"))
+    {
+      if ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) == eslOK) {
+	if (! esl_mem_IsReal(tok, toklen)) ESL_FAIL(eslEFORMAT, afp->errmsg, "Expected a real number for GA1 value on #=GF GA line");
+	if (  esl_memtof(tok, toklen, &(msa->cutoff[eslMSA_GA1])) != eslOK) return status; /* [eslEMEM] */
+	msa->cutset[eslMSA_GA1] = TRUE;
+      } else ESL_FAIL(eslEFORMAT, afp->errmsg, "No GA threshold value found on #=GF GA line");
+      if ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) == eslOK) {
+	if (! esl_mem_IsReal(tok, toklen)) ESL_FAIL(eslEFORMAT, afp->errmsg, "Expected a real number for GA2 value on #=GF GA line");
+	if (  esl_memtof(tok, toklen, &(msa->cutoff[eslMSA_GA2])) != eslOK) return status; /* [eslEMEM] */
+	msa->cutset[eslMSA_GA2] = TRUE;
+      } 
+    }
+  else if (esl_memstrcmp(tag, taglen, "NC"))
+    {
+      if ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) == eslOK) {
+	if ( ! esl_memstrcmp(tok, toklen, "undefined")) /* workaround for a problem in Rfam10. ignore NC's that are set to "undefined". */
+	  {
+	    if (! esl_mem_IsReal(tok, toklen)) ESL_FAIL(eslEFORMAT, afp->errmsg, "Expected a real number for NC1 value on #=GF NC line");
+	    if (  esl_memtof(tok, toklen, &(msa->cutoff[eslMSA_NC1])) != eslOK) return status; /* [eslEMEM] */
+	    msa->cutset[eslMSA_NC1] = TRUE;
+	  }
+      } else ESL_FAIL(eslEFORMAT, afp->errmsg, "No NC threshold value found on #=GF NC line");
+      if ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) == eslOK) {
+	if (! esl_mem_IsReal(tok, toklen)) ESL_FAIL(eslEFORMAT, afp->errmsg, "Expected a real number for NC2 value on #=GF NC line");
+	if (  esl_memtof(tok, toklen, &(msa->cutoff[eslMSA_NC2])) != eslOK) return status; /* [eslEMEM] */
+	msa->cutset[eslMSA_NC2] = TRUE;
+      } 
+    }
+  else if (esl_memstrcmp(tag, taglen, "TC"))
+    {
+      if ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) == eslOK) {
+	if (! esl_mem_IsReal(tok, toklen)) ESL_FAIL(eslEFORMAT, afp->errmsg, "Expected a real number for TC1 value on #=GF TC line");
+	if (  esl_memtof(tok, toklen, &(msa->cutoff[eslMSA_TC1])) != eslOK) return status; /* [eslEMEM] */
+	msa->cutset[eslMSA_TC1] = TRUE;
+      } else ESL_FAIL(eslEFORMAT, afp->errmsg, "No TC threshold value found on #=GF TC line");
+      if ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) == eslOK) {
+	if (! esl_mem_IsReal(tok, toklen)) ESL_FAIL(eslEFORMAT, afp->errmsg, "Expected a real number for TC2 value on #=GF TC line");
+	if (  esl_memtof(tok, toklen, &(msa->cutoff[eslMSA_TC2])) != eslOK) return status; /* [eslEMEM] */
+	msa->cutset[eslMSA_TC2] = TRUE;
+      } 
+    }
+  else 
+    {
+      if ((status = esl_msa_AddGF(msa, tag, taglen, p, n)) != eslOK) return status;
+    }
+
+  return eslOK;
+}
+
+
+/* stockholm_parse_gs()
+ * Format:
+ *   #=GS <seqname> <tag> <text>
+ * recognized featurenames: { WT | AC | DE }
+ */
+static int
+stockholm_parse_gs(ESL_MSAFILE *afp, ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa, char *p, esl_pos_t n)
+{
+  char      *gs,   *seqname,   *tag,   *tok;
+  esl_pos_t  gslen, seqnamelen, taglen, toklen;
+  int        seqidx;
+  int        status;
+  
+  if (esl_memtok(&p, &n, " \t", &gs,      &gslen)      != eslOK) ESL_EXCEPTION(eslEINCONCEIVABLE, "EOL can't happen here.");
+  if (esl_memtok(&p, &n, " \t", &seqname, &seqnamelen) != eslOK) ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GS line missing <seqname>, <tag>, annotation");
+  if (esl_memtok(&p, &n, " \t", &tag,     &taglen)     != eslOK) ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GS line missing <tag>, annotation");
+  if (! esl_memstrcmp(gs, gslen, "#=GS"))                        ESL_FAIL(eslEFORMAT, afp->errmsg, "faux #=GS line?");
+
+  seqidx = pd->si;
+  if (seqidx == pd->nseq || ! esl_memstrcmp(seqname, seqnamelen, msa->sqname[seqidx])) {
+    stockholm_get_seqidx(msa, pd, seqname, seqnamelen, &seqidx);
+  }
+
+  if (esl_memstrcmp(tag, taglen, "WT")) 
+    {
+      if (esl_memtok(&p, &n, " \t", &tok, &toklen) != eslOK) ESL_FAIL(eslEFORMAT, afp->errmsg, "no weight value found on #=GS <seqname> WT line");
+      if (msa->wgt[seqidx] != -1.0)                          ESL_FAIL(eslEFORMAT, afp->errmsg, "sequence has more than one #=GS <seqname> WT line");
+      if (n)                                                 ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GS <seqname> WT line should have only one field, the weight");
+      if (! esl_mem_IsReal(tok, toklen))                     ESL_FAIL(eslEFORMAT, afp->errmsg, "value on #=GS <seqname> WT line isn't a real number");
+      if ((status = esl_memtod(tok, toklen, &(msa->wgt[seqidx]))) != eslOK) return status; /* eslEMEM */
+      msa->flags |= eslMSA_HASWGTS;
+    }
+  else if (esl_memstrcmp(tag, taglen, "AC"))
+    {
+      if (esl_memtok(&p, &n, " \t", &tok, &toklen) != eslOK) ESL_FAIL(eslEFORMAT, afp->errmsg, "no accession found on #=GS <seqname> AC line");
+      if (msa->sqacc && msa->sqacc[seqidx])                  ESL_FAIL(eslEFORMAT, afp->errmsg, "sequence has more than one #=GS <seqname> AC accession line");
+      if (n)                                                 ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GS <seqname> AC line should have only one field, the accession");
+      if ((status = esl_msa_SetSeqAccession(msa, seqidx, tok, toklen)) != eslOK) return status; /* eslEMEM */
+    }
+  else if (esl_memstrcmp(tag, taglen, "DE"))
+    {
+      if (msa->sqdesc && msa->sqdesc[seqidx]) ESL_FAIL(eslEFORMAT, afp->errmsg, "sequence has more than one #=GS <seqname> DE accession line");
+      if ((status = esl_msa_SetSeqDescription(msa, seqidx, p, n)) != eslOK) return status; /* eslEMEM */
+    }
+  else
+    {
+      if ((status = esl_msa_AddGS(msa, tag, taglen, seqidx, p, n)) != eslOK) return status;
+    }
+
+  pd->si = seqidx+1;	/* set guess for next sequence index */
+  return eslOK;
+}  
+  
+/* stockholm_parse_gc()
+ * Format of line is:
+ *   #=GC <tag> <aligned text>
+ * recognized featurenames: { SS_cons | SA_cons | PP_cons | RF }
+ */
+static int
+stockholm_parse_gc(ESL_MSAFILE *afp, ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa, char *p, esl_pos_t n)
+{
+  char      *gc,    *tag;
+  esl_pos_t  gclen,  taglen;
+  int        tagidx;
+  int        status;
+
+  if (esl_memtok(&p, &n, " \t", &gc,   &gclen)    != eslOK) ESL_EXCEPTION(eslEINCONCEIVABLE, "EOL can't happen here.");
+  if (esl_memtok(&p, &n, " \t", &tag,  &taglen)   != eslOK) ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GC line missing <tag>, annotation");
+  while (n && strchr(" \t", p[n-1])) n--; /* skip backwards from eol, to delimit aligned text without going through it */
+
+  if (! esl_memstrcmp(gc, gclen, "#=GC")) ESL_FAIL(eslEFORMAT, afp->errmsg, "faux #=GC line?");
+  if (! n)                                ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GC line missing annotation?");
+  
+  if (pd->nblock) 		/* Subsequent blocks */
+    {
+      if      (esl_memstrcmp(tag, taglen, "SS_cons")) { if (pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_GC_SSCONS) ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected #=GC SS_cons; earlier block(s) in different order?"); }
+      else if (esl_memstrcmp(tag, taglen, "SA_cons")) { if (pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_GC_SACONS) ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected #=GC SA_cons; earlier block(s) in different order?"); }
+      else if (esl_memstrcmp(tag, taglen, "PP_cons")) { if (pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_GC_PPCONS) ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected #=GC PP_cons; earlier block(s) in different order?"); }
+      else if (esl_memstrcmp(tag, taglen, "RF"))      { if (pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_GC_RF)     ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected #=GC RF; earlier block(s) in different order?");      }
+      else if (esl_memstrcmp(tag, taglen, "MM"))      { if (pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_GC_MM)     ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected #=GC MM; earlier block(s) in different order?");      }
+      else if (                                             pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_GC_OTHER)  ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected #=GC line; earlier block(s) in different order?");
+    }
+  else				/* First block */
+    {
+      if (pd->bi == pd->balloc && (status = stockholm_parsedata_ExpandBlock(pd)) != eslOK) return status;
+
+      if      (esl_memstrcmp(tag, taglen, "SS_cons"))  pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_GC_SSCONS;
+      else if (esl_memstrcmp(tag, taglen, "SA_cons"))  pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_GC_SACONS;
+      else if (esl_memstrcmp(tag, taglen, "PP_cons"))  pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_GC_PPCONS;
+      else if (esl_memstrcmp(tag, taglen, "RF"))       pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_GC_RF;
+      else if (esl_memstrcmp(tag, taglen, "MM"))       pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_GC_MM;
+      else                                             pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_GC_OTHER;
+      pd->bidx[pd->bi]      = -1;
+    }
+
+  if (pd->blinetype[pd->bi] == eslSTOCKHOLM_LINE_GC_SSCONS)
+    {
+      if (pd->ssconslen != pd->alen) ESL_FAIL(eslEFORMAT, afp->errmsg, "more than one #=GC SS_cons line in block");
+      if ( (status = esl_strcat(&(msa->ss_cons), pd->ssconslen, p, n)) != eslOK) return status; /* [eslEMEM] */
+      pd->ssconslen += n;
+    }
+  else if (pd->blinetype[pd->bi] == eslSTOCKHOLM_LINE_GC_SACONS)
+    {
+      if (pd->saconslen != pd->alen) ESL_FAIL(eslEFORMAT, afp->errmsg, "more than one #=GC SA_cons line in block");
+      if ((status = esl_strcat(&(msa->sa_cons), pd->saconslen, p, n)) != eslOK) return status; /* [eslEMEM] */
+      pd->saconslen += n;
+    }
+  else if (pd->blinetype[pd->bi] == eslSTOCKHOLM_LINE_GC_PPCONS)
+    {
+      if (pd->ppconslen != pd->alen) ESL_FAIL(eslEFORMAT, afp->errmsg, "more than one #=GC PP_cons line in block");
+      if ((status = esl_strcat(&(msa->pp_cons), pd->ppconslen, p, n)) != eslOK) return status; /* [eslEMEM] */
+      pd->ppconslen += n;
+    }
+  else if (pd->blinetype[pd->bi] == eslSTOCKHOLM_LINE_GC_RF)
+    {
+      if (pd->rflen != pd->alen) ESL_FAIL(eslEFORMAT, afp->errmsg, "more than one #=GC RF line in block");
+      if ((status = esl_strcat(&(msa->rf), pd->rflen, p, n)) != eslOK) return status; /* [eslEMEM] */
+      pd->rflen += n;
+    }
+  else if (pd->blinetype[pd->bi] == eslSTOCKHOLM_LINE_GC_MM)
+    {
+      if (pd->mmasklen != pd->alen) ESL_FAIL(eslEFORMAT, afp->errmsg, "more than one #=GC MM line in block");
+      if ((status = esl_strcat(&(msa->mm), pd->mmasklen, p, n)) != eslOK) return status; /* [eslEMEM] */
+      pd->mmasklen += n;
+    }
+  else
+    {
+      if ((status = stockholm_get_gc_tagidx(msa, pd, tag, taglen, &tagidx)) != eslOK) return status;
+      
+      if (pd->ogc_len[tagidx] != pd->alen) ESL_FAIL(eslEFORMAT, afp->errmsg, "more than one #=GC %.*s line in block", (int) taglen, tag);
+      if ((status = esl_strcat(&(msa->gc[tagidx]), pd->ogc_len[tagidx], p, n)) != eslOK) return status; /* [eslEMEM] */
+      pd->ogc_len[tagidx] += n;
+    }
+
+  if (pd->bi && n != pd->alen_b) ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected # of aligned annotation in #=GC %.*s line", (int) taglen, tag); 
+  pd->alen_b   = n;
+  pd->in_block = TRUE;
+  pd->bi++;
+  return eslOK;
+}
+
+/* A GR line is
+ *   #=GR <seqname> <featurename> <text>
+ * recognized featurenames: { SS | SA | PP }
+ * 
+ */
+static int
+stockholm_parse_gr(ESL_MSAFILE *afp, ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa, char *p, esl_pos_t n)
+{
+  char      *gr,   *name,    *tag;
+  esl_pos_t  grlen, namelen,  taglen;
+  int        seqidx, tagidx;
+  int        z;
+  int        status;
+
+  if (esl_memtok(&p, &n, " \t", &gr,   &grlen)    != eslOK) ESL_EXCEPTION(eslEINCONCEIVABLE, "EOL can't happen here.");
+  if (esl_memtok(&p, &n, " \t", &name, &namelen)  != eslOK) ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GR line missing <seqname>, <tag>, annotation");
+  if (esl_memtok(&p, &n, " \t", &tag,  &taglen)   != eslOK) ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GR line missing <tag>, annotation");
+  while (n && strchr(" \t", p[n-1])) n--; /* skip backwards from eol, to delimit aligned text without going through it */
+
+  if (! esl_memstrcmp(gr, grlen, "#=GR")) ESL_FAIL(eslEFORMAT, afp->errmsg, "faux #=GR line?");
+  if (! n)                                ESL_FAIL(eslEFORMAT, afp->errmsg, "#=GR line missing annotation?");
+
+  /* Which seqidx is this? likely to be either pd->si-1 (#=GR following a seq) or 
+   * pd->si (#=GR preceding a seq) 
+   */
+  if (! pd->nblock) /* First block: we're setting bidx[], blinetype[] as we see them */
+    {
+      if      (pd->si >= 1       && esl_memstrcmp(name, namelen, msa->sqname[pd->si-1])) seqidx = pd->si-1;
+      else if (pd->si < pd->nseq && esl_memstrcmp(name, namelen, msa->sqname[pd->si]))   seqidx = pd->si;
+      else if ((status = stockholm_get_seqidx(msa, pd, name, namelen, &seqidx)) != eslOK) goto ERROR;
+      
+      if (pd->bi == pd->balloc && (status = stockholm_parsedata_ExpandBlock(pd)) != eslOK) return status;
+
+      if      (esl_memstrcmp(tag, taglen, "SS")) pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_GR_SS;
+      else if (esl_memstrcmp(tag, taglen, "SA")) pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_GR_SA;
+      else if (esl_memstrcmp(tag, taglen, "PP")) pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_GR_PP;
+      else                                       pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_GR_OTHER;
+      pd->bidx[pd->bi]      = seqidx;
+    }
+  else 
+    {				/* subsequent block(s) */
+      if (pd->bi >= pd->npb) ESL_FAIL(eslEFORMAT, afp->errmsg, "more lines than expected in this alignment block; earlier blocks had fewer");
+
+      if      (esl_memstrcmp(tag, taglen, "SS")) { if (pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_GR_SS)    ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected #=GR <seqname> SS; earlier block(s) in different order?"); }
+      else if (esl_memstrcmp(tag, taglen, "SA")) { if (pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_GR_SA)    ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected #=GR <seqname> SA; earlier block(s) in different order?"); }  
+      else if (esl_memstrcmp(tag, taglen, "PP")) { if (pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_GR_PP)    ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected #=GR <seqname> PP; earlier block(s) in different order?"); } 
+      else if (                                        pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_GR_OTHER) ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected #=GR line; earlier block(s) in different order?");  
+
+      seqidx = pd->bidx[pd->bi];
+      if (! esl_memstrcmp(name, namelen, msa->sqname[seqidx])) ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected seqname %.*s; expected %s from prev blocks", (int) namelen, name, msa->sqname[seqidx]);
+    }
+
+  /* Append the annotation where it belongs  */
+  if (pd->blinetype[pd->bi] == eslSTOCKHOLM_LINE_GR_SS)
+    {
+      if (! msa->ss) {
+	ESL_ALLOC(msa->ss,   sizeof(char *)  * msa->sqalloc);
+	ESL_ALLOC(pd->sslen, sizeof(int64_t) * msa->sqalloc);
+	for (z = 0; z < msa->sqalloc; z++) { msa->ss[z] = NULL; pd->sslen[z] = 0; }
+      }
+      if (pd->sslen[seqidx] != pd->alen) ESL_FAIL(eslEFORMAT, afp->errmsg, "more than one #=GR %.*s SS line in block", (int) namelen, name);
+      if (( status = esl_strcat(&(msa->ss[seqidx]), pd->sslen[seqidx], p, n)) != eslOK) return status; /* [eslEMEM] */
+      pd->sslen[seqidx] += n;
+    }
+  else if (pd->blinetype[pd->bi] == eslSTOCKHOLM_LINE_GR_PP)
+    {
+      if (! msa->pp) {
+	ESL_ALLOC(msa->pp,   sizeof(char *)  * msa->sqalloc);
+	ESL_ALLOC(pd->pplen, sizeof(int64_t) * msa->sqalloc);
+	for (z = 0; z < msa->sqalloc; z++) { msa->pp[z] = NULL; pd->pplen[z] = 0; }
+      }
+      if (pd->pplen[seqidx] != pd->alen) ESL_FAIL(eslEFORMAT, afp->errmsg, "more than one #=GR %.*s PP line in block", (int) namelen, name);
+      if ((status = esl_strcat(&(msa->pp[seqidx]), pd->pplen[seqidx], p, n)) != eslOK) return status; /* [eslEMEM] */
+      pd->pplen[seqidx] += n;
+    }
+  else if (pd->blinetype[pd->bi] == eslSTOCKHOLM_LINE_GR_SA)
+    {
+      if (! msa->sa) {
+	ESL_ALLOC(msa->sa,   sizeof(char *)  * msa->sqalloc);
+	ESL_ALLOC(pd->salen, sizeof(int64_t) * msa->sqalloc);
+	for (z = 0; z < msa->sqalloc; z++) { msa->sa[z] = NULL; pd->salen[z] = 0; }
+      }
+      if (pd->salen[seqidx] != pd->alen) ESL_FAIL(eslEFORMAT, afp->errmsg, "more than one #=GR %.*s SA line in block", (int) namelen, name);
+      if ((status = esl_strcat(&(msa->sa[seqidx]), pd->salen[seqidx], p, n)) != eslOK) return status;
+      pd->salen[seqidx] += n;
+    }
+  else
+    {
+      if ((status = stockholm_get_gr_tagidx(msa, pd, tag, taglen, &tagidx)) != eslOK) return status; /* [eslEMEM] */
+
+      if (pd->ogr_len[tagidx][seqidx] != pd->alen) ESL_FAIL(eslEFORMAT, afp->errmsg, "more than one #=GR %.*s %.*s line in block", (int) namelen, name, (int) taglen, tag);
+      if ((status = esl_strcat(&(msa->gr[tagidx][seqidx]), pd->ogr_len[tagidx][seqidx], p, n)) != eslOK) return status;
+      pd->ogr_len[tagidx][seqidx] += n;
+    }
+
+  if (pd->bi && n != pd->alen_b) ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected # of aligned annotation in #=GR %.*s %.*s line", (int) namelen, name, (int) taglen, tag); 
+  pd->alen_b   = n;
+  pd->in_block = TRUE;
+  pd->bi++;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+  
+
+/* stockholm_parse_sq():
+ * Format of line is:
+ *   <seqname>  <aligned text>
+ */
+static int
+stockholm_parse_sq(ESL_MSAFILE *afp, ESL_STOCKHOLM_PARSEDATA *pd, ESL_MSA *msa, char *p, esl_pos_t n)
+{
+  char     *seqname;
+  esl_pos_t seqnamelen;
+  int       seqidx = pd->si;
+  int       status;
+  
+  if (esl_memtok(&p, &n, " \t", &seqname, &seqnamelen) != eslOK) ESL_EXCEPTION(eslEINCONCEIVABLE, "EOL can't happen here.");
+  while (n && strchr(" \t", p[n-1])) n--; /* skip backwards from eol, to delimit aligned text without going through it */
+
+  if (! n) ESL_FAIL(eslEFORMAT, afp->errmsg, "sequence line with no sequence?");
+
+  /* Which seqidx is this?
+   * In first block:
+   *    1. If #=GS lines set sqname[] completely, then it's pd->si.
+   *    2. If #=GS lines set sqname[] partially or out of order, then name may be in the keyhash.
+   *    3. If we haven't seen name before, then we'll add it: seqidx = pd->nseq, add name to keyhash, possibly reallocate.
+   * In subsequent blocks, use recorded indices and linetypes:
+   *    4. seqidx = saved bidx[]; should be expecting a SQ line; name should match expected name.
+   */
+  if (! pd->nblock) /* First block: we're setting npb, bidx[], and blinetype[] as we see them */
+    {
+      if (pd->si < pd->nseq && esl_memstrcmp(seqname, seqnamelen, msa->sqname[seqidx])) seqidx = pd->si;
+      else if ((status = stockholm_get_seqidx(msa, pd, seqname, seqnamelen, &seqidx)) != eslOK) return status; /* [eslEMEM] */
+
+      if (pd->bi == pd->balloc && (status = stockholm_parsedata_ExpandBlock(pd)) != eslOK) return status;
+
+      pd->blinetype[pd->bi] = eslSTOCKHOLM_LINE_SQ;
+      pd->bidx[pd->bi]      = seqidx;
+    }
+  else 
+    {				/* subsequent block(s) */
+      if (pd->bi >= pd->npb)                               ESL_FAIL(eslEFORMAT, afp->errmsg, "more lines than expected; earlier blocks had fewer");
+      if (  pd->blinetype[pd->bi] != eslSTOCKHOLM_LINE_SQ) ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected seq line; earlier block(s) in different order?");
+      seqidx = pd->bidx[pd->bi];
+
+      if (! esl_memstrcmp(seqname, seqnamelen, msa->sqname[seqidx])) ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected seq name %.*s; expected %s from prev block order", (int) seqnamelen, seqname, msa->sqname[seqidx]);
+    }
+
+  if ( pd->bi > 0 && pd->sqlen[seqidx] == pd->alen + pd->alen_b) ESL_FAIL(eslEFORMAT, afp->errmsg, "duplicate seq name %.*s", (int) seqnamelen, seqname);
+
+#ifdef eslAUGMENT_ALPHABET 
+  if (  afp->abc ) {
+    status = esl_abc_dsqcat(afp->inmap, &(msa->ax[seqidx]),   &(pd->sqlen[seqidx]), p, n);
+    if      (status == eslEINVAL) ESL_FAIL(eslEFORMAT, afp->errmsg, "invalid sequence character(s) on line");
+    else if (status != eslOK)     return status;
+  }
+#endif
+  if (! afp->abc) {
+    status = esl_strmapcat (afp->inmap, &(msa->aseq[seqidx]), &(pd->sqlen[seqidx]), p, n);
+    if      (status == eslEINVAL) ESL_FAIL(eslEFORMAT, afp->errmsg, "invalid sequence character(s) on line");
+    else if (status != eslOK)     return status;
+  }
+
+  if (pd->bi && n != pd->alen_b)         ESL_FAIL(eslEFORMAT, afp->errmsg, "unexpected number of aligned residues parsed on line");
+  if (pd->sqlen[seqidx] - pd->alen != n) ESL_EXCEPTION(eslEINCONCEIVABLE, "implementation assumes that no symbols are ignored in inmap; else GR, GC text annotations are messed up");
+  pd->alen_b   = n;
+  pd->in_block = TRUE;
+  pd->nseq_b++;
+  pd->bi++;
+  pd->si = seqidx+1;
+  return eslOK;
+}
+
+  
+
+static int
+stockholm_parse_comment(ESL_MSA *msa, char *p, esl_pos_t n)
+{
+  if (n && *p == '#')      { p++; n--; }
+  while (n && isspace(*p)) { p++; n--; }
+
+  return esl_msa_AddComment(msa, p, n);
+}
+/*------------- end, parsing Stockholm line types ---------------*/  
+
+
+
+/*****************************************************************
+ * 4. Internal: looking up seq, tag indices
+ *****************************************************************/
+
+
+/* stockholm_get_seqidx()
+ * 
+ * Find the index of a given sequence <name>,<n> in a growing <msa>
+ * with associated parse data <pdat>. If caller has a good guess (for
+ * instance, the sequences are coming in a previously seen order in a
+ * block of seqs or annotation), the caller can pass this information
+ * in <guess>, or -1 if it has no guess.
+ * 
+ * If the name does not already exist in the MSA, then it
+ * is assumed to be a new sequence name that we need to store.
+ * seqidx is set to pdat->nseq, the MSA is Expand()'ed if necessary
+ * to make room, the name is stored in msa->sqname[pdat->nseq],
+ * (and in the hash table, if we're keyhash augmented)
+ * and pdat->nseq is incremented.
+ *
+ * Returns:  <eslOK> on success, and the seqidx is 
+ *           passed back via <ret_idx>. If <name> is new
+ *           in the <msa>, the <name> is stored and the <msa> 
+ *           may be internally reallocated if needed.
+ *           
+ * Throws: <eslEMEM> on allocation failure
+ *         <eslEINVAL> if we try to add a name to a non-growable MSA.
+ *         <eslEINCONCEIVABLE> on internal coding errors
+ */
+static int
+stockholm_get_seqidx(ESL_MSA *msa, ESL_STOCKHOLM_PARSEDATA *pd, char *name, esl_pos_t n, int *ret_idx)
+{
+  int seqidx;
+  int status;
+  
+  /* if we're keyhash-augmented, try to find it in the hash.
+   * if we're not, try to find it the hard way.
+   */
+#ifdef eslAUGMENT_KEYHASH
+  status = esl_keyhash_Store(msa->index, name, n, &seqidx);
+  if (status == eslEDUP) { *ret_idx = seqidx; return eslOK; }
+  if (status != eslOK)   goto ERROR;
+#else
+  for (seqidx = 0; seqidx < pd->nseq; seqidx++)
+    if (esl_memstrcmp(name, n, msa->sqname[seqidx])) 
+      { *ret_idx = seqidx; return eslOK; }
+#endif
+  
+  /* if we get here, this is a new name we're adding */
+  if (seqidx >= msa->sqalloc) {
+    if ( (status = esl_msa_Expand(msa))                    != eslOK) goto ERROR;
+    if ( (status = stockholm_parsedata_ExpandSeq(pd, msa)) != eslOK) goto ERROR;
+  }  
+
+  if ( (status = esl_msa_SetSeqName(msa, seqidx, name, n)) != eslOK) goto ERROR;
+  pd->nseq++;
+  msa->nseq = pd->nseq;		/* pd->nseq and msa->nseq must stay in lockstep */
+
+  *ret_idx = seqidx;
+  return eslOK;
+
+ ERROR:
+  *ret_idx = -1;
+  return status;
+}
+
+static int
+stockholm_get_gr_tagidx(ESL_MSA *msa, ESL_STOCKHOLM_PARSEDATA *pd, char *tag, esl_pos_t taglen, int *ret_tagidx)
+{
+  int tagidx;
+  int z;
+  int status;
+
+  /* Find the tag, if we have it; else, add it, at tagidx = msa->ngr */
+#ifdef eslAUGMENT_KEYHASH
+  if (!msa->gr_idx && (msa->gr_idx = esl_keyhash_CreateCustom(8,8,128)) == NULL) { status = eslEMEM; goto ERROR; }
+  status = esl_keyhash_Store(msa->gr_idx, tag, taglen, &tagidx); 
+  if      (status == eslEDUP) { *ret_tagidx = tagidx; return eslOK; }
+  else if (status != eslOK)   goto ERROR;
+#else
+  for (tagidx = 0; tagidx < msa->ngr; tagidx++)
+    if (esl_memstrcmp(tag, taglen, msa->gr_tag[tagidx])) 
+      { *ret_tagidx = tagidx; return eslOK; }
+#endif
+
+  /* if we get here, this is a new tag we're adding. */
+  ESL_REALLOC(msa->gr_tag,       sizeof(char *)    * (msa->ngr+1)); /* +1, we're allocated one new tag at a time, as needed */
+  ESL_REALLOC(msa->gr,           sizeof(char **)   * (msa->ngr+1));
+  ESL_REALLOC(pd->ogr_len,       sizeof(int64_t *) * (msa->ngr+1));
+  msa->gr_tag[tagidx] = NULL;
+  msa->gr[tagidx]     = NULL;
+  pd->ogr_len[tagidx] = NULL;
+  ESL_ALLOC(msa->gr[tagidx],     sizeof(char *)    * msa->sqalloc);
+  ESL_ALLOC(pd->ogr_len[tagidx], sizeof(int64_t)   * msa->sqalloc);
+  for (z = 0; z < msa->sqalloc; z++) {
+    msa->gr[tagidx][z] = NULL;
+    pd->ogr_len[tagidx][z] = 0;
+  }
+   
+  if ( (status = esl_memstrdup(tag, taglen, &(msa->gr_tag[tagidx]))) != eslOK) goto ERROR; /* eslEMEM */
+  msa->ngr++;	
+  *ret_tagidx = tagidx;
+  return eslOK;
+
+ ERROR:
+  *ret_tagidx = -1;
+  return status;
+}
+
+static int
+stockholm_get_gc_tagidx(ESL_MSA *msa, ESL_STOCKHOLM_PARSEDATA *pd, char *tag, esl_pos_t taglen, int *ret_tagidx)
+{
+  int tagidx;
+  int status;
+
+  /* Find the tag, if we have it; else, add it, at tagidx = msa->ngc */
+#ifdef eslAUGMENT_KEYHASH
+  if (!msa->gc_idx && (msa->gc_idx = esl_keyhash_CreateCustom(8,8,128)) == NULL) { status = eslEMEM; goto ERROR; }
+  status = esl_keyhash_Store(msa->gc_idx, tag, taglen, &tagidx); 
+  if      (status == eslEDUP) { *ret_tagidx = tagidx; return eslOK; }
+  else if (status != eslOK)   goto ERROR; /* eslEMEM */
+#else
+  for (tagidx = 0; tagidx < msa->ngc; tagidx++)
+    if (esl_memstrcmp(tag, taglen, msa->gc_tag[tagidx])) 
+      { *ret_tagidx = tagidx; return eslOK; }
+#endif
+
+  /* if we get here, this is a new tag we're adding. */
+  ESL_REALLOC(msa->gc_tag, sizeof(char *)  * (msa->ngc+1)); /* +1, we're allocated one new tag at a time, as needed */
+  ESL_REALLOC(msa->gc,     sizeof(char *)  * (msa->ngc+1));
+  ESL_REALLOC(pd->ogc_len, sizeof(int64_t) * (msa->ngc+1));
+  msa->gc_tag[tagidx] = NULL;
+  msa->gc[tagidx]     = NULL;
+  pd->ogc_len[tagidx] = 0;
+
+  if ( (status = esl_memstrdup(tag, taglen, &(msa->gc_tag[tagidx]))) != eslOK) return status; /* eslEMEM */
+  msa->ngc++;
+  *ret_tagidx = tagidx;
+  return eslOK;
+
+ ERROR:
+  *ret_tagidx = -1;
+  return status;
+}
+/*------------ end, looking up seq, tag indices -----------------*/
+
+
+/*****************************************************************
+ * 5. Internal: writing Stockholm/Pfam format
+ *****************************************************************/
+
+/* stockholm_write()
+ * Returns: <eslOK> on success.
+ * Throws:  <eslEMEM> on allocation error.
+ *          <eslEWRITE> on any system write error.
+ */
+static int
+stockholm_write(FILE *fp, const ESL_MSA *msa, int64_t cpl)
+{
+  int  i, j;
+  int  maxname;		          /* maximum name length     */
+  int  maxgf;		          /* max #=GF tag length     */
+  int  maxgc;		          /* max #=GC tag length     */
+  int  maxgr; 		          /* max #=GR tag length     */
+  int  margin;               	  /* total left margin width */
+  int  gslen;		          /* length of a #=GS tag    */
+  char *buf = NULL;
+  int  currpos;
+  char *s, *tok;
+  int  acpl;            /* actual number of character per line */
+  int  make_uniquenames = FALSE;  /* TRUE if we force names to be unique */
+  int  uniqwidth = 0;
+  int  tmpnseq;
+  int  status;
+  
+  /* Stockholm files require unique seqnames. Don't allow the writer
+   * to create an invalid file. 
+   */
+  status = esl_msa_CheckUniqueNames(msa);
+  if      (status == eslFAIL) {
+    make_uniquenames = TRUE;
+    for (tmpnseq = msa->nseq; tmpnseq; tmpnseq /= 10) uniqwidth++;  /* how wide the uniqizing numbers need to be */
+    uniqwidth++; 		/* uniqwidth includes the '|' */
+  } else if (status != eslOK) goto ERROR;
+
+  /* Figure out how much space we need for name + markup
+   * to keep the alignment in register. 
+   *
+   * The left margin of an alignment block can be composed of:
+   * 
+   * <seqname>                      max length: uniqwidth + maxname + 1
+   * #=GC <gc_tag>                  max length: 4 + 1 + maxgc + 1
+   * #=GR <seqname> <gr_tag>        max length: 4 + 1 + uniqwidth + maxname + 1 + maxgr + 1
+   * 
+   * <margin> is the max of these. It is the total length of the
+   * left margin that we need to leave, inclusive of the last space.
+   * 
+   * Then when we output, we do:
+   * name:  <leftmargin-uniqwidth-1>
+   * gc:    #=GC <leftmargin-6>
+   * gr:    #=GR <uniqwidth><maxname> <leftmargin-maxname-uniqwidth-7>
+   *
+   * because uniqwidth includes the |, field widths for uniqizing must be uniqwidth-1
+   *
+   * xref STL9/p17
+   */
+  maxname = esl_str_GetMaxWidth(msa->sqname, msa->nseq);
+  
+  maxgf   = esl_str_GetMaxWidth(msa->gf_tag, msa->ngf);
+  if (maxgf < 2) maxgf = 2;
+
+  maxgc   = esl_str_GetMaxWidth(msa->gc_tag, msa->ngc);
+  if (msa->rf      && maxgc < 2) maxgc = 2;
+  if (msa->mm      && maxgc < 2) maxgc = 2;
+  if (msa->ss_cons && maxgc < 7) maxgc = 7;
+  if (msa->sa_cons && maxgc < 7) maxgc = 7;
+  if (msa->pp_cons && maxgc < 7) maxgc = 7;
+
+  maxgr   = esl_str_GetMaxWidth(msa->gr_tag, msa->ngr);
+  if (msa->ss && maxgr < 2) maxgr = 2;
+  if (msa->sa && maxgr < 2) maxgr = 2;
+  if (msa->pp && maxgr < 2) maxgr = 2;
+
+  margin = uniqwidth + maxname + 1;
+  if (maxgc > 0 && maxgc+6 > margin)                   margin = maxgc+6;
+  if (maxgr > 0 && uniqwidth+maxname+maxgr+7 > margin) margin = uniqwidth+maxname+maxgr+7; 
+  
+  /* Allocate a tmp buffer to hold sequence chunks in  */
+  ESL_ALLOC(buf, sizeof(char) * (cpl+1));
+
+  /* Magic Stockholm header */
+  if (fprintf(fp, "# STOCKHOLM 1.0\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+
+  /* Warning about uniqization */
+  if (make_uniquenames && fprintf(fp, "# WARNING: seq names have been made unique by adding a prefix of \"<seq#>|\"\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+
+ /* Free text comment section */
+  for (i = 0;  i < msa->ncomment; i++)
+    if (fprintf(fp, "#%s\n", msa->comment[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+  if (msa->ncomment > 0 && fprintf(fp, "\n")  < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+
+   /* GF section: per-file annotation */
+  if (msa->name && fprintf(fp, "#=GF %-*s %s\n", maxgf, "ID", msa->name) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+  if (msa->acc  && fprintf(fp, "#=GF %-*s %s\n", maxgf, "AC", msa->acc)  < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+  if (msa->desc && fprintf(fp, "#=GF %-*s %s\n", maxgf, "DE", msa->desc) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+  if (msa->au   && fprintf(fp, "#=GF %-*s %s\n", maxgf, "AU", msa->au)   < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+  
+  /* Thresholds are hacky. Pfam has two. Rfam has one. */
+  if      (msa->cutset[eslMSA_GA1] && msa->cutset[eslMSA_GA2]) { if (fprintf(fp, "#=GF %-*s %.1f %.1f\n", maxgf, "GA", msa->cutoff[eslMSA_GA1], msa->cutoff[eslMSA_GA2]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+  else if (msa->cutset[eslMSA_GA1])                            { if (fprintf(fp, "#=GF %-*s %.1f\n",      maxgf, "GA", msa->cutoff[eslMSA_GA1])                          < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+
+  if      (msa->cutset[eslMSA_NC1] && msa->cutset[eslMSA_NC2]) { if (fprintf(fp, "#=GF %-*s %.1f %.1f\n", maxgf, "NC", msa->cutoff[eslMSA_NC1], msa->cutoff[eslMSA_NC2]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+  else if (msa->cutset[eslMSA_NC1])                            { if (fprintf(fp, "#=GF %-*s %.1f\n",	    maxgf, "NC", msa->cutoff[eslMSA_NC1])                        < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+
+  if      (msa->cutset[eslMSA_TC1] && msa->cutset[eslMSA_TC2]) { if (fprintf(fp, "#=GF %-*s %.1f %.1f\n", maxgf, "TC", msa->cutoff[eslMSA_TC1], msa->cutoff[eslMSA_TC2]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+  else if (msa->cutset[eslMSA_TC1])                            { if (fprintf(fp, "#=GF %-*s %.1f\n", 	    maxgf, "TC", msa->cutoff[eslMSA_TC1])                        < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+
+  for (i = 0; i < msa->ngf; i++)
+    if (fprintf(fp, "#=GF %-*s %s\n", maxgf, msa->gf_tag[i], msa->gf[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); 
+  if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+
+  
+  /* GS section: per-sequence annotation */
+  if (msa->flags & eslMSA_HASWGTS) {
+    for (i = 0; i < msa->nseq; i++) 
+      if (make_uniquenames) { if (fprintf(fp, "#=GS %0*d|%-*s WT %.2f\n", uniqwidth-1, i, maxname, msa->sqname[i], msa->wgt[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+      else                  { if (fprintf(fp, "#=GS %-*s WT %.2f\n",                      maxname, msa->sqname[i], msa->wgt[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+    if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); 
+  }
+
+  if (msa->sqacc) {
+    for (i = 0; i < msa->nseq; i++) 
+      if (msa->sqacc[i]) {
+	if (make_uniquenames) { if (fprintf(fp, "#=GS %0*d|%-*s AC %s\n", uniqwidth-1, i, maxname, msa->sqname[i], msa->sqacc[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	else                  { if (fprintf(fp, "#=GS %-*s AC %s\n",                      maxname, msa->sqname[i], msa->sqacc[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+      }
+    if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); 
+  }
+
+  if (msa->sqdesc) {
+    for (i = 0; i < msa->nseq; i++) 
+      if (msa->sqdesc[i]) {
+	if (make_uniquenames) { if (fprintf(fp, "#=GS %0*d|%-*s DE %s\n", uniqwidth-1, i, maxname, msa->sqname[i], msa->sqdesc[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	else                  { if (fprintf(fp, "#=GS %-*s DE %s\n",                      maxname, msa->sqname[i], msa->sqdesc[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+      }
+    if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+  }
+ 
+  /* Multiannotated GS tags are possible; for example, 
+   *     #=GS foo DR PDB; 1xxx;
+   *     #=GS foo DR PDB; 2yyy;
+   * These are stored, for example, as:
+   *     msa->gs[0][0] = "PDB; 1xxx;\nPDB; 2yyy;"
+   * and must be decomposed.
+   */
+  for (i = 0; i < msa->ngs; i++)
+    {
+      gslen = strlen(msa->gs_tag[i]);
+      for (j = 0; j < msa->nseq; j++)
+	if (msa->gs[i][j]) {
+	  s = msa->gs[i][j];
+	  while (esl_strtok(&s, "\n", &tok) == eslOK)
+	    if (make_uniquenames) { if (fprintf(fp, "#=GS %0*d|%-*s %-*s %s\n", uniqwidth-1, i,  maxname, msa->sqname[j], gslen, msa->gs_tag[i], tok) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	    else                  { if (fprintf(fp, "#=GS %-*s %-*s %s\n",                       maxname, msa->sqname[j], gslen, msa->gs_tag[i], tok) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	}
+      if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); 
+    }
+
+  /* Alignment section:
+   * contains aligned sequence, #=GR annotation, and #=GC annotation
+   */
+  for (currpos = 0; currpos < msa->alen; currpos += cpl)
+    {
+      acpl = (msa->alen - currpos > cpl)? cpl : msa->alen - currpos;
+      buf[acpl] = '\0';  	/* this suffices to terminate for all uses of buf[] in this block */
+      if (currpos > 0 && fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+
+      for (i = 0; i < msa->nseq; i++)
+	{
+#ifdef eslAUGMENT_ALPHABET
+	  if (msa->abc)   esl_abc_TextizeN(msa->abc, msa->ax[i] + currpos + 1, acpl, buf);
+#endif
+	  if (! msa->abc) strncpy(buf, msa->aseq[i] + currpos, acpl);
+	  if (make_uniquenames) { if (fprintf(fp, "%0*d|%-*s %s\n", uniqwidth-1, i, margin-uniqwidth-1, msa->sqname[i], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	  else                  { if (fprintf(fp, "%-*s %s\n",                      margin-1,           msa->sqname[i], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+
+	  if (msa->ss && msa->ss[i]) {
+	    strncpy(buf, msa->ss[i] + currpos, acpl);
+	    if (make_uniquenames) { if (fprintf(fp, "#=GR %0*d|%-*s %-*s %s\n", uniqwidth-1, i, maxname, msa->sqname[i], margin-maxname-uniqwidth-7, "SS", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	    else                  { if (fprintf(fp, "#=GR %-*s %-*s %s\n",                      maxname, msa->sqname[i], margin-maxname-7,           "SS", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	  }
+	  if (msa->sa && msa->sa[i]) {
+	    strncpy(buf, msa->sa[i] + currpos, acpl);
+	    if (make_uniquenames) { if (fprintf(fp, "#=GR %0*d|%-*s %-*s %s\n", uniqwidth-1, i, maxname, msa->sqname[i], margin-maxname-uniqwidth-7, "SA", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	    else                  { if (fprintf(fp, "#=GR %-*s %-*s %s\n",                      maxname, msa->sqname[i], margin-maxname-7,           "SA", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	  }
+	  if (msa->pp && msa->pp[i]) {
+	    strncpy(buf, msa->pp[i] + currpos, acpl);
+	    if (make_uniquenames) { if (fprintf(fp, "#=GR %0*d|%-*s %-*s %s\n", uniqwidth-1, i, maxname, msa->sqname[i], margin-maxname-uniqwidth-7, "PP", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	    else                  { if (fprintf(fp, "#=GR %-*s %-*s %s\n",                      maxname, msa->sqname[i], margin-maxname-7,           "PP", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	  }
+	  for (j = 0; j < msa->ngr; j++)
+	    if (msa->gr[j][i]) {
+	      strncpy(buf, msa->gr[j][i] + currpos, acpl);
+	      if (make_uniquenames) { if (fprintf(fp, "#=GR %0*d|%-*s %-*s %s\n", uniqwidth-1, i, maxname, msa->sqname[i], margin-maxname-uniqwidth-7, msa->gr_tag[j], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	      else                  { if (fprintf(fp, "#=GR %-*s %-*s %s\n",                      maxname, msa->sqname[i], margin-maxname-7,           msa->gr_tag[j], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); }
+	    }
+	}
+
+      if (msa->ss_cons) {
+	strncpy(buf, msa->ss_cons + currpos, acpl);
+	if (fprintf(fp, "#=GC %-*s %s\n", margin-6, "SS_cons", buf)      < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); 
+      }
+      if (msa->sa_cons) {
+	strncpy(buf, msa->sa_cons + currpos, acpl);
+	if (fprintf(fp, "#=GC %-*s %s\n", margin-6, "SA_cons", buf)      < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+      }
+      if (msa->pp_cons) {
+	strncpy(buf, msa->pp_cons + currpos, acpl);
+	if (fprintf(fp, "#=GC %-*s %s\n", margin-6, "PP_cons", buf)      < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+      }
+      if (msa->rf) {
+  strncpy(buf, msa->rf + currpos, acpl);
+  if (fprintf(fp, "#=GC %-*s %s\n", margin-6, "RF", buf)           < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+      }
+      if (msa->mm) {
+  strncpy(buf, msa->mm + currpos, acpl);
+  if (fprintf(fp, "#=GC %-*s %s\n", margin-6, "MM", buf)           < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+      }
+      for (j = 0; j < msa->ngc; j++) {
+	strncpy(buf, msa->gc[j] + currpos, acpl);
+	if (fprintf(fp, "#=GC %-*s %s\n", margin-6, msa->gc_tag[j], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed");
+      }
+    }
+  if (fprintf(fp, "//\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "stockholm msa write failed"); 
+  free(buf);
+  return eslOK;
+
+ ERROR:
+  if (buf != NULL) free(buf);
+  return status;
+}
+/*----------------- end, writing Stockholm/Pfam -----------------*/
+
+
+
+/*****************************************************************
+ * 6. Unit tests
+ *****************************************************************/
+#ifdef eslMSAFILE_STOCKHOLM_TESTDRIVE
+
+static void
+utest_write_good1(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#\n", ofp);
+  fputs("# This is an example of a Stockholm multiple sequence alignment\n", ofp);
+  fputs("# file. It is deliberately designed to be weird, to exercise many of the\n", ofp);
+  fputs("# features of Stockholm format, in order to test a parser.\n", ofp);
+  fputs("#\n", ofp);
+  fputs("#=GF ID   14-3-3\n", ofp);
+  fputs("#=GF AC   PF00244\n", ofp);
+  fputs("#=GF DE   14-3-3 proteins\n", ofp);
+  fputs("#=GF AU   Finn RD\n", ofp);
+  fputs("#=GF AL   Clustalw\n", ofp);
+  fputs("#=GF SE   Prosite\n", ofp);
+  fputs("#=GF GA   25 25\n", ofp);
+  fputs("#=GF TC   35.40 35.40\n", ofp);
+  fputs("#=GF NC   8.80 8.80\n", ofp);
+  fputs("#=GF BM   hmmbuild -f HMM SEED\n", ofp);
+  fputs("#=GF BM   hmmcalibrate --seed 0 HMM\n", ofp);
+  fputs("#=GF RN   [1]\n", ofp);
+  fputs("#=GF RM   95327195\n", ofp);
+  fputs("#=GF RT   Structure of a 14-3-3 protein and implications for\n", ofp);
+  fputs("#=GF RT   coordination of multiple signalling pathways. \n", ofp);
+  fputs("#=GF RA   Xiao B, Smerdon SJ, Jones DH, Dodson GG, Soneji Y, Aitken\n", ofp);
+  fputs("#=GF RA   A, Gamblin SJ; \n", ofp);
+  fputs("#=GF RL   Nature 1995;376:188-191.\n", ofp);
+  fputs("#=GF RN   [2]\n", ofp);
+  fputs("#=GF RM   95327196\n", ofp);
+  fputs("#=GF RT   Crystal structure of the zeta isoform of the 14-3-3\n", ofp);
+  fputs("#=GF RT   protein. \n", ofp);
+  fputs("#=GF RA   Liu D, Bienkowska J, Petosa C, Collier RJ, Fu H, Liddington\n", ofp);
+  fputs("#=GF RA   R; \n", ofp);
+  fputs("#=GF RL   Nature 1995;376:191-194.\n", ofp);
+  fputs("#=GF DR   PROSITE; PDOC00633;\n", ofp);
+  fputs("#=GF DR   SMART; 14_3_3;\n", ofp);
+  fputs("#=GF DR   PRINTS; PR00305;\n", ofp);
+  fputs("#=GF SQ   119\n", ofp);
+  fputs("	\n", ofp);
+  fputs("#=GS 1431_ENTHI/4-239 WT  0.42\n", ofp);
+  fputs("#=GS seq1             WT  0.40\n", ofp);
+  fputs("#=GS seq2             WT  0.41\n", ofp);
+  fputs("#=GS seq3             WT  0.43\n", ofp);
+  fputs("#=GS seq4             WT  0.44\n", ofp);
+  fputs("#=GS seq5             WT  0.45\n", ofp);
+  fputs("#=GS seq6             WT  0.46\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GS seq4             AC  PF00001\n", ofp);
+  fputs("#=GS seq4             DE  A description of seq4.\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GS seq1             NEWTAG  foo\n", ofp);
+  fputs("#=GS seq2             NEWTAG  bar\n", ofp);
+  fputs("#=GS seq3             NEWTAG  baz  \n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GS seq3             TAG2    foo2\n", ofp);
+  fputs("#=GS seq4             TAG2    foo3\n", ofp);
+  fputs("#=GS seq5             TAG2    foo4\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GC SS_cons                 xxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("#=GC SA_cons                 xxxxxxxxxxxxxxxxxxx  \n", ofp);
+  fputs("#=GC New_long_tag_thingie    xxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("1431_ENTHI/4-239             ACDEFGHKLMNPQRSTVWY             \n", ofp);
+  fputs("#=GR seq1 SS                 ...................  \n", ofp);
+  fputs("#=GR seq1 SA                 0000000000000000000\n", ofp);
+  fputs("seq1                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("seq2                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq3 PP                 0000000000000000000  \n", ofp);
+  fputs("seq3                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("seq4                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("seq5                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("seq6                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq6 SS                 ...................\n", ofp);
+  fputs("#=GR seq6 SA                 9999999999999999999\n", ofp);
+  fputs("#=GR seq6 Invented_tag       *******************\n", ofp);
+  fputs("#=GR seq6 Another_tag        -------------------\n", ofp);
+  fputs("#=GC PP_cons                 *******************  \n", ofp);
+  fputs("    \n", ofp);
+  fputs("  \n", ofp);
+  fputs("#=GC SS_cons                 xxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("#=GC SA_cons                 xxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("#=GC New_long_tag_thingie    xxxxxxxxxxxxxxxxxxx    \n", ofp);
+  fputs("1431_ENTHI/4-239             ACDEFGHKLMNPQRSTVWY   \n", ofp);
+  fputs("#=GR seq1 SS                 ...................\n", ofp);
+  fputs("#=GR seq1 SA                 0000000000000000000\n", ofp);
+  fputs("seq1                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("seq2                         ACDEFGHKLMNPQRSTVWY        \n", ofp);
+  fputs("#=GR seq3 PP                 0000000000000000000  \n", ofp);
+  fputs("seq3                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("seq4                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("seq5                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("seq6                         ACDEFGHKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq6 SS                 ...................\n", ofp);
+  fputs("#=GR seq6 SA                 9999999999999999999\n", ofp);
+  fputs("#=GR seq6 Invented_tag       ******************* \n", ofp);
+  fputs("#=GR seq6 Another_tag        -------------------\n", ofp);
+  fputs("#=GC PP_cons                 *******************  \n", ofp);
+  fputs("\n", ofp);
+  fputs("#\n", ofp);
+  fputs("# And here's some trailing comments, just to\n", ofp);
+  fputs("# try to confuse a parser.\n", ofp);
+  fputs("#\n", ofp);
+  fputs("\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_alphatype = eslAMINO;
+  *ret_nseq      = 7;
+  *ret_alen      = 38;
+}
+
+static void
+utest_write_badformat1(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("missing Stockholm header\n", ofp);
+
+  *ret_linenumber = 1;
+  strcpy(errmsg, "missing Stockholm header");
+}
+
+static void
+utest_write_badformat2(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 7;
+  strcpy(errmsg, "number of seqs in block did not match number in earlier block(s)");
+}
+
+static void
+utest_write_badformat3(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GS seq1 FOO baz\n", ofp);
+  fputs("#=GS seq2 FOO boz\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 7;
+  strcpy(errmsg, "number of seqs in block did not match number annotated by #=GS lines");
+}
+
+static void
+utest_write_badformat4(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1    ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2    ACDEFGHIKLMNPQRSTVWY\n", ofp);
+
+  *ret_linenumber = 4;
+  strcpy(errmsg, "missing // terminator after MSA");
+}
+
+static void
+utest_write_badformat5(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("\n", ofp);
+  fputs("# No data\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 4;
+  strcpy(errmsg, "no alignment data followed Stockholm header");
+}
+
+static void
+utest_write_badformat6(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GF \n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 3;
+  strcpy(errmsg, "#=GF line is missing <tag>, annotation");
+}
+
+static void
+utest_write_badformat7(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GFX tag\n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "faux #=GF line");
+}
+
+static void
+utest_write_badformat8(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF ID\n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "No name found on #=GF ID line");
+}
+
+static void
+utest_write_badformat9(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF ID name with cruft\n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "#=GF ID line should have only one name (no whitespace allowed)");
+}
+
+static void
+utest_write_badformat10(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF AC      \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "No accession found on #=GF AC line");
+}
+
+static void
+utest_write_badformat11(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF AC accession with cruft     \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "#=GF AC line should have only one accession (no whitespace allowed)");
+}
+
+static void
+utest_write_badformat12(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF GA not_a_number \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "Expected a real number for GA1 value on #=GF GA line");
+}
+
+static void
+utest_write_badformat13(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF GA 10.0  not_a_number \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "Expected a real number for GA2 value on #=GF GA line");
+}
+
+static void
+utest_write_badformat14(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF GA       \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "No GA threshold value found on #=GF GA line");
+}
+
+static void
+utest_write_badformat15(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF NC not_a_number \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "Expected a real number for NC1 value on #=GF NC line");
+}
+
+static void
+utest_write_badformat16(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF NC 10.0  not_a_number \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "Expected a real number for NC2 value on #=GF NC line");
+}
+
+static void
+utest_write_badformat17(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF NC       \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "No NC threshold value found on #=GF NC line");
+}
+
+static void
+utest_write_badformat18(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF TC not_a_number \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "Expected a real number for TC1 value on #=GF TC line");
+}
+
+static void
+utest_write_badformat19(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF TC 10.0  not_a_number \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "Expected a real number for TC2 value on #=GF TC line");
+}
+
+static void
+utest_write_badformat20(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GF TC       \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "No TC threshold value found on #=GF TC line");
+}
+
+static void
+utest_write_badformat21(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GS      \n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "#=GS line missing <seqname>, <tag>, annotation");
+}
+
+static void
+utest_write_badformat22(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GS seq1    \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "#=GS line missing <tag>, annotation");
+}
+
+static void
+utest_write_badformat23(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GSX seq1 foo   \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "faux #=GS line");
+}
+
+static void
+utest_write_badformat24(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GS seq1 WT   \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "no weight value found on #=GS <seqname> WT line");
+}
+
+static void
+utest_write_badformat25(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GS seq1 WT 2.0  \n", ofp);
+  fputs("#=GS seq1 WT 2.0  \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 3;
+  strcpy(errmsg, "sequence has more than one #=GS <seqname> WT line");
+}
+
+static void
+utest_write_badformat26(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GS seq1 WT 2.0 cruft \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "#=GS <seqname> WT line should have only one field, the weight");
+}
+
+static void
+utest_write_badformat27(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GS seq1 WT cruft \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "value on #=GS <seqname> WT line isn't a real number");
+}
+
+static void
+utest_write_badformat28(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GS seq1 AC   \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "no accession found on #=GS <seqname> AC line");
+}
+
+static void
+utest_write_badformat29(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GS seq1 AC xxxxxx  \n", ofp);
+  fputs("#=GS seq1 AC yyyyyy  \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 3;
+  strcpy(errmsg, "sequence has more than one #=GS <seqname> AC accession line");
+}
+
+static void
+utest_write_badformat30(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GS seq1 AC xxxxxx  cruft \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "#=GS <seqname> AC line should have only one field, the accession");
+}
+
+static void
+utest_write_badformat31(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GS seq1 DE a one line description \n", ofp);
+  fputs("#=GS seq1 DE oops, a second line \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 3;
+  strcpy(errmsg, "sequence has more than one #=GS <seqname> DE accession line");
+}
+
+static void
+utest_write_badformat32(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GC \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "#=GC line missing <tag>, annotation");
+}
+
+static void
+utest_write_badformat33(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GCX FOO xxxxxxxxxxxxxxxxxxxx \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "faux #=GC line");
+}
+
+static void
+utest_write_badformat34(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GC FOO  \n", ofp);
+  fputs("seq1      ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "#=GC line missing annotation");
+}
+
+static void
+utest_write_badformat35(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC SS_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GC SS_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 6;
+  strcpy(errmsg, "unexpected #=GC SS_cons");
+}
+
+static void
+utest_write_badformat36(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC SA_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GC SA_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 6;
+  strcpy(errmsg, "unexpected #=GC SA_cons");
+}
+
+static void
+utest_write_badformat37(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC PP_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GC PP_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 6;
+  strcpy(errmsg, "unexpected #=GC PP_cons");
+}
+
+static void
+utest_write_badformat38(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC RF      xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GC RF      xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 6;
+  strcpy(errmsg, "unexpected #=GC RF");
+}
+
+static void
+utest_write_badformat39(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC XX      xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("\n", ofp);
+  fputs("#=GC XX      xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 6;
+  strcpy(errmsg, "unexpected #=GC line");
+}
+
+static void
+utest_write_badformat40(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GC SS_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC SS_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 5;
+  strcpy(errmsg, "more than one #=GC SS_cons line in block");
+}
+
+static void
+utest_write_badformat41(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GC SA_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC SA_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 5;
+  strcpy(errmsg, "more than one #=GC SA_cons line in block");
+}
+
+static void
+utest_write_badformat42(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GC PP_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC PP_cons xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 5;
+  strcpy(errmsg, "more than one #=GC PP_cons line in block");
+}
+
+static void
+utest_write_badformat43(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GC RF      xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC RF      xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 5;
+  strcpy(errmsg, "more than one #=GC RF line in block");
+}
+
+static void
+utest_write_badformat44(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GC XX      xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC XX      xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 5;
+  strcpy(errmsg, "more than one #=GC XX line in block");
+}
+
+static void
+utest_write_badformat45(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GC XX        xxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 4;
+  strcpy(errmsg, "unexpected # of aligned annotation in #=GC XX line");
+}
+
+static void
+utest_write_badformat46(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR \n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 3;
+  strcpy(errmsg, "#=GR line missing <seqname>, <tag>, annotation");
+}
+
+static void
+utest_write_badformat47(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq1  \n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 3;
+  strcpy(errmsg, "#=GR line missing <tag>, annotation");
+}
+
+static void
+utest_write_badformat48(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1          ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GRX seq1 XX xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2          ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 3;
+  strcpy(errmsg, "faux #=GR line");
+}
+
+static void
+utest_write_badformat49(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq1 XX  \n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 3;
+  strcpy(errmsg, "#=GR line missing annotation");
+}
+
+static void
+utest_write_badformat50(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 SS xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 SS xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 7;
+  strcpy(errmsg, "unexpected #=GR <seqname> SS");
+}
+
+static void
+utest_write_badformat51(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 SA xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 SA xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 7;
+  strcpy(errmsg, "unexpected #=GR <seqname> SA");
+}
+
+static void
+utest_write_badformat52(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 PP xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 PP xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 7;
+  strcpy(errmsg, "unexpected #=GR <seqname> PP");
+}
+
+static void
+utest_write_badformat53(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 XX xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 XX xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 7;
+  strcpy(errmsg, "unexpected #=GR line");
+}
+
+static void
+utest_write_badformat54(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq1 XX xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 XX xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 7;
+  strcpy(errmsg, "unexpected seqname seq2; expected seq1 from prev blocks");
+}
+
+static void
+utest_write_badformat55(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GR seq1 SS xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq1 SS xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 4;
+  strcpy(errmsg, "more than one #=GR seq1 SS line in block");
+}
+
+static void
+utest_write_badformat56(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GR seq1 PP xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq1 PP xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 4;
+  strcpy(errmsg, "more than one #=GR seq1 PP line in block");
+}
+
+static void
+utest_write_badformat57(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GR seq1 SA xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq1 SA xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 4;
+  strcpy(errmsg, "more than one #=GR seq1 SA line in block");
+}
+
+static void
+utest_write_badformat58(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("#=GR seq1 XX xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq1 XX xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 4;
+  strcpy(errmsg, "more than one #=GR seq1 XX line in block");
+}
+
+static void
+utest_write_badformat59(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 XX xxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 4;
+  strcpy(errmsg, "unexpected # of aligned annotation in #=GR seq2 XX line");
+}
+
+static void
+utest_write_badformat60(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2 \n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 3;
+  strcpy(errmsg, "sequence line with no sequence");
+}
+
+static void
+utest_write_badformat61(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2  ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 7;
+  strcpy(errmsg, "more lines than expected; earlier blocks had fewer");
+}
+
+static void
+utest_write_badformat62(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 XX xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("#=GR seq2 XX xxxxxxxxxxxxxxxxxxxx\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 7;
+  strcpy(errmsg, "unexpected seq line; earlier block(s) in different order");
+}
+
+static void
+utest_write_badformat63(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq3         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq3         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 7;
+  strcpy(errmsg, "unexpected seq name seq3; expected seq2 from prev block order");
+}
+
+static void
+utest_write_badformat64(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKL^NPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 2;
+  strcpy(errmsg, "invalid sequence character(s) on line");
+}
+
+static void
+utest_write_badformat65(FILE *ofp, int *ret_linenumber, char *errmsg)
+{
+  fputs("# STOCKHOLM 1.0\n", ofp);
+  fputs("seq1         ACDEFGHIKLMNPQRSTVWY\n", ofp);
+  fputs("seq2         ACDEFGHIKLMNPQRSTVWYZ\n", ofp);
+  fputs("//\n", ofp);
+
+  *ret_linenumber = 3;
+  strcpy(errmsg, "unexpected number of aligned residues parsed on line");
+}
+
+
+static void
+utest_goodfile(char *filename, int testnumber, int expected_alphatype, int expected_nseq, int expected_alen)
+{
+  ESL_ALPHABET        *abc          = NULL;
+  ESL_MSAFILE        *afp          = NULL;
+  ESL_MSA             *msa1         = NULL;
+  ESL_MSA             *msa2         = NULL;
+  char                 tmpfile1[32] = "esltmpXXXXXX";
+  char                 tmpfile2[32] = "esltmpXXXXXX";
+  FILE                *ofp          = NULL;
+  int                  status;
+
+  /* guessing both the format and the alphabet should work: this is a digital open */
+  if ( (status = esl_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("stockholm good file test %d failed: digital open", testnumber);  
+  if (abc->type   != expected_alphatype)                                                           esl_fatal("stockholm good file test %d failed: alphabet autodetection", testnumber);
+  if (afp->format != eslMSAFILE_STOCKHOLM)                                                         esl_fatal("stockholm good file test %d failed: format autodetection",   testnumber); /* eslMSAFILE_PFAM is autodetected as STOCKHOLM, and that's fine */
+
+  /* This is a digital read, using <abc>. */
+  if ( (status = esl_msafile_stockholm_Read(afp, &msa1))   != eslOK) esl_fatal("stockholm good file test %d failed: msa read, digital", testnumber);  
+  if (msa1->nseq != expected_nseq || msa1->alen != expected_alen)    esl_fatal("stockholm good file test %d failed: nseq/alen",         testnumber);
+  if (esl_msa_Validate(msa1, NULL) != eslOK)                         esl_fatal("stockholm good file test %d failed: msa1 invalid",      testnumber);
+  esl_msafile_Close(afp);  
+
+  /* write it back out to a new tmpfile (digital write) */
+  if ( (status = esl_tmpfile_named(tmpfile1, &ofp))                            != eslOK) esl_fatal("stockholm good file test %d failed: tmpfile creation",   testnumber);
+  if ( (status = esl_msafile_stockholm_Write(ofp, msa1, eslMSAFILE_STOCKHOLM)) != eslOK) esl_fatal("stockholm good file test %d failed: msa write, digital", testnumber);
+  fclose(ofp);
+
+  /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */
+  if ( (status = esl_msafile_Open(NULL, tmpfile1, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp)) != eslOK) esl_fatal("stockholm good file test %d failed: text mode open", testnumber);  
+  if ( (status = esl_msafile_stockholm_Read(afp, &msa2))                                   != eslOK) esl_fatal("stockholm good file test %d failed: msa read, text", testnumber);  
+  if (msa2->nseq != expected_nseq || msa2->alen != expected_alen)                                    esl_fatal("stockholm good file test %d failed: nseq/alen",      testnumber);
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                         esl_fatal("stockholm good file test %d failed: msa2 invalid",   testnumber);
+  esl_msafile_Close(afp);
+  
+  /* write it back out to a new tmpfile (text write) */
+  if ( (status = esl_tmpfile_named(tmpfile2, &ofp))                        != eslOK) esl_fatal("stockholm good file test %d failed: tmpfile creation", testnumber);
+  if ( (status = esl_msafile_stockholm_Write(ofp, msa2, eslMSAFILE_PFAM))  != eslOK) esl_fatal("stockholm good file test %d failed: msa write, text",  testnumber);
+  fclose(ofp);
+  esl_msa_Destroy(msa2);
+
+  /* open and read it in digital mode */
+  if ( (status = esl_msafile_Open(&abc, tmpfile1, NULL, eslMSAFILE_PFAM, NULL, &afp)) != eslOK) esl_fatal("stockholm good file test %d failed: 2nd digital mode open", testnumber);  
+  if ( (status = esl_msafile_stockholm_Read(afp, &msa2))                              != eslOK) esl_fatal("stockholm good file test %d failed: 2nd digital msa read",  testnumber);  
+  if (esl_msa_Validate(msa2, NULL) != eslOK)                                                    esl_fatal("stockholm good file test %d failed: msa2 invalid",          testnumber);
+  esl_msafile_Close(afp);
+
+  /* this msa <msa2> should be identical to <msa1> */
+  if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("stockholm good file test %d failed: msa compare", testnumber);  
+
+  remove(tmpfile1);
+  remove(tmpfile2);
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_alphabet_Destroy(abc);
+}
+
+static void
+utest_bad_format(char *filename, int testnumber, int expected_linenumber, char *expected_errmsg)
+{
+  ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO);
+  ESL_MSAFILE *afp = NULL;
+  int           fmt = eslMSAFILE_STOCKHOLM;
+  ESL_MSA      *msa = NULL;
+  int           status;
+  
+  if ( (status = esl_msafile_Open(&abc, filename, NULL, fmt, NULL, &afp)) != eslOK)  esl_fatal("stockholm bad format test %d failed: unexpected open failure", testnumber);
+  if ( (status = esl_msafile_stockholm_Read(afp, &msa)) != eslEFORMAT)               esl_fatal("stockholm bad format test %d failed: unexpected error code",   testnumber);
+  if (strstr(afp->errmsg, expected_errmsg) == NULL)                                  esl_fatal("stockholm bad format test %d failed: unexpected errmsg",       testnumber);
+  if (afp->linenumber != expected_linenumber)                                        esl_fatal("stockholm bad format test %d failed: unexpected linenumber",   testnumber);
+  esl_msafile_Close(afp);
+  esl_alphabet_Destroy(abc);
+  esl_msa_Destroy(msa);
+}
+
+
+static void
+utest_good_format(ESL_ALPHABET **byp_abc, int fmt, int expected_nseq, int64_t expected_alen, char *buf)
+{
+  char          msg[] = "good format test failed";
+  ESL_MSAFILE *afp = NULL;
+  ESL_MSA      *msa = NULL;
+
+  if (esl_msafile_OpenMem(byp_abc, buf, strlen(buf), fmt, NULL, &afp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_stockholm_Read(afp, &msa)                           != eslOK) esl_fatal(msg);
+  if (msa->nseq != expected_nseq)                                               esl_fatal(msg);
+  if (msa->alen != expected_alen)                                               esl_fatal(msg);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+}
+
+static void
+utest_identical_io(ESL_ALPHABET **byp_abc, int fmt, char *buf)
+{
+  char   msg[]        = "identical io test failed";
+  char   tmpfile1[32] = "esltmpXXXXXX";
+  char   tmpfile2[32] = "esltmpXXXXXX";
+  FILE  *fp = NULL;
+  ESL_MSAFILE *afp = NULL;
+  ESL_MSA *msa1 = NULL;
+  ESL_MSA *msa2 = NULL;
+
+  if (esl_tmpfile_named(tmpfile1, &fp) != eslOK) esl_fatal(msg);
+  fputs(buf, fp);
+  fclose(fp);
+
+  if (esl_msafile_Open(byp_abc, tmpfile1, NULL, fmt, NULL, &afp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_stockholm_Read(afp, &msa1)                     != eslOK) esl_fatal(msg);
+  esl_msafile_Close(afp);
+
+  if (esl_tmpfile_named(tmpfile2, &fp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_stockholm_Write(fp, msa1, eslMSAFILE_STOCKHOLM) != eslOK) esl_fatal(msg);
+  fclose(fp);
+
+  if (esl_msafile_Open(byp_abc, tmpfile2, NULL, fmt, NULL, &afp) != eslOK) esl_fatal(msg);
+  if (esl_msafile_stockholm_Read(afp, &msa2)                     != eslOK) esl_fatal(msg);
+  esl_msafile_Close(afp);
+  
+  if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg);
+
+  remove(tmpfile1);
+  remove(tmpfile2);
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+}
+
+static void
+utest_bad_open(ESL_ALPHABET **byp_abc, int fmt, int expected_status, char *buf)
+{
+  char          msg[] = "bad open test failed";
+  ESL_MSAFILE *afp   = NULL;
+
+  if (esl_msafile_OpenMem(byp_abc, buf, strlen(buf), fmt, NULL, &afp) != expected_status) esl_fatal(msg);
+  esl_msafile_Close(afp);
+}
+
+static void
+utest_bad_read(ESL_ALPHABET **byp_abc, int fmt, char *expected_errmsg, int expected_line, char *buf)
+{
+  char          msg[] = "bad format test failed";
+  ESL_MSAFILE *afp   = NULL;
+  ESL_MSA      *msa   = NULL;
+
+  if (esl_msafile_OpenMem(byp_abc, buf, strlen(buf), fmt, NULL, &afp) != eslOK)      esl_fatal(msg);
+  if (esl_msafile_stockholm_Read(afp, &msa)                           != eslEFORMAT) esl_fatal(msg);
+  if (strstr(afp->errmsg, expected_errmsg)                            == NULL)       esl_fatal(msg);
+  if (afp->linenumber != expected_line)                                              esl_fatal(msg);
+
+  esl_msa_Destroy(msa);
+  esl_msafile_Close(afp);
+}
+#endif /*eslMSAFILE_STOCKHOLM_TESTDRIVE*/
+/*----------------- end, unit tests -----------------------------*/
+
+
+
+/*****************************************************************
+ * 7. Test driver.
+ *****************************************************************/
+#ifdef eslMSAFILE_STOCKHOLM_TESTDRIVE
+/* compile: gcc -g -Wall -I. -L. -o esl_msafile_stockholm_utest -DeslMSAFILE_STOCKHOLM_TESTDRIVE esl_msafile_stockholm.c -leasel -lm
+ *  (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_stockholm_utest -DeslMSAFILE_STOCKHOLM_TESTDRIVE esl_msafile_stockholm.c -leasel -lm
+ * run:     ./esl_msafile_stockholm_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_msafile.h"
+#include "esl_msafile_stockholm.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for Stockholm/Xfam MSA format module";
+
+int
+main(int argc, char **argv)
+{
+  char            msg[]       = "Stockholm MSA i/o module test driver failed";
+  ESL_GETOPTS    *go          = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  int             ngoodtests  = 1;
+  int             nbadtests   = 65;
+  char            tmpfile[32];
+  FILE           *ofp;
+  int             testnumber;
+  int             expected_alphatype;
+  int             expected_nseq;
+  int             expected_alen;
+  int             expected_linenumber;
+  char            expected_errmsg[eslERRBUFSIZE];
+
+  utest_bad_open(NULL, eslMSAFILE_UNKNOWN, eslENOFORMAT, ""); 
+
+  utest_bad_read(NULL, eslMSAFILE_UNKNOWN, "missing // terminator", 1,  "# STOCKHOLM 1.0\n");     
+  utest_bad_read(NULL, eslMSAFILE_UNKNOWN, "no alignment data",     2,  "# STOCKHOLM 1.0\n//\n");
+  
+  utest_good_format(NULL, eslMSAFILE_UNKNOWN, 2, 10, "\n# STOCKHOLM 1.0\n\nseq1 ACDEFGHIKL\nseq2 ACDEFGHIKL\n\n//\n\n");
+
+  utest_identical_io(NULL, eslMSAFILE_UNKNOWN, "# STOCKHOLM 1.0\n\nseq1 ACDEFGHIKL\nseq2 ACDEFGHIKL\n//\n");
+
+  /* Various "good" files, that should be parsed correctly. */
+  for (testnumber = 1; testnumber <= ngoodtests; testnumber++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX"); 
+      if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+      switch (testnumber) {
+      case  1:  utest_write_good1 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break;
+      }
+      fclose(ofp);
+      utest_goodfile(tmpfile, testnumber, expected_alphatype, expected_nseq, expected_alen);
+      remove(tmpfile);
+    }
+
+  /* Tests for all possible EFORMAT errors */
+   for (testnumber = 1; testnumber <= nbadtests; testnumber++)
+    {
+      strcpy(tmpfile, "esltmpXXXXXX"); 
+      if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+    
+      switch (testnumber) {
+      case  1:  utest_write_badformat1 (ofp, &expected_linenumber, expected_errmsg); break;
+      case  2:  utest_write_badformat2 (ofp, &expected_linenumber, expected_errmsg); break;
+      case  3:  utest_write_badformat3 (ofp, &expected_linenumber, expected_errmsg); break;
+      case  4:  utest_write_badformat4 (ofp, &expected_linenumber, expected_errmsg); break;
+      case  5:  utest_write_badformat5 (ofp, &expected_linenumber, expected_errmsg); break;
+      case  6:  utest_write_badformat6 (ofp, &expected_linenumber, expected_errmsg); break;
+      case  7:  utest_write_badformat7 (ofp, &expected_linenumber, expected_errmsg); break;
+      case  8:  utest_write_badformat8 (ofp, &expected_linenumber, expected_errmsg); break;
+      case  9:  utest_write_badformat9 (ofp, &expected_linenumber, expected_errmsg); break;
+      case 10:  utest_write_badformat10(ofp, &expected_linenumber, expected_errmsg); break;
+      case 11:  utest_write_badformat11(ofp, &expected_linenumber, expected_errmsg); break;
+      case 12:  utest_write_badformat12(ofp, &expected_linenumber, expected_errmsg); break;
+      case 13:  utest_write_badformat13(ofp, &expected_linenumber, expected_errmsg); break;
+      case 14:  utest_write_badformat14(ofp, &expected_linenumber, expected_errmsg); break;
+      case 15:  utest_write_badformat15(ofp, &expected_linenumber, expected_errmsg); break;
+      case 16:  utest_write_badformat16(ofp, &expected_linenumber, expected_errmsg); break;
+      case 17:  utest_write_badformat17(ofp, &expected_linenumber, expected_errmsg); break;
+      case 18:  utest_write_badformat18(ofp, &expected_linenumber, expected_errmsg); break;
+      case 19:  utest_write_badformat19(ofp, &expected_linenumber, expected_errmsg); break;
+      case 20:  utest_write_badformat20(ofp, &expected_linenumber, expected_errmsg); break;
+      case 21:  utest_write_badformat21(ofp, &expected_linenumber, expected_errmsg); break;
+      case 22:  utest_write_badformat22(ofp, &expected_linenumber, expected_errmsg); break;
+      case 23:  utest_write_badformat23(ofp, &expected_linenumber, expected_errmsg); break;
+      case 24:  utest_write_badformat24(ofp, &expected_linenumber, expected_errmsg); break;
+      case 25:  utest_write_badformat25(ofp, &expected_linenumber, expected_errmsg); break;
+      case 26:  utest_write_badformat26(ofp, &expected_linenumber, expected_errmsg); break;
+      case 27:  utest_write_badformat27(ofp, &expected_linenumber, expected_errmsg); break;
+      case 28:  utest_write_badformat28(ofp, &expected_linenumber, expected_errmsg); break;
+      case 29:  utest_write_badformat29(ofp, &expected_linenumber, expected_errmsg); break;
+      case 30:  utest_write_badformat30(ofp, &expected_linenumber, expected_errmsg); break;
+      case 31:  utest_write_badformat31(ofp, &expected_linenumber, expected_errmsg); break;
+      case 32:  utest_write_badformat32(ofp, &expected_linenumber, expected_errmsg); break;
+      case 33:  utest_write_badformat33(ofp, &expected_linenumber, expected_errmsg); break;
+      case 34:  utest_write_badformat34(ofp, &expected_linenumber, expected_errmsg); break;
+      case 35:  utest_write_badformat35(ofp, &expected_linenumber, expected_errmsg); break;
+      case 36:  utest_write_badformat36(ofp, &expected_linenumber, expected_errmsg); break;
+      case 37:  utest_write_badformat37(ofp, &expected_linenumber, expected_errmsg); break;
+      case 38:  utest_write_badformat38(ofp, &expected_linenumber, expected_errmsg); break;
+      case 39:  utest_write_badformat39(ofp, &expected_linenumber, expected_errmsg); break;
+      case 40:  utest_write_badformat40(ofp, &expected_linenumber, expected_errmsg); break;
+      case 41:  utest_write_badformat41(ofp, &expected_linenumber, expected_errmsg); break;
+      case 42:  utest_write_badformat42(ofp, &expected_linenumber, expected_errmsg); break;
+      case 43:  utest_write_badformat43(ofp, &expected_linenumber, expected_errmsg); break;
+      case 44:  utest_write_badformat44(ofp, &expected_linenumber, expected_errmsg); break;
+      case 45:  utest_write_badformat45(ofp, &expected_linenumber, expected_errmsg); break;
+      case 46:  utest_write_badformat46(ofp, &expected_linenumber, expected_errmsg); break;
+      case 47:  utest_write_badformat47(ofp, &expected_linenumber, expected_errmsg); break;
+      case 48:  utest_write_badformat48(ofp, &expected_linenumber, expected_errmsg); break;
+      case 49:  utest_write_badformat49(ofp, &expected_linenumber, expected_errmsg); break;
+      case 50:  utest_write_badformat50(ofp, &expected_linenumber, expected_errmsg); break;
+      case 51:  utest_write_badformat51(ofp, &expected_linenumber, expected_errmsg); break;
+      case 52:  utest_write_badformat52(ofp, &expected_linenumber, expected_errmsg); break;
+      case 53:  utest_write_badformat53(ofp, &expected_linenumber, expected_errmsg); break;
+      case 54:  utest_write_badformat54(ofp, &expected_linenumber, expected_errmsg); break;
+      case 55:  utest_write_badformat55(ofp, &expected_linenumber, expected_errmsg); break;
+      case 56:  utest_write_badformat56(ofp, &expected_linenumber, expected_errmsg); break;
+      case 57:  utest_write_badformat57(ofp, &expected_linenumber, expected_errmsg); break;
+      case 58:  utest_write_badformat58(ofp, &expected_linenumber, expected_errmsg); break;
+      case 59:  utest_write_badformat59(ofp, &expected_linenumber, expected_errmsg); break;
+      case 60:  utest_write_badformat60(ofp, &expected_linenumber, expected_errmsg); break;
+      case 61:  utest_write_badformat61(ofp, &expected_linenumber, expected_errmsg); break;
+      case 62:  utest_write_badformat62(ofp, &expected_linenumber, expected_errmsg); break;
+      case 63:  utest_write_badformat63(ofp, &expected_linenumber, expected_errmsg); break;
+      case 64:  utest_write_badformat64(ofp, &expected_linenumber, expected_errmsg); break;
+      case 65:  utest_write_badformat65(ofp, &expected_linenumber, expected_errmsg); break;
+      }
+      fclose(ofp);
+      
+      utest_bad_format(tmpfile, testnumber, expected_linenumber, expected_errmsg);
+      remove(tmpfile);
+    }
+
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslMSAFILE_STOCKHOLM_TESTDRIVE*/
+/*---------------- end, test driver -----------------------------*/
+
+
+/*****************************************************************
+ * 8. Examples.
+ *****************************************************************/
+
+#ifdef eslMSAFILE_STOCKHOLM_EXAMPLE
+/* A full-featured example of reading/writing MSA(s) in Stockholm format.
+   gcc -g -Wall -o esl_msafile_stockholm_example -I. -L. -DeslMSAFILE_STOCKHOLM_EXAMPLE esl_msafile_stockholm.c -leasel -lm
+   ./esl_msafile_stockholm_example <msafile>
+ */
+/*::cexcerpt::msafile_stockholm_example::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_stockholm.h"
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",            0 },
+  { "-1",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "override autodetection; force Stockholm format",  0 },
+  { "-q",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "quieter: don't write msa back, just summary",     0 },
+  { "-t",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use text mode: no digital alphabet",              0 },
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is DNA",                    0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is RNA",                    0 },
+  { "--amino",     eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, "-t", "specify that alphabet is protein",                0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msafile>";
+static char banner[] = "example of guessing, reading, writing Stockholm format";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS        *go          = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char               *filename    = esl_opt_GetArg(go, 1);
+  int                 infmt       = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET       *abc         = NULL;
+  ESL_MSAFILE        *afp         = NULL;
+  ESL_MSA            *msa         = NULL;
+  int                 status;
+
+  if      (esl_opt_GetBoolean(go, "-1"))      infmt = eslMSAFILE_STOCKHOLM;  /* override format autodetection */
+
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); 
+
+  /* Text mode: pass NULL for alphabet.
+   * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed 
+   */
+  if   (esl_opt_GetBoolean(go, "-t"))  status = esl_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp);
+  else                                 status = esl_msafile_Open(&abc, filename, NULL, infmt, NULL, &afp);
+  if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+
+  while ( (status = esl_msafile_stockholm_Read(afp, &msa)) == eslOK)
+    {
+      printf("alphabet:       %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)"));
+      printf("# of seqs:      %d\n", msa->nseq);
+      printf("# of cols:      %d\n", (int) msa->alen);
+      printf("\n");
+
+      if (! esl_opt_GetBoolean(go, "-q"))
+	esl_msafile_stockholm_Write(stdout, msa, eslMSAFILE_STOCKHOLM);
+
+      esl_msa_Destroy(msa);
+    }
+  if (status != eslEOF) esl_msafile_ReadFailure(afp, status);
+
+  esl_msafile_Close(afp);
+  if (abc) esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+/*::cexcerpt::msafile_stockholm_example::end::*/
+#endif /*eslMSAFILE_STOCKHOLM_EXAMPLE*/
+
+
+
+#ifdef eslMSAFILE_STOCKHOLM_EXAMPLE2
+/* A minimal example. Read Stockholm MSAs, in text mode.
+   gcc -g -Wall -o esl_msafile_stockholm_example2 -I. -L. -DeslMSAFILE_STOCKHOLM_EXAMPLE2 esl_msafile_stockholm.c -leasel -lm
+   ./esl_msafile_stockholm_example2 <msafile>
+ */
+
+/*::cexcerpt::msafile_stockholm_example::begin::*/
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_stockholm.h"
+
+int 
+main(int argc, char **argv)
+{
+  char        *filename = argv[1];
+  int          infmt    = eslMSAFILE_STOCKHOLM;
+  ESL_MSAFILE  *afp     = NULL;
+  ESL_MSA      *msa     = NULL;
+  int           status;
+
+  if ( (status = esl_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+
+  while  ( (status = esl_msafile_stockholm_Read(afp, &msa)) == eslOK)
+    {
+      printf("%15s: %6d seqs, %5d columns\n\n", msa->name, msa->nseq, (int) msa->alen);
+      esl_msafile_stockholm_Write(stdout, msa, eslMSAFILE_STOCKHOLM);
+      esl_msa_Destroy(msa);
+    }
+  if (status != eslEOF)  esl_msafile_ReadFailure(afp, status);
+
+  esl_msafile_Close(afp);
+  exit(0);
+}
+/*::cexcerpt::msafile_stockholm_example2::end::*/
+#endif /*eslMSAFILE_STOCKHOLM_EXAMPLE2*/
+/*--------------------- end of example --------------------------*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msafile_stockholm.h b/esl_msafile_stockholm.h
new file mode 100644
index 0000000..8705b9d
--- /dev/null
+++ b/esl_msafile_stockholm.h
@@ -0,0 +1,15 @@
+/* I/O of multiple alignment files in Stockholm/Pfam format
+ */
+#ifndef eslMSAFILE_STOCKHOLM_INCLUDED
+#define eslMSAFILE_STOCKHOLM_INCLUDED
+
+extern int esl_msafile_stockholm_SetInmap     (ESL_MSAFILE *afp);
+extern int esl_msafile_stockholm_GuessAlphabet(ESL_MSAFILE *afp, int *ret_type);
+extern int esl_msafile_stockholm_Read         (ESL_MSAFILE *afp, ESL_MSA **ret_msa);
+extern int esl_msafile_stockholm_Write        (FILE *fp, const ESL_MSA *msa, int fmt);
+
+#endif /*eslMSAFILE_STOCKHOLM_INCLUDED*/
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msashuffle.c b/esl_msashuffle.c
new file mode 100644
index 0000000..3a0e250
--- /dev/null
+++ b/esl_msashuffle.c
@@ -0,0 +1,514 @@
+/* Shuffling, bootstrapping, permuting alignments, by column or row.
+ * 
+ * Table of contents:
+ *    1. Randomizing MSAs by column.
+ *    2. Permuting sequence order (i.e. by row)
+ *    3. Shuffling pairwise (QRNA) alignments.
+ */
+#include "esl_config.h"
+
+#include <string.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#include "esl_msa.h"
+#include "esl_msashuffle.h"
+#include "esl_random.h"
+
+
+/*****************************************************************
+ * 1. Randomizing MSAs by column.
+ *****************************************************************/ 
+
+/* Function:  esl_msashuffle_Shuffle()
+ * Synopsis:  Shuffle an alignment's columns.
+ *
+ * Purpose:   Returns a column-shuffled version of <msa> in <shuf>,
+ *            using random generator <r>. Shuffling by columns
+ *            preserves the \% identity of the original
+ *            alignment. <msa> and <shuf> can be identical, to shuffle
+ *            in place.
+ *            
+ *            The caller sets up the rest of the data (everything but
+ *            the alignment itself) in <shuf> the way it wants,
+ *            including sequence names, MSA name, and other
+ *            annotation. The easy thing to do is to make <shuf>
+ *            a copy of <msa>: the caller might create <shuf> by
+ *            a call to <esl_msa_Clone()>.
+ *            
+ *            The alignments <msa> and <shuf> can both be in digital
+ *            mode, or can both be in text mode; you cannot mix
+ *            digital and text modes.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <msa>,<shuf> aren't in the same mode (digital vs. text).
+ */
+int
+esl_msashuffle_Shuffle(ESL_RANDOMNESS *r, ESL_MSA *msa, ESL_MSA *shuf)
+{
+  int i, pos, alen;
+
+  if (! (msa->flags & eslMSA_DIGITAL))
+    {
+      char c;
+      if (shuf->flags & eslMSA_DIGITAL) ESL_EXCEPTION(eslEINVAL, "<shuf> must be in text mode if <msa> is");
+      if (msa != shuf) {
+	for (i = 0; i < msa->nseq; i++)
+	  strcpy(shuf->aseq[i], msa->aseq[i]);
+      }
+
+      for (i = 0; i < msa->nseq; i++)
+	shuf->aseq[i][msa->alen] = '\0';
+
+      for (alen = msa->alen; alen > 1; alen--)
+	{
+	  pos = esl_rnd_Roll(r, alen);
+	  for (i = 0; i < msa->nseq; i++)
+	    {
+	      c                     = msa->aseq[i][pos];
+	      shuf->aseq[i][pos]    = shuf->aseq[i][alen-1];
+	      shuf->aseq[i][alen-1] = c;
+	    }
+	}
+    }
+#ifdef eslAUGMENT_ALPHABET
+  else 
+    {
+      ESL_DSQ x;
+      if (! (shuf->flags & eslMSA_DIGITAL)) ESL_EXCEPTION(eslEINVAL, "<shuf> must be in digital mode if <msa> is");
+
+      if (msa != shuf) {
+	for (i = 0; i < msa->nseq; i++)
+	  memcpy(shuf->ax[i], msa->ax[i], (msa->alen + 2) * sizeof(ESL_DSQ));
+      }
+
+      for (i = 0; i < msa->nseq; i++)
+	shuf->ax[i][msa->alen+1] = eslDSQ_SENTINEL;
+
+      for (alen = msa->alen; alen > 1; alen--)
+	{
+	  pos = esl_rnd_Roll(r, alen) + 1;
+	  for (i = 0; i < msa->nseq; i++)
+	    {
+	      x                 = msa->ax[i][pos];
+	      shuf->ax[i][pos]  = shuf->ax[i][alen];
+	      shuf->ax[i][alen] = x;
+	    }
+	}
+    }
+#endif /*eslAUGMENT_ALPHABET*/
+
+  return eslOK;
+}
+
+/* Function:  esl_msashuffle_Bootstrap()
+ * Synopsis:  Bootstrap sample an MSA.
+ * Incept:    SRE, Tue Jan 22 11:05:07 2008 [Janelia]
+ *
+ * Purpose:   Takes a bootstrap sample of <msa> (sample <alen> columns,
+ *            with replacement) and puts it in <bootsample>, using
+ *            random generator <r>. 
+ *            
+ *            The caller provides allocated space for <bootsample>.
+ *            It must be different space than <msa>; you cannot take
+ *            a bootstrap sample "in place". The caller sets up the
+ *            rest of the data in <bootsample> (everything but the
+ *            alignment itself) the way it wants, including sequence
+ *            names, MSA name, and other annotation. The easy thing to
+ *            do is to initialize <bootsample> by cloning <msa>.
+ *
+ *            The alignments <msa> and <bootsample> can both be in digital
+ *            mode, or can both be in text mode; you cannot mix
+ *            digital and text modes.
+ *
+ * Returns:   <eslOK> on success, and the alignment in <bootsample> is
+ *            set to be a bootstrap resample of the alignment in <msa>.
+ *
+ * Throws:    <eslEINVAL> if <msa>,<bootsample> aren't in the same mode
+ *            (digital vs. text).
+ */
+int 
+esl_msashuffle_Bootstrap(ESL_RANDOMNESS *r, ESL_MSA *msa, ESL_MSA *bootsample)
+{
+  int i, pos, col;
+
+  /* contract checks */
+  if (  (msa->flags & eslMSA_DIGITAL) && ! (bootsample->flags & eslMSA_DIGITAL))
+    ESL_EXCEPTION(eslEINVAL, "<msa> and <bootsample> must both be in digital or text mode");
+  if (! (msa->flags & eslMSA_DIGITAL) &&   (bootsample->flags & eslMSA_DIGITAL))
+    ESL_EXCEPTION(eslEINVAL, "<msa> and <bootsample> must both be in digital or text mode");
+
+  if (! (msa->flags & eslMSA_DIGITAL))
+    {
+      for (pos = 0; pos < msa->alen; pos++)
+	{
+	  col = esl_rnd_Roll(r, msa->alen);
+	  for (i = 0; i < msa->nseq; i++)
+	    bootsample->aseq[i][pos] = msa->aseq[i][col];
+	}
+
+      for (i = 0; i < msa->nseq; i++)
+	bootsample->aseq[i][msa->alen] = '\0';
+    }
+#ifdef eslAUGMENT_ALPHABET
+  else
+    {
+      for (i = 0; i < msa->nseq; i++)
+	bootsample->ax[i][0] = eslDSQ_SENTINEL;
+
+      for (pos = 1; pos <= msa->alen; pos++)
+	{
+	  col = esl_rnd_Roll(r, msa->alen) + 1;
+	  for (i = 0; i < msa->nseq; i++)
+	    bootsample->ax[i][pos] = msa->ax[i][col];
+	}
+
+      for (i = 0; i < msa->nseq; i++)
+	bootsample->ax[i][msa->alen+1] = eslDSQ_SENTINEL;
+    }
+#endif /*eslAUGMENT_ALPHABET*/
+
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 2. Permuting the sequence order 
+ *****************************************************************/
+
+/* Function:  esl_msashuffle_PermuteSequenceOrder()
+ * Synopsis:  Permutes the order of the sequences.
+ *
+ * Purpose:   Randomly permute the order of the sequences in <msa>,
+ *            and any associated sequence annotation, in place.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_msashuffle_PermuteSequenceOrder(ESL_RANDOMNESS *r, ESL_MSA *msa)
+{
+  void   *tmp;
+  double  tmpwgt;
+  int64_t tmplen;
+  int     N, i, tag;
+
+  for (N = msa->nseq; N > 1; N--)
+    {
+      i = esl_rnd_Roll(r, N);	/* idx = 0..N-1 */
+      
+      if ( ! (msa->flags & eslMSA_DIGITAL)) { tmp = msa->aseq[i]; msa->aseq[i] = msa->aseq[N-1]; msa->aseq[N-1] = tmp; }
+#ifdef eslAUGMENT_ALPHABET
+      else 	                            { tmp = msa->ax[i];   msa->ax[i]   = msa->ax[N-1];   msa->ax[N-1]   = tmp; }
+#endif
+      tmp    = msa->sqname[i]; msa->sqname[i] = msa->sqname[N-1]; msa->sqname[N-1] = tmp;
+      tmpwgt = msa->wgt[i];    msa->wgt[i]    = msa->wgt[N-1];    msa->wgt[N-1]    = tmpwgt;
+
+      if (msa->sqacc)  { tmp    = msa->sqacc[i];  msa->sqacc[i]  = msa->sqacc[N-1];  msa->sqacc[N-1]  = tmp;    }
+      if (msa->sqdesc) { tmp    = msa->sqdesc[i]; msa->sqdesc[i] = msa->sqdesc[N-1]; msa->sqdesc[N-1] = tmp;    }
+      if (msa->ss)     { tmp    = msa->ss[i];     msa->ss[i]     = msa->ss[N-1];     msa->ss[N-1]     = tmp;    }
+      if (msa->sa)     { tmp    = msa->sa[i];     msa->sa[i]     = msa->sa[N-1];     msa->sa[N-1]     = tmp;    }
+      if (msa->pp)     { tmp    = msa->pp[i];     msa->pp[i]     = msa->pp[N-1];     msa->pp[N-1]     = tmp;    }
+      if (msa->sqlen)  { tmplen = msa->sqlen[i];  msa->sqlen[i]  = msa->sqlen[N-1];  msa->sqlen[N-1]  = tmplen; }
+      if (msa->sslen)  { tmplen = msa->sslen[i];  msa->sslen[i]  = msa->sslen[N-1];  msa->sslen[N-1]  = tmplen; }
+      if (msa->salen)  { tmplen = msa->salen[i];  msa->salen[i]  = msa->salen[N-1];  msa->salen[N-1]  = tmplen; }
+      if (msa->pplen)  { tmplen = msa->pplen[i];  msa->pplen[i]  = msa->pplen[N-1];  msa->pplen[N-1]  = tmplen; }
+
+      for (tag = 0; tag < msa->ngs; tag++) if (msa->gs[tag]) { tmp = msa->gs[tag][i]; msa->gs[tag][i] = msa->gs[tag][N-1]; msa->gs[tag][N-1] = tmp; }
+      for (tag = 0; tag < msa->ngr; tag++) if (msa->gr[tag]) { tmp = msa->gr[tag][i]; msa->gr[tag][i] = msa->gr[tag][N-1]; msa->gr[tag][N-1] = tmp; }
+    }
+
+  /* if <msa> has a keyhash that maps seqname => seqidx, we'll need to rebuild it. */
+  if (msa->index) 
+    {
+      esl_keyhash_Reuse(msa->index);
+      for (i = 0; i < msa->nseq; i++)
+	esl_keyhash_Store(msa->index, msa->sqname[i], -1, NULL);
+    }
+
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 3. Shuffling pairwise (QRNA) alignments
+ *****************************************************************/ 
+#ifdef eslAUGMENT_ALPHABET
+/* Function: esl_msashuffle_XQRNA()
+ * Synopsis: Gap-preserving column shuffle of a digital pairwise alignment.
+ * Incept:   SRE, Tue Jan 22 09:09:52 2008 [Market Street Cafe, Leesburg]
+ *
+ * Purpose:  Shuffle a digital pairwise alignment <x>,<y> while
+ *           preserving the position of gaps, where both sequences are
+ *           in digital alphabet <abc>, using the random number
+ *           generator <r>. Return the shuffled alignment in <xs>,
+ *           <ys>. Caller provides allocated space for <xs> and <ys>
+ *           for at least the same length of <x>,<y>.
+ *           
+ *           Works by doing three separate
+ *           shuffles, of (1) columns with residues in both
+ *           <x> and <y>, (2) columns with residue in <x> and gap in <y>,
+ *           and (3) columns with gap in <x> and residue in <y>.
+ *           
+ *           <xs>,<x> and <ys>,<y> may be identical: that is, to shuffle
+ *           an alignment "in place", destroying the original
+ *           alignment, just call <esl_msashuffle_XQRNA(r, abc, x,y,x,y)>.
+ *
+ * Returns:  <eslOK> on success, and the shuffled alignment is 
+ *           returned in <xs>, <ys>.
+ *           
+ * Throws:   <eslEMEM> on allocation failure.          
+ */
+int
+esl_msashuffle_XQRNA(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, ESL_DSQ *x, ESL_DSQ *y, ESL_DSQ *xs, ESL_DSQ *ys)
+{
+  int  L;
+  int *xycol = NULL;
+  int *xcol  = NULL;
+  int *ycol  = NULL;
+  int  nxy, nx, ny;
+  int  i;
+  int  pos, c;
+  char xsym, ysym;
+  int  status;
+
+  L = esl_abc_dsqlen(x);
+  if (esl_abc_dsqlen(y) != L) ESL_XEXCEPTION(eslEINVAL, "sequences of different lengths in qrna shuffle");
+
+  if (xs != x) esl_abc_dsqcpy(x, L, xs);
+  if (ys != y) esl_abc_dsqcpy(y, L, ys);
+
+  /* First, construct three arrays containing lists of the column positions
+   * of the three types of columns. (If a column contains gaps in both x and y,
+   * we've already simply copied it to the shuffled sequence.)
+   */
+  ESL_ALLOC(xycol, sizeof(int) * L);
+  ESL_ALLOC(xcol,  sizeof(int) * L);
+  ESL_ALLOC(ycol,  sizeof(int) * L);
+  nxy = nx = ny = 0;
+
+  for (i = 1; i <= L; i++)
+    {
+      if      (  esl_abc_XIsGap(abc, x[i]) &&   esl_abc_XIsGap(abc, y[i])) { continue; }
+      else if (! esl_abc_XIsGap(abc, x[i]) && ! esl_abc_XIsGap(abc, y[i])) { xycol[nxy] = i; nxy++; }
+      else if (  esl_abc_XIsGap(abc, x[i]))                                { ycol[ny] = i;   ny++;  }
+      else if (  esl_abc_XIsGap(abc, y[i]))                                { xcol[nx] = i;   nx++;  }
+    }
+
+  /* Second, shuffle the sequences indirectly, via shuffling these arrays.
+   * Yow, careful with those indices, and with order of the statements...
+   */
+  for (; nxy > 1; nxy--) {
+    pos              = esl_rnd_Roll(r, nxy);
+    xsym             = xs[xycol[pos]];   ysym             = ys[xycol[pos]];    c            = xycol[pos];   
+    xs[xycol[pos]]   = xs[xycol[nxy-1]]; ys[xycol[pos]]   = ys[xycol[nxy-1]];  xycol[pos]   = xycol[nxy-1];
+    xs[xycol[nxy-1]] = xsym;             ys[xycol[nxy-1]] = ysym;              xycol[pos]   = c;
+  }
+  for (; nx > 1; nx--) {
+    pos            = esl_rnd_Roll(r, nx); 
+    xsym           = xs[xcol[pos]];  ysym           = ys[xcol[pos]];  c          = xcol[pos];  
+    xs[xcol[pos]]  = xs[xcol[nx-1]]; ys[xcol[pos]]  = ys[xcol[nx-1]]; xcol[pos]  = xcol[nx-1]; 
+    xs[xcol[nx-1]] = xsym;           ys[xcol[nx-1]] = ysym;           xcol[nx-1] = c;          
+  }
+  for (; ny > 1; ny--) {
+    pos            = esl_rnd_Roll(r, ny); 
+    xsym           = xs[ycol[pos]];  ysym           = ys[ycol[pos]];  c          = ycol[pos]; 
+    xs[ycol[pos]]  = xs[ycol[ny-1]]; ys[ycol[pos]]  = ys[ycol[ny-1]]; ycol[pos]  = ycol[ny-1];
+    xs[ycol[ny-1]] = xsym;           ys[ycol[ny-1]] = ysym;           ycol[ny-1] = c;          
+  }
+
+  free(xycol); free(xcol); free(ycol);
+  return eslOK;
+
+ ERROR:
+  if (xycol != NULL) free(xycol);
+  if (xcol  != NULL) free(xcol);
+  if (ycol  != NULL) free(ycol);
+  return status;
+}
+
+/* Function: esl_msashuffle_CQRNA()
+ * Synopsis: Gap-preserving column shuffle of a pairwise alignment.
+ * Incept:   SRE, Tue Jan 22 08:45:34 2008 [Market Street Cafe, Leesburg]
+ *
+ * Purpose:  Shuffle a pairwise alignment <x>,<y> while preserving the
+ *           position of gaps, using the random number generator <r>.
+ *           Return the shuffled alignment in <xs>,
+ *           <ys>. Caller provides allocated space for <xs> and <ys>.
+ *           
+ *           An alphabet <abc> must also be provided, solely for the
+ *           definition of gap characters. Because Easel's default
+ *           alphabets (DNA, RNA, and protein) all use the same
+ *           definition of gap characters <-_.>, you can actually
+ *           provide any alphabet here, and get the same results.
+ *           (This may save having to determine the alphabet of input
+ *           sequences.)
+ *           
+ *           Works by doing three separate
+ *           shuffles, of (1) columns with residues in both
+ *           <x> and <y>, (2) columns with residue in <x> and gap in <y>,
+ *           and (3) columns with gap in <x> and residue in <y>.
+ *           
+ *           <xs>,<x> and <ys>,<y> may be identical: that is, to shuffle
+ *           an alignment "in place", destroying the original
+ *           alignment, just call <esl_msashuffle_CQRNA(r, abc, x,y,x,y)>.
+ *
+ * Returns:  <eslOK> on success, and the shuffled alignment is 
+ *           returned in <xs>, <ys>.
+ *           
+ * Throws:   <eslEMEM> on allocation failure.          
+ */
+int
+esl_msashuffle_CQRNA(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, char *x, char *y, char *xs, char *ys)
+{
+  int  L;
+  int *xycol = NULL;
+  int *xcol  = NULL;
+  int *ycol  = NULL;
+  int  nxy, nx, ny;
+  int  i;
+  int  pos, c;
+  char xsym, ysym;
+  int  status;
+
+  if (xs != x) strcpy(xs, x);
+  if (ys != y) strcpy(ys, y);
+
+  /* First, construct three arrays containing lists of the column positions
+   * of the three types of columns. (If a column contains gaps in both x and y,
+   * we've already simply copied it to the shuffled sequence.)
+   */
+  L = strlen(x);
+  if (strlen(y) != L) ESL_XEXCEPTION(eslEINVAL, "sequences of different lengths in qrna shuffle");
+  ESL_ALLOC(xycol, sizeof(int) * L);
+  ESL_ALLOC(xcol,  sizeof(int) * L);
+  ESL_ALLOC(ycol,  sizeof(int) * L);
+  nxy = nx = ny = 0;
+
+  for (i = 0; i < L; i++)
+    {
+      if      (  esl_abc_CIsGap(abc, x[i]) &&   esl_abc_CIsGap(abc, y[i])) { continue; }
+      else if (! esl_abc_CIsGap(abc, x[i]) && ! esl_abc_CIsGap(abc, y[i])) { xycol[nxy] = i; nxy++; }
+      else if (  esl_abc_CIsGap(abc, x[i]))                                { ycol[ny] = i;   ny++;  }
+      else if (  esl_abc_CIsGap(abc, y[i]))                                { xcol[nx] = i;   nx++;  }
+    }
+
+  /* Second, shuffle the sequences indirectly, via shuffling these arrays.
+   * Yow, careful with those indices, and with order of the statements...
+   */
+  for (; nxy > 1; nxy--) {
+    pos              = esl_rnd_Roll(r, nxy);
+    xsym             = xs[xycol[pos]];   ysym             = ys[xycol[pos]];    c            = xycol[pos];   
+    xs[xycol[pos]]   = xs[xycol[nxy-1]]; ys[xycol[pos]]   = ys[xycol[nxy-1]];  xycol[pos]   = xycol[nxy-1];
+    xs[xycol[nxy-1]] = xsym;             ys[xycol[nxy-1]] = ysym;              xycol[pos]   = c;
+  }
+  for (; nx > 1; nx--) {
+    pos            = esl_rnd_Roll(r, nx); 
+    xsym           = xs[xcol[pos]];  ysym           = ys[xcol[pos]];  c          = xcol[pos];  
+    xs[xcol[pos]]  = xs[xcol[nx-1]]; ys[xcol[pos]]  = ys[xcol[nx-1]]; xcol[pos]  = xcol[nx-1]; 
+    xs[xcol[nx-1]] = xsym;           ys[xcol[nx-1]] = ysym;           xcol[nx-1] = c;          
+  }
+  for (; ny > 1; ny--) {
+    pos            = esl_rnd_Roll(r, ny); 
+    xsym           = xs[ycol[pos]];  ysym           = ys[ycol[pos]];  c          = ycol[pos]; 
+    xs[ycol[pos]]  = xs[ycol[ny-1]]; ys[ycol[pos]]  = ys[ycol[ny-1]]; ycol[pos]  = ycol[ny-1];
+    xs[ycol[ny-1]] = xsym;           ys[ycol[ny-1]] = ysym;           ycol[ny-1] = c;          
+  }
+
+  free(xycol); free(xcol); free(ycol);
+  return eslOK;
+
+ ERROR:
+  if (xycol != NULL) free(xycol);
+  if (xcol  != NULL) free(xcol);
+  if (ycol  != NULL) free(ycol);
+  return status;
+}
+#endif /*eslAUGMENT_ALPHABET*/
+
+
+/*****************************************************************
+ * 4. Example.
+ *****************************************************************/
+#ifdef eslMSASHUFFLE_EXAMPLE
+#include <stdio.h>
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_random.h"
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",        0 },
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use DNA alphabet",                            0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use RNA alphabet",                            0 },
+  { "--amino",     eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use protein alphabet",                        0 },
+  { "--text",      eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use text mode: no digital alphabet",          0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msafile>";
+static char banner[] = "example of multiple alignment shuffling/permuting";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go        = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  ESL_RANDOMNESS *rng       = esl_randomness_Create(0);
+  char           *msafile   = esl_opt_GetArg(go, 1);
+  int             fmt       = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET   *abc       = NULL;
+  ESL_MSAFILE    *afp       = NULL;
+  ESL_MSA        *msa       = NULL;
+  int             textmode  = esl_opt_GetBoolean(go, "--text");
+  int             nali      = 0;
+  int             status;
+
+  /* If you know the alphabet you want, create it - you'll pass it to esl_msafile_Open() */
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); 
+
+  /* Open in text or digital mode.
+   *   To let the Open() function autoguess the format, you pass <infmt=eslMSAFILE_UNKNOWN>. 
+   *   To let it autoguess the alphabet, you set <abc=NULL> and pass <&abc>.
+   *   To open in text mode instead of digital, you pass <NULL> for the alphabet argument.
+   * esl_msafile_OpenFailure() is a convenience, printing various diagnostics of any
+   * open failure to <stderr>. You can of course handle your own diagnostics instead.
+   */
+  if (textmode) status = esl_msafile_Open(NULL, msafile, NULL, fmt, NULL, &afp);
+  else          status = esl_msafile_Open(&abc, msafile, NULL, fmt, NULL, &afp);
+  if (status != eslOK)   esl_msafile_OpenFailure(afp, status);
+  
+  fmt = afp->format;
+
+  while ((status = esl_msafile_Read(afp, &msa)) == eslOK)
+    {	
+      /* if digital MSA: msa->ax[idx=0..nseq-1][acol=1..alen] is the alignment data; 
+       * if text MSA:  msa->aseq[idx=0..nseq-1][acol=0..alen-1] */
+      nali++;
+      
+      /* permute it */
+      esl_msashuffle_PermuteSequenceOrder(rng, msa);
+
+      esl_msafile_Write(stdout, msa, fmt);
+      esl_msa_Destroy(msa);
+    }
+  if (nali == 0 || status != eslEOF) esl_msafile_ReadFailure(afp, status); /* a convenience, like esl_msafile_OpenFailure() */
+
+  esl_alphabet_Destroy(abc);
+  esl_msafile_Close(afp);
+  esl_randomness_Destroy(rng);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+#endif
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msashuffle.h b/esl_msashuffle.h
new file mode 100644
index 0000000..37e5c62
--- /dev/null
+++ b/esl_msashuffle.h
@@ -0,0 +1,31 @@
+/* Shuffling or bootstrapping multiple sequence alignments.
+ * 
+ * SRE, Tue Jan 22 09:18:09 2008 [Market Street Cafe, Leesburg]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslMSASHUFFLE_INCLUDED
+#define eslMSASHUFFLE_INCLUDED
+
+#include "esl_random.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+
+/* 1. Randomizing MSAs by column. */
+extern int esl_msashuffle_Shuffle  (ESL_RANDOMNESS *r, ESL_MSA *msa, ESL_MSA *shuf);
+extern int esl_msashuffle_Bootstrap(ESL_RANDOMNESS *r, ESL_MSA *msa, ESL_MSA *bootsample);
+
+/* 2. Permuting the sequence order */
+extern int esl_msashuffle_PermuteSequenceOrder(ESL_RANDOMNESS *r, ESL_MSA *msa);
+
+/* 3. Shuffling pairwise (QRNA) alignments */
+#ifdef eslAUGMENT_ALPHABET
+extern int esl_msashuffle_CQRNA(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, char    *x, char    *y, char    *xs, char    *ys);
+extern int esl_msashuffle_XQRNA(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, ESL_DSQ *x, ESL_DSQ *y, ESL_DSQ *xs, ESL_DSQ *ys);
+#endif /*eslAUGMENT_ALPHABET*/
+
+#endif /*eslMSASHUFFLE_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/ 
diff --git a/esl_msaweight.c b/esl_msaweight.c
new file mode 100644
index 0000000..c4fd305
--- /dev/null
+++ b/esl_msaweight.c
@@ -0,0 +1,1120 @@
+/* Sequence weighting algorithms.
+ *
+ * Implementations of ad hoc sequence weighting algorithms for multiple
+ * sequence alignments:
+ *   GSC weights:    Gerstein et al., JMB 236:1067-1078, 1994. 
+ *   PB weights:     Henikoff and Henikoff, JMB 243:574-578, 1994.
+ *   BLOSUM weights: Henikoff and Henikoff, PNAS 89:10915-10919, 1992.
+ * 
+ * Contents:
+ *   1. Implementations of weighting algorithms.
+ *   2. Unit tests.
+ *   3. Test driver.
+ *   4. Regression tests against SQUID.
+ *   5. Benchmark.
+ *   6. Stats driver.
+ *   7. Examples.
+ *   8. Copyright notice and license.
+ */
+#include "esl_config.h"
+
+#include <math.h>
+#include <string.h>
+#include <ctype.h>
+
+/* Dependencies on Easel core: */
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_msa.h"
+#include "esl_dmatrix.h"
+#include "esl_vectorops.h"
+
+/* Dependencies on phylogeny modules: */
+#include "esl_distance.h"
+#include "esl_tree.h"
+#include "esl_msacluster.h"
+#include "esl_msaweight.h"
+
+
+/*****************************************************************
+ * 1. Implementations of weighting algorithms
+ *****************************************************************/
+
+/* Function:  esl_msaweight_GSC()
+ * Synopsis:  GSC weights.
+ * Incept:    SRE, Fri Nov  3 13:31:14 2006 [Janelia]
+ *
+ * Purpose:   Given a multiple sequence alignment <msa>, calculate
+ *            sequence weights according to the
+ *            Gerstein/Sonnhammer/Chothia algorithm. These weights
+ *            are stored internally in the <msa> object, replacing
+ *            any weights that may have already been there. Weights
+ *            are $\geq 0$ and they sum to <msa->nseq>.
+ *            
+ *            The <msa> may be in either digitized or text mode.
+ *            Digital mode is preferred, so that distance calculations
+ *            used by the GSC algorithm are robust against degenerate
+ *            residue symbols.
+ *
+ *            This is an implementation of Gerstein et al., "A method to
+ *            weight protein sequences to correct for unequal
+ *            representation", JMB 236:1067-1078, 1994.
+ *            
+ *            The algorithm is $O(N^2)$ memory (it requires a pairwise
+ *            distance matrix) and $O(N^3 + LN^2)$ time ($N^3$ for a UPGMA
+ *            tree building step, $LN^2$ for distance matrix construction)
+ *            for an alignment of N sequences and L columns. 
+ *            
+ *            In the current implementation, the actual memory
+ *            requirement is dominated by two full NxN distance
+ *            matrices (one tmp copy in UPGMA, and one here): for
+ *            8-byte doubles, that's $16N^2$ bytes. To keep the
+ *            calculation under memory limits, don't process large
+ *            alignments: max 1400 sequences for 32 MB, max 4000
+ *            sequences for 256 MB, max 8000 seqs for 1 GB. Watch
+ *            out, because Pfam alignments can easily blow this up.
+ *            
+ * Note:      Memory usage could be improved. UPGMA consumes a distance
+ *            matrix, but that can be D itself, not a copy, if the
+ *            caller doesn't mind the destruction of D. Also, D is
+ *            symmetrical, so we could use upper or lower triangular
+ *            matrices if we rewrote dmatrix to allow them.
+ *            
+ *            I also think UPGMA can be reduced to O(N^2) time, by
+ *            being more tricky about rapidly identifying the minimum
+ *            element: could keep min of each row, and update that,
+ *            I think.
+ *
+ * Returns:   <eslOK> on success, and the weights inside <msa> have been
+ *            modified.  
+ *
+ * Throws:    <eslEINVAL> if the alignment data are somehow invalid and
+ *            distance matrices can't be calculated. <eslEMEM> on an
+ *            allocation error. In either case, the original <msa> is
+ *            left unmodified.
+ *
+ * Xref:      [Gerstein94]; squid::weight.c::GSCWeights(); STL11/81.
+ */
+int
+esl_msaweight_GSC(ESL_MSA *msa)
+{
+  ESL_DMATRIX *D = NULL;     /* distance matrix */
+  ESL_TREE    *T = NULL;     /* UPGMA tree */
+  double      *x = NULL;     /* storage per node, 0..N-2 */
+  double       lw, rw;       /* total branchlen on left, right subtrees */
+  double       lx, rx;	     /* distribution of weight to left, right side */
+  int i;		     /* counter over nodes */
+  int status;
+  
+  /* Contract checks
+   */
+  ESL_DASSERT1( (msa       != NULL) );
+  ESL_DASSERT1( (msa->nseq >= 1)    );
+  ESL_DASSERT1( (msa->alen >= 1)    );
+  ESL_DASSERT1( (msa->wgt  != NULL) );
+  if (msa->nseq == 1) { msa->wgt[0] = 1.0; return eslOK; }
+
+  /* GSC weights use a rooted tree with "branch lengths" calculated by
+   * UPGMA on a fractional difference matrix - pretty crude.
+   */
+  if (! (msa->flags & eslMSA_DIGITAL)) {
+    if ((status = esl_dst_CDiffMx(msa->aseq, msa->nseq, &D))         != eslOK) goto ERROR;
+  } 
+#ifdef eslAUGMENT_ALPHABET
+  else {
+    if ((status = esl_dst_XDiffMx(msa->abc, msa->ax, msa->nseq, &D)) != eslOK) goto ERROR;
+  }
+#endif
+
+  /* oi, look out here.  UPGMA is correct, but old squid library uses
+   * single linkage, so for regression tests ONLY, we use single link. 
+   */
+#ifdef  eslMSAWEIGHT_REGRESSION
+  if ((status = esl_tree_SingleLinkage(D, &T)) != eslOK) goto ERROR; 
+#else
+  if ((status = esl_tree_UPGMA(D, &T)) != eslOK) goto ERROR; 
+#endif
+  esl_tree_SetCladesizes(T);	
+
+  ESL_ALLOC(x, sizeof(double) * (T->N-1));
+  
+  /* Postorder traverse (leaves to root) to calculate the total branch
+   * length under each internal node; store this in x[].  Remember the
+   * total branch length (x[0]) for a future sanity check.
+   */
+  for (i = T->N-2; i >= 0; i--)
+    {
+      x[i] = T->ld[i] + T->rd[i];
+      if (T->left[i]  > 0) x[i] += x[T->left[i]];
+      if (T->right[i] > 0) x[i] += x[T->right[i]];
+    }
+  
+  /* Preorder traverse (root to leaves) to calculate the weights.  Now
+   * we use x[] to mean, the total weight *above* this node that we will
+   * apportion to the node's left and right children. The two
+   * meanings of x[] never cross: every x[] beneath x[i] is still a
+   * total branch length.
+   *
+   * Because the API guarantees that msa is returned unmodified in case
+   * of an exception, and we're touching msa->wgt here, no exceptions
+   * may be thrown from now on in this function.
+   */
+  x[0] = 0;			/* initialize: no branch to the root. */
+  for (i = 0; i <= T->N-2; i++)
+    {
+      lw = T->ld[i];   if (T->left[i]  > 0) lw += x[T->left[i]];
+      rw = T->rd[i];   if (T->right[i] > 0) rw += x[T->right[i]];
+
+      if (lw+rw == 0.) 
+	{
+	  /* A special case arises in GSC weights when all branch lengths in a subtree are 0.
+	   * In this case, all seqs in this clade should get equal weights, sharing x[i] equally.
+           * So, split x[i] in proportion to cladesize, not to branch weight.
+	   */
+	  if (T->left[i] > 0)  lx =  x[i] * ((double) T->cladesize[T->left[i]]  / (double) T->cladesize[i]);
+	  else                 lx =  x[i] / (double) T->cladesize[i];
+
+	  if (T->right[i] > 0) rx =  x[i] * ((double) T->cladesize[T->right[i]] / (double) T->cladesize[i]);
+	  else                 rx =  x[i] / (double) T->cladesize[i];
+	} 
+      else /* normal case: x[i] split in proportion to branch weight. */
+	{
+	  lx = x[i] * lw/(lw+rw);
+	  rx = x[i] * rw/(lw+rw);
+	}
+      
+      if (T->left[i]  <= 0) msa->wgt[-(T->left[i])] = lx + T->ld[i];
+      else                  x[T->left[i]] = lx + T->ld[i];
+
+      if (T->right[i] <= 0) msa->wgt[-(T->right[i])] = rx + T->rd[i];
+      else                  x[T->right[i]] = rx + T->rd[i];
+    } 
+
+  /* Renormalize weights to sum to N.
+   */
+  esl_vec_DNorm(msa->wgt, msa->nseq);
+  esl_vec_DScale(msa->wgt, msa->nseq, (double) msa->nseq);
+  msa->flags |= eslMSA_HASWGTS;
+
+  free(x);
+  esl_tree_Destroy(T);
+  esl_dmatrix_Destroy(D);
+  return eslOK;
+
+ ERROR:
+  if (x != NULL) free(x);
+  if (T != NULL) esl_tree_Destroy(T);
+  if (D != NULL) esl_dmatrix_Destroy(D);
+  return status;
+}
+
+
+/* Function:  esl_msaweight_PB()
+ * Synopsis:  PB (position-based) weights.
+ * Incept:    SRE, Sun Nov  5 08:59:28 2006 [Janelia]
+ *
+ * Purpose:   Given a multiple alignment <msa>, calculate sequence
+ *            weights according to the position-based weighting
+ *            algorithm (Henikoff and Henikoff, JMB 243:574-578,
+ *            1994). These weights are stored internally in the <msa>
+ *            object, replacing any weights that may have already been
+ *            there. Weights are $\geq 0$ and they sum to <msa->nseq>.
+ *            
+ *            The <msa> may be in either digitized or text mode.
+ *            Digital mode is preferred, so that the algorithm
+ *            deals with degenerate residue symbols properly.
+ *            
+ *            The Henikoffs' algorithm does not give rules for dealing
+ *            with gaps or degenerate residue symbols. The rule here
+ *            is to ignore them. This means that longer sequences
+ *            initially get more weight; hence a "double
+ *            normalization" in which the weights are first divided by
+ *            sequence length in canonical residues (to compensate for
+ *            that effect), then normalized to sum to nseq.
+ *            
+ *            An advantage of the PB method is efficiency.
+ *            It is $O(1)$ in memory and $O(NL)$ time, for an alignment of
+ *            N sequences and L columns. This makes it a good method 
+ *            for ad hoc weighting of very deep alignments.
+ *            
+ *            When the alignment is in simple text mode, IUPAC
+ *            degenerate symbols are not dealt with correctly; instead,
+ *            the algorithm simply uses the 26 letters as "residues"
+ *            (case-insensitively), and treats all other residues as
+ *            gaps.
+ *
+ * Returns:   <eslOK> on success, and the weights inside <msa> have been
+ *            modified. 
+ *
+ * Throws:    <eslEMEM> on allocation error, in which case <msa> is
+ *            returned unmodified.
+ *
+ * Xref:      [Henikoff94b]; squid::weight.c::PositionBasedWeights().
+ */
+int
+esl_msaweight_PB(ESL_MSA *msa)
+{
+  int    *nres = NULL;   	/* counts of each residue observed in a column */
+  int     ntotal;		/* number of different symbols observed in a column */
+  int     rlen;			/* number of residues in a sequence */
+  int     idx, pos, i;
+  int     K;			/* alphabet size */
+  int     status;
+
+  /* Contract checks
+   */
+  ESL_DASSERT1( (msa->nseq >= 1) );
+  ESL_DASSERT1( (msa->alen >= 1) );
+  if (msa->nseq == 1) { msa->wgt[0] = 1.0; return eslOK; }
+
+  /* Initialize
+   */
+  if (! (msa->flags & eslMSA_DIGITAL)) 
+    { ESL_ALLOC(nres, sizeof(int) * 26);          K = 26;          }
+#ifdef eslAUGMENT_ALPHABET
+  else 
+    { ESL_ALLOC(nres, sizeof(int) * msa->abc->K); K = msa->abc->K; }
+#endif
+
+  esl_vec_DSet(msa->wgt, msa->nseq, 0.);
+
+  /* This section handles text alignments */
+  if (! (msa->flags & eslMSA_DIGITAL)) 
+    {
+      for (pos = 0; pos < msa->alen; pos++)
+	{
+	  /* Collect # of letters A..Z in this column, and total */
+	  esl_vec_ISet(nres, K, 0.);
+	  for (idx = 0; idx < msa->nseq; idx++)
+	    if (isalpha((int) msa->aseq[idx][pos]))
+	      nres[toupper((int) msa->aseq[idx][pos]) - 'A'] ++;
+	  for (ntotal = 0, i = 0; i < K; i++) if (nres[i] > 0) ntotal++;
+
+	  /* Bump weight on each seq by PB rule */
+	  if (ntotal > 0) {
+	    for (idx = 0; idx < msa->nseq; idx++) {
+	      if (isalpha((int) msa->aseq[idx][pos]))
+		msa->wgt[idx] += 1. / 
+		  (double) (ntotal * nres[toupper((int) msa->aseq[idx][pos]) - 'A'] );
+	    }
+	  }
+	}
+
+      /* first normalization by # of residues counted in each seq */
+      for (idx = 0; idx < msa->nseq; idx++) {
+	for (rlen = 0, pos = 0; pos < msa->alen; pos++) 
+      	  if (isalpha((int) msa->aseq[idx][pos])) rlen++;
+	if (ntotal > 0) msa->wgt[idx] /= (double) rlen;
+	/* if rlen == 0 for this seq, its weight is still 0.0, as initialized. */
+      }
+    }
+
+  /* This section handles digital alignments. */
+#ifdef eslAUGMENT_ALPHABET
+  else
+    {
+      for (pos = 1; pos <= msa->alen; pos++)
+	{
+	  /* Collect # of residues 0..K-1 in this column, and total # */
+	  esl_vec_ISet(nres, K, 0.);
+	  for (idx = 0; idx < msa->nseq; idx++)
+	    if (esl_abc_XIsCanonical(msa->abc, msa->ax[idx][pos]))
+	      nres[(int) msa->ax[idx][pos]] ++;
+	  for (ntotal = 0, i = 0; i < K; i++) if (nres[i] > 0) ntotal++;
+
+	  /* Bump weight on each sequence by PB rule */
+	  if (ntotal > 0) {
+	    for (idx = 0; idx < msa->nseq; idx++) {
+	      if (esl_abc_XIsCanonical(msa->abc, msa->ax[idx][pos]))
+		msa->wgt[idx] += 1. / (double) (ntotal * nres[msa->ax[idx][pos]]);
+	    }
+	  }
+	}
+
+      /* first normalization by # of residues counted in each seq */
+      for (idx = 0; idx < msa->nseq; idx++)
+	{
+	  for (rlen = 0, pos = 1; pos <= msa->alen; pos++) 
+	    if (esl_abc_XIsCanonical(msa->abc, msa->ax[idx][pos])) rlen++;
+	  if (rlen > 0) msa->wgt[idx] /= (double) rlen;
+	  /* if rlen == 0 for this seq, its weight is still 0.0, as initialized. */
+	}
+    }
+#endif
+
+  /* Make weights normalize up to nseq, and return.  In pathological
+   * case where all wgts were 0 (no seqs contain any unambiguous
+   * residues), weights become 1.0.
+   */
+  esl_vec_DNorm(msa->wgt, msa->nseq);
+  esl_vec_DScale(msa->wgt, msa->nseq, (double) msa->nseq);	
+  msa->flags |= eslMSA_HASWGTS;
+
+  free(nres);
+  return eslOK;
+
+ ERROR:
+  if (nres != NULL) free(nres);
+  return status;
+}
+
+
+/* Function:  esl_msaweight_BLOSUM()
+ * Synopsis:  BLOSUM weights.
+ * Incept:    SRE, Sun Nov  5 09:52:41 2006 [Janelia]
+ *
+ * Purpose:   Given a multiple sequence alignment <msa> and an identity
+ *            threshold <maxid>, calculate sequence weights using the
+ *            BLOSUM algorithm (Henikoff and Henikoff, PNAS
+ *            89:10915-10919, 1992). These weights are stored
+ *            internally in the <msa> object, replacing any weights
+ *            that may have already been there. Weights are $\geq 0$
+ *            and they sum to <msa->nseq>.
+ *            
+ *            The algorithm does a single linkage clustering by
+ *            fractional id, defines clusters such that no two clusters
+ *            have a pairwise link $\geq$ <maxid>), and assigns
+ *            weights of $\frac{1}{M_i}$ to each of the $M_i$
+ *            sequences in each cluster $i$. The <maxid> threshold
+ *            is a fractional pairwise identity, in the range
+ *            $0..1$.
+ *            
+ *            The <msa> may be in either digitized or text mode.
+ *            Digital mode is preferred, so that the pairwise identity
+ *            calculations deal with degenerate residue symbols
+ *            properly.
+ *
+ * Returns:   <eslOK> on success, and the weights inside <msa> have been
+ *            modified. 
+ *            
+ * Throws:    <eslEMEM> on allocation error. <eslEINVAL> if a pairwise
+ *            identity calculation fails because of corrupted sequence 
+ *            data. In either case, the <msa> is unmodified.
+ *
+ * Xref:      [Henikoff92]; squid::weight.c::BlosumWeights().
+ */
+int
+esl_msaweight_BLOSUM(ESL_MSA *msa, double maxid)
+{
+  int  *c    = NULL; /* cluster assignments for each sequence */
+  int  *nmem = NULL; /* number of seqs in each cluster */
+  int   nc;	     /* number of clusters  */
+  int   i;           /* loop counter */
+  int   status;
+
+  /* Contract checks
+   */
+  ESL_DASSERT1( (maxid >= 0. && maxid <= 1.) );
+  ESL_DASSERT1( (msa->nseq >= 1) );
+  ESL_DASSERT1( (msa->alen >= 1) );
+  if (msa->nseq == 1) { msa->wgt[0] = 1.0; return eslOK; }
+
+  if ((status = esl_msacluster_SingleLinkage(msa, maxid, &c, NULL, &nc)) != eslOK) goto ERROR;
+  ESL_ALLOC(nmem, sizeof(int) * nc);
+  esl_vec_ISet(nmem, nc, 0);
+  for (i = 0; i < msa->nseq; i++) nmem[c[i]]++;
+  for (i = 0; i < msa->nseq; i++) msa->wgt[i] = 1. / (double) nmem[c[i]];
+
+  /* Make weights normalize up to nseq, and return.
+   */
+  esl_vec_DNorm(msa->wgt, msa->nseq);
+  esl_vec_DScale(msa->wgt, msa->nseq, (double) msa->nseq);	
+  msa->flags |= eslMSA_HASWGTS;
+
+  free(nmem);
+  free(c);
+  return eslOK;
+
+ ERROR:
+  if (c    != NULL) free(c);
+  if (nmem != NULL) free(nmem);
+  return status;
+}
+
+/* Function:  esl_msaweight_IDFilter()
+ * Synopsis:  Filter by %ID.
+ * Incept:    ER, Wed Oct 29 10:06:43 2008 [Janelia]
+ * 
+ * Purpose:   Constructs a new alignment by removing near-identical 
+ *            sequences from a given alignment (where identity is 
+ *            calculated *based on the alignment*).
+ *            Does not affect the given alignment.
+ *            Keeps earlier sequence, discards later one. 
+ *           
+ *            Usually called as an ad hoc sequence "weighting" mechanism.
+ *           
+ * Limitations:
+ *            Unparsed Stockholm markup is not propagated into the
+ *            new alignment.
+ *           
+ * Return:    <eslOK> on success, and the <newmsa>.
+ *
+ * Throws:    <eslEMEM> on allocation error. <eslEINVAL> if a pairwise
+ *            identity calculation fails because of corrupted sequence 
+ *            data. In either case, the <msa> is unmodified.
+ *
+ * Xref:      squid::weight.c::FilterAlignment().
+ */
+int
+esl_msaweight_IDFilter(const ESL_MSA *msa, double maxid, ESL_MSA **ret_newmsa)
+{
+  int     *list   = NULL;               /* array of seqs in new msa */
+  int     *useme  = NULL;               /* TRUE if seq is kept in new msa */
+  int      nnew;			/* number of seqs in new alignment */
+  double   ident;                       /* pairwise percentage id */
+  int      i,j;                         /* seqs counters*/
+  int      remove;                      /* TRUE if sq is to be removed */
+  int      status;
+  
+  /* Contract checks
+   */
+  ESL_DASSERT1( (msa       != NULL) );
+  ESL_DASSERT1( (msa->nseq >= 1)    );
+  ESL_DASSERT1( (msa->alen >= 1)    );
+
+  /* allocate */
+  ESL_ALLOC(list,  sizeof(int) * msa->nseq);
+  ESL_ALLOC(useme, sizeof(int) * msa->nseq);
+  esl_vec_ISet(useme, msa->nseq, 0); /* initialize array */
+
+  /* find which seqs to keep (list) */
+  nnew = 0;
+  for (i = 0; i < msa->nseq; i++)
+    {
+      remove = FALSE;
+      for (j = 0; j < nnew; j++)
+	{
+	  if (! (msa->flags & eslMSA_DIGITAL)) {
+	    if ((status = esl_dst_CPairId(msa->aseq[i], msa->aseq[list[j]], &ident, NULL, NULL))       != eslOK) goto ERROR;
+	  } 
+#ifdef eslAUGMENT_ALPHABET
+	  else {
+	    if ((status = esl_dst_XPairId(msa->abc, msa->ax[i], msa->ax[list[j]], &ident, NULL, NULL)) != eslOK) goto ERROR;
+	  }
+#endif
+	  
+	  if (ident >= maxid)
+	    { 
+	      remove = TRUE; 
+	      break; 
+	    }
+	}
+      if (remove == FALSE) {
+	list[nnew++] = i;
+	useme[i]     = TRUE;
+      }
+    }
+  if ((status = esl_msa_SequenceSubset(msa, useme, ret_newmsa)) != eslOK) goto ERROR;
+ 
+  free(list);
+  free(useme);
+  return eslOK;
+
+ ERROR:
+  if (list  != NULL) free(list);
+  if (useme != NULL) free(useme);
+  return status;
+}
+/*---------------- end, weighting implementations ----------------*/
+
+
+
+
+/*****************************************************************
+ * 2. Unit tests
+ *****************************************************************/
+#ifdef eslMSAWEIGHT_TESTDRIVE
+
+static int
+utest_GSC(ESL_ALPHABET *abc, ESL_MSA *msa, double *expect)
+{
+  char *msg = "GSC weights unit test failure";
+
+  if (esl_msaweight_GSC(msa)                               != eslOK) esl_fatal(msg);
+  if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg);
+  
+  if (abc != NULL) 
+    {
+      if (esl_msa_Digitize(abc, msa, NULL)                     != eslOK) esl_fatal(msg);
+      if (esl_msaweight_GSC(msa)                               != eslOK) esl_fatal(msg);
+      if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg);
+      if (esl_msa_Textize(msa)                                 != eslOK) esl_fatal(msg);
+    }
+  return eslOK;
+}
+
+static int
+utest_PB(ESL_ALPHABET *abc, ESL_MSA *msa, double *expect)
+{
+  char *msg = "PB weights unit test failure";
+
+  if (esl_msaweight_PB(msa)                                != eslOK) esl_fatal(msg);
+  if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg);
+  
+  if (abc != NULL) 
+    {
+      if (esl_msa_Digitize(abc, msa, NULL)                     != eslOK) esl_fatal(msg);
+      if (esl_msaweight_PB(msa)                                != eslOK) esl_fatal(msg);
+      if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg);
+      if (esl_msa_Textize(msa)                                 != eslOK) esl_fatal(msg);
+    }
+  return eslOK;
+}
+
+static int
+utest_BLOSUM(ESL_ALPHABET *abc, ESL_MSA *msa, double maxid, double *expect)
+{
+  char *msg = "BLOSUM weights unit test failure";
+
+  if (esl_msaweight_BLOSUM(msa, maxid)                     != eslOK) esl_fatal(msg);
+  if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg);
+  
+  if (abc != NULL) 
+    {
+      if (esl_msa_Digitize(abc, msa, NULL)                     != eslOK) esl_fatal(msg);
+      if (esl_msaweight_BLOSUM(msa, maxid)                     != eslOK) esl_fatal(msg);
+      if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg);
+      if (esl_msa_Textize(msa)                                 != eslOK) esl_fatal(msg);
+    }
+  return eslOK;
+}
+#endif /*eslMSAWEIGHT_TESTDRIVE*/
+/*-------------------- end, unit tests  -------------------------*/
+
+
+
+
+
+/*****************************************************************
+ * 3. Test driver
+ *****************************************************************/
+#ifdef eslMSAWEIGHT_TESTDRIVE
+/* gcc -g -Wall -o test -L. -I. -DeslMSAWEIGHT_TESTDRIVE esl_msaweight.c -leasel -lm
+ * ./test
+ */
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msaweight.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_ALPHABET *aa_abc = NULL,
+               *nt_abc = NULL;
+  ESL_MSA      *msa1   = NULL,
+               *msa2   = NULL, 
+               *msa3   = NULL,
+               *msa4   = NULL,
+               *msa5   = NULL;
+  double uniform[5] = { 1.0, 1.0, 1.0, 1.0, 1.0 };
+  double wgt2[5]    = { 0.833333, 0.833333, 0.833333, 0.833333, 1.66667 }; /* GSC, PB give same answer */
+  double gsc3[4]    = { 1.125000, 0.875000, 0.875000, 1.125000 };
+  double pb3[4]     = { 1.066667, 1.066667, 0.800000, 1.066667 };
+  double blosum3[4] = { 1.333333, 0.666667, 0.666667, 1.333333 };
+  double gsc4[4]    = { 0.760870, 0.760870, 1.086957, 1.391304 };
+  double pb4[4]     = { 0.800000, 0.800000, 1.000000, 1.400000 };
+  double blosum4[4] = { 0.666667, 0.666667, 1.333333, 1.333333 };
+  
+  if ((aa_abc = esl_alphabet_Create(eslAMINO)) == NULL)  esl_fatal("failed to create amino alphabet");
+  if ((nt_abc = esl_alphabet_Create(eslDNA))   == NULL)  esl_fatal("failed to create DNA alphabet");
+
+  /* msa1: all sequences identical. Any weighting method should assign uniform weights.
+   * msa2: "contrived" example of [Henikoff94b]. "Correct" solution is 1==2, 3==4, and 5==2x other weights.
+   * msa3: the "nitrogenase segments" example of [Henikoff94b].
+   * msa4: alignment that makes the same distances as Figure 4 from [Gerstein94]
+   * msa5: gap pathology. no information here, so weighting methods should resort to uniform weights.
+   */
+  if ((msa1 = esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nseq1 AAAAA\nseq2 AAAAA\nseq3 AAAAA\nseq4 AAAAA\nseq5 AAAAA\n//\n", 
+				       eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal("msa 1 creation failed");
+  if ((msa2 = esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nseq1 AAAAA\nseq2 AAAAA\nseq3 CCCCC\nseq4 CCCCC\nseq5 TTTTT\n//\n",
+				       eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal("msa 2 creation failed");
+  if ((msa3 = esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nNIFE_CLOPA GYVGS\nNIFD_AZOVI GFDGF\nNIFD_BRAJA GYDGF\nNIFK_ANASP GYQGG\n//\n",
+				       eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal("msa 3 creation failed");
+  if ((msa4 = esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nA  AAAAAAAAAA\nB  TTAAAAAAAA\nC  ATAAAACCCC\nD  GGGAAGGGGG\n//\n",
+				       eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal("msa 4 creation failed");
+  if ((msa5 = esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nA  A----\nB  -C---\nC  --G--\nD  ---T-\nE  ----T\n//\n",
+				       eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal("msa 5 creation failed");
+
+  utest_GSC(aa_abc, msa1, uniform);
+  utest_GSC(nt_abc, msa1, uniform);
+  utest_GSC(aa_abc, msa2, wgt2);
+  utest_GSC(nt_abc, msa2, wgt2);
+  utest_GSC(aa_abc, msa3, gsc3);
+  /* no nt test on msa3: it's protein-only */
+  utest_GSC(aa_abc, msa4, gsc4);
+  utest_GSC(nt_abc, msa4, gsc4);
+  utest_GSC(aa_abc, msa5, uniform);
+  utest_GSC(aa_abc, msa5, uniform);
+
+  utest_PB(aa_abc, msa1, uniform);
+  utest_PB(nt_abc, msa1, uniform);
+  utest_PB(aa_abc, msa2, wgt2);
+  utest_PB(nt_abc, msa2, wgt2);
+  utest_PB(aa_abc, msa3, pb3);
+  /* no nt test on msa3: it's protein-only */
+  utest_PB(aa_abc, msa4, pb4);
+  utest_PB(nt_abc, msa4, pb4);
+  utest_PB(aa_abc, msa5, uniform);
+  utest_PB(nt_abc, msa5, uniform);
+
+  utest_BLOSUM(aa_abc, msa1, 0.62, uniform);
+  utest_BLOSUM(nt_abc, msa1, 0.62, uniform);
+  utest_BLOSUM(aa_abc, msa2, 0.62, wgt2);
+  utest_BLOSUM(nt_abc, msa2, 0.62, wgt2);
+  utest_BLOSUM(aa_abc, msa3, 0.62, blosum3);
+  /* no nt test on msa3: it's protein-only */
+  utest_BLOSUM(aa_abc, msa4, 0.62, blosum4);
+  utest_BLOSUM(nt_abc, msa4, 0.62, blosum4);
+  utest_BLOSUM(aa_abc, msa5, 0.62, uniform);
+  utest_BLOSUM(nt_abc, msa5, 0.62, uniform);
+
+  /* BLOSUM weights have the peculiar property of going flat at maxid=0.0 (everyone
+   * clusters) or maxid=1.0 (nobody clusters).
+   */
+  utest_BLOSUM(aa_abc, msa4, 0.0,  uniform);
+  utest_BLOSUM(aa_abc, msa4, 1.0,  uniform);
+
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_msa_Destroy(msa3);
+  esl_msa_Destroy(msa4);
+  esl_msa_Destroy(msa5);
+  esl_alphabet_Destroy(aa_abc);
+  esl_alphabet_Destroy(nt_abc);
+  exit(0);
+}
+#endif /*eslMSAWEIGHT_TESTDRIVE*/
+/*-------------------- end, test driver  -------------------------*/
+
+
+
+
+
+/*****************************************************************
+ * 4. Regression tests against squid
+ *****************************************************************/
+#ifdef eslMSAWEIGHT_REGRESSION
+/* Verify same results as SQUID.
+ * To compile:
+      gcc -g -Wall -o msaweight_regression -I. -L. -L ~/src/squid -I ~/src/squid -DeslMSAWEIGHT_REGRESSION \
+          esl_msaweight.c esl_msacluster.c -leasel -lsquid -lm
+ * To run: 
+ *     ./regression <MSA file>
+ *     
+ * It's essential to recompile esl_msacluster under the eslMSAWEIGHT_REGRESSION flag
+ * too, because some squid compatibility code needs to get compiled in.
+ *
+ * Script for regression testing on Pfam:
+ *     ./regression -q  --maxN 4000 /misc/data0/databases/Pfam/Pfam-A.full
+ *     ./regression --blosum -q  /misc/data0/databases/Pfam/Pfam-A.full
+ *     ./regression --pb -q  /misc/data0/databases/Pfam/Pfam-A.full
+ */
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msaweight.h"
+#include "esl_vectorops.h"
+
+#include "squidconf.h"
+#include "squid.h"
+
+#define WGROUP "--blosum,--gsc,--pb"
+
+static ESL_OPTIONS options[] = {
+    /* name     type         deflt   env   rng   togs    req      incmpt   help                          docgrp */
+  { "-h",       eslARG_NONE, FALSE,  NULL, NULL, NULL,   NULL,      NULL, "show help and usage",             0 },
+  { "-q",       eslARG_NONE, FALSE,  NULL, NULL, NULL,   NULL,      NULL, "run quiet, only report problems", 0 },
+  { "--blosum", eslARG_NONE, FALSE,  NULL, NULL, WGROUP, NULL,      NULL, "use BLOSUM weights",              0 },
+  { "--gsc",    eslARG_NONE,"default",NULL,NULL, WGROUP, NULL,      NULL, "use GSC weights",                 0 },
+  { "--pb",     eslARG_NONE, FALSE,  NULL, NULL, WGROUP, NULL,      NULL, "use position-based weights",      0 },
+  { "--id",     eslARG_REAL, "0.62",NULL,"0<=x<=1",NULL,"--blosum", NULL, "id threshold for --blosum",       0 },  
+  { "--tol",    eslARG_REAL, "0.01",NULL,"0<=x<=1",NULL, NULL,      NULL, "fractional tolerance for wgt match", 0 },  
+  { "--maxN",   eslARG_INT,    "0",  NULL,"n>=0",  NULL,  NULL,     NULL, "skip alignments w/ > <n> seqs",   0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+static char usage[] = "Usage: ./regression [-options] <msa_file>";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go;
+  char         *msafile;
+  ESL_MSAFILE  *afp;
+  ESL_MSA      *msa;
+  float        *sqd;
+  int          status;
+  int          nbad;
+  int          nali    = 0;
+  int          nbadali = 0;
+  int          nwgt    = 0;
+  int          nbadwgt = 0;
+  int i;
+  int be_quiet;
+  int do_gsc;
+  int do_pb;
+  int do_blosum;
+  double maxid;
+  double tol;
+  int    maxN;
+
+  /* Process command line
+   */
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal("failed to parse cmd line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) esl_fatal("failed to parse cmd line: %s\n", go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") == TRUE) {
+    puts(usage); 
+    puts("\n  where options are:");
+    esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2=indentation; 80=width */
+    return 0;
+  }
+  be_quiet  = esl_opt_GetBoolean(go, "-q");
+  do_blosum = esl_opt_GetBoolean(go, "--blosum");
+  do_gsc    = esl_opt_GetBoolean(go, "--gsc");
+  do_pb     = esl_opt_GetBoolean(go, "--pb");
+  maxid     = esl_opt_GetReal   (go, "--id");
+  tol       = esl_opt_GetReal   (go, "--tol");
+  maxN      = esl_opt_GetInteger(go, "--maxN");
+  if (esl_opt_ArgNumber(go) != 1) {
+    puts("Incorrect number of command line arguments.");
+    puts(usage);
+    return 1;
+  }
+  msafile = esl_opt_GetArg(go, 1);
+  esl_getopts_Destroy(go);
+
+  /* Weight one or more alignments from input file
+   */
+  if ((status = esl_msafile_Open(NULL, msafile, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+
+  while ( (status = esl_msafile_Read(afp, &msa)) != eslEOF)
+    {
+      if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+
+      if (maxN > 0 && msa->nseq > maxN) { esl_msa_Destroy(msa); continue; }
+
+      nali++;
+      nwgt += msa->nseq;
+      ESL_ALLOC(sqd, sizeof(float) * msa->nseq);
+
+      if (do_gsc) {
+	esl_msaweight_GSC(msa);
+	GSCWeights(msa->aseq, msa->nseq, msa->alen, sqd);
+      } else if (do_pb) {
+	esl_msaweight_PB(msa);
+	PositionBasedWeights(msa->aseq, msa->nseq, msa->alen, sqd);
+      } else if (do_blosum) {
+	esl_msaweight_BLOSUM(msa, maxid);
+	BlosumWeights(msa->aseq, msa->nseq, msa->alen, maxid, sqd);
+	/* workaround SQUID bug: BLOSUM weights weren't renormalized to sum to nseq. */
+	esl_vec_FNorm (sqd, msa->nseq);
+	esl_vec_FScale(sqd, msa->nseq, (float) msa->nseq);	
+      }
+
+      if (! be_quiet) {
+	for (i = 0; i < msa->nseq; i++)
+	  fprintf(stdout, "%-20s  %.3f  %.3f\n",
+		  msa->sqname[i], msa->wgt[i], sqd[i]);
+      }
+	
+      nbad = 0;
+      for (i = 0; i < msa->nseq; i++)
+	if (esl_DCompare((double) sqd[i], msa->wgt[i], tol) != eslOK) 
+	  nbad++;
+      if (nbad > 0) nbadali++;
+      nbadwgt += nbad;
+
+      if (nbad > 0) printf("%-20s  :: alignment shows %d weights that differ (out of %d) \n", 
+			   msa->name, nbad, msa->nseq);
+
+      esl_msa_Destroy(msa);
+      free(sqd);
+    } 
+  esl_msafile_Close(afp);
+
+  if (nbadali == 0) 
+    printf("OK: all weights identical between squid and Easel in %d alignment(s)\n", nali);
+  else {
+    printf("%d of %d weights mismatched at (> %f fractional difference)\n",
+	   nbadwgt, nwgt, tol);
+    printf("involving %d of %d total alignments\n", nbadali, nali);
+  }
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+#endif /* eslMSAWEIGHT_REGRESSION */
+/*------------------ end, regression tests ----------------------*/
+
+
+
+/*****************************************************************
+ * 5. Benchmark.
+ *****************************************************************/
+#ifdef eslMSAWEIGHT_BENCHMARK
+/* gcc -g -Wall -o benchmark -I. -L. -DeslMSAWEIGHT_BENCHMARK esl_msaweight.c -leasel -lm
+ * ./benchmark <MSA file>
+ *
+ * Script for benchmarks on Pfam:
+ *     ./benchmark --gsc --maxN 4000 /misc/data0/databases/Pfam/Pfam-A.full
+ *     ./benchmark --blosum          /misc/data0/databases/Pfam/Pfam-A.full
+ *     ./benchmark --pb              /misc/data0/databases/Pfam/Pfam-A.full
+ */
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msaweight.h"
+#include "esl_vectorops.h"
+#include "esl_stopwatch.h"
+
+#define WGROUP "--blosum,--gsc,--pb"
+
+static ESL_OPTIONS options[] = {
+    /* name     type         deflt   env   rng   togs    req      incmpt   help                          docgrp */
+  { "-h",       eslARG_NONE, FALSE,  NULL, NULL, NULL,   NULL,      NULL, "show help and usage",             0 },
+  { "--blosum", eslARG_NONE, FALSE,  NULL, NULL, WGROUP, NULL,      NULL, "use BLOSUM weights",              0 },
+  { "--gsc",    eslARG_NONE,"default",NULL,NULL, WGROUP, NULL,      NULL, "use GSC weights",                 0 },
+  { "--pb",     eslARG_NONE, FALSE,  NULL, NULL, WGROUP, NULL,      NULL, "use position-based weights",      0 },
+  { "--id",     eslARG_REAL, "0.62", NULL,"0<=x<=1",NULL,"--blosum",NULL, "id threshold for --blosum",       0 },  
+  { "--maxN",   eslARG_INT,    "0",  NULL,"n>=0",  NULL,  NULL,     NULL, "skip alignments w/ > <n> seqs",   0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+static char usage[] = "Usage: ./benchmark [-options] <msa_file>";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_STOPWATCH *w;
+  ESL_GETOPTS   *go;
+  char          *msafile;
+  ESL_MSAFILE   *afp;
+  ESL_MSA       *msa;
+  int            do_gsc;
+  int            do_pb;
+  int            do_blosum;
+  int            maxN;
+  double         maxid;
+  double         cpu;
+  int            status;
+
+  /* Process command line
+   */
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal("failed to parse cmd line: %s", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) esl_fatal("failed to parse cmd line: %s", go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") == TRUE) {
+    puts(usage); 
+    puts("\n  where options are:");
+    esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2=indentation; 80=width */
+    return 0;
+  }
+  do_blosum = esl_opt_GetBoolean(go, "--blosum");
+  do_gsc    = esl_opt_GetBoolean(go, "--gsc");
+  do_pb     = esl_opt_GetBoolean(go, "--pb");
+  maxid     = esl_opt_GetReal   (go, "--id");
+  maxN      = esl_opt_GetInteger(go, "--maxN");
+  if (esl_opt_ArgNumber(go) != 1) {
+    puts("Incorrect number of command line arguments.");
+    puts(usage);
+    return 1;
+  }
+  if ((msafile = esl_opt_GetArg(go, 1)) == NULL) esl_fatal("failed to parse cmd line: %s", go->errbuf);
+  esl_getopts_Destroy(go);
+
+  w = esl_stopwatch_Create();
+
+  /* Weight one or more alignments from input file
+   */
+  if ((status = esl_msafile_Open(NULL, msafile, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+
+  while ( (status = esl_msafile_Read(afp, &msa)) != eslEOF) 
+    {
+      if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+      if (maxN > 0 && msa->nseq > maxN) { esl_msa_Destroy(msa); continue; }
+
+      esl_stopwatch_Start(w);
+
+      if      (do_gsc) 	  esl_msaweight_GSC(msa);
+      else if (do_pb) 	  esl_msaweight_PB(msa);
+      else if (do_blosum) esl_msaweight_BLOSUM(msa, maxid);
+
+      esl_stopwatch_Stop(w);
+      cpu = w->user;
+      printf("%-20s %6d  %6d  %.3f\n", msa->name, msa->alen, msa->nseq, cpu);
+      esl_msa_Destroy(msa);
+    } 
+  esl_msafile_Close(afp);
+
+  esl_stopwatch_Destroy(w);
+  return eslOK;
+}
+#endif /* eslMSAWEIGHT_BENCHMARK */
+/*-------------------- end, benchmark  --------------------------*/
+
+
+
+
+/*****************************************************************
+ * 6. Statistics driver.
+ *****************************************************************/
+#ifdef eslMSAWEIGHT_STATS
+/* gcc -g -Wall -o stats -I. -L. -DeslMSAWEIGHT_STATS esl_msaweight.c -leasel -lm
+ * ./stats <MSA file>
+ *
+ * Script for weight statistics on Pfam:
+ *     ./stats --gsc --maxN 4000 /misc/data0/databases/Pfam/Pfam-A.full
+ *     ./stats --blosum          /misc/data0/databases/Pfam/Pfam-A.full
+ *     ./stats --pb              /misc/data0/databases/Pfam/Pfam-A.full
+ */
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msaweight.h"
+#include "esl_vectorops.h"
+
+#define WGROUP "--blosum,--gsc,--pb"
+
+static ESL_OPTIONS options[] = {
+    /* name     type         deflt   env   rng   togs    req      incmpt   help                          docgrp */
+  { "-h",       eslARG_NONE, FALSE,  NULL, NULL, NULL,   NULL,      NULL, "show help and usage",             0 },
+  { "--blosum", eslARG_NONE, FALSE,  NULL, NULL, WGROUP, NULL,      NULL, "use BLOSUM weights",              0 },
+  { "--gsc",    eslARG_NONE,"default",NULL,NULL, WGROUP, NULL,      NULL, "use GSC weights",                 0 },
+  { "--pb",     eslARG_NONE, FALSE,  NULL, NULL, WGROUP, NULL,      NULL, "use position-based weights",      0 },
+  { "--id",     eslARG_REAL, "0.62", NULL,"0<=x<=1",NULL,"--blosum",NULL, "id threshold for --blosum",       0 },  
+  { "--maxN",   eslARG_INT,    "0",  NULL,"n>=0",  NULL,  NULL,     NULL, "skip alignments w/ > <n> seqs",   0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+static char usage[] = "Usage: ./stats [-options] <msa_file>";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go;
+  char         *msafile;
+  ESL_MSAFILE  *afp;
+  ESL_MSA      *msa;
+  int           do_gsc;
+  int           do_pb;
+  int           do_blosum;
+  int           maxN;
+  double        maxid;
+  int           nsmall, nbig;
+  int           i;
+  int           status;
+
+  /* Process command line  */
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal("%s", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) esl_fatal("%s", go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") == TRUE){
+    puts(usage); 
+    puts("\n  where options are:");
+    esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2=indentation; 80=width */
+    return 0;
+  }
+  do_blosum = esl_opt_GetBoolean(go, "--blosum");
+  do_gsc    = esl_opt_GetBoolean(go, "--gsc");
+  do_pb     = esl_opt_GetBoolean(go, "--pb");
+  maxid     = esl_opt_GetReal   (go, "--id");
+  maxN      = esl_opt_GetInteger(go, "--maxN");
+  if (esl_opt_ArgNumber(go) != 1) {
+    puts("Incorrect number of command line arguments.");
+    puts(usage);
+    return 1;
+  }
+  if ((msafile = esl_opt_GetArg(go, 1)) == NULL) esl_fatal("%s", go->errbuf);
+  esl_getopts_Destroy(go);
+
+  /* Weight one or more alignments from input file
+   */
+  if ((status = esl_msafile_Open(NULL, msafile, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+
+  while ( (status = esl_msafile_Read(afp, &msa)) != eslEOF)
+    {
+      if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+      if (maxN > 0 && msa->nseq > maxN) { esl_msa_Destroy(msa); continue; }
+
+      if      (do_gsc) 	  esl_msaweight_GSC(msa);
+      else if (do_pb) 	  esl_msaweight_PB(msa);
+      else if (do_blosum) esl_msaweight_BLOSUM(msa, maxid);
+
+      for (nsmall = 0, nbig = 0, i = 0; i < msa->nseq; i++) {
+	if (msa->wgt[i] < 0.2) nsmall++;
+	if (msa->wgt[i] > 5.0) nbig++;
+      }
+
+      printf("%-20s  %5d %5d %8.4f  %8.4f  %5d  %5d\n", 
+	     msa->name, 
+	     msa->nseq, 
+	     msa->alen,
+	     esl_vec_DMin(msa->wgt, msa->nseq),
+	     esl_vec_DMax(msa->wgt, msa->nseq),
+	     nsmall,
+	     nbig);
+      esl_msa_Destroy(msa);
+    } 
+  esl_msafile_Close(afp);
+  return eslOK;
+}
+#endif /* eslMSAWEIGHT_STATS */
+/*---------------- end, statistics driver  ----------------------*/
+
+
+
+
+
+
+/*****************************************************************
+ * 7. Examples.
+ *****************************************************************/
+/* Example: Calculate GSC weights for an input MSA.
+ */
+#ifdef eslMSAWEIGHT_EXAMPLE
+/*::cexcerpt::msaweight_example::begin::*/
+/* To compile: gcc -g -Wall -o example -I. -L. -DeslMSAWEIGHT_EXAMPLE esl_msaweight.c -leasel -lm
+ *     To run: ./example <MSA file>
+ */
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msaweight.h"
+
+int main(int argc, char **argv)
+{
+  ESL_MSAFILE  *afp;
+  ESL_MSA      *msa;
+  int           i;
+  int           status;
+
+  if ( (status = esl_msafile_Open(NULL, argv[1], NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+  if ( (status = esl_msafile_Read(afp, &msa)) != eslOK)
+    esl_msafile_ReadFailure(afp, status);
+  esl_msafile_Close(afp);
+
+  esl_msaweight_GSC(msa);
+  
+  for (i = 0; i < msa->nseq; i++)
+    printf("%20s %f\n", msa->sqname[i], msa->wgt[i]);
+  
+  return 0;
+}
+/*::cexcerpt::msaweight_example::end::*/
+#endif /*eslMSAWEIGHT_EXAMPLE*/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msaweight.h b/esl_msaweight.h
new file mode 100644
index 0000000..6a62fbe
--- /dev/null
+++ b/esl_msaweight.h
@@ -0,0 +1,21 @@
+/* Sequence weighting algorithms.
+ * 
+ * SRE, Sun Nov  5 09:11:13 2006 [Janelia]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslMSAWEIGHT_INCLUDED
+#define eslMSAWEIGHT_INCLUDED
+
+#include "esl_msa.h"
+
+extern int esl_msaweight_GSC(ESL_MSA *msa);
+extern int esl_msaweight_PB(ESL_MSA *msa);
+extern int esl_msaweight_BLOSUM(ESL_MSA *msa, double maxid);
+extern int esl_msaweight_IDFilter(const ESL_MSA *msa, double maxid, ESL_MSA **ret_newmsa);
+
+
+#endif /*eslMSAWEIGHT_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_msaweight.tex b/esl_msaweight.tex
new file mode 100644
index 0000000..0e5c4df
--- /dev/null
+++ b/esl_msaweight.tex
@@ -0,0 +1,53 @@
+The \eslmod{msaweight} module implements different \emph{ad hoc}
+sequence weighting algorithms, for compensating for overrepresentation
+in multiple sequence alignments.
+
+A multiple alignment often includes similar, even identical copies of
+sequences; the same sequence is often deposited in the databases more
+than once, and sequences from several closely related species are
+usually available. Thus relying on raw residue frequencies observed in
+multiple alignments is a flawed strategy, just as Wittgenstein
+wouldn't trust a consensus of two copies of his morning paper.
+ 
+The functions in the \eslmod{msaweight} API are summarized in
+Table~\ref{tbl:msa_api}. 
+
+% TODO: Should implement more algorithms.
+
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\hyperlink{func:esl_msaweight_GSC()}{\ccode{esl\_msaweight\_GSC()}} & GSC weights.\\
+\hyperlink{func:esl_msaweight_PB()}{\ccode{esl\_msaweight\_PB()}} & PB (position-based) weights.\\
+\hyperlink{func:esl_msaweight_BLOSUM()}{\ccode{esl\_msaweight\_BLOSUM()}} & BLOSUM weights.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{Functions in the \eslmod{msaweight} API. Requires the Easel core
+and phylogeny modules.}
+\label{tbl:msaweight_api}
+\end{table}
+
+\subsection{Example of using the msaweight API}
+
+An example of reading in a multiple alignment and calculating weights
+for its sequences using the GSC algorithm:
+
+\input{cexcerpts/msaweight_example}
+
+The new weights are stored internally in the \ccode{ESL\_MSA} object,
+and (as the example shows) can be accessed in its array
+\ccode{msa->wgt[0..nseq-1]}.
+
+\subsection{Pros and cons of different algorithms}
+
+% TODO: Computational complexity
+
+% TODO: Figures showing time, memory for varying N, L.
+
+% TODO: Eventually, benchmarks on HMMER: are these methods actually
+% different?
+
+
diff --git a/esl_normal.c b/esl_normal.c
new file mode 100644
index 0000000..f091a90
--- /dev/null
+++ b/esl_normal.c
@@ -0,0 +1,348 @@
+/* Statistical routines for normal (Gaussian) distributions.
+ * 
+ * Contents:
+ *   1. Densities and distributions
+ *   2. Generic API, interface to histogram module
+ *   3. Unit tests
+ *   4. Test driver
+ *   5. Example
+ *   
+ * To-do:
+ *   - incomplete API, by the standards of other Easel stats modules.
+ *     Compare esl_gumbel, for example.
+ *
+ *****************************************************************
+ * Crib notes.
+ *  
+ * The error function is defined as:    erf(x)  = 2/sqrt(pi) \int_0^x e^{-t^2} dt
+ * The complementary error function is: erfc(x) = 1 - erf(x)
+ * The normal CDF in terms of erf:      CDF(z)  = 1/2 + 1/2 erf(z/sqrt(2))
+ * erf(x) is an "odd function":         erf(x)  = -erf(-x)
+ * 
+ * lim_{x -> -inf} erf(x) = -1;   erf(0)  = 0;     lim_{x -> +inf} erf(x) =  1        
+ * lim_{x -> -inf} erfc(x) = 2    erfc(0) = 1;     lim_{x -> +inf} erfc(x) = 0;
+ * 
+ * erf(), erfc() in double precision are in the C99 standard.  Some
+ * systems (cough, Microsoft, cough) are not necessarily C99 compliant
+ * and may not provide erf(), erfc(). But Easel will compile in an
+ * alternative, esl_stats_erfc(), if needed.
+ */
+#include "esl_config.h"
+
+#include <math.h>
+
+#include "easel.h"
+#include "esl_normal.h"
+#include "esl_stats.h"
+
+
+/*****************************************************************
+ * 1. Densities and distributions.
+ *****************************************************************/
+
+/* Function:  esl_normal_pdf()
+ * Incept:    SRE, Tue Nov 21 14:15:43 2006 [Janelia]
+ *
+ * Purpose:   Calculates the normal (Gaussian) probability density
+ *            function $P(X=x)$ for a normal distribution, given
+ *            value <x>, mean <mu>, and standard deviation <sigma>.
+ * 
+ * Xref:      STL11/94.
+ */
+double 
+esl_normal_pdf(double x, double mu, double sigma)
+{
+  double z;
+  
+  z = (x - mu) / sigma;
+  return  exp(-z*z*0.5) / (sigma * sqrt(2. * eslCONST_PI));
+}
+
+/* Function:  esl_normal_logpdf()
+ * Incept:    SRE, Tue Jan  9 20:43:52 2007 [Casa de Gatos]
+ *
+ * Purpose:   Calculates the log of the probabiility density function
+ *            for the normal (Gaussian), $\log P(X=x)$, given value
+ *            <x>, mean <mu>, and standard deviation <sigma>.
+ *
+ * Xref:      STL11/94.
+ */
+double
+esl_normal_logpdf(double x, double mu, double sigma)
+{
+  double z;
+
+  z = (x - mu) / sigma;
+  return  (-z*z*0.5) - log(sigma) - log(sqrt(2.*eslCONST_PI));
+}
+
+/* Function:  esl_normal_cdf()
+ * Incept:    SRE, Tue Jan  9 20:59:04 2007 [Casa de Gatos]
+ *
+ * Purpose:   Calculates the cumulative distribution function for the
+ *            normal, $P(X \leq x)$, given value <x>, mean <mu>,
+ *            and standard deviation <sigma>.
+ *
+ * Xref:      STL11/94.
+ */
+double
+esl_normal_cdf(double x, double mu, double sigma)
+{
+  double z;
+
+  /* for z -> -inf, CDF->0, so we rearrange in order to avoid 1 - 1 
+   * cancellation error that arises in 0.5 * (1 + erf(z)) version.
+   * This way, esl_normal_cdf() returns full double-precision dynamic
+   * range.
+   */
+  z = (x - mu) / sigma;
+  return 0.5 * erfc(-1. * z / sqrt(2.));
+}
+
+/* Function:  esl_normal_surv()
+ * Incept:    SRE, Thu Jan 11 20:16:23 2007 [Casa de Gatos]
+ *
+ * Purpose:   Calculates the survivor function, $P(X>x)$ (that is,
+ *            1-CDF, the right tail probability mass) for a normal
+ *            distribution, given value <x>, mean <mu>, and standard
+ *            deviation <sigma>.
+ *
+ * Xref:      STL11/94
+ */
+double
+esl_normal_surv(double x, double mu, double sigma)
+{
+  double z = (x - mu) / sigma;
+
+  /* As above, we avoid the use of 1-CDF or the more
+   * common 1/2 (1 - erf(z)) version because we need to
+   * avoid 1-1 cancellation error.
+   */
+  return 0.5 * erfc( z / sqrt(2.));
+}
+
+
+/*****************************************************************
+ * 2. Generic API, interface to histogram module
+ *****************************************************************/
+
+double 
+esl_normal_generic_pdf(double x, void *params)
+{
+  double *v = (double *) params;
+  return esl_normal_pdf(x, v[0], v[1]);
+}
+
+double
+esl_normal_generic_cdf(double x, void *params)
+{
+  double *v = (double *) params;
+  return esl_normal_cdf(x, v[0], v[1]);
+}
+
+double
+esl_normal_generic_surv(double x, void *params)
+{
+  double *v = (double *) params;
+  return esl_normal_surv(x, v[0], v[1]);
+}
+
+
+/*****************************************************************
+ * 3. Unit tests.
+ *****************************************************************/
+#ifdef eslNORMAL_TESTDRIVE
+static int
+utest_pdf(void)
+{
+  char   msg[] = "gaussian PDF unit test failed";
+  double mu    = 0.;
+  double sigma = 1.;
+  double delta = 0.01;
+  double x;
+  double newpdf, lastpdf;
+  double cdf;
+
+  /* One way to test the PDF is to integrate the CDF by quadrature, which should give us ~ 1. */
+  for (cdf = 0., x = -40.; x < 40.; x += delta)
+    cdf += esl_normal_pdf(x, mu, sigma) * delta;
+  if (esl_DCompare(cdf, 1.0, 1e-9) != eslOK)  esl_fatal(msg);
+
+  /* We also verify that we're using double-precision range */
+  x = 0.;
+  newpdf = esl_normal_pdf(x, mu, sigma);
+  do {
+    x += 1.;
+    lastpdf = newpdf;
+    newpdf  = esl_normal_pdf(x, mu, sigma);
+  } while (newpdf > 0.);
+  /* If denormals flush to zero, we reach x=38; lastpdf = 2.12001e-298.
+   * With denormals, we reach one more step, x=39; lastpdf = 1.09722e-314.
+   * icc enables flush-to-zero at all -O levels, and gcc does not.
+   */
+  if (lastpdf > 1e-297 || x < 38.) esl_fatal(msg);
+  return eslOK;
+}
+
+static int
+utest_logpdf(void)
+{
+  char   msg[] = "gaussian log PDF unit test failed";
+  double mu    = 0.;
+  double sigma = 1.;
+  double delta = 0.01;
+  double x;
+  double old, new;
+  double cdf;
+  
+  /* One way to test the log PDF is to integrate the CDF by quadrature, which should give us ~ 1. */
+  for (cdf = 0., x = -40.; x < 40.; x += delta)
+    cdf += exp(esl_normal_logpdf(x, mu, sigma)) * delta;
+  if (esl_DCompare(cdf, 1.0, 1e-9) != eslOK) esl_fatal(msg);
+
+  /* Another way is to compare exp(logpdf) to the PDF */
+  for (x = -20.; x < 20.; x += delta)
+    {
+      old = esl_normal_pdf       (x, mu, sigma);
+      new = exp(esl_normal_logpdf(x, mu, sigma));
+      if (esl_DCompare(old, new, 1e-9) != eslOK) esl_fatal(msg);
+    }
+
+  return eslOK;
+}
+
+static int
+utest_cdf(void)
+{
+  char   msg[] = "gaussian CDF unit test failed";
+  double mu    = 0.;
+  double sigma = 1.;
+  double x;
+
+  x = esl_normal_cdf(mu, mu, sigma);
+  if (esl_DCompare(x, 0.5, 1e-9) != eslOK) esl_fatal(msg);
+
+  x = esl_normal_cdf(99., mu, sigma);
+  if (esl_DCompare(x, 1.0, 1e-9) != eslOK) esl_fatal(msg);
+
+  x = esl_normal_cdf(-99., mu, sigma);
+  if (esl_DCompare(x, 0.0, 1e-9) != eslOK) esl_fatal(msg);
+
+  x = esl_normal_cdf(-30., mu, sigma);
+  if (x > 1e-100 || x == 0.) esl_fatal(msg);
+
+  return eslOK;
+}
+
+
+static int
+utest_surv(void)
+{
+  char   msg[] = "gaussian survival unit test failed";
+  double mu    = 0.;
+  double sigma = 1.;
+  double x;
+
+  x = esl_normal_surv(mu, mu, sigma);
+  if (esl_DCompare(x, 0.5, 1e-9) != eslOK) esl_fatal(msg);
+
+  x = esl_normal_surv(-99., mu, sigma);
+  if (esl_DCompare(x, 1.0, 1e-9) != eslOK) esl_fatal(msg);
+
+  x = esl_normal_surv(99., mu, sigma);
+  if (esl_DCompare(x, 0.0, 1e-9) != eslOK) esl_fatal(msg);
+
+  x = esl_normal_surv(30., mu, sigma);
+  if (x > 1e-100 || x == 0.) esl_fatal(msg);
+
+  return eslOK;
+}
+#endif /*eslNORMAL_TESTDRIVE*/
+
+
+
+
+/*****************************************************************
+ * 4. Test driver.
+ *****************************************************************/
+#ifdef eslNORMAL_TESTDRIVE
+/* Compile:
+   gcc -g -Wall -I. -L. -o esl_normal_utest -DeslNORMAL_TESTDRIVE esl_normal.c -leasel -lm
+*/
+#include <stdio.h>
+#include <math.h>
+#include "easel.h"
+#include "esl_normal.h"
+
+int
+main(int argc, char **argv)
+{
+  utest_pdf();
+  utest_logpdf();
+  utest_cdf(); 
+  utest_surv();
+
+  return eslOK;
+}
+#endif /*eslNORMAL_TESTDRIVE*/
+
+/*****************************************************************
+ * 5. Example.
+ *****************************************************************/
+
+#ifdef eslNORMAL_EXAMPLE
+/* Print Gaussian distribution(s) in xmgrace XY set format 
+   gcc -g -Wall -I. -L. -o esl_normal_example -DeslNORMAL_EXAMPLE esl_normal.c -leasel -lm
+ */
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_normal.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",    0 },
+  { "--mean",    eslARG_REAL,   "0.0",  NULL, NULL,  NULL,  NULL, NULL, "mean of normal distribution",             0 },
+  { "--sd",      eslARG_REAL,   "1.0",  NULL, NULL,  NULL,  NULL, NULL, "s.d. of normal distribution",             0 },
+  { "--min",     eslARG_REAL,  "-10.0", NULL, NULL,  NULL,  NULL, NULL, "minimum for xaxis",                       0 },
+  { "--max",     eslARG_REAL,   "10.0", NULL, NULL,  NULL,  NULL, NULL, "maximum for xaxis",                       0 },
+  { "--step",    eslARG_REAL,    "1.0", NULL, NULL,  NULL,  NULL, NULL, "step size for xaxis",                     0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "output a Gaussian histogram";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go        = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  double        minx      = esl_opt_GetReal(go, "--min");
+  double        maxx      = esl_opt_GetReal(go, "--max");
+  double        xstep     = esl_opt_GetReal(go, "--step");
+  double        mean      = esl_opt_GetReal(go, "--mean");
+  double        sd        = esl_opt_GetReal(go, "--sd");
+  double        x;
+  double        val;
+
+  for (x = minx; x < maxx; x += xstep)
+    {
+      val = esl_normal_logpdf(x, mean, sd) * xstep; /* replace w/ whatever you want to test drive */
+      printf("%f %g\n", x, val);
+    }
+  printf("&\n"); 
+
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslNORMAL_EXAMPLE*/  
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_normal.h b/esl_normal.h
new file mode 100644
index 0000000..1e35814
--- /dev/null
+++ b/esl_normal.h
@@ -0,0 +1,22 @@
+/* Statistical routines for normal distributions
+ * 
+ * SRE, Tue Nov 21 14:29:02 2006 [Janelia]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslNORMAL_INCLUDED
+#define eslNORMAL_INCLUDED
+
+extern double esl_normal_pdf   (double x, double mu, double sigma);
+extern double esl_normal_logpdf(double x, double mu, double sigma);
+extern double esl_normal_cdf   (double x, double mu, double sigma);
+extern double esl_normal_surv  (double x, double mu, double sigma);
+
+extern double esl_normal_generic_pdf (double x, void *params);
+extern double esl_normal_generic_cdf (double x, void *params);
+extern double esl_normal_generic_surv(double x, void *params);
+
+#endif /*eslNORMAL_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_normal.tex b/esl_normal.tex
new file mode 100644
index 0000000..d4bc1fd
--- /dev/null
+++ b/esl_normal.tex
@@ -0,0 +1,24 @@
+
+\begin{tabular}{lcll}\hline
+Variate    & $x$         & \ccode{double} & $ -\infty < x < \infty$ \\
+Location   & $\mu$       & \ccode{double} & $-\infty < \mu < \infty$\\
+Scale      & $\sigma$    & \ccode{double} & $\sigma > 0$ \\ 
+\hline
+\end{tabular}
+
+The probability density function (PDF) is:
+
+\begin{equation}
+PDF = P(X=x) =  \frac{1}{\sigma \sqrt{2\pi}} e^{\frac{-(x-\mu)^2}{2\sigma^2}}.
+\end{equation}
+
+The cumulative distribution function (CDF) does not have a convenient
+closed-form expression. It is derived numerically in terms of the
+error function, $\mbox{erf}()$:
+
+\begin{equation}
+CDF = P(X<x) =  \frac{1}{2} + \frac{1}{2} erf(\frac{x - \mu}{\sigma \sqrt{2}}).
+\end{equation}
+
+
+
diff --git a/esl_paml.c b/esl_paml.c
new file mode 100644
index 0000000..a672c9d
--- /dev/null
+++ b/esl_paml.c
@@ -0,0 +1,184 @@
+/* PAML interface.
+ * 
+ *   "Phylogenetic Analysis by Maximum Likelihood"
+ *   Ziheng Yang
+ *   http://abacus.gene.ucl.ac.uk/software/paml.html
+ *   [Yang97]
+ * 
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_vectorops.h"
+#include "esl_dmatrix.h"
+#include "esl_fileparser.h"
+#include "esl_paml.h"
+
+/* Function:  esl_paml_ReadE()
+ * Incept:    SRE, Fri Jul  9 09:27:24 2004 [St. Louis]
+ *
+ * Purpose:   Read an amino acid rate matrix in PAML format from stream
+ *            <fp>. Return it in two pieces: the symmetric E
+ *            exchangeability matrix in <E>, and the stationary
+ *            probability vector $\pi$ in <pi>.
+ *            Caller provides the memory for both <E> and <pi>.  <E>
+ *            is a $20 \times 20$ matrix allocated as
+ *            <esl_dmatrix_Create(20, 20)>. <pi> is an array with
+ *            space for at least 20 doubles.
+ *            
+ *            The <E> matrix is symmetric for off-diagonal elements:
+ *            $E_{ij} = E_{ij}$ for $i \neq j$.  The on-diagonal
+ *            elements $E_{ii}$ are not valid and should not be
+ *            accessed.  (They are set to zero.)
+
+ *            The rate matrix will later be obtained from <E>
+ *            and <pi> as 
+ *                $Q_{ij} = E_{ij} \pi_j$ for $i \neq j$ 
+ *            and
+ *                $Q_{ii} = -\sum_{j \neq i} Q_{ij}$ 
+ *            then scaled to units of one
+ *            substitution/site; see <esl_ratemx_E2Q()> and
+ *            <esl_ratemx_ScaleTo()>.
+ *
+ *            Data file format: First 190 numbers are a
+ *            lower-triangular matrix E of amino acid
+ *            exchangeabilities $E_{ij}$. Next 20 numbers are the
+ *            amino acid frequencies $\pi_i$. Remainder of the
+ *            datafile is ignored.
+ *            
+ *            The alphabet order in the matrix and the frequency
+ *            vector is assumed to be "ARNDCQEGHILKMFPSTWYV"
+ *            (alphabetical by three-letter code), which appears to be
+ *            PAML's default order. This is transformed to Easel's
+ *            "ACDEFGHIKLMNPQRSTVWY" (alphabetical by one-letter code)
+ *            in the $E_{ij}$ and $\pi_i$ that are returned.
+ *            
+ * Args:      fp   - open datafile for reading.
+ *            E    - RETURN: E matrix of amino acid exchangeabilities e_ij,
+ *                     symmetric (E_ij = E_ji),
+ *                     in Easel amino acid alphabet order A..Y.
+ *                     Caller provides appropriately allocated space.
+ *            pi   - RETURN: \pi_i vector of amino acid frequencies,
+ *                    in Easel amino acid alphabet order A..Y.
+ *                    Caller provides appropriately allocated space.
+ *
+ * Returns:   <eslOK> on success.
+ *            Returns <eslEOF> on premature end of file (parse failed), in which
+ *            case the contents of <E> and <pi> are undefined.
+ *            
+ * Throws:    <eslEMEM> on internal allocation failure,
+ *            and the contents of <E> and <pi> are undefined.
+ *
+ * Xref:      STL8/p.56.
+ */
+int
+esl_paml_ReadE(FILE *fp, ESL_DMATRIX *E, double *pi)
+{
+  int             status;
+  ESL_FILEPARSER *efp = NULL;
+  char           *tok;
+  int             i,j;
+  char           *pamlorder = "ARNDCQEGHILKMFPSTWYV";
+  char           *eslorder  = "ACDEFGHIKLMNPQRSTVWY";
+  int             perm[20];
+
+  if ((status =  esl_dmatrix_SetZero(E))                 != eslOK) goto ERROR;
+  esl_vec_DSet(pi, 20, 0.);
+
+  if ((efp =    esl_fileparser_Create(fp))               == NULL)  goto ERROR;
+  if ((status = esl_fileparser_SetCommentChar(efp, '#')) != eslOK) goto ERROR;
+
+  /* Construct the alphabet permutation we need.
+   * perm[i] -> original row/column i goes to row/column perm[i]
+   */
+   for (i = 0; i < 20; i++)
+     perm[i] = (int) (strchr(eslorder, pamlorder[i]) - eslorder);
+
+   /* Read the s_ij matrix data in, permuting as we go. */
+
+   for (i = 1; i < 20; i++)
+    for (j = 0; j < i; j++)
+      {
+	if ((status = esl_fileparser_GetToken(efp, &tok, NULL)) != eslOK) goto ERROR;
+	E->mx[perm[i]][perm[j]] = atof(tok);
+	E->mx[perm[j]][perm[i]] = E->mx[perm[i]][perm[j]];
+      }
+
+   /* Read the pi_i vector in, permuting as we read. */
+  for (i = 0; i < 20; i++)
+    {
+      if ((status = esl_fileparser_GetToken(efp, &tok, NULL)) != eslOK) goto ERROR;
+      pi[perm[i]] = atof(tok);
+    }
+
+  esl_fileparser_Destroy(efp);
+  return eslOK;
+
+ ERROR:
+  if (efp != NULL) esl_fileparser_Destroy(efp);
+  return status;
+}
+
+
+/*****************************************************************
+ * Utility: reformat a PAML file to a static vector
+ *****************************************************************/
+#ifdef eslPAML_UTILITY1
+
+/* gcc -g -Wall -o utility -I. -L. -DeslPAML_UTILITY1 esl_paml.c -leasel -lm
+ */
+#include "easel.h"
+#include "esl_dmatrix.h"
+#include "esl_paml.h"
+
+int 
+main(int argc, char **argv)
+{
+  char        *filename = argv[1];
+  FILE        *fp       = NULL;
+  ESL_DMATRIX *E        = NULL;
+  double      *pi       = NULL;
+  int          i,j,n;
+
+  E = esl_dmatrix_Create(20, 20);
+  pi = malloc(20 * sizeof(double));
+  if ((fp = fopen(filename, "r")) == NULL) esl_fatal("open failed");
+  if (esl_paml_ReadE(fp, E, pi) != eslOK)  esl_fatal("parse failed");
+
+  n = 1;
+  for (i = 1; i < 20; i++)
+    for (j = 0; j < i; j++)
+      {
+	printf("%8.6f, ", E->mx[i][j]);
+	if (n++ == 10) { puts(""); n=1; }
+      }
+  
+  puts("");
+
+  n = 1;
+  for (i = 0; i < 20; i++)
+    {
+      printf("%8.6f, ", pi[i]);
+      if (n++ == 10) { puts(""); n=1; }
+    }
+  
+  fclose(fp);
+  free(pi);
+  esl_dmatrix_Destroy(E);
+  return 0;
+}
+
+#endif /*eslPAML_UTILITY1*/
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
diff --git a/esl_paml.h b/esl_paml.h
new file mode 100644
index 0000000..2e143c3
--- /dev/null
+++ b/esl_paml.h
@@ -0,0 +1,25 @@
+/* PAML interface
+ *
+ *   "Phylogenetic Analysis by Maximum Likelihood"
+ *   Ziheng Yang
+ *   http://abacus.gene.ucl.ac.uk/software/paml.html
+ *   [Yang97]
+ * 
+ *           incept: SRE, Tue Jul 13 13:20:08 2004 [St. Louis]
+ * upgrade to Easel: SRE, Thu Mar  8 13:26:20 2007 [Janelia]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslPAML_INCLUDED
+#define eslPAML_INCLUDED
+
+#include <stdio.h>
+#include <esl_dmatrix.h>
+
+extern int esl_paml_ReadE(FILE *fp, ESL_DMATRIX *E, double *pi);
+
+
+#endif /*eslPAML_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_paml.tex b/esl_paml.tex
new file mode 100644
index 0000000..88346de
--- /dev/null
+++ b/esl_paml.tex
@@ -0,0 +1,4 @@
+The \eslmod{paml} module implements support for reading certain data
+files from Ziheng Yang's PAML software suite \citep{Yang97}.
+
+
diff --git a/esl_random.c b/esl_random.c
new file mode 100644
index 0000000..d3022e2
--- /dev/null
+++ b/esl_random.c
@@ -0,0 +1,1279 @@
+/* Portable, threadsafe random number generators.
+ * Provides both a fast generator and a strong generator.
+ *
+ *  1. The ESL_RANDOMNESS object.
+ *  2. The generators, esl_random().
+ *  3. Debugging/development tools.
+ *  4. Other fundamental sampling (including Gaussian, gamma).
+ *  5. Multinomial sampling from discrete probability n-vectors.
+ *  6. Benchmark driver
+ *  7. Unit tests.
+ *  8. Test driver.
+ *  9. Example.
+ * 10. Copyright and license information.
+ *  
+ * See http://csrc.nist.gov/rng/ for the NIST random number
+ * generation test suite.
+ *
+ * It'd be nice if we had a debugging/unit testing mode in which
+ * esl_random() deliberately generated extreme values, such as 0 for
+ * example. Routines that use esl_random() can be sensitive to whether
+ * the interval 0,1 is open or closed. We should be able to test for
+ * problems with interval endpoints without taking enormous numbers of
+ * samples.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <time.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "easel.h"
+#include "esl_random.h"
+
+static uint32_t choose_arbitrary_seed(void);
+static uint32_t jenkins_mix3(uint32_t a, uint32_t b, uint32_t c);
+static uint32_t knuth              (ESL_RANDOMNESS *r);
+static uint32_t mersenne_twister   (ESL_RANDOMNESS *r);
+static void     mersenne_seed_table(ESL_RANDOMNESS *r, uint32_t seed);
+static void     mersenne_fill_table(ESL_RANDOMNESS *r);
+
+/*****************************************************************
+ *# 1. The <ESL_RANDOMNESS> object.
+ *****************************************************************/
+
+/* Function:  esl_randomness_Create()
+ * Synopsis:  Create the default strong random number generator.
+ *
+ * Purpose:   Create a random number generator using
+ *            a given random seed. The <seed> must be $\geq 0$.
+ *            
+ *            The default random number generator uses the Mersenne
+ *            Twister MT19937 algorithm \citep{Matsumoto98}.  It has a
+ *            period of $2^{19937}-1$, and equidistribution over
+ *            $2^{32}$ values.
+ *
+ *            If <seed> is $>0$, the random number generator is
+ *            reproducibly initialized with that seed.  Two RNGs
+ *            created with the same nonzero seed will give exactly the
+ *            same stream of pseudorandom numbers. This allows you to
+ *            make reproducible stochastic simulations, for example.
+ *            
+ *            If <seed> is 0, an arbitrary seed is chosen.
+ *            Internally, the arbitrary seed is produced by a
+ *            combination of the current <time()> and the process id
+ *            (if available; POSIX only). Two RNGs created with
+ *            <seed>=0 will very probably (but not assuredly) give
+ *            different streams of pseudorandom numbers. The true seed
+ *            can be retrieved from the <ESL_RANDOMNESS> object using
+ *            <esl_randomness_GetSeed()>.  The strategy used for
+ *            choosing the arbitrary seed is predictable, so it is
+ *            not secure in any sense, especially in the cryptographic
+ *            sense.
+ *            
+ * Args:      seed $>= 0$.
+ *
+ * Returns:   an initialized <ESL_RANDOMNESS *> on success.
+ *            Caller free's with <esl_randomness_Destroy()>.
+ *              
+ * Throws:    <NULL> on failure.
+ * 
+ * Xref:      SRE:STL8/p57.
+ *            SRE:J5/21:    Mersenne Twister.
+ */
+ESL_RANDOMNESS *
+esl_randomness_Create(uint32_t seed)
+{
+  ESL_RANDOMNESS *r      = NULL;
+  int             status;
+
+  ESL_ALLOC(r, sizeof(ESL_RANDOMNESS));
+  r->type = eslRND_MERSENNE;
+  r->mti  = 0;
+  r->x    = 0;
+  r->seed = 0;
+  esl_randomness_Init(r, seed);
+  return r;
+
+ ERROR:
+  return NULL;
+}
+
+/* Function:  esl_randomness_CreateFast()
+ * Synopsis:  Create the alternative fast generator.
+ *
+ * Purpose:   Same as <esl_randomness_Create()>, except that a simple
+ *            linear congruential generator (LCG) will be used.
+ *            
+ *            This is a low quality generator. Successive samples from
+ *            an LCG are correlated, and it has a relatively short
+ *            period. IT SHOULD NOT BE USED FOR SERIOUS
+ *            SIMULATIONS. Rather, it's a quick and dirty RNG where
+ *            you're sure that speed is more important than the
+ *            quality of your random numbers. For a high quality RNG,
+ *            use <esl_randomness_Create()> instead.
+ *            
+ *            This is a $(a=69069, c=1)$ LCG, with a period of
+ *            $2^{32}$. 
+ *            
+ *            It is about 20x faster to initialize the generator, and
+ *            about 25\% faster to sample each number, compared to the
+ *            default Mersenne Twister. (In most cases, this speed
+ *            differential is not worth the degradation in
+ *            quality. Since we made MT our default generator, the
+ *            speed advantage of the LCG essentially disappeared, so
+ *            in some sense this is legacy code.)
+ *
+ *            Here's an example of how serial correlation arises in an
+ *            LCG, and how it can lead to serious (and difficult to
+ *            diagnose) failure in a Monte Carlo simulation. Recall
+ *            that an LCG calculates $x_{i+1} = ax_i + c$. Suppose
+ *            $x_i$ is small: in the range 0..6000, say, as a specific
+ *            example. Now $x_{i+1}$ cannot be larger than 4.1e8, for
+ *            an LCG with $a=69069$,$c=1$. So if you take a sample and
+ *            test whether it is $< 1e-6$ (say), the next sample will
+ *            be in a range of about 0..0.1, rather than being uniform
+ *            on 0..1.
+ *
+ * Args:      seed $>= 0$.
+ *
+ * Returns:   an initialized <ESL_RANDOMNESS *> on success.
+ *            Caller free's with <esl_randomness_Destroy()>.
+ *              
+ * Throws:    <NULL> on failure.
+ *
+ * Xref:      SRE:J5/44: for accidental proof that the period is
+ *                       indeed 2^32.
+ */
+ESL_RANDOMNESS *
+esl_randomness_CreateFast(uint32_t seed)
+{
+  ESL_RANDOMNESS *r      = NULL;
+  int             status;
+
+  ESL_ALLOC(r, sizeof(ESL_RANDOMNESS));
+  r->type = eslRND_FAST;
+  r->mti  = 0;
+  r->x    = 0;
+  r->seed = 0;
+  esl_randomness_Init(r, seed);
+  return r;
+
+ ERROR:
+  return NULL;
+}
+
+
+/* Function:  esl_randomness_CreateTimeseeded()
+ * Synopsis:  Create an RNG with a quasirandom seed.
+ *
+ * Purpose:   Like <esl_randomness_Create()>, but it initializes the
+ *            the random number generator using a POSIX <time()> call 
+ *            (number of seconds since the POSIX epoch).
+ *            
+ *            This function is deprecated. Use 
+ *            <esl_randomness_Create(0)> instead.
+ *
+ * Returns:   an initialized <ESL_RANDOMNESS *> on success.
+ *            Caller free's with <esl_randomness_Destroy()>.
+ *              
+ * Throws:    <NULL> on failure.
+ * 
+ * Xref:      SRE:STL8/p57.
+ */
+ESL_RANDOMNESS *
+esl_randomness_CreateTimeseeded(void)
+{
+  return esl_randomness_Create(0);
+}
+
+
+/* Function:  esl_randomness_Init()
+ * Synopsis:  Reinitialize a RNG.           
+ *
+ * Purpose:   Reset and reinitialize an existing <ESL_RANDOMNESS>
+ *            object with a new seed. 
+ *            
+ *            Not generally recommended. This does not make a
+ *            sequence of numbers more random, and may make it less
+ *            so. Sometimes, though, it's useful to reseed an RNG
+ *            to guarantee a particular reproducible series of
+ *            pseudorandom numbers at an arbitrary point in a program;
+ *            HMMER does this, for example, to guarantee the same
+ *            results from the same HMM/sequence comparison regardless
+ *            of where in a search the HMM or sequence occurs.
+ *
+ * Args:      r     - randomness object
+ *            seed  - new seed to use; >0.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if seed is $<= 0$.
+ *
+ * Xref:      SRE:STL8/p57.
+ */
+int
+esl_randomness_Init(ESL_RANDOMNESS *r, uint32_t seed)
+{
+  if (seed == 0) seed = choose_arbitrary_seed();
+  if (r->type == eslRND_MERSENNE)
+    {
+      mersenne_seed_table(r, seed);
+      mersenne_fill_table(r);
+    }
+  else 
+    {
+      r->seed = seed;
+      r->x    = jenkins_mix3(seed, 87654321, 12345678);	/* arbitrary dispersion of the seed */
+      if (r->x == 0) r->x = 42;                         /* make sure we don't have a zero */
+    }
+  return eslOK;
+}
+
+/* Function:  esl_randomness_GetSeed()
+ * Synopsis:  Returns the value of RNG's seed.
+ *
+ * Purpose:   Return the value of the seed. 
+ */
+uint32_t
+esl_randomness_GetSeed(const ESL_RANDOMNESS *r)
+{
+  return r->seed;
+}
+
+
+/* Function:  esl_randomness_Destroy()
+ * Synopsis:  Free an RNG.            
+ *
+ * Purpose:   Frees an <ESL_RANDOMNESS> object.
+ */
+void
+esl_randomness_Destroy(ESL_RANDOMNESS *r)
+{
+  free(r);
+  return;
+}
+
+/*----------- end of ESL_RANDOMNESS object functions --------------*/
+
+
+
+/*****************************************************************
+ *# 2. The generators and <esl_random()>
+ *****************************************************************/  
+
+/* Function: esl_random()  
+ * Synopsis: Generate a uniform random deviate on [0,1)
+ *
+ * Purpose:  Returns a uniform deviate x, $0.0 \leq x < 1.0$, given
+ *           RNG <r>.
+ *           
+ *           If you cast the return value to float, the [0,1) interval
+ *           guarantee is lost because values close to 1 will round to
+ *           1.0.
+ *           
+ * Returns:  a uniformly distribute random deviate on interval
+ *           $0.0 \leq x < 1.0$.
+ */
+double
+esl_random(ESL_RANDOMNESS *r)
+{
+  uint32_t x = (r->type == eslRND_MERSENNE) ? mersenne_twister(r) : knuth(r);
+  return ((double) x / 4294967296.0); /* 2^32: normalizes to [0,1) */
+}
+
+
+/* Function:  esl_random_uint32()
+ * Synopsis:  Generate a uniform random deviate on 0..2^32-1
+ * Incept:    SRE, Wed Jan 13 10:59:26 2016
+ *
+ * Purpose:   Returns a uniform deviate x, a 32-bit unsigned
+ *            integer $0 \leq x < 2^{32}$, given RNG <r>.
+ */
+uint32_t 
+esl_random_uint32(ESL_RANDOMNESS *r)
+{
+  return (r->type == eslRND_MERSENNE) ? mersenne_twister(r) : knuth(r);
+}
+
+
+static uint32_t 
+knuth(ESL_RANDOMNESS *r)
+{
+  r->x *= 69069;
+  r->x += 1;
+  return r->x;
+}
+
+/* mersenne_twister() and other mersenne_*() functions below:
+ * A simple serial implementation of the original Mersenne Twister
+ * algorithm [Matsumoto98]. 
+ * 
+ * There are more sophisticated and faster implementations of MT, using
+ * vector instructions and/or directly generating IEEE754 doubles
+ * bitwise rather than doing an expensive normalization. We can
+ * improve the implementation later if necessary, but even the basic
+ * MT offers ~10x speed improvement over Easel's previous RNG.
+ * [SRE, 30 May 09, Stockholm]
+ */
+static uint32_t
+mersenne_twister(ESL_RANDOMNESS *r)
+{
+  uint32_t x;
+  if (r->mti >= 624) mersenne_fill_table(r);
+
+  x = r->mt[r->mti++];
+  x ^= (x>>11);
+  x ^= (x<< 7) & 0x9d2c5680;
+  x ^= (x<<15) & 0xefc60000;
+  x ^= (x>>18);
+  return x;
+}
+
+/* mersenne_seed_table()
+ * Initialize the state of the RNG from a seed.
+ * Uses the knuth linear congruential generator.
+ */
+static void
+mersenne_seed_table(ESL_RANDOMNESS *r, uint32_t seed)
+{
+  int z;
+
+  r->seed  = seed;
+  r->mt[0] = seed;
+  for (z = 1; z < 624; z++)
+    r->mt[z] = 69069 * r->mt[z-1];
+  return;
+}
+
+/* mersenne_fill_table()
+ * Refill the table with 624 new random numbers.
+ * We do this whenever we've reseeded, or when we 
+ * run out of numbers.
+ */
+static void
+mersenne_fill_table(ESL_RANDOMNESS *r)
+{
+  uint32_t y;
+  int      z;
+  static uint32_t mag01[2] = { 0x0, 0x9908b0df };
+
+  for (z = 0; z < 227; z++)	/* 227 = N-M = 624-397 */
+    {
+      y = (r->mt[z] & 0x80000000) | (r->mt[z+1] & 0x7fffffff);
+      r->mt[z] = r->mt[z+397] ^ (y>>1) ^ mag01[(int)(y & 0x1)]; /* yes, the (int) cast is necessary; xref bug #e7; some compilers may try to cast y to signed int otherwise, to use it in an array index */
+    }
+  for (; z < 623; z++)
+    {
+      y = (r->mt[z] & 0x80000000) | (r->mt[z+1] & 0x7fffffff);
+      r->mt[z] = r->mt[z-227] ^ (y>>1) ^ mag01[(int)(y & 0x1)];
+    }
+  y = (r->mt[623] & 0x80000000) | (r->mt[0] & 0x7fffffff);
+  r->mt[623] = r->mt[396] ^ (y>>1) ^ mag01[(int)(y & 0x1)];
+  r->mti = 0;
+
+  return;
+}
+
+
+/* choose_arbitrary_seed()
+ * Return a 'quasirandom' seed > 0.
+ * This should be ok, but could be better.
+ * See RFC1750 for a discussion of securely seeding RNGs.
+ */
+static uint32_t
+choose_arbitrary_seed(void)
+{
+  uint32_t a = (uint32_t) time ((time_t *) NULL);  
+  uint32_t b = 87654321;	                    // we'll use getpid() below, if we can
+  uint32_t c = (uint32_t) clock();                  // clock() gives time since process invocation, in msec at least, if not usec
+  uint32_t seed;
+#ifdef HAVE_GETPID
+  b  = (uint32_t) getpid();	                    // preferable b choice, if we have POSIX getpid()
+#endif
+  seed = jenkins_mix3(a,b,c);	                    // try to decorrelate closely spaced choices of pid/times
+  return (seed == 0) ? 42 : seed; /* 42 is entirely arbitrary, just to avoid seed==0. */
+}
+
+/* jenkins_mix3()
+ * 
+ * from Bob Jenkins: given a,b,c, generate a number that's distributed
+ * reasonably uniformly on the interval 0..2^32-1 even for closely
+ * spaced choices of a,b,c.
+ */
+static uint32_t 
+jenkins_mix3(uint32_t a, uint32_t b, uint32_t c)
+{
+  a -= b; a -= c; a ^= (c>>13);		
+  b -= c; b -= a; b ^= (a<<8); 
+  c -= a; c -= b; c ^= (b>>13);
+  a -= b; a -= c; a ^= (c>>12);
+  b -= c; b -= a; b ^= (a<<16);
+  c -= a; c -= b; c ^= (b>>5); 
+  a -= b; a -= c; a ^= (c>>3); 
+  b -= c; b -= a; b ^= (a<<10);
+  c -= a; c -= b; c ^= (b>>15);
+  return c;
+}
+/*----------- end of esl_random() --------------*/
+
+
+
+/*****************************************************************
+ *# 3. Debugging and development tools
+ *****************************************************************/ 
+
+/* Function:  esl_randomness_Dump()
+ * Synopsis:  Dump ESL_RANDOMNESS object to stream, for debugging/examination.
+ */
+int
+esl_randomness_Dump(FILE *fp, ESL_RANDOMNESS *r)
+{
+  if (r->type == eslRND_FAST)
+    {
+      fputs      ("type  = knuth\n", fp );
+      fprintf(fp, "state = %" PRIu32 "\n", r->x);
+      fprintf(fp, "seed  = %" PRIu32 "\n", r->seed);      
+    }
+  else if (r->type == eslRND_MERSENNE)
+    {
+      int i,j;
+
+      fputs      ("type    = mersenne twister\n", fp );
+      fprintf(fp, "mti     = %d (0..623)\n", r->mti);
+      fprintf(fp, "mt[mti] = %" PRIu32 "\n", r->mt[r->mti]);
+
+      fprintf(fp, "%6d: ", 0);
+      for (i = 0, j=0; i < 624; i++)
+	{
+	  fprintf(fp, "%11" PRIu32 " ", r->mt[i]);
+	  if (++j == 20) { fprintf(fp, "\n%6d: ", i+1); j=0; }
+	}
+      fputs("\n", fp);
+    }
+  return eslOK;
+}
+/*----------- end, debugging/development tools ------------------*/
+
+
+/*****************************************************************
+ *# 4. Other fundamental sampling (including Gaussian, gamma)
+ *****************************************************************/ 
+
+/* Function: esl_rnd_UniformPositive()
+ * Synopsis: Generate a uniform positive random deviate on interval (0,1).
+ *
+ * Purpose:  Same as <esl_random()>, but assure $0 < x < 1$;
+ *           (positive uniform deviate).
+ */
+double
+esl_rnd_UniformPositive(ESL_RANDOMNESS *r)
+{
+  double x;
+  do { x = esl_random(r); } while (x == 0.0);
+  return x;
+}
+
+
+/* Function:  esl_rnd_Gaussian()
+ * Synopsis:  Generate a Gaussian-distributed sample.
+ *
+ * Purpose:   Pick a Gaussian-distributed random variable
+ *            with a given <mean> and standard deviation <stddev>, and
+ *            return it. 
+ *            
+ *            Implementation is derived from the public domain
+ *            RANLIB.c <gennor()> function, written by Barry W. Brown
+ *            and James Lovato (M.D. Anderson Cancer Center, Texas
+ *            USA) using the method described in
+ *            \citep{AhrensDieter73}.
+ *            
+ *            Original algorithm said to use uniform deviates on [0,1)
+ *            interval (i.e. <esl_random()>), but this appears to be
+ *            wrong.  Use uniform deviates on (0,1) interval instead
+ *            (i.e., <esl_rnd_UniformPositive()>). RANLIB, GNU Octave
+ *            have made this alteration, possibly inadvertently.
+ *            [xref cryptogenomicon post, 13 Oct 2014].
+ * 
+ * Method:    Impenetrability of the code is to be blamed on 
+ *            FORTRAN/f2c lineage.
+ *
+ * Args:      r      - ESL_RANDOMNESS object
+ *            mean   - mean of the Gaussian we're sampling from
+ *            stddev - standard deviation of the Gaussian     
+ */
+double
+esl_rnd_Gaussian(ESL_RANDOMNESS *r, double mean, double stddev)
+{
+  long   i;
+  double snorm,u,s,ustar,aa,w,y,tt;
+
+  /* These static's are threadsafe: they are magic constants
+   * we will not touch.
+   */
+  static double a[32] = {
+    0.0,3.917609E-2,7.841241E-2,0.11777,0.1573107,0.1970991,0.2372021,0.2776904,    
+    0.3186394,0.36013,0.4022501,0.4450965,0.4887764,0.5334097,0.5791322,
+    0.626099,0.6744898,0.7245144,0.7764218,0.8305109,0.8871466,0.9467818,
+    1.00999,1.077516,1.150349,1.229859,1.318011,1.417797,1.534121,1.67594,
+    1.862732,2.153875
+  };
+  static double d[31] = {
+    0.0,0.0,0.0,0.0,0.0,0.2636843,0.2425085,0.2255674,0.2116342,0.1999243,
+    0.1899108,0.1812252,0.1736014,0.1668419,0.1607967,0.1553497,0.1504094,
+    0.1459026,0.14177,0.1379632,0.1344418,0.1311722,0.128126,0.1252791,
+    0.1226109,0.1201036,0.1177417,0.1155119,0.1134023,0.1114027,0.1095039
+  };
+  static double t[31] = {
+    7.673828E-4,2.30687E-3,3.860618E-3,5.438454E-3,7.0507E-3,8.708396E-3,
+    1.042357E-2,1.220953E-2,1.408125E-2,1.605579E-2,1.81529E-2,2.039573E-2,
+    2.281177E-2,2.543407E-2,2.830296E-2,3.146822E-2,3.499233E-2,3.895483E-2,
+    4.345878E-2,4.864035E-2,5.468334E-2,6.184222E-2,7.047983E-2,8.113195E-2,
+    9.462444E-2,0.1123001,0.136498,0.1716886,0.2276241,0.330498,0.5847031
+  };
+  static double h[31] = {
+    3.920617E-2,3.932705E-2,3.951E-2,3.975703E-2,4.007093E-2,4.045533E-2,
+    4.091481E-2,4.145507E-2,4.208311E-2,4.280748E-2,4.363863E-2,4.458932E-2,
+    4.567523E-2,4.691571E-2,4.833487E-2,4.996298E-2,5.183859E-2,5.401138E-2,
+    5.654656E-2,5.95313E-2,6.308489E-2,6.737503E-2,7.264544E-2,7.926471E-2,
+    8.781922E-2,9.930398E-2,0.11556,0.1404344,0.1836142,0.2790016,0.7010474
+  };
+
+  u = esl_rnd_UniformPositive(r);
+  s = 0.0;
+  if(u > 0.5) s = 1.0;
+  u += (u-s);
+  u = 32.0*u;
+  i = (long) (u);
+  if(i == 32) i = 31;
+  if(i == 0) goto S100;
+  /*
+   * START CENTER
+   */
+  ustar = u-(double)i;
+  aa = a[i-1];
+S40:
+  if (ustar <= t[i-1]) goto S60;
+  w = (ustar - t[i-1]) * h[i-1];
+S50:
+  /*
+   * EXIT   (BOTH CASES)
+   */
+  y = aa+w;
+  snorm = y;
+  if(s == 1.0) snorm = -y;
+  return (stddev*snorm + mean);
+S60:
+  /*
+   * CENTER CONTINUED
+   */
+  u = esl_rnd_UniformPositive(r);
+  w = u*(a[i]-aa);
+  tt = (0.5*w+aa)*w;
+  goto S80;
+S70:
+  tt = u;
+  ustar = esl_rnd_UniformPositive(r);
+S80:
+  if(ustar > tt) goto S50;
+  u = esl_rnd_UniformPositive(r);
+  if(ustar >= u) goto S70;
+  ustar = esl_rnd_UniformPositive(r);
+  goto S40;
+S100:
+  /*
+   * START TAIL
+   */
+  i = 6;
+  aa = a[31];
+  goto S120;
+S110:
+  aa += d[i-1];
+  i += 1;
+  ESL_DASSERT1(( i <= 31 ));
+S120:
+  u += u;
+  if(u < 1.0) goto S110;
+  u -= 1.0;
+S140:
+  w = u*d[i-1];
+  tt = (0.5*w+aa)*w;
+  goto S160;
+S150:
+  tt = u;
+S160:
+  ustar = esl_rnd_UniformPositive(r);
+  if(ustar > tt) goto S50;
+  u = esl_rnd_UniformPositive(r);
+  if(ustar >= u) goto S150;
+  u = esl_rnd_UniformPositive(r);
+  goto S140;
+}
+
+
+
+/* subfunctions that esl_rnd_Gamma() is going to call:
+ */
+static double
+gamma_ahrens(ESL_RANDOMNESS *r, double a)	/* for a >= 3 */
+{
+  double V;			/* uniform deviates */
+  double X,Y;
+  double test;
+  
+  do {
+    do {				/* generate candidate X */
+      Y = tan(eslCONST_PI * esl_random(r)); 
+      X = Y * sqrt(2.*a -1.) + a - 1.;
+    } while (X <= 0.);
+				/* accept/reject X */
+    V    = esl_random(r);
+    test = (1+Y*Y) * exp( (a-1.)* log(X/(a-1.)) - Y*sqrt(2.*a-1.));
+  } while (V > test);
+  return X;
+}
+static double
+gamma_integer(ESL_RANDOMNESS *r, unsigned int a)	/* for small integer a, a < 12 */
+{
+  int    i;
+  double U,X;
+
+  U = 1.;
+  for (i = 0; i < a; i++) 
+    U *= esl_rnd_UniformPositive(r);
+  X = -log(U);
+
+  return X;
+}
+static double
+gamma_fraction(ESL_RANDOMNESS *r, double a)	/* for fractional a, 0 < a < 1 */
+{				/* Knuth 3.4.1, exercise 16, pp. 586-587 */
+  double p, U, V, X, q;
+  
+  p = eslCONST_E / (a + eslCONST_E);
+  do {
+    U = esl_random(r);
+    V = esl_rnd_UniformPositive(r);
+    if (U < p) {
+      X = pow(V, 1./a);
+      q = exp(-X);
+    } else {
+      X = 1. - log(V);
+      q = pow(X, a-1.);
+    }
+    U = esl_random(r);
+  } while (U >= q);
+  return X;
+}
+
+
+/* Function: esl_rnd_Gamma()
+ * Synopsis: Returns a random deviate from a Gamma(a, 1) distribution.
+ *
+ * Purpose:  Return a random deviate distributed as Gamma(a, 1.)
+ *           \citep[pp. 133--134]{Knu-81a}.
+ *           
+ *           The implementation follows not only Knuth \citep{Knu-81a},
+ *           but also relied on examination of the implementation in
+ *           the GNU Scientific Library (libgsl) \citep{Galassi06}.
+ *
+ * Args:     r      - random number generation seed
+ *           a      - order of the gamma function; a > 0
+ */
+double
+esl_rnd_Gamma(ESL_RANDOMNESS *r, double a)
+{
+  double aint;
+
+  ESL_DASSERT1(( a > 0. ));
+
+  aint = floor(a);
+  if (a == aint && a < 12.) 
+    return gamma_integer(r, (unsigned int) a);
+  else if (a > 3.) 
+    return gamma_ahrens(r, a);
+  else if (a < 1.) 
+    return gamma_fraction(r, a);
+  else 
+    return gamma_integer(r, aint) + gamma_fraction(r, a-aint);
+}
+
+
+/* Function:  esl_rnd_Dirichlet()
+ * Synopsis:  Sample a Dirichlet-distributed random probability vector 
+ * Incept:    SRE, Wed Feb 17 12:20:53 2016 [H1/76]
+ *
+ * Purpose:   Using generator <rng>, sample a Dirichlet-distributed
+ *            probabilty vector <p> of <K> elements, using Dirichlet
+ *            parameters <alpha> (also of <K> elements). 
+ *
+ *            Caller provides the allocated space for <p>.
+ * 
+ *            <alpha> is optional. If it isn't provided (i.e. is
+ *            <NULL>), sample <p> uniformly. (That is, use <alpha[i] =
+ *            1.> for all i=0..K-1.)
+ *
+ *            This routine is redundant with <esl_dirichlet_DSample()>
+ *            and <esl_dirichlet_DSampleUniform()> in the dirichlet
+ *            module. Provided here because there's cases where we
+ *            just want to sample a probability vector without
+ *            introducing a dependency on all the stats/dirichlet code
+ *            in Easel.
+ *
+ * Args:      rng   : random number generator
+ *            alpha : OPTIONAL: Dirichlet parameters 0..K-1, or NULL to use alpha[i]=1 for all i
+ *            K     : number of elements in alpha, p
+ *            p     : RESULT: sampled probability vector
+ *
+ * Returns:   (void)
+ */
+void
+esl_rnd_Dirichlet(ESL_RANDOMNESS *rng, const double *alpha, int K, double *p)
+{
+  int    x;
+  double norm = 0.;
+
+  for (x = 0; x < K; x++) 
+    {
+      p[x] = esl_rnd_Gamma(rng, (alpha ? alpha[x] : 1.0));
+      norm += p[x];
+    }
+  for (x = 0; x < K; x++)
+    p[x] /= norm;
+}
+
+
+/* Function:  esl_rnd_mem()
+ * Synopsis:  Overwrite a buffer with random garbage.
+ * Incept:    SRE, Fri Feb 19 08:53:07 2016
+ *
+ * Purpose:   Write <n> bytes of random garbage into buffer
+ *            <buf>, by uniform sampling of values 0..255,
+ *            using generator <rng>.
+ *
+ *            Used in unit tests that are reusing memory, and that
+ *            want to make sure that there's no favorable side effects
+ *            from that reuse.
+ */
+void
+esl_rnd_mem(ESL_RANDOMNESS *rng, void *buf, int n)
+{
+  unsigned char *p = (unsigned char *) buf;
+  int            i;
+
+  for (i = 0; i < n; i++)
+    p[i] = (unsigned char) esl_rnd_Roll(rng, 256);
+}
+
+
+/*****************************************************************
+ *# 5. Multinomial sampling from discrete probability n-vectors
+ *****************************************************************/ 
+
+/* Function:  esl_rnd_DChoose()
+ * Synopsis:  Return random choice from discrete multinomial distribution.          
+ *
+ * Purpose:   Make a random choice from a normalized discrete
+ *            distribution <p> of <N> elements, where <p>
+ *            is double-precision. Returns the index of the
+ *            selected element, $0..N-1$.
+ *            
+ *            <p> must be a normalized probability distribution
+ *            (i.e. must sum to one). Sampling distribution is
+ *            undefined otherwise: that is, a choice will always
+ *            be returned, but it might be an arbitrary one.
+ *
+ *            All $p_i$ must be $>$ <DBL_EPSILON> in order to 
+ *            have a non-zero probability of being sampled.
+ *
+ *            <esl_rnd_FChoose()> is the same, but for floats in <p>,
+ *            and all $p_i$ must be $>$ <FLT_EPSILON>.
+ */
+int
+esl_rnd_DChoose(ESL_RANDOMNESS *r, const double *p, int N)
+{
+  double norm = 0.0;		/* ~ 1.0                  */
+  double sum  = 0.0;            /* integrated prob        */
+  double roll = esl_random(r);  /* random fraction        */
+  int    i;                     /* counter over the probs */
+
+  /* we need to deal with finite roundoff error in p's sum */
+  for (i = 0; i < N; i++) norm += p[i];
+  ESL_DASSERT1((norm > 0.999 && norm < 1.001));
+
+  for (i = 0; i < N; i++)
+    {
+      sum += p[i];
+      if (roll < (sum / norm) ) return i; 
+    }
+  esl_fatal("unreached code was reached. universe collapses.");
+  return 0; /*notreached*/
+}
+int
+esl_rnd_FChoose(ESL_RANDOMNESS *r, const float *p, int N)
+{
+  /* Computing in double precision is important:
+   * casting <roll> to (float) gives a [0,1] number instead of [0,1).
+   */
+  double norm = 0.0;		/* ~ 1.0                  */
+  double sum  = 0.0;            /* integrated prob        */
+  double roll = esl_random(r);  /* random fraction        */
+  int    i;                     /* counter over the probs */
+
+  for (i = 0; i < N; i++) norm += p[i];
+  ESL_DASSERT1((norm > 0.99 && norm < 1.01));
+
+  for (i = 0; i < N; i++)
+    {
+      sum += (double) p[i];
+      if (roll < (sum / norm) ) return i; 
+    }
+  esl_fatal("unreached code was reached. universe collapses.");
+  return 0; /*notreached*/
+}
+
+
+/* Function:  esl_rnd_DChooseCDF()
+ * Synopsis:  Return random choice from cumulative multinomial distribution.
+ *
+ * Purpose:   Given a random number generator <r> and a cumulative
+ *            multinomial distribution <cdf[0..N-1]>, sample an element
+ *            <0..N-1> from that distribution. Return the index <0..N-1>.
+ *
+ *            Caller should be sure that <cdf[0..N-1]> is indeed a
+ *            cumulative multinomial distribution -- in particular, that
+ *            <cdf[N-1]> is tolerably close to 1.0 (within roundoff error).
+ *            
+ *            When sampling many times from the same multinomial
+ *            distribution <p>, it will generally be faster to
+ *            calculate the CDF once using <esl_vec_DCDF(p, N, cdf)>,
+ *            then sampling many times from the CDF with
+ *            <esl_rnd_DChooseCDF(r, cdf, N)>, as opposed to calling
+ *            <esl_rnd_DChoose(r, p, N)> many times, because
+ *            <esl_rnd_DChoose()> has to calculated the CDF before
+ *            sampling. This also gives you a bit more control over
+ *            error detection: you can make sure that the CDF is ok (p
+ *            does sum to ~1.0) before doing a lot of sampling from
+ *            it.
+ *            
+ *            <esl_rnd_FChooseCDF()> is the same, but for
+ *            a single-precision float <cdf>.
+ *            
+ * Args:      r    - random number generator
+ *            cdf  - cumulative multinomial distribution, cdf[0..N-1]
+ *            N    - number of elements in <cdf>
+ *
+ * Returns:   index 0..N-1 of the randomly sampled choice from <cdf>.
+ * 
+ * Note:      For large N, it might be advantageous to bisection search the
+ *            cdf. For typical N in Easel (up to 20, for amino acid
+ *            prob vectors, for example), the naive code below is
+ *            faster. We could revisit this if we start sampling
+ *            larger vectors.
+ */
+int
+esl_rnd_DChooseCDF(ESL_RANDOMNESS *r, const double *cdf, int N)
+{
+  double roll = esl_random(r);	/* uniform 0.0 <= x < 1.0 */
+  int    i;
+
+  ESL_DASSERT1((cdf[0] >= 0.0));
+  ESL_DASSERT1((cdf[N-1] > 0.999 && cdf[N-1] < 1.001));
+
+  for (i = 0; i < N; i++)
+    if (roll < cdf[i] / cdf[N-1]) return i; 
+  esl_fatal("unreached code is reached. universe goes foom");
+  return 0; /*notreached*/
+}
+int
+esl_rnd_FChooseCDF(ESL_RANDOMNESS *r, const float *cdf, int N)
+{
+  double roll = esl_random(r);	/* uniform 0.0 <= x < 1.0. must be double, not float, to guarantee x <1 */
+  int    i;
+
+  ESL_DASSERT1((cdf[0] >= 0.0));
+  ESL_DASSERT1((cdf[N-1] > 0.99 && cdf[N-1] < 1.01));
+
+  for (i = 0; i < N; i++) 
+    if (roll < (double) cdf[i] / (double) cdf[N-1]) return i;  // yes, the casts are NECESSARY. Without them, you get a heisenbug on icc/linux.
+  esl_fatal("unreached code is reached. universe goes foom");
+  return 0; /*notreached*/
+}
+
+
+/*****************************************************************
+ * 6. Benchmark driver
+ *****************************************************************/
+#ifdef eslRANDOM_BENCHMARK
+/*
+   gcc -O3 -malign-double -o esl_random_benchmark -I. -L. -DeslRANDOM_BENCHMARK esl_random.c -leasel -lm
+   ./esl_random_benchmark -N 1000000000
+   ./esl_random_benchmark -f -N 1000000000
+   ./esl_random_benchmark -r -N1000000
+   ./esl_random_benchmark -fr -N 1000000000
+                               esl_random()            esl_randomness_Init()
+                           iter  cpu time  per call   iter  cpu time  per call  
+                           ----  --------  --------   ---- ---------- ---------
+   27 Dec 08 on wanderoo:  1e7    0.78s    78 nsec     1e6   2.08s     2.1 usec   ran2() from NR
+   30 May 09 on wanderoo:  1e9    8.39s     8 nsec     1e6   5.98s     6.0 usec   Mersenne Twister
+                           1e9    5.73s     6 nsec     1e8   2.51s     0.03 usec  Knuth
+
+ */
+#include "easel.h"
+#include "esl_composition.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_stopwatch.h"
+#include "esl_vectorops.h"
+
+static ESL_OPTIONS options[] = {
+  /* name     type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",  eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-c",  eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "benchmark DChooseCDF()",                           0 },
+  { "-d",  eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "benchmark DChoose()",                              0 },
+  { "-f",  eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "run fast version instead of MT19937",              0 },
+  { "-r",  eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "benchmark _Init(), not just random()",             0 },
+  { "-N",  eslARG_INT, "10000000",NULL, NULL,  NULL,  NULL, NULL, "number of trials",                                 0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "benchmarking speed of random number generator";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go      = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r       = (esl_opt_GetBoolean(go, "-f") == TRUE ? esl_randomness_CreateFast(42) : esl_randomness_Create(42));
+  ESL_STOPWATCH  *w       = esl_stopwatch_Create();
+  int             N       = esl_opt_GetInteger(go, "-N");
+  double          p[20];
+  double          cdf[20];
+  
+  esl_composition_BL62(p);
+  esl_vec_DCDF(p, 20, cdf);
+
+  esl_stopwatch_Start(w);
+  if      (esl_opt_GetBoolean(go, "-c")) { while (N--) esl_rnd_DChoose(r, p, 20);      }
+  else if (esl_opt_GetBoolean(go, "-d")) { while (N--) esl_rnd_DChooseCDF(r, cdf, 20); }
+  else if (esl_opt_GetBoolean(go, "-r")) { while (N--) esl_randomness_Init(r, 42);     }
+  else                                   { while (N--) esl_random(r);                  }
+
+  esl_stopwatch_Stop(w);
+  esl_stopwatch_Display(stdout, w, "# CPU Time: ");
+
+  esl_stopwatch_Destroy(w);
+  esl_randomness_Destroy(r);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslRANDOM_BENCHMARK*/
+/*----------------- end, benchmark driver -----------------------*/
+
+
+
+
+/*****************************************************************
+ * 7. Unit tests.
+ *****************************************************************/
+
+#ifdef eslRANDOM_TESTDRIVE
+#include "esl_vectorops.h"
+#include "esl_stats.h"
+#include "esl_dirichlet.h"
+    
+  
+/* The esl_random() unit test:
+ * a binned frequency test.
+ */
+static void
+utest_random(ESL_RANDOMNESS *r, int n, int nbins, int be_verbose)
+{
+  char            msg[]  = "esl_random() unit test failed";
+  int            *counts = NULL;
+  double          X2p    = 0.;
+  int             i;
+  int             sample;
+  double          X2, exp, diff;
+
+  if ((counts = malloc(sizeof(int) * nbins)) == NULL) esl_fatal(msg);
+  esl_vec_ISet(counts, nbins, 0);
+
+  for (i = 0; i < n; i++)
+    { 
+      sample = esl_rnd_Roll(r, nbins);
+      if (sample < 0 || sample >= nbins) esl_fatal(msg);
+      counts[sample]++;
+    }
+
+  /* X^2 value: \sum (o_i - e_i)^2 / e_i */
+  for (X2 = 0., i = 0; i < nbins; i++) {
+    exp  = (double) n / (double) nbins;
+    diff = (double) counts[i] - exp;
+    X2 +=  diff*diff/exp;
+  }
+  if (esl_stats_ChiSquaredTest(nbins, X2, &X2p) != eslOK) esl_fatal(msg);
+  if (be_verbose) printf("random():  \t%g\n", X2p);
+  if (X2p < 0.01) esl_fatal(msg);
+
+  free(counts);
+  return;
+}
+
+/* The DChoose() and FChoose() unit tests.
+ */
+static void
+utest_choose(ESL_RANDOMNESS *r, int n, int nbins, int be_verbose)
+{
+  double *pd  = NULL;		/* probability vector, double */
+  double *pdc = NULL;		/* CDF, double                */
+  float  *pf  = NULL;		/* probability vector, float  */
+  float  *pfc = NULL;		/* CDF, float                 */
+  int    *ct  = NULL;
+  int     i;
+  double  X2, diff, exp, X2p;
+
+  if ((pd  = malloc(sizeof(double) * nbins)) == NULL) esl_fatal("malloc failed"); 
+  if ((pdc = malloc(sizeof(double) * nbins)) == NULL) esl_fatal("malloc failed"); 
+  if ((pf  = malloc(sizeof(float)  * nbins)) == NULL) esl_fatal("malloc failed");
+  if ((pfc = malloc(sizeof(float)  * nbins)) == NULL) esl_fatal("malloc failed");
+  if ((ct  = malloc(sizeof(int)    * nbins)) == NULL) esl_fatal("malloc failed");
+
+  /* Sample a random multinomial probability vector.  */
+  if (esl_dirichlet_DSampleUniform(r, nbins, pd) != eslOK) esl_fatal("dirichlet sample failed");
+  esl_vec_D2F(pd, nbins, pf);
+
+  /* Test esl_rnd_DChoose(): 
+   * sample observed counts, chi-squared test against expected
+   */
+  esl_vec_ISet(ct, nbins, 0);
+  for (i = 0; i < n; i++) 
+    ct[esl_rnd_DChoose(r, pd, nbins)]++;
+  for (X2 = 0., i=0; i < nbins; i++) {
+    exp = (double) n * pd[i];
+    diff = (double) ct[i] - exp;
+    X2 += diff*diff/exp;
+  }
+  if (esl_stats_ChiSquaredTest(nbins, X2, &X2p) != eslOK) esl_fatal("chi square eval failed");
+  if (be_verbose) printf("DChoose():  \t%g\n", X2p);
+  if (X2p < 0.01) esl_fatal("chi squared test failed");
+
+  /* Repeat above for FChoose(). */
+  esl_vec_ISet(ct, nbins, 0);
+  for (i = 0; i < n; i++)
+    ct[esl_rnd_FChoose(r, pf, nbins)]++;
+  for (X2 = 0., i=0; i < nbins; i++) {
+    exp = (double) n * pd[i];
+    diff = (double) ct[i] - exp;
+    X2 += diff*diff/exp;
+  }
+  if (esl_stats_ChiSquaredTest(nbins, X2, &X2p) != eslOK) esl_fatal("chi square eval failed");
+  if (be_verbose) printf("FChoose():  \t%g\n", X2p);
+  if (X2p < 0.01) esl_fatal("chi squared test failed");
+  
+  /* esl_rnd_DChooseCDF(). */
+  esl_vec_ISet(ct, nbins, 0);
+  esl_vec_DCDF(pd, nbins, pdc);
+  for (i = 0; i < n; i++) 
+    ct[esl_rnd_DChooseCDF(r, pdc, nbins)]++;
+  for (X2 = 0., i=0; i < nbins; i++) {
+    exp  = (double) n * pd[i];
+    diff = (double) ct[i] - exp;
+    X2 += diff*diff/exp;
+  }
+  if (esl_stats_ChiSquaredTest(nbins, X2, &X2p) != eslOK) esl_fatal("chi square eval failed");
+  if (be_verbose) printf("DChoose():  \t%g\n", X2p);
+  if (X2p < 0.01) esl_fatal("chi squared test failed");
+
+  /* esl_rnd_FChooseCDF() */
+  esl_vec_ISet(ct, nbins, 0);
+  esl_vec_FCDF(pf, nbins, pfc);
+  for (i = 0; i < n; i++) 
+    ct[esl_rnd_FChooseCDF(r, pfc, nbins)]++;
+  for (X2 = 0., i=0; i < nbins; i++) {
+    exp  = (double) n * pf[i];
+    diff = (double) ct[i] - exp;
+    X2 += diff*diff/exp;
+  }
+  if (esl_stats_ChiSquaredTest(nbins, X2, &X2p) != eslOK) esl_fatal("chi square eval failed");
+  if (be_verbose) printf("DChoose():  \t%g\n", X2p);
+  if (X2p < 0.01) esl_fatal("chi squared test failed");
+
+  free(pd);
+  free(pdc);
+  free(pf);
+  free(pfc);
+  free(ct);
+  return;
+}
+#endif /*eslRANDOM_TESTDRIVE*/
+/*-------------------- end, unit tests --------------------------*/
+
+
+/*****************************************************************
+ * 8. Test driver.
+ *****************************************************************/
+#ifdef eslRANDOM_TESTDRIVE
+/* gcc -g -Wall -o esl_random_utest -L. -I. -DeslRANDOM_TESTDRIVE esl_random.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_dirichlet.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_randomseq.h"
+#include "esl_vectorops.h"
+
+static ESL_OPTIONS options[] = {
+  /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",               0},
+  {"-b",  eslARG_INT,      "20", NULL, "n>0",NULL, NULL, NULL, "number of test bins",               0},
+  {"-n",  eslARG_INT, "1000000", NULL, "n>0",NULL, NULL, NULL, "number of samples",                 0},
+  {"-s",  eslARG_INT,      "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to <n>",     0},
+  {"-v",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose output",               0},
+  {"--mtbits",eslARG_STRING,NULL,NULL, NULL, NULL, NULL, NULL, "save MT bit file for NIST benchmark",0},
+  {"--kbits", eslARG_STRING,NULL,NULL, NULL, NULL, NULL, NULL, "save Knuth bit file for NIST benchmark",0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for random module";
+
+static int save_bitfile(char *bitfile, ESL_RANDOMNESS *r, int n);
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go         = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r1         = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  ESL_RANDOMNESS *r2         = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s"));
+  char           *mtbitfile  = esl_opt_GetString (go, "--mtbits");
+  char           *kbitfile   = esl_opt_GetString (go, "--kbits");
+  int             nbins      = esl_opt_GetInteger(go, "-b");
+  int             n          = esl_opt_GetInteger(go, "-n");
+  int             be_verbose = esl_opt_GetBoolean(go, "-v");
+
+  fprintf(stderr, "## %s\n", argv[0]);
+  fprintf(stderr, "#  rng seed 1 (slow) = %" PRIu32 "\n", esl_randomness_GetSeed(r1));
+  fprintf(stderr, "#  rng seed 2 (fast) = %" PRIu32 "\n", esl_randomness_GetSeed(r2));
+
+  utest_random(r1, n, nbins, be_verbose);
+  utest_choose(r1, n, nbins, be_verbose);
+  utest_random(r2, n, nbins, be_verbose);
+  utest_choose(r2, n, nbins, be_verbose);
+
+  if (mtbitfile) save_bitfile(mtbitfile, r1, n);
+  if (kbitfile)  save_bitfile(kbitfile,  r2, n);
+
+  fprintf(stderr, "#  status = ok\n");
+
+  esl_randomness_Destroy(r1);
+  esl_randomness_Destroy(r2);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+static int
+save_bitfile(char *bitfile, ESL_RANDOMNESS *r, int n)
+{
+  FILE *fp = NULL;
+  int b,i;
+  long x;
+
+  /* Open the file. 
+   */
+  if ((fp = fopen(bitfile, "w")) == NULL) 
+    esl_fatal("failed to open %s for writing", bitfile);
+
+  /* Sample <n> random numbers, output 32n random bits to the file.
+   */
+  for (i = 0; i < n; i++)
+    {
+      x = (r->type == eslRND_FAST ? knuth(r) : mersenne_twister(r)); /* generate a 32 bit random variate by MT19937 */
+      for (b = 0; b < 32; b++) 
+	{
+	  if (x & 01) fprintf(fp, "1");
+	  else        fprintf(fp, "0");
+	  x >>= 1;
+	}
+      fprintf(fp, "\n");
+    }
+  fclose(fp);
+  return eslOK;
+}
+#endif /*eslRANDOM_TESTDRIVE*/
+
+
+
+/*****************************************************************
+ * 9. Example.
+ *****************************************************************/
+#ifdef eslRANDOM_EXAMPLE
+/*::cexcerpt::random_example::begin::*/
+/* compile: cc -I. -o esl_random_example -DeslRANDOM_EXAMPLE esl_random.c esl_getopts.c easel.c -lm
+ * run:     ./random_example 42
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+
+/* In Easel and HMMER, the option for setting the seed is typically -s, sometimes --seed.
+ * Default is usually 0 because we want a "random" seed. Less commonly, "42" for a fixed seed;
+ * rarely, a different fixed seed.  
+ * 
+ * Generally you want to use esl_randomness_Create(), to get a Mersenne Twister. The "fast"
+ * RNG you get from esl_randomness_CreateFast() isn't all that much faster (~25% per sample)
+ * but has much worse quality in its randomness.
+ */
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",  0 },
+  { "-i",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "sample uint32's instead of doubles",    0 },
+  { "-n",        eslARG_INT,     "20",  NULL, NULL,  NULL,  NULL, NULL, "number of random samples to show",      0 },
+  { "-s",        eslARG_INT,      "0",  NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",         0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "example of using random module";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go        = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *rng       = esl_randomness_Create( esl_opt_GetInteger(go, "-s") );   
+  int             do_uint32 = esl_opt_GetBoolean(go, "-i");
+  int             n         = esl_opt_GetInteger(go, "-n");
+
+  printf("RNG seed: %" PRIu32 "\n", esl_randomness_GetSeed(rng));
+  printf("\nA sequence of %d pseudorandom numbers:\n", n);
+  if (do_uint32)  while (n--)  printf("%" PRIu32 "\n", esl_random_uint32(rng));
+  else            while (n--)  printf("%f\n",          esl_random(rng));
+  
+  printf("\nInternal dump of RNG state:\n");
+  esl_randomness_Dump(stdout, rng);
+
+  esl_randomness_Destroy(rng);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+/*::cexcerpt::random_example::end::*/
+#endif /*eslRANDOM_EXAMPLE*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
+
diff --git a/esl_random.h b/esl_random.h
new file mode 100644
index 0000000..08e7172
--- /dev/null
+++ b/esl_random.h
@@ -0,0 +1,61 @@
+/* Easel's portable, threadsafe random number generator.
+ */
+#ifndef eslRANDOM_INCLUDED
+#define eslRANDOM_INCLUDED
+
+#include <stdint.h>
+
+#define eslRND_FAST     0
+#define eslRND_MERSENNE 1
+
+typedef struct {
+  int      type;		/* eslRND_FAST | eslRND_MERSENNE               */
+  int      mti;			/* current position in mt[] table              */
+  uint32_t mt[624];		/* state of the Mersenne Twister               */
+  uint32_t x;			/* state of the Knuth generator                */
+  uint32_t seed;		/* seed used to init the RNG                   */
+} ESL_RANDOMNESS;
+
+/* esl_rnd_Roll(a) chooses a uniformly distributed integer
+ * in the range 0..a-1, given an initialized ESL_RANDOMNESS r.
+ */
+#define esl_rnd_Roll(r, a)    ((int) (esl_random(r) * (a)))
+
+/* 1. The ESL_RANDOMNESS object.
+ */
+extern ESL_RANDOMNESS *esl_randomness_Create    (uint32_t seed);
+extern ESL_RANDOMNESS *esl_randomness_CreateFast(uint32_t seed);
+extern ESL_RANDOMNESS *esl_randomness_CreateTimeseeded(void); /* DEPRECATED */
+extern void            esl_randomness_Destroy(ESL_RANDOMNESS *r);
+extern int             esl_randomness_Init(ESL_RANDOMNESS *r, uint32_t seed);
+extern uint32_t        esl_randomness_GetSeed(const ESL_RANDOMNESS *r);
+
+/* 2. The generator, esl_random().
+ */
+extern double   esl_random       (ESL_RANDOMNESS *r);
+extern uint32_t esl_random_uint32(ESL_RANDOMNESS *r);
+
+/* 3. Debugging/development tools.
+ */
+extern int esl_randomness_Dump(FILE *fp, ESL_RANDOMNESS *r);
+
+/* 4. Other fundamental sampling (including Gaussian, gamma).
+ */
+extern double esl_rnd_UniformPositive(ESL_RANDOMNESS *r);
+extern double esl_rnd_Gaussian (ESL_RANDOMNESS *rng, double mean, double stddev);
+extern double esl_rnd_Gamma    (ESL_RANDOMNESS *rng, double a);
+extern void   esl_rnd_Dirichlet(ESL_RANDOMNESS *rng, const double *alpha, int K, double *p);
+extern void   esl_rnd_mem      (ESL_RANDOMNESS *rng, void *buf, int n);
+
+/* 5. Multinomial sampling from discrete probability n-vectors.
+ */
+extern int    esl_rnd_DChoose   (ESL_RANDOMNESS *r, const double *p,   int N);
+extern int    esl_rnd_FChoose   (ESL_RANDOMNESS *r, const float  *p,   int N);
+extern int    esl_rnd_DChooseCDF(ESL_RANDOMNESS *r, const double *cdf, int N);
+extern int    esl_rnd_FChooseCDF(ESL_RANDOMNESS *r, const float  *cdf, int N);
+
+
+#endif /*eslRANDOM_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_random.tex b/esl_random.tex
new file mode 100644
index 0000000..f73c78c
--- /dev/null
+++ b/esl_random.tex
@@ -0,0 +1,127 @@
+The \eslmod{random} module contains routines for generating uniformly
+distributed pseudorandom numbers and sampling random deviates from
+distributions. The heart of the module is the \ccode{esl\_random()}
+pseudorandom number generator.
+
+The \ccode{esl\_random()} random number generator is portable,
+reentrant, and threadsafe. It gives reproducible results on all
+platforms.
+
+The default \ccode{esl\_random()} generator implements the Mersenne
+Twister algorithm MT19937 \citep{Matsumoto98}. MT19937 has strong
+properties, including a period of $2^{19937}-1$ and equidistribution
+over $2^{32}$ values. The default Mersenne Twister should be suitable
+for all but a few speed-critical applications.
+
+Alternatively, a simple and classic linear congruential generator
+(LCG) can be chosen \citep{Knu-81a}. The LCG is much faster to
+initialize (about 20x) and somewhat faster to generate samples (about
+25\%), while still generating pseudorandom numbers suitable for most
+applications. Because of its initialization speed, the LCG is
+advantageous when a small number of reasonably random samples is
+needed in a speed-critical application. However, it has a relatively
+short period ($2^32$), making it unsuitable for large simulations.
+
+A new generator can either be seeded with a number that you provide,
+or using an arbitrary (quasirandom) seed. If you seed it yourself, you
+can guarantee reproducibility: two generators seeded with the same
+seed will give exactly the same sequence, even on different hardware
+platforms and operating systems. If you let it seed itself
+arbitrarily, you will get different sequences. Multiple instances of
+running the same program will get quite different arbitrary seeds even
+if you start them at the same time.
+
+Bit streams from \ccode{esl\_random()}'s two generators were tested
+against a National Institute of Standards and Technology statistical
+benchmark for random number generators \citep{NIST08}.  The default
+Mersenne Twister passes the benchmark suite as expected
+\citep{Matsumoto98}. The fast LCG passes most but not all of the NIST
+tests.
+
+\ccode{esl\_random()} returns a double-precision floating point sample
+on the interval $0.0 \leq x < 1$. 
+
+Table~\ref{tbl:random_api} lists the functions in the \eslmod{random}
+API. The module implements one object, \ccode{ESL\_RANDOMNESS}, which
+contains state information for the random number generator.  This
+makes random number generation reentrant and threadsafe. You can have
+more than one active generator and they will not interfere with each
+other. The object is meant to be opaque; you should not need to use
+its contents.  
+
+
+
+
+% Table generated by autodoc -t esl_random.c (so don't edit here, edit esl_random.c:)
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\apisubhead{The \ccode{ESL\_RANDOMNESS} object.}\\
+\hyperlink{func:esl_randomness_Create()}{\ccode{esl\_randomness\_Create()}} & Create an RNG with a given seed.\\
+\hyperlink{func:esl_randomness_CreateFast()}{\ccode{esl\_randomness\_CreateFast()}}& Create a fast RNG with a given seed.\\
+\hyperlink{func:esl_randomness_Destroy()}{\ccode{esl\_randomness\_Destroy()}} & Free an RNG.            \\
+\hyperlink{func:esl_randomness_Init()}{\ccode{esl\_randomness\_Init()}} & Reinitialize an RNG.           \\
+\hyperlink{func:esl_randomness_GetSeed()}{\ccode{esl\_randomness\_GetSeed()}} & Returns the value of RNG's seed.\\
+\apisubhead{The generator, \ccode{esl\_random()}}\\
+\hyperlink{func:esl_random()}{\ccode{esl\_random()}} & Generate a uniform random deviate $0.0 <= x < 1.0$.
+\\
+\apisubhead{Other fundamental sampling (including Gaussian, gamma)}\\
+\hyperlink{func:esl_rnd_UniformPositive()}{\ccode{esl\_rnd\_UniformPositive()}} & Generate a uniform positive random deviate $0 < x < 1$.\\
+\hyperlink{func:esl_rnd_Gaussian()}{\ccode{esl\_rnd\_Gaussian()}} & Generate a Gaussian-distributed sample.\\
+\hyperlink{func:esl_rnd_Gamma()}{\ccode{esl\_rnd\_Gamma()}} & Returns a random deviate from a Gamma(a, 1) distribution.\\
+\apisubhead{Multinomial sampling from discrete probability n-vectors}\\
+\hyperlink{func:esl_rnd_DChoose()}{\ccode{esl\_rnd\_DChoose()}} & Return random choice from discrete multinomial distribution.
+\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{random} API.}
+\label{tbl:random_api}
+\end{table}
+
+\subsection{Example of using random}
+
+Figure~\ref{fig:random_example} shows a program that initializes the
+random number generator with a seed you provide on the command line,
+then samples 10 random numbers using \ccode{esl\_random()}.
+
+\begin{figure}
+\input{cexcerpts/random_example}
+\caption{An example of using the random number generator.}
+\label{fig:random_example}
+\end{figure}
+
+When a \ccode{ESL\_RANDOMNESS} object is created with
+\ccode{esl\_randomness\_Create()}, it needs to be given a \emph{seed},
+an integer $\geq 0$, which specifies the initial state of the
+generator. After a generator is seeded, it is typically never seeded
+again. A series of \ccode{esl\_random()} calls generates a
+pseudorandom number sequence from that starting point. If you create
+two \ccode{ESL\_RANDOMNESS} objects seeded identically, they are
+guaranteed to generate the same random number sequence on all
+platforms. This makes it possible to reproduce stochastic simulations.
+Thus, if you run the example multiple times, you get the same ten
+numbers, because the generator is always seeded with 42.
+
+Often one wants different runs to generate different random number
+sequences, which creates a chicken and the egg problem: how can we
+select a pseudorandom seed for the pseudorandom number generator?
+Calling \ccode{esl\_randomness\_Create(0)} (i.e., a seed argument of
+0) causes Easel to select an arbitrary seed. The arbitrary seed is
+constructed by a combination of the current wall clock time (in
+seconds), the elapsed cpu time since starting the program (in
+milliseconds or microseconds), and (if available) the process
+id.\footnote{Specifically, by a bitwise mixing function that combines
+  input from \ccode{time()}, \ccode{clock()}, and \ccode{getpid()}. On
+  some platforms, \ccode{getpid()} is not available, and an arbitrary
+  constant is used instead; on those platforms, arbitrary seeds are a
+  little less arbitrary, but are still quite randomly distributed.  It
+  is improbable to get two generators with the same arbitrary seed; to
+  try, you would have to start two generators in the same process at
+  the same time.} Two different \ccode{ESL\_RANDOMNESS} objects
+created this way are expected to always produce different pseudorandom
+number sequences.
+
+
diff --git a/esl_randomseq.c b/esl_randomseq.c
new file mode 100644
index 0000000..7149284
--- /dev/null
+++ b/esl_randomseq.c
@@ -0,0 +1,2118 @@
+/* Generating, shuffling, and randomizing sequences.
+ * 
+ * Contents:
+ *   1. Generating simple random character strings.
+ *   2. Generating iid sequences.
+ *   3. Shuffling sequences. 
+ *   4. Randomizing sequences.
+ *   5. Generating iid sequences (digital mode).
+ *   6. Shuffling sequences (digital mode).
+ *   7. Randomizing sequences (digital mode).
+ *   8. Statistics drivers.
+ *   9. Unit tests.
+ *  10. Test driver.
+ *  11. Example.
+ *  12. Copyright and license information 
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <time.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_random.h"
+#include "esl_randomseq.h"
+
+
+/*****************************************************************
+ * 1. Generating simple random character strings.
+ *****************************************************************/
+
+/* Function:  esl_rsq_Sample()
+ * Synopsis:  Generate a random character string.
+ *
+ * Purpose:   Sample a random character string of length <L>, 
+ *            consisting of characters in the set defined by
+ *            an integer flag <allowed_chars>, using 
+ *            random number generator <rng>. 
+ * 
+ *            Return the new NUL-terminated string in <*ret_s>.  This
+ *            may either be a new allocation, or in pre-allocated
+ *            storage provided by the caller. If caller passes
+ *            <*ret_s> as <NULL>, new space is allocated, and the
+ *            caller is responsible for freeing it. That is: 
+ *              \begin{cchunk}
+ *                 char *s  = NULL; 
+ *                 esl_rsq_Sample(..., &s); 
+ *                 free(s);
+ *               \end{cchunk}
+ *
+ *            If caller passes a non-<NULL> <*ret_s>, it is assumed to
+ *            be a preallocated space of at least <L+1> characters,
+ *            and caller is (of course) responsible for freeing
+ *            it. That is: 
+ *                \begin{cchunk}
+ *                   char *s = malloc(L+1);
+ *                   esl_rsq_Sample(...,L, &s);
+ *                   free(s);
+ *                \end{cchunk}
+ *            
+ *            Allowed values of the flag <allowed_char_flag> mirror
+ *            the standard C99 character set functions in <ctype.h>:
+ *            
+ *            | <eslRSQ_SAMPLE_ALNUM>  |  isalnum()  | isalpha() or isdigit() |
+ *            | <eslRSQ_SAMPLE_ALPHA>  |  isalpha()  | islower() or isupper() |
+ *            | <eslRSQ_SAMPLE_LOWER>  |  islower()  | [a-z] |
+ *            | <eslRSQ_SAMPLE_UPPER>  |  isupper()  | [A-Z] |
+ *            | <eslRSQ_SAMPLE_DIGIT>  |  isdigit()  | [0-9] |
+ *            | <eslRSQ_SAMPLE_XDIGIT> |  isxdigit() | [0-9] or [a-f] or [A-F] |
+ *            | <eslRSQ_SAMPLE_CNTRL>  |  iscntrl()  | ASCII control characters |
+ *            | <eslRSQ_SAMPLE_GRAPH>  |  isgraph()  | any printing char except space |
+ *            | <eslRSQ_SAMPLE_SPACE>  |  isspace()  | space, and other whitespace such as tab, newline |
+ *            | <eslRSQ_SAMPLE_BLANK>  |  isblank()  | space or tab |
+ *            | <eslRSQ_SAMPLE_PRINT>  |  isprint()  | any printing char including space |
+ *            | <eslRSQ_SAMPLE_PUNCT>  |  ispunct()  | punctuation |
+ *
+ *            Note that with <eslRSQ_SAMPLE_CNTRL>, your string
+ *            may sample NUL control characters (<0>), in addition to
+ *            the string-terminating one at <(*ret_s)[L]>, so <strlen(*ret_s)>
+ *            may not equal <L> in this case. 
+ *             
+ *            These values are exclusive: you use one and only one of
+ *            them as <allowed_chars>, you can't logically OR or NOT
+ *            them together.
+ *
+ * Args:      rng           - ESL_RANDOMNESS object, the random number generator
+ *            allowed_chars - allowed character set flag: eslRSQ_SAMPLE_*
+ *            L             - length of string to sample
+ *            ret_s         - RETURN: the NUL-terminated string
+ *
+ * Returns:   <eslOK> on success; <*ret_s> is the sampled string, which was
+ *            newly allocated here, and caller becomes responsible for free'ing.
+ *
+ * Throws:    <eslEMEM> on allocation error; <eslEINVAL> if caller 
+ *            passes an invalid value of <allowed_chars>. Now <*ret_s> 
+ *            is <NULL>.
+ */
+int
+esl_rsq_Sample(ESL_RANDOMNESS *rng, int allowed_chars, int L, char **ret_s)
+{
+  char *s = *ret_s;  // if s == NULL, we will allocate here. Else, we're using caller-provided allocation
+  int   n = 0;
+  char  c[127];
+  int   x,i;
+  int   status;
+
+  /* We can't portably make assumptions about char codes (EBCDIC,
+   * ASCII...); and we don't want to write a bunch of fiddly overhead
+   * initializing static tables. So, quickly and portably build an
+   * array c[0..n-1] of characters we will sample uniformly from.
+   * RNG sampling is fairly compute-intensive anyway, so this time
+   * should disappear in the noise of that.
+   */
+  switch (allowed_chars) {
+  case eslRSQ_SAMPLE_ALNUM:  for (x = 0; x < 128; x++) if (isalnum(x))  c[n++] = x; break;
+  case eslRSQ_SAMPLE_ALPHA:  for (x = 0; x < 128; x++) if (isalpha(x))  c[n++] = x; break;
+  case eslRSQ_SAMPLE_LOWER:  for (x = 0; x < 128; x++) if (islower(x))  c[n++] = x; break;
+  case eslRSQ_SAMPLE_UPPER:  for (x = 0; x < 128; x++) if (isupper(x))  c[n++] = x; break;
+  case eslRSQ_SAMPLE_DIGIT:  for (x = 0; x < 128; x++) if (isdigit(x))  c[n++] = x; break;
+  case eslRSQ_SAMPLE_XDIGIT: for (x = 0; x < 128; x++) if (isxdigit(x)) c[n++] = x; break;
+  case eslRSQ_SAMPLE_CNTRL:  for (x = 0; x < 128; x++) if (iscntrl(x))  c[n++] = x; break;
+  case eslRSQ_SAMPLE_GRAPH:  for (x = 0; x < 128; x++) if (isgraph(x))  c[n++] = x; break;
+  case eslRSQ_SAMPLE_SPACE:  for (x = 0; x < 128; x++) if (isspace(x))  c[n++] = x; break;
+  case eslRSQ_SAMPLE_BLANK:  for (x = 0; x < 128; x++) if (isblank(x))  c[n++] = x; break;
+  case eslRSQ_SAMPLE_PRINT:  for (x = 0; x < 128; x++) if (isprint(x))  c[n++] = x; break;
+  case eslRSQ_SAMPLE_PUNCT:  for (x = 0; x < 128; x++) if (ispunct(x))  c[n++] = x; break;
+  default: ESL_XEXCEPTION(eslEINVAL, "bad flag; wanted something like eslRSQ_SAMPLE_ALPHA");
+  }
+
+  if (!s) ESL_ALLOC(s, sizeof(char) * (L+1)); /* +\0 */
+
+  for (i = 0; i < L; i++)
+    s[i] = c[ esl_rnd_Roll(rng, n) ];
+  s[L] = '\0';
+  
+  *ret_s = s;   // if using caller-provided space, this is a no-op, passing back the same *ret_s we got.
+  return eslOK;
+
+ ERROR:
+  if (! *ret_s && s) free(s);  // if we allocated s here, clean up.
+  return status;
+}
+
+
+/*****************************************************************
+ *# 1. Generating iid sequences.
+ *****************************************************************/ 
+
+/* Function: esl_rsq_IID()
+ * Synopsis: Generate an iid random text sequence.
+ * Incept:   SRE, Thu Aug  5 09:03:03 2004 [St. Louis]
+ *
+ * Purpose:  Generate a <NUL>-terminated i.i.d. symbol string of length <L>,
+ *           $0..L-1$, and leave it in <s>. The symbol alphabet is given
+ *           as a string <alphabet> of <K> total symbols, and the iid
+ *           probability of each residue is given in <p>. The caller
+ *           must provide an <s> that is allocated for at least
+ *           <(L+1)*sizeof(char)>, room for <L> residues and the <NUL> terminator.
+ *           
+ *           <esl_rsq_fIID()> does the same, but for a floating point
+ *           probability vector <p>, rather than a double precision
+ *           vector.
+ *
+ * Args:     r         - ESL_RANDOMNESS object
+ *           alphabet  - e.g. "ACGT"
+ *           p         - probability distribution [0..n-1]
+ *           K         - number of symbols in alphabet
+ *           L         - length of generated sequence
+ *           s         - the generated sequence.
+ *                       Caller allocated, >= (L+1) * sizeof(char).
+ *            
+ * Return:   <eslOK> on success.
+ */
+int
+esl_rsq_IID(ESL_RANDOMNESS *r, const char *alphabet, const double *p, int K, int L, char *s)
+{
+  int   x;
+
+  for (x = 0; x < L; x++)
+    s[x] = alphabet[esl_rnd_DChoose(r,p,K)];
+  s[x] = '\0';
+  return eslOK;
+}
+int
+esl_rsq_fIID(ESL_RANDOMNESS *r, const char *alphabet, const float *p, int K, int L, char *s)
+{
+  int   x;
+
+  for (x = 0; x < L; x++)
+    s[x] = alphabet[esl_rnd_FChoose(r,p,K)];
+  s[x] = '\0';
+  return eslOK;
+}
+/*------------ end, generating iid sequences --------------------*/
+
+
+/*****************************************************************
+ *# 2. Shuffling sequences.
+ *****************************************************************/
+
+/* Function:  esl_rsq_CShuffle()
+ * Synopsis:  Shuffle a text sequence.
+ * Incept:    SRE, Fri Feb 23 08:17:50 2007 [Casa de Gatos]
+ *
+ * Purpose:   Returns a shuffled version of <s> in <shuffled>, given
+ *            a source of randomness <r>.
+ *            
+ *            Caller provides allocated storage for <shuffled>, for at
+ *            least the same length as <s>.
+ *
+ *            <shuffled> may also point to the same storage as <s>,
+ *            in which case <s> is shuffled in place.
+ *            
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_rsq_CShuffle(ESL_RANDOMNESS *r, const char  *s, char *shuffled)
+{
+  int  L, i;
+  char c;
+
+  L = strlen(s);
+  if (shuffled != s) strcpy(shuffled, s);
+  while (L > 1) {
+    i             = esl_rnd_Roll(r, L);
+    c             = shuffled[i];
+    shuffled[i]   = shuffled[L-1];
+    shuffled[L-1] = c;
+    L--;
+  }
+  return eslOK;
+}
+
+/* Function:  esl_rsq_CShuffleDP()
+ * Synopsis:  Shuffle a text sequence, preserving diresidue composition.
+ * Incept:    SRE, Fri Feb 23 08:56:03 2007 [Casa de Gatos]
+ *
+ * Purpose:   Given string <s>, and a source of randomness <r>,
+ *            returns shuffled version in <shuffled>. The shuffle
+ *            is a "doublet-preserving" (DP) shuffle which
+ *            shuffles a sequence while exactly preserving both mono-
+ *            and di-symbol composition. 
+ *            
+ *            <s> may only consist of alphabetic characters [a-zA-Z].
+ *            The shuffle is done case-insensitively. The shuffled
+ *            string result is all upper case.
+ *
+ *            Caller provides storage in <shuffled> of at least the
+ *            same length as <s>.
+ *            
+ *            <shuffled> may also point to the same storage as <s>,
+ *            in which case <s> is shuffled in place.
+ *            
+ *            The algorithm does an internal allocation of a
+ *            substantial amount of temporary storage, on the order of
+ *            <26 * strlen(s)>, so an allocation failure is possible
+ *            if <s> is long enough.
+ *
+ *            The algorithm is a search for a random Eulerian walk on
+ *            a directed multigraph \citep{AltschulErickson85}.
+ *            
+ *            If <s> is of length 2 or less, this is a no-op, and
+ *            <shuffled> is a copy of <s>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <s> contains nonalphabetic characters.
+ *            <eslEMEM> on allocation failure.
+ */
+int
+esl_rsq_CShuffleDP(ESL_RANDOMNESS *r, const char *s, char *shuffled)
+{
+  int    status;          /* Easel return status code */
+  int    len;	          /* length of s */
+  int    pos;	          /* a position in s or shuffled */
+  int    x,y;             /* indices of two characters */
+  char **E  = NULL;       /* edge lists: E[0] is the edge list from vertex A */
+  int   *nE = NULL;       /* lengths of edge lists */
+  int   *iE = NULL;       /* positions in edge lists */
+  int    n;	          /* tmp: remaining length of an edge list to be shuffled */
+  char   sf;              /* last character in shuffled */
+  char   Z[26];           /* connectivity in last edge graph Z */ 
+  int    keep_connecting; /* flag used in Z connectivity algorithm */
+  int    is_eulerian;	  /* flag used for when we've got a good Z */
+  
+  /* First, verify that the string is entirely alphabetic. */
+  len = strlen(s);
+  for (pos = 0; pos < len; pos++)
+    if (! isalpha((int) s[pos]))
+      ESL_EXCEPTION(eslEINVAL, "String contains nonalphabetic characters");
+
+  /* The edge case of len <= 2 */
+  if (len <= 2)
+    {
+      if (s != shuffled) strcpy(shuffled, s);
+      return eslOK;
+    }
+
+  /* Allocations. */
+  ESL_ALLOC(E,  sizeof(char *) * 26);   for (x = 0; x < 26; x++) E[x] = NULL;
+  ESL_ALLOC(nE, sizeof(int)    * 26);   for (x = 0; x < 26; x++) nE[x] = 0;
+  ESL_ALLOC(iE, sizeof(int)    * 26);   for (x = 0; x < 26; x++) iE[x] = 0; 
+  for (x = 0; x < 26; x++) 
+    ESL_ALLOC(E[x], sizeof(char) * (len-1));
+
+  /* "(1) Construct the doublet graph G and edge ordering E
+   *      corresponding to S."
+   * 
+   * Note that these also imply the graph G; and note,
+   * for any list x with nE[x] = 0, vertex x is not part
+   * of G.
+   */
+  x = toupper((int) s[0]) - 'A';
+  for (pos = 1; pos < len; pos++)
+    {
+      y = toupper((int) s[pos]) - 'A';
+      E[x][nE[x]] = y;
+      nE[x]++;
+      x = y;
+    }
+  
+  /* Now we have to find a random Eulerian edge ordering. */
+  sf = toupper((int) s[len-1]) - 'A'; 
+  is_eulerian = 0;
+  while (! is_eulerian)
+    {
+      /* "(2) For each vertex s in G except s_f, randomly select
+       *      one edge from the s edge list of E(S) to be the
+       *      last edge of the s list in a new edge ordering."
+       *
+       * select random edges and move them to the end of each 
+       * edge list.
+       */
+      for (x = 0; x < 26; x++)
+	{
+	  if (nE[x] == 0 || x == sf) continue;
+	  pos           = esl_rnd_Roll(r, nE[x]);
+	  ESL_SWAP(E[x][pos], E[x][nE[x]-1], char);
+	}
+
+      /* "(3) From this last set of edges, construct the last-edge
+       *      graph Z and determine whether or not all of its
+       *      vertices are connected to s_f."
+       * 
+       * a probably stupid algorithm for looking at the
+       * connectivity in Z: iteratively sweep through the
+       * edges in Z, and build up an array (confusing called Z[x])
+       * whose elements are 1 if x is connected to sf, else 0.
+       */
+      for (x = 0; x < 26; x++) Z[x] = 0;
+      Z[(int) sf] = keep_connecting = 1;
+
+      while (keep_connecting) {
+	keep_connecting = 0;
+	for (x = 0; x < 26; x++) {
+	  if (nE[x] == 0) continue;
+	  y = E[x][nE[x]-1];            /* xy is an edge in Z */
+	  if (Z[x] == 0 && Z[y] == 1) {  /* x is connected to sf in Z */
+	    Z[x] = 1;
+	    keep_connecting = 1;
+	  }
+	}
+      }
+
+      /* if any vertex in Z is tagged with a 0, it's
+       * not connected to sf, and we won't have a Eulerian
+       * walk.
+       */
+      is_eulerian = 1;
+      for (x = 0; x < 26; x++) {
+	if (nE[x] == 0 || x == sf) continue;
+	if (Z[x] == 0) {
+	  is_eulerian = 0;
+	  break;
+	}
+      }
+
+      /* "(4) If any vertex is not connected in Z to s_f, the
+       *      new edge ordering will not be Eulerian, so return to
+       *      (2). If all vertices are connected in Z to s_f, 
+       *      the new edge ordering will be Eulerian, so
+       *      continue to (5)."
+       *      
+       * e.g. note infinite loop while is_eulerian is FALSE.
+       */
+    }
+
+  /* "(5) For each vertex s in G, randomly permute the remaining
+   *      edges of the s edge list of E(S) to generate the s
+   *      edge list of the new edge ordering E(S')."
+   *      
+   * Essentially a StrShuffle() on the remaining nE[x]-1 elements
+   * of each edge list; unfortunately our edge lists are arrays,
+   * not strings, so we can't just call out to StrShuffle().
+   */
+  for (x = 0; x < 26; x++)
+    for (n = nE[x] - 1; n > 1; n--)
+      {
+	pos       = esl_rnd_Roll(r, n);
+	ESL_SWAP(E[x][pos], E[x][n-1], char);
+      }
+
+  /* "(6) Construct sequence S', a random DP permutation of
+   *      S, from E(S') as follows. Start at the s_1 edge list.
+   *      At each s_i edge list, add s_i to S', delete the
+   *      first edge s_i,s_j of the edge list, and move to
+   *      the s_j edge list. Continue this process until
+   *      all edge lists are exhausted."
+   */ 
+  pos = 0; 
+  x = toupper((int) s[0]) - 'A';
+  while (1) 
+    {
+      shuffled[pos++] = 'A'+ x; /* add s_i to S' */
+      
+      y = E[x][iE[x]];
+      iE[x]++;			/* "delete" s_i,s_j from edge list */
+  
+      x = y;			/* move to s_j edge list. */
+
+      if (iE[x] == nE[x])
+	break;			/* the edge list is exhausted. */
+    }
+  shuffled[pos++] = 'A' + sf;
+  shuffled[pos]   = '\0';  
+
+  /* Reality checks.
+   */
+  if (x   != sf)  ESL_XEXCEPTION(eslEINCONCEIVABLE, "hey, you didn't end on s_f.");
+  if (pos != len) ESL_XEXCEPTION(eslEINCONCEIVABLE, "hey, pos (%d) != len (%d).", pos, len);
+  
+  /* Free and return.
+   */
+  esl_Free2D((void **) E, 26);
+  free(nE);
+  free(iE);
+  return eslOK;
+
+ ERROR:
+  esl_Free2D((void **) E, 26);
+  if (nE != NULL) free(nE);
+  if (iE != NULL) free(iE);
+  return status;
+}
+
+
+/* Function:  esl_rsq_CShuffleKmers()
+ * Synopsis:  Shuffle k-mers in a text sequence.
+ * Incept:    SRE, Tue Nov 17 16:55:57 2009 [NHGRI retreat, Gettysburg]
+ *
+ * Purpose:   Consider a text sequence <s> as a string of nonoverlapping
+ *            k-mers of length <K>. Shuffle the k-mers, given a random
+ *            number generator <r>. Put the shuffled sequence in
+ *            <shuffled>.
+ *            
+ *            If the length of <s> is not evenly divisible by <K>, the
+ *            remaining residues are left (unshuffled) as a prefix to
+ *            the shuffled k-mers.
+ *            
+ *            For example, shuffling ABCDEFGHIJK as k=3-mers might
+ *            result in ABFIJKFGHCDE.
+ *            
+ *            Caller provides allocated storage for <shuffled>,
+ *            for at least the same length as <s>. 
+ *            
+ *            <shuffled> may also point to the same storage as <s>,
+ *            in which case <s> is shuffled in place.
+ *            
+ *            There is almost no formally justifiable reason why you'd
+ *            use this shuffle -- it's not like it preserves any
+ *            particularly well-defined statistical properties of the
+ *            sequence -- but it's a quick and dirty way to sort of
+ *            maybe possibly preserve some higher-than-monomer
+ *            statistics.
+ *
+ * Args:      r        - an <ESL_RANDOMNESS> random generator
+ *            s        - sequence to shuffle
+ *            K        - size of k-mers to break <s> into
+ *            shuffled - RESULT: the shuffled sequence
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_rsq_CShuffleKmers(ESL_RANDOMNESS *r, const char *s, int K, char *shuffled)
+{
+  int   L = strlen(s);
+  int   W = L / K;		/* number of kmers "words" excluding leftover prefix */
+  int   P = L % K;		/* leftover residues in prefix */
+  int   i;
+  char *swap = NULL;
+  int   status;
+
+  if (shuffled != s) strcpy(shuffled, s);
+  ESL_ALLOC(swap, sizeof(char) * K);
+  while (W > 1) 
+    {	/* use memmove, not strncpy or memcpy, because i==W-1 creates an overlap case */
+      i = esl_rnd_Roll(r, W);	                                                 /* pick a word          */
+      memmove(swap,                   shuffled + P + i*K,     K * sizeof(char)); /* copy it to tmp space */
+      memmove(shuffled + P + i*K,     shuffled + P + (W-1)*K, K * sizeof(char)); /* move word W-1 to i   */
+      memmove(shuffled + P + (W-1)*K, swap,                   K * sizeof(char)); /* move word i to W-1   */
+      W--;
+    }
+  free(swap);
+  return eslOK;
+
+ ERROR:
+  free(swap);
+  return status;
+}
+
+
+/* Function:  esl_rsq_CReverse()
+ * Synopsis:  Reverse a string.
+ * Incept:    SRE, Sat Feb 24 10:06:34 2007 [Casa de Gatos]
+ *
+ * Purpose:   Returns a reversed version of <s> in <rev>. 
+ * 
+ *            There are no restrictions on the symbols that <s>
+ *            might contain.
+ * 
+ *            Caller provides storage in <rev> for at least
+ *            <(strlen(s)+1)*sizeof(char)>.
+ *            
+ *            <s> and <rev> can point to the same storage, in which
+ *            case <s> is reversed in place.
+ *            
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_rsq_CReverse(const char *s, char *rev)
+{
+  int  L, i;
+  char c;
+  
+  L = strlen(s);
+  for (i = 0; i < L/2; i++)
+    {				/* swap ends */
+      c          = s[L-i-1];
+      rev[L-i-1] = s[i];
+      rev[i]     = c;
+    }
+  if (L%2) { rev[i] = s[i]; } /* don't forget middle residue in odd-length s */
+  rev[L] = '\0';
+  return eslOK;
+}
+
+/* Function: esl_rsq_CShuffleWindows()
+ * Synopsis: Shuffle local windows of a text string.
+ * Incept:   SRE, Sat Feb 24 10:17:59 2007 [Casa de Gatos]
+ * 
+ * Purpose:  Given string <s>, shuffle residues in nonoverlapping
+ *           windows of width <w>, and put the result in <shuffled>.
+ *           See [Pearson88].
+ *
+ *           <s> and <shuffled> can be identical to shuffle in place.
+ * 
+ *           Caller provides storage in <shuffled> for at least
+ *           <(strlen(s)+1)*sizeof(char)>.
+ *
+ * Args:     s        - string to shuffle in windows
+ *           w        - window size (typically 10 or 20)      
+ *           shuffled - allocated space for window-shuffled result.
+ *           
+ * Return:   <eslOK> on success.
+ */
+int
+esl_rsq_CShuffleWindows(ESL_RANDOMNESS *r, const char *s, int w, char *shuffled)
+{
+  int  L;
+  char c;
+  int  i, j, k;
+
+  L = strlen(s);
+  if (shuffled != s) strcpy(shuffled, s);
+  for (i = 0; i < L; i += w)
+    for (j = ESL_MIN(L-1, i+w-1); j > i; j--)
+      {
+	k             = i + esl_rnd_Roll(r, j-i);
+	c             = shuffled[k];  /* semantics of a j,k swap, because we might be shuffling in-place */
+	shuffled[k]   = shuffled[j];
+	shuffled[j]   = c;
+      }
+  return eslOK;
+}
+/*------------------ end, shuffling sequences -------------------*/
+
+
+
+/*****************************************************************
+ *# 3. Randomizing sequences
+ *****************************************************************/
+
+/* Function:  esl_rsq_CMarkov0()
+ * Synopsis:  Generate new text string of same 0th order Markov properties.
+ * Incept:    SRE, Sat Feb 24 08:47:43 2007 [Casa de Gatos]
+ *
+ * Purpose:   Makes a random string <markoved> with the same length and
+ *            0-th order Markov properties as <s>, given randomness
+ *            source <r>.
+ *            
+ *            <s> and <markoved> can be point to the same storage, in which
+ *            case <s> is randomized in place, destroying the original
+ *            string.
+ *            
+ *            <s> must consist only of alphabetic characters [a-zA-Z].
+ *            Statistics are collected case-insensitively over 26 possible
+ *            residues. The random string is generated all upper case.
+ *
+ * Args:      s         - input string
+ *            markoved  - randomly generated string 
+ *                        (storage allocated by caller, at least strlen(s)+1)
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <s> contains nonalphabetic characters.
+ */
+int 
+esl_rsq_CMarkov0(ESL_RANDOMNESS *r, const char *s, char *markoved)
+{
+  int    L;
+  int    i; 
+  double p[26];		/* initially counts, then probabilities */
+  int    x;
+
+  /* First, verify that the string is entirely alphabetic. */
+  L = strlen(s);
+  for (i = 0; i < L; i++)
+    if (! isalpha((int) s[i])) 
+      ESL_EXCEPTION(eslEINVAL, "String contains nonalphabetic characters");
+
+  /* Collect zeroth order counts and convert to frequencies. 
+   */
+  for (x = 0; x < 26; x++) p[x] = 0.;
+  for (i = 0; i < L; i++)
+    p[(int)(toupper((int) s[i]) - 'A')] += 1.0;
+  if (L > 0)
+    for (x = 0; x < 26; x++) p[x] /= (double) L;
+
+  /* Generate a random string using those p's. */
+  for (i = 0; i < L; i++)
+    markoved[i] = esl_rnd_DChoose(r, p, 26) + 'A';
+  markoved[i] = '\0';
+
+  return eslOK;
+}
+
+/* Function:  esl_rsq_CMarkov1()
+ * Synopsis:  Generate new text string of same 1st order Markov properties.
+ * Incept:    SRE, Sat Feb 24 09:21:46 2007 [Casa de Gatos]
+ *
+ * Purpose:   Makes a random string <markoved> with the same length and
+ *            1st order (di-residue) Markov properties as <s>, given
+ *            randomness source <r>.
+ *            
+ *            <s> and <markoved> can be point to the same storage, in which
+ *            case <s> is randomized in place, destroying the original
+ *            string.
+ *            
+ *            <s> must consist only of alphabetic characters [a-zA-Z].
+ *            Statistics are collected case-insensitively over 26 possible
+ *            residues. The random string is generated all upper case.
+ *            
+ *            If <s> is of length 2 or less, this is a no-op, and
+ *            <markoved> is a copy of <s>.
+ *
+ * Args:      s         - input string
+ *            markoved  - new randomly generated string 
+ *                        (storage allocated by caller, at least strlen(s)+1)
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <s> contains nonalphabetic characters.
+ */
+int 
+esl_rsq_CMarkov1(ESL_RANDOMNESS *r, const char *s, char *markoved) 
+{
+  int    L;
+  int    i; 
+  int    x,y;
+  int    i0;			/* initial symbol */
+  double p[26][26];		/* conditional probabilities p[x][y] = P(y | x) */
+  double p0[26];		/* marginal probabilities P(x), just for initial residue. */
+
+  /* First, verify that the string is entirely alphabetic. */
+  L = strlen(s);
+  for (i = 0; i < L; i++)
+    if (! isalpha((int) s[i])) 
+     ESL_EXCEPTION(eslEINVAL, "String contains nonalphabetic characters");
+
+  /* The edge case of len <= 2 */
+  if (L <= 2)
+    {
+      if (s != markoved) strcpy(markoved, s);
+      return eslOK;
+    }
+
+  /* Collect first order counts and convert to frequencies. */
+  for (x = 0; x < 26; x++) 
+    for (y = 0; y < 26; y++) 
+      p[x][y] = 0.;
+
+  i0 = x = toupper((int) s[0]) - 'A';
+  for (i = 1; i < L; i++) 
+    {
+      y = toupper((int) s[i]) - 'A';
+      p[x][y] += 1.0;
+      x = y;
+    }
+  p[x][i0] += 1.0; 		/* "circularized": avoids a bug; see markov1_bug utest */
+
+  for (x = 0; x < 26; x++) 
+    {
+      p0[x] = 0.;
+      for (y = 0; y < 26; y++)
+	p0[x] += p[x][y];	/* now p0[x] = marginal counts of x, inclusive of 1st residue */
+
+      for (y = 0; y < 26; y++) 
+	p[x][y] = (p0[x] > 0. ? p[x][y] / p0[x] : 0.); /* now p[x][y] = P(y | x) */
+      
+      p0[x] /= (double) L;	/* now p0[x] = marginal P(x) */
+    }
+
+  /* Generate a random string using those p's. */
+  x = esl_rnd_DChoose(r, p0, 26);
+  markoved[0] = x + 'A';
+  for (i = 1; i < L; i++)
+    {
+      y           = esl_rnd_DChoose(r, p[x], 26);
+      markoved[i] = y + 'A';
+      x           = y;
+    } 
+  markoved[L] = '\0';
+
+  return eslOK;
+}
+/*----------------- end, randomizing sequences ------------------*/
+
+
+
+/*****************************************************************
+ *# 4. Generating iid sequences (digital mode).
+ *****************************************************************/
+
+/* Function: esl_rsq_xIID()
+ * Synopsis: Generate an iid random digital sequence.
+ * Incept:   SRE, Sat Feb 17 16:39:01 2007 [Casa de Gatos]
+ *
+ * Purpose:  Generate an i.i.d. digital sequence of length <L> (1..L) and
+ *           leave it in <dsq>. The i.i.d. probability of each residue is
+ *           given in the probability vector <p>, and the number of
+ *           possible residues (the alphabet size) is given by <K>.
+ *           (Only the alphabet size <K> is needed here, as opposed to
+ *           a digital <ESL_ALPHABET>, but the caller presumably
+ *           has a digital alphabet.) The caller must provide a <dsq>
+ *           allocated for at least <L+2> residues of type <ESL_DSQ>,
+ *           room for <L> residues and leading/trailing digital sentinel bytes.
+ *           
+ *           <esl_rsq_xfIID()> does the same, but for a
+ *           single-precision float vector <p> rather than a
+ *           double-precision vector <p>.
+ *
+ * Args:     r         - ESL_RANDOMNESS object
+ *           p         - probability distribution [0..n-1]
+ *           K         - number of symbols in alphabet
+ *           L         - length of generated sequence
+ *           ret_s     - RETURN: the generated sequence. 
+ *                       (Caller-allocated, >= (L+2)*ESL_DSQ)
+ *
+ * Return:   <eslOK> on success.
+ */
+int
+esl_rsq_xIID(ESL_RANDOMNESS *r, const double *p, int K, int L, ESL_DSQ *dsq)
+{
+  int   x;
+
+  dsq[0] = dsq[L+1] = eslDSQ_SENTINEL;
+  for (x = 1; x <= L; x++) 
+    dsq[x] = esl_rnd_DChoose(r,p,K);
+  return eslOK;
+}
+int
+esl_rsq_xfIID(ESL_RANDOMNESS *r, const float *p, int K, int L, ESL_DSQ *dsq)
+{
+  int   x;
+
+  dsq[0] = dsq[L+1] = eslDSQ_SENTINEL;
+  for (x = 1; x <= L; x++) 
+    dsq[x] = esl_rnd_FChoose(r,p,K);
+  return eslOK;
+}
+
+
+/* Function:  esl_rsq_SampleDirty()
+ * Synopsis:  Sample a digital sequence, including noncanonicals.
+ * Incept:    SRE, Wed Feb 17 10:57:28 2016 [H1/76]
+ *
+ * Purpose:   Using random number generator <rng>, use probability
+ *            vector <p> to sample an iid digital sequence in alphabet
+ *            <abc> of length <L>. Store it in <dsq>. 
+ * 
+ *            The <dsq> space, allocated by the caller, has room for
+ *            at least <L+2> residues, counting the digital
+ *            sentinels. 
+ * 
+ *            Probability vector <p> has <Kp> terms, and sums to 1.0
+ *            over them. The probabilities in <p> for residues <K>,
+ *            <Kp-2>, and <Kp-1> (gap, nonresidue, missing) are
+ *            typically zero, to generate a standard unaligned digital
+ *            sequence with degenerate residues. To sample a random
+ *            "alignment", <p[K]> is nonzero.
+ *            
+ *            If <p> is <NULL>, then we sample a probability vector
+ *            according to the following rules. 
+ *               1. Sample pc, the probability of canonical
+ *                  vs. noncanonical residues, uniformly on [0,1).
+ *               2. Sample a p[] uniformly for canonical residues
+ *                  <0..K-1>, and renormalize by multiplying by pc.
+ *                  Sample a different p[] uniformly for noncanonical
+ *                  residues <K+1..Kp-3>, and renormalize by (1-pc).
+ *               3. p[] = 0 for gap residue K, nonresidue Kp-2, 
+ *                  missing residue Kp-1.
+ *            This usage is mainly intended to make it easy to
+ *            sample dirty edge cases for automated tests.
+ *
+ * Args:      rng  :  random number generator 
+ *            abc  :  digital alphabet
+ *            p    :  OPTIONAL: p[0..Kp-1] probability vector, or NULL
+ *            L    :  length of digital sequence to sample
+ *            dsq  :  resulting digital seq sample, caller-provided space
+ * 
+ * Returns:   <eslOK> on success
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_rsq_SampleDirty(ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, double **byp_p, int L, ESL_DSQ *dsq)
+{
+  double *p = NULL;    
+  int     i;
+  int     status;
+  
+  /* If p isn't provided, sample one. */
+  if ( esl_byp_IsProvided(byp_p)) 
+    p = *byp_p;
+  else
+    {
+      double pc = esl_random(rng); /* [0,1) */
+      int    x;
+      
+      ESL_ALLOC(p, sizeof(double) * abc->Kp);
+
+      esl_rnd_Dirichlet(rng, NULL /* i.e. uniform */, abc->K, p);
+      esl_rnd_Dirichlet(rng, NULL, (abc->Kp - abc->K - 3), (p + abc->K +1));  /* K+1..Kp-3 range of alphabet */
+      for (x = 0;        x <  abc->K;    x++) p[x] = p[x] * pc;
+      for (x = abc->K+1; x <= abc->Kp-3; x++) p[x] = p[x] * (1.-pc);
+      p[abc->K]    = 0.;
+      p[abc->Kp-2] = 0.;
+      p[abc->Kp-1] = 0.;
+    }
+
+  dsq[0]   = eslDSQ_SENTINEL;
+  for (i = 1; i <= L; i++)
+    dsq[i] = esl_rnd_DChoose(rng, p, abc->Kp);
+  dsq[L+1] = eslDSQ_SENTINEL;
+
+  if      (esl_byp_IsReturned(byp_p)) *byp_p = p;
+  else if (esl_byp_IsInternal(byp_p)) free(p); 
+  return eslOK;
+
+ ERROR:
+  if (! esl_byp_IsProvided(byp_p) && p) free(p);
+  if (  esl_byp_IsReturned(byp_p))     *byp_p = NULL;
+  return status;
+}
+/*--------------------- end, digital generation ---------------- */
+
+
+
+/*****************************************************************
+ *# 5. Shuffling sequences (digital mode)
+ *****************************************************************/
+
+/* Function:  esl_rsq_XShuffle()
+ * Synopsis:  Shuffle a digital sequence.
+ * Incept:    SRE, Fri Feb 23 08:24:20 2007 [Casa de Gatos]
+ *
+ * Purpose:   Given a digital sequence <dsq> of length <L> residues,
+ *            shuffle it, and leave the shuffled version in <shuffled>.
+ *            
+ *            Caller provides allocated storage for <shuffled> for at
+ *            least the same length as <dsq>. 
+ * 
+ *            <shuffled> may also point to the same storage as <dsq>,
+ *            in which case <dsq> is shuffled in place.
+ *            
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_rsq_XShuffle(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, ESL_DSQ *shuffled)
+{
+  int     i;
+  ESL_DSQ x;
+
+  if (dsq != shuffled) esl_abc_dsqcpy(dsq, L, shuffled);
+  while (L > 1) {
+    i           = 1 + esl_rnd_Roll(r, L);
+    x           = shuffled[i];
+    shuffled[i] = shuffled[L];
+    shuffled[L] = x;
+    L--;
+  }
+  return eslOK;
+}
+
+/* Function:  esl_rsq_XShuffleDP()
+ * Synopsis:  Shuffle a digital sequence, preserving diresidue composition.
+ * Incept:    SRE, Fri Feb 23 09:23:47 2007 [Casa de Gatos]
+ *
+ * Purpose:   Same as <esl_rsq_CShuffleDP()>, except for a digital
+ *            sequence <dsq> of length <L>, encoded in a digital alphabet
+ *            of <K> residues. 
+ *            
+ *            <dsq> may only consist of residue codes <0..K-1>; if it
+ *            contains gaps, degeneracies, or missing data, pass the alphabet's
+ *            <Kp> size, not its canonical <K>.
+ *            
+ *            If <L> $\leq 2$, this is a no-op; <shuffled> is a copy of <dsq>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <s> contains digital residue codes
+ *            outside the range <0..K-1>.
+ *            <eslEMEM> on allocation failure.
+ */
+int
+esl_rsq_XShuffleDP(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *shuffled)
+{
+  int     status;           /* Easel return status code */
+  int     i;	            /* a position in dsq or shuffled */
+  ESL_DSQ x,y;              /* indices of two characters */
+  ESL_DSQ **E  = NULL;      /* edge lists: E[0] is the edge list from vertex A */
+  int     *nE  = NULL;      /* lengths of edge lists */
+  int     *iE  = NULL;      /* positions in edge lists */
+  ESL_DSQ *Z   = NULL;      /* connectivity in last edge graph Z */ 
+  int      n;	            /* tmp: remaining length of an edge list to be shuffled */
+  ESL_DSQ  sf;              /* last character in shuffled */
+
+  int      keep_connecting; /* flag used in Z connectivity algorithm */
+  int      is_eulerian;	    /* flag used for when we've got a good Z */
+  
+  /* First, verify that we can deal with all the residues in dsq. */
+  for (i = 1; i <= L; i++)
+    if (dsq[i] >= K)
+      ESL_EXCEPTION(eslEINVAL, "dsq contains unexpected residue codes");
+
+  /* The edge case of L <= 2 */
+  if (L <= 2)
+    {
+      if (dsq != shuffled) memcpy(shuffled, dsq, sizeof(ESL_DSQ) * (L+2));
+      return eslOK;
+    }
+
+  /* Allocations. */
+  ESL_ALLOC(nE, sizeof(int)       * K);  for (x = 0; x < K; x++) nE[x] = 0;
+  ESL_ALLOC(E,  sizeof(ESL_DSQ *) * K);  for (x = 0; x < K; x++) E[x]  = NULL;
+  ESL_ALLOC(iE, sizeof(int)       * K);  for (x = 0; x < K; x++) iE[x] = 0; 
+  ESL_ALLOC(Z,  sizeof(ESL_DSQ)   * K);
+  for (x = 0; x < K; x++) 
+    ESL_ALLOC(E[x], sizeof(ESL_DSQ) * (L-1));
+
+  /* "(1) Construct the doublet graph G and edge ordering E... */
+  x = dsq[1];
+  for (i = 2; i <= L; i++) {
+    E[x][nE[x]] = dsq[i];
+    nE[x]++;
+    x = dsq[i];
+  }
+  
+  /* Now we have to find a random Eulerian edge ordering. */
+  sf = dsq[L];
+  is_eulerian = 0;
+  while (! is_eulerian)
+    {
+      for (x = 0; x < K; x++) {
+	if (nE[x] == 0 || x == sf) continue;
+	i           = esl_rnd_Roll(r, nE[x]);
+	ESL_SWAP(E[x][i], E[x][nE[x]-1], ESL_DSQ);
+      }
+
+      for (x = 0; x < K; x++) Z[x] = 0;
+      Z[(int) sf] = keep_connecting = 1;
+      while (keep_connecting) {
+	keep_connecting = 0;
+	for (x = 0; x < K; x++) {
+	  if (nE[x] == 0) continue;
+	  y = E[x][nE[x]-1];            /* xy is an edge in Z */
+	  if (Z[x] == 0 && Z[y] == 1) {  /* x is connected to sf in Z */
+	    Z[x] = 1;
+	    keep_connecting = 1;
+	  }
+	}
+      }
+
+      is_eulerian = 1;
+      for (x = 0; x < K; x++) {
+	if (nE[x] == 0 || x == sf) continue;
+	if (Z[x] == 0) {
+	  is_eulerian = 0;
+	  break;
+	}
+      }
+    }
+
+  /* "(5) For each vertex s in G, randomly permute... */
+  for (x = 0; x < K; x++)
+    for (n = nE[x] - 1; n > 1; n--)
+      {
+	i       = esl_rnd_Roll(r, n);
+	ESL_SWAP(E[x][i], E[x][n-1], ESL_DSQ);
+      }
+
+  /* "(6) Construct sequence S'... */
+  i = 1; 
+  x = dsq[1];
+  while (1) {
+    shuffled[i++] = x; 
+    y = E[x][iE[x]++];
+    x = y;			
+    if (iE[x] == nE[x]) break;
+  }
+  shuffled[i++] = sf;
+  shuffled[i]   = eslDSQ_SENTINEL;
+  shuffled[0]   = eslDSQ_SENTINEL;
+
+  /* Reality checks. */
+  if (x != sf)   ESL_XEXCEPTION(eslEINCONCEIVABLE, "hey, you didn't end on s_f.");
+  if (i != L+1)  ESL_XEXCEPTION(eslEINCONCEIVABLE, "hey, i (%d) overran L+1 (%d).", i, L+1);
+  
+  esl_Free2D((void **) E, K);
+  free(nE);
+  free(iE);
+  free(Z);
+  return eslOK;
+
+ ERROR:
+  esl_Free2D((void **) E, K);
+  if (nE != NULL) free(nE);
+  if (iE != NULL) free(iE);
+  if (Z  != NULL) free(Z);
+  return status;
+}
+
+
+/* Function:  esl_rsq_XShuffleKmers()
+ * Synopsis:  Shuffle k-mers in a digital sequence.
+ *
+ * Purpose:   Same as <esl_rsq_CShuffleKmers()>, but shuffle digital 
+ *            sequence <dsq> of length <L> into digital result <shuffled>.
+ *
+ * Args:      r        - an <ESL_RANDOMNESS> random generator
+ *            dsq      - sequence to shuffle
+ *            K        - size of k-mers to break <s> into
+ *            shuffled - RESULT: the shuffled sequence
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_rsq_XShuffleKmers(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *shuffled)
+{
+  int   W = L / K;		/* number of kmers "words" excluding leftover prefix */
+  int   P = L % K;		/* leftover residues in prefix */
+  int   i;
+  char *swap = NULL;
+  int   status;
+
+  if (shuffled != dsq) esl_abc_dsqcpy(dsq, L, shuffled);
+  ESL_ALLOC(swap, sizeof(char) * K);
+  while (W > 1) 
+    {				/* use memmove, not memcpy, because i==W-1 is an overlap case */
+      i = esl_rnd_Roll(r, W);	                                                 /* pick a word          */
+      memmove(swap,                   shuffled + P + i*K,     K * sizeof(char)); /* copy it to tmp space */
+      memmove(shuffled + P + i*K,     shuffled + P + (W-1)*K, K * sizeof(char)); /* move word W-1 to i   */
+      memmove(shuffled + P + (W-1)*K, swap,                   K * sizeof(char)); /* move word i to W-1   */
+      W--;
+    }
+  free(swap);
+  return eslOK;
+
+ ERROR:
+  free(swap);
+  return status;
+}
+
+
+/* Function:  esl_rsq_XReverse()
+ * Synopsis:  Reverse a digital sequence.
+ * Incept:    SRE, Sat Feb 24 10:13:30 2007 [Casa de Gatos]
+ *
+ * Purpose:   Given a digital sequence <dsq> of length <L>, return
+ *            reversed version of it in <rev>. 
+ * 
+ *            Caller provides storage in <rev> for at least
+ *            <(L+2)*sizeof(ESL_DSQ)>.
+ *            
+ *            <s> and <rev> can point to the same storage, in which
+ *            case <s> is reversed in place.
+ *            
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_rsq_XReverse(const ESL_DSQ *dsq, int L, ESL_DSQ *rev)
+{
+  int     i;
+  ESL_DSQ x;
+  
+  for (i = 1; i <= L/2; i++)
+    {				/* swap ends */
+      x          = dsq[L-i+1];
+      rev[L-i+1] = dsq[i];
+      rev[i]     = x;
+    }
+  if (L%2) { rev[i] = dsq[i]; } /* don't forget middle residue in odd-length dsq */
+  rev[0]   = eslDSQ_SENTINEL;
+  rev[L+1] = eslDSQ_SENTINEL;
+  return eslOK;
+}
+
+
+/* Function: esl_rsq_XShuffleWindows()
+ * Synopsis: Shuffle local windows of a digital sequence.
+ * Incept:   SRE, Sat Feb 24 10:51:31 2007 [Casa de Gatos]
+ * 
+ * Purpose:  Given a digital sequence <dsq> of length <L>, shuffle
+ *           residues in nonoverlapping windows of width <w>, and put
+ *           the result in <shuffled>.  See [Pearson88].
+ *
+ *           Caller provides storage in <shuffled> for at least
+ *           <(L+2)*sizeof(ESL_DSQ)>.
+ *           
+ *           <dsq> and <shuffled> can be identical to shuffle in place.
+ *
+ * Args:     dsq      - digital sequence to shuffle in windows
+ *           L        - length of <dsq>
+ *           w        - window size (typically 10 or 20)      
+ *           shuffled - allocated space for window-shuffled result.
+ *           
+ * Return:   <eslOK> on success.
+ */
+int
+esl_rsq_XShuffleWindows(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int w, ESL_DSQ *shuffled)
+{
+  ESL_DSQ x;
+  int  i, j, k;
+
+  if (dsq != shuffled) esl_abc_dsqcpy(dsq, L, shuffled);
+  for (i = 1; i <= L; i += w)
+    for (j = ESL_MIN(L, i+w-1); j > i; j--)
+      {
+	k           = i + esl_rnd_Roll(r, j-i+1);
+	x           = shuffled[k];  /* semantics of a j,k swap, because we might be shuffling in-place */
+	shuffled[k] = shuffled[j];
+	shuffled[j] = x;
+      }
+  return eslOK;
+}
+
+/*------------------- end, digital shuffling  -------------------*/
+
+
+
+/*****************************************************************
+ *# 6. Randomizing sequences (digital mode)
+ *****************************************************************/
+
+/* Function:  esl_rsq_XMarkov0()
+ * Synopsis:  Generate new digital sequence of same 0th order Markov properties.
+ * Incept:    SRE, Sat Feb 24 09:12:32 2007 [Casa de Gatos]
+ *
+ * Purpose:   Same as <esl_rsq_CMarkov0()>, except for a digital
+ *            sequence <dsq> of length <L>, encoded in a digital 
+ *            alphabet of <K> residues; caller provides storage
+ *            for the randomized sequence <markoved> for at least 
+ *            <L+2> <ESL_DSQ> residues, including the two flanking
+ *            sentinel bytes.
+ *            
+ *            <dsq> therefore may only consist of residue codes
+ *            in the range <0..K-1>. If it contains gaps,
+ *            degeneracies, or missing data, pass the alphabet's
+ *            <Kp> size, not its canonical <K>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <s> contains digital residue codes outside
+ *            the range <0..K-1>.
+ *            <eslEMEM> on allocation failure.
+ */
+int 
+esl_rsq_XMarkov0(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *markoved)
+{
+  int     status;
+  int     i; 
+  double *p = NULL;	/* initially counts, then probabilities */
+  int     x;
+
+  /* First, verify that the string is entirely alphabetic. */
+  for (i = 1; i <= L; i++)
+    if (dsq[i] >= K)
+      ESL_XEXCEPTION(eslEINVAL, "String contains unexpected residue codes");
+
+  ESL_ALLOC(p, sizeof(double) * K);
+  for (x = 0; x < K; x++) p[x] = 0.;
+
+  for (i = 1; i <= L; i++)
+    p[(int) dsq[i]] += 1.0;
+  if (L > 0)
+    for (x = 0; x < K; x++) p[x] /= (double) L;
+
+  for (i = 1; i <= L; i++)
+    markoved[i] = esl_rnd_DChoose(r, p, K);
+  markoved[0]   = eslDSQ_SENTINEL;
+  markoved[L+1] = eslDSQ_SENTINEL;
+
+  free(p);
+  return eslOK;
+
+ ERROR:
+  if (p != NULL) free(p);
+  return status;
+}
+
+
+
+/* Function:  esl_rsq_XMarkov1()
+ * Synopsis:  Generate new digital sequence of same 1st order Markov properties.
+ * Incept:    SRE, Sat Feb 24 09:46:09 2007 [Casa de Gatos]
+ *
+ * Purpose:   Same as <esl_rsq_CMarkov1()>, except for a digital
+ *            sequence <dsq> of length <L>, encoded in a digital 
+ *            alphabet of <K> residues. Caller provides storage
+ *            for the randomized sequence <markoved> for at least 
+ *            <L+2> <ESL_DSQ> residues, including the two flanking
+ *            sentinel bytes.
+ *            
+ *            <dsq> and <markoved> can be point to the same storage, in which
+ *            case <dsq> is randomized in place, destroying the original
+ *            string.
+ *            
+ *            <dsq> therefore may only consist of residue codes
+ *            in the range <0..K-1>. If it contains gaps,
+ *            degeneracies, or missing data, pass the alphabet's
+ *            <Kp> size, not its canonical <K>.
+ *
+ *            If <L> $\leq 2$, this is a no-op; <markoved> is a copy of <dsq>.
+ *            
+ * Args:      dsq       - input digital sequence 1..L
+ *            L         - length of dsq
+ *            K         - residue codes in dsq are in range 0..K-1
+ *            markoved  - new randomly generated digital sequence;
+ *                        storage allocated by caller, at least (L+2)*ESL_DSQ;
+ *                        may be same as dsq to randomize in place.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <s> contains digital residue codes outside
+ *            the range <0..K-1>.
+ *            <eslEMEM> on allocation failure.
+ */
+int 
+esl_rsq_XMarkov1(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *markoved) 
+{
+  double **p  = NULL;	/* conditional probabilities p[x][y] = P(y | x) */
+  double  *p0 = NULL;	/* marginal probabilities P(x), just for initial residue. */
+  int      i; 
+  ESL_DSQ  x,y;
+  ESL_DSQ  i0;		/* initial symbol */
+  int      status;
+
+  /* validate the input string */
+  for (i = 1; i <= L; i++)
+    if (dsq[i] >= K)
+      ESL_XEXCEPTION(eslEINVAL, "String contains unexpected residue codes");
+
+  /* The edge case of L <= 2 */
+  if (L <= 2)
+    {
+      if (dsq != markoved) memcpy(markoved, dsq, sizeof(ESL_DSQ) * (L+2));
+      return eslOK;
+    }
+
+  /* allocations */
+  ESL_ALLOC(p0, sizeof(double)   * K);  for (x = 0; x < K; x++) p0[x] = 0.;
+  ESL_ALLOC(p,  sizeof(double *) * K);  for (x = 0; x < K; x++) p[x]  = NULL;
+  for (x = 0; x < K; x++)
+    { ESL_ALLOC(p[x], sizeof(double) * K); for (y = 0; y < K; y++) p[x][y] = 0.; }
+  
+  /* Collect first order counts and convert to frequencies. */
+  i0 = x = dsq[1];
+  for (i = 2; i <= L; i++) 
+    {
+      y = dsq[i];
+      p[x][y] += 1.0;
+      x = y;
+    }
+  p[x][i0] += 1.0;	/* "circularized": avoids a bug; see markov1_bug utest */
+
+  for (x = 0; x < K; x++) 
+    {
+      p0[x] = 0.;
+      for (y = 0; y < K; y++)
+	p0[x] += p[x][y];	/* now p0[x] = marginal counts of x, inclusive of 1st residue */
+
+      for (y = 0; y < K; y++) 
+	p[x][y] = (p0[x] > 0. ? p[x][y] / p0[x] : 0.);	/* now p[x][y] = P(y | x) */
+      
+      p0[x] /= (double) L;	/* now p0[x] = marginal P(x) inclusive of 1st residue */
+    }
+
+  /* Generate a random string using those p's. */
+  markoved[1] = esl_rnd_DChoose(r, p0, K);
+  for (i = 2; i <= L; i++)
+    markoved[i] = esl_rnd_DChoose(r, p[markoved[i-1]], K);
+
+  markoved[0]   = eslDSQ_SENTINEL;
+  markoved[L+1] = eslDSQ_SENTINEL;
+
+  esl_Free2D((void**)p, K);
+  free(p0);
+  return eslOK;
+
+ ERROR:
+  esl_Free2D((void**)p, K);
+  if (p0 != NULL) free(p0);
+  return status;
+}
+
+/*------------------ end, digital randomizing -------------------*/
+
+/*****************************************************************
+ * 7. Statistics driver.
+ *****************************************************************/ 
+
+/* This driver tests (and confirms) the intuition that using
+ * a DP shuffle on short sequences may be a bad idea; short sequences
+ * don't shuffle effectively.
+ * xref J3/20. 
+ */
+#ifdef eslRANDOMSEQ_STATS
+/* gcc -g -Wall -o randomseq_stats -L. -I. -DeslRANDOMSEQ_STATS esl_randomseq.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_distance.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_randomseq.h"
+#include "esl_stats.h"
+#include "esl_vectorops.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-d",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "diresidue shuffle",                                0 },
+  { "-R",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "reverse the sequence",                             0 },
+  { "-2",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "resample an independent sequence",                 0 },
+  { "-N",        eslARG_INT,  "10000",  NULL, NULL,  NULL,  NULL, NULL, "number of sampled sequences per length",           0 },
+  { "-s",        eslARG_INT,     "42",  NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                    0 },
+  { "--minL",    eslARG_INT,      "5",  NULL, NULL,  NULL,  NULL, NULL, "xaxis minimum L",                                  0 },
+  { "--maxL",    eslARG_INT,    "200",  NULL, NULL,  NULL,  NULL, NULL, "xaxis maximum L",                                  0 },
+  { "--stepL",   eslARG_INT,      "5",  NULL, NULL,  NULL,  NULL, NULL, "xaxis step size",                                  0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "stats driver for randomseq module";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go       = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r        = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  ESL_ALPHABET   *abc      = esl_alphabet_Create(eslAMINO);
+  int             N        = esl_opt_GetInteger(go, "-N");
+  int             minL     = esl_opt_GetInteger(go, "--minL");
+  int             maxL     = esl_opt_GetInteger(go, "--maxL");
+  int             stepL    = esl_opt_GetInteger(go, "--stepL");
+  ESL_DSQ        *dsq1     = malloc(sizeof(ESL_DSQ) * (maxL+2));
+  ESL_DSQ        *dsq2     = malloc(sizeof(ESL_DSQ) * (maxL+2));
+  double         *fq       = malloc(sizeof(double) * abc->K);
+  double         *pid      = malloc(sizeof(double) * N);
+  double          mean, var;
+  int             L;
+  int             i;
+
+  esl_vec_DSet(fq, abc->K, 1.0 / (double) abc->K );
+
+  for (L = minL; L <= maxL; L += stepL)
+    {
+      for (i = 0; i < N; i++)
+	{
+	  esl_rsq_xIID(r, fq, abc->K, L, dsq1);
+
+	  if      (esl_opt_GetBoolean(go, "-d")) esl_rsq_XShuffleDP(r, dsq1, L, abc->K, dsq2);
+	  else if (esl_opt_GetBoolean(go, "-R")) esl_rsq_XReverse(dsq1, L, dsq2);
+	  else if (esl_opt_GetBoolean(go, "-2")) esl_rsq_xIID(r, fq, abc->K, L, dsq2);
+	  else                                   esl_rsq_XShuffle(r, dsq1, L, dsq2);
+
+	  esl_dst_XPairId(abc, dsq1, dsq2, &(pid[i]), NULL, NULL);
+	}
+      
+      esl_stats_DMean(pid, N, &mean, &var);
+      printf("%-6d %.4f %.4f\n", L, mean, sqrt(var));
+    }
+  printf("&\n");
+
+  free(pid);
+  free(fq);
+  free(dsq2);
+  free(dsq1);
+  esl_alphabet_Destroy(abc);
+  esl_randomness_Destroy(r);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslRANDOMSEQ_STATS*/
+/*-------------- end, statistics driver -------------------------*/
+
+
+
+
+
+/*****************************************************************
+ * 8. Unit tests.
+ *****************************************************************/ 
+#ifdef eslRANDOMSEQ_TESTDRIVE
+#include "esl_dirichlet.h"
+#include "esl_vectorops.h"
+
+/* count c(x) monoresidue and c(xy) diresidue composition
+ * used for sequence shuffling unit tests
+ * mono, di allocated by caller for 26 and 26x26, respectively.
+ */
+static int
+composition(char *s, int L, int *mono, int **di)
+{
+  int i, x, y;
+
+  for (x = 0; x < 26; x++) {
+    mono[x] = 0;
+    for (y = 0; y < 26; y++)
+      di[x][y] = 0;
+  }
+
+  for (i = 0; s[i] != '\0'; i++) { 
+    if (!isalpha(s[i])) esl_fatal("bad residue %d", i);
+    y = toupper(s[i]) - 'A';
+    mono[y]++;
+    if (i > 0) {
+      x = toupper(s[i-1] - 'A');
+      di[x][y]++;
+    }
+  }
+  if (i != L) esl_fatal("sequence length didn't match expected %d", L);
+  return eslOK;
+}
+
+/* same, but for digital seq., with alphabet size K */
+static int
+xcomposition(ESL_DSQ *dsq, int L, int K, int *mono, int **di)
+{
+  int i, x, y;
+
+  for (x = 0; x < K; x++) {
+    mono[x] = 0;
+    for (y = 0; y < K; y++)
+      di[x][y] = 0;
+  }
+
+  for (i = 1; dsq[i] != eslDSQ_SENTINEL; i++) { 
+    if (dsq[i] > K) esl_fatal("bad residue %d", i);
+    if (i > 1) di[(int) dsq[i-1]][(int) dsq[i]]++;
+    mono[(int) dsq[i]]++;
+  }
+  if (i != L+1) esl_fatal("sequence length didn't match expected %d", L);
+  return eslOK;
+}
+
+static int
+composition_allocate(int K, int **ret_mono, int ***ret_di)
+{
+  int  status;
+  int *mono = NULL;
+  int **di  = NULL;
+  int  x;
+
+  ESL_ALLOC(mono, sizeof(int)   * K);
+  ESL_ALLOC(di,   sizeof(int *) * K); for (x = 0; x < K; x++) di[x] = NULL;
+  for (x = 0; x < K; x++)
+    ESL_ALLOC(di[x], sizeof(int) * K);
+  *ret_mono = mono;
+  *ret_di   = di;
+  return eslOK;
+
+ ERROR:
+  esl_Free2D((void **) di, K);
+  if (mono != NULL) free(mono);
+  *ret_mono = NULL;
+  *ret_di   = NULL;
+  return status;
+}
+
+/* compare compositions before/after.
+ * either mono (m1,m2) or di (d1,d2) may be NULL, to compare only the other one */
+static int
+composition_compare(int *m1, int **di1, int *m2, int **di2, int K)
+{
+  int x,y;
+
+  for (x = 0; x < K; x++) {
+    if (m1 != NULL && m1[x] != m2[x]) return eslFAIL;
+    if (di1 != NULL) 
+      for (y = 0; y < K; y++) 
+	if (di1[x][y] != di2[x][y])   return eslFAIL;
+  }
+  return eslOK;
+}
+
+/* Unit tests for:
+ *     esl_rsq_CShuffle()
+ *     esl_rsq_CShuffleDP()
+ *     esl_rsq_CShuffleWindows()
+ *     esl_rsq_CReverse()
+ * 
+ * All of these exactly preserve residue composition, which is
+ * the basis of the unit tests.
+ */
+static void
+utest_CShufflers(ESL_RANDOMNESS *r, int L, char *alphabet, int K)
+{
+  char   *logmsg  = "Failure in one of the CShuffle* unit tests";
+  int     status;
+  char   *s   = NULL;
+  char   *s2  = NULL;
+  int    *m1  = NULL,
+         *m2  = NULL;	    /* mono, before and after */
+  int   **di1 = NULL,
+        **di2 = NULL;       /* di, before and after */
+  double  *p;		    
+  int      w = 12;   	    /* window width for CShuffleWindows() */
+
+  /* allocations */
+  ESL_ALLOC(s,   sizeof(char)   * (L+1));
+  ESL_ALLOC(s2,  sizeof(char)   * (L+1));
+  ESL_ALLOC(p,   sizeof(double) * K);
+  if (composition_allocate(26, &m1, &di1) != eslOK) esl_fatal(logmsg);
+  if (composition_allocate(26, &m2, &di2) != eslOK) esl_fatal(logmsg);
+
+  /* generate the string we'll start shuffling */
+  if (esl_dirichlet_DSampleUniform(r, K, p) != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_IID(r, alphabet, p, K, L, s)  != eslOK) esl_fatal(logmsg);
+
+  /* esl_rsq_CShuffle: mono composition should stay exactly the same, di may change */
+  memset(s2, 0, (L+1)*sizeof(char));
+  if (composition(s,   L, m1, di1)                != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CShuffle(r, s, s2)                  != eslOK) esl_fatal(logmsg);      
+  if (composition(s2, L, m2, di2)                 != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg);
+  if (strcmp(s2, s) == 0)                                   esl_fatal(logmsg); 
+
+  /* esl_rsq_CShuffle, in place */
+  strcpy(s, s2);
+  if (composition(s2, L, m1, di1)                 != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CShuffle(r, s2, s2)                 != eslOK) esl_fatal(logmsg);      
+  if (composition(s2, L, m2, di2)                 != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg);
+  if (strcmp(s2, s) == 0)                                   esl_fatal(logmsg); 
+
+  /* esl_rsq_CShuffleDP: mono and di compositions stay exactly the same */
+  memset(s2, 0, (L+1)*sizeof(char));
+  if (composition(s, L, m1,  di1)                 != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CShuffleDP(r, s, s2)                != eslOK) esl_fatal(logmsg);      
+  if (composition(s2, L, m2, di2)                 != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, di1, m2, di2, 26)   != eslOK) esl_fatal(logmsg);
+  if (strcmp(s2, s) == 0)                                   esl_fatal(logmsg); 
+
+  /* esl_rsq_CShuffleDP, in place */
+  strcpy(s, s2);
+  if (composition(s2, L, m1, di1)                 != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CShuffleDP(r, s2, s2)               != eslOK) esl_fatal(logmsg);      
+  if (composition(s2, L, m2, di2)                 != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, di1, m2, di2, 26)   != eslOK) esl_fatal(logmsg);
+  if (strcmp(s2, s) == 0)                                   esl_fatal(logmsg); 
+  
+  /* esl_rsq_CShuffleKmers: mono composition stays the same */
+  memset(s2, 0, (L+1)*sizeof(char));
+  if (composition(s, L, m1,  di1)                 != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CShuffleKmers(r, s, 3, s2)          != eslOK) esl_fatal(logmsg);      
+  if (composition(s2, L, m2, di2)                 != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg);
+  if (strcmp(s2, s) == 0)                                   esl_fatal(logmsg); 
+  
+  /* esl_rsq_CShuffleKmers, in place */
+  strcpy(s, s2);
+  if (composition(s2, L, m1, di1)                 != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CShuffleKmers(r, s2, 3, s2)         != eslOK) esl_fatal(logmsg);      
+  if (composition(s2, L, m2, di2)                 != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg);
+  if (strcmp(s2, s) == 0)                                   esl_fatal(logmsg); 
+
+  /* esl_rsq_CShuffleWindows(): mono composition stays the same */
+  memset(s2, 0, (L+1)*sizeof(char));
+  if (composition(s,   L, m1, di1)                != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CShuffleWindows(r, s, w, s2)        != eslOK) esl_fatal(logmsg);      
+  if (composition(s2, L, m2, di2)                 != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg);
+  if (strcmp(s2, s) == 0)                                   esl_fatal(logmsg); 
+  
+  /* esl_rsq_CShuffleWindows(), in place */
+  strcpy(s, s2);
+  if (composition(s2, L, m1, di1)                 != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CShuffleWindows(r, s2, w, s2)       != eslOK) esl_fatal(logmsg);      
+  if (composition(s2, L, m2, di2)                 != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg);
+  if (strcmp(s2, s) == 0)                                   esl_fatal(logmsg); 
+  
+  /* esl_rsq_CReverse(): two reverses (one in place) give the same seq back */
+  memset(s2, 0, (L+1)*sizeof(char));
+  if (composition(s,   L, m1, di1)                != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CReverse(s, s2)                     != eslOK) esl_fatal(logmsg);      
+  if (composition(s2, L, m2, di2)                 != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg);
+  if (strcmp(s2, s) == 0)                                   esl_fatal(logmsg); 
+  if (esl_rsq_CReverse(s2, s2)                    != eslOK) esl_fatal(logmsg);      
+  if (strcmp(s2, s) != 0)                                   esl_fatal(logmsg); 
+
+  free(s);
+  free(s2);
+  free(p);
+  free(m1);
+  free(m2);
+  esl_Free2D((void **) di1, 26);
+  esl_Free2D((void **) di2, 26);
+  return;
+  
+ ERROR:
+  esl_fatal(logmsg);
+}
+
+/* Unit tests for:
+ *    esl_rsq_CMarkov0()
+ *    esl_rsq_CMarkov1()
+ * 
+ * Testing these is less robust than the shufflers, because it's hard
+ * to concoct deterministic tests. Instead the test is a weak one,
+ * that zero probability events get zero counts.
+ */
+static void
+utest_CMarkovs(ESL_RANDOMNESS *r, int L, char *alphabet)
+{
+  char   *logmsg = "Failure in a CMarkov*() unit test";
+  int     status;
+  char   *s   = NULL;
+  char   *s2  = NULL;
+  float  *p   = NULL;
+  int     K;
+  int     pzero;		/* which 0..K-1 residue will have zero prob */
+  int     zeroidx;		/* index of pzero residue in 0..25 ASCII    */
+  int    *m1  = NULL,
+         *m2  = NULL;	    /* mono, before and after */
+  int   **di1 = NULL,
+        **di2 = NULL;       /* di, before and after */
+  int     i,x;
+
+  K = strlen(alphabet);
+  ESL_ALLOC(p,   sizeof(float)  * K);
+  ESL_ALLOC(s,   sizeof(char)   * (L+1));
+  ESL_ALLOC(s2,  sizeof(char)   * (L+1));
+  if (composition_allocate(26, &m1, &di1) != eslOK) esl_fatal(logmsg);
+  if (composition_allocate(26, &m2, &di2) != eslOK) esl_fatal(logmsg);
+
+  /* generate string with a random letter prob set to 0  */
+  pzero   = esl_rnd_Roll(r, K);
+  zeroidx = toupper(alphabet[pzero]) - 'A';
+  if (esl_dirichlet_FSampleUniform(r, K, p)  != eslOK) esl_fatal(logmsg);
+  p[pzero] = 0;
+  esl_vec_FNorm(p, K);
+  if (esl_rsq_fIID(r, alphabet, p, K, L, s)  != eslOK) esl_fatal(logmsg);
+
+  /* esl_rsq_CMarkov0()  */
+  memset(s2, 0, (L+1)*sizeof(char));
+  if (composition(s,   L, m1, di1)  != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CMarkov0(r, s, s2)    != eslOK) esl_fatal(logmsg);
+  if (composition(s2, L, m2, di2)   != eslOK) esl_fatal(logmsg);  
+  if (m1[zeroidx]                   != 0)     esl_fatal(logmsg);  
+  if (m2[zeroidx]                   != 0)     esl_fatal(logmsg);  
+  if (strcmp(s2, s)                 == 0)     esl_fatal(logmsg);  
+  
+  /* esl_rsq_CMarkov0(), in place */
+  strcpy(s, s2);
+  if (esl_rsq_CMarkov0(r, s2, s2)   != eslOK) esl_fatal(logmsg);
+  if (composition(s2, L, m2, di2)   != eslOK) esl_fatal(logmsg);  
+  if (m2[zeroidx]                   != 0)     esl_fatal(logmsg);  
+  if (strcmp(s2, s)                 == 0)     esl_fatal(logmsg);  
+  
+  /* generate string with all homodiresidues set to 0 */
+  if (esl_dirichlet_FSampleUniform(r, K, p)  != eslOK) esl_fatal(logmsg);
+  do {
+    if (esl_rsq_fIID(r, alphabet, p, K, L, s)  != eslOK) esl_fatal(logmsg);  
+    for (i = 1; i < L; i++)
+      if (s[i] == s[i-1]) /* this incantation will rotate letter forward in alphabet: */
+	s[i] = alphabet[(1+strchr(alphabet,s[i])-alphabet)%K];
+  } while (s[0] == s[L-1]);	/* lazy: reject strings where circularization would count a homodimer */
+  
+  /* esl_rsq_CMarkov1()  */
+  memset(s2, 0, (L+1)*sizeof(char));
+  if (composition(s,   L, m1, di1)  != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_CMarkov1(r, s, s2)    != eslOK) esl_fatal(logmsg);
+  if (composition(s2, L, m2, di2)   != eslOK) esl_fatal(logmsg);  
+  for (x = 0; x < K; x++) {
+    if (di1[x][x]                   != 0)     esl_fatal(logmsg);  
+    if (di2[x][x]                   != 0)     esl_fatal(logmsg);  
+  }
+  if (strcmp(s2, s)                 == 0)     esl_fatal(logmsg);  
+
+  /* esl_rsq_CMarkov1(), in place  */
+  strcpy(s, s2);
+  if (esl_rsq_CMarkov1(r, s2, s2)  != eslOK)   esl_fatal(logmsg);
+  if (composition(s2, L, m2, di2)  != eslOK) esl_fatal(logmsg);  
+  for (x = 0; x < K; x++) {
+    if (di1[x][x]                   != 0)     esl_fatal(logmsg);  
+    if (di2[x][x]                   != 0)     esl_fatal(logmsg);  
+  }
+  if (strcmp(s2, s)                 == 0)     esl_fatal(logmsg);  
+  
+  free(s);
+  free(s2);
+  free(p);
+  free(m1);
+  free(m2);
+  esl_Free2D((void **) di1, 26);
+  esl_Free2D((void **) di2, 26);
+  return;
+  
+ ERROR:
+  esl_fatal(logmsg);
+}
+
+
+/* Unit tests for:
+ *     esl_rsq_XShuffle()
+ *     esl_rsq_XShuffleDP()
+ *     esl_rsq_XShuffleWindows()
+ *     esl_rsq_XReverse()
+ * Same ideas as testing the C* versions, adapted for digital sequences. 
+ */
+static void
+utest_XShufflers(ESL_RANDOMNESS *r, int L, int K)
+{
+  char    *logmsg  = "Failure in one of the XShuffle* unit tests";
+  int      status;
+  ESL_DSQ *dsq   = NULL;
+  ESL_DSQ *ds2   = NULL;
+  int     *m1    = NULL,
+          *m2    = NULL;    /* mono, before and after */
+  int    **di1   = NULL,
+         **di2   = NULL;    /* di, before and after */
+  float   *p     = NULL;
+  int      w = 12;   	    /* window width for XShuffleWindows() */
+
+  /* allocations */
+  ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (L+2));
+  ESL_ALLOC(ds2, sizeof(ESL_DSQ) * (L+2));
+  ESL_ALLOC(p,   sizeof(float)   * K);
+  if (composition_allocate(K, &m1, &di1) != eslOK) esl_fatal(logmsg);
+  if (composition_allocate(K, &m2, &di2) != eslOK) esl_fatal(logmsg);
+
+  /* generate the string we'll test shuffling on, keep its composition stats */
+  if (esl_dirichlet_FSampleUniform(r, K, p) != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_xfIID(r, p, K, L, dsq)        != eslOK) esl_fatal(logmsg);
+
+  /* esl_rsq_XShuffle: mono composition should stay exactly the same, di may change */
+  memset(ds2, eslDSQ_SENTINEL, (L+2));
+  if (xcomposition(dsq, L, K, m1, di1)           != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XShuffle(r, dsq, L, ds2)           != eslOK) esl_fatal(logmsg);      
+  if (xcomposition(ds2, L, K, m2, di2)           != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg);
+
+  /* esl_rsq_XShuffle, in place */
+  if (esl_abc_dsqcpy(ds2, L, dsq)                != eslOK) esl_fatal(logmsg);
+  if (xcomposition(ds2, L, K, m1,  di1)          != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XShuffle(r, ds2, L, ds2)           != eslOK) esl_fatal(logmsg);      
+  if (xcomposition(ds2, L, K, m2, di2)           != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg);
+
+  /* esl_rsq_XShuffleDP: mono and di compositions stay exactly the same */
+  memset(ds2, eslDSQ_SENTINEL, (L+2));
+  if (xcomposition(dsq, L, K, m1,  di1)          != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XShuffleDP(r, dsq, L, K, ds2)      != eslOK) esl_fatal(logmsg);      
+  if (xcomposition(ds2, L, K, m2, di2)           != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, di1, m2, di2, K)   != eslOK) esl_fatal(logmsg);
+
+  /* esl_rsq_XShuffleDP, in place */
+  if (esl_abc_dsqcpy(ds2, L, dsq)                != eslOK) esl_fatal(logmsg);
+  if (xcomposition(ds2, L, K, m1, di1)           != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XShuffleDP(r, ds2, L, K, ds2)      != eslOK) esl_fatal(logmsg);      
+  if (xcomposition(ds2, L, K, m2, di2)           != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, di1, m2, di2, K)   != eslOK) esl_fatal(logmsg);
+  
+  /* esl_rsq_XShuffleKmers: mono compositions stay exactly the same */
+  memset(ds2, eslDSQ_SENTINEL, (L+2));
+  if (xcomposition(dsq, L, K, m1,  di1)          != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XShuffleKmers(r, dsq, L, 3, ds2)   != eslOK) esl_fatal(logmsg);      
+  if (xcomposition(ds2, L, K, m2, di2)           != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg);
+
+  /* esl_rsq_XShuffleKmers, in place */
+  if (esl_abc_dsqcpy(ds2, L, dsq)                != eslOK) esl_fatal(logmsg);
+  if (xcomposition(ds2, L, K, m1, di1)           != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XShuffleKmers(r, ds2, L, 3, ds2)   != eslOK) esl_fatal(logmsg);      
+  if (xcomposition(ds2, L, K, m2, di2)           != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg);
+
+  /* esl_rsq_XShuffleWindows(): mono composition stays the same */
+  memset(ds2, eslDSQ_SENTINEL, (L+2));
+  if (xcomposition(dsq, L, K, m1, di1)           != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XShuffleWindows(r, dsq, L, w, ds2) != eslOK) esl_fatal(logmsg);      
+  if (xcomposition(ds2, L, K, m2, di2)           != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg);
+  
+  /* esl_rsq_XShuffleWindows(), in place */
+  if (esl_abc_dsqcpy(ds2, L, dsq)                != eslOK) esl_fatal(logmsg);
+  if (xcomposition(ds2, L, K, m1,  di1)          != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XShuffleWindows(r, ds2, L, w, ds2) != eslOK) esl_fatal(logmsg);      
+  if (xcomposition(ds2, L, K, m2, di2)           != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg);
+  
+  /* esl_rsq_XReverse(): two reverses (one in place) give the same seq back */
+  memset(ds2, eslDSQ_SENTINEL, (L+2));
+  if (xcomposition(dsq, L, K, m1, di1)            != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XReverse(dsq, L, ds2)               != eslOK) esl_fatal(logmsg);      
+  if (xcomposition(ds2, L, K, m2, di2)            != eslOK) esl_fatal(logmsg);
+  if (composition_compare(m1, NULL, m2, NULL, K)  != eslOK) esl_fatal(logmsg);
+  if (memcmp((void *) ds2, (void *) dsq, sizeof(ESL_DSQ)*(L+2)) == 0) esl_fatal(logmsg); 
+  if (esl_rsq_XReverse(ds2, L, ds2)               != eslOK) esl_fatal(logmsg);      
+  if (memcmp((void *) ds2, (void *) dsq, sizeof(ESL_DSQ)*(L+2)) != 0) esl_fatal(logmsg); 
+
+  free(dsq);
+  free(ds2);
+  free(p);
+  free(m1);
+  free(m2);
+  esl_Free2D((void **) di1, K);
+  esl_Free2D((void **) di2, K);
+  return;
+  
+ ERROR:
+  esl_fatal(logmsg);
+}
+
+/* Unit tests for:
+ *    esl_rsq_XMarkov0()
+ *    esl_rsq_XMarkov1()
+ * Same ideas as in the C* versions, but for digital sequences.
+ */
+static void
+utest_XMarkovs(ESL_RANDOMNESS *r, int L, int K)
+{
+  char    *logmsg = "Failure in an XMarkov*() unit test";
+  int      status;
+  ESL_DSQ *dsq = NULL;
+  ESL_DSQ *ds2 = NULL;
+  int     *m1  = NULL, 
+          *m2  = NULL;    /* mono, before and after */
+  int    **di1 = NULL,
+         **di2 = NULL;    /* di, before and after */
+  float   *p   = NULL;
+  int      pzero;
+  int      i,x;
+
+  /* allocations */
+  ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (L+2));
+  ESL_ALLOC(ds2, sizeof(ESL_DSQ) * (L+2));
+  ESL_ALLOC(p,   sizeof(float)   * K);
+  if (composition_allocate(K, &m1, &di1) != eslOK) esl_fatal(logmsg);
+  if (composition_allocate(K, &m2, &di2) != eslOK) esl_fatal(logmsg);
+
+  /* generate sequence with a random letter prob set to 0  */
+  pzero = esl_rnd_Roll(r, K);
+  if (esl_dirichlet_FSampleUniform(r, K, p)  != eslOK) esl_fatal(logmsg);
+  p[pzero] = 0.;
+  esl_vec_FNorm(p, K);
+  if (esl_rsq_xfIID(r, p, K, L, dsq)         != eslOK) esl_fatal(logmsg);
+
+  /* esl_rsq_XMarkov0()  */
+  memset(ds2, eslDSQ_SENTINEL, (L+2)*sizeof(ESL_DSQ));
+  if (xcomposition(dsq, L, K, m1, di1)        != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XMarkov0(r, dsq, L, K, ds2)     != eslOK) esl_fatal(logmsg);
+  if (xcomposition(ds2, L, K, m2, di2)        != eslOK) esl_fatal(logmsg);  
+  if (m1[pzero]                               != 0)     esl_fatal(logmsg);  
+  if (m2[pzero]                               != 0)     esl_fatal(logmsg);  
+  if (memcmp(ds2, dsq, sizeof(ESL_DSQ)*(L+2)) == 0)     esl_fatal(logmsg);  
+  
+  /* esl_rsq_CMarkov0(), in place */
+  if (esl_abc_dsqcpy(ds2, L, dsq)             != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XMarkov0(r, ds2, L, K, ds2)     != eslOK) esl_fatal(logmsg);
+  if (xcomposition(ds2, L, K, m2, di2)        != eslOK) esl_fatal(logmsg);  
+  if (m2[pzero]                               != 0)     esl_fatal(logmsg);  
+  if (memcmp(ds2, dsq, sizeof(ESL_DSQ)*(L+2)) == 0)     esl_fatal(logmsg);  
+  
+  /* generate string with all homodiresidues set to 0 */
+  if (esl_dirichlet_FSampleUniform(r, K, p)   != eslOK) esl_fatal(logmsg);
+  do {
+    if (esl_rsq_xfIID(r, p, K, L, dsq)          != eslOK) esl_fatal(logmsg);  
+    for (i = 2; i <= L; i++)
+      if (dsq[i] == dsq[i-1]) /* this incantation will rotate letter forward in alphabet: */
+	dsq[i] = (dsq[i]+1)%K;
+  } while (dsq[1] == dsq[L]);	/* lazy. reject strings where circularization would count a homodimer */
+    
+  /* esl_rsq_XMarkov1()  */
+  memset(ds2, eslDSQ_SENTINEL, (L+2)*sizeof(ESL_DSQ));
+  if (xcomposition(dsq, L, K, m1, di1)        != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XMarkov1(r, dsq, L, K, ds2)     != eslOK) esl_fatal(logmsg);
+  if (xcomposition(ds2, L, K, m2, di2)        != eslOK) esl_fatal(logmsg);  
+  for (x = 0; x < K; x++) {
+    if (di1[x][x]                             != 0)     esl_fatal(logmsg);  
+    if (di2[x][x]                             != 0)     esl_fatal(logmsg);  
+  }
+  if (memcmp(ds2, dsq, sizeof(ESL_DSQ)*(L+2)) == 0)     esl_fatal(logmsg);  
+
+  /* esl_rsq_XMarkov1(), in place  */
+  if (esl_abc_dsqcpy(ds2, L, dsq)             != eslOK) esl_fatal(logmsg);
+  if (esl_rsq_XMarkov1(r, ds2, L, K, ds2)     != eslOK) esl_fatal(logmsg);
+  if (xcomposition(ds2, L, K, m2, di2)        != eslOK) esl_fatal(logmsg);  
+  for (x = 0; x < K; x++) {
+    if (di1[x][x]                             != 0)     esl_fatal(logmsg);  
+    if (di2[x][x]                             != 0)     esl_fatal(logmsg);  
+  }
+  if (memcmp(ds2, dsq, sizeof(ESL_DSQ)*(L+2)) == 0)     esl_fatal(logmsg);  
+  
+  free(dsq);
+  free(ds2);
+  free(p);
+  free(m1);
+  free(m2);
+  esl_Free2D((void **) di1, K);
+  esl_Free2D((void **) di2, K);
+  return;
+  
+ ERROR:
+  esl_fatal(logmsg);
+}
+
+/* utest_markov1_bug()
+ * 
+ * Given a sequence like AAAAAAAAAT, where a residue only occurs once
+ * and at the end of the sequence, a bug can appear: a Markov chain
+ * can transit to T, but can't leave. Easel handles this by 
+ * counting Markov statistics as if the input sequence were circular.
+ */
+static void
+utest_markov1_bug(ESL_RANDOMNESS *r)
+{
+  char    logmsg[]  = "Failure in markov1_bug test (zero/absorbing transition)";
+  char    testseq[] = "AAAAAAAAAT";
+  char   *seq       = NULL;
+  ESL_DSQ testdsq[] = { eslDSQ_SENTINEL,0,0,0,0,0,0,0,0,0,3,eslDSQ_SENTINEL};
+  ESL_DSQ *dsq      = NULL;
+  int     L         = strlen(testseq);
+  int    *mono      = NULL;
+  int   **di        = NULL;
+  int     N         = 100;         
+  int     i;
+
+  if ((seq = malloc(sizeof(char)    * (L+1))) == NULL)    esl_fatal(logmsg);
+  if ((dsq = malloc(sizeof(ESL_DSQ) * (L+2))) == NULL)    esl_fatal(logmsg);
+
+  if (composition_allocate(4, &mono, &di)       != eslOK) esl_fatal(logmsg);
+  for (i = 0; i < N; i++) {
+    if (esl_rsq_XMarkov1(r, testdsq, L, 4, dsq) != eslOK) esl_fatal(logmsg);
+    if (xcomposition(testdsq, L, 4, mono, di)   != eslOK) esl_fatal(logmsg);
+    if (mono[0] + mono[3] != L)                           esl_fatal(logmsg);
+  }
+  esl_Free2D((void **) di, 4);
+  free(mono);
+
+  if (composition_allocate(26, &mono, &di) != eslOK) esl_fatal(logmsg);
+  for (i = 0; i < N; i++) {
+    if (esl_rsq_CMarkov1(r, testseq, seq)  != eslOK) esl_fatal(logmsg);
+    if (composition(seq, L, mono, di)      != eslOK) esl_fatal(logmsg);
+    if (mono[0] + mono['T'-'A'] != L)                esl_fatal(logmsg);
+  }
+  esl_Free2D((void **) di, 26);
+  free(mono);
+  free(seq);
+  free(dsq);
+}
+
+#endif /*eslRANDOMSEQ_TESTDRIVE*/
+/*------------------ end, unit tests ----------------------------*/
+
+/*****************************************************************
+ * 9. Test driver.
+ *****************************************************************/ 
+#ifdef eslRANDOMSEQ_TESTDRIVE
+/* gcc -g -Wall -o randomseq_utest -L. -I. -DeslRANDOMSEQ_TESTDRIVE esl_randomseq.c -leasel -lm
+ */
+
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_randomseq.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-L",        eslARG_INT,   "1000",  NULL, NULL,  NULL,  NULL, NULL, "length of random sequences",                       0 },
+  { "-s",        eslARG_INT,     "42",  NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                    0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for randomseq module";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go       = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r        = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  char           *alphabet = "ACGT";
+  int             K        = strlen(alphabet);
+  int             L        = esl_opt_GetInteger(go, "-L");
+
+  utest_CShufflers(r, L, alphabet, K);
+  utest_CMarkovs  (r, L, alphabet);
+  utest_XShufflers(r, L, K);
+  utest_XMarkovs  (r, L, K);
+
+  utest_markov1_bug(r);
+
+  esl_randomness_Destroy(r);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+#endif /*eslRANDOMSEQ_TESTDRIVE*/
+/*----------------- end, test driver ----------------------------*/
+
+
+/*****************************************************************
+ * 10. Example.
+ *****************************************************************/ 
+#ifdef eslRANDOMSEQ_EXAMPLE
+/*::cexcerpt::randomseq_example::begin::*/
+/* compile: gcc -g -Wall -I. -o example -DeslRANDOMSEQ_EXAMPLE esl_randomseq.c\
+            esl_random.c esl_sqio.c esl_sq.c easel.c -lm
+ * run:     ./example <FASTA file>
+ */
+#include "easel.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_random.h"
+#include "esl_randomseq.h"
+
+int
+main(int argc, char **argv)
+{
+  char           *seqfile = argv[1];
+  int             format  = eslSQFILE_UNKNOWN;
+  ESL_SQFILE     *sqfp    = NULL;
+  ESL_SQ         *sq      = esl_sq_Create();
+  ESL_RANDOMNESS *r       = esl_randomness_Create(0);
+  int             status;
+
+  if (esl_sqfile_Open(seqfile, format, NULL, &sqfp) != eslOK) 
+    esl_fatal("Failed to open %s\n", seqfile);
+
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+  {
+    printf("[Original sequence:]\n");
+    esl_sqio_Write(stdout, sq, eslSQFILE_FASTA);
+
+    printf("[After shuffling:]\n");
+    esl_rsq_CShuffle(r, sq->seq, sq->seq); /* shuffle in place */
+    esl_sqio_Write(stdout, sq, eslSQFILE_FASTA);
+
+    esl_sq_Reuse(sq);
+  }
+  if (status != eslEOF) esl_fatal("Parse failed");
+  esl_sqfile_Close(sqfp);
+  
+  esl_sq_Destroy(sq);
+  esl_randomness_Destroy(r);
+  return 0;
+}
+/*::cexcerpt::randomseq_example::end::*/
+#endif /*eslRANDOMSEQ_EXAMPLE*/
+/*--------------------- end, example ----------------------------*/
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_randomseq.h b/esl_randomseq.h
new file mode 100644
index 0000000..fb517e6
--- /dev/null
+++ b/esl_randomseq.h
@@ -0,0 +1,65 @@
+/* Generating, shuffling, and randomizing sequences.
+ */
+#ifndef eslRANDOMSEQ_INCLUDED
+#define eslRANDOMSEQ_INCLUDED
+
+#include "esl_alphabet.h"
+#include "esl_random.h"
+
+/* Control flag passed to esl_rsq_Sample():                          */
+#define eslRSQ_SAMPLE_ALNUM  1	/* isalpha | isdigit                 */
+#define eslRSQ_SAMPLE_ALPHA  2	/* islower | isupper                 */
+#define eslRSQ_SAMPLE_LOWER  3	/* ASCII: a-z                        */
+#define eslRSQ_SAMPLE_UPPER  4	/* ASCII: A-Z                        */
+#define eslRSQ_SAMPLE_DIGIT  5	/* 0-9                               */
+#define eslRSQ_SAMPLE_XDIGIT 6	/* 0-9, a-f, A-F                     */
+#define eslRSQ_SAMPLE_CNTRL  7	/* ASCII: 0..0x1F, plus 0x7F (DEL)   */
+#define eslRSQ_SAMPLE_GRAPH  8  /* isprint && ! ' ' (space)          */
+#define eslRSQ_SAMPLE_SPACE  9	/* ' ', '\f', '\n', '\r', '\t', '\v' */
+#define eslRSQ_SAMPLE_BLANK  10	/* ' ', '\t'                         */
+#define eslRSQ_SAMPLE_PRINT  11 /* ASCII: 0x20 ' ' through 0x7E '~'  */
+#define eslRSQ_SAMPLE_PUNCT  12	/* isprint && !(isspace || isalnum)  */
+
+
+/* 1. Generating simple random character strings. */
+extern int esl_rsq_Sample(ESL_RANDOMNESS *rng, int allowed_chars_flag, int L, char **ret_s);
+
+/* 2. Generating iid sequences. */
+extern int esl_rsq_IID  (ESL_RANDOMNESS *r, const char *alphabet, const double *p, int K, int L, char *s);
+extern int esl_rsq_fIID (ESL_RANDOMNESS *r, const char *alphabet, const float  *p, int K, int L, char *s);
+
+/* 3. Shuffling sequences. */
+extern int esl_rsq_CShuffle       (ESL_RANDOMNESS *r, const char *s,        char *shuffled);
+extern int esl_rsq_CShuffleDP     (ESL_RANDOMNESS *r, const char *s,        char *shuffled);
+extern int esl_rsq_CShuffleKmers  (ESL_RANDOMNESS *r, const char *s, int K, char *shuffled);
+extern int esl_rsq_CReverse       (const char *s, char *rev);
+extern int esl_rsq_CShuffleWindows(ESL_RANDOMNESS *r, const char *s, int w, char *shuffled);
+
+/* 4. Randomizing sequences */
+extern int esl_rsq_CMarkov0  (ESL_RANDOMNESS *r, const char *s, char *markoved);
+extern int esl_rsq_CMarkov1  (ESL_RANDOMNESS *r, const char *s, char *markoved);
+
+/* 5. Generating iid sequences (digital mode). */
+extern int esl_rsq_xIID       (ESL_RANDOMNESS *r, const double *p, int K, int L, ESL_DSQ *dsq);
+extern int esl_rsq_xfIID      (ESL_RANDOMNESS *r, const float  *p, int K, int L, ESL_DSQ *dsq);
+extern int esl_rsq_SampleDirty(ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, double **byp_p, int L, ESL_DSQ *dsq);
+
+/* 6. Shuffling sequences (digital mode). */
+extern int esl_rsq_XShuffle       (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L,        ESL_DSQ *shuffled);
+extern int esl_rsq_XShuffleDP     (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *shuffled);
+extern int esl_rsq_XShuffleKmers  (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *shuffled);
+extern int esl_rsq_XReverse(const ESL_DSQ *dsq, int L, ESL_DSQ *rev);
+extern int esl_rsq_XShuffleWindows(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int w, ESL_DSQ *shuffled);
+
+/* 7. Randomizing sequences (digital mode) */
+extern int esl_rsq_XMarkov0  (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *markoved);
+extern int esl_rsq_XMarkov1  (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *markoved);
+
+#endif /*eslRANDOMSEQ_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
diff --git a/esl_randomseq.tex b/esl_randomseq.tex
new file mode 100644
index 0000000..08f913e
--- /dev/null
+++ b/esl_randomseq.tex
@@ -0,0 +1,79 @@
+The \eslmod{randomseq} module contains routines for generating,
+shuffling, and randomizing sequences.
+
+``Generating'' means sampling a sequence from a given statistical
+distribution. ``Shuffling'' means taking a given sequence and
+randomizing it in some way that preserves at least the exact residue
+composition of that sequence, and possibly other higher-order
+statistics. ``Randomizing'' means sampling a sequence from a
+statistical distribution estimated from a given sequence.
+
+Routines like this are useful in testing sequence analysis algorithms;
+for example, calculating expected score statistics under simple null
+models. 
+
+% ``essentially'' qualifier below, because our RNG is limited to 2^31 states,
+% and that limits the number of distinct permutations we can sample.
+
+When shuffling sequences, it is desirable to sample uniformly among
+possible permutations. Many shuffling algorithms (even some published
+ones \citep{Fitch83}) are not correct in this sense. Easel's
+monoresidue sequence shuffling implements the so-called Fisher/Yates
+algorithm (Knuth's ``Algorithm P'') \citep{Durstenfeld64,Knu-81a}.  A
+nontrivial additional power of the module is the ability to shuffle
+sequences while preserving exact diresidue composition; the
+\ccode{esl\_rsq\_CShuffleDP()} and \ccode{esl\_rsq\_XShuffleDP()}
+routines implement the Altschul/Erickson method
+\citep{AltschulErickson86}. \footnote{A more efficient method than
+Altschul/Erickson is known \citep{KandelWinkler96,Coward99} but it has
+not yet been implemented for Easel.}
+
+The routines in the module are listed in
+Table~\ref{tbl:randomseq_api}.
+
+The base routines work on any alphabetic text string.  Augmentation
+with the \eslmod{alphabet} module adds routines for shuffling
+digitized sequences.
+
+
+% Table generated by autodoc -t esl_randomseq.c (so don't edit here, edit esl_randomseq.c:)
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\apisubhead{Generating iid sequences.}\\
+\hyperlink{func:esl_rsq_IID()}{\ccode{esl\_rsq\_IID()}} & Generate an iid random text sequence.\\
+\apisubhead{Shuffling sequences.}\\
+\hyperlink{func:esl_rsq_CShuffle()}{\ccode{esl\_rsq\_CShuffle()}} & Shuffle a text sequence.\\
+\hyperlink{func:esl_rsq_CShuffleDP()}{\ccode{esl\_rsq\_CShuffleDP()}} & Shuffle a text sequence, preserving diresidue composition.\\
+\hyperlink{func:esl_rsq_CReverse()}{\ccode{esl\_rsq\_CReverse()}} & Reverse a string.\\
+\hyperlink{func:esl_rsq_CShuffleWindows()}{\ccode{esl\_rsq\_CShuffleWindows()}} & Shuffle local windows of a text string.\\
+\apisubhead{Randomizing sequences}\\
+\hyperlink{func:esl_rsq_CMarkov0()}{\ccode{esl\_rsq\_CMarkov0()}} & Generate new text string of same 0th order Markov properties.\\
+\hyperlink{func:esl_rsq_CMarkov1()}{\ccode{esl\_rsq\_CMarkov1()}} & Generate new text string of same 1st order Markov properties.\\
+\hyperlink{func:esl_rsq_xIID()}{\ccode{esl\_rsq\_xIID()}} & Generate an iid random digital sequence.\\
+\apisubhead{Shuffling sequences (digital mode)}\\
+\hyperlink{func:esl_rsq_XShuffle()}{\ccode{esl\_rsq\_XShuffle()}} & Shuffle a digital sequence.\\
+\hyperlink{func:esl_rsq_XShuffleDP()}{\ccode{esl\_rsq\_XShuffleDP()}} & Shuffle a digital sequence, preserving diresidue composition.\\
+\hyperlink{func:esl_rsq_XReverse()}{\ccode{esl\_rsq\_XReverse()}} & Reverse a digital sequence.\\
+\hyperlink{func:esl_rsq_XShuffleWindows()}{\ccode{esl\_rsq\_XShuffleWindows()}} & Shuffle local windows of a digital sequence.\\
+\apisubhead{Randomizing sequences (digital mode)}\\
+\hyperlink{func:esl_rsq_XMarkov0()}{\ccode{esl\_rsq\_XMarkov0()}} & Generate new digital sequence of same 0th order Markov properties.\\
+\hyperlink{func:esl_rsq_XMarkov1()}{\ccode{esl\_rsq\_XMarkov1()}} & Generate new digital sequence of same 1st order Markov properties.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{randomseq} API.}
+\label{tbl:randomseq_api}
+\end{table}
+
+
+\subsection{Example of using randomseq}
+
+Here's an example:
+
+\input{cexcerpts/randomseq_example}
+
+
+
diff --git a/esl_ratematrix.c b/esl_ratematrix.c
new file mode 100644
index 0000000..8c47651
--- /dev/null
+++ b/esl_ratematrix.c
@@ -0,0 +1,822 @@
+/* Routines for manipulating evolutionary rate matrices.
+ * 
+ * There is no specific object for this module.  Rate matrix
+ * operations use square nxn ESL_DMATRIX data objects. (The rmx
+ * module essentially subclasses the dmx module.)
+ * 
+ * An instantaneous rate matrix is usually denoted by Q.  A
+ * conditional probability matrix (for a specific t) is usually
+ * denoted by P. An exchangeability matrix is denoted by E.
+ * A stationary residue probability vector is denoted by pi.
+ * 
+ * Two important relations among these:
+ *      
+ *    Q in terms of E and pi:     
+ *      $Q_{ij} = E_{ij} \pi_j$ for $i \neq j$;
+ *      $Q_{ii} = -\sum_{j \neq i} Q_{ij}$ 
+ *      
+ *    P in terms of Q and t:
+ *      $P = e^{tQ}$
+ * 
+ * Contents: 
+ *   1. Setting standard rate matrix models.
+ *   2. Debugging routines for validating or dumping rate matrices.
+ *   3. Other routines in the exposed ratematrix API.
+ *   4. Benchmark driver.
+ *   5. Regression test driver.
+ *   6. Unit tests.
+ *   7. Test driver.
+ *   8. Example.
+ *   9. Copyright/license information.
+ *
+ *   
+ *   
+ * See also:
+ *   paml   - i/o of rate matrices from/to data files in PAML format
+ * 
+ */
+#include "esl_config.h"
+
+#include <math.h>
+
+#include "easel.h"
+#include "esl_composition.h"
+#include "esl_dmatrix.h"
+#include "esl_vectorops.h"
+#include "esl_ratematrix.h"
+
+
+/*****************************************************************
+ * 1. Setting standard rate matrix models.
+ *****************************************************************/
+
+/* Function:  esl_rmx_SetWAG()
+ * Incept:    SRE, Thu Mar  8 18:00:00 2007 [Janelia]
+ *
+ * Purpose:   Sets a $20 \times 20$ rate matrix <Q> to WAG parameters.
+ *            The caller allocated <Q>.
+ *
+ *            If <pi> is non-<NULL>, it provides a vector of 20 amino
+ *            acid stationary probabilities in Easel alphabetic order,
+ *            A..Y, and the WAG stationary probabilities are set to
+ *            these desired $\pi_i$. If <pi> is <NULL>, the default
+ *            WAG stationary probabilities are used.
+ *            
+ *            The WAG parameters are a maximum likelihood
+ *            parameterization obtained by Whelan and Goldman
+ *            \citep{WhelanGoldman01}.
+ *            
+ * Note:      The data table was reformatted from wag.dat by the UTILITY1
+ *            executable in the paml module. The wag.dat file was obtained from
+ *            \url{http://www.ebi.ac.uk/goldman/WAG/wag.dat}. A copy
+ *            is in formats/wag.dat.
+ *
+ * Args:      Q   - a 20x20 rate matrix to set, allocated by caller.
+ *            pi  - desired stationary probabilities A..Y, or
+ *                  NULL to use WAG defaults.
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEINVAL> if <Q> isn't a 20x20 general matrix; and
+ *            the state of <Q> is undefined.
+ */
+int
+esl_rmx_SetWAG(ESL_DMATRIX *Q, double *pi)
+{
+  static double wagE[190] = {
+    1.027040, 0.738998, 0.030295, 1.582850, 0.021352, 6.174160, 0.210494, 0.398020, 0.046730, 0.081134,
+    1.416720, 0.306674, 0.865584, 0.567717, 0.049931, 0.316954, 0.248972, 0.930676, 0.570025, 0.679371,
+    0.249410, 0.193335, 0.170135, 0.039437, 0.127395, 1.059470, 0.030450, 0.138190, 0.906265, 0.074034,
+    0.479855, 2.584430, 0.088836, 0.373558, 0.890432, 0.323832, 0.397915, 0.384287, 0.084805, 0.154263,
+    2.115170, 0.061304, 0.499462, 3.170970, 0.257555, 0.893496, 0.390482, 0.103754, 0.315124, 1.190630,
+    0.174100, 0.404141, 4.257460, 0.934276, 4.854020, 0.509848, 0.265256, 5.429420, 0.947198, 0.096162,
+    1.125560, 3.956290, 0.554236, 3.012010, 0.131528, 0.198221, 1.438550, 0.109404, 0.423984, 0.682355,
+    0.161444, 0.243570, 0.696198, 0.099929, 0.556896, 0.415844, 0.171329, 0.195081, 0.908598, 0.098818,
+    0.616783, 5.469470, 0.099921, 0.330052, 4.294110, 0.113917, 3.894900, 0.869489, 1.545260, 1.543640,
+    0.933372, 0.551571, 0.528191, 0.147304, 0.439157, 0.102711, 0.584665, 2.137150, 0.186979, 5.351420,
+    0.497671, 0.683162, 0.635346, 0.679489, 3.035500, 3.370790, 1.407660, 1.071760, 0.704939, 0.545931,
+    1.341820, 0.740169, 0.319440, 0.967130, 0.344739, 0.493905, 3.974230, 1.613280, 1.028870, 1.224190,
+    2.121110, 0.512984, 0.374866, 0.822765, 0.171903, 0.225833, 0.473307, 1.458160, 1.386980, 0.326622,
+    1.516120, 2.030060, 0.795384, 0.857928, 0.554413, 4.378020, 2.006010, 1.002140, 0.152335, 0.588731,
+    0.649892, 0.187247, 0.118358, 7.821300, 0.305434, 1.800340, 2.058450, 0.196246, 0.314887, 0.301281,
+    0.251849, 0.232739, 1.388230, 0.113133, 0.717070, 0.129767, 0.156557, 1.529640, 0.336983, 0.262569,
+    0.212483, 0.137505, 0.665309, 0.515706, 0.071917, 0.139405, 0.215737, 1.163920, 0.523742, 0.110864,
+    0.365369, 0.240735, 0.543833, 0.325711, 0.196303, 6.454280, 0.103604, 3.873440, 0.420170, 0.133264,
+    0.398618, 0.428437, 1.086000, 0.216046, 0.227710, 0.381533, 0.786993, 0.291148, 0.314730, 2.485390};
+  static double wagpi[20];
+  int i,j,z;
+  
+  if (Q->m != 20 || Q->n != 20 || Q->type != eslGENERAL)
+    ESL_EXCEPTION(eslEINVAL, "Q must be a 20x20 general matrix");
+  esl_composition_WAG(wagpi);
+
+  /* 1. Transfer the wag E lower triagonal matrix directly into Q. */
+  z = 0;
+  for (i = 0; i < 20; i++)
+    {
+      Q->mx[i][i] = 0.; /* code below depends on this zero initialization */
+      for (j = 0; j < i; j++) {
+	Q->mx[i][j] = wagE[z++];
+	Q->mx[j][i] = Q->mx[i][j];
+      }
+    }
+
+  /* 2. Set offdiagonals Q_ij = E_ij * pi_j */
+  for (i = 0; i < 20; i++)
+    for (j = 0; j < 20; j++)
+      if (pi != NULL) Q->mx[i][j] *= pi[j];
+      else            Q->mx[i][j] *= wagpi[j];
+
+  /* 3. Set diagonal Q_ii to -\sum_{i \neq j} Q_ij */
+  for (i = 0; i < 20; i++)
+    Q->mx[i][i] = -1. * esl_vec_DSum(Q->mx[i], 20);
+  
+  /* 4. Renormalize matrix to units of 1 substitution/site. */
+  if (pi != NULL) esl_rmx_ScaleTo(Q, pi,    1.0);
+  else            esl_rmx_ScaleTo(Q, wagpi, 1.0);
+
+  return eslOK;
+}
+  
+
+/* Function:  esl_rmx_SetJukesCantor()
+ * Incept:    SRE, Thu Mar 15 13:04:56 2007 [Janelia]
+ *
+ * Purpose:   Sets a 4x4 rate matrix to a Jukes-Cantor model,
+ *            scaled to units of 1t = 1.0 substitutions/site.
+ *
+ * Note:     eigenvalues of Q are 0, -4\alpha, -4\alpha, -4\alpha
+ */
+int
+esl_rmx_SetJukesCantor(ESL_DMATRIX *Q)
+{
+  int    i,j;
+  double pi[4] = { 0.25, 0.25, 0.25, 0.25 };
+
+  if (Q->m != 4 || Q->n != 4 || Q->type != eslGENERAL)
+    ESL_EXCEPTION(eslEINVAL, "Q must be a 4x4 general matrix");
+  
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++)
+      {
+	if (i != j) Q->mx[i][j] = 1.0;
+	else        Q->mx[i][j] = 0.0;
+      }
+    Q->mx[i][i] =  -1. * esl_vec_DSum(Q->mx[i], 4);
+  }
+  esl_rmx_ScaleTo(Q, pi, 1.0);
+  return eslOK;
+}
+  
+  
+/* Function:  esl_rmx_SetKimura()
+ * Incept:    SRE, Thu Mar 15 13:08:08 2007 [Janelia]
+ *
+ * Purpose:   Sets a 4x4 rate matrix to a Kimura 2-parameter
+ *            model, given transition and transversion 
+ *            relative rates <alpha> and <beta>, respectively,
+ *            scaled to units of 1t = 1.0 substitutions/site.
+ *
+ * Note:     eigenvalues of Q are 0, -4\alpha, -2(\alpha+\beta), -2(\alpha+\beta)
+ */
+int
+esl_rmx_SetKimura(ESL_DMATRIX *Q, double alpha, double beta) 
+{
+  int i,j;
+  double pi[4] = { 0.25, 0.25, 0.25, 0.25 };
+
+  if (Q->m != 4 || Q->n != 4 || Q->type != eslGENERAL)
+    ESL_EXCEPTION(eslEINVAL, "Q must be a 4x4 general matrix");
+  
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++)
+      {
+	if (i != j) Q->mx[i][j] = ((i+j)%2)? beta : alpha; /* even=0=transition;odd=1=transversion */
+	else        Q->mx[i][j] = 0.0;
+      }
+    Q->mx[i][i] =  -1. * esl_vec_DSum(Q->mx[i], 4);
+  }
+  esl_rmx_ScaleTo(Q, pi, 1.0);
+  return eslOK;
+}
+  
+
+
+/* Function:  esl_rmx_SetF81()
+ * Incept:    SRE, Thu Mar 15 13:33:30 2007 [Janelia]
+ *
+ * Purpose:   Sets a 4x4 rate matrix to the F81 model (aka
+ *            equal-input model) given stationary base 
+ *            compositions <pi>, 
+ *            scaled to units of 1t = 1.0 substitutions/site.
+ */
+int
+esl_rmx_SetF81(ESL_DMATRIX *Q, double *pi)
+{
+  int i,j;
+
+  if (Q->m != 4 || Q->n != 4 || Q->type != eslGENERAL)
+    ESL_EXCEPTION(eslEINVAL, "Q must be a 4x4 general matrix");
+  
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++)
+      {
+	if (i != j) Q->mx[i][j] = pi[j];
+	else        Q->mx[i][j] = 0.0;
+      }
+    Q->mx[i][i] =  -1. * esl_vec_DSum(Q->mx[i], 4);
+  }
+  esl_rmx_ScaleTo(Q, pi, 1.0);
+  return eslOK;
+}
+
+
+/* Function:  esl_rmx_SetHKY()
+ * Incept:    SRE, Thu Aug 12 08:26:39 2004 [St. Louis]
+ *
+ * Purpose:   Given stationary base composition <pi> for ACGT, and
+ *            transition and transversion relative rates <alpha> and
+ *            <beta> respectively, sets the matrix <Q> to be the
+ *            corresponding HKY (Hasegawa/Kishino/Yano) DNA rate
+ *            matrix, scaled in units of 1t= 1.0 substitutions/site
+ *            \citep{Hasegawa85}.        
+ *
+ * Args:      pi     - stationary base composition A..T
+ *            alpha  - relative transition rate
+ *            beta   - relative transversion rate
+ *                     
+ *
+ * Returns:   <eslOK> 
+ *
+ * Xref:      
+ */
+int
+esl_rmx_SetHKY( ESL_DMATRIX *Q, double *pi, double alpha, double beta)
+{
+  int i,j;
+
+  if (Q->m != 4 || Q->n != 4 || Q->type != eslGENERAL)
+    ESL_EXCEPTION(eslEINVAL, "Q must be a 4x4 general matrix");
+  
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++)
+      {
+	if (i != j)  Q->mx[i][j] = ((i+j)%2)? pi[j]*beta : pi[j]*alpha; /* even=0=transition;odd=1=transversion */
+	else         Q->mx[i][j] = 0.;
+      }
+    Q->mx[i][i] =  -1. * esl_vec_DSum(Q->mx[i], 4);
+  }
+  esl_rmx_ScaleTo(Q, pi, 1.0);
+  return eslOK;
+}
+  
+/*****************************************************************
+ * 2. Debugging routines for validating or dumping rate matrices.
+ *****************************************************************/
+
+/* Function:  esl_rmx_ValidateP()
+ * Incept:    SRE, Sun Mar 11 10:30:50 2007 [Janelia]
+ *
+ * Purpose:   Validates a conditional probability matrix <P>, whose
+ *            elements $P_{ij}$ represent conditional probabilities
+ *            $P(j \mid i)$; for example in a first-order Markov
+ *            chain, or a continuous-time Markov transition process
+ *            where <P> is for a particular $t$.
+ *            
+ *            Rows must sum to one, and each element $P_{ij}$ is a
+ *            probability $0 \leq P_{ij} \leq 1$.
+ *            
+ *            <tol> specifies the floating-point tolerance to which
+ *            the row sums must equal one: <fabs(sum-1.0) <= tol>.
+ *            
+ *            <errbuf> is an optional error message buffer. The caller
+ *            may pass <NULL> or a pointer to a buffer of at least
+ *            <eslERRBUFSIZE> characters.
+ *            
+ * Args:      P      - matrix to validate
+ *            tol    - floating-point tolerance (0.00001, for example)      
+ *            errbuf - OPTIONAL: ptr to an error buffer of at least
+ *                     <eslERRBUFSIZE> characters.
+ *
+ * Returns:   <eslOK> on successful validation. 
+ *            <eslFAIL> on failure, and if a non-<NULL> <errbuf> was
+ *            provided by the caller, a message describing
+ *            the reason for the failure is put there.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_rmx_ValidateP(ESL_DMATRIX *P, double tol, char *errbuf)
+{
+  int    i,j;
+  double sum;
+
+  if (P->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "P must be type eslGENERAL to be validated");
+
+  for (i = 0; i < P->n; i++)
+    {
+      sum = esl_vec_DSum(P->mx[i], P->m);
+      if (fabs(sum-1.0) > tol) ESL_FAIL(eslFAIL, errbuf, "row %d does not sum to 1.0", i);
+      
+      for (j = 0; j < P->m; j++)
+	if (P->mx[i][j] < 0.0 || P->mx[i][j] > 1.0)
+	  ESL_FAIL(eslFAIL, errbuf, "element %d,%d is not a probability (%f)", i,j,P->mx[i][j]);
+    }
+  return eslOK;
+}
+
+/* Function:  esl_rmx_ValidateQ()
+ * Incept:    SRE, Sun Mar 11 10:30:50 2007 [Janelia]
+ *
+ * Purpose:   Validates an instantaneous rate matrix <Q> for a
+ *            continuous-time Markov process, whose elements $q_{ij}$
+ *            represent instantaneous transition rates $i \rightarrow
+ *            j$. 
+ *            
+ *            Rows satisfy the condition that
+ *            $q_{ii} = -\sum_{i \neq j} q_{ij}$, and also
+ *            that $q_{ij} \geq 0$ for all $j \neq i$. 
+ *            
+ *            <tol> specifies the floating-point tolerance to which
+ *            that condition must hold: <fabs(sum-q_ii) <= tol>.
+ *            
+ *            <errbuf> is an optional error message buffer. The caller
+ *            may pass <NULL> or a pointer to a buffer of at least
+ *            <eslERRBUFSIZE> characters.
+ *            
+ * Args:      Q      - rate matrix to validate
+ *            tol    - floating-point tolerance (0.00001, for example)      
+ *            errbuf - OPTIONAL: ptr to an error buffer of at least
+ *                     <eslERRBUFSIZE> characters.
+ *
+ * Returns:   <eslOK> on successful validation. 
+ *            <eslFAIL> on failure, and if a non-<NULL> <errbuf> was
+ *            provided by the caller, a message describing
+ *            the reason for the failure is put there.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_rmx_ValidateQ(ESL_DMATRIX *Q, double tol, char *errbuf)
+{
+  int    i,j;
+  double qi;
+
+  if (Q->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "Q must be type eslGENERAL to be validated");
+  if (Q->n    != Q->m)       ESL_EXCEPTION(eslEINVAL, "a rate matrix Q must be square");
+
+  for (i = 0; i < Q->n; i++)
+    {
+      qi = 0.;
+      for (j = 0; j < Q->m; j++)
+	{
+	  if (i != j) {
+	    if (Q->mx[i][j] < 0.)       ESL_FAIL(eslFAIL, errbuf, "offdiag elem %d,%d < 0",i,j);
+	    qi += Q->mx[i][j];
+	  } else {
+	    if (Q->mx[i][j] > 0.)       ESL_FAIL(eslFAIL, errbuf, "diag elem %d,%d < 0", i,j);
+	  }
+	}
+      if (fabs(qi + Q->mx[i][i]) > tol) ESL_FAIL(eslFAIL, errbuf, "row %d does not sum to 0.0", i);
+    }
+  return eslOK;
+}
+
+
+
+/*****************************************************************
+ * 3. Other routines in the exposed ratematrix API.
+ *****************************************************************/
+
+/* Function:  esl_rmx_ScaleTo()
+ * Incept:    SRE, Tue Jul 13 16:05:16 2004 [St. Louis]
+ *
+ * Purpose:   Rescales rate matrix <Q> so that expected substitution
+ *            rate per dt is <unit>.
+ *
+ *            Expected substitution rate is:
+ *               $\sum_i \sum_j pi_i Q_ij  \forall i \neq j$
+ *
+ *            <unit> typically taken to be 1.0, so time units are substitutions/site.
+ *            An exception is PAM, where <unit> = 0.01 for 1 PAM unit.
+ *
+ * Args:      Q     - rate matrix to normalize
+ *            pi    - stationary residue frequencies
+ *            unit  - expected subsitution rate per dt 
+ *                    (1.0 = substitutions/site; 0.01 = PAMs)
+ *
+ * Returns:   <eslOK> on success, and matrix Q is rescaled.
+ *
+ * Xref:      STL8/p56.
+ */
+int
+esl_rmx_ScaleTo(ESL_DMATRIX *Q, double *pi, double unit)
+{
+  int     i,j;
+  double  sum = 0.;
+
+  if (Q->m != Q->n || Q->type != eslGENERAL)
+    ESL_EXCEPTION(eslEINVAL, "Q must be a square general matrix");
+
+  for (i = 0; i < Q->m; i++)
+    for (j = 0; j < Q->n; j++)
+      if (i != j) sum += pi[i] * Q->mx[i][j];
+
+  for (i = 0; i < Q->m; i++)
+    for (j = 0; j < Q->n; j++)
+      Q->mx[i][j] *= (unit / sum);
+
+  return eslOK;
+}
+
+
+
+/* Function:  esl_rmx_E2Q()
+ * Incept:    SRE, Tue Jul 13 15:52:41 2004 [St. Louis]
+ *
+ * Purpose:   Given a lower triangular matrix ($j<i$) of 
+ *            residue exchangeabilities <E>, and a stationary residue
+ *            frequency vector <pi>; assuming $E_{ij} = E_{ji}$;
+ *            calculates a rate matrix <Q> as
+ *            
+ *            $Q_{ij} = E_{ij} * \pi_j$
+ *            
+ *            The resulting <Q> is not normalized to any particular
+ *            number of substitutions/site/time unit. See
+ *            <esl_rmx_ScaleTo()> for that.
+ *            
+ * Args:      E     - symmetric residue "exchangeabilities";
+ *                    only lower triangular entries are used.
+ *            pi    - residue frequencies at stationarity. 
+ *            Q     - RETURN: rate matrix, square (NxN). 
+ *                    Caller allocates the memory for this.
+ *                    
+ * Returns:   <eslOK> on success; Q is calculated and filled in.
+ * 
+ * Xref:      STL8/p56.
+ */
+int
+esl_rmx_E2Q(ESL_DMATRIX *E, double *pi, ESL_DMATRIX *Q)
+{
+  int          i,j;
+
+  if (E->n != Q->n) ESL_EXCEPTION(eslEINVAL, "E and Q sizes differ");
+
+  /* Scale all off-diagonals to pi[j] * E[i][j].
+   */
+  for (i = 0; i < E->n; i++)
+    for (j = 0; j < i; j++)	/* only look at lower triangle of E. */
+      {
+	Q->mx[i][j] = pi[j] * E->mx[i][j]; 
+	Q->mx[j][i] = pi[i] * E->mx[i][j];
+      }
+
+  /* Set diagonal to  -\sum of all j != i.
+   */
+  for (i = 0; i < Q->n; i++)
+    {
+      Q->mx[i][i] = 0.;		/* makes the vector sum work for j != i */
+      Q->mx[i][i] = -1. * esl_vec_DSum(Q->mx[i], Q->n);
+    }
+  return eslOK;
+}
+
+
+/* Function:  esl_rmx_RelativeEntropy()
+ * Incept:    SRE, Fri Mar 23 09:18:26 2007 [Janelia]
+ *
+ * Purpose:   Given a conditional substitution probability matrix <P>,
+ *            with stationary probabilities <pi>, calculate its
+ *            relative entropy $H$:
+ *            
+ *               $H_t = \sum_{ij} P(j \mid i,t) \pi_i \log_2 \frac{P(j \mid i,t)} {\pi_j}$
+ *               
+ *            This assumes that the stationary probabilities are the
+ *            same as the background (null model) probabilities.   
+ *
+ * Returns:   the relative entropy, $H$, in bits
+ */
+double
+esl_rmx_RelativeEntropy(ESL_DMATRIX *P, double *pi)
+{
+  double H = 0.;
+  int    i,j;
+
+  for (i = 0; i < P->m; i++)
+    for (j = 0; j < P->n; j++)
+      H += P->mx[i][j] * pi[i] * log(P->mx[i][j] / pi[j]);
+  return H / eslCONST_LOG2;
+}
+  
+/* Function:  esl_rmx_ExpectedScore()
+ * Incept:    SRE, Fri Mar 23 09:32:05 2007 [Janelia]
+ *
+ * Purpose:   Given a conditional substitution probability matrix <P>
+ *            with stationary probabilities <pi>, calculate its
+ *            expected score:
+ *            
+ *               $ = \sum_{ij} \pi_j \pi_i \log_2 \frac{P(j \mid i,t)} {\pi_j}$
+ *               
+ *            This assumes that the stationary probabilities are the
+ *            same as the background (null model) probabilities.   
+ *
+ * Returns:   the expected score, in bits
+ */
+double
+esl_rmx_ExpectedScore(ESL_DMATRIX *P, double *pi)
+{
+  double S = 0.;
+  int    i,j;
+
+  for (i = 0; i < P->m; i++)
+    for (j = 0; j < P->n; j++)
+      S += pi[j] * pi[i] * log(P->mx[i][j] / pi[j]);
+  return S / eslCONST_LOG2;
+}
+
+
+
+
+/*****************************************************************
+ * 4. Benchmark driver
+ *****************************************************************/
+
+#ifdef eslRATEMATRIX_BENCHMARK
+
+/* 
+  without GSL:
+  gcc -O2 -I. -L. -o benchmark -DeslRATEMATRIX_BENCHMARK esl_ratematrix.c -leasel -lm
+
+  with GSL:
+  gcc -g -Wall -I. -L. -o benchmark -DeslRATEMATRIX_BENCHMARK -DHAVE_LIBGSL esl_dmatrix.c esl_ratematrix.c -leasel -lgsl -lgslcblas -lm
+ */
+
+#include <esl_config.h>
+
+#ifdef HAVE_LIBGSL
+#include <gsl/gsl_matrix.h>
+#include <gsl/gsl_linalg.h>
+#endif
+
+#include "easel.h"
+#include "esl_stopwatch.h"
+#include "esl_dmatrix.h"
+#include "esl_ratematrix.h"
+
+int
+main(void)
+{
+  ESL_STOPWATCH *w = NULL;
+  ESL_DMATRIX *Q  = NULL;
+  ESL_DMATRIX *P  = NULL;
+  double       t = 5.0;
+  int          esl_iterations = 100;
+  int          i;
+#ifdef HAVE_LIBGSL
+  gsl_matrix  *Qg = NULL;
+  gsl_matrix  *Pg = NULL;
+  int          gsl_iterations = 100;
+#endif
+
+  w = esl_stopwatch_Create();
+  Q = esl_dmatrix_Create(20, 20);
+  P = esl_dmatrix_Create(20, 20);
+  esl_rmx_SetWAG(Q, NULL);
+
+  esl_stopwatch_Start(w);
+  for (i = 0; i < esl_iterations; i++)
+    esl_dmx_Exp(Q, t, P);
+  esl_stopwatch_Stop(w);
+  printf("Easel takes:   %g sec\n", w->user / (double) esl_iterations);
+
+#ifdef HAVE_LIBGSL
+  if (esl_dmx_MorphGSL(Q, &Qg)             != eslOK) esl_fatal("morph to gsl_matrix failed");
+  if ((Pg = gsl_matrix_alloc(20, 20))      == NULL)  esl_fatal("gsl alloc failed");
+  gsl_matrix_scale(Qg, t);
+  
+  esl_stopwatch_Start(w);
+  for (i = 0; i < gsl_iterations; i++)
+    gsl_linalg_exponential_ss(Qg, Pg, GSL_PREC_DOUBLE);
+  esl_stopwatch_Stop(w);
+  printf("  GSL takes:   %g sec\n", w->user / (double) gsl_iterations);
+
+  gsl_matrix_free(Qg);
+  gsl_matrix_free(Pg);
+#endif /*HAVE_LIBGSL*/
+
+  esl_dmatrix_Destroy(Q);
+  esl_dmatrix_Destroy(P);
+  esl_stopwatch_Destroy(w);
+  return 0;
+}
+
+#endif /*eslRATEMATRIX_BENCHMARK*/
+
+
+/*****************************************************************
+ * 5. Regression test driver
+ *****************************************************************/
+#ifdef eslRATEMATRIX_REGRESSION
+#ifdef HAVE_LIBGSL
+
+/* This tests rate matrix exponentiation against the GSL's
+ * undocumented implementation of a matrix exponential.
+ */
+/* 
+  gcc -g -Wall -I. -L. -o ratematrix_regression -DeslRATEMATRIX_REGRESSION -DHAVE_LIBGSL esl_dmatrix.c esl_ratematrix.c -leasel -lgsl -lgslcblas -lm
+ */
+
+#include "esl_config.h"
+
+#include <gsl/gsl_matrix.h>
+#include <gsl/gsl_linalg.h>
+
+#include "easel.h"
+#include "esl_dmatrix.h"
+#include "esl_ratematrix.h"
+
+int
+main(void)
+{
+  char errbuf[eslERRBUFSIZE];
+  char *alphabet = "ACDEFGHIKLMNPQRSTVWY";
+  ESL_DMATRIX *Q  = NULL;
+  ESL_DMATRIX *P  = NULL;
+  gsl_matrix  *Qg = NULL;
+  gsl_matrix  *Pg = NULL;
+  ESL_DMATRIX *Pge = NULL;
+  double       t = 15.0;
+
+  if ((Q = esl_dmatrix_Create(20, 20))     == NULL)  esl_fatal("malloc failed");
+  if ((P = esl_dmatrix_Create(20, 20))     == NULL)  esl_fatal("malloc failed");
+
+  if (esl_rmx_SetWAG(Q, NULL)              != eslOK) esl_fatal("_SetWAG() failed");
+  if (esl_rmx_ValidateQ(Q, 0.0001, errbuf) != eslOK) esl_fatal("Q validation failed: %s", errbuf);
+
+  if (esl_dmx_Exp(Q, t, P)                 != eslOK) esl_fatal("matrix exponentiation failed");
+  if (esl_rmx_ValidateP(P, 0.0001, errbuf) != eslOK) esl_fatal("P validation failed: %s", errbuf);
+
+  if (esl_dmx_MorphGSL(Q, &Qg)             != eslOK) esl_fatal("morph to gsl_matrix failed");
+  if ((Pg = gsl_matrix_alloc(20, 20))      == NULL)  esl_fatal("gsl alloc failed");
+  gsl_matrix_scale(Qg, t);
+  if (gsl_linalg_exponential_ss(Qg, Pg, GSL_PREC_DOUBLE) != 0) esl_fatal("gsl's exponentiation failed");
+  if (esl_dmx_UnmorphGSL(Pg, &Pge)         != eslOK) esl_fatal("morph from gsl_matrix failed");  
+  
+  esl_dmatrix_Dump(stdout, P, alphabet, alphabet);
+
+  if (esl_dmatrix_Compare(Pge, P, 0.00001) != eslOK) esl_fatal("whoops, different answers.");
+  
+  esl_dmatrix_Destroy(Q);
+  esl_dmatrix_Destroy(P);
+  esl_dmatrix_Destroy(Pge);
+  gsl_matrix_free(Qg);
+  gsl_matrix_free(Pg);
+  return 0;
+}
+#else 
+  /* if we don't have GSL, then compile in a dummy main(), solely 
+   *  to quiet any tests that are verifying that all drivers compile
+   *  and run. */
+int main(void) { return 0; }
+#endif /*HAVE_LIBGSL*/
+
+#endif /*eslRATEMATRIX_REGRESSION*/
+
+
+/*****************************************************************
+ * 6. Unit tests.
+ *****************************************************************/
+#ifdef eslRATEMATRIX_TESTDRIVE
+
+static void
+utest_SetWAG(void)
+{
+  char errbuf[eslERRBUFSIZE];
+  ESL_DMATRIX *Q = NULL;
+  ESL_DMATRIX *P = NULL;
+  double       t = 50.0;	/* sufficiently large to drive e^tQ to stationarity  */
+  double       pi[20];
+  int          i;
+
+  if ((Q = esl_dmatrix_Create(20, 20))     == NULL)  esl_fatal("malloc failed");
+  if ((P = esl_dmatrix_Create(20, 20))     == NULL)  esl_fatal("malloc failed");
+
+  /* This tests that exponentiating WAG gives a stable conditional 
+   * probability matrix solution. (It doesn't particularly test that
+   * WAG was set correctly, but how could we have screwed that up?)
+   */
+  if (esl_rmx_SetWAG(Q, NULL)              != eslOK) esl_fatal("_SetWAG() failed");
+  if (esl_dmx_Exp(Q, t, P)                 != eslOK) esl_fatal("matrix exponentiation failed");
+  if (esl_rmx_ValidateP(P, 1e-7, errbuf)   != eslOK) esl_fatal("P validation failed: %s", errbuf);
+  if (esl_rmx_ValidateQ(Q, 1e-7, errbuf)   != eslOK) esl_fatal("Q validation failed: %s", errbuf);
+
+  /* This tests setting WAG to different stationary pi's than default,
+   * then tests that exponentiating to large t reaches those stationaries.
+   */
+  esl_vec_DSet(pi, 20, 0.05);
+  if (esl_rmx_SetWAG(Q, pi)                != eslOK) esl_fatal("_SetWAG() failed");
+  if (esl_dmx_Exp(Q, t, P)                 != eslOK) esl_fatal("matrix exponentiation failed");
+  if (esl_rmx_ValidateP(P, 1e-7, errbuf)   != eslOK) esl_fatal("P validation failed: %s", errbuf);
+  if (esl_rmx_ValidateQ(Q, 1e-7, errbuf)   != eslOK) esl_fatal("Q validation failed: %s", errbuf);
+  for (i = 0; i < 20; i++)
+    if (esl_vec_DCompare(P->mx[i], pi, 20, 1e-7) != eslOK) esl_fatal("P didn't converge to right pi's");
+
+  esl_dmatrix_Destroy(Q);
+  esl_dmatrix_Destroy(P);
+  return;
+}
+  
+#ifdef HAVE_LIBLAPACK
+static void
+utest_Diagonalization(void)
+{
+  ESL_DMATRIX *P      = NULL;
+  ESL_DMATRIX *P2     = NULL;
+  ESL_DMATRIX *C      = NULL;
+  ESL_DMATRIX *D      = NULL;
+  double      *lambda = NULL;		/* eigenvalues */
+  ESL_DMATRIX *U      = NULL;		/* left eigenvectors */
+  ESL_DMATRIX *Ui     = NULL;		/* inverse of U */
+  int  i,j;
+
+  /* Create a J/C probability matrix for t=1:
+   *    1/4 + 3/4 e^{-4/3 at}
+   *    1/4 - 1/4 e^{-4/3 at}
+   */
+  if ((P  = esl_dmatrix_Create(4, 4))    == NULL)  esl_fatal("malloc failed");
+  if ((C  = esl_dmatrix_Create(4, 4))    == NULL)  esl_fatal("malloc failed");
+  if ((Ui = esl_dmatrix_Create(4, 4))    == NULL)  esl_fatal("malloc failed");
+  if ((D  = esl_dmatrix_Create(4, 4))    == NULL)  esl_fatal("malloc failed");
+  if ((P2 = esl_dmatrix_Create(4, 4))    == NULL)  esl_fatal("malloc failed");
+  for (i = 0; i < 4; i++)
+    for (j = 0; j < 4; j++)
+      if (i == j) P->mx[i][j] = 0.25 + 0.75 * exp(-4./3.);
+      else        P->mx[i][j] = 0.25 - 0.25 * exp(-4./3.);
+
+  /* Diagonalize it
+   */
+  if (esl_dmx_Diagonalize(P, &lambda, NULL, &U, NULL) != eslOK) esl_fatal("diagonalization failed");
+
+  /* Calculate P^k by U [diag(lambda_i)]^k U^{-1}
+   */
+  esl_dmatrix_SetZero(D);
+  for (i = 0; i < P->n; i++) D->mx[i][i] = lambda[i];
+  esl_dmx_Invert(U, Ui);
+  esl_dmx_Multiply(U, D,  C);
+  esl_dmx_Multiply(C, Ui, P2);
+
+  if (esl_dmatrix_Compare(P, P2, 1e-7) != eslOK) esl_fatal("diagonalization unit test failed");
+
+  free(lambda);
+  esl_dmatrix_Destroy(P2);
+  esl_dmatrix_Destroy(Ui);
+  esl_dmatrix_Destroy(U);
+  esl_dmatrix_Destroy(D);
+  esl_dmatrix_Destroy(C);
+  esl_dmatrix_Destroy(P);
+  return;
+}
+#endif /*HAVE_LIBLAPACK*/
+
+#endif /*eslRATEMATRIX_TESTDRIVE*/
+
+/*****************************************************************
+ * 7. Test driver
+ *****************************************************************/
+
+#ifdef eslRATEMATRIX_TESTDRIVE
+/* gcc -g -Wall -o test -I. -L. -DeslRATEMATRIX_TESTDRIVE esl_ratematrix.c -leasel -lm
+ * ./test
+ *
+ * gcc -g -Wall -o test -I. -L. -DHAVE_LIBLAPACK -DeslRATEMATRIX_TESTDRIVE esl_ratematrix.c esl_dmatrix.c -leasel -llapack -lm
+ */
+#include "esl_config.h"
+
+#include "easel.h"
+#include "esl_ratematrix.h"
+
+int
+main(void)
+{
+  utest_SetWAG();
+#ifdef HAVE_LIBLAPACK
+  utest_Diagonalization();
+#endif
+
+  return 0;
+
+}
+#endif /*eslRATEMATRIX_TESTDRIVE*/
+
+/*****************************************************************
+ * 8. Example driver
+ *****************************************************************/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/ 
diff --git a/esl_ratematrix.h b/esl_ratematrix.h
new file mode 100644
index 0000000..4fbb604
--- /dev/null
+++ b/esl_ratematrix.h
@@ -0,0 +1,31 @@
+/* Routines for manipulating evolutionary rate matrices.
+ * 
+ * SRE, Tue Jul 13 16:09:05 2004 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslRATEMATRIX_INCLUDED
+#define eslRATEMATRIX_INCLUDED
+
+/* 1. Setting standard rate matrix models. */
+extern int esl_rmx_SetWAG(ESL_DMATRIX *Q, double *pi); 
+extern int esl_rmx_SetJukesCantor(ESL_DMATRIX *Q);
+extern int esl_rmx_SetKimura(ESL_DMATRIX *Q, double alpha, double beta);
+extern int esl_rmx_SetF81(ESL_DMATRIX *Q, double *pi);
+extern int esl_rmx_SetHKY(ESL_DMATRIX *Q, double *pi, double alpha, double beta); 
+
+/* 2. Debugging routines for validating or dumping rate matrices. */
+extern int esl_rmx_ValidateP(ESL_DMATRIX *P, double tol, char *errbuf);
+extern int esl_rmx_ValidateQ(ESL_DMATRIX *Q, double tol, char *errbuf);
+
+/* 3. Other routines in the exposed ratematrix API. */
+extern int    esl_rmx_ScaleTo(ESL_DMATRIX *Q, double *pi, double unit);
+extern int    esl_rmx_E2Q(ESL_DMATRIX *E, double *pi, ESL_DMATRIX *Q);
+extern double esl_rmx_RelativeEntropy(ESL_DMATRIX *P, double *pi);
+extern double esl_rmx_ExpectedScore  (ESL_DMATRIX *P, double *pi);
+
+
+#endif /*eslRATEMATRIX_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_ratematrix.tex b/esl_ratematrix.tex
new file mode 100644
index 0000000..a603a6f
--- /dev/null
+++ b/esl_ratematrix.tex
@@ -0,0 +1,3 @@
+The \eslmod{ratematrix} module implements continuous-time Markov
+evolutionary models of residue subsitution.
+
diff --git a/esl_recorder.c b/esl_recorder.c
new file mode 100644
index 0000000..7a28fb9
--- /dev/null
+++ b/esl_recorder.c
@@ -0,0 +1,1141 @@
+/* Saving history in a line-based input stream
+ * 
+ * Contents:
+ *   1. The <ESL_RECORDER> object
+ *   2. Using the <ESL_RECORDER>
+ *   3. Internal (static) functions
+ *   4. Benchmark driver
+ *   5. Unit tests
+ *   6. Test driver
+ *   7. Examples
+ *   8. Copyright and license
+ * 
+ */
+#include "esl_config.h"
+
+#include <string.h>
+
+#include "easel.h"
+#include "esl_recorder.h"
+
+static void linearray_reverse(ESL_RECORDER *rc, int pos, int n);
+static int  recorder_new_baseline(ESL_RECORDER *rc, int newbase);
+
+/*****************************************************************
+ * 1. The <ESL_RECORDER> object
+ *****************************************************************/
+
+/* Function:  esl_recorder_Create()
+ * Synopsis:  Create an <ESL_RECORDER>.
+ * Incept:    SRE, Fri Dec 25 16:27:40 2009 [Casa de Gatos]
+ *
+ * Purpose:   Allocate a new <ESL_RECORDER> that will read
+ *            line-by-line from input stream <fp>, saving
+ *            a history of up to <maxlines> lines.
+ *
+ * Returns:   pointer to the new <ESL_RECORDER> on success.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_RECORDER *
+esl_recorder_Create(FILE *fp, int maxlines)
+{
+  ESL_RECORDER *rc = NULL;
+  int           i;
+  int           status;
+
+  ESL_ALLOC(rc, sizeof(ESL_RECORDER));
+  rc->fp         = fp;
+  rc->line       = NULL;
+  rc->nalloc     = maxlines;
+  rc->lalloc     = NULL;
+  rc->offset     = NULL;
+  rc->nread      = 0;
+  rc->ncurr      = 0;
+  rc->baseline   = 0;
+  rc->markline   = -1;
+
+  ESL_ALLOC(rc->line,   sizeof(char *) * rc->nalloc);
+  for (i = 0; i < rc->nalloc; i++) rc->line[i]   = NULL;
+
+  ESL_ALLOC(rc->lalloc, sizeof(int)    * rc->nalloc);
+  for (i = 0; i < rc->nalloc; i++) rc->lalloc[i] = 0;
+
+  ESL_ALLOC(rc->offset, sizeof(off_t)  * rc->nalloc);
+  for (i = 0; i < rc->nalloc; i++) rc->offset[i] = 0;
+
+  return rc;
+
+ ERROR:
+  esl_recorder_Destroy(rc);
+  return NULL;
+}
+
+/* Function:  esl_recorder_ResizeTo()
+ * Synopsis:  Reallocate an <ESL_RECORDER> for a new <maxlines>
+ * Incept:    SRE, Fri Dec 25 17:02:46 2009 [Casa de Gatos]
+ *
+ * Purpose:   Reallocate the <ESL_RECORDER> <rc> to have a new
+ *            window size <maxlines>. 
+ *            
+ *            The new <maxlines> may be more or less than the previous
+ *            window size for <rc>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> if (re-)allocation fails.
+ *
+ *            <eslEINVAL> if the recorder has a marked line (for start
+ *            of a block) and you try to shrink it so much that that
+ *            marked line would be lost.
+ *
+ *            <eslEINCONCEIVABLE> on any baseline resetting problem;
+ *            this would have to be an internal error in the module.
+ * 
+ * Note:      We may have to repermute the line array, and reset its
+ *            baseline, as follows.
+ *            
+ *            In the growth case: if the line array is out of order
+ *            (circularly permuted) we must straighten it out, which
+ *            means resetting the baseline.  
+ *            i.e. to grow 3 1 2 to nalloc=6, we need 1 2 3 x x x; 
+ *            simple reallocation to 3 1 2 x x x doesn't work,
+ *            next read would make 3 4 2 x x x.
+ *          
+ *            In the shrinkage case: if the line array is in use beyond the
+ *            new array size, we set a new baseline to keep as much of the
+ *            old array as possible.
+ * 
+ *            i.e. for 6->3  
+ *            1 2 3 x x x -> 1 2 3
+ *            1 2 3 4 x x -> 2 3 4 with new baseline=2.
+ *            4 5 0 1 2 3 -> 3 4 5 with new baseline=3
+ */
+int
+esl_recorder_ResizeTo(ESL_RECORDER *rc, int new_maxlines)
+{
+  int   idx;
+  int   newbase;
+  void *tmp;
+  int   minlines;
+  int   status;
+
+  if (new_maxlines == rc->nalloc) return eslOK;
+
+  if (new_maxlines > rc->nalloc) /* growth case */
+    {
+      if ((rc->nread - rc->baseline) / rc->nalloc != 0)	/* array is permuted; reorder it */
+	{
+	  newbase = ESL_MAX(rc->baseline, rc->nread - rc->nalloc);
+	  status = recorder_new_baseline(rc, newbase);
+	  if (status) ESL_EXCEPTION(eslEINCONCEIVABLE, "baseline reset failed unexpectedly");
+	}
+    }
+  else 				/* shrinkage case */
+    {
+      /* check that the marked line (if any) will stay in window */
+      if (rc->markline >= 0)	
+	{
+	  minlines = rc->nread - rc->markline;
+	  if (new_maxlines < minlines)
+	    ESL_EXCEPTION(eslEINVAL, "can't shrink that far without losing marked line");
+	}
+      /* check that current line will stay in window */
+      minlines = rc->nread - rc->ncurr + 1;
+      if (new_maxlines < minlines)
+	ESL_EXCEPTION(eslEINVAL, "can't shrink that far without losing current line");
+
+      if (rc->nread - rc->baseline > new_maxlines) /* baseline needs to move up */
+	{
+	  newbase = rc->nread - new_maxlines;
+	  status = recorder_new_baseline(rc, newbase);
+	  if (status) ESL_EXCEPTION(eslEINCONCEIVABLE, "baseline reset failed unexpectedly");
+	}
+
+      for (idx = new_maxlines; idx < rc->nalloc; idx++)
+	if (rc->line[idx]) free(rc->line[idx]);
+    }
+
+  ESL_RALLOC(rc->line,   tmp, sizeof(char *) * new_maxlines);
+  ESL_RALLOC(rc->lalloc, tmp, sizeof(int)    * new_maxlines);
+  ESL_RALLOC(rc->offset, tmp, sizeof(off_t)  * new_maxlines);
+  for (idx = rc->nalloc; idx < new_maxlines; idx++) /* no-op in shrinkage case */
+    { 
+      rc->line[idx]   = NULL;
+      rc->lalloc[idx] = 0;
+      rc->offset[idx] = 0;
+    }
+  rc->nalloc = new_maxlines;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_recorder_GetFirst()
+ * Synopsis:  Returns the earliest linenumber stored.
+ * Incept:    SRE, Sat Jan  2 13:18:38 2010 [Zaragoza]
+ *
+ * Purpose:   Returns the earliest line number that is
+ *            stored in the recorder <rc>.
+ */
+int
+esl_recorder_GetFirst(ESL_RECORDER *rc)
+{
+  return (ESL_MAX(rc->baseline, rc->nread-rc->nalloc)); 
+}
+
+/* Function:  esl_recorder_GetLast()
+ * Synopsis:  Returns the furthest linenumber stored.
+ * Incept:    SRE, Sat Jan  2 13:19:45 2010 [Zaragoza]
+ *
+ * Purpose:   Returns the furthest line number that is
+ *            stored in the recorder <rc> -- the furthest
+ *            we have read into the input stream so far.
+ *            (This is not necessarily the current
+ *            position in the stream, if we have repositioned.)
+ */
+int
+esl_recorder_GetLast(ESL_RECORDER *rc)
+{
+  return (rc->nread-1);
+}
+
+/* Function:  esl_recorder_GetCurrent()
+ * Synopsis:  Returns the current line number.
+ * Incept:    SRE, Sat Jan  2 13:21:13 2010 [Zaragoza]
+ *
+ * Purpose:   Returns the current line number -- the
+ *            line number most recently returned by
+ *            a call to <esl_recorder_Read()).
+ */
+int 
+esl_recorder_GetCurrent(ESL_RECORDER *rc)
+{
+  return (rc->ncurr-1);
+}
+
+/* Function:  esl_recorder_GetNext()
+ * Synopsis:  Returns the next line number.
+ * Incept:    SRE, Sat Jan  2 13:21:13 2010 [Zaragoza]
+ *
+ * Purpose:   Returns the next line number that would
+ *            be read by a call to <esl_recorder_Read()).
+ */
+int
+esl_recorder_GetNext(ESL_RECORDER *rc)
+{
+  return (rc->ncurr);
+}
+ 
+
+
+
+/* Function:  esl_recorder_Destroy()
+ * Synopsis:  Frees an <ESL_RECORDER>.
+ * Incept:    SRE, Fri Dec 25 16:30:14 2009 [Casa de Gatos]
+ *
+ * Purpose:   Frees the <ESL_RECORDER> <rc>.
+ *
+ * Returns:   (void).
+ */
+void
+esl_recorder_Destroy(ESL_RECORDER *rc)
+{
+  int i;
+
+  if (rc == NULL) return;
+
+  if (rc->offset) free(rc->offset);
+  if (rc->lalloc) free(rc->lalloc);
+  if (rc->line) {
+    for (i = 0; i < rc->nalloc; i++)
+      if (rc->line[i]) free(rc->line[i]);
+    free(rc->line);
+  }
+  free(rc);
+  return;
+}
+/*--------------- end, <ESL_RECORDER> object --------------------*/
+
+
+
+
+/*****************************************************************
+ * 2. Using the <ESL_RECORDER> 
+ *****************************************************************/
+
+/* Function:  esl_recorder_Read()
+ * Synopsis:  Read next line of a stream through an <ESL_RECORDER>.
+ * Incept:    SRE, Fri Dec 25 16:31:00 2009 [Casa de Gatos]
+ *
+ * Purpose:   Read the next line of the input stream that the
+ *            <ESL_RECORDER> <rc> is recording. Return a ptr to
+ *            it in <*opt_line>. Note that the <ESL_RECORDER> 
+ *            deals with allocation and freeing of this line;
+ *            if caller wants to keep it for something, it must
+ *            make a copy immediately, because subsequent calls
+ *            to <esl_recorder_*> functions may overwrite these
+ *            internal memory buffers.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslEOF> if no more lines exist in the stream.
+ *
+ * Throws:    <eslEMEM> on an allocation failure.
+ */
+int
+esl_recorder_Read(ESL_RECORDER *rc, char **opt_line)
+{
+  int idx = (rc->ncurr - rc->baseline) % rc->nalloc;     /* index of line to read, in wrapped coords */
+  int status;
+  
+  /* if currline <= lastline, we already have the line recorded;
+   * else we need to read a new one from <fp> */
+  if (rc->ncurr >= rc->nread)
+    {
+      /* if reading a new line would overwrite our marked start, grow */
+      if ( rc->markline >= 0 && 
+	   ((rc->ncurr - rc->baseline) % rc->nalloc == ((rc->markline - rc->baseline) % rc->nalloc)))
+	{
+	  int xtra = ESL_MAX(3, (rc->nalloc / 3));
+	  status = esl_recorder_ResizeTo(rc, rc->nalloc + xtra);
+	  if (status) goto ERROR;
+	  idx = (rc->ncurr - rc->baseline) % rc->nalloc; 
+	}
+
+      rc->offset[idx] = ftello(rc->fp);
+      status = esl_fgets(&(rc->line[idx]), &(rc->lalloc[idx]), rc->fp);
+      if (status) goto ERROR;
+      rc->nread++;
+    }
+
+  rc->ncurr++;
+  if (opt_line) *opt_line = rc->line[idx];
+  return eslOK;
+
+ ERROR:
+  if (opt_line) *opt_line = NULL;
+  return status;
+}
+
+
+/* Function:  esl_recorder_Position()
+ * Synopsis:  Reset the recorder to a new starting line position.
+ * Incept:    SRE, Mon Dec 28 10:25:22 2009 [Casa de Gatos]
+ *
+ * Purpose:   Reset the recorder <rc> to a new line position <linenumber>,
+ *            starting from 0. The next call to <esl_recorder_Read()>
+ *            will read this line.
+ *            
+ *            The <linenumber> can be ahead of the furthest line read
+ *            by the recorder so far, in which case it calls
+ *            <esl_recorder_Read()> until it reaches the proper
+ *            position. This can result in a return code of <eslEOF>,
+ *            if no such line exists in the stream.
+ *            
+ *            If the <linenumber> falls before (outside) the
+ *            recorder's history window, an <eslEINVAL> exception is
+ *            thrown.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslEOF> if <linenumber> is larger than current position
+ *            in file, and the stream ends before line <linenumber> is
+ *            reached.
+ *
+ * Throws:    <eslEMEM> on allocation failure; this can only happen
+ *            if <linenumber> is larger than current position in
+ *            file, forcing <esl_recorder_Read()> calls to reach that
+ *            line.
+ */
+int 
+esl_recorder_Position(ESL_RECORDER *rc, int linenumber)
+{
+  /* The recorder stores lines MAX(baseline,<nread-nalloc>)..<nread>-1 */
+  int line0  = ESL_MAX(rc->baseline, rc->nread - rc->nalloc);
+  int status;
+  
+  if (linenumber < line0)  
+    ESL_EXCEPTION(eslEINVAL, "recorder's window is past that line");
+
+  if (linenumber >= rc->nread) {
+    while (rc->nread < linenumber)
+      if ((status = esl_recorder_Read(rc, NULL)) != eslOK) return status;
+  }
+  
+  rc->ncurr = linenumber;
+  return eslOK;
+}
+
+/* Function:  esl_recorder_MarkBlock()
+ * Synopsis:  Mark first line to be saved in a block.
+ * Incept:    SRE, Fri Jan  1 11:13:53 2010 [Magallon]
+ *
+ * Purpose:   Mark line number <markline> (0..N-1) in a file being read
+ *            through the <ESL_RECORDER> <rc> as the first line in a
+ *            block of lines to be parsed later, when the end of
+ *            the block is found. 
+ *            
+ *            This mark makes sure that the <ESL_RECORDER> will keep
+ *            the entire block of lines in memory, starting at or
+ *            before the mark. When a mark is active,
+ *            <esl_recorder_Read()> will reallocate and grow the
+ *            recorder as necessary, rather than overwriting the mark.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if the <markline> has already passed out
+ *            of the recorder's memory.
+ */
+int
+esl_recorder_MarkBlock(ESL_RECORDER *rc, int markline)
+{
+  int line0 = ESL_MAX(rc->baseline, rc->nread - rc->nalloc);
+  
+  if (markline < line0) ESL_EXCEPTION(eslEINVAL, "recorder window already passed marked line");
+  rc->markline = markline;
+  return eslOK;
+}
+
+
+/* Function:  esl_recorder_UnmarkBlock()
+ * Synopsis:  Remove a marked start of a block.
+ * Incept:    SRE, Fri Jan  1 12:47:32 2010 [Magallon]
+ *
+ * Purpose:   Release the mark in the <ESL_RECORDER> <rc>, if any.
+ * 
+ *            The recorder will no longer reallocate and grow to keep
+ *            the marked line in memory. 
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_recorder_UnmarkBlock(ESL_RECORDER *rc)
+{
+  rc->markline = -1;
+  return eslOK;
+}
+
+
+/* Function:  esl_recorder_GetBlock()
+ * Synopsis:  Get a block of lines from a recorder, starting at the mark.
+ * Incept:    SRE, Fri Jan  1 12:50:33 2010 [Magallon]
+ *
+ * Purpose:   Get pointers into the internal memory arrays of the
+ *            recorder <rc>, starting at the marked start of a block
+ *            and ending at the most recently read line <rc->ncurr-1>,
+ *            so you can parse a block of lines.
+ *            
+ *            Because these pointers are internally managed by the
+ *            recorder <rc>, they should not be freed or reallocated
+ *            or things like that. You should also avoid calling any
+ *            <esl_recorder_*()> functions until you're done accessing
+ *            these data, in case a function call alters the internal
+ *            state of the object. 
+ *            
+ *            If you do something that changes the contents of the
+ *            lines (like strtok()'ing them), those changes will be
+ *            preserved -- if you want to leave the original recorder
+ *            data untouched and you need a temporary working copy of
+ *            the data, you should make that copy yourself.
+ *
+ * Args:      opt_lines  : ptr to array of lines, indexed [0..*opt_nlines-1];
+ *                         starting with line <rc->markline> and ending with
+ *                         <rc->ncurr-1>, in order.
+ *            opt_lalloc : array of memory allocations for each line
+ *            opt_offset : array of offsets into input stream for start of each line
+ *            opt_nlines : number of lines (minimally) valid in these arrays,
+ *                         starting from the mark and ending at the most recent
+ *                         line read.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_recorder_GetBlock(ESL_RECORDER *rc, char ***opt_lines, int **opt_lalloc, off_t **opt_offset, int *opt_nlines)
+{
+  int idx0, idx1;
+  int status;
+
+  /* Everything from the markline to ncurr-1 must be in order and not
+   * permuted.  If it isn't in proper order, then reorder the recorder
+   * to have ncurr-1 in last array position.
+   */
+  idx0 = (rc->markline - rc->baseline) % rc->nalloc;
+  idx1 = (rc->ncurr-1  - rc->baseline) % rc->nalloc;
+  if (idx0 > idx1) 
+    { 
+      if ((status = recorder_new_baseline(rc, rc->ncurr-rc->nalloc)) != eslOK) goto ERROR;
+      idx0 = (rc->markline - rc->baseline) % rc->nalloc;
+    }
+
+  if (opt_lines)  *opt_lines  = rc->line   + idx0;
+  if (opt_lalloc) *opt_lalloc = rc->lalloc + idx0;
+  if (opt_offset) *opt_offset = rc->offset + idx0;
+  if (opt_nlines) *opt_nlines = rc->ncurr  - rc->markline;
+  return eslOK;
+
+ ERROR:
+  if (opt_lines)  *opt_lines  = NULL;
+  if (opt_lalloc) *opt_lalloc = NULL;
+  if (opt_offset) *opt_offset = NULL;
+  if (opt_nlines) *opt_nlines = 0;
+  return status;
+}
+/*----------------- end, using ESL_RECORDER ---------------------*/
+
+
+
+
+/*****************************************************************
+ * 3. Internal (static) functions
+ *****************************************************************/
+
+/* linearray_reverse() 
+ * In-place O(N) reversal of a subsection of the line array data,
+ * starting at i=pos, for n positions.
+ */
+static void
+linearray_reverse(ESL_RECORDER *rc, int pos, int n)
+{
+  int    i;
+  char  *tmps;
+  int    tmpi;
+  off_t  tmpo;
+
+  /* the line array itself */
+  for (i = 0; i < n/2; i++)
+    {
+      tmps                = rc->line[pos+n-i-1];
+      rc->line[pos+n-i-1] = rc->line[pos+i];
+      rc->line[pos+i]     = tmps;
+    }
+
+  /* the line allocation array */
+  for (i = 0; i < n/2; i++)
+    {
+      tmpi                  = rc->lalloc[pos+n-i-1];
+      rc->lalloc[pos+n-i-1] = rc->lalloc[pos+i];
+      rc->lalloc[pos+i]     = tmpi;
+    }
+
+  /* the offset array */
+  for (i = 0; i < n/2; i++)
+    {
+      tmpo                  = rc->offset[pos+n-i-1];
+      rc->offset[pos+n-i-1] = rc->offset[pos+i];
+      rc->offset[pos+i]     = tmpo;
+    }
+}
+
+/* recorder_new_baseline()
+ * SRE, Fri Jan  1 09:00:55 2010 [Zaragoza]
+ * 
+ * Set a ESL_RECORDER <rc> to a new baseline <newbase>, [0..N-1],
+ * greater than the previous baseline in the recorder.
+ * 
+ * In general, must succeed, returning <eslOK>. If new baseline
+ * is <= old one, throws <eslEINVAL>, but you shouldn't do that.
+ * 
+ * This is done in place in O(1) memory (no addiional or temporary
+ * allocation) and O(nalloc) time, using a trick: we can redo any
+ * circular permutation by no more than four in-place substring
+ * reversals:
+ *      
+ *  456|123 ->  654|321 -> 65|4321 -> 56|1234
+ *      (reversals)  (new brkpt) (reversals)
+ *
+ * Some possible cases (all examples nalloc=7) 
+ *   0  1  2  3  4  x  x   nread=5  [still filling the circle]
+ *   0  1  2  3  4  5  6   nread=7  [full, no wrapping yet]
+ *   7  8  2  3  4  5  6   nread=9  [wrapped]
+ *   7  8  9 10 11 12 13   nread=14 [back in order]
+ *   2  3  4  x  x  x  x   nread=5  baseline=2
+ *   2  3  4  5  6  7  8   nread=9  baseline=2
+ *   9 10  4  5  6  7  8   nread=11 baseline=2
+ *   9 10 11 12 13 14 15   nread=16 baseline=2 
+ *
+ * By reversing the two substrings (lengths n1 and n2), we now have a
+ * complete string in reverse order. Our examples now look like:
+ *   n1 n2
+ *   5   0     4  3  2  1  0  x  x
+ *   7   0     6  5  4  3  2  1  0
+ *   2   5     8  7  6  5  4  3  2
+ *   7   0    13 12 11 10  9  8  7
+ *   3   0     4  3  2  x  x  x  x
+ *   7   0     8  7  6  5  4  3  2
+ *   2   5    10  9  8  7  6  5  4
+ *   7   0    15 14 13 12 11 10  9
+ *
+ * After reversing two substrings calculated under the new
+ * baseline, our work is done. For example, if newbase=1,
+ * our first set of examples would look like:
+ *   n1 n2
+ *   4   0     1  2  3  4 [0  x  x]
+ *   6   0     1  2  3  4  5  6 [0]
+ *   1   6     8  2  3  4  5  6  7 
+ *   6   1     8  9 10 11 12 13  7
+ * and for newbase=3, the second set look like:
+ *   2   0     3  4 [2  x  x  x  x]
+ *   6   0     3  4  5  6  7  8 [2]
+ *   1   6    10  4  5  6  7  8  9
+ *   6   1    10 11 12 13 14 15  9
+ */
+static int
+recorder_new_baseline(ESL_RECORDER *rc, int newbase)
+{
+  int n1, n2;
+
+  if (newbase < rc->baseline)  ESL_EXCEPTION(eslEINVAL, "new baseline must be > old one");
+  if (newbase == rc->baseline) return eslOK;
+  
+  n1 = (rc->nread - rc->baseline) % rc->nalloc;
+  n2 = ESL_MIN(rc->nread-rc->baseline, rc->nalloc) - n1;
+
+  if (n1>1) linearray_reverse(rc,    0, n1);
+  if (n2>1) linearray_reverse(rc,   n1, n2);
+  
+  n1 = (rc->nread - newbase) % rc->nalloc;
+  n2 = ESL_MIN(rc->nread - newbase, rc->nalloc) - n1;
+    
+  if (n1>1) linearray_reverse(rc,  0, n1);
+  if (n2>1) linearray_reverse(rc, n1, n2);
+  
+  rc->baseline = newbase;
+  return eslOK;
+}
+/*----------------- end, internal functions ---------------------*/
+
+
+
+
+
+/*****************************************************************
+ * 4. Benchmark driver
+ *****************************************************************/
+#ifdef eslRECORDER_BENCHMARK
+/* gcc -O2 -std=gnu99 -DeslRECORDER_BENCHMARK -o esl_recorder_benchmark -I. esl_recorder.c esl_stopwatch.c esl_getopts.c easel.c 
+ */
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_recorder.h"
+#include "esl_stopwatch.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-N",        eslARG_INT,    "1000", NULL, "n>0", NULL,  NULL, NULL, "set recorder window size in lines",                0 },
+  { 0,0,0,0,0,0,0,0 },
+};
+static char usage[]  = "[-options] <filename>";
+static char banner[] = "benchmarking speed of ESL_RECORDER reading";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS   *go        = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  ESL_STOPWATCH *w         = esl_stopwatch_Create();
+  ESL_RECORDER  *rc        = NULL;
+  char          *filename  = esl_opt_GetArg(go, 1);
+  int            N         = esl_opt_GetInteger(go, "-N");
+  FILE          *fp        = NULL;
+  char          *buf       = NULL;
+  int            balloc    = 0;
+  int            status;
+  
+  if ((fp = fopen(filename, "r")) == NULL) esl_fatal("no such file %s\n", filename);
+  rc = esl_recorder_Create(fp, N);
+  esl_stopwatch_Start(w);
+  while ((status = esl_recorder_Read(rc, &buf)) == eslOK);
+  esl_recorder_Destroy(rc);
+  fclose(fp);
+
+  esl_stopwatch_Stop(w);
+  esl_stopwatch_Display(stdout, w, "recorder time:    ");
+  
+  if ((fp = fopen(filename, "r")) == NULL) esl_fatal("no such file %s\n", filename);
+  esl_stopwatch_Start(w);
+  while ((status = esl_fgets(&buf, &balloc, fp)) == eslOK);
+  free(buf);
+  fclose(fp);
+
+  esl_stopwatch_Stop(w);
+  esl_stopwatch_Display(stdout, w, "esl_fgets() time: ");
+
+  esl_stopwatch_Destroy(w);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslRECORDER_BENCHMARK*/
+/*---------------- end, benchmark driver ------------------------*/
+
+
+
+/*****************************************************************
+ * 5. Unit tests
+ *****************************************************************/
+#ifdef eslRECORDER_TESTDRIVE
+#include "esl_random.h"
+
+static void
+generate_testfile(ESL_RANDOMNESS *rng, char *tmpfile, int *is_data, int nlines)
+{
+  char *msg      = "esl_recorder:: test file generator failed";
+  FILE *fp       = NULL;
+  int   in_block = esl_rnd_Roll(rng, 2);      /* TRUE | FALSE */
+  int   nblock   = 1 + esl_rnd_Roll(rng, 10); /* 1..10        */
+  int   i;
+
+  if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg);
+  for (i = 0; i < nlines; i++)
+    {
+      is_data[i] = in_block ? TRUE : FALSE;
+      fprintf(fp, "%c%d\n", (in_block ? '#' : ' '), i);
+      if (--nblock == 0) {
+	in_block = ! in_block;
+	nblock   = 1 + esl_rnd_Roll(rng, 10); /* 1..10 */
+      }
+    }
+  fclose(fp);
+}
+
+static void
+utest_basic(char *tmpfile, int N)
+{
+  char         *msg         = "esl_recorder:: basic unit test failed";
+  ESL_RECORDER *rc          = NULL;
+  FILE         *fp          = NULL;
+  int           i;
+  char         *buf;
+
+  if ((fp = fopen(tmpfile, "r"))        == NULL) esl_fatal(msg);
+  if ((rc = esl_recorder_Create(fp, N)) == NULL) esl_fatal(msg);
+  for (i = 0; i < N; i++) 
+    {
+      if (esl_recorder_Read(rc, &buf)  != eslOK) esl_fatal(msg);
+      if (atoi(buf+1) != i)                      esl_fatal(msg);
+    }
+  if (esl_recorder_Read(rc, &buf)     != eslEOF) esl_fatal(msg);
+
+  if (buf != NULL)                               esl_fatal(msg);
+  
+  if (esl_recorder_Position(rc, 0)     != eslOK) esl_fatal(msg);
+  for (i = 0; i < N; i++) 
+    {
+      if (esl_recorder_Read(rc, &buf)  != eslOK) esl_fatal(msg);
+      if (atoi(buf+1) != i)                      esl_fatal(msg);
+    }
+  if (esl_recorder_Read(rc, &buf)     != eslEOF) esl_fatal(msg);
+
+  fclose(fp);
+  esl_recorder_Destroy(rc);
+}
+
+
+static void
+utest_grow(char *tmpfile, int N)
+{
+  char         *msg         = "esl_recorder:: grow unit test failed";
+  ESL_RECORDER *rc          = NULL;
+  FILE         *fp          = NULL;
+  int           i;
+  char         *buf;
+
+  if ((fp = fopen(tmpfile, "r"))        == NULL) esl_fatal(msg);
+  if ((rc = esl_recorder_Create(fp, 3)) == NULL) esl_fatal(msg);
+  for (i = 0; i < 4; i++) 
+    {
+      if (esl_recorder_Read(rc, &buf) != eslOK)  esl_fatal(msg);
+      if (atoi(buf+1) != i)                      esl_fatal(msg);
+    }
+  /* recorder has now wrapped: contains lines 3 1 2 */
+
+  if (esl_recorder_Position(rc, 0) != eslEINVAL) esl_fatal(msg);
+  if (esl_recorder_Position(rc, 1) != eslOK)     esl_fatal(msg);
+  if (esl_recorder_ResizeTo(rc, 6) != eslOK)     esl_fatal(msg);
+  /* now 1 2 3 x x x */
+
+  for (i = 1; i < N; i++)
+    {
+      if (esl_recorder_Read(rc, &buf) != eslOK)  esl_fatal(msg);
+      if (atoi(buf+1) != i)                      esl_fatal(msg);
+    }
+  if (esl_recorder_Read(rc, &buf) != eslEOF)     esl_fatal(msg);
+
+  fclose(fp);
+  esl_recorder_Destroy(rc);
+}
+
+static void
+utest_grow2(char *tmpfile, int N)
+{
+  char         *msg         = "esl_recorder:: grow2 unit test failed";
+  ESL_RECORDER *rc          = NULL;
+  FILE         *fp          = NULL;
+  int           i;
+  char         *buf;
+
+  if (N < 5) esl_fatal(msg);	/* need at least this for this test */
+
+  if ((fp = fopen(tmpfile, "r"))        == NULL) esl_fatal(msg);
+  if ((rc = esl_recorder_Create(fp, 3)) == NULL) esl_fatal(msg);
+  for (i = 0; i < 4; i++) 
+    {
+      if (esl_recorder_Read(rc, &buf) != eslOK)  esl_fatal(msg);
+      if (atoi(buf+1) != i)                      esl_fatal(msg);
+    }
+  /* recorder has now wrapped: contains lines 3 1 2 */
+
+  if (esl_recorder_ResizeTo(rc, 6)   != eslOK)   esl_fatal(msg);
+  /* recorder should now have reset baseline: 1 2 3 x x x */
+
+  if (esl_recorder_Read(rc, &buf) != eslOK)      esl_fatal(msg);
+  if (atoi(buf+1) != 4)                          esl_fatal(msg);
+  /* now it should have 1 2 3 4 x x (and not 3 4 2 x x x, or x 1 2 3 4 x, for example) */
+
+  if (esl_recorder_Position(rc, 0) != eslEINVAL) esl_fatal(msg);
+  if (esl_recorder_Position(rc, 1) != eslOK)     esl_fatal(msg);
+  for (i = 1; i < N; i++)
+    {
+      if (esl_recorder_Read(rc, &buf) != eslOK)  esl_fatal(msg);
+      if (atoi(buf+1) != i)                      esl_fatal(msg);
+    }
+  if (esl_recorder_Read(rc, &buf) != eslEOF)     esl_fatal(msg);
+
+  fclose(fp);
+  esl_recorder_Destroy(rc);
+}
+
+static void
+utest_shrink(char *tmpfile, int N)
+{
+  char         *msg         = "esl_recorder:: shrink unit test failed";
+  ESL_RECORDER *rc          = NULL;
+  FILE         *fp          = NULL;
+  int           i;
+  char         *buf;
+
+  if ((fp = fopen(tmpfile, "r"))        == NULL) esl_fatal(msg);
+  if ((rc = esl_recorder_Create(fp, 6)) == NULL) esl_fatal(msg);
+  for (i = 0; i < 7; i++) 
+    {
+      if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg);
+      if (atoi(buf+1) != i)                     esl_fatal(msg);
+    }
+  /* recorder has now wrapped: contains lines 6 1 2 3 4 5 */
+
+  if (esl_recorder_ResizeTo(rc, 3) != eslOK)    esl_fatal(msg);
+  /* now it's 6 4 5 */
+  if (esl_recorder_Position(rc, 4) != eslOK)    esl_fatal(msg);
+
+  for (i = 4; i < N; i++)
+    {
+      if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg);
+      if (atoi(buf+1) != i)                     esl_fatal(msg);
+    }
+  if (esl_recorder_Read(rc, &buf) != eslEOF)    esl_fatal(msg);
+
+  fclose(fp);
+  esl_recorder_Destroy(rc);
+}
+
+static void
+utest_block(ESL_RANDOMNESS *rng, char *tmpfile, int *is_data, int N)
+{
+  char         *msg            = "esl_recorder:: block unit test failed";
+  ESL_RECORDER *rc             = NULL;
+  FILE         *fp             = NULL;
+  int           linenumber     = 0; /* where we should be in the file */
+  int           max_reposition = 2;
+  int           max_realloc    = 2;
+  int          *nseen1         = NULL; /* # of times we Read() each line */
+  int          *nseen2         = NULL; /* # of times we see each line in a block */
+  int           minalloc;
+  int           roll;
+  char         *buf;
+  char        **block;
+  int           from;
+  int           n,i;
+  int           status         = eslOK;
+
+  if ((fp = fopen(tmpfile, "r"))           == NULL) esl_fatal(msg);
+  roll = 1+esl_rnd_Roll(rng, N+1);	/* 1..N+1 */
+  if ((rc = esl_recorder_Create(fp, roll)) == NULL) esl_fatal(msg);
+
+  if ((nseen1  = malloc(sizeof(int) * N))   == NULL) esl_fatal(msg);
+  if ((nseen2  = malloc(sizeof(int) * N))   == NULL) esl_fatal(msg);
+  for (i = 0; i < N; i++) nseen1[i]  = 0;
+  for (i = 0; i < N; i++) nseen2[i]  = 0;
+  
+  while (status == eslOK)
+    {
+      /* skip nondata lines (no # prefix) */
+      do {
+	if (esl_recorder_Read(rc, &buf) == eslEOF)     goto DONE;   
+	if (atoi(buf+1)                 != linenumber) esl_fatal(msg);
+	if (esl_recorder_GetCurrent(rc) != linenumber) esl_fatal(msg);
+	nseen1[linenumber]++;
+	linenumber++;
+      } while (*buf != '#');
+
+      /* read block */
+      from = esl_recorder_GetCurrent(rc);
+      esl_recorder_MarkBlock(rc, from);
+      do {
+	if ((status = esl_recorder_Read(rc, &buf)) == eslEOF)   break;
+	if (atoi(buf+1)                 != linenumber) esl_fatal(msg);
+	if (esl_recorder_GetCurrent(rc) != linenumber) esl_fatal(msg);
+	nseen1[linenumber]++;	
+	linenumber++;
+      } while (*buf == '#');
+      
+      /* get the block */
+      esl_recorder_GetBlock(rc, &block, NULL, NULL, &n);
+      if (status == eslOK) n--;
+
+      /* check the block */
+      for (i = 0; i < n; i++)
+	{
+	  if (atoi(block[i]+1) != from+i) esl_fatal(msg);
+	  nseen2[from+i]++;	
+	}
+
+      /* unmark it */
+      esl_recorder_UnmarkBlock(rc);
+
+      /* some fraction of the time, reposition randomly */
+      if (status == eslOK && max_reposition && (roll = esl_rnd_Roll(rng, 5)) == 0)
+	{
+	  linenumber = esl_recorder_GetFirst(rc) + 
+	    esl_rnd_Roll(rng, esl_recorder_GetLast(rc) - esl_recorder_GetFirst(rc) + 1);
+	  if (esl_recorder_Position(rc, linenumber) != eslOK) esl_fatal(msg);
+	  max_reposition--;
+	}
+
+      /* some fraction of the time, shrink the allocation */
+      if (status == eslOK && max_realloc && (roll = esl_rnd_Roll(rng, 5)) == 0)
+	{
+	  /* must keep at least nread-ncurr+1 lines, to keep curr line in window */
+	  minalloc = rc->nread-rc->ncurr+1;
+	  roll = minalloc + esl_rnd_Roll(rng, rc->nalloc-minalloc+1);
+	  if (esl_recorder_ResizeTo(rc, roll) != eslOK) esl_fatal(msg);
+	  max_realloc--;
+	}
+    }
+  
+ DONE:			
+  /* we're EOF. We should be sitting on the last line. */
+  if (esl_recorder_GetCurrent(rc) != N-1) esl_fatal(msg);
+
+  /* We should have Read() every line at least once. */
+  for (i = 0; i < N; i++) 
+    if (! nseen1[i]) esl_fatal(msg);
+
+  /* In reading blocks, we should have seen each "data" line at least
+   * once; non-data lines, not at all.
+   */
+  for (i = 0; i < N; i++) {
+    if (  is_data[i] && ! nseen2[i]) esl_fatal(msg);
+    if (! is_data[i] &&   nseen2[i]) esl_fatal(msg);
+  }
+
+  fclose(fp);
+  esl_recorder_Destroy(rc);
+  free(nseen1);
+  free(nseen2);
+}
+
+#endif /*eslRECORDER_TESTDRIVE*/
+/*------------------- end, unit tests ---------------------------*/
+
+
+/*****************************************************************
+ * 6. Test driver
+ *****************************************************************/
+#ifdef eslRECORDER_TESTDRIVE
+/* gcc -O2 -std=gnu99 -DeslRECORDER_TESTDRIVE -o esl_recorder_utest -I. esl_recorder.c esl_stopwatch.c esl_getopts.c esl_random.c easel.c -lm
+ */
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_recorder.h"
+
+static ESL_OPTIONS options[] = {
+  /* name      type      default  env  range toggles reqs incomp  help                         docgroup*/
+  { "-h",  eslARG_NONE, FALSE,  NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 },
+  { "-s",  eslARG_INT,    "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to <n>",        0 },
+  { "-v",  eslARG_NONE,   NULL, NULL, NULL, NULL, NULL, NULL, "more verbose output",                  0 },
+  { "-N",  eslARG_INT,   "200", NULL, NULL, NULL, NULL, NULL, "number of lines per test file",        0 },
+  { "-F",  eslARG_INT,   "100", NULL, NULL, NULL, NULL, NULL, "number of test files",                 0 },
+
+  { 0,0,0,0,0,0,0,0 },
+};
+static char usage[]  = "[-options] <filename>";
+static char banner[] = "test driver for ESL_RECORDER";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go          = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *rng         = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  char            template[13]= "esltmpXXXXXX";
+  char            tmpfile[13];
+  int             N           = esl_opt_GetInteger(go, "-N");
+  int             nfiles      = esl_opt_GetInteger(go, "-F");
+  int            *is_data     = malloc(sizeof(int) * N);
+
+  esl_exception_SetHandler(&esl_nonfatal_handler);
+
+  if (esl_opt_GetBoolean(go, "-v")) {
+    printf("random number seed: %" PRIu32 "\n", esl_randomness_GetSeed(rng));
+  }
+
+  while (nfiles--) 
+    {
+      strcpy(tmpfile, template);
+      generate_testfile(rng, tmpfile, is_data, N);
+
+      utest_basic (tmpfile, N);
+      utest_grow  (tmpfile, N);
+      utest_grow2 (tmpfile, N);
+      utest_shrink(tmpfile, N);
+      utest_block (rng, tmpfile, is_data, N);
+
+      remove(tmpfile);
+    }
+
+  free(is_data);
+  esl_getopts_Destroy(go);
+  esl_randomness_Destroy(rng);
+
+  printf("ok\n");
+  return 0;
+}
+#endif /*eslRECORDER_TESTDRIVE*/
+/*------------------- end, test driver --------------------------*/
+
+
+
+/*****************************************************************
+ * 7. Examples
+ *****************************************************************/
+#ifdef eslRECORDER_EXAMPLE
+/* gcc -g -Wall -std=gnu99 -DeslRECORDER_EXAMPLE -o esl_recorder_example -I. esl_recorder.c easel.c 
+ */
+
+#include "easel.h"
+#include "esl_recorder.h"
+
+int
+main(int argc, char **argv)
+{
+  FILE         *fp   = stdin;	
+  ESL_RECORDER *rc   = esl_recorder_Create(fp, 10);
+  char         *line;
+  int           i;
+  int           status;
+  
+  printf("\nFirst time:\n");
+  for (i = 0; i < 10; i++)
+    {
+      if ((status = esl_recorder_Read(rc, &line)) != eslOK) break; /* watch for EOF */
+      fputs(line, stdout);
+    }
+
+  esl_recorder_Position(rc, 0);	/* rewind to start */
+      
+  printf("\nOne more time:\n");
+  for (i = 0; i < 10; i++)
+    {
+      if ((status = esl_recorder_Read(rc, &line)) != eslOK) break; 
+      fputs(line, stdout);
+    }
+
+  esl_recorder_Destroy(rc);
+  return 0;
+}
+#endif /*eslRECORDER_EXAMPLE*/
+
+
+#ifdef eslRECORDER_EXAMPLE2
+/* gcc -g -Wall -std=gnu99 -DeslRECORDER_EXAMPLE2 -o esl_recorder_example2 -I. esl_recorder.c easel.c 
+ */
+
+#include <stdio.h>
+#include <ctype.h>
+
+#include "easel.h"
+#include "esl_recorder.h"
+
+static int
+is_data(char *s)
+{
+  if (*s == '#') return TRUE;
+  //  for (; *s; s++) if (! isspace(*s)) return TRUE;
+  return FALSE;
+}
+
+int
+main(int argc, char **argv)
+{
+  FILE         *fp   = fopen(argv[1], "r");
+  ESL_RECORDER *rc   = esl_recorder_Create(fp, 10);
+  char         *line;
+  char        **block;
+  int           n;
+  int           nblocks=0;
+  int           i;
+  int           status = eslOK;
+  
+  while (status == eslOK)
+    {
+      /* skip lines without # */
+      do {
+	if (esl_recorder_Read(rc, &line) == eslEOF) goto DONE;   
+      } while (! is_data(line));
+
+      /* read block */
+      esl_recorder_MarkBlock(rc, esl_recorder_GetCurrent(rc));
+      do {
+	status = esl_recorder_Read(rc, &line);
+      } while (status == eslOK && is_data(line));
+      
+      /* get the block */
+      esl_recorder_GetBlock(rc, &block, NULL, NULL, &n);
+      nblocks++;
+
+      /* if we EOF'ed, n lines of block ended with the EOF;
+       * else, last line was a blank line
+       */
+      if (status == eslOK) n--;
+
+      /* show it (exclusive of the trailing blank line */
+      printf("BLOCK %d\n", nblocks);
+      for (i = 0; i < n; i++)
+	printf("line %4d: %s", i+1, block[i]);
+      printf("\n\n");
+
+      /* unmark it */
+      esl_recorder_UnmarkBlock(rc);
+    }
+
+ DONE:
+  esl_recorder_Destroy(rc);
+  fclose(fp);
+  return 0;
+}
+#endif /*eslRECORDER_EXAMPLE2*/
+/*------------------ end, example main() ------------------------*/
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_recorder.h b/esl_recorder.h
new file mode 100644
index 0000000..4854143
--- /dev/null
+++ b/esl_recorder.h
@@ -0,0 +1,88 @@
+/* Saving history in a line-based input stream.
+ * 
+ * SRE, Mon Dec 28 09:51:51 2009 [Zaragoza]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslRECORDER_INCLUDED
+#define eslRECORDER_INCLUDED
+
+#include "esl_config.h"
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include <stdio.h>
+
+/* Object: ESL_RECORDER
+ * 
+ * A history of a line-based input stream.
+ * Allows (limited) rewinding in nonrewindable input streams;
+ * also allows block-based parsing (as opposed to line-based).
+ *
+ * The history is kept in a rolling array of string ptrs. The
+ * bookkeeping involved in indexing this array can be confusing.
+ * 
+ * Lines in the file are numbered 0..N-1. 
+ * (N isn't known; we'll be reading sequentially.)
+ * Lines in the recorder are 0..nalloc-1.
+ *
+ * The recorder keeps track of how many lines it has read so far, in
+ * <nread>.
+ * 
+ * The recorder can be backed up to any previous line. It sets <ncurr>
+ * to be the number of lines it *appears* to have read so far;
+ * that is, the next line it will return to the caller, upon a call
+ * to esl_recorder_Read(), is line <ncurr>. 
+ * 
+ * A window of MIN(nread, nalloc) lines is stored;
+ * consisting of line numbers MAX(baseline, nread-nalloc) .. nread-1).
+ * 
+ * A line n in the file (0..n..N-1) corresponds to
+ * an index i in the recorder by these transforms:
+ *    i = (n-baseline) % nalloc
+ *    n = i + MAX(baseline, nread-nalloc)
+ *    
+ * Normally the baseline for the modulo calculation is just 0.    
+ *
+ * The line array is circularly permuted (out of order) when
+ * (nread-baseline) / nalloc != 0.
+ */
+typedef struct {
+  FILE    *fp;		/* stream that we're reading line by line           */
+
+  char   **line;	/* lines from input, line[0..nalloc-1]              */
+  int      nalloc;	/* max number of lines remembered                   */
+  int     *lalloc;	/* alloc for each line[0..nalloc-1][0..lalloc[i]-1] */
+  off_t   *offset;	/* disk offsets to starts of each line              */
+
+  int      nread;       /* max # of lines read from file in any pass [1..]  */
+  int      ncurr;       /* # of lines into file in current pass      [1..]  */
+
+  int      baseline;	/* line origin for n<->i transform [0..]            */
+  int      markline;	/* line origin for start of current block [-1;0..]  */
+} ESL_RECORDER;
+
+
+extern ESL_RECORDER *esl_recorder_Create    (FILE *fp, int maxlines);
+extern int           esl_recorder_ResizeTo  (ESL_RECORDER *rc, int new_maxlines);
+extern int           esl_recorder_GetFirst  (ESL_RECORDER *rc);
+extern int           esl_recorder_GetLast   (ESL_RECORDER *rc);
+extern int           esl_recorder_GetCurrent(ESL_RECORDER *rc);
+extern int           esl_recorder_GetNext   (ESL_RECORDER *rc);
+extern void          esl_recorder_Destroy   (ESL_RECORDER *rc);
+
+extern int           esl_recorder_Read(ESL_RECORDER *rc, char **opt_line);
+extern int           esl_recorder_Position(ESL_RECORDER *rc, int linenumber);
+extern int           esl_recorder_MarkBlock(ESL_RECORDER *rc, int markline);
+extern int           esl_recorder_UnmarkBlock(ESL_RECORDER *rc);
+extern int           esl_recorder_GetBlock(ESL_RECORDER *rc, char ***opt_lines, int **opt_lalloc, off_t **opt_offset, int *opt_nlines);
+
+
+#endif /*eslRECORDER_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
+
diff --git a/esl_regexp.c b/esl_regexp.c
new file mode 100644
index 0000000..a63d463
--- /dev/null
+++ b/esl_regexp.c
@@ -0,0 +1,1912 @@
+/* regexp.c
+ * Regular expression matching on strings.
+ *
+ *****************************************************************
+ * This is a wrapper around a modified version of Henry Spencer's
+ * regex library. Spencer's copyright notice appears below, after my
+ * wrappers, prefacing the section that includes his code. I believe
+ * you can obtain the original code from:
+ *    ftp://ftp.zoo.toronto.edu/pub/bookregex.tar.Z 
+ * Thanks, Henry!
+ *
+ * My modifications are generally limited to converting error handling
+ * to Easel conventions, internalizing Spencer's code as all
+ * static to this module, and some cosmetic changes to names
+ * for namespace protection reasons. I am responsible for any
+ * errors that I've introduced into Spencer's code.
+ *
+ *****************************************************************
+ * nomenclature note:
+ *    A "machine" is a persistent ESL_REGEXP object, which contains
+ *    an NDFA for a pattern, but the NDFA may change throughout
+ *    the life of the machine.
+ *    
+ *    An "NDFA" (nondeterministic finite automaton) refers to
+ *    an internal esl__regexp structure, which is Spencer's 
+ *    compiled pattern-program. We try to compile an NDFA once per
+ *    pattern.
+ *    
+ *    A "pattern" refers to actual regular expression we're trying
+ *    to match, represented as an ASCII string.
+ *    
+ *****************************************************************
+ * error handling note: (xref STL9/p2)
+ *    We expect that the input pattern may be provided by the user,
+ *    and so a very common error will be an invalid regular expression
+ *    syntax. There are 9 types of syntax errors caught by the
+ *    regcomp() code and its friends. All of them generate an
+ *    eslESYNTAX error, with a terse message. Under the default
+ *    error handler this message will be printed and the code will halt.
+ *    If you do not want invalid input regex syntax to halt your application,
+ *    you can install a custom error handler that can handle
+ *    the eslESYNTAX errors as you wish.
+ *****************************************************************
+ * TODO:
+ *  - would be great to have an esl_regexp_Sample(), which sampled
+ *    strings from a regexp. We could use this in unit tests that 
+ *    need to stress edge cases (generating strings with unusual
+ *    but legal characters, for example). We would probably want
+ *    to implement some artificial limits on repeat operators,
+ *    to keep length of sampled seq reasonable.
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#include "esl_regexp.h"
+
+/* Forward declarations of Spencer's API as static, internalized in my module.
+ */
+static esl__regexp *regcomp(const char *exp);
+static int          regexec(register esl__regexp *prog, const char *str);
+/* his regsub() is present but unused, ifdef'd out to silence compilers; uncomment to reactivate */
+/* static int          regsub(const esl__regexp *rp, const char *source, char *dest); */
+#ifdef DEBUG
+static void         regdump(esl__regexp *r);
+#endif
+
+
+
+
+/*****************************************************************
+ * Easel's regexp API
+ *****************************************************************/
+
+/* Function:  esl_regexp_Create()
+ * Incept:    SRE, Fri Jan  7 10:55:48 2005 [St. Louis]
+ *
+ * Purpose:   Creates a new <ESL_REGEXP> machine.
+ *
+ * Throws:    NULL on allocation failure.
+ *
+ * Xref:      STL9/p1
+ */
+ESL_REGEXP *
+esl_regexp_Create(void)
+{
+  int status;
+  ESL_REGEXP *machine = NULL;
+
+  ESL_ALLOC(machine, sizeof(ESL_REGEXP));
+  machine->ndfa = NULL;
+  return machine;
+
+ ERROR:
+  return NULL;
+}
+
+
+/* Function:  esl_regexp_Destroy()
+ * Incept:    SRE, Fri Jan  7 11:12:20 2005 [St. Louis]
+ *
+ * Purpose:   Destroy a machine created by <esl_regexp_Create()>.
+ *
+ * Returns:   void.
+ */
+void
+esl_regexp_Destroy(ESL_REGEXP *machine)
+{
+  /* Spencer's clever alloc for the NDFA allows us to free it w/ free()  */
+  if (machine->ndfa != NULL) free(machine->ndfa); 
+  free(machine);
+  return;
+}
+
+
+
+
+/* Function:  esl_regexp_Match()
+ * Incept:    SRE, Fri Jan  7 11:24:02 2005 [St. Louis]
+ *
+ * Purpose:   Determine if string <s> matches the regular expression <pattern>,
+ *            using a <machine>.
+ *
+ * Returns:   <eslOK> if <pattern> matches <s>; <eslEOD> if it doesn't.
+ *            
+ * Throws:    <eslEINVAL> if the <pattern> couldn't be compiled for any reason.
+ *            Throws <eslEINCONCEIVABLE> or <eslECORRUPT> if something
+ *            went wrong in the search phase.
+ *            (At the failure point, an error was generated with an appropriate
+ *            code and message; an <ESL_SYNTAX> code, for example, may have
+ *            been generated to indicate that the <pattern> is an invalid syntax.)
+ */
+int
+esl_regexp_Match(ESL_REGEXP *machine, const char *pattern, const char *s)
+{
+  if (machine->ndfa != NULL) { free(machine->ndfa); machine->ndfa = NULL; }
+  if ((machine->ndfa = regcomp(pattern)) == NULL) return eslEINVAL;
+  return regexec(machine->ndfa, s);
+}
+
+
+/* Function:  esl_regexp_Compile()
+ * Incept:    SRE, Sat Jan  8 09:56:21 2005 [St. Louis]
+ *
+ * Purpose:   Precompile an NDFA for <pattern> and store it in 
+ *            a <machine>, in preparation for using the same
+ *            pattern for multiple searches (see
+ *            <esl_regexp_MultipleMatches()>).
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if compilation fails.
+ */
+int
+esl_regexp_Compile(ESL_REGEXP *machine, const char *pattern)
+{
+  if (machine->ndfa != NULL) { free(machine->ndfa); machine->ndfa = NULL; }
+  if ((machine->ndfa = regcomp(pattern)) == NULL) return eslEINVAL;
+  return eslOK;
+}
+
+
+/* Function:  esl_regexp_MultipleMatches()
+ * Incept:    SRE, Sat Jan  8 10:01:27 2005 [St. Louis]
+ *
+ * Purpose:   Given a <machine> that contains a precompiled NDFA (see
+ *            <esl_regexp_Compile()>, search it against a <string>.
+ *            pointed to by <sptr>. When a match is found, returns
+ *            <eslOK>, and resets <sptr> to point at the next character
+ *            after the matched substring. (This may be 
+ *            trailing NUL byte if the matched substring is at the
+ *            very end of the string.)  If no match is found in the
+ *            string, returns <eslEOD>.
+ *            
+ *            Because <sptr> is changed, the caller should
+ *            initialize and use a temporary pointer into the string
+ *            to be searched, not the caller's own pointer to the
+ *            target string.
+ *
+ * Example:   
+ *            s = string;
+ *            while (esl_regexp_MultipleMatches(m, &s) == eslOK)
+ *                // process one match at a time//;
+ *
+ * Throws:    <eslEINCONCEIVABLE> or <eslECORRUPT> if something goes awry internally
+ *            during the search.
+ */
+int
+esl_regexp_MultipleMatches(ESL_REGEXP *machine, char **sptr)
+{
+  int status;
+
+  status = regexec(machine->ndfa, *sptr);  
+  if (status == eslOK) 
+    *sptr = machine->ndfa->endp[0]; /* endp points exactly where we want. */
+  else 
+    *sptr = NULL;
+  return status;
+}
+
+
+
+/* Function:  esl_regexp_SubmatchDup()
+ * Incept:    SRE, Sat Jan  8 11:12:29 2005 [St. Louis]
+ *
+ * Purpose:   Given a <machine> that has just got done matching 
+ *            some pattern against a target string, 
+ *            retrieve a substring that matched the pattern
+ *            or one of the ()'d parts of it. <elem> indicates
+ *            which submatch to retrieve. <elem> 0 is the complete
+ *            match;  1..15 (assuming the default <ESL_REGEXP_NSUB>=16)
+ *            are up to 15 ()'d submatches in the pattern.
+ *
+ * Returns:   ptr to an allocated, NUL-terminated string containing
+ *            the matched part of the string. Caller is responsible
+ *            for free'ing this string.
+ *      
+ * Throws:    NULL on any internal failure.
+ */
+char *
+esl_regexp_SubmatchDup(ESL_REGEXP *machine, int elem)
+{
+  char *s;
+  int   len;
+  int   status;
+
+  if (elem >= ESL_REGEXP_NSUB || elem < 0) 
+    ESL_XEXCEPTION(eslEINVAL, "bad elem arg");
+  if (machine->ndfa->startp[elem] == NULL || machine->ndfa->endp[elem] == NULL)
+    ESL_XEXCEPTION(eslEINVAL, "no such submatch recorded");
+
+  len = machine->ndfa->endp[elem] - machine->ndfa->startp[elem];
+  ESL_ALLOC(s, sizeof(char) * (len+1));
+  strncpy(s, machine->ndfa->startp[elem], len);
+  s[len] = '\0';
+  return s;
+
+ ERROR:
+  return NULL;
+}
+
+/* Function:  esl_regexp_SubmatchCopy()
+ * Incept:    SRE, Sat Jan  8 11:12:29 2005 [St. Louis]
+ *
+ * Purpose:   Given a <machine> that has just got done matching some
+ *            pattern against a target string, copy a substring that
+ *            matched the pattern or one of the ()'d parts of it into
+ *            a provided <buffer> with <nc> chars of space allocated.
+ *            <elem> indicates which submatch to retrieve. <elem> 0 is
+ *            the complete match; 1..15 (assuming the default
+ *            <ESL_REGEXP_NSUB>=16) are up to 15 ()'d submatches in
+ *            the pattern.
+ *
+ * Returns:   <eslOK> on success, and buffer contains the NUL-terminated
+ *            substring. 
+ *      
+ * Throws:    <eslEINVAL> on any of several possible internal failures,
+ *            including the <buffer> being too small to contain the 
+ *            substring.
+ */
+int
+esl_regexp_SubmatchCopy(ESL_REGEXP *machine, int elem, char *buffer, int nc)
+{
+  int   len;
+  int   status;
+
+  if (elem >= ESL_REGEXP_NSUB || elem < 0) 
+    ESL_XEXCEPTION(eslEINVAL, "bad elem arg");
+  if (machine->ndfa->startp[elem] == NULL || machine->ndfa->endp[elem] == NULL)
+    ESL_XEXCEPTION(eslEINVAL, "no such submatch recorded");
+
+  len = machine->ndfa->endp[elem] - machine->ndfa->startp[elem];
+  if (len >= nc) 
+    ESL_XEXCEPTION(eslEINVAL, "buffer too small to hold submatch");
+
+  strncpy(buffer, machine->ndfa->startp[elem], len);
+  buffer[len] = '\0';
+  return eslOK;
+
+ ERROR:
+  buffer[0] = '\0';
+  return status;
+}
+
+
+
+/* Function:  esl_regexp_SubmatchCoords()
+ * Incept:    SRE, Sat Jan  8 11:46:11 2005 [St. Louis]
+ *
+ * Purpose:   Given a <machine> that has just got done matching some
+ *            pattern against a target string, find the start/end
+ *            coordinates of the substring that matched the
+ *            pattern or one of the ()'d parts of it, relative to
+ *            a pointer <origin> on the target string. Return the result
+ *            through the ptrs <ret_start> and <ret_end>.  <elem>
+ *            indicates which submatch to retrieve. <elem> 0 is the
+ *            complete match; 1..15 (assuming the default
+ *            <ESL_REGEXP_NSUB> = 16) are up to 15 ()'d submatches in
+ *            the pattern.
+ *            
+ *            The coordinates given in zero-offset convention relative
+ *            to an <origin>. <origin> will usually be a pointer to
+ *            the complete target string, in which case the coords
+ *            would be [0..L-1]. However, one can extract coords
+ *            relative to any other <origin> in the target string,
+ *            even including an <origin> downstream of the match, so
+ *            relative coords can be negative, ranging from -(L-1) to
+ *            (L-1).
+ *            
+ *            Coords will be correct even if the match was
+ *            found by a <esl_regexp_MultipleMatches()> call against
+ *            a temp pointer into the target string.
+ *
+ * Returns:   <eslOK> on success, and <ret_start> and <ret_end>
+ *            are set to the start/end coordinates of the submatch.
+ *
+ * Throws:    <eslEINVAL> on internal failures.
+ *            The function is incapable of detecting a case in
+ *            where <origin> is not in the same string that the
+ *            <machine> matched like it should be. If a caller does
+ *            this, the function may appear to succeed, but start and end  
+ *            coords will be garbage.
+ */
+int
+esl_regexp_SubmatchCoords(ESL_REGEXP *machine, char *origin, int elem, 
+			  int *ret_start, int *ret_end)
+{
+  int status;
+
+  if (elem >= ESL_REGEXP_NSUB || elem < 0) 
+    ESL_XEXCEPTION(eslEINVAL, "bad elem arg");
+  if (machine->ndfa->startp[elem] == NULL || machine->ndfa->endp[elem] == NULL)
+    ESL_XEXCEPTION(eslEINVAL, "no such submatch recorded");
+
+  *ret_start = machine->ndfa->startp[elem] - origin;
+  *ret_end   = machine->ndfa->endp[elem]   - origin - 1;
+  return eslOK;
+
+ ERROR:
+  *ret_start = 0;
+  *ret_end   = 0;
+  return status;
+}
+
+
+
+/* Function:  esl_regexp_ParseCoordString()
+ *
+ * Purpose:   Given a string <cstring> of the format required for a
+ *            range (<from>..<to>, e.g. 10..23  or 39-91) parse out
+ *            the start and end, and return them within the variables
+ *            <ret_start> and <ret_end>.
+ *
+ * Returns:   <eslOK> on success, and <ret_start> and <ret_end>
+ *            are set to the start/end coordinates of the parse.
+ *
+ * Throws:    <eslESYNTAX> if a regexp match is not made, and
+ *            <eslFAIL> if the start or end values are not parsed.
+ */
+int
+esl_regexp_ParseCoordString(const char *cstring, uint32_t *ret_start, uint32_t *ret_end)
+{
+  ESL_REGEXP *re = esl_regexp_Create();
+  char        tok1[32];
+  char        tok2[32];
+  int         status;
+
+  if (esl_regexp_Match(re, "^(\\d+)\\D+(\\d*)$", cstring) != eslOK) { status = eslESYNTAX; goto ERROR; }
+  if (esl_regexp_SubmatchCopy(re, 1, tok1, 32)            != eslOK) { status = eslFAIL;    goto ERROR; }
+  if (esl_regexp_SubmatchCopy(re, 2, tok2, 32)            != eslOK) { status = eslFAIL;    goto ERROR; }
+
+  *ret_start = atol(tok1);
+  *ret_end   = (tok2[0] == '\0') ? 0 : atol(tok2);
+
+  esl_regexp_Destroy(re);
+  return eslOK;
+
+ ERROR:
+  esl_regexp_Destroy(re);
+  return status;
+}
+
+
+/*=================== end of the exposed API ==========================================*/
+
+
+
+
+/**************************************************************************************
+ * This next big chunk of code is:
+ * Copyright (c) 1986, 1993, 1995 by University of Toronto.
+ * Written by Henry Spencer.  Not derived from licensed software.
+ *
+ * Permission is granted to anyone to use this software for any
+ * purpose on any computer system, and to redistribute it in any way,
+ * subject to the following restrictions:
+ *
+ * 1. The author is not responsible for the consequences of use of
+ * 	this software, no matter how awful, even if they arise
+ * 	from defects in it.
+ *
+ * 2. The origin of this software must not be misrepresented, either
+ * 	by explicit claim or by omission.
+ * 
+ * 3. Altered versions must be plainly marked as such, and must not
+ * 	be misrepresented (by explicit claim or omission) as being
+ *	the original software.
+ *
+ * 4. This notice must not be removed or altered.
+ */
+
+/*
+ * regcomp and regexec -- regsub and regerror are elsewhere
+ */
+
+/*
+ * The first byte of the regexp internal "program" is actually this magic
+ * number; the start node begins in the second byte.
+ */
+#define	REGMAGIC	0234
+
+/*
+ * The "internal use only" fields in regexp.h are present to pass info from
+ * compile to execute that permits the execute phase to run lots faster on
+ * simple cases.  They are:
+ *
+ * regstart	char that must begin a match; '\0' if none obvious
+ * reganch	is the match anchored (at beginning-of-line only)?
+ * regmust	string (pointer into program) that match must include, or NULL
+ * regmlen	length of regmust string
+ *
+ * Regstart and reganch permit very fast decisions on suitable starting points
+ * for a match, cutting down the work a lot.  Regmust permits fast rejection
+ * of lines that cannot possibly match.  The regmust tests are costly enough
+ * that regcomp() supplies a regmust only if the r.e. contains something
+ * potentially expensive (at present, the only such thing detected is * or +
+ * at the start of the r.e., which can involve a lot of backup).  Regmlen is
+ * supplied because the test in regexec() needs it and regcomp() is computing
+ * it anyway.
+ */
+
+/*
+ * Structure for regexp "program".  This is essentially a linear encoding
+ * of a nondeterministic finite-state machine (aka syntax charts or
+ * "railroad normal form" in parsing technology).  Each node is an opcode
+ * plus a "next" pointer, possibly plus an operand.  "Next" pointers of
+ * all nodes except BRANCH implement concatenation; a "next" pointer with
+ * a BRANCH on both ends of it is connecting two alternatives.  (Here we
+ * have one of the subtle syntax dependencies:  an individual BRANCH (as
+ * opposed to a collection of them) is never concatenated with anything
+ * because of operator precedence.)  The operand of some types of node is
+ * a literal string; for others, it is a node leading into a sub-FSM.  In
+ * particular, the operand of a BRANCH node is the first node of the branch.
+ * (NB this is *not* a tree structure:  the tail of the branch connects
+ * to the thing following the set of BRANCHes.)  The opcodes are:
+ */
+
+/* definition	number	opnd?	meaning */
+#define	END	0	/* no	End of program. */
+#define	BOL	1	/* no	Match beginning of line. */
+#define	EOL	2	/* no	Match end of line. */
+#define	ANY	3	/* no	Match any character. */
+#define	ANYOF	4	/* str	Match any of these. */
+#define	ANYBUT	5	/* str	Match any but one of these. */
+#define	BRANCH	6	/* node	Match this, or the next..\&. */
+#define	BACK	7	/* no	"next" ptr points backward. */
+#define	EXACTLY	8	/* str	Match this string. */
+#define	NOTHING	9	/* no	Match empty string. */
+#define	STAR	10	/* node	Match this 0 or more times. */
+#define	PLUS	11	/* node	Match this 1 or more times. */
+#define	OPEN	20	/* no	Sub-RE starts here. */
+			/*	OPEN+1 is number 1, etc. */
+#define	CLOSE	30	/* no	Analogous to OPEN. */
+
+/*
+ * Opcode notes:
+ *
+ * BRANCH	The set of branches constituting a single choice are hooked
+ *		together with their "next" pointers, since precedence prevents
+ *		anything being concatenated to any individual branch.  The
+ *		"next" pointer of the last BRANCH in a choice points to the
+ *		thing following the whole choice.  This is also where the
+ *		final "next" pointer of each individual branch points; each
+ *		branch starts with the operand node of a BRANCH node.
+ *
+ * BACK		Normal "next" pointers all implicitly point forward; BACK
+ *		exists to make loop structures possible.
+ *
+ * STAR,PLUS	'?', and complex '*' and '+', are implemented as circular
+ *		BRANCH structures using BACK.  Simple cases (one character
+ *		per match) are implemented with STAR and PLUS for speed
+ *		and to minimize recursive plunges.
+ *
+ * OPEN,CLOSE	...are numbered at compile time.
+ */
+
+/*
+ * A node is one char of opcode followed by two chars of "next" pointer.
+ * "Next" pointers are stored as two 8-bit pieces, high order first.  The
+ * value is a positive offset from the opcode of the node containing it.
+ * An operand, if any, simply follows the node.  (Note that much of the
+ * code generation knows about this implicit relationship.)
+ *
+ * Using two bytes for the "next" pointer is vast overkill for most things,
+ * but allows patterns to get big without disasters.
+ */
+#define	OP(p)		(*(p))
+#define	NEXT(p)		(((*((p)+1)&0177)<<8) + (*((p)+2)&0377))
+#define	OPERAND(p)	((p) + 3)
+
+/*
+ * Utility definitions.
+ */
+#define	ISREPN(c)	((c) == '*' || (c) == '+' || (c) == '?')
+#define	META		"^$.[()|?+*\\"
+
+/*
+ * Flags to be passed up and down.
+ */
+#define	HASWIDTH	01	/* Known never to match null string. */
+#define	SIMPLE		02	/* Simple enough to be STAR/PLUS operand. */
+#define	SPSTART		04	/* Starts with * or +. */
+#define	WORST		0	/* Worst case. */
+
+/*
+ * Work-variable struct for regcomp().
+ */
+struct comp {
+	char *regparse;		/* Input-scan pointer. */
+	int regnpar;		/* () count. */
+	char *regcode;		/* Code-emit pointer; &regdummy = don't. */
+	char regdummy[3];	/* NOTHING, 0 next ptr */
+	long regsize;		/* Code size. */
+};
+#define	EMITTING(cp)	((cp)->regcode != (cp)->regdummy)
+
+/*
+ * Forward declarations for regcomp()'s friends.
+ */
+static char *reg(struct comp *cp, int paren, int *flagp);
+static char *regbranch(struct comp *cp, int *flagp);
+static char *regpiece(struct comp *cp, int *flagp);
+static char *regatom(struct comp *cp, int *flagp);
+static char *regnode(register struct comp *cp, char op);
+static char *regnext(char *node);
+static void regc(struct comp *cp, char c);
+static void reginsert(struct comp *cp, char op, char *opnd);
+static void regtail(struct comp *cp, char *p, char *val);
+static void regoptail(struct comp *cp, char *p, char *val);
+static char *regescape(struct comp *cp, char c);
+
+/*
+ - regcomp - compile a regular expression into internal code
+ *
+ * We can't allocate space until we know how big the compiled form will be,
+ * but we can't compile it (and thus know how big it is) until we've got a
+ * place to put the code.  So we cheat:  we compile it twice, once with code
+ * generation turned off and size counting turned on, and once "for real".
+ * This also means that we don't allocate space until we are sure that the
+ * thing really will compile successfully, and we never have to move the
+ * code and thus invalidate pointers into it.  (Note that it has to be in
+ * one piece because free() must be able to free it all.)
+ *
+ * Beware that the optimization-preparation code in here knows about some
+ * of the structure of the compiled regexp.
+ * 
+ * Returns valid ptr on success.
+ * Throws NULL on internal errors, or if <exp> is invalid.
+ *  
+ * Regular expressions with invalid syntax will fail to compile somewhere,
+ * generating an eslESYNTAX error with a terse but useful message.
+ * 
+ */
+static esl__regexp *
+regcomp(const char *exp)
+{
+        int status;
+	register esl__regexp *r = NULL;
+	register char *scan;
+	int flags;
+	struct comp co;
+
+	if (exp == NULL) ESL_XEXCEPTION(eslEINVAL, "NULL argument to regcomp");
+
+	/* First pass: determine size, legality. */
+	co.regparse = (char *)exp;
+	co.regnpar = 1;
+	co.regsize = 0L;
+	co.regdummy[0] = NOTHING;
+	co.regdummy[1] = co.regdummy[2] = 0;
+	co.regcode = co.regdummy;
+	regc(&co, REGMAGIC);
+	if (reg(&co, 0, &flags) == NULL) goto ERROR;
+
+	/* Small enough for pointer-storage convention? */
+	if (co.regsize >= 0x7fffL)	/* Probably could be 0xffffL. */
+	  ESL_XEXCEPTION(eslEMEM, "regexp too big");
+
+	/* Allocate space. */
+	ESL_ALLOC(r, sizeof(esl__regexp) + (size_t)co.regsize);
+
+	/* Second pass: emit code. */
+	co.regparse = (char *)exp;
+	co.regnpar = 1;
+	co.regcode = r->program;
+	regc(&co, REGMAGIC);
+	if (reg(&co, 0, &flags) == NULL) goto ERROR;
+
+	/* Dig out information for optimizations. */
+	r->regstart = '\0';		/* Worst-case defaults. */
+	r->reganch = 0;
+	r->regmust = NULL;
+	r->regmlen = 0;
+	scan = r->program+1;		/* First BRANCH. */
+	if (OP(regnext(scan)) == END) {	/* Only one top-level choice. */
+		scan = OPERAND(scan);
+
+		/* Starting-point info. */
+		if (OP(scan) == EXACTLY)
+			r->regstart = *OPERAND(scan);
+		else if (OP(scan) == BOL)
+			r->reganch = 1;
+
+		/*
+		 * If there's something expensive in the r.e., find the
+		 * longest literal string that must appear and make it the
+		 * regmust.  Resolve ties in favor of later strings, since
+		 * the regstart check works with the beginning of the r.e.
+		 * and avoiding duplication strengthens checking.  Not a
+		 * strong reason, but sufficient in the absence of others.
+		 */
+		if (flags&SPSTART) {
+			register char *longest = NULL;
+			register size_t len = 0;
+
+			for (; scan != NULL; scan = regnext(scan))
+				if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len) {
+					longest = OPERAND(scan);
+					len = strlen(OPERAND(scan));
+				}
+			r->regmust = longest;
+			r->regmlen = (int)len;
+		}
+	}
+
+	return(r);
+
+ ERROR:
+	if (r != NULL) free(r);
+	return NULL;
+}
+
+/*
+ - reg - regular expression, i.e. main body or parenthesized thing
+ *
+ * Caller must absorb opening parenthesis.
+ *
+ * Combining parenthesis handling with the base level of regular expression
+ * is a trifle forced, but the need to tie the tails of the branches to what
+ * follows makes it hard to avoid.
+ */
+static char *
+reg(register struct comp *cp, int paren, int *flagp)
+{
+  register char *ret = NULL;   /* SRE: NULL init added to silence gcc */
+  register char *br;
+  register char *ender;
+  register int parno = 0;	/* SRE: init added to silence gcc */
+  int   flags;
+  int   status;
+
+  *flagp = HASWIDTH;	/* Tentatively. */
+
+  if (paren) {
+		/* Make an OPEN node. */
+    if (cp->regnpar >= ESL_REGEXP_NSUB) 
+	ESL_XEXCEPTION(eslESYNTAX, "too many ()");
+    parno = cp->regnpar;
+    cp->regnpar++;
+    ret = regnode(cp, OPEN+parno);
+  }
+
+  /* Pick up the branches, linking them together. */
+  br = regbranch(cp, &flags);
+  if (br == NULL)
+    return(NULL);
+  if (paren)
+    regtail(cp, ret, br);	/* OPEN -> first. */
+  else
+    ret = br;
+  *flagp &= ~(~flags&HASWIDTH);	/* Clear bit if bit 0. */
+  *flagp |= flags&SPSTART;
+  while (*cp->regparse == '|') {
+    cp->regparse++;
+    br = regbranch(cp, &flags);
+    if (br == NULL)
+      return(NULL);
+    regtail(cp, ret, br);	/* BRANCH -> BRANCH. */
+    *flagp &= ~(~flags&HASWIDTH);
+    *flagp |= flags&SPSTART;
+  }
+
+  /* Make a closing node, and hook it on the end. */
+  ender = regnode(cp, (paren) ? CLOSE+parno : END);
+  regtail(cp, ret, ender);
+
+  /* Hook the tails of the branches to the closing node. */
+  for (br = ret; br != NULL; br = regnext(br))
+    regoptail(cp, br, ender);
+
+  /* Check for proper termination. */
+  if (paren && *cp->regparse++ != ')') {
+    ESL_XEXCEPTION(eslESYNTAX, "unterminated ()");
+  } else if (!paren && *cp->regparse != '\0') {
+    if (*cp->regparse == ')') {
+      ESL_XEXCEPTION(eslESYNTAX, "unmatched ()");
+    } else
+      ESL_XEXCEPTION(eslECORRUPT, "internal error: junk on end");
+    /* NOTREACHED */
+  }
+  return(ret);
+
+ ERROR:
+  return (status == eslOK ? ret : NULL);  // fake out: status always non-OK here, this is solely to use <status> and silence compiler warning
+}
+
+/*
+ - regbranch - one alternative of an | operator
+ *
+ * Implements the concatenation operator.
+ */
+static char *
+regbranch(register struct comp *cp, int *flagp)
+{
+	register char *ret;
+	register char *chain;
+	register char *latest;
+	int flags;
+	register int c;
+
+	*flagp = WORST;				/* Tentatively. */
+
+	ret = regnode(cp, BRANCH);
+	chain = NULL;
+	while ((c = *cp->regparse) != '\0' && c != '|' && c != ')') {
+		latest = regpiece(cp, &flags);
+		if (latest == NULL)
+			return(NULL);
+		*flagp |= flags&HASWIDTH;
+		if (chain == NULL)		/* First piece. */
+			*flagp |= flags&SPSTART;
+		else
+			regtail(cp, chain, latest);
+		chain = latest;
+	}
+	if (chain == NULL)			/* Loop ran zero times. */
+		(void) regnode(cp, NOTHING);
+
+	return(ret);
+}
+
+/*
+ - regpiece - something followed by possible [*+?]
+ *
+ * Note that the branching code sequences used for ? and the general cases
+ * of * and + are somewhat optimized:  they use the same NOTHING node as
+ * both the endmarker for their branch list and the body of the last branch.
+ * It might seem that this node could be dispensed with entirely, but the
+ * endmarker role is not redundant.
+ * 
+ * Returns valid ptr on success.
+ * Throws NULL on errors.
+ */
+static char *
+regpiece(register struct comp *cp, int *flagp)
+{
+	register char *ret;
+	register char op;
+	register char *next;
+	int flags;
+        int status;
+
+	ret = regatom(cp, &flags);
+	if (ret == NULL)
+		return(NULL);
+
+	op = *cp->regparse;
+	if (!ISREPN(op)) {
+		*flagp = flags;
+		return(ret);
+	}
+
+	if (!(flags&HASWIDTH) && op != '?')
+	  ESL_XEXCEPTION(eslESYNTAX, "*+ operand could be empty");
+	switch (op) {
+	case '*':	*flagp = WORST|SPSTART;			break;
+	case '+':	*flagp = WORST|SPSTART|HASWIDTH;	break;
+	case '?':	*flagp = WORST;				break;
+	}
+
+	if (op == '*' && (flags&SIMPLE))
+		reginsert(cp, STAR, ret);
+	else if (op == '*') {
+		/* Emit x* as (x&|), where & means "self". */
+		reginsert(cp, BRANCH, ret);		/* Either x */
+		regoptail(cp, ret, regnode(cp, BACK));	/* and loop */
+		regoptail(cp, ret, ret);		/* back */
+		regtail(cp, ret, regnode(cp, BRANCH));	/* or */
+		regtail(cp, ret, regnode(cp, NOTHING));	/* null. */
+	} else if (op == '+' && (flags&SIMPLE))
+		reginsert(cp, PLUS, ret);
+	else if (op == '+') {
+		/* Emit x+ as x(&|), where & means "self". */
+		next = regnode(cp, BRANCH);		/* Either */
+		regtail(cp, ret, next);
+		regtail(cp, regnode(cp, BACK), ret);	/* loop back */
+		regtail(cp, next, regnode(cp, BRANCH));	/* or */
+		regtail(cp, ret, regnode(cp, NOTHING));	/* null. */
+	} else if (op == '?') {
+		/* Emit x? as (x|) */
+		reginsert(cp, BRANCH, ret);		/* Either x */
+		regtail(cp, ret, regnode(cp, BRANCH));	/* or */
+		next = regnode(cp, NOTHING);		/* null. */
+		regtail(cp, ret, next);
+		regoptail(cp, ret, next);
+	}
+	cp->regparse++;
+	if (ISREPN(*cp->regparse))
+	  ESL_XEXCEPTION(eslESYNTAX, "nested *?+");
+
+	return(ret);
+
+ ERROR:
+	return (status == eslOK ? ret : NULL);  // status is not OK; this construction serves solely to silence compiler warning about unused <status>
+}
+
+/*
+ - regatom - the lowest level
+ *
+ * Optimization:  gobbles an entire sequence of ordinary characters so that
+ * it can turn them into a single node, which is smaller to store and
+ * faster to run.  Backslashed characters are exceptions, each becoming a
+ * separate node; the code is simpler that way and it's not worth fixing.
+ * 
+ * Returns valid ptr on success.
+ * Throws  NULL on an error. 
+ */
+static char *
+regatom(register struct comp *cp, int *flagp)
+{
+  register char *ret = NULL;
+  int flags;
+  int status;
+
+  *flagp = WORST;		/* Tentatively. */
+
+  switch (*cp->regparse++) {
+  case '^':
+    ret = regnode(cp, BOL);
+    break;
+  case '$':
+    ret = regnode(cp, EOL);
+    break;
+  case '.':
+    ret = regnode(cp, ANY);
+    *flagp |= HASWIDTH|SIMPLE;
+    break;
+  case '[': {
+    register int range;
+    register int rangeend;
+    register int c;
+
+    if (*cp->regparse == '^') {	/* Complement of range. */
+      ret = regnode(cp, ANYBUT);
+      cp->regparse++;
+    } else
+      ret = regnode(cp, ANYOF);
+    if ((c = *cp->regparse) == ']' || c == '-') {
+      regc(cp, c);
+      cp->regparse++;
+    }
+    while ((c = *cp->regparse++) != '\0' && c != ']') {
+      /* SRE: inserted code for \t, \n, \r, \f here:
+       *   c is the \, and cp->regparse is an alphanumeric.
+       */
+      if (c == '\\') {
+	c = *cp->regparse++;
+	switch (c) {
+	case 'f': regc(cp, '\f'); break;
+	case 'n': regc(cp, '\n'); break;
+	case 'r': regc(cp, '\r'); break;
+	case 't': regc(cp, '\t'); break;
+	case '\\': regc(cp, '\\'); break;
+	default: 
+	  ESL_XEXCEPTION(eslESYNTAX, "Invalid \\ escape inside range operator");
+	  break;
+	}
+      }/*end SRE*/
+      else if (c != '-')
+	regc(cp, c);
+      else if ((c = *cp->regparse) == ']' || c == '\0')
+	regc(cp, '-');
+      else {
+	range = (unsigned char)*(cp->regparse-2);
+	rangeend = (unsigned char)c;
+	if (range > rangeend)
+	  ESL_XEXCEPTION(eslESYNTAX, "invalid [] range");
+	for (range++; range <= rangeend; range++)
+	  regc(cp, range);
+	cp->regparse++;
+      }
+    }
+    regc(cp, '\0');
+    if (c != ']')
+      ESL_XEXCEPTION(eslESYNTAX, "unmatched []");
+    *flagp |= HASWIDTH|SIMPLE;
+    break;
+  }
+  case '(':
+    ret = reg(cp, 1, &flags);
+    if (ret == NULL)
+      return NULL;
+    *flagp |= flags&(HASWIDTH|SPSTART);
+    break;
+
+  case '\0':
+  case '|':
+  case ')':
+    /* supposed to be caught earlier */
+    ESL_XEXCEPTION(eslECORRUPT, "internal error: \\0|) unexpected");
+    /*NOTREACHED*/
+    break;
+
+  case '?':
+  case '+':
+  case '*':
+    ESL_XEXCEPTION(eslESYNTAX, "?+* follows nothing");
+    /*NOTREACHED*/
+    break;
+
+  case '\\':
+    if (*cp->regparse == '\0')
+      ESL_XEXCEPTION(eslESYNTAX, "trailing \\");
+
+    if (! isalnum(*cp->regparse)) {
+      ret = regnode(cp, EXACTLY); /* SRE: original Spencer code */
+      regc(cp, *cp->regparse++);
+      regc(cp, '\0');
+    } else {			/* SRE: my dropped in escape-code handling */
+      ret = regescape(cp, *cp->regparse);
+    }
+    *flagp |= HASWIDTH|SIMPLE;
+    break;
+
+  default: {
+    register size_t len;
+    register char ender;
+
+    cp->regparse--;
+    len = strcspn(cp->regparse, META);
+    if (len == 0)
+      ESL_XEXCEPTION(eslECORRUPT, "strcspn 0");
+    ender = *(cp->regparse+len);
+    if (len > 1 && ISREPN(ender))
+      len--;		/* Back off clear of ?+* operand. */
+    *flagp |= HASWIDTH;
+    if (len == 1)
+      *flagp |= SIMPLE;
+    ret = regnode(cp, EXACTLY);
+    for (; len > 0; len--)
+      regc(cp, *cp->regparse++);
+    regc(cp, '\0');
+    break;
+  }
+  }
+  return(ret);
+  
+ ERROR:
+  return (status == eslOK ? ret : NULL);  // status is not OK. Construction serves to silence compiler warning about unused <status>.
+}
+
+/*
+ - regnode - emit a node
+ */
+static char *			/* Location. */
+regnode(register struct comp *cp, char op)
+{
+  register char *const ret = cp->regcode;
+  register char *ptr;
+
+  if (!EMITTING(cp)) {
+    cp->regsize += 3;
+    return(ret);
+  }
+
+  ptr = ret;
+  *ptr++ = op;
+  *ptr++ = '\0';   /* Null next pointer. */
+  *ptr++ = '\0';
+  cp->regcode = ptr;
+  
+  return(ret);
+}
+
+/*
+ - regc - emit (if appropriate) a byte of code
+ */
+static void
+regc(register struct comp *cp, char b)
+{
+  if (EMITTING(cp))
+    *cp->regcode++ = b;
+  else
+    cp->regsize++;
+}
+
+/*
+ - reginsert - insert an operator in front of already-emitted operand
+ *
+ * Means relocating the operand.
+ */
+static void
+reginsert(register struct comp *cp, char op, char *opnd)
+{
+  register char *place;
+
+  if (!EMITTING(cp)) {
+    cp->regsize += 3;
+    return;
+  }
+
+  (void) memmove(opnd+3, opnd, (size_t)(cp->regcode - opnd));
+  cp->regcode += 3;
+
+  place = opnd;		/* Op node, where operand used to be. */
+  *place++ = op;
+  *place++ = '\0';
+  *place++ = '\0';
+  return;
+}
+
+/*
+ - regtail - set the next-pointer at the end of a node chain
+ */
+static void
+regtail(register struct comp *cp, char *p, char *val)
+{
+  register char *scan;
+  register char *temp;
+  register int offset;
+
+  if (!EMITTING(cp))
+    return;
+
+  /* Find last node. */
+  for (scan = p; (temp = regnext(scan)) != NULL; scan = temp)
+    continue;
+
+  offset = (OP(scan) == BACK) ? scan - val : val - scan;
+  *(scan+1) = (offset>>8)&0177;
+  *(scan+2) = offset&0377;
+  return;
+}
+
+/*
+ - regoptail - regtail on operand of first argument; nop if operandless
+ */
+static void
+regoptail(register struct comp *cp, char *p, char *val)
+{
+  /* "Operandless" and "op != BRANCH" are synonymous in practice. */
+  if (!EMITTING(cp) || OP(p) != BRANCH)
+    return;
+  regtail(cp, OPERAND(p), val);
+  return;
+}
+
+/*
+ * regexec and friends
+ */
+
+/*
+ * Work-variable struct for regexec().
+ */
+struct exec {
+	char *reginput;		/* String-input pointer. */
+	char *regbol;		/* Beginning of input, for ^ check. */
+	char **regstartp;	/* Pointer to startp array. */
+	char **regendp;		/* Ditto for endp. */
+};
+
+/*
+ * Forwards.
+ */
+static int regtry(struct exec *ep, esl__regexp *rp, char *string);
+static int regmatch(struct exec *ep, char *prog);
+static int regrepeat(struct exec *ep, char *node, size_t *ret_count);
+#ifdef DEBUG
+static int regnarrate = 0;
+static char *regprop(char *op);
+#endif
+
+/*
+ - regexec - match a regexp against a string
+ *
+ * Returns <eslOK> on match; <eslEOD> for no match.
+ * Throws  <eslEINCONCEIVABLE>,<eslECORRUPT> on internal errors.
+ */
+static int
+regexec(register esl__regexp *prog, const char *str)
+{
+  register char *string = (char *)str;	/* avert const poisoning */
+  register char *s;
+  struct exec ex;
+  int code;
+
+	/* Be paranoid. */
+	if (prog == NULL || string == NULL) 
+	  ESL_EXCEPTION(eslEINCONCEIVABLE, "NULL argument to regexec");
+
+	/* Check validity of program. */
+	if ((unsigned char)*prog->program != REGMAGIC) 
+	  ESL_EXCEPTION(eslECORRUPT, "corrupted regexp");
+
+	/* If there is a "must appear" string, look for it. */
+	if (prog->regmust != NULL && strstr(string, prog->regmust) == NULL)
+	  return eslEOD;
+
+	/* Mark beginning of line for ^ . */
+	ex.regbol = string;
+	ex.regstartp = prog->startp;
+	ex.regendp = prog->endp;
+
+	/* Simplest case:  anchored match need be tried only once. */
+	if (prog->reganch)
+		return(regtry(&ex, prog, string));
+
+	/* Messy cases:  unanchored match. */
+	if (prog->regstart != '\0') {
+		/* We know what char it must start with. */
+		for (s = string; s != NULL; s = strchr(s+1, prog->regstart))
+		  if ((code = regtry(&ex, prog, s)) != eslEOD)
+		    return code;	/* match, or throwing an error up */
+		return eslEOD;	        /* no match in string */
+	} else {
+		/* We don't -- general case. */
+		for (s = string; *s != '\0'; s++)
+		  if ((code = regtry(&ex, prog, s)) != eslEOD)
+		    return code; /* match, or throw an error up */
+		return eslEOD;  /* reached end of string, no match */
+	}
+	/* NOTREACHED */
+}
+
+/*
+ - regtry - try match at specific point
+ * 
+ * Returns <eslOK> on success, <eslEOD> failure.
+ * Throws  <ESL_CORRUPT>,<eslEINCONCEIVABLE> on internal errors.
+ */
+static int			
+regtry(register struct exec *ep, esl__regexp *prog, char *string)
+{
+	register int i;
+	register char **stp;
+	register char **enp;
+	int             code;
+
+	ep->reginput = string;
+
+	stp = prog->startp;
+	enp = prog->endp;
+	for (i = ESL_REGEXP_NSUB; i > 0; i--) {
+		*stp++ = NULL;
+		*enp++ = NULL;
+	}
+	if ((code = regmatch(ep, prog->program + 1)) == eslOK) {
+		prog->startp[0] = string;
+		prog->endp[0] = ep->reginput;
+		return eslOK;
+	} else
+		return code;	/* eslEOD for normal non-match; or other thrown codes */
+}
+
+/*
+ - regmatch - main matching routine
+ *
+ * Conceptually the strategy is simple:  check to see whether the current
+ * node matches, call self recursively to see whether the rest matches,
+ * and then act accordingly.  In practice we make some effort to avoid
+ * recursion, in particular by going through "ordinary" nodes (that don't
+ * need to know whether the rest of the match failed) by a loop instead of
+ * by recursion.
+ * 
+ * Returns <eslOK> on success, <eslEOD> on failure.
+ * Throws  <eslECORRUPT>,<eslEINCONCEIVABLE> on internal errors.
+ */
+static int	
+regmatch(register struct exec *ep, char *prog)
+{
+	register char *scan;	/* Current node. */
+	char *next;		/* Next node. */
+	int code;		/* error code */
+
+#ifdef DEBUG
+	if (prog != NULL && regnarrate)
+		fprintf(stderr, "%s(\n", regprop(prog));
+#endif
+	for (scan = prog; scan != NULL; scan = next) {
+#ifdef DEBUG
+		if (regnarrate)
+			fprintf(stderr, "%s...\n", regprop(scan));
+#endif
+		next = regnext(scan);
+
+		switch (OP(scan)) {
+		case BOL:
+			if (ep->reginput != ep->regbol)
+				return eslEOD;
+			break;
+		case EOL:
+			if (*ep->reginput != '\0')
+				return eslEOD;
+			break;
+		case ANY:
+			if (*ep->reginput == '\0')
+				return eslEOD;
+			ep->reginput++;
+			break;
+		case EXACTLY: {
+			register size_t len;
+			register char *const opnd = OPERAND(scan);
+
+			/* Inline the first character, for speed. */
+			if (*opnd != *ep->reginput)
+				return eslEOD;
+			len = strlen(opnd);
+			if (len > 1 && strncmp(opnd, ep->reginput, len) != 0)
+				return eslEOD;
+			ep->reginput += len;
+			break;
+			}
+		case ANYOF:
+			if (*ep->reginput == '\0' ||
+					strchr(OPERAND(scan), *ep->reginput) == NULL)
+				return eslEOD;
+			ep->reginput++;
+			break;
+		case ANYBUT:
+			if (*ep->reginput == '\0' ||
+					strchr(OPERAND(scan), *ep->reginput) != NULL)
+				return eslEOD;
+			ep->reginput++;
+			break;
+		case NOTHING:
+			break;
+		case BACK:
+			break;
+		case OPEN+1: case OPEN+2: case OPEN+3:
+		case OPEN+4: case OPEN+5: case OPEN+6:
+		case OPEN+7: case OPEN+8: case OPEN+9: {
+			register const int no = OP(scan) - OPEN;
+			register char *const input = ep->reginput;
+
+			if ((code = regmatch(ep, next)) == eslOK) {
+				/*
+				 * Don't set startp if some later
+				 * invocation of the same parentheses
+				 * already has.
+				 */
+				if (ep->regstartp[no] == NULL)
+					ep->regstartp[no] = input;
+				return eslOK;
+			} else
+				return code; /* usually eslEOD, except on error */
+		        /*NOTREACHED*/
+			break;
+		        }
+		case CLOSE+1: case CLOSE+2: case CLOSE+3:
+		case CLOSE+4: case CLOSE+5: case CLOSE+6:
+		case CLOSE+7: case CLOSE+8: case CLOSE+9: {
+			register const int no = OP(scan) - CLOSE;
+			register char *const input = ep->reginput;
+
+			if ((code = regmatch(ep, next)) == eslOK) {
+				/*
+				 * Don't set endp if some later
+				 * invocation of the same parentheses
+				 * already has.
+				 */
+				if (ep->regendp[no] == NULL)
+					ep->regendp[no] = input;
+				return eslOK;
+			} else
+				return code; /* usually eslEOD, except on error */
+			/*NOTREACHED*/
+			break;
+		        }
+		case BRANCH: {
+			register char *const save = ep->reginput;
+
+			if (OP(next) != BRANCH)		/* No choice. */
+				next = OPERAND(scan);	/* Avoid recursion. */
+			else {
+				while (OP(scan) == BRANCH) {
+				  if ((code = regmatch(ep, OPERAND(scan))) != eslEOD)
+ 				            return code; /* usually eslOK, but also a thrown error*/
+					ep->reginput = save;
+					scan = regnext(scan);
+				}
+				return eslEOD;
+				/*NOTREACHED*/
+			}
+			break;
+			}
+		case STAR: case PLUS: {
+			register const char nextch =
+				(OP(next) == EXACTLY) ? *OPERAND(next) : '\0';
+			register char *const save = ep->reginput;
+			register const size_t min = (OP(scan) == STAR) ? 0 : 1;
+			size_t no;
+
+			if (regrepeat(ep, OPERAND(scan), &no) != eslOK) return eslEINCONCEIVABLE;
+			for (++no; no > min; no--) {
+				ep->reginput = save + no - 1;
+				/* If it could work, try it. */
+				if (nextch == '\0' || *ep->reginput == nextch)
+					if (regmatch(ep, next) == eslOK)
+						return eslOK;
+			}
+			return eslEOD;
+			/*NOTREACHED*/
+			break;
+			}
+		case END:
+			return eslOK;	/* Success! */
+			break;
+		default:
+		  ESL_EXCEPTION(eslECORRUPT, "regexp corruption");
+		  /*NOTREACHED*/
+		  break;
+		}
+	}
+
+	/*
+	 * We get here only if there's trouble -- normally "case END" is
+	 * the terminating point.
+	 */
+	ESL_EXCEPTION(eslECORRUPT, "corrupted pointers");
+}
+
+/*
+ - regrepeat - report how many times something simple would match, 
+ *             via <ret_result>
+ * Returns <eslOK> on success.
+ * Throws  <eslEINCONCEIVABLE> - if node isn't a repeating one.
+ */
+static int
+regrepeat(register struct exec *ep, char *node, size_t *ret_count)
+{
+	register size_t count;
+	register char *scan;
+	register char ch;
+
+	switch (OP(node)) {
+	case ANY:
+	        *ret_count = strlen(ep->reginput);
+		return eslOK;
+	case EXACTLY:
+		ch = *OPERAND(node);
+		count = 0;
+		for (scan = ep->reginput; *scan == ch; scan++)
+			count++;
+		*ret_count = count;
+		return eslOK;
+	        /*NOTREACHED*/
+		break;
+	case ANYOF:
+		*ret_count = strspn(ep->reginput, OPERAND(node));
+		return eslOK;
+	        /*NOTREACHED*/
+		break;
+	case ANYBUT:
+	        *ret_count = strcspn(ep->reginput, OPERAND(node));
+		return eslOK;
+	        /*NOTREACHED*/
+		break;
+	default:		/* Oh dear.  Called inappropriately. */
+	        ESL_EXCEPTION(eslEINCONCEIVABLE, "bad call of regrepeat");
+ 	        /*NOTREACHED*/
+		break;
+	}
+        /* NOTREACHED */
+	return eslEINCONCEIVABLE;
+}
+
+/*
+ - regnext - dig the "next" pointer out of a node
+ */
+static char *
+regnext(register char *p)
+{
+  register const int offset = NEXT(p);
+
+  if (offset == 0)
+    return(NULL);
+
+  return((OP(p) == BACK) ? p-offset : p+offset);
+}
+
+#ifdef DEBUG
+/*
+ - regdump - dump a regexp onto stdout in vaguely comprehensible form
+ */
+static void
+regdump(esl__regexp *r)
+{
+	register char *s;
+	register char op = EXACTLY;	/* Arbitrary non-END op. */
+	register char *next;
+
+
+	s = r->program + 1;
+	while (op != END) {	/* While that wasn't END last time... */
+		op = OP(s);
+		printf("%2d%s", s-r->program, regprop(s));	/* Where, what. */
+		next = regnext(s);
+		if (next == NULL)		/* Next ptr. */
+			printf("(0)");
+		else 
+			printf("(%d)", (s-r->program)+(next-s));
+		s += 3;
+		if (op == ANYOF || op == ANYBUT || op == EXACTLY) {
+			/* Literal string, where present. */
+			while (*s != '\0') {
+				putchar(*s);
+				s++;
+			}
+			s++;
+		}
+		putchar('\n');
+	}
+
+	/* Header fields of interest. */
+	if (r->regstart != '\0')
+		printf("start `%c' ", r->regstart);
+	if (r->reganch)
+		printf("anchored ");
+	if (r->regmust != NULL)
+		printf("must have \"%s\"", r->regmust);
+	printf("\n");
+}
+
+/*
+ - regprop - printable representation of opcode
+ */
+static char *
+regprop(char *op)
+{
+	register char *p;
+	static char buf[50];
+
+	(void) strcpy(buf, ":");
+
+	switch (OP(op)) {
+	case BOL:
+		p = "BOL";
+		break;
+	case EOL:
+		p = "EOL";
+		break;
+	case ANY:
+		p = "ANY";
+		break;
+	case ANYOF:
+		p = "ANYOF";
+		break;
+	case ANYBUT:
+		p = "ANYBUT";
+		break;
+	case BRANCH:
+		p = "BRANCH";
+		break;
+	case EXACTLY:
+		p = "EXACTLY";
+		break;
+	case NOTHING:
+		p = "NOTHING";
+		break;
+	case BACK:
+		p = "BACK";
+		break;
+	case END:
+		p = "END";
+		break;
+	case OPEN+1:
+	case OPEN+2:
+	case OPEN+3:
+	case OPEN+4:
+	case OPEN+5:
+	case OPEN+6:
+	case OPEN+7:
+	case OPEN+8:
+	case OPEN+9:
+		sprintf(buf+strlen(buf), "OPEN%d", OP(op)-OPEN);
+		p = NULL;
+		break;
+	case CLOSE+1:
+	case CLOSE+2:
+	case CLOSE+3:
+	case CLOSE+4:
+	case CLOSE+5:
+	case CLOSE+6:
+	case CLOSE+7:
+	case CLOSE+8:
+	case CLOSE+9:
+		sprintf(buf+strlen(buf), "CLOSE%d", OP(op)-CLOSE);
+		p = NULL;
+		break;
+	case STAR:
+		p = "STAR";
+		break;
+	case PLUS:
+		p = "PLUS";
+		break;
+	default:
+ 	        p = "[corrupted!]";
+	        break;
+	}
+	if (p != NULL)
+		(void) strcat(buf, p);
+	return(buf);
+}
+#endif /*DEBUG*/
+
+
+      /* SRE: regsub() currently disabled; it is useful, but currently
+       * unused. ifdef'ing it out silences zealous compiler warnings */
+#if 0
+/*
+ - regsub - perform substitutions after a regexp match
+ *
+ * Returns <eslOK> on success.
+ * Throws  <eslEINCONCEIVABLE>, <eslECORRUPT> on internal errors.
+ */
+static int
+regsub(const esl__regexp *rp, const char *source, char *dest)
+{
+	register esl__regexp * const prog = (esl__regexp *)rp;
+	register char *src = (char *)source;
+	register char *dst = dest;
+	register char c;
+	register int no;
+	register size_t len;
+
+	if (prog == NULL || source == NULL || dest == NULL) 
+	  ESL_EXCEPTION(eslEINCONCEIVABLE, "NULL parameter to regsub");
+
+	if ((unsigned char)*(prog->program) != REGMAGIC) 
+	  ESL_EXCEPTION(eslECORRUPT, "damaged regexp");
+
+	while ((c = *src++) != '\0') {
+		if (c == '&')
+			no = 0;
+		else if (c == '\\' && isdigit((int) (*src)))
+			no = *src++ - '0';
+		else
+			no = -1;
+
+		if (no < 0) {	/* Ordinary character. */
+			if (c == '\\' && (*src == '\\' || *src == '&'))
+				c = *src++;
+			*dst++ = c;
+		} else if (prog->startp[no] != NULL && prog->endp[no] != NULL &&
+					prog->endp[no] > prog->startp[no]) {
+			len = prog->endp[no] - prog->startp[no];
+			(void) strncpy(dst, prog->startp[no], len);
+			dst += len;
+			if (*(dst-1) == '\0') 	/* strncpy hit NUL. */
+			  ESL_EXCEPTION(eslECORRUPT, "damaged match string");
+		}
+	}
+	*dst++ = '\0';
+	return eslOK;
+}
+#endif /* regsub() currently disabled */
+/*============= end of Spencer's copyrighted regexp code =============================*/
+
+/* Spencer's code originally handled a backslashed alphanum
+ * like \t as t: in regatom(), the logic was:
+ *     ret = regnode(cp, EXACTLY);
+ *     regc(cp, *cp->regparse++);
+ *     regc(cp, '\0');
+ * Here we provide a drop-in replacement for these lines.
+ * We create an EXACTLY node for escapes, and a ANYBUT
+ * or ANYOF node for character classes. Then
+ * instead of pushing the char *cp->regparse onto the machine
+ * and incrementing cp->regparse, we interpret an alphanumeric
+ * character as an escape code, push one or more appropriate
+ * chars onto the machine, and advance regparse,
+ * before returning control to Spencer.
+ *
+ * that is: cp->regparse points to c when we come in,
+ * and it's an alphanumeric following a \. On return,
+ * we've advanced cp->regparse by one. 
+ */
+static char *
+regescape(struct comp *cp, char c)
+{
+  char *ret = NULL;
+  char  x;
+  int   status;
+
+  switch (c) {
+    /* escapes: */
+  case 'f': ret = regnode(cp, EXACTLY); regc(cp, '\f'); break;
+  case 'n': ret = regnode(cp, EXACTLY); regc(cp, '\n'); break;
+  case 'r': ret = regnode(cp, EXACTLY); regc(cp, '\r'); break;
+  case 't': ret = regnode(cp, EXACTLY); regc(cp, '\t'); break;
+
+    /* character classes: */
+  case 'd': 
+    ret = regnode(cp, ANYOF);
+    for (x = '0'; x <= '9'; x++) 
+      regc(cp, x);
+    break;
+
+  case 'D':
+    ret = regnode(cp, ANYBUT);
+    for (x = '0'; x <= '9'; x++) regc(cp, x);
+    break;
+
+  case 'w':
+    ret = regnode(cp, ANYOF);
+    for (x = '0'; x <= '9'; x++) regc(cp, x);
+    for (x = 'a'; x <= 'z'; x++) regc(cp, x);
+    for (x = 'A'; x <= 'Z'; x++) regc(cp, x);
+    regc(cp, '_');
+    break;
+
+  case 'W':
+    ret = regnode(cp, ANYBUT);
+    for (x = '0'; x <= '9'; x++) regc(cp, x);
+    for (x = 'a'; x <= 'z'; x++) regc(cp, x);
+    for (x = 'A'; x <= 'Z'; x++) regc(cp, x);
+    regc(cp, '_');
+    break;
+
+  case 's':
+    ret = regnode(cp, ANYOF);
+    regc(cp, ' ');
+    regc(cp, '\t');
+    regc(cp, '\n');
+    regc(cp, '\r');
+    regc(cp, '\f');
+    break;
+
+  case 'S':
+    ret = regnode(cp, ANYBUT);
+    regc(cp, ' ');
+    regc(cp, '\t');
+    regc(cp, '\n');
+    regc(cp, '\r');
+    regc(cp, '\f');
+    break;
+
+  default:
+    ESL_XEXCEPTION(eslESYNTAX, "invalid \\ escape code");
+    /*NOTREACHED*/
+    break;
+  }
+
+  regc(cp, '\0');
+  cp->regparse++;
+  return ret;
+
+ ERROR:
+  return (status == eslOK ? ret : NULL);  // status is not OK; construction serves to silence compiler warning about unused <status>
+}
+
+
+/*****************************************************************
+ * 3 code examples, and the test driver 
+ *****************************************************************/
+
+#ifdef eslREGEXP_EXAMPLE
+/* Single match example.
+ * Find first match of <pattern> in <string>; 
+ * print coords of complete match.
+ *
+ * gcc -g -Wall -o example1 -I. -DeslREGEXP_EXAMPLE1 regexp.c easel.c
+ * ./example1 <pattern> <string>
+ */
+
+#include <stdio.h> /* for printf() */
+#include "easel.h"
+#include "esl_regexp.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_REGEXP *m;  
+  char       *pattern;
+  char       *string;
+  int         status;
+  int         i,j;
+
+  pattern = argv[1];
+  string  = argv[2];
+
+  m = esl_regexp_Create();
+
+  status = esl_regexp_Match(m, pattern, string);
+
+  if (status == eslOK) 
+    {
+      esl_regexp_SubmatchCoords(m, string, 0, &i, &j);
+      printf("Pattern matches string at positions %d..%d\n", i+1, j+1);
+    }
+  else if (status == eslEOD)
+    {
+      printf("Pattern does not match in string.\n");
+    }
+
+  esl_regexp_Destroy(m);
+  exit(0);
+}
+#endif /* eslREGEXP_EXAMPLE*/
+
+
+#ifdef eslREGEXP_EXAMPLE2
+/* Multiple match example.
+ * Matches <pattern> against <string> multiple times, until
+ * no more matches are found.
+ * 
+ * gcc -g -Wall -o example2 -I. -DeslREGEXP_EXAMPLE2 regexp.c easel.c
+ * ./example2 <pattern> <string>
+ */
+
+#include <stdio.h> /* for printf() */
+#include "easel.h"
+#include "esl_regexp.h"
+
+int
+main(int argc, char **argv)
+{
+  char       *pattern;
+  char       *string;
+  ESL_REGEXP *m;
+  int         status;
+  int         i,j;
+  char       *s;
+  char        buf[256];
+  int         n = 0;
+
+  pattern = argv[1];
+  string  = argv[2];
+
+  m = esl_regexp_Create();
+
+  esl_regexp_Compile(m, pattern);
+  s = string;
+  while ((status = esl_regexp_MultipleMatches(m, &s)) == eslOK)
+    {
+      n++;
+      esl_regexp_SubmatchCoords(m, string, 0, &i, &j);
+      esl_regexp_SubmatchCopy(m, 0, buf, 256);
+
+      printf("Match #%d: positions %d..%d   sequence: %s\n", n, i+1, j+1, buf);      
+    }
+  
+  esl_regexp_Destroy(m);
+  exit(0);
+}
+#endif /* eslREGEXP_EXAMPLE2 */
+
+
+#ifdef eslREGEXP_EXAMPLE3 
+
+/* Token parsing example.
+ * Match a <pattern> that contains <ntok> ()-tokens
+ * against <string>; parse out the submatches to each () token.
+ * 
+ * gcc -g -Wall -o example3 -I. -DeslREGEXP_EXAMPLE3 regexp.c easel.c
+ * ./example3 <pattern> <string> <ntok>
+ */
+#include <stdlib.h> /* for atoi()   */
+#include <stdio.h>  /* for printf() */
+#include "easel.h"
+#include "esl_regexp.h"
+
+int
+main(int argc, char **argv)
+{
+  char        *pattern;
+  char        *string;
+  int          ntok;
+  ESL_REGEXP  *m;		
+  int          status;
+  int          i,j;
+  char        *token;
+  int          n;
+
+  pattern = argv[1];
+  string  = argv[2];
+  ntok    = atoi(argv[3]);
+
+  m = esl_regexp_Create();
+
+  status = esl_regexp_Match(m, pattern, string);
+  if (status == eslOK) 
+    { 
+      for (n = 1; n <= ntok; n++) 
+	{
+	  esl_regexp_SubmatchCoords(m, string, n, &i, &j);
+	  token = esl_regexp_SubmatchDup(m, n);
+	  printf("token #%d: %d..%d, %s\n", n, i+1, j+1, token);
+	  free(token);
+	}
+    }
+  esl_regexp_Destroy(m);
+  exit(0);
+}
+#endif /*eslREGEXP_EXAMPLE3*/
+
+#ifdef eslREGEXP_TESTDRIVE
+/* A test driver exercises every function in the
+ * external API at least once, and tries to uncover
+ * obvious problems. 
+ *
+ * gcc -g -Wall -o test -I. -DeslREGEXP_TESTDRIVE regexp.c easel.c
+ * ./test
+ */
+int
+main(void)
+{
+  ESL_REGEXP *m; 
+  char       *pattern;
+  char       *string;
+  char       *s;
+  char        buf[64];
+  int         status;
+  int         i,j;
+  int         n;
+  
+  m = esl_regexp_Create();
+  string  = "aaafoobarfoooobazfo..aaa";
+
+  /* simple matching test.
+   */
+  pattern = "foo";
+  if (esl_regexp_Match(m, pattern, string) != eslOK) abort();
+  esl_regexp_SubmatchCoords(m, string, 0, &i, &j);
+  if (i != 3 || j != 5) abort();
+  s = esl_regexp_SubmatchDup(m, 0);
+  if (strcmp(s, "foo") != 0) abort();
+  free(s);
+  esl_regexp_SubmatchCopy(m, 0, buf, 64);
+  if (strcmp(buf, "foo") != 0) abort();
+
+  /* test all the metacharacters in one pattern;
+   * and token 2 extraction grabs "oobaz" 13..17
+   */
+  pattern = "^aaaa*(foo|bar|baz)+([aboz]+).o\\.[^a-z]aaa?$";
+  if (esl_regexp_Match(m, pattern, string) != eslOK) abort();
+  esl_regexp_SubmatchCoords(m, string, 2, &i, &j);
+  if (i != 12 || j != 16) abort();
+  s = esl_regexp_SubmatchDup(m, 2);
+  if (strcmp(s, "oobaz") != 0) abort();
+  free(s);
+
+  /* test multiple matching:
+   * this pattern hits five times in the sequence, w/
+   * variations on foo.
+   */
+  pattern = "bar|foo*|baz";
+  esl_regexp_Compile(m, pattern);
+  s = string;
+  n = 0;
+  while ((status = esl_regexp_MultipleMatches(m, &s)) == eslOK)
+    {
+      n++;
+      esl_regexp_SubmatchCopy(m, 0, buf, 64);
+      if ((n == 1 && strcmp(buf, "foo")   != 0) ||
+	  (n == 2 && strcmp(buf, "bar")   != 0) ||
+	  (n == 3 && strcmp(buf, "foooo") != 0) ||
+	  (n == 4 && strcmp(buf, "baz")   != 0) ||
+	  (n == 5 && strcmp(buf, "fo")    != 0))
+	abort();
+    }
+  if (n != 5) abort();
+  esl_regexp_Destroy(m);
+  exit(0);
+}
+#endif /* test driver */
+/*============= end of test driver and example code =============================*/
+
+
+
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_regexp.h b/esl_regexp.h
new file mode 100644
index 0000000..7ba114b
--- /dev/null
+++ b/esl_regexp.h
@@ -0,0 +1,73 @@
+/* Regular expression matching on strings.
+ * 
+ * SRE, Sun Jan  2 10:52:34 2005 [Zaragoza]
+ * SVN $Id$
+ * SVN $URL$
+ ******************************************************************
+ * The regexp module is a wrapper around a modified version of Henry
+ * Spencer's regex library. Spencer's copyright notice appears below,
+ * after my wrappers, prefacing the section that includes his code. I
+ * believe you can obtain the original code from:
+ *    ftp://ftp.zoo.toronto.edu/pub/bookregex.tar.Z
+ * Thanks, Henry!
+ *****************************************************************
+ */    
+#ifndef eslREGEXP_INCLUDED
+#define eslREGEXP_INCLUDED
+
+/* ESL_REGEXP_NSUB specifies the maximum number of () expressions
+ * in a regexp. The whole regexp counts as one, so 16 allows for 
+ * parsing out up to 15 tokens from the match.
+ */
+#define ESL_REGEXP_NSUB 16
+
+/* The esl__regexp structure is from the original Spencer code.
+ * It's wrapped by the ESL_REGEXP structure, below.
+ */
+typedef struct {
+  char *startp[ESL_REGEXP_NSUB]; /* ptrs to starts of submatches on target string */
+  char *endp[ESL_REGEXP_NSUB];   /* ptrs to 1 char after ends of submatches */
+  char regstart;		 /* Internal use only. */
+  char reganch;		         /* Internal use only. */
+  char *regmust;		 /* Internal use only. */
+  int regmlen;		         /* Internal use only. */
+  char program[1];	         /* Unwarranted chumminess with compiler. */  
+} esl__regexp;
+
+
+/* This looks sort of stupid, wrapping a single ptr in a structure, but we
+ * want the machine to be persistent even if different NDFAs are
+ * compiled and used. Without this persistency, we would have to
+ * create/destroy every time we used a different pattern, instead of
+ * one create/destroy per block of code that uses regex matching
+ * functionaility.
+ *
+ * Plus, if we ever need to keep other persistent info 
+ * beyond Spencer's compiled NDFA (which we'd rather not mess
+ * with), we have a place to put it.
+ */
+typedef struct {
+  esl__regexp *ndfa;	 /* a compiled regexp */
+} ESL_REGEXP;
+
+
+/* Declaration of functions in the API
+ */
+
+extern ESL_REGEXP *esl_regexp_Create(void);
+extern void        esl_regexp_Destroy(ESL_REGEXP *machine);
+
+extern int  esl_regexp_Match(ESL_REGEXP *machine, const char *pattern, const char *s);
+extern int  esl_regexp_Compile(ESL_REGEXP *machine, const char *pattern);
+extern int  esl_regexp_MultipleMatches(ESL_REGEXP *machine, char **sptr);
+
+extern char *esl_regexp_SubmatchDup(ESL_REGEXP *machine, int elem);
+extern int   esl_regexp_SubmatchCopy(ESL_REGEXP *machine, int elem, char *buffer, int nc);
+extern int   esl_regexp_SubmatchCoords(ESL_REGEXP *machine, char *origin, int elem, 
+				       int *ret_start, int *ret_end);
+extern int   esl_regexp_ParseCoordString(const char *cstring, uint32_t *ret_start, uint32_t *ret_end);
+
+#endif /*eslREGEXP_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_regexp.tex b/esl_regexp.tex
new file mode 100644
index 0000000..1f03a8b
--- /dev/null
+++ b/esl_regexp.tex
@@ -0,0 +1,386 @@
+
+The regexp module contains portable functions for using regular
+expressions to match and parse strings.
+
+There are many different regular expression syntaxes.  Easel
+implements a small regular expression machine with a limited syntax,
+allowing the most familiar and important regular expression
+operators. It takes advantage of a compact, public domain regular
+expression engine written by Henry Spencer at the University of
+Toronto. Easel's regular expressions are not as powerful as the
+regular expression syntax in the Perl language, for example, but are
+sufficient for many useful parsing needs in a C application.
+
+\subsection{The regexp API}
+
+The module implements one object: a regular expression matching
+``machine'', \ccode{ESL\_REGEXP}.
+
+The API defines ten functions:
+
+\begin{tabular}{ll}
+       \multicolumn{2}{c}{\textbf{creating/destroying a regexp machine}}\\
+\ccode{esl\_regexp\_Create()}   & Creates a new \ccode{ESL\_REGEXP}. \\
+\ccode{esl\_regexp\_Destroy()}  & Destroys a created \ccode{ESL\_REGEXP}.\\
+\ccode{esl\_regexp\_Inflate()}  & Inflates an allocated \ccode{ESL\_REGEXP} shell. \\
+\ccode{esl\_regexp\_Deflate()}  & Deflates an inflated \ccode{ESL\_REGEXP} shell. \\
+       \multicolumn{2}{c}{\textbf{matching a pattern against a string}}\\
+\ccode{esl\_regexp\_Match()}    & Finds first match of a pattern in a string.\\
+\ccode{esl\_regexp\_Compile()}  & Precompile a pattern, for \ccode{\_MultipleMatches()}.\\
+\ccode{esl\_regexp\_MultipleMatches()} & Finds next match of a compiled pattern in a string.\\
+       \multicolumn{2}{c}{\textbf{retrieving (sub)match information}}\\
+\ccode{esl\_regexp\_SubmatchDup()} & Retrieves text of a (sub)match as a new string.\\
+\ccode{esl\_regexp\_SubmatchCopy()} & Copies text of a (sub)match into a buffer.\\
+\ccode{esl\_regexp\_SubmatchCoords()} & Retrieves start/end coord of a (sub)match.\\
+\end{tabular}
+
+\subsection{Examples of using the regexp API}
+
+To use the \ccode{regexp} module, you first create a machine, which
+you'll destroy when you're done. The same machine can be used for any
+number of different patterns, so you would usually create just one
+machine per function or code unit that needs regular expression
+functionality.
+
+An example of code that matches a \ccode{pattern} against a
+\ccode{string} is:
+
+\begin{cchunk}
+#include <stdio.h> /* for printf() */
+#include <easel/easel.h>
+#include <easel/regexp.h>
+
+int
+main(int argc, char **argv)
+{
+  ESL_REGEXP *m;  
+  char       *pattern;
+  char       *string;
+  int         status;
+  int         i,j;
+
+  pattern = argv[1];
+  string  = argv[2];
+
+  m = esl_regexp_Create();
+
+  status = esl_regexp_Match(m, pattern, string);
+
+  if (status == ESL_OK) 
+    {
+      esl_regexp_SubmatchCoords(m, string, 0, &i, &j);
+      printf("Pattern matches string at positions %d..%d\n", i+1, j+1);
+    }
+  else if (status == ESL_EOD)
+    {
+      printf("Pattern does not match in string.\n");
+    }
+
+  esl_regexp_Destroy(m);
+  exit(0);
+}
+#endif /* ESL_REGEXP_EXAMPLE1*/
+\end{cchunk}
+
+
+The \ccode{esl\_regexp\_Match()} function does the parsing. It returns
+\ccode{ESL\_OK} if a match is found, or \ccode{ESL\_EOD} if not. 
+
+If a match is found, information about where the match is located in
+the string is kept in the machine. This information can be retrieved
+by any of three functions: the start and end points of the match (or
+any () token defining a submatch within the pattern) can be retrieved
+by \ccode{esl\_regexp\_SubmatchCoords()}; a matching substring can be
+retrieved as a new string by \ccode{esl\_regexp\_SubmatchDup()}, or
+matching substring can be copied into an existing buffer by
+\ccode{esl\_regexp\_SubmatchCopy()}. This information is volatile. It
+will only be available for retrieval until the next time this machine
+runs one of the two matching functions (\ccode{esl\_regexp\_Match()} or
+\ccode{esl\_regexp\_MultipleMatches()}).
+
+\ccode{esl\_regexp\_SubmatchCoords()} was called here with an argument
+of \ccode{elem}$=$ 0, where 0 means the complete match, as opposed to
+any tokens within the pattern. We'll see an example of retrieving
+tokens in a bit.
+
+The \ccode{i,j} start/end coordinates retrieved by the call to
+\ccode{esl\_regexp\_SubmatchCoords()} are 0-offset relative to the
+origin we provided, the \ccode{string} itself; so the first position
+in \ccode{string} is $i=0$. We added $+1$ to \ccode{i,j} in the
+example to print coords as $1..L$ in the string instead of $0..L-1$.
+
+An example of running this code:
+
+\begin{cchunk}
+  % ./example1 "ba(na)+" "grape banana apple"
+  Pattern matches string at positions 7..12
+\end{cchunk}
+
+Note that it matched ``banana'' from 7..12, not ``bana'' from
+7..10. The Easel regexp machine is ``greedy''. It matches as much of
+the string as the pattern allows. There isn't currently a way to
+circumvent this to get minimal matching instead of maximal matching
+(as, for instance, Perl regular expressions allow with an additional
+'?' modifier on its greedy quantifiers.)
+
+\subsubsection{Example of finding multiple matches in a string}
+
+The example above only found one (the first) match in the target
+string. What if you want to find every match in the string, analogous
+to the Perl \ccode{m//g} operator? The combination of
+\ccode{esl\_regexp\_Compile()} and
+\ccode{esl\_regexp\_MultipleMatches()} provides a useful idiom for
+this task, as seen in this example:
+
+\begin{cchunk}
+#include <stdio.h> /* for printf() */
+#include <easel/easel.h>
+#include <easel/regexp.h>
+
+int
+main(int argc, char **argv)
+{
+  char       *pattern;
+  char       *string;
+  ESL_REGEXP *m;
+  int         status;
+  int         i,j;
+  char       *s;
+  char        buf[256];
+  int         n = 0;
+
+  pattern = argv[1];
+  string  = argv[2];
+
+  m = esl_regexp_Create();
+
+  esl_regexp_Compile(m, pattern);
+  s = string;
+  while ((status = esl_regexp_MultipleMatches(m, &s)) == ESL_OK)
+    {
+      n++;
+      esl_regexp_SubmatchCoords(m, string, 0, &i, &j);
+      esl_regexp_SubmatchCopy(m, 0, buf, 256);
+
+      printf("Match #%d: positions %d..%d   sequence: %s\n", n, i+1, j+1, buf);      
+    }
+  
+  esl_regexp_Destroy(m);
+  exit(0);
+}
+\end{cchunk}
+
+For example, something like this could parse a command line for one or
+more arguments:
+
+\begin{cchunk}
+   % ./example2 "-[^ ]+" "foo -a --arg -O myfile"
+   Match #1: positions 5..6   sequence: -a
+   Match #2: positions 8..12   sequence: --arg
+   Match #3: positions 14..15   sequence: -O
+\end{cchunk}
+
+Like \ccode{esl\_regexp\_Match()},
+\ccode{esl\_regexp\_MultipleMatches()} finds the first match in a
+string. Additionally, upon returning after finding a match,
+\ccode{esl\_regexp\_MultipleMatches()} supplies a pointer to the next
+position in the string following the match (through the \ccode{\&s}
+argument). That facilitates writing an idiomatic \ccode{while ()} loop
+that steps a temporary pointer \ccode{s} through the string until no
+more matches are found, starting with \ccode{s = string}.
+
+Using a regular expression pattern requires compiling it into machine
+code (a non-deterministic finite automaton, NDFA). When you use
+\ccode{esl\_regexp\_Match()}, your pattern is compiled, and the
+resulting NDFA is run on your string to find a match. In the
+multiple-matching case, it's a waste to recompile the pattern for
+every match. Therefore, we use \ccode{esl\_regexp\_Compile()} to
+compile the NDFA once and hold it in the machine, and
+\ccode{esl\_regexp\_MultipleMatches()} takes a machine (containing a
+precompiled NDFA) as an argument instead of a pattern.
+
+Remember that the regexp machine is greedy, and that the pointer is set
+to follow each match. Therefore, multiple matches are guaranteed to be
+nonoverlapping, with each match matching as much of the string as it
+can before a subsequent match occurs -- even if this is not what you
+want.
+
+Otherwise, \ccode{esl\_regexp\_MultipleMatches()} and
+\ccode{esl\_regexp\_Match()} behave the same, in that they find the
+first match in the string pointer they're provided, and in terms of
+the information they leave in the machine for subsequent retrieval.
+
+You can also see an example of \ccode{esl\_regexp\_SubmatchCopy()} in
+action here, copying the complete match (``sub''match \#0), to a
+provided fixed-length buffer.
+
+\subsubsection{Example of parsing tokens out of a string}
+
+Text parsing is laborious in C, a language which does not inherently
+provide anywhere near the text-parsing power of Perl, for example.
+Using a regular expression to match a line of text and extract one or
+more tokens, demarcated by () in the expression, is a common operation
+in Perl. The Easel regexp machine provides much of the same power. An
+example of using token extraction:
+
+\begin{cchunk}
+#include <stdlib.h> /* for atoi()   */
+#include <stdio.h>  /* for printf() */
+#include <easel/easel.h>
+#include <easel/regexp.h>
+
+int
+main(int argc, char **argv)
+{
+  char        *pattern;
+  char        *string;
+  int          ntok;
+  ESL_REGEXP  *m;		
+  int          status;
+  int          i,j;
+  char        *token;
+  int          n;
+
+  pattern = argv[1];
+  string  = argv[2];
+  ntok    = atoi(argv[3]);
+
+  m = esl_regexp_Create();
+
+  status = esl_regexp_Match(m, pattern, string);
+  if (status == ESL_OK) 
+    { 
+      for (n = 1; n <= ntok; n++) 
+	{
+	  esl_regexp_SubmatchCoords(m, string, n, &i, &j);
+	  token = esl_regexp_SubmatchDup(m, n);
+	  printf("token #%d: %d..%d, %s\n", n, i+1, j+1, token);
+	  free(token);
+	}
+    }
+  esl_regexp_Destroy(m);
+  exit(0);
+}
+\end{cchunk}
+
+In previous examples, we only retrieved information about ``submatch''
+number 0, which always refers to the entire regular expression. The
+machine also retains the same information about all the ()-demarcated
+tokens in the expression, up to 15 of them.\footnote{The limit of one
+complete expression plus 15 tokens is defined by a compile-time
+constant \ccode{ESL\_REGEXP\_NSUB} in \ccode{regexp.h}, which is set to
+16 by default.} Now, we tell the retrieval functions (here,
+\ccode{esl\_regexp\_SubmatchCoords()} and
+\ccode{esl\_regexp\_SubmatchDup()}) to retrieve info for token
+\ccode{n} instead of 0.
+
+For example, parsing a bibliographic reference like ``Gene
+102:189-196(1991)'' might go something like:
+
+\begin{cchunk}
+  % ./example3  "(\S+) (\d+):(\d+)-(\d+)\((\d+)\)" "Gene 102:189-196(1991)"   5
+  token #1: 1..4, Gene
+  token #2: 6..8, 102
+  token #3: 10..12, 189
+  token #4: 14..16, 196
+  token #5: 18..21, 1991
+\end{cchunk}
+
+The tokens are numbered in the order that their open-parenthesis
+occurred in the expression, from left to right.
+
+\subsection{Syntax of regular expressions}
+
+Regular expression syntax is fairly universal and documented in many
+places, but because different engines implement more or less rich sets
+of regular expression operations, a specific description of Easel's
+operators follows.
+
+There are 11 metacharacters \verb'|?*+[().^$\' that encode regular
+expression operations.
+
+\ccode{.} is the ANY operator. It matches any single character.
+
+\ccode{?}, \ccode{*}, and \ccode{+} are repetition operators that
+follow some atom of the pattern. \ccode{?} means 0 or 1 occurrences of
+the atom; \ccode{*} means 0 or more; \ccode{+} means 1 or more.  For
+example, \ccode{foo?} matches fo and foo; \ccode{foo*} matches fo,
+foo, fooo, foooo and so on; \ccode{foo+} matches foo, fooo, foooo, and
+so on.
+
+\verb'^' is the beginning-of-string anchor, and \ccode{\$} is the
+end-of-string anchor. 
+
+\ccode{|} is the concatenation operator, specifying alternative ways
+to match. For example, \ccode{foo|bar|baz} matches baz, bar, or foo;
+\ccode{(foo|bar|baz)+} matches barfoobaz, foofoofoo, etc.
+
+\ccode{()} are for grouping and tokenizing. Anything inside \ccode{()}
+is grouped and treated as a single atom for purposes of a subsequent
+\ccode{?*+} operator, as in the \ccode{(foo|bar|baz)+} example above.
+Anything inside \ccode{()} becomes a token, extractable by
+\ccode{\_Submatch*} functions.
+
+The backslash \verb+\+, when followed by any metacharacter (or in
+fact, any non-alphanumeric character), specifies that that character
+should be treated as an ordinary character.  For example, the pattern
+\verb+\\c:+ matches the string \verb+\c:+, since backslash is itself a
+metacharacter.
+
+A backslash followed by an alphanumeric character is either an
+\emph{escape character} or a \emph{character set}. Four escape
+characters are recognized: \verb+\f+ (form feed), \verb+\n+ (newline),
+\verb+\r+ (carriage return), and \verb+\t+ (TAB). Six character set
+codes are recognized, with the same meanings they have in Perl regular
+expressions:
+
+\begin{center}
+\begin{tabular}{lll} 
+\textbf{code} & \textbf{meaning}    & \textbf{equivalent to} \\
+ \verb+\d+    & digit               & \verb+[0-9]+ \\
+ \verb+\D+    & not a digit         & \verb+[^0-9]+ \\
+ \verb+\w+    & word character      & \verb+[0-9a-z_a-Z]+ \\
+ \verb+\W+    & non-word character  & \verb+[^0-9a-z_a-Z]+ \\
+ \verb+\s+    & whitespace          & \verb+[ \t\n\r\f]+ \\
+ \verb+\S+    & non-whitespace      & \verb+[^ \t\n\r\f]+ \\
+\end{tabular}
+\end{center}
+
+A backslash that is followed by an alphanumeric character that is neither
+an escape code or a character set code is an error.
+
+\ccode{[} is the set (or range) operator. \footnote{An unmatched
+\ccode{]} is not a metacharacter, but a \ccode{[} metacharacter always
+implies a range and always must have a closing \ccode{]}.} The set of
+characters inside brackets \ccode{[]} are read as a single ANYOF
+atom. A set may be specified as a range of ASCII characters;
+\ccode{[a-z]}, for example, means any lower-case character from a to
+z, \ccode{[a-zA-Z]} means any alphabetic character, and \ccode{[0-9]}
+means any digit. For example, \ccode{fo[ox]} matches foo or
+fox. Additionally, \verb+[^+ implies the opposite, an ANYBUT atom: any
+character \emph{except} the set of characters named is a match. For
+example, \verb'foo[^ ]+' matches ``football'' in the string ``football
+game''. 
+
+Metacharacters are handled differently inside the \verb+[]+ range
+operator. The only special characters are \verb+]+, \verb+-+, and
+\verb+\+. A \verb+]+ character indicates the end of the range operator
+unless it immediately follows the \verb+[+, in which case it is
+treated as a normal character (thus, weirdly, \verb+[][{}()]+ will
+match any open/close brace/parenthesis character). The \verb+-+
+character indicates the middle of a three-character \verb+x-y+ ASCII
+range, unless it comes at the beginning or end of the range (thus
+\verb+[]-]+ recognizes either \verb+]+ or \verb+-+ as literals).  The
+\verb+\+ character indicates an escaped character. Only five such
+escape characters are recognized inside a range operator: \verb+\f+
+(form feed), \verb+\n+ (newline), \verb+\r+ (carriage return),
+\verb+\t+ (TAB), and \verb+\\+ (backslash itself). Character set codes
+like \verb+\s+ are not allowed within range operators.
+
+
+
+
+
+
+
+
diff --git a/esl_rootfinder.c b/esl_rootfinder.c
new file mode 100644
index 0000000..76d0768
--- /dev/null
+++ b/esl_rootfinder.c
@@ -0,0 +1,542 @@
+/* Finding roots.
+ * 
+ * Contents:
+ *   1. The ESL_ROOTFINDER object.
+ *   2. One-dimensional root finding.
+ *   3. Unit tests.
+ *   4. Test driver.
+ *   5. Examples.
+ *   6. Copyright and license information.
+ * 
+ */
+#include "esl_config.h"
+
+#include <math.h>
+
+#include "easel.h"
+#include "esl_rootfinder.h"
+
+/*****************************************************************
+ * 1. The ESL_ROOTFINDER object.
+ *****************************************************************/
+
+/* Function:  esl_rootfinder_Create()
+ * Synopsis:  Creates ESL_ROOTFINDER for an $f(x)$
+ * Incept:    SRE, Tue Apr 10 19:54:09 2007 [Janelia]
+ *
+ * Purpose:   Create a rootfinder to find a root of a function $f(x) = 0$.
+ *            <(*func)()> is a pointer to an implementation of the
+ *            function $f(x)$. <params> is a generic pointer to any
+ *            parameters or storage needed in <(*func)()> other than
+ *            the value of $x$. 
+ *            
+ *            Caller implements a <func()> that takes three arguments.
+ *            The first two are the value <x>, and a void pointer to
+ *            any additional parameters that $f(x)$ depends on. The
+ *            result, $f(x)$, is returned via the third argument. This
+ *            function must return <eslOK> to indicate success. Upon
+ *            error, it may throw any error code it wishes.
+ *            
+ *
+ * Args:      (*func)() - ptr to function that evaluates f(x)
+ *            params    - ptr to parameters to be passed to (*func)()
+ *
+ * Returns:   pointer to a new <ESL_ROOTFINDER> structure.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_ROOTFINDER *
+esl_rootfinder_Create(int (*func)(double, void*, double*), void *params)
+{
+  int status;
+  ESL_ROOTFINDER *R = NULL;
+
+  ESL_ALLOC(R, sizeof(ESL_ROOTFINDER));
+  R->func          = func;
+  R->fdf           = NULL;	/* unused */
+  R->params        = params;
+  R->xl            = -eslINFINITY; /* not set yet */
+  R->fl            = 0.;	   /* not set yet */
+  R->xr            = eslINFINITY;  /* not set yet */
+  R->fr            = 0.;	/* not set yet */
+  R->x0            = 0.;	/* not set yet */
+  R->f0            = 0.;	/* not set yet */
+  R->x             = 0.;	/* not set yet */
+  R->fx            = 0.;	/* not set yet */
+  R->dfx           = 0.;	/* unused */
+  R->iter          = 0;
+  R->abs_tolerance = 1e-12;
+  R->rel_tolerance = 1e-12;
+  R->residual_tol  = 0.;
+  R->max_iter      = 100; 
+  return R;
+
+ ERROR:
+  esl_rootfinder_Destroy(R);
+  return NULL;
+}
+
+
+/* Function:  esl_rootfinder_CreateFDF()
+ * Synopsis:  Creates ESL_ROOTFINDER that uses both $f(x)$, $f'(x)$
+ * Incept:    SRE, Tue Apr 10 20:47:42 2007 [Janelia]
+ *
+ * Purpose:   Create a rootfinder that will find 
+ *            a root of a function $f(x) = 0$ using first derivative
+ *            information $f'(x)$. 
+ *            
+ *            Caller provides a pointer <*fdf()> to a function that
+ *            takes four arguments. The first two are the current <x>
+ *            value, and a void pointer to any additional parameters
+ *            that $f(x)$ depends on. <*fdf()> calculates the function
+ *            $f(x)$ and the derivative $f'(x)$ and returns them
+ *            through the remaining two arguments.
+ *            
+ * Args:      (*fdf)() - ptr to function that returns f(x) and f'(x)
+ *            params   - ptr to parameters to be passed to (*fdf)()
+ *
+ * Returns:   pointer to a new <ESL_ROOTFINDER> structure.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_ROOTFINDER *
+esl_rootfinder_CreateFDF(int (*fdf)(double, void*, double*, double*), void *params)
+{
+  int status;
+  ESL_ROOTFINDER *R = NULL;
+
+  ESL_ALLOC(R, sizeof(ESL_ROOTFINDER));
+  R->func          = NULL;
+  R->fdf           = fdf;
+  R->params        = params;
+  R->xl            = -eslINFINITY;
+  R->fl            = 0.;	/* unused */
+  R->xr            = eslINFINITY;
+  R->fr            = 0.;	/* unused */
+  R->x0            = 0.;	
+  R->f0            = 0.;	
+  R->x             = 0.;	/* not set yet */
+  R->fx            = 0.;	/* not set yet */
+  R->dfx           = 0.;	/* not set yet */
+  R->iter          = 0;
+  R->abs_tolerance = 1e-15;
+  R->rel_tolerance = 1e-15;
+  R->residual_tol  = 0.;
+  R->max_iter      = 100; 
+  return R;
+
+ ERROR:
+  esl_rootfinder_Destroy(R);
+  return NULL;
+}
+
+/* Function:  esl_rootfinder_SetBrackets()
+ * Incept:    SRE, Wed Apr 11 08:35:10 2007 [Janelia]
+ *
+ * Purpose:   Declare that a root is in the open interval 
+ *            <(xl..xr)>. 
+ *            
+ *            The function will be evaluated at both points.
+ *
+ * Args:      R      - rootfinder structure
+ *            xl,xr  - root lies in open interval (xl..xr)
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <xl,xr> cannot bracket a root,
+ *            because $f(x_l)$ and $f(x_r)$ do not have opposite
+ *            signs.
+ *            
+ *            Additionally, if either evaluation fails in the
+ *            caller-provided function, the error code from that
+ *            failure will be thrown.
+ */
+int
+esl_rootfinder_SetBrackets(ESL_ROOTFINDER *R, double xl, double xr)
+{
+  int status;
+  double dfx;
+
+  R->xl = xl;
+  R->xr = xr;
+  if (R->func != NULL) {
+    if ((status = (*R->func)(R->xl, R->params, &(R->fl)))       != eslOK) return status;
+    if ((status = (*R->func)(R->xr, R->params, &(R->fr)))       != eslOK) return status;
+  } else {
+    if ((status = (*R->fdf) (R->xl, R->params, &(R->fl), &dfx)) != eslOK) return status;
+    if ((status = (*R->fdf) (R->xr, R->params, &(R->fr), &dfx)) != eslOK) return status;
+  }
+  if (R->fl * R->fr >= 0) ESL_EXCEPTION(eslEINVAL, "xl,xr do not bracket a root");
+  return eslOK;
+}
+
+int
+esl_rootfinder_SetAbsoluteTolerance(ESL_ROOTFINDER *R, double tol)
+{
+  R->abs_tolerance = tol;
+  return eslOK;
+}
+
+int
+esl_rootfinder_SetRelativeTolerance(ESL_ROOTFINDER *R, double tol)
+{
+  R->rel_tolerance = tol;
+  return eslOK;
+}
+
+int
+esl_rootfinder_SetResidualTolerance(ESL_ROOTFINDER *R, double tol)
+{
+  R->residual_tol = tol;
+  return eslOK;
+}
+
+int
+esl_rootfinder_SetMaxIterations(ESL_ROOTFINDER *R, int maxiter)
+{
+  R->max_iter = maxiter;
+  return eslOK;
+}
+
+
+void
+esl_rootfinder_Destroy(ESL_ROOTFINDER *R)
+{
+  if (R == NULL) return;
+  free(R);
+}
+
+
+/*****************************************************************
+ * 2. One-dimensional root finding.
+ *****************************************************************/
+
+/* Function:  esl_root_Bisection()
+ * Synopsis:  Find a root of $f(x)$ by bisection method.
+ * Incept:    SRE, Wed Apr 11 08:40:11 2007 [Janelia]
+ *
+ * Purpose:   Find a root in the open interval <xl..xr> by the bisection method,
+ *            and return it in <ret_x>. 
+ *            
+ *            The bisection method is guaranteed to succeed, provided
+ *            that <xl>,<xr> do indeed bracket a root, though it may
+ *            be slow.
+ *            
+ *            The rootfinder <R> can be created either by
+ *            <esl_rootfinder_Create()> or
+ *            <esl_rootfinder_CreateFDF()>; if the latter (if the
+ *            function in the rootfinder <R> includes derivative
+ *            information), the bisection method will just ignore
+ *            the derivative. 
+ *
+ * Args:      R      - a rootfinder object for the function
+ *            xl,xr  - bounds of an open interval in which a root lies
+ *            ret_x  - RETURN: a root that satisfies $f(x) = 0$.
+ *
+ * Returns:   <eslOK> on success, and <ret_x> points to a root.
+ *
+ * Throws:    <eslEINVAL> if <xl,xr> do not bracket a root. 
+ *            <eslENOHALT> if the method exceeds the maximum number of
+ *            iterations set in <R>. 
+ *
+ *            Additionally, any failure code that the caller-provided
+ *            function $f(x)$ throws.
+ */
+int
+esl_root_Bisection(ESL_ROOTFINDER *R, double xl, double xr, double *ret_x)
+{
+  int    status;
+  double xmag;
+
+  if ((status = esl_rootfinder_SetBrackets(R, xl, xr)) != eslOK) goto ERROR;
+
+  while (1) {
+    R->iter++;
+    if (R->iter > R->max_iter) ESL_XEXCEPTION(eslENOHALT, "failed to converge in Bisection");
+
+    /* Bisect and evaluate the function */
+    R->x  = (R->xl+R->xr)/2.; 	          
+    if (R->func != NULL) {
+      if ((status = (*R->func)(R->x, R->params, &(R->fx)))            != eslOK) ESL_XEXCEPTION(status, "user-provided function failed");
+    } else {
+      if ((status = (*R->fdf) (R->x, R->params, &(R->fx), &(R->dfx))) != eslOK) ESL_XEXCEPTION(status, "user-provided function failed");
+    }
+
+    /* Test for convergence */
+    xmag = (R->xl < 0. && R->xr > 0.) ?  0. : R->x;
+    if (R->fx == 0.) break;	/* an exact root, lucky */
+    if (((R->xr-R->xl)  <  R->abs_tolerance + R->rel_tolerance*xmag) || fabs(R->fx) < R->residual_tol) break;
+
+    /* Narrow the bracket; pay attention to directionality */
+    if (R->fl > 0.) {
+      if   (R->fx > 0.) { R->xl = R->x; R->fl = R->fx; }
+      else              { R->xr = R->x; R->fr = R->fx; }
+    } else {
+      if   (R->fx < 0.) { R->xl = R->x; R->fl = R->fx; }
+      else              { R->xr = R->x; R->fr = R->fx; }      
+    }
+  }
+  
+  *ret_x = R->x;
+  return eslOK;
+
+ ERROR:
+  *ret_x = 0.0;
+  return status;
+}
+
+
+/* Function:  esl_root_NewtonRaphson()
+ * Synopsis:  Find a root of $f(x)$ by Newton/Raphson method.
+ * Incept:    SRE, Wed Apr 11 08:56:28 2007 [Janelia]
+ *
+ * Purpose:   Find a root by the Newton/Raphson method, starting from
+ *            an initial guess <guess>. Return the root in <ret_x>.
+ *            
+ *            The Newton/Raphson method is not guaranteed to succeed,
+ *            but when it does, it is much faster than bisection.
+ *            
+ *            Newton/Raphson uses first derivative information, so the
+ *            rootfinder <R> must be created with
+ *            <esl_rootfinder_CreateFDF()> for a function that evaluates
+ *            both $f(x)$ and $f'(x)$.
+ *            
+ * Args:      R     - a rootfinder object for $f(x)$ and $f'(x)$
+ *            guess - an initial guess for the root
+ *            ret_x - RETURN: a root that satisfies $f(x) = 0$.
+ *
+ * Returns:   <eslOK> on success, and <ret_x> points to a root.
+ *
+ * Throws:    <eslENOHALT> if the method exceeds the maximum number of
+ *            iterations set in <R>. 
+ *
+ *            Additionally, any failure code that the caller-provided
+ *            function $f(x)$ throws.
+ */
+int
+esl_root_NewtonRaphson(ESL_ROOTFINDER *R, double guess, double *ret_x)
+{
+  int status;
+
+  R->x = guess;
+  if ((status  = (*R->fdf)(R->x, R->params, &(R->fx), &(R->dfx))) != eslOK) return status;
+
+  while (1) {
+    R->iter++;
+    if (R->iter > R->max_iter) ESL_EXCEPTION(eslENOHALT, "failed to converge in Newton");
+
+    /* printf("current: x=%20g   f(x) = %20g   f'(x) = %20g\n", R->x, R->fx, R->dfx); */
+
+    /* Take a Newton/Raphson step. */
+    R->x0  = R->x;
+    R->f0  = R->fx;
+    R->x   = R->x - R->fx / R->dfx;
+    (*R->fdf)(R->x, R->params, &(R->fx), &(R->dfx));  
+
+    /* Test for convergence. */
+    if (R->fx == 0) break;	/* an exact root, lucky */
+    if ( (fabs(R->x - R->x0) < R->abs_tolerance + R->rel_tolerance*R->x) || fabs(R->fx) < R->residual_tol) break;
+  }
+
+  *ret_x = R->x;
+  return eslOK;
+}
+
+
+
+
+/*****************************************************************
+ * 3. Unit tests.
+ *****************************************************************/
+#ifdef eslROOTFINDER_TESTDRIVE
+/* For the unit tests, we'll use a quadratic function
+ *   f(x)  = ax^2 + bx + c = 0
+ *   f'(x) = 2ax + b
+ * where it's easy to set up known roots.
+ */  
+struct polyparams { double a,b,c; };
+
+static int quadratic_f(double x, void *params, double *ret_fx)
+{
+  struct polyparams *p = (struct polyparams *) params;
+  *ret_fx = (p->a * x * x + p->b * x + p->c);
+  return eslOK;
+}
+
+static int quadratic_fdf(double x, void *params, double *ret_fx, double *ret_dfx)
+{
+  struct polyparams *p = (struct polyparams *) params;
+  
+  *ret_fx  = (p->a * x * x + p->b * x + p->c);
+  *ret_dfx =  (2 * p->a) * x + p->b;
+  return eslOK;
+}
+
+static void
+utest_Bisection(void)
+{
+  char            msg[] = "esl_rootfinder:: bisection unit test failed";
+  ESL_ROOTFINDER *R = NULL;
+  struct polyparams p;
+  double x;
+
+  /* (5x-1)(x+2) = 5x^2 + 9x - 2 with roots 0.2, -2 */
+  p.a = 5.;
+  p.b = 9.;
+  p.c = -2.;
+
+   /* find the positive root, 0.2 */
+  if (( R = esl_rootfinder_Create(quadratic_f, &p) ) == NULL)  esl_fatal(msg);
+  if (  esl_root_Bisection(R, 0., 100., &x)          != eslOK) esl_fatal(msg);
+  if (  fabs(x-0.2) > R->abs_tolerance)                        esl_fatal(msg);
+  esl_rootfinder_Destroy(R);
+
+  /* find the negative root, -2.0 */
+  if (( R = esl_rootfinder_CreateFDF(quadratic_fdf, &p) ) == NULL)  esl_fatal(msg);
+  if (  esl_root_Bisection(R, -100., 0., &x)              != eslOK) esl_fatal(msg);
+  if (  fabs(x+2.) > R->abs_tolerance)                              esl_fatal(msg);
+  esl_rootfinder_Destroy(R);
+}
+
+
+static void
+utest_Newton(void)
+{
+  ESL_ROOTFINDER *R = NULL;
+  struct polyparams p;
+  double x;
+
+  /* (5x-1)(x+2) = 5x^2 + 9x - 2 with roots 0.2, -2 */
+  p.a = 5.;
+  p.b = 9.;
+  p.c = -2.;
+
+  R = esl_rootfinder_CreateFDF(quadratic_fdf, &p);
+  esl_root_NewtonRaphson(R, 1., &x); /* find the positive root, 0.2 */
+  if (fabs(x-0.2) > R->abs_tolerance) esl_fatal("didn't find root 0.2");
+  esl_rootfinder_Destroy(R);
+
+  R = esl_rootfinder_CreateFDF(quadratic_fdf, &p);
+  esl_root_NewtonRaphson(R, -3., &x); /* find the negative root, -2.0 */
+  if (fabs(x+2.) > R->abs_tolerance) esl_fatal("didn't find root -2");
+  esl_rootfinder_Destroy(R);
+}
+
+#endif /*eslROOTFINDER_TESTDRIVE*/
+
+
+/*****************************************************************
+ * 4. Test driver.
+ *****************************************************************/
+/* 
+   gcc -g -Wall -I. -L. -DeslROOTFINDER_TESTDRIVE -o test esl_rootfinder.c -leasel -lm
+   ./test
+ */
+#ifdef eslROOTFINDER_TESTDRIVE
+
+int
+main(int argc, char **argv)
+{
+  utest_Bisection();
+  utest_Newton();
+
+  return eslOK;
+}
+
+#endif /*eslROOTFINDER_TESTDRIVE*/
+
+/*****************************************************************
+ * 5. Examples.
+ *****************************************************************/
+
+/* An example of bisection.
+ *   gcc -g -Wall -o example -I. -DeslROOTFINDER_EXAMPLE esl_rootfinder.c easel.c -lm
+ */
+#ifdef eslROOTFINDER_EXAMPLE
+/*::cexcerpt::rootfinder_example::begin::*/
+#include "easel.h"
+#include "esl_rootfinder.h"
+
+struct polyparams { double a,b,c; };
+
+int quadratic_f(double x, void *params, double *ret_fx)
+{
+  struct polyparams *p = (struct polyparams *) params;
+  *ret_fx = (p->a * x * x + p->b * x + p->c);
+  return eslOK;
+}
+
+int main(void)
+{
+  ESL_ROOTFINDER *R = NULL;
+  struct polyparams p;
+  double x, fx;
+
+  p.a = 5.;
+  p.b = 2.;
+  p.c = -1.;
+
+  R = esl_rootfinder_Create(quadratic_f, &p);
+  esl_root_Bisection(R, 0., 100., &x);
+
+  quadratic_f(x, &p, &fx);
+  printf("Find an x such that f(x) = %.0fx^2 + %.0fx + %.0f = 0 ...\n", p.a, p.b, p.c);
+  printf("x = %f (f(x) = %f)\n", x, fx);
+
+  esl_rootfinder_Destroy(R);
+  return 0;
+}
+/*::cexcerpt::rootfinder_example::end::*/
+#endif /*eslROOTFINDER_EXAMPLE*/
+
+
+/* An example of Newton/Raphson.
+ *   gcc -g -Wall -o example -I. -DeslROOTFINDER_EXAMPLE2 esl_rootfinder.c easel.c -lm
+ */
+#ifdef eslROOTFINDER_EXAMPLE2
+/*::cexcerpt::rootfinder_example2::begin::*/
+#include "easel.h"
+#include "esl_rootfinder.h"
+
+struct polyparams { double a,b,c; };
+
+int quadratic_fdf(double x, void *params, double *ret_fx, double *ret_dfx)
+{
+  struct polyparams *p = (struct polyparams *) params;
+  
+  *ret_fx  = (p->a * x * x + p->b * x + p->c);
+  *ret_dfx =  (2 * p->a) * x + p->b;
+  return eslOK;
+}
+
+int main(void)
+{
+  ESL_ROOTFINDER *R = NULL;
+  struct polyparams p;
+  double x;
+
+  p.a = 5.;
+  p.b = 2.;
+  p.c = -1.;
+
+  R = esl_rootfinder_CreateFDF(quadratic_fdf, &p);
+  esl_root_NewtonRaphson(R, -1., &x);
+
+  printf("Find an x such that f(x) = %.0fx^2 + %.0fx + %.0f = 0 ...\n", p.a, p.b, p.c);
+  printf("x = %f\n", x);
+
+  esl_rootfinder_Destroy(R);
+  return 0;
+}
+/*::cexcerpt::rootfinder_example2::end::*/
+#endif /*eslROOTFINDER_EXAMPLE2*/
+
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_rootfinder.h b/esl_rootfinder.h
new file mode 100644
index 0000000..6a31880
--- /dev/null
+++ b/esl_rootfinder.h
@@ -0,0 +1,54 @@
+/* Finding roots of functions.
+ * 
+ * SRE, Fri Apr  6 10:01:43 2007 [Janelia]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef ESL_ROOTFINDER_INCLUDED
+#define ESL_ROOTFINDER_INCLUDED
+
+#include "esl_config.h"
+
+typedef struct {
+  int   (*func)(double, void*, double*);
+  int   (*fdf) (double, void*, double*, double*);
+  void   *params;
+
+  double xl;
+  double fl;
+  double xr;
+  double fr;
+
+  double x0;
+  double f0;
+
+  double x;
+  double fx;
+  double dfx;
+  int    iter;
+
+  double abs_tolerance;
+  double rel_tolerance;
+  double residual_tol;
+  int    max_iter;
+} ESL_ROOTFINDER;
+
+
+extern ESL_ROOTFINDER *esl_rootfinder_Create   (int (*func)(double, void*, double*),          void *params);
+extern ESL_ROOTFINDER *esl_rootfinder_CreateFDF(int (*fdf) (double, void*, double*, double*), void *params);
+
+extern int esl_rootfinder_SetBrackets(ESL_ROOTFINDER *R, double xl, double xr);
+extern int esl_rootfinder_SetAbsoluteTolerance(ESL_ROOTFINDER *R, double tol);
+extern int esl_rootfinder_SetRelativeTolerance(ESL_ROOTFINDER *R, double tol);
+extern int esl_rootfinder_SetResidualTolerance(ESL_ROOTFINDER *R, double tol);
+extern int esl_rootfinder_SetMaxIterations(ESL_ROOTFINDER *R, int maxiter);
+extern void esl_rootfinder_Destroy(ESL_ROOTFINDER *R);
+
+extern int esl_root_Bisection(ESL_ROOTFINDER *R, double xl, double xr, double *ret_x);
+extern int esl_root_NewtonRaphson(ESL_ROOTFINDER *R, double guess, double *ret_x);
+
+
+#endif /*eslROOTFINDER_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_rootfinder.tex b/esl_rootfinder.tex
new file mode 100644
index 0000000..28b0aec
--- /dev/null
+++ b/esl_rootfinder.tex
@@ -0,0 +1,43 @@
+
+
+
+\subsection{Example of using the rootfinder API}
+
+To use the bisection method, you provide a function that computes
+$f(x)$, and you provide an initial bracket $(x_L..x_R)$ in which the
+root is known to lie.  An example of using the bisection method to
+compute a root of the quadratic function $ax^2 + bx + c = 0$ for
+$a=5$, $b=2$ and $c=-1$ (note that this function has two roots, one
+$<0$ and one $>0$; the bracket $0..100$ makes the example find only
+the positive root):
+
+\input{cexcerpts/rootfinder_example}
+
+
+To use the Newton/Raphson method, you provide a function that computes
+$f(x)$ and its first derivative $df(x)/dx$, and you provide an initial
+guess for the root $x$. An example of using the Newton/Raphson method
+to compute the root of the same function above (which has a derivative
+$df(x)/dx = 2ax + b$) is:
+
+\input{cexcerpts/rootfinder_example2}
+
+In this example, because the initial guess was negative, the other
+root gets found.
+
+Currently, just these two rootfinding algorithms are implemented.  The
+bisection method does not require derivative information, and it
+requires the caller to provide an interval $(x_L..x_R)$ in which the
+root lies ($f(x_L)$ and $f(x_R)$ have opposite signs). Newton/Raphson
+uses derivative information, and it only needs an initial guess for
+$x$, not an interval. Thus there are two different \ccode{\_Create*()}
+routines, \ccode{esl\_rootfinder\_CreateBracketer()} for initializing
+a bisection method, and \ccode{esl\_rootfinder\_CreatePolisher()} for
+initializing a Newton/Raphson method. The reason for the more general
+names (\ccode{CreateBracketer()} and \ccode{CreatePolisher()} is that
+I expect other rootfinding algorithms (if we ever implement any) will
+group similarly: bracketing methods without derivative information,
+and ``polishing'' methods that use derivative information. But this
+may be misguided, and may change in the future.
+
+
diff --git a/esl_scorematrix.c b/esl_scorematrix.c
new file mode 100644
index 0000000..f833444
--- /dev/null
+++ b/esl_scorematrix.c
@@ -0,0 +1,2299 @@
+/* Routines for manipulating sequence alignment score matrices,
+ * such as the BLOSUM and PAM matrices.
+ * 
+ * Contents:
+ *   1. The ESL_SCOREMATRIX object.
+ *   2. Some classic score matrices.
+ *   3. Deriving a score matrix probabilistically.
+ *   4. Reading/writing matrices from/to files.
+ *   5. Implicit probabilistic basis, I:  given bg.
+ *   6. Implicit probabilistic basis, II: bg unknown. [Yu/Altschul03,05]
+ *   7. Experiment driver.
+ *   8  Utility programs.
+ *   9. Unit tests.
+ *  10. Test driver.
+ *  11. Example program.
+ *  12. License and copyright.
+ */
+#include "esl_config.h"
+
+#include <string.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_composition.h"
+#include "esl_dmatrix.h"
+#include "esl_fileparser.h"
+#include "esl_rootfinder.h"
+#include "esl_ratematrix.h"
+#include "esl_scorematrix.h"
+#include "esl_vectorops.h"
+
+
+/*****************************************************************
+ *# 1. The ESL_SCOREMATRIX object
+ *****************************************************************/
+
+/* Function:  esl_scorematrix_Create()
+ * Synopsis:  Allocate and initialize an <ESL_SCOREMATRIX> object.
+ *
+ * Purpose:   Allocates a score matrix for alphabet <abc>, initializes
+ *            all scores to zero.
+ *
+ * Args:      abc   - pointer to digital alphabet 
+ *
+ * Returns:   a pointer to the new object.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_SCOREMATRIX *
+esl_scorematrix_Create(const ESL_ALPHABET *abc)
+{
+  ESL_SCOREMATRIX *S = NULL;
+  int status;
+  int i;
+
+  ESL_ALLOC(S, sizeof(ESL_SCOREMATRIX));
+  S->s          = NULL;
+  S->K          = abc->K;
+  S->Kp         = abc->Kp;
+  S->isval      = NULL;
+  S->abc_r      = abc;
+  S->nc         = 0;
+  S->outorder   = NULL;
+  S->name       = NULL;
+  S->path       = NULL;
+
+  ESL_ALLOC(S->s, sizeof(int *) * abc->Kp);
+  S->s[0] = NULL;
+  ESL_ALLOC(S->isval, sizeof(char) * abc->Kp);
+  for (i = 0; i < abc->Kp; i++) S->isval[i] = FALSE;
+  ESL_ALLOC(S->outorder, sizeof(char) * (abc->Kp+1));
+  S->outorder[0] = '\0';		/* init to empty string. */
+
+  ESL_ALLOC(S->s[0], sizeof(int) * abc->Kp * abc->Kp);
+  for (i = 1; i < abc->Kp; i++) S->s[i] = S->s[0] + abc->Kp * i;
+
+  for (i = 0; i < abc->Kp*abc->Kp; i++) S->s[0][i] = 0;
+  return S;
+
+ ERROR:
+  esl_scorematrix_Destroy(S);
+  return NULL;
+}
+
+
+
+/* Function:  esl_scorematrix_Copy()
+ * Synopsis:  Copy <src> matrix to <dest>.
+ *
+ * Purpose:   Copy <src> score matrix into <dest>. Caller
+ *            has allocated <dest> for the same alphabet as
+ *            <src>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINCOMPAT> if <dest> isn't allocated for
+ *            the same alphabet as <src>.
+ *            <eslEMEM> on allocation error.
+ */
+int
+esl_scorematrix_Copy(const ESL_SCOREMATRIX *src, ESL_SCOREMATRIX *dest)
+{
+  int i,j;
+  int status;
+
+  if (src->abc_r->type != dest->abc_r->type || src->K != dest->K || src->Kp != dest->Kp)
+    ESL_EXCEPTION(eslEINCOMPAT, "source and dest score matrix types don't match");
+
+  for (i = 0; i < src->Kp; i++)
+    for (j = 0; j < src->Kp; j++)
+      dest->s[i][j] = src->s[i][j];
+  for (i = 0; i < src->Kp; i++)
+    dest->isval[i] = src->isval[i];
+  dest->nc = src->nc;
+  for (i = 0; i < src->nc; i++)
+    dest->outorder[i] = src->outorder[i];
+  dest->outorder[dest->nc] = '\0';
+
+  if ((status = esl_strdup(src->name, -1, &(dest->name))) != eslOK) return status;
+  if ((status = esl_strdup(src->path, -1, &(dest->path))) != eslOK) return status;
+  return eslOK;
+}
+
+/* Function:  esl_scorematrix_Clone()
+ * Synopsis:  Allocate a duplicate of a matrix. 
+ *
+ * Purpose:   Allocates a new matrix and makes it a duplicate
+ *            of <S>. Return a pointer to the new matrix.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_SCOREMATRIX *
+esl_scorematrix_Clone(const ESL_SCOREMATRIX *S)
+{
+  ESL_SCOREMATRIX *dup = NULL;
+
+  if ((dup = esl_scorematrix_Create(S->abc_r)) == NULL)  return NULL;
+  if (esl_scorematrix_Copy(S, dup)             != eslOK) { esl_scorematrix_Destroy(dup); return NULL; }
+  return dup;
+}
+
+
+/* Function:  esl_scorematrix_Compare()
+ * Synopsis:  Compare two matrices for equality.
+ *
+ * Purpose:   Compares two score matrices. Returns <eslOK> if they 
+ *            are identical, <eslFAIL> if they differ. Every aspect
+ *            of the two matrices is compared.
+ *            
+ *            The annotation (name, filename path) are not
+ *            compared; we may want to compare an internally
+ *            generated scorematrix to one read from a file.
+ */
+int
+esl_scorematrix_Compare(const ESL_SCOREMATRIX *S1, const ESL_SCOREMATRIX *S2)
+{
+  int a,b;
+
+  if (strcmp(S1->outorder, S2->outorder) != 0) return eslFAIL;
+  if (S1->nc         != S2->nc)                return eslFAIL;
+  
+  for (a = 0; a < S1->nc; a++)
+    if (S1->isval[a] != S2->isval[a])          return eslFAIL;
+  
+  for (a = 0; a < S1->Kp; a++)
+    for (b = 0; b < S1->Kp; b++)
+      if (S1->s[a][b] != S2->s[a][b]) return eslFAIL;
+
+  return eslOK;
+}
+
+/* Function:  esl_scorematrix_CompareCanon()
+ * Synopsis:  Compares scores of canonical residues for equality.
+ *
+ * Purpose:   Compares the scores of canonical residues in 
+ *            two score matrices <S1> and <S2> for equality.
+ *            Returns <eslOK> if they are identical, <eslFAIL> 
+ *            if they differ. Peripheral aspects of the scoring matrices
+ *            having to do with noncanonical residues, output
+ *            order, and suchlike are ignored.
+ */
+int
+esl_scorematrix_CompareCanon(const ESL_SCOREMATRIX *S1, const ESL_SCOREMATRIX *S2)
+{
+  int a,b;
+
+  for (a = 0; a < S1->K; a++)
+    for (b = 0; b < S1->K; b++)
+      if (S1->s[a][b] != S2->s[a][b]) return eslFAIL;
+  return eslOK;
+}
+
+
+
+/* Function:  esl_scorematrix_Max()
+ * Synopsis:  Returns maximum value in score matrix.
+ *
+ * Purpose:   Returns the maximum value in score matrix <S>.
+ */
+int
+esl_scorematrix_Max(const ESL_SCOREMATRIX *S)
+{
+  int i,j;
+  int max = S->s[0][0];
+
+  for (i = 0; i < S->K; i++)
+    for (j = 0; j < S->K; j++)
+      if (S->s[i][j] > max) max = S->s[i][j];
+  return max;
+}
+
+/* Function:  esl_scorematrix_Min()
+ * Synopsis:  Returns minimum value in score matrix.
+ *
+ * Purpose:   Returns the minimum value in score matrix <S>.
+ */
+int
+esl_scorematrix_Min(const ESL_SCOREMATRIX *S)
+{
+  int i,j;
+  int min = S->s[0][0];
+
+  for (i = 0; i < S->K; i++)
+    for (j = 0; j < S->K; j++)
+      if (S->s[i][j] < min) min = S->s[i][j];
+  return min;
+}
+
+
+/* Function:  esl_scorematrix_IsSymmetric()
+ * Synopsis:  Returns <TRUE> for symmetric matrix.
+ *
+ * Purpose:   Returns <TRUE> if matrix <S> is symmetric,
+ *            or <FALSE> if it's not.
+ */
+int
+esl_scorematrix_IsSymmetric(const ESL_SCOREMATRIX *S)
+{
+  int i,j;
+
+  for (i = 0; i < S->K; i++)
+    for (j = i; j < S->K; j++)
+      if (S->s[i][j] != S->s[j][i]) return FALSE;
+  return TRUE;
+}
+
+/* Function:  esl_scorematrix_ExpectedScore()
+ * Synopsis:  Calculates the expected score of a matrix.
+ *
+ * Purpose:   Calculates the expected score of a matrix <S>,
+ *            given background frequencies <fi> and <fj>;
+ *            return it in <*ret_E>.
+ *            
+ *            The expected score is defined as
+ *            $\sum_{ab} f_a f_b \sigma_{ab}$.
+ *            
+ *            The expected score is in whatever units the score matrix
+ *            <S> is in. If you know $\lambda$, you can convert it to
+ *            units of bits ($\log 2$) by multiplying it by $\lambda /
+ *            \log 2$.
+ *
+ * Args:      S      - score matrix
+ *            fi     - background frequencies $f_i$ (0..K-1)
+ *            fj     - background frequencies $f_j$ (0..K-1)
+ *            ret_E  - RETURN: expected score
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_scorematrix_ExpectedScore(ESL_SCOREMATRIX *S, double *fi, double *fj, double *ret_E)
+{
+  double E = 0.;
+  int    a,b;
+
+  for (a = 0; a < S->K; a++)
+    for (b = 0; b < S->K; b++)
+      E += fi[a] * fj[b] * (double) S->s[a][b];
+
+  *ret_E = E;
+  return eslOK;
+}
+
+
+/* Function:  esl_scorematrix_RelEntropy()
+ * Synopsis:  Calculates relative entropy of a matrix.
+ *
+ * Purpose:   Calculates the relative entropy of score matrix <S> in
+ *            bits, given its background distributions <fi> and <fj> and
+ *            its scale <lambda>.
+ *            
+ *            The relative entropy is defined as $\sum_{ab} p_{ab}
+ *            \log_2 \frac{p_{ab}} {f_a f_b}$, the average score (in
+ *            bits) of homologous aligned sequences. In general it is
+ *            $\geq 0$ (and certainly so in the case when background
+ *            frequencies $f_a$ and $f_b$ are the marginals of the
+ *            $p_{ab}$ joint ptobabilities).
+ *
+ * Args:      S          - score matrix
+ *            fi         - background freqs for sequence i
+ *            fj         - background freqs for sequence j
+ *            lambda     - scale factor $\lambda$ for <S>
+ *            ret_D      - RETURN: relative entropy.
+ * 
+ * Returns:   <eslOK> on success, and <ret_D> contains the relative
+ *            entropy.
+ *
+ * Throws:    <eslEMEM> on allocation error. 
+ *            <eslEINVAL> if the implied $p_{ij}$'s don't sum to one,
+ *            probably indicating that <lambda> was not the correct
+ *            <lambda> for <S>, <fi>, and <fj>.
+ *            In either exception, <ret_D> is returned as 0.0.
+ */
+int
+esl_scorematrix_RelEntropy(const ESL_SCOREMATRIX *S, const double *fi, const double *fj, double lambda, double *ret_D)
+{
+  int    status;
+  double pij;
+  double sum = 0.;
+  int    i,j;
+  double D = 0;
+
+  for (i = 0; i < S->K; i++)
+    for (j = 0; j < S->K; j++)
+      {
+	pij  = fi[i] * fj[j] * exp(lambda * (double) S->s[i][j]);
+	sum += pij;
+	if (pij > 0.) D += pij * log(pij / (fi[i] * fj[j]));
+	
+      }
+  if (esl_DCompare(sum, 1.0, 1e-3) != eslOK) 
+    ESL_XEXCEPTION(eslEINVAL, "pij's don't sum to one (%.4f): bad lambda or bad bg?", sum);
+
+  D /= eslCONST_LOG2;
+  *ret_D = D;
+  return eslOK;
+
+ ERROR:
+  *ret_D = 0.;
+  return status;
+}
+
+
+/* Function:  esl_scorematrix_JointToConditionalOnQuery()
+ * Synopsis:  Convert a joint probability matrix to conditional probs P(b|a)
+ *
+ * Purpose:   Given a joint probability matrix <P> that has been calculated
+ *            by <esl_scorematrix_ProbifyGivenBG()> or <esl_scorematrix_Probify()>
+ *            (or one that obeys the same conditions; see below), 
+ *            convert the joint probabilities <P(a,b)> to conditional 
+ *            probabilities <P(b | a)>, where <b> is a residue in the target,
+ *            and <a> is a residue in the query.
+ *            
+ *            $P(b \mid a) = P(ab) / P(a)$, where $P(a) = \sum_b P(ab)$.
+ *            
+ *            The value stored in <P->mx[a][b]> is $P(b \mid a)$.
+ *
+ *            All values in <P> involving the codes for gap,
+ *            nonresidue, and missing data (codes <K>,<Kp-2>, and
+ *            <Kp-1>) are 0.0, not probabilities. Only rows/columns
+ *            <i=0..K,K+1..Kp-3> are valid probability vectors.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ *
+ * Xref:      J9/87.
+ */
+int
+esl_scorematrix_JointToConditionalOnQuery(const ESL_ALPHABET *abc, ESL_DMATRIX *P)
+{
+  int a,b;
+
+  /* P(b|a) = P(ab) / P(a) 
+   * and P(a) = P(a,X), the value at [a][Kp-3] 
+   */
+  for (a = 0; a < abc->Kp-2; a++)
+    for (b = 0; b < abc->Kp-2; b++)
+      P->mx[a][b] = (P->mx[a][abc->Kp-3] == 0.0 ? 0.0 : P->mx[a][b] / P->mx[a][abc->Kp-3]);
+  return eslOK;
+}
+
+
+
+/* Function:  esl_scorematrix_Destroy()
+ * Synopsis:  Frees a matrix.
+ *
+ * Purpose:   Frees a score matrix.
+ */
+void
+esl_scorematrix_Destroy(ESL_SCOREMATRIX *S)
+{
+  if (S == NULL) return;
+  if (S->s != NULL) {
+    if (S->s[0] != NULL) free(S->s[0]);
+    free(S->s);
+  }
+  if (S->isval    != NULL) free(S->isval);
+  if (S->outorder != NULL) free(S->outorder);
+  if (S->name     != NULL) free(S->name);
+  if (S->path     != NULL) free(S->path);
+  free(S);
+  return;
+}
+
+
+/*------------------- end, scorematrix object -------------------*/
+
+
+
+
+/*****************************************************************
+ *# 2. Some classic score matrices.
+ *****************************************************************/
+/* PAM30, PAM70, PAM120, PAM240, BLOSUM45, BLOSUM50, BLOSUM62, BLOSUM80, BLOSUM90 */
+/* Standard matrices are reformatted to Easel static data by the UTILITY1 program; see below */
+
+/* TODO: Instead of storing the classical low-precision versions of
+ * these, we should recalculate each one from its original
+ * probabilistic basis, and store it at higher integer precision,
+ * allowing the Yu/Altschul procedure to work. If we do that, we might also store
+ * lambda and background probabilities.
+ */
+
+#define eslAADIM 29
+
+struct esl_scorematrix_aa_preload_s {
+  char *name;
+  int   matrix[eslAADIM][eslAADIM];
+};
+
+static const struct esl_scorematrix_aa_preload_s ESL_SCOREMATRIX_AA_PRELOADS[] = {
+  { "PAM30", {
+    /*  A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    -    B    J    Z    O    U    X    *    ~           */
+    {   6,  -6,  -3,  -2,  -8,  -2,  -7,  -5,  -7,  -6,  -5,  -4,  -2,  -4,  -7,   0,  -1,  -2, -13,  -8,   0,  -3,   0,  -3,   0,   0,  -3, -17,   0,  }, /* A */
+    {  -6,  10, -14, -14, -13,  -9,  -7,  -6, -14, -15, -13, -11,  -8, -14,  -8,  -3,  -8,  -6, -15,  -4,   0, -12,   0, -14,   0,   0,  -9, -17,   0,  }, /* C */
+    {  -3, -14,   8,   2, -15,  -3,  -4,  -7,  -4, -12, -11,   2,  -8,  -2, -10,  -4,  -5,  -8, -15, -11,   0,   6,   0,   1,   0,   0,  -5, -17,   0,  }, /* D */
+    {  -2, -14,   2,   8, -14,  -4,  -5,  -5,  -4,  -9,  -7,  -2,  -5,   1,  -9,  -4,  -6,  -6, -17,  -8,   0,   1,   0,   6,   0,   0,  -5, -17,   0,  }, /* E */
+    {  -8, -13, -15, -14,   9,  -9,  -6,  -2, -14,  -3,  -4,  -9, -10, -13,  -9,  -6,  -9,  -8,  -4,   2,   0, -10,   0, -13,   0,   0,  -8, -17,   0,  }, /* F */
+    {  -2,  -9,  -3,  -4,  -9,   6,  -9, -11,  -7, -10,  -8,  -3,  -6,  -7,  -9,  -2,  -6,  -5, -15, -14,   0,  -3,   0,  -5,   0,   0,  -5, -17,   0,  }, /* G */
+    {  -7,  -7,  -4,  -5,  -6,  -9,   9,  -9,  -6,  -6, -10,   0,  -4,   1,  -2,  -6,  -7,  -6,  -7,  -3,   0,  -1,   0,  -1,   0,   0,  -5, -17,   0,  }, /* H */
+    {  -5,  -6,  -7,  -5,  -2, -11,  -9,   8,  -6,  -1,  -1,  -5,  -8,  -8,  -5,  -7,  -2,   2, -14,  -6,   0,  -6,   0,  -6,   0,   0,  -5, -17,   0,  }, /* I */
+    {  -7, -14,  -4,  -4, -14,  -7,  -6,  -6,   7,  -8,  -2,  -1,  -6,  -3,   0,  -4,  -3,  -9, -12,  -9,   0,  -2,   0,  -4,   0,   0,  -5, -17,   0,  }, /* K */
+    {  -6, -15, -12,  -9,  -3, -10,  -6,  -1,  -8,   7,   1,  -7,  -7,  -5,  -8,  -8,  -7,  -2,  -6,  -7,   0,  -9,   0,  -7,   0,   0,  -6, -17,   0,  }, /* L */
+    {  -5, -13, -11,  -7,  -4,  -8, -10,  -1,  -2,   1,  11,  -9,  -8,  -4,  -4,  -5,  -4,  -1, -13, -11,   0, -10,   0,  -5,   0,   0,  -5, -17,   0,  }, /* M */
+    {  -4, -11,   2,  -2,  -9,  -3,   0,  -5,  -1,  -7,  -9,   8,  -6,  -3,  -6,   0,  -2,  -8,  -8,  -4,   0,   6,   0,  -3,   0,   0,  -3, -17,   0,  }, /* N */
+    {  -2,  -8,  -8,  -5, -10,  -6,  -4,  -8,  -6,  -7,  -8,  -6,   8,  -3,  -4,  -2,  -4,  -6, -14, -13,   0,  -7,   0,  -4,   0,   0,  -5, -17,   0,  }, /* P */
+    {  -4, -14,  -2,   1, -13,  -7,   1,  -8,  -3,  -5,  -4,  -3,  -3,   8,  -2,  -5,  -5,  -7, -13, -12,   0,  -3,   0,   6,   0,   0,  -5, -17,   0,  }, /* Q */
+    {  -7,  -8, -10,  -9,  -9,  -9,  -2,  -5,   0,  -8,  -4,  -6,  -4,  -2,   8,  -3,  -6,  -8,  -2, -10,   0,  -7,   0,  -4,   0,   0,  -6, -17,   0,  }, /* R */
+    {   0,  -3,  -4,  -4,  -6,  -2,  -6,  -7,  -4,  -8,  -5,   0,  -2,  -5,  -3,   6,   0,  -6,  -5,  -7,   0,  -1,   0,  -5,   0,   0,  -3, -17,   0,  }, /* S */
+    {  -1,  -8,  -5,  -6,  -9,  -6,  -7,  -2,  -3,  -7,  -4,  -2,  -4,  -5,  -6,   0,   7,  -3, -13,  -6,   0,  -3,   0,  -6,   0,   0,  -4, -17,   0,  }, /* T */
+    {  -2,  -6,  -8,  -6,  -8,  -5,  -6,   2,  -9,  -2,  -1,  -8,  -6,  -7,  -8,  -6,  -3,   7, -15,  -7,   0,  -8,   0,  -6,   0,   0,  -5, -17,   0,  }, /* V */
+    { -13, -15, -15, -17,  -4, -15,  -7, -14, -12,  -6, -13,  -8, -14, -13,  -2,  -5, -13, -15,  13,  -5,   0, -10,   0, -14,   0,   0, -11, -17,   0,  }, /* W */
+    {  -8,  -4, -11,  -8,   2, -14,  -3,  -6,  -9,  -7, -11,  -4, -13, -12, -10,  -7,  -6,  -7,  -5,  10,   0,  -6,   0,  -9,   0,   0,  -7, -17,   0,  }, /* Y */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* - */
+    {  -3, -12,   6,   1, -10,  -3,  -1,  -6,  -2,  -9, -10,   6,  -7,  -3,  -7,  -1,  -3,  -8, -10,  -6,   0,   6,   0,   0,   0,   0,  -5, -17,   0,  }, /* B */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* J */
+    {  -3, -14,   1,   6, -13,  -5,  -1,  -6,  -4,  -7,  -5,  -3,  -4,   6,  -4,  -5,  -6,  -6, -14,  -9,   0,   0,   0,   6,   0,   0,  -5, -17,   0,  }, /* Z */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* O */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* U */
+    {  -3,  -9,  -5,  -5,  -8,  -5,  -5,  -5,  -5,  -6,  -5,  -3,  -5,  -5,  -6,  -3,  -4,  -5, -11,  -7,   0,  -5,   0,  -5,   0,   0,  -5, -17,   0,  }, /* X */
+    { -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17,   0, -17,   0, -17,   0,   0, -17,   1,   0,  }, /* * */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* ~ */
+    }},
+
+  { "PAM70", {
+    /*  A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    -    B    J    Z    O    U    X    *    ~           */
+    {   5,  -4,  -1,  -1,  -6,   0,  -4,  -2,  -4,  -4,  -3,  -2,   0,  -2,  -4,   1,   1,  -1,  -9,  -5,   0,  -1,   0,  -1,   0,   0,  -2, -11,   0,  }, /* A */
+    {  -4,   9,  -9,  -9,  -8,  -6,  -5,  -4,  -9, -10,  -9,  -7,  -5,  -9,  -5,  -1,  -5,  -4, -11,  -2,   0,  -8,   0,  -9,   0,   0,  -6, -11,   0,  }, /* C */
+    {  -1,  -9,   6,   3, -10,  -1,  -1,  -5,  -2,  -8,  -7,   3,  -4,   0,  -6,  -1,  -2,  -5, -10,  -7,   0,   5,   0,   2,   0,   0,  -3, -11,   0,  }, /* D */
+    {  -1,  -9,   3,   6,  -9,  -2,  -2,  -4,  -2,  -6,  -4,   0,  -3,   2,  -5,  -2,  -3,  -4, -11,  -6,   0,   2,   0,   5,   0,   0,  -3, -11,   0,  }, /* E */
+    {  -6,  -8, -10,  -9,   8,  -7,  -4,   0,  -9,  -1,  -2,  -6,  -7,  -9,  -7,  -4,  -6,  -5,  -2,   4,   0,  -7,   0,  -9,   0,   0,  -5, -11,   0,  }, /* F */
+    {   0,  -6,  -1,  -2,  -7,   6,  -6,  -6,  -5,  -7,  -6,  -1,  -3,  -4,  -6,   0,  -3,  -3, -10,  -9,   0,  -1,   0,  -3,   0,   0,  -3, -11,   0,  }, /* G */
+    {  -4,  -5,  -1,  -2,  -4,  -6,   8,  -6,  -3,  -4,  -6,   1,  -2,   2,   0,  -3,  -4,  -4,  -5,  -1,   0,   0,   0,   1,   0,   0,  -3, -11,   0,  }, /* H */
+    {  -2,  -4,  -5,  -4,   0,  -6,  -6,   7,  -4,   1,   1,  -3,  -5,  -5,  -3,  -4,  -1,   3,  -9,  -4,   0,  -4,   0,  -4,   0,   0,  -3, -11,   0,  }, /* I */
+    {  -4,  -9,  -2,  -2,  -9,  -5,  -3,  -4,   6,  -5,   0,   0,  -4,  -1,   2,  -2,  -1,  -6,  -7,  -7,   0,  -1,   0,  -2,   0,   0,  -3, -11,   0,  }, /* K */
+    {  -4, -10,  -8,  -6,  -1,  -7,  -4,   1,  -5,   6,   2,  -5,  -5,  -3,  -6,  -6,  -4,   0,  -4,  -4,   0,  -6,   0,  -4,   0,   0,  -4, -11,   0,  }, /* L */
+    {  -3,  -9,  -7,  -4,  -2,  -6,  -6,   1,   0,   2,  10,  -5,  -5,  -2,  -2,  -3,  -2,   0,  -8,  -7,   0,  -6,   0,  -3,   0,   0,  -3, -11,   0,  }, /* M */
+    {  -2,  -7,   3,   0,  -6,  -1,   1,  -3,   0,  -5,  -5,   6,  -3,  -1,  -3,   1,   0,  -5,  -6,  -3,   0,   5,   0,  -1,   0,   0,  -2, -11,   0,  }, /* N */
+    {   0,  -5,  -4,  -3,  -7,  -3,  -2,  -5,  -4,  -5,  -5,  -3,   7,  -1,  -2,   0,  -2,  -3,  -9,  -9,   0,  -4,   0,  -2,   0,   0,  -3, -11,   0,  }, /* P */
+    {  -2,  -9,   0,   2,  -9,  -4,   2,  -5,  -1,  -3,  -2,  -1,  -1,   7,   0,  -3,  -3,  -4,  -8,  -8,   0,  -1,   0,   5,   0,   0,  -2, -11,   0,  }, /* Q */
+    {  -4,  -5,  -6,  -5,  -7,  -6,   0,  -3,   2,  -6,  -2,  -3,  -2,   0,   8,  -1,  -4,  -5,   0,  -7,   0,  -4,   0,  -2,   0,   0,  -3, -11,   0,  }, /* R */
+    {   1,  -1,  -1,  -2,  -4,   0,  -3,  -4,  -2,  -6,  -3,   1,   0,  -3,  -1,   5,   2,  -3,  -3,  -5,   0,   0,   0,  -2,   0,   0,  -1, -11,   0,  }, /* S */
+    {   1,  -5,  -2,  -3,  -6,  -3,  -4,  -1,  -1,  -4,  -2,   0,  -2,  -3,  -4,   2,   6,  -1,  -8,  -4,   0,  -1,   0,  -3,   0,   0,  -2, -11,   0,  }, /* T */
+    {  -1,  -4,  -5,  -4,  -5,  -3,  -4,   3,  -6,   0,   0,  -5,  -3,  -4,  -5,  -3,  -1,   6, -10,  -5,   0,  -5,   0,  -4,   0,   0,  -2, -11,   0,  }, /* V */
+    {  -9, -11, -10, -11,  -2, -10,  -5,  -9,  -7,  -4,  -8,  -6,  -9,  -8,   0,  -3,  -8, -10,  13,  -3,   0,  -7,   0, -10,   0,   0,  -7, -11,   0,  }, /* W */
+    {  -5,  -2,  -7,  -6,   4,  -9,  -1,  -4,  -7,  -4,  -7,  -3,  -9,  -8,  -7,  -5,  -4,  -5,  -3,   9,   0,  -4,   0,  -7,   0,   0,  -5, -11,   0,  }, /* Y */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* - */
+    {  -1,  -8,   5,   2,  -7,  -1,   0,  -4,  -1,  -6,  -6,   5,  -4,  -1,  -4,   0,  -1,  -5,  -7,  -4,   0,   5,   0,   1,   0,   0,  -2, -11,   0,  }, /* B */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* J */
+    {  -1,  -9,   2,   5,  -9,  -3,   1,  -4,  -2,  -4,  -3,  -1,  -2,   5,  -2,  -2,  -3,  -4, -10,  -7,   0,   1,   0,   5,   0,   0,  -3, -11,   0,  }, /* Z */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* O */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* U */
+    {  -2,  -6,  -3,  -3,  -5,  -3,  -3,  -3,  -3,  -4,  -3,  -2,  -3,  -2,  -3,  -1,  -2,  -2,  -7,  -5,   0,  -2,   0,  -3,   0,   0,  -3, -11,   0,  }, /* X */
+    { -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11,   0, -11,   0, -11,   0,   0, -11,   1,   0,  }, /* * */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* ~ */
+    }},
+
+  { "PAM120",  {
+    /*  A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    -    B    J    Z    O    U    X    *    ~           */
+    {   3,  -3,   0,   0,  -4,   1,  -3,  -1,  -2,  -3,  -2,  -1,   1,  -1,  -3,   1,   1,   0,  -7,  -4,   0,   0,   0,  -1,   0,   0,  -1,  -8,   0,  }, /* A */
+    {  -3,   9,  -7,  -7,  -6,  -4,  -4,  -3,  -7,  -7,  -6,  -5,  -4,  -7,  -4,   0,  -3,  -3,  -8,  -1,   0,  -6,   0,  -7,   0,   0,  -4,  -8,   0,  }, /* C */
+    {   0,  -7,   5,   3,  -7,   0,   0,  -3,  -1,  -5,  -4,   2,  -3,   1,  -3,   0,  -1,  -3,  -8,  -5,   0,   4,   0,   3,   0,   0,  -2,  -8,   0,  }, /* D */
+    {   0,  -7,   3,   5,  -7,  -1,  -1,  -3,  -1,  -4,  -3,   1,  -2,   2,  -3,  -1,  -2,  -3,  -8,  -5,   0,   3,   0,   4,   0,   0,  -1,  -8,   0,  }, /* E */
+    {  -4,  -6,  -7,  -7,   8,  -5,  -3,   0,  -7,   0,  -1,  -4,  -5,  -6,  -5,  -3,  -4,  -3,  -1,   4,   0,  -5,   0,  -6,   0,   0,  -3,  -8,   0,  }, /* F */
+    {   1,  -4,   0,  -1,  -5,   5,  -4,  -4,  -3,  -5,  -4,   0,  -2,  -3,  -4,   1,  -1,  -2,  -8,  -6,   0,   0,   0,  -2,   0,   0,  -2,  -8,   0,  }, /* G */
+    {  -3,  -4,   0,  -1,  -3,  -4,   7,  -4,  -2,  -3,  -4,   2,  -1,   3,   1,  -2,  -3,  -3,  -3,  -1,   0,   1,   0,   1,   0,   0,  -2,  -8,   0,  }, /* H */
+    {  -1,  -3,  -3,  -3,   0,  -4,  -4,   6,  -3,   1,   1,  -2,  -3,  -3,  -2,  -2,   0,   3,  -6,  -2,   0,  -3,   0,  -3,   0,   0,  -1,  -8,   0,  }, /* I */
+    {  -2,  -7,  -1,  -1,  -7,  -3,  -2,  -3,   5,  -4,   0,   1,  -2,   0,   2,  -1,  -1,  -4,  -5,  -5,   0,   0,   0,  -1,   0,   0,  -2,  -8,   0,  }, /* K */
+    {  -3,  -7,  -5,  -4,   0,  -5,  -3,   1,  -4,   5,   3,  -4,  -3,  -2,  -4,  -4,  -3,   1,  -3,  -2,   0,  -4,   0,  -3,   0,   0,  -2,  -8,   0,  }, /* L */
+    {  -2,  -6,  -4,  -3,  -1,  -4,  -4,   1,   0,   3,   8,  -3,  -3,  -1,  -1,  -2,  -1,   1,  -6,  -4,   0,  -4,   0,  -2,   0,   0,  -2,  -8,   0,  }, /* M */
+    {  -1,  -5,   2,   1,  -4,   0,   2,  -2,   1,  -4,  -3,   4,  -2,   0,  -1,   1,   0,  -3,  -4,  -2,   0,   3,   0,   0,   0,   0,  -1,  -8,   0,  }, /* N */
+    {   1,  -4,  -3,  -2,  -5,  -2,  -1,  -3,  -2,  -3,  -3,  -2,   6,   0,  -1,   1,  -1,  -2,  -7,  -6,   0,  -2,   0,  -1,   0,   0,  -2,  -8,   0,  }, /* P */
+    {  -1,  -7,   1,   2,  -6,  -3,   3,  -3,   0,  -2,  -1,   0,   0,   6,   1,  -2,  -2,  -3,  -6,  -5,   0,   0,   0,   4,   0,   0,  -1,  -8,   0,  }, /* Q */
+    {  -3,  -4,  -3,  -3,  -5,  -4,   1,  -2,   2,  -4,  -1,  -1,  -1,   1,   6,  -1,  -2,  -3,   1,  -5,   0,  -2,   0,  -1,   0,   0,  -2,  -8,   0,  }, /* R */
+    {   1,   0,   0,  -1,  -3,   1,  -2,  -2,  -1,  -4,  -2,   1,   1,  -2,  -1,   3,   2,  -2,  -2,  -3,   0,   0,   0,  -1,   0,   0,  -1,  -8,   0,  }, /* S */
+    {   1,  -3,  -1,  -2,  -4,  -1,  -3,   0,  -1,  -3,  -1,   0,  -1,  -2,  -2,   2,   4,   0,  -6,  -3,   0,   0,   0,  -2,   0,   0,  -1,  -8,   0,  }, /* T */
+    {   0,  -3,  -3,  -3,  -3,  -2,  -3,   3,  -4,   1,   1,  -3,  -2,  -3,  -3,  -2,   0,   5,  -8,  -3,   0,  -3,   0,  -3,   0,   0,  -1,  -8,   0,  }, /* V */
+    {  -7,  -8,  -8,  -8,  -1,  -8,  -3,  -6,  -5,  -3,  -6,  -4,  -7,  -6,   1,  -2,  -6,  -8,  12,  -2,   0,  -6,   0,  -7,   0,   0,  -5,  -8,   0,  }, /* W */
+    {  -4,  -1,  -5,  -5,   4,  -6,  -1,  -2,  -5,  -2,  -4,  -2,  -6,  -5,  -5,  -3,  -3,  -3,  -2,   8,   0,  -3,   0,  -5,   0,   0,  -3,  -8,   0,  }, /* Y */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* - */
+    {   0,  -6,   4,   3,  -5,   0,   1,  -3,   0,  -4,  -4,   3,  -2,   0,  -2,   0,   0,  -3,  -6,  -3,   0,   4,   0,   2,   0,   0,  -1,  -8,   0,  }, /* B */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* J */
+    {  -1,  -7,   3,   4,  -6,  -2,   1,  -3,  -1,  -3,  -2,   0,  -1,   4,  -1,  -1,  -2,  -3,  -7,  -5,   0,   2,   0,   4,   0,   0,  -1,  -8,   0,  }, /* Z */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* O */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* U */
+    {  -1,  -4,  -2,  -1,  -3,  -2,  -2,  -1,  -2,  -2,  -2,  -1,  -2,  -1,  -2,  -1,  -1,  -1,  -5,  -3,   0,  -1,   0,  -1,   0,   0,  -2,  -8,   0,  }, /* X */
+    {  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,   0,  -8,   0,  -8,   0,   0,  -8,   1,   0,  }, /* * */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* ~ */
+    }},
+
+  { "PAM240",  {
+    /*  A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    -    B    J    Z    O    U    X    *    ~           */
+    {   2,  -2,   0,   0,  -4,   1,  -1,  -1,  -1,  -2,  -1,   0,   1,   0,  -2,   1,   1,   0,  -6,  -4,   0,   0,   0,   0,   0,   0,   0,  -8,   0,  }, /* A */
+    {  -2,  12,  -5,  -6,  -5,  -4,  -4,  -2,  -6,  -6,  -5,  -4,  -3,  -6,  -4,   0,  -2,  -2,  -8,   0,   0,  -5,   0,  -6,   0,   0,  -3,  -8,   0,  }, /* C */
+    {   0,  -5,   4,   4,  -6,   1,   1,  -2,   0,  -4,  -3,   2,  -1,   2,  -1,   0,   0,  -2,  -7,  -4,   0,   3,   0,   3,   0,   0,  -1,  -8,   0,  }, /* D */
+    {   0,  -6,   4,   4,  -6,   0,   1,  -2,   0,  -3,  -2,   1,  -1,   3,  -1,   0,   0,  -2,  -7,  -4,   0,   3,   0,   3,   0,   0,  -1,  -8,   0,  }, /* E */
+    {  -4,  -5,  -6,  -6,   9,  -5,  -2,   1,  -5,   2,   0,  -4,  -5,  -5,  -5,  -3,  -3,  -1,   0,   7,   0,  -5,   0,  -5,   0,   0,  -2,  -8,   0,  }, /* F */
+    {   1,  -4,   1,   0,  -5,   5,  -2,  -3,  -2,  -4,  -3,   0,  -1,  -1,  -3,   1,   0,  -1,  -7,  -5,   0,   0,   0,   0,   0,   0,  -1,  -8,   0,  }, /* G */
+    {  -1,  -4,   1,   1,  -2,  -2,   7,  -3,   0,  -2,  -2,   2,   0,   3,   2,  -1,  -1,  -2,  -3,   0,   0,   1,   0,   2,   0,   0,  -1,  -8,   0,  }, /* H */
+    {  -1,  -2,  -2,  -2,   1,  -3,  -3,   5,  -2,   2,   2,  -2,  -2,  -2,  -2,  -1,   0,   4,  -5,  -1,   0,  -2,   0,  -2,   0,   0,  -1,  -8,   0,  }, /* I */
+    {  -1,  -6,   0,   0,  -5,  -2,   0,  -2,   5,  -3,   0,   1,  -1,   1,   3,   0,   0,  -3,  -4,  -5,   0,   1,   0,   0,   0,   0,  -1,  -8,   0,  }, /* K */
+    {  -2,  -6,  -4,  -3,   2,  -4,  -2,   2,  -3,   6,   4,  -3,  -3,  -2,  -3,  -3,  -2,   2,  -2,  -1,   0,  -4,   0,  -3,   0,   0,  -1,  -8,   0,  }, /* L */
+    {  -1,  -5,  -3,  -2,   0,  -3,  -2,   2,   0,   4,   7,  -2,  -2,  -1,   0,  -2,  -1,   2,  -4,  -3,   0,  -2,   0,  -2,   0,   0,  -1,  -8,   0,  }, /* M */
+    {   0,  -4,   2,   1,  -4,   0,   2,  -2,   1,  -3,  -2,   2,  -1,   1,   0,   1,   0,  -2,  -4,  -2,   0,   2,   0,   1,   0,   0,   0,  -8,   0,  }, /* N */
+    {   1,  -3,  -1,  -1,  -5,  -1,   0,  -2,  -1,  -3,  -2,  -1,   6,   0,   0,   1,   0,  -1,  -6,  -5,   0,  -1,   0,   0,   0,   0,  -1,  -8,   0,  }, /* P */
+    {   0,  -6,   2,   3,  -5,  -1,   3,  -2,   1,  -2,  -1,   1,   0,   4,   1,  -1,  -1,  -2,  -5,  -4,   0,   1,   0,   3,   0,   0,  -1,  -8,   0,  }, /* Q */
+    {  -2,  -4,  -1,  -1,  -5,  -3,   2,  -2,   3,  -3,   0,   0,   0,   1,   6,   0,  -1,  -3,   2,  -4,   0,  -1,   0,   0,   0,   0,  -1,  -8,   0,  }, /* R */
+    {   1,   0,   0,   0,  -3,   1,  -1,  -1,   0,  -3,  -2,   1,   1,  -1,   0,   2,   1,  -1,  -3,  -3,   0,   0,   0,   0,   0,   0,   0,  -8,   0,  }, /* S */
+    {   1,  -2,   0,   0,  -3,   0,  -1,   0,   0,  -2,  -1,   0,   0,  -1,  -1,   1,   3,   0,  -5,  -3,   0,   0,   0,  -1,   0,   0,   0,  -8,   0,  }, /* T */
+    {   0,  -2,  -2,  -2,  -1,  -1,  -2,   4,  -3,   2,   2,  -2,  -1,  -2,  -3,  -1,   0,   4,  -6,  -3,   0,  -2,   0,  -2,   0,   0,  -1,  -8,   0,  }, /* V */
+    {  -6,  -8,  -7,  -7,   0,  -7,  -3,  -5,  -4,  -2,  -4,  -4,  -6,  -5,   2,  -3,  -5,  -6,  17,   0,   0,  -5,   0,  -6,   0,   0,  -4,  -8,   0,  }, /* W */
+    {  -4,   0,  -4,  -4,   7,  -5,   0,  -1,  -5,  -1,  -3,  -2,  -5,  -4,  -4,  -3,  -3,  -3,   0,  10,   0,  -3,   0,  -4,   0,   0,  -2,  -8,   0,  }, /* Y */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* - */
+    {   0,  -5,   3,   3,  -5,   0,   1,  -2,   1,  -4,  -2,   2,  -1,   1,  -1,   0,   0,  -2,  -5,  -3,   0,   3,   0,   2,   0,   0,  -1,  -8,   0,  }, /* B */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* J */
+    {   0,  -6,   3,   3,  -5,   0,   2,  -2,   0,  -3,  -2,   1,   0,   3,   0,   0,  -1,  -2,  -6,  -4,   0,   2,   0,   3,   0,   0,  -1,  -8,   0,  }, /* Z */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* O */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* U */
+    {   0,  -3,  -1,  -1,  -2,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,   0,   0,  -1,  -4,  -2,   0,  -1,   0,  -1,   0,   0,  -1,  -8,   0,  }, /* X */
+    {  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,   0,  -8,   0,  -8,   0,   0,  -8,   1,   0,  }, /* * */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* ~ */
+    }},
+
+  { "BLOSUM45", {
+    /*  A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    -    B    J    Z    O    U    X    *    ~           */
+    {   5,  -1,  -2,  -1,  -2,   0,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -2,   1,   0,   0,  -2,  -2,   0,  -1,   0,  -1,   0,   0,   0,  -5,   0,  }, /* A */
+    {  -1,  12,  -3,  -3,  -2,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -4,  -3,  -3,  -1,  -1,  -1,  -5,  -3,   0,  -2,   0,  -3,   0,   0,  -2,  -5,   0,  }, /* C */
+    {  -2,  -3,   7,   2,  -4,  -1,   0,  -4,   0,  -3,  -3,   2,  -1,   0,  -1,   0,  -1,  -3,  -4,  -2,   0,   5,   0,   1,   0,   0,  -1,  -5,   0,  }, /* D */
+    {  -1,  -3,   2,   6,  -3,  -2,   0,  -3,   1,  -2,  -2,   0,   0,   2,   0,   0,  -1,  -3,  -3,  -2,   0,   1,   0,   4,   0,   0,  -1,  -5,   0,  }, /* E */
+    {  -2,  -2,  -4,  -3,   8,  -3,  -2,   0,  -3,   1,   0,  -2,  -3,  -4,  -2,  -2,  -1,   0,   1,   3,   0,  -3,   0,  -3,   0,   0,  -1,  -5,   0,  }, /* F */
+    {   0,  -3,  -1,  -2,  -3,   7,  -2,  -4,  -2,  -3,  -2,   0,  -2,  -2,  -2,   0,  -2,  -3,  -2,  -3,   0,  -1,   0,  -2,   0,   0,  -1,  -5,   0,  }, /* G */
+    {  -2,  -3,   0,   0,  -2,  -2,  10,  -3,  -1,  -2,   0,   1,  -2,   1,   0,  -1,  -2,  -3,  -3,   2,   0,   0,   0,   0,   0,   0,  -1,  -5,   0,  }, /* H */
+    {  -1,  -3,  -4,  -3,   0,  -4,  -3,   5,  -3,   2,   2,  -2,  -2,  -2,  -3,  -2,  -1,   3,  -2,   0,   0,  -3,   0,  -3,   0,   0,  -1,  -5,   0,  }, /* I */
+    {  -1,  -3,   0,   1,  -3,  -2,  -1,  -3,   5,  -3,  -1,   0,  -1,   1,   3,  -1,  -1,  -2,  -2,  -1,   0,   0,   0,   1,   0,   0,  -1,  -5,   0,  }, /* K */
+    {  -1,  -2,  -3,  -2,   1,  -3,  -2,   2,  -3,   5,   2,  -3,  -3,  -2,  -2,  -3,  -1,   1,  -2,   0,   0,  -3,   0,  -2,   0,   0,  -1,  -5,   0,  }, /* L */
+    {  -1,  -2,  -3,  -2,   0,  -2,   0,   2,  -1,   2,   6,  -2,  -2,   0,  -1,  -2,  -1,   1,  -2,   0,   0,  -2,   0,  -1,   0,   0,  -1,  -5,   0,  }, /* M */
+    {  -1,  -2,   2,   0,  -2,   0,   1,  -2,   0,  -3,  -2,   6,  -2,   0,   0,   1,   0,  -3,  -4,  -2,   0,   4,   0,   0,   0,   0,  -1,  -5,   0,  }, /* N */
+    {  -1,  -4,  -1,   0,  -3,  -2,  -2,  -2,  -1,  -3,  -2,  -2,   9,  -1,  -2,  -1,  -1,  -3,  -3,  -3,   0,  -2,   0,  -1,   0,   0,  -1,  -5,   0,  }, /* P */
+    {  -1,  -3,   0,   2,  -4,  -2,   1,  -2,   1,  -2,   0,   0,  -1,   6,   1,   0,  -1,  -3,  -2,  -1,   0,   0,   0,   4,   0,   0,  -1,  -5,   0,  }, /* Q */
+    {  -2,  -3,  -1,   0,  -2,  -2,   0,  -3,   3,  -2,  -1,   0,  -2,   1,   7,  -1,  -1,  -2,  -2,  -1,   0,  -1,   0,   0,   0,   0,  -1,  -5,   0,  }, /* R */
+    {   1,  -1,   0,   0,  -2,   0,  -1,  -2,  -1,  -3,  -2,   1,  -1,   0,  -1,   4,   2,  -1,  -4,  -2,   0,   0,   0,   0,   0,   0,   0,  -5,   0,  }, /* S */
+    {   0,  -1,  -1,  -1,  -1,  -2,  -2,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,   2,   5,   0,  -3,  -1,   0,   0,   0,  -1,   0,   0,   0,  -5,   0,  }, /* T */
+    {   0,  -1,  -3,  -3,   0,  -3,  -3,   3,  -2,   1,   1,  -3,  -3,  -3,  -2,  -1,   0,   5,  -3,  -1,   0,  -3,   0,  -3,   0,   0,  -1,  -5,   0,  }, /* V */
+    {  -2,  -5,  -4,  -3,   1,  -2,  -3,  -2,  -2,  -2,  -2,  -4,  -3,  -2,  -2,  -4,  -3,  -3,  15,   3,   0,  -4,   0,  -2,   0,   0,  -2,  -5,   0,  }, /* W */
+    {  -2,  -3,  -2,  -2,   3,  -3,   2,   0,  -1,   0,   0,  -2,  -3,  -1,  -1,  -2,  -1,  -1,   3,   8,   0,  -2,   0,  -2,   0,   0,  -1,  -5,   0,  }, /* Y */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* - */
+    {  -1,  -2,   5,   1,  -3,  -1,   0,  -3,   0,  -3,  -2,   4,  -2,   0,  -1,   0,   0,  -3,  -4,  -2,   0,   4,   0,   2,   0,   0,  -1,  -5,   0,  }, /* B */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* J */
+    {  -1,  -3,   1,   4,  -3,  -2,   0,  -3,   1,  -2,  -1,   0,  -1,   4,   0,   0,  -1,  -3,  -2,  -2,   0,   2,   0,   4,   0,   0,  -1,  -5,   0,  }, /* Z */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* O */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* U */
+    {   0,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,  -1,  -2,  -1,   0,  -1,   0,  -1,   0,   0,  -1,  -5,   0,  }, /* X */
+    {  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,   0,  -5,   0,  -5,   0,   0,  -5,   1,   0,  }, /* * */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* ~ */
+    }},
+
+  { "BLOSUM50",  {
+    /*  A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    -    B    J    Z    O    U    X    *    ~           */
+    {   5,  -1,  -2,  -1,  -3,   0,  -2,  -1,  -1,  -2,  -1,  -1,  -1,  -1,  -2,   1,   0,   0,  -3,  -2,   0,  -2,   0,  -1,   0,   0,  -1,  -5,   0,  }, /* A */
+    {  -1,  13,  -4,  -3,  -2,  -3,  -3,  -2,  -3,  -2,  -2,  -2,  -4,  -3,  -4,  -1,  -1,  -1,  -5,  -3,   0,  -3,   0,  -3,   0,   0,  -2,  -5,   0,  }, /* C */
+    {  -2,  -4,   8,   2,  -5,  -1,  -1,  -4,  -1,  -4,  -4,   2,  -1,   0,  -2,   0,  -1,  -4,  -5,  -3,   0,   5,   0,   1,   0,   0,  -1,  -5,   0,  }, /* D */
+    {  -1,  -3,   2,   6,  -3,  -3,   0,  -4,   1,  -3,  -2,   0,  -1,   2,   0,  -1,  -1,  -3,  -3,  -2,   0,   1,   0,   5,   0,   0,  -1,  -5,   0,  }, /* E */
+    {  -3,  -2,  -5,  -3,   8,  -4,  -1,   0,  -4,   1,   0,  -4,  -4,  -4,  -3,  -3,  -2,  -1,   1,   4,   0,  -4,   0,  -4,   0,   0,  -2,  -5,   0,  }, /* F */
+    {   0,  -3,  -1,  -3,  -4,   8,  -2,  -4,  -2,  -4,  -3,   0,  -2,  -2,  -3,   0,  -2,  -4,  -3,  -3,   0,  -1,   0,  -2,   0,   0,  -2,  -5,   0,  }, /* G */
+    {  -2,  -3,  -1,   0,  -1,  -2,  10,  -4,   0,  -3,  -1,   1,  -2,   1,   0,  -1,  -2,  -4,  -3,   2,   0,   0,   0,   0,   0,   0,  -1,  -5,   0,  }, /* H */
+    {  -1,  -2,  -4,  -4,   0,  -4,  -4,   5,  -3,   2,   2,  -3,  -3,  -3,  -4,  -3,  -1,   4,  -3,  -1,   0,  -4,   0,  -3,   0,   0,  -1,  -5,   0,  }, /* I */
+    {  -1,  -3,  -1,   1,  -4,  -2,   0,  -3,   6,  -3,  -2,   0,  -1,   2,   3,   0,  -1,  -3,  -3,  -2,   0,   0,   0,   1,   0,   0,  -1,  -5,   0,  }, /* K */
+    {  -2,  -2,  -4,  -3,   1,  -4,  -3,   2,  -3,   5,   3,  -4,  -4,  -2,  -3,  -3,  -1,   1,  -2,  -1,   0,  -4,   0,  -3,   0,   0,  -1,  -5,   0,  }, /* L */
+    {  -1,  -2,  -4,  -2,   0,  -3,  -1,   2,  -2,   3,   7,  -2,  -3,   0,  -2,  -2,  -1,   1,  -1,   0,   0,  -3,   0,  -1,   0,   0,  -1,  -5,   0,  }, /* M */
+    {  -1,  -2,   2,   0,  -4,   0,   1,  -3,   0,  -4,  -2,   7,  -2,   0,  -1,   1,   0,  -3,  -4,  -2,   0,   4,   0,   0,   0,   0,  -1,  -5,   0,  }, /* N */
+    {  -1,  -4,  -1,  -1,  -4,  -2,  -2,  -3,  -1,  -4,  -3,  -2,  10,  -1,  -3,  -1,  -1,  -3,  -4,  -3,   0,  -2,   0,  -1,   0,   0,  -2,  -5,   0,  }, /* P */
+    {  -1,  -3,   0,   2,  -4,  -2,   1,  -3,   2,  -2,   0,   0,  -1,   7,   1,   0,  -1,  -3,  -1,  -1,   0,   0,   0,   4,   0,   0,  -1,  -5,   0,  }, /* Q */
+    {  -2,  -4,  -2,   0,  -3,  -3,   0,  -4,   3,  -3,  -2,  -1,  -3,   1,   7,  -1,  -1,  -3,  -3,  -1,   0,  -1,   0,   0,   0,   0,  -1,  -5,   0,  }, /* R */
+    {   1,  -1,   0,  -1,  -3,   0,  -1,  -3,   0,  -3,  -2,   1,  -1,   0,  -1,   5,   2,  -2,  -4,  -2,   0,   0,   0,   0,   0,   0,  -1,  -5,   0,  }, /* S */
+    {   0,  -1,  -1,  -1,  -2,  -2,  -2,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,   2,   5,   0,  -3,  -2,   0,   0,   0,  -1,   0,   0,   0,  -5,   0,  }, /* T */
+    {   0,  -1,  -4,  -3,  -1,  -4,  -4,   4,  -3,   1,   1,  -3,  -3,  -3,  -3,  -2,   0,   5,  -3,  -1,   0,  -4,   0,  -3,   0,   0,  -1,  -5,   0,  }, /* V */
+    {  -3,  -5,  -5,  -3,   1,  -3,  -3,  -3,  -3,  -2,  -1,  -4,  -4,  -1,  -3,  -4,  -3,  -3,  15,   2,   0,  -5,   0,  -2,   0,   0,  -3,  -5,   0,  }, /* W */
+    {  -2,  -3,  -3,  -2,   4,  -3,   2,  -1,  -2,  -1,   0,  -2,  -3,  -1,  -1,  -2,  -2,  -1,   2,   8,   0,  -3,   0,  -2,   0,   0,  -1,  -5,   0,  }, /* Y */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* - */
+    {  -2,  -3,   5,   1,  -4,  -1,   0,  -4,   0,  -4,  -3,   4,  -2,   0,  -1,   0,   0,  -4,  -5,  -3,   0,   5,   0,   2,   0,   0,  -1,  -5,   0,  }, /* B */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* J */
+    {  -1,  -3,   1,   5,  -4,  -2,   0,  -3,   1,  -3,  -1,   0,  -1,   4,   0,   0,  -1,  -3,  -2,  -2,   0,   2,   0,   5,   0,   0,  -1,  -5,   0,  }, /* Z */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* O */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* U */
+    {  -1,  -2,  -1,  -1,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -2,  -1,  -1,  -1,   0,  -1,  -3,  -1,   0,  -1,   0,  -1,   0,   0,  -1,  -5,   0,  }, /* X */
+    {  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,   0,  -5,   0,  -5,   0,   0,  -5,   1,   0,  }, /* * */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* ~ */
+    }},
+
+  { "BLOSUM62",  {
+    /*  A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    -    B    J    Z    O    U    X    *    ~           */
+    {   4,   0,  -2,  -1,  -2,   0,  -2,  -1,  -1,  -1,  -1,  -2,  -1,  -1,  -1,   1,   0,   0,  -3,  -2,   0,  -2,   0,  -1,   0,   0,   0,  -4,   0,  }, /* A */
+    {   0,   9,  -3,  -4,  -2,  -3,  -3,  -1,  -3,  -1,  -1,  -3,  -3,  -3,  -3,  -1,  -1,  -1,  -2,  -2,   0,  -3,   0,  -3,   0,   0,  -2,  -4,   0,  }, /* C */
+    {  -2,  -3,   6,   2,  -3,  -1,  -1,  -3,  -1,  -4,  -3,   1,  -1,   0,  -2,   0,  -1,  -3,  -4,  -3,   0,   4,   0,   1,   0,   0,  -1,  -4,   0,  }, /* D */
+    {  -1,  -4,   2,   5,  -3,  -2,   0,  -3,   1,  -3,  -2,   0,  -1,   2,   0,   0,  -1,  -2,  -3,  -2,   0,   1,   0,   4,   0,   0,  -1,  -4,   0,  }, /* E */
+    {  -2,  -2,  -3,  -3,   6,  -3,  -1,   0,  -3,   0,   0,  -3,  -4,  -3,  -3,  -2,  -2,  -1,   1,   3,   0,  -3,   0,  -3,   0,   0,  -1,  -4,   0,  }, /* F */
+    {   0,  -3,  -1,  -2,  -3,   6,  -2,  -4,  -2,  -4,  -3,   0,  -2,  -2,  -2,   0,  -2,  -3,  -2,  -3,   0,  -1,   0,  -2,   0,   0,  -1,  -4,   0,  }, /* G */
+    {  -2,  -3,  -1,   0,  -1,  -2,   8,  -3,  -1,  -3,  -2,   1,  -2,   0,   0,  -1,  -2,  -3,  -2,   2,   0,   0,   0,   0,   0,   0,  -1,  -4,   0,  }, /* H */
+    {  -1,  -1,  -3,  -3,   0,  -4,  -3,   4,  -3,   2,   1,  -3,  -3,  -3,  -3,  -2,  -1,   3,  -3,  -1,   0,  -3,   0,  -3,   0,   0,  -1,  -4,   0,  }, /* I */
+    {  -1,  -3,  -1,   1,  -3,  -2,  -1,  -3,   5,  -2,  -1,   0,  -1,   1,   2,   0,  -1,  -2,  -3,  -2,   0,   0,   0,   1,   0,   0,  -1,  -4,   0,  }, /* K */
+    {  -1,  -1,  -4,  -3,   0,  -4,  -3,   2,  -2,   4,   2,  -3,  -3,  -2,  -2,  -2,  -1,   1,  -2,  -1,   0,  -4,   0,  -3,   0,   0,  -1,  -4,   0,  }, /* L */
+    {  -1,  -1,  -3,  -2,   0,  -3,  -2,   1,  -1,   2,   5,  -2,  -2,   0,  -1,  -1,  -1,   1,  -1,  -1,   0,  -3,   0,  -1,   0,   0,  -1,  -4,   0,  }, /* M */
+    {  -2,  -3,   1,   0,  -3,   0,   1,  -3,   0,  -3,  -2,   6,  -2,   0,   0,   1,   0,  -3,  -4,  -2,   0,   3,   0,   0,   0,   0,  -1,  -4,   0,  }, /* N */
+    {  -1,  -3,  -1,  -1,  -4,  -2,  -2,  -3,  -1,  -3,  -2,  -2,   7,  -1,  -2,  -1,  -1,  -2,  -4,  -3,   0,  -2,   0,  -1,   0,   0,  -2,  -4,   0,  }, /* P */
+    {  -1,  -3,   0,   2,  -3,  -2,   0,  -3,   1,  -2,   0,   0,  -1,   5,   1,   0,  -1,  -2,  -2,  -1,   0,   0,   0,   3,   0,   0,  -1,  -4,   0,  }, /* Q */
+    {  -1,  -3,  -2,   0,  -3,  -2,   0,  -3,   2,  -2,  -1,   0,  -2,   1,   5,  -1,  -1,  -3,  -3,  -2,   0,  -1,   0,   0,   0,   0,  -1,  -4,   0,  }, /* R */
+    {   1,  -1,   0,   0,  -2,   0,  -1,  -2,   0,  -2,  -1,   1,  -1,   0,  -1,   4,   1,  -2,  -3,  -2,   0,   0,   0,   0,   0,   0,   0,  -4,   0,  }, /* S */
+    {   0,  -1,  -1,  -1,  -2,  -2,  -2,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,   1,   5,   0,  -2,  -2,   0,  -1,   0,  -1,   0,   0,   0,  -4,   0,  }, /* T */
+    {   0,  -1,  -3,  -2,  -1,  -3,  -3,   3,  -2,   1,   1,  -3,  -2,  -2,  -3,  -2,   0,   4,  -3,  -1,   0,  -3,   0,  -2,   0,   0,  -1,  -4,   0,  }, /* V */
+    {  -3,  -2,  -4,  -3,   1,  -2,  -2,  -3,  -3,  -2,  -1,  -4,  -4,  -2,  -3,  -3,  -2,  -3,  11,   2,   0,  -4,   0,  -3,   0,   0,  -2,  -4,   0,  }, /* W */
+    {  -2,  -2,  -3,  -2,   3,  -3,   2,  -1,  -2,  -1,  -1,  -2,  -3,  -1,  -2,  -2,  -2,  -1,   2,   7,   0,  -3,   0,  -2,   0,   0,  -1,  -4,   0,  }, /* Y */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* - */
+    {  -2,  -3,   4,   1,  -3,  -1,   0,  -3,   0,  -4,  -3,   3,  -2,   0,  -1,   0,  -1,  -3,  -4,  -3,   0,   4,   0,   1,   0,   0,  -1,  -4,   0,  }, /* B */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* J */
+    {  -1,  -3,   1,   4,  -3,  -2,   0,  -3,   1,  -3,  -1,   0,  -1,   3,   0,   0,  -1,  -2,  -3,  -2,   0,   1,   0,   4,   0,   0,  -1,  -4,   0,  }, /* Z */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* O */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* U */
+    {   0,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -2,  -1,  -1,   0,   0,  -1,  -2,  -1,   0,  -1,   0,  -1,   0,   0,  -1,  -4,   0,  }, /* X */
+    {  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,   0,  -4,   0,  -4,   0,   0,  -4,   1,   0,  }, /* * */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* ~ */
+    }},
+    
+  { "BLOSUM80", {
+    /*  A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    -    B    J    Z    O    U    X    *    ~           */
+    {   7,  -1,  -3,  -2,  -4,   0,  -3,  -3,  -1,  -3,  -2,  -3,  -1,  -2,  -3,   2,   0,  -1,  -5,  -4,   0,  -3,   0,  -2,   0,   0,  -1,  -8,   0,  }, /* A */
+    {  -1,  13,  -7,  -7,  -4,  -6,  -7,  -2,  -6,  -3,  -3,  -5,  -6,  -5,  -6,  -2,  -2,  -2,  -5,  -5,   0,  -6,   0,  -7,   0,   0,  -4,  -8,   0,  }, /* C */
+    {  -3,  -7,  10,   2,  -6,  -3,  -2,  -7,  -2,  -7,  -6,   2,  -3,  -1,  -3,  -1,  -2,  -6,  -8,  -6,   0,   6,   0,   1,   0,   0,  -3,  -8,   0,  }, /* D */
+    {  -2,  -7,   2,   8,  -6,  -4,   0,  -6,   1,  -6,  -4,  -1,  -2,   3,  -1,  -1,  -2,  -4,  -6,  -5,   0,   1,   0,   6,   0,   0,  -2,  -8,   0,  }, /* E */
+    {  -4,  -4,  -6,  -6,  10,  -6,  -2,  -1,  -5,   0,   0,  -6,  -6,  -5,  -5,  -4,  -4,  -2,   0,   4,   0,  -6,   0,  -6,   0,   0,  -3,  -8,   0,  }, /* F */
+    {   0,  -6,  -3,  -4,  -6,   9,  -4,  -7,  -3,  -7,  -5,  -1,  -5,  -4,  -4,  -1,  -3,  -6,  -6,  -6,   0,  -2,   0,  -4,   0,   0,  -3,  -8,   0,  }, /* G */
+    {  -3,  -7,  -2,   0,  -2,  -4,  12,  -6,  -1,  -5,  -4,   1,  -4,   1,   0,  -2,  -3,  -5,  -4,   3,   0,  -1,   0,   0,   0,   0,  -2,  -8,   0,  }, /* H */
+    {  -3,  -2,  -7,  -6,  -1,  -7,  -6,   7,  -5,   2,   2,  -6,  -5,  -5,  -5,  -4,  -2,   4,  -5,  -3,   0,  -6,   0,  -6,   0,   0,  -2,  -8,   0,  }, /* I */
+    {  -1,  -6,  -2,   1,  -5,  -3,  -1,  -5,   8,  -4,  -3,   0,  -2,   2,   3,  -1,  -1,  -4,  -6,  -4,   0,  -1,   0,   1,   0,   0,  -2,  -8,   0,  }, /* K */
+    {  -3,  -3,  -7,  -6,   0,  -7,  -5,   2,  -4,   6,   3,  -6,  -5,  -4,  -4,  -4,  -3,   1,  -4,  -2,   0,  -7,   0,  -5,   0,   0,  -2,  -8,   0,  }, /* L */
+    {  -2,  -3,  -6,  -4,   0,  -5,  -4,   2,  -3,   3,   9,  -4,  -4,  -1,  -3,  -3,  -1,   1,  -3,  -3,   0,  -5,   0,  -3,   0,   0,  -2,  -8,   0,  }, /* M */
+    {  -3,  -5,   2,  -1,  -6,  -1,   1,  -6,   0,  -6,  -4,   9,  -4,   0,  -1,   1,   0,  -5,  -7,  -4,   0,   5,   0,  -1,   0,   0,  -2,  -8,   0,  }, /* N */
+    {  -1,  -6,  -3,  -2,  -6,  -5,  -4,  -5,  -2,  -5,  -4,  -4,  12,  -3,  -3,  -2,  -3,  -4,  -7,  -6,   0,  -4,   0,  -2,   0,   0,  -3,  -8,   0,  }, /* P */
+    {  -2,  -5,  -1,   3,  -5,  -4,   1,  -5,   2,  -4,  -1,   0,  -3,   9,   1,  -1,  -1,  -4,  -4,  -3,   0,  -1,   0,   5,   0,   0,  -2,  -8,   0,  }, /* Q */
+    {  -3,  -6,  -3,  -1,  -5,  -4,   0,  -5,   3,  -4,  -3,  -1,  -3,   1,   9,  -2,  -2,  -4,  -5,  -4,   0,  -2,   0,   0,   0,   0,  -2,  -8,   0,  }, /* R */
+    {   2,  -2,  -1,  -1,  -4,  -1,  -2,  -4,  -1,  -4,  -3,   1,  -2,  -1,  -2,   7,   2,  -3,  -6,  -3,   0,   0,   0,  -1,   0,   0,  -1,  -8,   0,  }, /* S */
+    {   0,  -2,  -2,  -2,  -4,  -3,  -3,  -2,  -1,  -3,  -1,   0,  -3,  -1,  -2,   2,   8,   0,  -5,  -3,   0,  -1,   0,  -2,   0,   0,  -1,  -8,   0,  }, /* T */
+    {  -1,  -2,  -6,  -4,  -2,  -6,  -5,   4,  -4,   1,   1,  -5,  -4,  -4,  -4,  -3,   0,   7,  -5,  -3,   0,  -6,   0,  -4,   0,   0,  -2,  -8,   0,  }, /* V */
+    {  -5,  -5,  -8,  -6,   0,  -6,  -4,  -5,  -6,  -4,  -3,  -7,  -7,  -4,  -5,  -6,  -5,  -5,  16,   3,   0,  -8,   0,  -5,   0,   0,  -5,  -8,   0,  }, /* W */
+    {  -4,  -5,  -6,  -5,   4,  -6,   3,  -3,  -4,  -2,  -3,  -4,  -6,  -3,  -4,  -3,  -3,  -3,   3,  11,   0,  -5,   0,  -4,   0,   0,  -3,  -8,   0,  }, /* Y */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* - */
+    {  -3,  -6,   6,   1,  -6,  -2,  -1,  -6,  -1,  -7,  -5,   5,  -4,  -1,  -2,   0,  -1,  -6,  -8,  -5,   0,   6,   0,   0,   0,   0,  -3,  -8,   0,  }, /* B */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* J */
+    {  -2,  -7,   1,   6,  -6,  -4,   0,  -6,   1,  -5,  -3,  -1,  -2,   5,   0,  -1,  -2,  -4,  -5,  -4,   0,   0,   0,   6,   0,   0,  -1,  -8,   0,  }, /* Z */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* O */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* U */
+    {  -1,  -4,  -3,  -2,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -2,  -2,  -1,  -1,  -2,  -5,  -3,   0,  -3,   0,  -1,   0,   0,  -2,  -8,   0,  }, /* X */
+    {  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,   0,  -8,   0,  -8,   0,   0,  -8,   1,   0,  }, /* * */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* ~ */
+    }},
+
+  { "BLOSUM90",  {
+    /*  A    C    D    E    F    G    H    I    K    L    M    N    P    Q    R    S    T    V    W    Y    -    B    J    Z    O    U    X    *    ~           */
+    {   5,  -1,  -3,  -1,  -3,   0,  -2,  -2,  -1,  -2,  -2,  -2,  -1,  -1,  -2,   1,   0,  -1,  -4,  -3,   0,  -2,   0,  -1,   0,   0,  -1,  -6,   0,  }, /* A */
+    {  -1,   9,  -5,  -6,  -3,  -4,  -5,  -2,  -4,  -2,  -2,  -4,  -4,  -4,  -5,  -2,  -2,  -2,  -4,  -4,   0,  -4,   0,  -5,   0,   0,  -3,  -6,   0,  }, /* C */
+    {  -3,  -5,   7,   1,  -5,  -2,  -2,  -5,  -1,  -5,  -4,   1,  -3,  -1,  -3,  -1,  -2,  -5,  -6,  -4,   0,   4,   0,   0,   0,   0,  -2,  -6,   0,  }, /* D */
+    {  -1,  -6,   1,   6,  -5,  -3,  -1,  -4,   0,  -4,  -3,  -1,  -2,   2,  -1,  -1,  -1,  -3,  -5,  -4,   0,   0,   0,   4,   0,   0,  -2,  -6,   0,  }, /* E */
+    {  -3,  -3,  -5,  -5,   7,  -5,  -2,  -1,  -4,   0,  -1,  -4,  -4,  -4,  -4,  -3,  -3,  -2,   0,   3,   0,  -4,   0,  -4,   0,   0,  -2,  -6,   0,  }, /* F */
+    {   0,  -4,  -2,  -3,  -5,   6,  -3,  -5,  -2,  -5,  -4,  -1,  -3,  -3,  -3,  -1,  -3,  -5,  -4,  -5,   0,  -2,   0,  -3,   0,   0,  -2,  -6,   0,  }, /* G */
+    {  -2,  -5,  -2,  -1,  -2,  -3,   8,  -4,  -1,  -4,  -3,   0,  -3,   1,   0,  -2,  -2,  -4,  -3,   1,   0,  -1,   0,   0,   0,   0,  -2,  -6,   0,  }, /* H */
+    {  -2,  -2,  -5,  -4,  -1,  -5,  -4,   5,  -4,   1,   1,  -4,  -4,  -4,  -4,  -3,  -1,   3,  -4,  -2,   0,  -5,   0,  -4,   0,   0,  -2,  -6,   0,  }, /* I */
+    {  -1,  -4,  -1,   0,  -4,  -2,  -1,  -4,   6,  -3,  -2,   0,  -2,   1,   2,  -1,  -1,  -3,  -5,  -3,   0,  -1,   0,   1,   0,   0,  -1,  -6,   0,  }, /* K */
+    {  -2,  -2,  -5,  -4,   0,  -5,  -4,   1,  -3,   5,   2,  -4,  -4,  -3,  -3,  -3,  -2,   0,  -3,  -2,   0,  -5,   0,  -4,   0,   0,  -2,  -6,   0,  }, /* L */
+    {  -2,  -2,  -4,  -3,  -1,  -4,  -3,   1,  -2,   2,   7,  -3,  -3,   0,  -2,  -2,  -1,   0,  -2,  -2,   0,  -4,   0,  -2,   0,   0,  -1,  -6,   0,  }, /* M */
+    {  -2,  -4,   1,  -1,  -4,  -1,   0,  -4,   0,  -4,  -3,   7,  -3,   0,  -1,   0,   0,  -4,  -5,  -3,   0,   4,   0,  -1,   0,   0,  -2,  -6,   0,  }, /* N */
+    {  -1,  -4,  -3,  -2,  -4,  -3,  -3,  -4,  -2,  -4,  -3,  -3,   8,  -2,  -3,  -2,  -2,  -3,  -5,  -4,   0,  -3,   0,  -2,   0,   0,  -2,  -6,   0,  }, /* P */
+    {  -1,  -4,  -1,   2,  -4,  -3,   1,  -4,   1,  -3,   0,   0,  -2,   7,   1,  -1,  -1,  -3,  -3,  -3,   0,  -1,   0,   4,   0,   0,  -1,  -6,   0,  }, /* Q */
+    {  -2,  -5,  -3,  -1,  -4,  -3,   0,  -4,   2,  -3,  -2,  -1,  -3,   1,   6,  -1,  -2,  -3,  -4,  -3,   0,  -2,   0,   0,   0,   0,  -2,  -6,   0,  }, /* R */
+    {   1,  -2,  -1,  -1,  -3,  -1,  -2,  -3,  -1,  -3,  -2,   0,  -2,  -1,  -1,   5,   1,  -2,  -4,  -3,   0,   0,   0,  -1,   0,   0,  -1,  -6,   0,  }, /* S */
+    {   0,  -2,  -2,  -1,  -3,  -3,  -2,  -1,  -1,  -2,  -1,   0,  -2,  -1,  -2,   1,   6,  -1,  -4,  -2,   0,  -1,   0,  -1,   0,   0,  -1,  -6,   0,  }, /* T */
+    {  -1,  -2,  -5,  -3,  -2,  -5,  -4,   3,  -3,   0,   0,  -4,  -3,  -3,  -3,  -2,  -1,   5,  -3,  -3,   0,  -4,   0,  -3,   0,   0,  -2,  -6,   0,  }, /* V */
+    {  -4,  -4,  -6,  -5,   0,  -4,  -3,  -4,  -5,  -3,  -2,  -5,  -5,  -3,  -4,  -4,  -4,  -3,  11,   2,   0,  -6,   0,  -4,   0,   0,  -3,  -6,   0,  }, /* W */
+    {  -3,  -4,  -4,  -4,   3,  -5,   1,  -2,  -3,  -2,  -2,  -3,  -4,  -3,  -3,  -3,  -2,  -3,   2,   8,   0,  -4,   0,  -3,   0,   0,  -2,  -6,   0,  }, /* Y */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* - */
+    {  -2,  -4,   4,   0,  -4,  -2,  -1,  -5,  -1,  -5,  -4,   4,  -3,  -1,  -2,   0,  -1,  -4,  -6,  -4,   0,   4,   0,   0,   0,   0,  -2,  -6,   0,  }, /* B */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* J */
+    {  -1,  -5,   0,   4,  -4,  -3,   0,  -4,   1,  -4,  -2,  -1,  -2,   4,   0,  -1,  -1,  -3,  -4,  -3,   0,   0,   0,   4,   0,   0,  -1,  -6,   0,  }, /* Z */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* O */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* U */
+    {  -1,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -2,  -1,  -2,  -2,  -1,  -2,  -1,  -1,  -2,  -3,  -2,   0,  -2,   0,  -1,   0,   0,  -2,  -6,   0,  }, /* X */
+    {  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,   0,  -6,   0,  -6,   0,   0,  -6,   1,   0,  }, /* * */
+    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  }, /* ~ */
+    }},
+};
+
+
+#define eslNTDIM 18
+
+struct esl_scorematrix_nt_preload_s {
+  char *name;
+  int   matrix[eslNTDIM][eslNTDIM];
+};
+
+static const struct esl_scorematrix_nt_preload_s ESL_SCOREMATRIX_NT_PRELOADS[] = {
+  { "DNA1", {
+    /*   A    C    G    T    -    R    Y    M    K    S    W    H    B    V    D    N    *    ~ */
+     {  41, -32, -26, -26,   0,  18, -29,  17, -26, -29,  18,   6, -28,   6,   7,   0, -38,   0, }, /*A*/
+     { -32,  39, -38, -17,   0, -35,  18,  15, -26,  14, -24,   6,   6,   3, -28,  -1, -38,   0, }, /*C*/
+     { -26, -38,  46, -31,   0,  22, -34, -32,  21,  20, -29, -32,   8,   9,  10,   1, -38,   0, }, /*G*/
+     { -26, -17, -31,  39,   0, -28,  18, -21,  15, -23,  16,   7,   7, -24,   5,   0, -38,   0, }, /*T*/
+     {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, }, /*-*/
+     {  18, -35,  22, -28,   0,  20, -32,  -2,   3,   1,   0,  -9,  -7,   7,   8,   1, -38,   0, }, /*R*/
+     { -29,  18, -34,  18,   0, -32,  18,   0,  -1,  -1,   0,   7,   6,  -9,  -9,  -1, -38,   0, }, /*Y*/
+     {  17,  15, -32, -21,   0,  -2,   0,  16, -26,  -3,   1,   6,  -8,   4,  -7,  -1, -38,   0, }, /*M*/
+     { -26, -26,  21,  15,   0,   3,  -1, -26,  18,   3,  -1,  -8,   7,  -5,   7,   1, -38,   0, }, /*K*/
+     { -29,  14,  20, -23,   0,   1,  -1,  -3,   3,  17, -26,  -9,   7,   6,  -6,   0, -38,   0, }, /*S*/
+     {  18, -24, -29,  16,   0,   0,   0,   1,  -1, -26,  17,   7,  -8,  -7,   6,   0, -38,   0, }, /*W*/
+     {   6,   6, -32,   7,   0,  -9,   7,   6,  -8,  -9,   7,   7,  -3,  -3,  -3,   0, -38,   0, }, /*H*/
+     { -28,   6,   8,   7,   0,  -7,   6,  -8,   7,   7,  -8,  -3,   7,  -2,  -2,   0, -38,   0, }, /*B*/
+     {   6,   3,   9, -24,   0,   7,  -9,   4,  -5,   6,  -7,  -3,  -2,   6,  -1,   0, -38,   0, }, /*V*/
+     {   7, -28,  10,   5,   0,   8,  -9,  -7,   7,  -6,   6,  -3,  -2,  -1,   7,   0, -38,   0, }, /*D*/
+     {   0,  -1,   1,   0,   0,   1,  -1,  -1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0, }, /*N*/
+     { -38, -38, -38, -38,   0, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38,   0, -38,   0, }, /***/
+     {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, }, /*~*/
+   }},
+
+};
+
+
+
+
+
+
+/* Function:  esl_scorematrix_Set()
+ * Synopsis:  Set one of several standard matrices.
+ *
+ * Purpose:   Set the allocated score matrix <S> to standard score
+ *            matrix <name>, where <name> is the name of one of
+ *            several matrices built-in to Easel. For example,
+ *            <esl_scorematrix_Set("BLOSUM62", S)>.
+ *            
+ *            The alphabet for <S> (<S->abc_r>) must be set already.
+ *            
+ *            Built-in amino acid score matrices in Easel include
+ *            BLOSUM45, BLOSUM50, BLOSUM62, BLOSUM80, BLOSUM90, PAM30,
+ *            PAM70, PAM120, and PAM240.
+ *
+ * Returns:   <eslOK> on success, and the scores in <S> are set.
+ *            
+ *            <eslENOTFOUND> if <name> is not available as a built-in matrix
+ *            for the alphabet that's set in <S>.
+ * 
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_scorematrix_Set(const char *name, ESL_SCOREMATRIX *S)
+{
+  int which;
+  int x, y;
+
+  if (S->abc_r->type == eslAMINO)
+  {
+      int nmat = sizeof(ESL_SCOREMATRIX_AA_PRELOADS) / sizeof(struct esl_scorematrix_aa_preload_s);
+      for (which = 0; which < nmat; which++)
+        if (strcmp(ESL_SCOREMATRIX_AA_PRELOADS[which].name, name) == 0) break;
+      if (which >= nmat) return eslENOTFOUND;
+
+      ESL_DASSERT1(( S->Kp >= 24 ));  // strcpy below is safe. The assertion tries to convince static analyzer of that.
+      strcpy(S->outorder, "ARNDCQEGHILKMFPSTWYVBZX*"); 
+      /* All standard PAM, BLOSUM matrices have same list of valid
+       * residues. If that ever changes, make <outorder> a data elem in the
+       * structures above.
+       */
+
+      /* Transfer scores from static built-in storage */
+      for (x = 0; x < S->Kp; x++)
+        for (y = 0; y < S->Kp; y++)
+          S->s[x][y] = ESL_SCOREMATRIX_AA_PRELOADS[which].matrix[x][y];
+
+  }
+  else if (S->abc_r->type == eslDNA || S->abc_r->type == eslRNA)
+  {
+    int nmat = sizeof(ESL_SCOREMATRIX_NT_PRELOADS) / sizeof(struct esl_scorematrix_nt_preload_s);
+    for (which = 0; which < nmat; which++)
+      if (strcmp(ESL_SCOREMATRIX_NT_PRELOADS[which].name, name) == 0) break;
+    if (which >= nmat) return eslENOTFOUND;
+
+    ESL_DASSERT1(( S->Kp >= 15 ));  // strcpy below is safe. The assertion tries to convince static analyzer of that.
+    strcpy(S->outorder, "ACGTRYMKSWHBVDN");
+
+    /* Transfer scores from static built-in storage */
+    for (x = 0; x < S->Kp; x++)
+      for (y = 0; y < S->Kp; y++)
+        S->s[x][y] = ESL_SCOREMATRIX_NT_PRELOADS[which].matrix[x][y];
+
+  }
+  else return eslENOTFOUND;	/* no DNA matrices are built in yet! */
+
+  
+  /* Use <outorder> list to set <isval[x]> */
+  S->nc = strlen(S->outorder);
+  for (y = 0; y < S->nc; y++) {
+    x = esl_abc_DigitizeSymbol(S->abc_r, S->outorder[y]);
+    S->isval[x] = TRUE;
+  }
+
+  /* Copy the name */
+  if (esl_strdup(name, -1, &(S->name)) != eslOK) return eslEMEM;
+  return eslOK;
+}
+
+
+/* Function:  esl_scorematrix_SetIdentity()
+ * Synopsis:  Set matrix to +1 match, 0 mismatch.
+ *
+ * Purpose:   Sets score matrix <S> to be +1 for a match, 
+ *            0 for a mismatch. <S> may be for any alphabet.
+ *            
+ *            Rarely useful in real use, but may be useful to create
+ *            simple examples (including debugging).
+ *
+ * Returns:   <eslOK> on success, and the scores in <S> are set.
+ */
+int
+esl_scorematrix_SetIdentity(ESL_SCOREMATRIX *S)
+{
+  int a;
+  int x;
+
+  for (a = 0; a < S->abc_r->Kp*S->abc_r->Kp; a++) S->s[0][a] = 0;
+  for (a = 0; a < S->K; a++)                      S->s[a][a] = 1;
+
+  for (x = 0;           x < S->K;  x++)      S->isval[x] = TRUE;
+  for (x = S->abc_r->K; x < S->Kp; x++)      S->isval[x] = FALSE;
+  
+  strncpy(S->outorder, S->abc_r->sym, S->K);  
+  S->outorder[S->K] = '\0';
+  S->nc             = S->K;
+  return eslOK;
+}
+/*---------------- end, some classic score matrices  --------*/
+
+
+/*****************************************************************
+ *# 3. Deriving a score matrix probabilistically.
+ *****************************************************************/
+
+/* Function:  esl_scorematrix_SetFromProbs()
+ * Synopsis:  Set matrix from target and background probabilities.
+ *
+ * Purpose:   Sets the scores in a new score matrix <S> from target joint
+ *            probabilities in <P>, query background probabilities <fi>, and 
+ *            target background probabilities <fj>, with scale factor <lambda>:
+ *                 $s_{ij} = \frac{1}{\lambda} \frac{p_{ij}}{f_i f_j}$.
+ *                 
+ *            Size of everything must match the canonical alphabet
+ *            size in <S>. That is, <S->abc->K> is the canonical
+ *            alphabet size of <S>; <P> must contain $K times K$
+ *            probabilities $P_{ij}$, and <fi>,<fj> must be vectors of
+ *            K probabilities. All probabilities must be nonzero.
+ *            
+ * Args:      S      - score matrix to set scores in
+ *            lambda - scale factor     
+ *            P      - matrix of joint probabilities P_ij (KxK)
+ *            fi     - query background probabilities (0..K-1)
+ *            fj     - target background probabilities 
+ *
+ * Returns:   <eslOK> on success, and <S> contains the calculated score matrix.
+ */
+int
+esl_scorematrix_SetFromProbs(ESL_SCOREMATRIX *S, double lambda, const ESL_DMATRIX *P, const double *fi, const double *fj)
+{
+  int    i,j;
+  double sc;
+  
+  for (i = 0; i < S->abc_r->K; i++)
+    for (j = 0; j < S->abc_r->K; j++)
+      {
+	sc = log(P->mx[i][j] / (fi[i] * fj[j])) / lambda;
+	S->s[i][j] = (int) (sc + (sc>0 ? 0.5 : -0.5)); /* that's rounding to the nearest integer */
+      }
+
+  for (i = 0; i < S->abc_r->K; i++)
+    S->isval[i] = TRUE;
+  S->nc = S->abc_r->K;
+
+  strncpy(S->outorder, S->abc_r->sym, S->abc_r->K);
+  S->outorder[S->nc] = '\0';
+  return eslOK;
+}
+
+
+/* Function:  esl_scorematrix_SetWAG()
+ * Synopsis:  Set matrix using the WAG evolutionary model.           
+ *
+ * Purpose:   Parameterize an amino acid score matrix <S> using the WAG
+ *            rate matrix \citep{WhelanGoldman01} as the underlying
+ *            evolutionary model, at a distance of <t>
+ *            substitutions/site, with scale factor <lambda>.
+ *
+ * Args:      S      - score matrix to set parameters in. Must be created for
+ *                     an amino acid alphabet.
+ *            lambda - scale factor for scores     
+ *            t      - distance to exponentiate WAG to, in substitutions/site         
+ *                 
+ * Returns:   <eslOK> on success, and the 20x20 residue scores in <S> are set.
+ *
+ * Throws:    <eslEINVAL> if <S> isn't an allocated amino acid score matrix.
+ *            <eslEMEM> on allocation failure.
+ */
+int
+esl_scorematrix_SetWAG(ESL_SCOREMATRIX *S, double lambda, double t)
+{
+  ESL_DMATRIX *Q = NULL;
+  ESL_DMATRIX *P = NULL;
+  static double wagpi[20];
+  int i,j;
+  int status;
+
+  if (S->K != 20) ESL_EXCEPTION(eslEINVAL, "Must be using an amino acid alphabet (K=20) to make WAG-based matrices");
+
+  if (( Q = esl_dmatrix_Create(20, 20))     == NULL)  { status = eslEMEM; goto ERROR; }
+  if (( P = esl_dmatrix_Create(20, 20))     == NULL)  { status = eslEMEM; goto ERROR; }
+  if ((status = esl_composition_WAG(wagpi)) != eslOK) goto ERROR;
+  if ((status = esl_rmx_SetWAG(Q, wagpi))   != eslOK) goto ERROR;
+  if ((status = esl_dmx_Exp(Q, t, P))       != eslOK) goto ERROR;
+
+  for (i = 0; i < 20; i++) 
+    for (j = 0; j < 20; j++)
+      P->mx[i][j] *= wagpi[i];	/* P_ij = P(j|i) pi_i */
+  
+  esl_scorematrix_SetFromProbs(S, lambda, P, wagpi, wagpi);
+
+  if ((status = esl_strdup("WAG", -1, &(S->name))) != eslOK) goto ERROR;
+
+  esl_dmatrix_Destroy(Q);
+  esl_dmatrix_Destroy(P);
+  return eslOK;
+
+ ERROR:
+  if (Q != NULL) esl_dmatrix_Destroy(Q);
+  if (Q != NULL) esl_dmatrix_Destroy(P);
+  return status;
+}
+/*--------------- end, deriving score matrices ------------------*/
+
+
+
+/*****************************************************************
+ *# 4. Reading/writing matrices from/to files
+ *****************************************************************/
+
+/* Function:  esl_scorematrix_Read()
+ * Synopsis:  Read a standard matrix input file.
+ *
+ * Purpose:   Given a pointer <efp> to an open file parser for a file
+ *            containing a score matrix (such as a PAM or BLOSUM
+ *            matrix), parse the file and create a new score matrix
+ *            object. The scores are expected to be for the alphabet
+ *            <abc>. 
+ *            
+ *            The score matrix file is in the format that BLAST or
+ *            FASTA use. The first line is a header contains N
+ *            single-letter codes for the residues. Each of N
+ *            subsequent rows optionally contains a residue row label
+ *            (in the same order as the columns), followed by N
+ *            residue scores.  (Older matrix files do not contain the
+ *            leading row label; newer ones do.) The residues may
+ *            appear in any order. They must minimally include the
+ *            canonical K residues (K=4 for DNA, K=20 for protein),
+ *            and may also contain none, some, or all degeneracy
+ *            codes. Any other residue code that is not in the Easel
+ *            digital alphabet (including, in particular, the '*' code
+ *            for a stop codon) is ignored by the parser.
+ *
+ * Returns:   <eslOK> on success, and <ret_S> points to a newly allocated 
+ *            score matrix. 
+ *
+ *            Returns <eslEFORMAT> on parsing error; in which case, <ret_S> is
+ *            returned <NULL>, and <efp->errbuf> contains an informative
+ *            error message.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_scorematrix_Read(ESL_FILEPARSER *efp, const ESL_ALPHABET *abc, ESL_SCOREMATRIX **ret_S)
+{
+  int status;
+  ESL_SCOREMATRIX *S     = NULL;
+  int             *map   = NULL; /* maps col/row index to digital alphabet x */
+  char            *tok;
+  int              toklen;
+  int              c, x;
+  int              row,col;
+
+  /* Allocate the matrix
+   */
+  if ((S = esl_scorematrix_Create(abc)) == NULL) { status = eslEMEM; goto ERROR; }
+
+  /* Make sure we've got the comment character set properly in the fileparser.
+   * Score matrices use #.
+   */
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  /* Look for the first non-blank, non-comment line in the file.  That line
+   * gives us the single-letter codes in the order that the file's using.
+   */
+  if ((status = esl_fileparser_NextLine(efp)) != eslOK) ESL_XFAIL(eslEFORMAT, efp->errbuf, "file appears to be empty");
+
+  /* Read the characters: count them and store them in order in label[0..nc-1].
+   * nc cannot exceed Kp+1 in our expected alphabet (+1, for the stop character *)
+   */
+  S->nc = 0;
+  while ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) == eslOK)
+    {
+      if (S->nc >= abc->Kp) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Header contains more residues than expected for alphabet");
+      if (toklen != 1)      ESL_XFAIL(eslEFORMAT, efp->errbuf, "Header can only contain single-char labels; %s is invalid", tok);
+      S->outorder[S->nc++] = *tok;
+    }
+  if (status != eslEOL) ESL_XFAIL(status, efp->errbuf, "Unexpected failure of esl_fileparser_GetTokenOnLine()");
+  S->outorder[S->nc] = '\0';	/* NUL terminate */
+  
+  /* Verify that these labels for the score matrix seem plausible, given our alphabet.
+   * This sets S->isval array: which residues we have scores for.
+   * It also sets the map[] array, which maps coord in label[] to x in alphabet.
+   */
+  ESL_ALLOC(map, sizeof(int) * S->nc);
+  for (c = 0; c < S->nc; c++)
+    {
+      if (esl_abc_CIsValid(abc, S->outorder[c])) 
+	{  
+	  x = esl_abc_DigitizeSymbol(abc, S->outorder[c]);
+	  map[c] = x;
+	  S->isval[x] = TRUE;
+	}
+      else
+	ESL_XFAIL(eslEFORMAT, efp->errbuf, "Don't know how to deal with residue %c in matrix file", S->outorder[c]);
+    }
+  for (x = 0; x < abc->K; x++)
+    if (! S->isval[x]) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Expected to see a column for residue %c", abc->sym[x]);
+
+
+  /* Read nc rows, one at a time;
+   * on each row, read nc+1 or nc tokens, of which nc are scores (may lead with a label or not)
+   */
+  for (row = 0; row < S->nc; row++)
+    {
+      if ((status = esl_fileparser_NextLine(efp)) != eslOK) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Unexpectedly ran out of lines in file");
+      for (col = 0; col < S->nc; col++)
+	{
+	  if ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Unexpectedly ran out of fields on line");
+	  if (col == 0 && *tok == S->outorder[row]) { col--; continue; } /* skip leading label */
+
+	  S->s[map[row]][map[col]] = atoi(tok);
+	}
+      if ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslEOL)  ESL_XFAIL(eslEFORMAT, efp->errbuf, "Too many fields on line");
+    }
+  if ((status = esl_fileparser_NextLine(efp)) != eslEOF) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Too many lines in file");
+  
+
+  /* Annotate the score matrix */
+  if ((status = esl_strdup  (efp->filename, -1,    &(S->path))) != eslOK) goto ERROR;
+  if ((status = esl_FileTail(efp->filename, FALSE, &(S->name))) != eslOK) goto ERROR;
+
+  free(map);
+  *ret_S = S;
+  return eslOK;
+
+ ERROR:
+  esl_scorematrix_Destroy(S);
+  if (map != NULL) free(map);
+  *ret_S = NULL;
+  return status;
+}
+
+/* Function:  esl_scorematrix_Write()
+ * Synopsis:  Write a BLAST-compatible score matrix file.
+ *
+ * Purpose:   Writes a score matrix <S> to an open stream <fp>, in 
+ *            format compatible with BLAST, FASTA, and other common
+ *            sequence alignment software.
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEWRITE> on any system write error, such as filled disk.
+ */
+int
+esl_scorematrix_Write(FILE *fp, const ESL_SCOREMATRIX *S)
+{
+  int a,b;			
+  int x,y;
+  int nc = S->nc;
+  
+  /* The header line, with column labels for residues */
+  if (fprintf(fp, "  ") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed"); 
+  for (a = 0; a < nc; a++) 
+    { if (fprintf(fp, "  %c ", S->outorder[a]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed"); }
+  if (fprintf(fp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed");
+  
+  /* The data */
+  for (a = 0; a < nc; a++)
+    {
+      if (fprintf(fp, "%c ", S->outorder[a]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed");
+      for (b = 0; b < nc; b++)
+	{
+	  x = esl_abc_DigitizeSymbol(S->abc_r, S->outorder[a]);
+	  y = esl_abc_DigitizeSymbol(S->abc_r, S->outorder[b]);
+	  if (fprintf(fp, "%3d ", S->s[x][y]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed");
+	}
+      if (fprintf(fp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed");
+    }
+  return eslOK;
+}
+/*-------------- end, reading/writing matrices ------------------*/
+
+
+
+/*****************************************************************
+ *# 5. Implicit probabilistic basis, I: given bg.
+ *****************************************************************/ 
+
+static int set_degenerate_probs(const ESL_ALPHABET *abc, ESL_DMATRIX *P, double *fi, double *fj);
+
+struct lambda_params {
+  const double *fi;
+  const double *fj;
+  const ESL_SCOREMATRIX *S;
+};
+
+static int
+lambda_fdf(double lambda, void *params, double *ret_fx, double *ret_dfx)
+{
+  struct lambda_params *p = (struct lambda_params *) params;
+  int    i,j;
+  double tmp;
+  
+  *ret_fx  = 0.;
+  *ret_dfx = 0.;
+  for (i = 0; i < p->S->K; i++)
+    for (j = 0; j < p->S->K; j++)
+      {
+	tmp      = p->fi[i] * p->fj[j] * exp(lambda * (double) p->S->s[i][j]);
+	*ret_fx  += tmp;
+	*ret_dfx += tmp * (double) p->S->s[i][j];
+      }
+  *ret_fx -= 1.0;
+  return eslOK;
+}
+
+/* Function:  esl_scorematrix_ProbifyGivenBG()
+ * Synopsis:  Obtain $P_{ij}$ for matrix with known $\lambda$ and background. 
+ *
+ * Purpose:   Given a score matrix <S> and known query and target
+ *            background frequencies <fi> and <fj> respectively, calculate scale
+ *            <lambda> and implicit target probabilities \citep{Altschul01}. 
+ *            Optionally returns either (or both) in <opt_lambda> and <opt_P>.
+ *
+ *            The implicit target probabilities are returned in a
+ *            newly allocated $Kp \times Kp$ <ESL_DMATRIX>, over both
+ *            the canonical (typically K=4 or K=20) residues in the
+ *            residue alphabet, and the degenerate residue codes.
+ *            Values involving degenerate residue codes are marginal
+ *            probabilities (i.e. summed over the degeneracy).
+ *            Only actual residue degeneracy can have nonzero values
+ *            for <p_ij>; by convention, all values involving the
+ *            special codes for gap, nonresidue, and missing data
+ *            (<K>, <Kp-2>, <Kp-1>) are 0.
+ *            
+ *            If the caller wishes to convert this joint probability
+ *            matrix to conditionals, it can take advantage of the
+ *            fact that the degenerate probability <P(X,j)> is our
+ *            marginalized <pj>, and <P(i,X)> is <pi>. 
+ *             i.e., <P(j|i) = P(i,j) / P(i) = P(i,j) / P(X,j)>.
+ *            Those X values are <P->mx[i][esl_abc_GetUnknown(abc)]>,
+ *            <P->mx[esl_abc_GetUnknown(abc)][j]>; equivalently, just use
+ *            code <Kp-3> for X.
+ *             
+ *            By convention, i is always the query sequence, and j is
+ *            always the target. We do not assume symmetry in the
+ *            scoring system, though that is usually the case.
+ *            
+ * Args:      S          - score matrix
+ *            fi         - background frequencies for query sequence i
+ *            fj         - background frequencies for target sequence j
+ *            opt_lambda - optRETURN: calculated $\lambda$ parameter
+ *            opt_P      - optRETURN: implicit target probabilities $p_{ij}$; a KxK DMATRIX.                  
+ *
+ * Returns:   <eslOK> on success, <*ret_lambda> contains the
+ *            calculated $\lambda$ parameter, and <*ret_P> points to
+ *            the target probability matrix (which is allocated here,
+ *            and must be free'd by caller with <esl_dmatrix_Destroy(*ret_P)>.
+ *            
+ * Throws:    <eslEMEM> on allocation error; 
+ *            <eslEINVAL> if matrix is invalid and has no solution for $\lambda$;
+ *            <eslENOHALT> if the solver fails to find $\lambda$.
+ *            In these cases, <*ret_lambda> is 0.0, and <*ret_P> is <NULL>. 
+ */
+int
+esl_scorematrix_ProbifyGivenBG(const ESL_SCOREMATRIX *S, const double *fi, const double *fj, 
+			       double *opt_lambda, ESL_DMATRIX **opt_P)
+{
+  ESL_ROOTFINDER *R = NULL;
+  ESL_DMATRIX    *P = NULL;
+  struct lambda_params p;
+  double lambda_guess;
+  double lambda;
+  int    i,j;
+  double fx, dfx;
+  int    status;
+
+  /* First, solve for lambda by rootfinding. */
+  /* Set up the data passed to the lambda_fdf function. */
+  p.fi = fi;
+  p.fj = fj;
+  p.S  = S;
+
+  /* Bracket the root.
+   * It's important that we come at the root from the far side, where
+   * f(lambda) is positive; else we may identify the root we don't want
+   * at lambda=0.
+   */
+  fx           = -1.0;
+  lambda_guess = 1. / (double) esl_scorematrix_Max(S);
+  for (; lambda_guess < 50.; lambda_guess *= 2.0) {
+    lambda_fdf(lambda_guess, &p, &fx, &dfx);
+    if (fx > 0) break;
+  }
+  if (fx <= 0) ESL_XEXCEPTION(eslEINVAL, "Failed to bracket root for solving lambda");
+
+  /* Create a solver and find lambda by Newton/Raphson */
+  if ((    R   = esl_rootfinder_CreateFDF(lambda_fdf, &p) )         == NULL) { status = eslEMEM; goto ERROR; }
+  if (( status = esl_root_NewtonRaphson(R, lambda_guess, &lambda))  != eslOK) goto ERROR;
+  
+  /* Now, given solution for lambda, calculate P */
+  if (opt_P != NULL) 
+    {
+      if ((P = esl_dmatrix_Create(S->Kp, S->Kp)) == NULL) { status = eslEMEM; goto ERROR; }
+      for (i = 0; i < S->K; i++)
+	for (j = 0; j < S->K; j++)
+	  P->mx[i][j] = fi[i] * fj[j] * exp(lambda * (double) S->s[i][j]);
+      set_degenerate_probs(S->abc_r, P, NULL, NULL);
+    }
+
+  esl_rootfinder_Destroy(R);
+  if (opt_lambda) *opt_lambda = lambda;
+  if (opt_P)      *opt_P      = P;  
+  return eslOK;
+
+ ERROR:
+  if (R)          esl_rootfinder_Destroy(R);
+  if (opt_lambda) *opt_lambda = 0.;
+  if (opt_P)      *opt_P      = NULL;
+  return status;
+}
+
+
+/* set_degenerate_probs()
+ * 
+ * Used by both esl_scorematrix_Probify() and
+ * esl_scorematrix_ProbifyGivenBG() to set degenerate residue
+ * probabilities once probs for canonical residues are known.
+ * 
+ * Input: P->mx[i][j] are joint probabilities p_ij for the canonical
+ *        alphabet 0..abc->K-1, but P matrix is allocated for Kp X Kp.
+ * 
+ * Calculate marginal sums for all i,j pairs involving degeneracy
+ * codes. Fill in [i][j'=K..Kp-1], [i'=K..Kp-1][j], and
+ * [i'=K..Kp-1][j'=K..Kp-1] for degeneracies i',j'. Any p_ij involving
+ * a gap (K), nonresidue (Kp-2), or missing data (Kp-1) character is
+ * set to 0.0 by convention.
+ *
+ * Don't assume symmetry. 
+ * 
+ * If <fi> or <fj> background probability vectors are non-<NULL>, set
+ * them too.  (Corresponding to the assumption of background =
+ * marginal probs, rather than background being given.) This takes
+ * advantage of the fact that P(X,i) is already the marginalized p_i,
+ * and P(j,X) is p_j.
+ */
+static int
+set_degenerate_probs(const ESL_ALPHABET *abc, ESL_DMATRIX *P, double *fi, double *fj)
+{
+  int i,j;	/* indices into canonical codes  */
+  int ip,jp;	/* indices into degenerate codes */
+
+  /* sum to get [i=0..K] canonicals to [jp=K+1..Kp-3] degeneracies; 
+   * and [jp=K,Kp-2,Kp-1] set to 0.0
+   */
+  for (i = 0; i < abc->K; i++)
+    {
+      P->mx[i][abc->K] = 0.0;
+      for (jp = abc->K+1; jp < abc->Kp-2; jp++)
+	{
+	  P->mx[i][jp] = 0.0;
+	  for (j = 0; j < abc->K; j++)
+	    if (abc->degen[jp][j]) P->mx[i][jp] += P->mx[i][j];
+	}
+      P->mx[i][abc->Kp-2] = 0.0;
+      P->mx[i][abc->Kp-1] = 0.0;
+    }
+
+  esl_vec_DSet(P->mx[abc->K], abc->Kp, 0.0); /* gap row: all 0.0 by convention */
+
+  /* [ip][all] */
+  for (ip = abc->K+1; ip < abc->Kp-2; ip++)
+    {
+      /* [ip][j]: degenerate i, canonical j */
+      for (j = 0; j < abc->K; j++)      
+	{
+	  P->mx[ip][j] = 0.0;
+	  for (i = 0; i < abc->K; i++)
+	    if (abc->degen[ip][i]) P->mx[ip][j] += P->mx[i][j];
+	}
+      P->mx[ip][abc->K] = 0.0;
+
+      /* [ip][jp]: both positions degenerate */
+      for (jp = abc->K+1; jp < abc->Kp-2; jp++)      
+	{
+	  P->mx[ip][jp] = 0.0;
+	  for (j = 0; j < abc->K; j++)
+	    if (abc->degen[jp][j]) P->mx[ip][jp] += P->mx[ip][j];
+	}
+      P->mx[ip][abc->Kp-2] = 0.0;      
+      P->mx[ip][abc->Kp-1] = 0.0;      
+    }
+
+  esl_vec_DSet(P->mx[abc->Kp-2], abc->Kp, 0.0); /* nonresidue data * row, all 0.0 */
+  esl_vec_DSet(P->mx[abc->Kp-1], abc->Kp, 0.0); /* missing data ~ row, all 0.0    */
+
+  if (fi != NULL) { /* fi[i'] = p(i',X) */
+    fi[abc->K] = 0.0;
+    for (ip = abc->K+1; ip < abc->Kp-2; ip++) fi[ip] = P->mx[ip][abc->Kp-3];
+    fi[abc->Kp-2] = 0.0;
+    fi[abc->Kp-1] = 0.0;
+  }
+
+  if (fj != NULL) { /* fj[j'] = p(X,j')*/
+    fj[abc->K] = 0.0;
+    for (jp = abc->K+1; jp < abc->Kp-2; jp++) fj[jp] = P->mx[abc->Kp-3][jp];
+    fj[abc->Kp-2] = 0.0;
+    fj[abc->Kp-1] = 0.0;
+  }
+
+  return eslOK;
+}
+/*------------- end, implicit prob basis, bg known --------------*/
+
+
+/*****************************************************************
+ *# 6. Implicit probabilistic basis, II: bg unknown 
+ *****************************************************************/
+
+/* This section implements one of the key ideas in Yu and Altschul,
+ * PNAS 100:15688, 2003 [YuAltschul03], and Yu and Altschul,
+ * Bioinformatics 21:902-911, 2005 [YuAltschul05]:
+ * 
+ * Given a valid score matrix, calculate its probabilistic
+ * basis (P_ij, f_i, f_j, and lambda), on the assumption that
+ * the background probabilities are the marginals of P_ij.
+ * 
+ * However, this procedure appears to be unreliable.
+ * There are often numerous invalid solutions with negative
+ * probabilities, and the Yu/Altschul Y function (that we've solving
+ * for its root) is often discontinuous. Although Yu and Altschul say
+ * they can just keep searching for solutions until a valid one is
+ * found, and "this procedure presents no difficulties in practice", I
+ * don't see how.
+ * 
+ * For example, run the procedure on PAM190 and PAM200. For PAM190
+ * you will obtain a valid solution with lambda = 0.2301. For PAM200
+ * you will obtain an *invalid* solution with lambda = 0.2321, and
+ * negative probabilities f_{ENT} (and all p_ij involving ENT and 
+ * the other 17 aa). There is a discontinuity in the function, but 
+ * it's not near these lambdas, it's at about lambda=0.040, so it's 
+ * not that we fell into a discontinuity: the bisection procedure on
+ * lambda is working smoothly. And if you calculate a score matrix again
+ * from the invalid PAM200 solution, you get PAM200 back, so it's not
+ * that there's an obvious bug -- we do obtain a "solution" to PAM200,
+ * just not one with positive probabilities. It's not obvious how
+ * we could find a different solution to PAM200 than the invalid one!
+ *
+ * What we're going to do [xref J7/126, Apr 2011] is to deprecate 
+ * the Yu/Altschul procedure altogether.
+ */
+struct yualtschul_params {
+  ESL_DMATRIX *S;   /* pointer to the KxK score matrix w/ values cast to doubles */		
+  ESL_DMATRIX *M;   /* not a param per se: alloc'ed storage for M matrix provided to the objective function */
+  ESL_DMATRIX *Y;   /* likewise, alloc'ed storage for Y (M^-1) matrix provided to obj function */
+};
+
+/* yualtschul_scorematrix_validate
+ * See start of section 3, p. 903, YuAltschul05
+ * (Implementation could be more efficient here; don't really have
+ *  to sweep the entire matrix twice to do this.)
+ */
+static int
+yualtschul_scorematrix_validate(const ESL_SCOREMATRIX *S)
+{
+  int i, j;
+  int has_neg, has_pos;
+
+  /* each row must have at least one positive and one negative score */
+  for (i = 0; i < S->K; i++)
+    {
+      has_neg = has_pos = FALSE;
+      for (j = 0; j < S->K; j++)
+	{
+	  if (S->s[i][j] > 0) has_pos = TRUE;
+	  if (S->s[i][j] < 0) has_neg = TRUE;
+	}
+      if (! has_pos || ! has_neg) return eslFAIL;
+    }
+  
+  /* ditto for columns */
+  for (j = 0; j < S->K; j++)
+    {
+      has_neg = has_pos = FALSE;
+      for (i = 0; i < S->K; i++)
+	{
+	  if (S->s[i][j] > 0) has_pos = TRUE;
+	  if (S->s[i][j] < 0) has_neg = TRUE;
+	}
+      if (! has_pos || ! has_neg) return eslFAIL;
+    }
+      
+  return eslOK;
+}
+
+/* upper bound bracketing lambda solution: eqn (12) in [YuAltschul05] */
+static double
+yualtschul_upper_bound(const ESL_DMATRIX *Sd)
+{
+  int    i;
+  double minimax;
+  double maxlambda;
+  
+  /* minimax = c in YuAltschul05 p.903 = smallest of the max scores in each row/col */
+  minimax = esl_vec_DMax(Sd->mx[0], Sd->n); 
+  for (i = 1; i < Sd->n; i++)
+    minimax = ESL_MIN(minimax, esl_vec_DMax(Sd->mx[i], Sd->n));
+  
+  maxlambda = log((double) Sd->n) / minimax; /* eqn (12), YuAltschul05 */
+  return maxlambda;
+}
+
+static int
+yualtschul_solution_validate(const ESL_DMATRIX *P, const double *fi, const double *fj)
+{
+  
+  if ( esl_dmx_Min(P)         < 0.0)  return eslFAIL;
+  if ( esl_vec_DMin(fi, P->n) < 0.0)  return eslFAIL;
+  if ( esl_vec_DMin(fj, P->n) < 0.0)  return eslFAIL;
+
+  return eslOK;
+}
+
+/* yualtschul_func()
+ *
+ * This is the objective function we try to find a root of. 
+ * Its prototype is dictated by the esl_rootfinder API.
+ */
+static int
+yualtschul_func(double lambda, void *params, double *ret_fx)
+{
+  int status;
+  struct yualtschul_params *p = (struct yualtschul_params *) params;
+  ESL_DMATRIX  *S = p->S;
+  ESL_DMATRIX  *M = p->M;
+  ESL_DMATRIX  *Y = p->Y;
+  int i,j;
+
+  /* the M matrix has entries M_ij = e^{lambda * s_ij} */
+  for (i = 0; i < S->n; i++)
+    for (j = 0; j < S->n; j++)
+      M->mx[i][j] = exp(lambda * S->mx[i][j]);
+
+  /* the Y matrix is the inverse of M */
+  if ((status = esl_dmx_Invert(M, Y)) != eslOK) goto ERROR;
+
+  /* We're trying to find the root of \sum_ij Y_ij - 1 = 0 */
+  *ret_fx = esl_dmx_Sum(Y) - 1.;
+  return eslOK;
+
+ ERROR:
+  *ret_fx = 0.;
+  return status;
+}
+
+/* yualtschul_engine()
+ *
+ * This function backcalculates the probabilistic basis for a score
+ * matrix S, when S is a double-precision matrix. Providing this
+ * as a separate "engine" and writing esl_scorematrix_Probify()
+ * as a wrapper around it allows us to separately test inaccuracy
+ * due to numerical performance of our linear algebra, versus 
+ * inaccuracy due to integer roundoff in integer scoring matrices.
+ * 
+ * It is not uncommon for this to fail when S is derived from
+ * integer scores. Because the scores may have been provided by the
+ * user, and this may be our first chance to detect the "user error"
+ * of an invalid matrix, this engine returns <eslEINVAL> as a normal error
+ * if it can't reach a valid solution.
+ */
+static int 
+yualtschul_engine(ESL_DMATRIX *S, ESL_DMATRIX *P, double *fi, double *fj, double *ret_lambda)
+{
+  int status;
+  ESL_ROOTFINDER *R = NULL;
+  struct yualtschul_params p;
+  double lambda;
+  double xl, xr;
+  double fx  = -1.0;
+  int    i,j;
+
+  /* Set up a bisection method to find lambda */
+  p.S = S;
+  p.M = p.Y = NULL;
+  if ((p.M = esl_dmatrix_Create(S->n, S->n))           == NULL) { status = eslEMEM; goto ERROR; }
+  if ((p.Y = esl_dmatrix_Create(S->n, S->n))           == NULL) { status = eslEMEM; goto ERROR; }
+  if ((R = esl_rootfinder_Create(yualtschul_func, &p)) == NULL) { status = eslEMEM; goto ERROR; }
+  
+  /* Identify suitable brackets on lambda. */
+  xr = yualtschul_upper_bound(S);
+
+  for (xl = xr; xl > 1e-10; xl /= 1.6) {
+    if ((status = yualtschul_func(xl, &p, &fx))  != eslOK) goto ERROR;
+    if (fx > 0.) break;
+  }
+  if (fx <= 0.) { status = eslEINVAL; goto ERROR; }
+
+  for (; xr < 100.; xr *= 1.6) {
+    if ((status = yualtschul_func(xr, &p, &fx))  != eslOK) goto ERROR;
+    if (fx < 0.) break;
+  }
+  if (fx >= 0.) { status = eslEINVAL; goto ERROR; }
+
+  /* Find lambda by bisection */
+  if (( status = esl_root_Bisection(R, xl, xr, &lambda)) != eslOK) goto ERROR;
+
+  /* Find fi, fj from Y: fi are column sums, fj are row sums */
+  for (i = 0; i < S->n; i++) {
+    fi[i] = 0.;
+    for (j = 0; j < S->n; j++) fi[i] += p.Y->mx[j][i];
+  }
+  for (j = 0; j < S->n; j++) {
+    fj[j] = 0.;
+    for (i = 0; i < S->n; i++) fj[j] += p.Y->mx[j][i];
+  }
+
+  /* Find p_ij */
+  for (i = 0; i < S->n; i++) 
+    for (j = 0; j < S->n; j++)
+      P->mx[i][j] = fi[i] * fj[j] * p.M->mx[i][j];
+
+  *ret_lambda = lambda;
+  esl_dmatrix_Destroy(p.M);
+  esl_dmatrix_Destroy(p.Y);
+  esl_rootfinder_Destroy(R);
+  return eslOK;
+
+ ERROR:
+  if (p.M) esl_dmatrix_Destroy(p.M);
+  if (p.Y) esl_dmatrix_Destroy(p.Y);
+  if (R)   esl_rootfinder_Destroy(R);
+  return status;
+}
+
+
+/* Function:  esl_scorematrix_Probify()
+ * Synopsis:  Calculate the probabilistic basis of a score matrix.
+ *
+ * Purpose:   Reverse engineering of a score matrix: given a "valid"
+ *            substitution matrix <S>, obtain implied joint
+ *            probabilities $p_{ij}$, query composition $f_i$, target
+ *            composition $f_j$, and scale $\lambda$, by assuming that
+ *            $f_i$ and $f_j$ are the appropriate marginals of $p_{ij}$.
+ *            Optionally return any or all of these solutions in
+ *            <*opt_P>, <*opt_fi>, <*opt_fj>, and <*opt_lambda>.
+ *            
+ *            The calculation is run only on canonical residue scores
+ *            $0..K-1$ in S, to calculate joint probabilities for all
+ *            canonical residues. Joint and background probabilities 
+ *            involving degenerate residues are then calculated by
+ *            appropriate marginalizations. See notes on
+ *            <esl_scorematrix_ProbifyGivenBG()> about how probabilities
+ *            involving degeneracy codes are calculated.
+ *
+ *            This implements an algorithm described in
+ *            \citep{YuAltschul03} and \citep{YuAltschul05}.
+ *
+ *            Although this procedure may succeed in many cases,
+ *            it is unreliable and should be used with great caution.
+ *            Yu and Altschul note that it can find invalid solutions
+ *            (negative probabilities), and although they say that one
+ *            can keep searching until a valid solution is found, 
+ *            one can produce examples where this does not seem to be
+ *            the case. The caller MUST check return status, and
+ *            MUST expect <eslENORESULT>.
+ *            
+ * Args:      S          - score matrix 
+ *            opt_P      - optRETURN: Kp X Kp matrix of implied target probs $p_{ij}$
+ *            opt_fi     - optRETURN: vector of Kp $f_i$ background probs, 0..Kp-1
+ *            opt_fj     - optRETURN: vector of Kp $f_j$ background probs, 0..Kp-1
+ *            opt_lambda - optRETURN: calculated $\lambda$ parameter
+ *
+ * Returns:   <eslOK> on success, and <opt_P>, <opt_fi>, <opt_fj>, and <opt_lambda>
+ *            point to the results (for any of these that were passed non-<NULL>).
+ *
+ *            <opt_P>, <opt_fi>, and <opt_fj>, if requested, are new
+ *            allocations, and must be freed by the caller.
+ *            
+ *            Returns <eslENORESULT> if the algorithm fails to determine a valid solution,
+ *            but the solution is still returned (and caller needs to free).
+ *
+ *            Returns <eslEINVAL> if input score matrix isn't valid (sensu YuAltschul05);
+ *            now <opt_P>, <opt_fi>, <opt_fj> are returned NULL and <opt_lambda> is returned
+ *            as 0.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *
+ * Xref:      SRE:J1/35; SRE:J7/126.
+ */
+int
+esl_scorematrix_Probify(const ESL_SCOREMATRIX *S, ESL_DMATRIX **opt_P, double **opt_fi, double **opt_fj, double *opt_lambda)
+{
+  int status;
+  ESL_DMATRIX  *Sd  = NULL;
+  ESL_DMATRIX  *P   = NULL;
+  double       *fi  = NULL;
+  double       *fj  = NULL;
+  double        lambda;
+  int i,j;
+
+  /* Check the input matrix for validity */
+  if ( yualtschul_scorematrix_validate(S) != eslOK) { status = eslEINVAL; goto ERROR; }
+
+  if (( Sd = esl_dmatrix_Create(S->K,  S->K))  == NULL) {status = eslEMEM; goto ERROR; }
+  if (( P  = esl_dmatrix_Create(S->Kp, S->Kp)) == NULL) {status = eslEMEM; goto ERROR; }
+  ESL_ALLOC(fi, sizeof(double) * S->Kp);
+  ESL_ALLOC(fj, sizeof(double) * S->Kp);
+
+  /* Construct a double-precision dmatrix from S.
+   * I've tried integrating over the rounding uncertainty by
+   * averaging over trials with values jittered by +/- 0.5,
+   * but it doesn't appear to help.
+   */
+  for (i = 0; i < S->K; i++) 
+    for (j = 0; j < S->K; j++)
+      Sd->mx[i][j] = (double) S->s[i][j];
+
+  /* Reverse engineer the doubles */
+  if ((status = yualtschul_engine(Sd, P, fi, fj, &lambda)) != eslOK) goto ERROR;
+  set_degenerate_probs(S->abc_r, P, fi, fj);
+
+  /* Done. */
+  if (yualtschul_solution_validate(P, fi, fj) != eslOK) status = eslENORESULT;
+  else status = eslOK;
+
+  esl_dmatrix_Destroy(Sd);
+  if (opt_P      != NULL) *opt_P      = P;       else esl_dmatrix_Destroy(P);
+  if (opt_fi     != NULL) *opt_fi     = fi;      else free(fi);
+  if (opt_fj     != NULL) *opt_fj     = fj;      else free(fj);
+  if (opt_lambda != NULL) *opt_lambda = lambda;
+  return status;
+
+ ERROR:
+  if (Sd  != NULL) esl_dmatrix_Destroy(Sd);
+  if (P   != NULL) esl_dmatrix_Destroy(P);
+  if (fi  != NULL) free(fi);
+  if (fj  != NULL) free(fj);
+  if (opt_P      != NULL) *opt_P      = NULL;
+  if (opt_fi     != NULL) *opt_fi     = NULL;
+  if (opt_fj     != NULL) *opt_fj     = NULL;
+  if (opt_lambda != NULL) *opt_lambda = 0.;
+  return status;
+}
+/*---------- end, implicit prob basis, bg unknown ---------------*/
+
+
+
+
+/*****************************************************************
+ * 7. Experiment driver
+ *****************************************************************/
+
+#ifdef eslSCOREMATRIX_EXPERIMENT
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_dmatrix.h"
+#include "esl_getopts.h"
+#include "esl_scorematrix.h"
+#include "esl_vectorops.h"
+
+static ESL_OPTIONS options[] = {
+   /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                            0},
+  {"-l",  eslARG_REAL, "0.3466", NULL, NULL, NULL, NULL, NULL, "set base lambda (units of score mx) to <x>",     0},
+  {"-s",  eslARG_REAL,    "1.0", NULL, NULL, NULL, NULL, NULL, "additional scale factor applied to lambda",      0},
+  {"-t",  eslARG_REAL,   "1.37", NULL, NULL, NULL, NULL, NULL, "set WAG time (branch length) to <x>",            0},
+  {"--yfile", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save xy file of Yu/Altschul root eqn to <f>", 0},
+  {"--mfile", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save WAG score matrix to <f>",                0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "Yu/Altschul experiment driver for scorematrix module";
+
+/* yualtschul_graph_dump()
+ * Dump an XY plot of (\sum Y -1) vs. lambda for a score matrix.
+ * X-axis of graph starts at <lambda0>, ends at <lambda1>, stepping by <stepsize>.
+ */
+static int
+yualtschul_graph_dump(FILE *ofp, ESL_SCOREMATRIX *S, double scale, double lambda0, double lambda1, double stepsize)
+{
+  struct yualtschul_params p;
+  int    a,b;
+  double fx;
+  double lambda;
+
+  /* Set up a bisection method to find lambda */
+  p.S = esl_dmatrix_Create(S->K, S->K);
+  p.M = esl_dmatrix_Create(S->K, S->K);
+  p.Y = esl_dmatrix_Create(S->K, S->K);
+
+  for (a = 0; a < S->K; a++)
+    for (b = 0; b < S->K; b++)
+      p.S->mx[a][b] = (double) S->s[a][b];
+
+  for (lambda = lambda0; lambda <= lambda1; lambda += stepsize)
+    {
+      yualtschul_func(lambda/scale, &p, &fx);
+      fprintf(ofp, "%f %f\n", lambda, fx);
+    }
+  fprintf(ofp, "&\n");
+  fprintf(ofp, "%f 0.0\n", lambda0);
+  fprintf(ofp, "%f 0.0\n", lambda1);
+  fprintf(ofp, "&\n");
+  
+  esl_dmatrix_Destroy(p.S);
+  esl_dmatrix_Destroy(p.M);
+  esl_dmatrix_Destroy(p.Y);
+  return 0;
+}
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS     *go      = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_ALPHABET    *abc     = esl_alphabet_Create(eslAMINO);             /* protein matrices 20x20 */
+  ESL_DMATRIX     *Q       = esl_dmatrix_Create(abc->K, abc->K);	/* WAG rate matrix */
+  ESL_DMATRIX     *P0      = esl_dmatrix_Create(abc->K, abc->K);	/* p_ij joint probabilities calculated from WAG */
+  double          *wagpi   = malloc(sizeof(double) * abc->K);  
+  ESL_SCOREMATRIX *S0      = esl_scorematrix_Create(abc);	        /* score matrix calculated from WAG p_ij's */
+  double           lambda0 = esl_opt_GetReal(go, "-l");
+  double           t       = esl_opt_GetReal(go, "-t");
+  double           scale   = esl_opt_GetReal(go, "-s");
+  char            *yfile   = esl_opt_GetString(go, "--yfile");
+  char            *mfile   = esl_opt_GetString(go, "--mfile");
+  ESL_DMATRIX     *P       = NULL;                                      /* p_ij's from Yu/Altschul reverse eng of S0 */
+  double          *fi      = NULL;
+  double          *fj      = NULL;
+  double           lambda;
+  double           D;
+  int              status;
+  
+  /* Calculate an integer score matrix from a probabilistic rate matrix (WAG) */
+  esl_scorematrix_SetWAG(S0, lambda0/scale, t);
+  esl_composition_WAG(wagpi);
+  printf("WAG matrix calculated at t=%.3f, lambda=%.4f (/%.1f)\n", t, lambda0, scale);
+
+  /* Save the matrix, if asked */
+  if (mfile)
+    {
+      FILE *ofp = NULL;
+      if ( (ofp = fopen(mfile, "w")) == NULL) esl_fatal("failed to open %s for writing scorematrix", mfile);
+      ESL_DASSERT1(( S0->Kp >= 20 ));   // the strcpy below is fine. The assertion tries to convince static analyzers of that.
+      strcpy(S0->outorder, "ARNDCQEGHILKMFPSTWYV");
+      esl_scorematrix_Write(ofp, S0);
+      fclose(ofp);
+    }
+
+  /* Because of integer roundoff, the actual probability basis is a little different */
+  esl_scorematrix_ProbifyGivenBG(S0, wagpi, wagpi, &lambda, NULL);
+  printf("Integer roundoff shifts implicit lambda (given wagpi's) to %.4f (/%.1f)\n", lambda*scale, scale);
+  printf("Scores in matrix range from %d to %d\n", esl_scorematrix_Min(S0), esl_scorematrix_Max(S0));
+
+  esl_scorematrix_RelEntropy(S0, wagpi, wagpi, lambda, &D);
+  printf("Relative entropy: %.3f bits\n", D);
+  
+  if (yfile)
+    {
+      FILE *ofp = NULL;
+      if ( (ofp = fopen(yfile, "w")) == NULL) esl_fatal("failed to open XY file %s for writing\n", yfile);
+      yualtschul_graph_dump(ofp, S0, scale, 0.01, 1.0, 0.0001);
+      fclose(ofp);
+      printf("XY plot of Yu/Altschul rootfinding saved to : %s\n", yfile);
+    }
+
+  status = esl_scorematrix_Probify(S0, &P, &fi, &fj, &lambda);
+  printf("Yu/Altschul reverse engineering gives lambda = %.4f (/%.1f)\n", lambda*scale, scale);
+
+  //printf("fi's are: \n");  esl_vec_DDump(stdout, fi, S0->K, abc->sym);
+
+  if (status != eslOK) printf("however, the solution is INVALID!\n");
+  else                 printf("and the joint and marginals are a valid probabilistic basis.\n");
+
+  free(fj);
+  free(fi);
+  esl_scorematrix_Destroy(S0);
+  esl_dmatrix_Destroy(P);
+  esl_dmatrix_Destroy(P0);
+  esl_dmatrix_Destroy(Q);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /* eslSCOREMATRIX_EXPERIMENT */
+/*------------------ end, experiment driver ---------------------*/
+
+
+
+/*****************************************************************
+ * 8. Utility programs
+ *****************************************************************/ 
+
+/* Reformat a score matrix file into Easel internal digital alphabet order, suitable for making 
+ * one of the static data structures in our section of preloaded matrices.
+ */
+#ifdef eslSCOREMATRIX_UTILITY1
+/* 
+    gcc -g -Wall -o utility -I. -L. -DeslSCOREMATRIX_UTILITY1 esl_scorematrix.c -leasel -lm
+    ./utility BLOSUM62
+*/
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_scorematrix.h"
+#include "esl_fileparser.h"
+
+int
+main(int argc, char **argv)
+{
+  char *infile = argv[1];
+  ESL_ALPHABET    *abc;
+  ESL_FILEPARSER  *efp;
+  ESL_SCOREMATRIX *S;
+  int x,y;
+
+  abc = esl_alphabet_Create(eslAMINO);
+
+  if (esl_fileparser_Open(infile, NULL, &efp) != eslOK) esl_fatal("Failed to open %s\n", infile);
+  if (esl_scorematrix_Read(efp, abc, &S)      != eslOK) esl_fatal("parse failed: %s", efp->errbuf);
+
+  printf("    /*");
+  for (y = 0; y < abc->Kp; y++)
+    printf("  %c  ", abc->sym[y]);
+  printf("         */\n");
+
+  for (x = 0; x < abc->Kp; x++) {
+    printf("    { ");
+    for (y = 0; y < abc->Kp; y++)
+      printf("%3d, ", S->s[x][y]);
+    printf(" }, /* %c */\n", abc->sym[x]);
+  }
+  
+  esl_scorematrix_Destroy(S);
+  esl_fileparser_Close(efp);
+  esl_alphabet_Destroy(abc);
+  return eslOK;
+}
+#endif /*eslSCOREMATRIX_UTILITY1*/
+
+
+
+
+/* Utility 2: joint or conditional probabilities from BLOSUM62 (depending on how compiled)
+ */
+#ifdef eslSCOREMATRIX_UTILITY2
+/* 
+    gcc -g -Wall -o utility2 -I. -L. -DeslSCOREMATRIX_UTILITY2 esl_scorematrix.c -leasel -lm
+    ./utility2
+*/
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_dmatrix.h"
+#include "esl_scorematrix.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_ALPHABET    *abc      = esl_alphabet_Create(eslAMINO);
+  ESL_SCOREMATRIX *S        = esl_scorematrix_Create(abc);
+  ESL_DMATRIX     *Q        = NULL;
+  double          *fa       = NULL;
+  double          *fb       = NULL;
+  double           slambda;
+  int              a,b;
+
+  esl_scorematrix_Set("BLOSUM62", S);
+  esl_scorematrix_Probify(S, &Q, &fa, &fb, &slambda);
+#if 0
+  esl_scorematrix_JointToConditionalOnQuery(abc, Q); /* Q->mx[a][b] is now P(b | a) */
+#endif
+  esl_dmatrix_Dump(stdout, Q, abc->sym, abc->sym);
+  
+  esl_dmatrix_Destroy(Q);
+  esl_scorematrix_Destroy(S);
+  esl_alphabet_Destroy(abc);
+  return eslOK;
+}
+#endif /*eslSCOREMATRIX_UTILITY2*/
+
+
+
+
+
+
+/*****************************************************************
+ * 9. Unit tests.
+ *****************************************************************/
+
+#ifdef eslSCOREMATRIX_TESTDRIVE
+#include <esl_dirichlet.h>
+
+static void
+utest_ReadWrite(ESL_ALPHABET *abc, ESL_SCOREMATRIX *S)
+{
+  char tmpfile[16]     = "esltmpXXXXXX";
+  FILE            *fp  = NULL;
+  ESL_SCOREMATRIX *S2  = NULL;
+  ESL_FILEPARSER  *efp = NULL;
+  
+  if (esl_tmpfile_named(tmpfile, &fp)          != eslOK) esl_fatal("failed to open tmp file");
+  if (esl_scorematrix_Write(fp, S)                     != eslOK) esl_fatal("failed to write test matrix");
+  fclose(fp);
+
+  if (esl_fileparser_Open(tmpfile, NULL, &efp) != eslOK) esl_fatal("failed to open tmpfile containing BLOSUM62 matrix");
+  if (esl_scorematrix_Read(efp, abc, &S2)              != eslOK) esl_fatal("failed to read tmpfile containing BLOSUM62 matrix");
+  if (esl_scorematrix_Compare(S, S2)           != eslOK) esl_fatal("the two test matrices aren't identical");
+  
+  remove(tmpfile); 
+  esl_fileparser_Close(efp);
+  esl_scorematrix_Destroy(S2);
+  return;
+}
+
+
+static void
+utest_ProbifyGivenBG(ESL_SCOREMATRIX *S0, ESL_DMATRIX *P0, double *wagpi, double lambda0)
+{
+  char *msg = "ProbifyGivenBG() unit test failed";
+  ESL_DMATRIX     *P    = NULL;
+  double           sum  = 0.0;
+  double           lambda;
+  int              a,b;
+
+  if (esl_scorematrix_ProbifyGivenBG(S0, wagpi, wagpi, &lambda, &P) != eslOK) esl_fatal(msg);
+
+  if (esl_DCompare(lambda0, lambda, 1e-3)     != eslOK) esl_fatal("lambda is wrong");
+
+  for (a = 0; a < 20; a++) 	/* you can't just call esl_dmx_Sum(P), because P includes */
+    for (b = 0; b < 20; b++)    /* marginalized degeneracies */
+      sum += P->mx[a][b];
+
+  if (esl_DCompare(sum, 1.0, 1e-9)     != eslOK) esl_fatal("P doesn't sum to 1");
+
+  for (a = 0; a < 20; a++)	/* for the same reason,  you can't dmatrix_Compare P and P0 */
+    for (b = 0; b < 20; b++)
+      if (esl_DCompare(P0->mx[a][b], P->mx[a][b], 1e-2) != eslOK) esl_fatal("P is wrong");
+
+  esl_dmatrix_Destroy(P);
+  return;
+}
+ 
+
+/* The scores->pij reverse engineering engine works with scores in doubles,
+ * so we can separate effects of rounding to integers in standard
+ * score matrices.
+ */
+static void 
+utest_yualtschul(ESL_DMATRIX *P0, double *wagpi)
+{
+  char *msg = "reverse engineering engine test failed";
+  ESL_DMATRIX     *S   = NULL;	/* original score matrix, in double form, not rounded to ints (calculated from P, fi, fj) */
+  ESL_DMATRIX     *P   = NULL;	/* backcalculated P_ij joint probabilities */
+  double          *fi  = NULL;	/* backcalculated f_i query composition */
+  double          *fj  = NULL;	/* backcalculated f'_j target composition */
+  double           lambda0;	/* true lambda */
+  double           lambda;	/* backcalculated lambda */
+  double           sum = 0.0;
+  int              i,j;
+
+  /* Allocations */
+  if (( S  = esl_dmatrix_Create(20, 20))     == NULL)  esl_fatal(msg);
+  if (( P  = esl_dmatrix_Create(20, 20))     == NULL)  esl_fatal(msg);
+  if ((fi  = malloc(sizeof(double) * 20))    == NULL)  esl_fatal(msg);
+  if ((fj  = malloc(sizeof(double) * 20))    == NULL)  esl_fatal(msg);
+
+  /* Make a WAG-based score matrix in double-precision, without rounding to integers */
+  lambda0 = 0.3;
+  for (i = 0; i < 20; i++) 
+    for (j = 0; j < 20; j++)
+      S->mx[i][j] = log(P0->mx[i][j] / (wagpi[i] * wagpi[j])) / lambda0;
+
+  /* Reverse engineer it in double precision */
+  if ( yualtschul_engine(S, P, fi, fj, &lambda) != eslOK) esl_fatal("reverse engineering engine failed");
+
+  /* Validate the solution (expect more accuracy from this than from integer scores) */
+  if (esl_DCompare(lambda0, lambda, 1e-4)      != eslOK) esl_fatal("failed to get right lambda");
+
+  for (i = 0; i < 20; i++) 	/* you can't just call esl_dmx_Sum(P), because P includes */
+    for (j = 0; j < 20; j++)    /* marginalized degeneracies */
+      sum += P->mx[i][j];
+  if (esl_DCompare(sum, 1.0, 1e-6) != eslOK) esl_fatal("reconstructed P doesn't sum to 1");
+
+  for (i = 0; i < 20; i++)	/* for the same reason,  you can't dmatrix_Compare P and P0 */
+    for (j = 0; j < 20; j++)
+      if (esl_DCompare(P0->mx[i][j], P->mx[i][j], 1e-2) != eslOK) esl_fatal("failed to recover correct P_ij");
+  for (i = 0; i < 20; i++) 
+    {
+      if (esl_DCompare(fi[i],    fj[i],  1e-6) != eslOK) esl_fatal("background fi, fj not the same");
+      if (esl_DCompare(wagpi[i], fi[i],  1e-3) != eslOK) esl_fatal("failed to reconstruct WAG backgrounds");  
+    }
+
+  free(fj);
+  free(fi);
+  esl_dmatrix_Destroy(S);
+  esl_dmatrix_Destroy(P);
+  return;
+}
+
+
+/* utest_Probify()
+ * This tests Probify on a matrix that was calculated from probabilities in the first
+ * place. It verifies that the reconstructed Pij matrix matches the original Pij's
+ * that the score matrix was built from.
+ */
+static void
+utest_Probify(ESL_SCOREMATRIX *S0, ESL_DMATRIX *P0, double *wagpi, double lambda0)
+{
+  ESL_DMATRIX     *P  = NULL;
+  double          *fi = NULL;
+  double          *fj = NULL;
+  double           lambda;	/* reconstructed lambda */
+  double           sum = 0.0;
+  int              i,j;
+
+  if (esl_scorematrix_Probify(S0, &P, &fi, &fj, &lambda) != eslOK) esl_fatal("reverse engineering failed");
+
+  /* Validate the solution, gingerly (we expect significant error due to integer roundoff) */
+  if (esl_DCompare(lambda0, lambda, 0.01)       != eslOK) esl_fatal("failed to get right lambda");
+  for (i = 0; i < 20; i++) 	/* you can't just call esl_dmx_Sum(P), because P includes */
+    for (j = 0; j < 20; j++)    /* marginalized degeneracies */
+      sum += P->mx[i][j];
+  if (esl_DCompare(sum, 1.0, 1e-6) != eslOK) esl_fatal("reconstructed P doesn't sum to 1");
+
+  for (i = 0; i < 20; i++)	/* for the same reason,  you can't dmatrix_Compare P and P0 */
+    for (j = 0; j < 20; j++)
+      if (esl_DCompare(P0->mx[i][j], P->mx[i][j], 0.1) != eslOK) esl_fatal("failed to recover correct P_ij");
+  free(fj);
+  free(fi);
+  esl_dmatrix_Destroy(P);
+  return;
+}
+
+/* utest_ProbifyBLOSUM()
+ * This tests Probify on a score matrix where the original Pij's are treated as
+ * unknown. It verifies that if you create a new score matrix from the reconstructed
+ * Pij's, you get the original score matrix back. BLOSUM62 makes a good example,
+ * hence the name.
+  */
+static void
+utest_ProbifyBLOSUM(ESL_SCOREMATRIX *BL62)
+{
+  char *msg = "failure in ProbifyBLOSUM() unit test";
+  ESL_DMATRIX     *P  = NULL;
+  double          *fi = NULL;
+  double          *fj = NULL;
+  double           lambda;	
+  ESL_SCOREMATRIX *S2 = NULL;
+
+  if (( S2 = esl_scorematrix_Clone(BL62))                  == NULL) esl_fatal(msg);
+  if (esl_scorematrix_Probify(BL62, &P, &fi, &fj, &lambda)        != eslOK) esl_fatal(msg);
+  if (esl_scorematrix_SetFromProbs(S2, lambda, P, fi, fj) != eslOK) esl_fatal(msg);
+  if (esl_scorematrix_CompareCanon(BL62, S2)              != eslOK) esl_fatal(msg);
+  
+  free(fj);
+  free(fi);
+  esl_scorematrix_Destroy(S2);
+  esl_dmatrix_Destroy(P);
+  return;
+}
+
+#endif /*eslSCOREMATRIX_TESTDRIVE*/
+
+
+/*****************************************************************
+ * 10. Test driver.
+ *****************************************************************/
+/* 
+    gcc -g -Wall -I. -L. -o test -DeslSCOREMATRIX_TESTDRIVE esl_scorematrix.c -leasel -lm
+    ./test
+*/
+#ifdef eslSCOREMATRIX_TESTDRIVE
+#include "easel.h"
+#include "esl_scorematrix.h"
+
+int 
+main(int argc, char **argv)
+{
+  ESL_ALPHABET    *abc = NULL;	/* amino acid alphabet */
+  ESL_SCOREMATRIX *BL62= NULL;	/* BLOSUM62 matrix */
+  ESL_SCOREMATRIX *S0  = NULL;	/* original score matrix (calculated from P, fi, fj) */
+  ESL_DMATRIX     *P0  = NULL;	/* original P_ij joint probabilities */
+  ESL_DMATRIX     *Q   = NULL;	/* WAG rate matrix */
+  double           lambda0;	/* true lambda used to construct S */
+  double           t;
+  int              i,j;
+  static double    wagpi[20];
+
+  /* Allocations */
+  if ((abc = esl_alphabet_Create(eslAMINO))      == NULL)  esl_fatal("allocation of alphabet failed");
+  if ((BL62= esl_scorematrix_Create(abc))        == NULL)  esl_fatal("allocation of BLOSUM62 failed");
+  if ((S0  = esl_scorematrix_Create(abc))        == NULL)  esl_fatal("allocation of scorematrix failed");
+  if ((P0  = esl_dmatrix_Create(abc->K, abc->K)) == NULL)  esl_fatal("P allocation failed");
+  if ((Q   = esl_dmatrix_Create(abc->K, abc->K)) == NULL)  esl_fatal("Q allocation failed");
+
+  /* Make a BLOSUM matrix */
+  if ( esl_scorematrix_Set("BLOSUM62", BL62) != eslOK) esl_fatal("failed to set a BLOSUM matrix");
+
+  /* Make a WAG-based score matrix with small lambda. */
+  lambda0 = 0.00635;
+  t    = 2.0;
+  esl_scorematrix_SetWAG(S0, lambda0, t);
+  esl_composition_WAG(wagpi);
+
+  /* Redo some calculations to get the known probabilistic basis of that S */
+  if ( esl_rmx_SetWAG(Q, wagpi)  != eslOK) esl_fatal("failed to set WAG");
+  if ( esl_dmx_Exp(Q, t, P0)     != eslOK) esl_fatal("failed to exponentiate WAG");
+  for (i = 0; i < 20; i++) 
+    for (j = 0; j < 20; j++)
+      P0->mx[i][j] *= wagpi[i];	/* P_ij = P(j|i) pi_i */
+
+  /* The unit test battery
+   */
+  utest_ReadWrite(abc, BL62);
+  utest_ReadWrite(abc, S0);
+  utest_ProbifyGivenBG(S0, P0, wagpi, lambda0);
+  utest_yualtschul(P0, wagpi);
+  utest_Probify(S0, P0, wagpi, lambda0); 
+  utest_ProbifyBLOSUM(BL62);
+
+  esl_dmatrix_Destroy(Q);
+  esl_dmatrix_Destroy(P0);
+  esl_scorematrix_Destroy(BL62);
+  esl_scorematrix_Destroy(S0);
+  esl_alphabet_Destroy(abc);
+
+  return 0;
+}
+#endif /*eslSCOREMATRIX_TESTDRIVE*/
+
+/*****************************************************************
+ * 11. Example program
+ *****************************************************************/
+
+#ifdef eslSCOREMATRIX_EXAMPLE
+/*::cexcerpt::scorematrix_example::begin::*/
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_fileparser.h"
+#include "esl_dmatrix.h"
+#include "esl_vectorops.h"
+#include "esl_scorematrix.h"
+
+int main(int argc, char **argv)
+{
+  char            *scorefile = argv[1];
+  ESL_ALPHABET    *abc       = esl_alphabet_Create(eslAMINO);
+  ESL_FILEPARSER  *efp       = NULL;
+  ESL_SCOREMATRIX *S         = NULL;
+  ESL_DMATRIX     *P1        = NULL; /* implicit probability basis, bg unknown */
+  ESL_DMATRIX     *P2        = NULL; /* implicit probability basis, bg known   */
+  double          *fi        = NULL;
+  double          *fj        = NULL;
+  double           lambda, D, E;
+  int              vstatus;
+
+  /* Input an amino acid score matrix from a file. */
+  if ( esl_fileparser_Open(scorefile, NULL, &efp) != eslOK) esl_fatal("failed to open score file %s", scorefile);
+  if ( esl_scorematrix_Read(efp, abc, &S)         != eslOK) esl_fatal("failed to read matrix from %s", scorefile);
+  esl_fileparser_Close(efp);
+
+  /* Try to reverse engineer it to get implicit probabilistic model. This may fail! */
+  vstatus = esl_scorematrix_Probify(S, &P1, &fi, &fj, &lambda);
+
+  if (vstatus == eslOK) 
+    { /* Print some info, and the joint probabilities. */
+
+      esl_scorematrix_RelEntropy   (S, fi, fj, lambda, &D);
+      esl_scorematrix_ExpectedScore(S, fi, fj,         &E);
+
+      printf("By Yu/Altschul (2003,2005) procedure:\n");
+      printf("Lambda           = %.4f\n",      lambda);
+      printf("Relative entropy = %.4f bits\n", D); 
+      printf("Expected score   = %.4f bits\n", E * lambda * eslCONST_LOG2R);
+
+      printf("p_ij's are:\n");  esl_dmatrix_Dump(stdout, P1, abc->sym, abc->sym);
+      printf("fi's are:\n");    esl_vec_DDump(stdout, fi, S->K, abc->sym);
+      printf("fj's are:\n");    esl_vec_DDump(stdout, fj, S->K, abc->sym);
+      printf("============================================================\n\n");
+      }
+  else
+    {
+      printf("Yu/Altschul procedure FAILS to find a valid implicit probability basis!\n");
+      printf("Lambda  = %.4f\n",      lambda);
+      printf("p_ij's are:\n");  esl_dmatrix_Dump(stdout, P1, abc->sym, abc->sym);
+      printf("fi's are:\n");    esl_vec_DDump(stdout, fi, S->K, abc->sym);
+      printf("fj's are:\n");    esl_vec_DDump(stdout, fj, S->K, abc->sym);
+      printf("============================================================\n\n");
+
+      esl_composition_BL62(fi); esl_composition_BL62(fj);
+    }
+
+  /* Now reverse engineer it again, this time using "known" background probs */
+  esl_scorematrix_ProbifyGivenBG(S, fi, fj, &lambda, &P2);
+  esl_scorematrix_RelEntropy   (S, fi, fj, lambda,   &D);
+  esl_scorematrix_ExpectedScore(S, fi, fj,           &E);
+
+  printf("By solving for lambda from given background frequencies:\n");
+  printf("Lambda           = %.4f\n",      lambda);
+  printf("Relative entropy = %.4f bits\n", D); 
+  printf("Expected score   = %.4f bits\n", E * lambda * eslCONST_LOG2R);
+
+  printf("p_ij's are:\n");   esl_dmatrix_Dump(stdout, P2, abc->sym, abc->sym);
+  printf("fi's are:\n");     esl_vec_DDump(stdout, fi, S->K, abc->sym);
+  printf("fj's are:\n");     esl_vec_DDump(stdout, fj, S->K, abc->sym);
+  printf("============================================================\n\n");
+
+
+  /* Now recalculate a score matrix from the probabilistic basis */
+  printf("Before:\n");
+  esl_scorematrix_Write(stdout, S);
+  printf("After:\n");
+  esl_scorematrix_SetFromProbs(S, lambda, P2, fi, fj);
+  esl_scorematrix_Write(stdout, S);
+
+  free(fi); free(fj);
+  esl_dmatrix_Destroy(P1);  esl_dmatrix_Destroy(P2);
+  esl_scorematrix_Destroy(S);
+  esl_alphabet_Destroy(abc);
+  return 0;
+}
+/*::cexcerpt::scorematrix_example::end::*/
+#endif /*eslSCOREMATRIX_EXAMPLE*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/ 
diff --git a/esl_scorematrix.h b/esl_scorematrix.h
new file mode 100644
index 0000000..a395200
--- /dev/null
+++ b/esl_scorematrix.h
@@ -0,0 +1,77 @@
+/* Routines for manipulating sequence alignment score matrices.
+ */
+#ifndef eslSCOREMATRIX_INCLUDED
+#define eslSCOREMATRIX_INCLUDED
+
+#include "esl_alphabet.h"
+#include "esl_fileparser.h"
+#include "esl_dmatrix.h"
+
+/* ESL_SCOREMATRIX:
+ * allocation is in one array in s[0].
+ *
+ * i,j can range from 0..Kp-1, including all characters valid in the alphabet.
+ * Only values for 0..K-1 (canonical alphabet) are mandatory.
+ */
+typedef struct {
+  int **s;			/* s[i][j] is the score of aligning residue i,j; i,j range 0..Kp-1 */
+  int   K;			/* size of base alphabet (duplicate of S->abc_r->K) */
+  int   Kp;			/* full size of s[][], including degeneracies (duplicate of S->abc_r->Kp) */
+
+  /* bookkeeping for degenerate residues */
+  char *isval;			/* array 0..Kp-1: which residues of alphabet have valid scores in S. */
+  const ESL_ALPHABET *abc_r;	/* reference to the alphabet: includes K, Kp, and sym order */
+
+  /* bookkeeping that lets us output exactly the residue order we read in a matrix file */
+  int   nc;			/* number of residues with scores (inclusive of *, if present) */
+  char *outorder;		/* NUL-terminated string 0..nc-1 giving order of residues in col/row labels   */
+
+  char *name;			/* optional: name of score matrix; or NULL */
+  char *path;			/* optional: full path to file that score matrix was read from; or NULL  */
+} ESL_SCOREMATRIX;
+
+
+
+/* 1. The ESL_SCOREMATRIX object. */
+extern ESL_SCOREMATRIX *esl_scorematrix_Create(const ESL_ALPHABET *abc);
+extern int              esl_scorematrix_Copy(const ESL_SCOREMATRIX *src, ESL_SCOREMATRIX *dest);
+extern ESL_SCOREMATRIX *esl_scorematrix_Clone(const ESL_SCOREMATRIX *S);
+extern int              esl_scorematrix_Compare(const ESL_SCOREMATRIX *S1, const ESL_SCOREMATRIX *S2);
+extern int              esl_scorematrix_CompareCanon(const ESL_SCOREMATRIX *S1, const ESL_SCOREMATRIX *S2);
+extern int              esl_scorematrix_Max(const ESL_SCOREMATRIX *S);
+extern int              esl_scorematrix_Min(const ESL_SCOREMATRIX *S);
+extern int              esl_scorematrix_IsSymmetric(const ESL_SCOREMATRIX *S);
+extern int              esl_scorematrix_ExpectedScore(ESL_SCOREMATRIX *S, double *fi, double *fj, double *ret_E);
+extern int              esl_scorematrix_RelEntropy(const ESL_SCOREMATRIX *S, const double *fi, const double *fj, 
+						   double lambda, double *ret_D);
+extern int              esl_scorematrix_JointToConditionalOnQuery(const ESL_ALPHABET *abc, ESL_DMATRIX *P);
+extern void             esl_scorematrix_Destroy(ESL_SCOREMATRIX *S);
+
+/* 2. Some classic score matrices */
+extern int              esl_scorematrix_Set(const char *name, ESL_SCOREMATRIX *S);
+extern int              esl_scorematrix_SetIdentity(ESL_SCOREMATRIX *S);
+
+/* 3. Deriving a score matrix probabilistically */
+extern int              esl_scorematrix_SetFromProbs(ESL_SCOREMATRIX *S, double lambda, const ESL_DMATRIX *P,
+						     const double *fi, const double *fj);
+extern int              esl_scorematrix_SetWAG(ESL_SCOREMATRIX *S, double lambda, double t);
+
+/* 4. Reading/writing score matrices. */
+extern int  esl_scorematrix_Read(ESL_FILEPARSER *efp, const ESL_ALPHABET *abc, ESL_SCOREMATRIX **ret_S);
+extern int  esl_scorematrix_Write(FILE *fp, const ESL_SCOREMATRIX *S);
+
+/* 5. Implicit probabilistic basis, I: given bg. */
+extern int esl_scorematrix_ProbifyGivenBG(const ESL_SCOREMATRIX *S, const double *fi, const double *fj, 
+					  double *opt_lambda, ESL_DMATRIX **opt_P);
+
+/* 6. Implicit probabilistic basis, II: bg unknown. */
+extern int esl_scorematrix_Probify(const ESL_SCOREMATRIX *S, ESL_DMATRIX **opt_P, 
+				   double **opt_fi, double **opt_fj, double *opt_lambda);
+
+#endif /*eslSCOREMATRIX_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/ 
+
+
+
diff --git a/esl_scorematrix.tex b/esl_scorematrix.tex
new file mode 100644
index 0000000..a05fdf5
--- /dev/null
+++ b/esl_scorematrix.tex
@@ -0,0 +1,51 @@
+The \eslmod{scorematrix} module implements standard residue pairwise
+alignment scoring systems (such as BLOSUM matrices), and their
+probabilistic interpretation \citep{Altschul91,YuAltschul03}.
+
+Table~\ref{tbl:scorematrix_api} lists the functions in the
+\eslmod{scorematrix} API. The module implements one object,
+\ccode{ESL\_SCOREMATRIX}, which holds a score matrix with integer
+scores.
+
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\apisubhead{The \ccode{ESL\_SCOREMATRIX} object.}\\
+\hyperlink{func:esl_scorematrix_Create()}{\ccode{esl\_scorematrix\_Create()}} & Create an \ccode{ESL\_SCOREMATRIX}.\\
+\hyperlink{func:esl_scorematrix_SetWAG()}{\ccode{esl\_scorematrix\_SetWAG()}} & Parameterize matrix from the WAG evolutionary model.           \\
+\hyperlink{func:esl_scorematrix_SetFromProbs()}{\ccode{esl\_scorematrix\_SetFromProbs()}} & Set matrix scores from target and background probabilities.\\
+\hyperlink{func:esl_scorematrix_Compare()}{\ccode{esl\_scorematrix\_Compare()}} & Compare two matrices for equality.\\
+\hyperlink{func:esl_scorematrix_Max()}{\ccode{esl\_scorematrix\_Max()}} & Returns maximum value in score matrix.\\
+\hyperlink{func:esl_scorematrix_Min()}{\ccode{esl\_scorematrix\_Min()}} & Returns minimum value in score matrix.\\
+%\hyperlink{func:esl_scorematrix_RelativeEntropy()}{\ccode{esl\_scorematrix\_RelativeEntropy()}} & Returns relative entropy of a matrix.\\
+\hyperlink{func:esl_scorematrix_IsSymmetric()}{\ccode{esl\_scorematrix\_IsSymmetric()}} & Returns \ccode{TRUE} for symmetric matrix.\\
+\hyperlink{func:esl_scorematrix_Destroy()}{\ccode{esl\_scorematrix\_Destroy()}} & Frees a matrix.\\
+\apisubhead{Reading/writing score matrices.}\\
+\hyperlink{func:esl_scorematrix_Read()}{\ccode{esl\_scorematrix\_Read()}} & Read a standard matrix input file.\\
+\hyperlink{func:esl_scorematrix_Write()}{\ccode{esl\_scorematrix\_Write()}} & Write a BLAST-compatible score matrix file.\\
+%\apisubhead{Interpreting matrices probabilistically.}\\
+%\hyperlink{func:esl_scorematrix_ObtainPij()}{\ccode{esl\_scorematrix\_ObtainPij()}} & Obtain $P_{ij}$ from score matrix with known $\lambda$ and background $f$'s.\\
+%\hyperlink{func:esl_scorematrix_SolveLambda()}{\ccode{esl\_scorematrix\_SolveLambda()}} & Find $\lambda$ for score matrix, given background.\\
+%\hyperlink{func:esl_scorematrix_ReverseEngineer()}{\ccode{esl\_scorematrix\_ReverseEngineer()}} & Calculate the probabilistic basis of a score matrix.\\
+
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{scorematrix} API.}
+\label{tbl:scorematrix_api}
+\end{table}
+
+\subsection{An example of using the scorematrix API}
+
+Figure~\ref{fig:scorematrix_example} shows an example of reading a
+matrix file from disk, reverse engineering it \citep{YuAltschul03} to
+obtain its target probabilities, background frequencies, and lambda,
+then printing information about it:
+
+\begin{figure}
+\input{cexcerpts/scorematrix_example}
+\caption{An example of using the \eslmod{scorematrix} module.}
+\label{fig:scorematrix_example}
+\end{figure}
diff --git a/esl_sq.c b/esl_sq.c
new file mode 100644
index 0000000..95cc54f
--- /dev/null
+++ b/esl_sq.c
@@ -0,0 +1,2815 @@
+/* esl_sq : a single biological sequence.
+ * 
+ * Contents:
+ *   1. Text version of the ESL_SQ object.
+ *   2. Digitized version of the ESL_SQ object.     [with <alphabet>]
+ *   3. Other functions that operate on sequences.
+ *   4. Getting single sequences from MSAs.         [with <msa>]
+ *   5. Debugging, development tools                [with <random>, <randomseq>]
+ *   6. Internal functions.
+ *   7. Unit tests.
+ *   8. Test driver.
+ *   9. Examples.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#include "esl_sq.h"
+#include "esl_vectorops.h"
+
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"	/* alphabet adds digital sequences */
+#endif 
+#ifdef eslAUGMENT_MSA
+#include "esl_msa.h"		/* msa adds ability to extract sq from an MSA  */
+#endif
+#if defined eslAUGMENT_RANDOM && defined eslAUGMENT_RANDOMSEQ
+#include "esl_random.h"         /* random, randomseq add ability to sample random sq objects for unit tests */
+#include "esl_randomseq.h"
+#endif
+
+
+/* Shared parts of text/digital creation functions (defined in "internal functions" section) */
+static ESL_SQ *sq_create(int do_digital);
+static ESL_SQ *sq_create_from(const char *name, const char *desc, const char *acc);
+
+static ESL_SQ_BLOCK *sq_createblock(int count, int do_digital);
+
+static int  sq_init(ESL_SQ *sq, int do_digital);
+static void sq_free(ESL_SQ *sq);
+
+/*****************************************************************
+ *# 1. Text version of the <ESL_SQ> object.
+ *****************************************************************/
+
+/* Function:  esl_sq_Create()
+ * Synopsis:  Create a new, empty <ESL_SQ>.
+ * Incept:    SRE, Thu Dec 23 11:57:00 2004 [Zaragoza]
+ *
+ * Purpose:   Creates an empty <ESL_SQ> sequence object, in text mode, with
+ *            internal fields allocated to reasonable initial sizes. 
+ *            
+ * Args:      (void)
+ *
+ * Returns:   a pointer to the new <ESL_SQ>. Caller frees this with
+ *            <esl_sq_Destroy()>.
+ *
+ * Throws:    <NULL> if allocation fails.
+ */
+ESL_SQ *
+esl_sq_Create(void)
+{
+  return sq_create(FALSE);
+}
+
+/* Function:  esl_sq_CreateFrom()
+ * Synopsis:  Create a new <ESL_SQ> from text information.
+ * Incept:    SRE, Wed Mar 22 09:17:04 2006 [St. Louis]
+ *
+ * Purpose:   Create a new <ESL_SQ> object in text mode from elemental data.
+ *            This provides an interface between non-Easel code
+ *            and Easel's object.
+ *            
+ *            Makes copies of all data. Caller is still
+ *            responsible for memory of name, seq, etc.
+ *            
+ *            <desc>, <acc>, and <ss> are optional. They can be passed
+ *            as <NULL> to leave them blank. 
+ *            
+ *            <ss> is an optional alphabetic secondary structure
+ *            annotation string. If it is provided, its length must
+ *            match the length of <seq>.
+ *            
+ * Args:      name    -  name of the sequence (NUL-terminated)
+ *            seq     -  the sequence (alphabetic; NUL-terminated)
+ *            desc    -  optional: description line (or NULL)
+ *            acc     -  optional: accession (or NULL)
+ *            ss      -  optional: secondary structure annotation (or NULL)
+ *
+ * Returns:   a pointer to the new object. Free with
+ *            <esl_sq_Destroy()>.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_SQ *
+esl_sq_CreateFrom(const char *name, const char *seq, const char *desc, const char *acc, const char *ss)
+{
+  ESL_SQ  *sq = NULL;
+  int64_t  n  = strlen(seq);
+  int      status;
+
+  if ((sq     = sq_create_from(name, desc, acc)) == NULL)  goto ERROR;
+  if ((status = esl_strdup(seq, n, &(sq->seq)))  != eslOK) goto ERROR;
+
+  if (ss != NULL) 
+    {
+      if (strlen(ss) != n) ESL_XEXCEPTION(eslEINVAL, "ss, seq lengths mismatch");
+      if ((status = esl_strdup(ss, n, &(sq->ss))) != eslOK) goto ERROR;
+    } 
+  else sq->ss = NULL;
+
+  sq->n      = n;
+  sq->salloc = n+1;
+
+  /* We assume we've created a complete sequence; set the coord bookkeeping accordingly. */
+  sq->start  = 1;
+  sq->end    = n;
+  sq->C      = 0;
+  sq->W      = n;
+  sq->L      = n;
+
+  /* optional for extra residue markups */
+  sq->nxr    = 0;
+  sq->xr_tag = NULL;
+  sq->xr     = NULL;
+
+  return sq;
+
+ ERROR:
+  esl_sq_Destroy(sq);
+  return NULL;
+}
+
+/* Function:  esl_sq_Grow()
+ * Synopsis:  Assure that a <ESL_SQ> has space to add more residues.
+ * Incept:    SRE, Wed Jan 10 08:26:23 2007 [Janelia]
+ *
+ * Purpose:   Assure that the sequence <sq> can hold at least
+ *            one more residue, whether in digital or text mode.
+ *            Reallocate if necessary. Optionally returns the number
+ *            of residues that can be added before the next call
+ *            to <esl_sq_Grow()> in <opt_nsafe>.
+ *            
+ *            The terminal <NUL> or sentinel count as a residue for
+ *            allocation purposes: that is, you may need to call
+ *            <esl_sq_Grow()> before terminating a new sequence.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on reallocation failure. In this case, the
+ *            original <sq> is untouched, and <*opt_nsafe> is returned
+ *            as 0.
+ *
+ * Xref:      STL11/125.
+ */
+int
+esl_sq_Grow(ESL_SQ *sq, int64_t *opt_nsafe)
+{
+  void   *tmp;
+  int64_t new;
+  int64_t nsafe;
+  int     x;       /* index for optional extra residue markups */
+  int     status;
+
+  if (sq->seq != NULL)  nsafe = sq->salloc     - sq->n;     /* text */
+  else                  nsafe = (sq->salloc-1) - sq->n;     /* digital: -1 because 0 is a sentinel       */
+
+  if (nsafe < 1)
+    {  /* reallocate by doubling (shouldn't need more, but if we do, keep doubling) */
+      new = sq->salloc;
+      do { nsafe += new; new*=2; } while (nsafe < 1);
+      
+      if (sq->seq != NULL) ESL_RALLOC(sq->seq, tmp, new * sizeof(char));	/* text    */
+      else                 ESL_RALLOC(sq->dsq, tmp, new * sizeof(ESL_DSQ));	/* digital */
+      if (sq->ss != NULL)  ESL_RALLOC(sq->ss,  tmp, new * sizeof(char));
+
+      for (x = 0; x < sq->nxr; x++) 
+	if (sq->xr[x] != NULL)  ESL_RALLOC(sq->xr[x],  tmp, new * sizeof(char));
+      
+      sq->salloc = new;
+    }
+  if (opt_nsafe != NULL) *opt_nsafe = nsafe;
+  return eslOK;
+
+ ERROR:
+  if (opt_nsafe != NULL) *opt_nsafe = 0;
+  return status;
+}
+
+/* Function:  esl_sq_GrowTo()
+ * Synopsis:  Grows an <ESL_SQ> to hold a seq of at least <n> residues.
+ * Incept:    SRE, Fri Jan 18 11:06:50 2008 [UA5233 Westchester-Dulles]
+ *
+ * Purpose:   Assure that the appropriate (text or digital) sequence
+ *            field in <sq> can hold up to a total of <n> residues,
+ *            reallocating as needed.
+ *            
+ *            If reallocated, the allocation will be $\geq (n+1)$ for
+ *            text mode (the +1 is for the terminal NUL byte), $\geq
+ *            (n+2)$ for digital mode (+2 for sentinel bytes at each
+ *            end). That is, you don't need to take these extra bytes into
+ *            account in your <n>; <n> is the number of residues, not
+ *            bytes.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ * 
+ * Note that n=0 is fine here, because we'll allocate either n+1 or n+2.
+ */
+int
+esl_sq_GrowTo(ESL_SQ *sq, int64_t n)
+{
+  int   x;        /* index for optional extra residue markups */
+  int   status;
+
+  if (sq->seq != NULL)		/* text mode */
+    {
+      if (n+1 > sq->salloc) {
+        ESL_REALLOC(sq->seq, (n+1) * sizeof(char));
+        if (sq->ss != NULL) ESL_REALLOC(sq->ss, (n+1) * sizeof(char));
+        for (x = 0; x < sq->nxr; x++) /* optional extra residue markups */
+          if (sq->xr[x] != NULL)  ESL_REALLOC(sq->xr[x],  (n+1) * sizeof(char));
+        sq->salloc = n+1;
+      }
+    }
+  else				/* digital mode */
+    {
+      if (n+2 > sq->salloc) {
+        ESL_REALLOC(sq->dsq, (n+2) * sizeof(ESL_DSQ));
+        if (sq->ss != NULL) ESL_REALLOC(sq->ss, (n+2) * sizeof(char));
+        for (x = 0; x < sq->nxr; x++) /* optional extra residue markups */
+          if (sq->xr[x] != NULL)  ESL_REALLOC(sq->xr[x],  (n+2) * sizeof(char));
+
+        sq->salloc = n+2;
+      }
+    }
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function:  esl_sq_Copy()
+ * Synopsis:  Make a copy of an <ESL_SQ>.
+ * Incept:    SRE, Sun Feb 24 17:59:24 2008 [UA5315 to St. Louis]
+ *
+ * Purpose:   Copies a source sequence object <src> into 
+ *            destination sequence object <dst>.
+ *            
+ *            The two objects don't have to be matched as far as
+ *            text/digital mode go; if mismatched, appropriate
+ *            text/digital conversion will be done.
+ *            
+ *            The destination sequence <dst> is reallocated internally
+ *            as necessary to hold a copy of <src>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ * 
+ * Note:      Note the shenanigans involved in copying ss; you have
+ *            to pay attention to the ss being a 0..n-1 string in text
+ *            mode versus a 1..n string in digital mode.
+ */
+int
+esl_sq_Copy(const ESL_SQ *src, ESL_SQ *dst)
+{
+  int   x;        /* index for optional extra residue markups */
+  int status;
+
+  /* If <src> has structure annotation and <dst> does not, initialize an allocation in <dst> */
+  if (src->ss != NULL && dst->ss  == NULL) ESL_ALLOC(dst->ss, sizeof(char) * dst->salloc);
+
+  /* similarly for optional extra residue markups */
+  if (src->nxr > 0) {
+    if (dst->nxr > 0) {
+      for (x = 0; x < dst->nxr; x++) {
+	if (dst->xr[x]     != NULL) { free(dst->xr[x]);     dst->xr[x]     = NULL; }
+	if (dst->xr_tag[x] != NULL) { free(dst->xr_tag[x]); dst->xr_tag[x] = NULL; }
+      }     
+      if (dst->xr     != NULL) { free(dst->xr);     dst->xr     = NULL; }
+      if (dst->xr_tag != NULL) { free(dst->xr_tag); dst->xr_tag = NULL; }
+    }
+    
+    dst->nxr = src->nxr;
+    ESL_ALLOC(dst->xr_tag, sizeof(char *) * dst->nxr);
+    ESL_ALLOC(dst->xr,     sizeof(char *) * dst->nxr);
+    
+    for (x = 0; x < dst->nxr; x++) {
+      ESL_ALLOC(dst->xr_tag[x], sizeof(char) * src->nalloc);
+      ESL_ALLOC(dst->xr[x],     sizeof(char) * src->salloc);
+    }
+  }
+  
+  if ((status = esl_sq_SetName     (dst, src->name))   != eslOK) goto ERROR;
+  if ((status = esl_sq_SetSource   (dst, src->source)) != eslOK) goto ERROR;
+  if ((status = esl_sq_SetAccession(dst, src->acc))    != eslOK) goto ERROR;
+  if ((status = esl_sq_SetDesc     (dst, src->desc))   != eslOK) goto ERROR;
+  if ((status = esl_sq_GrowTo      (dst, src->n))      != eslOK) goto ERROR;
+
+  if (src->seq != NULL && dst->seq != NULL) /* text to text */
+    {
+    strcpy(dst->seq, src->seq);
+      if (src->ss != NULL) strcpy(dst->ss, src->ss);
+      for (x = 0; x < src->nxr; x++) 
+	if (src->xr[x] != NULL) strcpy(dst->xr[x], src->xr[x]);
+    }
+#ifdef eslAUGMENT_ALPHABET
+  else if (src->seq != NULL && dst->dsq != NULL) /* text to digital */
+    {
+      if ((status = esl_abc_Digitize(dst->abc, src->seq, dst->dsq)) != eslOK) goto ERROR;      
+      if (src->ss != NULL) {
+	strcpy(dst->ss+1, src->ss);
+	dst->ss[0] = '\0';
+	for (x = 0; x < src->nxr; x++) 
+	  if (src->xr[x] != NULL) { strcpy(dst->xr[x]+1, src->xr[x]); dst->xr[x][0] = '\0'; }
+     }
+    }
+  else if (src->dsq != NULL && dst->seq != NULL) /* digital to text */
+    {
+      if ((status = esl_abc_Textize(src->abc, src->dsq, src->n, dst->seq)) != eslOK) goto ERROR;
+      if (src->ss != NULL) strcpy(dst->ss, src->ss+1);
+      for (x = 0; x < src->nxr; x++) 
+	if (src->xr[x] != NULL) strcpy(dst->xr[x], src->xr[x]+1);
+   }
+  else 				/* digital to digital */
+    {
+      if (src->abc->type != dst->abc->type) 
+	ESL_XEXCEPTION(eslEINCOMPAT, "seq objects involved in Copy differ in digital alphabet");
+      if ((status = esl_abc_dsqcpy(src->dsq, src->n, dst->dsq)) != eslOK) goto ERROR;
+      if (src->ss != NULL) {
+	strcpy(dst->ss+1, src->ss+1);
+	dst->ss[0] = '\0';
+      }
+      for (x = 0; x < src->nxr; x++) 
+	if (src->xr[x] != NULL) { strcpy(dst->xr[x]+1, src->xr[x]+1); dst->xr[x][0] = '\0'; }
+    }
+#endif
+   
+  for (x = 0; x < src->nxr; x++) 
+    if (src->xr_tag[x] != NULL) strcpy(dst->xr_tag[x], src->xr_tag[x]);
+
+  dst->n     = src->n;
+  dst->start = src->start;
+  dst->end   = src->end;
+  dst->C     = src->C;
+  dst->W     = src->W;
+  dst->L     = src->L;
+  /* don't copy allocations (nalloc, etc); dst knows its own memory */
+  dst->roff  = src->roff;
+  dst->doff  = src->doff;
+  dst->hoff  = src->hoff;
+  dst->eoff  = src->eoff;
+  return eslOK;
+
+ ERROR:
+  esl_sq_Reuse(dst);
+  return status;
+}
+
+/* Function:  esl_sq_Compare()
+ * Synopsis:  Compare two sequence objects for equality.
+ * Incept:    SRE, Tue May 13 09:00:41 2008 [Janelia]
+ *
+ * Purpose:   Compare the contents of two sequence objects <sq1> 
+ *            and <sq2> for equality.
+ *            
+ *            Disk offsets are only compared if they are set in both
+ *            <sq1> and <sq2>. Allocation sizes are not compared at
+ *            all.
+ *
+ * Returns:   <eslOK> if identical, <eslFAIL> if not.
+ */
+int
+esl_sq_Compare(ESL_SQ *sq1, ESL_SQ *sq2)
+{
+  int   x;        /* index for optional extra residue markups */
+
+  /* Annotation comparison */
+  if (strcmp(sq1->name,   sq2->name)   != 0) return eslFAIL;
+  if (strcmp(sq1->acc,    sq2->acc)    != 0) return eslFAIL;
+  if (strcmp(sq1->desc,   sq2->desc)   != 0) return eslFAIL;
+  if (strcmp(sq1->source, sq2->source) != 0) return eslFAIL;
+  if (sq1->ss != NULL && sq2->ss != NULL) {
+    if (strcmp(sq1->ss, sq2->ss) != 0)       return eslFAIL;
+  } else
+    if (sq1->ss != NULL || sq2->ss != NULL)  return eslFAIL;
+  if (sq1->n != sq2->n)                      return eslFAIL;
+  
+  /* Sequence comparison */
+  if        (sq1->seq != NULL && sq2->seq != NULL) {
+    if (strcmp(sq1->seq, sq2->seq) != 0)     return eslFAIL;
+  } 
+#ifdef eslAUGMENT_ALPHABET
+  else if (sq1->dsq != NULL && sq2->dsq != NULL) {
+    if (memcmp(sq1->dsq, sq2->dsq, sizeof(ESL_DSQ) * (sq1->n+2)) != 0) return eslFAIL;
+  }
+#endif
+  else return eslFAIL;
+
+  /* Coordinate comparison */
+  if (sq1->start != sq2->start)              return eslFAIL;
+  if (sq1->end   != sq2->end)                return eslFAIL;
+  if (sq1->C     != sq2->C)                  return eslFAIL;
+  if (sq1->W     != sq2->W)                  return eslFAIL;
+  if (sq1->L     != sq2->L)                  return eslFAIL;
+    
+  /* Disk offset comparison */
+  if (sq1->roff != -1 && sq2->roff != -1 && sq1->roff != sq2->roff) return eslFAIL;
+  if (sq1->doff != -1 && sq2->doff != -1 && sq1->doff != sq2->doff) return eslFAIL;
+  if (sq1->hoff != -1 && sq2->hoff != -1 && sq1->hoff != sq2->hoff) return eslFAIL;
+  if (sq1->eoff != -1 && sq2->eoff != -1 && sq1->eoff != sq2->eoff) return eslFAIL;
+  
+  /* optional extra residue markup comparison */
+  if (sq1->nxr != sq2->nxr) return eslFAIL;
+  for (x = 0; x < sq1->nxr; x++) {
+    if (sq1->xr_tag[x] != NULL && sq2->xr_tag[x] != NULL) {
+      if (strcmp(sq1->xr_tag[x], sq2->xr_tag[x]) != 0)      return eslFAIL;
+    } else
+      if (sq1->xr_tag[x] != NULL || sq2->xr_tag[x] != NULL) return eslFAIL;
+    
+    if (sq1->xr[x] != NULL && sq2->xr[x] != NULL) {
+      if (strcmp(sq1->xr[x], sq2->xr[x]) != 0)      return eslFAIL;
+    } else
+      if (sq1->xr[x] != NULL || sq2->xr[x] != NULL) return eslFAIL;
+  }
+  
+  /* alphabet comparison */
+#ifdef eslAUGMENT_ALPHABET  
+  if (sq1->abc != NULL && (sq1->abc->type != sq2->abc->type)) return eslFAIL;
+#endif
+  return eslOK;
+}  
+
+
+
+/* Function:  esl_sq_Reuse()
+ * Synopsis:  Reinitialize an <ESL_SQ> for re-use.
+ * Incept:    SRE, Thu Dec 23 12:23:51 2004 [Zaragoza]
+ *
+ * Purpose:   Given a sequence object <sq> already in use;
+ *            reinitialize all its data, so a new seq
+ *            may be read into it. This allows sequential sequence
+ *            input without a lot of wasted allocation/free cycling.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_sq_Reuse(ESL_SQ *sq)
+{
+  int   x;        /* index for optional extra residue markups */
+
+  sq->name[0]   = '\0';
+  sq->acc[0]    = '\0';
+  sq->desc[0]   = '\0';
+  sq->tax_id    = -1;
+  sq->source[0] = '\0';
+  if (sq->seq != NULL) sq->seq[0] = '\0';
+  if (sq->dsq != NULL) sq->dsq[0] = sq->dsq[1] = eslDSQ_SENTINEL;
+  if (sq->ss  != NULL) {
+    if (sq->seq != NULL) sq->ss[0] = '\0';
+    else                 sq->ss[0] = sq->ss[1] = '\0'; /* in digital mode, ss string is 1..n; 0 is a dummy \0 byte*/
+  }
+
+  /* optional extra residue markup */
+  if (sq->nxr > 0) {
+    for (x = 0; x < sq->nxr; x++) {
+      if (sq->xr[x]     != NULL) { free(sq->xr[x]);     sq->xr[x]     = NULL; }
+      if (sq->xr_tag[x] != NULL) { free(sq->xr_tag[x]); sq->xr_tag[x] = NULL; }
+    }     
+    if (sq->xr     != NULL) { free(sq->xr);     sq->xr     = NULL; }
+    if (sq->xr_tag != NULL) { free(sq->xr_tag); sq->xr_tag = NULL; }
+    sq->nxr = 0;
+  }
+
+  sq->n     = 0;
+  sq->start = 0;
+  sq->end   = 0;
+  sq->C     = 0;
+  sq->W     = 0;
+  sq->L     = -1;
+  sq->idx   = -1;
+  sq->doff  = -1;
+  sq->hoff  = -1;
+  sq->roff  = -1;
+  sq->eoff  = -1;
+  return eslOK;
+}
+
+/* Function:  esl_sq_IsDigital()
+ * Synopsis:  Return <TRUE> if <sq> is digital.
+ * Incept:    SRE, Mon Mar  2 18:05:34 2009 [Casa de Gatos]
+ *
+ * Purpose:   Return <TRUE> if <sq> is in digital mode,
+ *            and <FALSE> if not.
+ */
+int
+esl_sq_IsDigital(const ESL_SQ *sq)
+{
+  return ((sq->dsq != NULL) ? TRUE : FALSE);
+}
+
+
+/* Function:  esl_sq_IsText()
+ * Synopsis:  Return <TRUE> if <sq> is text mode.
+ * Incept:    SRE, Mon Mar  2 18:06:22 2009 [Casa de Gatos]
+ *
+ * Purpose:   Return <TRUE> if <sq> is in text mode,
+ *            and <FALSE> if not.
+ */
+int
+esl_sq_IsText(const ESL_SQ *sq)
+{
+  return ((sq->seq != NULL) ? TRUE : FALSE);
+}
+
+
+/* Function:  esl_sq_Destroy()
+ * Synopsis:  Frees an <ESL_SQ>.
+ * Incept:    SRE, Thu Dec 23 12:28:07 2004 [Zaragoza]
+ *
+ * Purpose:   Free a Create()'d <sq>.
+ */
+void
+esl_sq_Destroy(ESL_SQ *sq)
+{
+  int   x;        /* index for optional extra residue markups */
+  if (sq == NULL) return;
+
+  if (sq->name   != NULL) free(sq->name);  
+  if (sq->acc    != NULL) free(sq->acc);   
+  if (sq->desc   != NULL) free(sq->desc);  
+  if (sq->seq    != NULL) free(sq->seq);   
+  if (sq->dsq    != NULL) free(sq->dsq);   
+  if (sq->ss     != NULL) free(sq->ss);    
+  if (sq->source != NULL) free(sq->source);
+  if (sq->nxr > 0) {  
+    for (x = 0; x < sq->nxr; x++) {
+      if (sq->xr[x]     != NULL) free(sq->xr[x]);
+      if (sq->xr_tag[x] != NULL) free(sq->xr_tag[x]);
+    }
+    if (sq->xr     != NULL) free(sq->xr);
+    if (sq->xr_tag != NULL) free(sq->xr_tag);
+  }
+  free(sq);
+  return;
+}
+
+/* Function:  esl_sq_CreateBlock()
+ * Synopsis:  Create a new block of empty <ESL_SQ>.
+ * Incept:    
+ *
+ * Purpose:   Creates a block of empty <ESL_SQ> sequence objects.
+ *            
+ * Returns:   a pointer to the new <ESL_SQ_BLOCK>. Caller frees this
+ *            with <esl_sq_DestroyBlock()>.
+ *
+ * Throws:    <NULL> if allocation fails.
+ */
+ESL_SQ_BLOCK *
+esl_sq_CreateBlock(int count)
+{
+  return sq_createblock(count, FALSE);
+}
+
+/* Function:  esl_sq_DestroyBlock()
+ * Synopsis:  Frees an <ESL_SQ_BLOCK>.
+ * Incept:    
+ *
+ * Purpose:   Free a Create()'d block of <sq>.
+ */
+void
+esl_sq_DestroyBlock(ESL_SQ_BLOCK *block)
+{
+  int i;
+
+  if (block == NULL) return;
+
+  for (i = 0; i < block->listSize; ++i)
+    {
+      sq_free(block->list + i);
+    }
+
+  free(block->list);
+  free(block);
+  return;
+}
+
+/* Function:  esl_sq_BlockGrowTo()
+ * Synopsis:  Grows a sequence block to hold at least <n> <ESL_SQ>.
+ * Incept:    
+ *
+ * Purpose:   Assure that the list of sequences
+ *            can hold up to a total of <n> sequences,
+ *            reallocating as needed.
+ *            
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ * 
+ */
+int
+esl_sq_BlockGrowTo(ESL_SQ_BLOCK *sqblock, int newsize, int do_digital, const ESL_ALPHABET *abc)
+{
+  int   status = eslOK;
+  int   i;
+  if(sqblock->listSize < newsize)
+  {
+     ESL_REALLOC(sqblock->list, sizeof(ESL_SQ) * newsize);
+     sqblock->listSize = newsize;
+
+     for (i = sqblock->count; i < sqblock->listSize; ++i)
+     {
+       sqblock->list[i].abc = abc;
+       if ((status = sq_init(sqblock->list + i, do_digital)) != eslOK)
+         goto ERROR;
+     }
+  }
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+#ifdef eslAUGMENT_ALPHABET
+
+/* Function:  esl_sq_CreateDigitalBlock()
+ * Synopsis:  Create a new block of empty <ESL_SQ> in digital mode.
+ * Incept:    
+ *
+ * Purpose:   Same as <esl_sq_CreateBlock()>, except the returned <sq>
+ *            is configured for a digital sequence using internal
+ *            alphabet <abc>, rather than a text sequence. Creates an
+ *            empty digital <ESL_SQ> sequence object, with internal
+ *            fields allocated to reasonable initial sizes.
+ *            
+ * Returns:   a pointer to the new <ESL_SQ_BLOCK>. Caller frees this with
+ *            <esl_sq_DestroyBlock()>.
+ * 
+ * Throws:    <NULL> if an allocation fails.
+ *
+ * Xref:      
+ */
+ESL_SQ_BLOCK *
+esl_sq_CreateDigitalBlock(int count, const ESL_ALPHABET *abc)
+{
+  int i;
+  ESL_SQ_BLOCK *block;
+  if ((block = sq_createblock(count, TRUE)) == NULL) return NULL;
+  
+  for (i = 0; i < count; ++i)
+    {
+      block->list[i].abc = abc;
+    }
+
+  return block;
+}
+
+#endif /* eslAUGMENT_ALPHABET */
+
+/*--------------- end of ESL_SQ object functions ----------------*/
+
+
+
+
+/*****************************************************************
+ *# 2. Digitized version of the <ESL_SQ> object. (Requires <alphabet>)
+ *****************************************************************/
+#ifdef eslAUGMENT_ALPHABET
+
+/* Function:  esl_sq_CreateDigital()
+ * Synopsis:  Create a new, empty <ESL_SQ> in digital mode.
+ * Incept:    SRE, Tue Jan  9 16:42:35 2007 [Janelia]
+ *
+ * Purpose:   Same as <esl_sq_Create()>, except the returned <sq> is
+ *            configured for a digital sequence using internal
+ *            alphabet <abc>, rather than a text sequence. Creates an
+ *            empty digital <ESL_SQ> sequence object, with internal
+ *            fields allocated to reasonable initial sizes.
+ *            
+ * Args:      abc      - pointer to internal alphabet
+ * 
+ * Returns:   a pointer to the new <ESL_SQ>. Caller frees this with
+ *            <esl_sq_Destroy()>.
+ * 
+ * Throws:    <NULL> if an allocation fails.
+ *
+ * Xref:      STL11/124
+ */
+ESL_SQ *
+esl_sq_CreateDigital(const ESL_ALPHABET *abc)
+{
+  ESL_SQ *s;
+  if ((s = sq_create(TRUE)) == NULL) return NULL;
+  s->abc    = abc;
+  return s;
+}
+
+/* Function:  esl_sq_CreateDigitalFrom()
+ * Synopsis:  Create a new digital <ESL_SQ> from text info.
+ * Incept:    EPN, Fri Aug 24 13:38:56 2007
+ *
+ * Purpose:   Create a new <ESL_SQ> object from elemental data.
+ *            Same as <esl_sq_CreateFrom> except takes a digital <ESL_DSQ *dsq>
+ *            instead of a text <char *seq> as the sequence to copy.
+ *            
+ *            Makes copies of all data. Caller is still
+ *            responsible for memory of name, seq, etc.
+ *            
+ *            <ss> is an optional alphabetic secondary structure
+ *            annotation string, <0..n-1>. If provided, its length
+ *            must match the length of <seq>. (Note that although the
+ *            argument <ss> is provided as a standard <0..n-1> C
+ *            string, <ss> is stored internally as a <1..n> string in
+ *            a digital sequence object, so that both the digital
+ *            sequence and its alphabetic secondary structure
+ *            annotation are indexed the same.)
+ *            
+ *            The object is growable; you can use <esl_sq_Reuse()>
+ *            on it.
+ *
+ * Args:      abc     -  the digital alphabet
+ *            name    -  name of the sequence
+ *            dsq     -  digital sequence <1..L>
+ *            n       -  length of digitized sequence in residues (or -1 if unknown)
+ *            desc    -  optional: description line (or NULL)
+ *            acc     -  optional: accession (or NULL)
+ *            ss      -  optional: secondary structure annotation (or NULL)
+ *
+ * Returns:   a pointer to the new object. Free with
+ *            <esl_sq_Destroy()>.
+ *
+ * Throws:    <NULL> on allocation failure.
+ */
+ESL_SQ *
+esl_sq_CreateDigitalFrom(const ESL_ALPHABET *abc, const char *name, const ESL_DSQ *dsq, int64_t n,
+			 const char *desc, const char *acc, const char *ss)
+{
+  ESL_SQ *sq = NULL;
+  int     status;
+
+  if((sq = sq_create_from(name, desc, acc)) == NULL) goto ERROR;
+  sq->n = (n == -1) ? esl_abc_dsqlen(dsq) : n;
+  if ((status = esl_abc_dsqdup(dsq, sq->n, &(sq->dsq))) != eslOK) goto ERROR;
+
+  if (ss != NULL)
+    {
+      if (strlen(ss) != sq->n) ESL_XEXCEPTION(eslEINVAL, "ss, seq lengths mismatch");
+      ESL_ALLOC(sq->ss, sizeof(char) * (sq->n+2));
+      sq->ss[0] = '\0';
+      strcpy(sq->ss+1, ss);
+    }
+
+  /* We assume we've created a complete sequence; set the coord bookkeeping accordingly. */
+  sq->start  = 1;
+  sq->end    = n;
+  sq->C      = 0;
+  sq->W      = n;
+  sq->L      = n;
+
+  sq->salloc = sq->n+2;
+  sq->abc    = abc;
+  return sq;
+
+ ERROR:
+  esl_sq_Destroy(sq);
+  return NULL;
+}
+
+
+/* Function:  esl_sq_Digitize()
+ * Synopsis:  Convert an <ESL_SQ> to digital mode.
+ * Incept:    EPN, Mon Feb 12 11:09:06 2007
+ *
+ * Purpose:   Given a sequence <sq> in text mode, convert it to
+ *            digital mode, using alphabet <abc>.
+ *            
+ *            Internally, the <dsq> digital sequence field is filled,
+ *            the <seq> text alignment field is destroyed and free'd,
+ *            a copy of the alphabet pointer is kept in the sq's
+ *            <abc> reference.
+ *
+ * Args:      abc    - digital alphabet
+ *            sq     - sequence to digitize
+ *
+ * Returns:   <eslOK> on success.
+ *            Returns <eslEINVAL> if the sequence contains invalid characters
+ *            that can't be digitized. If this happens, the <sq> is returned
+ *            unaltered - left in text mode, with <seq> as it was. (This is
+ *            a normal error, because <sq->seq> may be user input that we 
+ *            haven't validated yet.)
+ *
+ * Throws:    <eslEMEM> on allocation failure; in this case, state of <sq> may be 
+ *            wedged, and it should only be destroyed, not used.
+ */
+int
+esl_sq_Digitize(const ESL_ALPHABET *abc, ESL_SQ *sq)
+{
+  int   x;        /* index for optional extra residue markups */
+  int status;
+
+  /* Contract checks */
+  if (sq->dsq   != NULL) return eslOK;
+  if (sq->seq   == NULL) ESL_EXCEPTION(eslEINVAL, "sq has no text sequence");
+
+  /* Validate before we convert, so we leave <seq> untouched if it's bad. */
+  if (esl_abc_ValidateSeq(abc, sq->seq, sq->n, NULL) != eslOK) return eslEINVAL;
+
+  /* Allocate dsq, ss properly; these are our last failure points. */
+  /* You can't just call Grow() here, because it would grow for old text mode, not new digital */
+  if (sq->salloc < sq->n+2) {	/* it's possible (though unlikely) for salloc to be 1 residue too small */
+    sq->salloc = sq->n+2;
+    if (sq->ss != NULL) {
+      void *tmp;
+      ESL_RALLOC(sq->ss, tmp, sizeof(char) * sq->salloc);
+    }
+    /* optional extra residue markups follow same convenctions as ss */
+    for (x = 0; x < sq->nxr; x++) 
+      if (sq->xr[x] != NULL) {
+	void *tmp;
+	ESL_RALLOC(sq->xr[x], tmp, sizeof(char) * sq->salloc);
+      }
+  }
+  ESL_ALLOC(sq->dsq, (sq->salloc) * sizeof(ESL_DSQ));
+
+  /* Now convert. */
+  if ((status = esl_abc_Digitize(abc, sq->seq, sq->dsq)) != eslOK) goto ERROR;
+  if (sq->ss != NULL) {
+    memmove(sq->ss+1, sq->ss, sq->n+1);
+    sq->ss[0] = '\0';
+  }
+  for (x = 0; x < sq->nxr; x++) 
+    if (sq->xr[x] != NULL) {
+      memmove(sq->xr[x]+1, sq->xr[x], sq->n+1);
+      sq->xr[x][0] = '\0';
+    }
+  
+  free(sq->seq);
+  sq->seq = NULL;
+  sq->abc = abc;
+  return eslOK;
+
+ ERROR:
+  if (sq->dsq != NULL) free(sq->dsq);
+  return status;
+}
+
+/* Function:  esl_sq_Textize()
+ * Synopsis:  Convert an <ESL_SQ> to text mode.
+ * Incept:    EPN, Mon Feb 12 11:15:06 2007
+ *
+ * Purpose:   Given a sequence <sq> in digital mode, convert it
+ *            to text mode.
+ *            
+ *            Internally, the <seq> text alignment field is filled, the
+ *            <dsq> digital alignment field is destroyed and free'd, the
+ *            sq's <abc> digital alphabet reference is nullified.
+ *            
+ * Args:      sq   - sequence object to convert to text
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            Throws <eslECORRUPT> if the digital sequence contains 
+ *            invalid codes.
+ */
+int
+esl_sq_Textize(ESL_SQ *sq)
+{
+  int   x;        /* index for optional extra residue markups */
+  int status;
+
+  /* Contract checks */
+  if (sq->seq  != NULL) return eslOK;
+  if (sq->dsq  == NULL) ESL_EXCEPTION(eslEINVAL, "sq has no digital sequence");
+  if (sq->abc  == NULL) ESL_EXCEPTION(eslEINVAL, "sq has no digital alphabet");
+
+  /* Allocate. salloc is guaranteed big enough, if it was big enough for digital. */
+  ESL_ALLOC(sq->seq, sq->salloc * sizeof(char));
+  
+  /* Convert. */
+  if ((status = esl_abc_Textize(sq->abc, sq->dsq, sq->n, sq->seq)) != eslOK) goto ERROR;
+  if (sq->ss != NULL) 
+    memmove(sq->ss, sq->ss+1, sq->n+1);	/* slide back to 0..n-1; +1 includes terminal \0 */
+  for (x = 0; x < sq->nxr; x++) 
+    if (sq->xr[x] != NULL) 
+      memmove(sq->xr[x], sq->xr[x]+1, sq->n+1);	/* slide back to 0..n-1; +1 includes terminal \0 */
+  
+  free(sq->dsq);
+  sq->dsq = NULL;
+  sq->abc = NULL;           /* nullify reference (caller still owns real abc) */
+  return eslOK;
+
+ ERROR:
+  if (sq->seq != NULL) free(sq->seq);
+  return status;
+}
+
+/* Function:  esl_sq_GuessAlphabet()
+ * Synopsis:  Guess alphabet type of a single sequence.
+ *
+ * Purpose:   Guess the alphabet type of biosequence <sq>, and store the
+ *            guess in <*ret_type>.
+ *            
+ *            All 26 letters are valid in the amino alphabet (even <O>
+ *            and <J> now), so the DNA alphabet is necessarily a subset.
+ *            Therefore most protein sequences can be identified
+ *            unambiguously (because they use letters that only occur
+ *            in amino acid sequence), but DNA sequences cannot be.
+ *            
+ *            The sequence must contain more than 10 residues, or it
+ *            is called <eslUNKNOWN>.
+ *
+ *            For details on the rules used to classify a residue
+ *            composition, see <esl_abc_GuessAlphabet()>. The rules
+ *            are good but not perfect. We err on the conservative
+ *            side, calling <eslUNKNOWN> rather than making
+ *            classification errors. However, errors are possible; an
+ *            example is a protein sequence <ACGTACGTACGT...>
+ *            ("ala-cys-gly-thr..."), which will be called <eslDNA>,
+ *            because it contains all and only DNA residues.
+ *
+ *            The routine is tested on large sequence databases to
+ *            make sure there are zero false positive classifications
+ *            on known sequences. See <esl_abc_GuessAlphabet()> for
+ *            details of these tests, and crossreferences.
+ *
+ * Returns:   <eslOK> on success, and <*ret_type> is set to
+ *            <eslAMINO>, <eslRNA>, or <eslDNA>.
+ *
+ *            Returns <eslENOALPHABET> if unable to determine the
+ *            alphabet type; in this case, <*ret_type> is set to 
+ *            <eslUNKNOWN>.
+ *
+ * Xref:      See notes on esl_alphabet.c::esl_abc_GuessAlphabet()
+ */
+int
+esl_sq_GuessAlphabet(ESL_SQ *sq, int *ret_type)
+{
+  int64_t ct[26];
+  int     x;
+  int64_t i;
+  int64_t n = 0;
+
+  for (x = 0; x < 26; x++) ct[x] = 0;
+  for (i = 0; i < sq->n; i++) {
+    x = toupper(sq->seq[i]) - 'A';
+    if (x < 0 || x > 26) continue;
+    ct[x]++;
+    n++;
+    if (n > 10000) break;	/* we oughta know by now! */
+  }
+  return esl_abc_GuessAlphabet(ct, ret_type);
+}
+
+
+/* Function:  esl_sq_ConvertDegen2X()
+ * Synopsis:  Convert all degenerate residues to X/N
+ * Incept:    SRE, Tue Apr 20 08:52:54 2010 [Janelia]
+ *
+ * Purpose:   Convert all the degenerate residue codes in digital
+ *            sequence <sq> to the code for "unknown residue" (maximum
+ *            degeneracy); for example, X for protein, N for nucleic
+ *            acid. 
+ *            
+ *            This is handy when you need to be compatible with
+ *            software that can't deal with unusual residue codes.
+ *            For example, WU-BLAST can't deal with O (pyrrolysine)
+ *            codes.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> if <sq> isn't in digital mode. 
+ *            (We only know how to interpret the alphabet
+ *            in digital mode. In text mode, letters are
+ *            just letters.)
+ */
+int
+esl_sq_ConvertDegen2X(ESL_SQ *sq)
+{
+  if (! esl_sq_IsDigital(sq)) ESL_EXCEPTION(eslEINVAL, "esl_sq_ConvertDegen2X() only works on digital sequences");
+  return esl_abc_ConvertDegen2X(sq->abc, sq->dsq);
+}
+
+
+#endif /*eslAUGMENT_ALPHABET*/
+/*---------- end of digitized ESL_SQ object functions -----------*/
+
+
+
+/*****************************************************************
+ *# 3. Other functions that operate on sequences.
+ *****************************************************************/
+
+/* Function:  esl_sq_SetName()
+ * Synopsis:  Set the name of a sequence.
+ * Incept:    SRE, Thu Jan 11 08:42:53 2007 [Janelia]
+ *
+ * Purpose:   Set the name of the sequence <sq> to <name>, reallocating
+ *            as needed. For example, <esl_sq_SetName(sq, "random")>.
+ * 
+ *            A copy of <name> is made, so if caller had <name> allocated, 
+ *            it is still responsible for freeing it.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *
+ * Xref:      STL11/125
+ */
+int
+esl_sq_SetName(ESL_SQ *sq, const char *name)
+{
+  int   n;
+  void *tmp;
+  int   status;
+
+  if (name == NULL) { sq->name[0] = '\0'; return eslOK; }
+
+  n = strlen(name);
+  if (n >= sq->nalloc) 
+    {
+      ESL_RALLOC(sq->name, tmp, sizeof(char) * (n+1)); 
+      sq->nalloc = n+1;
+    }
+  strcpy(sq->name, name);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_sq_SetAccession()
+ * Synopsis:  Set the accession field in a sequence.
+ * Incept:    SRE, Fri Jan 18 09:48:54 2008 [Westchester airport]
+ *
+ * Purpose:   Set the accession of the sequence <sq> to <acc>, reallocating
+ *            as needed. For example, <esl_sq_SetAccession(sq, "ACC12356")>.
+ * 
+ *            A copy of <acc> is made, so if caller had <acc> allocated, 
+ *            it is still responsible for freeing it.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *
+ * Xref:      STL11/125
+ */
+int
+esl_sq_SetAccession(ESL_SQ *sq, const char *acc)
+{
+  int     n;
+  void   *tmp;
+  int     status;
+
+  if (acc == NULL) { sq->acc[0] = '\0'; return eslOK; }
+
+  n = strlen(acc);
+  if (n >= sq->aalloc)
+    {
+      ESL_RALLOC(sq->acc, tmp, sizeof(char) * (n+1)); 
+      sq->aalloc = n+1;
+    }
+  strcpy(sq->acc, acc);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function:  esl_sq_SetDesc()
+ * Synopsis:  Set the description field in a sequence.
+ * Incept:    SRE, Fri Jan 18 09:46:14 2008 [Westchester airport]
+ *
+ * Purpose:   Set the description of the sequence <sq> to <desc>, reallocating
+ *            as needed. 
+ *            For example, <esl_sq_SetDesc(sq, "this is a random sequence")>.
+ * 
+ *            A copy of <desc> is made, so if caller had <desc> allocated, 
+ *            it is still responsible for freeing it.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *
+ * Xref:      STL11/125
+ */
+int
+esl_sq_SetDesc(ESL_SQ *sq, const char *desc)
+{
+  int     n;
+  void   *tmp;
+  int     status;
+
+  if (desc == NULL) { sq->desc[0] = '\0'; return eslOK; }
+
+  n = strlen(desc);
+  if (n >= sq->dalloc)
+    {
+      ESL_RALLOC(sq->desc, tmp, sizeof(char) * (n+1)); 
+      sq->dalloc = n+1;
+    }
+  strcpy(sq->desc, desc);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_sq_SetSource()
+ * Synopsis:  Set the source name field in a sequence.
+ * Incept:    SRE, Wed May  7 16:17:56 2008 [Janelia]
+ *
+ * Purpose:   Set the source of the sequence <sq> to <source>, reallocating
+ *            as needed. For example, <esl_sq_SetSource(sq, "X123456")>.
+ * 
+ *            A copy of <source> is made, so if caller had <source> allocated, 
+ *            it is still responsible for freeing it.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *
+ * Xref:      STL11/125
+ */
+int
+esl_sq_SetSource(ESL_SQ *sq, const char *source)
+{
+  int     n;
+  void   *tmp;
+  int     status;
+
+  if (source == NULL) { sq->source[0] = '\0'; return eslOK; }
+
+  n = strlen(source);
+  if (n >= sq->srcalloc)
+    {
+      ESL_RALLOC(sq->source, tmp, sizeof(char) * (n+1)); 
+      sq->srcalloc = n+1;
+    }
+  strcpy(sq->source, source);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function:  esl_sq_FormatName()
+ * Synopsis:  Format a name of a sequence, printf()-style.
+ * Incept:    SRE, Fri Sep 11 10:59:01 2009 [Janelia]
+ *
+ * Purpose:   Format the name of the sequence <sq> using
+ *            <printf()>-style format string <name> and corresponding
+ *            <printf()>-style arguments, reallocating as
+ *            needed.
+ *            For example, <esl_sq_FormatName(sq, "random%d", i)>.
+ * 
+ *            A copy of <name> is made, so if caller had <name> allocated, 
+ *            it is still responsible for freeing it.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_sq_FormatName(ESL_SQ *sq, const char *name, ...)
+{
+  va_list argp;
+  va_list argp2;
+  int   n;
+  void *tmp;
+  int   status;
+
+  if (name == NULL) { sq->name[0] = '\0'; return eslOK; }
+
+  va_start(argp, name);
+  va_copy(argp2, argp);
+  if ((n = vsnprintf(sq->name, sq->nalloc, name, argp)) >= sq->nalloc)
+    {
+      ESL_RALLOC(sq->name, tmp, sizeof(char) * (n+1)); 
+      sq->nalloc = n+1;
+      vsnprintf(sq->name, sq->nalloc, name, argp2);
+    }
+  va_end(argp);
+  va_end(argp2);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_sq_FormatAccession()
+ * Synopsis:  Format the accession field in a sequence, printf()-style.
+ * Incept:    SRE, Fri Sep 11 11:00:37 2009 [Janelia]
+ *
+ * Purpose:   Format the accession of the sequence <sq> using <printf()>-style 
+ *            format string <acc> and corresponding  <printf()>-style arguments,
+ *            reallocating as needed. 
+ *            For example, <esl_sq_FormatAccession(sq, "ACC%06d", i)>.
+ * 
+ *            A copy of <acc> is made, so if caller had <acc> allocated, 
+ *            it is still responsible for freeing it.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_sq_FormatAccession(ESL_SQ *sq, const char *acc, ...)
+{
+  va_list argp, argp2;
+  int     n;
+  void   *tmp;
+  int     status;
+
+  if (acc == NULL) { sq->acc[0] = '\0'; return eslOK; }
+
+  va_start(argp, acc);
+  va_copy(argp2, argp);
+  if ((n = vsnprintf(sq->acc, sq->aalloc, acc, argp)) >= sq->aalloc)
+    {
+      ESL_RALLOC(sq->acc, tmp, sizeof(char) * (n+1)); 
+      sq->aalloc = n+1;
+      vsnprintf(sq->acc, sq->aalloc, acc, argp2);
+    }
+  va_end(argp);
+  va_end(argp2);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function:  esl_sq_FormatDesc()
+ * Synopsis:  Format the description field in a sequence, printf()-style.
+ * Incept:    SRE, Fri Sep 11 11:02:11 2009 [Janelia]
+ *
+ * Purpose:   Format the description of the sequence <sq> using <printf()>-style 
+ *            format string <desc> and corresponding  <printf()>-style arguments,
+ *            reallocating as needed. 
+ *            For example, <esl_sq_FormatDesc(sq, "random sequence %d", i)>.
+ * 
+ *            A copy of <desc> is made, so if caller had <desc> allocated, 
+ *            it is still responsible for freeing it.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_sq_FormatDesc(ESL_SQ *sq, const char *desc, ...)
+{
+  va_list argp, argp2;
+  int     n;
+  void   *tmp;
+  int     status;
+
+  if (desc == NULL) { sq->desc[0] = '\0'; return eslOK; }
+
+  va_start(argp, desc);
+  va_copy(argp2, argp);
+  if ((n = vsnprintf(sq->desc, sq->dalloc, desc, argp)) >= sq->dalloc)
+    {
+      ESL_RALLOC(sq->desc, tmp, sizeof(char) * (n+1)); 
+      sq->dalloc = n+1;
+      vsnprintf(sq->desc, sq->dalloc, desc, argp2);
+    }
+  va_end(argp);  
+  va_end(argp2);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function:  esl_sq_FormatSource()
+ * Synopsis:  Format the source name field in a sequence, printf()-style.
+ * Incept:    SRE, Fri Sep 11 10:55:10 2009 [Janelia]
+ *
+ * Purpose:   Format the source of the sequence <sq> using <printf()>-style 
+ *            format string <source> and corresponding  <printf()>-style arguments,
+ *            reallocating as needed. 
+ *            For example, <esl_sq_FormatSource(sq, "source %d", i)>.
+ * 
+ *            A copy of <source> is made, so if caller had <source> allocated, 
+ *            it is still responsible for freeing it.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_sq_FormatSource(ESL_SQ *sq, const char *source, ...)
+{
+  va_list argp, argp2;
+  int     n;
+  void   *tmp;
+  int     status;
+
+  if (source == NULL) { sq->source[0] = '\0'; return eslOK; }
+
+  va_start(argp, source);
+  va_copy(argp2, argp);
+  if ((n = vsnprintf(sq->source, sq->srcalloc, source, argp)) >= sq->srcalloc)
+    {
+      ESL_RALLOC(sq->source, tmp, sizeof(char) * (n+1)); 
+      sq->srcalloc = n+1;
+      vsnprintf(sq->source, sq->srcalloc, source, argp2);
+    }
+  va_end(argp);  
+  va_end(argp2);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function:  esl_sq_AppendDesc()
+ * Synopsis:  Append a new line to a growing multiline description.
+ * Incept:    SRE, Thu May 22 15:33:43 2008 [Janelia]
+ *
+ * Purpose:   Append line <desc> to the description annotation line
+ *            in <sq>. 
+ *            
+ *            The annotation line <sq->desc> is a single line; it may
+ *            not contain \verb+\n+ newlines. Caller is responsible
+ *            for making sure <desc> does not terminate in \verb+\n+.
+ *            If <sq->desc> already contains a description
+ *            line (presumably because we're reading from a file format
+ *            that's split the description across multiple lines), 
+ *            append a space before adding this next line <desc>.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_sq_AppendDesc(ESL_SQ *sq, const char *desc)
+{
+  int   dlen   = (sq->desc == NULL ? 0 : strlen(sq->desc));
+  int   newlen = (desc     == NULL ? 0 : strlen(desc));
+  int   status;
+  
+  if (desc == NULL) return eslOK;
+
+  // sq->desc == NULL check below is logically unnecessary but it silences zealous static analyzers
+  if (sq->desc == NULL || dlen + newlen + 1 >= sq->dalloc) {    // +1 for appended space. 
+    ESL_REALLOC(sq->desc, sizeof(char) * (newlen+dlen+eslSQ_DESCCHUNK));
+    sq->dalloc = newlen+dlen+eslSQ_DESCCHUNK;
+  }
+
+  if (dlen > 0) { sq->desc[dlen] = ' '; dlen++; } 
+  strcpy(sq->desc + dlen, desc);
+  return eslOK;
+  
+ ERROR:
+  return status;
+}
+
+
+
+/* Function:  esl_sq_SetCoordComplete()
+ * Synopsis:  Sets coords in a complete sequence.
+ * Incept:    SRE, Tue May 13 09:25:33 2008 [Janelia]
+ *
+ * Purpose:   Declare that <sq> contains a complete sequence of length
+ *            <L>; set the coordinate and length information in <sq>
+ *            accordingly. This is used in building new sequence
+ *            objects.
+ *            
+ *            <sq->seq> or <sq->dsq> must contain a sequence of length
+ *            <L>.
+ *            
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_sq_SetCoordComplete(ESL_SQ *sq, int64_t L)
+{
+  sq->start = 1;
+  sq->end   = L;
+  sq->C     = 0;
+  sq->W     = L;
+  sq->L     = L;
+  sq->n     = L;
+  return eslOK;
+}
+
+
+
+/* Function:  esl_sq_CAddResidue()
+ * Synopsis:  Add one residue (or terminal NUL) to a text seq.
+ * Incept:    SRE, Wed Jan 10 07:58:20 2007 [Janelia]
+ *
+ * Purpose:   Add one residue <c> onto a growing text mode sequence <sq>,
+ *            and deal with any necessary reallocation.
+ *
+ *            The sequence in <sq> is not <NUL>-terminated. To 
+ *            finish and NUL-terminate <sq>, call 
+ *            <esl_sq_CAddResidue(sq, 0)>.
+ *            
+ * Note:      Not the most efficient routine, but convenient in some
+ *            routines. Parsers (where speed is at a premium) typically
+ *            use an addseq() kind of function instead.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on re-allocation failure.
+ *
+ * Xref:      STL11/125.
+ */
+int
+esl_sq_CAddResidue(ESL_SQ *sq, char c)
+{
+  if (esl_sq_Grow(sq, NULL) != eslOK) return eslEMEM;
+  sq->seq[sq->n] = c;
+  if (c != '\0') sq->n++;
+  return eslOK;
+}
+
+#ifdef eslAUGMENT_ALPHABET
+/* Function:  esl_sq_XAddResidue()
+ * Synopsis:  Add one residue (or terminal sentinel) to digital seq.
+ * Incept:    SRE, Wed Jan 10 08:23:23 2007 [Janelia]
+ *
+ * Purpose:   Like <esl_sq_CAddResidue()>, but for digital mode
+ *            sequence: add a digital residue <x> onto a growing
+ *            digital sequence <sq>. 
+ *            
+ *            The digital sequence in <sq> must be explicitly
+ *            terminated when you're done adding to it; call
+ *            <esl_sq_XAddResidue(sq, eslDSQ_SENTINEL)>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on re-allocation failure.
+ *
+ * Xref:      STL11/125.
+ */
+int
+esl_sq_XAddResidue(ESL_SQ *sq, ESL_DSQ x)
+{
+  if (esl_sq_Grow(sq, NULL) != eslOK) return eslEMEM;
+  sq->dsq[sq->n+1] = x;
+  if (x != eslDSQ_SENTINEL) sq->n++;
+  return eslOK;
+}
+#endif /* eslAUGMENT_ALPHABET */
+
+
+/* Function:  esl_sq_ReverseComplement()
+ * Synopsis:  Reverse complement a sequence.
+ * Incept:    SRE, Thu May 15 20:52:13 2008 [Casa de Gatos]
+ *
+ * Purpose:   Reverse complement the sequence <sq>, in place.
+ *            
+ *            If <sq> is in text mode, upper/lower case is preserved,
+ *            and the DNA alphabet is used (<Aa> is complemented to
+ *            <Tt>, not <Uu>). If a non-nucleic character is seen, it
+ *            is reverse complemented to an N, and the return status
+ *            is <eslEINVAL> (but the whole sequence is still reverse
+ *            complemented).
+ *            
+ *            If <sq> is in digital mode, the appropriate alphabet
+ *            (DNA vs. RNA) is used. If the alphabet has no defined
+ *            complement (such as amino acids), an <eslEINCOMPAT>
+ *            error is thrown, and the sequence isn't changed at all.
+ *            
+ *            Gap, nonresidues, and missing data characters, if any,
+ *            are preserved (in text mode, <._-> are treated as gaps,
+ *            <*> are nonresidues, and <~> as missing
+ *            data). Degenerate nucleic acid IUPAC characters are
+ *            complemented appropriately.
+ *
+ *            The <start/end> coords in <sq> are swapped. (Note that
+ *            in the unusual case of sequences of length 1,
+ *            <start=end> and we can't unambiguously tell if a seq is
+ *            in the reverse complement direction or not; this is a
+ *            minor flaw in Easel's current coordinate handling.)
+ *
+ * Returns:   <eslOK> on success.
+ *            
+ *            Returns <eslEINVAL> if the <sq> is in text mode, and we
+ *            see a character that doesn't belong to the IUPAC DNA/RNA
+ *            alphabet; in this case, the <sq> is still reverse
+ *            complemented using the DNA alphabet, with <N> for any
+ *            non-nucleic residues.
+ *
+ * Throws:    <eslEINCOMPAT> if the <sq> is in digital mode, but the
+ *            digital alphabet has no defined complement.
+ */
+int
+esl_sq_ReverseComplement(ESL_SQ *sq)
+{
+  int64_t i;
+  int     x;               /* index for optional extra residue markups */
+  int     status = eslOK;
+
+  if (sq->seq != NULL)
+    {
+      /* first, complement the sequence */
+      for (i = 0; i < sq->n; i++)
+	switch (sq->seq[i]) {
+	case 'A': sq->seq[i] = 'T'; break;
+	case 'C': sq->seq[i] = 'G'; break;
+	case 'G': sq->seq[i] = 'C'; break;
+	case 'T': sq->seq[i] = 'A'; break;
+	case 'U': sq->seq[i] = 'A'; break;
+	case 'R': sq->seq[i] = 'Y'; break;
+	case 'Y': sq->seq[i] = 'R'; break;
+	case 'M': sq->seq[i] = 'K'; break;
+	case 'K': sq->seq[i] = 'M'; break;
+	case 'S': sq->seq[i] = 'S'; break;
+	case 'W': sq->seq[i] = 'W'; break;
+	case 'H': sq->seq[i] = 'D'; break;
+	case 'B': sq->seq[i] = 'V'; break;
+	case 'V': sq->seq[i] = 'B'; break;
+	case 'D': sq->seq[i] = 'H'; break;
+	case 'N': sq->seq[i] = 'N'; break;
+	case 'X': sq->seq[i] = 'X'; break;
+	case 'a': sq->seq[i] = 't'; break;
+	case 'c': sq->seq[i] = 'g'; break;
+	case 'g': sq->seq[i] = 'c'; break;
+	case 't': sq->seq[i] = 'a'; break;
+	case 'u': sq->seq[i] = 'a'; break;
+	case 'r': sq->seq[i] = 'y'; break;
+	case 'y': sq->seq[i] = 'r'; break;
+	case 'm': sq->seq[i] = 'k'; break;
+	case 'k': sq->seq[i] = 'm'; break;
+	case 's': sq->seq[i] = 's'; break;
+	case 'w': sq->seq[i] = 'w'; break;
+	case 'h': sq->seq[i] = 'd'; break;
+	case 'b': sq->seq[i] = 'v'; break;
+	case 'v': sq->seq[i] = 'b'; break;
+	case 'd': sq->seq[i] = 'h'; break;
+	case 'n': sq->seq[i] = 'n'; break;
+	case 'x': sq->seq[i] = 'x'; break;
+	case '.': sq->seq[i] = '.'; break;
+	case '_': sq->seq[i] = '_'; break;
+	case '-': sq->seq[i] = '-'; break;
+	case '~': sq->seq[i] = '~'; break;
+	case '*': sq->seq[i] = '*'; break;
+	default:  sq->seq[i] = 'N'; status = eslEINVAL; break;
+	}
+
+      /* then, reverse it in place */
+      for (i = 0; i < sq->n / 2; i++)
+	ESL_SWAP(sq->seq[i], sq->seq[sq->n-i-1], char);
+    }
+#ifdef eslAUGMENT_ALPHABET
+  else
+    {
+      if ((status = esl_abc_revcomp(sq->abc, sq->dsq, sq->n)) != eslOK) goto ERROR;
+    }
+#endif /*eslAUGMENT_ALPHABET*/
+
+  ESL_SWAP(sq->start, sq->end, int64_t);
+  /* revcomp invalidates any secondary structure annotation */
+  if (sq->ss != NULL) { free(sq->ss); sq->ss = NULL; }
+  /* revcomp invalidates any extra residue markup */
+  if (sq->nxr > 0) {
+    for (x = 0; x < sq->nxr; x++) 
+      if (sq->xr[x] != NULL) { free(sq->xr_tag[x]); free(sq->xr[x]); sq->xr_tag[x] = NULL; sq->xr[x] = NULL; }  
+    free(sq->xr_tag); sq->xr_tag = NULL;
+    free(sq->xr);     sq->xr     = NULL;
+  }   
+  
+  return status;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_sq_Checksum()
+ * Synopsis:  Calculate a 32-bit checksum for a sequence.
+ * Incept:    SRE, Tue Aug 25 14:32:17 2009 [Janelia]
+ *
+ * Purpose:   Calculate a 32-bit checksum for <sq>.
+ * 
+ *            Only the sequence data are considered, not name or other
+ *            annotation. For text mode sequences, the checksum is
+ *            case sensitive.  The checksum is also sensitive to
+ *            whether the sequence is text or digital mode; the same
+ *            sequence in will yield different checksums in digital
+ *            vs. text mode.
+ *            
+ * Returns:   <eslOK> on success; the checksum is in <*ret_checksum>.
+ */
+int
+esl_sq_Checksum(const ESL_SQ *sq, uint32_t *ret_checksum)
+{
+  uint32_t val = 0;
+  uint64_t pos;
+
+  if (sq->seq != NULL)
+    {
+      for (pos = 0; pos < sq->n; pos++)
+	{
+	  val += sq->seq[pos];
+	  val += (val << 10);
+	  val ^= (val >>  6);
+	}
+    }
+#ifdef eslAUGMENT_ALPHABET
+  else
+    {
+      for (pos = 1; pos <= sq->n; pos++)
+	{
+	  val += sq->dsq[pos];
+	  val += (val << 10);
+	  val ^= (val >>  6);
+	}
+    }
+#endif
+
+  val += (val <<  3);
+  val ^= (val >> 11);
+  val += (val << 15);
+
+  *ret_checksum = val;
+  return eslOK;
+}
+
+
+
+/* Function:  esl_sq_CountResidues()
+ * Synopsis:  compute character counts
+ *
+ * Purpose:   Given an ESL\_SQ <sq>, compute counts of all observed
+ *            residues in the range between <start> and <start>+<L>-1. Note
+ *            that a text-mode sequence starts at 0, while a digital-mode
+ *            sequence starts at 1. Will count degeneracies as partial
+ *            observations of the K canonical residues. Gaps, missing data,
+ *            and not-a-residue characters will be ignored (so $\sum_x f[x]$ is
+ *            not necessarily == L!). The array <*f> needs to be allocated for
+ *            sq->abc->K values.
+ *
+ *            The vector is not zeroed out, allowing counts to be gathered from
+ *            a collection of ESL\_SQs.
+ *
+ * Returns:   <eslOK> on success, <eslERANGE> when start or L are
+ *            outside the range of the sequence.
+ */
+int
+esl_sq_CountResidues(const ESL_SQ *sq, int start, int L, float *f)
+{
+  int i;
+
+  if (sq->seq != NULL) {   /* text */
+    if (start<0 || start+L>sq->n)
+      return eslERANGE; //range out of sequence bounds
+
+    for (i=start ; i < start+L; i++) {
+      if(! esl_abc_CIsGap(sq->abc, sq->seq[i])) // ignore gap characters
+        esl_abc_FCount(sq->abc, f, sq->abc->inmap[(int) sq->seq[i]], 1.);
+    }
+#ifdef eslAUGMENT_ALPHABET
+  } else  { /* digital sequence; 0 is a sentinel       */
+    if (start<1 || start+L>sq->n+1)
+      return eslERANGE; //range out of sequence bounds
+
+    for (i=start ; i < start+L; i++) {
+      if(! esl_abc_XIsGap(sq->abc, sq->dsq[i])) // ignore gap characters
+        esl_abc_FCount(sq->abc, f, sq->dsq[i], 1.);
+    }
+#endif
+  }
+
+  return eslOK;
+}
+
+
+
+/*----------------------  end, other functions -------------------*/
+
+
+
+/*****************************************************************
+ *# 4. Getting single sequences from MSAs  (requires <msa>)
+ *****************************************************************/
+#ifdef eslAUGMENT_MSA
+
+/* Function:  esl_sq_GetFromMSA()
+ * Synopsis:  Get a single sequence from an MSA.
+ * Incept:    SRE, Tue Apr  1 11:13:28 2008 [Janelia]
+ *
+ * Purpose:   Retrieve sequence number <which> (<0..msa->nseq-1>) from
+ *            <msa> and store it in the <sq> that the caller allocated
+ *            and provided. This version (as opposed to
+ *            <esl_sq_FetchFromMSA()>, below) allows caller to reuse
+ *            the same <sq> container for retrieving sequences one at
+ *            a time from an MSA.
+ *            
+ *            The retrieved sequence <sq> must be in the same mode as
+ *            the source <msa>, text versus digital.
+ * 
+ *            The retrieved sequence is dealigned. For a text mode
+ *            sequence, gap characters to be removed are assumed to be
+ *            <-_.>. For a digital mode sequence, gap characters are
+ *            defined by the digital alphabet.
+ *            
+ *            The <sq->source> field is set to the name of the MSA, if
+ *            an MSA name is present.
+ *
+ * Returns:   <eslOK> on success, and the retrieved sequence is in <sq>.
+ *            Some of the internals of <sq> may have been reallocated if
+ *            necessary. 
+ *            
+ *            Returns <eslEOD> if there is no sequence number <which>.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ *            <eslEINVAL> if <sq> is in a different text/digital mode than
+ *            <msa>.
+ */
+int
+esl_sq_GetFromMSA(const ESL_MSA *msa, int which, ESL_SQ *sq)
+{
+  char   *gapchars = "-_.~";	/* hardcoded for now */
+  char   *acc      = NULL;
+  char   *desc     = NULL;
+  char   *ss       = NULL;
+  char  **xr_tag   = NULL;     /* extra residue markup tags                */
+  char  **xr       = NULL;     /* extra residue markup                     */
+  int     x;                   /* index for optional extra residue markups */
+  int     status;
+
+  if (which >= msa->nseq || which < 0) return eslEOD;
+  if ( (msa->flags & eslMSA_DIGITAL) && sq->dsq == NULL) ESL_XEXCEPTION(eslEINVAL, "msa is digital, sq is not");
+  if (!(msa->flags & eslMSA_DIGITAL) && sq->seq == NULL) ESL_XEXCEPTION(eslEINVAL, "msa is text, sq is not");
+
+  /* watch out for completely missing optional msa annotations;
+   * msa->sqacc[which] could segfault if msa->sqacc itself is NULL
+   */
+  if (msa->sqacc  != NULL) acc  = msa->sqacc[which]; 
+  if (msa->sqdesc != NULL) desc = msa->sqdesc[which];
+  if (msa->ss     != NULL) ss   = msa->ss[which]; 
+
+  /* a markup for unparsed #=GR lines is converted to a sequence extra residue markup */
+  if (msa->ngr) 
+    {
+      ESL_ALLOC(xr_tag, sizeof(char *) * msa->ngr); for (x = 0; x < msa->ngr; x++) xr_tag[x] = NULL;
+      ESL_ALLOC(xr,     sizeof(char *) * msa->ngr); for (x = 0; x < msa->ngr; x++) xr[x]     = NULL;
+    }
+
+  sq->nxr = 0;
+  for (x = 0; x < msa->ngr; x ++) {
+    if (msa->gr[x][which] != NULL) {
+      xr[sq->nxr] = msa->gr[x][which];
+      if (msa->gr_tag[x] != NULL) xr_tag[sq->nxr] = msa->gr_tag[x]; else { status = eslEINVAL; goto ERROR;  }
+      sq->nxr ++;
+    } 
+  }
+  if (sq->nxr > 0) {
+    ESL_ALLOC(sq->xr_tag, sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr_tag[x] = NULL;
+    ESL_ALLOC(sq->xr,     sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr[x]     = NULL;
+  }
+
+  if ((status = esl_sq_SetName     (sq, msa->sqname[which])) != eslOK) goto ERROR;
+  if ((status = esl_sq_SetAccession(sq, acc))                != eslOK) goto ERROR;
+  if ((status = esl_sq_SetDesc     (sq, desc))               != eslOK) goto ERROR;
+  if ((status = esl_sq_SetSource   (sq, msa->name))          != eslOK) goto ERROR;
+  if ((status = esl_sq_GrowTo      (sq, msa->alen))          != eslOK) goto ERROR; /* can't be more than alen residues */
+ 
+  if (! (msa->flags & eslMSA_DIGITAL)) /* text mode to text mode */
+    {
+      strcpy(sq->seq, msa->aseq[which]);
+      if (ss != NULL) { 
+	if (sq->ss == NULL) esl_strdup(ss, -1, &(sq->ss));
+	else                strcpy(sq->ss, ss);
+	esl_strdealign(sq->ss, sq->seq, gapchars, NULL);
+      }
+      for (x = 0; x < sq->nxr; x++) {
+	esl_strdup(xr[x],     -1, &(sq->xr[x]));              
+	esl_strdup(xr_tag[x], -1, &(sq->xr_tag[x]));
+	esl_strdealign(sq->xr[x], sq->seq, gapchars, NULL);
+      }
+      esl_strdealign(sq->seq, sq->seq, gapchars, &(sq->n)); /* sq->n gets set as side effect */
+     }
+#ifdef eslAUGMENT_ALPHABET
+  else
+    {
+      esl_abc_dsqcpy(msa->ax[which], msa->alen, sq->dsq);
+      if (ss != NULL) { 
+	if (sq->ss == NULL) { /* even in digital mode, msa->ss is [0.alen-1] */
+	  ESL_ALLOC(sq->ss, sizeof(char) * (strlen(ss)+2));
+	  sq->ss[0] = '\0'; 
+	  strcpy(sq->ss+1, ss);
+	}
+	else  { strcpy(sq->ss+1, ss); sq->ss[0] = '\0'; }
+	esl_abc_CDealign(sq->abc, sq->ss+1, sq->dsq, NULL);
+      }
+      for (x = 0; x < sq->nxr; x ++) { /* even in digital mode, msa->gr are [0.alen-1] */
+	ESL_ALLOC(sq->xr[x], sizeof(char) * (strlen(xr[x])+2));
+	sq->xr[x][0] = '\0'; 
+	strcpy(sq->xr[x]+1, xr[x]);
+	esl_abc_CDealign(sq->abc, sq->xr[x]+1, sq->dsq, NULL);	
+	esl_strdup(xr_tag[x], -1, &(sq->xr_tag[x]));
+      }
+      esl_abc_XDealign(sq->abc, sq->dsq,  sq->dsq, &(sq->n)); /* sq->n gets set as side effect */
+  }
+#endif /*eslAUGMENT_ALPHABET*/
+  
+  /* This is a complete sequence; set bookkeeping accordingly */
+  sq->start  = 1;
+  sq->end    = sq->n;
+  sq->C      = 0;
+  sq->W      = sq->n;
+  sq->L      = sq->n;
+
+  sq->roff = -1;
+  sq->doff = -1;
+  sq->hoff = -1;
+  sq->eoff = -1;
+  
+  if (xr_tag) free(xr_tag); 
+  if (xr)     free(xr);    
+  return eslOK;
+
+ ERROR:
+  if (xr_tag) free(xr_tag);
+  if (xr)     free(xr);
+  return status;
+}
+
+
+/* Function:  esl_sq_FetchFromMSA()
+ * Synopsis:  Fetch a single sequence from an MSA.
+ * Incept:    SRE, Sun Mar 30 13:39:06 2008 [Janelia]
+ *
+ * Purpose:   Retrieve sequence number <which> (<0..msa->nseq-1>) from <msa>, in a newly
+ *            allocated sequence object; return a pointer to this object
+ *            in <ret_sq>.
+ * 
+ *            The retrieved sequence is in the same mode as the source
+ *            <msa>, text versus digital.
+ * 
+ *            The retrieved sequence is dealigned. For a text mode
+ *            sequence, gap characters to be removed are assumed to be
+ *            <-_.~>. For a digital mode sequence, gap characters are
+ *            defined by the digital alphabet.
+ *
+ * Returns:   <eslOK> on success, and a pointer to the newly fetched
+ *            sequence is in <*ret_sq>, which caller is responsible for freeing.
+ *            
+ *            Returns <eslEOD> if there is no sequence number <which>.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_sq_FetchFromMSA(const ESL_MSA *msa, int which, ESL_SQ **ret_sq)
+{
+  ESL_SQ *sq       = NULL;
+  char   *acc      = NULL;
+  char   *desc     = NULL;
+  char   *ss       = NULL;
+  char   *gapchars = "-_.~";   /* hardcoded for now; only affects text mode, not digital */
+  char  **xr_tag   = NULL;     /* extra residue markup tags                */
+  char  **xr       = NULL;     /* extra residue markup                     */
+  int     nxr = 0;             /* number of extra residue markups          */
+  int     x;                   /* index for optional extra residue markups */
+  int     status;
+
+  if (which >= msa->nseq || which < 0) return eslEOD;
+
+  /* watch out for optional msa annotations being totally NULL */
+  if (msa->sqacc  != NULL) acc  = msa->sqacc[which]; 
+  if (msa->sqdesc != NULL) desc = msa->sqdesc[which];
+  if (msa->ss     != NULL) ss   = msa->ss[which]; 
+
+  /* a markup for unparsed #=GR lines is converted to a sequence extra residue markup */
+  if (msa->ngr > 0) {
+    ESL_ALLOC(xr_tag, sizeof(char *) * msa->ngr);
+    ESL_ALLOC(xr,     sizeof(char *) * msa->ngr);    
+    for (x = 0; x < msa->ngr; x ++) {
+      xr_tag[x] = NULL;
+      xr[x]     = NULL;
+      if (msa->gr[x][which] != NULL) {
+	xr[nxr] = msa->gr[x][which];
+	if (msa->gr_tag[x] != NULL) xr_tag[nxr] = msa->gr_tag[x]; else goto ERROR; 
+	nxr ++;
+      } 
+    }
+  }
+
+  if (! (msa->flags & eslMSA_DIGITAL)) /* text mode MSA to text mode sequence */
+    {
+      if ((sq = esl_sq_CreateFrom(msa->sqname[which], msa->aseq[which], desc, acc, ss)) == NULL) goto ERROR;
+      if (sq->ss != NULL) esl_strdealign(sq->ss,  sq->seq, gapchars, NULL);
+
+      if (nxr > 0) {
+	sq->nxr = nxr;
+	ESL_ALLOC(sq->xr_tag, sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr_tag[x] = NULL;
+	ESL_ALLOC(sq->xr,     sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr[x] = NULL;
+	for (x = 0; x < sq->nxr; x ++) {
+	  if (xr[x] != NULL) {
+	    if (sq->xr[x] == NULL) esl_strdup(xr[x], sq->n, &(sq->xr[x]));
+	    else                   strcpy(sq->xr[x], xr[x]);
+	    esl_strdealign(sq->xr[x],  sq->seq, gapchars, NULL);
+	  }
+	  if (xr_tag[x] != NULL) {
+	    if (sq->xr_tag[x] == NULL) esl_strdup(xr_tag[x], -1, &(sq->xr_tag[x]));
+	    else                       strcpy(sq->xr_tag[x], xr_tag[x]);
+	  }
+	}
+      }
+      esl_strdealign(sq->seq, sq->seq, gapchars, &(sq->n));
+    }
+#ifdef eslAUGMENT_ALPHABET
+  else				/* digital mode MSA to digital mode sequence */
+    {
+      if ((sq = esl_sq_CreateDigitalFrom(msa->abc, msa->sqname[which], msa->ax[which], msa->alen, desc, acc, ss)) == NULL) goto ERROR; 
+      if (sq->ss != NULL) esl_abc_CDealign(sq->abc, sq->ss+1, sq->dsq, NULL);
+      if (nxr > 0) {
+	sq->nxr = nxr;
+	ESL_ALLOC(sq->xr_tag, sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr_tag[x] = NULL;
+	ESL_ALLOC(sq->xr,     sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr[x] = NULL;
+	for (x = 0; x < sq->nxr; x ++) {
+	  if (xr[x] != NULL) {
+	    if (sq->xr[x] == NULL) {
+	      ESL_ALLOC(sq->xr[x], sizeof(char) * (sq->n+2));
+	      sq->xr[x][0] = '\0';
+	      strcpy(sq->xr[x]+1, xr[x]);
+	    }
+	    else strcpy(sq->xr[x]+1, xr[x]); sq->xr[x][0] = '\0'; 	    
+	    esl_abc_CDealign(sq->abc, sq->xr[x]+1, sq->dsq, NULL);
+	  }
+	  if (xr_tag[x] != NULL) {
+	    if (sq->xr_tag[x] == NULL) esl_strdup(xr_tag[x], -1, &(sq->xr_tag[x]));
+	    else                        strcpy(sq->xr_tag[x], xr_tag[x]);
+	  }
+	}
+      }
+      esl_abc_XDealign(sq->abc, sq->dsq,  sq->dsq, &(sq->n));
+    }
+#endif
+
+  if ((status = esl_sq_SetSource(sq, msa->name)) != eslOK) goto ERROR;
+
+  sq->start = 1;
+  sq->end   = sq->n;
+  sq->L     = sq->n;
+  sq->C     = 0;
+  sq->W     = sq->n;
+  *ret_sq   = sq;
+
+  if (msa->ngr > 0) {
+    free(xr_tag); free(xr);
+  }  
+  return eslOK;
+  
+ ERROR:
+  if (msa->ngr > 0) {
+    if (xr_tag != NULL) free(xr_tag); if (xr != NULL) free(xr);
+  }  
+  esl_sq_Destroy(sq);
+  *ret_sq = NULL;
+  return eslEMEM;
+}
+#endif /*eslAUGMENT_MSA*/
+/*---------------- end,  sequences from MSAs --------------------*/
+
+
+
+/*****************************************************************
+ *# 5. Debugging/development tools [with <random> and <randomseq>]
+ *****************************************************************/
+#if defined eslAUGMENT_RANDOM && defined eslAUGMENT_RANDOMSEQ
+
+/* Function:  esl_sq_Sample()
+ * Synopsis:  Sample a random, ugly <ESL_SQ> for test purposes.
+ * Incept:    SRE, Tue Feb 23 08:32:54 2016 [H1/83]
+ *
+ * Purpose:   Sample a random sequence with random annotation, with a
+ *            sequence length of <0..maxL> (note 0 is included!),
+ *            using the random number generator <rng>. Return the
+ *            newly allocated sequence in <*ret_sq>. Caller is 
+ *            responsible for free'ing it with <esl_sq_Destroy()>.
+ *            
+ *            If <abc> is <NULL>, a text mode sequence is sampled.  If
+ *            a digital alphabet <abc> is provided, a digital mode
+ *            sequence is sampled.
+ *            
+ *            This routine is intended for producing test cases. The
+ *            sequence object contains randomized contents. If you
+ *            want to synthesize random sequences (as opposed to
+ *            sampling an entirely synthetic <ESL_SQ> object), see
+ *            the <randomseq> module.
+ *
+ * Args:      rng    : random number generator
+ *            abc    : digital alphabet; or <NULL> for text mode
+ *            maxL   : sequence length sampled is 0..maxL 
+ *            ret_sq : RESULT: new <ESL_SQ>
+ *
+ * Returns:   <eslOK> on success
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_sq_Sample(ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, int maxL, ESL_SQ **ret_sq)
+{
+  ESL_SQ *sq   = *ret_sq;               // caller may or may not provide an existing <sq>
+  int     maxn = eslSQ_NAMECHUNK *2;    // by being bigger than the initial alloc size, we will exercise realloc
+  int     maxa = eslSQ_ACCCHUNK  *2;
+  int     maxd = eslSQ_DESCCHUNK *2;
+  char   *buf  = NULL;
+  int     n;
+  int     status;
+  
+  n = ESL_MAX(maxn, ESL_MAX(maxa, maxd));
+  ESL_ALLOC(buf, sizeof(char) * (n+1));
+
+  if (! sq)
+    {
+      if (abc == NULL) { if (( sq = esl_sq_Create())           == NULL) { status = eslEMEM; goto ERROR; } }
+#ifdef eslAUGMENT_ALPHABET
+      else             { if (( sq = esl_sq_CreateDigital(abc)) == NULL) { status = eslEMEM; goto ERROR; } }
+#endif /*eslAUGMENT_ALPHABET*/
+    }
+    
+  /* Name */
+  do {
+    n = 1 + esl_rnd_Roll(rng, maxn);                    // 1..maxn
+    esl_rsq_Sample(rng, eslRSQ_SAMPLE_GRAPH, n, &buf);  // one word: no space
+  } while (ispunct(buf[0]));                            // #, // are bad things for names to start with in Stockholm 
+  esl_sq_SetName(sq, buf);
+  
+  /* Optional accession */
+  if (esl_rnd_Roll(rng, 2))                              // 50% chance of an accession
+    {
+      n = 1 + esl_rnd_Roll(rng, maxa);                   // 1..maxa
+      esl_rsq_Sample(rng, eslRSQ_SAMPLE_GRAPH, n, &buf); // one word: no space
+      esl_sq_SetAccession(sq, buf);
+    }
+
+  /* Optional description */
+  if (esl_rnd_Roll(rng, 2))                                // 50% chance of a description
+    {
+      do {
+	n = 1 + esl_rnd_Roll(rng, maxd);                     // 1..maxa
+	esl_rsq_Sample(rng, eslRSQ_SAMPLE_PRINT, n, &buf);   // include spaces in descriptions...
+      } while (isspace(buf[0]));                             // ... just not as the first char.
+      esl_sq_SetDesc(sq, buf);
+    }
+
+  /* Optional taxid.  */
+  if (esl_rnd_Roll(rng, 2))                               // 50% chance of taxid
+    {
+      sq->tax_id = 1 + esl_rnd_Roll(rng, 2147483647);     // 1..2^31-1
+    }
+
+  /* Sequence, in text or digital mode */
+  n = esl_rnd_Roll(rng, maxL+1);                                             //0..maxL; 0 len seqs happen
+  esl_sq_GrowTo(sq, n);
+  if (abc == NULL) esl_rsq_Sample(rng, eslRSQ_SAMPLE_ALPHA, n, &(sq->seq));
+#ifdef eslAUGMENT_ALPHABET
+  else             esl_rsq_SampleDirty(rng, abc, NULL, n, sq->dsq);         // "dirty" = with ambig residues
+#endif /*eslAUGMENT_ALPHABET*/
+  esl_sq_SetCoordComplete(sq, n);
+
+  free(buf);
+  *ret_sq = sq;
+  return eslOK;
+
+ ERROR:
+  if (buf)               free(buf);
+  if (!(*ret_sq) && sq)  esl_sq_Destroy(sq);
+  return status;
+}
+#endif /*eslAUGMENT_RANDOM && eslAUGMENT_RANDOMSEQ */
+
+
+
+/*****************************************************************
+ * 6. Internal functions
+ *****************************************************************/
+
+/* Create and CreateDigital() are almost identical, so
+ * their shared guts are here:
+ */
+static ESL_SQ *
+sq_create(int do_digital)
+{
+  ESL_SQ *sq = NULL;
+  int status;
+
+  ESL_ALLOC(sq, sizeof(ESL_SQ));
+
+  if (sq_init(sq, do_digital) != eslOK) goto ERROR;
+
+  return sq;
+
+ ERROR:
+  esl_sq_Destroy(sq);
+  return NULL;
+}  
+
+/* Create an <ESL_SQ_BLOCK> object and its list of <ESL_SQ> objects */
+static ESL_SQ_BLOCK *
+sq_createblock(int count, int do_digital)
+{
+  int i = 0;
+
+  ESL_SQ_BLOCK *block = NULL;
+  int status = eslOK;
+
+  ESL_ALLOC(block, sizeof(ESL_SQ_BLOCK));
+
+  block->count = 0;
+  block->first_seqidx = -1;
+  block->list  = NULL;
+  block->complete = TRUE;
+
+  ESL_ALLOC(block->list, sizeof(ESL_SQ) * count);
+  block->listSize = count;
+
+  for (i = 0; i < count; ++i)
+    {
+      if (sq_init(block->list + i, do_digital) != eslOK) goto ERROR;
+    }
+
+  return block;
+
+ ERROR:
+  esl_sq_DestroyBlock(block);
+  return NULL;
+}  
+
+/* Initialize <ESL_SQ> object */
+static int
+sq_init(ESL_SQ *sq, int do_digital)
+{
+  int status;
+
+  sq->name     = NULL;
+  sq->acc      = NULL;
+  sq->desc     = NULL;
+  sq->source   = NULL;
+  sq->tax_id   = -1;
+  sq->seq      = NULL;
+  sq->dsq      = NULL;	
+  sq->ss       = NULL;		/* Note that ss is optional - it will only be allocated if needed */
+  /* n, coord bookkeeping, and strings are all set below by a call to Reuse() */
+
+  sq->nalloc   = eslSQ_NAMECHUNK;	
+  sq->aalloc   = eslSQ_ACCCHUNK;
+  sq->dalloc   = eslSQ_DESCCHUNK;
+  sq->salloc   = eslSQ_SEQCHUNK; 
+  sq->srcalloc = eslSQ_NAMECHUNK; 
+
+  ESL_DASSERT1(( sq->salloc >= 4 )); // dsqdata makes this assumption when it packs in place.
+
+  /* optional for extra residue markups */
+  sq->nxr    = 0;
+  sq->xr_tag = NULL;
+  sq->xr     = NULL;
+
+  ESL_ALLOC(sq->name,   sizeof(char) * sq->nalloc);
+  ESL_ALLOC(sq->acc,    sizeof(char) * sq->aalloc);
+  ESL_ALLOC(sq->desc,   sizeof(char) * sq->dalloc);
+  ESL_ALLOC(sq->source, sizeof(char) * sq->srcalloc);
+  if (do_digital) ESL_ALLOC(sq->dsq,  sizeof(ESL_DSQ) * sq->salloc);
+  else            ESL_ALLOC(sq->seq,  sizeof(char)    * sq->salloc);
+
+  esl_sq_Reuse(sq);	/* initialization of sq->n, offsets, and strings */
+  return eslOK;
+
+ ERROR:
+  return eslEMEM;
+}  
+
+/* CreateFrom and CreateDigitalFrom() are almost identical, so
+ * their shared guts are here:
+ */
+static ESL_SQ *
+sq_create_from(const char *name, const char *desc, const char *acc)
+{
+  ESL_SQ *sq = NULL;
+  int64_t n;
+  int     status;
+
+  ESL_ALLOC(sq, sizeof(ESL_SQ));
+  sq->name   = NULL;
+  sq->acc    = NULL;
+  sq->desc   = NULL;
+  sq->seq    = NULL;
+  sq->dsq    = NULL;
+  sq->ss     = NULL;
+  sq->source = NULL;
+
+  /* optional for extra residue markups */
+  sq->nxr    = 0;
+  sq->xr_tag = NULL;
+  sq->xr     = NULL;
+
+  /* coord bookkeeping has to be set by the parent caller,
+   * because that's where we know the seq length <n>. We don't
+   * know it here.
+   */
+  sq->doff = -1;
+  sq->hoff = -1;
+  sq->roff = -1;
+  sq->eoff = -1;
+
+  if (name != NULL)
+    {
+      n = strlen(name)+1;
+      ESL_ALLOC(sq->name, sizeof(char) * n);
+      strcpy(sq->name, name);
+      sq->nalloc = n;
+    }
+  else 
+    {
+      sq->nalloc = eslSQ_NAMECHUNK;
+      ESL_ALLOC(sq->name, sizeof(char) * sq->nalloc);
+      sq->name[0] = '\0';
+    }
+  
+  if (desc != NULL) 
+    {
+      n = strlen(desc)+1;
+      ESL_ALLOC(sq->desc, sizeof(char) * n);
+      strcpy(sq->desc, desc);
+      sq->dalloc = n;
+    } 
+  else 
+    {
+      sq->dalloc   = eslSQ_DESCCHUNK;
+      ESL_ALLOC(sq->desc, sizeof(char) * sq->dalloc);    
+      sq->desc[0] = '\0';
+    }
+
+  if (acc != NULL) 
+    {
+      n = strlen(acc)+1;
+      ESL_ALLOC(sq->acc, sizeof(char) * n);
+      strcpy(sq->acc, acc);
+      sq->aalloc = n;
+    } 
+  else 
+    {
+      sq->aalloc   = eslSQ_ACCCHUNK;
+      ESL_ALLOC(sq->acc,  sizeof(char) * sq->aalloc);
+      sq->acc[0] = '\0';
+    }
+
+  /* no source name */
+  sq->srcalloc = eslSQ_NAMECHUNK;
+  ESL_ALLOC(sq->source, sizeof(char) * sq->srcalloc);
+  sq->source[0] = '\0';
+
+
+  return sq;
+
+ ERROR:
+  esl_sq_Destroy(sq);
+  return NULL;
+}
+
+/* Free <ESL_SQ> object */
+static void
+sq_free(ESL_SQ *sq)
+{
+  int   x;        /* index for optional extra residue markups */
+  if (sq->name   != NULL)   free(sq->name);
+  if (sq->acc    != NULL)   free(sq->acc);
+  if (sq->desc   != NULL)   free(sq->desc);
+  if (sq->source != NULL)   free(sq->source);
+  if (sq->seq    != NULL)   free(sq->seq);
+  if (sq->dsq    != NULL)   free(sq->dsq);
+  if (sq->ss     != NULL)   free(sq->ss);
+  if (sq->nxr > 0) {
+    for (x = 0; x < sq->nxr; x++) {
+      if (sq->xr[x]     != NULL) free(sq->xr[x]);
+      if (sq->xr_tag[x] != NULL) free(sq->xr_tag[x]);  
+    }       
+    if (sq->xr     != NULL) free(sq->xr);
+    if (sq->xr_tag != NULL) free(sq->xr_tag); 
+  }    
+}  
+
+/*----------------- end, internal functions ---------------------*/
+
+
+/*****************************************************************
+ * 7. Unit tests.
+ *****************************************************************/
+#ifdef eslSQ_TESTDRIVE
+#include "esl_random.h"
+
+static void
+utest_Create()
+{
+  char   *msg  = "failure in utest_Create()";
+  char   *name = "seqname";
+  char   *acc  = "XX00001";
+  char   *desc = "test sequence description";
+  char   *seq  = "ACDEFGHIKLMNPQRSTVWY";
+  char   *ss   = "xxxx....xxxx....xxxx";
+  int64_t n    = strlen(seq);
+  ESL_SQ *sq1  = esl_sq_CreateFrom(name, seq, desc, acc, ss);
+  ESL_SQ *sq2  = esl_sq_Create();
+
+  if (sq1 == NULL || sq2 == NULL) esl_fatal(msg);
+
+  if (esl_sq_GrowTo(sq2, n)                                                    != eslOK) esl_fatal(msg);
+  if (esl_sq_FormatName     (sq2, "%s%s", "seq", "name")                       != eslOK) esl_fatal(msg);
+  if (esl_sq_FormatAccession(sq2, "%s%05d", "XX", 1)                           != eslOK) esl_fatal(msg);
+  if (esl_sq_FormatDesc     (sq2, "%s %s %s", "test","sequence","description") != eslOK) esl_fatal(msg);
+  if (esl_sq_FormatSource   (sq2, "%s", "source-unknown")                      != eslOK) esl_fatal(msg);
+  if (esl_strdup(ss, -1, &(sq2->ss))                                           != eslOK) esl_fatal(msg);
+  strcpy(sq2->seq, seq);
+  sq2->n = n;
+
+  if (strcmp(sq1->name, sq2->name) != 0) esl_fatal(msg);
+  if (strcmp(sq1->acc,  sq2->acc)  != 0) esl_fatal(msg);
+  if (strcmp(sq1->desc, sq2->desc) != 0) esl_fatal(msg);
+  if (strcmp(sq1->seq,  sq2->seq)  != 0) esl_fatal(msg);
+  if (strcmp(sq1->ss,   sq2->ss)   != 0) esl_fatal(msg);
+  if (sq1->n != sq2->n)                  esl_fatal(msg);
+
+  esl_sq_Destroy(sq1);
+  esl_sq_Destroy(sq2);
+}
+
+/* This tests the Set() functions. */
+static void
+utest_Set(ESL_RANDOMNESS *r)
+{
+  char   *msg     = "sqio Set unit test failure";
+  ESL_SQ *sq      = esl_sq_Create();
+  int     ntrials = 8;
+  int     maxn    = eslSQ_NAMECHUNK*2;
+  int     maxa    = eslSQ_ACCCHUNK*2;
+  int     maxd    = eslSQ_DESCCHUNK*2;
+  int     n       = ESL_MAX( maxn, ESL_MAX(maxa, maxd));
+  char   *buf     = malloc(sizeof(char) * (n+1));
+  int64_t L;
+  int     i;
+
+  for (i = 0; i < ntrials; i++)
+    {
+      L = esl_rnd_Roll(r, maxn) + 1;
+      memset(buf, 'x', L);
+      buf[L] = '\0';
+      if (esl_sq_SetName(sq, buf) != eslOK) esl_fatal(msg);
+    }
+  for (i = 0; i < ntrials; i++)
+    {
+      L = esl_rnd_Roll(r, maxa) + 1;
+      memset(buf, 'x', L);
+      buf[L] = '\0';
+      if (esl_sq_SetAccession(sq, buf) != eslOK) esl_fatal(msg);
+    }      
+  for (i = 0; i < ntrials; i++)
+    {
+      L = esl_rnd_Roll(r, maxd) + 1;
+      memset(buf, 'x', L);
+      buf[L] = '\0';
+      if (esl_sq_SetDesc(sq, buf) != eslOK) esl_fatal(msg);
+    }      
+  free(buf);
+  esl_sq_Destroy(sq);
+} 
+
+
+/* This tests the Format() functions - 
+ * in particular, the way they use vsnprintf().
+ */
+static void
+utest_Format(ESL_RANDOMNESS *r)
+{
+  char   *msg     = "esl_sq_Format*() unit test failure";
+  ESL_SQ *sq      = esl_sq_Create();
+  int     ntrials = 128;
+  int     maxn    = eslSQ_NAMECHUNK*2;
+  int     maxa    = eslSQ_ACCCHUNK*2;
+  int     maxd    = eslSQ_DESCCHUNK*2;
+  int     n       = ESL_MAX( maxn, ESL_MAX(maxa, maxd));
+  char   *buf     = malloc(sizeof(char) * (n+1));
+  int64_t L;
+  int     i;
+
+  for (i = 0; i < ntrials; i++)
+    {
+      L = esl_rnd_Roll(r, maxn) + 1;
+      memset(buf, 'x', L);
+      buf[L] = '\0';
+      if (esl_sq_FormatName(sq, "%s%d", buf, i) != eslOK) esl_fatal(msg);
+    }
+  for (i = 0; i < ntrials; i++)
+    {
+      L = esl_rnd_Roll(r, maxa) + 1;
+      memset(buf, 'x', L);
+      buf[L] = '\0';
+      if (esl_sq_FormatAccession(sq, "%s%d", buf, i) != eslOK) esl_fatal(msg);
+    }      
+  for (i = 0; i < ntrials; i++)
+    {
+      L = esl_rnd_Roll(r, maxd) + 1;
+      memset(buf, 'x', L);
+      buf[L] = '\0';
+      if (esl_sq_FormatDesc(sq, "%s%d", buf, i) != eslOK) esl_fatal(msg);
+    }      
+  free(buf);
+  esl_sq_Destroy(sq);
+} 
+
+
+#ifdef eslAUGMENT_ALPHABET
+static void
+utest_CreateDigital()
+{
+  char         *msg  = "failure in utest_CreateDigital()";
+  ESL_ALPHABET *abc  = esl_alphabet_Create(eslRNA);
+  char         *name = "seqname";
+  char         *acc  = "XX00001";
+  char         *desc = "test sequence description";
+  char         *seq  = "GGGAAATTTCCC";
+  char         *ss   = "<<<......>>>";
+  ESL_DSQ      *dsq  = NULL;
+  int64_t       n    = strlen(seq);
+  ESL_SQ       *sq1  = NULL;
+  ESL_SQ       *sq2  = NULL;
+  ESL_SQ       *sq3  = NULL;
+
+  if (esl_abc_CreateDsq(abc, seq, &dsq)                                     != eslOK) esl_fatal(msg);
+  if ((sq1 = esl_sq_CreateDigitalFrom(abc, name, dsq, n, desc, acc, ss))    == NULL)  esl_fatal(msg);
+
+  if ((sq2 = esl_sq_CreateDigital(abc))                                        == NULL)  esl_fatal(msg);
+  if (esl_sq_GrowTo(sq2, n)                                                    != eslOK) esl_fatal(msg);
+  if (esl_sq_FormatName     (sq2, "%s%s", "seq", "name")                       != eslOK) esl_fatal(msg);
+  if (esl_sq_FormatAccession(sq2, "%s%05d", "XX", 1)                           != eslOK) esl_fatal(msg);
+  if (esl_sq_FormatDesc     (sq2, "%s %s %s", "test","sequence","description") != eslOK) esl_fatal(msg);
+  if (esl_sq_FormatSource   (sq2, "%s", "source-unknown")                      != eslOK) esl_fatal(msg);
+  if ((sq2->ss    = malloc(sizeof(char) * (n+2)))                              == NULL)  esl_fatal(msg);
+  strcpy(sq2->ss+1, ss);   sq2->ss[0] = '\0';
+  if (esl_abc_Digitize(abc, seq, sq2->dsq)                                  != eslOK) esl_fatal(msg);
+  sq2->n = n;
+
+  if ((sq3 = esl_sq_Create()) == NULL)   esl_fatal(msg);
+  if (esl_sq_Copy(sq1, sq3)   != eslOK)  esl_fatal(msg); /* sq3 is now text mode */
+  if (esl_sq_Textize(sq2)     != eslOK)  esl_fatal(msg); /* sq2 is now text mode */
+  
+  if (strcmp(sq3->name, sq2->name) != 0) esl_fatal(msg); /* sq2,sq3 should be identical text mode */
+  if (strcmp(sq3->acc,  sq2->acc)  != 0) esl_fatal(msg);
+  if (strcmp(sq3->desc, sq2->desc) != 0) esl_fatal(msg);
+  if (strcmp(sq3->seq,  sq2->seq)  != 0) esl_fatal(msg);
+  if (strcmp(sq3->ss,   sq2->ss)   != 0) esl_fatal(msg);
+  if (sq3->n != sq2->n)                  esl_fatal(msg);
+
+  /* sq3 back to digital; should = sq1 again */
+  if (esl_sq_Digitize(abc, sq3)                              != eslOK) esl_fatal(msg); 
+  if (memcmp(sq3->dsq, sq1->dsq, sizeof(ESL_DSQ) * (sq3->n)) != 0)     esl_fatal(msg);
+  if (sq3->n != sq1->n)                                                esl_fatal(msg);
+
+  free(dsq);
+  esl_alphabet_Destroy(abc);
+  esl_sq_Destroy(sq1);
+  esl_sq_Destroy(sq2);
+  esl_sq_Destroy(sq3);
+}
+#endif /*eslAUGMENT_ALPHABET*/
+
+/* write_msa_with_seqmarkups()
+ * Write a good MSA with sequence markups to a tmpfile in Stockholm format.
+ */
+static void
+write_msa_with_seqmarkups(FILE *ofp)
+{
+  fprintf(ofp, "# STOCKHOLM 1.0\n");
+  fprintf(ofp, "seq1                         ACDE.FGHKLMNPQRSTVWY\n");
+  fprintf(ofp, "#=GR seq1 tWS                ..<..<........>...>.\n");
+  fprintf(ofp, "seq2                         ACDEGFGHKLMNPQRSTVWY\n");
+  fprintf(ofp, "seq3                         ACDEGFGHKLMNPQRSTVWY\n");
+  fprintf(ofp, "#=GR seq3 SS                 ...<<..>>...........\n");
+  fprintf(ofp, "seq4                         ACDE.FGHKLMNPQRSTVWY\n");
+  fprintf(ofp, "seq5                         ACDEGFGHKLMNPQRSTVWY\n");
+  fprintf(ofp, "seq6                         ACDE.FGHKLMNPQRSTVWY\n");
+  fprintf(ofp, "#=GR seq6 SS                 ........<<<..>>>....\n");
+  fprintf(ofp, "#=GR seq6 tWH                .<...A...>....a.....\n");
+  fprintf(ofp, "#=GR seq6 csS                .<.................>\n");  
+  fprintf(ofp, "//\n");
+  return;
+}
+
+/* test optional extra residue markups in a sq */
+#include "esl_msafile.h"
+#include "esl_msafile_stockholm.h"
+static void
+utest_ExtraResMarkups()
+{
+  char                 msg[]       = "sq extra residue markups test driver failed";
+  char                 tmpfile[32];
+  FILE                *ofp  = NULL;
+  ESL_ALPHABET        *abc  = NULL;
+  ESL_MSAFILE         *afp1 = NULL;
+  ESL_MSAFILE         *afp2 = NULL;
+  ESL_MSA             *msa1 = NULL;
+  ESL_MSA             *msa2 = NULL;
+  ESL_SQ              *sq   = NULL;
+  ESL_SQ              *sq1  = NULL;
+  ESL_SQ              *sq2  = NULL;
+
+  strcpy(tmpfile, "esltmpXXXXXX"); 
+  if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg);
+  write_msa_with_seqmarkups(ofp);
+  fclose(ofp);
+
+  /* Digital msa to digital sq */
+  esl_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp1);  
+  esl_msafile_stockholm_Read(afp1, &msa1);  
+
+  sq = esl_sq_CreateDigital(abc);
+  if (esl_sq_GetFromMSA(msa1, 0, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq);
+  if (esl_sq_GetFromMSA(msa1, 1, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq);
+  if (esl_sq_GetFromMSA(msa1, 2, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq);
+  if (esl_sq_GetFromMSA(msa1, 5, sq) != eslOK) esl_fatal(msg); 
+
+  /* test of sq_Copy */
+  sq1 = esl_sq_Create();
+  sq2 = esl_sq_CreateDigital(abc);
+  esl_sq_Copy(sq, sq1);
+  esl_sq_Copy(sq, sq2);
+  esl_sq_Destroy(sq1);
+  esl_sq_Destroy(sq2);
+  esl_sq_Destroy(sq);
+  
+  if (esl_sq_FetchFromMSA(msa1, 0, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq);
+  if (esl_sq_FetchFromMSA(msa1, 1, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq);
+  if (esl_sq_FetchFromMSA(msa1, 2, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq);
+  if (esl_sq_FetchFromMSA(msa1, 5, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq);
+
+  
+  /* Text msa to text sq */
+  esl_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2);  
+  esl_msafile_stockholm_Read(afp2, &msa2);  
+  
+  sq = esl_sq_Create();
+  if (esl_sq_GetFromMSA(msa2, 0, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq);
+  if (esl_sq_GetFromMSA(msa2, 1, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq);
+  if (esl_sq_GetFromMSA(msa2, 2, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq);
+  if (esl_sq_GetFromMSA(msa2, 5, sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq);
+  
+  if (esl_sq_FetchFromMSA(msa2, 0, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq);
+  if (esl_sq_FetchFromMSA(msa2, 1, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq);
+  if (esl_sq_FetchFromMSA(msa2, 2, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq);
+  if (esl_sq_FetchFromMSA(msa2, 5, &sq) != eslOK) esl_fatal(msg); 
+  /* test of sq_Copy */
+  sq1 = esl_sq_Create();
+  sq2 = esl_sq_CreateDigital(abc);
+  esl_sq_Copy(sq, sq1);
+  esl_sq_Copy(sq, sq2);
+  esl_sq_Destroy(sq1);
+  esl_sq_Destroy(sq2);
+  esl_sq_Destroy(sq);
+
+  /* clean up */
+  remove(tmpfile);
+  esl_msafile_Close(afp1);
+  esl_msafile_Close(afp2);
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  esl_alphabet_Destroy(abc);
+} 
+
+/* test counting residues in a sq */
+static void
+utest_CountResidues()
+{
+  char         *msg  = "failure in utest_CountResidues()";
+  char         *name = "seqname";
+  char         *acc  = "XX00001";
+  char         *desc = "test sequence description";
+  char         *seq  = "GGGAATTCCC";
+  char         *ss   = "xxxx...xxx";
+  ESL_SQ       *sq   = NULL;
+  float        *cnts = NULL;
+  int          status;
+  ESL_ALPHABET *abc  = esl_alphabet_Create(eslDNA);
+
+  ESL_ALLOC(cnts, abc->Kp * sizeof(float));
+
+
+  if ((sq = esl_sq_CreateFrom(name, seq, desc, acc, ss))    == NULL)  esl_fatal(msg);
+  sq->abc = abc;
+  esl_vec_FSet (cnts, abc->K, 0);
+  esl_sq_CountResidues(sq, 0, sq->n, cnts);
+  if (cnts[0] != 2)  esl_fatal(msg);
+  if (cnts[1] != 3)  esl_fatal(msg);
+  if (cnts[2] != 3)  esl_fatal(msg);
+  if (cnts[3] != 2)  esl_fatal(msg);
+
+
+#ifdef eslAUGMENT_ALPHABET
+  esl_sq_Digitize(abc, sq);
+  esl_vec_FSet (cnts, abc->K, 0);
+  esl_sq_CountResidues(sq, 1, sq->n, cnts);
+  if (cnts[0] != 2)  esl_fatal(msg);
+  if (cnts[1] != 3)  esl_fatal(msg);
+  if (cnts[2] != 3)  esl_fatal(msg);
+  if (cnts[3] != 2)  esl_fatal(msg);
+#endif
+
+  free(cnts);
+  esl_sq_Destroy(sq);
+  esl_alphabet_Destroy(abc);
+  return;
+
+
+ERROR:
+  if (cnts != NULL) free(cnts);
+  if (sq != NULL)   esl_sq_Destroy(sq);
+  if (abc != NULL)  esl_alphabet_Destroy(abc);
+
+  esl_fatal(msg);
+  return;
+}
+
+
+#endif /* eslSQ_TESTDRIVE*/
+/*--------------------- end, unit tests -------------------------*/
+
+/*****************************************************************
+ * 8. Test driver.
+ *****************************************************************/
+#ifdef eslSQ_TESTDRIVE
+/* gcc -g -Wall -o esl_sq_utest -I. -L. -DeslSQ_TESTDRIVE esl_sq.c -leasel -lm
+ * ./esl_sq_utest
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile_stockholm.h"
+#include "esl_random.h"
+#include "esl_sq.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-s",        eslARG_INT,      "0",  NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                    0 },
+ {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for sq module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go      = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r       = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+
+  utest_Create();
+  utest_Set(r);
+  utest_Format(r);
+  utest_CountResidues();
+
+#ifdef eslAUGMENT_ALPHABET
+  utest_CreateDigital();
+#endif
+
+  utest_ExtraResMarkups();
+
+  esl_randomness_Destroy(r);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /* eslSQ_TESTDRIVE*/
+/*-------------------- end, test driver -------------------------*/
+
+
+
+
+
+/*****************************************************************
+ * 9. Examples.
+ *****************************************************************/
+
+#ifdef eslSQ_EXAMPLE
+/*::cexcerpt::sq_example::begin::*/
+/* compile: gcc -g -Wall -I. -o example -DeslSQ_EXAMPLE esl_sq.c easel.c
+ * run:     ./example
+ */
+#include <stdio.h>
+#include <string.h>
+#include "easel.h"
+#include "esl_sq.h"
+
+int main(void)
+{
+  ESL_SQ     *sq1, *sq2;
+  char       *name    = "seq1";
+  char       *acc     = "XX00001";
+  char       *desc    = "This is a test.";
+  char       *testseq = "GGGAAATTTCCC";
+  char       *ss      = "<<<......>>>";
+  int         n       = strlen(testseq);
+
+  /* Creating an ESL_SQ from text info: */
+  sq1 = esl_sq_CreateFrom(name, testseq, desc, acc, ss); /* desc, acc, or ss may be NULL */
+  
+  /* Building up a ESL_SQ yourself: */
+  sq2 = esl_sq_Create();
+  esl_sq_FormatName     (sq2, "seq%d", 1);
+  esl_sq_FormatAccession(sq2, "XX%05d", 1);
+  esl_sq_FormatDesc     (sq2, "This %s a test", "is");
+  esl_sq_GrowTo         (sq2, n);
+  strcpy(sq2->seq, testseq);
+  esl_strdup(ss, -1, &(sq2->ss));  
+  sq2->n = n;
+
+  /* Accessing the information */
+  printf("Name:        %s\n", sq2->name);
+  printf("Accession:   %s\n", sq2->acc);
+  printf("Description: %s\n", sq2->desc);
+  printf("Sequence:    %s\n", sq2->seq);
+  printf("Structure:   %s\n", sq2->ss);
+  printf("Residue 3:   %c\n", sq2->seq[2]); /* note 0..n-1 coords */
+  printf("Structure 3: %c\n", sq2->ss[2]);  /* same for ss        */
+  
+  /* Freeing the structures */
+  esl_sq_Destroy(sq1);
+  esl_sq_Destroy(sq2);
+  return 0;
+}
+/*::cexcerpt::sq_example::end::*/
+#endif /*eslSQ_EXAMPLE*/
+
+
+#ifdef eslSQ_EXAMPLE2
+/*::cexcerpt::sq_example2::begin::*/
+/* compile: gcc -g -Wall -I. -o example -DeslSQ_EXAMPLE2\
+            -DeslAUGMENT_ALPHABET esl_sq.c esl_alphabet.c easel.c
+ * run:     ./example
+ */
+#include <stdio.h>
+#include <string.h>
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_sq.h"
+
+int main(void)
+{
+  ESL_ALPHABET *abc;
+  ESL_SQ       *sq1, *sq2;
+  char         *name    = "seq1";
+  char         *acc     = "XX00001";
+  char         *desc    = "This is a test.";
+  char         *testseq = "GGGAAATTTCCC";
+  ESL_DSQ      *dsq     = NULL;
+  char         *ss      = "<<<......>>>";
+  int           n       = strlen(testseq);
+  int           i;
+
+  /* Creating a digital alphabet: */
+  abc = esl_alphabet_Create(eslRNA);
+
+  /* Creating a digital ESL_SQ from text info: */
+  esl_abc_CreateDsq(abc, testseq, &dsq);
+  sq1 = esl_sq_CreateDigitalFrom(abc, name, dsq, n, desc, acc, ss); 
+  free(dsq);
+  
+  /* Building up a digital ESL_SQ yourself: */
+  sq2 = esl_sq_CreateDigital(abc);
+  esl_sq_FormatName     (sq2, "seq%d", 1);
+  esl_sq_FormatAccession(sq2, "XX%05d", 1);
+  esl_sq_FormatDesc     (sq2, "This %s a test", "is");
+  esl_sq_GrowTo         (sq2, n);
+  esl_abc_Digitize(abc, testseq, sq2->dsq);
+  sq2->n = n;
+
+  /* a "digital" ss isn't so pretty, but just so you know: */
+  sq2->ss    = malloc(sizeof(char) * (n+2));
+  sq2->ss[0] = '\0';
+  strcpy(sq2->ss+1, ss); 
+
+  /* Accessing the information */
+  printf("Name:        %s\n", sq2->name);
+  printf("Accession:   %s\n", sq2->acc);
+  printf("Description: %s\n", sq2->desc);
+  printf("Sequence:    "); 
+  for (i = 1; i <= n; i++) 
+    putchar(abc->sym[sq2->dsq[i]]);
+  putchar('\n');
+  printf("Structure:   %s\n", sq2->ss+1);   /* +1, ss is 1..n like dsq */
+  printf("Residue 3:   %c\n", abc->sym[sq2->dsq[3]]);
+  printf("Structure 3: %c\n", sq2->ss[3]);  /* note 1..n coord system  */
+  
+  /* Freeing the structures */
+  esl_sq_Destroy(sq1);
+  esl_sq_Destroy(sq2);
+  return 0;
+}
+/*::cexcerpt::sq_example2::end::*/
+#endif /*eslSQ_EXAMPLE2*/
+/*------------------ end, example drivers ------------------------*/
+
diff --git a/esl_sq.h b/esl_sq.h
new file mode 100644
index 0000000..618dad1
--- /dev/null
+++ b/esl_sq.h
@@ -0,0 +1,211 @@
+/* esl_sq : a single biological sequence
+ */
+#ifndef eslSQ_INCLUDED
+#define eslSQ_INCLUDED
+
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#ifdef eslAUGMENT_MSA
+#include "esl_msa.h"
+#endif
+#if defined eslAUGMENT_RANDOM && defined eslAUGMENT_RANDOMSEQ
+#include "esl_random.h"         /* random, randomseq add ability to sample random sq objects for unit tests */
+#include "esl_randomseq.h"         /* random, randomseq add ability to sample random sq objects for unit tests */
+#endif
+
+/* ESL_SQ - a biosequence
+ * 
+ * Can be either in text mode <seq>, or digital mode <dsq>. 
+ * One of them has to be NULL, and the other contains the data.
+ * 
+ * When in text mode, <ss> and <seq> can hold up to <n=salloc-1>
+ * residues and a terminal '\0', and both are indexed <0..n-1>.
+ * 
+ * When in digital mode, <ss> and <dsq> can hold up to <n=salloc-2>
+ * residues; both are indexed <1..n>, and positions 0 and n+1 are
+ * sentinel bytes. The digital sequence <dsq> uses <eslDSQ_SENTINEL>
+ * as its sentinels; as a hack, <ss> uses '\0' as sentinels.  This
+ * means that <sq->ss+1> is a valid NUL-terminated C string, but
+ * <sq->ss> itself would be a string of length 0 because of the
+ * leading NUL sentinel. Watch out for this.
+ * 
+ * To save on allocation calls, the structure is designed to be reused
+ * for subsequent sequences, rather than free'd and reallocated -
+ * thus, we keep track of the allocated sizes of all the strings.
+ * 
+ * Notes on when we need to reallocate:
+ *    - In a text mode sequence (seq 0..n-1), byte salloc-1 is
+ *      reserved for the NUL, so the sequence is full when
+ *      n == salloc-1.
+ *          
+ *    - In a digital mode sequence (dsq 1..n), bytes 0 and salloc-1
+ *      are reserved for sentinel bytes, so the reallocation condition
+ *      is when n == salloc-2.
+ *      
+ * At least for now, the only way to set the <ss> structure annotation
+ * field is by a CreateFrom(), by extraction from an MSA, or manually
+ * (by directly allocating a sequence's <ss> field).
+ * 
+ * A sequence object will usually be holding a complete (full length)
+ * sequence. Three other cases arise less frequently:
+ * 
+ * 1. We're a subsequence extracted from a source sequence. 
+ *    <sourcename> is the name of the source.
+ *    <L> is the length of the source (and coords are 1..L).
+ *    The subsequence is from <start>..<end> on the source.
+ *    The length of the subsequence <n> is abs(<end>-<start>)+1.
+ *    <start> can be greater than <end> for a nucleic acid sequence;
+ *    in this case, the subsequence is reverse complemented.
+ *    
+ * 2. We're a window on a source sequence. 
+ *    This is similar to being a subsequence, with the added 
+ *    wrinkle that we're scanning over a long source sequence
+ *    in overlapping segments, defined by a "previous context"
+ *    <C> and a "new window" <W> (the whole sequence is n=C+W
+ *    residues long):
+ *                       s  C          W      e
+ *    current window:    |------||------------|
+ *    next window read:                |------||------------|
+ *                                     s  C           W     e
+ *    Here, dsq[1..n] is source[s..e]; each newly read
+ *    window starts at dsq[C+1], and is preceded by C
+ *    residues of context.
+ *    
+ * 3. We're just after information about the sequence, not the
+ *    sequence itself; everything except the per-residue information
+ *    (such as <dsq/seq> and <ss>). We do this when SSI indexing,
+ *    for example, so we don't have to read entire huge seqs into
+ *    memory just to calculate their lengths for the index.
+ *    
+ * Note/TODO: use of "\0" empty string to indicate lack of optional
+ * acc, desc info is now deprecated. Cannot distinguish empty string
+ * from lack of annotation. Should use NULL ptr instead. Fix this in
+ * future.  (21 Nov 09 xref J5/114)
+ *    
+ */
+typedef struct {
+  /*::cexcerpt::sq_sq::begin::*/
+  char    *name;           /* name; one word, no whitespace ("\0" if no name)  */
+  char    *acc;            /* optional accession (1 word) ("\0" if none)       */
+  char    *desc;           /* description line ("\0" if no description)        */
+  int32_t  tax_id;         /* NCBI taxonomy id (-1 if none)                    */
+  char    *seq;            /* sequence [0..n-1], or NULL if digital            */
+  ESL_DSQ *dsq;            /* digitized sequence [1..n], or NULL if text       */
+  char    *ss;             /* optional sec structure [0..n-1], [1..n], or NULL */
+  int64_t  n;              /* length of seq (or dsq) and ss                    */
+  /*::cexcerpt::sq_sq::end::*/
+
+  /* Coordinate info for:                                       seq       subseq     window     info */
+  /*                                                           ----       ------     ------    ----- */
+  int64_t  start;  /* coord of seq[0],dsq[1] on source  [1..L]    1      1<=i<=L    1<=i<=L      0   */
+  int64_t  end;    /* coord of seq[n-1],dsq[n] on source[1..L]    L      1<=j<=L    1<=j<=L      0   */
+  int64_t  C;      /* # of context residues for a window          0            0        n-W      0   */
+  int64_t  W;      /* window width                                L            n        n-C      0   */
+  int64_t  L;      /* source sequence length in residues          L     L (or -1)   L (or -1)    L   */
+  /* and   n: length of seq (or dsq) and ss actually stored:      L   abs(j-i)+1        C+W      0   */
+  /* In all the above bookkeeping, a -1 means "unknown" */
+  char    *source; /* name of the source of a subseq/window; or MSA name; or ""*/
+
+  /* Memory allocation bookkeeping:  (all inclusive of \0;  >= strlen()+1)     */
+  int      nalloc;         /* allocated length of name                         */
+  int      aalloc;         /* allocated length of accession                    */
+  int      dalloc;         /* allocated length of description                  */
+  int64_t  salloc;         /* alloc for seq or dsq, and ss if present          */
+  int      srcalloc;	   /* allocated length for source name                 */
+
+  /* Disk offset bookkeeping:                                                  */
+  int64_t  idx;           /* ctr for which # seq this is; -1 if not counting   */
+  off_t    roff;          /* record offset (start of record); -1 if none       */
+  off_t    hoff;          /* offset to last byte of header; -1 if unknown      */
+  off_t    doff;          /* data offset (start of sequence data); -1 if none  */
+  off_t    eoff;          /* offset to last byte of record; -1 if unknown      */
+
+  /* Optional information for extra residue markups.
+   * The number of them, and their tags are arbitrary
+   */
+  char  **xr_tag;          /* markup tags for extra residue markups [0..ntr-1][free-text], [0..ntr-1][free-text], or NULL */
+  char  **xr;              /* annotations for extra residue markups [0..ntr-1][0..n-1],    [0..ntr-1][1..n],      or NULL */
+  int     nxr;             /* number of extra residue markups                                                             */
+
+  /* Copy of a pointer to the alphabet, if digital mode */
+#if defined(eslAUGMENT_ALPHABET)
+  const ESL_ALPHABET *abc; /* reference to the alphabet for <dsq>              */
+#else
+  const void         *abc; /* void reference, if we're not even augmented      */
+#endif
+} ESL_SQ;
+
+typedef struct {
+  int      count;       /* number of <ESL_SQ> objects in the block */
+  int      listSize;    /* maximum number elements in the list     */
+  int      complete;    /*TRUE if the the final ESL_SQ element on the block is complete, FALSE if it's only a partial winow of the full sequence*/
+  int64_t  first_seqidx;/*unique identifier of the first ESL_SQ object on list;  the seqidx of the i'th entry on list is first_seqidx+i */
+  ESL_SQ  *list;        /* array of <ESL_SQ> objects               */
+} ESL_SQ_BLOCK;
+
+/* These control default initial allocation sizes in an ESL_SQ.     */
+#define eslSQ_NAMECHUNK   32	// allocation unit for name, source 
+#define eslSQ_ACCCHUNK    32	// allocation unit for accession    
+#define eslSQ_DESCCHUNK  128	// allocation unit for description  
+#define eslSQ_SEQCHUNK   256	// allocation unit for seqs         
+                                //  .. dsqdata assumes _SEQCHUNK >= 4 
+
+extern ESL_SQ *esl_sq_Create(void);
+extern ESL_SQ *esl_sq_CreateFrom(const char *name, const char *seq,
+				 const char *desc, const char *acc, const char *ss);
+extern int     esl_sq_Grow  (ESL_SQ *sq, int64_t *ret_nsafe);
+extern int     esl_sq_GrowTo(ESL_SQ *sq, int64_t  n);
+extern int     esl_sq_Copy(const ESL_SQ *src, ESL_SQ *dst);
+extern int     esl_sq_Compare  (ESL_SQ *sq1, ESL_SQ *sq2);
+extern int     esl_sq_Reuse    (ESL_SQ *sq);
+extern int     esl_sq_IsDigital(const ESL_SQ *sq);
+extern int     esl_sq_IsText   (const ESL_SQ *sq);
+extern void    esl_sq_Destroy  (ESL_SQ *sq);
+
+extern int     esl_sq_SetName        (ESL_SQ *sq, const char *name);
+extern int     esl_sq_SetAccession   (ESL_SQ *sq, const char *acc);
+extern int     esl_sq_SetDesc        (ESL_SQ *sq, const char *desc);
+extern int     esl_sq_SetSource      (ESL_SQ *sq, const char *source);
+extern int     esl_sq_FormatName     (ESL_SQ *sq, const char *name,   ...);
+extern int     esl_sq_FormatAccession(ESL_SQ *sq, const char *acc,    ...);
+extern int     esl_sq_FormatDesc     (ESL_SQ *sq, const char *desc,   ...);
+extern int     esl_sq_FormatSource   (ESL_SQ *sq, const char *source, ...);
+extern int     esl_sq_AppendDesc     (ESL_SQ *sq, const char *desc);
+extern int     esl_sq_SetCoordComplete(ESL_SQ *sq, int64_t L);
+extern int     esl_sq_CAddResidue (ESL_SQ *sq, char c);
+extern int     esl_sq_ReverseComplement(ESL_SQ *sq);
+extern int     esl_sq_Checksum(const ESL_SQ *sq, uint32_t *ret_checksum);
+extern int     esl_sq_CountResidues(const ESL_SQ *sq, int start, int L, float *f);
+
+#ifdef eslAUGMENT_ALPHABET
+extern ESL_SQ *esl_sq_CreateDigital(const ESL_ALPHABET *abc);
+extern ESL_SQ *esl_sq_CreateDigitalFrom(const ESL_ALPHABET *abc, const char *name, const ESL_DSQ *dsq, 
+					int64_t L, const char *desc, const char *acc,  const char *ss);
+extern int     esl_sq_Digitize(const ESL_ALPHABET *abc, ESL_SQ *sq);
+extern int     esl_sq_Textize(ESL_SQ *sq);
+extern int     esl_sq_GuessAlphabet(ESL_SQ *sq, int *ret_type);
+extern int     esl_sq_XAddResidue(ESL_SQ *sq, ESL_DSQ x);
+extern int     esl_sq_ConvertDegen2X(ESL_SQ *sq);
+#endif
+
+#ifdef eslAUGMENT_MSA
+extern int     esl_sq_GetFromMSA  (const ESL_MSA *msa, int which, ESL_SQ *sq);
+extern int     esl_sq_FetchFromMSA(const ESL_MSA *msa, int which, ESL_SQ **ret_sq);
+#endif
+
+extern ESL_SQ_BLOCK *esl_sq_CreateBlock(int count);
+extern int esl_sq_BlockGrowTo(ESL_SQ_BLOCK *sqblock, int newsize, int do_digital, const ESL_ALPHABET *abc);
+#ifdef eslAUGMENT_ALPHABET
+extern ESL_SQ_BLOCK *esl_sq_CreateDigitalBlock(int count, const ESL_ALPHABET *abc);
+#endif
+extern void          esl_sq_DestroyBlock(ESL_SQ_BLOCK *sqBlock);
+
+#if defined eslAUGMENT_RANDOM && defined eslAUGMENT_RANDOMSEQ
+extern int esl_sq_Sample(ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, int maxL, ESL_SQ **ret_sq);
+#endif /* eslAUGMENT_RANDOM && eslAUGMENT_RANDOMSEQ */
+
+#endif /*eslSQ_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_sq.tex b/esl_sq.tex
new file mode 100644
index 0000000..67b42ff
--- /dev/null
+++ b/esl_sq.tex
@@ -0,0 +1,304 @@
+The \eslmod{sq} module provides \Easel's object for single biological
+sequences: an \ccode{ESL\_SQ}.
+
+Sequence objects invariably become complicated, even though their
+designer intends them to be simple. There's many things we want to do
+with a sequence, and useful features naturally accrete over time. If a
+library isn't careful to balance creeping featuritis against having an
+easy way to start using the object in simple applications, then the
+sequence object - possibly the most fundamental object of a
+biosequence library - can become a barrier to anyone else actually
+using the library. All those useful features won't matter much if you
+can't figure out how to turn your sequence data into an object, or get
+it back out. \Easel\ expects you to have your own preferred way of
+dealing with sequence data that's not necessarily \Easel's way, so it
+provides simple ways to create sequence objects from elemental (C
+string) data, and simple ways to get elemental C strings back out.
+This lets you minimize your exposure to \Easel's more complicated
+capabilities if you like.
+
+The most basic use of an \ccode{ESL\_SQ} object is to hold one
+complete sequence, simply as a plain C string. A sequence may also
+have a name, an accession, and a description line.  This is called a
+\esldef{text mode} sequence. In text mode, \Easel\ doesn't know
+whether the sequence is DNA, RNA, protein, or something else; it's
+just an ASCII character string. This limits some of \Easel's more
+powerful abilities, such as the ability to check the sequence for
+errors, or to automatically deal with degenerate residue codes; but
+it's a simple mode that's easy to start using.
+
+Alternatively, a sequence may be in \esldef{digital mode}. In digital
+mode, sequences are predigested and encoded into \Easel's internal
+format, which makes many sequence routines more robust, efficient, and
+powerful. Digital mode requires \eslmod{alphabet} augmentation.
+
+In addition to storing a complete sequence, an \ccode{ESL\_SQ} is
+designed to be used in three other situations:
+
+\begin{itemize}
+\item to hold a \esldef{subsequence} of a larger source sequence. The
+  object maintains source and coordinate information necessary for
+  crossreferencing the subsequence's coordinate system to the original
+  source coordinate system.
+
+\item to hold a \esldef{window} of a larger source sequence. This is
+  like a subsequence, but is more specifically intended for reading a
+  sequence from a file in overlapping windows. This avoids having to
+  suck an entire chromosome (for example) into memory at any one
+  time. The stored subsequence is composed of two segments, a
+  \esldef{previous context} that gets saved from the previous window,
+  and a \esldef{new window} of fresh residues. The size of both the
+  context and the window are configurable at the time each new window
+  is read.
+
+\item to hold only \esldef{information} about a sequence, such as its
+  name, its length, and its position in a file, excluding the sequence
+  (and optional secondary structure annotation) itself. This is handy
+  for example when indexing a sequence file, when we'd rather not read
+  any (possibly prohibitively large) sequence into memory until after
+  we've mapped out how big it is.
+\end{itemize}
+
+To keep all this straight, the object contains a bunch of internal
+bookkeeping data.
+
+Sequence objects are growable and reusable, for efficiency in memory
+allocation. If you're going to go through many different sequences
+sequentially, you would typically just allocate a single
+\ccode{ESL\_SQ} object and \ccode{esl\_sq\_Reuse()} it for each new
+sequence, rather than creating and destroying a lot of objects.
+
+A sequence object can also store an optional secondary structure
+annotation line for the sequence, one character per residue.
+
+When augmented with \eslmod{msa}, an interface to the \ccode{ESL\_MSA}
+multiple alignment object provides the ability to extract single
+unaligned sequences from a multiple alignment.
+
+You would often use the \eslmod{sq} module in conjunction with
+\eslmod{sqio}, which provides the ability to read and write
+\ccode{ESL\_SQ} objects from and to files.
+
+Table~\ref{tbl:sq_api} lists the functions in the \eslmod{sq} API.
+
+
+
+% Table generated by autodoc -t esl_sq.c (so don't edit here, edit esl_sq.c:)
+\input{apitables/esl_sq_api}
+
+
+
+
+\subsection{Example of getting data in and out of an \ccodeincmd{ESL\_SQ}}
+
+The easiest way to create a new \ccode{ESL\_SQ} object is with the
+\ccode{esl\_sq\_CreateFrom()} function, which just takes character
+strings for a sequence and its name (and also, optionally, an
+accession, description, and/or secondary structure annotation string).
+
+You can also build up (and/or change and manipulate) the contents of
+an \ccode{ESL\_SQ} object by accessing the name, accession,
+description, sequence, and structure annotation line more directly.
+
+This code shows examples of both approaches:
+
+\input{cexcerpts/sq_example}
+
+A few things to notice about that code:
+
+\begin{itemize}
+\item Every sequence has a name and a sequence. If we didn't want to
+  add the optional accession, description, or structure annotation
+  line, we'd pass \ccode{NULL} for those arguments to
+  \ccode{esl\_sq\_CreateFrom()}.
+
+\item An RNA secondary structure annotation line is shown here as part
+  of the example, but it's really sort of a more advanced
+  feature. It's good to know it's there (see the \eslmod{wuss} module
+  for more information about how \Easel\ annotates RNA structure) but
+  you can ignore it if you're getting started.
+
+\item The \ccode{esl\_sq\_Set*} functions use the same syntax as C's
+  \ccode{*printf()} family, which gives you a flexible way to create 
+  new sequence names, accessions, and descriptions automatically.
+
+\item The sequence in \ccode{sq->seq} is just a C string. (Here it's a
+  copy of the \ccode{testseq} string.) That has a couple of
+  implications. One is that it's a verbatim copy of what you provided;
+  \Easel\ doesn't know (or care) whether it's DNA or protein sequence,
+  upper case or lower case, or if it contains illegal non-sequence
+  characters. With a text mode sequence, that's \emph{your} problem!
+  For more robustness and defined biosequence alphabets, read on below
+  about digital mode sequences. The second implication is that, as a C
+  string, the \ccode{n} residues are indexed \ccode{0..sq->n-1}, not
+  \ccode{1..sq->n}.
+
+\item If you're going to directly copy a sequence of length \ccode{n}
+  into a \ccode{sq->seq} field, note the \ccode{esl\_sq\_GrowTo()}
+  call, which makes sure the sequence object is allocated with enough
+  space for \ccode{n} residues; and don't forget to set \ccode{sq->n}.
+
+\item The structure annotation \ccode{sq->ss} is also a C string,
+  indexed identically to \ccode{sq->seq}, but it's optional, and isn't
+  allocated by default; \ccode{esl\_sq\_GrowTo()} calls will only
+  reallocate for the structure annotation string after it's been
+  allocated at least once.  Hence the \ccode{esl\_strdup} call in the
+  example, which duplicates (allocates and copies) the annotation into
+  \ccode{sq->ss}.
+\end{itemize}
+
+
+
+To get simple character strings back out of an \ccode{ESL\_SQ} object,
+you're encouraged to peek inside the object. (Yeah, I know, object
+oriented design says that there should be methods for this,
+independent of the object's implementation; but I balance that against
+simplicity, and here, simplicity wins.) The object is defined and
+documented in \ccode{esl\_sq.h}. It contains various information; the
+stuff you need to know is:
+
+\input{cexcerpts/sq_sq}
+
+Ignore the \ccode{dsq} field for now; we're about to get to it, when
+we talk about digital mode sequences.
+
+The \ccode{ESL\_SQ} object itself doesn't particularly care about the
+contents of the annotation text fields, so long as they're C strings, and so
+long as \ccode{n} is the length of the \ccode{seq} (and optional
+\ccode{ss}, if it's non-\ccode{NULL}) strings. However, sequence file
+formats do impose some expectations on the annotation strings, and it
+would be a Good Idea to adhere to them:
+
+\begin{sreitems} {\emcode{desc}}
+\item [\emcode{name}] A sequence name is almost always expected to be
+  a single ``word'' (no whitespace), like \ccode{SNRPA\_HUMAN}. 
+
+\item [\emcode{acc}] An accession is also usually expected to be a
+  single ``word'' with no whitespace, like \ccode{P09012}. Database
+  accessions only make sense if you know what database they're for, so
+  when sequences might be from different databases, you'll sometimes
+  see accessions prefixed with a code indicating the source database,
+  as in something like \ccode{UniProt:P09012}. Again, \Easel\ itself
+  isn't enforcing the format of this string, so your application is
+  free to create its own accession/version/database format as needed.
+
+\item [\emcode{desc}] A description line is something like \ccode{U1
+small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1A protein)
+(U1-A).}; a one-line summary of what the sequence is. You can expect
+the description line to show up in the tabular output of sequence
+analysis applications, so ideally you want it to be short and sweet
+(so it fits on one line with a name, accession, score, coords, and
+other information from an analysis app). You also don't want the
+description line to end in a newline (\verb+\n+) character, or the
+description line will introduce unexpected line breaks in these
+tabular output files.
+\end{sreitems}
+
+You can reach into a \ccode{ESL\_SQ} and copy or modify any of these
+strings, but don't try to overwrite them with a larger string unless
+You Know What You're Doing. Their memory allocations are managed by
+the \ccode{ESL\_SQ} object. Instead, use the appropriate
+\ccode{esl\_sq\_Set*} function to overwrite an annotation field.
+
+The \eslmod{sq} module isn't much use by itself; it's a building block
+for several other modules. For example, one of the main things you'll
+want to do with sequences is to read them from a file. For examples
+and documentation of sequence input, see the \eslmod{sqio} module.
+
+
+\subsection{Example of using a digital \ccodeincmd{ESL\_SQ}}
+
+What follows might make more sense if you've read about the
+\eslmod{alphabet} module first. \eslmod{alphabet}'s documentation
+explains how \Easel uses an internal digital biosequence ``alphabet'',
+where residues are encoded as small integers, suitable for direct use
+as array indices. But here's an example anyway, of creating and
+accessing a digital mode sequence:
+
+\input{cexcerpts/sq_example2}
+
+Things to notice about this code:
+
+\begin{itemize}
+\item An \ccode{ESL\_SQ} object has a \ccode{sq->seq} if it's in text
+mode, and \ccode{sq->dsq} if its in digital mode. These two fields are
+mutually exclusive; one of them is \ccode{NULL}.
+
+\item If you looked at the contents of \ccode{sq->dsq} in either of
+  the objects, you'd see that each residue is encoded as a value
+  \ccode{0..3}, representing (for an RNA alphabet) the residues
+  \ccode{ACGU}. 
+
+\item That representation is defined by the digital RNA alphabet
+  \ccode{abc}, which was the first thing we created. 
+
+\item In digital mode, both the sequence residues and the optional
+  secondary structure characters are indexed \ccode{1..n}.
+
+\item To make the digital sequence in the first sequence object, we
+      created a digital sequence \ccode{dsq} by encoding the
+      \ccode{testseq} using \ccode{esl\_abc\_CreateDsq()}; this
+      function allocated new memory for \ccode{dsq}, so we have to
+      free it. An \ccode{ESL\_DSQ *} is just a special character array;
+      it's not a full-fledged \Easel\ object, and so there's no
+      conventional \ccode{Create()},\ccode{Destroy()} function pair.
+
+\item In the second sequence object, we used
+  \ccode{esl\_abc\_Digitize()} to encode the \ccode{testseq} directly
+  into space that the \ccode{sq2} object already had allocated, saving
+  us the temporary allocation of another \ccode{dsq}, because we
+  created it in digital mode (\ccode{esl\_sq\_CreateDigital()}) and
+  made it big enough to hold \ccode{n} digital residues with
+  \ccode{esl\_sq\_GrowTo()}. Notice that \ccode{esl\_sq\_GrowTo()} is
+  smart enough to know whether to grow the digital or the text mode
+  sequence field.
+
+\item By convention, when using digital sequences, we usually keep
+  track of (and pass as arguments) both a digital sequence \ccode{dsq}
+  and its length \ccode{n}, and we also need to have the digital
+  alphabet itself \ccode{abc} available to know what the \ccode{dsq}
+  means; with text mode sequences, we usually just pass the string
+  pointer. Thus the \ccode{esl\_sq\_CreateDigitalFrom()} function
+  takes \ccode{abc}, \ccode{dsq}, and \ccode{n} as arguments, whereas
+  the counterpart text mode \ccode{esl\_sq\_CreateDigitalFrom()} only
+  took a C string \ccode{seq}. This is solely a convention - digital
+  sequences begin and end with a special sentinel character, so we
+  could always count the length of a \ccode{dsq} if we had to (using
+  \ccode{esl\_abc\_dsqlen()}, for example), much as we can use ANSI
+  C's \ccode{strlen()} to count the number of chars in a C string up
+  to the sentinel \verb+\0+ \ccode{NUL} character at the end.
+
+\item To get the structure annotation to be indexed \ccode{1..n} for
+  consistency with the \ccode{dsq}, even though the annotation string
+  is still just an ASCII string, it's offset by one, and the leading
+  character is set by convention to a \verb+\0+. Therefore to access
+  the whole structure string (for printing, for instance), you want to
+  access \ccode{sq->ss+1}. This is a hack, but it's a simple one, so
+  long as you don't forget about the convention.
+
+\item Because the original sequence has been encoded, you may not get
+  the original sequence back out when you decode the digital values as
+  alphabet symbols. \ccode{abc->sym[sq2->dsq[3]]}, for example, takes
+  the third digital residue and looks it up in the alphabet's symbol
+  table, returning the canonical character it's
+  representing. Upper/lower case distinctions are lost, for example;
+  digital alphabet symbol tables are uniformly upper case. And this
+  example shows another example, where the input \ccode{testseq}
+  contains T's, but since the digital alphabet was declared as RNA,
+  the symbol table represents those residues as U's when you access
+  them.
+
+\item In that respect, a more careful example should have checked the
+  return status of the \ccode{esl\_abc\_CreateDsq()} and
+  \ccode{esl\_abc\_Digitize()} calls. These have a normal failure
+  mode, when the input text sequence contains one or more ASCII
+  characters that are unrecognized and therefore invalid in the
+  digital alphabet. If this had happened, these functions would have
+  returned \ccode{eslEINVAL} instead of \ccode{eslOK}. We can get away
+  without checking, however, because the functions just replace any
+  invalid character with an ``any'' character (representing \ccode{N}
+  for DNA or RNA, \ccode{X} for protein).
+\end{itemize}
+
+For more information about how digital sequence alphabets work, see
+the \eslmod{alphabet} module.
diff --git a/esl_sqio.c b/esl_sqio.c
new file mode 100644
index 0000000..6c2dae7
--- /dev/null
+++ b/esl_sqio.c
@@ -0,0 +1,2438 @@
+/* Unaligned sequence file i/o.
+ * 
+ * Contents:
+ *    1. An <ESL_SQFILE> object, text mode.
+ *    2. An <ESL_SQFILE> object, digital mode. [with <alphabet>]
+ *    3. Sequence reading.
+ *    4. Sequence writing.
+ *    5. Miscellaneous routines.
+ *    6. Sequence/subsequence fetching, random access [with <ssi>]
+ *    7. Sequence database caching.
+ *    8. Internal functions.
+ *    9. Benchmark driver.
+ *   10. Unit tests.
+ *   11. Test driver.
+ *   12. Examples.
+ *   13. Copyright and license.
+ * 
+ * This module shares remote evolutionary homology with Don Gilbert's
+ * seminal, public domain ReadSeq package, though the last common
+ * ancestor was circa 1991 and no recognizable vestiges are likely to
+ * remain. Thanks Don!
+ *
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#ifdef HAVE_STRINGS_H
+#include <strings.h>		/* POSIX strcasecmp() */
+#endif
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"	/* alphabet aug adds digital sequences */
+#endif 
+#include "esl_sqio.h"
+#include "esl_sqio_ascii.h"
+#ifdef eslAUGMENT_NCBI
+#include "esl_sqio_ncbi.h"
+#endif
+#include "esl_sq.h"
+
+/* Optional MSA<->sqio interoperability */
+#ifdef eslAUGMENT_MSA
+#include "esl_msa.h"
+#include "esl_msafile.h"
+static int convert_sq_to_msa(ESL_SQ *sq, ESL_MSA **ret_msa);
+#endif
+
+
+/*****************************************************************
+ *# 1. An <ESL_SQFILE> object, in text mode.
+ *****************************************************************/ 
+
+static int  sqfile_open(const char *filename, int format, const char *env, ESL_SQFILE **ret_sqfp);
+
+/* Function:  esl_sqfile_Open()
+ * Synopsis:  Open a sequence file <filename> for reading. 
+ *
+ * Purpose:   Open a sequence file <filename> for reading. 
+ *            The opened <ESL_SQFILE> is returned through <ret_sqfp>.
+ * 
+ *            The format of the file is asserted to be <format> (for
+ *            example, <eslSQFILE_FASTA>). If <format> is
+ *            <eslSQFILE_UNKNOWN> then the routine attempts to
+ *            autodetect the file format.
+ *            
+ *            If <env> is non-NULL, it is the name of an environment
+ *            variable that contains a colon-delimited list of
+ *            directories in which we may find this <filename>.
+ *            For example, if we had 
+ *            <setenv BLASTDB /nfs/db/blast-db:/nfs/db/genomes/>
+ *            in the environment, a database search application
+ *            could pass "BLASTDB" as <env>.
+ *            
+ * Returns:   <eslOK> on success, and <*ret_sqfp> points to a new
+ *            open <ESL_SQFILE>. Caller deallocates this object with
+ *            <esl_sqfile_Close()>. 
+ *            
+ *            Returns <eslENOTFOUND> if <filename> can't be opened.
+ *            
+ *            Returns <eslEFORMAT> if the file is empty, or
+ *            if autodetection is attempted and the format can't be
+ *            determined.  
+ *
+ *            On any error condition, <*ret_sqfp> is returned NULL.
+ *             
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_sqfile_Open(const char *filename, int format, const char *env, ESL_SQFILE **ret_sqfp)
+{
+  return sqfile_open(filename, format, env, ret_sqfp);
+}
+
+
+/* Function:  esl_sqfile_Close()
+ * Synopsis:  Close a sequence file.
+ *
+ * Purpose:   Closes an open <sqfp>.
+ *
+ * Returns:   (void).
+ */
+void
+esl_sqfile_Close(ESL_SQFILE *sqfp)
+{
+  if (sqfp == NULL) return;
+
+  if (sqfp->close != NULL)    sqfp->close(sqfp);
+  if (sqfp->filename != NULL) free(sqfp->filename);
+  free(sqfp);
+
+  return;
+}
+
+
+/* sqfile_open():
+ * This is the routine that actually opens an ESL_SQFILE.
+ * esl_sqfile_Open() and esl_sqfile_OpenDigital() are
+ * small wrappers around it.
+ */
+static int
+sqfile_open(const char *filename, int format, const char *env, ESL_SQFILE **ret_sqfp)
+{
+  ESL_SQFILE *sqfp    = NULL;
+  int         status;		/* return status from an ESL call */
+  int         n;
+
+  char       *s1;
+  char       *s2;
+  char       *list  = NULL;
+  char       *path  = NULL;
+
+  ESL_ALLOC(sqfp, sizeof(ESL_SQFILE));
+  *ret_sqfp          = NULL;
+
+  sqfp->filename     = NULL;
+
+  sqfp->do_digital   = FALSE;
+  sqfp->abc          = NULL;
+
+  sqfp->format       = format;
+
+  /* initialize the function pointers to NULL */
+  sqfp->position          = NULL;
+  sqfp->close             = NULL;
+
+  sqfp->set_digital       = NULL;
+  sqfp->guess_alphabet    = NULL;
+
+  sqfp->is_rewindable     = NULL;
+
+  sqfp->read              = NULL;
+  sqfp->read_info         = NULL;
+  sqfp->read_seq          = NULL;
+  sqfp->read_window       = NULL;
+  sqfp->echo              = NULL;
+
+  sqfp->read_block        = NULL;
+
+#ifdef eslAUGMENT_SSI
+  sqfp->open_ssi          = NULL;
+  sqfp->pos_by_key        = NULL;
+  sqfp->pos_by_number     = NULL;
+
+  sqfp->fetch             = NULL;
+  sqfp->fetch_info        = NULL;
+  sqfp->fetch_subseq      = NULL;
+#endif
+
+  sqfp->get_error         = NULL;
+
+  /* save the user supplied file name */
+  ESL_ALLOC(sqfp->filename, sizeof(char) * (strlen(filename) + 1));
+  strcpy(sqfp->filename, filename);
+
+  /* we need to process the list of directories starting with the local
+   * directory followed by the list in env one directory at a time 
+   * passing the path to the different sequence parsers until we get a hit.
+   */
+  if (strcmp(filename, "-") == 0) { /* stdin special case */
+    if ((status = esl_strdup(filename, -1, &path)) != eslOK) goto ERROR;
+    if ((status = esl_sqascii_Open(path, sqfp->format, sqfp)) != eslOK) goto ERROR;
+  } else {
+
+    /* check the local directory first */
+    status = eslENOTFOUND;
+#ifdef eslAUGMENT_NCBI
+    if (format == eslSQFILE_NCBI && status == eslENOTFOUND)
+      status = esl_sqncbi_Open(sqfp->filename, sqfp->format, sqfp);
+#endif
+    if (status == eslENOTFOUND)
+      status = esl_sqascii_Open(sqfp->filename, sqfp->format, sqfp);
+
+    /* if it's not there, then check in directory list provided by <env>. */
+    if (status == eslENOTFOUND && env != NULL) {
+      if ((s1 = getenv(env)) == NULL) { status = eslENOTFOUND; goto ERROR; }
+      ESL_ALLOC(list, sizeof(char) * (strlen(s1) + 1));
+      strcpy(list + 2, s1);
+
+      ESL_ALLOC(path, sizeof(char) * (strlen(filename) + strlen(list) + 3));
+
+      s1 = list;
+      while (s1 != NULL && status == eslENOTFOUND) {
+	if ((s2 = strchr(s1, ':')) != NULL) { *s2 = '\0'; s2++;}
+	n = strlen(s1);
+	strcpy(path, s1);
+	path[n] = eslDIRSLASH;
+	strcpy(path+n+1, filename);
+	s1 = s2;
+
+#ifdef eslAUGMENT_NCBI
+	if (format == eslSQFILE_NCBI && status == eslENOTFOUND)
+	  status = esl_sqncbi_Open(path, sqfp->format, sqfp);
+#endif
+	if (status == eslENOTFOUND)
+	  status = esl_sqascii_Open(path, sqfp->format, sqfp);
+      }
+    }
+  }
+
+  if (status != eslOK) goto ERROR;
+
+  if (list != NULL) free(list);
+  if (path != NULL) free(path);
+
+  *ret_sqfp = sqfp;
+  return eslOK;
+
+ ERROR:
+  esl_sqfile_Close(sqfp); 
+  if (list != NULL) free(list);
+  if (path != NULL) free(path);
+  *ret_sqfp = NULL;
+  return status;
+}
+/*------------------- ESL_SQFILE open/close -----------------------*/
+
+
+
+/*****************************************************************
+ *# 2. An <ESL_SQFILE> object, in digital mode [with <alphabet>]
+ *****************************************************************/
+#ifdef eslAUGMENT_ALPHABET
+
+/* Function:  esl_sqfile_OpenDigital()
+ * Synopsis:  Open an <ESL_SQFILE> for digital input.
+ *
+ * Purpose:   Same as <esl_sqfile_Open()>, but we will expect all
+ *            sequence input to conform to the digital alphabet <abc>.
+ *            
+ *            Normally, after opening the sequence file in digital
+ *            mode, you'd read sequence into a digital <ESL_SQ>.
+ *            However, you don't actually have to. The state of the
+ *            <ESL_SQ> controls how the input is stored; the state of
+ *            the <ESL_SQFILE> controls how the input is validated.
+ *            
+ * Returns:   <eslOK> on success, and <*ret_sqfp> points to a new
+ *            open <ESL_SQFILE>.
+ *            
+ *            Returns <eslENOTFOUND> if <filename> can't be opened.
+ *            Returns <eslEFORMAT> if the file is empty, or if
+ *            autodetection is attempted and the format can't be
+ *            determined.  On any error conditions, <*ret_sqfp> is
+ *            returned NULL.
+ *             
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_sqfile_OpenDigital(const ESL_ALPHABET *abc, const char *filename, int format, const char *env, ESL_SQFILE **ret_sqfp)
+{
+  int status;
+
+  if ((status = sqfile_open(filename, format, env, ret_sqfp)) != eslOK) return status;
+  return esl_sqfile_SetDigital(*ret_sqfp, abc);
+}
+
+/* Function:  esl_sqfile_SetDigital()
+ * Synopsis:  Set an open <ESL_SQFILE> to read in digital mode.
+ *
+ * Purpose:   Given an <ESL_SQFILE> that's already been opened,
+ *            configure it to expect subsequent input to conform
+ *            to the digital alphabet <abc>.
+ *            
+ *            Calling <esl_sqfile_Open(); esl_sqfile_SetDigital()> is
+ *            equivalent to <esl_sqfile_OpenDigital()>. The two-step
+ *            version is useful when you need a
+ *            <esl_sqfile_GuessAlphabet()> call in between, guessing
+ *            the file's alphabet in text mode before you set it to
+ *            digital mode.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_sqfile_SetDigital(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc)
+{
+  sqfp->set_digital(sqfp, abc);
+
+  sqfp->do_digital = TRUE;
+  sqfp->abc        = abc;
+  return eslOK;
+}
+
+
+/* Function:  esl_sqfile_GuessAlphabet()
+ * Synopsis:  Guess the alphabet of an open <ESL_SQFILE>.
+ *
+ * Purpose:   After opening <sqfp>, attempt to guess what alphabet
+ *            its sequences are in, by inspecting the first sequence
+ *            in the file, and return this alphabet type in <*ret_type>.
+ *
+ * Returns:   <eslOK> on success, and <*ret_type> is set to <eslDNA>,
+ *            <eslRNA>, or <eslAMINO>.
+ *            
+ *            Returns <eslENOALPHABET> if the alphabet can't be
+ *            reliably guessed.
+ *            
+ *            Returns <eslEFORMAT> if a parse error is encountered.
+ *            Call <esl_sqfile_GetErrorBuf()> to get a ptr to a
+ *            user-directed error message describing the problem,
+ *            including the line number on which it was found.
+ *            
+ *            Returns <eslENODATA> if the file appears to be empty.
+ *
+ *            On any error, <*ret_type> is <eslSQFILE_UNKNOWN>.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ *            <eslEINCONCEIVABLE> on unimaginable internal errors.
+ */
+int
+esl_sqfile_GuessAlphabet(ESL_SQFILE *sqfp, int *ret_type)
+{
+  return sqfp->guess_alphabet(sqfp, ret_type);
+}
+
+#endif /*eslAUGMENT_ALPHABET*/
+/*-------------- end, digital mode ESL_SQFILE -------------------*/
+
+
+
+/*****************************************************************
+ *# 3. Sequence reading (sequential)
+ *****************************************************************/ 
+
+/* Function:  esl_sqio_Read()
+ * Synopsis:  Read the next sequence from a file.
+ *
+ * Purpose:   Reads the next sequence from open sequence file <sqfp> into 
+ *            <sq>. Caller provides an allocated and initialized <sq>, which
+ *            will be internally reallocated if its space is insufficient.
+ *
+ * Returns:   <eslOK> on success; the new sequence is stored in <sq>.
+ * 
+ *            Returns <eslEOF> when there is no sequence left in the
+ *            file (including first attempt to read an empty file).
+ * 
+ *            Returns <eslEFORMAT> if a parse error is encountered.
+ *            Call <esl_sqfile_GetErrorBuf()> to get a ptr to a
+ *            user-directed error message describing the problem,
+ *            including the line number on which it was found.
+ *
+ * Throws:    <eslEMEM> on allocation failure;
+ *            <eslEINCONCEIVABLE> on internal error.
+ */
+int
+esl_sqio_Read(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  return sqfp->read(sqfp, sq);
+}
+
+
+/* Function:  esl_sqio_ReadInfo()
+ * Synopsis:  Read sequence info, but not the sequence itself.
+ *
+ * Purpose:   Read the next sequence from open sequence file <sqfp>,
+ *            but don't store the sequence (or secondary structure).
+ *            Upon successful return, <s> holds all the available 
+ *            information about the sequence -- its name, accession,
+ *            description, and overall length <sq->L>. 
+ *            
+ *            This is useful for indexing sequence files, where
+ *            individual sequences might be ginormous, and we'd rather
+ *            avoid reading complete seqs into memory.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_sqio_ReadInfo(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  return sqfp->read_info(sqfp, sq);
+}
+
+
+/* Function:  esl_sqio_ReadSequence()
+ * Synopsis:  Read sequence, but not the header itself.
+ *
+ * Purpose:   Read the next sequence from open sequence file <sqfp>,
+ *            skipping over the header data.  Upon successful return, 
+ *            <s> holds just the sequece data.  File offsets will be
+ *            filled in.
+ *            
+ *            This is useful fast reads of binary formats where the
+ *            header information and sequences are stored in different
+ *            files.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_sqio_ReadSequence(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  return sqfp->read_seq(sqfp, sq);
+}
+
+
+/* Function:  esl_sqio_ReadWindow()
+ * Synopsis:  Read next window of sequence.
+ *
+ * Purpose:   Read a next window of <W> residues from open file <sqfp>,
+ *            keeping <C> residues from the previous window as
+ *            context, and keeping previous annotation in the <sq>
+ *            as before. 
+ *            
+ *            If this is the first window of a new sequence record,
+ *            <C> is ignored (there's no previous context yet), and
+ *            the annotation fields of the <sq> (name, accession, and
+ *            description) are initialized by reading the sequence
+ *            record's header. This is the only time the annotation
+ *            fields are initialized.
+ *            
+ *            On return, <sq->dsq[]> contains the window and its
+ *            context; residues <1..sq->C> are the previous context,
+ *            and residues <sq->C+1..sq->n> are the new window.  The
+ *            start and end coordinates of the whole <dsq[1..n]>
+ *            (including context) in the original source sequence are
+ *            <sq->start..sq->end>. (Or, for text mode sequences,
+ *            <sq->seq[0..sq->C-1,sq->C..sq->n-1]>, while <start> and
+ *            <end> coords are still <1..L>.)
+ *
+ *            When a sequence record is completed and no more data
+ *            remain, <eslEOD> is returned, with an ``info'' <sq>
+ *            structure (containing the annotation and the total
+ *            sequence length <L>, but no sequence). (The total
+ *            sequence length <L> is unknown in <sq> until this
+ *            <eslEOD> return.)
+ *            
+ *            The caller may then do one of two things before calling
+ *            <esl_sq_ReadWindow()> again; it can reset the sequence
+ *            with <esl_sq_Reuse()> to continue reading the next
+ *            sequence in the file, or it can set a negative <W> as a
+ *            signal to read windows from the reverse complement
+ *            (Crick) strand. Reverse complement reading only works
+ *            for nucleic acid sequence. 
+ *            
+ *            If you read the reverse complement strand, you must read
+ *            the whole thing, calling <esl_sqio_ReadWindow()> with
+ *            negative <W> windows until <eslEOD> is returned again
+ *            with an empty (info-only) <sq> structure. When that
+ *            <EOD> is reached, the <sqfp> is repositioned at the
+ *            start of the next sequence record; the caller should now
+ *            <Reuse()> the <sq>, and the next <esl_sqio_ReadWindow()>
+ *            call must have a positive <W>, corresponding to starting
+ *            to read the Watson strand of the next sequence.
+ *
+ *            Note that the <ReadWindow()> interface is designed for
+ *            an idiom of sequential reading of complete sequences in
+ *            overlapping windows, possibly on both strands; if you
+ *            want more freedom to move around in the sequence
+ *            grabbing windows in another order, you can use the
+ *            <FetchSubseq()> interface.
+ *
+ *            Reading the reverse complement strand requires file
+ *            repositioning, so it will not work on non-repositionable
+ *            streams like gzipped files or a stdin pipe. Moreover,
+ *            for reverse complement input to be efficient, the
+ *            sequence file should have consistent line lengths, 
+ *            suitable for SSI's fast subsequence indexing.
+ *            
+ * Returns:   <eslOK> on success; <sq> now contains next window of
+ *            sequence, with at least 1 new residue. The number
+ *            of new residues is <sq->W>; <sq->C> residues are 
+ *            saved from the previous window. Caller may now
+ *            process residues <sq->dsq[sq->C+1]..sq->dsq[sq->n]>.
+ *            
+ *            <eslEOD> if no new residues were read for this sequence
+ *            and strand, and <sq> now contains an empty info-only
+ *            structure (annotation and <L> are valid). Before calling
+ *            <esl_sqio_ReadWindow()> again, caller will either want
+ *            to make <W> negative (to start reading the Crick strand
+ *            of the current sequence), or it will want to reset the
+ *            <sq> (with <esl_sq_Reuse()>) to go on the next sequence.
+ *            
+ *            <eslEOF> if we've already returned <eslEOD> before to
+ *            signal the end of the previous seq record, and moreover,
+ *            there's no more sequence records in the file.
+ *            
+ *            <eslEINVAL> if an invalid residue is found in the
+ *            sequence, or if you attempt to take the reverse
+ *            complement of a sequence that can't be reverse
+ *            complemented.
+ *
+ * Throws:    <eslESYNTAX> if you try to read a reverse window before
+ *            you've read forward strand.
+ *            
+ *            <eslECORRUPT> if something goes awry internally in the
+ *            coordinate system.
+ *            
+ *            <eslEMEM> on allocation error.
+ */
+int
+esl_sqio_ReadWindow(ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq)
+{
+  return sqfp->read_window(sqfp, C, W, sq);
+}
+
+/* Function:  esl_sqio_ReadBlock()
+ * Synopsis:  Read the next block of sequences from a file.
+ *
+ * Purpose:   Reads a block of sequences from open sequence file <sqfp> into 
+ *            <sqBlock>.
+ *
+ * Returns:   <eslOK> on success; the new sequence is stored in <sqBlock>.
+ * 
+ *            Returns <eslEOF> when there is no sequence left in the
+ *            file (including first attempt to read an empty file).
+ * 
+ *            Returns <eslEFORMAT> if a parse error is encountered.
+ *            Call <esl_sqfile_GetErrorBuf()> to get a ptr to a
+ *            user-directed error message describing the problem,
+ *            including the line number on which it was found.
+ *
+ * Throws:    <eslEMEM> on allocation failure;
+ *            <eslEINCONCEIVABLE> on internal error.
+ */
+int
+esl_sqio_ReadBlock(ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target)
+{
+  return sqfp->read_block(sqfp, sqBlock, max_residues, max_sequences, long_target);
+}
+
+/* Function:  esl_sqio_Parse()
+ * Synopsis:  Parse a sequence already read into a buffer.
+ *
+ * Purpose:   Parse the buffer <buf> for a sequence <s> of type
+ *            <format>.  The buffer must contain the entire sequence.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM>  on allocation error.
+ *            <eslEFORMAT>  on parsing error.
+ *            <eslEINVAL> on unsupported format.
+ */
+int
+esl_sqio_Parse(char *buf, int size, ESL_SQ *s, int format)
+{
+  int status;
+
+  switch (format) {
+  case eslSQFILE_EMBL:     
+  case eslSQFILE_UNIPROT:  
+  case eslSQFILE_GENBANK:  
+  case eslSQFILE_DDBJ:     
+  case eslSQFILE_FASTA:    
+  case eslSQFILE_DAEMON:   
+    status = esl_sqascii_Parse(buf, size, s, format);
+
+    break;
+  default: 
+    ESL_EXCEPTION(eslEINVAL, "can't parse that format");
+  }
+  return status;
+}
+/*------------------ end, sequential sequence input -------------*/
+
+
+
+/*****************************************************************
+ *# 4. Writing sequences.
+ *****************************************************************/
+
+/* Function:  esl_sqio_Write()
+ * Synopsis:  Write a sequence to a file.
+ *
+ * Purpose:   Write sequence <s> to an open FILE <fp> in file format
+ *            <format>.
+ * 
+ *            If <update> is <TRUE>, set the offsets for sequence <s>.
+ *            
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslEWRITE> on system write error, such as filled disk.
+ */
+int
+esl_sqio_Write(FILE *fp, ESL_SQ *s, int format, int update)
+{
+  int status;
+
+#ifdef eslAUGMENT_MSA
+  ESL_MSA *msa;
+  if (esl_sqio_IsAlignment(format))
+    {
+      if ((status = convert_sq_to_msa(s, &msa)) != eslOK) return status;
+      status = esl_msafile_Write(fp, msa, format);
+      esl_msa_Destroy(msa);
+      return status;
+    }
+#endif
+
+  switch (format) {
+  case eslSQFILE_FASTA:   
+  case eslSQFILE_HMMPGMD:
+    status = esl_sqascii_WriteFasta(fp, s, update); 
+    break;
+  default: 
+    ESL_EXCEPTION(eslEINCONCEIVABLE, "can't write that format");
+  }
+  return status;
+}
+
+/* Function:  esl_sqio_Echo()
+ * Synopsis:  Echo a sequence's record onto output stream.
+ *
+ * Purpose:   Given a complete <sq> that we have read by some means
+ *            from an open <sqfp>; echo that sequence's record
+ *            onto the output stream <ofp>. 
+ *
+ *            This allows records to be regurgitated exactly as they
+ *            appear, rather than writing the subset of information
+ *            stored in an <ESL_SQ>. <esl-sfetch> in the miniapps uses
+ *            this, for example.
+ *            
+ *            Because this relies on repositioning the <sqfp>, it
+ *            cannot be called on non-positionable streams (stdin or
+ *            gzipped files). Because it relies on the sequence lying
+ *            in a contiguous sequence of bytes in the file, it cannot
+ *            be called on a sequence in a multiple alignment file.
+ *            Trying to do so throws an <eslEINVAL> exception.
+ *            
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEINVAL>   if <sqfp> isn't a repositionable sequence file.
+ *            <eslECORRUPT> if we run out of data, probably from bad offsets
+ *            <eslEMEM>     on allocation failure.
+ *            <eslESYS>     on system call failures.
+ *            
+ *            
+ */
+int
+esl_sqio_Echo(ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp)
+{
+  return sqfp->echo(sqfp, sq, ofp);
+}
+/*----------------- end, writing sequences  ---------------------*/
+
+
+
+/*****************************************************************
+ *# 5. Miscellaneous routines 
+ *****************************************************************/ 
+
+/* Function:  esl_sqfile_GetErrorBuf()
+ * Synopsis:  Return the error buffer
+ *
+ * Purpose:   Returns the pointer to the error buffer.
+ *            Each parser is responsible for formatting
+ *            a zero terminated string describing the
+ *            error condition.
+ *
+ * Returns:   A pointer the error message.
+ */
+const char *
+esl_sqfile_GetErrorBuf(const ESL_SQFILE *sqfp)
+{
+  return sqfp->get_error(sqfp);
+}
+
+
+/* Function:  esl_sqfile_IsRewindable()
+ * Synopsis:  Return <TRUE> if <sqfp> can be rewound.
+ *
+ * Purpose:   Returns <TRUE> if <sqfp> can be rewound (positioned 
+ *            to an offset of zero), in order to read it a second
+ *            time.
+ */
+int
+esl_sqfile_IsRewindable(const ESL_SQFILE *sqfp)
+{
+  return sqfp->is_rewindable(sqfp);
+}
+
+/* Function:  esl_sqio_IsAlignment()
+ * Synopsis:  Return TRUE for alignment file format codes.
+ *
+ * Purpose:   Returns TRUE if <fmt> is an alignment file
+ *            format code; else returns FALSE.
+ *            
+ *            This function only checks the convention
+ *            that <fmt> codes $<$100 are unaligned formats,
+ *            and $\geq$100 are aligned formats. It does
+ *            not check that <fmt> is a recognized format
+ *            code.
+ */
+int
+esl_sqio_IsAlignment(int fmt)
+{
+  return (fmt >= 100 ? TRUE : FALSE);
+}
+
+
+/* Function:  esl_sqio_EncodeFormat()
+ * Synopsis:  Convert a string to an internal format code.
+ *
+ * Purpose:   Given <fmtstring>, return format code.  For example, if
+ *            <fmtstring> is "fasta", returns <eslSQFILE_FASTA>. Returns 
+ *            <eslSQFILE_UNKNOWN> if <fmtstring> doesn't exactly match a 
+ *            known format.
+ *            
+ *            Matching is case insensitive; fasta, FASTA, and FastA
+ *            all return <eslSQFILE_FASTA>, for example.
+ *            
+ *            When augmented by msa, then alignment file formats
+ *            are recognized in addition to unaligned file formats.
+ */
+int
+esl_sqio_EncodeFormat(char *fmtstring)
+{
+  if (strcasecmp(fmtstring, "fasta")     == 0) return eslSQFILE_FASTA;
+  if (strcasecmp(fmtstring, "embl")      == 0) return eslSQFILE_EMBL;
+  if (strcasecmp(fmtstring, "genbank")   == 0) return eslSQFILE_GENBANK;
+  if (strcasecmp(fmtstring, "ddbj")      == 0) return eslSQFILE_DDBJ;
+  if (strcasecmp(fmtstring, "uniprot")   == 0) return eslSQFILE_UNIPROT;
+  if (strcasecmp(fmtstring, "daemon")    == 0) return eslSQFILE_DAEMON;
+  if (strcasecmp(fmtstring, "hmmpgmd")   == 0) return eslSQFILE_HMMPGMD;
+  if (strcasecmp(fmtstring, "fmindex")   == 0) return eslSQFILE_FMINDEX;
+
+
+#ifdef eslAUGMENT_NCBI
+  if (strcasecmp(fmtstring, "ncbi")      == 0) return eslSQFILE_NCBI;
+#endif
+#ifdef eslAUGMENT_MSA
+  return esl_msafile_EncodeFormat(fmtstring);
+#endif
+  return eslSQFILE_UNKNOWN;
+}
+
+/* Function:  esl_sqio_DecodeFormat()
+ * Synopsis:  Returns descriptive string for file format code.
+ *
+ * Purpose:   Given a format code <fmt>, returns a string label for
+ *            that format. For example, if <fmt> is <eslSQFILE_FASTA>,
+ *            returns "FASTA". 
+ *            
+ *            When augmented by msa, then alignment file format codes
+ *            are recognized in addition to unaligned file format codes.
+ */
+char *
+esl_sqio_DecodeFormat(int fmt)
+{
+#ifdef eslAUGMENT_MSA
+  if (esl_sqio_IsAlignment(fmt)) return esl_msafile_DecodeFormat(fmt);
+#endif
+
+  switch (fmt) {
+  case eslSQFILE_UNKNOWN:    return "unknown";
+  case eslSQFILE_FASTA:      return "FASTA";
+  case eslSQFILE_EMBL:       return "EMBL";
+  case eslSQFILE_GENBANK:    return "GenBank";
+  case eslSQFILE_DDBJ:       return "DDBJ";
+  case eslSQFILE_UNIPROT:    return "UniProt";
+  case eslSQFILE_DAEMON:     return "daemon";
+  case eslSQFILE_HMMPGMD:    return "hmmpgmd";
+#ifdef eslAUGMENT_NCBI
+  case eslSQFILE_NCBI:       return "NCBI";
+#endif
+  default:                   break;
+  }
+  esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__,  "no such sqio format code %d", fmt);
+  return NULL;
+}
+
+
+/* Function:  esl_sqfile_Position()
+ * Synopsis:  Reposition an open sequence file to an offset.
+ *
+ * Purpose:   Reposition an open <sqfp> to offset <offset>.
+ *            <offset> would usually be the first byte of a
+ *            desired sequence record.
+ *            
+ *            Only normal sequence files can be positioned to a
+ *            nonzero offset. If <sqfp> corresponds to a standard
+ *            input stream or gzip -dc stream, it may not be
+ *            repositioned. If <sqfp> corresponds to a multiple
+ *            sequence alignment file, the only legal <offset>
+ *            is 0, to rewind the file to the beginning and 
+ *            be able to read the entire thing again.
+ *            
+ *            After <esl_sqfile_Position()> is called on a nonzero
+ *            <offset>, and other bookkeeping information is unknown.
+ *            If caller knows it, it should set it explicitly.
+ *            
+ *            See the SSI module for manipulating offsets and indices.
+ *
+ * Returns:   <eslOK>     on success;
+ *            <eslEOF>    if no data can be read from this position.
+ *
+ * Throws:    <eslESYS> if the fseeko() or fread() call fails.
+ *            <eslEMEM> on (re-)allocation failure.
+ *            <eslEINVAL> if the <sqfp> is not positionable.
+ *            <eslENOTFOUND> if in trying to rewind an alignment file  
+ *              by closing and reopening it, the open fails.
+ *            On errors, the state of <sqfp> is indeterminate, and
+ *            it should not be used again.
+ */
+int
+esl_sqfile_Position(ESL_SQFILE *sqfp, off_t offset)
+{
+  return sqfp->position(sqfp, offset);
+}
+
+/* Function:  esl_sqio_Ignore()
+ * Synopsis:  Sets the input map to ignore one or more input characters.
+ *
+ * Purpose:   Set the input map of the open <sqfp> to allow
+ *            the characters in the string <ignoredchars> to appear
+ *            in input sequences. These characters will be ignored.
+ *
+ *            For example, an application might want to ignore '*'
+ *            characters in its sequence input, because some translated
+ *            peptide files use '*' to indicate stop codons.
+ *            
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_sqio_Ignore(ESL_SQFILE *sqfp, const char *ignoredchars)
+{
+  int i;
+  for (i = 0; ignoredchars[i] != '\0'; i++)
+    sqfp->inmap[(int) ignoredchars[i]] = eslDSQ_IGNORED;
+  return eslOK;
+}
+
+/* Function:  esl_sqio_AcceptAs()
+ * Synopsis:  Map a list of additional characters.
+ *
+ * Purpose:   Set the input map of the open <sqfp> to allow the 
+ *            characters in the string <xchars> to appear in 
+ *            input sequences. These characters will all be 
+ *            mapped to the character <readas> (or, for digital
+ *            sequence input, to the digitized representation 
+ *            of the text character <readas> in the <sqfp>'s
+ *            digital alphabet).
+ *            
+ *            For example, an application might want to read
+ *            '*' as 'X' when reading translated peptide files
+ *            that use '*' to indicate a stop codon.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_sqio_AcceptAs(ESL_SQFILE *sqfp, char *xchars, char readas)
+{
+  int i;
+  
+#ifdef eslAUGMENT_ALPHABET
+  if (sqfp->do_digital)
+    {
+      for (i = 0; xchars[i] != '\0'; i++)
+	sqfp->inmap[(int) xchars[i]] = esl_abc_DigitizeSymbol(sqfp->abc, readas);
+    }
+#endif
+  if (! sqfp->do_digital)
+    {
+      for (i = 0; xchars[i] != '\0'; i++)
+	sqfp->inmap[(int) xchars[i]] = readas;
+    }
+  return eslOK;
+
+}
+/*--------------- end, miscellaneous routines -------------------*/
+
+
+
+/*****************************************************************
+ *# 6. Sequence/subsequence fetching, random access [with <ssi>]
+ *****************************************************************/
+
+#ifdef eslAUGMENT_SSI
+/* Function:  esl_sqfile_OpenSSI()
+ * Synopsis:  Opens an SSI index associated with a sequence file.
+ *
+ * Purpose:   Opens an SSI index file associated with the already open
+ *            sequence file <sqfp>. If successful, the necessary
+ *            information about the open SSI file is stored internally
+ *            in <sqfp>.
+ *            
+ *            The SSI index file name is determined in one of two
+ *            ways, depending on whether a non-<NULL> <ssifile_hint>
+ *            is provided.
+ *            
+ *            If <ssifile_hint> is <NULL>, the default for
+ *            constructing the SSI filename from the sequence
+ *            filename, by using exactly the same path (if any) for
+ *            the sequence filename, and appending the suffix <.ssi>.
+ *            For example, the SSI index for <foo> is <foo.ssi>, for
+ *            <./foo.fa> is <./foo.fa.ssi>, and for
+ *            </my/path/to/foo.1.fa> is </my/path/to/foo.1.fa.ssi>.
+ *            
+ *            If <ssifile_hint> is <non-NULL>, this exact fully
+ *            qualified path is used as the SSI file name.
+ *
+ * Returns:   <eslOK> on success, and <sqfp->ssi> is now internally
+ *            valid.
+ *            
+ *            <eslENOTFOUND> if no SSI index file is found;
+ *            <eslEFORMAT> if it's found, but appears to be in incorrect format;
+ *            <eslERANGE> if the SSI file uses 64-bit offsets but we're on
+ *            a system that doesn't support 64-bit file offsets.
+ *
+ * Throws:    <eslEINVAL> if the open sequence file <sqfp> doesn't
+ *            correspond to a normal sequence flatfile -- we can't
+ *            random access in .gz compressed files, standard input,
+ *            or multiple alignment files that we're reading
+ *            sequentially.
+ *            
+ *            Throws <eslEMEM> on allocation error.
+ */
+int
+esl_sqfile_OpenSSI(ESL_SQFILE *sqfp, const char *ssifile_hint)
+{
+  return sqfp->open_ssi(sqfp, ssifile_hint);
+}
+
+
+
+/* Function:  esl_sqfile_PositionByKey()
+ * Synopsis:  Use SSI to reposition seq file to a particular sequence.
+ *
+ * Purpose:   Reposition <sqfp> so that the next sequence we read will
+ *            be the one named (or accessioned) <key>.
+ *            
+ *            <sqfp->linenumber> is reset to be relative to the start
+ *            of the record named <key>, rather than the start of the
+ *            file.
+ *
+ * Returns:   <eslOK> on success, and the file <sqfp> is repositioned
+ *            so that the next <esl_sqio_Read()> call will read the
+ *            sequence named <key>.
+ *            
+ *            Returns <eslENOTFOUND> if <key> isn't found in the
+ *            index; in this case, the position of <sqfp> in the file
+ *            is unchanged.
+ *            
+ *            Returns <eslEFORMAT> if something goes wrong trying to
+ *            read the index, almost certainly indicating a format
+ *            problem in the SSI file.
+ *            
+ *            Returns <eslEOF> if, after repositioning, we fail to
+ *            load the next line or buffer from the sequence file;
+ *            this probably also indicates a format problem in the SSI
+ *            file.
+ * 
+ * Throws:    <eslEMEM>   on allocation error;
+ *            <eslEINVAL> if there's no open SSI index in <sqfp>;
+ *            <eslESYS>   if the <fseek()> fails.
+ *            
+ *            In all these cases, the state of <sqfp> becomes
+ *            undefined, and the caller should not use it again.
+ */
+int
+esl_sqfile_PositionByKey(ESL_SQFILE *sqfp, const char *key)
+{
+  return sqfp->pos_by_key(sqfp, key);
+}
+
+
+/* Function:  esl_sqfile_PositionByNumber()
+ * Synopsis:  Use SSI to reposition by sequence number
+ *
+ * Purpose:   Reposition <sqfp> so that the next sequence we 
+ *            read will be the <which>'th sequence, where <which>
+ *            is <0..sqfp->ssi->nprimary-1>. 
+ *            
+ *            <sqfp->linenumber> is reset to be relative to the start
+ *            of the record named <key>, rather than the start of the
+ *            file.
+ *
+ * Returns:   <eslOK> on success, and the file <sqfp> is repositioned.
+ *            
+ *            Returns <eslENOTFOUND> if there is no sequence number
+ *            <which> in the index; in this case, the position of
+ *            <sqfp> in the file is unchanged.
+ *            
+ *            Returns <eslEFORMAT> if something goes wrong trying to
+ *            read the index, almost certainly indicating a format
+ *            problem in the SSI file.
+ *            
+ *            Returns <eslEOF> if, after repositioning, we fail to
+ *            load the next line or buffer from the sequence file;
+ *            this probably also indicates a format problem in the SSI
+ *            file.
+ * 
+ * Throws:    <eslEMEM>   on allocation error;
+ *            <eslEINVAL> if there's no open SSI index in <sqfp>;
+ *            <eslESYS>   if the <fseek()> fails.
+ *            
+ *            In all these cases, the state of <sqfp> becomes
+ *            undefined, and the caller should not use it again.
+ */
+int
+esl_sqfile_PositionByNumber(ESL_SQFILE *sqfp, int which)
+{
+  return sqfp->pos_by_number(sqfp, which);
+}
+
+
+/* Function:  esl_sqio_Fetch()
+ * Synopsis:  Fetch a complete sequence, using SSI indexing.
+ *
+ * Purpose:   Fetch a sequence named (or accessioned) <key> from
+ *            the repositionable, open sequence file <sqfp>.
+ *            The open <sqfp> must have an open SSI index.
+ *            The sequence is returned in <sq>.
+ *
+ * Returns:   <eslOK> on soccess.
+ *            <eslEINVAL> if no SSI index is present, or if <sqfp> can't
+ *            be repositioned.
+ *            <eslENOTFOUND> if <source> isn't found in the file.
+ *            <eslEFORMAT> if either the index file or the sequence file
+ *            can't be parsed, because of unexpected format issues.
+ *       
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_sqio_Fetch(ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq)
+{
+  return sqfp->fetch(sqfp, key, sq);
+}
+  
+/* Function:  esl_sqio_FetchInfo()
+ * Synopsis:  Fetch a sequence's info, using SSI indexing.
+ *
+ * Purpose:   Fetch a sequence named (or accessioned) <key> from
+ *            the repositionable, open sequence file <sqfp>, reading
+ *            all info except the sequence (and secondary structure).
+ *            The open <sqfp> must have an open SSI index.
+ *            The sequence info is returned in <sq>.
+ *
+ * Returns:   <eslOK> on soccess.
+ *            <eslEINVAL> if no SSI index is present, or if <sqfp> can't
+ *            be repositioned.
+ *            <eslENOTFOUND> if <source> isn't found in the file.
+ *            <eslEFORMAT> if either the index file or the sequence file
+ *            can't be parsed, because of unexpected format issues.
+ *       
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_sqio_FetchInfo(ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq)
+{
+  return sqfp->fetch_info(sqfp, key, sq);
+}
+  
+
+/* Function:  esl_sqio_FetchSubseq()
+ * Synopsis:  Fetch a subsequence, using SSI indexing.
+ *
+ * Purpose:   Fetch subsequence <start..end> from a sequence named (or
+ *            accessioned) <source>, in the repositionable, open sequence file <sqfp>.
+ *            The open <sqfp> must have an SSI index. Put the
+ *            subsequence in <sq>. 
+ *            
+ *            As a special case, if <end> is 0, the subsequence is
+ *            fetched all the way to the end, so you don't need to
+ *            look up the sequence length <L> to fetch a suffix.
+ *            
+ *            The caller may want to rename/reaccession/reannotate the
+ *            subsequence.  Upon successful return, <sq->name> is set
+ *            to <source/start-end>, and <sq->source> is set to
+ *            <source> The accession and description <sq->acc> and
+ *            <sq->desc> are set to the accession and description of
+ *            the source sequence.
+ *            
+ * Returns:   <eslOK> on success.
+ *            <eslEINVAL> if no SSI index is present, or if <sqfp> can't
+ *            be repositioned.
+ *            <eslENOTFOUND> if <source> isn't found in the file.
+ *            <eslEFORMAT> if either the index file or the sequence file
+ *            can't be parsed, because of unexpected format issues.
+ *            <eslERANGE> if the <start..end> coords don't lie entirely
+ *            within the <source> sequence.
+ *
+ * Throws:    <eslEMEM> on allocation errors.
+ */
+int
+esl_sqio_FetchSubseq(ESL_SQFILE *sqfp, const char *source, int64_t start, int64_t end, ESL_SQ *sq)
+{
+  return sqfp->fetch_subseq(sqfp, source, start, end, sq);
+}  
+#endif /*eslAUGMENT_SSI*/
+/*------------- end, random sequence access with SSI -------------------*/
+
+
+/*****************************************************************
+ *# 7. Sequence database caching.
+ *****************************************************************/ 
+
+/* Function:  esl_sqfile_Cache()
+ * Synopsis:  Read a database into memory.
+ *
+ * Purpose:   Read an entire database into memory building a cached
+ *            structure <ESL_SQCACHE>.  The cache structure has basic
+ *            information about the database, ie number of sequences
+ *            number of residues, etc.
+ *
+ *            All sequences <ESL_SQ> are in a memory array <sq_list>.
+ *            The number of elements in the list is <seq_count>.  The
+ *            header pointers, ie name, acc and desc are pointers into
+ *            the <header_mem> buffer.  All digitized sequences are pointers
+ *            into the <residue_mem> buffer.
+ *
+ * Returns:   <eslOK> on success.
+ *            
+ *            Returns <eslEFORMAT> if a parse error is encountered in
+ *            trying to read the sequence file.
+ *            
+ *            Returns <eslENODATA> if the file appears to be empty.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ */
+int  
+esl_sqfile_Cache(const ESL_ALPHABET *abc, const char *seqfile, int fmt, const char *env, ESL_SQCACHE **ret_sqcache)
+{
+  int          status;
+
+  int          n;
+
+  uint32_t     len;
+  uint32_t     max;
+  uint32_t     count;
+
+  uint64_t     res_size = 1;
+  uint64_t     hdr_size = 1;
+
+  ESL_SQFILE  *sqfp    = NULL;
+
+  ESL_SQ      *c       = NULL;
+  ESL_SQ      *sq      = NULL;
+  ESL_SQCACHE *cache   = NULL;
+
+  ESL_DSQ     *res_ptr = NULL;
+  char        *hdr_ptr = NULL;
+
+  /* open the database */
+  status = esl_sqfile_OpenDigital(abc, seqfile, fmt, env, &sqfp);
+  if (status != eslOK) return status;
+
+  /* if we can't rewind the database, stop now.  */
+  if (!esl_sqfile_IsRewindable(sqfp)) return eslFAIL;
+
+  /* loop through the database reading all the sequnces */
+  max = 0;
+  count = 0;
+  sq  = esl_sq_CreateDigital(abc);
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) {
+    ++count;
+
+    res_size += sq->n + 1;
+    if (sq->n > max) max = sq->n;
+
+    len = strlen(sq->name);
+    if (len > 0) ++len;
+    hdr_size += len;
+
+    len = strlen(sq->acc);
+    if (len > 0) ++len;
+    hdr_size += len;
+
+    len = strlen(sq->desc);
+    if (len > 0) ++len;
+    hdr_size += len;
+
+    esl_sq_Reuse(sq);
+  }
+  if (status != eslEOF) goto ERROR;
+  
+  /* now that the database information is know, allocate the memory to
+   * hold the data.  different memory blocks will be used to hold the
+   * redisues and header info.  the idea is that since the header info,
+   * ie, name, acc, etc is used infrenquently (only when there is a hit)
+   * if some pages need to be swapped out, hopefully it will be the
+   * header pages first leaving the sequences in memory.
+   */
+  ESL_ALLOC(cache, sizeof(ESL_SQCACHE));
+
+  cache->filename    = NULL;
+  cache->sq_list     = NULL;
+  cache->residue_mem = NULL;
+  cache->header_mem  = NULL;
+
+  cache->abc         = abc;
+  cache->format      = fmt;
+  cache->seq_count   = count;
+  cache->res_count   = res_size;
+  cache->max_seq     = max;
+
+  cache->res_size    = res_size + 2;
+  cache->hdr_size    = hdr_size;
+
+  ESL_ALLOC(cache->filename, strlen(seqfile) + 1);
+  strcpy(cache->filename, seqfile);
+
+  ESL_ALLOC(cache->sq_list, sizeof(ESL_SQ) * (count + 1));
+
+  /* different memory blocks will be used to hold the residues and header
+   * info.  the idea is that since the header info, ie, name, acc, etc.
+   * is used infrenquently (only when there is a hit) if some pages need
+   * to be swapped out, hopefully it will be the header pages first
+   * leaving the sequences in memory.
+   */
+  ESL_ALLOC(cache->residue_mem, res_size + 2);
+  ESL_ALLOC(cache->header_mem, hdr_size);
+
+  hdr_ptr  = cache->header_mem;
+  *hdr_ptr = 0;
+
+  res_ptr  = cache->residue_mem;
+  *res_ptr = eslDSQ_SENTINEL;
+
+  /* loop through the database filling in the cache */
+  n = 0;
+  esl_sqfile_Position(sqfp, 0);
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) {
+    c = cache->sq_list + n;
+
+    /* if header fields have been defined, copy them to the cache */
+    c->name = hdr_ptr;
+    if (sq->name[0] != 0) {
+      c->name = hdr_ptr + 1;
+      strcpy(c->name, sq->name);
+      hdr_ptr += strlen(sq->name) + 1;
+    }
+
+    c->acc = hdr_ptr;
+    if (sq->acc[0] != 0) {
+      c->acc = hdr_ptr + 1;
+      strcpy(c->acc, sq->acc);
+      hdr_ptr += strlen(sq->acc) + 1;
+    }
+
+    c->desc = hdr_ptr;
+    if (sq->desc[0] != 0) {
+      c->desc = hdr_ptr + 1;
+      strcpy(c->desc, sq->desc);
+      hdr_ptr += strlen(sq->desc) + 1;
+    }
+
+    c->tax_id = sq->tax_id;
+    c->seq    = NULL;
+    c->ss     = NULL;
+    c->nxr    = 0;
+    c->xr_tag = NULL;
+    c->xr     = NULL;
+
+    /* copy the digitized sequence */
+    memcpy(res_ptr + 1, sq->dsq + 1, sq->n + 1);
+    c->dsq   = res_ptr;
+    c->n     = sq->n;
+    res_ptr += sq->n + 1;
+
+    /* Coordinate info */
+    c->start = sq->start;
+    c->end = sq->end;
+    c->C = sq->C;
+    c->W = sq->W;
+    c->L = sq->L;
+
+    c->source = NULL;
+
+    /* allocated lengths */
+    c->nalloc   = -1;
+    c->aalloc   = -1;
+    c->dalloc   = -1;
+    c->salloc   = -1;
+    c->srcalloc = -1;
+
+    /* Disk offset bookkeeping */
+    c->idx  = n;
+    c->roff = sq->roff;
+    c->hoff = sq->hoff;
+    c->doff = sq->doff;
+    c->eoff = sq->eoff;
+
+    c->abc = abc;
+
+    esl_sq_Reuse(sq);
+    ++n;
+  }
+  if (status != eslEOF) goto ERROR;
+
+  /* add on last empty sequence */
+  c = cache->sq_list + count;
+  *(res_ptr + 1) = eslDSQ_SENTINEL;
+
+  c->name     = hdr_ptr;
+  c->acc      = hdr_ptr;
+  c->desc     = hdr_ptr;
+
+  c->tax_id   = -1;
+  c->seq      = NULL;
+  c->ss       = NULL;
+  c->nxr      = 0;
+  c->xr_tag   = NULL;
+  c->xr       = NULL;
+
+  c->dsq      = res_ptr;
+  c->n        = 0;
+
+  c->start    = 0;
+  c->end      = 0;
+  c->C        = 0;
+  c->W        = 0;
+  c->L        = -1;
+
+  c->source   = NULL;
+
+  c->nalloc   = -1;
+  c->aalloc   = -1;
+  c->dalloc   = -1;
+  c->salloc   = -1;
+  c->srcalloc = -1;
+
+  c->idx      = count;
+  c->roff     = -1;
+  c->hoff     = -1;
+  c->doff     = -1;
+  c->eoff     = -1;
+
+  c->abc      = NULL;
+ 
+  if (sq != NULL) esl_sq_Destroy(sq);
+  esl_sqfile_Close(sqfp);
+
+  *ret_sqcache = cache;
+
+  return eslOK;
+
+ERROR:
+  if (sq != NULL) esl_sq_Destroy(sq);
+  esl_sqfile_Close(sqfp);
+
+  esl_sqfile_Free(cache);
+
+  return status;
+}
+
+/* Function:  esl_sqfile_Free()
+ * Synopsis:  Free a cached database <ESL_SQCACHE>.
+ *
+ * Purpose:   Frees all the memory used to cache the sequence database.
+ *
+ * Returns:   none.
+ */
+void  
+esl_sqfile_Free(ESL_SQCACHE *sqcache)
+{
+  if (sqcache == NULL) return;
+
+  if (sqcache->filename    != NULL) free(sqcache->filename);
+  if (sqcache->sq_list     != NULL) free(sqcache->sq_list);
+  if (sqcache->residue_mem != NULL) free(sqcache->residue_mem);
+  if (sqcache->header_mem  != NULL) free(sqcache->header_mem);
+
+  sqcache->abc         = NULL;
+  sqcache->filename    = NULL;
+  sqcache->sq_list     = NULL;
+  sqcache->residue_mem = NULL;
+  sqcache->header_mem  = NULL;
+
+  free(sqcache);
+}
+/*---------------- end, sequence database caching ---------------*/
+
+
+
+
+
+/*****************************************************************
+ *  8. Functions specific to sqio <-> msa interoperation [with <msa>] 
+ *****************************************************************/
+
+#ifdef eslAUGMENT_MSA
+/* convert_sq_to_msa()
+ * 
+ * Given a <sq>, create and return an "MSA" through <ret_msa>, which
+ * contains only the single unaligned sequence. <sq> is 
+ * not affected in any way. This is only to convert from the SQ
+ * object to an MSA object for the purpose of writing SQ in an MSA format
+ * file format.
+ * 
+ * Returns <eslOK> on success, and <*ret_msa> points to
+ * a new "alignment".
+ * 
+ * Throws <eslEMEM> on allocation error, and <*ret_msa> is NULL.
+ */
+static int
+convert_sq_to_msa(ESL_SQ *sq, ESL_MSA **ret_msa)
+{
+  ESL_MSA *msa;
+  int      x;        /* counter for extra-residue markups */
+  int      status;
+
+#ifdef eslAUGMENT_ALPHABET
+  if (sq->dsq != NULL) { 
+    if ((msa = esl_msa_CreateDigital(sq->abc, 1, sq->n)) == NULL) { status = eslEMEM; goto ERROR; }
+  } else 
+#endif
+  if ((msa = esl_msa_Create(1, sq->n)) == NULL) { status = eslEMEM; goto ERROR; }
+
+  if ((status = esl_strdup(sq->name, -1, &(msa->sqname[0]))) != eslOK) goto ERROR;
+  
+  if (*sq->acc != '\0')
+    {
+      ESL_ALLOC(msa->sqacc, sizeof(char *) * 1);
+      if ((status = esl_strdup(sq->acc, -1, &(msa->sqacc[0]))) != eslOK) goto ERROR;
+    }
+  if (*sq->desc != '\0')
+    {
+      ESL_ALLOC(msa->sqdesc, sizeof(char *) * 1);
+      if ((status = esl_strdup(sq->desc, -1, &(msa->sqdesc[0]))) != eslOK) goto ERROR;
+    }
+
+#ifdef eslAUGMENT_ALPHABET
+  if (sq->dsq != NULL) esl_abc_dsqcpy(sq->dsq, sq->n, msa->ax[0]);
+  else
+#endif
+  strcpy(msa->aseq[0], sq->seq);
+  
+  if (sq->ss != NULL)
+    {
+      ESL_ALLOC(msa->ss, sizeof(char *) * 1);
+
+#ifdef eslAUGMENT_ALPHABET
+      if (sq->dsq != NULL) {	/* sq->ss is 1..L in digital mode; but msa->ss is always 0..L-1 */
+	if ((status = esl_strdup(sq->ss+1, -1, &(msa->ss[0]))) != eslOK) goto ERROR;
+      } else
+#endif
+      if ((status = esl_strdup(sq->ss, -1, &(msa->ss[0]))) != eslOK) goto ERROR;     	
+
+    }
+
+  if (sq->nxr > 0) {
+    msa->ngr = sq->nxr;
+    ESL_ALLOC(msa->gr,     sizeof(char **) * msa->ngr);    
+    ESL_ALLOC(msa->gr_tag, sizeof(char  *) * msa->ngr);
+
+    for (x = 0; x < msa->ngr; x ++) {
+      ESL_ALLOC(msa->gr[x],     sizeof(char *));  
+      ESL_ALLOC(msa->gr_tag[x], sizeof(char));
+   
+#ifdef eslAUGMENT_ALPHABET
+      if (sq->dsq != NULL) {	/* sq->xr is 1..L in digital mode; but msa->gr is always 0..L-1 */
+	if ((status = esl_strdup(sq->xr[x]+1, -1, &(msa->gr[x][0]))) != eslOK) goto ERROR;
+      } else
+#endif
+      if ((status = esl_strdup(sq->xr[x], -1, &(msa->gr[x][0]))) != eslOK) goto ERROR;     	
+
+      if ((status = esl_strdup(sq->xr_tag[x], -1, &(msa->gr_tag[x]))) != eslOK) goto ERROR;     	  
+    }
+  }
+
+  msa->alen = sq->n;
+  msa->nseq = 1;
+  *ret_msa = msa;
+  return eslOK;
+
+ ERROR:
+  esl_msa_Destroy(msa);
+  *ret_msa = NULL;
+  return status;
+}
+
+#endif /*eslAUGMENT_MSA*/
+/*---------- end of msa <-> sqio module interop -----------------*/
+
+
+
+/*****************************************************************
+ *#  9. Benchmark driver
+ *****************************************************************/ 
+/* Some current results:
+ *
+ * ./benchmark /misc/data0/genomes/c.elegans/genome/allWS120
+ * CPU Time: 0.90u 0.06s 00:00:00.96 Elapsed: 00:00:01
+ *
+ * /benchmark -i /misc/data0/genomes/c.elegans/genome/allWS120
+ * CPU Time: 0.41u 0.04s 00:00:00.44 Elapsed: 00:00:00
+ * 
+ * ./benchmark -w /misc/data0/genomes/c.elegans/genome/allWS120
+ * CPU Time: 0.83u 0.05s 00:00:00.88 Elapsed: 00:00:01
+ *
+ * ./benchmark -2w /misc/data0/genomes/c.elegans/genome/allWS120
+ * CPU Time: 3.55u 0.26s 00:00:03.80 Elapsed: 00:00:04
+ *
+ * Digital times are comparable (maybe a titch faster), except
+ * for -d2w, which runs much faster, because rev complementation is
+ * more efficient:
+ *
+ * ./benchmark -d2w /misc/data0/genomes/c.elegans/genome/allWS120
+ * CPU Time: 2.16u 0.31s 00:00:02.47 Elapsed: 00:00:03
+ */
+/* gcc -std=gnu99 -O3 -fomit-frame-pointer -malign-double -fstrict-aliasing -msse2 -pthread -I. -L. -o esl_sqio_benchmark -DeslSQIO_BENCHMARK esl_sqio.c -leasel -lm
+ * icc -O3 -ansi_alias -xW -static -I. -L. -o esl_sqio_benchmark -DeslSQIO_BENCHMARK esl_sqio.c -leasel -lm
+ * ./esl_sqio_benchmark <seqfile>
+ */
+#ifdef eslSQIO_BENCHMARK
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_stopwatch.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-d",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use digital sequence input mode",                  0 },
+  { "-i",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "benchmark ReadInfo() input",                       0 },
+  { "-s",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "benchmark ReadSequence() input",                   0 },
+  { "-w",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "benchmark ReadWindow() input",                     0 },
+  { "-B",        eslARG_INT,   "4096",  NULL, NULL,  NULL,  NULL, NULL, "buffer size for read, fread tests",                0 },
+  { "-C",        eslARG_INT,    "100",  NULL, NULL,  NULL,  NULL, NULL, "context size for ReadWindow()",                    0 },
+  { "-W",        eslARG_INT,   "1000",  NULL, NULL,  NULL,  NULL, NULL, "window size for ReadWindow()",                     0 },
+  { "-2",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  "-w", NULL, "with ReadWindow(), do both strands",               0 },
+  { "--format",  eslARG_STRING,  NULL,  NULL, NULL,  NULL,  NULL, NULL, "assert <seqfile> is in format <s>",                0 },
+  { "--amino",   eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use protein alphabet, not DNA",                    0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <DNA FASTA file>";
+static char banner[] = "benchmark driver for sqio module";
+
+static int benchmark_read (char *filename, int bufsize, int64_t *ret_magic);
+static int benchmark_fread(char *filename, int bufsize, int64_t *ret_magic);
+static int benchmark_fgets(char *filename, int bufsize, int64_t *ret_magic);
+/*static int benchmark_mmap (char *filename, int bufsize, int64_t *ret_magic);*/
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS   *go       = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  ESL_STOPWATCH *w        = esl_stopwatch_Create();
+  ESL_ALPHABET  *abc      = NULL;
+  ESL_SQ        *sq       = NULL;
+  ESL_SQFILE    *sqfp     = NULL;
+  char          *filename = esl_opt_GetArg(go, 1);
+  int            format   = eslSQFILE_UNKNOWN;
+  int            bufsize  = esl_opt_GetInteger(go, "-B");
+  int            C        = esl_opt_GetInteger(go, "-C");
+  int            W        = esl_opt_GetInteger(go, "-W");
+  int            do_crick = esl_opt_GetBoolean(go, "-2");
+  int            n        = 0;
+  int64_t        magic    = 0;
+  int64_t        nr       = 0;
+
+  if (esl_opt_IsOn(go, "--format")) {
+    format = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--format"));
+    if (format == eslSQFILE_UNKNOWN) esl_fatal("unrecognized database format %s\n", esl_opt_GetString(go, "--format"));
+  }
+
+  if (esl_opt_GetBoolean(go, "-d"))
+    {
+      if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO);
+      else                                   abc = esl_alphabet_Create(eslDNA);
+      sq = esl_sq_CreateDigital(abc);
+      if (esl_sqfile_OpenDigital(abc, filename, format, NULL, &sqfp) != eslOK) esl_fatal("failed to open %s", filename);
+    } 
+  else 
+    {
+      sq = esl_sq_Create();
+      if (esl_sqfile_Open(filename, format, NULL, &sqfp) != eslOK) esl_fatal("failed to open %s", filename);
+    }
+
+
+  /* It's useful to have some baselines of just reading the file without parsing;
+   * POSIX read(); C fread(); C fgets(); and POSIX mmap(). 
+   * Counting a's (<na>) is just to keep the optimizer from optimizing the 
+   * benchmark away.
+   */
+  esl_stopwatch_Start(w);   benchmark_read (filename, bufsize, &magic);   esl_stopwatch_Stop(w);  printf("magic=%" PRId64 "; ", magic); esl_stopwatch_Display(stdout, w, "read():  "); 
+  esl_stopwatch_Start(w);   benchmark_fread(filename, bufsize, &magic);   esl_stopwatch_Stop(w);  printf("magic=%" PRId64 "; ", magic); esl_stopwatch_Display(stdout, w, "fread(): ");
+  esl_stopwatch_Start(w);   benchmark_fgets(filename, bufsize, &magic);   esl_stopwatch_Stop(w);  printf("magic=%" PRId64 "; ", magic); esl_stopwatch_Display(stdout, w, "fgets(): ");
+  /*  esl_stopwatch_Start(w);   benchmark_mmap (filename, bufsize, &magic);   esl_stopwatch_Stop(w);  printf("magic=%" PRId64 "; ", magic); esl_stopwatch_Display(stdout, w, "mmap():  "); */
+
+  esl_stopwatch_Start(w);
+  if (esl_opt_GetBoolean(go, "-i"))
+    {
+      while (esl_sqio_ReadInfo(sqfp, sq) == eslOK) { n++; nr += sq->L; esl_sq_Reuse(sq); }
+    }
+  else if (esl_opt_GetBoolean(go, "-s"))
+    {
+      while (esl_sqio_ReadSequence(sqfp, sq) == eslOK) { n++; nr += sq->L; esl_sq_Reuse(sq); }
+    }
+  else if (esl_opt_GetBoolean(go, "-w"))
+    {
+      int wstatus;
+      while ((wstatus = esl_sqio_ReadWindow(sqfp, C, W, sq)) != eslEOF)
+	{ 
+	  if        (wstatus == eslEOD) {
+	    if (!do_crick || W < 0) { n++; esl_sq_Reuse(sq); }
+	    if (do_crick)           { W = -W; }
+	    continue;
+	  } else if (wstatus != eslOK) esl_fatal("Error: %s", esl_sqfile_GetErrorBuf(sqfp));
+	  nr += sq->W;
+	}
+    }
+  else 
+    {
+      while (esl_sqio_Read(sqfp, sq) == eslOK)  { n++; nr += sq->L; esl_sq_Reuse(sq); }
+    }
+  esl_stopwatch_Stop(w);
+  esl_stopwatch_Display(stdout, w, "sqio:  ");
+  printf("Read %d sequences; %lld residues.\n", n, (long long int) nr);
+
+#ifdef eslAUGMENT_NCBI
+  if (sqfp->format == eslSQFILE_NCBI)
+    printf("  DB %d sequences; %lld residues.\n", sqfp->data.ncbi.num_seq, (long long int) sqfp->data.ncbi.total_res);
+#endif
+
+  esl_sqfile_Close(sqfp);
+  esl_sq_Destroy(sq);
+  esl_stopwatch_Destroy(w);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+static int
+benchmark_read(char *filename, int bufsize, int64_t *ret_magic)
+{
+  char *buf  = malloc(sizeof(char) * bufsize);
+  int   fd   = open(filename, O_RDONLY);
+  int   n;
+  int64_t magic = 0;
+  int   pos;
+
+  if (fd != -1) 
+    {
+      while ( (n = read(fd, buf, bufsize)) > 0)
+	{
+	  for (pos = 0; pos < n; pos++) magic += buf[pos];
+	}
+      close(fd);
+    }
+
+  free(buf);
+  *ret_magic = magic;
+  return eslOK;
+}
+  
+static int
+benchmark_fread(char *filename, int bufsize, int64_t *ret_magic)
+{
+  FILE *fp   = fopen(filename, "r");
+  char *buf  = malloc(sizeof(char) * bufsize);
+  int64_t magic = 0;
+  int   pos;
+  int   n;
+  
+  if (fp != NULL)
+    {
+      while ( (n = fread(buf, sizeof(char), bufsize, fp)) > 0)
+	{
+	  for (pos = 0; pos < n; pos++) magic += buf[pos];
+	} 
+      fclose(fp);
+    }
+
+  free(buf);
+  *ret_magic = magic;
+  return eslOK;
+}
+
+
+static int
+benchmark_fgets(char *filename, int bufsize, int64_t *ret_magic)
+{
+  FILE *fp   = fopen(filename, "r");
+  char *buf  = malloc(sizeof(char) * bufsize);
+  int64_t magic = 0;
+  char *s;
+  
+  if (fp != NULL)
+    {
+      while ( fgets(buf, bufsize, fp) != NULL)
+	{
+	  for (s = buf; *s; s++) magic += *s;
+	} 
+      fclose(fp);
+    }
+
+  free(buf);
+  *ret_magic = magic;
+  return eslOK;
+}
+
+
+#if 0
+/* we can't use mmap anyway; we have to be able to read from streams
+ * and pipes.
+ */
+static int
+benchmark_mmap(char *filename, int bufsize, int64_t *ret_magic)
+{
+  int   fd   = open(filename, O_RDONLY);
+  struct stat statbuf;
+  char *p;
+  uint64_t pos;
+  uint64_t magic = 0;
+ 
+  fstat(fd, &statbuf);
+  p = mmap(0, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
+  for (pos = 0; pos < statbuf.st_size; pos++)
+    magic += p[pos];
+
+  close(fd);
+  *ret_magic = magic;
+  return eslOK;
+}
+#endif  
+
+
+#endif /*eslSQIO_BENCHMARK*/
+/*------------------ end of benchmark ---------------------------*/
+
+
+
+/*****************************************************************
+ *#  10. Unit tests
+ *****************************************************************/ 
+#ifdef eslSQIO_TESTDRIVE
+#include "esl_random.h"
+#include "esl_randomseq.h"
+#include "esl_vectorops.h"
+
+static void
+synthesize_testseqs(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, int maxL, int N, ESL_SQ ***ret_sqarr)
+{
+  ESL_SQ **sqarr  = malloc(sizeof(ESL_SQ *) * N);
+  float   *fq     = malloc(sizeof(float)   * abc->Kp);
+  char    *buf    = NULL;
+  int      maxn   = eslSQ_NAMECHUNK*2;
+  int      maxa   = eslSQ_ACCCHUNK*2;
+  int      maxd   = eslSQ_DESCCHUNK*2;
+  char     ascii[128];
+  float    af[128];
+  int      i, pos;
+  int      n;
+  int      x;
+
+  n = ESL_MAX( maxn, ESL_MAX(maxa, maxd));
+  buf = malloc(sizeof(char) * (n+1));
+
+  /* Set a residue frequency vector that's going to sample degenerate residues too */
+  esl_vec_FSet(fq, abc->Kp, 0.0);
+  esl_vec_FSet(fq, abc->K,  0.9 / (float) abc->K);
+  esl_vec_FSet(fq + abc->K + 1, abc->Kp - abc->K - 2, 0.1 / (float) (abc->Kp - abc->K - 2));
+
+  /* Set an ASCII frequency vector that'll sample all nonspace chars */
+  for (x = 0; x < 128; x++) {
+    ascii[x] = (char) x;
+    if      (isalpha(x))             af[x] = 3.0;
+    else if (isdigit(x))             af[x] = 2.0;
+    else if (ispunct(x) && x != '%') af[x] = 1.0; /* disallow %; it'll screw up printf()-like Set calls */
+    else                             af[x] = 0.0;
+  }
+  esl_vec_FNorm(af, 128);
+
+  for (i = 0; i < N; i++)
+    {
+      if ((sqarr[i] = esl_sq_CreateDigital(abc)) == NULL) esl_fatal("failed to allocate seq %d", i);
+
+      do {
+	n = esl_rnd_Roll(r, maxn) + 1; /* 1..maxn */
+	esl_rsq_fIID(r, ascii, af, 128, n, buf);
+	buf[n] = '\0';
+      }	while (ispunct(buf[0])); /* #, // are bad things for names to start with, in Stockholm format */
+      esl_sq_SetName(sqarr[i], buf);
+
+      if (esl_rnd_Roll(r, 2) == 0) { /* 50% chance of an accession */
+	n = esl_rnd_Roll(r, maxa) + 1; 
+	esl_rsq_fIID(r, ascii, af, 128, n, buf);
+	buf[n] = '\0';
+	esl_sq_SetAccession(sqarr[i], buf);
+      }
+
+      if (esl_rnd_Roll(r, 2) == 0) { /* 50% chance of a description */
+	n = esl_rnd_Roll(r, maxd) + 1;
+	esl_rsq_fIID(r, ascii, af, 128, n, buf);
+	buf[n] = '\0';
+	for (pos = 1; pos < n-1; pos++) {                 /* avoid first, last char, and... */
+	  if (esl_rnd_Roll(r, 10)  == 0) buf[pos] = ' ';  /* ...sprinkle with spaces... */
+	  if (esl_rnd_Roll(r, 100) == 0) buf[pos] = '\t'; /* ...and tabs. */
+	}
+	esl_sq_SetDesc(sqarr[i], buf);
+      }
+
+      n = esl_rnd_Roll(r, (maxL+1)); /* choose seqlen =  0..maxL; 0 length seqs occur in real dbs */
+      esl_sq_GrowTo(sqarr[i], n);
+      esl_rsq_xfIID(r, fq, abc->Kp, n, sqarr[i]->dsq);
+
+      esl_sq_SetCoordComplete(sqarr[i], n);
+    }
+
+  *ret_sqarr = sqarr;
+  free(buf);
+  free(fq);
+  return;
+}
+
+/* Write an uglified FASTA file to a stream.
+ * Also, remember where the start of the descline and first
+ * seq line are, in sq->{roff,doff}. We'll compare against
+ * what the input function thinks these locations are.
+ */
+static void
+write_ugly_fasta(ESL_RANDOMNESS *r, FILE *fp, ESL_SQ *sq)
+{
+  char buf[61];
+  int  pos;
+  
+  sq->roff = ftello(fp);
+  fputc('>', fp);
+  while (esl_rnd_Roll(r, 10) == 0) fputc(' ', fp);
+  fprintf(fp, "%s", sq->name);
+  while (esl_rnd_Roll(r, 10) == 0) fputc(' ', fp);
+  if (sq->desc[0] != 0) fprintf(fp, " %s", sq->desc);
+  fputc('\n', fp);
+
+  sq->doff = ftello(fp);
+  buf[60] = '\0';
+  for (pos = 1; pos <= sq->n; pos+=60)
+    {
+      while (esl_rnd_Roll(r, 10) == 0) fputc(' ', fp);
+      esl_abc_TextizeN(sq->abc, sq->dsq+pos, 60, buf);
+      fputs(buf, fp);
+      fputc('\n', fp);
+    }
+  while (esl_rnd_Roll(r, 10) == 0) fputc('\n', fp);
+  sq->eoff = ftello(fp) - 1;
+}
+
+static void
+write_spaced_fasta(FILE *fp, ESL_SQ *sq)
+{
+  char buf[64];
+  int  pos;
+
+  sq->roff = ftello(fp);
+  fprintf(fp, ">%s", sq->name);
+  if (sq->desc[0] != 0) fprintf(fp, " %s", sq->desc);
+  fputc('\n', fp);
+
+  sq->doff = ftello(fp);
+  buf[10]  = '\0';
+  for (pos = 1; pos <= sq->n; pos += 10)
+    {
+      esl_abc_TextizeN(sq->abc, sq->dsq+pos, 10, buf);
+      fputs(buf, fp);
+      if (pos+9 >= sq->n || (pos+9) % 60 == 0) fputc('\n',  fp);
+      else                                     fputc(' ', fp);
+    }
+  sq->eoff = ftello(fp) - 1;
+}
+
+
+static void
+make_ssi_index(ESL_ALPHABET *abc, const char *tmpfile, int format, char *ssifile, int mode)
+{ 
+  char       *msg  = "sqio unit testing: failed to make SSI index";
+  ESL_NEWSSI *ns   = NULL;
+  ESL_SQFILE *sqfp = NULL;
+  ESL_SQ     *sq   = esl_sq_CreateDigital(abc);
+  uint16_t    fh   = 0;
+  int         nseq = 0;
+  int         status;
+
+  int         bpl, rpl;
+ 
+  sprintf(ssifile, "%s.ssi", tmpfile);
+  if (esl_newssi_Open(ssifile, TRUE, &ns)                       != eslOK) esl_fatal(msg);
+  if (esl_newssi_AddFile(ns, tmpfile, format, &fh)              != eslOK) esl_fatal(msg);
+  if (esl_sqfile_OpenDigital(abc, tmpfile, format, NULL, &sqfp) != eslOK) esl_fatal(msg);
+  while ((status = esl_sqio_ReadInfo(sqfp, sq)) == eslOK)
+    {
+      nseq++;
+      if (esl_newssi_AddKey(ns, sq->name, fh, sq->roff, sq->doff, sq->L)   != eslOK) esl_fatal(msg);
+      if (sq->acc[0] != '\0' && esl_newssi_AddAlias(ns, sq->acc, sq->name) != eslOK) esl_fatal(msg);
+      esl_sq_Reuse(sq);
+    }
+  if (status != eslEOF) esl_fatal(msg);
+  
+  bpl = sqfp->data.ascii.bpl;
+  rpl = sqfp->data.ascii.rpl;
+  if (bpl > 0 && rpl > 0) 
+    if ((status = esl_newssi_SetSubseq(ns, fh, bpl, rpl)) != eslOK) esl_fatal(msg);
+  
+  if (esl_newssi_Write(ns)        != eslOK)  esl_fatal(msg);
+
+  bpl = sqfp->data.ascii.bpl;
+  rpl = sqfp->data.ascii.rpl;
+
+  switch (mode) {
+  case 0:  if (bpl != 0)                     esl_fatal(msg); break; /* uglified: bpl should be invalid (rpl might not be) */
+  case 1:  if (rpl != 60 || bpl == 0)  esl_fatal(msg); break; /* spaced: bpl, rpl should be valid */
+  case 2:  if (rpl != 60 || bpl != 61) esl_fatal(msg); break; /* normal: bpl, rpl should be valid, w/ bpl=rpl+1 */
+  }
+
+  esl_sqfile_Close(sqfp);
+  esl_newssi_Close(ns);
+  esl_sq_Destroy(sq);
+}
+
+static void
+utest_read(ESL_ALPHABET *abc, ESL_SQ **sqarr, int N, char *seqfile, int format, int mode)
+{
+  char       *msg         = "sqio complete read unit test failed";
+  ESL_SQ     *sq          = esl_sq_CreateDigital(abc);
+  ESL_SQFILE *sqfp        = NULL;
+  int         nseq        = 0;
+  int         status;
+  
+  int         bpl, rpl;
+ 
+  if (esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp) != eslOK) esl_fatal(msg);
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+    {
+      /* FASTA doesn't preserve accessions. Copy it, as a hack, so Compare test succeeds*/
+      if (sq->acc[0] == '\0' && esl_sq_SetAccession(sq, sqarr[nseq]->acc) != eslOK) esl_fatal(msg);
+      if (esl_sq_Compare(sq, sqarr[nseq])                                 != eslOK) esl_fatal(msg);      
+      nseq++;
+      esl_sq_Reuse(sq);
+    }
+  if (status != eslEOF) esl_fatal(msg);
+  if (nseq   != N)      esl_fatal(msg);
+
+  bpl = sqfp->data.ascii.bpl;
+  rpl = sqfp->data.ascii.rpl;
+
+  switch (mode) {
+  case 0:  if (bpl != 0)                     esl_fatal(msg); break; /* uglified: bpl should be invalid (rpl might not be) */
+  case 1:  if (rpl != 60 || bpl == 0)  esl_fatal(msg); break; /* spaced: bpl, rpl should be valid */
+  case 2:  if (rpl != 60 || bpl != 61) esl_fatal(msg); break; /* normal: bpl, rpl should be valid, w/ bpl=rpl+1 */
+  }
+
+  esl_sqfile_Close(sqfp);
+  esl_sq_Destroy(sq);
+}
+
+static void
+utest_read_info(ESL_ALPHABET *abc, ESL_SQ **sqarr, int N, char *seqfile, int format, int mode)
+{
+  char       *msg         = "sqio info read unit test failed";
+  ESL_SQ     *sq          = esl_sq_CreateDigital(abc);
+  ESL_SQFILE *sqfp        = NULL;
+  int         nseq        = 0;
+  int         status;
+  
+  int         bpl, rpl;
+ 
+  if (esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp) != eslOK) esl_fatal(msg);
+  while ((status = esl_sqio_ReadInfo(sqfp, sq)) == eslOK)
+    {
+      if (strcmp(sq->name,   sqarr[nseq]->name)   != 0) esl_fatal(msg);
+      if (format != eslSQFILE_FASTA && 
+	  strcmp(sq->acc,    sqarr[nseq]->acc)    != 0) esl_fatal(msg);
+      if (strcmp(sq->desc,   sqarr[nseq]->desc)   != 0) esl_fatal(msg);
+      if (strcmp(sq->source, sqarr[nseq]->source) != 0) esl_fatal(msg);
+      if (sq->n     != 0)  esl_fatal(msg);
+      if (sq->start != 0)  esl_fatal(msg);
+      if (sq->end   != 0)  esl_fatal(msg);
+      if (sq->C     != 0)  esl_fatal(msg);
+      if (sq->W     != 0)  esl_fatal(msg);
+      if (sq->L     != sqarr[nseq]->L)                  esl_fatal(msg);
+      if (sq->roff != -1 && sqarr[nseq]->roff != -1 && sq->roff != sqarr[nseq]->roff) esl_fatal(msg);
+      if (sq->doff != -1 && sqarr[nseq]->doff != -1 && sq->doff != sqarr[nseq]->doff) esl_fatal(msg);
+  
+      nseq++;
+      esl_sq_Reuse(sq);
+    }
+  if (status != eslEOF) esl_fatal(msg);
+  if (nseq   != N)      esl_fatal(msg);
+
+  bpl = sqfp->data.ascii.bpl;
+  rpl = sqfp->data.ascii.rpl;
+
+  switch (mode) {
+  case 0:  if (bpl != 0)                     esl_fatal(msg); break; /* uglified: bpl should be invalid (rpl might not be) */
+  case 1:  if (rpl != 60 || bpl == 0)  esl_fatal(msg); break; /* spaced: bpl, rpl should be valid */
+  case 2:  if (rpl != 60 || bpl != 61) esl_fatal(msg); break; /* normal: bpl, rpl should be valid, w/ bpl=rpl+1 */
+  }
+
+  esl_sqfile_Close(sqfp);
+  esl_sq_Destroy(sq);
+}
+
+static void
+utest_read_window(ESL_ALPHABET *abc, ESL_SQ **sqarr, int N, char *seqfile, int format, int mode)
+{
+  char       *msg         = "sqio window read unit test failed";
+  ESL_SQ     *sq          = esl_sq_CreateDigital(abc);
+  ESL_SQ     *rev         = esl_sq_CreateDigital(abc);
+  ESL_SQFILE *sqfp        = NULL;
+  int         nseq        = 0;
+  int         C           = 10;
+  int         W           = 50;
+  int         nres        = 0;
+  int         wstatus;
+
+  int         bpl, rpl, L;
+ 
+  if (esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp) != eslOK) esl_fatal(msg);
+  while ((wstatus = esl_sqio_ReadWindow(sqfp, C, W, sq)) == eslOK || wstatus == eslEOD)
+    {
+      if (wstatus == eslEOD) {
+	if (W < 0) {
+	  nseq++; 
+	  nres = 0;
+	  W    = -W;
+	  esl_sq_Reuse(sq); 
+	  esl_sq_Reuse(rev);
+	} else       {
+	  /* reverse complement */
+	  nres = 0;
+	  W    = -W; 	
+	  esl_sq_Copy(sqarr[nseq], rev);
+	  esl_sq_ReverseComplement(rev);
+	}
+	continue;
+      }
+
+      nres += sq->W;
+      if (strcmp(sq->name,   sqarr[nseq]->name)   != 0) esl_fatal(msg);
+      if (format != eslSQFILE_FASTA && 
+	  strcmp(sq->acc,    sqarr[nseq]->acc)    != 0) esl_fatal(msg);
+      if (strcmp(sq->desc,   sqarr[nseq]->desc)   != 0) esl_fatal(msg);
+
+      L = sqfp->data.ascii.L;
+
+      if (W > 0) {
+	/* Forward strand coord checks */
+	if (L   != nres)                                esl_fatal(msg);
+	if (sq->start != nres - sq->n + 1)              esl_fatal(msg);
+	if (sq->end   != nres)                          esl_fatal(msg);
+	if (sq->C != 0 && sq->C != C)                   esl_fatal(msg);
+	if (sq->n != sq->C+sq->W)                       esl_fatal(msg);
+	if (sq->start+sq->n-1 > sqarr[nseq]->L)         esl_fatal(msg);
+	if (wstatus == eslEOD && sq->L != L)            esl_fatal(msg);
+	if (memcmp(sq->dsq + 1, sqarr[nseq]->dsq + sq->start, sq->C+sq->W) != 0) esl_fatal(msg);
+      } else {
+	/* Reverse strand coord checks */
+	if (L    != -1)                                 esl_fatal(msg);
+	if (sq->start  != sq->L - nres + sq->W + sq->C) esl_fatal(msg);
+	if (sq->end    != sq->L - nres + 1)             esl_fatal(msg);
+	if (sq->C != 0 && sq->C != C)                   esl_fatal(msg);
+	if (sq->start-sq->n+1 < 1)                      esl_fatal(msg);
+	if (wstatus == eslEOD && sq->end != 1)          esl_fatal(msg);
+	if (memcmp(sq->dsq + 1, rev->dsq + (sq->L - sq->start + 1), sq->C+sq->W) != 0) esl_fatal(msg);
+      }
+    }
+
+  bpl = sqfp->data.ascii.bpl;
+  rpl = sqfp->data.ascii.rpl;
+
+  switch (mode) {
+  case 0:  if (bpl != 0)                     esl_fatal(msg); break; /* uglified: bpl should be invalid (rpl might not be) */
+  case 1:  if (rpl != 60 || bpl == 0)  esl_fatal(msg); break; /* spaced: bpl, rpl should be valid */
+  case 2:  if (rpl != 60 || bpl != 61) esl_fatal(msg); break; /* normal: bpl, rpl should be valid, w/ bpl=rpl+1 */
+  }
+
+  if (wstatus != eslEOF) esl_fatal(msg);
+  if (nseq    != N)      esl_fatal(msg);
+  esl_sqfile_Close(sqfp);
+  esl_sq_Destroy(rev);
+  esl_sq_Destroy(sq);
+}
+
+static void
+utest_fetch_subseq(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, ESL_SQ **sqarr, int N, char *seqfile, char *ssifile, int format)
+{
+  char       *msg         = "sqio subseq read unit test failure";
+  ESL_SQ     *sq          = esl_sq_CreateDigital(abc);
+  ESL_SQFILE *sqfp        = NULL;
+  int         i;
+  int         ntest       = 32;
+  char       *source;
+  int         start;
+  int         end;
+
+  if (esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp) != eslOK) esl_fatal(msg);
+  if (esl_sqfile_OpenSSI(sqfp, ssifile)                         != eslOK) esl_fatal(msg);
+  while (ntest--) 
+    {
+      i = esl_rnd_Roll(r, N);
+      source = sqarr[i]->name; 
+      
+      do {
+	start = esl_rnd_Roll(r, sqarr[i]->n) + 1;
+	end   = esl_rnd_Roll(r, sqarr[i]->n) + 1;
+      } while (start > end);
+
+      if (esl_sqio_FetchSubseq(sqfp, source, start, end, sq)        != eslOK) esl_fatal(msg);
+      if (memcmp(&(sqarr[i]->dsq[start]), &sq->dsq[1], end-start+1) != 0)     esl_fatal(msg);
+      
+      esl_sq_Reuse(sq);
+    }
+
+  esl_sqfile_Close(sqfp);
+  esl_sq_Destroy(sq);
+}
+
+
+/* Write the sequences out to a tmpfile in chosen <format>;
+ * read them back and make sure they're the same.
+ * reposition to beginning, read and check again.
+ *
+ * The sequences in <sqarr> are in digital mode.
+ */
+static void
+utest_write(ESL_ALPHABET *abc, ESL_SQ **sqarr, int N, int format)
+{
+  char       *msg         = "sqio write unit test failure";
+  char        tmpfile[32] = "esltmpXXXXXX";
+  ESL_SQFILE *sqfp        = NULL;
+  ESL_SQ     *sq          = esl_sq_CreateDigital(abc);
+  FILE       *fp          = NULL;
+  int         iterations  = 2;	/* 2: reposition and read again */
+  int         i;
+
+  if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg);
+  for (i = 0; i < N; i++)
+    esl_sqio_Write(fp, sqarr[i], format, FALSE);
+  fclose(fp);
+
+  if (esl_sqfile_OpenDigital(abc, tmpfile, format, NULL, &sqfp)           != eslOK)  esl_fatal(msg);
+  while (iterations--)
+    {
+      for (i = 0; i < N; i++)
+	{
+	  if (esl_sqio_Read(sqfp, sq)                                     != eslOK)  esl_fatal(msg);
+	  if (strcmp(sqarr[i]->name,   sq->name)                          != 0)      esl_fatal(msg);
+	  if (sqarr[i]->L                                                 !=  sq->L) esl_fatal(msg);
+	  if (memcmp(sqarr[i]->dsq, sq->dsq, sizeof(ESL_DSQ) * (sq->L+2)) != 0)      esl_fatal(msg);
+	  esl_sq_Reuse(sq);
+	}
+      esl_sqfile_Position(sqfp, 0); /* rewind and make sure we get same reads again */
+    }
+  esl_sqfile_Close(sqfp);
+  esl_sq_Destroy(sq);
+  remove(tmpfile);
+}
+#endif /*eslSQIO_TESTDRIVE*/
+/*------------------ end, unit tests ----------------------------*/
+
+
+
+/*****************************************************************
+ *# 11. Test driver.
+ *****************************************************************/
+
+/* gcc -g -Wall -I. -L. -o sqio_utest -DeslSQIO_TESTDRIVE esl_sqio.c -leasel -lm
+ * ./sqio_utest
+ */
+#ifdef eslSQIO_TESTDRIVE
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_randomseq.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-L",        eslARG_INT,   "1000",  NULL, NULL,  NULL,  NULL, NULL, "max length of test sequences",                     0 },
+  { "-N",        eslARG_INT,    "100",  NULL, NULL,  NULL,  NULL, NULL, "number of test sequences",                         0 },
+  { "-s",        eslARG_INT,     "42",  NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                    0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for sqio module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go       = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_ALPHABET   *abc      = esl_alphabet_Create(eslDNA); /* DNA because some chars aren't legal in IUPAC DNA */
+  ESL_RANDOMNESS *r        = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  ESL_SQ        **sqarr    = NULL;
+  int             maxL     = esl_opt_GetInteger(go, "-L");
+  int             N        = esl_opt_GetInteger(go, "-N");
+  int             i;
+  int             mode;
+  char            tmpfile[32];
+  char            ssifile[32];
+  FILE           *fp       = NULL;
+  char            c;
+
+  /* Create an array of sequences we'll use for all the tests */
+  synthesize_testseqs(r, abc, maxL, N, &sqarr);
+
+  for (mode = 0; mode < 3; mode++) /* 0=ugly 1=spaced 2=normal*/
+    {
+      /* Write FASTA file to disk, and SSI index it */
+      strcpy(tmpfile, "esltmpXXXXXX");
+      if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal("failed to make tmpfile");
+      switch (mode) {
+      case 0: for (i = 0; i < N; i++) write_ugly_fasta(r, fp, sqarr[i]); break;
+      case 1: for (i = 0; i < N; i++) write_spaced_fasta(fp, sqarr[i]);  break;
+      case 2:
+	for (i = 0; i < N; i++) {
+	  c = sqarr[i]->acc[0];	/* hack: hide the accession, so digital writer doesn't write it. */
+	  sqarr[i]->acc[0] = '\0';
+	  esl_sqio_Write(fp, sqarr[i], eslSQFILE_FASTA, TRUE); 
+	  sqarr[i]->acc[0] = c;
+	}
+	break;
+      }
+      fclose(fp);
+      make_ssi_index(abc, tmpfile, eslSQFILE_FASTA, ssifile, mode);
+
+      utest_read        (abc, sqarr, N, tmpfile, eslSQFILE_FASTA, mode);
+      utest_read_info   (abc, sqarr, N, tmpfile, eslSQFILE_FASTA, mode);
+      utest_read_window (abc, sqarr, N, tmpfile, eslSQFILE_FASTA, mode);
+      utest_fetch_subseq(r, abc, sqarr, N, tmpfile, ssifile, eslSQFILE_FASTA);
+
+      remove(tmpfile);
+      remove(ssifile);
+    }  
+
+  utest_write(abc, sqarr, N, eslMSAFILE_STOCKHOLM);
+
+  for (i = 0; i < N; i++) esl_sq_Destroy(sqarr[i]);
+  free(sqarr);
+  esl_randomness_Destroy(r);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslSQIO_TESTDRIVE*/
+/*------------------ end, test driver ---------------------------*/
+
+
+
+/*****************************************************************
+ *# 12. Examples
+ *****************************************************************/
+/* The last example in a file is always the most useful example;
+ * so you can M-> to it immediately.
+ *    example3 = using esl_sqio_Parse()
+ *    example2 = simplest, text mode
+ *    example  = standard idiom for digital seqfile reading
+ */
+
+
+#ifdef eslSQIO_EXAMPLE3
+/*::cexcerpt::sqio_example_parse::begin::*/
+/* Example of using esl_sqio_Parse() to parse a buffer
+ *  cc -g -Wall -I. -L. -o esl_sqio_example3 -DeslSQIO_EXAMPLE3 esl_sqio.c -leasel -lm
+ *  ./esl_sqio_example3
+ */
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+int
+main(void)
+{
+  ESL_ALPHABET *abc       = NULL;
+  ESL_SQ       *sq        = NULL;
+  int           format    = eslSQFILE_FASTA;
+  int           alphatype = eslAMINO;
+  int           status;
+
+  char *test = ">12345 TEST Test fasta buffer\n"
+               "ARVAPVALPSACAPAGTQCLISGWGNTLSNGVNNPDLLQCVDAPVLSQADCEAAYPGEIT\n"
+               "SSMICVGFLEGGKDSCQGDSGGPVVCNGQLQGIVSWGYGCALPDNPGVYTKVCNFVGWIQ\n"
+               "DTIAAN";
+
+  abc = esl_alphabet_Create(alphatype);
+  sq  = esl_sq_CreateDigital(abc);
+
+  status = esl_sqio_Parse(test, strlen(test), sq, format);
+  if      (status == eslEFORMAT) esl_fatal("Parse failed, invalid format");
+  else if (status != eslOK)      esl_fatal("Unexpected error %d", status);
+
+  esl_sq_Destroy(sq);
+  esl_alphabet_Destroy(abc);
+  return 0;
+}
+/*::cexcerpt::sqio_example_parse::end::*/
+#endif /*eslSQIO_EXAMPLE3*/
+
+
+#ifdef eslSQIO_EXAMPLE2
+/*::cexcerpt::sqio_example_text::begin::*/
+/* cc -g -Wall -I. -L. -o esl_sqio_example2 -DeslSQIO_EXAMPLE2 esl_sqio.c -leasel -lm
+ * ./esl_sqio_example2 <FASTA file>
+ */
+#include "easel.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_SQ     *sq      = esl_sq_Create();
+  ESL_SQFILE *sqfp;
+  int         format  = eslSQFILE_FASTA;
+  char       *seqfile = argv[1];
+  int         status;
+
+  status = esl_sqfile_Open(seqfile, format, NULL, &sqfp);
+  if      (status == eslENOTFOUND) esl_fatal("No such file.");
+  else if (status == eslEFORMAT)   esl_fatal("Format unrecognized.");
+  else if (status != eslOK)        esl_fatal("Open failed, code %d.", status);
+
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+  {     /* use each sequence for whatever you want */
+    printf("%-40s length: %8ld   desclen: %lu\n", sq->name, (long) sq->L, strlen(sq->desc));
+    esl_sq_Reuse(sq);
+  }
+  if      (status == eslEFORMAT) esl_fatal("Parse failed\n  %s", esl_sqfile_GetErrorBuf(sqfp));
+  else if (status != eslEOF)     esl_fatal("Unexpected read error %d", status);
+  
+  esl_sq_Destroy(sq);
+  esl_sqfile_Close(sqfp);
+  return 0;
+}
+/*::cexcerpt::sqio_example_text::end::*/
+#endif /*eslSQIO_EXAMPLE2*/
+
+
+
+
+#ifdef eslSQIO_EXAMPLE
+/*::cexcerpt::sqio_example_digital::begin::*/
+/* Example showing standard idiom for opening sequence file, digital mode.
+ *  cc -g -Wall -I. -L. -o esl_sqio_example -DeslSQIO_EXAMPLE esl_sqio.c -leasel -lm
+ *  ./esl_sqio_example <sequence file>
+ */
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+static ESL_OPTIONS options[] = {
+  /* name          type       default  env  range toggles reqs incomp  help         docgroup */
+ { "-h",          eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help",    0 },
+ { "--dna",       eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "use DNA alphabet",   0 },
+ { "--rna",       eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "use RNA alphabet",   0 },
+ { "--amino",     eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "use amino alphabet", 0 },
+ { "--informat",  eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "set input format",   0 },
+ {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <seqfile>";
+static char banner[] = "example of reading in standard sqio idiom, digital mode";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go        = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char         *seqfile   = esl_opt_GetArg(go, 1);
+  ESL_ALPHABET *abc       = NULL;
+  ESL_SQ       *sq        = NULL;
+  ESL_SQFILE   *sqfp      = NULL;
+  int           infmt     = eslSQFILE_UNKNOWN;
+  int           alphatype = eslUNKNOWN;
+  int           status;
+
+  if (esl_opt_IsOn(go, "--informat")) {
+    if ((infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat")))==eslSQFILE_UNKNOWN)
+      esl_fatal("%s is not a valid input sequence file format for --informat"); 
+  }
+
+  status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp);
+  if      (status == eslENOTFOUND) esl_fatal("No such file.");
+  else if (status == eslEFORMAT)   esl_fatal("Format couldn't be determined.");
+  else if (status != eslOK)        esl_fatal("Open failed, code %d.", status);
+
+  if      (esl_opt_GetBoolean(go, "--rna"))   alphatype = eslRNA;
+  else if (esl_opt_GetBoolean(go, "--dna"))   alphatype = eslDNA;
+  else if (esl_opt_GetBoolean(go, "--amino")) alphatype = eslAMINO;
+  else {
+    status = esl_sqfile_GuessAlphabet(sqfp, &alphatype);
+    if      (status == eslENOALPHABET)  esl_fatal("Couldn't guess alphabet");
+    else if (status == eslEFORMAT)      esl_fatal("Parse failed\n  %s",
+						  esl_sqfile_GetErrorBuf(sqfp));     
+    else if (status == eslENODATA)      esl_fatal("Sequence file empty?");
+    else if (status != eslOK)           esl_fatal("Unexpected error guessing alphabet");
+  }
+  abc = esl_alphabet_Create(alphatype);
+  sq  = esl_sq_CreateDigital(abc);
+  esl_sqfile_SetDigital(sqfp, abc);
+
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+    {  
+      esl_sqio_Write(stdout, sq, eslSQFILE_FASTA, /*update=*/FALSE);
+      esl_sq_Reuse(sq);
+    }
+  if      (status == eslEFORMAT) esl_fatal("Parse failed\n  %s", esl_sqfile_GetErrorBuf(sqfp));
+  else if (status != eslEOF)     esl_fatal("Unexpected error %d in reading", status);
+  
+  esl_sqfile_Close(sqfp);
+  esl_sq_Destroy(sq);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+/*::cexcerpt::sqio_example_digital::end::*/
+#endif /*eslSQIO_EXAMPLE*/
+
+
diff --git a/esl_sqio.h b/esl_sqio.h
new file mode 100644
index 0000000..899da98
--- /dev/null
+++ b/esl_sqio.h
@@ -0,0 +1,189 @@
+/* sqio: unaligned sequence file i/o.
+ * 
+ * To do: 
+ *   :: esl_sqio_* vs. esl_sqfile_* prefixing is inconsistent,
+ *      for historical reasons. Fix.
+ *
+ *   :: Write tests for bad format detection, making sure that
+ *      linenumber report is correct.
+ */
+#ifndef eslSQIO_INCLUDED
+#define eslSQIO_INCLUDED
+
+#include <stdio.h>
+
+#include "esl_sqio_ascii.h"
+#ifdef eslAUGMENT_NCBI
+#include "esl_sqio_ncbi.h"
+#endif
+#include "esl_sq.h"
+
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"
+#endif
+#ifdef eslAUGMENT_MSA
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#endif
+
+/*::cexcerpt::sq_sqio_data::begin::*/
+/* ESL_SQDATA:
+ * Data for different sequence formats.
+ */
+typedef union {
+  ESL_SQASCII_DATA ascii;
+#ifdef eslAUGMENT_NCBI
+  ESL_SQNCBI_DATA  ncbi;
+#endif
+} ESL_SQDATA;
+/*::cexcerpt::sq_sqio_data::end::*/
+
+/* ESL_SQFILE:
+ * An open sequence file for reading.
+ */
+typedef struct esl_sqio_s {
+  char *filename;	      /* Name of file (for diagnostics)           */
+
+  /* In digital mode, we have an alphabet ptr                             */
+  int   do_digital;	      /* TRUE if we're reading in digital mode    */
+#if defined(eslAUGMENT_ALPHABET)  
+  const ESL_ALPHABET *abc;
+#else
+  void               *abc;
+#endif
+
+  /* Format-specific configuration                                        */
+  int     format;	      /* Format code of this file                 */
+  ESL_DSQ inmap[128];	      /* an input map, 0..127                     */
+
+  /* function pointers to format specific routines                        */
+  int   (*position)        (struct esl_sqio_s *sqfp, off_t offset);
+  void  (*close)           (struct esl_sqio_s *sqfp);
+
+  int   (*set_digital)     (struct esl_sqio_s *sqfp, const ESL_ALPHABET *abc);
+  int   (*guess_alphabet)  (struct esl_sqio_s *sqfp, int *ret_type);
+
+  int   (*read)            (struct esl_sqio_s *sqfp, ESL_SQ *sq);
+  int   (*read_info)       (struct esl_sqio_s *sqfp, ESL_SQ *sq);
+  int   (*read_seq)        (struct esl_sqio_s *sqfp, ESL_SQ *sq);
+  int   (*read_window)     (struct esl_sqio_s *sqfp, int C, int W, ESL_SQ *sq);
+  int   (*echo)            (struct esl_sqio_s *sqfp, const ESL_SQ *sq, FILE *ofp);
+
+  int   (*read_block)      (struct esl_sqio_s *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target);
+
+#ifdef eslAUGMENT_SSI
+  int   (*open_ssi)        (struct esl_sqio_s *sqfp, const char *ssifile_hint);
+  int   (*pos_by_key)      (struct esl_sqio_s *sqfp, const char *key);
+  int   (*pos_by_number)   (struct esl_sqio_s *sqfp, int which);
+
+  int   (*fetch)           (struct esl_sqio_s *sqfp, const char *key, ESL_SQ *sq);
+  int   (*fetch_info)      (struct esl_sqio_s *sqfp, const char *key, ESL_SQ *sq);
+  int   (*fetch_subseq)    (struct esl_sqio_s *sqfp, const char *source, int64_t start, int64_t end, ESL_SQ *sq);
+#endif
+
+  int   (*is_rewindable)   (const struct esl_sqio_s *sqfp);
+  const char *(*get_error) (const struct esl_sqio_s *sqfp);
+
+  ESL_SQDATA data;            /* format specific data                     */
+} ESL_SQFILE;
+
+#if defined(eslAUGMENT_ALPHABET)  
+/* ESL_SQCACHE:
+ * A entire database cached into memory.
+ */
+typedef struct esl_sqcache_s {
+  char               *filename;    /* Name of file (for diagnostics)              */
+  int                 format;      /* Format code of this file                    */
+
+  const ESL_ALPHABET *abc;         /* alphabet for database                       */
+
+  uint32_t            seq_count;   /* number of sequences                         */
+  uint64_t            res_count;   /* number of residues                          */
+  uint32_t            max_seq;     /* longest sequence                            */
+
+  ESL_SQ             *sq_list;     /* list of cached sequences [0 .. seq_count-1] */
+
+  void               *residue_mem; /* memory holding the residues                 */
+  void               *header_mem;  /* memory holding the header strings           */
+
+  uint64_t            res_size;    /* size of residue memory allocation           */
+  uint64_t            hdr_size;    /* size of header memory allocation            */
+} ESL_SQCACHE;
+#endif
+
+/*::cexcerpt::sq_sqio_format::begin::*/
+/* Unaligned file format codes
+ * These codes are coordinated with the msa module.
+ *   - 0 is an unknown/unassigned format (eslSQFILE_UNKNOWN, eslMSAFILE_UNKNOWN)
+ *   - <=100 is reserved for sqio, for unaligned formats
+ *   - >100  is reserved for msa, for aligned formats
+ */
+#define eslSQFILE_UNKNOWN      0
+#define eslSQFILE_FASTA        1   // FASTA format
+#define eslSQFILE_EMBL         2   // EMBL DNA sequence
+#define eslSQFILE_GENBANK      3   // Genbank DNA sequence
+#define eslSQFILE_DDBJ         4   // DDBJ (currently identical to GenBank parser)
+#define eslSQFILE_UNIPROT      5   // UniProt (currently identical to EMBL parser) 
+#define eslSQFILE_NCBI         6   // NCBI blast db, v4, single file
+#define eslSQFILE_DAEMON       7   // Farrar format, hmmpgmd queries: fasta + // terminator 
+#define eslSQFILE_HMMPGMD      8   // Farrar hmmpgmd database format: fasta + # header 
+#define eslSQFILE_FMINDEX      9   // Pressed FM-index format used in HMMER
+/*::cexcerpt::sq_sqio_format::end::*/
+
+
+/* eslREADBUFSIZE is the fixed size of a block to bring in at one time,
+ * in character-based (fread()) parsers (like the FASTA parser).
+ */
+#define eslREADBUFSIZE  4096
+
+extern int  esl_sqfile_Open(const char *seqfile, int fmt, const char *env, ESL_SQFILE **ret_sqfp);
+extern void esl_sqfile_Close(ESL_SQFILE *sqfp);
+
+#ifdef eslAUGMENT_ALPHABET
+extern int  esl_sqfile_OpenDigital(const ESL_ALPHABET *abc, const char *filename, int format, const char *env, ESL_SQFILE **ret_sqfp);
+extern int  esl_sqfile_SetDigital(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc);
+extern int  esl_sqfile_GuessAlphabet(ESL_SQFILE *sqfp, int *ret_type);
+#endif
+
+extern int   esl_sqio_Read        (ESL_SQFILE *sqfp, ESL_SQ *sq);
+extern int   esl_sqio_ReadInfo    (ESL_SQFILE *sqfp, ESL_SQ *sq);
+extern int   esl_sqio_ReadWindow  (ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq);
+extern int   esl_sqio_ReadSequence(ESL_SQFILE *sqfp, ESL_SQ *sq);
+extern int   esl_sqio_ReadBlock   (ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target);
+extern int   esl_sqio_Parse       (char *buffer, int size, ESL_SQ *s, int format);
+
+extern int   esl_sqio_Write       (FILE *fp, ESL_SQ *s, int format, int update);
+extern int   esl_sqio_Echo        (ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp);
+
+const char  *esl_sqfile_GetErrorBuf(const ESL_SQFILE *sqfp);
+extern int   esl_sqfile_IsRewindable(const ESL_SQFILE *sqfp);
+extern int   esl_sqio_IsAlignment(int fmt);
+extern int   esl_sqio_EncodeFormat(char *fmtstring);
+extern char *esl_sqio_DecodeFormat(int fmt);
+extern int   esl_sqfile_Position(ESL_SQFILE *sqfp, off_t offset);
+extern int   esl_sqio_Ignore(ESL_SQFILE *sqfp, const char *ignoredchars);
+extern int   esl_sqio_AcceptAs(ESL_SQFILE *sqfp, char *xchars, char readas);
+
+#ifdef eslAUGMENT_SSI
+extern int   esl_sqfile_OpenSSI         (ESL_SQFILE *sqfp, const char *ssifile_hint);
+extern int   esl_sqfile_PositionByKey   (ESL_SQFILE *sqfp, const char *key);
+extern int   esl_sqfile_PositionByNumber(ESL_SQFILE *sqfp, int which);
+
+extern int   esl_sqio_Fetch      (ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq);
+extern int   esl_sqio_FetchInfo  (ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq);
+extern int   esl_sqio_FetchSubseq(ESL_SQFILE *sqfp, const char *source, int64_t start, int64_t end, ESL_SQ *sq);
+#endif
+
+extern int   esl_sqfile_Cache(const ESL_ALPHABET *abc, const char *seqfile, int fmt, const char *env, ESL_SQCACHE **ret_sqcache);
+extern void  esl_sqfile_Free(ESL_SQCACHE *sqcache);
+
+
+
+
+
+
+
+#endif /*eslSQIO_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_sqio.tex b/esl_sqio.tex
new file mode 100644
index 0000000..d3fb3d3
--- /dev/null
+++ b/esl_sqio.tex
@@ -0,0 +1,281 @@
+The \eslmod{sqio} module handles input from unaligned sequence data
+files, such as FASTA files.
+
+\eslmod{sqio} can automatically recognize and parse several different
+file formats, including FASTA, UniProt, Genbank, DDBJ, and EMBL.
+Additionally, it can read individual unaligned sequences from multiple
+alignment files in several different formats, including Stockholm,
+Clustal, aligned FASTA, PSI-BLAST, and Phylip.\footnote{Sequential
+  input from MSA files requires either the full Easel library or
+  augmentation with \eslmod{msafile}.}
+
+Sequences can be read from normal files, directly from the
+\ccode{stdin} pipe, or from \ccode{gzip}-compressed files.
+
+Sequence files can be automatically looked for in a list of one or
+more database directories, specified by an environment variable (such
+as \ccode{HMMERDB}).
+
+Table~\ref{tbl:sqio_api} lists the functions in the \eslmod{sqio} API.
+The module uses an \ccode{ESL\_SQFILE} object which works much like an
+ANSI C \ccode{FILE}, maintaining information for an open sequence file
+while it's being read.
+
+% API table is auto generated by the Makefile,
+% using autodoc -t esl_sqio.c 
+%
+\input{apitables/esl_sqio_api}
+
+
+
+\subsection{Example: reading sequences from a file}
+
+Figure~\ref{fig:sqio_example_text} shows a program that opens a file, reads
+sequences from it one at a time, then closes the file.
+
+\begin{figure}
+\input{cexcerpts/sqio_example_text}
+\caption{Example of reading sequences from a file.}
+\label{fig:sqio_example_text}
+\end{figure}
+
+A FASTA file named \ccode{seqfile} is opened for reading by calling
+\ccode{esl\_sqfile\_Open(filename, format, env, \&sqfp)}, which
+creates a new \ccode{ESL\_SQFILE} and returns it through the
+\ccode{sqfp} pointer. If the \ccode{format} is passed as
+\ccode{eslSQFILE\_UNKNOWN}, then the format of the file is
+autodetected. Here, we bypass autodetection by asserting that the file
+is in FASTA format by passing a \ccode{eslSQFILE\_FASTA} code. (See
+below for a list of valid codes and formats.) The optional \ccode{env}
+argument is described below too; here, we're passing \ccode{NULL} and
+not using it.
+
+Several things can go wrong in trying to open a sequence file that are
+beyond the control of Easel or your application, so it's important
+that you check the return code.  \ccode{esl\_sqfile\_Open()} returns
+\ccode{eslENOTFOUND} if the file can't be opened, and
+\ccode{eslEFORMAT} if the file is empty, or if autodetection can't
+determine its format.\footnote{Additionally, internal errors might be
+  thrown, which you should check for if you installed a nonfatal error
+  handler.}
+
+The file is then read one sequence at a time by calling
+\ccode{esl\_sq\_Read(sqfp, sq)}. This function returns \ccode{eslOK}
+if it read a new sequence, and leaves that sequence in the \ccode{sq}
+object that the caller provided.  When there is no more data in the
+file, \ccode{esl\_sq\_Read()} returns \ccode{eslEOF}. 
+
+If at any point the file does not appear to be in the proper format,
+\ccode{esl\_sq\_Read()} returns \ccode{eslEFORMAT}. The application
+must check for this. The API can provide a little information about
+what went wrong and where. \ccode{sqfp->filename} is the name of the
+file that we were parsing (not necessarily the same as
+\ccode{seqfile}; \ccode{sqfp->filename} can be a full pathname if we
+used an \ccode{env} argument to look for \ccode{seqfile} in installed
+database directories). The function \ccode{esl\_sqfile\_GetErrorBuf()}
+should be called to get a pointer to the generated error message.  The
+buffer is a brief explanatory message that gets filled in when a
+\ccode{eslEFORMAT} error occurs.
+  \footnote{Unlike in the MSA module, you don't get access to the
+  current line text; some of sqio's parsers use fast block-based
+  (\ccode{fread()}) input instead of line-based input.}
+
+We can reuse the same \ccode{ESL\_SQ} object for subsequent sequences
+by calling \ccode{esl\_sq\_Reuse()} on it when we're done with the
+previous sequence. If we wanted to load a set of sequences, we'd
+\ccode{\_Create()} an array of \ccode{ESL\_SQ} objects. 
+
+Finally, to clean up properly, a \ccode{ESL\_SQ} that was created is
+destroyed with \ccode{esl\_sq\_Destroy(sq)}, and a \ccode{ESL\_SQFILE}
+is closed with \ccode{esl\_sqfile\_Close()}.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Digital sequence input mode}
+
+Most Easel-based programs manipulate sequences in Easel's digital
+sequence format, using \eslmod{alphabet}, as opposed to manipulating
+them as plaintext. The \eslmod{sqio} reader can be used either in text
+mode or digital mode. In text mode, you get the \ccode{sq->seq} field
+of the \ccode{ESL\_SQ}; in digital mode, you get \ccode{sq->dsq}. 
+
+To use digital mode, both the \ccode{ESL\_SQFILE} reader and the
+\ccode{ESL\_SQ} sequence object must be set to digital mode. The
+reader, because it has an input map that maps plaintext input
+characters to internal residue codes (plaintext or digital), or
+errors. The sequence object, because it needs to have either its
+\ccode{seq} or \ccode{dsq} field allocated. Both also carry a copy of
+the pointer to the alphabet.
+
+Figure~\ref{fig:sqio_example_digital} shows an example of the standard
+idiom for opening files in digital mode, autoguessing their format and
+alphabet by default, and allowing format and alphabet to be specified
+on the command line.
+
+\begin{figure}
+\input{cexcerpts/sqio_example_digital}
+\caption{Standard idiom for reading sequences in digital mode.}
+\label{fig:sqio_example_digital}
+\end{figure}
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Accepted formats}
+
+Accepted unaligned sequence file formats (and their Easel format
+codes) include:
+
+\begin{tabular}{lll}
+\textbf{name}  & \textbf{code}               & \textbf{description} \\
+fasta          & \ccode{eslSQFILE\_FASTA}    & FASTA format \\
+embl           & \ccode{eslSQFILE\_EMBL}     & EMBL DNA database format \\
+genbank        & \ccode{eslSQFILE\_GENBANK}  & GenBank DNA database format \\
+ddbj           & \ccode{eslSQFILE\_DDBJ}     & DDBJ DNA database format \\
+uniprot        & \ccode{eslSQFILE\_UNIPROT}  & UniProt protein database format \\
+\end{tabular}
+
+The above names, case-insensitive, are what a user uses to specify a
+format on a command line: i.e.\ \ccode{--informat fasta} or
+\ccode{--informat FASTA}.
+
+The codes are what you use as a developer to specify a format to an
+Easel function call.
+
+Additionally, there is a code \ccode{eslSQFILE\_UNKNOWN}. It
+tells \ccode{esl\_sqfile\_Open()} to perform format
+autodetection.\footnote{There are some other formats as well, which we
+  don't advertise because they're less well supported.}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Reading from stdin and compressed files}
+
+There are two special cases for input files. 
+
+The module can read sequence input from a stdin pipe. If the
+\ccode{seqfile} argument is ``-'', \ccode{esl\_sqfile\_Open()} ``opens''
+standard input (really, it just associates \ccode{stdin}, which is
+always open, with the \ccode{ESL\_SQFILE}). 
+
+The module can read compressed sequence files. If the \ccode{seqfile}
+argument to \ccode{esl\_sqfile\_Open()} ends in \ccode{.gz}, the file
+is assumed to be compressed with \ccode{gzip}; instead of opening it
+normally, \ccode{esl\_sqfile\_Open()} opens it as a pipe from
+\ccode{gzip -dc}. Your system must support pipes to use
+this.\footnote{Specifically, it must support the \ccode{popen()}
+  system call (POSIX.2 compliant operating systems do). The
+  \ccode{configure} script automatically checks this at compile-time
+  and defines \ccode{HAVE\_POPEN} appropriately.} Obviously, the user
+must also have \ccode{gzip} installed and in his PATH.
+
+For both special cases, the catch is that you can't use format
+autodetection; you must provide a valid known format code when you
+read from stdin or from a compressed file. Pipes are not rewindable,
+and format autodetection currently relies on a two-pass algorithm: it
+reads partway into the file to determine the format, then rewinds to
+start parsing for real.\footnote{The \eslmod{msafile} module is more
+  advanced. Its parsers are based on the newer \eslmod{buffer} module
+  which provides rewindable input buffers even for stdin and pipes.}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% SRE: commented NCBI section out. 
+%%      I don't believe that it works, or that it's up to date. 
+%%      Needs testing.
+
+%% \subsection{NCBI BLAST database support}
+
+%% If sqio is augmented with the ncbi module, then the sqio API gains the
+%% ability to read NCBI BLAST database formats in addition to ASCII file
+%% formats. The sqio API remains exactly the same (the caller doesn't
+%% have to use any msa module functions).
+
+%% To open a BLAST database, the format must be supplied.  If a format
+%% of \ccode{eslSQFILE\_UNKNOWN} is specified, only ASCII based format,
+%% i.e. FASTA, GENBANK, etc. will be opened.
+
+%% When opening a BLAST database, the file name should not include any
+%% extensions.  If the \ccode{ESL\_ALPHABET} is not specified, Easel
+%% will first try to open a protein database, followed by a DNA database
+%% and finally a multi-volume database.  The handling of a multi-volume
+%% database is done through the alias file.  The only directive in
+%% the alias file is the DBLIST line, listing all the database volumes.
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Adding a sequence parser}
+
+New parsers for new formats can be plugged into \eslmod{sqio} without
+any API changes. Existing Easel-based programs don't need code changes
+to use the new parser.
+
+A new parser will need a format type, a structure for parser specific
+data, API functions and a hook into the \ccode{sqfile\_open} function.
+
+The list of formats are defined in \ccode{esl\_sqio.h}.  A new
+\ccode{\#define} will be added to the existing formats:
+
+\input{cexcerpts/sq_sqio_format}
+
+A data structure for parser specific data will need to be added
+to \ccode{ESL\_SQDATA}.  This structure is a union of the 
+different parser specific data structures.  If possible the
+addition of the parser structure should be augmented so its
+inclusion can be controlled.
+
+\input{cexcerpts/sq_sqio_data}
+
+Finally, a set of parser specific function pointers need to be
+defined.  The functions in \ccode{esl\_sqio.c} in turn call these
+function pointers.  The \ccode{esl\_sqfile\_Open} function initializes
+the function pointers to NULL, so if they are not set, an exception
+will occur when the function is called.  At a minimum, the function
+should be defined to return an \ccode{eslEUNIMPLEMENTED}.  Below is a
+map the the function pointers to their respective function.
+
+\begin{tabular}{ll} \\
+Function pointer & \eslmod{sqio} function \\ \hline
+position & esl\_sqfile\_Position \\
+close & esl\_sqfile\_Close \\
+set\_digital & esl\_sqfile\_SetDigital \\
+guess\_alphabet & esl\_sqfile\_GuessAlphabet \\
+read & esl\_sqio\_Read  \\
+read\_info & esl\_sqio\_ReadInfo   \\
+read\_seq & esl\_sqio\_ReadSequence \\
+read\_window & esl\_sqio\_ReadWindow \\
+echo & esl\_sqio\_Echo  \\
+read\_block & esl\_sqio\_ReadBlock  \\
+open\_ssi & esl\_sqfile\_OpenSSI     \\
+pos\_by\_key & esl\_sqfile\_PositionByKey    \\
+pos\_by\_number & esl\_sqfile\_PositionByNumber \\
+fetch & esl\_sqio\_Fetch       \\
+fetch\_info & esl\_sqio\_FetchInfo   \\
+fetch\_subseq & esl\_sqio\_FetchSubseq \\
+is\_rewindable & esl\_sqfile\_IsRewindable  \\
+get\_error & esl\_sqfile\_GetErrorBuf \\
+\end{tabular}
+
+\bigskip
+A hook needs to be added to the function \ccode{sqfile\_open}.
+This hook will try to open the specified file.  If successful,
+the \ccode{ESL\_SQFILE} structure should be filled in with function
+pointers and the parser specific data and the open hook
+return \ccode{eslOK}.  If the sequence files were not found for
+the specific parser, an \ccode{eslENOTFOUND} is returned and
+the next parser tries to open the file.  Below is an example
+of code that tries to open an NCBI BLAST database if not
+successful, then the ASCII sequence parsers try to open the
+file.
+
+\begin{cchunk}
+#ifdef eslAUGMENT\_NCBI
+    if (format == eslSQFILE\_NCBI && status == eslENOTFOUND)
+      status = esl\_sqncbi\_Open(sqfp->filename, sqfp->format, sqfp);
+#endif
+    if (status == eslENOTFOUND)
+      status = esl\_sqascii\_Open(sqfp->filename, sqfp->format, sqfp);
+\end{cchunk}
diff --git a/esl_sqio_ascii.c b/esl_sqio_ascii.c
new file mode 100644
index 0000000..15b70ac
--- /dev/null
+++ b/esl_sqio_ascii.c
@@ -0,0 +1,3411 @@
+/* Unaligned ascii sequence file i/o.
+ * 
+ * Contents:
+ *    1. An <ESL_SQFILE> object, in text mode.
+ *    2. An <ESL_SQFILE> object, in digital mode. [with <alphabet>]
+ *    3. Miscellaneous routines.
+ *    4. Sequence reading (sequential).
+ *    5. Sequence/subsequence fetching, random access [with <ssi>]
+ *    6. Internal routines shared by parsers.
+ *    7. Internal routines for EMBL format (including UniProt, TrEMBL)
+ *    8. Internal routines for GenBank format
+ *    9. Internal routines for FASTA format
+ *   10. Internal routines for DAEMON format
+ *   11. Internal routines for HMMPGMD format
+ *   12. Copyright and license.
+ * 
+ * This module shares remote evolutionary homology with Don Gilbert's
+ * seminal, public domain ReadSeq package, though the last common
+ * ancestor was circa 1991 and no recognizable vestiges are likely to
+ * remain. Thanks Don!
+ *
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"/* alphabet aug adds digital sequences */
+#endif 
+#ifdef eslAUGMENT_MSA
+#include "esl_msa.h"/* msa aug adds ability to read MSAs as unaligned seqs  */
+#include "esl_msafile.h"
+#endif
+#ifdef eslAUGMENT_SSI
+#include "esl_ssi.h"/* ssi aug adds ability to randomly access sequences/subsequences */
+#endif
+#include "esl_sqio.h"
+#include "esl_sq.h"
+
+/* format specific routines */
+static int   sqascii_GuessFileFormat(ESL_SQFILE *sqfp, int *ret_fmt);
+static int   sqascii_Position       (ESL_SQFILE *sqfp, off_t offset);
+static void  sqascii_Close          (ESL_SQFILE *sqfp);
+static int   sqascii_SetDigital     (ESL_SQFILE *sqfp, const ESL_ALPHABET *abc);
+static int   sqascii_GuessAlphabet  (ESL_SQFILE *sqfp, int *ret_type);
+static int   sqascii_Read           (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int   sqascii_ReadInfo       (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int   sqascii_ReadSequence   (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int   sqascii_ReadWindow     (ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq);
+static int   sqascii_ReadBlock      (ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target);
+static int   sqascii_Echo           (ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp);
+
+static int   sqascii_IsRewindable   (const ESL_SQFILE *sqfp);
+static const char *sqascii_GetError (const ESL_SQFILE *sqfp);
+
+#ifdef eslAUGMENT_SSI
+static int   sqascii_OpenSSI         (ESL_SQFILE *sqfp, const char *ssifile_hint);
+static int   sqascii_PositionByKey   (ESL_SQFILE *sqfp, const char *key);
+static int   sqascii_PositionByNumber(ESL_SQFILE *sqfp, int which);
+static int   sqascii_Fetch           (ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq);
+static int   sqascii_FetchInfo       (ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq);
+static int   sqascii_FetchSubseq     (ESL_SQFILE *sqfp, const char *source, int64_t start, int64_t end, ESL_SQ *sq);
+#endif /*eslAUGMENT_SSI*/
+
+/* Internal routines shared by parsers. */
+static int  loadmem  (ESL_SQFILE *sqfp);
+static int  loadbuf  (ESL_SQFILE *sqfp);
+static int  nextchar (ESL_SQFILE *sqfp, char *ret_c);
+static int  seebuf   (ESL_SQFILE *sqfp, int64_t maxn, int64_t *opt_nres, int64_t *opt_endpos);
+static void addbuf   (ESL_SQFILE *sqfp, ESL_SQ *sq, int64_t nres);
+static void skipbuf  (ESL_SQFILE *sqfp, int64_t nskip);
+static int  read_nres(ESL_SQFILE *sqfp, ESL_SQ *sq, int64_t nskip, int64_t nres, int64_t *opt_actual_nres);
+static int  skip_whitespace(ESL_SQFILE *sqfp);
+
+/* EMBL format; also UniProt, TrEMBL */
+static void config_embl(ESL_SQFILE *sqfp);
+static void inmap_embl (ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap);
+static int  header_embl(ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int  skip_embl  (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int  end_embl   (ESL_SQFILE *sqfp, ESL_SQ *sq);
+
+/* GenBank format; also DDBJ */
+static void config_genbank(ESL_SQFILE *sqfp);
+static void inmap_genbank (ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap);
+static int  header_genbank(ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int  skip_genbank  (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int  end_genbank   (ESL_SQFILE *sqfp, ESL_SQ *sq);
+
+/* FASTA format */
+static void config_fasta(ESL_SQFILE *sqfp);
+static void inmap_fasta (ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap);
+static int  header_fasta(ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int  skip_fasta  (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int  end_fasta   (ESL_SQFILE *sqfp, ESL_SQ *sq);
+
+/* DAEMON format */
+static void config_daemon(ESL_SQFILE *sqfp);
+static void inmap_daemon (ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap);
+static int  end_daemon   (ESL_SQFILE *sqfp, ESL_SQ *sq);
+
+/* HMMPGMD format */
+static int  fileheader_hmmpgmd(ESL_SQFILE *sqfp);
+
+
+/*****************************************************************
+ *# 1. An <ESL_SQFILE> object, in text mode.
+ *****************************************************************/ 
+
+/* Function:  esl_sqascii_Open()
+ * Synopsis:  Open a sequence file for reading.
+ *
+ * Purpose:   Open a sequence file <filename> for reading. 
+ *            The opened <ESL_SQFILE> is returned through <ret_sqfp>.
+ * 
+ *            The format of the file is asserted to be <format> (for
+ *            example, <eslSQFILE_FASTA>). If <format> is
+ *            <eslSQFILE_UNKNOWN> then the routine attempts to
+ *            autodetect the file format.
+ *            
+ *            There are two special cases for <filename>. If
+ *            <filename> is "-", the sequence data are read from a
+ *            <STDIN> pipe. If <filename> ends in ".gz", the file is
+ *            assumed to be compressed with <gzip>, and it is opened
+ *            by a pipe from <gzip -dc>. Reading gzip files only works
+ *            on POSIX-compliant systems that have pipes
+ *            (specifically, the POSIX.2 popen() call). 
+ *
+ * Returns:   <eslOK> on success, and <*ret_sqfp> points to a new
+ *            open <ESL_SQFILE>. Caller deallocates this object with
+ *            <esl_sqfile_Close()>. 
+ *            
+ *            Returns <eslENOTFOUND> if <filename> can't be found or
+ *            opened.  Returns <eslEFORMAT> if the file is empty, or
+ *            if autodetection is attempted and the format can't be
+ *            determined.  On any error condition, <*ret_sqfp> is
+ *            returned NULL.
+ *             
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_sqascii_Open(char *filename, int format, ESL_SQFILE *sqfp)
+{
+  int         status;/* return status from an ESL call */
+  int         n;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  /* before we go any further, make sure we can handle the format */
+  if (format == eslSQFILE_NCBI) return eslENOTFOUND;
+
+  /* Default initializations */
+  ascii->fp           = NULL;
+  ascii->do_gzip      = FALSE;
+  ascii->do_stdin     = FALSE;
+  ascii->do_buffer    = FALSE;
+
+  ascii->mem          = NULL;
+  ascii->allocm       = 0;
+  ascii->mn           = 0;
+  ascii->mpos         = 0;
+  ascii->moff         = -1;
+  ascii->is_recording = FALSE;
+
+  ascii->buf          = NULL;
+  ascii->boff         = 0;
+  ascii->balloc       = 0;
+  ascii->nc           = 0;
+  ascii->bpos         = 0;
+  ascii->L            = 0;
+  ascii->linenumber   = 1;
+
+  ascii->bookmark_offset  = 0;
+  ascii->bookmark_linenum = 0;
+
+  ascii->is_linebased = FALSE;
+  ascii->eof_is_ok    = FALSE;
+  ascii->parse_header = NULL;
+  ascii->skip_header  = NULL;
+  ascii->parse_end    = NULL;
+
+  ascii->afp        = NULL;
+  ascii->msa        = NULL;
+  ascii->idx        = -1;
+
+  ascii->ssifile    = NULL;
+  ascii->rpl        = -1; /* -1 = not set yet */
+  ascii->bpl        = -1; /* (ditto) */
+  ascii->prvrpl     = -1; /* (ditto) */
+  ascii->prvbpl     = -1; /* (ditto) */
+  ascii->currpl     = -1;
+  ascii->curbpl     = -1;
+  ascii->ssi        = NULL;
+
+  /* MSA formats are handled entirely by msafile module - 
+   * let it  handle stdin, .gz, etc
+   */
+  if (! esl_sqio_IsAlignment(format))
+  {
+    if (strcmp(filename, "-") == 0) /* stdin special case */
+    {
+      ascii->fp       = stdin;
+      ascii->do_stdin = TRUE;
+    }
+    else
+    { /* Check the current working directory first. */
+      if ((ascii->fp = fopen(filename, "r")) == NULL) {
+        status = eslENOTFOUND;
+        goto ERROR;
+      }
+    }
+
+      /* Deal with the .gz special case: to popen(), "success" only means
+       * it found and executed gzip -dc.  If gzip -dc doesn't find our
+       * file, popen() still blithely returns success, so we have to be
+       * sure the file exists. That's why we fopen()'ed it above, only to
+       * close it and popen() it here.
+       */                           
+#ifdef HAVE_POPEN
+      n = strlen(filename);
+      if (n > 3 && strcmp(filename+n-3, ".gz") == 0) 
+      {
+        char *cmd;
+        fclose(ascii->fp);
+        ESL_ALLOC(cmd, sizeof(char) * (n+1+strlen("gzip -dc ")));
+        sprintf(cmd, "gzip -dc %s", filename);
+        ascii->fp = popen(cmd, "r");
+        if (ascii->fp == NULL) { status = eslENOTFOUND; goto ERROR; }
+        ascii->do_gzip  = TRUE;
+        free(cmd);
+      }
+#endif /*HAVE_POPEN*/
+
+      /* If we don't know the format yet, try to autodetect it now. */
+      if (format == eslSQFILE_UNKNOWN)
+      {
+         status = sqascii_GuessFileFormat(sqfp, &format);
+         if      (status == eslOK)      sqfp->format = format;
+         else if (status != eslEFORMAT) goto ERROR; /* <format> might still be eslSQFILE_UNKNOWN, for MSA files  */
+      }
+
+      /* If the format is still unknown, it may be an MSA file.  The
+       * msafile module is capable of autodetecting format even in a .gz
+       * or stdin pipe, but the stuff above has already read from these
+       * nonrewindable sources, trying to guess an unaligned format.  We
+       * could open a second .gz pipe, but that's ugly; and in any case,
+       * we can't rewind stdin. Eventually, this will get resolved, by
+       * having sqio open an ESL_BUFFER, then doing an
+       * esl_msafile_OpenBuffer() if we need to hand control to the
+       * msafile module. For now, sqio is already documented to be
+       * unable to autodetect MSA file formats in stdin or .gz pipes,
+       * so leave it that way.
+       */
+      if (format == eslSQFILE_UNKNOWN && (ascii->do_gzip || ascii->do_stdin)) 
+      { status = eslEFORMAT; goto ERROR; }
+    }
+
+  /* If format is definitely an MSA, open it through the msafile interface.
+   * Or, if format is still unknown, try to open the file as an MSA file,
+   * using msafile autodetection. 
+   */
+#ifdef eslAUGMENT_MSA
+  if (format == eslSQFILE_UNKNOWN || esl_sqio_IsAlignment(format))
+    {
+      status = esl_msafile_Open(NULL, filename, NULL, format, NULL, &(ascii->afp));
+      if (status != eslOK) { status = eslEFORMAT; goto ERROR; } /* This was our last attempt. Failure to open == failure to detect format */
+      sqfp->format = format = ascii->afp->format;
+    }
+#endif
+  if (format == eslSQFILE_UNKNOWN) { status = eslEFORMAT; goto ERROR; }
+
+
+  /* Configure the <sqfp>'s parser and inmaps for this format. */
+  if (!esl_sqio_IsAlignment(format)) 
+    {
+      switch (format) {
+      case eslSQFILE_EMBL:     config_embl(sqfp);    inmap_embl(sqfp,    NULL);   break;
+      case eslSQFILE_UNIPROT:  config_embl(sqfp);    inmap_embl(sqfp,    NULL);   break;
+      case eslSQFILE_GENBANK:  config_genbank(sqfp); inmap_genbank(sqfp, NULL);   break;
+      case eslSQFILE_DDBJ:     config_genbank(sqfp); inmap_genbank(sqfp, NULL);   break;
+      case eslSQFILE_FASTA:    config_fasta(sqfp);   inmap_fasta(sqfp,   NULL);   break;
+      case eslSQFILE_DAEMON:   config_daemon(sqfp);  inmap_daemon(sqfp,  NULL);   break;
+      case eslSQFILE_HMMPGMD:  config_fasta(sqfp);   inmap_fasta(sqfp,   NULL);   break;
+      default:status = eslEFORMAT; goto ERROR;
+      }
+
+      /* Preload the first line or chunk of file. */
+      status = loadbuf(sqfp);
+      if      (status == eslEOF) { status = eslEFORMAT; goto ERROR; }
+      else if (status != eslOK)  { goto ERROR; }
+
+      /* hmmpgmd is a special case: we need to skip first line before parsing it.
+       * generalize that a little: this could be a section for parsing a file header,
+       * and leaving the buf positioned at the first char of the first record
+       * (just as expected if there's no file header)
+       */
+      switch (format) {
+      case eslSQFILE_HMMPGMD:   status = fileheader_hmmpgmd(sqfp); break;
+      default:                  status = eslOK;                    break;
+      }
+      if (status != eslOK) goto ERROR;
+    }
+  else
+    {
+      ascii->is_linebased = TRUE;
+      ascii->eof_is_ok    = FALSE; /* no-op for msa's */
+      ascii->parse_header = NULL;  /* no-op for msa's */
+      ascii->skip_header  = NULL;  /* no-op for msa's */
+      ascii->parse_end    = NULL;  /* no-op for msa's */
+    }
+
+  /* initialize the function pointers for the ascii routines */
+  sqfp->position          = &sqascii_Position;
+  sqfp->close             = &sqascii_Close;
+
+  sqfp->set_digital       = &sqascii_SetDigital;
+  sqfp->guess_alphabet    = &sqascii_GuessAlphabet;
+
+  sqfp->is_rewindable     = &sqascii_IsRewindable;
+
+  sqfp->read              = &sqascii_Read;
+  sqfp->read_info         = &sqascii_ReadInfo;
+  sqfp->read_seq          = &sqascii_ReadSequence;
+  sqfp->read_window       = &sqascii_ReadWindow;
+  sqfp->echo              = &sqascii_Echo;
+
+  sqfp->read_block        = &sqascii_ReadBlock;
+
+#ifdef eslAUGMENT_SSI
+  sqfp->open_ssi          = &sqascii_OpenSSI;
+  sqfp->pos_by_key        = &sqascii_PositionByKey;
+  sqfp->pos_by_number     = &sqascii_PositionByNumber;
+
+  sqfp->fetch             = &sqascii_Fetch;
+  sqfp->fetch_info        = &sqascii_FetchInfo;
+  sqfp->fetch_subseq      = &sqascii_FetchSubseq;
+#endif
+
+  sqfp->get_error         = &sqascii_GetError;
+
+  return eslOK;
+
+ ERROR:
+  sqascii_Close(sqfp); 
+  return status;
+}
+
+
+/* Function:  sqascii_GuessFileFormat()
+ * Synopsis:  Guess the format of an open <ESL_SQFILE>.
+ *
+ * Purpose:   Try to guess the sequence file format of <sqfp>, and
+ *            return the format code in <*ret_fmt>.
+ *            
+ *            First we attempt to guess based on the <filename>'s
+ *            suffix. <*.fa> is assumed to be in FASTA format; <*.gb>
+ *            is assumed to be in GenBank format.
+ *            
+ *            If that fails, we attempt to guess based on peeking at
+ *            the first nonblank line of <filename>. If the line
+ *            starts with $>$, we assume FASTA format; if the line
+ *            starts with <ID>, we assume EMBL format; if the line
+ *            starts with <LOCUS> or it contains the string <Genetic
+ *            Sequence Data Bank> we assume GenBank format.
+ *            
+ *            If that fails too, return an <eslEFORMAT> error, and
+ *            <*ret_fmt> is set to <eslSQFILE_UNKNOWN>.
+ *            
+ * Returns:   <eslOK> on success, and <*ret_fmt> contains
+ *            a valid sequence file format code, such as 
+ *            <eslSQFILE_FASTA>.
+ *            
+ *            Returns <eslEFORMAT> if we opened <filename> but it
+ *            contains no nonblank lines, or if we peeked at the first
+ *            nonblank line and still couldn't guess the format;
+ *            <*ret_fmt> is then <eslSQFILE_UNKNOWN>.
+ *            
+ * Throws:    <eslEMEM> on allocation failure.           
+ */
+static int
+sqascii_GuessFileFormat(ESL_SQFILE *sqfp, int *ret_fmt)
+{
+  int   n         = strlen(sqfp->filename);
+  const char *sfx = NULL;
+  int   is_gzip   = FALSE;
+  int   nsfx;
+  int   status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  /* On any premature exit, *ret_fmt is eslSQFILE_UNKNOWN */
+  *ret_fmt = eslSQFILE_UNKNOWN;
+
+  /* Is <filename> gzip'ed? Look at suffix. */
+  if (n > 3 && strcmp(sqfp->filename+n-3, ".gz") == 0) is_gzip = TRUE;
+
+  /* Locate the suffix that might indicate format (ignore .gz) */
+  for (nsfx = 1, sfx = sqfp->filename + n - 1 - (is_gzip ? 3 : 0);
+       sfx != sqfp->filename && *sfx != '.'; 
+       sfx--) 
+    nsfx++;
+
+  /* now sfx points either to filename (we didn't find a suffix) or to the . of the suffix,
+   * and nsfx is the suffix length inclusive of the . 
+   */
+  
+  /* Attempt to guess file format based on file name suffix. */
+  if      (strncmp(sfx, ".fa",  3) == 0)  { *ret_fmt = eslSQFILE_FASTA;      return eslOK; }
+  else if (strncmp(sfx, ".gb",  3) == 0)  { *ret_fmt = eslSQFILE_GENBANK;    return eslOK; }
+    
+  /* If that didn't work, we'll have a peek at the stream; 
+   * turn recording on, and set for line based input.
+   */
+  if (ascii->is_recording == -1) ESL_EXCEPTION(eslEINVAL, "sq file already too advanced");
+  ascii->is_recording = TRUE;
+  ascii->is_linebased = TRUE;
+  loadbuf(sqfp);/* now ascii->buf is a line of the file */
+
+  /* get first nonblank line */
+  while (esl_str_IsBlank(ascii->buf)) {
+    status = loadbuf(sqfp);
+    if      (status == eslEOF) ESL_XFAIL(eslEFORMAT, ascii->errbuf, "No data found in file");
+    else if (status != eslOK)  goto ERROR;
+  } 
+
+  /* formats that can be determined from the first line: */
+  if      (*(ascii->buf) == '>')                                     *ret_fmt = eslSQFILE_FASTA;
+  else if (strncmp(ascii->buf, "ID   ", 5)    == 0)                  *ret_fmt = eslSQFILE_EMBL;
+  else if (strncmp(ascii->buf, "LOCUS   ", 8) == 0)                  *ret_fmt = eslSQFILE_GENBANK;
+  else if (strstr(ascii->buf, "Genetic Sequence Data Bank") != NULL) *ret_fmt = eslSQFILE_GENBANK;
+
+  /* reset the sqfp */
+  ascii->mpos         = 0;
+  ascii->is_recording = FALSE;
+  ascii->is_linebased = FALSE;
+  free(ascii->buf);
+  ascii->buf    = NULL;
+  ascii->balloc = 0;
+  return (*ret_fmt == eslSQFILE_UNKNOWN) ? eslEFORMAT : eslOK;
+
+ ERROR:
+  ascii->mpos         = 0;
+  ascii->is_recording = FALSE;
+  ascii->is_linebased = FALSE;
+  if (ascii->buf != NULL) { free(ascii->buf); ascii->balloc = 0; }
+  return status;
+}
+
+/* Function:  sqascii_Position()
+ * Synopsis:  Reposition an open sequence file to an offset.
+  *
+ * Purpose:   Reposition an open <sqfp> to offset <offset>.
+ *            <offset> would usually be the first byte of a
+ *            desired sequence record.
+ *            
+ *            Only normal sequence files can be positioned to a
+ *            nonzero offset. If <sqfp> corresponds to a standard
+ *            input stream or gzip -dc stream, it may not be
+ *            repositioned. If <sqfp> corresponds to a multiple
+ *            sequence alignment file, the only legal <offset>
+ *            is 0, to rewind the file to the beginning and 
+ *            be able to read the entire thing again.
+ *            
+ *            After <esl_sqfile_Position()> is called on a nonzero
+ *            <offset>, <sqfp->linenumber> and other bookkeeping
+ *            information is unknown. If caller knows it, it should
+ *            set it explicitly.
+ *            
+ *            See the SSI module for manipulating offsets and indices.
+ *
+ * Returns:   <eslOK>     on success;
+ *            <eslEOF>    if no data can be read from this position.
+ *
+ * Throws:    <eslESYS> if the fseeko() or fread() call fails.
+ *            <eslEMEM> on (re-)allocation failure.
+ *            <eslEINVAL> if the <sqfp> is not positionable.
+ *            <eslENOTFOUND> if in trying to rewind an alignment file  
+ *              by closing and reopening it, the open fails.
+ *            On errors, the state of <sqfp> is indeterminate, and
+ *            it should not be used again.
+ */
+static int
+sqascii_Position(ESL_SQFILE *sqfp, off_t offset)
+{
+  int status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->do_stdin)                  ESL_EXCEPTION(eslEINVAL, "can't Position() in standard input");
+  if (ascii->do_gzip)                   ESL_EXCEPTION(eslEINVAL, "can't Position() in a gzipped file");
+  if (offset < 0)                       ESL_EXCEPTION(eslEINVAL, "bad offset");
+  if (offset > 0 && ascii->afp != NULL) ESL_EXCEPTION(eslEINVAL, "can't use esl_sqfile_Position() w/ nonzero offset on MSA file");
+
+  if (esl_sqio_IsAlignment(sqfp->format)) 
+    {/* msa file: close and reopen. maybe sometime we'll have esl_msafile_Rewind() */
+        /* we have already verified that offset==0 for MSA file */
+      esl_msafile_Close(ascii->afp);
+      if (ascii->msa != NULL) esl_msa_Destroy(ascii->msa);
+      ascii->afp = NULL;
+      ascii->msa = NULL;
+      ascii->idx = 0;
+      
+      /* we know we successfully opened it the first time, so a
+         failure to reopen is an exception, not a user-reportable
+         normal error. ENOTFOUND is the only normal error;
+         EFORMAT error can't occur because we know the format and
+         don't use autodetection.
+       */
+      status = esl_msafile_Open(NULL, sqfp->filename, NULL, sqfp->format, NULL, &(ascii->afp));
+      if      (status == eslENOTFOUND) ESL_EXCEPTION(eslENOTFOUND, "failed to reopen alignment file");
+      else if (status != eslOK)        return status;
+    }
+  else/* normal case: unaligned sequence file */
+    {
+      if (fseeko(ascii->fp, offset, SEEK_SET) != 0) ESL_EXCEPTION(eslESYS, "fseeko() failed");
+
+      ascii->currpl     = -1;
+      ascii->curbpl     = -1;
+      ascii->prvrpl     = -1;
+      ascii->prvbpl     = -1;
+      ascii->linenumber = (offset == 0) ? 1 : -1; /* -1 is "unknown" */
+      ascii->L          = -1;
+      ascii->mpos       = ascii->mn;/* this forces loadbuf to load new data */
+      if ((status = loadbuf(sqfp)) != eslOK) return status;
+    }
+  return eslOK;
+}
+
+
+
+/* Function:  sqascii_Close()
+ * Synopsis:  Close a sequence file.
+ *
+ * Purpose:   Closes an open <sqfp>.
+ *
+ * Returns:   (void).
+ */
+static void
+sqascii_Close(ESL_SQFILE *sqfp)
+{
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+#ifdef HAVE_POPEN
+  if (ascii->do_gzip)          pclose(ascii->fp);
+  else 
+#endif
+  if (! ascii->do_stdin && ascii->fp != NULL) fclose(ascii->fp);
+
+  if (ascii->ssifile  != NULL) free(ascii->ssifile);
+  if (ascii->mem      != NULL) free(ascii->mem);
+  if (ascii->balloc   > 0)     free(ascii->buf);
+#ifdef eslAUGMENT_SSI
+  if (ascii->ssi      != NULL) esl_ssi_Close(ascii->ssi);
+#endif
+
+#ifdef eslAUGMENT_MSA
+  if (ascii->afp      != NULL) esl_msafile_Close(ascii->afp);
+  if (ascii->msa      != NULL) esl_msa_Destroy(ascii->msa);
+#endif /*eslAUGMENT_MSA*/
+
+  ascii->do_gzip  = FALSE;
+  ascii->do_stdin = FALSE;
+
+  ascii->fp       = NULL;
+
+  ascii->ssifile  = NULL;
+  ascii->mem      = NULL;
+
+  ascii->balloc   = 0;
+  ascii->buf      = NULL;
+
+  ascii->ssi      = NULL;
+
+  ascii->afp      = NULL;
+  ascii->msa      = NULL;
+
+  return;
+}
+/*------------------- ESL_SQFILE open/close -----------------------*/
+
+
+/*****************************************************************
+ *# 2. An <ESL_SQFILE> object, in digital mode [with <alphabet>]
+ *****************************************************************/
+#ifdef eslAUGMENT_ALPHABET
+
+/* Function:  sqascii_SetDigital()
+ * Synopsis:  Set an open <ESL_SQFILE> to read in digital mode.
+ *
+ * Purpose:   Given an <ESL_SQFILE> that's already been opened,
+ *            configure it to expect subsequent input to conform
+ *            to the digital alphabet <abc>.
+ *            
+ *            Calling <esl_sqfile_Open(); esl_sqfile_SetDigital()> is
+ *            equivalent to <esl_sqfile_OpenDigital()>. The two-step
+ *            version is useful when you need a
+ *            <esl_sqfile_GuessAlphabet()> call in between, guessing
+ *            the file's alphabet in text mode before you set it to
+ *            digital mode.
+ *
+ * Returns:   <eslOK> on success.
+ */
+static int
+sqascii_SetDigital(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc)
+{
+  int status = eslOK;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (!esl_sqio_IsAlignment(sqfp->format))
+    {
+      switch (sqfp->format) {
+      case eslSQFILE_EMBL:       inmap_embl(sqfp,    abc->inmap); break;
+      case eslSQFILE_UNIPROT:    inmap_embl(sqfp,    abc->inmap); break;
+      case eslSQFILE_GENBANK:    inmap_genbank(sqfp, abc->inmap); break;
+      case eslSQFILE_DDBJ:       inmap_genbank(sqfp, abc->inmap); break;
+      case eslSQFILE_FASTA:      inmap_fasta(sqfp,   abc->inmap); break;
+      case eslSQFILE_DAEMON:     inmap_daemon(sqfp,  abc->inmap); break;
+
+      default:                   status = eslEFORMAT;             break;
+      }
+    }
+  else
+    {
+#ifdef eslAUGMENT_MSA
+      esl_msafile_SetDigital(ascii->afp, abc);
+#else
+      status = eslEFORMAT;
+#endif
+    }
+
+  return status;
+}
+
+/* Function:  sqascii_GuessAlphabet()
+ * Synopsis:  Guess the alphabet of an open <ESL_SQFILE>.
+ *
+ * Purpose:   After opening <sqfp>, attempt to guess what alphabet
+ *            its sequences are in, by inspecting the first sequence
+ *            in the file, and return this alphabet type in <*ret_type>.
+ *
+ * Returns:   <eslOK> on success, and <*ret_type> is set to <eslDNA>,
+ *            <eslRNA>, or <eslAMINO>.
+ *            
+ *            Returns <eslENOALPHABET> and sets <*ret_type> to 
+ *            <eslUNKNOWN> if the first sequence (or alignment)
+ *            in the file contains no more than ten residues total,
+ *            or if its alphabet cannot be guessed (i.e. it contains
+ *            IUPAC degeneracy codes, but no amino acid specific
+ *            residues).
+ *            
+ *            Returns <eslEFORMAT> if a parse error is encountered in
+ *            trying to read the sequence file. <ascii->errbuf> is set
+ *            to a useful error message if this occurs,
+ *            <sqfp->linenumber> is the line on which the error
+ *            occurred, and <*ret_type> is set to <eslUNKNOWN>.
+ *            
+ *            Returns <eslENODATA> and sets <*ret_type> to <eslUNKNOWN>
+ *            if the file appears to be empty.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ *            <eslEINCONCEIVABLE> on unimaginable internal errors.
+ */
+static int
+sqascii_GuessAlphabet(ESL_SQFILE *sqfp, int *ret_type)
+{
+  ESL_SQ *sq = NULL;
+  int     status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  /* Special case: for MSA files, hand this off to msafile_GuessAlphabet. */
+#ifdef eslAUGMENT_MSA
+  if (esl_sqio_IsAlignment(sqfp->format)) return esl_msafile_GuessAlphabet(ascii->afp, ret_type);
+#endif
+
+  /* set the sqfp to record; we'll rewind afterwards and use the recording */
+  ascii->is_recording = TRUE;
+
+  if ((sq = esl_sq_Create()) == NULL) { status = eslEMEM; goto ERROR; }
+
+  status = sqascii_ReadWindow(sqfp, 0, 4000, sq);
+  if      (status == eslEOF) { status = eslENODATA; goto ERROR; }
+  else if (status != eslOK)  goto ERROR; 
+
+  if ((status = esl_sq_GuessAlphabet(sq, ret_type)) != eslOK) goto ERROR;
+
+  /* reset the sqfp, so it uses the recording next */
+  ascii->mpos         = 0;
+  ascii->linenumber   = 1;
+  ascii->is_recording = FALSE;
+  if ((status = loadbuf(sqfp)) != eslOK) ESL_EXCEPTION(status, "buffer load failed, but shouldn't have");
+  esl_sq_Destroy(sq);
+  return eslOK;
+
+ ERROR:
+  esl_sq_Destroy(sq);
+  *ret_type      = eslUNKNOWN;
+  return status;
+}
+#endif /*eslAUGMENT_ALPHABET*/
+/*-------------- end, digital mode ESL_SQFILE -------------------*/
+
+
+
+
+/*****************************************************************
+ *# 3. Miscellaneous routines 
+ *****************************************************************/ 
+
+/* Function:  sqascii_IsRewindable()
+ * Synopsis:  Return <TRUE> if <sqfp> can be rewound.
+ *
+ * Purpose:   Returns <TRUE> if <sqfp> can be rewound (positioned 
+ *            to an offset of zero), in order to read it a second
+ *            time.
+ */
+static int
+sqascii_IsRewindable(const ESL_SQFILE *sqfp)
+{
+  if (sqfp->data.ascii.do_gzip  == TRUE) return FALSE;
+  if (sqfp->data.ascii.do_stdin == TRUE) return FALSE;
+  return TRUE;
+}
+
+/* Function:  sqascii_GetError()
+ * Synopsis:  Return <TRUE> if <sqfp> can be rewound.
+ *
+ * Purpose:   Returns <TRUE> if <sqfp> can be rewound (positioned 
+ *            to an offset of zero), in order to read it a second
+ *            time.
+ */
+static const char *
+sqascii_GetError(const ESL_SQFILE *sqfp)
+{
+  return sqfp->data.ascii.errbuf;
+}
+
+
+/*****************************************************************
+ *# 4. Sequence reading (sequential)
+ *****************************************************************/ 
+
+/* Function:  sqascii_Read()
+ * Synopsis:  Read the next sequence from a file.
+ *
+ * Purpose:   Reads the next sequence from open sequence file <sqfp> into 
+ *            <sq>. Caller provides an allocated and initialized <s>, which
+ *            will be internally reallocated if its space is insufficient.
+ *
+ * Returns:   <eslOK> on success; the new sequence is stored in <s>.
+ * 
+ *            Returns <eslEOF> when there is no sequence left in the
+ *            file (including first attempt to read an empty file).
+ * 
+ *            Returns <eslEFORMAT> if there's a problem with the format,
+ *            such as an illegal character; the line number that the parse
+ *            error occurs on is in <sqfp->linenumber>, and an informative
+ *            error message is placed in <ascii->errbuf>. 
+ *
+ * Throws:    <eslEMEM> on allocation failure;
+ *            <eslEINCONCEIVABLE> on internal error.
+ */
+static int
+sqascii_Read(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int     status;
+  int64_t epos;
+  int64_t n;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+#ifdef eslAUGMENT_MSA
+  if (esl_sqio_IsAlignment(sqfp->format))
+  {
+      ESL_SQ *tmpsq = NULL;
+      if (ascii->msa == NULL || ascii->idx >= ascii->msa->nseq)
+      { /* we need to load a new alignment? */
+        esl_msa_Destroy(ascii->msa);
+        status = esl_msafile_Read(ascii->afp, &(ascii->msa));
+        if (status == eslEFORMAT)
+        { /* oops, a parse error; upload the error info from afp to sqfp */
+           ascii->linenumber = ascii->afp->linenumber;
+           strcpy(ascii->errbuf, ascii->afp->errmsg); /* errbufs same size! */
+           return eslEFORMAT;
+        }
+        if (status != eslOK) return status;
+        ascii->idx = 0;
+      }
+      
+      /* grab next seq from alignment */
+      /* this is inefficient; it goes via a temporarily allocated copy of the sequence */
+      if ((status = esl_sq_FetchFromMSA(ascii->msa, ascii->idx, &tmpsq)) != eslOK) return status;
+      esl_sq_GrowTo(sq, tmpsq->n);
+      esl_sq_Copy(tmpsq, sq);
+      esl_sq_Destroy(tmpsq);
+      ascii->idx++;
+
+      sq->start = 1;
+      sq->end   = sq->n;
+      sq->C     = 0;
+      sq->W     = sq->n;
+      sq->L     = sq->n;
+      return eslOK;
+    }
+#endif
+
+  /* Main case: read next seq from sqfp's stream */
+  if (ascii->nc == 0) return eslEOF;
+  if ((status = ascii->parse_header(sqfp, sq)) != eslOK) return status; /* EMEM, EOF, EFORMAT */
+
+  do {
+    if ((status = seebuf(sqfp, -1, &n, &epos)) == eslEFORMAT) return status;
+    if (esl_sq_GrowTo(sq, sq->n + n) != eslOK) return eslEMEM;
+    addbuf(sqfp, sq, n);
+    ascii->L   += n;
+    sq->eoff   = ascii->boff + epos - 1;
+    if (status == eslEOD)     break;
+  } while ((status = loadbuf(sqfp)) == eslOK);
+    
+  if      (status == eslEOF)
+    {
+      if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected EOF; file truncated?"); 
+      if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status;
+    }
+  else if (status == eslEOD)
+    {
+      ascii->bpos = epos;
+      if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status;
+    }
+  else if (status != eslOK) return status;
+
+  if (sq->dsq != NULL) sq->dsq[sq->n+1] = eslDSQ_SENTINEL;
+  else                 sq->seq[sq->n] = '\0';
+  sq->start = 1;
+  sq->end   = sq->n;
+  sq->C     = 0;
+  sq->W     = sq->n;
+  sq->L     = sq->n;
+  return eslOK;
+}
+
+
+/* Function:  sqascii_ReadInfo()
+ * Synopsis:  Read sequence info, but not the sequence itself.
+ *
+ * Purpose:   Read the next sequence from open sequence file <sqfp>,
+ *            but don't store the sequence (or secondary structure).
+ *            Upon successful return, <s> holds all the available 
+ *            information about the sequence -- its name, accession,
+ *            description, and overall length <sq->L>. 
+ *            
+ *            This is useful for indexing sequence files, where
+ *            individual sequences might be ginormous, and we'd rather
+ *            avoid reading complete seqs into memory.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+static int
+sqascii_ReadInfo(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int     status;
+  int64_t epos;
+  int64_t n;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+#ifdef eslAUGMENT_MSA
+  if (esl_sqio_IsAlignment(sqfp->format))
+    {
+      ESL_SQ *tmpsq = NULL;
+      if (ascii->msa == NULL || ascii->idx >= ascii->msa->nseq)
+      { /* we need to load a new alignment? */
+        esl_msa_Destroy(ascii->msa);
+        status = esl_msafile_Read(ascii->afp, &(ascii->msa));
+        if (status == eslEFORMAT)
+        { /* oops, a parse error; upload the error info from afp to sqfp */
+          ascii->linenumber = ascii->afp->linenumber;
+          strcpy(ascii->errbuf, ascii->afp->errmsg); /* errbufs same size! */
+          return eslEFORMAT;
+        }
+        if (status != eslOK) return status;
+        ascii->idx = 0;
+      }
+      
+      /* grab next seq from alignment */
+      /* this is inefficient; it goes via a temporarily allocated copy of the sequence */
+      if ((status = esl_sq_FetchFromMSA(ascii->msa, ascii->idx, &tmpsq)) != eslOK) return status;
+      if (tmpsq->dsq != NULL) tmpsq->dsq[1] = eslDSQ_SENTINEL;
+      else                    tmpsq->seq[0] = '\0';
+      esl_sq_Copy(tmpsq, sq);
+      esl_sq_Destroy(tmpsq);
+      ascii->idx++;
+
+      if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL;
+      else                 sq->seq[0] = '\0';
+      if (sq->ss  != NULL) { free(sq->ss); sq->ss = NULL; }
+
+      sq->n     = 0;
+      sq->start = 0;
+      sq->end   = 0;
+      sq->C     = 0;
+      sq->W     = 0;
+      return eslOK;
+    }
+#endif
+
+  if (ascii->nc == 0) return eslEOF;
+  if ((status = ascii->parse_header(sqfp, sq)) != eslOK) return status; /* EOF, EFORMAT */
+
+  ascii->L       = 0;
+  do {
+    status = seebuf(sqfp, -1, &n, &epos);
+    ascii->L += n;
+    sq->eoff = ascii->boff + epos - 1;
+    if (status == eslEFORMAT) return status;
+    if (status == eslEOD)     break;
+  } while ((status = loadbuf(sqfp)) == eslOK);
+    
+  if      (status == eslEOF) 
+    {
+      if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected EOF; file truncated?"); 
+    }
+  else if (status == eslEOD)
+    {
+      ascii->bpos = epos;
+      if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status;
+    }
+  else if (status != eslOK) return status;
+  sq->L = ascii->L;
+
+  /* Set coord system for an info-only ESL_SQ  */
+  if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL;
+  else                 sq->seq[0] = '\0';
+  if (sq->ss  != NULL) { free(sq->ss); sq->ss = NULL; }
+  sq->n     = 0;
+  sq->start = 0;
+  sq->end   = 0;
+  sq->C     = 0;
+  sq->W     = 0;
+  return eslOK;
+}
+
+
+/* Function:  sqascii_ReadSequence()
+ * Synopsis:  Read the next sequence from a file.
+ *
+ * Purpose:   Reads the next sequence from open sequence file <sqfp> into 
+ *            <sq>. Caller provides an allocated and initialized <s>, which
+ *            will be internally reallocated if its space is insufficient.
+ *
+ * Returns:   <eslOK> on success; the new sequence is stored in <s>.
+ * 
+ *            Returns <eslEOF> when there is no sequence left in the
+ *            file (including first attempt to read an empty file).
+ * 
+ *            Returns <eslEFORMAT> if there's a problem with the format,
+ *            such as an illegal character; the line number that the parse
+ *            error occurs on is in <sqfp->linenumber>, and an informative
+ *            error message is placed in <ascii->errbuf>. 
+ *
+ * Throws:    <eslEMEM> on allocation failure;
+ *            <eslEINCONCEIVABLE> on internal error.
+ */
+static int
+sqascii_ReadSequence(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+  int64_t epos;
+  int64_t n;
+  int     status;
+
+#ifdef eslAUGMENT_MSA
+  if (esl_sqio_IsAlignment(sqfp->format))
+    {
+      ESL_SQ *tmpsq = NULL;
+      if (ascii->msa == NULL || ascii->idx >= ascii->msa->nseq)
+      { /* we need to load a new alignment? */
+        esl_msa_Destroy(ascii->msa);
+        status = esl_msafile_Read(ascii->afp, &(ascii->msa));
+        if (status == eslEFORMAT)
+        { /* oops, a parse error; upload the error info from afp to sqfp */
+          ascii->linenumber = ascii->afp->linenumber;
+          strcpy(ascii->errbuf, ascii->afp->errmsg); /* errbufs same size! */
+          return eslEFORMAT;
+        }
+        if (status != eslOK) return status;
+        ascii->idx = 0;
+      }
+      
+      /* grab next seq from alignment */
+      /* this is inefficient; it goes via a temporarily allocated copy of the sequence */
+      status = esl_sq_FetchFromMSA(ascii->msa, ascii->idx, &tmpsq);  // eslEMEM | eslEOD
+      if (status != eslOK) return status;
+
+      esl_sq_GrowTo(sq, tmpsq->n);
+      esl_sq_Copy(tmpsq, sq);
+      esl_sq_Destroy(tmpsq);
+      ascii->idx++;
+
+      sq->start = 1;
+      sq->end   = sq->n;
+      sq->C     = 0;
+      sq->W     = sq->n;
+      sq->L     = sq->n;
+      return eslOK;
+    }
+#endif
+
+  /* Main case: read next seq from sqfp's stream */
+  if (ascii->nc == 0) return eslEOF;
+  if ((status = ascii->skip_header(sqfp, sq)) != eslOK) return status; /* EOF, EFORMAT */
+
+  do {
+    if ((status = seebuf(sqfp, -1, &n, &epos)) == eslEFORMAT) return status;
+    if (esl_sq_GrowTo(sq, sq->n + n) != eslOK) return eslEMEM;
+    addbuf(sqfp, sq, n);
+    ascii->L   += n;
+    sq->eoff   = ascii->boff + epos - 1;
+    if (status == eslEOD)     break;
+  } while ((status = loadbuf(sqfp)) == eslOK);
+    
+  if      (status == eslEOF)
+    {
+      if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected EOF; file truncated?"); 
+      if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status;
+    }
+  else if (status == eslEOD)
+    {
+      ascii->bpos = epos;
+      if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status;
+    }
+  else if (status != eslOK) return status;
+
+  if (sq->dsq != NULL) sq->dsq[sq->n+1] = eslDSQ_SENTINEL;
+  else                 sq->seq[sq->n] = '\0';
+  sq->start = 1;
+  sq->end   = sq->n;
+  sq->C     = 0;
+  sq->W     = sq->n;
+  sq->L     = sq->n;
+  return eslOK;
+}
+
+
+/* Function:  sqascii_ReadWindow()
+ * Synopsis:  Read next window of sequence.
+ *
+ * Purpose:   Read a next window of <W> residues from open file <sqfp>,
+ *            keeping <C> residues from the previous window as
+ *            context, and keeping previous annotation in the <sq>
+ *            as before. 
+ *            
+ *            If this is the first window of a new sequence record,
+ *            <C> is ignored (there's no previous context yet), and
+ *            the annotation fields of the <sq> (name, accession, and
+ *            description) are initialized by reading the sequence
+ *            record's header. This is the only time the annotation
+ *            fields are initialized.
+ *            
+ *            On return, <sq->dsq[]> contains the window and its
+ *            context; residues <1..sq->C> are the previous context,
+ *            and residues <sq->C+1..sq->n> are the new window.  The
+ *            start and end coordinates of the whole <dsq[1..n]>
+ *            (including context) in the original source sequence are
+ *            <sq->start..sq->end>. (Or, for text mode sequences,
+ *            <sq->seq[0..sq->C-1,sq->C..sq->n-1]>, while <start> and
+ *            <end> coords are still <1..L>.)
+ *
+ *            When a sequence record is completed and no more data
+ *            remain, <eslEOD> is returned, with an ``info'' <sq>
+ *            structure (containing the annotation and the total
+ *            sequence length <L>, but no sequence). (The total
+ *            sequence length <L> is unknown in <sq> until this
+ *            <eslEOD> return.)
+ *            
+ *            The caller may then do one of two things before calling
+ *            <esl_sq_ReadWindow()> again; it can reset the sequence
+ *            with <esl_sq_Reuse()> to continue reading the next
+ *            sequence in the file, or it can set a negative <W> as a
+ *            signal to read windows from the reverse complement
+ *            (Crick) strand. Reverse complement reading only works
+ *            for nucleic acid sequence. 
+ *            
+ *            If you read the reverse complement strand, you must read
+ *            the whole thing, calling <esl_sqio_ReadWindow()> with
+ *            negative <W> windows until <eslEOD> is returned again
+ *            with an empty (info-only) <sq> structure. When that
+ *            <EOD> is reached, the <sqfp> is repositioned at the
+ *            start of the next sequence record; the caller should now
+ *            <Reuse()> the <sq>, and the next <esl_sqio_ReadWindow()>
+ *            call must have a positive <W>, corresponding to starting
+ *            to read the Watson strand of the next sequence.
+ *
+ *            Note that the <ReadWindow()> interface is designed for
+ *            an idiom of sequential reading of complete sequences in
+ *            overlapping windows, possibly on both strands; if you
+ *            want more freedom to move around in the sequence
+ *            grabbing windows in another order, you can use the
+ *            <FetchSubseq()> interface.
+ *
+ *            Reading the reverse complement strand requires file
+ *            repositioning, so it will not work on non-repositionable
+ *            streams like gzipped files or a stdin pipe. Moreover,
+ *            for reverse complement input to be efficient, the
+ *            sequence file should have consistent line lengths, 
+ *            suitable for SSI's fast subsequence indexing.
+ *            
+ * Returns:   <eslOK> on success; <sq> now contains next window of
+ *            sequence, with at least 1 new residue. The number
+ *            of new residues is <sq->W>; <sq->C> residues are 
+ *            saved from the previous window. Caller may now
+ *            process residues <sq->dsq[sq->C+1]..sq->dsq[sq->n]>.
+ *            
+ *            <eslEOD> if no new residues were read for this sequence
+ *            and strand, and <sq> now contains an empty info-only
+ *            structure (annotation and <L> are valid). Before calling
+ *            <esl_sqio_ReadWindow()> again, caller will either want
+ *            to make <W> negative (to start reading the Crick strand
+ *            of the current sequence), or it will want to reset the
+ *            <sq> (with <esl_sq_Reuse()>) to go on the next sequence.
+ *            
+ *            <eslEOF> if we've already returned <eslEOD> before to
+ *            signal the end of the previous seq record, and moreover,
+ *            there's no more sequence records in the file.
+ *            
+ *            <eslEINVAL> if an invalid residue is found in the
+ *            sequence, or if you attempt to take the reverse
+ *            complement of a sequence that can't be reverse
+ *            complemented.
+ *
+ * Throws:    <eslESYNTAX> if you try to read a reverse window before
+ *            you've read forward strand.
+ *            
+ *            <eslECORRUPT> if something goes awry internally in the
+ *            coordinate system.
+ *            
+ *            <eslEMEM> on allocation error.
+ */
+static int
+sqascii_ReadWindow(ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq)
+{
+  int     actual_start;
+  int64_t nres;
+  int64_t line;
+  off_t   offset;
+  int     status;
+  ESL_SQ *tmpsq = NULL;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+#ifdef eslAUGMENT_MSA
+  if (esl_sqio_IsAlignment(sqfp->format))
+  {
+    /* special: if we're initializing a revcomp window read, back ascii->idx up one */
+    if (W < 0 && sq->start == 0) ascii->idx--;
+
+    if (ascii->msa == NULL || ascii->idx >= ascii->msa->nseq)
+    { /* need new alignment? */
+      esl_msa_Destroy(ascii->msa);
+      status = esl_msafile_Read(ascii->afp, &(ascii->msa));
+      if (status == eslEFORMAT)
+      { /* oops, a parse error; upload the error info from afp to sqfp */
+        ascii->linenumber = ascii->afp->linenumber;
+        strcpy(ascii->errbuf, ascii->afp->errmsg); /* errbufs same size! */
+        return eslEFORMAT;
+      }
+      else if (status != eslOK) goto ERROR;
+      ascii->idx = 0;
+    }
+      
+    /* grab appropriate seq from alignment into tmpsq */
+    if ((status = esl_sq_FetchFromMSA(ascii->msa, ascii->idx, &tmpsq)) != eslOK) goto ERROR;
+
+    /*by default, tmpsq is an ascii sequence, convert it to digital if that's what sq is*/
+    if (sq->seq == NULL &&
+	(( status = esl_sq_Digitize(sq->abc, tmpsq)) != eslOK)) 
+      goto ERROR;
+
+    /* Figure out tmpsq coords we'll put in sq */
+    if (W > 0)
+    {/* forward strand */
+       sq->C     = ESL_MIN(sq->n, C);
+       sq->start = sq->end - sq->C + 1;
+       sq->end   = ESL_MIN(tmpsq->L, sq->end + W);
+       sq->n     = sq->end - sq->start + 1;
+       sq->W     = sq->n - sq->C;
+    }
+    else
+    {/* reverse strand */
+       if (sq->L == -1) ESL_XEXCEPTION(eslESYNTAX, "Can't read reverse complement until you've read forward strand");
+
+       sq->C     = ESL_MIN(sq->n, sq->end + C - 1);
+       sq->end   = (sq->start == 0 ? sq->L : sq->end + sq->C - 1);
+       sq->start = ESL_MAX(1, sq->end + W - sq->C - 1);
+       sq->n     = sq->end - sq->start + 1;
+       sq->W     = sq->n - sq->C;
+    }
+
+    if (sq->W == 0)/* no new sequence? that's the EOD case */
+    {
+       sq->start      = 0;
+       sq->end        = 0;
+       sq->C          = 0;
+       sq->W          = 0;
+       sq->n          = 0;
+       sq->L          = tmpsq->L;
+       if      (sq->dsq) sq->dsq[1] = eslDSQ_SENTINEL;
+       else if (sq->seq) sq->seq[0] = '\0';
+
+       ascii->idx++;
+       esl_sq_Destroy(tmpsq);
+       return eslEOD;
+    }
+
+    /* Copy the sequence frag.  */
+    if (tmpsq->ss != NULL && sq->ss == NULL) ESL_ALLOC(sq->ss, sizeof(char) * (sq->salloc)); /* this *must* be for salloc  */
+    esl_sq_GrowTo(sq, sq->n);
+    if (tmpsq->seq != NULL)
+    {/* text mode */
+       memcpy(sq->seq, tmpsq->seq + sq->start - 1, sizeof(char) * sq->n);
+       sq->seq[sq->n] = '\0';
+       if (tmpsq->ss != NULL) {
+         memcpy(sq->ss, tmpsq->ss + sq->start - 1, sizeof(char) * sq->n);
+         sq->ss[sq->n] = '\0';
+       }
+    }
+    else
+    {
+     memcpy(sq->dsq + 1, tmpsq->dsq + sq->start, sizeof(ESL_DSQ) * sq->n);
+     sq->dsq[sq->n+1] = eslDSQ_SENTINEL;
+     if (tmpsq->ss != NULL) {
+       memcpy(sq->ss + 1, tmpsq->ss + sq->start, sizeof(char) * sq->n);
+       sq->ss[sq->n+1] = '\0';
+     }
+    }
+    if (W < 0 && (status = esl_sq_ReverseComplement(sq)) != eslOK)
+      ESL_XFAIL(eslEINVAL, ascii->errbuf, "Can't reverse complement that sequence window");
+
+    /* Copy annotation */
+    if ((status = esl_sq_SetName     (sq, tmpsq->name))   != eslOK) goto ERROR;
+    if ((status = esl_sq_SetSource   (sq, tmpsq->name))   != eslOK) goto ERROR;
+    if ((status = esl_sq_SetAccession(sq, tmpsq->acc))    != eslOK) goto ERROR;
+    if ((status = esl_sq_SetDesc     (sq, tmpsq->desc))   != eslOK) goto ERROR;
+    sq->roff = -1;
+    sq->doff = -1;
+    sq->eoff = -1;
+    sq->hoff = -1;
+
+    esl_sq_Destroy(tmpsq);
+    return eslOK;
+  }
+#endif /* we've completely handled the alignment file case above. */
+
+  /* Now for the normal case: we're reading a normal unaligned seq file, not an alignment. */
+
+  /* Negative W indicates reverse complement direction */
+  if (W < 0)
+  {
+    if (sq->L == -1) ESL_EXCEPTION(eslESYNTAX, "Can't read reverse complement until you've read forward strand");
+
+    if (sq->end == 1)
+    { /* last end == 1 means last window was the final one on reverse strand,
+        * so we're EOD; jump back to last forward position.
+        */
+       if (ascii->bookmark_offset > 0) {
+         if (esl_sqfile_Position(sqfp, ascii->bookmark_offset) != eslOK)
+           ESL_EXCEPTION(eslECORRUPT, "Failed to reposition seq file at last forward bookmark");
+         ascii->linenumber = ascii->bookmark_linenum;
+       } else {
+         ascii->nc = 0;/* signals EOF */
+       }
+       ascii->bookmark_offset  = 0;
+       ascii->bookmark_linenum = 0;
+
+       sq->start      = 0;
+       sq->end        = 0;
+       sq->C          = 0;
+       sq->W          = 0;
+       sq->n          = 0;
+       /* sq->L stays as it is */
+       if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL;
+       else                 sq->seq[0] = '\0';
+       return eslEOD;
+    }
+
+    /* If s == 0, we haven't read any reverse windows yet;
+     * init reading from sq->L
+     */
+    W = -W;
+    if (sq->start == 0)
+    {
+      sq->start        = ESL_MAX(1, (sq->L - W + 1));
+      sq->end          = sq->L;
+      sq->C            = 0;
+      sq->W            = sq->end - sq->start + 1;
+      ascii->curbpl     = -1;
+      ascii->currpl     = -1;
+      ascii->prvbpl     = -1;
+      ascii->prvrpl     = -1;
+      ascii->linenumber = -1;
+      ascii->L          = -1;
+    }
+    else
+    { /* Else, we're continuing to next window; prv was <end>..<start> */
+       sq->C     = ESL_MIN(C, sq->L - sq->end + 1);  /* based on prev window's end */
+       sq->end   = sq->end + sq->C - 1;                /* also based on prev end     */
+       sq->start = ESL_MAX(1, (sq->end - W - sq->C + 1));
+       sq->W     = sq->end - sq->start + 1 - sq->C;
+    }
+
+    /* Now position for a subseq fetch of <start..end> on fwd strand, using SSI offset calc  */
+    if (sq->doff == 0) ESL_EXCEPTION(eslECORRUPT, "can't happen: sq didn't store data offset");
+
+    if (ascii->bpl == 0 || ascii->rpl == 0) /* no help; brute force resolution. */
+    {
+      offset       = sq->doff;
+      actual_start = 1;
+    }
+    else if (ascii->bpl == ascii->rpl+1)         /* residue resolution */
+    {
+      line = (sq->start-1) / ascii->rpl; /* data line #0.. that <end> is on */
+      offset       = sq->doff + line * ascii->bpl + (sq->start-1)%ascii->rpl;
+      actual_start = sq->start;
+    }
+    else/* line resolution */
+    {
+       line         = (sq->start-1) / ascii->rpl; /* data line #0.. that <end> is on */
+       offset       = sq->doff + line * ascii->bpl;
+       actual_start = 1 + line * ascii->rpl;
+    }
+    if (esl_sqfile_Position(sqfp, offset) != eslOK)
+      ESL_EXCEPTION(eslECORRUPT, "Failed to reposition seq file for reverse window read");
+
+    /* grab the subseq and rev comp it */
+    if ((status = esl_sq_GrowTo(sq, sq->C+sq->W)) != eslOK) return status;
+    sq->n = 0;
+    status = read_nres(sqfp, sq, (sq->start - actual_start), (sq->end - sq->start + 1), &nres);
+
+    if (status != eslOK || nres < (sq->end - sq->start + 1))
+      ESL_EXCEPTION(eslECORRUPT, "Failed to extract %d..%d", sq->start, sq->end);
+
+    status = esl_sq_ReverseComplement(sq);
+    if      (status    == eslEINVAL) ESL_FAIL(eslEINVAL, ascii->errbuf, "can't reverse complement that seq - it's not DNA/RNA");
+    else if (status    != eslOK)     return status;
+
+    return eslOK;
+  }
+
+  /* Else, we're reading the forward strand */
+  else
+  { /* sq->start == 0 means we haven't read any windows on this sequence yet...
+   * it's a new record, and we need to initialize with the header and
+   * the first window. This is the only case that we're allowed to return
+   * EOF from.
+   */
+    if (sq->start == 0)
+    {
+      if (ascii->nc == 0) return eslEOF;
+      if ((status = ascii->parse_header(sqfp, sq)) != eslOK) return status; /* EOF, EFORMAT */
+      sq->start     = 1;
+      sq->C         = 0;/* no context in first window                   */
+      sq->L         = -1;/* won't be known 'til EOD.                     */
+      ascii->L       = 0;/* init to 0, so we can count residues as we go */
+      esl_sq_SetSource(sq, sq->name);
+      /* the <ascii->buf> is now positioned at the start of seq data */
+      /* ascii->linenumber is ok where it is */
+      /* the header_*() routines initialized rpl,bpl bookkeeping at start of seq line,
+       * and also sq->doff,roff.
+       */
+    }
+    else
+    { /* else we're reading a window other than first; slide context over. */
+      sq->C = ESL_MIN(C, sq->n);
+
+      /* if the case where the window is smaller than the context and the
+       * context is not full, it is not necessary to move the context part
+       * of the sequence that has been read in.
+       */
+      if (sq->C >= C) {
+         /* now handle the case where the context is full */
+         if (sq->seq != NULL) memmove(sq->seq,   sq->seq + sq->n - sq->C,     sq->C);
+         else                 memmove(sq->dsq+1, sq->dsq + sq->n - sq->C + 1, sq->C);
+         sq->start = ascii->L - sq->C + 1;
+         sq->n = C;
+      }
+    }
+
+    if ((status = esl_sq_GrowTo(sq, C+W)) != eslOK)                return status; /* EMEM    */
+    status = read_nres(sqfp, sq, 0, W, &nres);
+    ascii->L += nres;
+
+    if (status == eslEOD)
+    { /* Forward strand is done. 0 residues were read. Return eslEOD and an empty (info) <sq>. */
+      if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status;
+
+      sq->start      = 0;
+      sq->end        = 0;
+      sq->C          = 0;
+      sq->W          = 0;
+      sq->L          = ascii->L;
+      sq->n          = 0;
+
+      if (ascii->nc > 0) {
+        ascii->bookmark_offset  = ascii->boff+ascii->bpos; /* remember where the next seq starts. */
+        //ascii->bookmark_linenum = ascii->bookmark_linenum;
+      } else {
+        ascii->bookmark_offset  = 0;                     /* signals for EOF, no more seqs        */
+        ascii->bookmark_linenum = 0;
+      }
+
+      if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL; /* erase the saved context */
+      else                 sq->seq[0] = '\0';
+      return eslEOD;
+    }
+    else if (status == eslOK)
+    { /* Forward strand is still in progress. <= W residues were read. Return eslOK. */
+      sq->end        = sq->start + sq->C + nres - 1;
+      sq->W          = nres;
+      return eslOK;
+    }
+    else return status;/* EFORMAT,EMEM */
+  }
+  /*NOTREACHED*/
+  return eslOK;
+
+ ERROR:
+  if (tmpsq != NULL) esl_sq_Destroy(tmpsq);
+  return status;
+}
+
+/* Function:  sqascii_ReadBlock()
+ * Synopsis:  Read the next block of sequences from a file.
+ *
+ * Purpose:   Reads a block of sequences from open sequence file <sqfp> into 
+ *            <sqBlock>.
+ *
+ *            In the case that <long_target> is false, the sequences are
+ *            expected to be protein - individual sequences won't be long
+ *            so read them in one-whole-sequence at a time. If <max_sequences> is set
+ *            to a number > 0 read <max_sequences> sequences, up to at most
+ *            MAX_RESIDUE_COUNT residues.
+ *
+ *            If <long_target> is true, the sequences are expected to be DNA.
+ *            Because sequences in a DNA database can exceed MAX_RESIDUE_COUNT,
+ *            this function uses ReadWindow to read chunks of sequence no
+ *            larger than <max_residues>, and must allow for the possibility that a
+ *            request will be made to continue reading a partly-read
+ *            sequence. This case also respects the <max_sequences> limit.
+ *
+ * Returns:   <eslOK> on success; the new sequence is stored in <sqBlock>.
+ * 
+ *            Returns <eslEOF> when there is no sequence left in the
+ *            file (including first attempt to read an empty file).
+ * 
+ *            Returns <eslEFORMAT> if there's a problem with the format,
+ *            such as an illegal character; the line number that the parse
+ *            error occurs on is in <sqfp->linenumber>, and an informative
+ *            error message is placed in <ascii->errbuf>. 
+ *
+ * Throws:    <eslEMEM> on allocation failure;
+ *            <eslEINCONCEIVABLE> on internal error.
+ */
+static int
+sqascii_ReadBlock(ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target)
+{
+  int     i = 0;
+  int     size = 0;
+  int     status = eslOK;
+  ESL_SQ *tmpsq = NULL;
+
+  sqBlock->count = 0;
+  if (max_sequences < 1 || max_sequences > sqBlock->listSize)
+    max_sequences = sqBlock->listSize;
+
+
+  if ( !long_target  )
+  {  /* in these cases, an individual sequence won't ever be really long,
+      so just read in a sequence at a time  */
+
+    for (i = 0; i < max_sequences && size < MAX_RESIDUE_COUNT; ++i)
+    {
+      status = sqascii_Read(sqfp, sqBlock->list + i);
+
+      if (status != eslOK) break;
+      size += sqBlock->list[i].n;
+      ++sqBlock->count;
+    }
+  }
+  else
+  { /* DNA, not an alignment.  Might be really long sequences */
+
+    if (max_residues < 1)
+      max_residues = MAX_RESIDUE_COUNT;
+
+    tmpsq = esl_sq_Create();
+
+    //if complete flag is set to FALSE, then the prior block must have ended with a window that was a possibly
+    //incomplete part of it's full sequence. Read another overlapping window.
+    if (! sqBlock->complete )
+    {
+      //overloading C as indicator of how big C should be for this window reading action
+      status = sqascii_ReadWindow(sqfp, sqBlock->list->C, max_residues, sqBlock->list);
+      if (status == eslOK)
+      {
+        sqBlock->count = i = 1;
+        size = sqBlock->list->n - sqBlock->list->C;
+        sqBlock->list->L = sqfp->data.ascii.L;
+        if (size == max_residues)
+        { // Filled the block with a single very long window.
+
+          sqBlock->complete = FALSE; // default value, unless overridden below
+          status = skip_whitespace(sqfp);
+          if ( status != eslOK ) { // either EOD or end of buffer (EOF) was reached before the next character was seen
+            sqBlock->complete = TRUE;
+            status = eslOK;
+          }
+
+          if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+          return status;
+        }
+        else
+        {
+          // Burn off EOD (see notes for similar entry ~25 lines below), then go fetch the next sequence
+          esl_sq_Reuse(tmpsq);
+          tmpsq->start =  sqBlock->list->start ;
+          tmpsq->C = 0;
+          status = sqascii_ReadWindow(sqfp, 0, max_residues, tmpsq);
+          if (status != eslEOD) {
+            if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+            return status; //surprising
+          }
+          //sqBlock->list->L = tmpsq->L;
+        }
+      }
+      else if (status == eslEOD)
+      { // turns out there isn't any more of the sequence to read, after all
+      }
+      else
+      {
+         if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+         return status;
+       }
+    } // otherwise, just start at the beginning
+
+
+    for (  ; i < max_sequences && size < max_residues; ++i) {
+      /* restricted request_size is used to ensure that all blocks are pretty close to the
+       * same size. Without it, we may either naively keep asking for max_residue windows,
+       * which can result in a window with ~2*max_residues ... or we can end up with absurdly
+       * short fragments at the end of blocks
+       */
+      int request_size = ESL_MAX(max_residues-size, max_residues * .05);
+
+      esl_sq_Reuse(tmpsq);
+      esl_sq_Reuse(sqBlock->list + i);
+
+      status = sqascii_ReadWindow(sqfp, 0, request_size , sqBlock->list + i);
+      if (status != eslOK && status != eslEOD) break; /* end of sequences (eslEOF), or we read an empty seq (eslEOD) or error (other)  */
+      size += sqBlock->list[i].n - sqBlock->list[i].C;
+      sqBlock->list[i].L = sqfp->data.ascii.L;
+      ++(sqBlock->count);
+
+      if (size >= max_residues) {
+        // a full window worth of sequence has been read; did we reach the end of the final sequence in the block?
+        sqBlock->complete = FALSE; // default value, unless overridden below
+
+        status = skip_whitespace(sqfp);
+        if ( status != eslOK ) { // either EOD or end of buffer (EOF) was reached before the next character was seen
+          sqBlock->complete = TRUE;
+          status = eslOK;
+        }
+
+        if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+        return status;
+      } else if(status == eslEOD) {
+        /* We've read an empty sequence of length 0, rare, but
+         * possible, and we need to be able to handle it
+         * gracefully. Ensure L is 0, set status to eslOK and move
+         * on, we've already incremented sqBlock->count by 1
+         * above. This means our block may contain zero-length
+         * sequences when we return (that is, we still add these
+         * seqs onto the block instead of skipping them altogether).
+         */
+        sqBlock->list[i].L = 0; /* actually, this should already be 0... */
+        status = eslOK;
+      } else {
+        /* Sequence finished, but haven't yet reached max_residues. Need to burn off the EOD value
+           that will be returned by the next ReadWindow call. Can just use a tmp sq, after setting
+           a couple values ReadWindow needs to see for correct processing.
+        */
+        esl_sq_Reuse(tmpsq);
+        tmpsq->start =  sqBlock->list[i].start ;
+        tmpsq->C = 0;
+        status = sqascii_ReadWindow(sqfp, 0, max_residues, tmpsq);
+
+        if (status != eslEOD) {
+          if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+          return status; //surprising
+        }
+        //sqBlock->list[i].L = tmpsq->L;
+        status = eslOK;
+      }
+    }
+  }
+  
+  /* EOF will be returned only in the case were no sequences were read */
+  if (status == eslEOF && i > 0) status = eslOK;
+  
+  sqBlock->complete = TRUE;
+
+  if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+
+  return status;
+}
+
+/* Function:  sqascii_Echo()
+ * Synopsis:  Echo a sequence's record onto output stream.
+ *
+ * Purpose:   Given a complete <sq> that we have read by some means
+ *            from an open <sqfp>; echo that sequence's record
+ *            onto the output stream <ofp>. 
+ *
+ *            This allows records to be regurgitated exactly as they
+ *            appear, rather than writing the subset of information
+ *            stored in an <ESL_SQ>. <esl-sfetch> in the miniapps uses
+ *            this, for example.
+ *            
+ *            Because this relies on repositioning the <sqfp>, it
+ *            cannot be called on non-positionable streams (stdin or
+ *            gzipped files). Because it relies on the sequence lying
+ *            in a contiguous sequence of bytes in the file, it cannot
+ *            be called on a sequence in a multiple alignment file.
+ *            Trying to do so throws an <eslEINVAL> exception.
+ *            
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEINVAL>   if <sqfp> isn't a repositionable sequence file.
+ *            <eslECORRUPT> if we run out of data, probably from bad offsets
+ *            <eslEMEM>     on allocation failure.
+ *            <eslESYS>     on system call failures.
+ *            
+ *            
+ */
+static int
+sqascii_Echo(ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp)
+{
+  int     status;
+  int64_t save_linenumber;
+  int     save_currpl;
+  int     save_curbpl;
+  int     save_prvrpl;
+  int     save_prvbpl;
+  int64_t save_L;
+  int     n;
+  int     nwritten;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->do_stdin)                    ESL_EXCEPTION(eslEINVAL, "can't Echo() a sequence from standard input");
+  if (ascii->do_gzip)                     ESL_EXCEPTION(eslEINVAL, "can't Echo() a sequence from a gzipped file");
+  if (esl_sqio_IsAlignment(sqfp->format)) ESL_EXCEPTION(eslEINVAL, "can't Echo() a sequence from an alignment file");
+  if (sq->roff == -1 || sq->eoff == -1)   ESL_EXCEPTION(eslEINVAL, "can't Echo() a sequence without disk offset info");
+
+  save_linenumber = ascii->linenumber;
+  save_currpl     = ascii->currpl;
+  save_curbpl     = ascii->curbpl;
+  save_prvrpl     = ascii->prvrpl;
+  save_prvbpl     = ascii->prvbpl;
+  save_L          = ascii->L;
+
+  status = esl_sqfile_Position(sqfp, sq->roff);
+  if      (status == eslEOF) ESL_EXCEPTION(eslECORRUPT, "repositioning failed; bad offset?");
+  else if (status != eslOK)  return status;
+
+  while (ascii->boff + ascii->nc <= sq->eoff)
+    {
+      if (fwrite(ascii->buf, sizeof(char), ascii->nc, ofp) != ascii->nc) ESL_EXCEPTION(eslESYS, "fwrite() failed");
+      if (loadbuf(sqfp) != eslOK)  ESL_EXCEPTION(eslECORRUPT, "repositioning failed; bad offset?");
+    } 
+  n =  sq->eoff - ascii->boff + 1;
+  nwritten = fwrite(ascii->buf, sizeof(char), n, ofp);
+  if (nwritten != n) ESL_EXCEPTION(eslESYS, "fwrite() failed");
+
+  status = esl_sqfile_Position(sqfp, sq->roff);
+  if      (status == eslEOF) ESL_EXCEPTION(eslECORRUPT, "repositioning failed; bad offset?");
+  else if (status != eslOK)  return status;
+
+  ascii->linenumber = save_linenumber;
+  ascii->currpl     = save_currpl;
+  ascii->curbpl     = save_curbpl;
+  ascii->prvrpl     = save_prvrpl;
+  ascii->prvbpl     = save_prvbpl;
+  ascii->L          = save_L;
+  return eslOK;
+}
+/*------------------ end, sequential sequence input -------------*/
+
+
+/*****************************************************************
+ *# 5. Sequence/subsequence fetching, random access [with <ssi>]
+ *****************************************************************/
+#ifdef eslAUGMENT_SSI
+
+/* Function:  sqascii_OpenSSI()
+ * Synopsis:  Opens an SSI index associated with a sequence file.
+ *
+ * Purpose:   Opens an SSI index file associated with the already open
+ *            sequence file <sqfp>. If successful, the necessary
+ *            information about the open SSI file is stored internally
+ *            in <sqfp>.
+ *            
+ *            The SSI index file name is determined in one of two
+ *            ways, depending on whether a non-<NULL> <ssifile_hint>
+ *            is provided.
+ *            
+ *            If <ssifile_hint> is <NULL>, the default for
+ *            constructing the SSI filename from the sequence
+ *            filename, by using exactly the same path (if any) for
+ *            the sequence filename, and appending the suffix <.ssi>.
+ *            For example, the SSI index for <foo> is <foo.ssi>, for
+ *            <./foo.fa> is <./foo.fa.ssi>, and for
+ *            </my/path/to/foo.1.fa> is </my/path/to/foo.1.fa.ssi>.
+ *            
+ *            If <ssifile_hint> is <non-NULL>, this exact fully
+ *            qualified path is used as the SSI file name.
+ *
+ * Returns:   <eslOK> on success, and <sqfp->ssi> is now internally
+ *            valid.
+ *            
+ *            <eslENOTFOUND> if no SSI index file is found;
+ *            <eslEFORMAT> if it's found, but appears to be in incorrect format;
+ *            <eslERANGE> if the SSI file uses 64-bit offsets but we're on
+ *            a system that doesn't support 64-bit file offsets.
+ *
+ * Throws:    <eslEINVAL> if the open sequence file <sqfp> doesn't
+ *            correspond to a normal sequence flatfile -- we can't
+ *            random access in .gz compressed files, standard input,
+ *            or multiple alignment files that we're reading
+ *            sequentially.
+ *            
+ *            Throws <eslEMEM> on allocation error.
+ */
+static int
+sqascii_OpenSSI(ESL_SQFILE *sqfp, const char *ssifile_hint)
+{
+  int status;
+  
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->do_gzip)     ESL_EXCEPTION(eslEINVAL, "can't open an SSI index for a .gz compressed seq file");
+  if (ascii->do_stdin)    ESL_EXCEPTION(eslEINVAL, "can't open an SSI index for standard input");
+  if (ascii->afp != NULL) ESL_EXCEPTION(eslEINVAL, "can't open an SSI index for sequential input from an MSA");
+
+  if (ssifile_hint == NULL) {
+    if ((status = esl_strdup(sqfp->filename, -1, &(ascii->ssifile)))           != eslOK) return status;
+    if ((status = esl_strcat(&(ascii->ssifile), -1, ".ssi", 4))                != eslOK) return status;
+  } else {
+    if ((status = esl_strdup(ssifile_hint, -1, &(ascii->ssifile)))             != eslOK) return status;
+  }
+
+  return esl_ssi_Open(ascii->ssifile, &(ascii->ssi));
+}
+
+
+
+/* Function:  sqascii_PositionByKey()
+ * Synopsis:  Use SSI to reposition seq file to a particular sequence.
+ *
+ * Purpose:   Reposition <sqfp> so that the next sequence we read will
+ *            be the one named (or accessioned) <key>.
+ *            
+ *            <sqfp->linenumber> is reset to be relative to the start
+ *            of the record named <key>, rather than the start of the
+ *            file.
+ *
+ * Returns:   <eslOK> on success, and the file <sqfp> is repositioned
+ *            so that the next <esl_sqio_Read()> call will read the
+ *            sequence named <key>.
+ *            
+ *            Returns <eslENOTFOUND> if <key> isn't found in the
+ *            index; in this case, the position of <sqfp> in the file
+ *            is unchanged.
+ *            
+ *            Returns <eslEFORMAT> if something goes wrong trying to
+ *            read the index, almost certainly indicating a format
+ *            problem in the SSI file.
+ *            
+ *            Returns <eslEOF> if, after repositioning, we fail to
+ *            load the next line or buffer from the sequence file;
+ *            this probably also indicates a format problem in the SSI
+ *            file.
+ * 
+ * Throws:    <eslEMEM>   on allocation error;
+ *            <eslEINVAL> if there's no open SSI index in <sqfp>;
+ *            <eslESYS>   if the <fseek()> fails.
+ *            
+ *            In all these cases, the state of <sqfp> becomes
+ *            undefined, and the caller should not use it again.
+ */
+static int
+sqascii_PositionByKey(ESL_SQFILE *sqfp, const char *key)
+{
+  uint16_t fh;
+  off_t    offset;
+  int      status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->ssi == NULL)                          ESL_EXCEPTION(eslEINVAL,"Need an open SSI index to call esl_sqfile_PositionByKey()");
+  if ((status = esl_ssi_FindName(ascii->ssi, key, &fh, &offset, NULL, NULL)) != eslOK) return status;
+  return esl_sqfile_Position(sqfp, offset);
+}
+
+
+/* Function:  sqascii_PositionByNumber()
+ * Synopsis:  Use SSI to reposition by sequence number
+ *
+ * Purpose:   Reposition <sqfp> so that the next sequence we 
+ *            read will be the <which>'th sequence, where <which>
+ *            is <0..sqfp->ssi->nprimary-1>. 
+ *            
+ *            <sqfp->linenumber> is reset to be relative to the start
+ *            of the record named <key>, rather than the start of the
+ *            file.
+ *
+ * Returns:   <eslOK> on success, and the file <sqfp> is repositioned.
+ *            
+ *            Returns <eslENOTFOUND> if there is no sequence number
+ *            <which> in the index; in this case, the position of
+ *            <sqfp> in the file is unchanged.
+ *            
+ *            Returns <eslEFORMAT> if something goes wrong trying to
+ *            read the index, almost certainly indicating a format
+ *            problem in the SSI file.
+ *            
+ *            Returns <eslEOF> if, after repositioning, we fail to
+ *            load the next line or buffer from the sequence file;
+ *            this probably also indicates a format problem in the SSI
+ *            file.
+ * 
+ * Throws:    <eslEMEM>   on allocation error;
+ *            <eslEINVAL> if there's no open SSI index in <sqfp>;
+ *            <eslESYS>   if the <fseek()> fails.
+ *            
+ *            In all these cases, the state of <sqfp> becomes
+ *            undefined, and the caller should not use it again.
+ */
+static int
+sqascii_PositionByNumber(ESL_SQFILE *sqfp, int which)
+{
+  uint16_t fh;
+  off_t    offset;
+  int      status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->ssi == NULL)                          ESL_EXCEPTION(eslEINVAL,"Need open SSI index to call esl_sqfile_PositionByNumber()");
+  if ((status = esl_ssi_FindNumber(ascii->ssi, which, &fh, &offset, NULL, NULL, NULL)) != eslOK) return status;
+  return esl_sqfile_Position(sqfp, offset);
+}
+
+
+/* Function:  sqascii_Fetch()
+ * Synopsis:  Fetch a complete sequence, using SSI indexing.
+ *
+ * Purpose:   Fetch a sequence named (or accessioned) <key> from
+ *            the repositionable, open sequence file <sqfp>.
+ *            The open <sqfp> must have an open SSI index.
+ *            The sequence is returned in <sq>.
+ *
+ * Returns:   <eslOK> on soccess.
+ *            <eslEINVAL> if no SSI index is present, or if <sqfp> can't
+ *            be repositioned.
+ *            <eslENOTFOUND> if <source> isn't found in the file.
+ *            <eslEFORMAT> if either the index file or the sequence file
+ *            can't be parsed, because of unexpected format issues.
+ *       
+ * Throws:    <eslEMEM> on allocation error.
+ */
+static int
+sqascii_Fetch(ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq)
+{
+  int status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->ssi == NULL) ESL_FAIL(eslEINVAL, ascii->errbuf, "No SSI index for %s; can't fetch subsequences", sqfp->filename);
+  if ((status = sqascii_PositionByKey(sqfp, key)) != eslOK) return status;
+  if ((status = sqascii_Read(sqfp, sq))           != eslOK) return status;
+  return eslOK;
+}
+  
+/* Function:  sqascii_FetchInfo()
+ * Synopsis:  Fetch a sequence's info, using SSI indexing.
+ *
+ * Purpose:   Fetch a sequence named (or accessioned) <key> from
+ *            the repositionable, open sequence file <sqfp>, reading
+ *            all info except the sequence (and secondary structure).
+ *            The open <sqfp> must have an open SSI index.
+ *            The sequence info is returned in <sq>.
+ *
+ * Returns:   <eslOK> on soccess.
+ *            <eslEINVAL> if no SSI index is present, or if <sqfp> can't
+ *            be repositioned.
+ *            <eslENOTFOUND> if <source> isn't found in the file.
+ *            <eslEFORMAT> if either the index file or the sequence file
+ *            can't be parsed, because of unexpected format issues.
+ *       
+ * Throws:    <eslEMEM> on allocation error.
+ */
+static int
+sqascii_FetchInfo(ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq)
+{
+  int status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->ssi == NULL) ESL_FAIL(eslEINVAL, ascii->errbuf, "No SSI index for %s; can't fetch subsequences", sqfp->filename);
+  if ((status = sqascii_PositionByKey(sqfp, key)) != eslOK) return status;
+  if ((status = sqascii_ReadInfo(sqfp, sq))         != eslOK) return status;
+  return eslOK;
+}
+  
+
+/* Function:  sqascii_FetchSubseq()
+ * Synopsis:  Fetch a subsequence, using SSI indexing.
+ *
+ * Purpose:   Fetch subsequence <start..end> from a sequence named (or
+ *            accessioned) <source>, in the repositionable, open sequence file <sqfp>.
+ *            The open <sqfp> must have an SSI index. Put the
+ *            subsequence in <sq>. 
+ *            
+ *            As a special case, if <end> is 0, the subsequence is
+ *            fetched all the way to the end, so you don't need to
+ *            look up the sequence length <L> to fetch a suffix.
+ *            
+ *            The caller may want to rename/reaccession/reannotate the
+ *            subsequence.  Upon successful return, <sq->name> is set
+ *            to <source/start-end>, and <sq->source> is set to
+ *            <source> The accession and description <sq->acc> and
+ *            <sq->desc> are set to the accession and description of
+ *            the source sequence.
+ *            
+ * Returns:   <eslOK> on success.
+ *            <eslEINVAL> if no SSI index is present, or if <sqfp> can't
+ *            be repositioned.
+ *            <eslENOTFOUND> if <source> isn't found in the file.
+ *            <eslEFORMAT> if either the index file or the sequence file
+ *            can't be parsed, because of unexpected format issues.
+ *            <eslERANGE> if the <start..end> coords don't lie entirely
+ *            within the <source> sequence.
+ *
+ * Throws:    <eslEMEM> on allocation errors.
+ */
+static int
+sqascii_FetchSubseq(ESL_SQFILE *sqfp, const char *source, int64_t start, int64_t end, ESL_SQ *sq)
+{
+  uint16_t fh;/* SSI file handle */
+  off_t    r_off, d_off;
+  int64_t  L;
+  int64_t  actual_start;
+  int64_t  nskip;
+  int64_t  nres;
+  int64_t  n;
+  int      status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->ssi == NULL) ESL_FAIL(eslEINVAL, ascii->errbuf, "No SSI index for %s; can't fetch subsequences", sqfp->filename);
+
+  /* Find sequence info in the index */
+  status = esl_ssi_FindSubseq(ascii->ssi, source, start, &fh, &r_off, &d_off, &L, &actual_start);
+  if      (status == eslENOTFOUND) ESL_FAIL(status, ascii->errbuf, "Didn't find sequence %s in the index", source);
+  else if (status == eslEFORMAT)   ESL_FAIL(status, ascii->errbuf, "Failure reading SSI index; corrupt or bad format");
+  else if (status == eslERANGE)    ESL_FAIL(status, ascii->errbuf, "Requested start %" PRIi64 " isn't in the sequence %s", start, source);
+  else if (status != eslOK)        ESL_FAIL(status, ascii->errbuf, "Unexpected failure in finding subseq offset");
+
+  /* The special case of end=0, asking for suffix fetch */
+  if (end == 0) end = L;
+
+  /* Validate coords if we can */
+  if (start > end)       ESL_FAIL(eslERANGE, ascii->errbuf, "Subsequence start %" PRIi64 " is greater than end %" PRIi64 "\n", start, end);
+  if (L > 0 && end > L)  ESL_FAIL(eslERANGE, ascii->errbuf, "Subsequence end %" PRIi64 " is greater than length %" PRIi64 "\n", end, L);
+
+  /* Position the file at the record header; read the header info */
+  status = esl_sqfile_Position(sqfp, r_off);
+  if      (status == eslEOF)    ESL_FAIL(status, ascii->errbuf, "Position appears to be off the end of the file");
+  else if (status == eslEINVAL) ESL_FAIL(status, ascii->errbuf, "Sequence file is not repositionable");
+  else if (status != eslOK)     ESL_FAIL(status, ascii->errbuf, "Failure in positioning sequence file");
+  if ((status = ascii->parse_header(sqfp, sq)) != eslOK) return status;
+
+  /* Position the file close to the subseq: either at the start of the line
+   * where the subseq starts, or exactly at the residue.
+   */
+  if (d_off != 0) 
+    {
+      status = esl_sqfile_Position(sqfp, d_off);
+      if      (status == eslEOF)    ESL_FAIL(eslERANGE, ascii->errbuf, "Position appears to be off the end of the file");
+      else if (status == eslEINVAL) ESL_FAIL(status,    ascii->errbuf, "Sequence file is not repositionable");
+      else if (status != eslOK)     ESL_FAIL(status,    ascii->errbuf, "Failure in positioning sequence file");
+    }
+  /* even if we didn't have a data offset, we're positioned at the
+   * start of the sequence anyway, because we parsed the full header 
+   */
+  nskip = start - actual_start; /* how many residues do we still need to skip to reach start       */
+  nres  = end - start + 1;   /* how many residues do we need to read as subseq                  */
+
+  if ((status = esl_sq_GrowTo(sq, nres)) != eslOK) return status;
+  status = read_nres(sqfp, sq, nskip, nres, &n);
+  if (status != eslOK || n < nres) ESL_EXCEPTION(eslEINCONCEIVABLE, "Failed to fetch subsequence residues -- corrupt coords?");
+
+  /* Set the coords */
+  sq->start = start;
+  sq->end   = end;
+  sq->C     = 0;
+  sq->W     = sq->n;
+  sq->L     = (L > 0 ? L : -1);
+  esl_sq_FormatName(sq, "%s/%d-%d", source, start, end);
+  esl_sq_SetSource (sq, source);
+  return eslOK;
+}  
+#endif /*eslAUGMENT_SSI*/
+/*------------- end, random sequence access with SSI -------------------*/
+
+
+/*****************************************************************
+ * 6. Internal routines shared by parsers
+ *****************************************************************/
+
+
+/* loadmem() 
+ *
+ * Load the next block of data from stream into mem buffer,
+ * either concatenating to previous buffer (if we're recording) or
+ * overwriting (if not). 
+ * 
+ * This block is loaded at sqfp->mem + sqfp->mpos.
+ * 
+ * Upon return:
+ * sqfp->mem     now contains up to eslREADBUFSIZE more chars
+ * sqfp->mpos    is position of first byte in newly read block
+ * sqfp->allocm  may have increased by eslREADBUFSIZE, if we concatenated
+ * sqfp->mn      is # of chars in <mem>; <mn-1> is pos of last byte in new block
+ * 
+ * Returns <eslEOF> (and mpos == mn) if no new data can be read;
+ * Returns <eslOK>  (and mpos < mn) if new data is read. 
+ * Throws <eslEMEM> on allocation error.
+ */
+static int
+loadmem(ESL_SQFILE *sqfp)
+{
+  void *tmp;
+  int   n = 0;
+  int   status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->do_buffer)
+  {
+      ascii->mpos = 0;
+      ascii->mn   = 0;
+  }
+  else if (ascii->is_recording == TRUE)
+  {
+      if (ascii->mem == NULL) ascii->moff = ftello(ascii->fp);        /* first time init of the offset */
+      ESL_RALLOC(ascii->mem, tmp, sizeof(char) * (ascii->allocm + eslREADBUFSIZE));
+      ascii->allocm += eslREADBUFSIZE;
+      n = fread(ascii->mem + ascii->mpos, sizeof(char), eslREADBUFSIZE, ascii->fp);
+      ascii->mn += n;
+  }
+  else
+  {
+      if (ascii->mem == NULL) {
+        ESL_ALLOC(ascii->mem, sizeof(char) * eslREADBUFSIZE);
+        ascii->allocm = eslREADBUFSIZE;
+      }
+      ascii->is_recording = -1;/* no more recording is possible now */
+      ascii->mpos = 0;
+      ascii->moff = ftello(ascii->fp);
+      n = fread(ascii->mem, sizeof(char), eslREADBUFSIZE, ascii->fp); /* see note [1] below */
+      ascii->mn   = n;
+  }
+  return (n == 0 ? eslEOF : eslOK);
+
+ ERROR:
+  return status;
+}
+
+/* [1] Be alert for a possible problem above in that fread().
+ *     Farrar had inserted an alternative case as follows:
+ *     "If we are reading from stdin, buffered read cannot be used
+ *      because if will block until EOF or the buffer is full, ie
+ *      eslREADBUFSIZE characters have been read.  Usually this would
+ *      not be a problem, unless stdin is from a pipe.  In that case
+ *      if the sequence is less than eslREADBUFSIZE we would block.
+ *
+ *      NOTE:  any changes to the IO stream ascii->fp, such as fseek, 
+ *      might not have any affect on the file descriptor for the stream.
+ *
+ *   if (ascii->do_stdin) {
+ *     n = read(fileno(ascii->fp), ascii->mem, eslREADBUFSIZE);
+ *   } else {
+ *   ...
+ *  
+ * but that's a bug, because you can't mix read and fread;
+ * the i17-stdin.pl test fails, in particular.
+ */
+
+
+
+
+/* loadbuf()
+ * Set sqfp->buf to contain next line of data, or point to next block.
+ * This might just mean working with previously buffered memory in <sqfp->mem>
+ * or might require reading new data from <sqfp->fp>.
+ *
+ * Reset sqfp->boff to be the position of the start of the block/line.
+ * Reset sqfp->bpos to 0.
+ * Reset sqfp->nc to the number of chars (bytes) in the new block/line.
+ * Returns eslOK on success; eslEOF if there's no more data in the file.
+ * (sqfp->nc == 0 is the same as eslEOF: no data in the new buffer.)
+ * Can throw an <eslEMEM> error.
+ */
+static int
+loadbuf(ESL_SQFILE *sqfp)
+{
+  void *tmp;
+  char *nlp;
+  int   n;
+  int   status = eslOK;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (! ascii->is_linebased)
+  {
+      if (ascii->mpos >= ascii->mn) {
+        if ((status = loadmem(sqfp)) == eslEMEM) return status;
+      }
+      ascii->buf    = ascii->mem  + ascii->mpos;
+      ascii->boff   = ascii->moff + ascii->mpos;
+      ascii->balloc = 0;
+      ascii->bpos   = 0;
+      ascii->nc     = ascii->mn - ascii->mpos;
+      ascii->mpos  += ascii->mn;
+  }
+  else
+  { /* Copy next line from <mem> into <buf>. Might require new load(s) into <mem>. */
+      if (ascii->mpos >= ascii->mn) {
+        if ((status = loadmem(sqfp)) == eslEMEM) return status;
+      }
+      ascii->boff = ascii->moff + ascii->mpos;      
+      ascii->nc   = 0;
+      nlp        = memchr(ascii->mem + ascii->mpos, '\n', ascii->mn - ascii->mpos);
+      while (nlp == NULL) 
+      {
+        n = ascii->mn - ascii->mpos;
+        while (ascii->nc + n + 1 > ascii->balloc) { /* +1: it'll hold the terminal \0 */
+          ESL_RALLOC(ascii->buf, tmp, sizeof(char) * (ascii->balloc + eslREADBUFSIZE));
+          ascii->balloc += eslREADBUFSIZE;
+        }
+        memcpy(ascii->buf + ascii->nc, ascii->mem + ascii->mpos, n);
+        ascii->mpos += n;
+        ascii->nc   += n;
+        status = loadmem(sqfp);
+        if      (status == eslEOF) { break; }
+        else if (status != eslOK)  return status;
+        nlp = memchr(ascii->mem + ascii->mpos, '\n', ascii->mn - ascii->mpos);
+      }
+      if (status != eslEOF) {
+        n = nlp - (ascii->mem + ascii->mpos) + 1; /* inclusive of \n */
+        if (ascii->nc + n + 1 > ascii->balloc) {
+          ESL_RALLOC(ascii->buf, tmp, sizeof(char) * (ascii->balloc + eslREADBUFSIZE));
+          ascii->balloc += eslREADBUFSIZE;
+        }
+        memcpy(ascii->buf + ascii->nc, ascii->mem + ascii->mpos, n);
+        ascii->mpos += n;
+        ascii->nc   += n;
+      }
+      ascii->bpos  = 0;
+      ascii->buf[ascii->nc] = '\0';
+  }
+  return (ascii->nc == 0 ? eslEOF : eslOK);
+
+ERROR:
+  return status;
+}
+
+/* nextchar()
+ * 
+ * Load next char from sqfp->buf into <*ret_c> and sets sqfp->bpos to
+ * its position; usually this is c = sqfp->buf[++sqfp->bpos], but
+ * we will refill the buffer w/ fresh fread() when needed, in which
+ * case c =  sqfp->buf[0] and sqfp->bpos = 0.
+ * 
+ * Returns <eslOK> on success.
+ * Return  <eslEOF> if we ran out of data in <sqfp>.
+ * May throw an <eslEMEM> error.
+ */
+static int
+nextchar(ESL_SQFILE *sqfp, char *ret_c)
+{
+  int status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  ascii->bpos++;
+  if (ascii->nc == ascii->bpos && (status = loadbuf(sqfp)) != eslOK) return status;
+  *ret_c = ascii->buf[ascii->bpos];
+  return eslOK;
+}
+
+/* seebuf()
+ * 
+ * Examine and validate the current buffer <sqfp->buf> from its
+ * current position <sqfp->bpos> until either the buffer ends (we run
+ * out of characters) or the sequence data ends (we see whatever
+ * character indicates EOD in this format) or we've seen <maxn>
+ * residues. If <maxn> is passed as -1, parse the entire buffer,
+ * without a residue limit.
+ * 
+ * There are three possible outcomes:
+ *   <eslOK>:      The buffer is all residues that belong to the current
+ *                 seq we're parsing (or chars we can ignore), at least
+ *                 up to the <maxn> residue limit (if present).
+ *   <eslEOD>:     Part of the buffer may be residues, but the current sequence
+ *                 ends in this buffer (before <maxn> was reached).
+ *   <eslEFORMAT>: Somewhere before we reached the end of the buffer or
+ *                 the sequence record, we saw an illegal character.
+ * 
+ * On <eslOK>:
+ *    *opt_nres    is the number of residues in the buffer (up to <maxn>)
+ *    *opt_endpos  is sqfp->nc (off the end of the buffer by one)
+ *    The caller will want to deal with the buffer, then load the next one.
+ *    
+ * On <eslEOD>: same as OK, except:
+ *    *opt_endpos  is where sqfp->bpos *would* be at when we saw the EOD
+ *                 signal (the next '>', in FASTA files) had we been parsing residues
+ *    Therefore on EOD, the caller will want to deal with the <*opt_nres>
+ *    residues in this buffer, then reposition the buffer by
+ *    <sqfp->bpos = *opt_epos> (without reloading the buffer), so
+ *    the next read will pick up there.
+ *    
+ * On <eslEFORMAT>:
+ *    ascii->errbuf  contains informative message about the format error.
+ *    
+ * seebuf() also handles linenumber and SSI bookkeeping in
+ * <sqfp>. Every newline character seen increments <linenumber> (thus,
+ * on EFORMAT return, linenumber is set to the line on which the bad
+ * char occurred). <curbpl>,<currpl>,<prvbpl>,<prvrpl> keep track of # of bytes,
+ * residues on the current,prev line; they keep state across calls to seebuf().
+ * <bpl>,<rpl> are tracking whether there's a constant number of
+ * bytes/residues per line; these are either -1 for "not set yet", 0
+ * for "no, not constant", or a number > 0. Because of this bookkeeping, it's important
+ * to make sure that <seebuf()> never counts the same byte twice (hence
+ * the need for the <maxn> limit, which ReadWindow() uses.)
+ */
+static int
+seebuf(ESL_SQFILE *sqfp, int64_t maxn, int64_t *opt_nres, int64_t *opt_endpos)
+{
+  int     bpos;
+  int64_t nres  = 0;
+  int64_t nres2 = 0;/* an optimization for determining lastrpl from nres, without incrementing lastrpl on every char */
+  int     sym;
+  ESL_DSQ x;
+  int     lasteol;
+  int     status  = eslOK;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  lasteol = ascii->bpos - 1;
+  if (maxn == -1) maxn = ascii->nc; /* makes for a more efficient test. nc is a guaranteed upper bound on nres */
+
+  for (bpos = ascii->bpos; nres < maxn && bpos < ascii->nc; bpos++)
+  {
+      sym = ascii->buf[bpos];
+      //printf ("nres: %d, bpos: %d  (%d)\n", nres, bpos, sym);
+      if (!isascii(sym)) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": non-ASCII character %c in sequence", ascii->linenumber, sym); 
+      x   = sqfp->inmap[sym];
+
+      if      (x <= 127) nres++;
+      else if (x == eslDSQ_EOL) 
+      {
+         if (ascii->curbpl != -1) ascii->curbpl += bpos - lasteol;
+         if (ascii->currpl != -1) ascii->currpl += nres - nres2;
+         nres2        += nres - nres2;
+
+         if (ascii->rpl != 0 && ascii->prvrpl != -1) { /* need to ignore counts on last line in record, hence cur/prv */
+           if      (ascii->rpl    == -1)        ascii->rpl = ascii->prvrpl; /* init */
+           else if (ascii->prvrpl != ascii->rpl) ascii->rpl = 0;           /* inval*/
+         }
+         if (ascii->bpl != 0 && ascii->prvbpl != -1) {
+           if      (ascii->bpl    == -1)        ascii->bpl = ascii->prvbpl; /* init  */
+           else if (ascii->prvbpl != ascii->bpl) ascii->bpl = 0;            /* inval */
+         }
+
+         ascii->prvbpl  = ascii->curbpl;
+         ascii->prvrpl  = ascii->currpl;
+         ascii->curbpl  = 0;
+         ascii->currpl  = 0;
+         lasteol       = bpos;
+         if (ascii->linenumber != -1) ascii->linenumber++;
+    }
+    else if (x == eslDSQ_ILLEGAL) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": illegal character %c", ascii->linenumber, sym);
+    else if (x == eslDSQ_EOD)     { status = eslEOD; break; }
+    else if (x != eslDSQ_IGNORED) ESL_FAIL(eslEFORMAT, ascii->errbuf, "inmap corruption?");
+  }
+
+  if (ascii->curbpl != -1) ascii->curbpl += bpos - lasteol - 1;
+  if (ascii->currpl != -1) ascii->currpl += nres - nres2;
+  if (opt_nres   != NULL) *opt_nres   = nres;
+  if (opt_endpos != NULL) *opt_endpos = bpos;
+  return status;
+}
+
+/* addbuf() 
+ * Add <nres> residues from the current buffer <sqfp->buf> to <sq>.
+ * This is designed to work when we're constructing a complete
+ * sequence (add the whole buffer); when we're adding a suffix
+ * of the buffer (<sqfp->bpos> is skipped ahead already);
+ * or when we're adding a prefix of the buffer (terminating a subseq
+ * or window load).
+ * 
+ * The caller must know that there are at least <nres> residues in
+ * this buffer, and that all the characters are valid in the
+ * format and alphabet, via a previous call to <seebuf()>. 
+ * 
+ * The caller also must have already allocated <sq> to hold at least
+ * <nres> more residues.
+ * 
+ * On input:
+ *   sqfp->buf[]  contains an fread() buffer
+ *   sqfp->bpos   is set to where we're going to start parsing residues
+ *   sqfp->nc     is the length of <buf>
+ *   
+ * On return:
+ *   sqfp->buf[]  still contains the same buffer (no new freads here)
+ *   sqfp->bpos   is set after the last residue we parsed 
+ *   sq->seq/dsq  now holds <nres> new residues
+ *   sq->n        is incremented by <nres>
+ */
+static void
+addbuf(ESL_SQFILE *sqfp, ESL_SQ *sq, int64_t nres)
+{
+  ESL_DSQ x;
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (sq->dsq != NULL) 
+    {
+      while (nres) {
+        x  = sq->abc->inmap[(int) ascii->buf[ascii->bpos++]];
+        if (x <= 127) { nres--; sq->dsq[++sq->n] = x; }
+      } /* we skipped IGNORED, EOL. EOD, ILLEGAL don't occur; seebuf() already checked  */
+    } 
+  else
+    {
+      while (nres) {
+        x   = sqfp->inmap[(int) ascii->buf[ascii->bpos++]];
+        if (x <= 127) { nres--; sq->seq[sq->n++] = x; }
+      }
+    }
+}
+
+/* skipbuf() 
+ * Like addbuf(), but we skip <nskip> residues instead of
+ * reading them.
+ */
+static void
+skipbuf(ESL_SQFILE *sqfp, int64_t nskip)
+{
+  ESL_DSQ x;
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  while (nskip) {
+    x  = sqfp->inmap[(int) ascii->buf[ascii->bpos++]];
+    if (x <= 127) nskip--;/* skip IGNORED, EOL. */
+  }
+}
+
+
+/* skip_whitespace()
+ * Like skipbuf(), but instead of skipping a fixed number of
+ * residues, skip forward until one of three conditions is met:
+ *
+ * (1) end of the sequence record (a character indicating
+ *     the beginning of a new sequence); set ascii->bpos
+ *     to the beginning of the new record, and return eslEOD;
+ * (2) a non-whitespace character in the current sequence is
+ *     reached that does not indicate the end of a sequence
+ *     record; set ascii->bpos to that character's position,
+ *     and return eslOK;
+ * (3) end of file;  return eslEOF.
+ *
+ */
+static int
+skip_whitespace(ESL_SQFILE *sqfp)
+{
+  int status;
+  int c;
+  ESL_DSQ x;
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->nc == 0)
+    return eslEOF;
+
+  c = (int) ascii->buf[ascii->bpos];
+  x  = sqfp->inmap[c];
+
+  while ( isspace(c) ) {
+
+    ascii->bpos++;
+
+    if (ascii->bpos == ascii->nc)
+      if ((status = loadbuf(sqfp)) == eslEOF)
+        return eslEOF;
+
+    c = (int) ascii->buf[ascii->bpos];
+    x  = sqfp->inmap[c];
+  }
+  if (x == eslDSQ_EOD)
+    return eslEOD;
+
+  return eslOK;
+}
+
+
+
+/* read_nres()
+ * Read the next <nres> residues from <sqfp> after skipping <nskip> residues, then stop.
+ * 
+ * Returns <eslOK> and <0 < *ret_actual_nres <= nres> if it succeeded, and
+ *                 there's more residues in the current seq record.
+ * Returns <eslEOD> and <*ret_actual_nres == 0> if no more residues are
+ *                 seen in the sequence record. 
+ * 
+ * Even on <eslEOD>, the <dsq/seq> is appropriately terminated here,
+ * and <sq->n> is left the way it was (no new residues added - but there
+ * may have been saved context C from a previous window).
+ *
+ * Returns <eslEFORMAT> on any parsing problem, and <ascii->errbuf> is set.
+ *
+ * On <eslOK>, sqfp->bpos is positioned on the next character past the last residue we store;
+ * on <eslEOD>, sqfp->bpos is positioned for reading the next sequence.
+ * 
+ * FetchSubseq() uses this with <nskip>, <nres>, and expects an
+ * <eslOK> with <*opt_actual_nres = nres>. On <EOD>, or if fewer than
+ * <nres> residues are obtained, the coords must've been screwed up,
+ * because we didn't read the whole subseq we asked for.
+ *
+ * ReadWindow() on forward strand uses this with <nskip=0>, <nres=W>.
+ * The last window might normally return <eslEOD> with
+ * <*ret_actual_nres == 0>, and now <sqfp->bpos> is positioned at the
+ * start of the next sequence on <EOD>, and at the next residue on
+ * <OK>.
+ * 
+ * ReadWindow() in reverse complement acts like a subseq fetch.
+ * 
+ */
+static int
+read_nres(ESL_SQFILE *sqfp, ESL_SQ *sq, int64_t nskip, int64_t nres, int64_t *opt_actual_nres)
+{
+  int64_t n;
+  int64_t epos;
+  int64_t actual_nres = 0;
+  int     status      = eslOK;
+  
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+  status = seebuf(sqfp, nskip+nres, &n, &epos);
+  while (status == eslOK && nskip - n > 0) {
+    nskip   -= n;
+    if ((status = loadbuf(sqfp)) == eslEOF) break;
+    status = seebuf(sqfp, nskip+nres, &n, &epos);
+  }
+  
+  if         (status == eslEOF) { 
+    if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Premature EOF before end of seq record");
+    if (nskip > 0)         ESL_EXCEPTION(eslECORRUPT, "premature EOD while trying to skip residues"); 
+    n = 0;
+  } else if  (status == eslEOD) { 
+    if (n < nskip)         ESL_EXCEPTION(eslECORRUPT, "premature EOD while trying to skip residues"); 
+  } else if  (status != eslOK) 
+    return status;
+
+  skipbuf(sqfp, nskip); 
+  n -= nskip; 
+
+  while (status == eslOK && nres - n > 0) 
+    {
+      addbuf(sqfp, sq, n);
+      actual_nres += n;
+      nres        -= n;
+      if ((status = loadbuf(sqfp)) == eslEOF) break;
+      status = seebuf(sqfp, nres, &n, &epos);
+    }
+
+
+  if        (status == eslEOF) { 
+    if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Premature EOF before end of seq record");
+    n = 0;
+  } else if  (status == eslEFORMAT) {
+    return status;
+  }
+
+  n = ESL_MIN(nres, n); 
+  addbuf(sqfp, sq, n);   /* bpos now at last residue + 1 if OK/EOD, 0 if EOF  */
+  actual_nres += n;
+
+  if (sq->dsq != NULL) sq->dsq[sq->n+1] = eslDSQ_SENTINEL;
+  else                 sq->seq[sq->n]   = '\0';
+  
+  if (status == eslEOD) { 
+    ascii->bpos = epos; 
+  }
+
+  if (opt_actual_nres != NULL) *opt_actual_nres = actual_nres;
+  return (actual_nres == 0 ? eslEOD : eslOK);
+}
+/*--------------- end, buffer-based parsers --------------------*/
+
+
+/*****************************************************************
+ *#  7. Internal routines for EMBL format (including UniProt, TrEMBL)
+ *****************************************************************/ 
+/* EMBL and UniProt protein sequence database format.
+ *   See: http://us.expasy.org/sprot/userman.html
+ *   and: http://www.ebi.ac.uk/embl/Documentation/User_manual/usrman.html#3
+ * We use the same parser for both formats, so we have to be 
+ * careful to only parse the conserved intersection of these two
+ * very similar formats.
+ */
+static void
+config_embl(ESL_SQFILE *sqfp)
+{
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  ascii->is_linebased      = TRUE;
+  ascii->eof_is_ok         = FALSE;/* records end with // */
+  ascii->parse_header      = &header_embl;
+  ascii->skip_header       = &skip_embl;
+  ascii->parse_end         = &end_embl;
+}
+
+static void
+inmap_embl(ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap)
+{
+  int x;
+
+  if (abc_inmap != NULL) {
+    for (x = 0; x < 128; x++) sqfp->inmap[x] = abc_inmap[x];
+  } else {
+    for (x =  0;  x < 128;  x++) sqfp->inmap[x] = eslDSQ_ILLEGAL;
+    for (x = 'A'; x <= 'Z'; x++) sqfp->inmap[x] = x;
+    for (x = 'a'; x <= 'z'; x++) sqfp->inmap[x] = x;
+  }
+  for (x = '0'; x <= '9'; x++)
+    sqfp->inmap[x] = eslDSQ_IGNORED;    /* EMBL DNA sequence format puts coordinates after each line */
+  sqfp->inmap['*']  = '*';         /* accept * as a nonresidue/stop codon character */
+  sqfp->inmap[' ']  = eslDSQ_IGNORED;
+  sqfp->inmap['\t'] = eslDSQ_IGNORED;
+  sqfp->inmap['\n'] = eslDSQ_IGNORED;
+  sqfp->inmap['\r'] = eslDSQ_IGNORED;/* DOS eol compatibility */
+  sqfp->inmap['/']  = eslDSQ_EOD;
+}
+
+/* header_embl()
+ * 
+ * See: http://us.expasy.org/sprot/userman.html
+ * And: http://www.ebi.ac.uk/embl/Documentation/User_manual/usrman.html#3
+ * Our parser must work on the highest common denominator of EMBL DNA
+ * and UniProt protein sequence files.
+ *
+ * sqfp->buf is the first (ID) line of the entry, or a blank line before
+ * it (in which case we'll scan forwards skipping blank lines to find 
+ * the ID line).
+ * 
+ * On success, returns <eslOK> and:
+ *   sq->name  contains sequence name (and may have been reallocated, changing sq->nalloc)
+ *   sq->acc   contains seq accession (and may have been reallocated, changing sq->aalloc)
+ *   sq->desc  contains description line (and may have been reallocated, changing sq->dalloc)
+ *   sq->roff  has been set to the record offset
+ *   sq->doff  has been set to the data offset (start of sequence line)
+ *   sqfp->buf is the first seq line.
+ * 
+ * If no more seqs are found in the file, returns <eslEOF>.
+ * On parse failure, returns <eslEFORMAT>, leaves as mesg in ascii->errbuf.
+ * 
+ * May also throw <eslEMEM> on allocation errors.
+ */
+static int
+header_embl(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  char *s;
+  char *tok;
+  int   status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  /* Find first line:
+   * "Each entry must begin with an identification line (ID)..."
+   * "The two-character line-type code that begins each line is always
+   *  followed by three blanks..."
+   */
+  if (ascii->nc == 0) return eslEOF;
+  while (esl_str_IsBlank(ascii->buf)) {
+    if ((status = loadbuf(sqfp)) == eslEOF) return eslEOF; /* normal */
+    else if (status != eslOK) return status; /* abnormal */
+  } 
+
+  /* ID line is defined as:
+   *     ID   ENTRY_NAME DATA_CLASS; MOLECULE_TYPE; SEQUENCE_LENGTH.
+   * We're only after the ENTRY_NAME.
+   * Examples:
+   *  ID   SNRPA_DROME    STANDARD;      PRT;   216 AA.
+   *  ID   SNRPA_DROME             Reviewed;         216 AA.
+   *  ID   X06347; SV 1; linear; mRNA; STD; HUM; 1209 BP.
+   */
+  if (strncmp(ascii->buf, "ID   ", 5) != 0) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to find ID line", ascii->linenumber);
+  
+  s = ascii->buf+5;
+  if ((status = esl_strtok(&s, " ;", &tok)) != eslOK)
+    ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to parse name on ID line", ascii->linenumber);
+  if ((status = esl_sq_SetName(sq, tok)) != eslOK) return status;
+  sq->roff = ascii->boff;/* record the offset of the ID line */
+  
+  /* Look for SQ line; parsing optional info as we go.
+   */
+  do {
+    if ((status = loadbuf(sqfp)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to find SQ line", ascii->linenumber);
+
+    /* "The format of the AC line is:
+     *    AC   AC_number_1;[ AC_number_2;]...[ AC_number_N;]
+     *  Researchers who wish to cite entries in their publications
+     *  should always cite the first accession number. This is
+     *  commonly referred to as the 'primary accession
+     *  number'."
+     *  
+     *  Examples:
+     *   AC   P43332; Q9W4D7;
+     *   AC   X06347;
+     *   
+     *  Note that Easel only stores primary accessions.
+     *  Because there can be more than one accession line, we check to 
+     *  see if the accession is already set before storing a line.
+     */
+    if (strncmp(ascii->buf, "AC   ", 5) == 0 && sq->acc[0] == '\0')
+    {
+      s = ascii->buf+5;
+      if ((status = esl_strtok(&s, ";", &tok)) != eslOK)
+        ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to parse accession on AC line", ascii->linenumber);
+      if ((status = esl_sq_SetAccession(sq, tok)) != eslOK) return status;
+    }
+
+    /* "The format of the DE line is:
+     *    DE   Description.
+     * ...In cases where more than one DE line is required, the text is
+     * only divided between words and only the last DE line is
+     * terminated by a period."
+     * 
+     * Examples:
+     *   DE   U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1-A) (Sex
+     *   DE   determination protein snf).
+     *   
+     *   DE   Human mRNA for U1 small nuclear RNP-specific A protein
+     *
+     *   DE   RecName: Full=U1 small nuclear ribonucleoprotein A;
+     *   DE            Short=U1 snRNP protein A;
+     *   DE            Short=U1-A;
+     *   DE   AltName: Full=Sex determination protein snf;
+     *
+     * We'll make no attempt to parse the structured UniProt description header,
+     * for the moment.
+     */
+    if (strncmp(ascii->buf, "DE   ", 5) == 0)
+    {
+      s = ascii->buf+5;
+      esl_strchop(s, ascii->nc-5);
+      if ((status = esl_sq_AppendDesc(sq, s)) != eslOK)
+        ESL_FAIL(status, ascii->errbuf, "Line %" PRId64 ": failed to parse description on DE line", ascii->linenumber);
+    }
+
+    /* UniProt: "The format of the SQ line is:
+     *  SQ   SEQUENCE XXXX AA; XXXXX MW; XXXXXXXXXXXXXXXX CRC64;"
+     * EMBL:    "The SQ (SeQuence header) line marks the beginning of 
+     *           the sequence data and Gives a summary of its content. 
+     *           An example is:
+     *  SQ   Sequence 1859 BP; 609 A; 314 C; 355 G; 581 T; 0 other;"
+     *  
+     * We don't parse this line; we just look for it as the last line
+     * before the sequence starts.
+     */
+  } while (strncmp(ascii->buf, "SQ   ", 5) != 0);
+
+  if (loadbuf(sqfp) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find any sequence");
+  sq->hoff = ascii->boff - 1;
+  sq->doff = ascii->boff;
+  return eslOK;
+}
+
+/* skip_embl()
+ * 
+ * Skip past the EMBL header and position to start of the sequence line.
+ * 
+ * On success, returns <eslOK> and:
+ *   sq->roff  has been set to the record offset
+ *   sq->doff  has been set to the data offset (start of sequence line)
+ *   sqfp->buf is the first seq line.
+ * 
+ * If no more seqs are found in the file, returns <eslEOF>.
+ * On parse failure, returns <eslEFORMAT>, leaves as mesg in ascii->errbuf.
+ * 
+ * May also throw <eslEMEM> on allocation errors.
+ */
+static int
+skip_embl(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int   status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  /* Find first line:
+   * "Each entry must begin with an identification line (ID)..."
+   * "The two-character line-type code that begins each line is always
+   *  followed by three blanks..."
+   */
+  if (ascii->nc == 0) return eslEOF;
+  while (esl_str_IsBlank(ascii->buf)) {
+    if ((status = loadbuf(sqfp)) == eslEOF) return eslEOF; /* normal */
+    else if (status != eslOK) return status; /* abnormal */
+  } 
+
+  /* ID line */
+  if (strncmp(ascii->buf, "ID   ", 5) != 0) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to find ID line", ascii->linenumber);
+  
+  sq->roff = ascii->boff;/* record the offset of the ID line */
+  
+  /* zero out the name, accession and description */
+  sq->name[0] = '\0';
+  sq->acc[0]  = '\0';
+  sq->desc[0] = '\0';
+  
+  /* Look for SQ line; parsing optional info as we go. */
+  do {
+    if ((status = loadbuf(sqfp)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to find SQ line", ascii->linenumber);
+  } while (strncmp(ascii->buf, "SQ   ", 5) != 0);
+
+  if (loadbuf(sqfp) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find any sequence");
+  sq->hoff = ascii->boff - 1;
+  sq->doff = ascii->boff;
+  return eslOK;
+}
+  
+static int
+end_embl(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (strncmp(ascii->buf, "//", 2) != 0) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": did not find // terminator at end of seq record", ascii->linenumber);
+  sq->eoff = ascii->boff + ascii->nc - 1;
+  status = loadbuf(sqfp);
+  if      (status == eslEOF) return eslOK; /* ok, actually. */
+  else if (status == eslOK)  return eslOK;
+  else                       return status;
+}
+
+/*---------------------- EMBL format ---------------------------------*/
+
+
+
+/*****************************************************************
+ *#  8. Internal routines for GenBank format 
+ *****************************************************************/ 
+/* NCBI GenBank sequence database format.
+ * See GenBank release notes; for example,
+ * ftp://ftp.ncbi.nih.gov/genbank/gbrel.txt
+ */
+
+static void
+config_genbank(ESL_SQFILE *sqfp)
+{
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  ascii->is_linebased      = TRUE;
+  ascii->eof_is_ok         = FALSE;/* records end with //  */
+  ascii->parse_header      = &header_genbank;
+  ascii->skip_header       = &skip_genbank;
+  ascii->parse_end         = &end_genbank;
+}
+
+static void
+inmap_genbank(ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap)
+{
+  int x;
+
+  if (abc_inmap != NULL) {
+    for (x = 0; x < 128; x++) sqfp->inmap[x] = abc_inmap[x];
+  } else {
+    for (x =  0;  x < 128;  x++) sqfp->inmap[x] = eslDSQ_ILLEGAL;
+    for (x = 'A'; x <= 'Z'; x++) sqfp->inmap[x] = x;
+    for (x = 'a'; x <= 'z'; x++) sqfp->inmap[x] = x;
+  }
+  for (x = '0'; x <= '9'; x++)
+    sqfp->inmap[x] = eslDSQ_IGNORED;
+  sqfp->inmap['*']  = '*';         /* accept * as a nonresidue/stop codon character */
+  sqfp->inmap[' ']  = eslDSQ_IGNORED;
+  sqfp->inmap['\t'] = eslDSQ_IGNORED;
+  sqfp->inmap['\n'] = eslDSQ_IGNORED;
+  sqfp->inmap['\r'] = eslDSQ_IGNORED;/* DOS eol compatibility */
+  sqfp->inmap['/']  = eslDSQ_EOD;
+}
+
+/* header_genbank()
+ * 
+ * sqfp->buf is the first (LOCUS) line of the entry, or a line before
+ * it (in which case we'll scan forwards to find the LOCUS line - even
+ * skipping non-blank lines, because there are sometimes headers at
+ * the start of GenBank files).
+ * 
+ * On success, returns <eslOK> and:
+ *   sq->name  contains sequence name (and may have been reallocated, changing sq->nalloc)
+ *   sq->acc   contains seq accession (and may have been reallocated, changing sq->aalloc)
+ *   sq->desc  contains description line (and may have been reallocated, changing sq->dalloc)
+ *   sq->roff  has been set to the record offset
+ *   sq->doff  has been set to the data offset (start of sequence line)
+ *   sqfp->buf is the first seq line.
+ * 
+ * If no more seqs are found in the file, returns <eslEOF>.
+ * On parse failure, returns <eslEFORMAT>, leaves as mesg in ascii->errbuf.
+ * 
+ * May also throw <eslEMEM> on allocation errors.
+ */
+static int
+header_genbank(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  char *s;
+  char *tok;
+  int   status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  /* Find LOCUS line, allowing for ignoration of a file header.  */
+  if (ascii->nc == 0) return eslEOF;
+  while (strncmp(ascii->buf, "LOCUS   ", 8) != 0) {
+    if ((status = loadbuf(sqfp)) == eslEOF) return eslEOF; /* normal   */
+    else if (status != eslOK) return status;                /* abnormal */
+  } 
+  
+  s = ascii->buf+12;
+  if ((status = esl_strtok(&s, " ", &tok)) != eslOK)
+    ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to parse name on LOCUS line", ascii->linenumber);
+  if ((status = esl_sq_SetName(sq, tok)) != eslOK) return status;
+  sq->roff = ascii->boff;/* record the disk offset to the LOCUS line */
+  
+  /* Look for ORIGIN line, parsing optional info as we go. */
+  do {
+    if ((status = loadbuf(sqfp)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find ORIGIN line");
+
+    /* Optional VERSION line is parsed as "accession". */
+    if (strncmp(ascii->buf, "VERSION   ", 10) == 0)
+    {
+      s = ascii->buf+12;
+      if ((status = esl_strtok(&s, " ", &tok)) != eslOK)
+        ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to parse VERSION line", ascii->linenumber);
+      if ((status = esl_sq_SetAccession(sq, tok)) != eslOK) return status;
+    }
+
+    /* Optional DEFINITION Line is parsed as "description". */
+    if (strncmp(ascii->buf, "DEFINITION ", 11) == 0)
+    {
+      s = ascii->buf+12;
+      esl_strchop(s, ascii->nc-12);
+      if ((status = esl_sq_AppendDesc(sq, s)) != eslOK)
+        ESL_FAIL(status, ascii->errbuf, "Line %" PRId64 ": failed to parse desc on DEFINITION line", ascii->linenumber);
+    }
+  } while (strncmp(ascii->buf, "ORIGIN", 6) != 0);
+
+  if (loadbuf(sqfp) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find any sequence");
+  sq->hoff = ascii->boff - 1;
+  sq->doff = ascii->boff;
+  return eslOK;
+}
+  
+/* skip_genbank()
+ * 
+ * Skip past the GenBank header and position to start of the sequence line.
+ * 
+ * On success, returns <eslOK> and:
+ *   sq->roff  has been set to the record offset
+ *   sq->doff  has been set to the data offset (start of sequence line)
+ *   sqfp->buf is the first seq line.
+ * 
+ * If no more seqs are found in the file, returns <eslEOF>.
+ * On parse failure, returns <eslEFORMAT>, leaves as mesg in ascii->errbuf.
+ * 
+ * May also throw <eslEMEM> on allocation errors.
+ */
+static int
+skip_genbank(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int   status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  /* Find LOCUS line, allowing for ignoration of a file header.  */
+  if (ascii->nc == 0) return eslEOF;
+  while (strncmp(ascii->buf, "LOCUS   ", 8) != 0) {
+    if ((status = loadbuf(sqfp)) == eslEOF) return eslEOF; /* normal   */
+    else if (status != eslOK) return status;               /* abnormal */
+  } 
+  
+  sq->roff = ascii->boff;/* record the disk offset to the LOCUS line */
+  
+  /* zero out the name, accession and description */
+  sq->name[0] = '\0';
+  sq->acc[0]  = '\0';
+  sq->desc[0] = '\0';
+  
+  /* Look for ORIGIN line, parsing optional info as we go. */
+  do {
+    if ((status = loadbuf(sqfp)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find ORIGIN line");
+  } while (strncmp(ascii->buf, "ORIGIN", 6) != 0);
+
+  if (loadbuf(sqfp) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find any sequence");
+  sq->hoff = ascii->boff - 1;
+  sq->doff = ascii->boff;
+  return eslOK;
+}
+  
+static int
+end_genbank(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int status;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (strncmp(ascii->buf, "//", 2) != 0) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": did not find // terminator at end of seq record", ascii->linenumber);
+  sq->eoff = ascii->boff + ascii->nc - 1;
+  status = loadbuf(sqfp);
+  if      (status == eslEOF) return eslOK; /* ok, actually; we'll detect EOF on next sq read */
+  else if (status == eslOK)  return eslOK;
+  else                       return status;
+}
+/*----------------- end GenBank format -------------------------------*/
+
+
+
+/*****************************************************************
+ *#  9. Internal routines for FASTA format
+ *****************************************************************/
+
+static void
+config_fasta(ESL_SQFILE *sqfp)
+{
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  ascii->is_linebased = FALSE;
+  ascii->eof_is_ok    = TRUE;
+  ascii->parse_header = &header_fasta;
+  ascii->skip_header  = &skip_fasta;
+  ascii->parse_end    = &end_fasta;
+}
+
+static void
+inmap_fasta(ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap)
+{
+  int x;
+
+  if (abc_inmap != NULL) {
+    for (x = 0; x < 128; x++) sqfp->inmap[x] = abc_inmap[x];
+  } else {
+    for (x =  0;  x < 128;  x++) sqfp->inmap[x] = eslDSQ_ILLEGAL;
+    for (x = 'A'; x <= 'Z'; x++) sqfp->inmap[x] = x;
+    for (x = 'a'; x <= 'z'; x++) sqfp->inmap[x] = x;
+  }
+  sqfp->inmap['*']  = '*';         /* accept * as a nonresidue/stop codon character */
+  sqfp->inmap[' ']  = eslDSQ_IGNORED;
+  sqfp->inmap['\t'] = eslDSQ_IGNORED;
+  sqfp->inmap['\r'] = eslDSQ_IGNORED;/* DOS eol compatibility */
+  sqfp->inmap['\n'] = eslDSQ_EOL;
+  sqfp->inmap['>']  = eslDSQ_EOD;
+  /* \n is special - fasta reader detects it as an eol */
+}
+
+
+/* header_fasta()
+ * 
+ * sqfp->buf[sqfp->bpos] is sitting at the start of a FASTA record, or
+ * at a space before it (in which case we'll advance, skipping whitespace,
+ * until a > is reached).
+ * Parse the header line, storing name and description in <sq>.
+ * 
+ * On success, returns <eslOK> and:
+ *    sq->name contains sequence name (and may have been reallocated, changing sq->nalloc)
+ *    sq->desc contains description line (and may have been reallocated, changing sq->dalloc)
+ *    sq->roff has been set to the record offset
+ *    sq->doff has been set to the data offset (start of sequence line)
+ *    sqfp->buf[sqfp->bpos] is sitting at the start of the seq line.
+ *    sqfp->currpl,curbpl set to 0, to start bookkeeping data line lengths 
+ *
+ * If no more seqs are found in the file, returns <eslEOF>.
+ * On parse failure, return <eslEFORMAT>, leaves as mesg in ascii->errbuf.
+ *    
+ * May also throw <eslEMEM> on allocation errors.
+ */
+static int
+header_fasta(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  char  c;
+  int   status = eslOK;
+  void *tmp;
+  int   pos;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  /* make sure there are characters in the buffer */
+  if (ascii->nc == ascii->bpos && (status = loadbuf(sqfp)) != eslOK) return status;
+
+  c =  ascii->buf[ascii->bpos];
+  while (status == eslOK && isspace(c)) status = nextchar(sqfp, &c); /* skip space (including \n) */
+
+  if (status == eslEOF) return eslEOF;
+
+  if (status == eslOK && c == '>') {    /* accept the > */
+    sq->roff = ascii->boff + ascii->bpos; /* store SSI record offset */
+    status = nextchar(sqfp, &c);
+  } else if (c != '>') ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": unexpected char %c; expected FASTA to start with >", ascii->linenumber, c);
+  
+  while (status == eslOK && (c == '\t' || c == ' ')) status = nextchar(sqfp, &c); /* skip space */
+
+  /* Store the name (space delimited) */
+  pos = 0;
+  while (status == eslOK && ! isspace(c))
+  {
+      sq->name[pos++] = c;
+      if (pos == sq->nalloc-1) { ESL_RALLOC(sq->name, tmp, sq->nalloc*2); sq->nalloc*=2; }
+      status = nextchar(sqfp, &c); 
+  }
+  if (pos == 0) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": no FASTA name found", ascii->linenumber);
+  sq->name[pos] = '\0';
+  
+  while (status == eslOK &&  (c == '\t' || c == ' ')) status = nextchar(sqfp, &c);   /* skip space */
+
+  /* Store the description (end-of-line delimited) */
+  /* Patched to deal with NCBI NR desclines: delimit by ctrl-A (0x01) too. [SRE:H1/82] */
+  pos = 0;
+  while (status == eslOK && c != '\n' && c != '\r' && c != 1)
+  {
+      sq->desc[pos++] = c;
+      if (pos == sq->dalloc-1) { ESL_RALLOC(sq->desc, tmp, sq->dalloc*2); sq->dalloc*= 2; }
+      status = nextchar(sqfp, &c); 
+  }
+  sq->desc[pos] = '\0';
+
+  /* Because of the NCBI NR patch, c might be0x01 ctrl-A now; skip to eol. 
+   * (TODO: I'm worried about the efficiency of this nextchar() stuff. Revisit.)
+   */
+  while (status == eslOK && c != '\n' && c != '\r') 
+    status = nextchar(sqfp, &c);
+  sq->hoff = ascii->boff + ascii->bpos;
+  
+  while (status == eslOK && (c == '\n' || c == '\r')) status = nextchar(sqfp, &c); /* skip past eol (DOS \r\n, MAC \r, UNIX \n */
+  if (status != eslOK && status != eslEOF) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected failure in parsing FASTA name/description line");
+  /* Edge case: if the last sequence in the file is L=0, no residues, we are EOF now, not OK; but we'll return OK because we parsed the header line */
+
+  sq->doff = ascii->boff + ascii->bpos;
+  ascii->prvrpl = ascii->prvbpl = -1;
+  ascii->currpl = ascii->curbpl = 0;
+  ascii->linenumber++;
+  return eslOK;
+
+ ERROR:
+  return status;/* eslEMEM, from failed realloc */
+}
+      
+/* skip_fasta()
+ * 
+ * Skip past the fasta header and position to start of the sequence line.
+ * 
+ * On success, returns <eslOK> and:
+ *    sq->roff has been set to the record offset
+ *    sq->doff has been set to the data offset (start of sequence line)
+ *    sqfp->buf[sqfp->bpos] is sitting at the start of the seq line.
+ *    sqfp->currpl,curbpl set to 0, to start bookkeeping data line lengths 
+ *
+ * If no more seqs are found in the file, returns <eslEOF>.
+ * On parse failure, return <eslEFORMAT>, leaves as mesg in ascii->errbuf.
+ *    
+ * May also throw <eslEMEM> on allocation errors.
+ */
+static int
+skip_fasta(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  char  c;
+  int   status = eslOK;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  c =  ascii->buf[ascii->bpos];
+  while (status == eslOK && isspace(c)) status = nextchar(sqfp, &c); /* skip space (including \n) */
+
+  if (status == eslEOF) return eslEOF;
+  if (status != eslOK)  ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected parsing error %d", status);
+  if (c != '>')         ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": unexpected char %c; expecting '>'", ascii->linenumber, c);
+
+  sq->roff = ascii->boff + ascii->bpos; /* store SSI record offset */
+
+  /* zero out the name, accession and description */
+  sq->name[0] = '\0';
+  sq->acc[0]  = '\0';
+  sq->desc[0] = '\0';
+  
+  status = nextchar(sqfp, &c);
+  
+  /* skip to end of line */
+  while (status == eslOK && c != '\n' && c != '\r') status = nextchar(sqfp, &c); 
+  sq->doff = ascii->boff + ascii->bpos;
+
+  /* skip past end of line */
+  while (status == eslOK && (c == '\n' || c == '\r')) status = nextchar(sqfp, &c);
+
+  if (status != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Premature EOF in parsing FASTA name/description line");
+  sq->doff = ascii->boff + ascii->bpos;
+
+  ascii->linenumber++;
+  return eslOK;
+}
+
+
+static int 
+end_fasta(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->bpos < ascii->nc) {
+    if (ascii->buf[ascii->bpos] != '>') ESL_FAIL(eslEFORMAT, ascii->errbuf, "Whoops, FASTA reader is corrupted");
+    sq->eoff = ascii->boff + ascii->bpos - 1; /* this puts eoff at the last \n */
+  } /* else, EOF, and we don't have to do anything. */
+  return eslOK;
+}
+
+
+/* Function:  esl_sqascii_WriteFasta()
+ * Synopsis:  Write a sequence in FASTA foramt
+ *
+ * Purpose:   Write sequence <sq> in FASTA format to the open stream <fp>.
+ * 
+ *            If <save_offsets> is TRUE, then store record, data, and end 
+ *            offsets in <sq>; this ability is used by unit tests.
+ *
+ * Returns:   <eslOK> on success.
+ *             
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEWRITE> on system write error.
+ */
+int
+esl_sqascii_WriteFasta(FILE *fp, ESL_SQ *sq, int save_offsets)
+{
+  char     buf[61];
+  int64_t  pos;
+
+  if (save_offsets) sq->roff = ftello(fp);
+  if (fprintf(fp, ">%s", sq->name)                     < 0) ESL_EXCEPTION_SYS(eslEWRITE, "fasta seq write failed");
+  if (sq->acc[0]  != 0 && fprintf(fp, " %s", sq->acc)  < 0) ESL_EXCEPTION_SYS(eslEWRITE, "fasta seq write failed");
+  if (sq->desc[0] != 0 && fprintf(fp, " %s", sq->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "fasta seq write failed");
+  if (save_offsets) sq->hoff = ftello(fp);
+  if (fputc('\n', fp)                                  < 0) ESL_EXCEPTION_SYS(eslEWRITE, "fasta seq write failed");
+
+  buf[60] = '\0';
+  if (save_offsets) sq->doff = ftello(fp);
+  for (pos = 0; pos < sq->n; pos += 60)
+  {
+      if (sq->dsq != NULL) esl_abc_TextizeN(sq->abc, sq->dsq+pos+1, 60, buf);
+      else                 strncpy(buf, sq->seq+pos, 60);
+      if (fprintf(fp, "%s\n", buf) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "fasta seq write failed");
+  }
+  if (save_offsets) sq->eoff = ftello(fp) - 1;
+  return eslOK;
+}
+/*------------------- end of FASTA i/o ---------------------------*/
+
+/*****************************************************************
+ *#  10. Internal routines for DAEMON format
+ *****************************************************************/
+
+/* Special case FASTA format where each sequence is terminated with "//".
+ * 
+ * The use case is where the sequences are being read from a pipe and a
+ * way is needed to signal the end of the sequence so it can be processed.
+ * The next sequence might not be in the pipe, so the usual '>' is not
+ * present to signal the end of the sequence.  Also, an EOF is not
+ * an option, since the daemon might run continuously.
+ */
+
+static void
+config_daemon(ESL_SQFILE *sqfp)
+{
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  ascii->is_linebased = FALSE;
+  ascii->eof_is_ok    = FALSE;
+  ascii->parse_header = &header_fasta;
+  ascii->skip_header  = &skip_fasta;
+  ascii->parse_end    = &end_daemon;
+}
+
+static void
+inmap_daemon(ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap)
+{
+  int x;
+
+  if (abc_inmap != NULL) {
+    for (x = 0; x < 128; x++) sqfp->inmap[x] = abc_inmap[x];
+  } else {
+    for (x =  0;  x < 128;  x++) sqfp->inmap[x] = eslDSQ_ILLEGAL;
+    for (x = 'A'; x <= 'Z'; x++) sqfp->inmap[x] = x;
+    for (x = 'a'; x <= 'z'; x++) sqfp->inmap[x] = x;
+  }
+  sqfp->inmap['*']  = '*';         /* accept * as a nonresidue/stop codon character */
+  sqfp->inmap[' ']  = eslDSQ_IGNORED;
+  sqfp->inmap['\t'] = eslDSQ_IGNORED;
+  sqfp->inmap['\r'] = eslDSQ_IGNORED;/* DOS eol compatibility */
+  sqfp->inmap['\n'] = eslDSQ_EOL;
+  sqfp->inmap['/']  = eslDSQ_EOD;
+  /* \n is special - fasta reader detects it as an eol */
+}
+
+
+/* end_daemon()
+ * 
+ * Special case FASTA format where each sequence is terminated with "//".
+ * 
+ * The use case is were the sequences are being read from a pipe and a
+ * way is needed to signal the end of the sequence so it can be processed.
+ */
+static int 
+end_daemon(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  char  c;
+
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  if (ascii->nc < 3) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Whoops, DAEMON input stream is corrupted");
+
+  c =  ascii->buf[ascii->bpos++];
+  if (c != '/') ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": did not find // terminator at end of seq record", ascii->linenumber);
+
+  c =  ascii->buf[ascii->bpos++];
+  if (c != '/') ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": did not find // terminator at end of seq record", ascii->linenumber);
+
+  /* skip to end of line */
+  while (c != '\n' && c != '\r' && ascii->bpos < ascii->nc) c =  ascii->buf[ascii->bpos++];
+
+  /* skip past end of line */
+  while ((c == '\n' || c == '\r') && ascii->bpos < ascii->nc) c =  ascii->buf[ascii->bpos++];
+
+  return eslOK;
+}
+
+
+/* esl_sqascii_Parse()
+ * 
+ * Parse a sequence already read into a buffer.
+ */
+int
+esl_sqascii_Parse(char *buf, int size, ESL_SQ *sq, int format)
+{
+  int               status;
+  int64_t           epos;
+  int64_t           n;
+
+  ESL_SQFILE        sqfp;
+  ESL_SQASCII_DATA *ascii = &sqfp.data.ascii;
+
+  /* fill in a dummy esl_sqfile structure used to parse buf */
+  ascii->fp           = NULL;
+  ascii->do_gzip      = FALSE;
+  ascii->do_stdin     = FALSE;
+  ascii->do_buffer    = TRUE;
+
+  ascii->mem          = buf;
+  ascii->allocm       = 0;
+  ascii->mn           = size;
+  ascii->mpos         = 0;
+  ascii->moff         = -1;
+  ascii->is_recording = FALSE;
+
+  ascii->buf          = NULL;
+  ascii->boff         = 0;
+  ascii->balloc       = 0;
+  ascii->nc           = 0;
+  ascii->bpos         = 0;
+  ascii->L            = 0;
+  ascii->linenumber   = 1;
+
+  ascii->afp          = NULL;
+  ascii->msa          = NULL;
+  ascii->idx          = -1;
+
+  ascii->ssifile      = NULL;
+  ascii->rpl          = -1;/* -1 = not set yet */
+  ascii->bpl          = -1;/* (ditto) */
+  ascii->prvrpl       = -1;/* (ditto) */
+  ascii->prvbpl       = -1;/* (ditto) */
+  ascii->currpl       = -1;
+  ascii->curbpl       = -1;
+  ascii->ssi          = NULL;
+
+  /* Configure the <sqfp>'s parser and inmaps for this format. */
+  switch (format) {
+  case eslSQFILE_EMBL:     
+  case eslSQFILE_UNIPROT:  
+    config_embl(&sqfp);    
+    inmap_embl(&sqfp, NULL);
+    break;
+  case eslSQFILE_GENBANK:  
+  case eslSQFILE_DDBJ:     
+    config_genbank(&sqfp); 
+    inmap_genbank(&sqfp, NULL);
+    break;
+  case eslSQFILE_FASTA:    
+    config_fasta(&sqfp);   
+    inmap_fasta(&sqfp, NULL);
+    break;
+  case eslSQFILE_DAEMON:    
+    config_daemon(&sqfp);   
+    inmap_daemon(&sqfp, NULL);
+    break;
+  default:
+    return eslEFORMAT; 
+  }
+
+  /* Main case: read next seq from sqfp's stream */
+  if ((status = ascii->parse_header(&sqfp, sq)) != eslOK) return status; /* EOF, EFORMAT */
+
+  do {
+    if ((status = seebuf(&sqfp, -1, &n, &epos)) == eslEFORMAT) return status;
+    if (esl_sq_GrowTo(sq, sq->n + n) != eslOK) return eslEMEM;
+    addbuf(&sqfp, sq, n);
+    ascii->L   += n;
+    sq->eoff   = ascii->boff + epos - 1;
+    if (status == eslEOD)     break;
+  } while ((status = loadbuf(&sqfp)) == eslOK);
+    
+  if      (status == eslEOF)
+    {
+      if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected EOF; file truncated?"); 
+      if ((status = ascii->parse_end(&sqfp, sq)) != eslOK) return status;
+    }
+  else if (status == eslEOD)
+    {
+      ascii->bpos = epos;
+      if ((status = ascii->parse_end(&sqfp, sq)) != eslOK) return status;
+    }
+  else if (status != eslOK) return status;
+
+  if (sq->dsq != NULL) sq->dsq[sq->n+1] = eslDSQ_SENTINEL;
+  else                 sq->seq[sq->n] = '\0';
+  sq->start = 1;
+  sq->end   = sq->n;
+  sq->C     = 0;
+  sq->W     = sq->n;
+  sq->L     = sq->n;
+
+  if (ascii->balloc > 0) free(ascii->buf);
+
+  return eslOK;
+}
+/*-------------------- end of DAEMON ----------------------------*/
+
+/*****************************************************************
+ *# 11. Internal routines for HMMPGMD format
+ *****************************************************************/
+
+static int
+fileheader_hmmpgmd(ESL_SQFILE *sqfp)
+{
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+  char c;
+  int  status = eslOK;
+
+  /* We've just loaded first buffer, after an Open. First char should be the # of the hmmpgmd file,
+   * but let's tolerate leading whitespace anyway
+   */
+  c =  ascii->buf[ascii->bpos];
+  while (status == eslOK && isspace(c)) status = nextchar(sqfp, &c); /* skip space (including \n, \r) */
+  if (status == eslEOF) return eslEOF;
+
+  if (c != '#') ESL_FAIL(eslEFORMAT, ascii->errbuf, "hmmpgmd file expected to start with #");
+
+  /* skip first line; remainder of file is FASTA format */
+  while (status == eslOK && (c != '\n' && c != '\r')) status = nextchar(sqfp, &c); 
+  if (status == eslEOF) return eslEOF;
+
+  /* next character read should be the '>' of the first FASTA record. We're properly positioned at "start of file". */
+  return eslOK;
+}
+/*-------------------- end of HMMPGMD ---------------------------*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
+
diff --git a/esl_sqio_ascii.h b/esl_sqio_ascii.h
new file mode 100644
index 0000000..3b8e47b
--- /dev/null
+++ b/esl_sqio_ascii.h
@@ -0,0 +1,102 @@
+/* Unaligned ascii sequence file i/o.
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslSQIO_ASCII_INCLUDED
+#define eslSQIO_ASCII_INCLUDED
+
+#include <stdio.h>
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef eslAUGMENT_MSA
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#endif
+
+/* set the max residue count to 1 meg when reading a block */
+#define MAX_RESIDUE_COUNT (1024 * 1024)
+
+/* forward declaration */
+struct esl_sqio_s;
+
+/* ESL_SQASCII:
+ * An open sequence file for reading.
+ */
+typedef struct esl_sqascii_s {
+  
+  FILE *fp;           	      /* Open file ptr                            */
+  char  errbuf[eslERRBUFSIZE];/* parse error mesg.  Size must match msa.h */
+
+  int   do_gzip;	      /* TRUE if we're reading from gzip -dc pipe */
+  int   do_stdin;	      /* TRUE if we're reading from stdin         */
+  int   do_buffer;            /* TRUE if we're reading from a buffer      */
+
+  /* all input first gets buffered in memory; this gives us enough
+   * recall to use Guess*() functions even in nonrewindable streams
+   */
+  char    *mem;		      /* buffered input                           */
+  int      allocm;	      /* <mem> size, multiples of eslREADBUFSIZE  */
+  int      mn;		      /* number of chars in <mem> (up to allocm)  */
+  int      mpos;	      /* pos of next <buf> to load from <mem>     */
+  off_t    moff;	      /* disk offset to start of <mem>            */
+  int      is_recording;      /* TRUE if we need to keep buffering more   */
+
+  /* input is either character-based [fread()] or line-based (esl_fgets())*/
+  char    *buf;		      /* buffer for fread() or fgets() input      */
+  off_t    boff;	      /* disk offset to start of buffer           */
+  int      balloc;	      /* allocated size of buf                    */
+  int      nc;		      /* #chars in buf (usually full, less at EOF)*/ 
+  int      bpos;	      /* current position in the buffer (0..nc-1) */
+  int64_t  L;		      /* #residues seen so far in current seq     */
+  int64_t  linenumber;	      /* What line of the file  (1..N; -1=unknown)*/
+  off_t    bookmark_offset;   /* bookmark fwd position before reversing...*/
+  int64_t  bookmark_linenum;  /* in both linenumber and disk offset       */
+
+  /* Format-specific configuration                                           */
+  int   is_linebased;	      /* TRUE for fgets() parsers; FALSE for fread() */
+  int   eof_is_ok;	      /* TRUE if record can end on EOF               */
+  int  (*parse_header)(struct esl_sqio_s *, ESL_SQ *sq);
+  int  (*skip_header) (struct esl_sqio_s *, ESL_SQ *sq);
+  int  (*parse_end)   (struct esl_sqio_s *, ESL_SQ *sq); 
+
+  /* MSA augmentation confers reading MSA files as sequential seq files. */
+#if defined(eslAUGMENT_MSA)
+  ESL_MSAFILE  *afp;	      /* open ESL_MSAFILE for reading           */
+  ESL_MSA      *msa;	      /* preloaded alignment to draw seqs from  */
+  int           idx;	      /* index of next seq to return, 0..nseq-1 */
+#else
+  void        *afp; 	      /* NULL */
+  void        *msa;           /* NULL */
+  int          idx;           /* 0    */
+#endif /*eslAUGMENT_MSA*/
+
+  /* SSI augmentation confers random access of records in a seq file        */
+  char    *ssifile;	      /* path to expected SSI index file            */
+  int      rpl;		      /* residues per line in file; -1=unset 0=inval*/
+  int      bpl;		      /* bytes per line in file; -1=unset, 0=inval  */
+  int      currpl;	      /* residues on current line (-1=unknown)      */
+  int      curbpl;	      /* bytes on current line    (-1=unknown)      */
+  int      prvrpl;	      /* residues on previous line                  */
+  int      prvbpl;	      /* bytes on previous line                     */
+#if defined(eslAUGMENT_SSI)
+  ESL_SSI *ssi;		/* open ESL_SSI index, or NULL if none     */
+#else
+  void    *ssi;		/* NULL */
+#endif /*eslAUGMENT_SSI*/
+} ESL_SQASCII_DATA;
+
+
+extern int  esl_sqascii_Open(char *seqfile, int format, struct esl_sqio_s *sqfp);
+extern int  esl_sqascii_WriteFasta(FILE *fp, ESL_SQ *s, int update);
+extern int  esl_sqascii_Parse(char *buf, int size, ESL_SQ *s, int format);
+
+
+#endif /*eslSQIO_ASCII_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_sqio_ncbi.c b/esl_sqio_ncbi.c
new file mode 100644
index 0000000..fb33826
--- /dev/null
+++ b/esl_sqio_ncbi.c
@@ -0,0 +1,3295 @@
+/* Unaligned ncbi sequence file i/o.
+ * 
+ * Contents:
+ *    1. An <ESL_SQFILE> object, in text mode.
+ *    2. An <ESL_SQFILE> object, in digital mode. [with <alphabet>]
+ *    3. Miscellaneous routines.
+ *    4. Sequence reading (sequential).
+ *    5. Parsing routines
+ *    6. Copyright and license.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_ENDIAN_H
+#include <endian.h>
+#endif
+
+#include "easel.h"
+#ifdef eslAUGMENT_ALPHABET
+#include "esl_alphabet.h"	/* alphabet aug adds digital sequences */
+#endif 
+#include "esl_sqio.h"
+#include "esl_sq.h"
+
+#ifndef htobe32
+#ifdef  WORDS_BIGENDIAN
+#define htobe32(x) (x)
+#else
+#define htobe32(x) \
+     ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) |		      \
+      (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))
+#endif
+#endif
+
+/* format specific routines */
+static int   sqncbi_Position       (ESL_SQFILE *sqfp, off_t offset);
+static void  sqncbi_Close          (ESL_SQFILE *sqfp);
+static int   sqncbi_SetDigital     (ESL_SQFILE *sqfp, const ESL_ALPHABET *abc);
+static int   sqncbi_GuessAlphabet  (ESL_SQFILE *sqfp, int *ret_type);
+static int   sqncbi_Read           (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int   sqncbi_ReadInfo       (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int   sqncbi_ReadSequence   (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int   sqncbi_ReadWindow     (ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq);
+static int   sqncbi_ReadBlock      (ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target);
+static int   sqncbi_Echo           (ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp);
+
+static int   sqncbi_IsRewindable   (const ESL_SQFILE *sqfp);
+static const char *sqncbi_GetError (const ESL_SQFILE *sqfp);
+
+/* common routines for processing ncbi database */
+static int  sqncbi_Open         (ESL_SQNCBI_DATA *ncbi, char *filename);
+
+static void reset_db            (ESL_SQNCBI_DATA *ncbi);
+static int  pos_sequence        (ESL_SQNCBI_DATA *ncbi, int inx);
+static int  volume_open         (ESL_SQNCBI_DATA *ncbi, int volume);
+static void reset_header_values (ESL_SQNCBI_DATA *ncbi);
+
+static int  read_amino          (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int  read_dna            (ESL_SQFILE *sqfp, ESL_SQ *sq);
+static int  read_nres_amino     (ESL_SQFILE *sqfp, ESL_SQ *sq, int len, uint64_t *nres);
+static int  read_nres_dna       (ESL_SQFILE *sqfp, ESL_SQ *sq, int len, uint64_t *nres);
+
+static int  inmap_ncbi          (ESL_SQFILE *sqfp);
+static int  inmap_ncbi_amino    (ESL_SQFILE *sqfp);
+static int  inmap_ncbi_dna      (ESL_SQFILE *sqfp);
+
+/* parsing routines */
+static int  parse_header              (ESL_SQNCBI_DATA *ncbi, ESL_SQ *sq);
+static int  parse_def_line            (ESL_SQNCBI_DATA *ncbi, ESL_SQ *sq);
+static int  parse_seq_id              (ESL_SQNCBI_DATA *ncbi);
+static int  parse_textseq_id          (ESL_SQNCBI_DATA *ncbi);
+static int  parse_object_id           (ESL_SQNCBI_DATA *ncbi);
+static int  parse_dbtag               (ESL_SQNCBI_DATA *ncbi);
+static int  parse_patent_seq_id       (ESL_SQNCBI_DATA *ncbi);
+static int  parse_giimport_id         (ESL_SQNCBI_DATA *ncbi);
+static int  parse_id_pat              (ESL_SQNCBI_DATA *ncbi);
+static int  parse_pdb_seq_id          (ESL_SQNCBI_DATA *ncbi);
+static int  parse_date_std            (ESL_SQNCBI_DATA *ncbi);
+static int  parse_string              (ESL_SQNCBI_DATA *ncbi, char **str, int *len);
+static int  parse_integer             (ESL_SQNCBI_DATA *ncbi, int *value);
+static int  ignore_sequence_of_integer(ESL_SQNCBI_DATA *ncbi);
+
+#define INDEX_TABLE_SIZE      1024
+#define INIT_HDR_BUFFER_SIZE  2048
+
+#define NCBI_VERSION_4             4
+#define NCBI_DNA_DB                0
+#define NCBI_AMINO_DB              1
+
+/*****************************************************************
+ *# 1. An <ESL_SQFILE> object, in text mode.
+ *****************************************************************/ 
+
+/* Function:  esl_sqncbi_Open()
+ * Synopsis:  Open a sequence file for reading.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Open a sequence file <filename> for reading. 
+ *            The opened <ESL_SQFILE> is returned through <ret_sqfp>.
+ * 
+ *            The .pin, .phr and .psq files are required for the
+ *            open function to succeed.  Only ncbi version 4
+ *            databases are currently supported.
+ *            
+ * Returns:   <eslOK> on success, and <*ret_sqfp> points to a new
+ *            open <ESL_SQFILE>. Caller deallocates this object with
+ *            <esl_sqfile_Close()>. 
+ *            
+ *            Returns <eslENOTFOUND> if <filename> can't be found or
+ *            opened.  Returns <eslEFORMAT> if the file is empty, or
+ *            if autodetection is attempted and the format can't be
+ *            determined.  On any error condition, <*ret_sqfp> is
+ *            returned NULL.
+ *             
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+int
+esl_sqncbi_Open(char *filename, int format, ESL_SQFILE *sqfp)
+{
+  int  i;
+  int  status = eslOK;	/* return status from an ESL call */
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  /* before we go any further, make sure we can handle the format */
+  if (format != eslSQFILE_NCBI && format != eslSQFILE_UNKNOWN) return eslENOTFOUND;
+
+  ncbi->fppin        = NULL;
+  ncbi->fpphr        = NULL;
+  ncbi->fppsq        = NULL;
+
+  ncbi->title        = NULL;
+  ncbi->timestamp    = NULL;
+
+  ncbi->index        = -1;
+
+  ncbi->hdr_off      = -1;
+  ncbi->seq_off      = -1;
+  ncbi->amb_off      = -1;
+
+  ncbi->index_start  = -1;
+  ncbi->index_end    = -1;
+  ncbi->hdr_indexes  = NULL;
+  ncbi->seq_indexes  = NULL;
+  ncbi->amb_indexes  = NULL;
+
+  ncbi->hdr_buf      = NULL;
+  reset_header_values(ncbi);
+
+  ncbi->amb_off      = 0;
+
+  ncbi->alphatype    = eslUNKNOWN;
+  ncbi->alphasym     = NULL;
+
+  ncbi->vol_index    = -1;
+  ncbi->volumes      = 0;
+
+  for (i = 0; i < MAX_DB_VOLUMES; ++i) {
+    ncbi->vols[i].name      = NULL;
+    ncbi->vols[i].start_seq = -1;
+    ncbi->vols[i].end_seq   = -1;
+  }
+
+  if ((status = sqncbi_Open(ncbi, filename)) != eslOK) goto ERROR;
+
+  sqfp->format = eslSQFILE_NCBI;
+  if ((status = inmap_ncbi(sqfp)) != eslOK) goto ERROR;
+
+  /* initialize the function pointers for the ncbi routines */
+  sqfp->position          = &sqncbi_Position;
+  sqfp->close             = &sqncbi_Close;
+
+  sqfp->set_digital       = &sqncbi_SetDigital;
+  sqfp->guess_alphabet    = &sqncbi_GuessAlphabet;
+
+  sqfp->is_rewindable     = &sqncbi_IsRewindable;
+
+  sqfp->read              = &sqncbi_Read;
+  sqfp->read_info         = &sqncbi_ReadInfo;
+  sqfp->read_seq          = &sqncbi_ReadSequence;
+  sqfp->read_window       = &sqncbi_ReadWindow;
+  sqfp->echo              = &sqncbi_Echo;
+
+  sqfp->read_block        = &sqncbi_ReadBlock;
+
+  sqfp->get_error         = &sqncbi_GetError;
+
+  return eslOK;
+
+ ERROR:
+  sqncbi_Close(sqfp); 
+  return status;
+}
+
+/* sqncbi_ParseIndexFile()
+ *
+ * Parse an open index file verifying database type and version
+ * if handled.  Read in the entries, i.e. name, number of sequences,
+ * etc.  Keep track of the offsets where the header and sequence
+ * tables begin.
+ */
+static int
+sqncbi_ParseIndexFile(ESL_SQNCBI_DATA *ncbi, int dbtype)
+{
+  int         len;
+  uint32_t    info[4];
+  int         status = eslOK;	/* return status from an ESL call */
+
+  if (fread(&info[0], sizeof(uint32_t), 3, ncbi->fppin) != 3) status = eslFAIL;
+  if (htobe32(info[0]) != NCBI_VERSION_4)                     status = eslEFORMAT;
+  if (htobe32(info[1]) != dbtype)                             status = eslEUNIMPLEMENTED;
+
+  if (status != eslOK) goto ERROR;
+  ncbi->version = htobe32(info[0]);
+  ncbi->alphatype = (dbtype == NCBI_DNA_DB) ? eslDNA : eslAMINO;
+  ncbi->index = -1;
+
+  /* read the database title */
+  len = htobe32(info[2]);
+  ESL_ALLOC(ncbi->title, sizeof(char) * (len + 1));
+  if (fread(ncbi->title, sizeof(char), len, ncbi->fppin) != len) { status = eslFAIL; goto ERROR; }
+  ncbi->title[len] = 0;
+
+  /* read the database time stamp */
+  if (fread(&info[0], sizeof(uint32_t), 1, ncbi->fppin) != 1) { status = eslFAIL; goto ERROR; }
+  len = htobe32(info[0]);
+  ESL_ALLOC(ncbi->timestamp, sizeof(char) * (len + 1));
+  if (fread(ncbi->timestamp, sizeof(char), len, ncbi->fppin) != len) { status = eslFAIL; goto ERROR; }
+  ncbi->timestamp[len] = 0;
+
+  /* read in database stats */
+  if (fread(&info[0], sizeof(uint32_t), 4, ncbi->fppin) != 4) { status = eslFAIL; goto ERROR; }
+  ncbi->num_seq   = htobe32(info[0]);
+  memcpy(&ncbi->total_res, info+1, sizeof(uint64_t)); 
+  ncbi->max_seq   = htobe32(info[3]);
+
+  /* save the offsets to the index tables */
+  ncbi->hdr_off = ftell(ncbi->fppin);
+  ncbi->seq_off = ncbi->hdr_off + sizeof(uint32_t) * (ncbi->num_seq + 1);
+
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* sqncbi_DbOpen()
+ *
+ * Try to open the database files.  On successful opening of
+ * the files, index, header and sequence, the index file is
+ * parsed for validity.
+ */
+static int
+sqncbi_DbOpen(ESL_SQNCBI_DATA *ncbi, char *filename, int dbtype)
+{
+  int         status = eslOK;	/* return status from an ESL call */
+  int         len;
+
+  char       *name = NULL;
+
+  len = strlen(filename);
+  ESL_ALLOC(name, sizeof(char) * (len+5));
+  strcpy(name, filename);
+
+  /* Check for basic database first */
+  strcpy(name+len, ".Xin");
+  name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p';
+  if ((ncbi->fppin = fopen(name, "rb")) == NULL) {
+    status = eslENOTFOUND; 
+    goto ERROR;
+  }
+  strcpy(name+len, ".Xhr");
+  name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p';
+  if ((ncbi->fpphr = fopen(name, "rb")) == NULL) {
+    status = eslENOTFOUND; 
+    goto ERROR;
+  }
+  strcpy(name+len, ".Xsq");
+  name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p';
+  if ((ncbi->fppsq = fopen(name, "rb")) == NULL) {
+    status = eslENOTFOUND; 
+    goto ERROR;
+  }
+
+  /* parse the header make sure we are looking at a version 4 db. */
+  if ((status = sqncbi_ParseIndexFile(ncbi, dbtype)) != eslOK) goto ERROR;
+
+  if (name != NULL) free(name);
+
+  return eslOK;
+
+ ERROR:
+
+  reset_db(ncbi);
+
+  if (name != NULL) free(name);
+  return status;
+}
+
+
+/* sqncbi_AliasOpen()
+ *
+ * Opens an alias file parsing the DBLIST directive building
+ * a list of all the volumes makeing up this database.  As each
+ * volume is successfully parsed, the name of the volume, number
+ * of sequences and offsets are kept for quick reference.
+ */
+static int
+sqncbi_AliasOpen(ESL_SQNCBI_DATA *ncbi, char *filename, int dbtype)
+{
+  int         status    = eslOK;	/* return status from an ESL call */
+  int         newline   = 1;
+  int         seqcnt    = 0;
+  int         rescnt    = 0;
+  int         done      = 0;
+  int         vol;
+  int         len;
+
+  char       *ptr       = NULL;
+  char       *name      = NULL;
+  char        buffer[80];
+
+  char       *dbptr     = NULL;
+  char       *dbname    = NULL;
+  int         dbsize    = 512;
+  int         dblen     = 0;
+
+  FILE       *fp        = NULL;
+
+  len = strlen(filename);
+  ESL_ALLOC(name, sizeof(char) * (len+5));
+  strcpy(name, filename);
+
+  /* Check for alias file */
+  strcpy(name+len, ".Xal");
+  name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p';
+  if ((fp = fopen(name, "r")) == NULL) {
+    status = eslENOTFOUND; 
+    goto ERROR;
+  }
+
+  /* copy the filename */
+  dbsize = (dbsize > len) ? dbsize : len * 2;
+  ESL_ALLOC(dbname, sizeof(char) * dbsize);
+  strcpy(dbname, filename);
+
+  /* remove the filename keeping the path */
+  while (len > 0 && dbname[len-1] != eslDIRSLASH) {
+    dbname[len-1] = '\0';
+    --len;
+  }
+
+  /* find the DBLIST directive */
+  while (!done) {
+    ptr = buffer;
+    if (fgets(buffer, sizeof(buffer), fp) == NULL) {
+      status = eslEFORMAT;
+      goto ERROR;
+    }
+
+    if (newline) {
+      if (strncmp(buffer, "DBLIST", 6) == 0 && isspace(buffer[6])) {
+	done = 1;
+	ptr = buffer + 6;
+      }
+    }
+
+    /* skip to the end of the line */
+    if (!done) {
+      newline = 0;
+      while (*ptr != '\0') {
+	if (*ptr == '\n') newline = 1;
+	++ptr;
+      }
+    }
+  }
+
+  /* parse the DBLIST line */
+  done = 0;
+  dblen = len;
+  while (!done) {
+
+    /* check if we hit the end of the buffer */
+    if (*ptr == '\0') {
+      ptr = buffer;
+      if (fgets(buffer, sizeof(buffer), fp) == NULL) {
+	status = eslEFORMAT;
+	goto ERROR;
+      }
+    }
+
+    /* skip spaces */
+    if (isspace(*ptr)) {
+      if (dblen > len) {
+	dbname[dblen++] = '\0';
+
+	/* if the name in the DBLIST directive was ablsolute, do not
+	 * use the working directory as a prefix.
+	 */
+	if (dbname[len] == eslDIRSLASH) {
+	  dbptr = dbname + len;
+	} else {
+	  dbptr = dbname;
+	}
+
+	status = sqncbi_DbOpen(ncbi, dbptr, dbtype);
+	if (status != eslOK) goto ERROR;
+
+	/* close any open files and free up allocations */
+	reset_db(ncbi);
+
+	/* if successful, copy the db information */
+	vol = ncbi->volumes++;
+
+	/* allocate the name of the string big enought so the buffer can
+	 * handle an extension, i.e. ".pin" or ".nsq" tacked on to the end
+	 * of it without reallocating.
+	 */
+	ncbi->vols[vol].name = NULL;
+	ESL_ALLOC(ncbi->vols[vol].name, sizeof(char) * strlen(dbptr) + 5);
+	strcpy(ncbi->vols[vol].name, dbptr);
+
+	ncbi->vols[vol].start_seq = seqcnt;
+	ncbi->vols[vol].end_seq   = seqcnt + ncbi->num_seq - 1;
+
+	ncbi->vols[vol].hdr_off = ncbi->hdr_off;
+	ncbi->vols[vol].seq_off = ncbi->seq_off;
+	ncbi->vols[vol].amb_off = ncbi->amb_off;
+
+	seqcnt += ncbi->num_seq;
+	rescnt += ncbi->total_res;
+
+	dblen = len;
+      }
+
+      done = *ptr == '\n' || *ptr == '\r';
+
+      ptr++;
+    } else {
+      dbname[dblen++] = *ptr++;
+      if (dblen >= dbsize - 1) {
+	char *t;
+	dbsize += dbsize;
+	ESL_RALLOC(dbname, t, dbsize);
+      }
+    }
+  }
+
+  /* reopen the first volume for processing */
+  if ((status = volume_open(ncbi, 0)) != eslOK) goto ERROR;
+  
+  ncbi->num_seq = seqcnt;
+  ncbi->total_res = rescnt;
+
+  if (name   != NULL) free(name);
+  if (dbname != NULL) free(dbname);
+
+  if (fp != NULL) fclose(fp);
+
+  return eslOK;
+
+ ERROR:
+
+  reset_db(ncbi);
+
+  if (fp != NULL) fclose(fp);
+
+  if (dbname != NULL) free(dbname);
+  if (name   != NULL) free(name);
+
+  return status;
+}
+
+
+/* Function:  sqncbi_Open()
+ * Synopsis:  Open an ncbi database.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Open an ncbi database making sure all the necessry
+ *            files are present.  Parse the index file for database 
+ *            information filling in the ncbi data structure.
+ * 
+ * Returns:   <eslOK> on success, and the ncbi data structre is filled
+ *            in with the database information.
+ *            
+ *            Returns <eslENOTFOUND> if <filename> can't be found or
+ *            opened.  Returns <eslEFORMAT> if the index file is an
+ *            upsupported version.
+ *             
+ * Throws:    <eslEMEM> on allocation failure.
+ */
+static int
+sqncbi_Open(ESL_SQNCBI_DATA *ncbi, char *filename)
+{
+  int    status  = eslOK;	/* return status from an ESL call */
+  char  *name    = NULL;
+
+  /* first try to open a single protein database */
+  status = sqncbi_DbOpen(ncbi, filename, NCBI_AMINO_DB);
+
+  /* if the database was not found, look for protein volume */
+  if (status == eslENOTFOUND) {
+    status = sqncbi_AliasOpen(ncbi, filename, NCBI_AMINO_DB);
+  }
+
+  /* if nothing so far, try a dna database */
+  if (status == eslENOTFOUND) {
+    status = sqncbi_DbOpen(ncbi, filename, NCBI_DNA_DB);
+  }
+
+  /* still nothing, look for dna volume */
+  if (status == eslENOTFOUND) {
+    status = sqncbi_AliasOpen(ncbi, filename, NCBI_DNA_DB);
+  }
+
+  if (status != eslOK) goto ERROR;
+
+  /* allocate buffers used in parsing the database files */
+  ESL_ALLOC(ncbi->hdr_indexes, sizeof(uint32_t) * INDEX_TABLE_SIZE);
+  ESL_ALLOC(ncbi->seq_indexes, sizeof(uint32_t) * INDEX_TABLE_SIZE);
+
+  /* if this is a dna database we need to allocate space for the
+   * ambiguity offsets.
+   */
+  if (ncbi->alphatype == eslDNA) {
+    ncbi->amb_off = ncbi->seq_off + sizeof(uint32_t) * (ncbi->num_seq + 1);
+    ESL_ALLOC(ncbi->amb_indexes, sizeof(uint32_t) * INDEX_TABLE_SIZE);
+  }
+
+  ncbi->hdr_alloced = INIT_HDR_BUFFER_SIZE;
+  ESL_ALLOC(ncbi->hdr_buf, sizeof(unsigned char) * INIT_HDR_BUFFER_SIZE);
+
+  /* skip the first sentinal byte in the .psq file */
+  fgetc(ncbi->fppsq);
+
+  if (name != NULL) free(name);
+  return eslOK;
+
+ ERROR:
+  if (name != NULL) free(name);
+  return status;
+}
+
+
+/* Function:  sqncbi_Position()
+ * Synopsis:  Reposition an open sequence file to an offset.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Reposition an open <sqfp> to offset <offset>.
+ *            <offset> for the ncbi db format specified the sequence
+ *            index, not file offset.  Both the sequence and header
+ *            files are repositioned.
+ *            
+ * Returns:   <eslOK>     on success;
+ *
+ * Throws:    <eslESYS> if the fseeko() or fread() call fails.
+ *            On errors, the state of <sqfp> is indeterminate, and
+ *            it should not be used again.
+ */
+static int
+sqncbi_Position(ESL_SQFILE *sqfp, off_t offset)
+{
+  int      status;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  status = pos_sequence(ncbi, offset);
+  return status;
+}
+
+/* Function:  sqncbi_Close()
+ * Synopsis:  Close a sequence file.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Closes an open <sqfp>.
+ *
+ * Returns:   (void).
+ */
+static void
+sqncbi_Close(ESL_SQFILE *sqfp)
+{
+  int i;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  if (ncbi->title != NULL)       free(ncbi->title);
+  if (ncbi->timestamp != NULL)   free(ncbi->timestamp);
+
+  if (ncbi->hdr_buf != NULL)     free(ncbi->hdr_buf);
+
+  if (ncbi->hdr_indexes != NULL) free(ncbi->hdr_indexes);
+  if (ncbi->seq_indexes != NULL) free(ncbi->seq_indexes);
+  if (ncbi->amb_indexes != NULL) free(ncbi->amb_indexes);
+
+  if (ncbi->alphasym != NULL)    free(ncbi->alphasym);
+
+  if (ncbi->fppin != NULL) fclose(ncbi->fppin);
+  if (ncbi->fpphr != NULL) fclose(ncbi->fpphr);
+  if (ncbi->fppsq != NULL) fclose(ncbi->fppsq);
+
+  ncbi->vol_index    = -1;
+  ncbi->volumes      = 0;
+
+  for (i = 0; i < MAX_DB_VOLUMES; ++i) {
+    if (ncbi->vols[i].name != NULL) free(ncbi->vols[i].name);
+
+    ncbi->vols[i].name      = NULL;
+    ncbi->vols[i].start_seq = -1;
+    ncbi->vols[i].end_seq   = -1;
+  }
+
+  ncbi->fppin        = NULL;
+  ncbi->fpphr        = NULL;
+  ncbi->fppsq        = NULL;
+
+  ncbi->title        = NULL;
+  ncbi->timestamp    = NULL;
+
+  ncbi->index        = -1;
+
+  ncbi->hdr_off      = -1;
+  ncbi->seq_off      = -1;
+  ncbi->amb_off      = -1;
+
+  ncbi->index_start  = -1;
+  ncbi->index_end    = -1;
+  ncbi->hdr_indexes  = NULL;
+  ncbi->seq_indexes  = NULL;
+  ncbi->amb_indexes  = NULL;
+
+  ncbi->hdr_buf      = NULL;
+
+  ncbi->alphatype    = eslUNKNOWN;
+  ncbi->alphasym     = NULL;
+
+  return;
+}
+/*------------------- SQNCBI open/close -----------------------*/
+
+
+/*****************************************************************
+ *# 2. An <ESL_SQFILE> object, in digital mode [with <alphabet>]
+ *****************************************************************/
+#ifdef eslAUGMENT_ALPHABET
+
+/* Function:  sqncbi_SetDigital()
+ * Synopsis:  Set an open <ESL_SQFILE> to read in digital mode.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Given an <ESL_SQFILE> that's already been opened,
+ *            configure it to expect subsequent input to conform
+ *            to the digital alphabet <abc>.
+ *            
+ *            Calling <esl_sqfile_Open(); esl_sqfile_SetDigital()> is
+ *            equivalent to <esl_sqfile_OpenDigital()>. The two-step
+ *            version is useful when you need a
+ *            <esl_sqfile_GuessAlphabet()> call in between, guessing
+ *            the file's alphabet in text mode before you set it to
+ *            digital mode.
+ *
+ * Returns:   <eslOK> on success.
+ */
+static int
+sqncbi_SetDigital(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc)
+{
+  return eslOK;
+}
+
+/* Function:  sqncbi_GuessAlphabet()
+ * Synopsis:  Guess the alphabet of an open <ESL_SQFILE>.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   The only ncbi db format supported is protein.
+ *
+ * Returns:   <eslOK> on success, and <*ret_type> is set to <eslAMINO>.
+ */
+static int
+sqncbi_GuessAlphabet(ESL_SQFILE *sqfp, int *ret_type)
+{
+  *ret_type = sqfp->data.ncbi.alphatype;
+  return eslOK;
+}
+#endif /*eslAUGMENT_ALPHABET*/
+/*-------------- end, digital mode SQNCBI -------------------*/
+
+
+
+
+/*****************************************************************
+ *# 3. Miscellaneous routines 
+ *****************************************************************/ 
+
+/* Function:  sqncbi_IsRewindable()
+ * Synopsis:  Return <TRUE> if <sqfp> can be rewound.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Returns <TRUE> if <sqfp> can be rewound (positioned 
+ *            to an offset of zero), in order to read it a second
+ *            time.
+ */
+static int
+sqncbi_IsRewindable(const ESL_SQFILE *sqfp)
+{
+  return TRUE;
+}
+
+/* Function:  sqncbi_GetError()
+ * Synopsis:  Returns error buffer
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Return a pointer to the error buffer.
+ */
+static const char *
+sqncbi_GetError(const ESL_SQFILE *sqfp)
+{
+  return sqfp->data.ncbi.errbuf;
+}
+
+
+/*****************************************************************
+ *# 4. Sequence reading (sequential)
+ *****************************************************************/ 
+
+/* Function:  sqncbi_Read()
+ * Synopsis:  Read the next sequence from a file.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Reads the next sequence from open sequence file <sqfp> into 
+ *            <sq>. Caller provides an allocated and initialized <s>, which
+ *            will be internally reallocated if its space is insufficient.
+ *
+ * Returns:   <eslOK> on success; the new sequence is stored in <s>.
+ * 
+ *            Returns <eslEOF> when there is no sequence left in the
+ *            file (including first attempt to read an empty file).
+ * 
+ *            Returns <eslEFORMAT> if there's a problem with the format,
+ *            such as an illegal character; the line number that the parse
+ *            error occurs on is in <sqfp->linenumber>, and an informative
+ *            error message is placed in <sqfp->errbuf>. 
+ *
+ * Throws:    <eslEMEM> on allocation failure;
+ *            <eslEINCONCEIVABLE> on internal error.
+ */
+static int
+sqncbi_Read(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int  index;
+  int  status;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  index = ncbi->index + 1;
+  if (index >= ncbi->num_seq) return eslEOF;
+
+  if ((status = pos_sequence(ncbi, index)) != eslOK) return status;
+
+  /* Disk offset bookkeeping */
+  sq->idx  = ncbi->index;
+  sq->roff = ncbi->roff;
+  sq->doff = ncbi->doff;
+  sq->hoff = ncbi->hoff;
+  sq->eoff = ncbi->eoff;
+
+  if (ncbi->alphatype == eslAMINO) 
+    status = read_amino(sqfp, sq);
+  else                             
+    status = read_dna(sqfp, sq);
+  if (status != eslOK) return status;
+
+  /* read and parse the ncbi header */
+  if ((status = parse_header(ncbi, sq)) != eslOK) return status;
+
+  return eslOK;
+}
+
+
+/* Function:  sqncbi_ReadInfo()
+ * Synopsis:  Read sequence info, but not the sequence itself.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Read the next sequence from open sequence file <sqfp>,
+ *            but don't store the sequence (or secondary structure).
+ *            Upon successful return, <s> holds all the available 
+ *            information about the sequence -- its name, accession,
+ *            description, and overall length <sq->L>. 
+ *            
+ *            This is useful for indexing sequence files, where
+ *            individual sequences might be ginormous, and we'd rather
+ *            avoid reading complete seqs into memory.
+ *
+ * Returns:   <eslOK> on success.
+ */
+static int
+sqncbi_ReadInfo(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int   index;
+  int   status;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  index = ncbi->index + 1;
+  if (index >= ncbi->num_seq) return eslEOF;
+
+  if ((status = pos_sequence(ncbi, index)) != eslOK) return status;
+
+  /* Disk offset bookkeeping */
+  sq->idx  = ncbi->index;
+  sq->roff = ncbi->roff;
+  sq->doff = ncbi->doff;
+  sq->hoff = ncbi->hoff;
+  sq->eoff = ncbi->eoff;
+
+  /* figure out the sequence length */
+  sq->L = -1;
+
+  /* read and parse the ncbi header */
+  if ((status = parse_header(ncbi, sq)) != eslOK) return status;
+
+  return eslOK;
+}
+
+
+/* Function:  sqncbi_ReadSequence()
+ * Synopsis:  Read the sequence, not the sequence header.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Read the next sequence from open sequence file <sqfp>,
+ *            but not the header information.  Upon successful return,
+ *            <s> holds all the sequence.
+ *            
+ *            This is useful reading binary formats and delaying the
+ *            over heads of reading the sequence name until needed by
+ *            the report generator.
+ *
+ * Returns:   <eslOK> on success; the new sequence is stored in <s>.
+ * 
+ *            Returns <eslEOF> when there is no sequence left in the
+ *            file (including first attempt to read an empty file).
+ *
+ * Throws:    <eslEMEM> on allocation failure;
+ */
+static int
+sqncbi_ReadSequence(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int    index;
+  int    status;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  index = ncbi->index + 1;
+  if (index >= ncbi->num_seq) return eslEOF;
+
+  if ((status = pos_sequence(ncbi, index)) != eslOK) return status;
+
+  /* Disk offset bookkeeping */
+  sq->idx  = ncbi->index;
+  sq->roff = ncbi->roff;
+  sq->doff = ncbi->doff;
+  sq->hoff = ncbi->hoff;
+  sq->eoff = ncbi->eoff;
+
+  reset_header_values(ncbi);
+
+  if (ncbi->alphatype == eslAMINO) 
+    status = read_amino(sqfp, sq);
+  else                             
+    status = read_dna(sqfp, sq);
+  if (status != eslOK) return status;
+
+  return eslOK;
+}
+
+
+/* Function:  sqncbi_ReadWindow()
+ * Synopsis:  Read next window of sequence.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Read a next window of <W> residues from open file <sqfp>,
+ *            keeping <C> residues from the previous window as
+ *            context, and keeping previous annotation in the <sq>
+ *            as before. 
+ *            
+ *            If this is the first window of a new sequence record,
+ *            <C> is ignored (there's no previous context yet), and
+ *            the annotation fields of the <sq> (name, accession, and
+ *            description) are initialized by reading the sequence
+ *            record's header. This is the only time the annotation
+ *            fields are initialized.
+ *            
+ *            On return, <sq->dsq[]> contains the window and its
+ *            context; residues <1..sq->C> are the previous context,
+ *            and residues <sq->C+1..sq->n> are the new window.  The
+ *            start and end coordinates of the whole <dsq[1..n]>
+ *            (including context) in the original source sequence are
+ *            <sq->start..sq->end>. (Or, for text mode sequences,
+ *            <sq->seq[0..sq->C-1,sq->C..sq->n-1]>, while <start> and
+ *            <end> coords are still <1..L>.)
+ *
+ *            When a sequence record is completed and no more data
+ *            remain, <eslEOD> is returned, with an ``info'' <sq>
+ *            structure (containing the annotation and the total
+ *            sequence length <L>, but no sequence). (The total
+ *            sequence length <L> is unknown in <sq> until this
+ *            <eslEOD> return.)
+ *            
+ *            The caller may then do one of two things before calling
+ *            <esl_sq_ReadWindow()> again; it can reset the sequence
+ *            with <esl_sq_Reuse()> to continue reading the next
+ *            sequence in the file, or it can set a negative <W> as a
+ *            signal to read windows from the reverse complement
+ *            (Crick) strand. Reverse complement reading only works
+ *            for nucleic acid sequence. 
+ *            
+ *            If you read the reverse complement strand, you must read
+ *            the whole thing, calling <esl_sqio_ReadWindow()> with
+ *            negative <W> windows until <eslEOD> is returned again
+ *            with an empty (info-only) <sq> structure. When that
+ *            <EOD> is reached, the <sqfp> is repositioned at the
+ *            start of the next sequence record; the caller should now
+ *            <Reuse()> the <sq>, and the next <esl_sqio_ReadWindow()>
+ *            call must have a positive <W>, corresponding to starting
+ *            to read the Watson strand of the next sequence.
+ *
+ *            Note that the <ReadWindow()> interface is designed for
+ *            an idiom of sequential reading of complete sequences in
+ *            overlapping windows, possibly on both strands; if you
+ *            want more freedom to move around in the sequence
+ *            grabbing windows in another order, you can use the
+ *            <FetchSubseq()> interface.
+ *
+ *            Reading the reverse complement strand requires file
+ *            repositioning, so it will not work on non-repositionable
+ *            streams like gzipped files or a stdin pipe. Moreover,
+ *            for reverse complement input to be efficient, the
+ *            sequence file should have consistent line lengths, 
+ *            suitable for SSI's fast subsequence indexing.
+ *            
+ * Returns:   <eslOK> on success; <sq> now contains next window of
+ *            sequence, with at least 1 new residue. The number
+ *            of new residues is <sq->W>; <sq->C> residues are 
+ *            saved from the previous window. Caller may now
+ *            process residues <sq->dsq[sq->C+1]..sq->dsq[sq->n]>.
+ *            
+ *            <eslEOD> if no new residues were read for this sequence
+ *            and strand, and <sq> now contains an empty info-only
+ *            structure (annotation and <L> are valid). Before calling
+ *            <esl_sqio_ReadWindow()> again, caller will either want
+ *            to make <W> negative (to start reading the Crick strand
+ *            of the current sequence), or it will want to reset the
+ *            <sq> (with <esl_sq_Reuse()>) to go on the next sequence.
+ *            
+ *            <eslEOF> if we've already returned <eslEOD> before to
+ *            signal the end of the previous seq record, and moreover,
+ *            there's no more sequence records in the file.
+ *            
+ *            <eslEINVAL> if an invalid residue is found in the
+ *            sequence, or if you attempt to take the reverse
+ *            complement of a sequence that can't be reverse
+ *            complemented.
+ *
+ * Throws:    <eslESYNTAX> if you try to read a reverse window before
+ *            you've read forward strand.
+ *            
+ *            <eslECORRUPT> if something goes awry internally in the
+ *            coordinate system.
+ *            
+ *            <eslEMEM> on allocation error.
+ */
+static int
+sqncbi_ReadWindow(ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq)
+{
+  uint64_t  nres;
+
+  int       index;
+  int       status;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  /* Negative W indicates reverse complement direction */
+  if (W < 0)	
+  {
+    if (sq->L == -1) ESL_EXCEPTION(eslESYNTAX, "Can't read reverse complement until you've read forward strand");
+
+    /* update the sequence index */
+    if ((status = sqncbi_Position(sqfp, sq->idx)) != eslOK)
+      ESL_FAIL(eslEINVAL, ncbi->errbuf, "Unexpected error positioning database to sequence %" PRId64, sq->idx);
+
+    if (sq->end == 1)
+    { /* last end == 1 means last window was the final one on reverse strand,
+       * so we're EOD; jump back to last forward position.
+       */
+        sq->start      = 0;
+        sq->end        = 0;
+        sq->C          = 0;
+        sq->W          = 0;
+        sq->n          = 0;
+        /* sq->L stays as it is */
+        if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL;
+        else                 sq->seq[0] = '\0';
+
+        return eslEOD;
+    }
+
+    /* If s == 0, we haven't read any reverse windows yet;
+     * init reading from sq->L
+     */
+    W = -W;
+    if (sq->start == 0)
+    {
+      sq->start        = ESL_MAX(1, (sq->L - W + 1));
+      sq->end          = sq->start;
+      sq->C            = 0;
+    }
+    else
+    { /* Else, we're continuing to next window; prv was <end>..<start> */
+      sq->C     = ESL_MIN(C, sq->L - sq->end + 1);  /* based on prev window's end */
+      sq->start = ESL_MAX(1, (sq->end - W));
+      W         = sq->end - sq->start + sq->C;
+      sq->end   = sq->start;
+    }
+
+    /* grab the subseq and rev comp it */
+    if ((status = esl_sq_GrowTo(sq, W)) != eslOK) return status;
+    sq->n = 0;
+    if (ncbi->alphatype == eslAMINO) status = read_nres_amino(sqfp, sq, W, &nres);
+    else                             status = read_nres_dna(sqfp, sq, W, &nres);
+      
+    if (status != eslOK || nres != W) {
+      ESL_EXCEPTION(eslECORRUPT, "Failed to extract %d..%d", sq->start, sq->end);
+    } else {
+      sq->end        = sq->start + nres - 1;
+      sq->W          = nres - sq->C;
+    }
+
+    status = esl_sq_ReverseComplement(sq);
+    if      (status    == eslEINVAL) ESL_FAIL(eslEINVAL, ncbi->errbuf, "can't reverse complement that seq - it's not DNA/RNA");
+    else if (status    != eslOK)     return status;
+
+    return eslOK;
+  }
+
+  /* Else, we're reading the forward strand */
+  else 
+  { /* sq->start == 0 means we haven't read any windows on this sequence yet...
+       * it's a new record, and we need to initialize with the header and
+       * the first window. This is the only case that we're allowed to return
+       * EOF from.
+       */
+    if (sq->start == 0)
+    {
+      index = ncbi->index + 1;
+      if (index >= ncbi->num_seq) return eslEOF;
+
+      /* get the sequence and header offsets */
+      if ((status = pos_sequence(ncbi, index)) != eslOK) return status;
+
+      /* Disk offset bookkeeping */
+      sq->idx  = ncbi->index;
+      sq->roff = ncbi->roff;
+      sq->doff = ncbi->doff;
+      sq->hoff = ncbi->hoff;
+      sq->eoff = ncbi->eoff;
+
+      ncbi->seq_cpos = -1;
+      ncbi->seq_L    = -1;
+
+      /* read and parse the ncbi header */
+      if ((status = parse_header(ncbi, sq)) != eslOK) return status;
+
+      sq->start    = 1;
+      sq->C        = 0;	/* no context in first window                   */
+      sq->L        = -1;	/* won't be known 'til EOD.                     */
+      ncbi->seq_L  = -1;	/* init to 0, so we can count residues as we go */
+      esl_sq_SetSource(sq, sq->name);
+    }
+    else
+    { /* else we're reading a window other than first; slide context over. */
+      sq->C = ESL_MIN(C, sq->n);
+
+      /* if the case where the window is smaller than the context and the
+       * context is not full, it is not necessary to move the context part
+       * of the sequence that has been read in.
+       */
+      if (sq->C >= C) {
+        if (sq->seq != NULL) memmove(sq->seq,   sq->seq + sq->n - sq->C,     sq->C);
+        else                 memmove(sq->dsq+1, sq->dsq + sq->n - sq->C + 1, sq->C);
+        sq->start = sq->end - sq->C + 1;
+        sq->n = C;
+      }
+    }
+
+    if ((status = esl_sq_GrowTo(sq, C+W)) != eslOK)                return status; /* EMEM    */
+    if (ncbi->alphatype == eslAMINO) status = read_nres_amino(sqfp, sq, W, &nres);
+    else                             status = read_nres_dna(sqfp, sq, W, &nres);
+
+    if (status == eslEOD)
+    {
+      sq->start  = 0;
+      sq->end    = 0;
+      sq->C      = 0;
+      sq->W      = 0;
+      sq->n      = 0;
+
+      if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL; /* erase the saved context */
+      else                 sq->seq[0] = '\0';
+
+      return eslEOD;
+    }
+    else if (status == eslOK)
+    { /* Forward strand is still in progress. <= W residues were read. Return eslOK. */
+      sq->end        = sq->start + sq->C + nres - 1;
+      sq->W          = nres;
+      return eslOK;
+    }
+    else return status;	/* EFORMAT,EMEM */
+  }
+  /*NOTREACHED*/
+  return eslOK;
+}
+
+/* Function:  sqncbi_ReadBlock()
+ * Synopsis:  Read the next block of sequences from a file.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Reads a block of sequences from open sequence file <sqfp> into 
+ *            <sqBlock>.
+ *
+ *            In the case that <long_target> is false, the sequences are
+ *            expected to be protein - individual sequences won't be long
+ *            so read them in one-whole-sequence at a time. If <max_sequences>
+ *            is set to a number > 0 read <max_sequences> sequences.
+ *
+ *            If <long_target> is true, the sequences are expected to be DNA.
+ *            Because sequences in a DNA database can exceed MAX_RESIDUE_COUNT,
+ *            this function uses ReadWindow to read chunks of sequence no
+ *            larger than <max_residues>, and must allow for the possibility that
+ *            a request will be made to continue reading a partly-read
+ *            sequence.
+ *
+ * Returns:   <eslOK> on success; the new sequence is stored in <sqBlock>.
+ * 
+ *            Returns <eslEOF> when there is no sequence left in the
+ *            file (including first attempt to read an empty file).
+ * 
+ *            Returns <eslEFORMAT> if there's a problem with the format,
+ *            such as an illegal character;
+ *
+ * Throws:    <eslEMEM> on allocation failure;
+ *            <eslEINCONCEIVABLE> on internal error.
+ */
+static int
+sqncbi_ReadBlock(ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target)
+{
+	  int     i = 0;
+	  int     size = 0;
+	  int     status = eslOK;
+	  ESL_SQ *tmpsq  = NULL;
+
+	  sqBlock->count = 0;
+
+	  if ( !long_target  )
+	  {  /* in these cases, an individual sequence won't ever be really long,
+			     so just read in a sequence at a time  */
+
+	    if (max_sequences < 1 || max_sequences > sqBlock->listSize)
+	      max_sequences = sqBlock->listSize;
+
+		  for (i = 0; i < max_sequences && size < MAX_RESIDUE_COUNT; ++i)
+		  {
+			  status = sqncbi_Read(sqfp, sqBlock->list + i);
+			  if (status != eslOK) break;
+			  size += sqBlock->list[i].n;
+			  ++sqBlock->count;
+		  }
+	  }
+	  else
+	  { /* DNA, not an alignment.  Might be really long sequences */
+
+      /*this variable is used instead of the MAX_RESIDUE_COUNT macro because impl_dummy may require shorter sequences to fit in memory*/
+      if (max_residues < 0)
+        max_residues = MAX_RESIDUE_COUNT;
+
+		  tmpsq = esl_sq_Create();
+
+		  //if complete flag set to FALSE, then the prior block must have ended with a window that was a possibly
+		  //incomplete part of it's full sequence. Read another overlaping window.
+		  if (! sqBlock->complete )
+		  {
+			  //overloading C as indicator of how big C should be for this window reading action
+			  status = sqncbi_ReadWindow(sqfp, sqBlock->list->C, max_residues, sqBlock->list);
+			  if (status == eslOK)
+			  {
+				  sqBlock->count = i = 1;
+				  size = sqBlock->list->n;
+				  sqBlock->list[i].L = sqfp->data.ncbi.seq_L;
+				  if (sqBlock->list->n >= max_residues)
+				  { // Filled the block with a single very long window.
+
+				    if ( sqBlock->list->n == sqfp->data.ncbi.seq_L) {
+				      sqBlock->complete = TRUE;
+				      esl_sq_Reuse(tmpsq);
+				      tmpsq->start =  sqBlock->list->start ;
+				      tmpsq->C = 0;
+				      status = sqncbi_ReadWindow(sqfp, 0, max_residues, tmpsq); // burn off the EOD
+              if (status == eslEOD) // otherwise, the unexpected status will be returned
+                status = eslOK;
+
+				    } else {
+				      sqBlock->complete = FALSE;
+				    }
+
+	          if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+	          return status;
+
+				  }
+				  else
+				  {
+					  // Burn off EOD (see notes for similar entry ~25 lines below), then go fetch the next sequence
+					  esl_sq_Reuse(tmpsq);
+					  tmpsq->start =  sqBlock->list->start ;
+					  tmpsq->C = 0;
+					  status = sqncbi_ReadWindow(sqfp, 0, max_residues, tmpsq);
+					  if (status != eslEOD) {
+					    if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+					    return status; //surprising
+					  }
+	          sqBlock->list->L = tmpsq->L;
+				  }
+			  }
+			  else if (status == eslEOD)
+			  { // turns out there isn't any more of the sequence to read, after all
+				
+			  }
+			  else
+			  {
+			    if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+				  return status;
+			  }
+		  } // otherwise, just start at the beginning
+
+
+		  for (  ; i < sqBlock->listSize && size < max_residues; ++i)
+		  {
+	      /* restricted request_size is used to ensure that all blocks are pretty close to the
+	       * same size. Without it, we may either naively keep asking for max_residue windows,
+	       * which can result in a window with ~2*max_residues ... or we can end up with absurdly
+	       * short fragments at the end of blocks
+	       */
+		    int request_size = ESL_MAX(max_residues-size, max_residues * .05);
+
+			  esl_sq_Reuse(tmpsq);
+			  esl_sq_Reuse(sqBlock->list + i);
+			  status = sqncbi_ReadWindow(sqfp, 0, request_size, tmpsq);
+			  if (status != eslOK) break; // end of sequences
+
+			  size += sqBlock->list[i].n - sqBlock->list[i].C;
+			  sqBlock->list[i].L = sqfp->data.ncbi.seq_L;
+			  ++(sqBlock->count);
+			  if (size >= max_residues)
+		     { // a full window worth of sequence was read
+
+          if ( sqBlock->list[i].n == sqfp->data.ncbi.seq_L) {
+             sqBlock->complete = TRUE;
+             esl_sq_Reuse(tmpsq);
+             tmpsq->start =  sqBlock->list->start ;
+             tmpsq->C = 0;
+             status = sqncbi_ReadWindow(sqfp, 0, max_residues, tmpsq); // burn off the EOD
+             if (status == eslEOD) // otherwise, the unexpected status will be returned
+                status = eslOK;
+
+           } else {
+             sqBlock->complete = FALSE;
+           }
+
+
+		       if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+		       return status;
+
+			  }
+			  else
+			  {
+				  /* Sequence was finished before filling a full window. Need to burn off the EOD value that will be
+				     returned by the next ReadWindow call. Can just use a tmp sq, after setting a couple
+				     values ReadWindow needs to see for correct processing.
+				   */
+				  esl_sq_Reuse(tmpsq);
+				  tmpsq->start =  sqBlock->list[i].start ;
+				  tmpsq->C = 0;
+				  status = sqncbi_ReadWindow(sqfp, 0, max_residues, tmpsq);
+		       if (status != eslEOD) {
+		         if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+		         return status; //surprising
+		       }
+		       //sqBlock->list[i].L = tmpsq->L;
+				  status = eslOK;
+			  }
+		  }
+	  }
+
+	  /* EOF will be returned only in the case were no sequences were read */
+	  if (status == eslEOF && i > 0) status = eslOK;
+
+	  sqBlock->complete = TRUE;
+
+	  if(tmpsq != NULL) esl_sq_Destroy(tmpsq);
+
+	  return status;
+}
+
+/* Function:  sqncbi_Echo()
+ * Synopsis:  Echo a sequence's record onto output stream.
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Returns:   <eslEUNIMPLEMENTED>.
+ */
+static int
+sqncbi_Echo(ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp)
+{
+  ESL_EXCEPTION(eslEINVAL, "can't Echo() a sequence from NCBI database");
+  return eslEUNIMPLEMENTED;
+}
+/*------------------ end, sequential sequence input -------------*/
+
+
+
+/* Function:  reset_db()
+ * Synopsis:  Resets a sequence file.
+ * Incept:    MSF, Wed Mar 17, 2010 [Janelia]
+ *
+ * Purpose:   Closes just the currently opened db and frees
+ *            up the memory associated with that db.  This is
+ *            used primarily with multi-volume databases where
+ *            the current db is closed so the next one can be
+ *            opened.
+ *
+ * Returns:   void.
+ */
+static void
+reset_db(ESL_SQNCBI_DATA *ncbi)
+{
+  if (ncbi->title     != NULL) free(ncbi->title);
+  if (ncbi->timestamp != NULL) free(ncbi->timestamp);
+
+  if (ncbi->fppin != NULL) fclose(ncbi->fppin);
+  if (ncbi->fpphr != NULL) fclose(ncbi->fpphr);
+  if (ncbi->fppsq != NULL) fclose(ncbi->fppsq);
+
+  ncbi->fppin        = NULL;
+  ncbi->fpphr        = NULL;
+  ncbi->fppsq        = NULL;
+
+  ncbi->title        = NULL;
+  ncbi->timestamp    = NULL;
+
+  return;
+}
+
+
+/* reset_header_values()
+ *
+ * Clear the header values so it is clear which values
+ * have been set by the current header.
+ */
+static void
+reset_header_values(ESL_SQNCBI_DATA *ncbi)
+{
+  ncbi->name_ptr    = NULL;
+  ncbi->name_size   = 0;
+  ncbi->acc_ptr     = NULL;
+  ncbi->acc_size    = 0;
+  ncbi->int_id      = -1;
+  ncbi->str_id_ptr  = NULL;
+  ncbi->str_id_size = 0;
+}
+
+/* volume_open()
+ *
+ * Open up the index, head and sequence files for a particular
+ * volume.  Parse the first three fields in the index file,
+ * one more time, just to make sure nothing funny is going on.
+ */
+static int
+volume_open(ESL_SQNCBI_DATA *ncbi, int volume)
+{
+  int       len;
+  uint32_t  info[4];
+  int       dbtype;
+  int       status = eslOK;	/* return status from an ESL call */
+
+  char     *name;
+  
+  if (volume < 0 || volume > ncbi->volumes) return eslEINVAL;
+
+  /* if the db has no volumes return */
+  if (ncbi->volumes == 0) return eslOK;
+
+  if (ncbi->fppin != NULL) fclose(ncbi->fppin);
+  if (ncbi->fpphr != NULL) fclose(ncbi->fpphr);
+  if (ncbi->fppsq != NULL) fclose(ncbi->fppsq);
+
+  name = ncbi->vols[volume].name;
+  len  = strlen(name);
+
+  dbtype = (ncbi->alphatype == eslDNA) ? NCBI_DNA_DB : NCBI_AMINO_DB;
+
+  /* Check for basic database first */
+  strcpy(name+len, ".Xin");
+  name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p';
+  if ((ncbi->fppin = fopen(name, "rb")) == NULL) {
+    status = eslFAIL; 
+    goto ERROR;
+  }
+  strcpy(name+len, ".Xhr");
+  name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p';
+  if ((ncbi->fpphr = fopen(name, "rb")) == NULL) {
+    status = eslFAIL; 
+    goto ERROR;
+  }
+  strcpy(name+len, ".Xsq");
+  name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p';
+  if ((ncbi->fppsq = fopen(name, "rb")) == NULL) {
+    status = eslFAIL; 
+    goto ERROR;
+  }
+
+  /* quickly parse the header make sure we are sane. */
+  if (fread(&info[0], sizeof(uint32_t), 3, ncbi->fppin) != 3) status = eslFAIL;
+  if (htobe32(info[0]) != NCBI_VERSION_4)                     status = eslEFORMAT;
+  if (htobe32(info[1]) != dbtype)                             status = eslEFORMAT;
+
+  if (status != eslOK) goto ERROR;
+
+  /* save the offsets to the index tables */
+  ncbi->hdr_off = ncbi->vols[volume].hdr_off;
+  ncbi->seq_off = ncbi->vols[volume].seq_off;
+  if (dbtype == NCBI_DNA_DB) {
+    ncbi->amb_off = ncbi->vols[volume].amb_off;
+  }
+
+  ncbi->vol_index   = volume;
+  ncbi->index_start = -1;
+  ncbi->index_end   = -1;
+
+  /* skip the first sentinal byte in the .psq file */
+  fgetc(ncbi->fppsq);
+
+  /* zero terminate the name other functions can just
+   * tack on any extension without a lot of testing.
+   */
+  name[len] = '\0';
+
+  return eslOK;
+
+ ERROR:
+
+  reset_db(ncbi);
+
+  return status;
+}
+
+
+/* pos_sequence_offsets()
+ *
+ * Position the sequence and header files for reading at
+ * the start of the indexed sequence <inx>.  This routine
+ * buffers <INDEX_TABLE_SIZE> offsets from the header and
+ * sequence files.  If the index <inx> is not in the
+ * currently buffered table, read the the indexes.  If the
+ * index is not in the current volume find which volume
+ * the indexed sequence is in and open up that database.
+ */
+static int
+pos_sequence(ESL_SQNCBI_DATA *ncbi, int inx)
+{
+  int        cnt;
+  int        status;
+
+  uint32_t   offset;
+  uint32_t   start;
+  uint32_t   end;
+
+  ESL_SQNCBI_VOLUME *volume;
+
+  if (inx < 0 || inx > ncbi->num_seq) return eslEINVAL;
+
+  start = ncbi->index_start;
+  end   = ncbi->index_end;
+
+  /* get the offsets for the header, sequence and ambiguity table */
+  if (ncbi->index_start == -1 || inx < start || inx > end) {
+
+    /* if the db is broken up into volumes, lets find the correct one to use */
+    if (ncbi->volumes > 0) {
+      volume = ncbi->vols + ncbi->vol_index;
+      if (inx < volume->start_seq || inx > volume->end_seq) {
+	volume = ncbi->vols;
+	for (cnt = 0; cnt < ncbi->volumes; ++cnt) {
+	  if (inx < volume->end_seq) break;
+	  ++volume;
+	}
+
+	/* check just to make sure we found the volume */
+	if (cnt >= ncbi->volumes) return eslFAIL;
+
+	if ((status = volume_open(ncbi, cnt)) != eslOK) return status;
+      }
+    }
+
+    /* adjust where we start reading from if we are reading forwards or backwards */
+    if (ncbi->index_start == -1 || inx > end) {
+      start = inx;
+    } else {
+      start = inx + 2;
+      start = (start > INDEX_TABLE_SIZE) ? start - INDEX_TABLE_SIZE : 0;
+    }
+    ncbi->index_start = start;
+
+    /* when calculating the count be sure to take into account the fact that the
+     * index tables contain one index more that the number of sequences and this
+     * last index is used to point to the end of the last header and sequences.
+     */
+    if (ncbi->volumes > 0) {
+      cnt = volume->end_seq - inx + 2;     // cppcheck thinks end_seq can be uninitialized here. I think it's wrong.
+      start = start - volume->start_seq;   //  .. and ditto for start_seq.
+    } else {
+      cnt = ncbi->num_seq - inx + 1;
+    }
+    cnt = (cnt > INDEX_TABLE_SIZE) ? INDEX_TABLE_SIZE : cnt;
+    ncbi->index_end = ncbi->index_start + cnt - 2;
+
+    offset = ncbi->hdr_off + (sizeof(uint32_t) * start);
+    if (fseek(ncbi->fppin, offset, SEEK_SET) != 0) {
+      ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error seeking header index %d\n", offset);
+    }
+    if (fread(ncbi->hdr_indexes, sizeof(uint32_t), cnt, ncbi->fppin) != cnt) {
+      ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error reading header index %d at %d(%d)\n", start, offset, cnt);
+    }
+
+    offset = ncbi->seq_off + (sizeof(uint32_t) * start);
+    if (fseek(ncbi->fppin, offset, SEEK_SET) != 0) {
+      ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error seeking sequence index %d\n", offset);
+    }
+    if (fread(ncbi->seq_indexes, sizeof(uint32_t), cnt, ncbi->fppin) != cnt) {
+      ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error reading sequence index %d at %d(%d)\n", start, offset, cnt);
+    }
+
+    if (ncbi->alphatype == eslDNA) {
+      offset = ncbi->amb_off + (sizeof(uint32_t) * start);
+      if (fseek(ncbi->fppin, offset, SEEK_SET) != 0) {
+	ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error seeking ambiguity index %d\n", offset);
+      }
+      if (fread(ncbi->amb_indexes, sizeof(uint32_t), cnt, ncbi->fppin) != cnt) {
+	ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error reading ambiguity index %d at %d(%d)\n", start, offset, cnt);
+      }
+    }
+  }
+
+  ncbi->index = inx;
+
+  inx -= ncbi->index_start;
+  ncbi->roff = htobe32(ncbi->hdr_indexes[inx]);
+  ncbi->doff = htobe32(ncbi->seq_indexes[inx]);
+  ncbi->hoff = htobe32(ncbi->hdr_indexes[inx+1]);
+  ncbi->eoff = htobe32(ncbi->seq_indexes[inx+1]);
+
+  if (ncbi->alphatype == eslDNA) {
+    ncbi->seq_apos = htobe32(ncbi->amb_indexes[inx]);
+    ncbi->seq_alen = ncbi->seq_apos + htobe32(ncbi->amb_indexes[inx+1]) + 1;
+  } else {
+    ncbi->seq_apos = 0;
+    ncbi->seq_alen = 0;
+  }
+
+  if (fseek(ncbi->fpphr, ncbi->roff, SEEK_SET) != 0) return eslESYS;
+  if (fseek(ncbi->fppsq, ncbi->doff, SEEK_SET) != 0) return eslESYS;
+
+  return eslOK;
+}
+
+/* Function:  read_amino()
+ * Synopsis:  Read in the amino sequence
+ * Incept:    MSF, Wed Jan 27, 2010 [Janelia]
+ *
+ * Purpose:   Read and translate the amino acid sequence.
+ */
+static int
+read_amino(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int     inx;
+  int     size;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  if (ncbi->index >= ncbi->num_seq) return eslEOF;
+
+  size = sq->eoff - sq->doff;
+
+  /* figure out the sequence length */
+  if (esl_sq_GrowTo(sq, size) != eslOK) return eslEMEM;
+
+  /* figure out if the sequence is in digital mode or not */
+  if (sq->dsq != NULL) {
+    ESL_DSQ *ptr = sq->dsq + 1;
+    if (fread(ptr, sizeof(char), size, ncbi->fppsq) != size) return eslEFORMAT;
+    for (inx = 0; inx < size - 1; ++inx) {
+      *ptr = sqfp->inmap[(int) *ptr];
+      ++ptr;
+    }
+    *ptr = eslDSQ_SENTINEL;
+  } else {
+    char *ptr = sq->seq;
+    if (fread(ptr, sizeof(char), size, ncbi->fppsq) != size) return eslEFORMAT;
+    for (inx = 0; inx < size - 1; ++inx) {
+      *ptr = sqfp->inmap[(int) *ptr];
+      *ptr = ncbi->alphasym[(int) *ptr];
+      ++ptr;
+    }
+    *ptr = '\0';
+  }
+
+  sq->start = 1;
+  sq->end   = size - 1;
+  sq->C     = 0;
+  sq->W     = size - 1;
+  sq->L     = size - 1;
+  sq->n     = size - 1;
+
+  return eslOK;
+}
+
+
+/* Function:  read_dna()
+ * Synopsis:  Read in the dna sequence
+ * Incept:    MSF, Wed Jan 27, 2010 [Janelia]
+ *
+ * Purpose:   Read and translate the dna sequence.
+ */
+static int
+read_dna(ESL_SQFILE *sqfp, ESL_SQ *sq)
+{
+  int64_t  inx;
+  int64_t  cnt;
+  int64_t  off;
+  int      size;
+  int      text;
+  int      status;
+  int      amb32;
+
+  int      remainder;
+  int      length;
+  int      ssize;
+  int      n;
+
+  char    *ptr;
+  void    *t;
+
+  unsigned char c;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  if (ncbi->index >= ncbi->num_seq) return eslEOF;
+
+  /* calculate the max size of the sequence.  It is most likely
+   * a bit smaller, but we need to read the sequence in first
+   * before the real size can be figured out.
+   */
+  size = sq->eoff - sq->doff;
+  if (ncbi->hdr_alloced < size) {
+    while (ncbi->hdr_alloced < size) ncbi->hdr_alloced += ncbi->hdr_alloced;
+    ESL_RALLOC(ncbi->hdr_buf, t, sizeof(char) * ncbi->hdr_alloced);
+  }
+  if (fread(ncbi->hdr_buf, sizeof(char), size, ncbi->fppsq) != size) return eslEFORMAT;
+
+  ssize     = ncbi->seq_apos - sq->doff - 1;
+  remainder = *(ncbi->hdr_buf + ssize) & 0x03;
+  length    = ssize * 4 + remainder;
+
+  /* figure out the sequence length */
+  if (esl_sq_GrowTo(sq, length) != eslOK) return eslEMEM;
+
+  /* figure out if the sequence is in digital mode or not */
+  if (sq->dsq != NULL) {
+    text = FALSE;
+    ptr = (char *)sq->dsq + 1;
+  } else {
+    text = TRUE;
+    ptr = sq->seq;
+  }
+
+  for (inx = 0; inx < ssize; ++inx) {
+    c = ncbi->hdr_buf[inx];
+    n = 1 << ((c >> 6) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+    n = 1 << ((c >> 4) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+    n = 1 << ((c >> 2) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+    n = 1 << ((c >> 0) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+  }
+
+  /* handle the remainder */
+  c = ncbi->hdr_buf[inx];
+  for (inx = 0; inx < remainder; ++inx) {
+    n = 1 << ((c >> (6 - inx * 2)) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+  }
+
+  *ptr = (text) ? '\0' : eslDSQ_SENTINEL;
+
+  /* we need to look that the first by the the ambiguity table
+   * to see if the entries are 32 or 64 bit entries.
+   */
+  amb32 = 0;
+  if (ncbi->seq_apos - sq->doff < size) {
+    amb32 = ((ncbi->hdr_buf[ncbi->seq_apos - sq->doff] & 0x80) == 0);
+  }
+
+  /* skip past the count and start processing the abmiguity table */
+  ssize = ncbi->seq_apos - sq->doff + 4;
+  ptr = (text) ? sq->seq : (char *)sq->dsq + 1;
+
+  while (ssize < size) {
+    /* get the ambiguity character */
+    n = ((ncbi->hdr_buf[ssize] >> 4) & 0x0f);
+    c = sqfp->inmap[n];
+    if (text) c = ncbi->alphasym[(int) c];
+
+    if (amb32) {
+      /* get the repeat count 4 bits */
+      cnt = (ncbi->hdr_buf[ssize] & 0x0f);
+      cnt += 1;
+
+      /* get the offset 24 bits */
+      off = ncbi->hdr_buf[ssize+1];
+      off = (off << 8) | ncbi->hdr_buf[ssize+2];
+      off = (off << 8) | ncbi->hdr_buf[ssize+3];
+
+      for (inx = 0; inx < cnt; ++inx) ptr[off+inx] = c;
+
+      ssize += 4;
+    } else {
+      /* get the repeat count 12 bits */
+      cnt = (ncbi->hdr_buf[ssize] & 0x0f);
+      cnt = (cnt << 8) | ncbi->hdr_buf[ssize+1];
+      cnt += 1;
+
+      /* get the offset 48 bits*/
+      off = ncbi->hdr_buf[ssize+2];
+      off = (off << 8) | ncbi->hdr_buf[ssize+3];
+      off = (off << 8) | ncbi->hdr_buf[ssize+4];
+      off = (off << 8) | ncbi->hdr_buf[ssize+5];
+      off = (off << 8) | ncbi->hdr_buf[ssize+6];
+      off = (off << 8) | ncbi->hdr_buf[ssize+7];
+
+      for (inx = 0; inx < cnt; ++inx) ptr[off+inx] = c;
+
+      ssize += 8;
+    }
+  }
+
+  sq->start = 1;
+  sq->end   = length;
+  sq->C     = 0;
+  sq->W     = length;
+  sq->L     = length;
+  sq->n     = length;
+
+  return eslOK;
+
+ ERROR:
+  return eslEMEM;
+}
+
+
+/* Function:  read_nres_amino()
+ * Synopsis:  Read in the amino sequence
+ * Incept:    MSF, Wed Jan 27, 2010 [Janelia]
+ *
+ * Purpose:   Read and translate the dna sequence.
+ */
+static int
+read_nres_amino(ESL_SQFILE *sqfp, ESL_SQ *sq, int len, uint64_t *nres)
+{
+  int     inx;
+  int     off;
+  int     size;
+
+  char   *ptr;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  if (ncbi->index >= ncbi->num_seq) return eslEOF;
+
+  /* if we don't know the sequence length, figure it out */
+  if (ncbi->seq_L == -1) ncbi->seq_L = sq->eoff - sq->doff - 1;
+
+  /* check if we are at the end */
+  if (sq->start + sq->n > ncbi->seq_L) {
+    if (nres != NULL) *nres = 0;
+    sq->L = ncbi->seq_L;
+    return eslEOD;
+  }
+
+  /* figure out if the sequence is in digital mode or not */
+  ptr = (sq->dsq != NULL) ? (char *)sq->dsq + 1 : sq->seq;
+  ptr += sq->n;
+
+  /* calculate where to start reading from */
+  off   = sq->doff + sq->start + sq->n - 1;
+
+  /* calculate the size to read */
+  size = ncbi->seq_L - (sq->start + sq->n - 1);
+  size = (size > len) ? len : size;
+
+  /* seek to the windows location and read into the buffer */
+  if (fseek(ncbi->fppsq, off, SEEK_SET) != 0) return eslESYS;
+  if (fread(ptr, sizeof(char), size, ncbi->fppsq) != size) return eslEFORMAT;
+
+  /* figure out if the sequence is in digital mode or not */
+  for (inx = 0; inx < size; ++inx) {
+    *ptr = sqfp->inmap[(int) *ptr];
+    if (sq->dsq == NULL) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+  }
+
+  *ptr = (sq->dsq == NULL) ? '\0' : eslDSQ_SENTINEL;
+
+  sq->n = sq->n + size;
+
+  if (nres != NULL) *nres = size;
+
+  return eslOK;
+}
+
+/* Function:  correct_ambiguity()
+ * Synopsis:  Read in the dna sequence
+ * Incept:    MSF, Thu Feb 4, 2010 [Janelia]
+ *
+ * Purpose:   Correct any ambiguity characters.
+ */
+static int
+correct_ambiguity(ESL_SQFILE *sqfp, ESL_SQ *sq, int len)
+{
+  int64_t   alen;         /* ambiguity length       */
+  int64_t   soff;         /* starting offset        */
+  int64_t   eoff;         /* ending offset          */
+  int64_t   ainx;         /* ambiguity index        */
+  int64_t   size;         /* size of table read in  */
+  int64_t   cnt;          /* repeat count           */
+  int64_t   off;
+  int64_t   n;
+
+  int       amb32;        /* flag for 32 or 64 bits */
+  char     *ptr;
+
+  unsigned char c;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  if (ncbi->seq_alen == 0) return eslOK;
+
+  /* go to the start of the ambiguity table and see if the table
+   * is in 32 or 64 bit entries.
+   */
+  if (fseek(ncbi->fppsq, ncbi->seq_apos, SEEK_SET)       != 0) return eslESYS;
+  if (fread(ncbi->hdr_buf, sizeof(char), 4, ncbi->fppsq) != 4) return eslEFORMAT;
+  amb32 = ((ncbi->hdr_buf[0] & 0x80) == 0);
+
+  ptr = (sq->dsq != NULL) ? (char *)sq->dsq + 1 : sq->seq;
+  ptr += sq->n;
+
+  /* calculate the starting and ending offsets */
+  soff = sq->start + sq->n - 1;
+  eoff = soff + len;
+
+  off = 0;
+  ainx = 0;
+  size = 0;
+  alen = ncbi->seq_alen - 4;
+  while (off < eoff) {
+    /* check if we need to read in more of the  abmiguity table */
+    if (ainx == size) {
+      size = alen;
+      size = (size > INIT_HDR_BUFFER_SIZE) ? INIT_HDR_BUFFER_SIZE : size;
+      if (fread(ncbi->hdr_buf, sizeof(char), size, ncbi->fppsq) != size) return eslEFORMAT;
+      alen -= size;
+      ainx = 0;
+    }
+
+    /* get the ambiguity character */
+    n = ((ncbi->hdr_buf[ainx] >> 4) & 0x0f);
+    c = sqfp->inmap[n];
+    if (sq->dsq == NULL) c = ncbi->alphasym[(int) c];
+
+    if (amb32) {
+      /* get the repeat count 4 bits */
+      cnt = (ncbi->hdr_buf[ainx] & 0x0f);
+      cnt += 1;
+
+      /* get the offset 24 bits */
+      off = ncbi->hdr_buf[ainx+1];
+      off = (off << 8) | ncbi->hdr_buf[ainx+2];
+      off = (off << 8) | ncbi->hdr_buf[ainx+3];
+
+      ainx += 4;
+    } else {
+      /* get the repeat count 12 bits */
+      cnt = (ncbi->hdr_buf[ainx] & 0x0f);
+      cnt = (cnt << 8) | ncbi->hdr_buf[ainx+1];
+      cnt += 1;
+
+      /* get the offset 48 bits*/
+      off = ncbi->hdr_buf[ainx+2];
+      off = (off << 8) | ncbi->hdr_buf[ainx+3];
+      off = (off << 8) | ncbi->hdr_buf[ainx+4];
+      off = (off << 8) | ncbi->hdr_buf[ainx+5];
+      off = (off << 8) | ncbi->hdr_buf[ainx+6];
+      off = (off << 8) | ncbi->hdr_buf[ainx+7];
+
+      ainx += 8;
+    }
+
+    if (off + cnt >= soff && off < eoff) {
+      int inx;
+      int start = (off > soff) ? off - soff : 0;
+      int end   = (off + cnt > eoff) ? eoff : off - soff + cnt;
+      for (inx = start; inx < end; ++inx) ptr[inx] = c;
+    }
+
+    off += cnt;
+  }
+
+  return eslOK;
+}
+
+/* Function:  read_nres_dna()
+ * Synopsis:  Read in the dna sequence
+ * Incept:    MSF, Wed Jan 27, 2010 [Janelia]
+ *
+ * Purpose:   Read and translate the dna sequence.
+ */
+static int
+read_nres_dna(ESL_SQFILE *sqfp, ESL_SQ *sq, int len, uint64_t *nres)
+{
+  int     inx;
+  int     off;
+  int     cnt;
+  int     ncnt;
+  int     start;
+  int     skip;
+  int     text;
+  int     status;
+
+  int     remainder;
+  int     length;
+  int     ssize;
+  int     n;
+
+  char   *ptr;
+  void   *t;
+
+  unsigned char c;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  if (ncbi->index >= ncbi->num_seq) return eslEOF;
+
+  /* if we don't know the sequence length, figure it out */
+  if (ncbi->seq_L == -1) {
+    if (fseek(ncbi->fppsq, ncbi->seq_apos - 1, SEEK_SET) != 0) return eslESYS;
+    if (fread(&c, sizeof(char), 1, ncbi->fppsq) != 1)          return eslEFORMAT;
+
+    ssize       = ncbi->seq_apos - sq->doff - 1;
+    remainder   = c & 0x03;
+    length      = ssize * 4 + remainder;
+
+    ncbi->seq_L = length;
+  }
+
+  /* check if we are at the end */
+  if (sq->start + sq->n > ncbi->seq_L) {
+    if (nres != NULL) *nres = 0;
+    sq->L = ncbi->seq_L;
+    return eslEOD;
+  }
+
+  /* calculate where to start reading from */
+  start = sq->start + sq->n - 1;
+  off   = sq->doff + start / 4;
+
+  /* calculate bits to skip at the beginning and end */
+  cnt   = ncbi->seq_L - (sq->start + sq->n - 1);
+  cnt   = (cnt > len) ? len : cnt;
+
+  skip      = start & 0x03;
+  remainder = skip + cnt;
+  remainder = (remainder & 0x03) ? (remainder & 0x03) : 4;
+
+  /* calculate bytes need to read in the window */
+  ssize = (cnt + skip + 3) / 4;
+
+  /* seek to the windows location and read into the buffer */
+  if (fseek(ncbi->fppsq, off, SEEK_SET) != 0) return eslESYS;
+  if (ncbi->hdr_alloced < ssize) {
+    while (ncbi->hdr_alloced < ssize) ncbi->hdr_alloced += ncbi->hdr_alloced;
+    ESL_RALLOC(ncbi->hdr_buf, t, sizeof(char) * ncbi->hdr_alloced);
+  }
+  if (fread(ncbi->hdr_buf, sizeof(char), ssize, ncbi->fppsq) != ssize) return eslEFORMAT;
+
+  /* figure out if the sequence is in digital mode or not */
+  if (sq->dsq != NULL) {
+    text = FALSE;
+    ptr = (char *)sq->dsq + 1;
+  } else {
+    text = TRUE;
+    ptr = sq->seq;
+  }
+  ptr += sq->n;
+
+  inx = 0;
+  c = ncbi->hdr_buf[inx];
+  for (inx = skip; inx < 4; ++inx) {
+    n = 1 << ((c >> (6 - inx * 2)) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+  }
+
+  for (inx = 1; inx < ssize - 1; ++inx) {
+    c = ncbi->hdr_buf[inx];
+    n = 1 << ((c >> 6) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+    n = 1 << ((c >> 4) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+    n = 1 << ((c >> 2) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+    n = 1 << ((c >> 0) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+  }
+
+  /* handle the remainder */
+  c = ncbi->hdr_buf[inx];
+  for (inx = 0; inx < remainder; ++inx) {
+    n = 1 << ((c >> (6 - inx * 2)) & 0x03);
+    *ptr = sqfp->inmap[n];
+    if (text) *ptr = ncbi->alphasym[(int) *ptr];
+    ++ptr;
+  }
+
+  *ptr = (text) ? '\0' : eslDSQ_SENTINEL;
+
+  /* calculate the number of residues processed */
+  ncnt = (ssize - 1) * 4 + remainder - skip;
+
+  /* start processing the abmiguity table if there is one */
+  if (ncbi->seq_alen > 0) {
+    correct_ambiguity(sqfp, sq, ncnt);
+  }
+
+  sq->n = sq->n + ncnt;
+
+  if (nres != NULL) *nres = ncnt;
+
+  return eslOK;
+
+ ERROR:
+  return eslEMEM;
+}
+
+
+/* Function:  inmap_ncbi()
+ * Synopsis:  Set up a translation map
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Initialize the translation map used to translate a ncbi
+ *            sequences to the internal representation used in hmmer.
+ *
+ * Returns:   <eslOK> on success;
+ * 
+ * Throws:    <eslEMEM> on allocation failure;
+ */
+static int
+inmap_ncbi(ESL_SQFILE *sqfp)
+{
+  int status = eslOK;
+
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  switch(ncbi->alphatype) {
+  case eslDNA:
+    status = inmap_ncbi_dna(sqfp);
+    break;
+  case eslAMINO:
+    status = inmap_ncbi_amino(sqfp);
+    break;
+  default:
+    ESL_EXCEPTION(eslEINVAL, "bad alphabet type: unrecognized");
+  }
+
+  return status;
+}
+
+/* Function:  inmap_ncbi_dna()
+ * Synopsis:  Set up a translation map
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Initialize the translation map used to translate a ncbi
+ *            protein sequence to the internal representation used in
+ *            hmmer.
+ *
+ * Returns:   <eslOK> on success;
+ * 
+ * Throws:    <eslEMEM> on allocation failure;
+ */
+static int
+inmap_ncbi_dna(ESL_SQFILE *sqfp)
+{
+  int x, y;
+  const char *ncbisym = "-ACMGRSVTWYHKDBN";
+
+  ESL_ALPHABET    *abc  = NULL;
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  if ((abc = esl_alphabet_Create(eslDNA)) == NULL) return eslEMEM;
+
+  for (x =  0;  x < 128;  x++) sqfp->inmap[x] = eslDSQ_ILLEGAL;
+
+  /* for each letter in the ncbi alphabet, find that letter in the
+   * hmmer alphabet and map the translation.
+   */
+  for (x = 0; x < strlen(ncbisym); ++x) {
+    for (y = 0; y < strlen(abc->sym); ++y) {
+      if (ncbisym[x] == abc->sym[y]) {
+	sqfp->inmap[x] = y;
+	break;
+      }
+    }
+
+    /* there is a problem if a translation does not exist */
+    if (y >= strlen(abc->sym)) return eslEFORMAT;
+  }
+
+  if (ncbi->alphasym == NULL) esl_strdup(abc->sym, -1, &ncbi->alphasym);
+
+  esl_alphabet_Destroy(abc);
+
+  return eslOK;
+}
+
+
+/* Function:  inmap_ncbi_amino()
+ * Synopsis:  Set up a translation map
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Initialize the translation map used to translate a ncbi
+ *            protein sequence to the internal representation used in
+ *            hmmer.
+ *
+ * Returns:   <eslOK> on success;
+ * 
+ * Throws:    <eslEMEM> on allocation failure;
+ */
+static int
+inmap_ncbi_amino(ESL_SQFILE *sqfp)
+{
+  int x, y;
+  const char *ncbisym = "-ABCDEFGHIKLMNPQRSTVWXYZU*OJ";
+
+  ESL_ALPHABET    *abc  = NULL;
+  ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi;
+
+  if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) return eslEMEM;
+
+  for (x =  0;  x < 128;  x++) sqfp->inmap[x] = eslDSQ_ILLEGAL;
+
+  /* for each letter in the ncbi alphabet, find that letter in the
+   * hmmer alphabet and map the translation.
+   */
+  for (x = 0; x < strlen(ncbisym); ++x) {
+    for (y = 0; y < strlen(abc->sym); ++y) {
+      if (ncbisym[x] == abc->sym[y]) {
+	sqfp->inmap[x] = y;
+	break;
+      }
+    }
+
+    /* there is a problem if a translation does not exist */
+    if (y >= strlen(abc->sym)) return eslEFORMAT;
+  }
+
+  if (ncbi->alphasym == NULL) esl_strdup(abc->sym, -1, &ncbi->alphasym);
+
+  esl_alphabet_Destroy(abc);
+
+  return eslOK;
+}
+
+
+
+/*****************************************************************
+ *# 5. Parsing routines
+ *****************************************************************/ 
+
+/* Function:  parse_expect()
+ * Synopsis:  Expect the next bytes to parse match
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Match if the next <len> bytes to parse match the bytes
+ *            in <str>.  If the bytes do not match, throw <eslEFORMAT>
+ *            error.  Advance the parsers pointer.
+ *
+ * Returns:   <eslOK> on success
+ * 
+ * Throws:    <eslEFORMAT> if there are insufficient bytes remaining
+ *            in the header or if the data to parse does not match
+ *            what is expected.
+ */
+static int
+parse_expect(ESL_SQNCBI_DATA *ncbi, void *str, int len)
+{
+  int size;
+  unsigned char *c;
+  unsigned char *limit;
+
+  size  = ncbi->hoff - ncbi->roff;
+  limit = ncbi->hdr_buf + size;
+
+  /* verify the buffer has atleast len bytes remaining */
+  if (ncbi->hdr_ptr + len > limit) {
+      ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Expecting %d bytes at %d : 0x%X(%d)\n",
+	       len, (uint32_t) (ncbi->hdr_ptr - ncbi->hdr_buf), ncbi->roff, size); 
+  }
+
+  /* check the buffer matches the token string */
+  c = (unsigned char *) str;
+  while (len--) {
+    if (*ncbi->hdr_ptr != *c) {
+      ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Expecting 0x%X found 0x%X at %d : 0x%X(%d)\n",
+	       *ncbi->hdr_ptr, *c, (uint32_t) (ncbi->hdr_ptr - ncbi->hdr_buf), ncbi->roff, size); 
+    }
+    ncbi->hdr_ptr++;
+    c++;
+  }
+
+  return eslOK;
+}
+
+/* Function:  parse_accept()
+ * Synopsis:  Check if the next bytes to parse match
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Check if the next <len> bytes to parse match the bytes
+ *            in <str>.  If the bytes match, they are consumed and the
+ *            parsers pointer is advanced.
+ *
+ * Returns:   <eslOK> on success
+ *            <eslEFORMAT> if the bytes to not match.
+ */
+static int
+parse_accept(ESL_SQNCBI_DATA *ncbi, void *str, int len)
+{
+  int i;
+  int size;
+  unsigned char *c;
+  unsigned char *limit;
+
+  size  = ncbi->hoff - ncbi->roff;
+  limit = ncbi->hdr_buf + size;
+
+  /* check the buffer matches the token string */
+  if (ncbi->hdr_ptr + len > limit)  return eslEFORMAT;
+
+  /* verify the buffer matches the token string without advancing
+   * the buffer pointers until we have a complete match.
+   */
+  c = (unsigned char *) str;
+  for (i = 0; i < len; ++i) {
+    if (ncbi->hdr_ptr[i] != c[i])   return eslEFORMAT;
+  }
+  ncbi->hdr_ptr += len;
+
+  return eslOK;
+}
+
+/* Function:  parse_peek()
+ * Synopsis:  Peek at the next byte to parse
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Return the next characer to be parsed without advancing the
+ *            parsers pointer.
+ *
+ * Returns:   <eslOK> on success
+ *            <eslEFORMAT> if there are insufficient bytes remaining
+ *            in the header.
+ */
+static int
+parse_peek(ESL_SQNCBI_DATA *ncbi, unsigned char *c)
+{
+  int size;
+  unsigned char *limit;
+
+  size  = ncbi->hoff - ncbi->roff;
+  limit = ncbi->hdr_buf + size;
+
+  /* verify the buffer has atleast len bytes remaining */
+  if (ncbi->hdr_ptr + 1 > limit)    return eslEFORMAT;
+
+  *c = *ncbi->hdr_ptr;
+
+  return eslOK;
+}
+
+/* Function:  parse_consume()
+ * Synopsis:  Copies bytes from the header
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Copies <len> bytes from the header to the buffer supplied by
+ *            <str> if non-null.  Adcance the parser pointer.
+ *
+ * Returns:   <eslOK> on success
+ * 
+ * Throws:    <eslEFORMAT> if there are insufficient bytes remaining
+ *            in the header.
+ */
+static int
+parse_consume(ESL_SQNCBI_DATA *ncbi, void *str, int len)
+{
+  int i;
+  int size;
+  unsigned char *c;
+  unsigned char *limit;
+
+  size  = ncbi->hoff - ncbi->roff;
+  limit = ncbi->hdr_buf + size;
+
+  /* verify the buffer has atleast len bytes remaining */
+  if (ncbi->hdr_ptr + len > limit) {
+      ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Expecting %d bytes at %d : 0x%X(%d)\n",
+	       len, (uint32_t) (ncbi->hdr_ptr - ncbi->hdr_buf), ncbi->roff, size); 
+  }
+
+  /* copy the characters in the buffer to <str> */
+  c = (unsigned char *) str;
+  for (i = 0; i < len; ++i) {
+    if (c != NULL) *c++ = *ncbi->hdr_ptr++;
+  }
+
+  return eslOK;
+}
+
+/* Function:  parse_advance()
+ * Synopsis:  Advance the parser pointer
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Advance the parser pointer <len> bytes.
+ *
+ * Returns:   <eslOK> on success
+ * 
+ * Throws:    <eslEFORMAT> if there are insufficient bytes remaining
+ *            in the header.
+ */
+static int
+parse_advance(ESL_SQNCBI_DATA *ncbi, int len)
+{
+  int size;
+  unsigned char *limit;
+
+  size  = ncbi->hoff - ncbi->roff;
+  limit = ncbi->hdr_buf + size;
+
+  /* verify the buffer has atleast len bytes remaining */
+  if (ncbi->hdr_ptr + len > limit) {
+      ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Expecting %d bytes at %d : 0x%X(%d)\n",
+	       len, (uint32_t) (ncbi->hdr_ptr - ncbi->hdr_buf), ncbi->roff, size); 
+  }
+
+  ncbi->hdr_ptr += len;
+
+  return eslOK;
+}
+
+/* Function:  parse_header()
+ * Synopsis:  Parse the ncbi db header
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Parse a ncbi database header.  This routine implements
+ *            a recursive descent parser for the ASN.1 definition of
+ *            a blast database header filling in <sq>.
+ *
+ *            The blast db header can have multiple definitions defined
+ *            within it.  Only the information from the first usable
+ *            defition will be used.
+ *
+ * Returns:   <eslOK> on success; the new sequence is stored in <s>.
+ * 
+ *            Returns <eslEFORMAT> if there's a problem with the format,
+ *            such as an illegal character.
+ */
+static int
+parse_header(ESL_SQNCBI_DATA *ncbi, ESL_SQ *sq)
+{
+  int   size;
+  int   status;
+  void *tmp;
+
+  unsigned char c;
+
+  reset_header_values(ncbi);
+  size  = ncbi->hoff - ncbi->roff;
+
+  /* read in the header data */
+  if (ncbi->hdr_alloced < size) {
+    while (ncbi->hdr_alloced < size) ncbi->hdr_alloced += ncbi->hdr_alloced;
+    ESL_RALLOC(ncbi->hdr_buf, tmp, sizeof(char) * ncbi->hdr_alloced);
+  }
+  if (fread(ncbi->hdr_buf, sizeof(char), size, ncbi->fpphr) != size) return eslEFORMAT;
+  ncbi->hdr_ptr = ncbi->hdr_buf;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)             return eslEFORMAT;
+
+  if (parse_peek(ncbi, &c) != eslOK)                          return eslEFORMAT;
+
+  /* parse the different seq id structures */
+  while (c != 0x00) {
+    if ((status = parse_def_line(ncbi, sq)) != eslOK)         return status;
+
+    if (parse_peek(ncbi, &c) != eslOK)                        return eslEFORMAT;
+  }
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  return eslOK;
+ ERROR:
+  return eslEMEM;
+}
+
+/* Function:  parse_def_line()
+ * Synopsis:  Parse the Blast-def-line definition
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Blast-def-line ::= SEQUENCE {
+ * 	title       VisibleString       OPTIONAL,  -- simple title
+ * 	seqid       SEQUENCE OF Seq-id,            -- Regular NCBI Seq-Id
+ * 	taxid       INTEGER             OPTIONAL,  -- taxonomy id
+ * 	memberships SEQUENCE OF INTEGER OPTIONAL,  -- bit arrays
+ * 	links       SEQUENCE OF INTEGER OPTIONAL,  -- bit arrays
+ * 	other-info  SEQUENCE OF INTEGER OPTIONAL   -- for future use (probably genomic sequences)
+ * }
+ */
+static int
+parse_def_line(ESL_SQNCBI_DATA *ncbi, ESL_SQ *sq)
+{
+  int   status;
+
+  int   i;
+  int   len     = 0;
+  int   taxid   = -1;
+  char *title   = NULL;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for an optional title */
+  sq->desc[0] = 0;
+  if (parse_accept(ncbi, "\xa0\x80", 2) == eslOK) {
+    if ((status = parse_string(ncbi, &title, &len)) != eslOK) return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for sequence id structure */
+  if (parse_expect(ncbi, "\xa1\x80", 2) != eslOK)             return eslEFORMAT;
+  if ((status = parse_seq_id(ncbi)) != eslOK)                 return status;
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for an optional taxonomy id */
+  sq->tax_id = -1;
+  if (parse_accept(ncbi, "\xa2\x80", 2) == eslOK) {
+    if ((status = parse_integer(ncbi, &taxid)) != eslOK)      return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional memberships */
+  if (parse_accept(ncbi, "\xa3\x80", 2) == eslOK) {
+    if ((status = ignore_sequence_of_integer(ncbi)) != eslOK) return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional links */
+  if (parse_accept(ncbi, "\xa4\x80", 2) == eslOK) {
+    if ((status = ignore_sequence_of_integer(ncbi)) != eslOK) return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional other info */
+  if (parse_accept(ncbi, "\xa5\x80", 2) == eslOK) {
+    if ((status = ignore_sequence_of_integer(ncbi)) != eslOK) return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  /* zero terminate any saved string */
+  if (ncbi->name_ptr   != NULL) ncbi->name_ptr[ncbi->name_size]     = '\0';
+  if (ncbi->acc_ptr    != NULL) ncbi->acc_ptr[ncbi->acc_size]       = '\0';
+  if (ncbi->str_id_ptr != NULL) ncbi->str_id_ptr[ncbi->str_id_size] = '\0';
+
+  if (title != NULL) title[len] = '\0';
+
+  if (ncbi->name_ptr != NULL || ncbi->acc_ptr != NULL) {
+    /* if we have both a name and accession, set both fields.
+     * if we have only one, set the name to that one field.
+     */
+    if (ncbi->name_ptr != NULL) {
+      esl_sq_SetName(sq, ncbi->name_ptr);
+      if (ncbi->acc_ptr != NULL) {
+	esl_sq_SetAccession(sq, ncbi->acc_ptr);
+      }
+    } else {
+      esl_sq_SetName(sq, ncbi->acc_ptr);
+    }
+    if (title != NULL) esl_sq_SetDesc(sq, title);
+  } else if (ncbi->str_id_ptr != NULL || ncbi->int_id != -1) {
+    /* since we don't have a name or accession, use the id
+     * as the name.
+     */
+    if (ncbi->str_id_ptr != NULL) {
+      esl_sq_SetName(sq, ncbi->str_id_ptr);
+    } else {
+      char id[32];
+      sprintf(id, "%d", ncbi->int_id);
+      esl_sq_SetName(sq, id);
+    }
+    if (title != NULL) esl_sq_SetDesc(sq, title);
+  } else if (title != NULL) {
+    /* lastly we don't have anything, so lets just use the
+     * title.  take the first word of the title and use that
+     * for the name.  the remaining portion of the title will
+     * be used for the description.
+     */
+    for (i = 0; i < len; ++i) {
+      if (isspace(title[i])) {
+	title[i] = '\0';
+	break;
+      }
+    }
+    esl_sq_SetName(sq, title);
+    ++i;
+
+    /* skip over multiple spaces till the next word */
+    for ( ; i < len; ++i) {
+      if (!isspace(title[i])) break;
+    }
+    if (i < len) esl_sq_SetDesc(sq, title + i);
+  }
+
+  if (taxid != -1) sq->tax_id = taxid;
+
+  return eslOK;
+}
+
+
+/* Function:  parse_seq_id()
+ * Synopsis:  Parse the Blast-def-line definition
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Seq-id ::= CHOICE {
+ *     local             Object-id ,       -- local use
+ *     gibbsq            INTEGER ,         -- Geninfo backbone seqid
+ *     gibbmt            INTEGER ,         -- Geninfo backbone moltype
+ *     giim              Giimport-id ,     -- Geninfo import id
+ *     genbank           Textseq-id ,
+ *     embl              Textseq-id ,
+ *     pir               Textseq-id ,
+ *     swissprot         Textseq-id ,
+ *     patent            Patent-seq-id ,
+ *     other             Textseq-id ,      -- for historical reasons, 'other' = 'refseq'
+ *     general           Dbtag ,           -- for other databases
+ *     gi                INTEGER ,         -- GenInfo Integrated Database
+ *     ddbj              Textseq-id ,      -- DDBJ
+ *     prf               Textseq-id ,      -- PRF SEQDB
+ *     pdb               PDB-seq-id ,      -- PDB sequence
+ *     tpg               Textseq-id ,      -- Third Party Annot/Seq GenBank
+ *     tpe               Textseq-id ,      -- Third Party Annot/Seq EMBL
+ *     tpd               Textseq-id ,      -- Third Party Annot/Seq DDBJ
+ *     gpipe             Textseq-id ,      -- Internal NCBI genome pipeline processing ID
+ *     named-annot-track Textseq-id        -- Internal named annotation tracking ID
+ * }
+ */
+static int
+parse_seq_id(ESL_SQNCBI_DATA *ncbi)
+{
+  int   status;
+  int  *id_ptr;
+
+  unsigned char c;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)           return eslEFORMAT;
+
+  if (parse_consume(ncbi, &c, 1) != eslOK)                  return eslEFORMAT;
+
+  /* parse the different seq id structures */
+  while (c != 0x00) {
+    if (parse_expect(ncbi, "\x80", 1) != eslOK)             return eslEFORMAT;
+    switch (c) {
+    case 0xa0: /* LOCAL */
+      status = parse_object_id(ncbi);
+      break;
+    case 0xa1: /* GIBBSQ */
+      id_ptr = (ncbi->int_id != -1) ? NULL : &ncbi->int_id;
+      status = parse_integer(ncbi, id_ptr);
+      break;
+    case 0xa2: /* GIBBMT */
+      status = parse_integer(ncbi, NULL);
+      break;
+    case 0xa3: /* GIIM */
+      status = parse_giimport_id(ncbi);
+      break;
+    case 0xa4: /* GENBANK */
+    case 0xa5: /* EMBL */
+    case 0xa6: /* PIR */
+    case 0xa7: /* SWISSPROT */
+      status = parse_textseq_id(ncbi);
+      break;
+    case 0xa8: /* PATENT */
+      status = parse_patent_seq_id(ncbi);
+      break;
+    case 0xa9: /* OTHER */
+      status = parse_textseq_id(ncbi);
+      break;
+    case 0xaa: /* GENERAL */
+      status = parse_dbtag(ncbi);
+      break;
+    case 0xab: /* GI */
+      status = parse_integer(ncbi, NULL);
+      break;
+    case 0xac: /* DDBJ */
+    case 0xad: /* PRF */
+      status = parse_textseq_id(ncbi);
+      break;
+    case 0xae: /* PDB */
+      status = parse_pdb_seq_id(ncbi);
+      break;
+    case 0xaf: /* TPG */
+    case 0xb0: /* TPE */
+    case 0xb1: /* TPD */
+    case 0xb2: /* GPIPE */
+    case 0xb3: /* NAMED ANNOT TRACK */
+      status = parse_textseq_id(ncbi);
+      break;
+    default:
+      status = eslEFORMAT;
+    }
+
+    if (status != eslOK)                                    return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)         return eslEFORMAT;
+    if (parse_consume(ncbi, &c, 1)        != eslOK)         return eslEFORMAT;
+  }
+
+  /* verify we are at the end of the structure */
+  if (c != 0x00 || parse_expect(ncbi, "\x00", 1) != eslOK)  return eslEFORMAT;
+
+  return eslOK;
+}
+
+
+/* Function:  parse_textseq_id()
+ * Synopsis:  Parse the general text header
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Textseq-id ::= SEQUENCE {
+ *     name      VisibleString OPTIONAL ,
+ *     accession VisibleString OPTIONAL ,
+ *     release   VisibleString OPTIONAL ,
+ *     version   INTEGER       OPTIONAL
+ * }
+ */
+static int
+parse_textseq_id(ESL_SQNCBI_DATA *ncbi)
+{
+  char *acc  = NULL;
+  int   alen = 0;
+  char *name = NULL;
+  int   nlen = 0;
+
+  int   status;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for an optional name */
+  if (parse_accept(ncbi, "\xa0\x80", 2) == eslOK) {
+    if ((status = parse_string(ncbi, &name, &nlen)) != eslOK) return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional accession */
+  if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) {
+    if ((status = parse_string(ncbi, &acc, &alen)) != eslOK)  return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional release */
+  if (parse_accept(ncbi, "\xa2\x80", 2) == eslOK) {
+    if ((status = parse_string(ncbi, NULL, NULL)) != eslOK)   return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional version */
+  if (parse_accept(ncbi, "\xa3\x80", 2) == eslOK) {
+    if ((status = parse_integer(ncbi, NULL)) != eslOK)        return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  /* if we found both the accession and name and so far
+   * we have only come across incomplete headers, save 
+   * this one off.
+   */
+  if (acc != NULL && name != NULL) {
+    if (ncbi->name_ptr == NULL || ncbi->acc_ptr == NULL) {
+      ncbi->name_ptr  = name;
+      ncbi->name_size = nlen;
+      ncbi->acc_ptr   = acc;
+      ncbi->acc_size  = alen;
+    }
+
+  } else if (ncbi->name_ptr == NULL && ncbi->acc_ptr == NULL) {
+    /* if neither the accession or name have been set, and the
+     * header supplied one, save it off.
+     */
+    if (acc != NULL) {
+      ncbi->acc_ptr   = acc;
+      ncbi->acc_size  = alen;
+    }
+    if (name != NULL) {
+      ncbi->name_ptr  = name;
+      ncbi->name_size = nlen;
+    }
+  }
+
+  return eslOK;
+}
+
+
+/* Function:  parse_dbtag()
+ * Synopsis:  Parse the a general db tag
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Dbtag ::= SEQUENCE {
+ *     db  VisibleString ,     -- name of database or system
+ *     tag Object-id           -- appropriate tag
+ * }
+ */
+static int
+parse_dbtag(ESL_SQNCBI_DATA *ncbi)
+{
+  int   status;
+  int   temp_id;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for an db name */
+  if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK)             return eslEFORMAT;
+  if ((status = parse_string(ncbi, 0, NULL)) != eslOK)        return status;
+
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  /* it looks like the dbtag is used when formatdb is run
+   * without parsing sequence ids (ie -o F).  if that is
+   * the case, the id is equal to the sequence number in
+   * the database.  so for dbtag headers, nothing will be
+   * saved.  to do this lets create a bogus id value and
+   * restore it after dbtag is parsed.
+   */
+  temp_id = ncbi->int_id;
+  ncbi->int_id = 1;
+
+  /* look for a tag object */
+  if (parse_expect(ncbi, "\xa1\x80", 2) != eslOK)             return eslEFORMAT;
+  if ((status = parse_object_id(ncbi)) != eslOK)              return status;
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  /* restore the id value */
+  ncbi->int_id = temp_id;
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  return eslOK;
+}
+
+
+/* Function:  parse_giimport_id()
+ * Synopsis:  Parse the a giimport id
+ * Incept:    MSF, Thu Mar 25, 2010 [Janelia]
+ *
+ * Giimport-id ::= SEQUENCE {
+ *     id INTEGER,                      -- the id to use here
+ *     db VisibleString OPTIONAL,       -- dbase used in
+ *     release VisibleString OPTIONAL } -- the release
+ * }
+ */
+static int
+parse_giimport_id(ESL_SQNCBI_DATA *ncbi)
+{
+  int   status;
+  int   id;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for an id */
+  if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK)             return eslEFORMAT;
+  if ((status = parse_integer(ncbi, &id)) != eslOK)           return status;
+
+   /* look for an optional database */
+  if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) {
+    if ((status = parse_string(ncbi, NULL, NULL)) != eslOK)   return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional release */
+  if (parse_accept(ncbi, "\xa2\x80", 2) == eslOK) {
+    if ((status = parse_string(ncbi, NULL, NULL)) != eslOK)   return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  /* if there is not already a saved seq id, save it */
+  if (ncbi->int_id == -1 && ncbi->str_id_ptr == NULL) {
+    ncbi->int_id = id;
+  }
+
+  return eslOK;
+}
+
+
+/* Function:  parse_patent_seq_id()
+ * Synopsis:  Parse the patent header
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Patent-seq-id ::= SEQUENCE {
+ *     seqid INTEGER ,          -- number of sequence in patent
+ *     cit   Id-pat             -- patent citation
+ * }
+ */
+static int
+parse_patent_seq_id(ESL_SQNCBI_DATA *ncbi)
+{
+  int   status;
+  int   id;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for a seqid */
+  if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK)             return eslEFORMAT;
+  if ((status = parse_integer(ncbi, &id)) != eslOK)           return status;
+
+  /* look for a patent citation object */
+  if (parse_expect(ncbi, "\xa1\x80", 2) != eslOK)             return eslEFORMAT;
+  if ((status = parse_id_pat(ncbi)) != eslOK)                 return status;
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  /* if there is not already a saved seq id, save it */
+  if (ncbi->int_id == -1 && ncbi->str_id_ptr == NULL) {
+    ncbi->int_id = id;
+  }
+
+  return eslOK;
+}
+
+
+/* Function:  parse_id_pat()
+ * Synopsis:  Parse the patent citation
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Id-pat ::= SEQUENCE {                         -- just to identify a patent
+ *     country  VisibleString ,                  -- Patent Document Country
+ *     id       CHOICE {
+ *         number     VisibleString ,            -- Patent Document Number
+ *         app-number VisibleString              -- Patent Doc Appl Number
+ *     } ,
+ *     doc-type VisibleString         OPTIONAL   -- Patent Doc Type
+ * }
+ */
+static int
+parse_id_pat(ESL_SQNCBI_DATA *ncbi)
+{
+  int   status;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for a country */
+  if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK)             return eslEFORMAT;
+  if ((status = parse_string(ncbi, NULL, NULL)) != eslOK)     return status;
+
+  /* look for an id */
+  if (parse_expect(ncbi, "\xa1\x80", 2) != eslOK)             return eslEFORMAT;
+
+  /* the id is a choice of two strings */
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for an optional taxonomy id */
+  if (parse_accept(ncbi, "\xa0\x80", 2) == eslOK) {
+    status = parse_string(ncbi, NULL, NULL);
+  } else if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) {
+    status = parse_string(ncbi, NULL, NULL);
+  } else {
+    status = eslEFORMAT;
+  }
+  if (status != eslOK)                                        return status;
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for a doc type */
+  if (parse_accept(ncbi, "\xa3\x80", 2) == eslOK) {
+    if ((status = parse_string(ncbi, NULL, NULL)) != eslOK)   return eslEFORMAT;
+  }
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  return eslOK;
+}
+
+
+/* Function:  parse_object_id()
+ * Synopsis:  Parse a generic sequence id
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Object-id ::= CHOICE {
+ *     id  INTEGER ,
+ *     str VisibleString
+ * }
+ */
+static int
+parse_object_id(ESL_SQNCBI_DATA *ncbi)
+{
+  int    status;
+
+  char  *id_str = NULL;
+  int    id_len = 0;
+  int    id     = -1;
+
+  /* look for an optional taxonomy id */
+  if (parse_accept(ncbi, "\xa0\x80", 2) == eslOK) {
+    status = parse_integer(ncbi, &id);
+  } else if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) {
+    status = parse_string(ncbi, &id_str, &id_len);
+  } else {
+    status = eslEFORMAT;
+  }
+
+  /* verify we are at the end of the structure */
+  if (status == eslOK) {
+    status = parse_expect(ncbi, "\x00\x00", 2);
+
+    /* if there is not already a saved seq id, save it */
+    if (ncbi->int_id == -1 && ncbi->str_id_ptr == NULL) {
+      if (id_str != NULL) {
+	ncbi->str_id_ptr  = id_str;
+	ncbi->str_id_size = id_len;
+      } else if (id != -1) {
+	ncbi->int_id = id;
+      }
+    }
+  }
+
+  return status;
+}
+
+
+/* Function:  parse_pdb_seq_id()
+ * Synopsis:  Parse a PDB sequence
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * PDB-seq-id ::= SEQUENCE {
+ *     mol   PDB-mol-id ,              -- the molecule name
+ *     chain INTEGER ,                 -- a single ASCII character, chain id
+ *     rel   Date         OPTIONAL }   -- release date, month and year
+ *
+ * Date ::= CHOICE {
+ *     str   VisibleString ,           -- for those unparsed dates
+ *     std   Date-std                  -- use this if you can
+ * }
+ */
+static int
+parse_pdb_seq_id(ESL_SQNCBI_DATA *ncbi)
+{
+  int   status;
+
+  char  *id;
+  int    len;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for an pdb mol id */
+  if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK)             return eslEFORMAT;
+  if ((status = parse_string(ncbi, &id, &len)) != eslOK)      return status;
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for chain */
+  if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) {
+    if ((status = parse_integer(ncbi, NULL)) != eslOK)        return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional date */
+  if (parse_accept(ncbi, "\xa2\x80", 2) == eslOK) {
+    if (parse_accept(ncbi, "\xa0\x80", 2) == eslOK) {
+      status = parse_string(ncbi, NULL, NULL);
+    } else if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) {
+      status = parse_date_std(ncbi);
+    } else {
+      status = eslEFORMAT;
+    }
+    if (status != eslOK)                                      return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* if there is not already a saved seq id, save it */
+  if (ncbi->int_id == -1 && ncbi->str_id_ptr == NULL) {
+    ncbi->str_id_ptr  = id;
+    ncbi->str_id_size = len;
+  }
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  return eslOK;
+}
+
+
+/* Function:  parse_date_std()
+ * Synopsis:  Parse the data structure
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Date-std ::= SEQUENCE {              -- NOTE: this is NOT a unix tm struct
+ *     year   INTEGER ,                 -- full year (including 1900)
+ *     month  INTEGER       OPTIONAL ,  -- month (1-12)
+ *     day    INTEGER       OPTIONAL ,  -- day of month (1-31)
+ *     season VisibleString OPTIONAL ,  -- for "spring", "may-june", etc
+ *     hour   INTEGER       OPTIONAL ,  -- hour of day (0-23)
+ *     minute INTEGER       OPTIONAL ,  -- minute of hour (0-59)
+ *     second INTEGER       OPTIONAL    -- second of minute (0-59)
+ * }
+ */
+static int
+parse_date_std(ESL_SQNCBI_DATA *ncbi)
+{
+  int   status;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for a year */
+  if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK)             return eslEFORMAT;
+  if ((status = parse_integer(ncbi, NULL)) != eslOK)          return status;
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  /* look for an optional month */
+  if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) {
+    if ((status = parse_integer(ncbi, NULL)) != eslOK)        return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional day */
+  if (parse_accept(ncbi, "\xa2\x80", 2) == eslOK) {
+    if ((status = parse_integer(ncbi, NULL)) != eslOK)        return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional season */
+  if (parse_accept(ncbi, "\xa3\x80", 2) == eslOK) {
+    if ((status = parse_string(ncbi, NULL, NULL)) != eslOK)   return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional hour */
+  if (parse_accept(ncbi, "\xa4\x80", 2) == eslOK) {
+    if ((status = parse_integer(ncbi, NULL)) != eslOK)        return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional minute */
+  if (parse_accept(ncbi, "\xa5\x80", 2) == eslOK) {
+    if ((status = parse_integer(ncbi, NULL)) != eslOK)        return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* look for an optional second */
+  if (parse_accept(ncbi, "\xa6\x80", 2) == eslOK) {
+    if ((status = parse_integer(ncbi, NULL)) != eslOK)        return status;
+    if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)           return eslEFORMAT;
+  }
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)             return eslEFORMAT;
+
+  return eslOK;
+}
+
+
+/* Function:  parse_string()
+ * Synopsis:  Parse a visible string
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Parses a string from the header stream.
+ *
+ *            If <str> is non null, the location of the string in 
+ *            the header will be saved.  If <len> is non null, the
+ *            length of the string will be filled in.  If <str> is
+ *            non null, then <len> must be non null since the strings
+ *            are not zero terminated.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslEFORMAT> if there's a problem with the format.
+ *            <eslEINCOMPAT> if <str> is non null and <len> is null.
+ *
+ */
+static int
+parse_string(ESL_SQNCBI_DATA *ncbi, char **str, int *len)
+{
+  int n;
+
+  unsigned char  x;
+  unsigned char  c;
+  unsigned char *ptr;
+
+  if (parse_expect(ncbi, "\x1a", 1) != eslOK)  return eslEFORMAT;
+
+  /* the next byte is the length of the string.  if the length is
+   * less than 128, then this is the true length; otherwise this
+   * length describes the number of bytes necessary to hold the
+   * true length of the string in the lower 7 bits.
+   */
+  if (parse_consume(ncbi, &c, 1) != eslOK)     return eslEFORMAT;
+  if (c < 128) {
+    n = c;
+  } else {
+    c = c & 0x7f;
+    if (c > sizeof(n))                                 return eslEFORMAT;
+
+    n = 0;
+    while (c > 0) {
+      if (parse_consume(ncbi, &x, 1) != eslOK) return eslEFORMAT;
+      n = (n << 8) + (unsigned int) x;
+      --c;
+    }
+  }
+
+  /* validate the length of the string */
+  ptr = ncbi->hdr_ptr;
+  if (parse_advance(ncbi, n) != eslOK)         return eslEFORMAT;
+
+  /* fill in the values */
+  if (str != NULL && len == NULL) return eslEINCOMPAT;
+  if (len != NULL) *len = n;
+  if (str != NULL) *str = (char *)ptr;
+
+  return eslOK;
+}
+
+
+/* Function:  parse_integer()
+ * Synopsis:  Parse an integer
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Reads an integer from the header stream.  If the integer is
+ *            more bytes than the native int format, the most significant
+ *            bytes will be lost.
+ *
+ *            If <value> is non null, the parsed integer will be placed
+ *            in the pointer.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslEFORMAT> if there's a problem with the format.
+ *
+ */
+static int
+parse_integer(ESL_SQNCBI_DATA *ncbi, int *value)
+{
+  int n;
+
+  unsigned char  c;
+  unsigned char *ptr;
+
+  if (parse_expect(ncbi, "\x02", 1) != eslOK) return eslEFORMAT;
+
+  /* get the length of the integer */
+  if (parse_peek(ncbi, &c) != eslOK)          return eslEFORMAT;
+  ptr = ncbi->hdr_ptr + 1;
+
+  /* advance past the integer to make sure the buffer holds all
+   * of the integer.  the pointer <ptr> points the the start of
+   * the integer.
+   */
+  if (parse_advance(ncbi, c + 1) != eslOK)    return eslEFORMAT;
+
+  n = 0;
+  while (c > 0) {
+    n = (n << 8) + (unsigned int) *ptr++;
+    --c;
+  }
+
+  if (value != NULL) *value = n;
+
+  return eslOK;
+}
+
+
+/* Function:  ignore_sequence_of_integer()
+ * Synopsis:  Skip over the sequence of integers
+ * Incept:    MSF, Mon Dec 10, 2009 [Janelia]
+ *
+ * Purpose:   Skip over a sequence of integers.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslEFORMAT> if there's a problem with the format.
+ *
+ */
+static int
+ignore_sequence_of_integer(ESL_SQNCBI_DATA *ncbi)
+{
+  int status;
+  unsigned char c;
+
+  /* verify we are at the beginning of a structure */
+  if (parse_expect(ncbi, "\x30\x80", 2) != eslOK)      return eslEFORMAT;
+
+  if (parse_peek(ncbi, &c) != eslOK)                   return eslEFORMAT;
+  while (c == 0x02) {
+    if ((status = parse_integer(ncbi, NULL)) != eslOK) return status;
+    if (parse_peek(ncbi, &c) != eslOK)                 return eslEFORMAT;
+  }
+
+  /* verify we are at the end of the structure */
+  if (parse_expect(ncbi, "\x00\x00", 2) != eslOK)      return eslEFORMAT;
+
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_sqio_ncbi.h b/esl_sqio_ncbi.h
new file mode 100644
index 0000000..8297d6d
--- /dev/null
+++ b/esl_sqio_ncbi.h
@@ -0,0 +1,110 @@
+/* Unaligned ncbi sequence file i/o.
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslSQIO_NCBI_INCLUDED
+#define eslSQIO_NCBI_INCLUDED
+
+#include <stdio.h>
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+
+/* forward declaration */
+struct esl_sqio_s;
+
+/* set the max residue count to 1 meg when reading a block */
+#define MAX_RESIDUE_COUNT (1024 * 1024)
+
+#define MAX_DB_VOLUMES   100
+
+/* ESL_SQNCBI_VOLUME:
+ * Information for the volume
+ */
+typedef struct esl_sqncbi_vol_s {
+  char      *name;                 /* name of the volume                       */
+
+  uint32_t   start_seq;            /* starting sequence number                 */
+  uint32_t   end_seq;              /* ending sequence number                   */
+
+  uint32_t   hdr_off;              /* disk offset in .pin to header index      */
+  uint32_t   seq_off;              /* disk offset to .pin to sequence index    */
+  uint32_t   amb_off;              /* disk offset to .pin to ambiguous index   */
+} ESL_SQNCBI_VOLUME;
+
+/* ESL_SQNCBI:
+ * An open sequence file for reading.
+ */
+typedef struct esl_sqncbi_s {
+  FILE      *fppin;                /* Open .pin file ptr                       */
+  FILE      *fpphr;                /* Open .phr file ptr                       */
+  FILE      *fppsq;                /* Open .psq file ptr                       */
+  char       errbuf[eslERRBUFSIZE];/* parse error mesg.  Size must match msa.h */
+
+  char      *title;                /* database title                           */
+  int        version;              /* database version                         */
+  char      *timestamp;            /* time stamp of database creation          */
+
+  uint32_t   num_seq;              /* number of sequences in the database      */
+  uint64_t   total_res;            /* total number of residues                 */
+  uint32_t   max_seq;              /* longest sequence in the database         */
+
+  uint32_t   hdr_off;              /* disk offset in .pin to header index      */
+  uint32_t   seq_off;              /* disk offset to .pin to sequence index    */
+  uint32_t   amb_off;              /* disk offset to .pin to ambiguous index   */
+  
+  int        index;                /* current sequence index in the database   */
+  uint32_t   vol_index;            /* current volume index (-1 if no volumes)  */
+  uint32_t   roff;                 /* record offset (start of header)          */
+  uint32_t   hoff;                 /* offset to last byte of header            */
+  uint32_t   doff;                 /* data offset (start of sequence data)     */
+  uint32_t   eoff;                 /* offset to last byte of sequence          */
+
+  uint32_t   index_start;          /* start of indexes currently loaded        */
+  uint32_t   index_end;            /* end of indexes currently loaded          */
+  uint32_t  *hdr_indexes;          /* block of header indexes from .pin        */
+  uint32_t  *seq_indexes;          /* block of header indexes from .pin        */
+  uint32_t  *amb_indexes;          /* block of header indexes from .pin        */
+
+  /* volume information */
+  uint32_t   volumes;              /* number of volumes                        */
+  ESL_SQNCBI_VOLUME vols[MAX_DB_VOLUMES];
+
+  /* information for the current header */
+  unsigned char *hdr_buf;          /* buffer for holding unparsed header       */
+  unsigned char *hdr_ptr;          /* current parser position                  */
+  int            hdr_alloced;      /* size of the allocated buffer             */
+
+  char          *name_ptr;         /* pointer to name NOT NULL TERMINATED      */
+  int32_t        name_size;        /* length of the name                       */
+  char          *acc_ptr;          /* pointer to accession NOT NULL TERMINATED */
+  int32_t        acc_size;         /* length of the accession                  */
+  int32_t        int_id;           /* integer sequence id                      */
+  char          *str_id_ptr;       /* pointer to id NOT NULL TERMINATED        */
+  int32_t        str_id_size;      /* length of the id                         */
+  
+  /* information on the current sequence */
+  uint32_t       seq_apos;         /* position of ambiguity table              */
+  uint32_t       seq_alen;         /* size of ambiguity table                  */
+  uint32_t       seq_cpos;         /* current position in ambiguity table      */
+  int32_t        seq_L;            /* true sequence length                     */
+
+  /* alphabet used to convert ncbi to hmmer to ascii */
+  int            alphatype;        /* amino or dna                             */
+  char          *alphasym;         /* string of residues                       */
+
+} ESL_SQNCBI_DATA;
+
+
+extern int  esl_sqncbi_Open(char *seqfile, int format, struct esl_sqio_s *sqfp);
+
+
+#endif /*eslSQIO_NCBI_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_sse.c b/esl_sse.c
new file mode 100644
index 0000000..8f83519
--- /dev/null
+++ b/esl_sse.c
@@ -0,0 +1,623 @@
+/* Vectorized routines for Intel/AMD, using Streaming SIMD Extensions (SSE).
+ * 
+ * Table of contents           
+ *     1. SIMD logf(), expf()
+ *     2. Utilities for ps vectors (4 floats in a __m128)
+ *     3. Utilities for epu8 vectors (16 uchars in a __m128i)
+ *     3. Benchmark
+ *     4. Unit tests
+ *     5. Test driver
+ *     6. Example
+ *     7. Copyright and license
+ *     
+ *****************************************************************
+ * Credits:
+ *
+ * The logf() and expf() routines are derivatives of routines by
+ * Julien Pommier [http://gruntthepeon.free.fr/ssemath/]. Those
+ * routines were in turn based on serial implementations in the Cephes
+ * math library by Stephen Moshier [Moshier89;
+ * http://www.moshier.net/#Cephes]. Thanks and credit to both Moshier
+ * and Pommier for their clear code. Additional copyright and license
+ * information is appended at the end of the file.
+ */
+#include "esl_config.h"
+#ifdef HAVE_SSE2
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <float.h>
+
+#include <xmmintrin.h>		/* SSE  */
+#include <emmintrin.h>		/* SSE2 */
+
+#include "easel.h"
+#include "esl_sse.h"
+
+
+/*****************************************************************
+ * 1. SSE SIMD logf(), expf()
+ *****************************************************************/ 
+
+/* As of Dec 2007, I am unaware of any plans for Intel/AMD to release
+ * SSE intrinsics for logf(), expf(), or other special functions.
+ *
+ * I need them, and the code below should suffice. If you know of
+ * better ways to compute these functions, please let me know.
+ */
+
+/* Function:  esl_sse_logf()
+ * Synopsis:  <r[z] = log x[z]>
+ * Incept:    SRE, Fri Dec 14 11:32:54 2007 [Janelia]
+ *
+ * Purpose:   Given a vector <x> containing four floats, returns a
+ *            vector <r> in which each element <r[z] = logf(x[z])>.
+ *            
+ *            Valid in the domain $x_z > 0$ for normalized IEEE754
+ *            $x_z$.
+ *
+ *            For <x> $< 0$, including -0, returns <NaN>. For <x> $==
+ *            0$ or subnormal <x>, returns <-inf>. For <x = inf>,
+ *            returns <inf>. For <x = NaN>, returns <NaN>. For 
+ *            subnormal <x>, returns <-inf>.
+ *
+ * Xref:      J2/71.
+ * 
+ * Note:      Derived from an SSE1 implementation by Julian
+ *            Pommier. Converted to SSE2 and added handling
+ *            of IEEE754 specials.
+ */
+__m128 
+esl_sse_logf(__m128 x) 
+{
+  static float cephes_p[9] = {  7.0376836292E-2f, -1.1514610310E-1f,  1.1676998740E-1f,
+				-1.2420140846E-1f, 1.4249322787E-1f, -1.6668057665E-1f,
+				2.0000714765E-1f, -2.4999993993E-1f,  3.3333331174E-1f };
+  __m128  onev = _mm_set1_ps(1.0f);          /* all elem = 1.0 */
+  __m128  v0p5 = _mm_set1_ps(0.5f);          /* all elem = 0.5 */
+  __m128i vneg = _mm_set1_epi32(0x80000000); /* all elem have IEEE sign bit up */
+  __m128i vexp = _mm_set1_epi32(0x7f800000); /* all elem have IEEE exponent bits up */
+  __m128i ei;
+  __m128  e;
+  __m128  invalid_mask, zero_mask, inf_mask;            /* masks used to handle special IEEE754 inputs */
+  __m128  mask;
+  __m128  origx;
+  __m128  tmp;
+  __m128  y;
+  __m128  z;
+
+  /* first, split x apart: x = frexpf(x, &e); */
+  ei           = _mm_srli_epi32( _mm_castps_si128(x), 23);	                                        /* shift right 23: IEEE754 floats: ei = biased exponents     */
+  invalid_mask = _mm_castsi128_ps ( _mm_cmpeq_epi32( _mm_and_si128(_mm_castps_si128(x), vneg), vneg));  /* mask any elem that's negative; these become NaN           */
+  zero_mask    = _mm_castsi128_ps ( _mm_cmpeq_epi32(ei, _mm_setzero_si128()));                          /* mask any elem zero or subnormal; these become -inf        */
+  inf_mask     = _mm_castsi128_ps ( _mm_cmpeq_epi32( _mm_and_si128(_mm_castps_si128(x), vexp), vexp));  /* mask any elem inf or NaN; log(inf)=inf, log(NaN)=NaN      */
+  origx        = x;			                                                                /* store original x, used for log(inf) = inf, log(NaN) = NaN */
+
+  x  = _mm_and_ps(x, _mm_castsi128_ps(_mm_set1_epi32(~0x7f800000))); /* x now the stored 23 bits of the 24-bit significand        */
+  x  = _mm_or_ps (x, v0p5);                                          /* sets hidden bit b[0]                                      */
+
+  ei = _mm_sub_epi32(ei, _mm_set1_epi32(126));                       /* -127 (ei now signed base-2 exponent); then +1             */
+  e  = _mm_cvtepi32_ps(ei);
+
+  /* now, calculate the log */
+  mask = _mm_cmplt_ps(x, _mm_set1_ps(0.707106781186547524f)); /* avoid conditional branches.           */
+  tmp  = _mm_and_ps(x, mask);	                              /* tmp contains x values < 0.707, else 0 */
+  x    = _mm_sub_ps(x, onev);
+  e    = _mm_sub_ps(e, _mm_and_ps(onev, mask));
+  x    = _mm_add_ps(x, tmp);
+  z    = _mm_mul_ps(x,x);
+
+  y =               _mm_set1_ps(cephes_p[0]);    y = _mm_mul_ps(y, x); 
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[1]));   y = _mm_mul_ps(y, x);    
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[2]));   y = _mm_mul_ps(y, x);   
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[3]));   y = _mm_mul_ps(y, x);   
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[4]));   y = _mm_mul_ps(y, x);    
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[5]));   y = _mm_mul_ps(y, x);   
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[6]));   y = _mm_mul_ps(y, x); 
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[7]));   y = _mm_mul_ps(y, x);  
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[8]));   y = _mm_mul_ps(y, x);
+  y = _mm_mul_ps(y, z);
+
+  tmp = _mm_mul_ps(e, _mm_set1_ps(-2.12194440e-4f));
+  y   = _mm_add_ps(y, tmp);
+
+  tmp = _mm_mul_ps(z, v0p5);
+  y   = _mm_sub_ps(y, tmp);
+
+  tmp = _mm_mul_ps(e, _mm_set1_ps(0.693359375f));
+  x = _mm_add_ps(x, y);
+  x = _mm_add_ps(x, tmp);
+
+  /* IEEE754 cleanup: */
+  x = esl_sse_select_ps(x, origx,                     inf_mask);  /* log(inf)=inf; log(NaN)      = NaN  */
+  x = _mm_or_ps(x, invalid_mask);                                 /* log(x<0, including -0,-inf) = NaN  */
+  x = esl_sse_select_ps(x, _mm_set1_ps(-eslINFINITY), zero_mask); /* x zero or subnormal         = -inf */
+  return x;
+}
+
+/* Function:  esl_sse_expf()
+ * Synopsis:  <r[z] = exp x[z]>
+ * Incept:    SRE, Fri Dec 14 14:46:27 2007 [Janelia]
+ *
+ * Purpose:   Given a vector <x> containing four floats, returns a
+ *            vector <r> in which each element <r[z] = expf(x[z])>.
+ *            
+ *            Valid for all IEEE754 floats $x_z$.
+ *            
+ * Xref:      J2/71
+ *            J10/62: bugfix, minlogf/maxlogf range was too wide; 
+ *                    (k+127) must be >=0 and <=255, so (k+127)<<23
+ *                    is a valid IEEE754 float, without touching 
+ *                    the sign bit. Pommier had this right in the
+ *                    first place, and I didn't understand.
+ * 
+ * Note:      Derived from an SSE1 implementation by Julian
+ *            Pommier. Converted to SSE2.
+ *            
+ *            Note on maxlogf/minlogf, which are close to but not
+ *            exactly 127.5/log2 [J10/63]. We need -127<=k<=128, so
+ *            k+127 is 0..255, a valid IEEE754 8-bit exponent
+ *            (0..255), so the bit pattern (k+127)<<23 is IEEE754
+ *            single-precision for 2^k.  If k=-127, we get IEEE754 0.
+ *            If k=128, we get IEEE754 +inf.  If k<-127, k+127 is
+ *            negative and we get screwed up.  If k>128, k+127
+ *            overflows the 8-bit exponent and sets the sign bit.  So
+ *            for x' (base 2) < -127.5 we must definitely return e^x ~
+ *            0; for x' < 126.5 we're going to calculate 0 anyway
+ *            (because k=floor(-126.5-epsilon+0.5) = -127).  So any
+ *            minlogf between -126.5 log2 ... -127.5 log2 will suffice
+ *            as the cutoff. Ditto for 126.5 log2 .. 127.5log2.
+ *            That's 87.68312 .. 88.3762655.  I think Pommier's
+ *            thinking is, you don't want to get to close to the
+ *            edges, lest fp roundoff error screw you (he may have
+ *            consider 1 ulp carefully, I can't tell), but otherwise
+ *            you may as well put your bounds close to the outer edge;
+ *            so 
+ *              maxlogf =  127.5 log(2) - epsilon 
+ *              minlogf = -127.5 log(2) + epsilon 
+ *            for an epsilon that happen to be ~ 3e-6.
+ */
+__m128 
+esl_sse_expf(__m128 x) 
+{
+  static float cephes_p[6] = { 1.9875691500E-4f, 1.3981999507E-3f, 8.3334519073E-3f, 
+			       4.1665795894E-2f, 1.6666665459E-1f, 5.0000001201E-1f };
+  static float cephes_c[2] = { 0.693359375f,    -2.12194440e-4f };
+  static float maxlogf     =  88.3762626647949f;  /* 127.5 log(2) - epsilon. above this, 0.5+x/log2 gives k>128 and breaks 2^k "float" construction, because (k+127)<<23 must be a valid IEEE754 exponent 0..255 */
+  static float minlogf     = -88.3762626647949f;  /*-127.5 log(2) + epsilon. below this, 0.5+x/log2 gives k<-127 and breaks 2^k, see above */
+  __m128i k;
+  __m128  mask, tmp, fx, z, y, minmask, maxmask;
+  
+  /* handle out-of-range and special conditions */
+  maxmask = _mm_cmpgt_ps(x, _mm_set1_ps(maxlogf));
+  minmask = _mm_cmple_ps(x, _mm_set1_ps(minlogf));
+
+  /* range reduction: exp(x) = 2^k e^f = exp(f + k log 2); k = floorf(0.5 + x / log2): */
+  fx = _mm_mul_ps(x,  _mm_set1_ps(eslCONST_LOG2R));
+  fx = _mm_add_ps(fx, _mm_set1_ps(0.5f));
+
+  /* floorf() with SSE:  */
+  k    = _mm_cvttps_epi32(fx);	              /* cast to int with truncation                  */
+  tmp  = _mm_cvtepi32_ps(k);	              /* cast back to float                           */
+  mask = _mm_cmpgt_ps(tmp, fx);               /* if it increased (i.e. if it was negative...) */
+  mask = _mm_and_ps(mask, _mm_set1_ps(1.0f)); /* ...without a conditional branch...           */
+  fx   = _mm_sub_ps(tmp, mask);	              /* then subtract one.                           */
+  k    = _mm_cvttps_epi32(fx);	              /* k is now ready for the 2^k part.             */
+  
+  /* polynomial approx for e^f for f in range [-0.5, 0.5] */
+  tmp = _mm_mul_ps(fx, _mm_set1_ps(cephes_c[0]));
+  z   = _mm_mul_ps(fx, _mm_set1_ps(cephes_c[1]));
+  x   = _mm_sub_ps(x, tmp);
+  x   = _mm_sub_ps(x, z);
+  z   = _mm_mul_ps(x, x);
+  
+  y =               _mm_set1_ps(cephes_p[0]);    y = _mm_mul_ps(y, x);
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[1]));   y = _mm_mul_ps(y, x);
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[2]));   y = _mm_mul_ps(y, x);
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[3]));   y = _mm_mul_ps(y, x);
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[4]));   y = _mm_mul_ps(y, x);
+  y = _mm_add_ps(y, _mm_set1_ps(cephes_p[5]));   y = _mm_mul_ps(y, z);
+  y = _mm_add_ps(y, x);
+  y = _mm_add_ps(y, _mm_set1_ps(1.0f));
+
+  /* build 2^k by hand, by creating a IEEE754 float */
+  k  = _mm_add_epi32(k, _mm_set1_epi32(127));
+  k  = _mm_slli_epi32(k, 23);
+  fx = _mm_castsi128_ps(k);
+  
+  /* put 2^k e^f together (fx = 2^k,  y = e^f) and we're done */
+  y = _mm_mul_ps(y, fx);	
+
+  /* special/range cleanup */
+  y = esl_sse_select_ps(y, _mm_set1_ps(eslINFINITY), maxmask); /* exp(x) = inf for x > log(2^128)  */
+  y = esl_sse_select_ps(y, _mm_set1_ps(0.0f),        minmask); /* exp(x) = 0   for x < log(2^-149) */
+  return y;
+}
+
+
+/*****************************************************************
+ * 2. Utilities for ps vectors (4 floats in a __m128)
+ *****************************************************************/ 
+
+void
+esl_sse_dump_ps(FILE *fp, __m128 v)
+{
+  float *p = (float *)&v;
+  fprintf(fp, "[%13.8g, %13.8g, %13.8g, %13.8g]", p[0], p[1], p[2], p[3]);
+}
+
+
+
+
+/*****************************************************************
+ * 3. Benchmark
+ *****************************************************************/
+#ifdef eslSSE_BENCHMARK
+
+/* gcc -msse2 -O3 -o benchmark-sse -I ~/src/hmmer/easel -L ~/src/hmmer/easel -DeslSSE_BENCHMARK -DHAVE_SSE2 esl_sse.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_stopwatch.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-N",        eslARG_INT,"10000000", NULL, NULL,  NULL,  NULL, NULL, "number of trials",                                 0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "benchmark driver for sse module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go      = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_STOPWATCH  *w       = esl_stopwatch_Create();
+  int             N       = esl_opt_GetInteger(go, "-N");
+  float           origx   = 2.0;
+  float           x       = origx;
+  __m128          xv      = _mm_set1_ps(x);
+  int             i;
+
+  /* First, serial time. */
+  esl_stopwatch_Start(w);
+  for (i = 0; i < N; i++) { x = logf(x); x = expf(x); }
+  esl_stopwatch_Stop(w);
+  esl_stopwatch_Display(stdout, w, "# serial CPU time: ");
+ 
+  /* Vector time */
+  esl_stopwatch_Start(w);
+  for (i = 0; i < N; i++) { xv = esl_sse_logf(xv); xv = esl_sse_expf(xv); }
+  esl_stopwatch_Stop(w);
+  esl_stopwatch_Display(stdout, w, "# vector CPU time: ");
+
+  /* If you don't do something with x and xv, the compiler may optimize them away */
+  printf("%g  => many scalar logf,expf cycles => %g\n", origx, x);
+  printf("%g  => many vector logf,expf cycles => ", origx);
+  esl_sse_dump_ps(stdout, xv); printf("\n");
+
+  esl_stopwatch_Destroy(w);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+#endif /*eslSSE_BENCHMARK*/
+
+
+/*****************************************************************
+ * 4. Unit tests
+ *****************************************************************/
+#ifdef eslSSE_TESTDRIVE
+
+#include "esl_getopts.h"
+#include "esl_random.h"
+
+/* utest_logf():  Test range/domain of logf */
+static void
+utest_logf(ESL_GETOPTS *go)
+{
+  __m128 x;			       /* test input  */
+  union { __m128 v; float x[4]; } r;   /* test output */
+  
+  /* Test IEEE754 specials: 
+   *    log(-inf) = NaN     log(x<0)  = NaN  log(-0)   = NaN
+   *    log(0)    = -inf    log(inf)  = inf  log(NaN)  = NaN
+   */
+  x   = _mm_set_ps(0.0, -0.0, -1.0, -eslINFINITY); /* set_ps() is in order 3 2 1 0 */
+  r.v =  esl_sse_logf(x); 
+  if (esl_opt_GetBoolean(go, "-v")) {
+    printf("logf");
+    esl_sse_dump_ps(stdout, x);    printf(" ==> ");
+    esl_sse_dump_ps(stdout, r.v);  printf("\n");
+  }
+  if (! isnan(r.x[0]))                 esl_fatal("logf(-inf) should be NaN");
+  if (! isnan(r.x[1]))                 esl_fatal("logf(-1)   should be NaN");
+  if (! isnan(r.x[2]))                 esl_fatal("logf(-0)   should be NaN");
+  if (! (r.x[3] < 0 && isinf(r.x[3]))) esl_fatal("logf(0)    should be -inf");
+
+  x   = _mm_set_ps(FLT_MAX, FLT_MIN, eslNaN, eslINFINITY);
+  r.v = esl_sse_logf(x);
+  if (esl_opt_GetBoolean(go, "-v")) {
+    printf("logf");
+    esl_sse_dump_ps(stdout, x);    printf(" ==> ");
+    esl_sse_dump_ps(stdout, r.v);  printf("\n");
+  }
+  if (! isinf(r.x[0]))  esl_fatal("logf(inf)  should be inf");
+  if (! isnan(r.x[1]))  esl_fatal("logf(NaN)  should be NaN");
+
+}
+
+/* utest_expf():  Test range/domain of expf */
+static void
+utest_expf(ESL_GETOPTS *go)
+{
+  __m128 x;			       /* test input  */
+  union { __m128 v; float x[4]; } r;   /* test output */
+  
+  /* exp(-inf) = 0    exp(-0)  = 1   exp(0) = 1  exp(inf) = inf   exp(NaN)  = NaN */
+  x = _mm_set_ps(eslINFINITY, 0.0, -0.0, -eslINFINITY); /* set_ps() is in order 3 2 1 0 */
+  r.v =  esl_sse_expf(x); 
+  if (esl_opt_GetBoolean(go, "-v")) {
+    printf("expf");
+    esl_sse_dump_ps(stdout, x);    printf(" ==> ");
+    esl_sse_dump_ps(stdout, r.v);  printf("\n");
+  }
+  if (r.x[0] != 0.0f)   esl_fatal("expf(-inf) should be 0");
+  if (r.x[1] != 1.0f)   esl_fatal("expf(-0)   should be 1");
+  if (r.x[2] != 1.0f)   esl_fatal("expf(0)    should be 1");
+  if (! isinf(r.x[3]))  esl_fatal("expf(inf)  should be inf");
+
+  /* exp(NaN) = NaN    exp(large)  = inf   exp(-large) = 0  exp(1) = exp(1) */
+  x = _mm_set_ps(1.0f, -666.0f, 666.0f, eslNaN); /* set_ps() is in order 3 2 1 0 */
+  r.v =  esl_sse_expf(x); 
+  if (esl_opt_GetBoolean(go, "-v")) {
+    printf("expf");
+    esl_sse_dump_ps(stdout, x);    printf(" ==> ");
+    esl_sse_dump_ps(stdout, r.v);  printf("\n");
+  }
+  if (! isnan(r.x[0]))  esl_fatal("expf(NaN)      should be NaN");
+  if (! isinf(r.x[1]))  esl_fatal("expf(large x)  should be inf");
+  if (r.x[2] != 0.0f)   esl_fatal("expf(-large x) should be 0");
+
+  /* Make sure we are correct around the problematic ~minlogf boundary:
+   *  (1) e^x for x < -127.5 log2 + epsilon is 0, because that's our minlogf barrier.
+   *  (2) e^x for  -127.5 log2 < x < -126.5 log2 is 0 too, but is actually calculated
+   *  (3) e^x for  -126.5 log2 < x should be finite (and close to FLT_MIN)
+   *
+   *  minlogf = -127.5 log(2) + epsilon = -88.3762626647949;
+   *        and -126.5 log(2)           = -87.68311834
+   *  so for
+   *     (1): expf(-88.3763)  => 0
+   *     (2): expf(-88.3762)  => 0
+   *     (3): expf(-87.6832)   => 0
+   *     (4): expf(-87.6831)   => <FLT_MIN (subnormal) : ~8.31e-39 (may become 0 in flush-to-zero mode for subnormals)
+   */
+  x   = _mm_set_ps(-88.3763, -88.3762, -87.6832, -87.6831);
+  r.v = esl_sse_expf(x); 
+  if (esl_opt_GetBoolean(go, "-v")) {
+    printf("expf");
+    esl_sse_dump_ps(stdout, x);    printf(" ==> ");
+    esl_sse_dump_ps(stdout, r.v);  printf("\n");
+  }
+  if ( r.x[0] >= FLT_MIN) esl_fatal("expf( -126.5 log2 + eps) should be around FLT_MIN");
+  if ( r.x[1] != 0.0f)    esl_fatal("expf( -126.5 log2 - eps) should be 0.0 (by calculation)");
+  if ( r.x[2] != 0.0f)    esl_fatal("expf( -127.5 log2 + eps) should be 0.0 (by calculation)");
+  if ( r.x[3] != 0.0f)    esl_fatal("expf( -127.5 log2 - eps) should be 0.0 (by min bound): %g", r.x[0]);
+}
+
+/* utest_odds():  test accuracy of logf, expf on odds ratios,
+ * our main intended use.
+ */
+static void
+utest_odds(ESL_GETOPTS *go, ESL_RANDOMNESS *r)
+{
+  int    N            = esl_opt_GetInteger(go, "-N");
+  int    verbose      = esl_opt_GetBoolean(go, "-v");
+  int    very_verbose = esl_opt_GetBoolean(go, "--vv");
+  int    i;
+  float  p1, p2, odds;
+  union { __m128 v; float x[4]; } r1;   
+  union { __m128 v; float x[4]; } r2;   
+  float  scalar_r1, scalar_r2;
+  double  err1, maxerr1 = 0.0, avgerr1 = 0.0; /* errors on logf() */
+  double  err2, maxerr2 = 0.0, avgerr2 = 0.0; /* errors on expf() */
+
+  for (i = 0; i < N; i++)
+    {
+      p1    = esl_rnd_UniformPositive(r);
+      p2    = esl_rnd_UniformPositive(r);
+      odds  = p1 / p2;
+
+      if (odds == 0.0) esl_fatal("whoa, odds ratio can't be 0!\n");
+
+      r1.v      = esl_sse_logf(_mm_set1_ps(odds));  /* r1.x[z] = log(p1/p2) */
+      scalar_r1 = log(odds);
+
+      err1       = (r1.x[0] == 0. && scalar_r1 == 0.) ? 0.0 : 2 * fabs(r1.x[0] - scalar_r1) / fabs(r1.x[0] + scalar_r1);
+      if (err1 > maxerr1) maxerr1 = err1;
+      avgerr1   += err1 / (float) N;
+      if (isnan(avgerr1)) esl_fatal("whoa, what?\n");
+
+      r2.v      = esl_sse_expf(r1.v);        /* and back to odds */
+      scalar_r2 = exp(r1.x[0]);
+
+      err2       = (r2.x[0] == 0. && scalar_r2 == 0.) ? 0.0 : 2 * fabs(r2.x[0] - scalar_r2) / fabs(r2.x[0] + scalar_r2);
+      if (err2 > maxerr2) maxerr2 = err2;
+      avgerr2   += err2 / (float) N;
+
+      if (very_verbose) 
+	printf("%13.7g  %13.7g  %13.7g  %13.7g  %13.7g  %13.7g  %13.7g\n", odds, scalar_r1, r1.x[0], scalar_r2, r2.x[0], err1, err2);
+    }
+
+  if (verbose) {
+    printf("Average [max] logf() relative error in %d odds trials:  %13.8g  [%13.8g]\n", N, avgerr1, maxerr1);
+    printf("Average [max] expf() relative error in %d odds trials:  %13.8g  [%13.8g]\n", N, avgerr2, maxerr2);
+    printf("(random seed : %" PRIu32 ")\n", esl_randomness_GetSeed(r));
+  }
+
+  if (avgerr1 > 1e-8) esl_fatal("average error on logf() is intolerable\n");
+  if (maxerr1 > 1e-6) esl_fatal("maximum error on logf() is intolerable\n");
+  if (avgerr2 > 1e-8) esl_fatal("average error on expf() is intolerable\n");
+  if (maxerr2 > 1e-6) esl_fatal("maximum error on expf() is intolerable\n");
+}
+#endif /*eslSSE_TESTDRIVE*/
+
+
+
+
+/*****************************************************************
+ * 5. Test driver
+ *****************************************************************/
+
+#ifdef eslSSE_TESTDRIVE
+/* gcc -msse2 -g -Wall -o test -I. -L. -DeslSSE_TESTDRIVE esl_sse.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_sse.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-N",        eslARG_INT,  "10000",  NULL, NULL,  NULL,  NULL, NULL, "number of random test points",                     0 },
+  { "-s",        eslARG_INT,     "42",  NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                    0 },
+  { "-v",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "be verbose: show test report",                     0 },
+  { "--vv",      eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "be very verbose: show individual test samples",    0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for sse module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r  = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));;
+
+  utest_logf(go);
+  utest_expf(go);
+  utest_odds(go, r);
+
+  esl_randomness_Destroy(r);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /* eslSSE_TESTDRIVE*/
+
+
+
+
+/*****************************************************************
+ * 6. Example
+ *****************************************************************/
+
+#ifdef eslSSE_EXAMPLE
+/*::cexcerpt::sse_example::begin::*/
+/* gcc -msse2 -g -Wall -o example -I. -L. -DeslSSE_EXAMPLE esl_sse.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_sse.h"
+
+int
+main(int argc, char **argv)
+{
+  float    x;                           /* scalar input */
+  __m128   xv;                          /* input vector */
+  union { __m128 v; float x[4]; } rv;   /* result vector*/
+
+  x    = 2.0;
+  xv   = _mm_set1_ps(x);
+  rv.v = esl_sse_logf(xv);
+  printf("logf(%f) = %f\n", x, rv.x[0]);
+  
+  rv.v = esl_sse_expf(xv);
+  printf("expf(%f) = %f\n", x, rv.x[0]);
+
+  return 0;
+}
+/*::cexcerpt::sse_example::end::*/
+#endif /*eslSSE_EXAMPLE*/
+
+
+#else /* ! HAVE_SSE2*/
+
+/* If we don't have SSE2 compiled in, provide some nothingness to:
+ *   a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" 
+ *   b. prevent compiler from bitching about "empty compilation unit"
+ *   c. automatically pass the automated tests.
+ */
+#include "easel.h"
+
+void esl_sse_DoAbsolutelyNothing(void) { return; }
+#if defined eslSSE_TESTDRIVE || eslSSE_EXAMPLE || eslSSE_BENCHMARK
+int main(void) { return 0; }
+#endif
+
+#endif /* HAVE_SSE2 or not*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
+/* Additionally, esl_sse_logf() and esl_sse_expf() are 
+ *  Copyright (C) 2007 Julien Pommier
+ *  Copyright (C) 1992 Stephen Moshier 
+ *
+ * These functions derived from zlib-licensed routines by
+ * Julien Pommier, http://gruntthepeon.free.fr/ssemath/. The
+ * zlib license:
+ */
+
+/* Copyright (C) 2007  Julien Pommier
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+
+/* In turn, Pommier had derived the logf() and expf() functions from
+ * serial versions in the Cephes math library. According to its
+ * readme, Cephes is "copyrighted by the author" and "may be used
+ * freely but it comes with no support or guarantee."  Cephes is
+ * available in NETLIB [http://www.netlib.org/cephes/]. NETLIB is
+ * widely considered to be a free scientific code repository, though
+ * the copyright and license status of many parts, including Cephes,
+ * is ill-defined. We have attached Moshier's copyright,
+ * to credit his original contribution. Thanks to both Pommier and
+ * Moshier for their clear code.
+ */
+
diff --git a/esl_sse.h b/esl_sse.h
new file mode 100644
index 0000000..dbea100
--- /dev/null
+++ b/esl_sse.h
@@ -0,0 +1,241 @@
+
+/* Vectorized routines for Intel/AMD, using Streaming SIMD Extensions (SSE).
+ *
+ * This header file, unusually, provides many complete function
+ * implementations; this is so that they can be inlined by the
+ * compiler, for maximum efficiency.
+ * 
+ * Contents:
+ *    1. Function declarations (from esl_sse.c)
+ *    2. Inlined utilities for ps vectors (4 floats in __m128)
+ *    3. Inlined utilities for epu8 vectors (16 uchars in __m128i)
+ */
+#ifdef HAVE_SSE2
+#ifndef eslSSE_INCLUDED
+#define eslSSE_INCLUDED
+
+#include "easel.h"
+
+#include <stdio.h>
+#include <xmmintrin.h>		/* SSE  */
+#include <emmintrin.h>		/* SSE2 */
+
+/* Some compilers (gcc 3.4) did not implement SSE2 cast functions 
+ * on the theory that they're unnecessary no-ops -- but then
+ * code that has proper SSE cast calls doesn't compile. Provide 
+ * the no-ops.
+ */
+#ifndef HAVE_SSE2_CAST
+#define _mm_castps_si128(x) (__m128i)(x)
+#define _mm_castsi128_ps(x) (__m128)(x)
+#endif
+
+
+
+/*****************************************************************
+ * 1. Function declarations (from esl_sse.c)
+ *****************************************************************/
+extern __m128  esl_sse_logf(__m128 x);
+extern __m128  esl_sse_expf(__m128 x);
+extern void    esl_sse_dump_ps(FILE *fp, __m128 v);
+
+
+/*****************************************************************
+ * 2. Inline utilities for ps vectors (4 floats in __m128)
+ *****************************************************************/
+
+/* Function:  esl_sse_select_ps()
+ * Synopsis:  SSE equivalent of <vec_sel()>
+ *
+ * Purpose:   Vector select. Returns a vector <r[z] = a[z]> where <mask[z]>
+ *            is all 0's; <r[z] = b[z]> where <mask[z]> is all 1's.
+ *            
+ *            Useful for avoiding conditional branches. For example,
+ *            to implement \ccode{if (a > 0) a += a;}:
+ *            
+ *            \begin{cchunk}
+ *              mask = _mm_cmpgt_ps(a, _mm_setzero_ps());
+ *              twoa = _mm_add_ps(a, a);
+ *              a    = esl_sse_select_ps(a, twoa, mask);
+ *            \end{cchunk}
+ *
+ * Notes:     As recommended by the Altivec/SSE Migration Guide,
+ *            Apple Computer, Inc.
+ */
+static inline __m128
+esl_sse_select_ps(__m128 a, __m128 b, __m128 mask)
+{
+  b = _mm_and_ps(b, mask);
+  a = _mm_andnot_ps(mask, a);
+  return _mm_or_ps(a,b);
+}
+
+/* Function:  esl_sse_any_gt_ps()
+ * Synopsis:  Returns TRUE if any a[z] > b[z]
+ *
+ * Purpose:   Returns TRUE if any a[z] > b[z] in two
+ *            <ps> vectors of floats.
+ *
+ * Xref:      From Apple Altivec/SSE migration guide.
+ */
+static inline int 
+esl_sse_any_gt_ps(__m128 a, __m128 b)
+{
+  __m128 mask    = _mm_cmpgt_ps(a,b);
+  int   maskbits = _mm_movemask_ps( mask );
+  return maskbits != 0;
+}
+
+
+/* Function:  esl_sse_hmax_ps()
+ * Synopsis:  Find the maximum of elements in a vector.
+ *
+ * Purpose:   Find the maximum valued element in the four float elements
+ *            in <a>, and return that maximum value in <*ret_max>.
+ *            
+ * Xref:      J3/90 for benchmarking of some alternative implementations.
+ */
+static inline void
+esl_sse_hmax_ps(__m128 a, float *ret_max)
+{
+  a = _mm_max_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(0, 3, 2, 1)));
+  a = _mm_max_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(1, 0, 3, 2)));
+  _mm_store_ss(ret_max, a);
+}
+
+
+/* Function:  esl_sse_hmin_ps()
+ * Synopsis:  Find the minimum of elements in a vector.
+ *
+ * Purpose:   Find the minimum valued element in the four float elements
+ *            in <a> and return that minimum value in <*ret_min>.
+ */
+static inline void
+esl_sse_hmin_ps(__m128 a, float *ret_min)
+{
+  a = _mm_min_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(0, 3, 2, 1)));
+  a = _mm_min_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(1, 0, 3, 2)));
+  _mm_store_ss(ret_min, a);
+}
+
+/* Function:  esl_sse_hsum_ps()
+ * Synopsis:  Takes the horizontal sum of elements in a vector.
+ *
+ * Purpose:   Add the four float elements in vector <a>; return
+ *            that sum in <*ret_sum>.
+ */
+static inline void
+esl_sse_hsum_ps(__m128 a, float *ret_sum)
+{
+  a = _mm_add_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(0, 3, 2, 1)));
+  a = _mm_add_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(1, 0, 3, 2)));
+  _mm_store_ss(ret_sum, a);
+}
+
+
+/* Function:  esl_sse_rightshift_ps()
+ * Synopsis:  Shift vector elements to the right.
+ *
+ * Purpose:   Returns a vector containing
+ *            <{ b[0] a[0] a[1] a[2] }>:
+ *            i.e. shift the values in <a> to the
+ *            right, and load the first value of 
+ *            <b> into the first slot.
+ */
+static inline __m128 
+esl_sse_rightshift_ps(__m128 a, __m128 b)
+{
+  return _mm_move_ss(_mm_shuffle_ps(a, a, _MM_SHUFFLE(2, 1, 0, 0)), b);
+}
+
+/* Function:  esl_sse_leftshift_ps()
+ * Synopsis:  Shift vector elements to the left.
+ *
+ * Purpose:   Returns a vector containing
+ *            <{ a[1] a[2] a[3] b[0]}>:
+ *            i.e. shift the values in <a> to the
+ *            left and load the first value of 
+ *            <b> into the first slot.
+ */
+static inline __m128
+esl_sse_leftshift_ps(__m128 a, __m128 b)
+{
+  register __m128 v = _mm_move_ss(a, b);                 /* now b[0] a[1] a[2] a[3] */
+  return _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 3, 2, 1));  /* now a[1] a[2] a[3] b[0] */
+}
+
+
+
+/*****************************************************************
+ * 3. Inlined utilities for epu8 vectors (16 uchars in __m128i)
+ *****************************************************************/ 
+
+/* Function:  esl_sse_any_gt_epu8()
+ * Synopsis:  Returns TRUE if any a[z] > b[z].
+ *
+ * Purpose:   Return TRUE if any <a[z] > b[z]> for <z=0..15>
+ *            in two <epu8> vectors of unsigned chars.
+ *            
+ *            We need this incantation because SSE provides
+ *            no <cmpgt_epu8> instruction.
+ *            
+ *            For equality tests, note that <cmpeq_epi8> works fine
+ *            for unsigned ints though there is no <cmpeq_epu8>
+ *            instruction either).
+ * 
+ *            See vec_any_gt
+ */
+static inline int 
+esl_sse_any_gt_epu8(__m128i a, __m128i b)
+{
+  __m128i mask    = _mm_cmpeq_epi8(_mm_max_epu8(a,b), b); /* anywhere a>b, mask[z] = 0x0; elsewhere 0xff */
+  int   maskbits  = _mm_movemask_epi8(_mm_xor_si128(mask,  _mm_cmpeq_epi8(mask, mask))); /* the xor incantation is a bitwise inversion */
+  return maskbits != 0;
+}
+static inline int 
+esl_sse_any_gt_epi16(__m128i a, __m128i b)
+{
+  return (_mm_movemask_epi8(_mm_cmpgt_epi16(a,b)) != 0); 
+}
+
+
+/* Function:  esl_sse_hmax_epu8()
+ * Synopsis:  Return the max of the 16 elements in epu8 vector.
+ *
+ * Purpose:   Returns the maximum value of the 16 elements in
+ *            an <epu8> vector.
+ */
+static inline uint8_t
+esl_sse_hmax_epu8(__m128i a)
+{
+  a = _mm_max_epu8(a, _mm_srli_si128(a, 8));
+  a = _mm_max_epu8(a, _mm_srli_si128(a, 4));
+  a = _mm_max_epu8(a, _mm_srli_si128(a, 2));
+  a = _mm_max_epu8(a, _mm_srli_si128(a, 1));
+  return (uint8_t) _mm_extract_epi16(a, 0);   /* only low-order 8 bits set; so _epi16 or _epi8 equiv; _epi8 is SSE4.1 */
+}
+
+/* Function:  esl_sse_hmax_epi16()
+ * Synopsis:  Return the max of the 8 elements in epi16 vector.
+ *
+ * Purpose:   Returns the maximum value of the 16 elements in
+ *            an <epu8> vector.
+ */
+static inline int16_t
+esl_sse_hmax_epi16(__m128i a)
+{
+  a = _mm_max_epi16(a, _mm_srli_si128(a, 8));
+  a = _mm_max_epi16(a, _mm_srli_si128(a, 4));
+  a = _mm_max_epi16(a, _mm_srli_si128(a, 2));
+  return (int16_t) _mm_extract_epi16(a, 0);   /* only low-order 8 bits set; so _epi16 or _epi8 equiv; _epi8 is SSE4.1 */
+}
+
+
+#endif /*eslSSE_INCLUDED*/
+#endif /*HAVE_SSE2*/
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_sse.tex b/esl_sse.tex
new file mode 100644
index 0000000..de01d07
--- /dev/null
+++ b/esl_sse.tex
@@ -0,0 +1,39 @@
+
+The \eslmod{sse} module provides a few vectorized functions that use
+the Intel/AMD SSE (Streaming SIMD Extensions) Intrinsics: most
+importantly, vectorized \ccode{logf()} and \ccode{expf()} routines.
+
+The \eslmod{sse} module is only available on platforms that support
+SSE2 instructions. This includes all modern Intel and AMD processors,
+but nor PowerPC processors. By default, the Easel configure script
+enables SSE if it is available on the compilation machine.
+
+
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\hyperlink{func:esl_sse_logf()}{\ccode{esl\_sse\_logf()}} & \ccode{r[z] = log x[z]}\\
+\hyperlink{func:esl_sse_expf()}{\ccode{esl\_sse\_expf()}} & \ccode{r[z] = exp x[z]}\\
+%\hyperlink{func:esl_sse_select_ps()}{\ccode{esl\_sse\_select\_ps()}} & SSE equivalent of \ccode{vec\_sel()}\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{sse} API.}
+\label{tbl:sse_api}
+\end{table}
+
+\subsection{An example of using the sse API}
+
+Figure~\ref{fig:sse_example} shows an example of calculating
+\ccode{logf()} and \ccode{expf()} on an SSE \ccode{\_\_m128} vector
+containing four floats. It also shows a useful \ccode{union} idiom for
+accessing four floats either as an SSE vector or as individual floats.
+
+\begin{figure}[ht]
+\input{cexcerpts/sse_example}
+\caption{An example of using the \eslmod{sse} module.}
+\label{fig:sse_example}
+\end{figure}
+
diff --git a/esl_ssi.c b/esl_ssi.c
new file mode 100644
index 0000000..44f161a
--- /dev/null
+++ b/esl_ssi.c
@@ -0,0 +1,2050 @@
+/* sequence/subsequence indices: fast lookup in large sequence files by keyword.
+ *
+ *  1. Using (reading) an SSI index.
+ *  2. Creating (writing) new SSI files.
+ *  3. Portable binary i/o.
+ *  4. Test driver.
+ *  5. Example code.
+ *  6. License and copyright information.
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_ssi.h"
+
+static uint32_t v30magic = 0xd3d3c9b3; /* SSI 3.0: "ssi3" + 0x80808080 */
+static uint32_t v30swap  = 0xb3c9d3d3; /* byteswapped */
+
+
+/*****************************************************************
+ *# 1. Using (reading) an SSI index.
+ *****************************************************************/ 
+
+static int  binary_search(ESL_SSI *ssi, const char *key, uint32_t klen, off_t base, 
+			  uint32_t recsize, uint64_t maxidx);
+
+/* Function:  esl_ssi_Open()
+ * Synopsis:  Open an SSI index as an <ESL_SSI>.
+ *
+ * Purpose:   Open the SSI index file <filename>, and returns a pointer
+ *            to the new <ESL_SSI> object in <ret_ssi>.
+ *            
+ *            Caller is responsible for closing the SSI file with
+ *            <esl_ssi_Close()>.
+ *
+ * Args:      <filename>   - name of SSI index file to open.       
+ *            <ret_ssi>    - RETURN: the new <ESL_SSI>.
+ *                        
+ * Returns:   <eslOK>        on success;
+ *            <eslENOTFOUND> if <filename> cannot be opened for reading;
+ *            <eslEFORMAT>   if it's not in correct SSI file format;
+ *            <eslERANGE>    if it uses 64-bit file offsets, and we're on a system
+ *                           that doesn't support 64-bit file offsets.
+ *            
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_ssi_Open(const char *filename, ESL_SSI **ret_ssi)
+{
+  ESL_SSI *ssi = NULL;
+  int      status;
+  uint32_t magic;	/* magic number that starts the SSI file */
+  uint16_t i;		/* counter over files */
+
+  /* Initialize the SSI structure, null'ing so we can autocleanup.
+   */
+  ESL_ALLOC(ssi, sizeof(ESL_SSI));
+  ssi->fp         = NULL;
+  ssi->filename   = NULL;
+  ssi->fileformat = NULL;
+  ssi->fileflags  = NULL;
+  ssi->bpl        = NULL;
+  ssi->rpl        = NULL;
+  ssi->nfiles     = 0;          
+
+  /* Open the file.
+   */
+  status = eslENOTFOUND; 
+  if ((ssi->fp = fopen(filename, "rb")) == NULL) goto ERROR; 
+
+  /* Read the magic number: make sure it's an SSI file, and determine
+   * whether it's byteswapped.
+   */
+  status = eslEFORMAT;
+  if (esl_fread_u32(ssi->fp, &magic)        != eslOK) goto ERROR;
+  if (magic != v30magic && magic != v30swap)          goto ERROR;
+  if (esl_fread_u32(ssi->fp, &(ssi->flags)) != eslOK) goto ERROR;
+  if (esl_fread_u32(ssi->fp, &(ssi->offsz)) != eslOK) goto ERROR;
+
+  status = eslERANGE;
+  if (ssi->offsz != 4 && ssi->offsz != 8) goto ERROR;
+  if (ssi->offsz > sizeof(off_t))         goto ERROR;
+
+  /* The header data. */
+  status = eslEFORMAT;
+  if (esl_fread_u16(ssi->fp, &(ssi->nfiles))     != eslOK) goto ERROR;
+  if (esl_fread_u64(ssi->fp, &(ssi->nprimary))   != eslOK) goto ERROR;
+  if (esl_fread_u64(ssi->fp, &(ssi->nsecondary)) != eslOK) goto ERROR;
+  if (esl_fread_u32(ssi->fp, &(ssi->flen))       != eslOK) goto ERROR;
+  if (esl_fread_u32(ssi->fp, &(ssi->plen))       != eslOK) goto ERROR;
+  if (esl_fread_u32(ssi->fp, &(ssi->slen))       != eslOK) goto ERROR;
+  if (esl_fread_u32(ssi->fp, &(ssi->frecsize))   != eslOK) goto ERROR;
+  if (esl_fread_u32(ssi->fp, &(ssi->precsize))   != eslOK) goto ERROR;
+  if (esl_fread_u32(ssi->fp, &(ssi->srecsize))   != eslOK) goto ERROR;
+  
+  if (esl_fread_offset(ssi->fp, ssi->offsz, &(ssi->foffset)) != eslOK) goto ERROR;
+  if (esl_fread_offset(ssi->fp, ssi->offsz, &(ssi->poffset)) != eslOK) goto ERROR;
+  if (esl_fread_offset(ssi->fp, ssi->offsz, &(ssi->soffset)) != eslOK) goto ERROR;
+
+  /* The file information.
+   * We expect the number of files to be small, so reading it once
+   * should be advantageous overall. If SSI ever had to deal with
+   * large numbers of files, you'd probably want to read file
+   * information on demand.
+   */
+  status = eslEFORMAT;
+  if (ssi->nfiles == 0) goto ERROR;
+
+  ESL_ALLOC(ssi->filename,   sizeof(char *) * ssi->nfiles);
+  for (i = 0; i < ssi->nfiles; i++)  ssi->filename[i] = NULL; 
+  ESL_ALLOC(ssi->fileformat, sizeof(uint32_t) * ssi->nfiles);
+  ESL_ALLOC(ssi->fileflags,  sizeof(uint32_t) * ssi->nfiles);
+  ESL_ALLOC(ssi->bpl,        sizeof(uint32_t) * ssi->nfiles);
+  ESL_ALLOC(ssi->rpl,        sizeof(uint32_t) * ssi->nfiles);
+
+  /* (most) allocations done, now we read. */
+  for (i = 0; i < ssi->nfiles; i++) 
+    {
+      ESL_ALLOC(ssi->filename[i], sizeof(char)* ssi->flen);
+      /* We do have to explicitly position, because header and file 
+       * records may expand in the future; frecsize and foffset 
+       * give us forwards compatibility. 
+       */ 
+      status = eslEFORMAT;
+      if (fseeko(ssi->fp, ssi->foffset + (i * ssi->frecsize), SEEK_SET) != 0) goto ERROR;
+      if (fread(ssi->filename[i],sizeof(char),ssi->flen, ssi->fp)!=ssi->flen) goto ERROR;
+      if (esl_fread_u32(ssi->fp, &(ssi->fileformat[i])))                      goto ERROR;
+      if (esl_fread_u32(ssi->fp, &(ssi->fileflags[i])))                       goto ERROR;
+      if (esl_fread_u32(ssi->fp, &(ssi->bpl[i])))                             goto ERROR;
+      if (esl_fread_u32(ssi->fp, &(ssi->rpl[i])))                             goto ERROR;
+    }
+  *ret_ssi = ssi;
+  return eslOK;
+  
+ ERROR:
+  if (ssi != NULL) esl_ssi_Close(ssi);
+  *ret_ssi = NULL;
+  return status;
+}
+
+
+/* Function: esl_ssi_FindName()
+ * Synopsis: Look up a primary or secondary key.
+ *
+ * Purpose:  Looks up the string <key> in index <ssi>.
+ *           <key> can be either a primary or secondary key. If <key>
+ *           is found, <ret_fh> contains a unique handle on
+ *           the file that contains <key> (suitable for an <esl_ssi_FileInfo()>
+ *           call, or for comparison to the handle of the last file
+ *           that was opened for retrieval), and <ret_offset> contains
+ *           the offset of the sequence record in that file.
+ *           
+ * Args:     <ssi>         - open index file
+ *           <key>         - name to search for
+ *           <ret_fh>      - RETURN: handle on file that key is in
+ *           <ret_roff>    - RETURN: offset of the start of that key's record
+ *           <opt_doff>    - optRETURN: data offset (may be 0 if unset)
+ *           <opt_L>       - optRETURN: length of data record (may be 0 if unset)                
+ *
+ * Returns:  <eslOK>        on success;
+ *           <eslENOTFOUND> if no such key is in the index;
+ *           <eslEFORMAT>   if an fread() or fseeko() fails, which almost
+ *                          certainly reflects some kind of misformatting of
+ *                          the index.
+ *
+ * Throws:   <eslEMEM>      on allocation error.
+ */
+int
+esl_ssi_FindName(ESL_SSI *ssi, const char *key, uint16_t *ret_fh, off_t *ret_roff, off_t *opt_doff, int64_t *opt_L)
+{
+  int       status;
+  off_t     doff;
+  int64_t   L;
+  char     *pkey   = NULL;
+
+  /* Look in the primary keys.
+   */
+  status = binary_search(ssi, key, ssi->plen, ssi->poffset, ssi->precsize,
+			 ssi->nprimary);
+
+  if (status == eslOK) 
+    { /* We found it as a primary key; get our data & return. */
+      status = eslEFORMAT;
+      if (esl_fread_u16(ssi->fp, ret_fh)                  != eslOK) goto ERROR;
+      if (esl_fread_offset(ssi->fp, ssi->offsz, ret_roff) != eslOK) goto ERROR;
+      if (esl_fread_offset(ssi->fp, ssi->offsz, &doff)    != eslOK) goto ERROR;
+      if (esl_fread_i64   (ssi->fp, &L)                   != eslOK) goto ERROR;
+    } 
+  else if (status == eslENOTFOUND) 
+    { /* Not in the primary keys? OK, try the secondary keys. */
+      if (ssi->nsecondary > 0) {
+	if ((status = binary_search(ssi, key, ssi->slen, ssi->soffset, ssi->srecsize, ssi->nsecondary)) != eslOK) goto ERROR;
+
+	/* We have the secondary key; flip to its primary key, then look that up. */
+	ESL_ALLOC(pkey, sizeof(char) * ssi->plen);
+	status = eslEFORMAT;
+	if (fread(pkey, sizeof(char), ssi->plen, ssi->fp) != ssi->plen) goto ERROR;
+	if ((status = esl_ssi_FindName(ssi, pkey, ret_fh, ret_roff, &doff, &L)) != eslOK) goto ERROR;
+      } else goto ERROR;	/* no secondary keys? pass along the ENOTFOUND error. */
+    } else goto ERROR;	/* status from binary search was an error code. */
+
+  if (pkey != NULL) free(pkey);
+  if (opt_doff != NULL) *opt_doff = doff;
+  if (opt_L    != NULL) *opt_L    = L;
+  return eslOK;
+
+ ERROR:
+  if (pkey != NULL) free(pkey);
+  *ret_fh   = 0;
+  *ret_roff = 0;
+  if (opt_doff != NULL) *opt_doff = 0;
+  if (opt_L    != NULL) *opt_L    = 0;
+  return status;
+}
+
+
+
+/* Function:  esl_ssi_FindNumber()
+ * Synopsis:  Look up the n'th primary key.
+ *
+ * Purpose:   Looks up primary key number <nkey> in the open index
+ *            <ssi>.  <nkey> ranges from <0..ssi->nprimary-1>. When
+ *            key <nkey> is found, any/all of several optional
+ *            arguments point to results. <*opt_fh> contains a unique
+ *            handle on the file that contains that key (suitable for
+ *            an <esl_ssi_FileInfo()> call, or for comparison to the
+ *            handle of the last file that was opened for retrieval).
+ *            <*opt_roff> contains the record offset; <*opt_doff>
+ *            contains the data offset; <*opt_L> contains the record
+ *            length; and <*opt_pkey> points to the primary key name
+ *            (a string, allocated here, that the caller becomes
+ *            responsible for free'ing).
+ *           
+ * Args:      <ssi>        - open index file
+ *            <nkey>       - primary key number to retrieve (0..nprimary-1)
+ *            <opt_fh>     - optRETURN: handle on file that key is in
+ *            <opt_roff>   - optRETURN: offset of the start of that key's record
+ *            <opt_doff>   - optRETURN: data offset (may be 0 if unset)
+ *            <opt_L>      - optRETURN: length of data record (may be 0 if unset)                
+ *            <opt_pkey>   - optRETURN: primary key name (allocated here; caller must free)
+ *
+ * Returns:   <eslOK>        on success;
+ *            <eslENOTFOUND> if there is no sequence record <nkey>;
+ *            <eslEFORMAT>   if a read or a seek fails, probably indicating
+ *                           some kind of file misformatting.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_ssi_FindNumber(ESL_SSI *ssi, int64_t nkey, uint16_t *opt_fh, off_t *opt_roff, off_t *opt_doff, int64_t *opt_L, char **opt_pkey)
+{
+  int      status;
+  uint16_t fh;
+  off_t    doff, roff;
+  uint64_t L;
+  char    *pkey = NULL;
+
+  if (nkey >= ssi->nprimary) { status = eslENOTFOUND; goto ERROR; }
+  ESL_ALLOC(pkey, sizeof(char) * ssi->plen);
+
+  status = eslEFORMAT;
+  if (fseeko(ssi->fp, ssi->poffset+ssi->precsize*nkey, SEEK_SET)!= 0) goto ERROR;
+  if (fread(pkey, sizeof(char), ssi->plen, ssi->fp)   != ssi->plen)   goto ERROR;
+  if (esl_fread_u16(ssi->fp, &fh)                     != eslOK)       goto ERROR;
+  if (esl_fread_offset(ssi->fp, ssi->offsz, &roff)    != eslOK)       goto ERROR;
+  if (esl_fread_offset(ssi->fp, ssi->offsz, &doff)    != eslOK)       goto ERROR;
+  if (esl_fread_u64   (ssi->fp, &L)                   != eslOK)       goto ERROR;
+
+  if (opt_fh   != NULL) *opt_fh   = fh;
+  if (opt_roff != NULL) *opt_roff = roff;
+  if (opt_doff != NULL) *opt_doff = doff;
+  if (opt_L    != NULL) *opt_L    = L;
+  if (opt_pkey != NULL) *opt_pkey = pkey; else free(pkey);
+  return eslOK;
+
+ ERROR:
+  if (pkey     != NULL) free(pkey);
+  if (opt_fh   != NULL) *opt_fh   = 0;
+  if (opt_roff != NULL) *opt_roff = 0;
+  if (opt_doff != NULL) *opt_doff = 0;
+  if (opt_L    != NULL) *opt_L    = 0;
+  if (opt_pkey != NULL) *opt_pkey = NULL;
+  return status;
+}
+
+
+/* Function: esl_ssi_FindSubseq()
+ * Synopsis: Look up a specific subsequence's start.
+ * Date:     SRE, Mon Jan  1 19:49:31 2001 [St. Louis]
+ *
+ * Purpose:  Fast subsequence retrieval: look up a primary or secondary
+ *           <key> in the open index <ssi>, and ask for the nearest data
+ *           offset to a subsequence starting at residue
+ *           <requested_start> in the sequence (numbering the sequence
+ *           <1..L>).  If <key> is found, on return, <ret_fh> contains
+ *           a unique handle on the file that contains <key>;
+ *           <ret_roff> contains the disk offset to the start of the
+ *           sequence record; <ret_doff> contains the disk offset
+ *           (see below); and <ret_actual_start) contains the coordinate
+ *           (1..L) of the first valid residue at or after
+ *           <data_offset>. <ret_actual_start> is $\leq$
+ *           <requested_start>.
+ *           
+ *           Depending on the file's characteristics, there are four
+ *           possible outcomes.
+ *           
+ *           If the file has the <eslSSI_FASTSUBSEQ> flag set, a data
+ *           offset was indexed for this key, and the data can be
+ *           indexed at single residue resolution (because the file's
+ *           lines contain only residues, no spaces), then <ret_doff>
+ *           is exactly the position of residue <requested_start> on
+ *           disk, and <ret_actual_start> is <requested_start>.
+ *           
+ *           If the file has the <eslSSI_FASTSUBSEQ> flag set, a data
+ *           offset was indexed for this key, but the data can only be
+ *           indexed at line resolution (because at least some of the
+ *           file's lines contain spaces), then <ret_doff> is the
+ *           position of the start of the line that <requested_start>
+ *           is on, and <ret_actual_start> is the coord <1..L> of the
+ *           first residue on that line.
+ *           
+ *           If the file does not have the <eslSSI_FASTSUBSEQ> flag
+ *           set (because lines contain a variable number of residues
+ *           and/or bytes), but a data offset was indexed for this
+ *           key, then we can still at least return that data offset,
+ *           but the caller is going to have to start from the
+ *           beginning of the data and read residues until it reaches
+ *           the desired <requested_start>. Now <ret_doff> is the
+ *           offset to the start of the first line of the sequence
+ *           data, and <ret_actual_start> is 1.
+ *           
+ *           If the key does not have a data offset indexed at all,
+ *           then regardless of the file's <eslSSI_FASTSUBSEQ>
+ *           setting, we can't calculate even the position of the
+ *           first line. In this case, <ret_doff> is 0 (for
+ *           unset/unknown), and <ret_actual_start> is <1>.
+ *           
+ *           A caller that's going to position the disk and read a
+ *           subseq must check for all four possible outcomes (pardon
+ *           redundancy with the above, but just to be clear, from the
+ *           caller's perspective now):
+ *           
+ *           If <ret_doff> is 0, no data offset information can be
+ *           calculated; the caller can still use <ret_roff> to
+ *           position the disk to the start of <key>'s record, but it
+ *           will need to parse the header to find the start of the
+ *           sequence data; then it will need to parse the sequence
+ *           data, skipping to residue <requested start>.
+ *           
+ *           If <ret_doff> is valid ($>0$), and <ret_actual_start> is
+ *           1, then caller may use <ret_doff> to position the disk to
+ *           the start of the first sequence data line, but will still
+ *           need to parse all the sequence data, counting and
+ *           skipping to residue <requested start>. This is equivalent
+ *           to (and in practice, not much more efficient than)
+ *           positioning to the record start and parsing the header to
+ *           locate the sequence data start. 
+ *           
+ *           If <ret_doff> is valid ($>0$), and <ret_actual_start> is
+ *           $>1$ but $<$ <requested_start>, then <ret_doff> is the
+ *           offset to the first byte of a line on which the
+ *           subsequence begins. The caller can position the disk
+ *           there, then start parsing, skipping <requested_start -
+ *           *ret_actual_start> residues to reach the
+ *           <requested_start>. (In the case where the subsequence
+ *           begins on the first line, then <ret_actual_start> will be
+ *           1, and the caller will have to handle this as the case
+ *           above.)
+ *           
+ *           If <<ret_doff> is valid ($>0$), and <ret_actual_start> is
+ *           $=$ <requested_start>, then <ret_doff> is the offset to a
+ *           byte in the file, such that the requested subsequence
+ *           starts at the next valid residue at or after that
+ *           position.  (The <ret_doff> would usually be exactly the
+ *           first residue of the subsequence, because we used single
+ *           residue resolution arithmetic to find it, but there's a
+ *           case where <requested_start> happens to be the first
+ *           residue of a line and we calculated <ret_doff> using
+ *           line-resolution arithmetic; in this latter case,
+ *           <ret_doff> could be pointing at a space before the first
+ *           subseq residue.) The caller may position the disk there
+ *           and start parsing immediately; the first valid residue
+ *           will be the start of the subsequence.
+ *
+ * Args:     <ssi>             - open index file
+ *           <key>             - primary or secondary key to find
+ *           <requested_start> - residue we'd like to start at (1..L)
+ *           <ret_fh>          - RETURN: handle for file the key is in
+ *           <ret_roff>        - RETURN: offset to start of sequence record
+ *           <ret_doff>        - RETURN: offset to closest start of subseq data, or 0. 
+ *           <ret_L>           - RETURN: length of <key> in residues (may be 0 if unset)
+ *           <ret_actual_start>- RETURN: coord (1..L) of residue at <ret_doff>
+ *
+ * Returns:  <eslOK>         on any of the four successful outcomes.
+ *           <eslENOTFOUND>  if no such key is found in the index;
+ *           <eslEFORMAT> on a read or seek failure, presumably meaning that
+ *                        the file is misformatted somehow;
+ *           <eslERANGE>  if <requested_start> isn't somewhere in the range
+ *                        <1..len> for the target sequence.
+ *                        
+ * Throws:   <eslEMEM> on allocation error.                       
+ */
+int
+esl_ssi_FindSubseq(ESL_SSI *ssi, const char *key, int64_t requested_start,
+		   uint16_t *ret_fh, off_t *ret_roff, off_t *ret_doff, int64_t *ret_L, int64_t *ret_actual_start)
+{
+  int      status;
+  uint64_t r, b, i, l;	/* tmp variables for "clarity", to match docs */
+  
+  /* Look up the key by name.
+   */
+  if ((status = esl_ssi_FindName(ssi, key, ret_fh, ret_roff, ret_doff, ret_L)) != eslOK) goto ERROR;
+  if (requested_start < 0 || requested_start > *ret_L) { status = eslERANGE; goto ERROR; }
+
+  /* Do we have a data offset for this key? If not, we're case 4.    */
+  /* Can we do fast subseq lookup on this file? If no, we're case 3. */
+  if (*ret_doff == 0 || ! (ssi->fileflags[*ret_fh] & eslSSI_FASTSUBSEQ))
+    {
+      *ret_actual_start = 1;
+      return eslOK;
+    }
+
+  /* Set up tmp variables for clarity of equations below,
+   * and to make them match tex documentation 
+   */
+  r = ssi->rpl[*ret_fh];         /* residues per line */
+  b = ssi->bpl[*ret_fh];         /* bytes per line    */
+  i = requested_start;	         /* start position 1..L */
+  l = (i-1)/r;		         /* data line # (0..) that the residue is on */
+  if (r == 0 || b == 0) { status = eslEINVAL; goto ERROR; }
+  
+  /* When b = r+1, there's nothing but sequence on each data line (and the \0).
+   * In this case, we know we can find each residue precisely: outcome #1.
+   */
+  if (b == r+1) 
+    {
+      *ret_doff        += l*b + (i-1)%r;
+      *ret_actual_start = requested_start;
+    } 
+  /* else, there's other stuff on seq lines - probably spaces - so the best
+   * we can do (without figuring out the spacing pattern and checking that
+   * it's consistent everywhere) is to position at start of relevant line.
+   */
+  else
+    { 
+      *ret_doff         += l*b;
+      *ret_actual_start = 1 + l*r;
+    }
+  return eslOK;
+
+ ERROR:
+  *ret_fh           = 0;
+  *ret_roff         = 0;
+  *ret_doff         = 0;
+  *ret_L            = 0;
+  *ret_actual_start = 0;
+  return status;
+}
+
+
+/* Function: esl_ssi_FileInfo()
+ * Synopsis: Retrieve a file name and format code.
+ * Date:     SRE, Tue Jan  2 10:31:01 2001 [St. Louis]
+ *
+ * Purpose:  Given a file number <fh> in an open index file
+ *           <ssi>, retrieve file name <ret_filename> and
+ *           the file format <ret_format>. 
+ *           
+ *           <ret_filename> is a pointer to a string maintained
+ *           internally by <ssi>. It should not be free'd; 
+ *           <esl_ssi_Close(ssi)> will take care of it.
+ *
+ * Args:     <ssi>          - open index file
+ *           <fh>           - handle on file to look up
+ *           <ret_filename> - RETURN: name of file n
+ *           <ret_format>   - RETURN: format code for file n
+ *
+ * Returns:  <eslOK> on success.
+ * 
+ * Throws:   <eslEINVAL> if there is no such file number <fh>.
+ */
+int
+esl_ssi_FileInfo(ESL_SSI *ssi, uint16_t fh, char **ret_filename, int *ret_format)
+{
+  int status;
+
+  if (fh >= ssi->nfiles) ESL_XEXCEPTION(eslEINVAL, "no such file number");
+  *ret_filename = ssi->filename[fh];
+  *ret_format   = ssi->fileformat[fh];
+  return eslOK;
+
+ ERROR:
+  *ret_filename = NULL;
+  *ret_format   = 0;
+  return status;
+}
+
+
+/* Function:  esl_ssi_Close()
+ * Synopsis:  Close an SSI index.
+ *
+ * Purpose:   Close an open SSI index <ssi>.
+ * 
+ * Args:      <ssi>   - an open SSI index file.
+ */
+void
+esl_ssi_Close(ESL_SSI *ssi)
+{
+  int i;
+
+  if (ssi == NULL) return;
+
+  if (ssi->fp != NULL) fclose(ssi->fp);
+  if (ssi->filename != NULL) {
+    for (i = 0; i < ssi->nfiles; i++) 
+      if (ssi->filename[i] != NULL) free(ssi->filename[i]);
+    free(ssi->filename);
+  }
+  if (ssi->fileformat != NULL) free(ssi->fileformat);
+  if (ssi->fileflags  != NULL) free(ssi->fileflags);
+  if (ssi->bpl        != NULL) free(ssi->bpl);
+  if (ssi->rpl        != NULL) free(ssi->rpl);
+  free(ssi);
+}  
+
+
+/* binary_search()
+ * Date:     SRE, Sun Dec 31 16:05:03 2000 [St. Louis]
+ *
+ * Purpose:  Find <key> in an SSI index, by a binary search
+ *           in an alphabetically sorted list of keys. If successful,
+ *           return <eslOK>, and the index file is positioned to read
+ *           the rest of the data for that key. If unsuccessful, 
+ *           return <eslFAIL>, and the positioning of the index file
+ *           is left in an undefined state.
+ *
+ * Args:     <ssi>     - an open ESL_SSI
+ *           <key>     - key to find
+ *           <klen>    - key length to allocate (plen or slen from ssi)
+ *           <base>    - base offset (poffset or soffset)
+ *           <recsize> - size of each key record in bytes (precsize or srecsize)
+ *           <maxidx>  - # of keys (nprimary or nsecondary)
+ *
+ * Returns:  <eslOK> on success, and leaves file positioned for reading remaining
+ *           data for the key. 
+ *           
+ *           <eslENOTFOUND> if <key> is not found.
+ *           <eslEFORMAT>   if an fread() or fseeko() fails, probably indicating
+ *                          some kind of misformatting of the index file.
+ *
+ * Throws:   <eslEMEM> on allocation failure.
+ *           
+ */
+static int
+binary_search(ESL_SSI *ssi, const char *key, uint32_t klen, off_t base, 
+	      uint32_t recsize, uint64_t maxidx)
+{
+  char        *name;
+  uint64_t     left, right, mid;
+  int          cmp;
+  int          status;
+  
+  if (maxidx == 0) return eslENOTFOUND; /* special case: empty index */
+
+  ESL_ALLOC(name, (sizeof(char)*klen));
+
+  left  = 0;
+  right = maxidx-1;
+  while (1) {			/* A binary search: */
+    mid   = (left+right) / 2;	/* careful here. left+right potentially overflows if
+				   we didn't limit unsigned vars to signed ranges. */
+    status = eslEFORMAT;
+    if (fseeko(ssi->fp, base + recsize*mid, SEEK_SET) != 0)    goto ERROR;
+    if (fread(name, sizeof(char), klen, ssi->fp)      != klen) goto ERROR;
+
+    status = eslENOTFOUND;
+    cmp = strcmp(name, key);
+    if      (cmp == 0) break;	             /* found it!               */
+    else if (left >= right) goto ERROR;      /* no such key             */
+    else if (cmp < 0)       left  = mid+1;   /* it's still right of mid */
+    else if (cmp > 0) {
+      if (mid == 0) goto ERROR;              /* beware left edge case   */
+      else right = mid-1;                    /* it's left of mid        */
+    }
+  }
+
+  if (name != NULL) free(name);
+  return eslOK;  /* and ssi->fp is positioned to read the record. */
+
+ ERROR:
+  if (name != NULL) free(name);
+  return status; 
+}
+
+
+/*****************************************************************
+ *# 2. Creating (writing) new SSI files.
+ *****************************************************************/ 
+static int current_newssi_size(const ESL_NEWSSI *ns);
+static int activate_external_sort(ESL_NEWSSI *ns);
+static int parse_pkey(char *buf, ESL_PKEY *pkey);
+static int parse_skey(char *buf, ESL_SKEY *skey);
+static int pkeysort(const void *k1, const void *k2);
+static int skeysort(const void *k1, const void *k2);
+
+/* Function:  esl_newssi_Open()
+ * Synopsis:  Create a new <ESL_NEWSSI>.
+ *
+ * Purpose:   Creates and returns a <ESL_NEWSSI>, in order to create a 
+ *            new SSI index file.
+ *
+ * Returns:   <eslOK> on success, and <*ret_newssi> is a pointer to a
+ *            new <ESL_NEWSSI> structure.
+ *            
+ *            Returns <eslENOTFOUND> if <ssifile> can't be opened.
+ *
+ *            Returns <eslEOVERWRITE> if <allow_overwrite> is <FALSE>
+ *            and <ssifile> (or any necessary tmp files) already
+ *            exist, to block overwriting of an existing SSI file.
+ *            
+ * Throws:    <eslEMEM> on allocation error.
+ */
+int
+esl_newssi_Open(const char *ssifile, int allow_overwrite, ESL_NEWSSI **ret_newssi)
+{
+  ESL_NEWSSI *ns = NULL;
+  int i;
+  int status;
+
+  ESL_ALLOC(ns, sizeof(ESL_NEWSSI));
+  ns->ssifile    = NULL;
+  ns->ssifp      = NULL;
+  ns->external   = FALSE;	    /* we'll switch to external sort if...       */
+  ns->max_ram    = eslSSI_MAXRAM;   /* ... if we exceed this memory limit in MB. */
+  ns->filenames  = NULL;
+  ns->fileformat = NULL;
+  ns->bpl        = NULL;
+  ns->rpl        = NULL;
+  ns->flen       = 0;
+  ns->nfiles     = 0;
+  ns->pkeys      = NULL;
+  ns->plen       = 0;
+  ns->nprimary   = 0;
+  ns->ptmpfile   = NULL;
+  ns->ptmp       = NULL;
+  ns->skeys      = NULL;
+  ns->slen       = 0;
+  ns->nsecondary = 0;
+  ns->stmpfile   = NULL;
+  ns->stmp       = NULL;
+  ns->errbuf[0]  = '\0';    
+
+  if ((status = esl_strdup(ssifile, -1, &(ns->ssifile)))    != eslOK) goto ERROR;
+  if ((status = esl_strdup(ssifile, -1, &(ns->ptmpfile)))   != eslOK) goto ERROR;
+  if ((status = esl_strdup(ssifile, -1, &(ns->stmpfile)))   != eslOK) goto ERROR;
+  if ((status = esl_strcat(&ns->ptmpfile, -1, ".1", 2))     != eslOK) goto ERROR;
+  if ((status = esl_strcat(&ns->stmpfile, -1, ".2", 2))     != eslOK) goto ERROR;
+
+  if (! allow_overwrite)
+    {
+      if (esl_FileExists(ssifile)      ||
+	  esl_FileExists(ns->ptmpfile) ||
+	  esl_FileExists(ns->stmpfile)) 
+	{ status = eslEOVERWRITE; goto ERROR; }
+    }
+
+  if ((ns->ssifp = fopen(ssifile, "w")) == NULL)  { status = eslENOTFOUND; goto ERROR; }
+
+  ESL_ALLOC(ns->filenames,  sizeof(char *)   * eslSSI_FCHUNK);
+  for (i = 0; i < eslSSI_FCHUNK; i++) 
+    ns->filenames[i] = NULL;
+  ESL_ALLOC(ns->fileformat, sizeof(uint32_t) * eslSSI_FCHUNK);
+  ESL_ALLOC(ns->bpl,        sizeof(uint32_t) * eslSSI_FCHUNK);
+  ESL_ALLOC(ns->rpl,        sizeof(uint32_t) * eslSSI_FCHUNK);
+  ESL_ALLOC(ns->pkeys,      sizeof(ESL_PKEY) * eslSSI_KCHUNK);
+  for (i = 0; i < eslSSI_KCHUNK; i++) 
+    ns->pkeys[i].key = NULL;
+  ESL_ALLOC(ns->skeys,      sizeof(ESL_SKEY) * eslSSI_KCHUNK);
+  for (i = 0; i < eslSSI_KCHUNK; i++) {
+    ns->skeys[i].key  = NULL;
+    ns->skeys[i].pkey = NULL;
+  }
+  *ret_newssi = ns;
+  return eslOK;
+
+ ERROR:
+  esl_newssi_Close(ns);	/* free the damaged structure */
+  return status;
+}
+
+
+/* Function:  esl_newssi_AddFile()
+ * Synopsis:  Add a filename to a growing index.
+ *
+ * Purpose:   Registers the file <filename> into the new index <ns>,
+ *            along with its format code <fmt>. The index assigns it
+ *            a unique handle, which it returns in <ret_fh>. This
+ *            handle is needed when registering primary keys.
+ *
+ *            Caller should make sure that the same file isn't registered
+ *            twice; this function doesn't check.
+ *            
+ * Args:      <ns>         - new ssi index under construction.
+ *            <filename>   - filename to add to the index.
+ *            <fmt>        - format code to associate with <filename> (or 0)
+ *            <ret_fh>     - RETURN: filehandle associated with <filename>        
+ *
+ * Returns:   <eslOK> on success;
+ *            <eslERANGE> if registering this file would exceed the
+ *                        maximum number of indexed files.
+ *
+ * Throws:    <eslEMEM> on allocation or reallocation error.
+ */
+int
+esl_newssi_AddFile(ESL_NEWSSI *ns, const char *filename, int fmt, uint16_t *ret_fh)
+{
+  int      status;
+  uint16_t fh;
+  int      i;
+  int      n;
+
+  if (ns->nfiles >= eslSSI_MAXFILES) ESL_XFAIL(eslERANGE, ns->errbuf, "exceeded the maximum number of files an SSI index can store");
+
+  n = strlen(filename);
+  if ((n+1) > ns->flen) ns->flen = n+1;
+
+  if ((status = esl_FileTail(filename, FALSE, &(ns->filenames[ns->nfiles]))) != eslOK) goto ERROR;
+  
+  ns->fileformat[ns->nfiles] = fmt;
+  ns->bpl[ns->nfiles]        = 0;
+  ns->rpl[ns->nfiles]        = 0;
+  fh                         = ns->nfiles;   /* handle is simply = file number */
+  ns->nfiles++;
+
+  if (ns->nfiles % eslSSI_FCHUNK == 0) {
+    ESL_REALLOC(ns->filenames,  sizeof(char *)   * (ns->nfiles+eslSSI_FCHUNK));
+    for (i = ns->nfiles; i < ns->nfiles+eslSSI_FCHUNK; i++) ns->filenames[i] = NULL;
+    ESL_REALLOC(ns->fileformat, sizeof(uint32_t) * (ns->nfiles+eslSSI_FCHUNK));
+    ESL_REALLOC(ns->bpl,        sizeof(uint32_t) * (ns->nfiles+eslSSI_FCHUNK));
+    ESL_REALLOC(ns->rpl,        sizeof(uint32_t) * (ns->nfiles+eslSSI_FCHUNK));
+  }
+  *ret_fh = fh;
+  return eslOK;
+
+ ERROR:
+  *ret_fh = 0;
+  return status;
+}
+
+
+
+/* Function:  esl_newssi_SetSubseq()
+ * Synopsis:  Declare that file is suitable for fast subseq lookup.
+ *
+ * Purpose:   Declare that the file associated with handle <fh> is
+ *            suitable for fast subsequence lookup, because it has
+ *            a constant number of residues and bytes per (nonterminal)
+ *            data line, <rpl> and <bpl>, respectively.
+ *            
+ *            Caller is responsible for this being true: <rpl> and
+ *            <bpl> must be constant for every nonterminal line of 
+ *            every sequence in this file.
+ *            
+ * Args:      <ns>   - ssi index under construction
+ *            <fh>   - handle on file to set fast subseq lookup on
+ *            <bpl>  - constant bytes per nonterminal line in <fh>                   
+ *            <rpl>  - constant residues per nonterminal line in <fh>
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEINVAL> on invalid argument(s).
+ */
+int
+esl_newssi_SetSubseq(ESL_NEWSSI *ns, uint16_t fh, uint32_t bpl, uint32_t rpl)
+{
+  int status;
+
+  if (fh >= ns->nfiles)      ESL_XEXCEPTION(eslEINVAL, "invalid file number");
+  if (bpl <= 0 || rpl <= 0)  ESL_XEXCEPTION(eslEINVAL, "invalid bpl or rpl");
+  ns->bpl[fh] = bpl;
+  ns->rpl[fh] = rpl;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function: esl_newssi_AddKey()
+ * Synopsis: Add a primary key to a growing index.
+ * Date:     SRE, Tue Jan  2 11:50:54 2001 [St. Louis]
+ *
+ * Purpose:  Register primary key <key> in new index <ns>, while telling
+ *           the index that this primary key is in the file associated
+ *           with filehandle <fh> (the handle returned by a previous call
+ *           to <esl_newssi_AddFile()>); that its record starts at 
+ *           offset <r_off> in the file; that its data (usually
+ *           sequence data) starts at offset <d_off> in the file (i.e.
+ *           after any record header); and that the record's data is
+ *           of length <L> (usually, the record is a sequence, and <L> 
+ *           is its length in residues).
+ *           
+ *           The data length <L> is technically optional as far as SSI
+ *           is concerned; <L> may be passed as 0 to leave it
+ *           unset. However, functions in the <sqio> module that use
+ *           SSI indices will assume that <L> is available.
+ *           
+ *           <d_off> is also optional; it may be passed as <0> to
+ *           leave it unset. If provided, <d_off> gives an offset to
+ *           the data portion of the record. The interpretation of
+ *           this data offset may be implementation-defined and may
+ *           depend on the format of the datafile; for example, in how
+ *           <sqio> uses SSI indices, <d_off> is the offset to the
+ *           start of the first sequence line.
+ *           
+ *           Both <d_off> and <L> must be provided, and additionally
+ *           <eslSSI_FASTSUBSEQ> must be set for this file, for fast
+ *           subsequence lookup to work.
+ *           
+ * Args:     <ns>     - active index
+ *           <key>    - primary key to add
+ *           <fh>     - handle on file that this key's in 
+ *           <r_off>  - offset to start of record
+ *           <d_off>  - offset to start of sequence data, or 0
+ *           <L>      - length of sequence, or 0
+ *
+ * Returns:  <eslOK>        on success;
+ *           <eslERANGE>    if registering this key would exceed the maximum
+ *                          number of primary keys;
+ *           <eslENOTFOUND> if we needed to open external tmp files, but
+ *                          the attempt to open them failed.
+ *           
+ * Throws:   <eslEINVAL> on an invalid argument;
+ *           <eslEMEM>   on allocation failure;
+ *           <eslEWRITE> on any system error writing to tmp file, such
+ *                       as filling the filesystem.
+ */
+int
+esl_newssi_AddKey(ESL_NEWSSI *ns, const char *key, uint16_t fh, 
+		  off_t r_off, off_t d_off, int64_t L)
+{
+  int status;
+  int i;
+  int n;			/* a string length */
+  
+  if (fh >= eslSSI_MAXFILES)           ESL_XEXCEPTION(eslEINVAL, "invalid fh");
+  if (ns->nprimary >= eslSSI_MAXKEYS)  ESL_XFAIL(eslERANGE, ns->errbuf, "exceeded maximum number of primary keys allowed");
+
+  /* Before adding the key: check how big our index is.
+   * If it's getting too large, switch to external mode.
+   */
+  if (!ns->external && current_newssi_size(ns) >= ns->max_ram) 
+    if ((status = activate_external_sort(ns)) != eslOK) goto ERROR;
+
+  /* Update maximum pkey length, if needed. (Inclusive of '\0').
+   */
+  n = strlen(key)+1;
+  if (n > ns->plen) ns->plen = n;
+
+  /* External mode? Simply append to disk... 
+   */
+  if (ns->external) 
+    {
+      if (sizeof(off_t) == 4) {
+	if (fprintf(ns->ptmp, "%s\t%d\t%" PRIu32 "\t%" PRIu32 "\t%" PRIi64 "\n", 
+		    key, fh, (uint32_t) r_off, (uint32_t) d_off, L) <= 0) 
+	  ESL_XEXCEPTION_SYS(eslEWRITE, "ssi key tmp file write failed");
+      } else {
+	if (fprintf(ns->ptmp, "%s\t%d\t%" PRIu64 "\t%" PRIu64 "\t%" PRIi64 "\n", 
+		    key, fh, (uint64_t) r_off, (uint64_t) d_off, L) <= 0)
+	  ESL_XEXCEPTION_SYS(eslEWRITE, "ssi key tmp file write failed");
+      }
+      ns->nprimary++;
+    }
+  else
+    {
+      /* Else: internal mode, keep keys in memory...
+       */
+      if ((status = esl_strdup(key, n, &(ns->pkeys[ns->nprimary].key))) != eslOK) goto ERROR;
+      ns->pkeys[ns->nprimary].fnum  = fh;
+      ns->pkeys[ns->nprimary].r_off = r_off;
+      ns->pkeys[ns->nprimary].d_off = d_off;
+      ns->pkeys[ns->nprimary].len   = L;
+      ns->nprimary++;
+
+      /* Reallocate as needed. */
+      if (ns->nprimary % eslSSI_KCHUNK == 0) {
+	ESL_REALLOC(ns->pkeys, sizeof(ESL_PKEY) * (ns->nprimary+eslSSI_KCHUNK));
+	for (i = ns->nprimary; i < ns->nprimary + eslSSI_KCHUNK; i++)
+	  ns->pkeys[i].key = NULL;
+      }
+    }
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_newssi_AddAlias()
+ * Synopsis:  Add a secondary key (alias) to a growing index.
+ *
+ * Purpose:   Registers secondary key <alias> in index <ns>, and 
+ *            map it to the primary key <key>. <key> must already
+ *            have been registered. That is, when someone looks up <alias>,
+ *            we'll retrieve record <key>. 
+ *            
+ * Args:      <ns>    - ssi index being constructed
+ *            <alias> - secondary key to register
+ *            <key>   - primary key to associate with <skey>.                  
+ *
+ * Returns:   <eslOK>        on success;
+ *            <eslERANGE>    if registering this key would exceed the maximum
+ *                           number of secondary keys that can be stored;
+ *            <eslENOTFOUND> if we needed to open external tmp files, but
+ *                           the attempt to open them failed.
+ *
+ * Throws:    <eslEWRITE>   on any system error writing to tmp file, such 
+ *                          as running out of space on the device.
+ */
+int
+esl_newssi_AddAlias(ESL_NEWSSI *ns, const char *alias, const char *key)
+{
+  int status;
+  int i;
+  int n;			/* a string length */
+  
+  if (ns->nsecondary >= eslSSI_MAXKEYS) ESL_XFAIL(eslERANGE, ns->errbuf, "exceeded maximum number of secondary keys allowed");
+
+  /* Before adding the key: check how big our index is.
+   * If it's getting too large, switch to external mode.
+   */
+  if (!ns->external && current_newssi_size(ns) >= ns->max_ram) 
+    if ((status = activate_external_sort(ns)) != eslOK) goto ERROR;
+
+  /* Update maximum secondary key length, if necessary. */
+  n = strlen(alias)+1;
+  if (n > ns->slen) ns->slen = n;
+
+  /* if external mode: write info to disk. */
+  if (ns->external) 
+    {
+      if (fprintf(ns->stmp, "%s\t%s\n", alias, key) <= 0) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi alias tmp file write failed");
+      ns->nsecondary++;
+    }
+  else
+    { /* else, internal mode... store info in memory. */
+      if ((status = esl_strdup(alias, n, &(ns->skeys[ns->nsecondary].key))) != eslOK) goto ERROR;
+      if ((status = esl_strdup(key, -1, &(ns->skeys[ns->nsecondary].pkey))) != eslOK) goto ERROR;
+      ns->nsecondary++;
+
+      if (ns->nsecondary % eslSSI_KCHUNK == 0) {
+	ESL_REALLOC(ns->skeys, sizeof(ESL_SKEY) * (ns->nsecondary+eslSSI_KCHUNK));
+	for (i = ns->nsecondary; i < ns->nsecondary+eslSSI_KCHUNK; i++) {
+	  ns->skeys[i].key  = NULL;
+	  ns->skeys[i].pkey = NULL;
+	}
+      }
+    }
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function:  esl_newssi_Write()
+ * Synopsis:  Save a new index to an SSI file.
+ *
+ * Purpose:   Writes the complete index <ns> in SSI format to its file.
+ *            
+ *            Handles all necessary overhead of sorting the primary and
+ *            secondary keys, including any externally sorted tmpfiles that
+ *            may have been needed for large indices.
+ *            
+ * Args:      <ns>  - new SSI index to write                   
+ *            
+ * Returns:   <eslOK>       on success;
+ *            <eslERANGE>   if index size exceeds system's maximum file size;
+ *            <eslESYS>     if any of the steps of an external sort fail.
+ *
+ * Throws:    <eslEINVAL> on invalid argument, including too-long tmpfile names;
+ *            <eslEMEM>   on buffer allocation failure;
+ *            <eslEWRITE> on any system write failure, including filled disk.  
+ */
+int
+esl_newssi_Write(ESL_NEWSSI *ns)
+{
+  int      status, 		/* convention                               */
+           i;			/* counter over files, keys                 */
+  uint32_t header_flags,	/* bitflags in the header                   */
+           file_flags,		/* bitflags for a file record               */
+           frecsize, 		/* size of a file record (bytes)            */
+           precsize, 		/* size of a primary key record (bytes)     */
+           srecsize;		/* size of a secondary key record (bytes)   */
+  off_t    foffset, 		/* offset to file section                   */
+           poffset, 		/* offset to primary key section            */
+           soffset;		/* offset to secondary key section          */
+  char    *fk       = NULL,     /* fixed-width (flen) file name             */
+          *pk       = NULL, 	/* fixed-width (plen) primary key string    */
+          *sk       = NULL,	/* fixed-width (slen) secondary key string  */
+          *buf      = NULL;	/* esl_fgets() growable buffer              */
+  int      n        = 0;	/* esl_fgets() buffer size                  */
+  ESL_PKEY pkey;		/* primary key info from external tmpfile   */
+  ESL_SKEY skey;		/* secondary key info from external tmpfile */
+
+  if (ns->nsecondary > 0 && ns->slen == 0)
+    ESL_EXCEPTION(eslEINVAL, "zero secondary key length: shouldn't happen");
+
+  /* We need fixed-width buffers to get our keys fwrite()'ten in their
+   * full binary lengths; pkey->key (for instance) is not guaranteed
+   * to be allocated for the final maximum plen. We use strncpy(), not
+   * strcpy(), to fill these buffers, because strncpy() pads unused
+   * bytes as NUL's, and valgrind will flag you if you attempt to
+   * write uninitialized bytes from these buffers.
+   */
+  ESL_ALLOC(fk, sizeof(char) * ns->flen);
+  ESL_ALLOC(pk, sizeof(char) * ns->plen);
+  if (ns->nsecondary > 0) ESL_ALLOC(sk, sizeof(char) * ns->slen);
+
+  /* How big is the index? If it's going to be > 2GB, we better have
+   * 64-bit offsets. (2047 (instead of 2048) gives us
+   * some slop room.) If not, abort here.
+   *
+   * aborting here is pretty brutal - we've processed hundreds of
+   * millions of keys for nothing. Ah well.
+   */
+  if (current_newssi_size(ns) >= 2047 && sizeof(off_t) != 8)
+    ESL_XFAIL(eslERANGE, ns->errbuf, "SSI index file file would be > 2G; your filesystem isn't capable of handling it");
+
+  /* Magic-looking numbers come from adding up sizes 
+   * of things in bytes: they match current_newssi_size().
+   */
+  frecsize     = 4*sizeof(uint32_t) + ns->flen;
+  precsize     = 2*sizeof(off_t) + sizeof(uint16_t) + sizeof(uint64_t) + ns->plen;
+  srecsize     = ns->slen + ns->plen;
+  header_flags = 0;
+
+  /* Magic-looking numbers again come from adding up sizes 
+   * of things in bytes: matches current_newssi_size()
+   */
+  foffset = 9*sizeof(uint32_t)+2*sizeof(uint64_t)+sizeof(uint16_t)+3*sizeof(off_t);
+  poffset = foffset + frecsize*ns->nfiles;
+  soffset = poffset + precsize*ns->nprimary;
+  
+  /* Sort the keys.
+   * If external mode, make system calls to UNIX/POSIX "sort" in place, then
+   * open new sorted files for reading thru ptmp and stmp handles.
+   * If internal mode, call qsort. 
+   * 
+   * Note that you'd better force a POSIX locale for the sort; else,
+   * some silly distro (e.g. Mandrake Linux >=8.1) may have specified
+   * LC_COLLATE=en_US, and this'll give a sort "bug" in which it doesn't
+   * sort by byte order.
+   */
+  if (ns->external) 
+    {
+      char cmd[1024];
+
+      /* A last minute security check: make sure we won't overflow
+       * sprintf() with the tmpfile names. They're hardcoded now, so
+       * we know they don't overflow, but they might be configurable 
+       * in the future, and we wouldn't want a security hole to open
+       * up.
+       */
+      if (strlen(ns->ptmpfile) > 256 || strlen(ns->ptmpfile) > 256) 
+	ESL_XEXCEPTION(eslEINVAL, "tmpfile name too long"); 
+
+      fclose(ns->ptmp);
+      ns->ptmp = NULL;	
+      sprintf(cmd, "env LC_ALL=POSIX sort -o %s %s\n", ns->ptmpfile, ns->ptmpfile);
+      if (system(cmd) != 0)                              ESL_XFAIL(eslESYS, ns->errbuf, "external sort of primary keys failed");
+      if ((ns->ptmp = fopen(ns->ptmpfile, "r")) == NULL) ESL_XFAIL(eslESYS, ns->errbuf, "failed to reopen primary key tmp file after sort");
+
+      fclose(ns->stmp);
+      ns->stmp = NULL;
+      sprintf(cmd, "env LC_ALL=POSIX sort -o %s %s\n", ns->stmpfile, ns->stmpfile);
+      if (system(cmd) != 0)                              ESL_XFAIL(eslESYS, ns->errbuf, "external sort of secondary keys failed");
+      if ((ns->stmp = fopen(ns->stmpfile, "r")) == NULL) ESL_XFAIL(eslESYS, ns->errbuf, "failed to reopen secondary key tmp file after sort");
+    }
+  else 
+    {
+      qsort((void *) ns->pkeys, ns->nprimary,   sizeof(ESL_PKEY), pkeysort); 
+      qsort((void *) ns->skeys, ns->nsecondary, sizeof(ESL_SKEY), skeysort); 
+    }
+
+  /* Write the header
+   */
+  if (esl_fwrite_u32(ns->ssifp, v30magic)      != eslOK || 
+      esl_fwrite_u32(ns->ssifp, header_flags)  != eslOK || 
+      esl_fwrite_u32(ns->ssifp, sizeof(off_t)) != eslOK ||
+      esl_fwrite_u16(ns->ssifp, ns->nfiles)    != eslOK ||
+      esl_fwrite_u64(ns->ssifp, ns->nprimary)  != eslOK ||
+      esl_fwrite_u64(ns->ssifp, ns->nsecondary)!= eslOK ||
+      esl_fwrite_u32(ns->ssifp, ns->flen)      != eslOK ||
+      esl_fwrite_u32(ns->ssifp, ns->plen)      != eslOK ||
+      esl_fwrite_u32(ns->ssifp, ns->slen)      != eslOK ||
+      esl_fwrite_u32(ns->ssifp, frecsize)      != eslOK ||
+      esl_fwrite_u32(ns->ssifp, precsize)      != eslOK ||
+      esl_fwrite_u32(ns->ssifp, srecsize)      != eslOK ||
+      esl_fwrite_offset(ns->ssifp, foffset)    != eslOK ||
+      esl_fwrite_offset(ns->ssifp, poffset)    != eslOK ||
+      esl_fwrite_offset(ns->ssifp, soffset)    != eslOK) 
+    ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed");
+
+  /* Write the file section
+   */
+  for (i = 0; i < ns->nfiles; i++)
+    {
+      file_flags = 0;
+      if (ns->bpl[i] > 0 && ns->rpl[i] > 0) file_flags |= eslSSI_FASTSUBSEQ;
+      strncpy(fk, ns->filenames[i], ns->flen);
+
+      if (fwrite(fk, sizeof(char), ns->flen, ns->ssifp) != ns->flen ||
+	  esl_fwrite_u32(ns->ssifp, ns->fileformat[i])  != eslOK    ||
+	  esl_fwrite_u32(ns->ssifp, file_flags)         != eslOK    ||
+	  esl_fwrite_u32(ns->ssifp, ns->bpl[i])         != eslOK    ||
+	  esl_fwrite_u32(ns->ssifp, ns->rpl[i])         != eslOK)
+	ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed");
+    }
+
+  /* Write the primary key section
+   */
+  if (ns->external) 
+    {
+      for (i = 0; i < ns->nprimary; i++) 
+	{
+	  if (esl_fgets(&buf, &n, ns->ptmp)  != eslOK)    ESL_XFAIL(eslESYS, ns->errbuf, "read from sorted primary key tmpfile failed");
+	  if (parse_pkey(buf, &pkey)         != eslOK)    ESL_XFAIL(eslESYS, ns->errbuf, "parse failed for a line of sorted primary key tmpfile failed");
+	  strncpy(pk, pkey.key, ns->plen); /* note: strncpy pads w/ nulls */
+
+	  if (fwrite(pk,sizeof(char),ns->plen,ns->ssifp) != ns->plen ||
+	      esl_fwrite_u16(   ns->ssifp, pkey.fnum)    != eslOK    ||
+	      esl_fwrite_offset(ns->ssifp, pkey.r_off)   != eslOK    ||
+	      esl_fwrite_offset(ns->ssifp, pkey.d_off)   != eslOK    ||
+	      esl_fwrite_i64(   ns->ssifp, pkey.len)     != eslOK)
+	    ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed");
+	}
+    } 
+  else 
+    {
+      for (i = 0; i < ns->nprimary; i++)
+	{
+	  strncpy(pk, ns->pkeys[i].key, ns->plen);
+
+	  if (fwrite(pk,sizeof(char),ns->plen,ns->ssifp)       != ns->plen ||
+	      esl_fwrite_u16(   ns->ssifp, ns->pkeys[i].fnum)  != eslOK    ||
+	      esl_fwrite_offset(ns->ssifp, ns->pkeys[i].r_off) != eslOK    ||
+	      esl_fwrite_offset(ns->ssifp, ns->pkeys[i].d_off) != eslOK    ||
+	      esl_fwrite_i64(   ns->ssifp, ns->pkeys[i].len)   != eslOK)
+	    ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed");
+	}
+    }
+
+
+  /* Write the secondary key section
+   */
+  if (ns->external) 
+    {
+      for (i = 0; i < ns->nsecondary; i++)
+	{
+	  if (esl_fgets(&buf, &n, ns->stmp) != eslOK) ESL_XFAIL(eslESYS, ns->errbuf, "read from sorted secondary key tmpfile failed");
+	  if (parse_skey(buf, &skey)        != eslOK) ESL_XFAIL(eslESYS, ns->errbuf, "parse failed for a line of sorted secondary key tmpfile failed");
+	  strncpy(sk, skey.key,  ns->slen);  // slen > 0 if there are any secondary keys.
+	  strncpy(pk, skey.pkey, ns->plen);
+
+	  if (fwrite(sk, sizeof(char), ns->slen, ns->ssifp) != ns->slen ||
+	      fwrite(pk, sizeof(char), ns->plen, ns->ssifp) != ns->plen) 
+	    ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed");
+	}
+    } 
+  else 
+    {
+      /* if ns->nsecondary=0, ns->slen=0 and sk=NULL */
+      for (i = 0; i < ns->nsecondary; i++)
+	{
+	  strncpy(sk, ns->skeys[i].key,  ns->slen);
+	  strncpy(pk, ns->skeys[i].pkey, ns->plen);
+
+	  if (fwrite(sk, sizeof(char), ns->slen, ns->ssifp) != ns->slen ||
+	      fwrite(pk, sizeof(char), ns->plen, ns->ssifp) != ns->plen)
+	    ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed");
+	} 
+    }
+
+  if (fk  != NULL)       free(fk);
+  if (pk  != NULL)       free(pk);
+  if (sk  != NULL)       free(sk);
+  if (buf != NULL)       free(buf);
+  if (ns->ptmp != NULL)  { fclose(ns->ptmp); ns->ptmp = NULL; }
+  if (ns->stmp != NULL)  { fclose(ns->stmp); ns->stmp = NULL; }
+  return eslOK;
+
+ ERROR:
+  if (fk  != NULL)       free(fk);
+  if (pk  != NULL)       free(pk);
+  if (sk  != NULL)       free(sk);
+  if (buf != NULL)       free(buf);
+  if (ns->ptmp != NULL)  { fclose(ns->ptmp); ns->ptmp = NULL; }
+  if (ns->stmp != NULL)  { fclose(ns->stmp); ns->stmp = NULL; }
+  return status;
+}
+
+/* Function:  esl_newssi_Close()
+ * Synopsis:  Free an <ESL_NEWSSI>.
+ *
+ * Purpose:   Frees a <ESL_NEWSSI>.
+ */
+void
+esl_newssi_Close(ESL_NEWSSI *ns)
+{
+  int i;
+  if (ns == NULL) return;
+
+  if (ns->external == FALSE) 
+    {
+      if (ns->pkeys != NULL) 
+	{
+	  for (i = 0; i < ns->nprimary; i++) 
+	    if (ns->pkeys[i].key != NULL) free(ns->pkeys[i].key);
+	  free(ns->pkeys);       	
+	}
+      if (ns->skeys != NULL) 
+	{
+	  for (i = 0; i < ns->nsecondary; i++) 
+	    {
+	      if (ns->skeys[i].key  != NULL) free(ns->skeys[i].key);
+	      if (ns->skeys[i].pkey != NULL) free(ns->skeys[i].pkey);
+	    }
+	  free(ns->skeys);       
+	}
+    }
+  else 
+    {
+      remove(ns->ptmpfile);
+      remove(ns->stmpfile);
+    }
+
+  if (ns->filenames   != NULL)  
+    {
+      for (i = 0; i < ns->nfiles; i++) 
+	if (ns->filenames[i] != NULL) free(ns->filenames[i]);
+      free(ns->filenames);
+    }
+
+  if (ns->stmp        != NULL)     fclose(ns->stmp);
+  if (ns->stmpfile    != NULL)     free(ns->stmpfile);
+  if (ns->ptmp        != NULL)     fclose(ns->ptmp);
+  if (ns->ptmpfile    != NULL)     free(ns->ptmpfile);
+  if (ns->fileformat  != NULL)     free(ns->fileformat);
+  if (ns->bpl         != NULL)     free(ns->bpl);       
+  if (ns->rpl         != NULL)     free(ns->rpl);       
+  if (ns->ssifile     != NULL)     free(ns->ssifile);
+  if (ns->ssifp       != NULL)     fclose(ns->ssifp);
+  free(ns);
+}
+
+
+
+
+/* current_newssi_size()
+ *
+ * Calculates the size of the current index, in megabytes, in
+ * its disk version (which is essentially the same as the
+ * RAM it takes, modulo some small overhead for the structures
+ * and ptrs).
+ *  
+ * The header costs 10 uint32, 1 uint16, and 3 off_t's: 42 + (12 | 24).
+ * Each file record costs 4 uint32 and flen chars;
+ * each primary key costs us 2 off_t, 1 uint16, 1 uint32, and plen chars;
+ * each sec key costs us  plen+slen chars.
+ */
+static int
+current_newssi_size(const ESL_NEWSSI *ns) 
+{
+  uint64_t frecsize, precsize, srecsize;
+  uint64_t total;
+
+  /* Magic-looking numbers come from adding up sizes 
+   * of things in bytes
+   */
+  frecsize = 4*sizeof(uint32_t) + ns->flen;
+  precsize = 2*sizeof(off_t) + sizeof(uint16_t) + sizeof(uint64_t) + ns->plen;
+  srecsize = ns->slen + ns->plen;
+  total = (9*sizeof(uint32_t)+2*sizeof(uint64_t)+sizeof(uint16_t)+3*sizeof(off_t)+
+	   frecsize * ns->nfiles +      /* file section size                   */
+	   precsize * ns->nprimary +    /* primary key section size            */
+	   srecsize * ns->nsecondary) / /* secondary key section size          */
+          1048576L;
+  return (int) total;
+}
+
+/* activate_external_sort()
+ * 
+ * Switch to external sort mode.
+ * Open file handles for external index files (ptmp, stmp).
+ * Flush current index information to these files.
+ * Free current memory, turn over control to the tmpfiles.
+ *           
+ * Return <eslOK>        on success; 
+ *        <eslENOTFOUND> if we can't open a tmpfile for writing.
+ * 
+ * Throw  <eslEWRITE>    if a write fails.
+ */
+static int
+activate_external_sort(ESL_NEWSSI *ns)
+{
+  int status;
+  int i;
+
+  if (ns->external)                   return eslOK; /* we already are external, fool */
+  
+  if ((ns->ptmp = fopen(ns->ptmpfile, "w")) == NULL) ESL_XFAIL(eslENOTFOUND, ns->errbuf, "Failed to open primary key tmpfile for external sort");
+  if ((ns->stmp = fopen(ns->stmpfile, "w")) == NULL) ESL_XFAIL(eslENOTFOUND, ns->errbuf, "Failed to open secondary key tmpfile for external sort");
+
+  /* Flush the current indices.
+   */
+  ESL_DPRINTF1(("Switching to external sort - flushing new ssi to disk...\n"));
+  for (i = 0; i < ns->nprimary; i++) {
+    if (sizeof(off_t) == 4) {
+      if (fprintf(ns->ptmp, "%s\t%u\t%lu\t%lu\t%lu\n", 
+		  ns->pkeys[i].key, 
+		  (unsigned int)  ns->pkeys[i].fnum,
+		  (unsigned long) ns->pkeys[i].r_off, 
+		  (unsigned long) ns->pkeys[i].d_off, 
+		  (unsigned long) ns->pkeys[i].len) <= 0)
+	ESL_XEXCEPTION_SYS(eslEWRITE, "ssi key tmp file write failed");
+    } else {
+      if (fprintf(ns->ptmp, "%s\t%u\t%llu\t%llu\t%lu\n", 
+		  ns->pkeys[i].key, 
+		  (unsigned int)       ns->pkeys[i].fnum,
+		  (unsigned long long) ns->pkeys[i].r_off, 
+		  (unsigned long long) ns->pkeys[i].d_off, 
+		  (unsigned long)      ns->pkeys[i].len) <= 0)
+	ESL_XEXCEPTION_SYS(eslEWRITE, "ssi key tmp file write failed");
+    }
+  }
+  for (i = 0; i < ns->nsecondary; i++)
+    if (fprintf(ns->stmp, "%s\t%s\n", ns->skeys[i].key, ns->skeys[i].pkey) <= 0)
+      ESL_XEXCEPTION_SYS(eslEWRITE, "ssi alias tmp file write failed");
+  
+  /* Free the memory now that we've flushed our lists to disk
+   */
+  for (i = 0; i < ns->nprimary;   i++) free(ns->pkeys[i].key);
+  for (i = 0; i < ns->nsecondary; i++) free(ns->skeys[i].key);
+  for (i = 0; i < ns->nsecondary; i++) free(ns->skeys[i].pkey);
+  if (ns->pkeys != NULL) free(ns->pkeys);       	
+  if (ns->skeys != NULL) free(ns->skeys);       
+  ns->pkeys    = NULL;
+  ns->skeys    = NULL;
+  ns->external = TRUE;
+  return eslOK;
+
+ ERROR:
+  if (ns->ptmp != NULL) { fclose(ns->ptmp); ns->ptmp = NULL; }
+  if (ns->stmp != NULL) { fclose(ns->stmp); ns->stmp = NULL; }
+  return status;
+}
+
+/* parse_pkey(), parse_skey()
+ * 
+ * Given a <buf> containing a line read from the external
+ * primary-key or secondary-key tmpfile; parse it, and fill in the fields of
+ * <pkey> or <skey>
+ * 
+ * <?key> is a ptr to a structure on the stack. It is assumed
+ * to be in use only transiently.
+ * <?key>'s strings become ptrs into <buf>'s space, so we don't have to
+ * allocate new space for them. This means that the transient <?key> structure
+ * is only usable until <buf> is modified or free'd.
+ * 
+ * Returns <eslOK> on success.
+ * 
+ * Throws  <eslEFORMAT>        on parse error (shouldn't happen; we created it!)
+ *         <eslEINCONCEIVABLE> if we can't deal with off_t's size.     
+ */
+static int
+parse_pkey(char *buf, ESL_PKEY *pkey)
+{
+  int   status;
+  char *s, *tok;
+  
+  s = buf;
+  if (esl_strtok(&s, "\t\n", &(pkey->key)) != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed");
+  if (esl_strtok(&s, "\t\n", &tok)         != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed");
+
+  pkey->fnum = (uint16_t) atoi(tok);
+  if (esl_strtok(&s, "\t\n", &tok)         != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed");
+  if      (sizeof(off_t) == 4) pkey->r_off  = (off_t) strtoul (tok, NULL, 10);
+  else if (sizeof(off_t) == 8) pkey->r_off  = (off_t) strtoull(tok, NULL, 10);
+  else                         ESL_XEXCEPTION(eslEINCONCEIVABLE, "whoa - weird off_t");
+
+  if (esl_strtok(&s, "\t\n", &tok)         != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed");
+  if      (sizeof(off_t) == 4) pkey->d_off  = (off_t) strtoul (tok, NULL, 10);
+  else if (sizeof(off_t) == 8) pkey->d_off  = (off_t) strtoull(tok, NULL, 10);
+  else                         ESL_XEXCEPTION(eslEINCONCEIVABLE, "whoa - weird off_t");
+
+  if (esl_strtok(&s, "\t\n", &tok)         != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed");
+  pkey->len = (uint64_t) strtoull(tok, NULL, 10);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+static int
+parse_skey(char *buf, ESL_SKEY *skey)
+{
+  int   status;
+  char *s;
+  
+  s = buf;
+  if (esl_strtok(&s, "\t\n", &(skey->key))  != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed");
+  if (esl_strtok(&s, "\t\n", &(skey->pkey)) != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed");
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* ordering functions needed for qsort() */
+static int 
+pkeysort(const void *k1, const void *k2)
+{
+  ESL_PKEY *key1;
+  ESL_PKEY *key2;
+  key1 = (ESL_PKEY *) k1;
+  key2 = (ESL_PKEY *) k2;
+  return strcmp(key1->key, key2->key);
+}
+static int 
+skeysort(const void *k1, const void *k2)
+{
+  ESL_SKEY *key1;
+  ESL_SKEY *key2;
+  key1 = (ESL_SKEY *) k1;
+  key2 = (ESL_SKEY *) k2;
+  return strcmp(key1->key, key2->key);
+}
+
+
+/*****************************************************************
+ *# 3. Portable binary i/o
+ *****************************************************************/ 
+
+/* Function:  esl_byteswap()
+ * Synopsis:  Swap between big-endian and little-endian, in place.
+ *
+ * Purpose:   Swap between big-endian and little-endian, in place.
+ */
+void
+esl_byteswap(char *swap, int nbytes)
+{
+  int  x;
+  char byte;
+  
+  for (x = 0; x < nbytes / 2; x++)
+    {
+      byte = swap[nbytes - x - 1];
+      swap[nbytes - x - 1] = swap[x];
+      swap[x] = byte;
+    }
+}
+
+/* Function:  esl_ntoh16()
+ * Synopsis:  Convert 2-byte integer from network-order to host-order.
+ *
+ * Purpose:   Convert a 2-byte integer from network-order to host-order,
+ *            and return it.
+ *            
+ *            <esl_ntoh32()> and <esl_ntoh64()> do the same, but for 4-byte
+ *            and 8-byte integers, respectively.
+ */
+uint16_t
+esl_ntoh16(uint16_t netshort)
+{
+#ifdef WORDS_BIGENDIAN
+  return netshort;
+#else
+  esl_byteswap((char *) &netshort, 2);
+  return netshort;
+#endif
+}
+uint32_t
+esl_ntoh32(uint32_t netlong)
+{
+#ifdef WORDS_BIGENDIAN
+  return netlong;
+#else
+  esl_byteswap((char *) &netlong, 4);
+  return netlong;
+#endif
+}
+uint64_t
+esl_ntoh64(uint64_t net_int64)
+{
+#ifdef WORDS_BIGENDIAN
+  return net_int64;
+#else
+  esl_byteswap((char *) &net_int64, 8);
+  return net_int64;
+#endif
+}
+
+/* Function:  esl_hton16()
+ * Synopsis:  Convert 2-byte integer from host-order to network-order.
+ *
+ * Purpose:   Convert a 2-byte integer from host-order to network-order, and
+ *            return it.
+ * 
+ *            <esl_hton32()> and <esl_hton64()> do the same, but for 4-byte
+ *            and 8-byte integers, respectively.
+ */
+uint16_t
+esl_hton16(uint16_t hostshort)
+{
+#ifdef WORDS_BIGENDIAN
+  return hostshort;
+#else
+  esl_byteswap((char *) &hostshort, 2);
+  return hostshort;
+#endif
+}
+uint32_t
+esl_hton32(uint32_t hostlong)
+{
+#ifdef WORDS_BIGENDIAN
+  return hostlong;
+#else
+  esl_byteswap((char *) &hostlong, 4);
+  return hostlong;
+#endif
+}
+uint64_t
+esl_hton64(uint64_t host_int64)
+{
+#ifdef WORDS_BIGENDIAN
+  return host_int64;
+#else
+  esl_byteswap((char *) &host_int64, 8);
+  return host_int64;
+#endif
+}
+
+
+/* Function:  esl_fread_u16()
+ * Synopsis:  Read network-order integer from a stream.
+ *
+ * Purpose:   Read a 2-byte network-order integer from <fp>, convert to
+ *            host order, leave it in <ret_result>.
+ *            
+ *            <esl_fread_u32()> and <esl_fread_u64()> do the same, but
+ *            for 4-byte and 8-byte integers, respectively.
+ *
+ * Returns:   <eslOK> on success, and <eslFAIL> on <fread()> failure.
+ */
+int
+esl_fread_u16(FILE *fp, uint16_t *ret_result)
+{
+  uint16_t result;
+  if (fread(&result, sizeof(uint16_t), 1, fp) != 1) return eslFAIL;
+  *ret_result = esl_ntoh16(result);
+  return eslOK;
+}
+int
+esl_fread_u32(FILE *fp, uint32_t *ret_result)
+{
+  uint32_t result;
+  if (fread(&result, sizeof(uint32_t), 1, fp) != 1) return eslFAIL;
+  *ret_result = esl_ntoh32(result);
+  return eslOK;
+}
+int
+esl_fread_u64(FILE *fp, uint64_t *ret_result)
+{
+  uint64_t result;
+  if (fread(&result, sizeof(uint64_t), 1, fp) != 1) return eslFAIL;
+  *ret_result = esl_ntoh64(result);
+  return eslOK;
+}
+int
+esl_fread_i16(FILE *fp, int16_t *ret_result)
+{
+  int16_t result;
+  if (fread(&result, sizeof(int16_t), 1, fp) != 1) return eslFAIL;
+  *ret_result = (int16_t) esl_ntoh16((uint16_t) result);
+  return eslOK;
+}
+int
+esl_fread_i32(FILE *fp, int32_t *ret_result)
+{
+  int32_t result;
+  if (fread(&result, sizeof(int32_t), 1, fp) != 1) return eslFAIL;
+  *ret_result = (int32_t) esl_ntoh32((uint32_t) result);
+  return eslOK;
+}
+int
+esl_fread_i64(FILE *fp, int64_t *ret_result)
+{
+  int64_t result;
+  if (fread(&result, sizeof(int64_t), 1, fp) != 1) return eslFAIL;
+  *ret_result = (int64_t) esl_ntoh64((uint64_t) result);
+  return eslOK;
+}
+
+
+/* Function:  esl_fwrite_u16()
+ * Synopsis:  Write an integer to a stream in network-order.
+ *
+ * Purpose:   Write a 2-byte host-order integer <n> to stream <fp>
+ *            in network order.
+ *            
+ *            <esl_fwrite_u32()> and <esl_fwrite_u64()> do the same, but
+ *            for 4-byte and 8-byte integers, respectively.
+ *
+ * Returns:   <eslOK> on success, and <eslFAIL> on <fwrite()> failure.
+ */
+int
+esl_fwrite_u16(FILE *fp, uint16_t n)
+{
+  n = esl_hton16(n);
+  if (fwrite(&n, sizeof(uint16_t), 1, fp) != 1) return eslFAIL;
+  return eslOK;
+}
+int
+esl_fwrite_u32(FILE *fp, uint32_t n)
+{
+  n = esl_hton32(n);
+  if (fwrite(&n, sizeof(uint32_t), 1, fp) != 1) return eslFAIL;
+  return eslOK;
+}
+int
+esl_fwrite_u64(FILE *fp, uint64_t n)
+{
+  n = esl_hton64(n);
+  if (fwrite(&n, sizeof(uint64_t), 1, fp) != 1) return eslFAIL;
+  return eslOK;
+}
+int
+esl_fwrite_i16(FILE *fp, int16_t n)
+{
+  n = (int16_t) esl_hton16((uint16_t) n);
+  if (fwrite(&n, sizeof(int16_t), 1, fp) != 1) return eslFAIL;
+  return eslOK;
+}
+int
+esl_fwrite_i32(FILE *fp, int32_t n)
+{
+  n = (int32_t) esl_hton32((uint32_t) n);
+  if (fwrite(&n, sizeof(int32_t), 1, fp) != 1) return eslFAIL;
+  return eslOK;
+}
+int
+esl_fwrite_i64(FILE *fp, int64_t n)
+{
+  n = (int64_t) esl_hton64((uint64_t) n);
+  if (fwrite(&n, sizeof(int64_t), 1, fp) != 1) return eslFAIL;
+  return eslOK;
+}
+
+
+/* Function:  esl_fread_offset()
+ * Synopsis:  Read an offset portably.
+ *
+ * Purpose:   Read a file offset from the stream <fp> (which would usually
+ *            be a save file), and store it in <ret_offset>.
+ *            
+ *            Offsets may have been saved by a different machine
+ *            than the machine that reads them. The writer and the reader
+ *            may differ in byte order and in width (<sizeof(off_t)>). 
+ *            
+ *            Byte order is dealt with by saving offsets in 
+ *            network byte order, and converting them to host byte order
+ *            when they are read (if necessary). 
+ *            
+ *            Width is dealt with by the <sz> argument, which must be
+ *            either 4 or 8, specifying that the saved offset is a
+ *            32-bit versus 64-bit <off_t>. If the reading host
+ *            <off_t> width matches the <sz> of the writer, no
+ *            problem. If <sz> is 4 but the reading host has 64-bit
+ *            <off_t>'s, this is also no problem; the conversion
+ *            always works. If <sz> is 64 but the reading host has
+ *            only 32-bit <off_t>, we cannot guarantee that we have
+ *            sufficient dynamic range to represent the offset; if
+ *            the stored offset is too large to represent in a 32-bit
+ *            offset, we throw a fatal <eslEINCOMPAT> error.
+ *
+ * Returns:   <eslOK> on success; <eslFAIL> on a read failure.
+ *
+ * Throws:    <eslEINVAL> if <sz> is something other than 4 or 8;
+ *            <eslEINCOMPAT> if the stored offset is too large for
+ *            the reader to represent (the machine that wrote the
+ *            SSI file used 64 bit offsets, the reader uses 32
+ *            bit offsets, and this offset is too large to represent
+ *            in a 32 bit offset).
+ */
+int			
+esl_fread_offset(FILE *fp, int sz, off_t *ret_offset)
+{
+  int       status;
+  uint32_t  x32;
+  uint64_t  x64;
+
+  if      (sz == 8)
+    {
+      if (esl_fread_u64(fp, &x64) != eslOK) { status = eslFAIL; goto ERROR; }
+      if (sizeof(off_t) == 4 && x64 > INT32_MAX) 
+	ESL_XEXCEPTION(eslEINCOMPAT, "can't read 64-bit off_t on this 32-bit host");
+      *ret_offset = (off_t) x64; 
+    }
+  else if (sz == 4)
+    {
+      if (esl_fread_u32(fp, &x32) != eslOK) { status = eslFAIL; goto ERROR; }
+      *ret_offset = (off_t) x32;
+    }
+  else ESL_XEXCEPTION(eslEINVAL, "offsets must be 32 or 64 bits");
+  return eslOK;
+
+ ERROR:
+  *ret_offset = 0;
+  return status;
+}
+
+/* Function:  esl_fwrite_offset()
+ * Synopsis:  Write an offset portably.
+ *
+ * Purpose:   Portably write (save) <offset> to the stream <fp>, in network
+ *            byte order. 
+ *
+ * Returns:   <eslOK> on success; <eslFAIL> on write failure.
+ *
+ * Throws:    <eslEINVAL> if <off_t> is something other than a 32-bit or
+ *            64-bit integer on this machine, in which case we don't know
+ *            how to deal with it portably.
+ */
+int
+esl_fwrite_offset(FILE *fp, off_t offset)
+{
+  if      (sizeof(off_t) == 4) return esl_fwrite_u32(fp, offset);
+  else if (sizeof(off_t) == 8) return esl_fwrite_u64(fp, offset);
+  else ESL_EXCEPTION(eslEINVAL, "off_t is neither 32-bit nor 64-bit");
+  /*UNREACHED*/
+  return eslEINCONCEIVABLE;
+}
+
+
+
+
+/*****************************************************************
+ * 4. Test driver
+ *****************************************************************/ 
+
+/* gcc -g -Wall -o ssi_utest -L. -I. -DeslSSI_TESTDRIVE esl_ssi.c -leasel -lm 
+ * ./ssi_utest
+ */
+#ifdef eslSSI_TESTDRIVE
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_ssi.h"
+#include "esl_random.h"
+#include "esl_randomseq.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-F",        eslARG_INT,      "3",  NULL, NULL,  NULL,  NULL, NULL, "number of test files",                             0 },
+  { "-L",        eslARG_INT,   "1000",  NULL, NULL,  NULL,  NULL, NULL, "max length of test sequences",                     0 },
+  { "-N",        eslARG_INT,     "10",  NULL, NULL,  NULL,  NULL, NULL, "number of test sequences per file",                0 },
+  { "-Q",        eslARG_INT,     "10",  NULL, NULL,  NULL,  NULL, NULL, "number of random queries to retrieve",             0 },
+  { "-s",        eslARG_INT,     "42",  NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                    0 },
+  { "-v",        eslARG_NONE,   NULL,   NULL, NULL,  NULL,  NULL, NULL, "be verbose",                                       0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for ssi module";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go         = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r          = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  ESL_NEWSSI     *ns         = NULL;
+  ESL_SSI        *ssi        = NULL;
+  ESL_SQ         *sq         = NULL;
+  ESL_SQFILE     *sqfp       = NULL;
+  char           *ssifile    = NULL;
+  FILE           *fp         = NULL;
+  int             nfiles     = esl_opt_GetInteger(go, "-F");
+  int             maxL       = esl_opt_GetInteger(go, "-L");
+  int             nseq       = esl_opt_GetInteger(go, "-N");
+  int             nq         = esl_opt_GetInteger(go, "-Q");
+  int             be_verbose = esl_opt_GetBoolean(go, "-v");
+  uint16_t fh;
+  int    i,j;
+  char **sqfile  = NULL;
+  char **seqname = NULL;
+  char **seq     = NULL;
+  int   *seqlen  = NULL;
+  char   query[32];
+  char  *qfile;
+  int    qfmt;
+  off_t  roff;
+  double p[4] = { 0.25, 0.25, 0.25, 0.25 };
+  int    status;
+  
+  /* Create <nfiles> sequence file names. */
+  ESL_DASSERT1(( nfiles > 0 ));
+  ESL_ALLOC(sqfile, sizeof(char *) * nfiles);
+  for (j = 0; j < nfiles; j++)
+    {
+      ESL_ALLOC(sqfile[j], sizeof(char) * 32);
+      sprintf(sqfile[j], "esltmpXXXXXX");
+    } 
+
+  /* Create <nfiles*nseq> sequences with random 
+   * lengths up to 1000.
+   */
+  ESL_ALLOC(seq,    sizeof(char *) * nseq * nfiles);
+  ESL_ALLOC(seqname,sizeof(char *) * nseq * nfiles);
+  ESL_ALLOC(seqlen, sizeof(int)    * nseq * nfiles);
+  for (i = 0; i < nseq*nfiles; i++)
+    {
+      seqlen[i] = 1 + esl_rnd_Roll(r, maxL); /* 1..maxL */
+      ESL_ALLOC(seq[i], sizeof(char) * (seqlen[i]+1));
+      ESL_ALLOC(seqname[i],sizeof(char) * 64);
+
+      esl_rsq_IID(r, "ACGT", p, 4, seqlen[i], seq[i]);
+      sprintf(seqname[i], "seq%d-file%d", i, i/nseq);
+    }
+
+  /* Save them to FASTA files.
+   */
+  for (j = 0; j < nfiles; j++)
+    {
+      if (esl_tmpfile_named(sqfile[j], &fp) != eslOK) esl_fatal("failed to open %s", sqfile[j]);
+      for (i = j*nseq; i < (j+1)*nseq; i++)
+	{
+	  sq = esl_sq_CreateFrom(seqname[i], seq[i], NULL, NULL, NULL);
+	  esl_sqio_Write(fp, sq, eslSQFILE_FASTA, FALSE);
+	  esl_sq_Destroy(sq);
+	}
+      fclose(fp);
+    }
+
+  /* Create an ssi index of all the FASTA files. */
+  if (esl_strdup(sqfile[0], -1, &ssifile)   != eslOK) esl_fatal("esl_strdup() failed");
+  if (esl_strcat(&ssifile,  -1, ".ssi", 4)  != eslOK) esl_fatal("esl_strcat() failed");
+  if (esl_newssi_Open(ssifile, TRUE, &ns)   != eslOK) esl_fatal("new SSI index open failed");
+  if ((sq = esl_sq_Create())                == NULL)  esl_fatal("esl_sq_Create() failed");
+
+  for (j = 0; j < nfiles; j++)
+    {
+      if (esl_sqfile_Open(sqfile[j], eslSQFILE_UNKNOWN, NULL, &sqfp) != eslOK) esl_fatal("failed to open fasta file %s", sqfile[j]);
+      if (esl_newssi_AddFile(ns, sqfile[j], sqfp->format, &fh)       != eslOK) esl_fatal("esl_newssi_AddFile() failed");
+      while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+	{
+	  if (be_verbose) printf("%16s  %ld  %ld  %" PRIi64 "\n", sq->name, (long) sq->roff, (long) sq->doff, sq->L);
+	  if (esl_newssi_AddKey(ns, sq->name, fh, sq->roff, sq->doff, sq->L) != eslOK) esl_fatal("esl_newssi_AddKey() failed");
+	  esl_sq_Reuse(sq);
+	}
+      if (status != eslEOF) esl_fatal("sequence read failure");
+      esl_sqfile_Close(sqfp);
+    }
+  esl_sq_Destroy(sq);
+
+  /* Save the SSI index to a file.
+   */
+  esl_newssi_Write(ns);
+  esl_newssi_Close(ns);
+  
+  /* Open the SSI index - now we'll use it to retrieve
+   * <nq> random sequences.
+   */
+  if (esl_ssi_Open(ssifile, &ssi) != eslOK) esl_fatal("failed to open ssi index");
+  sq = esl_sq_Create();
+  while (nq--)
+    {
+      /* Choose a seq and file */
+      i = esl_rnd_Roll(r, nseq*nfiles);
+      j = i/nseq;
+      sprintf(query, "seq%d-file%d", i, j);
+
+      /* Retrieve it */
+      status = esl_ssi_FindName(ssi, query, &fh, &roff, NULL, NULL);
+      if (status != eslOK) esl_fatal("didn't find %s in index", query);
+
+      status = esl_ssi_FileInfo(ssi, fh, &qfile, &qfmt);      
+      if (status != eslOK) esl_fatal("didn't locate file info for %s", query);
+
+      if (esl_sqfile_Open(qfile, qfmt, NULL, &sqfp) != eslOK)
+	esl_fatal("failed to open fasta file %s", qfile);
+      esl_sqfile_Position(sqfp, roff);
+      if (esl_sqio_Read(sqfp, sq) != eslOK) esl_fatal("failed to read seq %s", query);
+
+      /* Check that it's the right one */
+      if (strcmp(sq->name, query) != 0)  esl_fatal("sought %s, retrieved %s", query, sq->name);
+      if (sq->n != seqlen[i])            esl_fatal("wrong sequence length retrieved");
+      if (strcmp(sq->seq,  seq[i]) != 0) esl_fatal("unexpected sequence retrieved");
+      if (strcmp(qfile, sqfile[j]) != 0) esl_fatal("file names %s and %s differ", qfile, sqfile[j]);
+
+      esl_sq_Reuse(sq);
+      esl_sqfile_Close(sqfp);
+    }
+  
+  for (j = 0; j < nfiles; j++) remove(sqfile[j]);
+  remove(ssifile);
+  status = eslOK;
+
+  /* flowthrough is safe: garbage collection only below. */
+ ERROR:
+  free(ssifile);
+  esl_sq_Destroy(sq);
+  esl_ssi_Close(ssi);
+  esl_randomness_Destroy(r);
+  if (seqlen) free(seqlen);
+  esl_Free2D((void **) seqname, nseq*nfiles);
+  esl_Free2D((void **) seq,     nseq*nfiles);
+  esl_Free2D((void **) sqfile, nfiles);
+  esl_getopts_Destroy(go);
+  return status;
+}
+#endif /*eslSSI_TESTDRIVE*/
+
+
+
+/*****************************************************************
+ * 5. Example code.
+ ****************************************************************/
+#ifdef eslSSI_EXAMPLE
+/* gcc -o example -g -Wall -DeslSSI_EXAMPLE esl_ssi.c easel.c
+ * esl-shuffle -o foo.fa -N 1000 -G --amino -L 400 
+ * ./example foo.fa
+ */
+/*::cexcerpt::ssi_example::begin::*/
+#include <stdio.h>
+#include "easel.h"
+#include "esl_ssi.h"
+
+int main(int argc, char **argv)
+{
+  ESL_NEWSSI *ns;
+  char    *fafile;              /* name of FASTA file                   */
+  FILE    *fp;                  /* opened FASTA file for reading        */
+  char    *ssifile;             /* name of SSI file                     */
+  uint16_t fh;                  /* file handle SSI associates w/ fafile */
+  char    *buf = NULL;          /* growable buffer for esl_fgets()      */
+  int      n   = 0;             /* length of buf                        */
+  char    *s, *seqname;		
+  off_t    seq_offset;
+  int      status;
+
+  /* Open a new SSI index named <fafile>.ssi */
+  fafile = argv[1];
+  esl_strdup(fafile,   -1, &ssifile);  
+  esl_strcat(&ssifile, -1, ".ssi", 4); 
+  status = esl_newssi_Open(ssifile, FALSE, &ns);
+  if      (status == eslENOTFOUND)   esl_fatal("failed to open SSI index %s", ssifile);
+  else if (status == eslEOVERWRITE)  esl_fatal("SSI index %s already exists; delete or rename it", ssifile);
+  else if (status != eslOK)          esl_fatal("failed to create a new SSI index");
+
+  /* Collect the sequence names from a FASTA file into an index */
+  if ((fp = fopen(fafile, "r"))              == NULL)  esl_fatal("failed to open %s", fafile);
+  if (esl_newssi_AddFile(ns, fafile, 1, &fh) != eslOK) esl_fatal("failed to add %s to index: %s", fafile, ns->errbuf);
+  seq_offset = ftello(fp);
+  while (esl_fgets(&buf, &n, fp) == eslOK)
+    {
+      if (*buf == '>') {
+	s = buf+1;                           /* skip past >                */
+	esl_strtok(&s, " \t\n", &seqname);   /* name = 1st token on > line */
+	if (esl_newssi_AddKey(ns, seqname, fh, seq_offset, 0, 0) != eslOK)
+	  esl_fatal("failed to add key %s to index: %s", seqname, ns->errbuf);
+      }
+      seq_offset = ftello(fp);				 
+    }
+  free(buf);
+  fclose(fp);
+
+  /* Save the index to disk */
+  status = esl_newssi_Write(ns);
+  if      (status == eslERANGE)   esl_fatal("SSI index file size exceeds maximum allowed by your filesystem");
+  else if (status == eslESYS)     esl_fatal("SSI index sort failed: %s", ns->errbuf);
+  else if (status != eslOK)       esl_fatal("SSI index save failed: %s", ns->errbuf);
+  esl_newssi_Close(ns);  
+  free(ssifile);
+  return 0;
+}
+/*::cexcerpt::ssi_example::end::*/
+#endif /*eslSSI_EXAMPLE*/
+
+
+#ifdef eslSSI_EXAMPLE2
+/* gcc -o example2 -g -Wall -DeslSSI_EXAMPLE2 esl_ssi.c easel.c
+ * ./example2 random77 foo.fa.ssi 
+ */
+/*::cexcerpt::ssi_example2::begin::*/
+#include <stdio.h>
+#include "easel.h"
+#include "esl_ssi.h"
+
+int main(int argc, char **argv)
+{
+  ESL_SSI *ssi;
+  char    *seqname;             /* name of sequence to retrieve         */
+  char    *ssifile;             /* name of SSI file                     */
+  uint16_t fh;                  /* file handle SSI associates w/ fafile */
+  char    *fafile;              /* name of FASTA file                   */
+  int      fmt;                 /* format code (1, in this example)     */
+  off_t    offset;              /* disk offset of seqname in fafile     */
+  FILE    *fp;                  /* opened FASTA file for reading        */
+  char    *buf = NULL;          /* growable buffer for esl_fgets()      */
+  int      n = 0;               /* size of buffer                       */
+
+  seqname = argv[1];
+  ssifile = argv[2];
+
+  if (esl_ssi_Open(ssifile, &ssi)                              != eslOK) esl_fatal("open failed");
+  if (esl_ssi_FindName(ssi, seqname, &fh, &offset, NULL, NULL) != eslOK) esl_fatal("find failed");
+  if (esl_ssi_FileInfo(ssi, fh, &fafile, &fmt)                 != eslOK) esl_fatal("info failed");
+  /* you can't close the ssi file yet - fafile is pointing into it! */
+
+  if ((fp = fopen(fafile, "r"))     == NULL)  esl_fatal("failed to open %s", fafile);
+  if (fseeko(fp, offset, SEEK_SET)  != 0)     esl_fatal("failed to position %s", fafile);
+  if (esl_fgets(&buf, &n, fp)       != eslOK) esl_fatal("failed to get name/desc line");
+  do {
+    printf("%s", buf); 
+  } while (esl_fgets(&buf, &n, fp) == eslOK && *buf != '>');
+  
+  esl_ssi_Close(ssi);  
+  fclose(fp);  
+  free(buf);
+  return 0;
+}
+/*::cexcerpt::ssi_example2::end::*/
+#endif /*eslSSI_EXAMPLE2*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_ssi.h b/esl_ssi.h
new file mode 100644
index 0000000..12219da
--- /dev/null
+++ b/esl_ssi.h
@@ -0,0 +1,163 @@
+/* Simple sequence indices: 
+ * Fast sequence record lookup in large files by keywords, such
+ * as names or accessions.
+ */
+#ifndef eslSSI_INCLUDED
+#define eslSSI_INCLUDED
+#ifdef eslAUGMENT_SSI
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_STDINT_H	
+#include <stdint.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+#define eslSSI_MAXFILES 32767	     /* 2^15-1 */
+#define eslSSI_MAXKEYS  2147483647L  /* 2^31-1 */
+#define eslSSI_MAXRAM   256	     /* >256MB indices trigger external sort */
+
+#ifndef HAVE_FSEEKO
+#define fseeko fseek
+#define ftello ftell
+#endif 
+
+/* ESL_SSI
+ * Using an existing SSI index file.
+ */ 
+typedef struct {
+  FILE      *fp;              /* open SSI index file                 */
+  uint32_t   flags;	      /* optional behavior flags             */
+  uint32_t   offsz;	      /* sizeof(off_t)'s in the SSI file     */
+  uint16_t   nfiles;          /* number of files = 16 bit int        */
+  uint64_t   nprimary;        /* number of primary keys              */
+  uint64_t   nsecondary;      /* number of secondary keys            */
+  uint32_t   flen;            /* length of filenames (inc '\0')      */
+  uint32_t   plen;            /* length of primary keys (inc '\0')   */
+  uint32_t   slen;            /* length of secondary keys (inc '\0') */
+  uint32_t   frecsize;        /* # bytes in a file record            */
+  uint32_t   precsize;        /* # bytes in a primary key record     */
+  uint32_t   srecsize;        /* # bytes in a secondary key record   */
+  off_t      foffset;         /* disk offset, start of file records  */
+  off_t      poffset;         /* disk offset, start of pri key recs  */
+  off_t      soffset;         /* disk offset, start of sec key recs  */
+
+
+  /* File information:  */
+  char     **filename;        /* list of file names [0..nfiles-1]    */
+  uint32_t  *fileformat;      /* file formats                        */
+  uint32_t  *fileflags;	      /* optional per-file behavior flags    */
+  uint32_t  *bpl;             /* bytes per line in file              */
+  uint32_t  *rpl;             /* residues per line in file           */
+} ESL_SSI;
+
+/* Flags for the <ssi->fileflags> bit vectors. */
+#define eslSSI_FASTSUBSEQ   (1<<0)    /* we can do fast subseq lookup calculations on this file */
+
+
+/* ESL_NEWSSI
+ * Used to create a new SSI index.
+ */
+typedef struct {		/* Primary key data: */
+  char      *key;               /* key name          */
+  uint16_t   fnum;		/* file number       */
+  off_t      r_off;		/* record offset     */
+  off_t      d_off;		/* data offset       */
+  int64_t    len;		/* sequence length   */
+} ESL_PKEY;
+
+typedef struct {		/* Secondary key data: */
+  char        *key;             /* secondary key name  */
+  char        *pkey;            /* primary key name    */ 
+} ESL_SKEY;
+
+typedef struct {
+  char       *ssifile;		/* name of the SSI file we're creating    */
+  FILE       *ssifp;		/* open SSI file being created            */
+  int         external;	        /* TRUE if pkeys and skeys are on disk    */
+  int         max_ram;	        /* threshold in MB to trigger extern sort */
+
+  char      **filenames;
+  uint32_t   *fileformat;
+  uint32_t   *bpl;
+  uint32_t   *rpl;		
+  uint32_t    flen;		/* length of longest filename, inc '\0' */
+  uint16_t    nfiles;		/* can store up to 2^15-1 (32767) files */
+  
+  ESL_PKEY   *pkeys;
+  uint32_t    plen;	        /* length of longest pkey, including '\0'    */
+  uint64_t    nprimary;		/* can store up to 2^63-1 = 9.2e18 keys      */
+  char       *ptmpfile;		/* primary key tmpfile name, for extern sort */
+  FILE       *ptmp;	        /* handle on open ptmpfile */
+
+  ESL_SKEY   *skeys;
+  uint32_t    slen;        	/* length of longest skey, including '\0' */
+  uint64_t    nsecondary;
+  char       *stmpfile;		/* secondary key tmpfile name, for extern sort */
+  FILE       *stmp;	        /* handle on open ptmpfile */
+
+  char        errbuf[eslERRBUFSIZE];
+} ESL_NEWSSI;
+
+
+#define eslSSI_FCHUNK  16	/* chunk size for file name reallocation */
+#define eslSSI_KCHUNK  128	/* and for key reallocation              */
+
+
+/* 1. Using (reading) SSI indices */
+extern int  esl_ssi_Open(const char *filename, ESL_SSI **ret_ssi);
+extern void esl_ssi_Close(ESL_SSI *ssi);
+extern int  esl_ssi_FindName(ESL_SSI *ssi, const char *key,
+			     uint16_t *ret_fh, off_t *ret_roff, off_t *opt_doff, int64_t *opt_L);
+extern int  esl_ssi_FindNumber(ESL_SSI *ssi, int64_t nkey,
+			       uint16_t *opt_fh, off_t *opt_roff, off_t *opt_doff, int64_t *opt_L, char **opt_pkey);
+extern int  esl_ssi_FindSubseq(ESL_SSI *ssi, const char *key, int64_t requested_start,
+			       uint16_t *ret_fh, off_t *ret_roff, off_t *ret_doff, int64_t *ret_L, int64_t *ret_actual_start);
+extern int  esl_ssi_FileInfo(ESL_SSI *ssi, uint16_t fh, char **ret_filename, int *ret_format);
+
+
+
+/* 2. Creating (writing) SSI indices. */
+extern int  esl_newssi_Open(const char *ssifile, int allow_overwrite, ESL_NEWSSI **ret_newssi);
+extern int  esl_newssi_AddFile  (ESL_NEWSSI *ns, const char *filename, int fmt, uint16_t *ret_fh);
+extern int  esl_newssi_SetSubseq(ESL_NEWSSI *ns, uint16_t fh, uint32_t bpl, uint32_t rpl);
+extern int  esl_newssi_AddKey   (ESL_NEWSSI *ns, const char *key, uint16_t fh, off_t r_off, off_t d_off, int64_t L);
+extern int  esl_newssi_AddAlias (ESL_NEWSSI *ns, const char *alias, const char *key);
+extern int  esl_newssi_Write    (ESL_NEWSSI *ns);
+extern void esl_newssi_Close    (ESL_NEWSSI *ns);
+
+
+/* 3. Portable binary i/o. */
+extern void     esl_byteswap(char *swap, int nbytes);
+extern uint16_t esl_ntoh16(uint16_t netshort);
+extern uint32_t esl_ntoh32(uint32_t netlong);
+extern uint64_t esl_ntoh64(uint64_t net_int64);
+extern uint16_t esl_hton16(uint16_t hostshort);
+extern uint32_t esl_hton32(uint32_t hostlong);
+extern uint64_t esl_hton64(uint64_t host_int64);
+extern int      esl_fread_u16(FILE *fp, uint16_t *ret_result);
+extern int      esl_fread_u32(FILE *fp, uint32_t *ret_result);
+extern int      esl_fread_u64(FILE *fp, uint64_t *ret_result);
+extern int      esl_fread_i16(FILE *fp, int16_t  *ret_result);
+extern int      esl_fread_i32(FILE *fp, int32_t  *ret_result);
+extern int      esl_fread_i64(FILE *fp, int64_t  *ret_result);
+extern int      esl_fwrite_u16(FILE *fp, uint16_t n);
+extern int      esl_fwrite_u32(FILE *fp, uint32_t n);
+extern int      esl_fwrite_u64(FILE *fp, uint64_t n);
+extern int      esl_fwrite_i16(FILE *fp, int16_t  n);
+extern int      esl_fwrite_i32(FILE *fp, int32_t  n);
+extern int      esl_fwrite_i64(FILE *fp, int64_t  n);
+extern int	esl_fread_offset(FILE *fp, int mode, off_t *ret_offset);
+extern int      esl_fwrite_offset(FILE *fp, off_t offset);
+#endif /* eslAUGMENT_SSI*/
+#ifndef eslAUGMENT_SSI
+typedef void ESL_SSI;
+typedef void ESL_NEWSSI;
+#endif
+#endif /* eslSSI_INCLUDED */
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_ssi.tex b/esl_ssi.tex
new file mode 100644
index 0000000..a719fc7
--- /dev/null
+++ b/esl_ssi.tex
@@ -0,0 +1,451 @@
+The \eslmod{ssi} module is for creating and using ``SSI''
+(sequence/subsequence index) files. SSI indexes flatfile databases by
+names and/or accessions, enabling fast sequence record retrieval. 
+
+An SSI index is a binary file that stores sequence names or accessions
+as \emph{keys}, associating them with information about the sequence
+record, including its location (file name and disk offset), so that it
+can be looked up rapidly. It differentiates between \emph{primary
+keys} and \emph{secondary keys} (aliases).  There is one and only one
+primary key per record. There can be more than one secondary key
+(alias) per sequence. Both primary and secondary keys must be unique
+identifiers (no two records have the same key). For example, a program
+for sequence retrieval might create an SSI index with accessions as
+primary keys and names as secondary keys (or the other way around).
+
+Records can also be retrieved by number from the list of primary keys.
+This may be useful for distributed data-parallel applications, which
+can use SSI to rapidly position individual processes at different
+record ranges in a flatfile database.
+
+A single SSI file can index a sequence database that consists of more
+than one individual sequence file. For example, the GenBank database
+is distributed as a large number of flatfiles; one SSI file can index
+them all.
+
+When records are consistently formatted, SSI indices can allow a
+specific subsequence in a sequence record to be identified
+rapidly. This is useful when the sequence records are very large, such
+as whole assembled genomes or chromosomes.
+
+Although SSI indices are designed with sequence databases in mind, SSI
+can also be used to index records in other types of flatfile
+databases. For example, HMMER uses SSI to index HMM databases, and the
+\eslmod{msa} module can use SSI to index Stockholm format multiple
+alignment databases like Pfam and Rfam.
+
+SSI can handle large amounts of data. It is capable of indexing tens
+of thousands of files and hundreds of trillions of sequence records.
+The lengths of primary keys, secondary keys, or filenames are
+effectively unlimited, and individual sequence records may be many
+trillions of residues long, orders of magnitude larger than the
+largest complete chromosomes. SSI indexing is effectively limited only
+by the size of the SSI index file itself (up to 8 exabytes, on 64-bit
+filesystems).
+
+Binary SSI indices are portable between different
+machines.\footnote{The sole exception is that SSI indices built for
+64-bit filesystems might not be readable on a fully 32-bit
+filesystem.}
+
+Table~\ref{tbl:ssi_api} lists the functions in the \eslmod{ssi} API.
+A \eslmod{ESL\_SSI} object is used for reading an index, and a
+\eslmod{ESL\_NEWSSI} object is used for creating one. There is also a
+set of functions for portable binary file i/o.
+
+
+% Table generated by autodoc -t esl_ssi.c (so don't edit here, edit esl_ssi.c:)
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\apisubhead{Using (reading) an SSI index.}\\
+\hyperlink{func:esl_ssi_Open()}{\ccode{esl\_ssi\_Open()}} & Open an SSI index as an \ccode{ESL\_SSI}.\\
+\hyperlink{func:esl_ssi_FindName()}{\ccode{esl\_ssi\_FindName()}} & Look up a primary or secondary key.\\
+\hyperlink{func:esl_ssi_FindNumber()}{\ccode{esl\_ssi\_FindNumber()}} & Look up the n'th primary key.\\
+\hyperlink{func:esl_ssi_FindSubseq()}{\ccode{esl\_ssi\_FindSubseq()}} & Look up a specific subsequence's start.\\
+\hyperlink{func:esl_ssi_FileInfo()}{\ccode{esl\_ssi\_FileInfo()}} & Retrieve a file name and format code.\\
+\hyperlink{func:esl_ssi_Close()}{\ccode{esl\_ssi\_Close()}} & Close an SSI index.\\
+\apisubhead{Creating (writing) new SSI files.}\\
+\hyperlink{func:esl_newssi_Open()}{\ccode{esl\_newssi\_Open()}} & Open a new \ccode{ESL\_NEWSSI}.\\
+\hyperlink{func:esl_newssi_AddFile()}{\ccode{esl\_newssi\_AddFile()}} & Add a filename to a growing index.\\
+\hyperlink{func:esl_newssi_SetSubseq()}{\ccode{esl\_newssi\_SetSubseq()}} & Declare that file is suitable for fast subseq lookup.\\
+\hyperlink{func:esl_newssi_AddKey()}{\ccode{esl\_newssi\_AddKey()}} & Add a primary key to a growing index.\\
+\hyperlink{func:esl_newssi_AddAlias()}{\ccode{esl\_newssi\_AddAlias()}} & Add a secondary key (alias) to a growing index.\\
+\hyperlink{func:esl_newssi_Write()}{\ccode{esl\_newssi\_Write()}} & Save a new index to an SSI file.\\
+\hyperlink{func:esl_newssi_Close()}{\ccode{esl\_newssi\_Destroy()}} & Close an \ccode{ESL\_NEWSSI}.\\
+\apisubhead{Portable binary i/o}\\
+\hyperlink{func:esl_byteswap()}{\ccode{esl\_byteswap()}} & Description.\\
+\hyperlink{func:esl_ntoh16()}{\ccode{esl\_ntoh16()}} & Description.\\
+\hyperlink{func:esl_hton16()}{\ccode{esl\_hton16()}} & Description.\\
+%\hyperlink{func:esl_fread_i16()}{\ccode{esl\_fread\_i16()}} & Description.\\
+%\hyperlink{func:esl_fwrite_i16()}{\ccode{esl\_fwrite\_i16()}} & Description.\\
+\ccode{esl\_fread\_i16()} & Description.\\
+\ccode{esl\_fwrite\_i16()} & Description.\\
+\hyperlink{func:esl_fread_offset()}{\ccode{esl\_fread\_offset()}} & Description.\\
+\hyperlink{func:esl_fwrite_offset()}{\ccode{esl\_fwrite\_offset()}} & Description.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{ssi} API.}
+\label{tbl:ssi_api}
+\end{table}
+
+\subsection{Example: creating an SSI index}
+
+Figure~\ref{fig:ssi_example} shows a program that creates an SSI index
+for a FASTA sequence file, in which sequence records start with a line
+like:
+\begin{cchunk}
+ >SEQ_NAME  Rest of the line is a free-text description.
+\end{cchunk}
+
+\begin{figure}
+\input{cexcerpts/ssi_example}
+\caption{An example of indexing the sequence records in a FASTA file.}
+\label{fig:ssi_example}
+\end{figure}
+
+\begin{itemize}
+\item A new index is created (\ccode{esl\_newssi\_Open()}).  You can
+      name an SSI index anything you want, but for an index of a
+      single file, \Easel\ generally defaults to assuming an
+      \ccode{.ssi} suffix is appended to the filename. That's what
+      the example does here.
+
+\item Each file to be indexed is added to the index by a call to
+      \ccode{esl\_newssi\_AddFile()}. This returns a \emph{file handle}
+      (\ccode{fh}) that you will need when you add primary keys. In
+      this example, there is only one file and only one file handle.
+
+\item You need to determine the disk offset at the exact beginning of
+      each sequence record. You retrieve your current position in the
+      file using an \ccode{ftello()} call.
+
+\item You add each primary key to the index with a
+      \ccode{esl\_newssi\_AddKey()} call. You provide the handle of the
+      file that key is in, and the offset to the start of this key's
+      sequence record.
+
+\item The \ccode{esl\_fgets()} function (part of the \eslmod{easel} 
+      foundation module) is a way of reading text files line by line, 
+      no matter how long each line might be: \ccode{esl\_fgets()}
+      reallocates its buffer as needed.
+
+\item \ccode{esl\_newssi\_Write()} saves the index to an open file.
+
+\item Finally, the index structure is freed by
+      \ccode{esl\_newssi\_Close()}.
+\end{itemize}
+
+To compile and run the program, given a FASTA file \ccode{foo.fa} that
+you provide:
+
+\begin{cchunk}
+  % cc -o example -DeslSSI_EXAMPLE esl_ssi.c -leasel -lm
+  % ./example foo.fa
+\end{cchunk}
+
+This will create a new SSI file called \ccode{foo.fa.ssi}.
+
+\subsection{An example of using an SSI index}
+
+Figure~\ref{fig:ssi_example2} shows a program that retrieves a FASTA
+sequence record by its name, using an SSI index.
+
+\begin{figure}
+\input{cexcerpts/ssi_example2}
+\caption{Example of using an SSI index to retrieve a sequence by name from a FASTA
+  file.}
+\label{fig:ssi_example2}
+\end{figure}
+
+\begin{itemize}
+\item \ccode{esl\_ssi\_Open()} opens the SSI index file.
+
+\item \ccode{esl\_ssi\_FindName()} looks up the record by its name.
+      Primary keys are checked first, then secondary keys. If it is
+      found, \ccode{fh} contains a file handle (what file it's in),
+      and \ccode{offset} contains the position of the desired record
+      in that file.
+
+\item The file handle \ccode{fh} is looked up in the file index with
+      \ccode{esl\_ssi\_FileInfo()}, and the name of the file and a
+      format code are returned. The format code is useful if you need
+      to hand the filename off to different kinds of file parsers,
+      depending on what file type it is. (SSI can index files in
+      heterogenous formats.)
+
+\item After that, you use the retrieved information however you need,
+      independent of the SSI index. The example emphasizes this, by
+      freeing the SSI index immediately with \ccode{esl\_ssi\_Destroy()}
+      after it knows \ccode{fafile} and \ccode{offset}. The example
+      opens the file, positions the disk with \ccode{fseeko()}, and
+      reads a sequence record out of it one line at a time, until it
+      reaches EOF or the start of the next sequence record.
+\end{itemize}
+
+
+
+
+
+\subsection{SSI file format} 
+
+There are four sections to the SSI file:
+\begin{sreitems}{\textbf{Secondary keys}}
+\item[\textbf{Header}] 
+Contains a magic number indicating SSI version number, followed by
+information about the number and sizes of items in the index.
+
+\item[\textbf{Files}]
+Contains one or more \emph{file records}, one per sequence file that's
+indexed. These contain information about the individual files.
+
+\item[\textbf{Primary keys}]
+Contains one or more \emph{primary key records}, one per primary key.
+
+\item[\textbf{Secondary keys}]
+Contains one or more \emph{secondary key records}, one per secondary key.
+\end{sreitems}
+
+All numeric quantities are stored as fixed-width unsigned integers in
+network (bigendian) order, for crossplatform portability of the index
+files, using types \ccode{uint16\_t}, \ccode{uint32\_t}, and
+\ccode{uint64\_t}.\footnote{These types are available on C99-compliant
+systems. On other systems, \Easel\ automatically defines appropriate
+substitutes at configuration time.}  Values may need to be cast to
+signed quantities elsewhere in \Easel, so only half of their dynamic
+range is valid (e.g. 0..32,767 for values of type \ccode{uint16\_t};
+0..2,146,483,647 (2 billion) for \ccode{uint32\_t}; and 0..9.22e18 (9
+million trillion) for \ccode{uint64\_t}).
+
+File offsets (type \ccode{off\_t}) are assumed to be either 32-bit or
+64-bit signed integers. Easel uses 64-bit offsets if at all possible
+on your system. The size of \ccode{off\_t} for the system that created
+the SSI file is stored in the SSI header, for portability to other
+systems that try to read the SSI file.
+
+\subsubsection{Header section}
+
+The header section contains:
+
+\vspace{1em}
+\begin{tabular}{llrr}
+Variable          & Description                                      & Bytes      & Type \\\hline
+\ccode{magic}      & SSI version magic number.                       &  4         & \ccode{uint32\_t}\\
+\ccode{flags}      & Optional behavior flags (see below)             &  4         & \ccode{uint32\_t}\\
+\ccode{offsz}      & \ccode{off\_t} size on system that made index   &  4         & \ccode{uint32\_t}\\
+\ccode{nfiles}     & Number of files in file section.                &  2         & \ccode{uint16\_t}\\
+\ccode{nprimary}   & Number of primary keys indexed.                 &  8         & \ccode{uint64\_t}\\
+\ccode{nsecondary} & Number of secondary keys indexed.               &  8         & \ccode{uint64\_t}\\
+\ccode{flen}       & Length of filenames (incl. '\verb+\0+')         &  4         & \ccode{uint32\_t}\\
+\ccode{plen}       & Length of primary key names (incl. '\verb+\0+') &  4         & \ccode{uint32\_t}\\
+\ccode{slen}       & Length of sec. key names (incl. '\verb+\0+')    &  4         & \ccode{uint32\_t}\\
+\ccode{frecsize}   & \# of bytes in a file record                    &  4         & \ccode{uint32\_t}\\
+\ccode{precsize}   & \# of bytes in a primary key record             &  4         & \ccode{uint32\_t}\\
+\ccode{srecsize}   & \# of bytes in a sec. key record                &  4         & \ccode{uint32\_t}\\
+\ccode{foffset}    & disk offset, start of file records              &  \dag      & \ccode{off\_t}\\
+\ccode{poffset}    & disk offset, start of primary key recs          &  \dag      & \ccode{off\_t}\\
+\ccode{soffset}    & disk offset, start of sec. key records          &  \dag      & \ccode{off\_t}\\
+\end{tabular}
+\vspace{1em}
+
+The \ccode{flags} field is currently unused. It is stored for possible
+future use, for any optional behaviors that may need to be
+implemented.
+
+The reason to explicitly record various record sizes
+(\ccode{frecsize}, \ccode{precsize}, \ccode{srecsize}) and index file
+positions (\ccode{foffset}, \ccode{poffset}, \ccode{soffset}) is to
+allow for future extensions. Using explicit offsets means we can add
+more fields in future versions of SSI without breaking older SSI
+parsers. The format is meant to be both forwards- and
+backwards-compatible.
+
+\subsubsection{File section}
+
+The file section consists of \ccode{nfiles} file records. Each record
+is \ccode{frecsize} bytes long, and contains:
+
+\vspace{1em}
+\begin{tabular}{llrr}
+Variable & Description                                       & Bytes & Type \\\hline
+\ccode{filename} & Name of file (possibly including full path)       & \ccode{flen} & \ccode{char *}\\
+\ccode{format}   & Format code for file                              & 4    & \ccode{uint32\_t} \\
+\ccode{flags}    & Optional behavior flags                           & 4    & \ccode{uint32\_t} \\
+\ccode{bpl}      & Bytes per sequence data line                      & 4    & \ccode{uint32\_t} \\
+\ccode{rpl}      & Residues per sequence data line                   & 4    & \ccode{uint32\_t} \\\hline
+\end{tabular}
+\vspace{1em}
+
+When a SSI file is written, \ccode{frecsize} is equal to the sum of
+the sizes above.  When a SSI file is read by a parser, it is possible
+that \ccode{frecsize} is larger than the parser expects, if the parser
+is expecting an older version of the SSI format, because additional
+fields might be present. The parser will only try to parse data up to
+the \ccode{frecsize} it expected to see, but still knows the (possibly
+larger) \ccode{frecsize} that is operative in this SSI file, for
+purposes of skipping around in the index file.
+
+An SSI index might reside in the same directory as the data file(s) it
+indexes, so \ccode{filename} might be relative to the location of the
+SSI index. Alternatively, \ccode{filename} might be a full path. These
+semantics are not enforced by the \eslmod{ssi} module. Rather, this is
+an issue for an SSI-enabled application to define for
+itself. SSI-enabled applications would typically include program(s)
+for creating indices and program(s) for using them. Different
+applications might employ different conventions for where the indices
+are expected to be, relative to the sequence files, so long as that
+convention is consistently applied by both index creator and index
+user.
+
+Similarly, the \eslmod{ssi} module does not specify the meaning of the
+\ccode{format} code. An SSI-enabled application may use this field to
+associate any useful format code (or indeed, any other number) with
+each indexed file. A typical use, though, would be sequence file
+format codes like \ccode{eslSQFILE\_FASTA} or
+\ccode{eslMSAFILE\_STOCKHOLM} from the \eslmod{sqio} or \eslmod{msa}
+modules.
+
+Only one possible optional behavior flag is currently defined:
+
+\vspace{1em}
+\begin{tabular}{lll}
+Flag             & Value& Note\\ \hline
+\ccode{eslSSI\_FASTSUBSEQ} & $1 \ll 0$ & Fast subseq retrieval is possible for this file.\\\hline
+\end{tabular}
+\vspace{1em}
+
+When \ccode{eslSSI\_FASTSUBSEQ} is set, \ccode{bpl} and \ccode{rpl}
+are nonzero. These can then be used to calculate the offset of
+subsequence positions in the data file. This optional behavior is
+described in detail a bit later.
+
+\subsubsection{Primary key section}
+
+The primary key section consists of \ccode{nprimary} records. Each
+record is \ccode{precsize} bytes long, and contains:
+
+\vspace{1em}
+\begin{tabular}{llrr}
+Variable   & Description                                 & Bytes      & Type \\\hline
+\ccode{key}	   & Key name (seq name, identifier, accession) & \ccode{plen}& \ccode{char *}\\
+\ccode{fnum}       & File number (0..nfiles-1)                   & 2          & \ccode{uint16\_t}\\
+\ccode{r\_off}     & Offset to start of record                   & \ddag      & \ccode{off\_t}\\
+\ccode{d\_off}     & Offset to start of sequence data            & \ddag      & \ccode{off\_t}\\
+\ccode{len}        & Length of data (e.g. seq length, residues)  & 8          & \ccode{uint64\_t} \\\hline
+\end{tabular} 
+\vspace{1em}
+
+The two offsets are sequence file offsets that may be either 8 or 4
+bytes (indicated by \ddag above). They are usually 64-bit (8 byte)
+signed integers.  If an SSI index is created on an older system that
+only allows 32-bit offsets (and hence cannot have files $>$2 GB), they
+are 32-bit (4-byte) signed integers.
+
+\ccode{r\_off} (the \emph{record offset}) indicates the position of
+the first byte of the record.
+
+\ccode{d\_off} (the \emph{data offset}) is optional. It indicated the
+position of the first byte of the data in the record (the sequence
+itself, for example), after any header information.  If
+\ccode{eslSSI\_FASTSUBSEQ} is set on this key's file, \ccode{d\_off}
+can be used to calculate a disk position close to (and possibly
+exactly at) the start of any subsequence.
+
+\ccode{len} is the length of the data record. It is optional, because
+some kinds of records that SSI might be used to index may not have a
+meaningful length. The units of length are application-defined (i.e.\
+defined by whatever creates the SSI index for a particular file); but
+for sequences, \ccode{len} is almost certainly in residues.  In
+subsequence retrieval, a \ccode{len} in residues is necessary for
+bounds checking.
+
+\subsubsection{Secondary key section}
+
+The secondary key section consists of \ccode{nsecondary} records. Each
+record is \ccode{srecsize} bytes long, and contains:
+
+\vspace{1em}
+\begin{tabular}{llrr}
+Variable   & Description                                   & Bytes      & Type \\\hline
+\ccode{key}   & Key name (seq name, identifier, accession)  & \ccode{slen}& \ccode{char *}\\
+\ccode{pkey}  & Primary key                                 &
+\ccode{plen}& \ccode{char *}\\\hline
+\end{tabular}
+\vspace{1em}
+
+That is, secondary keys are simply associated with primary keys as
+\emph{aliases}.  There can be many secondary keys for a given record.
+However, all keys (primary and secondary) must be unique: no key can
+occur more than once in the index.
+
+\subsection{Fast subsequence retrieval}
+
+In some files (notably whole chromosomal DNA sequences) the size of
+each sequence is large. It may be slow (even prohibitively slow) to
+extract a desired subsequence, even if an SSI index says how to find
+the sequence record quickly, if you had to read the entire sequence
+into memory just to extract the right part of it.
+
+SSI uses a simple but effective technique to find subsequences.
+Provided that he sequence data file is consistently formatted so that
+each line in each record (except the last one) is of the same length,
+in both bytes and residues, we can determine a disk offset of the
+start of any subsequence by arithmetic. \Easel\ refers to such a file
+as ``well-formatted''. For example, a simple well-formatted FASTA file
+with 50 residues per line might have 51 bytes on every sequence line
+(counting the '\verb+\0+') but for the last line in each record
+(\ccode{bpl}=51, \ccode{rpl}=50). Position $i$ in a sequence $1..L$
+will be on line $l = (i-1)/\mbox{\ccode{rpl}}$, and line $l$ starts at
+disk offset $l * \mbox{\ccode{bpl}}$ relative to the start of the
+sequence data.
+
+If there are no nonsequence characters in the data line except the
+terminal '\verb+\0+' (which is true iff \ccode{bpl} = \ccode{rpl}+1
+and 1 residue = 1 byte), we can precisely identify the disk position
+of any residue $i$ (\emph{single residue resolution}):
+
+\[
+\mbox{relative offset of residue $i$} =
+\left((i-1)/\mbox{\ccode{rpl}}\right)*\mbox{\ccode{bpl}} + (i-1) \% \mbox{ \ccode{rpl}}
+\]
+
+Even for sequence data lines with extra characters (e.g. spaces,
+coordinates, whatever), we can still identify the start of the text
+line that residue $i$ is on (\emph{line resolution}).  A parser can be
+positioned at the beginning of the appropriate line $l$, which starts
+at residue $(l*\mbox{\ccode{rpl}}) + 1$, and it can start reading from
+there (e.g. the line that $i$ is on) rather than the beginning of the
+whole sequence record.
+
+When creating an index, your application is responsible for
+determining if \ccode{bpl} and \ccode{rpl} are consistent throughout a
+file. If so, you may call \ccode{esl\_newssi\_SetSubseq()} on that
+file's handle to set \ccode{bpl}, \ccode{rpl}, and the
+\ccode{eslSSI\_FASTSUBSEQ} flag. Then, when using that index, you can
+use the \ccode{esl\_ssi\_FindSubseq()} call to retrieve not only the
+filehandle \ccode{fh} and record offset \ccode{r\_off} for a key; you
+also provide a desired start position \ccode{requested\_start} for the
+subsequence you want to retrieve, and the routine gives you back a
+data offset \ccode{d\_off}, which corresponds to a actual starting
+position \ccode{actual\_start} that is also returned. For single
+residue resolution, \ccode{actual\_start} is \ccode{requested\_start},
+and the data offset \ccode{d\_off} will position you right at the
+residue you want; you position the file with \ccode{fseeko()} and
+start reading your subsequence immediately. When we can only achieve
+line resolution, \ccode{actual\_start} is $\leq$
+\ccode{requested\_start}; you position the disk to the start of the
+appropriate line with \ccode{fseeko()}, start reading, and skip zero
+or more residues to reach your \ccode{requested\_start}. Your
+application should be prepared to deal with line resolution; it should
+not assume that \ccode{requested\_start} and \ccode{actual\_start} are
+identical.
+
+Data is always read ``left to right''.  To read a reverse complemented
+strand in DNA files, you must read your subsequence in forward
+orientation first, and reverse complement it later.
+
+
+
diff --git a/esl_stack.c b/esl_stack.c
new file mode 100644
index 0000000..912c770
--- /dev/null
+++ b/esl_stack.c
@@ -0,0 +1,1170 @@
+/* Pushdown stacks for integers, pointers, and characters.
+ *
+ * Contents:
+ *   1. The <ESL_STACK> object.
+ *   2. The main API, including pushing/popping.
+ *   3. Shuffling stacks.                  [eslAUGMENT_RANDOM]
+ *   4. Using stacks for thread communication   [HAVE_PTHREAD]
+ *   5. Unit tests.
+ *   6. Test driver.
+ *   7. Example.
+ *   8. Copyright and license.
+ *
+ * Augmentations:
+ *   eslAUGMENT_RANDOM  : adds function for shuffling a stack. 
+ * 
+ */ 
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_PTHREAD
+#include <pthread.h>
+#endif
+
+#include "easel.h"
+#include "esl_stack.h"
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>		/* usleep() in unit tests */
+#endif
+
+/*****************************************************************
+ *# 1. The <ESL_STACK> object.
+ *****************************************************************/
+
+/* Function:  esl_stack_ICreate()
+ * Synopsis:  Create an integer stack.
+ * Incept:    SRE, Sun Dec 26 09:11:50 2004 [Zaragoza]
+ *
+ * Purpose:   Creates an integer stack.
+ *
+ * Returns:   a pointer to the new stack.
+ *
+ * Throws:    <NULL> on an allocation failure.
+ */
+ESL_STACK *
+esl_stack_ICreate(void)
+{
+  ESL_STACK *ns = NULL;
+  int status;
+  
+  ESL_ALLOC(ns, sizeof(ESL_STACK));
+  ns->nalloc   = ESL_STACK_INITALLOC;
+  ns->pdata    = NULL;
+  ns->cdata    = NULL;
+  ns->idata    = NULL;
+  ns->n        = 0;
+#ifdef HAVE_PTHREAD
+  ns->do_mutex = FALSE;
+  ns->do_cond  = FALSE;
+  ns->mutex    = NULL;
+  ns->cond     = NULL;
+#endif  
+
+  ESL_ALLOC(ns->idata, sizeof(int) * ns->nalloc);
+  return ns;
+
+ ERROR:
+  esl_stack_Destroy(ns);
+  return NULL;
+}
+
+/* Function:  esl_stack_CCreate()
+ * Synopsis:  Create a character stack.
+ * Incept:    SRE, Sun Dec 26 09:15:35 2004 [Zaragoza]
+ *
+ * Purpose:   Creates a character stack.
+ *
+ * Returns:   a pointer to the new stack.
+ *
+ * Throws:    <NULL> on an allocation failure.
+ */
+ESL_STACK *
+esl_stack_CCreate(void)
+{
+  ESL_STACK *cs = NULL;
+  int status;
+
+  ESL_ALLOC(cs, sizeof(ESL_STACK));
+  cs->nalloc   = ESL_STACK_INITALLOC;
+  cs->idata    = NULL;
+  cs->pdata    = NULL;
+  cs->cdata    = NULL;
+  cs->n        = 0;
+#ifdef HAVE_PTHREAD
+  cs->do_mutex = FALSE;
+  cs->do_cond  = FALSE;
+  cs->mutex    = NULL;
+  cs->cond     = NULL;
+#endif  
+
+  ESL_ALLOC(cs->cdata, sizeof(char) * cs->nalloc);
+  return cs;
+
+ ERROR:
+  esl_stack_Destroy(cs);
+  return NULL;
+}
+
+/* Function:  esl_stack_PCreate()
+ * Synopsis:  Create a pointer stack.
+ * Incept:    SRE, Sun Dec 26 09:16:07 2004 [Zaragoza]
+ *
+ * Purpose:   Creates a pointer stack.
+ *
+ * Returns:   a pointer to the new stack.
+ *
+ * Throws:    <NULL> on an allocation failure.
+ */
+ESL_STACK *
+esl_stack_PCreate(void)
+{
+  ESL_STACK *ps = NULL;
+  int        status;
+  
+  ESL_ALLOC(ps, sizeof(ESL_STACK));
+  ps->nalloc   = ESL_STACK_INITALLOC;
+  ps->idata    = NULL;
+  ps->cdata    = NULL;
+  ps->pdata    = NULL;
+  ps->n        = 0;
+#ifdef HAVE_PTHREAD
+  ps->do_mutex = FALSE;
+  ps->do_cond  = FALSE;
+  ps->mutex    = NULL;
+  ps->cond     = NULL;
+#endif  
+
+  ESL_ALLOC(ps->pdata, sizeof(void *) * ps->nalloc);
+  return ps;
+
+ ERROR:
+  esl_stack_Destroy(ps);
+  return NULL;
+}
+
+/* Function:  esl_stack_Reuse()
+ * Synopsis:  Reuse a stack.
+ * Incept:    SRE, Tue Dec 28 04:21:36 2004 [Zaragoza]
+ *
+ * Purpose:   Empties stack <s> so it can be reused without
+ *            creating a new one. The stack <s>
+ *            can be of any data type; it retains its original
+ *            type.
+ *
+ * Returns:   <eslOK>
+ */
+int
+esl_stack_Reuse(ESL_STACK *s)
+{
+  s->n = 0;	/* it's that simple in this implementation */
+  return eslOK;
+}
+
+/* Function:  esl_stack_Destroy()
+ * Synopsis:  Free a stack.
+ * Incept:    SRE, Sun Dec 26 09:16:24 2004 [Zaragoza]
+ *
+ * Purpose:   Destroys a created stack <s>, of any data type.
+ */
+void
+esl_stack_Destroy(ESL_STACK *s)
+{
+  if (s) 
+    {
+       if (s->idata) free(s->idata);
+       if (s->cdata) free(s->cdata);
+       if (s->pdata) free(s->pdata);
+#ifdef HAVE_PTHREAD
+       if (s->mutex) { pthread_mutex_destroy(s->mutex); free(s->mutex); }
+       if (s->cond)  { pthread_cond_destroy(s->cond);   free(s->cond);  }
+#endif
+       free(s);
+    }
+}
+/*------------------ end, ESL_STACK object ----------------------*/
+
+
+
+/*****************************************************************
+ *# 2. The main API, including pushing/popping.
+ *****************************************************************/
+
+/* Function:  esl_stack_IPush()
+ * Synopsis:  Push an integer onto a stack.
+ * Incept:    SRE, Sun Dec 26 09:17:17 2004 [Zaragoza]
+ *
+ * Purpose:   Push an integer <x> onto an integer stack <ns>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on reallocation failure.
+ *            <eslESYS> if a pthread call fails. In this case, the
+ *              state of a pthread mutex and/or cond may be wedged.             
+ */
+int
+esl_stack_IPush(ESL_STACK *ns, int x)
+{
+  int *ptr = NULL;
+  int  status;
+
+#ifdef HAVE_PTHREAD
+  if (ns->do_mutex) if (pthread_mutex_lock(ns->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure");
+#endif
+
+  if (ns->n == ns->nalloc) {
+    ESL_RALLOC(ns->idata, ptr, sizeof(int) * ns->nalloc * 2);
+    ns->nalloc += ns->nalloc;	/* reallocate by doubling */
+  }
+  ns->idata[ns->n] = x;
+  ns->n++;
+
+#ifdef HAVE_PTHREAD
+  if (ns->do_cond)  if (pthread_cond_signal(ns->cond)   != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_signal() failure");
+  if (ns->do_mutex) if (pthread_mutex_unlock(ns->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return eslOK;
+
+ ERROR:
+#ifdef HAVE_PTHREAD
+  if (ns->do_mutex) if (pthread_mutex_unlock(ns->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return status;
+}
+
+/* Function:  esl_stack_CPush()
+ * Synopsis:  Push a char onto a stack.
+ * Incept:    SRE, Sun Dec 26 09:18:24 2004 [Zaragoza]
+ *
+ * Purpose:   Push a character <c> onto a character stack <cs>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on reallocation failure.
+ *            <eslESYS> if a pthread call fails. In this case, the
+ *              state of a pthread mutex and/or cond may be wedged.             
+ */
+int
+esl_stack_CPush(ESL_STACK *cs, char c)
+{
+  char *ptr   = NULL;
+  int  status;
+
+#ifdef HAVE_PTHREAD
+  if (cs->do_mutex) if (pthread_mutex_lock(cs->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure");
+#endif
+
+  if (cs->n == cs->nalloc) {
+    ESL_RALLOC(cs->cdata, ptr, sizeof(char) * cs->nalloc * 2);
+    cs->nalloc += cs->nalloc;	/* reallocate by doubling */
+  }
+  cs->cdata[cs->n] = c;
+  cs->n++;
+
+#ifdef HAVE_PTHREAD
+  if (cs->do_cond)  if (pthread_cond_signal(cs->cond)    != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_signal() failure");
+  if (cs->do_mutex) if (pthread_mutex_unlock(cs->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return eslOK;
+
+ ERROR:
+#ifdef HAVE_PTHREAD
+  if (cs->do_mutex) if (pthread_mutex_unlock(cs->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return status;
+}
+
+/* Function:  esl_stack_PPush()
+ * Synopsis:  Push a pointer onto a stack.
+ * Incept:    SRE, Sun Dec 26 09:18:49 2004 [Zaragoza]
+ *
+ * Purpose:   Push a pointer <p> onto a pointer stack <ps>.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on reallocation failure.
+ *            <eslESYS> if a pthread call fails. In this case, the
+ *              state of a pthread mutex and/or cond may be wedged.             
+ */
+int
+esl_stack_PPush(ESL_STACK *ps, void *p)
+{
+  void *ptr  = NULL;
+  int status;
+
+#ifdef HAVE_PTHREAD
+  if (ps->do_mutex) if (pthread_mutex_lock(ps->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure");
+#endif
+
+  if (ps->n == ps->nalloc) {
+    ESL_RALLOC(ps->pdata, ptr, sizeof(void *) * ps->nalloc * 2);
+    ps->nalloc += ps->nalloc;	/* reallocate by doubling */
+  }
+  ps->pdata[ps->n] = p;
+  ps->n++;
+
+#ifdef HAVE_PTHREAD
+  if (ps->do_cond)  if (pthread_cond_signal(ps->cond)    != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_signal() failure");
+  if (ps->do_mutex) if (pthread_mutex_unlock(ps->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return eslOK;
+
+ ERROR:
+#ifdef HAVE_PTHREAD
+  if (ps->do_mutex) if (pthread_mutex_unlock(ps->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return status;
+}
+
+/* Function:  esl_stack_IPop()
+ * Synopsis:  Pop an integer off a stack.
+ * Incept:    SRE, Sun Dec 26 09:19:12 2004 [Zaragoza]
+ *
+ * Purpose:   Pops an integer off the integer stack <ns>, and returns
+ *            it through <ret_x>.
+ *
+ * Returns:   <eslOK> on success.
+ *            <eslEOD> if stack is empty.
+ *            
+ * Throws:    <eslESYS> if a pthread mutex lock/unlock or conditional wait fails.
+ */
+int
+esl_stack_IPop(ESL_STACK *ns, int *ret_x)
+{
+  int status;
+#ifdef HAVE_PTHREAD
+  if (ns->do_mutex           && pthread_mutex_lock(ns->mutex)          != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure");
+  if (ns->do_cond && ! ns->n && pthread_cond_wait(ns->cond, ns->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_wait() failure");
+#endif
+
+  if (ns->n == 0) 
+    {
+      *ret_x = 0; 
+      status = eslEOD;
+    } 
+  else
+    {
+      ns->n--;
+      *ret_x = ns->idata[ns->n];
+      status = eslOK;
+    }
+
+#ifdef HAVE_PTHREAD
+  if (ns->do_mutex && pthread_mutex_unlock(ns->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return status;
+}
+
+/* Function:  esl_stack_CPop()
+ * Synopsis:  Pop a char off a stack.
+ * Incept:    SRE, Sun Dec 26 09:21:27 2004 [Zaragoza]
+ *
+ * Purpose:   Pops a character off the character stack <cs>, and returns
+ *            it through <ret_c>.
+ *
+ * Returns:   <eslOK> on success. 
+ *            <eslEOD> if stack is empty.
+ *            
+ * Throws:    <eslESYS> if a pthread mutex lock/unlock or conditional wait fails.
+ */
+int
+esl_stack_CPop(ESL_STACK *cs, char *ret_c)
+{
+  int status;
+#ifdef HAVE_PTHREAD
+  if (cs->do_mutex           && pthread_mutex_lock(cs->mutex)          != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure");
+  if (cs->do_cond && ! cs->n && pthread_cond_wait(cs->cond, cs->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_wait() failure");
+#endif
+
+  if (cs->n == 0) 
+    { 
+      *ret_c = 0; 
+      status = eslEOD;
+    }
+  else
+    {
+      cs->n--;
+      *ret_c = cs->cdata[cs->n];
+      status = eslOK;
+    }
+
+#ifdef HAVE_PTHREAD
+  if (cs->do_mutex && pthread_mutex_unlock(cs->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return status;
+}
+
+/* Function:  esl_stack_PPop()
+ * Synopsis:  Pop a pointer off a stack.
+ * Incept:    SRE, Sun Dec 26 09:21:56 2004 [Zaragoza]
+ *
+ * Purpose:   Pops a pointer off the pointer stack <ps>, and returns
+ *            it through <ret_p>.
+ *
+ * Returns:   <eslOK> on success. 
+ *            <eslEOD> if stack is empty.
+ * 
+ * Throws:    <eslESYS> if a pthread mutex lock/unlock or conditional wait fails.
+ */
+int
+esl_stack_PPop(ESL_STACK *ps, void **ret_p)
+{
+  int status;
+#ifdef HAVE_PTHREAD
+  if (ps->do_mutex           && pthread_mutex_lock(ps->mutex)          != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure");
+  if (ps->do_cond && ! ps->n && pthread_cond_wait(ps->cond, ps->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_wait() failure");
+#endif
+
+  if (ps->n == 0)
+    {
+      *ret_p = NULL; 
+      status = eslEOD;
+    }
+  else
+    {
+      ps->n--;
+      *ret_p = ps->pdata[ps->n];
+      status = eslOK;
+    }
+
+#ifdef HAVE_PTHREAD
+  if (ps->do_mutex && pthread_mutex_unlock(ps->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return status;
+}
+
+/* Function:  esl_stack_ObjectCount()
+ * Synopsis:  Return the number of objects in a stack.
+ * Incept:    SRE, Sun Dec 26 09:22:41 2004 [Zaragoza]
+ *
+ * Purpose:   Returns the number of data objects stored in the
+ *            stack <s>. The stack may be of any datatype.
+ */
+int 
+esl_stack_ObjectCount(ESL_STACK *s)
+{
+  return s->n;
+}
+
+/* Function:  esl_stack_Convert2String()
+ * Synopsis:  Convert a char stack to a string.
+ * Incept:    SRE, Sun Dec 26 09:23:36 2004 [Zaragoza]
+ *
+ * Purpose:   Converts a character stack <cs> to a NUL-terminated
+ *            string, and returns a pointer to the string. The
+ *            characters in the string are in the same order they
+ *            were pushed onto the stack.  The stack is destroyed by
+ *            this operation, as if <esl_stack_Destroy()> had been
+ *            called on it. The caller becomes responsible for
+ *            free'ing the returned string.
+ *            
+ *            Because the stack is destroyed by this call, use care in
+ *            a multithreaded context. You don't want to have another
+ *            thread waiting to do something to this stack as another
+ *            thread is destroying it. Treat this call like
+ *            you'd treat <esl_stack_Destroy()>. Its internals are
+ *            not mutex-protected (unlike push/pop functions).
+ *
+ * Returns:   Pointer to the string; caller must <free()> this.
+ *
+ * Throws:    NULL if a reallocation fails.
+ */
+char *
+esl_stack_Convert2String(ESL_STACK *cs)
+{
+  char *s    = NULL;
+  void *tmp  = NULL;
+  int   status;
+
+  /* Take stack away; it's already a string, just not nul-terminated */
+  s         = cs->cdata;
+  cs->cdata = NULL;		/* esl_stack_Destroy() will now ignore the NULL cdata field */
+
+  /* NUL-terminate; which might require a +1 realloc if we're unlucky */
+  if (cs->n == cs->nalloc) 
+    ESL_RALLOC(s, tmp, sizeof(char) * (cs->nalloc +1));
+  s[cs->n] = '\0';
+
+  /* Destroy the stack; return the string. */
+  esl_stack_Destroy(cs);
+  return s;
+
+ ERROR:
+  esl_stack_Destroy(cs);
+  return NULL;
+}
+
+/* Function:  esl_stack_DiscardTopN()
+ * Synopsis:  Discard the top elements on a stack.
+ * Incept:    SRE, Tue Dec 28 04:33:06 2004 [St. Louis]
+ *
+ * Purpose:   Throw away the top <n> elements on stack <s>.
+ *            Equivalent to <n> calls to a <Pop()> function.
+ *            If <n> equals or exceeds the number of elements 
+ *            currently in the stack, the stack is emptied
+ *            as if <esl_stack_Reuse()> had been called.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslESYS> if mutex lock/unlock fails, if pthreaded.
+ */
+int
+esl_stack_DiscardTopN(ESL_STACK *s, int n)
+{
+#ifdef HAVE_PTHREAD
+  if (s->do_mutex && pthread_mutex_lock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure");
+#endif
+
+  if (n <= s->n) s->n -= n;
+  else           s->n = 0;
+
+#ifdef HAVE_PTHREAD
+  if (s->do_mutex && pthread_mutex_unlock(s->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return eslOK;
+}
+
+/* Function:  esl_stack_DiscardSelected()
+ * Synopsis:  Remove arbitrary elements from a stack.
+ * Incept:    SRE, Tue Jan 18 09:57:47 2011 [Janelia]
+ *
+ * Purpose:   For each element in the stack, call \verb+(*discard_func)(&element, param)+.
+ *            If <TRUE>, discard the element. 
+ *            
+ *            Passing a pointer to an arbitrary <(*discard_func)>
+ *            allows arbitrary rules. The <(*discard_func)> gets two
+ *            arguments: a pointer (which is either a pointer to an
+ *            element for int and char stacks, or an actual pointer
+ *            element from a pointer stack), and <param>, a <void *>
+ *            to whatever arguments the caller needs the selection
+ *            function to have.
+ *            
+ *            When discarding elements from a pointer stack, the
+ *            <*discard_func()> will generally assume responsibility
+ *            for the memory allocated to those elements. It may want
+ *            to free() or Destroy() them, for example, if they're
+ *            truly being discarded.
+ *
+ * Args:      s             - stack to discard from
+ *            discard_func  - ptr to function that returns TRUE if elem is to be discarded
+ *            param         - ptr to any parameters that (*discard_func)() needs.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslESYS> if a pthread mutex lock/unlock fails.
+ */
+int
+esl_stack_DiscardSelected(ESL_STACK *s, int (*discard_func)(void *, void *), void *param)
+{
+  int opos;
+  int npos = 0;
+
+#ifdef HAVE_PTHREAD
+  if (s->do_mutex && pthread_mutex_lock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure");
+#endif
+
+  if (s->idata) 
+    {
+      for (opos = 0, npos = 0 ; opos < s->n; opos++)
+	if (! (*discard_func)(s->idata+opos, param))
+	  s->idata[npos++] = s->idata[opos];
+    }
+  else if (s->pdata)
+    {
+      for (opos = 0, npos = 0 ; opos < s->n; opos++)
+	if (! (*discard_func)(s->pdata[opos], param))
+	  s->pdata[npos++] = s->pdata[opos];
+    }
+  else if (s->cdata)
+    {
+      for (opos = 0, npos = 0 ; opos < s->n; opos++)
+	if (! (*discard_func)(s->cdata+opos, param))
+	  s->cdata[npos++] = s->cdata[opos];
+    }
+  s->n = npos;
+
+#ifdef HAVE_PTHREAD
+  if (s->do_mutex && pthread_mutex_unlock(s->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return eslOK;
+}
+/*------------- end, main API, pushing/popping ------------------*/
+
+
+
+/*****************************************************************
+ *# 3. Shuffling stacks [with <eslAUGMENT_RANDOM>]
+ *****************************************************************/
+#ifdef eslAUGMENT_RANDOM
+
+/* Function:  esl_stack_Shuffle()
+ * Synopsis:  Randomly shuffle the elements in a stack.
+ * Incept:    SRE, Mon Mar 31 11:01:06 2008 [Janelia]
+ *
+ * Purpose:   Randomly shuffle the elements in stack <s>, using
+ *            random numbers from generator <r>.
+ *
+ * Returns:   <eslOK> on success, and the stack is randomly 
+ *            shuffled.
+ */
+int
+esl_stack_Shuffle(ESL_RANDOMNESS *r, ESL_STACK *s)
+{
+  int   n = s->n;
+  int   w;
+
+#ifdef HAVE_PTHREAD
+  if (s->do_mutex && pthread_mutex_lock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure");
+#endif
+
+  while (n > 1) {
+    w = esl_rnd_Roll(r, n);	/* shuffling algorithm: swap last elem with w, decrement n. */
+    if      (s->idata != NULL)  ESL_SWAP(s->idata[w], s->idata[n-1], int);
+    else if (s->cdata != NULL)  ESL_SWAP(s->cdata[w], s->cdata[n-1], char);
+    else if (s->pdata != NULL)  ESL_SWAP(s->pdata[w], s->pdata[n-1], void *);
+    n--;
+  }
+
+#ifdef HAVE_PTHREAD
+  if (s->do_mutex && pthread_mutex_unlock(s->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");
+#endif
+  return eslOK;
+}
+#endif /*eslAUGMENT_RANDOM*/
+
+
+/*****************************************************************
+ *# 4. Using stacks for thread communication.
+ *****************************************************************/
+
+#if defined HAVE_PTHREAD
+/* Function:  esl_stack_UseMutex()
+ * Synopsis:  Protect this stack in a threaded program.
+ * Incept:    SRE, Mon Jan 17 14:18:43 2011 [Janelia]
+ *
+ * Purpose:   Declare that this stack is going to be operated on by more
+ *            than one thread in a multithreaded program, and that all
+ *            operations that change its internal state (such as
+ *            pushing and popping) need to be protected by a mutex.
+ *
+ * Args:      s  - the stack to protect
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslESYS> if <pthread_mutex_init()> fails.
+ */
+int
+esl_stack_UseMutex(ESL_STACK *s)
+{
+  int pstatus;
+  int status;
+
+  ESL_ALLOC(s->mutex, sizeof(pthread_mutex_t));
+  if ((pstatus = pthread_mutex_init(s->mutex, NULL)) != 0) ESL_XEXCEPTION(eslESYS, "pthread_mutex_init failed with code %d\n", pstatus);
+  s->do_mutex = TRUE;
+  return eslOK;
+
+ ERROR:
+  if (s->mutex) free(s->mutex);
+  s->mutex    = NULL;
+  s->do_mutex = FALSE;
+  return status;
+}
+
+/* Function:  esl_stack_UseCond()
+ * Synopsis:  Declare that this stack is used for interthread communication.
+ * Incept:    SRE, Mon Jan 17 14:22:06 2011 [Janelia]
+ *
+ * Purpose:   Declare that this stack is to be used for communication
+ *            between threads. If a thread tries to pop from the stack
+ *            and the stack is empty, the Pop will do a <pthread_cond_wait()>
+ *            to wait until another thread has done a <Push()>. If a thread
+ *            pushes onto the stack, it will do a <pthread_cond_signal()>
+ *            to wake up a waiting <Pop()>'er.
+ *            
+ *            The stack must also have an active mutex. The caller
+ *            must call <esl_stack_UseMutex()> before calling
+ *            <esl_stack_UseCond().>
+ *
+ * Args:      s - the stack to use for push/pop interthread communication
+ * 
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEINVAL> if this stack lacks an active mutex.
+ *            <eslESYS> if <pthread_cond_init()> fails.
+ */
+int
+esl_stack_UseCond(ESL_STACK *s)
+{
+  int pstatus;
+  int status;
+
+  if (! s->do_mutex || ! s->mutex) ESL_EXCEPTION(eslEINVAL, "stack has no active mutex; can't call esl_stack_UseCond() on it");
+
+  ESL_ALLOC(s->cond, sizeof(pthread_cond_t));
+  if ((pstatus = pthread_cond_init(s->cond, NULL)) != 0) ESL_XEXCEPTION(eslESYS, "pthread_cond_init failed with code %d\n", pstatus);
+  s->do_cond = TRUE;
+  return eslOK;
+
+ ERROR:
+  if (s->cond) free(s->cond);
+  s->cond    = NULL;
+  s->do_cond = FALSE;
+  return status;
+}
+
+/* Function:  esl_stack_ReleaseCond()
+ * Synopsis:  Declare that anyone waiting on this stack may complete.
+ * Incept:    SRE, Tue Jan 18 15:57:32 2011 [Janelia]
+ *
+ * Purpose:   Release the conditional wait state on stack <s>. In our
+ *            idiom for using a stack to coordinate between one or
+ *            more client thread adding jobs to a stack, and one or
+ *            more worker threads popping them off, we call
+ *            <esl_stack_ReleaseCond()> when we know the client(s) are
+ *            done. Then the worker(s) seeing an empty job stack may
+ *            complete (Pop functions will return eslEOD), rather than
+ *            doing a conditional wait waiting for more work to appear
+ *            on the stack.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslESYS> on pthread call failures.
+ */
+int
+esl_stack_ReleaseCond(ESL_STACK *s)
+{
+  if (! s->do_mutex) ESL_EXCEPTION(eslESYS, "no mutex; esl_stack_ReleaseCond() call invalid");
+  if (! s->do_cond)  ESL_EXCEPTION(eslESYS, "no conditional wait state is set");
+
+  if (pthread_mutex_lock(s->mutex)    != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure");
+  if (pthread_cond_broadcast(s->cond) != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_broadcast() failure");
+
+  /* You can't free s->cond yet; you can only set the flag. 
+   *  Reason: you may have workers that are ALREADY in a wait state, in pthread_cond_wait(), 
+   *  and that function depends on s->cond.
+   */
+  s->do_cond = FALSE;
+
+  if (pthread_mutex_unlock(s->mutex)  != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure");  
+  return eslOK;
+}
+#endif /*HAVE_PTHREAD*/
+/*-------- end, using stacks for thread communication -----------*/
+
+
+
+/*****************************************************************
+ * 5. Unit tests
+ *****************************************************************/
+#ifdef eslSTACK_TESTDRIVE
+
+#include "esl_random.h"
+
+static void
+utest_integer(void)
+{
+  char      *msg = "integer stack basic unit test failed";
+  ESL_STACK *s   = NULL;
+  int        n1  = ESL_STACK_INITALLOC*2+1;		/* force two reallocations */
+  int        n2  = 0;
+  int        i;
+  int        val;
+
+  if ((s = esl_stack_ICreate())                      == NULL)   esl_fatal(msg);
+  for (i = 0; i < n1; i++) if (esl_stack_IPush(s, i) != eslOK)  esl_fatal(msg);
+  while (esl_stack_IPop(s, &val) != eslEOD) n2++;
+  if (n1 != n2) esl_fatal(msg);
+  esl_stack_Reuse(s);
+
+  /* same again, with ObjectCount instead of EOD for popping */
+  for (i = 0; i < n1; i++) if (esl_stack_IPush(s, i) != eslOK) esl_fatal(msg);
+  n2 = 0;
+  while (esl_stack_ObjectCount(s)) {
+    if (esl_stack_IPop(s, &val) != eslOK) esl_fatal(msg);
+    n2++; 
+  }
+  if (n1 != n2) esl_fatal(msg);
+  esl_stack_Destroy(s);
+}
+
+static void
+utest_char(void)  
+{
+  char      *msg = "char stack basic unit test failed";
+  ESL_STACK *s   = NULL;
+  int        n1  = ESL_STACK_INITALLOC*2+1;		/* force two reallocations */
+  int        n2  = 0;
+  int        i;
+  char       c;
+
+  if ((s = esl_stack_CCreate())                        == NULL)   esl_fatal(msg);
+  for (i = 0; i < n1; i++) if (esl_stack_CPush(s, 'X') != eslOK)  esl_fatal(msg);
+  while (esl_stack_CPop(s, &c) != eslEOD) {
+    if (c != 'X') esl_fatal(msg);
+    n2++; 
+  }
+  if (n1 != n2) esl_fatal(msg);
+  esl_stack_Reuse(s);
+
+  /* same again, with ObjectCount instead of EOD for popping */
+  for (i = 0; i < n1; i++) if (esl_stack_CPush(s, 'X') != eslOK) esl_fatal(msg);
+  n2 = 0;
+  while (esl_stack_ObjectCount(s)) {
+    if (esl_stack_CPop(s, &c) != eslOK) esl_fatal(msg);
+    n2++; 
+  }
+  if (n1 != n2) esl_fatal(msg);
+  esl_stack_Destroy(s);
+}
+  
+static void
+utest_pointer(void)
+{
+  char      *msg = "pointer stack basic unit test failed";
+  ESL_STACK *s   = NULL;
+  int        n1  = ESL_STACK_INITALLOC*2+1;		/* force two reallocations */
+  int        n2  = 0;
+  int        i;
+  void      *p;
+
+  if ((s = esl_stack_PCreate())                        == NULL)   esl_fatal(msg);
+  for (i = 0; i < n1; i++) {
+    p = malloc(sizeof(int) * 64);
+    if (esl_stack_PPush(s, p) != eslOK)  esl_fatal(msg);
+  }
+  while (esl_stack_PPop(s, &p) != eslEOD) { free(p); n2++; }
+  if (n1 != n2) esl_fatal(msg);
+  esl_stack_Reuse(s);
+
+  /* same again, with ObjectCount instead of EOD for popping */
+  for (i = 0; i < n1; i++) {
+    p = malloc(sizeof(int) * 64);
+    if (esl_stack_PPush(s, p) != eslOK) esl_fatal(msg);
+  }
+  n2 = 0;
+  while (esl_stack_ObjectCount(s)) {
+    if (esl_stack_PPop(s, &p) != eslOK) esl_fatal(msg);
+    free(p);
+    n2++; 
+  }
+  if (n1 != n2) esl_fatal(msg);
+  esl_stack_Destroy(s);
+}  
+
+static void
+utest_convert2string(void)
+{
+  char      *msg = "stack::convert2string unit test failed";
+  char      *str = "ABCDEF";
+  ESL_STACK *s   = NULL;
+  int        n   = strlen(str);
+  int        i;
+  char      *result = NULL;
+
+  if ((s = esl_stack_CCreate())                          == NULL)   esl_fatal(msg);
+  for (i = 0; i < n; i++) if (esl_stack_CPush(s, str[i]) != eslOK)  esl_fatal(msg);
+  result = esl_stack_Convert2String(s);
+  if (strcmp(result, str) != 0) esl_fatal(msg);
+  free(result);	/* after Convert2String, only the string itself remains to be free'd */
+}
+
+static void
+utest_shuffle(ESL_RANDOMNESS *r)
+{
+  char           *msg  = "stack shuffle unit test failed";
+  ESL_STACK      *s    = esl_stack_ICreate();
+  int             n    = ESL_STACK_INITALLOC*2+1;      /* exercises reallocation */
+  int            *seen = malloc(sizeof(int) * n);
+  int             i;
+  int             val;
+
+  for (i = 0; i < n; i++) esl_stack_IPush(s, i);
+  esl_stack_Shuffle(r, s);
+  
+  for (i = 0; i < n; i++) seen[i] = 0;
+  i = n-1;
+  while (esl_stack_IPop(s, &val) != eslEOD) {
+    seen[val]++;
+  }
+  for (i = 0; i < n; i++) if (seen[i] != 1) esl_fatal(msg);
+  
+  free(seen);
+  esl_stack_Destroy(s);
+}
+
+/* discard all elems in the stack > thresh */
+static int
+discard_function(void *elemp, void *paramp)
+{
+  int elem   =  * (int *) elemp;
+  int thresh =  * (int *) paramp;
+  return (elem > thresh) ? TRUE : FALSE;
+}
+
+static void
+utest_discard_selected(ESL_RANDOMNESS *r)
+{
+  char *msg = "stack: DiscardSelected() unit test failed";
+  ESL_STACK      *ns = esl_stack_ICreate();
+  int              n = 1000;
+  int         thresh = 42;
+  int          npass = 0;
+  int            val;
+  int              i;
+
+  for (i = 0; i < n; i++)
+    {
+      val = esl_rnd_Roll(r, 100) + 1;
+      if (val <= thresh) npass++;
+      esl_stack_IPush(ns, val);
+    }
+  
+  if (esl_stack_DiscardSelected(ns, discard_function, &thresh) != eslOK) esl_fatal(msg);
+
+  if (esl_stack_ObjectCount(ns) != npass) esl_fatal(msg);
+  while (esl_stack_IPop(ns, &val) == eslOK)
+    {
+      if (val > thresh) esl_fatal(msg);
+      npass--;
+    }
+  if (npass != 0) esl_fatal(msg);
+  esl_stack_Destroy(ns);
+}
+
+
+#ifdef HAVE_PTHREAD
+/* Unit test for using a stack as part of an idiom
+ * for a command stack, with one or more threads
+ * adding jobs to the stack, and one or more other threads
+ * pulling jobs off. This idiom is used in the HMMER
+ * hmmpgmd daemon. In this framework, <tt->input>
+ * is a list of jobs to do; <tt->working> is a stack
+ * of jobs waiting to be done; <tt->output> is a 
+ * list of jobs done.
+ *    pusher_thread() simulates a client, taking
+ *     jobs from <tt->input> and adding them to
+ *     the <tt->working> stack.
+ *    popper_thread() simulates a worker, taking
+ *     jobs from <tt->working> and putting them
+ *     on the <tt->output> list.
+ *     
+ * <tt->working>, therefore, is the read/write stack;
+ * <tt->input> is read-only (it only gets written in
+ *   nonthreaded code in main())
+ * <tt->output> is write-only (only gets read in
+ *   nonthreaded code in main()). 
+ */
+struct threadtest_s {
+  ESL_STACK *input;		/* faux "work unit" queue that the pusher_thread() processes*/
+  ESL_STACK *working;		/* interthread communication: pusher puts work on this stack, popper pulls it off */
+  ESL_STACK *output;		/* popper_thread() puts "finished" units on this stack */
+};
+
+static void *
+pusher_thread(void *arg)
+{
+  ESL_RANDOMNESS      *r  = esl_randomness_CreateFast(0);
+  struct threadtest_s *tt = (struct threadtest_s *) arg;
+  int value;
+
+  while ( esl_stack_IPop(tt->input, &value) == eslOK)
+    {
+      usleep(esl_rnd_Roll(r, 100)+1); /* 1..100 usec delay */
+      esl_stack_IPush(tt->working, value);
+    }
+  esl_randomness_Destroy(r);
+  pthread_exit(NULL);
+}
+
+static void *
+popper_thread(void *arg)
+{
+  ESL_RANDOMNESS      *r  = esl_randomness_CreateFast(0);
+  struct threadtest_s *tt = (struct threadtest_s *) arg;
+  int value;
+
+  while (esl_stack_IPop(tt->working, &value) == eslOK)
+    {
+      usleep(esl_rnd_Roll(r, 100)+1); /* 1..100 usec delay */
+      esl_stack_IPush(tt->output, value);
+    }
+  esl_randomness_Destroy(r);
+  pthread_exit(NULL);
+}
+
+static void
+utest_interthread_comm(void)
+{
+  char  *msg = "stack::interthread_comm unit test failed";
+  struct threadtest_s *tt = NULL;
+  int    njobs            = 1000;
+  int   *ndone            = NULL;
+  pthread_t tid[4];
+  int    i;
+  int    value;
+
+  ndone = malloc(sizeof(int) * njobs);
+  for (i = 0; i < njobs; i++) ndone[i] = 0;
+
+  tt = malloc(sizeof(struct threadtest_s));
+  tt->input   = esl_stack_ICreate();
+  tt->working = esl_stack_ICreate();
+  tt->output  = esl_stack_ICreate();
+
+  esl_stack_UseMutex(tt->input);
+  esl_stack_UseMutex(tt->working);
+  esl_stack_UseMutex(tt->output);
+  esl_stack_UseCond(tt->working);
+
+  for (i = 0; i < njobs; i++)
+    esl_stack_IPush(tt->input, i);
+
+  pthread_create(&(tid[0]), NULL, pusher_thread, tt);
+  pthread_create(&(tid[1]), NULL, pusher_thread, tt);
+  pthread_create(&(tid[2]), NULL, popper_thread, tt);
+  pthread_create(&(tid[3]), NULL, popper_thread, tt);
+
+  pthread_join(tid[0], NULL);
+  pthread_join(tid[1], NULL);
+
+  esl_stack_ReleaseCond(tt->working);
+  pthread_join(tid[2], NULL);
+  pthread_join(tid[3], NULL);
+
+  while (esl_stack_IPop(tt->output, &value) == eslOK)
+    {
+      if (value < 0 || value >= njobs) esl_fatal(msg);
+      ndone[value]++;
+    }
+  for (i = 0; i < njobs; i++)
+    if (ndone[i] != 1) esl_fatal(msg);
+
+  free(ndone);
+  esl_stack_Destroy(tt->output);
+  esl_stack_Destroy(tt->working);
+  esl_stack_Destroy(tt->input);
+  free(tt);
+  return;
+}
+#endif /* HAVE_PTHREAD -- pthread-specific utests */
+#endif /*eslSTACK_TESTDRIVE*/
+/*---------------- end of unit tests ----------------------------*/
+
+
+
+
+/*****************************************************************
+ * 6. Test driver.
+ *****************************************************************/
+#ifdef eslSTACK_TESTDRIVE
+/*
+ * Test driver and API example for the pushdown stack module.
+ * To compile:
+ *    gcc -g -Wall -I. -L. -DeslSTACK_TESTDRIVE -o testdrive esl_stack.c -leasel -lm
+ * To run:
+ *    ./testdrive
+ * Returns 0 (success), or returns nonzero and says why.
+ */
+/* why Pop() into a void *obj_p, instead of directly into int *obj, in
+ * the test of the pointer stack? On PowerPC/Linux, using gcc -O3,
+ * trying to Pop() into *obj causes a "dereferencing type-punned
+ * pointer will break strict-aliasing rules" warning, and the test
+ * driver crashes with a double free/corruption error in glibc.  Lower
+ * optimization levels don't cause the problem; adding
+ * -fno-strict-aliasing to the CFLAGS also avoids the problem. I'm
+ * suspicious that it's a gcc optimizer bug. Pop()'ing into a void *
+ * avoids the issue altogether. (SRE, Feb 22 2008 J2/119)
+ */
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_stack.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE, NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",           0 },
+  { "-s",        eslARG_INT,      "0", NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                  0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "unit test driver for esl_stack module";
+
+int 
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go  = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *rng = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+
+  fprintf(stderr, "## %s\n", argv[0]);
+  fprintf(stderr, "#  rng seed = %" PRIu32 "\n", esl_randomness_GetSeed(rng));
+
+  utest_integer();
+  utest_char();
+  utest_pointer();
+  utest_convert2string();
+  utest_shuffle(rng);
+  utest_discard_selected(rng);
+
+#ifdef HAVE_PTHREAD
+  utest_interthread_comm();
+#endif
+
+  esl_randomness_Destroy(rng);
+  esl_getopts_Destroy(go);
+  
+
+  fprintf(stderr, "#  status = ok\n");
+  return eslOK;
+}
+#endif /*eslSTACK_TESTDRIVE*/
+/*-------------------- end of test driver -----------------------*/
+
+
+
+
+/*****************************************************************
+ * 7. Example.
+ *****************************************************************/
+#ifdef eslSTACK_EXAMPLE
+/*::cexcerpt::stack_example::begin::*/
+/* compile: gcc -g -Wall -I. -o example -DeslSTACK_EXAMPLE esl_stack.c easel.c -lm
+ * run:     ./example
+ */
+#include "easel.h"
+#include "esl_stack.h"
+
+int
+main(void)
+{
+  ESL_STACK *ns;
+  int        x;
+
+  ns = esl_stack_ICreate();
+  esl_stack_IPush(ns, 42);
+  esl_stack_IPush(ns, 7);
+  esl_stack_IPush(ns, 3);
+  while (esl_stack_IPop(ns, &x) != eslEOD) 
+    printf("%d\n", x);
+  esl_stack_Destroy(ns);   
+  return 0;
+}
+/*::cexcerpt::stack_example::end::*/
+#endif /*eslSTACK_EXAMPLE*/
+/*------------------------ end of example -----------------------*/
+
+
+
+
+/*****************************************************************  
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_stack.h b/esl_stack.h
new file mode 100644
index 0000000..5e3c32d
--- /dev/null
+++ b/esl_stack.h
@@ -0,0 +1,74 @@
+/* Pushdown stacks for integers, pointers, and characters.
+ *
+ * nstack - SRE 1 March 2000. [Seattle]
+ * mstack - SRE, Fri Oct 10 10:18:16 2003 [St. Louis]
+ * cstack - SRE, Mon Oct 13 12:57:56 2003 [St. Louis]
+ * Incorp into easel - SRE, Sun Dec 26 07:39:02 2004 [Zaragoza]
+ *
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslSTACK_INCLUDED
+#define eslSTACK_INCLUDED
+#include "esl_config.h"
+
+#define ESL_STACK_INITALLOC 128	/* initial allocation; realloc by doubling  */
+
+#ifdef HAVE_PTHREAD
+#include <pthread.h>
+#endif
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif /*eslAUGMENT_RANDOM*/
+
+
+typedef struct esl_stack_s {
+  int   *idata;			/* integer data stack                       */
+  void **pdata;			/* pointer data stack                       */
+  char  *cdata;			/* character data stack                     */
+
+  int  n;			/* current (topmost) elem in data           */
+  int  nalloc;			/* # of elems allocated right now           */
+
+#ifdef HAVE_PTHREAD
+  int              do_mutex;	/* TRUE if we need to mutex-protect this stack */
+  int              do_cond;	/* TRUE if pushers want to notify poppers      */
+  pthread_mutex_t *mutex;	/* protect while operating on stacks           */
+  pthread_cond_t  *cond;	/* for pushers to notify poppers               */
+#endif
+} ESL_STACK;
+
+extern ESL_STACK *esl_stack_ICreate(void);
+extern ESL_STACK *esl_stack_CCreate(void);
+extern ESL_STACK *esl_stack_PCreate(void);
+
+extern int        esl_stack_Reuse(ESL_STACK *s);
+extern void       esl_stack_Destroy(ESL_STACK *s);
+
+extern int esl_stack_IPush(ESL_STACK *ns, int x);
+extern int esl_stack_CPush(ESL_STACK *cs, char c);
+extern int esl_stack_PPush(ESL_STACK *ps, void *p);
+
+extern int esl_stack_IPop(ESL_STACK *ns, int   *ret_x);
+extern int esl_stack_CPop(ESL_STACK *cs, char  *ret_c);
+extern int esl_stack_PPop(ESL_STACK *ps, void **ret_p);
+
+extern int esl_stack_ObjectCount(ESL_STACK *s);
+
+extern char *esl_stack_Convert2String(ESL_STACK *cs);
+extern int   esl_stack_DiscardTopN(ESL_STACK *s, int n);
+extern int   esl_stack_DiscardSelected(ESL_STACK *s, int (*discard_func)(void *, void *), void *param);
+
+#ifdef eslAUGMENT_RANDOM
+extern int esl_stack_Shuffle(ESL_RANDOMNESS *r, ESL_STACK *s);
+#endif /*eslAUGMENT_RANDOM*/
+
+#ifdef HAVE_PTHREAD
+extern int esl_stack_UseMutex   (ESL_STACK *s);
+extern int esl_stack_UseCond    (ESL_STACK *s);
+extern int esl_stack_ReleaseCond(ESL_STACK *s);
+#endif
+#endif /*eslSTACK_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_stack.tex b/esl_stack.tex
new file mode 100644
index 0000000..5664950
--- /dev/null
+++ b/esl_stack.tex
@@ -0,0 +1,89 @@
+The stack module implements pushdown stacks for storing integers,
+characters, or arbitrary pointers (objects).
+
+The module uses a convention of prepending \ccode{I}, \ccode{C},
+\ccode{P} to \ccode{Create()}, \ccode{Push()}, and \ccode{Pop()}
+function names, to indicate the stack's datatype as integer,
+character, or pointer, respectively. For example,
+\ccode{esl\_stack\_PCreate()} creates a stack for pointer
+storage. (This is also the naming convention in the \ccode{vectorops}
+module.)  Stacks can be thought of as typed objects, with the type
+defined by the \ccode{Create()} call. Types may not be mixed for any
+particular created stack.
+
+
+% Table generated by autodoc -t esl_stack.c (so don't edit here, edit esl_stack.c:)
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\apisubhead{The \ccode{ESL\_STACK} object.}\\
+\hyperlink{func:esl_stack_ICreate()}{\ccode{esl\_stack\_ICreate()}} & Create an integer stack.\\
+\hyperlink{func:esl_stack_CCreate()}{\ccode{esl\_stack\_CCreate()}} & Create a character stack.\\
+\hyperlink{func:esl_stack_PCreate()}{\ccode{esl\_stack\_PCreate()}} & Create a pointer stack.\\
+\hyperlink{func:esl_stack_Reuse()}{\ccode{esl\_stack\_Reuse()}} & Reuse a stack.\\
+\hyperlink{func:esl_stack_Destroy()}{\ccode{esl\_stack\_Destroy()}} & Free a stack.\\
+\apisubhead{Other functions in the API.}\\
+\hyperlink{func:esl_stack_IPush()}{\ccode{esl\_stack\_IPush()}} & Push an integer onto a stack.\\
+\hyperlink{func:esl_stack_CPush()}{\ccode{esl\_stack\_CPush()}} & Push a char onto a stack.\\
+\hyperlink{func:esl_stack_PPush()}{\ccode{esl\_stack\_PPush()}} & Push a pointer onto a stack.\\
+\hyperlink{func:esl_stack_IPop()}{\ccode{esl\_stack\_IPop()}} & Pop an integer off a stack.\\
+\hyperlink{func:esl_stack_CPop()}{\ccode{esl\_stack\_CPop()}} & Pop a char off a stack.\\
+\hyperlink{func:esl_stack_PPop()}{\ccode{esl\_stack\_PPop()}} & Pop a pointer off a stack.\\
+\hyperlink{func:esl_stack_ObjectCount()}{\ccode{esl\_stack\_ObjectCount()}} & Return the number of objects in a stack.\\
+\hyperlink{func:esl_stack_Convert2String()}{\ccode{esl\_stack\_Convert2String()}} & Convert a char stack to a string.\\
+\hyperlink{func:esl_stack_DiscardTopN()}{\ccode{esl\_stack\_DiscardTopN()}} & Discard the top elements on a stack.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{stack} API.}
+\label{tbl:stack_api}
+\end{table}
+
+\subsection{Example of using the stack API}
+   
+Figure~\ref{fig:stack_example} shows an example of using the integer
+stack, pushing 42, 7, and 3 on, then popping them off.
+
+\begin{figure}
+\input{cexcerpts/stack_example}
+\caption{An example of pushing and popping data onto a stack.}
+\label{fig:stack_example}
+\end{figure}
+
+The \ccode{Create()} functions create a stack for a particular
+purpose. \ccode{esl\_stack\_ICreate()} creates a stack for integers,
+\ccode{esl\_stack\_CCreate()} creates a stack for characters, and
+\ccode{esl\_stack\_PCreate()} creates a stack for pointers.  They
+throw NULL if an allocation fails.  All three stack types are free'd
+by a call to \ccode{esl\_stack\_Destroy()}. All three types can also
+be reused without reallocation or recreation by
+\ccode{esl\_stack\_Reuse()}. A \ccode{Reuse()}'d stack retains its
+original datatype.
+
+The \ccode{Push()} functions push one datum onto the stack, of the
+appropriate type. They throw \ccode{eslEMEM} if the stack needs to
+reallocate internally but fails.
+
+The \ccode{Pop()} functions pop one datum off the stack, returning it
+through a passed pointer. They return \ccode{eslOK} on success, and
+\ccode{eslEOD} if the stack is empty.
+
+\ccode{esl\_stack\_ObjectCount()} returns the number of objects stored
+in the stack. 
+
+A special function, \ccode{esl\_stack\_Convert2String()}, operates
+only on character stacks. It converts the stack structure to a
+NUL-terminated string, with characters in the same order they were
+pushed. The stack is destroyed by this operation, leaving a
+\ccode{char *} behind.
+
+\subsection{Allocation strategy}
+
+Stacks are initially allocated for a certain number of objects,
+defined by a compile-time constant \ccode{ESL\_STACK\_INITALLOC} in
+\ccode{esl\_stack.h}. The default is 128. Whenever a stack needs to grow,
+it reallocates by doubling its current allocation.
+
+
diff --git a/esl_stats.c b/esl_stats.c
new file mode 100644
index 0000000..6ac41ad
--- /dev/null
+++ b/esl_stats.c
@@ -0,0 +1,1171 @@
+/* Foundation and miscellenea for the statistics modules.
+ * 
+ * Contents:
+ *   1. Summary statistics (means, variances)
+ *   2. Special functions
+ *   3. Standard statistical tests
+ *   4. Data fitting.
+ *   5. Unit tests.
+ *   6. Test driver.
+ *   7. Examples.
+ *      - driver for linear regression
+ *      - driver for G-test
+ *   8. License and copyright information.
+ * 
+ */
+#include "esl_config.h"
+
+#include <math.h>
+
+#include "easel.h"
+#include "esl_stats.h"
+
+
+/*****************************************************************
+ * 1. Summary statistics calculations (means, variances)
+ *****************************************************************/
+
+/* Function:  esl_stats_DMean()
+ * Synopsis:  Calculates mean and $\sigma^2$ for samples $x_i$.
+ *
+ * Purpose:   Calculates the sample mean and $s^2$, the unbiased
+ *            estimator of the population variance, for a
+ *            sample of <n> numbers <x[0]..x[n-1]>, and optionally
+ *            returns either or both through <ret_mean> and
+ *            <ret_var>.
+ *            
+ *            <esl_stats_FMean()> and <esl_stats_IMean()> do the same,
+ *            for float and integer vectors.
+ *
+ * Args:      x        - samples x[0]..x[n-1]
+ *            n        - number of samples
+ *            opt_mean - optRETURN: mean
+ *            opt_var  - optRETURN: estimate of population variance       
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_stats_DMean(const double *x, int n, double *opt_mean, double *opt_var)
+{
+  double sum   = 0.;
+  double sqsum = 0.;
+  int i;
+
+  for (i = 0; i < n; i++) 
+    { 
+      sum   += x[i];
+      sqsum += x[i]*x[i];
+    }
+  if (opt_mean != NULL)  *opt_mean = sum / (double) n;
+  if (opt_var  != NULL)  *opt_var  = (sqsum - sum*sum/(double)n) / ((double)n-1);
+  return eslOK;
+}
+int
+esl_stats_FMean(const float *x, int n, double *opt_mean, double *opt_var)
+{
+  double sum   = 0.;
+  double sqsum = 0.;
+  int i;
+
+  for (i = 0; i < n; i++) 
+    { 
+      sum   += x[i];
+      sqsum += x[i]*x[i];
+    }
+  if (opt_mean != NULL)  *opt_mean = sum / (double) n;
+  if (opt_var  != NULL)  *opt_var  = (sqsum - sum*sum/(double)n) / ((double)n-1);
+  return eslOK;
+}
+int
+esl_stats_IMean(const int *x, int n, double *opt_mean, double *opt_var)
+{
+  double sum   = 0.;
+  double sqsum = 0.;
+  int i;
+
+  for (i = 0; i < n; i++) 
+    { 
+      sum   += x[i];
+      sqsum += x[i]*x[i];
+    }
+  if (opt_mean != NULL)  *opt_mean = sum / (double) n;
+  if (opt_var  != NULL)  *opt_var  = (sqsum - sum*sum/(double)n) / ((double)n-1);
+  return eslOK;
+}
+/*--------------- end, summary statistics -----------------------*/
+
+
+
+/*****************************************************************
+ * 2. Special functions.
+ *****************************************************************/
+
+/* Function:  esl_stats_LogGamma()
+ * Synopsis:  Calculates $\log \Gamma(x)$.
+ *
+ * Purpose:   Returns natural log of $\Gamma(x)$, for $x > 0$.
+ * 
+ * Credit:    Adapted from a public domain implementation in the
+ *            NCBI core math library. Thanks to John Spouge and
+ *            the NCBI. (According to NCBI, that's Dr. John
+ *            "Gammas Galore" Spouge to you, pal.)
+ *
+ * Args:      x          : argument, x > 0.0
+ *            ret_answer : RETURN: the answer
+ *
+ * Returns:   Put the answer in <ret_answer>; returns <eslOK>.
+ *            
+ * Throws:    <eslERANGE> if $x <= 0$.
+ */
+int
+esl_stats_LogGamma(double x, double *ret_answer)
+{
+  int i;
+  double xx, tx;
+  double tmp, value;
+  static double cof[11] = {
+     4.694580336184385e+04,
+    -1.560605207784446e+05,
+     2.065049568014106e+05,
+    -1.388934775095388e+05,
+     5.031796415085709e+04,
+    -9.601592329182778e+03,
+     8.785855930895250e+02,
+    -3.155153906098611e+01,
+     2.908143421162229e-01,
+    -2.319827630494973e-04,
+     1.251639670050933e-10
+  };
+  
+  /* Protect against invalid x<=0  */
+  if (x <= 0.0)  ESL_EXCEPTION(eslERANGE, "invalid x <= 0 in esl_stats_LogGamma()");
+
+  xx       = x - 1.0;
+  tx = tmp = xx + 11.0;
+  value    = 1.0;
+  for (i = 10; i >= 0; i--)	/* sum least significant terms first */
+    {
+      value += cof[i] / tmp;
+      tmp   -= 1.0;
+    }
+  value  = log(value);
+  tx    += 0.5;
+  value += 0.918938533 + (xx+0.5)*log(tx) - tx;
+  *ret_answer = value;
+  return eslOK;
+}
+
+
+/* Function:  esl_stats_Psi()
+ * Synopsis:  Calculates $\Psi(x)$ (the digamma function).
+ *
+ * Purpose:   Computes $\Psi(x)$ (the "digamma" function), which is
+ *            the derivative of log of the Gamma function:
+ *            $d/dx \log \Gamma(x) = \frac{\Gamma'(x)}{\Gamma(x)} = \Psi(x)$.
+ *            Argument $x$ is $> 0$. 
+ * 
+ *            This is J.M. Bernardo's "Algorithm AS103",
+ *            Appl. Stat. 25:315-317 (1976).  
+ */
+int
+esl_stats_Psi(double x, double *ret_answer)
+{
+  double answer = 0.;
+  double x2;
+
+  if (x <= 0.0) ESL_EXCEPTION(eslERANGE, "invalid x <= 0 in esl_stats_Psi()");
+  
+  /* For small x, Psi(x) ~= -0.5772 - 1/x + O(x), we're done.
+   */
+  if (x <= 1e-5) {
+    *ret_answer = -eslCONST_EULER - 1./x;
+    return eslOK;
+  }
+
+  /* For medium x, use Psi(1+x) = \Psi(x) + 1/x to c.o.v. x,
+   * big enough for Stirling approximation to work...
+   */
+  while (x < 8.5) {
+    answer = answer - 1./x;
+    x += 1.;
+  }
+  
+  /* For large X, use Stirling approximation
+   */
+  x2 = 1./x;
+  answer += log(x) - 0.5 * x2;
+  x2 = x2*x2;
+  answer -= (1./12.)*x2;
+  answer += (1./120.)*x2*x2;
+  answer -= (1./252.)*x2*x2*x2;
+
+  *ret_answer = answer;
+  return eslOK;
+}
+
+
+
+/* Function: esl_stats_IncompleteGamma()
+ * Synopsis: Calculates the incomplete Gamma function.
+ * 
+ * Purpose:  Returns $P(a,x)$ and $Q(a,x)$ where:
+ *
+ *           \begin{eqnarray*}
+ *             P(a,x) & = & \frac{1}{\Gamma(a)} \int_{0}^{x} t^{a-1} e^{-t} dt \\
+ *                    & = & \frac{\gamma(a,x)}{\Gamma(a)} \\
+ *             Q(a,x) & = & \frac{1}{\Gamma(a)} \int_{x}^{\infty} t^{a-1} e^{-t} dt\\
+ *                    & = & 1 - P(a,x) \\
+ *           \end{eqnarray*}
+ *
+ *           $P(a,x)$ is the CDF of a gamma density with $\lambda = 1$,
+ *           and $Q(a,x)$ is the survival function.
+ *           
+ *           For $x \simeq 0$, $P(a,x) \simeq 0$ and $Q(a,x) \simeq 1$; and
+ *           $P(a,x)$ is less prone to roundoff error. 
+ *           
+ *           The opposite is the case for large $x >> a$, where
+ *           $P(a,x) \simeq 1$ and $Q(a,x) \simeq 0$; there, $Q(a,x)$ is
+ *           less prone to roundoff error.
+ *
+ * Method:   Based on ideas from Numerical Recipes in C, Press et al.,
+ *           Cambridge University Press, 1988. 
+ *           
+ * Args:     a          - for instance, degrees of freedom / 2     [a > 0]
+ *           x          - for instance, chi-squared statistic / 2  [x >= 0] 
+ *           ret_pax    - RETURN: P(a,x)
+ *           ret_qax    - RETURN: Q(a,x)
+ *
+ * Return:   <eslOK> on success.
+ *
+ * Throws:   <eslERANGE> if <a> or <x> is out of accepted range.
+ *           <eslENOHALT> if approximation fails to converge.
+ */          
+int
+esl_stats_IncompleteGamma(double a, double x, double *ret_pax, double *ret_qax)
+{
+  int    iter;			/* iteration counter */
+  double pax;			/* P(a,x) */
+  double qax;			/* Q(a,x) */
+  int    status;
+
+  if (a <= 0.) ESL_EXCEPTION(eslERANGE, "esl_stats_IncompleteGamma(): a must be > 0");
+  if (x <  0.) ESL_EXCEPTION(eslERANGE, "esl_stats_IncompleteGamma(): x must be >= 0");
+
+  /* For x > a + 1 the following gives rapid convergence;
+   * calculate Q(a,x) = \frac{\Gamma(a,x)}{\Gamma(a)},
+   * using a continued fraction development for \Gamma(a,x).
+   */
+  if (x > a+1) 
+    {
+      double oldp;		/* previous value of p    */
+      double nu0, nu1;		/* numerators for continued fraction calc   */
+      double de0, de1;		/* denominators for continued fraction calc */
+
+      nu0 = 0.;			/* A_0 = 0       */
+      de0 = 1.;			/* B_0 = 1       */
+      nu1 = 1.;			/* A_1 = 1       */
+      de1 = x;			/* B_1 = x       */
+
+      oldp = nu1;
+      for (iter = 1; iter < 100; iter++)
+	{
+	  /* Continued fraction development:
+	   * set A_j = b_j A_j-1 + a_j A_j-2
+	   *     B_j = b_j B_j-1 + a_j B_j-2
+           * We start with A_2, B_2.
+	   */
+				/* j = even: a_j = iter-a, b_j = 1 */
+				/* A,B_j-2 are in nu0, de0; A,B_j-1 are in nu1,de1 */
+	  nu0 = nu1 + ((double)iter - a) * nu0;
+	  de0 = de1 + ((double)iter - a) * de0;
+				/* j = odd: a_j = iter, b_j = x */
+				/* A,B_j-2 are in nu1, de1; A,B_j-1 in nu0,de0 */
+	  nu1 = x * nu0 + (double) iter * nu1;
+	  de1 = x * de0 + (double) iter * de1;
+				/* rescale */
+	  if (de1 != 0.) 
+	    { 
+	      nu0 /= de1; 
+	      de0 /= de1;
+	      nu1 /= de1;
+	      de1 =  1.;
+	    }
+				/* check for convergence */
+	  if (fabs((nu1-oldp)/nu1) < 1.e-7)
+	    {
+	      if ((status = esl_stats_LogGamma(a, &qax)) != eslOK) return status;	      
+	      qax = nu1 * exp(a * log(x) - x - qax);
+
+	      if (ret_pax != NULL) *ret_pax = 1 - qax;
+	      if (ret_qax != NULL) *ret_qax = qax;
+	      return eslOK;
+	    }
+
+	  oldp = nu1;
+	}
+      ESL_EXCEPTION(eslENOHALT,
+		"esl_stats_IncompleteGamma(): fraction failed to converge");
+    }
+  else /* x <= a+1 */
+    {
+      double p;			/* current sum               */
+      double val;		/* current value used in sum */
+
+      /* For x <= a+1 we use a convergent series instead:
+       *   P(a,x) = \frac{\gamma(a,x)}{\Gamma(a)},
+       * where
+       *   \gamma(a,x) = e^{-x}x^a \sum_{n=0}{\infty} \frac{\Gamma{a}}{\Gamma{a+1+n}} x^n
+       * which looks appalling but the sum is in fact rearrangeable to
+       * a simple series without the \Gamma functions:
+       *   = \frac{1}{a} + \frac{x}{a(a+1)} + \frac{x^2}{a(a+1)(a+2)} ...
+       * and it's obvious that this should converge nicely for x <= a+1.
+       */
+      p = val = 1. / a;
+      for (iter = 1; iter < 10000; iter++)
+	{
+	  val *= x / (a+(double)iter);
+	  p   += val;
+	  
+	  if (fabs(val/p) < 1.e-7)
+	    {
+	      if ((status = esl_stats_LogGamma(a, &pax)) != eslOK) return status;
+	      pax = p * exp(a * log(x) - x - pax);
+
+	      if (ret_pax != NULL) *ret_pax = pax;
+	      if (ret_qax != NULL) *ret_qax = 1. - pax;
+	      return eslOK;
+	    }
+	}
+      ESL_EXCEPTION(eslENOHALT,
+		"esl_stats_IncompleteGamma(): series failed to converge");
+    }
+  /*NOTREACHED*/
+  return eslOK;
+}
+
+
+/* Function:  esl_stats_erfc()
+ * Synopsis:  Complementary error function.
+ *
+ * Purpose:   Calculate and return the complementary error function, 
+ *            erfc(x).
+ *            
+ *            erfc(x) is mandated by the ANSI C99 standard but that
+ *            doesn't mean it's available on supposedly modern systems
+ *            (looking at you here, Microsoft).
+ *            
+ *            Used for cumulative distribution function calculations
+ *            for the normal (Gaussian) distribution. See <esl_normal>
+ *            module.
+ *            
+ *            erfc(-inf) = 2.0
+ *            erfc(0)    = 1.0
+ *            erfc(inf)  = 0.0
+ *            erfc(NaN)  = NaN
+ *
+ * Args:      x : any real-numbered value -inf..inf
+ *
+ * Returns:   erfc(x)
+ *
+ * Throws:    (no abnormal error conditions)
+ *
+ * Source:
+ *    Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 
+ *    Developed at SunPro, a Sun Microsystems, Inc. business.
+ *    Permission to use, copy, modify, and distribute this software is
+ *    freely granted, provided that this notice is preserved.
+ *    [as posted by eggcrook at stackexchange.com, 21 Dec 2012]
+ *    
+ *    Removed arcane incantations for runtime detection of endianness,
+ *    and for treating IEEE754 doubles as two adjacent uint32_t;
+ *    replaced with ANSI-compliant macros and compile-time detection
+ *    of endianness. [Apr 2015]
+ */
+double
+esl_stats_erfc(double x)
+{
+  static const double tiny = 1e-300;
+  static const double half = 5.00000000000000000000e-01; /* 0x3FE00000, 0x00000000 */
+  static const double one  = 1.00000000000000000000e+00; /* 0x3FF00000, 0x00000000 */
+  static const double two  = 2.00000000000000000000e+00; /* 0x40000000, 0x00000000 */
+  static const double erx  = 8.45062911510467529297e-01; /* 0x3FEB0AC1, 0x60000000 */
+  /*
+   * Coefficients for approximation to erf on [0,0.84375]
+   */
+  static const double pp0 =  1.28379167095512558561e-01; /* 0x3FC06EBA, 0x8214DB68 */
+  static const double pp1 = -3.25042107247001499370e-01; /* 0xBFD4CD7D, 0x691CB913 */
+  static const double pp2 = -2.84817495755985104766e-02; /* 0xBF9D2A51, 0xDBD7194F */
+  static const double pp3 = -5.77027029648944159157e-03; /* 0xBF77A291, 0x236668E4 */
+  static const double pp4 = -2.37630166566501626084e-05; /* 0xBEF8EAD6, 0x120016AC */
+  static const double qq1 =  3.97917223959155352819e-01; /* 0x3FD97779, 0xCDDADC09 */
+  static const double qq2 =  6.50222499887672944485e-02; /* 0x3FB0A54C, 0x5536CEBA */
+  static const double qq3 =  5.08130628187576562776e-03; /* 0x3F74D022, 0xC4D36B0F */
+  static const double qq4 =  1.32494738004321644526e-04; /* 0x3F215DC9, 0x221C1A10 */
+  static const double qq5 = -3.96022827877536812320e-06; /* 0xBED09C43, 0x42A26120 */
+  /*
+   * Coefficients for approximation to erf in [0.84375,1.25]
+   */
+  static const double pa0 = -2.36211856075265944077e-03; /* 0xBF6359B8, 0xBEF77538 */
+  static const double pa1 =  4.14856118683748331666e-01; /* 0x3FDA8D00, 0xAD92B34D */
+  static const double pa2 = -3.72207876035701323847e-01; /* 0xBFD7D240, 0xFBB8C3F1 */
+  static const double pa3 =  3.18346619901161753674e-01; /* 0x3FD45FCA, 0x805120E4 */
+  static const double pa4 = -1.10894694282396677476e-01; /* 0xBFBC6398, 0x3D3E28EC */
+  static const double pa5 =  3.54783043256182359371e-02; /* 0x3FA22A36, 0x599795EB */
+  static const double pa6 = -2.16637559486879084300e-03; /* 0xBF61BF38, 0x0A96073F */
+  static const double qa1 =  1.06420880400844228286e-01; /* 0x3FBB3E66, 0x18EEE323 */
+  static const double qa2 =  5.40397917702171048937e-01; /* 0x3FE14AF0, 0x92EB6F33 */
+  static const double qa3 =  7.18286544141962662868e-02; /* 0x3FB2635C, 0xD99FE9A7 */
+  static const double qa4 =  1.26171219808761642112e-01; /* 0x3FC02660, 0xE763351F */
+  static const double qa5 =  1.36370839120290507362e-02; /* 0x3F8BEDC2, 0x6B51DD1C */
+  static const double qa6 =  1.19844998467991074170e-02; /* 0x3F888B54, 0x5735151D */
+  /*
+   * Coefficients for approximation to erfc in [1.25,1/0.35]
+   */
+  static const double ra0 = -9.86494403484714822705e-03; /* 0xBF843412, 0x600D6435 */
+  static const double ra1 = -6.93858572707181764372e-01; /* 0xBFE63416, 0xE4BA7360 */
+  static const double ra2 = -1.05586262253232909814e+01; /* 0xC0251E04, 0x41B0E726 */
+  static const double ra3 = -6.23753324503260060396e+01; /* 0xC04F300A, 0xE4CBA38D */
+  static const double ra4 = -1.62396669462573470355e+02; /* 0xC0644CB1, 0x84282266 */
+  static const double ra5 = -1.84605092906711035994e+02; /* 0xC067135C, 0xEBCCABB2 */
+  static const double ra6 = -8.12874355063065934246e+01; /* 0xC0545265, 0x57E4D2F2 */
+  static const double ra7 = -9.81432934416914548592e+00; /* 0xC023A0EF, 0xC69AC25C */
+  static const double sa1 =  1.96512716674392571292e+01; /* 0x4033A6B9, 0xBD707687 */
+  static const double sa2 =  1.37657754143519042600e+02; /* 0x4061350C, 0x526AE721 */
+  static const double sa3 =  4.34565877475229228821e+02; /* 0x407B290D, 0xD58A1A71 */
+  static const double sa4 =  6.45387271733267880336e+02; /* 0x40842B19, 0x21EC2868 */
+  static const double sa5 =  4.29008140027567833386e+02; /* 0x407AD021, 0x57700314 */
+  static const double sa6 =  1.08635005541779435134e+02; /* 0x405B28A3, 0xEE48AE2C */
+  static const double sa7 =  6.57024977031928170135e+00; /* 0x401A47EF, 0x8E484A93 */
+  static const double sa8 = -6.04244152148580987438e-02; /* 0xBFAEEFF2, 0xEE749A62 */
+  /*
+   * Coefficients for approximation to erfc in [1/.35,28]
+   */
+  static const double rb0 = -9.86494292470009928597e-03; /* 0xBF843412, 0x39E86F4A */
+  static const double rb1 = -7.99283237680523006574e-01; /* 0xBFE993BA, 0x70C285DE */
+  static const double rb2 = -1.77579549177547519889e+01; /* 0xC031C209, 0x555F995A */
+  static const double rb3 = -1.60636384855821916062e+02; /* 0xC064145D, 0x43C5ED98 */
+  static const double rb4 = -6.37566443368389627722e+02; /* 0xC083EC88, 0x1375F228 */
+  static const double rb5 = -1.02509513161107724954e+03; /* 0xC0900461, 0x6A2E5992 */
+  static const double rb6 = -4.83519191608651397019e+02; /* 0xC07E384E, 0x9BDC383F */
+  static const double sb1 =  3.03380607434824582924e+01; /* 0x403E568B, 0x261D5190 */
+  static const double sb2 =  3.25792512996573918826e+02; /* 0x40745CAE, 0x221B9F0A */
+  static const double sb3 =  1.53672958608443695994e+03; /* 0x409802EB, 0x189D5118 */
+  static const double sb4 =  3.19985821950859553908e+03; /* 0x40A8FFB7, 0x688C246A */
+  static const double sb5 =  2.55305040643316442583e+03; /* 0x40A3F219, 0xCEDF3BE6 */
+  static const double sb6 =  4.74528541206955367215e+02; /* 0x407DA874, 0xE79FE763 */
+  static const double sb7 = -2.24409524465858183362e+01; /* 0xC03670E2, 0x42712D62 */
+
+  int hx,ix;
+  double R,S,P,Q,s,y,z,r;
+
+  ESL_GET_HIGHWORD(hx, x);  // SRE: replaced original Sun incantation here.
+  ix = hx & 0x7fffffff;
+  if (ix>=0x7ff00000) /* erfc(nan)=nan; erfc(+-inf)=0,2 */
+    return (double)(((unsigned)hx>>31)<<1)+one/x;
+
+  if (ix < 0x3feb0000)  /* |x|<0.84375 */
+    {
+      if (ix < 0x3c700000) return one-x; /* |x|<2**-56 */
+      z = x*x;
+      r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4)));
+      s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5))));
+      y = r/s;
+      if (hx < 0x3fd00000) /* x<1/4 */
+	{ 
+	  return one-(x+x*y);
+	} 
+      else 
+	{
+	  r = x*y;
+	  r += (x-half);
+	  return half - r ;
+	}
+    }
+
+  if (ix < 0x3ff40000) /* 0.84375 <= |x| < 1.25 */
+    { 
+      s = fabs(x)-one;
+      P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6)))));
+      Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6)))));
+      if (hx>=0) 
+	{
+	  z = one-erx; 
+	  return z - P/Q;
+	}
+      else 
+	{
+	  z = erx+P/Q;
+	  return one+z;
+	}
+    }
+
+  if (ix < 0x403c0000) /* |x|<28 */
+    { 
+      x = fabs(x);
+      s = one/(x*x);
+      if (ix< 0x4006DB6D) /* |x| < 1/.35 ~ 2.857143*/ 
+	{ 
+	  R = ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(ra5+s*(ra6+s*ra7))))));
+	  S = one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(sa5+s*(sa6+s*(sa7+s*sa8)))))));
+	}
+      else  /* |x| >= 1/.35 ~ 2.857143 */
+	{
+	  if (hx < 0 && ix >= 0x40180000) return two-tiny; /* x < -6 */
+	  R = rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(rb5+s*rb6)))));
+	  S = one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(sb5+s*(sb6+s*sb7))))));
+	}
+      z = x;
+      ESL_SET_LOWWORD(z, 0);  // SRE: replaced original Sun incantation here.
+      r = exp(-z*z-0.5625) * exp((z-x)*(z+x)+R/S);
+
+      if (hx>0) return r/x;
+      else      return two-r/x;
+    } 
+  else 
+    {
+      if (hx>0) return tiny*tiny; 
+      else      return two-tiny;
+    }
+}
+/*----------------- end, special functions ----------------------*/
+
+
+/*****************************************************************
+ * 3. Standard statistical tests.
+ *****************************************************************/
+
+/* Function:  esl_stats_GTest()
+ * Synopsis:  Calculates a G-test on 2 vs. 1 binomials.
+ *
+ * Purpose:   In experiment a, we've drawn <ca> successes in <na> total
+ *            trials; in experiment b, we've drawn <cb> successes in
+ *            <nb> total trials. Are the counts different enough to
+ *            conclude that the two experiments are different? The
+ *            null hypothesis is that the successes in both experiments
+ *            were drawn from the same binomial distribution with
+ *            per-trial probability $p$. The tested hypothesis is that
+ *            experiments a,b have different binomial probabilities
+ *            $p_a,p_b$. The G-test is a log-likelihood-ratio statistic,
+ *            assuming maximum likelihood values for $p,p_a,p_b$. 
+ *            $2G$ is distributed approximately as $X^2(1)$,
+ *            %"X" is "Chi"
+ *            which we use to calculate a P-value for the G statistic.
+ *            
+ * Args:      ca    - number of positives in experiment a
+ *            na    - total number in experiment a
+ *            cb    - number of positives in experiment b
+ *            nb    - total number in experiment b
+ *            ret_G - RETURN: G statistic, a log likelihood ratio, in nats     
+ *            ret_P - RETURN: P-value for the G-statistic
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ *
+ * Xref:      Archive1999/0906-sagescore/sagescore.c
+ */
+int
+esl_stats_GTest(int ca, int na, int cb, int nb, double *ret_G, double *ret_P)
+{
+  double a,b,c,d,n;
+  double G = 0.;
+
+  a = (double) ca;
+  b = (double) (na - ca);
+  c = (double) cb;
+  d = (double) (nb - cb);
+  n = (double) na+nb;
+
+  /* Yes, the calculation here is correct; algebraic 
+   * rearrangement of the log-likelihood-ratio with 
+   * p_a = ca/na, p_b = cb/nb, and p = (ca+cb)/(na+nb).
+   * Guard against 0 probabilities; assume 0 log 0 => 0. 
+   */
+  if (a   > 0.) G  = a * log(a);
+  if (b   > 0.) G += b * log(b);
+  if (c   > 0.) G += c * log(c);
+  if (d   > 0.) G += d * log(d);
+  if (n   > 0.) G += n * log(n);
+  if (a+b > 0.) G -= (a+b) * log(a+b);
+  if (c+d > 0.) G -= (c+d) * log(c+d);
+  if (a+c > 0.) G -= (a+c) * log(a+c);
+  if (b+d > 0.) G -= (b+d) * log(b+d);
+
+  *ret_G = G;
+  return esl_stats_IncompleteGamma( 0.5, G, NULL, ret_P);
+}
+
+
+/* Function:  esl_stats_ChiSquaredTest()
+ * Synopsis:  Calculates a $\chi^2$ P-value.
+ * Incept:    SRE, Tue Jul 19 11:39:32 2005 [St. Louis]
+ *
+ * Purpose:   Calculate the probability that a chi-squared statistic
+ *            with <v> degrees of freedom would exceed the observed
+ *            chi-squared value <x>; return it in <ret_answer>. If
+ *            this probability is less than some small threshold (say,
+ *            0.05 or 0.01), then we may reject the hypothesis we're
+ *            testing.
+ *
+ * Args:      v          - degrees of freedom
+ *            x          - observed chi-squared value
+ *            ret_answer - RETURN: P(\chi^2 > x)
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslERANGE> if <v> or <x> are out of valid range.
+ *            <eslENOHALT> if iterative calculation fails.
+ */
+int
+esl_stats_ChiSquaredTest(int v, double x, double *ret_answer)
+{
+  return esl_stats_IncompleteGamma((double)v/2., x/2., NULL, ret_answer);
+}
+/*----------------- end, statistical tests  ---------------------*/
+
+
+
+/*****************************************************************
+ * 4. Data fitting.
+ *****************************************************************/
+
+/* Function:  esl_stats_LinearRegression()
+ * Synopsis:  Fit data to a straight line.
+ * Incept:    SRE, Sat May 26 11:33:46 2007 [Janelia]
+ *
+ * Purpose:   Fit <n> points <x[i]>, <y[i]> to a straight line
+ *            $y = a + bx$ by linear regression. 
+ *            
+ *            The $x_i$ are taken to be known, and the $y_i$ are taken
+ *            to be observed quantities associated with a sampling
+ *            error $\sigma_i$. If known, the standard deviations
+ *            $\sigma_i$ for $y_i$ are provided in the <sigma> array.
+ *            If they are unknown, pass <sigma = NULL>, and the
+ *            routine will proceed with the assumption that $\sigma_i
+ *            = 1$ for all $i$.
+ *            
+ *            The maximum likelihood estimates for $a$ and $b$ are
+ *            optionally returned in <opt_a> and <opt_b>.
+ *            
+ *            The estimated standard deviations of $a$ and $b$ and
+ *            their estimated covariance are optionally returned in
+ *            <opt_sigma_a>, <opt_sigma_b>, and <opt_cov_ab>.
+ *            
+ *            The Pearson correlation coefficient is optionally
+ *            returned in <opt_cc>. 
+ *            
+ *            The $\chi^2$ P-value for the regression fit is
+ *            optionally returned in <opt_Q>. This P-value may only be
+ *            obtained when the $\sigma_i$ are known. If <sigma> is
+ *            passed as <NULL> and <opt_Q> is requested, <*opt_Q> is
+ *            set to 1.0.
+ *            
+ *            This routine follows the description and algorithm in
+ *            \citep[pp.661-666]{Press93}.
+ *
+ *            <n> must be greater than 2; at least two x[i] must
+ *            differ; and if <sigma> is provided, all <sigma[i]> must
+ *            be $>0$. If any of these conditions isn't met, the
+ *            routine throws <eslEINVAL>.
+ *
+ * Args:      x            - x[0..n-1]
+ *            y            - y[0..n-1]
+ *            sigma        - sample error in observed y_i
+ *            n            - number of data points
+ *            opt_a        - optRETURN: intercept estimate		
+ *            opt_b        - optRETURN: slope estimate
+ *            opt_sigma_a  - optRETURN: error in estimate of a
+ *            opt_sigma_b  - optRETURN: error in estimate of b
+ *            opt_cov_ab   - optRETURN: covariance of a,b estimates
+ *            opt_cc       - optRETURN: Pearson correlation coefficient for x,y
+ *            opt_Q        - optRETURN: X^2 P-value for linear fit
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error;
+ *            <eslEINVAL> if a contract condition isn't met;
+ *            <eslENORESULT> if the chi-squared test fails.
+ *            In these cases, all optional return values are set to 0.
+ */
+int
+esl_stats_LinearRegression(const double *x, const double *y, const double *sigma, int n,
+			   double *opt_a,       double *opt_b,
+			   double *opt_sigma_a, double *opt_sigma_b, double *opt_cov_ab,
+			   double *opt_cc,      double *opt_Q)
+{
+  int     status;
+  double *t      = NULL;
+  double  S, Sx, Sy, Stt;
+  double  Sxy, Sxx, Syy;
+  double  a, b, sigma_a, sigma_b, cov_ab, cc, X2, Q;
+  double  xdev, ydev;
+  double  tmp;
+  int     i;
+
+  /* Contract checks. */
+  if (n <= 2) ESL_XEXCEPTION(eslEINVAL, "n must be > 2 for linear regression fitting");
+  if (sigma != NULL) 
+    for (i = 0; i < n; i++) if (sigma[i] <= 0.) ESL_XEXCEPTION(eslEINVAL, "sigma[%d] <= 0", i);
+  status = eslEINVAL;
+  for (i = 0; i < n; i++) if (x[i] != 0.) { status = eslOK; break; }
+  if (status != eslOK) ESL_XEXCEPTION(eslEINVAL, "all x[i] are 0.");
+
+  /* Allocations */
+  ESL_ALLOC(t, sizeof(double) * n);
+
+  /* S = \sum_{i=1}{n} \frac{1}{\sigma_i^2}.  (S > 0.) */
+  if (sigma != NULL) { for (S = 0., i = 0; i < n; i++) S += 1./ (sigma[i] * sigma[i]);  }
+  else S = (double) n;
+
+  /* S_x = \sum_{i=1}{n} \frac{x[i]}{ \sigma_i^2}  (Sx real.) */
+  for (Sx = 0., i = 0; i < n; i++) { 
+    if (sigma == NULL) Sx += x[i];
+    else               Sx += x[i] / (sigma[i] * sigma[i]);
+  }
+
+  /* S_y = \sum_{i=1}{n} \frac{y[i]}{\sigma_i^2}  (Sy real.) */
+  for (Sy = 0., i = 0; i < n; i++) { 
+    if (sigma == NULL) Sy += y[i];
+    else               Sy += y[i] / (sigma[i] * sigma[i]);
+  }
+
+  /* t_i = \frac{1}{\sigma_i} \left( x_i - \frac{S_x}{S} \right)   (t_i real) */
+  for (i = 0; i < n; i++) {
+    t[i] = x[i] - Sx/S;
+    if (sigma != NULL) t[i] /= sigma[i];
+  }
+
+  /* S_{tt} = \sum_{i=1}^n t_i^2  (if at least one x is != 0, Stt > 0) */
+  for (Stt = 0., i = 0; i < n; i++) { Stt += t[i] * t[i]; }
+
+  /* b = \frac{1}{S_{tt}} \sum_{i=1}^{N} \frac{t_i y_i}{\sigma_i}  */
+  for (b = 0., i = 0; i < n; i++) {
+    if (sigma != NULL) { b += t[i]*y[i] / sigma[i]; }
+    else               { b += t[i]*y[i]; }
+  }
+  b /= Stt;
+
+  /* a = \frac{ S_y - S_x b } {S}   */
+  a = (Sy - Sx * b) / S;
+  
+  /* \sigma_a^2 = \frac{1}{S} \left( 1 + \frac{ S_x^2 }{S S_{tt}} \right) */
+  sigma_a = sqrt ((1. + (Sx*Sx) / (S*Stt)) / S);
+
+  /* \sigma_b = \frac{1}{S_{tt}} */
+  sigma_b = sqrt (1. / Stt);
+
+  /* Cov(a,b) = - \frac{S_x}{S S_{tt}}    */
+  cov_ab = -Sx / (S * Stt);
+  
+  /* Pearson correlation coefficient */
+  Sxy = Sxx = Syy = 0.;
+  for (i = 0; i < n; i++) {
+    if (sigma != NULL) { 
+      xdev = (x[i] / (sigma[i] * sigma[i])) - (Sx / n);
+      ydev = (y[i] / (sigma[i] * sigma[i])) - (Sy / n);
+    } else {
+      xdev = x[i] - (Sx / n);
+      ydev = y[i] - (Sy / n);
+    }
+    Sxy += xdev * ydev;
+    Sxx += xdev * xdev;
+    Syy += ydev * ydev;
+  }
+  cc = Sxy / (sqrt(Sxx) * sqrt(Syy));
+
+  /* \chi^2 */
+  for (X2 = 0., i = 0; i < n; i++) {
+    tmp =  y[i] - a - b*x[i];
+    if (sigma != NULL) tmp /= sigma[i];
+    X2 += tmp*tmp;
+  }
+  
+  /* We can calculate a goodness of fit if we know the \sigma_i */
+  if (sigma != NULL) {
+    if (esl_stats_ChiSquaredTest(n-2, X2, &Q) != eslOK) { status = eslENORESULT; goto ERROR; }
+  } else Q = 1.0;
+
+  /* If we didn't use \sigma_i, adjust the sigmas for a,b */
+  if (sigma == NULL) {
+    tmp = sqrt(X2 / (double)(n-2));
+    sigma_a *= tmp;
+    sigma_b *= tmp;
+  }
+    
+  /* Done. Set up for normal return.
+   */
+  free(t);
+  if (opt_a       != NULL) *opt_a       = a;
+  if (opt_b       != NULL) *opt_b       = b;
+  if (opt_sigma_a != NULL) *opt_sigma_a = sigma_a;
+  if (opt_sigma_b != NULL) *opt_sigma_b = sigma_b;
+  if (opt_cov_ab  != NULL) *opt_cov_ab  = cov_ab;
+  if (opt_cc      != NULL) *opt_cc      = cc;
+  if (opt_Q       != NULL) *opt_Q       = Q;
+  return eslOK;
+  
+ ERROR:
+  if (t != NULL) free(t);
+  if (opt_a       != NULL) *opt_a       = 0.;
+  if (opt_b       != NULL) *opt_b       = 0.;
+  if (opt_sigma_a != NULL) *opt_sigma_a = 0.;
+  if (opt_sigma_b != NULL) *opt_sigma_b = 0.;
+  if (opt_cov_ab  != NULL) *opt_cov_ab  = 0.;
+  if (opt_cc      != NULL) *opt_cc      = 0.;
+  if (opt_Q       != NULL) *opt_Q       = 0.;
+  return status;
+}
+/*------------------- end, data fitting -------------------------*/
+
+
+
+/*****************************************************************
+ * 5. Unit tests.
+ *****************************************************************/
+#ifdef eslSTATS_TESTDRIVE
+#include "esl_random.h"
+#include "esl_stopwatch.h"
+#ifdef HAVE_LIBGSL 
+#include <gsl/gsl_sf_gamma.h>
+#endif
+
+
+/* Macros for treating IEEE754 double as two uint32_t halves, with
+ * compile-time handling of endianness; see esl_stats.h.
+ */
+static void
+utest_doublesplitting(ESL_RANDOMNESS *rng)
+{
+  char     msg[] = "esl_stats:: doublesplitting unit test failed";
+  uint32_t ix0, ix1;
+  double   x;
+  double   x2;
+  int      iteration;  // iteration 0 uses x = 2; iteration 1 uses random x = [0,1).
+
+  for (iteration = 0; iteration < 2; iteration++)
+    {
+      x = (iteration == 0 ? 2.0 : esl_random(rng));
+      ESL_GET_WORDS(ix0, ix1, x);
+      ESL_SET_WORDS(x2, ix0, ix1);
+      if (x2 != x) esl_fatal(msg);
+
+      ESL_GET_HIGHWORD(ix0, x);
+      ESL_SET_HIGHWORD(x2,  ix0);
+      if (x2 != x) esl_fatal(msg);
+
+      ESL_GET_LOWWORD(ix0, x);
+      ESL_SET_LOWWORD(x2,  ix0);
+      if (iteration == 0 && ix0 != 0)   esl_fatal(msg);
+      if (x2  != x) esl_fatal(msg);
+    }
+}
+  
+/* The LogGamma() function is rate-limiting in hmmbuild, because it is
+ * used so heavily in mixture Dirichlet calculations.
+ *    ./configure --with-gsl; [compile test driver]
+ *    ./stats_utest -v
+ * runs a comparison of time/precision against GSL.
+ * SRE, Sat May 23 10:04:41 2009, on home Mac:
+ *     LogGamma       = 1.29u  / N=1e8  =  13 nsec/call
+ *     gsl_sf_lngamma = 1.43u  / N=1e8  =  14 nsec/call
+ */
+static void
+utest_LogGamma(ESL_RANDOMNESS *r, int N, int be_verbose)
+{
+  char          *msg = "esl_stats_LogGamma() unit test failed";
+  ESL_STOPWATCH *w   = esl_stopwatch_Create();
+  double        *x   = malloc(sizeof(double) * N);
+  double        *lg  = malloc(sizeof(double) * N);
+  double        *lg2 = malloc(sizeof(double) * N);
+  int            i;
+
+  for (i = 0; i < N; i++) 
+    x[i] = esl_random(r) * 100.;
+  
+  esl_stopwatch_Start(w);
+  for (i = 0; i < N; i++) 
+    if (esl_stats_LogGamma(x[i], &(lg[i])) != eslOK) esl_fatal(msg);
+  esl_stopwatch_Stop(w);
+
+  if (be_verbose) esl_stopwatch_Display(stdout, w, "esl_stats_LogGamma() timing: ");
+
+#ifdef HAVE_LIBGSL
+  esl_stopwatch_Start(w);
+  for (i = 0; i < N; i++) lg2[i] = gsl_sf_lngamma(x[i]);
+  esl_stopwatch_Stop(w);
+
+  if (be_verbose) esl_stopwatch_Display(stdout, w, "gsl_sf_lngamma() timing:     ");
+  
+  for (i = 0; i < N; i++)
+    if (esl_DCompare(lg[i], lg2[i], 1e-2) != eslOK) esl_fatal(msg);
+#endif
+  
+  free(lg2);
+  free(lg);
+  free(x);
+  esl_stopwatch_Destroy(w);
+}
+
+
+/* The test of esl_stats_LinearRegression() is a statistical test,
+ * so we can't be too aggressive about testing results. 
+ * 
+ * Args:
+ *    r          - a source of randomness
+ *    use_sigma  - TRUE to pass sigma to the regression fit.
+ *    be_verbose - TRUE to print results (manual, not automated test mode)
+ */
+static void
+utest_LinearRegression(ESL_RANDOMNESS *r, int use_sigma, int be_verbose)
+{
+  char msg[] = "linear regression unit test failed";
+  double a     = -3.;
+  double b     = 1.;
+  int    n     = 100;
+  double xori  = -20.;
+  double xstep = 1.0;
+  double setsigma = 1.0;		/* sigma on all points */
+  int    i;
+  double *x     = NULL;
+  double *y     = NULL;
+  double *sigma = NULL;
+  double  ae, be, siga, sigb, cov_ab, cc, Q;
+  
+  if ((x     = malloc(sizeof(double) * n)) == NULL) esl_fatal(msg);
+  if ((y     = malloc(sizeof(double) * n)) == NULL) esl_fatal(msg);
+  if ((sigma = malloc(sizeof(double) * n)) == NULL) esl_fatal(msg);
+  
+  /* Simulate some linear data */
+  for (i = 0; i < n; i++)
+    {
+      sigma[i] = setsigma;
+      x[i]     = xori + i*xstep;
+      y[i]     = esl_rnd_Gaussian(r, a + b*x[i], sigma[i]);
+    }
+  
+  if (use_sigma) {
+    if (esl_stats_LinearRegression(x, y, sigma, n, &ae, &be, &siga, &sigb, &cov_ab, &cc, &Q) != eslOK) esl_fatal(msg);
+  } else {
+    if (esl_stats_LinearRegression(x, y,  NULL, n, &ae, &be, &siga, &sigb, &cov_ab, &cc, &Q) != eslOK) esl_fatal(msg);
+  }
+
+  if (be_verbose) {
+    printf("Linear regression test:\n");
+    printf("estimated intercept a = %8.4f   [true = %8.4f]\n", ae, a);
+    printf("estimated slope b     = %8.4f   [true = %8.4f]\n", be, b);
+    printf("estimated sigma on a  = %8.4f\n",                  siga);
+    printf("estimated sigma on b  = %8.4f\n",                  sigb);
+    printf("estimated cov(a,b)    = %8.4f\n",                  cov_ab);
+    printf("correlation coeff     = %8.4f\n",                  cc);
+    printf("P-value               = %8.4f\n",                  Q);
+  }
+
+  /* The following tests are statistical.
+   */
+  if ( fabs(ae-a) > 2*siga ) esl_fatal(msg);
+  if ( fabs(be-b) > 2*sigb ) esl_fatal(msg);
+  if ( cc < 0.95)            esl_fatal(msg);
+  if (use_sigma) {
+    if (Q < 0.001)           esl_fatal(msg);
+  } else {
+    if (Q != 1.0)            esl_fatal(msg);
+  }
+
+  free(x);
+  free(y);
+  free(sigma);
+}
+
+static void
+utest_erfc(ESL_RANDOMNESS *rng, int be_verbose)
+{
+  char   msg[] = "esl_stats:: erfc unit test failed";
+  double x;
+  double result;
+  int    i;
+
+  if (be_verbose) {
+    printf("#--------------------------\n");
+    printf("# erfc unit testing...\n");
+  }
+
+  result = esl_stats_erfc( eslNaN);
+  if (! isnan(result)) esl_fatal(msg);
+  if (esl_stats_erfc(-eslINFINITY) != 2.0)    esl_fatal(msg);
+  if (esl_stats_erfc( 0.0)         != 1.0)    esl_fatal(msg);
+  if (esl_stats_erfc( eslINFINITY) != 0.0)    esl_fatal(msg);
+
+  for (i = 0; i < 42; i++)
+    {
+      x      = esl_random(rng) * 10. - 5.;
+      result = esl_stats_erfc(x);
+      if (!isfinite(result)) esl_fatal(msg);
+#ifdef HAVE_ERFC
+      if (esl_DCompare(result, erfc(x), 1e-6) != eslOK) esl_fatal(msg);
+      if (be_verbose)
+	printf("%15f %15f %15f\n", x, result, erfc(x));
+#endif
+    }
+  
+  if (be_verbose)
+    printf("#--------------------------\n");
+  return;
+}
+
+#endif /*eslSTATS_TESTDRIVE*/
+/*-------------------- end of unit tests ------------------------*/
+
+
+
+
+/*****************************************************************
+ * 6. Test driver.
+ *****************************************************************/
+#ifdef eslSTATS_TESTDRIVE
+/* gcc -g -Wall -o stats_utest  -L. -I. -DeslSTATS_TESTDRIVE esl_stats.c -leasel -lm
+ * gcc -DHAVE_LIBGSL -O2 -o stats_utest -L. -I. -DeslSTATS_TESTDRIVE esl_stats.c -leasel -lgsl -lm
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_stats.h"
+
+static ESL_OPTIONS options[] = {
+  /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",                   0},
+  {"-s",  eslARG_INT,      "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to <n>",         0},
+  {"-v",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "verbose: show verbose output",          0},
+  {"-N",  eslARG_INT,"10000000", NULL, NULL, NULL, NULL, NULL, "number of trials in LogGamma test",     0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for stats special functions";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go         = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r          = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  int             be_verbose = esl_opt_GetBoolean(go, "-v");
+  int             N          = esl_opt_GetInteger(go, "-N");
+
+  if (be_verbose) printf("seed = %" PRIu32 "\n", esl_randomness_GetSeed(r));
+
+  utest_doublesplitting(r);
+  utest_erfc(r, be_verbose);
+  utest_LogGamma(r, N, be_verbose);
+  utest_LinearRegression(r, TRUE,  be_verbose);
+  utest_LinearRegression(r, FALSE, be_verbose);
+  
+  esl_getopts_Destroy(go);
+  esl_randomness_Destroy(r);
+  exit(0);
+}
+#endif /*eslSTATS_TESTDRIVE*/
+/*------------------- end of test driver ------------------------*/
+
+
+
+
+/*****************************************************************
+ * 7. Examples.
+ *****************************************************************/
+
+/* Compile:  gcc -g -Wall -o example -I. -DeslSTATS_EXAMPLE esl_stats.c esl_random.c easel.c -lm  
+ * or        gcc -g -Wall -o example -I. -L. -DeslSTATS_EXAMPLE esl_stats.c -leasel -lm  
+ */
+#ifdef eslSTATS_EXAMPLE
+/*::cexcerpt::stats_example::begin::*/
+/* gcc -g -Wall -o example -I. -DeslSTATS_EXAMPLE esl_stats.c esl_random.c easel.c -lm  */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_stats.h"
+
+int main(void)
+{
+  ESL_RANDOMNESS *r   = esl_randomness_Create(0);
+  double a            = -3.;
+  double b            = 1.;
+  double xori         = -20.;
+  double xstep        = 1.0;
+  double setsigma     = 1.0;		/* sigma on all points */
+  int    n            = 100;
+  double *x           = malloc(sizeof(double) * n);
+  double *y           = malloc(sizeof(double) * n);
+  double *sigma       = malloc(sizeof(double) * n);
+  int    i;
+  double  ae, be, siga, sigb, cov_ab, cc, Q;
+  
+  /* Simulate some linear data, with Gaussian noise added to y_i */
+  for (i = 0; i < n; i++) {
+    sigma[i] = setsigma;
+    x[i]     = xori + i*xstep;
+    y[i]     = esl_rnd_Gaussian(r, a + b*x[i], sigma[i]);
+  }
+  
+  if (esl_stats_LinearRegression(x, y, sigma, n, &ae, &be, &siga, &sigb, &cov_ab, &cc, &Q) != eslOK)
+    esl_fatal("linear regression failed");
+
+  printf("estimated intercept a = %8.4f   [true = %8.4f]\n", ae, a);
+  printf("estimated slope b     = %8.4f   [true = %8.4f]\n", be, b);
+  printf("estimated sigma on a  = %8.4f\n",                  siga);
+  printf("estimated sigma on b  = %8.4f\n",                  sigb);
+  printf("estimated cov(a,b)    = %8.4f\n",                  cov_ab);
+  printf("correlation coeff     = %8.4f\n",                  cc);
+  printf("P-value               = %8.4f\n",                  Q);
+
+  free(x);  free(y);  free(sigma); 
+  esl_randomness_Destroy(r);
+  exit(0);
+}
+/*::cexcerpt::stats_example::end::*/
+#endif /* eslSTATS_EXAMPLE */
+
+
+#ifdef eslSTATS_EXAMPLE2
+
+#include <stdlib.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_stats.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",    0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <ca> <na> <cb> <nb>";
+static char banner[] = "example from the stats module: using a G-test";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go  = esl_getopts_CreateDefaultApp(options, 4, argc, argv, banner, usage);
+  int           ca  = strtol(esl_opt_GetArg(go, 1), NULL, 10);
+  int           na  = strtol(esl_opt_GetArg(go, 2), NULL, 10);
+  int           cb  = strtol(esl_opt_GetArg(go, 3), NULL, 10);
+  int           nb  = strtol(esl_opt_GetArg(go, 4), NULL, 10);
+  double        G, P;
+  int           status;
+  
+  if (ca > na || cb > nb) esl_fatal("argument order wrong? expect ca, na, cb, nb for ca/na, cb/nb");
+ 
+  if ( (status = esl_stats_GTest(ca, na, cb, nb, &G, &P)) != eslOK) esl_fatal("G-test failed?");
+  printf("%-10.3g %12.2f\n", P, G);
+  exit(0);
+}
+#endif /* eslSTATS_EXAMPLE2 */
+/*--------------------- end of examples -------------------------*/
+
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_stats.h b/esl_stats.h
new file mode 100644
index 0000000..5f41e04
--- /dev/null
+++ b/esl_stats.h
@@ -0,0 +1,142 @@
+/* Foundation, miscellanea for the statistics modules.
+ */
+#ifndef eslSTATS_INCLUDED
+#define eslSTATS_INCLUDED
+
+#include "easel.h"
+
+/*****************************************************************
+ * Splitting IEEE754 double-precision float into two uint32_t
+ *****************************************************************
+ *
+ * Currently we only need these macros for one function,
+ * esl_stats_erfc(). The Sun Microsystems erfc() code that we've
+ * borrowed splits an IEEE754 double into two unsigned 32-bit
+ * integers. It uses arcane trickery to deal with endianness at
+ * runtime, using incantations like these:
+ *    n0 = ((*(int*)&one)>>29)^1     0|1 = bigendian | littleendian
+ *    hx = *(n0+(int*)&x);           get high word
+ *    (1-n0+(int*)&z) = 0;           set low word
+ * 
+ * Not only is this arcane and dubious, static code checking (using
+ * the clang/llvm checker) doesn't like it. I found an improvement
+ * in a library called zenilib, at:
+ *  http://www-personal.umich.edu/~bazald/l/api/math__private_8h_source.html
+ *  
+ * Here we do the same thing in an ANSI-respecting way using unions,
+ * with endianness detected at compile time.
+ * 
+ * The zenilib code also appears to derive from (C) Sun Microsystems
+ * code.
+ *
+ * SRE TODO: insert license/copyright info here
+ */
+
+#ifdef WORDS_BIGENDIAN    
+typedef union 
+{
+ double val;
+ struct {
+   uint32_t msw;
+   uint32_t lsw;
+ } parts;
+} esl_double_split_t;
+#else /* else we're littleendian, such as Intel */
+typedef union
+{
+ double val;
+ struct {
+   uint32_t lsw;
+   uint32_t msw;
+ } parts;
+} esl_double_split_t;
+#endif /*WORDS_BIGENDIAN*/
+
+#define ESL_GET_WORDS(ix0, ix1, d) \
+  do { \
+    esl_double_split_t esltmp_ds;  \
+    esltmp_ds.val = (d);           \
+    (ix0) = esltmp_ds.parts.msw;   \
+    (ix1) = esltmp_ds.parts.lsw;   \
+  } while (0) 
+
+#define ESL_GET_HIGHWORD(ix0, d)  \
+  do { \
+    esl_double_split_t esltmp_ds; \
+    esltmp_ds.val = (d);          \
+    (ix0) = esltmp_ds.parts.msw;  \
+  } while (0)
+
+#define ESL_GET_LOWWORD(ix0, d)   \
+  do { \
+    esl_double_split_t esltmp_ds; \
+    esltmp_ds.val = (d);          \
+    (ix0) = esltmp_ds.parts.lsw;  \
+  } while (0)
+
+#define ESL_SET_WORDS(d, ix0, ix1) \
+   do { \
+    esl_double_split_t esltmp_ds;  \
+    esltmp_ds.parts.msw = (ix0);   \
+    esltmp_ds.parts.lsw = (ix1);   \
+    (d) = esltmp_ds.val;           \
+   } while (0)
+
+#define ESL_SET_HIGHWORD(d, ix0)  \
+   do { \
+    esl_double_split_t esltmp_ds; \
+    esltmp_ds.val = (d);          \
+    esltmp_ds.parts.msw = (ix0);  \
+    (d) = esltmp_ds.val;          \
+  } while (0)
+
+#define ESL_SET_LOWWORD(d, ix1)   \
+   do { \
+    esl_double_split_t esltmp_ds; \
+    esltmp_ds.val = (d);          \
+    esltmp_ds.parts.lsw = (ix1);  \
+    (d) = esltmp_ds.val;          \
+  } while (0)
+
+
+/*****************************************************************
+ * Function declarations
+ *****************************************************************/
+
+/* 1. Summary statistics calculations */
+extern int esl_stats_DMean(const double *x, int n, double *opt_mean, double *opt_var);
+extern int esl_stats_FMean(const float  *x, int n, double *opt_mean, double *opt_var);
+extern int esl_stats_IMean(const int    *x, int n, double *opt_mean, double *opt_var);
+
+/* 2. Special functions */
+extern int    esl_stats_LogGamma(double x, double *ret_answer);
+extern int    esl_stats_Psi(double x, double *ret_answer);
+extern int    esl_stats_IncompleteGamma(double a, double x, double *ret_pax, double *ret_qax);
+extern double esl_stats_erfc(double x);
+
+/* 3. Standard statistical tests */
+extern int esl_stats_GTest(int ca, int na, int cb, int nb, double *ret_G, double *ret_P);
+extern int esl_stats_ChiSquaredTest(int v, double x, double *ret_answer);
+
+/* 4. Data fitting */
+extern int esl_stats_LinearRegression(const double *x, const double *y, const double *sigma, int n,
+				      double *opt_a,       double *opt_b,
+				      double *opt_sigma_a, double *opt_sigma_b, double *opt_cov_ab,
+				      double *opt_cc,      double *opt_Q);
+
+
+/***************************************************************** 
+ * Portability
+ *****************************************************************/
+
+#ifndef HAVE_ERFC
+#define erfc(x)  esl_stats_erfc(x)
+#endif
+
+#endif /*eslSTATS_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_stats.tex b/esl_stats.tex
new file mode 100644
index 0000000..b027d99
--- /dev/null
+++ b/esl_stats.tex
@@ -0,0 +1,43 @@
+
+The \eslmod{stats} module is the foundation of a set of statistics
+modules. It contains special functions like $\Gamma(x)$ and $\Psi(x)$,
+and elementary statistics routines such as linear regression fitting
+and $\chi^2$ testing. Table~\ref{tbl:stats_api} lists the functions in
+the \eslmod{stats} API.
+
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\hyperlink{func:esl_stats_DMean()}{\ccode{esl\_stats\_\{D,F,I\}Mean()}} & Calculates mean and $\sigma^2$ for samples $x_i$.\\
+\hyperlink{func:esl_stats_LogGamma()}{\ccode{esl\_stats\_LogGamma()}} & Calculates $\log \Gamma(x)$.\\
+\hyperlink{func:esl_stats_Psi()}{\ccode{esl\_stats\_Psi()}} & Calculates $\Psi(x)$ (the digamma function).\\
+\hyperlink{func:esl_stats_IncompleteGamma()}{\ccode{esl\_stats\_IncompleteGamma()}} & Calculates the incomplete Gamma function.
+\\
+\hyperlink{func:esl_stats_ChiSquaredTest()}{\ccode{esl\_stats\_ChiSquaredTest()}} & Calculates a $\chi^2$ P-value.\\
+\hyperlink{func:esl_stats_LinearRegression()}{\ccode{esl\_stats\_LinearRegression()}} & Fit data to a straight line.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{stats} API.}
+\label{tbl:stats_api}
+\end{table}
+
+\subsection{An example of using the stats API}
+
+
+Figure~\ref{fig:stats_example} shows an example of using one of the
+routines in the \eslmod{stats} module, linear regression fitting. It
+generates a set of $n$ points dispersed around a line, $y_i = a + bx +
+N(\sigma)$ with Gaussian noise $N(\sigma)$, then fits the data to a
+line to obtain estimates $\hat{a}$ and $\hat{b}$.
+
+\begin{figure}
+\input{cexcerpts/stats_example}
+\caption{An example of using the \eslmod{stats} module.}
+\label{fig:stats_example}
+\end{figure}
+
+
+
diff --git a/esl_stopwatch.c b/esl_stopwatch.c
new file mode 100644
index 0000000..b62c0e6
--- /dev/null
+++ b/esl_stopwatch.c
@@ -0,0 +1,420 @@
+/* Tracking cpu/system/elapsed time used by a process.
+ *
+ * Credits:
+ *   - Thanks to Warren Gish for assistance.
+ *   - Includes portable high-resolution timer code 
+ *     (C) 2012 David Robert Nadeau, http://NadeauSoftware.com/
+ *     Creative Commons Attribution 3.0 Unported License
+ *     http://creativecommons.org/licenses/by/3.0/deed.en_US
+ */
+#include "esl_config.h"
+
+#include "easel.h"
+#include "esl_stopwatch.h"
+
+static double stopwatch_getRealTime(void);
+
+/*****************************************************************
+ * ESL_STOPWATCH object maintenance
+ *****************************************************************/
+
+/* Function:  esl_stopwatch_Create()
+ *
+ * Purpose:   Creates a new stopwatch.
+ *
+ * Returns:   ptr to a new <ESL_STOPWATCH> object; caller is
+ *            responsible for free'ing it with 
+ *            <esl_stopwatch_Destroy()>.
+ *
+ * Throws:    NULL on allocation failure.
+ */
+ESL_STOPWATCH *
+esl_stopwatch_Create(void)
+{
+  ESL_STOPWATCH *w = NULL;
+  int status;
+
+  ESL_ALLOC(w, sizeof(ESL_STOPWATCH));
+  w->elapsed = 0.;
+  w->user    = 0.;
+  w->sys     = 0.;
+  return w;
+
+ ERROR:
+  esl_stopwatch_Destroy(w);
+  return NULL;
+}
+
+/* Function:  esl_stopwatch_Destroy()
+ *
+ * Purpose:   Frees an <ESL_STOPWATCH>.
+ */
+void
+esl_stopwatch_Destroy(ESL_STOPWATCH *w)
+{
+  if (w) 
+    free(w);
+}
+
+
+
+/* Function:  esl_stopwatch_Start()
+ *
+ * Purpose:   Start a stopwatch. This sets the base 
+ *            for elapsed, cpu, and system time difference
+ *            calculations by subsequent calls to
+ *            <esl_stopwatch_Stop()>.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int 
+esl_stopwatch_Start(ESL_STOPWATCH *w)
+{
+#if defined HAVE_TIMES && defined eslSTOPWATCH_HIGHRES /* System-dependent highest resolution */
+  times(&(w->cpu0));
+  w->t0   = stopwatch_getRealTime();
+#elif  HAVE_TIMES           /*   ... else fall back to POSIX... */
+  w->t0   = times(&(w->cpu0));
+#else                       /*   ... else fallback to ANSI C */
+  w->t0   = time(NULL);
+  w->cpu0 = clock();
+#endif
+
+  w->elapsed = 0.;
+  w->user    = 0.;
+  w->sys     = 0.;
+  return eslOK;
+}
+
+/* Function:  esl_stopwatch_Stop()
+ *
+ * Purpose:   Stop a stopwatch. Record and store elapsed,
+ *            cpu, and system time difference relative to the
+ *            last call to <esl_stopwatch_Start()>.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_stopwatch_Stop(ESL_STOPWATCH *w)
+{
+#if defined eslSTOPWATCH_HIGHRES && defined HAVE_TIMES
+  double     t1;
+  struct tms cpu1;
+  double     clk_tck;
+#elif defined HAVE_TIMES
+  clock_t    t1;
+  struct tms cpu1;
+  double     clk_tck;
+#else
+  time_t     t1;
+  clock_t    cpu1;
+#endif
+
+
+#if defined eslSTOPWATCH_HIGHRES && defined HAVE_TIMES
+  t1         = stopwatch_getRealTime();
+  w->elapsed = t1 - w->t0;
+  clk_tck    =  (double) sysconf(_SC_CLK_TCK);
+  times(&cpu1);
+  w->user    = (double) (cpu1.tms_utime + cpu1.tms_cutime -
+			 w->cpu0.tms_utime - w->cpu0.tms_cutime) / clk_tck;
+  w->sys     = (double) (cpu1.tms_stime + cpu1.tms_cstime -
+			 w->cpu0.tms_stime - w->cpu0.tms_cstime) / clk_tck;
+#elif defined HAVE_TIMES /* POSIX */
+  t1         = times(&cpu1);
+  clk_tck    = (double) sysconf(_SC_CLK_TCK);
+  w->elapsed = (double) (t1 - w->t0) / clk_tck;
+  w->user    = (double) (cpu1.tms_utime + cpu1.tms_cutime -
+			 w->cpu0.tms_utime - w->cpu0.tms_cutime) / clk_tck;
+  w->sys     = (double) (cpu1.tms_stime + cpu1.tms_cstime -
+			 w->cpu0.tms_stime - w->cpu0.tms_cstime) / clk_tck;
+#else /* fallback to ANSI C */
+  t1         = time(NULL);
+  cpu1       = clock();
+  w->elapsed = difftime(t1, w->t0);
+  w->user    = (double) (cpu1- w->cpu0) / (double) CLOCKS_PER_SEC;
+  w->sys     = 0.;		/* no way to portably get system time in ANSI C */
+#endif
+
+  return eslOK;
+}
+
+/* format_time_string()
+ * Date:     SRE, Fri Nov 26 15:06:28 1999 [St. Louis]
+ *
+ * Purpose:  Given a number of seconds, format into
+ *           hh:mm:ss.xx in a provided buffer.
+ *
+ * Args:     buf     - allocated space (128 is plenty!)
+ *           sec     - number of seconds
+ *           do_frac - TRUE (1) to include hundredths of a sec
+ */
+static void
+format_time_string(char *buf, double sec, int do_frac)
+{
+  int h, m, s, hs;
+  
+  h  = (int) (sec / 3600.);
+  m  = (int) (sec / 60.) - h * 60;
+  s  = (int) (sec) - h * 3600 - m * 60;
+  if (do_frac) {
+    hs = (int) (sec * 100.) - h * 360000 - m * 6000 - s * 100;
+    sprintf(buf, "%02d:%02d:%02d.%02d", h,m,s,hs);
+  } else {
+    sprintf(buf, "%02d:%02d:%02d", h,m,s);
+  }
+}
+
+/* Function:  esl_stopwatch_Display()
+ *
+ * Purpose:   Output a usage summary line from a stopped
+ *            stopwatch, showing elapsed, cpu, and system time
+ *            between the last calls to 
+ *            <esl_stopwatch_Start()> and <esl_stopwatch_Stop()>.
+ *            
+ *            The string <prefix> will be prepended to the output
+ *            line. Use <""> to prepend nothing. If <prefix> is NULL,
+ *            a default <"CPU Time: "> prefix is used.
+ *           
+ *            For <prefix> = <"CPU Time: "> an example output line is:\\
+ *            <CPU Time: 142.55u 7.17s 00:02:29.72 Elapsed: 00:02:35>
+ *
+ * Args:      fp      - output stream
+ *            w       - stopped stopwatch
+ *            prefix  - output line prefix ("" for nothing)
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEWRITE> on any system write error, such as filled disk.
+ */
+int 
+esl_stopwatch_Display(FILE *fp, ESL_STOPWATCH *w, char *prefix)
+{
+  char buf[128];	/* (safely holds up to 10^14 years; I'll be dead by then) */
+  
+  if (prefix == NULL) { if (fputs("CPU Time: ", fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stopwatch display write failed"); }
+  else                { if (fputs(prefix, fp)       < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stopwatch display write failed"); }
+
+  format_time_string(buf, w->user+w->sys, TRUE);
+#ifdef HAVE_TIMES
+  if (fprintf(fp, "%.2fu %.2fs %s ", w->user, w->sys, buf) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stopwatch display write failed"); 
+#else
+  if (fprintf(fp, "%.2fu %s ", w->user, buf)               < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stopwatch display write failed"); 
+#endif
+  format_time_string(buf, w->elapsed, TRUE);
+  if (fprintf(fp, "Elapsed: %s\n", buf)                    < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stopwatch display write failed"); 
+  return eslOK;
+}
+  
+
+
+/* Function:  esl_stopwatch_GetElapsed()
+ * Synopsis:  Return the elapsed time in seconds
+ * Incept:    SRE, Fri Jan  8 10:10:37 2016
+ *
+ * Purpose:   After watch <w> is Stop()'ed, calling
+ *            <esl_stopwatch_GetElapsed(w)> returns the elapsed time
+ *            in seconds.
+ * 
+ *            The resolution is system-dependent. 
+ */
+double
+esl_stopwatch_GetElapsed(ESL_STOPWATCH *w)
+{
+  return w->elapsed;
+}
+
+
+/* Function:  esl_stopwatch_Include()
+ *
+ * Purpose:   Merge the cpu and system times from a slave into
+ *            a master stopwatch. Both watches must be
+ *            stopped, and should not be stopped again unless
+ *            You Know What You're Doing.
+ *           
+ *            Elapsed time is not merged. Master is assumed
+ *            to be keeping track of the wall clock (real) time,
+ *            and the slave/worker watch is ignored.
+ *           
+ *            Useful in at least two cases. One is in 
+ *            PVM, where we merge in the stopwatch(es) from separate
+ *            process(es) in a cluster. A second is in 
+ *            threads, for broken pthreads/times() implementations
+ *            that lose track of cpu times used by spawned
+ *            threads.
+ *
+ * Args:      master  - stopwatch that's aggregating times
+ *            w       - watch to add to the master.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_stopwatch_Include(ESL_STOPWATCH *master, ESL_STOPWATCH *w)
+{
+  master->user    += w->user;
+  master->sys     += w->sys;
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * Portable high resolution timing
+ *****************************************************************/
+
+/* The following code is
+ * (C) 2012 David Robert Nadeau, http://NadeauSoftware.com
+ * Creative Commons Attribution 3.0 Unported License
+ * http://creativecommons.org/licenses/by/3.0/deed.en_US
+ *
+ * Reference: http://nadeausoftware.com/articles/2012/04/c_c_tip_how_measure_elapsed_real_time_benchmarking
+ * 
+ * On resolution: 
+ *   I believe that on Mac OS/X, the high performance timer has a resolution in units 
+ *   of nanoseconds (at least on some platforms, including my laptop). However, calling
+ *   the esl_stopwatch_* functions themselves have overhead. The example driver is
+ *   a reasonable test of the minimal resolution, including call overhead; that gives
+ *   me about 0.1 microseconds (12 Jan 2016).
+ */
+#if defined(_WIN32)
+#include <Windows.h>
+
+#elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__))
+#include <unistd.h>	/* POSIX flags */
+#include <time.h>	/* clock_gettime(), time() */
+#include <sys/time.h>	/* gethrtime(), gettimeofday() */
+
+#if defined(__MACH__) && defined(__APPLE__)
+#include <mach/mach.h>
+#include <mach/mach_time.h>
+#endif
+
+#else
+#error "Unable to define getRealTime( ) for an unknown OS."
+#endif
+
+/**
+ * Returns the real time, in seconds, or -1.0 if an error occurred.
+ *
+ * Time is measured since an arbitrary and OS-dependent start time.
+ * The returned real time is only useful for computing an elapsed time
+ * between two calls to this function.
+ */
+static double 
+stopwatch_getRealTime(void)
+{
+#if defined(_WIN32)
+	FILETIME tm;
+	ULONGLONG t;
+#if defined(NTDDI_WIN8) && NTDDI_VERSION >= NTDDI_WIN8
+	/* Windows 8, Windows Server 2012 and later. ---------------- */
+	GetSystemTimePreciseAsFileTime( &tm );
+#else
+	/* Windows 2000 and later. ---------------------------------- */
+	GetSystemTimeAsFileTime( &tm );
+#endif
+	t = ((ULONGLONG)tm.dwHighDateTime << 32) | (ULONGLONG)tm.dwLowDateTime;
+	return (double)t / 10000000.0;
+
+#elif (defined(__hpux) || defined(hpux)) || ((defined(__sun__) || defined(__sun) || defined(sun)) && (defined(__SVR4) || defined(__svr4__)))
+	/* HP-UX, Solaris. ------------------------------------------ */
+	return (double)gethrtime( ) / 1000000000.0;
+
+#elif defined(__MACH__) && defined(__APPLE__)
+	/* OSX. ----------------------------------------------------- */
+	static double timeConvert = 0.0;
+	if ( timeConvert == 0.0 )
+	{
+		mach_timebase_info_data_t timeBase;
+		(void)mach_timebase_info( &timeBase );
+		timeConvert = (double)timeBase.numer /
+			(double)timeBase.denom /
+			1000000000.0;
+	}
+	return (double)mach_absolute_time( ) * timeConvert;
+
+#elif defined(_POSIX_VERSION)
+	/* POSIX. --------------------------------------------------- */
+#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0)
+	{
+		struct timespec ts;
+#if defined(CLOCK_MONOTONIC_PRECISE)
+		/* BSD. --------------------------------------------- */
+		const clockid_t id = CLOCK_MONOTONIC_PRECISE;
+#elif defined(CLOCK_MONOTONIC_RAW)
+		/* Linux. ------------------------------------------- */
+		const clockid_t id = CLOCK_MONOTONIC_RAW;
+#elif defined(CLOCK_HIGHRES)
+		/* Solaris. ----------------------------------------- */
+		const clockid_t id = CLOCK_HIGHRES;
+#elif defined(CLOCK_MONOTONIC)
+		/* AIX, BSD, Linux, POSIX, Solaris. ----------------- */
+		const clockid_t id = CLOCK_MONOTONIC;
+#elif defined(CLOCK_REALTIME)
+		/* AIX, BSD, HP-UX, Linux, POSIX. ------------------- */
+		const clockid_t id = CLOCK_REALTIME;
+#else
+		const clockid_t id = (clockid_t)-1;	/* Unknown. */
+#endif /* CLOCK_* */
+		if ( id != (clockid_t)-1 && clock_gettime( id, &ts ) != -1 )
+			return (double)ts.tv_sec +
+				(double)ts.tv_nsec / 1000000000.0;
+		/* Fall thru. */
+	}
+#endif /* _POSIX_TIMERS */
+
+	/* AIX, BSD, Cygwin, HP-UX, Linux, OSX, POSIX, Solaris. ----- */
+	struct timeval tm;
+	gettimeofday( &tm, NULL );
+	return (double)tm.tv_sec + (double)tm.tv_usec / 1000000.0;
+#else
+	return -1.0;		/* Failed. */
+#endif
+}
+
+
+/*****************************************************************
+ * Example of using the stopwatch module
+ *****************************************************************/
+#ifdef eslSTOPWATCH_EXAMPLE
+/*::cexcerpt::stopwatch_example::begin::*/
+/* compile: gcc -g -Wall -I. -o example -DeslSTOPWATCH_EXAMPLE esl_stopwatch.c easel.c -lm
+ * run:     ./example
+ */
+#include "easel.h"
+#include "esl_stopwatch.h"
+
+int 
+main(void)
+{
+  ESL_STOPWATCH *w;
+  double         t = 0.;
+  
+  w = esl_stopwatch_Create(); 
+
+  /* This tests the minimum *practical* resolution of the clock,
+   * inclusive of overhead of calling the stopwatch functions.
+   * It gives me ~0.1 usec (12 Jan 2016).
+   */
+  esl_stopwatch_Start(w);
+  while (t == 0.) 
+    {
+      esl_stopwatch_Stop(w);
+      t = esl_stopwatch_GetElapsed(w);
+    }
+
+  printf("Elapsed time clock has practical resolution of around: %g sec\n", t);
+
+  esl_stopwatch_Display(stdout, w, "CPU Time: ");
+  esl_stopwatch_Destroy(w);
+  return 0;
+}
+/*::cexcerpt::stopwatch_example::end::*/
+#endif /*ESL_STOPWATCH_EXAMPLE*/
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
diff --git a/esl_stopwatch.h b/esl_stopwatch.h
new file mode 100644
index 0000000..06851a0
--- /dev/null
+++ b/esl_stopwatch.h
@@ -0,0 +1,61 @@
+/* Tracking cpu/system/elapsed time used by a process.
+ * 
+ * SRE, Wed Feb 22 19:30:36 2006 [St. Louis] [moved to Easel]
+ * SRE, Thu Aug  3 08:00:35 2000 [St. Louis] [moved to SQUID]
+ * SRE, Fri Nov 26 14:54:21 1999 [St. Louis] [HMMER]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslSTOPWATCH_INCLUDED
+#define eslSTOPWATCH_INCLUDED
+
+#include <time.h>
+#ifdef HAVE_TIMES
+#include <sys/times.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>		/* need for sysconf() */
+#endif
+
+typedef struct {
+#ifdef eslSTOPWATCH_HIGHRES
+  double     t0;                /* baseline wall time from Nadeau routine */
+#elif  HAVE_TIMES
+  clock_t    t0;		/* baseline wall time, POSIX times()      */
+#else 
+  time_t     t0;                /* baseline wall time from ANSI time()    */
+#endif
+
+#ifdef HAVE_TIMES
+  struct tms cpu0;		/* baseline CPU/system time, POSIX times()      */
+#else
+  clock_t cpu0;			/* baseline CPU time, fallback to ANSI clock()  */
+#endif
+
+  /* elapsed/user/sys are t-t0 results for the last time the
+   * watch was Stop()'ed.
+   */
+  double elapsed;               /* elapsed wall time, seconds */
+  double user;                  /* CPU time, seconds          */
+  double sys;                   /* system time, seconds       */
+} ESL_STOPWATCH;
+
+
+extern ESL_STOPWATCH *esl_stopwatch_Create(void);
+extern void           esl_stopwatch_Destroy(ESL_STOPWATCH *w);
+
+extern int esl_stopwatch_Start(ESL_STOPWATCH *w);
+extern int esl_stopwatch_Stop(ESL_STOPWATCH *w);
+extern int esl_stopwatch_Display(FILE *fp, ESL_STOPWATCH *w, char *prefix);
+
+extern double esl_stopwatch_GetElapsed(ESL_STOPWATCH *w);
+
+extern int esl_stopwatch_Include(ESL_STOPWATCH *master, ESL_STOPWATCH *w);
+
+
+#endif /*eslSTOPWATCH_INCLUDED*/ 
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
+
diff --git a/esl_stopwatch.tex b/esl_stopwatch.tex
new file mode 100644
index 0000000..a823750
--- /dev/null
+++ b/esl_stopwatch.tex
@@ -0,0 +1,117 @@
+
+The stopwatch module measures the elapsed (wall clock) time, CPU time,
+and system time consumed by any part of a program.
+
+The simple way to measure the CPU time consumption in an ANSI C
+program is:
+
+\begin{cchunk}
+    clock_t  t0, t1;
+    t0 = clock();
+    /* do_stuff */
+    t1 = clock();
+    printf("cpu time: %.2f\n", (double) (t1-t0)/(double) CLOCKS_PER_SEC);
+\end{cchunk}
+
+The stopwatch module is just an elaboration of this.  It tracks
+elapsed and system time, in addition to cpu time; it hides the details
+of converting a time difference in hardware clock ticks to a
+human-interpretable time in seconds; and it provides a standard output
+function for formatting times, similar to the output of the standard
+UNIX \ccode{time} command line utility for timing processes.
+
+\begin{table}[hb]
+\begin{tabular}{ll}\hline
+\ccode{esl\_stopwatch\_Create()}  & Creates new stopwatch.\\
+\ccode{esl\_stopwatch\_Destroy()} & Frees a stopwatch.\\
+\ccode{esl\_stopwatch\_Start()}   & Starts a stopwatch.\\
+\ccode{esl\_stopwatch\_Stop()}    & Stops a stopwatch.\\
+\ccode{esl\_stopwatch\_Display()} & Displays elapsed, cpu, and system time.\\
+\ccode{esl\_stopwatch\_Include()} & Merges a stopwatch's time into a master.\\
+\hline
+\end{tabular}
+\caption{The \eslmod{stopwatch} API.}
+\label{tbl:stopwatch_api}
+\end{table}
+
+Table~\ref{tbl:stopwatch_api} lists the functions in the API.
+
+Starting a stopwatch with \ccode{esl\_stopwatch\_Start()} initializes
+a base time, t0. Stopping a stopwatch with
+\ccode{esl\_stopwatch\_Stop()} takes the current time t1, and
+internally computes and stores elapsed, cpu, and system time
+differences (t1-t0). These stored times can be displayed at any time
+using \ccode{esl\_stopwatch\_Display()}, until the next time the watch
+is stopped. A stopwatch can be stopped any number of times, measuring
+increasing time from the same base. A stopwatch can also be started
+any number of times, resetting the base each time it is set.
+
+Figure~\ref{fig:stopwatch_example} shows a small example that measures
+a boring \ccode{sleep(5)} call, which will of course show an elapsed
+wall time of 5 seconds.  Change the \ccode{sleep(5)} call to something
+cpu- or system-intensive to see a non-zero measurement of cpu or
+system time.
+
+\begin{figure}
+\input{cexcerpts/stopwatch_example}
+\caption{An example of using the \eslmod{stopwatch} module.}
+\label{fig:stopwatch_example}
+\end{figure}
+
+\subsection{Displaying and retrieving times}
+
+The \ccode{esl\_stopwatch\_Display()} function prints a line
+containing the cpu time, system time, aggregated cpu+system time, and
+the elapsed (wall clock) time. For example:
+
+\begin{cchunk}
+CPU Time: 142.55u 7.17s 00:02:29.72 Elapsed: 00:02:35
+\end{cchunk}
+
+If you want to access the times in seconds for your own purposes, the
+relevant fields in a stopped \ccode{ESL\_STOPWATCH} object are:
+
+\begin{cchunk}
+  double elapsed;               /* elapsed time, seconds */
+  double user;                  /* CPU time, seconds     */
+  double sys;                   /* system time, seconds  */
+\end{cchunk}
+
+
+
+\subsection{Stopwatch precision and system dependency}
+
+Elapsed wall time is typically measured at low resolution, in units of
+seconds (depending on the ANSI C \ccode{time\_t} definition on your
+system). It is displayed with a precision of 1 sec.
+
+CPU time is typically measured in high resolution, in units of
+microseconds (depending on the value of POSIX \ccode{\_SC\_CLK\_TCK} or
+ANSI C \ccode{CLOCKS\_PER\_SEC} on your system). It is displayed with a
+precision of 0.01 sec.
+
+System time is only determined on systems that provide a POSIX
+\ccode{times()} function. Like CPU time, it is typically measured at
+high resolution, in units of microseconds (depending on the POSIX
+\ccode{\_SC\_CLK\_TCK} value on your system). It is displayed with a
+precision of 0.01 sec.  On systems that do not provide a
+POSIX-compliant \ccode{times()} function, system time is always
+reported as 0.
+
+\subsection{Aggregate times in parallelized code}
+
+In parallelized code, you may want to aggregate results from multiple
+stopwatches into a single overall time measurement. Examples include
+aggregating times from worker processes in PVM or MPI applications, or
+aggregating times from multiple execution threads on systems where the
+\ccode{times()} function does not correctly aggregate threads for you.
+
+The \ccode{esl\_stopwatch\_Include()} function adds the cpu and system
+times in a ``client'' stopwatch to a ``master'' stopwatch. Both the
+client and the master stopwatch must be stopped. The elapsed time in
+the master stopwatch is not affected; it is assumed to be keeping
+track of the real (wall clock) time. 
+
+
+
+
diff --git a/esl_stretchexp.c b/esl_stretchexp.c
new file mode 100644
index 0000000..e7f7d69
--- /dev/null
+++ b/esl_stretchexp.c
@@ -0,0 +1,693 @@
+/* Statistical routines for stretched exponential distributions.
+ * 
+ * Contents:
+ *   1. Evaluating densities and distributions
+ *   2. Generic API routines: for general interface w/ histogram module
+ *   3. Dumping plots for files
+ *   4. Sampling                    (augmentation: random)
+ *   5. ML fitting to complete data (augmentation: minimizer)  
+ *   6. ML fitting to binned data   (augmentation: histogram, minimizer)
+ *   7. Test driver
+ *   8. Example
+ *   9. Copyright and license information
+ *   
+ * Xrefs:
+ *    STL9/146 : original implementation
+ *    
+ * To-do:
+ *   - Fit*() functions should return eslEINVAL on n=0, eslENORESULT
+ *     on failure due to small n. Compare esl_gumbel. xref J12/93.    
+ *     SRE, Wed Nov 27 11:07:44 2013
+ */
+#include <esl_config.h>
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_stats.h"
+#include "esl_vectorops.h"
+#include "esl_stretchexp.h"
+
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#ifdef eslAUGMENT_HISTOGRAM
+#include "esl_histogram.h"
+#endif
+#ifdef eslAUGMENT_MINIMIZER
+#include "esl_minimizer.h"
+#endif
+
+/****************************************************************************
+ * 1. Evaluating densities and distributions
+ ****************************************************************************/ 
+/* mu <= x < infinity   
+ *    [x=mu is no problem, but watch out for evaluating log(0) when it is]
+ * lambda > 0
+ * tau > 0    [fat tailed when tau < 1; thin when tau > 1; exponential when tau = 1]
+ */
+
+/* Function:  esl_sxp_pdf()
+ *
+ * Purpose:   Calculates the probability density function for the 
+ *            stretched exponential pdf, $P(X=x)$, given
+ *            quantile <x>, offset <mu>, and parameters <lambda> and <tau>.
+ */
+double
+esl_sxp_pdf(double x, double mu, double lambda, double tau)
+{
+  double y    = lambda * (x-mu);
+  double val;
+  double gt;
+  
+  if (x < mu) return 0.;
+  esl_stats_LogGamma(1/tau, &gt);
+
+  if (x == mu) val = (lambda * tau / exp(gt));
+  else         val = (lambda * tau / exp(gt)) * exp(- exp(tau * log(y)));
+
+  return val;
+}
+
+/* Function:  esl_sxp_logpdf()
+ *
+ * Purpose:   Calculates the log probability density function for the 
+ *            stretched exponential pdf, $\log P(X=x)$, given
+ *            quantile <x>, offset <mu>, and parameters <lambda> and <tau>.
+ */
+double 
+esl_sxp_logpdf(double x, double mu, double lambda, double tau)
+{
+  double y    = lambda * (x-mu);
+  double gt;
+  double val;
+
+  if (x < mu) return -eslINFINITY;
+  esl_stats_LogGamma(1/tau, &gt);
+
+  if (x == mu) val = log(lambda) + log(tau) - gt;
+  else         val = log(lambda) + log(tau) - gt - exp(tau*log(y));
+  return val;
+}
+
+/* Function:  esl_sxp_cdf()
+ *
+ * Purpose:   Calculates the cumulative distribution function for the 
+ *            stretched exponential pdf, $P(X \leq x)$, given
+ *            quantile <x>, offset <mu>, and parameters <lambda> and <tau>.
+ */
+double
+esl_sxp_cdf(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x-mu);
+  double val;
+
+  if (x <= mu) return 0.;
+  esl_stats_IncompleteGamma(1/tau, exp(tau * log(y)), &val, NULL);
+  
+  ESL_DASSERT1 (( !isnan(val)));
+  return val;
+}
+
+/* Function:  esl_sxp_logcdf()
+ *
+ * Purpose:   Calculates the log of the cumulative distribution function for the 
+ *            stretched exponential pdf, $\log P(X \leq x)$, given
+ *            quantile <x>, offset <mu>, and parameters <lambda> and <tau>.
+ */
+double
+esl_sxp_logcdf(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x-mu);
+  double val;
+
+  if (x <= mu) return -eslINFINITY;
+  esl_stats_IncompleteGamma(1./tau, exp(tau * log(y)), &val, NULL);
+  return log(val);
+}
+
+/* Function:  esl_sxp_surv()
+ *
+ * Purpose:   Calculates the survival function for the 
+ *            stretched exponential pdf, $P(X > x)$, given
+ *            quantile <x>, offset <mu>, and parameters <lambda> and <tau>.
+ */
+double
+esl_sxp_surv(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x-mu);
+  double val;
+
+  if (x <= mu) return 1.0;
+
+  esl_stats_IncompleteGamma(1./tau, exp(tau * log(y)), NULL, &val);
+  return val;
+}
+
+/* Function:  esl_sxp_logsurv()
+ *
+ * Purpose:   Calculates the log survival function for the 
+ *            stretched exponential pdf, $\log P(X > x)$, given
+ *            quantile <x>, offset <mu>, and parameters <lambda> and <tau>.
+ */
+double
+esl_sxp_logsurv(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x-mu);
+  double val;
+
+  if (x <= mu) return 0.0;
+
+  esl_stats_IncompleteGamma(1./tau, exp(tau * log(y)), NULL, &val);
+  return log(val);
+}
+
+/* Function:  esl_sxp_invcdf()
+ *
+ * Purpose:   Calculates the inverse CDF for a stretched exponential
+ *            with parameters <mu>, <lambda>, and <tau>, returning
+ *            the quantile <x> at which the CDF is <p>.
+ *            
+ *            The inverse CDF of the stretched exponential has no
+ *            analytical expression as far as I'm aware. The calculation
+ *            here is a computationally expensive, brute force bisection
+ *            search in <x> using the CDF function. It will suffice for
+ *            a small number of calls (for plotting applications, for example),
+ *            but it is not sufficient for a large number of calls.
+ */
+double
+esl_sxp_invcdf(double p, double mu, double lambda, double tau)
+{
+  double x1, x2, xm;		/* low, high guesses at x */
+  double f2, fm;
+  double tol = 1e-6;
+
+  x1 = mu;
+  x2 = mu + 1.;
+  do {				/* bracket */
+    x2 = x2 + 2.*(x2-x1);
+    f2 = esl_sxp_cdf(x2, mu, lambda, tau);
+  } while (f2 < p);
+
+  do {				/* bisection */
+    xm = (x1+x2) / 2.;
+    fm = esl_sxp_cdf(xm, mu, lambda, tau);
+    
+    if      (fm > p) x2 = xm;
+    else if (fm < p) x1 = xm;
+    else return xm;		/* unlikely case of fm==cdf */
+  } while ( (x2-x1)/(x1+x2-2*mu) > tol);
+
+  xm = (x1+x2) / 2.;
+  return xm;
+}
+/*-------------------- end densities & distributions ------------------------*/
+	  
+
+
+
+/****************************************************************************
+ * 2. Generic API routines: for general interface w/ histogram module
+ ****************************************************************************/ 
+
+/* Function:  esl_sxp_generic_pdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_sxp_pdf()>, taking
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_sxp_generic_pdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_sxp_pdf(x, p[0], p[1], p[2]);
+}
+
+/* Function:  esl_sxp_generic_cdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_sxp_cdf()>, taking
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_sxp_generic_cdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_sxp_cdf(x, p[0], p[1], p[2]);
+}
+
+/* Function:  esl_sxp_generic_surv()
+ *
+ * Purpose:   Generic-API wrapper around <esl_sxp_surv()>, taking
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_sxp_generic_surv(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_sxp_surv(x, p[0], p[1], p[2]);
+}
+
+/* Function:  esl_sxp_generic_invcdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_sxp_invcdf()>, taking
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_sxp_generic_invcdf(double p, void *params)
+{
+  double *v = (double *) params;
+  return esl_sxp_invcdf(p, v[0], v[1], v[2]);
+}
+/*------------------------ end generic API ---------------------------------*/
+
+
+
+/****************************************************************************
+ * 3. Dumping plots for files
+ ****************************************************************************/ 
+
+/* Function:  esl_sxp_Plot()
+ *
+ * Purpose:   Plot some stretched exponential function <func> (for instance,
+ *            <esl_sxp_pdf()>) for parameters <mu>, <lambda>, and <tau>, for
+ *            a range of quantiles x from <xmin> to <xmax> in steps of <xstep>;
+ *            output to an open stream <fp> in xmgrace XY input format.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error, such as filled disk.
+ */
+int
+esl_sxp_Plot(FILE *fp, double mu, double lambda, double tau,
+	     double (*func)(double x, double mu, double lambda, double tau), 
+	     double xmin, double xmax, double xstep)
+{
+  double x;
+  for (x = xmin; x <= xmax; x += xstep)
+    if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda, tau)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stretchexp plot write failed");
+  if (fprintf(fp, "&\n")                                        < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stretchexp plot write failed");
+  return eslOK;
+}
+/*-------------------- end plot dumping routines ---------------------------*/
+
+
+
+
+/****************************************************************************
+ * 4. Sampling (augmentation: random)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_RANDOM
+/* Function:  esl_sxp_Sample()
+ *
+ * Purpose:   Sample a stretched exponential random variate,
+ *            by a change of variable from a Gamma sample.
+ */
+double
+esl_sxp_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau)
+{
+  double t,x;
+
+  t = esl_rnd_Gamma(r, 1./tau);
+  x = mu + 1./lambda * exp(1./tau * log(t));
+  return x;
+} 
+#endif /*eslAUGMENT_RANDOM*/
+/*--------------------------- end sampling ---------------------------------*/
+
+
+
+/****************************************************************************
+ * 5. ML fitting to complete data (augmentation: minimizer)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_MINIMIZER
+/* This structure is used to sneak the data into minimizer's generic
+ * (void *) API for all aux data
+ */
+struct sxp_data {
+  double *x;
+  int     n;
+  double  mu;
+};
+
+static double
+sxp_complete_func(double *p, int np, void *dptr)
+{
+  struct sxp_data *data = (struct sxp_data *) dptr;
+  double lambda, tau;
+  double logL = 0.;
+  int    i;
+
+  lambda = exp(p[0]);
+  tau    = exp(p[1]);
+
+  for (i = 0; i < data->n; i++)
+    logL += esl_sxp_logpdf(data->x[i], data->mu, lambda, tau);
+  return -logL;
+}
+
+/* Function:  esl_sxp_FitComplete()
+ *
+ * Purpose:   Given a vector of <n> observed data samples <x[]>,
+ *            find maximum likelihood parameters by conjugate gradient 
+ *            descent optimization.
+ */
+int
+esl_sxp_FitComplete(double *x, int n,
+		    double *ret_mu, double *ret_lambda, double *ret_tau)
+
+{
+  struct sxp_data data;
+  double p[2], u[2], wrk[8];
+  double mu, tau, lambda;
+  double mean;
+  double tol = 1e-6;
+  double fx;
+  int    status;
+
+  /* initial guesses; mu is definitely = minimum x,
+   * and just use arbitrary #'s to init lambda, tau
+   */
+  mu =  esl_vec_DMin(x, n);
+  esl_stats_DMean(x, n, &mean, NULL);
+  lambda = 1 / (mean - mu);
+  tau    = 0.9;
+
+
+  /* load data structure, param vector, and step vector */
+  data.x  = x;
+  data.n  = n;
+  data.mu = mu;
+  p[0]    = log(lambda);
+  p[1]    = log(tau);
+  u[0]    = 1.0;
+  u[1]    = 1.0;
+
+  /* hand it off */
+  status =  esl_min_ConjugateGradientDescent(p, u, 2, 
+					     &sxp_complete_func, 
+					     NULL,
+					     (void *) (&data), tol, wrk, &fx);
+  *ret_mu     = mu;
+  *ret_lambda = exp(p[0]);
+  *ret_tau    = exp(p[1]);
+  return status;
+}
+#endif /*eslAUGMENT_MINIMIZER*/
+
+
+/****************************************************************************
+ * 6. ML fitting to binned data (augmentation: histogram, minimizer)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_HISTOGRAM
+#ifdef eslAUGMENT_MINIMIZER
+struct sxp_binned_data {
+  ESL_HISTOGRAM *g;	/* contains the binned data    */
+  double mu;		/* mu is not a learnable param */
+};
+
+static double 
+sxp_complete_binned_func(double *p, int np, void *dptr)
+{
+  struct sxp_binned_data *data = (struct sxp_binned_data *) dptr;
+  ESL_HISTOGRAM          *g    = data->g;
+  double logL = 0.;
+  double ai, bi;		/* lower, upper bounds on bin */
+  double lambda, tau;
+  int    i;
+  double tmp;
+
+  lambda = exp(p[0]);
+  tau    = exp(p[1]);  
+
+  ESL_DASSERT1(( ! isnan(lambda) ));
+  ESL_DASSERT1(( ! isnan(tau) ));
+  
+  for (i = g->cmin; i <= g->imax; i++) /* for each occupied bin */
+    {
+      if (g->obs[i] == 0) continue;
+      
+      ai = esl_histogram_Bin2LBound(g, i);
+      bi = esl_histogram_Bin2UBound(g, i);
+      if (ai < data->mu) ai = data->mu; /* careful at leftmost bound */
+
+      tmp = esl_sxp_cdf(bi, data->mu, lambda, tau) -
+            esl_sxp_cdf(ai, data->mu, lambda, tau);
+      if      (tmp == 0.) return eslINFINITY;
+      logL += g->obs[i] * log(tmp);
+    }
+  return -logL;			/* minimizing NLL */
+}
+
+/* Function:  esl_sxp_FitCompleteBinned()
+ *
+ * Purpose:   Given a histogram <g> with binned observations, where each
+ *            bin i holds some number of observed samples x with values from 
+ *            lower bound l to upper bound u (that is, $l < x \leq u$);
+ *            find maximum likelihood parameters mu, lambda, tau by conjugate
+ *            gradient descent optimization.
+ */
+int
+esl_sxp_FitCompleteBinned(ESL_HISTOGRAM *g,
+			  double *ret_mu, double *ret_lambda, double *ret_tau)
+
+{
+  struct sxp_binned_data data;
+  double p[2], u[2], wrk[8];
+  double mu, tau, lambda;
+  double tol = 1e-6;
+  double fx;
+  int    status;
+  double ai, mean;
+  int    i;
+
+  /* Set the fixed mu.
+   * Make a good initial guess of lambda, based on exponential fit.
+   * Choose an arbitrary tau.
+   */
+  if      (g->is_tailfit) mu = g->phi;  /* all x > mu in this case */
+  else if (g->is_rounded) mu = esl_histogram_Bin2LBound(g, g->imin);
+  else                    mu = g->xmin; 
+
+  mean = 0.;
+  for (i = g->cmin; i <= g->imax; i++) 
+    { 
+      ai = esl_histogram_Bin2LBound(g, i);
+      ai += 0.5*g->w;		/* midpoint in bin */
+      mean += (double)g->obs[i] * ai;
+    }
+  mean  /= g->No;
+  lambda = 1 / (mean - mu);
+
+  tau    = 0.9;
+
+  /* load data structure, param vector, and step vector */
+  data.g  = g;
+  data.mu = mu;
+  p[0]    = log(lambda);
+  p[1]    = log(tau);
+  u[0]    = 1.0;
+  u[1]    = 1.0;
+
+  /* hand it off */
+  status =  esl_min_ConjugateGradientDescent(p, u, 2, 
+					     &sxp_complete_binned_func, 
+					     NULL,
+					     (void *) (&data), tol, wrk, &fx);
+  *ret_mu     = mu;
+  *ret_lambda = exp(p[0]);
+  *ret_tau    = exp(p[1]);
+  return status;
+}
+#endif /*eslAUGMENT_HISTOGRAM*/
+#endif /*eslAUGMENT_MINIMIZER*/
+
+
+
+
+/****************************************************************************
+ * 7. Test driver
+ ****************************************************************************/ 
+#ifdef eslSTRETCHEXP_TESTDRIVE
+/* gcc -g -Wall -I. -L . -o stretchexp_utest -DeslSTRETCHEXP_TESTDRIVE esl_stretchexp.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_stretchexp.h"
+
+static ESL_OPTIONS options[] = {
+  /* name  type         default  env   range togs  reqs  incomp  help                docgrp */
+  {"-h",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage",               0},
+  {"-l",  eslARG_REAL,    "1.0", NULL,"x>0", NULL, NULL, NULL, "set lambda param to <x>",           0},
+  {"-m",  eslARG_REAL,   "10.0", NULL, NULL, NULL, NULL, NULL, "set mu param to <x>",               0},
+  {"-n",  eslARG_INT,   "10000", NULL,"n>0", NULL, NULL, NULL, "set number of samples to <n>",      0},
+  {"-o",  eslARG_OUTFILE,  NULL, NULL, NULL, NULL, NULL, NULL, "save plots to file <f>",            0},
+  {"-s",  eslARG_INT,      "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to <n>",     0},
+  {"-t",  eslARG_REAL,    "0.7", NULL,"x>0", NULL, NULL, NULL, "set tau param to <x>",              0},
+  {"-v",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose output",               0},
+  {"-w",  eslARG_REAL,    "0.1", NULL,"x>0", NULL, NULL, NULL, "set width of histogram bins to <x>",0},
+  {"--C", eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "plot CDF",                          0},
+  {"--LC",eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "plot log CDF",                      0},
+  {"--P", eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "plot PDF",                          0},
+  {"--LP",eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "plot log PDF",                      0},
+  {"--S", eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "plot survival",                     0},
+  {"--LS",eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, NULL, "plot log survival",                 0},
+  {"--XL",eslARG_NONE,     NULL, NULL, NULL, NULL, NULL, NULL, "set xmin for plot axis",            0},
+  {"--XH",eslARG_NONE,     NULL, NULL, NULL, NULL, NULL, NULL, "set xmax for plot axis",            0},
+  {"--XS",eslARG_NONE,     NULL, NULL, NULL, NULL, NULL, NULL, "set xstep for plot axis",           0},
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for random module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go   = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  double  mu           = esl_opt_GetReal(go, "-m");
+  double  lambda       = esl_opt_GetReal(go, "-l");
+  double  tau          = esl_opt_GetReal(go, "-t");
+  ESL_RANDOMNESS *r    = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  ESL_HISTOGRAM  *h    = esl_histogram_CreateFull(mu, 100., esl_opt_GetReal(go, "-w"));;
+  int     n            = esl_opt_GetInteger(go, "-n");
+  int     be_verbose   = esl_opt_GetBoolean(go, "-v");
+  char   *plotfile     = esl_opt_GetString(go, "-o");
+  FILE   *pfp          = stdout;
+  int     plot_pdf     = esl_opt_GetBoolean(go, "--P");
+  int     plot_logpdf  = esl_opt_GetBoolean(go, "--LP");
+  int     plot_cdf     = esl_opt_GetBoolean(go, "--C");
+  int     plot_logcdf  = esl_opt_GetBoolean(go, "--LC");
+  int     plot_surv    = esl_opt_GetBoolean(go, "--S");
+  int     plot_logsurv = esl_opt_GetBoolean(go, "--LS");
+  double  xmin         = esl_opt_IsOn(go, "--XL") ?  esl_opt_GetReal(go, "--XL") :  mu;
+  double  xmax         = esl_opt_IsOn(go, "--XH") ?  esl_opt_GetReal(go, "--XH") :  mu+40*(1./lambda);
+  double  xstep        = esl_opt_IsOn(go, "--XS") ?  esl_opt_GetReal(go, "--XS") :  0.1;
+  double  emu, elambda, etau;
+  int     i;
+  double  x;
+  double *data;
+  int     ndata;
+
+  if (be_verbose)
+    printf("Parametric:  mu = %f   lambda = %f    tau = %f\n", mu, lambda, tau);
+
+  if (plotfile != NULL) {
+    if ((pfp = fopen(plotfile, "w")) == NULL) 
+      esl_fatal("Failed to open plotfile");
+  }
+
+  for (i = 0; i < n; i++)
+    {
+      x = esl_sxp_Sample(r, mu, lambda, tau);
+      esl_histogram_Add(h, x);
+    }
+  esl_histogram_GetData(h, &data, &ndata);
+
+  esl_sxp_FitComplete(data, ndata, &emu, &elambda, &etau);
+  if (be_verbose)
+    printf("Complete data fit:  mu = %f   lambda = %f   tau = %f\n", 
+	   emu, elambda, etau);
+  if (fabs( (emu-mu)/mu )             > 0.01) esl_fatal("Error in (complete) fitted mu > 1%\n");
+  if (fabs( (elambda-lambda)/lambda ) > 0.10) esl_fatal("Error in (complete) fitted lambda > 10%\n");
+  if (fabs( (etau-tau)/tau )          > 0.10) esl_fatal("Error in (complete) fitted tau > 10%\n");
+
+  esl_sxp_FitCompleteBinned(h, &emu, &elambda, &etau);
+  if (be_verbose)
+    printf("Binned data fit:  mu = %f   lambda = %f   tau = %f\n", 
+	   emu, elambda, etau);
+  if (fabs( (emu-mu)/mu )             > 0.01) esl_fatal("Error in (binned) fitted mu > 1%\n");
+  if (fabs( (elambda-lambda)/lambda ) > 0.10) esl_fatal("Error in (binned) fitted lambda > 10%\n");
+  if (fabs( (etau-tau)/tau )          > 0.10) esl_fatal("Error in (binned) fitted tau > 10%\n");
+
+  if (plot_pdf)     esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_pdf,     xmin, xmax, xstep);
+  if (plot_logpdf)  esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_logpdf,  xmin, xmax, xstep);
+  if (plot_cdf)     esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_cdf,     xmin, xmax, xstep);
+  if (plot_logcdf)  esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_logcdf,  xmin, xmax, xstep);
+  if (plot_surv)    esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_surv,    xmin, xmax, xstep);
+  if (plot_logsurv) esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_logsurv, xmin, xmax, xstep);
+
+  if (plotfile != NULL) fclose(pfp);
+  esl_histogram_Destroy(h);
+  esl_randomness_Destroy(r);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /*eslSTRETCHEXP_TESTDRIVE*/
+
+/****************************************************************************
+ * Example main()
+ ****************************************************************************/ 
+#ifdef eslSTRETCHEXP_EXAMPLE
+/*::cexcerpt::sxp_example::begin::*/
+/* compile:
+   gcc -g -Wall -I. -o example -DeslSTRETCHEXP_EXAMPLE\
+     -DeslAUGMENT_HISTOGRAM -DeslAUGMENT_RANDOM -DeslAUGMENT_MINIMIZER\
+      esl_stretchexp.c esl_histogram.c esl_random.c esl_minimizer.c esl_stats.c esl_vectorops.c easel.c -lm
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_stretchexp.h"
+
+int
+main(int argc, char **argv)
+{
+  double mu         = -50.0;
+  double lambda     = 2.5;
+  double tau        = 0.7;
+  ESL_HISTOGRAM  *h = esl_histogram_CreateFull(mu, 100., 0.1);
+  ESL_RANDOMNESS *r = esl_randomness_Create(0);
+  int    n          = 10000;
+  double *data;
+  int     ndata;
+  double emu, elam, etau;
+  int    i;
+  double x;
+
+  for (i = 0; i < n; i++)
+    {
+      x  =  esl_sxp_Sample(r, mu, lambda, tau);
+      esl_histogram_Add(h, x);
+    }
+  esl_histogram_GetData(h, &data, &ndata);
+
+  /* Plot the empirical (sampled) and expected survivals */
+  esl_histogram_PlotSurvival(stdout, h);
+  esl_sxp_Plot(stdout, mu, lambda, tau,
+	       &esl_sxp_surv,  h->xmin, h->xmax, 0.1);
+
+  /* ML fit to complete data, and plot fitted survival curve */
+  esl_sxp_FitComplete(data, ndata, &emu, &elam, &etau);
+  esl_sxp_Plot(stdout, emu, elam, etau,
+	       &esl_sxp_surv,  h->xmin, h->xmax, 0.1);
+
+  /* ML fit to binned data, plot fitted survival curve  */
+  esl_sxp_FitCompleteBinned(h, &emu, &elam, &etau);
+  esl_sxp_Plot(stdout, emu, elam, etau,
+	       &esl_sxp_surv,  h->xmin, h->xmax, 0.1);
+
+  esl_randomness_Destroy(r);
+  esl_histogram_Destroy(h);
+  return 0;
+}
+/*::cexcerpt::sxp_example::end::*/
+#endif /*eslSTRETCHEXP_EXAMPLE*/
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_stretchexp.h b/esl_stretchexp.h
new file mode 100644
index 0000000..2caeed1
--- /dev/null
+++ b/esl_stretchexp.h
@@ -0,0 +1,52 @@
+/* Stretched exponential distributions.
+ * 
+ * SRE, Fri Aug 19 13:51:14 2005 [St. Louis] [xref STL9/146]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslSTRETCHEXP_INCLUDED
+#define eslSTRETCHEXP_INCLUDED
+
+#ifdef eslAUGMENT_RANDOM
+#include <esl_random.h>
+#endif
+#ifdef eslAUGMENT_HISTOGRAM
+#include <esl_histogram.h>
+#endif
+
+extern double esl_sxp_pdf    (double x, double mu, double lambda, double tau);
+extern double esl_sxp_logpdf (double x, double mu, double lambda, double tau);
+extern double esl_sxp_cdf    (double x, double mu, double lambda, double tau);
+extern double esl_sxp_logcdf (double x, double mu, double lambda, double tau);
+extern double esl_sxp_surv   (double x, double mu, double lambda, double tau);
+extern double esl_sxp_logsurv(double x, double mu, double lambda, double tau);
+extern double esl_sxp_invcdf (double p, double mu, double lambda, double tau);
+
+extern double esl_sxp_generic_pdf   (double x, void *params);
+extern double esl_sxp_generic_cdf   (double x, void *params);
+extern double esl_sxp_generic_surv  (double x, void *params);
+extern double esl_sxp_generic_invcdf(double p, void *params);
+
+extern int esl_sxp_Plot(FILE *fp, double mu, double lambda, double tau,
+			double (*func)(double x, double mu, double lambda, double tau), 
+			double xmin, double xmax, double xstep);
+
+
+#ifdef eslAUGMENT_RANDOM
+extern double esl_sxp_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau);
+#endif
+
+#ifdef eslAUGMENT_MINIMIZER
+extern int esl_sxp_FitComplete(double *x, int n,
+			       double *ret_mu, double *ret_lambda, double *ret_tau);
+#ifdef eslAUGMENT_HISTOGRAM
+extern int esl_sxp_FitCompleteBinned(ESL_HISTOGRAM *g,
+				     double *ret_mu, double *ret_lambda, double *ret_tau);
+#endif /*eslAUGMENT_HISTOGRAM*/
+#endif /*eslAUGMENT_MINIMIZER*/
+
+
+#endif /*eslSTRETCHEXP_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_stretchexp.tex b/esl_stretchexp.tex
new file mode 100644
index 0000000..b577b0e
--- /dev/null
+++ b/esl_stretchexp.tex
@@ -0,0 +1,41 @@
+
+The stretched exponential distribution may be useful for fitting
+fat-tailed empirical distributions.
+
+The stretched exponential has a similar functional form as the Weibull
+distribution, and the Weibull is confusingly sometimes referred to as
+a ``stretched exponential distribution'' in the literature, but they
+are not the same. (See the \eslmod{weibull} module.)
+
+\begin{tabular}{lcll}\hline
+Variate    & $x$         & \ccode{double} & $\mu \leq x < \infty$ \\
+Location   & $\mu$       & \ccode{double} & $-\infty < \mu < \infty$\\
+Scale      & $\lambda$   & \ccode{double} & $\lambda > 0$ \\ 
+Shape      & $\tau$      & \ccode{double} & $\tau > 0$ \\ \hline
+\end{tabular}
+
+The probability density function (PDF) is:
+
+\begin{equation}
+P(X=x) = \frac{\lambda \tau}{\Gamma(\frac{1}{\tau})} e^{- [\lambda(x-\mu)]^{\tau}}
+\label{eqn:stretchexp_pdf}
+\end{equation}
+
+The cumulative distribution function (CDF) does not have an analytical
+expression. It is obtained from the integral:
+
+\begin{eqnarray*}
+P(X \leq x) & = & \int_{\mu}^{x} P(X=z) dz\\
+            & = & \frac{\lambda \tau}{\Gamma(\frac{1}{\tau})} \int_\mu^{x} e^{- [\lambda(z-\mu)]^{\tau}} dz\\
+\label{eqn:stretchexp_cdf1}
+\end{eqnarray*}
+
+By change-of-variables $t = [\lambda(z-\mu)]^{\tau}$,
+$t^{\frac{1}{\tau}} = \lambda(z-\mu)$, $dz = \frac{1}{\lambda \tau}
+t^{\frac{1}{\tau}-1} dt$, this can be rewritten as:
+
+\[
+P(X \leq x)  = \frac{1}{\Gamma(\frac{1}{\tau})}
+\int_0^{[\lambda(x-\mu)]^{\tau}} e^{-t} t^{\frac{1}{\tau}-1} dt
+\]
+
diff --git a/esl_swat.c b/esl_swat.c
new file mode 100644
index 0000000..4270c92
--- /dev/null
+++ b/esl_swat.c
@@ -0,0 +1,225 @@
+/* This module is unfinished; don't try to use it for anything! */
+
+
+/* Standard Smith/Waterman sequence alignment
+ * 
+ * Contents:
+ *   
+ * 
+ */
+#include "esl_config.h"
+
+#include "easel.h"
+#include "esl_composition.h"
+#include "esl_scorematrix.h"
+
+#define eslSWAT_PROHIBIT -999999999
+
+/* Function:  esl_swat_Score()
+ * Incept:    SRE, Fri Apr 13 16:40:15 2007 [Janelia]
+ *
+ * Purpose:   Implements Smith/Waterman local sequence alignment, recovering
+ *            only a score, not an alignment. Query sequence <x> of length <L>
+ *            is aligned to subject sequence <y> of length <M>, using
+ *            a scoring system composed of residue alignment scores in matrix
+ *            <S>, a gap-open score <gop>, and a gap-extend score <gex>.
+ *            
+ *            A gap of $k$ residues is scored as <gop> $\times (k-1)$
+ *            <gex>.  That is, the gap-open score is applied to the
+ *            first residue in the gap, and the gap-extend penalty is
+ *            applied to each remaining residue. Additionally, both
+ *            <gop> and <gex> should be negative numbers.
+ *
+ * Returns:   <eslOK> on success, and the raw alignment score is returned in
+ *            <ret_sc>. 
+ *
+ * Throws:    (no abnormal error conditions)
+ */
+int
+esl_swat_Score(ESL_DSQ *x, int L, ESL_DSQ *y, int M, ESL_SCOREMATRIX *S, int gop, int gex, int *ret_sc)
+{
+  int    status;
+  int    i,j;
+  int  **rowmem = NULL;
+  int   *mc, *mp, *ixc, *ixp, *iyc, *iyp;
+  int    maxsc;
+
+  /* DP lattice is organized in rows (0) 1..i..M with target running vertically;
+   * columns (0) 1..j..L with query running horizontally.
+   */
+
+  /* Allocation; 
+   * we need two rows of length (L+1) for each of three matrices, M, IX, IY. 
+   * in the future, optimize by providing this from the caller. 
+   */
+  ESL_ALLOC(rowmem,    sizeof(int *) * 6); 
+  rowmem[0] = NULL;
+  ESL_ALLOC(rowmem[0], sizeof(int) * 6 * (L+1));
+  for (i = 1; i < 6; i++) rowmem[i] = rowmem[0] + i*(L+1);
+
+  /* Initializations.
+   */
+  rowmem[1][0] = 0;
+  rowmem[3][0] = eslSWAT_PROHIBIT;
+  rowmem[5][0] = eslSWAT_PROHIBIT;
+  for (j = 0; j <= L; j++) { 
+    rowmem[0][j] = 0;
+    rowmem[2][j] = eslSWAT_PROHIBIT;
+    rowmem[4][j] = eslSWAT_PROHIBIT;
+  }
+
+  maxsc = 0;
+  for (i = 1; i <= M; i++)	/* for each position in target... */
+    {
+      if (i%2) { mp = rowmem[0]; mc = rowmem[1]; ixp = rowmem[2]; ixc = rowmem[3]; iyp = rowmem[4]; iyc = rowmem[5]; }
+      else     { mc = rowmem[0]; mp = rowmem[1]; ixc = rowmem[2]; ixp = rowmem[3]; iyc = rowmem[4]; iyp = rowmem[5]; }
+      
+      for (j = 1; j <= L; j++)	/* for each position in query... */
+	{
+	  /* Match score at mc[j] aligns xj,yi. We can reach here from M (mp[j-1]), IX (ixp[j-1]), or IY (iyp[j-1]) */
+	  mc[j] = 0;
+	  if (mp[j-1]  > mc[j]) mc[j] = mp[j-1];
+	  if (ixp[j-1] > mc[j]) mc[j] = ixp[j-1];
+	  if (iyp[j-1] > mc[j]) mc[j] = iyp[j-1];
+	  mc[j] += S->s[x[j]][y[i]]; 	 
+
+	  if (mc[j] > maxsc) maxsc = mc[j];
+
+	  /* IX score at ixc[j] aligns xj to gap (horizontal move). 
+	   * We reach here from mc[j-1] (gap-open) or ixc[j-1] (gap-extend).
+	   */
+	  ixc[j] = mc[j-1] + gop;
+	  if (ixc[j-1] + gex > ixc[j]) ixc[j] = ixc[j-1] + gex;
+	  
+	  /* analogously for vertical move to iyc. */
+	  iyc[j] = mp[j] + gop;
+	  if (iyp[j] + gex > iyc[j]) iyc[j] = iyp[j] + gex;
+	}
+    }
+
+  *ret_sc = maxsc;
+  free(rowmem[0]);
+  free(rowmem);
+  return eslOK;
+
+ ERROR:
+  *ret_sc = 0;
+  if (rowmem != NULL) {
+    if (rowmem[0] != NULL) free(rowmem[0]);
+    free(rowmem);
+  }
+  return status;
+}
+
+
+/*****************************************************************
+ * Stats driver.
+ *****************************************************************/
+
+/* 
+    gcc -I. -L. -g -Wall -DeslSWAT_STATS -o stats esl_swat.c -leasel -lm 
+    ./stats
+*/
+#ifdef eslSWAT_STATS
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_fileparser.h"
+#include "esl_scorematrix.h"
+#include "esl_random.h"
+#include "esl_randomseq.h"
+#include "esl_histogram.h"
+
+int
+main(int argc, char **argv)
+{
+  int status;
+  ESL_RANDOMNESS  *r   = esl_randomness_Create(0);
+  ESL_ALPHABET    *abc = esl_alphabet_Create(eslAMINO);
+  ESL_SCOREMATRIX *S   = NULL;
+  ESL_DSQ         *x   = NULL;	/* iid query */
+  ESL_DSQ         *y   = NULL;	/* iid target */
+  double    lambda;
+  double    bg[20];		/* iid background probabilities */
+  int       L;			/* query length */
+  int       M;			/* target length */
+  int       nseq;		/* number of target seqs to simulate */
+  int       i;
+  int       gop; 
+  int       gex;
+  char     *mxfile     = "PMX";
+  int       raw_sc;
+
+  /* Configuration 
+   */
+  L = 400;			/* query length */
+  M = 400;			/* target length */
+  nseq = 50000;
+  gop = -11;
+  gex = -1;
+  lambda = 0.3207;
+
+  ESL_ALLOC(x, sizeof(ESL_DSQ) * (L+2));
+  ESL_ALLOC(y, sizeof(ESL_DSQ) * (M+2));
+
+  /* Input an amino acid score matrix from a file. */
+  if (mxfile != NULL) {
+    ESL_FILEPARSER  *efp = NULL;
+    if ( esl_fileparser_Open(mxfile, NULL, &efp)  != eslOK) esl_fatal("failed to open score file %s", mxfile);
+    if ( esl_scorematrix_Read(efp, abc, &S)               != eslOK) esl_fatal("failed to read matrix from %s", mxfile);
+    esl_fileparser_Close(efp);
+  } else {			/* default = BLOSUM62 */
+    S = esl_scorematrix_Create(abc);
+    esl_scorematrix_Set("BLOSUM62", S);
+  }
+  esl_composition_BL62(bg);
+
+  esl_rsq_xIID(r, bg, 20, L, x);
+  
+  for (i = 0; i < nseq; i++)
+    {
+      esl_rsq_xIID(r, bg, 20, M, y);
+      esl_swat_Score(x, L, y, M, S, gop, gex, &raw_sc);
+      printf("%d\n", raw_sc);
+    }
+  
+  free(x);
+  free(y);
+  esl_scorematrix_Destroy(S);
+  esl_alphabet_Destroy(abc);
+  esl_randomness_Destroy(r);
+  exit(0);
+
+ ERROR:
+  exit(status);
+}
+  
+  
+
+
+
+
+#endif /*eslSWAT_STATS*/
+
+
+/*****************************************************************
+ * Unit tests
+ *****************************************************************/
+
+void
+utest_Score(char *s1, char *s2, ESL_SCOREMATRIX *S, int gop, int gex, int expect_score)
+{
+
+}
+
+
+
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_swat.tex b/esl_swat.tex
new file mode 100644
index 0000000..9042b44
--- /dev/null
+++ b/esl_swat.tex
@@ -0,0 +1 @@
+The \eslmod{swat} module implements Smith/Waterman local sequence alignment.
diff --git a/esl_threads.c b/esl_threads.c
new file mode 100644
index 0000000..5627c35
--- /dev/null
+++ b/esl_threads.c
@@ -0,0 +1,434 @@
+/* Simple master/worker data parallelization using POSIX threads.
+ * 
+ * Contents:
+ *    1. The <ESL_THREADS> object: a gang of workers.
+ *    2. Determining thread number to use.
+ *    3. Examples.
+ *    4. Copyright and license.
+ */
+#include "esl_config.h"
+
+#ifdef HAVE_PTHREAD
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pthread.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H		/* On OpenBSD, sys/sysctl.h requires sys/param.h */
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include "easel.h"
+#include "esl_threads.h"
+
+
+/*****************************************************************
+ *# 1. The <ESL_THREADS> object: a gang of workers.
+ *****************************************************************/ 
+
+/* Function:  esl_threads_Create()
+ * Synopsis:  Create a threads object.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Creates an <ESL_THREADS> object, for organizing
+ 8            a bunch of worker threads that will all run 
+ *            the worker function <fnptr>. This object is a shell
+ *            for now; the worker threads themselves are 
+ *            created individually with <esl_threads_AddThread()>.
+ *
+ * Returns:   ptr to the new <ESL_THREADS> object.
+ * 
+ * Throws:    <NULL> on allocation or initialization failure.
+ */
+ESL_THREADS *
+esl_threads_Create(void (*fnptr)(void *))
+{
+  ESL_THREADS *obj = NULL;
+  int          status;
+
+  ESL_ALLOC(obj, sizeof(ESL_THREADS));
+
+  obj->threadCount     = 0;
+  obj->threadId        = NULL;
+  obj->data            = NULL;
+  obj->startThread     = 0;
+  obj->func            = fnptr;
+
+  if (pthread_mutex_init(&obj->startMutex, NULL) != 0) ESL_XEXCEPTION(eslESYS, "mutex init failed");
+  if (pthread_cond_init (&obj->startCond,  NULL) != 0) ESL_XEXCEPTION(eslESYS, "cond init failed");
+  return obj;
+
+ ERROR:
+  return NULL;
+}
+
+/* Function:  esl_threads_Destroy()
+ * Synopsis:  Destroys an <ESL_THREADS> object.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Frees an <ESL_THREADS> object.  
+ *
+ *            The caller routine must first free the
+ *            contents of each <obj->data[]>.
+ *
+ * Returns:   void
+ */
+void 
+esl_threads_Destroy(ESL_THREADS *obj)
+{
+  if (obj == NULL) return;
+
+  if (obj->threadId != NULL) free(obj->threadId);
+  if (obj->data     != NULL) free(obj->data);
+  pthread_mutex_destroy(&obj->startMutex);
+  pthread_cond_destroy (&obj->startCond);
+  free(obj);
+  return;
+}
+
+/* Function:  esl_threads_AddThread()
+ * Synopsis:  Add a worker thread to the <ESL_THREADS> object.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Create a new worker thread for the <ESL_THREADS> object,
+ *            assigning it the work unit pointed to by <data>.
+ *
+ *            The caller remains responsible for any memory allocated
+ *            to <data>; the <ESL_THREADS> object will only manage
+ *            a copy of a pointer to <data>.
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEMEM> on allocation failure. 
+ *            <eslESYS> if thread creation fails.
+ *            <eslEINVAL> if something's wrong with the <obj>.
+ */
+int 
+esl_threads_AddThread(ESL_THREADS *obj, void *data)
+{
+  int    status;
+  void  *p;
+
+  if (obj == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid thread object");
+
+  /* allocate inside the ESL_THREADS object to hold another worker */
+  ESL_RALLOC(obj->threadId, p, sizeof(pthread_t) * (obj->threadCount+1));
+  ESL_RALLOC(obj->data,     p, sizeof(void *)    * (obj->threadCount+1));
+  
+  obj->data[obj->threadCount] = data;
+  if (pthread_create(&(obj->threadId[obj->threadCount]), NULL, (void *(*)(void *)) obj->func, obj) != 0) ESL_EXCEPTION(eslESYS, "thread creation failed");
+  obj->threadCount++;
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_threads_GetWorkerCount()
+ * Synopsis:  Return the total number of worker threads.
+ * Incept:    SRE, Fri Aug 21 13:22:52 2009 [Janelia]
+ *
+ * Purpose:   Returns the total number of worker threads.
+ */
+int
+esl_threads_GetWorkerCount(ESL_THREADS *obj)
+{
+  return obj->threadCount;
+}
+
+
+/* Function:  esl_threads_WaitForStart()
+ * Synopsis:  Blocks master until all workers have started.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Make the master thread wait until all the worker threads have
+ *            started. When all the worker threads have started and
+ *            are blocking at the start mutex, release them.
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslESYS> if thread synchronization fails somewhere.
+ *            <eslEINVAL> if something is awry with <obj>.
+ */
+int
+esl_threads_WaitForStart(ESL_THREADS *obj)
+{
+  if (obj == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid thread object");
+
+  if (pthread_mutex_lock (&obj->startMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed");
+
+  /* wait for all worker threads to start */
+  while (obj->startThread < obj->threadCount) {
+    if (pthread_cond_wait(&obj->startCond, &obj->startMutex) != 0) ESL_EXCEPTION(eslESYS, "wait cond failed");
+  }
+
+  /* release all the worker threads */
+  obj->startThread = 0;
+  if (pthread_cond_broadcast(&obj->startCond)  != 0) ESL_EXCEPTION(eslESYS, "cond broadcast failed");
+  if (pthread_mutex_unlock  (&obj->startMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed");
+  return eslOK;
+}
+
+/* Function:  esl_threads_WaitForFinish()
+ * Synopsis:  Blocks master until all workers have completed.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Block the master thread until all the worker threads have
+ *            completed. As each worker completes, remove it from the 
+ *            <obj>. 
+ *            
+ *            Upon exit, the <obj> is returned to the same (empty)
+ *            state it was in after it was created. It may be reused
+ *            for a new problem by adding new workers.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslESYS> if thread synchronization fails somewhere.
+ *            <eslEINVAL> if something is awry with <obj>.
+ */
+int 
+esl_threads_WaitForFinish(ESL_THREADS *obj)
+{
+  int  w;			
+
+  if (obj == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid thread object");
+
+  /* wait for all worker threads to complete */
+  for (w = obj->threadCount-1; w >= 0; w--)
+    {
+      if (pthread_join(obj->threadId[w], NULL) != 0) ESL_EXCEPTION(eslESYS, "pthread join failed");
+      obj->threadCount--;
+    }
+
+  return eslOK;
+}
+
+/* Function:  esl_threads_Started()
+ * Synopsis:  Blocks worker until master gives the start signal.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Block a worker thread until master sees that all workers
+ *            have started and gives the start signal. Assign the worker
+ *            a unique number (0..nworkers-1), and return it in
+ *            <*ret_workeridx>. The worker uses this index to 
+ *            retrieve its work units.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslESYS> if thread synchronization fails somewhere.
+ *            <eslEINVAL> if something is awry with <obj>.
+ */
+int
+esl_threads_Started(ESL_THREADS *obj, int *ret_workeridx)
+{
+  int           w;
+  pthread_t     threadId;
+  int           status;
+
+  if (obj == NULL)                                ESL_XEXCEPTION(eslEINVAL, "Invalid thread object");
+  if (pthread_mutex_lock (&obj->startMutex) != 0) ESL_XEXCEPTION(eslESYS,   "mutex lock failed");
+
+  /* signal that we're started */
+  obj->startThread++;
+  if (pthread_cond_broadcast (&obj->startCond) != 0) ESL_XEXCEPTION(eslESYS, "cond broadcast failed");
+
+  /* wait for the master's signal to start the calculations */
+  while (obj->startThread) {
+    if (pthread_cond_wait(&obj->startCond, &obj->startMutex) != 0) ESL_XEXCEPTION(eslESYS, "cond wait failed");
+  }
+
+  if (pthread_mutex_unlock (&obj->startMutex) != 0)  ESL_XEXCEPTION(eslESYS, "mutex unlock failed");
+
+  /* Figure out the worker's index */
+  threadId = pthread_self();
+  for (w = 0; w < obj->threadCount; w++)
+    if (pthread_equal(threadId, obj->threadId[w])) break;
+  if (w == obj->threadCount) ESL_XEXCEPTION(eslESYS, "thread not registered");
+
+  *ret_workeridx = w;
+  return eslOK;
+
+ ERROR:
+  *ret_workeridx = 0;
+  return status;
+}
+
+
+/* Function:  esl_threads_GetData()
+ * Synopsis:  Return the data associated with this thread.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Return the data pointer associated with the worker thread
+ *            <workeridx>. The data pointer was set by the 
+ *            <esl_threads_AddThread()> function.
+ *
+ * Returns:   void *
+ */
+void *
+esl_threads_GetData(ESL_THREADS *obj, int workeridx)
+{
+  return obj->data[workeridx];
+}
+
+
+/* Function:  esl_threads_Finished()
+ * Synopsis:  Terminate the thread.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Terminate a worker thread.
+ *            This is currently a no-op, serving as
+ *            a placeholder in case we eventually need
+ *            any cleanup.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_threads_Finished(ESL_THREADS *obj, int workeridx)
+{
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 2. Determining thread number to use
+ *****************************************************************/
+
+/* Function:  esl_threads_CPUCount()
+ * Synopsis:  Figure out how many cpus the machine has.
+ * Incept:    SRE, Wed Aug 19 11:31:24 2009 [Janelia]
+ *
+ * Purpose:   Determine the number of logical processors on this
+ *            machine; return that number in <*ret_ncpu>.
+ *            
+ *            The number of available processors is found by
+ *            <sysconf(_SC_NPROCESSORS_ONLN)>,
+ *            <sysconf(_SC_NPROC_ONLN)>, or a <sysctl()> call,
+ *            depending on the host system.  This determined number of
+ *            available processors will be the number of logical
+ *            processors, not physical processors. On systems with
+ *            hyperthreading, the number of logical processors is more
+ *            than the number of physical cpus. It may or may not be a
+ *            good thing to spawn more threads than physical
+ *            processors.
+ *            
+ * Args:      ret_ncpu  - RETURN: number of logical CPUs
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    (no abnormal error conditions)
+ *
+ * Xref:      J5/68
+ */
+int
+esl_threads_CPUCount(int *ret_ncpu)
+{
+  int   ncpu = 1;
+
+#if defined     (HAVE_SYSCONF) && defined (_SC_NPROCESSORS_ONLN)     /* Many systems (including Linux) */
+  ncpu = sysconf(_SC_NPROCESSORS_ONLN);
+#elif defined   (HAVE_SYSCONF) && defined (_SC_NPROC_ONLN)	     /* Silicon Graphics IRIX */
+  ncpu = sysconf(_SC_NPROC_ONLN);
+#elif defined   (HAVE_SYSCTL)	                                     /* BSD systems including OS/X */
+  int    mib[2] = {CTL_HW, HW_NCPU};
+  size_t len    = sizeof(int);
+  int    status;
+
+  status = sysctl(mib, 2, &ncpu, &len, NULL, (size_t) NULL);
+  if (status < 0 || len != sizeof(int)) ncpu = 1;
+#endif
+  
+  if (ncpu < 1) ncpu = 1;
+
+  *ret_ncpu = ncpu;
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * 3. Example
+ *****************************************************************/
+
+#ifdef eslTHREADS_EXAMPLE
+#include "easel.h"
+#include "esl_threads.h"
+
+/* gcc --std=gnu99 -g -Wall -pthread -o esl_threads_example -I. -DeslTHREADS_EXAMPLE esl_threads.c easel.c */
+static void 		
+worker_thread(void *data)
+{
+  ESL_THREADS *thr = (ESL_THREADS *) data;
+  char        *s   = NULL;
+  int          w;
+
+  esl_threads_Started(thr, &w);
+  
+  s = (char *) esl_threads_GetData(thr, w);
+  printf("worker thread %d receives: %s\n", w, s);
+
+  esl_threads_Finished(thr, w);
+  return;
+}
+
+int
+main(void)
+{
+  ESL_THREADS  *thr  = NULL;
+  int           ncpu = 8;
+  int           i;
+  char        **work = NULL;
+
+  work = malloc(sizeof(char *) * ncpu);
+  for (i = 0; i < ncpu; i++) 
+    esl_sprintf(&(work[i]), "work packet %d", i);
+
+  thr = esl_threads_Create(&worker_thread);
+
+  for (i = 0; i < ncpu; i++)
+    esl_threads_AddThread(thr, (void *) work[i]);
+
+  esl_threads_WaitForStart (thr);
+  /* The worker threads now run their work. */
+  esl_threads_WaitForFinish(thr);
+  esl_threads_Destroy(thr);
+  for (i = 0; i < ncpu; i++) free(work[i]);
+  free(work);
+  return eslOK;
+}
+#endif /*eslTHREADS_EXAMPLE*/
+
+
+#ifdef eslTHREADS_EXAMPLE2
+#include "easel.h"
+#include "esl_threads.h"
+
+/* gcc --std=gnu99 -g -Wall -pthread -o esl_threads_example2 -I. -DeslTHREADS_EXAMPLE2 esl_threads.c easel.c */
+int 
+main(void)
+{
+  int ncpu;
+
+  esl_threads_CPUCount(&ncpu);
+  printf("Processors: %d\n", ncpu);
+
+  return eslOK;
+}
+#endif /*eslTHREADS_EXAMPLE2*/
+#endif /*HAVE_PTHREAD*/
+
+/*****************************************************************  
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
diff --git a/esl_threads.h b/esl_threads.h
new file mode 100644
index 0000000..2dab76c
--- /dev/null
+++ b/esl_threads.h
@@ -0,0 +1,41 @@
+/* Simple master/worker data parallelization using POSIX threads.
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslTHREADS_INCLUDED
+#define eslTHREADS_INCLUDED
+
+#include <pthread.h>
+
+typedef struct {
+  int             threadCount;      /* number of active worker threads                           */
+  pthread_t      *threadId;	    /* threadId for each worker thread; [0..threadCount-1]       */
+  void          **data;		    /* data pointer for each worker thread; [0..threadCount-1]   */
+
+  int             startThread;      /* number of worker threads currently blocked at start mutex */
+  pthread_mutex_t startMutex;	    /* the starting gate                                         */
+  pthread_cond_t  startCond;	    /* the signal that workers are synchronized and may start    */
+
+  void           (*func)(void *);   /* each worker thread runs this function; arg is to data[]   */
+} ESL_THREADS;
+
+
+extern ESL_THREADS *esl_threads_Create(void (*func)(void *));
+extern void         esl_threads_Destroy(ESL_THREADS *obj);
+
+extern int esl_threads_AddThread     (ESL_THREADS *obj, void *data);
+extern int esl_threads_GetWorkerCount(ESL_THREADS *obj);
+extern int esl_threads_WaitForStart  (ESL_THREADS *obj);
+extern int esl_threads_WaitForFinish (ESL_THREADS *obj);
+
+extern int   esl_threads_Started (ESL_THREADS *obj, int *ret_workeridx);
+extern void *esl_threads_GetData (ESL_THREADS *obj, int workeridx);
+extern int   esl_threads_Finished(ESL_THREADS *obj, int workeridx);
+
+extern int esl_threads_CPUCount(int *ret_ncpu);
+
+#endif /*eslTHREADS_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_tree.c b/esl_tree.c
new file mode 100644
index 0000000..6418fb4
--- /dev/null
+++ b/esl_tree.c
@@ -0,0 +1,2191 @@
+/* Phylogenetic trees.
+ * 
+ * Contents:
+ *   1. The ESL_TREE object.
+ *   2. Newick format i/o
+ *   3. Tree comparison algorithms.
+ *   4. Clustering algorithms for distance-based tree construction.
+ *   5. Generating simulated trees.
+ *   6. Unit tests.
+ *   7. Test driver.
+ *   8. Examples.
+ *   9. Copyright notice and license.
+ */
+#include "esl_config.h"
+
+#include <math.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "easel.h"
+#include "esl_tree.h"
+#include "esl_dmatrix.h"
+#include "esl_stack.h"
+#include "esl_vectorops.h"
+#include "esl_random.h"
+
+/*****************************************************************
+ *# 1. The ESL_TREE object.
+ *****************************************************************/
+
+/* Function:  esl_tree_Create()
+ *
+ * Purpose:   Allocate an empty tree structure for <ntaxa> taxa
+ *            and return a pointer to it. <ntaxa> must be $\geq 2$.
+ *
+ * Args:      <ntaxa>   - number of taxa
+ *
+ * Returns:   pointer to the new <ESL_TREE> object; caller frees 
+ *            this with <esl_tree_Destroy()>.
+ *
+ * Throws:    <NULL> if allocation fails.
+ */
+ESL_TREE *
+esl_tree_Create(int ntaxa)
+{
+  ESL_TREE *T = NULL;
+  int       i;
+  int       status;
+
+  /* Contract verification  */
+  ESL_DASSERT1((ntaxa >= 2));
+
+  /* 1st allocation round  */
+  ESL_ALLOC(T, sizeof(ESL_TREE));
+  T->parent = NULL;
+  T->left   = NULL;
+  T->right  = NULL;
+  T->ld     = NULL;
+  T->rd     = NULL;
+  
+  /* Optional info starts NULL
+   */
+  T->taxaparent  = NULL;
+  T->cladesize   = NULL;
+  T->taxonlabel  = NULL;
+  T->nodelabel   = NULL;
+
+  /* Additive trees are assumed by default, as opposed to linkage trees  */
+  T->is_linkage_tree = FALSE;
+
+  /* Tree output options default to PHYLIP style
+   */
+  T->show_unrooted            = FALSE;
+  T->show_node_labels         = TRUE;
+  T->show_root_branchlength   = FALSE;
+  T->show_branchlengths       = TRUE;
+  T->show_quoted_labels       = FALSE;
+  T->show_numeric_taxonlabels = TRUE;
+
+  /* 2nd allocation round */
+  T->N    = ntaxa;
+  ESL_ALLOC(T->parent, sizeof(int)    * (ntaxa-1));
+  ESL_ALLOC(T->left,   sizeof(int)    * (ntaxa-1));
+  ESL_ALLOC(T->right,  sizeof(int)    * (ntaxa-1));
+  ESL_ALLOC(T->ld,     sizeof(double) * (ntaxa-1));
+  ESL_ALLOC(T->rd,     sizeof(double) * (ntaxa-1));
+  
+  for (i = 0; i < ntaxa-1; i++)
+    {
+      T->parent[i] = 0;
+      T->left[i  ] = 0;
+      T->right[i]  = 0;
+      T->ld[i]   = 0.;
+      T->rd[i]   = 0.;
+    }
+  T->nalloc = ntaxa;
+  return T;
+  
+ ERROR:
+  esl_tree_Destroy(T);
+  return NULL;
+}
+
+/* Function:  esl_tree_CreateGrowable()
+ *
+ * Purpose:   Allocate a growable tree structure for an initial
+ *            allocation of <nalloc> taxa, and return a pointer to it.
+ *            <nalloc> must be $\geq 2$.
+ *
+ * Args:      <nalloc>  - initial allocation size for number of taxa
+ *
+ * Returns:   pointer to a new growable <ESL_TREE> object; caller frees 
+ *            this with <esl_tree_Destroy()>.
+ *
+ * Throws:    <NULL> if allocation fails.
+ */
+ESL_TREE *
+esl_tree_CreateGrowable(int nalloc)
+{
+  ESL_TREE *T = esl_tree_Create(nalloc);
+  if (T == NULL) return NULL;
+
+  T->N = 0;
+  return T;
+}
+
+
+/* Function:  esl_tree_CreateFromString()
+ *
+ * Purpose:   A convenience for making small test cases in the test
+ *            suites: given the contents of a Newick file as a 
+ *            single string <s>, convert it to an <ESL_TREE>.
+ *
+ * Returns:   a pointer to the new <ESL_TREE> on success.
+ *
+ * Throws:    <NULL> if it fails to obtain, open, or read the
+ *            temporary file that it puts the string <s> in.
+ */
+ESL_TREE *
+esl_tree_CreateFromString(char *s)
+{
+  char      tmpfile[16] = "esltmpXXXXXX";
+  FILE     *fp          = NULL;
+  ESL_TREE *T           = NULL;
+
+  if (esl_tmpfile(tmpfile, &fp)         != eslOK) goto ERROR;
+  fputs(s, fp);
+  rewind(fp);
+  if (esl_tree_ReadNewick(fp, NULL, &T) != eslOK) goto ERROR;
+  fclose(fp);
+  return T;
+
+ ERROR:
+  if (fp  != NULL) fclose(fp);
+  if (T   != NULL) esl_tree_Destroy(T);
+  return NULL;
+}
+
+
+
+/* Function:  esl_tree_Grow()
+ *
+ * Purpose:   Given a tree <T>, make sure it can hold one more taxon;
+ *            reallocate internally if necessary by doubling the
+ *            number of taxa it is currently allocated to hold.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure. In this case, 
+ *            the data in the tree are unaffected.
+ */
+int
+esl_tree_Grow(ESL_TREE *T)
+{
+  void *tmp;
+  int   nnew;
+  int   status;
+  int   i;
+
+  if (T->N < T->nalloc) return eslOK; /* do we have room for next taxon? */
+
+  nnew = T->nalloc * 2;
+
+  /* There are N-1 interior nodes, so arrays of info for
+   * interior nodes are allocated for (nnew-1), whereas
+   * arrays of info for the N taxa are allocated (nnew).
+   */
+  ESL_RALLOC(T->parent, tmp, sizeof(int)    * (nnew-1));
+  ESL_RALLOC(T->left,   tmp, sizeof(int)    * (nnew-1));
+  ESL_RALLOC(T->right,  tmp, sizeof(int)    * (nnew-1));
+  ESL_RALLOC(T->ld,     tmp, sizeof(double) * (nnew-1));
+  ESL_RALLOC(T->rd,     tmp, sizeof(double) * (nnew-1));
+
+  /* 0..N-2 were already initialized or used.
+   * Initialize newly alloced space N-1..nnew-2.
+   */
+  for (i = T->nalloc-1; i < nnew-1; i++)
+    {
+      T->parent[i] = 0;
+      T->left[i  ] = 0;
+      T->right[i]  = 0;
+      T->ld[i]   = 0.;
+      T->rd[i]   = 0.;
+    }
+
+  if (T->taxaparent != NULL)  
+    {
+      ESL_RALLOC(T->taxaparent, tmp, sizeof(int)    * nnew);
+      for (i = T->nalloc; i < nnew; i++) T->taxaparent[i] = 0;
+    }
+
+  if (T->cladesize != NULL)  
+    {
+      ESL_RALLOC(T->cladesize, tmp, sizeof(int)    * nnew);
+      for (i = T->nalloc; i < nnew; i++) T->cladesize[i] = 0;
+    }
+
+  if (T->taxonlabel    != NULL)  
+    {
+      ESL_RALLOC(T->taxonlabel,    tmp, sizeof(char *) * nnew);
+      for (i = T->nalloc; i < nnew; i++) T->taxonlabel[i] = NULL;
+    }
+
+  if (T->nodelabel     != NULL)  
+    {
+      ESL_RALLOC(T->nodelabel,     tmp, sizeof(char *) * (nnew-1));
+      for (i = T->nalloc-1; i < nnew-1; i++) T->nodelabel[i] = NULL;
+    }
+
+  T->nalloc = nnew;
+  return eslOK;
+
+ ERROR:
+  return eslEMEM;
+}
+
+
+/* Function:  esl_tree_SetTaxaParents()
+ *
+ * Purpose:   Constructs the <T->taxaparent[]> array in the tree
+ *            structure <T>, by an O(N) traversal of the tree.
+ *            Upon return, <T->taxaparent[i]> is the index
+ *            of the internal node that taxon <i> is a child of.
+ *
+ * Args:      T   - the tree structure to map
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on internal allocation error. In this case, the tree is 
+ *            returned unchanged.
+ *
+ * Xref:      STL11/63
+ */
+int
+esl_tree_SetTaxaParents(ESL_TREE *T)
+{
+  int i;
+  int status;
+
+  if (T->taxaparent != NULL) return eslOK;         // map already exists. 
+  ESL_ALLOC(T->taxaparent, sizeof(int) * T->N);
+  for (i = 0; i < T->N; i++) T->taxaparent[i] = 0; // solely to calm static analyzers.
+
+  for (i = 0; i < T->N-1; i++)	/* traversal order doesn't matter */
+    {
+      if (T->left[i]  <= 0) T->taxaparent[-(T->left[i])]  = i;
+      if (T->right[i] <= 0) T->taxaparent[-(T->right[i])] = i;
+    }
+  return eslOK;
+
+ ERROR:
+  if (T->taxaparent != NULL) { free(T->taxaparent); T->taxaparent = NULL; }
+  return status;
+}
+  
+
+/* Function:  esl_tree_SetCladesizes()
+ *
+ * Purpose:   Constructs the <T->cladesize[]> array in tree structure
+ *            <T>. Upon successful return, <T->cladesize[i]> is the
+ *            number of taxa contained by the clade rooted at node <i>
+ *            in the tree. For example, <T->cladesize[0]> is $N$ by
+ *            definition, because 0 is the root of the tree.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error; in this case, the
+ *            original <T> is unmodified.
+ */
+int 
+esl_tree_SetCladesizes(ESL_TREE *T)
+{
+  int i;
+  int status;
+
+  if (T->cladesize != NULL) return eslOK; /* already set. */
+  ESL_ALLOC(T->cladesize, sizeof(int) * (T->N-1));
+  esl_vec_ISet(T->cladesize, T->N-1, 0);
+
+  for (i = T->N-2; i >= 0; i--)	
+    {                        /* taxon:   ...else...   internal node:  */          
+      if (T->left[i]  <= 0) T->cladesize[i]++; else T->cladesize[i] += T->cladesize[T->left[i]];
+      if (T->right[i] <= 0) T->cladesize[i]++; else T->cladesize[i] += T->cladesize[T->right[i]];
+    }
+  return eslOK;
+
+ ERROR:
+  if (T->cladesize != NULL) { free(T->cladesize); T->cladesize = NULL; }
+  return status;
+}
+
+
+/* Function:  esl_tree_SetTaxonlabels()
+ *
+ * Purpose:   Given an array of taxon names <names[0..N-1]> with the
+ *            same order and number as the taxa in tree <T>, make a
+ *            copy of those names in <T>. For example, <names> might
+ *            be the sequence names in a multiple alignment,
+ *            <msa->sqname>.
+ *            
+ *            If the tree already had taxon names assigned to it, they
+ *            are replaced.
+ *            
+ *            As a special case, if the <names> argument is passed as
+ *            <NULL>, then the taxon labels are set to a string
+ *            corresponding to their internal index; that is, taxon 0
+ *            is labeled "0". 
+ *
+ * Returns:   <eslOK> on success, and internal state of <T>
+ *            (specifically, <T->taxonlabel[]>) now contains a copy
+ *            of the taxa names.
+ *
+ * Throws:    <eslEMEM> on allocation failure. <T->taxonlabel[]> will be
+ *            <NULL> (even if it was already set).
+ */
+int
+esl_tree_SetTaxonlabels(ESL_TREE *T, char **names)
+{
+  int i;
+  int status;
+  
+  if (T->taxonlabel != NULL) esl_Free2D((void **) T->taxonlabel, T->N);
+  ESL_ALLOC(T->taxonlabel, sizeof(char *) * T->nalloc);
+  for (i = 0; i < T->nalloc; i++) T->taxonlabel[i] = NULL;
+
+  if (names != NULL) 
+    {
+      for (i = 0; i < T->N; i++)
+	if ((status = esl_strdup(names[i], -1, &(T->taxonlabel[i]))) != eslOK) goto ERROR;
+    }
+  else
+    {
+      for (i = 0; i < T->N; i++)
+	{
+	  ESL_ALLOC(T->taxonlabel[i], sizeof(char) * 32); /* enough width for any conceivable int */
+	  snprintf(T->taxonlabel[i], 32, "%d", i);
+	}
+    }
+  return eslOK;
+
+ ERROR:
+  if (T->taxonlabel != NULL) esl_Free2D((void **) T->taxonlabel, T->nalloc);
+  return status;
+}
+
+/* Function:  esl_tree_RenumberNodes()
+ * Synopsis:  Assure nodes are numbered in preorder.
+ *
+ * Purpose:   Given a tree <T> whose internal nodes might be numbered in
+ *            any order, with the sole requirement that node 0 is the
+ *            root; renumber the internal nodes (if necessary) to be in Easel's
+ *            convention of preorder traversal. No other aspect of <T> is
+ *            altered (including its allocation size).
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *
+ * Xref:      STL11/77
+ */
+int
+esl_tree_RenumberNodes(ESL_TREE *T)
+{
+  ESL_TREE  *T2  = NULL;
+  ESL_STACK *vs  = NULL;
+  int       *map = NULL;
+  int        v,new;
+  int        status;
+  int        needs_rearranging = FALSE;
+
+  /* Pass 1. Preorder traverse of T by its children links;
+   *         construct map[old] -> new.
+   */
+  ESL_ALLOC(map, sizeof(int) * (T->N-1));
+  if (( vs = esl_stack_ICreate()) == NULL) { status = eslEMEM; goto ERROR; };
+  if (esl_stack_IPush(vs, 0) != eslOK)     { status = eslEMEM; goto ERROR; };
+  new = 0;
+  while (esl_stack_IPop(vs, &v) == eslOK)
+    {
+      if (v != new) needs_rearranging = TRUE;
+      map[v] = new++;
+      if (T->right[v] > 0 && esl_stack_IPush(vs, T->right[v]) != eslOK) { status = eslEMEM; goto ERROR; };
+      if (T->left[v]  > 0 && esl_stack_IPush(vs, T->left[v])  != eslOK) { status = eslEMEM; goto ERROR; };
+    }
+  if (! needs_rearranging) { status = eslOK; goto ERROR; } /* not an error; just cleaning up & returning eslOK. */
+
+  /* Pass 2. Construct the guts of correctly numbered new T2.
+   *         (traversal order doesn't matter here)
+   */
+  if (( T2 = esl_tree_Create(T->nalloc)) == NULL) { status = eslEMEM; goto ERROR; };
+  if (T->nodelabel   != NULL) {
+    ESL_ALLOC(T2->nodelabel,  sizeof(char *) * (T2->nalloc-1));
+    for (v = 0; v < T2->nalloc-1; v++) T2->nodelabel[v] = NULL;
+  }
+  if (T->taxaparent != NULL)  {
+    ESL_ALLOC(T2->taxaparent, sizeof(int)    * (T2->nalloc));
+    for (v = 0; v < T2->nalloc; v++)   T2->taxaparent[v] = 0;
+  }
+  
+  for (v = 0; v < T->N-1; v++)
+    {
+      T2->parent[map[v]] = map[T->parent[v]];
+      if (T->left[v]  > 0) T2->left[map[v]]   = map[T->left[v]];  /* internal nodes renumbered... */
+      else                 T2->left[map[v]]   = T->left[v];       /* ...taxon indices unchanged */
+      if (T->right[v] > 0) T2->right[map[v]]  = map[T->right[v]];
+      else                 T2->right[map[v]]  = T->right[v];
+      T2->ld[map[v]]     = T->ld[v];
+      T2->rd[map[v]]     = T->rd[v];
+  
+      if (T->taxaparent != NULL) {
+	if (T->left[v]  <= 0) T2->taxaparent[-(T->left[v])]  = map[v];
+	if (T->right[v] <= 0) T2->taxaparent[-(T->right[v])] = map[v];
+      }
+
+      if (T->nodelabel != NULL) 
+	esl_strdup(T->nodelabel[v], -1, &(T2->nodelabel[map[v]]));
+    }
+
+ /* Finally, swap the new guts of T2 with the old guts of T;
+   * destroy T2 and return. T is now renumbered.
+   */
+  ESL_SWAP(T->parent,     T2->parent,      int *);
+  ESL_SWAP(T->left,       T2->left,        int *);
+  ESL_SWAP(T->right,      T2->right,       int *);
+  ESL_SWAP(T->ld,         T2->ld,          double *);
+  ESL_SWAP(T->rd,         T2->rd,          double *);
+  ESL_SWAP(T->taxaparent, T2->taxaparent,  int *);
+  ESL_SWAP(T->nodelabel,  T2->nodelabel,   char **);
+
+  free(map);
+  esl_stack_Destroy(vs);
+  esl_tree_Destroy(T2);
+  return eslOK;
+
+ ERROR:
+  if (map != NULL) free(map);
+  if (vs  != NULL) esl_stack_Destroy(vs);
+  if (T2  != NULL) esl_tree_Destroy(T2);
+  return status;
+
+}
+
+/* Function:  esl_tree_VerifyUltrametric()
+ *
+ * Purpose:   Verify that tree <T> is ultrametric. 
+ *
+ * Returns:   <eslOK> if so; <eslFAIL> if not.
+ *
+ * Throws:    <eslEMEM> on an allocation failure.
+ */
+int
+esl_tree_VerifyUltrametric(ESL_TREE *T)
+{
+  double *d = NULL;		/* Distance from root for each OTU */
+  int status;
+  int i, child, parent;
+  
+  /* First, calculate distance from root to each taxon.
+   * (This chunk of code might be useful to put on its own someday.)
+   */
+  ESL_ALLOC(d, sizeof(double) * T->N);
+  if ((status = esl_tree_SetTaxaParents(T)) != eslOK) goto ERROR;
+  for (i = 0; i < T->N; i++)
+    {
+      d[i]   = 0.0;
+      parent = T->taxaparent[i];
+      if       (T->left[parent]  == -i) d[i] += T->ld[parent];
+      else if  (T->right[parent] == -i) d[i] += T->rd[parent];
+      else     ESL_XEXCEPTION(eslEINCONCEIVABLE, "oops");
+
+      while (parent != 0)	/* upwards to the root */
+	{
+	  child  = parent;
+	  parent = T->parent[child];
+	  if      (T->left[parent]  == child) d[i] += T->ld[parent];
+	  else if (T->right[parent] == child) d[i] += T->rd[parent];
+	  else    ESL_XEXCEPTION(eslEINCONCEIVABLE, "oops");
+	}
+    }
+
+  /* In an ultrametric tree, all those distances must be equal.
+   */
+  for (i = 1; i < T->N; i++)
+    if ((status = esl_DCompare(d[0], d[i], 0.0001)) != eslOK) break;
+
+  free(d);
+  return status;
+  
+ ERROR:
+  if (d != NULL) free(d);
+  return status;
+}
+
+
+/* Function:  esl_tree_Validate()
+ *
+ * Purpose:   Validates the integrity of the data structure in <T>.
+ *            Returns <eslOK> if the internal data in <T> are
+ *            consistent and valid. Returns <eslFAIL> if not,
+ *            and if a non-<NULL> message buffer <errbuf> has been
+ *            provided by the caller, an informative message is
+ *            left in <errbuf> describing the reason for the 
+ *            failure.
+ *            
+ * Args:      T      - tree structure to validate
+ *            errbuf - NULL, or a buffer of at least p7_ERRBUFSIZE
+ *                     chars to contain an error message upon
+ *                     any validation failure.
+ */
+int
+esl_tree_Validate(ESL_TREE *T, char *errbuf)
+{
+  int N;
+  int i, c;
+  int shouldbe;
+  int status;
+  
+  if (errbuf != NULL) *errbuf = 0;
+
+  N = T->N; /* just to save writing T->N so many times below  */
+  if (N < 2)             ESL_XFAIL(eslFAIL, errbuf, "number of taxa is less than 2");
+  if (T->parent[0] != 0) ESL_XFAIL(eslFAIL, errbuf, "parent of root 0 should be set to 0");
+  if (T->nalloc < N)     ESL_XFAIL(eslFAIL, errbuf, "number of taxa N is less than allocation");
+
+  /* Verify preorder tree numbering.
+   */
+  for (i = 0; i < N-1; i++)
+    {
+      if (T->left[i]  > 0 && T->left[i]  < i)
+	ESL_XFAIL(eslFAIL, errbuf, "l child of node %d not in preorder", i);
+      if (T->right[i] > 0 && T->right[i] < i)
+	ESL_XFAIL(eslFAIL, errbuf, "r child of node %d not in preorder", i);
+    }
+
+  /* Range checks on values. */
+  for (i = 0; i < N-1; i++)
+    {
+      if (T->parent[i] < 0      || T->parent[i]     > N-2)
+	ESL_XFAIL(eslFAIL, errbuf, "parent idx of node %d invalid", i);
+      if (T->left[i]   < -(N-1) || T->left[i]       > N-2)  
+	ESL_XFAIL(eslFAIL, errbuf, "left child idx of node %d invalid", i);
+      if (T->right[i]  < -(N-1) || T->right[i]      > N-2)  
+	ESL_XFAIL(eslFAIL, errbuf, "right child idx of node %d invalid", i);
+      if (T->ld[i] < 0.)                                   
+	ESL_XFAIL(eslFAIL, errbuf, "negative l branch length at node %d", i);
+      if (T->rd[i] < 0.)       
+	ESL_XFAIL(eslFAIL, errbuf, "negative r branch length at node %d", i);
+      if (T->cladesize  != NULL && (T->cladesize[i] < 0  || T->cladesize[i]  > N))
+	ESL_XFAIL(eslFAIL, errbuf, "invalid cladesize at node %d", i);
+    }
+  for (c = 0; c < N; c++)
+    if (T->taxaparent != NULL && (T->taxaparent[c] < 0 || T->taxaparent[c] > N-2))
+      ESL_XFAIL(eslFAIL, errbuf, "invalid taxaparent at node %d", c);
+
+  /* more sophisticated integrity checks on parent-child relations in
+     nodes ...*/
+  for (i = 1; i < T->N-1; i++)
+    if (T->left[T->parent[i]] != i && T->right[T->parent[i]] != i)
+      ESL_XFAIL(eslFAIL, errbuf, "parent/child link discrepancy at internal node %d\n", i);
+
+  /* ...and between terminal nodes and taxa.
+   */
+  if (T->taxaparent != NULL)
+    for (c = 0; c < T->N; c++)
+      if (T->left[T->taxaparent[c]] != -c && T->right[T->taxaparent[c]] != -c) 
+	ESL_XFAIL(eslFAIL, errbuf, "parent/child link discrepancy at taxon %d\n", c);
+
+  /* check on cladesizes */
+  if (T->cladesize != NULL)
+    for (i = 0; i < T->N-1; i++)
+      {
+	shouldbe = 0;
+	if (T->left[i]  > 0) shouldbe += T->cladesize[T->left[i]];  else shouldbe++;
+	if (T->right[i] > 0) shouldbe += T->cladesize[T->right[i]]; else shouldbe++;
+	if (shouldbe != T->cladesize[i]) 
+	  ESL_XFAIL(eslFAIL, errbuf, "incorrect cladesize at node %d", i);
+      }
+
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+
+/* Function:  esl_tree_Destroy()
+ *
+ * Purpose:   Frees an <ESL_TREE> object.
+ */
+void
+esl_tree_Destroy(ESL_TREE *T)
+{
+  if (T == NULL) return;
+
+  if (T->parent     != NULL) free(T->parent);
+  if (T->left       != NULL) free(T->left);
+  if (T->right      != NULL) free(T->right);
+  if (T->ld         != NULL) free(T->ld);
+  if (T->rd         != NULL) free(T->rd);
+  if (T->taxaparent != NULL) free(T->taxaparent);
+  if (T->cladesize  != NULL) free(T->cladesize);
+  if (T->taxonlabel != NULL) esl_Free2D((void **) T->taxonlabel, T->nalloc);
+  if (T->nodelabel  != NULL) esl_Free2D((void **) T->nodelabel,  T->nalloc-1);
+  free(T);
+  return;
+}
+
+
+
+/*----------------- end, ESL_TREE object -----------------------*/
+
+
+/*****************************************************************
+ *# 2. Newick format i/o
+ *****************************************************************/
+
+/* newick_validate_unquoted():
+ *   Returns <eslOK> if we can represent <label> as an unquoted label
+ *   in Newick format. (Spaces are ok, but will be converted to
+ *   _ on output.)
+ */
+static int 
+newick_validate_unquoted(char *label)
+{
+  char *sptr;
+
+  for (sptr = label; *sptr != '\0'; sptr++)
+    {
+      if (! isprint(*sptr))                  return eslFAIL;
+      if (strchr("()[]':;,", *sptr) != NULL) return eslFAIL;
+    }
+  return eslOK;
+}
+
+/* newick_validate_quoted():
+ *   Returns <eslOK> if we can represent <label> as a 
+ *   quoted label in Newick format. (Single quotes will
+ *   be converted to '' on output.)
+ */
+static int
+newick_validate_quoted(char *label)
+{
+  char *sptr;
+  for (sptr = label; *sptr != '\0'; sptr++)
+    {
+      if (! isprint(*sptr))                  return eslFAIL;
+    }
+  return eslOK;
+} 
+
+/* newick_write_unquoted():
+ *   Prints <label> to <fp> as an unquoted Newick label.
+ */
+static int
+newick_write_unquoted(FILE *fp, char *label)
+{
+  char *sptr;
+
+  for (sptr = label; *sptr != '\0'; sptr++)
+    {
+      if (*sptr == ' ') { if (fputc('_',   fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "newick tree write failed"); }
+      else              { if (fputc(*sptr, fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "newick tree write failed"); }
+    }
+  return eslOK;
+}
+
+/* newick_write_quoted():
+ *   Prints <label> to <fp> as a quoted Newick label.
+ */
+static int
+newick_write_quoted(FILE *fp, char *label)
+{
+  char *sptr;
+
+  if (fputc('\'', fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+  for (sptr = label; *sptr != '\0'; sptr++)
+    {
+      if (*sptr == '\'') { if (fprintf(fp, "''") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "newick tree write failed"); }
+      else               { if (fputc(*sptr, fp)  < 0) ESL_EXCEPTION_SYS(eslEWRITE, "newick tree write failed"); }
+    }
+  if (fputc('\'', fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+  return eslOK;
+}
+
+/* newick_write_taxonlabel():
+ *    Print the label for taxon <v> to stream <fp>.
+ *    Tries to print label as an unquoted label, then
+ *    as a quoted label, (then fails).
+ *    If label isn't available, does nothing.
+ *    If label contains invalid characters, throws <eslECORRUPT>.
+ */
+static int
+newick_write_taxonlabel(FILE *fp, ESL_TREE *T, int v)
+{
+  int status;
+
+  if (T->taxonlabel == NULL || T->taxonlabel[v] == NULL)
+    {
+      if (T->show_numeric_taxonlabels && fprintf(fp, "%d", v) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+      return eslOK;
+    }
+
+  if (! T->show_quoted_labels && newick_validate_unquoted(T->taxonlabel[v]) == eslOK)
+    status = newick_write_unquoted(fp, T->taxonlabel[v]);
+  else if (newick_validate_quoted(T->taxonlabel[v]) == eslOK)
+    status = newick_write_quoted(fp, T->taxonlabel[v]);
+  else
+    ESL_EXCEPTION(eslECORRUPT, "bad taxon label");
+
+  return status;
+}
+
+/* newick_write_nodelabel():
+ *    Print the label for internal node <v> to stream <fp>.
+ *    Tries to print label as an unquoted label, then
+ *    as a quoted label. 
+ *    If label isn't available, does nothing.
+ *    If tree's options say not to print node labels, does nothing.
+ *    If label contains invalid characters, throws <eslECORRUPT>.
+ */
+static int
+newick_write_nodelabel(FILE *fp, ESL_TREE *T, int v)
+{
+  int status;
+
+  if (T->nodelabel    == NULL)      return eslOK;
+  if (T->nodelabel[v] == NULL)      return eslOK;
+  if (T->show_node_labels != TRUE)  return eslOK;
+  
+  if (! T->show_quoted_labels && newick_validate_unquoted(T->nodelabel[v]) == eslOK)
+    status = newick_write_unquoted(fp, T->nodelabel[v]);
+  else if (newick_validate_quoted(T->nodelabel[v]) == eslOK)
+    status = newick_write_quoted(fp, T->nodelabel[v]);
+  else
+    ESL_EXCEPTION(eslECORRUPT, "bad node label\n");
+
+  return status;
+}
+
+/* newick_write_branchlength()
+ *    Writes the branch length *to* <v>.
+ *    If <v> is negative, it's a leaf; if <v> is positive, it's an internal node.
+ *    You can't pass the root node 0 to this. 0 always means taxon 0.
+ *    There is no branch to the root node.
+ */
+static int
+newick_write_branchlength(FILE *fp, ESL_TREE *T, int v)
+{
+  double branchlength;
+
+  if (! T->show_branchlengths) return eslOK;
+  if (T->taxaparent == NULL)   ESL_EXCEPTION(eslEINVAL, "T must have taxaparent");
+  
+  if (v <= 0)			/* leaf */
+    {
+      if      (T->left [T->taxaparent[-v]] == v) branchlength = T->ld[T->taxaparent[-v]];
+      else if (T->right[T->taxaparent[-v]] == v) branchlength = T->rd[T->taxaparent[-v]]; 
+      else    ESL_EXCEPTION(eslECORRUPT, "Can't find branch length");
+    }
+  else				/* internal node */
+    {
+      if      (T->left [T->parent[v]] == v) branchlength = T->ld[T->parent[v]];
+      else if (T->right[T->parent[v]] == v) branchlength = T->rd[T->parent[v]]; 
+      else    ESL_EXCEPTION(eslECORRUPT, "Can't find branch length");
+    }
+
+  if (fprintf(fp, ":%f", branchlength) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+  return eslOK;
+}
+
+/* Function:  esl_tree_WriteNewick()
+ *
+ * Purpose:   Writes tree <T> to stream <fp> in Newick format.
+ *  
+ *            Certain options are set in <T> to control output style, 
+ *            as follows.
+ *
+ *            If <T->show_unrooted> is <TRUE>, <T> is printed as an
+ *            unrooted tree starting with a trifurcation, a la PHYLIP
+ *            format (default=<FALSE>).
+ *
+ *            If <T->show_node_labels> is <TRUE>, then labels are
+ *            shown for internal nodes, if any are available
+ *            (default=<TRUE>).
+ *            
+ *            If <T->show_branchlengths> is <TRUE>, then branch
+ *            lengths are shown, as opposed to just printing a labeled
+ *            topology (default=<TRUE>).
+ *            
+ *            If <T->show_root_branchlength> is also <TRUE>, then a
+ *            0.0 branchlength is shown to the root node, a la Hein's
+ *            TreeAlign Newick format (default=<FALSE>).
+ *            
+ *            If <T->show_quoted_labels> is <TRUE>, then all labels
+ *            are shown in Newick's quoted format, as opposed to only
+ *            using quoted labels where necessary (default=<FALSE>).
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEMEM> on allocation error.
+ *            <eslEWRITE> on any system write error.
+ *            <eslEINCONCEIVABLE> on internal error.
+ *
+ * Xref:      SRE:STL11/74
+ */
+int
+esl_tree_WriteNewick(FILE *fp, ESL_TREE *T)
+{
+  ESL_STACK *vs = NULL;
+  ESL_STACK *cs = NULL;
+  int  v;
+  char c;
+  int  status;
+
+  if ((vs = esl_stack_ICreate()) == NULL) { status = eslEMEM; goto ERROR; }
+  if ((cs = esl_stack_CCreate()) == NULL) { status = eslEMEM; goto ERROR; }
+  
+  if ((status = esl_tree_SetTaxaParents(T)) != eslOK) goto ERROR;
+  
+  /* Initialization.
+   * Push a trifurcation (swallowing the right internal node) if unrooted;
+   * else push the first bifurcation.
+   * 
+   * When we push a trifurcation, the branch lengths will come out fine
+   * on output, if the tree followed the correct convention of having
+   * a T->rd[0] = 0.0.
+   */
+  if (fputc('(', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+  if (T->show_unrooted && T->right[0] > 0)
+    {
+      v = T->right[0];
+      if ((status = esl_stack_CPush(cs, 'x'))         != eslOK) goto ERROR;
+      if ((status = esl_stack_IPush(vs, T->right[v])) != eslOK) goto ERROR;
+      if ((status = esl_stack_CPush(cs, ','))         != eslOK) goto ERROR;
+      if ((status = esl_stack_CPush(cs, 'x'))         != eslOK) goto ERROR;
+      if ((status = esl_stack_IPush(vs, T->left[v]))  != eslOK) goto ERROR;
+    }
+  else 
+    {
+      if ((status = esl_stack_CPush(cs, 'x'))         != eslOK) goto ERROR;
+      if ((status = esl_stack_IPush(vs, T->right[0])) != eslOK) goto ERROR;
+    }
+  if ((status = esl_stack_CPush(cs, ','))             != eslOK) goto ERROR;
+  if ((status = esl_stack_CPush(cs, 'x'))             != eslOK) goto ERROR;
+  if ((status = esl_stack_IPush(vs, T->left[0]))      != eslOK) goto ERROR;
+
+
+  /* Main iteration. Pop off stacks 'til they're empty.
+   */
+  while ((status = esl_stack_CPop(cs, &c)) == eslOK)
+    {
+      if (c == ',') {  /* comma doesn't have a v stacked with it */
+	if (fputc(',', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+	continue; 
+      }
+
+      if ((status = esl_stack_IPop(vs, &v)) != eslOK) goto ERROR;
+
+      switch (c) {
+      case 'x':			/* a subtree, which could be a node or a taxon: */
+	if (v > 0)		/* internal node 1..N-2*/
+	  {
+	    if (fputc('(', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+	    if ((status = esl_stack_CPush(cs, ')'))         != eslOK) goto ERROR;
+	    if ((status = esl_stack_IPush(vs, v))           != eslOK) goto ERROR;
+	    if ((status = esl_stack_CPush(cs, 'x'))         != eslOK) goto ERROR;
+	    if ((status = esl_stack_IPush(vs, T->right[v])) != eslOK) goto ERROR;
+	    if ((status = esl_stack_CPush(cs, ','))         != eslOK) goto ERROR;
+	    if ((status = esl_stack_CPush(cs, 'x'))         != eslOK) goto ERROR;
+	    if ((status = esl_stack_IPush(vs, T->left[v]))  != eslOK) goto ERROR;
+	  }
+	else			/* taxon -(N-1)..0 */
+	  { 	    /* -v below to convert taxon code to 0..N-1 */
+	    if ((status = newick_write_taxonlabel  (fp, T, -v)) != eslOK) goto ERROR;
+	    if ((status = newick_write_branchlength(fp, T,  v)) != eslOK) goto ERROR;
+	  }
+	break;
+
+      case ')':			/* closing an internal node. v > 0 is a node code. */
+	if (fputc(')', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+	if ((status = newick_write_nodelabel   (fp, T, v)) != eslOK) goto ERROR;
+	if ((status = newick_write_branchlength(fp, T, v)) != eslOK) goto ERROR;
+	break;
+
+      default:
+	ESL_XEXCEPTION(eslEINCONCEIVABLE, "bad state code");
+	break;
+      }
+    }
+  
+  /* Termination
+   */
+  if (fputc(')', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+  if ((status = newick_write_nodelabel(fp, T, 0)) != eslOK) goto ERROR;
+  if (T->show_branchlengths && T->show_root_branchlength)
+    { if (fprintf(fp, ":0.0") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "newick tree write failed"); }
+  if (fputc(';', fp)  < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+  if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "newick tree write failed");
+
+  esl_stack_Destroy(vs);
+  esl_stack_Destroy(cs);
+  return eslOK;
+
+ ERROR:
+  if (vs != NULL) esl_stack_Destroy(vs);
+  if (cs != NULL) esl_stack_Destroy(cs);
+  return status;
+
+}
+
+
+/* newick_advance_buffer()
+ * 
+ * Advance the read buffer by one character; reload it
+ * if we reach the end. <eslOK> on success, and <eslEOF>
+ * if the read fails.
+ */
+static int
+newick_advance_buffer(FILE *fp, char *buf, int *pos, int *nc)
+{
+  (*pos)++;
+  if (*pos == *nc)
+    {
+      *nc = fread(buf, sizeof(char), 4096, fp);
+      if (*nc == 0) return eslEOF;
+      *pos = 0;
+    }
+  return eslOK;
+}
+
+/* newick_skip_whitespace()
+ * 
+ * Given the 4k input buffer <buf>, which currently contains
+ * <*nc> total characters and is positioned at position <*pos>,
+ * move <*pos> to be at the first nonwhitespace character,
+ * skipping any Newick comments ([...]) encountered. Read
+ * new data from the stream <fp> into <buf> as needed.
+ * 
+ * Return <eslOK> on success. <*pos> is reset to point at a
+ * non-whitespace input character. <*nc> may be reset and the contents
+ * of <buf> altered if a new block was read from <fp> into <buf>.
+ * 
+ * Returns <eslEOF> if end-of-file is reached in <fp> before a data
+ * character is found, or if a read error occurs.
+ */
+static int
+newick_skip_whitespace(FILE *fp, char *buf, int *pos, int *nc)
+{
+  int commentlevel = 0;
+
+  while (commentlevel > 0 || isspace(buf[*pos]) || buf[*pos] == '[')
+    {
+      if (buf[*pos] == '[') commentlevel++;
+      if (buf[*pos] == ']') commentlevel--;
+      if (newick_advance_buffer(fp, buf, pos, nc) == eslEOF) return eslEOF;
+    }
+  return eslOK;
+}  
+
+
+/* newick_parse_quoted_label()
+ * 
+ * On entry, buf[pos] == '\'': the opening single quote.
+ * On exit,  buf[pos] is positioned at the next data character following the closing
+ *           single quote; possibly the ':' for a branch length;
+ *           and <ret_label> points to a newly allocated, NUL-terminated string
+ *          containing the label that was read (possibly the empty string).
+ * Returns eslOK on success.
+ *
+ * Returns eslEFORMAT on parse error, eslEOF if it runs out of data.
+ */
+static int
+newick_parse_quoted_label(FILE *fp, char *buf, int *pos, int *nc, char **ret_label)
+{
+  char *label  = NULL;
+  void *tmp;
+  int   n      = 0;
+  int   nalloc = 0;
+  int   status;
+  
+  nalloc = 32;  
+  ESL_ALLOC(label, sizeof(char) * nalloc);
+
+  /* advance past the opening ' */
+  if (buf[*pos] != '\'') { status = eslEFORMAT; goto ERROR; }
+  if ((status = newick_advance_buffer(fp, buf, pos, nc)) != eslOK) goto ERROR;
+
+  /* skip leading whitespace (\n and comments forbidden in quoted label) */
+  while (buf[*pos] == '\t' || buf[*pos] == ' ')   
+    if ((status = newick_advance_buffer(fp, buf, pos, nc)) != eslOK) goto ERROR;
+
+  /* Read the label */
+  while (1) {
+    if (buf[*pos] == '\'') {	/* watch out for escaped single quotes, '' */
+      if ((status = newick_advance_buffer(fp, buf, pos, nc)) != eslOK) goto ERROR;
+      if (buf[*pos] != '\'') break; /* we've just moved past the last ' */
+    }
+    label[n++] = buf[*pos]; 
+    if ((status = newick_advance_buffer(fp, buf, pos, nc)) != eslOK) goto ERROR;
+    if (n == (nalloc-1)) {  /* reallocate label if it fills, leave room for NUL */
+      ESL_RALLOC(label, tmp, sizeof(char) * (nalloc * 2));
+      nalloc *= 2;
+    }
+  }
+  
+  /* backtrack over any trailing whitespace and nul-terminate. */
+  while (n>0 && isspace(label[n-1])) n--; 
+  label[n] = '\0';
+  *ret_label = label;
+  return eslOK;
+
+ ERROR:
+  if (label != NULL) { free(label); *ret_label = NULL; }
+  return status;
+
+}
+
+/* newick_parse_unquoted_label
+ *
+ * On entry, buf[pos] == first character in the label.
+ * On exit,  buf[pos] is positioned at the next data character following the end
+ *           of the label --  one of "),\t\n;[:"  --
+ *           and <ret_label> points to a newly allocated, NUL-terminated string
+ *           containing the label that was read (possibly the empty string).
+ * Returns eslOK on success.
+ *
+ * Returns eslEFORMAT on parse error, eslEOF if it runs out of data.
+ */
+static int
+newick_parse_unquoted_label(FILE *fp, char *buf, int *pos, int *nc, char **ret_label)
+{
+  char *label  = NULL;
+  char *tmp    = NULL;
+  int   n      = 0;
+  int   nalloc = 0;
+  int   status;
+  
+  nalloc = 32;  
+  ESL_ALLOC(label, sizeof(char) * nalloc);
+
+  while (1) {
+    if (strchr("(]",          buf[*pos]) != NULL) { status = eslEFORMAT; goto ERROR; }
+    if (strchr(" \t\n)[':;,", buf[*pos]) != NULL) { break; }
+    label[n++] = buf[*pos];
+    if (newick_advance_buffer(fp, buf, pos, nc) == eslEOF) { status = eslEOF; goto ERROR; }
+
+    if (n == (nalloc-1)) {  /* reallocate label if it fills, leave room for NUL */
+      ESL_RALLOC(label, tmp, sizeof(char) * (nalloc * 2));
+      nalloc *= 2;
+    }
+  }    
+  label[n]   = '\0';
+  *ret_label = label;
+  return eslOK;
+
+ ERROR:
+  if (label != NULL) { free(label); *ret_label = NULL; }
+  return status;
+}
+
+/* newick_parse_branchlength
+ *
+ * On entry, buf[pos] == ':'
+ * On exit,  buf[pos] is positioned at the next data character following the end
+ *           of the branchlength --  one of "),\t\n;[:"  
+ *           and <ret_d> is the branch length that was read.
+ *
+ * Returns eslOK  on success;
+ *
+ * Returns eslEFORMAT on parse error (including nonexistent branch lengths),
+ *         eslEOF if it runs out of data in the file.
+ */
+static int
+newick_parse_branchlength(FILE *fp, char *buf, int *pos, int *nc, double *ret_d)
+{
+  char *branch = NULL;
+  char *tmp    = NULL;
+  int   n      = 0;
+  int   nalloc = 0;
+  int   status;
+  
+  nalloc = 32;  
+  ESL_ALLOC(branch, sizeof(char) * nalloc);
+
+  if (buf[*pos] != ':') { status = eslEFORMAT; goto ERROR; }
+  if (( status = newick_advance_buffer(fp, buf, pos, nc)) != eslOK)  goto ERROR;
+
+  while (1) {
+    if (strchr("(]",          buf[*pos]) != NULL) { status = eslEFORMAT; goto ERROR; }
+    if (strchr(" \t\n)[':;,", buf[*pos]) != NULL) break;
+    branch[n++] = buf[*pos];
+    if ((status = newick_advance_buffer(fp, buf, pos, nc)) != eslOK) goto ERROR;
+
+    if (n == (nalloc-1)) {  /* reallocate label if it fills, leave room for NUL */
+      ESL_RALLOC(branch, tmp, sizeof(char) * (nalloc * 2));
+      nalloc *= 2;
+    }
+  }    
+
+  branch[n]   = '\0';
+  *ret_d = strtod(branch, &tmp);
+  if (n == 0 || tmp != branch+n) { status = eslEFORMAT; goto ERROR; }
+  free(branch);
+  return eslOK;
+
+ ERROR:
+  if (branch != NULL) free(branch);
+  *ret_d = 0.;
+  return status;
+}
+
+
+
+
+/* Function:  esl_tree_ReadNewick()
+ * Synopsis:  Input a Newick format tree.
+ *
+ * Purpose:   Read a Newick format tree from an open input stream <fp>.
+ *            Return the new tree in <ret_T>. 
+ *            
+ *            The new tree <T> will have the optional <T->taxonlabel> and
+ *            <T->nodelabel> arrays allocated, containing names of all the
+ *            taxa and nodes. Whenever no label appeared in the Newick file
+ *            for a node or taxon, the label is set to the empty string.
+ *            
+ *            Caller may optionally provide an <errbuf> of at least
+ *            <eslERRBUFSIZE> chars, to retrieve diagnostic information
+ *            in case of a parsing problem; or <errbuf> may be passed as
+ *            <NULL>.
+ *
+ * Args:      fp      - open input stream
+ *            errbuf  - NULL, or allocated space for >= eslERRBUFSIZE chars
+ *            ret_T   - RETURN: the new tree.     
+ *
+ * Returns:   Returns <eslOK> on success, and <ret_T> points
+ *            to the new tree.
+ *
+ *            Returns <eslEFORMAT> on parse errors, such as premature EOF
+ *            or bad syntax in the Newick file. In this case, <ret_T> is
+ *            returned NULL, and the <errbuf> (if provided> contains an
+ *            informative error message.
+ *
+ * Throws:    <eslEMEM> on memory allocation errors.
+ *            <eslEINCONCEIVABLE> may also arise in case of internal bugs.
+ *
+ * Xref:      STL11/75
+ */
+int
+esl_tree_ReadNewick(FILE *fp, char *errbuf, ESL_TREE **ret_T) 
+{
+  ESL_TREE  *T   = NULL;	/* the new, growing tree */
+  ESL_STACK *cs  = NULL;	/* state stack: possible states are LRX);,  */
+  ESL_STACK *vs  = NULL;	/* node index stack: LRX) states are associated with node #'s */
+  int        status;
+  char       buf[4096];		/* 4K input buffer */
+  int        pos,nc;		/* position in buf, and number of chars in buf */
+  char       c;			/* current state */
+  int        v;		        /* current node idx */
+  int        currnode;
+  int        currtaxon;
+  char      *label;		/* a parsed label */
+  double     d;			/* a parsed branch length */
+  
+  if (errbuf != NULL) *errbuf = '\0';
+  if ((vs = esl_stack_ICreate()) == NULL) { status = eslEMEM; goto ERROR; };
+  if ((cs = esl_stack_CCreate()) == NULL) { status = eslEMEM; goto ERROR; };
+
+  /* Create the tree, initially allocated for 32 taxa.
+   * Allocate for taxon and node labels, too.
+   */
+  if ((T  = esl_tree_CreateGrowable(32)) == NULL) { status = eslEMEM; goto ERROR; };
+  ESL_ALLOC(T->taxonlabel, sizeof(char *) * 32);
+  ESL_ALLOC(T->nodelabel,  sizeof(char *) * 31);
+  for (currtaxon = 0; currtaxon < 32; currtaxon++) T->taxonlabel[currtaxon] = NULL;
+  for (currnode  = 0; currnode  < 31; currnode++)  T->nodelabel[currnode]   = NULL;
+
+  /* Load the input buffer
+   */
+  if ((nc = fread(buf, sizeof(char), 4096, fp)) == 0) 
+    ESL_XFAIL(eslEFORMAT, errbuf, "file is empty.");
+  pos = 0;
+  
+  /* Initialization: 
+   *    create the root node in the tree;
+   *    push L,R...); onto the stacks; 
+   *    swallow the first ( in the file.
+   *
+   * A note on memory management in the growing tree:
+   *  we are going to keep T->N set to the number of taxa
+   *  that the tree *will* contain, given the number of nodes
+   *  it currently *does* contain. Before we try to add
+   *  any new node, we call the Grow() routine, which will
+   *  check T->N against T->nalloc. This strategy works 
+   *  because nodes always get added before their children
+   *  taxa, so the # of taxa is always <= nodes-1: that is,
+   *  our need for reallocation is driven by new nodes, 
+   *  never by new taxa; that is, if we have enough room
+   *  for nodes, we automatically have enough room for the
+   *  taxa.
+   */
+  T->parent[0] = 0;
+  currnode     = 1;
+  currtaxon    = 0;		
+  T->N         = 2;   /* c.f. note above: T->N is the # of taxa we *would* hold, given currnode=1*/
+  if (esl_stack_CPush(cs, ';') != eslOK)  { status = eslEMEM; goto ERROR; };
+  if (esl_stack_CPush(cs, ')') != eslOK)  { status = eslEMEM; goto ERROR; };
+  if (esl_stack_IPush(vs, 0)   != eslOK)  { status = eslEMEM; goto ERROR; };
+  if (esl_stack_CPush(cs, 'X') != eslOK)  { status = eslEMEM; goto ERROR; };
+  if (esl_stack_IPush(vs, 0)   != eslOK)  { status = eslEMEM; goto ERROR; };
+  if (esl_stack_CPush(cs, 'R') != eslOK)  { status = eslEMEM; goto ERROR; };
+  if (esl_stack_IPush(vs, 0)   != eslOK)  { status = eslEMEM; goto ERROR; };
+  if (esl_stack_CPush(cs, ',') != eslOK)  { status = eslEMEM; goto ERROR; };
+  if (esl_stack_CPush(cs, 'L') != eslOK)  { status = eslEMEM; goto ERROR; };
+  if (esl_stack_IPush(vs, 0)   != eslOK)  { status = eslEMEM; goto ERROR; };
+
+  if (newick_skip_whitespace(fp, buf, &pos, &nc) != eslOK) 
+    ESL_XFAIL(eslEFORMAT, errbuf, "file ended prematurely.");
+  if (buf[pos] != '(') 
+    ESL_XFAIL(eslEFORMAT, errbuf, "file is not in Newick format.");
+  if (newick_advance_buffer(fp, buf, &pos, &nc) == eslEOF)
+    ESL_XFAIL(eslEFORMAT, errbuf, "file ended prematurely.");
+
+  /* Iteration.
+   */
+  while ((status = esl_stack_CPop(cs, &c)) == eslOK)
+    {
+ 
+      if (newick_skip_whitespace(fp, buf, &pos, &nc) != eslOK) 
+	ESL_XFAIL(eslEFORMAT, errbuf, "file ended prematurely.");
+
+      if (c == ',')
+	{ 
+	  if (buf[pos] != ',') 
+	    ESL_XFAIL(eslEFORMAT, errbuf, "expected a comma, saw %c.", buf[pos]);
+	  if (newick_advance_buffer(fp, buf, &pos, &nc) == eslEOF)
+	    ESL_XFAIL(eslEFORMAT, errbuf, "file ended prematurely.");
+	  continue;
+	}
+
+      else if (c == ';')
+	{
+	  if (buf[pos] != ';')
+	    ESL_XFAIL(eslEFORMAT, errbuf, "expected a semicolon, saw %c.", buf[pos]);
+	  break;		/* end of the Newick file */
+	}
+
+      else if (c == 'L' || c == 'R') /* c says, we expect to add a subtree next */
+	{
+	  if (esl_stack_IPop(vs, &v) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* v = parent of currnode */
+	  
+	  if (buf[pos] == '(')	/* a new interior node attaches to v */
+	    {
+	      if (esl_tree_Grow(T) != eslOK) { status = eslEMEM; goto ERROR; };	/* c.f. memory management note: check that we can add new node */
+
+	      T->parent[currnode] = v;
+	      if (c == 'L') T->left[v]  = currnode;
+	      else          T->right[v] = currnode;
+
+	      if (esl_stack_CPush(cs, ')')      != eslOK)  { status = eslEMEM; goto ERROR; };
+	      if (esl_stack_IPush(vs, currnode) != eslOK)  { status = eslEMEM; goto ERROR; };
+	      if (esl_stack_CPush(cs, 'X')      != eslOK)  { status = eslEMEM; goto ERROR; };
+	      if (esl_stack_IPush(vs, currnode) != eslOK)  { status = eslEMEM; goto ERROR; };
+	      if (esl_stack_CPush(cs, 'R')      != eslOK)  { status = eslEMEM; goto ERROR; };
+	      if (esl_stack_IPush(vs, currnode) != eslOK)  { status = eslEMEM; goto ERROR; };
+	      if (esl_stack_CPush(cs, ',')      != eslOK)  { status = eslEMEM; goto ERROR; };
+	      if (esl_stack_CPush(cs, 'L')      != eslOK)  { status = eslEMEM; goto ERROR; };
+	      if (esl_stack_IPush(vs, currnode) != eslOK)  { status = eslEMEM; goto ERROR; };
+
+	      if (newick_advance_buffer(fp, buf, &pos, &nc) == eslEOF)
+		ESL_XFAIL(eslEFORMAT, errbuf, "file ended prematurely.");
+	      currnode++;		/* T->N == # of internal nodes/idx of next internal node */
+	    }
+	  else /* a taxon attaches to v */
+	    {
+	      if (buf[pos] == '\'') { /* a quoted label, for a new taxon attached to v*/
+		if ((status = newick_parse_quoted_label(fp, buf, &pos, &nc,   &label)) != eslOK)  
+		  ESL_XFAIL(eslEFORMAT, errbuf, "failed to parse a quoted taxon label");
+	      } else {               /* an unquoted label, for a new taxon attached to v */
+		if ((status = newick_parse_unquoted_label(fp, buf, &pos, &nc, &label)) != eslOK)  
+		  ESL_XFAIL(eslEFORMAT, errbuf, "failed to parse an unquoted taxon label");
+	      }
+
+	      if (newick_skip_whitespace(fp, buf, &pos, &nc) != eslOK) 
+		ESL_XFAIL(eslEFORMAT, errbuf, "file ended prematurely");
+
+	      d = 0.;
+	      if (buf[pos] == ':') {
+		if ((status = newick_parse_branchlength(fp, buf, &pos, &nc, &d)) != eslOK)   
+		  ESL_XFAIL(eslEFORMAT, errbuf, "failed to parse a branch length");
+	      }
+	      
+	      if (c == 'L') { T->left[v]  = -currtaxon;  T->ld[v] = d; }
+	      else          { T->right[v] = -currtaxon;  T->rd[v] = d; }         
+
+	      T->taxonlabel[currtaxon]  = label;
+	      currtaxon++;
+	    }
+	}
+
+      else if (c == ')')	/* c says, expect to close an interior node next */
+	{
+	  /* get v = the interior node we're closing, naming, and setting a branch length to */
+	  if (( status = esl_stack_IPop(vs, &v))  != eslOK)  goto ERROR;
+	  if (buf[pos] != ')') ESL_XFAIL(eslEFORMAT, errbuf, "Parse error: expected ) to close node #%d\n", v);
+
+	  if (newick_advance_buffer(fp, buf, &pos, &nc) == eslEOF)
+	    ESL_XFAIL(eslEFORMAT, errbuf, "file ended prematurely.");
+
+	  if (newick_skip_whitespace(fp, buf, &pos, &nc) != eslOK) 
+	    ESL_XFAIL(eslEFORMAT, errbuf, "file ended prematurely.");
+
+	  if (buf[pos] == '\'') { 
+	    if ((status = newick_parse_quoted_label(fp, buf, &pos, &nc, &label)) != eslOK)    
+	      ESL_XFAIL(eslEFORMAT, errbuf, "failed to parse a quoted node label");
+	  } else {               /* an unquoted label, for a new taxon attached to v */
+	    if ((status = newick_parse_unquoted_label(fp, buf, &pos, &nc, &label)) != eslOK) 
+	      ESL_XFAIL(eslEFORMAT, errbuf, "failed to parse an unquoted node label");
+	  }
+	  
+	  if (newick_skip_whitespace(fp, buf, &pos, &nc) != eslOK) 
+	    ESL_XFAIL(eslEFORMAT, errbuf, "file ended prematurely.");
+
+	  d = 0.;
+	  if (buf[pos] == ':') {
+	    if ((status = newick_parse_branchlength(fp, buf, &pos, &nc, &d)) != eslOK)  
+	      ESL_XFAIL(eslEFORMAT, errbuf, "failed to parse a branch length");
+	  }
+
+	  if (v > 0) { /* branch length to root node is meaningless, ignore it */
+	    if      (T->left [T->parent[v]] == v) T->ld[T->parent[v]] = d;
+	    else if (T->right[T->parent[v]] == v) T->rd[T->parent[v]] = d;
+	  }
+
+	  T->nodelabel[v] = label;
+	}
+
+      else if (c == 'X')	/* optionally, multifurcations: if we see a comma, we have another node to deal with */
+	{ 			
+	  if ((status = esl_stack_IPop(vs, &v)) != eslOK) goto ERROR;
+	  if (buf[pos] != ',') continue;
+	  if (esl_tree_Grow(T) != eslOK) { status = eslEMEM; goto ERROR; };	/* c.f. memory management note: check that we can add new node */
+
+	  /* v = the interior node that is multifurcated.
+           * What we're going to do is to create a new node y; move the existing right child of v 
+           * to the left child of y; and connect y as the new right child of v with a branch 
+           * length of zero. The right child of y is now open. Then, we push a X->,RX production, so the next subtree will
+           * be parsed as the right child of y. We can do this ad infinitum, resulting in
+           * a representation of a multifurcation as, for example, a (A,(B,(C,(D,E)))) binary
+           * subtree with zero length interior branches for a five-way multifurcation.
+           *
+           * This swapping destroys the order of the nodes: they will not be in preorder traversal.
+           * This is temporarily ok. We renumber later.
+	   */
+	  T->left[currnode]   = T->right[v];
+	  T->ld[currnode]     = T->rd[v];
+	  T->parent[currnode] = v;
+	  if (T->right[v] > 0)
+	    T->parent[T->right[v]] = currnode;
+	  T->right[v]         = currnode;
+	  T->rd[v]            = 0.;
+	  
+	  if (esl_stack_CPush(cs, 'X')       != eslOK)  { status = eslEMEM; goto ERROR; };
+	  if (esl_stack_IPush(vs, currnode)  != eslOK)  { status = eslEMEM; goto ERROR; };
+	  if (esl_stack_CPush(cs, 'R')       != eslOK)  { status = eslEMEM; goto ERROR; };
+	  if (esl_stack_IPush(vs, currnode)  != eslOK)  { status = eslEMEM; goto ERROR; };	  
+	  if (esl_stack_CPush(cs, ',')       != eslOK)  { status = eslEMEM; goto ERROR; };	  
+	  currnode++;
+	}
+
+      T->N = currnode + 1; /* c.f. memory management note: keep T->N = # of taxa the tree *would* hold, given currnode */
+    }
+
+  esl_tree_RenumberNodes(T);
+
+  esl_stack_Destroy(cs);
+  esl_stack_Destroy(vs);
+  *ret_T = T;
+  return eslOK;
+
+ ERROR:
+  if (T  != NULL) esl_tree_Destroy(T);
+  if (cs != NULL) esl_stack_Destroy(cs);
+  if (vs != NULL) esl_stack_Destroy(vs);
+  *ret_T = NULL;
+  return status;
+}
+  
+
+
+/*-------------------- end, Newick i/o --------------------------*/
+
+
+/*****************************************************************
+ * 3. Tree comparison algorithms
+ *****************************************************************/
+
+/* Function:  esl_tree_Compare()
+ *
+ * Purpose:   Given two trees <T1> and <T2> for the same
+ *            set of <N> taxa, compare the topologies of the
+ *            two trees.
+ *            
+ *            The routine must be able to determine which taxa are
+ *            equivalent in <T1> and <T2>. If <T1> and <T2> both have
+ *            taxon labels set, then the routine compares labels.
+ *            This is the usual case. (Therefore, the <N> labels must
+ *            all be different, or the routine will be unable to do
+ *            this mapping uniquely.) As a special case, if neither
+ *            <T1> nor <T2> has taxon labels, then the indexing of
+ *            taxa <0..N-1> is assumed to be exactly the same in the
+ *            two trees. (And if one tree has labels and the other
+ *            does not, an <eslEINVAL> exception is thrown.)
+ *            
+ *            For comparing unrooted topologies, be sure that <T1> and
+ *            <T2> both obey the unrooted tree convention that the
+ *            "root" is placed on the branch to taxon 0. (That is,
+ *            <T->left[0] = 0>.)
+ *            
+ * Returns:   <eslOK> if tree topologies are identical. <eslFAIL>
+ *            if they aren't.           
+ *            
+ * Throws:    <eslEMEM> on allocation error. <eslEINVAL> if the taxa in
+ *            the trees can't be mapped uniquely and completely to
+ *            each other (because one tree doesn't have labels and
+ *            one does, or because the labels aren't unique, or the
+ *            two trees have different taxa).
+ */
+int
+esl_tree_Compare(ESL_TREE *T1, ESL_TREE *T2)
+{
+  int *Mg   = NULL;		/* the M(g) tree-mapping function for internal nodes [0..N-2] */
+  int *Mgt  = NULL;		/* the M(g) tree-mapping function for leaves (taxa), [0..N-1] */
+  int  g, child;		/* node indices for parent, children */
+  int  a,b;
+  int  status;
+
+  if (T1->N != T2->N) ESL_EXCEPTION(eslEINVAL, "trees don't have the same # of taxa");
+
+  /* We need taxon parent map in tree 2, but not tree 1.
+   */
+  if ((status = esl_tree_SetTaxaParents(T2)) != eslOK) goto ERROR;
+
+  /* We're going to use the tree mapping function M(g) [Goodman79].
+   * In the implementation here, we split it into two, Mg[] for internal
+   * nodes 0..N-2 and Mgt[] for taxa 0..N-1.
+   *
+   * Mg[g] for node g in T1 is the index of the lowest node in T2
+   * that contains the same children taxa as the subtree 
+   * under g in T1.
+   *
+   * For the taxa, Mgt[g] for taxon g in T1 is the index of the
+   * corresponding taxon in T2. If neither tree has taxon labels
+   * Mgt[g] = g for all g. Otherwise we have to compare labels. Right
+   * now, we do this by brute force, which is O(N^2); if this ever
+   * becomes rate limiting, replace it with a keyhash to make it O(N)
+   * (and in fact, the keyhash of taxon names could even become part
+   * of the ESL_TREE).
+   */
+  ESL_ALLOC(Mg,  sizeof(int) * (T1->N-1));  
+  ESL_ALLOC(Mgt, sizeof(int) * (T1->N));
+  if (T1->taxonlabel != NULL && T2->taxonlabel != NULL)
+    {
+      esl_vec_ISet(Mgt, T1->N, -1);	/* flags for "unset" */
+      for (a = 0; a < T1->N; a++)
+	{
+	  for (b = 0; b < T1->N; b++)
+	    if (strcmp(T1->taxonlabel[a], T2->taxonlabel[b]) == 0) 
+	      { Mgt[a] = b; break; }
+	}
+      for (a = 0; a < T1->N; a++)
+	if (Mgt[a] == -1) ESL_XEXCEPTION(eslEINVAL, "couldn't map taxa");
+    }
+  else if (T1->taxonlabel == NULL && T2->taxonlabel == NULL)
+    {
+      for (a = 0; a < T1->N; a++)
+	Mgt[a] = a;
+    }
+  else
+    ESL_XEXCEPTION(eslEINVAL, "either both trees must have taxon labels, or neither");      
+
+  /* Finally, we use the SDI algorithm [ZmasekEddy01] to construct
+   * M(g) for internal nodes, by postorder traversal of T1.
+   */
+  for (g = T1->N-2; g >= 0; g--)
+    {
+      child = T1->left[g];
+      if (child <= 0)  a = T2->taxaparent[Mgt[-child]]; 
+      else             a = T2->parent[Mg[child]];
+
+      child = T1->right[g];
+      if (child <= 0)  b = T2->taxaparent[Mgt[-child]]; 
+      else             b = T2->parent[Mg[child]];
+
+      /* a shortcut in SDI: special case for exact tree comparison: */
+      if (a != b) { free(Mg); free(Mgt); return eslFAIL; } 
+      Mg[g] = a;
+    }
+
+  free(Mg);
+  free(Mgt);
+  return eslOK;
+
+ ERROR:
+  if (Mg  != NULL) free(Mg);
+  if (Mgt != NULL) free(Mgt);
+  return status;
+}
+
+/*----------------- end, tree comparison  -----------------------*/
+
+
+
+
+
+
+/*****************************************************************
+ * 4. Clustering algorithms for tree construction.
+ *****************************************************************/
+
+/* cluster_engine()
+ * 
+ * Implements four clustering algorithms for tree construction:
+ * UPGMA, WPGMA, single-linkage, and maximum-linkage. These differ
+ * only by the rule used to construct new distances after joining
+ * two clusters i,j.
+ * 
+ * Input <D_original> is a symmetric distance matrix, for <D->n> taxa.
+ * The diagonal is all 0's, and off-diagonals are $\geq 0$. <D->n>
+ * must be at least two.
+ * 
+ * <mode> is one of <eslUPGMA>, <eslWPGMA>, <eslSINGLE_LINKAGE>, or
+ * <eslCOMPLETE_LINKAGE>: a flag specifying which algorithm to use.
+ * 
+ * The output is a tree structure, returned in <ret_T>.
+ * 
+ * Returns <eslOK> on success.
+ * 
+ * Throws <eslEMEM> on allocation failure.
+ * 
+ * Complexity: O(N^2) in memory, O(N^3) in time.
+ * 
+ * This function can be optimized. Memory usage is at least
+ * 4x more than necessary. First, we don't need to make a copy of D
+ * if the caller doesn't mind it being consumed. Second, D only
+ * needs to be lower- or upper-triangular, because it's symmetric,
+ * but that requires changing dmatrix module. In time,
+ * O(N^2 log N) if not O(N^2) should be possible, by being more
+ * sophisticated about identifying the minimum element; 
+ * see Gronau and Moran (2006).
+ * 
+ */
+static int
+cluster_engine(ESL_DMATRIX *D_original, int mode, ESL_TREE **ret_T)
+{
+  ESL_DMATRIX *D = NULL;
+  ESL_TREE    *T = NULL;
+  double      *height = NULL;	/* height of internal nodes  [0..N-2]          */
+  int         *idx    = NULL;	/* taxa or node index of row/col in D [0..N-1] */
+  int         *nin    = NULL;	/* # of taxa in clade in row/col in D [0..N-1] */
+  int          N;
+  int          i = 0, j = 0;
+  int          row,col;
+  double       minD;
+  int          status;
+
+  /* Contract checks.
+   */
+  ESL_DASSERT1((D_original != NULL));               /* matrix exists      */
+  ESL_DASSERT1((D_original->n == D_original->m));   /* D is NxN square    */
+  ESL_DASSERT1((D_original->n >= 2));               /* >= 2 taxa          */
+#if (eslDEBUGLEVEL >=1)
+  for (i = 0; i < D_original->n; i++) {
+    assert(D_original->mx[i][i] == 0.);	           /* self-self d = 0    */
+    for (j = i+1; j < D_original->n; j++)	   /* D symmetric        */
+      assert(D_original->mx[i][j] == D_original->mx[j][i]);
+  }
+#endif
+
+  /* Allocations.
+   * NxN copy of the distance matrix, which we'll iteratively whittle down to 2x2;
+   * tree for N taxa;
+   */
+  if ((D = esl_dmatrix_Clone(D_original)) == NULL) return eslEMEM;
+  if ((T = esl_tree_Create(D->n))         == NULL) return eslEMEM;
+  ESL_ALLOC(idx,    sizeof(int)    *  D->n);
+  ESL_ALLOC(nin,    sizeof(int)    *  D->n);
+  ESL_ALLOC(height, sizeof(double) * (D->n-1));
+  for (i = 0; i < D->n;   i++) idx[i]    = -i; /* assign taxa indices to row/col coords */
+  for (i = 0; i < D->n;   i++) nin[i ]   = 1;  /* each cluster starts as 1  */
+  for (i = 0; i < D->n-1; i++) height[i] = 0.; 
+
+  /* If we're doing either single linkage or complete linkage clustering,
+   * we will construct a "linkage tree", where ld[v], rd[v] "branch lengths"
+   * below node v are the linkage value for clustering node v; thus 
+   * ld[v] == rd[v] in a linkage tree.
+   * For UPGMA or WPGMA, we're building an additive tree, where ld[v] and
+   * rd[v] are branch lengths.
+   */
+  if (mode == eslSINGLE_LINKAGE || mode == eslCOMPLETE_LINKAGE)
+    T->is_linkage_tree = TRUE;
+
+  for (N = D->n; N >= 2; N--)
+    {
+      /* Find minimum in our current N x N matrix.
+       * (Don't init minD to -infinity; linkage trees use sparse distance matrices 
+       * with -infinity representing unlinked.)
+       */
+      minD = D->mx[0][1]; i = 0; j = 1;	/* init with: if nothing else, try to link 0-1 */
+      for (row = 0; row < N; row++)
+	for (col = row+1; col < N; col++)
+	  if (D->mx[row][col] < minD)
+	    {
+	      minD = D->mx[row][col];
+	      i    = row;
+	      j    = col;
+	    }
+
+      /* We're joining node at row/col i with node at row/col j.
+       * Add node (index = N-2) to the tree at height minD/2.
+       */
+      T->left[N-2]  = idx[i];
+      T->right[N-2] = idx[j];
+      if (T->is_linkage_tree)        height[N-2]   = minD;
+      else                           height[N-2]   = minD / 2.;
+
+      /* Set the branch lengths (additive trees) or heights (linkage trees)
+       */
+      T->ld[N-2] = T->rd[N-2] = height[N-2];
+      if (! T->is_linkage_tree) {
+	if (idx[i] > 0) T->ld[N-2] = ESL_MAX(0., T->ld[N-2] - height[idx[i]]);  // max to 0, to avoid fp roundoff giving us negative length
+	if (idx[j] > 0) T->rd[N-2] = ESL_MAX(0., T->rd[N-2] - height[idx[j]]);      
+      }
+      
+      /* If either node was an internal node, record parent in it.
+       */
+      if (idx[i] > 0)  T->parent[idx[i]] = N-2;
+      if (idx[j] > 0)  T->parent[idx[j]] = N-2;
+
+      /* Now, build a new matrix by merging row i+j and col i+j.
+       *  1. move j to N-1 (unless it's already there)
+       *  2. move i to N-2 (unless it's already there)
+       */
+      if (j != N-1)
+	{
+	  for (row = 0; row < N; row++)
+	    ESL_SWAP(D->mx[row][N-1], D->mx[row][j], double);
+	  for (col = 0; col < N; col++)
+	    ESL_SWAP(D->mx[N-1][col], D->mx[j][col], double);
+	  ESL_SWAP(idx[j],  idx[N-1],  int);
+	  ESL_SWAP(nin[j], nin[N-1], int);
+	}
+      if (i != N-2)
+	{
+	  for (row = 0; row < N; row++)
+	    ESL_SWAP(D->mx[row][N-2], D->mx[row][i], double);
+	  for (col = 0; col < N; col++)
+	    ESL_SWAP(D->mx[N-2][col], D->mx[i][col], double);
+	  ESL_SWAP(idx[i], idx[N-2], int);
+	  ESL_SWAP(nin[i], nin[N-2], int);
+	}
+      i = N-2;
+      j = N-1;
+
+      /* 3. merge i (now at N-2) with j (now at N-1) 
+       *    according to the desired clustering rule.
+       */
+      for (col = 0; col < N; col++)
+	{
+	  switch (mode) {
+	  case eslUPGMA: 
+	    D->mx[i][col] = (nin[i] * D->mx[i][col] + nin[j] * D->mx[j][col]) / (double) (nin[i] + nin[j]);
+	    break;
+	  case eslWPGMA:            D->mx[i][col] = (D->mx[i][col] + D->mx[j][col]) / 2.;    break;
+	  case eslSINGLE_LINKAGE:   D->mx[i][col] = ESL_MIN(D->mx[i][col], D->mx[j][col]);   break;
+	  case eslCOMPLETE_LINKAGE: D->mx[i][col] = ESL_MAX(D->mx[i][col], D->mx[j][col]);   break;
+	  default:                  ESL_XEXCEPTION(eslEINCONCEIVABLE, "no such strategy");
+	  }
+	  D->mx[col][i] = D->mx[i][col];
+	}
+
+      /* row/col i is now the new cluster, and it corresponds to node N-2
+       * in the tree (remember, N is decrementing at each iteration).
+       * row/col j (N-1) falls away when we go back to the start of the loop 
+       * and decrement N. 
+       */
+      nin[i] += nin[j];
+      idx[i]  = N-2;
+    }  
+
+  esl_dmatrix_Destroy(D);
+  free(height);
+  free(idx);
+  free(nin);
+  if (ret_T != NULL) *ret_T = T;
+  return eslOK;
+
+ ERROR:
+  if (D      != NULL) esl_dmatrix_Destroy(D);
+  if (T      != NULL) esl_tree_Destroy(T);
+  if (height != NULL) free(height);
+  if (idx    != NULL) free(idx);
+  if (nin    != NULL) free(nin);
+  if (ret_T != NULL) *ret_T = NULL;
+  return status;
+}
+
+
+/* Function:  esl_tree_UPGMA()
+ *
+ * Purpose:   Given distance matrix <D>, use the UPGMA algorithm
+ *            to construct a tree <T>.
+ *
+ * Returns:   <eslOK> on success; the tree is returned in <ret_T>,
+ *            and must be freed by the caller with <esl_tree_Destroy()>.
+ *
+ * Throws:    <eslEMEM> on allocation problem, and <ret_T> is set <NULL>.
+ */
+int
+esl_tree_UPGMA(ESL_DMATRIX *D, ESL_TREE **ret_T)
+{
+  return cluster_engine(D, eslUPGMA, ret_T);
+}
+
+/* Function:  esl_tree_WPGMA()
+ *
+ * Purpose:   Given distance matrix <D>, use the WPGMA algorithm
+ *            to construct a tree <T>.
+ *
+ * Returns:   <eslOK> on success; the tree is returned in <ret_T>,
+ *            and must be freed by the caller with <esl_tree_Destroy()>.
+ *
+ * Throws:    <eslEMEM> on allocation problem, and <ret_T> is set <NULL>.
+ */
+int
+esl_tree_WPGMA(ESL_DMATRIX *D, ESL_TREE **ret_T)
+{
+  return cluster_engine(D, eslWPGMA, ret_T);
+}
+
+/* Function:  esl_tree_SingleLinkage()
+ *
+ * Purpose:   Given distance matrix <D>, construct a single-linkage
+ *            (minimum distances) clustering tree <T>.
+ *
+ * Returns:   <eslOK> on success; the tree is returned in <ret_T>,
+ *            and must be freed by the caller with <esl_tree_Destroy()>.
+ *
+ * Throws:    <eslEMEM> on allocation problem, and <ret_T> is set <NULL>.
+ */
+int
+esl_tree_SingleLinkage(ESL_DMATRIX *D, ESL_TREE **ret_T)
+{
+  return cluster_engine(D, eslSINGLE_LINKAGE, ret_T);
+}
+
+/* Function:  esl_tree_CompleteLinkage()
+ *
+ * Purpose:   Given distance matrix <D>, construct a complete-linkage
+ *            (maximum distances) clustering tree <T>.
+ *
+ * Returns:   <eslOK> on success; the tree is returned in <ret_T>,
+ *            and must be freed by the caller with <esl_tree_Destroy()>.
+ *
+ * Throws:    <eslEMEM> on allocation problem, and <ret_T> is set <NULL>.
+ */
+int
+esl_tree_CompleteLinkage(ESL_DMATRIX *D, ESL_TREE **ret_T)
+{
+  return cluster_engine(D, eslCOMPLETE_LINKAGE, ret_T);
+}
+/*----------------- end, clustering algorithms  ----------------*/
+
+
+
+/*****************************************************************
+ * 5. Generating simulated trees
+ *****************************************************************/
+
+/* Function:  esl_tree_Simulate()
+ * Synopsis:  Generate a random rooted ultrametric tree.
+ *
+ * Purpose:   Generate a random rooted ultrametric tree of <N> taxa,
+ *            using the algorithm of Kuhner and Felsenstein (1994).
+ *            
+ *            The branch lengths are generated by choosing <N-1>
+ *            exponentially distributed split times, with decreasing
+ *            expectations of $\frac{1}{2},\frac{1}{3}..\frac{1}{N}$
+ *            as the simulation proceeds from the root. Thus the
+ *            total expected branch length on the tree is
+ *            $\sum_{k=2}^{N} \frac{1}{k}$.
+ *
+ * Args:      r     - random number source
+ *            N     - number of taxa (>= 2)
+ *            ret_T - RETURN: sampled tree
+ *
+ * Returns:   <eslOK> on success, and the new tree is allocated
+ *            here and returned via <ret_tree>; caller is 
+ *            responsible for free'ing it.
+ *
+ * Throws:    <eslEMEM> on allocation failure, in which case
+ *            the <ret_T> is returned <NULL>.
+ *
+ * Xref:      STL11/65.
+ */
+int
+esl_tree_Simulate(ESL_RANDOMNESS *r, int N, ESL_TREE **ret_T)
+{
+  ESL_TREE       *T          = NULL;
+  int            *branchpapa = NULL;
+  int            *branchside = NULL;
+  int       nactive;
+  double    d;
+  int       node;
+  int       bidx;	        	/* index of an active branch */
+  int       status;
+
+  ESL_DASSERT1( (r != NULL) );
+  ESL_DASSERT1( (N >= 2) );
+
+  /* Kuhner/Felsenstein uses a list of active branches,
+   * which we implement by tracking the index of the parent
+   * node (in <branchpapa>) and a 0/1 flag (in <branchside>)
+   * for the branch to the left vs. right child.
+   */
+  if ((T = esl_tree_Create(N)) == NULL)  { status = eslEMEM; goto ERROR; }
+  ESL_ALLOC(branchpapa, sizeof(int) * N);
+  ESL_ALLOC(branchside, sizeof(int) * N);
+  
+  /* Initialize: add two branches from the root
+   * onto the active list, and set internal node
+   * counter to start at 1.
+   */
+  branchpapa[0] = 0;   branchside[0] = 0;
+  branchpapa[1] = 0;   branchside[1] = 1;
+  nactive = 2;
+  node    = 1;			
+
+  /* Algorithm proceeds by iterating:
+   *    1. choose random time <d> from exponential(1/nactive)
+   *    2. choose random active branch, <bidx>
+   *    3. add new <node> to active branch at length d
+   *    4. add d to all other active branches      
+   *    5. delete the old parent branch from the active list,
+   *       add the two new child branches to the active list
+   */
+  while (nactive < N)
+    {
+      d               = (double) nactive * -log(esl_rnd_UniformPositive(r));
+      bidx            = esl_rnd_Roll(r, nactive);
+      T->parent[node] = branchpapa[bidx];
+      
+      if (branchside[bidx] == 0) {
+	T->left[branchpapa[bidx]]   = node;
+	T->ld  [branchpapa[bidx]]  += d;
+      } else {
+	T->right[branchpapa[bidx]]  = node;
+	T->rd   [branchpapa[bidx]] += d;
+      }
+
+      ESL_SWAP(branchpapa[bidx], branchpapa[nactive-1], int);
+      ESL_SWAP(branchside[bidx], branchside[nactive-1], int);
+      for (bidx = 0; bidx < nactive-1; bidx++) {
+	if (branchside[bidx] == 0) T->ld[branchpapa[bidx]] += d;
+	else                       T->rd[branchpapa[bidx]] += d;
+      }
+      
+      /* delete the branch at nactive-1 that we just added to;
+       * replace it with two new branches
+       */
+      branchpapa[nactive-1]  = node;  branchside[nactive-1] = 0;
+      branchpapa[nactive]    = node;  branchside[nactive]   = 1;
+      node++;
+      nactive++;
+    }
+
+  /* Terminate by adding the N taxa to the N active branches.
+   */
+  d = (double) N * -log(esl_rnd_UniformPositive(r));
+  for (bidx = 0; bidx < N; bidx++)
+    {
+      if (branchside[bidx] == 0) {
+	T->left[branchpapa[bidx]]  =  -bidx; /* taxa indices stored as neg #'s */
+	T->ld  [branchpapa[bidx]]  += d;
+      } else {
+	T->right[branchpapa[bidx]] =  -bidx;
+	T->rd  [branchpapa[bidx]]  += d;
+      }
+    }
+
+  *ret_T = T; 
+  free(branchpapa);
+  free(branchside);
+  return eslOK;
+
+ ERROR:
+  if (T          != NULL) esl_tree_Destroy(T);
+  if (branchpapa != NULL) free(branchpapa);
+  if (branchside != NULL) free(branchside);
+  *ret_T = NULL;
+  return status;
+}
+
+
+/* Function:  esl_tree_ToDistanceMatrix()
+ * Synopsis:  Obtain a pairwise distance matrix from a tree.
+ *
+ * Purpose:   Given tree <T>, calculate a pairwise distance matrix
+ *            and return it in <ret_D>.
+ *            
+ * Note:      Algorithm here is O(N^3). It can probably be improved.
+ *            There ought to be a more efficient recursion that
+ *            saves recalculating node-node distances inside the tree.
+ *            All we do here is a brute force, upwards O(N) LCA 
+ *            search for each of the N^2 taxon pairs. 
+ *
+ * Args:      T     - input tree 
+ *            ret_D - RETURN: the new distance matrix    
+ *
+ * Returns:   <eslOK> on success, and <ret_D> points to the distance 
+ *            matrix, which caller is responsible for free'ing with
+ *            <esl_dmatrix_Destroy()>.
+ *
+ * Throws:    <eslEMEM> on allocation failure, in which case
+ *            <ret_D> is returned <NULL>.
+ *
+ * Xref:      STL11/66.
+ */
+int
+esl_tree_ToDistanceMatrix(ESL_TREE *T, ESL_DMATRIX **ret_D)
+{
+  ESL_DMATRIX *D = NULL;
+  int i,j;			/* a pair of taxa {0..N-1}           */
+  int a,b;			/* a pair of internal nodes {0..N-2} */
+  int p;			/* a tmp parent index */
+  double d;			/* ij distance */
+  int status;
+
+  D = esl_dmatrix_Create(T->N, T->N); /* creates a NxN square symmetric matrix; really only need triangular */
+  if (D == NULL) { status = eslEMEM; goto ERROR; }
+
+  if ((status = esl_tree_SetTaxaParents(T)) != eslOK) goto ERROR;
+
+  for (i = 0; i < T->N; i++)
+    {
+      D->mx[i][i] = 0.;		/* by definition */
+      for (j = i+1; j < T->N; j++)
+	{
+	  a  = T->taxaparent[i];
+	  b  = T->taxaparent[j];
+	  d  = (T->left[a] == -i) ? T->ld[a] : T->rd[a];
+	  d += (T->left[b] == -j) ? T->ld[b] : T->rd[b];
+	  while (a != b)	/* a brute force LCA algorithm */
+	    {
+	      if (a < b) ESL_SWAP(a, b, int);
+	      p  = T->parent[a];
+	      d += (T->left[p] == a) ? T->ld[p] : T->rd[p];
+	      a  = p;
+	    }
+
+	  D->mx[i][j] = D->mx[j][i] = d;
+	}
+    }
+
+  *ret_D = D;
+  return eslOK;
+
+ ERROR:
+  if (D != NULL) esl_dmatrix_Destroy(D);
+  *ret_D = NULL;
+  return status;
+}
+
+
+
+/*****************************************************************
+ * 6. Unit tests
+ *****************************************************************/
+#ifdef eslTREE_TESTDRIVE
+
+static void
+utest_OptionalInformation(ESL_RANDOMNESS *r, int ntaxa)
+{
+  char *msg = "optional information fields unit test failed";
+  ESL_TREE *T;
+
+  if (esl_tree_Simulate(r, ntaxa, &T) != eslOK) esl_fatal(msg);
+  if (esl_tree_SetTaxaParents(T)      != eslOK) esl_fatal(msg);
+  if (esl_tree_SetCladesizes(T)       != eslOK) esl_fatal(msg);
+  if (esl_tree_Validate(T, NULL)      != eslOK) esl_fatal(msg);
+  
+  esl_tree_Destroy(T);
+  return;
+}
+
+
+static void
+utest_WriteNewick(ESL_RANDOMNESS *r, int ntaxa)
+{
+  char     *msg      = "esl_tree_WriteNewick unit test failed";
+  char   tmpfile[32] = "esltmpXXXXXX";
+  FILE     *fp       = NULL;
+  ESL_TREE *T1       = NULL;
+  ESL_TREE *T2       = NULL;
+  char  errbuf[eslERRBUFSIZE];
+
+  if (esl_tmpfile(tmpfile, &fp)            != eslOK) esl_fatal(msg);
+  if (esl_tree_Simulate(r, ntaxa, &T1)     != eslOK) esl_fatal(msg);
+  if (esl_tree_SetTaxonlabels(T1, NULL)    != eslOK) esl_fatal(msg);
+  if (esl_tree_Validate(T1, NULL)          != eslOK) esl_fatal(msg);
+  if (esl_tree_WriteNewick(fp, T1)         != eslOK) esl_fatal(msg);
+  rewind(fp);
+  if (esl_tree_ReadNewick(fp, errbuf, &T2) != eslOK) esl_fatal(msg);
+  if (esl_tree_Validate(T2, NULL)          != eslOK) esl_fatal(msg);
+  if (esl_tree_Compare(T1, T2)             != eslOK) esl_fatal(msg);
+  fclose(fp);
+
+  esl_tree_Destroy(T1);
+  esl_tree_Destroy(T2);
+  return;
+}
+
+
+static void
+utest_UPGMA(ESL_RANDOMNESS *r, int ntaxa)
+{
+  char        *msg = "esl_tree_UPGMA unit test failed";
+  ESL_TREE    *T1 = NULL;
+  ESL_TREE    *T2 = NULL;
+  ESL_DMATRIX *D1 = NULL;
+  ESL_DMATRIX *D2 = NULL;
+
+  if (esl_tree_Simulate(r, ntaxa, &T1)   != eslOK) esl_fatal(msg);
+  if (esl_tree_ToDistanceMatrix(T1, &D1) != eslOK) esl_fatal(msg);
+  if (esl_tree_UPGMA(D1, &T2)            != eslOK) esl_fatal(msg);
+
+  if (esl_tree_Validate(T1, NULL)        != eslOK) esl_fatal(msg);
+  if (esl_tree_Validate(T2, NULL)        != eslOK) esl_fatal(msg);
+  if (esl_tree_VerifyUltrametric(T1)     != eslOK) esl_fatal(msg);
+  if (esl_tree_VerifyUltrametric(T2)     != eslOK) esl_fatal(msg);
+  if (esl_tree_Compare(T1, T2)           != eslOK) esl_fatal(msg);
+
+  if (esl_tree_ToDistanceMatrix(T1, &D2) != eslOK) esl_fatal(msg);
+  if (esl_dmatrix_Compare(D1, D2, 0.001) != eslOK) esl_fatal(msg);
+
+  esl_tree_Destroy(T1);
+  esl_tree_Destroy(T2);
+  esl_dmatrix_Destroy(D1);
+  esl_dmatrix_Destroy(D2);
+  return;
+}
+
+#endif /*eslTREE_TESTDRIVE*/
+/*-------------------- end, unit tests  -------------------------*/
+
+
+/*****************************************************************
+ * 7. Test driver
+ *****************************************************************/
+#ifdef eslTREE_TESTDRIVE
+
+/* 
+ * gcc -g -Wall -o test -L. -I. -DeslTREE_TESTDRIVE esl_tree.c -leasel -lm
+ * gcc -g -Wall -o test -L. -I. -DeslTEST_THROWING -DeslTREE_TESTDRIVE esl_msa.c -leasel -lm
+ * ./test
+ */
+#include "easel.h"
+#include "esl_tree.h"
+#include "esl_random.h"
+
+int
+main(int argc, char **argv)
+{
+  ESL_RANDOMNESS *r = NULL;
+  int ntaxa;
+
+  r     = esl_randomness_Create(0);
+  ntaxa = 20;
+  
+  utest_OptionalInformation(r, ntaxa); /* SetTaxaparents(), SetCladesizes() */
+  utest_WriteNewick(r, ntaxa);
+  utest_UPGMA(r, ntaxa);
+
+  esl_randomness_Destroy(r);
+  return eslOK;
+}
+
+#endif /*eslTREE_TESTDRIVE*/
+/*-------------------- end, test driver  -------------------------*/
+
+
+
+
+/*****************************************************************
+ * 8. Examples.
+ *****************************************************************/
+
+/* The first example is an example of inferring a tree by the
+ * UPGMA algorithm, starting from a multiple sequence alignment.
+ */
+#ifdef eslTREE_EXAMPLE
+/*::cexcerpt::tree_example::begin::*/
+/* To compile: gcc -g -Wall -o example -I. -DeslTREE_EXAMPLE esl_tree.c esl_dmatrix.c esl_msa.c easel.c -lm
+ *         or: gcc -g -Wall -o example -I. -L. -DeslTREE_EXAMPLE esl_tree.c -leasel -lm
+ *     To run: ./example <MSA file>
+ */
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_distance.h"
+#include "esl_tree.h"
+
+int main(int argc, char **argv)
+{
+  ESL_TREE     *tree = NULL;
+  ESL_MSAFILE  *afp  = NULL;
+  ESL_MSA      *msa  = NULL;
+  ESL_DMATRIX  *D    = NULL;
+
+  esl_msafile_Open(NULL, argv[1], NULL, eslMSAFILE_UNKNOWN, NULL, &afp);
+  esl_msafile_Read(afp, &msa);
+  esl_msafile_Close(afp);
+
+  esl_dst_CDiffMx(msa->aseq, msa->nseq, &D);
+  esl_tree_UPGMA(D, &tree);
+
+  esl_tree_Destroy(tree);
+  esl_msa_Destroy(msa);
+  esl_dmatrix_Destroy(D);
+  return eslOK;
+}
+/*::cexcerpt::tree_example::end::*/
+#endif /*eslTREE_EXAMPLE*/
+
+
+/* The second example is an example of reading in a Newick format tree.
+ */
+#ifdef eslTREE_EXAMPLE2
+/*::cexcerpt::tree_example2::begin::*/
+/* To compile: gcc -g -Wall -o example -I. -DeslTREE_EXAMPLE2 esl_tree.c esl_dmatrix.c esl_msa.c easel.c -lm
+ *         or: gcc -g -Wall -o example -I. -L. -DeslTREE_EXAMPLE2 esl_tree.c -leasel -lm
+ *     To run: ./example <Newick file>
+ */
+#include "easel.h"
+#include "esl_msa.h"
+#include "esl_distance.h"
+#include "esl_tree.h"
+
+int main(int argc, char **argv)
+{
+  ESL_TREE    *T;
+  char         errbuf[eslERRBUFSIZE];
+  FILE        *fp;
+
+  if ((fp = fopen(argv[1], "r"))           == NULL) esl_fatal("Failed to open %s", argv[1]);
+  if (esl_tree_ReadNewick(fp, errbuf, &T) != eslOK) esl_fatal("Failed to read tree: %s", errbuf);
+  esl_tree_WriteNewick(stdout, T);
+
+  esl_tree_Destroy(T);
+  fclose(fp);
+  return eslOK;
+}
+/*::cexcerpt::tree_example2::end::*/
+#endif /*eslTREE_EXAMPLE*/
+
+
+
+/*****************************************************************  
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_tree.h b/esl_tree.h
new file mode 100644
index 0000000..1d59c10
--- /dev/null
+++ b/esl_tree.h
@@ -0,0 +1,123 @@
+/* Phylogenetic trees.
+ * 
+ * SRE, Tue May  2 13:54:30 2006 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslTREE_INCLUDED
+#define eslTREE_INCLUDED
+
+#include <esl_dmatrix.h>
+#include <esl_random.h>
+
+/* Object: ESL_TREE
+ *
+ * All trees are represented as rooted trees, starting from
+ * node 0. For N taxa, there are N-1 internal nodes, numbered
+ * 0..N-2. Taxa on leaves are numbered 0..N-1, and represented
+ * in <left> and <right> as negative numbers.
+ * 
+ */
+typedef struct {
+  int   N;		/* number of taxa */
+
+  /* (Mandatory) information for the internal nodes of a rooted tree.
+   * There are N-1 nodes, numbered 0..N-2, with the root at 0,
+   * so each array below is indexed [0..N-2].
+   * When an internal node has a left or right branch to a taxon,
+   * <left>/<right> are <= 0, negative <taxon #>; if they're to 
+   * be used as array indices, flip their sign.
+   * There is no ambiguity between taxon 0/root node 0, because 
+   * a taxon can't be a parent, and the root node can't be a child.
+   * For an unrooted tree, by convention, taxon 0 is the outgroup: T->left[0] = 0,
+   * and T->rd[0] = 0.0.
+   */
+  int    *parent;	/* index of parent of node: values are 0..N-2; parent of root 0 = 0 */
+  int    *left;		/* index of left child:  values are -(N-1)..0=taxa; 1..N-2=nodes */
+  int    *right;	/* index of right child: values are -(N-1)..0=taxa; 1..N-2=nodes */
+  double *ld;	        /* left branch length under node: values are >= 0 */
+  double *rd;	        /* right branch length under node: values are >= 0 */
+                        /* in linkage trees, ld[x]=rd[x]= "height" (linkage value) of node, not branch lengths */
+
+  /* Derived (optional) information, that we can reconstruct if
+   * we need to from the mandatory info above.
+   */
+  int    *taxaparent;   /* for taxa  [0..N-1]: index of its parent node, 0..N-2. [esl_tree_SetTaxaParents()] */
+  int    *cladesize;	/* for nodes [0..N-2]: # taxa in this clade, 1..N        [esl_tree_SetCladesizes()]  */
+
+  /* Optional information */
+  char  **taxonlabel;	  /* labels for taxa: [0..N-1] array of char strings */
+  char  **nodelabel;	  /* labels for nodes: [0..N-2] array of char strings */
+
+  /* Tree mode options. */
+  int   is_linkage_tree;	 /* TRUE if this is a linkage tree; if FALSE, it's an additive tree */
+
+
+  /* Tree output options. */
+  int   show_unrooted;	         /* TRUE to output 'root' as a trifurcation (a la PHYLIP) */
+  int   show_node_labels;        /* TRUE to output labels for interior nodes */
+  int   show_root_branchlength;  /* TRUE to show 0.0 branch length to root node (a la TreeAlign) */
+  int   show_branchlengths;	 /* TRUE to output branch lengths */
+  int   show_quoted_labels;	 /* TRUE to output ALL labels as quoted labels */
+  int   show_numeric_taxonlabels;/* TRUE to output taxa labels as their 0..N-1 indices if no other taxonlabel is present */
+
+  /* Memory allocation information, when growing a tree (on input, for example)
+   */
+  int     nalloc;	/* current allocated # of taxa */
+
+} ESL_TREE;
+
+/* UPGMA, average-link, minimum-link, and maximum-link clustering are
+ * all implemented by one algorithm, cluster_engine(), in esl_tree.c.
+ * We define some flags (within the scope of the tree module) to
+ * control the behavior, as we call the algorithm engine from four
+ * different API functions.
+ */
+#define eslUPGMA            0
+#define eslWPGMA            1
+#define eslSINGLE_LINKAGE   2
+#define eslCOMPLETE_LINKAGE 3
+
+
+
+/* 1. The ESL_TREE object.
+ */
+extern ESL_TREE *esl_tree_Create(int ntaxa);
+extern ESL_TREE *esl_tree_CreateGrowable(int nalloc);
+extern ESL_TREE *esl_tree_CreateFromString(char *s);
+extern int       esl_tree_Grow(ESL_TREE *T);
+extern int       esl_tree_SetTaxaParents(ESL_TREE *T);
+extern int       esl_tree_SetCladesizes(ESL_TREE *T);
+extern int       esl_tree_SetTaxonlabels(ESL_TREE *T, char **names);
+extern int       esl_tree_RenumberNodes(ESL_TREE *T);
+extern int       esl_tree_VerifyUltrametric(ESL_TREE *T);
+extern int       esl_tree_Validate(ESL_TREE *T, char *errbuf);
+extern void      esl_tree_Destroy(ESL_TREE *T);
+
+/* 2. Newick format i/o
+ */
+extern int  esl_tree_WriteNewick(FILE *fp, ESL_TREE *T);
+extern int  esl_tree_ReadNewick(FILE *fp, char *errbuf, ESL_TREE **ret_T);
+
+/* 3. Tree comparison algorithms.
+ */
+extern int esl_tree_Compare(ESL_TREE *T1, ESL_TREE *T2);
+
+/* 4. Clustering algorithms for distance-based tree construction.
+ */
+extern int esl_tree_UPGMA(ESL_DMATRIX *D, ESL_TREE **ret_T);
+extern int esl_tree_WPGMA(ESL_DMATRIX *D, ESL_TREE **ret_T);
+extern int esl_tree_SingleLinkage(ESL_DMATRIX *D, ESL_TREE **ret_T);
+extern int esl_tree_CompleteLinkage(ESL_DMATRIX *D, ESL_TREE **ret_T);
+
+/* 5. Generating simulated trees.
+ */
+extern int esl_tree_Simulate(ESL_RANDOMNESS *r, int N, ESL_TREE **ret_T);
+extern int esl_tree_ToDistanceMatrix(ESL_TREE *T, ESL_DMATRIX **ret_D);
+
+
+#endif /*eslTREE_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
diff --git a/esl_tree.tex b/esl_tree.tex
new file mode 100644
index 0000000..2623ff3
--- /dev/null
+++ b/esl_tree.tex
@@ -0,0 +1,31 @@
+
+The \eslmod{tree} module implements an object for representing
+phylogenetic trees (\ccode{ESL\_TREE}). It also implements four of the
+most basic distance-based methods for tree inference and clustering
+algorithms (UPGMA, WPGMA, single linkage clustering, and complete
+linkage clustering).
+
+\begin{table}[hbp]
+\begin{center}
+{\small
+\begin{tabular}{|ll|}\hline
+\apisubhead{the \ccode{ESL\_TREE} object}\\
+\hyperlink{func:esl_tree_Create()}{\ccode{esl\_tree\_Create()}} & Constructor.\\
+\hyperlink{func:esl_tree_Destroy()}{\ccode{esl\_tree\_Destroy()}} & Destructor.\\
+\apisubhead{simple tree inference/clustering algorithms}\\
+\hyperlink{func:esl_tree_UPGMA()}{\ccode{esl\_tree\_UPGMA()}} & Infer a tree by UPGMA.\\
+\hyperlink{func:esl_tree_WPGMA()}{\ccode{esl\_tree\_WPGMA()}} & Infer a tree by WPGMA.\\
+\hyperlink{func:esl_tree_SingleLinkage()}{\ccode{esl\_tree\_SingleLinkage()}} & Infer a tree by single-linkage clustering.\\
+\hyperlink{func:esl_tree_CompleteLinkage()}{\ccode{esl\_tree\_CompleteLinkage()}} & Infer a tree by complete-linkage clustering.\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{The \eslmod{tree} API. Requires \eslmod{easel}, \eslmod{dmatrix}.}
+\label{tbl:tree_api}
+\end{table}
+
+
+\subsection{Example of using the tree API}
+
+\input{cexcerpts/tree_example}
diff --git a/esl_vectorops.c b/esl_vectorops.c
new file mode 100644
index 0000000..278b888
--- /dev/null
+++ b/esl_vectorops.c
@@ -0,0 +1,1460 @@
+/* Operations on vectors of floats or doubles.
+ * 
+ * Can operate on vectors of doubles, floats, or integers - appropriate
+ * routine is prefixed with D, F, or I. For example, esl_vec_DSet() is
+ * the Set routine for a vector of doubles; esl_vec_ISet() is for integers.
+ * 
+ * Contents:
+ *    1. The vectorops API.
+ *    2. Unit tests.
+ *    3. Test driver.
+ *    4. Examples.
+ *    5. Copyright and license information.
+ * 
+ */                      
+#include "esl_config.h"
+
+#include <math.h>
+#include <float.h>
+
+#include "easel.h"
+#include "esl_vectorops.h"
+
+/* Function:  esl_vec_DSet()
+ * Synopsis:  Set all items in vector to scalar value.
+ *            
+ * Purpose:   Sets all <n> items in <vec> to <value>.
+ *                        
+ *            <esl_vec_FSet()> and <esl_vec_ISet()> do the same,
+ *            for float and integer vectors.
+ */
+void
+esl_vec_DSet(double *vec, int n, double value)
+{
+  int x; 
+  for (x = 0; x < n; x++) vec[x] = value;
+}
+void
+esl_vec_FSet(float *vec, int n, float value)
+{
+  int x; 
+  for (x = 0; x < n; x++) vec[x] = value;
+}
+void
+esl_vec_ISet(int *vec, int n, int value)
+{
+  int x; 
+  for (x = 0; x < n; x++) vec[x] = value;
+}
+
+
+/* Function:  esl_vec_DScale()
+ * Synopsis:  Multiply all items in vector by scalar value.
+ *            
+ * Purpose:   Multiplies all <n> items in <vec> by <scale>.
+ *            
+ *            <esl_vec_FScale()> and <esl_vec_IScale()> do the same,
+ *            for float and integer vectors.
+ *            
+ *            Essentially the same as BLAS1's xSCAL().
+ */
+void
+esl_vec_DScale(double *vec, int n, double scale)
+{
+  int x;
+  for (x = 0; x < n; x++) vec[x] *= scale;
+}
+void
+esl_vec_FScale(float *vec, int n, float scale)
+{
+  int x;
+  for (x = 0; x < n; x++) vec[x] *= scale;
+}
+void
+esl_vec_IScale(int *vec, int n, int scale)
+{
+  int x;
+  for (x = 0; x < n; x++) vec[x] *= scale;
+}
+
+
+/* Function:  esl_vec_DIncrement()
+ * Synopsis:  Add a scalar to all items in a vector.
+ * Incept:    SRE, Mon Mar 21 11:56:57 2005 [St. Louis]
+ *
+ * Purpose:   Adds scalar <x> to all items in the <n>-vector <v>.
+ * 
+ *            <esl_vec_FIncrement()> and <esl_vec_IIncrement()> do the
+ *            same, for float and integer vectors.
+ */
+void
+esl_vec_DIncrement(double *v, int n, double x)
+{
+  int i;
+  for (i = 0; i < n; i++) v[i] += x;
+}
+void
+esl_vec_FIncrement(float *v, int n, float x)
+{
+  int i;
+  for (i = 0; i < n; i++) v[i] += x;
+}
+void
+esl_vec_IIncrement(int *v, int n, int x)
+{
+  int i;
+  for (i = 0; i < n; i++) v[i] += x;
+}
+
+
+
+/* Function:  esl_vec_DSum()
+ * Synopsis:  Returns $\sum_i x_i$. 
+ *            
+ * Purpose:   Returns the scalar sum of the <n> items in <vec>.
+ *            
+ *            <esl_vec_FSum()> and <esl_vec_ISum()> do the same,
+ *            but for float and integer vectors.
+ *            
+ *            The floating point summations use Kahan compensated
+ *            summation, in order to minimize roundoff error
+ *            accumulation.  Additionally, I believe they are most
+ *            accurate if vec[] is sorted in increasing order, from
+ *            small to large, so you may consider sorting <vec> before
+ *            summing it.
+ */
+double 
+esl_vec_DSum(double *vec, int n)
+{
+  double sum = 0.;
+  double y,t,c; 
+  int    x;
+
+  c = 0.0;
+  for (x = 0; x < n; x++) {
+    y = vec[x] - c; t = sum + y; c = (t-sum)-y; sum = t; 
+  }
+  return sum;
+}
+float 
+esl_vec_FSum(float *vec, int n)
+{
+  float sum = 0.;
+  float y,t,c;
+  int   x;
+
+  c = 0.0;
+  for (x = 0; x < n; x++) {
+    y = vec[x] - c; t = sum + y; c = (t-sum)-y; sum = t; 
+  }
+  return sum;
+}
+int
+esl_vec_ISum(int *vec, int n)
+{
+  int sum = 0;
+  int   x;
+  for (x = 0; x < n; x++) sum += vec[x];
+  return sum;
+}
+
+
+/* Function:  esl_vec_DAdd()
+ * Synopsis:  Vector addition of two vectors.
+ *
+ * Purpose:   Vector addition. Adds <vec2> to <vec1>, leaving
+ *            result in <vec1>. (<vec2> is unchanged.). 
+ *            Both vectors are of size <n>.
+ *            
+ *            <esl_vec_FAdd()> and <esl_vec_IAdd()> do the same,
+ *            for float and integer vectors.
+ */
+void
+esl_vec_DAdd(double *vec1, const double *vec2, int n)
+{
+  int x;
+  for (x = 0; x < n; x++) vec1[x] += vec2[x];
+}
+void
+esl_vec_FAdd(float *vec1, const float *vec2, int n)
+{
+  int x;
+  for (x = 0; x < n; x++) vec1[x] += vec2[x];
+}
+void
+esl_vec_IAdd(int *vec1, const int *vec2, int n)
+{
+  int x;
+  for (x = 0; x < n; x++) vec1[x] += vec2[x];
+}
+
+
+/* Function: esl_vec_DAddScaled()
+ * Synopsis: Scale <vec2> and add it to <vec1>.
+ * 
+ * Purpose:  Scales <vec2> by scalar <a>, and adds that
+ *           to <vec1>. Both vectors are of size <n>. 
+ *           
+ *            <esl_vec_FAddScaled()> and <esl_vec_IAddScaled()> do the same,
+ *            for float and integer vectors.
+ *            
+ *            Essentially the same as BLAS1 xAXPY().
+ */
+void
+esl_vec_DAddScaled(double *vec1, double *vec2, double a, int n)
+{
+  int x;
+  for (x = 0; x < n; x++) vec1[x] += vec2[x] * a;
+}
+void
+esl_vec_FAddScaled(float *vec1, float *vec2, float a, int n)
+{
+  int x;
+  for (x = 0; x < n; x++) vec1[x] += vec2[x] * a;
+}
+void
+esl_vec_IAddScaled(int *vec1, int *vec2, int a, int n)
+{
+  int x;
+  for (x = 0; x < n; x++) vec1[x] += vec2[x] * a;
+}
+
+
+
+/* Function:  esl_vec_DCopy()
+ * Synopsis:  Set <dest> vector to same values as <src>.
+ *
+ * Purpose:   Copies <src> to <dest>. <src> is
+ *            unchanged. Both vectors are of size <n>.
+ *            
+ *            <esl_vec_FCopy()> and <esl_vec_ICopy()> do the same,
+ *            for float and integer vectors.
+ *            
+ *            Essentially the same as BLAS1 xCOPY().
+ */
+void
+esl_vec_DCopy(const double *src, const int n, double *dest)
+{
+  int x;
+  for (x = 0; x < n; x++) dest[x] = src[x];
+}
+void
+esl_vec_FCopy(const float *src, const int n, float *dest)
+{
+  int x;
+  for (x = 0; x < n; x++) dest[x] = src[x];
+}
+void
+esl_vec_ICopy(const int *src, const int n, int *dest)
+{
+  int x;
+  for (x = 0; x < n; x++) dest[x] = src[x];
+}
+
+
+/* Function:  esl_vec_DCompare()
+ * Synopsis:  Return <eslOK> if two vectors are equal.
+ * Incept:    SRE, Mon Nov  6 10:20:28 2006 [Janelia]
+ *
+ * Purpose:   Compare <vec1> to <vec2> for equality, by
+ *            comparing each cognate element pair. Both vectors 
+ *            are of size <n>. Equality of elements is
+ *            defined by being $\leq$ fractional tolerance <tol> 
+ *            for floating point comparisons, and strict equality
+ *            for integer comparisons. Return <eslOK>
+ *            if the vectors are equal, and <eslFAIL> if not.
+ *            
+ *            If <n=0>, the test always succeeds. In this case, either
+ *            <vec1> and <vec2> (or both) may be <NULL>.  This
+ *            accommodates an occasional convention of leaving empty
+ *            vectors <NULL>.
+ *
+ *            <esl_vec_FCompare()> and <esl_vec_ICompare()> do the same,
+ *            for float and integer vectors.
+ */
+int
+esl_vec_DCompare(const double *vec1, const double *vec2, int n, double tol)
+{
+  int i;
+  for (i = 0; i < n; i++) if (esl_DCompare(vec1[i], vec2[i], tol) == eslFAIL) return eslFAIL;
+  return eslOK;
+}
+int
+esl_vec_FCompare(const float *vec1, const float *vec2, int n, float tol)
+{
+  int i;
+  for (i = 0; i < n; i++) if (esl_DCompare(vec1[i], vec2[i], tol) == eslFAIL) return eslFAIL;
+  return eslOK;
+}
+int
+esl_vec_ICompare(const int *vec1, const int *vec2, int n)
+{
+  int i;
+  for (i = 0; i < n; i++) if (vec1[i] != vec2[i]) return eslFAIL;
+  return eslOK;
+}
+
+
+
+/* Function:  esl_vec_DSwap()
+ * Synopsis:  Swap two vectors.
+ *
+ * Purpose:   Swaps <vec2> and <vec1>. 
+ *            Both vectors are of size <n>.
+ *            
+ *            <esl_vec_FSwap()> and <esl_vec_ISwap()> do the same,
+ *            for float and integer vectors.
+ *            
+ *            Essentially the same as BLAS1 xSWAP().
+ *            
+ *            You will be better off swapping the pointers to
+ *            the vectors, if that's feasible.
+ */
+void
+esl_vec_DSwap(double *vec1, double *vec2, int n)
+{
+  int    x;
+  double tmp;
+
+  for (x = 0; x < n; x++) 
+    { tmp = vec1[x]; vec1[x] = vec2[x]; vec2[x] = tmp; }
+}
+void
+esl_vec_FSwap(float *vec1, float *vec2, int n)
+{
+  int   x;
+  float tmp;
+
+  for (x = 0; x < n; x++) 
+    { tmp = vec1[x]; vec1[x] = vec2[x]; vec2[x] = tmp; }
+}
+void
+esl_vec_ISwap(int *vec1, int *vec2, int n)
+{
+  int    x;
+  int tmp;
+
+  for (x = 0; x < n; x++) 
+    { tmp = vec1[x]; vec1[x] = vec2[x]; vec2[x] = tmp; }
+}
+
+
+/* Function:  esl_vec_DReverse()
+ * Synopsis:  Reverse a vector (possibly in place).
+ *
+ * Purpose:   Put the <n> values from vector <vec> in reversed order in
+ *            <rev>. Caller provides storage in <rev> for at least <n>
+ *            values.
+ *            
+ *            <vec> and <rev> can be the same, in which case <vec> is
+ *            reversed in place.
+ *            
+ *            <esl_vec_FReverse()>, <esl_vec_IReverse()>, and 
+ *            <esl_vec_CReverse()> do the same, for float, integer,
+ *            and char arrays. 
+ *            
+ *            <esl_vec_CReverse()> needs to be used carefully if
+ *            <vec> is a NUL-terminated string, instead of an array.
+ *            If you reverse a string <s> in place (i.e. 
+ *              <esl_vec_CReverse(s, s, n)>), the trailing NUL will
+ *            still be there, and you're fine. If you reverse string
+ *            <s> into new storage <s2>, you'll need to NUL-terminate
+ *            <s2> yourself.
+ */
+void
+esl_vec_DReverse(double *vec, double *rev, int n)
+{
+  int    i;
+  double x;
+
+  for (i = 0; i < n/2; i++)
+    {
+      x          = vec[n-i-1];
+      rev[n-i-1] = vec[i];
+      rev[i]     = x;
+    }
+  if (n%2) rev[i] = vec[i];
+}
+void
+esl_vec_FReverse(float *vec, float *rev, int n)
+{
+  int    i;
+  float  x;
+
+  for (i = 0; i < n/2; i++)
+    {
+      x          = vec[n-i-1];
+      rev[n-i-1] = vec[i];
+      rev[i]     = x;
+    }
+  if (n%2) rev[i] = vec[i];
+}
+void
+esl_vec_IReverse(int *vec, int *rev, int n)
+{
+  int i;
+  int x;
+
+  for (i = 0; i < n/2; i++)
+    {
+      x          = vec[n-i-1];
+      rev[n-i-1] = vec[i];
+      rev[i]     = x;
+    }
+  if (n%2) rev[i] = vec[i];
+}
+void
+esl_vec_CReverse(char *vec, char *rev, int n)
+{
+  int i;
+  char x;
+
+  for (i = 0; i < n/2; i++)
+    {
+      x          = vec[n-i-1];
+      rev[n-i-1] = vec[i];
+      rev[i]     = x;
+    }
+  if (n%2) rev[i] = vec[i];
+}
+
+
+
+/* Function:  esl_vec_DDot()
+ * Synopsis:  Return the dot product of two vectors.
+ *
+ * Purpose:   Returns the scalar dot product <vec1> $\cdot$ <vec2>.
+ *            Both vectors are of size <n>.
+ *            
+ *            <esl_vec_FDot()> and <esl_vec_IDot()> do the same,
+ *            for float and integer vectors.
+ */
+double
+esl_vec_DDot(double *vec1, double *vec2, int n)
+{
+  double result = 0.;
+  int x;
+  for (x = 0; x < n; x++) result += vec1[x] * vec2[x];
+  return result;
+}
+float
+esl_vec_FDot(float *vec1, float *vec2, int n)
+{
+  float result = 0.;
+  int x;
+  for (x = 0; x < n; x++) result += vec1[x] * vec2[x];
+  return result;
+}
+int
+esl_vec_IDot(int *vec1, int *vec2, int n)
+{
+  int result = 0;
+  int x;
+  for (x = 0; x < n; x++) result += vec1[x] * vec2[x];
+  return result;
+}
+
+
+
+/* Function:  esl_vec_DMax()
+ * Synopsis:  Return value of the maximum element in a vector.           
+ *
+ * Purpose:   Returns the maximum value of the <n> values
+ *            in <vec>.
+ *            
+ *            <esl_vec_FMax()> and <esl_vec_IMax()> do the same,
+ *            for float and integer vectors.
+ */
+double
+esl_vec_DMax(const double *vec, int n)
+{
+  int i;
+  double best;
+
+  best = vec[0];
+  for (i = 1; i < n; i++)
+    if (vec[i] > best) best = vec[i];
+  return best;
+}
+float
+esl_vec_FMax(const float *vec, int n)
+{
+  int   i;
+  float best;
+
+  best = vec[0];
+  for (i = 1; i < n; i++)
+    if (vec[i] > best) best = vec[i];
+  return best;
+}
+int
+esl_vec_IMax(const int *vec, int n)
+{
+  int   i;
+  int   best;
+
+  best = vec[0];
+  for (i = 1; i < n; i++)
+    if (vec[i] > best) best = vec[i];
+  return best;
+}
+
+
+/* Function:  esl_vec_DMin()
+ * Synopsis:  Return value of the minimum element in a vector.           
+ *
+ * Purpose:   Returns the minimum value of the <n> values
+ *            in <vec>.
+ *            
+ *            <esl_vec_FMin()> and <esl_vec_IMin()> do the same,
+ *            for float and integer vectors.
+ */
+double
+esl_vec_DMin(const double *vec, int n)
+{
+  int i;
+  double best;
+
+  best = vec[0];
+  for (i = 1; i < n; i++)
+    if (vec[i] < best) best = vec[i];
+  return best;
+}
+float
+esl_vec_FMin(const float *vec, int n)
+{
+  int   i;
+  float best;
+
+  best = vec[0];
+  for (i = 1; i < n; i++)
+    if (vec[i] < best) best = vec[i];
+  return best;
+}
+int
+esl_vec_IMin(const int *vec, int n)
+{
+  int   i;
+  int   best;
+
+  best = vec[0];
+  for (i = 1; i < n; i++)
+    if (vec[i] < best) best = vec[i];
+  return best;
+}
+
+
+/* Function:  esl_vec_DArgMax()
+ * Synopsis:  Return index of maximum element in a vector.           
+ *
+ * Purpose:   Returns the index of the maximum value in the <n> values
+ *            in <vec>. In case of ties, the element with the smallest index
+ *            is returned. 
+ *            
+ *            <n> can be 0 and <vec> can be <NULL>, in which case the
+ *            function returns 0.
+ *            
+ *            <esl_vec_FArgMax()> and <esl_vec_IArgMax()> do the same,
+ *            for float and integer vectors.
+ *            
+ * Note:      Do not change the behavior that the smallest index is
+ *            returned in case of ties. Some functions rely on this
+ *            behavior: optimal accuracy tracebacks in HMMER for example.           
+ */
+int
+esl_vec_DArgMax(const double *vec, int n)
+{
+  int i;
+  int best = 0;
+
+  for (i = 1; i < n; i++)
+    if (vec[i] > vec[best]) best = i;
+  return best;
+}
+int
+esl_vec_FArgMax(const float *vec, int n)
+{
+  int i;
+  int best = 0;
+
+  for (i = 1; i < n; i++)
+    if (vec[i] > vec[best]) best = i;
+  return best;
+}
+int
+esl_vec_IArgMax(const int *vec, int n)
+{
+  int i;
+  int best = 0;
+
+  for (i = 1; i < n; i++)
+    if (vec[i] > vec[best]) best = i;
+  return best;
+}
+
+
+/* Function:  esl_vec_DArgMin()
+ * Synopsis:  Return index of minimum element in a vector.           
+ *
+ * Purpose:   Returns the index of the minimum value in the <n> values
+ *            in <vec>.
+ *            
+ *            <esl_vec_FArgMin()> and <esl_vec_IArgMin()> do the same,
+ *            for float and integer vectors.
+ */
+int
+esl_vec_DArgMin(const double *vec, int n)
+{
+  int i;
+  int best = 0;
+  for (i = 1; i < n; i++)
+    if (vec[i] < vec[best]) best = i;
+  return best;
+}
+int
+esl_vec_FArgMin(const float *vec, int n)
+{
+  int   i;
+  int   best = 0;
+
+  for (i = 1; i < n; i++)
+    if (vec[i] < vec[best]) best = i;
+  return best;
+}
+int
+esl_vec_IArgMin(const int *vec, int n)
+{
+  int   i;
+  int   best = 0;
+
+  for (i = 1; i < n; i++)
+    if (vec[i] < vec[best]) best = i;
+  return best;
+}
+
+
+/* some static functions to pass to qsort() that the 
+ * upcoming Sort() functions will call
+ */
+static int
+qsort_DIncreasing(const void *xp1, const void *xp2)
+{
+  double x1 = * (double *) xp1;
+  double x2 = * (double *) xp2; 
+  if (x1 < x2) return -1;
+  if (x1 > x2) return 1;
+  return 0;
+}
+static int
+qsort_FIncreasing(const void *xp1, const void *xp2)
+{
+  float x1 = * (float *) xp1;
+  float x2 = * (float *) xp2; 
+  if (x1 < x2) return -1;
+  if (x1 > x2) return 1;
+  return 0;
+}
+static int
+qsort_IIncreasing(const void *xp1, const void *xp2)
+{
+  int x1 = * (int *) xp1;
+  int x2 = * (int *) xp2; 
+  if (x1 < x2) return -1;
+  if (x1 > x2) return 1;
+  return 0;
+}
+static int
+qsort_DDecreasing(const void *xp1, const void *xp2)
+{
+  double x1 = * (double *) xp1;
+  double x2 = * (double *) xp2; 
+  if (x1 > x2) return -1;
+  if (x1 < x2) return 1;
+  return 0;
+}
+static int
+qsort_FDecreasing(const void *xp1, const void *xp2)
+{
+  float x1 = * (float *) xp1;
+  float x2 = * (float *) xp2; 
+  if (x1 > x2) return -1;
+  if (x1 < x2) return 1;
+  return 0;
+}
+static int
+qsort_IDecreasing(const void *xp1, const void *xp2)
+{
+  int x1 = * (int *) xp1;
+  int x2 = * (int *) xp2; 
+  if (x1 > x2) return -1;
+  if (x1 < x2) return 1;
+  return 0;
+}
+
+/* Function:  esl_vec_DSortIncreasing()
+ * Synopsis:  Sort vector from smallest to largest.          
+ * Incept:    SRE, Wed Aug 17 10:44:31 2005 [St. Louis]
+ *
+ * Purpose:   Sorts <vec> in place, from smallest to largest value.
+ *            (That is, <vec[0]> is the minimum and <vec[n-1]> is
+ *            the maximum.)
+ *            
+ *            <esl_vec_FSortIncreasing()> and <esl_vec_ISortIncreasing()>
+ *            do the same, for float and integer vectors.
+ */
+void
+esl_vec_DSortIncreasing(double *vec, int n)
+{
+  qsort((void *) vec, n, sizeof(double), qsort_DIncreasing);
+}
+void
+esl_vec_FSortIncreasing(float *vec, int n)
+{
+  qsort((void *) vec, n, sizeof(float), qsort_FIncreasing);
+}
+void
+esl_vec_ISortIncreasing(int *vec, int n)
+{
+  qsort((void *) vec, n, sizeof(int), qsort_IIncreasing);
+}
+
+/* Function:  esl_vec_DSortDecreasing()
+ * Synopsis:  Sort vector from largest to smallest.          
+ * Incept:    SRE, Wed Aug 17 10:44:31 2005 [St. Louis]
+ *
+ * Purpose:   Sorts <vec> in place, from largest to smallest value.
+ *            (That is, <vec[0]> is the maximum and <vec[n-1]> is
+ *            the minimum.)
+ *            
+ *            <esl_vec_FSortDecreasing()> and <esl_vec_ISortDecreasing()>
+ *            do the same, for float and integer vectors.
+ */
+void
+esl_vec_DSortDecreasing(double *vec, int n)
+{
+  qsort((void *) vec, n, sizeof(double), qsort_DDecreasing);
+}
+void
+esl_vec_FSortDecreasing(float *vec, int n)
+{
+  qsort((void *) vec, n, sizeof(float), qsort_FDecreasing);
+}
+void
+esl_vec_ISortDecreasing(int *vec, int n)
+{
+  qsort((void *) vec, n, sizeof(int), qsort_IDecreasing);
+}
+
+
+/* Function:  esl_vec_DDump()
+ * Synopsis:  Output vector to a stream as text.            
+ * Incept:    ER, Thu Jul 21 12:54:56 CDT 2005 [St. Louis]
+ *
+ * Purpose:   Given a vector, dump it to stream <ofp>.
+ * 
+ *            If <label> is non-NULL, they represent
+ *            single-character labels to put on the vector. 
+ *            (For example, these might be a sequence alphabet).
+ *            Numbers 1..n is used if <label> is NULL.
+ *
+ * Args:      ofp   -  output file pointer; stdout, for example.
+ *            v     -  vector to dump.
+ *            label -  optional: NULL, or character labels
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_vec_DDump(FILE *ofp, double *v, int n, char *label)
+{
+  int a;
+
+  fprintf(ofp, "     ");
+  if (label != NULL) 
+    for (a = 0; a < n; a++) fprintf(ofp, "         %c ", label[a]);
+  else
+    for (a = 0; a < n; a++) fprintf(ofp, "%10d ", a+1);
+  fprintf(ofp, "\n");
+  
+  fprintf(ofp, "      ");
+  for (a = 0; a < n; a++) fprintf(ofp, "%10.6f ", v[a]);
+  fprintf(ofp, "\n");
+
+  return eslOK;
+}
+int
+esl_vec_FDump(FILE *ofp, float *v, int n, char *label)
+{
+  int a;
+
+  fprintf(ofp, "     ");
+  if (label != NULL) 
+    for (a = 0; a < n; a++) fprintf(ofp, "         %c ", label[a]);
+  else
+    for (a = 0; a < n; a++) fprintf(ofp, "%10d ", a+1);
+  fprintf(ofp, "\n");
+  
+  fprintf(ofp, "      ");
+  for (a = 0; a < n; a++) fprintf(ofp, "%10.6f ", v[a]);
+  fprintf(ofp, "\n");
+
+  return eslOK;
+}
+int
+esl_vec_IDump(FILE *ofp, int *v, int n, char *label)
+{
+  int a;
+
+  fprintf(ofp, "     ");
+  if (label != NULL) 
+    for (a = 0; a < n; a++) fprintf(ofp, "       %c ", label[a]);
+  else
+    for (a = 0; a < n; a++) fprintf(ofp, "%8d ", a+1);
+  fprintf(ofp, "\n");
+  
+  fprintf(ofp, "      ");
+  for (a = 0; a < n; a++) fprintf(ofp, "%8d ", v[a]);
+  fprintf(ofp, "\n");
+
+  return eslOK;
+}
+
+/* Function:  esl_vec_D2F()
+ * Synopsis:  Convert between single-precision and double-precision vectors.            
+ * Incept:    SRE, Thu Mar 30 09:04:17 2006 [St. Louis]
+ *
+ * Purpose:   Copy a double vector <src> to a float vector <dst>. Caller
+ *            provides space in the float vector that is at
+ *            least <n>.
+ *            
+ *            Similarly, <esl_vec_F2D()> converts float to double; 
+ *            <esl_vec_I2D()> converts integer to double; 
+ *            <esl_vec_I2F()> converts integer to float.
+ */
+void
+esl_vec_D2F(double *src, int n, float *dst)
+{
+  int i;
+  for (i = 0; i < n; i++) dst[i] = src[i];
+}
+void
+esl_vec_F2D(float *src, int n, double *dst)
+{
+  int i;
+  for (i = 0; i < n; i++) dst[i] = src[i];
+}
+void
+esl_vec_I2F(int *src, int n, float *dst)
+{
+  int i;
+  for (i = 0; i < n; i++) dst[i] = src[i];
+}
+void
+esl_vec_I2D(int *src, int n, double *dst)
+{
+  int i;
+  for (i = 0; i < n; i++) dst[i] = src[i];
+}
+
+
+
+
+/* Function:  esl_vec_DNorm()
+ * Synopsis:  Normalize probability vector.           
+ *
+ * Purpose:   Normalizes a probability vector <vec>,
+ *            such that $\sum_{i=1}{n} \mathrm{vec}_i = 1.0$.
+ *            
+ *            <esl_vec_FNorm()> does the same, for a probability vector
+ *            of floats.
+ */
+void
+esl_vec_DNorm(double *vec, int n)
+{
+  int    x;
+  double sum;
+
+  sum = esl_vec_DSum(vec, n);
+  if (sum != 0.0) for (x = 0; x < n; x++) vec[x] /= sum;
+  else            for (x = 0; x < n; x++) vec[x] = 1. / (double) n;
+}
+void
+esl_vec_FNorm(float *vec, int n)
+{
+  int    x;
+  float  sum;
+
+  sum = esl_vec_FSum(vec, n);
+  if (sum != 0.0) for (x = 0; x < n; x++) vec[x] /= sum;
+  else            for (x = 0; x < n; x++) vec[x] = 1. / (float) n;
+}
+
+
+/* Function:  esl_vec_DLog()
+ * Synopsis:  Convert probability vector elements to log probabilities.           
+ *
+ * Purpose:   Converts a probability vector <vec> to a log
+ *            probability vector: takes the log of each of the <n> 
+ *            values in the vector.
+ *
+ *            <esl_vec_FLog()> does the same, for a probability vector
+ *            of floats.
+ */
+void
+esl_vec_DLog(double *vec, int n)
+{
+  int x;
+  for (x = 0; x < n; x++) 
+    if (vec[x] > 0.) vec[x] = log(vec[x]);
+    else vec[x] = -DBL_MAX;
+}
+void
+esl_vec_FLog(float *vec, int n)
+{
+  int x;
+  for (x = 0; x < n; x++) 
+    if (vec[x] > 0.) vec[x] = logf(vec[x]);
+    else vec[x] = -FLT_MAX;
+}
+
+
+/* Function:  esl_vec_DEntropy()
+ * Synopsis:  Return Shannon entropy of p-vector, in bits.           
+ *
+ * Purpose:   Returns the Shannon entropy of a probability vector <p>,
+ *            in bits ($\log_2$), defined as \citep{CoverThomas}:
+ *            
+ *            \[
+ *               H = - \sum_x p_x \log_2 p_x.
+ *            \]
+ *
+ *            <esl_vec_FEntropy()> does the same, for a probability vector
+ *            of floats.
+ */
+double
+esl_vec_DEntropy(const double *p, int n)
+{
+  int    i;
+  double entropy;
+ 
+  entropy = 0.;
+  for(i = 0; i < n; i++)
+    if (p[i] > 0.) entropy += p[i] * log(p[i]);
+  return(-1.44269504 * entropy); /* converts to bits */
+}
+float
+esl_vec_FEntropy(const float *p, int n)
+{
+  int    i;
+  float  entropy;
+
+  entropy = 0.;
+  for(i = 0; i < n; i++)
+    if (p[i] > 0.) entropy += p[i] * logf(p[i]);
+  return(-1.44269504 * entropy); /* converts to bits */
+}
+
+/* Function:  esl_vec_DRelEntropy()
+ * Synopsis:  Return relative entropy $D(p \parallel q)$ in bits.
+ * Incept:    SRE, Fri May 11 09:03:07 2007 [Janelia]
+ *
+ * Purpose:   Returns Shannon relative entropy of probability
+ *            vectors <p> and <q> in bits, also known as the
+ *            Kullback Leibler "distance" \citep[p.18]{CoverThomas}:
+ *            
+ *            \[
+ *               D(p \parallel f) = \sum_x  p_x \log_2 \frac{p_x}{q_x}.
+ *            \]
+ *
+ *            If for any $x$ $q_x = 0$ and $p_x > 0$, the relative
+ *            entropy is $\infty$.
+ *
+ *            <esl_vec_FRelEntropy()> does the same, for probability
+ *            vectors of floats.
+ */
+double
+esl_vec_DRelEntropy(const double *p, const double *q, int n)
+{
+  int    i;
+  double kl;
+ 
+  kl = 0.;
+  for(i = 0; i < n; i++)
+    if (p[i] > 0.) {
+      if (q[i] == 0.) return eslINFINITY;
+      else            kl += p[i] * log(p[i]/q[i]);
+    }
+  return(1.44269504 * kl); /* converts to bits */
+}
+float
+esl_vec_FRelEntropy(const float *p, const float *q, int n)
+{
+  int    i;
+  float  kl;
+
+  kl = 0.;
+  for(i = 0; i < n; i++)
+    if (p[i] > 0.) {
+      if (q[i] == 0.) return eslINFINITY;
+      else            kl += p[i] * log(p[i]/q[i]);
+    }
+  return(1.44269504 * kl); /* converts to bits */
+}
+
+
+/* Function:  esl_vec_DExp()
+ * Synopsis:  Converts log probability vector elements to probabilities.           
+ *
+ * Purpose:   Converts a log probability vector <vec> back to a 
+ *            probability vector: exponentiates each of the <n> 
+ *            values in the vector.
+ *            
+ *            This routine only calls <exp()> on the elements of 
+ *            vector, which are presumed to be log probabilities;
+ *            whether the resulting vector is a properly normalized
+ *            probability vector is the caller's problem.
+ *
+ *            <esl_vec_FExp()> does the same, for a log probability vector
+ *            of floats.
+ */
+void
+esl_vec_DExp(double *vec, int n)
+{
+  int x;
+  for (x = 0; x < n; x++) vec[x] = exp(vec[x]);
+}
+void
+esl_vec_FExp(float *vec, int n)
+{
+  int x;
+  for (x = 0; x < n; x++) vec[x] = expf(vec[x]);
+}
+
+/* Function:  esl_vec_DLogSum()
+ * Synopsis:  Given log-p-vector, return log of sum of probabilities.
+ *
+ * Purpose:   <vec> is a log probability vector; return the log of the scalar sum
+ *            of the probabilities in <vec>. That is, the <n> elements in <vec>
+ *            are log probabilities, but the summation is done in probability
+ *            space, by exponentiating each of the <n> values in the vector,
+ *            summing, and returning the log of the sum. 
+ *            
+ *            That is: return $\log \sum_i e^{v_i}$.
+ *
+ *            The trick is to do this without numerical underflow or overflow.
+ *
+ *            <esl_vec_FLogSum()> does the same, for a log probability vector
+ *            of floats.
+ */
+double
+esl_vec_DLogSum(double *vec, int n)
+{
+  int x;
+  double max, sum;
+  
+  max = esl_vec_DMax(vec, n);
+  if (max == eslINFINITY) return eslINFINITY; /* avoid inf-inf below! */
+  sum = 0.0;
+  for (x = 0; x < n; x++)
+    if (vec[x] > max - 50.)
+      sum += exp(vec[x] - max);
+  sum = log(sum) + max;
+  return sum;
+}
+float
+esl_vec_FLogSum(float *vec, int n)
+{
+  int x;
+  float max, sum;
+  
+  max = esl_vec_FMax(vec, n);
+  sum = 0.0;
+  for (x = 0; x < n; x++)
+    if (vec[x] > max - 50.)
+      sum += expf(vec[x] - max);
+  sum = logf(sum) + max;
+  return sum;
+}
+
+
+/* Function:  esl_vec_DLogNorm()
+ * Synopsis:  Normalize a log p-vector, make it a p-vector.           
+ * Incept:    SRE, Thu Apr  7 17:45:39 2005 [St. Louis]
+ *
+ * Purpose:   Given an unnormalized log probability vector <vec>   
+ *            of length <n>, normalize it and make it a 
+ *            probability vector. 
+ *            
+ *            <esl_vec_FLogNorm()> does the same, but for a vector
+ *            of floats instead of doubles.
+ *
+ * Returns:   (void); <vec> is changed in place.
+ */
+void
+esl_vec_DLogNorm(double *vec, int n)
+{
+  double denom;
+  
+  denom = esl_vec_DLogSum(vec, n);
+  esl_vec_DIncrement(vec, n, -1.*denom);
+  esl_vec_DExp (vec, n);
+  esl_vec_DNorm(vec, n);
+}
+void
+esl_vec_FLogNorm(float *vec, int n)
+{
+  float denom;
+  
+  denom = esl_vec_FLogSum(vec, n);
+  esl_vec_FIncrement(vec, n, -1.*denom);
+  esl_vec_FExp (vec, n);
+  esl_vec_FNorm(vec, n);
+}
+
+
+/* Function:  esl_vec_DCDF()
+ * Synopsis:  Calculate cumulative distribution for a discrete prob vector
+ * Incept:    SRE, Wed Jan 12 09:09:42 2011 [Janelia]
+ *
+ * Purpose:   Given a probability vector <p> of length <n>, 
+ *            calculates its cumulate distribution function
+ *            and puts in in caller-allocated space <cdf>.
+ *            Caller must have allocated <cdf> for at least
+ *            <n> elements.
+ *            
+ *            By definition, <cdf[0] == p[0]>, and <cdf[n-1]> ought to
+ *            be 1.0; however, numerical roundoff error must be tolerated
+ *            in the sum. If caller isn't sure about <p>'s provenance,
+ *            it may want to check that <cdf[n-1]> is tolerably close 
+ *            to 1.0 (see <esl_DCompare()>).
+ *
+ *            It is ok for <cdf> to be the same space as <p>
+ *            (<esl_vec_DCDF(p, n, p)> is fine); that is, <p> can be
+ *            overwritten by <cdf>.
+ *
+ * Args:      p    - input probability vector p[0..n-1]
+ *            n    - number of elements in p
+ *            cdf  - RETURN: cumulative distribution for p, in caller-allocated space
+ *
+ * Returns:   (void).
+ */
+void
+esl_vec_DCDF(double *p, int n, double *cdf)
+{
+  int i;
+ 
+  cdf[0] = p[0];
+  for (i = 1; i < n; i++) 
+    cdf[i] = p[i] + cdf[i-1];
+}
+void
+esl_vec_FCDF(float *p, int n, float *cdf)
+{
+  int i;
+ 
+  cdf[0] = p[0];
+  for (i = 1; i < n; i++) 
+    cdf[i] = p[i] + cdf[i-1];
+}
+
+
+
+/* Function:  esl_vec_DValidate()
+ * Synopsis:  Verifies that vector is p-vector.
+ * Incept:    ER, Tue Dec  5 09:38:54 EST 2006 [janelia]
+ *
+ * Purpose:   Validate a probability vector <vec> of length <n>.
+ *            Each element has to be between 0 and 1, and
+ *            the sum of all elements has to be 1.
+ *
+ * Args:      v      - p vector to validate.
+ *            n      - dimensionality of v
+ *            tol    - convergence criterion applied to sum of v
+ *            errbuf - NULL, or a failure message buffer allocated
+ *                     for at least <eslERRBUFSIZE> chars. 
+ *
+ * Returns:   <eslOK> on success, or <eslFAIL> on validation failure.
+ *            Upon failure, if caller provided a non-<NULL> <errbuf>,
+ *            an informative message is left there.
+ */
+int
+esl_vec_DValidate(double *vec, int n, double tol, char *errbuf)
+{
+  int    status;
+  int    x;
+  double sum = 0.;
+
+  if (errbuf) *errbuf = 0;
+  if (n == 0) return eslOK;
+
+  for (x = 0; x < n; x++) {
+    if (vec[x] < 0.0 || vec[x] > 1.0)
+      ESL_XFAIL(eslFAIL, errbuf, "value %d is not a probability between 0..1", x);
+    sum += vec[x];
+  }
+
+  if (fabs(sum - 1.0) > tol) 
+    ESL_XFAIL(eslFAIL, errbuf, "vector does not sum to 1.0");
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+int
+esl_vec_FValidate(float *vec, int n, float tol, char *errbuf)
+{
+  int   status;
+  int   x;
+  float sum = 0.;
+
+  if (errbuf) *errbuf = 0;
+  if (n == 0) return eslOK;
+
+  for (x = 0; x < n; x++) {
+    if (vec[x] < 0.0 || vec[x] > 1.0)
+      ESL_XFAIL(eslFAIL, errbuf, "value %d is not a probability between 0..1", x);
+    sum += vec[x];
+  }
+
+  if (fabs(sum - 1.0) > tol) 
+    ESL_XFAIL(eslFAIL, errbuf, "vector does not sum to 1.0");
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function:  esl_vec_DLogValidate()
+ * Synopsis:  Verify that vector is a log-p-vector.           
+ * Incept:    ER,  Tue Dec  5 09:46:51 EST 2006 [janelia]
+ *
+ * Purpose:   Validate a log probability vector <vec> of length <n>.
+ *            The exp of each element has to be between 0 and 1, and
+ *            the sum of all elements has to be 1.
+ *
+ * Args:      v      - log p vector to validate.
+ *            n      - dimensionality of v
+ *            tol    - convergence criterion applied to sum of exp v
+ *            errbuf - NULL, or a failure message buffer allocated
+ *                     for at least p7_ERRBUFSIZE chars. 
+ *
+ * Returns:   <eslOK> on success, or <eslFAIL> on failure; upon failure,
+ *            if caller provided a non-<NULL> <errbuf>, an informative
+ *            message is left there.
+ *            
+ * Throws:    <eslEMEM> on allocation failure.           
+ */
+int
+esl_vec_DLogValidate(double *vec, int n, double tol, char *errbuf)
+{
+  int     status;
+  double *expvec = NULL;
+
+  if (errbuf) *errbuf = 0;
+  if (n == 0) return eslOK;
+
+  ESL_ALLOC(expvec, sizeof(double)*n);
+  esl_vec_DCopy(vec, n, expvec);
+  esl_vec_DExp(expvec, n); 
+  if ((status = esl_vec_DValidate(expvec, n, tol, errbuf)) != eslOK) goto ERROR;
+  free(expvec);
+  return eslOK;
+
+ ERROR:
+  if (expvec != NULL) free(expvec);
+  return status;
+}
+int
+esl_vec_FLogValidate(float *vec, int n, float tol, char *errbuf)
+{
+  int     status;
+  float  *expvec = NULL;
+
+  if (errbuf) *errbuf = 0;
+  if (n == 0) return eslOK;
+
+  ESL_ALLOC(expvec, sizeof(float)*n);
+  esl_vec_FCopy(vec, n, expvec);
+  esl_vec_FExp(expvec, n); 
+  if ((status = esl_vec_FValidate(expvec, n, tol, errbuf)) != eslOK) goto ERROR;
+  free(expvec);
+  return eslOK;
+
+ ERROR:
+  if (expvec != NULL) free(expvec);
+  return eslOK;
+}
+
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+
+/* Function:  esl_vec_DShuffle()
+ * Synopsis:  Shuffle a vector, in place.
+ *
+ * Purpose:   Shuffle a vector <v> of <n> items, using the
+ *            random number generator <r>.
+ */
+int
+esl_vec_DShuffle(ESL_RANDOMNESS *r, double *v, int n)
+{
+  double swap;
+  int    pos;
+  for ( ; n > 1; n--)
+    {
+      pos = esl_rnd_Roll(r, n);
+      swap = v[pos]; 
+      v[pos] = v[n-1];
+      v[n-1] = swap;
+    }
+  return eslOK;
+}
+int
+esl_vec_FShuffle(ESL_RANDOMNESS *r, float *v, int n)
+{
+  float swap;
+  int   pos;
+  for ( ; n > 1; n--)
+    {
+      pos = esl_rnd_Roll(r, n);
+      swap = v[pos]; 
+      v[pos] = v[n-1];
+      v[n-1] = swap;
+    }
+  return eslOK;
+}
+int
+esl_vec_IShuffle(ESL_RANDOMNESS *r, int *v, int n)
+{
+  int swap;
+  int pos;
+  for ( ; n > 1; n--)
+    {
+      pos = esl_rnd_Roll(r, n);
+      swap = v[pos]; 
+      v[pos] = v[n-1];
+      v[n-1] = swap;
+    }
+  return eslOK;
+}
+#endif /*eslAUGMENT_RANDOM*/
+
+
+/*****************************************************************
+ * 2. Unit tests
+ *****************************************************************/ 
+#ifdef eslVECTOROPS_TESTDRIVE
+static void
+utest_pvectors(void)
+{
+  char  *msg   = "pvector unit test failed";
+  double p1[4] = { 0.25, 0.25, 0.25, 0.25 };
+  double p2[4];
+  double p3[4];
+  float  p1f[4]; 
+  float  p2f[4] = { 0.0,   0.5, 0.5,  0.0  };
+  float  p3f[4];
+  int    n = 4;
+  double result;
+
+  esl_vec_D2F(p1,  n, p1f);
+  esl_vec_F2D(p2f, n, p2);  
+
+  if (esl_vec_DValidate(p1,  n, 1e-12, NULL) != eslOK) esl_fatal(msg);
+  if (esl_vec_FValidate(p1f, n, 1e-7,  NULL) != eslOK) esl_fatal(msg);
+
+  result = esl_vec_DEntropy(p1,  n);          if (esl_DCompare(2.0, result, 1e-9) != eslOK) esl_fatal(msg);
+  result = esl_vec_FEntropy(p1f, n);          if (esl_DCompare(2.0, result, 1e-9) != eslOK) esl_fatal(msg);
+  result = esl_vec_DEntropy(p2,  n);          if (esl_DCompare(1.0, result, 1e-9) != eslOK) esl_fatal(msg);
+  result = esl_vec_FEntropy(p2f, n);          if (esl_DCompare(1.0, result, 1e-9) != eslOK) esl_fatal(msg);
+
+  result = esl_vec_DRelEntropy(p2,  p1,  n);  if (esl_DCompare(1.0, result, 1e-9) != eslOK) esl_fatal(msg);
+  result = esl_vec_FRelEntropy(p2f, p1f, n);  if (esl_DCompare(1.0, result, 1e-9) != eslOK) esl_fatal(msg);
+
+  result = esl_vec_DRelEntropy(p1,  p2,  n);  if (result != eslINFINITY)  esl_fatal(msg);
+  result = esl_vec_FRelEntropy(p1f, p2f, n);  if (result != eslINFINITY)  esl_fatal(msg);
+
+  esl_vec_DLog(p2, n);
+  if (esl_vec_DLogValidate(p2, n, 1e-12, NULL) != eslOK) esl_fatal(msg);
+  esl_vec_DExp(p2, n);
+  if (p2[0] != 0.) esl_fatal(msg);
+
+  esl_vec_FLog(p2f, n);
+  if (esl_vec_FLogValidate(p2f, n, 1e-7, NULL) != eslOK) esl_fatal(msg);
+  esl_vec_FExp(p2f, n);
+  if (p2f[0] != 0.) esl_fatal(msg);
+
+  esl_vec_DCopy(p2, n, p3);
+  esl_vec_DScale(p3, n, 10.);
+  esl_vec_DNorm(p3, n);
+  if (esl_vec_DCompare(p2, p3, n, 1e-12) != eslOK) esl_fatal(msg);
+
+  esl_vec_DLog(p3, n);
+  result = esl_vec_DLogSum(p3, n); if (esl_DCompare(0.0, result, 1e-12) != eslOK) esl_fatal(msg);
+  esl_vec_DIncrement(p3, n, 2.0);
+  esl_vec_DLogNorm(p3, n);
+  if (esl_vec_DCompare(p2, p3, n, 1e-12) != eslOK) esl_fatal(msg);
+
+  esl_vec_FCopy(p2f, n, p3f);
+  esl_vec_FScale(p3f, n, 10.);
+  esl_vec_FNorm(p3f, n);
+  if (esl_vec_FCompare(p2f, p3f, n, 1e-7) != eslOK) esl_fatal(msg);
+
+  esl_vec_FLog(p3f, n);
+  result = esl_vec_FLogSum(p3f, n); if (esl_DCompare(0.0, result, 1e-7) != eslOK) esl_fatal(msg);
+  esl_vec_FIncrement(p3f, n, 2.0);
+  esl_vec_FLogNorm(p3f, n);
+  if (esl_vec_FCompare(p2f, p3f, n, 1e-7) != eslOK) esl_fatal(msg);
+
+  return;
+}
+#endif /*eslVECTOROPS_TESTDRIVE*/
+
+
+/*****************************************************************
+ * 3. Test driver
+ *****************************************************************/ 
+
+/*   gcc -g -Wall -o test -I. -L. -DeslVECTOROPS_TESTDRIVE esl_vectorops.c -leasel -lm
+ */
+#ifdef eslVECTOROPS_TESTDRIVE
+#include "easel.h"
+#include "esl_vectorops.h"
+
+int main(void)
+{
+  utest_pvectors();
+  return 0;
+}
+#endif /*eslVECTOROPS_TESTDRIVE*/
+
+/*****************************************************************
+ * 4. Examples
+ *****************************************************************/ 
+
+#ifdef eslVECTOROPS_EXAMPLE
+/*::cexcerpt::vectorops_example::begin::*/
+/*   gcc -g -Wall -o example -I. -DeslVECTOROPS_EXAMPLE esl_vectorops.c easel.c -lm   */
+#include "easel.h"
+#include "esl_vectorops.h"
+
+int main(void)
+{
+  double *p;
+  char    labels[] = "ACGT";
+  int     n = 4;
+
+  p = malloc(sizeof(double) * n);
+  esl_vec_DSet(p, n, 1.0);
+  esl_vec_DNorm(p, n);
+  esl_vec_DDump(stdout, p, n, labels);
+  free(p);
+  return 0;
+}
+/*::cexcerpt::vectorops_example::end::*/
+#endif /*eslVECTOROPS_EXAMPLE*/
+
+/*****************************************************************  
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_vectorops.h b/esl_vectorops.h
new file mode 100644
index 0000000..a0d3403
--- /dev/null
+++ b/esl_vectorops.h
@@ -0,0 +1,128 @@
+/* Vector operations.
+ */
+#ifndef eslVECTOROPS_INCLUDED
+#define eslVECTOROPS_INCLUDED
+
+extern void   esl_vec_DSet(double *vec, int n, double value);
+extern void   esl_vec_FSet(float  *vec, int n, float  value);
+extern void   esl_vec_ISet(int    *vec, int n, int    value);
+
+extern void   esl_vec_DScale(double *vec, int n, double scale);
+extern void   esl_vec_FScale(float  *vec, int n, float  scale);
+extern void   esl_vec_IScale(int    *vec, int n, int    scale);
+
+extern void   esl_vec_DIncrement(double *v, int n, double x);
+extern void   esl_vec_FIncrement(float  *v, int n, float  x);
+extern void   esl_vec_IIncrement(int    *v, int n, int    x);
+
+extern double esl_vec_DSum(double *vec, int n);
+extern float  esl_vec_FSum(float  *vec, int n);
+extern int    esl_vec_ISum(int    *vec, int n);
+
+extern void   esl_vec_DAdd(double *vec1, const double *vec2, int n);
+extern void   esl_vec_FAdd(float  *vec1, const float  *vec2, int n);
+extern void   esl_vec_IAdd(int    *vec1, const int    *vec2, int n);
+
+extern void   esl_vec_DAddScaled(double *vec1, double *vec2, double a, int n);
+extern void   esl_vec_FAddScaled(float  *vec1, float  *vec2, float  a, int n);
+extern void   esl_vec_IAddScaled(int    *vec1, int    *vec2, int    a, int n);
+
+extern void   esl_vec_DCopy(const double *src, const int n, double *dest);
+extern void   esl_vec_FCopy(const float  *src, const int n, float  *dest);
+extern void   esl_vec_ICopy(const int    *src, const int n, int    *dest);
+
+extern int    esl_vec_DCompare(const double *vec1, const double *vec2, int n, double tol);
+extern int    esl_vec_FCompare(const float  *vec1, const float  *vec2, int n, float tol);
+extern int    esl_vec_ICompare(const int    *vec1, const int    *vec2, int n);
+
+extern void   esl_vec_DSwap(double *vec1, double *vec2, int n);
+extern void   esl_vec_FSwap(float  *vec1, float  *vec2, int n);
+extern void   esl_vec_ISwap(int    *vec1, int    *vec2, int n);
+
+extern void   esl_vec_DReverse(double *vec, double *rev, int n);
+extern void   esl_vec_FReverse(float  *vec, float  *rev, int n);
+extern void   esl_vec_IReverse(int    *vec, int    *rev, int n);
+extern void   esl_vec_CReverse(char   *vec, char   *rev, int n);
+
+extern double esl_vec_DDot(double *vec1, double *vec2, int n);
+extern float  esl_vec_FDot(float  *vec1, float  *vec2, int n);
+extern int    esl_vec_IDot(int    *vec1, int    *vec2, int n);
+
+extern double esl_vec_DMax(const double *vec, int n);
+extern float  esl_vec_FMax(const float  *vec, int n);
+extern int    esl_vec_IMax(const int    *vec, int n);
+
+extern double esl_vec_DMin(const double *vec, int n);
+extern float  esl_vec_FMin(const float  *vec, int n);
+extern int    esl_vec_IMin(const int    *vec, int n);
+
+extern int    esl_vec_DArgMax(const double *vec, int n);
+extern int    esl_vec_FArgMax(const float  *vec, int n);
+extern int    esl_vec_IArgMax(const int    *vec, int n);
+
+extern int    esl_vec_DArgMin(const double *vec, int n);
+extern int    esl_vec_FArgMin(const float  *vec, int n);
+extern int    esl_vec_IArgMin(const int    *vec, int n);
+
+extern void   esl_vec_DSortIncreasing(double *vec, int n);
+extern void   esl_vec_FSortIncreasing(float  *vec, int n);
+extern void   esl_vec_ISortIncreasing(int    *vec, int n);
+
+extern void   esl_vec_DSortDecreasing(double *vec, int n);
+extern void   esl_vec_FSortDecreasing(float  *vec, int n);
+extern void   esl_vec_ISortDecreasing(int    *vec, int n);
+
+extern int    esl_vec_DDump(FILE *ofp, double *v, int n, char *label);
+extern int    esl_vec_FDump(FILE *ofp, float *v,  int n, char *label);
+extern int    esl_vec_IDump(FILE *ofp, int *v,    int n, char *label);
+
+extern void   esl_vec_D2F(double *src, int n, float  *dst);
+extern void   esl_vec_F2D(float  *src, int n, double *dst);
+extern void   esl_vec_I2F(int    *src, int n, float  *dst);
+extern void   esl_vec_I2D(int    *src, int n, double *dst);
+
+extern void   esl_vec_DNorm(double *vec, int n);
+extern void   esl_vec_FNorm(float  *vec, int n);
+
+extern void   esl_vec_DLog(double *vec, int n);
+extern void   esl_vec_FLog(float  *vec, int n);
+
+extern double esl_vec_DEntropy(const double *p, int n);
+extern float  esl_vec_FEntropy(const float  *p, int n);
+
+extern double esl_vec_DRelEntropy(const double *p, const double *f, int n);
+extern float  esl_vec_FRelEntropy(const float  *p, const float  *f, int n);
+
+extern void   esl_vec_DExp(double *vec, int n);
+extern void   esl_vec_FExp(float  *vec, int n);
+
+extern double esl_vec_DLogSum(double *vec, int n);
+extern float  esl_vec_FLogSum(float  *vec, int n);
+
+extern void   esl_vec_DLogNorm(double *vec, int n);
+extern void   esl_vec_FLogNorm(float  *vec, int n);
+
+extern void   esl_vec_DCDF(double *p, int n, double *cdf);
+extern void   esl_vec_FCDF(float  *p, int n, float  *cdf);
+
+extern int    esl_vec_DValidate(double *vec, int n, double tol, char *errbuf);
+extern int    esl_vec_FValidate(float  *vec, int n, float  tol, char *errbuf);
+
+extern int    esl_vec_DLogValidate(double *vec, int n, double tol, char *errbuf);
+extern int    esl_vec_FLogValidate(float  *vec, int n, float  tol, char *errbuf);
+
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+extern int esl_vec_DShuffle(ESL_RANDOMNESS *r, double *v, int n);
+extern int esl_vec_FShuffle(ESL_RANDOMNESS *r, float  *v, int n);
+extern int esl_vec_IShuffle(ESL_RANDOMNESS *r, int    *v, int n);
+#endif
+
+#endif /* eslVECTOROPS_INCLUDED */
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_vectorops.tex b/esl_vectorops.tex
new file mode 100644
index 0000000..473a3fe
--- /dev/null
+++ b/esl_vectorops.tex
@@ -0,0 +1,55 @@
+
+The \eslmod{vectorops} module contains routines for simple operations
+on vectors.
+
+Different functions allow an operation to be performed in vectors
+containing elements of different scalar types (double, float,
+integer). The appropriate routine is prefixed with D, F, or I. For
+example, \ccode{esl\_vec\_DSet()} is the Set routine for a vector of
+doubles; \ccode{esl\_vec\_ISet()} is for integers.
+
+Table~\ref{tbl:vectorops_api} lists the functions in the
+\eslmod{vectorops} API.
+
+\begin{table}[bp]
+\begin{center}
+\begin{tabular}{ll}
+   \multicolumn{2}{c}{\textbf{All vectors}}\\
+\ccode{esl\_vec\_\{D,F,I\}Set()}         & Set all items in vector to scalar value.\\
+\ccode{esl\_vec\_\{D,F,I\}Scale()}       & Multiply all items in vector by scalar.\\
+\ccode{esl\_vec\_\{D,F,I\}Increment()}   & Add a scalar to all items in vector.\\
+\ccode{esl\_vec\_\{D,F,I\}Sum()}         & Return scalar sum of values in vector.\\
+\ccode{esl\_vec\_\{D,F,I\}Add()}         & Add vec2 to vec1.\\
+\ccode{esl\_vec\_\{D,F,I\}AddScaled()}   & Scale vec2 and add it to vec1.\\
+\ccode{esl\_vec\_\{D,F,I\}Copy()}        & Set vec1 to be same as vec2. \\
+\ccode{esl\_vec\_\{D,F,I\}Compare()}     & Compare vec1 to vec2 for equality. \\
+\ccode{esl\_vec\_\{D,F,I\}Swap()}        & Swap vec1 and vec2. \\
+\ccode{esl\_vec\_\{D,F,I\}Dot()}         & Return dot product of two vectors.\\
+\ccode{esl\_vec\_\{D,F,I\}Max()}         & Return value of maximum element in vector.\\
+\ccode{esl\_vec\_\{D,F,I\}Min()}         & Return value of minimum element in vector.\\
+\ccode{esl\_vec\_\{D,F,I\}ArgMax()}      & Return index of maximum element in vector.\\
+\ccode{esl\_vec\_\{D,F,I\}ArgMin()}      & Return index of minimum element in vector.\\
+\ccode{esl\_vec\_\{D,F,I\}SortIncreasing()}& Sort vector from smallest to largest.\\
+\ccode{esl\_vec\_\{D,F,I\}SortDecreasing()}& Sort vector from largest to smallest.\\
+\ccode{esl\_vec\_\{D,F,I\}Dump()}        & Output vector to a stream as text.\\
+    \multicolumn{2}{c}{\textbf{Type conversions}}\\
+\ccode{esl\_vec\_\{D,I\}2F()}            & Convert to single precision floats. \\
+\ccode{esl\_vec\_\{F,I\}2D()}            & Convert to double precision floats. \\
+    \multicolumn{2}{c}{\textbf{Probability vectors}}\\
+\ccode{esl\_vec\_\{D,F\}Norm()}          & Normalize a probability vector of length n.\\
+\ccode{esl\_vec\_\{D,F\}Log()}           & Convert all items in vec to log probabilities. \\
+\ccode{esl\_vec\_\{D,F\}Entropy()}       & Return Shannon entropy of probability vector $p$, in bits\\
+\ccode{esl\_vec\_\{D,F\}RelEntropy()}    & Return relative entropy $D(p \parallel q)$ of $p,q$, in bits\\
+\ccode{esl\_vec\_\{D,F\}Validate()}      & Verify that vector sums to one.\\
+    \multicolumn{2}{c}{\textbf{Log probability vectors}}\\
+\ccode{esl\_vec\_\{D,F\}Exp()}           & Convert log p's back to probabilities\\
+\ccode{esl\_vec\_\{D,F\}LogSum()}        & Given vector of log p's; return log of summed p's.\\
+\ccode{esl\_vec\_\{D,F\}LogNorm()}       & Normalize a log p vector, making it a prob vector. \\
+\ccode{esl\_vec\_\{D,F\}LogValidate()}   & Verifies that vector sums to one (in prob space). \\
+
+\end{tabular}
+\end{center}
+\caption{The \eslmod{vectorops} API.}
+\label{tbl:vectorops_api}
+\end{table}
+
diff --git a/esl_vmx.c b/esl_vmx.c
new file mode 100644
index 0000000..04c1c8f
--- /dev/null
+++ b/esl_vmx.c
@@ -0,0 +1,568 @@
+/* Vectorized routines for PowerPC, using Altivec/VMX.
+ * 
+ * Table of contents           
+ *     1. SIMD logf(), expf()
+ *     2. Miscellaneous convenience functions.
+ *     3. Benchmark
+ *     4. Unit tests
+ *     5. Test driver
+ *     6. Example
+ *     7. Copyright and license
+ *     
+ *****************************************************************
+ * Credits:
+ *
+ * The logf() and expf() routines are derivatives of routines by
+ * Julien Pommier [http://gruntthepeon.free.fr/ssemath/]. Those
+ * routines were in turn based on serial implementations in the Cephes
+ * math library by Stephen Moshier [Moshier89;
+ * http://www.moshier.net/#Cephes]. Thanks and credit to both Moshier
+ * and Pommier for their clear code. Additional copyright and license
+ * information is appended at the end of the file.
+ */
+#include "esl_config.h"
+#ifdef HAVE_VMX
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <float.h>
+
+#ifndef __APPLE_ALTIVEC__
+#include <altivec.h>
+#endif
+
+#include "easel.h"
+#include "esl_vmx.h"
+
+
+/*****************************************************************
+ * 1. VMX SIMD logf(), expf()
+ *****************************************************************/ 
+
+/* As of Dec 2007, I am unaware of any plans for Intel/AMD to release
+ * SSE intrinsics for logf(), expf(), or other special functions.
+ *
+ * I need them, and the code below should suffice. If you know of
+ * better ways to compute these functions, please let me know.
+ */
+
+/* Function:  esl_vmx_logf()
+ * Synopsis:  <r[z] = log x[z]>
+ *
+ * Purpose:   Given a vector <x> containing four floats, returns a
+ *            vector <r> in which each element <r[z] = logf(x[z])>.
+ *            
+ *            Valid in the domain $x_z > 0$ for normalized IEEE754
+ *            $x_z$.
+ *
+ *            For <x> $< 0$, including -0, returns <NaN>. For <x> $==
+ *            0$ or subnormal <x>, returns <-inf>. For <x = inf>,
+ *            returns <inf>. For <x = NaN>, returns <NaN>. For 
+ *            subnormal <x>, returns <-inf>.
+ *
+ * Xref:      J2/71.
+ * 
+ * Note:      Derived from SSE2 implementation which was
+ *            Derived from an SSE1 implementation by Julian
+ *            Pommier. Converted to SSE2 and added handling
+ *            of IEEE754 specials.
+ */
+vector float 
+esl_vmx_logf(vector float x) 
+{
+  static vector float cephesv_1 = { 7.0376836292E-2f, -1.1514610310E-1f,  1.1676998740E-1f, -1.2420140846E-1f };
+  static vector float cephesv_2 = { 1.4249322787E-1f, -1.6668057665E-1f,  2.0000714765E-1f, -2.4999993993E-1f };
+  static vector float cephesv_3 = { 3.3333331174E-1f,  0.0f,              0.0f,              0.0f             };
+
+  static vector float constv = { 0.707106781186547524f, -2.12194440e-4f, 0.5f, 0.693359375f };
+
+  vector float onev = (vector float) {1.0, 1.0, 1.0, 1.0}; /* all elem = 1.0 */
+  vector signed int ei;
+  vector float e;
+  vector bool int invalid_mask, zero_mask, inf_mask;            /* masks used to handle special IEEE754 inputs */
+  vector bool int mask;
+  vector float origx;
+  vector float tmp;
+  vector float y;
+  vector float z;
+
+  vector float zerov = (vector float) vec_splat_u32(0);
+  vector signed int infExpv = { 255, 255, 255, 255 };  
+
+  /* first, split x apart: x = frexpf(x, &e); */
+  ei           = vec_sr((vector signed int) x, ((vector unsigned int) {23, 23, 23, 23}));
+							             /* shift right 23: IEEE754 floats: ei = biased exponents     */
+  invalid_mask = vec_cmple(x, zerov);                                /* mask any elem that's negative; these become NaN           */
+  zero_mask    = vec_cmpeq(ei,(vector signed int) zerov);            /* mask any elem zero or subnormal; these become -inf        */
+  inf_mask     = vec_cmpeq(ei, infExpv);			     /* mask any elem +inf or NaN; these stay +inf or NaN         */
+  origx        = x;			                             /* store original x, used for log(inf) = inf, log(NaN) = NaN */
+
+  x  = vec_and(x, (vector float) ((vector unsigned int) {~0x7f800000, ~0x7f800000, ~0x7f800000, ~0x7f800000}));
+						                     /* x now the stored 23 bits of the 24-bit significand        */
+  x  = vec_or (x, vec_splat(constv, 2));                             /* sets hidden bit b[0]                                      */
+
+  ei = vec_sub(ei, ((vector signed int) {126, 126, 126, 126}));      /* -127 (ei now signed base-2 exponent); then +1             */
+  e  = vec_ctf(ei, 0);
+
+  /* now, calculate the log */
+  mask = vec_cmplt(x, vec_splat(constv, 0)); /* avoid conditional branches.           */
+  tmp  = vec_and(x, (vector float) mask);    /* tmp contains x values < 0.707, else 0 */
+  x    = vec_sub(x, onev);
+  e    = vec_sub(e, vec_and(onev, (vector float) mask));
+  x    = vec_add(x, tmp);
+  z    = vec_madd(x, x, zerov);
+
+  y =                vec_splat(cephesv_1, 0);
+  y = vec_madd(y, x, vec_splat(cephesv_1, 1)); 
+  y = vec_madd(y, x, vec_splat(cephesv_1, 2));    
+  y = vec_madd(y, x, vec_splat(cephesv_1, 3));   
+  y = vec_madd(y, x, vec_splat(cephesv_2, 0));   
+  y = vec_madd(y, x, vec_splat(cephesv_2, 1));    
+  y = vec_madd(y, x, vec_splat(cephesv_2, 2));   
+  y = vec_madd(y, x, vec_splat(cephesv_2, 3)); 
+  y = vec_madd(y, x, vec_splat(cephesv_3, 0));  
+  y = vec_madd(y, x, zerov);
+  y = vec_madd(y, z, zerov);
+
+  tmp = vec_madd(e, vec_splat(constv, 1), zerov);
+  y   = vec_add(y, tmp);
+
+  tmp = vec_madd(z, vec_splat(constv, 2), zerov);
+  y   = vec_sub(y, tmp);
+
+  x = vec_add(x, y);
+  x = vec_madd(e, vec_splat(constv, 3), x);
+
+  /* IEEE754 cleanup: */
+  x = vec_or(x, (vector float) invalid_mask);               /* log(x<0, including -0) = NaN  */
+  x = vec_sel(x, ((vector float) {-eslINFINITY, -eslINFINITY, -eslINFINITY, -eslINFINITY}), zero_mask); /* x zero or subnormal    = -inf */
+  x = vec_sel(x, origx,                         inf_mask);  /* log(inf)=inf; log(NaN) = NaN  */
+  return x;
+}
+
+/* Function:  esl_vmx_expf()
+ * Synopsis:  <r[z] = exp x[z]>
+ *
+ * Purpose:   Given a vector <x> containing four floats, returns a
+ *            vector <r> in which each element <r[z] = logf(x[z])>.
+ *            
+ *            Valid for all IEEE754 floats $x_z$.
+ *            
+ * Xref:      J2/71
+ * 
+ * Note:      Derived from SSE2 implementation which was
+ *            Derived from an SSE1 implementation by Julian
+ *            Pommier. Converted to SSE2.
+ */
+vector float
+esl_vmx_expf(vector float x) 
+{
+  static vector float cephesv_p1 = { 1.9875691500E-4f, 1.3981999507E-3f, 8.3334519073E-3f, 4.1665795894E-2f };
+  static vector float cephesv_p2 = { 1.6666665459E-1f, 5.0000001201E-1f, 0.693359375f,    -2.12194440E-4f   };
+
+  static vector float maxlogfv = {   88.72283905206835f,   88.72283905206835f,   88.72283905206835f,   88.72283905206835f };  /* log(2^128)  */
+  static vector float minlogfv = { -103.27892990343185f, -103.27892990343185f, -103.27892990343185f, -103.27892990343185f };  /* log(2^-149) */
+
+  vector signed int k;
+  vector bool int minmask, maxmask;
+  vector float tmp, fx, y, z;
+
+  vector float zerov = (vector float) vec_splat_u32(0);
+  
+  /* handle out-of-range and special conditions */
+  maxmask = vec_cmpgt(x, maxlogfv);
+  minmask = vec_cmple(x, minlogfv);
+
+  /* range reduction: exp(x) = 2^k e^f = exp(f + k log 2); k = floorf(0.5 + x / log2): */
+  fx = vec_madd(x, ((vector float) {eslCONST_LOG2R, eslCONST_LOG2R, eslCONST_LOG2R, eslCONST_LOG2R}), zerov);
+  fx = vec_add(fx, ((vector float) {0.5, 0.5, 0.5, 0.5}));
+
+  /* floorf() with VMX:  */
+  fx = vec_floor(fx);
+  k  = vec_cts(fx, 0);
+  
+  /* polynomial approx for e^f for f in range [-0.5, 0.5] */
+  tmp = vec_madd(fx, vec_splat(cephesv_p2, 2), zerov);
+  z   = vec_madd(fx, vec_splat(cephesv_p2, 3), zerov);
+  x   = vec_sub(x, tmp);
+  x   = vec_sub(x, z);
+  z   = vec_madd(x, x, zerov);
+  
+  y  =                vec_splat(cephesv_p1, 0);
+  y  = vec_madd(y, x, vec_splat(cephesv_p1, 1));
+  y  = vec_madd(y, x, vec_splat(cephesv_p1, 2));
+  y  = vec_madd(y, x, vec_splat(cephesv_p1, 3));
+  y  = vec_madd(y, x, vec_splat(cephesv_p2, 0));
+  y  = vec_madd(y, x, vec_splat(cephesv_p2, 1));
+  y  = vec_madd(y, z, x);
+  y = vec_add(y, ((vector float) {1.0, 1.0, 1.0, 1.0}));
+
+  /* build 2^k by hand, by creating a IEEE754 float */
+  k  = vec_add(k, ((vector signed int) {127, 127, 127, 127}));
+  k  = vec_sl(k, ((vector unsigned int) {23, 23, 23, 23}));
+  fx = (vector float) k;
+
+  
+  /* put 2^k e^f together (fx = 2^k,  y = e^f) and we're done */
+  y = vec_madd(y, fx, zerov);	
+
+  /* special/range cleanup */
+  y = vec_sel(y, ((vector float) {eslINFINITY, eslINFINITY, eslINFINITY, eslINFINITY}), maxmask); /* exp(x) = inf for x > log(2^128)  */
+  y = vec_sel(y, zerov, minmask); /* exp(x) = 0   for x < log(2^-149) */
+  return y;
+}
+
+
+/*****************************************************************
+ * 2. Miscellaneous convenience functions
+ *****************************************************************/ 
+void
+esl_vmx_dump_vecfloat(FILE *fp, vector float v)
+{
+  float *p = (float *)&v;
+  printf("[%13.8g, %13.8g, %13.8g, %13.8g]", p[0], p[1], p[2], p[3]);
+}
+
+
+/*****************************************************************
+ * 3. Benchmark
+ *****************************************************************/
+#ifdef eslVMX_BENCHMARK
+
+/* gcc -maltivec -O3 -o vmx_benchmark -I . -L . -DeslVMX_BENCHMARK -DHAVE_VMX esl_vmx.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_stopwatch.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-N",        eslARG_INT,"10000000", NULL, NULL,  NULL,  NULL, NULL, "number of trials",                                 0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "benchmark driver for sse module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go      = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_STOPWATCH  *w       = esl_stopwatch_Create();
+  int             N       = esl_opt_GetInteger(go, "-N");
+  float           origx   = 2.0;
+  float           x       = origx;
+  vector float    xv      = { 2.0f, 2.0f, 2.0f, 2.0f };
+  int             i;
+
+  /* First, serial time. */
+  esl_stopwatch_Start(w);
+  for (i = 0; i < N; i++) { x = logf(x); x = expf(x); }
+  esl_stopwatch_Stop(w);
+  esl_stopwatch_Display(stdout, w, "# serial CPU time: ");
+ 
+  /* Vector time */
+  esl_stopwatch_Start(w);
+  for (i = 0; i < N; i++) { xv = esl_vmx_logf(xv); xv = esl_vmx_expf(xv); }
+  esl_stopwatch_Stop(w);
+  esl_stopwatch_Display(stdout, w, "# vector CPU time: ");
+
+  /* If you don't do something with x and xv, the compiler may optimize them away */
+  printf("%g  => many scalar logf,expf cycles => %g\n", origx, N, x);
+  printf("%g  => many vector logf,expf cycles => ", origx, N); esl_vmx_dump_vecfloat(stdout, xv); printf("\n");
+
+  esl_stopwatch_Destroy(w);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+#endif /*eslVMX_BENCHMARK*/
+
+
+/*****************************************************************
+ * 4. Unit tests
+ *****************************************************************/
+#ifdef eslVMX_TESTDRIVE
+
+#include "esl_getopts.h"
+#include "esl_random.h"
+
+/* utest_logf():  Test range/domain of logf */
+static void
+utest_logf(ESL_GETOPTS *go)
+{
+  vector float x;	 	             /* test input  */
+  union { vector float v; float x[4]; } r;   /* test output */
+  
+  /* Test IEEE754 specials: 
+   *    log(-inf) = NaN     log(x<0)  = NaN  log(-0)   = NaN
+   *    log(0)    = -inf    log(inf)  = inf  log(NaN)  = NaN
+   */
+  x = (vector float) {-eslINFINITY, -1.0, -0.0, 0.0};
+  r.v =  esl_vmx_logf(x); 
+  if (esl_opt_GetBoolean(go, "-v")) {
+    printf("logf");
+    esl_vmx_dump_vecfloat(stdout, x);    printf(" ==> ");
+    esl_vmx_dump_vecfloat(stdout, r.v);  printf("\n");
+  }
+  if (! isnan(r.x[0]))     esl_fatal("logf(-inf) should be NaN");
+  if (! isnan(r.x[1]))     esl_fatal("logf(-1)   should be NaN");
+  if (! isnan(r.x[2]))     esl_fatal("logf(-0)   should be NaN");
+  if (isinf(r.x[3]) != -1) esl_fatal("logf(0)    should be -inf");
+
+  x = (vector float) {eslINFINITY, eslNaN, FLT_MIN, FLT_MAX};
+  r.v = esl_vmx_logf(x);
+  if (esl_opt_GetBoolean(go, "-v")) {
+    printf("logf");
+    esl_vmx_dump_vecfloat(stdout, x);    printf(" ==> ");
+    esl_vmx_dump_vecfloat(stdout, r.v);  printf("\n");
+  }
+  if (isinf(r.x[0]) != 1)  esl_fatal("logf(inf)  should be inf");
+  if (! isnan(r.x[1]))     esl_fatal("logf(NaN)  should be NaN");
+
+}
+
+/* utest_expf():  Test range/domain of expf */
+static void
+utest_expf(ESL_GETOPTS *go)
+{
+  vector float x;		             /* test input  */
+  union { vector float v; float x[4]; } r;   /* test output */
+  
+  /* exp(-inf) = 0    exp(-0)  = 1   exp(0) = 1  exp(inf) = inf   exp(NaN)  = NaN */
+  x = (vector float) {-eslINFINITY, -0.0, 0.0, eslINFINITY};
+  r.v =  esl_vmx_expf(x); 
+  if (esl_opt_GetBoolean(go, "-v")) {
+    printf("expf");
+    esl_vmx_dump_vecfloat(stdout, x);    printf(" ==> ");
+    esl_vmx_dump_vecfloat(stdout, r.v);  printf("\n");
+  }
+  if (r.x[0] != 0.0f)      esl_fatal("expf(-inf) should be 0");
+  if (isinf(r.x[3]) != 1)  esl_fatal("expf(inf)  should be inf");
+
+  /* exp(NaN) = NaN    exp(large)  = inf   exp(-large) = 0  exp(1) = exp(1) */
+  x = (vector float) {eslNaN, 666.0, -666.0, 1.0};
+  r.v =  esl_vmx_expf(x); 
+  if (esl_opt_GetBoolean(go, "-v")) {
+    printf("expf");
+    esl_vmx_dump_vecfloat(stdout, x);    printf(" ==> ");
+    esl_vmx_dump_vecfloat(stdout, r.v);  printf("\n");
+  }
+  if (! isnan(r.x[0]))     esl_fatal("expf(NaN)      should be NaN");
+  if (isinf(r.x[1]) != 1)  esl_fatal("expf(large x)  should be inf");
+  if (r.x[2] != 0.0f)      esl_fatal("expf(-large x) should be 0");
+
+}
+
+/* utest_odds():  test accuracy of logf, expf on odds ratios,
+ * our main intended use.
+ */
+static void
+utest_odds(ESL_GETOPTS *go, ESL_RANDOMNESS *r)
+{
+  int    N            = esl_opt_GetInteger(go, "-N");
+  int    verbose      = esl_opt_GetBoolean(go, "-v");
+  int    very_verbose = esl_opt_GetBoolean(go, "--vv");
+  int    i;
+  float  p1, p2, odds;
+  union { vector float v; float x[4]; } r1;   
+  union { vector float v; float x[4]; } r2;   
+  float  scalar_r1, scalar_r2;
+  double  err1, maxerr1 = 0.0, avgerr1 = 0.0; /* errors on logf() */
+  double  err2, maxerr2 = 0.0, avgerr2 = 0.0; /* errors on expf() */
+
+  for (i = 0; i < N; i++)
+    {
+      p1    = esl_rnd_UniformPositive(r);
+      p2    = esl_rnd_UniformPositive(r);
+      odds  = p1 / p2;
+
+      if (odds == 0.0) esl_fatal("whoa, odds ratio can't be 0!\n");
+
+      r1.v      = esl_vmx_logf((vector float) {odds});  /* r1.x[z] = log(p1/p2) */
+      scalar_r1 = logf(odds);
+
+      err1       = (r1.x[0] == 0. && scalar_r1 == 0.) ? 0.0 : 2 * fabs(r1.x[0] - scalar_r1) / fabs(r1.x[0] + scalar_r1);
+      if (err1 > maxerr1) maxerr1 = err1;
+      avgerr1   += err1 / (float) N;
+      if (isnan(avgerr1)) esl_fatal("whoa, what?\n");
+
+      r2.v      = esl_vmx_expf(r1.v);        /* and back to odds */
+      scalar_r2 = expf(r1.x[0]);
+
+      err2       = (r2.x[0] == 0. && scalar_r2 == 0.) ? 0.0 : 2 * fabs(r2.x[0] - scalar_r2) / fabs(r2.x[0] + scalar_r2);
+      if (err2 > maxerr2) maxerr2 = err2;
+      avgerr2   += err2 / (float) N;
+
+      if (very_verbose) 
+	printf("%13.7g  %13.7g  %13.7g  %13.7g  %13.7g  %13.7g  %13.7g\n", odds, scalar_r1, r1.x[0], scalar_r2, r2.x[0], err1, err2);
+    }
+
+  if (avgerr1 > 1e-8) esl_fatal("average error on logf() is intolerable\n");
+  if (maxerr1 > 1e-6) esl_fatal("maximum error on logf() is intolerable\n");
+  if (avgerr2 > 1e-8) esl_fatal("average error on expf() is intolerable\n");
+  if (maxerr2 > 1e-6) esl_fatal("maximum error on expf() is intolerable\n");
+
+  if (verbose) {
+    printf("Average [max] logf() relative error in %d odds trials:  %13.8g  [%13.8g]\n", N, avgerr1, maxerr1);
+    printf("Average [max] expf() relative error in %d odds trials:  %13.8g  [%13.8g]\n", N, avgerr2, maxerr2);
+    printf("(random seed : %ld)\n", esl_randomness_GetSeed(r));
+  }
+}
+#endif /*eslVMX_TESTDRIVE*/
+
+
+
+
+/*****************************************************************
+ * 5. Test driver
+ *****************************************************************/
+
+#ifdef eslVMX_TESTDRIVE
+/* gcc -g -Wall -maltivec -o vmx_utest -I. -L. -DeslVMX_TESTDRIVE esl_vmx.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_vmx.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             0 },
+  { "-N",        eslARG_INT,  "10000",  NULL, NULL,  NULL,  NULL, NULL, "number of random test points",                     0 },
+  { "-s",        eslARG_INT,     "42",  NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                    0 },
+  { "-v",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "be verbose: show test report",                     0 },
+  { "--vv",      eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "be very verbose: show individual test samples",    0 },
+
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for vmx module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *r  = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+
+  utest_logf(go);
+  utest_expf(go);
+  utest_odds(go, r);
+
+  esl_randomness_Destroy(r);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+#endif /* eslVMX_TESTDRIVE*/
+
+
+
+
+/*****************************************************************
+ * 6. Example
+ *****************************************************************/
+
+#ifdef eslVMX_EXAMPLE
+/*::cexcerpt::vmx_example::begin::*/
+/* gcc -msse2 -g -Wall -o vmx_example -I. -L. -DeslVMX_EXAMPLE esl_vmx.c -leasel -lm
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_vmx.h"
+
+int
+main(int argc, char **argv)
+{
+  float        x;                           /* scalar input */
+  vector float xv;                          /* input vector */
+  union { vector float v; float x[4]; } rv;   /* result vector*/
+
+  x    = 2.0;
+  xv   = (vector float) {x};
+  rv.v = esl_vmx_logf(xv);
+  printf("logf(%f) = %f\n", x, rv.x[0]);
+  
+  rv.v = esl_vmx_expf(xv);
+  printf("expf(%f) = %f\n", x, rv.x[0]);
+
+  return 0;
+}
+/*::cexcerpt::vmx_example::end::*/
+#endif /*eslVMX_EXAMPLE*/
+#endif /*HAVE_VMX*/
+
+#ifndef HAVE_VMX
+
+/* If we don't have VMX compiled in, provide some nothingness to:
+ *   a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" 
+ *   b. prevent compiler from bitching about "empty compilation unit"
+ *   c. automatically pass the automated tests.
+ */
+#include "easel.h"
+
+void esl_vmx_DoAbsolutelyNothing(void) { return; }
+#if defined eslVMX_TESTDRIVE || defined eslVMX_EXAMPLE || eslVMX_BENCHMARK
+int main(void) { return 0; }
+#endif
+#endif
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
+/* Additionally, esl_sse_logf() and esl_sse_expf() are 
+ *  Copyright (C) 2007 Julien Pommier
+ *  Copyright (C) 1992 Stephen Moshier 
+ *
+ * These functions derived from zlib-licensed routines by
+ * Julien Pommier, http://gruntthepeon.free.fr/ssemath/. The
+ * zlib license:
+ */
+
+/* Copyright (C) 2007  Julien Pommier
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+
+/* In turn, Pommier had derived the logf() and expf() functions from
+ * serial versions in the Cephes math library. According to its
+ * readme, Cephes is "copyrighted by the author" and "may be used
+ * freely but it comes with no support or guarantee."  Cephes is
+ * available in NETLIB [http://www.netlib.org/cephes/]. NETLIB is
+ * widely considered to be a free scientific code repository, hough
+ * the copyright and license status of many parts, including Cephes,
+ * is not well defined in legal terms. We hereby note this, and have
+ * attached Moshier's copyright.
+ */
diff --git a/esl_vmx.h b/esl_vmx.h
new file mode 100644
index 0000000..516d39e
--- /dev/null
+++ b/esl_vmx.h
@@ -0,0 +1,171 @@
+#ifdef HAVE_VMX
+/* Vectorized routines for PowerPC, using Altivec.
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslVMX_INCLUDED
+#define eslVMX_INCLUDED
+
+#include "easel.h"
+
+#include <stdio.h>
+#ifndef __APPLE_ALTIVEC__
+#include <altivec.h>
+#endif
+
+extern vector float esl_vmx_logf(vector float x);
+extern vector float esl_vmx_expf(vector float x);
+extern void         esl_vmx_dump_vecfloat(FILE *fp, vector float v);
+
+/* Function:  esl_vmx_set_float()
+ * Synopsis:  Fills float vector with x.
+ *
+ * Purpose:   Sets all elements in the vector <float> to x.
+ */
+static inline vector float
+esl_vmx_set_float(float x)
+{
+  vector float v;
+  vector unsigned char p;
+
+  v = vec_lde(0, &x);
+  p = vec_lvsl(0, &x);
+  v = vec_perm(v, v, p);
+  v = vec_splat(v, 0);
+  return v;
+}
+
+/* Function:  esl_vmx_set_s16()
+ * Synopsis:  Fills short vector with x.
+ *
+ * Purpose:   Sets all elements in the vector <signed short> to x.
+ */
+static inline vector signed short
+esl_vmx_set_s16(signed short x)
+{
+  vector signed short v;
+  vector unsigned char p;
+
+  v = vec_lde(0, &x);
+  p = vec_lvsl(0, &x);
+  v = vec_perm(v, v, p);
+  v = vec_splat(v, 0);
+  return v;
+}
+
+/* Function:  esl_vmx_set_u8()
+ * Synopsis:  Fills byte vector with x.
+ *
+ * Purpose:   Sets all elements in the vector <unsigned char> to x.
+ */
+static inline vector unsigned char
+esl_vmx_set_u8(unsigned char x)
+{
+  vector unsigned char v;
+  vector unsigned char p;
+
+  v = vec_lde(0, &x);
+  p = vec_lvsl(0, &x);
+  v = vec_perm(v, v, p);
+  v = vec_splat(v, 0);
+  return v;
+}
+
+/* Function:  esl_vmx_hsum_float()
+ * Synopsis:  Returns sum of all floats.
+ *
+ * Purpose:   Resturns the sum of all elements in the vector <float>.
+ */
+static inline float
+esl_vmx_hsum_float(vector float v)
+{
+  float f;
+
+  v = vec_add(v, vec_sld(v, v, 4));
+  v = vec_add(v, vec_sld(v, v, 8));
+  vec_ste(v, 0, &f);
+
+  return f;
+}
+
+/* Function:  esl_vmx_hsum_s16()
+ * Synopsis:  Returns sum of all shorts.
+ *
+ * Purpose:   Resturns the sum of all elements in the vector <signed short>.
+ */
+static inline signed short
+esl_vmx_hsum_s16(vector signed short v)
+{
+  signed short s;
+
+  v = vec_add(v, vec_sld(v, v, 2));
+  v = vec_add(v, vec_sld(v, v, 4));
+  v = vec_add(v, vec_sld(v, v, 8));
+  vec_ste(v, 0, &s);
+
+  return s;
+}
+
+/* Function:  esl_vmx_hmax_float()
+ * Synopsis:  Returns max of all floats.
+ *
+ * Purpose:   Resturns the maximum element in the vector <float>.
+ */
+static inline float
+esl_vmx_hmax_float(vector float v)
+{
+  float f;
+
+  v = vec_max(v, vec_sld(v, v, 4));
+  v = vec_max(v, vec_sld(v, v, 8));
+  vec_ste(v, 0, &f);
+
+  return f;
+}
+
+/* Function:  esl_vmx_hmax_s16()
+ * Synopsis:  Returns max of all shorts.
+ *
+ * Purpose:   Resturns the maximum element in the vector <signed short>.
+ */
+static inline signed short
+esl_vmx_hmax_s16(vector signed short v)
+{
+  signed short s;
+
+  v = vec_max(v, vec_sld(v, v, 2));
+  v = vec_max(v, vec_sld(v, v, 4));
+  v = vec_max(v, vec_sld(v, v, 8));
+  vec_ste(v, 0, &s);
+
+  return s;
+}
+
+/* Function:  esl_vmx_hmax_u8()
+ * Synopsis:  Returns max of all bytes.
+ *
+ * Purpose:   Resturns the maximum element in the vector <unsigned char>.
+ */
+static inline unsigned char
+esl_vmx_hmax_u8(vector unsigned char v)
+{
+  unsigned char s;
+
+  v = vec_max(v, vec_sld(v, v, 1));
+  v = vec_max(v, vec_sld(v, v, 2));
+  v = vec_max(v, vec_sld(v, v, 4));
+  v = vec_max(v, vec_sld(v, v, 8));
+  vec_ste(v, 0, &s);
+
+  return s;
+}
+
+
+#endif /*eslVMX_INCLUDED*/
+#endif /*HAVE_VMX*/
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
diff --git a/esl_weibull.c b/esl_weibull.c
new file mode 100644
index 0000000..f47c2eb
--- /dev/null
+++ b/esl_weibull.c
@@ -0,0 +1,743 @@
+/* Statistical routines for Weibull distributions.
+ *
+ * Contents:
+ *   1. Routines for evaluating densities and distributions.
+ *   2. Generic API routines, for general interface w/ histogram module
+ *   3. Dumping plots to files
+ *   4. Sampling                    (augmentation: random)
+ *   5. ML fitting to complete data (augmentation: minimizer)
+ *   6. ML fitting to binned data   (augmentation: histogram, minimizer)
+ *   7. Test driver
+ *   8. Example 
+ *   9. Copyright and licence information.
+ *   
+ * To-do:
+ *    - Fit*() functions should return eslEINVAL on n=0, eslENORESULT
+ *      on failure due to small n. Compare esl_gumbel. xref J12/93.  
+ *      SRE, Wed Nov 27 11:13:48 2013
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_stats.h"
+#include "esl_vectorops.h"
+#include "esl_weibull.h"
+
+#ifdef eslAUGMENT_RANDOM
+#include "esl_random.h"
+#endif
+#ifdef eslAUGMENT_HISTOGRAM
+#include "esl_histogram.h"
+#endif
+#ifdef eslAUGMENT_MINIMIZER
+#include "esl_minimizer.h"
+#endif
+
+
+/****************************************************************************
+ * 1. Routines for evaluating densities and distributions
+ ****************************************************************************/ 
+/* mu <= x < infinity   
+ *    However, x=mu can be a problem: 
+ *    PDF-> 0 if tau > 1, infinity if tau < 1.
+ *
+ * lambda > 0
+ * tau > 0     [fat tail when tau < 1; inverse GEV when tau > 1; 
+ *              exponential when tau=1]
+ */
+
+
+/* Function:  esl_wei_pdf()
+ *
+ * Purpose:   Calculates the Weibull pdf $P(X=x)$, given quantile <x>,
+ *            offset <mu>, and parameters <lambda> and <tau>.
+ */
+double
+esl_wei_pdf(double x, double mu, double lambda, double tau)
+{
+  double y    = lambda * (x-mu);
+  double val;
+
+  if (x < mu)               return 0.;
+  if (x == mu) {
+    if      (tau <  1.) return eslINFINITY;
+    else if (tau >  1.) return 0.;
+    else if (tau == 1.) return lambda;
+  }
+
+  val = lambda * tau * 
+    exp((tau-1)*log(y)) *
+    exp(- exp(tau * log(y)));
+  return val;
+}
+
+/* Function:  esl_wei_logpdf()
+ *
+ * Purpose:   Calculates the log probability density function for the
+ *            Weibull, $\log P(X=x)$, given quantile <x>,
+ *            offset <mu>, and parameters <lambda> and <tau>.
+ */
+double
+esl_wei_logpdf(double x, double mu, double lambda, double tau)
+{
+  double y = lambda * (x-mu);
+  double val;
+
+  if (x < mu)               return -eslINFINITY;
+  if (x == mu) {
+    if      (tau <  1.) return  eslINFINITY; /* technically; but approaches it slowly*/
+    else if (tau >  1.) return -eslINFINITY; /* same as above, also a slow approach  */
+    else if (tau == 1.) return log(lambda);  /* special case, exponential */
+  }
+
+  val = log(tau) + tau*log(lambda) + (tau-1)*log(x-mu) - exp(tau * log(y));
+  return val;
+}
+
+/* Function:  esl_wei_cdf()
+ *
+ * Purpose:   Calculates the cumulative distribution function for the
+ *            Weibull, $P(X \leq x)$, given quantile <x>,
+ *            offset <mu>, and parameters <lambda> and <tau>.
+ */
+double
+esl_wei_cdf(double x, double mu, double lambda, double tau)
+{
+  double y   = lambda*(x-mu);
+  double tly = tau * log(y);
+
+  if      (x <= mu)                return 0.0;
+  else if (fabs(tly) < eslSMALLX1) return exp(tly); 
+  else                             return 1 - exp(-exp(tly));
+}
+
+/* Function:  esl_wei_logcdf()
+ *
+ * Purpose:   Calculates the log of the cumulative distribution function for a
+ *            Weibull, $P(X \leq x)$, given quantile <x>,
+ *            offset <mu>, and parameters <lambda> and <tau>.
+ */
+double
+esl_wei_logcdf(double x, double mu, double lambda, double tau)
+{
+  double y   = lambda*(x-mu);
+  double tly = tau * log(y);
+
+  if (x <= mu) return -eslINFINITY;
+
+  if      (fabs(tly) < eslSMALLX1)              return tly;
+  else if (fabs(exp(-exp(tly))) < eslSMALLX1)   return -exp(-exp(tly)); 
+  else                                          return log(1 - exp(-exp(tly)));
+}
+
+
+/* Function:  esl_wei_surv()
+ *
+ * Purpose:   Calculates the survivor function, $P(X>x)$ (that is, 1-CDF,
+ *            the right tail probability mass) for a Weibull
+ *            distribution, given quantile <x>, offset <mu>, and parameters
+ *            <lambda> and <tau>.
+ */
+double
+esl_wei_surv(double x, double mu, double lambda, double tau)
+{
+  double y   = lambda*(x-mu);
+  double tly = tau * log(y);
+
+  if (x <= mu) return 1.0;
+
+  return exp(-exp(tly));
+}
+
+/* Function:  esl_wei_logsurv()
+ *
+ * Purpose:   Calculates the log survivor function, $\log P(X>x)$ (that is, 
+ *            log(1-CDF), the right tail log probability mass) for a 
+ *            Weibull distribution, given quantile <x>, offset <mu>,
+ *            and parameters <lambda> and <tau>.
+ */
+double
+esl_wei_logsurv(double x, double mu, double lambda, double tau)
+{
+  double y   = lambda*(x-mu);
+  double tly = tau * log(y);
+
+  if (x <= mu) return 0.0;
+
+  return -exp(tly);
+}
+
+/* Function:  esl_wei_invcdf()
+ *
+ * Purpose:   Calculates the inverse CDF for a Weibull distribution
+ *            with parameters <mu>, <lambda>, and <tau>, returning
+ *            the quantile <x> at which the CDF is <p>, for $0<p<1$.
+ */
+double
+esl_wei_invcdf(double p, double mu, double lambda, double tau)
+{
+  return mu + 1/lambda * exp(1/tau * log(-log((1.-p))));
+}
+/*-------------------- end densities & distributions ------------------------*/
+
+
+
+
+/****************************************************************************
+ * 2. Generic API routines: for general interface w/ histogram module
+ ****************************************************************************/ 
+
+/* Function:  esl_wei_generic_pdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_wei_pdf()>, taking
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_wei_generic_pdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_wei_pdf(x, p[0], p[1], p[2]);
+}
+
+/* Function:  esl_wei_generic_cdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_wei_cdf()>, taking
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_wei_generic_cdf(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_wei_cdf(x, p[0], p[1], p[2]);
+}
+
+/* Function:  esl_wei_generic_surv()
+ *
+ * Purpose:   Generic-API wrapper around <esl_wei_surv()>, taking
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_wei_generic_surv(double x, void *params)
+{
+  double *p = (double *) params;
+  return esl_wei_surv(x, p[0], p[1], p[2]);
+}
+
+/* Function:  esl_wei_generic_invcdf()
+ *
+ * Purpose:   Generic-API wrapper around <esl_wei_invcdf()>, taking
+ *            a void ptr to a double array containing $\mu$, $\lambda$,
+ *            $\tau$ parameters.
+ */
+double
+esl_wei_generic_invcdf(double p, void *params)
+{
+  double *v = (double *) params;
+  return esl_wei_invcdf(p, v[0], v[1], v[2]);
+}
+/*------------------------ end generic API ---------------------------------*/
+
+
+
+/****************************************************************************
+ * 3. Dumping plots for files
+ ****************************************************************************/ 
+
+/* Function:  esl_wei_Plot()
+ *
+ * Purpose:   Plot some Weibull function <func> (for instance, <esl_wei_pdf()>)
+ *            for Weibull parameters <mu>, <lambda>, and <tau>, for a range of
+ *            quantiles x from <xmin> to <xmax> in steps of <xstep>;
+ *            output to an open stream <fp> in xmgrace XY input format.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslEWRITE> on any system write error, such as filled disk.
+ */
+int
+esl_wei_Plot(FILE *fp, double mu, double lambda, double tau,
+	     double (*func)(double x, double mu, double lambda, double tau), 
+	     double xmin, double xmax, double xstep)
+{
+  double x;
+  for (x = xmin; x <= xmax; x += xstep)
+    if (x > mu || tau >= 1.) /* don't try to plot at mu where pdf blows up */
+      if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda, tau)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "weibull plot write failed");
+  if (fprintf(fp, "&\n")                                          < 0) ESL_EXCEPTION_SYS(eslEWRITE, "weibull plot write failed");
+  return eslOK;
+}
+/*-------------------- end plot dumping routines ---------------------------*/
+
+
+
+
+
+/****************************************************************************
+ * 4. Sampling (augmentation: random)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_RANDOM
+
+/* Function:  esl_wei_Sample()
+ *
+ * Purpose:   Sample a Weibull random variate,
+ *            by the transformation method.
+ */
+double
+esl_wei_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau)
+{
+  double p;
+  p = esl_rnd_UniformPositive(r); 
+  return esl_wei_invcdf(p, mu, lambda, tau);
+} 
+#endif /*eslAUGMENT_RANDOM*/
+/*--------------------------- end sampling ---------------------------------*/
+
+
+/****************************************************************************
+ * 5. ML fitting to complete data (augmentation: minimizer)
+ ****************************************************************************/ 
+#ifdef eslAUGMENT_MINIMIZER
+/* Easel's conjugate gradient descent code allows a single void ptr to
+ * point to any necessary fixed data, so we put everything into one
+ * structure:
+ */
+struct wei_data {
+  double *x;	        /* data: n observed samples    */
+  int     n;		/* number of observed samples  */
+  double  mu;		/* mu is considered to be known, not fitted */
+};
+
+/* wei_func():
+ * Returns the negative log likelihood of a complete data sample,
+ * in the API of the conjugate gradient descent optimizer in esl_minimizer.
+ */
+static double
+wei_func(double *p, int nparam, void *dptr)
+{
+  double lambda, tau;
+  struct wei_data *data;
+  double logL;
+  int    i; 
+    
+  /* Unpack what the optimizer gave us.
+   */
+  lambda = exp(p[0]); /* see below for c.o.v. notes */
+  tau    = exp(p[1]);
+  data   = (struct wei_data *) dptr;
+
+  logL = 0.;
+  for (i = 0; i < data->n; i++)
+    {
+      if (tau < 1. && data->x[i] == data->mu) continue; /* hack: disallow infinity */
+      logL += esl_wei_logpdf(data->x[i], data->mu, lambda, tau);
+    }
+  return -logL;			/* goal: minimize NLL */
+}
+
+/* Function:  esl_wei_FitComplete()
+ *
+ * Purpose:   Given an array of <n> samples <x[0]..x[n-1>, fit
+ *            them to a stretched exponential distribution starting
+ *            at lower bound <mu> (all $x_i > \mu$), and 
+ *            return maximum likelihood parameters <ret_lambda>
+ *            and <ret_tau>.
+ *            
+ * Args:      x          - complete GEV-distributed data [0..n-1]
+ *            n          - number of samples in <x>
+ *            ret_mu     - RETURN: lower bound of the distribution (all x_i >= mu)
+ *            ret_lambda - RETURN: maximum likelihood estimate of lambda
+ *            ret_tau    - RETURN: maximum likelihood estimate of tau
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslENOHALT> if the fit doesn't converge.
+ *
+ * Xref:      STL9/136-137
+ */
+int
+esl_wei_FitComplete(double *x, int n, double *ret_mu,
+		    double *ret_lambda, double *ret_tau)
+{
+  struct wei_data data;
+  double p[2];			/* parameter vector                  */
+  double u[2];			/* max initial step size vector      */
+  double wrk[8];		/* 4 tmp vectors of length 2         */
+  double mean;
+  double mu, lambda, tau;      	/* initial param guesses             */
+  double tol = 1e-6;		/* convergence criterion for CG      */
+  double fx;			/* f(x) at minimum; currently unused */
+  int    status;
+
+  /* Make a good initial guess, based on exponential fit;
+   * set an arbitrary tau.
+   */
+  mu =  esl_vec_DMin(x, n);
+  esl_stats_DMean(x, n, &mean, NULL);
+  lambda = 1 / (mean - mu);
+  tau    = 0.9;
+
+  /* Load the data structure
+   */
+  data.x   = x;
+  data.n   = n;
+  data.mu  = mu;
+
+  /* Change of variables;
+   *   lambda > 0, so c.o.v.  lambda = exp^w,  w = log(lambda);
+   *   tau > 0, same c.o.v.
+   */
+  p[0] = log(lambda);		
+  p[1] = log(tau);
+
+  u[0] = 1.0;
+  u[1] = 1.0;
+
+  /* pass problem to the optimizer
+   */
+  status = esl_min_ConjugateGradientDescent(p, u, 2, 
+					    &wei_func, NULL,
+					    (void *)(&data),
+					    tol, wrk, &fx);
+  *ret_mu     = mu;
+  *ret_lambda = exp(p[0]);
+  *ret_tau    = exp(p[1]);
+  return status;
+}
+#endif /*eslAUGMENT_MINIMIZER*/
+
+/*****************************************************************
+ * 6. ML fitting to binned data (augmentation: histogram, minimizer)
+ *****************************************************************/
+
+#ifdef eslAUGMENT_HISTOGRAM
+#ifdef eslAUGMENT_MINIMIZER
+struct wei_binned_data {
+  ESL_HISTOGRAM *h;	/* contains the binned observed data        */
+  double  mu;		/* mu is considered to be known, not fitted */
+};
+
+/* wei_binned_func():
+ * Returns the negative log likelihood of a binned data sample,
+ * in the API of the conjugate gradient descent optimizer in esl_minimizer.
+ */
+static double
+wei_binned_func(double *p, int nparam, void *dptr)
+{
+  struct wei_binned_data *data = (struct wei_binned_data *) dptr;
+  ESL_HISTOGRAM          *h    = data->h;
+  double lambda, tau;
+  double logL;
+  double ai,bi;
+  int    i; 
+  double tmp;
+    
+  /* Unpack what the optimizer gave us.
+   */
+  lambda = exp(p[0]); /* see below for c.o.v. notes */
+  tau    = exp(p[1]);
+
+  logL = 0.;
+  for (i = h->cmin; i <= h->imax; i++)
+    {
+      if (h->obs[i] == 0) continue;
+
+      ai = esl_histogram_Bin2LBound(h,i);
+      bi = esl_histogram_Bin2UBound(h,i);
+      if (ai < data->mu) ai = data->mu;
+
+      tmp = esl_wei_cdf(bi, data->mu, lambda, tau) -
+            esl_wei_cdf(ai, data->mu, lambda, tau);
+
+      /* for cdf~1.0, numerical roundoff error can create tmp<0 by a
+       * teensy amount; tolerate that, but catch anything worse */
+      ESL_DASSERT1( (tmp + 1e-7 > 0.)); 
+      if (tmp <= 0.) return eslINFINITY;
+
+      logL += h->obs[i] * log(tmp);
+    }
+  return -logL;			/* goal: minimize NLL */
+}
+
+/* Function:  esl_wei_FitCompleteBinned()
+ *
+ * Purpose:   Given a histogram <g> with binned observations, where each
+ *            bin i holds some number of observed samples x with values from 
+ *            lower bound l to upper bound u (that is, $l < x \leq u$), and
+ *            <mu>, the known offset (minimum value) of the distribution;
+ *            return maximum likelihood parameters <ret_lambda>
+ *            and <ret_tau>.
+ *            
+ * Args:      x          - complete GEV-distributed data [0..n-1]
+ *            n          - number of samples in <x>
+ *            ret_mu     - lower bound of the distribution (all x_i > mu)
+ *            ret_lambda - RETURN: maximum likelihood estimate of lambda
+ *            ret_tau    - RETURN: maximum likelihood estimate of tau
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslENOHALT> if the fit doesn't converge.
+ *
+ * Xref:      STL9/136-137
+ */
+int
+esl_wei_FitCompleteBinned(ESL_HISTOGRAM *h, double *ret_mu,
+			  double *ret_lambda, double *ret_tau)
+{
+  struct wei_binned_data data;
+  double p[2];			/* parameter vector                  */
+  double u[2];			/* max initial step size vector      */
+  double wrk[8];		/* 4 tmp vectors of length 2         */
+  double mean;
+  double mu, lambda, tau;      	/* initial param guesses             */
+  double tol = 1e-6;		/* convergence criterion for CG      */
+  double fx;			/* f(x) at minimum; currently unused */
+  int    status;
+  int    i;
+  double ai;
+
+  /* Set the fixed mu.
+   * Make a good initial guess of lambda, based on exponential fit.
+   * Choose an arbitrary tau.
+   */
+  if      (h->is_tailfit) mu = h->phi;  /* all x > mu in this case */
+  else if (h->is_rounded) mu = esl_histogram_Bin2LBound(h, h->imin);
+  else                    mu = h->xmin; 
+
+  mean = 0.;
+  for (i = h->cmin; i <= h->imax; i++) 
+    { 
+      ai = esl_histogram_Bin2LBound(h, i);
+      ai += 0.5*h->w;		/* midpoint in bin */
+      mean += (double)h->obs[i] * ai;
+    }
+  mean  /= h->No;
+  lambda = 1 / (mean - mu);
+
+  tau    = 0.9;
+
+  /* load the data structure */
+  data.h   = h;
+  data.mu  = mu;
+
+  /* Change of variables;
+   *   lambda > 0, so c.o.v.  lambda = exp^w,  w = log(lambda);
+   *   tau > 0, same c.o.v.
+   */
+  p[0] = log(lambda);		
+  p[1] = log(tau);
+
+  u[0] = 1.0;
+  u[1] = 1.0;
+
+  /* pass problem to the optimizer
+   */
+  status = esl_min_ConjugateGradientDescent(p, u, 2, 
+					    &wei_binned_func, NULL,
+					    (void *)(&data),
+					    tol, wrk, &fx);
+  *ret_mu     = mu;
+  *ret_lambda = exp(p[0]);
+  *ret_tau    = exp(p[1]);
+  return status;
+}
+#endif /*eslAUGMENT_HISTOGRAM*/
+#endif /*eslAUGMENT_MINIMIZER*/
+/*--------------------------- end fitting ----------------------------------*/
+
+
+
+
+/****************************************************************************
+ * 7. Test driver
+ ****************************************************************************/ 
+#ifdef eslWEIBULL_TESTDRIVE
+/* Compile:
+   gcc -g -Wall -I. -I ~/src/easel -L ~/src/easel -o test -DeslWEIBULL_TESTDRIVE\
+      esl_weibull.c -leasel -lm
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_weibull.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                                  docgroup*/
+  { "-h",        eslARG_NONE,   FALSE, NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",                     0 }, 
+  { "-l",        eslARG_REAL,   "1.0", NULL, NULL,  NULL,  NULL, NULL, "set slope of sampled variates (lambda parameter) to <x> ", 0 }, 
+  { "-m",        eslARG_REAL,  "10.0", NULL, NULL,  NULL,  NULL, NULL, "set location of sampled variates (mu parameter) to <x>",   0 }, 
+  { "-n",        eslARG_INT,  "10000", NULL, NULL,  NULL,  NULL, NULL, "set # of sampled variates to <n>",                         0 }, 
+  { "-o",    eslARG_OUTFILE,     NULL, NULL, NULL,  NULL,  NULL, NULL, "output histogram to file <f>",                             0 }, 
+  { "-s",        eslARG_INT,      "0", NULL, NULL,  NULL,  NULL, NULL, "set random number seed to <n>",                            0 },
+  { "-t",        eslARG_REAL,   "0.7", NULL, NULL,  NULL,  NULL, NULL, "set shape of sampled variates (tau parameter) to <x>",     0 }, 
+  { "-v",        eslARG_NONE,   FALSE, NULL, NULL,  NULL,  NULL, NULL, "be more verbose in output",                                0 }, 
+  { "-w",        eslARG_REAL,   "0.1", NULL, NULL,  NULL,  NULL, NULL, "set width of histogram bins to <x>",                       0 }, 
+  { "--cdf",     eslARG_NONE,   FALSE, NULL, NULL,  NULL,  NULL, NULL, "dump plot of cumulative distribution",                     0 }, 
+  { "--logcdf",  eslARG_NONE,   FALSE, NULL, NULL,  NULL,  NULL, NULL, "dump plot of log cumulative distribution",                 0 }, 
+  { "--pdf",     eslARG_NONE,   FALSE, NULL, NULL,  NULL,  NULL, NULL, "dump plot of probability density",                         0 }, 
+  { "--logpdf",  eslARG_NONE,   FALSE, NULL, NULL,  NULL,  NULL, NULL, "dump plot of log probability density",                     0 }, 
+  { "--surv",    eslARG_NONE,   FALSE, NULL, NULL,  NULL,  NULL, NULL, "dump plot of survival P(s>x)",                             0 }, 
+  { "--logsurv", eslARG_NONE,   FALSE, NULL, NULL,  NULL,  NULL, NULL, "dump plot of log survival, log(P(s>x))",                   0 }, 
+  { "--xL",      eslARG_REAL,    NULL, NULL, NULL,  NULL,  NULL, NULL, "set minimum x-axis value on dumped plots to <x>",          0 }, 
+  { "--xH",      eslARG_REAL,    NULL, NULL, NULL,  NULL,  NULL, NULL, "set maximum x-axis value on dumped plots to <x>",          0 }, 
+  { "--xS",      eslARG_REAL,    NULL, NULL, NULL,  NULL,  NULL, NULL, "set x-axis increment value on dumped plots to <x>",        0 }, 
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options]";
+static char banner[] = "test driver for Easel's Weibull distribution module";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go   = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage);
+  ESL_RANDOMNESS *rng  = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));
+  double  mu           = esl_opt_GetReal   (go, "-m");
+  double  lambda       = esl_opt_GetReal   (go, "-l");
+  double  tau          = esl_opt_GetReal   (go, "-t");
+  int     n            = esl_opt_GetInteger(go, "-n");
+  double  binwidth     = esl_opt_GetReal   (go, "-w");
+  int     plot_cdf     = esl_opt_GetBoolean(go, "--cdf");
+  int     plot_logcdf  = esl_opt_GetBoolean(go, "--logcdf");
+  int     plot_pdf     = esl_opt_GetBoolean(go, "--pdf");
+  int     plot_logpdf  = esl_opt_GetBoolean(go, "--logpdf");
+  int     plot_surv    = esl_opt_GetBoolean(go, "--surv");
+  int     plot_logsurv = esl_opt_GetBoolean(go, "--logsurv");
+  int     be_verbose   = esl_opt_GetBoolean(go, "-v");
+  char   *plotfile     = esl_opt_GetString (go, "-o");
+  ESL_HISTOGRAM  *h    = NULL;
+  int     xmin_set     = esl_opt_IsOn(go, "--xL");
+  double  xmin         = xmin_set ? esl_opt_GetReal(go, "--xL") : mu;
+  int     xmax_set     = esl_opt_IsOn(go, "--xH");
+  double  xmax         = xmax_set ? esl_opt_GetReal(go, "--xH") : mu+40*(1./lambda);
+  int     xstep_set    = esl_opt_IsOn(go, "--xH");
+  double  xstep        = xstep_set ? esl_opt_GetReal(go, "--xS") : 0.1;
+  FILE   *pfp          = stdout;
+  double  emu, elambda, etau;
+  int     i;
+  double  x;
+  double *data;
+  int     ndata;
+
+  fprintf(stderr, "## %s\n", argv[0]);
+  fprintf(stderr, "#  rng seed = %" PRIu32 "\n", esl_randomness_GetSeed(rng));
+
+  if (be_verbose) printf("Parametric:  mu = %f   lambda = %f    tau = %f\n", mu, lambda, tau);
+
+  h = esl_histogram_CreateFull(mu, 100., binwidth);
+  if (plotfile && (pfp = fopen(plotfile, "w")) == NULL) ESL_EXCEPTION(eslFAIL, "Failed to open plotfile");
+
+  for (i = 0; i < n; i++)
+    {
+      x = esl_wei_Sample(rng, mu, lambda, tau);
+      esl_histogram_Add(h, x);
+    }
+  esl_histogram_GetData(h, &data, &ndata);
+
+  esl_wei_FitComplete(data, ndata, &emu, &elambda, &etau);
+  if (be_verbose) printf("Complete data fit:  mu = %f   lambda = %f   tau = %f\n", emu, elambda, etau);
+  if (fabs( (emu-mu)/mu ) > 0.01)             ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted mu > 1%\n");
+  if (fabs( (elambda-lambda)/lambda ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted lambda > 10%\n");
+  if (fabs( (etau-tau)/tau ) > 0.10)          ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted tau > 10%\n");
+
+  esl_wei_FitCompleteBinned(h, &emu, &elambda, &etau);
+  if (be_verbose)    printf("Binned data fit:  mu = %f   lambda = %f   tau = %f\n", emu, elambda, etau);
+  if (fabs( (emu-mu)/mu ) > 0.01)             ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted mu > 1%\n");
+  if (fabs( (elambda-lambda)/lambda ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted lambda > 10%\n");
+  if (fabs( (etau-tau)/tau ) > 0.10)          ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted lambda > 10%\n");
+
+  if (plot_pdf)     esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_pdf,     xmin, xmax, xstep);
+  if (plot_logpdf)  esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_logpdf,  xmin, xmax, xstep);
+  if (plot_cdf)     esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_cdf,     xmin, xmax, xstep);
+  if (plot_logcdf)  esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_logcdf,  xmin, xmax, xstep);
+  if (plot_surv)    esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_surv,    xmin, xmax, xstep);
+  if (plot_logsurv) esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_logsurv, xmin, xmax, xstep);
+
+  if (plotfile) fclose(pfp);
+  esl_histogram_Destroy(h);
+  esl_randomness_Destroy(rng);
+  esl_getopts_Destroy(go);
+
+  fprintf(stderr, "#  status = ok\n");
+  return 0;
+}
+#endif /*eslWEIBULL_TESTDRIVE*/
+
+/****************************************************************************
+ * 8. Example 
+ ****************************************************************************/ 
+#ifdef eslWEIBULL_EXAMPLE
+/*::cexcerpt::wei_example::begin::*/
+/* compile: 
+     gcc -g -Wall -I. -o example -DeslWEIBULL_EXAMPLE\
+       -DeslAUGMENT_HISTOGRAM -DeslAUGMENT_RANDOM -DeslAUGMENT_MINIMIZER\
+       esl_weibull.c esl_histogram.c esl_random.c esl_minimizer.c\
+       esl_stats.c esl_vectorops.c easel.c -lm
+ * run:     ./example
+ */
+#include <stdio.h>
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_histogram.h"
+#include "esl_weibull.h"
+
+int
+main(int argc, char **argv)
+{
+  double  mu        = -2.1;         
+  double  lambda    =  1.0;         
+  double  tau       =  0.8;	   
+  ESL_HISTOGRAM  *h = esl_histogram_CreateFull(mu, 100., 0.1);
+  ESL_RANDOMNESS *r = esl_randomness_Create(0);
+  int     n         = 10000; 
+  double  emu, elambda, etau;
+  double *data;
+  int     ndata;
+  double  x;
+  int     i;
+
+  for (i = 0; i < n; i++)
+    {
+      x    = esl_wei_Sample(r, mu, lambda, tau);
+      esl_histogram_Add(h, x);
+    }
+  esl_histogram_GetData(h, &data, &ndata);
+  
+  /* Plot the empirical (sampled) and expected survivals */
+  esl_histogram_PlotSurvival(stdout, h);
+  esl_wei_Plot(stdout, mu, lambda, tau,
+	       &esl_wei_surv,  h->xmin, h->xmax, 0.1);
+
+  /* ML fit to complete data, and plot fitted survival curve */
+  esl_wei_FitComplete(data, ndata, &emu, &elambda, &etau);
+  esl_wei_Plot(stdout, emu, elambda, etau,
+	       &esl_wei_surv,  h->xmin, h->xmax, 0.1);
+
+  /* ML fit to binned data, plot fitted survival curve  */
+  esl_wei_FitCompleteBinned(h, &emu, &elambda, &etau);
+  esl_wei_Plot(stdout, emu, elambda, etau,
+	       &esl_wei_surv,  h->xmin, h->xmax, 0.1);
+
+  esl_randomness_Destroy(r);
+  esl_histogram_Destroy(h);
+  return 0;
+}
+/*::cexcerpt::wei_example::end::*/
+#endif /*eslWEIBULL_EXAMPLE*/
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_weibull.h b/esl_weibull.h
new file mode 100644
index 0000000..b149dca
--- /dev/null
+++ b/esl_weibull.h
@@ -0,0 +1,53 @@
+/* Weibull distributions.
+ * 
+ * SRE, Tue Aug  9 10:48:35 2005 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslWEIBULL_INCLUDED
+#define eslWEIBULL_INCLUDED
+
+#ifdef eslAUGMENT_RANDOM
+#include <esl_random.h>
+#endif
+
+#ifdef eslAUGMENT_HISTOGRAM
+#include <esl_histogram.h>
+#endif
+
+extern double esl_wei_pdf    (double x, double mu, double lambda, double tau);
+extern double esl_wei_logpdf (double x, double mu, double lambda, double tau);
+extern double esl_wei_cdf    (double x, double mu, double lambda, double tau);
+extern double esl_wei_logcdf (double x, double mu, double lambda, double tau);
+extern double esl_wei_surv   (double x, double mu, double lambda, double tau);
+extern double esl_wei_logsurv(double x, double mu, double lambda, double tau);
+extern double esl_wei_invcdf (double p, double mu, double lambda, double tau);
+
+extern double esl_wei_generic_pdf   (double x, void *params);
+extern double esl_wei_generic_cdf   (double x, void *params);
+extern double esl_wei_generic_surv  (double x, void *params);
+extern double esl_wei_generic_invcdf(double p, void *params);
+
+extern int esl_wei_Plot(FILE *fp, double mu, double lambda, double tau,
+			double (*func)(double x, double mu, double lambda, double tau), 
+			double xmin, double xmax, double xstep);
+
+
+#ifdef eslAUGMENT_RANDOM
+extern double esl_wei_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau);
+#endif
+
+#ifdef eslAUGMENT_MINIMIZER
+extern int esl_wei_FitComplete(double *x, int n, double *ret_mu,
+			       double *ret_lambda, double *ret_tau);
+#ifdef eslAUGMENT_HISTOGRAM
+extern int esl_wei_FitCompleteBinned(ESL_HISTOGRAM *h, double *ret_mu,
+				     double *ret_lambda, double *ret_tau);
+#endif /*eslAUGMENT_HISTOGRAM*/
+#endif /*eslAUGMENT_MINIMIZER*/
+
+
+#endif /*eslWEIBULL_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_weibull.tex b/esl_weibull.tex
new file mode 100644
index 0000000..4b435a7
--- /dev/null
+++ b/esl_weibull.tex
@@ -0,0 +1,47 @@
+
+The Weibull distribution may be useful for fitting fat-tailed
+empirical distributions.
+
+In the literature, the Weibull is sometimes called a ``stretched
+exponential'' distribution when its shape parameter $\tau$ is less
+than 1. ``Stretched exponential'' distributions in the literature are
+either Weibull (PDF $ = \lambda \tau (\lambda x)^\tau exp\left[-
+(\lambda x)^tau \right]$ or a more simple PDF $\propto exp\left[-
+{\lambda(x-\mu)}^tau \right]$. Easel treats the latter form in the
+\eslmod{stretchexp} module.
+
+\subsection{Weibull densities}
+
+The probability density function (PDF) is:
+
+\begin{equation}
+P(X=x) = \lambda \tau [\lambda(x - \mu)]^{\tau-1} e^{- [\lambda(x-\mu)]^{\tau}}
+\label{eqn:weibull_pdf}
+\end{equation}
+
+The cumulative distribution function (CDF) is:
+
+\begin{equation}
+P(X \leq x) = 1 - e^{- [\lambda(x-\mu)]^{\tau}}
+\label{eqn:weibull_cdf}
+\end{equation}
+
+Variate $x$ ranges $\mu \leq x < \infty$. (However, for $\tau < 1$,
+the PDF goes to infinity at $x=\mu$, so evaluating at $x=\mu$ may not
+be desired.)
+
+Location parameter $\mu$ is unconstrained, $-\infty < \mu <
+\infty$. (Weibull distributions are usually represented without an
+explicit location parameter, implicitly assuming $\mu = 0$.)
+
+Scale parameter $\lambda$ is nonnegative, $\lambda >
+0$. (Alteratively, Weibull distributions are also sometimes
+represented with a scale parameter $b = \frac{1}{\lambda}$.)
+
+Shape parameter $\tau$ is nonnegative, $\tau > 0$. 
+
+
+
+
+
+
diff --git a/esl_workqueue.c b/esl_workqueue.c
new file mode 100644
index 0000000..24cb40f
--- /dev/null
+++ b/esl_workqueue.c
@@ -0,0 +1,564 @@
+/* Threaded work queue.
+ * 
+ * Contents:
+ *    1. Work queue routines
+ *    2. Examples.
+ *    3. Copyright and license.
+ * 
+ */
+#include "esl_config.h"
+
+#ifdef HAVE_PTHREAD
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pthread.h>
+
+#include "easel.h"
+#include "esl_workqueue.h"
+
+/*****************************************************************
+ *# 1. Work queue routines
+ *****************************************************************/ 
+
+/* Function:  esl_workqueue_Create()
+ * Synopsis:  Create a work queue object.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Creates an <ESL_WORK_QUEUE> object of <size>.  The
+ *            queues are used to handle objects <void *> that
+ *            are ready to be processed and that have been
+ *            processed by worker threads.
+ *
+ * Returns:   ptr to the new <ESL_WORK_QUEUE> object.
+ * 
+ * Throws:    <eslESYS> on allocation or initialization failure.
+ */
+ESL_WORK_QUEUE *
+esl_workqueue_Create(int size)
+{
+  int             i;
+  int             status;
+  ESL_WORK_QUEUE *queue = NULL;
+
+  ESL_ALLOC(queue, sizeof(ESL_WORK_QUEUE));
+
+  queue->readerQueue     = NULL;
+  queue->readerQueueCnt  = 0;
+  queue->readerQueueHead = 0;
+
+  queue->workerQueue     = NULL;
+  queue->workerQueueCnt  = 0;
+  queue->workerQueueHead = 0;
+
+  queue->queueSize       = size;
+  queue->pendingWorkers  = 0;
+
+  if (pthread_mutex_init(&queue->queueMutex, NULL) != 0)     ESL_XEXCEPTION(eslESYS, "mutex init failed");
+
+  if (pthread_cond_init(&queue->readerQueueCond, NULL) != 0) ESL_XEXCEPTION(eslESYS, "cond reader init failed");
+  if (pthread_cond_init(&queue->workerQueueCond, NULL) != 0) ESL_XEXCEPTION(eslESYS, "cond worker init failed");
+
+  ESL_ALLOC(queue->readerQueue, sizeof(void *) * size);
+  ESL_ALLOC(queue->workerQueue, sizeof(void *) * size);
+
+  for (i = 0; i < queue->queueSize; ++i)
+    {
+      queue->readerQueue[i] = NULL;
+      queue->workerQueue[i] = NULL;
+    }
+
+  return queue;
+
+ ERROR:
+  esl_workqueue_Destroy(queue);
+  return NULL;
+}
+
+/* Function:  esl_workqueue_Destroy()
+ * Synopsis:  Destroys an <ESL_WORK_QUEUE> object.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Frees an <ESL_WORK_QUEUE> object.  
+ *
+ *            The calling routine is responsible for freeing the
+ *            memory of the actual queued objects.
+ *
+ * Returns:   void
+ */
+void 
+esl_workqueue_Destroy(ESL_WORK_QUEUE *queue)
+{
+  if (queue == NULL) return;
+
+  pthread_mutex_destroy (&queue->queueMutex);
+  pthread_cond_destroy  (&queue->readerQueueCond);
+  pthread_cond_destroy  (&queue->workerQueueCond);
+
+  if (queue->readerQueue != NULL) free(queue->readerQueue);
+  if (queue->workerQueue != NULL) free(queue->workerQueue);
+
+  free(queue);
+}
+
+/* Function:  esl_workqueue_Init()
+ * Synopsis:  Adds a queued object to the producers list.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Added a work object <void> to the producers list checking for
+ *            any errors.
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslESYS> if thread synchronization fails somewhere.
+ *            <eslEINVAL> if something's wrong with <queue> or <ptr>.
+ */
+int esl_workqueue_Init(ESL_WORK_QUEUE *queue, void *ptr)
+{
+  int cnt;
+  int inx;
+
+  int queueSize;
+
+  if (queue == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid queue object");
+  if (ptr == NULL)   ESL_EXCEPTION(eslEINVAL, "Invalid reader object");
+
+  if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed");
+
+  queueSize = queue->queueSize;
+
+  /* check to make sure we won't overflow */
+  cnt = queue->readerQueueCnt;
+  if (cnt >= queueSize) ESL_EXCEPTION(eslEINVAL, "Reader queue overflow");
+
+  inx = (queue->readerQueueHead + cnt) % queueSize;
+  queue->readerQueue[inx] = ptr;
+
+  ++queue->readerQueueCnt;
+  if (cnt == 0)
+    {
+      if (pthread_cond_signal (&queue->readerQueueCond) != 0) ESL_EXCEPTION(eslESYS, "cond signal failed");
+    }
+
+  if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed");
+
+  return eslOK;
+}
+
+/* Function:  esl_workqueue_Remove()
+ * Synopsis:  Removes a queued object from the producers list.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Removes a queued object from the producers list.
+ *
+ *            A object <void> that has already been consumed by a worker
+ *            is removed the the producers list.  If there are no empty
+ *            objects, a <obj> is set to NULL.
+ *
+ *            The pointer to the object is returned in the obj arguement.
+ *
+ * Returns:   <eslOK>  on success.
+ *            <eslEOD> if no objects are in the queue.
+ *
+ * Throws:    <eslESYS> if thread synchronization fails somewhere.
+ *            <eslEINVAL> if something's wrong with <queue>.
+ */
+int 
+esl_workqueue_Remove(ESL_WORK_QUEUE *queue, void **obj)
+{
+  int inx;
+  int status = eslEOD;
+
+  if (obj == NULL)   ESL_EXCEPTION(eslEINVAL, "Invalid object pointer");
+  if (queue == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid queue object");
+
+  if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed");
+
+  /* check if there are any items on the readers list */
+  *obj = NULL;
+  if (queue->readerQueueCnt > 0)
+    {
+      inx = (queue->readerQueueHead + queue->readerQueueCnt) % queue->queueSize;
+      *obj = queue->readerQueue[inx];
+      queue->readerQueue[inx] = NULL;
+      --queue->readerQueueCnt;
+      status = eslOK;
+    }
+
+  if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed");
+
+  return status;
+}
+
+/* Function:  esl_workqueue_Complete()
+ * Synopsis:  Signals the end of the queue.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Signal the end of the queue.  If there are any threads
+ *            waiting on an object, signal them to wake up and complete
+ *            their processing.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslESYS> if thread synchronization fails somewhere.
+ *            <eslEINVAL> if something's wrong with <queue>.
+ */
+int 
+esl_workqueue_Complete(ESL_WORK_QUEUE *queue)
+{
+  if (queue == NULL)                                ESL_EXCEPTION(eslEINVAL, "Invalid queue object");
+  if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS,   "mutex lock failed");
+
+  if (queue->pendingWorkers != 0)
+    {
+      if (pthread_cond_broadcast (&queue->workerQueueCond) != 0) ESL_EXCEPTION(eslESYS, "broadcast failed");
+    }
+
+  if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed");
+
+  return eslOK;
+}
+
+/* Function:  esl_workqueue_Reset()
+ * Synopsis:  Reset the queue for another run.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Reset the queue for another run.  This is done by moving
+ *            all the queued object to the reader's list (i.e. producer).
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslESYS> if thread synchronization fails somewhere.
+ *            <eslEINVAL> if something's wrong with <queue>.
+ */
+int 
+esl_workqueue_Reset(ESL_WORK_QUEUE *queue)
+{
+  int inx;
+  int queueSize;
+
+  if (queue == NULL)                                ESL_EXCEPTION(eslEINVAL, "Invalid queue object");
+  if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS,   "mutex lock failed");
+
+  queueSize = queue->queueSize;
+
+  /* move all buffers back to the reader queue */
+  while (queue->workerQueueCnt > 0) 
+    {
+      inx = (queue->readerQueueHead + queue->readerQueueCnt) % queueSize;
+      queue->readerQueue[inx] = queue->workerQueue[queue->workerQueueHead];
+      ++queue->readerQueueCnt;
+
+      queue->workerQueue[queue->workerQueueHead] = NULL;
+      queue->workerQueueHead = (queue->workerQueueHead + 1) % queueSize;
+      --queue->workerQueueCnt;
+    }
+
+  queue->pendingWorkers = 0;
+
+  if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed");
+
+  return eslOK;
+}
+
+/* Function:  esl_workqueue_ReaderUpdate()
+ * Synopsis:  Producer routine.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   The producer (i.e. Reader) places an object, that is
+ *            ready to be processed by a worker on the consumers
+ *            (i.e. Workers) work queue.
+ *
+ *            If the <in> object is not null, it is placed on the
+ *            workers queue.  If there are any workers waiting for
+ *            an object, they are signaled to wake up.
+ *
+ *            If the reader routine has supplied an <out> pointer,
+ *            an object that has already been processed by a worker,
+ *            is placed in <out> so the object can be made ready
+ *            for another worker thread.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslESYS> if thread synchronization fails somewhere.
+ *            <eslEINVAL> if something's wrong with <queue>.
+ */
+int esl_workqueue_ReaderUpdate(ESL_WORK_QUEUE *queue, void *in, void **out)
+{
+  int inx;
+  int queueSize;
+
+  if (queue == NULL)                                ESL_EXCEPTION(eslEINVAL, "Invalid queue object");
+  if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS,   "mutex lock failed");
+
+  queueSize = queue->queueSize;
+
+  /* check if the caller is queuing up an item */
+  if (in != NULL)
+    {
+
+      /* check to make sure we don't overflow */
+      if (queue->workerQueueCnt >= queueSize) ESL_EXCEPTION(eslEINVAL, "Work queue overflow");
+
+      inx = (queue->workerQueueHead + queue->workerQueueCnt) % queueSize;
+      queue->workerQueue[inx] = in;
+      ++queue->workerQueueCnt;
+
+      if (queue->pendingWorkers != 0)
+	{
+	  if (pthread_cond_broadcast (&queue->workerQueueCond) != 0) ESL_EXCEPTION(eslESYS, "broadcast failed");
+	}
+    }
+
+  /* check if the caller is waiting for a queued item */
+  if (out != NULL)
+    {
+
+      /* wait for a processed buffers to be returned */
+      while (queue->readerQueueCnt == 0) 
+	{
+	  if (pthread_cond_wait (&queue->readerQueueCond, &queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "cond wait failed");
+	}
+
+      inx = queue->readerQueueHead;
+      *out = queue->readerQueue[inx];
+      queue->readerQueue[inx] = NULL;
+      queue->readerQueueHead = (queue->readerQueueHead + 1) % queueSize;
+      --queue->readerQueueCnt;
+    }
+
+  if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed");
+
+  return eslOK;
+}
+
+/* Function:  esl_workqueue_WorkerUpdate()
+ * Synopsis:  Consumer routine.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   The consumer (i.e. Worker) places an object that has
+ *            been processed on the producers (i.e. Readers) queue.
+ *
+ *            If the <in> object is not null, it is placed on the
+ *            readers queue.  If the reader is waiting for an object, 
+ *            it is signaled it to wake up.
+ *
+ *            If the worker routine has supplied an <out> pointer,
+ *            an object that is ready for processing by a worker,
+ *            is placed in <out> so the worker thread can continue.
+ *
+ * Returns:   <eslOK> on success.
+ *
+ * Throws:    <eslESYS> if thread synchronization fails somewhere.
+ *            <eslEINVAL> if something's wrong with <queue>.
+ */
+int esl_workqueue_WorkerUpdate(ESL_WORK_QUEUE *queue, void *in, void **out)
+{
+  int cnt;
+  int inx;
+  int queueSize;
+  int status;
+
+  if (queue == NULL)                                ESL_XEXCEPTION(eslEINVAL, "Invalid queue object");
+  if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_XEXCEPTION(eslESYS,   "mutex lock failed");
+
+  queueSize = queue->queueSize;
+
+  /* check if the caller is queuing up an item */
+  if (in != NULL)
+    {
+
+      /* check to make sure we don't overflow */
+      if (queue->readerQueueCnt >= queueSize) ESL_XEXCEPTION(eslEINVAL, "Reader queue overflow");
+
+      inx = (queue->readerQueueHead + queue->readerQueueCnt) % queueSize;
+      queue->readerQueue[inx] = in;
+      cnt = queue->readerQueueCnt++;
+      if (cnt == 0)
+	{
+	  if (pthread_cond_signal (&queue->readerQueueCond) != 0) ESL_XEXCEPTION(eslESYS, "cond signal failed");
+	}
+    }
+
+  /* check if the caller is waiting for a queued item */
+  if (out != NULL)
+    {
+
+      if (queue->workerQueueCnt == 0)
+	{
+	  /* wait for a processed buffers to be returned */
+	  ++queue->pendingWorkers;
+	  while (queue->workerQueueCnt == 0)
+	    {
+	      if (pthread_cond_wait (&queue->workerQueueCond, &queue->queueMutex) != 0) ESL_XEXCEPTION(eslESYS, "cond wait failed");
+	    }
+	  --queue->pendingWorkers;
+	}
+
+      inx = queue->workerQueueHead;
+      *out = queue->workerQueue[inx];
+      queue->workerQueue[inx] = NULL;
+      queue->workerQueueHead = (queue->workerQueueHead + 1) % queueSize;
+      --queue->workerQueueCnt;
+    }
+
+  if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_XEXCEPTION(eslESYS, "mutex unlock failed");
+  return eslOK;
+
+ ERROR:
+  if (out) *out = NULL;
+  return status;
+}
+
+/* Function:  esl_workqueue_Dump()
+ * Synopsis:  Print the contents of the queues.
+ * Incept:    MSF, Thu Jun 18 11:51:39 2009
+ *
+ * Purpose:   Print the contents of the queues and their pointers.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int esl_workqueue_Dump(ESL_WORK_QUEUE *queue)
+{
+  int i;
+
+  if (queue == NULL)                                ESL_EXCEPTION(eslEINVAL, "Invalid queue object");
+  if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS,   "mutex lock failed");
+
+  printf ("Reader head: %2d  count: %2d\n", queue->readerQueueHead, queue->readerQueueCnt);
+  printf ("Worker head: %2d  count: %2d\n", queue->workerQueueHead, queue->workerQueueCnt);
+  for (i = 0; i < queue->queueSize; ++i)
+    {
+      printf ("  %2d:  %p  %p\n", i, queue->readerQueue[i], queue->workerQueue[i]);
+    }
+  printf ("Pending: %2d\n\n", queue->pendingWorkers);
+
+  if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed");
+
+  return eslOK;
+}
+
+/*****************************************************************
+ * 2. Example
+ *****************************************************************/
+
+#ifdef eslWORKQUEUE_EXAMPLE
+#include "easel.h"
+#include "esl_threads.h"
+#include "esl_workqueue.h"
+
+typedef struct {
+  char             id;
+  ESL_WORK_QUEUE  *queue;
+} WORK_INFO;
+
+/* gcc --std=gnu99 -g -Wall -pthread -o esl_workqueue_example -I. -DeslWORKQUEUE_EXAMPLE esl_workqueue.c easel.c */
+static void 		
+worker_thread(void *data)
+{
+  ESL_THREADS *thr  = (ESL_THREADS *) data;
+  WORK_INFO   *info = NULL;
+  int          idx;
+
+  int         *obj;
+
+  esl_threads_Started(thr, &idx);
+  
+  info = (WORK_INFO *) esl_threads_GetData(thr, idx);
+  printf("THREAD %c: ready\n", info->id);
+
+  esl_workqueue_WorkerUpdate(info->queue, NULL, (void *) &obj);
+  while (*obj > 0)
+    {
+      printf("THREAD %c: processing %d\n", info->id, *obj);
+      esl_workqueue_WorkerUpdate(info->queue, obj, (void *) &obj);
+    }
+
+  printf("THREAD %c: done\n", info->id);
+
+  esl_threads_Finished(thr, idx);
+  return;
+}
+
+int
+main(void)
+{
+  int            i;
+  int            ncpu    = 4;
+  int            iter    = 25;
+  WORK_INFO     *worker  = NULL;
+
+  ESL_THREADS    *thr    = NULL;
+  ESL_WORK_QUEUE *queue  = NULL;
+
+  int            *objs   = NULL;
+  int            *obj;
+
+  objs   = malloc(sizeof(int) * ncpu * 2);
+  worker = malloc(sizeof(WORK_INFO) * ncpu);
+
+  thr = esl_threads_Create(&worker_thread);
+
+  /* Create a work queue that is able to hold two items per thread.
+   * The idea is that while one object is being processed by a
+   * worker thread, another item is being readied.  So, when the
+   * worker thread has completed processing its current object,
+   * its next object to processes is hopefully waiting.
+   */
+  queue = esl_workqueue_Create(ncpu * 2);
+  for (i = 0; i < ncpu * 2; i++)
+    {
+      objs[i] = 0;
+      esl_workqueue_Init(queue, &objs[i]);
+    }
+
+  for (i = 0; i < ncpu; i++)
+    {
+      worker[i].id    = 'A' + i;
+      worker[i].queue = queue;
+      esl_threads_AddThread(thr, (void *) &worker[i]);
+    }
+
+  esl_threads_WaitForStart (thr);
+
+  /* For N number of iterations, get an object that has been
+   * processed, i.e. on the readers input queue and place it
+   * on the ready queue.
+   */
+  esl_workqueue_ReaderUpdate(queue, NULL, (void **) &obj);
+  for (i = 1; i <= iter; ++i)
+    {
+      *obj = i;
+      printf("Item %d is ready to be processed\n", *obj);
+      esl_workqueue_ReaderUpdate(queue, obj, (void **) &obj);
+    }
+
+  /* put zeros on the queues to signal the worker that we are done */
+  for (i = 0; i < ncpu; ++i)
+    {
+      *obj = 0;
+      esl_workqueue_ReaderUpdate(queue, obj, (void **) &obj);
+    }
+
+  /* The worker threads now run their work. */
+  esl_threads_WaitForFinish(thr);
+  esl_threads_Destroy(thr);
+
+  esl_workqueue_Destroy(queue);
+
+  free(worker);
+  free(objs);
+
+  return eslOK;
+}
+#endif /*eslWORKQUEUE_EXAMPLE*/
+#endif /* HAVE_PTHREAD */
+
+/*****************************************************************  
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
diff --git a/esl_workqueue.h b/esl_workqueue.h
new file mode 100644
index 0000000..a90caf2
--- /dev/null
+++ b/esl_workqueue.h
@@ -0,0 +1,44 @@
+/* Simple threaded work queue using POSIX threads.
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslWORKQUEUE_INCLUDED
+#define eslWORKQUEUE_INCLUDED
+
+typedef struct {
+  pthread_mutex_t  queueMutex;          /* mutex for queue serialization                           */
+  pthread_cond_t   readerQueueCond;     /* condition variable used to wake up the producer         */
+  pthread_cond_t   workerQueueCond;     /* condition variable used to wake up the consumers        */
+
+  void           **readerQueue;         /* list of objects the the workers have completed          */
+  int              readerQueueCnt;      /* number of objects in the queue                          */
+  int              readerQueueHead;     /* first object in the queue                               */
+
+  void           **workerQueue;         /* list of objects ready to be processed by worker threads */
+  int              workerQueueCnt;      /* number of objects in the queue                          */
+  int              workerQueueHead;     /* first object in the queue                               */
+
+  int              queueSize;           /* max number of items a queue will hold                   */
+  int              pendingWorkers;      /* number of consumers waiting for work                    */
+} ESL_WORK_QUEUE;
+
+extern ESL_WORK_QUEUE *esl_workqueue_Create(int size);
+extern void            esl_workqueue_Destroy(ESL_WORK_QUEUE *queue);
+
+extern int esl_workqueue_Init    (ESL_WORK_QUEUE *queue, void *ptr);
+extern int esl_workqueue_Complete(ESL_WORK_QUEUE *queue);
+extern int esl_workqueue_Reset   (ESL_WORK_QUEUE *queue);
+
+extern int esl_workqueue_Remove(ESL_WORK_QUEUE *queue, void **obj);
+
+extern int esl_workqueue_ReaderUpdate(ESL_WORK_QUEUE *queue, void *in, void **out);
+extern int esl_workqueue_WorkerUpdate(ESL_WORK_QUEUE *queue, void *in, void **out);
+
+extern int esl_workqueue_Dump(ESL_WORK_QUEUE *queue);
+
+#endif /*eslWORKQUEUE_INCLUDED*/
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_wuss.c b/esl_wuss.c
new file mode 100644
index 0000000..55ae24c
--- /dev/null
+++ b/esl_wuss.c
@@ -0,0 +1,872 @@
+/* RNA secondary structure markup in WUSS notation.
+ *
+ *    <>  : base pairs in stem-loops, i.e. <<<___>>>
+ *    ()  : base pairs in helices enclosing multifurcation of all <> stems
+ *    []  : base pairs in helices enclosing multifurc of at least one () helix
+ *    {}  : base pairs in helices enclosing even deeper multifurcations
+ *    
+ *    _   : (i.e. underscore) nucleotide in a hairpin loop
+ *    -   : (i.e. dash) nucleotide in a bulge or interior loop
+ *    ,   : nucleotide in a multifurcation loop (mnemonic: "stem1, stem2," )  
+ *    :   : nucleotide in external single strand
+ *    
+ *    Aa  : (and Bb, Cc, etc) pseudoknotted base pairs, upper case on left, lower case on right.
+ *
+ *  and in alignments of a seq to an RNA structure profile, as in Infernal:
+ *    .   : insertion relative to a known consensus structure
+ *    ~   : nucleotide is unaligned to a structure profile, because of local structure alignment
+ *
+ */
+#include "esl_config.h"
+
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#include "esl_stack.h"
+#include "esl_vectorops.h"
+#include "esl_wuss.h"
+
+/* Function:  esl_wuss2ct()
+ * Incept:    SRE, Tue Feb 15 08:44:54 2005 [St. Louis]
+ *
+ * Purpose:   Given a secondary structure string <ss>, <0..len-1>,
+ *            in WUSS notation, convert it to a CT array, <1..len>,
+ *            in <ct>. Caller provides a <ct> allocated for at least 
+ *            <len+1> ints. <ct[i]> is the position that residue i
+ *            base pairs to, or 0 if i is unpaired. <ct[0]> is undefined
+ *            (but if you care: it is set to 0).
+ *            
+ *            WUSS notation is interpreted loosely here, as input
+ *            WUSS.  Any matching bracket pair or upper/lower case
+ *            alphabetic pair is interpreted as a base pair; any other
+ *            WUSS annotation is interpreted as unpaired.
+ *            
+ * Returns:   <eslOK> on success. Returns <eslESYNTAX> if the WUSS
+ *            string isn't valid.
+ *            
+ * Throws:    <eslEMEM> on allocation failure.           
+ */
+int 
+esl_wuss2ct(char *ss, int len, int *ct)
+{
+  ESL_STACK *pda[27];     /* 1 secondary structure + up to 26 levels of pk's */
+  int        i;
+  int        pos, pair;
+  int        status;      /* success or failure return status */
+
+ /* Initialization: always initialize the main pda (0);
+  * we'll init the pk pda's on demand.
+  */
+  for (i = 1; i <= 26; i++) pda[i] = NULL;
+  if ((pda[0] = esl_stack_ICreate()) == NULL) goto FINISH;
+
+  for (pos = 0; pos <= len; pos++) ct[pos] = 0;
+
+  for (pos = 1; pos <= len; pos++)
+    {
+      if (!isprint((int) ss[pos-1]))  /* armor against garbage */
+	{ status = eslESYNTAX; goto FINISH; }
+
+      /* left side of a pair: push position onto stack 0 (pos = 1..L) */
+      else if (ss[pos-1] == '<' ||
+	       ss[pos-1] == '(' ||
+	       ss[pos-1] == '[' ||
+	       ss[pos-1] == '{')
+	{
+	  if ((status = esl_stack_IPush(pda[0], pos)) != eslOK) goto FINISH;
+	}
+      
+      /* right side of a pair; resolve pair; check for agreement */
+      else if (ss[pos-1] == '>' || 
+	       ss[pos-1] == ')' ||
+	       ss[pos-1] == ']' ||
+	       ss[pos-1] == '}')
+        {
+          if (esl_stack_IPop(pda[0], &pair) == eslEOD)
+            { status = eslESYNTAX; goto FINISH;} /* no closing bracket */
+          else if ((ss[pair-1] == '<' && ss[pos-1] != '>') ||
+		   (ss[pair-1] == '(' && ss[pos-1] != ')') ||
+		   (ss[pair-1] == '[' && ss[pos-1] != ']') ||
+		   (ss[pair-1] == '{' && ss[pos-1] != '}'))
+	    { status = eslESYNTAX; goto FINISH; }  /* brackets don't match */
+	  else
+	    {
+              ct[pos]  = pair;
+              ct[pair] = pos;
+            }
+        }
+                                /* same stuff for pseudoknots */
+      else if (isupper((int) ss[pos-1])) 
+	{
+	  /* Create the PK stacks on demand.
+	   */
+	  i = ss[pos-1] - 'A' + 1;
+	  if (pda[i] == NULL) 
+	    if ((pda[i] = esl_stack_ICreate()) == NULL) 
+	      { status = eslEMEM; goto FINISH; }
+
+	  if ((status = esl_stack_IPush(pda[i], pos)) != eslOK) goto FINISH;
+	}
+      else if (islower((int) ss[pos-1])) 
+	{
+	  i = ss[pos-1] - 'a' + 1;
+	  if (pda[i] == NULL || 
+	      esl_stack_IPop(pda[i], &pair) == eslEOD)
+            { status = eslESYNTAX; goto FINISH;}
+          else
+            {
+              ct[pos]  = pair;
+              ct[pair] = pos;
+            }
+	}
+      else if (strchr(":,_-.~", ss[pos-1]) == NULL)
+	{ status = eslESYNTAX; goto FINISH; } /* bogus character */
+    }
+  status = eslOK;
+
+ FINISH:
+  for (i = 0; i <= 26; i++)
+    if (pda[i] != NULL) 
+      { /* nothing should be left on stacks */
+	if (esl_stack_ObjectCount(pda[i]) != 0)
+	  status = eslESYNTAX;
+	esl_stack_Destroy(pda[i]);
+      }
+  return status;
+}
+
+
+/* Function:  esl_ct2wuss()
+ * Incept:    SRE, Wed Feb 16 11:22:53 2005 [St. Louis]
+ *
+ * Purpose:   Convert a CT array <ct> for <n> residues (1..n) to a WUSS
+ *            format string <ss>. <ss> must be allocated for at least
+ *            n+1 chars (+1 for the terminal NUL). 
+ *
+ *            ER, Sat Aug 18 13:22:03 EDT 2012 
+ *            esl\_ct2wuss() extended to deal with pseudoknots structures.
+ *            Pseudoknots are annotated as AA...aa, BB...bb,..., ZZ..zz.
+ *            Attemting to convert a <ct> that requires more letters
+ *            than [A-Z] will return an <eslEINVAL> error.
+ *
+ *            Attempting to convert a <ct> that involves triplet interactions
+ *            will return an <eslEINVAL> error.
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEINCONCEIVABLE> on internal failure.
+ */
+int
+esl_ct2wuss(int *ct, int n, char *ss)
+{
+  int        rb[26];                /* array that delimits the right bound of a pseudoknot character */
+  ESL_STACK *pda    = NULL;         /* stack for "main" secondary structure */
+  ESL_STACK *auxpk  = NULL;	    /* aux stack for pseudoknot */
+  ESL_STACK *auxss  = NULL;	    /* aux stack for single stranded */
+  int       *cct    = NULL;         /* copy of ct vector */
+  int        nfaces;                /* number of faces in a cWW structure */
+  int        minface;               /* max depth of faces in a cWW structure */
+  int        leftbound, rightbound; /* left and right bound to find basepairs belonging to a given pseudoknot */
+  int        xpk = 0;               /* number of pseudoknot chararactes used */
+  int        npk = 0;               /* number of pseudoknots */
+  int        npairs = 0;            /* total number of basepairs */
+  int        npairs_reached = 0;    /* number of basepairs found so far */
+  int        found_partner;         /* true if we've found left partner of a given base in stack pda */
+  int        i,j,k;                 /* sequence indices */
+  int        x;                     /* index for pseudoknot characters */
+  int        status = eslEMEM;	    /* exit status 'til proven otherwise */
+
+  /* total number of basepairs */
+  for (j = 1; j <= n; j ++) { if (ct[j] > 0 && j < ct[j]) npairs ++; }
+  
+  /* Copy of ct; if a pseudoknotted structure, cct will be modified later.
+   */
+  ESL_ALLOC(cct, sizeof(int)*(n+1));
+  esl_vec_ICopy(ct, (n+1), cct);
+  
+  /* Initialize rightbounds for all 26 pseudoknot indices */
+  for (x = 0; x < 26; x ++) rb[x] = -1;
+
+  /* init ss[] to single stranded */
+  for (j = 0; j < n; j ++) { ss[j] = ':'; }  
+  ss[n] = '\0'; 
+ 
+  /* Initialization*/
+  if ((pda   = esl_stack_ICreate()) == NULL) goto FINISH;
+  if ((auxpk = esl_stack_ICreate()) == NULL) goto FINISH;
+  if ((auxss = esl_stack_ICreate()) == NULL) goto FINISH;
+  
+  for (j = 1; j <= n; j++)
+    {
+      if (cct[j] == 0)	/* unpaired: push j. */
+	{
+	  if (esl_stack_IPush(pda, j) != eslOK) goto FINISH;
+	}
+      else if (cct[j] > j) /* left side of a bp: push j. */
+	{
+	  if (esl_stack_IPush(pda, j) != eslOK) goto FINISH;
+	}
+      else   /* right side of a bp; main routine: fingh the left partner */
+	{
+	  found_partner = FALSE;
+	  /* Pop back until we find the left partner of j;
+	   * In case this is not a nested structure, finding
+	   * the left partner of j will require to put bases 
+	   * aside into stack auxpk.
+	   *
+	   * After we find the left partner of j,
+	   * store single stranded residues in auxss;
+	   * keep track of #faces and the maximum face depth.
+	   */
+	  nfaces  = 0;
+	  minface = -1;
+	 
+	  while (esl_stack_ObjectCount(pda)) 
+	    {
+	      if (esl_stack_IPop(pda, &i) != eslOK) goto FINISH;
+	      
+	      if (i < 0) 		/* a face counter */
+		{
+		  nfaces++;
+		  if (i < minface) minface = i;
+		}
+
+	      else if (cct[i] == j)  /* we found the i,j pair. */
+		{
+		  found_partner = TRUE;
+		  npairs_reached ++;	
+		  /* Now we know i,j pair; and we know how many faces are
+		   * above them; and we know the max depth of those faces.
+		   * That's enough to label the pair in WUSS notation.
+		   * if nfaces == 0, minface is -1; <> a closing bp of a hairpin.
+		   * if nfaces == 1, inherit minface, we're continuing a stem.
+		   * if nfaces > 1, bump minface in depth; we're closing a bifurc.
+		   */
+		  if (nfaces > 1 && minface > -4) minface--;
+		  switch (minface) {
+		  case -1: ss[i-1] = '<'; ss[j-1] = '>'; break;
+		  case -2: ss[i-1] = '('; ss[j-1] = ')'; break;
+		  case -3: ss[i-1] = '['; ss[j-1] = ']'; break;
+		  case -4: ss[i-1] = '{'; ss[j-1] = '}'; break;
+		  default:
+		    esl_stack_Destroy(pda); esl_stack_Destroy(auxpk); esl_stack_Destroy(auxss); free(cct); 
+		    ESL_EXCEPTION(eslEINCONCEIVABLE, "no such face code");
+		  }
+		  if (esl_stack_IPush(pda, minface) != eslOK) goto FINISH;
+		  
+		  /* Now, aux contains all the unpaired residues we need to label,
+		   * according to the # of faces "above" them:
+		   *  nfaces = 0: hairpin loop
+		   *  nfaces = 1: bulge or interior loop
+		   *  nfaces > 1: multifurc
+		   */
+		  while (esl_stack_IPop(auxss, &i) == eslOK)
+		    {
+		      switch (nfaces) {
+			
+		      case 0:  ss[i-1] = '_'; break;
+		      case 1:  ss[i-1] = '-'; break;
+		      default: ss[i-1] = ','; break; /* nfaces > 1 */
+		      }
+		    }
+		  break;
+		}
+	      
+	      else if (cct[i] == 0) 
+		{
+		  /* add to auxss only if originally sigle stranded */
+		  if (ct[i] == 0) { if (esl_stack_IPush(auxss, i) != eslOK) goto FINISH; }
+		}
+
+	      else /* cct[i]>0, != j: i is paired, but not to j: pseudoknot! */
+		{
+		  /* i is in the way to find j's left partner. 
+		   * Move i to stack auxpk; resolve pseudoknot(s) after we've found partern for j.
+		   */ 
+		  if (esl_stack_IPush(auxpk, i) != eslOK) goto FINISH;
+		}
+	    } 
+	  
+	  if (!found_partner) {
+	    esl_stack_Destroy(pda); esl_stack_Destroy(auxpk); esl_stack_Destroy(auxss); free(cct); 
+	    ESL_EXCEPTION(eslEINVAL, "Cannot find left partner (%d) of base %d. Likely a triplet", ct[j], j);
+	  }
+	} /* finished finding the left partner of j */
+      
+      /* After we've found the left partner of j, resolve pks found along the way.
+       * Then, remove the pseudoknotted based from cct so we can find the rest of the structure.
+       */
+      if (esl_stack_ObjectCount(auxpk)) {
+
+	/* init for first pseudoknot */
+	leftbound  = cct[j];
+	rightbound = leftbound + 1;
+	xpk        = -1;            /* start with 'A' if possible again */
+
+	while (esl_stack_IPop(auxpk, &i) == eslOK) {
+
+	  for (k = rightbound-1; k > leftbound; k --) 
+	    {
+	      if      (cct[k] == 0)          { continue; } 
+	      else if (cct[k] >  rightbound) { continue; } 
+	      else if (cct[k] == i)          { break; }                  /* i continues the given pseudoknot */
+	      else                           { k = leftbound; break; }   /* a new pseudoknot */		    		
+	    }
+	  
+	  if (k == leftbound) /* a new pseudoknot */
+	    {
+	      npk ++;
+	      xpk ++;
+	      /* figure out if we can use this alphabet index, or bump it up if necessary */
+	      while (i < rb[xpk]) { xpk ++; }
+	      
+	      leftbound  = (rightbound < cct[i])? rightbound : cct[j];
+	      rightbound = cct[i];
+	    }
+	      
+	  npairs_reached ++;
+	  if (xpk+(int)('a') <= (int)('z')) {
+
+	    /* update the rightbound of this pk index if necessary */
+	    if (cct[i] > rb[xpk]) rb[xpk] = cct[i];
+	    
+	    /* Add pk indices for this basepair */
+	    ss[i-1]      = (char)(xpk+(int)('A'));
+	    ss[cct[i]-1] = (char)(xpk+(int)('a'));
+	    
+	    /* remove pseudoknotted pair from cct */
+	    cct[i]     = 0;
+	    cct[ct[i]] = 0;
+	  }
+	  else  ESL_EXCEPTION(eslEINVAL, "Don't have enough letters to describe all different pseudoknots.");	      
+	    	  
+	} 	
+      } /* while there is something in auxpk stack */
+
+    } /* finished loop over j: end position on seq, 1..n*/ 
+  
+  status = eslOK;
+
+ ERROR:
+ FINISH:
+  if (npairs != npairs_reached) 		  
+    ESL_EXCEPTION(eslFAIL, "found %d out of %d pairs.", npairs_reached, npairs);
+  if (pda   != NULL) esl_stack_Destroy(pda);
+  if (auxpk != NULL) esl_stack_Destroy(auxpk);
+  if (auxss != NULL) esl_stack_Destroy(auxss);
+  if (cct   != NULL) free(cct);
+  return status;
+}
+
+/* Function:  esl_ct2simplewuss()
+ * Incept:    ER, Wed Aug 22 13:31:54 EDT 2012 [Janelia]
+ *
+ * Purpose:   Convert a CT array <ct> for <n> residues (1..n) to a simple WUSS
+ *            format string <ss>. <ss> must be allocated for at least
+ *            n+1 chars (+1 for the terminal NUL). 
+ *
+ *            This function can be used with the <ct> of a secondary
+ *            structure including arbitrary pseudoknots, or for the 
+ *            <ct> or a tertiary structure (say cWH, tWH, cSS,... H bonds). 
+ *
+ *            The string <ss> has basepairs annotated as <>, Aa, Bb, ..., Zz;
+ *            unpaired bases are annotated as '.'.
+ *
+ *            Attemting to convert a <ct> that requires more letters
+ *            than [A-Z] will return an <eslEINVAL> error.
+ *
+ *            Attempting to convert a <ct> that involves triplet interactions
+ *            will return an <eslEINVAL> error.
+ *
+ * Returns:   <eslOK> on success.
+ * 
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEINCONCEIVABLE> on internal failure.
+ */
+int
+esl_ct2simplewuss(int *ct, int n, char *ss)
+{
+  int        rb[26];                /* array that delimits the right bound of a pseudoknot character */
+  ESL_STACK *pda    = NULL;         /* stack for "main" secondary structure */
+  ESL_STACK *auxpk  = NULL;	    /* aux stack for pseudoknot */
+  int       *cct    = NULL;         /* copy of ct vector */
+  int        leftbound, rightbound; /* left and right bound to find basepairs belonging to a given pseudoknot */
+  int        xpk = 0;               /* number of pseudoknot chararactes used */
+  int        npk = 0;               /* number of pseudoknots */
+  int        npairs = 0;            /* total number of basepairs */
+  int        npairs_reached = 0;    /* number of basepairs found so far */
+  int        found_partner;         /* true if we've found left partner of a given base in stack pda */
+  int        i,j,k;                 /* sequence indices */
+  int        x;                     /* index for pseudoknot characters */
+  int        status = eslEMEM;	    /* exit status 'til proven otherwise */
+
+  /* total number of basepairs */
+  for (j = 1; j <= n; j ++) { if (ct[j] > 0 && j < ct[j]) npairs ++; }
+  
+  /* Copy of ct; if a pseudoknotted structure, cct will be modified later.
+   */
+  ESL_ALLOC(cct, sizeof(int)*(n+1));
+  esl_vec_ICopy(ct, (n+1), cct);
+  
+  /* Initialize rightbounds for all 26 pseudoknot indices */
+  for (x = 0; x < 26; x ++) rb[x] = -1;
+
+  /* init ss[] to single stranded */
+  for (j = 0; j < n; j ++) { ss[j] = '.'; }  
+  ss[n] = '\0'; 
+ 
+  /* Initialization*/
+  if ((pda   = esl_stack_ICreate()) == NULL) goto FINISH;
+  if ((auxpk = esl_stack_ICreate()) == NULL) goto FINISH;
+  
+  for (j = 1; j <= n; j++)
+    {
+      if (cct[j] == 0)	/* unpaired: push j. */
+	{
+	  if (esl_stack_IPush(pda, j) != eslOK) goto FINISH;
+	}
+      else if (cct[j] > j) /* left side of a bp: push j. */
+	{
+	  if (esl_stack_IPush(pda, j) != eslOK) goto FINISH;
+	}
+      else   /* right side of a bp; main routine: fingh the left partner */
+	{
+	  found_partner = FALSE;
+
+	  /* Pop back until we find the left partner of j;
+	   * In case this is not a nested structure, finding
+	   * the left partner of j will require to put bases 
+	   * aside into stack auxpk.
+	   */	 
+	  while (esl_stack_ObjectCount(pda)) 
+	    {
+	      if (esl_stack_IPop(pda, &i) != eslOK) goto FINISH;
+	      
+	      if (cct[i] == j)  /* we found the i,j pair. */
+		{
+		  found_partner = TRUE;
+		  npairs_reached ++;	
+
+		  ss[i-1] = '<';
+		  ss[j-1] = '>';
+		  break;
+		}
+	      
+	      else if (cct[i] == 0) 
+		{
+		  if (ct[i] == 0) ss[i-1] = '.';
+		}
+
+	      else /* cct[i]>0, != j: i is paired, but not to j: pseudoknot! */
+		{
+		  /* i is in the way to find j's left partner. 
+		   * Move i to stack auxpk; resolve pseudoknot(s) after we've found partern for j.
+		   */ 
+		  if (esl_stack_IPush(auxpk, i) != eslOK) goto FINISH;
+		}
+	    } 
+	  
+	  if (!found_partner) {
+	    esl_stack_Destroy(pda); esl_stack_Destroy(auxpk); free(cct); 
+	    ESL_EXCEPTION(eslEINVAL, "Cannot find left partner (%d) of base %d. Likely a triplet", ct[j], j);
+	  }
+	} /* finished finding the left partner of j */
+      
+      /* After we've found the left partner of j, resolve pks found along the way.
+       * Then, remove the pseudoknotted based from cct so we can find the rest of the structure.
+       */
+      if (esl_stack_ObjectCount(auxpk)) {
+
+	/* init for first pseudoknot */
+	leftbound  = cct[j];
+	rightbound = leftbound + 1;
+	xpk        = -1;            /* start with 'A' if possible again */
+
+	while (esl_stack_IPop(auxpk, &i) == eslOK) {
+
+	  for (k = rightbound-1; k > leftbound; k --) 
+	    {
+	      if      (cct[k] == 0)          { continue; } 
+	      else if (cct[k] >  rightbound) { continue; } 
+	      else if (cct[k] == i)          { break; }                  /* i continues the given pseudoknot */
+	      else                           { k = leftbound; break; }   /* a new pseudoknot */		    		
+	    }
+	  
+	  if (k == leftbound) /* a new pseudoknot */
+	    {
+	      npk ++;
+	      xpk ++;
+	      /* figure out if we can use this alphabet index, or bump it up if necessary */
+	      while (i < rb[xpk]) { xpk ++; }
+	      
+	      leftbound  = (rightbound < cct[i])? rightbound : cct[j];
+	      rightbound = cct[i];
+	    }
+	      
+	  npairs_reached ++;
+	  if (xpk+(int)('a') <= (int)('z')) {
+
+	    /* update the rightbound of this pk index if necessary */
+	    if (cct[i] > rb[xpk]) rb[xpk] = cct[i];
+	    
+	    /* Add pk indices for this basepair */
+	    ss[i-1]      = (char)(xpk+(int)('A'));
+	    ss[cct[i]-1] = (char)(xpk+(int)('a'));
+	    
+	    /* remove pseudoknotted pair from cct */
+	    cct[i]     = 0;
+	    cct[ct[i]] = 0;
+	  }
+	  else  ESL_EXCEPTION(eslEINVAL, "Don't have enough letters to describe all different pseudoknots.");	      
+	    	  
+	} 	
+      } /* while there is something in auxpk stack */
+
+    } /* finished loop over j: end position on seq, 1..n*/ 
+  
+  status = eslOK;
+
+ ERROR:
+ FINISH:
+  if (npairs != npairs_reached) 		  
+    ESL_EXCEPTION(eslFAIL, "found %d out of %d pairs.", npairs_reached, npairs);
+  if (pda   != NULL) esl_stack_Destroy(pda);
+  if (auxpk != NULL) esl_stack_Destroy(auxpk);
+  if (cct   != NULL) free(cct);
+  return status;
+}
+
+/* Function:  esl_wuss2kh()
+ * Incept:    SRE, Tue Feb 15 10:05:35 2005 [St. Louis]
+ *
+ * Purpose:   Converts a secondary structure string <ss> in 
+ *            WUSS notation back to old KHS format in <kh>.
+ *            <kh> must be allocated for at least as much
+ *            space as <ss>. <kh> may be the same as <ss>,
+ *            in which case the conversion is done in-place.
+ *
+ * Note:      Left bp chars  are converted to >   (left base of base pairs)
+ *            Right bp chars are converted to <   (right base of base pairs)
+ *            Characters _-,:~ are converted to . (unpaired bases)
+ *            Character  .     is untouched       (unpaired)
+ *            Everything else is untouched, including any pseudoknot notation.
+ * 
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_wuss2kh(char *ss, char *kh)
+{
+  while (*ss != '\0')
+    {
+      if       (*ss == '<') *kh = '>';
+      else if  (*ss == '(') *kh = '>';
+      else if  (*ss == '[') *kh = '>';
+      else if  (*ss == '{') *kh = '>';
+      else if  (*ss == '>') *kh = '<';
+      else if  (*ss == ')') *kh = '<';
+      else if  (*ss == ']') *kh = '<';
+      else if  (*ss == '}') *kh = '<';
+      else if  (*ss == '_') *kh = '.';
+      else if  (*ss == '-') *kh = '.';
+      else if  (*ss == ',') *kh = '.';
+      else if  (*ss == ':') *kh = '.';
+      else if  (*ss == '~') *kh = '.';
+      else *kh = *ss;
+      ss++;
+      kh++;
+    }
+  *kh = '\0';
+  return eslOK;
+}
+
+
+/* Function:  esl_kh2wuss()
+ * Incept:    SRE, Tue Feb 15 10:10:40 2005 [St. Louis]
+ *
+ * Purpose:   Converts an old format secondary structure string <kh>
+ *            to shorthand WUSS format <ss>. <ss> must be allocated at least
+ *            as large as <kh>. <ss> can be identical to <kh>, in which
+ *            case the conversion is done in-place.
+ *
+ * Note:      Character > is converted to <  (left base of base pairs)
+ *            Character < is converted to >  (right base of base pairs)
+ *            A space is converted to .      (just in case)      
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_kh2wuss(char *kh, char *ss)
+{
+  while (*kh != '\0')
+    {
+      if      (*kh == '>') *ss = '<';
+      else if (*kh == '<') *ss = '>';
+      else if (*kh == ' ') *ss = '.';
+      else *ss = *kh;
+      kh++;
+      ss++;
+    }
+  *ss = '\0';
+  return eslOK;
+}
+
+
+/* Function:  esl_wuss_full()
+ * Incept:    SRE, Mon Feb 28 09:44:40 2005 [St. Louis]
+ *
+ * Purpose:   Given a simple ("input") WUSS format annotation string <oldss>,
+ *            convert it to full ("output") WUSS format in <newss>.
+ *            <newss> must be allocated by the caller to be at least as 
+ *            long as <oldss>. <oldss> and <newss> can be the same,
+ *            to convert a secondary structure string in place.
+ *            
+ *            Pseudoknot annotation is preserved, if <oldss> had it.
+ *
+ * Returns:   <eslSYNTAX> if <oldss> isn't in valid WUSS format.
+ *
+ * Throws:    <eslEMEM> on allocation failure.
+ *            <eslEINCONCEIVABLE> on internal error that can't happen.
+ */
+int
+esl_wuss_full(char *oldss, char *newss)
+{
+  char *tmp = NULL;
+  int  *ct  = NULL;
+  int   n;
+  int   i;
+  int   status;
+
+  /* We can use the ct2wuss algorithm to generate a full WUSS string -
+   * convert to ct, then back to WUSS.  ct2wuss doesn't deal with pk's
+   * though, and we want to propagate pk annotation if it's there.  So
+   * we need two workspaces: ct array, and a temporary ss string that
+   * we use to hold non-pk annotation.  As a final step, we overlay
+   * the pk annotation from the original oldss annotation.
+   */
+  n = strlen(oldss);
+  ESL_ALLOC(ct,  sizeof(int)  * (n+1));
+  ESL_ALLOC(tmp, sizeof(char) * (n+1));
+  
+  esl_wuss_nopseudo(oldss, tmp);/* tmp = nonpseudoknotted oldss */
+
+  status = esl_wuss2ct(tmp, n, ct);   /* ct  = oldss in ct format, no pks */
+  if (status != eslOK) goto ERROR;
+
+  status = esl_ct2wuss(ct, n, tmp);   /* now tmp is a full WUSS string */
+  if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; }/* we're sure, no pk's */
+  else if (status != eslOK) goto ERROR; /* EMEM, EINCONCEIVABLE  */
+  
+  for (i = 0; i < n; i++)
+    if (isalpha(oldss[i])) newss[i] = oldss[i];	/* transfer pk annotation */
+    else newss[i] = tmp[i];                     /* transfer new WUSS      */
+
+  free(ct);
+  free(tmp);
+  return eslOK;
+
+ ERROR:
+  free(ct);
+  free(tmp);
+  return status;
+}
+
+
+
+/* Function:  esl_wuss_nopseudo()
+ * Incept:    SRE, Tue Feb 15 11:02:43 2005 [St. Louis]
+ *
+ * Purpose:   Given a WUSS format annotation string <ss1>,
+ *            removes all pseudoknot annotation to create a new 
+ *            WUSS string <ss2> that contains only a "canonical"
+ *            (nonpseudoknotted) structure. <ss2> must be allocated to
+ *            be at least as large as <ss1>. <ss1> and <ss2>
+ *            may be the same, in which case the conversion is
+ *            done in place. Pseudoknot annotation in <ss1> is
+ *            simply replaced by <.> in <ss2>; the resulting
+ *            <ss2> WUSS string is therefore in valid simplified format,
+ *            but may not be valid full format WUSS.
+ *
+ * Returns:   <eslOK>.
+ */
+int
+esl_wuss_nopseudo(char *ss1, char *ss2)
+{
+  while (*ss1 != '\0') 
+    {
+      if (isalpha(*ss1)) *ss2 = '.';
+      else *ss2 = *ss1;
+      ss1++;
+      ss2++;
+    }
+  *ss2 = '\0';
+  return eslOK;
+}
+
+
+/* Function:  esl_wuss_reverse()
+ * Synopsis:  "Reverse complement" a WUSS annotation
+ * Incept:    SRE, Wed Feb 10 12:46:51 2016 [JB251 BOS-MCO]
+ *
+ * Purpose:   If we need to reverse complement a structure-annotated RNA
+ *            sequence, we need to "reverse complement" the WUSS
+ *            annotation string. Reverse complement the annotation string
+ *            <ss> into caller-provided space <new>. To revcomp an annotation 
+ *            in place, use <esl_wuss_reverse(ss, ss)>.
+ *            
+ *            Old SELEX files use a different structure annotation
+ *            format, with angle brackets pointing the opposite
+ *            direction: \ccode{><} for a base pair. As a convenient
+ *            side effect, <esl_wuss_reverse()> will also reverse
+ *            complement SELEX annotation lines.
+ *
+ * Returns:   <eslOK> on success.
+ */
+int
+esl_wuss_reverse(char *ss, char *new)
+{
+  int i, n;
+
+  /* first, "complement" the annotation */
+  for (i = 0; ss[i] != '\0'; i++)
+    {
+      if      (isupper(ss[i])) new[i] = tolower(ss[i]);
+      else if (islower(ss[i])) new[i] = toupper(ss[i]);
+      else {
+	switch (ss[i]) {
+	case '<': new[i] = '>';   break;
+	case '>': new[i] = '<';   break;
+	case '(': new[i] = ')';   break;
+	case ')': new[i] = '(';   break;
+	case '[': new[i] = ']';   break;
+	case ']': new[i] = '[';   break;
+	case '{': new[i] = '}';   break;
+	case '}': new[i] = '{';   break;
+	default:  new[i] = ss[i]; break;
+	}
+      }
+    }
+  n = i;
+  /* Then, reverse it in place. */
+  for (i = 0; i < n/2; i++)
+    ESL_SWAP(new[i], new[n-i-1], char);
+
+  return eslOK;
+}
+
+
+#ifdef eslWUSS_TESTDRIVE
+/* gcc -g -Wall -o testwuss -I. -DeslWUSS_TESTDRIVE esl_wuss.c esl_random.c esl_stack.c esl_vectorops.c easel.c
+ * ./testwuss
+ */
+
+#include <stdlib.h>
+
+#include "easel.h"
+#include "esl_random.h"
+#include "esl_stack.h"
+#include "esl_vectorops.h"
+#include "esl_wuss.h"
+
+int
+main(int argc, char **argv)
+{
+  /* The example is E. coli RNase P, w/ and w/o pks. 
+   * J Brown figure 10.3.00 shows 1 too many bp for pk stem A. 
+   */
+  char ss[] = "\
+{{{{{{{{{{{{{{{{{{,<<<<<<<<<<<<<-<<<<<____>>>>>>>>>->>>>>>>>\
+>,,,,AAA-AAAAA[[[[---BBBB-[[[[[<<<<<_____>>>>><<<<____>>>->(\
+(---(((((,,,,,,,,,,,,<<<<<--<<<<<<<<____>>>>>->>>>>>-->>,,,,\
+,,,<<<<<<_______>>>>>><<<<<<<<<____>>>->>>>>->,,)))--))))]]]\
+]]]]]],,,<<<<------<<<<<<----<<<<<_bbbb>>>>>>>>>>>----->>>>,\
+,,,,,<<<<<<<<____>>>>>>>>,,,,,,,,,,}}}}}}}----------aaaaaaaa\
+-}-}}}}}}}}}}::::";
+  char ss_nopk[] = "\
+{{{{{{{{{{{{{{{{{{,<<<<<<<<<<<<<-<<<<<____>>>>>>>>>->>>>>>>>\
+>,,,,,,,,,,,,,[[[[--------[[[[[<<<<<_____>>>>><<<<____>>>->(\
+(---(((((,,,,,,,,,,,,<<<<<--<<<<<<<<____>>>>>->>>>>>-->>,,,,\
+,,,<<<<<<_______>>>>>><<<<<<<<<____>>>->>>>>->,,)))--))))]]]\
+]]]]]],,,<<<<------<<<<<<----<<<<<_____>>>>>>>>>>>----->>>>,\
+,,,,,<<<<<<<<____>>>>>>>>,,,,,,,,,,}}}}}}}------------------\
+-}-}}}}}}}}}}::::";
+  int  len;
+  int  *ct1 = NULL;
+  int  *ct2 = NULL;
+  char *ss2 = NULL;
+  char *ss3 = NULL;
+  int  i;
+  int  nbp, nbp_true, npk;
+  int  status;
+
+  len = strlen(ss);
+  ESL_ALLOC(ct1, sizeof(int)  * (len+1));
+  ESL_ALLOC(ct2, sizeof(int)  * (len+1));
+  ESL_ALLOC(ss2, sizeof(char) * (len+1));
+  ESL_ALLOC(ss3, sizeof(char) * (len+1));
+  nbp_true = npk = 0;
+  for (i = 0; i < len; i++)
+    {
+      if (strchr("{[(<", ss[i]) != NULL)
+	nbp_true++;
+      if (isupper(ss[i]))
+	npk++;
+    }
+	
+  if (esl_wuss2ct(ss, len, ct1) != eslOK) abort();
+  nbp = 0;
+  for (i = 1; i <= len; i++)
+    if (ct1[i] > i) nbp++;
+  if (nbp != nbp_true + npk) abort();
+  
+  if (esl_wuss2kh(ss, ss)       != eslOK) abort();
+  if (esl_kh2wuss(ss, ss)       != eslOK) abort();
+  if (esl_wuss2ct(ss, len, ct2) != eslOK) abort();
+  for (i = 1; i <= len; i++)
+    if (ct1[i] != ct2[i]) abort();
+  
+  /* test of pseudoknots */
+  if (esl_ct2wuss(ct1, len, ss2) != eslOK) abort();
+  if (esl_wuss2ct(ss2, len, ct2) != eslOK) abort();
+  for (i = 1; i <= len; i++)
+    if (ct1[i] != ct2[i]) abort();
+
+  if (esl_ct2simplewuss(ct1, len, ss2) != eslOK) abort();
+  if (esl_wuss2ct(ss2, len, ct2) != eslOK) abort();
+  for (i = 1; i <= len; i++)
+    if (ct1[i] != ct2[i]) abort();
+
+  if (esl_wuss_nopseudo(ss, ss)      != eslOK) abort();
+  if (esl_wuss2ct(ss, len, ct1)      != eslOK) abort();
+  if (esl_wuss2ct(ss_nopk, len, ct2) != eslOK) abort();
+  for (i = 1; i <= len; i++)
+    if (ct1[i] != ct2[i]) abort();
+
+  if (esl_wuss2ct(ss_nopk, len, ct1) != eslOK) abort();
+  if (esl_ct2wuss(ct1, len, ss3)     != eslOK) abort();
+  if (strcmp(ss_nopk, ss3) != 0) abort();
+
+  free(ct1);
+  free(ct2);
+  free(ss2);
+  free(ss3);
+  return 0;
+
+ ERROR:
+  free(ct1);
+  free(ct2);
+  free(ss2);
+  free(ss3);
+  return status;
+}
+#endif /*eslWUSS_TESTDRIVE*/
+
+
+
+/*****************************************************************
+ * @LICENSE@
+ * 
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
diff --git a/esl_wuss.h b/esl_wuss.h
new file mode 100644
index 0000000..310b699
--- /dev/null
+++ b/esl_wuss.h
@@ -0,0 +1,19 @@
+/* RNA secondary structure markup in WUSS notation.
+ * 
+ */
+#ifndef eslWUSS_INCLUDED
+#define eslWUSS_INCLUDED
+
+extern int esl_wuss2ct(char *ss, int len, int *ct);
+extern int esl_ct2wuss(int *ct, int n, char *ss);
+extern int esl_ct2simplewuss(int *ct, int n, char *ss);
+extern int esl_wuss2kh(char *ss, char *kh);
+extern int esl_kh2wuss(char *kh, char *ss);
+extern int esl_wuss_full(char *oldss, char *newss);
+extern int esl_wuss_nopseudo(char *ss1, char *ss2);
+extern int esl_wuss_reverse(char *ss, char *new);
+
+#endif /*eslWUSS_INCLUDED*/
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/esl_wuss.tex b/esl_wuss.tex
new file mode 100644
index 0000000..5dcda77
--- /dev/null
+++ b/esl_wuss.tex
@@ -0,0 +1,34 @@
+
+The wuss module implements routines for using WUSS notation to
+represent RNA secondary structures. 
+
+The API provides the following converters:
+
+\begin{tabular}{ll}
+\ccode{esl\_wuss2ct()} & Convert WUSS string to Zuker CT array. \\
+\ccode{esl\_ct2wuss()} & Convert CT array (no pk's) to WUSS string. \\
+\ccode{esl\_wuss2kh()} & Convert WUSS string to old format (Konings/Hogeweg).\\
+\ccode{esl\_kh2wuss()} & Convert old format to WUSS string.\\
+\ccode{esl\_wuss\_full()}& Convert simple WUSS to full (output) WUSS.\\
+\ccode{esl\_wuss\_nopseudo()} & Crudely remove pseudoknot annotation from WUSS string.\\
+\end{tabular}
+
+WUSS notation is defined later in the Formats section of this
+document.
+
+So-called ``old'' (KH) format (old because COVE used it, whereas
+Infernal uses WUSS) for a secondary structure annotation string used
+\ccode{><} pairs to annotate base pairs, as in \ccode{>>>....<<<} for
+a three-base stem with a four-base single stranded loop.
+
+A CT array is a \ccode{1..n} array for a sequence of length \ccode{n},
+where \ccode{ct[i]} is either an index \ccode {1..n} of a position
+that residue \ccode{i} base pairs to, or 0 if \ccode{i} is unpaired.
+
+
+
+
+
+
+
+
diff --git a/formats/BLOSUM62 b/formats/BLOSUM62
new file mode 100644
index 0000000..205f139
--- /dev/null
+++ b/formats/BLOSUM62
@@ -0,0 +1,31 @@
+#  Matrix made by matblas from blosum62.iij
+#  * column uses minimum score
+#  BLOSUM Clustered Scoring Matrix in 1/2 Bit Units
+#  Blocks Database = /data/blocks_5.0/blocks.dat
+#  Cluster Percentage: >= 62
+#  Entropy =   0.6979, Expected =  -0.5209
+   A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V  B  Z  X  *
+A  4 -1 -2 -2  0 -1 -1  0 -2 -1 -1 -1 -1 -2 -1  1  0 -3 -2  0 -2 -1  0 -4 
+R -1  5  0 -2 -3  1  0 -2  0 -3 -2  2 -1 -3 -2 -1 -1 -3 -2 -3 -1  0 -1 -4 
+N -2  0  6  1 -3  0  0  0  1 -3 -3  0 -2 -3 -2  1  0 -4 -2 -3  3  0 -1 -4 
+D -2 -2  1  6 -3  0  2 -1 -1 -3 -4 -1 -3 -3 -1  0 -1 -4 -3 -3  4  1 -1 -4 
+C  0 -3 -3 -3  9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4 
+Q -1  1  0  0 -3  5  2 -2  0 -3 -2  1  0 -3 -1  0 -1 -2 -1 -2  0  3 -1 -4 
+E -1  0  0  2 -4  2  5 -2  0 -3 -3  1 -2 -3 -1  0 -1 -3 -2 -2  1  4 -1 -4 
+G  0 -2  0 -1 -3 -2 -2  6 -2 -4 -4 -2 -3 -3 -2  0 -2 -2 -3 -3 -1 -2 -1 -4 
+H -2  0  1 -1 -3  0  0 -2  8 -3 -3 -1 -2 -1 -2 -1 -2 -2  2 -3  0  0 -1 -4 
+I -1 -3 -3 -3 -1 -3 -3 -4 -3  4  2 -3  1  0 -3 -2 -1 -3 -1  3 -3 -3 -1 -4 
+L -1 -2 -3 -4 -1 -2 -3 -4 -3  2  4 -2  2  0 -3 -2 -1 -2 -1  1 -4 -3 -1 -4 
+K -1  2  0 -1 -3  1  1 -2 -1 -3 -2  5 -1 -3 -1  0 -1 -3 -2 -2  0  1 -1 -4 
+M -1 -1 -2 -3 -1  0 -2 -3 -2  1  2 -1  5  0 -2 -1 -1 -1 -1  1 -3 -1 -1 -4 
+F -2 -3 -3 -3 -2 -3 -3 -3 -1  0  0 -3  0  6 -4 -2 -2  1  3 -1 -3 -3 -1 -4 
+P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4  7 -1 -1 -4 -3 -2 -2 -1 -2 -4 
+S  1 -1  1  0 -1  0  0  0 -1 -2 -2  0 -1 -2 -1  4  1 -3 -2 -2  0  0  0 -4 
+T  0 -1  0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1  1  5 -2 -2  0 -1 -1  0 -4 
+W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1  1 -4 -3 -2 11  2 -3 -4 -3 -2 -4 
+Y -2 -2 -2 -3 -2 -1 -2 -3  2 -1 -1 -2 -1  3 -3 -2 -2  2  7 -1 -3 -2 -1 -4 
+V  0 -3 -3 -3 -1 -2 -2 -3 -3  3  1 -2  1 -1 -2 -2  0 -3 -1  4 -3 -2 -1 -4 
+B -2 -1  3  4 -3  0  1 -1  0 -3 -4  0 -3 -3 -2  0 -1 -4 -3 -3  4  1 -1 -4 
+Z -1  0  0  1 -3  3  4 -2  0 -3 -3  1 -1 -3 -1  0 -1 -3 -2 -2  1  4 -1 -4 
+X  0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2  0  0 -2 -1 -1 -1 -1 -1 -4 
+* -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4  1 
diff --git a/formats/embl b/formats/embl
new file mode 100644
index 0000000..63c3220
--- /dev/null
+++ b/formats/embl
@@ -0,0 +1,118 @@
+ID   X06347; SV 1; linear; mRNA; STD; HUM; 1209 BP.
+XX
+AC   X06347;
+XX
+DT   19-OCT-1988 (Rel. 18, Created)
+DT   12-SEP-1993 (Rel. 36, Last updated, Version 2)
+XX
+DE   Human mRNA for U1 small nuclear RNP-specific A protein
+XX
+KW   U1 snRNP-specific protein A.
+XX
+OS   Homo sapiens (human)
+OC   Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi; Mammalia;
+OC   Eutheria; Euarchontoglires; Primates; Haplorrhini; Catarrhini; Hominidae;
+OC   Homo.
+XX
+RN   [1]
+RP   1-1209
+RX   PUBMED; 2962859.
+RA   Sillekens P.T.G., Habets W.J., Beijer R.P., van Venrooij W.J.;
+RT   "cDNA cloning of the human U1 snRNA-associated A protein: extensive
+RT   homology between U1 and U2 snRNP-specific proteins";
+RL   EMBO J. 6(12):3841-3848(1987).
+XX
+DR   ASTD; TRAN00000054082.
+DR   H-InvDB; HIT000321180.
+DR   RFAM; RF00460; U1A_PIE.
+XX
+CC   Data kindly reviewed (07-NOV-1988) by VAN VENROOIJ W.J.
+XX
+FH   Key             Location/Qualifiers
+FH
+FT   source          1..1209
+FT                   /organism="Homo sapiens"
+FT                   /mol_type="mRNA"
+FT                   /clone_lib="lambda gt11"
+FT                   /clone="pHA-1, pHA-2, pHA-3, pHA-4"
+FT                   /tissue_type="teratocarcinoma."
+FT                   /db_xref="taxon:9606"
+FT   CDS             126..974
+FT                   /note="A protein (AA 1-282)"
+FT                   /db_xref="GDB:120380"
+FT                   /db_xref="GOA:P09012"
+FT                   /db_xref="HGNC:11151"
+FT                   /db_xref="InterPro:IPR000504"
+FT                   /db_xref="InterPro:IPR012677"
+FT                   /db_xref="PDB:1AUD"
+FT                   /db_xref="PDB:1CX0"
+FT                   /db_xref="PDB:1DRZ"
+FT                   /db_xref="PDB:1DZ5"
+FT                   /db_xref="PDB:1FHT"
+FT                   /db_xref="PDB:1M5K"
+FT                   /db_xref="PDB:1M5O"
+FT                   /db_xref="PDB:1M5P"
+FT                   /db_xref="PDB:1M5V"
+FT                   /db_xref="PDB:1NU4"
+FT                   /db_xref="PDB:1OIA"
+FT                   /db_xref="PDB:1SJ3"
+FT                   /db_xref="PDB:1SJ4"
+FT                   /db_xref="PDB:1SJF"
+FT                   /db_xref="PDB:1U6B"
+FT                   /db_xref="PDB:1URN"
+FT                   /db_xref="PDB:1VBX"
+FT                   /db_xref="PDB:1VBY"
+FT                   /db_xref="PDB:1VBZ"
+FT                   /db_xref="PDB:1VC0"
+FT                   /db_xref="PDB:1VC5"
+FT                   /db_xref="PDB:1VC6"
+FT                   /db_xref="PDB:1VC7"
+FT                   /db_xref="PDB:1ZZN"
+FT                   /db_xref="PDB:2A3J"
+FT                   /db_xref="PDB:2NZ4"
+FT                   /db_xref="PDB:2OIH"
+FT                   /db_xref="PDB:2OJ3"
+FT                   /db_xref="PDB:2U1A"
+FT                   /db_xref="PDB:3BO2"
+FT                   /db_xref="PDB:3BO3"
+FT                   /db_xref="PDB:3BO4"
+FT                   /db_xref="PDB:3CUL"
+FT                   /db_xref="PDB:3CUN"
+FT                   /db_xref="PDB:3EGZ"
+FT                   /db_xref="PDB:3UTR"
+FT                   /db_xref="UniProtKB/Swiss-Prot:P09012"
+FT                   /protein_id="CAA29653.1"
+FT                   /translation="MAVPETRPNHTIYINNLNEKIKKDELKKSLYAIFSQFGQILDILV
+FT                   SRSLKMRGQAFVIFKEVSSATNALRSMQGFPFYDKPMRIQYAKTDSDIIAKMKGTFVER
+FT                   DRKREKRKPKSQETPATKKAVQGGGATPVVGAVQGPVPGMPPMTQAPRIMHHMPGQPPY
+FT                   MPPPGMIPPPGLAPGQIPPGAMPPQQLMPGQMPPAQPLSENPPNHILFLTNLPEETNEL
+FT                   MLSMLFNQFPGFKEVRLVPGRHDIAFVEFDNEVQAGAARDALQGFKITQNNAMKISFAK
+FT                   K"
+FT   misc_feature    279..302
+FT                   /note="RNP consensus sequence"
+FT   misc_feature    1162..1167
+FT                   /note="polyA signal"
+XX
+SQ   Sequence 1209 BP; 269 A; 380 C; 307 G; 253 T; 0 other;
+     gaattcctga cttccttttc ggaggaagat ccttgagcag ccgacgttgg gacaaaggat        60
+     ttggagaaac ccagggctaa agtcacgttt ttcctccttt aagacttacc tcaacacttc       120
+     actccatggc agttcccgag acccgcccta accacactat ttatatcaac aacctcaatg       180
+     agaagatcaa gaaggatgag ctaaaaaagt ccctgtacgc catcttctcc cagtttggcc       240
+     agatcctgga tatcctggta tcacggagcc tgaagatgag gggccaggcc tttgtcatct       300
+     tcaaggaggt cagcagcgcc accaacgccc tgcgctccat gcagggtttc cctttctatg       360
+     acaaacctat gcgtatccag tatgccaaga ccgactcaga tatcattgcc aagatgaaag       420
+     gcaccttcgt ggagcgggac cgcaagcggg agaagaggaa gcccaagagc caggagaccc       480
+     cggccaccaa gaaggctgtg caaggcgggg gagccacccc cgtggtgggg gctgtccagg       540
+     ggcctgtccc gggcatgccg ccgatgactc aggcgccccg cattatgcac cacatgccgg       600
+     gccagccgcc ctacatgccg ccccctggta tgatcccccc gccaggcctt gcacctggcc       660
+     agatcccacc aggggccatg cccccgcagc agcttatgcc aggacagatg ccccctgccc       720
+     agcctctttc tgagaatcca ccgaatcaca tcttgttcct caccaacctg ccagaggaga       780
+     ccaacgagct catgctgtcc atgcttttca atcagttccc tggcttcaag gaggtccgtc       840
+     tggtacccgg gcggcatgac atcgccttcg tggagtttga caatgaggta caggcagggg       900
+     cagctcgcga tgccctgcag ggctttaaga tcacgcagaa caacgccatg aagatctcct       960
+     ttgccaagaa gtagcacctt ttccccccat gcctgcccct tcccctgttc tggggccacc      1020
+     cctttccccc ttggctcagc cccctgaagg taagtccccc cttgggggcc ttcttggagc      1080
+     cgtgtgtgag tgagtggtcg ccacacagca ttgtacccag agtctgtccc cagacattgc      1140
+     acctggcgct gttaggccgg aattaaagtg gctttttgag gtttggtttt tcacaaaaaa      1200
+     aaggaattc                                                              1209
+//
diff --git a/formats/fasta b/formats/fasta
new file mode 100644
index 0000000..208bc66
--- /dev/null
+++ b/formats/fasta
@@ -0,0 +1,13 @@
+>SNRPA_DROME U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1-A) (Sex determination protein snf).
+MEMLPNQTIYINNLNEKIKKEELKKSLYAIFSQFGQILDIVALKTLKMRG
+QAFVIFKEIGSASNALRTMQGFPFYDKPMQIAYSKSDSDIVAKIKGTFKE
+RPKKVKPPKPAPGTDEKKDKKKKPSSAENSNPNAQTEQPPNQILFLTNLP
+EETNEMMLSMLFNQFPGFKEVRLVPNRHDIAFVEFTTELQSNAAKEALQG
+FKITPTHAMKITFAKK
+>SNRPA_HUMAN U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1A protein) (U1-A).
+AVPETRPNHTIYINNLNEKIKKDELKKSLYAIFSQFGQILDILVSRSLKM
+RGQAFVIFKEVSSATNALRSMQGFPFYDKPMRIQYAKTDSDIIAKMKGTF
+VERDRKREKRKPKSQETPATKKAVQGGGATPVVGAVQGPVPGMPPMTQAP
+RIMHHMPGQPPYMPPPGMIPPPGLAPGQIPPGAMPPQQLMPGQMPPAQPL
+SENPPNHILFLTNLPEETNELMLSMLFNQFPGFKEVRLVPGRHDIAFVEF
+DNEVQAGAARDALQGFKITQNNAMKISFAKK
diff --git a/formats/fasta.2 b/formats/fasta.2
new file mode 100644
index 0000000..1df9a4e
--- /dev/null
+++ b/formats/fasta.2
@@ -0,0 +1,19 @@
+
+
+>SNRPA_DROME U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1-A) (Sex determination protein snf).
+MEMLPNQTIYINNLNEKIKKEELKKSLYAIFSQFGQILDIVALKTLKMRG
+QAFVIFKEIGSASNALRTMQGFPFYDKPMQIAYSKSDSDIVAKIKGTFKE
+RPKKVKPPKPAPGTDEKKDKKKKPSSAENSNPNAQTEQPPNQILFLTNLP
+EETNEMMLSMLFNQFPGFKEVRLVPNRHDIAFVEFTTELQSNAAKEALQG
+FKITPTHAMKITFAKK
+
+
+>SNRPA_HUMAN U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1A protein) (U1-A).
+AVPETRPNHTIYINNLNEKIKKDELKKSLYAIFSQFGQILDILVSRSLKM
+RGQAFVIFKEVSSATNALRSMQGFPFYDKPMRIQYAKTDSDIIAKMKGTF
+VERDRKREKRKPKSQETPATKKAVQGGGATPVVGAVQGPVPGMPPMTQAP
+RIMHHMPGQPPYMPPPGMIPPPGLAPGQIPPGAMPPQQLMPGQMPPAQPL
+SENPPNHILFLTNLPEETNELMLSMLFNQFPGFKEVRLVPGRHDIAFVEF
+DNEVQAGAARDALQGFKITQNNAMKISFAKK
+
+
diff --git a/formats/fasta.bad.1 b/formats/fasta.bad.1
new file mode 100644
index 0000000..31b18c1
--- /dev/null
+++ b/formats/fasta.bad.1
@@ -0,0 +1,2 @@
+>what happens with a bad character?
+ACGT1ACGT
diff --git a/formats/fasta.bad.2 b/formats/fasta.bad.2
new file mode 100644
index 0000000..3990c99
--- /dev/null
+++ b/formats/fasta.bad.2
@@ -0,0 +1 @@
+>truncated_nam
\ No newline at end of file
diff --git a/formats/fasta.bad.3 b/formats/fasta.bad.3
new file mode 100644
index 0000000..40846a2
--- /dev/null
+++ b/formats/fasta.bad.3
@@ -0,0 +1 @@
+>truncated in descripti
\ No newline at end of file
diff --git a/formats/fasta.odd.1 b/formats/fasta.odd.1
new file mode 100644
index 0000000..956cb58
--- /dev/null
+++ b/formats/fasta.odd.1
@@ -0,0 +1,2 @@
+>what happens with empty sequences?
+>we should accept them.
diff --git a/formats/genbank b/formats/genbank
new file mode 100644
index 0000000..c2358e2
--- /dev/null
+++ b/formats/genbank
@@ -0,0 +1,55 @@
+GBSMP.SEQ          Genetic Sequence Data Bank
+                         15 December 1992
+
+                 GenBank Flat File Release 74.0
+
+                     Structural RNA Sequences
+
+      2 loci,       236 bases, from     2 reported sequences
+
+LOCUS       AAURRA        118 bp ss-rRNA            RNA       16-JUN-1986
+DEFINITION  A.auricula-judae (mushroom) 5S ribosomal RNA.
+ACCESSION   K03160
+VERSION     K03160.1  GI:173593
+KEYWORDS    5S ribosomal RNA; ribosomal RNA.
+SOURCE      A.auricula-judae (mushroom) ribosomal RNA.
+  ORGANISM  Auricularia auricula-judae
+            Eukaryota; Fungi; Eumycota; Basidiomycotina; Phragmobasidiomycetes;
+            Heterobasidiomycetidae; Auriculariales; Auriculariaceae.
+REFERENCE   1  (bases 1 to 118)
+  AUTHORS   Huysmans,E., Dams,E., Vandenberghe,A. and De Wachter,R.
+  TITLE     The nucleotide sequences of the 5S rRNAs of four mushrooms and
+            their use in studying the phylogenetic position of basidiomycetes
+            among the eukaryotes
+  JOURNAL   Nucleic Acids Res. 11, 2871-2880 (1983)
+FEATURES             Location/Qualifiers
+     rRNA            1..118
+                     /note="5S ribosomal RNA"
+BASE COUNT       27 a     34 c     34 g     23 t
+ORIGIN      5' end of mature rRNA.
+        1 atccacggcc ataggactct gaaagcactg catcccgtcc gatctgcaaa gttaaccaga
+       61 gtaccgccca gttagtacca cggtggggga ccacgcggga atcctgggtg ctgtggtt
+//
+LOCUS       ABCRRAA       118 bp ss-rRNA            RNA       15-SEP-1990
+DEFINITION  Acetobacter sp. (strain MB 58) 5S ribosomal RNA, complete sequence.
+ACCESSION   M34766
+VERSION     M34766.1  GI:173603
+KEYWORDS    5S ribosomal RNA.
+SOURCE      Acetobacter sp. (strain MB 58) rRNA.
+  ORGANISM  Acetobacter sp.
+            Prokaryotae; Gracilicutes; Scotobacteria; Aerobic rods and cocci;
+            Azotobacteraceae.
+REFERENCE   1  (bases 1 to 118)
+  AUTHORS   Bulygina,E.S., Galchenko,V.F., Govorukhina,N.I., Netrusov,A.I.,
+            Nikitin,D.I., Trotsenko,Y.A. and Chumakov,K.M.
+  TITLE     Taxonomic studies of methylotrophic bacteria by 5S ribosomal RNA
+            sequencing
+  JOURNAL   J. Gen. Microbiol. 136, 441-446 (1990)
+FEATURES             Location/Qualifiers
+     rRNA            1..118
+                     /note="5S ribosomal RNA"
+BASE COUNT       27 a     40 c     32 g     17 t      2 others
+ORIGIN      
+        1 gatctggtgg ccatggcggg agcaaatcag ccgatcccat cccgaactcg gccgtcaaat
+       61 gccccagcgc ccatgatact ctgcctcaag gcacggaaaa gtcggtcgcc gccagayy
+//
diff --git a/formats/genbank.2 b/formats/genbank.2
new file mode 100644
index 0000000..cada00c
--- /dev/null
+++ b/formats/genbank.2
@@ -0,0 +1,52 @@
+
+
+
+LOCUS       AAURRA        118 bp ss-rRNA            RNA       16-JUN-1986
+DEFINITION  A.auricula-judae (mushroom) 5S ribosomal RNA.
+ACCESSION   K03160
+VERSION     K03160.1  GI:173593
+KEYWORDS    5S ribosomal RNA; ribosomal RNA.
+SOURCE      A.auricula-judae (mushroom) ribosomal RNA.
+  ORGANISM  Auricularia auricula-judae
+            Eukaryota; Fungi; Eumycota; Basidiomycotina; Phragmobasidiomycetes;
+            Heterobasidiomycetidae; Auriculariales; Auriculariaceae.
+REFERENCE   1  (bases 1 to 118)
+  AUTHORS   Huysmans,E., Dams,E., Vandenberghe,A. and De Wachter,R.
+  TITLE     The nucleotide sequences of the 5S rRNAs of four mushrooms and
+            their use in studying the phylogenetic position of basidiomycetes
+            among the eukaryotes
+  JOURNAL   Nucleic Acids Res. 11, 2871-2880 (1983)
+FEATURES             Location/Qualifiers
+     rRNA            1..118
+                     /note="5S ribosomal RNA"
+BASE COUNT       27 a     34 c     34 g     23 t
+ORIGIN      5' end of mature rRNA.
+        1 atccacggcc ataggactct gaaagcactg catcccgtcc gatctgcaaa gttaaccaga
+       61 gtaccgccca gttagtacca cggtggggga ccacgcggga atcctgggtg ctgtggtt
+//
+LOCUS       ABCRRAA       118 bp ss-rRNA            RNA       15-SEP-1990
+DEFINITION  Acetobacter sp. (strain MB 58) 5S ribosomal RNA, complete sequence.
+ACCESSION   M34766
+VERSION     M34766.1  GI:173603
+KEYWORDS    5S ribosomal RNA.
+SOURCE      Acetobacter sp. (strain MB 58) rRNA.
+  ORGANISM  Acetobacter sp.
+            Prokaryotae; Gracilicutes; Scotobacteria; Aerobic rods and cocci;
+            Azotobacteraceae.
+REFERENCE   1  (bases 1 to 118)
+  AUTHORS   Bulygina,E.S., Galchenko,V.F., Govorukhina,N.I., Netrusov,A.I.,
+            Nikitin,D.I., Trotsenko,Y.A. and Chumakov,K.M.
+  TITLE     Taxonomic studies of methylotrophic bacteria by 5S ribosomal RNA
+            sequencing
+  JOURNAL   J. Gen. Microbiol. 136, 441-446 (1990)
+FEATURES             Location/Qualifiers
+     rRNA            1..118
+                     /note="5S ribosomal RNA"
+BASE COUNT       27 a     40 c     32 g     17 t      2 others
+ORIGIN      
+        1 gatctggtgg ccatggcggg agcaaatcag ccgatcccat cccgaactcg gccgtcaaat
+       61 gccccagcgc ccatgatact ctgcctcaag gcacggaaaa gtcggtcgcc gccagayy
+//
+
+
+
diff --git a/formats/genbank.bad.1 b/formats/genbank.bad.1
new file mode 100644
index 0000000..614b962
--- /dev/null
+++ b/formats/genbank.bad.1
@@ -0,0 +1,55 @@
+GBSMP.SEQ          Genetic Sequence Data Bank
+                         15 December 1992
+
+                 GenBank Flat File Release 74.0
+
+                     Structural RNA Sequences
+
+      2 loci,       236 bases, from     2 reported sequences
+
+LOCUS       AAURRA        118 bp ss-rRNA            RNA       16-JUN-1986
+DEFINITION  A.auricula-judae (mushroom) 5S ribosomal RNA.
+ACCESSION   K03160
+VERSION     K03160.1  GI:173593
+KEYWORDS    5S ribosomal RNA; ribosomal RNA.
+SOURCE      A.auricula-judae (mushroom) ribosomal RNA.
+  ORGANISM  Auricularia auricula-judae
+            Eukaryota; Fungi; Eumycota; Basidiomycotina; Phragmobasidiomycetes;
+            Heterobasidiomycetidae; Auriculariales; Auriculariaceae.
+REFERENCE   1  (bases 1 to 118)
+  AUTHORS   Huysmans,E., Dams,E., Vandenberghe,A. and De Wachter,R.
+  TITLE     The nucleotide sequences of the 5S rRNAs of four mushrooms and
+            their use in studying the phylogenetic position of basidiomycetes
+            among the eukaryotes
+  JOURNAL   Nucleic Acids Res. 11, 2871-2880 (1983)
+FEATURES             Location/Qualifiers
+     rRNA            1..118
+                     /note="5S ribosomal RNA"
+BASE COUNT       27 a     34 c     34 g     23 t
+ORIGIN      5' end of mature rRNA.
+        1 atccacggcc ataggactct gaaagcactg catcccgtcc gatctgcaaa gttaaccaga%
+       61 gtaccgccca gttagtacca cggtggggga ccacgcggga atcctgggtg ctgtggtt
+//
+LOCUS       ABCRRAA       118 bp ss-rRNA            RNA       15-SEP-1990
+DEFINITION  Acetobacter sp. (strain MB 58) 5S ribosomal RNA, complete sequence.
+ACCESSION   M34766
+VERSION     M34766.1  GI:173603
+KEYWORDS    5S ribosomal RNA.
+SOURCE      Acetobacter sp. (strain MB 58) rRNA.
+  ORGANISM  Acetobacter sp.
+            Prokaryotae; Gracilicutes; Scotobacteria; Aerobic rods and cocci;
+            Azotobacteraceae.
+REFERENCE   1  (bases 1 to 118)
+  AUTHORS   Bulygina,E.S., Galchenko,V.F., Govorukhina,N.I., Netrusov,A.I.,
+            Nikitin,D.I., Trotsenko,Y.A. and Chumakov,K.M.
+  TITLE     Taxonomic studies of methylotrophic bacteria by 5S ribosomal RNA
+            sequencing
+  JOURNAL   J. Gen. Microbiol. 136, 441-446 (1990)
+FEATURES             Location/Qualifiers
+     rRNA            1..118
+                     /note="5S ribosomal RNA"
+BASE COUNT       27 a     40 c     32 g     17 t      2 others
+ORIGIN      
+        1 gatctggtgg ccatggcggg agcaaatcag ccgatcccat cccgaactcg gccgtcaaat
+       61 gccccagcgc ccatgatact ctgcctcaag gcacggaaaa gtcggtcgcc gccagayy
+//
diff --git a/formats/stockholm.1 b/formats/stockholm.1
new file mode 100644
index 0000000..4083022
--- /dev/null
+++ b/formats/stockholm.1
@@ -0,0 +1,5 @@
+# STOCKHOLM 1.0
+
+seq1 GAATTC
+seq2 GAATTC
+//
diff --git a/formats/uniprot b/formats/uniprot
new file mode 100644
index 0000000..4c0d566
--- /dev/null
+++ b/formats/uniprot
@@ -0,0 +1,192 @@
+ID   SNRPA_DROME             Reviewed;         216 AA.
+AC   P43332; Q9W4D7;
+DT   01-NOV-1995, integrated into UniProtKB/Swiss-Prot.
+DT   01-NOV-1995, sequence version 1.
+DT   15-DEC-2009, entry version 91.
+DE   RecName: Full=U1 small nuclear ribonucleoprotein A;
+DE            Short=U1 snRNP protein A;
+DE            Short=U1-A;
+DE   AltName: Full=Sex determination protein snf;
+GN   Name=snf; Synonyms=D25, fs(1)1621, liz; ORFNames=CG4528;
+OS   Drosophila melanogaster (Fruit fly).
+OC   Eukaryota; Metazoa; Arthropoda; Hexapoda; Insecta; Pterygota;
+OC   Neoptera; Endopterygota; Diptera; Brachycera; Muscomorpha;
+OC   Ephydroidea; Drosophilidae; Drosophila; Sophophora.
+OX   NCBI_TaxID=7227;
+RN   [1]
+RP   NUCLEOTIDE SEQUENCE [MRNA].
+RX   MEDLINE=92350664; PubMed=1386424; DOI=10.1093/nar/20.14.3645;
+RA   Harper D.S., Fresco L.D., Keene J.D.;
+RT   "RNA binding specificity of a Drosophila snRNP protein that shares
+RT   sequence homology with mammalian U1-A and U2-B' proteins.";
+RL   Nucleic Acids Res. 20:3645-3650(1992).
+RN   [2]
+RP   NUCLEOTIDE SEQUENCE [GENOMIC DNA / MRNA].
+RC   STRAIN=Oregon-R;
+RX   MEDLINE=95011590; PubMed=7926776;
+RA   Flickinger T.W., Salz H.K.;
+RT   "The Drosophila sex determination gene snf encodes a nuclear protein
+RT   with sequence and functional similarity to the mammalian U1A snRNP
+RT   protein.";
+RL   Genes Dev. 8:914-925(1994).
+RN   [3]
+RP   NUCLEOTIDE SEQUENCE [LARGE SCALE GENOMIC DNA].
+RC   STRAIN=Berkeley;
+RX   MEDLINE=20196006; PubMed=10731132; DOI=10.1126/science.287.5461.2185;
+RA   Adams M.D., Celniker S.E., Holt R.A., Evans C.A., Gocayne J.D.,
+RA   Amanatides P.G., Scherer S.E., Li P.W., Hoskins R.A., Galle R.F.,
+RA   George R.A., Lewis S.E., Richards S., Ashburner M., Henderson S.N.,
+RA   Sutton G.G., Wortman J.R., Yandell M.D., Zhang Q., Chen L.X.,
+RA   Brandon R.C., Rogers Y.-H.C., Blazej R.G., Champe M., Pfeiffer B.D.,
+RA   Wan K.H., Doyle C., Baxter E.G., Helt G., Nelson C.R., Miklos G.L.G.,
+RA   Abril J.F., Agbayani A., An H.-J., Andrews-Pfannkoch C., Baldwin D.,
+RA   Ballew R.M., Basu A., Baxendale J., Bayraktaroglu L., Beasley E.M.,
+RA   Beeson K.Y., Benos P.V., Berman B.P., Bhandari D., Bolshakov S.,
+RA   Borkova D., Botchan M.R., Bouck J., Brokstein P., Brottier P.,
+RA   Burtis K.C., Busam D.A., Butler H., Cadieu E., Center A., Chandra I.,
+RA   Cherry J.M., Cawley S., Dahlke C., Davenport L.B., Davies P.,
+RA   de Pablos B., Delcher A., Deng Z., Mays A.D., Dew I., Dietz S.M.,
+RA   Dodson K., Doup L.E., Downes M., Dugan-Rocha S., Dunkov B.C., Dunn P.,
+RA   Durbin K.J., Evangelista C.C., Ferraz C., Ferriera S., Fleischmann W.,
+RA   Fosler C., Gabrielian A.E., Garg N.S., Gelbart W.M., Glasser K.,
+RA   Glodek A., Gong F., Gorrell J.H., Gu Z., Guan P., Harris M.,
+RA   Harris N.L., Harvey D.A., Heiman T.J., Hernandez J.R., Houck J.,
+RA   Hostin D., Houston K.A., Howland T.J., Wei M.-H., Ibegwam C.,
+RA   Jalali M., Kalush F., Karpen G.H., Ke Z., Kennison J.A., Ketchum K.A.,
+RA   Kimmel B.E., Kodira C.D., Kraft C.L., Kravitz S., Kulp D., Lai Z.,
+RA   Lasko P., Lei Y., Levitsky A.A., Li J.H., Li Z., Liang Y., Lin X.,
+RA   Liu X., Mattei B., McIntosh T.C., McLeod M.P., McPherson D.,
+RA   Merkulov G., Milshina N.V., Mobarry C., Morris J., Moshrefi A.,
+RA   Mount S.M., Moy M., Murphy B., Murphy L., Muzny D.M., Nelson D.L.,
+RA   Nelson D.R., Nelson K.A., Nixon K., Nusskern D.R., Pacleb J.M.,
+RA   Palazzolo M., Pittman G.S., Pan S., Pollard J., Puri V., Reese M.G.,
+RA   Reinert K., Remington K., Saunders R.D.C., Scheeler F., Shen H.,
+RA   Shue B.C., Siden-Kiamos I., Simpson M., Skupski M.P., Smith T.J.,
+RA   Spier E., Spradling A.C., Stapleton M., Strong R., Sun E.,
+RA   Svirskas R., Tector C., Turner R., Venter E., Wang A.H., Wang X.,
+RA   Wang Z.-Y., Wassarman D.A., Weinstock G.M., Weissenbach J.,
+RA   Williams S.M., Woodage T., Worley K.C., Wu D., Yang S., Yao Q.A.,
+RA   Ye J., Yeh R.-F., Zaveri J.S., Zhan M., Zhang G., Zhao Q., Zheng L.,
+RA   Zheng X.H., Zhong F.N., Zhong W., Zhou X., Zhu S.C., Zhu X.,
+RA   Smith H.O., Gibbs R.A., Myers E.W., Rubin G.M., Venter J.C.;
+RT   "The genome sequence of Drosophila melanogaster.";
+RL   Science 287:2185-2195(2000).
+RN   [4]
+RP   GENOME REANNOTATION.
+RX   MEDLINE=22426069; PubMed=12537572;
+RA   Misra S., Crosby M.A., Mungall C.J., Matthews B.B., Campbell K.S.,
+RA   Hradecky P., Huang Y., Kaminker J.S., Millburn G.H., Prochnik S.E.,
+RA   Smith C.D., Tupy J.L., Whitfield E.J., Bayraktaroglu L., Berman B.P.,
+RA   Bettencourt B.R., Celniker S.E., de Grey A.D.N.J., Drysdale R.A.,
+RA   Harris N.L., Richter J., Russo S., Schroeder A.J., Shu S.Q.,
+RA   Stapleton M., Yamada C., Ashburner M., Gelbart W.M., Rubin G.M.,
+RA   Lewis S.E.;
+RT   "Annotation of the Drosophila melanogaster euchromatic genome: a
+RT   systematic review.";
+RL   Genome Biol. 3:RESEARCH0083.1-RESEARCH0083.22(2002).
+RN   [5]
+RP   NUCLEOTIDE SEQUENCE [LARGE SCALE MRNA].
+RC   STRAIN=Berkeley;
+RX   MEDLINE=22426066; PubMed=12537569;
+RA   Stapleton M., Carlson J.W., Brokstein P., Yu C., Champe M.,
+RA   George R.A., Guarin H., Kronmiller B., Pacleb J.M., Park S., Wan K.H.,
+RA   Rubin G.M., Celniker S.E.;
+RT   "A Drosophila full-length cDNA resource.";
+RL   Genome Biol. 3:RESEARCH0080.1-RESEARCH0080.8(2002).
+CC   -!- FUNCTION: Binds stem loop II of U1 snRNA. It is the first snRNP to
+CC       interact with pre-mRNA. This interaction is required for the
+CC       subsequent binding of U2 snRNP and the U4/U6/U5 tri-snRNP (By
+CC       similarity). Plays a role in regulating sex-lethal splicing.
+CC   -!- SUBUNIT: Belongs to the spliceosome where it is associated with
+CC       snRNP U1.
+CC   -!- INTERACTION:
+CC       Q9V3N8:CG4103; NbExp=1; IntAct=EBI-174177, EBI-131989;
+CC   -!- SUBCELLULAR LOCATION: Nucleus.
+CC   -!- SIMILARITY: Belongs to the RRM U1 A/B'' family.
+CC   -!- SIMILARITY: Contains 2 RRM (RNA recognition motif) domains.
+CC   -----------------------------------------------------------------------
+CC   Copyrighted by the UniProt Consortium, see http://www.uniprot.org/terms
+CC   Distributed under the Creative Commons Attribution-NoDerivs License
+CC   -----------------------------------------------------------------------
+DR   EMBL; M89775; AAA28441.1; -; mRNA.
+DR   EMBL; L29521; AAA28903.1; -; Genomic_DNA.
+DR   EMBL; AE014298; AAF46017.1; -; Genomic_DNA.
+DR   EMBL; AY061491; AAL29039.1; -; mRNA.
+DR   PIR; A54279; A54279.
+DR   RefSeq; NP_511045.1; -.
+DR   UniGene; Dm.2625; -.
+DR   PDB; 2AYM; NMR; -; A=134-216.
+DR   PDB; 2B0G; NMR; -; A=134-216.
+DR   PDB; 2K3K; NMR; -; A=1-104.
+DR   PDBsum; 2AYM; -.
+DR   PDBsum; 2B0G; -.
+DR   PDBsum; 2K3K; -.
+DR   SMR; P43332; 1-104.
+DR   DIP; DIP-23676N; -.
+DR   IntAct; P43332; 3.
+DR   STRING; P43332; -.
+DR   PRIDE; P43332; -.
+DR   Ensembl; FBtr0070748; FBpp0070716; FBgn0003449; Drosophila melanogaster.
+DR   GeneID; 31442; -.
+DR   KEGG; dme:Dmel_CG4528; -.
+DR   NMPDR; fig|7227.3.peg.16553; -.
+DR   CTD; 31442; -.
+DR   FlyBase; FBgn0003449; snf.
+DR   InParanoid; P43332; -.
+DR   OMA; RSLHMIF; -.
+DR   OrthoDB; EOG9NKC31; -.
+DR   BioCyc; DMEL-XXX-02:DMEL-XXX-02-000654-MON; -.
+DR   NextBio; 773664; -.
+DR   Bgee; P43332; -.
+DR   GermOnline; CG4528; Drosophila melanogaster.
+DR   GO; GO:0043234; C:protein complex; IPI:FlyBase.
+DR   GO; GO:0030532; C:small nuclear ribonucleoprotein complex; IDA:FlyBase.
+DR   GO; GO:0005681; C:spliceosomal complex; IEA:UniProtKB-KW.
+DR   GO; GO:0000166; F:nucleotide binding; IEA:InterPro.
+DR   GO; GO:0005515; F:protein binding; IPI:IntAct.
+DR   GO; GO:0003723; F:RNA binding; IEA:UniProtKB-KW.
+DR   GO; GO:0019099; P:female germ-line sex determination; NAS:FlyBase.
+DR   GO; GO:0006397; P:mRNA processing; IEA:UniProtKB-KW.
+DR   GO; GO:0048477; P:oogenesis; IMP:FlyBase.
+DR   GO; GO:0007539; P:primary sex determination, soma; NAS:FlyBase.
+DR   GO; GO:0000381; P:regulation of alternative nuclear mRNA spli...; IMP:FlyBase.
+DR   GO; GO:0008380; P:RNA splicing; TAS:FlyBase.
+DR   InterPro; IPR012677; a_b_plait_nuc_bd.
+DR   InterPro; IPR000504; RRM_RNP1.
+DR   Gene3D; G3DSA:3.30.70.330; a_b_plait_nuc_bd; 2.
+DR   Pfam; PF00076; RRM_1; 2.
+DR   SMART; SM00360; RRM; 2.
+DR   PROSITE; PS50102; RRM; 2.
+PE   1: Evidence at protein level;
+KW   3D-structure; Complete proteome; mRNA processing; mRNA splicing;
+KW   Nucleus; Repeat; Ribonucleoprotein; RNA-binding; Spliceosome.
+FT   CHAIN         1    216       U1 small nuclear ribonucleoprotein A.
+FT                                /FTId=PRO_0000081890.
+FT   DOMAIN        7     86       RRM 1.
+FT   DOMAIN      142    216       RRM 2.
+FT   VARIANT      49     49       R -> H (in allele SNF1621; sterile).
+FT   STRAND        7     11
+FT   HELIX        20     30
+FT   HELIX        31     34
+FT   STRAND       37     41
+FT   HELIX        46     48
+FT   STRAND       52     58
+FT   HELIX        59     69
+FT   STRAND       73     78
+FT   STRAND       81     87
+FT   HELIX        88     95
+FT   TURN         97     99
+FT   STRAND      142    148
+FT   HELIX       155    162
+FT   STRAND      168    173
+FT   TURN        175    177
+FT   STRAND      179    186
+FT   HELIX       188    198
+FT   STRAND      201    204
+FT   STRAND      208    213
+SQ   SEQUENCE   216 AA;  24547 MW;  5B736FFE36523373 CRC64;
+     MEMLPNQTIY INNLNEKIKK EELKKSLYAI FSQFGQILDI VALKTLKMRG QAFVIFKEIG
+     SASNALRTMQ GFPFYDKPMQ IAYSKSDSDI VAKIKGTFKE RPKKVKPPKP APGTDEKKDK
+     KKKPSSAENS NPNAQTEQPP NQILFLTNLP EETNEMMLSM LFNQFPGFKE VRLVPNRHDI
+     AFVEFTTELQ SNAAKEALQG FKITPTHAMK ITFAKK
+//
diff --git a/formats/wag.dat b/formats/wag.dat
new file mode 100644
index 0000000..01e185e
--- /dev/null
+++ b/formats/wag.dat
@@ -0,0 +1,43 @@
+0.551571 
+0.509848  0.635346 
+0.738998  0.147304  5.429420 
+1.027040  0.528191  0.265256  0.0302949 
+0.908598  3.035500  1.543640  0.616783  0.0988179 
+1.582850  0.439157  0.947198  6.174160  0.021352  5.469470 
+1.416720  0.584665  1.125560  0.865584  0.306674  0.330052  0.567717 
+0.316954  2.137150  3.956290  0.930676  0.248972  4.294110  0.570025  0.249410 
+0.193335  0.186979  0.554236  0.039437  0.170135  0.113917  0.127395  0.0304501 0.138190 
+0.397915  0.497671  0.131528  0.0848047 0.384287  0.869489  0.154263  0.0613037 0.499462  3.170970 
+0.906265  5.351420  3.012010  0.479855  0.0740339 3.894900  2.584430  0.373558  0.890432  0.323832  0.257555 
+0.893496  0.683162  0.198221  0.103754  0.390482  1.545260  0.315124  0.174100  0.404141  4.257460  4.854020  0.934276 
+0.210494  0.102711  0.0961621 0.0467304 0.398020  0.0999208 0.0811339 0.049931  0.679371  1.059470  2.115170  0.088836  1.190630 
+1.438550  0.679489  0.195081  0.423984  0.109404  0.933372  0.682355  0.243570  0.696198  0.0999288 0.415844  0.556896  0.171329  0.161444 
+3.370790  1.224190  3.974230  1.071760  1.407660  1.028870  0.704939  1.341820  0.740169  0.319440  0.344739  0.967130  0.493905  0.545931  1.613280 
+2.121110  0.554413  2.030060  0.374866  0.512984  0.857928  0.822765  0.225833  0.473307  1.458160  0.326622  1.386980  1.516120  0.171903  0.795384  4.378020 
+0.113133  1.163920  0.0719167 0.129767  0.717070  0.215737  0.156557  0.336983  0.262569  0.212483  0.665309  0.137505  0.515706  1.529640  0.139405  0.523742  0.110864 
+0.240735  0.381533  1.086000  0.325711  0.543833  0.227710  0.196303  0.103604  3.873440  0.420170  0.398618  0.133264  0.428437  6.454280  0.216046  0.786993  0.291148  2.485390 
+2.006010  0.251849  0.196246  0.152335  1.002140  0.301281  0.588731  0.187247  0.118358  7.821300  1.800340  0.305434  2.058450  0.649892  0.314887  0.232739  1.388230  0.365369  0.314730 
+
+0.0866279 0.043972  0.0390894 0.0570451 0.0193078 0.0367281 0.0580589 0.0832518 0.0244313 0.048466  0.086209  0.0620286 0.0195027 0.0384319 0.0457631 0.0695179 0.0610127 0.0143859 0.0352742 0.0708956
+
+
+ A   R   N   D   C   Q   E   G   H   I   L   K   M   F   P   S   T   W   Y   V
+Ala Arg Asn Asp Cys Gln Glu Gly His Ile Leu Lys Met Phe Pro Ser Thr Trp Tyr Val
+
+  
+	Symmetrical part of the WAG rate matrix and aa frequencies,
+estimated from 3905 globular protein amino acid sequences forming 182
+protein families.
+	The first part above indicates the symmetric 'exchangeability'
+parameters, where s_ij = s_ji.  The s_ij above are not scaled, but the
+PAML package will perform this scaling.
+	The second part gives the amino acid frequencies (pi_i)
+estimated from the 3905 sequences.  The net replacement rate from i to
+j is Q_ij = s_ij*pi_j.
+	Prepared by Simon Whelan and Nick Goldman, December 2000.
+
+Citation:
+Whelan, S. and N. Goldman.  2001.  A general empirical model of
+	protein evolution derived from multiple protein families using
+	a maximum likelihood approach.  Molecular Biology and
+	Evolution 18:691-699.
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..f5061e7
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,295 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2003-09-24.23
+
+# 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.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=
+transform_arg=
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+
+usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
+   or: $0 -d DIR1 DIR2...
+
+In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
+In the second, create the directory path DIR.
+
+Options:
+-b=TRANSFORMBASENAME
+-c         copy source (using $cpprog) instead of moving (using $mvprog).
+-d         create directories instead of installing files.
+-g GROUP   $chgrp installed files to GROUP.
+-m MODE    $chmod installed files to MODE.
+-o USER    $chown installed files to USER.
+-s         strip installed files (using $stripprog).
+-t=TRANSFORM
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+  case $1 in
+    -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+        shift
+        continue;;
+
+    -c) instcmd=$cpprog
+        shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit 0;;
+
+    -m) chmodcmd="$chmodprog $2"
+        shift
+        shift
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+        shift
+        continue;;
+
+    --version) echo "$0 $scriptversion"; exit 0;;
+
+    *)  if test -z "$src"; then
+          src=$1
+        else
+          # this colon is to work around a 386BSD /bin/sh bug
+          :
+          dst=$1
+        fi
+        shift
+        continue;;
+  esac
+done
+
+if test -z "$src"; then
+  echo "$0: no input file specified." >&2
+  exit 1
+fi
+
+# Protect names starting with `-'.
+case $src in
+  -*) src=./$src ;;
+esac
+
+if test -n "$dir_arg"; then
+  dst=$src
+  src=
+
+  if test -d "$dst"; then
+    instcmd=:
+    chmodcmd=
+  else
+    instcmd=$mkdirprog
+  fi
+else
+  # Waiting for this to be detected by the "$instcmd $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"; then
+    echo "$0: no destination specified." >&2
+    exit 1
+  fi
+
+  # Protect names starting with `-'.
+  case $dst in
+    -*) dst=./$dst ;;
+  esac
+
+  # If destination is a directory, append the input filename; won't work
+  # if double slashes aren't ignored.
+  if test -d "$dst"; then
+    dst=$dst/`basename "$src"`
+  fi
+fi
+
+# This sed command emulates the dirname command.
+dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+
+# Skip lots of stat calls in the usual case.
+if test ! -d "$dstdir"; then
+  defaultIFS='
+	'
+  IFS="${IFS-$defaultIFS}"
+
+  oIFS=$IFS
+  # Some sh's can't handle IFS=/ for some reason.
+  IFS='%'
+  set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+  IFS=$oIFS
+
+  pathcomp=
+
+  while test $# -ne 0 ; do
+    pathcomp=$pathcomp$1
+    shift
+    test -d "$pathcomp" || $mkdirprog "$pathcomp"
+    pathcomp=$pathcomp/
+  done
+fi
+
+if test -n "$dir_arg"; then
+  $doit $instcmd "$dst" \
+    && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+    && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+    && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+    && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+else
+  # If we're going to rename the final executable, determine the name now.
+  if test -z "$transformarg"; then
+    dstfile=`basename "$dst"`
+  else
+    dstfile=`basename "$dst" $transformbasename \
+             | sed $transformarg`$transformbasename
+  fi
+
+  # don't allow the sed command to completely eliminate the filename.
+  test -z "$dstfile" && dstfile=`basename "$dst"`
+
+  # 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 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Move or copy the file name to the temp name
+  $doit $instcmd "$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 $instcmd $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 "$dsttmp"; } &&
+
+  # 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.
+  {
+    if test -f "$dstdir/$dstfile"; then
+      $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+      || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+      || {
+	  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+	  (exit 1); exit
+      }
+    else
+      :
+    fi
+  } &&
+
+  # Now rename the file to the real destination.
+  $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+fi &&
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+  (exit 0); exit
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/interface_gsl.c b/interface_gsl.c
new file mode 100644
index 0000000..bda7c3a
--- /dev/null
+++ b/interface_gsl.c
@@ -0,0 +1,60 @@
+/* Easel's interfaces to the GNU Scientific Library
+ */
+#ifdef HAVE_LIBGSL
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include "easel/easel.h"
+#include "easel/dmatrix.h"
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_blas.h>
+#include <gsl/gsl_permutation.h>
+#include <gsl/gsl_eigen.h>
+
+int
+esl_GSL_MatrixInversion(ESL_DMATRIX *A, ESL_DMATRIX **ret_Ai)
+{
+  ESL_DMATRIX     *Ai;          /* RETURN: A^{-1}             */
+  gsl_matrix_view  Av;          /* gsl view of matrix A       */
+  gsl_matrix      *LU;          /* LU decomposition of A      */
+  gsl_matrix      *Aiv;         /* gsl version of A^{-1}      */
+  gsl_permutation *permute;
+  int              signum;
+  int              i,j;
+  
+  Ai = esl_dmx_Alloc(A->n, A->m);
+
+  /* Invert U to get Ui, using LU decomposition.
+   */
+  Av      = gsl_matrix_view_array(A->mx[0], A->n, A->n);
+  LU      = gsl_matrix_alloc(A->n, A->n);
+  Aiv     = gsl_matrix_alloc(A->n, A->n); /* U^{-1}: inverse of U    */
+  permute = gsl_permutation_alloc(A->n);
+  gsl_matrix_memcpy(LU, &Av.matrix);
+
+  if (gsl_linalg_LU_decomp(LU, permute, &signum) != 0) ESL_EXCEPTION(eslEUNKNOWN, "gsl failed");
+  if (gsl_linalg_LU_invert(LU, permute, Aiv) != 0)     ESL_EXCEPTION(eslEUNKNOWN, "gsl failed");
+
+  gsl_matrix_free(LU);
+  gsl_permutation_free(permute);
+
+  /* recover the matrix from gsl.
+   */
+  for (i = 0; i < A->n; i++)
+    for (j = 0; j < A->n; j++)
+      Ai->mx[i][j] = gsl_matrix_get(Aiv, i, j);
+  gsl_matrix_free(Aiv);
+  
+  ret->Ai = Ai;
+  return eslOK;
+}
+
+#endif /*HAVE_LIBGSL*/
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
diff --git a/interface_gsl.h b/interface_gsl.h
new file mode 100644
index 0000000..1cb68b2
--- /dev/null
+++ b/interface_gsl.h
@@ -0,0 +1,24 @@
+#ifdef HAVE_LIBGSL
+/* interface_gsl.h
+ * Easel's interfaces to the GNU Scientific Library
+ * 
+ * SRE, Tue Jul 13 15:36:48 2004
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslINTERFACE_GSL_INCLUDED
+#define eslINTERFACE_GSL_INCLUDED
+
+#include <stdlib.h>
+#include <easel/easel.h>
+#include <easel/dmatrix.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_blas.h>
+#include <gsl/gsl_permutation.h>
+#include <gsl/gsl_eigen.h>
+
+extern int esl_GSL_MatrixInversion(ESL_DMATRIX *A, ESL_DMATRIX **ret_Ai);
+
+
+#endif /*eslINTERFACE_GSL_INCLUDED*/
+#endif /*HAVE_LIBGSL*/
diff --git a/interface_lapack.c b/interface_lapack.c
new file mode 100644
index 0000000..5fad42f
--- /dev/null
+++ b/interface_lapack.c
@@ -0,0 +1,91 @@
+/* Interface with the LAPACK (Fortran77) numerical library.
+ */
+#ifdef HAVE_LIBLAPACK
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include "easel/easel.h"
+#include "easel/dmatrix.h"
+#include "easel/interface_lapack.h"
+
+/* A:       nxn real matrix
+ * ret_Er:  RETURN: vector of eigenvalues, real part, allocated 0..n-1
+ * ret_Ei:  RETURN: vector of eigenvalues, imaginary part, allocated 0..n-1
+ * ret_VL:  RETURN: left eigenvectors
+ * ret_VR:  RETURN: right eigenvectors
+ */
+int
+esl_lapack_dgeev(ESL_DMATRIX *A, double **ret_Er, double **ret_Ei, ESL_DMATRIX **ret_VL, ESL_DMATRIX **ret_VR)
+{
+  double      *Er   = NULL;
+  double      *Ei   = NULL;
+  ESL_DMATRIX *VL   = NULL;
+  ESL_DMATRIX *VR   = NULL;
+  double      *work = NULL;
+  char   jobvl, jobvr;
+  int    lda;
+  int    ldvl, ldvr;
+  int    lwork;
+  int    info;
+  int    status;
+
+  if ((VL = esl_dmatrix_Create(A->n,A->n)) == NULL)       { status = eslEMEM; goto ERROR; }
+  if ((VR = esl_dmatrix_Create(A->n,A->n)) == NULL)       { status = eslEMEM; goto ERROR; }
+  ESL_ALLOC(Er,   sizeof(double) * A->n);
+  ESL_ALLOC(Ei,   sizeof(double) * A->n);
+  ESL_ALLOC(work, sizeof(double) * 4 * A->n);
+
+  jobvl = (ret_VL == NULL) ? 'N' : 'V';	/* do we want left eigenvectors? */
+  jobvr = (ret_VR == NULL) ? 'N' : 'V'; /* do we want right eigenvectors? */
+  lda   = A->n; 
+  ldvl  = A->n;
+  ldvr  = A->n;
+  lwork = 4*A->n;
+
+  /* Fortran convention is colxrow, not rowxcol; so transpose
+   * A before passing it to a Fortran routine.
+   */
+  esl_dmx_Transpose(A);
+
+  /* The actual Fortran77 interface call to LAPACK.
+   * All args must be passed by reference.
+   * Fortran 2D arrays are 1D: so pass the A[0] part of a DSMX.
+   */
+  dgeev_(&jobvl, &jobvr, &(A->n), A->mx[0], &lda, Er, Ei, VL->mx[0], &ldvl, VR->mx[0], &ldvr, work, &lwork, &info);
+
+  /* Now, VL, VR are transposed (col x row), so transpose them back to
+   * C convention.
+   */
+  esl_dmx_Transpose(VL);
+  esl_dmx_Transpose(VR);
+
+  if (ret_VL != NULL) *ret_VL = VL; else esl_dmatrix_Destroy(VL);
+  if (ret_VR != NULL) *ret_VR = VR; else esl_dmatrix_Destroy(VR);
+  if (ret_Er != NULL) *ret_Er = Er; else free(Er);
+  if (ret_Ei != NULL) *ret_Ei = Ei; else free(Ei);
+  free(work);
+  return eslOK;
+
+ ERROR:
+  if (ret_VL != NULL) *ret_VL = NULL;
+  if (ret_VR != NULL) *ret_VR = NULL;
+  if (ret_Er != NULL) *ret_Er = NULL;
+  if (ret_Ei != NULL) *ret_Ei = NULL;
+  if (VL   != NULL) free(VL);
+  if (VR   != NULL) free(VR);
+  if (Er   != NULL) free(Er);
+  if (Ei   != NULL) free(Ei);
+  if (work != NULL) free(work);
+  return status;
+}
+
+
+#endif /*HAVE_LIBLAPACK*/
+
+/*****************************************************************
+ * @LICENSE@
+ *
+ * SVN $Id$
+ * SVN $URL$
+ *****************************************************************/
+
diff --git a/interface_lapack.h b/interface_lapack.h
new file mode 100644
index 0000000..152f34e
--- /dev/null
+++ b/interface_lapack.h
@@ -0,0 +1,24 @@
+#ifdef HAVE_LIBLAPACK
+/* interface_lapack.h
+ * 
+ * SRE, Tue Jul 13 15:11:51 2004 [St. Louis]
+ * SVN $Id$
+ * SVN $URL$
+ */
+#ifndef eslINTERFACE_LAPACK_INCLUDED
+#define eslINTERFACE_LAPACK_INCLUDED
+
+/* This is the C interface to the Fortran77 dgeev routine,
+ * provided by the LAPACK library:
+ */
+extern void  dgeev_(char *jobvl, char *jobvr, int *n, double *a,
+                    int *lda, double *wr, double *wi, double *vl,
+                    int *ldvl, double *vr, int *ldvr,
+                    double *work, int *lwork, int *info);
+
+/* and this is our C interface to the lapack call:
+ */
+extern int esl_lapack_dgeev(ESL_DMATRIX *A, double **ret_Er, double **ret_Ei, ESL_DMATRIX **ret_VL, ESL_DMATRIX **ret_VR);
+
+#endif /*eslINTERFACE_LAPACK_INCLUDED*/
+#endif /*HAVE_LIBLAPACK*/
diff --git a/makeTAGS.sh b/makeTAGS.sh
new file mode 100755
index 0000000..e9e03b0
--- /dev/null
+++ b/makeTAGS.sh
@@ -0,0 +1,15 @@
+#! /bin/sh
+etags    configure.ac
+etags -a INSTALL
+etags -a LICENSE
+
+
+# Recursively add all .c, .h, .pl, *.tex, *.man
+find . -name "*.c"   -print -or -name "*.h"  -print | xargs etags -a
+find . -name "*.pl"  -print -or -name "*.pm" -print | xargs etags -a
+find . -name "*.sh"  -print                         | xargs etags -a
+find . -name "*.tex" -print                         | xargs etags -a
+find . -name "*.man" -print                         | xargs etags -a
+find . -name "*.in"  -print                         | xargs etags -a
+find . -name "*.sqc" -print                         | xargs etags -a
+find . -name "*README"    -print                    | xargs etags -a
diff --git a/miniapps/Makefile.in b/miniapps/Makefile.in
new file mode 100644
index 0000000..071b2ec
--- /dev/null
+++ b/miniapps/Makefile.in
@@ -0,0 +1,152 @@
+top_srcdir = @top_srcdir@
+srcdir     = @srcdir@
+VPATH      = @srcdir@ 
+SHELL      = /bin/sh
+
+# Package information
+#
+PACKAGE         = @PACKAGE_NAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+BASENAME        = @PACKAGE_TARNAME@
+RELEASE         = @EASEL_VERSION@
+RELEASEDATE     = "@EASEL_DATE@"
+COPYRIGHT       = "@EASEL_COPYRIGHT@"
+LICENSELINE     = "@EASEL_LICENSE@"
+
+## Installation targets
+#
+prefix      = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+bindir      = @bindir@
+libdir      = @libdir@
+includedir  = @includedir@
+mandir      = @mandir@
+docdir      = @docdir@
+pdfdir      = @pdfdir@
+mandir      = @mandir@
+man1dir     = ${mandir}/man1
+man1ext     = .1
+
+INSTALL     = @INSTALL@
+
+## your compiler and compiler flags.
+#
+CC        = @CC@
+CFLAGS    = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@
+SIMDFLAGS = @SIMD_CFLAGS@
+CPPFLAGS  = @CPPFLAGS@
+LDFLAGS   = @LDFLAGS@
+DEFS      = @DEFS@
+LIBS      = -leasel @LIBGSL@ @LIBS@ @PTHREAD_LIBS@ -lm
+
+## list of the miniapps to compile.
+#
+PROGS = esl-afetch\
+	esl-alimanip\
+	esl-alimap\
+	esl-alimask\
+	esl-alimerge\
+	esl-alipid\
+	esl-alirev\
+	esl-alistat\
+	esl-cluster\
+	esl-compalign\
+	esl-compstruct\
+	esl-construct\
+	esl-histplot\
+	esl-mask\
+	esl-reformat\
+	esl-selectn\
+	esl-seqrange\
+	esl-seqstat\
+	esl-sfetch\
+	esl-shuffle\
+	esl-ssdraw\
+        esl-translate\
+	esl-weight
+
+PROGOBJS =\
+	esl-afetch.o\
+	esl-alimanip.o\
+	esl-alimap.o\
+	esl-alimask.o\
+	esl-alimerge.o\
+	esl-alipid.o\
+	esl-alirev.o\
+	esl-alistat.o\
+	esl-cluster.o\
+	esl-compalign.o\
+	esl-compstruct.o\
+	esl-construct.o\
+	esl-histplot.o\
+	esl-mask.o\
+	esl-reformat.o\
+	esl-selectn.o\
+	esl-seqrange.o\
+	esl-seqstat.o\
+	esl-sfetch.o\
+	esl-shuffle.o\
+	esl-ssdraw.o\
+        esl-translate.o\
+	esl-weight.o
+
+
+# beautification magic stolen from git 
+#
+QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c
+QUIET_SUBDIR1 = 
+ifndef V
+	QUIET_CC      = @echo '    ' CC $@;
+	QUIET_GEN     = @echo '    ' GEN $@;
+	QUIET_AR      = @echo '    ' AR $@;
+	QUIET_SUBDIR0 = + at subdir=
+	QUIET_SUBDIR1 = ; echo '    ' SUBDIR  $$subdir; \
+		        ${MAKE} -C $$subdir
+endif
+
+
+.PHONY: all dev tests check install uninstall clean distclean 
+
+all: 	${PROGS}
+dev:    ${PROGS}
+tests:  ${PROGS}
+check:  ${PROGS}
+
+${PROGS}: @EXEC_DEPENDENCY@ ../libeasel.a 
+	${QUIET_GEN}${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -L.. -o $@ $@.o ${LIBS}
+
+${PROGOBJS}: ../libeasel.a 
+
+.c.o: ../libeasel.a 
+	${QUIET_CC}${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} -I. -I.. -I${srcdir} -I${srcdir}/.. -o $@ -c $<
+
+install:
+	for file in ${PROGS}; do \
+	   ${INSTALL} -m 0755 $$file ${DESTDIR}${bindir}/ ;\
+	done
+
+uninstall:
+	for file in $(PROGS); do \
+	   rm ${DESTDIR}${bindir}/$$file ;\
+	done
+
+clean:
+	-rm -f ${PROGS}
+	-rm -f *.o *~
+	-rm -f *.gcno *.gcda *.gcov
+	-rm -f TAGS
+	for prog in ${PROGS}; do\
+	   if test -d $$prog.dSYM; then rm -rf $$prog.dSYM; fi;\
+	done
+
+
+distclean: clean
+	-rm -f ${PROGS}
+	-rm Makefile
+
+
+################################################################
+# @LICENSE@
+################################################################
diff --git a/miniapps/esl-afetch.c b/miniapps/esl-afetch.c
new file mode 100644
index 0000000..6059c06
--- /dev/null
+++ b/miniapps/esl-afetch.c
@@ -0,0 +1,373 @@
+/* Fetch an MSA from a multi-MSA database (such as Pfam or Rfam).
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_fileparser.h"
+#include "esl_keyhash.h"
+#include "esl_mem.h"
+#include "esl_ssi.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+
+
+static char banner[] = "retrieve multiple sequence alignment(s) from a file";
+static char usage1[] = "[options] <msafile> <name>         (retrieves one alignment named <name>)";
+static char usage2[] = "[options] -f <msafile> <namefile>  (retrieves all alignments named in <namefile>)";
+static char usage3[] = "[options] --index <msafile>        (indexes <msafile>)";
+
+static void
+cmdline_failure(char *argv0, char *format, ...) 
+{
+  va_list argp;
+
+  va_start(argp, format);
+  vfprintf(stderr, format, argp);
+  va_end(argp);
+  esl_usage(stdout, argv0, usage1);
+  esl_usage(stdout, argv0, usage2);
+  esl_usage(stdout, argv0, usage3);
+  printf("\nTo see more help on available options, do %s -h\n\n", argv0);
+  exit(1);
+}
+
+static void
+cmdline_help(char *argv0, ESL_GETOPTS *go) 
+{
+  esl_banner(stdout, argv0, banner);
+  esl_usage (stdout, argv0, usage1);
+  esl_usage (stdout, argv0, usage2);
+  esl_usage (stdout, argv0, usage3);
+  puts("\n where options are:");
+  esl_opt_DisplayHelp(stdout, go, 0, 2, 80);
+  exit(0);
+}
+
+static ESL_OPTIONS options[] = {
+  /* name             type           default env   range togs  reqs  incomp      help                                                   docgroup */
+  { "-h",         eslARG_NONE,        FALSE, NULL, NULL, NULL, NULL, NULL,          "help; show brief info on version and usage",        0 },
+  { "-f",         eslARG_NONE,        FALSE, NULL, NULL, NULL, NULL,"--index",      "second cmdline arg is a file of names to retrieve", 0 },
+  { "-o",         eslARG_OUTFILE,     FALSE, NULL, NULL, NULL, NULL,"-O,--index",   "output alignments to file <f> instead of stdout",   0 },
+  { "-O",         eslARG_NONE,        FALSE, NULL, NULL, NULL, NULL,"-o,-f,--index","output alignment to file named <key>",              0 },
+  { "--informat", eslARG_STRING,      FALSE, NULL, NULL, NULL, NULL, NULL,          "specify that <msafile> is in format <s>",           0 },
+  { "--outformat",eslARG_STRING,"Stockholm", NULL, NULL, NULL, NULL, "--index",     "output fetched alignment(s) in format <s>",         0 },
+  { "--index",    eslARG_NONE,        FALSE, NULL, NULL, NULL, NULL, NULL,          "index the <msafile>, creating <msafile>.ssi",       0 },
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+static void create_ssi_index(ESL_GETOPTS *go, ESL_MSAFILE *afp);
+static void multifetch(ESL_GETOPTS *go, FILE *ofp, int outfmt, char *keyfile, ESL_MSAFILE *afp);
+static void onefetch  (ESL_GETOPTS *go, FILE *ofp, int outfmt, char *key,     ESL_MSAFILE *afp);
+static void regurgitate_one_stockholm_entry(FILE *ofp,                        ESL_MSAFILE *afp);
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go      = NULL;	               /* application configuration       */
+  char         *alifile = NULL;	               /* alignment file name             */
+  int           infmt   = eslMSAFILE_UNKNOWN;  /* format code for alifile         */
+  int           outfmt  = eslMSAFILE_UNKNOWN;  /* output format for fetched msa's */
+  ESL_MSAFILE  *afp     = NULL;	               /* open alignment file             */
+  FILE         *ofp     = NULL;	               /* output stream for alignments    */
+  int           status;		               /* easel return code               */
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n",       go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") )                   cmdline_help   (argv[0], go);
+  if (esl_opt_ArgNumber(go) < 1)                       cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");        
+
+  if (esl_opt_IsOn(go, "--informat")) {
+    infmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"));
+    if (infmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input alignment file format for --informat", esl_opt_GetString(go, "--informat")); 
+  }
+
+  outfmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat")); 
+  if (outfmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid output alignment file format for --outformat", esl_opt_GetString(go, "--outformat")); 
+
+  alifile = esl_opt_GetArg(go, 1);
+  
+  /* Open the alignment file.  */
+  if ( (status  = esl_msafile_Open(NULL, alifile, NULL, infmt, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+
+  /* Open the SSI index, if any */
+  if (! esl_opt_GetBoolean(go, "--index")) 
+    {
+      if (afp->bf->mode_is == eslBUFFER_FILE    ||
+	  afp->bf->mode_is == eslBUFFER_ALLFILE ||
+	  afp->bf->mode_is == eslBUFFER_MMAP)
+	{
+	  char *ssifile = NULL;
+	  esl_sprintf(&ssifile, "%s.ssi", afp->bf->filename);
+      
+	  status = esl_ssi_Open(ssifile, &(afp->ssi));
+	  if      (status == eslERANGE )   esl_fatal("SSI index %s has 64-bit offsets; this system doesn't support them", ssifile);
+	  else if (status == eslEFORMAT)   esl_fatal("SSI index %s has an unrecognized format. Try recreating, w/ esl-afetch --index", ssifile);
+	  else if (status == eslENOTFOUND) afp->ssi = NULL;
+	  else if (status != eslOK)        esl_fatal("SSI index %s: open failed, error code %d\n", ssifile, status);
+	  
+	  free(ssifile);
+	}
+    }
+
+  /* Open the output file, if any
+   */
+  if (esl_opt_GetBoolean(go, "-O")) 
+    {
+      if ((ofp = fopen(esl_opt_GetArg(go, 2), "w")) == NULL)
+	esl_fatal("Failed to open output file %s\n", esl_opt_GetArg(go, 2));
+    }
+  else if (esl_opt_GetString(go, "-o") != NULL)
+    {
+      if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL)
+	esl_fatal("Failed to open output file %s\n", esl_opt_GetString(go, "-o"));
+    }
+  else ofp = stdout;
+
+  /* Hand off control flow as appropriate */
+  if (esl_opt_GetBoolean(go, "--index")) 
+    {
+      if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");        
+      create_ssi_index(go, afp);
+    }
+  else if (esl_opt_GetBoolean(go, "-f"))
+    {
+      if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");        
+      multifetch(go, ofp, outfmt, esl_opt_GetArg(go, 2), afp);
+    }
+  else 
+    {
+      if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");        
+      onefetch(go, ofp, outfmt, esl_opt_GetArg(go, 2), afp);
+      if (ofp != stdout) printf("\n\nRetrieved alignment %s.\n",  esl_opt_GetArg(go, 2));
+    }
+
+  esl_msafile_Close(afp);
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+  
+
+/* Create an SSI index file for open MSA file <afp>.
+ * Both name and accession of MSAs are stored as keys.
+ */
+static void
+create_ssi_index(ESL_GETOPTS *go, ESL_MSAFILE *afp)
+{
+  ESL_NEWSSI *ns      = NULL;
+  ESL_MSA    *msa     = NULL;
+  int         nali    = 0;
+  char       *ssifile = NULL;
+  uint16_t    fh;
+  int         status;
+
+  if (afp->bf->mode_is != eslBUFFER_FILE &&
+      afp->bf->mode_is != eslBUFFER_ALLFILE &&
+      afp->bf->mode_is != eslBUFFER_MMAP)
+    esl_fatal("<msafile> must be a regular file to be SSI indexed");
+
+  esl_sprintf(&ssifile, "%s.ssi", afp->bf->filename);
+
+  status = esl_newssi_Open(ssifile, FALSE, &ns);
+  if      (status == eslENOTFOUND)   esl_fatal("failed to open SSI index %s", ssifile);
+  else if (status == eslEOVERWRITE)  esl_fatal("SSI index %s already exists; delete or rename it", ssifile);
+  else if (status != eslOK)          esl_fatal("failed to create a new SSI index");
+
+  if (esl_newssi_AddFile(ns, afp->bf->filename, afp->format, &fh) != eslOK)
+    esl_fatal("Failed to add MSA file %s to new SSI index\n", afp->bf->filename);
+
+  printf("Working...    "); 
+  fflush(stdout);
+  
+  while ((status = esl_msafile_Read(afp, &msa)) != eslEOF)
+    {
+      if (status != eslOK) 
+	esl_msafile_ReadFailure(afp, status);
+
+      nali++;
+
+      if (! msa->name)
+	esl_fatal("Every alignment in file must have a name to be indexed. Failed to find name of alignment #%d\n", nali);
+
+      if (esl_newssi_AddKey(ns, msa->name, fh, msa->offset, 0, 0) != eslOK) 
+	esl_fatal("Failed to add key %s to SSI index", msa->name);
+
+      if (msa->acc && esl_newssi_AddAlias(ns, msa->acc, msa->name) != eslOK)
+	esl_fatal("Failed to add secondary key %s to SSI index", msa->acc);
+      
+      esl_msa_Destroy(msa);
+    }
+  
+  if (esl_newssi_Write(ns) != eslOK) 
+    esl_fatal("Failed to write keys to ssi file %s\n", ssifile);
+
+  printf("done.\n");
+
+  if (ns->nsecondary) printf("Indexed %d alignments (%ld names and %ld accessions).\n", nali, (long) ns->nprimary, (long) ns->nsecondary);
+  else                printf("Indexed %d alignments (%ld names).\n", nali, (long) ns->nprimary);
+  printf("SSI index written to file %s\n", ssifile);
+
+  free(ssifile);
+  esl_newssi_Close(ns);
+  return;
+}  
+
+/* multifetch:
+ * given a file containing lines with one name or key per line;
+ * parse the file line-by-line;
+ * if we have an SSI index available, retrieve the MSAs by key
+ * as we see each line;
+ * else, without an SSI index, store the keys in a hash, then
+ * read the entire MSA file in a single pass, outputting MSAs
+ * that are in our keylist. 
+ * 
+ * Note that with an SSI index, you get the MSAs in the order they
+ * appear in the <keyfile>, but without an SSI index, you get MSAs in
+ * the order they occur in the MSA file.
+ */
+static void
+multifetch(ESL_GETOPTS *go, FILE *ofp, int outfmt, char *keyfile, ESL_MSAFILE *afp)
+{
+  ESL_KEYHASH    *keys   = esl_keyhash_Create();
+  ESL_FILEPARSER *efp    = NULL;
+  ESL_MSA        *msa    = NULL;
+  int             nali   = 0;
+  char           *key;
+  int             keylen;
+  int             keyidx;
+  int             status;
+  
+  if (esl_fileparser_Open(keyfile, NULL, &efp) != eslOK) 
+    esl_fatal("Failed to open key file %s\n", keyfile);
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  while (esl_fileparser_NextLine(efp) == eslOK)
+    {
+      if (esl_fileparser_GetTokenOnLine(efp, &key, &keylen) != eslOK)
+	esl_fatal("Failed to read MSA name on line %d of file %s\n", efp->linenumber, keyfile);
+      
+      status = esl_keyhash_Store(keys, key, keylen, &keyidx);
+      if (status == eslEDUP) esl_fatal("MSA key %s occurs more than once in file %s\n", key, keyfile);
+	
+      if (afp->ssi) { onefetch(go, ofp, outfmt, key, afp);  nali++; }
+
+    }
+
+  if (! afp->ssi)
+    {
+      while ((status = esl_msafile_Read(afp, &msa)) != eslEOF)
+	{
+	  if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+	  nali++;
+
+	  if (msa->name == NULL) 
+	    esl_fatal("Every alignment in file must have a name to be retrievable. Failed to find name of alignment #%d\n", nali);
+
+	  if ( (esl_keyhash_Lookup(keys, msa->name, -1, NULL) == eslOK) ||
+	       (msa->acc != NULL && esl_keyhash_Lookup(keys, msa->acc, -1, NULL) == eslOK))
+	    esl_msafile_Write(ofp, msa, outfmt);
+
+	  esl_msa_Destroy(msa);
+	}
+    }
+  
+  if (ofp != stdout) printf("\nRetrieved %d alignments.\n", nali);
+  esl_keyhash_Destroy(keys);
+  esl_fileparser_Close(efp);
+  return;
+}
+
+  
+/* onefetch():
+ * Given one <key> (an MSA name or accession), retrieve the corresponding MSA.
+ * In SSI mode, we can do this quickly by positioning the file, then regurgitating
+ * every line until the end-of-alignment marker; we don't even have to parse.
+ * Without an SSI index, we have to parse the MSAs sequentially 'til we find
+ * the one we're after.
+ */
+static void
+onefetch(ESL_GETOPTS *go, FILE *ofp, int outfmt, char *key, ESL_MSAFILE *afp)
+{
+  ESL_MSA *msa  = NULL;
+  int      nali = 1;
+  int      status;
+
+  if (afp->ssi)
+    {
+      status = esl_msafile_PositionByKey(afp, key);
+      if      (status == eslENOTFOUND) esl_fatal("MSA %s not found in SSI index for file %s\n", key, afp->bf->filename);
+      else if (status == eslEFORMAT)   esl_fatal("Failed to parse SSI index for %s\n", afp->bf->filename);
+      else if (status != eslOK)        esl_fatal("Failed to look up location of MSA %s in SSI index of file %s\n", key, afp->bf->filename);
+      
+      if ( (afp->format == eslMSAFILE_STOCKHOLM && outfmt == eslMSAFILE_STOCKHOLM) ||
+	   (afp->format == eslMSAFILE_PFAM      && outfmt == eslMSAFILE_PFAM))
+	{
+	  regurgitate_one_stockholm_entry(ofp, afp);
+	}
+      else
+	{
+	  if ((status = esl_msafile_Read(afp, &msa)) != eslOK)
+	    esl_msafile_ReadFailure(afp, status);
+	  
+	  esl_msafile_Write(ofp, msa, outfmt);
+	  esl_msa_Destroy(msa);
+	}
+    }
+  else
+    { /* without an index, we have to brute-force search the file */
+      while ((status = esl_msafile_Read(afp, &msa)) != eslEOF)
+	{
+	  if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+	  if (! msa->name)
+	    esl_fatal("Every alignment in file must have a name to be retrievable. Failed to find name of alignment #%d\n", nali);
+
+	  if (strcmp(key, msa->name) == 0 || (msa->acc != NULL && strcmp(key, msa->acc) == 0))
+	    break;
+
+	  nali++;
+	  esl_msa_Destroy(msa);
+	}
+
+      if (! msa) esl_fatal("Failed to find alignment %s\n", key);
+
+      esl_msafile_Write(ofp, msa, outfmt);
+      esl_msa_Destroy(msa);
+    }
+}
+
+
+/* regurgitate_one_stockholm_entry()
+ * Read and output an alignment line-by-line without parsing it, stopping when
+ * we reach the end-of-alignment marker.
+ */
+static void
+regurgitate_one_stockholm_entry(FILE *ofp, ESL_MSAFILE *afp)
+{
+  char      *p;
+  esl_pos_t  n;
+  int        status;
+
+  while ( (status = esl_msafile_GetLine(afp, &p, &n)) == eslOK)
+    {
+      fwrite(p, sizeof(char), n, ofp);
+      fputs("\n", ofp);
+      if (esl_memstrpfx(p, n, "//")) break;
+    }
+  if      (status == eslEOF) esl_fatal("Reached end of file before finding // termination line for alignment");
+  else if (status != eslOK)  esl_fatal("Failure in reading alignment line by line");
+}
+  
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/miniapps/esl-afetch.itest.pl b/miniapps/esl-afetch.itest.pl
new file mode 100755
index 0000000..18c536f
--- /dev/null
+++ b/miniapps/esl-afetch.itest.pl
@@ -0,0 +1,147 @@
+#! /usr/bin/perl
+
+# Testing the esl-afetch miniapp
+#
+# Usage:    ./esl-afetch.itest.pl <esl-afetch binary> <tmpfile prefix>
+# Example:  ./esl-afetch.itest.pl ./esl-afetch        foo
+#
+# SRE, Fri Nov 11 09:16:49 2011
+# SVN $Id$
+
+$esl_afetch = shift;
+$tmppfx     = shift;
+
+if (! -x "$esl_afetch") { die "FAIL: didn't find esl-afetch binary $esl_afetch"; }
+
+# Existence of a previous .ssi index will screw up this test.
+if (  -e "$tmppfx.sto.ssi") { unlink "$tmppfx.sto.ssi"; }
+
+open(TESTALI, ">$tmppfx.sto") || die "FAIL: couldn't open $tmppfx.sto for writing test ali file";
+print TESTALI << "EOF";
+# STOCKHOLM 1.0
+#=GF ID foo
+#=GF AC XX00001.1
+seq1  AAAAAAAAAACCCCCCCCCC
+seq2  AAAAAAAAAACCCCCCCCCC
+//
+# STOCKHOLM 1.0
+#=GF ID bar
+#=GF AC XX00002.2
+seq3  DDDDDDDDDDEEEEEEEEEE
+seq4  DDDDDDDDDDEEEEEEEEEE
+//
+# STOCKHOLM 1.0
+#=GF ID $tmppfx.name
+seq3  XXXXXXXXXXXXXXXXXXXX
+seq4  XXXXXXXXXXXXXXXXXXXX
+//
+# STOCKHOLM 1.0
+#=GF ID baz
+#=GF AC XX00003.3
+seq5  FFFFFFFFFFGGGGGGGGGG
+seq6  FFFFFFFFFFGGGGGGGGGG
+//
+EOF
+close TESTFILE;
+
+
+open(TESTLIST, ">$tmppfx.list") || die "FAIL: couldn't open $tmppfx.list for writing test name list";
+print TESTLIST << "EOF";
+baz
+foo
+EOF
+close TESTLIST;
+
+
+
+
+# First, test without an SSI index...
+#
+ at output = `$esl_afetch $tmppfx.sto baz`;
+if ($? != 0)                       { die "FAIL: esl-afetch failed, returned nonzero"; }
+if ($output[1] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($output[6] !~ /^\/\/$/)        { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($#output != 6)                 { die "FAIL: esl-afetch fetched incorrectly";      }
+
+ at output = `$esl_afetch $tmppfx.sto XX00003.3`;
+if ($? != 0)                       { die "FAIL: esl-afetch failed, returned nonzero"; }
+if ($output[1] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($output[6] !~ /^\/\/$/)        { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($#output != 6)                 { die "FAIL: esl-afetch fetched incorrectly";      }
+
+# Without SSI, when fetching from a list, MSAs are in order of .sto file, not .list file
+ at output = `$esl_afetch -f $tmppfx.sto $tmppfx.list`;               
+if ($? != 0)                       { die "FAIL: esl-afetch failed, returned nonzero"; }
+if ($output[1] !~ /^#=GF ID foo$/) { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($output[8] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($#output != 13)                { die "FAIL: esl-afetch fetched incorrectly";      }
+
+ at output = `$esl_afetch -O $tmppfx.sto $tmppfx.name`;                 if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; }
+ at output = `$esl_afetch    $tmppfx.sto $tmppfx.name > $tmppfx.tmp`;   if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; }
+system "diff $tmppfx.name $tmppfx.tmp > /dev/null 2>&1";             if ($? != 0) { die "FAIL: esl-afetch bad diff"; }
+
+ at output = `$esl_afetch -f -o $tmppfx.tmp $tmppfx.sto $tmppfx.list`;  if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; }
+ at output = `$esl_afetch -f $tmppfx.sto $tmppfx.list > $tmppfx.tmp2`;  if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; }
+system "diff $tmppfx.tmp $tmppfx.tmp2 > /dev/null 2>&1";             if ($? != 0) { die "FAIL: esl-afetch bad diff"; }
+
+ at output = `$esl_afetch --informat stockholm $tmppfx.sto baz`; 
+if ($? != 0)                       { die "FAIL: esl-afetch failed, returned nonzero"; }
+
+ at output = `$esl_afetch --outformat clustal $tmppfx.sto XX00003.3`;
+if ($? != 0)                       { die "FAIL: esl-afetch failed, returned nonzero"; }
+if ($output[0] !~ /^CLUSTAL/)      { die "FAIL: esl-afetch fetched incorrectly";      }
+
+
+# Now index it
+# 
+ at output = `$esl_afetch --index $tmppfx.sto`;
+if ($? != 0)                       { die "FAIL: esl-afetch indexing failed, returned nonzero"; }
+
+# Now repeat the tests. They'll use the SSI index now.
+# We have a couple of ways to tell that the SSI index is being used.
+# One is that with SSI and -f, MSAs come in order of list file, not sto file.
+# Another is that with SSI, the alignment is fetched verbatim (line spacing the same),
+# so the test alignments are fetched with no blank line between #=GF AC line and first seq.
+ at output = `$esl_afetch $tmppfx.sto baz`;
+if ($? != 0)                       { die "FAIL: esl-afetch failed, returned nonzero"; }
+if ($output[1] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($output[5] !~ /^\/\/$/)        { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($#output != 5)                 { die "FAIL: esl-afetch fetched incorrectly";      }
+
+ at output = `$esl_afetch $tmppfx.sto XX00003.3`;
+if ($? != 0)                       { die "FAIL: esl-afetch failed, returned nonzero"; }
+if ($output[1] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($output[5] !~ /^\/\/$/)        { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($#output != 5)                 { die "FAIL: esl-afetch fetched incorrectly";      }
+
+# With SSI, when fetching from a list, MSAs are in order of .list file, not .sto file
+ at output = `$esl_afetch -f $tmppfx.sto $tmppfx.list`;               
+if ($? != 0)                       { die "FAIL: esl-afetch failed, returned nonzero"; }
+if ($output[1] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($output[7] !~ /^#=GF ID foo$/) { die "FAIL: esl-afetch fetched incorrectly";      }
+if ($#output != 11)                { die "FAIL: esl-afetch fetched incorrectly";      }
+
+ at output = `$esl_afetch -O $tmppfx.sto $tmppfx.name`;                 if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; }
+ at output = `$esl_afetch    $tmppfx.sto $tmppfx.name > $tmppfx.tmp`;   if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; }
+system "diff $tmppfx.name $tmppfx.tmp > /dev/null 2>&1";             if ($? != 0) { die "FAIL: esl-afetch bad diff"; }
+
+ at output = `$esl_afetch -f -o $tmppfx.tmp $tmppfx.sto $tmppfx.list`;  if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; }
+ at output = `$esl_afetch -f $tmppfx.sto $tmppfx.list > $tmppfx.tmp2`;  if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; }
+system "diff $tmppfx.tmp $tmppfx.tmp2 > /dev/null 2>&1";             if ($? != 0) { die "FAIL: esl-afetch bad diff"; }
+
+ at output = `$esl_afetch --informat stockholm $tmppfx.sto baz`; 
+if ($? != 0)                       { die "FAIL: esl-afetch failed, returned nonzero"; }
+
+ at output = `$esl_afetch --outformat clustal $tmppfx.sto XX00003.3`;
+if ($? != 0)                       { die "FAIL: esl-afetch failed, returned nonzero"; }
+if ($output[0] !~ /^CLUSTAL/)      { die "FAIL: esl-afetch fetched incorrectly";      }
+
+
+print "ok\n"; 
+unlink "$tmppfx.sto";
+unlink "$tmppfx.sto.ssi";
+unlink "$tmppfx.tmp";
+unlink "$tmppfx.tmp2";
+unlink "$tmppfx.name";
+unlink "$tmppfx.list";
+exit 0;
diff --git a/miniapps/esl-afetch.man b/miniapps/esl-afetch.man
new file mode 100644
index 0000000..69ae8a3
--- /dev/null
+++ b/miniapps/esl-afetch.man
@@ -0,0 +1,128 @@
+.TH "esl-afetch" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-afetch - retrieve alignments from a multi-MSA database
+
+.SH SYNOPSIS
+
+.TP
+Single MSA retrieval:
+.B esl-afetch
+.I [options]
+.I msafile
+.I key
+
+.TP
+Multiple MSA retrieval:
+.B esl-afetch -f
+.I [options]
+.I msafile
+.I keyfile
+
+.TP
+Indexing an MSA file for retrieval:
+.B esl-afetch --index
+.I msafile
+
+
+.SH DESCRIPTION
+
+.B esl-afetch
+retrieves the alignment named
+.I key
+from an alignment database in file
+.I msafile.
+The
+.I msafile
+is a "multiple multiple alignment" file in Stockholm (e.g. native
+Pfam or Rfam) format.
+The 
+.I key
+is either the name (ID) of the alignment, or its accession
+number (AC).
+
+.PP
+Alternatively, 
+.B esl-afetch -f
+provides the ability to fetch many alignments at once.
+The 
+.I -f 
+option has it interpret the second argument as a <keyfile>, a
+file consisting of one name or accession per line.
+
+.PP
+The
+.I msafile
+should first be SSI indexed with
+.B esl-afetch --index
+for efficient retrieval. An SSI index is
+not required, but without one alignment retrieval may
+be painfully slow.
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+.TP
+.B -f
+Interpret the second argument as a 
+.I keyfile
+instead of as just one
+.I key. 
+The
+.I keyfile
+contains one name or accession per line.
+This option doesn't work with the
+.B --index
+option.
+
+
+.TP
+.BI -o " <f>"
+Output retrieved alignments to a file 
+.I <f>
+instead of to
+.I stdout.
+
+.TP
+.BI -O
+Output retrieved alignment to a file named
+.I <key>.
+This is a convenience for saving some typing:
+instead of 
+.B esl-afetch -o RRM_1 msafile RRM_1
+you can just type
+.B esl-afetch -O msafile RRM_1.
+The
+.B -O 
+option only works if you're retrieving a
+single alignment; it is incompatible with 
+.B -f.
+
+.TP
+.B --index
+Instead of retrieving a
+.I key,
+the special command
+.B esl-afetch --index
+.I msafile
+produces an SSI index of the names and accessions
+of the alignments in
+the 
+.I msafile.
+Indexing should be done once on the
+.I msafile
+to prepare it for all future fetches.
+
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-alimanip.c b/miniapps/esl-alimanip.c
new file mode 100644
index 0000000..2cb86f4
--- /dev/null
+++ b/miniapps/esl-alimanip.c
@@ -0,0 +1,3328 @@
+/* Manipulate a multiple sequence alignment in various ways.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <math.h>
+#include <limits.h>
+
+#include "easel.h"
+#include "esl_distance.h"
+#include "esl_dmatrix.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_keyhash.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile2.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_stack.h"
+#include "esl_tree.h"
+#include "esl_vectorops.h"
+#include "esl_wuss.h"
+
+static char banner[] = "manipulate a multiple sequence alignment";
+static char usage[]  = "[options] <msafile>";
+
+#define CLUSTOPTS             "--cn-id,--cs-id,--cx-id,--cn-ins,--cs-ins,--cx-ins" /* Exclusive choice for clustering */
+#define CHOOSESEQOPTS         "--seq-k,--seq-r,--seq-ins,--reorder" /* Exclusive choice for choosing which seqs to keep/remove */
+#define INCOMPATWITHSMALLOPTS "--rffract,--lnfract,--lxfract,--lmin,--lmax,--detrunc,--k-reorder,--seq-ins,--seq-ni,--seq-xi,--trim,--minpp,--t-keeprf,--tree,--reorder,--mask2rf,--m-keeprf,--num-all,--num-rf,--rm-gc,--sindi,--post2pp" /* Options incompatible with --small (all opts except --seq-k,--seq-r,--informat,--outformat,--rna,--dna,--amino */
+
+static int   write_rf_gapthresh(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa, float gapthresh);
+static int   write_rf_given_alen(ESL_MSA *msa, char *errbuf, int *i_am_rf, int do_keep_rf_chars, char *amask, int amask_len);
+static int   write_rf_given_rflen(ESL_MSA *msa,  char *errbuf, int *i_am_rf, int do_keep_rf_chars, char *mask_for_rf, int mask_for_rf_len);
+static int   individualize_consensus(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa);
+static int   read_sqfile(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc, int nseq, ESL_SQ ***ret_sq);
+static int   trim_msa(ESL_MSA *msa, ESL_SQ **sq, int do_keeprf, char *errbuf);
+static int   prune_msa_based_on_posteriors(ESL_MSA *msa, float min_pp, char *errbuf);
+static int   get_pp_idx(ESL_ALPHABET *abc, char ppchar);
+static int   get_tree_order(ESL_TREE *T, char *errbuf, int **ret_order);
+static int   reorder_msa(ESL_MSA *msa, int *order, char *errbuf);
+static int   read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_mask_len);
+static int   expand_msa2mask(char *errbuf, ESL_MSA *msa1, char *xmask, ESL_MSA **newmsa1);
+static int   add_gap_columns_to_msa(char *errbuf, ESL_MSA *msa, int *toadd, ESL_MSA **ret_msa, int do_treat_as_rf_gap);
+static int   msa_median_length(ESL_MSA *msa);
+static int   msa_remove_seqs_below_minlen(ESL_MSA *msa, float minlen, int *i_am_rf, ESL_MSA **ret_new_msa);
+static int   msa_remove_seqs_above_maxlen(ESL_MSA *msa, float maxlen, ESL_MSA **ret_new_msa);
+static int   msa_remove_truncated_seqs(ESL_MSA *msa, char *errbuf, int ntrunc, int *i_am_rf, ESL_MSA **ret_new_msa);
+static int   msa_remove_seqs_with_ambiguities(ESL_MSA *msa, int max_nambig, ESL_MSA **ret_new_msa);
+static int   number_columns(ESL_MSA *msa, int do_all, int *i_am_rf, char *errbuf);
+static char  digit_to_char(int digit);
+static int   int_ndigits(int i);
+static char  get_char_digit_x_from_int(int i, int place);
+static int   read_seq_name_file(char *filename, char *errbuf, char ***ret_seqlist, int *ret_seqlist_n);
+static int   msa_keep_or_remove_seqs(ESL_MSA *msa, char *errbuf, char **seqlist, int seqlist_n, int do_keep, int do_reorder, int nali, ESL_MSA **ret_new_msa);
+static int   insert_x_pair_shared(ESL_MSA *msa, int *i_am_rf, int i, int j, int cfirst, int clast, double *opt_pshared, int *opt_nshared, int *opt_nins);
+static int   insert_x_pair_shared_length(ESL_MSA *msa, int *i_am_rf, int i, int j, int cfirst, int clast, double *opt_pshared, double *opt_nshared, int *opt_nins);
+static int   insert_x_diffmx(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa, int rflen, int *i_am_rf, int do_length_weight, int do_only_internal_inserts, ESL_DMATRIX **ret_D);
+static int   MSADivide(ESL_MSA *mmsa, ESL_DMATRIX *D, int do_mindiff, int do_nc, int do_nsize, float mindiff, int target_nc, int target_nsize, int *ret_num_msa, ESL_MSA ***ret_cmsa, int *ret_xsize, char *errbuf);
+static int   select_node(ESL_TREE *T, double *diff, double mindiff, int **ret_clust, int *ret_nc, int *ret_xsize, int *ret_best, char *errbuf);
+static float find_mindiff(ESL_TREE *T, double *diff, int do_nsize, int target, int **ret_clust, int *ret_nc, int *ret_xsize, int *ret_best, float *ret_mindiff, char *errbuf);
+static int   determine_first_last_consensus_columns(ESL_MSA *msa, char *errbuf, int *i_am_rf, int rflen, int **ret_fA, int **ret_lA);
+static int   dst_nongap_XPairId(const ESL_ALPHABET *abc, const ESL_DSQ *ax1, const ESL_DSQ *ax2, double *opt_distance, int *opt_nid, int *opt_n);
+static int   dst_nongap_XDiffMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_D);
+static int   find_seqs_with_given_insert(ESL_MSA *msa, int *i_am_rf, char *errbuf, int target, int min, int max, int **ret_useme);
+static int   minorize_msa(const ESL_GETOPTS *go, ESL_MSA *msa, char *errbuf, FILE *fp, char *tag, int outfmt);
+static int   remove_gc_markup(ESL_MSA *msa, char *errbuf, char *tag);
+static int   cp_and_add_gaps_to_aseq(char *new_aseq, char *orig_aseq, int alen, int *toadd, int nnew, char gapchar);
+static int   map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int **ret_i_am_rf, int **ret_rf2a_map, int *ret_rflen);
+static int   convert_post_to_pp(ESL_MSA *msa, char *errbuf, int nali);
+static int   compare_ints(const void *el1, const void *el2);
+
+static ESL_OPTIONS options[] = {
+  /* name          type        default  env   range      togs reqs  incomp                      help                                                         docgroup */
+  { "-h",          eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL, NULL,                       "help; show brief info on version and usage",                       1 },
+  { "-o",          eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,                       "output the alignment to file <f>, not stdout",                     1 },
+  { "--informat",  eslARG_STRING,NULL,  NULL, NULL,      NULL,NULL, NULL,                       "specify that input file is in format <s>",                         1 },
+  { "--outformat", eslARG_STRING,NULL,  NULL, NULL,      NULL,NULL,NULL,                        "specify that output format be <s>",                                1 },
+  { "--devhelp",   eslARG_NONE,  NULL,  NULL, NULL,      NULL,NULL, NULL,                       "show list of undocumented developer options",                      1 },
+  /* options for removing/trimming/reordering sequences */
+  { "--lnfract",   eslARG_REAL,  NULL,  NULL, "0<=x<=2", NULL,NULL, CHOOSESEQOPTS,              "remove sequences w/length < <x> fraction of median length",        2 },
+  { "--lxfract",   eslARG_REAL,  NULL,  NULL, "0<=x<=3", NULL,NULL, CHOOSESEQOPTS,              "remove sequences w/length > <x> fraction of median length",        2 },
+  { "--lmin",      eslARG_INT,   NULL,  NULL, "n>0",     NULL,NULL, CHOOSESEQOPTS,              "remove sequences w/length < <n> residues",                         2 },
+  { "--lmax",      eslARG_INT,   NULL,  NULL, "n>0",     NULL,NULL, CHOOSESEQOPTS,              "remove sequences w/length > <n> residues",                         2 },
+  { "--rffract",   eslARG_REAL,  NULL,  NULL, "0<=x<=1", NULL,NULL, CHOOSESEQOPTS,              "remove seqs w/nongap RF len < <x> fraction of aln nongap RF len",  2 },
+  { "--detrunc",   eslARG_INT,   NULL,  NULL, "n>0",     NULL,NULL, CHOOSESEQOPTS,              "remove seqs w/gaps in >= <n> 5' or 3'-most nongap #=GC RF cols",   2 },
+  { "--xambig",    eslARG_INT,   NULL,  NULL, "n>=0",    NULL,NULL, CHOOSESEQOPTS,              "remove sequences with >= <n> ambiguous residues",                  2 },
+  { "--seq-r",     eslARG_INFILE,NULL,  NULL, NULL,      NULL,NULL, CHOOSESEQOPTS,              "remove sequences with names listed in file <f>",                   2 },
+  { "--seq-k",     eslARG_INFILE,NULL,  NULL, NULL,      NULL,NULL, CHOOSESEQOPTS,              "remove all seqs *except* those listed in <f>",                     2 },
+  { "--small",     eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL, INCOMPATWITHSMALLOPTS,      "w/--seq-r or --seq-k use minimal RAM (no seq reordering)",         2 },
+  { "--k-reorder", eslARG_NONE,  NULL,  NULL, NULL,      NULL,"--seq-k", INCOMPATWITHSMALLOPTS, "with --seq-k <f>, reorder sequences to order in <f>",              2 },
+  { "--seq-ins",   eslARG_INT,   NULL,  NULL, NULL,      NULL,NULL, CHOOSESEQOPTS,              "keep only seqs w/an insert after nongap RF col <n>",               2 },
+  { "--seq-ni",    eslARG_INT,    "1",  NULL, "n>0",     NULL,"--seq-ins", NULL,                "w/--seq-ins require at least <n> residue insertions",              2 },
+  { "--seq-xi",    eslARG_INT,"1000000",NULL, "n>0",     NULL,"--seq-ins", NULL,                "w/--seq-ins require at most  <n> residue insertions",              2 },
+  { "--trim",      eslARG_INFILE, NULL, NULL, NULL,      NULL,NULL, NULL,                       "trim aligned seqs in <msafile> to subseqs in <f>",                 2 },
+  { "--t-keeprf",  eslARG_NONE,   NULL, NULL, NULL,      NULL,"--trim", NULL,                   "w/--trim keep GC RF annotation in msa, if it exists",              2 },
+  { "--minpp",     eslARG_REAL,   NULL, NULL, "0<x<=0.95",NULL,NULL,NULL,                       "replace residues with posterior probabilities < <x> with gaps",    2 },
+  { "--tree",      eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, CHOOSESEQOPTS,              "reorder MSA to tree order following SLC, save Newick tree to <f>", 2 },
+  { "--reorder",   eslARG_INFILE, NULL, NULL, NULL,      NULL,NULL, CHOOSESEQOPTS,              "reorder seqs to the order listed in <f>, all seqs must be listed", 2 },
+  /* options for adding/removing alignment annotation */
+  { "--mask2rf",   eslARG_INFILE, FALSE,NULL, NULL,      NULL,NULL, NULL,                       "set #=GC RF as x=1, gap=0 from 1/0s in 1-line <f>",                3 },
+  { "--m-keeprf",  eslARG_NONE,  FALSE, NULL, NULL,      NULL,"--mask2rf", NULL,                "with --mask2rf, do not overwrite nongap RF characters with 'x'",   3 },
+  { "--num-all",   eslARG_NONE,   NULL, NULL, NULL,      NULL,NULL, NULL,                       "add annotation numbering all columns",                             3 },
+  { "--num-rf",    eslARG_NONE,   NULL, NULL, NULL,      NULL,NULL, NULL,                       "add annotation numbering the nongap RF columns",                   3 },
+  { "--rm-gc",     eslARG_STRING,NULL,  NULL, NULL,      NULL,NULL, "--mask2rf",                "remove GC <s> markup, <s> must be RF|SS_cons|SA_cons|PP_cons",     3 },
+  { "--sindi",     eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL, NULL,                       "annotate individual secondary structures by imposing consensus",   3 },
+  { "--post2pp",   eslARG_NONE,  NULL,  NULL, NULL,      NULL,NULL, NULL,                       "convert infernal 0.72-1.0.2 POST posterior prob annotation to PP", 3 },
+  /* options for specifying the alphabet */
+  { "--amino",     eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL,"--dna,--rna",               "<msafile> contains protein alignments",                            4 },
+  { "--dna",       eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL,"--amino,--rna",             "<msafile> contains DNA alignments",                                4 },
+  { "--rna",       eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL,"--amino,--dna",             "<msafile> contains RNA alignments",                                4 },
+
+  /* All options below are developer options, only shown if --devhelp invoked */
+  { "--xmask",     eslARG_INFILE, NULL, NULL, NULL,      NULL,NULL, NULL,                       "for each 0 column in <f>, add a 100% gap column to <msafile>",     101 },
+  { "--cn-id",      eslARG_INT,   NULL,   NULL, "n>0",    NULL,NULL, CLUSTOPTS,                 "split MSA into <n> clusters based on sequence identity",           101 },
+  { "--cs-id",      eslARG_INT,   NULL,   NULL, "n>0",    NULL,NULL, CLUSTOPTS,                 "split MSA into clusters on id s.t max cluster has <n> seqs",       101 },
+  { "--cx-id",      eslARG_REAL,  NULL,   NULL, "0.<x<1.",NULL,NULL, CLUSTOPTS,                 "split MSA into clusters s.t. no seq b/t 2 clusters > <x> seq id",  101 },
+  { "--cn-ins",     eslARG_INT,   NULL,   NULL, "n>0",    NULL,NULL, CLUSTOPTS,                 "split MSA into <n> clusters based on insert similarity",           101 },
+  { "--cs-ins",     eslARG_INT,   NULL,   NULL, "n>0",    NULL,NULL, CLUSTOPTS,                 "split MSA into clusters on inserts s.t. max cluster has <n> seqs", 101 },
+  { "--cx-ins",     eslARG_REAL,  NULL,   NULL, "0.<x<1.",NULL,NULL, CLUSTOPTS,                 "split MSA into clusters s.t. no seq b/t 2 clusters > <x> ins id",  101 },
+  { "--c-nmin",     eslARG_INT,   NULL,   NULL, "n>0",    NULL,NULL, NULL,                      "only keep the cluster(s) with number of seqs > <n>",               101 },
+  { "--c-mx",       eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,                      "output identity matrix to file <f>",                               101 },
+  { "-M",           eslARG_STRING,NULL,  NULL, NULL,      NULL,NULL, "--seq-r,--seq-k",         "use #=GS tag <s> to define minor alignments, and output them",     101 },
+  { "--M-rf",       eslARG_NONE,  NULL,  NULL, NULL,      NULL,"-M", NULL,                      "w/-M, impose major #=GC RF onto all minor alns",                   101 },
+  { "--M-gapt",     eslARG_REAL,  "0.5", NULL, "0<=x<=1", NULL,"-M", NULL,                      "w/-M, fraction of gaps allowed in nongap RF columns",              101 },
+
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go      = NULL;	/* application configuration       */
+  ESL_ALPHABET *abc     = NULL;	/* biological alphabet             */
+  char         *alifile = NULL;	/* alignment file name             */
+  int           infmt   = eslMSAFILE_UNKNOWN; /* format code for alifile    */
+  int           outfmt  = eslMSAFILE_UNKNOWN; /* format code for output ali */
+  int           i;              /* counter */
+  ESL_MSAFILE  *afp     = NULL;	/* open ali file, normal interface           */
+  ESL_MSAFILE2 *afp2    = NULL; /* open ali file, legacy small-mem interface */
+  ESL_MSA      *msa     = NULL;	/* one multiple sequence alignment */
+  int           status;		/* easel return code               */
+  int           nali;		/* number of alignments read       */
+  FILE         *ofp;		/* output file (default is stdout) */
+  char          errbuf[eslERRBUFSIZE];
+  int           median;         /* median length seq in msa */
+  float         minlen;         /* min length seq we'll keep */
+  float         maxlen;         /* max length seq we'll keep */
+  ESL_MSA      *new_msa;        /* a new MSA object created from the msa we read from a file */
+
+  /* variables related to --seq-k and --seq-r and --reorder */
+  char   **seqlist = NULL;      /* list of sequences to keep in msa */
+  int      seqlist_n;           /* number of sequences in seqlist */
+  int      n;                   /* counter  over seqnames */ 
+  int     *useme = NULL;        /* useme[0..n..msa->nseq-1] TRUE to keep seq n, FALSE not to */
+
+  /* variables related to --trim */
+  ESL_SQ **trim_sq = NULL;          /* unaligned sequences read from a file */
+
+  /* --trim related vars */
+  ESL_SQFILE   *trimfp = NULL;  /* sequence file with subsequences for --trim */
+
+  /* --mask2rf */
+  char *mask_for_rf = NULL;
+  int   mask_for_rf_len = -1;
+  /* --xmask */
+  char *xmask = NULL;
+  int   xmask_len = -1;
+  /* RF related variables */
+  int  *i_am_rf = NULL;                /* [0..i..msa->alen-1]: TRUE if pos i is non-gap RF posn, if msa->rf == NULL remains NULL */
+  int  *rf2a_map = NULL;               /* [0..rfpos..rflen-1] = apos,                     
+				        * apos is the alignment position (0..msa->alen-1) that     
+					* is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) */
+  int rflen = -1;                      /* nongap RF length */
+
+  /* options related to --tree */
+  ESL_TREE    *T = NULL; /* the tree, created by Single-Linkage Clustering */
+  ESL_DMATRIX *D = NULL; /* the distance matrix */
+  int *order;            /* order of sequences in new, reordered msa */
+
+  /* options related the 'in development '--c*' options */
+  int do_id_cluster  = FALSE;    /* TRUE if --cn-id, --cs-id, or --cx-id */
+  int do_insert_cluster = FALSE; /* TRUE if --cn-ins, --cs-ins, or --cx-ins */
+  int do_ctarget_nc, do_ctarget_nsize, do_cmindiff, nmsa, m, nc, nsize, xsize, nmin;
+  float mindiff;
+  ESL_MSA     **cmsa; /* the new msa's created by clustering seqs in the main msa */
+  ESL_MSA     *rfmsa; /* the new msa, but with gap RF columns removed */
+  FILE *mxfp = NULL;
+  int j;
+
+  /* --iinfo, --iplot, --gplot --rinfo, --dinfo related vars */
+  double        **abc_ct = NULL;        /* [0..msa->alen-1][0..abc->K], count of each residue at each position, over all sequences, missing and nonresidues are *not counted* */
+  int           **pp_ct = NULL;         /* [0..msa->alen-1][0..11], count of reach posterior probability (PP) code, over all sequences, gap is 11 */  
+  FILE *treefp  = NULL;  /* output file for --tree */
+
+  /* options related to --small */
+  ESL_KEYHASH    *seqname_keyhash;      /* keyhash of sequence names listed in list file <f>, with <f> from --seq-k <f> --seq-r <f> */
+  int             nseq_read = 0;        /* number of sequences read from current alignment */
+  int             nseq_regurged = 0;     /* number of sequences regurgitated from current alignment */
+
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if (esl_opt_GetBoolean(go, "--devhelp") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage);
+      puts("\nwhere basic options are:");
+      esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+      puts("\noptions for removing/reordering/trimming sequences:");
+      esl_opt_DisplayHelp(stdout, go, 2, 2, 80); 
+      puts("\noptions for adding/removing alignment annotation:");
+      esl_opt_DisplayHelp(stdout, go, 3, 2, 80); 
+      puts("\noptions for specifying bio alphabet:");
+      esl_opt_DisplayHelp(stdout, go, 4, 2, 80);
+      puts("\nundocumented, experimental developer options:");
+      esl_opt_DisplayHelp(stdout, go, 101, 2, 80);
+      exit(0);
+    }
+  if (esl_opt_GetBoolean(go, "-h") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage);
+      puts("\nwhere basic options are:");
+      esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+      puts("\noptions for removing/reordering/trimming sequences:");
+      esl_opt_DisplayHelp(stdout, go, 2, 2, 80); 
+      puts("\noptions for adding/removing alignment annotation:");
+      esl_opt_DisplayHelp(stdout, go, 3, 2, 80); 
+      puts("\noptions for specifying bio alphabet:");
+      esl_opt_DisplayHelp(stdout, go, 4, 2, 80);
+      exit(0);
+    }
+
+  if (esl_opt_ArgNumber(go) != 1) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  /* Check for incompatible options that aren't simple to check with esl_getopts */
+  /* --small requires either --seq-k or --seq-r */
+  if (esl_opt_GetBoolean(go, "--small") && (! esl_opt_IsOn(go, "--seq-k")) && (! esl_opt_IsOn(go, "--seq-r"))) { 
+    esl_fatal("--small requires either --seq-k or --seq-r");
+  }
+
+  alifile = esl_opt_GetArg(go, 1);
+
+  /* get informat and outformat */
+  if (esl_opt_GetBoolean(go, "--small")) 
+    {
+      infmt  = eslMSAFILE_PFAM; 
+      outfmt = eslMSAFILE_PFAM; 
+    }
+  else
+    {
+      outfmt = eslMSAFILE_STOCKHOLM;
+    }
+
+  if (esl_opt_IsOn(go, "--informat"))
+    {
+      infmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"));
+      if (infmt == eslMSAFILE_UNKNOWN)
+	esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); 
+      if (esl_opt_GetBoolean(go, "--small") && infmt != eslMSAFILE_PFAM)
+	esl_fatal("--small requires (and defaults to) pfam format\ncan't set --informat %s\n", esl_opt_GetString(go, "--informat")); 
+    }
+
+  if (esl_opt_IsOn(go, "--outformat"))
+    {
+      outfmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat"));
+      if (outfmt == eslMSAFILE_UNKNOWN)
+	esl_fatal("%s is not a valid input sequence file format for --outformat", esl_opt_GetString(go, "--outformat")); 
+      if (esl_opt_GetBoolean(go, "--small") && outfmt != eslMSAFILE_PFAM)
+	esl_fatal("--small requires (and defaults to) pfam format\ncan't set --outformat %s\n", esl_opt_GetString(go, "--outformat")); 
+    }
+
+  /***************************************************************
+   * Open the MSA file; determine alphabet; set for digital input
+   ****************************************************************/
+
+  if      (esl_opt_GetBoolean(go, "--amino"))   abc = esl_alphabet_Create(eslAMINO);
+  else if (esl_opt_GetBoolean(go, "--dna"))     abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--rna"))     abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--small"))   esl_fatal("Must specify an alphabet (--amino, --dna, --rna) to use --small");
+
+  if (esl_opt_GetBoolean(go, "--small")) 
+    {
+      status = esl_msafile2_OpenDigital(abc, alifile, NULL, &afp2);
+      if      (status == eslENOTFOUND) esl_fatal("Alignment file %s doesn't exist or is not readable\n", alifile);
+      else if (status != eslOK)        esl_fatal("Alignment file %s open failed with error %d\n", alifile, status);
+    }
+  else
+    {
+      if ( (status = esl_msafile_Open(&abc, alifile, NULL, infmt, NULL, &afp)) != eslOK)
+	esl_msafile_OpenFailure(afp, status);
+      infmt = afp->format;
+    }
+
+  /* Check for incompatible options that require Stockholm/Pfam as input or output format */
+  if((esl_opt_IsOn(go, "--mask2rf")) && (outfmt != eslMSAFILE_STOCKHOLM) && (outfmt != eslMSAFILE_PFAM)) esl_fatal("with --mask2rf, the the output format must be stockholm/pfam format");
+  if((esl_opt_IsOn(go, "--rm-gc"))   && (outfmt != eslMSAFILE_STOCKHOLM) && (outfmt != eslMSAFILE_PFAM)) esl_fatal("with --rm-gc, the the output format must be stockholm/pfam format");
+  if((esl_opt_IsOn(go, "--post2pp")) && (outfmt != eslMSAFILE_STOCKHOLM) && (outfmt != eslMSAFILE_PFAM)) esl_fatal("with --post2pp, the the output format must be stockholm/pfam format");
+  if((esl_opt_IsOn(go, "--num-all")) && (outfmt != eslMSAFILE_STOCKHOLM) && (outfmt != eslMSAFILE_PFAM)) esl_fatal("with --num-all, the the output format must be stockholm/pfam format");
+  if((esl_opt_IsOn(go, "--num-rf"))  && (outfmt != eslMSAFILE_STOCKHOLM) && (outfmt != eslMSAFILE_PFAM)) esl_fatal("with --num-rf, the the output format must be stockholm/pfam format");
+
+  if((esl_opt_IsOn(go, "--seq-ins")) && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --seq-ins, the alignment file must be in stockholm/pfam format");
+  if((esl_opt_IsOn(go, "--cn-id"))   && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cn-id, the alignment file must be in stockholm/pfam format");
+  if((esl_opt_IsOn(go, "--cs-id"))   && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cs-id, the alignment file must be in stockholm/pfam format");
+  if((esl_opt_IsOn(go, "--cx-id"))   && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cx-id, the alignment file must be in stockholm/pfam format");
+  if((esl_opt_IsOn(go, "--cn-ins"))  && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cn-ins, the alignment file must be in stockholm/pfam format");
+  if((esl_opt_IsOn(go, "--cs-ins"))  && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cs-ins, the alignment file must be in stockholm/pfam format");
+  if((esl_opt_IsOn(go, "--cx-ins"))  && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cx-ins, the alignment file must be in stockholm/pfam format");
+
+  /* open output file */
+  if (esl_opt_GetString(go, "-o") != NULL) {
+    if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) 
+	esl_fatal("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o"));
+    } else ofp = stdout;
+
+  do_id_cluster     = ((esl_opt_IsOn(go, "--cn-id"))  || (esl_opt_IsOn(go, "--cs-id"))  || (esl_opt_IsOn(go, "--cx-id"))) ? TRUE : FALSE;
+  do_insert_cluster = ((esl_opt_IsOn(go, "--cn-ins")) || (esl_opt_IsOn(go, "--cs-ins")) || (esl_opt_IsOn(go, "--cx-ins")))? TRUE : FALSE;
+
+  /****************************
+   * Read optional input files 
+   ****************************/
+  /* read --mask2rf file, if nec */
+  if(esl_opt_GetString(go, "--mask2rf") != NULL) {
+    if((status = read_mask_file(esl_opt_GetString(go, "--mask2rf"), errbuf, &mask_for_rf, &mask_for_rf_len)) != eslOK)
+      esl_fatal(errbuf);
+  }
+  /* read --xmask file, if nec */
+  if(esl_opt_GetString(go, "--xmask") != NULL) {
+    if((status = read_mask_file(esl_opt_GetString(go, "--xmask"), errbuf, &xmask, &xmask_len)) != eslOK)
+      esl_fatal(errbuf);
+  }
+
+  /****************************
+   * Open optional output files 
+   ****************************/
+
+  if( esl_opt_IsOn(go, "--tree")) {
+    if ((treefp = fopen(esl_opt_GetString(go, "--tree"), "w")) == NULL) 
+      esl_fatal("Failed to open --tree output file %s\n", esl_opt_GetString(go, "--tree"));
+  }
+  if( esl_opt_IsOn(go, "--c-mx")) { 
+    if ((mxfp = fopen(esl_opt_GetString(go, "--c-mx"), "w")) == NULL) 
+      esl_fatal("Failed to open --c-mx output file %s\n", esl_opt_GetString(go, "--c-mx"));
+  }
+
+  /*******************************************************************
+   * Open and read list file, if nec (--seq-k, --seq-r or --reorder) *
+   *******************************************************************/
+  if ( esl_opt_IsOn(go, "--seq-k") || esl_opt_IsOn(go, "--seq-r") || esl_opt_IsOn(go, "--reorder")) {
+    if( esl_opt_IsOn(go, "--seq-k")) { 
+      if((status = read_seq_name_file(esl_opt_GetString(go, "--seq-k"), errbuf, &seqlist, &seqlist_n)) != eslOK) esl_fatal(errbuf);	  
+    }
+    else if( esl_opt_IsOn(go, "--reorder")) { 
+      if((status = read_seq_name_file(esl_opt_GetString(go, "--reorder"), errbuf, &seqlist, &seqlist_n)) != eslOK) esl_fatal(errbuf);	  
+    }
+    else { /* --seq-r enabled */
+      if((status = read_seq_name_file(esl_opt_GetString(go, "--seq-r"), errbuf, &seqlist, &seqlist_n)) != eslOK) esl_fatal(errbuf);	  
+    }
+  }
+
+  /*************************************************************
+   * Read MSAs one at a time, manipulate them, then output them
+   *************************************************************/
+
+  nali = 0;
+  if (! esl_opt_GetBoolean(go, "--small")) { 
+    while ((status = esl_msafile_Read(afp, &msa)) != eslEOF)
+      {
+	if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+	nali++;
+
+	/* if RF exists, get i_am_rf array[0..alen] which tells us which positions are non-gap RF positions
+	 * and rf2a_map, a map of non-gap RF positions to overall alignment positions */
+	if(msa->rf != NULL) {
+	  if((status = map_rfpos_to_apos(msa, abc, errbuf, &i_am_rf, &rf2a_map, &rflen)) != eslOK) esl_fatal(errbuf);
+	}
+
+	/********************************************************************
+	 * Remove sequences based on an input list file (--seq-k or --seq-r)
+	 ********************************************************************/
+	/* Handle the --seq-k and --seq-r options if enabled, all subsequent manipulations will omit any seqs removed here.
+	 * We've already read list file <f>, seqlist holds the seqlist_n sequences read from <f> 
+	 * (<f> from either --seq-k <f>, --seq-r <f>, --reorder <f>) 
+	 */
+	if ( esl_opt_IsOn(go, "--seq-k") || esl_opt_IsOn(go, "--seq-r") || esl_opt_IsOn(go, "--reorder")) {
+	  if((afp->format != eslMSAFILE_STOCKHOLM) && (afp->format != eslMSAFILE_PFAM)) {
+	    esl_fatal("--seq-k, --seq-r, --reorder only work on Stockholm formatted alignments");
+	  }
+	  if( esl_opt_IsOn(go, "--seq-k")) { 
+	    if((status = msa_keep_or_remove_seqs(msa, errbuf, seqlist, seqlist_n, TRUE, (esl_opt_GetBoolean(go, "--k-reorder")), nali, &new_msa)) != eslOK)        esl_fatal(errbuf);	  
+	    /* new_msa is msa but only with seqs listed in --seq-k <f> file */
+	  }
+	  else if( esl_opt_IsOn(go, "--reorder")) { 
+	    if(seqlist_n != msa->nseq) esl_fatal("With --reorder <f>, <f> contains %d names, but alignment %d has %d seqs (all seqs must be listed in <f>)", seqlist_n, nali, msa->nseq);
+	    if((status = msa_keep_or_remove_seqs(msa, errbuf, seqlist, seqlist_n, TRUE, TRUE, nali, &new_msa)) != eslOK)        esl_fatal(errbuf);	  
+	    /* new_msa is msa but only with seqs listed in --seq-k <f> file */
+	  }
+	  else { /* --seq-r enabled */
+	    if((status = msa_keep_or_remove_seqs(msa, errbuf, seqlist, seqlist_n, FALSE, TRUE, nali, &new_msa)) != eslOK)        esl_fatal(errbuf);	  
+	    /* new_msa is msa but without seqs listed in --seq-r <f> file */
+	  }
+	  esl_msa_Destroy(msa);
+	  msa = new_msa;
+	}
+	
+	/*************************************************************
+	 * Remove sequences based on length or number of ambiguities *
+	 *************************************************************/
+	/* The --lnfract,--lxfract,--lmin,--lmax,--detrunc,--xambig options.
+	 * we do each separately, removing seqs for each as we go. 
+	 * They can be used in combination.
+	 */
+	if (esl_opt_IsOn(go, "--lnfract")) {
+	  median = msa_median_length(msa);
+	  minlen = esl_opt_GetReal(go, "--lnfract") * (float) median;
+	  msa_remove_seqs_below_minlen(msa, minlen, NULL, &new_msa); /* NULL: do not consider only nongap RF positions */
+	  /* new_msa is msa without seqs below minlen, swap ptrs */
+	  esl_msa_Destroy(msa);
+	  msa = new_msa;
+	  new_msa = NULL;
+	}
+	if (esl_opt_IsOn(go, "--lxfract")) {
+	  median = msa_median_length(msa);
+	  maxlen = esl_opt_GetReal(go, "--lxfract") * (float) median;
+	  msa_remove_seqs_above_maxlen(msa, maxlen, &new_msa);
+	  /* new_msa is msa without seqs above maxlen, swap ptrs */
+	  esl_msa_Destroy(msa);
+	  msa = new_msa;
+	  new_msa = NULL;
+	}
+	if (esl_opt_IsOn(go, "--lmin")) {
+	  minlen = esl_opt_GetInteger(go, "--lmin");
+	  msa_remove_seqs_below_minlen(msa, minlen, NULL, &new_msa); /* NULL: do not consider only nongap RF positions */
+	  /* new_msa is msa without seqs below minlen, swap ptrs */
+	  esl_msa_Destroy(msa);
+	  msa = new_msa;
+	  new_msa = NULL;
+	}
+	if (esl_opt_IsOn(go, "--lmax")) {
+	  maxlen = esl_opt_GetInteger(go, "--lmax");
+	  msa_remove_seqs_above_maxlen(msa, maxlen, &new_msa);
+	  /* new_msa is msa without seqs below maxlen, swap ptrs */
+	  esl_msa_Destroy(msa);
+	  msa = new_msa;
+	  new_msa = NULL;
+	}
+	if (esl_opt_IsOn(go, "--rffract")) {
+          /* determine nongap RF length */
+          if(msa->rf == NULL) esl_fatal("with --rffract, alignment(s) must have RF annotation, alignment %d does not", nali);
+          minlen = rflen * esl_opt_GetReal(go, "--rffract");
+	  msa_remove_seqs_below_minlen(msa, minlen, i_am_rf, &new_msa);
+	  /* new_msa is msa without seqs below minlen, swap ptrs */
+	  esl_msa_Destroy(msa);
+	  msa = new_msa;
+	  new_msa = NULL;
+	}
+	if( esl_opt_IsOn(go, "--detrunc")) {
+	  if((status = msa_remove_truncated_seqs(msa, errbuf, esl_opt_GetInteger(go, "--detrunc"), i_am_rf, &new_msa)) != eslOK) esl_fatal(errbuf);
+	  /* new_msa is msa without seqs below minlen, swap ptrs */
+	  esl_msa_Destroy(msa);
+	  msa = new_msa;
+	  new_msa = NULL;
+	}
+	if( esl_opt_IsOn(go, "--xambig")) {
+	  if((status = msa_remove_seqs_with_ambiguities(msa, esl_opt_GetInteger(go, "--xambig"), &new_msa)) != eslOK) esl_fatal(errbuf);
+	  /* new_msa is msa without seqs with > <n> (from --xambig <n>) ambiguities, swap ptrs */
+	  esl_msa_Destroy(msa);
+	  msa = new_msa;
+	  new_msa = NULL;
+	}
+
+	/*********************************************************
+	 * Remove sequences based on a specific insert (--seq-ins)
+	 *********************************************************/
+	if( esl_opt_IsOn(go, "--seq-ins")) { 
+	  if((status = find_seqs_with_given_insert(msa, i_am_rf, errbuf, esl_opt_GetInteger(go, "--seq-ins"), esl_opt_GetInteger(go, "--seq-ni"), esl_opt_GetInteger(go, "--seq-xi"), &useme)) != eslOK) esl_fatal(errbuf);	  
+	  if(esl_vec_ISum(useme, msa->nseq) == 0) esl_fatal("No sequences satisfy the --seq-ins option.");
+	  if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK)  esl_fatal(errbuf);	  
+	  /* new_msa is msa but without seqs that do not have an insert of length <a>..<b> (from --seq-ni <a> and --seq-xi <b>) after consensus column <n> from --seq-ins <n> file */
+	  esl_msa_Destroy(msa);
+	  msa = new_msa;
+	  new_msa = NULL;
+	}      
+
+	/******************
+	 * Trim sequences *
+	 ******************/
+	if(esl_opt_GetString(go, "--trim") != NULL) { 
+	  if(nali > 1) { esl_fatal("--trim only works if the alignment file has a single alignment"); }
+	  status = esl_sqfile_Open(esl_opt_GetString(go, "--trim"), eslSQFILE_UNKNOWN, NULL, &(trimfp));
+	  if (status == eslENOTFOUND)    esl_fatal("File %s doesn't exist or is not readable\n", esl_opt_GetString(go, "--trim"));
+	  else if (status == eslEFORMAT) esl_fatal("Couldn't determine format of sequence file %s\n", esl_opt_GetString(go, "--trim"));
+	  else if (status == eslEINVAL)  esl_fatal("Can't autodetect stdin or .gz."); 
+	  else if (status != eslOK)      esl_fatal("Sequence file open failed with error %d\n", status);
+	  /* read the sequences */
+	  read_sqfile(trimfp, msa->abc, msa->nseq, &trim_sq); /* dies on failure */
+	  /* trim the msa */
+	  if((status = trim_msa(msa, trim_sq, esl_opt_GetBoolean(go, "--t-keeprf"), errbuf)) != eslOK) esl_fatal(errbuf);
+	  for(i = 0; i < msa->nseq; i++) esl_sq_Destroy(trim_sq[i]); 
+	  free(trim_sq);
+	  trim_sq = NULL;
+	}
+
+	/*****************************************************
+	 * Replace residues with PP values less than minimum *
+	 *****************************************************/
+	if(esl_opt_IsOn(go, "--minpp")) { 
+	  if(msa->pp == NULL) esl_fatal("--minpp requires all alignments have posterior probability annotation, %d does not\n", nali);
+	  if((status = prune_msa_based_on_posteriors(msa, esl_opt_GetReal(go, "--minpp"), errbuf)) != eslOK) esl_fatal(errbuf);
+	}
+      
+	/**********************************************
+	 * Reorder sequences to tree order, if --tree *
+	 **********************************************/
+	/* handle the --tree option, if enabled */
+	if( esl_opt_IsOn(go, "--tree")) {
+	  /* Create distance matrix and infer tree by single linkage clustering */
+	  esl_dst_XDiffMx(msa->abc, msa->ax, msa->nseq, &D);
+	  esl_tree_SingleLinkage(D, &T);
+	  esl_tree_SetTaxaParents(T);
+	  esl_tree_SetTaxonlabels(T, msa->sqname);
+	  if((status = esl_tree_Validate(T, errbuf)) != eslOK) esl_fatal(errbuf);
+	
+	  esl_tree_WriteNewick(treefp, T); 
+	
+	  /* Get new order for seqs in the MSA based on the tree */
+	  if((status = get_tree_order(T, errbuf, &order)) != eslOK) esl_fatal(errbuf);
+	
+	  /*for(i = 0; i < msa->nseq; i++) printf("new MSA idx: %3d | orig MSA idx: %3d\n", i, order[i]);*/
+	  esl_tree_Destroy(T);
+	  esl_dmatrix_Destroy(D);
+	  T = NULL;
+	  D = NULL;
+	  if((status = reorder_msa(msa, order, errbuf)) != eslOK) esl_fatal(errbuf);
+	  free(order);
+	}	  
+
+	/******************************************
+	 * Modify/add annotation in the alignment *
+	 ******************************************/
+	/* Convert POST annotation (infernal 0.72-1.0) to PP, if nec */
+	/* Remove GC annotation, if nec */
+	if( esl_opt_IsOn(go, "--rm-gc")) {
+	  if((status = remove_gc_markup(msa, errbuf, esl_opt_GetString(go, "--rm-gc")) != eslOK)) esl_fatal(errbuf);
+	}
+	/* Rewrite RF annotation based on a mask, if nec */
+	if(mask_for_rf != NULL) { /* --mask2rf enabled */
+	  if(msa->rf != NULL && mask_for_rf_len == rflen) { /* mask corresponds to RF len */
+	    if((status = write_rf_given_rflen(msa, errbuf, i_am_rf, esl_opt_GetBoolean(go, "--m-keeprf"), mask_for_rf, mask_for_rf_len)) != eslOK) esl_fatal(errbuf);
+	  }
+	  else if(mask_for_rf_len == msa->alen) { 
+	    if((status = write_rf_given_alen(msa, errbuf, i_am_rf, esl_opt_GetBoolean(go, "--m-keeprf"), mask_for_rf, mask_for_rf_len)) != eslOK) esl_fatal(errbuf);
+	  }
+	  else { 
+	    if(msa->rf != NULL) esl_fatal("msa %d, alignment length is %d, nongap RF length is %d, --mask2rf mask length is neither (%d)", msa->alen, rflen);
+	    else                esl_fatal("msa %d, alignment length is %d (no RF annotation), --mask2rf mask length is neither (%d)", msa->alen, rflen);
+	  }
+	}
+	/* Add annotation numbering the nongap RF columns, if nec */
+	if( esl_opt_IsOn(go, "--num-rf")) { 
+	  if(msa->rf == NULL) esl_fatal("--num-rf requires all alignments have #=GC RF annotation, but alignment %d does not", nali);
+	  if((status = number_columns(msa, FALSE, i_am_rf, errbuf) != eslOK)) esl_fatal(errbuf);
+	}
+	/* Add annotation numbering all columns, if nec */
+	if( esl_opt_IsOn(go, "--num-all")) { 
+	  if((status = number_columns(msa, TRUE, i_am_rf, errbuf) != eslOK)) esl_fatal(errbuf);
+	}
+	/* Convert POST to PP annotation, if nec */
+	if(esl_opt_GetBoolean(go, "--post2pp")) { 
+	  if(msa->pp != NULL) esl_fatal("--post2pp enabled but alignment %d already has PP annotation.\n", nali);
+	  if((status = convert_post_to_pp(msa, errbuf, nali)) != eslOK) esl_fatal(errbuf);
+	}
+	/* Impose consensus structure to get individual secondary structures, if nec */
+	if(esl_opt_GetBoolean(go, "--sindi")) {
+	  if((status = individualize_consensus(go, errbuf, msa) != eslOK)) esl_fatal(errbuf);
+	}
+
+	/****************************************************
+	 * Handle 'in development' options, that are undocumented 
+	 * (only visible from the command line with --devhelp) 
+	 * These are even less stable than the other options.
+	 ***************************************************/
+	/* --xmask option: expand the alignment to fit lanemask in xmask <f>, number of TOTAL msa columns must equal number of 1s in <f>. */
+	if(xmask != NULL) { 
+	  if((status = expand_msa2mask(errbuf, msa, xmask, &new_msa)) != eslOK) esl_fatal(errbuf);
+	  esl_msa_Destroy(msa);
+	  msa = new_msa;
+	}
+
+	/*******************************************************
+	 * Handle the 'in development' cluster options. (--c-*) 
+	 * (these should probably go into a different miniapp eventually)
+	 *******************************************************/
+	if(do_id_cluster || do_insert_cluster) { 
+	  if(msa->rf == NULL) esl_fatal("--c* options require #=GC RF annotation marking consensus columns.");
+	  if(do_id_cluster) { 
+	    if(msa->rf == NULL) esl_fatal("Error, --cn-id, --cs-id and --cx-id require all alignments have #=GC RF anntotation, aln %d does not.", nali);
+	    /* create distance matrix and infer tree by single linkage clustering */
+	    /* first, remove all non-consensus columns */
+	    rfmsa = esl_msa_Clone(msa);
+	    if((status = esl_msa_ColumnSubset(rfmsa, errbuf, i_am_rf)) != eslOK) esl_fatal(errbuf);
+	    dst_nongap_XDiffMx(rfmsa->abc, rfmsa->ax, rfmsa->nseq, &D);
+	    esl_msa_Destroy(rfmsa);
+	    rfmsa = NULL;
+	    do_ctarget_nc    = esl_opt_IsOn(go, "--cn-id");
+	    do_ctarget_nsize = esl_opt_IsOn(go, "--cs-id");
+	    do_cmindiff      = esl_opt_IsOn(go, "--cx-id");
+	    nc               = esl_opt_IsOn(go, "--cn-id") ? esl_opt_GetInteger(go, "--cn-id")   : 0;
+	    nsize            = esl_opt_IsOn(go, "--cs-id") ? esl_opt_GetInteger(go, "--cs-id")   : 0;
+	    mindiff          = esl_opt_IsOn(go, "--cx-id") ? 1. - esl_opt_GetReal(go, "--cx-id") : 0; 
+	  }
+	  else { /* do_insert_cluster, create insert distance matrix and infer tree by SLC */ 
+	    if(msa->rf == NULL) esl_fatal("Error, --cn-ins, --cs-ins and --cx-ins require all alignments have #=GC RF anntotation, aln %d does not.", nali);
+	    if((status = insert_x_diffmx(go, errbuf, msa, rflen, i_am_rf, TRUE, TRUE, &D)) != eslOK) esl_fatal(errbuf);
+	    do_ctarget_nc    = esl_opt_IsOn(go, "--cn-ins");
+	    do_ctarget_nsize = esl_opt_IsOn(go, "--cs-ins");
+	    do_cmindiff      = esl_opt_IsOn(go, "--cx-ins");
+	    nc               = esl_opt_IsOn(go, "--cn-ins") ? esl_opt_GetInteger(go, "--cn-ins")   : 0;
+	    nsize            = esl_opt_IsOn(go, "--cs-ins") ? esl_opt_GetInteger(go, "--cs-ins")   : 0;
+	    mindiff          = esl_opt_IsOn(go, "--cx-ins") ? 1. - esl_opt_GetReal(go, "--cx-ins") : 0;
+	  }
+	  /* print out the id matrix if nec */
+	  if( esl_opt_IsOn(go, "--c-mx")) { 
+	    for(i = 0; i < msa->nseq; i++) { 
+	      for(j = 0; j < msa->nseq; j++) { 
+		fprintf(mxfp, "%5d  %5d  %-30s  %-30s  %.5f\n", i, j, msa->sqname[i], msa->sqname[j], 1. - D->mx[i][j]);
+	      }
+	    }	  
+	    fclose(mxfp);
+	  }
+	  if((status = MSADivide(msa, D, do_cmindiff, do_ctarget_nc, do_ctarget_nsize, mindiff, nc, nsize, &nmsa, &cmsa, &xsize, errbuf)) != eslOK) esl_fatal(errbuf);
+	  esl_msa_Destroy(msa); 
+	  msa = NULL;
+	  nmin = esl_opt_IsOn(go, "--c-nmin") ? esl_opt_GetInteger(go, "--c-nmin") : 1;
+	  for(m = 0; m < nmsa; m++) { 
+	    if(cmsa[m]->nseq >= nmin) { 
+	      status = esl_msafile_Write(ofp, cmsa[m], outfmt);
+	      if      (status == eslEMEM) esl_fatal("Memory error when outputting alignment\n");
+	      else if (status != eslOK)   esl_fatal("Writing alignment file failed with error %d\n", status);
+	    }
+	    esl_msa_Destroy(cmsa[m]);
+	  }
+	  free(cmsa);
+	}
+	else if ( esl_opt_IsOn(go, "--c-mx")) esl_fatal("--c-mx option requires at least one of: --cn-id, --cs-id, --cx-id, --cn-ins, --cs-ins, --cx-ins"); 
+	/*******************************
+	 * End of cluster option block 
+	 *******************************/
+
+	/* handle the *in development* -M option, if enabled */
+	if( esl_opt_IsOn(go, "-M")) { 
+	  if((status = minorize_msa(go, msa, errbuf, ofp, esl_opt_GetString(go, "-M"), outfmt) != eslOK)) esl_fatal(errbuf);
+	}
+
+	/********************
+	 * Output alignment *
+	 ********************/
+	if(! esl_opt_IsOn(go, "-M")) { /* if -M, we already output the alignments in minorize_msa() */
+	  status = esl_msafile_Write(ofp, msa, outfmt);
+	  if      (status == eslEMEM) esl_fatal("Memory error when outputting alignment\n");
+	  else if (status != eslOK)   esl_fatal("Writing alignment file failed with error %d\n", status);
+	}
+
+	/* Clean up for this msa */
+	if(msa      != NULL) { esl_msa_Destroy(msa);                    msa      = NULL; }
+	if(abc_ct   != NULL) { esl_Free2D((void **) abc_ct, msa->alen); abc_ct   = NULL; }
+	if(pp_ct    != NULL) { esl_Free2D((void **) pp_ct, msa->alen);  pp_ct    = NULL; }
+	if(i_am_rf  != NULL) { free(i_am_rf);                           i_am_rf  = NULL; }
+	if(rf2a_map != NULL) { free(rf2a_map);                          rf2a_map = NULL; }
+      }	/* end loop over msa's */
+    if (nali   == 0) esl_fatal("No alignments found in file %s\n", alifile);
+  } /* end of 'if (! esl_opt_IsOn(go, "--small"))' */
+
+  else 
+    { /* --small enabled */
+      /* First, a paranoid check first, the following should never be false based on earlier checks */
+      if((! esl_opt_IsOn(go, "--seq-r")) && (! esl_opt_IsOn(go, "--seq-k"))) esl_fatal("--small requires either --seq-r or --seq-k");
+      /* We've already read list file <f>, seqlist holds the seqlist_n sequences read from <f> (<f> from either --seq-k <f> or --seq-r <f>) */
+      seqname_keyhash = esl_keyhash_Create();
+      for (n = 0; n < seqlist_n; n++) 
+	{ 
+	  status = esl_keyhash_Store(seqname_keyhash, seqlist[n], -1, NULL); 
+	  if(status == eslEDUP)     { esl_fatal("Error sequence %s listed twice in a input list file.", seqlist[n]); }
+	  else if (status != eslOK) { esl_fatal("Error adding sequence %s to keyhash", seqlist[n]); }
+	}
+
+      while ((status = esl_msafile2_RegurgitatePfam(afp2, ofp, 
+						    -1, -1, -1, -1, /* don't care about max width of fields */
+						    TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, /* regurgitate all non-seq info */
+						    esl_opt_IsOn(go, "--seq-k") ? seqname_keyhash : NULL, /* if --seq-k <f> keep seqs from list file <f> */
+						    esl_opt_IsOn(go, "--seq-r") ? seqname_keyhash : NULL, /* if --seq-r <f> remove seqs from list file <f> */
+						    NULL, NULL, -1, '.', &nseq_read, &nseq_regurged)) == eslOK) 
+	{ 
+	  nali++;
+	  if      (esl_opt_IsOn(go, "--seq-k") && (nseq_regurged != seqlist_n))  
+	    esl_fatal("Error, in alignment %d, did not find %d of the sequences listed in %s", nali, (seqlist_n - nseq_regurged), esl_opt_GetString(go, "--seq-k"));
+	  else if (esl_opt_IsOn(go, "--seq-r") && ((nseq_read - nseq_regurged) != seqlist_n))  
+	    esl_fatal("Error, in alignment %d, did not find %d of the sequences listed in %s", nali, (seqlist_n - (nseq_read - nseq_regurged)), esl_opt_GetString(go, "--seq-r"));
+	}
+    }
+
+  /* Cleanup, normal return
+   */
+  if(seqlist != NULL) { 
+    for(n = 0; n < seqlist_n; n++) if(seqlist[n] != NULL) free(seqlist[n]); 
+    free(seqlist);
+  }
+
+  if(esl_opt_IsOn(go, "-o")) { 
+    fclose(ofp);
+    if(nali > 1) printf("# %d alignments saved to file %s.\n", nali, esl_opt_GetString(go, "-o"));
+    else         printf("# Alignment saved to file %s.\n", esl_opt_GetString(go, "-o"));
+  }
+  if(treefp != NULL) { 
+    fclose(treefp);
+    printf("# Tree(s) saved in Newick format to file %s.\n", esl_opt_GetString(go, "--tree"));
+  }
+  if(mxfp != NULL) { 
+    fclose(mxfp);
+    printf("# Distance matri{x,ces} saved to file %s.\n", esl_opt_GetString(go, "--c-mx"));
+  }
+
+  if (esl_opt_GetBoolean(go, "--small")) esl_msafile2_Close(afp2);
+  else                                   esl_msafile_Close(afp);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  
+  return 0;
+}
+
+
+/* write_rf_given_alen
+ *                   
+ * Given an MSA and a char string of 1s and 0s (a lanemask) of length
+ * msa->alen, write/rewrite  RF positions as  'x' (non-gap) for 1, '.' (gap) for 0.
+ * If RF already exists AND do_keep_rf_chars == TRUE, do not modify non-gap RF columns 
+ * if they are within mask ('1').
+ */
+static int
+write_rf_given_alen(ESL_MSA *msa, char *errbuf, int *i_am_rf, int do_keep_rf_chars, char *amask, int amask_len)
+{
+  int      status;
+  int64_t  apos;
+
+  /* contract check, rfgiven_mask must be exact length of msa */
+  if(amask == NULL) ESL_FAIL(eslEINVAL, errbuf, "--mask2rf mask is NULL in write_rf_given, this shouldn't happen.\n");
+  if(amask_len != (int) strlen(amask)) { ESL_FAIL(eslEINVAL, errbuf, "write_rf_given_alen(), passed in mask len (%d) is not equal to actual mask length (%d)\n", amask_len, (int) strlen(amask)); }
+  if(amask_len != msa->alen) 
+    ESL_FAIL(eslEINVAL, errbuf, "--mask2rf mask length: %d is not equal to the MSA length (%" PRId64 ")\n", 
+	     amask_len, msa->alen); 
+  if(msa->rf == NULL) { 
+    ESL_ALLOC(msa->rf, sizeof(char) * (msa->alen+1));
+    for (apos = 1; apos <= msa->alen; apos++) msa->rf[(apos-1)] = '.';
+  }
+
+  for (apos = 1; apos <= msa->alen; apos++) {
+    if     (amask[(apos-1)] == '0') msa->rf[(apos-1)] = '.';
+    else if(amask[(apos-1)] == '1') { 
+      if((! do_keep_rf_chars) || (i_am_rf == NULL) || (! i_am_rf[(apos-1)])) msa->rf[(apos-1)] = 'x'; /* else, msa has RF nongap char there already, leave it alone */
+    }
+    else    ESL_FAIL(eslEINVAL, errbuf, "--mask2rf mask char number %" PRId64 " is not a 1 nor a 0, but a %c\n", apos, amask[(apos-1)]);
+  }
+
+  msa->rf[msa->alen] = '\0';
+  return eslOK;
+ ERROR:
+  return status;
+}
+
+/* write_rf_given_rflen
+ *
+ * Given an MSA and a char string of 1s and 0s (a lanemask) that is
+ * the same length as the non-gap RF annotation in msa, rewrite msa
+ * RF based as 'x' (non-gap) for 1, '.' (gap) for 0. 1s indicate which
+ * non-gap RF columns to keep as 'x', and 0s indicate which non-gap
+ * RF columns to make gaps '.'.
+ * If RF already exists, do not modify non-gap RF columns if they are 
+ * within mask ('1').
+ */
+static int
+write_rf_given_rflen(ESL_MSA *msa,  char *errbuf, int *i_am_rf, int do_keep_rf_chars, char *mask_for_rf, int mask_for_rf_len)
+{
+  int64_t  apos, rfpos;
+
+  /* contract check, mask must be exact length of msa */
+  if(mask_for_rf  == NULL) ESL_FAIL(eslEINVAL, errbuf, "--mask2rf mask is NULL in write_rf_given, this shouldn't happen.\n");
+  if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "--mask2rf mask requires RF annotation in MSA (try -g)\n");
+  if(mask_for_rf_len != (int) strlen(mask_for_rf)) { ESL_FAIL(eslEINVAL, errbuf, "write_rf_given_rflen(), passed in mask len (%d) is not equal to actual mask length (%d).\n", mask_for_rf_len, (int) strlen(mask_for_rf)); }
+
+  rfpos = 0;
+  for (apos = 1; apos <= msa->alen; apos++) {
+    if(! esl_abc_CIsGap(msa->abc, msa->rf[(apos-1)])) {
+      rfpos++;
+      if     (mask_for_rf[(rfpos-1)] == '0') msa->rf[(apos-1)] = '.';
+      else if(mask_for_rf[(rfpos-1)] == '1') { 
+	if((! do_keep_rf_chars) || (i_am_rf == NULL) || (! i_am_rf[(apos-1)])) msa->rf[(apos-1)] = 'x'; /* else, msa has RF nongap char there already, leave it alone */
+      }
+    }
+    else msa->rf[(apos-1)] = '.'; 
+  }
+  if(rfpos != mask_for_rf_len) { ESL_FAIL(eslEINVAL, errbuf, "write_rf_given_rflen(), RF non-gap length (consensus length) (%" PRId64 ") is not equal to mask length (%d)\n", rfpos, mask_for_rf_len); }
+
+  msa->rf[msa->alen] = '\0';
+  return eslOK;
+}
+
+/* individualize_consensus
+ *                   
+ * Given an MSA with a consensus structure impose it to create
+ * individual secondary structures. Simple rule, for consensus
+ * bp i,j if seq positions i and j are both non-gaps seq i,j are 
+ * paired, if >= 1 is a gap, they're not paired.
+ */
+static int
+individualize_consensus(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa)
+{
+  int64_t apos;
+  int     i;
+  int    *cct = NULL;		   /* 0..alen-1 base pair partners array for consensus        */
+  int    *ct  = NULL;		   /* 0..alen-1 base pair partners array for current sequence */
+  char   *ss  = NULL;              /* individual secondary structure we've built              */
+  char   *ss_cons_nopseudo = NULL; /* no-pseudoknot version of consensus structure            */
+  int     status;
+
+  if(msa->ss_cons == NULL)                                ESL_FAIL(eslEINVAL, errbuf, "--sindi requires MSA to have consensus structure annotation.\n");
+  if(! (msa->flags & eslMSA_DIGITAL))                     ESL_FAIL(eslEINVAL, errbuf, "individualize_consensus() MSA is not digitized.\n");
+    
+  ESL_ALLOC(cct, sizeof(int)  * (msa->alen+1));
+  ESL_ALLOC(ct,  sizeof(int)  * (msa->alen+1));
+  ESL_ALLOC(ss,  sizeof(char) * (msa->alen+1));
+  ESL_ALLOC(ss_cons_nopseudo, sizeof(char) * (msa->alen+1));
+
+  esl_wuss_nopseudo(msa->ss_cons, ss_cons_nopseudo);
+  if (esl_wuss2ct(ss_cons_nopseudo, msa->alen, cct) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "Consensus structure string is inconsistent.");
+
+  /* go through each position of each sequence, 
+     if it's a gap and it is part of a base pair, remove that base pair */
+  for (i = 0; i < msa->nseq; i++)
+    {
+      esl_vec_ICopy(cct, (msa->alen+1), ct);
+      for (apos = 1; apos <= msa->alen; apos++)
+	if (esl_abc_XIsGap(msa->abc, msa->ax[i][apos]))
+	  { 
+	    if (ct[apos] != 0)  ct[ct[apos]] = 0;
+	    ct[apos] = 0;
+	  }
+      /* convert to WUSS SS string and append to MSA */
+      if (esl_ct2wuss(ct, msa->alen, ss) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "Unexpected error converting de-knotted bp ct array to wuss notation.");
+      esl_msa_AppendGR(msa, "SS", i, ss);
+    }
+  free(cct);
+  free(ct);
+  free(ss);
+  free(ss_cons_nopseudo);
+  return eslOK;
+
+ ERROR:
+  if (cct)               free(cct);
+  if (ct)                free(ct);
+  if (ss)                free(ss);
+  if (ss_cons_nopseudo)  free(ss_cons_nopseudo);
+  return status;
+}
+
+
+/* map_rfpos_to_apos
+ *                   
+ * Given an MSA, determine the alignment position of each
+ * non-gap RF (reference) position. The abc is only necessary
+ * for defining gap characters.
+ * 
+ * rf2a_map[0..rfpos..rflen-1] = apos, apos is the alignment position (0..msa->alen-1) that 
+ *                               is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) 
+ */
+static int map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int **ret_i_am_rf, int **ret_rf2a_map, int *ret_rflen)
+{
+  int status;
+  int rflen = 0;
+  int *rf2a_map = NULL;
+  int *i_am_rf = NULL;
+  int rfpos = 0;
+  int apos = 0;
+
+  /* contract check */
+  if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, trying to map RF positions to alignment positions, but msa->rf is NULL.");
+
+  /* count non-gap RF columns */
+  for(apos = 0; apos < msa->alen; apos++) { 
+    if((! esl_abc_CIsGap(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsMissing(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsNonresidue(abc, msa->rf[apos])))
+      { 
+	rflen++;
+	/* I don't use esl_abc_CIsResidue() b/c that would return FALSE for 'x' with RNA and DNA */
+      }
+  }
+  /* build map */
+  ESL_ALLOC(i_am_rf, sizeof(int) * msa->alen);
+  ESL_ALLOC(rf2a_map, sizeof(int) * rflen);
+  for(apos = 0; apos < msa->alen; apos++) {
+    if((! esl_abc_CIsGap(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsMissing(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsNonresidue(abc, msa->rf[apos]))) { 
+      i_am_rf[apos] = TRUE;
+      rf2a_map[rfpos++] = apos;
+    }
+    else { 
+      i_am_rf[apos] = FALSE;
+    }
+  }
+  *ret_i_am_rf  = i_am_rf;
+  *ret_rf2a_map = rf2a_map;
+  *ret_rflen    = rflen;
+  return eslOK;
+
+ ERROR:
+  if(i_am_rf  != NULL) free(i_am_rf);
+  if(rf2a_map != NULL) free(rf2a_map);
+  ESL_FAIL(status, errbuf, "Error, out of memory while mapping RF positions to alignment positions.");
+}
+
+
+/* read_sqfile
+ *                   
+ * Read all seqs in a sequence file and return them. Originally
+ * written for --trim option.
+ */
+static int read_sqfile(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc, int nseq, ESL_SQ ***ret_sq)
+{
+  int status;
+  ESL_SQ **sq; 
+  int i;
+  
+  /* get seqs from sqfile */
+  ESL_ALLOC(sq, sizeof(ESL_SQ *) * (nseq + 1)); /* +1 for the last guy we allocate but don't use */
+  i = 0;
+  sq[i] = esl_sq_CreateDigital(abc);
+  while ((status = esl_sqio_Read(sqfp, sq[i])) == eslOK) { 
+    i++;
+    if(i > nseq) esl_fatal("With --trim, sequence file must have same number seqs as in <msafile>\n"); 
+    sq[i] = esl_sq_CreateDigital(abc);
+  }
+  if (i != nseq) esl_fatal("With --trim, sequence file must have same number seqs as in <msafile>\n"); 
+  /* status should be eslEOF on normal end; if it isn't, deal w/ error */
+  esl_sq_Destroy(sq[i]); /* destroy final allocated but unused seq */
+
+  if      (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n",
+					   sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+  else if (status != eslEOF)     esl_fatal("Unexpected error %d reading sequence file %s",
+					    status, sqfp->filename);
+  esl_sqfile_Close(sqfp);
+  *ret_sq = sq;
+
+  return eslOK;
+
+ ERROR:
+  esl_fatal("Memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* trim_msa
+ *                   
+ * Given an MSA and unaligned 'trimmed' versions (subsequences) of all seqs in that MSA, 
+ * replace all chars that have been trimmed away (not in subsequences) with gaps in the MSA.
+ * 
+ * We remove all GR and GC markup from the msa, except for possibly #=GC RF if <do_keeprf> 
+ * is TRUE, else we remove that too.
+ */
+static int trim_msa(ESL_MSA *msa, ESL_SQ **sq, int do_keeprf, char *errbuf)
+{
+  int status;
+  int i, r;
+  int apos, uapos;
+  int astart,  aend;
+  int uastart, uaend;
+  char *offset;
+  char *aseq;
+  char *uaseq;
+  char *uasubseq;
+  int *a2ua_map;
+  int *ua2a_map;
+  int ualen;
+
+  if(! (msa->flags & eslMSA_DIGITAL))
+    ESL_FAIL(eslEINVAL, errbuf, "in trim_msa(), msa must be digitized.");
+
+  ESL_ALLOC(aseq,  sizeof(char) * (msa->alen+1));
+
+  for(i = 0; i < msa->nseq; i++)
+    {
+      if (sq[i]->dsq == NULL) ESL_FAIL(eslEINVAL, errbuf, "in trim_msa(), sq's must be digitized.");
+      if (sq[i]->n   == 0)    ESL_FAIL(eslEINVAL, errbuf, "in trim_msa(), sq[%d] is zero-length\n", i);
+
+      ESL_ALLOC(a2ua_map, sizeof(int) * (msa->alen+1));
+      esl_vec_ISet(a2ua_map, (msa->alen+1), -1);
+      uapos = apos = 1;
+      while(apos <= msa->alen)
+	{
+	  while(apos <= msa->alen && esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) apos++;
+	  if(apos <= msa->alen) a2ua_map[apos] = uapos++;
+	  apos++;
+	}
+      ualen = uapos;
+      ESL_ALLOC(ua2a_map, sizeof(int) * (ualen+1));
+      ua2a_map[0] = -1;
+      for(apos = 1; apos <= msa->alen; apos++)
+	if(a2ua_map[apos] != -1)
+	  ua2a_map[a2ua_map[apos]] = apos;
+
+      ESL_ALLOC(uasubseq, sizeof(char) * (sq[i]->n+1));
+      esl_abc_Textize(msa->abc, sq[i]->dsq, sq[i]->n, uasubseq);
+      esl_abc_Textize(msa->abc, msa->ax[i], msa->alen, aseq);
+
+      esl_strdup(aseq, -1, &(uaseq));
+      esl_strdealign(uaseq, uaseq, "-_.~", NULL);
+      offset = strstr(uaseq, uasubseq); /* we'll replace the first occurence of uasubseq in uaseq */
+      if(offset == NULL) ESL_FAIL(eslEINVAL, errbuf, "in trim_msa(), sq[%d] is not a subseq of msa seq %d\n", i, i);
+      uastart = offset  - uaseq + 1;
+      uaend   = uastart + strlen(uasubseq) - 1;
+      astart  = ua2a_map[uastart];
+      aend    = ua2a_map[uaend];
+      free(ua2a_map);
+      free(a2ua_map);
+
+      for(apos = 1;        apos <  astart;    apos++) msa->ax[i][apos] = msa->abc->K; /* make it a gap */
+      for(apos = aend + 1; apos <= msa->alen; apos++) msa->ax[i][apos] = msa->abc->K; /* make it a gap */
+      free(uaseq);
+      free(uasubseq);
+    }
+
+  /* Free all per-column annotation that might now be invalid */
+  if(! do_keeprf && msa->rf != NULL) { free(msa->rf); msa->rf = NULL; }
+  if(msa->ss_cons != NULL) { free(msa->ss_cons); msa->ss_cons = NULL; }
+  if(msa->sa_cons != NULL) { free(msa->sa_cons); msa->sa_cons = NULL; }
+  if(msa->pp_cons != NULL) { free(msa->pp_cons); msa->pp_cons = NULL; }
+
+  /* Free all per-residue annotation (alternatively, we could just add gaps to the gaps we've created by 
+   * trimming, but this would cause problems for SS annotation, for example. */
+  if(msa->ss != NULL) { 
+    for(i = 0; i < msa->nseq; i++) if(msa->ss[i] != NULL) { free(msa->ss[i]); }
+    free(msa->ss); 
+    msa->ss = NULL;
+  }
+  if(msa->sa != NULL) { 
+    for(i = 0; i < msa->nseq; i++) if(msa->sa[i] != NULL) { free(msa->sa[i]); }
+    free(msa->sa); 
+    msa->sa = NULL;
+  }
+  if(msa->pp != NULL) { 
+    for(i = 0; i < msa->nseq; i++) if(msa->pp[i] != NULL) { free(msa->pp[i]); }
+    free(msa->pp); 
+    msa->pp = NULL;
+  }
+  if(msa->ngr > 0) { 
+    for(r = 0; r < msa->ngr; r++) { 
+      for(i = 0; i < msa->nseq; i++) if(msa->gr[r][i] != NULL) { free(msa->gr[r][i]); }
+      free(msa->gr[r]);
+    }
+    if(msa->gr_idx != NULL) { esl_keyhash_Destroy(msa->gr_idx); msa->gr_idx = NULL; }
+    msa->gr_idx = NULL;
+    free(msa->gr);
+    msa->gr = NULL;
+    msa->ngr = 0;
+  }
+
+  free(aseq);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* prune_msa_based_on_posteriors
+ *                   
+ * Given an MSA and a minimum posterior probability (PP) <min_pp>
+ * value to keep, replace all residues that have posterior
+ * probabilities < <min_pp> with gaps. The PP values for these
+ * residues are replaced with gaps as well. 
+ * 
+ * We remove all GF, GS, GR and GC markup from the msa, except for GR
+ * PP annotation and parsed GC annotation, like SS_cons, RF, SA_cons
+ * and PP_cons.
+ */
+static int prune_msa_based_on_posteriors(ESL_MSA *msa, float min_pp, char *errbuf)
+{
+  double ppminA[11]; /* values of the 11 possible nongap PP values, '0'-'9' and '*', hardcoded here */
+  float max_pp;  /* max allowable min_pp value */
+  int i, r;      /* counters */
+  int min_ppidx; /* index in ppminA[] corresponding to minimum allowed PP */
+  int apos;
+  int ppidx;
+
+  ppminA[0]  = 0.00;
+  ppminA[1]  = 0.05;
+  ppminA[2]  = 0.15;
+  ppminA[3]  = 0.25;
+  ppminA[4]  = 0.35;
+  ppminA[5]  = 0.45;
+  ppminA[6]  = 0.55;
+  ppminA[7]  = 0.65;
+  ppminA[8]  = 0.75;
+  ppminA[9]  = 0.85;
+  ppminA[10] = 0.95;
+  max_pp = 0.95;
+
+  if(! (msa->flags & eslMSA_DIGITAL))
+    ESL_FAIL(eslEINVAL, errbuf, "in prune_msa_based_on_posteriors(), msa must be digitized.");
+  if(msa->pp == NULL) 
+    ESL_FAIL(eslEINVAL, errbuf, "in prune_msa_based_on_posteriors(), msa has no PP annotation.");
+
+  /* determine the index in ppminA of the minimum allowed PP */
+  min_ppidx = 0; 
+  /* special case, check to see if max possible min_pp was passed in, this is 0.95 */
+  if(esl_FCompare(min_pp, max_pp, eslSMALLX1) == eslOK) { 
+    min_ppidx = 10;
+  }
+  else if(min_pp > max_pp) { 
+    ESL_FAIL(eslERANGE, errbuf, "in prune_msa_based_on_posteriors(), min_pp (%f) is too large (max allowed is %f)\n", min_pp, max_pp);
+  }
+  else {
+    while((min_ppidx < 10) && (min_pp > ppminA[min_ppidx])) { 
+      min_ppidx++;
+    }
+  }
+
+  /* replace all PP values less than our minimum, and their associated residues, with gaps */
+  for(i = 0; i < msa->nseq; i++) { 
+    /* rename the sequence */
+    if(msa->pp[i] != NULL) {
+      for(apos = 1; apos <= msa->alen; apos++) { 
+	/* be wary off the off-by-one b/t msa->ax and msa->pp */
+	if(! esl_abc_CIsGap(msa->abc, msa->pp[i][apos-1])) { 
+	  ppidx = get_pp_idx(msa->abc, msa->pp[i][apos-1]);
+	  if(ppidx < min_ppidx) { /* not a gap, and less than our minimum */
+	    msa->ax[i][apos]   = msa->abc->K; /* make this residue a gap */
+	    msa->pp[i][apos-1] = '.';         /* make the PP for this residue a gap */
+	  }
+	}
+      }
+    }	
+  }  
+
+  /* Free annotation in MSA because we can't be sure any of it is
+   * valid anymore -- we've removed residues from the sequences (!)
+   */
+
+  /* Free all per-file (GF) annotation */
+  for(r = 0; r < msa->ngf; r++) { 
+    if(msa->gf[r]     != NULL) free(msa->gf[r]); 
+    if(msa->gf_tag[r] != NULL) free(msa->gf_tag[r]);
+  }
+  if(msa->gf != NULL)     { free(msa->gf);     msa->gf     = NULL; }
+  if(msa->gf_tag != NULL) { free(msa->gf_tag); msa->gf_tag = NULL; }
+  msa->ngf = 0;
+
+  /* Free all per-column (GC) annotation that might now be invalid,
+   * we leave the parsed GC annotation, like SS_cons 
+   */
+  for(r = 0; r < msa->ngc; r++) { 
+    if(msa->gc[r]     != NULL) free(msa->gc[r]); 
+    if(msa->gc_tag[r] != NULL) free(msa->gc_tag[r]);
+  }
+  if(msa->gc != NULL)     { free(msa->gc);     msa->gc     = NULL; }
+  if(msa->gc_tag != NULL) { free(msa->gc_tag); msa->gc_tag = NULL; }
+  if(msa->gc_idx != NULL) { esl_keyhash_Destroy(msa->gc_idx); msa->gc_idx = NULL; }
+  msa->ngc = 0;
+
+  /* Free all per-sequence (GS) annotation */
+  for(r = 0; r < msa->ngc; i++) { 
+    if(msa->gs[r]     != NULL) { 
+      for(i = 0; i < msa->nseq; i++) { 
+	free(msa->gs[r][i]); 
+      }
+      free(msa->gs[r]);
+    }
+    if(msa->gc_tag[r] != NULL) free(msa->gc_tag[r]);
+  }
+  if(msa->gs != NULL)     { free(msa->gs);     msa->gs     = NULL; }
+  if(msa->gs_tag != NULL) { free(msa->gs_tag); msa->gs_tag = NULL; }
+  if(msa->gs_idx != NULL) { esl_keyhash_Destroy(msa->gs_idx); msa->gs_idx = NULL; }
+  msa->ngs = 0;
+
+  /* Free all per-residue (GR) annotation (except PP) */
+  if(msa->ss != NULL) { 
+    for(i = 0; i < msa->nseq; i++) if(msa->ss[i] != NULL) { free(msa->ss[i]); }
+    free(msa->ss); 
+    msa->ss = NULL;
+  }
+  if(msa->sa != NULL) { 
+    for(i = 0; i < msa->nseq; i++) if(msa->sa[i] != NULL) { free(msa->sa[i]); }
+    free(msa->sa); 
+    msa->sa = NULL;
+  }
+  if(msa->ngr > 0) { 
+    for(r = 0; r < msa->ngr; r++) { 
+      for(i = 0; i < msa->nseq; i++) if(msa->gr[r][i] != NULL) { free(msa->gr[r][i]); }
+      free(msa->gr[r]);
+    }
+    if(msa->gr_idx != NULL) { esl_keyhash_Destroy(msa->gr_idx); msa->gr_idx = NULL; }
+    msa->gr_idx = NULL;
+    free(msa->gr);
+    msa->gr = NULL;
+    msa->ngr = 0;
+  }
+
+  return eslOK;
+}
+
+/* get_pp_idx
+ *                   
+ * Given a #=GR PP or #=GC PP_cons character, return the appropriate index
+ * in a pp_ct[] vector. 
+ * '0' return 0;
+ * '1' return 1;
+ * '2' return 2;
+ * '3' return 3;
+ * '4' return 4;
+ * '5' return 5;
+ * '6' return 6;
+ * '7' return 7;
+ * '8' return 8;
+ * '9' return 9;
+ * '*' return 10;
+ * gap return 11;
+ * 
+ * Anything else (including missing or nonresidue) return -1;
+ *
+ * This mapping of PP chars to return values should probably be 
+ * stored in some internal map structure somewhere.
+ */
+static int get_pp_idx(ESL_ALPHABET *abc, char ppchar)
+{
+  if(esl_abc_CIsGap(abc, ppchar)) return 11;
+  if(ppchar == '*')               return 10;
+  if(ppchar == '9')               return 9;
+  if(ppchar == '8')               return 8;
+  if(ppchar == '7')               return 7;
+  if(ppchar == '6')               return 6;
+  if(ppchar == '5')               return 5;
+  if(ppchar == '4')               return 4;
+  if(ppchar == '3')               return 3;
+  if(ppchar == '2')               return 2;
+  if(ppchar == '1')               return 1;
+  if(ppchar == '0')               return 0;
+  return -1;
+}
+
+/* get_tree_order
+ *                   
+ * Given a tree, determine the branching order of the sequences
+ * it represents by traversing it preorder.
+ */
+static int get_tree_order(ESL_TREE *T, char *errbuf, int **ret_order)
+{
+  int status;
+  int opos = 0;
+  int nd;
+  int *order; 
+  ESL_STACK *pda;
+  ESL_ALLOC(order, sizeof(int) * T->N);
+
+  opos = 0;
+  pda  = esl_stack_ICreate();
+  esl_stack_IPush(pda, T->right[0]);
+  esl_stack_IPush(pda, T->left[0]);
+  while (esl_stack_IPop(pda, &nd) != eslEOD)
+    {
+      if (nd > 0) { /* a node */
+	esl_stack_IPush(pda, T->right[nd]); /* index for right child */
+	esl_stack_IPush(pda, T->left[nd]);  /* index for left child */
+      }
+      else /* nd <= 0, a child */
+	order[opos++] = nd * -1;
+    }
+  *ret_order = order;
+  esl_stack_Destroy(pda);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* reorder_msa
+ *                   
+ * Given an array specifying a new order for the sequences in
+ * the MSA, reorder it by swapping pointers.
+ */
+static int
+reorder_msa(ESL_MSA *msa, int *order, char *errbuf)
+{
+  int status;
+  char **tmp; 
+  ESL_ALLOC(tmp, sizeof(char *) * msa->nseq);
+  int i, a;
+
+  /* contract check */
+  /* 'order' must be have nseq elements, elements must be in range [0..nseq-1], no duplicates  */
+  int *covered;
+  ESL_ALLOC(covered, sizeof(int) * msa->nseq);
+  esl_vec_ISet(covered, msa->nseq, 0);
+  for(i = 0; i < msa->nseq; i++) { 
+    /* printf("order[i:%4d]: %4d\n", i, order[i]);
+       printf("covered[order[i:%4d]]: %4d\n", i, covered[order[i]]);
+    */
+    if(covered[order[i]]) ESL_FAIL(eslEINVAL, errbuf, "reorder_msa() order array has duplicate entries for i: %d\n", i);
+    covered[order[i]] = 1;
+  }
+  free(covered);
+
+  /* swap aseq or ax (one or the other must be non-NULL) */
+  if(msa->flags & eslMSA_DIGITAL) { /* digital MSA */
+    ESL_DSQ **tmp_dsq; 
+    ESL_ALLOC(tmp_dsq, sizeof(ESL_DSQ *) * msa->nseq);
+    for(i = 0; i < msa->nseq; i++) tmp_dsq[i] = msa->ax[i];
+    for(i = 0; i < msa->nseq; i++) msa->ax[i] = tmp_dsq[order[i]];
+    free(tmp_dsq);
+  }
+  else { /* text MSA */
+    for(i = 0; i < msa->nseq; i++) tmp[i] = msa->aseq[i];
+    for(i = 0; i < msa->nseq; i++) msa->aseq[i] = tmp[order[i]];
+  }
+
+  /* swap sqnames (mandatory) */
+  for(i = 0; i < msa->nseq; i++) tmp[i] = msa->sqname[i];
+  for(i = 0; i < msa->nseq; i++) msa->sqname[i] = tmp[order[i]];
+
+  /* swap sqacc, if they exist */
+  if(msa->sqacc != NULL) { 
+    for(i = 0; i < msa->nseq; i++) tmp[i] = msa->sqacc[i];
+    for(i = 0; i < msa->nseq; i++) msa->sqacc[i] = tmp[order[i]];
+  }
+
+  /* swap sqdesc, if they exist */
+  if(msa->sqdesc != NULL) { 
+    for(i = 0; i < msa->nseq; i++) tmp[i] = msa->sqdesc[i];
+    for(i = 0; i < msa->nseq; i++) msa->sqdesc[i] = tmp[order[i]];
+  }
+
+  /* swap ss, if they exist */
+  if(msa->ss != NULL) { 
+    for(i = 0; i < msa->nseq; i++) tmp[i] = msa->ss[i];
+    for(i = 0; i < msa->nseq; i++) msa->ss[i] = tmp[order[i]];
+  }
+
+  /* swap sa, if they exist */
+  if(msa->sa != NULL) { 
+    for(i = 0; i < msa->nseq; i++) tmp[i] = msa->sa[i];
+    for(i = 0; i < msa->nseq; i++) msa->sa[i] = tmp[order[i]];
+  }
+
+  /* swap pp, if they exist */
+  if(msa->pp != NULL) { 
+    for(i = 0; i < msa->nseq; i++) tmp[i] = msa->pp[i];
+    for(i = 0; i < msa->nseq; i++) msa->pp[i] = tmp[order[i]];
+  }
+
+  /* swap gs annotation, if it exists */
+  for(a = 0; a < msa->ngs; a++) {
+    for(i = 0; i < msa->nseq; i++) tmp[i] = msa->gs[a][i];
+    for(i = 0; i < msa->nseq; i++) msa->gs[a][i] = tmp[order[i]];
+  }
+
+  /* swap gr annotation, if it exists */
+  for(a = 0; a < msa->ngr; a++) {
+    for(i = 0; i < msa->nseq; i++) tmp[i] = msa->gr[a][i];
+    for(i = 0; i < msa->nseq; i++) msa->gr[a][i] = tmp[order[i]];
+  }
+  free(tmp);
+  return eslOK;
+
+ ERROR: 
+  return status;
+}
+
+/* read_mask_file
+ *
+ * Given an open file pointer, read the first token of the
+ * file and return it as *ret_mask. It must contain only
+ * '0' or '1' characters.
+ *
+ * Returns:  eslOK on success.
+ */
+int
+read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_mask_len)
+{
+  int             status;
+  ESL_FILEPARSER *efp;
+  char           *tok;
+  char           *mask;
+  int             toklen;
+  int             n;
+
+  if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in read_mask_file\n", filename);
+  esl_fileparser_SetCommentChar(efp, '#');
+  
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to read a single token from %s\n", filename);
+
+  ESL_ALLOC(mask, sizeof(char) * (toklen+1));
+  for(n = 0; n < toklen; n++) { 
+    if((tok[n] == '0') || (tok[n] == '1')) { 
+      mask[n] = tok[n];
+    }
+    else { ESL_FAIL(eslFAIL, errbuf, "read a non-0 and non-1 character (%c) in the mask file %s\n", tok[n], filename); }
+  }
+  mask[n] = '\0';
+
+  *ret_mask = mask;
+  *ret_mask_len = n;
+  esl_fileparser_Close(efp);
+  return eslOK;
+  
+ ERROR:
+  return eslEMEM;
+}
+
+
+/* expand_msa2mask
+ *
+ * Given an MSA <msa> and a lanemask <xmask> with exactly msa->alen 1s in it.
+ * Add 100% gap columns in between each column as dictated by <xmask>.
+ *
+ * For example if lanemask is 100101, msa->alen is 3, we add 2 100% gap
+ * columns after column 1, and 1 100% gap column after column 2, to make
+ * the msa length = length(xmask) = 6.
+ */
+static int
+expand_msa2mask(char *errbuf, ESL_MSA *msa, char *xmask, ESL_MSA **newmsa)
+{
+  int status;
+  int  mpos;
+  int  masklen;
+  int *nzeroesA;
+  int  nones = 0;
+
+  if(xmask == NULL) ESL_FAIL(eslEINVAL, errbuf, "expand_msa2mask(), xmask is NULL.");
+
+  masklen = strlen(xmask);
+  /* count 1s in xmask */
+  for (mpos = 0; mpos < masklen; mpos++) { 
+    if     (xmask[mpos] == '1') nones++;
+    else if(xmask[mpos] == '0') ; /* do nothing */
+    else    ESL_FAIL(eslEINVAL, errbuf, "--xmask mask char number %d is not a 1 nor a 0, but a %c\n", mpos+1, xmask[mpos]);
+  }
+  if(nones != msa->alen) ESL_FAIL(eslEINVAL, errbuf, "expand_msa2mask(), number of 1s in --xmask file: %d != msa->alen: %" PRId64 ", they must be equal.", nones, msa->alen);
+
+  /* determine number of 0s after each consensus column */
+  nones = 0;
+  ESL_ALLOC(nzeroesA, sizeof(int) * (masklen+1));
+  esl_vec_ISet(nzeroesA, (masklen+1), 0);
+  for (mpos = 0; mpos < masklen; mpos++) { 
+    if     (xmask[mpos] == '1') nones++;
+    else if(xmask[mpos] == '0') nzeroesA[nones]++;
+    else    ESL_FAIL(eslEINVAL, errbuf, "--xmask mask char number %d is not a 1 nor a 0, but a %c\n", mpos+1, xmask[mpos]);
+  }
+  
+  /*int i;
+  for (i = 0; i <= nones; i++) { 
+    printf("nzeroes[%3d]: %3d\n", i, nzeroesA[i]);
+    }*/
+
+  /* add the 100% gap columns */
+  if((status = add_gap_columns_to_msa(errbuf, msa, nzeroesA, newmsa, TRUE)) != eslOK) return status ;
+  /* new alen should equal masklen */
+  if((*newmsa)->alen != masklen) ESL_FAIL(eslEINVAL, errbuf, "expand_msa2mask(), new msa->alen: (%" PRId64 ") != length of mask (%d), this shouldn't happen.", (*newmsa)->alen, masklen);
+  free(nzeroesA);
+
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* Function: msa_median_length()
+ * 
+ * Purpose:  Returns the median (unaligned) length of 
+ *           the sequences in an alignment.
+ */
+static int
+msa_median_length(ESL_MSA *msa)
+{
+  int  status;
+  int *len;
+  int  i;
+  int  median;
+  ESL_SQ *sq;
+  sq = esl_sq_CreateDigital(msa->abc);
+
+  ESL_ALLOC(len, sizeof(int) * msa->nseq);
+  for (i = 0; i < msa->nseq; i++) {
+    esl_sq_GetFromMSA(msa, i, sq);
+    len[i] = sq->n;
+    esl_sq_Reuse(sq);
+    /* printf("i: %d len: %d\n", i, len[i]);*/
+  }
+
+  qsort(len, msa->nseq, sizeof(int), compare_ints);
+
+  /* for (i = 0; i < msa->nseq; i++) {
+    printf("i: %d len: %d\n", i, len[i]);
+  }
+  */
+
+  median = len[msa->nseq / 2];
+  free(len);
+
+  esl_sq_Destroy(sq);
+  return median;
+
+ ERROR:
+  esl_fatal("msa_median_length() memory allocation error.");
+  return 0.; /* NEVERREACHED */
+}
+
+
+/* Function: msa_remove_seqs_below_minlen()
+ * 
+ * Purpose:  Remove sequences in MSA whose dealigned length is less than a minimum length.
+ *           If <i_am_rf> is non-NULL, only consider positions that are nongap RF.
+ */
+static int
+msa_remove_seqs_below_minlen(ESL_MSA *msa, float minlen, int *i_am_rf, ESL_MSA **ret_new_msa)
+{
+  int     status;
+  int    *useme;   /* [0..msa->nseq-1]: 1 to keep sequence, 0 to remove it */
+  int     i, apos; /* sequence index, alignment position */
+  int64_t len;     /* length of current sequence, either nongap length (if i_am_rf == NULL) or nongap RF length (if i_am_rf != NULL) */
+
+  ESL_MSA *new_msa;
+  ESL_SQ *sq;
+  sq = esl_sq_CreateDigital(msa->abc);
+
+  ESL_ALLOC(useme, sizeof(int) * msa->nseq);
+  for (i = 0; i < msa->nseq; i++) {
+    if(i_am_rf != NULL) { 
+      len = 0;
+      for(apos = 1; apos <= msa->alen; apos++) { 
+        if(i_am_rf[(apos-1)] && (! esl_abc_XIsGap(msa->abc, msa->ax[i][apos]))) len++;
+      }
+    }
+    else { /* i_am_rf is NULL, consider the entire sequence */
+      esl_sq_GetFromMSA(msa, i, sq);
+      len = sq->n;
+      esl_sq_Reuse(sq);
+    }
+    useme[i] = ((float) len >= minlen) ? TRUE : FALSE;
+    /*printf("useme[i:%d]: %d (len: %" PRId64 ", minlen: %.2f)\n", i, useme[i], len, minlen);*/
+  }
+
+  if(esl_vec_ISum(useme, msa->nseq) == 0) esl_fatal("No sequences at or above minimum allowed length.");
+  if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal("esl_msa_SequenceSubset() had a problem.");
+  free(useme);
+  esl_sq_Destroy(sq);
+  *ret_new_msa = new_msa;
+  return eslOK;
+
+ ERROR:
+  esl_fatal("msa_remove_seqs_below_minlen() memory allocation error.");
+  return eslOK; /* NEVERREACHED */
+}
+
+
+/* Function: msa_remove_seqs_above_maxlen()
+ * 
+ * Purpose:  Remove sequences in MSA whose dealigned length is more than a maximum length.
+ */
+static int
+msa_remove_seqs_above_maxlen(ESL_MSA *msa, float maxlen, ESL_MSA **ret_new_msa)
+{
+  int  status;
+  int *useme;
+  int  i;
+
+  ESL_MSA *new_msa;
+  ESL_SQ *sq;
+  sq = esl_sq_CreateDigital(msa->abc);
+
+  ESL_ALLOC(useme, sizeof(int) * msa->nseq);
+  for (i = 0; i < msa->nseq; i++) {
+    esl_sq_GetFromMSA(msa, i, sq);
+    useme[i] = ((float) sq->n <= maxlen) ? TRUE : FALSE;
+    /*printf("useme[i:%d]: %d\n", i, useme[i]);*/
+    esl_sq_Reuse(sq);
+  }
+
+  if(esl_vec_ISum(useme, msa->nseq) == 0) esl_fatal("No sequences are less than maximum allowed length.");
+  if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal("esl_msa_SequenceSubset() had a problem.");
+  free(useme);
+  esl_sq_Destroy(sq);
+  *ret_new_msa = new_msa;
+  return eslOK;
+
+ ERROR:
+  esl_fatal("msa_remove_seqs_above_maxlen() memory allocation error.");
+  return eslOK; /* NEVERREACHED */
+}
+
+/* Function: msa_remove_truncated_seqs()
+ * 
+ * Purpose:  Remove sequences in MSA that have all gaps in the first <ntrunc> 5' leading 
+ *           non-gap RF columns OR the last <ntrunc> 3' leading non-gap RF columns
+ */
+static int
+msa_remove_truncated_seqs(ESL_MSA *msa, char *errbuf, int ntrunc, int *i_am_rf, ESL_MSA **ret_new_msa)
+{
+  int  status;
+  int *useme;
+  int  i;
+  int  leading_okay, trailing_okay;
+  int  apos, rfpos_ct;
+  int  nused = 0;
+  ESL_MSA *new_msa;
+
+  /* contract check */
+  if(! (msa->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in msa_remove_truncated_seqs(), msa must be digitized.");
+  if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "No #=GC RF markup in alignment, it is needed for --detrunc.");
+  if(i_am_rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "internal error, msa_remove_truncated_seq() i_am_rf is NULL.");
+
+  ESL_ALLOC(useme, sizeof(int) * msa->nseq);
+
+  for(i = 0; i < msa->nseq; i++) { 
+    /* if ALL of the first 5' <ntrunc> non-gap RF columns are gaps in this seq, we'll remove it */
+    leading_okay  = FALSE;
+    rfpos_ct = 0; 
+    apos = 1;
+    while(!leading_okay && (rfpos_ct < ntrunc) && (apos <= msa->alen)) { 
+      if(i_am_rf[(apos-1)]) { 
+	rfpos_ct++;
+	if(! esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) leading_okay = TRUE;
+      }
+      apos++;
+    }
+
+    trailing_okay = FALSE;
+    rfpos_ct = 0;
+    apos = msa->alen;
+    while(!trailing_okay && (rfpos_ct < ntrunc) && (apos >= 1)) { 
+      if(i_am_rf[(apos-1)]) { 
+	rfpos_ct++;
+	if(! esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) trailing_okay = TRUE;
+      }
+      apos--;
+    }
+    useme[i] = (leading_okay && trailing_okay) ? TRUE : FALSE;
+    if(useme[i]) nused++;
+  }
+  if(nused == 0) ESL_FAIL(eslEINVAL, errbuf, "--detrunc removed ALL sequences!");
+  if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal("esl_msa_SequenceSubset() had a problem.");
+  free(useme);
+  *ret_new_msa = new_msa;
+  return eslOK;
+
+ ERROR:
+  ESL_FAIL(status, errbuf, "msa_remove_truncated_seqs(): memory allocation error.");
+  return eslOK; /* NEVERREACHED */
+}
+
+
+/* Function: msa_remove_seqs_with_ambiguities()
+ * 
+ * Purpose:  Remove sequences in MSA that have more than <max_nambig> ambiguous residues.
+ */
+static int
+msa_remove_seqs_with_ambiguities(ESL_MSA *msa, int max_nambig, ESL_MSA **ret_new_msa)
+{
+  int  status;
+  int *useme;
+  int  i, j;
+  int  nambig;
+
+  ESL_MSA *new_msa;
+  ESL_SQ *sq;
+  sq = esl_sq_CreateDigital(msa->abc);
+
+  ESL_ALLOC(useme, sizeof(int) * msa->nseq);
+  for (i = 0; i < msa->nseq; i++) {
+    esl_sq_GetFromMSA(msa, i, sq);
+    nambig = 0;
+    for (j = 1; sq->dsq[j] != eslDSQ_SENTINEL; j++) {
+      if (esl_abc_XIsDegenerate(sq->abc, sq->dsq[j])) nambig++;
+    }
+    useme[i] = (nambig > max_nambig) ? FALSE : TRUE;
+    esl_sq_Reuse(sq);
+  }    
+
+  if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal("esl_msa_SequenceSubset() had a problem.");
+  free(useme);
+  esl_sq_Destroy(sq);
+  *ret_new_msa = new_msa;
+  return eslOK;
+
+ ERROR:
+  esl_fatal("msa_remove_seqs_above_maxlen() memory allocation error.");
+  return eslOK; /* NEVERREACHED */
+}
+
+/* number_columns
+ *                   
+ * Add annotation to an MSA numbering the columns, either all
+ * the columns (if <do_all>) or just non-gap #=GC RF columns.
+ * If do_all is FALSE, i_am_rf must be non-NULL.
+ */
+static int
+number_columns(ESL_MSA *msa, int do_all, int *i_am_rf, char *errbuf)
+{
+  int  status;
+  int i;
+  char *numstring;
+  char *tag;
+  int alen_ndigits;
+  int tagwidth;
+  int a,b,apos;
+  int bmin;
+  int pos2print;
+  int tagidx;
+
+  /* contract check */
+  if(!do_all && i_am_rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "number_columns() called but MSA has no #=GC RF annotation.");
+
+  alen_ndigits = int_ndigits(msa->alen);
+  tagwidth = do_all ? (3+alen_ndigits) : (5+alen_ndigits); /* "COL.X" or RFCOL.X" */
+
+  ESL_ALLOC(tag, sizeof(char) * (tagwidth+1));
+  ESL_ALLOC(numstring, sizeof(char) * (msa->alen+1));
+  numstring[msa->alen] = '\0';
+  tag[tagwidth] = '\0';
+  if(do_all) { 
+    bmin = 3;
+    tag[0] = 'C';
+    tag[1] = 'O';
+    tag[2] = 'L';
+  }
+  else { 
+    bmin = 5;
+    tag[0] = 'R';
+    tag[1] = 'F';
+    tag[2] = 'C';
+    tag[3] = 'O';
+    tag[4] = 'L';
+  }
+
+  for(a = 0; a < alen_ndigits; a++) { 
+    for(b = 0; b < alen_ndigits; b++) tag[b+bmin] = (a == b) ? 'X' : '.';
+    pos2print = 1;
+    for(apos = 1; apos <= msa->alen; apos++) { 
+      if(!do_all && (! i_am_rf[(apos-1)])) numstring[(apos-1)] = '.';
+      else numstring[(apos-1)] = get_char_digit_x_from_int(pos2print++, (alen_ndigits-a));
+	/*printf("called get_char_digit_x_from_int(%d, %d)\n",apos, (alen_ndigits-a));*/
+    }
+    /* If the tag already exists, free it's associated markup string. This is an awful hack. */
+    for (tagidx = 0; tagidx < msa->ngc; tagidx++) 
+      if (strcmp(msa->gc_tag[tagidx], tag) == 0) break;
+    if(tagidx != msa->ngc) { /* tag exists */
+      free(msa->gc[tagidx]);
+      msa->gc[tagidx] = NULL;
+    }
+
+    esl_msa_AppendGC(msa, tag, numstring);
+  }
+
+  ESL_ALLOC(numstring, sizeof(char) * (msa->alen + 1));
+  for(i = 0; i < msa->alen; i++) { 
+    numstring[i] = digit_to_char(i);
+  }
+  numstring[msa->alen] = '\0';
+  free(numstring);
+  return eslOK;
+
+ ERROR:
+  return eslEMEM;
+}
+
+
+/* digit_to_char
+ *                   
+ * Given a digit (0-9) return the character reprentation of it.
+ * There must be a better way to do this; oh well.
+ */
+static char
+digit_to_char(int digit) 
+{
+  if(digit == 0) return '0';
+  if(digit == 1) return '1';
+  if(digit == 2) return '2';
+  if(digit == 3) return '3';
+  if(digit == 4) return '4';
+  if(digit == 5) return '5';
+  if(digit == 6) return '6';
+  if(digit == 7) return '7';
+  if(digit == 8) return '8';
+  if(digit == 9) return '9';
+  else return '?';
+}
+
+/* Function: int_ndigits
+ * Returns: The number of digits in <i>.
+ */
+static int
+int_ndigits(int i)
+{
+  int n   = 0;
+  while(i > 0) { i/=10; n++; }
+  return n;
+}
+
+/* get_char_digit_x_from_int
+ *                   
+ * Given two integers <i> and <place> return the 
+ * character version of the <place>'th digit in <i>.
+ * Example <i> = 14378 <place> = 4 would return 7.
+ */
+static char
+get_char_digit_x_from_int(int i, int place)
+{
+  int n,a,divisor;
+  n = int_ndigits(i);
+
+  if(n < place) return digit_to_char(0);
+
+  divisor = 1;
+  for(a = 0; a < (place-1); a++) divisor *= 10;
+  /* subtract leading digits before the one we care about */
+  i %= (divisor*10);
+  return digit_to_char (i / divisor);
+}
+
+/* Function: read_seq_name_file
+ * Date:     EPN, Thu Jun  5 13:21:36 2008
+ * 
+ * Read a file listing sequence names to remove or keep.
+ * Store sequences in *ret_seqlist and return it.
+ * Each white-space delimited token is considered a 
+ * different sequence name. No checking is done in this 
+ * function, but rather in subsequent functions. 
+ * 
+ * Returns eslOK on success.
+ */
+int
+read_seq_name_file(char *filename, char *errbuf, char ***ret_seqlist, int *ret_seqlist_n)
+{
+  int             status;
+  ESL_FILEPARSER *efp;
+  char           *tok;
+  int             toklen;
+  int nalloc     = 10;
+  int chunksize  = 10;
+  char **seqlist = NULL;
+  int n = 0;
+  int i;
+  void *tmp;
+
+  ESL_ALLOC(seqlist, sizeof(char *) * nalloc);
+  if (esl_fileparser_Open(filename, NULL,  &efp) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "failed to open %s in read_seq_name_file\n", filename);
+  
+  while((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslEOF) {
+    if(n == nalloc) { nalloc += chunksize; ESL_RALLOC(seqlist, tmp, sizeof(char *) * nalloc); }
+    if((status = esl_strdup(tok, -1, &(seqlist[n++]))) != eslOK) ESL_FAIL(status, errbuf, "error in esl_strdup.");
+  }
+  esl_fileparser_Close(efp);
+  *ret_seqlist = seqlist;
+  *ret_seqlist_n = n;
+  return eslOK;
+
+ ERROR:
+  if(seqlist != NULL) {
+    for(i = 0; i < n; i++) free(seqlist[i]); 
+    free(seqlist);
+  }
+  return status;
+}
+
+
+/* Function: msa_keep_or_remove_seqs()
+ * 
+ * Purpose:  Given a list of <seqlist_n> sequences in <seqlist>, either remove those
+ *           sequences from msa, or remove all other sequences besides those from msa.
+ *           Create and return the new msa with only the specified seqs in <ret_new_msa>.
+ * 
+ * Returns: eslOK on success, eslEINVAL if a sequence name in seqlist does not exist in the msa.
+ * 
+ */
+static int
+msa_keep_or_remove_seqs(ESL_MSA *msa, char *errbuf, char **seqlist, int seqlist_n, int do_keep, int do_reorder, int nali, ESL_MSA **ret_new_msa)
+{
+  int  status;
+  int *useme;
+  int  i, ip, n;
+  int *order_all, *order_new;
+
+  ESL_MSA *new_msa;
+  if(msa->index == NULL) ESL_FAIL(eslEINVAL, errbuf, "ERROR, msa->index is NULL!");
+
+  ESL_ALLOC(useme,     sizeof(int) * msa->nseq);
+  ESL_ALLOC(order_all, sizeof(int) * msa->nseq);
+  ESL_ALLOC(order_new, sizeof(int) * seqlist_n);
+  esl_vec_ISet(order_all, msa->nseq, -1);
+
+  if(do_keep) esl_vec_ISet(useme, msa->nseq, FALSE);
+  else        esl_vec_ISet(useme, msa->nseq, TRUE); 
+
+  for(n = 0; n < seqlist_n; n++) { 
+    if((status = esl_keyhash_Lookup(msa->index, seqlist[n], -1, &i)) == eslENOTFOUND) 
+      ESL_FAIL(status, errbuf, "Error sequence %s does not exist in alignment %d", seqlist[n], nali);
+    useme[i] = do_keep ? TRUE : FALSE;
+    if(order_all[i] != -1) ESL_FAIL(eslEINVAL, errbuf, "ERROR sequence %s listed twice in a input list file.", seqlist[n]);
+    order_all[i] = n;
+  }
+
+  if(esl_vec_ISum(useme, msa->nseq) == 0) esl_fatal("No sequences remaining in the alignment!.");
+  if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal("esl_msa_SequenceSubset() had a problem.");
+  /* if do_keep, reorder to order of names in the list file */
+  if(do_keep && do_reorder) { 
+    ip = 0;
+    for(i = 0; i < msa->nseq; i++) { 
+      if(order_all[i] != -1) order_new[order_all[i]] = ip++;
+    }
+    if((status = reorder_msa(new_msa, order_new, errbuf)) != eslOK) return status;
+  }
+
+  free(useme);
+  free(order_all);
+  free(order_new);
+  *ret_new_msa = new_msa;
+  return eslOK;
+
+ ERROR:
+  esl_fatal("msa_keep_or_remove_seqs() memory allocation error.");
+  return eslOK; /* NEVERREACHED */
+}
+
+/* Function:  insert_x_pair_shared()
+ * Synopsis:  Calculate the fraction of inserts shared between of two aligned digital seqs.
+ * Incept:    EPN, Wed Jun 25 10:33:23 2008
+ *
+ * Purpose:   Returns the fraction of the total
+ *            number of inserts in both sequences that are shared.
+ *            An 'insert' is present in sequence s for consensus column 
+ *            (non-gap RF column) c if at least 1 residue exists between 
+ *            consensus column c and c+1. If sequence t also has an insert
+ *            between c and c+1, they share that insert. If that were the
+ *            only insert in either of the two sequences, then they would
+ *            share 1.0 fraction of inserts.
+ *            
+ * Args:      msa          - MSA, digitized, with RF annotation
+ *            i_am_rf      - [0..msa->alen-1], TRUE if apos is a nongap RF column, FALSE if not 
+ *            i            - index of seq 1
+ *            j            - indes of seq 2
+ *            cfirst       - first consensus position to consider
+ *            clast        - last consensus position to consider
+ *            opt_pshared  - optRETURN: pairwise insert identity, 0<=x<=1
+  *            opt_nshared  - optRETURN: # of inserts shared
+ *            opt_nins     - optRETURN: nins
+ *
+ * Returns:   <eslOK> on success. <opt_distance>, <opt_nid>, <opt_n>
+ *            contain the answers, for any of these that were passed
+ *            non-<NULL> pointers.
+ *
+ * Throws:    <eslEINVAL> if the strings are different lengths (not aligned).
+ */
+int
+insert_x_pair_shared(ESL_MSA *msa, int *i_am_rf, int i, int j, int cfirst, int clast, double *opt_pshared, int *opt_nshared, int *opt_nins)
+{
+  int     shared;               /* total shared inserts */
+  int     nins;                 /* number of inserts in either sequence */
+  int     apos;                 /* position in aligned seqs   */
+  int     rfpos;
+  int     insi, insj;
+  int     seen_insert = FALSE;
+  shared = nins = 0;
+  
+  rfpos = 0;
+  for(apos = 1; apos <= msa->alen; apos++)
+    {
+      if(! esl_abc_CIsGap(msa->abc, msa->rf[(apos-1)])) { 
+	rfpos++;
+	seen_insert = FALSE;
+      }
+      else { /* not a consensus column, an insert column */
+	insi = (! esl_abc_XIsGap(msa->abc, msa->ax[i][apos]));
+	insj = (! esl_abc_XIsGap(msa->abc, msa->ax[j][apos]));
+	if(rfpos >= cfirst && rfpos <= clast) { 
+	  if(insi && insj   && !seen_insert)   shared++;
+	  if((insi || insj) && !seen_insert) { nins++; seen_insert = TRUE; }
+	}
+      }
+    }
+  /*if (opt_pshared  != NULL)  *opt_pshared  = ( nins==0 ? 0. : (double) shared / (double) nins );*/
+  if (opt_pshared  != NULL)  *opt_pshared  = ( nins==0 ? 1. : (double) shared / (double) nins );
+  if (opt_nshared  != NULL)  *opt_nshared  = shared;
+  if (opt_nins     != NULL)  *opt_nins     = nins;
+  return eslOK;
+}
+
+
+/* Function:  insert_x_pair_shared_length()
+ * Synopsis:  Calculate the fraction of inserts shared between of two aligned digital seqs,
+ *            weighted by the length of the inserts.
+ * Incept:    EPN, Wed Jun 25 10:33:23 2008
+ *
+ * Purpose:   Returns the weighted fraction of the total
+ *            number of inserts in both sequences that are shared.
+ *            
+ * Args:      msa          - MSA, digitized, with RF annotation
+ *            i            - index of seq 1
+ *            j            - indes of seq 2
+ *            cfirst       - first consensus position to consider
+ *            clast        - last consensus position to consider
+ *            opt_pshared  - optRETURN: pairwise insert identity, 0<=x<=1
+ *            opt_nshared  - optRETURN: weighted # inserts shared
+ *            opt_nins     - optRETURN: nins, number of columns with an insert
+ *
+ * Returns:   <eslOK> on success. <opt_distance>, <opt_nid>, <opt_n>
+ *            contain the answers, for any of these that were passed
+ *            non-<NULL> pointers.
+ *
+ * Throws:    <eslEINVAL> if the strings are different lengths (not aligned).
+ */
+int
+insert_x_pair_shared_length(ESL_MSA *msa, int *i_am_rf, int i, int j, int cfirst, int clast, double *opt_pshared, double *opt_nshared, int *opt_nins)
+{
+  double  shared;               /* weighted shared inserts */
+  int     nins;                 /* number of inserts in either sequence */
+  int     apos;                 /* position in aligned seqs   */
+  int     rfpos;
+  int     leni, lenj;
+  shared = nins = leni = lenj = 0;
+  
+  rfpos = 0;
+  for(apos = 1; apos <= msa->alen; apos++)
+    {
+      if(i_am_rf[(apos-1)]) { 
+	rfpos++;
+	if(rfpos >= cfirst && rfpos <= clast) { 
+	  if((leni + lenj) > 0) { 
+	    nins++;
+	    if(leni >= lenj) shared += (double) lenj / (double) leni;
+	    else             shared += (double) leni / (double) lenj;
+	  }
+	  leni = lenj = 0;
+	}
+      }
+      else { /* not a consensus column, an insert column */
+	if(! esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) leni++;
+	if(! esl_abc_XIsGap(msa->abc, msa->ax[j][apos])) lenj++;
+      }
+    }
+  /*if (opt_pshared  != NULL)  *opt_pshared  = ( nins==0 ? 0. : (double) shared / (double) nins );*/
+  if (opt_pshared  != NULL)  *opt_pshared  = ( nins==0 ? 1. : (double) shared / (double) nins );
+  if (opt_nshared  != NULL)  *opt_nshared  = shared;
+  if (opt_nins     != NULL)  *opt_nins     = nins;
+  return eslOK;
+}
+
+/* Function:  insert_x_diffmx()
+ * Synopsis:  NxN insert difference matrix for N aligned digital seqs.         
+ * Incept:    EPN, Wed Jun 25 10:25:01 2008
+ *
+ * Purpose:   For each pair of sequences calculates the fraction of number
+ *            of inserts that are different between the two sequences.
+ *            An 'insert' is present in sequence s for consensus column 
+ *            (non-gap RF column) c if at least 1 residue exists between 
+ *            consensus column c and c+1. If sequence t also has an insert
+ *            between c and c+1, they share that insert. If that were the
+ *            only insert in either of the two sequences, then they would
+ *            share 1.0 fractional insert id, and 1.0 - 1.0 = 0.0 fractional 
+ *            insert difference, thus the insert diff mx entry between 
+ *            seq s and t would be 0.0.
+ *
+ * Args:      go - command-line options
+ *            errbuf - for printing error messages
+ *            msa   - aligned dsq's, [0..N-1][1..alen]                  
+ *            do_length_weight - weight insert similarity by length of inserts
+ *            do_only_internal_inserts - TRUE to only count inserts that are at positions
+ *                                       internal to both seq i, j (don't count those truncated off in either seq)
+ *            ret_D - RETURN: NxN matrix of fractional differences
+ *            
+ * Returns:   <eslOK> on success, and <ret_D> contains the difference
+ *            matrix; caller is obligated to free <D> with 
+ *            <esl_dmatrix_Destroy()>. 
+ *
+ * Throws:    <eslEINVAL> if a seq has a different
+ *            length than others. On failure, <ret_D> is returned <NULL>
+ *            and state of inputs is unchanged.
+ */
+int
+insert_x_diffmx(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa, int rflen, int *i_am_rf, int do_length_weight, int do_only_internal_inserts, ESL_DMATRIX **ret_D)
+{
+  int status;
+  ESL_DMATRIX *D = NULL;
+  int i,j;
+  int N = msa->nseq;
+  int nshared;
+  double nshared_len;
+  int nins;
+  int *firstA, *lastA; /* [0..i..nseq-1] first and last consensus column occupied by seq i, only used if do_only_internal_inserts == TRUE */
+  int ifirst, ilast, jfirst, jlast;
+
+  if(msa->rf == NULL)                  ESL_FAIL(eslEINVAL, errbuf, "No #=GC RF markup in alignment.");
+  if(! (msa->flags & eslMSA_DIGITAL))  ESL_FAIL(eslEINVAL, errbuf, "insert_x_diffmx() MSA is not digitized.\n");
+
+  if (( D = esl_dmatrix_Create(N,N) ) == NULL) esl_fatal(errbuf);
+  if ((status = determine_first_last_consensus_columns(msa, errbuf, i_am_rf, rflen, &firstA, &lastA)) != eslOK) return status;
+
+  /* TEMP  for (i = 0; i < N; i++) printf("i: %4d %4d %4d\n", i, firstA[i], lastA[i]); */
+
+  for (i = 0; i < N; i++)
+    {
+      D->mx[i][i] = 0.;
+      ifirst = do_only_internal_inserts ? firstA[i] : 0;
+      ilast  = do_only_internal_inserts ? lastA[i]  : rflen;
+      for (j = i+1; j < N; j++)
+	{
+	  jfirst = do_only_internal_inserts ? firstA[j] : 0;
+	  jlast  = do_only_internal_inserts ? lastA[j]  : rflen;
+	  if(do_length_weight) { 
+	    status = insert_x_pair_shared_length(msa, i_am_rf, i, j, ESL_MAX(ifirst, jfirst), ESL_MIN(ilast, jlast), &(D->mx[i][j]), &nshared_len, &nins);
+	    /* if(esl_opt_GetBoolean(go, "--verbose")) printf("D %4d %4d %.3f %8.3f of %4d\n", i, j, 1. - D->mx[i][j], nshared_len, nins); */
+	  }
+	  else { 
+	    status = insert_x_pair_shared(msa, i_am_rf, i, j, ESL_MAX(ifirst, jfirst), ESL_MIN(ilast, jlast), &(D->mx[i][j]), &nshared, &nins);
+	    /* if(esl_opt_GetBoolean(go, "--verbose")) printf("D %4d %4d %.3f %4d of %4d\n", i, j, 1. - D->mx[i][j], nshared, nins); */
+	  }
+	  D->mx[i][j] = 1. - D->mx[i][j]; /* convert from id to distance */
+	  if (status != eslOK) ESL_XEXCEPTION(status, "Pairwise insert identity calculation failed at seqs %d,%d\n", i,j);
+	  D->mx[j][i] =  D->mx[i][j];
+	}
+      /* if(esl_opt_GetBoolean(go, "--verbose")) printf("\n"); */
+    }
+  if (ret_D != NULL) *ret_D = D; else esl_dmatrix_Destroy(D);
+  return eslOK;
+
+ ERROR:
+  if (D     != NULL)  esl_dmatrix_Destroy(D);
+  if (ret_D != NULL) *ret_D = NULL;
+  return status;
+}
+
+/* Function: MSADivide()
+ * From Infernal's cmbuild.c
+ * EPN, Wed Mar 21 17:26:39 2007
+ * 
+ * Purpose:  Given an MSA and a distance matrix, divide the MSA it into 
+ *           multiple MSAs, each with a different cluster of the original 
+ *           sequences. Where clusters are defined by single linkage
+ *           clustering based on the distance matrix.
+ *
+ *           Different modes:
+ *           
+ *        1. if(do_mindiff): define clusters
+ *           such that we maximize the number of clusters while
+ *           satisfying: minimum fractional difference b/t any 
+ *           2 seqs in different clusters >= 'mindiff'. 
+ *           The contract states that mindiff > 0. in this case.
+ *           
+ *        2. if(do_nc): define clusters 
+ *           such that we have exactly 'target_nc' clusters by
+ *           searching for the 'mindiff' that gives exactly
+ *           'target_nc' clusters. (We guarantee we can do this
+ *           by rounding 'diff' fractional difference values b/t
+ *           seqs to nearest 0.001). 
+ *
+ *        3. if(do_nsize): define clusters 
+ *           such that we have 1 cluster that has at least nsize
+ *           sequences in it by searching for the 'mindiff' that 
+ *           achieves that.
+ *
+ * Args:    
+ * ESL_MSA *mmsa        - the master MSA, we cluster the seqs in this guy
+ *                        and build a new MSA from each cluster
+ * ESL_DMATRIX *D;      - the distance matrix
+ * int     do_mindiff   - TRUE (mode 1): satisfy clusters are at least mindiff different
+ * int     do_nc        - TRUE (mode 2): set mindiff such that we get exactly target_nc clusters
+ * int     do_nsize     - TRUE (mode 3): set mindiff such that we get 1 cluster with nsize seqs
+ * float   mindiff      - the minimum fractional difference allowed between 2 seqs of different clusters
+ *                        (0. indicates mode 2 or 3) 
+ * int     target_nc    - if(do_nc) number of clusters to define, else irrelevant
+ * int     target_nsize - if(do_nsize) min size of largets cluster, else irrelevant
+ * int     *ret_num_msa - number of MSAs in ret_MSA
+ * ESL_MSA  ***ret_cmsa - new MSAs, one for each cluster
+ * ESL_MSA  *ret_xsize  - max size of a cluster
+ * char     *errbuf     - buffer for error messages
+ *           
+ * Return: ret_cmsa (alloc'ed here) and ret_num_msa
+ */
+int 
+MSADivide(ESL_MSA *mmsa, ESL_DMATRIX *D, int do_mindiff, int do_nc, int do_nsize, float mindiff, int target_nc,
+	  int target_nsize, int *ret_num_msa, ESL_MSA ***ret_cmsa, int *ret_xsize, char *errbuf)
+{
+  int   status;        /* Easel status code */
+  ESL_MSA **cmsa = NULL;/* the new MSAs we're creating from clusters of seqs in mmsa */
+  int   i;             /* counter over sequences */
+  int   m;             /* counter over new MSAs */
+  int   n;             /* counter over tree nodes */
+  ESL_TREE    *T = NULL;/* the tree, created by Single-Linkage Clustering */
+  double *diff = NULL; /* [0..T->N-2], diff[n]= min distance between any leaf in right and
+		        * left subtree of node n of tree T */
+  double *minld = NULL;/* [0..T->N-2], min dist from node to any taxa in left  subtree */
+  double *minrd = NULL;/* [0..T->N-2], min dist from node to any taxa in right subtree */
+  int     nc;          /* number of clusters/MSAs  */
+  int    *clust = NULL;/* [0..T->N-1], cluster number (0..nc-1) this seq is in */
+  int    *csize = NULL;/* [0..nc-1], size of each cluster */
+  int   **useme = NULL;/* [0.m.nc-1][0.i.N] TRUE to use seq i in new MSA m, FALSE not to */
+  int     best;        /* 'best' node, returned by select_node() */
+  int     xsize;       /* size of cluster under 'best' node (largest cluster) */
+
+  /* Contract check */
+  if((do_nc + do_mindiff + do_nsize) != 1) ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() exactly 1 of do_nc, do_mindiff, do_nsize must be TRUE.");
+  if( do_nc && target_nc == 0)             ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() target_nc is 0 but do_nc is TRUE!");
+  if( do_nsize && target_nsize == 0)       ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() target_nsize is 0 but do_nsize is TRUE!");
+  if( do_mindiff && mindiff <= 0.)         ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() mindiff is <= 0. but do_mindiff is TRUE!");
+  if( do_mindiff && target_nc != 0)        ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() do_mindiff is TRUE, but target_nc != 0");
+  if( do_mindiff && target_nsize != 0)     ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() do_mindiff is TRUE, but target_nsize != 0");
+  /* mmsa must be digital */
+  if(!(mmsa->flags & eslMSA_DIGITAL))                 ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() MSA is not digital.");
+
+  if(do_nc || do_nsize) mindiff = 0.;
+
+  /* Infer tree by single linkage clustering given the distance matrix */
+  if((status = esl_tree_SingleLinkage(D, &T)) != eslOK)                        ESL_FAIL(status, errbuf, "esl_tree_SingleLinkage() error, status: %d", status);
+  if((status = esl_tree_SetTaxaParents(T)) != eslOK)                           ESL_FAIL(status, errbuf, "esl_tree_SetTaxaParentse() error, status: %d", status);
+  /*esl_tree_WriteNewick(stdout, T);*/
+  if((status = esl_tree_Validate(T, errbuf) != eslOK)) return status;
+  
+  /* determine the diff values: 
+   * (use: n_child > n, unless n's children are taxa)
+   * diff[n] is minimum distance between any taxa (leaf) in left subtree of 
+   * n to any taxa in right subtree of n. 
+   */
+  ESL_ALLOC(diff,  (sizeof(double) * (T->N - 1)));  /* one for each node */
+  ESL_ALLOC(minld, (sizeof(double) * (T->N - 1))); 
+  ESL_ALLOC(minrd, (sizeof(double) * (T->N - 1))); 
+  for (n = (T->N-2); n >= 0; n--) {
+    minld[n] = T->ld[n] + ((T->left[n]  > 0) ? (minld[T->left[n]])  : 0);
+    minrd[n] = T->rd[n] + ((T->right[n] > 0) ? (minrd[T->right[n]]) : 0);
+    diff[n]  = minld[n] + minrd[n];
+    diff[n] *= 1000.; 
+    diff[n]  = (float) ((int) diff[n]);
+    diff[n] /= 1000.; 
+    /*printf("diff[n:%d]: %f\n", n, diff[n]);*/
+  }
+  free(minld); minld = NULL;
+  free(minrd); minrd = NULL;
+  /*for (n = 0; n < (T->N-1); n++)
+    printf("diff[n:%d]: %f\n", n, diff[n]);
+    for (n = 0; n < (T->N-1); n++)
+    printf("left[n:%d]: %d right[n:%d]: %d\n", n, T->left[n], n, T->right[n]);*/
+  
+  if(do_mindiff) { /* Mode 1 */
+    /* Define clusters that are at least mindiff different
+     * from each other. */
+    if((status = select_node(T, diff, mindiff, &clust, &nc, &xsize, &best, errbuf)) != eslOK) return status;
+    printf("# Alignment split into %d clusters\n", nc);
+    printf("# Maximum identity b/t any 2 seqs in different clusters: %.2f\n", (1.-mindiff));
+    printf("# Largest cluster contains %d sequences.\n", xsize);
+    printf("#\n");
+  }
+  else if (do_nc) { /* Mode 2, do_nc == TRUE, mindiff was set to 0.0 above */
+    /* Find the minimum fractional difference (mindiff) that 
+     * gives exactly target_nc clusters, also define clusters
+     * based on that mindiff, this is all done with find_mindiff(),
+     * which does a binary search for mindiff, we're guaranteed to 
+     * find exactly target_nc clusters b/c diff values are rounded
+     * to nearest 0.001. */
+    if(target_nc > (T->N)) target_nc = T->N; /* max num clusters is num seqs */
+    if((status = find_mindiff(T, diff, FALSE, target_nc, &clust, &nc, &xsize, &best, &mindiff, errbuf)) != eslOK) return status;
+    printf("# Alignment split into %d clusters.\n", nc);
+    printf("# Maximum identity b/t any 2 seqs in different clusters: %.2f\n", (1.-mindiff));
+    printf("# Largest cluster contains %d sequences.\n", xsize);
+    printf("#\n");
+  }
+  else { /* Mode 3, do_nsize == TRUE, mindiff was set to 0.0 above */
+    /* Find the minimum fractional difference (mindiff) that 
+     * gives 1 cluster with size of at least <target_nsize> sequences
+     * based on that mindiff, this is all done with find_mindiff(),
+     * which does a binary search for mindiff.
+     */
+    if(target_nsize > (T->N)) target_nsize = T->N; /* max num clusters is num seqs */
+    if((status = find_mindiff(T, diff, TRUE, target_nsize, &clust, &nc, &xsize, &best, &mindiff, errbuf)) != eslOK) return status;
+    printf("# Alignment split into %d clusters.\n", nc);
+    printf("# Largets cluster contains %d sequences.\n", xsize);
+    printf("# Maximum identity b/t any 2 seqs in different clusters: %.2f\n", (1.-mindiff));
+    printf("#\n");
+  }
+  /* Determine the size of each cluster */
+  ESL_ALLOC(csize, (sizeof(int) * (nc)));
+  esl_vec_ISet(csize, nc, 0);
+  for(i = 0; i < mmsa->nseq; i++)
+    csize[clust[i]]++;
+  
+  /* Create one new MSA for each cluster,
+   * if(do_orig): keep the original MSA as cmsa[nc] */
+  ESL_ALLOC(cmsa, (sizeof(ESL_MSA *) * (nc)));
+  for(m = 0; m < nc; m++) cmsa[m] = NULL;
+
+  ESL_ALLOC(useme, (sizeof(int *) * (nc+1)));
+  for(m = 0; m <= nc; m++) {
+    ESL_ALLOC(useme[m], (sizeof(int)) * mmsa->nseq);
+    if(m < nc) esl_vec_ISet(useme[m], mmsa->nseq, FALSE);
+    else       esl_vec_ISet(useme[m], mmsa->nseq, TRUE); /* keep all seqs in cmsa[nc]*/
+  }
+  
+  for(i = 0; i < mmsa->nseq; i++)
+    if(clust[i] != -1) 
+      useme[clust[i]][i] = TRUE;
+  printf("#   idx    nseq\n");
+  printf("#  ----  ------\n");
+  for(m = 0; m < nc; m++) {
+    if(esl_vec_ISum(useme[m], mmsa->nseq) == 0) esl_fatal("No sequences in cluster %d\n"); 
+   if((status = esl_msa_SequenceSubset(mmsa, useme[m], &(cmsa[m]))) != eslOK) ESL_FAIL(status, errbuf, "MSADivide(), esl_msa_SequenceSubset error, status: %d.", status);
+    printf("   %4d  %6d\n", m+1, cmsa[m]->nseq);
+    free(useme[m]);
+  }
+  printf("\n");
+
+  free(useme[nc]);
+  free(useme);
+  
+  *ret_num_msa = nc;
+  *ret_cmsa = cmsa;
+  *ret_xsize = xsize;
+  
+  esl_tree_Destroy(T);
+  free(diff);
+  diff = NULL;
+
+  if(clust != NULL)  free(clust);
+  if(csize != NULL)  free(csize);
+  return eslOK;
+  
+ ERROR: 
+  if(diff  != NULL) free(diff);
+  if(minld != NULL) free(minld);
+  if(minrd != NULL) free(minrd);
+  if(clust != NULL) free(clust);
+  if(csize != NULL) free(csize);
+  if(cmsa  != NULL) {
+    for(m = 0; m < nc; m++)
+      if(cmsa[m] != NULL) esl_msa_Destroy(cmsa[m]);
+    free(cmsa);
+  }
+  return status;
+}
+
+/* Function: select_node()
+ * EPN, Fri Mar 23 08:48:37 2007 
+ * Adapted from SRE's select_node() in maketestset.c originally written
+ * for the PROFMARK HMMER benchmark.
+ * 
+ * 
+ * Purpose:  Define clusters of the taxa (seqs) in the tree such
+ *           that minimum disparity b/t any 2 seqs in different 
+ *           clusters is greater than <mindiff> and the number of
+ *           clusters is maximized. <ret_best> is the index of the node
+ *           of the tree under which the largest cluster belongs.
+ *           <ret_nc> is the number of clusters after clustering, 
+ *           <ret_clust> is an array [0..T->N-1] specifying which
+ *           cluster each taxa belongs to.
+ *           
+ *           For high disparities, this cluster may contain all
+ *           the sequences, and we'll return the root node (0).
+ *
+ * Args:    
+ * ESL_TREE *T        - the tree
+ * double   *diff     - [0..T->N-2]: for each node of the tree, the minimum
+ *                      distance (sum of branch lengths) from any taxa (leaf)
+ *                      in left subtree to any taxa in right subtree.
+ * double    mindiff  - (see description above)
+ * int     **ret_clust- [0..T->N-1] cluster number this seq is in, alloc'ed, filled here
+ * int      *ret_nc   - number of clusters
+ * int      *ret_xsize- size of largest cluster
+ * int      *ret_best - RETURN: index of node of tree under which largest cluster belongs (see Purpose).
+ * char     *errbuf   - buffer for error messages
+ *
+ * Returns: node index (as explained in Purpose)
+ */
+static int
+select_node(ESL_TREE *T, double *diff, double mindiff, int **ret_clust, int *ret_nc, int *ret_xsize, int *ret_best, char *errbuf)
+{
+  int status;     /* Easel status code */
+  ESL_STACK *ns1; /* stack for traversing tree */
+  ESL_STACK *ns2; /* another stack for traversing tree */
+  int c;	  /* counter for clusters */
+  int best;       /* index of current best node */
+  int maxsize;    /* size of cluster for best node */
+  int n, np;      /* counters over tree nodes */
+  int *clust;     /* [1..T->N-1] cluster number this seq is in */
+
+  /*printf("in selec_node mindiff: %f T->N: %d\n", mindiff, T->N);*/
+  /* set tree cladesizes if not already set */
+  if(T->cladesize == NULL) 
+    if((status = esl_tree_SetCladesizes(T)) != eslOK) ESL_FAIL(status, errbuf, "select_node(), esl_tree_SetCladeSizes error, status: %d.", status);
+
+  ESL_ALLOC(clust, (sizeof(int) * T->N));
+  esl_vec_ISet(clust, T->N, 0);
+
+  if((ns1 = esl_stack_ICreate()) == NULL) ESL_FAIL(status, errbuf, "select_node(), failed to create a stack, probably out of memory, status: %d.", status);
+  if((ns2 = esl_stack_ICreate()) == NULL) ESL_FAIL(status, errbuf, "select_node(), failed to create a stack, probably out of memory, status: %d.", status);
+
+  /* push root on stack to start */
+  if((status = esl_stack_IPush(ns1, 0)) != eslOK) ESL_FAIL(status, errbuf, "select_node(), failed to push onto a stack, probably out of memory, status: %d.", status);	
+  maxsize  = 0;
+  best     = 0;
+  c        = 0;
+  while (esl_stack_IPop(ns1, &n) != eslEOD) {
+    if ((n == 0 || diff[T->parent[n]] > mindiff) &&
+	diff[n] <= mindiff) { /* we're at a cluster */
+      if (T->cladesize[n] > maxsize) {
+	maxsize = T->cladesize[n];
+	best = n;
+      }
+      /* determine all taxa in the clade rooted at n*/
+      esl_stack_IPush(ns2, n);	
+      while (esl_stack_IPop(ns2, &np) != eslEOD) {
+	/*printf("np: %d T->left[np]: %d\n", np, T->left[np]);*/
+	if(T->left[np]  <= 0) clust[(-1*T->left[np])]  = c;
+	else { if((status = esl_stack_IPush(ns2, T->left[np])) != eslOK) ESL_FAIL(status, errbuf, "select_node(), failed to push onto a stack, probably out of memory, status: %d.", status); }
+	if(T->right[np] <= 0) clust[(-1*T->right[np])]  = c;
+	else { if((status = esl_stack_IPush(ns2, T->right[np])) != eslOK) ESL_FAIL(status, errbuf, "select_node(), failed to push onto a stack, probably out of memory, status: %d.", status); }
+      }
+      c++;
+    }
+    else {		/* we're not a cluster, keep traversing */
+      /*printf("n: %d T->left[n]: %d\n", n, T->left[n]);*/
+      if(T->left[n]  <= 0) clust[(-1*T->left[n])]  = c++; /* single seq with its own cluster */
+      else { if((status = esl_stack_IPush(ns1, T->left[n])) != eslOK) ESL_FAIL(status, errbuf, "select_node(), failed to push onto a stack, probably out of memory, status: %d.", status); }
+      if(T->right[n] <= 0) clust[(-1*T->right[n])] = c++; /* single seq with its own cluster */
+      else { if((status = esl_stack_IPush(ns1, T->right[n])) != eslOK) ESL_FAIL(status, errbuf, "select_node(), failed to push onto a stack, probably out of memory, status: %d.", status); }
+    }
+  }
+  esl_stack_Destroy(ns1);
+  esl_stack_Destroy(ns2);
+  *ret_nc = c;
+  *ret_clust = clust;
+  *ret_xsize = maxsize;
+  *ret_best  = best;
+  /*printf("nc: %d(%d) best: %d maxsize: %d nc: %d mindiff: %.3f\n\n", *ret_nc, c, best, maxsize, c, mindiff);
+    for(n = 0; n < T->N; n++) printf("clust[%d]: %d\n", n, clust[n]);*/
+  return eslOK;
+
+ ERROR: 
+  if(clust != NULL) free(clust);
+  ESL_FAIL(status, errbuf, "select_node(), memory allocation error, status: %d.", status); 
+}
+
+
+/* Function: find_mindiff()
+ * EPN, Fri Mar 23 18:59:42 2007
+ * 
+ * Purpose:  Given a tree resulting from single linkage clustering,
+ *           find the min fractional difference (mindiff) that when used to
+ *           define clusters (such that no seq in cluster A is less
+ *           than mindiff different than any seq in cluster B), 
+ *           gives either (A) (if(do_nc)) number of clusters >= target or
+ *           (B) (if(do_nsize)) >= 1 cluster with >= target sequences
+ *
+ * Args:    
+ * ESL_TREE *T        - the tree
+ * double   *diff     - [0..T->N-2]: for each node of the tree, the minimum
+ *                      distance (sum of branch lengths) from any taxa (leaf)
+ *                      in left subtree to any taxa in right subtree.
+ * int      do_nsize  - TRUE  to find mindiff that gives >= 1 cluster with <target> seqs
+ *                      FALSE to find mindiff that gives <target> clusters
+ * int      target    - number of clusters (! if(do_nsize)) we want, or min size of
+ *                      biggest cluster (if(do_nsize))
+ * int     **ret_clust- [0..T->N-1] cluster number this seq is in, alloc'ed, filled here
+ * int      *ret_nc   - number of clusters
+ * int      *ret_xsize- size of largest cluster
+ * int      *ret_best - cluster idx of largest cluster
+ * int      *ret_mindiff - mindiff that achieves target
+ * char     *errbuf   - buffer for error messages
+ *
+ * Returns: fractional difference (as explained in Purpose)
+ */
+static float
+find_mindiff(ESL_TREE *T, double *diff, int do_nsize, int target, int **ret_clust, int *ret_nc, int *ret_xsize, int *ret_best, float *ret_mindiff, char *errbuf)
+{
+  int   status;
+  float high_diff  = 1.0;
+  float low_diff   = 0.0;
+  int   high       = 0;
+  int   low        = 0;
+  float mindiff    = 0.5;
+  int   curr_nc    = -1;
+  int   curr_xsize = -1;
+  int   curr       = -1;
+  int   curr_best  = -1;
+  int   keep_going = TRUE;
+  float thresh     = 0.001;
+  int  *clust      = NULL;
+
+  /* Contract check */
+  if(target > T->N) ESL_FAIL(eslEINCOMPAT, errbuf, "find_mindiff(), desired target is greater than number of seqs in the tree");
+
+  while(keep_going) {
+    if(clust != NULL) free(clust);
+    if((status = select_node(T, diff, mindiff, &clust, &curr_nc, &curr_xsize, &curr_best, errbuf)) != eslOK) return status;
+    curr = do_nsize ? curr_xsize : curr_nc;
+    if(((!do_nsize) && (curr < target)) || ((do_nsize) && (curr >= target))) {
+      high_diff  = mindiff;
+      high       = curr;
+      /*printf("LOWER   curr: %d mindiff: %f low: %f (%d) high: %f (%d)\n", curr, mindiff, low_diff, low, high_diff, high);*/
+      mindiff   -= (mindiff - low_diff) / 2.;
+      if((fabs(high_diff-0.) < thresh) && (fabs(low-0.) < thresh))  keep_going = FALSE; 
+      /* stop, high and low have converged at 0. */
+    }
+    else {/* if(do_nsize) curr_nc > target_nc, else if(!do_nsize) curr_nc >= target_nc */
+      low_diff   = mindiff;
+      low        = curr;
+      /*printf("GREATER curr: %d mindiff: %f low: %f (%d) high: %f (%d)\n", curr, mindiff, low_diff, low, high_diff, high);*/
+      mindiff   += (high_diff - mindiff) / 2.;
+      if(fabs(high_diff-low_diff) < thresh)  keep_going = FALSE; /* stop, high and low have converged */
+    }
+  }
+  if(do_nsize) { 
+    if(curr < target) { /* we couldn't reach our target in search due to precision */
+      if(high >= target) { /* we could reach it at high */
+	mindiff = high_diff;
+	if((status = select_node(T, diff, mindiff, &clust, &curr_nc, &curr_xsize, &curr_best, errbuf)) != eslOK) return status;
+      }
+      else { /* we couldn't reach our threshold, this shouldn't happen */
+	ESL_FAIL(eslEINVAL, errbuf,"Error in find_mindiff(), even with mindiff of %.5f can't produce cluster of size: %d\n", mindiff, target);
+      }
+    }
+  }
+  else { /* ! do_nsize, trying to achieve <target> clusters */
+    /* it's possible we can't reach our target, if so, set mindiff as minimum value that gives 
+     * less than target clusters. */
+    if(curr != target) {
+      /*printf("targ: %d curr: %d low: %d (%f) high: %d (%f)\n", target, curr, low, low_diff, high, high_diff);*/
+      if(high < target) {
+	mindiff = high;
+	if((status = select_node(T, diff, mindiff, &clust, &curr_nc, &curr_xsize, &curr_best, errbuf)) != eslOK) return status;
+      }
+      else
+	while(high > target) {
+	  high += thresh;
+	  if(high > 1.0)  ESL_FAIL(eslEINCONCEIVABLE, errbuf, "find_mindiff(), mindiff has risen above 1.0");
+	  mindiff = high;
+	  if((status = select_node(T, diff, mindiff, &clust, &curr_nc, &curr_xsize, &curr_best, errbuf)) != eslOK) return status;
+	  high = curr_nc;
+	}
+    }
+  }
+  /*printf("FINAL mindiff: %f\n", mindiff);  */
+  *ret_nc      = curr_nc;
+  *ret_clust   = clust;
+  *ret_xsize   = curr_xsize;
+  *ret_best    = curr_best;
+  *ret_mindiff = mindiff;
+
+  return eslOK;
+}
+
+
+/* determine_first_last_consensus_columns
+ *                   
+ * Given an MSA, determine the first and last consensus columns
+ * occupied by each sequence
+ */
+static int determine_first_last_consensus_columns(ESL_MSA *msa, char *errbuf, int *i_am_rf, int rflen, int **ret_fA, int **ret_lA)
+{
+  int status;
+  int *fA = NULL;
+  int *lA = NULL;
+  int rfpos = 0;
+  int apos = 0;
+  int i;
+
+  /* contract check */
+  if(msa->rf == NULL) { status = eslEINVAL; goto ERROR; }
+
+  /* determine the first and last occupied consensus position in each sequence */
+  ESL_ALLOC(fA, sizeof(int) * msa->nseq);
+  ESL_ALLOC(lA, sizeof(int) * msa->nseq);
+
+  esl_vec_ISet(lA, msa->nseq, 0);
+  esl_vec_ISet(fA, msa->nseq, rflen);
+  /* this could be way more efficient */
+  for(i = 0; i < msa->nseq; i++) { 
+    rfpos = 0;
+    for(apos = 0; apos < msa->alen; apos++) {
+      if(i_am_rf[apos]) { /* apos is a consensus position */
+	rfpos++;
+	if(! esl_abc_XIsGap(msa->abc, msa->ax[i][(apos+1)])) { /* rfpos for seq i is not a gap */
+	  fA[i] = ESL_MIN(fA[i], rfpos);
+	  lA[i] = ESL_MAX(lA[i], rfpos);
+	}
+      }
+    }
+  }
+  *ret_fA   = fA;
+  *ret_lA   = lA;
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "determine_first_last_consensus_columns(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* Function:  dst_nongap_XPairId()
+ * Synopsis:  Pairwise identity of two aligned digital seqs.
+ *            Differs from esl_dst_XPairId() in that denominator is 
+ *            seq identity is number of columns that are non-gap in both 
+ *            sequences (instead of length of the shorter of the two seqs).
+ *            
+ * Incept:    EPN, Fri Jun 27 15:07:44 2008
+ *
+ * Args:      abc          - digital alphabet in use
+ *            ax1          - aligned digital seq 1
+ *            ax2          - aligned digital seq 2
+ *            opt_pid      - optRETURN: pairwise identity, 0<=x<=1
+ *            opt_nid      - optRETURN: # of identities
+ *            opt_n        - optRETURN: denominator MIN(len1,len2)
+ *
+ * Returns:   <eslOK> on success. <opt_distance>, <opt_nid>, <opt_n>
+ *            contain the answers, for any of these that were passed
+ *            non-<NULL> pointers.
+ *
+ * Throws:    <eslEINVAL> if the strings are different lengths (not aligned).
+ */
+int
+dst_nongap_XPairId(const ESL_ALPHABET *abc, const ESL_DSQ *ax1, const ESL_DSQ *ax2, 
+		   double *opt_distance, int *opt_nid, int *opt_n)
+{
+  int     status;
+  int     idents;               /* total identical positions  */
+  int     len;                  /* number of nongap colns in both seqs */
+  int     i;                    /* position in aligned seqs   */
+
+  idents = len = 0;
+  for (i = 1; ax1[i] != eslDSQ_SENTINEL && ax2[i] != eslDSQ_SENTINEL; i++) 
+    {
+      if (esl_abc_XIsCanonical(abc, ax1[i]) && esl_abc_XIsCanonical(abc, ax2[i])) { 
+	len++;
+	if(ax1[i] == ax2[i]) idents++;
+      }
+    }
+
+  if (ax1[i] != eslDSQ_SENTINEL || ax2[i] != eslDSQ_SENTINEL) 
+    ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned");
+
+  if (opt_distance != NULL)  *opt_distance = ( len==0 ? 0. : (double) idents / (double) len );
+  if (opt_nid      != NULL)  *opt_nid      = idents;
+  if (opt_n        != NULL)  *opt_n        = len;
+  return eslOK;
+
+ ERROR:
+  if (opt_distance != NULL)  *opt_distance = 0.;
+  if (opt_nid      != NULL)  *opt_nid      = 0;
+  if (opt_n        != NULL)  *opt_n        = 0;
+  return status;
+}
+
+
+/* Function:  dst_nongap_XDiffMx()
+ * Synopsis:  NxN difference matrix for N aligned digital seqs.         
+ *            Differs from esl_dst_XDiffMx() in that denominator for
+ *            seq identity is number of columns that are non-gap in both 
+ *            sequences (instead of length of the shorter of the two seqs).
+ *            
+ * Incept:    EPN, Fri Jun 27 15:10:53 2008
+ *
+ * Args:      abc   - digital alphabet in use
+ *            ax    - aligned dsq's, [0..N-1][1..alen]                  
+ *            N     - number of aligned sequences
+ *            ret_D - RETURN: NxN matrix of fractional differences
+ *            
+ * Returns:   <eslOK> on success, and <ret_D> contains the difference
+ *            matrix; caller is obligated to free <D> with 
+ *            <esl_dmatrix_Destroy()>. 
+ *
+ * Throws:    <eslEINVAL> if a seq has a different
+ *            length than others. On failure, <ret_D> is returned <NULL>
+ *            and state of inputs is unchanged.
+ */
+int
+dst_nongap_XDiffMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_D)
+{
+  ESL_DMATRIX *D = NULL;
+  int i,j;
+  int status;
+
+  if (( D = esl_dmatrix_Create(N,N) ) == NULL) { status = eslEMEM; goto ERROR; }
+  
+  for (i = 0; i < N; i++)
+    {
+      D->mx[i][i] = 0.;
+      for (j = i+1; j < N; j++)
+	{
+	  status = dst_nongap_XPairId(abc, ax[i], ax[j], &(D->mx[i][j]), NULL, NULL);
+	  if (status != eslOK) ESL_XEXCEPTION(status, "Pairwise identity calculation failed at seqs %d,%d\n", i,j);
+	  D->mx[i][j] =  1.0 - D->mx[i][j];
+	  D->mx[j][i] =  D->mx[i][j];
+	}
+    }
+  if (ret_D != NULL) *ret_D = D; else esl_dmatrix_Destroy(D);
+  return eslOK;
+
+ ERROR:
+  if (D     != NULL)  esl_dmatrix_Destroy(D);
+  if (ret_D != NULL) *ret_D = NULL;
+  return status;
+}
+
+/* find_seqs_with_given_insert
+ *                   
+ * Given an MSA with RF annotation, determine which sequences have inserts after column <target>
+ * of at least size <min> and at most size <max>. Fill an array <useme> of size msa->nseq with 
+ * TRUE seq i has the insert, FALSE if it doesn't.
+ */
+static int find_seqs_with_given_insert(ESL_MSA *msa, int *i_am_rf, char *errbuf, int target, int min, int max, int **ret_useme)
+{
+  int status;
+  int apos, rfpos, clen;
+  int **ict;
+  int *useme;
+  int i;
+
+  /* contract check */
+  if(! (msa->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in find_seqs_with_given_insert(), msa must be digitized.");
+  if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "No #=GC RF markup in alignment, it is needed for --seq-ins.");
+
+  ESL_ALLOC(useme,sizeof(int) * (msa->nseq));
+  ESL_ALLOC(ict,  sizeof(int *) * (msa->alen+2));
+  for(i = 0; i <= msa->alen; i++)
+    {
+      ESL_ALLOC(ict[i],  sizeof(int) * (msa->nseq));
+      esl_vec_ISet(ict[i], (msa->nseq), 0);
+    }
+
+  rfpos = 0;
+  for(apos = 1; apos <= msa->alen; apos++)
+    {
+      if(i_am_rf[apos-1]) { 
+	rfpos++;
+      }
+      else 
+	for(i = 0; i < msa->nseq; i++)
+	  if(! esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) { 
+	    ict[rfpos][i]++;
+	  }	  
+    }
+  clen = rfpos;
+  if(target > clen) ESL_FAIL(eslEINVAL, errbuf, "--seq-ins <n> enabled with <n> = %d, but non-gap RF length of alignment is only %d columns.", target, clen);
+
+  for(i = 0; i < msa->nseq; i++) { 
+    /* printf("ict[target:%d][i:%d]: %d, min: %d max: %d\n", target, i, ict[target][i], min, max); */
+    useme[i] = ((ict[target][i] >= min) && (ict[target][i] <= max)) ?  TRUE : FALSE;
+  }
+
+  *ret_useme = useme;
+  for(i = 0; i <= msa->alen; i++)
+    free(ict[i]);
+  free(ict);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+/* minorize_msa()
+ *                   
+ * Given an MSA with #=GS <seq name> <<tag>> <minor set name>, make a new msa that
+ * includes all seqs that have the same <minor set name> #=GS annotation for the
+ * same <<tag>> (string value of <tag> is set at command line and passed into 
+ * this function)
+ * Also set the #=GC RF markup for each minor subset as either: 
+ * (A) the #=GF <x> <y> with <x> equal to <minor set name> and <y>
+ *     as the RF line.
+ *
+ * or, if no such #=GF markup exists define the consensus with the 
+ * gap fraction rule, any column with <= <x> (from --gapthresh <x>)
+ * gaps becomes an 'x' in the RF seq, all other columns are '.'.
+ */
+static int
+minorize_msa(const ESL_GETOPTS *go, ESL_MSA *msa, char *errbuf, FILE *fp, char *tag, int outfmt)
+{
+  int    status;
+  int   *useme = NULL;
+  int    nalloc = 1;
+  int    nmin = 0;
+  int   *which_minor = NULL; /* [0..i..msa->nseq-1] which minor subset each sequence belongs to, -1 if none */
+  char **minorA = NULL;      /* [0..m..nmin-1]      ptr to minor subset name in #=GS markup, only a ptr, don't free the char strings */
+  int    f, g, i, m, mt;
+  int    gt = -1;
+  void  *tmp;
+  char  *rf;
+  int    apos;
+  int    ip;
+  int   *order;
+  ESL_MSA **minor_msaA;
+
+  /* contract check */
+  if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "-M requires #=GC RF markup in alignment.");
+  if(msa->gs == NULL) ESL_FAIL(eslEINVAL, errbuf, "-M requires #=GS markup in alignment denoting minor subsets.");
+
+  /* determine which tag matches <tag> */
+  for(g = 0; g < msa->ngs; g++) { 
+    if(strcmp(msa->gs_tag[g], tag) == 0) { 
+      gt = g;
+      break;
+    }
+  }
+  if(gt == -1) ESL_FAIL(eslEINVAL, errbuf, "No #=GS markup has tag: %s\n", tag);
+
+  /* determine which minor set each seq belongs to, reallocate minorA as we go and see new minor subsets */
+  ESL_ALLOC(which_minor, sizeof(int) * msa->nseq);
+  ESL_ALLOC(minorA, sizeof(char *) * nalloc);
+  esl_vec_ISet(which_minor, msa->nseq, -1);
+
+  for(i = 0; i < msa->nseq; i++) { 
+    if(msa->gs[gt][i] != NULL) { 
+      mt = -1;
+      for(m = 0; m < nmin; m++) { 
+	if(strcmp(minorA[m], msa->gs[gt][i]) == 0) { 
+	  mt = m;
+	  break;
+	}
+      }
+      if(mt == -1) { 
+	if((nmin+1) == nalloc) { 
+	  nalloc++;
+	  ESL_RALLOC(minorA, tmp, sizeof(char *) * nalloc);
+	}
+	minorA[nmin] = msa->gs[gt][i]; 
+	mt = nmin++;
+      }
+      which_minor[i] = mt;
+    }
+  }
+  for(i = 0; i < msa->nseq; i++) if(which_minor[i] == -1) ESL_FAIL(eslEINVAL, errbuf, "-M requires ALL sequences have #=GS markup with user supplied tag %s. Seq %d (%s) has none.\n", esl_opt_GetString(go, "-M"), i, msa->sqname[i]);
+
+  /* Now make the minor alignments by keeping only the relevant subset of seqs.
+   * We do not call esl_msa_MinimGaps() b/c we want the alignment length to be 
+   * identical b/t all minor msas, and the RF also so cmalign knows how to 
+   * map the minor alignments to the major alignment */
+  ESL_ALLOC(minor_msaA, sizeof(ESL_MSA *) * nmin);
+  ESL_ALLOC(useme, sizeof(int) * msa->nseq);
+  for(m = 0; m < nmin; m++) { 
+    for(i = 0; i < msa->nseq; i++) useme[i] = (which_minor[i] == m)  ? TRUE : FALSE;
+    if(esl_vec_ISum(useme, msa->nseq) == 0) esl_fatal("No sequences selected for minor MSA!\n");
+    if((status = esl_msa_SequenceSubset(msa, useme, &(minor_msaA[m]))) != eslOK) ESL_FAIL(status, errbuf, "Error taking subset for minor subset %d with name: %s\n", m, minorA[m]);
+
+    /* set name */
+    esl_msa_SetName(minor_msaA[m], minorA[m], -1);
+
+    /* unless --M-rf free RF annotation and set new annotation (--M-rf tells us to keep the initial RF annotation for all minor alignments */
+    if(! esl_opt_GetBoolean(go, "--M-rf")) { 
+      if(minor_msaA[m]->rf == NULL) ESL_FAIL(eslEINCOMPAT, errbuf, "Error creating minor alignment %d, RF is NULL.", m);
+      free(minor_msaA[m]->rf);
+      minor_msaA[m]->rf = NULL;
+      /* Check if we have #=GF markup denoting the RF line for each minor subset */
+      rf = NULL;
+      for(f = 0; f < msa->ngf; f++)  
+	if(strcmp(minorA[m], msa->gf_tag[f]) == 0) { rf = msa->gf[f]; break; }
+      if(rf != NULL) { /* ensure the RF annotation is the length of the alignment */
+	if(strlen(rf) != msa->alen) ESL_FAIL(eslEINCOMPAT, errbuf, "'#=GF %s <RF sequence>' markup is of length %d but it must be equal to aln length (%" PRId64 ").", msa->gf_tag[f], (int) strlen(rf), msa->alen);
+	if((status = esl_strdup(rf, msa->alen, &(minor_msaA[m]->rf))) != eslOK) ESL_FAIL(status, errbuf, "Error duplicating RF for minor alignment %d\n", m);
+	/* make sure minor_msaA[m]->rf does not have any non-gap columns where msa->rf has a gap (cmalign -M demands all minor consensus columns are also major consensus columns) */
+	for (apos = 0; apos < minor_msaA[m]->alen; apos++) { 
+	  if (! (esl_abc_CIsGap(minor_msaA[m]->abc, minor_msaA[m]->rf[apos]))) { 
+	    if (esl_abc_CIsGap(msa->abc, msa->rf[apos])) ESL_FAIL(eslEINCOMPAT, errbuf, "'#=GF %s <RF sequence>' markup has a non-gap (%c char) at aln position %d, but the major alignment has a gap there! cmalign will choke on this.\n", msa->gf_tag[f], minor_msaA[m]->rf[(apos-1)], apos);
+	  }
+	}
+      }
+      else { /* no #=GF markup denoting RF line for alignment m existed in the input file, define it based on gaps */
+	if((status = write_rf_gapthresh(go, errbuf, minor_msaA[m], esl_opt_GetReal(go, "--M-gapt"))) != eslOK) return status;
+	/* careful, remember with cmalign -M, the minor alignments can only have training alignment column c defined as a consensus column 
+	 * if it is also consensus in the major alignment, so we have to remove any minor_msaA[m]->rf 'x' columns that are gaps in <msa>
+	 */
+	for (apos = 0; apos < minor_msaA[m]->alen; apos++)
+	  if (esl_abc_CIsGap(msa->abc, msa->rf[apos])) minor_msaA[m]->rf[apos] = '.';
+      }
+    }
+  }
+
+  /* Print out the alignments, first major, then minors */
+  /* first, reorder major alignment so that it contains the minor alignment seqs in order */
+  ip = 0;
+  ESL_ALLOC(order, sizeof(int) * msa->nseq);
+  for(m = 0; m < nmin; m++) { 
+    for(i = 0; i < msa->nseq; i++) {
+      if(which_minor[i] == m) order[i] = ip++;
+    }
+  }
+  if((status = reorder_msa(msa, order, errbuf)) != eslOK) return status;
+
+  esl_msafile_Write(fp, msa, outfmt);
+  for(m = 0; m < nmin; m++) { 
+    esl_msafile_Write(fp, minor_msaA[m], outfmt);
+    esl_msa_Destroy(minor_msaA[m]);
+  }
+  free(minor_msaA);
+  
+  free(order);
+  free(useme);
+  free(which_minor);
+  free(minorA);
+  return eslOK;
+
+ ERROR:
+  if(which_minor != NULL) free(which_minor);
+  if(minorA != NULL)      free(minorA);
+  if(useme != NULL)       free(useme);
+  return eslEMEM;
+}
+
+
+/* remove_gc_markup()
+ *                   
+ * Given a GC tag <tag>, remove that markup from an MSA.
+ * Return eslEINVAL if <tag> does not exist.
+ */
+static int
+remove_gc_markup(ESL_MSA *msa, char *errbuf, char *tag)
+{
+  int    does_not_exist = FALSE;
+
+  /* Currently, we can only handle removal of parsed GC markup, RF, SS_cons, SA_cons, PP_cons 
+   * (the main reason is b/c I didn't know how to deal with possibility of the ESL_KEYHASH in msa->gc_idx).
+   */
+  if (strcmp(tag, "RF") == 0) { 
+    if   (msa->rf == NULL) does_not_exist = TRUE;
+    else { free(msa->rf); msa->rf = NULL; }
+  }
+  else if(strcmp(tag, "SS_cons") == 0) { 
+    if   (msa->ss_cons == NULL) does_not_exist = TRUE; 
+    else { free(msa->ss_cons); msa->ss_cons = NULL; }
+  }
+  else if (strcmp(tag, "SA_cons") == 0) { 
+    if   (msa->sa_cons == NULL) does_not_exist = TRUE;
+    else { free(msa->sa_cons); msa->sa_cons = NULL; }
+  }
+  else if (strcmp(tag, "PP_cons") == 0) { 
+    if   (msa->pp_cons == NULL) does_not_exist = TRUE;
+    else { free(msa->pp_cons); msa->pp_cons = NULL; }
+  }
+  else { 
+    ESL_FAIL(eslEINVAL, errbuf, "--rm-gc <s> only works if <s> is \'RF\', \'SS_cons\', \'SA_cons\', or \'PP_cons\'");
+  }
+  if(does_not_exist) { 
+    ESL_FAIL(eslEINVAL, errbuf, "--rm-gc %s enabled but %s GC markup exists in the MSA.", tag, tag);
+  }
+  return eslOK;
+}
+
+
+/* add_gap_columns_to_msa
+ *                   
+ * Given an MSA and an array specifying a number
+ * of all gap columns to add after each column,
+ * add them. Reallocate all arrays as necessary.
+ * if(do_treat_as_rf_gap) make new column a gap
+ * in the RF line, else make it an 'x'.
+ *
+ * toadd is numbered 1..alen.
+ */
+static int
+add_gap_columns_to_msa(char *errbuf, ESL_MSA *msa, int *toadd, ESL_MSA **ret_msa, int do_treat_as_rf_gap)
+{
+  int status;
+  int i,j;
+  int apos;
+  int nnew = 0;
+  ESL_ALPHABET *abc;
+  char *newstr;
+  /* contract check */
+  if(! (msa->flags & eslMSA_DIGITAL))
+    ESL_FAIL(eslEINVAL, errbuf, "in add_gap_columns_to_msa(), msa must be digitized.");
+  for(apos = 0; apos <= msa->alen; apos++)
+    nnew += toadd[apos];
+
+  /* Textize the alignment */
+  abc = msa->abc;
+  esl_msa_Textize(msa);
+
+  ESL_MSA *newmsa;
+  /*printf("msa->nseq: %d\n", msa->nseq);
+    printf("msa->alen: %d\n", msa->alen);*/
+  newmsa = esl_msa_Create(msa->nseq, (msa->alen+nnew));
+
+  /* Copy and add gaps to all valid data that is [0..(alen-1)] or [1..alen] */ 
+  if(msa->ss_cons != NULL) 
+    {
+      ESL_ALLOC(newmsa->ss_cons, sizeof(char) * (msa->alen+nnew+1));
+      if((status = cp_and_add_gaps_to_aseq(newmsa->ss_cons, msa->ss_cons, msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR;
+    }
+  if(msa->sa_cons != NULL) 
+    {
+      ESL_ALLOC(newmsa->sa_cons, sizeof(char) * (msa->alen+nnew+1));
+      if((status = cp_and_add_gaps_to_aseq(newmsa->sa_cons, msa->sa_cons, msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR;
+    }
+  if(msa->pp_cons != NULL) 
+    {
+      ESL_ALLOC(newmsa->pp_cons, sizeof(char) * (msa->alen+nnew+1));
+      if((status = cp_and_add_gaps_to_aseq(newmsa->pp_cons, msa->pp_cons, msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR;
+    }
+  if(msa->rf != NULL)
+    {
+      ESL_ALLOC(newmsa->rf, sizeof(char) * (msa->alen+nnew+1));
+      if(do_treat_as_rf_gap)
+	{
+	  if((status = cp_and_add_gaps_to_aseq(newmsa->rf,      msa->rf,      msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR;
+	}
+      else if((status = cp_and_add_gaps_to_aseq(newmsa->rf,      msa->rf,      msa->alen, toadd, nnew, 'x') != eslOK)) goto ERROR;
+    }
+
+  if(msa->ss != NULL)
+    {
+      ESL_ALLOC(newmsa->ss, sizeof(char *) * msa->nseq);
+      for(i = 0; i < msa->nseq; i++)
+      {
+	if(msa->ss[i] != NULL)
+	  {
+	    ESL_ALLOC(newmsa->ss[i], sizeof(char) * (msa->alen+nnew+1));
+	    if((status = cp_and_add_gaps_to_aseq(newmsa->ss[i], msa->ss[i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR;
+	  }
+      }
+    }
+
+  if(msa->sa != NULL)
+    {
+      ESL_ALLOC(newmsa->sa, sizeof(char *) * msa->nseq);
+      for(i = 0; i < msa->nseq; i++)
+      {
+	if(msa->sa[i] != NULL)
+	  {
+	    ESL_ALLOC(newmsa->sa[i], sizeof(char) * (msa->alen+nnew+1));
+	    if((status = cp_and_add_gaps_to_aseq(newmsa->sa[i], msa->sa[i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR;
+	  }
+      }
+    }  
+
+  if(msa->pp != NULL)
+    {
+      ESL_ALLOC(newmsa->pp, sizeof(char *) * msa->nseq);
+      for(i = 0; i < msa->nseq; i++)
+      {
+	if(msa->pp[i] != NULL)
+	  {
+	    ESL_ALLOC(newmsa->pp[i], sizeof(char) * (msa->alen+nnew+1));
+	    if((status = cp_and_add_gaps_to_aseq(newmsa->pp[i], msa->pp[i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR;
+	  }
+      }
+    }  
+
+  if(msa->ncomment > 0)
+    {
+      for(j = 0; j < msa->ncomment; j++)
+	{
+	  if(msa->comment[j] != NULL) 
+	    esl_msa_AddComment(newmsa, msa->comment[j], -1);
+	}
+    }
+
+  if(msa->ngf > 0)
+    {
+      for(i = 0; i < msa->ngf; i++)
+	if(msa->gf[i] != NULL) 
+	  esl_msa_AddGF(newmsa, msa->gf_tag[i], -1, msa->gf[i], -1);
+    }
+
+  if(msa->ngs > 0)
+    {
+      for(j = 0; j < msa->ngs; j++)
+	{
+	  for(i = 0; i < msa->nseq; i++)
+	    if(msa->gs[j][i] != NULL) 
+	      esl_msa_AddGS(newmsa, msa->gs_tag[j], -1, i, msa->gs[j][i], -1);
+	}
+    }
+
+  if(msa->ngc > 0)
+    {
+      for(i = 0; i < msa->ngc; i++)
+	{
+	  if(msa->gc[i] != NULL) 
+	    {
+	      ESL_ALLOC(newstr, sizeof(char) * (msa->alen+nnew+1));
+	      if((status = cp_and_add_gaps_to_aseq(newstr, msa->gc[i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR;
+	      esl_msa_AppendGC(newmsa, msa->gc_tag[i], newstr);
+	      free(newstr);
+	    }
+	}
+    }
+
+  if(msa->gr != NULL)
+    {  
+      for(j = 0; j < msa->ngr; j++)
+	{
+	  for(i = 0; i < msa->nseq; i++)
+	    {
+	      if(msa->gr[j][i] != NULL) 
+		{
+		  ESL_ALLOC(newstr, sizeof(char) * (msa->alen+nnew+1));
+		  if((status = cp_and_add_gaps_to_aseq(newstr, msa->gr[j][i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR;
+		  esl_msa_AppendGR(newmsa, msa->gr_tag[j], i, newstr);
+		  free(newstr);
+		}
+	    }
+	}
+    }
+    
+  /* copy the aseqs, free as we go to save memory */
+  for(i = 0; i < msa->nseq; i++)
+    {
+      esl_strdup(msa->sqname[i], -1, &(newmsa->sqname[i]));
+      if((status = cp_and_add_gaps_to_aseq(newmsa->aseq[i], msa->aseq[i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR;
+      free(msa->aseq[i]);
+      msa->aseq[i] = NULL;
+    }    
+  newmsa->abc = abc;
+  esl_msa_Digitize(newmsa->abc, newmsa, NULL);
+  esl_msa_Destroy(msa);
+  *ret_msa = newmsa;
+      
+  return eslOK;
+  
+ ERROR:
+  return status;
+}
+
+
+/*cp_and_add_gaps_to_aseq
+ *                   
+ * Given an aligned [0..alen-1] original text string,
+ * add toadd[apos-1] gaps after each residue. 
+ * new_aseq must be already allocated. 
+ *
+ * toadd is numbered 1..alen.
+ */
+static int cp_and_add_gaps_to_aseq(char *new_aseq, char *orig_aseq, int alen, int *toadd, int nnew, char gapchar)
+{
+  int orig_apos = 0;
+  int new_apos  = 0;
+  int i;
+
+  for(i = 0; i < toadd[0]; i++)
+    new_aseq[new_apos++] = gapchar;
+  for(orig_apos = 0; orig_apos < alen; orig_apos++)
+    {
+      new_aseq[new_apos++] = orig_aseq[orig_apos];
+      for(i = 0; i < toadd[(orig_apos+1)]; i++)
+	new_aseq[new_apos++] = gapchar;
+    }
+  new_aseq[new_apos] = '\0';
+  return eslOK;
+}
+
+
+/* Function: convert_post_to_pp()
+ * 
+ * Purpose:  Convert 'POST' annotation in an MSA (from Infernal 0.72-1.0) 
+ *           to 'PP' annotation in place. <nali> is provided only so that
+ *           we can provide it in an error message if nec.
+ *
+ */
+static int
+convert_post_to_pp(ESL_MSA *msa, char *errbuf, int nali)
+{
+  int  status;
+  int  ridx1, ridx2, ndigits;
+  int  r,i,apos;
+  int  ir2;
+
+  /* Find out which #=GR line is the POST, Post, or post line (if more than one exist, last one is chosen) */
+  ridx1 = -1;
+  ridx2 = -1;
+  ndigits = 0;
+  for (r = 0; r < msa->ngr; r++) { 
+    if (strcmp(msa->gr_tag[r], "POST")   == 0) { ridx1 = r; ndigits = 1; }
+    if (strcmp(msa->gr_tag[r], "Post")   == 0) { ridx1 = r; ndigits = 1; }
+    if (strcmp(msa->gr_tag[r], "post")   == 0) { ridx1 = r; ndigits = 1; }
+    if (strcmp(msa->gr_tag[r], "POSTX.") == 0) { ridx1 = r; ndigits = 1; }
+    if (strcmp(msa->gr_tag[r], "POST.X") == 0) { ridx2 = r; ndigits = 2; }
+  }
+  if(ndigits == 0) { 
+    ESL_FAIL(eslEINVAL, errbuf, "--post2pp requires \"#=GR POST\", \"#=GR Post\", \"#=GR post\", \"#=GR POSTX.\", or \"#=GR POSTX.\" and \"#=GR POST.X\" annotation, it's missing from alignment %d\n", nali);
+  }
+  if(ndigits == 2 && ridx1 == -1) { 
+    ESL_FAIL(eslEINVAL, errbuf, "found \"#=GR POST.X\" annotation but not \"#=GR POSTX.\" in alignment %d.\n", nali);
+  }
+  /* make sure that the POST annotation is the only GR annotation we have,
+   * this should be the case if alignment was created with infernal's cmalign
+   * v0.72-v1.0.2, which is the only type of alignments that should have POST
+   * annotation */
+  if((ndigits == 1 && msa->ngr != 1) || (ndigits == 2 && msa->ngr != 2))  
+    ESL_FAIL(eslEINVAL, errbuf, "additional \"#=GR\" annotation exists besides posteriors, alignment wasn't created by cmalign v0.72-v1.0.2");
+
+  ESL_ALLOC(msa->pp, sizeof(char *) * msa->nseq);
+  for(i = 0; i < msa->nseq; i++) { 
+    ESL_ALLOC(msa->pp[i], sizeof(char) * (msa->alen+1));
+  }
+  if(ndigits == 1) { /* easy case, just copy the annotation */
+    for(i = 0; i < msa->nseq; i++) { 
+      esl_strdup(msa->gr[ridx1][i], msa->alen, &(msa->pp[i]));
+      free(msa->gr[ridx1][i]);
+    }
+    free(msa->gr[ridx1]);
+  }
+  else { /* ndigits == 2 */
+    for(i = 0; i < msa->nseq; i++) { 
+      for(apos = 0; apos < msa->alen; apos++) { 
+	if(esl_abc_CIsGap(msa->abc, msa->gr[ridx1][i][apos])) {
+	  if(! esl_abc_CIsGap(msa->abc, msa->gr[ridx2][i][apos])) ESL_FAIL(eslEINVAL, errbuf, "reading post annotation for seq: %d aln column: %d, post 'tens' value gap but post 'ones' value is gap.\n", i, apos);
+	  msa->pp[i][apos] = '.';
+	}
+	else if(msa->gr[ridx1][i][apos] == '*') {
+	  if(msa->gr[ridx2][i][apos] != '*') ESL_FAIL(eslEINVAL, errbuf, "reading post annotation for aln %d, seq: %d aln column: %d, post 'tens' value '*' but post 'ones' value != '*'.\n", nali, i, apos);
+	  msa->pp[i][apos] = '*';
+	}
+	else {
+	  ir2 = (int) (msa->gr[ridx2][i][apos] - '0');
+	  if(ir2 >= 5) { /* round up, being careful to round 95 and above to '*' */
+	    msa->pp[i][apos] = (msa->gr[ridx1][i][apos] == '9') ? '*' : msa->gr[ridx1][i][apos] + 1;
+	  }
+	  else { 
+	    msa->pp[i][apos] = msa->gr[ridx1][i][apos];
+	  }
+	}
+      }
+      free(msa->gr[ridx1][i]);
+      free(msa->gr[ridx2][i]);
+    }
+    free(msa->gr[ridx1]);
+    free(msa->gr[ridx2]);
+  }
+  /* done filling msa->pp, now free gr annotation, we know from check above 
+   * the msa's GR annotation only consists of the posterior annotation, so 
+   * we can safely remove GR altogether (without worrying about reordering other GRs) */
+  free(msa->gr);
+  msa->gr = NULL;
+  msa->ngr = 0;
+  /* gr_idx will no longer be valid so we destroy it, 
+   * we could recreate it, but it's only used for parsing anyhow */
+  if(msa->gr_idx != NULL) { esl_keyhash_Destroy(msa->gr_idx); msa->gr_idx = NULL; }
+  msa->gr_idx = NULL;
+  
+  return eslOK;
+
+ ERROR:
+  esl_fatal("convert_post_to_pp(), memory allocation error.");
+  return eslOK; /* NEVERREACHED */
+}
+
+/* write_rf_gapthresh
+ *                   
+ * Given an MSA write/rewrite RF based on fraction
+ * of gaps in each column. If fraction < gapthresh RF is an 'x',
+ * otherwise it's a '.' (gap).
+ */
+static int
+write_rf_gapthresh(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa, float gapthresh)
+{
+  int      status;
+  int64_t  apos;
+  int64_t  gaps;
+  int      i;
+  int      nrf = 0;
+
+  if(msa->rf == NULL) { 
+    ESL_ALLOC(msa->rf, sizeof(char) * (msa->alen+1));
+  }
+  /* set as all gaps */
+  for (apos = 1; apos <= msa->alen; apos++) msa->rf[(apos-1)] = '.';
+
+  for (apos = 1; apos <= msa->alen; apos++) {
+    for (gaps = 0, i = 0; i < msa->nseq; i++) {
+      if (esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) gaps++;
+    }
+    if((double) gaps / (double) msa->nseq < gapthresh) { /* column passes gap threshold */
+      nrf++;
+      msa->rf[(apos-1)] = 'x';
+    }
+    else { /* column fails the gap threshold */
+      msa->rf[(apos-1)] = '.';
+    }
+  }
+  msa->rf[msa->alen] = '\0';
+
+  return eslOK;
+ ERROR:
+  return status;
+}
+
+/* Function: compare_ints()
+ * 
+ * Purpose:  Comparison function for qsort(). Used 
+ *           by msa_median_length().
+ *
+ * Return 1 if el1 > el2, -1 if el1 < el2 and 0 if el1 == el2.
+ * This will result in a sorted list with smallest
+ * element as the first element, largest as the last.
+ */ 
+int 
+compare_ints(const void *el1, const void *el2)
+{
+  if      ((* ((int *) el1)) > (* ((int *) el2)))  return 1;
+  else if ((* ((int *) el1)) < (* ((int *) el2)))  return -1;
+  return 0;
+}
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/miniapps/esl-alimanip.itest.pl b/miniapps/esl-alimanip.itest.pl
new file mode 100755
index 0000000..c2b3717
--- /dev/null
+++ b/miniapps/esl-alimanip.itest.pl
@@ -0,0 +1,354 @@
+#! /usr/bin/perl
+
+# Integrated test of the esl-alimanip miniapp.
+#
+# Usage:     ./esl-alimanip.itest.pl <esl-alimanip binary> <tmpfile prefix>
+# Example:   ./esl-alimanip.itest.pl ./esl-alimanip        foo
+#
+# EPN, Tue Feb  2 13:19:44 2010
+
+$eslalimanip= shift;
+$tmppfx     = shift;
+
+if (! -x "$eslalimanip") { die "FAIL: didn't find esl-alimanip binary $eslalimanip"; }
+
+# <[miniapps]> esl-seqstat --rna -a foo.stk 
+#= seq1                       29 
+#= seq2                       31 
+#= seq3                       20 
+
+open(ALIFILE, ">$tmppfx.stk") || die "FAIL: couldn't open $tmppfx.stk for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+seq1         aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg
+#=GR seq1 PP 5789**..**88...*9.9****88.7..776543210
+seq2         ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG....
+#=GR seq2 PP ..********************************....
+seq3         ..AAAA..AAAA...C...CCCCCC.C..GGGG-....
+#=GR seq3 PP ..5555..4*44...3...888888.8..8899.....
+#=GC SS_cons ...............<...<<<<......>>>>>....
+#=GC PP_cons ..789*..8877...8...****99.8..99998....
+#=GC RF      ..AAAA..AAAA...C...CCCCCC.c..GGGGG....
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.stk2") || die "FAIL: couldn't open $tmppfx.stk2 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+seq1         aaAANA..AAAA...Cc.cCCCCCC.C..GGGGGgggg
+#=GR seq1 PP 5789**..**88...*9.9****88.7..776543210
+seq2         ..AARAa.AAAAaacCcccCCCCCCcCccGGGGG....
+#=GR seq2 PP ..********************************....
+seq3         ..AAAA..AAAA...C...CCCCCC.C..GGGG-....
+#=GR seq3 PP ..5555..4*44...3...888888.8..8899.....
+#=GC SS_cons ...............<...<<<<......>>>>>....
+#=GC PP_cons ..789*..8877...8...****99.8..99998....
+#=GC RF      ..AAAA..AAAA...C...CCCCCC.c..GGGGG....
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.post.stk") || die "FAIL: couldn't open $tmppfx.oldp.stk for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+seq1              aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg
+#=GR seq1 POSTX.  5789**..**88...*9.9****88.7..776543210
+#=GR seq1 POST.X  3717**..**71...*2.3****34.5..239189922
+seq2              ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG....
+#=GR seq2 POSTX.  ..********************************....
+#=GR seq2 POST.X  ..********************************....
+seq3              ..AAAA..AAAA...C...CCCCCC.C..GGGG-....
+#=GR seq3 POSTX.  ..5555..4*44...3...888888.8..8899.....
+#=GR seq3 POST.X  ..4567..3*99...1...788882.1..0815.....
+#=GC SS_cons      ...............<...<<<<......>>>>>....
+#=GC RF           ..AAAA..AAAA...C...CCCCCC.c..GGGGG....
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.afa") || die "FAIL: couldn't open $tmppfx.afa for writing alifile";
+print ALIFILE << "EOF";
+>seq1
+aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg
+>seq2
+..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG....
+>seq3
+..AAAA..AAAA...C...CCCCCC.C..GGGG-....
+EOF
+close ALIFILE;
+
+open(LISTFILE, ">$tmppfx.list") || die "FAIL: couldn't open $tmppfx.stk for writing alifile";
+print LISTFILE << "EOF";
+seq1
+seq2
+EOF
+close LISTFILE;
+
+open(LISTFILE, ">$tmppfx.list2") || die "FAIL: couldn't open $tmppfx.stk for writing alifile";
+print LISTFILE << "EOF";
+seq3
+seq2
+seq1
+EOF
+close LISTFILE;
+
+open(SEQFILE, ">$tmppfx.trim.fa") || die "FAIL: couldn't open $tmppfx.trim.fa for writing alifile";
+print SEQFILE << "EOF";
+>seq1
+ccCCCCCCCGGGGGg
+>seq2
+CCCCcCccGG
+>seq3
+AACCCCCCCCG
+EOF
+close SEQFILE;
+
+open(MASKFILE, ">$tmppfx.rfmask") || die "FAIL: couldn't open $tmppfx.trim.fa for writing alifile";
+print MASKFILE << "EOF";
+011011110101110110101
+EOF
+close MASKFILE;
+
+open(MASKFILE, ">$tmppfx.amask") || die "FAIL: couldn't open $tmppfx.trim.fa for writing alifile";
+print MASKFILE << "EOF";
+01011011011010111011111101010010001100
+EOF
+close MASKFILE;
+
+$output = `$eslalimanip -h`;
+if ($? != 0)                                     { die "FAIL: esl-alimanip failed unexpectedly"; }
+if ($output !~ /Usage: esl-alimanip/)            { die "FAIL: help output not right"; }
+
+$output = `$eslalimanip --devhelp`;
+if ($? != 0)                                     { die "FAIL: esl-alimanip failed unexpectedly"; }
+if ($output !~ /Usage: esl-alimanip/)            { die "FAIL: devhelp output not right"; }
+
+
+$output = `$eslalimanip --rna $tmppfx.stk 2>&1`;
+if ($? != 0)                                                                    { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; }
+
+system("$eslalimanip -o $tmppfx.o.stk --rna $tmppfx.stk > /dev/null");
+if ($? != 0)                                                                    { die "FAIL: esl-alimanip failed unexpectedly";}
+$output = `cat $tmppfx.o.stk`;
+if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --dna $tmppfx.stk 2>&1`;
+if ($? != 0)                                                                    { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --amino $tmppfx.stk 2>&1`;
+if ($? != 0)                                                                    { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --informat stockholm $tmppfx.stk 2>&1`;
+if ($? != 0)                                                                    { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --informat pfam $tmppfx.stk 2>&1`;
+if ($? != 0)                                                                    { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --informat afa $tmppfx.afa 2>&1`;
+if ($? != 0)                                                                    { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /--AAAA--AAAA---C---CCCCCC-C--GGGG-----/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --outformat afa $tmppfx.stk 2>&1`;
+if ($? != 0)                                             { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /AAAAAA--AAAA---CC-CCCCCCC-C--GGGGGGGGG/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --outformat psiblast $tmppfx.stk 2>&1`;
+if ($? != 0)                                             { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /aaAAAA--AAAA---Cc-cCCCCCC-C--GGGGGgggg/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --outformat a2m $tmppfx.stk 2>&1`;
+if ($? != 0)                                    { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /aaAAAAAAAACccCCCCCCCGGGGGgggg/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --lnfract 0.9 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --lnfract 0.9 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq3
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --lxfract 1.02 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq2
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --lmin 30 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq1 and seq3
+if ($output =~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --lmax 29 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq2
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --rffract 0.953 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq3
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --detrunc 1 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq3
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --xambig 0 $tmppfx.stk2 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq1 and seq2
+if ($output =~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --seq-k $tmppfx.list $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq3
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --seq-k $tmppfx.list --informat pfam --small $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq3
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --k-reorder --seq-k $tmppfx.list $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq3
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --seq-r $tmppfx.list $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq1 and seq2
+if ($output =~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --seq-r $tmppfx.list --informat pfam --small $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should remove seq1 and seq2
+if ($output =~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --seq-ins 9 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should keep seq1 and seq 2
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --seq-ins 9 --seq-ni 3 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should keep only seq2
+if ($output =~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --seq-ins 9 --seq-xi 2 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should only keep seq1
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --trim $tmppfx.trim.fa $tmppfx.stk 2>&1`;
+if ($? != 0)                                                    { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /seq1\s+----------------C-CCCCCCC-C--GGGGGG---/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq3\s+----------AA---C---CCCCCC-C--G--------/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --minpp 0.9 $tmppfx.stk 2>&1`;
+if ($? != 0)                                                     { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /seq1\s+----AA--AA-----C---CCCC---------------/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq3\s+---------A----------------------------/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --reorder $tmppfx.list2 $tmppfx.stk 2>&1`;
+if ($? != 0)           { die "FAIL: esl-alimanip failed unexpectedly";}
+# should keep all seqs
+if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --mask2rf $tmppfx.rfmask $tmppfx.stk 2>&1`;
+if ($? != 0)                                                          { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /#=GC RF      ...xx...xxxx.......x.xxx..x..x.x.x..../) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --m-keeprf --mask2rf $tmppfx.rfmask $tmppfx.stk 2>&1`;
+if ($? != 0)                                                          { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /#=GC RF      ...AA...AAAA.......C.CCC..c..G.G.G..../) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --mask2rf $tmppfx.amask $tmppfx.stk 2>&1`;
+if ($? != 0)                                                          { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /#=GC RF      .x.xx.xx.xx.x.xxx.xxxxxx.x.x..x...xx../) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --m-keeprf --mask2rf $tmppfx.amask $tmppfx.stk 2>&1`;
+if ($? != 0)                                                          { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /#=GC RF      .x.AA.xx.AA.x.xCx.xCCCCC.x.x..G...xx../) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --num-all $tmppfx.stk 2>&1`;
+if ($? != 0)                                                          { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /#=GC COLX.   00000000011111111112222222222333333333/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /#=GC COL.X   12345678901234567890123456789012345678/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --num-rf $tmppfx.stk 2>&1`;
+if ($? != 0)                                                          { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output !~ /#=GC RFCOLX. ..0000..0000...0...111111.1..11122..../) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /#=GC RFCOL.X ..1234..5678...9...012345.6..78901..../) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --rm-gc RF $tmppfx.stk 2>&1`;
+if ($? != 0)              { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output =~ /#=GC RF/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --rm-gc SS_cons $tmppfx.stk 2>&1`;
+if ($? != 0)                   { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output =~ /#=GC SS_cons/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --rm-gc PP_cons $tmppfx.stk 2>&1`;
+if ($? != 0)                   { die "FAIL: esl-alimanip failed unexpectedly";}
+if ($output =~ /#=GC PP_cons/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --sindi $tmppfx.stk 2>&1`;
+if ($? != 0)                                                          { die "FAIL: esl-alimanip failed unexpectedly";  }
+if ($output !~ /#=GR seq1 SS :::::::::::::::<---<<<<______>>>>>::::/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /#=GR seq3 SS :::::::::::::::::::<<<<______>>>>:::::/) { die "FAIL: alignment manipulated incorrectly"; }
+
+$output = `$eslalimanip --rna --post2pp $tmppfx.post.stk 2>&1`;
+if ($? != 0)                                                                    { die "FAIL: esl-alimanip failed unexpectedly";  }
+if ($output !~ /#=GR seq1 PP 588\*\*\*..\*\*98...\*9.9\*\*\*\*88.8..777554310/) { die "FAIL: alignment manipulated incorrectly"; }
+if ($output !~ /#=GR seq3 PP ..5666..4\*55...3...999998.8..899\*...../)         { die "FAIL: alignment manipulated incorrectly"; }
+
+print "ok\n"; 
+unlink "$tmppfx.stk";
+unlink "$tmppfx.stk2";
+unlink "$tmppfx.o.stk";
+unlink "$tmppfx.post.stk";
+unlink "$tmppfx.afa";
+unlink "$tmppfx.list";
+unlink "$tmppfx.list2";
+unlink "$tmppfx.trim.fa";
+unlink "$tmppfx.rfmask";
+unlink "$tmppfx.amask";
+exit 0;
diff --git a/miniapps/esl-alimanip.man b/miniapps/esl-alimanip.man
new file mode 100644
index 0000000..a5bb6c9
--- /dev/null
+++ b/miniapps/esl-alimanip.man
@@ -0,0 +1,344 @@
+.TH "esl-alimanip" 1  "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-alimanip - manipulate a multiple sequence alignment
+
+.SH SYNOPSIS
+
+.B esl-alimanip
+.I [options]
+.I msafile
+
+.SH DESCRIPTION
+
+.pp
+.B esl-alimanip
+can manipulate the multiple sequence alignment(s) in 
+.I msafile
+in various ways. Options exist to remove
+specific sequences, reorder sequences, designate reference columns
+using Stockholm "#=GC RF" markup, and add annotation that numbers
+columns. 
+
+The alignments can be of protein or DNA/RNA sequences. All alignments
+in the same 
+.I msafile
+must be either protein or DNA/RNA. The alphabet will be autodetected
+unless one of the options 
+.I --amino,
+.I --dna,
+or 
+.I --rna 
+are given. 
+
+.SH OPTIONS
+
+.TP
+.B -h 
+Print brief help;  includes version number and summary of
+all options, including expert options.
+
+.TP
+.BI -o " <f>"
+Save the resulting, modified alignment in Stockholm format to a file
+.I <f>.
+The default is to write it to standard output.
+
+.TP 
+.BI --informat " <s>"
+Specify that the input alignment be format 
+.I <s>.
+At preset, the only valid choices for 
+.I <s> 
+are: 'stockholm', 'pfam', and 'afa'. 'pfam' is a special
+case of Stockholm format in which each sequence is placed on a single
+line, instead of being interleaved; 'afa' is aligned FASTA. By default
+alignments are assumed to be in Stockholm format (either interleaved
+or Pfam).
+
+.TP 
+.BI --outformat " <s>"
+Specify that the output alignment be format 
+.I <s>.
+Choices for 
+.I <s> 
+are: 'stockholm', 'pfam', 'a2m', 'psiblast', 'afa'. 
+By default the alignment is output in interleaved Stockholm format.
+
+.TP
+.B --devhelp
+Print help, as with  
+.B "-h",
+but also include undocumented developer options. These options are not
+listed below, are under development or experimental, and are not
+guaranteed to even work correctly. Use developer options at your own
+risk. The only resources for understanding what they actually do are
+the brief one-line description printed when
+.B "--devhelp"
+is enabled, and the source code.
+
+.SH EXPERT OPTIONS
+
+.TP 
+.BI --lnfract " <x>"
+Remove any sequences with length less than 
+.I <x>
+fraction the length of the median length sequence in the alignment.
+
+.TP 
+.BI --lxfract " <x>"
+Remove any sequences with length more than 
+.I <x>
+fraction the length of the median length sequence in the alignment.
+
+.TP 
+.BI --lmin " <n>"
+Remove any sequences with length less than 
+.I <n>
+residues.
+
+.TP 
+.BI --lmax " <n>"
+Remove any sequences with length more than 
+.I <n>
+residues.
+
+.TP 
+.BI --rfnfract " <x>"
+Remove any sequences with nongap RF length less than 
+.I <x>
+fraction the nongap RF length of the alignment.
+
+.TP 
+.BI --detrunc " <n>"
+Remove any sequences that have all gaps in the first 
+.I <n>
+non-gap #=GC RF columns or the last 
+.I <n>
+non-gap #=GC RF columns.
+
+.TP 
+.BI --xambig " <n>"
+Remove any sequences that has more than
+.I <n>
+ambiguous (degenerate) residues.
+
+.TP 
+.BI --seq-r " <f>"
+Remove any sequences with names listed in file 
+.I <f>.
+Sequence names listed in 
+.I <f>
+can be separated by tabs, new lines, or spaces.
+The file must be in Stockholm format for this option to work. 
+
+.TP 
+.BI --seq-k " <f>"
+Keep only sequences with names listed in file 
+.I <f>.
+Sequence names listed in 
+.I <f>
+can be separated by tabs, new lines, or spaces.
+By default, the kept sequences will remain in the original order
+they appeared in 
+.I msafile,
+but the order from 
+.I <f> 
+will be used if the 
+.B --k-reorder
+option is enabled.
+The file must be in Stockholm format for this option to work. 
+
+.TP 
+.BI --small
+With
+.B --seq-k 
+or
+.B --seq-r,
+operate in small memory mode. 
+The alignment(s) will not be stored in memory, thus
+.B --seq-k 
+and
+.B --seq-r
+will be able to work on very large alignments regardless
+of the amount of available RAM.
+The alignment file must be in Pfam
+format and 
+.BI --informat " pfam"
+and one of
+.B --amino,
+.B --dna,
+or
+.B --rna
+must be given as well.
+
+.TP 
+.BI --k-reorder
+With
+.BI --seq-k " <f>",
+reorder the kept sequences in the output alignment to the order
+from the list file
+.I <f>.
+
+.TP 
+.BI --seq-ins " <n>"
+Keep only sequences that have at least 1 inserted residue after 
+nongap RF position 
+.I <n>.
+
+.TP 
+.BI --seq-ni " <n>"
+With 
+.B --seq-ins
+require at least 
+.I <n> 
+inserted residues in a sequence for it to be kept.
+
+.TP 
+.BI --seq-xi " <n>"
+With 
+.B --seq-ins
+allow at most
+.I <n> 
+inserted residues in a sequence for it to be kept.
+
+.TP 
+.BI --trim " <f>"
+File 
+.I <f>
+is an unaligned FASTA file containing truncated versions of each
+sequence in the 
+.I msafile. 
+Trim the sequences in the alignment to match their truncated versions
+in 
+.I <f>.
+If the alignment output format is Stockholm (the default output
+format), all per-column (GC) and per-residue (GR) annotation will be
+removed from the alignment when
+.B --trim
+is used. However, if 
+.B --t-keeprf 
+is also used, the reference annotation (GC RF) will be kept.
+
+.TP 
+.B --t-keeprf
+Specify that the 'trimmed' alignment maintain the original
+reference (GC RF) annotation. Only works in combination with 
+.B --trim.
+
+.TP 
+.BI --minpp " <x>"
+Replace all residues in the alignments for which the posterior
+probability annotation (#=GR PP) is less than 
+.I <x>
+with gaps. The PP annotation for these residues is also converted to
+gaps. 
+.I <x>
+must be greater than 0.0 and less than or equal to 0.95.
+
+.TP 
+.BI --tree " <f>"
+Reorder sequences by tree order. 
+Perform single linkage clustering on the sequences in the alignment
+based on sequence identity given the alignment to define a 'tree' 
+of the sequences. The sequences in the alignment are reordered
+according to the tree, which groups similar sequences together. The
+tree is output in Newick format to 
+.I <f>.
+
+.TP 
+.BI --reorder " <f>"
+Reorder sequences to the order listed in file 
+.I <f>.
+Each sequence in the alignment must be listed in 
+.I <f>.
+Use
+.B --k-reorder
+to reorder only a subset of sequences to a subset alignment file. 
+The file must be in Stockholm format for this option to work. 
+
+.TP 
+.BI --mask2rf " <f>"
+Read in the 'mask' file 
+.I <f>
+and use it to define new #=GC RF annotation for the 
+alignment.
+.I <f>
+must be a single line, with exactly 
+.I <alen> 
+or 
+.I <rflen>
+characters, either the full alignment length or the number of nongap #=GC RF characters, respectively.
+Each character must be either a '1'
+or a '0'. The new #=GC RF markup will contain an 'x' for each column
+that is a '1' in lane mask file, and a '.' for each column that is a '0'. 
+If the mask is of length
+.I <rflen>
+then it is interpreted as applying to only nongap RF characters in the
+existing RF annotation, all gap RF characters will remain gaps and
+nongap RF characters will be redefined as above.
+
+.TP 
+.BI --m-keeprf
+With 
+.B --mask2rf,
+do not overwrite existing nongap RF characters that are included by
+the input mask as 'x', leave them as the character they are.
+
+.TP 
+.BI --num-all 
+Add annotation to the alignment numbering all of the columns in the
+alignment. 
+
+.TP 
+.BI --num-rf 
+Add annotation to the alignment numbering the non-gap (non '.') #=GC
+RF columns of the alignment. 
+
+.TP 
+.BI --rm-gc " <s>"
+Remove certain types of #=GC annotation from the alignment. 
+.I "<s>" 
+must be either "RF", "SS_cons", "SA_cons", or "PP_cons",
+at present.
+
+.TP 
+.BI --sindi 
+Annotate individual secondary structures for each sequence by imposing
+the consensus secondary structure defined by the #=GC SS_cons
+annotation. 
+
+.TP 
+.BI --post2pp 
+Update Infernal's cmalign 0.72-1.0.2 posterior probability "POST"
+annotation to "PP" annotation, which is read by other miniapps,
+including 
+.B esl-alimask
+and 
+.B esl-alistat.
+
+.TP
+.B --amino
+Assert that the 
+.I msafile 
+contains protein sequences. 
+
+.TP 
+.B --dna
+Assert that the 
+.I msafile 
+contains DNA sequences. 
+
+.TP 
+.B --rna
+Assert that the 
+.I msafile 
+contains RNA sequences. 
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-alimap.c b/miniapps/esl-alimap.c
new file mode 100644
index 0000000..936e2ea
--- /dev/null
+++ b/miniapps/esl-alimap.c
@@ -0,0 +1,687 @@
+/* Map two multiple sequence alignments to each other.
+ *
+ * EPN, Tue Sep 23 13:39:03 2008
+ * SVN $Id: esl-alimanip.c 270 2008-06-19 20:45:47Z nawrockie $
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <math.h>
+#include <limits.h>
+
+#include "easel.h"
+#include "esl_distance.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_distance.h"
+#include "esl_dmatrix.h"
+#include "esl_vectorops.h"
+#include "esl_stack.h"
+#include "esl_tree.h"
+#include "esl_wuss.h"
+
+static char banner[] = "map two alignments to each other";
+static char usage[]  = "[options] <msafile1> <msafile2>\n\
+<msafile1> and <msafile2> must be in Stockholm format.";
+
+#define NCHOICES 3
+#define DIAG 0
+#define VERT 1
+#define HORZ 2
+
+static int  map_msas(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa1, ESL_MSA *msa2, int **ret_msa1_to_msa2_map);
+static int  map_sub_msas(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa1, ESL_MSA *msa2, char **ret_msa1_to_msa2_mask);
+static int  map_rfpos_to_apos(ESL_MSA *msa, int **ret_rf2a_map, int **ret_a2rf_map, int *ret_rflen);
+static int  map2masks(const ESL_GETOPTS *go, char *errbuf, int alen1, int alen2, int *a2rf_map1, int *a2rf_map2, int *rf2a_map1, int *rf2a_map2, int rflen1, int rflen2, int *msa1_to_msa2_map);
+
+static ESL_OPTIONS options[] = {
+  /* name          type        default  env   range      togs reqs  incomp                      help                                                       docgroup */
+  { "-h",          eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL, NULL,                       "help; show brief info on version and usage",                     1 },
+  { "-q",          eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL, NULL,                       "be quiet, don't print mapping of each column",                   1 },
+  { "--mask-a2a",  eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,                       "mask to <f>:'1'=msa1 aln       col x maps msa2 aln col",         1 },
+  { "--mask-a2rf", eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,                       "mask to <f>:'1'=msa1 aln       col x maps msa2 nongap RF col",   1 },
+  { "--mask-rf2a", eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,                       "mask to <f>:'1'=msa1 nongap RF col x maps msa2 aln col",         1 },
+  { "--mask-rf2rf",eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,                       "mask to <f>:'1'=msa1 nongap RF col x maps msa2 nongap RF col",   1 },
+  { "--submap",    eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,                       "<msafile2> is subaln of <msafile1>, output mask to <f>",         1 },
+  { "--amino",     eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL,"--dna,--rna",               "<msafile{1,2}> contain protein alignments",                      1 },
+  { "--dna",       eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL,"--amino,--rna",             "<msafile{1,2}> contain DNA alignments",                          1 },
+  { "--rna",       eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL,"--amino,--dna",             "<msafile{1,2}> contain RNA alignments",                          1 },
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go      = NULL;	/* application configuration       */
+  ESL_ALPHABET *abc     = NULL;	/* biological alphabet             */
+  char         *alifile1= NULL;	/* alignment 1 file name           */
+  char         *alifile2= NULL;	/* alignment 2 file name           */
+  int           fmt;		/* format code for alifiles        */
+  ESL_MSAFILE  *afp1    = NULL;	/* open alignment file 1           */
+  ESL_MSAFILE  *afp2    = NULL;	/* open alignment file 2           */
+  ESL_MSA      *msa1    = NULL;	/* multiple sequence alignment 1   */
+  ESL_MSA      *msa2    = NULL;	/* multiple sequence alignment 2   */
+  int           status;		/* easel return code               */
+  char          errbuf[eslERRBUFSIZE*4];
+
+  int  *msa1_to_msa2_map;       /* map from <msafile1> to <msafile2> */
+  char *sub_msa1_to_msa2_mask;  /* with --sub the map from <msafile1> to <msafile2> in mask form */
+  FILE *subfp = NULL;
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if (esl_opt_GetBoolean(go, "-h") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage);
+      puts("\nwhere basic options are:");
+      esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+      exit(0);
+    }
+
+  if (esl_opt_ArgNumber(go) != 2) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  alifile1 = esl_opt_GetArg(go, 1);
+  alifile2 = esl_opt_GetArg(go, 2);
+
+  fmt             = eslMSAFILE_STOCKHOLM;
+
+  /***********************************************
+   * Open the MSA files
+   ***********************************************/
+
+  if      (esl_opt_GetBoolean(go, "--amino"))   abc = esl_alphabet_Create(eslAMINO);
+  else if (esl_opt_GetBoolean(go, "--dna"))     abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--rna"))     abc = esl_alphabet_Create(eslRNA);
+
+  if ( (status = esl_msafile_Open(&abc, alifile1, NULL, fmt, NULL, &afp1)) != eslOK) esl_msafile_OpenFailure(afp1, status);
+  if ( (status = esl_msafile_Open(&abc, alifile2, NULL, fmt, NULL, &afp2)) != eslOK) esl_msafile_OpenFailure(afp2, status);
+
+  /******************************************************************
+   * Read first alignment from each file, we only use the first one 
+   ******************************************************************/
+
+  if ((status = esl_msafile_Read(afp1, &msa1)) != eslOK) esl_msafile_ReadFailure(afp1, status);
+  if ((status = esl_msafile_Read(afp2, &msa2)) != eslOK) esl_msafile_ReadFailure(afp2, status);
+
+  /* map the alignments in msa1 and msa2 */
+  if(! esl_opt_IsOn(go, "--submap")) { 
+    if((status = map_msas(go, errbuf, msa1, msa2, &msa1_to_msa2_map)) != eslOK) goto ERROR;
+    free(msa1_to_msa2_map);
+  }
+
+  /* --submap: if nec, map <msafile1> to a subset of it's own columns in <msafile2>  */
+  else { /* --submap was enabled */
+    if ((subfp = fopen(esl_opt_GetString(go, "--submap"), "w")) == NULL) 
+      ESL_FAIL(eslFAIL, errbuf, "Failed to open --submap output file %s\n", esl_opt_GetString(go, "--submap"));
+    if((status = map_sub_msas(go, errbuf, msa1, msa2, &sub_msa1_to_msa2_mask)) != eslOK) goto ERROR;
+    fprintf(subfp, "%s\n", sub_msa1_to_msa2_mask);
+    fclose(subfp);
+    subfp = NULL;
+    printf("# Mask of 1/0s with 1 indicating aln column in %s maps to a column in %s saved to file %s.\n", alifile1, alifile2, esl_opt_GetString(go, "--submap")); 
+    free(sub_msa1_to_msa2_mask);
+  }
+  
+  /* Cleanup, normal return
+   */
+  esl_msafile_Close(afp1);
+  esl_msafile_Close(afp2);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  esl_msa_Destroy(msa1);
+  esl_msa_Destroy(msa2);
+  return 0;
+  
+ ERROR:
+  if (afp1)   esl_msafile_Close(afp1);
+  if (afp2)   esl_msafile_Close(afp2);
+  if (go)     esl_getopts_Destroy(go);
+  if (msa1)   esl_msa_Destroy(msa1);
+  if (msa2)   esl_msa_Destroy(msa2);
+  if (subfp)  fclose(subfp);
+  esl_fatal(errbuf);
+  return 1; /* never reached */
+}
+
+
+/* map_msas
+ *                   
+ * Align msa1 and msa2.
+ * For each column in msa1, determine the corresponding column
+ * in msa2. This implementation requires:
+ *  - msa1 and msa2 contain exactly the same sequences in the same order
+ * Note: the seqs in msa1 and msa2 do not have to have the same names.
+ *
+ * Uses a DP algorithm similar to Needleman-Wunsch, but that's aligning
+ * two alignment columns at a time instead of two residues. 
+ */
+static int
+map_msas(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa1, ESL_MSA *msa2, int **ret_msa1_to_msa2_map)
+{
+  int status;
+  int **one2two;              /* [0..c..rflen1][0..a..alen2] number of residues from non-gap RF column c of msa1
+			       * aligned in column a of msa 2 */
+  int *rf2a_map1 = NULL;       /* msa1 map of reference columns (non-gap RF residues) to alignment columns, NULL if msa1->rf == NULL */
+  int *rf2a_map2 = NULL;       /* msa2 map of reference columns (non-gap RF residues) to alignment columns, NULL if msa2->rf == NULL */
+  int *a2rf_map1 = NULL;       /* msa1 map of alignment columns to reference columns, NULL if msa1->rf == NULL */
+  int *a2rf_map2 = NULL;       /* msa2 map of alignment columns to reference columns, NULL if msa2->rf == NULL */
+  int apos1, apos2;           /* counters over alignment position in msa1, msa2 respectively */
+  int alen1, alen2;           /* alignment lengths */
+  int rfpos1, rfpos2;           /* counters over reference positions */
+  int rflen1, rflen2;           /* reference (non-gap RF) lengths */
+  int **mx;                   /* [0..c..rflen1][0..a..alen2] dp matrix, score of max scoring aln 
+			       * from 1..c in msa1 and 1..a in msa 2 */
+  int **tb;                   /* [0..c..rflen1][0..a..alen2] traceback ptrs, 0 for diagonal, 1 for vertical */
+  char *seq1, *seq2;          /* temporary strings for ensuring dealigned sequences in msa1 and msa2 are identical */
+  int64_t len1, len2;         /* length of seq1, seq2 */
+  int isgap1, isgap2;         /* is this residue a gap in msa1, msa2? */
+  int i;                      /* counter over sequences */
+  int *res1_per_apos;         /* [0..apos..alen1] number of residues in column apos of msa1 */
+  int sc;                     /* max score of full path (alignment) through dp mx */
+  int tb_sc;                  /* score of traceback, should equal sc */
+  int *one2two_map;           /* [0..a..alen1] the alignment, msa2 column that column apos1 in msa1 maps to */
+  int total_res = 0;          /* total number of residues in msa1 */
+  float coverage;             /* fraction of total_res that are within mapped msa2 columns from one2two_map, 
+			       * this is tb_sc / total_res */
+  int  total_cres1=0;         /* total number of residues in reference positions in msa1 */ 
+  int  covered_cres1 = 0;     /* number of residues in reference positions in msa1 that also appear in the corresponding
+			       * mapped column of msa2 
+			       */
+  int be_quiet = esl_opt_GetBoolean(go, "-q");
+  int *choices;
+  int i_choice;
+
+  /* contract check */
+  if(! (msa1->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in map_msas() msa1 (%s) not digitized.\n", esl_opt_GetArg(go, 1));
+  if(! (msa2->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in map_msas() msa2 (%s) not digitized.\n", esl_opt_GetArg(go, 2));
+  alen1 = msa1->alen;
+  alen2 = msa2->alen;
+  
+  /* Map msa1 (reference) columns to alignment positions */
+  rflen1 = rflen2 = 0;
+  if(msa1->rf != NULL) if((status = map_rfpos_to_apos(msa1, &rf2a_map1, &a2rf_map1, &rflen1)) != eslOK) goto ERROR;
+  if(msa2->rf != NULL) if((status = map_rfpos_to_apos(msa2, &rf2a_map2, &a2rf_map2, &rflen2)) != eslOK) goto ERROR;
+  if(! be_quiet) {
+    printf("# %-25s alignment length:              %d\n", esl_opt_GetArg(go, 1), alen1);
+    printf("# %-25s alignment length:              %d\n", esl_opt_GetArg(go, 2), alen2);
+  }
+  /* collect counts in one2two[i][j]: number of sequences for which residue aligned in msa1 non-gap column i
+   * is aligned in msa2 alignment column j.
+   */
+  ESL_ALLOC(seq1, sizeof(char) * (alen1+1));
+  ESL_ALLOC(seq2, sizeof(char) * (alen2+1));
+  ESL_ALLOC(one2two, sizeof(int *) * (alen1+1));
+  for(apos1 = 0; apos1 <= alen1; apos1++) { 
+    ESL_ALLOC(one2two[apos1], sizeof(int) * (alen2+1));
+    esl_vec_ISet(one2two[apos1], (alen2+1), 0);
+  }
+
+  total_res = 0;
+  for(i = 0; i < msa1->nseq; i++) { 
+    /* ensure raw (unaligned) seq i in the 2 msas is the same */
+    esl_abc_Textize(msa1->abc, msa1->ax[i], alen1, seq1); 
+    esl_abc_Textize(msa1->abc, msa2->ax[i], alen2, seq2); /* note: msa*1*->abc used on purpose, allows DNA/RNA to peacefully coexist in this func */
+    esl_strdealign(seq1, seq1, "-_.~", &len1);
+    esl_strdealign(seq2, seq2, "-_.~", &len2);
+
+    if(len1 != len2) { 
+      ESL_FAIL(eslEINVAL, errbuf, "unaligned seq number %d (msa1: %s, msa2: %s) differs in length %s (%" PRId64 ") and %s (%" PRId64 "), those files must contain identical raw seqs\n",
+	       i, msa1->sqname[i], msa2->sqname[i], esl_opt_GetArg(go, 1), len1, esl_opt_GetArg(go, 2), len2);
+    }
+    if(strncmp(seq1, seq2, len1) != 0)  ESL_FAIL(eslEINVAL, errbuf, "unaligned seq number %d differs between %s and %s, those files must contain identical raw seqs\n", i, esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2));
+    total_res += len1;
+    
+    apos1 = apos2 = 1;
+    while((apos1 <= alen1) || (apos2 <= alen2)) {
+      isgap1 = esl_abc_XIsGap(msa1->abc, msa1->ax[i][apos1]);
+      isgap2 = esl_abc_XIsGap(msa2->abc, msa2->ax[i][apos2]);
+      if      ( isgap1 &&  isgap2) { apos1++; apos2++; }
+      else if ( isgap1 && !isgap2) { apos1++;          }
+      else if (!isgap1 &&  isgap2) {          apos2++; }
+      else if ( msa1->ax[i][apos1] == msa2->ax[i][apos2]) { 
+	one2two[apos1++][apos2++]++;
+	/* two2one[apos2][apos1]++; */
+      }
+    }
+  }
+
+  /******************************************************************
+   * DP alignment of msa1 to msa2
+   * dp matrix: mx[apos1][apos2] apos1=1..msa->alen1, apos2=1..alen2 (apos1=0 || apos2=0 is invalid)
+   * mx[apos1][apos2] = score of maximal alignment for apos1=1..apos1, apos2'=1..apos2 INCLUDING
+   *                    apos1 and apos2. Score is number of residues from msa1 columns
+   *                    1..apos1 that exist in their respective aligned columns in msa2 (the growing
+   *                    maximally scoring alignment).
+   */
+
+  /******************************************************************
+   * initialization 
+   */
+  ESL_ALLOC(mx, sizeof(int *) * (alen1+1));
+  ESL_ALLOC(tb, sizeof(int *) * (alen1+1));
+  for(apos1 = 0; apos1 <= alen1; apos1++) { 
+    ESL_ALLOC(mx[apos1], sizeof(int) * (alen2+1));
+    ESL_ALLOC(tb[apos1], sizeof(int) * (alen2+1));
+    esl_vec_ISet(mx[apos1], (alen2+1), 0);
+    esl_vec_ISet(tb[apos1], (alen2+1), -2); /* -2 is a bogus value, if we see it during traceback, there's a problem */
+    tb[apos1][0] = HORZ; /* special case, if we hit apos2==0 and apos1 > 0, we have to do HORZ moves until apos1==1 */
+  }
+  esl_vec_ISet(tb[0], (alen2+1), VERT); /* special case, if we hit apos1==0 and apos2 > 0, we have to do VERT moves until apos2==1 */
+  tb[0][0] = -2; /* all alignments must end here */
+
+  ESL_ALLOC(res1_per_apos, sizeof(int) * (alen1+1));
+  esl_vec_ISet(res1_per_apos, (alen1+1), 0);
+  mx[0][0] = 0;
+  tb[0][0] = -1; /* last cell, special value */
+
+  /*****************************************************************
+   * recursion
+   */
+  ESL_ALLOC(choices, sizeof(int) * NCHOICES);
+  for(apos1 = 1; apos1 <= alen1; apos1++) {
+    for(apos2 = 1; apos2 <= alen2; apos2++) {
+      choices[DIAG] = mx[(apos1-1)][(apos2-1)] + one2two[apos1][apos2];
+      choices[VERT] = mx[ apos1   ][(apos2-1)];
+      choices[HORZ] = mx[(apos1-1)][ apos2   ];
+      i_choice  = esl_vec_IArgMax(choices, NCHOICES);
+      mx[apos1][apos2] = choices[i_choice];
+      tb[apos1][apos2] = i_choice; 
+      res1_per_apos[apos1] += one2two[apos1][apos2];
+      /*printf("mx[%3d][%3d]: %5d (%d)\n", apos1, apos2, mx[apos1][apos2], tb[apos1][apos2]);*/
+    }
+  }
+  free(choices);
+
+  total_cres1 = 0;
+  if(rf2a_map1 != NULL) { 
+    for(rfpos1 = 1; rfpos1 <= rflen1; rfpos1++) total_cres1 += res1_per_apos[rf2a_map1[rfpos1]];
+  }
+
+  /*****************************************************************
+   * traceback 
+   */
+  
+  sc = mx[alen1][alen2];
+  if(!be_quiet) {
+    /* printf("score %d\n", sc);*/
+    if(a2rf_map1 != NULL && a2rf_map2 != NULL) { 
+      printf("# %12s       %12s  %22s\n", "   msa 1   ", "   msa 2   ", "");
+      printf("# %12s       %12s  %22s\n", "------------", "------------", "");
+      printf("# %5s  %5s       %5s  %5s  %22s\n", "rfpos",  "apos",  "rfpos",  "apos",  " num common residues");
+      printf("# %5s  %5s       %5s  %5s  %22s\n", "-----", "-----", "-----", "-----", "---------------------");
+    }
+    else if(a2rf_map1 != NULL) { 
+      printf("# %12s        %5s  %22s\n", "   msa 1   ", "msa 2", "");
+      printf("# %12s        %5s  %22s\n", "------------", "-----", "");
+      printf("# %5s  %5s       %5s  %22s\n", "rfpos",  "apos",  "apos",  " num common residues");
+      printf("# %5s  %5s       %5s  %22s\n", "-----", "-----", "-----", "---------------------");
+    }
+    else if (a2rf_map2 != NULL) { 
+      printf("# %5s        %12s  %22s\n", "msa 1", "   msa 2   ", "");
+      printf("# %5s        %12s  %22s\n", "-----", "------------", "");
+      printf("# %5s        %5s  %5s  %22s\n", "apos",  "rfpos",  "apos",  " num common residues");
+      printf("# %5s        %5s  %5s  %22s\n", "-----", "-----", "-----", "---------------------");
+    }
+    else {
+      printf("# %5s        %5s  %22s\n", "msa 1", "msa 2", "");
+      printf("# %5s        %5s  %22s\n", "-----", "-----", "");
+      printf("# %5s        %5s  %22s\n", "apos",  "apos",  " num common residues");
+      printf("# %5s        %5s  %22s\n", "-----", "-----", "---------------------");
+    }
+  }
+
+  /* traceback, and build one2two_map[] */
+  apos1 = alen1;
+  apos2 = alen2;
+  tb_sc = 0;
+  covered_cres1 = 0;
+  ESL_ALLOC(one2two_map, sizeof(int) * (alen1+1));
+  esl_vec_ISet(one2two_map, (alen1+1), 0);
+  one2two_map[0] = -1; /* invalid */
+
+  while(tb[apos1][apos2] != -1) {
+    if(tb[apos1][apos2] == DIAG) { /* diagonal move */
+      rfpos1 = (a2rf_map1 == NULL) ? -1 : a2rf_map1[apos1];
+      rfpos2 = (a2rf_map2 == NULL) ? -1 : a2rf_map2[apos2];
+      if(!be_quiet) { 
+	if(a2rf_map1 != NULL && a2rf_map2 != NULL) { 
+	  if(rfpos1 == -1 && rfpos2 == -1) { 
+	    printf("  %5s  %5d  -->  %5s  %5d  %5d / %5d (%.4f)\n", "-",    apos1, "-",    apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); 
+	  }
+	  else if (rfpos1 == -1) { 
+	    printf("  %5s  %5d  -->  %5d  %5d  %5d / %5d (%.4f)\n", "-",    apos1, rfpos2, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); 
+	  }
+	  else if (rfpos2 == -1) { 
+	    printf("  %5d  %5d  -->  %5s  %5d  %5d / %5d (%.4f)\n", rfpos1, apos1, "-",    apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); 
+	  }
+	  else { 
+	    printf("  %5d  %5d  -->  %5d  %5d  %5d / %5d (%.4f)\n", rfpos1, apos1, rfpos2, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); 
+	  }
+	}	
+	else if(a2rf_map1 != NULL) { 
+	  if (rfpos1 == -1) { 
+	    printf("  %5s  %5d  -->  %5d  %5d / %5d (%.4f)\n", "-",   apos1, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); 
+	  }
+	  else { 
+	    printf("  %5d  %5d  -->  %5d  %5d / %5d (%.4f)\n", rfpos1, apos1, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); 
+	  }
+	}
+	else if (a2rf_map2 != NULL) { 
+	  if (rfpos2 == -1) { 
+	    printf("  %5d  -->  %5s  %5d  %5d / %5d (%.4f)\n", apos1, "-",    apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); 
+	  }
+	  else { 
+	    printf("  %5d  -->  %5d  %5d  %5d / %5d (%.4f)\n", apos1, rfpos2, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); 
+	  }
+	}
+	else {
+	  printf("  %5d  -->  %5d  %5d / %5d (%.4f)\n", apos1, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); 
+	}
+      }
+      tb_sc += one2two[apos1][apos2];
+      one2two_map[apos1] = apos2;
+      if(rfpos1 > 0) covered_cres1 += one2two[apos1][apos2]; /* apos1 is a rfpos */
+      apos1--; apos2--;
+    }
+    else if(tb[apos1][apos2] == VERT) { 
+      apos2--; /* vertical move */
+    }
+    else if(tb[apos1][apos2] == HORZ) { 
+      apos1--; /* horizontal move */
+    }
+    else if(tb[apos1][apos2] != -1) /* shouldn't happen */
+      ESL_FAIL(eslEINVAL, errbuf, "in dp traceback, tb[apos1: %d][apos2: %d] %d\n", apos1, apos2, tb[apos1][apos2]);
+  }
+  /* done DP code 
+   **********************************/
+
+  if(!be_quiet) printf("# Total trace back sc: %d\n", tb_sc);
+  if(tb_sc != sc) ESL_FAIL(eslEINVAL, errbuf, "in dp traceback, tb_sc (%d) != sc (%d)\n", tb_sc, sc);
+  coverage = (float) tb_sc / (float) total_res;
+  printf("# Coverage: %6d / %6d (%.4f)\n# Coverage is fraction of residues from %s in optimally mapped columns in %s\n", tb_sc, total_res, coverage, esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2));
+  if(total_cres1 > 0) printf("# RF coverage: %6d / %6d (%.4f)\n# RF coverage is fraction of non-gap RF residues from %s in optimally mapped columns in %s\n", covered_cres1, total_cres1, (float) covered_cres1 / (float) total_cres1, esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2));
+  /* print masks if nec */
+  if((status = map2masks(go, errbuf, alen1, alen2, a2rf_map1, a2rf_map2, rf2a_map1, rf2a_map2, rflen1, rflen2, one2two_map)) != eslOK) return status;
+
+  /* clean up and return */
+  for(apos1 = 0; apos1 <= alen1; apos1++) { 
+    free(mx[apos1]);
+    free(tb[apos1]);
+  }
+  free(mx);
+  free(tb);
+
+  for(apos1 = 0; apos1 <= alen1; apos1++) free(one2two[apos1]);
+  free(one2two);
+  free(res1_per_apos);
+  if(rf2a_map1 != NULL) free(rf2a_map1);
+  if(rf2a_map2 != NULL) free(rf2a_map2);
+  if(a2rf_map1 != NULL) free(a2rf_map1);
+  if(a2rf_map2 != NULL) free(a2rf_map2);
+
+  free(seq1);
+  free(seq2);
+  *ret_msa1_to_msa2_map = one2two_map;
+  return eslOK;
+  
+ ERROR: 
+  return status;
+}
+
+
+/* map_sub_msas
+ *                   
+ * msa1 and msa2 contain the same named sequences, msa1 contains a superset 
+ * of the columns in msa2. Determine which of the msa1 columns the msa2
+ * columns correspond to.
+ */
+static int
+map_sub_msas(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa1, ESL_MSA *msa2, char **ret_msa1_to_msa2_mask)
+{
+  int status;
+  int  apos1, apos2;          /* counters over alignment position in msa1, msa2 respectively */
+  int i;
+  int *msa1_to_msa2_map;    /* [0..apos1..msa1->alen] msa2 alignment position that apos1 corresponds to */
+  char *mask;
+
+  /* contract check */
+  if(! (msa1->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas() msa1 (%s) not digitized.\n", esl_opt_GetArg(go, 1));
+  if(! (msa2->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas() msa2 (%s) not digitized.\n", esl_opt_GetString(go, "--submap"));
+  if(msa1->alen <= msa2->alen) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas() alignment length for msa1 (%" PRId64 "d) <= length for msa2 (%" PRId64 ")\n", msa1->alen, msa2->alen);
+  
+  ESL_ALLOC(mask, sizeof(char) * (msa1->alen+1));
+  for(apos1 = 0; apos1 < msa1->alen; apos1++) mask[apos1] = '0';
+  mask[msa1->alen] = '\0';
+
+  ESL_ALLOC(msa1_to_msa2_map, sizeof(int) * (msa1->alen+1));
+  esl_vec_ISet(msa1_to_msa2_map, (msa1->alen+1), -1);
+
+  /* both alignments must have same 'named' sequences in same order */
+  if(msa1->nseq != msa2->nseq) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas() msa1 has %d sequences, msa2 has %d sequences\n", msa1->nseq, msa2->nseq);
+  for(i = 0; i < msa1->nseq; i++) { 
+    if(strcmp(msa1->sqname[i], msa2->sqname[i]) != 0) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas() msa1 seq %d is named %s, msa2 seq %d is named %s\n", i, msa1->sqname[i], i, msa2->sqname[i]);
+  }
+
+  apos1 = 1;
+  apos2 = 1;
+  while((apos2 <= msa2->alen) || (apos1 <= msa1->alen)) { /* determine which apos1 (alignment column in msa1), apos2 (alignment column in msa2) corresponds to */
+    for(i = 0; i < msa1->nseq; i++) { 
+      if(msa1->ax[i][apos1] != msa2->ax[i][apos2]) { 
+	apos1++; 
+	break; /* try next apos1 */ 
+      }
+    }	
+    if(i == msa1->nseq) { /* found a match */
+      msa1_to_msa2_map[apos1] = apos2;
+      mask[(apos1-1)] = '1';
+      apos1++;
+      apos2++;
+    }
+  }
+  if((apos1 != (msa1->alen+1)) || (apos2 != (msa2->alen+1))) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas(), failure mapping alignments, end of loop apos1-1 = %d (msa1->alen: %" PRId64 ") and apos2-1 = %d (msa2->alen: %" PRId64 ")\n", apos1-1, msa1->alen, apos2-1, msa2->alen);
+
+  free(msa1_to_msa2_map);
+  *ret_msa1_to_msa2_mask = mask;
+  return eslOK;
+  
+ ERROR: 
+  return status;
+}
+
+/* map_rfpos_to_apos
+ *                   
+ * Given an MSA, determine the alignment position each
+ * reference position refers to. 
+ */
+static int map_rfpos_to_apos(ESL_MSA *msa, int **ret_rf2a_map, int **ret_a2rf_map, int *ret_rflen)
+{
+  int status;
+  int rflen = 0;
+  int *rf2a_map = NULL;
+  int *a2rf_map = NULL;
+  int rfpos = 0;
+  int apos = 0;
+  /* contract check */
+  if(msa->rf == NULL) { status = eslEINVAL; goto ERROR; }
+
+  /* count reference columns */
+  for(apos = 1; apos <= msa->alen; apos++)
+    if((! esl_abc_CIsGap(msa->abc, msa->rf[(apos-1)])) && 
+       (! esl_abc_CIsMissing(msa->abc, msa->rf[(apos-1)])) && 
+       (! esl_abc_CIsNonresidue(msa->abc, msa->rf[(apos-1)]))) rflen++;
+
+  /* build maps */
+  ESL_ALLOC(rf2a_map, sizeof(int) * (rflen+1));
+  ESL_ALLOC(a2rf_map, sizeof(int) * (msa->alen+1));
+  esl_vec_ISet(a2rf_map, msa->alen+1, -1);
+  rf2a_map[0] = -1;
+  for(apos = 1; apos <= msa->alen; apos++) { 
+    if((! esl_abc_CIsGap(msa->abc, msa->rf[(apos-1)])) && 
+       (! esl_abc_CIsMissing(msa->abc, msa->rf[(apos-1)])) && 
+       (! esl_abc_CIsNonresidue(msa->abc, msa->rf[(apos-1)]))) { 
+      rf2a_map[++rfpos] = apos;
+      a2rf_map[apos]   = rfpos;
+    }
+    /* else a2rf_map[apos] remains -1 as it was initialized */
+  }
+  
+
+  if(ret_rf2a_map != NULL) *ret_rf2a_map = rf2a_map;
+  else                    free(rf2a_map);
+  if(ret_a2rf_map != NULL) *ret_a2rf_map = a2rf_map;
+  else                    free(a2rf_map);
+  if(ret_rflen != NULL) *ret_rflen    = rflen;
+  return eslOK;
+
+ ERROR:
+  if(rf2a_map != NULL) free(rf2a_map);
+  if(a2rf_map != NULL) free(a2rf_map);
+  return status;
+}
+
+/* map2masks
+ *                   
+ * Given a map of alignment columns in msa1 to alignment columns
+ * to msa2, construct and output masks as per command-line options.
+ * 
+ * Args:    msa1_to_msa2_map: [1..apos..msa1->alen]: '0': msa1 apos maps to a gap in msa2 (doesn't map to any column in msa2)
+ *                                                   'x': msa1 apos maps to posn x in msa2 (x>0)
+ */
+static int
+map2masks(const ESL_GETOPTS *go, char *errbuf, int alen1, int alen2, int *a2rf_map1, int *a2rf_map2, int *rf2a_map1, int *rf2a_map2, int rflen1, int rflen2, int *msa1_to_msa2_map)
+{
+  int status;
+  int apos1, apos2;           /* counters over alignment position in msa1, msa2 respectively */
+  int rfpos1, rfpos2;         /* counters over reference positions */
+  int num_ones;               /* number of 1s in current mask */
+  int num_zeroes;             /* number of 0s in current mask */
+  FILE *fp;
+  char *mask = NULL;
+
+  if(esl_opt_GetString(go, "--mask-a2a")) { 
+    if ((fp = fopen(esl_opt_GetString(go, "--mask-a2a"), "w")) == NULL) 
+      ESL_FAIL(eslFAIL, errbuf, "Failed to open --mask-a2a mask output file %s", esl_opt_GetString(go, "--mask-a2a"));
+    /* construct mask as follows:
+     * mask[0..apos1..alen1-1] = '1' if column apos1+1 maps to an alignment column of msa2 
+     *                         = '0' if column apos1+1 maps to a gap in msa2 (doesn't map to any column in msa2) 
+     */
+    ESL_ALLOC(mask, sizeof(char) * (alen1+1));
+    num_ones = num_zeroes = 0;
+    for(apos1 = 1; apos1 <= alen1; apos1++) { 
+      if(msa1_to_msa2_map[apos1] == 0) { mask[(apos1-1)] = '0'; num_zeroes++; }
+      else                             { mask[(apos1-1)] = '1'; num_ones++; }
+    }
+    mask[alen1] = '\0';
+    fprintf(fp, "%s\n", mask);
+    free(mask);
+    fclose(fp);
+    printf("# Mask of 1/0s with 1 indicating aln column in %s maps to aln column in %s saved to file %s.\n# (Length: %d; '1's: %d; '0's: %d)\n", esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2), esl_opt_GetString(go, "--mask-a2a"), (num_ones+num_zeroes), num_ones, num_zeroes);
+  }
+
+  if(esl_opt_GetString(go, "--mask-a2rf")) { 
+    if (a2rf_map2 == NULL) ESL_FAIL(eslFAIL, errbuf, "with --mask-a2rf, <msafile2> %s must have #=GC RF annotation, but it doesn't.", esl_opt_GetArg(go, 2));
+    if ((fp = fopen(esl_opt_GetString(go, "--mask-a2rf"), "w")) == NULL) 
+      ESL_FAIL(eslFAIL, errbuf, "Failed to open --mask-a2rf mask output file %s\n", esl_opt_GetString(go, "--mask-a2rf"));
+    /* construct mask as follows:
+     * mask[0..apos1..alen1-1] = '1' if column apos1+1 maps to a reference column (non-gap in RF) of msa2 
+     *                         = '0' if column apos1+1 maps to a gap (doesn't map to any column in msa2) or an insert (gap in RF) in msa2 
+     */
+    ESL_ALLOC(mask, sizeof(char) * (alen1+1));
+    num_ones = num_zeroes = 0;
+    for(apos1 = 1; apos1 <= alen1; apos1++) { 
+      apos2 = msa1_to_msa2_map[apos1];
+      if(apos2 == 0) { mask[(apos1-1)] = '0'; num_zeroes++; } /* apos1 doesn't map to any column in msa2 */
+      else { 
+	rfpos2 = a2rf_map2[apos2];
+	if(rfpos2 <= 0) { mask[(apos1-1)] = '0'; num_zeroes++; } /* apos1 maps to a gap RF (insert) in msa2 */
+	else           { mask[(apos1-1)] = '1'; num_ones++; }   /* apos1 maps to a non-gap RF (reference) column in msa2 */
+      }
+    }
+    mask[alen1] = '\0';
+    fprintf(fp, "%s\n", mask);
+    free(mask);
+    fclose(fp);
+    printf("# Mask of 1/0s with 1 indicating aln column in %s maps to reference (non-gap RF) column in %s saved to file %s.\n# (Length: %d; '1's: %d; '0's: %d)\n", esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2), esl_opt_GetString(go, "--mask-a2rf"), (num_ones+num_zeroes), num_ones, num_zeroes);
+  }
+
+  if(esl_opt_GetString(go, "--mask-rf2a")) { 
+    if (a2rf_map1 == NULL) ESL_FAIL(eslFAIL, errbuf, "with --mask-rf2a, <msafile1> %s must have #=GC RF annotation, but it doesn't.", esl_opt_GetArg(go, 1));
+    if ((fp = fopen(esl_opt_GetString(go, "--mask-rf2a"), "w")) == NULL) 
+      ESL_FAIL(eslFAIL, errbuf, "Failed to open --mask-rf2a mask output file %s\n", esl_opt_GetString(go, "--mask-rf2a"));
+    /* construct mask as follows:
+     * mask[0..rfpos1..rflen-1] = '1' if non-gap RF msa1 column rfpos1+1 maps to an alignment column of msa2 
+     *                        = '0' if non-gap RF msa1 column rfpos1+1 maps to a gap in msa2 (doesn't map to any column in msa2)
+     */
+    ESL_ALLOC(mask, sizeof(char) * (rflen1+1));
+    num_ones = num_zeroes = 0;
+    for(rfpos1 = 1; rfpos1 <= rflen1; rfpos1++) { 
+      apos1 = rf2a_map1[rfpos1];
+      apos2 = msa1_to_msa2_map[apos1];
+      if(apos2 == 0) { mask[(rfpos1-1)] = '0'; num_zeroes++; } 
+      else           { mask[(rfpos1-1)] = '1'; num_ones++; } 
+    }
+    mask[rflen1] = '\0';
+    fprintf(fp, "%s\n", mask);
+    free(mask);
+    fclose(fp);
+    printf("# Mask of 1/0s with 1 indicating reference (non-gap RF) column in %s maps to aln column in %s saved to file %s.\n# (Length: %d; '1's: %d; '0's: %d)\n", esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2), esl_opt_GetString(go, "--mask-rf2a"), (num_ones+num_zeroes), num_ones, num_zeroes);
+  }
+
+  if(esl_opt_GetString(go, "--mask-rf2rf")) { 
+    if (a2rf_map1 == NULL) ESL_FAIL(eslFAIL, errbuf, "with --mask-rf2rf, <msafile1> %s must have #=GC RF annotation, but it doesn't.", esl_opt_GetArg(go, 1));
+    if (a2rf_map2 == NULL) ESL_FAIL(eslFAIL, errbuf, "with --mask-rf2rf, <msafile2> %s must have #=GC RF annotation, but it doesn't.", esl_opt_GetArg(go, 2));
+    if ((fp = fopen(esl_opt_GetString(go, "--mask-rf2rf"), "w")) == NULL) 
+      ESL_FAIL(eslFAIL, errbuf, "Failed to open --mask-rf2rf mask output file %s\n", esl_opt_GetString(go, "--mask-rf2rf"));
+    /* construct mask as follows:
+     * mask[0..apos1..alen-1] = '1' if column apos1+1 maps to a reference column (non-gap in RF) of msa2 
+     *                        = '0' if column apos1+1 maps to a gap (doesn't map to any column in msa2) or an insert (gap in RF) in msa2 
+     */
+    ESL_ALLOC(mask, sizeof(char) * (alen1+1));
+    num_ones = num_zeroes = 0;
+    for(rfpos1 = 1; rfpos1 <= rflen1; rfpos1++) { 
+      apos1 = rf2a_map1[rfpos1];
+      apos2 = msa1_to_msa2_map[apos1];
+      if(apos2 == 0) { mask[(rfpos1-1)] = '0'; num_zeroes++; } /* rfpos1 doesn't map to any column in msa2 */
+      else { 
+	rfpos2 = a2rf_map2[apos2];
+	if(rfpos2 <= 0) { mask[(rfpos1-1)] = '0'; num_zeroes++; } /* rfpos1 maps to a gap RF (insert) in msa2 */
+	else            { mask[(rfpos1-1)] = '1'; num_ones++; }   /* rfpos1 maps to a non-gap RF (reference) column in msa2 */
+      }
+    }
+    mask[rflen1] = '\0';
+    fprintf(fp, "%s\n", mask);
+    free(mask);
+    fclose(fp);
+    printf("# Mask of 1/0s with 1 indicating reference (non-gap RF) column in %s maps to reference (non-gap RF) column in %s saved to file %s.\n# (Length: %d; '1's: %d; '0's: %d)\n", esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2), esl_opt_GetString(go, "--mask-rf2rf"), (num_ones+num_zeroes), num_ones, num_zeroes);
+  }
+  return eslOK;
+
+ ERROR: 
+  ESL_FAIL(eslEMEM, errbuf, "map2masks(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
diff --git a/miniapps/esl-alimap.itest.pl b/miniapps/esl-alimap.itest.pl
new file mode 100755
index 0000000..19e4363
--- /dev/null
+++ b/miniapps/esl-alimap.itest.pl
@@ -0,0 +1,143 @@
+#! /usr/bin/perl
+
+# Integrated test of the esl-alimap miniapp.
+#
+# Usage:     ./esl-alimap.itest.pl <esl-alimap binary> <tmpfile prefix>
+# Example:   ./esl-alimap.itest.pl ./esl-alimap        foo
+#
+# EPN, Tue Feb  2 13:19:44 2010
+
+$eslalimap= shift;
+$tmppfx      = shift;
+
+if (! -x "$eslalimap") { die "FAIL: didn't find esl-alimap binary $eslalimap"; }
+
+open(ALIFILE, ">$tmppfx.1") || die "FAIL: couldn't open $tmppfx.1 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+simpex-17          --AGA-CUUCGG---GCUCG-UAACAG
+#=GR simpex-17 PP  ..885.*****9...9****.******
+simpex-39          aaAAUACGUCGGCUG-AAUCACCAGUA
+#=GR simpex-39 PP  ***************.67776899999
+simpex-82          --ACGUUUUG-GAACGGG-U-CCA-CC
+#=GR simpex-82 PP  ..****9998.88**888.5.898.9*
+#=GC SS_cons       ..::<<<____>->>-<<-<.___>>>
+#=GC RF            ..AAgaCUUCGGAucgggCg.AcAccc
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.2") || die "FAIL: couldn't open $tmppfx.2 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+simpex-17          ---AGACUUCGGG---CUCGUAACAG
+#=GR simpex-17 PP  ...69*****775...4466777888
+simpex-39          aaAAUACGUCGGCUGAAUCACCAGUA
+#=GR simpex-39 PP  **************************
+simpex-82          --ACGUUUUG-GAACGGGUC-C-ACC
+#=GR simpex-82 PP  ..99998886.777755544.2.358
+#=GC SS_cons       ..::::::::::::::::::::::::
+#=GC RF            ..AAgACUUCGGAucggGCaAcAuUc
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.3") || die "FAIL: couldn't open $tmppfx.2 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+simpex-17          ---AGACUUCGGG---CUCGUAACAG
+#=GR simpex-17 PP  ...69*****775...4466777888
+simpex-39          aaAAUACGUCGGCUGAAUCACCAGUA
+#=GR simpex-39 PP  **************************
+simpex-82          --ACGUUUUG-GAACGGGUC-C-ACC
+#=GR simpex-82 PP  ..99998886.777755544.2.358
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.4") || die "FAIL: couldn't open $tmppfx.3 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+test1  ..AA..AA..AAA
+test2  ..CC.gCC..CCC
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.5") || die "FAIL: couldn't open $tmppfx.4 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+test1  AAAAAAA
+test2  CCCCCCC
+//
+EOF
+close ALIFILE;
+
+
+open(MASKFILE, ">$tmppfx.mask") || die "FAIL: couldn't open $tmppfx.mask for writing alifile";
+print MASKFILE << "EOF";
+110111011011101110011101
+EOF
+close MASKFILE;
+
+$output = `$eslalimap -h`;
+if ($? != 0)                                         { die "FAIL: esl-alimap failed unexpectedly"; }
+if ($output !~ /Usage: esl-alimap/)                { die "FAIL: help output not right"; }
+
+$output = `$eslalimap $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                              { die "FAIL: esl-alimap failed unexpectedly"; }
+if ($output !~ /20     23  -->     20     22      3 \/     3 \(1.0\d+\)/) { die "FAIL: alignments mapped incorrectly"; }
+if ($output !~ /\# Coverage:     56 \/     67 \(0.83\d+\)/)                { die "FAIL: alignments mapped incorrectly"; }
+
+$output = `$eslalimap --dna $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                              { die "FAIL: esl-alimap failed unexpectedly"; }
+if ($output !~ /20     23  -->     20     22      3 \/     3 \(1.0\d+\)/) { die "FAIL: alignments mapped incorrectly"; }
+if ($output !~ /\# Coverage:     56 \/     67 \(0.83\d+\)/)                { die "FAIL: alignments mapped incorrectly"; }
+
+$output = `$eslalimap $tmppfx.1 $tmppfx.3 2>&1`;
+if ($? != 0)                                                       { die "FAIL: esl-alimap failed unexpectedly"; }
+if ($output !~ /20     23  -->     22      3 \/     3 \(1.0\d+\)/) { die "FAIL: alignments mapped incorrectly"; }
+if ($output !~ /\# Coverage:     56 \/     67 \(0.83\d+\)/)         { die "FAIL: alignments mapped incorrectly"; }
+
+system("$eslalimap --mask-a2a $tmppfx.a2a --mask-a2rf $tmppfx.a2rf --mask-rf2a $tmppfx.rf2a --mask-rf2rf $tmppfx.rf2rf $tmppfx.1 $tmppfx.2 > /dev/null");
+if ($? != 0)                                      { die "FAIL: esl-alimap failed unexpectedly"; }
+$output = `cat $tmppfx.a2a`;
+if ($output !~ /111111111111111111011111111/)     { die "FAIL: alignments mapped incorrectly."; }
+
+$output = `cat $tmppfx.a2rf`;
+if ($output !~ /001111111111111111011111111/)     { die "FAIL: alignments mapped incorrectly."; }
+
+$output = `cat $tmppfx.rf2a`;
+if ($output !~ /111111111111111101111111/)     { die "FAIL: alignments mapped incorrectly."; }
+
+$output = `cat $tmppfx.rf2rf`;
+if ($output !~ /111111111111111101111111/)     { die "FAIL: alignments mapped incorrectly."; }
+
+system("$eslalimap --rna --submap $tmppfx.submask $tmppfx.4 $tmppfx.5 > /dev/null");
+if ($? != 0)                                      { die "FAIL: esl-alimap failed unexpectedly"; }
+$output = `cat $tmppfx.submask`;
+if ($output !~ /0011001100111/) { die "FAIL: alignments mapped incorrectly"; }
+
+print "ok\n"; 
+unlink "$tmppfx.1";
+unlink "$tmppfx.2";
+unlink "$tmppfx.3";
+unlink "$tmppfx.4";
+unlink "$tmppfx.5";
+unlink "$tmppfx.a2a";
+unlink "$tmppfx.a2rf";
+unlink "$tmppfx.rf2a";
+unlink "$tmppfx.rf2rf";
+unlink "$tmppfx.submask";
+unlink "$tmppfx.mask";
+exit 0;
diff --git a/miniapps/esl-alimap.man b/miniapps/esl-alimap.man
new file mode 100644
index 0000000..37a6871
--- /dev/null
+++ b/miniapps/esl-alimap.man
@@ -0,0 +1,193 @@
+.TH "esl-alimap" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps"
+
+.SH NAME
+.TP 
+esl-alimap - map two alignments to each other
+
+.SH SYNOPSIS
+.B esl-alimap
+.I [options]
+.I msafile1
+.I msafile2
+
+.SH DESCRIPTION
+
+.I esl-alimap
+is a highly specialized application that determines the optimal
+alignment mapping of columns between two alignments of the same
+sequences. An alignment mapping defines for each column in alignment 1
+a matching column in alignment 2. The number of residues in the
+aligned sequences that are in common between the two matched columns
+are considered 'shared' by those two columns.
+
+For example, if the nth residue of sequence i occurs in alignment 1
+column x and alignment 2 column y, then only a mapping of alignment
+1 and 2 that includes column x mapping to column y would correctly map
+and share the residue. 
+
+The optimal mapping of the two alignments is the mapping which
+maximizes the sum of shared residues between all pairs of matching
+columns. The fraction of total residues that are shared is reported as
+the coverage in the 
+.B esl-alimap
+output.
+
+Only the first alignments in 
+.I msafile1 
+and
+.I msafile2
+will be mapped to each other. If the files contain more than one
+alignment, all alignments after the first will be ignored.
+
+The two alignments (one from each file) must contain exactly the same
+sequences (if they were unaligned, they'd be identical) in precisely
+the same order. They must also be in Stockholm format.
+
+The output of 
+.B esl-alimap
+differs depending on whether one or both of the alignments 
+contain reference (#=GC RF) annotation. If so, the
+coverage for residues from nongap RF positions will be reported
+separately from the total coverage.
+
+.B esl-alimap
+uses a dynamic programming algorithm to compute the optimal
+mapping. The algorithm is similar to the Needleman-Wunsch-Sellers
+algorithm but the scores used at each step of the recursion are not
+residue-residue comparison scores but rather the number of residues
+shared between two columns. 
+
+The
+.BI --mask-a2a " <f>",
+.BI --mask-a2rf " <f>",
+.BI --mask-rf2a " <f>",
+and
+.BI --mask-rf2rf " <f>"
+options create 'mask' files that pertain to the optimal mapping in
+slightly different ways. A mask file consists of a single line, of
+only '0' and '1' characters. These denote which positions of the
+alignment from 
+.B msafile1
+map to positions of the alignment from 
+.B msafile2
+as described below for each of the four respective masking options.
+These masks can be used to extract only those columns of the 
+.B msafile1
+alignment 
+that optimally map to columns of the 
+.B msafile2
+alignment
+using the 
+.B esl-alimask
+miniapp. To extract the corresponding set of columns 
+from 
+.I msafile2
+(that optimally map to columns of the alignment from
+.B msafile1),
+it is necessary to rerun the program with the order of the two 
+msafiles reversed, save new masks, and use
+.B esl-alimask
+again.
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options.
+
+.TP
+.B -q
+Be quiet; don't print information the optimal mapping of each column,
+only report coverage and potentially save masks to optional output files. 
+
+.TP
+.BI --mask-a2a " <f>"
+Save a mask of '0's and '1's to file
+.I <f>.
+A '1' at position x means that position x of the alignment from
+.B msafile1
+maps to an alignment position in the alignment from
+.B msafile2
+in the optimal map.
+
+.TP
+.BI --mask-a2rf " <f>"
+Save a mask of '0's and '1's to file
+.I <f>.
+A '1' at position x means that position x of the alignment from
+.B msafile1
+maps to a nongap RF position in the alignment from 
+.B msafile2
+in the optimal map.
+
+.TP
+.BI --mask-rf2a " <f>"
+Save a mask of '0's and '1's to file
+.I <f>.
+A '1' at position x means that nongap RF position x of the alignment from
+.B msafile1
+maps to an alignment position in the alignment from 
+.B msafile2
+in the optimal map.
+
+.TP
+.BI --mask-rf2rf " <f>"
+Save a mask of '0's and '1's to file
+.I <f>.
+A '1' at position x means that nongap RF position x of the alignment from
+.B msafile1
+maps to a nongap RF position in the alignment from 
+.B msafile2
+in the optimal map.
+
+.TP
+.BI --submap " <f>"
+Specify that all of the columns from the alignment from 
+.B msafile1
+exist identically (contain the same residues from all sequences) in
+the alignment from 
+.B msafile2. 
+This makes the task of mapping trivial.
+However, not all columns of 
+.B msafile1 
+must exist in 
+.B msafile2.
+Save the mask to file
+.I <f>.
+A '1' at position x of the mask means that position x of the alignment from
+.B msafile1
+is the same as position y of
+.B msafile2,
+where y is the number of '1's that occur at positions <= x in the mask.
+
+.TP
+.B --amino
+Assert that 
+.I trusted_file
+and 
+.I test_file
+contain protein sequences. 
+
+.TP 
+.B --dna
+Assert that 
+.I trusted_file
+and 
+.I test_file
+contain DNA sequences. 
+
+.TP 
+.B --rna
+Assert that the 
+.I trusted_file
+and 
+.I test_file
+contain RNA sequences. 
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-alimask.c b/miniapps/esl-alimask.c
new file mode 100644
index 0000000..4daf0de
--- /dev/null
+++ b/miniapps/esl-alimask.c
@@ -0,0 +1,1212 @@
+/* Remove columns from a multiple sequence alignment.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile2.h"
+#include "esl_regexp.h"
+#include "esl_stopwatch.h"
+#include "esl_vectorops.h"
+
+static char banner[] = "remove columns from a multiple sequence alignment";
+static char usage1[] = "[options] <msafile> <maskfile>   (use mask from maskfile)";
+static char usage2[] = "[options] -t <msafile> <coords>  (truncate alignment to coords)";
+static char usage3[] = "[options] -g <msafile>           (use gap frequencies in aln)";
+static char usage4[] = "[options] -p <msafile>           (use post probs (PP) in aln)";
+static char usage5[] = "[options] --rf-is-mask <msafile> (use #=GC RF in aln as mask)";
+
+static int read_mask_file(char *filename, char *errbuf, int **ret_useme, int *ret_mlen);
+static int map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int **i_am_rf, int **ret_rf2a_map, int *ret_rflen);
+static int expand_rf_useme_to_alen(int *useme_rf, int *rf2a_map, int rflen, int alen, char *errbuf, int *useme_a);
+static int count_gaps_in_msa(ESL_MSA *msa, ESL_ALPHABET *abc, int *countme, char *errbuf, double **ret_gap_ct);
+static int count_postprobs_in_msa(ESL_MSA *msa, ESL_ALPHABET *abc, int *countme, char *errbuf, double ***ret_pp_ct);
+static int mask_based_on_gapfreq(double *gap_ct, int64_t alen, int nseq, float gapthresh, int *i_am_eligible, char *errbuf, int **ret_useme);
+static int get_pp_idx(ESL_ALPHABET *abc, char ppchar);
+static int mask_based_on_postprobs(double **pp_ct, int64_t alen, int nseq, float pthresh, float pfract, int do_pavg, float pavg_min, int do_ppcons, float ppcons_min, char *pp_cons, ESL_ALPHABET *abc, int *i_am_eligible, int allgapok, char *errbuf, int **ret_useme);
+static int output_mask(char *filename, int *useme, int *i_am_eligible, int64_t alen, char *errbuf);
+static int determine_nkept_rf(int *useme, int *i_am_rf, int64_t len);
+static int parse_coord_string(const char *cstring, uint32_t *ret_start, uint32_t *ret_end);
+
+static ESL_OPTIONS options[] = {
+  /* name          type            default env   range      togs  reqs  incomp          help                                                   docgroup */
+  { "-h",          eslARG_NONE,    FALSE,  NULL, NULL,      NULL, NULL, NULL,           "help; show brief info on version and usage",                   1 },
+  { "-o",          eslARG_OUTFILE, NULL,   NULL, NULL,      NULL, NULL, NULL,           "output the final alignment to file <f>, not stdout",           1 },
+  { "-q",          eslARG_NONE,    FALSE,  NULL, NULL,      NULL, "-o", NULL,           "be quiet; w/-o, don't print mask info to stdout",              1 },
+  { "--small",     eslARG_NONE,    FALSE,  NULL, NULL,      NULL, NULL, NULL,           "use minimal RAM (RAM usage will be independent of aln size)",  1 },
+  { "--informat",  eslARG_STRING,  FALSE,  NULL, NULL,      NULL, NULL, NULL,           "specify that input file is in format <s>",                     1 },
+  { "--outformat", eslARG_STRING,  FALSE,  NULL, NULL,      NULL, NULL, NULL,           "specify that output aln be format <s>",                        1 },
+  { "--fmask-rf",  eslARG_OUTFILE, NULL,   NULL, NULL,      NULL, NULL, NULL,           "output final mask of non-gap RF len to file <f>",              1 },
+  { "--fmask-all", eslARG_OUTFILE, NULL,   NULL, NULL,      NULL, NULL, NULL,           "output final mask of full aln len to file <f>",                1 },
+
+  { "--amino",     eslARG_NONE,    FALSE,  NULL, NULL,      NULL, NULL, "--dna,--rna",  "<msafile> contains protein alignments",                        2 },
+  { "--dna",       eslARG_NONE,    FALSE,  NULL, NULL,      NULL, NULL, "--amino,--rna","<msafile> contains DNA alignments",                            2 },
+  { "--rna",       eslARG_NONE,    FALSE,  NULL, NULL,      NULL, NULL, "--amino,--dna","<msafile> contains RNA alignments",                            2 },
+
+  { "--t-rf",      eslARG_NONE,    NULL,   NULL, NULL,      NULL, "-t", NULL,           "<coords> string corresponds to non-gap RF positions",          3 },
+  { "--t-rmins",   eslARG_NONE,    NULL,   NULL, NULL,      NULL, "-t", NULL,           "remove all gap RF positions within <coords>",                  3 },
+
+  { "--gapthresh", eslARG_REAL,    "0.5",  NULL, "0<=x<=1", NULL, "-g", NULL,           "only keep columns with <= <x> fraction of gaps in them",       4 },
+  { "--gmask-rf",  eslARG_OUTFILE, NULL,   NULL, NULL,      NULL, "-g", NULL,           "output gap-based 0/1 mask of non-gap RF len to file <f>",      4 },
+  { "--gmask-all", eslARG_OUTFILE, NULL,   NULL, NULL,      NULL, "-g", NULL,           "output gap-based 0/1 mask of   full aln len to file <f>",      4 },
+
+  { "--pfract",    eslARG_REAL,    "0.95", NULL, "0<=x<=1", NULL, "-p", NULL,           "keep cols w/<x> fraction of seqs w/PP >= --pthresh",           5 },
+  { "--pthresh",   eslARG_REAL,    "0.95", NULL, "0<=x<=1", NULL, "-p", NULL,           "set post prob threshold for --pfract as <x>",                  5 },
+  { "--pavg",      eslARG_REAL,    NULL,   NULL, "0<=x<=1", NULL, "-p", "--pfract,--pthresh",        "keep cols with average post prob >= <x>",         5 },
+  { "--ppcons",    eslARG_REAL,    NULL,   NULL, "0<=x<=1", NULL, "-p", "--keepins,--pavg,--pfract,--pthresh", "keep cols with PP_cons value >= <x>",   5 },
+  { "--pallgapok", eslARG_NONE,    NULL,   NULL, FALSE,     NULL, "-p", NULL,           "keep 100% gap columns (by default, they're removed w/-p)",     5 },
+  { "--pmask-rf",  eslARG_OUTFILE, NULL,   NULL, NULL,      NULL, "-p", NULL,           "output PP-based 0/1 mask of non-gap RF len to file <f>",       5 },
+  { "--pmask-all", eslARG_OUTFILE, NULL,   NULL, NULL,      NULL, "-p", NULL,           "output PP-based 0/1 mask of   full aln len to file <f>",       5 },
+
+  { "--keepins",   eslARG_NONE,    FALSE,  NULL, NULL,      NULL, NULL, NULL,           "if msa has RF annotation, allow gap-RF columns to possibly survive",6 },
+
+
+  /* undocumented as options, because they're documented as alternative invocations: */
+  { "-t",         eslARG_NONE,     FALSE,  NULL, NULL,      NULL, NULL, "-g,-p,--rf-is-mask", "", 99 },
+  { "-g",         eslARG_NONE,     FALSE,  NULL, NULL,      NULL, NULL, NULL,            "mask based on gap frequency in the alignment", 99 },
+  { "-p",         eslARG_NONE,     FALSE,  NULL, NULL,      NULL, NULL, NULL,            "mask based on posterior probability annotation in the alignment", 99 },
+  { "--rf-is-mask",    eslARG_NONE,    FALSE,  NULL, NULL,      NULL, NULL, "-t,-g,-p,--keepins","remove a column if and only if it is a gap in the RF annotation", 99 },
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go      = NULL;	               /* application configuration       */
+  ESL_ALPHABET *abc     = NULL;      	       /* biological alphabet             */
+  char         *alifile = NULL;	               /* alignment file name             */
+  int           infmt   = eslMSAFILE_UNKNOWN;  /* format code for alifile         */
+  int           outfmt  = eslMSAFILE_UNKNOWN;  /* format code for output ali      */
+  ESL_MSAFILE  *afp     = NULL;	               /* open alignment file  normal version           */
+  ESL_MSAFILE2 *afp2    = NULL;		       /* open alignment file: legacy small-mem version */
+  FILE         *ofp;		               /* output file (default is stdout) */
+  ESL_MSA      *msa     = NULL;	               /* one multiple sequence alignment */
+  int           status;		               /* easel return code               */
+  int           do_rfonly = FALSE;             /* TRUE if we'll automatically remove all gap RF columns */
+  int           nseq = 0;                      /* num seqs in alignment */
+  char          errbuf[eslERRBUFSIZE];         /* buffer for error messages */
+  int           rflen = 0;                     /* non-gap RF length */
+  int           nkept = 0;                     /* number of columns not removed for current mask */
+  int           nkept_rf = 0;                  /* number of non-gap RF columns not removed for current mask */
+  int           be_verbose = FALSE;            /* will we print info on masking to stdout? */
+  int           apos = 0;                      /* alignment position */
+  int          *i_am_rf = NULL;                /* [0..i..msa->alen-1]: TRUE if pos i is non-gap RF posn, if msa->rf == NULL remains NULL */
+  int          *i_am_eligible = NULL;          /* [0..i..msa->alen-1]: TRUE if we'll consider keeping posn i in our final masks, FALSE if not,
+						* used to automatically remove all non-gap RF columns if msa->RF != NULL && --keepins NOT enabled */
+  int          *rf2a_map = NULL;               /* [0..rfpos..rflen-1] = apos,                     
+						* apos is the alignment position (0..msa->alen-1) that     
+						* is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) */
+  int          *useme_final = NULL;            /* final mask, [0..i..msa->alen-1] TRUE to keep apos i, FALSE not to */
+  ESL_STOPWATCH *w  = NULL;                    /* for timing the masking, only used if -o enabled */
+  int64_t       orig_alen  = 0;                /* alignment length of input alignment (pre-masked) */
+
+  /* variables related to default mode, reading mask from a maskfile */
+  char         *maskfile = NULL;	       /* mask file name                  */
+  int           do_maskfile;                   /* TRUE if neither -p nor -g are enabled, and we have 2 command-line args */
+  int           file_mlen = 0;                 /* if do_maskfile, length of mask from maskfile, msa->alen or rflen */
+  double      **pp_ct  = NULL;                 /* [0..msa->alen-1][0..11] number of each PP value at each aln position */
+  int          *useme_mfile = NULL;            /* useme deduced from mask from maskfile, 
+						* [0..i..file_mlen-1] TRUE to keep apos or rfpos i, FALSE not to */
+
+  /* variables related to truncation mode (-t) */
+  int           do_truncate;                   /* TRUE if -t enabled */
+  uint32_t      tstart, tend;                  /* with -t, start and end position of aln region to keep, parsed from 2nd cmdline arg (<coords> : <start>..<end>) */
+
+  /* variables related to gap frequency mode (-g) */
+  int           do_gapthresh;                  /* TRUE if -g enabled */
+  double      **abc_ct = NULL;                 /* [0..msa->alen-1][0..abc->K] number of each resiude at each position (abc->K is gap) */
+  double       *gap_ct = NULL;                 /* [0..msa->alen-1] number of gaps at each position */
+  int          *useme_g = NULL;                /* [0..i..msa->alen-1] TRUE to keep apos i based on gapfreq, FALSE not to */
+
+  /* variables related to postprob mode (-p) */
+  int           do_postprob;                   /* TRUE if -p enabled */
+  int           do_pavg;                       /* TRUE if --pavg enabled */
+  int           do_ppcons;                     /* TRUE if --ppcons enabled */
+  float         pavg_min;                      /* <x> from --pavg <x>, if enabled, 0., otherwise */
+  float         ppcons_min;                    /* <x> from --ppcons <x>, if enabled, 0., otherwise */
+  int          *useme_pp = NULL;               /* [0..i..msa->alen-1] TRUE to keep apos i based on postprobs, FALSE not to */
+
+  /* variables related to RF mode (--rf-is-mask) */
+  int           do_rf_is_mask = FALSE;         /* TRUE if --rf-is-mask, RF annotation is the mask, all gap RF columns removed, others kept */
+
+  /* variables related to small memory mode (--small) */
+  int           do_small;                      /* TRUE if --small, operate in special small memory mode, aln seq data is not stored */
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage1);
+      esl_usage(stdout, argv[0], usage2);
+      esl_usage(stdout, argv[0], usage3);
+      esl_usage(stdout, argv[0], usage4);
+      esl_usage(stdout, argv[0], usage5);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if (esl_opt_GetBoolean(go, "-h") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage1);
+      esl_usage (stdout, argv[0], usage2);
+      esl_usage (stdout, argv[0], usage3);
+      esl_usage (stdout, argv[0], usage4);
+      esl_usage (stdout, argv[0], usage5);
+      puts("\n  Only one usage listed above can be used per execution with the exception of");
+      puts("  -p and -g, which can be used in combination with each other.\n");
+      puts("  With -t, <coords> is a string that specifies positive integer start and end");
+      puts("  coordinates seperated by any nonnumeric, nonspace character(s).");
+      puts("  For example, \"23..100\" or \"23/100\" or \"23-100\" all specify that columns");
+      puts("  23 to 100 be kept and all other columns be removed. Additionally, to retrieve");
+      puts("  all columns from a position to the end, omit the end coord; \"23:\" will work.");
+      puts("  With -t and --t-rf, coordinates are interpreted as non-gap positions in the");
+      puts("  reference (\"#=GC RF\") annotation.\n");
+      puts("  With --rf-is-mask, all columns that are not gaps in the reference annotation");
+      puts("  will be kept and all other columns will be removed.");
+      puts("\n other options are:");
+      esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+      puts("\n options for specifying alphabet in <msafile>, one is required w/--small:");
+      esl_opt_DisplayHelp(stdout, go, 2, 2, 80); 
+      puts("\n options related to truncating the alignment (require -t):");
+      esl_opt_DisplayHelp(stdout, go, 3, 2, 80); 
+      puts("\n options for masking based on gap frequencies (require -g):");
+      esl_opt_DisplayHelp(stdout, go, 4, 2, 80); 
+      puts("\n options for masking based on posterior probabilities (require -p):");
+      esl_opt_DisplayHelp(stdout, go, 5, 2, 80); 
+      puts("\n options that modify masking behavior when -g and/or -p are used:");
+      esl_opt_DisplayHelp(stdout, go, 6, 2, 80); 
+      exit(0);
+    }
+
+  /* Check that we have the correct number of command line args, 
+   * in English: if (NOT 2 cmdline args and none of --rf-is-mask,-p,-g) 
+   *             AND NOT -p and 1 cmdline arg
+   *             AND NOT -g and 1 cmdline arg
+   *             AND NOT --rf-is-mask and 1 cmdline arg)
+   *             then ERROR due to incorrect usage.
+   */           
+  if ((! (((! esl_opt_GetBoolean(go, "--rf-is-mask")) && (! esl_opt_GetBoolean(go, "-p")) && (! esl_opt_GetBoolean(go, "-g"))) && esl_opt_ArgNumber(go) == 2)) && /* it is not the case that (none of --rf-is-mask,-p,-g) and 2 cmdline args */
+      (! ((esl_opt_GetBoolean(go, "-g")) && (esl_opt_ArgNumber(go) == 1))) &&         /* not -g and 1 arg */
+      (! ((esl_opt_GetBoolean(go, "-p")) && (esl_opt_ArgNumber(go) == 1))) &&         /* not -p and 1 arg */
+      (! ((esl_opt_GetBoolean(go, "--rf-is-mask")) && (esl_opt_ArgNumber(go) == 1)))) /* not --rf-is-mask and 1 arg */
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage1);
+      esl_usage(stdout, argv[0], usage2);
+      esl_usage(stdout, argv[0], usage3);
+      esl_usage(stdout, argv[0], usage4);
+      esl_usage(stdout, argv[0], usage5);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+  else 
+
+  alifile = esl_opt_GetArg(go, 1);
+
+  /*******************************************************************************
+   * Determine the type of masking we'll do:
+   * 1. do_maskfile:   read mask from file, if none of -p,-g,-t,--rf-is-mask enabled
+   * 2. do_truncate:   truncate alignment between coords from 2nd cmdline arg, if -t
+   * 3. do_postprob:   use posterior probabilities in aln to create mask, if -p
+   * 4. do_gapthresh:  use gap frequency in aln to create mask, if -g
+   * 5. do_rf_is_mask: mask solely based on RF annotation, if --rf-is-mask
+   *
+   * We can combine 3 and 4, but 1 and 2 and 5 are exclusive. Exclusivity of 1 is enforced by 
+   * if statement above that checks number of command line args. Exclusivity of 2 and 5
+   * is enforced by esl_getopts.
+   *******************************************************************************/
+
+  do_maskfile = do_truncate = do_postprob = do_gapthresh = do_rf_is_mask = FALSE; /* until proven otherwise */
+  if(esl_opt_ArgNumber(go) == 2) { 
+    if(esl_opt_GetBoolean(go, "-t")) { 
+      do_truncate = TRUE;
+      /* we parse 2nd cmdline arg later */
+    }
+    else { 
+      do_maskfile = TRUE;
+      maskfile = esl_opt_GetArg(go, 2);
+    }
+  }
+  else { /* 1 cmdline arg (when we checked for correct usage above, we verified either 1 or 2 cmdline args)*/
+    do_rf_is_mask = esl_opt_GetBoolean(go, "--rf-is-mask");
+    do_postprob   = esl_opt_GetBoolean(go, "-p");
+    do_gapthresh  = esl_opt_GetBoolean(go, "-g");
+  }
+
+  /* check for incompatible options that I don't know how to enforce with esl_getopts */
+  /* --keepins only makes sense with -p or -g */
+  if(esl_opt_GetBoolean(go, "--keepins") && (! do_postprob) && (! do_gapthresh)) 
+    esl_fatal("--keepins only makes sense in combination with -p and/or -g");
+
+  /* will we be verbose? */
+  be_verbose = (esl_opt_IsOn(go, "-o") && (! esl_opt_GetBoolean(go, "-q"))) ? TRUE : FALSE;
+
+  /* will we operate in small memory mode? */
+  do_small = (esl_opt_GetBoolean(go, "--small")) ? TRUE : FALSE;
+  
+  /* determine input/output formats */
+  if (esl_opt_IsOn(go, "--informat")) {
+    infmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"));
+    if (infmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); 
+    if (do_small && infmt != eslMSAFILE_PFAM) esl_fatal("small memory mode requires Pfam formatted alignments"); 
+  }
+  if (esl_opt_IsOn(go, "--outformat")) {
+    outfmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat"));
+    if (outfmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --outformat", esl_opt_GetString(go, "--outformat")); 
+    if (do_small && outfmt != eslMSAFILE_PFAM) esl_fatal("we can only output Pfam formatted alignments in small memory mode"); 
+  }
+  else outfmt = eslMSAFILE_STOCKHOLM;
+
+  if (do_small) { /* defaults change if we're in small memory mode, 
+		     note we checked --informat and --outformat compatibility with do_small in two if statements above */
+    infmt  = eslMSAFILE_PFAM; /* this must be true, else we can't do small memory mode */
+    outfmt = eslMSAFILE_PFAM;
+  }
+
+  /* open output file */
+  if (esl_opt_GetString(go, "-o") != NULL) {
+    if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) 
+      esl_fatal("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o"));
+    /* create and start stopwatch */
+    w = esl_stopwatch_Create();
+    esl_stopwatch_Start(w);
+  } else ofp = stdout;
+
+  /****************************************
+   * Open the MSA file; determine alphabet 
+   ****************************************/
+
+  /* abc handling is weird. We only use alphabet to define gap characters in this miniapp
+   * unless do_small is TRUE. msa's are actually read in text mode. Thus if do_small is FALSE,
+   * eslRNA suffices for anything. If do_small is TRUE, we need the alphabet so we 
+   * require --amino,--dna, or --rna below.
+   */
+  if      (esl_opt_GetBoolean(go, "--amino"))   abc = esl_alphabet_Create(eslAMINO);
+  else if (esl_opt_GetBoolean(go, "--dna"))     abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--rna"))     abc = esl_alphabet_Create(eslRNA);
+  else if (do_small)                            esl_fatal("With --small, the alphabet must be specified with --amino, --rna, or --dna.");
+  else                                          abc = esl_alphabet_Create(eslRNA); /* alphabet is only used to define gap characters, so (in this miniapp) we're okay specifying RNA for any alignment (even non-RNA ones) */
+
+  if (do_small)
+    {
+      status = esl_msafile2_Open(alifile, NULL, &afp2);
+      if      (status == eslENOTFOUND) esl_fatal("Alignment file %s doesn't exist or is not readable\n", alifile);
+      else if (status != eslOK)        esl_fatal("Alignment file open failed with error %d\n", status);
+    }
+  else
+    {
+      status = esl_msafile_Open(NULL, alifile, NULL, infmt, NULL, &afp);
+      if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+    }
+
+  /* If nec, read mask from the mask file */
+  if (do_maskfile) if((status = read_mask_file(maskfile, errbuf, &useme_mfile, &file_mlen)) != eslOK) esl_fatal(errbuf);
+  
+  /************************************************************************************
+   * Read the first MSA in the file (we only mask first aln) and verify we can mask it.
+   ************************************************************************************/
+
+  if (do_small) 
+    {
+      status = esl_msafile2_ReadInfoPfam(afp2, NULL, abc, -1, NULL, NULL, &msa, &nseq, &orig_alen, NULL, NULL, NULL, NULL, NULL, 
+					 (do_gapthresh) ? &abc_ct : NULL,
+					 (do_postprob)  ? &pp_ct  : NULL, 
+					 NULL, NULL, NULL);               /* we don't want bp_ct, srfpos_ct nor erfpos_ct */
+      if      (status == eslEFORMAT) esl_fatal("Alignment file parse error:\n%s\n", afp2->errbuf);
+      else if (status == eslEINVAL)  esl_fatal("Alignment file parse error:\n%s\n", afp2->errbuf);
+      else if (status != eslOK)      esl_fatal("Alignment file read failed with error code %d\n%s", status, afp);      
+
+      msa->alen = orig_alen; /* for convenience, but be careful, the msa doesn't actually have any aseq or ax */
+    }
+  else
+    {
+      status = esl_msafile_Read(afp, &msa); /* if ! do_small, we read full aln into memory */
+      if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+
+      orig_alen = msa->alen;
+      if(do_postprob && msa->pp == NULL && (! esl_opt_IsOn(go, "--ppcons"))) esl_fatal("-p was enabled, but the MSA has no posterior probability (#=GR PP) annotation.");
+    }
+
+  /* Allocate and initialize i_am_eligible array, which defines which
+   * positions we'll consider keeping. If msa->rf == NULL or --keepins
+   * enabled, this will be all positions, else it will only be non-gap
+   * RF positions.
+   */
+  ESL_ALLOC(i_am_eligible, sizeof(int) * (int) msa->alen);
+  esl_vec_ISet(i_am_eligible, (int) msa->alen, TRUE); /* default to all positions, this is overwritten just below if nec */
+
+  /* if RF exists, get i_am_rf array[0..alen] which tells us which positions are non-gap RF positions
+   * and rf2a_map, a map of non-gap RF positions to overall alignment positions */
+  if(msa->rf != NULL) {
+    if((status = map_rfpos_to_apos(msa, abc, errbuf, &i_am_rf, &rf2a_map, &rflen)) != eslOK) esl_fatal(errbuf);
+    if(! esl_opt_GetBoolean(go, "--keepins")) { /* we'll only consider keeping non-gap RF columns */
+      esl_vec_ICopy(i_am_rf, (int) msa->alen, i_am_eligible); 
+    }
+  }
+  else { /* RF doesn't exist, make sure no options that require RF annotation were enabled */
+    if(esl_opt_IsOn(go, "--pmask-rf")) esl_fatal("Error, --pmask-rf enabled, but alignment does not have RF annotation.");
+    if(esl_opt_IsOn(go, "--gmask-rf")) esl_fatal("Error, --gmask-rf enabled, but alignment does not have RF annotation.");
+    if(esl_opt_IsOn(go, "--fmask-rf")) esl_fatal("Error, --fmask-rf enabled, but alignment does not have RF annotation.");
+    if(esl_opt_GetBoolean(go, "--rf-is-mask")) esl_fatal("Error, --rf-is-mask enabled but msa does not have RF annotation.");
+    if(esl_opt_GetBoolean(go, "--keepins")) esl_fatal("Error, --keepins enabled but msa does not have RF annotation.");
+    if(esl_opt_GetBoolean(go, "--t-rmins")) esl_fatal("Error, --t-rmins enabled but msa does not have RF annotation.");
+  }
+
+  /* make sure we have pp_cons if --ppcons enabled */
+  if(esl_opt_IsOn(go, "--ppcons") && msa->pp_cons == NULL) esl_fatal("--ppcons was enabled, but the MSA has no consensus posterior probability (#=GC PP_cons) annotation.");
+
+
+  /* Determine value of do_rfonly, if TRUE, we'll automatically remove all non-gap RF columns,
+   * if(do_maskfile): if mlen (length of mask from file) == rflen, do_rfonly set to TRUE
+   * if(do_truncate): if msa->rf != NULL and --t-rmins enabled, then do_rfonly set to TRUE
+   * else           : if msa->rf != NULL and --keepins not enabled, then do_rfonly set to TRUE 
+   */
+  do_rfonly = FALSE; /* until proven otherwise */
+  if(do_maskfile) { 
+    if(msa->rf == NULL) { 
+      if((int) msa->alen != file_mlen) esl_fatal("Error, mask length (%d) not equal to alignment length (%d), and alignment has no #=GC RF annotation.", file_mlen, msa->alen);
+    }
+    else { /* msa->rf != NULL */
+      if(((int) msa->alen != file_mlen) && (rflen != file_mlen)) esl_fatal("Error, mask length (%d) not equal to alignment length (%d), and alignment has no #=GC RF annotation.", file_mlen, msa->alen);
+      if(rflen == file_mlen) do_rfonly = TRUE;
+    }
+  }
+  else if(do_truncate) { 
+    if(msa->rf != NULL && esl_opt_GetBoolean(go, "--t-rmins")) do_rfonly = TRUE; 
+    /* Note: we verified that --t-rmins was not enabled if msa->rf == NULL immediately after reading the msa above */
+  }
+  else if(do_rf_is_mask) { 
+    do_rfonly = TRUE; 
+  }
+  else { /* ! do_maskfile && ! do_truncate && ! do_rf_is_mask */
+    if(msa->rf != NULL && (! esl_opt_GetBoolean(go, "--keepins"))) do_rfonly = TRUE;
+  }
+
+  /****************************************************************
+   * Prepare for masking. This is done differently for each mode. *
+   ****************************************************************/
+  ESL_ALLOC(useme_final, sizeof(int) * msa->alen);
+  if(be_verbose) {
+    fprintf(stdout, "# %19s  %7s  %7s  %16s  %16s  %13s\n",  "",                    "",        "",        "all columns",        "non-gap RF colns","");
+    fprintf(stdout, "# %19s  %7s  %7s  %16s  %16s  %13s\n",  "",                    "",        "",        "----------------",   "----------------","");
+    fprintf(stdout, "# %19s  %7s  %7s  %7s  %7s  %7s  %7s  %13s\n",  "",                    "",        "non-gap", "num",     "num",     "num",     "num",     "gap RF colns");
+    fprintf(stdout, "# %-19s  %7s  %7s  %7s  %7s  %7s  %7s  %13s\n","mask mode",           "aln len",  "RF len", "kept",    "removed", "kept",    "removed", "auto removed?");
+    fprintf(stdout, "# %19s  %7s  %7s  %7s  %7s  %7s  %7s  %13s\n",  "-------------------", "-------", "-------", "-------", "-------", "-------", "-------", "-------------");
+  }
+
+  if(do_maskfile) { 
+    if(do_rfonly) { 
+      if((status = expand_rf_useme_to_alen(useme_mfile, rf2a_map, rflen, msa->alen, errbuf, useme_final)) != eslOK) esl_fatal(errbuf);
+    }
+    else { /* ! do_rfonly, copy useme_mfile to useme_final (we could do this differently...) */
+      esl_vec_ICopy(useme_mfile, msa->alen, useme_final);
+    }
+    if(be_verbose) { 
+      nkept    = esl_vec_ISum(useme_final, (int) msa->alen);
+      if(msa->rf == NULL) fprintf(stdout, "  %-19s  %7" PRId64 "  %7s  %7d  %7d  %7s  %7s  %13s\n", "maskfile", msa->alen, "-",   nkept, (int) msa->alen - nkept, "-", "-", "-");
+      else { 
+	nkept_rf = (do_rfonly) ? nkept: determine_nkept_rf(useme_final, i_am_rf, msa->alen);
+	fprintf(stdout, "  %-19s  %7" PRId64 "  %7d  %7d  %7d  %7d  %7d  %13s\n", "maskfile", msa->alen, rflen, nkept, (int) msa->alen - nkept, nkept_rf, rflen - nkept_rf, do_rfonly ? "yes" : "no");
+      }
+    }
+  }
+  if(do_truncate) { 
+    parse_coord_string(esl_opt_GetArg(go, 2), &tstart, &tend);  /* this dies with esl_fatal() if 2nd cmdline arg is invalid */
+    /* remember: user provided coords are 1..alen or 1..rflen, whereas all internal arrays use 0..alen-1 and 0..rflen-1 */
+    if(esl_opt_GetBoolean(go, "--t-rf")) { 
+      /* convert start and end positions read from <coords> 2nd cmdline arg from rf positions to full alignment positions */
+      if(tstart > rflen) esl_fatal("with -t and --t-rf, start coordinate value %d exceeds non-gap RF length of %d", tstart, rflen);
+      if(tend   > rflen) esl_fatal("with -t and --t-rf, end coordinate value %d exceeds non-gap RF length of %d", tend, rflen);
+      tstart = rf2a_map[(tstart-1)] + 1;
+      if(tend == 0) tend = (int) msa->alen; /* careful, don't set it to rflen and then convert with the map, you'll lose the inserts after the final non-gap RF posn */
+      else          tend = rf2a_map[(tend-1)] + 1;
+    }
+    else { 
+      if(tstart > msa->alen) esl_fatal("with -t, start coordinate value %d exceeds alignment length of %" PRId64, tstart, msa->alen);
+      if(tend   > msa->alen) esl_fatal("with -t, end coordinate value %d exceeds alignment length of %" PRId64, tend, msa->alen);
+      if(tend == 0) tend = (int) msa->alen;
+    }
+    /* create the truncation mask */
+    for(apos = 0;          apos < (tstart-1); apos++) useme_final[apos] = FALSE; 
+    for(apos = (tstart-1); apos < tend;       apos++) useme_final[apos] = do_rfonly ? i_am_rf[apos] : TRUE; /* only keep non-gap RF positions if do_rfonly */
+    for(apos = tend;       apos < msa->alen;  apos++) useme_final[apos] = FALSE;
+    if(be_verbose) { 
+      nkept = esl_vec_ISum(useme_final, (int) msa->alen);
+      if(msa->rf == NULL) fprintf(stdout, "  %-19s  %7" PRId64 "  %7s  %7d  %7d  %7s  %7s  %13s\n", "truncation", msa->alen, "-",  nkept, (int) msa->alen - nkept, "-", "-", "-");
+      else { 
+	nkept_rf = (do_rfonly) ? nkept: determine_nkept_rf(useme_final, i_am_rf, msa->alen);
+	fprintf(stdout, "  %-19s  %7" PRId64 "  %7d  %7d  %7d  %7d  %7d  %13s\n", "truncation", msa->alen, rflen, nkept, (int) msa->alen - nkept, nkept_rf, rflen - nkept_rf, do_rfonly ? "yes" : "no");
+      }
+    }
+  }
+  if(do_gapthresh) { 
+    if(! do_small) { 
+      if((status = count_gaps_in_msa(msa, abc, i_am_eligible, errbuf, &gap_ct)) != eslOK) esl_fatal(errbuf);
+    }
+    else { 
+      ESL_ALLOC(gap_ct, sizeof(double) * msa->alen);
+      for(apos = 0; apos < msa->alen; apos++) gap_ct[apos] = abc_ct[apos][abc->K]; 
+    }
+    if((status = mask_based_on_gapfreq(gap_ct, msa->alen, (do_small) ? nseq : msa->nseq, esl_opt_GetReal(go, "--gapthresh"), i_am_eligible, errbuf, &useme_g)) != eslOK) esl_fatal(errbuf);
+    if(be_verbose) { 
+      nkept    = esl_vec_ISum(useme_g, (int) msa->alen);
+      if(msa->rf == NULL) fprintf(stdout, "  %-19s  %7" PRId64 "  %7s  %7d  %7d  %7s  %7s  %13s\n", "gapfreq", msa->alen, "-",   nkept, (int) msa->alen - nkept, "-", "-", "-");
+      else { 
+	nkept_rf = (do_rfonly) ? nkept: determine_nkept_rf(useme_g, i_am_rf, msa->alen);
+	fprintf(stdout, "  %-19s  %7" PRId64 "  %7d  %7d  %7d  %7d  %7d  %13s\n", "gapfreq", msa->alen, rflen, nkept, (int) msa->alen - nkept, nkept_rf, rflen - nkept_rf, do_rfonly ? "yes" : "no");
+      }
+    }
+  }
+  if(do_postprob) { 
+    if(! do_small) { 
+      if((status = count_postprobs_in_msa(msa, abc, i_am_eligible, errbuf, &pp_ct)) != eslOK) esl_fatal(errbuf);
+    }
+    do_pavg    = esl_opt_IsOn(go, "--pavg");
+    pavg_min   = do_pavg ? esl_opt_GetReal(go, "--pavg") : 0.; /* if ! do_pavg, pavg_min is irrelevant */
+    do_ppcons  = esl_opt_IsOn(go, "--ppcons");
+    ppcons_min = do_ppcons ? esl_opt_GetReal(go, "--ppcons") : 0.; /* if ! do_ppcons, ppcons_min is irrelevant */
+    if((status = mask_based_on_postprobs(pp_ct, msa->alen, (do_small) ? nseq : msa->nseq, esl_opt_GetReal(go, "--pthresh"), esl_opt_GetReal(go, "--pfract"), do_pavg, pavg_min, do_ppcons, ppcons_min, msa->pp_cons, abc, i_am_eligible, esl_opt_GetBoolean(go, "--pallgapok"), errbuf, &useme_pp)) != eslOK) esl_fatal(errbuf);
+    if(be_verbose) { 
+      nkept = esl_vec_ISum(useme_pp, (int) msa->alen);
+      if(msa->rf == NULL) fprintf(stdout, "  %-19s  %7" PRId64 "  %7s  %7d  %7d  %7s  %7s  %13s\n", "postprobs", msa->alen, "-",   nkept, (int) msa->alen - nkept, "-", "-", "-");
+      else { 
+	nkept_rf = (do_rfonly) ? nkept: determine_nkept_rf(useme_pp, i_am_rf, msa->alen);
+	fprintf(stdout, "  %-19s  %7" PRId64 "  %7d  %7d  %7d  %7d  %7d  %13s\n", "postprobs", msa->alen, rflen, nkept, (int) msa->alen - nkept, nkept_rf, rflen - nkept_rf, do_rfonly ? "yes" : "no");
+      }
+    }
+  }
+  if(do_rf_is_mask) {
+    for(apos = 0; apos < msa->alen; apos++) useme_final[apos] = i_am_rf[apos];
+    if(be_verbose) fprintf(stdout, "  %-19s  %7" PRId64 "  %7d  %7d  %7d  %7d  %7d  %13s\n", "RF", msa->alen, rflen, rflen, (int) msa->alen - rflen, rflen, 0, "yes");
+  }
+
+  /*********************************************************************************
+   * Determine final mask if -p, -g or both were enabled (else we already have it) *
+   *********************************************************************************/
+  /* combine pp and gap mask if -p and -g */
+  if(do_gapthresh && do_postprob) { 
+    for(apos = 0; apos < msa->alen; apos++) 
+      useme_final[apos] = (useme_g[apos] && useme_pp[apos]) ? TRUE : FALSE;
+    if(be_verbose) { 
+      nkept    = esl_vec_ISum(useme_final, (int) msa->alen);
+      if(msa->rf == NULL) fprintf(stdout, "  %-19s  %7" PRId64 "  %7s  %7d  %7d  %7s  %7s  %13s\n", "gapfreq&postprobs", msa->alen, "-",   nkept, (int) msa->alen - nkept, "-", "-", "-");
+      else { 
+	nkept_rf = (do_rfonly) ? nkept: determine_nkept_rf(useme_final, i_am_rf, msa->alen);
+	fprintf(stdout, "  %-19s  %7" PRId64 "  %7d  %7d  %7d  %7d  %7d  %13s\n", "gapfreq&postprobs", msa->alen, rflen, nkept, (int) msa->alen - nkept, nkept_rf, rflen - nkept_rf, do_rfonly ? "yes" : "no");
+      }
+    }
+  }
+  else if(do_gapthresh) {
+    esl_vec_ICopy(useme_g, msa->alen, useme_final);
+  }
+  else if(do_postprob) { 
+    esl_vec_ICopy(useme_pp, msa->alen, useme_final);
+  }
+  /* else (do_maskfile || do_rf_is_mask || do_truncate) we set useme_final above */
+
+  /************************************************
+   * Unless --small enabled, mask the alignment *
+   ************************************************/
+  if(! do_small) { 
+    if (abc && (abc->type == eslRNA || abc->type == eslDNA) &&
+	(status = esl_msa_RemoveBrokenBasepairs(msa, errbuf, useme_final)) != eslOK) esl_fatal(errbuf);
+    if ((status = esl_msa_ColumnSubset         (msa, errbuf, useme_final)) != eslOK) esl_fatal(errbuf);
+  } /* else we'll do it as we regurgitate it upon rereading below */
+
+  /************************
+   * Output the alignment *
+   ************************/
+  if (! do_small) 
+    {
+      esl_msafile_Write(ofp, msa, outfmt);
+    }
+  else { 
+    /* do_small==TRUE, we don't have the full msa stored, 
+     * we must regurgitate it, removing unwanted columns as we do. 
+     * First, close then reopen alifile so we can reread (first) alignment (no esl_msafile_Position() exists yet) 
+     */
+    esl_msafile2_Close(afp2);
+    status = esl_msafile2_OpenDigital(abc, alifile, NULL, &afp2); /* this should work b/c it did on the first pass */
+    if      (status == eslENOTFOUND) esl_fatal("Second pass: alignment file %s doesn't exist or is not readable\n", alifile);
+    else if (status == eslEFORMAT)   esl_fatal("Second pass: couldn't determine format of alignment %s\n", alifile);
+    else if (status != eslOK)        esl_fatal("Second pass: alignment file open failed with error %d\n");
+    status = esl_msafile2_RegurgitatePfam(afp2, ofp, 
+					  -1, -1, -1, -1, /* max width of seq names, gf,gc,gr tags unknown, we'll use margin length from file */
+					  TRUE,           /* regurgitate stockholm header ? */
+					  TRUE,           /* regurgitate // trailer ? */
+					  TRUE,           /* regurgitate blank lines */
+					  TRUE,           /* regurgitate comments */
+					  TRUE,           /* regurgitate GF ? */
+					  TRUE,           /* regurgitate GS ? */
+					  TRUE,           /* regurgitate GC ? */
+					  TRUE,           /* regurgitate GR ? */
+					  TRUE,           /* regurgitate aseq ? */
+					  NULL,           /* regurgitate all seqs, not a subset */ 
+					  NULL,           /* regurgitate all seqs, not a subset */ 
+					  useme_final,    /* which columns to keep */
+					  NULL,           /* we're not adding any columns */
+					  msa->alen,      /* expected length, not strictly necessary */
+					  '.',            /* gapchar, irrelevant in this context */
+					  NULL,           /* don't return num seqs read */
+					  NULL);          /* don't return num seqs regurgitated */
+    if(status == eslEOF) esl_fatal("Second pass, unable to reread alignment");
+    if(status != eslOK)  esl_fatal("Second pass, error rereading alignment");
+  }
+  if(be_verbose) fprintf(stdout, "#\n");
+
+  /**************************************************************************************************************
+   * Output masks, if nec (we already checked above that msa->rf != NULL If any --*mask-rf options are enabled) *
+   **************************************************************************************************************/
+  if(esl_opt_IsOn(go, "--pmask-rf")) {
+    if((status = output_mask(esl_opt_GetString(go, "--pmask-rf"), useme_pp, i_am_rf, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf);
+    if(be_verbose) fprintf(stdout, "# Posterior probability mask of non-gap RF length (%d) saved to file %s.\n", rflen, esl_opt_GetString(go, "--pmask-rf"));
+  }
+  if(esl_opt_IsOn(go, "--pmask-all")) {
+    if((status = output_mask(esl_opt_GetString(go, "--pmask-all"), useme_pp, NULL, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf);
+    if(be_verbose) fprintf(stdout, "# Posterior probability mask of full alignment length (%d) saved to file %s.\n", (int) orig_alen, esl_opt_GetString(go, "--pmask-all"));
+  }
+  if(esl_opt_IsOn(go, "--gmask-rf")) {
+    if((status = output_mask(esl_opt_GetString(go, "--gmask-rf"), useme_g, i_am_rf, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf);
+    if(be_verbose) fprintf(stdout, "# Gap frequency mask of non-gap RF length (%d) saved to file %s.\n", rflen, esl_opt_GetString(go, "--gmask-rf"));
+  }
+  if(esl_opt_IsOn(go, "--gmask-all")) {
+    if((status = output_mask(esl_opt_GetString(go, "--gmask-all"), useme_g, NULL, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf);
+    if(be_verbose) fprintf(stdout, "# Gap frequency mask of full alignment length (%d) saved to file %s.\n", (int) orig_alen, esl_opt_GetString(go, "--gmask-all"));
+  }
+  if(esl_opt_IsOn(go, "--fmask-rf")) {
+    if((status = output_mask(esl_opt_GetString(go, "--fmask-rf"), useme_final, i_am_rf, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf);
+    if(be_verbose) fprintf(stdout, "# Final mask of non-gap RF length (%d) saved to file %s.\n", rflen, esl_opt_GetString(go, "--fmask-rf"));
+  }
+  if(esl_opt_IsOn(go, "--fmask-all")) {
+    if((status = output_mask(esl_opt_GetString(go, "--fmask-all"), useme_final, NULL, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf);
+    if(be_verbose) fprintf(stdout, "# Final mask of full alignment length (%d) saved to file %s.\n", (int) orig_alen, esl_opt_GetString(go, "--fmask-all"));
+  }
+  if(esl_opt_GetString(go, "-o") != NULL) { 
+    fclose(ofp); 
+    if(be_verbose) fprintf(stdout, "# Masked alignment saved to file %s.\n", esl_opt_GetString(go, "-o"));
+    esl_stopwatch_Stop(w);
+    esl_stopwatch_Display(stdout, w, "# CPU time: ");
+  }
+
+  /* Clean up, normal return */
+  if (rf2a_map)      free(rf2a_map);
+  if (useme_mfile)   free(useme_mfile);
+  if (useme_g)       free(useme_g);
+  if (useme_pp)      free(useme_pp);
+  if (useme_final)   free(useme_final);
+  if (i_am_rf)       free(i_am_rf);
+  if (i_am_eligible) free(i_am_eligible);
+  if (pp_ct)         esl_Free2D((void **) pp_ct,  orig_alen);
+  if (abc_ct)        esl_Free2D((void **) abc_ct, orig_alen);
+  if (gap_ct)        free(gap_ct);
+  if (msa)           esl_msa_Destroy(msa);
+  if (abc)           esl_alphabet_Destroy(abc);
+  if (w)             esl_stopwatch_Destroy(w);
+  if (afp)           esl_msafile_Close(afp);
+  if (afp2)          esl_msafile2_Close(afp2);
+  esl_getopts_Destroy(go);
+  return 0;
+
+ ERROR:
+  esl_fatal("Memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+/* read_mask_file
+ *
+ * Given the name of a mask file with 1 mask in it,
+ * read it, fill <useme> and return.
+ * 
+ * mlen length of the mask
+ * useme[0..i..mlen-1]: '1' if we should keep column i, '0' if not.
+ * 
+ * useme is allocated here, and must be freed by caller.
+ *
+ * The mask must only contain '0' or '1' characters.
+ * Lines prefixed with '#' are comment lines, and ignored.
+ * All whitespace (including newlines) is ignored.
+ *
+ * Returns:  eslOK on success and <ret_useme> is set as <useme>.
+ *           <ret_masklen> is set as <masklen>.
+ *           eslEINVAL if a non-0/1 character read
+ */
+int
+read_mask_file(char *filename, char *errbuf, int **ret_useme, int *ret_mlen)
+{
+  int             status;
+  ESL_FILEPARSER *efp;
+  char           *tok;
+  int            *useme = NULL;
+  int             toklen;
+  int             mlen = 0;
+  int             i;
+  void           *tmp;
+
+  if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in read_mask_file\n", filename);
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  while ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) { 
+    if(mlen == 0) ESL_ALLOC (useme, sizeof(int) * toklen);
+    else          ESL_RALLOC(useme, tmp, sizeof(int) * (mlen+toklen));
+    for(i = 0; i < toklen; i++) { 
+      if(tok[i] == '0')      useme[mlen+i] = FALSE;
+      else if(tok[i] == '1') useme[mlen+i] = TRUE;
+      else ESL_FAIL(eslEINVAL, errbuf, "Mask character number %d is neither a '0', nor a '1' but a (%c). The mask must be only 1s and 0s.", mlen+i+1, tok[i]);
+    }
+    mlen += toklen;
+  }
+
+  *ret_useme = useme;
+  *ret_mlen = mlen;
+  esl_fileparser_Close(efp);
+  return eslOK;
+  
+ ERROR:
+  if(useme != NULL) free(useme);
+  ESL_FAIL(status, errbuf, "Ran out of memory while reading the mask file.");
+  return status; /* NEVERREACHED */
+}
+
+/* map_rfpos_to_apos
+ *                   
+ * Given an MSA, determine the alignment position of each
+ * non-gap RF (reference) position. The abc is only necessary
+ * for defining gap characters.
+ * 
+ * rf2a_map[0..rfpos..rflen-1] = apos, apos is the alignment position (0..msa->alen-1) that 
+ *                               is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) 
+ */
+static int map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int **ret_i_am_rf, int **ret_rf2a_map, int *ret_rflen)
+{
+  int status;
+  int rflen = 0;
+  int *rf2a_map = NULL;
+  int *i_am_rf = NULL;
+  int rfpos = 0;
+  int apos = 0;
+
+  /* contract check */
+  if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, trying to map RF positions to alignment positions, but msa->rf is NULL.");
+
+  /* count non-gap RF columns */
+  for(apos = 0; apos < msa->alen; apos++) { 
+    if((! esl_abc_CIsGap(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsMissing(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsNonresidue(abc, msa->rf[apos])))
+      { 
+	rflen++;
+	/* I don't use esl_abc_CIsResidue() b/c that would return FALSE for 'x' with RNA and DNA */
+      }
+  }
+  /* build map */
+  ESL_ALLOC(i_am_rf, sizeof(int) * msa->alen);
+  ESL_ALLOC(rf2a_map, sizeof(int) * rflen);
+  for(apos = 0; apos < msa->alen; apos++) {
+    if((! esl_abc_CIsGap(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsMissing(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsNonresidue(abc, msa->rf[apos]))) { 
+      i_am_rf[apos] = TRUE;
+      rf2a_map[rfpos++] = apos;
+    }
+    else { 
+      i_am_rf[apos] = FALSE;
+    }
+  }
+  *ret_i_am_rf  = i_am_rf;
+  *ret_rf2a_map = rf2a_map;
+  *ret_rflen    = rflen;
+  return eslOK;
+
+ ERROR:
+  if(i_am_rf  != NULL) free(i_am_rf);
+  if(rf2a_map != NULL) free(rf2a_map);
+  ESL_FAIL(status, errbuf, "Error, out of memory while mapping RF positions to alignment positions.");
+}
+
+/* expand_rf_useme_to_alen
+ *                   
+ * Given a <useme_rf> array that corresponds to rflen (non-gap RF)
+ * length of an msa, expand it to msa->alen using the map <rf2a_map>
+ * from RF positions to alignment positions and overwrite the
+ * <useme_a> array as the alen expanded array.
+ * 
+ * If we encounter an error, we return non-eslOK status and
+ * and fill errbuf with error message.
+ */
+static int expand_rf_useme_to_alen(int *useme_rf, int *rf2a_map, int rflen, int alen, char *errbuf, int *useme_a)
+{
+  int rfpos = 0;
+
+  /* initialize */
+  esl_vec_ISet(useme_a, alen, FALSE);
+
+  for(rfpos = 0; rfpos < rflen; rfpos++) {
+    if(rf2a_map[rfpos] > (alen-1)) ESL_FAIL(eslEINVAL, errbuf, "Error in expand_rf_useme_to_alen(), rf2a_map[rfpos:%d] = %d, but alen is %d.", rfpos, rf2a_map[rfpos], alen);
+    useme_a[rf2a_map[rfpos]] = useme_rf[rfpos]; 
+  }
+
+  return eslOK;
+}
+
+/* count_gaps_in_msa()
+ *                   
+ * Given an msa, fill gap_ct[apos] with the number of gaps in position
+ * apos, for all positions apos=0..msa->alen-1. Return gap_ct as
+ * <ret_gap_ct>.  <countme>[0..apos..msa->alen-1] = TRUE if we should
+ * count for position apos, FALSE if we shouldn't (leave ngap[apos] =
+ * 0). (countme allows us to not waste time counting gaps in columns
+ * that we will automatically remove, for example those that are 
+ * gaps in the RF annotation).
+ * 
+ * If we encounter an error, we return non-eslOK status and and fill
+ * errbuf with error message.
+ * 
+ * Returns eslOK upon success, and points <ret_useme> at useme, caller
+ * must free it.
+ */
+static int count_gaps_in_msa(ESL_MSA *msa, ESL_ALPHABET *abc, int *countme, char *errbuf, double **ret_gap_ct)
+{
+  int status;
+  double *gap_ct = NULL;
+  int apos, i;
+
+  /* contract check, msa should be in text mode */
+  if(msa->flags & eslMSA_DIGITAL) ESL_FAIL(eslEINVAL, errbuf, "count_gaps_in_msa() contract violation, MSA is digitized");
+
+  ESL_ALLOC(gap_ct, sizeof(double) * msa->alen);
+  esl_vec_DSet(gap_ct, msa->alen, 0.);
+
+  for(apos = 0; apos < (int) msa->alen; apos++) { 
+    if(countme[apos]) { 
+      for(i = 0; i < msa->nseq; i++) { 
+	if(esl_abc_CIsGap(abc, msa->aseq[i][apos])) gap_ct[apos] += 1.0;
+      }
+    }
+  }
+  *ret_gap_ct = gap_ct;
+  return eslOK;
+
+ ERROR:
+  if(gap_ct != NULL) free(gap_ct);
+  ESL_FAIL(status, errbuf, "Error, out of memory while counting gaps in the msa.");
+  return status; /* NEVERREACHED */
+}
+
+/* mask_based_on_gapfreq()
+ *                   
+ * Determine which columns to include/exclude based on frequency of
+ * gaps. Gap counts per-position are provided in <gap_ct>. 
+ * If posn x gap freq is <= <gapthresh>, we set useme[x] to TRUE 
+ * (we'll keep x), else we set useme[x] to FALSE (we won't keep x). 
+ * <i_am_rf>[0..alen-1] defines which columns are eligible for 
+ * being used, if <i_am_rf[x]> useme[x] is set as FALSE, 
+ * regardless of gap frequency.
+ *
+ * If we encounter an error, we return non-eslOK status and
+ * and fill errbuf with error message.
+ * 
+ * Returns eslOK upon success, and points <ret_useme> at useme,
+ * caller must free it.
+ */
+static int mask_based_on_gapfreq(double *gap_ct, int64_t alen, int nseq, float gapthresh, int *i_am_eligible, char *errbuf, int **ret_useme)
+{
+  int status;
+  int *useme = NULL;
+  int apos;
+  float gapfreq;
+
+  /* contract check */
+  if(i_am_eligible == NULL) ESL_FAIL(eslEINVAL, errbuf, "mask_based_on_gapthresh() contract violation, i_am_eligible is NULL");
+
+  /* allocate */
+  ESL_ALLOC(useme, sizeof(int) * alen);
+
+  for(apos = 0; apos < alen; apos++) {
+    if(i_am_eligible[apos]) { 
+      gapfreq = gap_ct[apos] / (float) nseq;
+      useme[apos] = gapthresh < gapfreq ? FALSE : TRUE; /* should I be worried about imprecision? 0.5 compared to 0.5? */
+      /* printf("apos: %d gapfreq: %.3f\n", apos, gapfreq); */
+    }
+    else useme[apos] = FALSE;
+  }
+
+  *ret_useme = useme;
+  return eslOK;
+
+ ERROR:
+  if(useme != NULL) free(useme);
+  ESL_FAIL(status, errbuf, "Error, out of memory while masking based on gaps.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* get_pp_idx
+ *                   
+ * Given a #=GR PP or #=GC PP_cons character, return the appropriate index
+ * in a pp_ct[] vector. 
+ * '0' return 0;
+ * '1' return 1;
+ * '2' return 2;
+ * '3' return 3;
+ * '4' return 4;
+ * '5' return 5;
+ * '6' return 6;
+ * '7' return 7;
+ * '8' return 8;
+ * '9' return 9;
+ * '*' return 10;
+ * gap return 11;
+ * 
+ * Anything else (including missing or nonresidue) return -1;
+ *
+ * This mapping of PP chars to return values should probably be 
+ * stored in some internal map structure somewhere, instead of 
+ * only existing in this function as used by esl_msafile2_ReadInfoPfam().
+ */
+static int get_pp_idx(ESL_ALPHABET *abc, char ppchar)
+{
+  if(esl_abc_CIsGap(abc, ppchar)) return 11;
+  if(ppchar == '*')               return 10;
+  if(ppchar == '9')               return 9;
+  if(ppchar == '8')               return 8;
+  if(ppchar == '7')               return 7;
+  if(ppchar == '6')               return 6;
+  if(ppchar == '5')               return 5;
+  if(ppchar == '4')               return 4;
+  if(ppchar == '3')               return 3;
+  if(ppchar == '2')               return 2;
+  if(ppchar == '1')               return 1;
+  if(ppchar == '0')               return 0;
+  return -1;
+}
+
+/* count_postprobs_in_msa()
+ *                   
+ * Given an msa, fill nppA[apos] with the number of each possible
+ * posterior probability value in position apos, for all positions 
+ * apos=0..msa->alen-1. Return nppA as <ret_nppA>.  
+ * <countme>[0..apos..msa->alen-1] = TRUE if we should
+ * count for position apos, FALSE if we shouldn't (leave npp[apos][] =
+ * 0). (countme allows us to not waste time counting pps in columns
+ * that we will automatically remove, for example those that are 
+ * gaps in the RF annotation).
+ * 
+ * Possible PP values are: '0','1','2','3','4','5','6','7','8','9',
+ * '*','.','-','_'. Final 3 are gaps, and are treated identically.
+ *
+ * If we encounter an error, we return non-eslOK status and and fill
+ * errbuf with error message.
+ * 
+ * Returns eslOK upon success, and points <ret_useme> at useme, caller
+ * must free it.
+ */
+static int count_postprobs_in_msa(ESL_MSA *msa, ESL_ALPHABET *abc, int *countme, char *errbuf, double ***ret_pp_ct)
+{
+  int status;
+  double **pp_ct = NULL;
+  int apos, i;
+  int nppvals = 12; /* '0-9', '*' and gap */
+  int ppidx;
+
+  /* contract check, msa should be in text mode */
+  if(msa->flags & eslMSA_DIGITAL) ESL_FAIL(eslEINVAL, errbuf, "count_postprobs_in_msa() contract violation, MSA is digitized");
+  if(msa->pp == NULL) ESL_FAIL(eslEINVAL, errbuf, "count_postprobs_in_msa() contract violation, msa->pp is NULL");
+  
+  ESL_ALLOC(pp_ct, sizeof(double *) * msa->alen);
+  for(apos = 0; apos < msa->alen; apos++) { 
+    ESL_ALLOC(pp_ct[apos], sizeof(double) * nppvals);
+    esl_vec_DSet(pp_ct[apos], nppvals, 0.);
+  }
+    
+  for(apos = 0; apos < (int) msa->alen; apos++) { 
+    if(countme[apos]) { 
+      for(i = 0; i < msa->nseq; i++) { 
+	if(msa->pp[i] == NULL) { 
+	  ESL_FAIL(eslEINVAL, errbuf, "some but not all sequences have PP annotation in msa, seq %d does not.\n", (i+1));
+	}
+	ppidx = get_pp_idx(abc, msa->pp[i][apos]);
+	if(ppidx == 11) { /* special, gap idx */
+	  /* make sure the corresponding residue is also a gap */
+	  if(! esl_abc_CIsGap(abc, msa->aseq[i][apos])) ESL_FAIL(eslEINVAL, errbuf, "post prob annotation for seq: %d aln column: %d is a gap (%c), but seq res is not: (%c)", i, apos, msa->pp[i][apos], msa->aseq[i][apos]);
+	} 
+	pp_ct[apos][ppidx] += 1.; 
+      }
+    }
+  }
+  *ret_pp_ct = pp_ct;
+  return eslOK;
+
+ ERROR:
+  if(pp_ct != NULL) { 
+    for(apos = 0; apos < msa->alen; apos++) { 
+      if(pp_ct[apos] != NULL) free(pp_ct[apos]);
+    }
+    free(pp_ct);
+  }
+  ESL_FAIL(status, errbuf, "Error, out of memory while counting post probs in the msa.");
+  return status; /* NEVERREACHED */
+}
+
+/* mask_based_on_postprobs()
+ *                   
+ * Determine which columns to include/exclude based on frequency of
+ * post probs. Post prob counts per-position are provided in <pp_ct>.
+ * 
+ * If (do_pavg == FALSE && do_ppcons == FALSE):
+ * If more than <pfract> fraction of the non-gap residues in posn apos 
+ * are annotated with a post prob equal to or better than <pthresh>,
+ * we set useme[apos] to TRUE (we'll keep apos), else we set useme[apos] 
+ * to FALSE (we won't keep apos). 
+ * 
+ * If (do_pavg == TRUE):
+ * If average post prob in posn apos is equal to or better than <pavg_min>
+ * we set useme[apos] to TRUE, else we set useme[apos] to FALSE.
+ *
+ * If (do_ppcons == TRUE):
+ * If PP_cons post prob (from ppcons) in posn apos is equal to or better than 
+ * <ppcons_min> we set useme[apos] to TRUE, else we set useme[apos] to FALSE.
+ * 
+ * Note: either do_avg OR do_ppcons OR neither must be TRUE. Enforced by contract.
+ *
+ * <i_am_eligible>[0..alen-1] defines which columns are eligible for being
+ * used, if <i_am_eligible[apos]> useme[apos] is set as FALSE, regardless of pp
+ * frequency.
+ *
+ * Finally, unless <allgapok==TRUE> remove any column that contains all gaps, 
+ * i.e. that contains 0 aligned residues.
+ * 
+ * If we encounter an error, we return non-eslOK status and
+ * and fill errbuf with error message.
+ * 
+ * Returns eslOK upon success, and points <ret_useme> at useme,
+ * caller must free it.
+ */
+static int mask_based_on_postprobs(double **pp_ct, int64_t alen, int nseq, float pthresh, float pfract, int do_pavg, float pavg_min, int do_ppcons, float ppcons_min, char *pp_cons, ESL_ALPHABET *abc, int *i_am_eligible, int allgapok, char *errbuf, int **ret_useme)
+{
+  int status;
+  int *useme = NULL;
+  int apos;
+  float ppfreq;
+  double nnongap;
+  int nppvals = 12; /* '0-9', '*' and gap */
+  int ppidx_thresh;
+  int ppidx = 0; 
+  double ppcount = 0.;
+  double ppsum = 0.;
+  double pavg;
+  double ppminA[11];
+  double ppavgA[11];
+
+  ppminA[0]  = 0.00;
+  ppminA[1]  = 0.05;
+  ppminA[2]  = 0.15;
+  ppminA[3]  = 0.25;
+  ppminA[4]  = 0.35;
+  ppminA[5]  = 0.45;
+  ppminA[6]  = 0.55;
+  ppminA[7]  = 0.65;
+  ppminA[8]  = 0.75;
+  ppminA[9]  = 0.85;
+  ppminA[10] = 0.95;
+
+  ppavgA[0]  = 0.025;
+  ppavgA[1]  = 0.10;
+  ppavgA[2]  = 0.20;
+  ppavgA[3]  = 0.30;
+  ppavgA[4]  = 0.40;
+  ppavgA[5]  = 0.50;
+  ppavgA[6]  = 0.60;
+  ppavgA[7]  = 0.70;
+  ppavgA[8]  = 0.80;
+  ppavgA[9]  = 0.90;
+  ppavgA[10] = 0.975;
+  
+  /* contract check */
+  if(i_am_eligible == NULL) ESL_FAIL(eslEINVAL, errbuf, "mask_based_on_postprobs() contract violation, i_am_eligible is NULL");
+  if(do_pavg == TRUE && do_ppcons == TRUE) ESL_FAIL(eslEINVAL, errbuf, "mask_based_on_postprobs() contract violation, do_pavg and do_ppcons are both TRUE");
+  if(do_ppcons == TRUE && pp_cons == NULL)  ESL_FAIL(eslEINVAL, errbuf, "mask_based_on_postprobs() contract violation, do_ppcons is TRUE, but ppcons string is NULL");
+
+  /* allocate */
+  ESL_ALLOC(useme, sizeof(int) * alen);
+
+  if((! do_pavg) && (! do_ppcons)) { 
+    /* determine which pp_ct idx is the minimum we'll accept */
+    ppidx = 0;
+    while(ppidx < 10) { 
+      if((esl_FCompare(pthresh, ppminA[ppidx], eslSMALLX1) == eslOK) || pthresh < ppminA[ppidx]) break;
+      ppidx++;
+    }
+    ppidx_thresh = ppidx;
+  }
+
+  for(apos = 0; apos < alen; apos++) {
+    ppcount = 0.;
+    ppsum = 0.;
+    if(i_am_eligible[apos]) { /* consider this position */
+      nnongap = esl_vec_DSum(pp_ct[apos], nppvals) - pp_ct[apos][11]; 
+      if(esl_FCompare(nnongap, 0., eslSMALLX1) == eslOK) { /* effectively 0.0 */
+	useme[apos] = allgapok ? TRUE : FALSE; 
+      }
+      else { 
+	if(do_pavg) { 
+	  for(ppidx = 0; ppidx < 11; ppidx++) {
+	    ppsum += pp_ct[apos][ppidx] * ppavgA[ppidx]; /* Note: PP value is considered average of range, not minimum ('9' == 0.90 (0.95-0.85/2) */
+	    /* printf("apos: %d pp_idx: %d ct: %d sum: %.3f\n", apos, ppidx, pp_ct[apos][ppidx], ppsum);*/
+	  }
+	  pavg = ppsum / nnongap;
+	  useme[apos] = pavg < pavg_min? FALSE : TRUE; /* should I be worried about imprecision? 0.5 compared to 0.5? */
+	  /* printf("pavg: %.3f nnongap: %d useme[apos:%d]: %d pavg_min: %.3f\n", pavg, nnongap, apos, useme[apos], pavg_min);*/
+	}
+	else if(do_ppcons) { 
+	  ppidx = get_pp_idx(abc, pp_cons[apos]);
+	  if(ppidx == -1) ESL_FAIL(eslEFORMAT, errbuf, "bad #=GC PP_cons char: %c at position %d", pp_cons[apos], apos+1);
+	  if(ppidx != 11) { 
+	    useme[apos] = ((esl_FCompare(ppcons_min, ppminA[ppidx], eslSMALLX1) == eslOK) || ppminA[ppidx] > ppcons_min) ? TRUE : FALSE;
+	    /* printf("ppcons[%4d]: %c ppidx: %2d  useme %d ppcons_min: %.3f\n", apos, pp_cons[apos], ppidx, useme[apos], ppcons_min); */
+	  }
+	  else useme[apos] = FALSE; /* ppidx == 11, gap */ 
+	}
+	else { /* ! do_pavg and ! do_ppcons */
+	  for(ppidx = 10; ppidx >= ppidx_thresh; ppidx--) { 
+	    ppcount += pp_ct[apos][ppidx];
+	  }
+	  ppfreq = ppcount / nnongap;
+	  useme[apos] = (ppfreq < pfract) ? FALSE : TRUE; /* should I be worried about imprecision? 0.5 compared to 0.5? */
+	  /* printf("apos: %4d nnongap: %6d  ppfreq: %.3f pfract %.3f useme: %d ppidx_thresh: %d\n", apos, nnongap, ppfreq, pfract, useme[apos], ppidx_thresh); */
+	}
+      }
+    } /* end of if(i_am_eligible[apos]) */
+    else useme[apos] = FALSE;
+  }
+
+  *ret_useme = useme;
+  return eslOK;
+
+ ERROR:
+  if(useme != NULL) free(useme);
+  ESL_FAIL(status, errbuf, "Error, out of memory while masking based on postprobs.");
+  return status; /* NEVERREACHED */
+}
+
+/* output_mask
+ *
+ * Given a useme[0..apos..alen-1] array where useme[apos] = TRUE if we
+ * should keep apos TRUE, and FALSE if not, output a mask of '1's and
+ * '0's to the file <filename>. The mask is a string of exactly <alen>
+ * length with a '1' for each apos to keep, and a '0' for each apos we
+ * won't keep.
+ *
+ * If <i_am_eligible> is non-NULL, only output '1's or '0's for positions
+ * for which <i_am_eligible>[apos] is TRUE. This allows us to output
+ * masks that are only the length of the non-gap RF annotation in the file.
+ * 
+ * If we encounter an error, we return non-eslOK status and and fill
+ * errbuf with error message.
+ *
+ * Returns eslOK upon success. 
+ */
+static int
+output_mask(char *filename, int *useme, int *i_am_eligible, int64_t alen, char *errbuf)
+{
+  int status;
+  FILE *ofp;
+  int  apos;
+  char *mask = NULL;
+  int64_t mlen;
+  int mpos;
+
+  if(useme == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, trying to output a mask but useme is NULL.");
+
+  /* determine length of mask */
+  if(i_am_eligible == NULL) mlen = alen;
+  else                      mlen = esl_vec_ISum(i_am_eligible, (int) alen); /* relies on TRUE being equal to 1 */
+
+  ESL_ALLOC(mask, sizeof(char) * (mlen+1));
+
+  mpos = 0;
+  for (apos = 0; apos < alen; apos++) { 
+    if(i_am_eligible == NULL) { 
+      mask[mpos++] = useme[apos] ? '1' : '0';
+    }
+    else if(i_am_eligible[apos]) { 
+      mask[mpos++] = useme[apos] ? '1' : '0';
+    }
+  }
+  mask[mlen] = '\0';
+
+  if ((ofp = fopen(filename, "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open output file %s\n", filename);
+  fprintf(ofp, "%s\n", mask);
+
+  free(mask);
+  fclose(ofp);
+  return eslOK;
+
+ ERROR: 
+  ESL_FAIL(status, errbuf, "Memory allocation error while outputting mask.");
+  return status; /* NEVERREACHED */
+}
+
+/* determine_nkept_rf()
+ *
+ * Determine number of alignment positions to be kept (useme[apos]==TRUE)
+ * are non-gap RF positions using useme[] and i_am_rf[], both of length
+ * <alen>. Return that number.
+ */
+static int
+determine_nkept_rf(int *useme, int *i_am_rf, int64_t len)
+{
+  int nkept_rf = 0;
+  int apos;
+  for(apos = 0; apos <  len; apos++) {
+    if(useme[apos] && i_am_rf[apos]) nkept_rf++; 
+  }
+  return nkept_rf;
+}
+
+static int
+parse_coord_string(const char *cstring, uint32_t *ret_start, uint32_t *ret_end)
+{
+  ESL_REGEXP *re = esl_regexp_Create();
+  char        tok1[32];
+  char        tok2[32];
+  uint32_t    start, end;      
+  
+  if (esl_regexp_Match(re, "^(\\d+)\\D+(\\d*)$", cstring) != eslOK) esl_fatal("with -t, 2nd cmdline arg must be coords <from>..<to>; %s not recognized", cstring);
+  if (esl_regexp_SubmatchCopy(re, 1, tok1, 32)            != eslOK) esl_fatal("Failed to find <from> coord in %s", cstring);
+  if (esl_regexp_SubmatchCopy(re, 2, tok2, 32)            != eslOK) esl_fatal("Failed to find <to> coord in %s",   cstring);
+
+  /* Check for invalid values for start and end. Note that regexp matching enforced that tok1 and tok2 are both >= 0 */
+  start = atol(tok1);
+  if(start == 0) esl_fatal("with -t, coordinates must be positive integers <from>..<to>, <from> coordinate read as '0'");
+  if(tok2[0] == '\0') { /* special case: user provided something like "100:", keep positions 100 until end of alignment */
+    end = 0;
+  }
+  else { 
+    end = atol(tok2);
+    if(end <= 0) esl_fatal("with -t, coordinates must be positive integers <from>..<to>, <to> coordinate read as '0'");
+    if(start > end) esl_fatal("with -t, 2nd cmdline arg <coords> must equal <from>..<to>, with <from> <= <to>");
+  }
+
+  *ret_start = start;
+  *ret_end   = end;
+
+  esl_regexp_Destroy(re);
+  return eslOK;
+}
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/miniapps/esl-alimask.itest.pl b/miniapps/esl-alimask.itest.pl
new file mode 100755
index 0000000..deee0fb
--- /dev/null
+++ b/miniapps/esl-alimask.itest.pl
@@ -0,0 +1,322 @@
+#! /usr/bin/perl
+
+# Integrated test of esl-alimask miniapp.
+#
+# Usage:     ./esl-alimask.itest.pl <esl-alimask binary> <tmpfile prefix>
+# Example:   ./esl-alimask.itest.pl ./esl-alimask        foo
+#
+# EPN, Wed Nov 25 11:23:55 2009
+
+$eslalimask = shift;
+$tmppfx      = shift;
+
+if (! -x "$eslalimask") { die "FAIL: didn't find esl-alimask binary $eslalimask"; }
+
+open(ALIFILE, ">$tmppfx.stk") || die "FAIL: couldn't open $tmppfx.stk for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+
+seq1         aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg
+#=GR seq1 PP 5789**..**88...*9.9****88.7..776543210
+seq2         ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG....
+#=GR seq2 PP ..********************************....
+seq3         ..AAAA..AAAA...C...CCCCCC.C..GGGG-....
+#=GR seq3 PP ..5555..4*44...3...888888.8..8899.....
+#=GC SS_cons ...............<...<<<<......>>>>>....
+#=GC PP_cons ..789*..8877...8...****99.8..99998....
+#=GC RF      ..AAAA..AAAA...C...CCCCCC.c..GGGGG....
+//
+EOF
+close ALIFILE;
+
+open(NORFALIFILE, ">$tmppfx.norf.stk") || die "FAIL: couldn't open $tmppfx.stk for writing no RF alifile";
+print NORFALIFILE << "EOF";
+# STOCKHOLM 1.0
+
+seq1         aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg
+#=GR seq1 PP 5789**..**88...*9.9****88.7..776543210
+seq2         ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG....
+#=GR seq2 PP ..********************************....
+seq3         ..AAAA..AAAA...C...CCCCCC.C..GGGG-....
+#=GR seq3 PP ..5555..4*44...3...888888.8..8899.....
+//
+EOF
+close NORFALIFILE;
+
+open(FULLMASKFILE, ">$tmppfx.fullmask") || die "FAIL: couldn't open $tmppfx.2 for writing full maskfile";
+print FULLMASKFILE << "EOF";
+#this is a full aln length mask file
+1010111011
+1110101101
+#in the middle
+1101101111
+01101010
+EOF
+close FULLMASKFILE;
+
+open(RFMASKFILE, ">$tmppfx.rfmask") || die "FAIL: couldn't open $tmppfx.rfmask for writing RF maskfile";
+print RFMASKFILE << "EOF";
+#this is an RF length mask file
+001110101110110111101
+EOF
+close RFMASKFILE;
+
+# Note: Not nearly all possible option combinations are tried, but each option is tested
+# in at least one context, usually what I think to be the most common context.
+#
+# We do 4 runs of all tests, each pairwise combination of with and without RF annotation 
+# in alifile and with and without --small.
+
+$afileA[0] = "$tmppfx.stk"; 
+$afileA[1] = "$tmppfx.stk";
+$afileA[2] = "$tmppfx.norf.stk"; 
+$afileA[3] = "$tmppfx.norf.stk"; 
+
+$smallA[0] = "";
+$smallA[1] = "--small";
+$smallA[2] = "";
+$smallA[3] = "--small";
+
+$have_rfA[0] = 1;
+$have_rfA[1] = 1;
+$have_rfA[2] = 0;
+$have_rfA[3] = 0;
+
+$output = `$eslalimask -h`;
+if ($? != 0)                                        { die "FAIL: esl-alimask failed unexpectedly"; }
+if ($output !~ /Usage: esl-alimask/)                { die "FAIL: help output not right"; }
+
+for($pass = 0; $pass < 4; $pass++) {
+    $pass2write = $pass+1;
+
+    $output = `$eslalimask $smallA[$pass] --rna $afileA[$pass] $tmppfx.fullmask 2>&1`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/)                                        { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($output !~ /\.555\.4\*44\.\.\.\.888888\.\.899\.\./)                                   { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /:::::::::::::<<_______>>::/)                                          { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    if($have_rfA[$pass]) { 
+	$output = `$eslalimask $smallA[$pass] --dna $afileA[$pass] $tmppfx.rfmask 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if ($output !~ /AAAACCCCCCGGGG/)                                                      { die "FAIL: alignment masked incorrectly"; }
+	if ($output !~ /5544388888889\./)                                                     { die "FAIL: alignment masked incorrectly"; }
+	if ($output !~ /::::<\-<<__>\->>/)                                                    { die "FAIL: alignment masked incorrectly"; }
+    }
+    system("$eslalimask $smallA[$pass] --amino -o $tmppfx.out $afileA[$pass] $tmppfx.fullmask > /dev/null");
+    $output = `cat $tmppfx.out`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/)                                        { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($output !~ /\.555\.4\*44\.\.\.\.888888\.\.899\.\./)                                   { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /.............<<<.....>>>../)                                          { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+    
+    system("$eslalimask $smallA[$pass] --rna -q -o $tmppfx.out $afileA[$pass] $tmppfx.fullmask > /dev/null");
+    $output = `cat $tmppfx.out`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/)                                        { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($output !~ /\.555\.4\*44\.\.\.\.888888\.\.899\.\./)                                   { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /:::::::::::::<<_______>>::/)                                          { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalimask $smallA[$pass] --amino --informat pfam $afileA[$pass] $tmppfx.fullmask 2>&1`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/)                                        { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($output !~ /\.555\.4\*44\.\.\.\.888888\.\.899\.\./)                                   { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /.............<<<.....>>>../)                                          { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalimask $smallA[$pass] --rna --outformat pfam $afileA[$pass] $tmppfx.fullmask 2>&1`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/)                                        { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($output !~ /\.555\.4\*44\.\.\.\.888888\.\.899\.\./)                                   { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /:::::::::::::<<_______>>::/)                                          { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+    
+    if($smallA[$pass] eq "") { 
+	$output = `$eslalimask $smallA[$pass] --rna --outformat a2m $afileA[$pass] $tmppfx.fullmask 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if($have_rfA[$pass]) { 
+	    if ($output !~ /aAAAAAAAcCCCCCCGGGgg/)                                            { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	}
+	else { 
+            if ($output !~ /AAAAAAAACCCCCCCGGGGG/)                                            { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	}
+
+	$output = `$eslalimask $smallA[$pass] --rna --outformat psiblast $afileA[$pass] $tmppfx.fullmask 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if($have_rfA[$pass]) { 
+	    if ($output !~ /aAAA\-AAAA\-\-c\-CCCCCC\-\-GGGgg/)                                { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	}
+	else {
+	    if ($output !~ /AAAA\-AAAA\-\-C\-CCCCCC\-\-GGGGG/)                                { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	}
+
+	$output = `$eslalimask $smallA[$pass] --rna --outformat afa $afileA[$pass] $tmppfx.fullmask 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/)                                    { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalimask $smallA[$pass] --rna -t $afileA[$pass] 12-23 2>&1`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    if ($output !~ /A\.\.\.Cc\.cCCCC/)                                                        { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($output !~ /4\.\.\.3\.\.\.8888/)                                                      { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /\s+::::::::::::\s+/)                                                  { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    if ($have_rfA[$pass]) { 
+	$output = `$eslalimask $smallA[$pass] --rna -t --t-rf $afileA[$pass] 18: 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if ($output !~ /GGGGgggg/)                                                            { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /76543210/)                                                            { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+::::::::\s+/)                                                      { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    if ($have_rfA[$pass]) { 
+	$output = `$eslalimask $smallA[$pass] --rna -t --t-rmins --t-rf $afileA[$pass] 18: 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if ($output !~ /GGGG/)                                                                { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /7654/)                                                                { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+::::\s+/)                                                          { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    if ($have_rfA[$pass]) { 
+	$output = `$eslalimask $smallA[$pass] --rna -t --t-rmins --t-rf $afileA[$pass] 18: 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if ($output !~ /GGGG/)                                                                { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /7654/)                                                                { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+::::\s+/)                                                          { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalimask $smallA[$pass] --rna -g $afileA[$pass] 2>&1`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /AAAAAAAACCCCCCCCGGGGG/)                                               { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /55554\*44388888888899\./)                                             { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /::::::::<<<<<___>>>>>/)                                               { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /AAAAAAAAC\.\.CCCCCCCGGGG\-/)                                          { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /55554\*443\.\.88888888899\./)                                         { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }	
+
+    if ($have_rfA[$pass]) { 
+	$output = `$eslalimask $smallA[$pass] --rna -g --keepins $afileA[$pass] 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if ($output !~ /AAAAAAAACccCCCCCCCGGGGG/)                                             { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /55554\*443..88888888899*/)                                            { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /::::::::<\-\-<<<<___>>>>>/)                                           { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    if ($have_rfA[$pass]) { 
+	$output = `$eslalimask $smallA[$pass] --rna -g --keepins --gapthresh 0.3 $afileA[$pass] 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if ($output !~ /AAAAAAAACCCCCCCCGGGG/)                                                { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /55554\*44388888888899/)                                               { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /:::::::::<<<<___>>>>/)                                                { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+    
+    if ($have_rfA[$pass]) { 
+	$output = `$eslalimask $smallA[$pass] --rna -g --keepins --gapthresh 0.7 $afileA[$pass] 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if ($output !~ /\.\.AAAAaAAAAaacCcccCCCCCCcCccGGGGG\.\.\.\./)                         { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\.\.5555.4\*44\.\.\.3\.\.\.888888\.8\.\.8899\.\.\.\.\./)              { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /::::::::::::::<\-\-\-<<<<______>>>>>::::/)                            { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    if ($have_rfA[$pass]) { 
+	$output = `$eslalimask $smallA[$pass] --rna -g --keepins --gapthresh 0.7 $afileA[$pass] 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if ($output !~ /\.\.AAAAaAAAAaacCcccCCCCCCcCccGGGGG\.\.\.\./)                         { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\.\.5555.4\*44\.\.\.3\.\.\.888888\.8\.\.8899\.\.\.\.\./)              { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /::::::::::::::<\-\-\-<<<<______>>>>>::::/)                            { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalimask $smallA[$pass] --gmask-all $tmppfx.gmaskall --rna -g --gapthresh 0.7 $afileA[$pass] 2>&1`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    $output = `cat $tmppfx.gmaskall`;
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /00111100111100010001111110100111110000/)                              { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	$output = `$eslalimask $smallA[$pass] --gmask-rf $tmppfx.gmaskrf --rna -g --gapthresh 0.7 $afileA[$pass] 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	$output = `cat $tmppfx.gmaskrf`;
+	if ($output !~ /111111111111111111111/)                                               { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /11111110111111111111111111111111111111/)                              { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalimask $smallA[$pass] -p --rna $afileA[$pass] 2>&1`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /\s+A\s+/)                                                             { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+8\s+/)                                                             { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+\:\s+/)                                                            { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /\s+a\.Aaaccccc\s+/)                                                   { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+\*\*\*\*\*\*\*\*\*\*\s+/)                                          { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalimask $smallA[$pass] --pavg 0.73 -p --rna $afileA[$pass] 2>&1`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /\s+AAAAAACCCCCCCCGGGG\s+/)                                            { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+55554\*388888888899\s+/)                                           { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+:::::::<<<<___>>>>\s+/)                                            { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /\s+AAAAa\.AAaacCcccCCCCCCcCccGGGG\s+/)                                { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+5555\.\.4\*\.\.\.3\.\.\.888888\.8\.\.8899\s+/)                     { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    if ($have_rfA[$pass]) { 
+	$output = `$eslalimask $smallA[$pass] --ppcons 0.85 -p --rna $afileA[$pass] 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	if ($output !~ /\s+AACCCCCCGGGG\s+/)                                                  { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+9\*\*\*\*\*999999\s+/)                                             { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalimask $smallA[$pass] --pthresh 0.85 --pfract 0.5 --rna -p $afileA[$pass] 2>&1`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /\s+AAAAACCCCCGG\-\s+/)                                                { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+5554\*3888899\.\s+/)                                               { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /\s+AAA\.\.AA\.\.\.Cc\.cCCCC\.\.\.GGG\s+/)                             { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	if ($output !~ /\s+555\.\.4\*\.\.\.3\.\.\.8888\.\.\.99\.\s+/)                         { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalimask $smallA[$pass] --pmask-all $tmppfx.pmaskall --rna -p --pthresh 0.75 --pfract 0.7 $afileA[$pass] 2>&1`;
+    if ($? != 0)                                                                              { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+    $output = `cat $tmppfx.pmaskall`;
+    if ($have_rfA[$pass]) { 
+	if ($output !~ /00000000010000000001111110000000000000/)                              { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+	$output = `$eslalimask $smallA[$pass] --pmask-rf $tmppfx.pmaskrf --rna -p --pthresh 0.75 --pfract 0.7 $afileA[$pass] 2>&1`;
+	if ($? != 0)                                                                          { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; }
+	$output = `cat $tmppfx.pmaskrf`;
+	if ($output !~ /000001000111111000000/)                                               { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /00000011010011101111111111011000000000/)                              { die "FAIL: alignment masked incorrectly on pass $pass2write"; }
+    }
+}
+    
+print "ok\n"; 
+unlink "$tmppfx.stk";
+unlink "$tmppfx.norf.stk";
+unlink "$tmppfx.fullmask";
+unlink "$tmppfx.rfmask";
+unlink "$tmppfx.gmaskrf";
+unlink "$tmppfx.gmaskall";
+unlink "$tmppfx.pmaskrf";
+unlink "$tmppfx.pmaskall";
+unlink "$tmppfx.out";
+exit 0;
diff --git a/miniapps/esl-alimask.man b/miniapps/esl-alimask.man
new file mode 100644
index 0000000..6db488f
--- /dev/null
+++ b/miniapps/esl-alimask.man
@@ -0,0 +1,580 @@
+.TH "esl-alimask" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps"
+
+.SH NAME
+.TP 
+esl-alimask - remove columns from a multiple sequence alignment
+
+.SH SYNOPSIS
+
+.TP 
+Remove columns based on a mask in an input file:
+.B esl-alimask
+.I [options]
+.I msafile
+.I maskfile
+
+.TP 
+Remove a contiguous set of columns at the start and end of an alignment:
+.B esl-alimask -t
+.I [options]
+.I msafile
+.I coords
+
+.TP 
+Remove columns based on their frequency of gaps:
+.B esl-alimask -g
+.I [options]
+.I msafile
+
+.TP 
+Remove columns based on their posterior probability annotation:
+.B esl-alimask -p
+.I [options]
+.I msafile
+
+.TP 
+Only remove columns that are gaps in the RF annotation:
+.B esl-alimask --rf-is-mask
+.I [options]
+.I msafile
+
+.TP
+The 
+.B -g 
+and 
+.B -p
+options may be used in combination. 
+
+.SH DESCRIPTION
+
+.B esl-alimask
+reads a single input alignment, removes some columns from it
+(i.e. masks it), and outputs the masked alignment.
+
+.B esl-alimask 
+can be run in several different modes.
+
+.B esl-alimask 
+runs in "mask file mode" by default when two
+command-line arguments
+.I (msafile
+and 
+.I maskfile)
+are supplied. In this mode, a bit-vector mask in the 
+.I maskfile
+defines which columns to keep/remove.  The mask is a string that may
+only contain the characters '0' and '1'. A '0' at position x of the
+mask indicates that column x is excluded by the mask and should be
+removed during masking.  A '1' at position x of the mask indicates
+that column x is included by the mask and should not be removed during
+masking.  All lines in the
+.I maskfile
+that begin with '#' are considered comment lines and are ignored.  All
+non-whitespace characters in non-comment lines are considered to be
+part of the mask. The length of the mask must equal either the total
+number of columns in the (first) alignment in
+.I msafile,
+or the number of columns that are not gaps in the RF annotation of that
+alignment. The latter case is only valid if
+.I msafile
+is in Stockholm format and contains '#=GC RF' annotation. 
+If the mask length is equal to the non-gap RF length, all gap
+RF columns will automatically be removed.
+
+.B esl-alimask 
+runs in "truncation mode" if the 
+.B -t 
+option is used along with two command line arguments
+.I (msafile
+and 
+.I coords
+). In this mode,
+the alignment will be truncated by removing a contiguous set of
+columns from the beginning and end of the alignment. The second
+command line argument is the 
+.I coords
+string, that specifies what range of columns to keep in the
+alignment, all columns outside of this range will be removed.
+The
+.I coords
+string consists of start and end coordinates separated
+by any nonnumeric, nonwhitespace character or characters you like; for
+example,
+.I 23..100
+, 
+.I 23/100
+, or
+.I 23-100
+all work. To keep all alignment columns beginning at 23 until the
+end of the alignment, you 
+can omit the 
+.I end
+; for example,
+.I 23:
+would work.
+If the 
+.B --t-rf 
+option is used in combination with 
+.B -t,
+the coordinates in 
+.I coords
+are interpreted as non-gap RF column coordinates. For example,
+with 
+.B --t-rf, 
+a 
+.I coords 
+string of
+.I 23-100 
+would remove all columns before the 23rd non-gap residue in
+the "#=GC RF" annotation and after the 100th non-gap RF residue.
+
+.B esl-alimask 
+runs in "RF mask" mode if the
+.B --rf-is-mask
+option is enabled. In this mode, the alignment must be in Stockholm
+format and contain '#=GC RF' annotation. 
+.B esl-alimask
+will simply remove all columns that are gaps in the RF annotation.
+
+.B esl-alimask
+runs in "gap frequency mode" if 
+.B -g 
+is enabled. In this mode columns for which greater than 
+.I <f>
+fraction of the aligned sequences have gap residues will be removed. 
+By default, 
+.I <f>
+is 0.5, but this value can be changed to 
+.I <f>
+with the 
+.BI --gapthresh " <f>" 
+option. In this mode, if the alignment is in Stockholm format and
+has RF annotation, then all columns that are gaps in the RF annotation
+will automatically be removed, unless
+.B --saveins
+is enabled.
+
+.B esl-alimask
+runs in "posterior probability mode" if 
+.B -p 
+is enabled. In this mode,  masking is based on posterior probability annotation,
+and the input alignment must be in Stockholm format and contain '#=GR
+PP' (posterior probability) annotation for all sequences. As a special
+case, if 
+.B -p 
+is used in combination with 
+.B --ppcons,
+then the input alignment need not have '#=GR PP' annotation, but must
+contain '#=GC PP_cons' (posterior probability consensus) annotation.
+
+Characters in Stockholm alignment posterior probability annotation
+(both '#=GR PP' and '#=GC PP_cons') can have 12 possible values: the
+ten digits '0-9', '*', and '.'. If '.', the position must correspond to
+a gap in the sequence (for '#=GR PP') or in the RF annotation (for '#=GC
+PP_cons').  A value of '0' indicates a posterior probability of
+between 0.0 and 0.05, '1' indicates between 0.05 and 0.15, '2'
+indicates between 0.15 and 0.25 and so on up to '9' which indicates
+between 0.85 and 0.95. A value of '*' indicates a posterior
+probability of between 0.95 and 1.0. Higher posterior probabilities
+correspond to greater confidence that the aligned residue belongs
+where it appears in the alignment.
+
+When
+.B -p 
+is enabled with 
+.BI --ppcons " <x>",
+columns which have a consensus posterior probability of less than
+.I <x>
+will be removed during masking, and all other columns will not be removed.
+
+When
+.B -p 
+is enabled without
+.B --ppcons,
+the number of each possible PP value in each column is counted. 
+If 
+.I <x>
+fraction of the sequences that contain aligned residues (i.e. do not
+contain gaps) in a column have a posterior probability 
+greater than or equal to 
+.I <y>,
+then that column will not be removed during masking. All columns that
+do not meet this criterion will be removed. By default, the values of both
+.I <x>
+and 
+.I <y>
+are 0.95, but they can be changed with the 
+.BI --pfract " <x>"
+and 
+.BI --pthresh " <y>" 
+options, respectively.
+
+In posterior probability mode, all columns that have 0 residues
+(i.e. that are 100% gaps) will be automatically removed, unless the 
+.B --pallgapok
+option is enabled, in which case such columns will not be removed.
+
+Importantly, during posterior probability masking, unless
+.B --pavg 
+is used, PP annotation
+values are always considered to be the minimum numerical value in
+their corresponding range. For example, a PP '9' character is converted
+to a numerical posterior probability of 0.85. If
+.B --pavg 
+is used, PP annotation values are considered to be the average
+numerical value in their range. For example, a PP '9' character is
+converted to a numerical posterior probability of 0.90.
+
+In posterior probability mode, if the alignment is in Stockholm format and
+has RF annotation, then all columns that are gaps in the RF annotation
+will automatically be removed, unless
+.B --saveins
+is enabled.
+
+A single run of
+.B esl-alimask
+can perform both gap frequency-based masking and posterior
+probability-based masking if both the 
+.B -g
+and
+.B -p
+options are enabled. In this case, a gap frequency-based mask and a
+posterior probability-based mask are independently computed.  These
+two masks are combined to create the final mask using a logical 'and'
+operation. Any column that is to be removed by either the gap or PP
+mask will be removed by the final mask.
+
+With the
+.B --small
+option, 
+.B esl-alimask
+will operate in memory saving mode and the required RAM for the masking
+will be minimal (usually less than a Mb) and independent of the
+alignment size. To use 
+.B --small,
+the alignment alphabet must be specified with either
+.B --amino,
+.B --dna, 
+or 
+.B --rna,
+and the alignment must be in Pfam format (non-interleaved, 1
+line/sequence Stockholm format). Pfam format is the default output
+format of INFERNAL's
+.B cmalign 
+program. Without 
+.B --small
+the required RAM will be equal to roughly the size of the first input
+alignment (the size of the alignment file itself if it only contains
+one alignment).
+
+.SH OUTPUT
+
+By default, 
+.B esl-alimask
+will print only the masked alignment to stdout and then exit.
+If the
+.BI -o " <f>"
+option is used, the alignment will be saved to file 
+.I <f>
+, and information on the number of columns kept and removed will be
+printed to stdout. If 
+.B -q
+is used in combination with 
+.B -o,
+nothing is printed to stdout.
+
+The mask(s) computed by 
+.B esl-alimask
+when the 
+.B -t
+,
+.B -p
+,
+.B -g
+,
+or
+.B --rf-is-mask
+options are used can be saved to output files using the options
+.BI --fmask-rf " <f>",
+.BI --fmask-all " <f>",
+.BI --gmask-rf " <f>",
+.BI --gmask-all " <f>",
+.BI --pmask-rf " <f>",
+and 
+.BI --pmask-all " <f>".
+In all cases, 
+.I <f> 
+will contain a single line, a bit vector of length
+.B n,
+where 
+.B n 
+is the either the total number of columns in the alignment (for the
+options suffixed with 'all') or the number of non-gap columns in the
+RF annotation (for the options suffixed with 'rf'). The mask will be a
+string of '0' and '1' characters: a '0' at position x in the mask
+indicates column x was removed (excluded) by the mask, and a '1' at
+position x indicates column x was kept (included) by the mask. For
+the 'rf' suffixed options, the mask only applies to non-gap RF
+columns.  The options beginning with 'f' will save the 'final' mask
+used to keep/remove columns from the alignment. The options beginning
+with 'g' save the masks based on gap frequency and require
+.B -g.
+The options beginning with 'p' save the masks based on posterior
+probabilities and require 
+.B -p.
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+.TP
+.BI -o " <f>"
+Output the final, masked alignment to file 
+.I <f>
+instead of to
+.I stdout.
+When this option is used, information about the number of columns
+kept/removed is printed to stdout.
+
+.TP
+.B -q
+Be quiet; do not print anything to stdout. 
+This option can only be used in combination with the
+.B -o 
+option.
+
+.TP
+.B --small
+Operate in memory saving mode. Required RAM will be independent of the
+size of the input alignment to mask, instead of roughly the size of the
+input alignment. When enabled, the alignment must be in
+Pfam Stockholm (non-interleaved 1 line/seq) format (see
+esl-reformat) and the output alignment will be in Pfam format.
+
+.TP 
+.BI --informat "<s> "
+Specify that the input alignment be format 
+.I <s>.
+Choices for 
+.I <s> 
+are: 'stockholm', 'pfam', 'a2m', 'psiblast', 'afa'. 'pfam' is a special
+case of Stockholm format in which each sequence is placed on a single
+line, instead of being interleaved; 'afa' is aligned FASTA. By default
+alignments are assumed to be in Stockholm format (either interleaved
+or Pfam), unless 
+.B --small
+is enabled, in which case alignments are assumed to be in 
+Pfam format.
+
+.TP 
+.BI --outformat " <s>"
+Specify that the output alignment be format 
+.I <s>.
+Choices for 
+.I <s> 
+are: 'stockholm', 'pfam', 'a2m', 'psiblast', 'afa'. 
+By default the alignment is output in interleaved Stockholm format unless 
+.B --small
+is enabled, in which case the alignment is output in Pfam format.
+
+.TP 
+.BI --fmask-rf " <f>"
+Save the non-gap RF-length final mask used to mask the alignment
+to file
+.I <f>.
+The input alignment must be in Stockholm format and contain '#=GC RF'
+annotation for this option to be valid. See the OUTPUT section above for
+more details on output mask files.
+
+.TP 
+.BI --fmask-all " <f>"
+Save the full alignment-length final mask used to mask the alignment
+to file
+.I <f>.
+See the OUTPUT section above for more details on output mask files.
+
+.TP 
+.B --amino
+Specify that the input alignment is a protein alignment.
+By default,
+.B esl-alimask
+will try to autodetect the alphabet, but if the alignment is
+sufficiently small it may be ambiguous. This option defines the
+alphabet as protein. Importantly, if 
+.B --small
+is enabled, the alphabet must be specified with either
+.B --amino,
+.B --dna,
+or 
+.B --rna.
+
+.TP 
+.B --dna
+Specify that the input alignment is a DNA alignment.
+
+.TP 
+.B --rna
+Specify that the input alignment is an RNA alignment. 
+
+.TP 
+.B --t-rf
+With -t, specify that the start and end coordinates defined in
+the second command line argument 
+.I coords
+correspond to non-gap RF coordinates. To use this option, the
+alignment must be in Stockholm format and have "#=GC RF"
+annotation. See the DESCRIPTION section for an example of using the
+.B --t-rf
+option.
+
+.TP 
+.B --t-rmins
+With -t, specify that all columns that are gaps in the reference (RF)
+annotation in between the specified start and end coordinates be
+removed. By default, these columns will be kept.
+To use this option, the alignment must be in  Stockholm format and
+have "#=GC RF" annotation. 
+
+.TP 
+.BI --gapthresh " <x>"
+With -g, specify that a column is kept (included by mask) if no more
+than 
+.I <f>
+fraction of sequences in the alignment have a gap ('.', '-', or '_')
+at that position. All other columns are removed (excluded by mask).
+By default, 
+.I <x>
+is 0.5.
+
+.TP 
+.BI --gmask-rf " <f>"
+Save the non-gap RF-length gap frequency-based mask used to mask the alignment
+to file
+.I <f>.
+The input alignment must be in Stockholm format and contain '#=GC RF'
+annotation for this option to be valid. See the OUTPUT section above for
+more details on output mask files.
+
+.TP 
+.BI --gmask-all " <f>"
+Save the full alignment-length gap frequency-based mask used to mask the alignment
+to file
+.I <f>.
+See the OUTPUT section above for more details on output mask files.
+
+
+.TP 
+.BI --pfract " <x>"
+With -p, specify that a column is kept (included by mask) if the
+fraction of sequences with a non-gap residue in that column with a 
+posterior probability of at least 
+.I <y>
+(from 
+.BI --pthresh " <y>"
+) is 
+.I <x>
+or greater. All other columns are removed (excluded by mask)
+By default 
+.I <x> 
+is 0.95. 
+
+.TP 
+.BI --pthresh " <y>"
+With -p, specify that a column is kept (included by mask) if 
+.I <x>
+(from 
+.BI --pfract " <x>"
+)
+fraction of sequences with a non-gap residue in that column have a 
+posterior probability of at least 
+.I <y>. 
+All other columns are removed (excluded by mask).
+By default 
+.I <y> 
+is 0.95. See the DESCRIPTION section for more on
+posterior probability (PP) masking. 
+Due to the granularity of the PP annotation, different 
+.I <y>
+values within a range covered by a single PP character will be
+have the same effect on masking. For example, using 
+.BI --pthresh " 0.86" 
+will have the same effect as using
+.BI --pthresh " 0.94".
+
+.TP 
+.BI --pavg " <x>"
+With -p, specify that a column is kept (included by mask) if 
+the average posterior probability of non-gap residues in that column
+is at least
+.I <x>.
+See the DESCRIPTION section for more on
+posterior probability (PP) masking. 
+
+.TP 
+.BI --ppcons " <x>"
+With -p, use the '#=GC PP_cons' annotation to define which columns to
+keep/remove. A column is kept (included by mask) if the PP_cons value
+for that column is 
+.I <x>
+or greater. Otherwise it is removed.
+
+.TP 
+.B --pallgapok
+With -p, do not automatically remove any columns that are 100% gaps
+(i.e. contain 0 aligned residues). By default, such columns will be
+removed.
+
+.TP 
+.BI --pmask-rf " <f>"
+Save the non-gap RF-length posterior probability-based mask used to mask the alignment
+to file
+.I <f>.
+The input alignment must be in Stockholm format and contain '#=GC RF'
+annotation for this option to be valid. See the OUTPUT section above for
+more details on output mask files.
+
+.TP 
+.BI --pmask-all " <f>"
+Save the full alignment-length posterior probability-based mask used to mask the alignment
+to file
+.I <f>.
+See the OUTPUT section above for more details on output mask files.
+
+
+.TP
+.B --keepins 
+If 
+.B -p 
+and/or
+.B -g
+is enabled and the alignment is in Stockholm or Pfam format and has '#=GC RF'
+annotation, then allow columns that are gaps in the RF annotation to
+possibly be kept. By default, all gap RF columns would be removed
+automatically, but with this option enabled gap and non-gap RF columns
+are treated identically. 
+To automatically remove all gap RF columns when using a 
+.I maskfile 
+, then define the mask in 
+.I maskfile
+as having length equal to the non-gap RF length in the alignment.
+To automatically remove all gap RF columns when using 
+.B -t,
+use the
+.B --t-rmins
+option.
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
+
+
+
+
+
diff --git a/miniapps/esl-alimerge.c b/miniapps/esl-alimerge.c
new file mode 100644
index 0000000..51d70cb
--- /dev/null
+++ b/miniapps/esl-alimerge.c
@@ -0,0 +1,1810 @@
+/* Merge alignments into a single alignment based on their reference (RF) annotation.
+ * 
+ * Special care is taken to be consistent with missing data '~'
+ * annotation in two different contexts. 
+ * 
+ * First, from Infernal 1.1rc2 and later cmalign and cmsearch -A
+ * output alignments: '~' can occur in GC RF and SS_cons
+ * annotation. The '~' after a given nongap/nonmissing RF position x
+ * (and before nongap/nonmissing RF position x+1) must all occur 5' of
+ * all inserted positions (gap: '.') that occur between x and x+1.
+ *
+ * Second, from HMMER3, hmmbuild reads and writes '~' in sequences to
+ * mark the ends of fragments. Any fragment must begin and end with a
+ * contiguous string of 1 or more '~'. '~' characters are not allowed
+ * within sequences anywhere except within these leading and trailing
+ * contiguous stretches.
+ * 
+ * esl-alimerge will accept as input and produce as output alignments
+ * that are consistent with both of these conventions.
+ *
+ * EPN, Fri Nov 20 16:28:59 2009
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_distance.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile2.h"
+#include "esl_sqio.h"
+#include "esl_stopwatch.h"
+#include "esl_vectorops.h"
+
+static char banner[] = "merge alignments based on their reference (RF) annotation";
+static char usage1[]  = "[options] <alignment file 1> <alignment file 2>";
+static char usage2[]  = "[options] --list <file listing n > 1 ali files to merge>\n\
+\n\
+  Input alignments must be in Stockholm or Pfam format.\n\
+  Ouput format choices\n\
+  --------------------\n\
+  stockholm [default]\n\
+  pfam\n\
+  a2m\n\
+  psiblast\n\
+  afa";
+
+static void read_list_file(char *listfile, char ***ret_alifile_list, int *ret_nalifile);
+static int  update_maxgap_and_maxmis(ESL_MSA *msa, char *errbuf, int clen, int64_t alen, int *maxgap, int *maxmis); 
+static int  validate_and_copy_msa_annotation(const ESL_GETOPTS *go, int outfmt, ESL_MSA *mmsa, ESL_MSA **msaA, int clen, int nmsa, int alen_merged, int *maxgap, int *maxmis, char *errbuf);
+static int  add_msa(ESL_MSA *mmsa, char *errbuf, ESL_MSA *msa_to_add, int *maxgap, int *maxmis, int clen, int alen_merged);
+static int  inflate_string_with_gaps_and_missing(char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, int *nmisA, char mischar, char **ret_dst_str);
+static int  inflate_seq_with_gaps(const ESL_ALPHABET *abc, char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, char **ret_dst_str);
+static int  validate_no_nongaps_in_rf_gaps(const ESL_ALPHABET *abc, char *rf_str, char *other_str, int64_t len);
+static int  determine_gap_columns_to_add(ESL_MSA *msa, int *maxgap, int *maxmis, int clen, int **ret_ngapA, int **ret_nmisA, int **ret_neitherA, char *errbuf);
+static void write_pfam_msa_top(FILE *fp, ESL_MSA *msa);
+static void write_pfam_msa_gc(FILE *fp, ESL_MSA *msa, int maxwidth);
+static int64_t maxwidth(char **s, int n);
+static int  rfchar_is_nongap_nonmissing(const ESL_ALPHABET *abc, char rfchar);
+ 
+static ESL_OPTIONS options[] = {
+  /* name         type          default  env   range togs reqs  incomp           help                                                             docgroup */
+  { "--list",     eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL, NULL,            "command-line argument is a file that lists ali files to merge",  99 },
+  { "-h",         eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL, NULL,            "help; show brief info on version and usage",                     1 },
+  { "-o",         eslARG_OUTFILE,  NULL, NULL, NULL, NULL,NULL, NULL,            "output the final alignment to file <f>, not stdout",             1 },
+  { "-v",         eslARG_NONE,    FALSE, NULL, NULL, NULL,"-o", NULL,            "print info on merge to stdout; requires -o",                     1 },
+  { "--small",    eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL, NULL,            "use minimal RAM (RAM usage will be independent of aln sizes)",   1 },
+  { "--rfonly",   eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL, NULL,            "remove all columns that are gaps in GC RF annotation",           1 },
+  { "--informat", eslARG_STRING,  FALSE, NULL, NULL, NULL,NULL, NULL,            "NOT YET DISPLAYED",                                              99 },
+  { "--outformat",eslARG_STRING,  FALSE, NULL, NULL, NULL,NULL, NULL,            "specify that output aln be format <s> (see choices above)",      1 },
+  { "--rna",      eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL,"--amino,--rna",  "alignments to merge are RNA alignments",                         1 },
+  { "--dna",      eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL,"--amino,--rna",  "alignments to merge are DNA alignments",                         1 },
+  { "--amino",    eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL,"--dna,--rna",    "alignments to merge are protein alignments",                     1 },
+  { "--stall",    eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL, NULL,            "arrest after start: for debugging under gdb",                    99 },  
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+int
+main(int argc, char **argv)
+{
+  int           status;		               /* easel return code               */
+  ESL_GETOPTS  *go      = NULL;	               /* application configuration       */
+  ESL_ALPHABET *abc     = NULL;      	       /* biological alphabet             */
+  char         *msafile1 = NULL;	       /* msa file 1 (stays NULL if --list) */
+  char         *msafile2 = NULL;	       /* msa file 2 (stays NULL if --list) */
+  char         *listfile = NULL;	       /* list file name (stays NULL unless --list) */
+  int           infmt   = eslMSAFILE_UNKNOWN;  /* format code for input alifiles  */
+  int           outfmt  = eslMSAFILE_UNKNOWN;  /* format code for output ali      */
+  ESL_MSAFILE  *afp     = NULL;	               /* open alignment file, normal interface */
+  ESL_MSAFILE2 *afp2    = NULL;	               /* open alignment file, small-mem interface */
+  FILE         *ofp;		               /* output file (default is stdout) */
+  char        **alifile_list = NULL;           /* list of alignment files to merge */
+  int           nalifile;                      /* size of alifile_list             */
+  int           do_stall;                      /* used to stall when debugging     */
+  int           fi;                            /* counter over alignment files */
+  int           ai, ai2;                       /* counters over alignments */
+  int           nali_tot;                      /* number of alignments in all files */
+  int          *nali_per_file = NULL;          /* [0..nalifile-1] number of alignments per file */
+  int           nseq_tot;                      /* number of sequences in all alignments */
+  int           nseq_cur;                      /* number of sequences in current alignment */
+  int64_t       alen_cur;                      /* length of current alignment */
+  int64_t      *alenA = NULL;                  /* [0..nali_tot-1] alignment length of input msas (even after 
+						* potentially removingeinserts (--rfonly)) */
+  ESL_MSA     **msaA = NULL;                   /* [0..nali_tot-1] all msas read from all files */
+  int          *maxgap = NULL;                 /* [0..cpos..cm->clen+1] max number of gap columns
+						* before each consensus position in all alignments */
+  int          *maxmis = NULL;                 /* [0..cpos..cm->clen+1] max number of missing data columns
+						* before each consensus position in all alignments */
+  int           nalloc = 0;                    /* current size of msaA */
+  int           chunksize = 10;                /* size to increase nalloc by when realloc'ing */
+  void         *tmp;                           /* for ESL_RALLOC() */
+  int           clen;                          /* consensus length (non-gap #=GC RF length) of all alignments */
+  int           cur_clen;                      /* consensus length (non-gap #=GC RF length) of current alignments */
+  int           apos;                          /* alignment position */
+  ESL_MSA      *mmsa = NULL;                   /* the merged alignment created by merging all alignments in msaA */
+  int           alen_mmsa;                     /* number of columns in merged MSA */
+  char          errbuf[eslERRBUFSIZE];         /* buffer for error messages */
+  char         *tmpstr;                        /* used if -v, for printing file names */
+  int         **usemeA = NULL;                 /* [0..nali_tot-1][0..alen]  used only if --rfonly enabled, for removing gap RF columns */
+  ESL_STOPWATCH *w  = NULL;                    /* for timing the merge, only used if -o enabled */
+  int           do_small;                      /* TRUE if --small, operate in special small memory mode, aln seq data is not stored */
+  int           do_rfonly;                     /* TRUE if --rfonly, output only non-gap RF columns (remove all insert columns) */
+  int          *ngapA = NULL;              /* [0..alen] number of insert gap columns to add after each alignment column when merging */
+  int          *nmisA = NULL;               /* [0..alen] number of missing data ('~') gap columns to add after each alignment column when merging */
+  int          *neitherA = NULL;           /* [0..apos..alen] = ngapA[apos] + nmisA[apos] */
+
+  /* output formatting, only relevant if -v */
+  char      *namedashes = NULL;                /* string of dashes, an underline */
+  int        ni;                               /* counter                        */
+  int        namewidth;                        /* max width of file name         */
+  int        tmp_len;                          /* current width of merged aln    */
+
+  /* variables only used in small mode (--small) */
+  int           ngs_cur;                       /* number of GS lines in current alignment (only used if do_small) */
+  int           gs_exists = FALSE;             /* set to TRUE if do_small and any input aln has >= 1 GS line */
+  int           maxname, maxgf, maxgc, maxgr;  /* max length of seqname, GF tag, GC tag, GR tag in all input alignments */
+  int           maxname_cur, maxgf_cur, maxgc_cur, maxgr_cur; /* max length of seqname, GF tag, GC tag, GR tag in current input alignment */
+  int           margin;                        /* total margin length for output msa */
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage1);
+      esl_usage(stdout, argv[0], usage2);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if (esl_opt_GetBoolean(go, "-h") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage1);
+      esl_usage (stdout, argv[0], usage2);
+      puts("\n where options are:");
+      esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+      exit(0);
+    }
+
+  if(((! esl_opt_GetBoolean(go, "--list")) && (esl_opt_ArgNumber(go) != 2)) ||
+     ((  esl_opt_GetBoolean(go, "--list")) && (esl_opt_ArgNumber(go) != 1))) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage1);
+      esl_usage(stdout, argv[0], usage2);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if(esl_opt_GetBoolean(go, "--list")) { 
+    listfile = esl_opt_GetArg(go, 1);
+  }
+  else { 
+    msafile1 = esl_opt_GetArg(go, 1);
+    msafile2 = esl_opt_GetArg(go, 2);
+  }
+
+  do_small  = (esl_opt_IsOn(go, "--small")) ? TRUE : FALSE;
+  do_rfonly = (esl_opt_IsOn(go, "--rfonly"))  ? TRUE : FALSE;
+
+  /* open output file */
+  if (esl_opt_GetString(go, "-o") != NULL) {
+    if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) 
+      esl_fatal("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o"));
+  } else ofp = stdout;
+
+  if (esl_opt_IsOn(go, "--informat")) {
+    infmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"));
+    if (infmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); 
+    if (do_small && infmt != eslMSAFILE_PFAM) esl_fatal("small memory mode requires Pfam formatted alignments"); 
+  }
+  if (esl_opt_IsOn(go, "--outformat")) {
+    outfmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat"));
+    if (outfmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --outformat", esl_opt_GetString(go, "--outformat")); 
+    if (do_small && outfmt != eslMSAFILE_PFAM) esl_fatal("we can only output Pfam formatted alignments in small memory mode"); 
+  }
+  else outfmt = eslMSAFILE_STOCKHOLM;
+
+  if (do_small) { 
+    infmt  = eslMSAFILE_PFAM; /* this must be true, else we can't do small memory mode */
+    outfmt = eslMSAFILE_PFAM;
+  }
+
+  do_stall = esl_opt_GetBoolean(go, "--stall"); /* a stall point for attaching gdb */
+  while (do_stall); 
+
+  /* determine file names to merge */
+  if(listfile != NULL) { /* read list file */
+    read_list_file(listfile, &alifile_list, &nalifile);
+    if(nalifile == 0) esl_fatal("Failed to read a single alignment file name from %s\n", listfile);
+  }
+  else { /* we're merging two alignment files from command-line */
+    nalifile = 2;
+    ESL_ALLOC(alifile_list, sizeof(char *) * nalifile);
+    if((status = esl_strdup(msafile1, -1, &(alifile_list[0]))) != eslOK) esl_fatal("Error storing alignment file name %s, error status: %d\n", msafile1, status);
+    if((status = esl_strdup(msafile2, -1, &(alifile_list[1]))) != eslOK) esl_fatal("Error storing alignment file name %s, error status: %d\n", msafile2, status);
+  }
+
+  /* create and start stopwatch */
+  if(ofp != stdout) {
+    w = esl_stopwatch_Create();
+    esl_stopwatch_Start(w);
+  }
+
+  if(esl_opt_GetBoolean(go, "-v")) { 
+    /* determine the longest file name in alifile_list */
+    namewidth = 9; /* length of 'file name' */
+    for(fi = 0; fi < nalifile; fi++) { 
+      if((status = esl_FileTail(alifile_list[fi], FALSE, &tmpstr)) != eslOK) esl_fatal("Memory allocation error.");
+      namewidth = ESL_MAX(namewidth, strlen(tmpstr));
+      free(tmpstr);
+    }
+    
+    ESL_ALLOC(namedashes, sizeof(char) * (namewidth+1));
+    namedashes[namewidth] = '\0';
+    for(ni = 0; ni < namewidth; ni++) namedashes[ni] = '-';
+    fprintf(stdout, "# Reading %d alignment files...\n", nalifile);
+    fprintf(stdout, "#\n");
+    fprintf(stdout, "# %7s  %-*s  %7s  %9s  %9s  %13s  %8s\n", "",        namewidth,"",          "",        "",          "",            "",               "ncols");
+    fprintf(stdout, "# %7s  %-*s  %7s  %9s  %9s  %13s  %8s\n", "file #",  namewidth,"file name", "ali #",   "#seq/ali",  "ncols/ali",   "# seq total",    "required");
+    fprintf(stdout, "# %7s  %*s  %7s  %9s  %9s  %13s  %8s\n", "-------", namewidth, namedashes,  "-------", "---------", "---------",   "-------------", "--------");
+  }
+  
+  /* Allocate and initialize */
+  nalloc = chunksize;
+  ESL_ALLOC(msaA,   sizeof(ESL_MSA *) * nalloc);
+  ESL_ALLOC(alenA,  sizeof(int64_t) * nalloc);
+  if(do_rfonly) ESL_ALLOC(usemeA, sizeof(int *) * nalloc);
+
+  /* abc handling is weird. We only use alphabet to define gap characters in this miniapp.
+   * msa's are actually read in text mode. Thus eslRNA suffices for anything.
+   */
+  if      (esl_opt_GetBoolean(go, "--amino"))   abc = esl_alphabet_Create(eslAMINO);
+  else if (esl_opt_GetBoolean(go, "--dna"))     abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--rna"))     abc = esl_alphabet_Create(eslRNA);
+  else if (do_small)                      	abc = esl_alphabet_Create(eslRNA); /* alphabet is only used to define gap characters, so (in this miniapp) we're okay specifying RNA for any alignment (even non-RNA ones) */
+  else                                          abc = esl_alphabet_Create(eslRNA); /* ditto */
+
+  /****************************************************************
+   *  Read alignments one at a time, storing them all, separately *
+   ****************************************************************/
+
+  ai = 0;
+  nseq_tot = 0;
+  maxname = maxgf = maxgc = maxgr = 0;
+  ESL_ALLOC(nali_per_file, sizeof(int) * nalifile);
+  esl_vec_ISet(nali_per_file, nalifile, 0);
+
+  for (fi = 0; fi < nalifile; fi++) { 
+    
+    if (do_small) 
+      {
+	status  = esl_msafile2_Open(alifile_list[fi], NULL, &afp2);
+	if      (status == eslENOTFOUND) esl_fatal("Alignment file %s doesn't exist or is not readable\n", alifile_list[fi]);
+	else if (status != eslOK)        esl_fatal("Alignment file %s open failed with error %d\n", alifile_list[fi], status);
+      }
+    else 
+      {
+	status = esl_msafile_Open(NULL, alifile_list[fi], NULL, infmt, NULL, &afp);
+	if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+      }
+
+
+    /* while loop: while we have an alignment in current alignment file, (statement looks weird b/c we use a different function if --small) */
+    while((status = (do_small) ? 
+	   esl_msafile2_ReadInfoPfam(afp2, NULL, NULL, -1, NULL,NULL, &(msaA[ai]), &nseq_cur, &alen_cur, &ngs_cur, &maxname_cur, &maxgf_cur, &maxgc_cur, &maxgr_cur, NULL, NULL, NULL, NULL, NULL) : 
+	   esl_msafile_Read        (afp, &(msaA[ai]))) == eslOK) { 
+
+      if(msaA[ai]->rf == NULL) esl_fatal("Error, all alignments must have #=GC RF annotation; alignment %d of file %d does not (%s)\n", nali_per_file[fi], (fi+1), alifile_list[fi]); 
+      msaA[ai]->abc = abc; /* msa's are read in text mode, so this is (currently) only used to define gap characters, it doesn't even have to be the correct alphabet. if --small, this is set as RNA regardless of input */
+
+      if (do_small) { 
+	maxname = ESL_MAX(maxname, maxname_cur); 
+	maxgf   = ESL_MAX(maxgf, maxgf_cur); 
+	maxgc   = ESL_MAX(maxgc, maxgc_cur); 
+	maxgr   = ESL_MAX(maxgr, maxgr_cur); 
+	msaA[ai]->alen = alen_cur;
+	if(ngs_cur > 0) gs_exists = TRUE; 
+      }
+      else { 
+	nseq_cur = msaA[ai]->nseq; 
+      }
+      alenA[ai] = msaA[ai]->alen; /* impt if --small and --rfonly, to remember total width of aln to expect in second pass */
+      nali_per_file[fi]++;
+      nseq_tot += nseq_cur;
+      
+      /* reallocate per-alignment data, if nec */
+      if((ai+1) == nalloc) { 
+	nalloc += chunksize; 
+	ESL_RALLOC(msaA,   tmp, sizeof(ESL_MSA *) * nalloc); 
+	ESL_RALLOC(alenA,  tmp, sizeof(int64_t) * nalloc); 
+	for(ai2 = ai+1; ai2 < nalloc; ai2++) { msaA[ai2] = NULL; } 
+	if(do_rfonly) { 
+	  ESL_RALLOC(usemeA, tmp, sizeof(int *) * nalloc); 
+	  for(ai2 = ai+1; ai2 < nalloc; ai2++) { usemeA[ai2] = NULL; }
+	}
+      }
+
+      /* either store consensus (non-gap RF) length (if first aln), or verify it is what we expect */
+      cur_clen = 0;
+      for(apos = 0; apos < (int) msaA[ai]->alen; apos++) { 
+	if(rfchar_is_nongap_nonmissing(msaA[ai]->abc, msaA[ai]->rf[apos])) cur_clen++; 
+      }
+      if(ai == 0) { /* first alignment, store clen, allocate maxgap, maxmis */
+	clen = cur_clen;
+	ESL_ALLOC(maxgap, sizeof(int) * (clen+1)); 
+	esl_vec_ISet(maxgap, (clen+1), 0);
+	ESL_ALLOC(maxmis, sizeof(int) * (clen+1)); 
+	esl_vec_ISet(maxmis, (clen+1), 0); /* these will all stay 0 unless we see '~' in the alignments */
+      }
+      else if(cur_clen != clen) { 
+	esl_fatal("Error, all alignments must have identical non-gap #=GC RF lengths; expected (RF length of first ali read): %d,\nalignment %d of file %d length is %d (%s))\n", clen, nali_per_file[fi], (fi+1), cur_clen, alifile_list[fi]); 
+      }
+      
+
+      if(do_rfonly) { 
+	/* Remove all columns that are gaps/missing data in the RF annotation, we keep an array of usemes, 
+	 * one per aln, in case of --small, so we know useme upon second pass of alignment files */
+	ESL_ALLOC(usemeA[ai], sizeof(int) * (msaA[ai]->alen));
+	for(apos = 0; apos < msaA[ai]->alen; apos++) { usemeA[ai][apos] = (rfchar_is_nongap_nonmissing(abc, msaA[ai]->rf[apos])) ? TRUE : FALSE; }
+	if((status = esl_msa_ColumnSubset(msaA[ai], errbuf, usemeA[ai])) != eslOK) { 
+	  esl_fatal("status code: %d removing gap RF columns for msa %d from file %s:\n%s", status, (ai+1), alifile_list[fi], errbuf);
+	}
+      }
+      else { /* --rfonly not enabled, determine max number inserts between each position */
+	/* update_maxgap_and_maxmis checks to make sure the msa follows our rule for missing data and gaps:
+	 * for all positions x..y b/t any two adjacent nongap RF positions (x-1 and y+1 are nongap RF positions) 
+	 * all missing data columns '~' must come before all gap positions ('.', '-', or '_')
+	 */
+      	if((status = update_maxgap_and_maxmis(msaA[ai], errbuf, clen, msaA[ai]->alen, maxgap, maxmis)) != eslOK) esl_fatal(errbuf);
+      }
+      if(esl_opt_GetBoolean(go, "-v")) { 
+	if((status = esl_FileTail(alifile_list[fi], FALSE, &tmpstr)) != eslOK) esl_fatal("Memory allocation error.");
+	tmp_len = clen + esl_vec_ISum(maxgap, clen+1) + esl_vec_ISum(maxmis, clen+1);
+	fprintf(stdout, "  %7d  %-*s  %7d  %9d  %9" PRId64 "  %13d  %8d\n", (fi+1),  namewidth, tmpstr, (ai+1), nseq_cur, msaA[ai]->alen, nseq_tot, tmp_len);
+	free(tmpstr);
+      }
+      ai++;
+    } /* end of while esl_msafile_Read() loop */
+
+    if (do_small) 
+      {
+	if      (status == eslEFORMAT) esl_fatal("Alignment file %s, parse error:\n%s\n", alifile_list[fi], afp2->errbuf);
+	else if (status == eslEINVAL)  esl_fatal("Alignment file %s, parse error:\n%s\n", alifile_list[fi], afp2->errbuf);
+	else if (status != eslEOF)     esl_fatal("Alignment file %s, read failed with error code %d\n", alifile_list[fi], status);
+      }
+    else if (status != eslEOF) esl_msafile_ReadFailure(afp, status);
+
+    if(nali_per_file[fi] == 0)     esl_fatal("Failed to read any alignments from file %s\n", alifile_list[fi]);
+
+    if (do_small) esl_msafile2_Close(afp2);
+    else          esl_msafile_Close(afp);
+  } /* end of for (fi=0; fi < nalifile; fi++) */
+  nali_tot = ai;
+  
+  /*********************************************
+   *  Merge all alignments into the merged MSA *
+   *********************************************/
+
+  /* We allocate space for all sequences, but leave sequences as NULL (nseq = -1). 
+   * If (do_small) we didn't store the sequences on the first pass through the
+   * alignment files, and we'll never allocate space for the sequences in mmsa,
+   * we'll just output them as we reread them on another pass through the 
+   * individual alignments. If we read >= 1 GS line in any of the input alignments,
+   * we need to do an additional pass through the files, outputting only GS
+   * data. Then, in a final (3rd) pass we'll output aligned data.
+   *
+   * if (!do_small),  we have the sequences in memory, we'll copy these
+   * to the merged alignment, freeing them in the orignal msaA alignments 
+   * as we go so we never need to allocate the full mmsa while we still have
+   * the individual msas (in msaA[]) in memory. 
+   */     
+  mmsa = esl_msa_Create(nseq_tot, -1); 
+  alen_mmsa = clen + esl_vec_ISum(maxgap, clen+1) + esl_vec_ISum(maxmis, clen+1); 
+      
+  /* Determine what annotation from the input alignments 
+   * we will include in the merged MSA.
+   * See comments in header of validate_and_copy_msa_annotation()
+   * for rules on what we include.
+   */
+  if((status = validate_and_copy_msa_annotation(go, outfmt, mmsa, msaA, nali_tot, clen, alen_mmsa, maxgap, maxmis, errbuf)) != eslOK)
+    esl_fatal("Error while checking and copying individual MSA annotation to merged MSA:%s\n", errbuf);
+  
+  if (do_small) { 
+    /* Small memory mode, do up to 2 more passes through the input alignments:
+     * pass 2 will output only GS data at top of output alignment file (only performed if >= 1 GS line read in input files 
+     * pass 3 will output all aligned data at to output alignment file (always performed) 
+     */
+
+    /* output header, comments, and #=GF data */
+    write_pfam_msa_top(ofp, mmsa);
+    
+    if(ofp != stdout) { 
+      if(esl_opt_GetBoolean(go, "-v")) { fprintf(stdout, "#\n"); }
+      fprintf(stdout, "# Outputting merged alignment to file %s ... ", esl_opt_GetString(go, "-o")); 
+      fflush(stdout); 
+    }
+
+    /* if there was any GS annotation in any of the individual alignments,
+     * do second pass through alignment files, outputting GS annotation as we go. */
+    if(gs_exists) { 
+      ai = 0;
+      for(fi = 0; fi < nalifile; fi++) { 
+	/* we're in small memory mode... */
+	status = esl_msafile2_Open(alifile_list[fi], NULL, &afp2); /* this should work b/c it did on the first pass */
+	if      (status == eslENOTFOUND) esl_fatal("Second pass, alignment file %s doesn't exist or is not readable\n", alifile_list[fi]);
+	else if (status == eslEFORMAT)   esl_fatal("Second pass, couldn't determine format of alignment %s\n", alifile_list[fi]);
+	else if (status != eslOK)        esl_fatal("Second pass, alignment file %s open failed with error %d\n", alifile_list[fi], status);
+	
+	for(ai2 = 0; ai2 < nali_per_file[fi]; ai2++) { 
+	  status = esl_msafile2_RegurgitatePfam(afp2, ofp, 
+						maxname, maxgf, maxgc, maxgr, /* max width of a seq name, gf tag, gc tag, gr tag (irrelevant here) */
+						FALSE, /* regurgitate stockholm header ? */
+						FALSE, /* regurgitate // trailer ? */
+						FALSE, /* regurgitate blank lines */
+						FALSE, /* regurgitate comments */
+						FALSE, /* regurgitate GF ? */
+						TRUE,  /* regurgitate GS ? */
+						FALSE, /* regurgitate GC ? */
+						FALSE, /* regurgitate GR ? */
+						FALSE, /* regurgitate aseq ? */
+						NULL,  /* regurgitate all seqs, not a subset */ 
+						NULL,  /* regurgitate all seqs, not a subset */ 
+						NULL,  /* we're not keeping a subset of columns */
+						NULL,  /* we're not adding all gap columns */
+						alenA[ai], /* alignment length, as we read it in first pass (inserts may have been removed since then) */
+						'.',   /* gap char, irrelevant */
+						NULL,  /* don't return num seqs read */
+						NULL); /* don't return num seqs regurgitated */
+	  if(status == eslEOF) esl_fatal("Second pass, error out of alignments too soon, when trying to read aln %d of file %s", ai2, alifile_list[fi]); 
+	  if(status != eslOK)  esl_fatal("Second pass, error reading alignment %d of file %s: %s", ai2, alifile_list[fi], afp2->errbuf); 
+	  ai++;
+	  fflush(ofp);
+	}
+	esl_msafile2_Close(afp2);
+      }
+      fprintf(ofp, "\n"); /* a single blank line to separate GS annotation from aligned data */
+    }
+
+    /* do another (either second or third) pass through alignment files, outputting aligned sequence data (and GR) as we go */
+    ai = 0;
+    for(fi = 0; fi < nalifile; fi++) { 
+      status = esl_msafile2_Open(alifile_list[fi], NULL, &afp2); /* this should work b/c it did on the first pass */
+      if      (status == eslENOTFOUND) esl_fatal("Second pass, alignment file %s doesn't exist or is not readable\n", alifile_list[fi]);
+      else if (status == eslEFORMAT)   esl_fatal("Second pass, couldn't determine format of alignment %s\n", alifile_list[fi]);
+      else if (status != eslOK)        esl_fatal("Second pass, alignment file %s open failed with error %d\n", alifile_list[fi], status);
+
+      for(ai2 = 0; ai2 < nali_per_file[fi]; ai2++) { 
+	/* determine how many all gap columns to insert after each alignment position
+	 * of the child msa when copying it to the merged msa */
+	if(! do_rfonly) { 
+	  if((status = determine_gap_columns_to_add(msaA[ai], maxgap, maxmis, clen, &(ngapA), &(nmisA), &(neitherA), errbuf)) != eslOK) 
+	    esl_fatal("error determining number of all gap columns to add to alignment %d of file %s", ai2, alifile_list[fi]);
+	}
+	status = esl_msafile2_RegurgitatePfam(afp2, ofp,
+					      maxname, maxgf, maxgc, maxgr, /* max width of a seq name, gf tag, gc tag, gr tag */
+					      FALSE, /* regurgitate stockholm header ? */
+					      FALSE, /* regurgitate // trailer ? */
+					      FALSE, /* regurgitate blank lines */
+					      FALSE, /* regurgitate comments */
+					      FALSE, /* regurgitate GF ? */
+					      FALSE, /* regurgitate GS ? */
+					      FALSE, /* regurgitate GC ? */
+					      TRUE,  /* regurgitate GR ? */
+					      TRUE,  /* regurgitate aseq ? */
+					      NULL,  /* regurgitate all seqs, not a subset */ 
+					      NULL,  /* regurgitate all seqs, not a subset */ 
+					      (do_rfonly) ? usemeA[ai] : NULL, 
+					      (do_rfonly) ? NULL       : neitherA,
+					      alenA[ai], /* alignment length, as we read it in first pass (inserts may have been removed since then) */
+					      '.',
+					      NULL,  /* don't return num seqs read */
+					      NULL); /* don't return num seqs regurgitated */
+
+	if(status == eslEOF) esl_fatal("Second pass, error out of alignments too soon, when trying to read aln %d of file %s", ai2, alifile_list[fi]); 
+	if(status != eslOK)  esl_fatal("Second pass, error reading alignment %d of file %s: %s", ai2, alifile_list[fi], afp2->errbuf); 
+	free(ngapA);
+	free(nmisA);
+	free(neitherA);
+	esl_msa_Destroy(msaA[ai]);
+	msaA[ai] = NULL;
+	ai++;
+	fflush(ofp);
+      }
+      esl_msafile2_Close(afp2);
+    }
+    /* finally, write GC annotation and '//' line */
+    margin = maxname + 1;
+    if (maxgc > 0 && maxgc+6 > margin) margin = maxgc+6;
+    if (maxgr > 0 && maxname+maxgr+7 > margin) margin = maxname+maxgr+7; 
+    write_pfam_msa_gc(ofp, mmsa, margin);
+  } /* end of if(do_small) */
+
+  else { /* ! do_small: for each input alignment in msaA[], add all aligned data to mmsa, then free it  */
+    if(esl_opt_GetBoolean(go, "-v")) { fprintf(stdout, "#\n# Merging alignments ... "); fflush(stdout); }
+    for(ai = 0; ai < nali_tot; ai++) { 
+      if((status = add_msa(mmsa, errbuf, msaA[ai], maxgap, maxmis, clen, alen_mmsa)) != eslOK) 
+	esl_fatal("Error, merging alignment %d of %d:\n%s.", (ai+1), nali_tot, errbuf);  
+      esl_msa_Destroy(msaA[ai]); /* note: the aligned sequences will have already been freed in add_msa() */
+      msaA[ai] = NULL;
+    }
+    if(esl_opt_GetBoolean(go, "-v")) { fprintf(stdout, "done.\n#\n"); fflush(stdout); }
+    mmsa->alen = alen_mmsa; /* it was -1, b/c we filled in each seq as we marched through each msaA[] alignment */
+    if(ofp != stdout) { fprintf(stdout, "# Saving alignment to file %s ... ", esl_opt_GetString(go, "-o")); }
+    status = esl_msafile_Write(ofp, mmsa, outfmt);
+    if(status != eslOK) esl_fatal("Error, during alignment output; status code: %d\n", status);
+  }
+  if(ofp != stdout) { 
+    fflush(stdout);
+    fclose(ofp);
+    fprintf(stdout, "done\n#\n");
+    fflush(stdout);
+    esl_stopwatch_Stop(w);
+    esl_stopwatch_Display(stdout, w, "# CPU time: ");
+  }
+
+  /* clean up and exit */
+  if(alifile_list != NULL) { 
+    for(fi = 0; fi < nalifile; fi++) { 
+      if(alifile_list[fi] != NULL) free(alifile_list[fi]); 
+    }
+    free(alifile_list);
+  }
+  if(usemeA != NULL) { 
+    for(ai = 0; ai < nali_tot; ai++) { 
+      free(usemeA[ai]);
+    }
+    free(usemeA);
+  }
+
+  if(nali_per_file != NULL) free(nali_per_file);
+  if(alenA != NULL)         free(alenA);
+  if(namedashes != NULL)    free(namedashes);
+  if(msaA != NULL)          free(msaA);
+  if(maxgap != NULL)        free(maxgap);
+  if(maxmis != NULL)        free(maxmis);
+  if(mmsa != NULL)          esl_msa_Destroy(mmsa);
+  if(abc  != NULL)          esl_alphabet_Destroy(abc);
+  if(w    != NULL)          esl_stopwatch_Destroy(w);
+  esl_getopts_Destroy(go);
+  return 0;
+
+ ERROR: 
+  esl_fatal("Out of memory. Reformat to Pfam with esl-reformat and try esl-alimerge --small.");
+  return eslEMEM; /*NEVERREACHED*/
+}
+
+/* Function: read_list_file
+ * Date:     EPN, Fri Nov 20 16:41:32 2009
+ * 
+ * Read a file listing alignment files to merge.
+ * Store file names in *ret_alifile_list and return it,
+ * return number of files in ret_nalifile and return it.
+ * Each white-space delimited token is considered a 
+ * different alignment name. 
+ * 
+ * Dies if we encounter an error.
+ * 
+ * Returns: void.
+ */
+void
+read_list_file(char *listfile, char ***ret_alifile_list, int *ret_nalifile)
+{
+  int             status;
+  ESL_FILEPARSER *efp;
+  char           *tok;
+  int nalloc     = 10;
+  int chunksize  = 10;
+  char **alifile_list = NULL;
+  int n = 0;
+  void *tmp;
+
+  ESL_ALLOC(alifile_list, sizeof(char *) * nalloc);
+  status = esl_fileparser_Open(listfile, NULL,  &efp);
+  if     (status == eslENOTFOUND) esl_fatal("List file %s does not exist or is not readable\n", listfile);
+  else if(status == eslEMEM)      esl_fatal("Ran out of memory when opening list file %s\n", listfile);
+  else if(status != eslOK)        esl_fatal("Error opening list file %s\n", listfile);
+
+  esl_fileparser_SetCommentChar(efp, '#');
+  while((status = esl_fileparser_GetToken(efp, &tok, NULL)) != eslEOF) {
+    if(n == nalloc) { nalloc += chunksize; ESL_RALLOC(alifile_list, tmp, sizeof(char *) * nalloc); }
+    if((status = esl_strdup(tok, -1, &(alifile_list[n++]))) != eslOK) {
+      esl_fatal("Error storing alignment file name while reading list file %s, error status: %d\n", listfile, status);
+    }
+  }
+  esl_fileparser_Close(efp);
+  *ret_alifile_list = alifile_list;
+  *ret_nalifile = n;
+
+  return;
+
+ ERROR:
+  esl_fatal("Out of memory.");
+  return; /*NOTREACHED*/
+}
+
+
+/* Function: update_maxgap_and_maxmis
+ * Date:     EPN, Sun Nov 22 09:40:48 2009
+ *           (stolen from Infernal's cmalign.c)
+ * 
+ * Update maxgap[] and maxmis[], arrays that keeps track of the max
+ * number of gap columns and missing data columns ('~' gap #=GC RF)
+ * columns before each cpos (consensus (non-gap #=GC RF) column)
+ *
+ * We require that all missing columns between cpos x and x+1 occur before
+ * all gap columns between cpos x and x+1.
+ * 
+ * Consensus columns are index [0..cpos..clen].
+ * 
+ * max{gap,mis}[0]      is number of gap/missing columns before 1st cpos.
+ * max{gap,mis}[clen-1] is number of gap/missing columns before final cpos.
+ * max{gap,mis}[clen]   is number of gap/missing columns after  final cpos.
+ * 
+ * Returns: eslOK on success.
+ *          eslEINVAL if msa->rf is NULL, nongap RF length is not clen of
+ *                    for any two cpos x and x+1, a gap column precedes a
+ *                    missing data column.
+ * 
+ */
+int
+update_maxgap_and_maxmis(ESL_MSA *msa, char *errbuf, int clen, int64_t alen, int *maxgap, int *maxmis) 
+{
+  int apos;
+  int cpos = 0;
+  int ngap = 0;
+  int nmis = 0;
+
+  for(apos = 0; apos < alen; apos++) { 
+    if(esl_abc_CIsGap(msa->abc, msa->rf[apos])) { 
+      ngap++;
+    }
+    else if (esl_abc_CIsMissing(msa->abc, msa->rf[apos])) { 
+      nmis++;
+      if(ngap > 0) ESL_FAIL(eslEINVAL, errbuf, "after nongap RF pos %d, %d gap columns precede a missing data column (none should)", cpos, ngap);
+    }
+    else {
+      maxgap[cpos] = ESL_MAX(maxgap[cpos], ngap);
+      maxmis[cpos] = ESL_MAX(maxmis[cpos], nmis);
+      cpos++;
+      ngap = 0;
+      nmis = 0;
+    }
+  }
+      
+  /* update final value, max{ins,el}[clen+1], the number of inserts
+   * after the final consensus position */
+  maxgap[cpos] = ESL_MAX(maxgap[cpos], ngap);
+  maxmis[cpos] = ESL_MAX(maxmis[cpos], nmis);
+  if(cpos != clen) ESL_FAIL(eslEINVAL, errbuf, "second pass expected clen (%d) not equal to actual clen (%d).\n", clen, cpos);
+
+  return eslOK;
+}
+
+/* Function: validate_and_copy_msa_annotation
+ * Date:     EPN, Tue Nov 24 05:35:50 2009
+ * 
+ * Decide what individual MSA annotation from
+ * the input alignments in msaA[], if any, will be 
+ * included in the merged alignment (mmsa) and 
+ * add that info to it.
+ * 
+ * Rules for what to include in mmsa:
+ *
+ * We include name,desc,acc,author annotation in merged alignment 
+ * if it is identical in all msaA[] input alignments.
+ *
+ * We include comments and per-file (GF) annotation if they 
+ * are present and identical in all input msaA[] alignments.
+ *
+ * We include per-column (GC) annotation if it is present and
+ * identical *with-respect-to* #=GC RF annotation AND all 
+ * the annotation in gap  #=GC RF columns in all msaA[] are gaps 
+ * ('.'). This also pertains to the following parsed per-column 
+ * annotation: ss_cons, sa_cons, pp_cons, and rf. With rf,
+ * de-gapped rf annotation must be identical in all input 
+ * alignments period, if it is not we'll die with an error message. 
+ *
+ * Per-sequence information and per-residue information is always
+ * included in merged alignment. This is done by add_msa() function.
+ * 
+ * Returns: eslOK on success.
+ *          eslEINCONCEIVABLE if input/msa is corrupt in some way (example: ngf>0 but gf_tag[0] == NULL)
+ *          eslEMEM on memory error
+ *          if !eslOK, errbuf is filled before return
+ */
+int
+validate_and_copy_msa_annotation(const ESL_GETOPTS *go, int outfmt, ESL_MSA *mmsa, ESL_MSA **msaA, int nmsa, int clen, int alen_merged, int *maxgap, int *maxmis, char *errbuf)
+{
+  int status;
+  int j;                    /* counter over alignment annotations */
+  int j2;                   /* counter over alignment annotations */
+  int ai;                   /* counter over alignments */
+  char *dealigned   = NULL; /* a temporary, dealigned string */
+  char *dealigned2  = NULL; /* another temporary, dealigned string */
+  char *gapped_out  = NULL; /* a temporary string with gaps added to fit into merged aln */
+  int *ngapA    = NULL; /* [0..alen] number of insert gap columns to add after each alignment column when merging */
+  int *nmisA     = NULL; /* [0..alen] number of missing data ('~') gap columns to add after each alignment column when merging */
+  int *neitherA = NULL; /* [0..apos..alen] = ngapA[apos] + nmisA[apos] */
+  int do_add;
+  int found_tag;
+  int be_verbose = FALSE;
+
+  /* we only print info about annotation if -v AND we'll actually
+   * output it (as stockholm or pfam) 
+   * (we actually don't even need to be in this function if we're
+   * not output in stockholm or pfam...)
+   */
+  if((esl_opt_GetBoolean(go, "-v")) && 
+     (outfmt == eslMSAFILE_STOCKHOLM || outfmt == eslMSAFILE_PFAM)) 
+    { be_verbose = TRUE; }
+
+  if(be_verbose) fprintf(stdout, "#\n");
+
+  if(nmsa == 0) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "in validate_and_copy_msa_annotation(): zero child alignments.");
+
+  /* First, determine how many all gap columns to insert after each alignment position
+   * of the first child msa, so we can (possibly) gap out GC,SS_cons,SA_cons,PP_cons annotation 
+   * to appropriate length when adding it to the merged MSA. */
+  if((status = determine_gap_columns_to_add(msaA[0], maxgap, maxmis, clen, &(ngapA), &(nmisA), &(neitherA), errbuf)) != eslOK) 
+    return status;
+
+  /* Note: esl_strcmp() can handle NULL strings (they are not identical to non-NULL strings) */
+
+  /*********************************************************************/
+  /* Check if name annotation is identical in all alignments */
+  do_add = TRUE; /* until proven otherwise */
+  if(msaA[0]->name != NULL) { 
+    for(ai = 1; ai < nmsa; ai++) { 
+      if(esl_strcmp(msaA[0]->name, msaA[ai]->name) != 0) { do_add = FALSE; break; }
+    }
+    if(do_add) { 
+      if(be_verbose) fprintf(stdout, "# Identical name annotation from all alignments transferred to merged alignment.\n"); 
+      if((status = esl_strdup(msaA[0]->name, -1, &(mmsa->name))) != eslOK) goto ERROR;
+    }
+    else if(be_verbose) fprintf(stdout, "# Name annotation is not identical in all alignments; not included in merged alignment.\n"); 
+  }
+  else if(be_verbose) fprintf(stdout, "# Name annotation absent from (at least) first alignment; not included in merged alignment.\n"); 
+
+  /*********************************************************************/
+  /* Check if description annotation is identical in all alignments */
+  do_add = TRUE; /* until proven otherwise */
+  if(msaA[0]->desc != NULL) { 
+    for(ai = 1; ai < nmsa; ai++) { 
+      if(esl_strcmp(msaA[0]->desc, msaA[ai]->desc) != 0) { do_add = FALSE; break; }
+    }
+    if(do_add) { 
+      if(be_verbose) fprintf(stdout, "# Identical description annotation from all alignments transferred to merged alignment.\n"); 
+      if((status = esl_strdup(msaA[0]->desc, -1, &(mmsa->desc))) != eslOK) goto ERROR;
+    }
+    else if(be_verbose) fprintf(stdout, "# Description annotation is not identical in all alignments; not included in merged alignment.\n"); 
+  }
+  else if(be_verbose) fprintf(stdout, "# Description annotation absent from (at least) first alignment; not included in merged alignment.\n"); 
+
+  /*********************************************************************/
+  /* Check if accession annotation is identical in all alignments */
+  do_add = TRUE; /* until proven otherwise */
+  if(msaA[0]->acc != NULL) { 
+    for(ai = 1; ai < nmsa; ai++) { 
+      if(esl_strcmp(msaA[0]->acc, msaA[ai]->acc) != 0) { do_add = FALSE; break; }
+    }
+    if(do_add) { 
+      if(be_verbose) fprintf(stdout, "# Identical accession annotation from all alignments transferred to merged alignment.\n"); 
+      if((status = esl_strdup(msaA[0]->acc, -1, &(mmsa->acc))) != eslOK) goto ERROR;
+    }
+    else if(be_verbose) fprintf(stdout, "# Accession annotation is not identical in all alignments; not included in merged alignment.\n"); 
+  }
+  else if(be_verbose) fprintf(stdout, "# Accession annotation absent from (at least) first alignment; not included in merged alignment.\n"); 
+
+  /*********************************************************************/
+  /* Check if author annotation is identical in all alignments */
+  do_add = TRUE; /* until proven otherwise */
+  if(msaA[0]->au != NULL) { 
+    for(ai = 1; ai < nmsa; ai++) { 
+      if(esl_strcmp(msaA[0]->au, msaA[ai]->au) != 0) { do_add = FALSE; break; }
+    }
+    if(do_add) { 
+      if(be_verbose) fprintf(stdout, "# Identical author annotation from all alignments transferred to merged alignment.\n"); 
+      if((status = esl_strdup(msaA[0]->au, -1, &(mmsa->au))) != eslOK) goto ERROR;
+    }
+    else if(be_verbose) fprintf(stdout, "# Author annotation is not identical in all alignments; not included in merged alignment.\n"); 
+  }
+  else if(be_verbose) fprintf(stdout, "# Author annotation absent from (at least) first alignment; not included in merged alignment.\n"); 
+
+  /*********************************************************************/
+  /* Check per-file (GF) annotation, must be present and identical in all msaA[] alignments to be included */
+  if(msaA[0]->ngf > 0) { 
+    for(j = 0; j < msaA[0]->ngf; j++) { 
+      do_add = TRUE; /* until proven otherwise */
+      /* verify that what we think is true is true */
+      if(msaA[0]->gf_tag[j] == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpectedly, GF tag %d of msaA[0] is NULL, but msaA[0]->ngf is %d.\n", j, msaA[0]->ngf);
+      if(msaA[0]->gf[j]    == NULL)  ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpectedly, GF annotation %d of msaA[0] is NULL, but msaA[0]->ngf is %d.\n", j, msaA[0]->ngf);
+      for(ai = 1; ai < nmsa; ai++) { 
+	found_tag = FALSE;
+	for(j2 = 0; j2 < msaA[ai]->ngf; j2++) { 
+	  if(esl_strcmp(msaA[0]->gf_tag[j], msaA[ai]->gf_tag[j2]) == 0) {
+	    found_tag = TRUE;
+	    if(esl_strcmp(msaA[0]->gf[j], msaA[ai]->gf_tag[j2]) != 0) { 
+	      do_add = FALSE; 
+	    }
+	    break; /* if we found a match, do_add remains TRUE */
+	  }
+	}
+	if(found_tag && do_add) { 
+	  if(be_verbose) fprintf(stdout, "# Identical GF tag %s annotation from all alignments transferred to merged alignment.\n", msaA[0]->gf_tag[j]);
+	  if((status = esl_msa_AddGF(mmsa, msaA[0]->gf_tag[j], -1,  msaA[0]->gf[j], -1)) != eslOK) goto ERROR;
+	}
+	else { 
+	  if(be_verbose) fprintf(stdout, "# GF tag %s annotation from first alignment absent from >= 1 other alignments; not included in merged alignment.\n", msaA[0]->gf_tag[j]);
+	}
+      }
+    }
+  }
+  else if(be_verbose) fprintf(stdout, "# Unparsed GF annotation absent from (at least) first alignment; not included in merged alignment.\n"); 
+
+  /*********************************************************************/
+  /* Check comments, all must be identically ordered and identical in all msaA[] aligments to include them */
+  if(msaA[0]->ncomment > 0) { 
+    do_add = TRUE; /* until proven otherwise */
+    /* make sure all alignments have same number of comments */
+    for(ai = 1; ai < nmsa; ai++) { 
+      if(msaA[ai]->ncomment != msaA[0]->ncomment) { 
+	do_add = FALSE;
+	break;
+      }
+    }
+    if(do_add) { 
+      /* make sure all alignments have identical comments */
+      for(j = 0; j < msaA[0]->ncomment; j++) { 
+	/* verify that what we think is true is true */
+	if(msaA[0]->comment[j] == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpectedly, comment %d of msaA[0] is NULL, but msaA[0]->ncomment is %d.\n", j, msaA[0]->ncomment);
+	for(ai = 1; ai < nmsa; ai++) { 
+	  if(esl_strcmp(msaA[0]->comment[j], msaA[ai]->comment[j]) != 0) { /* comment doesn't match */
+	    do_add = FALSE;
+	    break;
+	  }
+	}
+      }
+    }
+    if(do_add) { 
+      for(j = 0; j < msaA[0]->ncomment; j++) { 
+	if((status = esl_msa_AddComment(mmsa, msaA[0]->comment[j], -1))!= eslOK) goto ERROR;
+      }
+      if(be_verbose) fprintf(stdout, "# All alignments have identical comments in the same order. These were transferred to merged alignment.\n"); 
+    }
+    else { 
+      if(be_verbose) fprintf(stdout, "# Comments are not identical in all alignments; not included in merged alignment.\n"); 
+    }
+  }
+  else if(be_verbose) fprintf(stdout, "# No comments in (at least) first alignment; not included in merged alignment.\n"); 
+
+  /*********************************************************************/
+  /* Check unparsed per-column (GC) annotation, it must include all gaps in gap RF columns and 
+   * be identical once gap RF columns are removed in all msaA[] alignments to be included. */
+
+  if(msaA[0]->ngc > 0) { 
+    for(j = 0; j < msaA[0]->ngc; j++) { 
+      do_add = TRUE; /* until proven otherwise */
+      /* verify that what we think is true is true */
+      if(msaA[0]->gc_tag[j] == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpectedly, GC tag %d of msaA[0] is NULL, but msaA[0]->ngf is %d.\n", j, msaA[0]->ngc);
+      if(msaA[0]->gc[j]     == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpectedly, GC annotation %d of msaA[0] is NULL, but msaA[0]->ngf is %d.\n", j, msaA[0]->ngc);
+
+      /* ensure it does not have non-gaps in gap RF columns */
+      if(validate_no_nongaps_in_rf_gaps(msaA[0]->abc, msaA[0]->rf, msaA[0]->gc[j], msaA[0]->alen)) { /* returns TRUE if gc[j] has 0 non-gap characters in gap columns of RF annotation */
+	/* dealign gc line */
+	if((status = esl_strdup(msaA[0]->gc[j], msaA[0]->alen, &(dealigned))) != eslOK) goto ERROR;
+	if((status = esl_strdealign(dealigned, msaA[0]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning GC tag %s of msaA[0]", msaA[0]->gc_tag[j]);
+
+	for(ai = 1; ai < nmsa; ai++) { 
+	  found_tag = FALSE;
+	  for(j2 = 0; j2 < msaA[ai]->ngc; j2++) { 
+	    if(esl_strcmp(msaA[0]->gc_tag[j], msaA[ai]->gc_tag[j2]) == 0) {
+	      found_tag = TRUE;
+	      /* ensure it does not have non-gaps in gap RF columns */
+	      if(validate_no_nongaps_in_rf_gaps(msaA[ai]->abc, msaA[ai]->rf, msaA[ai]->gc[j2], msaA[ai]->alen)) { /* returns TRUE if gc[j2] has 0 non-gap characters in gap columns of RF annotation */
+		/* dealign */
+		if((status = esl_strdup(msaA[ai]->gc[j2], msaA[ai]->alen, &(dealigned2))) != eslOK) goto ERROR;
+		if((status = esl_strdealign(dealigned2, msaA[ai]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning GC tag %s of msaA[%d]", msaA[ai]->gc_tag[j2], ai);
+		/* check identity */
+		if(esl_strcmp(dealigned, dealigned2) != 0) { do_add = FALSE; }
+		free(dealigned2); 
+		dealigned2 = NULL; 
+		break; /* if we matched, do_add remains TRUE */
+	      }
+	    }
+	  }
+	} /* end of (for(ai = 1...)) */
+	if(dealigned != NULL) { free(dealigned); dealigned = NULL; }
+	if(found_tag && do_add) { 
+	  /* gap out the the GC annotation to fit in merged alignment */
+	  if((status = inflate_string_with_gaps_and_missing(msaA[0]->gc[j], msaA[0]->alen, alen_merged, neitherA, '.', NULL, '~', &(gapped_out))) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding gaps to create GC tag %s annotation for merged alignment.", msaA[0]->gc_tag[j]);
+	  if((status = esl_msa_AppendGC(mmsa, msaA[0]->gc_tag[j], gapped_out)) != eslOK) goto ERROR;
+	  free(gapped_out);
+	  gapped_out = NULL;
+	  if(be_verbose) fprintf(stdout, "# Identical GC tag %s annotation from all alignments transferred to merged alignment.\n", msaA[0]->gc_tag[j]); 
+	}
+	else { 
+	  if(be_verbose) fprintf(stdout, "# GC tag %s annotation from first alignment absent from or different in >= 1 other alignments; not included in merged alignment.\n", msaA[0]->gc_tag[j]);
+	}
+      } 
+    } /* end of for(j = 0 j < msaA[0]->ngc... */
+  } /* end of if(msaA[0]->ngc > 0) */
+  else if(be_verbose) fprintf(stdout, "# Unparsed GC annotation absent from (at least) first alignment; not included in merged alignment.\n"); 
+
+  /*********************************************************************/
+  /* Check ss_cons: it must include all gaps in gap RF columns and be identical once gap RF columns are removed in all 
+   * msaA[] alignments to be included. (Same requirements as unparsed GC annotation, so code block below is analogous to one above). */
+  if(msaA[0]->ss_cons != NULL) { 
+    do_add = TRUE; /* until proven otherwise */
+    /* ensure it does not have non-gaps in gap RF columns */
+    if(validate_no_nongaps_in_rf_gaps(msaA[0]->abc, msaA[0]->rf, msaA[0]->ss_cons, msaA[0]->alen)) { /* returns TRUE if ss_cons has 0 non-gap characters in gap columns of RF annotation */
+      /* dealign ss_cons */
+      if((status = esl_strdup(msaA[0]->ss_cons, msaA[0]->alen, &(dealigned))) != eslOK) goto ERROR;
+      if((status = esl_strdealign(dealigned, msaA[0]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning ss_cons of msaA[0]");
+      for(ai = 1; ai < nmsa; ai++) { 
+	if(msaA[ai]->ss_cons == NULL) { 
+	  do_add = FALSE; 
+	  break;
+	}
+	/* ss_cons != NULL, ensure it does not have non-gaps in gap RF columns */
+	if(validate_no_nongaps_in_rf_gaps(msaA[ai]->abc, msaA[ai]->rf, msaA[ai]->ss_cons, msaA[ai]->alen)) { /* returns TRUE if ss_cons has 0 non-gap characters in gap columns of RF annotation */
+	  /* dealign */
+	  if((status = esl_strdup(msaA[ai]->ss_cons, msaA[ai]->alen, &(dealigned2))) != eslOK) goto ERROR;
+	  if((status = esl_strdealign(dealigned2, msaA[ai]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning ss_cons of msaA[%d]", ai);
+	  /* check identity */
+	  if(esl_strcmp(dealigned, dealigned2) != 0) { do_add = FALSE; }
+	  free(dealigned2); 
+	  dealigned2 = NULL; 
+	  break; /* if we matched, do_add remains TRUE */
+	}
+      } /* end of (for(ai = 1...)) */
+      if(dealigned != NULL) { free(dealigned); dealigned = NULL; }
+      if(do_add) { 
+	/* gap out the the ss_cons to fit in merged alignment, 
+	 * as a special case, we use '~' in SS_cons as we add missing data and gaps
+	 * like we do in RF (for all other annotation we only add gaps) */
+	if((status = inflate_string_with_gaps_and_missing(msaA[0]->ss_cons, msaA[0]->alen, alen_merged, ngapA, '.', nmisA, '~', &(gapped_out))) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding gaps to create SS_cons annotation for merged alignment.");
+	if(mmsa->ss_cons != NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding SS_cons to merged alignment, it is already non-NULL.");
+	if((status = esl_strdup(gapped_out, alen_merged, &(mmsa->ss_cons))) != eslOK) goto ERROR;
+	free(gapped_out);
+	gapped_out = NULL;
+	if(be_verbose) fprintf(stdout, "# Identical SS_cons annotation from all alignments transferred to merged alignment.\n");
+      }
+      else { 
+	if(be_verbose) fprintf(stdout, "# SS_cons annotation from first alignment absent from or different in >= 1 other alignments; not included in merged alignment.\n");
+      }
+    }
+  } /* end of if(msaA[0]->ss_cons != NULL) */
+  else if(be_verbose) fprintf(stdout, "# SS_cons annotation absent from (at least) first alignment; not included in merged alignment.\n"); 
+
+  /*********************************************************************/
+  /* Check sa_cons: it must include all gaps in gap RF columns and be identical once gap RF columns are removed in all 
+   * msaA[] alignments to be included. (Same requirements as unparsed GC annotation, so code block below is analogous to one above). */
+  if(msaA[0]->sa_cons != NULL) { 
+    do_add = TRUE; /* until proven otherwise */
+    /* ensure it does not have non-gaps in gap RF columns */
+    if(validate_no_nongaps_in_rf_gaps(msaA[0]->abc, msaA[0]->rf, msaA[0]->sa_cons, msaA[0]->alen)) { /* returns TRUE if sa_cons has 0 non-gap characters in gap columns of RF annotation */
+      /* dealign sa_cons */
+      if((status = esl_strdup(msaA[0]->sa_cons, msaA[0]->alen, &(dealigned))) != eslOK) goto ERROR;
+      if((status = esl_strdealign(dealigned, msaA[0]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning sa_cons of msaA[0]");
+      for(ai = 1; ai < nmsa; ai++) { 
+	if(msaA[ai]->sa_cons == NULL) { 
+	  do_add = FALSE; 
+	  break;
+	}
+	/* sa_cons != NULL, ensure it does not have non-gaps in gap RF columns */
+	if(validate_no_nongaps_in_rf_gaps(msaA[ai]->abc, msaA[ai]->rf, msaA[ai]->sa_cons, msaA[ai]->alen)) { /* returns TRUE if sa_cons has 0 non-gap characters in gap columns of RF annotation */
+	  /* dealign */
+	  if((status = esl_strdup(msaA[ai]->sa_cons, msaA[ai]->alen, &(dealigned2))) != eslOK) goto ERROR;
+	  if((status = esl_strdealign(dealigned2, msaA[ai]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning sa_cons of msaA[%d]", ai);
+	  /* check identity */
+	  if(esl_strcmp(dealigned, dealigned2) != 0) { do_add = FALSE; }
+	  free(dealigned2); 
+	  dealigned2 = NULL; 
+	  break; /* if we matched, do_add remains TRUE */
+	}
+      } /* end of (for(ai = 1...)) */
+      if(dealigned != NULL) { free(dealigned); dealigned = NULL; }
+      if(do_add) { 
+	/* gap out the the sa_cons to fit in merged alignment */
+	if((status = inflate_string_with_gaps_and_missing(msaA[0]->sa_cons, msaA[0]->alen, alen_merged, neitherA, '.', NULL, '~', &(gapped_out))) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding gaps to create SA_cons annotation for merged alignment.");
+	if(mmsa->sa_cons != NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding SA_cons to merged alignment, it is already non-NULL.");
+	if((status = esl_strdup(gapped_out, alen_merged, &(mmsa->sa_cons))) != eslOK) goto ERROR;
+	free(gapped_out);
+	gapped_out = NULL;
+	if(be_verbose) fprintf(stdout, "# Identical SA_cons annotation from all alignments transferred to merged alignment.\n");
+      }
+      else { 
+	if(be_verbose) fprintf(stdout, "# SA_cons annotation from first alignment absent from or different in >= 1 other alignments; not included in merged alignment.\n");
+      }
+    }
+  } /* end of if(msaA[0]->sa_cons != NULL) */
+  else if(be_verbose) fprintf(stdout, "# SA_cons annotation absent from (at least) first alignment; not included in merged alignment.\n"); 
+
+  /*********************************************************************/
+  /* Check pp_cons: it must include all gaps in gap RF columns and be identical once gap RF columns are removed in all 
+   * msaA[] alignments to be included. (Same requirements as unparsed GC annotation, so code block below is analogous to one above). */
+  if(msaA[0]->pp_cons != NULL) { 
+    do_add = TRUE; /* until proven otherwise */
+    /* ensure it does not have non-gaps in gap RF columns */
+    if(validate_no_nongaps_in_rf_gaps(msaA[0]->abc, msaA[0]->rf, msaA[0]->pp_cons, msaA[0]->alen)) { /* returns TRUE if pp_cons has 0 non-gap characters in gap columns of RF annotation */
+      /* dealign pp_cons */
+      if((status = esl_strdup(msaA[0]->pp_cons, msaA[0]->alen, &(dealigned))) != eslOK) goto ERROR;
+      if((status = esl_strdealign(dealigned, msaA[0]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning pp_cons of msaA[0]");
+      for(ai = 1; ai < nmsa; ai++) { 
+	if(msaA[ai]->pp_cons == NULL) { 
+	  do_add = FALSE; 
+	  break;
+	}
+	/* pp_cons != NULL, ensure it does not have non-gaps in gap RF columns */
+	if(validate_no_nongaps_in_rf_gaps(msaA[ai]->abc, msaA[ai]->rf, msaA[ai]->pp_cons, msaA[ai]->alen)) { /* returns TRUE if pp_cons has 0 non-gap characters in gap columns of RF annotation */
+	  /* dealign */
+	  if((status = esl_strdup(msaA[ai]->pp_cons, msaA[ai]->alen, &(dealigned2))) != eslOK) goto ERROR;
+	  if((status = esl_strdealign(dealigned2, msaA[ai]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning pp_cons of msaA[%d]", ai);
+	  /* check identity */
+	  if(esl_strcmp(dealigned, dealigned2) != 0) { do_add = FALSE; }
+	  free(dealigned2); 
+	  dealigned2 = NULL; 
+	  break; /* if we matched, do_add remains TRUE */
+	}
+      } /* end of (for(ai = 1...)) */
+      if(dealigned != NULL) { free(dealigned); dealigned = NULL; }
+      if(do_add) { 
+	/* gap out the the pp_cons to fit in merged alignment */
+	if((status = inflate_string_with_gaps_and_missing(msaA[0]->pp_cons, msaA[0]->alen, alen_merged, neitherA, '.', NULL, '~', &(gapped_out))) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding gaps to create PP_cons annotation for merged alignment.");
+	if(mmsa->pp_cons != NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding PP_cons to merged alignment, it is already non-NULL.");
+	if((status = esl_strdup(gapped_out, alen_merged, &(mmsa->pp_cons))) != eslOK) goto ERROR;
+	free(gapped_out);
+	gapped_out = NULL;
+	if(be_verbose) fprintf(stdout, "# Identical PP_cons annotation from all alignments transferred to merged alignment.\n");
+      }
+      else { 
+	if(be_verbose) fprintf(stdout, "# PP_cons annotation from first alignment absent from or different in >= 1 other alignments; not included in merged alignment.\n");
+      }
+    }
+  } /* end of if(msaA[0]->pp_cons != NULL) */
+  else if(be_verbose) fprintf(stdout, "# PP_cons annotation absent from (at least) first alignment; not included in merged alignment.\n"); 
+
+  /*********************************************************************/
+  /* Finally, validate that RF annotation is identical in all alignments after removing gaps. */
+
+  if(msaA[0]->rf == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "All alignments must have #= GC RF annotation."); 
+  /* dealign rf */
+  if((status = esl_strdup(msaA[0]->rf, msaA[0]->alen, &(dealigned))) != eslOK) goto ERROR;
+  if((status = esl_strdealign(dealigned, dealigned, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning RF of msaA[0]");
+  for(ai = 1; ai < nmsa; ai++) { 
+    if(msaA[ai]->rf == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "All alignments must have #= GC RF annotation."); 
+    /* dealign */
+    if((status = esl_strdup(msaA[ai]->rf, msaA[ai]->alen, &(dealigned2))) != eslOK) goto ERROR;
+    if((status = esl_strdealign(dealigned2, dealigned2, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning RF of msaA[%d]", ai);
+    /* check identity */
+    if(esl_strcmp(dealigned, dealigned2) != 0) { 
+      printf("%s\n%s\n", dealigned, dealigned2);
+      ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "All alignments must have identical #=GC RF annotation, once gaps (\".\",\"-\",\"_\") are removed.\nAlignment %d de-gapped RF annotation differs from that of alignment 1.\n%s\n%s", ai+1, dealigned, dealigned2);
+    }
+    if(dealigned2 != NULL) { free(dealigned2); dealigned2 = NULL; }
+  }
+  if(dealigned  != NULL) { free(dealigned);  dealigned = NULL; }
+  /* gap out the the RF to fit in merged alignment */
+  if((status = inflate_string_with_gaps_and_missing(msaA[0]->rf, msaA[0]->alen, alen_merged, ngapA, '.', nmisA, '~', &(gapped_out))) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding gaps to create RF annotation for merged alignment.");
+  if(mmsa->rf != NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding RF to merged alignment, it is already non-NULL.");
+  if((status = esl_strdup(gapped_out, alen_merged, &(mmsa->rf))) != eslOK) goto ERROR;
+  free(gapped_out);
+  gapped_out = NULL;
+  if(be_verbose) fprintf(stdout, "# Identical RF annotation from all alignments transferred to merged alignment.\n");
+
+  if(dealigned  != NULL) free(dealigned);
+  if(dealigned2 != NULL) free(dealigned2);
+  if(gapped_out != NULL) free(gapped_out);
+  if(ngapA      != NULL) free(ngapA);
+  if(nmisA      != NULL) free(nmisA);
+  if(neitherA   != NULL) free(neitherA);
+  return eslOK;
+  
+ ERROR:
+  if(dealigned  != NULL) free(dealigned);
+  if(dealigned2 != NULL) free(dealigned2);
+  if(gapped_out != NULL) free(gapped_out);
+  if(ngapA      != NULL) free(ngapA);
+  if(nmisA      != NULL) free(nmisA);
+  if(neitherA   != NULL) free(neitherA);
+  return status;
+}
+
+/* Function: add_msa
+ * Date:     EPN, Mon Nov 23 05:54:37 2009
+ * 
+ * Add a "child" MSA we read from a file to the merged
+ * MSA - the merged alignment that we'll eventually
+ * output. We free each string in the child as soon
+ * as we've added it to the merged, to save memory.
+ * 
+ * We add all sequence data (aseq), and per sequence
+ * annotation, including sqname, sqdesc, sqacc, pp, ss,
+ * sa, as well as non-parsed GS and GR annotation.
+ * 
+ * <maxgap>[0..clen] is an array specifying the 
+ * number of inserted columns necessary between
+ * each consensus position.
+ * 
+ * max{gap,mis}[0]      is number of gaps/missing columns before 1st cpos.
+ * max{gap,mis}[clen-1] is number of gaps/missing columns before final cpos.
+ * max{gap,mis}[clen]   is number of gaps/missing columns after  final cpos.
+ * 
+ * <alen_merged> is the number of columns in the merged
+ * alignment. This is the non-gap RF length plus the
+ * sum of the maxgap vector.
+ * 
+ * Returns: eslOK on success.
+ *          eslEMEM on memory allocation failure.
+ */
+int
+add_msa(ESL_MSA *mmsa, char *errbuf, ESL_MSA *msa_to_add, int *maxgap, int *maxmis, int clen, int alen_merged)
+{
+  int status;
+  int i;                 /* counter over sequences in msa_to_add */
+  int j;                 /* counter over alignment annotations */
+  int mi;                /* counter over sequences in mmsa */
+  void *tmp;             /* for reallocations */
+  char *tmpstr;          /* used for copying GR annotation */
+  int  nseq_existing;    /* number of sequences already added to mmsa, by previous calls of this function */
+  int *ngapA = NULL;     /* [0..alen] number of insert gap columns to add after each alignment column when merging */
+  int *nmisA = NULL;     /* [0..alen] number of missing data ('~') gap columns to add after each alignment column when merging */
+  int *neitherA = NULL;  /* [0..apos..alen] = ngapA[apos] + nmisA[apos] */
+
+  nseq_existing = mmsa->nseq; 
+
+  /* determine how many all gap columns to insert after each alignment position
+   * of the child msa when copying it to the merged msa */
+  if((status = determine_gap_columns_to_add(msa_to_add, maxgap, maxmis, clen, &(ngapA), &(nmisA), &(neitherA), errbuf)) != eslOK) 
+    return status;
+
+  /* Append msa_to_add's sequence data and per-sequence annotation to mmsa after adding necessary gaps */
+  /* sequence names and aligned sequence data (digitized) */
+  for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { 
+      esl_strdup(msa_to_add->sqname[i], -1, &(mmsa->sqname[mi]));
+
+      status = inflate_seq_with_gaps(msa_to_add->abc, msa_to_add->aseq[i], msa_to_add->alen, alen_merged, neitherA, '.', &(mmsa->aseq[mi]));
+      if     (status == eslEMEM)   ESL_XFAIL(status, errbuf, "Out of memory adding sequence %s", mmsa->sqname[mi]);
+      else if(status != eslOK)     ESL_XFAIL(status, errbuf, "Found internal missing data symbols in seq: %s", mmsa->sqname[mi]);
+      free(msa_to_add->aseq[i]); /* free immediately */
+      msa_to_add->aseq[i] = NULL;
+  }
+
+  /* parsed annotation that is optional */
+  /* sqacc */
+  if(msa_to_add->sqacc != NULL) { 
+    if(mmsa->sqacc == NULL) { /* allocate for all sequences, even ones added in previous calls to add_msa() */
+      ESL_ALLOC(mmsa->sqacc, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+      for(mi = 0; mi < nseq_existing; mi++) { mmsa->sqacc[mi] = NULL; }
+    }
+    else { /* reallocate; to add space for new seqs */
+      ESL_RALLOC(mmsa->sqacc, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+    }
+    for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { 
+      if(msa_to_add->sqacc[i] != NULL) { 
+	if((status = esl_strdup(msa_to_add->sqacc[i], -1, &(mmsa->sqacc[mi]))) != eslOK)  
+	  ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence accession number %d.\n", i+1);
+	free(msa_to_add->sqacc[i]); /* free immediately */
+	msa_to_add->sqacc[i] = NULL;
+      }
+      else { 
+	mmsa->sqacc[mi] = NULL; 
+      }
+    }
+  } /* end of if(msa_to_add->sqacc != NULL */
+  else if(mmsa->sqacc != NULL) { 
+    /* msa_to_add->sqacc == NULL, but mmsa->sqacc != NULL, reallocate mmsa->sqacc, and set new ones to NULL */
+    ESL_RALLOC(mmsa->sqacc, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+    for(mi = nseq_existing; mi < nseq_existing + msa_to_add->nseq; mi++) { 
+      mmsa->sqacc[mi] = NULL;
+    }
+  }
+
+  /* sqdesc */
+  if(msa_to_add->sqdesc != NULL) { 
+    if(mmsa->sqdesc == NULL) { /* allocate for all sequences, even ones added in previous calls to add_msa() */
+      ESL_ALLOC(mmsa->sqdesc, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+      for(mi = 0; mi < nseq_existing; mi++) { mmsa->sqdesc[mi] = NULL; }
+    }
+    else { /* reallocate; to add space for new seqs */
+      ESL_RALLOC(mmsa->sqdesc, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+    }
+    for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { 
+      if(msa_to_add->sqdesc[i] != NULL) { 
+	if((status = esl_strdup(msa_to_add->sqdesc[i], -1, &(mmsa->sqdesc[mi]))) != eslOK)
+	  ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence description number %d.\n", i+1);
+	free(msa_to_add->sqdesc[i]); /* free immediately */
+	msa_to_add->sqdesc[i] = NULL;
+      }
+      else { 
+	mmsa->sqdesc[mi] = NULL; 
+      }
+    }
+  } /* end of if(msa_to_add->sqdesc != NULL */
+  else if(mmsa->sqdesc != NULL) { 
+    /* msa_to_add->sqdesc == NULL, but mmsa->sqdesc != NULL, reallocate mmsa->sqdesc, and set new ones to NULL */
+    ESL_RALLOC(mmsa->sqdesc, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+    for(mi = nseq_existing; mi < nseq_existing + msa_to_add->nseq; mi++) { 
+      mmsa->sqdesc[mi] = NULL;
+    }
+  }
+
+  /* per-seq posterior probabilities */
+  if(msa_to_add->pp != NULL) { 
+    if(mmsa->pp == NULL) { /* allocate for all sequences, even ones added in previous calls to add_msa() */
+      ESL_ALLOC(mmsa->pp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+      for(mi = 0; mi < nseq_existing; mi++) { mmsa->pp[mi] = NULL; }
+    }
+    else { /* reallocate; to add space for new seqs */
+      ESL_RALLOC(mmsa->pp, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+    }
+    for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { 
+      if(msa_to_add->pp[i] != NULL) { 
+	if((status = inflate_string_with_gaps_and_missing(msa_to_add->pp[i], msa_to_add->alen, alen_merged, neitherA, '.', NULL, '~', &(mmsa->pp[mi]))) != eslOK) 
+	  ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d posterior probabilities.\n", i+1);
+	free(msa_to_add->pp[i]); /* free immediately */
+	msa_to_add->pp[i] = NULL;
+      }
+      else { 
+	mmsa->pp[mi] = NULL; 
+      }
+    }
+  } /* end of if(msa_to_add->pp != NULL */
+  else if(mmsa->pp != NULL) { 
+    /* msa_to_add->pp == NULL, but mmsa->pp != NULL, reallocate mmsa->pp, and set new ones to NULL */
+    ESL_RALLOC(mmsa->pp, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+    for(mi = nseq_existing; mi < nseq_existing + msa_to_add->nseq; mi++) { 
+      mmsa->pp[mi] = NULL;
+    }
+  }
+
+  /* per-seq secondary structure */
+  if(msa_to_add->ss != NULL) { 
+    if(mmsa->ss == NULL) { /* allocate for all sequences, even ones added in previous calls to add_msa() */
+      ESL_ALLOC(mmsa->ss, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+      for(mi = 0; mi < nseq_existing; mi++) { mmsa->ss[mi] = NULL; }
+    }
+    else { /* reallocate; to add space for new seqs */
+      ESL_RALLOC(mmsa->ss, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+    }
+    for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { 
+      if(msa_to_add->ss[i] != NULL) { 
+	if((status = inflate_string_with_gaps_and_missing(msa_to_add->ss[i], msa_to_add->alen, alen_merged, neitherA, '.', NULL, '~', &(mmsa->ss[mi]))) != eslOK) 
+	  ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d secondary structure.\n", i+1);
+	free(msa_to_add->ss[i]); /* free immediately */
+	msa_to_add->ss[i] = NULL;
+      }
+      else { 
+	mmsa->ss[mi] = NULL; 
+      }
+    }
+  } /* end of if(msa_to_add->ss != NULL */
+  else if(mmsa->ss != NULL) { 
+    /* msa_to_add->ss == NULL, but mmsa->ss != NULL, reallocate mmsa->ss, and set new ones to NULL */
+    ESL_RALLOC(mmsa->ss, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+    for(mi = nseq_existing; mi < nseq_existing + msa_to_add->nseq; mi++) { 
+      mmsa->ss[mi] = NULL;
+    }
+  }
+
+  /* per-seq surface accessibility */
+  if(msa_to_add->sa != NULL) { 
+    if(mmsa->sa == NULL) { /* allocate for all sequences, even ones added in previous calls to add_msa() */
+      ESL_ALLOC(mmsa->sa, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+      for(mi = 0; mi < nseq_existing; mi++) { mmsa->sa[mi] = NULL; }
+    }
+    else { /* reallocate; to add space for new seqs */
+      ESL_RALLOC(mmsa->sa, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+    }
+    for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { 
+      if(msa_to_add->sa[i] != NULL) { 
+	if((status = inflate_string_with_gaps_and_missing(msa_to_add->sa[i], msa_to_add->alen, alen_merged, neitherA, '.', NULL, '~', &(mmsa->sa[mi]))) != eslOK) 
+	  ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d surface accessibility.\n", i+1);
+	free(msa_to_add->sa[i]); /* free immediately */
+	msa_to_add->sa[i] = NULL;
+      }
+      else { 
+	mmsa->sa[mi] = NULL; 
+      }
+    }
+  } /* end of if(msa_to_add->sa != NULL */
+  else if(mmsa->sa != NULL) { 
+    /* msa_to_add->sa == NULL, but mmsa->sa != NULL, reallocate mmsa->sa, and set new ones to NULL */
+    ESL_RALLOC(mmsa->sa, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq));
+    for(mi = nseq_existing; mi < nseq_existing + msa_to_add->nseq; mi++) { 
+      mmsa->sa[mi] = NULL;
+    }
+  }
+
+  /* Unparsed per-sequence (GS) annotation */
+  if(msa_to_add->ngs > 0) { 
+    for(j = 0; j < msa_to_add->ngs; j++) { 
+      for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) {
+	if(msa_to_add->gs[j][i] != NULL) 
+	  if((status =esl_msa_AddGS(mmsa, msa_to_add->gs_tag[j], -1, mi, msa_to_add->gs[j][i], -1)) != eslOK) 
+	    ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d GS annotation.\n", i+1);
+      }
+      free(msa_to_add->gs[j][i]); /* free immediately */
+      msa_to_add->gs[j][i] = NULL;
+    }
+  }
+  /* caller will free the rest of gs via esl_msa_Destroy() */
+  
+  /* unparsed per-residue (GR) annotation */
+  if(msa_to_add->gr != NULL) { 
+    for(j = 0; j < msa_to_add->ngr; j++) { 
+      for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { 
+	if(msa_to_add->gr[j][i] != NULL) {
+	  if((status = inflate_string_with_gaps_and_missing(msa_to_add->gr[j][i], msa_to_add->alen, alen_merged, neitherA, '.', NULL, '~', &(tmpstr))) != eslOK) 
+	    ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d GR annotation.\n", i+1);
+	  if((status = esl_msa_AppendGR(mmsa, msa_to_add->gr_tag[j], mi, tmpstr)) != eslOK)
+	    ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d GR annotation.\n", i+1);
+	  free(tmpstr);
+	  free(msa_to_add->gr[j][i]); /* free immediately */
+	  msa_to_add->gr[j][i] = NULL;
+	}
+      }
+    }
+  }
+  /* caller will free the rest of gr in esl_msa_Destroy() */
+
+  /* msa_to_add should be destroyed by caller */
+    
+  /* update nseq in mmsa */
+  mmsa->nseq += msa_to_add->nseq;
+
+  if(ngapA    != NULL) free(ngapA);
+  if(nmisA    != NULL) free(nmisA);
+  if(neitherA != NULL) free(neitherA);
+  return eslOK;
+  
+ ERROR:
+  if(ngapA    != NULL) free(ngapA);
+  if(nmisA    != NULL) free(nmisA);
+  if(neitherA != NULL) free(neitherA);
+  return status;
+}
+
+/* inflate_string_with_gaps_and_missing
+ *                   
+ * Given a string, create a new one that is a copy of it, 
+ * but with missing data and gaps added before each position (apos) 
+ * as specified by n{gap,mis}A[0..apos..len]. <gapchar> and <mischar>
+ * specify the gap character and missing data character. Either
+ * ngapA or nmisA can be either be NULL, if so they're treated as if
+ * they're all zeroes (no gaps/missing data will be added anywhere).
+ * 
+ * n{gap,mis}A[0]       - number of gaps/missing to add before first posn
+ * n{gap,mis}A[apos]    - number of gaps/missing to add before posn apos
+ * n{gap,mis}A[src_len] - number of gaps/missing to add after  final posn
+ *
+ * By convention, missing data symbols are always put before gap symbols
+ * when more than 1 of each are to be placed after the some nongap RF position.
+ * 
+ * ret_str is allocated here.
+ *
+ * Returns eslOK on success.
+ *         eslEMEM on memory error.
+ */
+int 
+inflate_string_with_gaps_and_missing(char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, int *nmisA, char mischar, char **ret_dst_str)
+{
+  int status;
+  int src_apos = 0;
+  int dst_apos  = 0;
+  int i;
+  char *dst_str;
+
+  ESL_ALLOC(dst_str, sizeof(char) * (dst_len+1));
+  dst_str[dst_len] = '\0';
+
+  /* add gaps before first position */
+  if(nmisA) for(i = 0; i < nmisA[0]; i++) dst_str[dst_apos++] = mischar;
+  if(ngapA) for(i = 0; i < ngapA[0]; i++) dst_str[dst_apos++] = gapchar;
+
+  /* add gaps after every position */
+  for(src_apos = 0; src_apos < src_len; src_apos++) { 
+    dst_str[dst_apos++] = src_str[src_apos];
+    if(nmisA) for(i = 0; i < nmisA[(src_apos+1)]; i++) dst_str[dst_apos++] = mischar;
+    if(ngapA) for(i = 0; i < ngapA[(src_apos+1)]; i++) dst_str[dst_apos++] = gapchar;
+  }
+
+  *ret_dst_str = dst_str;
+  return eslOK;
+
+ ERROR: 
+  return eslEMEM;
+}
+
+
+/* inflate_seq_with_gaps()
+ *                   
+ * Given an aligned sequence, create a new one that is a copy of it,
+ * but with gaps added before each position (apos) as specified by
+ * ngapA[0..apos..len]. <gapchar> specifies the gap character.
+ *
+ * This function follows the HMMER3 convention of using '~' to mark
+ * fragment sequences. If a sequence is a fragment, the first and final
+ * string of gaps (contiguous gaps) will be marked as '~'. That is, 
+ * the 1st column will necessarily be a '~' and the last will be a '~'.
+ * This function takes care to add '~' as gap characters in fragments, 
+ * where appropriate, to follow HMMER3 convention.
+ * 
+ * This function is importantly different from inflate_string_with_gaps_and_missing() 
+ * in that it does not allow internal '~' missing data characters to
+ * be added (which are dictated by nmisA[] in inflate_string_with_gaps_and_missing())
+ * Those '~' are possible in Infernal output alignments only in 
+ * #=GC RF and #=GC SS_cons alignment.
+ *
+ * It only adds '~' as necessary to the beginning and ends of fragments.
+ * 
+ * ngapA[0]       - number of gaps/missing to add before first posn
+ * ngapA[apos]    - number of gaps/missing to add before posn apos
+ * ngapA[src_len] - number of gaps/missing to add after  final posn
+ *
+ * ret_str is allocated here.
+ *
+ * Returns eslOK on success.
+ *         eslEMEM on memory error.
+ *         eslEINVAL if sequence (src_str) has an internal missing
+ *           data symbol that violates HMMER3 convention.
+ */
+int 
+inflate_seq_with_gaps(const ESL_ALPHABET *abc, char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, char **ret_dst_str)
+{
+  int status;
+  int src_apos = 0;
+  int dst_apos  = 0;
+  int src_flpos = 0; /* position of rightmost '~' in contiguous string that begins at position 0 */
+  int src_frpos = 0; /* position of leftmost  '~' in contiguous string that ends   at position src_len-1 */
+  int i;
+  char *dst_str;
+  char char2add;
+  int  i_am_fragment = FALSE;
+
+  ESL_ALLOC(dst_str, sizeof(char) * (dst_len+1));
+  dst_str[dst_len] = '\0';
+
+  /* determine if sequence is a fragment, and determine src_flpos and src_frpos */
+  src_flpos = 0; 
+  while(src_flpos < src_len && esl_abc_CIsMissing(abc, src_str[src_flpos])) { src_flpos++; }
+  src_flpos--; /* we overshot by 1 */
+  /* src_flpos is now rightmost '~' in stretch of '~' that begin at position 0, so 
+   * it's -1 if sequence is not a fragment (there are no leading '~' in src_str) 
+   */
+
+  src_frpos = src_len-1; 
+  while(src_frpos > -1 && esl_abc_CIsMissing(abc, src_str[src_frpos])) { src_frpos--; }
+  src_frpos++; /* we overshot by 1 */
+  /* src_frpos is now leftmost '~' in stretch of '~' that end at position src_len-1, so 
+   * it's src_len if sequence is not a fragment (there are no trailing '~' in src_str)
+   */
+  i_am_fragment = (src_flpos != -1 || src_frpos != src_len) ? TRUE : FALSE;
+
+  /* Now verify that we don't have any internal '~' characters */
+  for(src_apos = src_flpos+1; src_apos <= src_frpos-1; src_apos++) { 
+    if(esl_abc_CIsMissing(abc, src_str[src_apos])) return eslEINVAL;
+  }
+
+  /* add gaps before first position */
+  src_apos = 0;
+  if(i_am_fragment) { 
+    char2add = ((src_flpos >= src_apos) || (src_frpos <= src_apos)) ? esl_abc_CGetMissing(abc) : gapchar;
+  }
+  else { 
+    char2add = gapchar; 
+  }
+  if(ngapA) for(i = 0; i < ngapA[0]; i++) dst_str[dst_apos++] = char2add;
+
+  /* add gaps or missing character after every position */
+  for(src_apos = 0; src_apos < src_len; src_apos++) { 
+    dst_str[dst_apos++] = src_str[src_apos];
+    if(i_am_fragment) { 
+      char2add = ((src_flpos >= src_apos) || (src_frpos <= src_apos)) ? esl_abc_CGetMissing(abc) : gapchar;
+    }
+    else { 
+      char2add = gapchar; 
+    }
+    for(i = 0; i < ngapA[(src_apos+1)]; i++) dst_str[dst_apos++] = char2add;
+  }
+
+  *ret_dst_str = dst_str;
+  return eslOK;
+
+ ERROR: 
+  return eslEMEM;
+}
+
+
+/* validate_no_nongaps_in_rf_gaps
+ *                   
+ * Given an RF string with gaps defined as by alphabet <abc>
+ * and another string of same length. Make sure none of the 
+ * positions that are gaps in the RF string are non-gaps in the
+ * other string. Return TRUE if none are. Return FALSE if at
+ * least one is.
+ * 
+ * Returns TRUE if 0 characters in <other_str> in same position
+ *         as a gap in <rf_str> are non-gaps. FALSE otherwise.
+ */
+int 
+validate_no_nongaps_in_rf_gaps(const ESL_ALPHABET *abc, char *rf_str, char *other_str, int64_t len) 
+{
+  int64_t i;
+  for(i = 0; i < len; i++) { 
+    if((! rfchar_is_nongap_nonmissing(abc, rf_str[i])) && (rfchar_is_nongap_nonmissing(abc, other_str[i]))) return FALSE;
+  }
+  return TRUE;
+}
+
+/* determine_gap_columns_to_add
+ * (stolen and slightly modified from Infernal 1.1rc1's cmalign.c)
+ *
+ * Given <maxgap> and <maxmis>, two arrays of the number of gap RF
+ * positions and '~' RF (missing data) after each non-gap RF 
+ * (consensus) position in the eventual final merged alignment, 
+ * calculate how many inserts and missing data inserts
+ * we need to add at each position of <msa> to expand it out to the 
+ * appropriate size of the eventual merged alignment.
+ * 
+ * max{gap,mis}[0]      is number of gaps/missing before 1st cpos in merged aln
+ * max{gap,mis}[cpos]   is number of gaps/missing after cpos in merged aln
+ *                             for cpos = 1..clen 
+ * clen is the number of non-gap RF positions in msa (and in eventual merged msa).             
+ * 
+ * We allocate fill and return ret_ngapA[0..msa->alen], ret_nmisA[0..msa->alen], 
+ * and ret_neitherA[0..msa->alen] here.
+ *
+ * ret_n{gap,mis}gapA[0]      is number of gaps/missing to add before 1st position of msa 
+ * ret_n{gap,mis}gapA[apos]   is number of gaps/missing to add after alignment position apos
+ *                             for apos = 1..msa->alen
+ * 
+ * ret_neitherA[apos] = ngapA[apos] + nmisA[apos]
+ * 
+ * This is similar to the esl_msa.c helper function of the same name,
+ * but that function does not bother with missing data '~'.
+ * 
+ * Returns eslOK on success.
+ *         eslEMEM on memory alloaction error 
+ *         eslEINVAL if gaps occur before missing data b/t any two nongap RF posns
+ *         eslERANGE if a value exceeds what we expected (based on earlier
+ *                   checks before this function was entered).
+ *         if !eslOK, errbuf if filled.
+ */
+int
+determine_gap_columns_to_add(ESL_MSA *msa, int *maxgap, int *maxmis, int clen, int **ret_ngapA, int **ret_nmisA, int **ret_neitherA, char *errbuf)
+{
+  int status;
+  int apos;
+  int prv_cpos = 0;  /* alignment position corresponding to consensus position cpos-1 */
+  int cpos = 0;
+  int ngap = 0;
+  int nmis = 0;
+  int *ngapA    = NULL;
+  int *nmisA    = NULL;
+  int *neitherA = NULL;
+
+  /* contract check */
+  if(maxmis[0] != 0) ESL_FAIL(eslEINVAL, errbuf, "missing characters exist prior to first cpos, this shouldn't happen.\n");
+
+  ESL_ALLOC(ngapA,    sizeof(int) * (msa->alen+1));
+  ESL_ALLOC(nmisA,    sizeof(int) * (msa->alen+1));
+  ESL_ALLOC(neitherA, sizeof(int) * (msa->alen+1));
+  esl_vec_ISet(ngapA,    (msa->alen+1), 0);
+  esl_vec_ISet(nmisA,    (msa->alen+1), 0);
+  esl_vec_ISet(neitherA, (msa->alen+1), 0);
+  
+  for(apos = 0; apos < msa->alen; apos++) { 
+    if(esl_abc_CIsMissing(msa->abc, msa->rf[apos])) { 
+      nmis++;
+      if(ngap > 0) ESL_FAIL(eslEINVAL, errbuf, "after nongap RF pos %d, %d gap columns precede a missing data column (none should)", cpos, ngap);
+    }
+    else if(esl_abc_CIsGap(msa->abc, msa->rf[apos])) { 
+      ngap++;
+    }
+    else { /* a consensus position */
+      /* a few sanity checks */
+      if(ngap  > maxgap[cpos]) ESL_FAIL(eslEINCONCEIVABLE, errbuf, "%d inserts before cpos %d greater than max expected (%d).\n", ngap, cpos, maxgap[cpos]); 
+      if(nmis  > maxmis[cpos]) ESL_FAIL(eslEINCONCEIVABLE, errbuf, "%d EL inserts before cpos %d greater than max expected (%d).\n", nmis, cpos, maxmis[cpos]); 
+
+      if (cpos == 0) { 
+	/* gaps and/or missing data before first consensus position: flush right */
+	if(maxgap[cpos] > 0 && maxmis[cpos] == 0) { /* most common case */
+	  ngapA[prv_cpos]  = maxgap[cpos] - ngap; /* flush right gaps (no missing) */
+	}
+	else if(maxgap[cpos] == 0 && maxmis[cpos] > 0) { 
+	  nmisA[prv_cpos]  = maxmis[cpos] - nmis; /* flush right missing (no gaps) */
+	}
+	else if(maxgap[cpos] > 0 && maxmis[cpos] > 0) { 
+	  /* missing data (ELs) is always 5' of gaps */
+	  nmisA[prv_cpos]      = maxmis[cpos] - nmis; /* flush right */
+	  ngapA[prv_cpos+nmis] = maxgap[cpos] - ngap; /* flush right, after missing */
+	}
+      }
+      else {
+	/* gaps and/missing data after interior consensus position (i.e. not before 1st cpos or after last)
+	 * Determine where to place inserts and/or missing data.
+	 * Handle each of 4 possibilities separately, note that if 
+	 * maxgap[cpos] == 0 then ngap == 0, and if maxmis[cpos] == 0 then nmis == 0 (see sanity check above). 
+	 */
+	if(maxgap[cpos] >  0 && maxmis[cpos] == 0) { /* most common case */
+	  ngapA[prv_cpos + 1 + (ngap/2)] = maxgap[cpos] - ngap; /* internal cpos: split */
+	}
+	else if(maxgap[cpos] == 0 && maxmis[cpos] > 0) { 
+	  nmisA[prv_cpos + 1 + (nmis/2)] = maxmis[cpos] - nmis; /* internal cpos: split */
+	}
+	else if(maxgap[cpos] >  0 && maxmis[cpos] > 0) { 
+	  /* missing data is always 5' of gaps */
+	  nmisA[prv_cpos + 1 +        (nmis/2)] = maxmis[cpos] - nmis; /* internal cpos: split */
+	  ngapA[prv_cpos + 1 + nmis + (ngap/2)] = maxgap[cpos] - ngap; /* internal cpos: split */
+	}
+	/* final case is if (maxgap[cpos] == 0 && maxmis[cpos] == 0) 
+	 * in this case we do nothing. 
+	 */
+      }
+      cpos++;
+      prv_cpos = apos;
+      ngap = 0;
+      nmis = 0;
+    }
+  }
+  /* deal with gaps and missing data after final consensus position */
+
+  /* first, validate that clen is what it should be */
+  if(cpos != clen) { 
+    if(ngapA != NULL) free(ngapA);
+    if(nmisA != NULL) free(nmisA);
+    if(neitherA != NULL) free(neitherA);
+    ESL_FAIL(eslEINCONCEIVABLE, errbuf, "consensus length (%d) is not the expected length (%d).", cpos, clen);
+  }
+  
+  if(maxgap[cpos] > 0 && maxmis[cpos] == 0) { /* most common case */
+    ngapA[prv_cpos + 1 + ngap] = maxgap[cpos] - ngap; /* flush left gaps (no missing) */
+  }
+  else if(maxgap[cpos] == 0 && maxmis[cpos] > 0) { 
+    nmisA[prv_cpos + 1 + nmis] = maxmis[cpos] - nmis; /* flush left missing (no gaps) */
+  }
+  else if(maxgap[cpos] > 0 && maxmis[cpos] > 0) { 
+    /* missing data (ELs) is always 5' of gaps */
+    nmisA[prv_cpos + 1 + nmis]        = maxmis[cpos] - nmis; /* flush left */
+    ngapA[prv_cpos + 1 + nmis + ngap] = maxgap[cpos] - ngap; /* flush left, after missing */
+  }
+
+  /* determine neitherA[], the number of gaps due to either inserts or missing data after each apos */
+  for(apos = 0; apos <= msa->alen; apos++) { 
+    neitherA[apos] = ngapA[apos] + nmisA[apos];
+  }
+
+  *ret_ngapA  = ngapA;
+  *ret_nmisA = nmisA;
+  *ret_neitherA = neitherA;
+
+  return eslOK;
+
+ ERROR: 
+  if(ngapA    != NULL) free(ngapA);
+  if(nmisA    != NULL) free(nmisA);
+  if(neitherA != NULL) free(neitherA);
+  ESL_FAIL(status, errbuf, "Memory allocation error.");
+  return status; /*NEVERREACHED*/
+}
+
+/* write_pfam_msa_top
+ *                   
+ * Highly specialized function for printing out the 'top' of a
+ * Stockholm alignment file, i.e. the Stockholm header line, comments
+ * and GF annotation to an msa file. This function is necessary when
+ * printing the merged alignment file in small memory mode (when
+ * --small enabled). <msa> is an alignment with no sequence
+ * information (no aseq, ax, GS, or GR data).
+ */
+void
+write_pfam_msa_top(FILE *fp, ESL_MSA *msa)
+{
+  int i, maxgf;
+
+  /* rest of code in this function was stolen verbatim from actually_write_stockholm in esl_msa.c */
+
+  /* Magic Stockholm header
+   */
+  fprintf(fp, "# STOCKHOLM 1.0\n");
+
+  /* Free text comments
+   */
+  for (i = 0;  i < msa->ncomment; i++)
+    fprintf(fp, "# %s\n", msa->comment[i]);
+  if (msa->ncomment > 0) fprintf(fp, "\n");
+
+  maxgf = maxwidth(msa->gf_tag, msa->ngf);
+  if (maxgf < 2) maxgf = 2;
+
+  /* GF section: per-file annotation
+   */
+  if (msa->name != NULL) fprintf(fp, "#=GF %-*s %s\n", maxgf, "ID", msa->name);
+  if (msa->acc  != NULL) fprintf(fp, "#=GF %-*s %s\n", maxgf, "AC", msa->acc);
+  if (msa->desc != NULL) fprintf(fp, "#=GF %-*s %s\n", maxgf, "DE", msa->desc);
+  if (msa->au   != NULL) fprintf(fp, "#=GF %-*s %s\n", maxgf, "AU", msa->au);
+  
+  /* Thresholds are hacky. Pfam has two. Rfam has one.
+   */
+  if      (msa->cutset[eslMSA_GA1] && msa->cutset[eslMSA_GA2])
+    fprintf(fp, "#=GF %-*s %.1f %.1f\n", 
+	    maxgf, "GA", msa->cutoff[eslMSA_GA1], msa->cutoff[eslMSA_GA2]);
+  else if (msa->cutset[eslMSA_GA1])
+    fprintf(fp, "#=GF %-*s %.1f\n", 
+	    maxgf, "GA", msa->cutoff[eslMSA_GA1]);
+
+  if      (msa->cutset[eslMSA_NC1] && msa->cutset[eslMSA_NC2])
+    fprintf(fp, "#=GF %-*s %.1f %.1f\n",
+	    maxgf, "NC", msa->cutoff[eslMSA_NC1], msa->cutoff[eslMSA_NC2]);
+  else if (msa->cutset[eslMSA_NC1])
+    fprintf(fp, "#=GF %-*s %.1f\n",
+	    maxgf, "NC", msa->cutoff[eslMSA_NC1]);
+
+  if      (msa->cutset[eslMSA_TC1] && msa->cutset[eslMSA_TC2])
+    fprintf(fp, "#=GF %-*s %.1f %.1f\n",
+	    maxgf, "TC", msa->cutoff[eslMSA_TC1], msa->cutoff[eslMSA_TC2]);
+  else if (msa->cutset[eslMSA_TC1])
+    fprintf(fp, "#=GF %-*s %.1f\n", 
+	    maxgf, "TC", msa->cutoff[eslMSA_TC1]);
+
+  for (i = 0; i < msa->ngf; i++)
+    fprintf(fp, "#=GF %-*s %s\n", maxgf, msa->gf_tag[i], msa->gf[i]); 
+  fprintf(fp, "\n");
+
+  return;
+}
+
+/* write_pfam_msa_gc
+ *                   
+ * Highly specialized function for printing out the GC annotation to a
+ * Pfam Stockholm alignment file (1 line/seq). This function is
+ * necessary when printing the merged alignment file in small memory
+ * mode (when --small enabled). <msa> is an alignment with no sequence
+ * information (no aseq, ax, GS, nor GR data).
+ */
+void
+write_pfam_msa_gc(FILE *fp, ESL_MSA *msa, int margin)
+{
+  int i;
+  if (msa->ss_cons != NULL) { fprintf(fp, "#=GC %-*s %s\n", margin-6, "SS_cons", msa->ss_cons); }
+  if (msa->sa_cons != NULL) { fprintf(fp, "#=GC %-*s %s\n", margin-6, "SA_cons", msa->sa_cons); }
+  if (msa->pp_cons != NULL) { fprintf(fp, "#=GC %-*s %s\n", margin-6, "PP_cons", msa->pp_cons); }
+  if (msa->rf != NULL)      { fprintf(fp, "#=GC %-*s %s\n", margin-6, "RF", msa->rf); }
+  for (i = 0; i < msa->ngc; i++) { fprintf(fp, "#=GC %-*s %s\n", margin-6, msa->gc_tag[i], msa->gc[i]); }
+  fprintf(fp, "//\n");
+}
+
+/* maxwidth()
+ * Return the length of the longest string in 
+ * an array of strings.
+ */
+static int64_t
+maxwidth(char **s, int n)
+{
+  int64_t max,len;
+  int     i; 
+  
+  max = 0;
+  for (i = 0; i < n; i++)
+    if (s[i] != NULL)
+      {
+	len = strlen(s[i]);
+	if (len > max) max = len;
+      }
+  return max;
+}
+
+/* rfchar_is_nongap_nonmissing()
+ * Return FALSE if a character from RF annotation is 
+ * a gap or a missing character, else return TRUE.
+ */
+static int 
+rfchar_is_nongap_nonmissing(const ESL_ALPHABET *abc, char rfchar) { 
+  if(esl_abc_CIsGap    (abc, rfchar)) return FALSE;
+  if(esl_abc_CIsMissing(abc, rfchar)) return FALSE;
+  return TRUE;
+}
diff --git a/miniapps/esl-alimerge.itest.pl b/miniapps/esl-alimerge.itest.pl
new file mode 100755
index 0000000..2bfa00a
--- /dev/null
+++ b/miniapps/esl-alimerge.itest.pl
@@ -0,0 +1,211 @@
+#! /usr/bin/perl
+
+# Integrated test of esl-alimerge miniapp.
+#
+# Usage:     ./esl-alimerge.itest.pl <esl-alimerge binary> <tmpfile prefix>
+# Example:   ./esl-alimerge.itest.pl ./esl-alimerge        foo
+#
+# EPN, Wed Nov 25 11:23:55 2009
+
+$eslalimerge = shift;
+$tmppfx      = shift;
+
+if (! -x "$eslalimerge") { die "FAIL: didn't find esl-alimerge binary $eslalimerge"; }
+
+open(ALIFILE, ">$tmppfx.1") || die "FAIL: couldn't open $tmppfx.1 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+seq1     aaAAAA.AAAA...Cc.cCCCCCC.C..GGGGGgggg
+seq2     ..AAAAaAAAAaacCcccCCCCCCcCccGGGGG....
+#=GC RF  ..AAAA.AAAA...C...CCCCCC.c..GGGGG....
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.2") || die "FAIL: couldn't open $tmppfx.2 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GS seq3 DE sequence 3 is the best!
+seq3     AAAAA..AAA.....CCC..CCCC....c..G..GG..GG.
+seq4     AAAAAaaAAAaccccC-CccCCCCccccccgGggGGggGGg
+#=GC RF  AAAAA..AAA.....CCC..CCCC~...c..G..GG..GG.
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.3") || die "FAIL: couldn't open $tmppfx.3 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GS seq5 DE kachow
+seq5     AAAAA..AAA.....CCC..CCCC....c..G..GG..GG.
+seq6     AAAAAaaAAAaccccC-CccCCCCccccccgGggGGggGGg
+#=GC RF  AAAAA..AAA.....CCC..CCCC~~..c..G..GG..GG.
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.4") || die "FAIL: couldn't open $tmppfx.4 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GS seq5 DE kachow
+seq5     ~~~AAAAA..AAA.....CCC..CCCC....c..G..GG..GG~~~~
+seq6     ...AAAAAaaAAAaccccC-CccCCCCccccccgGggGGggGGgggg
+#=GC RF  ...AAAAA..AAA.....CCC..CCCC~~..c..G..GG..GG....
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.5") || die "FAIL: couldn't open $tmppfx.5 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+seq7     ~CAAAA..AAA.....CCC..CCCC....c..G..GG..GC~
+seq8     .CAAAAaaAAAaccccC-CccCCCCccccccgGggGGggGGg
+#=GC RF  .AAAAA..AAA.....CCC..CCCC~~..c..G..GG..GG.
+//
+EOF
+close ALIFILE;
+
+open(LISTFILE, ">$tmppfx.list") || die "FAIL: couldn't open $tmppfx.list for writing list file";
+print LISTFILE "$tmppfx.2\n";
+print LISTFILE "$tmppfx.1\n";
+print LISTFILE "$tmppfx.3\n";
+close LISTFILE;
+
+$output = `$eslalimerge -h`;
+if ($? != 0)                                         { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /Usage: esl-alimerge/)                { die "FAIL: help output not right"; }
+
+$output = `$eslalimerge --rna $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --dna $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --amino $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --rna --list $tmppfx.list 2>&1`;
+if ($? != 0)                                                                                 { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)                                                     { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/)  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccc\.cccgGggGGggGGg\.\.\./)             { die "FAIL: alignments merged incorrectly"; }
+system("$eslalimerge --rna -o $tmppfx.out $tmppfx.1 $tmppfx.2 > /dev/null");
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+$output = `cat $tmppfx.out`;
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+system("$eslalimerge --rna -v -o $tmppfx.out $tmppfx.1 $tmppfx.2 > /dev/null");
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+# don't worry about checking verbose output printed to stdout
+$output = `cat $tmppfx.out`;
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+$output = `cat $tmppfx.out`;
+
+$output = `$eslalimerge --rna --outformat pfam $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --rna --outformat a2m $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                 { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /aaAAAAAAAACccCCCCCCCGGGGGgggg/)              { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /AAAAAaaAAAaccccC-CccCCCCccccCcgGggGGggGGg/)  { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --rna --outformat psiblast $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                          { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /aaAAAA-A--AAA-----Cc-cCC--CCCC----C--G--GG--GGgggg/)  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /--AAAA-AaaAAAaccccC----CccCCCCccccCcgGggGGggGGg---/)  { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --rna --outformat afa $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --rna --rfonly $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /AAAAAAAACCCCCCCCGGGGG/)   { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /AAAAAAAAC\-CCCCCcGGGGG/)  { die "FAIL: alignments merged incorrectly"; }
+
+# test that hmmer3 fragment annotation is correctly handled (this WILL NOT WORK currently with --small!)
+$output = `$eslalimerge --rna $tmppfx.4 $tmppfx.5 2>&1`;
+if ($? != 0)                                                     { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /~~~CAAAA..AAA.....CCC..CCCC....c..G..GG..GC~~~/) { die "FAIL: alignments merged incorrectly"; }
+
+# repeat all the same tests (except a2m and psiblast output) but now in small memory mode
+$output = `$eslalimerge --small --rna $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --small --dna $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --small --amino $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --small --rna --list $tmppfx.list 2>&1`;
+if ($? != 0)                                                                                { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)                                                    { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccc\.cccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+system("$eslalimerge --small --rna -o $tmppfx.out $tmppfx.1 $tmppfx.2 > /dev/null");
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+$output = `cat $tmppfx.out`;
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+system("$eslalimerge --small --rna -v -o $tmppfx.out $tmppfx.1 $tmppfx.2 > /dev/null");
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+# don't worry about checking verbose output printed to stdout
+$output = `cat $tmppfx.out`;
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+$output = `cat $tmppfx.out`;
+
+$output = `$eslalimerge --small --rna --outformat pfam $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)                                                  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./)            { die "FAIL: alignments merged incorrectly"; }
+
+$output = `$eslalimerge --small --rna --rfonly $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                              { die "FAIL: esl-alimerge failed unexpectedly"; }
+if ($output !~ /sequence 3 is the best/)  { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /AAAAAAAACCCCCCCCGGGGG/)   { die "FAIL: alignments merged incorrectly"; }
+if ($output !~ /AAAAAAAAC\-CCCCCcGGGGG/)  { die "FAIL: alignments merged incorrectly"; }
+
+
+print "ok\n"; 
+unlink "$tmppfx.1";
+unlink "$tmppfx.2";
+unlink "$tmppfx.3";
+unlink "$tmppfx.4";
+unlink "$tmppfx.5";
+unlink "$tmppfx.list";
+unlink "$tmppfx.out";
+exit 0;
diff --git a/miniapps/esl-alimerge.man b/miniapps/esl-alimerge.man
new file mode 100644
index 0000000..b664d59
--- /dev/null
+++ b/miniapps/esl-alimerge.man
@@ -0,0 +1,179 @@
+.TH "esl-alimerge" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps"
+
+.SH NAME
+.TP 
+esl-alimerge - merge alignments based on their reference (RF) annotation
+
+.SH SYNOPSIS
+
+.TP 
+Merge two alignment files:
+.B esl-alimerge
+.I [options]
+.I alifile1
+.I alifile2
+
+.TP 
+Merge many alignment files listed in a file:
+.B esl-alimerge --list
+.I [options]
+.I listfile
+
+.SH DESCRIPTION
+
+.B esl-alimerge
+reads more than one input alignments, merges them into a single
+alignment and outputs it.
+
+The input alignments must all be in Stockholm format.  All alignments
+must have reference ('#=GC RF') annotation. Further, the RF annotation
+must be identical in all alignments once gap characters in the RF
+annotation ('.','-','_') have been removed.  This requirement allows
+alignments with different numbers of total columns to be merged
+together based on consistent RF annotation, such as alignments created
+by successive runs of the
+.B cmalign
+program of the INFERNAL package using the same CM.  Columns which have
+a gap character in the RF annotation are called 'insert' columns.
+
+All sequence data in all input alignments will be included in the
+output alignment regardless of the output format (see
+.B --outformat 
+option below). However, sequences in the merged alignment will usually
+contain more gaps ('.') than they did in their respective input
+alignments. This is because 
+.B esl-alimerge
+must add 100% gap columns to each individual input alignment so that
+insert columns in the other input alignments can be accomodated in the
+merged alignment.
+
+If the output format is Stockholm or Pfam, annotation will be
+transferred from the input alignments to the merged alignment as
+follows. All per-sequence ('#=GS') and per-residue ('#=GR') annotation
+is transferred.  Per-file ('#=GF') annotation is transferred if it is
+present and identical in all alignments.  Per-column ('#=GC') annotation is
+transferred if it is present and identical in all alignments once all
+insert positions have been removed 
+.B and 
+the '#=GC' annotation includes zero non-gap characters in insert
+columns.
+
+With the 
+.BI --list " <f>"
+option, 
+.I <f>
+is a file listing alignment files to merge. In the list file, blank
+lines and lines that start with '#' (comments) are ignored. Each data
+line contains a single word: the name of an alignment file to be
+merged. All alignments in each file will be merged.
+
+With the
+.B --small
+option, 
+.B esl-alimerge
+will operate in memory saving mode and the required RAM for the merge
+will be minimal (should be only a few Mb) and independent of the
+alignment sizes. To use 
+.B --small,
+all alignments must be in Pfam format (non-interleaved, 1
+line/sequence Stockholm format). You can reformat alignments to Pfam
+using the
+.B esl-reformat
+Easel miniapp. Without 
+.B --small
+the required RAM will be equal to roughly the size of the final merged
+alignment file which will necessarily be at least the summed size of
+all of the input alignment files to be merged and sometimes several
+times larger. If you're merging large alignments or you're
+experiencing very slow performance of
+.B esl-alimerge,
+try reformatting to Pfam and using
+.B --small.
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+.TP
+.BI -o " <f>"
+Output merged alignment to file 
+.I <f>
+instead of to
+.I stdout.
+
+.TP
+.B -v
+Be verbose; print information on the size of the alignments being merged,
+and the annotation transferred to the merged alignment to 
+.I stdout.
+This option can only be used in combination with the
+.B -o 
+option (so that the printed info doesn't corrupt the output alignment
+file).
+
+.TP
+.B --small
+Operate in memory saving mode. Required RAM will be independent of the
+sizes of the alignments to merge, instead of roughly the size of the
+eventual merged alignment. When enabled, all alignments must be in
+Pfam Stockholm (non-interleaved 1 line/seq) format (see
+esl-reformat) and the output alignment will be in Pfam format.
+
+.TP
+.B --rfonly
+Only include columns that are not gaps in the GC RF annotation in the
+merged alignment. 
+
+.TP 
+.BI --outformat "<s> "
+Specify that the output alignment be format 
+.I <s>.
+Choices for 
+.I <s> 
+are: 'stockholm', 'pfam', 'a2m', 'psiblast', 'afa'. By default
+alignments are output in Stockholm format. 'pfam' is a special case of
+Stockholm format in which each sequence is placed on a single line,
+nstead of being interleaved; 'afa' is aligned FASTA.
+
+.TP 
+.BI --rna
+Specify that the input alignments are RNA alignments. By default
+.B esl-alimerge
+will try to autodetect the alphabet, but if the alignment is sufficiently
+small it may be ambiguous. This option defines the alphabet as RNA.
+
+.TP 
+.BI --dna
+Specify that the input alignments are DNA alignments.
+
+.TP 
+.BI --amino
+Specify that the input alignments are protein alignments.
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/miniapps/esl-alipid.c b/miniapps/esl-alipid.c
new file mode 100644
index 0000000..bb503b6
--- /dev/null
+++ b/miniapps/esl-alipid.c
@@ -0,0 +1,92 @@
+/* Calculates pairwise %id for all aligned sequence pairs in MSA
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_distance.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+
+static ESL_OPTIONS options[] = {
+  /* name                type   default   env  range  togs  reqs incomp    help                                                   docgroup */
+  { "-h",          eslARG_NONE,        FALSE, NULL,  NULL, NULL, NULL,  NULL,  "help; show brief info on version and usage", 1 },
+  { "--informat",  eslARG_STRING,      NULL,  NULL, NULL,  NULL,  NULL, NULL, "specify the input MSA file is in format <s>", 0 }, 
+  { "--outformat", eslARG_STRING, "Clustal",  NULL, NULL,  NULL,  NULL, NULL, "write the output MSA in format <s>",          0 }, 
+  { "--noheader",  eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "no header",                                   0 }, 
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use DNA alphabet",                            0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use RNA alphabet",                            0 },
+  { "--amino",     eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use protein alphabet",                        0 },
+ { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+static char banner[] = "calculate pairwise %id for each seq pair in an MSA";
+static char usage[]  = "[options] <msafile>";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go      = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char         *msafile = esl_opt_GetArg(go, 1);
+  ESL_ALPHABET *abc     = NULL;
+  int           infmt   = eslMSAFILE_UNKNOWN;
+  ESL_MSAFILE  *afp     = NULL;
+  ESL_MSA      *msa     = NULL;
+  FILE         *ofp     = stdout;
+  int           nali    = 0;
+  int           namewidth;
+  double        pid;
+  double        pmatch;
+  int           nid, n;
+  int           nmatch, m;
+  int           i,j;
+  int           header = TRUE;
+  int           status;
+
+  /* allow user to assert the input MSA alphabet */
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); 
+
+  if (esl_opt_GetBoolean(go, "--noheader")) header = FALSE;
+
+  /* allow user to assert the input MSA format */
+  if (esl_opt_IsOn(go, "--informat") &&
+      (infmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"))) == eslMSAFILE_UNKNOWN)
+    esl_fatal("%s is not a valid MSA file format for --informat", esl_opt_GetString(go, "--informat"));
+
+  /* digital open */
+  if ( ( status = esl_msafile_Open(&abc, msafile, NULL, infmt, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+
+  if (header) fprintf(ofp, "# seqname1 seqname2 %%id nid denomid %%match nmatch denommatch\n");
+  while ((status = esl_msafile_Read(afp, &msa)) == eslOK)
+    {	
+      nali++;
+
+      namewidth = esl_str_GetMaxWidth(msa->sqname, msa->nseq);
+
+       for (i = 0; i < msa->nseq; i++)
+	for (j = i+1; j < msa->nseq; j++)
+	  {
+	    esl_dst_XPairId   (abc, msa->ax[i], msa->ax[j], &pid,    &nid,    &n);
+	    esl_dst_XPairMatch(abc, msa->ax[i], msa->ax[j], &pmatch, &nmatch, &m);
+	    fprintf(ofp, "%-*s %-*s %6.2f %6d %6d %6.2f %6d %6d\n", namewidth, msa->sqname[i], namewidth, msa->sqname[j], pid*100.0, nid, n, pmatch*100.0, nmatch, m);
+	  }
+
+      esl_msa_Destroy(msa);
+    }
+  if (nali == 0 || status != eslEOF) esl_msafile_ReadFailure(afp, status); 
+
+  esl_msafile_Close(afp);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+  
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/miniapps/esl-alipid.man b/miniapps/esl-alipid.man
new file mode 100644
index 0000000..d7f8407
--- /dev/null
+++ b/miniapps/esl-alipid.man
@@ -0,0 +1,106 @@
+.TH "esl-alipid" 1  "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-alipid - calculate pairwise percent identities for all sequence pairs in an MSA
+
+.SH SYNOPSIS
+
+.B esl-alipid
+.I [options]
+.I msafile
+
+.SH DESCRIPTION
+
+.pp
+.B esl-alistat 
+calculates the pairwise percent identity of each sequence pair in
+in the MSA(s) in 
+.I msafile.
+For each sequence pair, it outputs a line of 
+.I <sqname1> <sqname2> <pid> <nid> <n>
+where 
+.I <pid> 
+is the percent identity,
+.I <nid>
+is the number of identical aligned pairs,
+and 
+.I <n> 
+is the denominator used for the calculation: the
+shorter of the two (unaligned) sequence lengths.
+
+.pp
+If
+.I msafile 
+is - (a single dash), alignment input is read from 
+.I stdin.
+
+.pp 
+The
+.I msafile
+may be in any of several formats.
+The format is autodetected by default.
+See the
+.B --informat
+option to assert an input format.
+
+.pp
+The 
+.I msafile
+must contain either protein or DNA/RNA sequences. 
+The nucleic or amino alphabet will be autodetected by default.
+See the
+.B --amino,
+.B --dna,
+or
+.B --rna 
+options to assert an alphabet.
+
+.pp
+Only canonical residues are counted toward
+.I <nid> 
+and 
+.I <n>.
+Degenerate residue codes are not counted.
+
+.SH OPTIONS
+
+.TP
+.B -h 
+Print brief help;  includes version number and summary of
+all options, including expert options.
+
+.TP
+.BI --informat " <s>"
+Specify that the input alignment is in 
+.I <s>
+format. Valid format strings include 
+"stockholm", "pfam", "a2m", "phylip", "phylips", 
+"psiblast", "selex", "afa", "clustal", and "clustallike".
+
+.TP
+.B --amino
+Assert that the 
+.I msafile 
+contains protein sequences. 
+
+.TP 
+.B --dna
+Assert that the 
+.I msafile 
+contains DNA sequences. 
+
+.TP 
+.B --rna
+Assert that the 
+.I msafile 
+contains RNA sequences. 
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
+
diff --git a/miniapps/esl-alirev.c b/miniapps/esl-alirev.c
new file mode 100644
index 0000000..e3e5d38
--- /dev/null
+++ b/miniapps/esl-alirev.c
@@ -0,0 +1,87 @@
+
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_vectorops.h"
+
+#include <stdio.h>
+
+static ESL_OPTIONS options[] = {
+  /* name             type          default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",          eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",        0 },
+  { "--informat",  eslARG_STRING,      NULL,  NULL, NULL,  NULL,  NULL, NULL, "specify the input MSA file is in format <s>", 0 }, 
+  { "--outformat", eslARG_STRING,      NULL,  NULL, NULL,  NULL,  NULL, NULL, "write the output MSA in format <s>",          0 }, 
+  { "--dna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use DNA alphabet",                            0 },
+  { "--rna",       eslARG_NONE,       FALSE,  NULL, NULL,  NULL,  NULL, NULL, "use RNA alphabet",                            0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msafile>";
+static char banner[] = "reverse complement multiple sequence alignment(s)";
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go      = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
+  char         *msafile = esl_opt_GetArg(go, 1);
+  int           infmt   = eslMSAFILE_UNKNOWN;
+  int           outfmt  = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET *abc     = NULL;
+  ESL_MSAFILE  *afp     = NULL;
+  ESL_MSA      *msa     = NULL;
+  int           nali    = 0;
+  int           status;
+
+  /* Alphabet specification from cmdline? */
+  if      (esl_opt_GetBoolean(go, "--rna"))   abc = esl_alphabet_Create(eslRNA);
+  else if (esl_opt_GetBoolean(go, "--dna"))   abc = esl_alphabet_Create(eslDNA);
+
+  /* MSA input file format from cmdline? */
+  if (esl_opt_IsOn(go, "--informat") &&
+      (infmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"))) == eslMSAFILE_UNKNOWN)
+    esl_fatal("Your --informat, %s, is not a recognized multiple alignment file format",
+	      esl_opt_GetString(go, "--informat"));
+
+  /* Open in digital mode. Autoguess alphabet, format if we haven't set them already. */
+  if (( status = esl_msafile_Open(&abc, msafile, NULL, infmt, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+  
+  /* Reverse complementation only makes sense for alphabets that have abc->complement set */
+  if (! abc->complement)
+    esl_fatal("File %s appears to use the %s alphabet.\nThat alphabet cannot be reverse complemented.\n",
+	      msafile, esl_abc_DecodeType(abc->type));
+
+  /* Set the output format, if requested. 
+   * By default, write in the same format we read in. 
+   * Remember, it's afp->format that gets set; infmt was only a hint.
+   */
+  if ( esl_opt_IsOn(go, "--outformat") )
+    {
+      outfmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat"));
+      if (outfmt == eslMSAFILE_UNKNOWN)
+	esl_fatal("Your --outformat, %s, is not a recognized multiple alignment file format.\n",
+		  esl_opt_GetString(go, "--outformat"));
+    }
+  else outfmt = afp->format;
+
+  /* Here we go. */
+  while ((status = esl_msafile_Read(afp, &msa)) == eslOK)
+    {	
+      nali++;
+
+      status = esl_msa_ReverseComplement(msa);
+
+      esl_msafile_Write(stdout, msa, outfmt);
+
+      esl_msa_Destroy(msa);
+    }
+   if (nali   == 0)      esl_fatal("No alignments found in input file %s\n", msafile);
+   if (status != eslEOF) esl_msafile_ReadFailure(afp, status);
+
+   esl_msafile_Close(afp);
+   esl_alphabet_Destroy(abc);
+   esl_getopts_Destroy(go);
+   return 0;
+}
diff --git a/miniapps/esl-alirev.man b/miniapps/esl-alirev.man
new file mode 100644
index 0000000..1d138f2
--- /dev/null
+++ b/miniapps/esl-alirev.man
@@ -0,0 +1,127 @@
+.TH "esl-alirev" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-alirev - reverse complement a multiple alignment 
+
+
+.SH SYNOPSIS
+
+.B esl-alirev
+.I [options]
+.I msafile
+
+
+.SH DESCRIPTION
+
+.pp
+.B esl-alirev
+reads the multiple alignment in
+.I msafile
+and outputs its reverse complement to 
+.I stdout.
+
+.pp
+An example of where you might need to do this is when you've
+downloaded a chunk of multiway genomic alignment from one of the
+genome browsers, but your RNA of interest is on the opposite strand.
+
+.pp
+Any per-column and per-residue annotation lines are reversed as well,
+including Stockholm format and old SELEX format annotations.
+Annotations that Easel recognizes as secondary structure annotation (a
+consensus structure line, individual secondary structure lines) will
+be "reverse complemented" to preserve proper bracketing orders: for
+example, ...<<<...>>> is reverse complemented to <<<...>>>..., not
+simply reversed to >>>...<<<..., which would be wrong.
+
+.pp
+If
+.I msafile 
+is - (a single dash), alignment input is read from 
+.I stdin.
+
+.pp 
+The
+.I msafile
+may be in any of several formats.
+The format is autodetected by default.
+See the
+.B --informat
+option to assert an input format.
+
+.pp 
+By default the output alignment is written in the same format as the
+input alignment. See the
+.B --outformat
+option to use a different output format.
+
+.pp
+Because the alignment is parsed into Easel's digital internal
+representation, the output alignment may differ in certain details
+from the original alignment; these details should be inconsequential
+but may catch your eye. One is that if you have a reference annotation
+line, Easel's output will put consensus residues in upper case,
+nonconsensus (inserted) residues in lower case. Another is that the
+headers for some formats, such as Clustal format, are written with an
+arbitrary version number -- so you may find yourself revcomping an
+alignment in "MUSCLE (3.7) multiple sequence alignment" format and it
+could come out claiming to be a "CLUSTAL 2.1 multiple sequence
+alignment", just because Easel writes all of its Clustal format
+alignment files with that header.
+
+.pp
+The
+.I msafile
+must contain nucleic acid sequences (DNA or RNA).
+The alphabet will be autodetected by default.
+See the
+.B --dna
+or
+.B --rna 
+options to assert an alphabet.
+
+
+
+.SH OPTIONS
+
+.TP
+.B -h 
+Print brief help;  includes version number and summary of
+all options, including expert options.
+
+.TP
+.BI --informat " <s>"
+Specify that the input alignment is in 
+.I <s>
+format. Valid format strings include 
+"stockholm", "pfam", "a2m", "phylip", "phylips", 
+"psiblast", "selex", "afa", "clustal", and "clustallike".
+
+.TP
+.BI --outformat " <s>"
+Write the output alignment in 
+.I <s>
+format. Valid format strings include 
+"stockholm", "pfam", "a2m", "phylip", "phylips", 
+"psiblast", "selex", "afa", "clustal", and "clustallike".
+
+.TP 
+.B --dna
+Assert that the 
+.I msafile 
+contains DNA sequences. 
+
+.TP 
+.B --rna
+Assert that the 
+.I msafile 
+contains RNA sequences. 
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-alistat.c b/miniapps/esl-alistat.c
new file mode 100644
index 0000000..70a33e9
--- /dev/null
+++ b/miniapps/esl-alistat.c
@@ -0,0 +1,1153 @@
+/* Show statistics about a multiple sequence alignment file or MSA database.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile2.h"
+#include "esl_distance.h"
+#include "esl_vectorops.h"
+#include "esl_wuss.h"
+
+static char banner[] = "show summary statistics for a multiple sequence alignment file";
+static char usage[]  = "[options] <msafile>";
+
+static int  dump_infocontent_info(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf);
+static int  dump_residue_info(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf);
+static int  dump_posterior_column_info(FILE *fp, double **pp_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf);
+static int  dump_posterior_sequence_info(FILE *fp, ESL_MSA *msa, int nali, char *alifile, char *errbuf);
+static int  dump_insert_info(FILE *fp, ESL_MSA *msa, int use_weights, int nali, int *i_am_rf, char *alifile, char *errbuf);
+static int  dump_column_residue_counts(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int do_ambig, int use_weights, int nali, int64_t alen, int nseq, char *msa_name, char *alifile, char *errbuf);
+static int  dump_basepair_counts(FILE *fp, ESL_MSA *msa, ESL_ALPHABET *abc, double ***bp_ct, int use_weights, int nali, int nseq, char *msa_name, char *alifile, char *errbuf);
+static int  map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int64_t alen, int **ret_i_am_rf, int **ret_rf2a_map, int *ret_rflen);
+static int  get_pp_idx(ESL_ALPHABET *abc, char ppchar);
+static int  count_msa(ESL_MSA *msa, char *errbuf, int nali, int no_ambig, int use_weights, double ***ret_abc_ct, double ****ret_bp_ct, double ***ret_pp_ct);
+static int  check_msa_weights(ESL_MSA *msa);
+
+static ESL_OPTIONS options[] = {
+  /* name       type        default env   range togs  reqs  incomp      help                                                   docgroup */
+  { "-h",         eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL, NULL,            "help; show brief info on version and usage",              1 },
+  { "-1",         eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL, NULL,            "use tabular output, one line per alignment",              1 },
+  { "--informat", eslARG_STRING,  FALSE, NULL, NULL, NULL,NULL, NULL,            "specify that input file is in format <s>",                1 },
+  { "--amino",    eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL,"--dna,--rna",    "<msafile> contains protein alignments",                   1 },
+  { "--dna",      eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL,"--amino,--rna",  "<msafile> contains DNA alignments",                       1 },
+  { "--rna",      eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL,"--amino,--dna",  "<msafile> contains RNA alignments",                       1 },
+  { "--small",    eslARG_NONE,    FALSE, NULL, NULL, NULL,NULL, NULL,            "use minimal RAM (RAM usage will be independent of aln size)", 2 },
+  /* options for optional output files */
+  { "--list",      eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,        "output list of sequence names in alignment(s) to file <f>",      3 },
+  { "--icinfo",    eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,        "print info on information content alignment column",             3 },
+  { "--rinfo",     eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,        "print info on # of non-gap residues in each column to <f>",      3 },
+  { "--pcinfo",    eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,        "print per-column   posterior probability info to <f>",           3 },
+  { "--psinfo",    eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, "--small",   "print per-sequence posterior probability info to <f>",           3 },
+  { "--iinfo",     eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, "--small",   "print info on # of insertions b/t all non-gap RF cols to <f>",   3 },
+  { "--cinfo",     eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, NULL,        "print per-column residue counts to <f>",                         3 },
+  { "--noambig",   eslARG_NONE,   NULL, NULL, NULL,      NULL,NULL, "--small",   "with --cinfo, do not count ambiguous residues",                  3 },
+  { "--bpinfo",    eslARG_OUTFILE,NULL, NULL, NULL,      NULL,NULL, "--small",   "print per-column base-pair counts to <f>",                       3 },
+  { "--weight",    eslARG_NONE,   NULL, NULL, NULL,      NULL,NULL, "--small",   "with --*info files, weight counts using WT annotation from msa", 3 },
+  { "--stall",    eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL, NULL,            "arrest after start: for debugging under gdb",            99 },  
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go      = NULL;	               /* application configuration       */
+  ESL_ALPHABET *abc     = NULL;      	       /* biological alphabet             */
+  char         *alifile = NULL;	               /* alignment file name             */
+  int           fmt     = eslMSAFILE_UNKNOWN;  /* format code for alifile         */
+  ESL_MSAFILE  *afp     = NULL;		       /* open msa file                   */
+  ESL_MSAFILE2 *old_afp = NULL;	               /* open msa file, legacy (--small) */
+  ESL_MSA      *msa     = NULL;	               /* one multiple sequence alignment */
+  int           nali;		               /* number of alignments read       */
+  int           i;		               /* counter over seqs               */
+  int64_t       alen;		               /* alignment length                */
+  int           nseq;                          /* number of sequences in the msa */
+  int64_t       rlen;		               /* a raw (unaligned) seq length    */
+  int64_t       small, large;	               /* smallest, largest sequence      */
+  int64_t       nres;		               /* total # of residues in msa      */
+  double        avgid;		               /* average fractional pair id      */
+  int           max_comparisons;               /* maximum # comparisons for avg id */
+  int           do_stall;                      /* used to stall when debugging     */
+  double      **abc_ct = NULL;                 /* [0..msa->alen-1][0..abc->K] number of each residue at each position (abc->K is gap) */
+  double     ***bp_ct  = NULL;                 /* [0..msa->alen-1][0..abc->Kp-1][0..abc->Kp-1] per (non-pknotted) consensus basepair *
+						* count of each possible basepair over all seqs basepairs are indexed by 'i' the minimum *
+						* of 'i:j' for a pair between i and j, where i < j. */
+  double       **pp_ct = NULL;                 /* [0..msa->alen-1][0..11], count of each posterior probability (PP) code, over all sequences, gap is 11 */  
+  int  *i_am_rf = NULL;                        /* [0..i..msa->alen-1]: TRUE if pos i is non-gap RF posn, if msa->rf == NULL remains NULL */
+  int  *rf2a_map = NULL;                       /* [0..rfpos..rflen-1] = apos,                     
+						* apos is the alignment position (0..msa->alen-1) that     
+						* is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) */
+  int rflen = -1;                              /* nongap RF length */
+  char          errbuf[eslERRBUFSIZE];
+  int           status;		               /* easel return code               */
+
+  /* optional output files */
+  FILE *iinfofp  = NULL; /* output file for --iinfo */
+  FILE *pcinfofp = NULL; /* output file for --pcinfo */
+  FILE *psinfofp = NULL; /* output file for --psinfo */
+  FILE *rinfofp  = NULL; /* output file for --rinfo */
+  FILE *icinfofp = NULL; /* output file for --icinfo */
+  FILE *listfp   = NULL; /* output file for --list */
+  FILE *cinfofp  = NULL; /* output file for --cinfo */
+  FILE *bpinfofp = NULL; /* output file for --bpinfo */
+  int use_weights;       /* TRUE if --weight, reported weighted counts (using msa->wgt) to all output files */
+  int weights_exist;     /* TRUE if at least one msa->wgt value differs from 1.0, FALSE if not (or if msa->wgt==NULL) */ 
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if (esl_opt_GetBoolean(go, "-h") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage);
+      puts("\n where options are:");
+      esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+      puts("\n small memory mode, requires --amino,--dna, or --rna and --informat pfam:");
+      esl_opt_DisplayHelp(stdout, go, 2, 2, 80);
+      puts("\n optional output files:");
+      esl_opt_DisplayHelp(stdout, go, 3, 2, 80);
+      exit(0);
+    }
+
+  if (esl_opt_ArgNumber(go) != 1) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  alifile = esl_opt_GetArg(go, 1);
+
+  if (esl_opt_IsOn(go, "--informat") &&
+      (fmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"))) == eslMSAFILE_UNKNOWN)
+    esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); 
+    
+  if (esl_opt_GetBoolean(go, "--small") && fmt != eslMSAFILE_PFAM) esl_fatal("--small requires --informat pfam\n"); 
+
+  max_comparisons = 1000;
+
+  do_stall = esl_opt_GetBoolean(go, "--stall"); /* a stall point for attaching gdb */
+  while (do_stall); 
+
+  /***********************************************
+   * Open the MSA file; determine alphabet; set for digital input
+   ***********************************************/
+
+  if      (esl_opt_GetBoolean(go, "--amino"))   abc = esl_alphabet_Create(eslAMINO);
+  else if (esl_opt_GetBoolean(go, "--dna"))     abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--rna"))     abc = esl_alphabet_Create(eslRNA);
+
+  /* We'd like to get rid of the legacy msafile interface, but it
+   * includes small memory functionality for Pfam format which we have
+   * to replace first. For now, use both interfaces, new and legacy
+   */
+  if ( esl_opt_GetBoolean(go, "--small") )
+    {
+      if (! abc) esl_fatal("--small requires one of --amino, --dna, --rna be specified.");
+
+      status = esl_msafile2_OpenDigital(abc, alifile, NULL, &old_afp);
+      if      (status == eslENOTFOUND) esl_fatal("Alignment file %s doesn't exist or is not readable\n", alifile);
+      else if (status == eslEFORMAT)   esl_fatal("Couldn't determine format of alignment %s\n", alifile);
+      else if (status != eslOK)        esl_fatal("Alignment file open failed with error %d\n", status);
+    }
+  else
+    {
+      if ( (status = esl_msafile_Open(&abc, alifile, NULL, fmt, NULL, &afp)) != eslOK)
+	esl_msafile_OpenFailure(afp, status);
+    }
+
+  /**************************************
+   * Open optional output files, as nec *
+   **************************************/
+  /* determine name for first list file, if nec */
+  if( esl_opt_IsOn(go, "--list")) {
+    if ((listfp = fopen(esl_opt_GetString(go, "--list"), "w")) == NULL) 
+      esl_fatal("Failed to open --list output file %s\n", esl_opt_GetString(go, "--list"));
+  }
+  if( esl_opt_IsOn(go, "--icinfo")) {
+    if ((icinfofp = fopen(esl_opt_GetString(go, "--icinfo"), "w")) == NULL) 
+      esl_fatal("Failed to open --icinfo output file %s\n", esl_opt_GetString(go, "--icinfo"));
+  }
+  if( esl_opt_IsOn(go, "--rinfo")) {
+    if ((rinfofp = fopen(esl_opt_GetString(go, "--rinfo"), "w")) == NULL) 
+      esl_fatal("Failed to open --rinfo output file %s\n", esl_opt_GetString(go, "--rinfo"));
+  }
+  if( esl_opt_IsOn(go, "--pcinfo")) {
+    if ((pcinfofp = fopen(esl_opt_GetString(go, "--pcinfo"), "w")) == NULL) 
+      esl_fatal("Failed to open --pcinfo output file %s\n", esl_opt_GetString(go, "--pcinfo"));
+  }
+  if( esl_opt_IsOn(go, "--psinfo")) {
+    if ((psinfofp = fopen(esl_opt_GetString(go, "--psinfo"), "w")) == NULL) 
+      esl_fatal("Failed to open --psinfo output file %s\n", esl_opt_GetString(go, "--psinfo"));
+  }
+  if( esl_opt_IsOn(go, "--iinfo")) {
+    if ((iinfofp = fopen(esl_opt_GetString(go, "--iinfo"), "w")) == NULL) 
+      esl_fatal("Failed to open --iinfo output file %s\n", esl_opt_GetString(go, "--iinfo"));
+  }
+  if( esl_opt_IsOn(go, "--cinfo")) {
+    if ((cinfofp = fopen(esl_opt_GetString(go, "--cinfo"), "w")) == NULL) 
+      esl_fatal("Failed to open --cinfo output file %s\n", esl_opt_GetString(go, "--cinfo"));
+  }
+  if( esl_opt_IsOn(go, "--bpinfo")) {
+    if ((bpinfofp = fopen(esl_opt_GetString(go, "--bpinfo"), "w")) == NULL) 
+      esl_fatal("Failed to open --bpinfo output file %s\n", esl_opt_GetString(go, "--bpinfo"));
+  }
+
+  /***********************************************
+   * Read MSAs one at a time.
+   ***********************************************/
+
+  if (esl_opt_GetBoolean(go, "-1")) {
+    puts("#");
+    if(! esl_opt_GetBoolean(go, "--small")) { 
+      printf("# %-4s %-20s %10s %7s %7s %12s %6s %6s %10s %3s\n", "idx", "name", "format", "nseq", "alen", "nres", "small", "large", "avlen", "%id");
+      printf("# %-4s %-20s %10s %7s %7s %12s %6s %6s %10s %3s\n", "----", "--------------------", "----------", "-------", "-------", "------------", "------", "------", "----------", "---");
+    }
+    else { 
+      printf("# %-4s %-20s %10s %7s %7s %12s %10s\n", "idx", "name", "format", "nseq", "alen", "nres", "avlen");
+      printf("# %-4s %-20s %10s %7s %7s %12s %10s\n", "----", "--------------------", "----------", "-------", "-------", "------------", "----------");
+    }
+  }
+
+  nali = 0;
+  
+  fmt = (esl_opt_GetBoolean(go, "--small") ? old_afp->format : afp->format);
+
+  while ( (status = ( esl_opt_GetBoolean(go, "--small") ? 
+		      esl_msafile2_ReadInfoPfam(old_afp, listfp, abc, -1, NULL, NULL, &msa, &nseq, &alen, NULL, NULL, NULL, NULL, NULL, &abc_ct, &pp_ct, NULL, NULL, NULL) :
+		      esl_msafile_Read        (afp, &msa))) == eslOK)
+    { 
+      nali++;
+      nres = 0;
+
+      if (! esl_opt_GetBoolean(go, "--small")) { 
+	nseq = msa->nseq;
+	alen = msa->alen;
+	small = large = -1;
+	for (i = 0; i < msa->nseq; i++)
+	  {
+	    rlen  = esl_abc_dsqrlen(msa->abc, msa->ax[i]);
+	    nres += rlen;
+	    if (small == -1 || rlen < small) small = rlen;
+	    if (large == -1 || rlen > large) large = rlen;
+	  }
+
+	esl_dst_XAverageId(abc, msa->ax, msa->nseq, max_comparisons, &avgid);
+      }
+      else { /* --small invoked */
+	for(i = 0; i < alen; i++) nres += (int) esl_vec_DSum(abc_ct[i], abc->K);
+      }
+
+      if (esl_opt_GetBoolean(go, "-1")) 
+	{
+	  printf("%-6d %-20s %10s %7d %7" PRId64 " %12" PRId64, 
+		 nali, 
+		 msa->name,
+		 esl_msafile_DecodeFormat(fmt),
+		 nseq,
+		 alen,
+		 nres);
+	  if (! esl_opt_GetBoolean(go, "--small")) { 
+	    printf(" %6" PRId64 " %6" PRId64 " %10.1f %3.0f\n",
+		   small,
+		   large,
+		   (double) nres / (double) msa->nseq,
+		   100.*avgid);
+	  }
+	  else { 
+	    printf(" %10.1f\n", (double) nres / (double) nseq);
+	  }
+	}
+      else
+	{
+	  printf("Alignment number:    %d\n",     nali);
+	  if (msa->name != NULL)
+	    printf("Alignment name:      %s\n",        msa->name); 
+	  printf("Format:              %s\n",          esl_msafile_DecodeFormat(fmt));
+	  printf("Number of sequences: %d\n",          nseq);
+	  printf("Alignment length:    %" PRId64 "\n", alen);
+	  printf("Total # residues:    %" PRId64 "\n", nres);
+	  if(! esl_opt_GetBoolean(go, "--small")) { 
+	    printf("Smallest:            %" PRId64 "\n", small);
+	    printf("Largest:             %" PRId64 "\n", large);
+	  }
+	  printf("Average length:      %.1f\n",        (double) nres / (double) nseq);
+	  if(! esl_opt_GetBoolean(go, "--small")) { 
+	    printf("Average identity:    %.0f%%\n",      100.*avgid); 
+	  }
+	  printf("//\n");
+	}
+
+      /* Dump data to optional output files, if nec */
+      if(esl_opt_IsOn(go, "--list")) {
+	if(! esl_opt_GetBoolean(go, "--small")) { 
+	    /* only print sequence name to list file if ! --small, else we already have in esl_msafile2_ReadInfoPfam() */
+	    for(i = 0; i < msa->nseq; i++) fprintf(listfp, "%s\n", msa->sqname[i]);
+	}
+      }
+
+      /* if RF exists, get i_am_rf array[0..alen] which tells us which positions are non-gap RF positions
+       * and rf2a_map, a map of non-gap RF positions to overall alignment positions */
+      if(msa->rf != NULL) {
+	if((status = map_rfpos_to_apos(msa, abc, errbuf, alen, &i_am_rf, &rf2a_map, &rflen)) != eslOK) esl_fatal(errbuf);
+      }
+      else i_am_rf = NULL;
+
+      weights_exist = check_msa_weights(msa);
+      use_weights   = (weights_exist && esl_opt_GetBoolean(go, "--weight")) ? TRUE : FALSE;
+      
+      if( (! esl_opt_GetBoolean(go, "--small")) && 
+	  (esl_opt_IsOn(go, "--icinfo") || esl_opt_IsOn(go, "--rinfo")  || esl_opt_IsOn(go, "--pcinfo") || 
+	   esl_opt_IsOn(go, "--cinfo")  || esl_opt_IsOn(go, "--bpinfo")))  {
+	/* collect counts of each residue and PPs (if they exist) from the msa */
+	if(esl_opt_GetBoolean(go, "--weight") && msa->wgt == NULL) esl_fatal("--weight requires all alignments have #=GS WT annotation, but aln %d does not", nali);
+	if((status = count_msa(msa, errbuf, nali, 
+			       esl_opt_GetBoolean(go, "--noambig"), /* ignore ambiguous residues? */
+			       esl_opt_GetBoolean(go, "--weight"),  /* use msa->wgt sequence weights? */
+			       &abc_ct, 
+			       ((bpinfofp != NULL && msa->ss_cons != NULL) ? &bp_ct : NULL), /* get basepair counts? */
+			       (msa->pp != NULL ? &pp_ct : NULL)))   /* get PP counts? */
+	   != eslOK) esl_fatal(errbuf);
+      }
+
+      if( esl_opt_IsOn(go, "--icinfo")) {
+	if((status = dump_infocontent_info(icinfofp, abc, abc_ct, use_weights, nali, alen, nseq, i_am_rf, msa->name, alifile, errbuf) != eslOK)) esl_fatal(errbuf);
+      }
+      if( esl_opt_IsOn(go, "--rinfo")) {
+	if((status = dump_residue_info(rinfofp, abc, abc_ct, use_weights, nali, alen, nseq, i_am_rf, msa->name, alifile, errbuf) != eslOK)) esl_fatal(errbuf);
+      }
+      if(esl_opt_IsOn(go, "--pcinfo")) {
+	if(pp_ct == NULL) esl_fatal("Error: --pcinfo requires all alignments have #=GR PP annotation, but alignment %d does not", nali);
+	if((status = dump_posterior_column_info(pcinfofp, pp_ct, use_weights, nali, alen, nseq, i_am_rf, msa->name, alifile, errbuf) != eslOK)) esl_fatal(errbuf);
+      }
+      if(esl_opt_IsOn(go, "--psinfo")) {
+	if(msa->pp == NULL) esl_fatal("Error: --psinfo requires all alignments have #=GR PP annotation, but alignment %d does not", nali);
+	if((status = dump_posterior_sequence_info(psinfofp, msa, nali, alifile, errbuf) != eslOK)) esl_fatal(errbuf);
+      }
+      if( esl_opt_IsOn(go, "--iinfo")) {
+	if(msa->rf == NULL) esl_fatal("--iinfo requires all alignments have #=GC RF annotation, but alignment %d does not", nali);
+	if(esl_opt_GetBoolean(go, "--weight") && msa->wgt == NULL) esl_fatal("--weight requires all alignments have #=GS WT annotation, but aln %d does not", nali);
+	if((status = dump_insert_info(iinfofp, msa, use_weights, nali, i_am_rf, alifile, errbuf) != eslOK)) esl_fatal(errbuf);
+      }
+      if( esl_opt_IsOn(go, "--cinfo")) {
+	if((status = dump_column_residue_counts(cinfofp, abc, abc_ct, esl_opt_GetBoolean(go, "--noambig"), use_weights, nali, alen, nseq, msa->name, alifile, errbuf) != eslOK)) esl_fatal(errbuf);
+      }
+      if( esl_opt_IsOn(go, "--bpinfo")) {
+	if(msa->ss_cons == NULL) esl_fatal("--bpinfo requires all alignments have #=GC SS_cons annotation, but alignment %d does not", nali);
+	if((status = dump_basepair_counts(bpinfofp, msa, abc, bp_ct, use_weights, nali, nseq, msa->name, alifile, errbuf) != eslOK)) esl_fatal(errbuf);
+      }
+
+      esl_msa_Destroy(msa);
+      if(abc_ct != NULL)   { esl_Free2D((void **) abc_ct, alen);          abc_ct   = NULL; }
+      if(bp_ct != NULL)    { esl_Free3D((void ***) bp_ct, alen, abc->Kp); bp_ct    = NULL; }
+      if(pp_ct != NULL)    { esl_Free2D((void **) pp_ct, alen);           pp_ct    = NULL; }
+      if(i_am_rf != NULL)  { free(i_am_rf);                               i_am_rf  = NULL; }
+      if(rf2a_map != NULL) { free(rf2a_map);                              rf2a_map = NULL; }
+    }
+  
+  /* If an msa read failed, we've dropped out to here with an informative status code. 
+   * we have to handle failures from new vs. legacy msa parsing differently 
+   */
+  if (esl_opt_GetBoolean(go, "--small")) 
+    {
+      if      (status == eslEFORMAT)  esl_fatal("Alignment file parse error, line %d of file %s:\n%s\nOffending line is:\n%s\n", old_afp->linenumber, old_afp->fname, old_afp->errbuf, old_afp->buf);	
+      else if (status != eslEOF)      esl_fatal("Alignment file read failed with error code %d\n", status);
+      else if (nali   == 0)           esl_fatal("No alignments found in file %s\n", alifile);
+    }
+  else
+    {
+      if (nali == 0 || status != eslEOF) esl_msafile_ReadFailure(afp, status);
+    }
+
+  /* Cleanup, normal return
+   */
+  if(listfp != NULL) { 
+    fclose(listfp);
+    printf("# List of sequences in %d alignment(s) saved to file %s\n", nali, esl_opt_GetString(go, "--list"));
+  }
+  if(icinfofp != NULL) { 
+    fclose(icinfofp);
+    printf("# Information content data saved to file %s.\n", esl_opt_GetString(go, "--icinfo")); 
+  }
+  if(rinfofp != NULL) { 
+    fclose(rinfofp);
+    printf("# Residue data saved to file %s.\n", esl_opt_GetString(go, "--rinfo")); 
+  }
+  if(pcinfofp != NULL) { 
+    fclose(pcinfofp);
+    printf("# Per-column posterior probability data saved to file %s.\n", esl_opt_GetString(go, "--pcinfo")); 
+  }
+  if(psinfofp != NULL) { 
+    fclose(psinfofp);
+    printf("# Per-sequence posterior probability data saved to file %s.\n", esl_opt_GetString(go, "--psinfo")); 
+  }
+  if(iinfofp != NULL) { 
+    printf("# Insert data saved to file %s.\n", esl_opt_GetString(go, "--iinfo")); 
+    fclose(iinfofp);
+  }
+  if(cinfofp != NULL) { 
+    printf("# Per-column counts data saved to file %s.\n", esl_opt_GetString(go, "--cinfo")); 
+    fclose(cinfofp);
+  }
+  if(bpinfofp != NULL) { 
+    printf("# Per-column basepair counts data saved to file %s.\n", esl_opt_GetString(go, "--bpinfo")); 
+    fclose(bpinfofp);
+  }
+
+
+  if (afp)     esl_msafile_Close(afp);
+  if (old_afp) esl_msafile2_Close(old_afp);
+  esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+/* count_msa()
+ *                   
+ * Given an msa, count residues, and optionally base pairs and
+ * posterior probabilities per column and store them in <ret_abc_ct>
+ * and <ret_pp_ct>.
+ * 
+ * <ret_abc_ct> [0..apos..alen-1][0..abc->K]:
+ * - per position count of each symbol in alphabet over all seqs.
+ * 
+ * <ret_bp_ct>  [0..apos..alen-1][0..abc->Kp-1][0..abc->Kp-1] 
+ * - per (non-pknotted) consensus basepair count of each possible basepair 
+ *   over all seqs basepairs are indexed by 'i' the minimum of 'i:j' for a 
+ *   pair between i and j, where i < j. Note that non-canonicals and 
+ *   gaps and the like are all stored independently.
+ *
+ * <ret_pp_ct> [0..apos..alen-1][0..11]
+ * - per position count of each posterior probability code over all seqs.
+ * 
+ * A 'gap' has a looser definition than in esl_abc here, esl_abc's gap, 
+ * missing residues and nonresidues are all considered 'gaps' here.
+ * 
+ * If we encounter an error, we return non-eslOK status and fill
+ * errbuf with error message.
+ * 
+ * Returns eslOK upon success.
+ */
+static int count_msa(ESL_MSA *msa, char *errbuf, int nali, int no_ambig, int use_weights, double ***ret_abc_ct, double ****ret_bp_ct, double ***ret_pp_ct)
+{
+  int status;
+  double  **abc_ct = NULL;
+  double ***bp_ct = NULL;
+  int       apos, rpos, i, x;
+  int       nppvals = 12;         /* '0'-'9' = 0-9, '*' = 10, gap = '11' */
+  double  **pp_ct = NULL;         /* [0..alen-1][0..nppvals-1] per position count of each possible PP char over all seqs */
+  int       ppidx; 
+  /* variables related to getting bp counts */
+  int      *ct = NULL;            /* 0..alen-1 base pair partners array for current sequence */
+  char     *ss_nopseudo = NULL;   /* no-pseudoknot version of structure */
+  double    seqwt;  /* weight of current sequence, always 1.0 if !use_weights */
+
+  if(! (msa->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "count_msa() contract violation, MSA is not digitized");
+  if(use_weights && msa->wgt == NULL) ESL_FAIL(eslEINCOMPAT, errbuf, "count_msa(): use_weights==TRUE but msa->wgt == NULL");
+
+  /* allocate pp_ct array, if nec */
+  if(ret_pp_ct != NULL) { 
+    if(msa->pp == NULL) ESL_FAIL(eslEINVAL, errbuf, "count_msa() ret_pp_ct != NULL, but msa->pp is NULL");
+    ESL_ALLOC(pp_ct, sizeof(double *) * msa->alen);
+    for(apos = 0; apos < msa->alen; apos++) { 
+      ESL_ALLOC(pp_ct[apos], sizeof(double) * nppvals);
+      esl_vec_DSet(pp_ct[apos], nppvals, 0.);
+    }
+  }
+
+  /* allocate and initialize bp_ct, if nec */
+  if(ret_bp_ct != NULL) { 
+    ESL_ALLOC(bp_ct,  sizeof(double **) * msa->alen); 
+    /* get ct array which defines the consensus base pairs */
+    ESL_ALLOC(ct,  sizeof(int)  * (msa->alen+1));
+    ESL_ALLOC(ss_nopseudo, sizeof(char) * (msa->alen+1));
+    esl_wuss_nopseudo(msa->ss_cons, ss_nopseudo);
+    if ((status = esl_wuss2ct(ss_nopseudo, msa->alen, ct)) != eslOK) ESL_XFAIL(status, errbuf, "Consensus structure string is inconsistent.");
+    for(apos = 0; apos < msa->alen; apos++) { 
+      /* careful ct is indexed 1..alen, not 0..alen-1 */
+      if(ct[(apos+1)] > (apos+1)) { /* apos+1 is an 'i' in an i:j pair, where i < j */
+	ESL_ALLOC(bp_ct[apos], sizeof(double *) * (msa->abc->Kp));
+	for(x = 0; x < msa->abc->Kp; x++) { 
+	  ESL_ALLOC(bp_ct[apos][x], sizeof(double) * (msa->abc->Kp));
+	  esl_vec_DSet(bp_ct[apos][x], msa->abc->Kp, 0.);
+	}
+      }
+      else { /* apos+1 is not an 'i' in an i:j pair, where i < j, set to NULL */
+	bp_ct[apos] = NULL;
+      }
+    }
+  }
+
+  ESL_ALLOC(abc_ct, sizeof(double *) * msa->alen); 
+  for(apos = 0; apos < msa->alen; apos++) { 
+    ESL_ALLOC(abc_ct[apos], sizeof(double) * (msa->abc->K+1));
+    esl_vec_DSet(abc_ct[apos], (msa->abc->K+1), 0.);
+  }
+
+  for(i = 0; i < msa->nseq; i++) { 
+    seqwt = use_weights ? msa->wgt[i] : 1.0;
+
+    for(apos = 0; apos < msa->alen; apos++) { /* update appropriate abc count, careful, ax ranges from 1..msa->alen (but abc_ct is 0..msa->alen-1) */
+      if((! no_ambig) || (! esl_abc_XIsDegenerate(msa->abc, msa->ax[i][apos+1]))) { /* skip ambiguities (degenerate residues) if no_ambig is TRUE */
+	if((status = esl_abc_DCount(msa->abc, abc_ct[apos], msa->ax[i][apos+1], seqwt)) != eslOK) ESL_XFAIL(status, errbuf, "problem counting residue %d of seq %d", apos, i);
+      }
+    }
+
+    /* get bp counts, if nec */
+    if(bp_ct != NULL) { 
+      for(apos = 0; apos < msa->alen; apos++) { /* update appropriate abc count, careful, ax ranges from 1..msa->alen (but abc_ct is 0..msa->alen-1) */
+	if(bp_ct[apos] != NULL) { /* our flag for whether position (apos+1) is an 'i' in an i:j pair where i < j */
+	  rpos = ct[apos+1] - 1; /* ct is indexed 1..alen */
+	  bp_ct[apos][msa->ax[i][apos+1]][msa->ax[i][rpos+1]] += seqwt;
+	}
+      }
+    }
+
+    /* get PP counts, if nec  */
+    if(pp_ct != NULL) { 
+      if(msa->pp[i] != NULL) { 
+	for(apos = 0; apos < msa->alen; apos++) { 
+	  if((! no_ambig) || (! esl_abc_XIsDegenerate(msa->abc, msa->ax[i][apos+1]))) { /* skip ambiguities (degenerate residues) if no_ambig is TRUE */
+	    if((ppidx = get_pp_idx(msa->abc, msa->pp[i][apos])) == -1) ESL_XFAIL(eslEFORMAT, errbuf, "bad #=GR PP char: %c", msa->pp[i][apos]);
+	    pp_ct[apos][ppidx] += seqwt;
+	  }
+	}
+      }
+    }
+  }
+
+  *ret_abc_ct = abc_ct;
+  if (ret_bp_ct) *ret_bp_ct = bp_ct; /* we only allocated bp_ct if ret_bp_ct != NULL */
+  if (ret_pp_ct) *ret_pp_ct = pp_ct; /* we only allocated pp_ct if ret_pp_ct != NULL */
+
+  if (ss_nopseudo) free(ss_nopseudo);
+  if (ct)          free(ct);
+  return eslOK;
+
+ ERROR:
+  if (abc_ct)      esl_Free2D((void **)  abc_ct, msa->alen);
+  if (bp_ct)       esl_Free3D((void ***) bp_ct,  msa->alen, msa->abc->Kp);
+  if (pp_ct)       esl_Free2D((void **)  pp_ct,  msa->alen);
+  if (ss_nopseudo) free(ss_nopseudo);
+  if (ct)          free(ct);
+
+  *ret_abc_ct = NULL;
+  if (ret_bp_ct) *ret_bp_ct = NULL;
+  if (ret_pp_ct) *ret_pp_ct = NULL;
+  return status; 
+}
+
+
+/* get_pp_idx
+ *                   
+ * Given a #=GR PP or #=GC PP_cons character, return the appropriate index
+ * in a pp_ct[] vector. 
+ * '0' return 0;
+ * '1' return 1;
+ * '2' return 2;
+ * '3' return 3;
+ * '4' return 4;
+ * '5' return 5;
+ * '6' return 6;
+ * '7' return 7;
+ * '8' return 8;
+ * '9' return 9;
+ * '*' return 10;
+ * gap return 11;
+ * 
+ * Anything else (including missing or nonresidue) return -1;
+ */
+static int get_pp_idx(ESL_ALPHABET *abc, char ppchar)
+{
+  if(esl_abc_CIsGap(abc, ppchar)) return 11;
+  if(ppchar == '*')               return 10;
+  if(ppchar == '9')               return 9;
+  if(ppchar == '8')               return 8;
+  if(ppchar == '7')               return 7;
+  if(ppchar == '6')               return 6;
+  if(ppchar == '5')               return 5;
+  if(ppchar == '4')               return 4;
+  if(ppchar == '3')               return 3;
+  if(ppchar == '2')               return 2;
+  if(ppchar == '1')               return 1;
+  if(ppchar == '0')               return 0;
+  return -1;
+}
+
+
+/* dump_infocontent_info
+ *                   
+ * Given an MSA with RF annotation, dump information content per column data to 
+ * an open output file.
+ */
+static int dump_infocontent_info(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf)
+{
+  int status;
+  int apos, rfpos;
+  double bg_ent;
+  double *bg = NULL;
+  double *abc_freq = NULL;
+  double nnongap;
+
+  ESL_ALLOC(bg, sizeof(double) * abc->K);
+  esl_vec_DSet(bg, abc->K, 1./(abc->K));
+  bg_ent = esl_vec_DEntropy(bg, abc->K);
+  free(bg);
+
+  ESL_ALLOC(abc_freq, sizeof(double) * abc->K);
+
+
+  fprintf(fp, "# Information content per column (bits):\n");
+  fprintf(fp, "# Alignment file: %s\n", alifile);
+  fprintf(fp, "# Alignment idx:  %d\n", nali);
+  if(msa_name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa_name); }
+  fprintf(fp, "# Number of sequences: %d\n", nseq);
+  if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); }
+  else            { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); }
+  fprintf(fp, "#\n");
+
+  if(i_am_rf != NULL) { 
+    fprintf(fp, "# %7s  %7s  %10s  %10s\n", "rfpos",    "alnpos",  "freqnongap", "info(bits)");
+    fprintf(fp, "# %7s  %7s  %10s  %10s\n", "-------", "-------",  "----------", "----------");
+  }  
+  else { 
+    fprintf(fp, "# %7s  %10s  %10s\n", "alnpos",  "freqnongap", "info(bits)");
+    fprintf(fp, "# %7s  %10s  %10s\n", "-------", "----------", "----------");
+  }
+
+  rfpos = 0;
+  for(apos = 0; apos < alen; apos++) {
+    if(i_am_rf != NULL) { 
+      if(i_am_rf[apos]) { 
+	fprintf(fp, "  %7d", rfpos+1);
+	rfpos++; 
+      }
+      else { 
+	fprintf(fp, "  %7s", "-");
+      }
+    }
+    nnongap = esl_vec_DSum(abc_ct[apos], abc->K);
+    esl_vec_DCopy(abc_ct[apos], abc->K, abc_freq);
+    esl_vec_DNorm(abc_freq, abc->K);
+    fprintf(fp, "  %7d  %10.8f  %10.8f\n", apos+1, 
+	    nnongap / (nnongap + abc_ct[apos][abc->K]),
+	    (bg_ent - esl_vec_DEntropy(abc_freq, abc->K)));
+  }
+  fprintf(fp, "//\n");
+
+  if(abc_freq != NULL) free(abc_freq);
+
+  return eslOK;
+
+ ERROR:
+  ESL_FAIL(eslEINVAL, errbuf, "out of memory");
+  return status; /* NEVERREACHED */
+}
+
+
+/* dump_residue_info
+ *                   
+ * Given an MSA, print out the number of sequences with
+ * a non-gap residue in each column of the alignment.
+ */
+static int dump_residue_info(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf)
+{
+  int apos, rfpos;
+  double rct, gct;
+
+  fprintf(fp, "# Insert information:\n");
+  fprintf(fp, "# Alignment file: %s\n", alifile);
+  fprintf(fp, "# Alignment idx:  %d\n", nali);
+  if(msa_name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa_name); }
+  fprintf(fp, "# Number of sequences: %d\n", nseq);
+  if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); }
+  else            { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); }
+  fprintf(fp, "#\n");
+  if(i_am_rf != NULL) { 
+    fprintf(fp, "# %7s  %7s  %10s  %8s  %10s  %8s\n", "rfpos",    "alnpos",  "numres",    "freqres",  "numgap",     "freqgap");
+    fprintf(fp, "# %7s  %7s  %10s  %8s  %10s  %8s\n", "-------", "-------", "----------", "--------", "----------", "--------");
+  }  
+  else { 
+    fprintf(fp, "# %7s  %10s  %8s  %10s  %8s\n", "alnpos",  "numres",   "freqres", "numgap",    "freqgap");
+    fprintf(fp, "# %7s  %10s  %8s  %10s  %8s\n", "-------", "----------", "--------", "----------", "--------");
+  }
+ 
+  rfpos = 0;
+  for(apos = 0; apos < alen; apos++) {
+    rct = esl_vec_DSum(abc_ct[apos], abc->K);
+    gct = abc_ct[apos][abc->K];
+    if(i_am_rf != NULL) { 
+      if(i_am_rf[apos]) { 
+	fprintf(fp, "  %7d", rfpos+1);
+	rfpos++; 
+      }
+      else { 
+	fprintf(fp, "  %7s", "-");
+      }
+    }
+    fprintf(fp, "  %7d  %10.1f  %8.6f  %10.1f  %8.6f\n", apos+1, rct, rct / (float) nseq, gct, gct / (float) nseq);
+  }
+  fprintf(fp, "//\n");
+
+  return eslOK;
+}
+
+/* dump_posterior_column_info
+ *                   
+ * Dump per-column posterior probability data to a file.
+ *
+ */      
+static int dump_posterior_column_info(FILE *fp, double **pp_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf)
+{
+  int    p,apos;     /* counters over sequences, columns of MSA */
+  int    nppvals = 12;
+  int    rfpos;
+  double nnongap;
+  double sum;
+  float ppavgA[11];
+  char ppstring[12] = "0123456789*.";
+
+  ppavgA[0]  = 0.025;  
+  ppavgA[1]  = 0.10;
+  ppavgA[2]  = 0.20;
+  ppavgA[3]  = 0.30;
+  ppavgA[4]  = 0.40;
+  ppavgA[5]  = 0.50;
+  ppavgA[6]  = 0.60;
+  ppavgA[7]  = 0.70;
+  ppavgA[8]  = 0.80;
+  ppavgA[9]  = 0.90;
+  ppavgA[10] = 0.975;
+
+  fprintf(fp, "# Posterior probability stats per column:\n");
+  fprintf(fp, "# Alignment file: %s\n", alifile);
+  fprintf(fp, "# Alignment idx:  %d\n", nali);
+  if(msa_name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa_name); }
+  fprintf(fp, "# Number of sequences: %d\n", nseq);
+  if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); }
+  else            { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); }
+  fprintf(fp, "#\n");
+
+  fprintf(fp, "# %6s", "alnpos");
+  if(i_am_rf != NULL) fprintf(fp, "  %6s", "rfpos");
+  fprintf(fp, "  %9s", "nnongap");  
+  for(p = 0; p < nppvals; p++) { 
+    fprintf(fp, "  %9c", ppstring[p]);
+  }
+  fprintf(fp, "  %9s\n", "avgPP");
+
+  fprintf(fp, "# %6s  %6s  %9s", "------", "------", "---------");
+  for(p = 0; p < nppvals; p++) { 
+    fprintf(fp, "  %9s", "---------");
+  }
+  fprintf(fp, "  %9s\n", "---------");
+
+  rfpos = 1;
+  for(apos = 0; apos < alen; apos++) { 
+    sum = 0;
+    fprintf(fp, "  %6d", apos+1);
+    if(i_am_rf != NULL) { 
+      if(i_am_rf[apos]) fprintf(fp, "  %6d", rfpos++);
+      else              fprintf(fp, "  %6s", "-");
+    }
+    nnongap = esl_vec_DSum(pp_ct[apos], 11);
+    fprintf(fp, "  %9.1f", nnongap);
+    for(p = 0; p < nppvals; p++) { 
+      fprintf(fp, "  %9.1f", pp_ct[apos][p]);
+      if(p <= 10) sum += pp_ct[apos][p] * ppavgA[p];
+    }
+    fprintf(fp, "  %.5f\n", sum / nnongap);
+  }
+  fprintf(fp, "//\n");
+
+  return eslOK;
+}
+
+
+/* dump_posterior_sequence_info
+ *                   
+ * Dump per-sequence posterior probability data to a file.
+ *
+ */      
+static int dump_posterior_sequence_info(FILE *fp, ESL_MSA *msa, int nali, char *alifile, char *errbuf)
+{
+  int    i,p,apos;     /* counters over sequences, columns of MSA */
+  int    ppidx;
+  int    nppvals = 12;
+  int    nnongap;
+  double sum;
+  float ppavgA[11];
+  char ppstring[12] = "0123456789*.";
+  int seq_pp_ct[12];
+
+  ppavgA[0]  = 0.025;  
+  ppavgA[1]  = 0.10;
+  ppavgA[2]  = 0.20;
+  ppavgA[3]  = 0.30;
+  ppavgA[4]  = 0.40;
+  ppavgA[5]  = 0.50;
+  ppavgA[6]  = 0.60;
+  ppavgA[7]  = 0.70;
+  ppavgA[8]  = 0.80;
+  ppavgA[9]  = 0.90;
+  ppavgA[10] = 0.975;
+
+  fprintf(fp, "# Posterior probability stats per sequence:\n");
+  fprintf(fp, "# Alignment file: %s\n", alifile);
+  fprintf(fp, "# Alignment idx:  %d\n", nali);
+  if(msa->name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa->name); }
+  fprintf(fp, "# Number of sequences: %d\n", msa->nseq);
+  fprintf(fp, "# %7s  %-40s  %7s", "seqidx", "seqname", "nnongap");
+  for(p = 0; p < nppvals-1; p++) {  /* don't include gaps in per-sequence output */
+    fprintf(fp, "  %7c", ppstring[p]);
+  }
+  fprintf(fp, "  %7s\n", "avgPP");
+
+  fprintf(fp, "# %7s  %40s  %7s", "-------", "----------------------------------------", "-------");
+  for(p = 0; p < nppvals-1; p++) { /* don't include gaps in per-sequence output */
+    fprintf(fp, "  %7s", "-------");
+  }
+  fprintf(fp, "  %7s\n", "-------");
+
+  for(i = 0; i < msa->nseq; i++) { 
+    if(msa->pp[i] != NULL) { 
+      fprintf(fp, "  %7d  %-40s", i+1, msa->sqname[i]);
+      sum = 0.;
+      esl_vec_ISet(seq_pp_ct, nppvals, 0);
+      for(apos = 0; apos < msa->alen; apos++) { 
+	if((ppidx = get_pp_idx(msa->abc, msa->pp[i][apos])) == -1) ESL_FAIL(eslEFORMAT, errbuf, "bad #=GR PP char: %c", msa->pp[i][apos]);
+	seq_pp_ct[ppidx]++;
+      }
+      nnongap = esl_vec_ISum(seq_pp_ct, 11);
+      fprintf(fp, "  %7d", nnongap);
+      for(p = 0; p < nppvals-1; p++) { /* don't include gaps in per-sequence output */
+	fprintf(fp, "  %7d", seq_pp_ct[p]);
+	if(p <= 10) sum += (float) seq_pp_ct[p] * ppavgA[p];
+      }
+      fprintf(fp, "  %.5f\n", sum / (float) nnongap);
+    }
+  }
+  fprintf(fp, "//\n");
+
+  return eslOK;
+}
+
+
+/* dump_insert_info
+ *                   
+ * Given an MSA with RF annotation, print out information about how many 'insertions' come
+ * after each non-gap RF column (consensus column). 
+ */
+static int dump_insert_info(FILE *fp, ESL_MSA *msa, int use_weights, int nali, int *i_am_rf, char *alifile, char *errbuf)
+{
+  double **ict       = NULL;
+  double  *total_ict = NULL;
+  int      apos, rfpos;
+  int      i;
+  int      rflen;
+  double   seqwt; /* weight of current sequence */
+  double   nseq;
+  int      status;
+
+  /* contract checks */
+  if (! (msa->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in dump_insert_info(), msa must be digitized.");
+  if (msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "No #=GC RF markup in alignment, it is needed for --iinfo.");
+  if (i_am_rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "internal error, dump_insert_info() i_am_rf is NULL.");
+  if (use_weights && msa->wgt == NULL) ESL_FAIL(eslEINCOMPAT, errbuf, "dump_insert_info(): use_weights==TRUE but msa->wgt == NULL");
+
+  ESL_ALLOC(total_ict, sizeof(double) * (msa->alen+2));
+  esl_vec_DSet(total_ict, (msa->alen+2), 0.);
+
+  ESL_ALLOC(ict,  sizeof(double *) * (msa->alen+2));
+  for (i = 0; i <= msa->alen; i++) ict[i] = NULL;
+
+  for (i = 0; i <= msa->alen; i++)
+    {
+      ESL_ALLOC(ict[i],  sizeof(double) * (msa->nseq));
+      esl_vec_DSet(ict[i], (msa->nseq), 0.);
+    }
+
+  fprintf(fp, "# Insert information:\n");
+  fprintf(fp, "# Alignment file: %s\n", alifile);
+  fprintf(fp, "# Alignment idx:  %d\n", nali);
+  if (msa->name) { fprintf(fp, "# Alignment name: %s\n", msa->name); }
+  fprintf(fp, "# rfpos is the nongap RF position after which insertions occur\n");
+  fprintf(fp, "# An rfpos of '0' indicates insertions before the first nongap RF position\n");
+  fprintf(fp, "# Number of sequences: %d\n", msa->nseq);
+  if (use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); }
+  else             { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); }
+  fprintf(fp, "#\n");
+
+  fprintf(fp, "# %8s  %10s  %8s  %8s\n", "rfpos",    "nseq w/ins",  "freq ins", "avg len");
+  fprintf(fp, "# %8s  %10s  %8s  %8s\n", "--------", "----------", "--------", "--------");
+
+  rflen = 0;
+  for(apos = 1; apos <= msa->alen; apos++)
+    if (i_am_rf[apos-1]) rflen++;
+
+  rfpos = 0;
+  for (apos = 1; apos <= msa->alen; apos++)
+    {
+      if (i_am_rf[apos-1]) rfpos++;
+      else {
+	for(i = 0; i < msa->nseq; i++) { 
+	  seqwt = use_weights ? msa->wgt[i] : 1.0;
+	  if(esl_abc_XIsResidue(msa->abc, msa->ax[i][apos])) { 
+	    ict[rfpos][i]++;
+	    total_ict[rfpos] += seqwt;
+	  }
+	}	
+      }  
+    }
+  rflen = rfpos;
+
+  for(rfpos = 0; rfpos <= rflen; rfpos++)
+    {
+      nseq = 0.;
+      for(i = 0; i < msa->nseq; i++) { 
+	if(ict[rfpos][i] >= 1) { 
+	  seqwt = use_weights ? msa->wgt[i] : 1.0;
+	  nseq += seqwt;
+	}
+      }
+      if(nseq > 0.) 
+	fprintf(fp, "  %8d  %10.1f  %8.6f  %8.3f\n", rfpos, nseq, nseq / (float) msa->nseq, ((float) total_ict[rfpos] / (float) nseq));
+    }
+  fprintf(fp, "//\n");
+
+  for(i = 0; i <= msa->alen; i++) free(ict[i]);
+  free(ict);
+  free(total_ict);
+  return eslOK;
+
+ ERROR:
+  if (ict) {
+    for (i = 0; i <= msa->alen; i++) 
+      if (ict[i]) free(ict[i]);
+    free(ict);
+  }
+  if (total_ict) free(total_ict);
+  return status; 
+}
+
+/* dump_column_residue_counts
+ *                   
+ * Dump per-column residue counts from abc_ct[][] to 
+ * an open output file.
+ *
+ *  abc_ct: [0..msa->alen-1][0..abc->K] number of each residue at each position (abc->K is gap) 
+ */
+static int dump_column_residue_counts(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int no_ambig, int use_weights, int nali, int64_t alen, int nseq, char *msa_name, char *alifile, char *errbuf)
+{
+  int apos;
+  int i;
+
+  fprintf(fp, "# Per column residue counts:\n");
+  fprintf(fp, "# Alignment file: %s\n", alifile);
+  fprintf(fp, "# Alignment idx:  %d\n", nali);
+  if(msa_name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa_name); }
+  fprintf(fp, "# Number of sequences: %d\n", nseq);
+  if(no_ambig) { 
+    fprintf(fp, "# Ambiguous residues were not counted.\n");
+  }
+  else { 
+    if(abc->type == eslRNA)   fprintf(fp, "# Ambiguities were averaged (e.g. 1 'N' = 0.25 'A', 0.25 'C', 0.25 'G' and 0.25 'U')\n");
+    if(abc->type == eslDNA)   fprintf(fp, "# Ambiguities were averaged (e.g. 1 'N' = 0.25 'A', 0.25 'C', 0.25 'G' and 0.25 'T')\n");
+    if(abc->type == eslAMINO) fprintf(fp, "# Ambiguities were averaged (e.g. 1 'X' = 0.05 each for all 20 amino acids\n");
+  }
+  if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); }
+  else            { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); }
+  fprintf(fp, "#\n");
+
+  fprintf(fp, "# %7s", "alnpos"); 
+  for(i = 0; i < abc->K; i++) fprintf(fp, "     %c   ", abc->sym[i]);
+  fprintf(fp, "\n");
+
+  fprintf(fp, "# %7s", "-------"); 
+  for(i = 0; i < abc->K; i++) fprintf(fp, "  %7s", "-------");
+  fprintf(fp, "\n");
+
+  for(apos = 0; apos < alen; apos++) {
+    fprintf(fp, "  %7d", apos+1);
+    for(i = 0; i < abc->K; i++) fprintf(fp, "  %7.1f", abc_ct[apos][i]);
+    fprintf(fp, "\n");
+  }
+  fprintf(fp, "//\n");
+
+  return eslOK;
+
+}
+
+/* dump_basepair_counts
+ *                   
+ * Dump per-basepaired-column basepair counts from bp_ct[][][] to 
+ * an open output file. Only pairs involving canonical residues
+ * are printed. (i.e. for RNA: AA,AC,AG,AU, CA,CC,CG,CU, GA,GC,GG,GU,
+ * UA,UC,UG,UU).
+ *
+ * <bp_ct>  [0..apos..alen-1][0..abc->Kp-1][0..abc->Kp-1] 
+ * - per (non-pknotted) consensus basepair count of each possible basepair 
+ *   over all seqs basepairs are indexed by 'i' the minimum of 'i:j' for a 
+ *   pair between i and j, where i < j. Note that non-canonicals and 
+ *   gaps and the like are all stored independently.
+ */
+static int dump_basepair_counts(FILE *fp, ESL_MSA *msa, ESL_ALPHABET *abc, double ***bp_ct, int use_weights, int nali, int nseq, char *msa_name, char *alifile, char *errbuf)
+{
+  int status;
+  int apos, rpos;
+  int i, j;
+
+  int      *ct = NULL;            /* 0..msa->alen-1 base pair partners array for current sequence */
+  char     *ss_nopseudo = NULL;   /* no-pseudoknot version of structure */
+
+  /* get ct array which defines the consensus base pairs */
+  ESL_ALLOC(ct,  sizeof(int) * (msa->alen+1));
+  ESL_ALLOC(ss_nopseudo, sizeof(char) * (msa->alen+1));
+  esl_wuss_nopseudo(msa->ss_cons, ss_nopseudo);
+  if ((status = esl_wuss2ct(ss_nopseudo, msa->alen, ct)) != eslOK) ESL_FAIL(status, errbuf, "Consensus structure string is inconsistent.");
+
+  fprintf(fp, "# Per-column basepair counts:\n");
+  fprintf(fp, "# Alignment file: %s\n", alifile);
+  fprintf(fp, "# Alignment idx:  %d\n", nali);
+  if(msa_name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa_name); }
+  fprintf(fp, "# Number of sequences: %d\n", nseq);
+  fprintf(fp, "# Only basepairs involving two canonical (non-degenerate) residues were counted.\n");
+  if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); }
+  else            { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); }
+  fprintf(fp, "#\n");
+
+  fprintf(fp, "# %7s  %7s", "lpos",    "rpos"); 
+  for(i = 0; i < abc->K; i++) { 
+    for(j = 0; j < abc->K; j++) {  
+      fprintf(fp, "    %c%c  ", abc->sym[i], abc->sym[j]);
+    }
+  }
+  fprintf(fp, "\n");
+
+  fprintf(fp, "# %7s  %7s", "-------",    "-------"); 
+  for(i = 0; i < abc->K; i++) { 
+    for(j = 0; j < abc->K; j++) {  
+      fprintf(fp, "  %6s", "------");
+    }
+  }
+  fprintf(fp, "\n");
+
+  for(apos = 0; apos < msa->alen; apos++) {
+    if(bp_ct[apos] != NULL) { 
+      rpos = ct[(apos+1)];
+      fprintf(fp, "  %7d  %7d", apos+1, rpos);
+      for(i = 0; i < abc->K; i++) { 
+	for(j = 0; j < abc->K; j++) {  
+	  fprintf(fp, "  %6d", (int) bp_ct[apos][i][j]);
+	}
+      }
+      fprintf(fp, "\n");
+    }
+  }
+  fprintf(fp, "//\n");
+
+  if(ss_nopseudo != NULL) free(ss_nopseudo);
+  if(ct != NULL) free(ct);
+  return eslOK;
+
+ ERROR:
+  if(ss_nopseudo != NULL) free(ss_nopseudo);
+  if(ct != NULL) free(ct);
+  ESL_FAIL(status, errbuf, "Error, out of memory while dumping basepair info");
+}
+
+/* map_rfpos_to_apos
+ *                   
+ * Given an MSA, determine the alignment position of each
+ * non-gap RF (reference) position. The abc is only necessary
+ * for defining gap characters.
+ * 
+ * rf2a_map[0..rfpos..rflen-1] = apos, apos is the alignment position (0..msa->alen-1) that 
+ *                               is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) 
+ */
+static int map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int64_t alen, int **ret_i_am_rf, int **ret_rf2a_map, int *ret_rflen)
+{
+  int status;
+  int rflen = 0;
+  int *rf2a_map = NULL;
+  int *i_am_rf = NULL;
+  int rfpos = 0;
+  int apos = 0;
+
+  /* contract check */
+  if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, trying to map RF positions to alignment positions, but msa->rf is NULL.");
+
+  /* count non-gap RF columns */
+  for(apos = 0; apos < alen; apos++) { 
+    if((! esl_abc_CIsGap(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsMissing(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsNonresidue(abc, msa->rf[apos])))
+      { 
+	rflen++;
+	/* I don't use esl_abc_CIsResidue() b/c that would return FALSE for 'x' with RNA and DNA */
+      }
+  }
+  /* build map */
+  ESL_ALLOC(i_am_rf, sizeof(int) * alen);
+  ESL_ALLOC(rf2a_map, sizeof(int) * rflen);
+  for(apos = 0; apos < alen; apos++) {
+    if((! esl_abc_CIsGap(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsMissing(abc, msa->rf[apos])) && 
+       (! esl_abc_CIsNonresidue(abc, msa->rf[apos]))) { 
+      i_am_rf[apos] = TRUE;
+      rf2a_map[rfpos++] = apos;
+    }
+    else { 
+      i_am_rf[apos] = FALSE;
+    }
+  }
+  *ret_i_am_rf  = i_am_rf;
+  *ret_rf2a_map = rf2a_map;
+  *ret_rflen    = rflen;
+  return eslOK;
+
+ ERROR:
+  if(i_am_rf  != NULL) free(i_am_rf);
+  if(rf2a_map != NULL) free(rf2a_map);
+  ESL_FAIL(status, errbuf, "Error, out of memory while mapping RF positions to alignment positions.");
+}
+
+/* check_msa_weights
+ *                   
+ * Given an MSA, check if it has any weight that is 
+ * different from 1.0. If yes return TRUE, if not
+ * return FALSE. If it does not have weights return
+ * FALSE.
+ */
+static int check_msa_weights(ESL_MSA *msa)
+{
+  int i;
+
+  if(msa->wgt == NULL) return FALSE;
+  for(i = 0; i < msa->nseq; i++) { 
+    if (esl_FCompare(msa->wgt[i], 1.0, eslSMALLX1) != eslOK) return TRUE;
+  }
+  return FALSE;
+}
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/miniapps/esl-alistat.itest.pl b/miniapps/esl-alistat.itest.pl
new file mode 100755
index 0000000..c59da9a
--- /dev/null
+++ b/miniapps/esl-alistat.itest.pl
@@ -0,0 +1,233 @@
+#! /usr/bin/perl
+
+# Integrated test of the esl-alistat miniapp.
+#
+# Usage:     ./esl-alistat.itest.pl <esl-alistat binary> <tmpfile prefix>
+# Example:   ./esl-alistat.itest.pl ./esl-alistat        foo
+#
+# EPN, Tue Feb  2 13:19:44 2010
+
+$eslalistat= shift;
+$tmppfx    = shift;
+
+if (! -x "$eslalistat") { die "FAIL: didn't find esl-alistat binary $eslalistat"; }
+
+open(ALIFILE, ">$tmppfx.stk") || die "FAIL: couldn't open $tmppfx.stk for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+seq1         aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg
+#=GR seq1 PP 5789**..**88...*9.9****88.7..776543210
+seq2         ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG....
+#=GR seq2 PP ..********************************....
+seq3         ..AAAA..AAAA...C...CCCCCC.C..GGGG-....
+#=GR seq3 PP ..5555..4*44...3...888888.8..8899.....
+#=GC SS_cons ...............<...<<<<......>>>>>....
+#=GC PP_cons ..789*..8877...8...****99.8..99998....
+#=GC RF      ..AAAA..AAAA...C...CCCCCC.c..GGGGG....
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.dbl.stk") || die "FAIL: couldn't open $tmppfx.stk for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GS seq1 WT 1.5
+#=GS seq2 WT 1.0
+#=GS seq3 WT 0.5
+seq1         aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg
+#=GR seq1 PP 5789**..**88...*9.9****88.7..776543210
+seq2         ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG....
+#=GR seq2 PP ..********************************....
+seq3         ..AAAA..AAAA...C...CCCCCC.C..GGGG-....
+#=GR seq3 PP ..5555..4*44...3...888888.8..8899.....
+#=GC SS_cons ...............<...<<<<......>>>>>....
+#=GC PP_cons ..789*..8877...8...****99.8..99998....
+#=GC RF      ..AAAA..AAAA...C...CCCCCC.c..GGGGG....
+//
+# STOCKHOLM 1.0
+seq1         aaA
+#=GR seq1 PP 578
+seq2         ..A
+#=GR seq2 PP ..*
+#=GC SS_cons ...
+#=GC RF      ..A
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.afa") || die "FAIL: couldn't open $tmppfx.afa for writing alifile";
+print ALIFILE << "EOF";
+>seq1
+aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg
+>seq2
+..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG....
+>seq3
+..AAAA..AAAA...C...CCCCCC.C..GGGG-....
+EOF
+close ALIFILE;
+
+$output = `$eslalistat -h`;
+if ($? != 0)                                     { die "FAIL: esl-alistat failed unexpectedly"; }
+if ($output !~ /Usage: esl-alistat/)             { die "FAIL: help output not right"; }
+
+# We do 2 runs of most tests, with and without --small
+$smallA[0] = "";
+$smallA[1] = "--small --informat pfam";
+
+for($pass = 0; $pass < 2; $pass++) {
+    $pass2write = $pass+1;
+
+    $output = `$eslalistat $smallA[$pass] --rna $tmppfx.stk 2>&1`;
+    if ($? != 0)                                                                                                                                { die "FAIL: esl-alistat failed unexpectedly";}
+    if ($output !~ /Alignment length:    38/)        { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if ($output !~ /Average length:      26.7/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if ($pass == 0) { 
+	if ($output !~ /Format:              Stockholm/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if ($output !~ /Average identity:    93\%/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /Format:              Pfam/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalistat $smallA[$pass] --dna $tmppfx.stk 2>&1`;
+    if ($? != 0)                                                                                                                                { die "FAIL: esl-alistat failed unexpectedly";}
+    if ($output !~ /Alignment length:    38/)        { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if ($output !~ /Average length:      26.7/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if ($pass == 0) { 
+	if ($output !~ /Format:              Stockholm/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if ($output !~ /Average identity:    93\%/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /Format:              Pfam/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalistat $smallA[$pass] --amino $tmppfx.stk 2>&1`;
+    if ($? != 0)                                                                                                                                { die "FAIL: esl-alistat failed unexpectedly";}
+    if ($output !~ /Alignment length:    38/)        { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if ($output !~ /Average length:      26.7/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if ($pass == 0) { 
+	if ($output !~ /Format:              Stockholm/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if ($output !~ /Average identity:    93\%/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /Format:              Pfam/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+
+    if($pass == 0) { 
+	$output = `$eslalistat $smallA[$pass] --informat afa --rna $tmppfx.afa 2>&1`;
+	if ($? != 0)                                         { die "FAIL: esl-alistat failed unexpectedly";}
+	if ($output !~ /Format:              aligned FASTA/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if ($output !~ /Alignment length:    38/)        { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if ($output !~ /Average length:      26.7/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if ($output !~ /Average identity:    93\%/)      { die "FAIL: alignments compared incorrectly on pass $pass2write"; }
+    }
+
+    $output = `$eslalistat $smallA[$pass] -1 --rna $tmppfx.stk 2>&1`;
+    if ($? != 0)                                                                                                                                { die "FAIL: esl-alistat failed unexpectedly";}
+    if ($pass == 0) { 
+	if ($output !~ /Stockholm       3      38           80     20     31       26.7  93/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /Pfam       3      38           80       26.7/)                        { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+
+    # test a file with 2 alignments
+    $output = `$eslalistat $smallA[$pass] --rna $tmppfx.dbl.stk 2>&1`;
+    if ($? != 0)                                         { die "FAIL: esl-alistat failed unexpectedly";}
+    if ($output !~ /Alignment length:    38/)        { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if ($output !~ /Average length:      26.7/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if ($output !~ /Alignment number:    2/)         { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if ($output !~ /Average length:      2.0/)       { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if ($pass == 0) { 
+	if ($output !~ /Format:              Stockholm/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if ($output !~ /Average identity:    93\%/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+    else { 
+	if ($output !~ /Format:              Pfam/)      { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+
+    # test output file options
+    system("$eslalistat --icinfo $tmppfx.ic $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null");
+    if ($? != 0)                                 { die "FAIL: esl-alistat failed unexpectedly";}
+    $output = `cat $tmppfx.ic`;
+    if($output !~ /5        9  1.0\d+  2.0\d+/)  { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if($output !~ /\# Alignment idx:  2/)        { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+
+    system("$eslalistat --rinfo  $tmppfx.r  $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null");
+    if ($? != 0)                                         { die "FAIL: esl-alistat failed unexpectedly";}
+    $output = `cat $tmppfx.r`;
+    if($output !~ /21       34         2.0  0.66\d+         1.0  0.33\d+/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if($output !~ /\# Alignment idx:  2/)                { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+
+    system("$eslalistat --pcinfo  $tmppfx.pc $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null");
+    if ($? != 0)                                         { die "FAIL: esl-alistat failed unexpectedly";}
+    $output = `cat $tmppfx.pc`;
+    if($output !~ /31\s+18\s+3.0\s+0.0\s+0.0\s+0.0\s+0.0\s+0.0\s+0.0\s+0.0\s+1.0\s+1.0\s+0.0\s+1.0\s+0.0\s+0.82\d+/) { 
+	die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; 
+    }
+    if($output !~ /\# Alignment idx:  2/)                { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+
+    system("$eslalistat --list $tmppfx.list $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null");
+    if ($? != 0)                                                  { die "FAIL: esl-alistat failed unexpectedly";}
+    $output = `cat $tmppfx.list`;
+    if($output !~ /seq2.+seq2/s)                                  { die "FAIL: alignment lists created incorrectly on pass $pass2write"; }
+    if($output !~ /seq3/)                                         { die "FAIL: alignment lists created incorrectly on pass $pass2write"; }
+
+    if($pass == 0) { # these are incompatible with --small 
+	system("$eslalistat --psinfo  $tmppfx.ps $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null");
+	if ($? != 0)                                         { die "FAIL: esl-alistat failed unexpectedly";}
+	$output = `cat $tmppfx.ps`;
+        if($output !~ /seq3                                           20        0        0        0        1        3        4        0        0        9        2        1  0.67\d+/) { 
+	    die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; 
+	}
+	if($output !~ /seq2                                            1        0        0        0        0        0        0        0        0        0        0        1  0.97\d+/) {
+	    die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; 
+	}
+
+	system("$eslalistat --iinfo  $tmppfx.i $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null");
+	if ($? != 0)                                                  { die "FAIL: esl-alistat failed unexpectedly";}
+	$output = `cat $tmppfx.i`;
+        if($output !~ /16\s+1.0\s+0.33\d+\s+2.0/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if($output !~ /\# Alignment idx:  2/)     { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+
+	system("$eslalistat --cinfo $tmppfx.c --noambig $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null");
+	if ($? != 0)                                                  { die "FAIL: esl-alistat failed unexpectedly";}
+	$output = `cat $tmppfx.c`;
+	if($output !~ /3\s+3\.\d+\s+0\.\d+\s+0\.\d+\s+0/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if($output !~ /\# Alignment idx:  2/)                         { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+
+	system("$eslalistat --bpinfo  $tmppfx.bp $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null");
+	if ($? != 0)                                                  { die "FAIL: esl-alistat failed unexpectedly";}
+	$output = `cat $tmppfx.bp`;
+        if($output !~ /16\s+34\s+0\s+0\s+0\s+0\s+0\s+0\s+2\s+0\s+0\s+0\s+0\s+0\s+0\s+0\s+0\s+0\s+/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if($output !~ /\# Alignment idx:  2/)                         { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+
+	system("$eslalistat --weight --cinfo $tmppfx.c $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null");
+	if ($? != 0)                                                  { die "FAIL: esl-alistat failed unexpectedly";}
+	$output = `cat $tmppfx.c`;
+	if($output !~ /2\s+1\.5\s+0\.\d+\s+0\.\d+\s+0/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+	if($output !~ /\# Alignment idx:  2/)                         { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    }
+
+    system("$eslalistat --cinfo $tmppfx.c $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null");
+    if ($? != 0)                                                  { die "FAIL: esl-alistat failed unexpectedly";}
+    $output = `cat $tmppfx.c`;
+    if($output !~ /3\s+3\.\d+\s+0\.\d+\s+0\.\d+\s+0/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+    if($output !~ /\# Alignment idx:  2/)                         { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; }
+
+}
+
+
+print "ok\n"; 
+unlink "$tmppfx.stk";
+unlink "$tmppfx.afa";
+unlink "$tmppfx.dbl.stk";
+unlink "$tmppfx.i";
+unlink "$tmppfx.ic";
+unlink "$tmppfx.list";
+unlink "$tmppfx.pc";
+unlink "$tmppfx.ps";
+unlink "$tmppfx.r";
+unlink "$tmppfx.c";
+unlink "$tmppfx.bp";
+exit 0;
diff --git a/miniapps/esl-alistat.man b/miniapps/esl-alistat.man
new file mode 100644
index 0000000..3ea0b15
--- /dev/null
+++ b/miniapps/esl-alistat.man
@@ -0,0 +1,234 @@
+.TH "esl-alistat" 1  "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-alistat - summarize a multiple sequence alignment file
+
+.SH SYNOPSIS
+
+.B esl-alistat
+.I [options]
+.I msafile
+
+.SH DESCRIPTION
+
+.pp
+.B esl-alistat 
+summarizes the contents of the multiple sequence alignment(s) in 
+.I msafile, 
+such as the alignment name, format, alignment length (number of
+aligned columns), number of sequences, average pairwise % identity,
+and mean, smallest, and largest raw (unaligned) lengths of the
+sequences.
+
+If 
+.I msafile
+is - (a single dash),
+multiple alignment input is read from
+.I stdin.
+
+The alignments can be of protein or DNA/RNA sequences. All alignments
+in the same 
+.I msafile
+must be either protein or DNA/RNA. The alphabet will be autodetected
+unless one of the options 
+.I --amino,
+.I --dna,
+or 
+.I --rna 
+are given. These options may be useful in automated
+pipelines to make 
+.B esl-alistat 
+more robust; alphabet autodetection is not infallible.
+
+The 
+.B --list,
+.B --icinfo,
+.B --rinfo,
+.B --pcinfo,
+.B --psinfo,
+.B --cinfo,
+.B --bpinfo,
+and
+.B --iinfo,
+options allow dumping various statistics on the alignment to optional
+output files as described for each of those options below.
+
+The 
+.B --small
+option allows summarizing alignments without storing them in memory
+and can be useful for large alignment files with sizes that approach
+or exceed the amount of available RAM.  When
+.B --small
+is used, 
+.B esl-alistat
+will print fewer statistics on the alignment, omitting data on the
+smallest and largest sequences and the average identity of the
+alignment.
+.B --small
+only works on Pfam formatted alignments (a special type of
+non-interleaved Stockholm alignment in which each sequence occurs on a
+single line) and 
+.BI --informat " pfam"
+must be given with
+.B --small.
+Further, when 
+.B --small
+is used, the alphabet must be specified with
+.I --amino,
+.I --dna,
+or 
+.I --rna.
+
+.SH OPTIONS
+
+.TP
+.B -h 
+Print brief help;  includes version number and summary of
+all options, including expert options.
+
+.TP 
+.B -1
+Use a tabular output format with one line of statistics per alignment
+in 
+.I msafile.
+This is most useful when
+.I msafile
+contains many different alignments (such as a Pfam database in
+Stockholm format).
+
+
+.SH EXPERT OPTIONS
+
+.TP
+.BI --informat " <s>"
+Specify that the input alignment is in 
+.I <s>
+format. At present, valid formats are limited to
+Stockholm, Pfam, and AFA (aligned FASTA).
+
+.TP
+.B --amino
+Assert that the 
+.I msafile 
+contains protein sequences. 
+
+.TP 
+.B --dna
+Assert that the 
+.I msafile 
+contains DNA sequences. 
+
+.TP 
+.B --rna
+Assert that the 
+.I msafile 
+contains RNA sequences. 
+
+.TP 
+.B --small
+Operate in small memory mode for Pfam formatted alignments.
+.BI --informat " pfam"
+and one of
+.B --amino,
+.B --dna,
+or
+.B --rna
+must be given as well.
+
+.TP 
+.BI --list " <f>"
+List the names of all sequences in all alignments in 
+.B msafile
+to file
+.I <f>.
+Each sequence name is written on its own line. 
+
+.TP 
+.BI --icinfo " <f>"
+Dump the information content per position in tabular format to file
+.I <f>.
+Lines prefixed with "#" are comment lines, which explain the
+meanings of each of the tab-delimited fields.
+
+.TP 
+.BI --rinfo " <f>"
+Dump information on the frequency of gaps versus nongap residues per position in tabular format to file
+.I <f>.
+Lines prefixed with "#" are comment lines, which explain the
+meanings of each of the tab-delimited fields.
+
+.TP 
+.BI --pcinfo " <f>"
+Dump per column information on posterior probabilities in tabular format to file
+.I <f>.
+Lines prefixed with "#" are comment lines, which explain the
+meanings of each of the tab-delimited fields.
+
+.TP 
+.BI --psinfo " <f>"
+Dump per sequence information on posterior probabilities in tabular format to file
+.I <f>.
+Lines prefixed with "#" are comment lines, which explain the
+meanings of each of the tab-delimited fields.
+
+.TP 
+.BI --iinfo " <f>"
+Dump information on inserted residues in tabular format to file
+.I <f>.
+Insert columns of the alignment are those that are gaps in the
+reference (#=GC RF) annotation. This option only works if the input
+file is in Stockholm format with reference annotation.
+Lines prefixed with "#" are comment lines, which explain the
+meanings of each of the tab-delimited fields. 
+
+.TP 
+.BI --cinfo " <f>"
+Dump per-column residue counts to file
+.I <f>.
+If used in combination with
+.B --noambig
+ambiguous (degenerate) residues will be ignored and not
+counted. Otherwise, they will be marginalized. For example, in an RNA
+sequence file, a 'N' will be counted as 0.25 'A', 0.25 'C', 0.25 'G',
+and 0.25 'U'.
+
+.TP 
+.B --noambig
+With 
+.B --cinfo,
+do not count ambiguous (degenerate) residues. 
+
+.TP 
+.B --bpinfo
+Dump per-column basepair counts to file
+.I <f>.
+Counts appear for each basepair in the consensus secondary structure (annotated as
+"#=GC SS_cons"). Only basepairs from sequences for which both paired positions are
+canonical residues will be counted. That is, any basepair that is a gap
+or an ambiguous (degenerate) residue at either position of the pair is
+ignored and not counted.
+
+
+.TP 
+.B --weight
+With 
+.B --icinfo, --rinfo, --pcinfo, --iinfo, --cinfo 
+and
+.B --bpinfo,
+weight counts based on #=GS WT annotation in the input 
+.B msafile.
+A residue or basepair from a sequence with a weight of 
+.I x
+will be considered 
+.I x
+counts. 
+By default, raw, unweighted counts are reported; corresponding to each
+sequence having an equal weight of 1.
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-cluster.c b/miniapps/esl-cluster.c
new file mode 100644
index 0000000..aab8653
--- /dev/null
+++ b/miniapps/esl-cluster.c
@@ -0,0 +1,212 @@
+/* Clusters tabular data.
+ * 
+ * SRE, Mon Nov  3 13:43:29 2008 [Janelia]
+ * SVN $Id$
+ */
+
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_keyhash.h"
+#include "esl_stack.h"
+#include "esl_tree.h"
+#include "esl_vectorops.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env    range toggles reqs  incomp               help                                     docgroup*/
+  { "-h",      eslARG_NONE,   FALSE, NULL,     NULL,   NULL,NULL,   NULL,          "show brief help on version and usage",        0 },
+  { "-q",      eslARG_INT,      "8", NULL,    "n>0",   NULL,NULL,   NULL,          "field to read as query name, 1..n",           0 },
+  { "-t",      eslARG_INT,      "5", NULL,    "n>0",   NULL,NULL,   NULL,          "field to read as target name, 1..n",          0 },
+  { "-v",      eslARG_INT,      "1", NULL,    "n>0",   NULL,NULL,   NULL,          "field to read as distance value, 1..n",       0 },
+  { "-x",      eslARG_REAL,  "1e-4", NULL,    "x>0",   NULL,NULL,   NULL,          "clustering threshold",                        0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <keyfile> <tabfile>";
+static char banner[] = "clusters tabular data file";
+
+
+static void  read_keyfile   (ESL_GETOPTS *go, char *keyfile, ESL_KEYHASH *kh);
+static void  read_tabfile   (ESL_GETOPTS *go, char *tabfile, ESL_KEYHASH *kh, ESL_DMATRIX *D);
+static void  output_clusters(ESL_GETOPTS *go, ESL_TREE *T, ESL_KEYHASH *kh);
+
+static void
+cmdline_failure(char *argv0, ESL_GETOPTS *go, char *format, ...)
+{
+  va_list argp;
+
+  va_start(argp, format);
+  vfprintf(stderr, format, argp);
+  va_end(argp);
+  esl_usage(stdout, argv0, usage);
+  puts("\n options:");
+  esl_opt_DisplayHelp(stdout, go, 0, 2, 80);
+  /* printf("\nTo see more help on available options, do %s -h\n\n", argv0); */
+  exit(1);
+}
+
+static void
+cmdline_help(char *argv0, ESL_GETOPTS *go) 
+{
+  esl_banner(stdout, argv0, banner);
+  esl_usage (stdout, argv0, usage);
+  puts("\n options:");
+  esl_opt_DisplayHelp(stdout, go, 0, 2, 80);
+  exit(0);
+}
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go       = NULL; 
+  char           *keyfile  = NULL;
+  char           *tabfile  = NULL;
+  ESL_KEYHASH    *kh       = esl_keyhash_Create();
+  int             nkeys    = 0;
+  ESL_DMATRIX    *D        = NULL;
+  ESL_TREE       *T        = NULL;
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], go, "Failed to parse command line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) cmdline_failure(argv[0], go, "Error in app configuration: %s\n",   go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") )                   cmdline_help   (argv[0], go);
+  if (esl_opt_ArgNumber(go) != 2)                      cmdline_failure(argv[0], go, "Incorrect number of command line arguments.\n");
+  keyfile = esl_opt_GetArg(go, 1);
+  tabfile = esl_opt_GetArg(go, 2);
+
+  read_keyfile(go, keyfile, kh);
+  nkeys = esl_keyhash_GetNumber(kh);
+
+  D = esl_dmatrix_Create(nkeys, nkeys);
+  read_tabfile(go, tabfile, kh, D);
+
+  esl_tree_SingleLinkage(D, &T);
+    
+  //esl_tree_WriteNewick(stdout, T);
+  output_clusters(go, T, kh);
+
+
+  esl_tree_Destroy(T);
+  esl_dmatrix_Destroy(D);
+  esl_keyhash_Destroy(kh);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+
+static void 
+read_keyfile(ESL_GETOPTS *go, char *keyfile, ESL_KEYHASH *kh)
+{
+  ESL_FILEPARSER *efp      = NULL;
+  int             nline    = 0;
+  char           *tok      = NULL;
+  int             toklen;
+  int             status;
+
+  if (esl_fileparser_Open(keyfile, NULL, &efp) != eslOK) esl_fatal("File open failed");
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  while (esl_fileparser_NextLine(efp) == eslOK)
+    {
+      nline++;
+      if (esl_fileparser_GetTokenOnLine(efp, &tok, &toklen) != eslOK) esl_fatal("No token found on line %d", nline);
+
+      status = esl_keyhash_Store(kh, tok, toklen, NULL);
+      if      (status == eslEDUP) esl_fatal("Saw key %s twice: keys must be unique", tok);
+      else if (status != eslOK)   esl_fatal("unknown error in storing key %s\n", tok);
+    }
+
+  esl_fileparser_Close(efp);
+}
+
+static void
+read_tabfile(ESL_GETOPTS *go, char *tabfile, ESL_KEYHASH *kh, ESL_DMATRIX *D)
+{
+  ESL_FILEPARSER *efp      = NULL;
+  int             nline    = 0;
+  int             vfield   = esl_opt_GetInteger(go, "-v");
+  int             qfield   = esl_opt_GetInteger(go, "-q");
+  int             tfield   = esl_opt_GetInteger(go, "-t");
+  char           *tok;
+  int             toklen;
+  int             ntok;
+  double          value;
+  int             qidx, tidx;
+  
+  if (esl_fileparser_Open(tabfile, NULL, &efp) != eslOK) esl_fatal("File open failed");
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  esl_dmatrix_Set(D, eslINFINITY);
+
+  while (esl_fileparser_NextLine(efp) == eslOK)
+    {
+      nline++;
+      ntok  = 0;
+      qidx  = tidx = -1;
+      value = eslNaN;
+      while (esl_fileparser_GetTokenOnLine(efp, &tok, &toklen) == eslOK)
+	{
+	  ntok++;
+	  if (ntok == vfield)  value = atof(tok);
+	  if (ntok == qfield && esl_keyhash_Lookup(kh, tok, toklen, &qidx) != eslOK) esl_fatal("failed to find query key %s", tok);
+	  if (ntok == tfield && esl_keyhash_Lookup(kh, tok, toklen, &tidx) != eslOK) esl_fatal("failed to find target key %s", tok);
+	}
+      if (qidx  == -1)  esl_fatal("Failed to find query name on line %d (looking for field %d)\n",  nline, qfield);
+      if (tidx  == -1)  esl_fatal("Failed to find target name on line %d (looking for field %d)\n", nline, tfield);
+      if (isnan(value)) esl_fatal("Failed to find value on line %d (looking for field %d)\n",       nline, vfield);
+
+      D->mx[qidx][tidx] = value;
+      if (D->mx[tidx][qidx] == eslINFINITY) D->mx[tidx][qidx] = value;
+    }
+
+  esl_fileparser_Close(efp);
+}
+
+ 
+void
+output_clusters(ESL_GETOPTS *go, ESL_TREE *T, ESL_KEYHASH *kh)
+{
+  ESL_STACK *ns        = esl_stack_ICreate();
+  ESL_STACK *s2        = esl_stack_ICreate();
+  double     threshold = esl_opt_GetReal(go, "-x");
+  int        v,v2;
+  int        nc = 0;
+
+  esl_stack_IPush(ns, 0);
+  while (esl_stack_IPop(ns, &v) == eslOK)
+    {
+      /* v may only be an internal node. */
+      if (T->ld[v] < threshold) 
+	{
+	  nc++;
+	  printf("Cluster %d:  %g\n", nc, T->ld[v]);
+	  esl_stack_IPush(s2, T->right[v]);
+	  esl_stack_IPush(s2, T->left[v]);
+	  while (esl_stack_IPop(s2, &v2) == eslOK)
+	    {
+	      if (v2 <= 0)
+		printf("= %s \t%d\t%g\n", esl_keyhash_Get(kh, -v2), nc, T->ld[v]);
+	      else 
+		{
+		  esl_stack_IPush(s2, T->right[v2]); 
+		  esl_stack_IPush(s2, T->left[v2]);  
+		}
+	    }
+	  printf("\n\n");
+	  continue;
+	}
+
+      if (T->right[v] > 0) esl_stack_IPush(ns, T->right[v]); else printf("Singleton:\n= %s\t%c\t%c\n\n", esl_keyhash_Get(kh, -T->right[v]), '-', '-'); 
+      if (T->left[v]  > 0) esl_stack_IPush(ns, T->left[v]);  else printf("Singleton:\n= %s\t%c\t%c\n\n", esl_keyhash_Get(kh, -T->left[v]),  '-', '-');
+ 
+    }
+
+  esl_stack_Destroy(ns);
+  esl_stack_Destroy(s2);
+}
diff --git a/miniapps/esl-compalign.c b/miniapps/esl-compalign.c
new file mode 100644
index 0000000..1f9b616
--- /dev/null
+++ b/miniapps/esl-compalign.c
@@ -0,0 +1,581 @@
+/* esl-compalign - compare two multiple sequence alignments
+ *
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_sq.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_vectorops.h"
+#include "esl_wuss.h"
+
+static char banner[] = "compare two multiple sequence alignments";
+
+static char usage[]  = "\
+[-options] <trusted file> <test file>\n\
+  Both files must be in Stockholm format with #=GC RF markup.\n\
+  Sequences must occur in the same order in the two files.\n\
+  Number of non-gap characters in #=GC RF markup must be identical.\n\
+  Note: accuracy is computed differently than in Squid\'s compalign.\n\
+  See the manual page for details on how accuracy is computed.";
+
+static int get_pp_idx(ESL_ALPHABET *abc, char ppchar);
+static int read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_masklen);
+
+static ESL_OPTIONS options[] = {
+  /* name        type        default  env   range togs  reqs  incomp           help                                                   docgroup */
+  { "-h",        eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL,            "help; show brief info on version and usage",                     1 },
+  { "-c",        eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL,            "print per column statistics instead of per sequence stats",      1 },
+  { "-p",        eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL,            "print stats on accuracy versus posterior probability (PP)",      1 },
+  { "--p-mask",  eslARG_OUTFILE,NULL, NULL, NULL, NULL,"-p",  NULL,            "with -p, only consider columns within mask ('1' columns) in <f>",1 },
+  { "--c2dfile", eslARG_OUTFILE,NULL, NULL, NULL, NULL,"-c",  NULL,            "print per column stats to esl-ssdraw --dfile file <f>",          1 },
+  { "--amino",   eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, "--dna,--rna",   "<msafile> contains protein alignments",                          2 },
+  { "--dna",     eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, "--amino,--rna", "<msafile> contains DNA alignments",                              2 },
+  { "--rna",     eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, "--amino,--dna", "<msafile> contains RNA alignments",                              2 },
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS *go;		/* application configuration       */
+  int          kstatus, tstatus;/* return code from Easel routine  */
+  int          fmt;		/* expected format of kfile, tfile */
+  char        *kfile, *tfile;   /* known, test structure file      */
+  ESL_MSAFILE *kfp, *tfp;       /* open kfile, tfile               */
+  ESL_MSA     *ka,  *ta; 	/* known, trusted alignment        */
+  int64_t      klen, tlen;	/* lengths of dealigned seqs       */
+  int          i;		/* counter over sequences          */
+  int          apos;		/* counter over alignment columns  */
+  int          rfpos;		/* counter over consensus (non-gap RF) columns  */
+  int       is_rfpos;            /* TRUE if current apos is a consensus pos, FALSE if not */
+  int          uapos;		/* counter over unaligned residue positions */
+  int          nali;            /* number of alignment we're on in each file */
+
+  int        **kp;              /* [0..i..nseq-1][1..r..sq->n] = x known non-gap RF position of residue r in sequence i */
+  int        **tp;              /* [0..i..nseq-1][1..r..sq->n] = x predicted non-gap RF position of residue r in sequence i */
+  /* for both kp and pp, if x <= 0, residue r for seq i is not aligned to a non-gap RF position, but rather as an 'insert'
+   * after non-gap RF position (x * -1) 
+   */
+  int        *km_pos;          /* [0..rflen] = x, in known aln,     number of residues aligned to non-gap RF column x; special case: mct[0] = 0 */
+  int        *ki_pos;          /* [0..rflen] = x, in known aln,     number of residues inserted after non-gap RF column x */
+  int        *tm_pos;          /* [0..rflen] = x, in predicted aln, number of residues aligned to non-gap RF column x; special case: mct[0] = 0 */
+  int        *ti_pos;          /* [0..rflen] = x, in predicted aln, number of residues inserted after non-gap RF column x */
+  int    *cor_tm_pos;          /* [0..rflen] = x, in predicted aln, number of correctly predicted residues aligned to non-gap RF column x; special case: mct[0] = 0 */
+  int    *cor_ti_pos;          /* [0..rflen] = x, in predicted aln, number of correctly predicted residues inserted after non-gap RF column x */
+
+  int        *km_seq;          /* [0..i..nseq-1] = x, in known aln,     number of residues aligned to non-gap RF columns in seq i; */
+  int        *ki_seq;          /* [0..i..nseq-1] = x, in known aln,     number of residues inserted in seq i */
+  int        *tm_seq;          /* [0..i..nseq-1] = x, in predicted aln, number of residues aligned to non-gap RF columns in seq i; */
+  int        *ti_seq;          /* [0..i..nseq-1] = x, in predicted aln, number of residues inserted in seq i */
+  int    *cor_tm_seq;          /* [0..i..nseq-1] = x, in predicted aln, number of correctly predicted residues aligned to non-gap RF columns in seq i */
+  int    *cor_ti_seq;          /* [0..i..nseq-1] = x, in predicted aln, number of correctly predicted residues inserted in seq i */
+
+  int     *seqlen;             /* [0..i..nseq-1] = x, unaligned seq i has length x */
+  ESL_ALPHABET *abc = NULL;    /* alphabet for all alignments */
+  int      rflen, t_rflen;     /* non-gap RF length (consensus lengths) */
+  int   status;
+  char *namedashes;
+  int ni;
+  int namewidth = 8; /* length of 'seq name' */
+  int cor_tm, cor_ti, km, ki; /* correct predicted match, correct predicted insert, total match, total insert */
+  char *mask = NULL;
+  int masklen;
+  ESL_DSQ *ks;
+  ESL_DSQ *ts;
+  FILE *dfp = NULL; /* for --c2dfile */
+
+  /* variables needed for -p and related options */
+  int do_post = FALSE; /* TRUE if -p enabled */
+  int do_post_for_this_rfpos = FALSE; /* set for each consensus position, always TRUE unless --mask-p2xm */
+  int p;               /* counter over integerized posteriors */
+  int *ptm = NULL;     /* [0..p..10] number of total   matches with posterior value p (10="*")*/
+  int *pti = NULL;     /* [0..p..10] number of total   inserts with posterior value p */
+  int *cor_ptm = NULL; /* [0..p..10] number of correct matches with posterior value p */
+  int *cor_pti = NULL; /* [0..p..10] number of correct inserts with posterior value p */
+  int npostvals = 11;  /* number of posterior values 0-9, * */
+  int ppidx;           /* index of PP */
+  char ppchars[11] = "0123456789*";
+  int cm_cor_ptm, cm_cor_pti, cm_ptm, cm_pti, cm_incor_ptm, cm_incor_pti; /* cumulative counts of posteriors */
+  // int tot_cor_ptm, tot_cor_pti, tot_ptm, tot_pti;       /* total counts of posteriors */
+  // int tot_incor_ptm,tot_incor_pti;                      // SRE: commented out; don't seem to be used; need to silence compiler warning
+  char errbuf[eslERRBUFSIZE];
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if (esl_opt_GetBoolean(go, "-h") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage);
+      puts("\n where options are:");
+      esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+      esl_opt_DisplayHelp(stdout, go, 2, 2, 80);
+      exit(EXIT_SUCCESS);
+    }
+
+  if (esl_opt_ArgNumber(go) != 2) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  kfile = esl_opt_GetArg(go, 1);
+  tfile = esl_opt_GetArg(go, 2);
+  
+  fmt = eslMSAFILE_STOCKHOLM;
+
+  /***********************************************
+   * Open the two Stockholm files.
+   ***********************************************/
+
+  if      (esl_opt_GetBoolean(go, "--amino"))   abc = esl_alphabet_Create(eslAMINO);
+  else if (esl_opt_GetBoolean(go, "--dna"))     abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--rna"))     abc = esl_alphabet_Create(eslRNA);
+
+  if ( (kstatus = esl_msafile_Open(&abc, kfile, NULL, fmt, NULL, &kfp)) != eslOK) esl_msafile_OpenFailure(kfp, kstatus);
+  if ( (tstatus = esl_msafile_Open(&abc, tfile, NULL, fmt, NULL, &tfp)) != eslOK) esl_msafile_OpenFailure(tfp, tstatus);
+
+  do_post = esl_opt_GetBoolean(go, "-p");
+
+  /* read the mask file if --p-mask is enabled */
+  if(! esl_opt_IsDefault(go, "--p-mask")) { 
+    if((status = read_mask_file(esl_opt_GetString(go, "--p-mask"), errbuf, &mask, &masklen)) != eslOK) esl_fatal(errbuf);
+  }
+  /* open the c2dfile for output, if nec */
+  if (esl_opt_IsOn(go, "--c2dfile")) { 
+    if ((dfp = fopen(esl_opt_GetString(go, "--c2dfile"), "w")) == NULL) esl_fatal("Failed to open --c2dfile output file %s\n", esl_opt_GetString(go, "--c2dfile"));
+  }
+
+  /***********************************************
+   * Do alignment comparisons, one seq at a time;
+   * this means looping over all seqs in all alignments.
+   ***********************************************/
+  nali = 0;
+  while ( (kstatus = esl_msafile_Read(kfp, &ka)) != eslEOF)
+    {
+      if (  kstatus                               != eslOK) esl_msafile_ReadFailure(kfp, kstatus);
+      if ( (tstatus = esl_msafile_Read(tfp, &ta)) != eslOK) esl_msafile_ReadFailure(tfp, tstatus);
+
+      nali++;
+      if((nali > 1) && (esl_opt_IsOn(go, "--c2dfile"))) esl_fatal("--c2dfile is only meant for msafiles with single alignments"); 
+
+      /* Sanity check on alignment
+       */
+      if (ka->nseq != ta->nseq)
+	esl_fatal("trusted, test alignments don't have same seq #\n");
+      if (ka->rf == NULL)
+	esl_fatal("trusted alignment has no reference annotation\n");
+      if (ta->rf == NULL)
+	esl_fatal("test alignment has no reference annotation\n");
+
+      /* make sure the sequences are all identical */
+      ESL_ALLOC(seqlen, sizeof(int) * ka->nseq);
+      for(i = 0; i < ka->nseq; i++) { 
+	if(strcmp(ka->sqname[i], ta->sqname[i]) != 0) esl_fatal("sequence %d of trusted alignment %s has different name than seq %d of predicted alignment %s\n", (i+1), ka->sqname[i], (i+1), ta->sqname[i]); 
+	ESL_ALLOC(ks, sizeof(ESL_DSQ) * (ka->alen+2));
+	memcpy(ks, ka->ax[i], (ka->alen+2) * sizeof(ESL_DSQ));
+	esl_abc_XDealign(ka->abc, ks, ka->ax[i], &klen);
+
+	ESL_ALLOC(ts, sizeof(ESL_DSQ) * (ta->alen+2));
+	memcpy(ts, ta->ax[i], (ta->alen+2) * sizeof(ESL_DSQ));
+	esl_abc_XDealign(ta->abc, ts, ta->ax[i], &tlen);
+
+	if (tlen != klen)
+	  esl_fatal("dealigned sequence mismatch, seq %d, when dealigned, is %d residues in the known alignment, but %d residues in the trusted alignment.", (i+1), klen, tlen);
+
+	if (memcmp(ks, ts, sizeof(ESL_DSQ) * klen) != 0) 
+	  esl_fatal("dealigned sequence mismatch, seq %d %s, when dealigned, are not identical.", (i+1), ka->sqname[i]);
+
+	seqlen[i] = tlen;
+	free(ks);
+	free(ts);
+      }
+
+      /* determine non-gap RF length */
+      rflen = 0;
+      for(apos = 1; apos <= ka->alen; apos++) { 
+	if((! esl_abc_CIsGap    (ka->abc, ka->rf[apos-1])) && 
+	   (! esl_abc_CIsMissing(ka->abc, ka->rf[apos-1]))) rflen++;
+      }
+      t_rflen = 0;
+      for(apos = 1; apos <= ta->alen; apos++) { 
+	if((! esl_abc_CIsGap       (ta->abc, ta->rf[apos-1])) && 
+	   (! esl_abc_CIsMissing   (ta->abc, ta->rf[apos-1]))) t_rflen++;
+      }
+      if(t_rflen != rflen) esl_fatal("Trusted alignment non-gap RF length (%d) != predicted alignment non-gap RF length (%d).\n", rflen, t_rflen);
+
+      /* if -p, make sure the test alignment has posterior probabilities, and allocate our counters for correct/incorrect per post value */
+      if(do_post) { 
+	if(! esl_opt_IsDefault(go, "--p-mask")) {
+	  if(masklen != rflen) { 
+	    esl_fatal("Length of mask in %s (%d) not equal to non-gap RF len of alignments (%d)\n", esl_opt_GetString(go, "--p-mask"), masklen, rflen);
+	  }
+	}
+	if(ta->pp == NULL) esl_fatal("-p requires \"#=GR PP\" annotation in the test alignment, but none exists");
+	ESL_ALLOC(ptm,     sizeof(int) * npostvals);
+	ESL_ALLOC(pti,     sizeof(int) * npostvals);
+	ESL_ALLOC(cor_ptm, sizeof(int) * npostvals);
+	ESL_ALLOC(cor_pti, sizeof(int) * npostvals);
+	esl_vec_ISet(ptm, npostvals, 0);
+	esl_vec_ISet(pti, npostvals, 0);
+	esl_vec_ISet(cor_ptm, npostvals, 0);
+	esl_vec_ISet(cor_pti, npostvals, 0);
+      }
+
+      /* allocate and initialize our counters */
+      ESL_ALLOC(kp, sizeof(int *) * ka->nseq);
+      ESL_ALLOC(tp, sizeof(int *) * ta->nseq);
+      for(i = 0; i < ka->nseq; i++) { 
+	ESL_ALLOC(kp[i], sizeof(int) * (seqlen[i]+1));
+	ESL_ALLOC(tp[i], sizeof(int) * (seqlen[i]+1));
+	esl_vec_ISet(kp[i], seqlen[i]+1, -987654321);
+	esl_vec_ISet(tp[i], seqlen[i]+1, -987654321);
+      }
+
+      ESL_ALLOC(km_pos, sizeof(int) * (rflen+1));
+      ESL_ALLOC(ki_pos, sizeof(int) * (rflen+1));
+      ESL_ALLOC(tm_pos, sizeof(int) * (rflen+1));
+      ESL_ALLOC(ti_pos, sizeof(int) * (rflen+1));
+      ESL_ALLOC(cor_tm_pos, sizeof(int) * (rflen+1));
+      ESL_ALLOC(cor_ti_pos, sizeof(int) * (rflen+1));
+      esl_vec_ISet(km_pos, rflen+1, 0);
+      esl_vec_ISet(ki_pos, rflen+1, 0);
+      esl_vec_ISet(tm_pos, rflen+1, 0);
+      esl_vec_ISet(ti_pos, rflen+1, 0);
+      esl_vec_ISet(cor_tm_pos, rflen+1, 0);
+      esl_vec_ISet(cor_ti_pos, rflen+1, 0);
+
+      ESL_ALLOC(km_seq, sizeof(int) * ka->nseq);
+      ESL_ALLOC(ki_seq, sizeof(int) * ka->nseq);
+      ESL_ALLOC(tm_seq, sizeof(int) * ka->nseq);
+      ESL_ALLOC(ti_seq, sizeof(int) * ka->nseq);
+      ESL_ALLOC(cor_tm_seq, sizeof(int) * ka->nseq);
+      ESL_ALLOC(cor_ti_seq, sizeof(int) * ka->nseq);
+      esl_vec_ISet(km_seq, ka->nseq, 0);
+      esl_vec_ISet(ki_seq, ka->nseq, 0);
+      esl_vec_ISet(tm_seq, ka->nseq, 0);
+      esl_vec_ISet(ti_seq, ka->nseq, 0);
+      esl_vec_ISet(cor_tm_seq, ka->nseq, 0);
+      esl_vec_ISet(cor_ti_seq, ka->nseq, 0);
+
+      /* determine non-gap RF location of each residue in known alignment */
+      for(i = 0; i < ka->nseq; i++) { 
+	uapos = rfpos = 0;
+	for(apos = 1; apos <= ka->alen; apos++) { 
+	  is_rfpos = FALSE;
+	  if((! esl_abc_CIsGap       (ka->abc, ka->rf[apos-1])) &&
+	     (! esl_abc_CIsMissing   (ka->abc, ka->rf[apos-1]))) { 
+	    rfpos++; is_rfpos = TRUE;
+	  }
+	  if(esl_abc_XIsResidue(ka->abc, ka->ax[i][apos])) { 
+	    uapos++;
+	    kp[i][uapos] = (is_rfpos) ? rfpos : (-1 * rfpos);
+	    if(is_rfpos) { km_pos[rfpos]++; km_seq[i]++; }
+	    else         { ki_pos[rfpos]++; ki_seq[i]++; }
+	  }
+	}
+      }
+
+      /* determine non-gap RF location of each residue in predicted alignment */
+      for(i = 0; i < ta->nseq; i++) { 
+	uapos = rfpos = 0;
+	for(apos = 1; apos <= ta->alen; apos++) { 
+	  is_rfpos = FALSE;
+	  if((! esl_abc_CIsGap       (abc, ta->rf[apos-1])) && 
+	     (! esl_abc_CIsMissing   (abc, ta->rf[apos-1]))) { 
+	    rfpos++; is_rfpos = TRUE;
+	    if(do_post) { 
+	      do_post_for_this_rfpos = (mask != NULL && mask[rfpos-1] == '0') ? FALSE : TRUE;
+	    }
+	  }
+	  if(esl_abc_XIsResidue(ta->abc, ta->ax[i][apos])) { 
+	    uapos++;
+	    tp[i][uapos] = (is_rfpos) ? rfpos : (-1 * rfpos);
+	    if(do_post) { 
+	      if(esl_abc_CIsGap(abc, ta->pp[i][(apos-1)])) esl_fatal("gap PP value for nongap residue: ali: %d seq: %d apos: %d\n", nali, i, apos);
+	      ppidx = get_pp_idx(abc, ta->pp[i][(apos-1)]);
+	      if(ppidx == -1) esl_fatal("unrecognized PP value (%c) for nongap residue: ali: %d seq: %d apos: %d\n", ta->pp[i][(apos-1)], nali, i, apos);
+	    }
+	    if(is_rfpos) { 
+	      tm_pos[rfpos]++; tm_seq[i]++; 
+	      if(do_post_for_this_rfpos) ptm[ppidx]++;
+	    }
+	    else { 
+	      ti_pos[rfpos]++; ti_seq[i]++; 
+	      if(do_post) pti[ppidx]++;
+	    }
+	    if(kp[i][uapos] == tp[i][uapos]) { /* correctly predicted this residue */
+	      if(is_rfpos) { 
+		cor_tm_seq[i]++; cor_tm_pos[rfpos]++; 
+		if(do_post_for_this_rfpos) cor_ptm[ppidx]++;
+	      } 
+	      else {
+		cor_ti_seq[i]++; cor_ti_pos[rfpos]++; 
+		if(do_post) cor_pti[ppidx]++;
+	      } 
+	    }
+	  }
+	}
+      }
+      if((! (esl_opt_GetBoolean(go, "-c"))) && (! esl_opt_GetBoolean(go, "-p"))) { 
+	/* print per sequence statistics */
+	/* determine the longest name in msa */
+	for(ni = 0; ni < ka->nseq; ni++) namewidth = ESL_MAX(namewidth, strlen(ka->sqname[ni]));
+	ESL_ALLOC(namedashes, sizeof(char) * namewidth+1);
+	namedashes[namewidth] = '\0';
+	for(ni = 0; ni < namewidth; ni++) namedashes[ni] = '-';
+	
+	printf("# %-*s  %6s  %28s  %28s  %28s\n", namewidth, "seq name", "len",    "match columns", "insert columns", "all columns");
+	printf("# %-*s  %6s  %28s  %28s  %28s\n", namewidth, namedashes, "------", "----------------------------", "----------------------------", "----------------------------");
+	for(i = 0; i < ta->nseq; i++) { 
+	  printf("  %-*s  %6d  %8d / %8d  (%.3f)  %8d / %8d  (%.3f)  %8d / %8d  (%.3f)\n", namewidth, ka->sqname[i], seqlen[i],
+		 cor_tm_seq[i], km_seq[i], (km_seq[i] == 0) ? 0. : ((float) cor_tm_seq[i] / (float) km_seq[i]), 
+		 cor_ti_seq[i], ki_seq[i], (ki_seq[i] == 0) ? 0. : ((float) cor_ti_seq[i] / (float) ki_seq[i]), 
+		 (cor_tm_seq[i] + cor_ti_seq[i]), (km_seq[i] + ki_seq[i]), ((float) (cor_tm_seq[i] + cor_ti_seq[i]) / ((float) km_seq[i] + ki_seq[i]))); 
+	}
+	cor_tm = esl_vec_ISum(cor_tm_seq, ka->nseq);
+	cor_ti = esl_vec_ISum(cor_ti_seq, ka->nseq);
+	km = esl_vec_ISum(km_seq, ka->nseq);
+	ki = esl_vec_ISum(ki_seq, ka->nseq);
+	
+	printf("# %-*s  %6s  %28s  %28s  %28s\n", namewidth, namedashes, "-----", "----------------------------", "----------------------------", "----------------------------");
+	printf("# %-*s  %6s  %8d / %8d  (%.3f)  %8d / %8d  (%.3f)  %8d / %8d  (%.3f)\n",
+	       namewidth, "*all*", "-", 
+	       cor_tm, km, ((float) cor_tm / (float) km), 
+	       cor_ti, ki, ((float) cor_ti / (float) ki), 
+	       (cor_tm+cor_ti), (km+ki), (((float) (cor_tm + cor_ti))/ ((float) (km + ki)))); 
+	free(namedashes);
+	for(i = 0; i < ka->nseq; i++) { 
+	  free(kp[i]); 
+	  free(tp[i]); 
+	}
+      }
+      else if(esl_opt_GetBoolean(go, "-c")) { /* print per column statistics */
+	printf("# %5s  %20s  %20s  %20s\n", "rfpos", "match", "insert", "both");
+	printf("# %5s  %20s  %20s  %20s\n", "-----", "--------------------", "--------------------", "--------------------");
+	for(rfpos = 0; rfpos <= rflen; rfpos++) { 
+	  printf("  %5d  %4d / %4d  (%.3f)  %4d / %4d  (%.3f)  %4d / %4d  (%.3f)\n", rfpos, 
+		 
+		 cor_tm_pos[rfpos], km_pos[rfpos], (km_pos[rfpos] == 0) ? 0. : ((float) cor_tm_pos[rfpos] / (float) km_pos[rfpos]), 
+		 cor_ti_pos[rfpos], ki_pos[rfpos], (ki_pos[rfpos] == 0) ? 0. : ((float) cor_ti_pos[rfpos] / (float) ki_pos[rfpos]), 
+		 (cor_tm_pos[rfpos] + cor_ti_pos[rfpos]), (km_pos[rfpos] + ki_pos[rfpos]), ((float) (cor_tm_pos[rfpos] + cor_ti_pos[rfpos]) / ((float) km_pos[rfpos] + ki_pos[rfpos]))); 
+	}
+      }
+      else if(do_post) { /* do posterior output */
+	if(mask == NULL) { 
+	  printf("# %2s  %29s  %29s\n", "",   "      match columns          ", "      insert columns         ");
+	  printf("# %2s  %29s  %29s\n", "",   "-----------------------------", "-----------------------------") ;
+	  printf("# %2s  %8s   %8s %9s  %8s   %8s %9s\n", "PP", "ncorrect", "ntotal",   "fractcor",  "ncorrect", "ntotal",   "fractcor");
+	  printf("# %2s  %8s   %8s %9s  %8s   %8s %9s\n", "--", "--------", "--------", "---------", "--------", "--------", "---------");
+	}
+	else { 
+	  printf("# %2s  %29s  %29s\n", "",   " match columns within mask   ", "      insert columns         ");
+	  printf("# %2s  %29s  %29s\n", "",   "-----------------------------", "-----------------------------") ;
+	  printf("# %2s  %8s   %8s %9s  %8s   %8s %9s\n", "PP", "ncorrect", "ntotal",   "fractcor",  "ncorrect", "ntotal",   "fractcor");
+	  printf("# %2s  %8s   %8s %9s  %8s   %8s %9s\n", "--", "--------", "--------", "---------", "--------", "--------", "---------");
+	}
+	cm_ptm = cm_pti = cm_cor_ptm = cm_cor_pti = cm_incor_ptm = cm_incor_pti = 0;
+	//tot_ptm = esl_vec_ISum(ptm, npostvals);
+	//tot_pti = esl_vec_ISum(pti, npostvals);
+	//tot_cor_ptm = esl_vec_ISum(cor_ptm, npostvals);
+	//tot_cor_pti = esl_vec_ISum(cor_pti, npostvals);
+	//tot_incor_ptm = tot_ptm - tot_cor_ptm;
+	//tot_incor_pti = tot_pti - tot_cor_pti;
+	for(p = (npostvals-1); p >= 0; p--) { 
+	  cm_cor_ptm += cor_ptm[p];
+	  cm_cor_pti += cor_pti[p];
+	  cm_ptm     += ptm[p];
+	  cm_pti     += pti[p];
+	  cm_incor_ptm += ptm[p] - cor_ptm[p];
+	  cm_incor_pti += pti[p] - cor_pti[p];
+	  printf("  %2c  %8d / %8d (%.5f)  %8d / %8d (%.5f)\n", 
+		 ppchars[p], cor_ptm[p], ptm[p], 
+		 (ptm[p] == 0) ? 0. : (float) cor_ptm[p] / (float) ptm[p], 
+		 cor_pti[p], pti[p], 
+		 (pti[p] == 0) ? 0. : (float) cor_pti[p] / (float) pti[p]);
+	}
+      }
+
+      /* handle --c2dfile */
+      if (dfp != NULL) { 
+	/* match stats, 4 fields, CMYK color values */
+	for(rfpos = 1; rfpos <= rflen; rfpos++) { 
+	  if(km_pos[rfpos] == 0) { /* special case, no known alignment residues, a blank position */
+	    fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 0., 0., 0., 0.);
+	  }
+	  else { 
+	    fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 
+		    0., /* cyan */
+		    1. - ((float) cor_tm_pos[rfpos] / (float) km_pos[rfpos]), /* magenta, fraction incorrect */
+		    1. - ((float) km_pos[rfpos] / ta->nseq), /* yellow, 1 - fraction of seqs with residue in column */
+		    0.);
+	  }		 
+	}	
+	fprintf(dfp, "//\n");
+	/* insert stats, 4 fields, CMYK color values */
+	rfpos = 0; /* special case, combine insert posn 0 and 1 together */
+	if(ki_pos[rfpos] == 0) { /* special case, no known alignment residues, a blank position */
+	  fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 0., 0., 0., 0.);
+	}
+	else { 
+	  fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 
+		  0., /* cyan */
+		  1. - ((float) (cor_ti_pos[0] + cor_ti_pos[1]) / ((float) (ki_pos[0] + ki_pos[1]))), /* magenta, fraction correct */
+		  0.,
+		  0.);
+	}
+	/* insert stats posn 2..rflen */
+	for(rfpos = 2; rfpos <= rflen; rfpos++) { 
+	  if(ki_pos[rfpos] == 0) { /* special case, no known alignment residues, a blank position */
+	    fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 0., 0., 0., 0.);
+	  }
+	  else { 
+	    fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 
+		    0., /* cyan */
+		    1. - ((float) cor_ti_pos[rfpos] / (float) ki_pos[rfpos]), /* magenta, fraction correct */
+		    0.,
+		    0.);
+	  }
+	} 
+	fprintf(dfp, "//\n");
+      }
+      
+      if(ptm != NULL) free(ptm);
+      if(pti != NULL) free(pti);
+      if(cor_ptm != NULL) free(cor_ptm);
+      if(cor_ptm != NULL) free(cor_pti);
+      free(kp);
+      free(tp);
+      free(km_seq);
+      free(ki_seq);
+      free(tm_seq);
+      free(ti_seq);
+      free(cor_tm_seq);
+      free(cor_ti_seq);
+      free(km_pos);
+      free(ki_pos);
+      free(tm_pos);
+      free(ti_pos);
+      free(cor_tm_pos);
+      free(cor_ti_pos);
+      free(seqlen);
+      esl_msa_Destroy(ka);
+      esl_msa_Destroy(ta);
+    }
+
+  if(mask != NULL) free(mask);
+  if(dfp != NULL) { 
+    fclose(dfp);
+    printf("# Draw file of per-column stats saved to file: %s\n", esl_opt_GetString(go, "--c2dfile"));
+  }
+	   
+  if(abc) esl_alphabet_Destroy(abc);
+  esl_getopts_Destroy(go);
+  esl_msafile_Close(tfp);
+  esl_msafile_Close(kfp);
+  return 0;
+
+ ERROR:
+  return status;
+}
+
+/* get_pp_idx
+ *                   
+ * Given a #=GR PP or #=GC PP_cons character, return the appropriate index
+ * in a pp_ct[] vector. 
+ * '0' return 0;
+ * '1' return 1;
+ * '2' return 2;
+ * '3' return 3;
+ * '4' return 4;
+ * '5' return 5;
+ * '6' return 6;
+ * '7' return 7;
+ * '8' return 8;
+ * '9' return 9;
+ * '*' return 10;
+ * gap return 11;
+ * 
+ * Anything else (including missing or nonresidue) return -1;
+ */
+static int get_pp_idx(ESL_ALPHABET *abc, char ppchar)
+{
+  if(ppchar == '*')               return 10;
+  if(ppchar == '9')               return 9;
+  if(ppchar == '8')               return 8;
+  if(ppchar == '7')               return 7;
+  if(ppchar == '6')               return 6;
+  if(ppchar == '5')               return 5;
+  if(ppchar == '4')               return 4;
+  if(ppchar == '3')               return 3;
+  if(ppchar == '2')               return 2;
+  if(ppchar == '1')               return 1;
+  if(ppchar == '0')               return 0;
+  return -1;
+}
+
+
+/* read_mask_file
+ *
+ * Given an open file pointer, read the first token of the
+ * file and return it as *ret_mask. It must contain only
+ * '0' or '1' characters.
+ *
+ * Returns:  eslOK on success.
+ */
+int
+read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_mask_len)
+{
+  ESL_FILEPARSER *efp    = NULL;
+  char           *mask   = NULL;
+  char           *tok;
+  int             toklen;
+  int             n;
+  int             status;
+
+
+  if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) ESL_XFAIL(eslFAIL, errbuf, "failed to open %s in read_mask_file\n", filename);
+  esl_fileparser_SetCommentChar(efp, '#');
+  
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_XFAIL(eslFAIL, errbuf, "failed to read a single token from %s\n", filename);
+
+  ESL_ALLOC(mask, sizeof(char) * (toklen+1));
+  for(n = 0; n < toklen; n++) { 
+    if((tok[n] == '0') || (tok[n] == '1')) { 
+      mask[n] = tok[n];
+    }
+    else { ESL_XFAIL(eslFAIL, errbuf, "read a non-0 and non-1 character (%c) in the mask file %s\n", tok[n], filename); }
+  }
+  mask[n] = '\0';
+
+  *ret_mask     = mask;
+  *ret_mask_len = n;
+  esl_fileparser_Close(efp);
+  return eslOK;
+  
+ ERROR:
+  if (efp)  esl_fileparser_Close(efp);
+  if (mask) free(mask);
+  return status;
+}
diff --git a/miniapps/esl-compalign.itest.pl b/miniapps/esl-compalign.itest.pl
new file mode 100755
index 0000000..daf1c93
--- /dev/null
+++ b/miniapps/esl-compalign.itest.pl
@@ -0,0 +1,110 @@
+#! /usr/bin/perl
+
+# Integrated test of the esl-compalign miniapp.
+#
+# Usage:     ./esl-compalign.itest.pl <esl-compalign binary> <tmpfile prefix>
+# Example:   ./esl-compalign.itest.pl ./esl-compalign        foo
+#
+# EPN, Tue Feb  2 13:19:44 2010
+
+$eslcompalign= shift;
+$tmppfx      = shift;
+
+if (! -x "$eslcompalign") { die "FAIL: didn't find esl-compalign binary $eslcompalign"; }
+
+open(ALIFILE, ">$tmppfx.1") || die "FAIL: couldn't open $tmppfx.1 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+simpex-17          --AGA-CUUCGG---GCUCG-UAACAG
+#=GR simpex-17 PP  ..885.*****9...9****.******
+simpex-39          aaAAUACGUCGGCUG-AAUCACCAGUA
+#=GR simpex-39 PP  ***************.67776899999
+simpex-82          --ACGUUUUG-GAACGGG-U-CCA-CC
+#=GR simpex-82 PP  ..****9998.88**888.5.898.9*
+#=GC SS_cons       ..::<<<____>->>-<<-<.___>>>
+#=GC RF            ..AAgaCUUCGGAucgggCg.AcAccc
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.2") || die "FAIL: couldn't open $tmppfx.2 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+simpex-17          ---AGACUUCGGG---CUCGUAACAG
+#=GR simpex-17 PP  ...69*****775...4466777888
+simpex-39          aaAAUACGUCGGCUGAAUCACCAGUA
+#=GR simpex-39 PP  **************************
+simpex-82          --ACGUUUUG-GAACGGGUC-C-ACC
+#=GR simpex-82 PP  ..99998886.777755544.2.358
+#=GC SS_cons       ..::::::::::::::::::::::::
+#=GC RF            ..AAgACUUCGGAucggGCaAcAuUc
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.3") || die "FAIL: couldn't open $tmppfx.3 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+simpex-17          ~~~AGACUUCGGG---CUCGUAACAG
+#=GR simpex-17 PP  ...69*****775...4466777888
+simpex-39          aaAAUACGUCGGCUGAAUCACCAGUA
+#=GR simpex-39 PP  **************************
+simpex-82          --ACGUUUUG-GAACGGGUC-C-ACC
+#=GR simpex-82 PP  ..99998886.777755544.2.358
+#=GC SS_cons       ..::::::::::::::::::::::::
+#=GC RF            ..AAgACUUCGGAucggGCaAcAuUc
+//
+EOF
+close ALIFILE;
+
+open(MASKFILE, ">$tmppfx.mask") || die "FAIL: couldn't open $tmppfx.mask for writing alifile";
+print MASKFILE << "EOF";
+110111011011101110011101
+EOF
+close MASKFILE;
+
+$output = `$eslcompalign -h`;
+if ($? != 0)                                          { die "FAIL: esl-compalign failed unexpectedly"; }
+if ($output !~ /Usage: esl-compalign/)                { die "FAIL: help output not right"; }
+
+$output = `$eslcompalign --rna $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                                                                                { die "FAIL: esl-compalign failed unexpectedly";}
+if ($output !~ /simpex-17      20        16 \/       20  \(0.80\d+\)         0 \/        0  \(0.000\)        16 \/       20  \(0.80\d+\)/)      { die "FAIL: alignments compared incorrectly"; }
+if ($output !~ /\# \*all\*           -        53 \/       64  \(0.82\d+\)         2 \/        3  \(0.66\d+\)        55 \/       67  \(0.82\d+\)/) { die "FAIL: alignments compared incorrectly"; }
+
+$output = `$eslcompalign -c $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                                    { die "FAIL: esl-compalign failed unexpectedly"; }
+if ($output !~ /18     1 \/    3  \(0.33\d+\)     0 \/    1  \(0.00\d+\)     1 \/    4  \(0.25\d+\)/) { die "FAIL: alignments compared incorrectly."; }
+
+$output = `$eslcompalign -p $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                                    { die "FAIL: esl-compalign failed unexpectedly"; }
+if ($output !~ /\*        23 \/       29 \(0.79\d+\)         2 \/        2 \(1.0\d+\)/)        { die "FAIL: alignments compared incorrectly."; }
+
+$output = `$eslcompalign --p-mask $tmppfx.mask -p $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                                                                    { die "FAIL: esl-compalign failed unexpectedly"; }
+if ($output !~ /\*        17 \/       21 \(0.80\d+\)         2 \/        2 \(1.00\d+\)/)        { die "FAIL: alignments compared incorrectly."; }
+
+system("$eslcompalign -c --c2dfile $tmppfx.dfile $tmppfx.1 $tmppfx.2 > /dev/null");
+if ($? != 0)                                      { die "FAIL: esl-compalign failed unexpectedly"; }
+$output = `cat $tmppfx.dfile`;
+if ($output !~ /^0.000 0.33\d+ 0.000 0.000/)        { die "FAIL: alignments compared incorrectly."; }
+
+#Test that esl-compalign can handle '~' characters annotating fragments, a la hmmbuild -O in hmmer3.
+$output = `$eslcompalign --rna $tmppfx.1 $tmppfx.3 2>&1`;
+if ($? != 0)                                                                                                                                { die "FAIL: esl-compalign failed unexpectedly";}
+if ($output !~ /simpex-17      20        16 \/       20  \(0.80\d+\)         0 \/        0  \(0.000\)        16 \/       20  \(0.80\d+\)/)      { die "FAIL: alignments compared incorrectly"; }
+if ($output !~ /\# \*all\*           -        53 \/       64  \(0.82\d+\)         2 \/        3  \(0.66\d+\)        55 \/       67  \(0.82\d+\)/) { die "FAIL: alignments compared incorrectly"; }
+
+print "ok\n"; 
+unlink "$tmppfx.1";
+unlink "$tmppfx.2";
+unlink "$tmppfx.3";
+unlink "$tmppfx.dfile";
+unlink "$tmppfx.mask";
+exit 0;
diff --git a/miniapps/esl-compalign.man b/miniapps/esl-compalign.man
new file mode 100644
index 0000000..a1a6dce
--- /dev/null
+++ b/miniapps/esl-compalign.man
@@ -0,0 +1,147 @@
+.TH "esl-compalign" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps"
+
+.SH NAME
+.TP 
+esl-compalign - compare two multiple sequence alignments
+
+
+
+.SH SYNOPSIS
+.B esl-compalign
+.I [options]
+.I trusted_file
+.I test_file
+
+
+
+.SH DESCRIPTION
+
+.I esl-compalign
+evaluates the accuracy of a predicted multiple sequence alignment with
+respect to a trusted alignment of the same sequences. 
+
+The 
+.I trusted_file 
+and
+.I test_file
+must contain the same number of alignments. Each predicted alignment in the 
+.I test_file 
+will be compared against a single trusted alignment from the
+.I trusted_file.
+The first alignments in each file correspond to each other and will be
+compared, the second alignment in each file correspond to each other
+and will be compared, and so on.  Each corresponding pair of
+alignments must contain the same sequences (i.e. if they were
+unaligned they would be identical) in the same order in both
+files. Further, both alignment files must be in Stockholm format and
+contain 'reference' annotation, which appears as "#=GC RF" per-column
+markup for each alignment. The number of nongap (non '.' characters)
+in the reference (RF) annotation must be identical between all
+corresponding alignments in the two files.
+
+.I esl-compalign
+reads an alignment from each file, and compares them based on
+their 'reference' annotation.  The number of correctly predicted
+residues for each sequence is computed as follows. A residue that is
+in the Nth nongap RF column in the trusted alignment must also appear
+in the Nth nongap RF column in the predicted alignment to be counted
+as 'correct', otherwise it is 'incorrect'. A residue that appears in a
+gap RF column in the trusted alignment between nongap RF columns N and
+N+1 must also appear in a nongap RF column in the predicted alignment
+between nongap RF columns N and N+1 to be counted as 'correct',
+otherwise it is incorrect.
+
+The default output of
+.B esl-compalign
+lists each sequence and the number of correctly and incorrectly
+predicted residues for that sequence. These counts are broken down
+into counts for residues in the predicted alignments that occur
+in 'match' columns and 'insert' columns. A 'match' column is one for
+which the RF annotation does not contain a gap. An 'insert' column is
+one for which the RF annotation does contain a gap.
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options.
+
+.TP
+.B -c
+Print per-column statistics instead of per-sequence statistics.
+
+.TP
+.B -p 
+Print statistics on accuracy versus posterior probability values. The 
+.I test_file
+must be annotated with posterior probabilities (#=GR PP) for this
+option to work.
+
+.SH EXPERT OPTIONS
+
+.TP
+.BI --p-mask " <f>"
+This option may only be used in combination with the 
+.B -p
+option. Read a "mask" from file 
+.I <f>.
+The mask file must consist of a single line, of only '0' and '1'
+characters. There must be exactly RFLEN characters where RFLEN is the
+number of nongap characters in the RF annotation of all alignments in
+both 
+.I trusted_file
+and
+.I test_file.
+Positions of the mask that are '1' characters indicate that the
+corresponding nongap RF position is included by the mask. The
+posterior probability accuracy statistics for match columns will only
+pertain to positions that are included by the mask, those that are
+excluded will be ignored from the accuracy calculation.
+
+.BI --c2dfile " <f>"
+Save a 'draw file' to file 
+.I <f>
+which can be read into the 
+.B esl-ssdraw
+miniapp. This draw file will define two postscript pages for 
+.B esl-ssdraw.
+The first page will depict the frequency of errors per match position and
+frequency of gaps per match position, indicated by magenta and yellow,
+respectively. The darker magenta, the more errors and the darker
+yellow, the more gaps. The second page will depict the frequency of
+errors in insert positions in shades of magenta, the darker the
+magenta the more errors in inserts after each position. See
+.B esl-ssdraw
+documentation for more information on these diagrams. 
+
+.TP
+.B --amino
+Assert that 
+.I trusted_file
+and 
+.I test_file
+contain protein sequences. 
+
+.TP 
+.B --dna
+Assert that 
+.I trusted_file
+and 
+.I test_file
+contain DNA sequences. 
+
+.TP 
+.B --rna
+Assert that the 
+.I trusted_file
+and 
+.I test_file
+contain RNA sequences. 
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-compstruct.c b/miniapps/esl-compstruct.c
new file mode 100644
index 0000000..4d96ea3
--- /dev/null
+++ b/miniapps/esl-compstruct.c
@@ -0,0 +1,337 @@
+/* esl-compstruct - calculate accuracy of RNA secondary structure predictions
+ */
+#include "esl_config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_sq.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_wuss.h"
+
+static char banner[] = "calculate accuracy of RNA secondary structure predictions";
+
+static char usage[]  = "\
+[-options] <trusted file> <test file>\n\
+  Both files must be in Stockholm format with secondary structure markup.\n\
+  Sequences must occur in the same order in the two files.\n\
+  The markup must be in WUSS notation.\n\
+\n";
+
+static ESL_OPTIONS options[] = {
+  /* name       type        default env   range togs  reqs  incomp      help                                                   docgroup */
+  { "-h",      eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage",                     0 },
+  { "-m",      eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "use Mathews'relaxed criterion for correctness; allow +/-1 slip", 0 },
+  { "-p",      eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "count pseudoknotted base pairs",                                 0 },
+  { "--quiet", eslARG_NONE,  FALSE, NULL, NULL, NULL, NULL, NULL, "suppress verbose header",                                        0 },
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go;		 /* application configuration       */
+  int           kstatus, tstatus;/* return code from Easel routine  */
+  int           fmt;		 /* expected format of kfile, tfile */
+  char         *kfile, *tfile;   /* known, test structure file      */
+  ESL_MSAFILE  *kfp, *tfp;       /* open kfile, tfile               */
+  ESL_MSA      *ka,  *ta; 	 /* known, trusted alignment        */
+  int64_t       klen, tlen;	 /* lengths of dealigned seqs       */
+  int          *kct, *tct;       /* known, test CT rep of structure */
+  int           i;		 /* counter over sequences          */
+  int           pos;		 /* counter over residues           */
+
+  int nseq;		/* total number of sequences in the files */
+  int nseq_rejected;	/* total number of sequences rejected     */
+
+  int kpairs;		/* count of base pairs in trusted structure    */
+  int tpairs;		/* count of base pairs in test structure       */
+  int kcorrect;		/* # bp in known structure correctly predicted */
+  int tcorrect;		/* # bp in test structure that are true        */
+
+  int tot_kpairs;	/* total bp in all known structures            */
+  int tot_tpairs;	/* total bp in all predicted structures        */
+  int tot_kcorrect;	/* total correct bp in all known structures    */
+  int tot_tcorrect;	/* total true pairs in all test structures     */
+  int tot_positions;	/* total # of bases                            */
+
+  int   status;
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if (esl_opt_GetBoolean(go, "-h") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage);
+      puts("\n where options are:");
+      esl_opt_DisplayHelp(stdout, go, 0, 2, 80);
+      exit(EXIT_SUCCESS);
+    }
+
+  if (esl_opt_ArgNumber(go) != 2) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  kfile = esl_opt_GetArg(go, 1);
+  tfile = esl_opt_GetArg(go, 2);
+  
+  if (! esl_opt_GetBoolean(go, "--quiet")) 
+    esl_banner(stdout, argv[0], banner);
+
+  fmt = eslMSAFILE_STOCKHOLM;
+
+  /***********************************************
+   * Open the two Stockholm files.
+   ***********************************************/
+
+  if ( (status = esl_msafile_Open(NULL, kfile, NULL, fmt, NULL, &kfp)) != eslOK) esl_msafile_OpenFailure(kfp, status);
+  if ( (status = esl_msafile_Open(NULL, tfile, NULL, fmt, NULL, &tfp)) != eslOK) esl_msafile_OpenFailure(tfp, status);
+  
+  /***********************************************
+   * Do structure comparisons, one seq at a time;
+   * this means looping over all seqs in all alignments.
+   ***********************************************/
+
+  tot_kpairs = tot_kcorrect = 0;
+  tot_tpairs = tot_tcorrect = 0;
+  nseq = nseq_rejected = 0;
+  tot_positions = 0;
+  
+  printf("%20s   %17s %17s\n", "", "[sensitivity]", "[PPV]");
+
+  while ( (kstatus = esl_msafile_Read(kfp, &ka)) != eslEOF)
+    {
+      if (  kstatus                               != eslOK) esl_msafile_ReadFailure(kfp, kstatus);
+      if ( (tstatus = esl_msafile_Read(tfp, &ta)) != eslOK) esl_msafile_ReadFailure(tfp, tstatus);
+
+      /* Sanity check on alignment
+       */
+      if (ka->nseq != ta->nseq)	esl_fatal("trusted, test alignments don't have same seq #\n");
+      if (ka->ss == NULL)	esl_fatal("trusted alignment has no secondary structure annotation\n");
+      if (ta->ss == NULL)	esl_fatal("test alignment has no secondary structure annotation\n");
+      
+      for (i = 0; i < ka->nseq; i++)
+	{
+	  nseq++;
+	  printf("%-20s ", ka->sqname[i]);
+
+	  /* Sanity checks on seqs to compare, plus conversion
+           * to dealigned ct arrays ready for comparison.
+	   */
+	  if (ta->ss[i] == NULL)
+	    {
+	      printf("[REJECTED: no predicted structure]\n");
+	      nseq_rejected++;	      
+	      continue;
+	    }
+	  if (ka->ss[i] == NULL)
+	    {
+	      printf("[REJECTED: no trusted structure]\n"); 
+	      nseq_rejected++;	      
+	      continue;
+	    }
+	  if (strcmp(ka->sqname[i], ta->sqname[i]) != 0) 
+	    {
+	      printf("[REJECTED: test seq name is %s]\n", ta->sqname[i]);
+	      nseq_rejected++;
+	      continue;
+	    }
+
+	  esl_strdealign(ka->ss[i],   ka->aseq[i], "-_.~", NULL);
+	  esl_strdealign(ka->aseq[i], ka->aseq[i], "-_.~", &klen);
+
+	  esl_strdealign(ta->ss[i],   ta->aseq[i], "-_.~", NULL);
+	  esl_strdealign(ta->aseq[i], ta->aseq[i], "-_.~", &tlen);
+
+	  if (klen != tlen) 
+	    {
+	      printf("[REJECTED: seq lengths not identical]\n");
+	      nseq_rejected++;
+	      continue;
+	    }
+	  
+	  /* not counting pseudoknots? suppress them in the ss strings*/
+	  if (! esl_opt_GetBoolean(go,  "-p")) 
+	    {
+	      esl_wuss_nopseudo(ka->ss[i], ka->ss[i]);
+	      esl_wuss_nopseudo(ta->ss[i], ta->ss[i]);
+	    }
+
+	  ESL_ALLOC(kct, sizeof(int) * (klen+1));
+	  ESL_ALLOC(tct, sizeof(int) * (tlen+1));
+	  if (esl_wuss2ct(ka->ss[i], klen, kct) != eslOK)
+	    {
+	      printf("[REJECTED: bad trusted structure]\n");
+	      nseq_rejected++;
+	      continue;
+	    }
+	  if (esl_wuss2ct(ta->ss[i], tlen, tct) != eslOK)
+	    {
+	      printf("[REJECTED: bad test structure]\n");
+	      nseq_rejected++;
+	      continue;
+	    }
+
+	/* OK, we're all set up with kct (trusted) and tct (predicted)
+         * CT arrays, and we're about to count up our correctly predicted
+	 * pairs. A brief digression/commentary first. We have to
+	 * define what you mean by a "correctly predicted" base
+	 * pair.
+	 * 
+	 * Our default criterion is simple and strict: the known base pair 
+	 * must be exactly present in the prediction; kct[pos] == tct[pos]
+	 * where kct[pos] > 0.
+	 * 
+	 * Dave Mathews [MathewsTurner99] uses a more relaxed
+	 * criterion that allows a little helix slippage in the prediction.
+	 * For a known pair (i,j), he considers the prediction to be correct 
+         * if the prediction contains a base pair (i,j), (i+1,j), (i-1,j),
+         * (i,j+1), or (i,j-1). 
+	 * 
+	 * A problem that arises here is that the mapping of known
+	 * to predicted base pairs is not one-to-one under Mathews'
+	 * rule: a single predicted pair can cause two known pairs
+	 * to be considered to be "correctly predicted".  You'd sort
+	 * of like to run some sort of maximum matching algorithm to
+	 * assign a one-to-one correspondence between known and
+	 * predicted pairs. It does not appear that Mathews does this,
+	 * though.
+	 * 
+	 * And for us, the problem becomes a little worse. Mathews only
+	 * tabulates "correct" base pairs (our "sensitivity"), and
+	 * does not run a calculation of how many predicted pairs
+	 * are true (our "specificity", or positive predictive
+	 * value). 
+	 * 
+	 * So: when we implement the Mathews rule, we do it the most
+	 * simple and obvious way. We apply his correctness rule in
+	 * both directions. A known pair i,j is considered to be
+	 * correctly predicted if the prediction contains any one of
+	 * the pairs (i,j), (i+1,j), (i-1,j), (i,j+1), or (i,j-1), for
+	 * the purposes of sensitivity. Conversely, a predicted pair
+	 * i,j is considered to be correct if the known structure
+	 * contains any one of the pairs (i,j), (i+1,j), (i-1,j),
+	 * (i,j+1), or (i,j-1), for the purposes of PPV.  That is, we
+	 * do not worry at all about establishing an optimal
+	 * one-to-one mapping between known and predicted pairs. I
+	 * think that this is likelyto reflect Mathews' own
+	 * implementation, but have not verified this.  
+	 */
+	tpairs = tcorrect = 0; /* predicted "test" structure */
+	kpairs = kcorrect = 0; /* trusted "known" structure  */
+	for (pos = 1; pos <= klen; pos++)
+	  {
+	    /* sensitivity; looking from the known (trusted) structure's
+	     * base pairs.
+	     */
+	    if (kct[pos] > pos) /* trusted bp between (pos, kct[pos]) */
+	      {
+		kpairs++;	/* don't doublecount */
+
+		if (esl_opt_GetBoolean(go,  "-m")) { /* mathews' version */
+		  if (tct[pos] == kct[pos] ||                      /* i,j    */
+		      (pos > 1     && tct[pos-1] == kct[pos])   || /* i-1, j */
+		      (pos < klen  && tct[pos+1] == kct[pos])   || /* i+1, j */
+		      (tct[pos]> 0 && tct[pos]   == kct[pos]-1) || /* i, j-1 */
+		      (tct[pos]> 0 && tct[pos]   == kct[pos]+1))   /* i, j+1 */
+		    kcorrect++;
+		} else {
+		  if (tct[pos] == kct[pos]) kcorrect++;
+		}
+	      }
+
+	    /* PPV/specificity; looking from the test (predicted) structure's 
+	     * base pairs.
+	     */
+	    if (tct[pos] > pos) /* predicted base pair (pos, tct[pos]) */
+	      {
+		tpairs++;
+
+		if (esl_opt_GetBoolean(go,  "-m")) { /* mathews' version */
+		  if (kct[pos] == tct[pos] ||                      /* i,j    */
+		      (pos > 1     && kct[pos-1] == tct[pos])   || /* i-1, j */
+		      (pos < tlen  && kct[pos+1] == tct[pos])   || /* i+1, j */
+		      (kct[pos]> 0 && kct[pos]   == tct[pos]-1) || /* i, j-1 */
+		      (kct[pos]> 0 && kct[pos]   == tct[pos]+1))   /* i, j+1 */
+		    tcorrect++;
+		} else {
+		  if (kct[pos] == tct[pos]) tcorrect++;
+		}
+	      }
+	  }
+
+	/* side note: under the default rule, tcorrect==kcorrect,
+	 * because there's a one-to-one mapping of known to predicted
+	 * pairs; but this is not necessarily the case for the relaxed
+	 * Mathews rule.  
+	 */
+	tot_tpairs    += tpairs;
+	tot_tcorrect  += tcorrect;
+	tot_kpairs    += kpairs;
+	tot_kcorrect  += kcorrect;
+	tot_positions += klen;
+	  
+				/* print out per sequence info */
+	printf(" ==  %5d %5d %5.2f%%   %5d %5d %5.2f%%\n", 
+	       kcorrect, kpairs, 100. * (float) kcorrect/ (float) kpairs,
+	       tcorrect, tpairs, 100. * (float) tcorrect/ (float) tpairs);
+
+	free(tct);
+	free(kct);
+	}
+      esl_msa_Destroy(ka);
+      esl_msa_Destroy(ta);
+    }
+
+  /* Print the final summary:
+   */
+  puts("\n");
+  if (nseq_rejected > 0) {
+    printf("%d total sequences; %d counted towards comparison; %d rejected\n", 
+	   nseq, nseq-nseq_rejected, nseq_rejected);
+    printf("(grep \"REJECTED\" in the output to identify the problems)\n\n");
+  }
+
+  printf("Overall prediction accuracy (%d sequences, %d positions)\n",
+	 nseq - nseq_rejected, tot_positions);
+  printf("   %d/%d trusted pairs predicted (%.2f%% sensitivity)\n", 
+	 tot_kcorrect, tot_kpairs, 
+	 100. * (float) tot_kcorrect/ (float) tot_kpairs);
+  printf("   %d/%d predicted pairs correct (%.2f%% PPV)\n",
+	 tot_tcorrect, tot_tpairs, 
+	 100. * (float) tot_tcorrect/ (float) tot_tpairs);
+  puts("");
+
+  esl_getopts_Destroy(go);
+  esl_msafile_Close(tfp);
+  esl_msafile_Close(kfp);
+  return 0;
+
+ ERROR:
+  return status;
+}
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/miniapps/esl-compstruct.man b/miniapps/esl-compstruct.man
new file mode 100644
index 0000000..9263e0a
--- /dev/null
+++ b/miniapps/esl-compstruct.man
@@ -0,0 +1,122 @@
+.TH "esl-compstruct" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps"
+
+.SH NAME
+.TP 
+esl-compstruct - calculate accuracy of RNA secondary structure predictions
+
+
+
+.SH SYNOPSIS
+.B esl-compstruct
+.I [options]
+.I trusted_file
+.I test_file
+
+
+
+
+.SH DESCRIPTION
+
+.I esl-compstruct 
+evaluates the accuracy of RNA secondary structure predictions
+on a per-base-pair basis.
+The 
+.I trusted_file 
+contains one or more sequences with trusted (known) RNA
+secondary structure annotation. The
+.I test_file
+contains the same sequences, in the same order, with
+predicted RNA secondary structure annotation.
+.I esl-compstruct 
+reads the structures and compares them,
+and calculates both the sensitivity (the number
+of true base pairs that are correctly predicted)
+and the positive predictive value (PPV;
+the number of predicted base pairs that are true).
+Results are reported for each individual sequence,
+and in summary for all sequences together.
+
+.PP
+Both files must contain secondary structure annotation in
+WUSS notation. Only SELEX and Stockholm formats support 
+structure markup at present.
+
+.PP
+The default definition of a correctly predicted base pair
+is that a true pair (i,j) must exactly match a predicted
+pair (i,j).
+
+.PP
+Mathews and colleagues (Mathews et al., JMB 288:911-940, 1999) use a
+more relaxed definition. Mathews defines "correct" as follows: a true
+pair (i,j) is correctly predicted if any of the following pairs are
+predicted: (i,j), (i+1,j), (i-1,j), (i,j+1), or (i,j-1). This rule
+allows for "slipped helices" off by one base.  The
+.B -m
+option activates this rule for both sensitivity and for
+specificity. For specificity, the rule is reversed: predicted pair
+(i,j) is considered to be true if the true structure contains one of
+the five pairs (i,j), (i+1,j), (i-1,j), (i,j+1), or (i,j-1).
+
+
+
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+.TP
+.B -m
+Use the Mathews relaxed accuracy rule (see above), instead
+of requiring exact prediction of base pairs.
+
+.TP
+.B -p 
+Count pseudoknotted base pairs towards the accuracy, in either trusted
+or predicted structures. By default, pseudoknots are ignored. 
+.IP
+Normally, only the 
+.I trusted_file 
+would have pseudoknot annotation, since most RNA secondary structure
+prediction programs do not predict pseudoknots. Using the
+.B -p
+option allows you to penalize the prediction program for not
+predicting known pseudoknots. In a case where both the
+.I trusted_file 
+and the
+.I test_file 
+have pseudoknot annotation,  the
+.B -p
+option lets you count pseudoknots in evaluating
+the prediction accuracy. Beware, however, the case where you
+use a pseudoknot-capable prediction program to generate the
+.I test_file,
+but the 
+.I trusted_file 
+does not have pseudoknot annotation; in this case,
+.B -p
+will penalize any predicted pseudoknots when it calculates
+specificity, even if they're right, because they don't appear in the
+trusted annotation. This is probably not what you'd want to do.
+
+
+
+.SH EXPERT OPTIONS
+
+.TP
+.B --quiet
+Don't print any verbose header information. (Used by regression test
+scripts, for example, to suppress version/date information.)
+
+
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-construct.c b/miniapps/esl-construct.c
new file mode 100644
index 0000000..4fb1921
--- /dev/null
+++ b/miniapps/esl-construct.c
@@ -0,0 +1,709 @@
+/* Construct consensus secondary structures from individually annotated 
+ * secondary structures
+ *
+ * EPN, Mon May 11 06:49:37 2009
+ * SVN $Id: esl-alimanip.c 270 2008-06-19 20:45:47Z nawrockie $
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <math.h>
+#include <limits.h>
+
+#include "easel.h"
+#include "esl_distance.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_msa.h"
+#include "esl_distance.h"
+#include "esl_dmatrix.h"
+#include "esl_vectorops.h"
+#include "esl_stack.h"
+#include "esl_tree.h"
+#include "esl_wuss.h"
+
+#define CONSOPTS  "-x,--ffreq,--fmin,-r,-c,--indi"  /* exclusive options for defining a new consensus structure */
+
+static char banner[] = "describe or create a consensus secondary structure";
+static char usage[]  = "[options] <msafile>\n\
+<msafile> must contain RNA or DNA sequences and be in Stockholm format.";
+
+static int  get_gaps_per_column(ESL_MSA *msa, int **ret_ngaps);
+
+static ESL_OPTIONS options[] = {
+  /* name          type        default  env   range      togs reqs  incomp                      help                                                       docgroup */
+  { "-h",          eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL, NULL,                       "help; show brief info on version and usage",                     1},
+  { "-a",          eslARG_NONE,  FALSE, NULL, NULL,      NULL, NULL, CONSOPTS,                  "print info on all conflicting bps in individual structures",     1},
+  { "-v",          eslARG_NONE,  FALSE, NULL, NULL,      NULL, NULL,NULL,                       "be verbose",                                                     1 },
+  /* options for defining new consensus structures */
+  { "-x",          eslARG_NONE,  NULL,  NULL, NULL,      NULL, "-o", CONSOPTS,                  "set SS_cons as max set of non-conflicting bps from indi SSs", 2 },
+  { "-r",          eslARG_NONE,  NULL,  NULL, NULL,      NULL, "-o", CONSOPTS,                  "remove SS_cons basepairs that conflicts with > 0 indi SS",     2 },
+  { "-c",          eslARG_NONE,  NULL,  NULL, NULL,      NULL, "-o", CONSOPTS,                  "set SS_cons as indi SS with max bps consistent with SS_cons", 2 },
+  { "--rfc",       eslARG_NONE,  NULL,  NULL, NULL,      NULL, "-c", NULL,                      "with -c, set RF annotation as seq SS_cons structure comes from", 2},
+  { "--indi",      eslARG_STRING, NULL, NULL, NULL,      NULL, "-o", CONSOPTS,                  "define SS_cons as individual SS for sequence <x>",               2 },
+  { "--rfindi",    eslARG_NONE,   NULL, NULL, NULL,      NULL, "--indi",NULL,                   "with --indi <x>, define RF annotation as <x>",                   2 },
+  { "--ffreq",      eslARG_REAL,  NULL,  NULL,"0.<=x<=1", NULL,"-o", CONSOPTS,                  "aln cols i:j become SS_cons bps if paired in > <x> indi SS", 2},
+  { "--fmin",      eslARG_NONE,  NULL,  NULL, NULL,      NULL, "-o", CONSOPTS,                  "same as --ffreq but find min <x> that gives consistent SS_cons", 2},
+  { "-o",          eslARG_OUTFILE,NULL,  NULL, NULL,     NULL, NULL, "-a",                      "output a new alignment to file <f>",                             2 },
+  { "--pfam",      eslARG_NONE,  FALSE, NULL, NULL,      NULL, "-o", NULL,                      "output alignment in Pfam (non-interleaved, 1 line/seq) format",  2 },
+  /* options for listing sequences based on structural properties */
+  { "-l",          eslARG_OUTFILE,NULL, NULL, NULL,      NULL, NULL, NULL,                      "list seqs w/> 0 indi bp that conflicts w/a SS_cons bp to file <f>", 3},
+  { "--lmax",      eslARG_INT,   "0",    NULL, "n>=0",    NULL, NULL, NULL,                     "with -l, change maximum allowed conflicts of 0 to <x>", 3},
+  /* options for specifying alphabet */
+  { "--dna",       eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL,"--rna",                     "<msafile> contain DNA alignments",                          4 },
+  { "--rna",       eslARG_NONE,  FALSE, NULL, NULL,      NULL,NULL,"--dna",                     "<msafile> contain RNA alignments",                          4 },
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go      = NULL;	/* application configuration       */
+  ESL_ALPHABET *abc     = NULL;	/* biological alphabet             */
+  char         *alifile = NULL;	/* alignment file name             */
+  int           fmt;		/* format code for alifiles        */
+  ESL_MSAFILE  *afp     = NULL;	/* open alignment file             */
+  ESL_MSA      *msa     = NULL;	/* multiple sequence alignment     */
+  int           status;		/* easel return code               */
+
+  int           do_info = TRUE;                /* TRUE if -i */
+  int           do_max = FALSE;                /* TRUE if -x */
+  int           do_ffreq = FALSE;              /* TRUE if --ffreq */
+  int           do_fmin  = FALSE;              /* TRUE if --fmin */
+  float         fthresh = 0.;                  /* <x> from -f <x> */
+  int           do_remove_bps = FALSE;         /* TRUE if -r */
+  int           do_consistent = FALSE;         /* TRUE if -c */
+  int           do_indi2cons = FALSE;          /* TRUE if --indi <x> */
+  int           have_cons;                     /* TRUE if first alignment has consensus sequence */
+  int           do_newcons = FALSE;            /* TRUE if we're creating a new consensus structure
+						* and outputing a new alignment (if -x -f -c or --indi)
+						*/
+  int           do_a = FALSE;                  /* TRUE if -a */
+  char         *indi;                          /* for <x> from --indi <x> */
+  int           nindi_read;                    /* number of individual sequence SS lines we've read for current alignment */
+
+  int           a;		               /* counter over seqs               */
+  int           i, i2;		               /* counter over residues */
+  int           j, j2;		               /* counter over residues */
+  int           nali;                          /* counter over alignments */
+  int         **bp = NULL;                     /* bp[i][j] is number of individual bps exist between aln cols i and j */
+  int          *cur_ct = NULL;                 /* ct array of basepairs for current sequence */
+  int          *cons_ct = NULL;                /* ct array of basepairs for SS_cons being created */
+  int          *xcons_ct = NULL;               /* ct array of basepairs for existing SS_cons */
+  int          *ngaps = NULL;                  /* number of gaps in each alignment position */
+  FILE         *ofp;		               /* output file (default is stdout) */
+  int           be_verbose = FALSE;            /* TRUE to print extra info */
+  int           seqthresh;                     /* sequence number threshold for defining a bp as consensus (int) ((fthresh * nseq) + 0.5)*/
+  char         *sscons = NULL;                 /* the new SS_cons line */
+  FILE         *lfp = NULL;                    /* file to list sequences with conflicting bps to */
+  int           nlist = 0;                     /* number of sequences listed to list file */
+  int          *nconflictsA;                   /* number of conflicting bps in seq a's individual structure annotation */
+  int           nconflicts_total = 0;          /* total number of conflicts */
+  int           nconflicts_list = 0;           /* total number of conflicts in sequences listed to file <x> from -l <x> */
+  int           noverlaps_total = 0;           /* total number of overlaps */
+  int           nconsistent_total = 0;         /* total number of consistent bps */
+  int           nbps_total = 0;                /* total number of bps */
+  int          *nconsistentA;                  /* number of consistent bps in seq a's individual structure annotation */
+  int          *noverlapsA;                    /* number of bps in seq a's indi structure that overlap with consensus structure */
+  int          *nbpsA;                         /* number of bps in seq a's indi structure that overlap with consensus structure */
+  int           ncons_bps = 0;                 /* number of bps in consensus structure */
+  int           max_noverlaps_aidx;
+  int           max_nconsistent_aidx;
+  int           max_nbps_aidx;
+  int          *removebp;                      /* removebp[i] is TRUE remove consensus bp [i]:xcons_ct[i] */
+  int          *has_conflict;    
+  int          *nmates_l2r;                    /* half matrix, nmate_l2r[i] = <x>, i < nmate_l2r[i], there are <x> different right mates j for i */
+  int          *nmates_r2l;                    /* half matrix, nmate_r2l[j] = <x>, j < nmate_r2l[j], there are <x> different left  mates i for j */
+
+  int           lmax;                          /* with -l, maximum number of conflicts to allow */
+  int           namewidth = 18;                 /* length of 'SS_cons(consensus)' */
+  char         *namedashes = NULL;             /* to store underline for seq name */
+
+  /* --fmin related variables */
+  int nbps = 0;
+  int prev_nbps = -1;
+  float fmin;
+  int inconsistent_flag;
+  int pknot_flag;
+  int k,l;
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if (esl_opt_GetBoolean(go, "-h") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage);
+      puts("\nwhere basic options are:");
+      esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+      puts("\noptions for defining a new consensus structure (all of these require -o):");
+      esl_opt_DisplayHelp(stdout, go, 2, 2, 80);
+      puts("\noptions for listing sequences based on structure:");
+      esl_opt_DisplayHelp(stdout, go, 3, 2, 80);
+      exit(0);
+    }
+
+  if (esl_opt_ArgNumber(go) != 1) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  alifile  = esl_opt_GetArg(go, 1);
+
+  fmt = eslMSAFILE_STOCKHOLM;
+
+  /***********************************************
+   * Open the MSA file; determine alphabet; set for digital input
+   ***********************************************/
+
+  if      (esl_opt_GetBoolean(go, "--dna"))  abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--rna"))  abc = esl_alphabet_Create(eslRNA);
+
+  if ( (status = esl_msafile_Open(&abc, alifile, NULL, fmt, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+
+  /* open output file */
+  if (esl_opt_GetString(go, "-o") != NULL) {
+    if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) 
+	esl_fatal("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o"));
+  } else ofp = NULL;
+  if (esl_opt_GetString(go, "-l") != NULL) { 
+    if ((lfp = fopen(esl_opt_GetString(go, "-l"), "w")) == NULL) 
+	esl_fatal("Failed to open -l output file %s\n", esl_opt_GetString(go, "-l"));
+  }
+
+  /* determine if we're creating a structure */
+  do_max = esl_opt_GetBoolean(go, "-x");
+    
+  if(!(esl_opt_IsDefault(go, "--ffreq"))) { 
+    do_ffreq = TRUE; 
+    fthresh = esl_opt_GetReal(go, "--ffreq"); 
+  }
+  if(!(esl_opt_IsDefault(go, "--fmin"))) { 
+    do_fmin = TRUE; 
+  }
+  do_remove_bps = esl_opt_GetBoolean(go, "-r"); 
+  do_consistent = esl_opt_GetBoolean(go, "-c");
+  if(!(esl_opt_IsDefault(go, "--indi"))) { 
+    do_indi2cons = TRUE; 
+  }
+  if(do_max || do_ffreq || do_fmin || do_remove_bps || do_consistent || do_indi2cons) { 
+    do_newcons = TRUE;
+  }
+  do_a = esl_opt_GetBoolean(go, "-a");
+  if(do_a || do_max || do_ffreq || do_fmin || do_remove_bps || do_consistent || do_indi2cons) { 
+    do_info = FALSE;
+  }
+
+  /***********************************************
+   * Read MSAs one at a time.
+   ***********************************************/
+  nali = 0;
+  have_cons = FALSE;
+  lmax = esl_opt_GetInteger(go, "--lmax");
+  if(esl_opt_GetBoolean(go, "-v")) be_verbose = TRUE; 
+
+  while ((status = esl_msafile_Read(afp, &msa)) != eslEOF)
+    {
+      if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+      nali++;
+
+      /* determine max length name */
+      namewidth = 18; /* length of 'SS_cons(consensus)' */
+      for(i = 0; i < msa->nseq; i++) namewidth = ESL_MAX(namewidth, strlen(msa->sqname[i]));
+      if(namedashes != NULL) { free(namedashes); }
+      ESL_ALLOC(namedashes, sizeof(char) * namewidth+1);
+      namedashes[namewidth] = '\0';
+      for(i = 0; i < namewidth; i++) namedashes[i] = '-';
+
+      ESL_ALLOC(sscons, sizeof(char) * (msa->alen+1));
+      ESL_ALLOC(cur_ct, sizeof(int) * (msa->alen+1));
+      ESL_ALLOC(cons_ct, sizeof(int) * (msa->alen+1));
+      ESL_ALLOC(xcons_ct, sizeof(int) * (msa->alen+1));
+      ESL_ALLOC(bp, sizeof(int *) * (msa->alen+1));
+      ESL_ALLOC(removebp, sizeof(int) * (msa->alen+1));
+      ESL_ALLOC(has_conflict, sizeof(int) * (msa->alen+1));
+      ESL_ALLOC(nmates_l2r, sizeof(int) * (msa->alen+1));
+      ESL_ALLOC(nmates_r2l, sizeof(int) * (msa->alen+1));
+      esl_vec_ISet(cur_ct, (msa->alen+1), 0);
+      esl_vec_ISet(cons_ct, (msa->alen+1), 0);
+      esl_vec_ISet(xcons_ct, (msa->alen+1), 0);
+      esl_vec_ISet(removebp, (msa->alen+1), FALSE);
+      esl_vec_ISet(has_conflict, (msa->alen+1), FALSE);
+      esl_vec_ISet(nmates_l2r, (msa->alen+1), 0);
+      esl_vec_ISet(nmates_r2l, (msa->alen+1), 0);
+
+      ESL_ALLOC(nconflictsA, sizeof(int) * msa->nseq);
+      ESL_ALLOC(noverlapsA, sizeof(int) * msa->nseq);
+      ESL_ALLOC(nconsistentA, sizeof(int) * msa->nseq);
+      ESL_ALLOC(nbpsA, sizeof(int) * msa->nseq);
+      esl_vec_ISet(nconflictsA, msa->nseq, 0);
+      esl_vec_ISet(noverlapsA, msa->nseq, 0);
+      esl_vec_ISet(nconsistentA, msa->nseq, 0);
+      esl_vec_ISet(nbpsA, msa->nseq, 0);
+
+      max_noverlaps_aidx = max_nconsistent_aidx = max_nbps_aidx = 0;
+      nconsistent_total = nbps_total = noverlaps_total = nconflicts_total = nconflicts_list = 0;
+      for(i = 1; i <= msa->alen; i++) { 
+	ESL_ALLOC(bp[i], sizeof(int) * (msa->alen+1));
+	esl_vec_ISet(bp[i], (msa->alen+1), 0);
+      }
+
+      /* make sure we have ss_cons and indi ss if we need it */
+      if(msa->ss_cons == NULL && do_remove_bps) esl_fatal("-r requires all alignments have SS_cons annotation, alignment %d does not.", nali);
+      if(msa->ss == NULL && do_max)             esl_fatal("-x requires all alignments have individual SS annotation, alignment %d does not.", nali);
+      if(msa->ss == NULL && do_consistent)      esl_fatal("-c requires all alignments have individual SS annotation, alignment %d does not.", nali);
+      if(msa->ss == NULL && do_indi2cons)       esl_fatal("--indi requires all alignments have individual SS annotation, alignment %d does not.", nali);
+      if(msa->ss == NULL && do_ffreq)           esl_fatal("--ffreq requires all alignments have individual SS annotation, alignment %d does not.", nali);
+      if(msa->ss == NULL && do_fmin)            esl_fatal("--fmin requires all alignments have individual SS annotation, alignment %d does not.", nali);
+
+      if(msa->ss_cons != NULL) { 
+	if((status = esl_wuss2ct(msa->ss_cons, msa->alen, xcons_ct)) != eslOK) { 
+	  esl_fatal("Existing SS_cons for alignment %d is invalid.", nali);
+	}
+	ncons_bps = 0;
+	for(i = 1; i <= msa->alen; i++) 
+	  if(xcons_ct[i] != 0 && i < xcons_ct[i]) 
+	    ncons_bps++;
+
+	if(nali > 1 && !have_cons)
+	  esl_fatal("the first aln has SS_cons but aln %d lacks it, if one has it, they all must.", nali); 
+	if(nali == 1) have_cons = TRUE;
+      }
+      else if (lfp != NULL) { 
+	esl_fatal("the -l option requires existing SS_cons annotation, aln %d lacks it.", nali); 
+      }
+      else if (do_remove_bps) { 
+	esl_fatal("the -r option requires existing SS_cons annotation, aln %d lacks it.", nali); 
+      }
+      else if (do_consistent) { 
+	esl_fatal("the -c option requires existing SS_cons annotation, aln %d lacks it.", nali); 
+      }
+      else { 
+	if(nali > 1 && have_cons)
+	  esl_fatal("the first aln does not have SS_cons but aln %d does, if one has it, they all must.", nali); 
+      }
+
+      if(do_info) { 
+	printf("# Per-sequence basepair information:\n"); 
+	printf("# Alignment file: %s\n", alifile);
+	printf("# Alignment idx:  %d\n", nali);
+	if(msa->name != NULL) { printf("# Alignment name: %s\n", msa->name); }
+	if(have_cons) { 
+	  printf("#\n");
+	  printf("# indibp: number of basepairs in the individual sequence SS annotation\n");
+	  printf("# ovrlap: number of indibp basepairs that also exist as consensus basepairs\n");
+	  printf("# cnsist: number of indibp basepairs that do not conflict with any consensus basepairs\n");
+	  printf("# cnflct: number of indibp basepairs that conflict with >= 1 consensus basepairs\n");
+	  printf("#\n");
+	  printf("# A conflict exists between two basepairs in different structures, one between columns i and j\n");
+	  printf("# and the other between columns k and l, if (i == k and j != l) or (j == l and i != k).\n");
+	  printf("#\n");
+	  printf("# %-*s  %6s  %6s  %6s  %6s\n", namewidth, "seqname", "indibp", "ovrlap", "cnsist", "cnflct");
+	  printf("# %-*s  %6s  %6s  %6s  %6s\n", namewidth, namedashes, "------", "------", "-----", "------");
+	}
+	else { 
+	  printf("# %-*s  %6s\n", namewidth, "seqname", "nbp");
+	  printf("# %-*s  %6s\n", namewidth, namedashes, "------");
+	}
+      }
+
+      nindi_read = 0;
+      for (a = 0; a < msa->nseq; a++) { 
+	if(msa->ss != NULL && msa->ss[a] != NULL) { 
+	  if((status = esl_wuss2ct(msa->ss[a], msa->alen, cur_ct)) != eslOK) { 
+	    esl_fatal("SS annotation for sequence %d, aln %d  is invalid.\n", (a+1), nali);
+	  }
+	  nindi_read++;
+	  for(i = 1; i <= msa->alen; i++) { 
+	    if(i < cur_ct[i]) { 
+	      bp[i][cur_ct[i]]++;
+	      if(bp[i][cur_ct[i]] == 1) { 
+		nmates_l2r[i]++;
+		nmates_r2l[cur_ct[i]]++;
+	      }
+	    }
+	  }
+
+	  for(i = 1; i <= msa->alen; i++) { 
+	    if(cur_ct[i] != 0 && i < cur_ct[i]) { 
+	      if(xcons_ct[i] == cur_ct[i]) noverlapsA[a]++;
+	      if((xcons_ct[i] != 0) && (xcons_ct[i] != cur_ct[i])) { 
+		if(be_verbose) { printf("ali: %2d seq %3d (%s) bp %4d:%4d conflicts with consensus bp %4d:%4d\n", nali, a, msa->sqname[a], i, cur_ct[i], i, xcons_ct[i]); }
+		nconflictsA[a]++;
+		/* indi bp i:cur_ct[i] conflicts with i:xcons_ct[i] */
+		removebp[i]           = TRUE;
+		removebp[xcons_ct[i]] = TRUE;
+	      }
+	      else if((xcons_ct[cur_ct[i]] != 0) && (xcons_ct[cur_ct[i]] != i) && (cur_ct[xcons_ct[cur_ct[i]]] == 0)) { 
+		if(be_verbose) { printf("ali: %2d seq %3d (%s) bp %4d:%4d conflicts with consensus bp %4d:%4d\n", nali, a, msa->sqname[a], xcons_ct[i], cur_ct[xcons_ct[i]], xcons_ct[cur_ct[i]], cur_ct[i]); }
+		nconflictsA[a]++;
+		/* indi bp i:cur_ct[i] conflicts with xcons_ct[cur_ct[i]]:cur_ct[i] */
+		removebp[cur_ct[i]] = TRUE;
+		removebp[xcons_ct[cur_ct[i]]] = TRUE;
+	      }
+	      else nconsistentA[a]++;
+	    }		  
+	  }
+	  if(nconflictsA[a] > lmax) { 
+	    if(lfp != NULL) fprintf(lfp, "%s\n", msa->sqname[a]); 
+	    nconflicts_list += nconflictsA[a];
+	    nlist++;
+	  }
+	  nbpsA[a] = nconflictsA[a] + nconsistentA[a];
+	  nconflicts_total += nconflictsA[a];
+	  nconsistent_total += nconsistentA[a];
+	  noverlaps_total += noverlapsA[a];
+	  nbps_total += nbpsA[a];
+
+	  if(do_info && have_cons)  printf("  %-*s  %6d  %6d  %6d  %6d\n", namewidth, msa->sqname[a], nbpsA[a], noverlapsA[a], nconsistentA[a], nconflictsA[a]); 
+	  if(do_info && !have_cons) printf("  %-*s  %6d\n", namewidth, msa->sqname[a], nbpsA[a]);
+	  if(nbpsA[a] > nbpsA[max_nbps_aidx]) max_nbps_aidx = a;
+	  if((noverlapsA[a] > noverlapsA[max_noverlaps_aidx]) || ((noverlapsA[a] == noverlapsA[max_noverlaps_aidx]) && (nbpsA[a] > nbpsA[max_noverlaps_aidx]))) max_noverlaps_aidx = a;
+	  if((nconsistentA[a] > nconsistentA[max_nconsistent_aidx]) || ((nconsistentA[a] == nconsistentA[max_nconsistent_aidx]) && (nbpsA[a] > nbpsA[max_nconsistent_aidx]))) max_nconsistent_aidx = a;
+	}
+	else if(do_newcons || esl_opt_GetBoolean(go, "-a")) { esl_fatal("No SS annotation for sequence %d, aln %d.\n", (a+1), nali); }
+      }
+
+      if(do_info && have_cons) { 
+	if(nindi_read > 0) printf("\n"); 
+	printf("  %-*s  %6d  %6d  %6d  %6d\n", namewidth, "SS_cons(consensus)", ncons_bps, ncons_bps, ncons_bps, 0); 
+	if(nindi_read > 0) { 
+	  printf("\n# %6d/%6d (%.3f) overlap\n", noverlaps_total, nbps_total, nbps_total > 0 ? (float) noverlaps_total / (float) nbps_total : 0.);
+	  printf("# %6d/%6d (%.3f) consistent\n", nconsistent_total, nbps_total, nbps_total > 0 ? (float) nconsistent_total / (float) nbps_total: 0.);
+	  printf("# %6d/%6d (%.3f) conflict\n", nconflicts_total, nbps_total, nbps_total > 0 ? (float) nconflicts_total / (float) nbps_total: 0.);
+	}
+	else { 
+	  printf("# No sequences in the alignment have GR SS annotation.\n");
+	}
+      }
+
+      if(lfp != NULL) { 
+	printf("# %d/%d sequences with %.3f individual bps on avg that conflict with SS_cons written to %s\n", nlist, msa->nseq, (float) nconflicts_list / (float) nlist, esl_opt_GetString(go, "-l")); 
+      }
+
+      /* determine number of gaps per alignment column */
+      if((status = get_gaps_per_column(msa, &ngaps)) != eslOK) goto ERROR;
+
+      /* -x: determine max bp structure OR
+       * -a: list all conflicts in individual structures */
+      if(do_max || do_a) { 
+	for(i = 1; i <= msa->alen; i++) { 
+	  if(nmates_l2r[i] > 1) {/* list the conflicts */
+	    has_conflict[i] = TRUE;
+	    for(j = 1; j <= msa->alen; j++) { 
+	      if(bp[i][j] > 0) { 
+		if(do_a) printf("More than 1 right mates for left  mate %4d   %4d:%4d bp exists in %4d/%4d seqs (%.3f)\n", i, i, j, bp[i][j], msa->nseq - ngaps[i], (float) bp[i][j] / (float) (msa->nseq - ngaps[i])); 
+		has_conflict[j] = TRUE;
+	      }
+	    }
+	  }
+	}
+	for(i = 1; i <= msa->alen; i++) { 
+	  if(nmates_r2l[i] > 1) {/* list the conflicts */
+	    has_conflict[i] = TRUE;
+	    for(j = 1; j <= msa->alen; j++) { 
+	      if(bp[j][i] > 0) { 
+		if(do_a) printf("More than 1 left  mates for right mate %4d   %4d:%4d bp exists in %4d/%4d seqs (%.3f)\n", i, j, i, bp[j][i], msa->nseq - ngaps[i], (float) bp[j][i] / (float) (msa->nseq - ngaps[i])); 
+		has_conflict[j] = TRUE;
+	      }
+	    }
+	  }
+	}
+	for(i = 1; i <= msa->alen; i++) { 
+	  /*printf("conflict[%4d]: %d\n", i, has_conflict[i]);*/
+	  if(nmates_l2r[i] == 1 && (!(has_conflict[i]))) { 
+	    j = i+1; 
+	    while(bp[i][j] == 0) j++;
+	    cons_ct[i] = j;
+	    cons_ct[j] = i;
+	  }
+	}
+
+	/* remove pseudoknotted bps greedily */
+	for(i = 1; i <= msa->alen; i++) { 
+	  j = cons_ct[i]; 
+	  if(j != 0 && i < j) { 
+	    for(i2 = i+1; i2 <= msa->alen; i2++) { 
+	      j2 = cons_ct[i2];
+	      if(j2 != 0 && i2 < j2) { 
+		if((i2 < j) && (j < j2)) { 
+		  /*printf("KNOT %4d:%4d (%4d) %4d:%4d (%4d)\n", i, j, bp[i][j], i2, j2, bp[i2][j2]);*/
+		  /* note: remove both if they have equal number of sequences */
+		  if(bp[i][j] <= bp[i2][j2]) { 
+		    /*printf("rm %4d:%4d\n", i, j);*/
+		    cons_ct[cons_ct[i]] = 0;
+		    cons_ct[i]          = 0;
+		  }
+		  if(bp[i][j] >= bp[i2][j2]) { 
+		    /*printf("rm %4d:%4d\n", i2, j2);*/
+		    cons_ct[cons_ct[i2]] = 0;
+		    cons_ct[i2]          = 0;
+		  }
+		}
+	      }
+	    }
+	  }
+	}
+      }
+      
+      /***************************************/
+      /*PARANOID, second check for knots 
+      for(i = 1; i <= msa->alen; i++) { 
+	j = cons_ct[i]; 
+	if(j != 0 && i < j) { 
+	  printf("BP: %4d:%4d\n", i, j);
+	  for(i2 = 1; i2 <= msa->alen; i2++) { 
+	    j2 = cons_ct[i2];
+	    if(j2 != 0 && i2 < j2) { 
+	      if((i2 < j) && (j < j2)) { 
+		if((i < i2)) { 
+		  printf("KNOT %4d:%4d (%4d) %4d:%4d (%4d)\n", i, j, bp[i][j], i2, j2, bp[i2][j2]);
+		}
+	      }
+	    }
+	  }
+	}
+      }
+      ******************************************/
+
+      /***************************************/
+      /*PARANOID, check cons_ct for consistency
+      for(i = 1; i <= msa->alen; i++) { 
+	if(cons_ct[i] != 0) { 
+	  if(cons_ct[cons_ct[i]] != i) { printf("ERROR: i: %4d cons_ct[i]: %4d cons_ct[cons_ct[i]]: %4d\n", i, cons_ct[i], cons_ct[cons_ct[i]]); }
+	}
+      }
+      */
+      /*PARANOID, write out SS_cons 
+      for(i = 1; i <= msa->alen; i++) { 
+	if(i < cons_ct[i]) printf("<"); 
+	else if(cons_ct[i] != 0) { printf(">"); }
+	else printf(".");
+      }
+      printf("\n");
+      */
+      /***************************************/
+
+      /* textize alignment */
+      if((status = esl_msa_Textize(msa)) != eslOK) esl_fatal("ERROR textizing alignment %d\n", nali); 
+
+      /* --fmin */
+      if(do_fmin) { 
+	/* define ss_cons */
+	prev_nbps = -1;
+	fthresh = 0.99;
+	inconsistent_flag = pknot_flag = FALSE;
+	printf("# Defining consensus structure:\n");
+	printf("# indi SS basepair aln columns i:j (from at least 1 indi SS) will become consensus basepair\n");
+	printf("# if > <x> individual SS contain i:j as a pair\n");
+	printf("# We'll search for minimal <x> that gives a consistent consensus structure.\n");
+	printf("# A consistent structure has each position involved in 0 or 1 basepairs.\n");
+	printf("#\n");
+	printf("# Alignment file: %s\n", alifile);
+	printf("# Alignment idx:  %d\n", nali);
+	printf("# Number of seqs: %d\n", msa->nseq);
+	printf("#\n");
+	printf("# %5s  %23s  %6s\n", "<x>", "nseq-required-with-bp", "numbps");
+	printf("# %5s  %23s  %6s\n", "-----", "-----------------------", "------");
+	while(fthresh >= 0.00 && (inconsistent_flag == FALSE) && (pknot_flag == FALSE)) { 
+	  nbps = 0;
+	  seqthresh = (int) (fthresh * msa->nseq);
+	  /*printf("fthresh: %f seqthresh: %d nseq: %d\n", fthresh, seqthresh, msa->nseq);*/
+	  esl_vec_ISet(cons_ct, msa->alen+1, 0);
+	  for(i = 1; i <= msa->alen; i++) { 
+	    for(j = i+1; j <= msa->alen; j++) { 
+	      if(bp[i][j] > seqthresh) { 
+		if(cons_ct[i] != 0 || cons_ct[j] != 0) { 
+		  inconsistent_flag = TRUE;
+		}
+		/* check for pseudoknots */
+		for(k = i+1; k < j; k++) { 
+		  l = cons_ct[k];
+		  if((k < l) && (l > j)) { 
+		    pknot_flag = TRUE;
+		  }
+		  if((k > l) && (l != 0) && (l < i)) { 
+		    pknot_flag = TRUE;
+		  }
+		}
+		cons_ct[i] = j;
+		cons_ct[j] = i;
+		nbps++;
+	      }
+	    }
+	  }
+	  if(inconsistent_flag) 
+	    printf("  %.3f  %23d  %s\n", fthresh, seqthresh+1, "inconsistent");
+	  else if(pknot_flag) 
+	    printf("  %.3f  %23d  %s\n", fthresh, seqthresh+1, "pseudoknotted");
+	  else { 
+	    if(nbps != prev_nbps) { 
+	      printf("  %.3f  %23d  %6d\n", fthresh, seqthresh+1, nbps);
+	    }
+	    fmin = fthresh;
+	  }
+	  fthresh -= 0.01;
+	  prev_nbps = nbps;
+	}
+	fthresh = fmin;
+	esl_vec_ISet(cons_ct, msa->alen+1, 0);
+      }
+
+      /* --ffreq: determine structure by defining consensus bps that occur in <x> fraction of indi structures */
+      if(do_ffreq || do_fmin) { 
+	if(do_fmin)  { printf("#\n# <x> determined to be %.3f\n", fthresh); }
+	if(do_ffreq) { 
+	  printf("# Defining consensus structure:\n");
+	  printf("# indi SS basepair aln columns i:j (from at least 1 indi SS) will become consensus basepair\n");
+	  printf("# if > %f individual SS contain i:j as a pair\n", fthresh);
+	}
+	esl_vec_ISet(cons_ct, msa->alen+1, 0);
+	/* define ss_cons */
+	  seqthresh = (int) (fthresh * msa->nseq);
+	  /*printf("fthresh: %f seqthresh: %d nseq: %d\n", fthresh, seqthresh, msa->nseq);*/
+	  for(i = 1; i <= msa->alen; i++) { 
+	    for(j = i+1; j <= msa->alen; j++) { 
+	      if(bp[i][j] > seqthresh) { 
+		if(cons_ct[i] != 0) { 
+		  esl_fatal("ERROR, two base pairs including position %d satisfy threshold (%d:%d and %d:%d)!\n", i, i, cons_ct[i], i, j);
+		}
+		if(cons_ct[j] != 0) { 
+		  esl_fatal("ERROR, two base pairs including position %d satisfy threshold (%d:%d and %d:%d)!\n", j, j, cons_ct[j], i, j);
+		}
+		cons_ct[i] = j;
+		cons_ct[j] = i;
+	      }
+	    }
+	  }
+	}
+
+      /* -r: redefine consensus struct by removing any bps that conflict with individual structures */
+      if(do_remove_bps) { 
+	for(i = 1; i <= msa->alen; i++) { 
+	  if(!(removebp[i])) {
+	    cons_ct[i]          = xcons_ct[i];
+	    cons_ct[cons_ct[i]] = i;
+	  }
+	  else {
+	    printf("# Removing consensus bp: %d:%d\n", i, xcons_ct[i]);
+	    cons_ct[xcons_ct[i]] = 0; 
+	    cons_ct[i]           = 0; 
+	  }
+	}
+      }
+      
+      /* -c:     define consensus structure as indi sequence with highest number of consistent bps with structure  OR */
+      /* --indi: define consensus structure as indi sequence <x> from --indi <x> */
+      if(do_consistent || do_indi2cons) {
+	if(do_indi2cons) { 
+	  indi = esl_opt_GetString(go, "--indi");
+	  for(a = 0; a < msa->nseq; a++) { 
+	    if(strcmp(indi, msa->sqname[a]) == 0) break;
+	  }
+	  if(a == msa->nseq) esl_fatal("ERROR, could not find a sequence named %s in the alignment.\n", indi);
+	}
+	else { /* do_consistent */
+	  a = max_nconsistent_aidx;
+	}
+	if(msa->ss == NULL || msa->ss[a] == NULL) esl_fatal("ERROR, no individual SS annotation for %s in the alignment.\n", msa->sqname[a]);
+	if((status = esl_wuss2ct(msa->ss[a], msa->alen, cons_ct)) != eslOK) { 
+	  esl_fatal("Second pass... SS annotation for sequence %d, aln %d  is invalid.\n", (a), nali);
+	}	
+	printf("# Defined new SS_cons as SS annotation for %s (%d basepairs)\n", msa->sqname[a], nbpsA[a]);
+	if(esl_opt_GetBoolean(go, "--rfc") || esl_opt_GetBoolean(go, "--rfindi")) {
+	  if(msa->rf != NULL) { free(msa->rf); msa->rf = NULL; }
+	  if((status = esl_strcat(&(msa->rf), -1, msa->aseq[a], msa->alen)) != eslOK) goto ERROR;
+	  printf("# Defined new RF as %s sequence\n", msa->sqname[a]);
+	}
+      }
+      
+      /* write out alignment with new SS_cons */
+      if(do_newcons) { 
+	if((status = esl_ct2wuss(cons_ct, msa->alen, sscons)) != eslOK) goto ERROR;
+	if(msa->ss_cons != NULL) { free(msa->ss_cons); msa->ss_cons = NULL; }
+	if((status = esl_strcat(&(msa->ss_cons), -1, sscons, msa->alen)) != eslOK) goto ERROR;
+	status = esl_msafile_Write(ofp, msa, (esl_opt_GetBoolean(go, "--pfam") ? eslMSAFILE_PFAM : eslMSAFILE_STOCKHOLM));
+	if      (status == eslEMEM) esl_fatal("Memory error when outputting alignment\n");
+	else if (status != eslOK)   esl_fatal("Writing alignment file failed with error %d\n", status);
+      }
+      
+      free(sscons);
+      free(cur_ct);
+      free(cons_ct);
+      free(xcons_ct);
+      for(i = 1; i <= msa->alen; i++) free(bp[i]);
+      free(bp);
+      esl_msa_Destroy(msa);
+    }
+  if (nali == 0) esl_fatal("No alignments found in file %s\n", alifile);
+
+  /* Cleanup, normal return
+   */
+  if(lfp != NULL) fclose(lfp);
+  if(ofp != NULL) { 
+    printf("# Alignment(s) saved to file %s\n", esl_opt_GetString(go, "-o"));
+    fclose(ofp);
+  }
+  esl_msafile_Close(afp);
+  esl_getopts_Destroy(go);
+  return 0;
+
+ ERROR:
+  if(afp) esl_msafile_Close(afp);
+  if(go)  esl_getopts_Destroy(go);
+  if(msa) esl_msa_Destroy(msa);
+  if(lfp) fclose(lfp);
+  if(ofp) fclose(ofp);
+  esl_fatal("ERROR\n");
+  return 1;
+  
+}
+
+
+/* get_gaps_per_column 
+ *                   
+ * Given an MSA, determine the number of gaps per
+ * column, and return a newly allocated array with this
+ * into in *ret_ngaps. 
+ */
+static int get_gaps_per_column(ESL_MSA *msa, int **ret_ngaps)
+{
+  int status;
+  int i, apos;
+  int *ngaps = NULL;
+  /* contract check */
+  if(! (msa->flags & eslMSA_DIGITAL)) { status = eslEINVAL; goto ERROR; }
+
+  ESL_ALLOC(ngaps, sizeof(int) * (msa->alen+1));
+  esl_vec_ISet(ngaps, msa->alen+1, 0);
+  for(i = 0; i < msa->nseq; i++) {
+    for(apos = 1; apos <= msa->alen; apos++)
+      ngaps[apos] += esl_abc_XIsGap(msa->abc, msa->ax[i][apos]);
+  }
+  *ret_ngaps = ngaps;
+  return eslOK;
+
+ ERROR:
+  if(ngaps != NULL) free(ngaps);
+  return status;
+}
diff --git a/miniapps/esl-construct.itest.pl b/miniapps/esl-construct.itest.pl
new file mode 100755
index 0000000..6ef157b
--- /dev/null
+++ b/miniapps/esl-construct.itest.pl
@@ -0,0 +1,160 @@
+#! /usr/bin/perl
+
+# Integrated test of the esl-construct miniapp.
+#
+# Usage:     ./esl-construct.itest.pl <esl-construct binary> <tmpfile prefix>
+# Example:   ./esl-construct.itest.pl ./esl-construct        foo
+#
+# EPN, Tue Feb  2 13:19:44 2010
+
+$eslconstruct= shift;
+$tmppfx      = shift;
+
+if (! -x "$eslconstruct") { die "FAIL: didn't find esl-construct binary $eslconstruct"; }
+
+open(ALIFILE, ">$tmppfx.1") || die "FAIL: couldn't open $tmppfx.1 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+simpex-1           --AGA-CUUCG-GUCGCUCG-UAACAG
+#=GR simpex-1   SS ..:<<-<____->>>-<<-<.___>>>
+simpex-2           aaAAUACGUCGGCUG-AAUACCCAGUA
+#=GR simpex-2   SS ..::<<<____>->>--<-.<___>>:
+simpex-3           --ACGUUUUG-GAACGGG-U-CCAACC
+#=GR simpex-3   SS ..::<<<____>->>-<<-<.___>>>
+#=GC SS_cons       ..::<<<____>->>-<<-<.___>>>
+#=GC RF            ..AAgaCUUCGGAucgggCg.AcAccc
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.2") || die "FAIL: couldn't open $tmppfx.1 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+simpex-1           --AGA-CUUCG-GUCGCUCG-UAACAG
+simpex-2           aaAAUACGUCGGCUG-AAUACCCAGUA
+simpex-3           --ACGUUUUG-GAACGGG-U-CCAACC
+#=GC SS_cons       ..::<<<____>->>-<<-<.___>>>
+#=GC RF            ..AAgaCUUCGGAucgggCg.AcAccc
+//
+EOF
+close ALIFILE;
+
+open(ALIFILE, ">$tmppfx.3") || die "FAIL: couldn't open $tmppfx.1 for writing alifile";
+print ALIFILE << "EOF";
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+simpex-1           --AGA-CUUCG-GUCGCUCG-UAACAG
+#=GR simpex-1   SS ..:<<-<____->>>-<<-<.___>>>
+simpex-2           aaAAUACGUCGGCUG-AAUACCCAGUA
+#=GR simpex-2   SS ..::<<<____>->>--<-.<___>>:
+simpex-3           --ACGUUUUG-GAACGGG-U-CCAACC
+#=GR simpex-3   SS ..::<<<____>->>-<<-<.___>>>
+//
+EOF
+close ALIFILE;
+
+$output = `$eslconstruct -h`;
+if ($? != 0)                                         { die "FAIL: esl-construct failed unexpectedly"; }
+if ($output !~ /Usage: esl-construct/)               { die "FAIL: help output not right"; }
+
+$output = `$eslconstruct $tmppfx.1 2>&1`;
+if ($? != 0)                                                            { die "FAIL: esl-construct failed unexpectedly";      }
+if ($output !~ /  simpex-2                 5       4       4       1/)  { die "FAIL: structure stats calculated incorrectly"; }
+if ($output !~ /SS\_cons\(consensus\)       6       6       6       0/) { die "FAIL: structure stats calculated incorrectly"; }
+if ($output !~ /13\/    17 \(0.765\) overlap/)                          { die "FAIL: structure stats calculated incorrectly"; }
+
+$output = `$eslconstruct $tmppfx.2 2>&1`;
+if ($? != 0)                                                              { die "FAIL: esl-construct failed unexpectedly"; }
+if ($output !~ /SS\_cons\(consensus\)       6       6       6       0/) { die "FAIL: structure stats calculated incorrectly"; }
+
+$output = `$eslconstruct $tmppfx.3 3>&1`;
+if ($? != 0)                                                            { die "FAIL: esl-construct failed unexpectedly";      }
+if ($output !~ /simpex-2                 5/)                            { die "FAIL: structure stats calculated incorrectly"; }
+
+
+$output = `$eslconstruct -a $tmppfx.1 2>&1`;
+if ($? != 0)                                                            { die "FAIL: esl-construct failed unexpectedly";      }
+if ($output !~ /More than 1 right mates for left  mate    7      7:  12 bp exists in    2\/   3 seqs/) { die "FAIL: structure stats calculated incorrectly"; }
+if ($output !~ /More than 1 right mates for left  mate    7      7:  13 bp exists in    1\/   3 seqs/) { die "FAIL: structure stats calculated incorrectly"; }
+if ($output !~ /More than 1 left  mates for right mate   25     20:  25 bp exists in    2\/   3 seqs/) { die "FAIL: structure stats calculated incorrectly"; }
+if ($output !~ /More than 1 left  mates for right mate   25     21:  25 bp exists in    1\/   3 seqs/) { die "FAIL: structure stats calculated incorrectly"; }
+
+$output = `$eslconstruct -v $tmppfx.1 2>&1`;
+if ($? != 0)                                                                                      { die "FAIL: esl-construct failed unexpectedly";      }
+if ($output !~ /  simpex-2                 5       4       4       1/)                            { die "FAIL: structure stats calculated incorrectly"; }
+if ($output !~ /SS\_cons\(consensus\)       6       6       6       0/)                           { die "FAIL: structure stats calculated incorrectly"; }
+if ($output !~ /13\/    17 \(0.76\d+\) overlap/)                                                  { die "FAIL: structure stats calculated incorrectly"; }
+if ($output !~ /ali:  1 seq   0 \(simpex-1\) bp    5:  14 conflicts with consensus bp    5:  15/) { die "FAIL: structure stats calculated incorrectly"; }
+
+
+system("$eslconstruct -o $tmppfx.stk -x $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.stk`;
+if ($output !~ /\#=GC SS_cons     ::::::::::::::::<<_______>>/)   { die "FAIL: consensus structure calculated incorrectly"; }
+
+system("$eslconstruct -o $tmppfx.stk -r $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.stk`;
+if ($output !~ /\#=GC SS_cons     :::::<_______>::<<_______>>/)   { die "FAIL: consensus structure calculated incorrectly"; }
+
+system("$eslconstruct -o $tmppfx.stk -c $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.stk`;
+if ($output !~ /#=GC SS_cons     ::::<<<____>->>:<<-<____>>>/)    { die "FAIL: consensus stucture calculated incorrectly"; }
+
+system("$eslconstruct -o $tmppfx.stk -c --rfc $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.stk`;
+if ($output !~ /#=GC SS_cons     ::::<<<____>->>:<<-<____>>>/)    { die "FAIL: consensus stucture calculated incorrectly"; }
+if ($output !~ /#=GC RF          --ACGUUUUG-GAACGGG-U-CCAACC/)    { die "FAIL: consensus stucture calculated incorrectly"; }
+
+system("$eslconstruct -o $tmppfx.stk --indi simpex-2 $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.stk`;
+if ($output !~ /\#=GC SS_cons     ::::<<<____>->>::<--<___>>:/)   { die "FAIL: consensus stucture calculated incorrectly"; }
+
+system("$eslconstruct -o $tmppfx.stk --indi simpex-2 --rfindi $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.stk`;
+if ($output !~ /\#=GC SS_cons     ::::<<<____>->>::<--<___>>:/)   { die "FAIL: consensus stucture calculated incorrectly"; }
+if ($output !~ /\#=GC RF          AAAAUACGUCGGCUG-AAUACCCAGUA/)   { die "FAIL: consensus stucture calculated incorrectly"; }
+
+system("$eslconstruct -o $tmppfx.stk --ffreq 0.6 $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.stk`;
+if ($output !~ /#=GC SS_cons     ::::<<<____>->>:<<-<____>>>/)    { die "FAIL: consensus stucture calculated incorrectly"; }
+
+system("$eslconstruct -o $tmppfx.stk --ffreq 0.7 $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.stk`;
+if ($output !~ /#=GC SS_cons     :::::::::::::::::<_______>:/)    { die "FAIL: consensus stucture calculated incorrectly"; }
+
+system("$eslconstruct -o $tmppfx.stk --fmin $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.stk`;
+if ($output !~ /#=GC SS_cons     ::::<<<____>->>:<<-<____>>>/)    { die "FAIL: consensus stucture calculated incorrectly"; }
+
+system("$eslconstruct -l $tmppfx.list -o $tmppfx.stk --fmin $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.list`;
+if ($output !~ /simpex-1/)    { die "FAIL: consensus stucture calculated incorrectly"; }
+if ($output !~ /simpex-2/)    { die "FAIL: consensus stucture calculated incorrectly"; }
+
+system("$eslconstruct --lmax 1 -l $tmppfx.list -o $tmppfx.stk --fmin $tmppfx.1 > /dev/null");
+if ($? != 0)                                                      { die "FAIL: esl-construct failed unexpectedly"; }
+$output = `cat $tmppfx.list`;
+if ($output !~ /simpex-1/)    { die "FAIL: consensus stucture calculated incorrectly"; }
+if ($output =~ /simpex-2/)    { die "FAIL: consensus stucture calculated incorrectly"; }
+
+print "ok\n"; 
+unlink "$tmppfx.1";
+unlink "$tmppfx.2";
+unlink "$tmppfx.3";
+unlink "$tmppfx.stk";
+unlink "$tmppfx.list";
+exit 0;
diff --git a/miniapps/esl-construct.man b/miniapps/esl-construct.man
new file mode 100644
index 0000000..0be2436
--- /dev/null
+++ b/miniapps/esl-construct.man
@@ -0,0 +1,179 @@
+.TH "esl-construct" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps"
+
+.SH NAME
+.TP 
+esl-construct - describe or create a consensus secondary structure
+
+.SH SYNOPSIS
+.B esl-construct
+.I [options]
+.I msafile
+
+.SH DESCRIPTION
+
+.B esl-construct 
+reports information on existing consensus secondary structure annotation
+of an alignment or derives new consensus secondary structures based on 
+structure annotation for individual aligned sequences.
+
+.PP
+The alignment file must contain either individual sequence secondary
+structure annotation (Stockholm #=GR SS), consensus secondary
+structure annotation (Stockohlm #=GC SS_cons), or both. All structure
+annotation must be in WUSS notation (Vienna dot paranetheses notation will be
+correctly interpreted). At present, the alignment file must be in
+Stockholm format and contain RNA or DNA sequences.
+
+.PP
+By default, 
+.B esl-construct
+generates lists the sequences in the alignment that have structure
+annotation and the number of basepairs in those structures. If the
+alignment also contains consensus structure annotation, the default output
+will list how many of the individual basepairs overlap with the
+consensus basepairs and how many conflict with a consensus basepair.
+
+.PP
+For the purposes of this miniapp, a basepair 'conflict' exists between
+two basepairs in different structures, one between columns i and j and
+the other between columns k and l, if (i == k and j != l) or (j == l
+and i != k).
+
+.PP
+.B esl-construct
+can also be used to derive a new consensus structure based on
+structure annotation for individual sequences in the alignment by
+using any of the following options: 
+.B -x,
+.B -r,
+.B -c,
+.BI --indi " <s>",
+.BI --ffreq " <x>",
+.B --fmin.
+These are described below. All of these options require the 
+.BI -o " <f>"
+option be used as well to specify that a new alignment file 
+.I <f> 
+be created. Differences between the new alignment(s) and the input
+alignment(s) will be limited to the the consensus secondary structure (#=GC
+SS_cons) annotation and possibly reference (#=GC RF) annotation.
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+.TP
+.B -a
+List all alignment positions that are involved in at least one
+conflicting basepair in at least one sequence to the screen, and then
+exit.
+
+.TP
+.B -v
+Be verbose; with no other options, list individual sequence basepair
+conflicts as well as summary statistics.
+
+.TP
+.B -x
+Compute a new consensus structure as the maximally sized set of
+basepairs (greatest number of basepairs) chosen from all individual
+structures that contains 0 conflicts. Output the alignment with the
+new SS_cons annotation. This option must be used in combination with
+the
+.B -o 
+option. 
+
+.TP
+.B -r
+Remove any consensus basepairs that conflict with >= 1 individual
+basepair and output the alignment with the new SS_cons annotation. 
+This option must be used in combination with the 
+.B -o 
+option. 
+
+.TP
+.B -c
+Define a new consensus secondary structure as the individual structure
+annotation that has the maximum number of consistent basepairs with
+the existing consensus secondary structure annotation.
+This option must be used in combination with the 
+.B -o 
+option. 
+
+.TP
+.B --rfc
+With 
+.B -c, 
+set the reference annotation (#=GC RF) as the sequence whose 
+individual structure becomes the consensus structure. 
+
+.TP
+.BI --indi " <s>"
+Define a new consensus secondary structure as the individual structure
+annotation from sequence named
+.I <s>.
+This option must be used in combination with
+the
+.B -o 
+option. 
+
+.TP
+.B --rfindi
+With 
+.BI --indi " <s>", 
+set the reference annotation (#=GC RF) as the sequence named
+.B <s>.
+
+.TP
+.BI --ffreq " <x>"
+Define a new consensus structure as the set of basepairs between
+columns i:j that are paired in more than 
+.I <x>
+fraction of the individual sequence structures.
+This option must be used in combination with
+the
+.B -o 
+option. 
+
+.TP
+.B --fmin
+Same as
+.BI --ffreq " <x>" 
+except find the maximal 
+.I <x>
+that gives a consistent consensus structure. A consistent structure
+has each base (alignment position) as a member of at most 1 basepair.  
+
+.TP
+.BI -o " <s>", 
+Output the alignment(s) with new consensus structure annotation to file
+.I <f>.
+
+.TP
+.B --pfam 
+With -o, specify that the alignment output format be Pfam format, a
+special type of non-interleaved Stockholm on which each sequence
+appears on a single line.
+
+.TP
+.BI -l " <f>"
+Create a new file 
+.I <f> 
+that lists the sequences that have at least one
+basepair that conflicts with a consensus basepair.
+
+.TP
+.BI --lmax " <n>"
+With -l, only list sequences that have more than 
+.I <n>
+basepairs that conflict with the consensus structure to the list file.
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-histplot.c b/miniapps/esl-histplot.c
new file mode 100644
index 0000000..0b92c71
--- /dev/null
+++ b/miniapps/esl-histplot.c
@@ -0,0 +1,284 @@
+/* esl-histplot  - collate data into a histogram and output xmgrace datafile.
+ *                  
+ * SRE, Tue Feb 21 14:18:05 2006                  
+ * SVN $Id$
+ */
+
+/* Wish list
+ *    - segfaults if you feed it nonnumeric data
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_histogram.h"
+#include "esl_exponential.h"
+#include "esl_gev.h"
+#include "esl_gumbel.h"
+#include "esl_normal.h"
+#include "esl_stats.h"
+
+static char banner[] = "collate a data histogram, output xmgrace datafile";
+
+static char usage[] = "[-options] <datafile>";
+
+static ESL_OPTIONS options[] = {
+  /* name           type         default env rng  togs  reqs inc    help                                          docgrp */
+  {"-h",          eslARG_NONE,   FALSE,NULL,NULL, NULL,NULL,NULL,"show help and usage",                               1 },
+  {"-o",          eslARG_OUTFILE, NULL,NULL,NULL, NULL,NULL,NULL,"output file for plot (default is stdout)",          1 },
+
+  {"-b",          eslARG_NONE,   FALSE,NULL,NULL, NULL,NULL,NULL,"input file is binary, array of doubles",            2 },
+  {"-f",          eslARG_INT,      "1",NULL,"n>0",NULL,NULL,"-b","which field to read on text line (1..n)",           2 },
+
+  {"-w",          eslARG_REAL,   "1.0",NULL,NULL, NULL,NULL,NULL,"bin size for histogram",                            3 },
+  {"--min",       eslARG_REAL, "-100.",NULL,NULL, NULL,NULL,NULL,"initial lower bound of histogram",                  3 },
+  {"--max",       eslARG_REAL,  "100.",NULL,NULL, NULL,NULL,NULL,"initial upper bound of histogram",                  3 },
+  {"--surv",      eslARG_NONE,   FALSE,NULL,NULL, NULL,NULL,NULL,"output survival plot, not histogram",               3 },
+   
+  {"--gumbel",    eslARG_NONE,  FALSE, NULL,NULL, NULL,NULL,NULL,"fit data to a Gumbel distribution",                  4 }, 
+  {"--exptail",   eslARG_NONE,  FALSE, NULL,NULL, NULL,NULL,NULL,"fit tail to an exponential distribution",            4 },
+  {"--gev",       eslARG_NONE,  FALSE, NULL,NULL, NULL,NULL,NULL,"fit data to a generalized EVD (Frechet or Weibull)", 4 }, 
+  {"--normal",    eslARG_NONE,  FALSE, NULL,NULL, NULL,NULL,NULL,"fit data to a normal (Gaussian) distribution",       4 }, 
+  {"--trunc",     eslARG_REAL,  NULL,  NULL,NULL, NULL,"--gumbel",NULL,"with --gumbel, specify data are truncated, min value is <x>",                 4 }, 
+  {"--gumloc",    eslARG_NONE,  FALSE, NULL,NULL, NULL,NULL,NULL,"fit data to a Gumbel distribution w/ known lambda", 4 }, 
+  {"--exptailloc",eslARG_NONE,  FALSE, NULL,NULL, NULL,NULL,NULL,"fit tail to an exponential tail w/ known lambda",   4 }, 
+  {"--showgum",   eslARG_NONE,  FALSE, NULL,NULL, NULL,"--mu",NULL,"plot a known Gumbel for comparison",              4 }, 
+  {"--showexp",   eslARG_NONE,  FALSE, NULL,NULL, NULL,"--mu",NULL,"plot a known exponential tail for comparison",    4 },
+  {"--showgev",   eslARG_NONE,  FALSE, NULL,NULL, NULL,"--mu",NULL,"plot a known GEV for comparison",                 4 },
+  {"--alpha",     eslARG_REAL,  "0.0", NULL,NULL, NULL,NULL,NULL,"set known alpha (GEV shape parameter)",             4 },
+  {"--lambda",    eslARG_REAL,"0.693", NULL,NULL, NULL,NULL,NULL,"set known lambda",                                  4 },    
+  {"--mu",        eslARG_REAL,  "0.0", NULL,NULL, NULL,NULL,NULL,"set known mu",                                      4 },    
+  {"-t",          eslARG_REAL, "0.01", NULL,NULL, NULL,NULL,NULL,"set tail mass to fit to",                           4 },    
+  { 0,0,0,0,0,0,0,0,0,0},
+};
+
+
+int
+main(int argc, char **argv)
+{
+  ESL_HISTOGRAM  *h;		/* full histogram w/ collated values          */
+  ESL_GETOPTS    *go;		/* application configuration                  */
+  char           *datafile;	/* input data; "-" means stdin                */
+  FILE           *ifp;		/* input stream                               */
+  double          x;		/* value of field, after conversion to double */
+
+  int             which_field;	/* which field to use as data, 1..nf (default 1)*/
+  char           *outfile;	/* output xmgrace xy data file                  */
+  FILE           *ofp;		/* output data stream                           */
+  double          hmin;		/* initial histogram lower bound                */
+  double          hmax;		/* initial histogram upper bound                */
+  double          hbinsize;	/* histogram's bin size                         */
+
+  double *xv;
+  int     n;
+  double  params[3];		/* mu, lambda, alpha */
+  double  lambda;
+  double  mu;
+  double  alpha;
+  double  tailp;
+
+  /*****************************************************************
+   * Parse the command line
+   *****************************************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+    
+  if (esl_opt_GetBoolean(go, "-h")) {
+    esl_banner(stdout, argv[0], banner);
+    esl_usage (stdout, argv[0], usage);
+    puts("\nGeneral options are:");
+    esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/
+    puts("\nOptions that control how to read the input file:");
+    esl_opt_DisplayHelp(stdout, go, 2, 2, 80); /* 2= group; 2 = indentation; 80=textwidth*/
+    puts("\nOptions that control how to display the output XY file:");
+    esl_opt_DisplayHelp(stdout, go, 3, 2, 80); /* 3= group; 2 = indentation; 80=textwidth*/
+    puts("\nOptional ML fitting or plotting of distributions for comparison:");
+    esl_opt_DisplayHelp(stdout, go, 4, 2, 80); /* 4= group; 2 = indentation; 80=textwidth*/
+    return eslOK;
+  }
+  which_field = esl_opt_GetInteger(go, "-f");
+  outfile     = esl_opt_GetString (go, "-o");
+  tailp       = esl_opt_GetReal   (go, "-t");
+  hbinsize    = esl_opt_GetReal   (go, "-w");
+  hmin        = esl_opt_GetReal   (go, "--min");
+  hmax        = esl_opt_GetReal   (go, "--max");
+  lambda      = esl_opt_GetReal   (go, "--lambda");
+  mu          = esl_opt_GetReal   (go, "--mu");
+  alpha       = esl_opt_GetReal   (go, "--alpha");
+
+  ESL_DASSERT1(( which_field >= 1 ));
+
+  if (esl_opt_ArgNumber(go) != 1) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  datafile = esl_opt_GetArg(go, 1);
+
+  /*****************************************************************
+   * Open the input and output datafiles, and init the histogram.
+   *****************************************************************/
+
+  if (strcmp(datafile, "-") == 0) ifp = stdin;
+  else {
+    ifp = fopen(datafile, "rb");
+    if (ifp == NULL) esl_fatal("Failed to open input data file %s\n", datafile);
+  }
+
+  if (outfile == NULL) ofp = stdout;
+  else {
+    ofp = fopen(outfile, "w");
+    if (ofp == NULL) esl_fatal("Failed to open output xmgrace data file %s\n", outfile);
+  }
+
+  h = esl_histogram_CreateFull(hmin,hmax,hbinsize);
+  if (h == NULL) esl_fatal("Failed to create histogram");
+
+
+  /*****************************************************************
+   * Collect the data
+   *****************************************************************/
+
+  if (esl_opt_GetBoolean(go, "-b"))
+    {
+      while (fread(&x, sizeof(double), 1, ifp) == 1)
+	esl_histogram_Add(h, x);
+    } 
+  else 
+    {
+      char           *buf;		/* ptr to line buffer, for esl_fgets()        */
+      int             nbuf;		/* allocated line lengths, for esl_fgets()    */
+      char           *s;		/* ptr to line, for esl_strtok()              */
+      char           *tok;		/* ptr to a data field on the line            */
+      int             i;		/* counter over fields                        */
+
+      buf  = NULL;
+      nbuf = 0;
+      while (esl_fgets(&buf, &nbuf, ifp) == eslOK)
+	{
+	  s = buf;
+	  for (i = 0; i < which_field; i++)
+	    {
+	      esl_strtok(&s, " \t\n", &tok);
+	      if (tok == NULL) break;
+	    }
+	  if (tok != NULL) {
+	    x = atof(tok);
+	    esl_histogram_Add(h, x);
+	  }
+	}
+      free(buf);
+    }
+  
+  /*****************************************************************
+   * Optionally, fit the data
+   *****************************************************************/
+
+  if (esl_opt_GetBoolean(go, "--gumbel"))
+    {
+      esl_histogram_GetData(h, &xv, &n);
+      if(! esl_opt_IsDefault(go, "--trunc")) {
+	if (esl_gumbel_FitTruncated(xv, n, esl_opt_GetReal(go, "--trunc"), &(params[0]), &(params[1])) != eslOK)
+	  esl_fatal("gumbel truncated fit failed");
+      } else {
+	if (esl_gumbel_FitComplete(xv, n, &(params[0]), &(params[1])) != eslOK)
+	  esl_fatal("gumbel complete fit failed");
+      }
+      esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, &params);
+
+      printf("# Gumbel fit: mu = %f  lambda = %f\n", params[0], params[1]);
+    }
+  else if (esl_opt_GetBoolean(go, "--gumloc"))
+    {
+      params[1] = lambda;
+      esl_histogram_GetData(h, &xv, &n);
+      if (esl_gumbel_FitCompleteLoc(xv, n, params[1], &(params[0])) != eslOK)
+	esl_fatal("gumbel location-only complete fit failed");
+      esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, &params);
+
+      printf("# Gumbel fit with forced lambda = %f:  mu = %f\n", params[1], params[0]);
+    }
+  else if (esl_opt_GetBoolean(go, "--exptail"))
+    {
+      esl_histogram_GetTailByMass(h, tailp, &xv, &n, NULL);
+      if (esl_exp_FitComplete(xv, n, &(params[0]), &(params[1])) != eslOK)
+	esl_fatal("exponential complete fit failed");
+      esl_histogram_SetExpectedTail(h, params[0], tailp, &esl_exp_generic_cdf, &params);
+
+      printf("# Exponential fit to %.2f%% tail: lambda = %f\n", tailp*100.0, params[1]);
+    }
+  else if (esl_opt_GetBoolean(go, "--exptailloc"))
+    {
+      params[1] = lambda;
+      esl_histogram_GetTailByMass(h, tailp, &xv, &n, NULL);
+      params[0] = xv[0];	/* might be able to do better than minimum score, but this'll do */
+      esl_histogram_SetExpectedTail(h, params[0], tailp, &esl_exp_generic_cdf, &params);
+    }
+  else if (esl_opt_GetBoolean(go, "--gev"))
+    {
+      esl_histogram_GetData(h, &xv, &n);
+      if (esl_gev_FitComplete(xv, n, &(params[0]), &(params[1]), &(params[2])) != eslOK)
+	esl_fatal("generalized EVD complete data fit failed");
+      esl_histogram_SetExpect(h, &esl_gev_generic_cdf, &params);
+      
+      printf("# generalized EVD fit: mu = %f  lambda = %f  alpha = %f\n", params[0], params[1], params[2]);
+    }
+  else if (esl_opt_GetBoolean(go, "--normal"))
+    {
+      esl_histogram_GetData(h, &xv, &n);
+      esl_stats_DMean(xv, n, &(params[0]), &(params[1]));  // params[1] is now the variance...
+      params[1] = sqrt(params[1]);                         //   ... and now the std deviation.
+      esl_histogram_SetExpect(h, &esl_normal_generic_cdf, &params);
+    }
+  else if (esl_opt_GetBoolean(go, "--showgum"))
+    {
+      params[0] = mu;
+      params[1] = lambda;
+      esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, &params);
+    }
+  else if (esl_opt_GetBoolean(go, "--showexp"))
+    {
+      params[0] = mu;
+      params[1] = lambda;
+      esl_histogram_SetExpectedTail(h, mu, tailp, &esl_exp_generic_cdf, &params);
+    }
+  else if (esl_opt_GetBoolean(go, "--showgev"))
+    {
+      params[0] = mu;
+      params[1] = lambda;
+      params[2] = alpha;
+      esl_histogram_SetExpect(h, &esl_gev_generic_cdf, &params);
+    } 
+
+  /*****************************************************************
+   * Output
+   *****************************************************************/
+  if   (esl_opt_GetBoolean(go, "--surv")) esl_histogram_PlotSurvival(ofp, h);
+  else                                    esl_histogram_Plot(ofp, h);
+
+
+  /*****************************************************************
+   * Cleanup
+   *****************************************************************/
+
+  if (outfile != NULL)            fclose(ofp);
+  if (strcmp(datafile, "-") != 0) fclose(ifp);
+  esl_histogram_Destroy(h);
+  esl_getopts_Destroy(go);
+  return 0;
+}
diff --git a/miniapps/esl-histplot.man b/miniapps/esl-histplot.man
new file mode 100644
index 0000000..63018b3
--- /dev/null
+++ b/miniapps/esl-histplot.man
@@ -0,0 +1,80 @@
+.TH "esl-histplot" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps"
+
+.SH NAME
+.TP 
+esl-histplot - collate data histogram, output xmgrace datafile
+
+.SH SYNOPSIS
+.B esl-histplot
+.I [options]
+.I datafile
+
+
+.SH DESCRIPTION
+
+.B esl-histplot
+summarizes numerical data in the input file
+.I datafile.
+
+.pp
+One real-numbered value is taken from each line of the input file. 
+Each line is split into whitespace-delimited fields, and one field
+is converted to data. By default this is the first field; this can be 
+changed by the 
+.I -f 
+option.
+
+.pp
+Default output is a survival plot (Prob(value > x)) in xmgrace XY data
+format, to
+.B stdout.
+Output may be directed to a file with the
+.I -o
+option.
+
+.pp
+If 
+.I datafile
+is "-", input lines are read from 
+.B stdin
+instead of opening a file.
+
+
+
+
+.SH OPTIONS
+
+.TP
+.BI -f  " <n>"
+Read data from whitespace-delimited field 
+.I <n>
+on each line, instead of the first field.
+Fields are numbered starting from 1.
+
+.TP
+.B -h 
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+.TP
+.BI -o  " <f>"
+Send output to file
+.I <f>
+instead of stdout.
+
+
+
+
+
+.SH EXPERT OPTIONS
+
+None.
+
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-mask.c b/miniapps/esl-mask.c
new file mode 100644
index 0000000..960b0e4
--- /dev/null
+++ b/miniapps/esl-mask.c
@@ -0,0 +1,225 @@
+/* Mask sequences in a sequence flatfile.
+ * 
+ * SRE, Sat Oct 31 09:58:56 2009 [Janelia]
+ * SVN $Id$
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "easel.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+static char banner[] = "mask sequences in a sequence file";
+static char usage[]  = "[options] <sqfile> <maskfile>";
+
+static void
+cmdline_failure(char *argv0, char *format, ...) 
+{
+  va_list argp;
+  va_start(argp, format);
+  vfprintf(stderr, format, argp);
+  va_end(argp);
+  esl_usage(stdout, argv0, usage);
+  printf("\nTo see more help on available options, do %s -h\n\n", argv0);
+  exit(1);
+}
+
+static void
+cmdline_help(char *argv0, ESL_GETOPTS *go) 
+{
+  esl_banner(stdout, argv0, banner);
+  esl_usage (stdout, argv0, usage);
+
+  puts("\n where general options are:");
+  esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+
+  puts("");
+  puts("The <seqfile> is a sequence file in any accepted format, such as FASTA.");
+  puts("It may be indexed (see esl-sfetch --index) for faster performance.");
+  puts("");
+  puts("The <maskfile> is a space-delimited file; each data line with 3 columns:");
+  puts("  field 1: <seqname> to fetch from <sqfile>");
+  puts("  field 2: <start> coordinate for mask operation, 1..n");
+  puts("  field 3: <end> coordinate for mask operation, 1..n");
+  puts("Lines starting with # are comments, and ignored.)");
+  puts("");
+  exit(0);
+}
+
+static ESL_OPTIONS options[] = {
+  /* name          type           default env   range togs  reqs incomp   help                                                 docgroup */
+  { "-h",          eslARG_NONE,   FALSE,  NULL, NULL, NULL, NULL,  NULL, "help; show brief info on version and usage",               1 },
+  { "-o",          eslARG_OUTFILE,FALSE,  NULL, NULL, NULL, NULL,  NULL, "output masked sequences to file <f> instead of stdout",    1 },
+  { "-r",          eslARG_NONE,   FALSE,  NULL, NULL, NULL, NULL,  NULL, "reverse: mask exclusive of <start>..<end>, not inclusive", 1 },
+  { "-R",          eslARG_NONE,   FALSE,  NULL, NULL, NULL, NULL,  NULL, "random access: fetch seqs from ssi-indexed <sqfile>",      1 },
+  { "-l",          eslARG_NONE,   FALSE,  NULL, NULL, NULL, NULL,  "-m", "convert masked residues to lower case",                    1 },
+  { "-m",          eslARG_CHAR,    NULL,  NULL, NULL, NULL, NULL,  "-l", "convert masked residues to character <c>",                 1 },
+  { "-x",          eslARG_INT,     NULL,  NULL, NULL, NULL, NULL,  NULL, "mask additional <n> residues beyond <start>,<end>",        1 },
+  { "--informat",  eslARG_STRING, FALSE,  NULL, NULL, NULL, NULL,  NULL, "specify that input file is in format <s>",                 1 },
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go       = NULL;	                /* application configuration       */
+  char           *seqfile  = NULL;	                /* sequence file name              */
+  char           *maskfile = NULL;	                /* mask coordinate file name       */
+  int             infmt    = eslSQFILE_UNKNOWN;         /* format code for seqfile         */
+  int             outfmt   = eslSQFILE_FASTA;           /* format code for output seqs     */
+  ESL_SQFILE     *sqfp     = NULL;                      /* open sequence file              */
+  ESL_FILEPARSER *maskefp  = NULL;	                /* open mask coord file            */
+  FILE           *ofp      = NULL;	                /* output stream for masked seqs   */
+  char           *source   = NULL;			/* name of current seq to mask     */
+  char           *p1, *p2;				/* pointers used in parsing        */
+  int64_t         start, end;				/* start, end coord for masking    */
+  int64_t         i, j, pos;				/* coords in a sequence            */
+  int64_t         overmask;				/* # of extra residues to mask     */
+  ESL_SQ         *sq       = esl_sq_Create();		/* current sequence                */
+  int             do_fetching;
+  int             do_lowercase;
+  int             maskchar;
+  int             status;		                /* easel return code               */
+
+
+  /****************************************************************************
+   * Parse command line
+   ****************************************************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n",       go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") )                   cmdline_help   (argv[0], go);
+  if (esl_opt_ArgNumber(go) != 2)                      cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");        
+
+  do_fetching  = esl_opt_GetBoolean(go, "-R");
+  do_lowercase = esl_opt_GetBoolean(go, "-l");
+  overmask     = (esl_opt_IsOn(go, "-x") ? esl_opt_GetInteger(go, "-x") : 0);
+  maskchar     = (esl_opt_IsOn(go, "-m") ? esl_opt_GetChar(go, "-m")    : 'X');
+
+  seqfile  = esl_opt_GetArg(go, 1);
+  maskfile = esl_opt_GetArg(go, 2);
+
+  /* Open the <seqfile>: text mode, not digital */
+  if (esl_opt_GetString(go, "--informat") != NULL) {
+    infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat"));
+    if (infmt == eslSQFILE_UNKNOWN) cmdline_failure(argv[0], "%s is not a valid input sequence file format for --informat"); 
+  }
+  status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp);
+  if      (status == eslENOTFOUND) cmdline_failure(argv[0], "Sequence file %s not found.\n",     seqfile);
+  else if (status == eslEFORMAT)   cmdline_failure(argv[0], "Format of file %s unrecognized.\n", seqfile);
+  else if (status == eslEINVAL)    cmdline_failure(argv[0], "Can't autodetect stdin or .gz.\n");
+  else if (status != eslOK)        cmdline_failure(argv[0], "Open failed, code %d.\n", status);
+
+  if (do_fetching && sqfp->data.ascii.ssi == NULL)
+    cmdline_failure(argv[0], "-R option (random access/fetching) requires %s to be SSI indexed\n", seqfile);
+
+  /* Open the <maskfile> */
+  if (esl_fileparser_Open(maskfile, NULL, &maskefp) != eslOK) 
+    cmdline_failure(argv[0], "Failed to open mask coordinate file %s\n", maskfile);
+  esl_fileparser_SetCommentChar(maskefp, '#');
+
+  /* Open the output file, if any */
+  if (esl_opt_GetString(go, "-o") != NULL)
+    {
+      if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL)
+	cmdline_failure(argv[0], "Failed to open output file %s\n", esl_opt_GetString(go, "-o"));
+    }
+  else ofp = stdout;
+
+  
+  /****************************************************************************
+   * Main loop over lines in <maskfile>
+   ****************************************************************************/
+
+  /* Read one data line at a time from the <maskfile>; 
+   * parse into data fields <seqname> <start> <end> 
+   */
+  while (esl_fileparser_NextLine(maskefp) == eslOK)
+    {
+      /* First field is sequence name */
+      if (esl_fileparser_GetTokenOnLine(maskefp, &source,  NULL) != eslOK)
+	esl_fatal("Failed to read source seq name on line %d of file %s\n", maskefp->linenumber, maskfile);
+
+      /* Get the sequence */
+      if (do_fetching)
+	{  /* If the <seqfile> is SSI indexed, try to reposition it and read <source> seq by random access */
+	  status = esl_sqio_Fetch(sqfp, source, sq);
+	  if      (status == eslENOTFOUND) esl_fatal("seq %s not found in SSI index for file %s\n", source, sqfp->filename);
+	  else if (status == eslEINVAL)    esl_fatal("No SSI index or can't reposition in file %s\n", sqfp->filename);
+	  else if (status == eslEFORMAT)   esl_fatal("Parse failed:\n%s\n", esl_sqfile_GetErrorBuf(sqfp));     
+	  else if (status != eslOK)        esl_fatal("Unexpected failure in fetching %s from file %s\n", source, sqfp->filename);
+	}
+      else 
+	{ /* else, assume we're reading sequentially; <sqfile> and <maskfile> have seqs in same order */
+	  status = esl_sqio_Read(sqfp, sq);
+	  if      (status == eslEOF)      esl_fatal("File %s ended prematurely; didn't find %s\n", sqfp->filename, source);
+	  else if (status == eslEFORMAT)  esl_fatal("Parse failed:\n%s\n", esl_sqfile_GetErrorBuf(sqfp));
+	  else if (status != eslOK)       esl_fatal("Unexpected error reading sequence file %s\n", sqfp->filename);
+	  
+	  if ((strcmp(sq->name, source) != 0) && (strcmp(sq->acc, source) != 0))
+	    esl_fatal("Sequences in <sqfile> and <maskfile> aren't in same order; try -R");
+	}
+      
+      /* If we're masking by lowercase, first make sure everything's uppercase */
+      if (do_lowercase)
+	for (pos = 0; pos < sq->n; pos++)
+	  if (isalpha(sq->seq[pos]))
+	    sq->seq[pos] = toupper(sq->seq[pos]);
+
+      /* Next two fields are <start>, <end> for the masking  */
+      /* possible future extension: wrap loop around this, enable multiple masked regions */
+      if (esl_fileparser_GetTokenOnLine(maskefp, &p1, NULL) != eslOK)
+	esl_fatal("Failed to read start coord on line %d of file %s\n", maskefp->linenumber, maskfile);
+      start = strtoll(p1, &p2, 0) - 1;
+
+      if (esl_fileparser_GetTokenOnLine(maskefp, &p2, NULL) != eslOK) 
+	esl_fatal("Failed to read end coord on line %d of file %s\n", maskefp->linenumber, maskfile);
+      end   = strtoll(p2, &p1, 0) - 1;
+
+      /* Do the masking */
+      if (esl_opt_GetBoolean(go, "-r")) /* Reverse masking */
+	{ /* leave start..end unmasked; mask prefix 0..start-1, end+1..L-1 */
+	  i = 0;
+	  j = ESL_MIN(sq->n-1, start - 1 + overmask);
+	  for (pos = i; pos <= j; pos++)
+	    if (isalpha(sq->seq[pos])) 
+	      sq->seq[pos] = (do_lowercase ? tolower(sq->seq[pos]) : maskchar);
+	  
+	  i = ESL_MAX(0, end + 1 - overmask);
+	  j = sq->n-1;
+	  for (pos = i; pos <= j; pos++)
+	    if (isalpha(sq->seq[pos])) 
+	      sq->seq[pos] = (do_lowercase ? tolower(sq->seq[pos]) : maskchar);
+	}
+      else
+	{  /* normal: mask start..end */
+	  i = ESL_MAX(0,       start - overmask);
+	  j = ESL_MIN(sq->n-1, end   + overmask);
+	  for (pos = i; pos <= j; pos++)
+	    if (isalpha(sq->seq[pos])) 
+	      sq->seq[pos] = (do_lowercase ? tolower(sq->seq[pos]) : maskchar);
+	}
+
+      esl_sqio_Write(ofp, sq, outfmt, FALSE);
+      esl_sq_Reuse(sq);
+    }
+
+  esl_sq_Destroy(sq);
+  esl_fileparser_Close(maskefp);
+  esl_sqfile_Close(sqfp);
+  esl_getopts_Destroy(go);
+  if (ofp != stdout) fclose(ofp);
+  return 0;
+}
+
+
+
diff --git a/miniapps/esl-mask.itest.pl b/miniapps/esl-mask.itest.pl
new file mode 100755
index 0000000..02b47e8
--- /dev/null
+++ b/miniapps/esl-mask.itest.pl
@@ -0,0 +1,93 @@
+#! /usr/bin/perl
+
+# Integrated test of esl-mask miniapp.
+#
+# Usage:     ./esl-mask.itest.pl <esl-mask binary> <tmpfile prefix>
+# Example:   ./esl-mask.itest.pl ./esl-mask        foo
+#
+# SRE, Sun Nov  1 09:26:45 2009 [Casa de Gatos]
+# SVN $Id$
+
+$eslmask = shift;
+$tmppfx  = shift;
+
+if (! -x "$eslmask") { die "FAIL: didn't find esl-mask binary $eslmask"; }
+
+open(SQFILE, ">$tmppfx.1") || die "FAIL: couldn't open $tmppfx.1 for writing seqfile";
+print SQFILE << "EOF";
+>seq1
+aaAAAAAAAABBBBBBBBbbCCCCCCCCcc
+>seq2
+ddDDD
+EEEee
+FFFff
+EOF
+close SQFILE;
+
+open(MASKFILE, ">$tmppfx.2") || die "FAIL: couldn't open $tmppfx.2 for writing maskfile";
+print MASKFILE << "EOF";
+seq1  11  20
+seq2   6  10
+EOF
+close MASKFILE;
+
+$output = `$eslmask -h`;
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+if ($output !~ /Usage: esl-mask/)                { die "FAIL: help output not right"; }
+
+$output = `$eslmask $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+if ($output !~ /aaAAAAAAAAXXXXXXXXXXCCCCCCCCcc/) { die "FAIL: seq masked incorrectly"; }
+if ($output !~ /ddDDDXXXXXFFFff/)                { die "FAIL: seq masked incorrectly"; }
+
+$output = `$eslmask -r $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+if ($output !~ /XXXXXXXXXXBBBBBBBBbbXXXXXXXXXX/) { die "FAIL: seq masked incorrectly"; }
+if ($output !~ /XXXXXEEEeeXXXXX/)                { die "FAIL: seq masked incorrectly"; }
+
+system("$eslmask -o $tmppfx.out $tmppfx.1 $tmppfx.2 2>&1");
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+$output = `cat $tmppfx.out`;
+if ($output !~ /aaAAAAAAAAXXXXXXXXXXCCCCCCCCcc/) { die "FAIL: seq masked incorrectly"; }
+if ($output !~ /ddDDDXXXXXFFFff/)                { die "FAIL: seq masked incorrectly"; }
+
+$output = `$eslmask -l $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+if ($output !~ /AAAAAAAAAAbbbbbbbbbbCCCCCCCCCC/) { die "FAIL: seq masked incorrectly"; }
+if ($output !~ /DDDDDeeeeeFFFFF/)                { die "FAIL: seq masked incorrectly"; }
+
+$output = `$eslmask -lr $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+if ($output !~ /aaaaaaaaaaBBBBBBBBBBcccccccccc/) { die "FAIL: seq masked incorrectly"; }
+if ($output !~ /dddddEEEEEfffff/)                { die "FAIL: seq masked incorrectly"; }
+
+$output = `$eslmask -m N $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+if ($output !~ /aaAAAAAAAANNNNNNNNNNCCCCCCCCcc/) { die "FAIL: seq masked incorrectly"; }
+if ($output !~ /ddDDDNNNNNFFFff/)                { die "FAIL: seq masked incorrectly"; }
+
+$output = `$eslmask -x 2 $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+if ($output !~ /aaAAAAAAXXXXXXXXXXXXXXCCCCCCcc/) { die "FAIL: seq masked incorrectly"; }
+if ($output !~ /ddDXXXXXXXXXFff/)                { die "FAIL: seq masked incorrectly"; }
+
+$output = `$eslmask -x 7 $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+if ($output !~ /aaAXXXXXXXXXXXXXXXXXXXXXXXXCcc/) { die "FAIL: seq masked incorrectly"; }
+if ($output !~ /XXXXXXXXXXXXXXX/)                { die "FAIL: seq masked incorrectly"; }
+
+$output = `$eslmask -rx 2 $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+if ($output !~ /XXXXXXXXXXXXBBBBBBXXXXXXXXXXXX/) { die "FAIL: seq masked incorrectly"; }
+if ($output !~ /XXXXXXXEXXXXXXX/)                { die "FAIL: seq masked incorrectly"; }
+
+$output = `$eslmask -rx 7 $tmppfx.1 $tmppfx.2 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-mask failed unexpectedly"; }
+if ($output !~ /XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/) { die "FAIL: seq masked incorrectly"; }
+if ($output !~ /XXXXXXXXXXXXXXX/)                { die "FAIL: seq masked incorrectly"; }
+
+print "ok\n"; 
+unlink "$tmppfx.1";
+unlink "$tmppfx.2";
+unlink "$tmppfx.out";
+exit 0;
diff --git a/miniapps/esl-mask.man b/miniapps/esl-mask.man
new file mode 100644
index 0000000..34be425
--- /dev/null
+++ b/miniapps/esl-mask.man
@@ -0,0 +1,173 @@
+.TH "esl-mask" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps"
+
+.SH NAME
+.TP 
+esl-mask - mask sequence residues with X's (or other characters)
+
+.SH SYNOPSIS
+.B esl-mask
+.I [options]
+.I seqfile
+.I maskfile
+
+
+.SH DESCRIPTION
+
+.B esl-mask
+reads lines from 
+.I maskfile 
+that give start/end coordinates for
+regions in each sequence in 
+.I seqfile,
+masks these residues (changes
+them to X's), and outputs the masked sequence.
+
+The
+.I maskfile
+is a space-delimited file. Blank lines and lines that start with '#'
+(comments) are ignored. Each data line contains at least three
+fields:
+.I seqname,
+.I start,
+and
+.I end. 
+The 
+.I seqname 
+is the name of a sequence in the 
+.I seqfile,
+and 
+.I start
+and 
+.I end 
+are coordinates defining a region in that sequence.
+The coordinates are indexed <1..L> with respect to a
+sequence of length <L>.
+
+By default, the sequence names must appear in exactly the same order
+and number as the sequences in the
+.I seqfile. 
+This is easy to enforce, because the format of
+.I maskfile 
+is also legal as a list of names for 
+.B esl-sfetch, 
+so you can always fetch a temporary sequence file with 
+.B esl-sfetch 
+and pipe that to 
+.B esl-mask.
+(Alternatively, see the 
+.B -R
+option for fetching from an SSI-indexed
+.I seqfile.)
+
+The default is to mask the region indicated by 
+.I <start>..<end>.
+Alternatively, everything but this region can be masked;
+see the
+.B -r
+reverse masking option.
+
+The default is to mask residues by converting them to X's.
+Any other masking character can be chosen (see
+.B -m
+option),
+or alternatively, masked residues can be lowercased (see
+.B -l
+option).
+
+The
+.I seqfile
+can be in any sequence file format that Easel reads, such as FASTA
+format. The format will be autodetected. Alternatively, for increased reliability,
+you can specify the input format; see the
+.B --informat
+option.
+
+
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+.TP
+.B -l
+Lowercase; mask by converting masked characters to lower case and
+unmasked characters to upper case.
+
+.TP
+.BI -m " <c>"
+Mask by converting masked residues to 
+.I <c>
+instead of the default X.
+
+.TP
+.BI -o  " <f>"
+Send output to file
+.I <f>
+instead of stdout.
+
+.TP
+.B -r
+Reverse mask; mask everything outside the region
+.I start..end, 
+as opposed to the default of masking that region.
+
+.TP
+.B -R
+Random access; 
+fetch sequences from 
+.I <seqfile>
+rather than requiring that sequence names in
+.I <maskfile>
+and
+.I <seqfile>
+come in exactly the same order and number.  The
+.I <seqfile> must be SSI indexed (see
+.B esl-sfetch --index.)
+
+.TP
+.BI -x " <n>"
+Extend all masked regions by up to <n> residues on each side. 
+For normal masking, this means masking
+.I <start>-<n>..<end>+<n>. 
+For reverse masking, this means masking
+.I 1..<start>-1+<n>
+and
+.I <end>+1-<n>..L
+in a srquence of length L.
+
+
+.TP
+.BI --informat " <s>"
+Specify that the sequence file is in format 
+.I <s>,
+rather than allowing the program to autodetect
+the file format. 
+
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/miniapps/esl-reformat.c b/miniapps/esl-reformat.c
new file mode 100644
index 0000000..8e81b5d
--- /dev/null
+++ b/miniapps/esl-reformat.c
@@ -0,0 +1,948 @@
+/* Convert between sequence file formats
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_mem.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_wuss.h"
+
+static char banner[] = "convert between sequence file formats";
+
+static char usage[] = "[-options] <format> <seqfile>\n\
+  Output format choices: Unaligned      Aligned    \n\
+                         -----------    -------    \n\
+                         fasta          a2m        \n\
+                         hmmpgmd        afa        \n\
+                                        clustal    \n\
+                                        clustallike\n\
+                                        pfam       \n\
+                                        phylip     \n\
+                                        phylips    \n\
+                                        psiblast   \n\
+                                        selex      \n\
+                                        stockholm  \n\
+\n";
+
+#define INCOMPATWITHSMALLOPT "--mingap,--nogap,--ignore,--acceptx"
+
+static ESL_OPTIONS options[] = {
+   /* name          type        default env   range togs  reqs        incompat                     help                                      docgroup */
+  { "-d",         eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "-r",                  "convert to DNA alphabet (U->T)",                     0 },
+  { "-h",         eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       NULL,                  "help; print brief info on version and usage",        0 },
+  { "-l",         eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "-u",                  "convert to lower case",                              0 },
+  { "-n",         eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "-x",                  "remove DNA IUPAC codes; convert ambig chars to N",   0 },
+  { "-o",         eslARG_STRING,  NULL, NULL, NULL, NULL, NULL,       NULL,                  "send output to file <f>, not stdout",                0 },
+  { "-r",         eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "-d",                  "convert to RNA alphabet (T->U)",                     0 }, 
+  { "-u",         eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "-l",                  "convert to upper case",                              0 },
+  { "-x",         eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "-n",                  "convert non-IUPAC chars (e.g. X) in DNA to N",       0 },
+  { "--gapsym",   eslARG_STRING,  NULL, NULL, NULL, NULL, NULL,       "--mingap,--nogap",    "convert all gaps to character <s>",                  0 },
+  { "--informat", eslARG_STRING,  NULL, NULL, NULL, NULL, NULL,       NULL,                  "input sequence file is in format <s>",               0 },
+  { "--mingap",   eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "--nogap",             "remove columns containing all gaps (seqfile=MSA)",   0 },
+  { "--keeprf",   eslARG_NONE,   FALSE, NULL, NULL, NULL, "--mingap", NULL,                  "with --mingap, keep all nongap #=GC RF columns",     0 },
+  { "--nogap",    eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "--mingap,--gapsym",   "remove columns containing any gaps (seqfile=MSA)",   0 },
+  { "--wussify",  eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "--dewuss,--fullwuss", "convert old RNA structure markup lines to WUSS",     0 },
+  { "--dewuss",   eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "--wussify,--fullwuss","convert WUSS RNA structure markup to old format",    0 },
+  { "--fullwuss", eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       "--wussify,--dewuss",  "convert simple WUSS notation to full (output) WUSS", 0 },
+  { "--ignore",   eslARG_STRING, FALSE, NULL, NULL, NULL, NULL,       NULL,                  "ignore input seq characters listed in string <s>",   0 },
+  { "--acceptx",  eslARG_STRING, FALSE, NULL, NULL, NULL, NULL,       NULL,                  "accept input seq chars in string <s> as X",          0 },
+  { "--rename",   eslARG_STRING, FALSE, NULL, NULL, NULL, NULL,       NULL,                  "rename and number each sequence <s>.<n>",            0 },
+  { "--replace",  eslARG_STRING, FALSE, NULL, NULL, NULL, NULL,       NULL,                  "<s> = <s1>:<s2> replace characters in <s1> with those in <s2>", 0},
+  { "--small",    eslARG_NONE,   FALSE, NULL, NULL, NULL, NULL,       INCOMPATWITHSMALLOPT,  "use minimal RAM, input must be pfam, output must be afa or pfam",0 },
+  { "--id_map",   eslARG_STRING, FALSE, NULL, NULL, NULL, NULL,       NULL,                  "if format is hmmpgmd, put the id map into file <s>", 0 },
+  { 0,0,0,0,0,0,0,0 },
+};
+
+static void symconvert(char *s, char *oldsyms, char *newsyms);
+static void regurgitate_pfam_as_afa(ESL_MSAFILE *afp, FILE *ofp, char *alifile, char *gapsym, int force_lower, int force_upper, 
+				    int force_rna, int force_dna, int iupac_to_n, int x_is_bad, char *rename, char *rfrom, 
+				    char *rto, int *ret_reached_eof);
+static int  regurgitate_pfam_as_pfam(ESL_MSAFILE *afp, FILE *ofp, char *gapsym, int force_lower, int force_upper, int force_rna, 
+				     int force_dna, int iupac_to_n, int x_is_bad, int wussify, int dewuss, int fullwuss, 
+				     char *rfrom, char *rto);
+static int  parse_replace_string(const char *rstring, char **ret_from, char **ret_to);
+  
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS *go;	                                /* application configuration               */
+  char        *infile;                                  /* name of input sequence file             */
+  int          infmt      = eslSQFILE_UNKNOWN;		/* input format as a code; eslSQFILE_FASTA */
+  int          outfmt     = eslSQFILE_UNKNOWN;		/* output format as a code                 */
+  int          status;		                        /* return code from an Easel call          */
+  FILE        *ofp;		                        /* output stream                           */
+
+
+  char  *outfile;		/* output file, or NULL                      */
+  int    force_rna;		/* TRUE to force RNA alphabet                */
+  int    force_dna;		/* TRUE to force DNA alphabet                */
+  int    force_lower;		/* TRUE to force lower case                  */
+  int    force_upper;		/* TRUE to force upper case                  */
+  int    iupac_to_n;            /* TRUE to convert ambiguities all to N's    */
+  int    x_is_bad;		/* TRUE to convert X to N                    */
+  int    do_mingap;		/* TRUE to remove cols containing all gaps   */
+  int    do_nogap;		/* TRUE to remove cols containing any gaps   */
+  char  *gapsym;		/* NULL if unset; else, char for gaps        */
+  int    wussify;		/* TRUE to convert old KH SS markup to WUSS  */
+  int    dewuss;		/* TRUE to convert WUSS back to old KH       */
+  int    fullwuss;		/* TRUE to convert simple WUSS to full WUSS  */
+  char  *rename; 		/* if non-NULL rename seqs to <s>.<n>        */
+  int    do_small;		/* TRUE to operate in small memory mode      */
+  int    do_fixbps;		/* TRUE to assume SS/SS_cons are for WUSS RNA*/
+  char  *rstring;               /* <s> from --replace <s>                    */
+  char  *rfrom, *rto;           /* <s1> and <s2> from --replace <s>=<s1>:<s2>*/
+  int    reached_eof;           /* reached EOF? used only in small mem mode  */
+  int    idx;                   /* counter over sequences                    */
+  int    nali;                  /* number of alignments read                 */
+  char   errbuf[eslERRBUFSIZE]; /* for error messages                        */
+
+
+
+  /*****************************************************************
+   * Parse the command line
+   *****************************************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if (esl_opt_GetBoolean(go, "-h"))
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage);
+      puts("  where options are:\n");
+      esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0= group; 2 = indentation; 80=textwidth*/
+      exit(0);
+    }
+
+  if (esl_opt_ArgNumber(go) != 2) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  outfmt = esl_sqio_EncodeFormat(esl_opt_GetArg(go, 1));
+  if (outfmt == eslSQFILE_UNKNOWN) 
+    esl_fatal("%s is not a recognized output seqfile format\n", esl_opt_GetArg(go, 1));
+
+  infile = esl_opt_GetArg(go, 2);
+
+  if (esl_opt_IsOn(go, "--informat") && 
+      (infmt = esl_sqio_EncodeFormat(esl_opt_GetString( go, "--informat"))) == eslSQFILE_UNKNOWN)
+    esl_fatal("%s is not a recognized input seqfile format\n", esl_opt_GetString(go, "--informat"));
+
+  force_dna   = esl_opt_GetBoolean(go, "-d");
+  force_lower = esl_opt_GetBoolean(go, "-l");
+  iupac_to_n  = esl_opt_GetBoolean(go, "-n");
+  outfile     = esl_opt_GetString (go, "-o");
+  force_rna   = esl_opt_GetBoolean(go, "-r");
+  force_upper = esl_opt_GetBoolean(go, "-u");
+  x_is_bad    = esl_opt_GetBoolean(go, "-x");
+  gapsym      = esl_opt_GetString( go, "--gapsym");
+  do_mingap   = esl_opt_GetBoolean(go, "--mingap");
+  do_nogap    = esl_opt_GetBoolean(go, "--nogap");
+  wussify     = esl_opt_GetBoolean(go, "--wussify");
+  dewuss      = esl_opt_GetBoolean(go, "--dewuss");
+  fullwuss    = esl_opt_GetBoolean(go, "--fullwuss");
+  rename      = esl_opt_GetString (go, "--rename");
+  do_small    = esl_opt_GetBoolean(go, "--small");
+  rstring     = esl_opt_GetString( go, "--replace");
+  do_fixbps   = (force_rna || force_dna || wussify || dewuss || fullwuss) ? TRUE : FALSE;
+
+  /* if --small, make sure infmt == pfam and (outfmt == afa || outfmt == pfam) */
+  if(do_small && (infmt != eslMSAFILE_PFAM || (outfmt != eslMSAFILE_AFA && outfmt != eslMSAFILE_PFAM)))  
+    esl_fatal("--small requires '--informat pfam' and output format of either 'afa' or 'pfam'");
+
+  if (gapsym != NULL && strlen(gapsym) != 1)
+    esl_fatal("Argument to --gapsym must be a single character.");
+  
+  if (outfile == NULL) ofp = stdout;
+  else if ((ofp = fopen(outfile, "w")) == NULL)
+    esl_fatal("Failed to open output file %s\n", outfile);
+
+  if (rstring == NULL) { 
+    rfrom = NULL;
+    rto   = NULL; 
+  }
+  else { 
+    if((status = parse_replace_string(rstring, &rfrom, &rto)) != eslOK) esl_fatal("Out of memory");
+  }
+
+  /***********************************************
+   * Reformat the file, printing to stdout.
+   ***********************************************/
+
+  /* If the output format is an alignment, then the input format
+   * has to be an alignment.
+   */
+  if (esl_sqio_IsAlignment(outfmt))
+    {
+      ESL_MSAFILE *afp;
+      ESL_MSA     *msa;
+
+      status = esl_msafile_Open(NULL, infile, NULL, infmt, NULL, &afp);
+      if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+
+      if ( esl_opt_IsOn(go, "--ignore"))  esl_fatal("The --ignore option is unimplemented for alignment reformatting.");
+      if ( esl_opt_IsOn(go, "--acceptx")) esl_fatal("The --acceptx option is unimplemented for alignment reformatting.");
+
+      nali = 0;
+
+      if (do_small) { 
+	if(infmt == eslMSAFILE_PFAM && outfmt == eslMSAFILE_AFA) {
+	  if (afp->bf->mode_is == eslBUFFER_STREAM) esl_fatal("--small with afa out format and stdin input is unimplemented.");
+	  regurgitate_pfam_as_afa(afp, ofp, infile, gapsym, force_lower, force_upper, force_rna, force_dna, iupac_to_n, x_is_bad, rename, rfrom, rto, &reached_eof);
+	  if(! reached_eof) esl_fatal("Input file contains >1 alignments, but afa formatted output file can only contain 1");
+	}
+	else if (infmt == eslMSAFILE_PFAM && outfmt == eslMSAFILE_PFAM) {
+	  if(rename != NULL) esl_fatal("--rename is unimplemented for combination of --small and output format pfam"); 
+	  while((status = regurgitate_pfam_as_pfam(afp, ofp, gapsym, force_lower, force_upper, force_rna, force_dna, iupac_to_n, x_is_bad, wussify, dewuss, fullwuss, rfrom, rto)) != eslEOF) { 
+	    if      (status == eslEFORMAT) esl_fatal("--small alignment file parse error:\n%s\n", afp->errmsg);
+	    else if (status == eslEINVAL)  esl_fatal("--small alignment file parse error:\n%s\n", afp->errmsg);
+	    else if (status != eslOK)      esl_fatal("--small alignment file read failed with error code %d\n", status);
+	  }
+	  esl_msafile_Close(afp);
+	}
+	else { /* do_small enabled, but neither (infmt==pfam && outfmt=afa) nor (infmt==pfam && outfmt==pfam) */
+	  esl_fatal("--small requires '--informat pfam' and output format of either 'afa' or 'pfam'");
+	}
+      }
+      else { /* normal mode, --small not enabled */
+	while ((status = esl_msafile_Read(afp, &msa)) != eslEOF)
+	  {
+	    if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+	    nali++;
+
+	    if (nali > 1 && ! esl_msafile_IsMultiRecord(outfmt))
+	      esl_fatal("Input file contains >1 alignments, but %s formatted output file can only contain 1", esl_msafile_DecodeFormat(outfmt));
+
+	    if (do_mingap)    if((status = esl_msa_MinimGapsText(msa, errbuf, "-_.~", esl_opt_GetBoolean(go, "--keeprf"), do_fixbps)) != eslOK) esl_fatal(errbuf);
+	    if (do_nogap)     if((status = esl_msa_NoGapsText   (msa, errbuf, "-_.~", do_fixbps))                                     != eslOK) esl_fatal(errbuf);
+	    if (rfrom)        esl_msa_SymConvert(msa, rfrom, rto);
+	    if (gapsym)       esl_msa_SymConvert(msa, "-_.", gapsym);
+	    if (force_lower)  esl_msa_SymConvert(msa,
+						 "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+						 "abcdefghijklmnopqrstuvwxyz");
+	    if (force_upper)  esl_msa_SymConvert(msa,
+						 "abcdefghijklmnopqrstuvwxyz",
+						 "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+	    if (force_rna)    esl_msa_SymConvert(msa, "Tt", "Uu");
+	    if (force_dna)    esl_msa_SymConvert(msa, "Uu", "Tt");
+	    if (iupac_to_n)   esl_msa_SymConvert(msa, 
+						 "RYMKSWHBVDrymkswhbvd",
+						 "NNNNNNNNNNnnnnnnnnnn");
+	    if (x_is_bad)     esl_msa_SymConvert(msa, "Xx", "Nn");
+	  
+	    if (rename)
+	      {
+		for (idx = 0; idx < msa->nseq; idx++)
+		  esl_msa_FormatSeqName(msa, idx, "%s.%d", rename, idx+1);
+	      }
+
+	    if (wussify)
+	      {
+		if (msa->ss_cons) esl_kh2wuss(msa->ss_cons, msa->ss_cons);
+		if (msa->ss)
+		  for (idx = 0; idx < msa->nseq; idx++)
+		    if (msa->ss[idx]) esl_kh2wuss(msa->ss[idx], msa->ss[idx]);
+	      }
+
+	    if (dewuss)
+	      {
+		if (msa->ss_cons) esl_wuss2kh(msa->ss_cons, msa->ss_cons);
+		if (msa->ss)
+		  for (idx = 0; idx < msa->nseq; idx++)
+		    if (msa->ss[idx]) esl_wuss2kh(msa->ss[idx], msa->ss[idx]);
+	      }
+
+	    if (fullwuss)
+	      {
+		if (msa->ss_cons != NULL)
+		  {
+		    status = esl_wuss_full(msa->ss_cons, msa->ss_cons);
+		    if (status == eslESYNTAX)  esl_fatal("Bad consensus SS: not in WUSS format\n");
+		    else if (status != eslOK)  esl_fatal("Conversion of SS_cons failed, code %d\n", status);
+		  }
+		if (msa->ss != NULL)
+		  for (idx = 0; idx < msa->nseq; idx++)
+		    if (msa->ss[idx] != NULL)
+		      {
+			status = esl_wuss_full(msa->ss[idx], msa->ss[idx]);
+			if (status == eslESYNTAX)  esl_fatal("Bad SS for %s: not in WUSS format\n", msa->sqname[idx]);
+			else if (status != eslOK)  esl_fatal("Conversion of SS for %s failed, code %d\n",  msa->sqname[idx], status);
+		      }
+	      }
+
+	    esl_msafile_Write(ofp, msa, outfmt);
+	    esl_msa_Destroy(msa);
+	  }
+      }
+      esl_msafile_Close(afp);
+    } /* end of alignment->alignment conversion */
+  else
+    { /* else: conversion to unaligned file formats */
+      ESL_SQFILE  *sqfp;	/* open input sequence file                */
+      ESL_SQ      *sq;		/* an input sequence                       */
+      char        *mapfile;  /* file name into which an hmmpgmd map file should be written */
+      FILE        *mapfp;    /* output stream for the map file                       */
+
+      status = esl_sqfile_Open(infile, infmt, NULL, &sqfp);
+      if (status == eslENOTFOUND)
+        esl_fatal("Couldn't open seqfile %s\n", infile);
+      else if (status == eslEFORMAT)
+        esl_fatal("Couldn't determine format of seqfile %s\n", infile);
+      else if (status == eslEINVAL)
+        esl_fatal("Can't autodetect format of stdin or .gz; use --informat\n");
+      else if (status != eslOK)
+        esl_fatal("Open of seqfile %s failed, code %d\n", infile, status);
+      
+      if ( esl_opt_IsOn(go, "--ignore"))  esl_sqio_Ignore  (sqfp, esl_opt_GetString(go, "--ignore"));
+      if ( esl_opt_IsOn(go, "--acceptx")) esl_sqio_AcceptAs(sqfp, esl_opt_GetString(go, "--acceptx"), 'X');
+
+      sq  = esl_sq_Create();
+
+      if ( outfmt == eslSQFILE_HMMPGMD ) {
+        int64_t res_cnt = 0;
+        char    timestamp[32];
+        time_t  date;
+
+        //will need to make two passes through the file, one to get sequence count, one to convert sequences
+        if (! esl_sqfile_IsRewindable(sqfp))
+          esl_fatal("Target sequence file %s isn't rewindable; can't produce a file in hmmpgmd format", infile);
+
+
+        //pick map file name, and open the file
+        if (esl_opt_IsUsed(go, "--id_map")) {
+          mapfile =  esl_opt_GetString( go, "--id_map");
+        } else {
+          esl_strdup(infile, -1, &mapfile);  // there will be an infile, because stdin was restricted above
+          esl_strcat(&mapfile, -1, ".map", 4);
+        }
+        if ((mapfp = fopen(mapfile, "w")) == NULL)
+            esl_fatal("Failed to open map output file %s\n", mapfile);
+
+        //get counts, and write out the map file
+        idx = 0;
+        while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) {
+          res_cnt += sq->n;
+          esl_sq_Reuse(sq);
+          idx++;
+        }
+
+        /* status should be eslEOF on normal end; if it isn't, deal w/ error */
+        if      (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n",
+                   sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+        else if (status != eslEOF)     esl_fatal("Unexpected error %d reading sequence file %s",
+                   status, sqfp->filename);
+
+        /* Print the first line of the hmmpgmd format, which contains database information.
+         * #<res_count> <seq_count> <db_count> <db_sequences_1> <db_sequences_before_removing_duplicates_1> <db_sequences_2> <db_sequences_before_removing_duplicates_2>  ... <date_stamp>
+         * It shoves all sequences into a single database, #1.
+         */
+        date = time(NULL);
+        ctime_r(&date, timestamp);
+        fprintf(mapfp, "%d\n", idx);
+        fprintf(ofp, "#%" PRId64 " %d %d %d %d %s", res_cnt, idx, 1, idx, idx, timestamp);
+
+        esl_sqfile_Position(sqfp, 0);
+      }
+
+
+      idx = 0;
+      while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+      {
+        if (rfrom!=NULL) symconvert(sq->seq, rfrom, rto);
+        if (force_lower) symconvert(sq->seq,
+                  "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+                  "abcdefghijklmnopqrstuvwxyz");
+        if (force_upper) symconvert(sq->seq,
+                  "abcdefghijklmnopqrstuvwxyz",
+                  "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+        if (force_rna)   symconvert(sq->seq, "Tt", "Uu");
+        if (force_dna)   symconvert(sq->seq, "Uu", "Tt");
+        if (iupac_to_n)  symconvert(sq->seq,
+                  "RYMKSWHBVDrymkswhbvd",
+                  "NNNNNNNNNNnnnnnnnnnn");
+        if (x_is_bad)    symconvert(sq->seq, "Xx", "Nn");
+
+        if (wussify && sq->ss != NULL) esl_kh2wuss(sq->ss, sq->ss);
+        if (dewuss  && sq->ss != NULL) esl_wuss2kh(sq->ss, sq->ss);
+
+        if (fullwuss && sq->ss != NULL)
+        {
+            status = esl_wuss_full(sq->ss, sq->ss);
+            if (status == eslESYNTAX)
+              esl_fatal("Bad SS for %s: not in WUSS format\n", sq->name);
+            else if (status != eslOK)
+              esl_fatal("Conversion of SS for %s failed, code %d\n",
+            sq->name, status);
+        }
+
+        if ( outfmt == eslSQFILE_HMMPGMD ) {
+          fprintf(mapfp, "%d %s %s\n", idx+1, sq->name?sq->name:"", sq->desc?sq->desc:"");
+          esl_sq_FormatName(sq, "%d 1", idx+1);
+          esl_sq_FormatDesc(sq, "");
+        } else {
+          if (rename) esl_sq_FormatName(sq, "%s.%d", rename, idx+1);
+        }
+        esl_sqio_Write(ofp, sq, outfmt, FALSE);
+        esl_sq_Reuse(sq);
+        idx++;
+      }
+      /* status should be eslEOF on normal end; if it isn't, deal w/ error */
+      if      (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n",
+					       sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+      else if (status != eslEOF)     esl_fatal("Unexpected error %d reading sequence file %s",
+					       status, sqfp->filename);
+      
+      if ( outfmt == eslSQFILE_HMMPGMD )
+        fclose(mapfp);
+
+      esl_sq_Destroy(sq);
+      esl_sqfile_Close(sqfp);
+    } /* end of unaligned seq conversion */
+
+  if (ofp != stdout) fclose(ofp);
+  esl_getopts_Destroy(go);
+
+  if(rfrom != NULL)   free(rfrom);
+  if(rto != NULL)     free(rto);
+
+  exit(0);
+}
+
+/* symconvert()
+ * 
+ * single seq version of esl_msa_SymConvert(); see
+ * documentation there.
+ * 
+ * no reason yet to include in sqio API, but that may change.
+ * 
+ * inefficient to use this for upper/lower case conversion,
+ * prob by an order of magnitude (because of the strchr() call,
+ * which could be replaced by a range test), but I bet it's
+ * unnoticeable.
+ */
+static void
+symconvert(char *s, char *oldsyms, char *newsyms)
+{
+  int   pos;
+  char *sptr;
+  int   special;
+
+  special = (strlen(newsyms) == 1 ? TRUE : FALSE);
+
+  for (pos = 0; s[pos] != '\0'; pos++)
+    if ((sptr = strchr(oldsyms, s[pos])) != NULL)
+      s[pos] = (special ? *newsyms : newsyms[sptr-oldsyms]);
+}
+
+
+
+/* regurgitate_pfam_as_afa()
+ * 
+ * Given an open Pfam formatted msafile, read the next alignment and 
+ * regurgitate it in aligned FASTA (AFA) format without storing
+ * it in a esl_msa data structure.
+ * 
+ * We need to do two passes through the file because in Pfam
+ * sequence accessions (#=GS <seqname> AC) and sequence descriptions
+ * (#=GS <seqname> DE) appear altogether before any aligned sequence
+ * data, while in AFA they appear on the same line as the sequence
+ * name (accession, then description).
+ *
+ * Example: 
+ * # STOCKHOLM 1.0
+ * #=GS tRNA1 AC RF00005-1
+ * #=GS tRNA2 AC RF00005-2
+ * #=GS tRNA1 DE first tRNA
+ * #=GS tRNA2 DE second tRNA
+ * 
+ * tRNA1 GCGGAUUUAGCUCAGUUGGG.AGAGCGCCAGACUGAAGAUCUGGAGGUCCUGUGUUCGAUCCACAGAAUUCGCA
+ * tRNA2 UCCGAUAUAGUGUAAC.GGCUAUCACAUCACGCUUUCACCGUGGAGA.CCGGGGUUCGACUCCCCGUAUCGGAG
+ * 
+ * converts to AFA:
+ * >tRNA1 RF00005-1 first tRNA
+ * GCGGAUUUAGCUCAGUUGGG.AGAGCGCCAGACUGAAGAUCUGGAGGUCCUGUGUUCGAU
+ * CCACAGAAUUCGCA
+ * >tRNA2 RF00005-2 second tRNA
+ * UCCGAUAUAGUGUAAC.GGCUAUCACAUCACGCUUUCACCGUGGAGA.CCGGGGUUCGAC
+ * UCCCCGUAUCGGAG
+ * 
+ * In the first pass, output the sequence names and accessions we find
+ * as '#=GS <seqname> AC' lines in the Pfam alignment to an accession
+ * tmpfile, and output sequence names and descriptions we find as 
+ * as '#=GS <seqname> DE' lines in the Pfam alignment to a description
+ * tmpfile.
+ *
+ * In the second pass, rewind all (up to 3) files: <ac_tmpfile>,
+ * <de_tmpfile> and the Pfam alignment file and start reading them
+ * again.  As we're reading them, output the accessions, descriptions
+ * and aligned sequence data in the proper order to an aligned FASTA
+ * file.
+ * 
+ * Set <ret_reached_eof> as TRUE if the alignment read and reformatted
+ * appears to be the only one remaining in afp.  Set <ret_reached_eof>
+ * as FALSE if afp appears to include at least one more alignment.
+ * 
+ * Returns void. Dies upon any input error.
+ */
+static void
+regurgitate_pfam_as_afa(ESL_MSAFILE *afp, FILE *ofp, char *alifile, char *gapsym, int force_lower, int force_upper, int force_rna, int force_dna, int iupac_to_n, int x_is_bad, char *rename, char *rfrom, char *rto, int *ret_reached_eof)
+{
+  char      *p = NULL;
+  esl_pos_t  n = 0;
+  esl_pos_t  gslen, seqnamelen, taglen;
+  char      *seqname = NULL;
+  char      *first_seqname = NULL;
+  char      *tag = NULL;
+  char      *gs = NULL;
+  int        nseq_read = 0;
+  int        reached_eof;
+  /* variables related to reading accessions */
+  char       ac_tmpfile[16] = "esltmpXXXXXX";
+  FILE      *ac_fp = NULL; /* file ptr for accession tmpfile */
+  char      *ac_buf = NULL;	/* buffer for line input w/ sre_fgets()      */
+  int        ac_buflen = 0;	/* current allocated length for buf          */
+  char      *ac_s = NULL;	        
+  char      *ac_seqname = NULL;
+  char      *ac = NULL;
+  int        have_ac = FALSE;
+  /* variables related to reading descriptions */
+  char       de_tmpfile[16] = "esltmpXXXXXX";
+  FILE      *de_fp = NULL; /* file ptr for description tmpfile */
+  char      *de_buf = NULL;	/* buffer for line input w/ sre_fgets()      */
+  int        de_buflen = 0;	/* current allocated length for buf          */
+  char      *de_s = NULL;	        
+  char      *de_seqname = NULL;
+  char      *de = NULL;
+  int        have_de = FALSE;
+  /* variables related to printing out sequences */
+  char      *aseq = NULL;
+  esl_pos_t  aseqlen = 0;
+  int64_t    apos;
+  char       aseqbuf[61];
+  int        cpl = 60;	     /* number of residues per afa seq line */
+  int        acpl;       /* actual number of character per line */
+  int        status;
+  
+  afp->errmsg[0] = '\0';
+   
+  /**************************************************************************************************
+   * First pass, go through each line of the Pfam file and output all GS DE and AC annotation to tmpfiles
+   **************************************************************************************************/
+
+  /* Check the magic Stockholm header line, allowing blank lines */
+  do { 
+    status = esl_msafile_GetLine(afp, &p, &n);
+    if      (status == eslEOF) return; 
+    else if (status != eslOK)  esl_fatal("small mem parse error. problem reading line %d of msafile", (int) afp->linenumber);
+  } while (esl_memspn(afp->line, afp->n, " \t") == afp->n  ||                 /* skip blank lines             */
+	       (esl_memstrpfx(afp->line, afp->n, "#")                         /* and skip comment lines       */
+	   && ! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM")));            /* but stop on Stockholm header */
+
+  if (! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM 1.")) esl_fatal("small mem parse failed (line %d): missing \"# STOCKHOLM\" header", (int) afp->linenumber);
+
+  while ((status = esl_msafile_GetLine(afp, &p, &n)) == eslOK) 
+    {
+      while (n && ( *p == ' ' || *p == '\t')) { p++; n--; } /* skip leading whitespace */
+
+      if (esl_memstrpfx(p, n, "#=GS"))
+	{ /* only lines we need to check are AC and DE lines, we don't even check other lines for validity */
+	  if (esl_memtok(&p, &n, " \t", &gs,      &gslen)      != eslOK) esl_fatal("small mem parse failed (line %d) in a way that can't happen",                      (int) afp->linenumber);
+	  if (esl_memtok(&p, &n, " \t", &seqname, &seqnamelen) != eslOK) esl_fatal("small mem parse failed (line %d): #=GS line missing <seqname>, <tag>, annotation", (int) afp->linenumber);
+	  if (esl_memtok(&p, &n, " \t", &tag,     &taglen)     != eslOK) esl_fatal("small mem parse failed (line %d): #=GS line missing <tag>, annotation",            (int) afp->linenumber);
+	  if (! esl_memstrcmp(gs, gslen, "#=GS"))                        esl_fatal("small mem parse failed (line %d): faux #=GS line?",                                (int) afp->linenumber);
+
+	  if (esl_memstrcmp(tag, taglen, "AC"))
+	    { 
+	      if (! ac_fp && esl_tmpfile(ac_tmpfile, &ac_fp) != eslOK) esl_fatal("small mem parse failed, unable to open accession tmpfile");
+	      fprintf(ac_fp, "%.*s %.*s\n", (int) seqnamelen, seqname, (int) n, p);  // cppcheck thinks ac_fp is a "possible null pointer deference"; I think it's wrong.
+	    }
+	  if (esl_memstrcmp(tag, taglen, "DE"))
+	    { 
+	      if (! de_fp && esl_tmpfile(de_tmpfile, &de_fp) != eslOK) esl_fatal("small mem parse failed, unable to open description tmpfile");
+	      fprintf(de_fp, "%.*s %.*s\n", (int) seqnamelen, seqname, (int) n, p); // cppcheck thinks de_fp is a "possible null pointer deference"; I think it's wrong.
+	    }
+	}
+      else if (esl_memstrpfx(p, n, "//")) break;
+    }
+  if      (status == eslEOF) esl_fatal("small mem parse failed (line %d): missing // terminator", (int) afp->linenumber);
+  else if (status != eslOK)  esl_fatal("small mem parse failed (line %d) with code %d", (int) afp->linenumber, status);
+  
+  /* The regurgitate_*() functions are limited, and only deal with single-record Pfam files. 
+   * If there appears to be more data in the file, drop the reached_eof flag.
+   */
+  while ((status = esl_msafile_GetLine(afp, &p, &n)) == eslOK) 
+    {
+      while (n && ( *p == ' ' || *p == '\t')) { p++; n--; } /* skip leading whitespace */
+      if    (esl_memstrpfx(p, n, "# STOCKHOLM 1.")) break;
+      if    (n && ! esl_memstrpfx(p, n, "#"))       esl_fatal("small mem parse failed (line %d): unexpected data", (int) afp->linenumber);
+    }
+  if      (status == eslOK)  reached_eof = FALSE;
+  else if (status == eslEOF) reached_eof = TRUE;
+  else esl_fatal("--small parse error. problem reading line %d of msafile", (int) afp->linenumber);
+
+  /*****************************************************************
+   * Pass 1 complete; rewind (close/reopen) all files
+   *****************************************************************/
+
+  esl_msafile_Close(afp);
+  if ((status = esl_msafile_Open(NULL, alifile, NULL, eslMSAFILE_PFAM, NULL, &afp)) != eslOK)
+    esl_fatal("--small, second pass, unable to open file %s for reading", alifile);
+  
+  if (ac_fp) { /* open the tmpfile with the seq accessions */
+    rewind(ac_fp);
+    if((status = esl_fgets(&(ac_buf), &(ac_buflen), ac_fp)) != eslOK) esl_fatal("--small accession tmpfile parse failed");
+    ac_s = ac_buf;
+    if (esl_strtok_adv(&ac_s, " \t\n\r", &ac_seqname, NULL, NULL) != eslOK) esl_fatal("--small accession tmpfile parse failed");
+    if (esl_strtok_adv(&ac_s, "\n\r",    &ac,         NULL, NULL) != eslOK) esl_fatal("--small accession tmpfile parse failed");
+  }
+  if (de_fp) { /* open the tmpfile with the seq descriptions */
+    rewind(de_fp);
+    if((status = esl_fgets(&(de_buf), &(de_buflen), de_fp)) != eslOK) esl_fatal("--small description tmpfile parse failed");
+    de_s = de_buf;
+    if (esl_strtok_adv(&de_s, " \t\n\r", &de_seqname, NULL, NULL) != eslOK) esl_fatal("--small description tmpfile parse failed");
+    if (esl_strtok_adv(&de_s, "\n\r",    &de,         NULL, NULL) != eslOK) esl_fatal("--small description tmpfile parse failed");
+  }
+
+  /******************************************************************************************
+   * Pass 2, step through files, outputting appropriately
+   ******************************************************************************************/
+
+  do { 
+    status = esl_msafile_GetLine(afp, &p, &n);
+    if      (status == eslEOF) return; 
+    else if (status != eslOK)  esl_fatal("small mem parse pass 2 error. problem reading line %d of msafile", (int) afp->linenumber);
+  } while (esl_memspn(afp->line, afp->n, " \t") == afp->n  ||                 /* skip blank lines             */
+	       (esl_memstrpfx(afp->line, afp->n, "#")                         /* and skip comment lines       */
+	   && ! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM")));            /* but stop on Stockholm header */
+
+  if (! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM 1.")) esl_fatal("small mem parse pass 2 failed (line %d): missing \"# STOCKHOLM\" header", (int) afp->linenumber);
+
+  while ((status = esl_msafile_GetLine(afp, &p, &n)) == eslOK) 
+    {
+      while (n && ( *p == ' ' || *p == '\t')) { p++; n--; } /* skip leading whitespace */
+
+      if      (!n || *p == '#')           continue;	    /* skip blank lines, comments */
+      else if (esl_memstrpfx(p, n, "//")) break;	    /* end of alignment: end of record */
+      else 
+	{ /* sequence line. parse line into temporary strings */
+	  if (esl_memtok(&p, &n, " \t", &seqname, &seqnamelen) != eslOK) esl_fatal("small mem parse pass 2 failed (line %d): no seq name", (int) afp->linenumber);
+	  if (esl_memtok(&p, &n, " \t", &aseq,    &aseqlen)    != eslOK) esl_fatal("small mem parse pass 2 failed (line %d): no aseq",     (int) afp->linenumber);
+
+	  /* make sure we haven't just read a second line of the first sequence in file (we must be in Pfam 1 line/seq file) */
+	  if (nseq_read == 0) { if ((status = esl_memstrdup(seqname, seqnamelen, &(first_seqname))) != eslOK) esl_fatal("small mem parse failed: unable to copy seqname"); }
+	  else if (esl_memstrcmp(seqname, seqnamelen, first_seqname)) esl_fatal("--small parse pass 2 failed (line %d): two seqs named %s. Alignment appears to be in interleaved Stockholm (not Pfam) format.", (int) afp->linenumber, seqname); 
+	  nseq_read++;
+
+	  /* determine if we have an accession and/or description for this sequence */
+	  have_de = have_ac = FALSE;
+	  if (ac_seqname && (esl_memstrcmp(seqname, seqnamelen, ac_seqname))) have_ac = TRUE;
+	  if (de_seqname && (esl_memstrcmp(seqname, seqnamelen, de_seqname))) have_de = TRUE;
+
+	  if (rename) fprintf(ofp, ">%s.%d%s%s%s%s\n",          rename, nseq_read, (have_ac ? " " : "") , (have_ac ? ac : ""), (have_de ? " " : "") , (have_de ? de : "")); 
+	  else        fprintf(ofp, ">%.*s%s%s%s%s\n", (int) seqnamelen, seqname,   (have_ac ? " " : "") , (have_ac ? ac : ""), (have_de ? " " : "") , (have_de ? de : "")); 
+
+	  /* load next ac, de */
+	  if (have_ac) {
+	    status = esl_fgets(&(ac_buf), &(ac_buflen), ac_fp);
+	    if      (status == eslEOF) ac_seqname = NULL;
+	    else if (status == eslOK) { 
+	      ac_s = ac_buf;
+	      if (esl_strtok_adv(&ac_s, " \t\n\r", &ac_seqname, NULL, NULL) != eslOK) esl_fatal("--small accession tmpfile parse failed");
+	      if (esl_strtok_adv(&ac_s, "\n\r",    &ac,         NULL, NULL) != eslOK) esl_fatal("--small accession tmpfile parse failed");
+	    }
+	  }
+	  if (have_de) {
+	    status = esl_fgets(&(de_buf), &(de_buflen), de_fp);
+	    if(status == eslEOF) de_seqname = NULL;
+	    else if (status == eslOK) { 
+	      de_s = de_buf;
+	      if (esl_strtok_adv(&de_s, " \t\n\r", &de_seqname, NULL, NULL) != eslOK) esl_fatal("--small description tmpfile parse failed");
+	      if (esl_strtok_adv(&de_s, "\n\r",    &de,         NULL, NULL) != eslOK) esl_fatal("--small description tmpfile parse failed");
+	    }
+	  }
+
+	  /* now print sequence, after converting symbols as nec */
+	  /* remember, aseq itself is part of an ESL_BUFFER and you
+	     can't write to it, so symconverts have to be on the
+	     copy */
+	  for (apos = 0; apos < aseqlen; apos += cpl)
+	    {
+	      acpl = (aseqlen - apos > cpl ? cpl : aseqlen - apos);
+	      strncpy(aseqbuf, aseq + apos, acpl);
+	      aseqbuf[acpl] = '\0';
+
+	      if (rfrom)       symconvert(aseqbuf, rfrom, rto);
+	      if (gapsym)      symconvert(aseqbuf, "-_.", gapsym);
+	      if (force_lower) symconvert(aseqbuf,
+					  "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+					  "abcdefghijklmnopqrstuvwxyz");
+	      if (force_upper) symconvert(aseqbuf,
+					  "abcdefghijklmnopqrstuvwxyz",
+					  "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+	      if (force_rna)   symconvert(aseqbuf, "Tt", "Uu");
+	      if (force_dna)   symconvert(aseqbuf, "Uu", "Tt");
+	      if (iupac_to_n)  symconvert(aseqbuf, 
+					  "RYMKSWHBVDrymkswhbvd",
+					  "NNNNNNNNNNnnnnnnnnnn");
+	      if (x_is_bad)    symconvert(aseqbuf,   "Xx", "Nn");
+
+	      fprintf(ofp, "%s\n", aseqbuf);	      
+	    }
+	}
+    }
+  /* If we saw a normal // end, we would've successfully read a line,
+   * so when we get here, status (from the line read) should be eslOK.
+   */ 
+  if (status != eslOK) esl_fatal("--small parse pass 2 failed (line %d): didn't find // at end of alignment", (int) afp->linenumber);
+  if (ac_seqname)      esl_fatal("--small parse pass 2 failed, sequence %s with #=GS AC line does not exist in alignment or is in different order.", ac_seqname);
+  if (de_seqname)      esl_fatal("--small parse pass 2 failed, sequence %s with #=GS DE line does not exist in alignment or is in different order.", de_seqname);
+
+  if (ac_fp) fclose(ac_fp);
+  if (de_fp) fclose(de_fp);
+  esl_msafile_Close(afp);
+
+  if (first_seqname) free(first_seqname);
+  if (ac_buf)        free(ac_buf);
+  if (de_buf)        free(de_buf);
+
+  *ret_reached_eof = reached_eof;
+  return;
+}
+
+/* regurgitate_pfam_as_pfam()
+ * 
+ * Given an open Pfam formatted msafile, read the next alignment and
+ * regurgitate it, after modifying it as necessary (change dna to rna,
+ * wussify SS, etc) in Pfam format.
+ * 
+ * Returns <eslOK> on success. 
+ * Returns <eslEOF> if there are no more alignments in <afp>.
+ * Returns <eslEFORMAT> if parse fails because of a file format
+ * problem, in which case afp->errmsg is set to contain a formatted
+ * message that indicates the cause of the problem.
+ */
+static int
+regurgitate_pfam_as_pfam(ESL_MSAFILE *afp, FILE *ofp, char *gapsym, int force_lower, int force_upper, int force_rna, int force_dna, int iupac_to_n, int x_is_bad, int wussify, int dewuss, int fullwuss, char *rfrom, char *rto)
+{
+  char      *p;
+  esl_pos_t  n;
+  char      *first_seqname = NULL;
+  char      *gx      = NULL;
+  char      *seqname = NULL;
+  char      *tag     = NULL;
+  char      *text    = NULL;
+  esl_pos_t  gxlen, namelen, taglen, textlen;
+  int        nseq_read = 0;
+  int        parse_gc_and_gr;
+  int        flushpoint = 10000;
+  int        exp_alen = -1;
+  char      *buf      = NULL;
+  esl_pos_t  pos, pos2;
+  int        status;
+
+
+  parse_gc_and_gr = (wussify || dewuss || fullwuss) ? TRUE : FALSE; /* should we parse out GR/GC lines and check if they're SS lines? */
+  afp->errmsg[0] = '\0';
+   
+  /* Check the magic Stockholm header line.
+   * We have to skip blank lines here, else we perceive
+   * trailing blank lines in a file as a format error when
+   * reading in multi-record mode.
+   */
+  /* Check the magic Stockholm header line, allowing blank lines */
+  do { 
+    status = esl_msafile_GetLine(afp, &p, &n);
+    if      (status == eslEOF) return eslEOF; 
+    else if (status != eslOK)  esl_fatal("small mem parse error. problem reading line %d of msafile", (int) afp->linenumber);
+    fprintf(ofp, "%.*s\n", (int) afp->n, afp->line);
+  } while (esl_memspn(afp->line, afp->n, " \t") == afp->n  ||                 /* skip blank lines             */
+	       (esl_memstrpfx(afp->line, afp->n, "#")                         /* and skip comment lines       */
+	   && ! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM")));            /* but stop on Stockholm header */
+
+  if (! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM 1.")) esl_fatal("small mem parse failed (line %d): missing \"# STOCKHOLM\" header", (int) afp->linenumber);
+
+  /* Read the alignment file one line at a time.  */
+  while ((status = esl_msafile_GetLine(afp, &p, &n)) == eslOK) 
+    {
+      if ((int) afp->linenumber % flushpoint == 0) fflush(ofp);
+      while (n && ( *p == ' ' || *p == '\t')) { p++; n--; } /* skip leading whitespace */
+    
+      if      (!n)                          fprintf(ofp, "\n");
+      else if (esl_memstrpfx(p, n, "//")) { fprintf(ofp, "//\n"); break; } /* normal way out */
+      else if (*p == '#') 
+	{
+	  if (parse_gc_and_gr && esl_memstrpfx(p, n, "#=GC")) 
+	    {  	/* parse line into temporary strings */
+	      if (esl_memtok(&p, &n, " \t",  &gx,   &gxlen)   != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad #=GC line", (int) afp->linenumber);
+	      if (esl_memtok(&p, &n, " \t",  &tag,  &taglen)  != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad #=GC line", (int) afp->linenumber);
+	      if (esl_memtok(&p, &n,  " \t", &text, &textlen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad #=GC line", (int) afp->linenumber);
+	      pos = text - afp->line; /* pos: position of first aligned char on line; total width of annotation tag w/spaces */
+	
+	      /* verify alignment length */
+	      if      (exp_alen == -1)      exp_alen = textlen;
+	      else if (exp_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad #=GC line, len %d, expected %d", (int) afp->linenumber, (int) textlen, (int) exp_alen);
+	
+	      /* we need to make a writable string copy of the annotation, to edit it */
+	      ESL_REALLOC(buf, sizeof(char) * (textlen+1));
+	      esl_memstrcpy(text, textlen, buf);
+	     
+	      if (esl_memstrcmp(tag, taglen, "SS_cons")) 
+		{
+		  if      (wussify)  esl_kh2wuss(buf, buf);
+		  else if (dewuss)   esl_wuss2kh(buf, buf);
+		  else if (fullwuss) 
+		    { 
+		      status = esl_wuss_full(buf, buf);
+		      if      (status == eslESYNTAX) esl_fatal("Bad SS_cons line: not in WUSS format, alifile line: %d", (int) afp->linenumber);
+		      else if (status != eslOK)      esl_fatal("Conversion of SS_cons line failed, code %d, alifile line: %d", status, (int) afp->linenumber);
+		    }
+		}		  
+	      fprintf(ofp, "#=GC %.*s%*s%s\n", (int) taglen, tag, (int) (pos-taglen-5), "", buf);
+	    }
+	  else if (parse_gc_and_gr && esl_memstrpfx(p, n, "#=GR") == 0) 
+	    { 
+	      /* parse line into temporary strings */
+	      if (esl_memtok(&p, &n, " \t", &gx,      &gxlen)   != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad #=GR line", (int) afp->linenumber);
+	      if (esl_memtok(&p, &n, " \t", &seqname, &namelen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad #=GR line", (int) afp->linenumber);
+	      if (esl_memtok(&p, &n, " \t", &tag,     &taglen)  != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad #=GR line", (int) afp->linenumber);
+	      pos = tag   - afp->line;
+	      if (esl_memtok(&p, &n, " \t", &text,    &textlen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad #=GR line", (int) afp->linenumber);
+	      pos2 = text - afp->line;
+
+	      /* we need to make a writable string copy of the annotation, to edit it */
+	      ESL_REALLOC(buf, sizeof(char) * (textlen+1));
+	      esl_memstrcpy(text, textlen, buf);
+
+	      /* verify alignment length */
+	      if      (exp_alen == -1)      exp_alen = textlen;
+	      else if (exp_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad seq line, len %d, expected %d", (int) afp->linenumber, (int) textlen, (int) exp_alen);
+	
+	      if (esl_memstrcmp(tag, taglen, "SS") == 0) 
+		{
+		  if      (wussify)  esl_kh2wuss(buf, buf);
+		  else if (dewuss)   esl_wuss2kh(buf, buf);
+		  else if (fullwuss) { 
+		    status = esl_wuss_full(buf, buf);
+		    if      (status == eslESYNTAX) esl_fatal("Bad SS line: not in WUSS format, alifile line: %d", (int) afp->linenumber);
+		    else if (status != eslOK)      esl_fatal("Conversion of SS line failed, code %d, alifile line: %d", status, (int) afp->linenumber);
+		  }
+		}		  
+
+	      fprintf(ofp, "#=GR %.*s%*s%.*s%*s%s\n", (int) namelen, seqname, (int) (pos-namelen-5), "", (int) taglen, tag, (int) (pos2-pos-taglen), "", buf);
+	    }
+	  else { /* '#' prefixed line that is not #=GR (or it is #=GR and wussify,dewuss,fullwuss are all FALSE) */
+	    fprintf(ofp, "%.*s\n", (int) afp->n, afp->line); /* print the line */
+	  }
+	} /* end of 'if (*s == '#')' */ 
+      else 
+	{ /* sequence line */
+	  if (esl_memtok(&p, &n, " \t", &seqname, &namelen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad sequence line", (int) afp->linenumber);
+	  if (esl_memtok(&p, &n, " \t", &text,    &textlen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad sequence line", (int) afp->linenumber);
+	  pos = text - afp->line;
+
+	  /* verify alignment length */
+	  if     (exp_alen == -1)      exp_alen = textlen;
+	  else if(exp_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad seq line, len %d, expected %d", (int) afp->linenumber, (int) textlen, (int) exp_alen);
+      
+	  /* make sure we haven't just read a second line of the first sequence in file (we must be in Pfam 1 line/seq file) */
+	  if (nseq_read == 0) { if ((status = esl_memstrdup(seqname, namelen, &(first_seqname))) != eslOK) goto ERROR; }
+	  else if (esl_memstrcmp(seqname, namelen, first_seqname)) { ESL_XFAIL(eslEFORMAT, afp->errmsg, "parse failed (line %d): two seqs named %s. Alignment appears to be in Stockholm format. Reformat to Pfam with esl-reformat.", (int) afp->linenumber, seqname); }
+	  nseq_read++;
+      
+	  /* we need to make a writable string copy of the annotation, to edit it */
+	  ESL_REALLOC(buf, sizeof(char) * (textlen+1));
+	  esl_memstrcpy(text, textlen, buf);
+
+	  /* make adjustments as necessary */
+	  if (rfrom)       symconvert(buf, rfrom, rto);
+	  if (gapsym)      symconvert(buf, "-_.", gapsym);
+	  if (force_lower) symconvert(buf,
+				      "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+				      "abcdefghijklmnopqrstuvwxyz");
+	  if (force_upper) symconvert(buf,
+				      "abcdefghijklmnopqrstuvwxyz",
+				      "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+	  if (force_rna)   symconvert(buf, "Tt", "Uu");
+	  if (force_dna)   symconvert(buf, "Uu", "Tt");
+	  if (iupac_to_n)  symconvert(buf, 
+				      "RYMKSWHBVDrymkswhbvd",
+				      "NNNNNNNNNNnnnnnnnnnn");
+	  if (x_is_bad)    symconvert(buf,   "Xx", "Nn");
+	  /* print it out */
+	  fprintf(ofp, "%.*s%*s%s\n", (int) namelen, seqname, (int) (pos-namelen), "", buf);
+	}
+    }
+
+  /* If we saw a normal // end, we would've successfully read a line,
+   * so when we get here, status (from the line read) should be eslOK.
+   */ 
+  if (status != eslOK) esl_fatal("--small parse failed (line %d): didn't find // at end of alignment", (int) afp->linenumber);
+  if (first_seqname) free(first_seqname);
+  if (buf)           free(buf);
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+static int
+parse_replace_string(const char *rstring, char **ret_from, char **ret_to)
+{
+  int    status;
+  int    rlen, mid, i;
+  int    is_valid = FALSE;
+  char  *from = NULL;
+  char  *to   = NULL;
+
+  /* Note: we could use ESL_REGEXP but then multiple ':'s in rstring could cause problems */
+  rlen = strlen(rstring);
+  /* check validity of rstring: must be "<s1>:<s2>" with len(<s1>)==len(<s2>) */
+  if((rlen % 2) != 0) { /* odd num chars, good */
+    mid = rlen / 2;
+    if(rstring[mid] == ':') { /* middle character is ':', good */
+      ESL_ALLOC(from, sizeof(char) * (mid+1));
+      ESL_ALLOC(to,   sizeof(char) * (mid+1));
+      for(i = 0;     i < mid;  i++) from[i]       = rstring[i];
+      for(i = mid+1; i < rlen; i++) to[i-(mid+1)] = rstring[i];
+      from[mid] = '\0';
+      to[mid]   = '\0';
+      is_valid = TRUE;
+    }
+  }
+  if(! is_valid) esl_fatal("--replace takes arg of <s1>:<s2> with len(<s1>) == len(<s2>); %s not recognized", rstring);
+  *ret_from = from;
+  *ret_to   = to;
+
+  return eslOK;
+
+ ERROR: 
+  if(from != NULL) free(from);
+  if(to   != NULL) free(to);
+  return status;
+}
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
+
diff --git a/miniapps/esl-reformat.man b/miniapps/esl-reformat.man
new file mode 100644
index 0000000..d9863a2
--- /dev/null
+++ b/miniapps/esl-reformat.man
@@ -0,0 +1,224 @@
+.TH "esl-reformat" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps"
+
+.SH NAME
+.TP 
+esl-reformat - convert sequence file formats
+
+.SH SYNOPSIS
+.B esl-reformat
+.I [options]
+.I format
+.I seqfile
+
+
+.SH DESCRIPTION
+
+.B esl-reformat
+reads the sequence file
+.I seqfile
+in any supported format, reformats it
+into a new format specified by 
+.I format,
+then outputs the reformatted text.
+
+.pp
+The 
+.I format
+argument must (case-insensitively) match a supported sequence file format:
+currently, limited to
+.I fasta,
+.I stockholm,
+.I pfam,
+or
+.I afa
+(aligned fasta).
+
+.pp
+Unaligned format files cannot be reformatted to
+aligned formats.
+However, aligned formats can be reformatted
+to unaligned formats - gap characters are 
+simply stripped out.
+
+.SH OPTIONS
+
+.TP
+.B -d 
+DNA; convert U's to T's, to make sure a nucleic acid
+sequence is shown as DNA not RNA. See
+.B -r.
+
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+
+.TP
+.B -l
+Lowercase; convert all sequence residues to lower case.
+See
+.B -u.
+
+
+.TP
+.B -n
+For DNA/RNA sequences, converts any character that's not unambiguous
+RNA/DNA (e.g. ACGTU/acgtu) to an N. Used to convert IUPAC ambiguity
+codes to N's, for software that can't handle all IUPAC codes (some
+public RNA folding codes, for example). If the file is an alignment,
+gap characters are also left unchanged. If sequences are not
+nucleic acid sequences, this option will corrupt the data in
+a predictable fashion.
+
+
+.TP
+.BI -o  " <f>"
+Send output to file
+.I <f>
+instead of stdout.
+
+
+.TP
+.B -r 
+RNA; convert T's to U's, to make sure a nucleic acid
+sequence is shown as RNA not DNA. See
+.B -d.
+
+
+.TP
+.B -u
+Uppercase; convert all sequence residues to upper case.
+See
+.B -l.
+
+
+.TP
+.B -x
+For DNA sequences, convert non-IUPAC characters (such as X's) to N's.
+This is for compatibility with benighted people who insist on using X
+instead of the IUPAC ambiguity character N. (X is for ambiguity
+in an amino acid residue). 
+.IP
+Warning: like the
+.B -n
+option, the code doesn't check that you are actually giving it DNA. It
+simply literally just converts non-IUPAC DNA symbols to N. So if you
+accidentally give it protein sequence, it will happily convert most
+every amino acid residue to an N.
+
+
+
+
+.SH EXPERT OPTIONS
+
+
+.TP
+.BI --gapsym " <c>"
+Convert all gap characters to 
+.I <c>.
+Used to prepare alignment files for programs with strict
+requirements for gap symbols. Only makes sense if
+the input 
+.I seqfile
+is an alignment.
+
+.TP
+.BI --informat " <s>"
+Specify that the sequence file is in format 
+.I <s>,
+rather than allowing the program to autodetect
+the file format. 
+
+
+.TP
+.B --mingap
+If 
+.I seqfile
+is an alignment, remove any columns that contain 100% gap or missing
+data characters, minimizing the overall length of the alignment.
+(Often useful if you've extracted a subset of aligned sequences from a
+larger alignment.)
+
+.TP
+.B --keeprf
+When used in combination with
+.B --mingap,
+never remove a column that is not a gap in the reference (#=GC RF) 
+annotation, even if the column contains 100% gap characters in 
+all aligned sequences. By default with
+.B --mingap,
+nongap RF columns that are 100% gaps in all sequences are removed.
+
+.TP
+.B --nogap
+Remove any aligned columns that contain any gap or missing data
+symbols at all. Useful as a prelude to phylogenetic analyses, where
+you only want to analyze columns containing 100% residues, so you want
+to strip out any columns with gaps in them.  Only makes sense if the
+file is an alignment file.
+
+.TP
+.B --wussify
+Convert RNA secondary structure annotation strings (both consensus
+and individual) from old "KHS" format, ><, to the new WUSS notation,
+<>. If the notation is already in WUSS format, this option will screw it
+up, without warning. Only SELEX and Stockholm format files have
+secondary structure markup at present.
+
+.TP
+.B --dewuss
+Convert RNA secondary structure annotation strings from the new
+WUSS notation, <>, back to the old KHS format, ><. If the annotation
+is already in KHS, this option will corrupt it, without warning.
+Only SELEX and Stockholm format files have secondary structure
+markup.
+
+.TP
+.B --fullwuss
+Convert RNA secondary structure annotation strings from simple
+(input) WUSS notation to full (output) WUSS notation.
+
+.TP 
+.BI --replace " <s>"
+.I <s>
+must be in the format
+.I <s1>:<s2>
+with equal numbers of characters in 
+.I <s1>
+and 
+.I <s2>
+separated by a ":" symbol. Each character from
+.I <s1>
+in the input file will be replaced by its counterpart (at the same
+position) from
+.I <s2>.
+Note that special characters in 
+.I <s>
+(such as "~") may need to be prefixed by
+a "\\" character. 
+
+.TP
+.B --small
+Operate in small memory mode for input alignment files in 
+Pfam format. If not used, each alignment is stored in memory so the
+required memory will be roughly the size of the largest alignment
+in the input file. With 
+.B --small, 
+input alignments are not stored in memory. 
+This option only works in combination with 
+.BI --informat " pfam"
+and output format 
+.I pfam
+or
+.I afa. 
+
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-selectn.c b/miniapps/esl-selectn.c
new file mode 100644
index 0000000..91e3a9d
--- /dev/null
+++ b/miniapps/esl-selectn.c
@@ -0,0 +1,117 @@
+/* Select <m> random lines from a file and print them.
+ *
+ * Uses a reservoir sample - O(m) in space, single pass on the input,
+ * never reads the entire input into memory.
+ *
+ * SRE, Fri Jun 13 08:17:53 2008 [Janelia]
+ * SVN $Id$
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_random.h"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env  range toggles reqs incomp  help                                       docgroup*/
+  { "-h",        eslARG_NONE,   FALSE,  NULL, NULL,  NULL,  NULL, NULL, "show brief help on version and usage",             1 },
+  { "--seed",    eslARG_INT,      "0",  NULL, NULL,  NULL,  NULL, NULL, "set random number generator's seed to <n>",        1 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <n> <file>";
+static char banner[] = "select n lines randomly from a file";
+
+static void
+cmdline_failure(char *argv0, char *format, ...)
+{
+  va_list argp;
+
+  va_start(argp, format);
+  vfprintf(stderr, format, argp);
+  va_end(argp);
+  esl_usage(stdout, argv0, usage);
+  printf("\nTo see more help on available options, do %s -h\n\n", argv0);
+  exit(1);
+}
+
+static void
+cmdline_help(char *argv0, ESL_GETOPTS *go) 
+{
+  esl_banner(stdout, argv0, banner);
+  esl_usage (stdout, argv0, usage);
+  puts("\n where general options are:");
+  esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+  exit(0);
+}
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go       = NULL; 
+  ESL_RANDOMNESS *rng      = NULL;
+  char           *filename = NULL;
+  FILE           *fp       = NULL;
+  int             m        = 0;	     /* number of lines to sample         */
+  char          **larr     = NULL;   /* sampled line ptr array, [0..m-1]  */
+  char           *buf      = NULL;
+  int             buflen   = 0;
+  int             n;		     /* number of lines read so far */
+  int             r;		     /* random #, 0..n-1            */
+  int             i;
+
+  /* Parse command line */
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) cmdline_failure(argv[0], "Error in app configuration: %s\n",   go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") )                   cmdline_help(argv[0], go);
+  if (esl_opt_ArgNumber(go) != 2)                      cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");
+
+  m        = atoi(esl_opt_GetArg(go, 1));
+  filename = esl_opt_GetArg(go, 2);
+  rng      = esl_randomness_Create(esl_opt_GetInteger(go, "--seed"));
+
+  if ((larr = malloc(sizeof(char *) * m)) == NULL) esl_fatal("allocation failed");
+  for (i = 0; i < m; i++) larr[i] = NULL;
+
+  if (strcmp(filename, "-") == 0) fp = stdin;
+  else {
+    if ((fp = fopen(filename, "r")) == NULL) esl_fatal("Failed to open file %s\n", filename);
+  }
+   
+   n = 0;
+   while (esl_fgets(&buf, &buflen, fp) == eslOK)
+     {
+       n++;
+       if (n <= m) { 
+	 larr[n-1] = buf; 
+	 buf       = NULL;
+	 buflen    = 0;
+       } else {
+	 r = esl_rnd_Roll(rng, n);
+	 if (r < m) {
+	   free(larr[r]);
+	   larr[r] = buf;
+	   buf     = NULL;
+	   buflen  = 0;
+	 }
+       }
+     }
+
+   for (i = 0; i < m; i++) printf("%s", larr[i]);
+
+   if (fp != stdin) fclose(fp);
+   for (i = 0; i < m; i++) free(larr[i]);
+   free(larr);
+   if (buf) free(buf);
+   esl_randomness_Destroy(rng);
+   esl_getopts_Destroy(go);
+   return 0;
+}
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/ 
diff --git a/miniapps/esl-selectn.man b/miniapps/esl-selectn.man
new file mode 100644
index 0000000..1f43735
--- /dev/null
+++ b/miniapps/esl-selectn.man
@@ -0,0 +1,76 @@
+.TH "esl-selectn" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps"
+
+.SH NAME
+.TP 
+esl-selectn - select random subset of lines from file
+
+.SH SYNOPSIS
+.B esl-selectn
+.I [options]
+.I nlines
+.I filename
+
+
+.SH DESCRIPTION
+
+.pp
+.B esl-selectn
+selects 
+.I nlines
+lines at random from file 
+.I filename
+and outputs them on 
+.I stdout.
+
+.pp
+If 
+.I filename
+is - (a single dash),
+input is read from 
+.I stdin.
+
+.pp
+Uses a reservoir sampling algorithm, which is efficient: requires only a single pass through
+.I filename,
+and memory storage proportional to 
+.I nlines
+(and importantly, not to the size of
+.I filename
+itself).
+.B esl-selectn 
+can therefore be used to create large scale statistical sampling 
+experiments, especially in combination with other
+.I Easel
+miniapplications.
+
+
+.SH OPTIONS
+
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+
+.TP
+.BI --seed " <d>"
+Set the random number seed to
+.I <d>,
+an integer greater than 0. 
+The default is to use the current value of
+.I time().
+(As the return value of
+.I time()
+is likely to be in units of seconds,
+two calls to 
+.B esl-selectn
+within the same second will generate exactly the
+same sample; this may not be what you want.)
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-seqrange.c b/miniapps/esl-seqrange.c
new file mode 100644
index 0000000..201fe48
--- /dev/null
+++ b/miniapps/esl-seqrange.c
@@ -0,0 +1,165 @@
+/* Determine range of sequences for one of many parallel processes.
+ * 
+ * EPN, Wed Mar 24 07:23:27 2010
+ * SVN $Id: esl-sfetch.c 480 2010-01-06 00:05:59Z farrarm $
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_fileparser.h"
+#include "esl_keyhash.h"
+#include "esl_regexp.h"
+#include "esl_ssi.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+static char banner[] = "determine range of sequences for one of many parallel processes";
+static char usage[]  = "[options] <sqfile> <procidx> <nproc>";
+
+static void
+cmdline_failure(char *argv0, char *format, ...) 
+{
+  va_list argp;
+  va_start(argp, format);
+  vfprintf(stderr, format, argp);
+  va_end(argp);
+  esl_usage(stdout, argv0, usage);
+  printf("\nTo see more help on available options, do %s -h\n\n", argv0);
+  exit(1);
+}
+
+static void
+cmdline_help(char *argv0, ESL_GETOPTS *go) 
+{
+  esl_banner(stdout, argv0, banner);
+  esl_usage (stdout, argv0, usage);
+  puts("\n where general options are:");
+  esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+  exit(0);
+}
+
+static ESL_OPTIONS options[] = {
+  /* name          type           default env   range togs  reqs  incomp        help                                                             docgroup */
+  { "-h",          eslARG_NONE,   FALSE,  NULL, NULL, NULL, NULL, NULL,         "help; show brief info on version and usage",                    1 },
+  { "--informat",  eslARG_STRING, FALSE,  NULL, NULL, NULL, NULL, NULL,         "specify that input file is in format <s>",                      1 },
+
+ { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+static void range_by_seqnum(ESL_SQFILE *sqfp, int nproc, int64_t **ret_final_sqidx);
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go      = NULL;	                        /* application configuration            */
+  char         *seqfile = NULL;	                        /* sequence file name                   */
+  int           infmt   = eslSQFILE_UNKNOWN;		/* format code for seqfile              */ 
+  ESL_SQFILE   *sqfp    = NULL;                         /* open sequence file                   */
+  int           status;		                        /* easel return code                    */
+  int           procidx;                                /* processor index we want range for    */
+  int           nproc;                                  /* total number processors (>= procidx) */
+  int64_t      *final_sqidx;                            /* [0..p..nproc-1] index (in sqfp) of final seq for proc p+1,
+							 * sequence index ranges 1..nseq_total */
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n",       go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") )                   cmdline_help   (argv[0], go);
+  if (esl_opt_ArgNumber(go) != 3)                      cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");        
+
+  seqfile = esl_opt_GetArg(go, 1);
+  procidx = atoi(esl_opt_GetArg(go, 2));
+  nproc   = atoi(esl_opt_GetArg(go, 3));
+
+  /* Validate command line args */
+  if(procidx > nproc) cmdline_failure(argv[0], "<procidx> must be less than or equal to <nproc>\n");
+  if(procidx < 1)     cmdline_failure(argv[0], "minimum allowed value for <procidx> is 1\n");
+  if(nproc   < 1)     cmdline_failure(argv[0], "minimum allowed value for <nproc> is 1\n");
+
+  /* Open the sequence file */
+  if (esl_opt_GetString(go, "--informat") != NULL) {
+    infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat"));
+    if (infmt == eslSQFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat"); 
+  }
+  status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp);
+  if      (status == eslENOTFOUND) cmdline_failure(argv[0], "Sequence file %s not found.\n",     seqfile);
+  else if (status == eslEFORMAT)   cmdline_failure(argv[0], "Format of file %s unrecognized.\n", seqfile);
+  else if (status == eslEINVAL)    cmdline_failure(argv[0], "Can't autodetect stdin or .gz.\n");
+  else if (status != eslOK)        cmdline_failure(argv[0], "Open failed, code %d.\n", status);
+
+  /* Exit if seqfile is an alignment, is gzipped or is piped from stdin, we can't handle this */
+  if (sqfp->data.ascii.do_gzip)           cmdline_failure(argv[0], "Can't determine seq range for a .gz compressed file\n");
+  if (sqfp->data.ascii.do_stdin)          cmdline_failure(argv[0], "Can't determine seq range for a standard input pipe\n");
+  if (esl_sqio_IsAlignment(sqfp->format)) cmdline_failure(argv[0], "Can't determine seq range for an alignment file\n");              
+
+  /* Open the SSI index for retrieval, it is required */
+  status = esl_sqfile_OpenSSI(sqfp, NULL);
+  if      (status == eslEFORMAT)   cmdline_failure(argv[0], "SSI index is in incorrect format\n");
+  else if (status == eslERANGE)    cmdline_failure(argv[0], "SSI index is in 64-bit format and we can't read it\n");
+  else if (status != eslOK)        cmdline_failure(argv[0], "Failed to open SSI index\n");
+
+  /* Verify that we have more processors than sequences */
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; 
+  if(ascii->ssi->nprimary < nproc) cmdline_failure(argv[0], "Fewer sequences than processors (<nproc>); %d < %d\n", ascii->ssi->nprimary, nproc);
+
+  /* Determine the range for all <nproc> processors */
+  range_by_seqnum(sqfp, nproc, &(final_sqidx));
+
+  /* Output range for desired nproc to stdout */
+  printf("%" PRId64 "-%" PRId64 "\n", (procidx == 1) ? 1 : final_sqidx[procidx-2]+1, final_sqidx[procidx-1]); /* careful: final_sqidx runs 0..nproc-1 */
+
+  free(final_sqidx);
+  esl_sqfile_Close(sqfp);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+
+/* Determine seq range for <nproc> processors with goal of putting an identical 
+ * number of sequences (or as close to identical as possible) in each chunk, 
+ * one chunk per processor.
+ */
+static void
+range_by_seqnum(ESL_SQFILE *sqfp, int nproc, int64_t **ret_final_sqidx)
+{
+  int         status;
+  int64_t    *final_sqidx;   /* [0..p..nproc-1] index (in sqfp) of final seq for proc p+1 
+			      * sequence index ranges 1..nseq_total */
+  int         p;             /* counter over processes */
+  int64_t     nseq_per_proc; /* num seqs per processor for even split */
+  int64_t     nseq_total;    /* total number of sequences in sqfp */
+  int64_t     remainder;     /* num extra seqs after even split across all procs */
+  int64_t     nseq_used;     /* running total of nseqs on all procs */
+  ESL_SQASCII_DATA *ascii = &sqfp->data.ascii;
+
+  ESL_ALLOC(final_sqidx, sizeof(int64_t) * nproc);
+
+  nseq_total    = ascii->ssi->nprimary;
+
+  nseq_per_proc = (int) (nseq_total / nproc);
+  remainder     = nseq_total - (nseq_per_proc * nproc);
+  nseq_used     = 0;
+  for(p = 0; p < nproc; p++) { 
+    nseq_used += nseq_per_proc;
+    if(p < remainder) nseq_used++;
+    final_sqidx[p] = nseq_used;
+  }
+  if(nseq_used != nseq_total) esl_fatal("Unable to split up sequences properly, coding error");
+
+  *ret_final_sqidx = final_sqidx;
+
+  return;
+
+ ERROR:
+  esl_fatal("Out of memory");
+  return; /* NEVERREACHED */
+}
diff --git a/miniapps/esl-seqrange.itest.pl b/miniapps/esl-seqrange.itest.pl
new file mode 100755
index 0000000..080ddcc
--- /dev/null
+++ b/miniapps/esl-seqrange.itest.pl
@@ -0,0 +1,143 @@
+#! /usr/bin/perl
+
+# Integrated test of the esl-seqrange miniapp.
+#
+# Usage:     ./esl-seqrange.itest.pl <esl-seqrange binary> <esl-sfetch binary> <tmpfile prefix>
+# Example:   ./esl-seqrange.itest.pl ./esl-seqrange ./esl-sfetch foo
+#
+# EPN, Wed Mar 24 10:19:28 2010
+
+$eslseqrange = shift;
+$eslsfetch   = shift;
+$tmppfx      = shift;
+
+if (! -x "$eslseqrange") { die "FAIL: didn't find esl-seqrange binary $eslseqrange"; }
+if (! -x "$eslsfetch")   { die "FAIL: didn't find esl-sfetch binary $eslsfetch"; }
+
+open(SEQFILE, ">$tmppfx.fa") || die "FAIL: couldn't open $tmppfx.fa for writing seqfile";
+print SEQFILE << "EOF";
+>random0
+CUGCUUCGCA
+>random1
+GAGUACGUGG
+>random2
+GCUACCCUAA
+>random3
+GGUAACCUAA
+>random4
+AUUAGGGCAU
+>random5
+CCGACUUUAG
+>random6
+ACCAUUUACA
+>random7
+GACUAGAAAC
+>random8
+AUGUAGAGUA
+>random9
+CGCAGCCGGC
+>random10
+CAGAACUUCG
+>random11
+GAGGUCAGGC
+>random12
+UCACUUGUCG
+>random13
+ACCGGGGAUG
+>random14
+CGAUUUUCGG
+>random15
+CUGGUCCUGG
+>random16
+AUGUGAAGAC
+>random17
+AAUGAAGGUU
+>random18
+UGCUCCGGCG
+>random19
+CGCGACAUGG
+>random20
+AAAGCGACCG
+>random21
+UCCUGUAAGC
+>random22
+CGUUUCAUGG
+>random23
+GCAAAACGGC
+>random24
+GUCGCAUAUU
+>random25
+GGCUAACAUC
+>random26
+CUUGGUCUGC
+>random27
+CCCAGAGUGU
+>random28
+GUGUGCGCGU
+>random29
+ACGGCACCAA
+>random30
+GGGCAGUGCG
+EOF
+close SEQFILE;
+
+$output = `$eslseqrange -h`;
+if ($? != 0)                                     { die "FAIL: esl-seqrange failed unexpectedly"; }
+if ($output !~ /Usage: esl-seqrange/)            { die "FAIL: help output not right"; }
+
+# index the file first! we need an index
+if(-e "$tmppfx.fa.ssi") { unlink "$tmppfx.fa.ssi"; } # erase the index if it exists
+$output = `$eslsfetch --index $tmppfx.fa 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-sfetch --index failed unexpectedly"; }
+
+$output = `$eslseqrange $tmppfx.fa 1 31 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-seqrange failed unexpectedly"; }
+if ($output !~ /1-1/)                            { die "FAIL: seq range calculated incorrectly"; }
+
+
+$output = `$eslseqrange $tmppfx.fa 1 31 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-seqrange failed unexpectedly"; }
+if ($output !~ /1-1/)                            { die "FAIL: seq range calculated incorrectly"; }
+
+$output = `$eslseqrange $tmppfx.fa 17 31 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-seqrange failed unexpectedly"; }
+if ($output !~ /17-17/)                          { die "FAIL: seq range calculated incorrectly"; }
+
+$output = `$eslseqrange $tmppfx.fa 1 13 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-seqrange failed unexpectedly"; }
+if ($output !~ /1-3/)                            { die "FAIL: seq range calculated incorrectly"; }
+
+$output = `$eslseqrange $tmppfx.fa 1 3 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-seqrange failed unexpectedly"; }
+if ($output !~ /1-11/)                           { die "FAIL: seq range calculated incorrectly"; }
+
+$output = `$eslseqrange $tmppfx.fa 2 3 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-seqrange failed unexpectedly"; }
+if ($output !~ /12-21/)                           { die "FAIL: seq range calculated incorrectly"; }
+
+$output = `$eslseqrange $tmppfx.fa 3 3 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-seqrange failed unexpectedly"; }
+if ($output !~ /22-31/)                           { die "FAIL: seq range calculated incorrectly"; }
+
+# test --informat 
+$output = `$eslseqrange --informat fasta $tmppfx.fa 3 3 2>&1`;
+if ($? != 0)                                     { die "FAIL: esl-seqrange failed unexpectedly"; }
+if ($output !~ /22-31/)                           { die "FAIL: seq range calculated incorrectly"; }
+
+# test cases we expect to fail
+$output = `$eslseqrange $tmppfx.fa 1 32 2>&1`;
+if ($? == 0)                                     { die "FAIL: esl-seqrange did not fail when expected"; }
+
+$output = `$eslseqrange $tmppfx.fa 31 1 2>&1`;
+if ($? == 0)                                     { die "FAIL: esl-seqrange did not fail when expected"; }
+
+$output = `$eslseqrange $tmppfx.fa -1 1 2>&1`;
+if ($? == 0)                                     { die "FAIL: esl-seqrange did not fail when expected"; }
+
+$output = `$eslseqrange $tmppfx.fa 1 -1 2>&1`;
+if ($? == 0)                                     { die "FAIL: esl-seqrange did not fail when expected"; }
+
+print "ok\n"; 
+unlink "$tmppfx.fa";
+unlink "$tmppfx.fa.ssi";
+exit 0;
diff --git a/miniapps/esl-seqrange.man b/miniapps/esl-seqrange.man
new file mode 100644
index 0000000..c563a4d
--- /dev/null
+++ b/miniapps/esl-seqrange.man
@@ -0,0 +1,67 @@
+.TH "esl-seqrange" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-seqrange - determine a range of sequences for one of many parallel processes.
+
+.SH SYNOPSIS
+
+.TP
+.B esl-sfetch
+.I [options]
+.I seqfile
+.I procidx
+.I nproc
+
+.SH DESCRIPTION
+
+.pp
+.B esl-seqrange
+reads an indexed 
+.I seqfile
+and determines the range of sequence indices in that file that process
+number 
+.I procidx
+out of
+.I nproc
+total processes should operate on during a parallel processing of 
+.I seqfile.
+
+.pp
+The 
+.I seqfile 
+must be indexed first using 
+.B esl-sfetch --index <seqfile>.
+This creates an SSI index file
+.I <seqfile>.ssi.
+An SSI file is required in order for
+.B esl-seqrange
+to work.
+
+Sequence index ranges are calculated using a simple rule: the number
+of sequences for each process should be identical, or as close as
+possible to identical, across all processes. The lengths of the sequences
+are not considered (even though they probably should be).
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+.TP
+.BI --informat " <s>"
+Specify that the sequence file is in format
+.I <s>,
+where 
+.I <s> 
+may be FASTA, GenBank, EMBL, UniProt, or DDBJ.  This string
+is case-insensitive ("genbank" or "GenBank" both work, for example).
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-seqstat.c b/miniapps/esl-seqstat.c
new file mode 100644
index 0000000..9665ef5
--- /dev/null
+++ b/miniapps/esl-seqstat.c
@@ -0,0 +1,258 @@
+/* Simple statistics on a sequence file
+ * 
+ * SRE, Sun Feb 24 15:33:53 2008 [UA5315 to St. Louis]
+ * SVN $Id$  
+ * from squid's seqstat (1994)
+ * 
+ * Wish list:
+ *   - add an option for printing sequence names only.
+ *     This would facilitate using esl-seqstat in incantations (with
+ *     esl-selectn and esl-sfetch) to extract subsets of sequences
+ *     from a large file.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+#include "easel.h"
+#include "esl_composition.h"
+#include "esl_getopts.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_vectorops.h"
+
+static char banner[] = "show simple statistics on a sequence file";
+static char usage1[] = "   [options] <seqfile>";
+
+static void show_overall_composition(const ESL_ALPHABET *abc, const double *monoc_all, int64_t nres);
+
+#define ALPH_OPTS "--rna,--dna,--amino" /* toggle group, alphabet type options          */
+
+static ESL_OPTIONS options[] = {
+  /* name         type           default   env range togs  reqs  incomp      help                                      docgroup */
+  { "-h",         eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL,      NULL, "help; show brief info on version and usage",          1 },
+  { "-a",         eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL,      NULL, "report per-sequence info line, not just a summary",   1 },
+  { "-c",         eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL,      NULL, "count and report residue composition",                1 },
+  { "--informat", eslARG_STRING,  FALSE, NULL, NULL, NULL, NULL,      NULL, "specify that input file is in format <s>",            1 },
+  { "--rna",      eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, ALPH_OPTS, "specify that <seqfile> contains RNA sequence",        1 },
+  { "--dna",      eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, ALPH_OPTS, "specify that <seqfile> contains DNA sequence",        1 },
+  { "--amino",    eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL, ALPH_OPTS, "specify that <seqfile> contains protein sequence",    1 },
+  { "--comptbl",  eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL,      NULL, "alternative output: a table of residue compositions per seq", 1 },
+  { "--stall",    eslARG_NONE,    FALSE, NULL, NULL, NULL, NULL,      NULL, "arrest after start: for debugging under gdb",        99 },  
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+static void
+cmdline_failure(char *argv0, char *format, ...)
+{
+  va_list argp;
+
+  va_start(argp, format);
+  vfprintf(stderr, format, argp);
+  va_end(argp);
+  esl_usage(stdout, argv0, usage1);
+  printf("\nTo see more help on available options, do %s -h\n\n", argv0);
+  exit(1);
+}
+
+static void
+cmdline_help(char *argv0, ESL_GETOPTS *go) 
+{
+  esl_banner(stdout, argv0, banner);
+  esl_usage (stdout, argv0, usage1);
+  puts("\n where general options are:");
+  esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+  exit(0);
+}
+
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go        = NULL;
+  char           *seqfile   = NULL;
+  ESL_SQFILE     *sqfp      = NULL;
+  int             infmt     = eslSQFILE_UNKNOWN;
+  int             alphatype = eslUNKNOWN;
+  ESL_ALPHABET   *abc       = NULL;
+  ESL_SQ         *sq        = NULL;
+  int64_t         nseq      = 0;   
+  int64_t         nres      = 0;
+  int64_t         small     = 0;
+  int64_t         large     = 0;
+  double         *monoc     = NULL; /* monoresidue composition per sequence  */
+  double         *monoc_all = NULL; /* monoresidue composition over all seqs */
+  int             do_comp   = FALSE;
+  int             do_comptbl = FALSE;
+  int             status    = eslOK;
+  int             wstatus;
+  int             i, x;
+  int             do_stall;       /* used to stall when debugging     */
+
+
+  /* Parse command line */
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) cmdline_failure(argv[0], "Error in app configuration: %s\n",   go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") )                   cmdline_help(argv[0], go);
+  if (esl_opt_ArgNumber(go) != 1)                      cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");
+
+  seqfile    = esl_opt_GetArg(go, 1);
+  do_comp    = esl_opt_GetBoolean(go, "-c");
+  do_comptbl = esl_opt_GetBoolean(go, "--comptbl");
+
+  if (esl_opt_GetString(go, "--informat") != NULL) {
+    infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat"));
+    if (infmt == eslSQFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat"); 
+  }
+
+  do_stall = esl_opt_GetBoolean(go, "--stall"); /* a stall point for attaching gdb */
+  while (do_stall); 
+
+  /* open input file */
+  status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp);
+  if      (status == eslENOTFOUND) esl_fatal("No such file %s", seqfile);
+  else if (status == eslEFORMAT)   esl_fatal("Format of seqfile %s unrecognized.", seqfile);
+  else if (status != eslOK)        esl_fatal("Open failed, code %d.", status);
+
+  if      (esl_opt_GetBoolean(go, "--rna"))   alphatype = eslRNA;
+  else if (esl_opt_GetBoolean(go, "--dna"))   alphatype = eslDNA;
+  else if (esl_opt_GetBoolean(go, "--amino")) alphatype = eslAMINO;
+  else {
+    status = esl_sqfile_GuessAlphabet(sqfp, &alphatype);
+    if      (status == eslENOALPHABET) esl_fatal("Couldn't guess alphabet from first sequence in %s", seqfile);
+    else if (status == eslEFORMAT)    esl_fatal("Parse failed (sequence file %s):\n%s\n",
+						sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));     
+    else if (status == eslENODATA)    esl_fatal("Sequence file %s contains no data?", seqfile);
+    else if (status != eslOK)         esl_fatal("Failed to guess alphabet (error code %d)\n", status);
+  }
+  abc = esl_alphabet_Create(alphatype);
+  sq  = esl_sq_CreateDigital(abc);
+  esl_sqfile_SetDigital(sqfp, abc);
+
+  if (do_comp || do_comptbl) {
+    ESL_ALLOC(monoc,     (abc->Kp) * sizeof(double));  
+    ESL_ALLOC(monoc_all, (abc->Kp) * sizeof(double));  
+    esl_vec_DSet(monoc_all, abc->Kp, 0.0);
+    esl_vec_DSet(monoc,     abc->Kp, 0.0);
+  }
+
+  /* Output header, if any */
+  if (do_comptbl) {
+    printf("#%-29s %6s", " Sequence name", "Length");
+    for (x = 0; x < abc->K; x++) printf("      %c", (char) abc->sym[x]);
+    fputc('\n', stdout);
+    printf("#%-29s %6s", "-----------------------------", "------");
+    for (x = 0; x < abc->K; x++) printf(" %6s", "------");
+    fputc('\n', stdout);
+  }
+
+  while ((wstatus = esl_sqio_ReadWindow(sqfp, 0, 4096, sq)) != eslEOF)
+    {
+      if (wstatus == eslOK)
+	{
+	  if (do_comp || do_comptbl)
+	    for (i = 1; i <= sq->n; i++) 
+	      monoc[sq->dsq[i]]++;
+	}
+      else if (wstatus == eslEOD) 
+	{			
+	  if (nseq == 0) { small = large = sq->L; }
+	  else {
+	    small = ESL_MIN(small, sq->L);
+	    large = ESL_MAX(large, sq->L);
+	  }
+
+	  if (!do_comptbl && esl_opt_GetBoolean(go, "-a")) {
+	    printf("= %-25s %8" PRId64 " %s\n", sq->name, sq->L, (sq->desc != NULL) ? sq->desc : "");
+	  }
+	  
+	  if (do_comptbl) {
+	    printf("%-30s %6" PRId64, sq->name, sq->L);
+	    for (x = 0; x < abc->K; x++) printf(" %6.0f", monoc[x]);
+	    fputc('\n', stdout);
+	  }
+
+	  nres += sq->L;
+	  nseq++;
+	  esl_sq_Reuse(sq);
+	  if (do_comp || do_comptbl) {
+	    esl_vec_DAdd(monoc_all, monoc, abc->Kp);
+	    esl_vec_DSet(monoc, abc->Kp, 0.0);
+	  }
+	}
+      else if  (wstatus == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n",
+						 sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+      else                             esl_fatal("Unexpected error %d reading sequence file %s",
+					         wstatus, sqfp->filename);
+    }
+
+  if (! do_comptbl)
+    {
+      printf("Format:              %s\n",   esl_sqio_DecodeFormat(sqfp->format));
+      printf("Alphabet type:       %s\n",   esl_abc_DecodeType(abc->type));
+      printf("Number of sequences: %" PRId64 "\n", nseq);
+      printf("Total # residues:    %" PRId64 "\n", nres);
+      printf("Smallest:            %" PRId64 "\n", small);
+      printf("Largest:             %" PRId64 "\n", large);
+      printf("Average length:      %.1f\n", (float) nres / (float) nseq);
+
+      if (do_comp) show_overall_composition(abc, monoc_all, nres);
+    }
+
+  if (monoc)     free(monoc);
+  if (monoc_all) free(monoc_all);
+  esl_alphabet_Destroy(abc);
+  esl_sq_Destroy(sq);
+  esl_sqfile_Close(sqfp);
+  esl_getopts_Destroy(go);
+  return 0;
+
+ ERROR:
+  return status;
+}
+
+
+static void
+show_overall_composition(const ESL_ALPHABET *abc, const double *monoc_all, int64_t nres)
+{
+  double *iid_bg = NULL;;
+  int x;
+  int status;
+
+  printf("\nResidue composition:\n");
+
+  if (abc->type == eslAMINO)
+    {
+      ESL_DASSERT1(( abc->K == 20 )); // esl_composition_*() functions assume this
+      ESL_ALLOC(iid_bg, sizeof(double) * abc->K);
+      esl_composition_SW50(iid_bg);
+
+      for (x = 0; x < abc->K; x++)
+	printf("residue: %c   %10.0f  %6.4f  %8.4f\n",
+	       abc->sym[x], monoc_all[x], monoc_all[x] / (double) nres,
+	       log((monoc_all[x] / (double) nres) / iid_bg[x]) * eslCONST_LOG2R);
+      for ( ;     x < abc->Kp; x++)
+	if (monoc_all[x] > 0)
+	  printf("residue: %c   %10.0f  %6.4f\n",
+		 abc->sym[x], monoc_all[x], monoc_all[x] / (double) nres);
+      free(iid_bg);
+    }
+  else
+    {
+      for (x = 0; x < abc->Kp; x++)
+	if (x < abc->K || monoc_all[x] > 0)
+	  printf("residue: %c   %10.0f  %.4f\n", abc->sym[x], monoc_all[x], monoc_all[x] / (double) nres);
+    }
+    
+  return;
+
+ ERROR:
+  if (iid_bg) free(iid_bg);
+  return;
+}
+
+
diff --git a/miniapps/esl-seqstat.man b/miniapps/esl-seqstat.man
new file mode 100644
index 0000000..df2150a
--- /dev/null
+++ b/miniapps/esl-seqstat.man
@@ -0,0 +1,113 @@
+.TH "esl-seqstat" 1  "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-seqstat - summarize contents of a sequence file
+
+.SH SYNOPSIS
+
+.B esl-seqstat
+.I [options]
+.I seqfile
+
+.SH DESCRIPTION
+
+.pp
+.B esl-seqstat 
+summarizes the contents of the
+.I seqfile.
+It prints the format, alphabet type, number of sequences, total number
+of residues, and the mean, smallest, and largest sequence length.
+
+.pp
+If 
+.I seqfile
+is - (a single dash),
+sequence input is read from
+.I stdin.
+
+.pp
+The sequence file may be in any of several different common unaligned
+sequence formats including FASTA, GenBank, EMBL, UniProt, or DDBJ. It
+may also be an alignment file, in Stockholm format for example. By
+default the file format is autodetected. The 
+.I --informat <s> 
+option allows you to specify the format and override
+autodetection. This
+option may be useful for making 
+.B esl-seqstat 
+more robust, because format autodetection may fail on unusual files.
+
+.pp
+The sequences can be of protein or DNA/RNA sequences. All sequences
+in the same 
+.I seqfile
+must be either protein or DNA/RNA. The alphabet will be autodetected
+unless one of the options 
+.I --amino,
+.I --dna,
+or 
+.I --rna 
+are given. These options may be useful in automated
+pipelines to make 
+.B esl-alistat 
+more robust; alphabet autodetection is not infallible.
+
+
+
+.SH OPTIONS
+
+.TP
+.B -h 
+Print brief help;  includes version number and summary of
+all options, including expert options.
+
+.TP
+.B -a
+Additionally show a summary statistic line showing the name, length,
+and description of each individual sequence. Each of these lines is
+prefixed by an = character, in order to allow these lines to be easily
+grepped out of the output.
+
+.TP
+.B -c
+Additionally print the residue composition of the sequence file.
+
+
+
+.SH EXPERT OPTIONS
+
+.TP
+.BI --informat " <s>"
+Specify that the sequence file is in format
+.I <s>,
+where 
+.I <s> 
+may be FASTA, GenBank, EMBL, UniProt, DDBJ, or Stockholm.  This string
+is case-insensitive ("genbank" or "GenBank" both work, for example).
+
+.TP
+.B --amino
+Assert that the 
+.I seqfile 
+contains protein sequences. 
+
+.TP 
+.B --dna
+Assert that the 
+.I seqfile 
+contains DNA sequences. 
+
+.TP 
+.B --rna
+Assert that the 
+.I seqfile 
+contains RNA sequences. 
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
+
diff --git a/miniapps/esl-sfetch.c b/miniapps/esl-sfetch.c
new file mode 100644
index 0000000..f355458
--- /dev/null
+++ b/miniapps/esl-sfetch.c
@@ -0,0 +1,489 @@
+/* Fetch a sequence (or part of one) from a sequence flatfile.
+ * 
+ * From squid's sfetch and ffetch
+ * SRE, Mon Mar 31 16:12:50 2008 [Janelia] 
+ * SVN $Id$
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_fileparser.h"
+#include "esl_keyhash.h"
+#include "esl_regexp.h"
+#include "esl_ssi.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+
+static char banner[] = "retrieve sequence(s) from a file";
+static char usage1[] = "[options] <sqfile> <name>        (one seq named <name>)";
+static char usage2[] = "[options] -f <sqfile> <namefile> (all seqs in <namefile>)";
+static char usage3[] = "[options] --index <sqfile>       (index <sqfile>)";
+
+static void
+cmdline_failure(char *argv0, char *format, ...) 
+{
+  va_list argp;
+  va_start(argp, format);
+  vfprintf(stderr, format, argp);
+  va_end(argp);
+  esl_usage(stdout, argv0, usage1);
+  esl_usage(stdout, argv0, usage2);
+  esl_usage(stdout, argv0, usage3);
+  printf("\nTo see more help on available options, do %s -h\n\n", argv0);
+  exit(1);
+}
+
+static void
+cmdline_help(char *argv0, ESL_GETOPTS *go) 
+{
+  esl_banner(stdout, argv0, banner);
+  esl_usage (stdout, argv0, usage1);
+  esl_usage (stdout, argv0, usage2);
+  esl_usage (stdout, argv0, usage3);
+  puts("\n where general options are:");
+  esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+  puts("\n Options for retrieving subsequences:");
+  esl_opt_DisplayHelp(stdout, go, 2, 2, 80);
+  puts("\n  On command line, subseq coords are separated by any nonnumeric, nonspace character(s).");
+  puts("  for example, -c 23..100 or -c 23/100 or -c 23-100 all work.\n");
+  puts("  Additionally, to retrieve a suffix to the end, omit the end coord or set it to zero; -c 23.. ");
+  puts("  will work, as will -c 23..0\n");
+  puts("  By default, the subseq will be named <source name>/<from>-<to>. To assign a name of");
+  puts("  your choice, use -n <newname>.\n");
+  puts("  In retrieving subsequences listed in a file (-C -f, or just -Cf), each line of the file");
+  puts("  is in GDF format: <newname> <from> <to> <source seqname>, space/tab delimited.\n");
+  puts("  When <start> coordinate is greater than <end>, for DNA or RNA, the reverse complement is");
+  puts("  retrieved; in protein sequence, this is an error. The -r option is another way to revcomp.");
+  puts("\n other options:");
+  esl_opt_DisplayHelp(stdout, go, 3, 2, 80);
+  exit(0);
+}
+
+static ESL_OPTIONS options[] = {
+  /* name          type           default env   range togs  reqs               incomp                help                                                 docgroup */
+  { "-h",          eslARG_NONE,   FALSE,  NULL, NULL, NULL, NULL,              NULL,                 "help; show brief info on version and usage",        1 },
+  { "-o",          eslARG_OUTFILE,FALSE,  NULL, NULL, NULL, NULL,              "-O,--index",         "output sequences to file <f> instead of stdout",    1 },
+  { "-O",          eslARG_NONE,   FALSE,  NULL, NULL, NULL, NULL,              "-o,-f,--index",      "output sequence to file named <key>",               1 },
+  { "-n",          eslARG_STRING, FALSE,  NULL, NULL, NULL, NULL,              "-f,--index",         "rename the sequence <s>",                           1 },
+  { "-r",          eslARG_NONE,   FALSE,  NULL, NULL, NULL, NULL,              "--index",            "reverse complement the seq(s)",                     1 },
+
+
+  { "-c",          eslARG_STRING, FALSE,  NULL, NULL, NULL, NULL,              "-f,--index",         "retrieve subsequence coords <from>..<to>",          2 },
+  { "-C",          eslARG_NONE,   FALSE,  NULL, NULL, NULL, "-f",              "--index",            "<namefile> in <f> contains subseq coords too",      2 },
+
+  { "--informat",  eslARG_STRING, FALSE,  NULL, NULL, NULL, NULL,              NULL,                 "specify that input file is in format <s>",          3 },
+
+  /* undocumented as options, because they're documented as alternative invocations: */
+  { "-f",          eslARG_NONE,  FALSE,   NULL, NULL, NULL, NULL,              "--index",           "second cmdline arg is a file of names to retrieve", 99 },
+  { "--index",     eslARG_NONE,  FALSE,   NULL, NULL, NULL, NULL,               NULL,               "index <sqfile>, creating <sqfile>.ssi",             99 },
+
+ { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+static void create_ssi_index(ESL_GETOPTS *go, ESL_SQFILE *sqfp);
+static void multifetch(ESL_GETOPTS *go, FILE *ofp, char *keyfile, ESL_SQFILE *sqfp);
+static void onefetch(ESL_GETOPTS *go, FILE *ofp, char *key, ESL_SQFILE *sqfp);
+static void multifetch_subseq(ESL_GETOPTS *go, FILE *ofp, char *keyfile, ESL_SQFILE *sqfp);
+static void onefetch_subseq(ESL_GETOPTS *go, FILE *ofp, ESL_SQFILE *sqfp, char *newname, 
+			    char *key, uint32_t given_start, uint32_t given_end);
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS  *go      = NULL;	                        /* application configuration       */
+  char         *seqfile = NULL;	                        /* sequence file name              */
+  int           infmt   = eslSQFILE_UNKNOWN;		/* format code for seqfile         */
+  ESL_SQFILE   *sqfp    = NULL;                         /* open sequence file              */
+  FILE         *ofp     = NULL;	                        /* output stream for sequences     */
+  int           status;		                        /* easel return code               */
+
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n",       go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") )                   cmdline_help   (argv[0], go);
+  if (esl_opt_ArgNumber(go) < 1)                       cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");        
+
+  /* Open the sequence file */
+  seqfile = esl_opt_GetArg(go, 1);
+  if (esl_opt_GetString(go, "--informat") != NULL) {
+    infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat"));
+    if (infmt == eslSQFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); 
+  }
+  status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp);
+  if      (status == eslENOTFOUND) cmdline_failure(argv[0], "Sequence file %s not found.\n",     seqfile);
+  else if (status == eslEFORMAT)   cmdline_failure(argv[0], "Format of file %s unrecognized.\n", seqfile);
+  else if (status == eslEINVAL)    cmdline_failure(argv[0], "Can't autodetect stdin or .gz.\n");
+  else if (status != eslOK)        cmdline_failure(argv[0], "Open failed, code %d.\n", status);
+
+  /* Open the output file, if any */
+  if (esl_opt_GetBoolean(go, "-O")) 
+    {
+      if ((ofp = fopen(esl_opt_GetArg(go, 2), "w")) == NULL)
+	cmdline_failure(argv[0], "Failed to open output file %s\n", esl_opt_GetArg(go, 2));
+    }
+  else if (esl_opt_GetString(go, "-o") != NULL)
+    {
+      if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL)
+	cmdline_failure(argv[0], "Failed to open output file %s\n", esl_opt_GetString(go, "-o"));
+    }
+  else ofp = stdout;
+
+  /* Indexing  mode */
+  if (esl_opt_GetBoolean(go, "--index")) 
+    {
+      if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");        
+      if (sqfp->data.ascii.do_gzip)  cmdline_failure(argv[0], "Can't index a .gz compressed file");
+      if (sqfp->data.ascii.do_stdin) cmdline_failure(argv[0], "Can't index a standard input pipe");
+
+      create_ssi_index(go, sqfp);
+    }
+
+  /* List retrieval mode */
+  else if (esl_opt_GetBoolean(go, "-f"))
+    {
+      if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");        
+
+      /* Open the SSI index for retrieval */
+      if (! sqfp->data.ascii.do_gzip && ! sqfp->data.ascii.do_stdin &&  ! esl_sqio_IsAlignment(sqfp->format)) 
+	{
+	  status = esl_sqfile_OpenSSI(sqfp, NULL);
+	  if      (status == eslEFORMAT)   cmdline_failure(argv[0], "SSI index is in incorrect format\n");
+	  else if (status == eslERANGE)    cmdline_failure(argv[0], "SSI index is in 64-bit format and we can't read it\n");
+	  else if (status != eslOK)        cmdline_failure(argv[0], "Failed to open SSI index\n");
+	}
+
+      if (esl_opt_GetBoolean(go, "-C")) multifetch_subseq(go, ofp, esl_opt_GetArg(go, 2), sqfp);
+      else              	        multifetch       (go, ofp, esl_opt_GetArg(go, 2), sqfp);
+    }
+
+  /* Single sequence retrieval mode */
+  else 
+    {
+      if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n");        
+      char *key     = esl_opt_GetArg(go, 2);
+      char *cstring = esl_opt_GetString(go, "-c");
+      char *newname = esl_opt_GetString(go, "-n");
+
+      /* Open the SSI index for retrieval */
+      if (! sqfp->data.ascii.do_gzip && ! sqfp->data.ascii.do_stdin &&  ! esl_sqio_IsAlignment(sqfp->format)) 
+	{
+	  status = esl_sqfile_OpenSSI(sqfp, NULL);
+	  if      (status == eslEFORMAT)   cmdline_failure(argv[0], "SSI index is in incorrect format\n");
+	  else if (status == eslERANGE)    cmdline_failure(argv[0], "SSI index is in 64-bit format and we can't read it\n");
+	  else if (status != eslOK)        cmdline_failure(argv[0], "Failed to open SSI index\n");
+	}
+
+      /* -c: subsequence retrieval; else full sequence retrieval */
+      if (cstring != NULL)
+	{
+	  uint32_t start, end;
+
+	  status = esl_regexp_ParseCoordString(cstring, &start, &end);
+	  if (status == eslESYNTAX) esl_fatal("-c takes arg of subseq coords <from>..<to>; %s not recognized", cstring);
+	  if (status == eslFAIL)    esl_fatal("Failed to find <from> or <to> coord in %s", cstring);
+
+	  onefetch_subseq(go, ofp, sqfp, newname, key, start, end);
+	  if (ofp != stdout) printf("\n\nRetrieved subsequence %s/%d-%d.\n",  key, start, end);
+	}
+      else 
+	{
+	  onefetch(go, ofp, esl_opt_GetArg(go, 2), sqfp);
+	  if (ofp != stdout) printf("\n\nRetrieved sequence %s.\n",  esl_opt_GetArg(go, 2));
+	}
+    }
+
+  esl_sqfile_Close(sqfp);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+
+/* Create an SSI index file for open sequence file <sqfp>.
+ * Both name and accession of sequences are stored as keys.
+ */
+static void
+create_ssi_index(ESL_GETOPTS *go, ESL_SQFILE *sqfp)
+{
+  ESL_NEWSSI *ns      = NULL;
+  ESL_SQ     *sq      = esl_sq_Create();
+  int         nseq    = 0;
+  char       *ssifile = NULL;
+  uint16_t    fh;
+  int         status;
+
+  esl_strdup(sqfp->filename, -1, &ssifile);
+  esl_strcat(&ssifile, -1, ".ssi", 4);
+  status = esl_newssi_Open(ssifile, TRUE, &ns); /* TRUE is for allowing overwrite. */
+  if      (status == eslENOTFOUND)   esl_fatal("failed to open SSI index %s", ssifile);
+  else if (status == eslEOVERWRITE)  esl_fatal("SSI index %s already exists; delete or rename it", ssifile); /* won't happen, see TRUE above... */
+  else if (status != eslOK)          esl_fatal("failed to create a new SSI index");
+
+  if (esl_newssi_AddFile(ns, sqfp->filename, sqfp->format, &fh) != eslOK)
+    esl_fatal("Failed to add sequence file %s to new SSI index\n", sqfp->filename);
+
+  printf("Creating SSI index for %s...    ", sqfp->filename); 
+  fflush(stdout);
+  
+  while ((status = esl_sqio_ReadInfo(sqfp, sq)) == eslOK)
+    {
+      nseq++;
+      if (sq->name == NULL) esl_fatal("Every sequence must have a name to be indexed. Failed to find name of seq #%d\n", nseq);
+
+      if (esl_newssi_AddKey(ns, sq->name, fh, sq->roff, sq->doff, sq->L) != eslOK)
+	esl_fatal("Failed to add key %s to SSI index", sq->name);
+
+      if (sq->acc[0] != '\0') {
+	if (esl_newssi_AddAlias(ns, sq->acc, sq->name) != eslOK)
+	  esl_fatal("Failed to add secondary key %s to SSI index", sq->acc);
+      }
+      esl_sq_Reuse(sq);
+    }
+  if      (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n",
+					   sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+  else if (status != eslEOF)     esl_fatal("Unexpected error %d reading sequence file %s",
+					    status, sqfp->filename);
+
+  /* Determine if the file was suitable for fast subseq lookup. */
+  if (sqfp->data.ascii.bpl > 0 && sqfp->data.ascii.rpl > 0) {
+    if ((status = esl_newssi_SetSubseq(ns, fh, sqfp->data.ascii.bpl, sqfp->data.ascii.rpl)) != eslOK) 
+      esl_fatal("Failed to set %s for fast subseq lookup.");
+  }
+
+  /* Save the SSI file to disk */
+  if (esl_newssi_Write(ns) != eslOK)  esl_fatal("Failed to write keys to ssi file %s\n", ssifile);
+
+  /* Done - output and exit. */
+  printf("done.\n");
+  if (ns->nsecondary > 0) 
+    printf("Indexed %d sequences (%ld names and %ld accessions).\n", nseq, (long) ns->nprimary, (long) ns->nsecondary);
+  else 
+    printf("Indexed %d sequences (%ld names).\n", nseq, (long) ns->nprimary);
+  printf("SSI index written to file %s\n", ssifile);
+
+  free(ssifile);
+  esl_sq_Destroy(sq);
+  esl_newssi_Close(ns);
+  return;
+}
+
+/* multifetch:
+ * given a file containing lines with one name or key per line;
+ * parse the file line-by-line;
+ * if we have an SSI index available, retrieve the seqs by key
+ * as we see each line;
+ * else, without an SSI index, store the keys in a hash, then
+ * read the entire seq file in a single pass, outputting seqs
+ * that are in our keylist. 
+ * 
+ * Note that with an SSI index, you get the seqs in the order they
+ * appear in the <keyfile>, but without an SSI index, you get seqs in
+ * the order they occur in the seq file.
+ */
+static void
+multifetch(ESL_GETOPTS *go, FILE *ofp, char *keyfile, ESL_SQFILE *sqfp)
+{
+  ESL_KEYHASH    *keys   = esl_keyhash_Create();
+  ESL_FILEPARSER *efp    = NULL;
+  int             nseq   = 0;
+  int             nkeys  = 0;
+  char           *key;
+  int             keylen;
+  int             keyidx;
+  int             status;
+
+  
+  if (esl_fileparser_Open(keyfile, NULL, &efp) != eslOK)  esl_fatal("Failed to open key file %s\n", keyfile);
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  while (esl_fileparser_NextLine(efp) == eslOK)
+    {
+      if (esl_fileparser_GetTokenOnLine(efp, &key, &keylen) != eslOK)
+	esl_fatal("Failed to read seq name on line %d of file %s\n", efp->linenumber, keyfile);
+      
+      status = esl_keyhash_Store(keys, key, keylen, &keyidx);
+      if (status == eslEDUP) esl_fatal("seq key %s occurs more than once in file %s\n", key, keyfile);
+	
+      /* if we have an SSI index, just fetch them as we go. */
+      if (sqfp->data.ascii.ssi != NULL) { onefetch(go, ofp, key, sqfp);  nseq++; }
+      nkeys++;
+    }
+
+  /* If we don't have an SSI index, we haven't fetched anything yet; do it now. */
+  if (sqfp->data.ascii.ssi == NULL) 
+    {
+      ESL_SQ *sq     = esl_sq_Create();
+
+      while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+	{
+	  if ( (sq->name[0] != '\0' && esl_keyhash_Lookup(keys, sq->name, -1, NULL) == eslOK) ||
+	       (sq->acc[0]  != '\0' && esl_keyhash_Lookup(keys, sq->acc,  -1, NULL) == eslOK))
+	    {
+	      if (esl_opt_GetBoolean(go, "-r") )
+		if (esl_sq_ReverseComplement(sq) != eslOK) 
+		  esl_fatal("Failed to reverse complement %s\n", sq->name);
+	      esl_sqio_Write(ofp, sq, eslSQFILE_FASTA, FALSE);
+	      nseq++;
+	    }
+	  esl_sq_Reuse(sq);
+	}
+      if      (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n",
+					       sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+      else if (status != eslEOF)     esl_fatal("Unexpected error %d reading sequence file %s",
+					       status, sqfp->filename);
+      esl_sq_Destroy(sq);
+    }
+  
+  if (nkeys != nseq) esl_fatal("Tried to retrieve %d keys, but only retrieved %d sequences\n", nkeys, nseq);
+
+  if (ofp != stdout) printf("\nRetrieved %d sequences.\n", nseq);
+
+  esl_keyhash_Destroy(keys);
+  esl_fileparser_Close(efp);
+  return;
+}
+  
+
+
+/* onefetch():
+ * Given one <key> (a seq name or accession), retrieve the corresponding sequence.
+ * In SSI mode, we can do this quickly by positioning the file, then regurgitating
+ * every line until the end-of-record marker; we don't even have to parse.
+ * Without an SSI index, we have to parse the file sequentially 'til we find
+ * the one we're after.
+ */
+static void
+onefetch(ESL_GETOPTS *go, FILE *ofp, char *key, ESL_SQFILE *sqfp)
+{
+  ESL_SQ  *sq            = esl_sq_Create();
+  int      do_revcomp    = esl_opt_GetBoolean(go, "-r");
+  char    *newname       = esl_opt_GetString(go, "-n");
+  int      status;
+
+  /* Try to position the file at the desired sequence with SSI. */
+  if (sqfp->data.ascii.ssi != NULL)	
+    {
+      status = esl_sqfile_PositionByKey(sqfp, key);
+      if      (status == eslENOTFOUND) esl_fatal("seq %s not found in SSI index for file %s\n", key, sqfp->filename);
+      else if (status == eslEFORMAT)   esl_fatal("Failed to parse SSI index for %s\n", sqfp->filename);
+      else if (status != eslOK)        esl_fatal("Failed to look up location of seq %s in SSI index of file %s\n", key, sqfp->filename);
+
+      status = esl_sqio_Read(sqfp, sq);
+      if      (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n",
+					       sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+      else if (status == eslEOF)     esl_fatal("Unexpected EOF reading sequence file %s",
+					       status, sqfp->filename);
+      else if (status != eslOK)      esl_fatal("Unexpected error %d reading sequence file %s",
+					       status, sqfp->filename);
+
+      if (strcmp(key, sq->name) != 0 && strcmp(key, sq->acc) != 0) 
+	esl_fatal("whoa, internal error; found the wrong sequence %s, not %s", sq->name, key);
+    }  
+  else 
+    { /* Else, we have to read the whole damn file sequentially until we find the seq */
+      while ((status = esl_sqio_Read(sqfp, sq)) != eslEOF) {
+	if      (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n",
+						 sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+	else if (status != eslOK)      esl_fatal("Unexpected error %d reading sequence file %s",
+						 status, sqfp->filename);
+
+	if (strcmp(key, sq->name) == 0 || strcmp(key, sq->acc) == 0) break;
+	esl_sq_Reuse(sq);
+      }
+      if (status == eslEOF) esl_fatal("Failed to find sequence %s in file %s\n", key, sqfp->filename);
+
+    }
+
+  if (do_revcomp == FALSE && newname == NULL && ! esl_sqio_IsAlignment(sqfp->format)) 
+    { /* If we're not manipulating the sequence in any way, and it's not from an alignment file, we can Echo() it. */
+      if (esl_sqio_Echo(sqfp, sq, ofp) != eslOK) esl_fatal("Echo failed: %s\n", esl_sqfile_GetErrorBuf(sqfp));
+    }
+  else
+    { /* Otherwise we Write() the parsed version. */
+      if (do_revcomp && esl_sq_ReverseComplement(sq) != eslOK) esl_fatal("Failed to reverse complement %s; is it a protein?\n", sq->name);
+      if (newname != NULL) esl_sq_SetName(sq, newname);
+      esl_sqio_Write(ofp, sq, eslSQFILE_FASTA, FALSE);
+    }
+
+  esl_sq_Destroy(sq);
+}
+
+static void
+multifetch_subseq(ESL_GETOPTS *go, FILE *ofp, char *gdffile, ESL_SQFILE *sqfp)
+{
+  ESL_FILEPARSER *efp    = NULL;
+  char           *newname;
+  char           *s;
+  int             n1, n2;
+  int             start, end;
+  char           *source;
+ 
+  if (esl_fileparser_Open(gdffile, NULL, &efp) != eslOK)  esl_fatal("Failed to open key file %s\n", gdffile);
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  while (esl_fileparser_NextLine(efp) == eslOK)
+    {
+      if (esl_fileparser_GetTokenOnLine(efp, &newname, &n1) != eslOK)
+	esl_fatal("Failed to read subseq name on line %d of file %s\n", efp->linenumber, gdffile);
+
+      if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK)
+	esl_fatal("Failed to read start coord on line %d of file %s\n", efp->linenumber, gdffile);
+      start = atoi(s);
+      if(start <= 0) 
+	esl_fatal("Read invalid start coord %d on line %d of file %s (must be positive integer)\n", start, efp->linenumber, gdffile);
+
+      if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK)
+	esl_fatal("Failed to read end coord on line %d of file %s\n", efp->linenumber, gdffile);
+      end   = atoi(s);
+      if(end < 0)
+	esl_fatal("Read invalid end coord %d on line %d of file %s (must be positive integer, or 0 for full length)\n", end, efp->linenumber, gdffile);
+
+      if (esl_fileparser_GetTokenOnLine(efp, &source, &n2) != eslOK)
+	esl_fatal("Failed to read source seq name on line %d of file %s\n", efp->linenumber, gdffile);
+
+      onefetch_subseq(go, ofp, sqfp, newname, source, start, end);
+    }
+  esl_fileparser_Close(efp);
+}
+
+static void
+onefetch_subseq(ESL_GETOPTS *go, FILE *ofp, ESL_SQFILE *sqfp, char *newname, char *key, uint32_t given_start, uint32_t given_end)
+{
+  int    start, end;
+  int    do_revcomp;
+  ESL_SQ *sq = esl_sq_Create();
+
+  if (sqfp->data.ascii.ssi == NULL) esl_fatal("no ssi index");
+
+  /* reverse complement indicated by coords. */
+  /* -c 52: would be 52,0, so watch out for given_end = 0 case */
+  if (given_end != 0 && given_start > given_end)
+    { start = given_end;   end = given_start; do_revcomp = TRUE;  }
+  else
+    { start = given_start; end = given_end;   do_revcomp = FALSE; }
+
+  if (esl_sqio_FetchSubseq(sqfp, key, start, end, sq) != eslOK) esl_fatal(esl_sqfile_GetErrorBuf(sqfp));
+
+  if      (newname != NULL) esl_sq_SetName(sq, newname);
+  else                      esl_sq_FormatName(sq, "%s/%d-%d", key, given_start, (given_end == 0) ? sq->L : given_end);
+
+  /* Two ways we might have been asked to revcomp: by coord, or by -r option */
+  /* (If both happen, they'll cancel each other out) */
+  if (do_revcomp) 
+    if (esl_sq_ReverseComplement(sq) != eslOK) esl_fatal("Failed to reverse complement %s; is it a protein?\n", sq->name);
+  if (esl_opt_GetBoolean(go, "-r"))
+    if (esl_sq_ReverseComplement(sq) != eslOK) esl_fatal("Failed to reverse complement %s; is it a protein?\n", sq->name);
+
+  esl_sqio_Write(ofp, sq, eslSQFILE_FASTA, FALSE);
+  esl_sq_Destroy(sq);
+}
+
+
diff --git a/miniapps/esl-sfetch.man b/miniapps/esl-sfetch.man
new file mode 100644
index 0000000..054af71
--- /dev/null
+++ b/miniapps/esl-sfetch.man
@@ -0,0 +1,290 @@
+.TH "esl-sfetch" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-sfetch - retrieve (sub-)sequences from a sequence file
+
+.SH SYNOPSIS
+
+.TP
+Single sequence retrieval:
+.B esl-sfetch
+.I [options]
+.I seqfile
+.I key
+
+.TP
+Single subsequence retrieval:
+.B esl-sfetch -c
+.I <from>..<to>
+.I seqfile
+.I key
+
+.TP
+Multiple sequence retrieval:
+.B esl-sfetch -f
+.I [options]
+.I seqfile
+.I keyfile
+
+.TP
+Multiple subsequence retrieval:
+.B esl-sfetch -Cf 
+.I [options]
+.I seqfile
+.I subseq-coord-file
+
+.TP
+Indexing a sequence file for retrieval:
+.B esl-afetch --index
+.I msafile
+
+
+.SH DESCRIPTION
+
+.pp
+.B esl-sfetch
+retrieves one or more sequences or subsequences from
+.I seqfile.
+
+.pp
+The 
+.I seqfile 
+should be indexed first using 
+.B esl-sfetch --index <seqfile>.
+This creates an SSI index file
+.I <seqfile>.ssi.
+An SSI file is not necessary, but it greatly accelerates
+retrieval.
+
+.pp
+To retrieve a single complete sequence, do
+.B esl-sfetch <seqfile> <key>
+where 
+.I key
+is the name or accession of the desired sequence.
+
+.pp
+To retrieve a single subsequence rather than a complete
+sequence, use the 
+.I -c start-end
+option to provide start and end coordinates. The start
+and end coordinates are provided as one string, separated
+by any nonnumeric, nonwhitespace character or characters you like;
+for example, 
+.I -c 23..100
+, 
+.I -c 23/100
+, or
+.I -c 23-100
+all work. To retrieve a suffix of a subsequence, you
+can omit the 
+.I end
+; for example,
+.I -c 23:
+would work.
+
+.pp
+To retrieve more than one complete sequence at once, you may use the 
+.I -f
+option, and the second command line argument will specify the
+name of a 
+.I keyfile
+that contains a list of names or accessions, one per line; the first
+whitespace-delimited field on each line of this file is parsed as the
+name/accession.
+
+.pp
+To retrieve more than one subsequence at once, use the
+.I -C
+option in addition to
+.I -f
+, and now the second argument is parsed as a list of subsequence
+coordinate lines, with each line containing at least four
+whitespace-delimited fields: 
+.I new_name
+.I from
+.I to 
+.I name/accession.
+For each such line, sequence
+.I name/accession
+is found, a subsequence
+.I from..to is extracted,
+and the subsequence is renamed 
+.I new_name 
+before being output. 
+
+ 
+.pp
+In DNA/RNA files, you may extract (sub-)sequences in reverse complement
+orientation in two different ways: either by providing a 
+.I from
+coordinate that is greater than 
+.I to, 
+or by providing the 
+.I -r
+option.
+
+.pp
+The sequence file may be in any of several different common unaligned
+sequence formats including FASTA, GenBank, EMBL, UniProt, or DDBJ. It
+may also be an alignment file, in Stockholm format for example. By
+default the file format is autodetected. The 
+.I --informat <s> 
+option allows you to specify the format and override
+autodetection. This
+option may be useful for making 
+.B esl-sfetch 
+more robust, because format autodetection may fail on unusual files.
+
+.pp
+When the
+.I -f 
+option is used to do multiple (sub-)sequence retrieval, the file
+argument may be - (a single dash), in which case the list of
+names/accessions (or subsequence coordinate lines) is read from
+standard input. However, because a standard input stream can't be SSI indexed,
+(sub-)sequence retrieval from 
+.I stdin
+may be slow.
+
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help; includes version number and summary of
+all options, including expert options.
+
+.TP
+.BI -c " <coords>"
+Retrieve a subsequence with start and end coordinates specified by the 
+.I <coords>
+string. This string consists of start 
+and end coordinates separated
+by any nonnumeric, nonwhitespace character or characters you like;
+for example, 
+.I -c 23..100
+, 
+.I -c 23/100
+, or
+.I -c 23-100
+all work. To retrieve a suffix of a subsequence, you
+can omit the 
+.I end
+; for example,
+.I -c 23:
+would work.
+To specify reverse complement (for DNA/RNA sequence),
+specify 
+.I <from> 
+greater than
+.I <to>;
+for example,
+.I -c 100..23
+retrieves the reverse complement strand from 100 to 23.
+
+.TP
+.B -f
+Interpret the second argument as a 
+.I keyfile
+instead of as just one
+.I key. 
+The first whitespace-limited field on each line of 
+.I keyfile
+is interpreted as a name or accession to be fetched.
+This option doesn't work with the
+.B --index
+option.  Any other fields on a line after the first one are
+ignored. Blank lines and lines beginning with # are ignored.
+
+.TP
+.BI -o " <f>"
+Output retrieved sequences to a file 
+.I <f>
+instead of to
+.I stdout.
+
+
+.TP
+.BI -n " <s>"
+Rename the retrieved (sub-)sequence 
+.I <s>.
+This is incompatible with the
+.I -f
+option.
+
+.TP
+.B -r
+Reverse complement the retrieved (sub-)sequence. This only works for
+DNA/RNA sequences.
+
+.TP
+.B -C
+Multiple subsequence retrieval mode, with 
+.I -f
+option (required). Specifies that the second command line argument
+is to be parsed as a subsequence coordinate file, consisting of
+lines containing four whitespace-delimited fields:
+.I new_name
+.I from
+.I to 
+.I name/accession.
+For each such line, sequence
+.I name/accession
+is found, a subsequence
+.I from..to is extracted,
+and the subsequence is renamed 
+.I new_name 
+before being output. 
+Any other fields after the first four are ignored. Blank lines
+and lines beginning in # are ignored.
+
+
+.TP
+.B -O
+Output retrieved sequence to a file named
+.I <key>.
+This is a convenience for saving some typing:
+instead of 
+.B esl-sfetch -o SRPA_HUMAN swissprot SRPA_HUMAN
+you can just type
+.B esl-sfetch -O swissprot SRPA_HUMAN.
+The
+.B -O 
+option only works if you're retrieving a
+single alignment; it is incompatible with 
+.B -f.
+
+.TP
+.B --index
+Instead of retrieving a
+.I key,
+the special command
+.B esl-afetch --index
+.I msafile
+produces an SSI index of the names and accessions
+of the alignments in
+the 
+.I msafile.
+Indexing should be done once on the
+.I msafile
+to prepare it for all future fetches.
+
+.SH EXPERT OPTIONS
+
+.TP
+.BI --informat " <s>"
+Specify that the sequence file is in format
+.I <s>,
+where 
+.I <s> 
+may be FASTA, GenBank, EMBL, UniProt, DDBJ, or Stockholm.  This string
+is case-insensitive ("genbank" or "GenBank" both work, for example).
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-shuffle.c b/miniapps/esl-shuffle.c
new file mode 100644
index 0000000..5cc93c4
--- /dev/null
+++ b/miniapps/esl-shuffle.c
@@ -0,0 +1,394 @@
+/* Shuffling or generating random sequences.
+ * 
+ * SRE, Wed Jan 16 15:30:05 2008 [UA5230 to New York]
+ * SVN $Id$
+ * from squid's shuffle (1995)
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_composition.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msashuffle.h"
+#include "esl_random.h"
+#include "esl_randomseq.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_vectorops.h"
+
+static char banner[] = "shuffling or generating random sequences";
+static char usage1[] = "   [options] <seqfile>  (shuffles individual sequences)";
+static char usage2[] = "-A [options] <msafile>  (shuffles alignment columnwise)";
+static char usage3[] = "-Q [options] <qrnafile> (shuffles QRNA pairwise alignments)";
+static char usage4[] = "-G [options]            (generates random sequences)";
+
+
+#define MODE_OPTS "-S,-A,-G,-Q"	           /* toggle group, modes (seqfile, msafile, none) */
+#define SHUF_OPTS "-m,-d,-k,-0,-1,-r,-w"   /* toggle group, seq shuffling options          */
+#define ALPH_OPTS "--rna,--dna,--amino"    /* toggle group, alphabet type options          */
+
+static ESL_OPTIONS options[] = {
+  /* name         type           default   env range      togs  reqs  incomp      help                                      docgroup */
+  { "-h",         eslARG_NONE,    FALSE, NULL, NULL,      NULL, NULL, NULL, "help; show brief info on version and usage",          1 },
+  { "-o",         eslARG_OUTFILE,  NULL, NULL, NULL,      NULL, NULL, NULL, "direct output data to file <f>",                      1 },
+  { "-N",         eslARG_INT,       "1", NULL,"n>0",      NULL, NULL, NULL, "generate <n> samples (per input seq/msa)",            1 },
+  { "-L",         eslARG_INT,       "0", NULL,"n>=0",     NULL, NULL, NULL, "truncate outputs to length <n>",                      1 },
+
+  /* Options for shuffling/generating based on input sequences */
+  { "-m",         eslARG_NONE,"default", NULL, NULL, SHUF_OPTS, "-S", NULL, "shuffle preserving monoresidue composition",          2 },
+  { "-d",         eslARG_NONE,    FALSE, NULL, NULL, SHUF_OPTS, "-S", NULL, "shuffle preserving mono- and di-residue composition", 2 },
+  { "-k",         eslARG_INT,     FALSE, NULL,"n>0", SHUF_OPTS, "-S", NULL, "shuffle nonoverlapping <n>-mers",                     2 },
+  { "-0",         eslARG_NONE,    FALSE, NULL, NULL, SHUF_OPTS, "-S", NULL, "generate with 0th order Markov properties per input", 2 },
+  { "-1",         eslARG_NONE,    FALSE, NULL, NULL, SHUF_OPTS, "-S", NULL, "generate with 1st order Markov properties per input", 2 },
+  { "-r",         eslARG_NONE,    FALSE, NULL, NULL, SHUF_OPTS, "-S", NULL, "reverse each input",                                  2 },
+  { "-w",         eslARG_INT,     FALSE, NULL,"n>0", SHUF_OPTS, "-S", NULL, "regionally shuffle inputs in window size <n>",        2 },
+
+  /* Options for shuffling multiple alignments column-wise */
+  { "-b",         eslARG_NONE,    FALSE, NULL, NULL,      NULL, "-A", NULL, "take bootstrapping samples",                          3 },
+
+  /* Options for generating sequences de novo */
+  { "--rna",      eslARG_NONE,"default", NULL, NULL, ALPH_OPTS, "-G", NULL, "generate RNA sequence",                               4 },
+  { "--dna",      eslARG_NONE,    FALSE, NULL, NULL, ALPH_OPTS, "-G", NULL, "generate DNA sequence",                               4 },
+  { "--amino",    eslARG_NONE,    FALSE, NULL, NULL, ALPH_OPTS, "-G", NULL, "generate protein sequence",                           4 },
+
+  /* Other "expert" options */
+  { "--seed",     eslARG_INT,       "0", NULL,"n>=0",     NULL, NULL, NULL, "set random number generator's seed to <n>",           5 },
+  { "--informat", eslARG_STRING,  FALSE, NULL, NULL,      NULL, NULL, NULL, "specify that input file is in format <s>",            5 },
+
+  /* "undocumented" options (these are documented w/ command line usage, and implemented as options) */
+  { "-S",         eslARG_NONE,"default", NULL, NULL, MODE_OPTS, NULL, NULL, "shuffle individual input sequences",                  99 },
+  { "-A",         eslARG_NONE,    FALSE, NULL, NULL, MODE_OPTS, NULL, NULL, "input is an <msafile> to be shuffled by columns",     99 },
+  { "-G",         eslARG_NONE,    FALSE, NULL, NULL, MODE_OPTS, "-L", NULL, "generate de novo (the following options are valid)",  99 },
+  { "-Q",         eslARG_NONE,    FALSE, NULL, NULL, MODE_OPTS, NULL, NULL, "shuffle input QRNA FASTA file",                       99 },
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+
+static void
+cmdline_failure(char *argv0, char *format, ...)
+{
+  va_list argp;
+
+  va_start(argp, format);
+  vfprintf(stderr, format, argp);
+  va_end(argp);
+  esl_usage(stdout, argv0, usage1);
+  esl_usage(stdout, argv0, usage2);
+  esl_usage(stdout, argv0, usage3);
+  esl_usage(stdout, argv0, usage4);
+  printf("\nTo see more help on available options, do %s -h\n\n", argv0);
+  exit(1);
+}
+
+static void
+cmdline_help(char *argv0, ESL_GETOPTS *go) 
+{
+  esl_banner(stdout, argv0, banner);
+  esl_usage (stdout, argv0, usage1);
+  esl_usage (stdout, argv0, usage2);
+  esl_usage (stdout, argv0, usage3);
+  esl_usage (stdout, argv0, usage4);
+  puts("\n where general options are:");
+  esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+  puts("\n options for shuffling input sequences (default mode):");
+  esl_opt_DisplayHelp(stdout, go, 2, 2, 80);
+  puts("\n options for generating sequences de novo (w/ -G option):");
+  esl_opt_DisplayHelp(stdout, go, 4, 2, 80);
+  puts("\n other infrequently used options:");
+  esl_opt_DisplayHelp(stdout, go, 5, 2, 80);
+  exit(0);
+}
+
+
+/* msa_shuffling()
+ * 
+ * Shuffling multiple sequence alignments
+ */
+static int
+msa_shuffling(ESL_GETOPTS *go, ESL_RANDOMNESS *r, FILE *ofp, int outfmt)
+{
+  char         *msafile = esl_opt_GetArg(go, 1);
+  int           infmt   = eslMSAFILE_UNKNOWN;
+  ESL_MSAFILE  *afp     = NULL;
+  ESL_MSA      *msa     = NULL;
+  ESL_MSA      *shuf    = NULL;
+  int           N       = esl_opt_GetInteger(go, "-N");
+  int           i;
+  int           status;
+
+  if ( (status = esl_msafile_Open(NULL, msafile, NULL, infmt, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+  
+  while ((status = esl_msafile_Read(afp, &msa)) != eslEOF)
+    {
+      if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+
+      shuf = esl_msa_Clone(msa);
+
+      for (i = 0; i < N; i++)
+	{
+	  if (esl_opt_GetBoolean(go, "--boot")) esl_msashuffle_Bootstrap(r, msa, shuf);
+	  else                                  esl_msashuffle_Shuffle  (r, msa, shuf);
+
+	  /* Set the name of the shuffled alignment */
+	  if (msa->name != NULL) {
+	    if (esl_opt_GetBoolean(go, "--boot")) {
+	      if (N > 1) esl_msa_FormatName(shuf, "%s-sample-%d", msa->name, i);
+	      else       esl_msa_FormatName(shuf, "%s-sample",    msa->name);
+	    } else {
+	      if (N > 1) esl_msa_FormatName(shuf, "%s-shuffle-%d", msa->name, i);
+	      else       esl_msa_FormatName(shuf, "%s-shuffle",    msa->name);
+	    }
+	  } else {
+	    if (esl_opt_GetBoolean(go, "--boot")) {
+	      if (N > 1) esl_msa_FormatName(shuf, "sample-%d", i);
+	      else       esl_msa_FormatName(shuf, "sample");
+	    } else {
+	      if (N > 1) esl_msa_FormatName(shuf, "shuffle-%d", i);
+	      else       esl_msa_FormatName(shuf, "shuffle");
+	    }
+	  }
+
+	  esl_msafile_Write(ofp, shuf, afp->format);
+	}
+
+      esl_msa_Destroy(shuf);
+      esl_msa_Destroy(msa);
+    }
+
+  esl_msafile_Close(afp);
+  return eslOK;
+}
+
+
+/* seq_generation()
+ *
+ * Generating sequences.
+ */
+static int
+seq_generation(ESL_GETOPTS *go, ESL_RANDOMNESS *r, FILE *ofp, int outfmt)
+{
+  ESL_ALPHABET *abc = NULL;
+  ESL_SQ       *sq  = NULL;
+  double       *fq  = NULL;
+  int           alphatype = eslUNKNOWN;   // static checkers can't see that 1 of --rna, --dna, --amino must be true
+  int           N         = esl_opt_GetInteger(go, "-N");
+  int           L         = esl_opt_GetInteger(go, "-L");
+  int           i;
+  int           status;
+
+  if (L <= 0) esl_fatal("To generate sequences, set -L option (length of generated seqs) > 0 ");
+  if (esl_opt_GetBoolean(go, "--rna"))   alphatype = eslRNA;
+  if (esl_opt_GetBoolean(go, "--dna"))   alphatype = eslDNA;
+  if (esl_opt_GetBoolean(go, "--amino")) alphatype = eslAMINO;
+  abc = esl_alphabet_Create(alphatype);
+  sq  = esl_sq_CreateDigital(abc);
+  esl_sq_GrowTo(sq, L);
+
+  /* Pick the iid frequency distribution to use */
+  ESL_ALLOC(fq, sizeof(double) * abc->K);
+  switch (alphatype) {
+  case eslRNA:
+  case eslDNA:    esl_vec_DSet(fq, 4, 0.25); break;
+  case eslAMINO:  esl_composition_SW34(fq);  break;
+  default:        esl_vec_DSet(fq, abc->K, 1.0 / (double) abc->K); break;
+  }
+    
+  /* generate */
+  for (i = 0; i < N; i++)
+    {
+      esl_rsq_xIID(r, fq, abc->K, L, sq->dsq);
+      if (N > 1) esl_sq_FormatName(sq, "random%d", i);
+      else       esl_sq_SetName(sq, "random");
+      sq->n = L;
+      esl_sqio_Write(ofp, sq, outfmt, FALSE);
+    }
+
+  free(fq);
+  esl_alphabet_Destroy(abc);
+  esl_sq_Destroy(sq);
+  return eslOK;
+
+ ERROR:
+  if (fq != NULL) free(fq);
+  esl_alphabet_Destroy(abc);
+  esl_sq_Destroy(sq);
+  return status;
+}
+
+
+/* seq_shuffling()
+ * SRE, Tue Jan 22 08:35:51 2008 [Market Street Cafe, Leesburg]
+ *
+ * Shuffling of input sequences.
+ *
+ * Fixed-length (L>0) vs. full-length (L=0) modes handled differently.
+ * In fixed-length mode:
+ *   <shuff->seq> only needs to be allocated once, for L
+ *   <targ> is an allocated copy of a random subseq of length L
+ *   sequences < L residues long can't be shuffled
+ * In full-length mode:
+ *   <shuff->seq> is grown to length <sq->n> for each input seq
+ *   <targ> just points to <sq->seq>
+ */
+static int 
+seq_shuffling(ESL_GETOPTS *go, ESL_RANDOMNESS *r, FILE *ofp, int outfmt)
+{
+  char       *seqfile = esl_opt_GetArg(go, 1);
+  int         infmt   = eslSQFILE_UNKNOWN;
+  ESL_SQFILE *sqfp    = NULL;
+  ESL_SQ     *sq      = esl_sq_Create();
+  ESL_SQ     *shuff   = esl_sq_Create();
+  char       *targ    = NULL;
+  int         N       = esl_opt_GetInteger(go, "-N");
+  int         L       = esl_opt_GetInteger(go, "-L"); /* L>0 means select random fixed-len subseqs */
+  int         kmers   = 0;
+  int         i;
+  int         status;
+  
+  if (esl_opt_GetString(go, "--informat") != NULL) {
+    infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat"));
+    if (infmt == eslSQFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat"); 
+  }
+
+  if (esl_opt_IsOn(go, "-k")) kmers = esl_opt_GetInteger(go, "-k");
+
+
+  status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp);
+  if      (status == eslENOTFOUND) esl_fatal("No such file %s", seqfile);
+  else if (status == eslEFORMAT)   esl_fatal("Format of seqfile %s unrecognized.", seqfile);
+  else if (status == eslEINVAL)    esl_fatal("Can't autodetect stdin or .gz.");
+  else if (status != eslOK)        esl_fatal("Open failed, code %d.", status);
+
+  if (L>0) { 
+    esl_sq_GrowTo(shuff, L);
+    shuff->n = L;
+    ESL_ALLOC(targ, sizeof(char) * (L+1));
+  }
+
+  while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
+    {
+      if (L == 0) {		     /* shuffling entire sequence   */
+	esl_sq_GrowTo(shuff, sq->n); /* make sure shuff can hold sq */	  
+	shuff->n = sq->n;
+	targ = sq->seq;
+      } else {
+	if (sq->n < L) continue;     /* reject seqs < L long */
+      }
+
+      for (i = 0; i < N; i++)
+	{
+	  if (L > 0) {		/* fixed-len mode: copy a random subseq */
+	    int pos = esl_rnd_Roll(r, sq->n - L + 1);
+	    strncpy(targ, sq->seq + pos, L);
+	    targ[L] = '\0';	    
+	  }
+
+	  /* Do the requested kind of shuffling */
+	  if      (esl_opt_GetBoolean(go, "-m"))  esl_rsq_CShuffle     (r, targ,        shuff->seq);  /* monoresidue shuffling */
+	  else if (esl_opt_GetBoolean(go, "-d"))  esl_rsq_CShuffleDP   (r, targ,        shuff->seq);  /* diresidue shuffling */
+	  else if (esl_opt_IsOn      (go, "-k"))  esl_rsq_CShuffleKmers(r, targ, kmers, shuff->seq);  /* diresidue shuffling */
+	  else if (esl_opt_GetBoolean(go, "-0"))  esl_rsq_CMarkov0     (r, targ,        shuff->seq);  /* 0th order Markov */
+	  else if (esl_opt_GetBoolean(go, "-1"))  esl_rsq_CMarkov1     (r, targ,        shuff->seq);  /* 1st order Markov */
+	  else if (esl_opt_GetBoolean(go, "-r"))  esl_rsq_CReverse     (   targ,        shuff->seq);  /* reverse */
+	  else if (esl_opt_IsOn      (go, "-w")) { /* regionally shuffle */	
+	    int W= esl_opt_GetInteger(go, "-w"); esl_rsq_CShuffleWindows(r, targ, W, shuff->seq);
+	  }
+
+	  /* Set the name of the shuffled sequence */
+	  if (N > 1) esl_sq_FormatName(shuff, "%s-shuffled-%d", sq->name, i);
+	  else       esl_sq_FormatName(shuff, "%s-shuffled", sq->name);
+
+	  /* Output the resulting sequence */
+	  esl_sqio_Write(ofp, shuff, outfmt, FALSE);
+
+	  /* don't need to reuse the shuffled sequence: we will use exactly the same memory */
+	}
+      esl_sq_Reuse(sq);
+    }
+  if      (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n",
+					   sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+  else if (status != eslEOF)     esl_fatal("Unexpected error %d reading sequence file %s",
+					    status, sqfp->filename);
+
+  if (L>0) free(targ);
+  esl_sq_Destroy(shuff);
+  esl_sq_Destroy(sq);
+  esl_sqfile_Close(sqfp);
+  return eslOK;
+
+ ERROR:
+  if (targ != NULL) free(targ);
+  esl_sq_Destroy(shuff);
+  esl_sq_Destroy(sq);
+  esl_sqfile_Close(sqfp);
+  return status;
+}
+
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go     = NULL;	/* application configuration       */
+  ESL_RANDOMNESS *r      = NULL;	/* random number generator         */
+  FILE           *ofp    = NULL;        /* data output stream              */
+  int             outfmt = eslSQFILE_FASTA;
+
+  /* Parse command line */
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) 
+    cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK)
+    cmdline_failure(argv[0], "Error in app configuration: %s\n",   go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") )
+    cmdline_help(argv[0], go);
+  
+  /* Open the output data file, if any */
+  if (esl_opt_GetString(go, "-o") != NULL)
+    {
+      if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL)
+	esl_fatal("Failed to open output file %s\n", esl_opt_GetString(go, "-o"));
+    }
+  else ofp = stdout;
+
+  /* Initialize */
+  r = esl_randomness_Create(esl_opt_GetInteger(go, "--seed"));
+
+  /* Hand off execution to one of the three modes */
+  if (esl_opt_GetBoolean(go, "-A"))   /* Alignment shuffling */
+    {
+      if (esl_opt_ArgNumber(go) != 1) 
+	cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); 
+
+      msa_shuffling(go, r, ofp, outfmt);
+    }
+  else if (esl_opt_GetBoolean(go, "-G")) /* Sequence generation */
+    {
+      if (esl_opt_ArgNumber(go) != 0) 
+	cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); 
+
+      seq_generation(go, r, ofp, outfmt);
+    }
+  else if (esl_opt_GetBoolean(go, "-S")) /* Sequence shuffling */
+    {
+      if (esl_opt_ArgNumber(go) != 1) 
+	cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); 
+
+      seq_shuffling(go, r, ofp, outfmt);
+    }
+
+  if (esl_opt_GetString(go, "-o") != NULL) fclose(ofp);
+  esl_randomness_Destroy(r);
+  esl_getopts_Destroy(go);
+  return 0;
+} 
+
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/ 
diff --git a/miniapps/esl-shuffle.itest.pl b/miniapps/esl-shuffle.itest.pl
new file mode 100755
index 0000000..0c8e568
--- /dev/null
+++ b/miniapps/esl-shuffle.itest.pl
@@ -0,0 +1,54 @@
+#! /usr/bin/perl
+
+# Integrated test of esl-shuffle miniapp
+#
+# Usage:     ./esl-shuffle.itest.pl <esl-shuffle binary> <tmpfile prefix>
+# Example:   ./esl-shuffle.itest.pl ./esl-shuffle        foo
+#
+# SRE, Tue Nov 10 17:27:22 2009
+# SVN $Id$
+
+$eslshuffle = shift;
+$tmppfx     = shift;
+
+if (! -x "$eslshuffle") { die "FAIL: didn't find esl-shuffle binary $eslshuffle"; }
+
+open(TESTFILE, ">$tmppfx.fa") || die "FAIL: couldn't open $tmppfx.fa for writing test seqfile";
+print TESTFILE << "EOF";
+>seq1
+ACDEFGHIKLMNPQRSTVWY
+>seq2
+ACACACACACACACACACAC
+>seq3
+WYWYWYWYWYWYWYWYWYWY
+EOF
+close TESTFILE;
+
+# Use of --seed makes shuffled outputs reproducible, regressable.
+# Until you change the RNG again, anyway. If you do that, all these
+# regressions need to change.
+#
+ at output = `$eslshuffle --seed 42 $tmppfx.fa`;
+if ($? != 0)                                 { die "FAIL: esl-shuffle failed unexpectedly"; }
+if ($output[0] !~ /^>seq1-shuffled$/)        { die "FAIL: shuffle output is incorrect";     }
+if ($output[1] !~ /^TIGEYHFWCKVSALQNPDRM$/)  { die "FAIL: shuffle output is incorrect";     }
+if ($output[2] !~ /^>seq2-shuffled$/)        { die "FAIL: shuffle output is incorrect";     }
+if ($output[3] !~ /^CACAAAACCCACCAACAACC$/)  { die "FAIL: shuffle output is incorrect";     }
+if ($output[4] !~ /^>seq3-shuffled$/)        { die "FAIL: shuffle output is incorrect";     }
+if ($output[5] !~ /^WWYYWWYWWYYWYYWYYWYW$/)  { die "FAIL: shuffle output is incorrect";     }
+
+
+# We had bugs in the -N option at one point.  This test exercises the
+# bugs.
+#
+ at output = `$eslshuffle --seed 42 -N 2 $tmppfx.fa`;
+if ($? != 0)                                 { die "FAIL: esl-shuffle failed unexpectedly"; }
+if ($output[2] !~ /^>seq1-shuffled-1$/)      { die "FAIL: shuffle output is incorrect";     }
+if ($output[3] !~ /^NTEPDRFIQYKLCMWVHAGS$/)  { die "FAIL: shuffle output is incorrect";     }
+
+
+
+
+print "ok\n"; 
+unlink "$tmppfx.fa";
+exit 0;
diff --git a/miniapps/esl-shuffle.man b/miniapps/esl-shuffle.man
new file mode 100644
index 0000000..15ecca7
--- /dev/null
+++ b/miniapps/esl-shuffle.man
@@ -0,0 +1,231 @@
+.TH "esl-shuffle" 1  "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-shuffle - shuffling sequences or generating random ones
+
+.SH SYNOPSIS
+
+.TP
+Shuffling individual sequences:
+.B esl-shuffle 
+.I [options]
+.I seqfile
+
+.TP 
+Generating random sequences:
+.B esl-shuffle -G 
+.I [options]
+
+.TP
+Shuffling multiple sequence alignments columnwise:
+.B esl-shuffle -A
+.I [options]
+.I msafile
+
+.TP
+Shuffling QRNA pairwise alignment input files:
+.B esl-shuffle -Q
+.I [options]
+.I qrna-alignment-file
+
+.SH DESCRIPTION
+
+.pp
+.B esl-shuffle
+is capable of four different modes of operation.
+
+.pp
+By default, 
+.B esl-shuffle
+reads individual sequences from 
+.I seqfile
+, shuffles them, and outputs the shuffled sequence.
+By default, shuffling is done by preserving monoresidue
+composition; other options are listed below.
+
+.pp
+With the 
+.I -G 
+option,
+.B esl-shuffle
+generates some number of random sequences of some length in
+some alphabet. The
+.I -N
+option controls the number (default is 1), the
+.I -L
+option controls the length (default is 0), 
+and the 
+.I --amino,
+.I --dna,
+and 
+.I --rna
+options control the alphabet.
+
+.pp
+With the 
+.I -A
+option, 
+.B esl-shuffle
+reads one or more multiple alignments from
+.I <msafile>
+and shuffles them columnwise.
+
+
+.pp 
+Finally, the
+.I -Q 
+option is for shuffling pairwise alignments in QRNA input files.  A
+QRNA input file is a quasi-FASTA file, where each successive pair of
+sequences is interpreted as a pairwise alignment; sequences may
+contain gap characters (period, dash, or underscore: .-_) and these
+pairs of sequences must have exactly the same aligned length.
+
+.pp
+An unaligned sequence file to be shuffled may be in any of several
+different common unaligned sequence formats including FASTA, GenBank,
+EMBL, UniProt, or DDBJ; alignment files are also valid, in which case
+individual unaligned sequences are sequentially plucked from the
+alignment. By default the file format is autodetected. The
+.I --informat <s> 
+option allows you to specify the format and override
+autodetection. This
+option may be useful for making 
+.B esl-shuffle 
+more robust, because format autodetection may fail on unusual files.
+
+.SH GENERAL OPTIONS
+
+.TP
+.B -h 
+Print brief help;  includes version number and summary of
+all options, including expert options.
+
+.TP
+.BI -o " <f>"
+Direct output to a file named
+.I <f>
+rather than to stdout.
+
+.TP
+.BI -N " <n>"
+Generate 
+.I <n>
+sequences, or
+.I <n> 
+perform independent shuffles per input sequence or alignment.
+
+.TP
+.BI -L " <n>"
+Generate sequences of length
+.I <n>,
+or truncate output shuffled sequences or alignments to a length of
+.I <n>.
+
+
+
+
+.SH SEQUENCE SHUFFLING OPTIONS
+
+These options only apply in default (sequence shuffling) mode.  They
+are mutually exclusive.
+
+.TP
+.B -m
+Monoresidue shuffling (the default): preserve monoresidue composition exactly.
+Uses the so-called Fisher/Yates algorithm (Knuth's "Algorithm P").
+
+.TP
+.B -d
+Diresidue shuffling; preserve diresidue composition exactly.  Uses the
+Altschul/Erickson algorithm (Altschul and Erickson, 1986). A more
+efficient algorithm (Kandel and Winkler 1996) is known but has not yet
+been implemented in Easel.
+
+.TP
+.B -0
+0th order Markov generation: generate a sequence of the same length
+with the same 0th order Markov frequencies. Such a sequence will
+approximately preserve the monoresidue composition of the input.
+
+.TP
+.B -1
+1st order Markov generation: generate a sequence of the same length
+with the same 1st order Markov frequencies. Such a sequence will 
+approximately preserve the diresidue composition of the input.
+
+.TP
+.B -r
+Reversal; reverse each input.
+
+.TP
+.BI -w " <n>"
+Regionally shuffle the input in nonoverlapping windows of size 
+.I <n> 
+residues, preserving exact monoresidue composition in each window.
+ 
+
+
+.SH MULTIPLE ALIGNMENT SHUFFLING OPTIONS
+
+.TP
+.B -b
+Sample columns with replacement, in order to generate a
+bootstrap-resampled alignment dataset. 
+
+
+.SH SEQUENCE GENERATION OPTIONS
+
+One of these must be selected.
+
+.TP
+.B --amino
+Generate amino acid sequences.
+
+.TP 
+.B --dna
+Generate DNA sequences.
+
+.TP 
+.B --rna
+Generate RNA sequences (the default).
+
+
+
+.SH EXPERT OPTIONS
+
+.TP
+.BI --informat " <s>"
+Specify that the sequence file is in format
+.I <s>,
+where 
+.I <s> 
+may be FASTA, GenBank, EMBL, UniProt, DDBJ, or Stockholm.  This string
+is case-insensitive ("genbank" or "GenBank" both work, for example).
+
+.TP
+.BI --seed " <n>"
+Specify the seed for the random number generator, where the seed
+.I <n>
+is an integer greater than zero. This can be used to make the results
+of 
+.B esl-shuffle 
+reproducible. The default is to choose the random number generator
+seed by calling 
+.B time(). 
+Note that because 
+.B time()
+likely returns the time in units of seconds, 
+two calls to
+.B esl-shuffle 
+within the same second will use the same seed and generate
+identical random number sequences; you may want to avoid this.
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
+
diff --git a/miniapps/esl-ssdraw.c b/miniapps/esl-ssdraw.c
new file mode 100644
index 0000000..1396af8
--- /dev/null
+++ b/miniapps/esl-ssdraw.c
@@ -0,0 +1,7485 @@
+/* Draw secondary structure diagrams given a postscript SS template.
+ * Initial development of this program was for SSU rRNA structures
+ * with templates derived from Gutell's CRW (Comparative RNA Website,
+ * http://www.rna.ccbb.utexas.edu/). 
+ *
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <math.h>
+#include <time.h>
+
+#include "easel.h"
+#include "esl_distance.h"
+#include "esl_dmatrix.h"
+#include "esl_fileparser.h"
+#include "esl_getopts.h"
+#include "esl_keyhash.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msafile2.h"
+#include "esl_sq.h"
+#include "esl_sqio.h"
+#include "esl_stack.h"
+#include "esl_tree.h"
+#include "esl_vectorops.h"
+#include "esl_wuss.h"
+
+#define SSDRAWINFINITY 987654321
+#define ERRBUFSIZE 1024
+#define MAXMBWITHOUTFORCE 100
+
+#define ALIMODE 0
+#define INDIMODE 1
+#define SIMPLEMASKMODE 2
+#define INFILEMODE 3
+
+/* CMYK colors, a 4 value array defines a color with values 0..1, 
+ * [0] is cyan value, [1] is magenta, [2] is yellow, [3] is black */
+#define NCMYK 4
+#define ICYAN 0
+#define IMGTA 1
+#define IYELW 2
+#define IBLCK 3
+
+/* indices and sizes for hard-coded color schemes */
+#define NSCHEMES 7
+
+#define RB_11_RH_SCHEME 0 /* RainBow, 11 colors, Red High, blue low  */
+#define RB_11_RL_SCHEME 1 /* RainBow, 11 colors, Red Low,  blue high */
+#define RB_6_RH_SCHEME 2  /* RainBow,  6 colors, Red High, blue low  */
+#define RB_6_RL_SCHEME 3  /* RainBow,  6 colors, Red Low,  blue high */
+#define RB_5_RH_SCHEME 4  /* RainBow,  5 colors, Red High, teal low  */
+#define RB_5_RL_SCHEME 5  /* RainBow,  5 colors, Red low,  teal high */
+#define RB_W5_OH_SCHEME 6 /* RainBow with white, 5 colors, orange high, teal low, white lowest */
+
+#define NRB_11_RH_SCHEME 11
+#define NRB_11_RL_SCHEME 11
+#define NRB_6_RH_SCHEME 6
+#define NRB_6_RL_SCHEME 6
+#define NRB_5_RH_SCHEME 5
+#define NRB_5_RL_SCHEME 5
+#define NRB_W5_OH_SCHEME 5
+
+/* the actual CMYK color values for the scheme colors (_C = cyan, _M = magenta, _Y = yellow, _K = black) */
+
+/* the 11-color rainbow scheme */
+#define RED2BLUE_1_OF_11_C 0.00
+#define RED2BLUE_1_OF_11_M 0.94
+#define RED2BLUE_1_OF_11_Y 1.00
+#define RED2BLUE_1_OF_11_K 0.00
+
+#define RED2BLUE_2_OF_11_C 0.00
+#define RED2BLUE_2_OF_11_M 0.84
+#define RED2BLUE_2_OF_11_Y 1.00
+#define RED2BLUE_2_OF_11_K 0.00
+
+#define RED2BLUE_3_OF_11_C 0.00
+#define RED2BLUE_3_OF_11_M 0.63
+#define RED2BLUE_3_OF_11_Y 1.00
+#define RED2BLUE_3_OF_11_K 0.00
+
+#define RED2BLUE_4_OF_11_C 0.00
+#define RED2BLUE_4_OF_11_M 0.42
+#define RED2BLUE_4_OF_11_Y 1.00
+#define RED2BLUE_4_OF_11_K 0.00
+
+#define RED2BLUE_5_OF_11_C 0.00
+#define RED2BLUE_5_OF_11_M 0.21
+#define RED2BLUE_5_OF_11_Y 1.00
+#define RED2BLUE_5_OF_11_K 0.00
+
+#define RED2BLUE_6_OF_11_C 0.00
+#define RED2BLUE_6_OF_11_M 0.00
+#define RED2BLUE_6_OF_11_Y 1.00
+#define RED2BLUE_6_OF_11_K 0.00
+
+#define RED2BLUE_7_OF_11_C 0.42
+#define RED2BLUE_7_OF_11_M 0.00
+#define RED2BLUE_7_OF_11_Y 1.00
+#define RED2BLUE_7_OF_11_K 0.00
+
+#define RED2BLUE_8_OF_11_C 0.61
+#define RED2BLUE_8_OF_11_M 0.00
+#define RED2BLUE_8_OF_11_Y 0.56
+#define RED2BLUE_8_OF_11_K 0.22
+
+#define RED2BLUE_9_OF_11_C 0.50
+#define RED2BLUE_9_OF_11_M 0.00
+#define RED2BLUE_9_OF_11_Y 0.00
+#define RED2BLUE_9_OF_11_K 0.50
+
+#define RED2BLUE_10_OF_11_C 0.78
+#define RED2BLUE_10_OF_11_M 0.56
+#define RED2BLUE_10_OF_11_Y 0.00
+#define RED2BLUE_10_OF_11_K 0.22
+
+#define RED2BLUE_11_OF_11_C 0.92
+#define RED2BLUE_11_OF_11_M 0.84
+#define RED2BLUE_11_OF_11_Y 0.00
+#define RED2BLUE_11_OF_11_K 0.08
+
+
+/* the 6-color rainbow scheme */
+/* red */
+#define RED2BLUE_1_OF_6_C 0.00
+#define RED2BLUE_1_OF_6_M 0.94
+#define RED2BLUE_1_OF_6_Y 1.00
+#define RED2BLUE_1_OF_6_K 0.00
+
+/* orange-ish */
+#define RED2BLUE_2_OF_6_C 0.00
+#define RED2BLUE_2_OF_6_M 0.63
+#define RED2BLUE_2_OF_6_Y 1.00
+#define RED2BLUE_2_OF_6_K 0.00
+
+/* gold-ish */
+#define RED2BLUE_3_OF_6_C 0.00
+#define RED2BLUE_3_OF_6_M 0.21
+#define RED2BLUE_3_OF_6_Y 1.00
+#define RED2BLUE_3_OF_6_K 0.00
+
+/* light-green-ish */
+#define RED2BLUE_4_OF_6_C 0.42
+#define RED2BLUE_4_OF_6_M 0.00
+#define RED2BLUE_4_OF_6_Y 1.00
+#define RED2BLUE_4_OF_6_K 0.00
+
+/* teal-ish */
+#define RED2BLUE_5_OF_6_C 0.50
+#define RED2BLUE_5_OF_6_M 0.00
+#define RED2BLUE_5_OF_6_Y 0.00
+#define RED2BLUE_5_OF_6_K 0.50
+
+/* blue */
+#define RED2BLUE_6_OF_6_C 0.92
+#define RED2BLUE_6_OF_6_M 0.84
+#define RED2BLUE_6_OF_6_Y 0.00
+#define RED2BLUE_6_OF_6_K 0.08
+
+
+/* single colors for one-cell legends */
+#define NOC            17
+#define CYANOC          0
+#define MAGENTAOC       1
+#define YELLOWOC        2
+#define BLACKOC         3
+#define WHITEOC         4
+#define LIGHTGREYOC     5
+#define GREYOC          6
+#define DARKGREYOC      7
+#define REDOC           8
+#define ORANGEOC        9
+#define TEALOC         10
+#define LIGHTGREENOC   11
+#define GREENOC        12
+#define DARKGREENOC    13
+#define LIGHTPURPLEOC  14
+#define PURPLEOC       15
+#define DARKPURPLEOC   16
+  
+/* the actual CMYK color values for the single colors (_C = cyan, _M = magenta, _Y = yellow, _K = black) */
+#define CYAN_C 1.0
+#define CYAN_M 0.0
+#define CYAN_Y 0.0
+#define CYAN_K 0.0
+
+#define MAGENTA_C 0.0
+#define MAGENTA_M 1.0
+#define MAGENTA_Y 0.0
+#define MAGENTA_K 0.0
+
+#define YELLOW_C 0.0
+#define YELLOW_M 0.0
+#define YELLOW_Y 1.0
+#define YELLOW_K 0.0
+
+#define BLACK_C 0.0
+#define BLACK_M 0.0
+#define BLACK_Y 0.0
+#define BLACK_K 1.0
+
+#define WHITE_C 0.0
+#define WHITE_M 0.0
+#define WHITE_Y 0.0
+#define WHITE_K 0.0
+
+#define LIGHTGREY_C 0.0
+#define LIGHTGREY_M 0.0
+#define LIGHTGREY_Y 0.0
+#define LIGHTGREY_K 0.2
+
+#define GREY_C 0.0
+#define GREY_M 0.0
+#define GREY_Y 0.0
+#define GREY_K  0.5
+
+#define DARKGREY_C 0.0
+#define DARKGREY_M 0.0
+#define DARKGREY_Y 0.0
+#define DARKGREY_K 0.75
+
+#define RED_C 0.0
+#define RED_M 1.0
+#define RED_Y 1.0
+#define RED_K 0.0
+
+#define ORANGE_C 0.0
+#define ORANGE_M 0.5
+#define ORANGE_Y 1.0
+#define ORANGE_K 0.0
+
+#define TEAL_C 0.5
+#define TEAL_M 0.0
+#define TEAL_Y 0.0
+#define TEAL_K 0.5
+
+#define LIGHTGREEN_C 0.5
+#define LIGHTGREEN_M 0.0
+#define LIGHTGREEN_Y 0.5
+#define LIGHTGREEN_K 0.0
+
+#define GREEN_C 1.0
+#define GREEN_M 0.0
+#define GREEN_Y 1.0
+#define GREEN_K 0.0
+
+#define DARKGREEN_C 1.0
+#define DARKGREEN_M 0.5
+#define DARKGREEN_Y 1.0
+#define DARKGREEN_K 0.0
+
+#define LIGHTPURPLE_C 0.3
+#define LIGHTPURPLE_M 0.6
+#define LIGHTPURPLE_Y 0.0
+#define LIGHTPURPLE_K 0.0
+
+#define PURPLE_C 0.5
+#define PURPLE_M 1.0
+#define PURPLE_Y 0.0
+#define PURPLE_K 0.0
+
+#define DARKPURPLE_C 1.0
+#define DARKPURPLE_M 1.0
+#define DARKPURPLE_Y 0.0
+#define DARKPURPLE_K 0.0
+
+/* hard-coded values for the legends */
+#define LEG_NBOXES  11
+#define LEG_MINFONTSIZE 10
+#define SPECIAL_FONT "Courier-BoldOblique"
+#define LEG_FONT "Courier-Bold"
+#define LEG_EXTRA_COLUMNS 12 /* how many extra columns we need for printing stats in the legend */
+#define COURIER_HEIGHT_WIDTH_RATIO 1.65
+#define LEG_EXTRA_TEXT_FONT "Helvetica"
+
+/* fonts and other sizes */
+#define DEFAULT_FONT "Courier-Bold"
+#define FOOTER_FONT "Helvetica"
+#define NUCLEOTIDES_FONT "Courier-Bold" /* NOTE: THIS MUST BE Courier-Bold or Courier, the offsets for drawing cells (CELL_{X,Y}OFFSET_FRACTION) 
+				      * and placing nucleotides (NUCLEOTIDE_{X,Y}OFFSET_FRACTION_LOWERCASE_GJPQY) depend on it */
+/*#define NUCLEOTIDES_FONT "Monaco-Bold"*/
+#define POSNTEXT_FONT "Helvetica"
+#define NUCLEOTIDES_FONTSIZE 8.
+#define POSNTEXT_FONTSIZE 8.
+#define LEG_FONTSIZE_UNSCALED 8
+#define LEG_EXTRA_TEXT_FONTSIZE_UNSCALED 8
+#define HEADER_FONTSIZE_UNSCALED 12
+#define HEADER_MODELNAME_MAXCHARS 20
+#define TICKS_LINEWIDTH 2.
+#define BP_LINEWIDTH 1.
+#define CELLSIZE 8.    /* default size of a cell, a single position in the structure diagram */
+#define CELLSIZE_INT 8 /* default size of a cell, a single position in the structure diagram */
+/* NOTE, *OFFSET_FRACTION* constants below depend on NUCLEOTIDES_FONT being either "Courier-Bold" or "Courier" */
+#define CELL_XOFFSET_FRACTION 0.2
+#define CELL_YOFFSET_FRACTION 0.2
+#define LOWERCASE_LOW_HANGING_CHARS "gjpqy"
+#define NUCLEOTIDE_YOFFSET_FRACTION_LOWERCASE_LOW_HANGING_CHARS 0.1875
+
+/* postscript info */
+#define POSTSCRIPT_PAGEWIDTH 612.
+#define POSTSCRIPT_PAGEHEIGHT 792.
+#define PAGE_TOPBUF 30.  /* 30 blank pts required at top */
+#define PAGE_SIDEBUF 32. /* 32 blank pts required at sides */
+#define PAGE_BOTBUF 30.  /* 30 blank pts required at bot */
+
+/* cell outline info */
+#define OUTLINE_LINEWIDTH_CELL_FRACTION_MIN 0.04
+#define OUTLINE_LINEWIDTH_CELL_FRACTION_MAX 0.16
+#define NOUTLINETYPES 2
+#define OUTLINE_NONE_IDX 0
+#define OUTLINE_MIN_IDX 1
+#define OUTLINE_MAX_IDX 2
+#define OUTLINE_PROCEDURE "box"
+
+/* one cell color legends, special values */
+#define OCCL_BLANK_COUNT -1
+
+/* Structure: scheme_color_legend
+ * Incept:    EPN, Thu Jun 25 20:20:38 2009
+ *
+ * Parameters describing a one-dimensional legend of colors
+ * from a preset scheme for use in a SSPostscript_t data structure.
+ */
+typedef struct scheme_color_legend_s {
+  int    scheme;            /* preset color scheme index */
+  int    nbins;             /* number of colors (bins) in this scheme */
+  char   *text1;            /* first line of text for legend, a single string */
+  char   *text2;            /* second line of text for legend, a single string */
+  float *limits;            /* [nbins+1] limits for each bin, limits[0] is min value we would expect to see, limits[nbins] is max */
+  int   *counts;            /* [nbins] number of cells we've painted each color */
+  int   *counts_masked;     /* [nbins] number of cells within mask ('1's) that we've painted each color */
+  int    ints_only_flag;    /* TRUE if possible values are only integers, legend values will be drawn differently in this case */
+  int    low_inclusive;     /* TRUE if bin 0 is inclusive of limits[0], FALSE if not */
+  int    high_inclusive;    /* TRUE if bin[nbins-1] is inclusive of max value, FALSE if not */
+  int    use_mask;          /* TRUE to use ps->mask if it is available to draw masked positions differently, FALSE not to */
+} SchemeColorLegend_t;
+
+/* Structure: onecell_color_legend
+ * Incept:    EPN, Tue Sep 30 13:06:15 2008
+ *
+ * Parameters describing a single colored cell legend for a
+ * SSPostscript_t data structure.
+ */
+typedef struct onecell_color_legend_s {
+  float  col[NCMYK];        /* [CMYK] color value for the cell */
+  char  *text;              /* description text for legend */
+  char  *celltext;          /* colored text to use instead of a block, if NULL a colored block will be used */
+  char  *procname;          /* name of a procedure for drawing the block, if NULL a colored block will be used */
+  /* NOTE only one of celltext or procname can be non-NULL */
+  float *procstack;         /* array of <nprocstack> stack elements for the procedure */
+  int    nprocstack;        /* num els in <procstack> */
+  int    nres;              /* number of nucleotides colored by the color in col[NCMYK] */
+  int    nres_masked;       /* number of nucleotides within a mask colored by the color in col[NCMYK] */
+  int    do_separator;      /* TRUE to draw a separator line below this one cell color legend, FALSE not to */
+  int    do_no_vspace;      /* when printing one cell, legend, don't add any vertical space after it, usually this is FALSE */
+} OneCellColorLegend_t;
+
+/* Structure: text_legend
+ * Incept:    EPN, Mon Apr 19 07:11:44 2010
+ *
+ * Parameters describing a text section of a legend for a
+ * SSPostscript_t data structure.
+ */
+typedef struct text_legend_s {
+  char  **text_per_line;    /* description text for legend */
+  int     nlines;           /* colored text to use instead of a block, if NULL a colored block will be used */
+  int    do_separator;      /* TRUE to draw a separator line below this text section, FALSE not to */
+} TextLegend_t;
+
+/* Structure: ss_postscript
+ * Incept:    EPN, Mon Jun 23 15:50:30 2008
+ *
+ * A clumsy data structure for storing the information that will
+ * become a postscript secondary structure diagram based on a 
+ * template created by Robin Gutell and colleagues.
+ *
+ */
+typedef struct ss_postscript_s {
+  int     npage;        /* number of pages in eventual postscript */
+  char   *modelname;    /* name of model, read from template file */
+  int    *modeA;        /* [0..npage-1] page mode, ALIMODE, INDIMODE, or SIMPLEMASKMODE */
+  char  **descA;        /* [0..npage-1] description for each page */
+  int     desc_max_chars; /* max num characters for a page description */
+  float   headerx;      /* x coordinate (bottom left corner) of header area */
+  float   headery;      /* y coordinate (bottom left corner) of header area */
+  float   headerx_charsize;/* size of a character in x-dimension in the header */
+  float   headery_charsize;/* size of a character in y-dimension in the header */
+  float   headerx_desc; /* x coordinate (bottom left corner) of header area */
+  int     leg_posn;     /* consensus position for placing legend, read from template */
+  int     leg_cellsize;  /* size of a cell in the legend, (ex. 24 for SSU models) */
+  float   leg_rhs_space;/* extra space to leave to the right of the legend */
+  float   legx_offset;  /* offset in x coordinate for placing legend, legx will be ps->rxA[leg_posn-1] + legx_offset */
+  float   legy_offset;  /* offset in y coordinate for placing legend, legy will be ps->ryA[leg_posn-1] + legy_offset */
+  float   legx;         /* x coordinate (top left corner) of legend area */
+  float   legy;         /* y coordinate (top left corner) of legend area */
+  float   cur_legy;     /* y coordinate of current line in legend */
+  float   legx_charsize;/* size of a character in x-dimension in the legend */
+  float   legy_charsize;/* size of a character in y-dimension in the legend */
+  int     legx_max_chars; /* max num nucleotides in x direction we can print in legend before running off page */
+  int     legy_max_chars; /* max num nucleotides in y direction we can print in legend before running off page */
+  int     legx_stats;   /* x position for printing stats in the legend */
+  float   pagex_max;    /* max x position on page */
+  float   pagey_max;    /* max y position on page */
+  float   scale;        /* scale parameter, read from template file */
+  char  **regurgA;      /* [0..nregurg-1][] lines from the template file to regurgitate, these are unchanged. */
+  int     nregurg;      /* number of lines (char *'s) in the regurg_textAA 2D array */
+  char  **posntextA;    /* [0..i..nposntext-1] string for element i of position text, read from template */
+  float  *posntextxA;   /* [0..i..nposntext-1] x value for posntextA[i] */
+  float  *posntextyA;   /* [0..i..nposntext-1] y value for posntextA[i] */
+  int     nposntext;    /* number of elements in posntextx and posntexty */
+  float  *ticksx1A;     /* [0..nticks-1] x begin value for ticks */
+  float  *ticksx2A;     /* [0..nticks-1] x end   value for ticks */
+  float  *ticksy1A;     /* [0..nticks-1] y begin value for ticks */
+  float  *ticksy2A;     /* [0..nticks-1] x end   value for ticks */
+  int     nticks;       /* number of ticks */
+  float  *bpx1A;        /* [0..nbp-1] x begin value for bp connect line */
+  float  *bpx2A;        /* [0..nbp-1] x end   value for bp connect line */
+  float  *bpy1A;        /* [0..nbp-1] y begin value for bp connect line */
+  float  *bpy2A;        /* [0..nbp-1] x end   value for bp connect line */
+  int     nbp;          /* number of bp */
+  float  *rxA;          /* [0..rflen-1] x coordinate for each nucleotide in the eventual postscript */
+  float  *ryA;          /* [0..rflen-1] y coordinate for each nucleotide in the eventual postscript */
+  int     rflen;         /* the number of nucleotides in the template file */
+  char   **rAA;         /* [0..npage-1][0..rflen-1] nucleotide character in the eventual postscript */
+  float ***rcolAAA;     /* [0..npage-1][0..rflen-1][0..3] color for nucleotide on page p, position c, CMYK in the eventual postscript */
+  float ***bcolAAA;     /* [0..npage-1][0..rflen-1][0..3] color for block   on page p, position c, CMYK in the eventual postscript */
+  char   **otypeAA;     /* [0..npage-1][0..rflen-1] outline type on page p, position c in the eventual postscript 
+			 * '0' '1' or '2', OUTLINE_MIN_IDX, OUTLINE_MID_IDX, OUTLINE_MAX_IDX, respectively */
+  OneCellColorLegend_t ***occlAAA;/* [0..npage-1][0..l..nocclA[p]]  ptr to one cell color legend l for page p */
+  int     *nocclA;      /* [0..npage-1] number of one cell color legends for each page */
+  SchemeColorLegend_t  **sclAA;/* [0..npage-1]  ptr to scheme color legend l for page p, NULL if none */
+  TextLegend_t ***tlAAA;/* [0..npage-1][0..l..ntlA[p]] ptr to text legend l for page p */
+  int     *ntlA;        /* [0..npage-1] number of text legends for page p, NULL if none */
+  char    *mask;        /* mask for this postscript, columns which are '0' get drawn differently */
+  int      nalloc;      /* number of elements to add to arrays when reallocating */
+  int      msa_nseq;    /* number of sequences in the msa, impt b/c msa->nseq will be 0 if --small */
+  char    *msa_cseq_maj;/* [0..rfpos..ps->rflen-1]: consensus sequence for the msa, determined using majority rule */
+  char    *msa_cseq_amb;/* [0..rfpos..ps->rflen-1]: different consensus sequence for the msa, least ambiguous
+			 * nt per nongap RF position that represents >= esl_opt_GetReal(go, --athresh) fraction of 
+			 * nongap nucleotides at position rfpos */
+  int     *msa_ct;      /* [1..ps->rflen] CT array for msa this postscript corresponds to, 
+			 * msa_ct[i] is the position that consensus nucleotide i base pairs to, or 0 if i is unpaired. */
+  int      msa_nbp;     /* number of bps read from current MSA (in msa_ct), should equal nbp, but only if bps read from template file */
+  int     *msa_rf2a_map;/* [0..ps->rflen-1]     = apos, apos is the alignment position (0..msa->alen-1) that is non-gap RF position rfpos (for rfpos in 0..rflen-1) */
+  int     *msa_a2rf_map;/* [0..ps->msa->alen-1] = rfpos, rfpos is the non-gap RF position (0..ps->rflen) that is alignment position apos (for apos in 0..ps->msa_alen-1) */
+  int     *uaseqlenA;   /* [0..ps->msa->nseq-1] unaligned sequence length for all sequences in the MSA, only computed if --indi */
+  int     *seqidxA;     /* [0..ps->npage-1] the sequence index in the MSA each page corresponds to, only valid if --indi */
+  ESL_MSA *msa;         /* pointer to MSA this object corresponds to */
+  const ESL_ALPHABET *abc;	/* ptr to alphabet used to decipher gap chars (msa itself is text mode) */
+} SSPostscript_t;
+
+static SSPostscript_t *create_sspostscript(const ESL_GETOPTS *go);
+static int  setup_sspostscript(SSPostscript_t *ps, char *errbuf);
+static OneCellColorLegend_t *create_onecell_colorlegend(float *cmykA, int nres, int nres_masked, int do_separator, int do_no_vspace);
+static SchemeColorLegend_t  *create_scheme_colorlegend(int scheme, int ncols, float *limits, int ints_only_flag, int low_inclusive, int high_inclusive, int use_mask);
+static TextLegend_t         *create_text_legend(int nlines, char **text_per_line, int do_separator);
+static TextLegend_t         *create_text_legend_for_consensus_sequence(const ESL_GETOPTS *go, int do_separator);
+static int  add_text_to_scheme_colorlegend(SSPostscript_t *ps, SchemeColorLegend_t *scl, char *text, int legx_max_chars, char *errbuf);
+static int  add_text_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *text, int legx_max_chars, char *errbuf);
+static int  add_celltext_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *celltext, char *errbuf);
+static int  add_procedure_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *procname, float *procstack, int nprocstack, char *errbuf);
+static int  add_page_desc_to_sspostscript(SSPostscript_t *ps, int page, char *text, char *errbuf);
+static int  add_diffmask_page_desc_to_sspostscript(SSPostscript_t *ps, int page, char *mask_file, char *maskdiff_file, char *errbuf);
+static int  draw_sspostscript(FILE *fp, const ESL_GETOPTS *go, char *errbuf, char *command, char *date, float ***hc_scheme, SSPostscript_t *ps);
+static int  draw_legend_column_headers(FILE *fp, SSPostscript_t *ps, int pagenum, char *errbuf);
+static int  draw_onecell_colorlegend(FILE *fp, OneCellColorLegend_t *occl, SSPostscript_t *ps, int occl_idx, int pagenum);
+static int  draw_scheme_colorlegend(const ESL_GETOPTS *go, FILE *fp, SchemeColorLegend_t *scl, float **hc_scheme, SSPostscript_t *ps, int pagenum);
+static void free_sspostscript(SSPostscript_t *ps);
+static int  add_pages_sspostscript(SSPostscript_t *ps, int ntoadd, int page_mode);
+static int  parse_template_file(char *filename, const ESL_GETOPTS *go, char *errbuf, int msa_rflen, SSPostscript_t **ret_ps);
+static int  parse_template_page(ESL_FILEPARSER *efp, const ESL_GETOPTS *go, char *errbuf, SSPostscript_t **ret_ps);
+static int  parse_modelname_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps);
+static int  parse_legend_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps);
+static int  parse_scale_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps);
+static int  parse_ignore_section(ESL_FILEPARSER *efp, char *errbuf, int *ret_read_showpage);
+static int  parse_regurgitate_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps);
+static int  parse_text_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps);
+static int  parse_lines_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps);
+static int  validate_justread_sspostscript(SSPostscript_t *ps, char *errbuf);
+static int  validate_and_update_sspostscript_given_msa(const ESL_GETOPTS *go, const ESL_ALPHABET *abc, SSPostscript_t *ps, ESL_MSA *msa, int msa_nseq, char *errbuf);
+static int  read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_masklen, int *ret_mask_has_internal_zeroes);
+static void PairCount(const ESL_ALPHABET *abc, double *counters, ESL_DSQ syml, ESL_DSQ symr, double wt);
+static int  get_command(const ESL_GETOPTS *go, char *errbuf, char **ret_command);
+static int  get_date(char *errbuf, char **ret_date);
+static int  set_scheme_values(char *errbuf, float *vec, int ncolvals, float **scheme, float val, SchemeColorLegend_t *scl, int within_mask, int *ret_bi);
+static int  set_onecell_values(char *errbuf, float *vec, int ncolvals, float *onecolor);
+static int  add_mask_to_ss_postscript(SSPostscript_t *ps, char *mask);
+static int  draw_masked_block(FILE *fp, float x, float y, float *colvec, int do_circle_mask, int do_square_mask, int do_x_mask, int do_border, float cellsize);
+static int  draw_header_and_footer(FILE *fp, const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int page, int pageidx2print);
+static void get_insert_info_from_msa(const ESL_ALPHABET *abc, ESL_MSA *msa, int rflen, int **ret_nseq_with_ins_ct, int **ret_nins_ct, int ***ret_per_seq_ins_ct);
+static void get_insert_info_from_abc_ct(double **abc_ct, ESL_ALPHABET *abc, char *msa_rf, int64_t msa_alen, int rflen, int **ret_nseq_with_ins_ct, int **ret_nins_ct);
+static void get_insert_info_from_ifile(char *ifile, int rflen, int msa_nseq, ESL_KEYHASH *useme_keyhash, int **ret_nseq_with_ins_ct, int **ret_nins_ct, int ***ret_per_seq_ins_ct, int **ret_soff_ct, int **ret_eoff_ct);
+static int  count_msa(const ESL_ALPHABET *abc, ESL_MSA *msa, char *errbuf, double ***ret_abc_ct, double ****ret_bp_ct, double ***ret_pp_ct, int **ret_spos_ct, int **ret_epos_ct);
+static int  get_consensus_seqs_from_abc_ct(const ESL_GETOPTS *go,SSPostscript_t *ps, char *errbuf, double **abc_ct, ESL_ALPHABET *abc, int64_t msa_alen);
+static int  infocontent_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_onecell_idx, FILE *tabfp);
+static int  mutual_information_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double ***bp_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int ss_idx, int zerores_idx, FILE *tabfp);
+static int  delete_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, int *span_ct, int msa_nseq, int do_all, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zerodel_idx, int hc_fewdel_idx, FILE *tabfp);
+static int  avg_posteriors_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **pp_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_onecell_idx, FILE *tabfp);
+static int  insertfreq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *nseq_with_ins_ct, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zeroins_idx, int hc_fewins_idx, FILE *tabfp);
+static int  insertavglen_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *nseq_with_ins_ct, int *nins_ct, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zeroins_idx, FILE *tabfp);
+static int  span_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int zercov_idx, int maxcov_idx, FILE *tabfp);
+static int  individuals_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, ESL_MSA *msa, int **per_seq_ins_ct, int do_prob, int do_rescol, float ***hc_scheme, int hc_scheme_idx_s, int hc_scheme_idx_p, int hc_nbins_s, int hc_nbins_p, float **hc_onecell, int extdel_idx_s, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s, int dgbp_idx_s, int hgbp_idx_s, int gap_idx_p, FILE *tabfp);
+static int  cons_seq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, float **hc_onecell, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s, int dgbp_idx_s, int hgbp_idx_s);
+static int  rf_seq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, int do_rescol, float **hc_onecell, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s);
+static int  colormask_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, float **hc_onecell, int incmask_idx, int excmask_idx);
+static int  diffmask_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, char *mask2, float **hc_onecell, int incboth_idx, int inc1_idx, int inc2_idx, int excboth_idx);
+static int  drawfile2sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, float ***hc_scheme, int hc_scheme_idx, int hc_nbins);
+static int  expertfile2sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps);
+static int  get_pp_idx(const ESL_ALPHABET *abc, char ppchar);
+static int  get_span_ct(int *msa_rf2a_map, int64_t alen, int rflen, int nseq, int *spos_ct, int *epos_ct, int *srfoff_ct, int *erfoff_ct, int **ret_span_ct);
+static int  is_watson_crick_bp(char i, char j);
+static int  is_gu_or_ug_bp(char i, char j);
+static int  compare_two_cmyk_colors(float acol_C, float acol_M, float acol_Y, float acol_K, float bcol_C, float bcol_M, float bcol_Y, float bcol_K);
+static void define_outline_procedure(FILE *fp);
+
+static char banner[] = "draw postscript secondary structure diagrams";
+static char usage[]  = "[options] <msafile> <SS postscript template> <output postscript file name>\n\
+The <msafile> must be in Stockholm format.";
+
+static ESL_OPTIONS options[] = {
+  /* name       type        default env   range togs  reqs         incomp     help                                                   docgroup */
+  { "-h",       eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "help; show brief info on version and usage",              1 },
+  { "-d",       eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw default set of alignment summary diagrams",          1 },
+  { "--mask",   eslARG_INFILE, NULL, NULL, NULL, NULL,NULL,        NULL,      "for all diagrams, mark masked ('0') columns from mask in <f>", 1 },
+  { "--small",  eslARG_NONE,   NULL, NULL, NULL, NULL,NULL,        NULL,      "operate in small memory mode (aln must be 1 line/seq Pfam format)", 1 },
+
+  { "--cons",   eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw diagram showing the alignment's consensus sequence", 2 },
+  { "--info",   eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw information content diagram", 2 },
+  { "--mutinfo",eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw base pair mutual information diagram", 2 },
+  { "--ifreq",  eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw insert frequency diagram", 2 },
+  { "--iavglen",eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw average insert length diagram", 2 },
+  { "--dall",   eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw delete diagram w/all deletions (incl. terminal deletes)", 2 },
+  { "--prob",   eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw average posterior probability diagram", 2 },
+  { "--span",   eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw diagram showing fraction of seqs that span each posn", 2 },
+  { "--rf",     eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw diagram showing reference (#=GC RF) sequence", 2 },
+  { "--dint",   eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "draw delete diagram w/only internal (non-terminal) deletions", 2 },
+  { "--tabfile",eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL,        NULL,      "output per position data in tabular format to file <f>", 2 },
+
+  { "--indi",   eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        "--small", "draw diagrams for individual sequences in the alignment", 3 },
+  { "-f",       eslARG_NONE,  FALSE, NULL, NULL, NULL,"--indi",    NULL,      "force; w/--indi draw all seqs, even if predicted output >100 Mb", 3 },
+
+  { "--no-pp",   eslARG_NONE, FALSE, NULL, NULL, NULL,"--indi",    NULL,      "with --indi, do not draw indi posterior probability diagrams", 9 },
+  { "--no-bp",   eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,        NULL,      "do not color nucleotides based on basepair type", 9 },
+  { "--no-ol",   eslARG_NONE, FALSE, NULL, NULL, NULL,"--indi",    NULL,      "w/--indi, do not outline nts that are not most common nt", 9 },
+  { "--no-ntpp", eslARG_NONE, FALSE, NULL, NULL, NULL,"--indi", "--no-pp", "w/--indi, do not draw nts on individual post prob diagrams", 9 },
+
+  { "--no-cnt", eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,       NULL,       "do not draw consensus nts on alignment summary diagrams", 7 },
+  { "--cthresh",eslARG_REAL, "0.75", NULL,"0<x<=1.0", NULL,NULL, "--no-cnt", "capitalize cons nts occuring in >= <x> fraction of seqs", 7 },
+  { "--cambig", eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,      "--no-cnt", "allow ambiguous nts in consensus sequence", 7 },
+  { "--athresh",eslARG_REAL,  "0.9", NULL,"0<x<=1.0", NULL,"--cambig",NULL,   "w/--cambig, cons nt must represent >= <x> fraction of seqs", 7 },
+
+  { "--mask-u", eslARG_NONE,  FALSE, NULL, NULL, NULL,"--mask",    "--mask-x","with --mask, mark masked columns as squares", 4 },
+  { "--mask-x", eslARG_NONE,  FALSE, NULL, NULL, NULL,"--mask",    "--mask-u","with --mask, mark masked columns as x's", 4 },
+  { "--mask-a", eslARG_NONE,  FALSE, NULL, NULL, NULL,"--mask",    NULL,      "with --mask-u or --mask-x, draw alternative mask style", 4 },
+
+  { "--mask-col", eslARG_NONE,  NULL,NULL, NULL, NULL,"--mask",    NULL,      "w/--mask draw two color diagram denoting masked columns", 5 },
+  { "--mask-diff",eslARG_INFILE,NULL,NULL, NULL, NULL,"--mask",    NULL,      "with --mask <f1>, compare mask in <f1> to mask in <f>",   5 },
+
+  { "--dfile",   eslARG_INFILE, NULL,NULL, NULL, NULL,NULL,        NULL,      "read 'draw file' specifying >=1 diagrams", 6 },
+  { "--efile",   eslARG_INFILE, NULL,NULL, NULL, NULL,NULL,        NULL,      "read 'expert draw file' specifying >=1 diagrams", 6 },
+  { "--ifile",   eslARG_INFILE, NULL,NULL, NULL, NULL,NULL,        NULL,      "read insert information from cmalign insert file <f>", 6 },
+
+  { "--no-leg", eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "do not draw legend", 8 },
+  { "--no-head",eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "do not draw header", 8 },
+  { "--no-foot",eslARG_NONE,  FALSE, NULL, NULL, NULL,NULL,        NULL,      "do not draw footer", 8 },
+  { 0,0,0,0,0,0,0,0,0,0 },
+};
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go      = NULL;	/* application configuration       */
+  ESL_ALPHABET   *abc     = NULL;	/* biological alphabet             */
+  char           *alifile = NULL;	/* alignment file name             */
+  char           *outfile = NULL;	/* output ps file name             */
+  char           *templatefile = NULL;  /* template file, specifying >= 1 SS diagrams 
+		  		         * (each must have a unique consensus length) */
+  int             fmt;		        /* format code for alifile         */
+  ESL_MSAFILE    *afp     = NULL;	/* open alignment file, normal interface              */
+  ESL_MSAFILE2   *afp2    = NULL;	/* open alignment file, legacy small-memory interface */
+  ESL_MSA        *msa     = NULL;	/* one multiple sequence alignment */
+  int             status;		/* easel return code               */
+  int             rflen;                 /* non-gap RF (consensus) length of each alignment */
+  int             apos;                 /* counter over alignment positions */
+  char            errbuf[ERRBUFSIZE];   /* for printing error messages */
+  FILE           *ofp       = NULL;     /* output file for postscript */
+  FILE           *tabfp    = NULL;      /* output file for text data, only set to non-null if --tabfile enabled */
+  SSPostscript_t *ps        = NULL;     /* the postscript data structure we create */
+  int            *hc_nbins  = NULL;     /* hard-coded number of bins (colors) for each possible scheme */
+  float        ***hc_scheme = NULL;     /* colors for each pre-defined scheme */
+  float         **hc_onecell = NULL;    /* single colors used for binary color schemes */
+  int             z;                    /* counter */
+  char           *command = NULL;       /* string for printing command to stdout */
+  char           *date = NULL;          /* date command was executed */
+  char           *mask = NULL;          /* first mask we'll use, string of '0's and '1's */
+  int             masklen;              /* length of mask */
+  char           *mask2 = NULL;         /* second mask we'll use, string of '0's and '1's */
+  int             mask2len;             /* length of second mask */
+  int             mask_has_internal_zeroes = FALSE;  /* does mask have any '0's with at least '1' on both sides? */
+  int             mask2_has_internal_zeroes = FALSE; /* does mask have any '0's with at least '1' on both sides? */
+ /* counts of relevant values from the msa */
+  int            *nseq_with_ins_ct = NULL; /* [0..ps->rflen] number of sequences with >=1 insert after each consensus position, only used if --ifreq */
+  int            *nins_ct = NULL;          /* [0..ps->rflen] total number of inserted nucleotides (over all seqs) after each consensus position, only used if --ifreq */
+  int           **per_seq_ins_ct = NULL;   /* [0..msa->nseq-1][0..ps->rflen] for each sequence, the number of inserts after each consensus position */
+  double        **abc_ct = NULL;        /* [0..msa->alen-1][0..abc->K], count of each nucleotide at each position, over all sequences, missing and nonnucleotides are *not counted* */
+  double       ***bp_ct = NULL;         /* [0..msa->alen-1][0..abc->Kp][0..abc->Kp], count of each possible base pair at each position, over all sequences, missing and nonnucleotides are *not counted* 
+                                           base pairs are indexed by 'i' for a base pair between positions i and j, where i < j. */
+  double        **pp_ct = NULL;         /* [0..msa->alen-1][0..11], count of reach posterior probability (PP) code, over all sequences, gap is 11 */
+  int            *spos_ct = NULL;       /* [0..msa->alen-1] per position count of first non-gap position, over all seqs */
+  int            *epos_ct = NULL;       /* [0..msa->alen-1] per position count of final non-gap position, over all seqs */
+  int            *srfoff_ct = NULL;     /* [0..rfpos..rflen-1], correction for spos_ct for rfpos, derived from ifile, only used if msa has had all insert columns removed */
+  int            *erfoff_ct = NULL;     /* [0..rfpos..rflen-1], correction for epos_ct for rfpos, derived from ifile, only used if msa has had all insert columns removed */
+  int            *span_ct = NULL;       /* [0..rfpos..rflen-1], number of sequences that 'span' position rfpos */
+  int64_t         msa_alen;             /* msa->alen */
+  int             msa_nseq;             /* msa->nseq */
+  /* variables related to small memory mode */
+  int             do_small = TRUE;      /* TRUE to operate in small memory mode, FALSE not to */
+  /* variables storing which pages to print */
+  int             do_default_set = TRUE;  /* TRUE if no options telling specifying what pages to draw were selected */
+  int             do_cons = FALSE;        
+  int             do_rf = FALSE;        
+  int             do_info = FALSE;      
+  int             do_mutinfo = FALSE;   
+  int             do_ifreq = FALSE;      
+  int             do_iavglen = FALSE;      
+  int             do_dall = FALSE;     
+  int             do_dint = FALSE;     
+  int             do_prob = FALSE;     
+  int             do_span = FALSE;     
+  int             do_indi = FALSE;     
+  int             do_maskcol = FALSE;   
+  int             do_maskdiff = FALSE;
+  int             do_dfile = FALSE;
+  int             do_efile = FALSE;
+  int             need_span_ct = FALSE;  /* TRUE if span_ct must be calculated (if do_dint || do_ifreq || do_iavglen || do_span) */
+  int             tmp_Mb = 0;          
+  int             predicted_Mb = 0;    /* predicted size of the output file, calced if --indi */
+  /***********************************************
+   * Parse command line
+   ***********************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  if (esl_opt_GetBoolean(go, "-h") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage);
+      puts("\n where basic options are:");
+      esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+      puts("\noptions for alignment summary diagrams (incompatible with --indi):");
+      esl_opt_DisplayHelp(stdout, go, 2, 2, 80); 
+      puts("\noptions for drawing individual sequences (require --indi):");
+      esl_opt_DisplayHelp(stdout, go, 3, 2, 80); 
+      puts("\noptions for omitting parts of the diagram:");
+      esl_opt_DisplayHelp(stdout, go, 8, 2, 80); 
+      puts("\noptions for drawing simple two color diagrams of masks:");
+      esl_opt_DisplayHelp(stdout, go, 5, 2, 80); 
+      puts("\nexpert options for controlling individual seq diagrams (require --indi):");
+      esl_opt_DisplayHelp(stdout, go, 9, 2, 80); 
+      puts("\nexpert options related to consensus sequence definition:");
+      esl_opt_DisplayHelp(stdout, go, 7, 2, 80); 
+      puts("\nexpert options controlling style of masked positions:");
+      esl_opt_DisplayHelp(stdout, go, 4, 2, 80); 
+      puts("\nexpert options related to input files:");
+      esl_opt_DisplayHelp(stdout, go, 6, 2, 80); 
+      exit(0);
+    }
+
+  if (esl_opt_ArgNumber(go) != 3) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+
+  /* Check for incompatible options that aren't simple to check with esl_getopts */
+  /* --mask-a requires either --mask-x or --mask-u */
+  if (esl_opt_IsOn(go, "--mask-a") && (! esl_opt_IsOn(go, "--mask-u")) && (! esl_opt_IsOn(go, "--mask-x"))) { 
+    esl_fatal("--mask-a requires either --mask-u or mask-x");
+  }
+
+  alifile      = esl_opt_GetArg(go, 1);
+  templatefile = esl_opt_GetArg(go, 2);
+  outfile      = esl_opt_GetArg(go, 3);
+
+  if((status = get_command(go, errbuf, &command)) != eslOK) esl_fatal(errbuf);
+  if((status = get_date(errbuf, &date))           != eslOK) esl_fatal(errbuf);
+
+  /****************/
+  /* Premlinaries */
+  /****************/
+  /* allocate and fill predefined one-cell colors, these are hardcoded */
+  ESL_ALLOC(hc_onecell, sizeof(float *) * NOC);
+  for(z = 0; z < NOC; z++) hc_onecell[z] = NULL;
+  for(z = 0; z < NOC; z++) { ESL_ALLOC(hc_onecell[z], sizeof(float) * NCMYK); }
+  
+  hc_onecell[CYANOC][ICYAN] = CYAN_C;
+  hc_onecell[CYANOC][IMGTA] = CYAN_M;
+  hc_onecell[CYANOC][IYELW] = CYAN_Y;
+  hc_onecell[CYANOC][IBLCK] = CYAN_K;
+
+  hc_onecell[MAGENTAOC][ICYAN] = MAGENTA_C;
+  hc_onecell[MAGENTAOC][IMGTA] = MAGENTA_M;
+  hc_onecell[MAGENTAOC][IYELW] = MAGENTA_Y;
+  hc_onecell[MAGENTAOC][IBLCK] = MAGENTA_K;
+
+  hc_onecell[YELLOWOC][ICYAN] = YELLOW_C;
+  hc_onecell[YELLOWOC][IMGTA] = YELLOW_M;
+  hc_onecell[YELLOWOC][IYELW] = YELLOW_Y;
+  hc_onecell[YELLOWOC][IBLCK] = YELLOW_K;
+
+  hc_onecell[BLACKOC][ICYAN] = BLACK_C;
+  hc_onecell[BLACKOC][IMGTA] = BLACK_M;
+  hc_onecell[BLACKOC][IYELW] = BLACK_Y;
+  hc_onecell[BLACKOC][IBLCK] = BLACK_K;
+
+  hc_onecell[WHITEOC][ICYAN] = WHITE_C;
+  hc_onecell[WHITEOC][IMGTA] = WHITE_M;
+  hc_onecell[WHITEOC][IYELW] = WHITE_Y;
+  hc_onecell[WHITEOC][IBLCK] = WHITE_K;
+
+  hc_onecell[LIGHTGREYOC][ICYAN] = LIGHTGREY_C;
+  hc_onecell[LIGHTGREYOC][IMGTA] = LIGHTGREY_M;
+  hc_onecell[LIGHTGREYOC][IYELW] = LIGHTGREY_Y;
+  hc_onecell[LIGHTGREYOC][IBLCK] = LIGHTGREY_K;
+
+  hc_onecell[GREYOC][ICYAN] = GREY_C;
+  hc_onecell[GREYOC][IMGTA] = GREY_M;
+  hc_onecell[GREYOC][IYELW] = GREY_Y;
+  hc_onecell[GREYOC][IBLCK] = GREY_K;
+
+  hc_onecell[DARKGREYOC][ICYAN] = DARKGREY_C;
+  hc_onecell[DARKGREYOC][IMGTA] = DARKGREY_M;
+  hc_onecell[DARKGREYOC][IYELW] = DARKGREY_Y;
+  hc_onecell[DARKGREYOC][IBLCK] = DARKGREY_K;
+
+  hc_onecell[REDOC][ICYAN] = RED_C;
+  hc_onecell[REDOC][IMGTA] = RED_M;
+  hc_onecell[REDOC][IYELW] = RED_Y;
+  hc_onecell[REDOC][IBLCK] = RED_K;
+
+  hc_onecell[ORANGEOC][ICYAN] = ORANGE_C;
+  hc_onecell[ORANGEOC][IMGTA] = ORANGE_M;
+  hc_onecell[ORANGEOC][IYELW] = ORANGE_Y;
+  hc_onecell[ORANGEOC][IBLCK] = ORANGE_K;
+
+  hc_onecell[TEALOC][ICYAN] = TEAL_C;
+  hc_onecell[TEALOC][IMGTA] = TEAL_M;
+  hc_onecell[TEALOC][IYELW] = TEAL_Y;
+  hc_onecell[TEALOC][IBLCK] = TEAL_K;
+
+  hc_onecell[LIGHTGREENOC][ICYAN] = LIGHTGREEN_C;
+  hc_onecell[LIGHTGREENOC][IMGTA] = LIGHTGREEN_M;
+  hc_onecell[LIGHTGREENOC][IYELW] = LIGHTGREEN_Y;
+  hc_onecell[LIGHTGREENOC][IBLCK] = LIGHTGREEN_K;
+
+  hc_onecell[GREENOC][ICYAN] = GREEN_C;
+  hc_onecell[GREENOC][IMGTA] = GREEN_M;
+  hc_onecell[GREENOC][IYELW] = GREEN_Y;
+  hc_onecell[GREENOC][IBLCK] = GREEN_K;
+
+  hc_onecell[DARKGREENOC][ICYAN] = DARKGREEN_C;
+  hc_onecell[DARKGREENOC][IMGTA] = DARKGREEN_M;
+  hc_onecell[DARKGREENOC][IYELW] = DARKGREEN_Y;
+  hc_onecell[DARKGREENOC][IBLCK] = DARKGREEN_K;
+
+  hc_onecell[LIGHTPURPLEOC][ICYAN] = LIGHTPURPLE_C;
+  hc_onecell[LIGHTPURPLEOC][IMGTA] = LIGHTPURPLE_M;
+  hc_onecell[LIGHTPURPLEOC][IYELW] = LIGHTPURPLE_Y;
+  hc_onecell[LIGHTPURPLEOC][IBLCK] = LIGHTPURPLE_K;
+
+  hc_onecell[PURPLEOC][ICYAN] = PURPLE_C;
+  hc_onecell[PURPLEOC][IMGTA] = PURPLE_M;
+  hc_onecell[PURPLEOC][IYELW] = PURPLE_Y;
+  hc_onecell[PURPLEOC][IBLCK] = PURPLE_K;
+
+  hc_onecell[DARKPURPLEOC][ICYAN] = DARKPURPLE_C;
+  hc_onecell[DARKPURPLEOC][IMGTA] = DARKPURPLE_M;
+  hc_onecell[DARKPURPLEOC][IYELW] = DARKPURPLE_Y;
+  hc_onecell[DARKPURPLEOC][IBLCK] = DARKPURPLE_K;
+
+  /***********************************/
+  /* allocate and fill predefined color schemes, these are hardcoded */
+  ESL_ALLOC(hc_scheme, sizeof(float **) * NSCHEMES);
+  for (z = 0; z < NSCHEMES; z++) hc_scheme[z] = NULL;
+
+  ESL_ALLOC(hc_nbins, sizeof(int) * NSCHEMES);
+  hc_nbins[RB_11_RH_SCHEME] = NRB_11_RH_SCHEME;
+  hc_nbins[RB_11_RL_SCHEME] = NRB_11_RL_SCHEME;
+  hc_nbins[RB_6_RH_SCHEME]  = NRB_6_RH_SCHEME;
+  hc_nbins[RB_6_RL_SCHEME]  = NRB_6_RL_SCHEME;
+  hc_nbins[RB_5_RH_SCHEME]  = NRB_5_RH_SCHEME;
+  hc_nbins[RB_5_RL_SCHEME]  = NRB_5_RL_SCHEME;
+  hc_nbins[RB_W5_OH_SCHEME] = NRB_W5_OH_SCHEME;
+
+  /* RB_11_RH_SCHEME RainBow, 11 colors, Red High, blue low  */
+  ESL_ALLOC(hc_scheme[RB_11_RH_SCHEME], sizeof(float *) * NRB_11_RH_SCHEME); 
+  for(z = 0; z < NRB_11_RH_SCHEME; z++) hc_scheme[RB_11_RH_SCHEME][z] = NULL;
+  for(z = 0; z < NRB_11_RH_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_11_RH_SCHEME][z], sizeof(float) * NCMYK); }
+
+  /* RB_11_RL_SCHEME RainBow, 11 colors, Red Low,  blue high */
+  ESL_ALLOC(hc_scheme[RB_11_RL_SCHEME], sizeof(float *) * NRB_11_RL_SCHEME); 
+  for(z = 0; z < NRB_11_RL_SCHEME; z++) hc_scheme[RB_11_RL_SCHEME][z] = NULL;
+  for(z = 0; z < NRB_11_RL_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_11_RL_SCHEME][z], sizeof(float) * NCMYK); }
+
+  /* RB_6_RH_SCHEME RainBow,  6 colors, Red High, blue low  */
+  ESL_ALLOC(hc_scheme[RB_6_RH_SCHEME], sizeof(float *) * NRB_6_RH_SCHEME); 
+  for(z = 0; z < NRB_6_RH_SCHEME; z++) hc_scheme[RB_6_RH_SCHEME][z] = NULL;
+  for(z = 0; z < NRB_6_RH_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_6_RH_SCHEME][z], sizeof(float) * NCMYK); }
+
+  /* RB_6_RL_SCHEME RainBow,  6 colors, Red Low,  blue high */
+  ESL_ALLOC(hc_scheme[RB_6_RL_SCHEME], sizeof(float *) * NRB_6_RL_SCHEME); 
+  for(z = 0; z < NRB_6_RL_SCHEME; z++) hc_scheme[RB_6_RL_SCHEME][z] = NULL;
+  for(z = 0; z < NRB_6_RL_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_6_RL_SCHEME][z], sizeof(float) * NCMYK); }
+
+  /* RB_5_RH_SCHEME RainBow,  5 colors, Red High, blue low  */
+  ESL_ALLOC(hc_scheme[RB_5_RH_SCHEME], sizeof(float *) * NRB_5_RH_SCHEME); 
+  for(z = 0; z < NRB_5_RH_SCHEME; z++) hc_scheme[RB_5_RH_SCHEME][z] = NULL;
+  for(z = 0; z < NRB_5_RH_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_5_RH_SCHEME][z], sizeof(float) * NCMYK); }
+
+  /* RB_5_RL_SCHEME RainBow,  5 colors, Red Low,  blue high */
+  ESL_ALLOC(hc_scheme[RB_5_RL_SCHEME], sizeof(float *) * NRB_5_RL_SCHEME); 
+  for(z = 0; z < NRB_5_RL_SCHEME; z++) hc_scheme[RB_5_RL_SCHEME][z] = NULL;
+  for(z = 0; z < NRB_5_RL_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_5_RL_SCHEME][z], sizeof(float) * NCMYK); }
+
+  /* RB_W5_OH_SCHEME RainBow with white, 5 colors, Orange High,  teal low, white lowest */
+  ESL_ALLOC(hc_scheme[RB_W5_OH_SCHEME], sizeof(float *) * NRB_W5_OH_SCHEME); 
+  for(z = 0; z < NRB_W5_OH_SCHEME; z++) hc_scheme[RB_W5_OH_SCHEME][z] = NULL;
+  for(z = 0; z < NRB_W5_OH_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_W5_OH_SCHEME][z], sizeof(float) * NCMYK); }
+
+  /***********************************/
+  /* fill scheme colors */
+
+  /* the 5 and 6 color rainbow schemes (the 5 color schemes are identical to the 6 color ones, they just omit blue */
+  hc_scheme[RB_6_RL_SCHEME][0][ICYAN] = hc_scheme[RB_6_RH_SCHEME][5][ICYAN] = hc_scheme[RB_5_RL_SCHEME][0][ICYAN] = hc_scheme[RB_5_RL_SCHEME][4][ICYAN] = RED2BLUE_1_OF_6_C;
+  hc_scheme[RB_6_RL_SCHEME][0][IMGTA] = hc_scheme[RB_6_RH_SCHEME][5][IMGTA] = hc_scheme[RB_5_RL_SCHEME][0][IMGTA] = hc_scheme[RB_5_RL_SCHEME][4][IMGTA] = RED2BLUE_1_OF_6_M;
+  hc_scheme[RB_6_RL_SCHEME][0][IYELW] = hc_scheme[RB_6_RH_SCHEME][5][IYELW] = hc_scheme[RB_5_RL_SCHEME][0][IYELW] = hc_scheme[RB_5_RL_SCHEME][4][IYELW] = RED2BLUE_1_OF_6_Y;
+  hc_scheme[RB_6_RL_SCHEME][0][IBLCK] = hc_scheme[RB_6_RH_SCHEME][5][IBLCK] = hc_scheme[RB_5_RL_SCHEME][0][IBLCK] = hc_scheme[RB_5_RL_SCHEME][4][IBLCK] = RED2BLUE_1_OF_6_K;
+
+  hc_scheme[RB_6_RL_SCHEME][1][ICYAN] = hc_scheme[RB_6_RH_SCHEME][4][ICYAN] = hc_scheme[RB_5_RL_SCHEME][1][ICYAN] = hc_scheme[RB_5_RL_SCHEME][3][ICYAN] = RED2BLUE_2_OF_6_C;
+  hc_scheme[RB_6_RL_SCHEME][1][IMGTA] = hc_scheme[RB_6_RH_SCHEME][4][IMGTA] = hc_scheme[RB_5_RL_SCHEME][1][IMGTA] = hc_scheme[RB_5_RL_SCHEME][3][IMGTA] = RED2BLUE_2_OF_6_M;
+  hc_scheme[RB_6_RL_SCHEME][1][IYELW] = hc_scheme[RB_6_RH_SCHEME][4][IYELW] = hc_scheme[RB_5_RL_SCHEME][1][IYELW] = hc_scheme[RB_5_RL_SCHEME][3][IYELW] = RED2BLUE_2_OF_6_Y;
+  hc_scheme[RB_6_RL_SCHEME][1][IBLCK] = hc_scheme[RB_6_RH_SCHEME][4][IBLCK] = hc_scheme[RB_5_RL_SCHEME][1][IBLCK] = hc_scheme[RB_5_RL_SCHEME][3][IBLCK] = RED2BLUE_2_OF_6_K;
+
+  hc_scheme[RB_6_RL_SCHEME][2][ICYAN] = hc_scheme[RB_6_RH_SCHEME][3][ICYAN] = hc_scheme[RB_5_RL_SCHEME][2][ICYAN]                                       = RED2BLUE_3_OF_6_C;
+  hc_scheme[RB_6_RL_SCHEME][2][IMGTA] = hc_scheme[RB_6_RH_SCHEME][3][IMGTA] = hc_scheme[RB_5_RL_SCHEME][2][IMGTA]                                       = RED2BLUE_3_OF_6_M;
+  hc_scheme[RB_6_RL_SCHEME][2][IYELW] = hc_scheme[RB_6_RH_SCHEME][3][IYELW] = hc_scheme[RB_5_RL_SCHEME][2][IYELW]                                       = RED2BLUE_3_OF_6_Y;
+  hc_scheme[RB_6_RL_SCHEME][2][IBLCK] = hc_scheme[RB_6_RH_SCHEME][3][IBLCK] = hc_scheme[RB_5_RL_SCHEME][2][IBLCK]                                       = RED2BLUE_3_OF_6_K;
+
+  hc_scheme[RB_6_RL_SCHEME][3][ICYAN] = hc_scheme[RB_6_RH_SCHEME][2][ICYAN] = hc_scheme[RB_5_RL_SCHEME][3][ICYAN] = hc_scheme[RB_5_RL_SCHEME][1][ICYAN] = RED2BLUE_4_OF_6_C;
+  hc_scheme[RB_6_RL_SCHEME][3][IMGTA] = hc_scheme[RB_6_RH_SCHEME][2][IMGTA] = hc_scheme[RB_5_RL_SCHEME][3][IMGTA] = hc_scheme[RB_5_RL_SCHEME][1][IMGTA] = RED2BLUE_4_OF_6_M;
+  hc_scheme[RB_6_RL_SCHEME][3][IYELW] = hc_scheme[RB_6_RH_SCHEME][2][IYELW] = hc_scheme[RB_5_RL_SCHEME][3][IYELW] = hc_scheme[RB_5_RL_SCHEME][1][IYELW] = RED2BLUE_4_OF_6_Y;
+  hc_scheme[RB_6_RL_SCHEME][3][IBLCK] = hc_scheme[RB_6_RH_SCHEME][2][IBLCK] = hc_scheme[RB_5_RL_SCHEME][3][IBLCK] = hc_scheme[RB_5_RL_SCHEME][1][IBLCK] = RED2BLUE_4_OF_6_K;
+
+  hc_scheme[RB_6_RL_SCHEME][4][ICYAN] = hc_scheme[RB_6_RH_SCHEME][1][ICYAN] = hc_scheme[RB_5_RL_SCHEME][4][ICYAN] = hc_scheme[RB_5_RL_SCHEME][0][ICYAN] = RED2BLUE_5_OF_6_C;
+  hc_scheme[RB_6_RL_SCHEME][4][IMGTA] = hc_scheme[RB_6_RH_SCHEME][1][IMGTA] = hc_scheme[RB_5_RL_SCHEME][4][IMGTA] = hc_scheme[RB_5_RL_SCHEME][0][IMGTA] = RED2BLUE_5_OF_6_M;
+  hc_scheme[RB_6_RL_SCHEME][4][IYELW] = hc_scheme[RB_6_RH_SCHEME][1][IYELW] = hc_scheme[RB_5_RL_SCHEME][4][IYELW] = hc_scheme[RB_5_RL_SCHEME][0][IYELW] = RED2BLUE_5_OF_6_Y;
+  hc_scheme[RB_6_RL_SCHEME][4][IBLCK] = hc_scheme[RB_6_RH_SCHEME][1][IBLCK] = hc_scheme[RB_5_RL_SCHEME][4][IBLCK] = hc_scheme[RB_5_RL_SCHEME][0][IBLCK] = RED2BLUE_5_OF_6_K;
+
+  hc_scheme[RB_6_RL_SCHEME][5][ICYAN] = hc_scheme[RB_6_RH_SCHEME][0][ICYAN] = RED2BLUE_6_OF_6_C;
+  hc_scheme[RB_6_RL_SCHEME][5][IMGTA] = hc_scheme[RB_6_RH_SCHEME][0][IMGTA] = RED2BLUE_6_OF_6_M;
+  hc_scheme[RB_6_RL_SCHEME][5][IYELW] = hc_scheme[RB_6_RH_SCHEME][0][IYELW] = RED2BLUE_6_OF_6_Y;
+  hc_scheme[RB_6_RL_SCHEME][5][IBLCK] = hc_scheme[RB_6_RH_SCHEME][0][IBLCK] = RED2BLUE_6_OF_6_K;
+
+  /* the special 4 color, plus white color scheme */
+  hc_scheme[RB_W5_OH_SCHEME][0][ICYAN] = WHITE_C;
+  hc_scheme[RB_W5_OH_SCHEME][0][IMGTA] = WHITE_M;
+  hc_scheme[RB_W5_OH_SCHEME][0][IYELW] = WHITE_Y;
+  hc_scheme[RB_W5_OH_SCHEME][0][IBLCK] = WHITE_K;
+
+  hc_scheme[RB_W5_OH_SCHEME][1][ICYAN] = RED2BLUE_5_OF_6_C;
+  hc_scheme[RB_W5_OH_SCHEME][1][IMGTA] = RED2BLUE_5_OF_6_M;
+  hc_scheme[RB_W5_OH_SCHEME][1][IYELW] = RED2BLUE_5_OF_6_Y;
+  hc_scheme[RB_W5_OH_SCHEME][1][IBLCK] = RED2BLUE_5_OF_6_K;
+
+  hc_scheme[RB_W5_OH_SCHEME][2][ICYAN] = RED2BLUE_4_OF_6_C;
+  hc_scheme[RB_W5_OH_SCHEME][2][IMGTA] = RED2BLUE_4_OF_6_M;
+  hc_scheme[RB_W5_OH_SCHEME][2][IYELW] = RED2BLUE_4_OF_6_Y;
+  hc_scheme[RB_W5_OH_SCHEME][2][IBLCK] = RED2BLUE_4_OF_6_K;
+
+  hc_scheme[RB_W5_OH_SCHEME][3][ICYAN] = RED2BLUE_3_OF_6_C;
+  hc_scheme[RB_W5_OH_SCHEME][3][IMGTA] = RED2BLUE_3_OF_6_M;
+  hc_scheme[RB_W5_OH_SCHEME][3][IYELW] = RED2BLUE_3_OF_6_Y;
+  hc_scheme[RB_W5_OH_SCHEME][3][IBLCK] = RED2BLUE_3_OF_6_K;
+
+  hc_scheme[RB_W5_OH_SCHEME][4][ICYAN] = RED2BLUE_2_OF_6_C;
+  hc_scheme[RB_W5_OH_SCHEME][4][IMGTA] = RED2BLUE_2_OF_6_M;
+  hc_scheme[RB_W5_OH_SCHEME][4][IYELW] = RED2BLUE_2_OF_6_Y;
+  hc_scheme[RB_W5_OH_SCHEME][4][IBLCK] = RED2BLUE_2_OF_6_K;
+
+  /* the 11 color rainbow schemes */
+  hc_scheme[RB_11_RL_SCHEME][0][ICYAN] = hc_scheme[RB_11_RH_SCHEME][10][ICYAN] = RED2BLUE_1_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][0][IMGTA] = hc_scheme[RB_11_RH_SCHEME][10][IMGTA] = RED2BLUE_1_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][0][IYELW] = hc_scheme[RB_11_RH_SCHEME][10][IYELW] = RED2BLUE_1_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][0][IBLCK] = hc_scheme[RB_11_RH_SCHEME][10][IBLCK] = RED2BLUE_1_OF_11_K;
+
+  hc_scheme[RB_11_RL_SCHEME][1][ICYAN] = hc_scheme[RB_11_RH_SCHEME][9][ICYAN] = RED2BLUE_2_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][1][IMGTA] = hc_scheme[RB_11_RH_SCHEME][9][IMGTA] = RED2BLUE_2_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][1][IYELW] = hc_scheme[RB_11_RH_SCHEME][9][IYELW] = RED2BLUE_2_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][1][IBLCK] = hc_scheme[RB_11_RH_SCHEME][9][IBLCK] = RED2BLUE_2_OF_11_K;
+
+  hc_scheme[RB_11_RL_SCHEME][2][ICYAN] = hc_scheme[RB_11_RH_SCHEME][8][ICYAN] = RED2BLUE_3_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][2][IMGTA] = hc_scheme[RB_11_RH_SCHEME][8][IMGTA] = RED2BLUE_3_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][2][IYELW] = hc_scheme[RB_11_RH_SCHEME][8][IYELW] = RED2BLUE_3_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][2][IBLCK] = hc_scheme[RB_11_RH_SCHEME][8][IBLCK] = RED2BLUE_3_OF_11_K;
+
+  hc_scheme[RB_11_RL_SCHEME][3][ICYAN] = hc_scheme[RB_11_RH_SCHEME][7][ICYAN] = RED2BLUE_4_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][3][IMGTA] = hc_scheme[RB_11_RH_SCHEME][7][IMGTA] = RED2BLUE_4_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][3][IYELW] = hc_scheme[RB_11_RH_SCHEME][7][IYELW] = RED2BLUE_4_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][3][IBLCK] = hc_scheme[RB_11_RH_SCHEME][7][IBLCK] = RED2BLUE_4_OF_11_K;
+
+  hc_scheme[RB_11_RL_SCHEME][4][ICYAN] = hc_scheme[RB_11_RH_SCHEME][6][ICYAN] = RED2BLUE_5_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][4][IMGTA] = hc_scheme[RB_11_RH_SCHEME][6][IMGTA] = RED2BLUE_5_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][4][IYELW] = hc_scheme[RB_11_RH_SCHEME][6][IYELW] = RED2BLUE_5_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][4][IBLCK] = hc_scheme[RB_11_RH_SCHEME][6][IBLCK] = RED2BLUE_5_OF_11_K;
+
+  hc_scheme[RB_11_RL_SCHEME][5][ICYAN] = hc_scheme[RB_11_RH_SCHEME][5][ICYAN] = RED2BLUE_6_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][5][IMGTA] = hc_scheme[RB_11_RH_SCHEME][5][IMGTA] = RED2BLUE_6_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][5][IYELW] = hc_scheme[RB_11_RH_SCHEME][5][IYELW] = RED2BLUE_6_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][5][IBLCK] = hc_scheme[RB_11_RH_SCHEME][5][IBLCK] = RED2BLUE_6_OF_11_K;
+
+  hc_scheme[RB_11_RL_SCHEME][6][ICYAN] = hc_scheme[RB_11_RH_SCHEME][4][ICYAN] = RED2BLUE_7_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][6][IMGTA] = hc_scheme[RB_11_RH_SCHEME][4][IMGTA] = RED2BLUE_7_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][6][IYELW] = hc_scheme[RB_11_RH_SCHEME][4][IYELW] = RED2BLUE_7_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][6][IBLCK] = hc_scheme[RB_11_RH_SCHEME][4][IBLCK] = RED2BLUE_7_OF_11_K;
+
+  hc_scheme[RB_11_RL_SCHEME][7][ICYAN] = hc_scheme[RB_11_RH_SCHEME][3][ICYAN] = RED2BLUE_8_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][7][IMGTA] = hc_scheme[RB_11_RH_SCHEME][3][IMGTA] = RED2BLUE_8_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][7][IYELW] = hc_scheme[RB_11_RH_SCHEME][3][IYELW] = RED2BLUE_8_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][7][IBLCK] = hc_scheme[RB_11_RH_SCHEME][3][IBLCK] = RED2BLUE_8_OF_11_K;
+
+  hc_scheme[RB_11_RL_SCHEME][8][ICYAN] = hc_scheme[RB_11_RH_SCHEME][2][ICYAN] = RED2BLUE_9_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][8][IMGTA] = hc_scheme[RB_11_RH_SCHEME][2][IMGTA] = RED2BLUE_9_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][8][IYELW] = hc_scheme[RB_11_RH_SCHEME][2][IYELW] = RED2BLUE_9_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][8][IBLCK] = hc_scheme[RB_11_RH_SCHEME][2][IBLCK] = RED2BLUE_9_OF_11_K;
+
+  hc_scheme[RB_11_RL_SCHEME][9][ICYAN] = hc_scheme[RB_11_RH_SCHEME][1][ICYAN] = RED2BLUE_10_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][9][IMGTA] = hc_scheme[RB_11_RH_SCHEME][1][IMGTA] = RED2BLUE_10_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][9][IYELW] = hc_scheme[RB_11_RH_SCHEME][1][IYELW] = RED2BLUE_10_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][9][IBLCK] = hc_scheme[RB_11_RH_SCHEME][1][IBLCK] = RED2BLUE_10_OF_11_K;
+
+  hc_scheme[RB_11_RL_SCHEME][10][ICYAN] = hc_scheme[RB_11_RH_SCHEME][0][ICYAN] = RED2BLUE_11_OF_11_C;
+  hc_scheme[RB_11_RL_SCHEME][10][IMGTA] = hc_scheme[RB_11_RH_SCHEME][0][IMGTA] = RED2BLUE_11_OF_11_M;
+  hc_scheme[RB_11_RL_SCHEME][10][IYELW] = hc_scheme[RB_11_RH_SCHEME][0][IYELW] = RED2BLUE_11_OF_11_Y;
+  hc_scheme[RB_11_RL_SCHEME][10][IBLCK] = hc_scheme[RB_11_RH_SCHEME][0][IBLCK] = RED2BLUE_11_OF_11_K;
+
+  /*****************************************
+   * Open the MSA file; determine alphabet;
+   *****************************************/
+  
+  do_small = esl_opt_GetBoolean(go, "--small") ? TRUE : FALSE;
+  fmt      = do_small ? eslMSAFILE_PFAM : eslMSAFILE_STOCKHOLM;
+  abc      = esl_alphabet_Create(eslRNA);                       /* Assert RNA alphabet */
+
+  /* <abc> is only used for gap counting, I believe
+   * alignments are opened in TEXT mode.
+   */
+
+  if (do_small)
+    {
+      status = esl_msafile2_Open(alifile, NULL, &afp2);
+      if      (status == eslENOTFOUND) esl_fatal("Alignment file %s doesn't exist or is not readable\n", alifile);
+      else if (status != eslOK)        esl_fatal("Alignment file open failed with error %d\n", status);
+    }
+  else
+    {
+      status = esl_msafile_Open(NULL, alifile, NULL, fmt, NULL, &afp);
+      if (status != eslOK) esl_msafile_OpenFailure(afp, status);
+    }
+
+  /* Read the mask files, if nec */
+  if(esl_opt_IsOn(go, "--mask")) { 
+    if((status = read_mask_file(esl_opt_GetString(go, "--mask"), errbuf, &mask, &masklen, &mask_has_internal_zeroes)) != eslOK) esl_fatal(errbuf);
+  }
+  if(esl_opt_IsOn(go, "--mask-diff")) { 
+    if((status = read_mask_file(esl_opt_GetString(go, "--mask-diff"), errbuf, &mask2, &mask2len, &mask2_has_internal_zeroes)) != eslOK) esl_fatal(errbuf);
+    if(masklen != mask2len) esl_fatal("Mask in %f length (%d) differs from mask in %f (%d)!", esl_opt_GetString(go, "--mask"), masklen, esl_opt_GetString(go, "--mask-diff"), mask2len);
+  }
+
+  /* Open output files, if necessary */
+  if (esl_opt_IsOn(go, "--tabfile")) { 
+    if((tabfp = fopen(esl_opt_GetString(go, "--tabfile"), "w")) == NULL) esl_fatal("Failed to open output file %s\n", esl_opt_GetString(go, "--tabfile"));
+  }
+
+  /**********************
+   * Read the alignment *
+   **********************/
+  if (do_small)
+    {
+      status = esl_msafile2_ReadInfoPfam(afp2, NULL, abc, -1, NULL, NULL, &msa, &msa_nseq, &msa_alen, NULL, NULL, NULL, NULL, NULL, &abc_ct, &pp_ct, NULL, NULL, NULL);
+      if      (status == eslEFORMAT) esl_fatal("Alignment file parse error:\n%s\n", afp2->errbuf);
+      else if (status == eslEINVAL)  esl_fatal("Alignment file parse error:\n%s\n", afp2->errbuf);
+      else if (status == eslEOF)     esl_fatal("No alignments found in file %s\n", alifile);
+      else if (status != eslOK)      esl_fatal("Alignment file read failed with error code %d\n%s", status, afp2);
+
+      msa->alen = msa_alen; 
+    }
+  else
+    {
+      status = esl_msafile_Read(afp, &msa); /* if ! do_small, we read full aln into memory */
+      if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+
+      msa_nseq = msa->nseq; 
+      msa_alen = msa->alen; 
+    }
+
+  if(msa->rf == NULL) esl_fatal("First MSA in %s does not have RF annotation.", alifile);
+
+  /* determine non-gap RF length (consensus length) */
+  rflen = 0;
+  for(apos = 0; apos < msa->alen; apos++) { 
+    if(esl_abc_CIsResidue(abc, msa->rf[apos])) {  
+      rflen++;
+    }
+  }
+  /* We've read the alignment, now read the template postscript file (we do this second b/c the RF len of the alignment tells us which postscript template to use) */
+  if((status = parse_template_file(templatefile, go, errbuf, rflen, &ps) != eslOK)) esl_fatal(errbuf);
+  
+  
+  /**************************************************************************************************************
+   * Now that we have the msa and know what template we're using, determine what type of pages we'll be drawing *
+   **************************************************************************************************************/
+   /* do_default_set: this is TRUE if either -d is enabled AND/OR zero of: 
+    * {--info, --mutinfo, --ifreq, --iavglen, --dall, --dint, --span, --mask-col, --mask-diff,
+    *  --dfile, --efile, --cons, --prob, --rf, --indi} are enabled.
+    * When do_default_set is TRUE, we draw cons, info, mutinfo, ifreq, iavglen, dall, and prob
+    * (if the alignment has posterior probabilities).
+    * 
+    * Careful: this block assumes that all boolean options are OFF (FALSE) by default */
+  do_default_set = TRUE;
+  if(esl_opt_GetBoolean(go, "--info"))      { do_info     = TRUE; do_default_set = FALSE; }
+  if(esl_opt_GetBoolean(go, "--mutinfo"))   { do_mutinfo  = TRUE; do_default_set = FALSE; }
+  if(esl_opt_GetBoolean(go, "--ifreq"))     { do_ifreq    = TRUE; do_default_set = FALSE; }
+  if(esl_opt_GetBoolean(go, "--iavglen"))   { do_iavglen  = TRUE; do_default_set = FALSE; }
+  if(esl_opt_GetBoolean(go, "--dall"))      { do_dall     = TRUE; do_default_set = FALSE; }
+  if(esl_opt_GetBoolean(go, "--dint"))      { do_dint     = TRUE; do_default_set = FALSE; }
+  if(esl_opt_GetBoolean(go, "--prob"))      { do_prob     = TRUE; do_default_set = FALSE; }
+  if(esl_opt_GetBoolean(go, "--span"))      { do_span     = TRUE; do_default_set = FALSE; }
+  if(esl_opt_GetBoolean(go, "--mask-col"))  { do_maskcol  = TRUE; do_default_set = FALSE; }
+  if(esl_opt_IsOn      (go, "--mask-diff")) { do_maskdiff = TRUE; do_default_set = FALSE; }
+  if(esl_opt_IsOn      (go, "--dfile"))     { do_dfile    = TRUE; do_default_set = FALSE; }
+  if(esl_opt_IsOn      (go, "--efile"))     { do_efile    = TRUE; do_default_set = FALSE; }
+  if(esl_opt_GetBoolean(go, "--cons"))      { do_cons     = TRUE; do_default_set = FALSE; }
+  if(esl_opt_GetBoolean(go, "--rf")) { 
+    if(msa->rf == NULL) esl_fatal("--rf selected by msa does not have #=GC RF annotation");
+    do_rf = TRUE;
+    do_default_set = FALSE;
+  }
+  if(esl_opt_GetBoolean(go, "--indi")) { 
+    do_indi     = TRUE; 
+    do_default_set = FALSE; 
+    /* Predict size of indi output file, based on two data points:
+     * 2000 page tRNA rflen=71 is 35 Mb, 2000 page archaeal SSU rflen 1508 is 560 Mb,
+     * =~ 0.0002 Mb per page per rfpos */
+    predicted_Mb = (int) (ps->rflen * 0.0002 * msa_nseq);
+    if(! esl_opt_GetBoolean(go, "--no-pp")) predicted_Mb *= 2;
+    /* round to nearest 10 Mb */ 
+    tmp_Mb = 10; while(tmp_Mb < predicted_Mb) tmp_Mb += 10;
+    predicted_Mb = tmp_Mb;
+    if(predicted_Mb > MAXMBWITHOUTFORCE && (! esl_opt_GetBoolean(go, "-f"))) { 
+      esl_fatal("WARNING: drawing individual seqs and msa has %d seqs in it,\noutput postcript file will be large (~%d Mb).\nUse -f to override this warning and do it anyway.", msa_nseq, predicted_Mb);
+    }
+  }
+  /* if -d: if we've made do_default_set as FALSE, we set it back to TRUE */
+  if(esl_opt_GetBoolean(go, "-d")) do_default_set = TRUE;
+  if(do_default_set) { /* set default pages */
+    do_cons = do_info = do_mutinfo = do_ifreq = do_iavglen = do_dall = TRUE;
+    if((do_small && pp_ct != NULL) || (msa->pp != NULL)) do_prob = TRUE;
+  }
+  /* determine if tabfile was incorrectly used */
+  if(tabfp != NULL && 
+     do_info == FALSE && do_mutinfo == FALSE && do_ifreq  == FALSE && do_prob == FALSE &&
+     do_iavglen == FALSE && do_dall == FALSE && do_dint   == FALSE && do_span == FALSE && do_indi == FALSE) { 
+    esl_fatal("--tabfile only makes sense w/0 other options, or with >= 1 of --info,--mutinfo,--ifreq,--iavglen,--prob,--dall,--dint,--span,--indi");
+  }
+  need_span_ct = (do_dint || do_span || do_ifreq || do_iavglen) ? TRUE : FALSE;
+
+  if(do_small && (do_dint || do_span || do_ifreq || do_iavglen || do_mutinfo)) { 
+    /* If we're in small mem mode, now that we know msa->rf and msa->ss_cons, 
+     * we do a second read of the msa to get bpct, spos_ct and epos_ct, 
+     * but only if we need them (if --span, --dint, or --mutinfo). 
+     * To do this, we close the alifile and reopen it, so we can read the 1st
+     * alignment again.
+     */
+    esl_msafile2_Close(afp2);
+    status = esl_msafile2_Open(alifile, NULL, &afp2);
+    if      (status == eslENOTFOUND) esl_fatal("2nd pass, alignment file %s doesn't exist or is not readable\n", alifile);
+    else if (status == eslEFORMAT)   esl_fatal("2nd pass, couldn't determine format of alignment %s\n", alifile);
+    else if (status != eslOK)        esl_fatal("2nd pass, alignment file open failed with error %d\n", status);
+    
+    status = esl_msafile2_ReadInfoPfam(afp2, NULL, abc, msa_alen, msa->rf, msa->ss_cons, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &bp_ct, &spos_ct, &epos_ct);
+    if      (status == eslEFORMAT) esl_fatal("2nd pass, Alignment file parse error:\n%s\n", afp2->errbuf);
+    else if (status == eslEINVAL)  esl_fatal("2nd pass, Alignment file parse error:\n%s\n", afp2->errbuf);
+    else if (status == eslEOF)     esl_fatal("2nd pass, No alignments found in file %s\n", alifile);
+    else if (status != eslOK)      esl_fatal("2nd pass, Alignment file read failed with error code %d\n", status);
+  }
+
+  /* if we get here, the postscript file has been successfully read; now we open the output file */
+  if(ofp == NULL) { 
+    /* open postscript output file for writing */
+    if ((ofp = fopen(outfile, "w")) == NULL)
+      esl_fatal("Failed to open output postscript file %s\n", esl_opt_GetArg(go, 2));
+  }
+  
+  /* determine position for header and legend */
+  if((status = setup_sspostscript(ps, errbuf) != eslOK)) esl_fatal(errbuf);
+  if(ps->rflen == 0)     esl_fatal("MSA has consensus (non-gap RF) length of %d which != template file consensus length of %d.", rflen, ps->rflen);
+  if(rflen != ps->rflen) esl_fatal("MSA has consensus (non-gap RF) length of %d which != template file consensus length of %d.", rflen, ps->rflen);
+  
+  /* add the mask if there is one */
+  if(mask != NULL) add_mask_to_ss_postscript(ps, mask);
+  if(mask != NULL && ps->rflen != masklen) esl_fatal("MSA has consensus (non-gap RF) length of %d which != lane mask length of %d from mask file %s.", rflen, masklen, esl_opt_GetString(go, "--mask"));
+  
+  if ((status = validate_and_update_sspostscript_given_msa(go, abc, ps, msa, msa_nseq, errbuf)) != eslOK) esl_fatal(errbuf);
+
+  /* get the information we need from the alignment */
+  if(! do_small) { /* derive counts from the msa for postscript diagrams, we do this our functions for drawing diagrams work in small mem or big mem mode */
+    if((status = count_msa(abc, msa, errbuf, &(abc_ct), &(bp_ct), (do_prob ? &(pp_ct) : NULL), &(spos_ct), &(epos_ct))) != eslOK) esl_fatal(errbuf);
+  }    
+  if (esl_opt_GetBoolean(go, "--prob") && pp_ct == NULL) esl_fatal("--prob requires all sequences have PP annotation");
+
+  /* read the insert file, if nec, we have to do this before we determine the span count in case inserts have been removed from the msa,
+   * in which case the spos_ct and epos_ct's from either count_msa or esl_msafile2_ReadInfoPfam() could be slightly incorrect, we'll use
+   * srfoff_ct and erfoff_ct from get_insert_info_from_ifile() to correct them when we derive span_ct from spos_ct and epos_ct together in get_span_ct(). */
+  if(esl_opt_IsOn(go, "--ifile")) { 
+    get_insert_info_from_ifile((esl_opt_GetString(go, "--ifile")), ps->rflen, msa_nseq, NULL, &(nseq_with_ins_ct), &(nins_ct), NULL, &srfoff_ct, &erfoff_ct); /* dies with esl_fatal() upon an error */
+  }
+  /* determine span count */
+  if(need_span_ct) { 
+    if((status = get_span_ct(ps->msa_rf2a_map, msa_alen, ps->rflen, msa_nseq, spos_ct, epos_ct, srfoff_ct, erfoff_ct, &span_ct)) != eslOK) esl_fatal("Out of memory, getting span_ct array.");
+  }
+  /* determine consensus sequence */
+  if((status = get_consensus_seqs_from_abc_ct(go, ps, errbuf, abc_ct, abc, msa_alen)) != eslOK) esl_fatal(errbuf);
+
+  /* step through each type of page, creating it if nec */
+  if(do_cons) { 
+    /* this will work in either small memory or normal memory mode */
+    if((status = cons_seq_sspostscript(go, errbuf, ps, hc_onecell,
+				       BLACKOC,       /* one-cell legend, watson-crick bp color */
+				       GREENOC,       /* one-cell legend, G-U or U-G bp color */
+				       REDOC,         /* one-cell legend, color for noncanonical bps */
+				       LIGHTPURPLEOC, /* one-cell legend, internal double-gap bp color */
+				       LIGHTPURPLEOC)) != eslOK) /* one-cell legend, internal half-gap bp color, only relevant if do_rescol == TRUE */
+      esl_fatal(errbuf);
+  }  
+
+  if(do_rf) { 
+    /* this will work in either small memory or normal memory mode */
+    if((status = rf_seq_sspostscript(go, errbuf, ps, msa, (! esl_opt_GetBoolean(go, "--no-bp")), hc_onecell, 
+				     BLACKOC,          /* one-cell legend, watson-crick bp color, only relevant if do_rescol == TRUE */
+				     GREENOC,          /* one-cell legend, G-U or U-G bp color, only relevant if do_rescol == TRUE */
+				     REDOC)) != eslOK) /* one-cell legend, color for noncanonical bps */
+      esl_fatal(errbuf);
+  }
+
+  if(do_info) { 
+    if((status = infocontent_sspostscript(go, abc, errbuf, ps, abc_ct, msa_nseq, hc_scheme, RB_6_RL_SCHEME, hc_nbins[RB_6_RL_SCHEME], hc_onecell, LIGHTGREYOC, tabfp)) != eslOK) esl_fatal(errbuf);
+  }
+  
+  if(do_mutinfo) { /* mutual info page */
+    if((status = mutual_information_sspostscript(go, abc, errbuf, ps, bp_ct, msa_nseq, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME], hc_onecell, GREYOC, LIGHTGREYOC, tabfp)) != eslOK) esl_fatal(errbuf);
+  }
+  
+  if(do_ifreq || do_iavglen) { /* insert frequency page */
+    /* first, determine number of sequences with inserts after each position, 3 different ways depending on command line options */
+    if(esl_opt_IsOn(go, "--ifile")) { /* read the insert file from cmalign */
+      /* we've already read the ifile above, and filled nseq_with_ins_ct, but we check here */
+      if(nseq_with_ins_ct == NULL) esl_fatal("Internal error, --ifile selected, but not read");
+    }
+    else if (do_small) { /* use abc_ct to derive nseq_with_ins_ct */
+      get_insert_info_from_abc_ct(abc_ct, abc, msa->rf, msa_alen, ps->rflen, &(nseq_with_ins_ct), &(nins_ct)); /* dies with esl_fatal() upon an error */
+    }
+    else { 
+      get_insert_info_from_msa(abc, msa, ps->rflen, &(nseq_with_ins_ct), &(nins_ct), NULL); /* dies with esl_fatal() upon an error */
+    }
+    /* now draw the insert diagram */
+    if(do_ifreq) { 
+      if((status = insertfreq_sspostscript(go, errbuf, ps, nseq_with_ins_ct, span_ct, msa_nseq, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME], hc_onecell, LIGHTGREYOC, GREYOC, tabfp)) != eslOK) esl_fatal(errbuf);
+    }
+    if(do_iavglen) { 
+      if((status = insertavglen_sspostscript(go, errbuf, ps, nseq_with_ins_ct, nins_ct, span_ct, msa_nseq, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME], hc_onecell, LIGHTGREYOC, tabfp)) != eslOK) esl_fatal(errbuf);
+    }
+  }
+  
+  if(do_dall) { /* make a new postscript page marking all deletes */
+    if((status = delete_sspostscript(go, abc, errbuf, ps, abc_ct, span_ct, msa_nseq, TRUE, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME], hc_onecell, LIGHTGREYOC, DARKGREYOC, tabfp)) != eslOK) esl_fatal(errbuf);
+  }
+  
+  if(do_dint) { /* internal deletes */
+    if((status = delete_sspostscript(go, abc, errbuf, ps, abc_ct, span_ct, msa_nseq, FALSE, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME], hc_onecell, LIGHTGREYOC, DARKGREYOC, tabfp)) != eslOK) esl_fatal(errbuf);
+  }
+
+  if(do_prob && pp_ct != NULL) { /* avg post prob */
+    if((status = avg_posteriors_sspostscript(go, abc, errbuf, ps, pp_ct, msa_nseq, hc_scheme, RB_6_RL_SCHEME, hc_nbins[RB_6_RL_SCHEME], hc_onecell, LIGHTGREYOC, tabfp)) != eslOK) esl_fatal(errbuf);
+  }
+      
+  if(do_span) { /* span */
+    if((status = span_sspostscript(go, errbuf, ps, span_ct, msa_nseq, hc_scheme, RB_6_RL_SCHEME, hc_nbins[RB_6_RL_SCHEME], hc_onecell, LIGHTGREYOC, BLACKOC, tabfp)) != eslOK) esl_fatal(errbuf);
+  }
+
+  if(do_maskcol) { 
+    /* Paint positions excluded by the mask magenta, unless the mask has zero internal exclusions.
+     * Such a mask is a 'truncating' mask, that excludes only a 5' contiguous set of columns, and a 3' contiguous set of columns, in this case paint excluded positions light grey. */
+    if((status = colormask_sspostscript(go, errbuf, ps, msa, hc_onecell, BLACKOC, (mask_has_internal_zeroes ? MAGENTAOC : LIGHTGREYOC))) != eslOK) esl_fatal(errbuf);
+  }
+
+  if(do_maskdiff) { 
+    if((status = diffmask_sspostscript(go, errbuf, ps, msa, mask2, hc_onecell, BLACKOC, CYANOC, MAGENTAOC, LIGHTGREYOC)) != eslOK) esl_fatal(errbuf);
+  }
+
+  if(do_dfile) {
+    if((status = drawfile2sspostscript(go, errbuf, ps, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME])) != eslOK) esl_fatal(errbuf);
+  }
+
+  if(do_efile) { 
+    if((status = expertfile2sspostscript(go, errbuf, ps)) != eslOK) esl_fatal(errbuf);
+  }
+
+  if(do_indi) { /* we're printing all individual seqs */
+    /* get insert info we'll use in individuals_sspostscript() */
+    if(esl_opt_IsOn(go, "--ifile")) { /* read the insert file from cmalign, with info from all seqs  */
+      get_insert_info_from_ifile((esl_opt_GetString(go, "--ifile")), ps->rflen, msa_nseq, NULL, NULL, NULL, &(per_seq_ins_ct), NULL, NULL); /* dies with esl_fatal() upon an error */
+    }
+    else { 
+      get_insert_info_from_msa(abc, msa, ps->rflen, NULL, NULL, &per_seq_ins_ct); /* dies with esl_fatal() upon an error */
+    }
+    /* we have msa and per_seq_ins_ct for all possible combos of --small and --ifile, 
+     * draw the individual sequence pages */
+    if((status = individuals_sspostscript(go, abc, errbuf, ps, abc_ct,
+					  msa, per_seq_ins_ct, 
+					  ((! esl_opt_GetBoolean(go, "--no-pp")) && (msa->pp != NULL)), /* do_prob? draw pp pages? */
+					  (! esl_opt_GetBoolean(go, "--no-bp")), /* do_rescol: paint nucleotides different colors based on basepair type? */
+					  hc_scheme, RB_W5_OH_SCHEME, RB_6_RL_SCHEME, hc_nbins[RB_W5_OH_SCHEME], hc_nbins[RB_6_RL_SCHEME], hc_onecell, 
+					  LIGHTGREYOC,   /* one-cell legend, 5'/3' flush color */
+					  BLACKOC,       /* one-cell legend, watson-crick bp color, only relevant if do_rescol == TRUE */
+					  GREENOC,       /* one-cell legend, G-U or U-G bp color, only relevant if do_rescol == TRUE */
+					  REDOC,         /* one-cell legend, non-canonical bp color, only relevant if do_rescol == TRUE */
+					  LIGHTPURPLEOC, /* one-cell legend, internal double-gap bp color, only relevant if do_rescol == TRUE */
+					  LIGHTPURPLEOC, /* one-cell legend, internal half-gap bp color, only relevant if do_rescol == TRUE */
+					  LIGHTGREYOC,    /* one-cell legend, color for gap in post prob pages */
+					  tabfp)) != eslOK)
+      esl_fatal(errbuf);
+  }
+  if((status = draw_sspostscript(ofp, go, errbuf, command, date, hc_scheme, ps)) != eslOK) esl_fatal(errbuf);
+  free(command);
+  fclose(ofp);
+  printf("# %d page postscript saved to file %s.\n", ps->npage, outfile);
+
+  /* Cleanup, normal return
+   */
+  if(tabfp != NULL) { 
+    fclose(tabfp); 
+    if(do_indi && (do_info || do_mutinfo || do_ifreq || do_iavglen || do_dall || do_dint || do_prob || do_span)) { 
+      printf("# Per-position and per-sequence data saved to tab-delimited text file %s.\n", esl_opt_GetString(go, "--tabfile"));
+    }
+    else if (do_indi) { 
+      printf("# Per-sequence data saved to tab-delimited text file %s.\n", esl_opt_GetString(go, "--tabfile"));
+    }
+    else { 
+      printf("# Per-position data saved to tab-delimited text file %s.\n", esl_opt_GetString(go, "--tabfile"));
+    }
+  }
+
+  if(abc_ct != NULL)  esl_Free2D((void **) abc_ct, msa->alen);
+  if(pp_ct != NULL)   esl_Free2D((void **) pp_ct, msa->alen);
+  if(bp_ct  != NULL)  esl_Free3D((void ***) bp_ct, msa->alen, abc->Kp);
+  if(spos_ct != NULL) free(spos_ct);
+  if(epos_ct != NULL) free(epos_ct);
+  if(srfoff_ct != NULL) free(srfoff_ct);
+  if(erfoff_ct != NULL) free(erfoff_ct);
+  if(span_ct != NULL) free(span_ct);
+  if(nseq_with_ins_ct != NULL) free(nseq_with_ins_ct);
+  if(per_seq_ins_ct != NULL) esl_Free2D((void **) per_seq_ins_ct, msa_nseq);
+  if(mask != NULL) free(mask);
+  if(date != NULL) free(date);
+  free_sspostscript(ps);
+  esl_alphabet_Destroy(abc);
+  if (afp)  esl_msafile_Close(afp);
+  if (afp2) esl_msafile2_Close(afp2);
+  esl_getopts_Destroy(go);
+  free(hc_nbins);
+  for(z = 0; z < NOC; z++) free(hc_onecell[z]);
+  free(hc_onecell);
+  for(z = 0; z < NRB_11_RH_SCHEME; z++) free(hc_scheme[RB_11_RH_SCHEME][z]);
+  for(z = 0; z < NRB_11_RL_SCHEME; z++) free(hc_scheme[RB_11_RL_SCHEME][z]);
+  for(z = 0; z < NRB_6_RH_SCHEME; z++) free(hc_scheme[RB_6_RH_SCHEME][z]);
+  for(z = 0; z < NRB_6_RL_SCHEME; z++) free(hc_scheme[RB_6_RL_SCHEME][z]);
+  for(z = 0; z < NRB_5_RH_SCHEME; z++) free(hc_scheme[RB_5_RH_SCHEME][z]);
+  for(z = 0; z < NRB_5_RL_SCHEME; z++) free(hc_scheme[RB_5_RL_SCHEME][z]);
+  for(z = 0; z < NRB_W5_OH_SCHEME; z++) free(hc_scheme[RB_W5_OH_SCHEME][z]);
+  for(z = 0; z < NSCHEMES; z++) { free(hc_scheme[z]); }
+  free(hc_scheme);
+  if(msa != NULL) esl_msa_Destroy(msa);
+  return 0;
+
+  ERROR: 
+  esl_fatal("Memory allocation error in main().");
+  return eslFAIL;/* silence compiler warning about void return*/
+}
+
+/* Function: create_sspostscript()
+ * 
+ * Purpose:  Create and initialize a SS postscript data structure.
+ * Return:   ps
+ */
+static SSPostscript_t *
+create_sspostscript(const ESL_GETOPTS *go)
+{
+  int status;
+  SSPostscript_t *ps;
+
+  ESL_ALLOC(ps, sizeof(SSPostscript_t));
+
+  ps->npage    = 0;
+  ps->modelname = NULL;
+  ps->modeA = NULL;
+  ps->descA = NULL;
+  ps->headerx = 0.;
+  ps->headery = 0.;
+  ps->headerx_desc = 0.;
+  ps->headerx_charsize = 0.;
+  ps->headery_charsize = 0.;
+  ps->desc_max_chars = 0;
+  ps->leg_posn = -1;
+  ps->leg_cellsize = -1;
+  ps->leg_rhs_space = 0.;
+  ps->legx_offset = 0.;
+  ps->legy_offset = 0.;
+  ps->legx = 0.;
+  ps->legy = 0.;
+  ps->cur_legy = 0.;
+  ps->legx_charsize = 0.;
+  ps->legy_charsize = 0.;
+  ps->legx_max_chars = 0;
+  ps->legx_stats = 0.;
+  ps->pagex_max = 0.;
+  ps->pagey_max = 0.;
+  ps->scale = -1.; /* we'll check if this is still negative after reading the template file, if so it's an error */
+  ps->regurgA  = NULL;
+  ps->nregurg  = 0;
+  ps->posntextA = NULL;
+  ps->posntextxA = ps->posntextyA = NULL;
+  ps->nposntext = 0;
+  ps->ticksx1A = ps->ticksx2A = ps->ticksy1A = ps->ticksy2A = NULL;
+  ps->nticks = 0;
+  ps->bpx1A = ps->bpx2A = ps->bpy1A = ps->bpy2A = NULL;
+  ps->nbp = 0;
+  ps->rxA = ps->ryA = NULL;
+  ps->rflen = 0;
+  ps->rAA          = NULL;
+  ps->rcolAAA      = NULL;
+  ps->bcolAAA      = NULL;
+  ps->otypeAA      = NULL;
+  ps->occlAAA      = NULL;
+  ps->nocclA       = NULL;
+  ps->sclAA        = NULL;
+  ps->tlAAA        = NULL;
+  ps->ntlA         = NULL;
+  ps->mask         = NULL;
+  ps->nalloc       = 50;
+  ps->msa_cseq_maj = NULL;
+  ps->msa_cseq_amb = NULL;
+  ps->msa_ct       = NULL;
+  ps->msa_nbp      = 0;
+  ps->msa_rf2a_map = NULL;
+  ps->msa_a2rf_map = NULL;
+  ps->uaseqlenA    = NULL;
+  ps->seqidxA      = NULL;
+  ps->msa          = NULL;
+  ps->abc          = NULL;
+  return ps;
+
+ ERROR: esl_fatal("create_sspostscript(): memory allocation error.");
+  return NULL; /* NEVERREACHED */
+}
+
+/* Function: setup_sspostscript()
+ * 
+ * Purpose:  Determine positions for header and legend in a SSPostscript_t()
+ * Return:   eslOK
+ */
+static int
+setup_sspostscript(SSPostscript_t *ps, char *errbuf)
+{
+  float xroom, yroom;
+  float header_max_chars;
+
+  if(ps->rflen == 0) ESL_FAIL(eslEINVAL, errbuf, "Failed to ready any nucleotides in template file.");
+
+  /* set up legx, legy, this is a hack (takes advantage of position of 3' nucleotide in all SSU models) */
+  ps->legx = ps->rxA[ps->leg_posn-1] + ps->legx_offset;
+  ps->legy = ps->ryA[ps->leg_posn-1] + ps->legy_offset;
+  ps->cur_legy = ps->legy;
+
+  ps->pagex_max = POSTSCRIPT_PAGEWIDTH / ps->scale;
+  ps->pagey_max = POSTSCRIPT_PAGEHEIGHT / ps->scale;
+
+  ps->headerx = 0. + PAGE_SIDEBUF;
+  ps->headery = ps->pagey_max - PAGE_TOPBUF - ((HEADER_FONTSIZE_UNSCALED) / ps->scale);
+
+  /* determine max number of nucleotides we can print before we run off the page in the legend section */
+  ps->legx_charsize = (LEG_FONTSIZE_UNSCALED / COURIER_HEIGHT_WIDTH_RATIO) / ps->scale; 
+  ps->legy_charsize = (LEG_FONTSIZE_UNSCALED) / ps->scale; 
+  xroom  = ps->pagex_max - ps->legx - (ps->leg_cellsize - ps->legx_charsize);
+  yroom  = ps->pagey_max - ps->legy - (ps->leg_cellsize - ps->legy_charsize);
+  ps->legx_max_chars = (int) (xroom / ps->legx_charsize);
+  ps->legy_max_chars = (int) (yroom / ps->legy_charsize);
+  ps->legx_stats     = ps->pagex_max - PAGE_SIDEBUF - ps->leg_rhs_space - (LEG_EXTRA_COLUMNS * ps->legx_charsize);
+
+  /* determine max size of description that will fit in header */
+  //header_fontwidth      = (HEADER_FONTSIZE_UNSCALED / COURIER_HEIGHT_WIDTH_RATIO) / ps->scale;   // SRE: appears to be unused.
+  ps->headerx_charsize  = (HEADER_FONTSIZE_UNSCALED / COURIER_HEIGHT_WIDTH_RATIO) / ps->scale; 
+  header_max_chars      = (int) ((ps->pagex_max - 2*PAGE_SIDEBUF) / ps->headerx_charsize);
+  ps->headery_charsize  = (HEADER_FONTSIZE_UNSCALED) / ps->scale; 
+  ps->desc_max_chars    = header_max_chars - (HEADER_MODELNAME_MAXCHARS + 6 + 6 + 8 +2); /*6,6,8 for #pos,#bps,#seq plus 2 spaces each, plus 2 for after name */
+  ps->headerx_desc      = ps->pagex_max - PAGE_SIDEBUF - (ps->desc_max_chars * ps->headerx_charsize);
+
+  return eslOK;
+}
+
+/* Function: free_sspostscript()
+ * 
+ * Purpose:  Free a SS postscript data structure.
+ * Return:   (void)
+ */
+static void
+free_sspostscript(SSPostscript_t *ps)
+{
+  int i, p, c, l, l2;
+
+  if(ps->modelname != NULL) free(ps->modelname);
+
+  if(ps->modeA != NULL)  free(ps->modeA);
+
+  if(ps->descA != NULL) {
+    for(i = 0; i < ps->npage; i++) { 
+      if(ps->descA[i] != NULL) {
+	free(ps->descA[i]);
+      }
+    }
+    free(ps->descA);
+  }
+
+  if(ps->regurgA != NULL) {
+    for(i = 0; i < ps->nregurg; i++) { 
+      if(ps->regurgA[i] != NULL) {
+	free(ps->regurgA[i]);
+      }
+    }
+    free(ps->regurgA);
+  }
+
+  if(ps->posntextA  != NULL) { 
+    for(i = 0; i < ps->nposntext; i++) free(ps->posntextA[i]);
+    free(ps->posntextA);
+  }
+  if(ps->posntextxA != NULL) free(ps->posntextxA);
+  if(ps->posntextyA != NULL) free(ps->posntextyA);
+  if(ps->ticksx1A != NULL) free(ps->ticksx1A);
+  if(ps->ticksy1A != NULL) free(ps->ticksy1A);
+  if(ps->ticksx2A != NULL) free(ps->ticksx2A);
+  if(ps->ticksy2A != NULL) free(ps->ticksy2A);
+  if(ps->bpx1A != NULL) free(ps->bpx1A);
+  if(ps->bpy1A != NULL) free(ps->bpy1A);
+  if(ps->bpx2A != NULL) free(ps->bpx2A);
+  if(ps->bpy2A != NULL) free(ps->bpy2A);
+  if(ps->rxA != NULL) free(ps->rxA);
+  if(ps->ryA != NULL) free(ps->ryA);
+
+  if(ps->rAA != NULL) { 
+    for(p = 0; p < ps->npage; p++) 
+      if(ps->rAA[p] != NULL) free(ps->rAA[p]);
+    free(ps->rAA);
+  }
+
+  if(ps->rcolAAA != NULL) { 
+    for(p = 0; p < ps->npage; p++) { 
+      if(ps->rcolAAA[p] != NULL) { 
+	for(c = 0; c < ps->rflen; c++) free(ps->rcolAAA[p][c]);
+	free(ps->rcolAAA[p]); 
+      }
+    }
+    free(ps->rcolAAA); 
+  }
+
+  if(ps->bcolAAA != NULL) { 
+    for(p = 0; p < ps->npage; p++) { 
+      if(ps->bcolAAA[p] != NULL) { 
+	for(c = 0; c < ps->rflen; c++) free(ps->bcolAAA[p][c]);
+	free(ps->bcolAAA[p]); 
+      }
+    }
+    free(ps->bcolAAA); 
+  }
+
+  if(ps->otypeAA != NULL) { 
+    for(p = 0; p < ps->npage; p++) { 
+      if(ps->otypeAA[p] != NULL) { 
+	free(ps->otypeAA[p]);
+      }
+    }
+    free(ps->otypeAA);
+  }
+
+  if(ps->occlAAA != NULL) { 
+    for(p = 0; p < ps->npage; p++) { 
+      if(ps->occlAAA[p] != NULL) { 
+	for(l = 0; l < ps->nocclA[p]; l++) { 
+	  if(ps->occlAAA[p][l]->text      != NULL) free(ps->occlAAA[p][l]->text);
+	  if(ps->occlAAA[p][l]->celltext  != NULL) free(ps->occlAAA[p][l]->celltext);
+	  if(ps->occlAAA[p][l]->procname  != NULL) free(ps->occlAAA[p][l]->procname);
+	  if(ps->occlAAA[p][l]->procstack != NULL) free(ps->occlAAA[p][l]->procstack);
+	  free(ps->occlAAA[p][l]); /* the rest is statically allocated memory */
+	}
+      free(ps->occlAAA[p]);
+      }
+    }
+    free(ps->occlAAA);
+  }
+
+  if(ps->sclAA != NULL) { 
+    for(p = 0; p < ps->npage; p++) { 
+      if(ps->sclAA[p] != NULL) { 
+	if(ps->sclAA[p]->limits != NULL) free(ps->sclAA[p]->limits);
+	if(ps->sclAA[p]->counts != NULL) free(ps->sclAA[p]->counts);
+	if(ps->sclAA[p]->counts_masked != NULL) free(ps->sclAA[p]->counts_masked);
+	if(ps->sclAA[p]->text1 != NULL) free(ps->sclAA[p]->text1);
+	if(ps->sclAA[p]->text2 != NULL) free(ps->sclAA[p]->text2);
+	free(ps->sclAA[p]); /* statically allocated memory */
+      }
+    }
+    free(ps->sclAA);
+  }
+
+  if(ps->tlAAA != NULL) { 
+    for(p = 0; p < ps->npage; p++) { 
+      if(ps->tlAAA[p] != NULL) { 
+	for(l = 0; l < ps->ntlA[p]; l++) { 
+	  for(l2 = 0; l2 < ps->tlAAA[p][l]->nlines; l2++) { 
+	    free(ps->tlAAA[p][l]->text_per_line[l2]);
+	  }
+	  free(ps->tlAAA[p][l]); /* the rest is statically allocated memory */
+	}
+	free(ps->tlAAA[p]);
+      }
+    }
+    free(ps->tlAAA);
+  }
+
+  if(ps->ntlA != NULL)     free(ps->ntlA);
+  if(ps->nocclA != NULL)   free(ps->nocclA);
+  if(ps->msa_cseq_maj != NULL) free(ps->msa_cseq_maj);
+  if(ps->msa_cseq_amb != NULL) free(ps->msa_cseq_amb);
+  if(ps->msa_ct != NULL)   free(ps->msa_ct);
+  if(ps->msa_rf2a_map != NULL) free(ps->msa_rf2a_map);
+  if(ps->msa_a2rf_map != NULL) free(ps->msa_a2rf_map);
+  if(ps->mask != NULL) free(ps->mask);
+  if(ps->seqidxA != NULL) free(ps->seqidxA);
+  if(ps->uaseqlenA != NULL) free(ps->uaseqlenA);
+
+  free(ps);
+  return;
+}
+
+/* Function: create_onecell_colorlegend()
+ * 
+ * Purpose:  Create and initialize a one cell color legend data structure.
+ *           As a special case, pass nres as OCCL_BLANK_COUNT if you don't
+ *           want a count printed for this one cell.
+ * Return:   occl
+ */
+static OneCellColorLegend_t *
+create_onecell_colorlegend(float *col, int nres, int nres_masked, int do_separator, int do_no_vspace)
+{
+  int status;
+  OneCellColorLegend_t *occl;
+
+  ESL_ALLOC(occl, sizeof(OneCellColorLegend_t));
+
+  /* initialize */
+  esl_vec_FSet(occl->col, NCMYK, 0.);
+  occl->text  = NULL;
+  occl->celltext = NULL; 
+  occl->procname = NULL; 
+  occl->procstack = NULL;
+  occl->nprocstack = 0;
+
+  /* set caller specified values */
+  esl_vec_FCopy(col, NCMYK, occl->col);
+
+  occl->nres         = nres;
+  occl->nres_masked  = nres_masked;
+  occl->do_separator = do_separator; 
+  occl->do_no_vspace = do_no_vspace;
+
+  return occl;
+
+ ERROR: esl_fatal("create_onecell_colorlegend(): memory allocation error.");
+  return NULL; /* NEVERREACHED */
+}
+
+
+
+/* Function: create_onecell_colorlegend()
+ * 
+ * Purpose:  Create and initialize a one cell color legend data structure.
+ * Return:   occl
+ */
+static TextLegend_t *
+create_text_legend(int nlines, char **text_per_line, int do_separator) 
+{
+  int status;
+  TextLegend_t *tl;
+  int i;
+
+  ESL_ALLOC(tl, sizeof(TextLegend_t));
+
+  /* initialize */
+  tl->text_per_line = NULL;
+
+  /* set caller specified values */
+  tl->nlines = nlines;
+  tl->do_separator = do_separator;
+  ESL_ALLOC(tl->text_per_line, sizeof(char *) * nlines);
+  for(i = 0; i < nlines; i++) { 
+    if((status = esl_strdup(text_per_line[i], -1, &(tl->text_per_line[i]))) != eslOK) esl_fatal("create_text_legend(), error copying text");
+  }    
+
+  return tl;
+
+ ERROR: esl_fatal("create_text_legend(): memory allocation error.");
+  return NULL; /* NEVERREACHED */
+}
+
+
+/* Function: create_text_legend_for_consensus_sequence()
+ * 
+ * Purpose:  Create text explaining how a consensus sequence is calculated 
+ *           for the legend, and return it in the form of a TextLegend_t 
+ *           object.
+ *
+ * Return:   tl
+ */
+static TextLegend_t *
+create_text_legend_for_consensus_sequence(const ESL_GETOPTS *go, int do_separator)
+{
+  int status;
+  TextLegend_t *tl;
+  int i;
+  int nlines;
+  char **text;
+
+  if(esl_opt_GetBoolean(go, "--cambig")) { 
+    nlines = 5;
+    ESL_ALLOC(text, sizeof(char *) * nlines);
+    for(i = 0; i < nlines; i++) { text[i] = NULL; }
+    if((status = esl_strcat(&(text[0]), -1, "Consensus nucleotides (nt) are displayed, calculated", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text");
+    ESL_ALLOC(text[1], sizeof(char) * (strlen("as the least ambiguous nt that represents >= 1.00") + 1));
+   sprintf(text[1], "as the least ambiguous nt that represents >= %0.2f", esl_opt_GetReal(go, "--athresh"));
+    if((status = esl_strcat(&(text[2]), -1, "of all non-gap nts at each position.", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text");
+    if((status = esl_strcat(&(text[3]), -1, "K=G|U, M=A|C, R=A|G, S=C|G, Y=C|U, W=A|U", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text");
+    if((status = esl_strcat(&(text[4]), -1, "B=C|G|U, D=A|G|U, H=A|C|U, V=A|C|G, N=A|C|G|U", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text");
+  }
+  else { /* --cambig not enabled, majority rule was used */
+    nlines = 4;
+    ESL_ALLOC(text, sizeof(char *) * nlines);
+    for(i = 0; i < nlines; i++) { text[i] = NULL; }
+    if((status = esl_strcat(&(text[0]), -1, "Consensus nucleotides (nt) are displayed, defined", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text");
+    if((status = esl_strcat(&(text[1]), -1, "as the most frequent nt at each position.",         -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text");
+    ESL_ALLOC(text[2], sizeof(char) * (strlen("Capitalized nts occur in >= 1.00 fraction of sequences") + 1));
+    sprintf(text[2], "Capitalized nts occur in >= %0.2f fraction of sequences", esl_opt_GetReal(go, "--cthresh"));
+    if((status = esl_strcat(&(text[3]), -1, "that do not have a gap at the position.", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text");
+  }    
+  
+  tl = create_text_legend(nlines, text, do_separator);
+  for(i = 0; i < nlines; i++) { 
+    free(text[i]);
+  }
+  free(text);
+  return tl;
+
+ ERROR: esl_fatal("create_text_legend(): memory allocation error.");
+  return NULL; /* NEVERREACHED */
+}
+
+
+/* Function: create_scheme_colorlegend()
+ * 
+ * Purpose:  Create and initialize a scheme color legend data structure.
+ * Return:   scl
+ */
+static SchemeColorLegend_t *
+create_scheme_colorlegend(int scheme, int nbins, float *limits, int ints_only_flag, int low_inclusive, int high_inclusive, int use_mask)
+{
+  int status;
+  SchemeColorLegend_t *scl;
+  int i;
+  int *counts;
+  int *counts_masked;
+  ESL_ALLOC(scl, sizeof(SchemeColorLegend_t));
+
+  /* initialize */
+  scl->text1 = NULL;
+  scl->text2 = NULL;
+  
+  /* set caller specified values */
+  scl->scheme = scheme;
+  scl->nbins = nbins;
+  ESL_ALLOC(scl->limits, sizeof(float) * (nbins+1));
+  for(i = 0; i <= nbins; i++) { scl->limits[i] = limits[i]; }
+
+  ESL_ALLOC(counts, sizeof(int) * nbins);
+  ESL_ALLOC(counts_masked, sizeof(int) * nbins);
+  esl_vec_ISet(counts, nbins, 0);
+  esl_vec_ISet(counts_masked, nbins, 0);
+  scl->counts = counts;
+  scl->counts_masked = counts_masked;
+  scl->ints_only_flag = ints_only_flag;
+  scl->low_inclusive  = low_inclusive;
+  scl->high_inclusive = high_inclusive;
+  scl->use_mask = use_mask;
+  return scl;
+
+ ERROR: esl_fatal("create_scheme_colorlegend(): memory allocation error.");
+  return NULL; /* NEVERREACHED */
+}
+
+/* Function: add_text_to_scheme_colorlegend()
+ * 
+ * Purpose:  Add text to an existing scheme color legend data structure.
+ * Throws:   Exception if the text is too long.
+ */
+int
+add_text_to_scheme_colorlegend(SSPostscript_t *ps, SchemeColorLegend_t *scl, char *text, int legx_max_chars, char *errbuf)
+{
+  int status;
+  int i, idx;
+  int max_chars_per_line;
+
+  if(scl->text1 != NULL) esl_fatal("add_text_to_scheme_colorlegend(), text already exists!\n"); 
+  if(scl->text2 != NULL) esl_fatal("add_text_to_scheme_colorlegend(), text already exists!\n"); 
+  if(text == NULL) esl_fatal("add_text_to_scheme_colorlegend(), passed in text is NULL!\n"); 
+
+  max_chars_per_line = ps->legx_max_chars - 
+    ((int) ps->leg_rhs_space / ps->legx_charsize) - 
+    ((int) (PAGE_SIDEBUF / ps->legx_charsize)) - 
+    LEG_EXTRA_COLUMNS - 2;
+  if(((int) strlen(text)) <= max_chars_per_line) {
+    /* case 1, entire text can fit in one line */
+    if((status = esl_strdup(text, -1, &(scl->text1))) != eslOK) esl_fatal("add_text_to_scheme_colorlegend(), error copying text");
+    return eslOK;
+  }
+  else if(((int) strlen(text)) > ((2 * max_chars_per_line) - 6)) { 
+    /* case 2, entire text can't even fit in two lines, 
+     * (this is inexact doesn't account for size of words which is an issue b/c we break at newline,
+     * this is why I have the extra '- 6');
+     */
+    ESL_FAIL(eslEINVAL, errbuf, "add_text_to_scheme_colorlegend(), text is %d chars, max allowed is %d (%s)\n", (int) strlen(text), ((2 * max_chars_per_line) - 6), text);
+  }
+  else { /* split it up into two lines */
+    idx = max_chars_per_line - 1;
+    while(text[idx] != ' ') { 
+      idx--;
+      if(idx < 0) ESL_FAIL(eslEINVAL, errbuf, "add_text_to_scheme_colorlegend(), couldn't find a breakpoint for splitting the string (%s)\n", text);
+    }
+    /* copy first string into text1 */
+    ESL_ALLOC(scl->text1, sizeof(char) * (idx+1));
+    for(i = 0; i < idx; i++) scl->text1[i] = text[i];
+    scl->text1[idx] = '\0';
+
+    /* copy remainder into text2 */
+    int len = (int) strlen(text);
+    idx++;
+    ESL_ALLOC(scl->text2, sizeof(char) * (len - idx+1));
+    for(i = idx; i < len; i++) scl->text2[i-idx] = text[i];
+    scl->text2[len-idx] = '\0';
+  }
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "Error adding text to scheme_colorlegend probably out of memory");
+}
+
+
+/* Function: add_text_to_onecell_colorlegend()
+ * 
+ * Purpose:  Add text to an existing one cell color legend data structure.
+ * Throws:   Exception if the text is too long.
+ */
+int
+add_text_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *text, int legx_max_chars, char *errbuf)
+{
+  int status;
+  int max_chars_per_line;
+  if(occl->text != NULL) esl_fatal("add_text_to_onecell_colorlegend(), text description already exists!\n"); 
+  if(text == NULL) esl_fatal("add_text_to_onecell_colorlegend(), passed in text is NULL!\n"); 
+
+  max_chars_per_line = legx_max_chars - LEG_EXTRA_COLUMNS - 2 - ((int) (((float) ps->leg_cellsize * 1.5) / ps->legx_charsize));
+  /*printf("max: %d cur: %d text: %s\n", max_chars_per_line, (int) strlen(text), text);*/
+  if(((int) strlen(text)) > (max_chars_per_line)) { 
+    ESL_FAIL(eslEINVAL, errbuf, "add_text_to_onecell_colorlegend(), text is %d chars, max allowed is %d (%s)\n", (int) strlen(text), max_chars_per_line, text);
+  }
+  if((status = esl_strdup(text, -1, &(occl->text))) != eslOK) esl_fatal("add_text_to_onecell_colorlegend(), error copying text");
+  return eslOK;
+}
+
+/* Function: add_celltext_to_onecell_colorlegend()
+ * 
+ * Purpose:  Add cell text to an existing one cell color legend data structure.
+ */
+int
+add_celltext_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *celltext, char *errbuf)
+{
+  int status;
+  if(occl->celltext != NULL) esl_fatal("add_celltext_to_onecell_colorlegend(), cell text already exists!\n"); 
+  if(celltext == NULL) esl_fatal("add_celltext_to_onecell_colorlegend(), passed in celltext is NULL!\n"); 
+
+  if((status = esl_strdup(celltext, -1, &(occl->celltext))) != eslOK) esl_fatal("add_celltext_to_onecell_colorlegend(), error copying text");
+
+  return eslOK;
+}
+
+/* Function: add_procedure_to_onecell_colorlegend()
+ * 
+ * Purpose:  Add procedure for drawing one cell to an existing one cell color legend data structure.
+ */
+int
+add_procedure_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *procname, float *procstack, int nprocstack, char *errbuf)
+{
+  int status;
+  int i;
+
+  if(occl->celltext  != NULL) esl_fatal("add_procedure_to_onecell_colorlegend(), cell text already exists!\n"); 
+  if(occl->procname  != NULL) esl_fatal("add_procedure_to_onecell_colorlegend(), procedure text already exists!\n"); 
+  if(occl->procstack != NULL) esl_fatal("add_procedure_to_onecell_colorlegend(), procedure stack already exists!\n"); 
+  if(procname        == NULL) esl_fatal("add_procedure_to_onecell_colorlegend(), passed in procname is NULL!\n"); 
+  if(procstack       == NULL) esl_fatal("add_procedure_to_onecell_colorlegend(), passed in procstack is NULL!\n"); 
+
+  if((status = esl_strdup(procname, -1, &(occl->procname))) != eslOK) esl_fatal("add_procedure_to_onecell_colorlegend(), error copying text");
+  ESL_ALLOC(occl->procstack, sizeof(float) * nprocstack);
+  for(i = 0; i < nprocstack; i++) occl->procstack[i] = procstack[i];
+  occl->nprocstack = nprocstack;
+
+  return eslOK;
+
+ ERROR: 
+  return eslEMEM;
+}
+
+/* Function: add_page_desc_to_sspostscript()
+ * 
+ * Purpose:  Add text describing a particular page of a postscript object.
+ * Throws:   Exception if the text is too long.
+ */
+int
+add_page_desc_to_sspostscript(SSPostscript_t *ps, int page, char *text, char *errbuf)
+{
+  int status;
+  int i, j;
+  int max_both_lines;
+
+  if(ps->descA[page] != NULL) ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), description for page %d already exists!\n", page); 
+  if(text == NULL)            ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), passed in text is NULL!\n"); 
+
+  max_both_lines =(2. * ps->desc_max_chars);
+  if(ps->modeA[page] == INDIMODE || ps->modeA[page] == SIMPLEMASKMODE) 
+    max_both_lines--; /* b/c we have to add a '-' to split up the larger strings onto 2 lines */
+
+  /* check to see if we can fit the text onto two lines of max width ps->desc_max_chars */
+  int textlen = (int) strlen(text);
+  if(textlen <= ps->desc_max_chars) { /* fine, this will fit on one line */
+    if((status = esl_strdup(text, -1, &(ps->descA[page]))) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), error copying text");
+  }
+  else if (textlen <= max_both_lines) { 
+    if(ps->modeA[page] == ALIMODE) { 
+      /* maybe fine, make sure there's a break point (space ' ') that will break this string into two strings of length <= ps->desc_max_chars */
+      i = ps->desc_max_chars;
+      while(text[i] != ' ' && text[i] != '-') { 
+	i--; 
+	if(i < 0) ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), first word of text (%s) is more than max allowed of %d chars", text, ps->desc_max_chars);
+      }
+      /* found last space before max width, make sure it breaks the line up into two chunks of valid size */
+      if((textlen - (i+1)) <= ps->desc_max_chars) { /* we're good */
+	if((status = esl_strdup(text, -1, &(ps->descA[page]))) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), error copying text");
+	ps->descA[page][i] = '\n'; /* so we can remember where the break is */
+      }
+      else ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), couldn't find (' ') for splitting text into two chunks (%s)", text);
+    }
+    else { /* INDIMODE or SIMPLEMASKMODE, sequence/mask name bigger than 1 line, but not 2, we put a '-' in it at the end of line 1 and add a '\n' so we remember where it was */
+      ESL_ALLOC(ps->descA[page], sizeof(char) * (textlen + 3)); /* +3 so we have space for the extra '-' and '\n' */
+      for(i = 0; i < ps->desc_max_chars; i++) ps->descA[page][i] = text[i];
+      i = ps->desc_max_chars;
+      ps->descA[page][i] = '-';
+      i++; 
+      ps->descA[page][i] = '\n';
+      for(i = ps->desc_max_chars; i < textlen; i++) ps->descA[page][i+2] = text[i];
+      ps->descA[page][textlen+2] = '\0';
+    }
+  }
+  else /* the text won't fit on two lines */
+    if(ps->modeA[page] != INDIMODE) { /* not fine, this won't fit on two lines */
+      ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), text is %d chars, max allowed is %d (%s)\n", textlen, max_both_lines, text);
+    }
+    else { /* INDIMODE or SIMPLEMASKMODE, sequence/mask name exceeds max, we put a '-' in it at the end of line 1 and truncate it */
+      ESL_ALLOC(ps->descA[page], sizeof(char) * (max_both_lines + 2)); /* +2 so we have space for the extra '\n' (which we won't print), and the '\0' */
+      /* first look to see if there's a space before desc_max_chars, this will never happen for a seq name, but may for a mask description */
+      j = ps->desc_max_chars;
+      while(text[j] != ' ' && j > 0) { 
+	j--; 
+      }
+      if(j == 0) { j = ps->desc_max_chars; } /* no space */
+      for(i = 0; i < j; i++) ps->descA[page][i] = text[i];
+      i = j;
+      if(j == ps->desc_max_chars && text[j] != ' ') { 
+	ps->descA[page][i] = '-';
+      }
+      i++; 
+      ps->descA[page][i] = '\n';
+      for(i = j; i < j + ps->desc_max_chars; i++) ps->descA[page][i+2] = text[i];
+      ps->descA[page][i+2] = '\0';
+  }
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "add_page_desc_to_sspostscript() error, probably out of memory.");
+}
+
+
+/* Function: add_diffmask_page_desc_to_sspostscript()
+ * 
+ * Purpose:  Add text describing a diff mask page of a postscript object.
+ * Throws:   Exception if the text is too long.
+ */
+int
+add_diffmask_page_desc_to_sspostscript(SSPostscript_t *ps, int page, char *mask_file, char *maskdiff_file, char *errbuf)
+{
+  int status;
+  int i;
+  char *mask1desc = NULL;
+  char *mask2desc = NULL;
+  int len2copy;
+  int mask_file_len;
+  int maskdiff_file_len;
+  void *tmp;
+
+  if(ps->mask == NULL)        ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), ps->mask is NULL\n"); 
+  if(ps->descA[page] != NULL) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), description for page %d already exists!\n", page); 
+  if(maskdiff_file == NULL) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), passed in maskdiff_file is NULL!\n"); 
+
+  /* check to see if we can fit the text onto two lines of max width ps->desc_max_chars */
+  mask_file_len = (int) strlen(ps->mask);
+  maskdiff_file_len = (int) strlen(maskdiff_file);
+  if((status = esl_strcat(&(mask1desc), -1, "mask 1: ", -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text");
+  if((mask_file_len + 8) <= ps->desc_max_chars) { /* this will fit on one line */
+    if((status = esl_strcat(&(mask1desc), -1, mask_file, -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text");
+  }
+  else { /* won't fit on one line, include as much as we can */
+    len2copy = ps->desc_max_chars - 8 - 3; /* 8 is for "mask 1: " at beginning, 3 is for "..." at end */
+    ESL_RALLOC(mask1desc, tmp, sizeof(char) * ps->desc_max_chars+1);
+    for(i = 0; i < len2copy; i++) { 
+      mask1desc[8+i] = mask_file[i];
+    }
+    mask1desc[8+len2copy]   = '.';
+    mask1desc[8+len2copy+1] = '.';
+    mask1desc[8+len2copy+2] = '.';
+    mask1desc[8+len2copy+3] = '\0'; 
+  }
+
+  /* repeat for mask 2 */
+  if((status = esl_strcat(&(mask2desc), -1, "mask 2: ", -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text");
+  if((maskdiff_file_len + 8) <= ps->desc_max_chars) { /* this will fit on one line */
+    if((status = esl_strcat(&(mask2desc), -1, maskdiff_file, -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text");
+  }
+  else { /* won't fit on one line, include as much as we can */
+    len2copy = ps->desc_max_chars - 8 - 3; /* 8 is for "mask 1: " at beginning, 3 is for "..." at end */
+    ESL_RALLOC(mask2desc, tmp, sizeof(char) * ps->desc_max_chars+1);
+    for(i = 0; i < len2copy; i++) { 
+      mask2desc[8+i] = maskdiff_file[i];
+    }
+    mask2desc[8+len2copy]   = '.';
+    mask2desc[8+len2copy+1] = '.';
+    mask2desc[8+len2copy+2] = '.';
+    mask2desc[8+len2copy+3] = '\0'; 
+  }
+
+  /* concatenate them in ps->descA[page] */
+  if((status = esl_strcat(&(ps->descA[page]), -1, mask1desc, -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text");
+  if((status = esl_strcat(&(ps->descA[page]), -1, "\n", -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text");
+  if((status = esl_strcat(&(ps->descA[page]), -1, mask2desc, -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text");
+
+  free(mask1desc);
+  free(mask2desc);
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "add_page_desc_to_sspostscript() error, probably out of memory.");
+}
+
+/* Function: add_mask_to_sspostscript
+ * 
+ * Purpose:  Add a mask to a sspostscript object.
+ */
+int
+add_mask_to_ss_postscript(SSPostscript_t *ps, char *mask)
+{
+  int status;
+  if(ps->mask != NULL) { esl_fatal("add_mask_to_ss_postscript(), mask is non-null!\n"); }
+  if(mask == NULL) esl_fatal("add_mask_to_ss_postscript(), passed in mask is NULL!\n"); 
+  if((status = esl_strdup(mask, -1, &(ps->mask))) != eslOK) esl_fatal("add_mask_to_ss_postscript(), error copying mask");
+  return eslOK;
+}
+
+
+/* Function: draw_legend_column_headers()
+ * 
+ * Purpose:  Draw the legend column headers.
+ * Return:   eslOK
+ */
+static int 
+draw_legend_column_headers(FILE *fp, SSPostscript_t *ps, int pagenum, char *errbuf)
+{
+  int status;
+  int i;
+  float x, y;
+  // float legend_fontsize;
+  char *cur_string;
+  int cur_width = 0;
+
+  //legend_fontsize = LEG_FONTSIZE_UNSCALED / ps->scale;
+
+  x = ps->legx;
+  y = ps->cur_legy;
+  if(ps->mask != NULL && ps->modeA[pagenum] == ALIMODE) { 
+    y -= 1.25 * (float) ps->leg_cellsize;
+  }
+  /*fprintf(fp, "/%s findfont %f scalefont setfont\n", SPECIAL_FONT, legend_fontsize);*/
+  fprintf(fp, "%% begin legend column headers\n");
+  fprintf(fp, "(%s) %.2f %.2f moveto show\n", "LEGEND", x, (y + ((float) ps->leg_cellsize * .25)));
+  /*fprintf(fp, "/%s findfont %f scalefont setfont\n", LEG_FONT, legend_fontsize);*/
+
+  x = ps->legx_stats;
+  y = ps->cur_legy;
+  cur_width = ps->legx_max_chars - 
+    ((int) ps->leg_rhs_space / ps->legx_charsize) - 
+    ((int) (PAGE_SIDEBUF / ps->legx_charsize)) - 
+    LEG_EXTRA_COLUMNS - 2;
+
+  ESL_ALLOC(cur_string, sizeof(char) * (cur_width+1));
+  for(i = 0; i < cur_width; i++) cur_string[i] = '-'; 
+  cur_string[cur_width] = '\0';
+
+  if(ps->mask != NULL && ps->modeA[pagenum] == ALIMODE) { 
+    fprintf(fp, "(%4s  %4s) %.2f %.2f moveto show\n", "", "incl", x, (y + ((float) ps->leg_cellsize * .25)));
+    y -= 0.625 * (float) ps->leg_cellsize;
+    fprintf(fp, "(%4s  %4s) %.2f %.2f moveto show\n", "", " by ", x, (y + ((float) ps->leg_cellsize * .25)));
+    y -= 0.625 * (float) ps->leg_cellsize;
+    fprintf(fp, "(%4s  %4s) %.2f %.2f moveto show\n", "all", "mask", x, (y + ((float) ps->leg_cellsize * .25)));
+    y -= 0.625 * (float) ps->leg_cellsize;
+    fprintf(fp, "(%s) %.2f %.2f moveto show\n", cur_string, ps->legx, (y + ((float) ps->leg_cellsize * .25)));
+    fprintf(fp, "(----  ----) %.2f %.2f moveto show\n", x, (y + ((float) ps->leg_cellsize * .25)));
+  }
+  else { 
+    fprintf(fp, "(%5s) %.2f %.2f moveto show\n", "count", x, (y + ((float) ps->leg_cellsize * .25)));
+    y -= 0.625 * (float) ps->leg_cellsize;
+    fprintf(fp, "(%s) %.2f %.2f moveto show\n", cur_string, ps->legx, (y + ((float) ps->leg_cellsize * .25)));
+    fprintf(fp, "(-----) %.2f %.2f moveto show\n", x, (y + ((float) ps->leg_cellsize * .25)));
+  }
+  ps->cur_legy = y - (1.0 * (float) ps->leg_cellsize);
+  
+  fprintf(fp, "%% end legend column headers\n\n");
+  free(cur_string);
+
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "ERROR drawing legend column headers, probably out of memory.");
+}
+
+/* Function: draw_onecell_colorlegend()
+ * 
+ * Purpose:  Print a one cell color legend to an open file.
+ * Return:   eslOK, dies if we run out of memory.
+ */
+static int 
+draw_onecell_colorlegend(FILE *fp, OneCellColorLegend_t *occl, SSPostscript_t *ps, int occl_idx, int pagenum)
+{
+  int status; 
+  float x, y;
+  int cp, i;
+  float fontsize;
+  char *cur_string;
+  int cur_width = 0;
+
+  /* object is valid, print it */
+  x = ps->legx;
+  y = ps->cur_legy;
+
+  /* print cell */
+  fprintf(fp, "%% begin one cell color legend\n");
+  if(occl->celltext == NULL && occl->procname == NULL) { /* print a colored block as the cell */
+    fprintf(fp, "newpath\n");
+    fprintf(fp, "  %.2f %.2f moveto", x, y);
+    fprintf(fp, "  0 %.3f rlineto %.3f 0 rlineto 0 %.3f rlineto closepath\n", (float) ps->leg_cellsize, (float) ps->leg_cellsize, (-1 * (float) ps->leg_cellsize));
+    fprintf(fp, "  ");
+    for(cp = 0; cp < NCMYK; cp++) fprintf(fp, "%.2f ", occl->col[cp]);
+    fprintf(fp, "setcmykcolor\n");
+    fprintf(fp, "  fill\n");
+
+    /* draw a small box outlining the colored block we just drew */
+    /*fprintf(fp, "%.2f setlinewidth\n", (ps->leg_cellsize / 24.));
+    fprintf(fp, "newpath\n");
+    fprintf(fp, "  %.2f %.2f moveto", x, y);
+    fprintf(fp, "  0 %.3f rlineto %.3f 0 rlineto 0 %.3f rlineto closepath\n", (float) ps->leg_cellsize, (float) ps->leg_cellsize, (-1 * (float) ps->leg_cellsize));
+    fprintf(fp, "  ");
+    fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", 0., 0., 0., 1.); 
+    fprintf(fp, "  stroke\n");*/
+  }
+  else if (occl->procname != NULL) { 
+    fprintf(fp, "%.2f %.2f ", x, y);
+    for(i = 0; i < occl->nprocstack; i++) { fprintf(fp, "%.2f ", occl->procstack[i]); }
+    fprintf(fp, "%s\n", occl->procname);
+  }
+  else if (occl->celltext != NULL){ 
+    /* fontsize = (float) ps->leg_cellsize / strlen(occl->celltext); */
+    fontsize = (float) ps->leg_cellsize / 2;
+    fprintf(fp, "/%s findfont %f scalefont setfont\n", NUCLEOTIDES_FONT, fontsize);
+    for(cp = 0; cp < NCMYK; cp++) fprintf(fp, "%.2f ", occl->col[cp]);
+    fprintf(fp, "setcmykcolor\n");
+    fprintf(fp, "(%s) %.2f %.2f moveto show\n", occl->celltext, x, y + ((float) ps->leg_cellsize * 0.25));
+  }
+  if(occl->celltext == NULL || (strlen(occl->celltext) > 0)) { 
+    /* if we printed a block or text, modify x, so text for the legend is indented appropriately */
+    x += (float) ps->leg_cellsize * 1.5;
+  }
+  fontsize = LEG_FONTSIZE_UNSCALED / ps->scale;
+
+  /* print text for this legend */
+  if(occl->text != NULL) { 
+    /* back to black */
+    fprintf(fp, "  0.00 0.00 0.00 1.00 setcmykcolor\n");
+    fprintf(fp, "/%s findfont %f scalefont setfont\n", LEG_FONT, fontsize);
+    fprintf(fp, "(%s) %.2f %.2f moveto show\n", occl->text, x, y + ((float) ps->leg_cellsize * 0.25));
+
+    /* print stats */
+    if(occl->nres != OCCL_BLANK_COUNT) { 
+      x = ps->legx_stats;
+      if(ps->mask != NULL && ps->modeA[pagenum] == ALIMODE) { 
+	fprintf(fp, "(%4d  %4d) %.2f %.2f moveto show\n", occl->nres, occl->nres_masked, x, y + ((float) ps->leg_cellsize * 0.25));
+      }
+      else { 
+	fprintf(fp, "(%5d) %.2f %.2f moveto show\n", occl->nres, x, y + ((float) ps->leg_cellsize * 0.25));
+      }
+    }
+  }
+
+  /* reset color to black */ 
+  fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", 0., 0., 0., 1.);
+
+  if(occl->do_separator) {
+  cur_width = ps->legx_max_chars - 
+    ((int) ps->leg_rhs_space / ps->legx_charsize) - 
+    ((int) (PAGE_SIDEBUF / ps->legx_charsize)) - 
+    LEG_EXTRA_COLUMNS - 2;
+    ESL_ALLOC(cur_string, sizeof(char) * (cur_width+1));
+    for(i = 0; i < cur_width; i++) cur_string[i] = '-'; 
+    cur_string[cur_width] = '\0';
+    fprintf(fp, "(%s) %.2f %.2f moveto show\n", cur_string, ps->legx,      (y - ((float) ps->leg_cellsize * 0.5)));
+    fprintf(fp, "(-----) %.2f %.2f moveto show\n", (float) ps->legx_stats, (y - ((float) ps->leg_cellsize * 0.5)));
+    y -= (float) ps->leg_cellsize * 0.5;
+    free(cur_string);
+  }
+
+  /* y -= (float) ps->leg_cellsize * 1.5; */
+  if(occl->do_no_vspace) { y -= (float) (ps->leg_cellsize / COURIER_HEIGHT_WIDTH_RATIO) * 1.25;   }
+  else                   { y -= (float) ps->leg_cellsize * 1.25; }
+  ps->cur_legy = y;
+
+  
+  fprintf(fp, "%% end one cell color legend\n\n");
+  return eslOK;
+
+ ERROR: esl_fatal("ERROR drawing one cell legend, probably out of memory.");
+  return eslEMEM; /* never reached */
+}
+
+
+/* Function: draw_scheme_colorlegend()
+ * 
+ * Purpose:  Print a scheme color legend to an open file.
+ * Return:   eslOK
+ */
+static int 
+draw_scheme_colorlegend(const ESL_GETOPTS *go, FILE *fp, SchemeColorLegend_t *scl, float **hc_scheme, SSPostscript_t *ps, int pagenum)
+{
+  float x, y;
+  int cp;
+  int c,i,n1s;
+  float fontsize;
+  int do_circle_mask, do_square_mask, do_x_mask, do_border;
+  int do_mask;
+  float old_x;
+
+  do_mask = ((ps->mask != NULL) && (scl->use_mask)) ? TRUE : FALSE;
+  do_border = (!esl_opt_GetBoolean(go, "--mask-a"));
+  do_circle_mask = do_square_mask = do_x_mask = FALSE;
+  if(esl_opt_GetBoolean(go, "--mask-u")) { do_square_mask = TRUE; }
+  else if(esl_opt_GetBoolean(go, "--mask-x")) { do_x_mask = TRUE; }
+  else do_circle_mask = TRUE;
+
+  x = ps->legx;
+  y = ps->cur_legy;
+  //y = ps->legy - (ps->nocclA[pagenum] * ((float) ps->leg_cellsize * 1.5));
+  fontsize = LEG_FONTSIZE_UNSCALED / ps->scale;
+  fprintf(fp, "%% begin color scheme legend\n");
+  fprintf(fp, "/%s findfont %f scalefont setfont\n", LEG_FONT, fontsize);
+  fprintf(fp, "  0.00 0.00 0.00 1.00 setcmykcolor\n");
+
+  float colvec[NCMYK];
+  colvec[0] = colvec[1] = colvec[2] = 0.;
+  colvec[3] = 1.0;
+  if(do_mask) { /* print cells showing difference between masked and unmasked */
+    /*x -= (float) ps->leg_cellsize;*/
+    /*y -= (float) ps->leg_cellsize;*/
+    fprintf(fp, "%.1f setlinewidth\n", (float) ps->leg_cellsize/4.);
+    fprintf(fp, "newpath\n");
+    fprintf(fp, "  %.2f %.2f moveto", x, y);
+    fprintf(fp, "  0 %.3f rlineto %.3f 0 rlineto 0 %.3f rlineto closepath\n", (float) ps->leg_cellsize, (float) ps->leg_cellsize, (-1 * (float) ps->leg_cellsize));
+    fprintf(fp, "  ");
+    for(cp = 0; cp < NCMYK; cp++) { 
+      fprintf(fp, "%.2f ", colvec[cp]);
+    }
+    fprintf(fp, "setcmykcolor\n");
+    fprintf(fp, "  fill\n");
+
+    /* print label */
+    x += (float) ps->leg_cellsize * 1.5;
+    y += (float) ps->leg_cellsize * 0.625;
+    fprintf(fp, "(included by mask) %.2f %.2f moveto show\n", x, y);
+    y -= (float) ps->leg_cellsize * 0.625;
+    fprintf(fp, "((all colors)) %.2f %.2f moveto show\n", x, y);
+    x -= (float) ps->leg_cellsize * 1.5;
+
+    /* print stats for included by mask */
+    old_x = x;
+    n1s = 0;
+    for(i = 0; i < ps->rflen; i++) if(ps->mask[i] == '1') n1s++; 
+    x = ps->legx_stats;
+    y += (float) ps->leg_cellsize * 0.3125;
+    fprintf(fp, "(%4d  %4d) %.2f %.2f moveto show\n", n1s, n1s, x, y);
+    y -= (float) ps->leg_cellsize * 0.3125;
+
+    x = old_x;
+    y -= (float) ps->leg_cellsize * 1.5;
+    draw_masked_block(fp, x, y, colvec, do_circle_mask, do_square_mask, do_x_mask, do_border, (float) ps->leg_cellsize);
+
+    x += (float) ps->leg_cellsize * 1.5;
+    y += (float) ps->leg_cellsize * 0.625;
+    fprintf(fp, "(excluded by mask) %.2f %.2f moveto show\n", x, y);
+    y -= (float) ps->leg_cellsize * 0.625;
+    fprintf(fp, "((all colors)) %.2f %.2f moveto show\n", x, y);
+
+    /* print stats for excluded by mask */
+    x = ps->legx_stats;
+    y += (float) ps->leg_cellsize * 0.3125;
+    fprintf(fp, "(%4d  %4d) %.2f %.2f moveto show\n", ps->rflen-n1s, 0, x, y);
+
+    y -= (float) ps->leg_cellsize * 1.8125;
+    x = ps->legx;
+  }
+
+  /* print text for this legend */
+  if(scl->text1 != NULL) { 
+    if(scl->text2 == NULL) { 
+      fprintf(fp, "(%s:) %.2f %.2f moveto show\n", scl->text1, x, (y + ((float) ps->leg_cellsize * .25)));
+    }
+    else { 
+      fprintf(fp, "(%s) %.2f %.2f moveto show\n", scl->text1, x, (y + ((float) ps->leg_cellsize * .25)));
+      y -= (float) ps->leg_cellsize * 0.625;
+      fprintf(fp, "(%s:) %.2f %.2f moveto show\n", scl->text2, x, (y + ((float) ps->leg_cellsize * .25)));
+    }
+  }
+  y -= (float) ps->leg_cellsize;
+  
+  /* print scheme color cells and labels next to them */
+  for(c = 0; c < scl->nbins; c++) { 
+    fprintf(fp, "newpath\n");
+    fprintf(fp, "  %.2f %.2f moveto", x, y);
+    fprintf(fp, "  0 %.3f rlineto %.3f 0 rlineto 0 %.3f rlineto closepath\n", (float) ps->leg_cellsize, (float) ps->leg_cellsize, (-1 * (float) ps->leg_cellsize));
+    fprintf(fp, "  ");
+    for(cp = 0; cp < NCMYK; cp++) { 
+      fprintf(fp, "%.2f ", hc_scheme[c][cp]);
+    }
+    fprintf(fp, "setcmykcolor\n");
+    fprintf(fp, "  fill\n");
+
+    /* draw a small box outlining the colored block we just drew */
+    /*fprintf(fp, "%.2f setlinewidth\n", (ps->leg_cellsize / 24.));
+    fprintf(fp, "newpath\n");
+    fprintf(fp, "  %.2f %.2f moveto", x, y);
+    fprintf(fp, "  0 %.3f rlineto %.3f 0 rlineto 0 %.3f rlineto closepath\n", (float) ps->leg_cellsize, (float) ps->leg_cellsize, (-1 * (float) ps->leg_cellsize));
+    fprintf(fp, "  ");
+    fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", 0., 0., 0., 1.);
+    fprintf(fp, "  stroke\n");*/
+
+    /* print label */
+    x += (float) ps->leg_cellsize * 1.5;
+    y += (float) ps->leg_cellsize * 0.25;
+    fprintf(fp, "  0.00 0.00 0.00 1.00 setcmykcolor\n");
+    if(esl_FCompare(scl->limits[c+1], SSDRAWINFINITY, eslSMALLX1) == eslOK) { /* max value is infinity, special case */
+      if(c != scl->nbins-1) esl_fatal("ERROR when drawing color legend, limits[%d] is INFINITY, but this is reserved only for the max limit", c+1);
+      if(scl->ints_only_flag) fprintf(fp, "(>=%d) %.2f %.2f moveto show\n",   (int) scl->limits[c], x, y);
+      else                    fprintf(fp, "(>=%3.f) %.2f %.2f moveto show\n", scl->limits[c], x, y);
+    }
+    else if(scl->ints_only_flag) { 
+      if(c == scl->nbins-1) { 
+	fprintf(fp, "(\\[%d-%d\\]) %.2f %.2f moveto show\n", (int) scl->limits[c], (int) scl->limits[c+1], x, y);
+      }
+      else if(esl_FCompare(scl->limits[c], scl->limits[c+1]-1, eslSMALLX1) == eslOK) { /* next limit is exactly 1 plus cur limit, don't do range, define single int */
+	if(compare_two_cmyk_colors(hc_scheme[c][ICYAN], hc_scheme[c][IMGTA], hc_scheme[c][IYELW], hc_scheme[c][IBLCK], WHITE_C, WHITE_M, WHITE_Y, WHITE_K)) { 
+	  /* color is white and won't show up on our white background, so we explicitly state (blank) next to it's color value */
+	  fprintf(fp, "(\\(blank\\) %d) %.2f %.2f moveto show\n", (int) scl->limits[c], x, y);
+	}
+	else { 
+	  fprintf(fp, "(%d) %.2f %.2f moveto show\n", (int) scl->limits[c], x, y);
+	}
+      }
+      else { 
+	fprintf(fp, "(\\[%d-%d\\]) %.2f %.2f moveto show\n", (int) scl->limits[c], (int) scl->limits[c+1]-1, x, y);
+      }
+    }
+    else { 
+      if(c == scl->nbins-1) fprintf(fp, "(\\[%.3f-%.3f\\%c) %.2f %.2f moveto show\n", scl->limits[c], scl->limits[c+1], (scl->high_inclusive ? ']' : ')'), x, y);
+      else if(c == 0)       fprintf(fp, "(\\%c%.3f-%.3f\\)) %.2f %.2f moveto show\n", (scl->low_inclusive ? '[' : '('), scl->limits[c], scl->limits[c+1], x, y);
+      else                  fprintf(fp, "(\\[%.3f-%.3f\\)) %.2f %.2f moveto show\n", scl->limits[c], scl->limits[c+1], x, y);
+    }
+    /* print stats */
+    old_x = x;
+    x = ps->legx_stats;
+    if(do_mask) { 
+      fprintf(fp, "(%4d  %4d) %.2f %.2f moveto show\n", scl->counts[c], scl->counts_masked[c], x, y);
+    }
+    else { 
+      fprintf(fp, "(%5d) %.2f %.2f moveto show\n", scl->counts[c], x, y);
+    }
+
+    x = old_x - (float) ps->leg_cellsize * 1.5;
+    y -= (float) ps->leg_cellsize * 0.25;
+    y -= (float) ps->leg_cellsize;
+  }
+
+  /* reset color to black */ 
+  fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", 0., 0., 0., 1.);
+  fprintf(fp, "%% end color scheme legend\n\n");
+  
+  ps->cur_legy = y;
+  return eslOK;
+}
+
+
+/* Function: draw_text_section_in_legend()
+ * 
+ * Purpose:  Print a text section in the legend section.
+ * Return:   eslOK, dies if we run out of memory.
+ */
+static int 
+draw_text_section_in_legend(FILE *fp, TextLegend_t *tl, SSPostscript_t *ps, int tl_idx, int pagenum)
+{
+  int status; 
+  float x, y;
+  int i;
+  float fontsize;
+  char *cur_string;
+  int cur_width = 0;
+
+  x = ps->legx;
+  y = ps->cur_legy;
+
+  /* print cell */
+  fprintf(fp, "%% begin text legend\n");
+  fontsize = LEG_EXTRA_TEXT_FONTSIZE_UNSCALED / ps->scale;
+  /* print text for this legend */
+
+  /* back to black */
+  fprintf(fp, "  0.00 0.00 0.00 1.00 setcmykcolor\n");
+  fprintf(fp, "/%s findfont %f scalefont setfont\n", LEG_EXTRA_TEXT_FONT, fontsize);
+  for(i = 0; i < tl->nlines; i++) { 
+    fprintf(fp, "(%s) %.2f %.2f moveto show\n", tl->text_per_line[i], x, y);
+    y -= (float) fontsize * 1.25;
+  }
+  if(tl->do_separator) {
+    cur_width = ps->legx_max_chars - ((int) (PAGE_SIDEBUF / ps->legx_charsize)) - LEG_EXTRA_COLUMNS - 2;
+    ESL_ALLOC(cur_string, sizeof(char) * (cur_width+1));
+    for(i = 0; i < cur_width; i++) cur_string[i] = '-'; 
+    cur_string[cur_width] = '\0';
+    fprintf(fp, "(%s) %.2f %.2f moveto show\n", cur_string, ps->legx,      (y - ((float) ps->leg_cellsize * 0.5)));
+    fprintf(fp, "(-----) %.2f %.2f moveto show\n", (float) ps->legx_stats, (y - ((float) ps->leg_cellsize * 0.5)));
+    y -= (float) ps->leg_cellsize * 0.5;
+    free(cur_string);
+  }
+  ps->cur_legy = y - (1.0 * (float) ps->leg_cellsize);
+  
+  fprintf(fp, "%% end text legend\n\n");
+  return eslOK;
+
+ ERROR: esl_fatal("ERROR drawing text legend, probably out of memory.");
+  return eslEMEM; /* never reached */
+}
+
+/* Function: draw_sspostscript()
+ * 
+ * Purpose:  Print a SS postscript data structure.
+ * Return:   eslOK on success;
+ *           eslEINCOMPAT if ps->npage == 0
+ */
+static int
+draw_sspostscript(FILE *fp, const ESL_GETOPTS *go, char *errbuf, char *command, char *date, float ***hc_scheme, SSPostscript_t *ps)
+{
+  int status;
+  int p, pi, i, c, l;
+  int do_circle_mask, do_square_mask, do_x_mask, do_border;
+  int *page_orderA;
+
+  if(ps->modelname == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read modelname from template file.");
+
+  do_border = (!esl_opt_GetBoolean(go, "--mask-a"));
+  do_circle_mask = do_square_mask = do_x_mask = FALSE;
+  if(esl_opt_GetBoolean(go, "--mask-u")) { do_square_mask = TRUE; }
+  else if(esl_opt_GetBoolean(go, "--mask-x")) { do_x_mask = TRUE; }
+  else do_circle_mask = TRUE;
+
+  if(ps->npage == 0) ESL_FAIL(eslEINCOMPAT, errbuf, "draw_sspostscript, ps->npage == 0\n");
+
+  /* determine print order of pages, currently this is just 0..npage-1 */
+  ESL_ALLOC(page_orderA, sizeof(int) * ps->npage);
+  for(pi = 0; pi < ps->npage; pi++) page_orderA[pi] = pi;
+
+  /* define procedures */
+  fprintf(fp, "%% ------------------------------------------------------------\n");
+  fprintf(fp, "%% Procedure definitions\n");
+  define_outline_procedure(fp);
+  fprintf(fp, "%% ------------------------------------------------------------\n");
+
+  /* draw the pages */
+  for(pi = 0; pi < ps->npage; pi++) { 
+    p = page_orderA[pi];
+    ps->cur_legy = ps->legy;
+
+    /* print postscript comment header, only visible if viewed in text mode */
+    fprintf(fp, "%% ------------------------------------------------------------\n");
+    fprintf(fp, "%% Postscript file created by esl-ssdraw (page %d of %d)\n", pi+1, ps->npage);
+    fprintf(fp, "%% ------------------------------------------------------------\n");
+    fprintf(fp, "%% msafile:       %s (%d seqs)\n", esl_opt_GetArg(go, 1), ps->msa_nseq);
+    fprintf(fp, "%% templatefile:  %s\n", esl_opt_GetArg(go, 2));
+    fprintf(fp, "%% modelname:     %s\n", ps->modelname);
+    fprintf(fp, "%% consensus-len: %d\n", ps->rflen);
+    if(esl_opt_IsOn(go, "--mask")) { 
+      fprintf(fp, "%% maskfile:      %s\n", esl_opt_GetString(go, "--mask"));
+    }	    
+    if(esl_opt_IsOn(go, "--mask-diff")) { 
+      fprintf(fp, "%% difffile:    %s\n", esl_opt_GetString(go, "--mask-diff"));
+    }	    
+    if(esl_opt_IsOn(go, "--dfile")) { 
+      fprintf(fp, "%% dfile:         %s\n", esl_opt_GetString(go, "--dfile"));
+    }
+    if(esl_opt_IsOn(go, "--efile")) { 
+      fprintf(fp, "%% efile:      %s\n", esl_opt_GetString(go, "--efile"));
+    }
+    if(esl_opt_IsOn(go, "--ifile")) { 
+      fprintf(fp, "%% ifile:      %s\n", esl_opt_GetString(go, "--ifile"));
+    }
+    fprintf(fp, "%%\n");
+
+    /* scale section */
+    fprintf(fp, "%.2f %.2f scale\n\n", ps->scale, ps->scale);
+      
+    /* header section */
+    if((status = draw_header_and_footer(fp, go, errbuf, ps, p, pi+1)) != eslOK) return status;
+
+    /* regurgitated section */
+    if(ps->regurgA != NULL) {
+      fprintf(fp, "%% begin regurgitate\n");
+      for(i = 0; i < ps->nregurg; i++)
+	fprintf(fp, "%s", ps->regurgA[i]);
+      fprintf(fp, "%% end regurgitate\n\n");
+    }
+    
+    /* 'text positiontext' section */
+    for(i = 0; i < ps->nposntext; i++) { 
+      if(i == 0) { 
+	fprintf(fp, "%% begin text positiontext\n");
+	fprintf(fp, "/%s findfont %.2f scalefont setfont\n", POSNTEXT_FONT, POSNTEXT_FONTSIZE);
+	fprintf(fp, "0.00 0.00 0.00 1.00 setcmykcolor\n"); /* black */
+      }
+      fprintf(fp, "%s %.2f %.2f moveto show\n", ps->posntextA[i], ps->posntextxA[i], ps->posntextyA[i]); 
+      if(i == (ps->nposntext-1)) { 
+	fprintf(fp, "%% end text positiontext\n\n");
+      }
+    }
+
+    /* 'lines bpconnects' section */
+    for(i = 0; i < ps->nbp; i++) { 
+      if(i == 0) { 
+	fprintf(fp, "%% begin lines bpconnects\n");
+	fprintf(fp, "%.2f setlinewidth\n", BP_LINEWIDTH);
+	fprintf(fp, "0.00 0.00 0.00 1.00 setcmykcolor\n"); /* black */
+      }
+      fprintf(fp, "%.2f %.2f %.2f %.2f newpath moveto lineto stroke\n", ps->bpx1A[i], ps->bpy1A[i], ps->bpx2A[i], ps->bpy2A[i]);
+      if(i == (ps->nbp-1)) { 
+	fprintf(fp, "%% end lines bpconnects\n\n");
+      }
+    }
+
+    /* print out remainder of the page */
+    /* fprintf(fp, "%% begin ignore\n"); */
+    fprintf(fp, "0.00 0.00 0.00 1.00 setcmykcolor\n"); /* set to black */
+    fprintf(fp, "/%s findfont %f scalefont setfont\n\n", LEG_FONT, LEG_FONTSIZE_UNSCALED / ps->scale);
+
+    /* draw legend headers, if we have a legend (only legend text doesn't require legend headers) */
+    if((ps->nocclA[p] > 0) || (ps->sclAA != NULL && ps->sclAA[p] != NULL)) { 
+      if(! (esl_opt_GetBoolean(go, "--no-leg"))) { 
+	if((status = draw_legend_column_headers(fp, ps, p, errbuf)) != eslOK) return status;
+      }
+    }
+
+    /* print one cell color legends, if any */
+    if(ps->occlAAA != NULL && ps->occlAAA[p] != NULL) { 
+      for(l = 0; l < ps->nocclA[p]; l++) { 
+	if(! (esl_opt_GetBoolean(go, "--no-leg"))) { 
+	  draw_onecell_colorlegend(fp, ps->occlAAA[p][l], ps, l, p);
+	}
+      }
+    }
+    /* print scheme color legends, if any */
+    if(ps->sclAA != NULL && ps->sclAA[p] != NULL) { 
+      if(! (esl_opt_GetBoolean(go, "--no-leg"))) { 
+	draw_scheme_colorlegend(go, fp, ps->sclAA[p], hc_scheme[ps->sclAA[p]->scheme], ps, p);
+      }
+    }
+    /* print text legends, if any */
+    if(ps->tlAAA != NULL && ps->tlAAA[p] != NULL) { 
+      for(l = 0; l < ps->ntlA[p]; l++) { 
+	if(! (esl_opt_GetBoolean(go, "--no-leg"))) { 
+	  draw_text_section_in_legend(fp, ps->tlAAA[p][l], ps, l, p);
+	}
+      }
+    }
+
+    if(ps->bcolAAA != NULL && ps->bcolAAA[p] != NULL) { 
+      fprintf(fp, "%% begin colored positions\n");
+      if(ps->mask != NULL && ps->modeA[p] != SIMPLEMASKMODE && ps->modeA[p] != INDIMODE) { 
+	fprintf(fp, "2.0 setlinewidth\n");
+	if(do_border && do_x_mask)      { fprintf(fp, "1.0 setlinewidth\n"); }
+	if(do_border && do_square_mask) { fprintf(fp, "2.0 setlinewidth\n"); }
+	if(do_border && do_circle_mask) { fprintf(fp, "2.5 setlinewidth\n"); }
+	for(c = 0; c < ps->rflen; c++) { 
+	  fprintf(fp, "%snucleotide %d\n", "%", c+1);
+	  if(ps->mask[c] == '0') { 
+	    draw_masked_block(fp, ps->rxA[c]-1., ps->ryA[c]-1., ps->bcolAAA[p][c], do_circle_mask, do_square_mask, do_x_mask, do_border, CELLSIZE);
+	  }
+	  else { /* cell is within mask, ps->mask[c] == '1' */
+	    fprintf(fp, "newpath\n");
+	    fprintf(fp, "  %.2f %.2f moveto", ps->rxA[c] - (CELLSIZE * CELL_XOFFSET_FRACTION), ps->ryA[c] - (CELLSIZE * CELL_YOFFSET_FRACTION));
+	    fprintf(fp, "  0 %d rlineto %d 0 rlineto 0 %d rlineto closepath\n", CELLSIZE_INT, CELLSIZE_INT, -1 * CELLSIZE_INT);
+	    fprintf(fp, "  %.2f %.2f %.2f %.2f setcmykcolor\n", ps->bcolAAA[p][c][0], ps->bcolAAA[p][c][1], ps->bcolAAA[p][c][2], ps->bcolAAA[p][c][3]);
+	    fprintf(fp, "  fill\n"); 
+	  }
+	}
+	fprintf(fp, "1.00 setlinewidth\n");
+      }
+      else { /* no mask, all cells are printed the same */
+	for(c = 0; c < ps->rflen; c++) { 
+	  fprintf(fp, "%snucleotide %d\n", "%", c+1);
+	  fprintf(fp, "newpath\n");
+	  fprintf(fp, "  %.2f %.2f moveto", ps->rxA[c] - (CELLSIZE * CELL_XOFFSET_FRACTION), ps->ryA[c] - (CELLSIZE * CELL_YOFFSET_FRACTION));
+	  fprintf(fp, "  0 %d rlineto %d 0 rlineto 0 %d rlineto closepath\n", CELLSIZE_INT, CELLSIZE_INT, -1 * CELLSIZE_INT);
+	  fprintf(fp, "  %.2f %.2f %.2f %.2f setcmykcolor\n", ps->bcolAAA[p][c][0], ps->bcolAAA[p][c][1], ps->bcolAAA[p][c][2], ps->bcolAAA[p][c][3]);
+	  fprintf(fp, "  fill\n");
+	}
+      }
+      /* back to black */
+      fprintf(fp, "  0.00 0.00 0.00 1.00 setcmykcolor\n");
+      fprintf(fp, "%% end colored positions\n\n");
+    }
+
+    if(ps->rAA[p] != NULL) { 
+      fprintf(fp, "/%s findfont %f scalefont setfont\n", NUCLEOTIDES_FONT, NUCLEOTIDES_FONTSIZE);
+      fprintf(fp, "  0.00 0.00 0.00 1.00 setcmykcolor\n"); /* reset color as black */
+      fprintf(fp, "%% begin text nucleotides\n");
+      if(ps->rcolAAA[p] != NULL) { 
+	for(c = 0; c < ps->rflen; c++) { 
+	  fprintf(fp, "  %.2f %.2f %.2f %.2f setcmykcolor ", ps->rcolAAA[p][c][0], ps->rcolAAA[p][c][1], ps->rcolAAA[p][c][2], ps->rcolAAA[p][c][3]);
+	  if(strchr(LOWERCASE_LOW_HANGING_CHARS, ps->rAA[p][c]) != NULL) { 
+	    fprintf(fp, "(%c) %.2f %.2f moveto show", ps->rAA[p][c], ps->rxA[c], ps->ryA[c] + (CELLSIZE * NUCLEOTIDE_YOFFSET_FRACTION_LOWERCASE_LOW_HANGING_CHARS)); 
+	    /* handle lowercase low hanging chars ("gjpqy") nucleotides special, so they're centered in the box! */
+	  }
+	  else if(ps->rAA[p][c] != ' ') { 
+	    fprintf(fp, "(%c) %.2f %.2f moveto show", ps->rAA[p][c], ps->rxA[c], ps->ryA[c]);
+	  }
+	  fprintf(fp, "\n");
+	}
+      }
+      else { /* ps->rcolAAA[p] is NULL */
+	for(c = 0; c < ps->rflen; c++) { 
+	  if(strchr(LOWERCASE_LOW_HANGING_CHARS, ps->rAA[p][c]) != NULL) { 
+	    fprintf(fp, "(%c) %.2f %.2f moveto show", ps->rAA[p][c], ps->rxA[c], ps->ryA[c] + (CELLSIZE * NUCLEOTIDE_YOFFSET_FRACTION_LOWERCASE_LOW_HANGING_CHARS)); 
+	    /* handle lowercase low hanging chars ("gjpqy") nucleotides special, so they're centered in the box! */
+	  }
+	  else if(ps->rAA[p][c] != ' ') {
+	    fprintf(fp, "(%c) %.2f %.2f moveto show", ps->rAA[p][c], ps->rxA[c], ps->ryA[c]);
+	  }
+	  fprintf(fp, "\n");
+	}
+      }
+      fprintf(fp, "%% end text nucleotides\n");
+      fprintf(fp, "  0.000 0.000 0.000 1.000 setcmykcolor\n"); /* reset color as black */
+    }
+
+    if(ps->otypeAA != NULL && ps->otypeAA[p] != NULL) { 
+      fprintf(fp, "%% begin outlines\n");
+      for(c = 0; c < ps->rflen; c++) { 
+	if(ps->otypeAA[p][c] != OUTLINE_NONE_IDX) { 
+	  /* push x and y and cellsize onto stack */
+	  fprintf(fp, "%.2f %.2f %.2f", 
+		  ps->rxA[c] - (CELLSIZE * CELL_XOFFSET_FRACTION), 
+		  ps->ryA[c] - (CELLSIZE * CELL_YOFFSET_FRACTION), 
+		  CELLSIZE);
+	  if(ps->otypeAA[p][c] == OUTLINE_MIN_IDX) { 
+	    fprintf(fp, " %.2f %s\n", 
+		    OUTLINE_LINEWIDTH_CELL_FRACTION_MIN * CELLSIZE, 
+		    OUTLINE_PROCEDURE);
+	  }
+	  else if(ps->otypeAA[p][c] == OUTLINE_MAX_IDX) { 
+	    fprintf(fp, " %.2f %s\n", 
+		    OUTLINE_LINEWIDTH_CELL_FRACTION_MAX * CELLSIZE, 
+		    OUTLINE_PROCEDURE);
+	  }
+	}
+      }
+      fprintf(fp, "%% end outlines\n");
+      fprintf(fp, "  0.000 0.000 0.000 1.000 setcmykcolor\n"); /* reset color as black */
+    }
+    
+    /* 'lines positionsticks' section, drawn last so they're not buried beneath other objects */
+    for(i = 0; i < ps->nticks; i++) { 
+      if(i == 0) { 
+	fprintf(fp, "%% begin lines positionticks\n");
+	fprintf(fp, "%.2f setlinewidth\n", TICKS_LINEWIDTH);
+	fprintf(fp, "0.00 0.00 0.00 1.00 setcmykcolor\n"); /* black */
+      }
+      fprintf(fp, "%.2f %.2f %.2f %.2f newpath moveto lineto stroke\n", ps->ticksx1A[i], ps->ticksy1A[i], ps->ticksx2A[i], ps->ticksy2A[i]);
+      if(i == (ps->nticks-1)) { 
+	fprintf(fp, "%% end lines positionticks\n\n");
+      }
+    }
+
+    fprintf(fp, "showpage\n\n");
+    /* fprintf(fp, "%% end ignore\n\n"); */
+  }
+  free(page_orderA);
+  return eslOK;
+
+ ERROR: ESL_FAIL(eslEINVAL, errbuf, "draw_sspostscript() error, probably out of memory.");
+}  
+
+
+/* parse_template_file
+ *
+ * Read secondary structure templates from a postscript 
+ * template file derived from the Gutell CRW website until
+ * the one that corresponds to our alignment is found, 
+ * (defined as the first template structure that has the
+ * same consensus length as the passed in <msa_rflen>)
+ * or we run out structure templates. This function
+ * repeatedly calls parse_template() which actually parses
+ * the templates.
+ * 
+ * If we run out of structure templates of anything is 
+ * invalid in any of the templates in the file, we 
+ * return a non-eslOK status code to caller and fill
+ * errbuf with the error message.
+ * 
+ * Returns:  eslOK on success.
+ */
+int
+parse_template_file(char *filename, const ESL_GETOPTS *go, char *errbuf, int msa_rflen, SSPostscript_t **ret_ps)
+{
+  int             status;
+  ESL_FILEPARSER *efp;
+  SSPostscript_t *ps;
+  int             found_match = FALSE;
+
+  if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) esl_fatal("ERROR, failed to open template file %s in parse_template_file\n", filename);
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  status = eslOK;
+  while((found_match == FALSE) && (status == eslOK)) {
+    status = parse_template_page(efp, go, errbuf, &ps);
+    if((status != eslOK) && (status != eslEOF)) { 
+      esl_fileparser_Close(efp);
+      return status;
+    }
+    if(ps->rflen == msa_rflen) { found_match = TRUE; }
+    else                       { free_sspostscript(ps); }
+  }
+  if(found_match == FALSE) { 
+    esl_fileparser_Close(efp);
+    esl_fatal("ERROR, did not find template structure to match alignment consensus length of %d in:\n%s\n", msa_rflen, filename);
+  }
+
+  /* if we get here, we've found a match */
+
+  /* validate the template we just read */
+  if((status = validate_justread_sspostscript(ps, errbuf)) != eslOK) return status;
+
+  esl_fileparser_Close(efp);
+  *ret_ps = ps;
+
+  return eslOK;
+}
+  
+
+/* parse_template_page
+ *
+ * Read a single secondary structure template page for a
+ * single CM from a postscript template file derived from the 
+ * Gutell CRW website. This function is called repeatedly
+ * on the same file to read multiple structure templates.
+ * The logic is to keep reading until we find one with the
+ * same consensus length as our input alignment. 
+ * 
+ * The structure template is read in sections.
+ * Each section begins with a line like this: 
+ * % begin <type1> <type2> 
+ * 
+ * list of valid tokens for <type1>:
+ * modelname
+ * legcoords
+ * scale
+ * regurgitate
+ * ignore 
+ * lines
+ * text
+ * 
+ * if <type1> is lines or text, then <type2> is read, 
+ * valid tokens for <type2> if <type1> is 'text'
+ * positiontext
+ * nucleotides
+ * 
+ * valid tokens for <type2> if <type1> is 'lines'
+ * positionticks
+ * bpconnects
+ * 
+ * The 'regurgitate' lines are stored, but never changed.
+ * The 'ignore' lines are not even stored.
+ * All other <type1> lines are stored in data structures that
+ * can be manipulated (though not all are at this point).
+ * 
+ * If anything is invalid, we return a non-eslOK status code
+ * to caller. 
+ * 
+ * Returns:  eslOK on success.
+ */
+int
+parse_template_page(ESL_FILEPARSER *efp, const ESL_GETOPTS *go, char *errbuf, SSPostscript_t **ret_ps)
+{
+  int             status;
+  char           *tok;
+  int             toklen;
+  SSPostscript_t *ps = NULL;
+  int            read_showpage = FALSE;
+  int            reached_eof = FALSE;
+
+  /* Create the postscript object */
+  ps = create_sspostscript(go);
+
+  while ((read_showpage == FALSE) && ((status = esl_fileparser_GetToken(efp, &tok, &toklen))  == eslOK)) {
+    if(strcmp(tok, "%") == 0) { 
+      if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) { 
+	if(strcmp(tok, "begin") == 0) { 
+	  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) { 
+	    if(strcmp(tok, "modelname") == 0) { 
+	      if((status = parse_modelname_section(efp, errbuf, ps)) != eslOK) return status;
+	    }
+	    else if(strcmp(tok, "legend") == 0) { 
+	      /*printf("parsing legend\n");*/
+	      if((status = parse_legend_section(efp, errbuf, ps)) != eslOK) return status;
+	    }
+	    else if(strcmp(tok, "scale") == 0) { 
+	      /*printf("parsing scale\n");*/
+	      if((status = parse_scale_section(efp, errbuf, ps)) != eslOK) return status;
+	    }
+	    else if(strcmp(tok, "ignore") == 0) { 
+	      /*printf("parsing ignore\n");*/
+	      if((status = parse_ignore_section(efp, errbuf, &read_showpage)) != eslOK) return status;
+	    }	
+	    else if(strcmp(tok, "regurgitate") == 0) { 
+	      /*printf("parsing regurgitate\n");*/
+	      if((status = parse_regurgitate_section(efp, errbuf, ps)) != eslOK) return status;
+	    }	
+	    else if(strcmp(tok, "text") == 0) { 
+	      /*printf("parsing text\n");*/
+	      if((status = parse_text_section(efp, errbuf, ps)) != eslOK) return status;		   
+	    }
+	    else if(strcmp(tok, "lines") == 0) { 
+	      /*printf("parsing lines\n");*/
+	      if((status = parse_lines_section(efp, errbuf, ps)) != eslOK) return status;		   
+	    }	
+	    else { 
+	      ESL_FAIL(eslEINVAL, errbuf, "parse_template_page(), error, unknown section type %s.", tok);
+	    }
+	  }
+	  else { 
+	    ESL_FAIL(eslEINVAL, errbuf, "parse_template_page(), error last read line number %d.", efp->linenumber);
+	  }
+	}
+	else { 
+	  ESL_FAIL(eslEINVAL, errbuf, "parse_template_page(), expected line beginning with %%%% begin, but read tok: %s instead of begin, last read line number %d.", tok, efp->linenumber);
+	}
+      }
+      else { 
+	ESL_FAIL(eslEINVAL, errbuf, "parse_template_page(), ran out of tokens early, error last read line number %d.", efp->linenumber);
+      }
+    }
+    else { 
+      ESL_FAIL(eslEINVAL, errbuf, "parse_template_page(), expected line beginning with %%%%, read tok: %s, last read line number %d.", tok, efp->linenumber);
+    }
+  }
+  if(read_showpage == FALSE && status != eslEOF) { 
+    ESL_FAIL(status, errbuf, "parse_template_page(), error, ran out of tokens, but not at end of file?, last read line number %d.", efp->linenumber);
+  }
+  if(status == eslEOF) reached_eof = TRUE;
+
+  *ret_ps = ps;
+
+  if(reached_eof) return eslEOF;
+  else            return eslOK;
+}
+
+/* parse_modelname_section
+ *
+ * Parse the modelname section of a template postscript file.
+ * If anything is invalid, we return a non-eslOK status code
+ * to caller. 
+ * 
+ * Returns:  eslOK on success.
+ */
+int
+parse_modelname_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps)
+{
+  int status;
+  char *tok;
+  int   toklen;
+  char *curstr = NULL;
+  int   curlen = 0;
+  int  ntok = 0;
+  /* this section should be exactly 3 lines, one of which we've already read,
+   * here's an example, next token should be the first 0.65
+   * % begin modelname
+   * % archaea
+   * % end scale
+   */
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing modelname section, reading token 1 of 3"); 
+  if (strcmp(tok, "%") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing modelname section, middle line token 1 should be a percent sign but it's %s", tok); 
+  /* read remainder of line, this is the model name */
+  while ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen))  == eslOK) { 
+    if(ntok > 0) {
+      if((status = esl_strcat(&curstr, curlen, " ",  1))      != eslOK) ESL_FAIL(status, errbuf, "parse_modelname_section(), error parsing model name.");
+      curlen += 1;
+    }
+    if((status = esl_strcat(&curstr, curlen, tok,  toklen)) != eslOK) ESL_FAIL(status, errbuf, "parse_modelname_section(), error parsing model name.");
+    curlen += toklen;
+    ntok++;
+  }
+  ESL_ALLOC(ps->modelname, sizeof(char) * (curlen+1));
+  strcpy(ps->modelname, curstr);
+
+  /* next line should be '% end modelname' */
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing modelname section, reading end line token 1 of 3"); 
+  if (strcmp(tok, "%") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing modelname section, end line token 1 of 3 should be a percent sign but it's %s", tok); 
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing modelname section, reading end line token 2 of 3"); 
+  if (strcmp(tok, "end") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing modelname section, end line token 2 of 3 should be 'end' but it's %s", tok); 
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing modelname section, reading end line token 3 of 3"); 
+  if (strcmp(tok, "modelname") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing modelname section, end line token 3 of 3 should be 'modelname' but it's %s", tok); 
+
+  if(curstr != NULL) free(curstr);
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "Error, parsing modelname section, memory error?");
+}
+
+/* parse_legend_section
+ *
+ * Parse the legend (legend coordinates) section of a template postscript file.
+ * If anything is invalid, we return a non-eslOK status code
+ * to caller. 
+ * 
+ * Returns:  eslOK on success.
+ */
+int
+parse_legend_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps)
+{
+  int status;
+  char *tok;
+  int   toklen;
+
+  /* this section should be exactly 3 lines, one of which we've already read,
+   * five tokens of the middle line are <rfpos> <x_offset> <y_offset> <leg_cellsize> <leg_right_buffer>
+   * this tells us to put the top-left corner of the legend at 
+   * ps->legx[rfpos] + x_offset, ps->legy[rfpos] + y_offset,
+   * and have the RHS of the buffer end <space_right_of_leg> points before the RHS of the page
+   * cellsize is the size of the cells in the legend
+   * here's an example, first token we'll read should be '%', followed by '1508'
+   * % begin legend
+   * % 1508 24. -24. 12 0.
+   * % end legend
+   */
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 1 of 6"); 
+  if (strcmp(tok, "%") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing legend section, middle line token 1 should be a percent sign but it's %s", tok); 
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 2 of 6"); 
+  ps->leg_posn = atoi(tok);
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 3 of 6"); 
+  ps->legx_offset = atof(tok);
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 4 of 6"); 
+  ps->legy_offset = atof(tok);
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 5 of 6"); 
+  ps->leg_cellsize = atoi(tok);
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 6 of 6"); 
+  ps->leg_rhs_space = atof(tok);
+
+  /* read '% end legend' line */
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK)  ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 3 of 3");   
+  if (strcmp(tok, "%") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing legend section, end line token 1 of 3 should be a percent sign but it's %s", tok); 
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading end line token 2 of 3"); 
+  if (strcmp(tok, "end") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing legend section, end line token 2 of 3 should be 'end' but it's %s", tok); 
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading end line token 3 of 3"); 
+  if (strcmp(tok, "legend") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing legend section, end line token 3 of 3 should be 'legend' but it's %s", tok); 
+
+  return eslOK;
+}
+
+/* parse_scale_section
+ *
+ * Parse the scale section of a template postscript file.
+ * If anything is invalid, we return a non-eslOK status code
+ * to caller. 
+ * 
+ * Returns:  eslOK on success.
+ */
+int
+parse_scale_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps)
+{
+  int status;
+  char *tok;
+  int   toklen;
+
+  /* this section should be exactly 3 lines, one of which we've already read,
+   * here's an example, next token should be the first 0.65
+   * % begin scale
+   * 0.65 0.65 scale
+   * % end scale
+   */
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading token 1 of 3"); 
+  ps->scale = atof(tok);
+  if(ps->scale < 0.) ESL_FAIL(status, errbuf, "Error, parsing scale section, scale must be positive real number, read %s\n", tok);
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading token 2 of 3"); 
+  if(esl_FCompare(ps->scale, atof(tok), eslSMALLX1) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing scale section, x and y scales are not equal %.2f != %.2f", ps->scale, atof(tok)); 
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK)  ESL_FAIL(status, errbuf, "Error, parsing scale section, reading token 3 of 3"); 
+  if (strcmp(tok, "scale") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing scale section, token 3 of 3 should be 'scale' but it's %s", tok); 
+
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading end line token 1 of 3"); 
+  if (strcmp(tok, "%") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing scale section, end line token 1 of 3 should be a percent sign but it's %s", tok); 
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading end line token 2 of 3"); 
+  if (strcmp(tok, "end") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing scale section, end line token 2 of 3 should be 'end' but it's %s", tok); 
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading end line token 3 of 3"); 
+  if (strcmp(tok, "scale") != 0)  ESL_FAIL(eslEINVAL, errbuf, "Error, parsing scale section, end line token 3 of 3 should be 'scale' but it's %s", tok); 
+
+  return eslOK;
+}
+
+
+/* parse_ignore_section
+ *
+ * Parse an ignore section of a template postscript file.
+ * We ignore this data. This function's purpose is to read
+ * tokens until we see the "% end ignore" line signalling
+ * the end of the ignore section.
+ * 
+ * As a special case, if any line iss a single token, 'showpage', we 
+ * set *ret_read_showpage as TRUE upon return. This signals to caller
+ * that the current page is finished.
+ * 
+ * Returns:  eslOK on success.
+ */
+int
+parse_ignore_section(ESL_FILEPARSER *efp, char *errbuf, int *ret_read_showpage)
+{
+  int status;
+  char *tok;
+  int   keep_reading = TRUE;
+  int   read_showpage = FALSE;
+
+  while((keep_reading) && (status = esl_fileparser_NextLine(efp) == eslOK)) { 
+    /* we're going to keep reading until we've read the line that is '% end ignore', 3 tokens, '%', then 'end', then 'ignore' */
+    if(((status = esl_fileparser_GetToken(efp, &tok, NULL)) == eslOK) && (strcmp(tok, "%") == 0)) { /* first token is '%' */
+      if(((status = esl_fileparser_GetToken(efp, &tok, NULL)) == eslOK) && (strcmp(tok, "end") == 0)) { /* second token is 'end' */
+	if(((status = esl_fileparser_GetToken(efp, &tok, NULL)) == eslOK) && (strcmp(tok, "ignore") == 0)) { /* final token is 'end' */
+	  keep_reading = FALSE;
+	  status = eslOK;
+	}
+      }
+    }
+    else if(strcmp(tok, "showpage") == 0) { /* first token is 'showpage' */
+      read_showpage = TRUE;
+    }
+  }
+  if(status == eslEOF) ESL_FAIL(status, errbuf, "Error, parsing ignore section, finished file looking for '%%%% end ignore' line");
+  if(status != eslOK)  ESL_FAIL(status, errbuf, "Error, parsing ignore section, last line number read %d", efp->linenumber);
+
+  *ret_read_showpage = read_showpage;
+  return eslOK;
+}
+
+
+/* parse_regurgitate_section
+ *
+ * Parse a regurgitate section of a template postscript file.
+ * If anything is invalid, we return a non-eslOK status code
+ * to caller. 
+ * 
+ * Returns:  eslOK on success.
+ */
+int
+parse_regurgitate_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps)
+{
+  int status;
+  char *tok;
+  int   toklen;
+  int   seen_end = FALSE;
+  char *curstr = NULL;
+  char *newstr;
+  int   nalloc = ps->nregurg;
+  int   curlen;
+  void *tmp;
+  int   ntok = 0;
+
+  while (((status = esl_fileparser_NextLine(efp)) == eslOK) && (!seen_end))
+  {
+    curlen = ntok = 0;
+    while ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen))  == eslOK) { 
+      if (strcmp(tok, "%") == 0) { /* should be the end, make sure it's properly formatted */
+	if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing regurgitate section, read %%%% prefixed line without ' end regurgitate' after it"); 
+	if (strcmp(tok, "end") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing regurgitate section, read %%%% prefixed line without ' end regurgitate' after it"); 
+	if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing regurgitate section, read %%%% prefixed line without ' end regurgitate' after it"); 
+	if (strcmp(tok, "regurgitate") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing regurgitate section, read %%%% prefixed line without ' end regurgitate' after it"); 
+	seen_end = TRUE;
+	break;
+      }
+      else { 
+	if(ntok > 0) { 
+	  if((status = esl_strcat(&curstr, curlen, " ",  1))  != eslOK) ESL_FAIL(status, errbuf, "parse_regurgitate_section(), error (2).");
+	  curlen += 1;
+	}
+	if((status = esl_strcat(&curstr, curlen, tok,  toklen)) != eslOK) ESL_FAIL(status, errbuf, "parse_regurgitate_section(), error (1).");
+	curlen += toklen;
+	ntok++;
+      }
+    }
+    if(seen_end) break;
+    if((status = esl_strcat(&curstr, curlen, "\n", 1)) != eslOK) ESL_FAIL(status, errbuf, "parse_regurgitate_section(), error (3).");
+    curlen += 1;
+    ESL_ALLOC(newstr, sizeof(char) * (curlen+1));
+    strcpy(newstr, curstr);
+    if(ps->nregurg == nalloc) { 
+      nalloc += ps->nalloc; ESL_RALLOC(ps->regurgA, tmp, sizeof(char *) * nalloc); 
+    }
+    ps->regurgA[ps->nregurg++] = newstr;
+    free(curstr);
+    curstr = NULL;
+  }
+  if(status == eslEOF) ESL_FAIL(status, errbuf, "Error, parsing regurgitate section, finished file looking for '%%%% end regurgitate' line");
+  if(status != eslOK)  ESL_FAIL(status, errbuf, "Error, parsing regurgitate section, last line number read %d", efp->linenumber);
+
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "Memory error parsing regurgitate section");
+}
+
+
+/* parse_text_section
+ *
+ * Parse a text section of a template postscript file.
+ * If anything is invalid, we return a non-eslOK status code
+ * to caller. 
+ * 
+ * Returns:  eslOK on success.
+ */
+int
+parse_text_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps)
+{
+  int status;
+  char *tok;
+  int   toklen;
+  int   seen_end = FALSE;
+  int   nalloc;
+  void *tmp;
+  int do_posntext = FALSE;
+  int do_nucleotides = FALSE;
+  int i;
+
+  /* find out which section we're in, 'posntext' or 'nucleotides' */
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, last line %d\n", efp->linenumber);
+  if      (strcmp(tok, "positiontext") == 0) { do_posntext = TRUE; nalloc = ps->nposntext; }
+  else if (strcmp(tok, "nucleotides")     == 0) { do_nucleotides = TRUE; nalloc = ps->rflen; }
+
+  /* Parse each line. example line: 
+   * (G) 168.00 392.00 moveto show
+   */
+  while (((status = esl_fileparser_NextLine(efp)) == eslOK) && (!seen_end))
+  {
+    if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, each non-comment line should be 5-tokens ending with 'show'");
+    if (tok[0] == '%') { /* comment line, could be the end, check if it's '% end text {positiontext,nucleotides}', if not, ignore it */
+      if(strcmp(tok, "%") == 0) { /* first token is '%', keep checking */
+	if(((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) && (strcmp(tok, "end") == 0)) { /* second token is 'end', keep checking */
+	  if(((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) && (strcmp(tok, "text") == 0)) { /* third token is 'end', keep checking */
+	    if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) { /* has a fourth token, keep checking */
+	      if(do_posntext && strcmp(tok, "positiontext") == 0) seen_end = TRUE;
+	      if(do_nucleotides && strcmp(tok, "nucleotides")     == 0) seen_end = TRUE;  
+	    }
+	  }
+	}
+      }
+    }
+    else { 
+      /* we're reading a non-comment line, tok is the string, if do_posntext, we store it, else we discard it */
+      if(do_posntext) {
+	if(ps->nposntext == nalloc) { 
+	  ESL_RALLOC(ps->posntextA,  tmp, sizeof(char *) * (nalloc + ps->nalloc)); 
+	  ESL_RALLOC(ps->posntextxA, tmp, sizeof(float) * (nalloc + ps->nalloc)); 
+	  ESL_RALLOC(ps->posntextyA, tmp, sizeof(float) * (nalloc + ps->nalloc)); 
+	  for(i = nalloc; i < nalloc + ps->nalloc; i++) ps->posntextA[i] = NULL;
+	  nalloc += ps->nalloc; 
+	}
+	if((status = esl_strdup(tok, -1, &(ps->posntextA[ps->nposntext]))) != eslOK) goto ERROR;
+      }
+      if(do_nucleotides && ps->rflen == nalloc) { 
+	ESL_RALLOC(ps->rxA, tmp, sizeof(float) * (nalloc + ps->nalloc)); 
+	ESL_RALLOC(ps->ryA, tmp, sizeof(float) * (nalloc + ps->nalloc)); 
+	nalloc += ps->nalloc; 
+      }
+
+      /* get x */
+      if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, each non-comment line should be 5 tokens ending with 'show'");
+      if(do_posntext) ps->posntextxA[ps->nposntext] = atof(tok);
+      if(do_nucleotides) ps->rxA[ps->rflen] = atof(tok);
+      /* get y */
+      if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, each non-comment line should be 5 tokens ending with 'show'");
+      if(do_posntext) ps->posntextyA[ps->nposntext] = atof(tok);
+      if(do_nucleotides) ps->ryA[ps->rflen] = atof(tok);
+      
+      /* verify moveto */
+      if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, each non-comment line should be 5 tokens ending with 'show'");
+      if (strcmp(tok, "moveto") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing text main section, fourth token should be 'moveto', line %d", efp->linenumber);
+      /* verify show */
+      if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, each non-comment line should be 5 tokens ending with 'show'");
+      if (strcmp(tok, "show") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing text main section, fifth token should be 'show', line %d", efp->linenumber);
+      
+      if(do_posntext) ps->nposntext++;
+      if(do_nucleotides) ps->rflen++;
+    }
+  }
+  if(!seen_end) { 
+    if(do_posntext) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing text positiontext section, didn't see '%%%% end text positiontext' line: %d\n", efp->linenumber);
+    if(do_nucleotides) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing text positiontext section, didn't see '%%%% end text nucleotides' line: %d\n", efp->linenumber);
+  }
+  if(status == eslEOF && do_posntext) 
+    ESL_FAIL(status, errbuf, "Error, parsing text section, finished file looking for '%%%% end text positiontext' line");
+  if(status == eslEOF && do_nucleotides) 
+    ESL_FAIL(status, errbuf, "Error, parsing text section, finished file looking for '%%%% end text nucleotides' line");
+  if(status != eslOK)  ESL_FAIL(status, errbuf, "Error, parsing text section, last line number read %d", efp->linenumber);
+
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "Memory error parsing text section");
+}
+
+/* parse_lines_section
+ *
+ * Parse a lines section of a template postscript file.
+ * If anything is invalid, we return a non-eslOK status code
+ * to caller. 
+ * 
+ * Returns:  eslOK on success.
+ */
+int
+parse_lines_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps)
+{
+  int status;
+  char *tok;
+  int   toklen;
+  int   seen_end = FALSE;
+  int   nalloc;
+  void *tmp;
+  int do_ticks = FALSE;
+  int do_bpconnects = FALSE;
+
+  /* find out which section we're in, 'positionticks' or 'bpconnects' */
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines section, last line %d\n", efp->linenumber);
+  if      (strcmp(tok, "positionticks") == 0) { do_ticks = TRUE;      nalloc = ps->nticks; }
+  else if (strcmp(tok, "bpconnects")    == 0) { do_bpconnects = TRUE; nalloc = ps->nbp;    }
+  else    ESL_FAIL(status, errbuf, "Error, parsing lines section unrecognized type: %s ('bpconnects' or 'positionticks' expected)\n", tok);
+
+  /* Parse each line. example line: 
+   * 151.82 331.76 148.86 338.65 newpath moveto lineto stroke
+   */
+  while (((status = esl_fileparser_NextLine(efp)) == eslOK) && (!seen_end))
+  {
+    if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 5-tokens ending with 'show'");
+    if (strcmp(tok, "%") == 0) { /* should be the end, make sure it's properly formatted */
+      if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines' after it"); 
+      if (strcmp(tok, "end") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines' after it"); 
+      if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines' after it"); 
+      if (strcmp(tok, "lines") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines' after it"); 
+      if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines' after it"); 
+      if(do_ticks) { 
+	if (strcmp(tok, "positionticks") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines positionticks' after it"); 
+      }
+      if(do_bpconnects) {
+	if (strcmp(tok, "bpconnects") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines bpconnects' after it"); 
+      }
+      seen_end = TRUE;
+      break;
+    }
+    /* if we get here, we haven't seen the end, we're reading a normal line, tok is the first x coord, we record this */
+    /* first we expand our arrays if nec */
+    if(do_ticks && ps->nticks == nalloc) { 
+      nalloc += ps->nalloc; 
+      ESL_RALLOC(ps->ticksx1A, tmp, sizeof(float) * nalloc); 
+      ESL_RALLOC(ps->ticksy1A, tmp, sizeof(float) * nalloc); 
+      ESL_RALLOC(ps->ticksx2A, tmp, sizeof(float) * nalloc); 
+      ESL_RALLOC(ps->ticksy2A, tmp, sizeof(float) * nalloc); 
+    }
+    if(do_bpconnects && ps->nbp == nalloc) { 
+      nalloc += ps->nalloc; 
+      ESL_RALLOC(ps->bpx1A, tmp, sizeof(float) * nalloc); 
+      ESL_RALLOC(ps->bpy1A, tmp, sizeof(float) * nalloc); 
+      ESL_RALLOC(ps->bpx2A, tmp, sizeof(float) * nalloc); 
+      ESL_RALLOC(ps->bpy2A, tmp, sizeof(float) * nalloc); 
+    }
+    /* store x1 */
+    if(do_ticks) ps->ticksx1A[ps->nticks] = atof(tok);
+    if(do_bpconnects) ps->bpx1A[ps->nbp] = atof(tok);
+    /* get y1 */
+    if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'");
+    if(do_ticks) ps->ticksy1A[ps->nticks] = atof(tok);
+    if(do_bpconnects) ps->bpy1A[ps->nbp] = atof(tok);
+    /* get x2 */
+    if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'");
+    if(do_ticks) ps->ticksx2A[ps->nticks] = atof(tok);
+    if(do_bpconnects) ps->bpx2A[ps->nbp] = atof(tok);
+    /* get y2 */
+    if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'");
+    if(do_ticks) ps->ticksy2A[ps->nticks] = atof(tok);
+    if(do_bpconnects) ps->bpy2A[ps->nbp] = atof(tok);
+    
+    /* verify newpath */
+    if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'");
+    if (strcmp(tok, "newpath") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines main section, fifth token should be 'newpath', line %d", efp->linenumber);
+    /* verify moveto */
+    if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'");
+    if (strcmp(tok, "moveto") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines main section, sixth token should be 'moveto', line %d", efp->linenumber);
+    /* verify lineto */
+    if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'");
+    if (strcmp(tok, "lineto") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines main section, seventh token should be 'lineto', line %d", efp->linenumber);
+    /* verify stroke */
+    if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'");
+    if (strcmp(tok, "stroke") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines main section, eigth token should be 'stroke', line %d", efp->linenumber);
+    
+    if(do_ticks) ps->nticks++;
+    if(do_bpconnects) ps->nbp++;
+  }
+  if(!seen_end) ESL_FAIL(status, errbuf, "Error, parsing lines section, didn't see end! line: %d\n", efp->linenumber);
+  if(status == eslEOF && do_ticks) 
+    ESL_FAIL(status, errbuf, "Error, parsing lines section, finished file looking for '%%%% end lines positionticks' line");
+  if(status == eslEOF && do_bpconnects) 
+    ESL_FAIL(status, errbuf, "Error, parsing lines section, finished file looking for '%%%% end lines bpconnects' line");
+
+  if(status != eslOK)  ESL_FAIL(status, errbuf, "Error, parsing lines section, last line number read %d", efp->linenumber);
+
+  return eslOK;
+ ERROR: ESL_FAIL(status, errbuf, "Memory error parsing lines section");
+}
+
+/* Function: individuals_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with info for individual seqs and 
+ *           possibly their posteriors in the MSA.
+ * Return:   eslOK on success.
+ * 
+ * per_seq_ins_ct - [0..i..msa->nseq-1][0..rfpos..rflen] number of inserts 
+ *                  insert after each nongap RF position per sequence.
+ *                  If rfpos == 0: # inserts BEFORE first position.
+ *                  If rfpos == n: # inserts after position rfpos n
+ *                  This is off-by-one with respect to msa->rf for example,
+ *                  msa->rf[n] is the 'n-1'th nucleotide of the RF annotation.
+ */
+static int
+individuals_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, ESL_MSA *msa, int **per_seq_ins_ct, 
+			 int do_prob, int do_rescol, float ***hc_scheme, int hc_scheme_idx_s, int hc_scheme_idx_p, 
+			 int hc_nbins_s, int hc_nbins_p, float **hc_onecell, int extdel_idx_s, int wcbp_idx_s, int gubp_idx_s, 
+			 int ncbp_idx_s, int dgbp_idx_s, int hgbp_idx_s, int gap_idx_p, FILE *tabfp)
+{
+  int status;
+  int p, i, pp, ai;
+  int rfpos, apos, lpos, rpos, lrfpos, rrfpos;
+  int orig_npage = ps->npage;
+  int new_npage;
+
+  /* variables for the sequence pages */
+  int nextdel_s = 0;  /* number of external deletes (3' and 5' flush deletes) */
+  int nwc_s = 0;      /* number of Watson/Crick (A:U,U:A,C:G,G:C) basepairs */
+  int ngu_s = 0;      /* number of G:U,U:G basepairs (2 * num G-U,U-G bps) */
+  int nnc_s = 0;      /* number of non-canonical basepairs (A:A,A:C,A:G,C:A,C:C,C:U,G:A,G:G,U:C,U:U) */
+  int ndgi_s = 0;     /* number of internal double-gap basepairs */
+  int nhgi_s = 0;     /* number of internal half-gap basepairs */
+  int ndge_s = 0;     /* number of external double-gap basepairs */
+  int nhge_s = 0;     /* number of external half-gap basepairs */
+  float *limits_s;    /* [nbins+1] limits for each bin, limits[0] is min value we would expect to see, limits[nbins] is max */
+  int nins_s;         /* number of inserts after the current rfpos for current sequence */
+  int spos, epos;     /* first/final nongap position for cur sequence */
+  int apos_is_internal; /* is apos within spos..epos?, if not it's an external deletion */
+  int lpos_is_internal; /* is lpos within spos..epos?, if not it's an external deletion */
+  int rpos_is_internal; /* is rpos within spos..epos?, if not it's an external deletion */
+  int namewidth;        /* length in chars of longest seq name we'll print */
+  char *namedashes = NULL;
+  int ni;
+  double cur_cfreq;
+  int noutline_min     = 0; /* number of positions with minimal outline */
+  int noutline_max     = 0; /* number of positions with maximal outline */
+  int noutline_bp_good = 0; /* number of WC/GU basepairs that have left and/or right half outlined, consensus is WC/GU */
+  int noutline_bp_bad  = 0; /* number of NC    basepairs that have left and/or right half outlined, consensus is WC/GU */
+  int maj_bp_is_wc_or_gu;   /* TRUE if current consensus bp is a watson-crick of GU in majority consensus sequence */
+  float *stack;         /* postscript stack for outline procedure */
+
+  /* variables for the postprob pages */
+  int ngap_p = 0;
+  int ngap_masked_p = 0;
+  float *limits_p;    
+  int within_mask;
+  float ppavgA[11];
+  int ppidx;
+  int do_prob_res = FALSE; /* set to TRUE if --no-ntpp is NOT enabled */
+  int do_outline  = FALSE; /* set to TRUE if --no-nt is NOT enabled */
+  int noccl; /* number of one-cell color legends depends on value of do_prob_res and do_ouline */
+
+  /* contract check */
+  if(do_prob) { 
+    if(msa->pp == NULL) ESL_FAIL(eslEINVAL, errbuf, "internal error, individuals_sspostscript() do_prob == TRUE, msa->pp == FALSE");
+    for(i = 0; i < msa->nseq; i++) { 
+      if(msa->pp[i] == NULL)
+	ESL_FAIL(eslEINVAL, errbuf, "with --indi, either all or none of the selected sequences must have PP annotation, seq %d does not", i);
+    }
+    do_prob_res = (! esl_opt_GetBoolean(go, "--no-ntpp"));
+  }
+  do_outline = (! esl_opt_GetBoolean(go, "--no-ol"));
+
+  /* PP values, hard coded */
+  ppavgA[0]  = 0.025;
+  ppavgA[1]  = 0.10;
+  ppavgA[2]  = 0.20;
+  ppavgA[3]  = 0.30;
+  ppavgA[4]  = 0.40;
+  ppavgA[5]  = 0.50;
+  ppavgA[6]  = 0.60;
+  ppavgA[7]  = 0.70;
+  ppavgA[8]  = 0.80;
+  ppavgA[9]  = 0.90;
+  ppavgA[10] = 0.975;
+
+  /* determine number of pages we'll add */
+  new_npage = do_prob ? msa->nseq*2 : msa->nseq; 
+  if((status = add_pages_sspostscript(ps, new_npage, INDIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+
+  /* add the pages carefully, we allocate posterior pages and seq pages differently */
+  for(p = orig_npage; p < ps->npage; p++) { 
+    /* allocate seq page */
+    ESL_ALLOC(ps->rAA[p],    sizeof(char) *  (ps->rflen+1));
+    if(do_rescol)  ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen);
+    if(do_outline) { 
+      ESL_ALLOC(ps->otypeAA[p], sizeof(char) * ps->rflen);
+      for(rfpos = 0; rfpos < ps->rflen; rfpos++) ps->otypeAA[p][rfpos] = OUTLINE_NONE_IDX;
+    }
+    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+    ESL_ALLOC(ps->sclAA[p],   sizeof(SchemeColorLegend_t) * 1);
+    noccl = 2;
+    if (do_rescol)  noccl += 5;
+    if (do_outline) noccl += 7;
+    ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t *) * noccl);
+    for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+      if(do_rescol) ESL_ALLOC(ps->rcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */
+      ESL_ALLOC(ps->bcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */
+    }
+
+    if(do_prob) { 
+      /* allocate postprob page */
+      p++;
+      ESL_ALLOC(ps->rAA[p], sizeof(char) *  (ps->rflen+1));
+      ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+      ESL_ALLOC(ps->sclAA[p],   sizeof(SchemeColorLegend_t) * 1);
+      ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t *) * 1);
+      if(do_prob_res) ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen);
+      for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+	ESL_ALLOC(ps->bcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */
+	if(do_prob_res) ESL_ALLOC(ps->rcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */
+      }
+    }
+  }
+
+  /* setup seq limits */
+  ESL_ALLOC(limits_s, sizeof(float) * (hc_nbins_s+1)); 
+  limits_s[0] = 0;
+  limits_s[1] = 1;
+  limits_s[2] = 2;
+  limits_s[3] = 5;
+  limits_s[4] = 10;
+  limits_s[5] = SSDRAWINFINITY;
+
+  /* setup pp limits */
+  ESL_ALLOC(limits_p, sizeof(float) * (hc_nbins_p+1)); 
+  limits_p[0] = 0.0;
+  limits_p[1] = 0.35;
+  limits_p[2] = 0.55;
+  limits_p[3] = 0.75;
+  limits_p[4] = 0.85;
+  limits_p[5] = 0.95;
+  limits_p[6] = 1.00;
+
+  /* allocate the uaseqlenA data structure to store unaligned seq lengths */
+  if(ps->uaseqlenA != NULL) { free(ps->uaseqlenA); ps->uaseqlenA = NULL; }
+  ESL_ALLOC(ps->uaseqlenA, sizeof(int) * msa->nseq);
+  esl_vec_ISet(ps->uaseqlenA, msa->nseq, 0);
+
+  if(tabfp != NULL) { 
+    /* determine max length of a name */
+    namewidth = 8; /* length of 'seq name' */
+    for(i = 0; i < msa->nseq; i++) {
+      namewidth = ESL_MAX(namewidth, strlen(msa->sqname[i]));
+    }
+    ESL_ALLOC(namedashes, sizeof(char) * namewidth+1);
+    namedashes[namewidth] = '\0';
+    for(ni = 0; ni < namewidth; ni++) namedashes[ni] = '-';
+    fprintf(tabfp, "# -----------------------\n");
+    fprintf(tabfp, "# Per-sequence statistics\n");
+    fprintf(tabfp, "# -----------------------\n");
+    fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each sequence\n", ps->rflen);
+    fprintf(tabfp, "# printed to the output postscript file.\n");
+    fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", do_outline ? 15 : 11);
+    fprintf(tabfp, "# \ttoken  1: 'perseq' (tag defining line type to ease parsing)\n");
+    fprintf(tabfp, "# \ttoken  2: sequence name\n");
+    fprintf(tabfp, "# \ttoken  3: spos: aligned position of first (5'-most) nongap nucleotide in sequence\n");
+    fprintf(tabfp, "# \ttoken  4: epos: aligned position of final (3'-most) nongap nucleotide in sequence\n");
+    fprintf(tabfp, "# \ttoken  5: number of Watson-Crick basepairs (A-U, C-G, G-C, or U-A) in the sequence\n");
+    fprintf(tabfp, "# \ttoken  6: number of G-U or U-G basepairs in the sequence\n");
+    fprintf(tabfp, "# \ttoken  7: number of non-canonical basepairs (A-A, A-C, A-G, C-A, C-C, C-U, G-A, G-G, U-C, U-U) in the sequence\n");
+    fprintf(tabfp, "# \ttoken  8: number of internal half-gap basepairs in the sequence\n");
+    fprintf(tabfp, "# \ttoken  9: number of internal double-gap basepairs in the sequence\n");
+    fprintf(tabfp, "# \ttoken 10: number of external half-gap basepairs in the sequence\n");
+    fprintf(tabfp, "# \ttoken 11: number of external double-gap basepairs in the sequence\n");
+    if(do_outline) { 
+      fprintf(tabfp, "# \ttoken 12: number of nt changes relative to majority rule consensus sequence\n");
+      fprintf(tabfp, "# \ttoken 13: subset of token 12 for which consensus nt occurs in > 0.75 of nongap sequences\n");
+      fprintf(tabfp, "# \ttoken 14: number of internal basepairs in seq that differ from majority rule consensus basepair\n");
+      fprintf(tabfp, "# \t          *and* consensus bp is Watson-Crick, G-U or U-G\n");
+      fprintf(tabfp, "# \ttoken 15: subset of token 14 which are Watson-Crick, G-U or U-G in seq\n");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Alignment length:              %" PRId64 " (this is max possible value for tokens 3 and 4)\n", msa->alen);
+    fprintf(tabfp, "# Number of consensus basepairs: %d (this is max possible value for tokens 5-11)\n", ps->nbp);
+    fprintf(tabfp, "# A basepair between positions i and j for sequence s is a half-gap basepair if s has\n");
+    fprintf(tabfp, "# a gap at either position i or j, but not both. It is a double-gap basepair if it has\n");
+    fprintf(tabfp, "# a gap at both positions i and j.\n");
+    fprintf(tabfp, "# A basepair between i:j is 'internal' for sequence s if if spos <= i and epos >= j.\n");
+    fprintf(tabfp, "# Otherwise, basepair i:j is 'external' for sequence s.\n");
+    fprintf(tabfp, "# All basepairs that are nongaps in both i and j are necessarily internal.\n");
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# %6s  %-*s  %4s  %4s  %4s  %4s  %4s  %4s  %4s  %4s  %4s", "type", namewidth, "seq name", "spos", "epos", "nwc",  "ngu",  "nnc",  "nhgi", "ndgi", "nhge", "ndge");
+    if(do_outline) { fprintf(tabfp, "  %4s  %4s  %5s  %5s", "ndf", "nrdf", "nbpdf", "nbpcp"); }
+    fprintf(tabfp, "\n");
+    fprintf(tabfp, "# %6s  %-*s  %4s  %4s  %4s  %4s  %4s  %4s  %4s  %4s  %4s", "------", namewidth, namedashes, "----", "----", "----", "----", "----", "----", "----", "----", "----");
+    if(do_outline) { fprintf(tabfp, "  %4s  %4s  %5s  %5s", "----", "----", "-----", "-----"); }
+    fprintf(tabfp, "\n");
+  }
+  
+  /* Step through each seq, first fill seq page, then possibly postprob page */
+  ai = 0;
+  pp = orig_npage-1;
+  for(i = 0; i < msa->nseq; i++) {
+    /**************************
+     * Draw the sequence page *
+     **************************/
+    pp++;
+    spos = epos = -1;
+    /* determine first and final non-gap position */
+    for(apos = 0; apos < msa->alen; apos++) { /* find first non-gap RF position */
+      if((! esl_abc_CIsGap(abc, msa->aseq[i][apos]))) { 
+	spos = apos;
+	break;
+      }
+    }
+    for(apos = msa->alen-1; apos >= 0; apos--) { 
+      if((! esl_abc_CIsGap(abc, msa->aseq[i][apos]))) { 
+	epos = apos;
+	break;
+      }
+    }
+    ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx_s, hc_nbins_s, limits_s, TRUE, TRUE, TRUE, FALSE);
+    /* init one cell legend counters */
+    nextdel_s = nwc_s = ngu_s = nnc_s = ndgi_s = nhgi_s = ndge_s = nhge_s = noutline_min = noutline_max = noutline_bp_good = noutline_bp_bad = 0;
+    ai++;
+    for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+      apos = ps->msa_rf2a_map[rfpos];
+      nins_s = per_seq_ins_ct[i][rfpos+1];
+      apos_is_internal = TRUE; /* set to FALSE below if apos < spos || apos > epos */
+      
+      if(! esl_abc_CIsGap(abc, msa->aseq[i][apos])) ps->uaseqlenA[i]++;
+      ps->uaseqlenA[i] += nins_s;
+      ps->rAA[pp][rfpos] = msa->aseq[i][apos];
+      if(do_outline) {
+	if((! esl_abc_CIsGap(abc, msa->aseq[i][apos])) &&                  /* aseq is not a gap at this posn */
+	   (esl_abc_CIsCanonical(abc, ps->msa_cseq_maj[rfpos])) &&         /* cseq is canonical at this posn */
+	   (toupper(msa->aseq[i][apos]) != toupper(ps->msa_cseq_maj[rfpos]))) { /* aseq != cseq at this posn */
+	  cur_cfreq = abc_ct[apos][esl_abc_DigitizeSymbol(abc, toupper(ps->msa_cseq_maj[rfpos]))] / 
+	    esl_vec_DSum(abc_ct[apos], abc->K);
+	  if(cur_cfreq > 0.75) { ps->otypeAA[pp][rfpos] = OUTLINE_MAX_IDX; noutline_max++; }
+	  else                 { ps->otypeAA[pp][rfpos] = OUTLINE_MIN_IDX; noutline_min++; }
+	}
+      }	     
+      /* printf("ps->rAA[%3d][%4d]: %c\n", pp, rfpos, ps->rAA[pp][rfpos]);  */
+      if((spos != -1 && epos != -1) && /* this should always be true, unless seq has length 0! */
+	 (apos < spos || apos > epos)) { 
+	if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[extdel_idx_s])) != eslOK) return status;
+	nextdel_s++;
+	apos_is_internal = FALSE;
+      }
+      else { /* color insert value */
+	if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx_s], nins_s, ps->sclAA[pp], TRUE, NULL)) != eslOK) return status;
+      }	  
+      if(do_rescol || tabfp != NULL) { 
+	if(ps->msa_ct[(rfpos+1)] == 0) { 
+	  if(do_rescol) { 
+	    /* single-stranded nucleotide or gap, draw same color as Watson-Cricks */
+	    if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status;
+	  }
+	}
+	else { /* consensus basepaired nucleotide */
+	  lpos = apos;
+	  rpos = ps->msa_rf2a_map[ps->msa_ct[rfpos+1]-1];
+	  lrfpos = rfpos;
+	  rrfpos = ps->msa_ct[rfpos+1]-1;
+	  maj_bp_is_wc_or_gu = ((is_watson_crick_bp(ps->msa_cseq_maj[lrfpos], ps->msa_cseq_maj[rrfpos])) 
+				|| (is_gu_or_ug_bp(ps->msa_cseq_maj[lrfpos], ps->msa_cseq_maj[rrfpos]))) ? TRUE : FALSE;
+	  lpos_is_internal = apos_is_internal;
+	  rpos_is_internal = TRUE; /* we set to FALSE below if nec */
+	  if((spos != -1 && epos != -1) && /* this should always be true, unless seq has length 0! */
+	     (rpos < spos || rpos > epos)) { 
+	    rpos_is_internal = FALSE;
+	  }
+	  if(lpos_is_internal && rpos_is_internal) { /* BP is either Watson-Crick, G:U/U:G, non-canonical, internal double-gap bp or internal half-gap bp */
+	    if(is_watson_crick_bp(msa->aseq[i][lpos], msa->aseq[i][rpos])) { /* watson-crick */
+	      if(do_rescol) { 
+		if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status;
+	      }
+	      if(lpos < rpos) nwc_s++;
+	      if(do_outline && (lpos > rpos) && maj_bp_is_wc_or_gu) { 
+		/* check if this seq has a different WC or GU bp than the majority consensus */
+		if((ps->otypeAA[pp][lrfpos] != OUTLINE_NONE_IDX) || 
+		   (ps->otypeAA[pp][rrfpos] != OUTLINE_NONE_IDX)) {
+		  noutline_bp_good++; 
+		}
+	      }
+	    }
+	    else if(is_gu_or_ug_bp(msa->aseq[i][lpos], msa->aseq[i][rpos])) { /* G:U or U:G */
+	      if(do_rescol) { 
+		if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[gubp_idx_s])) != eslOK) return status;
+	      }
+	      if(lpos < rpos) ngu_s++;
+	      if(do_outline && (lpos > rpos) && maj_bp_is_wc_or_gu) { 
+		if((ps->otypeAA[pp][lrfpos] != OUTLINE_NONE_IDX) || 
+		   (ps->otypeAA[pp][rrfpos] != OUTLINE_NONE_IDX)) {
+		  noutline_bp_good++; 
+		}
+	      }
+	    }
+	    else if ((! esl_abc_CIsResidue(abc, msa->aseq[i][lpos])) && (! esl_abc_CIsResidue(abc, msa->aseq[i][rpos]))) { /* internal double-gap basepair */
+	      if(do_rescol) { 
+		if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[dgbp_idx_s])) != eslOK) return status;
+	      }
+	      if(lpos < rpos) ndgi_s++;
+	      if(do_outline && (lpos > rpos) && maj_bp_is_wc_or_gu) { 
+		if((ps->otypeAA[pp][lrfpos] != OUTLINE_NONE_IDX) || 
+		   (ps->otypeAA[pp][rrfpos] != OUTLINE_NONE_IDX)) {
+		  noutline_bp_bad++; 
+		}
+	      }
+	    }
+	    else if ((! esl_abc_CIsResidue(abc, msa->aseq[i][lpos])) || (! esl_abc_CIsResidue(abc, msa->aseq[i][rpos]))) { /* internal half-gap basepair */
+	      if(do_rescol) { 
+		if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[hgbp_idx_s])) != eslOK) return status;
+	      }
+	      if(lpos < rpos) nhgi_s++;
+	      if(do_outline && (lpos > rpos) && maj_bp_is_wc_or_gu) { 
+		if((ps->otypeAA[pp][lrfpos] != OUTLINE_NONE_IDX) || 
+		   (ps->otypeAA[pp][rrfpos] != OUTLINE_NONE_IDX)) {
+		  noutline_bp_bad++; 
+		}
+	      }
+	    }
+	    else { /* non-canonical */
+	      if(do_rescol) { 
+		if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[ncbp_idx_s])) != eslOK) return status;
+	      }
+	      if(lpos < rpos) nnc_s++;
+	      if(do_outline && (lpos > rpos) && maj_bp_is_wc_or_gu) { 
+		if((ps->otypeAA[pp][lrfpos] != OUTLINE_NONE_IDX) || 
+		   (ps->otypeAA[pp][rrfpos] != OUTLINE_NONE_IDX)) {
+		  noutline_bp_bad++; 
+		}
+	      }
+	    }
+	  } /* end of (if(lpos_is_internal && rpos_is_internal)) */
+	  else { /* we'll draw this nucleotide as black */
+	    if ((! esl_abc_CIsResidue(abc, msa->aseq[i][lpos])) && (! esl_abc_CIsResidue(abc, msa->aseq[i][rpos]))) { /* external double-gap basepair */
+	      ndge_s++;
+	    }
+	    if ((! esl_abc_CIsResidue(abc, msa->aseq[i][lpos])) || (! esl_abc_CIsResidue(abc, msa->aseq[i][rpos]))) { /* external half-gap basepair */
+	      nhge_s++;
+	    }
+	    if(do_rescol) { 
+	      if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[BLACKOC])) != eslOK) return status;
+	    }
+	  }
+	}
+      }
+    }
+    ps->rAA[pp][ps->rflen] = '\0';
+    ps->seqidxA[pp] = i;
+    ps->nocclA[pp] = 0;
+    
+    if(tabfp != NULL) { 
+      fprintf(tabfp, "  perseq  %-*s  %4d  %4d  %4d  %4d  %4d  %4d  %4d  %4d  %4d", namewidth, msa->sqname[i], spos+1, epos+1, nwc_s, ngu_s, nnc_s, nhgi_s, ndgi_s, nhge_s, ndge_s);
+      if(do_outline) { 
+	fprintf(tabfp, "  %4d  %4d  %5d  %5d", noutline_min + noutline_max, noutline_max, noutline_bp_good + noutline_bp_bad, noutline_bp_good);
+      }
+      fprintf(tabfp, "\n");
+    }
+    
+    /* if nec, add one-cell color legends for different bp types */
+    if(do_rescol) { 
+      /* add one-cell color legend for watson-crick basepairs */
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[wcbp_idx_s], nwc_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "Watson-Crick basepair (WC bp)", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "C-G", errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+
+      /* add one-cell color legend for G-U, U-G basepairs */
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[gubp_idx_s], ngu_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U or U-G bp", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U", errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+
+      /* add one-cell color legend for non-canonical basepairs */
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[ncbp_idx_s], nnc_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "non-canonical bp", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "A-A", errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+
+      /* add one-cell color legend for internal half-gap basepairs */
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[hgbp_idx_s], nhgi_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "internal half-gap bp", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "A--", errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+
+      /* add one-cell color legend for internal double-gap basepairs */
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[dgbp_idx_s], ndgi_s, OCCL_BLANK_COUNT, TRUE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "internal double-gap bp", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "---", errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+    }
+
+    /* if nec, add one page cell legend for the two outline types */
+    if(do_outline) { 
+      /* add a psuedo-one-cell color legends, the explanatory text for outlines: */
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], OCCL_BLANK_COUNT, OCCL_BLANK_COUNT, FALSE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "Positions != to most common nt x:", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "", errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+
+      /* allocate our stack for the procedure */
+      ESL_ALLOC(stack, sizeof(float) * 2);
+      stack[0] = ps->leg_cellsize;
+      stack[1] = ps->leg_cellsize * OUTLINE_LINEWIDTH_CELL_FRACTION_MIN;
+      /* add one-cell color legend for minimal outline */
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], noutline_min, OCCL_BLANK_COUNT, FALSE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "!= x and freq(x) <  0.75", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_procedure_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], OUTLINE_PROCEDURE, stack, 2, errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+
+      stack[1] = ps->leg_cellsize * OUTLINE_LINEWIDTH_CELL_FRACTION_MAX;
+      /* add one-cell color legend for maximal outline */
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], noutline_max, OCCL_BLANK_COUNT, FALSE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "!= x and freq(x) >= 0.75", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_procedure_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], OUTLINE_PROCEDURE, stack, 2, errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+
+      /* add a psuedo-one-cell color legends, the explanatory text for outline basepairs: */
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], OCCL_BLANK_COUNT, OCCL_BLANK_COUNT, FALSE, TRUE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "Number of bps != most common bp a:b", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "", errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+
+      /* add a psuedo-one-cell color legends, the explanatory text for outline basepairs: */
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], OCCL_BLANK_COUNT, OCCL_BLANK_COUNT, FALSE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "and a:b is Watson-Crick, GU or UG:", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "", errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], noutline_bp_good, OCCL_BLANK_COUNT, FALSE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], " Watson-Crick, GU or UG but != a:b", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "", errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+
+      ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], noutline_bp_bad, OCCL_BLANK_COUNT, TRUE, FALSE);
+      if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], " non-canonical or w/gap and != a:b", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "", errbuf)) != eslOK) return status;
+      ps->nocclA[pp]++;
+    }
+
+    /* add description to ps */
+    if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "# inserted nucleotides after each consensus position", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_page_desc_to_sspostscript(ps, pp, msa->sqname[i], errbuf)) != eslOK) return status;
+    /* done with seq page */
+
+    /* add one-cell color legend for external gaps (deletes) */
+    ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[extdel_idx_s], nextdel_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+    if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "5'/3'-flush gaps", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    ps->nocclA[pp]++;
+
+    /***************************************
+     * Draw the posterior probability page *
+     ***************************************/
+    if(do_prob) { /* contract checked that msa->pp[i] is non-NULL */
+      pp++;
+
+      ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx_p, hc_nbins_p, limits_p, FALSE, TRUE, TRUE, FALSE);
+      ngap_p = 0;
+      ngap_masked_p = (ps->mask == NULL) ? -1 : 0;
+
+      for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+	apos = ps->msa_rf2a_map[rfpos];
+	if(do_prob_res) { 
+	  ps->rAA[pp][rfpos] = msa->aseq[i][apos];
+	  if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+	}
+	else { 
+	  ps->rAA[pp][rfpos] = ' '; /* no need to add color to a ' ' */
+	}
+	if(! esl_abc_CIsGap(abc, msa->aseq[i][apos])) {
+	  if((ppidx = get_pp_idx(abc, msa->pp[i][apos])) == -1) ESL_FAIL(eslEFORMAT, errbuf, "bad #=GR PP char: %c", msa->pp[i][apos]);
+	  if(ppidx == 11) ESL_FAIL(eslEFORMAT, errbuf, "nongap nucleotide: %c, annotated with gap #=GR PP char: %c", msa->aseq[i][apos], msa->pp[i][apos]);
+	  within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE;
+	  if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx_p], ppavgA[ppidx], ps->sclAA[pp], within_mask, NULL)) != eslOK) return status;
+	}
+	else {
+	  if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[gap_idx_p])) != eslOK) return status;
+	  ngap_p++;
+	  if(ps->mask != NULL && ps->mask[rfpos] == '1') ngap_masked_p++; 
+	}
+      }
+	
+      /* add one-cell color legend */
+      ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[gap_idx_p], ngap_p, ngap_masked_p, FALSE, FALSE);
+      if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "gap", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      ps->nocclA[pp] = 1;
+	
+      if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "posterior probability \\(alignment confidence\\)", ps->legx_max_chars, errbuf)) != eslOK) return status;
+      ps->seqidxA[pp] = i;
+      if((status = add_page_desc_to_sspostscript(ps, pp, msa->sqname[i], errbuf)) != eslOK) return status;
+
+      ps->rAA[pp][ps->rflen] = '\0';
+    }
+  } /* end of for(i = 0; i < msa->nseq; i++) */
+  free(limits_s);
+  free(limits_p);
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "individuals_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* Function: cons_seq_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with 1 new page, the consensus sequence.
+ * Return:   eslOK on success.
+ */
+static int
+cons_seq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps,
+		      float **hc_onecell, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s, int dgbp_idx_s, int hgbp_idx_s)
+{
+  int status;
+  int p, pp;
+  int rfpos, lpos, rpos;
+  int orig_npage = ps->npage;
+  int nwc_s; /* number of watson-crick bps */
+  int ngu_s; /* number of GU/UG bps */
+  int nnc_s; /* number of noncanonical bps */
+  int ndgi_s = 0;     /* number of internal double-gap basepairs */
+  int nhgi_s = 0;     /* number of internal half-gap basepairs */
+  int spos, epos;     /* first/final nongap position for consensus sequence */
+  int lpos_is_internal; /* is lpos within spos..epos?, if not it's an external deletion */
+  int rpos_is_internal; /* is rpos within spos..epos?, if not it's an external deletion */
+  int lpos_is_gap;      /* is lpos a gap */
+  int rpos_is_gap;      /* is rpos a gap */
+
+  nwc_s = ngu_s = nnc_s = ndgi_s = nhgi_s = 0;
+
+  if((status = add_pages_sspostscript(ps, 1, INDIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->rAA[p],   sizeof(char) *  ps->rflen);
+    ESL_ALLOC(ps->tlAAA[p], sizeof(TextLegend_t *) * 1);
+  }
+
+  /* fill ps->rAA with nucleotides and gaps for RF sequence */
+  pp = orig_npage;
+  for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+    ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos];
+  }
+
+  if((! esl_opt_GetBoolean(go, "--cambig")) && (! esl_opt_GetBoolean(go, "--no-bp"))) { 
+    spos = epos = -1;
+    /* determine first and final non-gap position */
+    for(rfpos = 0; rfpos < ps->rflen; rfpos++) { /* find first non-gap RF position */
+      if(! esl_abc_CIsGap(ps->abc, ps->msa_cseq_maj[rfpos])) { 
+	spos = rfpos;
+	break;
+      }
+    }
+    for(rfpos = ps->rflen-1; rfpos >= 0; rfpos--) { 
+      if(! esl_abc_CIsGap(ps->abc, ps->msa_cseq_maj[rfpos])) { 
+	epos = rfpos;
+	break;
+      }
+    }
+
+    ESL_ALLOC(ps->rcolAAA[pp], sizeof(float *) *  ps->rflen);
+    ESL_ALLOC(ps->occlAAA[pp], sizeof(OneCellColorLegend_t *) * 5);
+    for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+      ESL_ALLOC(ps->rcolAAA[pp][rfpos], sizeof(float) * NCMYK); /* CMYK colors */
+      if(ps->msa_ct[(rfpos+1)] == 0) { /* single stranded */
+	/* single-stranded nucleotide or gap, draw same color as Watson-Cricks */
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status;
+      }
+      else { /* basepair, either watson-crick, GU/UG, or non-canonical */
+	lpos = rfpos;
+	rpos = ps->msa_ct[rfpos+1]-1;
+	lpos_is_internal = ((lpos < spos) || (lpos > epos)) ? FALSE : TRUE;
+	rpos_is_internal = ((rpos < spos) || (rpos > epos)) ? FALSE : TRUE;
+	lpos_is_gap      = esl_abc_CIsGap(ps->abc, ps->msa_cseq_maj[lpos]) ? TRUE : FALSE;
+	rpos_is_gap      = esl_abc_CIsGap(ps->abc, ps->msa_cseq_maj[rpos]) ? TRUE : FALSE;
+	if(lpos_is_internal && rpos_is_internal) { /* BP is either Watson-Crick, G:U/U:G, non-canonical, internal double-gap bp or internal half-gap bp */
+	  if(is_watson_crick_bp(ps->msa_cseq_maj[lpos], ps->msa_cseq_maj[rpos])) { /* watson-crick */
+	    if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status;
+	    if(lpos < rpos) nwc_s++;
+	  }
+	  else if(is_gu_or_ug_bp(ps->msa_cseq_maj[lpos], ps->msa_cseq_maj[rpos])) { /* G:U or U:G */
+	    if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[gubp_idx_s])) != eslOK) return status;
+	    if(lpos < rpos) ngu_s++;
+	  }
+	  else if (lpos_is_gap && rpos_is_gap) { /* internal double-gap basepair */
+	    if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[dgbp_idx_s])) != eslOK) return status;
+	    if(lpos < rpos) ndgi_s++;
+	  }
+	  else if (lpos_is_gap || rpos_is_gap) { /* internal double-gap basepair */
+	    if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[hgbp_idx_s])) != eslOK) return status;
+	    if(lpos < rpos) nhgi_s++;
+	  }
+	  else { /* non-canonical */
+	    if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[ncbp_idx_s])) != eslOK) return status;
+	    if(lpos < rpos) nnc_s++;
+	  }
+	} /* end of (if(lpos_is_internal && rpos_is_internal)) */
+	else { 
+	  /* either the left half of the bp is before the first nongap nt, 
+	   * or the right half of the bp is after the final nongap nt, 
+	   * for both cases, draw the nt as black, and don't count it as 
+	   * any type of basepair
+	   */
+	  if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[BLACKOC])) != eslOK) return status;
+	}
+      }
+    }
+
+    /* add one-cell color legend for watson-crick basepairs */
+    ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[wcbp_idx_s], nwc_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+    if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "Watson-Crick basepair (bp)", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "C-G", errbuf)) != eslOK) return status;
+    ps->nocclA[pp]++;
+    
+    /* add one-cell color legend for G-U, U-G basepairs */
+    ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[gubp_idx_s], ngu_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+    if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U or U-G bp", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U", errbuf)) != eslOK) return status;
+    ps->nocclA[pp]++;
+    
+    /* add one-cell color legend for non-canonical basepairs */
+    ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[ncbp_idx_s], nnc_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+    if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "non-canonical bp", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "A-A", errbuf)) != eslOK) return status;
+    ps->nocclA[pp]++;
+
+    /* add one-cell color legend for internal half-gap basepairs */
+    ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[hgbp_idx_s], nhgi_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+    if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "internal half-gap bp", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "A--", errbuf)) != eslOK) return status;
+    ps->nocclA[pp]++;
+    
+    /* add one-cell color legend for internal double-gap basepairs */
+    ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[dgbp_idx_s], ndgi_s, OCCL_BLANK_COUNT, TRUE, FALSE);
+    if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "internal double-gap bp", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "---", errbuf)) != eslOK) return status;
+    ps->nocclA[pp]++;
+  }
+
+  /* add description to ps */
+  if((status = add_page_desc_to_sspostscript(ps, pp, "alignment consensus sequence", errbuf)) != eslOK) return status;
+
+  /* add text legend explaining how consensus nucleotides are determined */
+  ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE);
+  ps->ntlA[pp] = 1;
+
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "cons_seq_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* Function: rf_seq_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with 1 new page, the RF sequence.
+ * Return:   eslOK on success.
+ */
+static int
+rf_seq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, int do_rescol,
+		    float **hc_onecell, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s)
+{
+  int status;
+  int p, pp;
+  int rfpos, apos, lpos, rpos;
+  int orig_npage = ps->npage;
+  int seen_canonical = FALSE;
+  int nwc_s; /* number of watson-crick bps */
+  int ngu_s; /* number of GU/UG bps */
+  int nnc_s; /* number of noncanonical bps */
+
+  nwc_s = ngu_s = nnc_s = 0;
+
+  if((status = add_pages_sspostscript(ps, 1, INDIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->rAA[p], sizeof(char) *  ps->rflen);
+  }
+
+  /* fill ps->rAA with nucleotides and gaps for RF sequence */
+  pp = orig_npage;
+  for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+    apos = ps->msa_rf2a_map[rfpos];
+    if(esl_abc_CIsCanonical(ps->abc, msa->rf[apos])) seen_canonical = TRUE;
+    ps->rAA[pp][rfpos] = msa->rf[apos];
+  }
+  /* if seen_canonical is still FALSE, the reference sequences is probably all 'x's, so we don't color by bp type */
+
+  if(do_rescol && seen_canonical) { /* determine color for the nucleotide, depends if it is single-stranded or basepaired */
+    ESL_ALLOC(ps->rcolAAA[pp], sizeof(float *) *  ps->rflen);
+    ESL_ALLOC(ps->occlAAA[pp], sizeof(OneCellColorLegend_t *) * 3);
+    for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+      ESL_ALLOC(ps->rcolAAA[pp][rfpos], sizeof(float) * NCMYK); /* CMYK colors */
+      apos = ps->msa_rf2a_map[rfpos];
+      if(ps->msa_ct[(rfpos+1)] == 0) { /* single stranded */
+	/* single-stranded nucleotide or gap, draw same color as Watson-Cricks */
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status;
+      }
+      else { /* basepair, either watson-crick, GU/UG, or non-canonical */
+	lpos = apos;
+	rpos = ps->msa_rf2a_map[ps->msa_ct[rfpos+1]-1];
+	if(is_watson_crick_bp(msa->rf[lpos], msa->rf[rpos])) { /* watson-crick */
+	  if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status;
+	  if(lpos < rpos) nwc_s++;
+	}
+	else if(is_gu_or_ug_bp(msa->rf[lpos], msa->rf[rpos])) { /* G:U or U:G */
+	  if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[gubp_idx_s])) != eslOK) return status;
+	  if(lpos < rpos) ngu_s++;
+	}
+	else { /* non-canonical */
+	  if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[ncbp_idx_s])) != eslOK) return status;
+	  if(lpos < rpos) nnc_s++;
+	}
+      }
+    }
+
+    /* add one-cell color legend for watson-crick basepairs */
+    ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[wcbp_idx_s], nwc_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+    if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "Watson-Crick basepair (bp)", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "C-G", errbuf)) != eslOK) return status;
+    ps->nocclA[pp]++;
+    
+    /* add one-cell color legend for G-U, U-G basepairs */
+    ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[gubp_idx_s], ngu_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+    if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U or U-G bp", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U", errbuf)) != eslOK) return status;
+    ps->nocclA[pp]++;
+    
+    /* add one-cell color legend for non-canonical basepairs */
+    ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[ncbp_idx_s], nnc_s, OCCL_BLANK_COUNT, FALSE, FALSE);
+    if((status = add_text_to_onecell_colorlegend    (ps, ps->occlAAA[pp][ps->nocclA[pp]], "non-canonical bp", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "A-A", errbuf)) != eslOK) return status;
+    ps->nocclA[pp]++;
+  }
+
+  /* add description to ps */
+  if((status = add_page_desc_to_sspostscript(ps, pp, "*REFERENCE* (\"#=GC RF\")", errbuf)) != eslOK) return status;
+
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "rf_seq_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+/* count_msa()
+ *                   
+ * Given an msa, count nucleotides, post probs, basepairs, and consensus start and end 
+ * positions and store them in <ret_abc_ct>, <ret_pp_ct>, <ret_bp_ct>, 
+ * <ret_spos_ct>, and <ret_epos_ct>.
+ * 
+ * <ret_abc_ct> [0..apos..alen-1][0..abc->K]:
+ * - per position count of each symbol in alphabet over all seqs.
+ * 
+ * <ret_bp_ct>  [0..apos..alen-1][0..abc->Kp-1][0..abc->Kp-1] 
+ * - per (non-pknotted) consensus basepair count of each possible basepair 
+ *   over all seqs basepairs are indexed by 'i' the minimum of 'i:j' for a 
+ *   pair between i and j, where i < j. Note that non-canonicals and 
+ *   gaps and the like are all stored independently.
+ *
+ * <ret_pp_ct> [0..apos..alen-1][0..10]
+ * - per position count of each posterior probability code over all seqs.
+ * 
+ * <ret_spos_ct> [0..apos..alen-1]
+ * - per position count of first nongap position over all seqs.
+ *                                
+ * <ret_epos_ct> [0..apos..alen-1]
+ * - per position count of final nongap position over all seqs.
+ *
+ * A 'gap' has a looser defintion than in esl_abc here, esl_abc's gap, 
+ * missing nucleotides and nonnucleotides are all considered 'gaps' here.
+ * 
+ * If we encounter an error, we return non-eslOK status and fill
+ * errbuf with error message.
+ * 
+ * Returns eslOK upon success.
+ */
+int count_msa(const ESL_ALPHABET *abc, ESL_MSA *msa, char *errbuf, double ***ret_abc_ct, double ****ret_bp_ct, double ***ret_pp_ct, int **ret_spos_ct, int **ret_epos_ct)
+{
+  int status;
+  double  **abc_ct = NULL;
+  double ***bp_ct = NULL;
+  int      *spos_ct = NULL;
+  int      *epos_ct = NULL;
+  int       apos, i, j, x, epos;
+  ESL_DSQ  *tmp_dsq = NULL;
+  int       seen_start = FALSE;
+  /* variables related to getting bp counts */
+  int      *ct = NULL;            /* 0..alen-1 base pair partners array for current sequence */
+  char     *ss_nopseudo = NULL;   /* no-pseudoknot version of structure */
+  int       nppvals = 12;         /* '0'-'9' = 0-9, '*' = 10, gap = '11' */
+  double  **pp_ct = NULL;         /* [0..alen-1][0..nppvals-1] per position count of each possible PP char over all seqs */
+  int       ppidx; 
+
+  /* contract check, msa should be in text mode and have ss_cons */
+  if(msa->flags & eslMSA_DIGITAL) ESL_FAIL(eslEINVAL, errbuf, "count_msa() contract violation, MSA is digitized");
+  if(msa->ss_cons == NULL) ESL_FAIL(eslEINVAL, errbuf, "the alignment lacks SS_cons annotation");
+
+  /* allocate pp_ct array, if nec */
+  if(ret_pp_ct != NULL && msa->pp != NULL) { 
+    ESL_ALLOC(pp_ct, sizeof(double *) * msa->alen);
+    for(apos = 0; apos < msa->alen; apos++) { 
+      ESL_ALLOC(pp_ct[apos], sizeof(double) * nppvals);
+      esl_vec_DSet(pp_ct[apos], nppvals, 0.);
+    }
+  }
+
+  /* get ct array which defines the consensus base pairs */
+  ESL_ALLOC(ct,  sizeof(int)  * (msa->alen+1));
+  ESL_ALLOC(ss_nopseudo, sizeof(char) * (msa->alen+1));
+  esl_wuss_nopseudo(msa->ss_cons, ss_nopseudo);
+  if ((status = esl_wuss2ct(ss_nopseudo, msa->alen, ct)) != eslOK) ESL_FAIL(status, errbuf, "Consensus structure string is inconsistent.");
+
+  ESL_ALLOC(tmp_dsq, (msa->alen+2) * sizeof(ESL_DSQ));
+  ESL_ALLOC(abc_ct, sizeof(double *) * msa->alen); 
+  ESL_ALLOC(bp_ct,  sizeof(double **) * msa->alen); 
+  for(apos = 0; apos < msa->alen; apos++) { 
+    ESL_ALLOC(abc_ct[apos], sizeof(double) * (abc->K+1));
+    esl_vec_DSet(abc_ct[apos], (abc->K+1), 0.);
+    /* careful ct is indexed 1..alen, not 0..alen-1 */
+    if(ct[(apos+1)] > (apos+1)) { /* apos+1 is an 'i' in an i:j pair, where i < j */
+      ESL_ALLOC(bp_ct[apos], sizeof(double *) * (abc->Kp));
+      for(x = 0; x < abc->Kp; x++) { 
+	ESL_ALLOC(bp_ct[apos][x], sizeof(double) * (abc->Kp));
+	esl_vec_DSet(bp_ct[apos][x], abc->Kp, 0.);
+      }
+    }
+    else { /* apos+1 is not an 'i' in an i:j pair, where i < j, set to NULL */
+      bp_ct[apos] = NULL;
+    }
+  }
+  ESL_ALLOC(spos_ct, sizeof(int) * msa->alen);
+  ESL_ALLOC(epos_ct, sizeof(int) * msa->alen);
+  esl_vec_ISet(spos_ct, msa->alen, 0);
+  esl_vec_ISet(epos_ct, msa->alen, 0);
+
+  for(i = 0; i < msa->nseq; i++) { 
+    seen_start = FALSE;
+    epos       = 0;       // all seqs should have at least one residue, so we only need to initialize epos to make static analyzers happy.
+    if((status = esl_abc_Digitize(abc, msa->aseq[i], tmp_dsq)) != eslOK) ESL_FAIL(status, errbuf, "problem digitizing sequence %d", i);
+    for(apos = 0; apos < msa->alen; apos++) { /* update appropriate abc count, careful, tmp_dsq ranges from 1..msa->alen (not 0..msa->alen-1) */
+      if((status = esl_abc_DCount(abc, abc_ct[apos], tmp_dsq[apos+1], 1.0)) != eslOK) ESL_FAIL(status, errbuf, "problem counting nucleotide %d of seq %d", apos, i);
+      if(! esl_abc_XIsGap(abc, tmp_dsq[apos+1])) { 
+	if(! seen_start) { 
+	  spos_ct[apos]++;
+	  seen_start = TRUE;
+	}
+	epos = apos;     // as noted above: must get called at least once per seq.
+      }
+      /* get bp count, if nec */
+      if(bp_ct[apos] != NULL) { /* our flag for whether position (apos+1) is an 'i' in an i:j pair where i < j */
+	j = ct[apos+1] - 1; /* ct is indexed 1..alen */
+	bp_ct[apos][tmp_dsq[(apos+1)]][tmp_dsq[(j+1)]]++;
+      }
+    }
+    epos_ct[epos]++;
+    /* get PP counts, if nec  */
+    if(ret_pp_ct != NULL) { 
+      if(msa->pp[i] == NULL) ESL_FAIL(eslEINVAL, errbuf, "--prob requires all sequences in the alignment have PP, seq %d does not.", i+1);
+      for(apos = 0; apos < msa->alen; apos++) { /* update appropriate pp count, careful, tmp_dsq ranges from 1..msa->alen (not 0..msa->alen-1) */
+	if((ppidx = get_pp_idx(abc, msa->pp[i][apos])) == -1) ESL_FAIL(eslEFORMAT, errbuf, "bad #=GR PP char: %c", msa->pp[i][apos]);
+	pp_ct[apos][ppidx] += 1.;
+      }
+    }
+  }
+
+  *ret_abc_ct  = abc_ct;
+  *ret_bp_ct   = bp_ct;
+  *ret_spos_ct = spos_ct;
+  *ret_epos_ct = epos_ct;
+  if(ret_pp_ct != NULL) *ret_pp_ct = pp_ct; /* we only allocated pp_ct if ret_pp_ct != NULL */
+
+  if(tmp_dsq != NULL) free(tmp_dsq);
+  if(ss_nopseudo != NULL) free(ss_nopseudo);
+  if(ct != NULL) free(ct);
+  return eslOK;
+
+ ERROR:
+  if(abc_ct != NULL)  esl_Free2D((void **) abc_ct, msa->alen);
+  if(pp_ct != NULL)   esl_Free2D((void **) pp_ct, msa->alen);
+  if(bp_ct  != NULL)  esl_Free3D((void ***) bp_ct, msa->alen, abc->Kp);
+  if(spos_ct != NULL) free(spos_ct);
+  if(epos_ct != NULL) free(epos_ct);
+  if(tmp_dsq != NULL) free(tmp_dsq);
+  ESL_FAIL(status, errbuf, "Error, out of memory while counting important values in the msa.");
+  return status; /* NEVERREACHED */
+}
+
+/* Function: infocontent_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with 1 new page, colored squares indicating
+ *           the information content of each consensus column.
+ *           
+ * Return:   eslOK on success.
+ */
+static int
+infocontent_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_onecell_idx, FILE *tabfp)
+{
+  int status;
+  int p, pp, c;
+  int rfpos, apos;
+  int orig_npage = ps->npage;
+  double  *tmp_obs = NULL;
+  double  *ent   = NULL;
+  double  *bg    = NULL;
+  float   *limits = NULL;
+  int zero_obs;
+  int nonecell = 0;
+  int nonecell_masked = 0;
+  int within_mask;
+  int bi;  /* bin index for current position */
+  int l;
+
+  if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+    ESL_ALLOC(ps->sclAA[p],   sizeof(SchemeColorLegend_t) * 1);
+    ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t *) * 1);
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      ESL_ALLOC(ps->rAA[p],     sizeof(char) *  ps->rflen);
+      ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen);
+      ESL_ALLOC(ps->tlAAA[p],   sizeof(TextLegend_t *) * 1);
+    }
+    for(c = 0; c < ps->rflen; c++) {
+      ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+	ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      }
+    }
+  }
+
+  ESL_ALLOC(ent, sizeof(double) * ps->rflen);
+  ESL_ALLOC(bg, sizeof(double) * abc->K);
+  esl_vec_DSet(bg, abc->K, 1./(abc->K));
+  ESL_ALLOC(tmp_obs, sizeof(double) * abc->K);
+  esl_vec_DSet(tmp_obs, abc->K, 0.);
+
+  pp = orig_npage;
+
+  /* add color legend */
+  ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); 
+  limits[0] = 0.0;
+  limits[1] = 0.4;
+  limits[2] = 0.8;
+  limits[3] = 1.2;
+  limits[4] = 1.6;
+  limits[5] = 1.99;
+  limits[6] = 2.00;
+  ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, TRUE, TRUE, TRUE);
+
+  if(tabfp != NULL) { 
+    fprintf(tabfp, "# ------------------------\n");
+    fprintf(tabfp, "# Information content data\n");
+    fprintf(tabfp, "# ------------------------\n");
+    fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen);
+    fprintf(tabfp, "# in the alignment and corresponding template.\n");
+    fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 5 : 6);
+    fprintf(tabfp, "# \ttoken 1: 'infocontent' (tag defining line type to ease parsing)\n");
+    fprintf(tabfp, "# \ttoken 2: consensus position (starting at 1)\n");
+    fprintf(tabfp, "# \ttoken 3: information content for position (bits)\n");
+    fprintf(tabfp, "# \ttoken 4: number of non-gap nucleotides in position (max possible is %d (num seqs in aln))\n", msa_nseq); 
+    fprintf(tabfp, "# \ttoken 5: bin index this positions falls in (see bin values below)\n");
+    if(ps->mask != NULL) { 
+      fprintf(tabfp, "# \ttoken 6: '1' if position is included by mask, '0' if not\n");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Information content is calculated as 2.0 - H, where\n");
+    fprintf(tabfp, "# H = - \\sum_x p_x \\log_2 p_x, for x in {A, C, G, U}\n");
+    fprintf(tabfp, "# p_x is the frequency of x for *non-gap* nucleotides at the position.\n");
+    fprintf(tabfp, "# For example, p_A in a column that includes 4 As, 3 Cs, 2 Gs, 1 U and 5 gaps\n");
+    fprintf(tabfp, "# would be 4/10 = 0.4.\n");
+    fprintf(tabfp, "# Maximum possible value for token 3 is %d, the number of sequences in the file.\n", msa_nseq); 
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Value ranges for bins:\n");
+    fprintf(tabfp, "# \tbin  0: special case, 0 non-gap nucleotides in this position\n");
+    for(l = 0; l < hc_nbins; l++) { 
+      fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s information per position (bits)\n", l+1, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# %11s  %6s  %8s  %10s  %3s", "type", "cpos", "info", "nongap", "bin");
+    if(ps->mask != NULL) fprintf(tabfp, "  %4s", "mask");
+    fprintf(tabfp, "\n");
+    fprintf(tabfp, "# %11s  %6s  %8s  %10s  %3s", "-----------", "------", "--------", "----------", "---");
+    if(ps->mask != NULL) fprintf(tabfp, "  %4s", "----");
+    fprintf(tabfp, "\n");
+  }
+  
+  if(ps->mask == NULL) nonecell_masked = -1; /* special flag */
+  for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+    apos = ps->msa_rf2a_map[rfpos];
+    esl_vec_DCopy(abc_ct[apos], abc->K, tmp_obs); /* only copy first abc->K values, don't copy gaps */
+    zero_obs = (esl_DCompare(esl_vec_DSum(tmp_obs, abc->K), 0., eslSMALLX1) == eslOK) ? TRUE : FALSE;
+    esl_vec_DNorm(tmp_obs, abc->K);
+    ent[rfpos] = esl_vec_DEntropy(bg, abc->K) - esl_vec_DEntropy(tmp_obs, abc->K);
+
+    if(zero_obs) { 
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_onecell_idx])) != eslOK) return status;
+      nonecell++;
+      if(ps->mask != NULL && ps->mask[rfpos] == '1') nonecell_masked++; 
+      bi = -1;
+    }
+    else { 
+      within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE;
+      if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], ent[rfpos], ps->sclAA[pp], within_mask, &bi)) != eslOK) return status;
+    }
+
+    /* fill in info for the consensus nucleotide */
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      if(ps->mask == NULL || ps->mask[rfpos] == '1') { 
+	ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos];
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+      else { /* position is a '0' in the mask, leave it blank (' ') */
+	ps->rAA[pp][rfpos] = ' '; 
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+    }
+      
+    if(tabfp != NULL) { 
+      fprintf(tabfp, "  infocontent  %6d  %8.5f  %10d  %3d", rfpos+1, ent[rfpos], (int) esl_vec_DSum(abc_ct[apos], abc->K), bi+1);
+      if(ps->mask != NULL) fprintf(tabfp, "  %4d", ps->mask[rfpos] == '1' ? 1 : 0);
+      fprintf(tabfp, "\n");
+    }
+  }
+
+  /* add one-cell color legend */
+  ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[hc_onecell_idx], nonecell, nonecell_masked, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "100% gaps", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  ps->nocclA[pp] = 1;
+
+  /* add text to legend */
+  /*sprintf(text, "information content (bits) (total: %.2f bits)", esl_vec_DSum(ent, ps->rflen));*/
+  if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "information content (bits)", ps->legx_max_chars, errbuf)) != eslOK) return status;
+
+  /* add the consensus nucleotide explanation text section to the legend */
+  if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+    ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE);
+    ps->ntlA[pp] = 1;
+  }
+
+  /* add description to ps */
+  if((status = add_page_desc_to_sspostscript(ps, pp, "information content per position", errbuf)) != eslOK) return status;
+
+  free(ent);
+  free(tmp_obs);
+  free(bg);
+  free(limits);
+
+  if(tabfp != NULL) fprintf(tabfp, "//\n");
+  return eslOK;
+  
+ ERROR: ESL_FAIL(status, errbuf, "infocontent_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+/* Function: delete_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with a new page w/colored squares indicating
+ *           the number of sequences with gaps (deletions) at each consensus column. 
+ *           If do_all is TRUE the page shows all deletions. If false only 'internal' deletions,
+ *           those that come after the first occupied consensus column of each sequence and
+ *           before the final occupied consensus column for each sequence, are shown.
+ *           
+ * Return:   eslOK on success.
+ */
+static int
+delete_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, int *span_ct, int msa_nseq, int do_all, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zerodel_idx, int hc_fewdel_idx, FILE *tabfp)
+{
+  int status;
+  int p, pp, c, l, bi;
+  int rfpos, apos;
+  int orig_npage = ps->npage;
+  double dfreq;
+  int nzerodel = 0;
+  int nzerodel_masked = 0;
+  int nfewdel = 0;
+  int nfewdel_masked = 0;
+  int within_mask;
+  float *limits = NULL;
+  float fewdel_thresh;
+  float n_ext_del; /* msa_nseq - span_ct[rfpos], number of external deletions */
+  if(ps->mask == NULL) { 
+    nzerodel_masked = -1; /* special flag */
+    nfewdel_masked = -1;  /* special flag */
+  }
+
+  if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+    ESL_ALLOC(ps->sclAA[p],    sizeof(SchemeColorLegend_t) * 1);
+    ESL_ALLOC(ps->occlAAA[p],  sizeof(OneCellColorLegend_t *) * 2);
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      ESL_ALLOC(ps->rAA[p],     sizeof(char) *  ps->rflen);
+      ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen);
+      ESL_ALLOC(ps->tlAAA[p],   sizeof(TextLegend_t *) * 1);
+    }
+    for(c = 0; c < ps->rflen; c++) { 
+      ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+	ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      }
+    }
+  }
+
+  pp = orig_npage;
+
+  /* add color legend */
+  ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); 
+  fewdel_thresh = 0.001; /* positions with delete freq < this value will be painted specially (dark grey) */
+  limits[0] = fewdel_thresh;
+  limits[1] = 0.05;
+  limits[2] = 0.20;
+  limits[3] = 0.35;
+  limits[4] = 0.50;
+  limits[5] = 0.75;
+  limits[6] = 1.00;
+  ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, FALSE, TRUE, TRUE);
+
+  if(tabfp != NULL) { 
+    if(do_all) { 
+      fprintf(tabfp, "# -----------\n");
+      fprintf(tabfp, "# Delete data\n");
+      fprintf(tabfp, "# -----------\n");
+      fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen);
+      fprintf(tabfp, "# in the alignment and corresponding template.\n");
+      fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 4 : 5);
+      fprintf(tabfp, "# \ttoken 1: 'deleteall' (tag defining line type to ease parsing)\n");
+      fprintf(tabfp, "# \ttoken 2: consensus position (starting at 1)\n");
+      fprintf(tabfp, "# \ttoken 3: frequency of deletions (gaps) for position\n");
+      fprintf(tabfp, "# \ttoken 4: bin index this positions falls in (see bin values below)\n");
+      if(ps->mask != NULL) { 
+	fprintf(tabfp, "# \ttoken 5: '1' if position is included by mask, '0' if not\n");
+      }
+      fprintf(tabfp, "#\n");
+      fprintf(tabfp, "# A sequence s has a 'delete' at consensus position x if position\n");
+      fprintf(tabfp, "# x is a gap for aligned sequence s.\n");
+      fprintf(tabfp, "# Total number of sequences in the alignment is %d\n", msa_nseq);
+      fprintf(tabfp, "#\n");
+      fprintf(tabfp, "# Value ranges for bins:\n");
+      fprintf(tabfp, "# \tbin  0: special case, 0 sequences have a delete at position\n");
+      fprintf(tabfp, "# \tbin  1: special case, < %.5f fraction of sequences have internal deletes at position\n", fewdel_thresh);
+      for(l = 0; l < hc_nbins; l++) { 
+	fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s frequency of deletes per position\n", l+2, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")");
+      }
+      fprintf(tabfp, "#\n");
+      fprintf(tabfp, "# %9s  %6s  %8s  %3s", "type", "cpos", "dfreq", "bin");
+      if(ps->mask != NULL) fprintf(tabfp, "  %4s", "mask");
+      fprintf(tabfp, "\n");
+      fprintf(tabfp, "# %9s  %6s  %8s  %3s", "---------", "------", "--------", "---");
+      if(ps->mask != NULL) fprintf(tabfp, "  %4s", "----");
+      fprintf(tabfp, "\n");
+    }
+    else { /* ! do_all (internal deletes only) */
+      fprintf(tabfp, "# --------------------\n");
+      fprintf(tabfp, "# Internal delete data\n");
+      fprintf(tabfp, "# --------------------\n");
+      fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen);
+      fprintf(tabfp, "# in the alignment and corresponding template.\n");
+      fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 5 : 6);
+      fprintf(tabfp, "# \ttoken 1: 'deleteint' (tag defining line type to ease parsing)\n");
+      fprintf(tabfp, "# \ttoken 2: consensus position (starting at 1)\n");
+      fprintf(tabfp, "# \ttoken 3: frequency of internal deletions (gaps) for position\n");
+      fprintf(tabfp, "# \ttoken 4: number of sequences that span (begin at or prior to and end at or after) position (max is %d)\n", msa_nseq);
+      fprintf(tabfp, "# \ttoken 5: bin index this positions falls in (see bin values below)\n");
+      if(ps->mask != NULL) fprintf(tabfp, "# \ttoken 6: '1' if position is included by mask, '0' if not\n");
+      fprintf(tabfp, "#\n");
+      fprintf(tabfp, "# A sequence s has an 'internal delete' at consensus position 'x' that is actual alignment position 'a' if\n");
+      fprintf(tabfp, "# x is a gap for aligned sequence s, and s has at least one non-gap nucleotide aligned to a position 'b' <= 'a'\n");
+      fprintf(tabfp, "# and at least one non-gap nucleotide aligned to a position 'c' >= 'a'\n");
+      fprintf(tabfp, "#\n");
+      fprintf(tabfp, "# Value ranges for bins:\n");
+      fprintf(tabfp, "# \tbin  0: special case, 0 sequences have an internal delete at position\n");
+      fprintf(tabfp, "# \tbin  1: special case, < %.5f fraction of sequences have internal deletes at position\n", fewdel_thresh);
+      for(l = 0; l < hc_nbins; l++) { 
+	fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s frequency of internal deletes per position\n", l+2, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")");
+      }
+      fprintf(tabfp, "#\n");
+      fprintf(tabfp, "# %9s  %6s  %8s  %10s  %3s", "type", "cpos", "dfreq", "nspan", "bin");
+      if(ps->mask != NULL) fprintf(tabfp, "  %4s", "mask");
+      fprintf(tabfp, "\n");
+      fprintf(tabfp, "# %9s  %6s  %8s  %10s  %3s", "---------", "------", "--------", "----------", "---");
+      if(ps->mask != NULL) fprintf(tabfp, "  %4s", "----");
+      fprintf(tabfp, "\n");
+    }
+  }
+
+  /* draw delete page */
+  for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+    apos = ps->msa_rf2a_map[rfpos];
+    n_ext_del = do_all ? -1. : (float) (msa_nseq - span_ct[rfpos]); /* num external deletes is num seqs minus number of seqs that 'span' apos, see function header comments for explanation */
+    if((( do_all) && ( abc_ct[apos][abc->K] < eslSMALLX1)) ||               /* abc_ct[apos][abc->K] == 0 */
+       ((!do_all) && ((abc_ct[apos][abc->K] - n_ext_del) < eslSMALLX1))) {  /* abc_ct[apos][abc->K] == n_ext_del (all deletes are external) */
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_zerodel_idx])) != eslOK) return status; 
+      nzerodel++;
+      if(ps->mask != NULL && ps->mask[rfpos] == '1') nzerodel_masked++; 
+      bi = -2; /* special case */
+      dfreq = 0.;
+    }
+    else {
+      within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE;
+      dfreq = do_all ? 
+	( abc_ct[apos][abc->K]              / (float) msa_nseq) : 
+	((abc_ct[apos][abc->K] - n_ext_del) / (float) msa_nseq);
+      /* printf("do_all: %d rfpos: %d dfreq: %.2f\n", do_all, rfpos, dfreq); */
+      if (dfreq < fewdel_thresh) { 
+	if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_fewdel_idx])) != eslOK) return status;
+	nfewdel++;
+	if(ps->mask != NULL && ps->mask[rfpos] == '1') nfewdel_masked++; 
+	bi = -1; /* special case */
+      }
+      else { 
+	if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], dfreq, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status;
+      }
+    }
+    /* fill in info for the consensus nucleotide */
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      if(ps->mask == NULL || ps->mask[rfpos] == '1') { 
+	ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos];
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+      else { /* position is a '0' in the mask, leave it blank (' ') */
+	ps->rAA[pp][rfpos] = ' '; 
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+    }
+
+    if(tabfp != NULL) { 
+      if(do_all) fprintf(tabfp, "  deleteall  %6d  %8.5f  %3d",       rfpos+1, dfreq, bi+2);
+      else       fprintf(tabfp, "  deleteint  %6d  %8.5f  %10d  %3d", rfpos+1, dfreq, span_ct[rfpos], bi+2);
+      if(ps->mask != NULL) fprintf(tabfp, "  %4d", ps->mask[rfpos] == '1' ? 1 : 0); 
+      fprintf(tabfp, "\n");
+    }
+  }
+    
+  /* add one-cell color legend */
+  ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[hc_zerodel_idx], nzerodel, nzerodel_masked, FALSE, FALSE);
+  ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[hc_fewdel_idx],  nfewdel,  nfewdel_masked,  FALSE, FALSE);
+  ps->nocclA[pp] = 2;
+
+  if(do_all) { 
+    if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "zero deletions", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "< 0.001 seqs have delete", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  }
+  else {
+    if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "zero internal deletions", ps->legx_max_chars, errbuf)) != eslOK) return status; 
+    if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "< 0.001 seqs have delete", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  }
+
+  /* add color legend and description */
+  if(do_all) { 
+    /*sprintf(text, "fraction seqs w/deletes ('-'=0 deletes; avg/seq: %.2f)", (float) esl_vec_ISum(dct, ps->rflen) / (float) msa_nseq);*/
+    if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "fraction of seqs with deletes", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, "frequency of deletions at each position", errbuf)) != eslOK) return status;
+  }
+  else { /* !do_all, only internal deletes counted */
+    /*sprintf(text, "fraction seqs w/internal deletes ('-'=0; avg/seq: %.2f)", (float) esl_vec_ISum(dct_internal, ps->rflen) / (float) msa_nseq);*/
+    if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "fraction of seqs w/internal deletions", ps->legx_max_chars, errbuf)) != eslOK) return status;
+    if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, "frequency of internal deletions in each position", errbuf)) != eslOK) return status;
+  }
+  
+  /* add the consensus nucleotide explanation text section to the legend */
+  if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+    ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE);
+    ps->ntlA[pp] = 1;
+  }
+
+  free(limits);
+  
+  if(tabfp != NULL) fprintf(tabfp, "//\n");
+  return eslOK;
+  
+ ERROR: ESL_FAIL(status, errbuf, "delete_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+/* Function: insertfreq_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with 1 new page, with colors 
+ *           indicating the fraction of seqs with inserts after each
+ *           position. 
+ *           
+ * Return:   eslOK on success.
+ */
+static int
+insertfreq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *nseq_with_ins_ct, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zeroins_idx, int hc_fewins_idx, FILE *tabfp)
+{
+  int status;
+  int p, pp, c, l;
+  int rfpos;
+  int orig_npage = ps->npage;
+  //int apos;
+  int nzeroins = 0;
+  int nzeroins_masked = 0;
+  int nfewins = 0;
+  int nfewins_masked = 0;
+  float *limits;
+  int within_mask;
+  float ifreq;
+  int bi;
+  float fewins_thresh;
+
+  if(ps->mask == NULL) { 
+    nzeroins_masked = -1; /* special flag */
+    nfewins_masked = -1;  /* special flag */
+  }
+
+  if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+    ESL_ALLOC(ps->sclAA[p],   sizeof(SchemeColorLegend_t) * 1);
+    ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t *) * 2);
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      ESL_ALLOC(ps->rAA[p],     sizeof(char) *  ps->rflen);
+      ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen);
+      ESL_ALLOC(ps->tlAAA[p],   sizeof(TextLegend_t *) * 1);
+    }
+    for(c = 0; c < ps->rflen; c++) { 
+      ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+	ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      }
+    }
+  }
+  pp = orig_npage;
+
+  /* add color legend */
+  ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); 
+  fewins_thresh = 0.001;
+  limits[0] = fewins_thresh;
+  limits[1] = 0.01;
+  limits[2] = 0.05;
+  limits[3] = 0.10;
+  limits[4] = 0.20;
+  limits[5] = 0.50;
+  limits[6] = 1.00;
+  ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, FALSE, TRUE, TRUE);
+
+  if(tabfp != NULL) { 
+    fprintf(tabfp, "# ---------------------\n");
+    fprintf(tabfp, "# Insert frequency data\n");
+    fprintf(tabfp, "# ---------------------\n");
+    fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each possible insert position\n", ps->rflen+1);
+    fprintf(tabfp, "# after each of the %d consensus positions and one more for inserts prior to the first consensus position.\n", ps->rflen);
+    fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 5 : 6);
+    fprintf(tabfp, "# \ttoken 1: 'insertfreq' (tag defining line type to ease parsing)\n");
+    fprintf(tabfp, "# \ttoken 2: consensus position <cpos> after which inserts occur ('0' == before posn 1)\n");
+    fprintf(tabfp, "# \ttoken 3: fraction of sequences that span <cpos> (see defn of span below) with >= 1 inserted nucleotides after position\n");
+    fprintf(tabfp, "# \ttoken 4: number of sequences that span (begin at or prior to and end at or after) position (max is %d)\n", msa_nseq);
+    fprintf(tabfp, "# \ttoken 5: bin index this positions falls in (see bin values below)\n");
+    if(ps->mask != NULL) { 
+      fprintf(tabfp, "# \ttoken 6: '1' if position is included by mask, '0' if not\n");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Total number of sequences in the alignment is %d\n", msa_nseq);
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# A sequence s spans consensus position 'x' that is actual alignment position 'a' if s has\n");
+    fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'b' <= 'a' and\n");
+    fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'c' >= 'a'\n");
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Value ranges for bins:\n");
+    fprintf(tabfp, "# \tbin -1: special case, reserved for inserts before position 1,\n");
+    fprintf(tabfp, "# \t        these are NOT SHOWN in the postscript diagram (!)\n");
+    fprintf(tabfp, "# \tbin  0: special case, 0 sequences have inserts after this position\n");
+    fprintf(tabfp, "# \tbin  1: special case, < %.5f fraction of sequences have inserts after this position\n", fewins_thresh);
+    for(l = 0; l < hc_nbins; l++) { 
+      fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s fraction of sequences with >= 1 inserts after each position\n", l+2, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# %10s  %6s  %8s  %10s  %3s", "type", "cpos", "ifreq", "nspan", "bin");
+    if(ps->mask != NULL) fprintf(tabfp, "  %4s", "mask");
+    fprintf(tabfp, "\n");
+    fprintf(tabfp, "# %10s  %6s  %8s  %10s  %3s", "----------", "------", "--------", "----------", "---");
+    if(ps->mask != NULL) fprintf(tabfp, "  %4s", "----");
+    fprintf(tabfp, "\n");
+  }
+
+  /* print info on inserts before rfpos 1 to tabfile, if nec */
+  if(tabfp != NULL) { 
+    //apos = ps->msa_rf2a_map[0];
+    if(nseq_with_ins_ct[0] > span_ct[0]) ESL_FAIL(eslERANGE, errbuf, "drawing insert page, rfpos: 0 nseq_with_ins_ct (%d) exceeds span_ct (%d)", nseq_with_ins_ct[0], span_ct[0]);
+    ifreq = (float) nseq_with_ins_ct[0] / (float) span_ct[0];
+    fprintf(tabfp, "  insertfreq  %6d  %8.5f  %10d  %3d", 0, ifreq, span_ct[0], -1);
+    if(ps->mask != NULL) fprintf(tabfp, "  %4d", 0);
+    fprintf(tabfp, "\n");
+  }
+
+  for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+    //apos = ps->msa_rf2a_map[rfpos]; 
+    if(nseq_with_ins_ct[rfpos+1] > span_ct[rfpos]) ESL_FAIL(eslERANGE, errbuf, "drawing insert page, rfpos: %d nseq_with_ins_ct (%d) exceeds span_ct (%d)", rfpos, nseq_with_ins_ct[rfpos+1], span_ct[rfpos]);
+    ifreq = (float) nseq_with_ins_ct[rfpos+1] / (float) span_ct[rfpos]; /* note we don't need to add one to span_ct, it is [0..rflen-1] */
+    if(nseq_with_ins_ct[(rfpos+1)] == 0) {  /* careful, nseq_with_ins_ct goes from 1..rflen, its off-by-one with other arrays */
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_zeroins_idx])) != eslOK) return status;
+      nzeroins++;
+      if(ps->mask != NULL && ps->mask[rfpos] == '1') nzeroins_masked++; 
+      bi = -2; /* special case */
+    }
+    else if (ifreq < fewins_thresh) { 
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_fewins_idx])) != eslOK) return status;
+      nfewins++;
+      if(ps->mask != NULL && ps->mask[rfpos] == '1') nfewins_masked++; 
+      bi = -1; /* special case */
+    }
+    else {
+      within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE;
+      if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], ifreq, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status;
+    }
+    /* printf("rfpos: %5d ifreq: %.3f\n", rfpos, ifreq); */
+
+    /* fill in info for the consensus nucleotide */
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      if(ps->mask == NULL || ps->mask[rfpos] == '1') { 
+	ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos];
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+      else { /* position is a '0' in the mask, leave it blank (' ') */
+	ps->rAA[pp][rfpos] = ' '; 
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+    }
+
+    if(tabfp != NULL) { 
+      fprintf(tabfp, "  insertfreq  %6d  %8.5f  %10d  %3d", rfpos+1, ifreq, span_ct[rfpos], bi+1);
+      if(ps->mask != NULL) fprintf(tabfp, "  %4d", ps->mask[rfpos] == '1' ? 1 : 0);
+      fprintf(tabfp, "\n");
+    }
+  }
+
+  /* add one-cell color legend */
+  ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[hc_zeroins_idx], nzeroins, nzeroins_masked, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "zero insertions", ps->legx_max_chars, errbuf)) != eslOK) return status;
+
+  ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[hc_fewins_idx], nfewins, nfewins_masked, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "< 0.001 seqs have insert", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  ps->nocclA[pp] = 2;
+
+  /* add color legend */
+  if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "fraction of seqs w/insertions", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, "frequency of insertions after each position", errbuf)) != eslOK) return status;
+
+  /* add the consensus nucleotide explanation text section to the legend */
+  if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+    ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE);
+    ps->ntlA[pp] = 1;
+  }
+
+  free(limits);
+
+  if(tabfp != NULL) fprintf(tabfp, "//\n");
+  return eslOK;
+  
+ ERROR: ESL_FAIL(status, errbuf, "insertfreq_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* Function: insertavglen_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with 1 new page, with colors 
+ *           indicating the average length of inserts after each
+ *           position. 
+ *           
+ * Return:   eslOK on success.
+ */
+static int
+insertavglen_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *nseq_with_ins_ct, int *nins_ct, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zeroins_idx, FILE *tabfp)
+{
+  int status;
+  int p, pp, c, l;
+  int rfpos;
+  int orig_npage = ps->npage;
+  //int apos;
+  int nzeroins = 0;
+  int nzeroins_masked = 0;
+  float *limits;
+  int within_mask;
+  float ifreq;
+  float iavglen;
+  int bi;
+
+  if(ps->mask == NULL) nzeroins_masked = -1; /* special flag */
+
+  if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+    ESL_ALLOC(ps->sclAA[p],   sizeof(SchemeColorLegend_t) * 1);
+    ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t *) * 1);
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      ESL_ALLOC(ps->rAA[p],     sizeof(char) *  ps->rflen);
+      ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen);
+      ESL_ALLOC(ps->tlAAA[p],   sizeof(TextLegend_t *) * 1);
+    }
+    for(c = 0; c < ps->rflen; c++) { 
+      ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+	ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      }
+    }
+  }
+  pp = orig_npage;
+
+  /* add color legend */
+  ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); 
+  limits[0] = 1.00;
+  limits[1] = 1.01;
+  limits[2] = 1.50;
+  limits[3] = 3.00;
+  limits[4] = 4.00;
+  limits[5] = 10.00;
+  limits[6] = SSDRAWINFINITY;
+  ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, TRUE, FALSE, TRUE);
+
+  if(tabfp != NULL) { 
+    fprintf(tabfp, "# --------------------------\n");
+    fprintf(tabfp, "# Average insert length data\n");
+    fprintf(tabfp, "# --------------------------\n");
+    fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each possible insert position\n", ps->rflen+1);
+    fprintf(tabfp, "# after each of the %d consensus positions and one more for inserts prior to the first consensus position.\n", ps->rflen);
+    fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 5 : 6);
+    fprintf(tabfp, "# \ttoken 1: 'insertlen' (tag defining line type to ease parsing)\n");
+    fprintf(tabfp, "# \ttoken 2: consensus position <cpos> after which inserts occur ('0' == before posn 1)\n");
+    fprintf(tabfp, "# \ttoken 3: average number of inserted nucleotides after each position for those seqs with >=1 inserted nucleotides)\n");
+    fprintf(tabfp, "# \ttoken 4: fraction of sequences that span <cpos> (see defn of span below) with >= 1 inserted nucleotides after position\n");
+    fprintf(tabfp, "# \ttoken 5: number of sequences that span (begin at or prior to and end at or after) position (max is %d)\n", msa_nseq);
+    fprintf(tabfp, "# \ttoken 6: bin index this positions falls in (see bin values below)\n");
+    if(ps->mask != NULL) { 
+      fprintf(tabfp, "# \ttoken 7: '1' if position is included by mask, '0' if not\n");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Total number of sequences in the alignment is %d\n", msa_nseq);
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# A sequence s spans consensus position 'x' that is actual alignment position 'a' if s has\n");
+    fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'b' <= 'a' and\n");
+    fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'c' >= 'a'\n");
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Value ranges for bins:\n");
+    fprintf(tabfp, "# \tbin -1: special case, reserved for inserts before position 1,\n");
+    fprintf(tabfp, "# \t        these are NOT SHOWN in the postscript diagram (!)\n");
+    fprintf(tabfp, "# \tbin  0: special case, 0 sequences have inserts after this position\n");
+    for(l = 0; l < hc_nbins; l++) { 
+      fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s average insert length after each position\n", l+1, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# %12s  %6s  %8s  %8s  %10s  %3s", "type", "cpos", "iavglen", "ifreq", "nspan", "bin");
+    if(ps->mask != NULL) fprintf(tabfp, "  %4s", "mask");
+    fprintf(tabfp, "\n");
+    fprintf(tabfp, "# %12s  %6s  %8s  %8s  %10s  %3s", "------------", "------", "--------", "--------", "----------", "---");
+    if(ps->mask != NULL) fprintf(tabfp, "  %4s", "----");
+    fprintf(tabfp, "\n");
+  }
+
+  /* print info on inserts before rfpos 1 to tabfile, if nec */
+  if(tabfp != NULL) { 
+    //apos = ps->msa_rf2a_map[0];
+    if(nseq_with_ins_ct[0] > span_ct[0]) ESL_FAIL(eslERANGE, errbuf, "drawing insert page, rfpos: 0 nseq_with_ins_ct (%d) exceeds span_ct (%d)", nseq_with_ins_ct[0], span_ct[0]);
+    ifreq   = (span_ct[0] == 0)          ? 0. : (float) nseq_with_ins_ct[0] / (float) span_ct[0];
+    iavglen = (nseq_with_ins_ct[0] == 0) ? 0. : (float) nins_ct[0] / (float) nseq_with_ins_ct[0];
+    fprintf(tabfp, "  insertavglen  %6d  %8.4f  %8.5f  %10d  %3d", 0, iavglen, ifreq, span_ct[0], -1);
+    if(ps->mask != NULL) fprintf(tabfp, "  %4d", 0);
+    fprintf(tabfp, "\n");
+  }
+
+  for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+    //apos = ps->msa_rf2a_map[rfpos]; 
+    if(nseq_with_ins_ct[rfpos+1] > span_ct[rfpos]) ESL_FAIL(eslERANGE, errbuf, "drawing insert page, rfpos: %d nseq_with_ins_ct (%d) exceeds span_ct (%d)", rfpos, nseq_with_ins_ct[rfpos+1], span_ct[rfpos]);
+    ifreq   = (span_ct[rfpos] == 0)            ? 0. : (float) nseq_with_ins_ct[rfpos+1] / (float) span_ct[rfpos];
+    iavglen = (nseq_with_ins_ct[rfpos+1] == 0) ? 0. : (float) nins_ct[rfpos+1] / (float) nseq_with_ins_ct[rfpos+1];
+    /* printf("rfpos: %5d ifreq: %.3f iavglen: %.3f nins: %10d  nseq: %10d\n", rfpos, ifreq, iavglen, nins_ct[rfpos+1], nseq_with_ins_ct[rfpos+1]);  */
+    if(nseq_with_ins_ct[(rfpos+1)] == 0) {  /* careful, nseq_with_ins_ct goes from 1..rflen, its off-by-one with other arrays */
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_zeroins_idx])) != eslOK) return status;
+      nzeroins++;
+      if(ps->mask != NULL && ps->mask[rfpos] == '1') nzeroins_masked++; 
+      bi = -1; /* special case */
+    }
+    else {
+      within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE;
+      if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], iavglen, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status;
+    }
+
+    /* fill in info for the consensus nucleotide */
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      if(ps->mask == NULL || ps->mask[rfpos] == '1') { 
+	ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos];
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+      else { /* position is a '0' in the mask, leave it blank (' ') */
+	ps->rAA[pp][rfpos] = ' '; 
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+    }
+
+    if(tabfp != NULL) { 
+      fprintf(tabfp, "  insertavglen  %6d  %8.4f  %8.5f  %10d  %3d", rfpos+1, iavglen, ifreq, span_ct[rfpos], bi+1);
+      if(ps->mask != NULL) fprintf(tabfp, "  %4d", ps->mask[rfpos] == '1' ? 1 : 0);
+      fprintf(tabfp, "\n");
+    }
+  }
+
+  /* add one-cell color legend */
+  ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[hc_zeroins_idx], nzeroins, nzeroins_masked, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "zero insertions", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  ps->nocclA[pp] = 1;
+
+  /* add color legend */
+  if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "average insertion length", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, "average insertion length after each position", errbuf)) != eslOK) return status;
+
+  /* add the consensus nucleotide explanation text section to the legend */
+  if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+    ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE);
+    ps->ntlA[pp] = 1;
+  }
+
+  free(limits);
+
+  if(tabfp != NULL) fprintf(tabfp, "//\n");
+  return eslOK;
+  
+ ERROR: ESL_FAIL(status, errbuf, "insertavglen_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* Function: span_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with 1 new page, with colors 
+ *           indicating the fraction of seqs that 'span' each consensus 
+ *           position. A consensus position cpos is spanned by a sequence x if
+ *           if at least 1 nucleotide in x is aligned to a consensus position <= cpos
+ *           *and*  at least 1 nucleotide in x is aligned to a consensus position >= cpos.
+ *           
+ * Return:   eslOK on success.
+ */
+static int
+span_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int zerocov_idx, int maxcov_idx, FILE *tabfp)
+{
+  int status;
+  int p, pp, c, l;
+  int rfpos;
+  int orig_npage = ps->npage;
+  int nzerocov = 0;
+  int nzerocov_masked = 0;
+  int nmaxcov = 0;
+  int nmaxcov_masked = 0;
+  float *limits;
+  int within_mask;
+  float cfract;
+  int bi;
+
+  if(ps->mask == NULL) nzerocov_masked = nmaxcov_masked = -1; /* special flag */
+
+  if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+    ESL_ALLOC(ps->sclAA[p],   sizeof(SchemeColorLegend_t) * 1);
+    ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t *) * 2);
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      ESL_ALLOC(ps->rAA[p],     sizeof(char) *  ps->rflen);
+      ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen);
+      ESL_ALLOC(ps->tlAAA[p],   sizeof(TextLegend_t *) * 1);
+    }
+    for(c = 0; c < ps->rflen; c++) { 
+      ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+	ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      }
+    }
+  }
+
+  pp = orig_npage;
+
+  /* add color legend */
+  ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); 
+  limits[0] = 0.0;
+  limits[1] = 0.167;
+  limits[2] = 0.333;
+  limits[3] = 0.500;
+  limits[4] = 0.667;
+  limits[5] = 0.833;
+  limits[6] = 1.00;
+  ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, FALSE, FALSE, TRUE);
+
+  if(tabfp != NULL) { 
+    fprintf(tabfp, "# ---------\n");
+    fprintf(tabfp, "# Span data\n");
+    fprintf(tabfp, "# ---------\n");
+    fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen);
+    fprintf(tabfp, "# in the alignment and corresponding template.\n");
+    fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 4 : 5);
+    fprintf(tabfp, "# \ttoken 1: 'span' (tag defining line type to ease parsing)\n");
+    fprintf(tabfp, "# \ttoken 2: consensus position (starting at 1)\n");
+    fprintf(tabfp, "# \ttoken 3: fraction of sequences that 'span' position\n");
+    fprintf(tabfp, "# \ttoken 4: bin index this positions falls in (see bin values below)\n");
+    if(ps->mask != NULL) { 
+      fprintf(tabfp, "# \ttoken 5: '1' if position is included by mask, '0' if not\n");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# A sequence s spans consensus position 'x' that is actual alignment position 'a' if s has\n");
+    fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'b' <= 'a' and\n");
+    fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'c' >= 'a'\n");
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Value ranges for bins:\n");
+    fprintf(tabfp, "# \tbin  0: special case, 0 sequences span this position\n");
+    fprintf(tabfp, "# \tbin  1: special case, all %d sequences span this position\n", msa_nseq);
+    for(l = 0; l < hc_nbins; l++) { 
+      fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s fraction of sequences that span each position\n", l+2, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# %4s  %6s  %8s  %3s", "type", "cpos", "span", "bin");
+    if(ps->mask != NULL) fprintf(tabfp, "  %4s", "mask");
+    fprintf(tabfp, "\n");
+    fprintf(tabfp, "# %4s  %6s  %8s  %3s", "----", "------", "--------", "---");
+    if(ps->mask != NULL) fprintf(tabfp, "  %4s", "----");
+    fprintf(tabfp, "\n");
+  }
+
+  for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+    if(span_ct[rfpos] == 0) {  
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[zerocov_idx])) != eslOK) return status;
+      nzerocov++;
+      if(ps->mask != NULL && ps->mask[rfpos] == '1') nzerocov_masked++;
+      cfract = 0.;
+      bi = -2;
+    }
+    else if(span_ct[rfpos] == msa_nseq) {  
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[maxcov_idx])) != eslOK) return status;
+      nmaxcov++;
+      if(ps->mask != NULL && ps->mask[rfpos] == '1') nmaxcov_masked++; 
+      cfract = 1.;
+      bi = -1;
+    }
+    else {
+      within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE;
+      cfract = (float) span_ct[rfpos] / (float) msa_nseq;
+      if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], cfract, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status;
+    }
+
+    /* fill in info for the consensus nucleotide */
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      if(ps->mask == NULL || ps->mask[rfpos] == '1') { 
+	ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos];
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+      else { /* position is a '0' in the mask, leave it blank (' ') */
+	ps->rAA[pp][rfpos] = ' '; 
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+    }
+
+    if(tabfp != NULL) { 
+      fprintf(tabfp, "  span  %6d  %8.5f  %3d", rfpos+1, cfract, bi+2); 
+      if(ps->mask != NULL) fprintf(tabfp, "  %4d", ps->mask[rfpos] == '1' ? 1 : 0);
+      fprintf(tabfp, "\n");
+    }
+  }
+
+  /* add one-cell color legend for zero span positions */
+  ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[zerocov_idx], nzerocov, nzerocov_masked, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "no sequences span", ps->legx_max_chars, errbuf)) != eslOK) return status;
+
+  /* add one-cell color legend for maximum span positions */
+  ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[maxcov_idx], nmaxcov, nmaxcov_masked, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "100% of seqs span", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  ps->nocclA[pp] = 2;
+
+  /* add color legend */
+  if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "fraction of seqs that span each position", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, "fraction of sequences that span each position", errbuf)) != eslOK) return status;
+
+  /* add the consensus nucleotide explanation text section to the legend */
+  if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+    ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE);
+    ps->ntlA[pp] = 1;
+  }
+
+  free(limits);
+
+  if(tabfp != NULL) fprintf(tabfp, "//\n");
+  return eslOK;
+  
+ ERROR: ESL_FAIL(status, errbuf, "span_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* Function: avg_posteriors_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with info average posterior probabilities in the MSA.
+ * Return:   eslOK on success.
+ */
+static int
+avg_posteriors_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **pp_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_onecell_idx, FILE *tabfp)
+{
+  int status;
+  int p;
+  int rfpos;
+  int pp;
+  float *limits; /* bin limits for the color scheme */
+  int nonecell_allgap = 0;
+  int nonecell_allgap_masked = 0;
+  int within_mask;
+  int orig_npage = ps->npage;
+  float ppavgA[11];
+  int l;
+  int apos;
+  double nnongap;
+  double ppsum;
+  int ppidx;
+  double ppavg;
+  int bi;
+
+  ppavgA[0]  = 0.025;
+  ppavgA[1]  = 0.10;
+  ppavgA[2]  = 0.20;
+  ppavgA[3]  = 0.30;
+  ppavgA[4]  = 0.40;
+  ppavgA[5]  = 0.50;
+  ppavgA[6]  = 0.60;
+  ppavgA[7]  = 0.70;
+  ppavgA[8]  = 0.80;
+  ppavgA[9]  = 0.90;
+  ppavgA[10] = 0.975;
+
+  if(ps->mask == NULL) { nonecell_allgap_masked = -1; } /* special flag */
+
+  if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+    ESL_ALLOC(ps->sclAA[p],   sizeof(SchemeColorLegend_t) * 1);
+    ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t *) * 1);
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      ESL_ALLOC(ps->rAA[p],     sizeof(char) *  ps->rflen);
+      ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen);
+      ESL_ALLOC(ps->tlAAA[p],   sizeof(TextLegend_t *) * 1);
+    }
+    for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+      ESL_ALLOC(ps->bcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */
+      if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+	ESL_ALLOC(ps->rcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */
+      }
+    }
+  }
+
+  ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); 
+  limits[0] = 0.0;
+  limits[1] = 0.70;
+  limits[2] = 0.80;
+  limits[3] = 0.85;
+  limits[4] = 0.90;
+  limits[5] = 0.95;
+  limits[6] = 1.00;
+
+  if(tabfp != NULL) { 
+    fprintf(tabfp, "# ----------------------------------\n");
+    fprintf(tabfp, "# Average posterior probability data\n");
+    fprintf(tabfp, "# ----------------------------------\n");
+    fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen);
+    fprintf(tabfp, "# in the alignment and corresponding template.\n");
+    fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 5 : 6);
+    fprintf(tabfp, "# \ttoken 1: 'avgpostprob' (tag defining line type to ease parsing)\n");
+    fprintf(tabfp, "# \ttoken 2: consensus position (starting at 1)\n");
+    fprintf(tabfp, "# \ttoken 3: average posterior probability of non-gap nucleotides for position\n");
+    fprintf(tabfp, "# \ttoken 4: number of non-gap nucleotides in position (max possible is %d (num seqs in aln))\n", msa_nseq); 
+    fprintf(tabfp, "# \ttoken 5: bin index this positions falls in (see bin values below)\n");
+    if(ps->mask != NULL) fprintf(tabfp, "# \ttoken 6: '1' if position is included by mask, '0' if not\n");
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Posterior probability (PP) values in the alignment file can have 12 possible values,\n");
+    fprintf(tabfp, "# the average per position is calculated by defining each as the average of its range given\n");
+    fprintf(tabfp, "# below. (For example, a '8' which indicates PP between 0.75 and 0.85 is treated as 0.8).\n");
+    fprintf(tabfp, "# \t'.': gap, corresponds to a gap in the sequence (not counted)\n");
+    fprintf(tabfp, "# \t'0': posterior probability of between 0.00 and 0.05\n");
+    fprintf(tabfp, "# \t'1': posterior probability of between 0.05 and 0.15\n");
+    fprintf(tabfp, "# \t'2': posterior probability of between 0.15 and 0.25\n");
+    fprintf(tabfp, "# \t'3': posterior probability of between 0.25 and 0.35\n");
+    fprintf(tabfp, "# \t'4': posterior probability of between 0.35 and 0.45\n");
+    fprintf(tabfp, "# \t'5': posterior probability of between 0.45 and 0.55\n");
+    fprintf(tabfp, "# \t'6': posterior probability of between 0.55 and 0.65\n");
+    fprintf(tabfp, "# \t'7': posterior probability of between 0.65 and 0.75\n");
+    fprintf(tabfp, "# \t'8': posterior probability of between 0.75 and 0.85\n");
+    fprintf(tabfp, "# \t'9': posterior probability of between 0.85 and 0.95\n");
+    fprintf(tabfp, "# \t'*': posterior probability of between 0.95 and 1.00\n");
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Value ranges for bins:\n");
+    fprintf(tabfp, "# \tbin  0: special case, 0 sequences have a non-gap nucleotide at position\n");
+    for(l = 0; l < hc_nbins; l++) { 
+      fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s average posterior probability per position\n", l+1, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# %11s  %6s  %8s  %10s  %3s", "type", "cpos", "avgpp", "nongap", "bin");
+    if(ps->mask != NULL) fprintf(tabfp, "  %4s", "mask");
+    fprintf(tabfp, "\n");
+    fprintf(tabfp, "# %11s  %6s  %8s  %10s  %3s", "-----------", "------", "--------", "----------", "---");
+    if(ps->mask != NULL) fprintf(tabfp, "  %4s", "----");
+    fprintf(tabfp, "\n");
+  }
+
+  /* step through each sequence and each column, collecting stats */
+  pp = orig_npage;
+  ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, TRUE, TRUE, TRUE);
+  for(rfpos = 0; rfpos < ps->rflen; rfpos++) { 
+    apos = ps->msa_rf2a_map[rfpos]; 
+    nnongap = esl_vec_DSum(pp_ct[apos], 11);
+    if(esl_FCompare(nnongap, 0., eslSMALLX1) == eslOK) { /* effectively 0.0, all gaps */
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_onecell_idx])) != eslOK) return status;
+      nonecell_allgap++;
+      if(ps->mask != NULL && ps->mask[rfpos] == '1') nonecell_allgap_masked++; 
+      bi = -1;
+      ppavg = 0.;
+    }
+    else { /* at least 1 non-gap nucleotide in this position */
+      if(esl_FCompare(nnongap, pp_ct[apos][10], eslSMALLX1)) { /* all nongap nucleotides have highest possible posterior probability */
+      }
+      else { 
+      }
+      ppsum = 0.;
+      for(ppidx = 0; ppidx < 11; ppidx++) {
+	ppsum += pp_ct[apos][ppidx] * ppavgA[ppidx]; /* Note: PP value is considered average of range, not minimum ('9' == 0.90 (0.95-0.85/2) */
+      }
+      ppavg = ppsum / nnongap;
+      within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE;
+      if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], ppavg, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status;
+    }
+
+    /* fill in info for the consensus nucleotide */
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      if(ps->mask == NULL || ps->mask[rfpos] == '1') { 
+	ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos];
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+      else { /* position is a '0' in the mask, leave it blank (' ') */
+	ps->rAA[pp][rfpos] = ' '; 
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+    }
+
+    if(tabfp != NULL) { 
+      fprintf(tabfp, "  avgpostprob  %6d  %8.5f  %10d  %3d", rfpos+1, ppavg, (int) nnongap, bi+1);
+      if(ps->mask != NULL) fprintf(tabfp, "  %4d", ps->mask[rfpos] == '1' ? 1 : 0);
+      fprintf(tabfp, "\n");
+    }
+  }
+
+  /* add one-cell color legend for all gap positions */
+  ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[hc_onecell_idx], nonecell_allgap, nonecell_allgap_masked, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "100% gaps", ps->legx_max_chars, errbuf)) != eslOK) return status;
+
+  ps->nocclA[pp] = 1;
+  
+  /* add color legend */
+  if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "average posterior probability \\(confidence\\)", ps->legx_max_chars,errbuf)) != eslOK) return status;
+
+  /* add the consensus nucleotide explanation text section to the legend */
+  if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+    ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE);
+    ps->ntlA[pp] = 1;
+  }
+
+  /* add description to ps */
+  if((status = add_page_desc_to_sspostscript(ps, pp, "average posterior probability per position", errbuf)) != eslOK) return status;
+
+  free(limits);
+
+  if(tabfp != NULL) fprintf(tabfp, "//\n");
+  return eslOK;
+
+ ERROR:
+  return status;
+}
+
+
+/* Function: colormask_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with 1 new page based on a lanemask, each column
+ *           is either black (if included, a '1' in the mask) or pink (not included, a '0' in the
+ *           mask.
+ *
+ * Return:   eslOK on success.
+ */
+static int
+colormask_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, float **hc_onecell, int incmask_idx, int excmask_idx)
+{
+  int status;
+  int p, pp, c;
+  int cpos;
+  int orig_npage = ps->npage;
+  int ncols_inside_mask = 0;
+  int ncols_outside_mask = 0;
+  char *mask_desc = NULL;
+  char *mask_file = NULL;
+  
+  if(ps->mask == NULL) ESL_FAIL(eslEINVAL, errbuf, "ps->mask is null when trying to draw maskcol page");
+  if((status = add_pages_sspostscript(ps, 1, SIMPLEMASKMODE)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->rAA[p], sizeof(char) *  ps->rflen);
+    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+    ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t *) * 2);
+    for(c = 0; c < ps->rflen; c++) { 
+      ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+    }
+  }
+  pp = orig_npage;
+
+  for(cpos = 0; cpos < ps->rflen; cpos++) { 
+    if(ps->mask[cpos] == '1') { /* included */
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[incmask_idx])) != eslOK) return status; 
+      ncols_inside_mask++;
+    }
+    else if(ps->mask[cpos] == '0') {
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[excmask_idx])) != eslOK) return status; 
+      ncols_outside_mask++;
+    }
+    else ESL_FAIL(eslEINVAL, errbuf, "--mask mask char number %d is not a 1 nor a 0, but a %c\n", cpos, ps->mask[cpos]);
+    ps->rAA[pp][cpos] = ' ';
+  }
+
+  /* add color legend */
+  ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[incmask_idx], ncols_inside_mask, OCCL_BLANK_COUNT, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "columns included by mask", ps->legx_max_chars, errbuf)) != eslOK) return status;
+
+  ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[excmask_idx], ncols_outside_mask, OCCL_BLANK_COUNT, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "columns excluded by mask", ps->legx_max_chars, errbuf)) != eslOK) return status;
+
+  if((status = esl_strcat(&(mask_desc), -1, "mask file: ", -1)) != eslOK) ESL_FAIL(status, errbuf, "error copying mask file name string");;
+  if((status = esl_FileTail(esl_opt_GetString(go, "--mask"), FALSE, &mask_file)) != eslOK) ESL_FAIL(status, errbuf, "error copying mask file name string (probably out of memory)."); 
+  if((strlen(mask_file) + strlen(mask_desc)) > (ps->desc_max_chars*2 - 2)) { /* desc would be too long, shorten mask_file so desc is legal */
+    /* the -5 below is so we can add '...' to end */
+    if((status = esl_strcat(&(mask_desc), -1, mask_file, ((ps->desc_max_chars*2) - strlen(mask_desc) - 5))) != eslOK) ESL_FAIL(status, errbuf, "error copying mask file name string");
+    if((status = esl_strcat(&(mask_desc), -1, "...", 3)) != eslOK) ESL_FAIL(status, errbuf, "error copying mask file name string");
+  }
+  else { /* desc will not be too long */
+    if((status = esl_strcat(&(mask_desc), -1, mask_file, -1)) != eslOK) ESL_FAIL(status, errbuf, "error copying mask file name string");
+  }
+  free(mask_file);
+  if((status = add_page_desc_to_sspostscript(ps, pp, mask_desc, errbuf)) != eslOK) return status;
+
+  ps->nocclA[pp] = 2;
+
+  return eslOK;
+  
+ ERROR: ESL_FAIL(status, errbuf, "colormask_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* Function: diffmask_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with 1 new page based on a comparison between
+ *           two masks one in ps->mask the other in <mask2>, each position becomes
+ *           one of four colors, one for each of the four possible combinations of 0 and 1.
+ *
+ * Return:   eslOK on success.
+ */
+static int
+diffmask_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, char *mask2, float **hc_onecell, int incboth_idx, int inc1_idx, int inc2_idx, int excboth_idx)
+{
+  int status;
+  int p, pp, c;
+  int cpos;
+  int orig_npage = ps->npage;
+  int ncols_in_both = 0;
+  int ncols_out_both = 0;
+  int ncols_in_1_out_2 = 0;
+  int ncols_out_1_in_2 = 0;
+
+  if(ps->mask == NULL) ESL_FAIL(eslEINVAL, errbuf, "ps->mask is null when trying to draw maskdiff page");
+  if((status = add_pages_sspostscript(ps, 1, SIMPLEMASKMODE)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->rAA[p], sizeof(char) *  ps->rflen);
+    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+    ESL_ALLOC(ps->occlAAA[p],  sizeof(OneCellColorLegend_t *) * 4);
+    for(c = 0; c < ps->rflen; c++) { 
+      ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+    }
+  }
+  pp = orig_npage;
+
+  for(cpos = 0; cpos < ps->rflen; cpos++) { 
+    if(ps->mask[cpos] == '1' && mask2[cpos] == '1') { 
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[incboth_idx])) != eslOK) return status; 
+      ncols_in_both++;
+    }
+    else if(ps->mask[cpos] == '1' && mask2[cpos] == '0') {
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[inc1_idx])) != eslOK) return status; 
+      ncols_in_1_out_2++;
+    }
+    else if(ps->mask[cpos] == '0' && mask2[cpos] == '1') {
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[inc2_idx])) != eslOK) return status; 
+      ncols_out_1_in_2++;
+    }
+    else if(ps->mask[cpos] == '0' && mask2[cpos] == '0') {
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[excboth_idx])) != eslOK) return status; 
+      ncols_out_both++;
+    }
+    else if(ps->mask[cpos] != '0' && ps->mask[cpos] != '1') ESL_FAIL(eslEINVAL, errbuf, "--mask-col char number %d is not a 1 nor a 0, but a %c\n", cpos, ps->mask[cpos]);
+    else if(mask2[cpos] != '0' && mask2[cpos] != '1') ESL_FAIL(eslEINVAL, errbuf, "--mask-diff char number %d is not a 1 nor a 0, but a %c\n", cpos, mask2[cpos]);
+    ps->rAA[pp][cpos] = ' ';
+  }
+
+  /* add color legend */
+  ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[incboth_idx], ncols_in_both, OCCL_BLANK_COUNT, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "included by both masks", ps->legx_max_chars, errbuf)) != eslOK) return status;
+
+  ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[inc1_idx], ncols_in_1_out_2, OCCL_BLANK_COUNT, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "incl mask 1, excl mask 2", ps->legx_max_chars, errbuf)) != eslOK) return status;
+
+  ps->occlAAA[pp][2] = create_onecell_colorlegend(hc_onecell[inc2_idx], ncols_out_1_in_2, OCCL_BLANK_COUNT, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][2], "excl mask 1, incl mask 1", ps->legx_max_chars, errbuf)) != eslOK) return status;
+
+  ps->occlAAA[pp][3] = create_onecell_colorlegend(hc_onecell[excboth_idx], ncols_out_both, OCCL_BLANK_COUNT, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][3], "excluded by both masks", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  ps->nocclA[pp] = 4;
+
+  if((status = add_diffmask_page_desc_to_sspostscript(ps, pp, esl_opt_GetString(go, "--mask"), esl_opt_GetString(go, "--mask-diff"), errbuf)) != eslOK) return status;
+
+  return eslOK;
+  
+ ERROR: ESL_FAIL(status, errbuf, "diffmask_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+/* Function: add_pages_sspostscript()
+ * 
+ * Purpose:  Add and initialize blank pages to a postscript object.
+ */ 
+int 
+add_pages_sspostscript(SSPostscript_t *ps, int ntoadd, int page_mode)
+{
+  int status;
+  void *tmp;
+  int p;
+
+  if(ps->npage == 0) { 
+    assert(ps->rAA    == NULL);
+    assert(ps->bcolAAA == NULL);
+    ESL_ALLOC(ps->rAA,    sizeof(char *)   * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->rcolAAA, sizeof(float **) * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->bcolAAA, sizeof(float **) * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->otypeAA, sizeof(char *) * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->occlAAA, sizeof(OneCellColorLegend_t **) * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->nocclA,  sizeof(int) * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->tlAAA,   sizeof(TextLegend_t **) * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->ntlA,    sizeof(int) * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->sclAA,   sizeof(SchemeColorLegend_t *) * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->descA,   sizeof(char *) * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->modeA,   sizeof(int) * (ps->npage + ntoadd));
+    ESL_ALLOC(ps->seqidxA, sizeof(int) * (ps->npage + ntoadd));
+  }
+  else { 
+    assert(ps->rAA    != NULL);
+    assert(ps->bcolAAA != NULL);
+    assert(ps->rcolAAA != NULL);
+    ESL_RALLOC(ps->rAA,   tmp, sizeof(char *)   * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->rcolAAA,tmp, sizeof(float **) * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->bcolAAA,tmp, sizeof(float **) * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->otypeAA,tmp, sizeof(char *) * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->occlAAA,tmp, sizeof(OneCellColorLegend_t ***) * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->nocclA, tmp, sizeof(int) * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->tlAAA,  tmp, sizeof(TextLegend_t ***) * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->ntlA,   tmp, sizeof(int) * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->sclAA,  tmp, sizeof(SchemeColorLegend_t **) * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->descA,  tmp, sizeof(char *) * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->modeA,  tmp, sizeof(int) * (ps->npage + ntoadd));
+    ESL_RALLOC(ps->seqidxA,tmp, sizeof(int) * (ps->npage + ntoadd));
+  }
+  for(p = ps->npage; p < (ps->npage + ntoadd); p++) { 
+    ps->rAA[p]    = NULL;
+    ps->rcolAAA[p] = NULL;
+    ps->bcolAAA[p] = NULL;
+    ps->otypeAA[p] = NULL;
+    ps->occlAAA[p] = NULL;
+    ps->nocclA[p]  = 0;
+    ps->tlAAA[p]   = NULL;
+    ps->ntlA[p]    = 0;
+    ps->sclAA[p]   = NULL;
+    ps->descA[p]   = NULL;
+    ps->modeA[p]   = page_mode;
+    ps->seqidxA[p] = -1;
+  }
+  ps->npage += ntoadd;
+
+  return eslOK;
+
+ ERROR: 
+  return status;
+}
+
+/* read_mask_file
+ *
+ * Given an open file pointer, read the first token of the
+ * file and return it as *ret_mask. Also return length of
+ * mask in *ret_masklen, and a flag indicating whether or
+ * not the mask has any internal zeroes in *ret_mask_has_internal_zeroes.
+ * An internal '0' is one that occurs between at least one
+ * 5' and one 3' '1'
+ *
+ * Returns:  eslOK on success.
+ */
+int
+read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_masklen, int *ret_mask_has_internal_zeroes)
+{
+  int             status;
+  ESL_FILEPARSER *efp;
+  char           *tok;
+  char           *mask;
+  int             toklen;
+  int             n;
+  /* for determining if we have internal zeroes */
+  int             seen_1 = FALSE;                /* becomes TRUE when we see first (5'-most) '1' */
+  int             seen_1_then_0 = FALSE;         /* becomes TRUE when we see first (5'-most) '0' that is 3' of first '1' */
+  int             seen_1_then_0_then_1 = FALSE;  /* becomes TRUE when we see first (5'-most) '1' that is 3' of first '0' that is 3' of first '1' */
+
+  if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in read_mask_file\n", filename);
+  esl_fileparser_SetCommentChar(efp, '#');
+  
+  if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to read a single token from %s\n", filename);
+
+  ESL_ALLOC(mask, sizeof(char) * (toklen+1));
+
+  for(n = 0; n < toklen; n++) { 
+    mask[n] = tok[n];
+    if(mask[n] == '0') { 
+      if((seen_1) && (!seen_1_then_0)) { seen_1_then_0 = TRUE; }
+    }
+    else if (mask[n] == '1') { 
+      if(!seen_1) { seen_1 = TRUE; }
+      if((seen_1) && (seen_1_then_0) && (!seen_1_then_0_then_1)) { seen_1_then_0_then_1 = TRUE; }
+    }
+    else { ESL_FAIL(eslEINVAL, errbuf, "character %d of mask file is invalid: %c (must be a '1' or a '0')\n", n, mask[n]); }
+
+    mask[n] = tok[n];
+  }
+  mask[n] = '\0';
+
+  *ret_mask = mask;
+  *ret_masklen= toklen;
+  *ret_mask_has_internal_zeroes = seen_1_then_0_then_1;
+
+  esl_fileparser_Close(efp);
+  return eslOK;
+  
+ ERROR:
+  return eslEMEM;
+}
+
+
+/* Function: mutual_information_sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with 1 new page, colored squares indicating
+ *           the mutual information of each base paired consensus column.
+ *           mutual information is the extra information gained from modelling
+ *           the pair together (info of vector of bps, size 16) versus separately (sum
+ *           of info of the two independent vector of singlets, size 4).
+ *           
+ * Return:   eslOK on success.
+ */
+static int
+mutual_information_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double ***bp_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int ss_idx, int zerores_idx, FILE *tabfp)
+{
+  int status;
+  int p, pp, c, i;
+  int rfpos, apos; 
+  int orig_npage = ps->npage;
+  double *bg, *bg_pair;
+  double bg_ent, bg_pair_ent;
+  double *obs_left, *obs_right, *obs_pair;
+  double ent_left, ent_right, ent_pair;
+  int j;
+  ESL_DSQ lres;
+  ESL_DSQ rres;
+  double nres;
+  int nss = 0;
+  int nzerores = 0;
+  int nss_masked = 0;
+  int nzerores_masked = 0;
+  int i_within_mask, j_within_mask;
+  int i_bi, j_bi;
+  float *limits;
+  int l;
+  int idx =1;
+
+  if(ps->mask == NULL) nss_masked = nzerores_masked = -1; /* special flag */
+  if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+
+  for(p = orig_npage; p < ps->npage; p++) { 
+    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+    ESL_ALLOC(ps->sclAA[p],   sizeof(SchemeColorLegend_t) * 1);
+    ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t *) * 2);
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      ESL_ALLOC(ps->rAA[p],     sizeof(char) *  ps->rflen);
+      ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen);
+      ESL_ALLOC(ps->tlAAA[p],   sizeof(TextLegend_t *) * 1);
+    }
+    for(c = 0; c < ps->rflen; c++) { 
+      ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+	ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+      }
+    }
+  }
+  pp = orig_npage;
+
+  /* add color legend */
+  ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); 
+  limits[0] = 0.0;
+  limits[1] = 0.167;
+  limits[2] = 0.333;
+  limits[3] = 0.500;
+  limits[4] = 0.667;
+  limits[5] = 0.833;
+  limits[6] = 1.000;
+  ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, TRUE, TRUE, TRUE);
+
+  if(tabfp != NULL) { 
+    fprintf(tabfp, "# -----------------------\n");
+    fprintf(tabfp, "# Mutual information data\n");
+    fprintf(tabfp, "# -----------------------\n");
+    fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen);
+    fprintf(tabfp, "# in the alignment and corresponding template.\n");
+    fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 9 : 11);
+    fprintf(tabfp, "# \ttoken  1: 'mutualinfo' (tag defining line type to ease parsing)\n");
+    fprintf(tabfp, "# \ttoken  2: base pair index\n");
+    fprintf(tabfp, "# \ttoken  3: 5' consensus position of base pair (starting at 1)\n");
+    fprintf(tabfp, "# \ttoken  4: 3' consensus position of base pair (starting at 1)\n");
+    fprintf(tabfp, "# \ttoken  5: sequence information content at 5' position (bits)\n");
+    fprintf(tabfp, "# \ttoken  6: sequence information content at 3' position (bits)\n");
+    fprintf(tabfp, "# \ttoken  7: mutual information of the base pair (bits)\n");
+    fprintf(tabfp, "# \ttoken  8: number of sequences with non-gap at 5' and 3' posn (max possible is %d)\n", msa_nseq); 
+    fprintf(tabfp, "# \ttoken  8: number of sequences with non-gap at 5' and 3' position\n");
+    fprintf(tabfp, "# \ttoken  9: bin index this positions falls in (see bin values below).\n");
+    if(ps->mask != NULL) { 
+      fprintf(tabfp, "# \ttoken 10: '1' if 5' position is included by mask, '0' if not\n");
+      fprintf(tabfp, "# \ttoken 11: '1' if 3' position is included by mask, '0' if not\n");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# Information content is calculated as 2.0 - H, where\n");
+    fprintf(tabfp, "# H = - \\sum_x p_x \\log_2 p_x, for x in {A, C, G, U}\n");
+    fprintf(tabfp, "# p_x is the frequency of x for *non-gap* nucleotides at the position.\n");
+    fprintf(tabfp, "# Only nucleotides for sequences which have a non-gap nucleotide at both\n"); 
+    fprintf(tabfp, "# the 5' and 3' positions of the pair are counted.\n"); 
+    fprintf(tabfp, "# Mutual information is calculated as\n");
+    fprintf(tabfp, "# \\sum_{x,y} p_{x,y} \\log_2 ((p_x * p_y) / p_{x,y}\n");
+    fprintf(tabfp, "# Value ranges for bins:\n");
+    fprintf(tabfp, "# \tbin  0: special case, 0 sequences have non-gaps at both 5' and 3' position of pair\n");
+	    for(l = 0; l < hc_nbins; l++) { 
+      fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s mutual information per position (bits)\n", l+1, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")");
+    }
+    fprintf(tabfp, "#\n");
+    fprintf(tabfp, "# %10s  %4s  %5s  %5s  %8s  %8s  %9s  %10s  %3s", "type", "idx", "5'pos", "3'pos", "5'info", "3'info", "mutinfo/2", "nongap", "bin");
+    if(ps->mask != NULL) fprintf(tabfp, "  %6s  %6s", "5'mask", "3'mask");
+    fprintf(tabfp, "\n");
+    fprintf(tabfp, "# %10s  %4s  %5s  %5s  %8s  %8s  %9s  %10s  %3s", "----------", "----", "-----", "-----", "--------", "--------", "---------", "----------", "---");
+    if(ps->mask != NULL) fprintf(tabfp, "  %6s  %6s", "------", "------");
+    fprintf(tabfp, "\n");
+  }
+
+  /* determine background entropy */
+  ESL_ALLOC(bg,        sizeof(double) * abc->K);
+  ESL_ALLOC(bg_pair,   sizeof(double) * abc->K*abc->K);
+  esl_vec_DSet(bg, abc->K, 1./(abc->K));
+  esl_vec_DSet(bg_pair, abc->K*abc->K, 1./(abc->K*abc->K));
+  bg_pair_ent = esl_vec_DEntropy(bg_pair, abc->K*abc->K);
+  bg_ent      = esl_vec_DEntropy(bg, abc->K);
+  free(bg);
+  free(bg_pair);
+
+  ESL_ALLOC(obs_left,  sizeof(double) * (abc->K));
+  ESL_ALLOC(obs_right, sizeof(double) * (abc->K));
+  ESL_ALLOC(obs_pair,  sizeof(double) * (abc->K*abc->K));
+
+  /* get observed nucleotides and base pairs at each rfpos */
+  for(rfpos = 0; rfpos < ps->rflen; rfpos++) {
+    esl_vec_DSet(obs_left,  abc->K, 0.);
+    esl_vec_DSet(obs_right, abc->K, 0.);
+    esl_vec_DSet(obs_pair,  abc->K*abc->K, 0.);
+    i = rfpos;
+    nres = 0.;
+    apos = ps->msa_rf2a_map[rfpos];
+    /* check if we're base paired */
+    if(ps->msa_ct[rfpos+1] != 0) { 
+      /* printf("msa_ct rfpos+1: %d %d\n", rfpos+1, ps->msa_ct[rfpos+1]); */
+      if(ps->msa_ct[rfpos+1] > (rfpos+1)) { /* rfpos is left half of base pair */
+	/* add up contributions of all possible base pairs,
+	 * we have to be careful to skip nucleotides that are gaps, missing or nonnucleotides in 
+	 * EITHER left or right half of the bp.
+	 * We use the raw counts from msa_count() as the wt, (bp_ct[apos][lres][rres]) */
+	j = ps->msa_ct[i+1] - 1; 
+	for(lres = 0; lres < abc->K; lres++) { 
+	  for(rres = 0; rres < abc->K; rres++) { 
+	    /* printf("apos: %d rfpos: %d lres: %d rres: %d bp_ct[][][]: %.5f\n", apos, rfpos, lres, rres, bp_ct[apos][lres][rres]);*/
+	    esl_abc_DCount(abc, obs_left,  lres, bp_ct[apos][lres][rres]);
+	    esl_abc_DCount(abc, obs_right, rres, bp_ct[apos][lres][rres]);
+	    PairCount(abc, obs_pair, lres, rres, bp_ct[apos][lres][rres]);
+	    nres += bp_ct[apos][lres][rres];
+	  }
+	}
+	for(lres = abc->K+1; lres < abc->Kp-2; lres++) { /* do all degenerates and 'any' (N) */
+	  for(rres = abc->K+1; rres < abc->Kp-2; rres++) { /* do all degenerates and 'any' (N) */
+	    esl_abc_DCount(abc, obs_left,  lres, bp_ct[apos][lres][rres]);
+	    esl_abc_DCount(abc, obs_right, rres, bp_ct[apos][lres][rres]);
+	    PairCount(abc, obs_pair, lres, rres, bp_ct[apos][lres][rres]);
+	    nres += bp_ct[apos][lres][rres];
+	  }
+	}
+	/* esl_vec_DDump(stdout, obs_left, abc->K, NULL);
+	   esl_vec_DDump(stdout, obs_right, abc->K, NULL);
+	   esl_vec_DDump(stdout, obs_pair, abc->K*abc->K, NULL);
+	*/
+	esl_vec_DNorm(obs_left,  abc->K);
+	esl_vec_DNorm(obs_right, abc->K);
+	esl_vec_DNorm(obs_pair, abc->K*abc->K);
+	ent_left  = bg_ent - esl_vec_DEntropy(obs_left, abc->K);      
+	ent_right = bg_ent - esl_vec_DEntropy(obs_right, abc->K);      
+	ent_pair =  bg_pair_ent - esl_vec_DEntropy(obs_pair, abc->K*abc->K);      
+	/* printf("lpos: %5d  rpos: %5d  entP: %8.3f  entL: %8.3f  entR: %8.3f  nres: %.2f  ",  i+1, j+1, ent_pair, ent_left, ent_right, nres); */
+	ent_pair -= ent_left + ent_right;
+	ent_pair /= 2.;
+	/* printf("Final: %8.3f\n", ent_pair);  */
+	
+	/* To verify that the ent_pair is mutual information, calculated a different way, uncomment the following block */
+	/* double mi = 0;
+	   for(lres = 0; lres < abc->K; lres++) { 
+	   for(rres = 0; rres < abc->K; rres++) { 
+	   if(obs_pair[lres*abc->K+rres] > eslSMALLX1) { 
+	   mi += obs_pair[lres*abc->K+rres] * (1.44269504 * log((obs_pair[lres*abc->K+rres])/(obs_left[lres] * obs_right[rres])));
+	   printf("mi: %.2f obs_left %.2f  obs_right: %.2f obs_pair %.2f \n", mi, obs_left[lres], obs_right[rres], obs_pair[lres*abc->K+rres]);  
+	   }
+	   }
+	   }
+	   printf("MI/2: %.2f  EP: %.2f  %.2f\n", mi/2., ent_pair, (mi/2.) - ent_pair); 
+	*/
+
+	if(ent_pair < (-1. * eslSMALLX1)) { 
+	  ESL_FAIL(eslEINCONCEIVABLE, errbuf, "pair information < 0.: %f (lpos: %d rpos: %d)\n", ent_pair, i, j);
+	}
+	if(esl_DCompare(nres, 0., eslSMALLX1) == eslOK) { /* nres is 0 */
+	  if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][i], NCMYK, hc_onecell[zerores_idx])) != eslOK) return status;
+	  if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][j], NCMYK, hc_onecell[zerores_idx])) != eslOK) return status;
+	  nzerores += 2;
+	  if(ps->mask != NULL && ps->mask[i] == '1') nzerores_masked++; 
+	  if(ps->mask != NULL && ps->mask[j] == '1') nzerores_masked++; 
+	  if(tabfp != NULL) { 
+	    fprintf(tabfp, "  mutualinfo  %4d  %5d  %5d  %8.5f  %8.5f  %9.5f  %10d  %3d", idx++, i+1, j+1, 0., 0., 0., 0, 0);
+	    if(ps->mask != NULL) fprintf(tabfp, "  %6d  %6d", ((ps->mask == NULL || ps->mask[i] == '1') ? 1 : 0), ((ps->mask == NULL || ps->mask[j] == '1') ? 1 : 0));
+	    fprintf(tabfp, "\n");
+	  }
+	}
+	else { 
+	  i_within_mask = (ps->mask != NULL && ps->mask[i] == '1') ? TRUE : FALSE;
+	  j_within_mask = (ps->mask != NULL && ps->mask[j] == '1') ? TRUE : FALSE;
+	  if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][i], NCMYK, hc_scheme[hc_scheme_idx], ent_pair, ps->sclAA[pp], i_within_mask, &i_bi)) != eslOK) return status;
+	  if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][j], NCMYK, hc_scheme[hc_scheme_idx], ent_pair, ps->sclAA[pp], j_within_mask, &j_bi)) != eslOK) return status;
+	  if(tabfp != NULL) { 
+	    fprintf(tabfp, "  mutualinfo  %4d  %5d  %5d  %8.5f  %8.5f  %9.5f  %10d  %3d", 
+		    idx++, i+1, j+1, 
+		    ent_left, 
+		    ent_right, 
+		    ent_pair,
+		    (int) nres, 
+		    i_bi+1);
+	    if(ps->mask != NULL) fprintf(tabfp, "  %6d  %6d", ((ps->mask == NULL || ps->mask[i] == '1') ? 1 : 0), ((ps->mask == NULL || ps->mask[j] == '1') ? 1 : 0));
+	    fprintf(tabfp, "\n");
+	  }
+	}
+      } /* end of if(ps->msa_ct[rfpos+1] > (rfpos+1)) { */
+    }
+    else { /* single stranded, paint grey  */
+      nss++;
+      if(ps->mask != NULL && ps->mask[rfpos] == '1') nss_masked++; 
+      if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[ss_idx])) != eslOK) return status;
+    }
+    /* fill in info for the consensus nucleotide */
+    if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+      if(ps->mask == NULL || ps->mask[rfpos] == '1') { 
+	ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos];
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+      else { /* position is a '0' in the mask, leave it blank (' ') */
+	ps->rAA[pp][rfpos] = ' '; 
+	if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status;
+      }
+    }
+  }
+
+  /* add text to the one cell legend */
+  ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[ss_idx], nss, nss_masked, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "single-stranded", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  
+  /* add text to the second one cell legend */
+  ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[zerores_idx], nzerores, nzerores_masked, FALSE, FALSE);
+  if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "0 complete basepairs", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  ps->nocclA[pp] = 2;
+  
+  /* add text to the scheme legend */
+  if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "mutual information per position (bits)", ps->legx_max_chars, errbuf)) != eslOK) return status;
+  
+  /* add the consensus nucleotide explanation text section to the legend */
+  if(! esl_opt_GetBoolean(go, "--no-cnt")) { 
+    ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE);
+    ps->ntlA[pp] = 1;
+  }
+
+  /* add description to ps */
+  if((status = add_page_desc_to_sspostscript(ps, pp, "mutual information per basepaired position", errbuf)) != eslOK) return status;
+  
+  free(limits);
+  free(obs_left);
+  free(obs_right);
+  free(obs_pair);
+  
+  if(tabfp != NULL) fprintf(tabfp, "//\n");
+  return eslOK;
+  
+ ERROR: ESL_FAIL(status, errbuf, "mutual_information_sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+/* Function: PairCount()
+ * Date:     SRE, Tue Aug  1 10:34:20 2000 [St. Louis]
+ *
+ * Purpose:  Given a possibly degenerate symbol code for left
+ *           and right symbols in a pair, increment a symbol
+ *           counter array appropriately.
+ *           
+ * Args:     abc      - pointer to the internal alphabet
+ *           counters - vector to count into [0..abc->K^2-1]
+ *           syml     - index of left symbol  [0..abc->sym_iupac-1]
+ *           symr     - index of right symbol [0..abc->sym_iupac-1]
+ *           wt       - weight to use for the count (often 1.0).          
+ *
+ * Returns:  void
+ */
+static void
+PairCount(const ESL_ALPHABET *abc, double *counters, ESL_DSQ syml, ESL_DSQ symr, double wt)
+{
+  int status;
+  if (syml < abc->K && symr < abc->K) {
+    counters[(int) (syml * abc->K + symr)] += wt;
+    return;
+  }
+  else {
+    int   l,r;
+    double *left = NULL;
+    double *right = NULL;
+    ESL_ALLOC(left,  sizeof(double) * abc->K);
+    ESL_ALLOC(right, sizeof(double) * abc->K);
+    
+    esl_vec_DSet(left,  abc->K, 0.);
+    esl_vec_DSet(right, abc->K, 0.);
+    esl_abc_DCount(abc, left,  syml, 1.0);
+    esl_abc_DCount(abc, right, symr, 1.0);
+
+    for (l = 0; l < abc->K; l++)
+      for (r = 0; r < abc->K; r++)
+	counters[l*abc->K +r] += left[l] * right[r] * wt;
+    free(left);
+    free(right);
+  }
+  return;
+
+ ERROR:
+  esl_fatal("Memory error");
+}
+
+/* Function: get_command
+ * Date:     EPN, Fri Jan 25 13:56:10 2008
+ *
+ * Purpose:  Return the command used to call esl-ssdraw
+ *           in <ret_command>.
+ *
+ * Returns:  eslOK on success; eslEMEM on allocation failure.
+ */
+static int 
+get_command(const ESL_GETOPTS *go, char *errbuf, char **ret_command)
+{
+  int status;
+  int i;
+  char *command = NULL;
+
+  for (i = 0; i < go->argc; i++) { /* copy all command line options and args */
+    if((status = esl_strcat(&(command),  -1, go->argv[i], -1)) != eslOK) goto ERROR;
+    if(i < (go->argc-1)) if((status = esl_strcat(&(command), -1, " ", 1)) != eslOK) goto ERROR;
+  }
+  *ret_command = command;
+
+  return eslOK;
+
+ ERROR:
+  ESL_FAIL(status, errbuf, "get_command(): memory allocation error.");
+  return status;
+}
+
+/* Function: get_date
+ * Date:     EPN, Fri Jan 25 13:59:22 2008
+ *
+ * Purpose:  Return a string that gives the current date.
+ *
+ * Returns:  eslOK on success; eslEMEM on allocation failure.
+ */
+static int 
+get_date(char *errbuf, char **ret_date)
+{
+  int    status;
+  time_t date = time(NULL);
+  char  *sdate = NULL;
+
+  if((status = esl_strdup(ctime(&date), -1, &sdate)) != eslOK) goto ERROR;
+  esl_strchop(sdate, -1); /* doesn't return anything but eslOK */
+
+  *ret_date = sdate;
+  return eslOK;
+
+ ERROR:
+  ESL_FAIL(status, errbuf, "get_date() error status: %d, probably out of memory.", status);
+  return status; 
+}
+
+/* Function: set_scheme_values()
+ * 
+ * Purpose:  Set color values from a predefined scheme given min, max, 
+ *           value and number of colors.
+ */ 
+static int 
+set_scheme_values(char *errbuf, float *vec, int ncolvals, float **scheme, float val, SchemeColorLegend_t *scl, int within_mask, int *ret_bi)
+{
+  float min, max;
+  int ci, bi;
+  min = scl->limits[0];
+  max = scl->limits[scl->nbins];
+  if((min-val) > eslSMALLX1) { ESL_FAIL(eslEINVAL, errbuf, "set_scheme_values(), val: %.4f < min: %.4f\n", val, min); }
+  if((val-max) > eslSMALLX1) { ESL_FAIL(eslEINVAL, errbuf, "set_scheme_values(), val: %.4f > max: %.4f\n", val, max); }
+
+  bi = 0;
+  while((bi < (scl->nbins-1)) &&
+	((val > scl->limits[bi+1]) ||                                    /* val exceeds limits[bi+1] OR */
+	 (esl_FCompare(val, scl->limits[bi+1], eslSMALLX1) == eslOK))) { /* val equals limits[bi+1] */
+    bi++; 
+  }    
+  /* printf("%.3f %d (%.3f)\n", val, bi, scl->limits[bi+1]);  */
+  scl->counts[bi]++;
+  if(within_mask) scl->counts_masked[bi]++;
+  for(ci = 0; ci < ncolvals; ci++) { 
+    vec[ci] = scheme[bi][ci]; 
+  }
+
+  if(ret_bi != NULL) *ret_bi = bi;
+  return eslOK;
+}
+
+/* Function: set_onecell_values()
+ * 
+ * Purpose:  Set color values as a  predefined single
+ *           color.
+ */ 
+static int 
+set_onecell_values(char *errbuf, float *vec, int ncolvals, float *onecolor)
+{
+  int ci;
+  for(ci = 0; ci < ncolvals; ci++) { vec[ci] = onecolor[ci]; }
+  return eslOK;
+}
+  
+
+
+/* Function: draw_masked_block()
+ * 
+ * Purpose:  Given coords, color, and mask style options draw a masked block.
+ */ 
+static int 
+draw_masked_block(FILE *fp, float x, float y, float *colvec, int do_circle_mask, int do_square_mask, int do_x_mask, int do_border, float cellsize)
+{
+  if (do_circle_mask) { 
+    if(do_border) { 
+      fprintf(fp, "newpath\n");
+      fprintf(fp, " %.2f %.2f %.1f 0 360 arc closepath\n", x + (cellsize/2.), y + (cellsize/2.), cellsize * (3./8.));
+      fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]);
+      fprintf(fp, "  stroke\n"); 
+    }
+    else { 
+      fprintf(fp, "newpath\n");
+      fprintf(fp, " %.2f %.2f %.1f 0 360 arc closepath\n", x + (cellsize/2.), y + (cellsize/2.), cellsize * (3./8.));
+      fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]);
+      fprintf(fp, "  fill\n"); 
+    }
+  }
+  else if(do_square_mask) { 
+    if(do_border) { 
+      fprintf(fp, "newpath\n");
+      fprintf(fp, "  %.2f %.2f moveto", x +1., y +1.);
+      fprintf(fp, "  0 %.1f rlineto %.1f 0 rlineto 0 -%.1f rlineto closepath\n", cellsize*0.75, cellsize*0.75, cellsize*0.75);
+      fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]);
+      fprintf(fp, "  stroke\n");
+    }
+    else { 
+      fprintf(fp, "newpath\n");
+      fprintf(fp, "  %.2f %.2f moveto", x + 1.5, y + 1.5);
+      fprintf(fp, "  0 %.1f rlineto %.1f 0 rlineto 0 -%.1f rlineto closepath\n", cellsize*(5./8.), cellsize*(5./8.), cellsize*(5./8.));
+      fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]);
+      fprintf(fp, "  fill\n"); 
+    }
+  }
+  else if (do_x_mask) { 
+    if(do_border) { 
+      fprintf(fp, "newpath\n");
+      fprintf(fp, "  %.2f %.2f moveto", x, y);
+      fprintf(fp, "  0 %.1f rlineto %.1f 0 rlineto 0 -%.1f rlineto closepath\n", cellsize, cellsize, cellsize);
+      fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]);
+      fprintf(fp, "  fill\n"); 
+      
+      fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", 0., 0., 0., 0.);
+      fprintf(fp, "newpath\n");
+      fprintf(fp, "  %.2f %.2f moveto", x, y);
+      fprintf(fp, "  %.1f %.1f rlineto closepath\n", cellsize, cellsize);
+      fprintf(fp, "  stroke\n"); 
+      fprintf(fp, "  %.2f %.2f moveto", x + cellsize, y);
+      fprintf(fp, "  -%.1f %.1f rlineto closepath\n", cellsize, cellsize);
+      fprintf(fp, "  stroke\n"); 
+    }
+    else { 
+      fprintf(fp, "newpath\n");
+      fprintf(fp, "  %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]);
+      fprintf(fp, "  %.2f %.2f moveto", x, y);
+      fprintf(fp, "  %.1f %.1f rlineto closepath\n", cellsize, cellsize);
+      fprintf(fp, "  stroke\n"); 
+      fprintf(fp, "newpath\n");
+      fprintf(fp, "  %.2f %.2f moveto", x + cellsize, y);
+      fprintf(fp, "  -%.1f %.1f rlineto closepath\n", cellsize, cellsize);
+      fprintf(fp, "  stroke\n"); 
+    }
+  }
+  return eslOK;
+}
+
+/* Function: validate_justread_sspostscript()
+ * 
+ * Purpose:  Validate a sspostscript just created by parsing
+ *           a template file. Nothing fancy here, just make
+ *           sure all we've written everything we expect.
+ */ 
+static int 
+validate_justread_sspostscript(SSPostscript_t *ps, char *errbuf)
+{
+  if(ps->modelname == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read modelname from template file.");
+  if(ps->nbp == 0)          ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read 'lines bpconnects' section from template file.");
+  if(ps->scale < 0)         ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read scale from template file.");
+  if(ps->rflen == 0)        ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read 'text nucleotides' section from template file.");
+  if(ps->leg_posn == -1)    ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read 'legend' section from template file.");
+  if(ps->leg_cellsize == -1) ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read 'legend' section from template file.");
+
+  /* Stuff we don't currently require, but we may want to eventually */
+  /*if(ps->nposntext == 0) ESL_FAIL(eslEINVAL, errbuf, "validate_justread_sspostscript(), failed to read 'text positiontext' section from template file.");*/
+  /*if(ps->nticks == 0) ESL_FAIL(eslEINVAL, errbuf, "validate_justread_sspostscript(), failed to read 'lines positionticks' section from template file.");*/
+  /*if(ps->nbp == 0) ESL_FAIL(eslEINVAL, errbuf, "validate_justread_sspostscript(), failed to read 'lines bpconnects' section from template file.");*/
+
+  return eslOK;
+}
+
+
+/* Function: validate_and_update_sspostscript_given_msa()
+ * 
+ * Purpose:  Validate that a sspostscript works with a MSA.
+ */ 
+static int 
+validate_and_update_sspostscript_given_msa(const ESL_GETOPTS *go, const ESL_ALPHABET *abc, SSPostscript_t *ps, ESL_MSA *msa, int msa_nseq, char *errbuf)
+{
+  int status;
+  int *msa_ct;
+  int msa_nbp = 0;
+  int *tmp_ct;
+  int apos, rfpos_i, rfpos_j, rfpos;
+  int *rf2a_map = NULL;
+  int *a2rf_map = NULL;
+  int rflen = 0;
+
+  ps->msa = msa;
+  ps->abc = abc;
+
+  /* contract check */
+  if(msa->rf == NULL)      ESL_FAIL(eslEINVAL, errbuf, "Error, msa does not have RF annotation.");
+  if(msa->ss_cons == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, msa does not have SS_cons annotation.");
+
+  /* count non-gap RF columns */
+  for(apos = 0; apos < msa->alen; apos++) { 
+    if(esl_abc_CIsResidue(abc, msa->rf[apos]))
+      rflen++;
+  }
+  if(ps->rflen != rflen) ESL_FAIL(eslEINVAL, errbuf, "validate_and_update_sspostscript_given_msa(), expected consensus length of %d in MSA, but read %d\n", ps->rflen, rflen);
+
+  /* build map of non-gap RF positions to alignment positions and vice versa */
+  ESL_ALLOC(rf2a_map, sizeof(int) * rflen);
+  ESL_ALLOC(a2rf_map, sizeof(int) * msa->alen);
+  esl_vec_ISet(a2rf_map, msa->alen, -1); 
+  rfpos = 0;
+  for(apos = 0; apos < msa->alen; apos++) {
+    if(esl_abc_CIsResidue(abc, msa->rf[apos])) {
+      rf2a_map[rfpos] = apos;
+      a2rf_map[apos]  = rfpos;
+      rfpos++;
+    }
+  }
+
+  /* get the CT array for this msa */
+  ESL_ALLOC(tmp_ct, sizeof(int) * (msa->alen+1));
+  if (esl_wuss2ct(msa->ss_cons, msa->alen, tmp_ct) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "Problem getting ct from SS_cons, does first alignment of MSA file have SS_cons annotation?");
+
+  ESL_ALLOC(msa_ct, sizeof(int) * (rflen+1));
+  esl_vec_ISet(msa_ct, rflen+1, 0);
+  
+  /* convert tmp_ct which is in alignment coords [1..alen] to non-gap RF coords [1..rflen]*/
+  for(apos = 0; apos < msa->alen; apos++) {
+    if(tmp_ct[apos+1] > (apos+1)) { 
+      rfpos_i = a2rf_map[apos];
+      rfpos_j = a2rf_map[tmp_ct[apos+1]-1];
+      if(rfpos_i != -1 && rfpos_j != -1) { /* a consensus basepair */
+	msa_ct[rfpos_i+1] = rfpos_j+1;
+	msa_ct[rfpos_j+1] = rfpos_i+1;
+	msa_nbp++;
+      }
+    }
+  }
+  free(tmp_ct);
+  if(ps->nbp != 0 && ps->nbp != msa_nbp) ESL_FAIL(eslEINVAL, errbuf, "validate_and_update_sspostscript_given_msa(), expected %d basepairs in MSA's SS_cons, but read %d\n", ps->nbp, msa_nbp);
+
+  /* for(rfpos = 0; rfpos < rflen; rfpos++) printf("ct %5d %5d\n", rfpos, msa_ct[rfpos+1]-1); */
+
+  if(ps->msa_ct != NULL) { free(ps->msa_ct); ps->msa_ct = NULL;}
+  if(ps->msa_rf2a_map != NULL) { free(ps->msa_rf2a_map); ps->msa_rf2a_map = NULL; }
+  if(ps->msa_a2rf_map != NULL) { free(ps->msa_a2rf_map); ps->msa_a2rf_map = NULL; }
+  ps->msa_ct = msa_ct;
+  ps->msa_nbp = msa_nbp;
+  ps->msa_ct = msa_ct;
+  ps->msa_rf2a_map = rf2a_map;
+  ps->msa_a2rf_map = a2rf_map;
+  ps->msa_nseq = msa_nseq;
+
+  return eslOK;
+
+ ERROR:
+  ESL_FAIL(status, errbuf, "validate_and_update_sspostscript_given_msa(), error status %d, probably out of memory.\n", status);
+  return status; 
+}
+
+
+/* Function: draw_header_and_footer()
+ * 
+ * Purpose:  Draw header for a page
+ */ 
+static int 
+draw_header_and_footer(FILE *fp, const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int page, int pageidx2print)
+{
+  int status;
+  int i, split_idx;
+  float x, y;
+  float header_fontsize;
+  int model_width, desc_width, desc_column_width;
+  char *model_dashes, *desc_dashes, *desc2print;
+  char *desc_string = NULL;
+  float xmodel;
+  char *model2print = NULL;
+  float footer_fontsize, footerx_charsize;
+
+  header_fontsize = HEADER_FONTSIZE_UNSCALED / ps->scale; 
+
+  fprintf(fp, "%% begin header section\n");
+  fprintf(fp, "/%s findfont %.2f scalefont setfont\n", DEFAULT_FONT, header_fontsize);
+  fprintf(fp, "0.00 0.00 0.00 1.00 setcmykcolor\n"); /* black */
+
+  if(! (esl_opt_GetBoolean(go, "--no-head"))) { 
+    model_width = ESL_MAX(strlen("model"), (int) strlen(ps->modelname));
+    if(model_width > HEADER_MODELNAME_MAXCHARS) { 
+      ESL_ALLOC(model2print, sizeof(char) * (HEADER_MODELNAME_MAXCHARS+1));
+      for(i = 0; i < (HEADER_MODELNAME_MAXCHARS-3); i++) model2print[i] = ps->modelname[i];
+      model2print[HEADER_MODELNAME_MAXCHARS-3] = '.';
+      model2print[HEADER_MODELNAME_MAXCHARS-2] = '.';
+      model2print[HEADER_MODELNAME_MAXCHARS-1] = '.';
+      model2print[HEADER_MODELNAME_MAXCHARS] = '\0';
+    }
+    else { 
+      if((status = esl_strdup(ps->modelname, -1, &(model2print))) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "draw_header_and_footer(), error copying modelname");
+    }
+    
+    model_width = ESL_MIN(model_width, HEADER_MODELNAME_MAXCHARS);
+    ESL_ALLOC(model_dashes, sizeof(char) * (model_width+1));
+    for(i = 0; i < model_width; i++) model_dashes[i] = '-'; 
+    model_dashes[model_width] = '\0';
+    
+    if(ps->modeA[page] == ALIMODE || ps->modeA[page] == SIMPLEMASKMODE) { 
+      if((status = esl_strdup("description", -1, &(desc_string))) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "draw_header_and_footer(), error copying description");
+    }
+    else if(ps->modeA[page] == INDIMODE) { 
+      if((status = esl_strdup("sequence name", -1, &(desc_string))) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "draw_header_and_footer(), error copying description");
+    }
+    
+    xmodel = ps->headerx_desc - (ps->headerx_charsize * (model_width  + 6 + 6 + 8 + 2)); /*6,6,8 for #pos,#bps,#seq|seqlen) plus 2 spaces each, first 2 for 2 spaces before desc*/
+    x = xmodel;
+    y = ps->headery;
+    
+    fprintf(fp, "(%-*s  %4s  %4s) %.2f %.2f moveto show\n", model_width, "model", "#pos", "#bps", x, y);
+    y -= header_fontsize * 0.75;
+    fprintf(fp, "(%-*s  %4s  %4s) %.2f %.2f moveto show\n", model_width, model_dashes, "----", "----", x, y);
+    y -= header_fontsize * 0.75;
+    fprintf(fp, "(%-*s  %4d  %4d) %.2f %.2f moveto show\n", model_width, model2print, ps->rflen, ps->msa_nbp, x, y);
+    free(model_dashes);
+    x += (model_width + 6 + 6 +2) * ps->headerx_charsize;
+    
+    if(ps->modeA[page] == ALIMODE) { 
+      y+= header_fontsize * 1.5;
+      fprintf(fp, "(%6s) %.2f %.2f moveto show\n", "#seqs", x, y);
+      y -= header_fontsize * 0.75;
+      fprintf(fp, "(%6s) %.2f %.2f moveto show\n", "------", x, y);
+      y -= header_fontsize * 0.75;
+      fprintf(fp, "(%6d) %.2f %.2f moveto show", ps->msa_nseq, x, y);
+    }
+    else if(ps->modeA[page] == INDIMODE && (ps->seqidxA[page] != -1)) { /* ps->seqidxA[page] == -1 if we're printing the consensus sequence */
+      y+= header_fontsize * 1.5;
+      fprintf(fp, "(%6s) %.2f %.2f moveto show\n", "seqlen", x, y);
+      y -= header_fontsize * 0.75;
+      fprintf(fp, "(%6s) %.2f %.2f moveto show\n", "------", x, y);
+      y -= header_fontsize * 0.75;
+      fprintf(fp, "(%6d) %.2f %.2f moveto show", ps->uaseqlenA[ps->seqidxA[page]], x, y);
+    }
+    
+    if(ps->descA[page] != NULL) { 
+      x =  ps->headerx_desc;
+      y += 2. * header_fontsize * 0.75;
+      desc_width = ESL_MAX((int) strlen(desc_string), (int) strlen(ps->descA[page]));
+      if(desc_width > ps->desc_max_chars) { 
+	/* split into two lines, the add_page_desc_to_sspostscript() function added a '\n' where the split should be */
+	i = 0; 
+	while(ps->descA[page][i] != '\n') { 
+	  i++; 
+	  if(i >= desc_width) ESL_FAIL(eslEINVAL, errbuf, "drawing header, failed to find split point from add_page_desc_to_() in two-line description (%s)", ps->descA[page]);
+	}
+	split_idx = i;
+	desc_column_width = split_idx;
+      }
+      else desc_column_width = desc_width;
+      
+      ESL_ALLOC(desc_dashes, sizeof(char) * (desc_column_width+1));
+      for(i = 0; i < desc_column_width; i++) desc_dashes[i] = '-'; 
+      desc_dashes[desc_column_width] = '\0';
+      
+      fprintf(fp, "(%-*s) %.2f %.2f moveto show\n", desc_column_width, desc_string, x, y);
+      y -= header_fontsize * 0.75;
+      free(desc_string);
+      fprintf(fp, "(%-*s) %.2f %.2f moveto show\n", desc_column_width, desc_dashes, x, y);
+      y -= header_fontsize * 0.75;
+      free(desc_dashes);
+      
+      if(desc_width > ps->desc_max_chars) {
+	ESL_ALLOC(desc2print, sizeof(char) * (split_idx+1));
+	for(i = 0; i < split_idx; i++) desc2print[i] = ps->descA[page][i];
+	desc2print[split_idx] = '\0';
+	fprintf(fp, "(%-*s) %.2f %.2f moveto show\n", desc_column_width, desc2print, x, y);
+	free(desc2print);
+	
+	x = ps->headerx_desc;
+	y-= ps->headery_charsize * 1;
+	ESL_ALLOC(desc2print, sizeof(char) * ((desc_width - split_idx) -1+1));
+	for(i = split_idx+1; i < desc_width; i++) desc2print[(i-(split_idx+1))] = ps->descA[page][i];
+	desc2print[(desc_width-(split_idx+1))] = '\0';
+	fprintf(fp, "(%-*s) %.2f %.2f moveto show\n", desc_column_width, desc2print, x, y);
+	free(desc2print);
+      }
+      else { 
+	fprintf(fp, "(%-*s) %.2f %.2f moveto show\n", desc_width, ps->descA[page], x, y);
+      }
+    }
+    /* masked row of header goes here if desired */
+  }
+  fprintf(fp, "%% end header section\n\n");
+
+  /* draw footer */
+  footer_fontsize = LEG_FONTSIZE_UNSCALED / ps->scale;
+  footerx_charsize = ps->legx_charsize;
+  
+  if(! (esl_opt_GetBoolean(go, "--no-foot"))) { 
+    fprintf(fp, "%% begin footer section\n");
+    fprintf(fp, "/%s findfont %.2f scalefont setfont\n", FOOTER_FONT, footer_fontsize);
+    /* draw alignment file name in lower left hand corner */
+    if(ps->mask != NULL) { 
+      if(esl_opt_GetString(go, "--mask-diff") != NULL) { 
+	fprintf(fp, "(alignment file: %s; mask 1 file: %s; mask 2 file: %s;) %.2f %.2f moveto show\n", esl_opt_GetArg(go, 1), esl_opt_GetString(go, "--mask"), esl_opt_GetString(go, "--mask-diff"), PAGE_SIDEBUF, PAGE_BOTBUF);
+      }
+      else { 
+	fprintf(fp, "(alignment file: %s; mask file: %s;) %.2f %.2f moveto show\n", esl_opt_GetArg(go, 1), esl_opt_GetString(go, "--mask"), PAGE_SIDEBUF, PAGE_BOTBUF);
+      }
+    }
+    else { 
+      fprintf(fp, "(alignment file: %s) %.2f %.2f moveto show\n", esl_opt_GetArg(go, 1), PAGE_SIDEBUF, PAGE_BOTBUF);
+    }
+
+    /* put page number */
+    /* determine ndigits */
+    int tmp, ndigits;
+    tmp = pageidx2print;
+    ndigits = 1;
+    while(tmp >= 10) { tmp /= 10; ndigits++; }
+    x = ps->pagex_max - (PAGE_SIDEBUF) - (footerx_charsize * (5 + ndigits)); 
+    fprintf(fp, "(page %d) %.2f %.2f moveto show\n", pageidx2print, x, PAGE_BOTBUF);
+    
+    /* fprintf(fp, "(Created by \'esl-ssdraw\'. Copyright (C) 2010 Howard Hughes Medical Institute.) %.2f %.2f moveto show \n", PAGE_SIDEBUF , PAGE_BOTBUF); */
+    fprintf(fp, "%% end footer section\n\n");
+  }
+
+  if(model2print != NULL) free(model2print);
+  return eslOK;
+
+ ERROR: ESL_FAIL(eslEINVAL, errbuf, "draw_header_and_footer(), memory error.");
+}
+
+/* Function: get_insert_info_from_msa
+ * Date:     EPN, Fri Dec  4 13:52:53 2009
+ * 
+ * Read an MSA with #=GC RF annotation defining
+ * consensus columns and count how many insertions
+ * occur after each consensus column for each sequence.
+ * 
+ * msa         - the alignment
+ * rflen       - expected nongap RF length (consensus length)
+ * ret_nseq_with_ins_ct - [0..rflen] number of sequences with >= 1 
+ *               insert after each position. NULL if unwanted.
+ * ret_nins_ct - [0..rflen] total number of inserted nucleotides 
+ *               after each position. NULL if unwanted.
+ * ret_per_seq_ins_ct - [0..i..msa->nseq-1][0..rflen] number of inserts 
+ *                      insert after each position per sequence. NULL if unwanted.
+ * 
+ * Returns void. Dies with an informative error message upon an error.
+ */
+void
+get_insert_info_from_msa(const ESL_ALPHABET *abc, ESL_MSA *msa, int rflen, int **ret_nseq_with_ins_ct, int **ret_nins_ct, int ***ret_per_seq_ins_ct)
+{
+  int             status;
+  int             i;
+  int            *nseq_with_ins_ct = NULL;
+  int            *nins_ct = NULL;
+  int           **per_seq_ins_ct = NULL;
+  int             rfpos, apos;
+
+  /* contract check */
+  if(msa->rf == NULL) esl_fatal("Error in get_insert_info_from_msa(), msa->rf is NULL.");
+
+  /* allocate and initialize */
+  ESL_ALLOC(nseq_with_ins_ct, sizeof(int) * (rflen+1));
+  esl_vec_ISet(nseq_with_ins_ct, rflen+1, 0);
+  ESL_ALLOC(nins_ct, sizeof(int) * (rflen+1));
+  esl_vec_ISet(nins_ct, rflen+1, 0);
+  ESL_ALLOC(per_seq_ins_ct, sizeof(int *) * (msa->nseq));
+  for(i = 0; i < msa->nseq; i++) { 
+    ESL_ALLOC(per_seq_ins_ct[i],  sizeof(int) * (rflen+1));
+    esl_vec_ISet(per_seq_ins_ct[i], (rflen+1), 0);
+  }
+
+  /* fill per_seq_ins_ct, nseq_with_ins_ct */
+  rfpos = 0;
+  for(apos = 0; apos < msa->alen; apos++) { 
+    if(esl_abc_CIsResidue(abc, msa->rf[apos])) {
+      rfpos++;
+      if(rfpos > rflen) esl_fatal("Error in get_insert_info_from_msa(), expected consensus length (%d) is incorrect."); 
+    }
+    else { 
+      for(i = 0; i < msa->nseq; i++) { 
+	if(! esl_abc_CIsGap(abc, msa->aseq[i][apos])) { 
+	  per_seq_ins_ct[i][rfpos]++;
+	  nins_ct[rfpos]++;
+	  if(per_seq_ins_ct[i][rfpos] == 1) nseq_with_ins_ct[rfpos]++;
+	}	  
+      }
+    }
+  }
+
+  if(ret_nseq_with_ins_ct != NULL) *ret_nseq_with_ins_ct = nseq_with_ins_ct;
+  else free(nseq_with_ins_ct);
+  if(ret_nins_ct != NULL) *ret_nins_ct = nins_ct;
+  else free(nins_ct);
+  if(ret_per_seq_ins_ct != NULL) *ret_per_seq_ins_ct = per_seq_ins_ct;
+  else esl_Free2D((void **) per_seq_ins_ct, msa->nseq);
+
+  return;
+
+ ERROR:
+  esl_fatal("Error in get_insert_info_from_msa(), memory allocation error.");
+  return; /* NEVERREACHED */
+}
+
+
+/* Function: get_insert_info_from_ifile
+ * Date:     EPN, Fri Dec  4 14:49:12 2009
+ * 
+ * Read a file output from Infernal's cmalign 
+ * when run with '--matchonly --ifile <f>' and
+ * fill *ret_ict[0..rflen][0..msa->nseq-1] number
+ * of inserts after each consensus position for 
+ * each sequence. 
+ * 
+ * We also keep track of cases where a count of
+ * the first and final nongap positions of all sequence
+ * per column would be incorrect IF the msa were
+ * to have all insert columns removed. These corrections
+ * are stored and returned in srfoff_ct and erfoff_ct
+ * as explained below.
+ *
+ * Format of an insert file (from the commented header of an ifile):
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * This file includes 2+<nseq> non-'#' pre-fixed lines per model used for alignment,
+ * where <nseq> is the number of sequences in the target file.
+ * The first non-'#' prefixed line per model includes 2 tokens, separated by a single space (' '):
+ * The first token is the model name and the second is the consensus length of the model (<clen>).
+ * The following <nseq> lines include (4+3*<n>) whitespace delimited tokens per line.
+ * The format for these <nseq> lines is:
+ *   <seqname> <seqlen> <spos> <epos> <c_1> <u_1> <i_1> <c_2> <u_2> <i_2> .... <c_x> <u_x> <i_x> .... <c_n> <u_n> <i_n>
+ *   indicating <seqname> has >= 1 inserted nucleotides after <n> different consensus positions,
+ *   <seqname> is the name of the sequence
+ *   <seqlen>  is the unaligned length of the sequence
+ *   <spos>    is the first (5'-most) consensus position filled by a nongap for this sequence (-1 if 0 nongap consensus posns)
+ *   <epos>    is the final (3'-most) consensus position filled by a nongap for this sequence (-1 if 0 nongap consensus posns)
+ *   <seqlen>  is the unaligned length of the sequence
+ *   <c_x> is a consensus position (between 1 and <clen>; if 0 inserts occur before 1st consensus posn)
+ *   <u_x> is the *unaligned* position (b/t 1 and <seqlen>) in <seqname> of the first inserted nucleotide after <c_x>.
+ *   <i_x> is the number of inserted nucleotides after position <c_x> for <seqname>.
+ * Lines for sequences with 0 inserted nucleotides will include only <seqname> <seqlen>.
+ * The final non-'#' prefixed line per model includes only '//', indicating the end of info for a model.
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * 
+ * Example: 
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * tRNA 71
+ * tRNA-1 67 1 71  17 15 1
+ * tRNA-2 71 1 71  20 20 1
+ * tRNA-3 70 1 71  45 41 3  46 44 1
+ * tRNA-4 71 1 71
+ * tRNA-5 69 1 71  46 44 1
+ * tRNA-6 70 1 71
+ * tRNA-7 67 1 71
+ * tRNA-8 71 1 71  17 16 1
+ * tRNA-9 67 1 71
+ * tRNA-10 73 1 71  45 44 4
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * 
+ * ifile         - name of ifile
+ * rflen         - expected nongap RF length (consensus length)
+ * msa_nseq      - expected number of sequences
+ * useme_keyhash - keyhash with names of sequences for which we will store insert info
+ *                 if NULL, we store insert info for all seqs.
+ * ret_nseq_with_ins_ct  - [0..rflen] number of sequences with >= 1 inserts
+ *                         after each RF position. 
+ *                         Note [0] is before first posn, [1] is after first posn, [rflen] is after last one
+ * ret_nins_ct           - [0..rflen] total number of inserted nucleotides (over all seqs) after each RF position. 
+ *                         Note [0] is before first posn, [1] is after first posn, [rflen] is after last one
+ * ret_per_seq_ins_ct    - [0..i..msa->nseq-1][0..rflen number of inserts
+ *                         after each position for each sequence.
+ *                         Filled here.
+ * 
+ * ret_srfoff_ct - [0..rfpos..rflen-1] count adjustment to make to a spos_ct[rfpos] if it 
+ *                 were obtained from an alignment with inserts removed, this value is <a>+<b>,
+ *                 where <a> is : -1 times the number of sequences that have their first nongap 
+ *                 RF position as rfpos, but include an insert before an rfpos2 < rfpos. 
+ *                 and <b> is : +1 times the number of sequences that have their first nongap
+ *                 RF position as rfpos3, but have an insert before rfpos < rfpos3. 
+ *                 We can only determine these cases when we read the ifile, since the
+ *                 msa has had inserts removed.
+ *                 NOTE a nasty off-by-one: RF (consensus) positions in the ifile are indexed 1..rflen
+ * 
+ * ret_erfoff_ct - [0..rfpos..rflen-1] count adjustment to make to a epos_ct[rfpos] if it 
+ *                 were obtained from an alignment with inserts removed, this value is <a>+<b>,
+ *                 where <a> is : -1 times the number of sequences that have their final nongap 
+ *                 RF position as rfpos, but include an insert after an rfpos2 > rfpos. 
+ *                 and <b> is : +1 times the number of sequences that have their final nongap
+ *                 RF position as rfpos3, but have an insert after rfpos > rfpos3. 
+ *                 We can only determine these cases when we read the ifile, since the
+ *                 msa has had inserts removed.
+ *                 NOTE a nasty off-by-one: RF (consensus) positions in the ifile are indexed 1..rflen
+ *
+ * Returns void. Dies with an informative error message on an error.
+ */
+void
+get_insert_info_from_ifile(char *ifile, int rflen, int msa_nseq, ESL_KEYHASH *useme_keyhash, int **ret_nseq_with_ins_ct, int **ret_nins_ct, int ***ret_per_seq_ins_ct, int **ret_srfoff_ct, int **ret_erfoff_ct)
+{
+  int             status;
+  ESL_FILEPARSER *efp;
+  char           *tok;
+  int             nseq_read = 0;
+  int             nseq_stored = 0;
+  int           **per_seq_ins_ct = NULL;
+  int            *nins_ct = NULL;
+  int            *nseq_with_ins_ct = NULL;
+  int             nins;
+  int             i;
+  int             rfpos; /* current nongap RF position */
+  int             uapos; /* unaligned position for current sequence */
+  
+  int             seen_model_name_line = FALSE;
+  int             seen_end_of_model_line = FALSE;
+  int             nseq2store;     /* number of seqs we'll store insert info on */
+  int             seqlen;         /* sequence length for current sequence, read from ifile */
+  int             spos;           /* first (5'-most) nongap consensus position for current sequence, read from ifile */
+  int             epos;           /* final (3'-most) nongap consensus position for current sequence, read from ifile */
+  int            *srfoff_ct = NULL; /* [0..rfpos..rflen-1] correction for spos_ct[rfpos], add this value to spos_ct
+				     * to correct the miscounting that occurs if the msa has had all inserts removed, but
+				     * an insert file with insert info has been supplied and is read in this function */
+  int            *erfoff_ct = NULL; /* [0..rfpos..rflen-1] correction for epos_ct[rfpos] (analagous to srfoff_ct) */
+  int             already_handled_special_spos = FALSE;
+  int             prv_e_increment, prv_e_decrement; 
+
+  if (esl_fileparser_Open(ifile, NULL, &efp) != eslOK) esl_fatal("Error: failed to open insert file %s\n", ifile);
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  /* determine how many sequences we'll be storing info for */
+  nseq2store = (useme_keyhash == NULL) ? msa_nseq : esl_keyhash_GetNumber(useme_keyhash);
+
+  /* allocate and initialize */
+  ESL_ALLOC(nseq_with_ins_ct, sizeof(int) * (rflen+1));
+  esl_vec_ISet(nseq_with_ins_ct, rflen+1, 0);
+
+  ESL_ALLOC(nins_ct, sizeof(int) * (rflen+1));
+  esl_vec_ISet(nins_ct, rflen+1, 0);
+
+  if(ret_srfoff_ct != NULL) { 
+    ESL_ALLOC(srfoff_ct, sizeof(int) * rflen);
+    esl_vec_ISet(srfoff_ct, rflen, 0);
+  }
+  if(ret_erfoff_ct != NULL) { 
+    ESL_ALLOC(erfoff_ct, sizeof(int) * rflen);
+    esl_vec_ISet(erfoff_ct, rflen, 0);
+  }
+  if(ret_per_seq_ins_ct != NULL) { 
+    ESL_ALLOC(per_seq_ins_ct, sizeof(int *) * (nseq2store));
+    for(i = 0; i < nseq2store; i++) { 
+      ESL_ALLOC(per_seq_ins_ct[i],  sizeof(int) * (rflen+1));
+      esl_vec_ISet(per_seq_ins_ct[i], (rflen+1), 0);
+    }
+  }
+
+  /* Read the file, verify that it contains the correct number of sequences and the
+   * consensus length(s) listed in the file agrees with expected rflen. 
+   * Special care is taken to allow concatenated ifiles, so we may see more than 
+   * one // lines, but the total number of seqs should match what we expect. 
+   */
+  i = 0;
+  while (esl_fileparser_NextLine(efp) == eslOK) { 
+    if (esl_fileparser_GetTokenOnLine(efp, &tok, NULL) != eslOK) { 
+      if(seen_model_name_line) esl_fatal("Error reading insert file, failed to read seq name on line %d of file %s\n", efp->linenumber, ifile);
+      else                     esl_fatal("Error reading insert file, failed to read model name on line %d of file %s\n", efp->linenumber, ifile);
+    }
+    if(! seen_model_name_line) { /* this should be a special line, 2 tokens: <cmname> <rflen>, verify that <rflen> is what we expect  */
+      seen_model_name_line   = TRUE;
+      seen_end_of_model_line = FALSE;
+      if (esl_fileparser_GetTokenOnLine(efp, &tok, NULL) != eslOK) {
+	esl_fatal("Error reading insert file, failed to read consensus length on line %d of file %s\n", efp->linenumber, ifile); 
+      }
+      if(rflen != atoi(tok)) {
+	esl_fatal("Error reading insert file, read consensus length of %d on line %d of file %s, but expected length %d\n", atoi(tok), efp->linenumber, ifile, rflen);
+      } 
+    }     
+    else if (strncmp(tok, "//", 2) == 0) { /* end of data for an ifile, but we may have concatenated them, so we keep going */
+      seen_model_name_line   = FALSE;
+      seen_end_of_model_line = TRUE;
+    }
+    else { /* should be a seq line with 1+3*n tokens, <seqlen> <rfpos_0> <uapos_0> <nins_0> ... <rfpos_n> <uapos_n> <nins_n>, n can be 0 */
+      /* determine if we're using this sequence */
+      i++;
+      if(useme_keyhash == NULL || (esl_keyhash_Lookup(useme_keyhash, tok, -1, NULL) == eslOK)) { 
+	already_handled_special_spos = FALSE;   /* initialize */
+	prv_e_decrement = prv_e_increment = -1; /* initialize */
+
+	if(esl_fileparser_GetTokenOnLine(efp, &tok, NULL) != eslOK) esl_fatal("Error reading insert file, failed to read unaligned length for sequence on line %d of file %s.\n", efp->linenumber, ifile); 
+	seqlen = atoi(tok);
+
+	if(esl_fileparser_GetTokenOnLine(efp, &tok, NULL) != eslOK) esl_fatal("Error reading insert file, failed to read first nongap consensus position for sequence on line %d of file %s.\n", efp->linenumber, ifile); 
+	spos = atoi(tok);
+	if(spos > rflen) esl_fatal("Error reading insert file, read spos of %d that exceeds expected consensus length %d on line %d of file %s.\n", spos, rflen, efp->linenumber, ifile);
+
+	if(esl_fileparser_GetTokenOnLine(efp, &tok, NULL) != eslOK) esl_fatal("Error reading insert file, failed to read final nongap consensus position for sequence on line %d of file %s.\n", efp->linenumber, ifile); 
+	epos = atoi(tok);
+	if(epos > rflen) esl_fatal("Error reading insert file, read epos of %d that exceeds expected consensus length %d on line %d of file %s.\n", epos, rflen, efp->linenumber, ifile);
+
+	if(spos == -1 && epos != -1) esl_fatal("insert file is corrupt, spos is -1 but epos is not -1, on line %d\n", efp->linenumber);
+	if(spos != -1 && epos == -1) esl_fatal("insert file is corrupt, spos is not -1 but epos is -1, on line %d\n", efp->linenumber);
+
+	while(esl_fileparser_GetTokenOnLine(efp, &tok, NULL) == eslOK) { 
+	  /* rfpos */
+	  rfpos = atoi(tok);
+	  if(rfpos > rflen) esl_fatal("Error reading insert file, read insert info for position %d that exceeds expected consensus length %d on line %d of file %s.\n", rfpos, rflen, efp->linenumber, ifile);
+
+	  /* uapos */
+	  if((status = esl_fileparser_GetTokenOnLine(efp, &tok, NULL)) != eslOK) esl_fatal("Error reading insert file, didn't read unaligned sequence position for rfpos %d on line %d of file %s.\n", rfpos, efp->linenumber, ifile);
+	  uapos = atoi(tok);
+	  if(uapos > seqlen) esl_fatal("Error reading insert file, read insert info for position %d that exceeds expected sequence length %d on line %d of file %s.\n", rfpos, seqlen, efp->linenumber, ifile);
+
+	  /* nins */
+	  if((status = esl_fileparser_GetTokenOnLine(efp, &tok, NULL)) != eslOK) esl_fatal("Error reading insert file, didn't read number of inserts for position %d on line %d of file %s.\n", rfpos, efp->linenumber, ifile);
+	  nins = atoi(tok);
+	  nins_ct[rfpos] += nins;
+	  if(per_seq_ins_ct != NULL) per_seq_ins_ct[nseq_stored][rfpos] = nins;
+	  if(nins > 0) nseq_with_ins_ct[rfpos]++; /* nins should always be > 0, but why not check?  */
+	  
+	  /* check for special cases where a spos_ct and epos_ct read from a de-inserted msa would be incorrect */
+	  if(spos != -1) { 
+	    /* Note, if spos == -1 (then epos also == -1, we checked above), then there are 0 nongap consensus positions for 
+	     * this sequence, and the spos and epos counts were never incremented for this sequence, so they don't need to be corrected. */
+
+	    /* First check if this insert is before spos-1 */
+	    if(srfoff_ct != NULL) {
+	      if((rfpos < (spos-1)) && (! already_handled_special_spos)) { /* we've got an insert *after* a position rfpos < (spos-1) for minimal rfpos */
+		/* Any function that counted the first RF position for this sequence if inserts were
+		 * removed thought it was spos, but an insert exists after rfpos<(spos-1), which means there
+		 * was an insert after rfpos, then a gap in at least 1 consensus position before the
+		 * first nongap consensus nucleotide at cpos. 
+		 * NOTE a nasty off-by-one: RF (consensus) positions in the ifile are indexed 1..rflen, whereas srfoff_ct is 0..rflen-1 */
+		srfoff_ct[(spos-1)]--;    /* this position was overcounted */
+		srfoff_ct[(rfpos-1)+1]++; /* this position was undercounted, we do +1 because insert occured after rfpos */
+		/* printf("decremented srfoff_ct[%d] for seq %d\n", spos-1, i);
+		   printf("incremented srfoff_ct[%d] for seq %d\n", rfpos-1+1, i);
+		*/
+		already_handled_special_spos = TRUE; /* if another rfpos is less than (spos-1) we don't care, we already fixed s_rfoff_ct */
+	      }
+	    }
+
+	    /* Now check if this insert is after epos */
+	    if(erfoff_ct != NULL) { 
+	      if(rfpos > epos) { /* we've got an insert *after* a position rfpos > epos */
+		/* Any function that counted the final RF position for this sequence if inserts were
+		 * removed thought it was epos, but an insert exists after rfpos>epos, which means there
+		 * was a gap in at least one consensus position cpos > epos (cpos <= rfpos) and then inserts 
+		 * after rfpos. 
+		 * NOTE a nasty off-by-one: RF (consensus) positions in the ifile are indexed 1..rflen, whereas srfoff_ct is 0..rflen-1 */
+		erfoff_ct[(epos-1)]--;  /* this position was overcounted */
+		erfoff_ct[(rfpos-1)]++; /* this position was undercounted */
+		
+		/* BUT, be careful, we could have already entered this 'if' for this sequence, if so we need to negate
+		 * the previous time we incremented and decremented. 
+		 * NOTE this case and corresponding code only applies to epos (not spos) b/c with spos
+		 * its the first case only that we want to handle (which is why we use the already_handled_special_spos FLAG) */
+		if(prv_e_decrement != -1 && prv_e_increment != -1) { 
+		  erfoff_ct[prv_e_increment]--;    /* undo increment with a decrement */
+		  erfoff_ct[prv_e_decrement]++;    /* undo decrement with an increment */
+		  prv_e_decrement = (epos-1);
+		  prv_e_increment = (rfpos-1);
+		}
+	      }
+	    }
+	  }
+	}
+	nseq_stored++;
+      }
+      nseq_read++;
+      if(nseq_read > msa_nseq) esl_fatal("Error reading insert file, read info for more sequences than expected (%d) at line %d of file %s.", msa_nseq, efp->linenumber, ifile);
+    }
+  }
+  esl_fileparser_Close(efp);
+
+  /* end of file, make sure we read a '//' at the end of it */
+  if(! seen_end_of_model_line) esl_fatal("Error reading insert file, didn't read the special '//' line at the end of file %s.\n", rfpos, efp->linenumber, ifile);
+
+  /* if useme_keyhash != NULL, make sure we read all the seqs we wanted to */
+  if((useme_keyhash != NULL) && (nseq_stored != nseq2store)) { 
+    esl_fatal("Error reading insert file, wanted to read insert info on %d seqs, but only found %d of them in the insert file %s\n", nseq2store, nseq_stored, ifile);      
+  }
+  if(nseq_read != msa_nseq)  esl_fatal("Error reading insert file, expected to read info on %d seqs, but only found %d in the insert file %s\n", msa_nseq, nseq_read, ifile);      
+
+  if      (ret_nins_ct          != NULL) *ret_nins_ct = nins_ct;
+  else                                   free(nins_ct);
+  if      (ret_nseq_with_ins_ct != NULL) *ret_nseq_with_ins_ct = nseq_with_ins_ct;
+  else                                   free(nseq_with_ins_ct);
+  if      (ret_srfoff_ct        != NULL) *ret_srfoff_ct = srfoff_ct;
+  else if (srfoff_ct            != NULL) free(srfoff_ct);
+  if      (ret_erfoff_ct        != NULL) *ret_erfoff_ct = erfoff_ct;
+  else if (erfoff_ct            != NULL) free(erfoff_ct);
+  if      (ret_per_seq_ins_ct   != NULL) *ret_per_seq_ins_ct = per_seq_ins_ct;
+  else if (per_seq_ins_ct       != NULL) esl_Free2D((void **) per_seq_ins_ct, msa_nseq);
+
+  return;
+
+ ERROR:
+  esl_fatal("Memory allocation error while reading insert file %s.", ifile);
+  return;; /* NEVERREACHED */
+}
+
+/* Function: get_insert_info_from_abc_ct
+ * Date:     EPN, Tue Jan 19 09:32:30 2010
+ * 
+ * Given an abc_ct array:
+ * [0..apos..alen-1][0..abc->K]: per position count of 
+ * each symbol in alphabet over all seqs. 
+ * 
+ * Determine the number of sequences with >= 1 inserted
+ * nucleotides after each RF position.
+ *  
+ * IMPORTANT NOTE: This is done based on the assumption that inserts
+ * have been systematically placed in the MSA by a program like
+ * Infernal or HMMER and that the maximum number of nongap nucleotides in
+ * any insert position after rfpos is the number of sequences with >=1
+ * insert nucleotides after rfpos. However, if the alignments were not
+ * generated from HMMER nor Infernal, or have been modified, the
+ * inserts may not follow this rule (the rule, in other words is that
+ * there is always 1 insert column after each nongap RF position rfpos
+ * that includes a nucleotide from all sequences that have >= 1 inserted
+ * nucleotides after rfpos).
+ * 
+ * abc_ct      - [0..apos..msa_alen-1][0..abc->K] count of each nucleotide in each position 
+ * abc         - the alphabet
+ * msa_rf      - msa->rf, the reference annotation 
+ * msa->alen   - length of alignment
+ * rflen       - expected nongap RF length (consensus length)
+ * ret_nseq_with_ins_ct - [0..rflen]  number of sequences with >= 1 
+ *               insert after each position. NULL if unwanted.
+ * ret_nins_ct - [0..rflen] total number of inserted nucleotides (over
+ *               all sequences after each position. NULL if unwanted.
+ * 
+ * Returns void. Dies with an informative error message upon an error.
+ */
+void
+get_insert_info_from_abc_ct(double **abc_ct, ESL_ALPHABET *abc, char *msa_rf, int64_t msa_alen, int rflen, int **ret_nseq_with_ins_ct, int **ret_nins_ct)
+{
+  int             status;
+  int            *nins_ct;
+  int            *nseq_with_ins_ct;
+  int             nins, nmaxins;
+  int             rfpos, apos;
+
+  /* allocate and initialize */
+  ESL_ALLOC(nseq_with_ins_ct, sizeof(int) * (rflen+1));
+  esl_vec_ISet(nseq_with_ins_ct, rflen+1, 0);
+  ESL_ALLOC(nins_ct, sizeof(int) * (rflen+1));
+  esl_vec_ISet(nins_ct, rflen+1, 0);
+
+  nmaxins = 0;
+  rfpos = 0;
+  for(apos = 0; apos < msa_alen; apos++) { 
+    if(esl_abc_CIsResidue(abc, msa_rf[apos])) { 
+      nseq_with_ins_ct[rfpos] = nmaxins;
+      nmaxins = 0;
+      rfpos++;
+      if(rfpos > rflen) esl_fatal("Error in get_insert_info_from_abc_ct(), expected consensus length (%d) is incorrect."); 
+    }
+    else { 
+      nins = (int) esl_vec_DSum(abc_ct[apos], abc->K); 
+      nins_ct[rfpos] += nins;
+      nmaxins = ESL_MAX(nmaxins, nins);
+    }
+  }
+  /* get max_nseq with inserts after the final position */
+  nseq_with_ins_ct[rfpos] = nmaxins;
+
+  if(ret_nins_ct          != NULL) *ret_nins_ct          = nins_ct;
+  else free(nins_ct);
+  if(ret_nseq_with_ins_ct != NULL) *ret_nseq_with_ins_ct = nseq_with_ins_ct;
+  else free(nseq_with_ins_ct);
+
+  return;
+
+ ERROR:
+  esl_fatal("Error in get_insert_info_from_abc_ct(), memory allocation error.");
+  return; /* NEVERREACHED */
+}
+
+/* get_pp_idx
+ *                   
+ * Given a #=GR PP or #=GC PP_cons character, return the appropriate index
+ * in a pp_ct[] vector. 
+ * '0' return 0;
+ * '1' return 1;
+ * '2' return 2;
+ * '3' return 3;
+ * '4' return 4;
+ * '5' return 5;
+ * '6' return 6;
+ * '7' return 7;
+ * '8' return 8;
+ * '9' return 9;
+ * '*' return 10;
+ * gap return 11;
+ * 
+ * Anything else (including missing or nonnucleotide) return -1;
+ */
+int
+get_pp_idx(const ESL_ALPHABET *abc, char ppchar)
+{
+  if(esl_abc_CIsGap(abc, ppchar)) return 11;
+  if(ppchar == '*')               return 10;
+  if(ppchar == '9')               return 9;
+  if(ppchar == '8')               return 8;
+  if(ppchar == '7')               return 7;
+  if(ppchar == '6')               return 6;
+  if(ppchar == '5')               return 5;
+  if(ppchar == '4')               return 4;
+  if(ppchar == '3')               return 3;
+  if(ppchar == '2')               return 2;
+  if(ppchar == '1')               return 1;
+  if(ppchar == '0')               return 0;
+  return -1;
+}
+
+/* spos_and_epos2span_ct
+ *                   
+ * Given two arrays, spos_ct[0..apos..alen-1] and epos_ct[0..apos..alen-1], 
+ * specifying the number of sequences for which the first and last non-gap
+ * position is apos, calculate the number of sequences that 'span' each RF
+ * position. A sequence spans position rfpos which is actually alignment
+ * position apos, it has at least one nongap nucleotide in a position x <= apos, 
+ * and at least one nucleotide in a position y, y >= apos.
+ * 
+ * As a special case, if alen == rflen and srfoff_ct != NULL and erfoff_ct != NULL,
+ * then we've read an insert file (with --ifile) which has given us information
+ * that we'll use to update spos_ct and epos_ct. In this case, the inserts
+ * have been removed from the alignment but it is possible that spos_ct and 
+ * epos_ct have miscounted some positions (see get_insert_info_from_ifile()
+ * for more info). 
+ * 
+ * span_ct:   [0..rfpos..ps->msa->rflen-1] number of sequences that 'span' each position rfpos
+ *	      have >= 1 nucleotide at a position apos before rf2a_map[rfpos] and >= 1 nucleotide at 
+ *            any position apos >= rf2a_map[rfpos],
+ */
+int
+get_span_ct(int *msa_rf2a_map, int64_t alen, int rflen, int nseq, int *spos_ct, int *epos_ct, int *srfoff_ct, int *erfoff_ct, int **ret_span_ct)
+{
+  int status;
+  int *nseq_start_after_rfpos = NULL;
+  int *nseq_end_before_rfpos = NULL;
+  int *span_ct = NULL;
+  int rfpos;
+  int do_correction;
+  int apos, nxt_apos, prv_apos;
+
+  ESL_ALLOC(span_ct, sizeof(int) * rflen);
+  ESL_ALLOC(nseq_start_after_rfpos, sizeof(int) * rflen);
+  ESL_ALLOC(nseq_end_before_rfpos, sizeof(int) * rflen);
+
+  esl_vec_ISet(nseq_start_after_rfpos, rflen, 0);
+  esl_vec_ISet(nseq_end_before_rfpos, rflen, 0);
+
+  /* check for special case, when we need to update spos_ct and epos_ct */
+  if(srfoff_ct != NULL && erfoff_ct == NULL) esl_fatal("Internal error, get_span_ct: srfoff_ct != NULL and erfoff_ct == NULL");
+  if(srfoff_ct == NULL && erfoff_ct != NULL) esl_fatal("Internal error, get_span_ct: srfoff_ct == NULL and erfoff_ct != NULL");
+
+  /* determine if we should correct spos_ct and epos_ct using srfoff_ct and erfoff_ct */
+  do_correction = (alen == rflen && srfoff_ct != NULL)  ? TRUE : FALSE;
+
+  /* NOTE: if alen == rflen spos_ct and epos_ct have length rflen, just like srfoff_ct and erfoff_ct */
+
+  /* first count number of seqs that start after each position */
+  nseq_start_after_rfpos[rflen-1] = 0; /* initialize */
+  nxt_apos = (int) alen - 1;
+  for(rfpos = rflen-2; rfpos >= 0; rfpos--) { 
+    for(apos = nxt_apos; apos > msa_rf2a_map[rfpos]; apos--) { 
+      nseq_start_after_rfpos[rfpos] += spos_ct[apos];
+      if(do_correction) nseq_start_after_rfpos[rfpos] += srfoff_ct[apos];
+    }
+    nseq_start_after_rfpos[rfpos] += nseq_start_after_rfpos[rfpos+1];
+    nxt_apos = msa_rf2a_map[rfpos];
+  }
+
+  /* count number of seqs that end before each position */
+  nseq_end_before_rfpos[0] = 0; /* initialize */
+  prv_apos = 0;
+  for(rfpos = 1; rfpos < rflen; rfpos++) { 
+    for(apos = prv_apos; apos < msa_rf2a_map[rfpos]; apos++) { 
+      nseq_end_before_rfpos[rfpos] += epos_ct[apos];
+      if(do_correction) nseq_end_before_rfpos[rfpos] += erfoff_ct[apos];
+    }
+    nseq_end_before_rfpos[rfpos] += nseq_end_before_rfpos[rfpos-1];
+    prv_apos = msa_rf2a_map[rfpos];
+  }
+
+  /* We now know how many seqs start after each rfpos (a = nseq_start_after_rfpos[rfpos]) and
+   *             how many seqs end  before each rfpos (b = nseq_end_before_rfpos[rfpos])
+   * so c = [nseq-(a+b)] seqs span rfpos (b/c they don't start after it AND don't end before it).
+   * 
+   * Note: this is really confusing to me, but I've convinced myself it's true, and I think
+   *       it is only true because we know each sequence's end position must be >= its start position
+   */
+  for(rfpos = 0; rfpos < rflen; rfpos++) { 
+    span_ct[rfpos] = nseq - (nseq_start_after_rfpos[rfpos] + nseq_end_before_rfpos[rfpos]);
+    /*printf("span_ct[rfpos: %d]: %d after: %d before: %d nseq: %d\n", rfpos, span_ct[rfpos], nseq_start_after_rfpos[rfpos], nseq_end_before_rfpos[rfpos], nseq);*/
+  }
+
+  *ret_span_ct = span_ct;
+  free(nseq_start_after_rfpos);
+  free(nseq_end_before_rfpos);
+  return eslOK;
+
+ ERROR: 
+  return eslEMEM;
+}
+
+
+/* Function: drawfile2sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with >= 1 new page(s), with colors described
+ *           in an input 'draw' file, with >= 1 sets of <x> lines of data, each set 
+ *           is separated by a line with only "//". <x> must be equal to the consensus
+ *           ps->rflen. Each line contains a single real number between 0 and 1,
+ *           these are converted into 1 of 6 CMYK colors based on their values, using
+ *           the same color scheme used for frequency of inserts.
+ *
+ * Return:   eslOK on success.
+ */
+static int
+drawfile2sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, float ***hc_scheme, int hc_scheme_idx, int hc_nbins)
+{
+  int status;
+  int p, pp;
+  int rfpos, c;
+  int orig_npage = ps->npage;
+  ESL_FILEPARSER *efp;
+  char           *s;
+  char *dfile = esl_opt_GetString(go, "--dfile");
+  float *limits;
+  float value;
+  int l;
+  int bi, within_mask;
+  char *desc = NULL;
+  char *legheader = NULL;
+
+  /* allocate for limits, but don't fill it yet */
+  ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); 
+
+  if (esl_fileparser_Open(dfile, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in draw_file2sspostscript\n", dfile);
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  pp = orig_npage - 1;
+
+  /* Format of dfile: 
+   * For each page: 
+   * line 1: description of page (max is ps->desc_max_chars*2 chars)
+   * line 2: header for legend (max is ps->legx_max_chars chars)
+   * line 3: limits for color bins, must be 7 tokens, all numbers, each greater than the last
+   * lines 4-N: single tokens, numerical values for each position, N is CLEN-3.
+   * line N+1: single token, only:"//\n" signifying end of page.
+   * 
+   * '#' prefixed lines are considered comments and skipped.
+   *
+   * Example:
+   */
+
+  rfpos = -1;
+  while (esl_fileparser_NextLine(efp) == eslOK)
+    {
+      if(rfpos == -1) { /* new page, first add a new page */
+	/* next 3 lines must be a specific format */
+	/* first line is description */
+	if(desc != NULL) { free(desc); desc = NULL; }
+	while((status = esl_fileparser_GetTokenOnLine(efp, &s, NULL)) == eslOK) { 
+	  if((status = esl_strcat(&desc, -1, s, -1)) != eslOK) esl_fatal("Out of memory");
+	  if((status = esl_strcat(&desc, -1, " ", -1)) != eslOK) esl_fatal("Out of memory");
+	}
+	if(strlen(desc) > (ps->desc_max_chars*2.)) esl_fatal("Error reading --dfile, description length (%d) exceeds max allowed (%d)", strlen(desc), (ps->desc_max_chars*2));
+	if(esl_fileparser_NextLine(efp) != eslOK) esl_fatal("Error reading --dfile, expected legend header line at line %d\n", efp->linenumber);
+
+	/* second line is legend header */
+	if(legheader != NULL) { free(legheader); legheader = NULL; }
+	while((status = esl_fileparser_GetTokenOnLine(efp, &s, NULL)) == eslOK) { 
+	  if((status = esl_strcat(&legheader, -1, s, -1)) != eslOK) esl_fatal("Out of memory");
+	  if((status = esl_strcat(&legheader, -1, " ", -1)) != eslOK) esl_fatal("Out of memory");
+	}
+	if(strlen(legheader) > ps->legx_max_chars) esl_fatal("Error reading --dfile, legend header length (%d) exceeds max allowed (%d)", strlen(legheader), ps->legx_max_chars);
+	if(esl_fileparser_NextLine(efp) != eslOK) esl_fatal("Error reading --dfile, expected limits line at line %d\n", efp->linenumber);
+	
+	/* third line is bin limits for the colors, must be 7 numbers, we read them as floats */
+	for(l = 0; l < hc_nbins+1; l++) { 
+	  if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Error reading --dfile, expected limits line at line %d to have %d limits (numbers) in increasing order, it doesn't", efp->linenumber, hc_nbins+1);
+	  limits[l] = atof(s);
+	  if(l > 0 && limits[l] < limits[l-1]) esl_fatal("Error reading --dfile, expected limits line at line %d with %d limits (numbers) in increasing order", efp->linenumber, hc_nbins+1);
+	}
+	rfpos++; /* rfpos will now be 0 */
+      }
+      else if(rfpos == (ps->rflen)) { /* end of page, should be a single token, a "\\" on this line */ 
+	if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK)
+	  esl_fatal("Failed to read a final token at the end of description of page %d on line %d of drawfile %s\n", (pp - orig_npage + 1), efp->linenumber, dfile);
+	if (strcmp(s, "//") != 0) 
+	  esl_fatal("Failed to read a final \"//\" token (read %s) at the end of description of draw page %d on line %d of drawfile %s\n", s, (pp - orig_npage + 1), efp->linenumber, dfile);
+	rfpos = -1;
+	/* add color legend */
+	if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], legheader, ps->legx_max_chars, errbuf)) != eslOK) return status;
+	if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, desc, errbuf)) != eslOK) return status;
+      }
+      else { /* a normal line, should either contain a single float or the \\ marking end of this page */
+	rfpos++;
+	if(rfpos == 1) { /* add a new page, (we now have limits for legend, from if(rfpos == -1) loop above) */
+	  if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+	  for(p = (ps->npage-1); p < ps->npage; p++) { 
+	    ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+	    ESL_ALLOC(ps->sclAA[p],   sizeof(SchemeColorLegend_t) * 1);
+	    for(c = 0; c < ps->rflen; c++) { 
+	      ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+	    }
+	  }
+	  pp++; /* if first page, pp == orig_npage now */
+	  ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, TRUE, TRUE, TRUE);
+	}
+	/* now parse the line, it should have a single number, a numerical value for a position */
+	if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Failed to read value for position %d for page %d on line %d of dfile\n", rfpos, (pp - orig_npage + 1), efp->linenumber);
+	value = atof(s);
+	if(value < limits[0] || value > limits[hc_nbins]) esl_fatal("--dfile value %.4f out of allowed range [%.3f-%.3f] on line %d\n", value, limits[0], limits[hc_nbins], efp->linenumber, dfile);
+	within_mask = (ps->mask != NULL && ps->mask[rfpos-1] == '1') ? TRUE : FALSE;
+	if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos-1], NCMYK, hc_scheme[hc_scheme_idx], value, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status;
+      }
+    }
+  if(pp == (orig_npage - 1)) { /* no new pages were read, this is an error */
+    esl_fatal("Failed to read a single page from drawfile %s\n", dfile);
+  }
+  esl_fileparser_Close(efp);
+
+  free(limits);
+  if(desc != NULL)      { free(desc);      desc = NULL;      }
+  if(legheader != NULL) { free(legheader); legheader = NULL; }
+
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "drawfile2sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* Function: expertfile2sspostscript()
+ * 
+ * Purpose:  Fill a postscript data structure with >= 1 new page(s), with colors described
+ *           in an input 'expert draw' file, with >= 1 sets of <x> lines of data, each set 
+ *           is separated by a line with only "//". <x> must be equal to the consensus
+ *           ps->rflen. Each line has at least 4 floats explaining 
+ *           the CMYK values for the color to use at each position of the SS diagram,
+ *           and optionally contains an extra single character which is the nucleotide
+ *           to put at that position.
+ *           
+ * Return:   eslOK on success.
+ */
+static int
+expertfile2sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps)
+{
+  int status;
+  int p, pp;
+  int cpos, c;
+  int orig_npage = ps->npage;
+  ESL_FILEPARSER *efp;
+  char           *s;
+  char *efile = esl_opt_GetString(go, "--efile");
+
+  if (esl_fileparser_Open(efile, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in draw_file2sspostscript\n", efile);
+  esl_fileparser_SetCommentChar(efp, '#');
+
+  pp = orig_npage - 1;
+  cpos = 0;
+
+  while (esl_fileparser_NextLine(efp) == eslOK)
+    {
+      /* example line without nucleotide markup:
+       * 0.000 0.000 0.000 0.500
+       *
+       * example line with nucleotide markup:
+       * 0.000 0.000 0.000 0.500 A
+       */
+
+      cpos++;
+      if(cpos == 1) { /* add a new page */
+	if((status = add_pages_sspostscript(ps, 1, SIMPLEMASKMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object.");
+	
+	for(p = (ps->npage-1); p < ps->npage; p++) { 
+	  ESL_ALLOC(ps->rAA[p], sizeof(char) *  (ps->rflen+1));
+	  ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen);
+	  for(c = 0; c < ps->rflen; c++) { 
+	    ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */
+	  }
+	}
+	pp++; /* if first page, pp == orig_npage now */
+      }
+      if(cpos == (ps->rflen+1)) { /* should be a single token, a "\\" on this line */ 
+	if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK)
+	  esl_fatal("Failed to read a final token at the end of description of draw page %d on line %d of expertfile %s\n", (pp - orig_npage + 1), efp->linenumber, efile);
+	if (strcmp(s, "//") != 0) 
+	  esl_fatal("Failed to read a final \"//\" token (read %s) at the end of description of draw page %d on line %d of expertfile %s\n", s, (pp - orig_npage + 1), efp->linenumber, efile);
+	cpos = 0;
+      }
+      else { 
+	/* get C value */
+	if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK)
+	  esl_fatal("Failed to read C of CMYK value on line %d of expertfile %s\n", efp->linenumber, efile);
+	ps->bcolAAA[pp][(cpos-1)][0] = atof(s);
+
+	/* get M value */
+	if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK)
+	  esl_fatal("Failed to read M of CMYK value on line %d of expertfile %s\n", efp->linenumber, efile);
+	ps->bcolAAA[pp][(cpos-1)][1] = atof(s);
+
+	/* get Y value */
+	if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK)
+	esl_fatal("Failed to read Y of CMYK value on line %d of expertfile %s\n", efp->linenumber, efile);
+	ps->bcolAAA[pp][(cpos-1)][2] = atof(s);
+
+	/* get K value */
+	if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK)
+	  esl_fatal("Failed to read K of CMYK value on line %d of expertfile %s\n", efp->linenumber, efile);
+	ps->bcolAAA[pp][(cpos-1)][3] = atof(s);
+
+	/* optionally read a nucleotide value */
+	if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) == eslOK) {
+	  if(((int) strlen(s)) != 1) esl_fatal("Read multi-character string (%s) for consensus nucleotide %d on line %d of expertfile %s\n", s, cpos, efp->linenumber, efile);
+	  ps->rAA[pp][(cpos-1)] = s[0];
+	}
+	else ps->rAA[pp][(cpos-1)] = ' ';
+      }
+    }
+  if(pp == (orig_npage - 1)) { /* no new pages were read, this is an error */
+    esl_fatal("Failed to read a single page from expertfile %s\n", efile);
+  }
+
+  esl_fileparser_Close(efp);
+  return eslOK;
+
+ ERROR: ESL_FAIL(status, errbuf, "expertfile2sspostscript(): memory allocation error.");
+  return status; /* NEVERREACHED */
+}
+
+
+/* is_watson_crick_bp(i,j): return TRUE if i,j form a watson crick bp, FALSE if not
+ * is_gu_or_ug_bp(i,j):     return TRUE if i,j form a G-U or U-G bp, FALSE if not
+ */
+static int
+is_watson_crick_bp(char i, char j)
+{
+  switch (toupper(i)) { 
+  case 'A':
+    switch (toupper(j)) { 
+    case 'U': return TRUE; break;
+    case 'T': return TRUE; break;
+    default: break;
+    }
+    break;
+  case 'C':
+    switch (toupper(j)) { 
+    case 'G': return TRUE; break;
+    default: break;
+    }
+    break;
+  case 'G':
+    switch (toupper(j)) { 
+    case 'C': return TRUE; break;
+    default: break;
+    }
+    break;
+  case 'U':
+    switch (toupper(j)) { 
+    case 'A': return TRUE; break;
+    default: break;
+    }
+    break;
+  case 'T':
+    switch (toupper(j)) { 
+    case 'A': return TRUE; break;
+    default: break;
+    }
+    break;
+  default: break;
+  }
+
+  return FALSE;
+}
+
+static int
+is_gu_or_ug_bp(char i, char j)
+{
+  switch (toupper(i)) { 
+  case 'G':
+    switch (toupper(j)) { 
+    case 'U': return TRUE; break;
+    case 'T': return TRUE; break;
+    default: break;
+    }
+    break;
+  case 'U':
+    switch (toupper(j)) { 
+    case 'G': return TRUE; break;
+    default: break;
+    }
+    break;
+  case 'T':
+    switch (toupper(j)) { 
+    case 'G': return TRUE; break;
+    default: break;
+    }
+    break;
+  default: break;
+  }
+
+  return FALSE;
+}
+
+/* Function: get_consensus_seqs_from_abc_ct()
+ * Date:     EPN, Wed Apr  7 07:39:57 2010
+ * 
+ * Given an abc_ct array:
+ * [0..apos..alen-1][0..abc->K]: per position count of 
+ * each symbol in alphabet over all seqs. 
+ * 
+ * Determine the consensus sequence for the msa that abc_ct
+ * corresponds to, one nucleotide per nongap RF position, the
+ * most informative IUPAC nucleotide (including ambiguous nucleotides)
+ * that represents >= <x> fraction of the sequences in the msa
+ * that have a nongap at that position.
+ * 
+ * Alternatively, if --majrule is enabled, define consensus nucleotide
+ * as the most common nucleotide at each position. Uppercase
+ * if frequency >= 0.5 of nongap nts, else it is lowercase.
+ *  
+ * ps       - the postscript object
+ * errbuf   - informative error message, returned upon failure
+ * abc_ct   - count of nucleotides per alignment position (see above)
+ * abc      - the alphabet
+ * cthresh  - consensus nucleotide must explain >= <cthresh> fraction
+ *            of nucleotides in msa (ex: if cthresh = 0.8, and 
+ *            A=0.6, C=0.01, G=0.25, U=0.14, consensus nucleotide = R (A|G))
+ * ret_cseq - RETURN: the consensus sequence [0..rflen-1]
+ * 
+ * Returns eslOK on success.
+  */
+typedef struct nt2sort_s {
+  double ntfreq; /* frequency of this nucleotide */
+  int    ntidx;  /* index of this nucleotide in alphabet (ex: 1 for 'C' in eslRNA) */
+} nt2sort_t;
+
+
+int compare_by_ntfreq(const void *a_void, const void *b_void) {
+  nt2sort_t *a, *b;
+  a = (nt2sort_t *) a_void;
+  b = (nt2sort_t *) b_void;
+  if      (a->ntfreq > b->ntfreq) return -1;
+  else if (a->ntfreq < b->ntfreq) return  1;
+  else                          return  0;
+}
+
+/* Function: get_consensus_nucleotide()
+ * Date:     EPN, Wed Apr  7 07:39:57 2010
+ * 
+ * Given a useme array:
+ * [0..i..abc->K]: TRUE if nucleotide i is used, FALSE if not
+ * Return the consensus nucleotide - the least ambiguous iupac 
+ * nucleotide that represents all TRUEs. For ex: [1,0,1,0] --> R
+ * If <do_dna> is TRUE, return 'T' instead of 'U' when appropriate.
+ * 
+ * Returns the consensus nucleotide.
+ * 
+ * Degeneracies:
+ * R = A|G
+ * Y = C|U
+ * M = A|C
+ * K = G|U
+ * S = C|G
+ * W = A|U
+ * H = A|C|U
+ * B = C|G|U
+ * V = A|C|G
+ * D = A|G|U
+ */
+int get_consensus_nucleotide(int *useme, int K) 
+{ 
+  /* You brute! */
+  if((! useme[0]) && (! useme[1]) && (! useme[2]) && (  useme[3])) { return 'U'; } /* 0001 */
+  if((! useme[0]) && (! useme[1]) && (  useme[2]) && (! useme[3])) { return 'G'; } /* 0010 */
+  if((! useme[0]) && (  useme[1]) && (! useme[2]) && (! useme[3])) { return 'C'; } /* 0100 */
+  if((  useme[0]) && (! useme[1]) && (! useme[2]) && (! useme[3])) { return 'A'; } /* 1000 */
+
+  if((  useme[0]) && (  useme[1]) && (  useme[2]) && (  useme[3])) { return 'N'; } /* 1111 */
+
+  if((! useme[0]) && (  useme[1]) && (  useme[2]) && (  useme[3])) { return 'B'; } /* 0111 */
+  if((  useme[0]) && (! useme[1]) && (  useme[2]) && (  useme[3])) { return 'D'; } /* 1011 */
+  if((  useme[0]) && (  useme[1]) && (  useme[2]) && (! useme[3])) { return 'V'; } /* 1110 */
+  if((  useme[0]) && (  useme[1]) && (! useme[2]) && (  useme[3])) { return 'H'; } /* 1101 */
+
+  if((! useme[0]) && (! useme[1]) && (  useme[2]) && (  useme[3])) { return 'K'; } /* 0011 */
+  if((! useme[0]) && (  useme[1]) && (  useme[2]) && (! useme[3])) { return 'S'; } /* 0110 */
+  if((  useme[0]) && (  useme[1]) && (! useme[2]) && (! useme[3])) { return 'M'; } /* 1100 */
+  if((! useme[0]) && (  useme[1]) && (! useme[2]) && (  useme[3])) { return 'Y'; } /* 0101 */
+  if((  useme[0]) && (! useme[1]) && (! useme[2]) && (  useme[3])) { return 'W'; } /* 1001 */
+  if((  useme[0]) && (! useme[1]) && (  useme[2]) && (! useme[3])) { return 'R'; } /* 1010 */
+
+  if((! useme[0]) && (! useme[1]) && (! useme[2]) && (! useme[3])) { return '-'; } /* 0000 */
+  esl_fatal("coding error in consensus_nucleotide");
+  return ' '; /* NEVERREACHED */
+}      
+
+int 
+get_consensus_seqs_from_abc_ct(const ESL_GETOPTS *go, SSPostscript_t *ps, char *errbuf, double **abc_ct, ESL_ALPHABET *abc, int64_t msa_alen)
+{
+  int             status;          /* the Easel return status */
+  char           *cseq_maj = NULL; /* the consensus sequence string based on majority rule that we're building */
+  char           *cseq_amb = NULL; /* the consensus sequence string including ambiguities that we're building */
+  int             rfpos, apos;     /* counter over nongap RF, alignment positions */
+  float           nongap_freq;     /* for current position, fraction of nongap nucleotides from abc_ct */
+  float           covered;         /* fraction of nongap nucleotides currently covered while
+				    * calculating the consensus nucleotide */
+  int            *nt_is_used;      /* [0..a..abc->K-1] TRUE if nucleotide a is included for 
+				    * current consensus nucleotide, FALSE if not */
+  nt2sort_t      *sorted_ntfreq;   /* [0..abc->K-1] sorted array of nt2sort structures */
+  int             sorted_idx;      /* index in sorted_ntfreq */
+  int             a;               /* counter over nucleotides in abc */
+  float           cthresh = esl_opt_GetReal(go, "--cthresh");
+  float           athresh = esl_opt_GetReal(go, "--athresh");
+
+  /* allocate and initialize */
+  ESL_ALLOC(cseq_maj, sizeof(char) * (ps->rflen+1));
+  ESL_ALLOC(cseq_amb, sizeof(char) * (ps->rflen+1));
+  cseq_maj[ps->rflen] = '\0';
+  cseq_amb[ps->rflen] = '\0';
+  ESL_ALLOC(sorted_ntfreq, sizeof(nt2sort_t) * (abc->K));
+  ESL_ALLOC(nt_is_used, sizeof(int) * (abc->K));
+
+  rfpos = 0;
+  for(apos = 0; apos < msa_alen; apos++) { 
+    if(esl_abc_CIsResidue(abc, ps->msa->rf[apos])) { 
+      nongap_freq = esl_vec_DSum(abc_ct[apos], abc->K);
+      if(esl_DCompare(nongap_freq, 0., eslSMALLX1) == eslOK) { /* all nucleotides are gaps */
+	cseq_maj[rfpos] = cseq_amb[rfpos] = '-';
+      }
+      else { /* at least one sequence has a nongap at rfpos, calculate the consensus nucleotide */
+	for(a = 0; a < abc->K; a++) { 
+	  sorted_ntfreq[a].ntfreq = abc_ct[apos][a] / nongap_freq;
+	  sorted_ntfreq[a].ntidx  = a;
+	}
+	/* quicksort */
+	qsort(sorted_ntfreq, abc->K, sizeof(nt2sort_t), compare_by_ntfreq);
+	covered = 0.;
+	esl_vec_ISet(nt_is_used, abc->K, FALSE);
+	sorted_idx = 0;
+	/* determine majority rule nucleotide */
+	cseq_maj[rfpos] = (sorted_ntfreq[sorted_idx].ntfreq >= cthresh) ? 
+	  toupper(abc->sym[sorted_ntfreq[sorted_idx].ntidx]) : 
+	  tolower(abc->sym[sorted_ntfreq[sorted_idx].ntidx]);
+	/* determine ambiguous nucleotide that covers > --athresh fraction of seqs */
+	while(covered < athresh) { 
+	  nt_is_used[sorted_ntfreq[sorted_idx].ntidx] = TRUE;
+	  covered += sorted_ntfreq[sorted_idx].ntfreq;
+	  /*printf("RF: %4d  SIDX: %d  AIDX: %d  FREQ: %.3f  COVERED: %.3f\n", 
+	    rfpos, sorted_idx, 
+	    sorted_ntfreq[sorted_idx].ntidx,
+	    sorted_ntfreq[sorted_idx].ntfreq, 
+	    covered);*/
+	  sorted_idx++;
+	}
+	cseq_amb[rfpos] = get_consensus_nucleotide(nt_is_used, abc->K);
+      }	  
+      rfpos++;
+    }
+  }
+  /* printf("\n"); */
+  ps->msa_cseq_maj = cseq_maj;
+  ps->msa_cseq_amb = cseq_amb;
+
+  free(sorted_ntfreq);
+  free(nt_is_used);
+
+  return eslOK;
+
+ ERROR:
+  ESL_FAIL(eslEMEM, errbuf, "Ran out of memory in get_consensus_seqs_from_abc_ct.");
+  return eslEMEM; /* NEVERREACHED */
+}
+
+/* Function: compare_two_cmyk_colors()
+ * Date:     EPN, Fri Apr 23 05:47:54 2010
+ * 
+ * Given four CMYK values defining a color <a>
+ * and four CMYK values defining a color <b>, check if 
+ * <a> and <b> are the same color. Return TRUE if they
+ * are and FALSE if not.
+ *  
+ * acol_C    - first  CMYK value for color <a> (Cyan)
+ * acol_M    - second CMYK value for color <a> (Magenta)
+ * acol_Y    - third  CMYK value for color <a> (Yellow)
+ * acol_K    - fourth CMYK value for color <a> (Key)
+ * bcol_C    - first  CMYK value for color <b> (Cyan)
+ * bcol_M    - second CMYK value for color <b> (Magenta)
+ * bcol_Y    - third  CMYK value for color <b> (Yellow)
+ * bcol_K    - fourth CMYK value for color <b> (Key)
+ * 
+ * Returns TRUE if colors a and b are identical, FALSE if not.
+  */
+int compare_two_cmyk_colors(float acol_C, float acol_M, float acol_Y, float acol_K, float bcol_C, float bcol_M, float bcol_Y, float bcol_K)
+{
+  if(esl_FCompare(acol_C, bcol_C, eslSMALLX1) != eslOK) return FALSE;
+  if(esl_FCompare(acol_M, bcol_M, eslSMALLX1) != eslOK) return FALSE;
+  if(esl_FCompare(acol_Y, bcol_Y, eslSMALLX1) != eslOK) return FALSE;
+  if(esl_FCompare(acol_K, bcol_K, eslSMALLX1) != eslOK) return FALSE;
+  return TRUE;
+}
+
+
+/* Function: define_outline_procedures()
+ * Date:     EPN, Sun May  2 10:36:32 2010
+ * 
+ * Given an open output postscript file, define 
+ * the three procedures for drawing outlines of
+ * cells.
+ * 
+ * Returns void.
+  */
+void define_outline_procedure(FILE *fp)
+{
+  fprintf(fp, "\n/%s %% stack: x y cellsize linewidth (empty)\n", OUTLINE_PROCEDURE);
+  fprintf(fp, "{\n");;
+  fprintf(fp, "   0. 0. 0. 1. setcmykcolor\n");/* set linewidth as top value on stack */
+  fprintf(fp, "   setlinewidth\n");            /* set linewidth as top value on stack */
+  fprintf(fp, "   /cellsize exch def\n");      /* push /cellsize onto stack, invert top 2 els, and define cellsize */
+  fprintf(fp, "   newpath moveto\n");          /* move to x, y, which are now on top of stack */
+  fprintf(fp, "   currentlinewidth 2. div currentlinewidth 2. div rmoveto\n");
+  fprintf(fp, "   0 cellsize currentlinewidth sub rlineto\n");
+  fprintf(fp, "   cellsize currentlinewidth sub 0 rlineto\n");
+  fprintf(fp, "   0 cellsize currentlinewidth sub -1 mul rlineto\n");
+  fprintf(fp, "   closepath stroke\n");
+  fprintf(fp, "} def\n\n");
+
+  /* Old definitions, kept here for reference, note these only work with OUTLINE_LINEWIDTH of 1.0 */
+  /*
+
+    //printing basic box outline
+    fprintf(fp, "\n/%s %% stack: x y => ---\n", OUTLINE_MAX_PROCEDURE);
+    fprintf(fp, "{  %.2f setlinewidth\n", OUTLINE_LINEWIDTH_MAX);
+    fprintf(fp, "   newpath moveto\n");
+    fprintf(fp, "   %.2f %.2f rmoveto\n", 
+    OUTLINE_LINEWIDTH_MAX / 2., OUTLINE_LINEWIDTH_MAX / 2.);
+    fprintf(fp, "   0 %.2f rlineto %.2f 0 rlineto 0 %.2f rlineto\n", 
+    CELLSIZE - OUTLINE_LINEWIDTH_MAX, CELLSIZE - OUTLINE_LINEWIDTH_MAX, -1 * (CELLSIZE - OUTLINE_LINEWIDTH_MAX));
+    fprintf(fp, "   closepath gsave stroke grestore \n");
+    fprintf(fp, "} def\n\n");
+
+    //printing a double-line outline 
+    fprintf(fp, "\n/%s %% stack: x y => ---\n", OUTLINE_MAX_PROCEDURE);
+    fprintf(fp, "{  %s\n", OUTLINE_MIN_PROCEDURE);
+    fprintf(fp, "   %.2f %.2f rmoveto\n", 
+    OUTLINE_LINEWIDTH * 2., OUTLINE_LINEWIDTH * 2.);
+    fprintf(fp, "   0 %.2f rlineto %.2f 0 rlineto 0 %.2f rlineto\n", 
+    CELLSIZE - (5. * OUTLINE_LINEWIDTH), CELLSIZE - (5. * OUTLINE_LINEWIDTH), -1 * (CELLSIZE - (5. * OUTLINE_LINEWIDTH)));
+    fprintf(fp, "   closepath gsave stroke grestore \n");
+    fprintf(fp, "} def\n\n");
+
+    //drawing corners only for the outline 
+    fprintf(fp, "\n/outlinemin %% stack: x y => ---\n");
+    fprintf(fp, "{  newpath moveto\n");
+    fprintf(fp, "   %.2f     0 rmoveto 0 %.2f rlineto closepath gsave stroke\n", 
+    OUTLINE_LINEWIDTH/2, CELLSIZE / 4.);
+    fprintf(fp, "   grestore   0     %.2f rmoveto 0 %.2f rlineto closepath gsave stroke\n", 
+    3 * CELLSIZE / 4., CELLSIZE / 4. );
+    
+    fprintf(fp, "   grestore %.2f  %.2f rmoveto %.2f 0 rlineto closepath gsave stroke\n", 
+    -1 * OUTLINE_LINEWIDTH / 2., 3 * OUTLINE_LINEWIDTH / 2., CELLSIZE / 4.);
+    fprintf(fp, "   grestore %.2f   0 rmoveto %.2f 0 rlineto closepath gsave stroke\n", 
+    3 * CELLSIZE / 4., CELLSIZE / 4. );
+    
+    fprintf(fp, "   grestore  %.2f %.2f rmoveto 0 %.2f rlineto closepath gsave stroke\n", 
+    3 * OUTLINE_LINEWIDTH / 2., -3 * OUTLINE_LINEWIDTH/2, CELLSIZE / 4.);
+    fprintf(fp, "   grestore    0  %.2f rmoveto 0 %.2f rlineto closepath gsave stroke\n", 
+    -3 * CELLSIZE / 4., CELLSIZE / 4.);
+    
+    fprintf(fp, "   grestore %.2f  %.2f rmoveto %.2f 0 rlineto closepath gsave stroke\n", 
+    -3 * OUTLINE_LINEWIDTH / 2., OUTLINE_LINEWIDTH / 2., CELLSIZE / 4.);
+    fprintf(fp, "   grestore %.2f    0 rmoveto %.2f 0 rlineto closepath gsave stroke\n", 
+    -3 * CELLSIZE / 4., CELLSIZE / 4.);
+    fprintf(fp, "} def\n");
+    
+    //drawing corners plus a dash in the middle of each side for the outline
+    fprintf(fp, "/outlinemid %% stack: x y => ---\n");
+    fprintf(fp, "{ \n");
+    fprintf(fp, "   outlinemin\n");
+    fprintf(fp, "   grestore  %.2f  %.2f  rmoveto 0 %.2f rlineto closepath gsave stroke\n", 
+    OUTLINE_LINEWIDTH / 2., CELLSIZE / 4. + OUTLINE_LINEWIDTH / 2., CELLSIZE / 4.);
+    fprintf(fp, "   grestore  %.2f  %.2f  rmoveto 0 %.2f rlineto closepath gsave stroke\n", 
+    CELLSIZE / 4. + OUTLINE_LINEWIDTH / 2., CELLSIZE / 2. + OUTLINE_LINEWIDTH / 2., CELLSIZE / 4.);
+    fprintf(fp, "   grestore  %.2f  %.2f  rmoveto 0 %.2f rlineto closepath gsave stroke\n", 
+    CELLSIZE / 2. + OUTLINE_LINEWIDTH / 2., -1 * (CELLSIZE / 2. + OUTLINE_LINEWIDTH / 2.), CELLSIZE / 4.);
+    fprintf(fp, "   grestore  %.2f  %.2f  rmoveto 0 %.2f rlineto closepath gsave stroke\n", 
+    -1 * (CELLSIZE / 2. + OUTLINE_LINEWIDTH / 2.), -1 * CELLSIZE / 4. + OUTLINE_LINEWIDTH / 2., CELLSIZE / 4.);
+    fprintf(fp, "   gsave\n");
+    fprintf(fp, "} def\n");
+  */
+  return;
+}
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/miniapps/esl-ssdraw.itest.pl b/miniapps/esl-ssdraw.itest.pl
new file mode 100755
index 0000000..459b89e
--- /dev/null
+++ b/miniapps/esl-ssdraw.itest.pl
@@ -0,0 +1,644 @@
+#! /usr/bin/perl
+
+# Integrated test of the esl-ssdraw miniapp.
+#
+# Usage:     ./esl-ssdraw.itest.pl <esl-ssdraw binary> <postscript template file> <alignment file> <tmpfile prefix>
+# Example:   ./esl-ssdraw.itest.pl ./esl-ssdraw        ../testsuite/trna-ssdraw.ps ../testsuite/trna-5.stk foo
+#
+# EPN, Tue Feb  9 12:22:29 2010
+
+$eslssdraw    = shift;
+$templatefile = shift;
+$alifile      = shift;
+$tmppfx       = shift;
+
+if (! -x "$eslssdraw") { die "FAIL: didn't find esl-ssdraw binary $eslssdraw"; }
+
+open(MASKFILE, ">$tmppfx.mask1") || die "FAIL: couldn't open $tmppfx.mask1 for writing maskfile";
+print MASKFILE << "EOF";
+10010110101101111111111010101111111010101011010001100010101110101010101
+EOF
+close MASKFILE;
+
+open(MASKFILE, ">$tmppfx.mask2") || die "FAIL: couldn't open $tmppfx.mask2 for writing maskfile";
+print MASKFILE << "EOF";
+11011011111110101011111111111010101010100000000001001010011101010101010
+EOF
+close MASKFILE;
+
+open(IFILE, ">$tmppfx.ifile") || die "FAIL: couldn't open $tmppfx.ifile for writing insert file";
+print IFILE << "EOF";
+tRNA 71
+tRNA1 73 1 71  16 17 1  45 47 1
+tRNA2 72 1 71  19 20 1
+tRNA3 72 1 71  19 20 1
+tRNA4 72 1 71  45 46 1
+tRNA5 64 5 71  16 13 1  45 43 1
+//
+EOF
+close IFILE;
+
+open(DFILE, ">$tmppfx.dfile") || die "FAIL: couldn't open $tmppfx.efile for writing draw file";
+print DFILE << "EOF";
+Example of using --dfile to specify colors
+These numbers mean what?
+0.0 0.6 0.7 0.8 0.9 0.95 1.0
+0.560
+0.730
+0.210
+0.120
+0.910
+1.000
+0.000
+0.302
+0.121
+1.000
+0.998
+0.353
+0.5
+0.342
+0.560
+0.730
+0.210
+0.120
+0.910
+1.000
+0.000
+0.302
+0.121
+1.000
+0.998
+0.353
+0.5
+0.342
+0.560
+0.730
+0.210
+0.120
+0.910
+1.000
+0.000
+0.302
+0.121
+1.000
+0.998
+0.353
+0.5
+0.342
+0.560
+0.730
+0.210
+0.120
+0.910
+1.000
+0.000
+0.302
+0.121
+1.000
+0.998
+0.353
+0.5
+0.342
+0.560
+0.730
+0.210
+0.120
+0.910
+1.000
+0.000
+0.302
+0.121
+1.000
+0.998
+0.353
+0.5
+0.342
+0.342
+//
+Another example of using --dfile to specify colors
+Meaning is unknown
+0.0 0.1 0.2 0.3 0.4 0.5 1.0
+0.560
+0.730
+0.210
+0.120
+0.910
+1.000
+0.000
+0.302
+0.121
+1.000
+0.998
+0.353
+0.5
+0.342
+0.560
+0.730
+0.210
+0.120
+0.910
+1.000
+0.000
+0.302
+0.121
+1.000
+0.998
+0.353
+0.5
+0.342
+0.560
+0.730
+0.210
+0.120
+0.910
+1.000
+0.000
+0.302
+0.121
+1.000
+0.998
+0.353
+0.5
+0.342
+0.560
+0.730
+0.210
+0.120
+0.910
+1.000
+0.000
+0.302
+0.121
+1.000
+0.998
+0.353
+0.5
+0.342
+0.560
+0.730
+0.210
+0.120
+0.910
+1.000
+0.000
+0.302
+0.121
+1.000
+0.998
+0.353
+0.5
+0.342
+0.342
+//
+EOF
+close DFILE;
+
+open(EFILE, ">$tmppfx.efile") || die "FAIL: couldn't open $tmppfx.efile for writing draw file";
+print EFILE << "EOF";
+0.228 0.636 0.044 0.680
+0.470 0.564 0.932 0.933
+0.034 0.171 0.204 0.137
+0.471 0.725 0.013 0.246
+0.414 0.111 0.478 0.329
+0.947 0.110 0.870 0.230
+0.789 0.964 0.649 0.174
+0.991 0.362 0.028 0.634
+0.977 0.838 0.265 0.046
+0.024 0.806 0.148 0.647
+0.235 0.891 0.594 0.694
+0.799 0.366 0.073 0.013
+0.914 0.393 0.793 0.826
+0.054 0.786 0.486 0.386
+0.794 0.360 0.061 0.304
+0.070 0.866 0.646 0.961
+0.217 0.462 0.220 0.608
+0.446 0.715 0.516 0.287
+0.546 0.924 0.456 0.468
+0.438 0.035 0.613 0.031
+0.321 0.437 0.935 0.336
+0.101 0.275 0.089 0.410
+0.714 0.681 0.622 0.676
+0.315 0.079 0.850 0.917
+0.524 0.897 0.908 0.902
+0.460 0.826 0.039 0.979
+0.041 0.130 0.599 0.122
+0.181 0.234 0.813 0.157
+0.514 0.145 0.386 0.801
+0.183 0.929 0.161 0.588
+0.852 0.746 0.189 0.836
+0.455 0.580 0.439 0.373
+0.473 0.212 0.655 0.536
+0.678 0.744 0.434 0.793
+0.844 0.816 0.646 0.459
+0.806 0.807 0.002 0.304
+0.395 0.972 0.800 0.119
+0.981 0.492 0.752 0.463
+0.926 0.327 0.066 0.099
+0.029 0.252 0.846 0.134
+0.571 0.306 0.698 0.213
+0.711 0.470 0.680 0.522
+0.639 0.930 0.336 0.968
+0.839 0.824 0.118 0.877
+0.399 0.449 0.675 0.740
+0.105 0.341 0.014 0.971
+0.965 0.277 0.691 0.732
+0.198 0.648 0.903 0.804
+0.958 0.939 0.561 0.028
+0.359 0.665 0.162 0.298
+0.581 0.260 0.237 0.773
+0.042 0.540 0.410 0.190
+0.013 0.841 0.068 0.796
+0.763 0.904 0.601 0.677
+0.849 0.928 0.010 0.797
+0.517 0.658 0.094 0.870
+0.378 0.132 0.736 0.559
+0.385 0.358 0.951 0.566
+0.100 0.141 0.397 0.492
+0.091 0.913 0.870 0.351
+0.819 0.429 0.862 0.267
+0.263 0.777 0.427 0.602
+0.005 0.225 0.023 0.157
+0.154 0.009 0.800 0.514
+0.915 0.456 0.162 0.235
+0.374 0.595 0.678 0.901
+0.099 0.163 0.410 0.515
+0.969 0.191 0.912 0.117
+0.557 0.919 0.084 0.690
+0.846 0.032 0.300 0.158
+0.736 0.131 0.007 0.138
+//
+0.0 0.0 0.0 0.0 T
+0.0 0.0 0.0 0.0 h
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 a
+0.0 0.0 0.0 0.0 t
+0.0 0.0 0.0 0.0 R
+0.0 0.0 0.0 0.0 N
+0.0 0.0 0.0 0.0 A
+0.0 0.0 0.0 0.0 T
+0.0 0.0 0.0 0.0 h
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 a
+0.0 0.0 0.0 0.0 t
+0.0 0.0 0.0 0.0 R
+0.0 0.0 0.0 0.0 N
+0.0 0.0 0.0 0.0 A
+0.0 0.0 0.0 0.0 T
+0.0 0.0 0.0 0.0 h
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 a
+0.0 0.0 0.0 0.0 t
+0.0 0.0 0.0 0.0 R
+0.0 0.0 0.0 0.0 N
+0.0 0.0 0.0 0.0 A
+0.0 0.0 0.0 0.0 T
+0.0 0.0 0.0 0.0 h
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 a
+0.0 0.0 0.0 0.0 t
+0.0 0.0 0.0 0.0 R
+0.0 0.0 0.0 0.0 N
+0.0 0.0 0.0 0.0 A
+0.0 0.0 0.0 0.0 T
+0.0 0.0 0.0 0.0 h
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 a
+0.0 0.0 0.0 0.0 t
+0.0 0.0 0.0 0.0 R
+0.0 0.0 0.0 0.0 N
+0.0 0.0 0.0 0.0 A
+0.0 0.0 0.0 0.0 T
+0.0 0.0 0.0 0.0 h
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 a
+0.0 0.0 0.0 0.0 t
+0.0 0.0 0.0 0.0 R
+0.0 0.0 0.0 0.0 N
+0.0 0.0 0.0 0.0 A
+0.0 0.0 0.0 0.0 T
+0.0 0.0 0.0 0.0 h
+0.0 0.0 0.0 0.0 i
+0.0 0.0 0.0 0.0 s
+0.0 0.0 0.0 0.0 i
+//
+EOF
+close EFILE;
+
+$output = `$eslssdraw -h`;
+if ($? != 0)                                    { die "FAIL: esl-ssdraw failed unexpectedly"; }
+if ($output !~ /Usage: esl-ssdraw/)             { die "FAIL: help output not right"; }
+
+# We do 2 runs of most tests, with and without --small
+$smallA[0] = "";
+$smallA[1] = "--small ";
+
+# Note: these tests are less rigorous than similar ones for other miniapps because esl-ssdraw
+# creates a postscript file and to test that it was created properly we'd really want to open
+# it in a postscript viewer and look at it. Since we can't do that easily in an automated way,
+# I simply check the postscript file for text that I know should be there.
+
+for($pass = 0; $pass < 2; $pass++) {
+    $pass2write = $pass+1;
+
+    system("$eslssdraw $smallA[$pass] $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                       { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(tRNA     71    21\)/)    { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(\\\[0.800-1.200\\\)\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(tRNA     71    21\)/)    { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\%nucleotide 9\nnewpath\n.+0.00\d* 0.21\d* 1.00\d* 0.00\d* setcmykcolor/s) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] -d $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                       { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(tRNA     71    21\)/)    { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(\\\[0.800-1.200\\\)\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(tRNA     71    21\)/)    { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\%nucleotide 9\nnewpath\n.+0.00\d* 0.21\d* 1.00\d* 0.00\d* setcmykcolor/s) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --prob $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                                 { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(tRNA     71    21\)/)              { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(\\\[0.900-0.950\\\)\)/)           { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\%nucleotide 18\nnewpath\n.+0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/s) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --ifreq $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                                 { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(tRNA     71    21\)/)              { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(\\\[0.500-1.000\\\]\)/)           { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\%nucleotide 19\nnewpath\n.+0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.00\d* 0.63\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --iavglen $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                                 { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(tRNA     71    21\)/)              { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(>= 10\)/)                         { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    if($output !~ /\%nucleotide 19\nnewpath\n.+moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --dall $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                                 { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(tRNA     71    21\)/)              { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(zero deletions\)/)                { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\%nucleotide 1\nnewpath\n.+moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.42\d* 0.00\d* 1.00\d* 0.00\d* setcmykcolor/) {  die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --dint $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                                 { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(tRNA     71    21\)/)              { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(zero internal deletions\)/)       { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\%nucleotide 1\nnewpath\n.+moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.00\d* 0.00\d* 0.00\d* 0.20\d* setcmykcolor/) {  die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --mutinfo $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                                 { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(tRNA     71    21\)/)              { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(0 complete basepairs\)/)          { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\%nucleotide 61\nnewpath\n.+moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.42\d* 0.00\d* 1.00\d* 0.00\d* setcmykcolor/) {  die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --span $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                                 { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(tRNA     71    21\)/)              { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(no sequences span\)/)             { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\%nucleotide 2\nnewpath\n.+0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) {  die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --span $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                                 { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(tRNA     71    21\)/)              { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\(no sequences span\)/)             { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    if($output !~ /\%nucleotide 2\nnewpath\n.+moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) {  die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --info --prob --ifreq --dall --dint --mutinfo --span --tabfile $tmppfx.tab $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                                                     { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /setcmykcolor \(g\).+moveto show/)                                                { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    $output = `cat $tmppfx.tab`;
+    if($output !~ /Information content data/)                                                       { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /Mutual information data/)                                                        { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /Insert frequency data/)                                                          { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /Delete data/)                                                                    { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /Internal delete data/)                                                           { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /Average posterior probability data/)                                             { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /Span data/)                                                                      { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /infocontent       7   1.27\d+           5    4/)                                 { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /mutualinfo    16     30     38   0.47\d*   0.47\d*    0.76\d*           5    5/) { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /insertfreq      45   0.60000           5    6/)                                  { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /deleteall      67   0.20\d*    4/)                                               { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+    if($output !~ /deleteint      67   0.00\d*           4    0/)                                   { die "FAIL: tab file incorrectly written on pass $pass2write"; } 
+    if($output !~ /avgpostprob      19   0.88\d*           5    4/)                                 { die "FAIL: tab file incorrectly written on pass $pass2write"; } 
+    if($output !~ /span      67   0.80\d*    6/)                                                    { die "FAIL: tab file incorrectly written on pass $pass2write"; } 
+
+    system("$eslssdraw $smallA[$pass] --rf $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                                                                    { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\(\*REFERENCE\* \(\"#=GC RF\"\)\) 212.49 418.24 moveto show/)                    { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    if($output !~ /\(a\) 110.00 332.00 moveto show/)                                                { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+
+    if($pass == 0) { 
+	system("$eslssdraw $smallA[$pass] --indi $alifile $templatefile $tmppfx.ps > /dev/null");
+	if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+	$output = `cat $tmppfx.ps`;
+	# should include tRNA2, tRNA3, and tRNA5 only 
+	if($output !~ /tRNA1/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA2/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA3/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA4/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA5/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\%nucleotide 19\nnewpath\n  108.40 306.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(A\) 180.00 392.00 moveto show/)        { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\%nucleotide 19\nnewpath\n  108.40 306.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.00\d* 0.21\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    }
+
+    system("$eslssdraw $smallA[$pass] --mask-col --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\%nucleotide 3\nnewpath\n  166.40 374.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.00\d* 1.00\d* 0.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --mask-diff $tmppfx.mask2 --mask-col --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\%nucleotide 3\nnewpath\n  166.40 374.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.00\d* 0.00\d* 0.00\d* 0.20\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --mask-diff $tmppfx.mask2 --mask-col --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\%nucleotide 3\nnewpath\n  166.40 374.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.00\d* 0.00\d* 0.00\d* 0.20\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --no-leg $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output =~ /\(LEGEND\) 134.00 216.00 moveto show/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --no-head $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output =~ /\(tRNA     71    21\) 96.98 418.24 moveto show/)    { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --no-foot $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output =~ /\(Created by 'esl-ssdraw'. Copyright \(C\) 2010 Howard Hughes Medical Institute.\) 12.00 12.00 moveto show/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; }
+
+    # --small is incompatible with --indi:
+    if($pass == 0) { 
+	system("$eslssdraw $smallA[$pass] --no-pp --indi $alifile $templatefile $tmppfx.ps > /dev/null");
+	if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+	$output = `cat $tmppfx.ps`;
+	# should include tRNA2, tRNA3, and tRNA5 only 
+	if($output !~ /tRNA1/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA2/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA3/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA4/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA5/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\%nucleotide 19\nnewpath\n  108.40 306.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(A\) 180.00 392.00 moveto show/)        { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output =~ /\%nucleotide 19\nnewpath\n  108.40 306.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(Watson-Crick/)                         { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(Positions !=/)                         { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	
+	system("$eslssdraw $smallA[$pass] --no-bp --indi $alifile $templatefile $tmppfx.ps > /dev/null");
+	if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+	$output = `cat $tmppfx.ps`;
+	# should include tRNA2, tRNA3, and tRNA5 only 
+	if($output !~ /tRNA1/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA2/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA3/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA4/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA5/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\%nucleotide 19\nnewpath\n  108.40 306.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(A\) 180.00 392.00 moveto show/)        { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\%nucleotide 19\nnewpath\n  108.40 306.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output =~ /\(Watson-Crick/)                         { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(Positions !=/)                         { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	
+	system("$eslssdraw $smallA[$pass] --no-ol --indi $alifile $templatefile $tmppfx.ps > /dev/null");
+	if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+	$output = `cat $tmppfx.ps`;
+	# should include tRNA2, tRNA3, and tRNA5 only 
+	if($output !~ /tRNA1/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA2/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA3/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA4/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA5/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\%nucleotide 19\nnewpath\n  108.40 306.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(A\) 180.00 392.00 moveto show/)        { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\%nucleotide 19\nnewpath\n  108.40 306.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(Watson-Crick/)                         { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output =~ /\(Positions !=/)                         { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	
+	# NOTE: for --no-ntpp we don't actually check that residues are not drawn on PP diagrams
+	system("$eslssdraw $smallA[$pass] --no-ntpp --indi $alifile $templatefile $tmppfx.ps > /dev/null");
+	if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+	$output = `cat $tmppfx.ps`;
+	# should include tRNA2, tRNA3, and tRNA5 only 
+	if($output !~ /tRNA1/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA2/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA3/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA4/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /tRNA5/)                                  { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\%nucleotide 19\nnewpath\n  108.40 306.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(A\) 180.00 392.00 moveto show/)        { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\%nucleotide 19\nnewpath\n  108.40 306.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(Watson-Crick/)                         { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+	if($output !~ /\(Positions !=/)                         { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    }
+
+    system("$eslssdraw $smallA[$pass] --no-cnt --info $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output =~ /setcmykcolor (g)\s+168\.\d+\s+392\.\d+\s+moveto show/)  { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --cthresh 0.4 --info $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output =~ /setcmykcolor (G)\s+168\.\d+\s+392\.\d+\s+moveto show/)  { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --cambig --info $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output =~ /setcmykcolor (K)\s+168\.\d+\s+392\.\d+\s+moveto show/)  { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --cambig --cthresh 0.4 --info $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output =~ /setcmykcolor (C)\s+168\.\d+\s+376\.\d+\s+moveto show/)  { die "FAIL: tab file incorrectly written on pass $pass2write"; }
+
+    system("$eslssdraw $smallA[$pass] --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\%nucleotide 3\nnewpath\n 171.00 379.00 3.0 0 360 arc closepath\n  0.0\d*0 0.63\d* 1.0\d*0 0.0\d*0 setcmykcolor\n  stroke/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } 
+    
+    system("$eslssdraw $smallA[$pass] --mask-x --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /stroke\n  175.00 375.00 moveto  -8.0 8.0 rlineto closepath/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --mask-u --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\%nucleotide 3\nnewpath\n  168.00 376.00 moveto  0 6.0 rlineto 6.0 0 rlineto 0 -6.0 rlineto closepath\n  0.00\d* 0.63\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --mask-a --mask-x --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /%nucleotide 3\nnewpath\n  0.00\d* 0.63\d* 1.00\d* 0.00\d* setcmykcolor\n  167.00 375.00 moveto  8.0 8.0 rlineto closepath\n  stroke/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --mask-a --mask-u --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\%nucleotide 3\nnewpath\n  168.50 376.50 moveto  0 5.0 rlineto 5.0 0 rlineto 0 -5.0 rlineto closepath\n  0.00\d* 0.63\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --dfile $tmppfx.dfile $alifile $templatefile $tmppfx.ps > /dev/null");
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /%nucleotide 3\nnewpath\n  166.40 374.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --mask $tmppfx.mask1 --dfile $tmppfx.dfile $alifile $templatefile $tmppfx.ps > /dev/null");
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /%nucleotide 3\nnewpath\n 171.00 379.00 3.0 0 360 arc closepath\n  0.9200 0.8400 0.00\d* 0.0800 setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } 
+
+    system("$eslssdraw $smallA[$pass] --efile $tmppfx.efile $alifile $templatefile $tmppfx.ps > /dev/null");
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\%nucleotide 3\nnewpath\n  166.40 374.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.03 0.17 0.20 0.14 setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+    
+    system("$eslssdraw $smallA[$pass] --ifreq --ifile $tmppfx.ifile $alifile $templatefile $tmppfx.ps > /dev/null");
+    if ($? != 0)                                            { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";}
+    $output = `cat $tmppfx.ps`;
+    if($output !~ /\%nucleotide 45\nnewpath\n  198.40 312.40 moveto  0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n  0.00\d* 0.94\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; }
+}
+
+print "ok\n"; 
+
+unlink "$tmppfx.mask1";
+unlink "$tmppfx.mask2";
+unlink "$tmppfx.ifile";
+unlink "$tmppfx.dfile";
+unlink "$tmppfx.efile";
+unlink "$tmppfx.ps";
+unlink "$tmppfx.tab";
+unlink "$tmppfx.stk";
+
+
+exit 0;
diff --git a/miniapps/esl-ssdraw.man b/miniapps/esl-ssdraw.man
new file mode 100644
index 0000000..a11cf10
--- /dev/null
+++ b/miniapps/esl-ssdraw.man
@@ -0,0 +1,830 @@
+.TH "esl-ssdraw" 1  "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-ssdraw - create postscript secondary structure diagrams
+
+.SH SYNOPSIS
+
+.B esl-ssdraw
+.I [options]
+.I msafile
+.I postscript_template
+.I postscript_output_file
+
+.SH DESCRIPTION
+
+.pp
+.B esl-ssdraw
+reads an existing template consensus secondary structure diagram from
+.I postscript_template
+and creates new postscript diagrams including the template structure
+but with positions colored differently based on alignment statistics
+such as frequency of gaps per position, average posterior probability
+per position or information content per position. Additionally, all
+or some of the aligned sequences can be drawn separately, with
+nucleotides or posterior probabilities mapped onto the corresponding
+positions of the consensus structure.
+
+The alignment must be in Stockholm format with per-column reference
+annotation (#=GC RF). The sequences in the alignment must be RNA or
+DNA sequences. The
+.B postscript_template
+file must contain one page that includes <rflen> consensus nucleotides
+(positions), where <rflen> is the number of nongap characters in the
+reference (RF) annotation of the first alignment in
+.B msafile.
+The specific format required in the 
+.B postscript_template
+is described below in the INPUT section.
+Postscript diagrams will only be created for the first alignment in
+.B msafile. 
+
+.SH OUTPUT
+
+By default (if run with zero command line options),
+.B esl-ssdraw
+will create a six or seven page 
+.I postscript_output_file, 
+with each page displaying a different alignment statistic. These pages display
+the alignment consensus sequence, information content per position,
+mutual information per position, frequency of inserts per position,
+average length of inserts per position, frequency of
+deletions (gaps) per position, and average posterior probability per
+position (if posterior probabilites exist in the alignment)
+If 
+.B -d 
+is enabled, all of these pages plus additional ones, such as
+individual sequences (see discussion of 
+.B.--indi 
+below) will be drawn.
+These pages can be selected to be drawn individually by using 
+the command line options
+.B --cons,
+.B --info,
+.B --mutinfo,
+.B --ifreq,
+.B --iavglen,
+.B --dall,
+and
+.B --prob.
+The calculation of the statistics for each of these options is
+discussed below in the description for each option.
+Importantly, only so-called 'consensus' positions of the alignment
+will be drawn. A consensus position is one that is a nongap nucleotide in
+the 'reference' annotation of the Stockholm alignment (#=GC RF) read
+from
+.B msafile.
+
+By default, a consensus sequence for the input alignment will be
+calculated and displayed on the alignment statistic diagrams. The
+consensus sequence is defined as the most common nucleotide at each 
+consensus position of the alignment. The consensus sequence will not
+be displayed if the 
+.B --no-cnt
+option is used. The 
+.B --cthresh,
+.B --cambig, 
+and 
+.B --athresh
+options affect the definition of the consensus sequence as
+explained below in the descriptions for those options.
+
+If the 
+.BI --tabfile " <f>"
+option is used, a tab-delimited text file 
+.I <f>
+will be created that includes per-position lists of the numerical
+values for each of the calculated statistics that were drawn to 
+.B postscript_output_file.
+Comment lines in
+.I <f>
+are prefixed with a '#' character and explain the meaning of
+each of the tab-delimited columns and how each of the statistics was
+calculated.
+
+If 
+.B --indi
+is used,
+.B esl-ssdraw
+will create diagrams showing each sequence in the alignment on a
+separate page, with aligned nucleotides in their corresponding
+position in the structure diagram.  By default, basepaired nucleotides
+will be colored based on their basepair type: either Watson-Crick
+(A:U, U:A, C:G, or G:C), G:U or U:G, or non-canonical (the other ten
+possible basepairs). This coloring can be turned off with the
+.B --no-bp
+option.
+Also by default, nucleotides that differ from the most common
+nucleotide at each aligned consensus position will be outlined. If
+the most common nucleotide occurs in more than 75% of sequences that
+do not have a gap at that position, the outline will be
+bold. Outlining can be turned off with the 
+.B --no-ol 
+option.
+
+.PP
+With 
+.B --indi,
+if the alignment
+contains posterior probability annotation (#=GR PP), the 
+.B postscript_output_file
+will contain an additional page for each sequence drawn with positions
+colored by the posterior probability of each aligned nucleotide.
+No posterior probability pages will be drawn if the 
+.B --no-pp
+option is used. 
+
+.B esl-ssdraw
+can also be used to draw 'mask' diagrams which color positions of the
+structure one of two colors depending on if they are included or
+excluded by a mask. This is enabled with the 
+.BI --mask-col " <f>"
+option. 
+.I <f> 
+must contain a single line of <rflen> characters, where <rflen> is the
+the number of nongap RF characters in the alignment. The line must
+contain only '0' and '1' characters. A '0' at position <x> of the
+string indicates position <x> is excluded from the mask, and a '1'
+indicates position <x> is included by the mask.
+A page comparing the overlap of the 
+.I <f> 
+mask from 
+.BI --mask-col
+and another mask in 
+.I <f2> 
+will be created if the 
+.BI --mask-diff " <f2>" 
+option is used.
+
+If the 
+.BI --mask " <f>"
+option is used, positions excluded by the mask in 
+.I <f>
+will be drawn differently (as open circles by default) than positions
+included by the mask. The style of the masked positions can be
+modified with the 
+.B --mask-u,
+.B --mask-x,
+and 
+.B --mask-a options. 
+
+Finally, two different types of input files can be used to customize
+output diagrams using the
+.B --dfile
+and
+.B --efile
+options, as described below.
+
+.SH INPUT
+
+The 
+.B postscript_template_file
+is a postscript file that must be in a very specific format in order for
+.B esl-ssdraw 
+to work. The specifics of the format, described below, are likely to change in future
+versions of 
+.B esl-ssdraw.
+The 
+.B postscript_output_file
+files generated by 
+.B esl-ssdraw
+will not be valid 
+.B postscript_template_file
+format (i.e. an output file from 
+.B esl-ssdraw
+cannot be used as an 
+.B postscript_template_file
+in a subsequent run of the program).
+
+An example 
+.B postscript_template_file
+('trna-ssdraw.ps') is included with the Easel distribution in
+the 'testsuite/' subdirectory of the top-level 'easel' directory.
+
+The
+.B postscript_template_file
+is a valid postscript file. It includes postscript commands for
+drawing a secondary structure. The commands specify x and y
+coordinates for placing each nucleotide on the page. The 
+.B postscript_template_file
+might also contain commands for drawing lines connecting basepaired
+positions and tick marks indicating every tenth position, though these
+are not required, as explained below. 
+
+If you are unfamiliar with the postscript language, it may be useful
+for you to know that a postscript page is, by default, 612 points wide
+and 792 points tall.
+The (0,0) coordinate of a postscript
+file is at the bottom left corner of the page, (0,792) is the top left,
+(612,0) is the bottom right, and (612,792) is the top right. 
+.B esl-ssdraw
+uses 8 point by 8 point cells for drawing positions of the consensus
+secondary structure. The 'scale' section of the
+.B postscript_template_file
+allows for different 'zoom levels', as described below.
+Also, it is important to know that postscript lines beginning with '%'
+are considered comments and do not include postscript commands.
+
+An 
+.B esl-ssdraw
+.B postscript_template_file
+contains n >= 1 pages, each specifying a consensus secondary structure
+diagram. Each page is delimited by a 'showpage' line in an 'ignore'
+section (as described below).
+.B esl-ssdraw
+will read all pages of the 
+.B postscript_template_file
+and then choose the appropriate one that corresponds with the
+alignment in 
+.B msafile 
+based on the consensus (nongap RF) length of the alignment. 
+For an alignment of consensus length <rflen>, the first
+page of
+.B postscript_template_file
+that has a structure diagram with consensus length <rflen> will be used
+as the template structure for the alignment.
+
+Each page of 
+.B postscript_template_file
+contains blocks of text organized into seven different possible
+sections. Each section must begin with a single line '% begin
+<sectionname>' and end with a single line '% end <sectionname>' and
+have n >= 1 lines in between. On the begin and end lines, there must
+be at least one space between the '%' and the 'begin'
+or 'end'. <sectionname> must be one of the
+following: 'modelname', 'legend', 'scale', 'regurgitate', 'ignore', 'text
+positiontext', 'text nucleotides', 'lines positionticks', or 'lines
+bpconnects'. The n >=1 lines in between the begin and end lines of
+each section must be in a specific format that differs for each
+section as described below.
+
+Importantly, each page must end with an 'ignore' section that includes
+a single line 'showpage' between the begin and end lines. This
+lets 
+.B esl-ssdraw
+know that a page has ended and another might follow.
+
+Each page of a 
+.B postscript_template_file
+must include a single 'modelname' section.
+This section  must include exactly one line in between its
+begin and end lines. This line must begin with a '%' character
+followed by a single space. The remainder of the line will be parsed
+as the model name and will appear on each page of 
+.B postscript_output_file
+in the header section. If the name is more than 16 characters, it will
+be truncated in the output.
+
+Each page of a 
+.B postscript_template_file
+must include a single 'legend' section.  This section must include
+exactly one line in between its begin and end lines. This line must be
+formatted as '% <d1> <f1> <f2> <d2> <f3>', where <d1> is an integer
+specifying the consensus position with relation to which the legend
+will be placed; <f1> and <f2> specify the x and y axis offsets for the
+top left corner of the legend relative to the x and y position of
+consensus position <d1>; <d2> specifies the size of a cell in the
+legend and <f3> specifies how many extra points should be between the
+right hand edge of the legend and the end of the page. the offset of
+the right hand end of the legend . For example, the line '% 34
+-40. -30. 12 0.' specfies that the legend be placed 40 points to the left
+and 30 points below the 34th consensus position, that cells
+appearing in the legend be squares of size 12 points by 12 points, and
+that the right hand side of the legend flush against the right hand
+edge of the printable page. 
+
+Each page of a 
+.B postscript_template_file
+must include a single 'scale' section.  This section must include
+exactly one line in between its begin and end lines. This line must be
+formatted as '<f1> <f2> scale', where <f1> and <f2> are both positive
+real numbers that are identical, for example '1.7 1.7 scale' is valid,
+but '1.7 2.7 scale' is not. This line is a valid postscript command
+which specifies the scale or zoom level on the pages in the output. If
+<f1> and <f2> are '1.0' the default scale is used for which the total
+size of the page is 612 points wide and 792 points tall. A scale of
+2.0 will reduce this to 306 points wide by 396 points tall. A scale of
+0.5 will increase it to 1224 points wide by 1584 points tall. A single
+cell corresponding to one position of the secondary structure is 8
+points by 8 points. For larger RNAs, a scale of less than 1.0 is
+appropriate (for example, SSU rRNA models (about 1500 nt) use a scale
+of about 0.6), and for smaller RNAs, a scale of more than 1.0 might be
+desirable (tRNA (about 70 nt) uses a scale of 1.7). The best way to
+determine the exact scale to use is trial and error.
+
+Each page of a 
+.B postscript_template_file
+can include n >= 0 'regurgitate' sections.
+These sections can include any number of lines. 
+The text in this section will not be parsed by
+.B esl-ssdraw
+but will be included in each page of 
+.B postscript_output_file.
+The format of the lines in this section must therefore be valid
+postscript commands. An example of content that might be in a 
+regurgitate section are commands to draw lines and text annotating the
+anticodon on a tRNA secondary structure diagram.
+
+Each page of a 
+.B postscript_template_file
+must include at least 1 'ignore' section.
+One of these sections must include a single line that
+reads 'showpage'. This section should be placed at the end of each
+page of the template file.  
+Other ignore sections can include any number of lines. 
+The text in these section will not be parsed by
+.B esl-ssdraw
+nor will it be included in each page of 
+.B postscript_output_file.
+An ignore section can contain comments or postscript commands that
+draw features of the
+.B postscript_template_file
+that are 
+unwanted in the 
+.B postscript_output_file.
+
+Each page of a 
+.B postscript_template_file
+must include a single 'text nucleotides' section. This section must
+include exactly <rflen> lines, indicating that the consensus secondary
+structure has exactly <rflen> nucleotide positions. Each line must be of
+the format '(<c>) <x> <y> moveto show' where <c> is a nucleotide (this
+can be any character actually), and <x> and <y> are the coordinates
+specifying the location of the nucleotide on the page, they should be
+positive real numbers. The best way to determine what these
+coordinates should be is manually by trial and error, by inspecting
+the resulting structure as you add each nucleotide. Note that
+.B esl-ssdraw
+will color an 8 point by 8 point cell for each position, so nucleotides
+should be placed about 8 points apart from each other.
+
+Each page of a 
+.B postscript_template_file
+may or may not include a single 'text positiontext' section. This section
+can include n >= 1 lines, each specifying text to be placed next to
+specific positions of the structure, for example, to number them.
+Each line must be of
+the format '(<s>) <x> <y> moveto show' where <s> is a string of text
+to place at coordinates (<x>,<y>) of the postscript page. 
+Currently, the best way to determine what these coordinates is
+manually by trial
+and error, by inspecting the resulting diagram as you add
+each line.
+
+Each page of a 
+.B postscript_template_file
+may or may not include a single 'lines positionticks' section. This section
+can include n >= 1 lines, each specifying the location of a tick mark
+on the diagram. Each line must be of
+the format '<x1> <y1> <x2> <y2> moveto show'. A tick mark (line of
+width 2.0) will be drawn from point (<x1>,<y1>) to point (<x2>,<y2>)
+on each page of
+.B postscript_output_file.
+Currently, the best way to determine what these coordinates should be
+is manually by trial and error, by inspecting the resulting diagram as
+you add each line.
+
+Each page of a 
+.B postscript_template_file
+may or may not include a single 'lines bpconnects' section. This section
+must include <nbp> lines, where <nbp> is the number of basepairs in
+the consensus structure of the input
+.B msafile
+annotated as #=GC SS_cons. Each line should connect two basepaired
+positions in the consensus structure diagram.
+Each line must be of
+the format '<x1> <y1> <x2> <y2> moveto show'. A line
+will be drawn from point (<x1>,<y1>) to point (<x2>,<y2>)
+on each page of
+.B postscript_output_file.
+Currently, the best way to determine what these coordinates should be
+is manually by trial and error, by inspecting the resulting diagram as
+you add each line. 
+
+.SH REQUIRED MEMORY 
+
+The memory required by 
+.B esl-ssdraw
+will be equal to roughly the larger of 2 Mb and 
+the size of the first alignment in
+.B msafile.
+If the 
+.B --small 
+option is used, the memory required will be independent of the
+alignment size. To use 
+.B --small
+the alignment must be in Pfam format, a non-interleaved (1 line/seq)
+version of Stockholm format. 
+
+If the 
+.B --indi
+option is used,
+the required memory may exceed the
+size of the alignment by up to ten-fold, and the output
+.B postscript_output_file 
+may be up to 50 times larger than the
+.B msafile.
+
+.SH OPTIONS
+
+.TP
+.B -h 
+Print brief help;  includes version number and summary of
+all options, including expert options.
+
+.TP
+.B -d 
+Draw the default set of alignment summary diagrams: consensus
+sequence, information content, mutual information, insert frequency,
+average insert length, deletion frequency, and average posterior
+probability (if posterior probability annotation exists in the
+alignment). These diagrams are also drawn by default (if zero command line
+options are used), but using the
+.B -d 
+option allows the user to add additional pages, such as individual
+aligned sequences with
+.B --indi.
+
+.TP 
+.BI --mask " <f>"
+Read the mask from file
+.I <f>,
+and draw positions differently in 
+.B postscript_output_file
+depending on whether they are included or excluded by the mask.
+.I <f>
+must contain a single line of length <rflen> with only '0' and '1'
+characters. <rflen> is the number of nongap characters in the
+reference (#=GC RF) annotation of the first alignment in 
+.B msafile
+A '0' at position <x> of the mask indicates position <x> is excluded
+by the mask, and a '1' indicates that position <x> is included by the mask.
+
+.TP 
+.B --small
+Operate in memory saving mode. Without
+.B --indi,
+required RAM will be independent of the
+size of the alignment in 
+.B msafile.
+With
+.B --indi, 
+the required RAM will be roughly ten times the size of the alignment
+in 
+.B msafile.
+For 
+.B --small
+to work, the alignment must be in
+Pfam Stockholm (non-interleaved 1 line/seq) format.
+
+.TP 
+.B --rf
+Add a page to 
+.B postscript_output_file 
+showing the reference sequence from the #=GC RF annotation in 
+.B msafile. 
+By default, basepaired nucleotides will be colored based on what type of
+basepair they are. To turn this off, use
+.B --no-bp.
+This page is drawn by default (if zero command-line options are used).
+
+.TP 
+.B --info
+Add a page to
+.B postscript_output_file
+with consensus (nongap RF) positions colored based on their
+information content from the alignment. 
+Information content is calculated as 2.0 - H, where H = sum_x p_x
+log_2 p_x for x in {A,C,G,U}. 
+This page is drawn by default (if zero command-line options are used).
+
+.TP 
+.B --mutinfo
+Add a page to
+.B postscript_output_file
+with basepaired consensus (nongap RF) positions colored based on the
+amount of mutual information they have in the alignment. Mutual
+information is sum_{x,y} p_{x,y} log_2 ((p_x * p_y) / p_{x,y}, where x
+and y are the four possible bases A,C,G,U. p_x is the fractions of
+aligned sequences that have nucleotide x of in the left half (5' half) of
+the basepair. p_y is the fraction of aligned sequences that have
+nucleotide y in the position corresponding to the right half (3' half) of
+the basepair. And p_{x,y} is the fraction of aligned sequences that 
+have basepair x:y. For all p_x, p_y and p{x,y} only sequences that 
+that have a nongap nucleotide at both the left and right half of the
+basepair are counted. 
+This page is drawn by default (if zero command-line options are used).
+
+.TP 
+.B --ifreq
+Add a page to
+.B postscript_output_file
+with each consensus (nongap RF) position colored based on the fraction of
+sequences that span each position that have at least 1 inserted
+nucleotide after the position. 
+A sequence s spans consensus position x that is actual alignment
+position a if s has at least one nongap nucleotide aligned to a position
+b <= a and at least one nongap nucleotide aligned to a consensus position
+c >= a. This page is drawn by default (if zero command-line options
+are used).
+
+.TP 
+.B --iavglen
+Add a page to
+.B postscript_output_file
+with each consensus (nongap RF) position colored based on average
+length of insertions that occur after it. The average is calculated as
+the total number of inserted nucleotides after position x, divided by the
+number of sequences that have at least 1 inserted nucleotide after
+position x (so the minimum possible average insert length is 1.0).
+
+.TP 
+.B --dall
+Add a page to
+.B postscript_output_file
+with each consensus (nongap RF) position colored based on the fraction of
+sequences that have a gap (delete) at the position.
+This page is drawn by default (if zero command-line options are used).
+
+.TP 
+.B --dint
+Add a page to
+.B postscript_output_file
+with each consensus (nongap RF) position colored based on the fraction of
+sequences that have an internal gap (delete) at the position. An
+internal gap in a sequence is one that occurs after (5' of) the
+sequence's first aligned nucleotide and after
+(3' of) the sequence's final aligned nucleotide.
+This page is drawn by default (if zero command-line options are used).
+
+.TP 
+.B --prob
+Add a page to
+.B postscript_output_file
+with positions colored based on average posterior probability (PP). The alignment
+must contain #=GR PP annotation for all sequences. PP annotation is
+converted to numerical PP values as follows: '*' = 0.975, '9' =
+0.90, '8' = 0.80, '7' = 0.70, '6' = 0.60, '5' = 0.50, '4' = 0.40, '3'
+= 0.30, '2' = 0.20, '1' = 0.10, '0' = 0.025.
+This page is drawn by default (if zero command-line options are used).
+
+.TP 
+.B --span
+Add a page to
+.B postscript_output_file
+with consensus (nongap RF) positions colored based on the
+fraction of sequences that 'span' the position. 
+A sequence s spans consensus position x that is actual alignment
+position a if s has at least one nongap nucleotide aligned to a position
+b <= a and at least one nongap nucleotide aligned to a consensus position
+c >= a. This page is drawn by default (if zero command-line options
+are used).
+
+.SH OPTIONS FOR DRAWING INDIVIDUAL ALIGNED SEQUENCES
+
+.TP 
+.B --indi
+Add a page displaying the aligned nucleotides in their corresponding
+consensus positions of the structure diagram for each aligned
+sequence in the alignment. 
+By default, basepaired nucleotides will be colored based on what type of
+basepair they are. To turn this off, use
+.B --no-bp.
+If posterior probability information (#=GR
+PP) exists in the alignment, one additional page per sequence will be
+drawn displaying the posterior probabilities.
+
+.TP
+.B -f
+With 
+.B --indi,
+force 
+.B esl-ssdraw
+to create a diagram, even if it is predicted to be large (> 100 Mb).
+By default, if the predicted size exceeds 100 Mb, 
+.B esl-ssdraw
+will fail with a warning. 
+
+.SH OPTIONS FOR OMITTING PARTS OF THE DIAGRAMS
+
+.TP
+.BI --no-leg
+Omit the legend on all pages of 
+.B postscript_output_file.
+
+.TP
+.BI --no-head
+Omit the header on all pages of 
+.B postscript_output_file.
+
+.TP
+.BI --no-foot
+Omit the footer on all pages of 
+.B postscript_output_file.
+
+.SH OPTIONS FOR SIMPLE TWO-COLOR MASK DIAGRAMS
+
+.TP
+.B --mask-col 
+With
+.B --mask,
+.B postscript_output_file
+will contain exactly 1 page showing positions included by the mask as 
+black squares, and positions excluded as pink squares.
+
+.TP
+.BI --mask-diff " <f>"
+With
+.BI --mask  " <f2>"
+and
+.B mask-col,
+.B postscript_output_file
+will contain one additional page comparing the mask from 
+.I <f>
+and the mask from
+.I <f2>.
+Positions will be colored based on whether they are included by one
+mask and not the other, excluded by both masks, and included by both
+masks.
+
+.SH EXPERT OPTIONS FOR CONTROLLING INDIVIDUAL SEQUENCE DIAGRAMS
+
+.TP
+.B --no-pp
+When used in combination with 
+.B --indi,
+do not draw posterior probability structure diagrams for each
+sequence, even if the alignment has PP annotation.
+
+.TP
+.B --no-bp
+Do not color basepaired nucleotides based on their basepair type.
+
+.TP
+.B --no-ol
+When used in combination with 
+.B --indi,
+do not outline nucleotides that differ from the majority rule
+consensus nucleotide given the alignment.
+
+.TP
+.B --no-ntpp
+When used in combination with 
+.B --indi,
+do not draw nucleotides on the individual sequence posterior
+probability diagrams.
+
+.SH EXPERT OPTIONS RELATED TO CONSENSUS SEQUENCE DEFINITION
+
+.TP
+.B --no-cnt
+Do not draw consensus nucleotides on alignment statistic diagrams (such as
+information content diagrams). By default, the consensus nucleotide is
+defined as the most frequent nucleotide in the alignment at the
+corresponding position. Consensus nucleotides that occur in at least
+.I <x>
+fraction of the aligned sequences (that do not contain a gap at the
+position) are capitalized. By default 
+.I <x>
+is 0.75, but can be changed with the 
+.BI --cthresh " <x>"
+option. 
+
+.TP
+.BI --cthresh " <x>"
+Specify the threshold for capitalizing consensus nucleotides defined by
+the majority rule (i.e. when 
+.B --cambig
+is not enabled) as 
+.I <x>.
+
+.TP
+.B --cambig
+Change how consensus nucleotides are calculated from majority rule to
+the least ambiguous IUPAC nucleotide that represents at least
+.I <x>
+fraction of the nongap nucleotides at each consensus position. 
+By default 
+.I <x>
+is 0.9, but can be changed with the 
+.BI --athresh " <x>"
+option. 
+
+.TP
+.BI --athresh " <x>"
+With
+.B --cambig,
+specify the threshold for defining consensus nucleotides
+is the least ambiguous IUPAC nucleotide that represents at least
+.I <x>
+fraction of the nongap nucleotides at each position.
+
+.SH EXPERT OPTIONS CONTROLLING STYLE OF MASKING POSITIONS
+
+.TP
+.B --mask-u
+With 
+.B --mask, 
+change the style of masked columns to squares.
+
+.TP
+.B --mask-x
+With 
+.B --mask, 
+change the style of masked columns to 'x's
+
+.TP
+.B --mask-a
+With 
+.B --mask
+and
+.B --mask-u
+or
+.B --mask-x
+draw the alternative style of square or 'x' masks
+
+.SH EXPERT OPTIONS RELATED TO INPUT FILES
+
+.TP
+.BI --dfile " <f>"
+Read the 'draw file'
+.I <f>
+which specifies numerical values for each consensus position in one or
+more postscript pages.  For each page, the draw file must include
+<rflen>+3 lines (<rflen> is defined in the DESCRIPTION section). The first three lines are special. The following
+<rflen> 'value lines' each must contain a single number, the numerical
+value for the corresponding position.  The first of the three special
+lines defines the 'description' for the page. This should be text that
+describes what the numerical values refer to for the page. The maximum
+allowable length is roughly 50 characters (the exact maximum
+length depends on the template file and the program will report an
+informative error message upon execution if it is exceeded). The
+second special line defines the 'legend header' line that which will
+appear immediately above the legend. It has a maximum allowable length
+of about 30 characters.  The third special line per page must contain
+exactly 7 numbers, which must be in increasing order, each separated
+by a space. 
+These numbers
+define the numerical ranges for the six different colors used to draw
+the consensus positions on the page. 
+The first number defines the minimum value for the first color
+(blue) and must be less than or equal to the minimum
+value from the value lines. The second number defines the minimum
+value for the second color (turquoise). The third, fourth, fifth and
+sixth numbers define the minimum values for the third, fourth, fifth
+and sixth colors (light green, yellow, orange, red), and the seventh
+final number defines the maximum value for red and must be equal to
+or greater than the maximum value from the value lines. 
+After the <rflen> value lines, there must exist a special line with
+only '//', signifying the end of a page.
+The draw file 
+.I <f>
+must end with this special '//' line, even if it only includes a
+single page. A draw file specifying <n> pages should include exactly
+<n> * (<rflen> + 4) lines.
+
+.TP
+.BI --efile " <f>"
+Read the 'expert draw file'
+.I <f>
+which specifies the colors and nucleotides to draw on each consensus
+position in one or more postscript pages. Unlike with the 
+.B --dfile
+option, no legend will be drawn when
+.B --efile 
+is used.
+For each page, the draw file must include <rflen> lines, each with four
+or five tab-delimited tokens. The first four tokens on line <x>
+specify the color to paint position <x> and must be real numbers
+between 0 and 1. The four numbers specify the cyan, magenta, yellow
+and black values, respectively, in the CMYK color scheme for the
+postscript file. The fifth token on line <x> specifies which nucleotide
+to write on position <x> (on top of the colored background). If the
+fifth token does not exist, no nucleotide will be written. 
+After the <rflen> lines, there must exist a special line with
+only '//', signifying the end of a page.
+The expert draw file 
+.I <f>
+must end with this special '//' line, even if it only includes a
+single page. A expert draw file specifying <n> pages should include exactly
+<n> * (<rflen> + 1) lines.
+
+.TP
+.BI --ifile " <f>"
+Read insert information from the file
+.I <f>,
+which may have been created with INFERNAL's
+.B cmalign
+program. The insert information in 
+.B msafile
+will be ignored and the information from
+.I <f>
+will supersede it. Inserts are columns that are gaps in the reference
+(#=GC RF) annotation. 
+
+.SH AUTHOR
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
diff --git a/miniapps/esl-translate.c b/miniapps/esl-translate.c
new file mode 100644
index 0000000..b1b3e74
--- /dev/null
+++ b/miniapps/esl-translate.c
@@ -0,0 +1,215 @@
+/* Translate DNA sequence into six frames, into individual ORFs.
+ * 
+ */
+#include "esl_config.h"
+
+#include "easel.h"
+#include "esl_alphabet.h"
+#include "esl_gencode.h"
+#include "esl_getopts.h"
+
+
+/*****************************************************************
+ * 1. Main loop for reading complete sequences with ReadSeq()
+ *****************************************************************/
+
+static int
+do_by_sequences(ESL_GENCODE *gcode, ESL_GENCODE_WORKSTATE *wrk, ESL_SQFILE *sqfp)
+{
+  ESL_SQ *sq = esl_sq_CreateDigital(gcode->nt_abc);
+  int     status;
+
+  while (( status = esl_sqio_Read(sqfp, sq )) == eslOK)
+    {
+      if (sq->n < 3) continue;
+
+      if (wrk->do_watson) {
+        esl_gencode_ProcessStart(gcode, wrk, sq);
+        esl_gencode_ProcessPiece(gcode, wrk, sq);
+        esl_gencode_ProcessEnd(wrk, sq);
+      }
+
+      if (wrk->do_crick) {
+        esl_sq_ReverseComplement(sq);
+        esl_gencode_ProcessStart(gcode, wrk, sq);
+        esl_gencode_ProcessPiece(gcode, wrk, sq);
+        esl_gencode_ProcessEnd(wrk, sq);
+      }
+
+      esl_sq_Reuse(sq);
+    }
+  if      (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s)\n%s\n",
+					   sqfp->filename, sqfp->get_error(sqfp));     
+  else if (status != eslEOF)     esl_fatal("Unexpected error %d reading sequence file %s",
+					   status, sqfp->filename);
+  
+  esl_sq_Destroy(sq);
+  return eslOK;
+}
+
+
+static int 
+do_by_windows(ESL_GENCODE *gcode, ESL_GENCODE_WORKSTATE *wrk, ESL_SQFILE *sqfp)
+{
+  ESL_SQ *sq = esl_sq_CreateDigital(gcode->nt_abc);
+  int     windowsize  = 4092;                // can be any value, but a multiple of 3 makes most sense. windowsize can be +/-; + means reading top strand; - means bottom strand.
+  int     contextsize = 2;                   // contextsize (adjacent window overlap) must be 2, or translation won't work properly.
+  int     wstatus;
+
+  ESL_DASSERT1(( windowsize  % 3 == 0 ));  
+
+  while (( wstatus = esl_sqio_ReadWindow(sqfp, contextsize, windowsize, sq)) != eslEOF)
+    {
+      if (wstatus == eslEOD)
+	{
+	  if ( (windowsize > 0 && wrk->do_watson) || (windowsize < 0 && wrk->do_crick))
+	    esl_gencode_ProcessEnd(wrk, sq);
+
+	  if (windowsize > 0 && ! wrk->do_crick) { esl_sq_Reuse(sq); continue; } // Don't switch to revcomp if we don't need do. Allows -W --watson to work on nonrewindable streams
+	  if (windowsize < 0) esl_sq_Reuse(sq);             // Do not Reuse the sq on the switch from watson to crick; ReadWindow needs sq->L
+	  windowsize = -windowsize;                         // switch to other strand.
+	  continue;
+	}
+      else if (wstatus == eslEFORMAT) esl_fatal("Parsing failed in sequence file %s:\n%s",          sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+      else if (wstatus == eslEINVAL)  esl_fatal("Invalid residue(s) found in sequence file %s\n%s", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp));
+      else if (wstatus != eslOK)      esl_fatal("Unexpected error %d reading sequence file %s", wstatus, sqfp->filename);
+
+      /* If we're the first window in this input DNA sequence 
+       * (or the first window in its revcomp), then initialize.
+       * sq->C is the actual context overlap; 0=1st window; 2 (i.e. C)= subsequent.
+       */
+      if (sq->C == 0) 
+	{
+	  if (sq->n < 3) continue; // DNA sequence too short; skip it, don't even bother to revcomp, go to next sequence.
+	  if ( (windowsize > 0 && wrk->do_watson) || (windowsize < 0 && wrk->do_crick))
+	    esl_gencode_ProcessStart(gcode, wrk, sq);
+	}
+
+      if ( (windowsize > 0 && wrk->do_watson) || (windowsize < 0 && wrk->do_crick))      
+	esl_gencode_ProcessPiece(gcode, wrk, sq);
+    }
+  esl_sq_Destroy(sq);
+  return eslOK;
+}
+
+
+/*****************************************************************
+ * x. main() for the esl-translate program
+ *****************************************************************/
+
+static ESL_OPTIONS options[] = {
+  /* name           type        default  env  range toggles reqs incomp  help                                          docgroup*/
+  { "-h",         eslARG_NONE,    FALSE, NULL, NULL, NULL,  NULL, NULL,  "show brief help on version and usage",          0 },
+  { "-c",         eslARG_INT,       "1", NULL, NULL, NULL,  NULL, NULL,  "use alt genetic code of NCBI transl table <n>", 0 },
+  { "-l",         eslARG_INT,      "20", NULL, NULL, NULL,  NULL, NULL,  "minimum ORF length",                            0 },
+  { "-m",         eslARG_NONE,    FALSE, NULL, NULL, NULL,  NULL, "-M",  "ORFs must initiate with AUG only",              0 },
+  { "-M",         eslARG_NONE,    FALSE, NULL, NULL, NULL,  NULL, "-m",  "ORFs must start with allowed initiation codon", 0 },
+  { "-W",         eslARG_NONE,    FALSE, NULL, NULL, NULL,  NULL, NULL,  "use windowed, memory-efficient seq reading",    0 },
+  { "--informat", eslARG_STRING,  FALSE, NULL, NULL, NULL,  NULL, NULL,  "specify that input file is in format <s>",      0 },
+  { "--watson",   eslARG_NONE,    FALSE, NULL, NULL, NULL,  NULL, NULL,  "only translate top strand",                     0 },
+  { "--crick",    eslARG_NONE,    FALSE, NULL, NULL, NULL,  NULL, NULL,  "only translate bottom strand",                  0 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <seqfile>";
+static char banner[] = "six-frame translation of nucleic acid seq to ORFs";
+
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS   *go          = NULL;
+  ESL_ALPHABET  *nt_abc      = esl_alphabet_Create(eslDNA);
+  ESL_ALPHABET  *aa_abc      = esl_alphabet_Create(eslAMINO);
+  ESL_GENCODE   *gcode       = NULL;
+  ESL_GENCODE_WORKSTATE *wrk    = NULL;
+  char          *seqfile     = NULL;
+  int            informat    = eslSQFILE_UNKNOWN;
+  ESL_SQFILE    *sqfp        = NULL;
+  int            status;
+  
+  /***************************************************************** 
+   * command line parsing
+   *****************************************************************/
+
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK ||
+      esl_opt_VerifyConfig(go)               != eslOK)
+    {
+      printf("Failed to parse command line: %s\n", go->errbuf);
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+  
+  if (esl_opt_GetBoolean(go, "-h") )
+    {
+      esl_banner(stdout, argv[0], banner);
+      esl_usage (stdout, argv[0], usage);
+      puts("\n where options are:");
+      esl_opt_DisplayHelp(stdout, go, /*docgroup=*/0, /*indent=*/2, /*textwidth=*/80);
+
+      puts("\nAvailable NCBI genetic code tables (for -c <id>):");
+      esl_gencode_DumpAltCodeTable(stdout);
+
+      exit(0);
+    }
+
+  if (esl_opt_ArgNumber(go) != 1) 
+    {
+      printf("Incorrect number of command line arguments.\n");
+      esl_usage(stdout, argv[0], usage);
+      printf("\nTo see more help on available options, do %s -h\n\n", argv[0]);
+      exit(1);
+    }
+ 
+  seqfile = esl_opt_GetArg(go, 1);
+
+  if (esl_opt_IsOn(go, "--informat") &&
+      (informat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat"))) == eslMSAFILE_UNKNOWN)
+    esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); 
+
+  status = esl_sqfile_OpenDigital(nt_abc, seqfile, informat, /*env=*/NULL, &sqfp);
+  if      (status == eslENOTFOUND) esl_fatal("Failed to find (or open) sequence file %s", seqfile);
+  else if (status == eslEFORMAT)   esl_fatal("Failed to recognize format of sequence file %s", seqfile);
+  else if (status != eslOK)        esl_fatal("Failure in opening sequence file %s; code %d", seqfile, status);
+
+  /* A limitation. The esl_sqio_ReadWindow() interface needs to use SSI positioning
+   * to read reverse complement, and that doesn't work on nonrewindable streams.
+   */
+  if ( esl_opt_GetBoolean(go, "-W") && ! esl_sqfile_IsRewindable(sqfp) && ! esl_opt_GetBoolean(go, "--watson"))
+    esl_fatal("esl-translate can't read reverse complement from a nonrewindable stream (stdin pipe, .gz file, etc).");
+
+  /* Set up the genetic code. Default = NCBI 1, the standard code; allow ORFs to start at any aa
+   */
+  gcode = esl_gencode_Create(nt_abc, aa_abc);
+  esl_gencode_Set(gcode, esl_opt_GetInteger(go, "-c"));  // default = 1, the standard genetic code
+
+  if      (esl_opt_GetBoolean(go, "-m"))   esl_gencode_SetInitiatorOnlyAUG(gcode);
+  else if (! esl_opt_GetBoolean(go, "-M")) esl_gencode_SetInitiatorAny(gcode);      // note this is the default, if neither -m or -M are set
+
+
+  /* Set up the workstate structure, which contains both stateful 
+   * info about our position in <sqfp> and the DNA <sq>, as well as
+   * one-time config info from options
+   */
+  wrk = esl_gencode_WorkstateCreate(go, gcode);
+
+
+  /* The two styles of main processing loop:
+   */
+  if (esl_opt_GetBoolean(go, "-W"))  do_by_windows(gcode, wrk, sqfp);
+  else                               do_by_sequences(gcode, wrk, sqfp);
+
+
+  esl_gencode_WorkstateDestroy(wrk);
+  esl_sqfile_Close(sqfp);
+  esl_gencode_Destroy(gcode);
+  esl_alphabet_Destroy(aa_abc);
+  esl_alphabet_Destroy(nt_abc);
+  esl_getopts_Destroy(go);
+  return 0;
+}
+
+
+
+
diff --git a/miniapps/esl-translate.itest.pl b/miniapps/esl-translate.itest.pl
new file mode 100755
index 0000000..39a65e3
--- /dev/null
+++ b/miniapps/esl-translate.itest.pl
@@ -0,0 +1,149 @@
+#! /usr/bin/perl
+
+BEGIN {
+    $builddir = shift;
+    $srcdir   = shift;
+    $tmppfx   = shift;
+}
+
+if (! -x "$builddir/miniapps/esl-translate") { die "FAIL: didn't find esl-translate program in $builddir/miniapps"; }
+if (! -x "$builddir/miniapps/esl-reformat")  { die "FAIL: didn't find esl-reformat program in $builddir/miniapps"; }
+if (! -x "$builddir/miniapps/esl-shuffle")   { die "FAIL: didn't find esl-shuffle program in $builddir/miniapps"; }
+if (! -x "$builddir/miniapps/esl-sfetch")    { die "FAIL: didn't find esl-shuffle program in $builddir/miniapps"; }
+
+# Test the genetic code is correct, including spot checks of some alternative codes
+#
+# The reformatting to pfam format is solely to get the seq all on one line, simplifying parsing 
+#
+open(TESTFILE,">$tmppfx.fa") || die "FAIL: couldn't open $tmppfx.fa for writing translation_test seqfile"; 
+print TESTFILE << "EOF";
+>translation_test
+TTGATAATG
+AAAAACAAGAATACAACCACGACTAGAAGCAGGAGTATAATCATGATT
+CAACACCAGCATCCACCCCCGCCTCGACGCCGGCGTCTACTCCTGCTT
+GAAGACGAGGATGCAGCCGCGGCTGGAGGCGGGGGTGTAGTCGTGGTT
+TACTATTCATCCTCGTCTTGCTGGTGTTTATTCTTGTTTTGATAATAG
+EOF
+close TESTFILE;
+
+$output = `$builddir/miniapps/esl-translate -l 60 $tmppfx.fa | $builddir/miniapps/esl-reformat pfam -`;
+if ($output !~ / coords=1\.\.192\s+length=64\s+frame=1/)                                     { die "FAIL: standard genetic code mistranslated? unexpected desc line"; }
+if ($output !~ /orf1\s+LIMKNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYYSSSSCWCLFLF\s+/) { die "FAIL: standard genetic code mistranslated"; }
+
+$output = `$builddir/miniapps/esl-translate -c 3 -l 60 $tmppfx.fa | $builddir/miniapps/esl-reformat pfam -`;
+if ($output !~ / coords=1\.\.195\s+length=65\s+frame=1/)                                      { die "FAIL: yeast mito genetic code mistranslated? unexpected desc line"; }
+if ($output !~ /orf1\s+LMMKNKNTTTTRSRSMIMIQHQHPPPPRRRRTTTTEDEDAAAAGGGGVVVVYYSSSSCWCLFLFW\s+/) { die "FAIL: yeast mito genetic code mistranslated"; }
+
+$output = `$builddir/miniapps/esl-translate -c 14 -l 60 $tmppfx.fa | $builddir/miniapps/esl-reformat pfam -`;
+if ($output !~ / coords=1\.\.198\s+length=66\s+frame=1/)                                       { die "FAIL: alt flatworm genetic code mistranslated? unexpected desc line"; }
+if ($output !~ /orf1\s+LIMNNKNTTTTSSSSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYYSSSSCWCLFLFWY\s+/) { die "FAIL: alt flatworm genetic code mistranslated"; }
+
+# Use initiators, -M option. 
+# Code 1 uses UUG (also CUG, AUG). Code 3 uses AUA (also AUG). Code 14, only AUG.
+# Initiator is always M.
+$output = `$builddir/miniapps/esl-translate -M -l 60 $tmppfx.fa | $builddir/miniapps/esl-reformat pfam -`;
+if ($output !~ / coords=1\.\.192\s+length=64\s+frame=1/)                                     { die "FAIL: standard genetic code initiators mishandled w/ -M? unexpected desc line"; }
+if ($output !~ /orf1\s+MIMKNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYYSSSSCWCLFLF\s+/) { die "FAIL: standard genetic code initiators mishandled w/ -M"; }
+
+$output = `$builddir/miniapps/esl-translate -M -c 3 -l 60 $tmppfx.fa | $builddir/miniapps/esl-reformat pfam -`;
+if ($output !~ / coords=4\.\.195\s+length=64\s+frame=1/)                                     { die "FAIL: yeast mito genetic code initiators mishandled w/ -M? unexpected desc line"; }
+if ($output !~ /orf1\s+MMKNKNTTTTRSRSMIMIQHQHPPPPRRRRTTTTEDEDAAAAGGGGVVVVYYSSSSCWCLFLFW\s+/) { die "FAIL: yeast mito genetic code initiators mishandled w/ -M"; }
+
+$output = `$builddir/miniapps/esl-translate -M -c 14 -l 60 $tmppfx.fa | $builddir/miniapps/esl-reformat pfam -`;
+if ($output !~ / coords=7\.\.198\s+length=64\s+frame=1/)                                     { die "FAIL: alt flatworm genetic code initiators mishandled w/ -M? unexpected desc line"; }
+if ($output !~ /orf1\s+MNNKNTTTTSSSSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYYSSSSCWCLFLFWY\s+/) { die "FAIL: alt flatworm genetic code initiators mishandled w/ -M"; }
+
+# Use only AUG initiator, -m option.
+$output = `$builddir/miniapps/esl-translate -m -l 60 $tmppfx.fa | $builddir/miniapps/esl-reformat pfam -`;
+if ($output !~ / coords=7\.\.192\s+length=62\s+frame=1/)                                   { die "FAIL: standard genetic code AUG starts mishandled w/ -m? unexpected desc line"; }
+if ($output !~ /orf1\s+MKNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYYSSSSCWCLFLF\s+/) { die "FAIL: standard genetic code AUG starts mishandled w/ -m"; }
+
+$output = `$builddir/miniapps/esl-translate -m -c 3 -l 60 $tmppfx.fa | $builddir/miniapps/esl-reformat pfam -`;
+if ($output !~ / coords=7\.\.195\s+length=63\s+frame=1/)                                    { die "FAIL: yeast mito genetic code AUG starts mishandled w/ -m? unexpected desc line"; }
+if ($output !~ /orf1\s+MKNKNTTTTRSRSMIMIQHQHPPPPRRRRTTTTEDEDAAAAGGGGVVVVYYSSSSCWCLFLFW\s+/) { die "FAIL: yeast mito genetic code AUG starts mishandled w/ -m"; }
+
+$output = `$builddir/miniapps/esl-translate -m -c 14 -l 60 $tmppfx.fa | $builddir/miniapps/esl-reformat pfam -`;
+if ($output !~ / coords=7\.\.198\s+length=64\s+frame=1/)                                     { die "FAIL: alt flatworm genetic code AUG starts mishandled w/ -m? unexpected desc line"; }
+if ($output !~ /orf1\s+MNNKNTTTTSSSSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYYSSSSCWCLFLFWY\s+/) { die "FAIL: alt flatworm genetic code AUG starts mishandled w/ -m"; }
+
+
+# Now test ambiguous translation, using a second contrived sequence.
+# The test includes an ambiguous stop (UAA|UAG) which should correctly decode to *.
+# Also includes an ambig initiator HUG=AUG|CUG|UUG, which should decode to M with -M;
+# NNN, though, can't initiate (because it's consistent with a stop too).
+#
+# The test seq is short enough that we don't need to reformat to pfam, which
+# is essential, because the test seq translates to other peptides in other frames,
+# whereas above we could make it translate to a single seq.
+#
+open(TESTFILE,">$tmppfx.fa") || die "FAIL: couldn't open $tmppfx.fa for writing ambig_test seqfile"; 
+print TESTFILE << "EOF";
+>ambig_test
+NNNHUGUUYUURUCNUAYUGYCUNCCNCAYCARCGNAUHACNAAYAARAGYAGRGUNGCNGAYGARGGN
+YUUYCUYAUYGUUAR
+EOF
+close TESTFILE;
+
+$output = `$builddir/miniapps/esl-translate -l 25 --watson $tmppfx.fa`;
+if ($output !~ / coords=4\.\.81\s+length=26\s+frame=1/)       { die "FAIL: ambiguity codes mishandled by translation - unexpected desc line"; }
+if ($output !~ /\s+XFLSYCLPHQRITNKSRVADEGXXXX\s+/)        { die "FAIL: ambiguity codes mishandled by translation"; }
+
+$output = `$builddir/miniapps/esl-translate -M -l 25 --watson $tmppfx.fa`;
+if ($output !~ / coords=4\.\.81\s+length=26\s+frame=1/)       { die "FAIL: ambiguity codes mishandled by translation - unexpected desc line"; }
+if ($output !~ /\s+MFLSYCLPHQRITNKSRVADEGXXXX\s+/)        { die "FAIL: ambiguity codes mishandled by translation"; }
+
+
+# Generate a couple of large-ish random sequences, larger than the window size.
+# Default ReadSeq vs. -W ReadWindow should give the same answer.
+# Do more than one seq, to test that we can do that.
+#
+system("$builddir/miniapps/esl-shuffle -G --dna -N 2 -L 10000 > $tmppfx.fa");
+$out1 = `$builddir/miniapps/esl-translate $tmppfx.fa`;
+$out2 = `$builddir/miniapps/esl-translate -W $tmppfx.fa`;;
+if ($out1 ne $out2) { die "FAIL: default vs. windowed (-W) give different results"; }
+
+
+
+# Using those same large sequences, test coords.
+#
+system("$builddir/miniapps/esl-sfetch --index $tmppfx.fa > /dev/null");
+ at output = `$builddir/miniapps/esl-translate -l 100 $tmppfx.fa`;
+foreach $line (@output) 
+{
+    if ($line =~ /^>(orf\d+)\s+source=(\S+)\s+coords=(\d+)\.\.(\d+)\s+length=(\d+)\s+frame=(\d+)/)
+    {
+	$orfname = $1;
+	$source  = $2;
+	$start   = $3;
+	$end     = $4;
+	$aalen   = $5;
+	$frame   = $6;
+
+	if ($end > $start)
+	{
+	    if ($end - $start + 1 != $aalen * 3) { die "FAIL: $start..$end is not a multiple of 3"; }
+	    if ($start >= 4)    { $start -= 3; $has_leading_stop  = 1; } else { $has_leading_stop  = 0;  }
+	    if ($end   <= 9997) { $end   += 3; $has_trailing_stop = 1; } else { $has_trailing_stop = 0;  }
+	    $ntlen = $end - $start + 1; 
+	}
+	else
+	{
+	    if ($start - $end + 1 != $aalen * 3) { die "FAIL: $start..$end is not a multiple of 3"; }
+	    if ($end >= 4)      { $end -= 3;   $has_trailing_stop = 1; } else { $has_trailing_stop = 0;  }
+	    if ($start <= 9997) { $start += 3; $has_leading_stop  = 1; } else { $has_leading_stop  = 0;  }
+	    $ntlen = $start - $end + 1; 
+	}
+
+	$out2 = `$builddir/miniapps/esl-sfetch -c $start..$end $tmppfx.fa $source | $builddir/miniapps/esl-translate -l $aalen -`;
+	if ($has_leading_stop)  { $expected_start = 4; }        else { $expected_start = 1;      }
+	if ($has_trailing_stop) { $expected_end = $ntlen - 3; } else { $expected_end   = $ntlen; }
+	if ( $out2 !~ /^>orf\d+ source=.+ coords=$expected_start..$expected_end length=$aalen frame=1/) 
+	{ die "FAIL: fetched & translated seq not identical to original translation - coord problem?"; }
+    }
+
+}
+
+print "ok\n"; 
+unlink "$tmppfx.fa";
+unlink "$tmppfx.fa.ssi";
+exit 0;
diff --git a/miniapps/esl-translate.man b/miniapps/esl-translate.man
new file mode 100644
index 0000000..4a5c897
--- /dev/null
+++ b/miniapps/esl-translate.man
@@ -0,0 +1,293 @@
+.TH "esl-translate" 1  "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-translate - translate DNA sequence in six frames into individual ORFs
+
+.SH SYNOPSIS
+.B esl-translate
+.I [options]
+.I seqfile
+
+
+.SH DESCRIPTION
+
+.pp
+Given a 
+.I seqfile 
+containing DNA or RNA sequences,
+.B esl-translate
+outputs a six-frame translation of them as individual open reading
+frames in FASTA format.
+
+.pp
+By default, only open reading frames greater than 20aa are reported. 
+This minimum ORF length can be changed with the
+.I -l 
+option.
+
+.pp
+By default, no specific initiation codon is required, and any amino acid can start an open reading frame.
+This is because
+.I esl-translate
+may be used on sequence fragments, eukaryotic genes with introns, or other
+cases where we
+do not want to assume that ORFs are complete coding regions.
+This behavior can be changed. With the 
+.I -m 
+option, ORFs start with an initiator AUG Met. With the
+.I -M
+option, ORFs start with any of the initiation codons allowed by the
+genetic code. For example, the "standard" code (NCBI transl_table 1) 
+allows AUG, CUG, and UUG as initiators. When
+.I -m
+or
+.I -M
+are used, an initiator is always translated to Met (even if the initiator
+is something like UUG or CUG that doesn't encode Met as an elongator).
+
+.pp
+If
+.I seqfile
+is - (a single dash), input is read from the stdin pipe. This
+(combined
+with the output being a standard FASTA file) allows
+.B esl-translate 
+to be used in command line incantations.
+If
+.I seqfile
+ends in .gz, it is assumed to be a gzip-compressed file, and 
+Easel will try to read it as a stream from
+.B gunzip -c.
+
+
+
+.SH OUTPUT FORMAT
+
+.pp
+
+
+The output FASTA name/description line contains information about the
+source and coordinates of each ORF. Each ORF is named 
+.B orf1,
+etc., with numbering starting from 1, in order of their start position
+on the top strand followed by the bottom strand.  The rest of the
+FASTA name/desc line contains 4 additional fields, followed by the
+description of the source sequence:
+
+.TP
+.B source=<s>
+<s> is the name of the source DNA/RNA sequence.
+
+.TP
+.B coords=<start>..<end>
+Coords, 1..L, for the translated ORF in a source DNA sequence of
+length L. If start is greater than end, the ORF is on the bottom
+(reverse complement) strand. The start is the first nucleotide of the
+first codon; the end is the last nucleotide of the last codon. The
+stop codon is not included in the coordinates (unlike in CDS
+annotation in GenBank, for example.)
+
+.TP
+.B length=<n>
+Length of the ORF in amino acids.
+
+.TP
+.B frame=<n>
+Which frame the ORF is in. Frames 1..3 are the top strand; 4..6 are the
+bottom strand. Frame 1 starts at nucleotide 1. Frame 4 starts at
+nucleotide L.
+
+
+
+.SH ALTERNATIVE GENETIC CODES
+
+.pp
+By default, the "standard" genetic code is used (NCBI transl_table 1). 
+Any NCBI genetic code transl_table can be selected with the
+.I -c 
+option, as follows:
+
+.TP 
+.B 1 
+Standard
+.TP
+.B 2 
+Vertebrate mitochondrial
+.TP
+.B 3
+Yeast mitochondrial
+.TP
+.B 4 
+Mold, protozoan, coelenterate mitochondrial; Mycoplasma/Spiroplasma
+.TP
+.B 5 
+Invertebrate mitochondrial
+.TP
+.B 6 
+Ciliate, dasycladacean, Hexamita nuclear
+.TP
+.B  9 
+Echinoderm and flatworm mitochondrial
+.TP
+.B 10 
+Euplotid nuclear
+.TP
+.B 11
+Bacterial, archaeal; and plant plastid
+.TP
+.B 12 
+Alternative yeast
+.TP
+.B 13 
+Ascidian mitochondrial
+.TP
+.B 14 
+Alternative flatworm mitochondrial
+.TP
+.B 16 
+Chlorophycean mitochondrial
+.TP
+.B 21 
+Trematode mitochondrial
+.TP
+.B 22 
+Scenedesmus obliquus mitochondrial
+.TP
+.B 23 
+Thraustochytrium mitochondrial
+.TP
+.B 24 
+Pterobranchia mitochondrial
+.TP
+.B 25 
+Candidate Division SR1 and Gracilibacteria
+
+
+.PP
+As of this writing, more information about the genetic codes in the
+NCBI translation tables is at 
+.I http://www.ncbi.nlm.nih.gov/Taxonomy/ 
+at a link titled
+.I Genetic codes.
+
+.SH IUPAC DEGENERACY CODES IN DNA 
+
+.pp
+DNA sequences may contain IUPAC degeneracy codes, such as N, R, Y,
+etc. If all codons consistent with a degenerate codon translate to the
+same amino acid (or to a stop), that translation is done; otherwise,
+the codon is translated as X (even if one or more compatible codons
+are stops). For example, in the standard code, UAR translates to *
+(stop), GGN translates to G (glycine), NNN translates to X, and UGR
+translates to X (it could be either a UGA stop or a UGG Trp).
+
+.pp
+Degenerate initiation codons are handled essentially the same. If all
+codons consistent with the degenerate codon are legal initiators, then
+the codon is allowed to initiate a new ORF. Stop codons are never
+a legal initiator (not only with 
+.I -m 
+or
+.I -M
+but also with the default of allowing any amino acid to initiate),
+so degenerate codons consistent with a stop cannot be initiators.
+For example, NNN cannot initiate an ORF, nor can UGR -- even
+though they translate to X. This means that we don't translate
+long stretches of N's as long ORFs of X's, which is probably a
+feature, given the prevalence of artificial runs of N's in genome 
+sequence assemblies.
+
+.pp
+Degenerate DNA codons are not translated to degenerate amino acids
+other than X, even when that is possible. For example, SAR and MUH
+are decoded as X, not Z (Q|E) and J (I|L). The extra complexity
+needed for a degenerate to degenerate translation doesn't seem worthwhile.
+
+
+.SH OPTIONS
+
+.TP
+.B -h
+Print brief help. Includes version number and summary of all options. 
+Also includes a list of the available
+NCBI transl_tables and their numerical codes, for the
+.I -c 
+option.
+
+.TP
+.BI -c " <id>"
+Choose alternative genetic code 
+.I <id>
+where 
+.I <id>
+is the numerical code of one of the NCBI transl_tables.
+
+.TP
+.BI -l " <n>"
+Set the minimum reported ORF length to 
+.I <n>
+aa.
+
+.TP
+.B -m
+Require ORFs to start with an initiator codon AUG (Met).
+
+.TP
+.B -M
+Require ORFs to start with an initiator codon, as specified by the
+allowed initiator codons in the NCBI transl_table. In the default
+Standard code, AUG, CUG, and UUG are allowed as initiators. An 
+initiation codon is always translated as Met, even if it does not
+normally encode Met as an elongator.
+
+.TP
+.B -W
+Use a memory-efficient windowed sequence reader.
+The default is to read entire DNA sequences into memory, which
+may become memory limited for some very large eukaryotic chromosomes.
+The windowed reader cannot 
+reverse complement a nonrewindable input stream, so 
+either
+.I <seqfile>
+must be a file,
+or you must use
+.I --watson
+to limit translation to the top strand.
+
+
+.TP
+.BI --informat " <s>"
+Assert that the input 
+.I <seqfile>
+is in 
+.I <s> 
+format. Valid formats include 
+FASTA, GenBank, EMBL, Uniprot, DDBJ, Stockholm, Clustal, and Phylip.
+.I <s> 
+is case-insensitive but must be a complete format name; for example,
+.BI --informat " fasta"
+or
+.BI --informat " embl"
+work.
+
+.TP
+.B --watson
+Only translate the top strand.
+
+.TP
+.B --crick
+Only translate the bottom strand.
+
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
+
+
+
+
+
diff --git a/miniapps/esl-weight.c b/miniapps/esl-weight.c
new file mode 100644
index 0000000..ecbe6a4
--- /dev/null
+++ b/miniapps/esl-weight.c
@@ -0,0 +1,139 @@
+/* Assigns sequence weights to an MSA.
+ */
+#include "esl_config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "easel.h"
+#include "esl_getopts.h"
+#include "esl_msa.h"
+#include "esl_msafile.h"
+#include "esl_msaweight.h"
+#include "esl_random.h"
+
+#define WGTOPTS "-g,-p,-b,-f"
+
+static ESL_OPTIONS options[] = {
+  /* name           type      default  env    range toggles reqs  incomp               help                                     docgroup*/
+  { "-h",         eslARG_NONE,   FALSE, NULL,     NULL,   NULL,NULL,   NULL,          "show brief help on version and usage",        1 },
+  { "-g",         eslARG_NONE,"default",NULL,     NULL,WGTOPTS,NULL,   NULL,          "Gerstein/Sonnhammer/Chothia tree weights",    1 },
+  { "-p",         eslARG_NONE,   FALSE, NULL,     NULL,WGTOPTS,NULL,   NULL,          "Henikoff position-based weights",             1 },
+  { "-b",         eslARG_NONE,   FALSE, NULL,     NULL,WGTOPTS,NULL,   NULL,          "Henikoff simple filter weights",              1 },
+  { "-f",         eslARG_NONE,   FALSE, NULL,     NULL,WGTOPTS,NULL,   NULL,          "filter out seqs by fractional identity",      1 },
+  { "-o",         eslARG_OUTFILE, NULL, NULL,     NULL,   NULL,NULL,   NULL,          "send output to file <f>, not stdout",         1 },
+  { "--id",       eslARG_REAL,  "0.62", NULL,"0<=x<=1",   NULL,"-b",   NULL,          "for -b: set identity cutoff",                 1 },
+  { "--idf",      eslARG_REAL,  "0.80", NULL,"0<=x<=1",   NULL,"-f",   NULL,          "for -f: set identity cutoff",                 1 },
+  { "--informat", eslARG_STRING, FALSE, NULL,     NULL,   NULL,NULL,   NULL,          "specify that input file is in format <s>",    1 },
+  { "--amino",    eslARG_NONE,   FALSE, NULL,     NULL,   NULL,NULL,"--dna,--rna",    "<msa file> contains protein alignments",      1 },
+  { "--dna",      eslARG_NONE,   FALSE, NULL,     NULL,   NULL,NULL,"--amino,--rna",  "<msa file> contains DNA alignments",          1 },
+  { "--rna",      eslARG_NONE,   FALSE, NULL,     NULL,   NULL,NULL,"--amino,--dna",  "<msa file> contains RNA alignments",          1 },
+  {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+static char usage[]  = "[-options] <msa file>";
+static char banner[] = "calculate sequence weights for an alignment";
+
+static void
+cmdline_failure(char *argv0, ESL_GETOPTS *go, char *format, ...)
+{
+  va_list argp;
+
+  va_start(argp, format);
+  vfprintf(stderr, format, argp);
+  va_end(argp);
+  esl_usage(stdout, argv0, usage);
+  puts("\n options:");
+  esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+  /* printf("\nTo see more help on available options, do %s -h\n\n", argv0); */
+  exit(1);
+}
+
+static void
+cmdline_help(char *argv0, ESL_GETOPTS *go) 
+{
+  esl_banner(stdout, argv0, banner);
+  esl_usage (stdout, argv0, usage);
+  puts("\n options:");
+  esl_opt_DisplayHelp(stdout, go, 1, 2, 80);
+  exit(0);
+}
+
+int
+main(int argc, char **argv)
+{
+  ESL_GETOPTS    *go       = NULL; 
+  char           *msafile  = NULL;
+  int             fmt      = eslMSAFILE_UNKNOWN;
+  ESL_ALPHABET   *abc      = NULL;
+  ESL_MSAFILE    *afp      = NULL;
+  ESL_MSA        *msa      = NULL;
+  int             status;
+  FILE           *ofp;	   /* output stream       */
+
+  /* Parse command line */
+  go = esl_getopts_Create(options);
+  if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], go, "Failed to parse command line: %s\n", go->errbuf);
+  if (esl_opt_VerifyConfig(go)               != eslOK) cmdline_failure(argv[0], go, "Error in app configuration: %s\n",   go->errbuf);
+  if (esl_opt_GetBoolean(go, "-h") )                   cmdline_help   (argv[0], go);
+  if (esl_opt_ArgNumber(go) != 1)                      cmdline_failure(argv[0], go, "Incorrect number of command line arguments.\n");
+  msafile = esl_opt_GetArg(go, 1);
+
+  if (esl_opt_IsOn(go, "--informat")) {
+    fmt = esl_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"));
+    if (fmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); 
+  }
+
+  ofp = (esl_opt_GetString (go, "-o") == NULL ? stdout : fopen(esl_opt_GetString(go, "-o"), "w"));
+  if (! ofp)  esl_fatal("Failed to open output file %s\n", esl_opt_GetString(go, "-o"));
+
+  if      (esl_opt_GetBoolean(go, "--amino"))   abc = esl_alphabet_Create(eslAMINO);
+  else if (esl_opt_GetBoolean(go, "--dna"))     abc = esl_alphabet_Create(eslDNA);
+  else if (esl_opt_GetBoolean(go, "--rna"))     abc = esl_alphabet_Create(eslRNA);
+  
+  if ((status = esl_msafile_Open(&abc, msafile, NULL, fmt, NULL, &afp)) != eslOK)
+    esl_msafile_OpenFailure(afp, status);
+
+
+  while ((status = esl_msafile_Read(afp, &msa)) != eslEOF)
+    {
+      if (status != eslOK) esl_msafile_ReadFailure(afp, status);
+
+      if       (esl_opt_GetBoolean(go, "-f")) 
+	{
+	  ESL_MSA *fmsa;
+	  status = esl_msaweight_IDFilter(msa, esl_opt_GetReal(go, "--idf"), &fmsa);
+	  esl_msafile_Write(ofp, fmsa, eslMSAFILE_STOCKHOLM); 
+	  if (fmsa != NULL) esl_msa_Destroy(fmsa);
+	}
+      else if  (esl_opt_GetBoolean(go, "-g"))
+	{ 
+	  status = esl_msaweight_GSC(msa);                                 
+	  esl_msafile_Write(ofp, msa, eslMSAFILE_STOCKHOLM);
+	} 
+      else if  (esl_opt_GetBoolean(go, "-p")) 
+	{
+	  status = esl_msaweight_PB(msa);                                  
+	  esl_msafile_Write(ofp, msa, eslMSAFILE_STOCKHOLM);
+	} 
+      else if  (esl_opt_GetBoolean(go, "-b"))
+	{ 
+	  status = esl_msaweight_BLOSUM(msa, esl_opt_GetReal(go, "--id")); 
+ 	  esl_msafile_Write(ofp, msa, eslMSAFILE_STOCKHOLM);
+	} 
+     else     esl_fatal("internal error: no weighting algorithm selected");
+      if (status != eslOK) esl_fatal("Failed to calculate weights for msa %s", msa->name);
+      
+      esl_msa_Destroy(msa);
+    }
+
+  esl_alphabet_Destroy(abc);
+  esl_msafile_Close(afp);
+  if (ofp != stdout) fclose(ofp); 
+  esl_getopts_Destroy(go);
+  exit(0);
+}
+
+/*****************************************************************
+ * @LICENSE@
+ *****************************************************************/
diff --git a/miniapps/esl-weight.man b/miniapps/esl-weight.man
new file mode 100644
index 0000000..395098e
--- /dev/null
+++ b/miniapps/esl-weight.man
@@ -0,0 +1,111 @@
+.TH "esl-weight" 1  "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual"
+
+.SH NAME
+.TP
+esl-weight - calculate sequence weights in MSA(s)
+
+.SH SYNOPSIS
+
+.B esl-weight
+.I [options]
+.I msafile
+
+.SH DESCRIPTION
+
+.pp
+.B esl-weight
+calculates individual sequence weights for each alignment in 
+.I msafile,
+and outputs a new 
+multiple sequence alignment file in Stockholm format with
+the weights annotated in Stockholm-format 
+.I #=GS <seqname> WT <weight>
+lines.
+The default weighting algorithm is the Gerstein/Sonnhammer/Chothia
+algorithm.
+
+.pp
+If 
+.I msafile
+is - (a single dash),
+MSA input is read from
+.I stdin.
+
+
+
+.pp
+The sequences can be of protein or DNA/RNA sequences. All sequences
+in the same 
+.I seqfile
+must be either protein or DNA/RNA. The alphabet will be autodetected
+unless one of the options 
+.I --amino,
+.I --dna,
+or 
+.I --rna 
+are given. These options may be useful in automated
+pipelines to make 
+.B esl-weight
+more robust; alphabet autodetection is not infallible.
+
+
+
+.SH OPTIONS
+
+.TP
+.B -h 
+Print brief help;  includes version number and summary of
+all options, including expert options.
+
+.TP
+.B -g
+Use the Gerstein/Sonnhammer/Chothia weighting algorithm; this is the
+default.
+
+.TP
+.B -p
+Use the Henikoff position-based weighting algorithm.
+
+.TP
+.B -b
+"BLOSUM weights": use approximately the same rule used in constructing
+the BLOSUM score matrices. This involves single-linkage clustering at
+some fractional identity threshold (default 0.62; see 
+.I --id 
+option), then for each cluster, splitting a total weight of one
+uniformly amongst all sequences in the cluster.
+
+.SH EXPERT OPTIONS
+
+.TP 
+.BI --id " <x>"
+Sets the fractional identity threshold used by the BLOSUM weighting
+rule (option 
+.I -b
+; required), to a number 0<=x<=1. Default is 0.62.
+
+.TP
+.B --amino
+Assert that the 
+.I msafile 
+contains protein sequences. 
+
+.TP 
+.B --dna
+Assert that the 
+.I msafile 
+contains DNA sequences. 
+
+.TP 
+.B --rna
+Assert that the 
+.I msafile 
+contains RNA sequences. 
+
+.SH AUTHOR
+
+Easel and its documentation are @EASEL_COPYRIGHT at .
+ at EASEL_LICENSE@.
+See COPYING in the source code distribution for more details.
+The Easel home page is: @EASEL_URL@
+
diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in
new file mode 100644
index 0000000..2392c41
--- /dev/null
+++ b/testsuite/Makefile.in
@@ -0,0 +1,70 @@
+top_srcdir = @top_srcdir@
+srcdir     = @srcdir@
+VPATH      = @srcdir@ @top_srcdir@
+SHELL      = /bin/sh
+
+CC         = @CC@
+CFLAGS     = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@
+CPPFLAGS   = @CPPFLAGS@
+LDFLAGS    = @LDFLAGS@
+SIMDFLAGS  = @SIMD_CFLAGS@
+DEFS       = @DEFS@
+LIBS       = @LIBGSL@ @LIBS@ -lm
+MPILIBS    = @MPILIBS@
+
+SQCLEVEL = 2
+
+QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c
+QUIET_SUBDIR1 = 
+ifndef V
+	QUIET_CC      = @echo '    ' CC $@;
+	QUIET_GEN     = @echo '    ' GEN $@;
+	QUIET_AR      = @echo '    ' AR $@;
+	QUIET_SUBDIR0 = + at subdir=
+	QUIET_SUBDIR1 = ; echo '    ' SUBDIR  $$subdir; \
+		        ${MAKE} -C $$subdir
+endif
+
+.PHONY: check dcheck clean distclean
+
+check:
+	@echo 
+	@echo Running Easel test suite...
+	@echo
+	@${srcdir}/../devkit/sqc ${SQCLEVEL} ${srcdir}/testsuite.sqc .. ${srcdir}/..
+
+dcheck: 
+	@echo    Running developer testsuite...
+	@echo -n Compiling for unit tests and valgrind tests...
+	@(cd ..; make clean > /dev/null; testsuite/${top_srcdir}/configure --enable-debugging >/dev/null; make dev > /dev/null)       
+	@echo    done. 
+	@echo -n Running unit tests...
+	@${srcdir}/../devkit/sqc ${SQCLEVEL} ${srcdir}/testsuite.sqc .. ${srcdir}/..  >  utest.report
+	@echo    done. [See utest.report]
+	@echo -n Looking for memory leaks...
+	@${srcdir}/valgrind_report.pl .. ${srcdir}/..  >  valgrind.report
+	@echo    done. [See valgrind.report]
+	@echo -n Recompiling for coverage tests...
+	@(cd ..; make clean > /dev/null; testsuite/${top_srcdir}/configure --enable-gcov > /dev/null; make tests > /dev/null)       
+	@echo    done. 
+	@echo -n Measuring test code coverage...
+	@${top_srcdir}/testsuite/coverage_report.pl .. ${top_srcdir} >  coverage.report
+	@echo    done. [See coverage.report]
+	@cat coverage.report valgrind.report utest.report > dcheck.report
+	@echo
+	@echo    Finished developer testsuite.
+	@echo    For a complete report, see dcheck.report.
+
+clean:
+	-rm -f *.gcno *.gcda *.gcov
+	-rm -f esltmp??????
+	-rm -f *.o *~ 
+	-rm -f ${PROGS} 
+
+distclean: clean
+	-rm -f coverage.report valgrind.report utest.report
+	rm Makefile
+
+################################################################
+# @LICENSE@
+################################################################
\ No newline at end of file
diff --git a/testsuite/coverage_report.pl b/testsuite/coverage_report.pl
new file mode 100755
index 0000000..69c1a19
--- /dev/null
+++ b/testsuite/coverage_report.pl
@@ -0,0 +1,134 @@
+#! /usr/bin/perl
+
+# Measures testsuite coverage (as percentage of source lines),
+# using gcov.
+#
+# Assumes you've already compiled the library, with test drivers only.
+#
+# Usage:
+#     coverage_report.pl <top_builddir> <top_srcdir>
+#
+# Example usage, in a single directory (source and build):
+#     ./configure --enable-gcov
+#     make tests
+#     testsuite/coverage_report.pl . .
+#     
+# Example usage, in separate build dir
+#     mkdir build_dir
+#     cd build_dir
+#     ../configure --enable-gcov
+#     make tests
+#     ../testsuite/coverage_report.pl . ..
+#    
+#
+# It has to be 'make tests', not 'make dev'. The _utest driver must be
+# the last executable compiled for each module .c file, or gcov will
+# bitch about stamp mismatch between .gcno, .gcda files.  (When you
+# build esl_foo_utest, it generates a .gcno file for esl_foo.c. When
+# you run esl_foo_utest, it generates a .gcda file for esl_foo.c. If
+# you build esl_foo_example before you run esl_foo_utest, you get a
+# mismatch.)
+#
+# It assumes you have 'sloccount' installed, so it can count 
+# ANSI C lines in files with no test driver. If you don't, use
+#    ./coverage_report.pl -s
+
+
+use Getopt::Std;
+use File::Basename;
+$have_sloccount = 1;
+getopts('s');
+if ($opt_s) { $have_sloccount   = 0; }
+
+if ($#ARGV+1 != 2) { die("Usage: coverage_report.pl <top_builddir> <top_srcdir>"); }
+$top_builddir = shift;
+$top_srcdir   = shift;
+
+
+printf("Code coverage test for Easel, using gcov:\n\n");
+
+ at modules = <$top_srcdir/esl_*.c>;
+unshift(@modules, "$top_srcdir/easel.c");
+
+$nmodules       = 0;
+$npresent       = 0;
+$ncompiled      = 0;
+$nsuccess       = 0;
+$nlines         = 0;
+$nlines_covered = 0;
+foreach $module (@modules) {
+    $basecfile = fileparse($module);
+    $nmodules++;
+
+    # create the eslDMATRIX_TESTDRIVE flag and dmatrix_utest program name from esl_dmatrix.c
+    if ($basecfile =~ /^(esl_)?(\S+).c/) { 
+        $pfx      = $1;
+	$base     = $2;
+	$progname = $pfx.$base."_utest";
+	$base     =~ tr/a-z/A-Z/;
+	$flag     = "esl".$base."_TESTDRIVE";
+    }
+    printf("%-28s ", $basecfile);
+
+    # one way to fail: there isn't a test driver at all
+    `grep $flag $module`;
+    if ($? != 0) { printf("%40s[NO DRIVER]\n", "");  push @nodriverlist, $module; next; }
+    $npresent++;
+
+    # or: there's a test driver but it wasn't compiled. Sometimes normal, such as esl_mpi_utest on non-MPI
+    if (! -x "$top_builddir/$progname") { printf("%40s[UTEST NOT COMPILED]\n", "");       next; }; 
+    $ncompiled++;
+    
+    `$top_builddir/$progname >& /dev/null`;
+    if ($? != 0) { printf("%40s[UTEST FAILED ]\n", "");       next; };
+    $nsuccess++;
+
+    $output = `(cd $top_builddir; gcov $basecfile)`;
+    if ($output =~ /File.*$basecfile.*\nLines executed:\s*(\d+\.\d+)% of\s+(\d+)/) {
+	$pct_cvg        = $1;
+	$nlines         += $2;
+	$nlines_covered += $1*$2/100;
+	printf("%6.2f%%   ", $pct_cvg);
+	$nbar           = int($pct_cvg * 20 / 100);
+	for ($i = 0; $i < $nbar; $i++) { printf("*"); }
+	printf("\n");
+    }
+    else { die "failed to parse gcov output";}
+}
+
+if ($have_sloccount) {
+    foreach $badmodule (@nodriverlist) {
+	$output = `sloccount $badmodule`;
+	if ($output =~ /ansic:\s+(\d+)/)  { $nlines_nodrivers += $1; }
+	else { die("failed to parse sloccount output"); }
+    }
+}
+
+printf("\nOf %d total modules in Easel:\n", $nmodules);
+if ($npresent != $nmodules) {
+    printf("   - %d have test drivers, %d do not\n", $npresent, $nmodules-$npresent);
+} else {
+    printf("   - All %d have test drivers\n", $npresent);
+}
+if ($ncompiled != $npresent) {
+    printf("   - %d compiled, %d did not\n", $ncompiled, $npresent-$ncompiled);
+} else {
+    printf("   - All %d compiled\n", $ncompiled);
+}
+if ($nsuccess != $ncompiled) {
+    printf("   - %d ran successfully, %d did not\n", $nsuccess, $ncompiled-$nsuccess);
+} else {
+    printf("   - All %d ran successfully\n", $nsuccess);
+}
+
+print "\n";
+  printf("Total coverage (of modules with test drivers): %.2f%%\n", 100.*$nlines_covered / $nlines);
+if ($have_sloccount) {
+    printf("Total coverage (including modules without drivers yet): %.2f%%\n", 100.*$nlines_covered / ($nlines+$nlines_nodrivers));
+}
+
+
+
+#
+# SRE, Thu Mar  1 19:22:57 2007 (Janelia)
+# SVN $Id$
diff --git a/testsuite/e2.sh b/testsuite/e2.sh
new file mode 100755
index 0000000..005ed41
--- /dev/null
+++ b/testsuite/e2.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+
+# Usage:    ./e2.sh <esl-seqstat> <stockholm file>
+# Example:  ./e2.sh ../miniapps/esl-seqstat ../formats/stockholm.1
+#
+# This tests that                 % cat foo.sto | esl-seqstat -
+# produces an error message:      Format of seqfile - unrecognized.
+# whereas                         % cat foo.sto | esl-seqstat --informat stockholm -
+# succeeds
+
+prog=$1
+alifile=$2
+
+output=`cat $alifile | $prog - 2>&1 | head -n 1 | grep -c "^Format of seqfile - unrecognized."`
+if test "$output" = 0 
+then 
+   echo "FAIL"
+   exit 1
+fi
+
+output=`cat $alifile | $prog --informat stockholm - 2>&1`
+if test $? -gt 0 
+then 
+   echo "FAIL"
+   exit 1
+fi
+
+
+echo "ok"
+exit 0
+
+
+
+
+
+
+
diff --git a/testsuite/i1-degen-residues.pl b/testsuite/i1-degen-residues.pl
new file mode 100755
index 0000000..eb3c5ac
--- /dev/null
+++ b/testsuite/i1-degen-residues.pl
@@ -0,0 +1,99 @@
+#! /usr/bin/perl
+
+# Integration tests of reading all valid protein sequence residue characters.
+#
+# Usage:    ./i1-degen-residues.pl <top_builddir> <top_srcdir> <tmpfile prefix>
+# Example:  ./i1-degen-residues.pl .. .. foo
+#
+# SRE, Tue Feb  2 13:09:58 2010 [Janelia]
+# SVN $Id$
+
+$top_builddir = shift;
+$top_srcdir   = shift;
+$tmppfx       = shift;
+
+# Make sure that any files/executables we need to access are present.
+if (! -x "$top_builddir/miniapps/esl-reformat") { die "FAIL: esl-reformat not found in $top_builddir/miniapps\n"; }
+if (! -x "$top_builddir/miniapps/esl-shuffle")  { die "FAIL: esl-shuffle not found in $top_builddir/miniapps\n"; }
+if (! -x "$top_builddir/miniapps/esl-sfetch")   { die "FAIL: esl-sfetch not found in $top_builddir/miniapps\n"; }
+if (! -x "$top_builddir/miniapps/esl-seqstat")  { die "FAIL: esl-seqstat not found in $top_builddir/miniapps\n"; }
+
+$reformat = "$top_builddir/miniapps/esl-reformat";
+$shuffle  = "$top_builddir/miniapps/esl-shuffle";
+$sfetch   = "$top_builddir/miniapps/esl-sfetch";
+$seqstat  = "$top_builddir/miniapps/esl-seqstat";
+
+# Create test amino acid and sequence files.
+if (! open(DNAFP, ">$tmppfx.dna")) { print "FAIL: couldn't open $tmppfx.dna for writing"; exit 1;  }
+if (! open(AAFP,  ">$tmppfx.aa"))  { print "FAIL: couldn't open $tmppfx.aa for writing";  exit 1;  }
+if (! open(BADFP, ">$tmppfx.bad")) { print "FAIL: couldn't open $tmppfx.bad for writing"; exit 1;  }
+
+print AAFP <<"EOF";
+>test
+ACDEFGHIKLMNPQRSTVWYBJZOUX*acdefghiklmnpqrstvwybjzoux
+EOF
+
+print DNAFP <<"EOF";
+>test
+ACGTRYMKSWHBVDN*acgtrymkswhbvdn*
+EOF
+
+print BADFP <<"EOF";
+>test
+ACGTRYMKSWHBVDN%acgtrymkswhbvdn%
+EOF
+
+# esl-reformat tests
+system("$reformat fasta $tmppfx.dna > $tmppfx.out 2>&1"); if ($? != 0) {  print "FAIL: reformat failed on .dna test\n"; exit 1; }
+system("diff $tmppfx.dna $tmppfx.out > /dev/null  2>&1"); if ($? != 0) {  print "FAIL: reformat changed .dna test\n";   exit 1; }
+
+system("$reformat fasta $tmppfx.aa > $tmppfx.out  2>&1"); if ($? != 0) {  print "FAIL: reformat failed on .aa test\n";  exit 1; }
+system("diff $tmppfx.aa $tmppfx.out > /dev/null   2>&1"); if ($? != 0) {  print "FAIL: reformat changed .aa test\n";    exit 1; }
+
+$output = `$reformat fasta $tmppfx.bad 2>&1`;             if ($? == 0) {  print "FAIL: reformat should have failed on .bad test\n";  exit 1; }
+if (! $output =~ /Illegal character %/) { print "FAIL: reformat should have found illegal % in .bad test\n"; exit 1; }
+
+# esl-seqstat tests
+$output = `$seqstat --dna $tmppfx.dna 2>&1`;   if ($? != 0)  {  print "FAIL: seqstat failed on .dna test\n";  exit 1; }
+($n) = $output =~ /Total # residues:\s+(\d+)/; if ($n != 32) {  print "FAIL: seqstat sees wrong residue count ($n) in .dna test\n";  exit 1; }
+
+$output = `$seqstat       $tmppfx.aa  2>&1`;   if ($? != 0)  {  print "FAIL: seqstat failed on .aa test\n";   exit 1; }
+($n) = $output =~ /Total # residues:\s+(\d+)/; if ($n != 53) {  print "FAIL: seqstat sees wrong residue count ($n) in .aa test\n";  exit 1; }
+
+$output = `$seqstat       $tmppfx.bad 2>&1`;   if ($? == 0)  {  print "FAIL: seqstat should have failed on .bad test\n";   exit 1; }
+
+# esl-shuffle tests
+system("$shuffle $tmppfx.dna           > $tmppfx.out 2>&1");   if ($? != 0)  {  print "FAIL: shuffle failed on .dna test\n";         exit 1; }
+system("$seqstat --dna -c $tmppfx.out  > $tmppfx.out2 2>&1");  if ($? != 0)  {  print "FAIL: seqstat -c failed on shuffled .dna\n";  exit 1; }
+system("$seqstat --dna -c $tmppfx.dna  > $tmppfx.out3 2>&1");  if ($? != 0)  {  print "FAIL: seqstat -c failed on .dna test\n";      exit 1; }
+system("diff $tmppfx.out2 $tmppfx.out3 > /dev/null 2>&1");     if ($? != 0)  {  print "FAIL: shuffle changed .dna composition\n";    exit 1; }
+
+system("$shuffle $tmppfx.aa            > $tmppfx.out 2>&1");   if ($? != 0)  {  print "FAIL: shuffle failed on .aa test\n";         exit 1; }
+system("$seqstat -c $tmppfx.out        > $tmppfx.out2 2>&1");  if ($? != 0)  {  print "FAIL: seqstat -c failed on shuffled .aa\n";  exit 1; }
+system("$seqstat -c $tmppfx.aa         > $tmppfx.out3 2>&1");  if ($? != 0)  {  print "FAIL: seqstat -c failed on .aa test\n";      exit 1; }
+system("diff $tmppfx.out2 $tmppfx.out3 > /dev/null 2>&1");     if ($? != 0)  {  print "FAIL: shuffle changed .aa composition\n";    exit 1; }
+
+$output = `$shuffle  $tmppfx.bad 2>&1`;   if ($? == 0)  {  print "FAIL: shuffle should have failed on .bad test\n";   exit 1; }
+
+# esl-sfetch tests
+system("$sfetch --index $tmppfx.aa           >/dev/null 2>&1");    if ($? != 0)  {  print "FAIL: sfetch --index failed on .aa test\n";  exit 1; }
+$output = `$sfetch -c 27..27 $tmppfx.aa test 2>&1 | grep -v "^>"`; if ($? != 0)  {  print "FAIL: sfetch failed on .aa test\n";          exit 1; }
+if (! $output =~ /^\*/) { print "FAIL: sfetch didn't retrieve * on .aa test ($output)\n";  exit 1; }
+
+system("$sfetch --index $tmppfx.dna >/dev/null 2>&1");             if ($? != 0)  {  print "FAIL: sfetch --index failed on .dna test\n"; exit 1; }
+$output = `$sfetch -c 16..16 $tmppfx.aa test 2>&1 | grep -v "^>"`; if ($? != 0)  {  print "FAIL: sfetch failed on .dna test\n";         exit 1; }
+if (! $output =~ /^\*/) { print "FAIL: sfetch didn't retrieve * on .dna test ($output)\n";  exit 1; }
+
+$output = `$sfetch --index $tmppfx.bad 2>&1`;   if ($? == 0)  {  print "FAIL: sfetch --index should have failed on .bad test\n";   exit 1; }
+
+print "ok\n"; 
+unlink "$tmppfx.dna";
+unlink "$tmppfx.dna.ssi";
+unlink "$tmppfx.aa";
+unlink "$tmppfx.aa.ssi";
+unlink "$tmppfx.bad";
+unlink "$tmppfx.bad.ssi";
+unlink "$tmppfx.out";
+unlink "$tmppfx.out2";
+unlink "$tmppfx.out3";
+exit 0;
diff --git a/testsuite/i2-ncbi-indices.pl b/testsuite/i2-ncbi-indices.pl
new file mode 100755
index 0000000..392b62a
--- /dev/null
+++ b/testsuite/i2-ncbi-indices.pl
@@ -0,0 +1,147 @@
+#! /usr/bin/perl
+
+# Testing that we can read FASTA files, even if they have NCBI
+# formatted BLAST databases in the same directory.
+#
+# (This failed in Jan 2010 because the embryonic NCBI db parser
+# automatically opened the NCBI files instead of the FASTA file,
+# but did not have an implementation of esl_sqio_ReadWindow().)
+#
+# Usage:   ./i2-ncbi-indices <top_builddir> <top_srcdir> <tmpfile prefix>
+# Example: ./i2-ncbi-indices . . tmp
+#
+# SRE, Tue Feb  2 12:43:04 2010 [Janelia]
+# SVN $Id$ 
+#
+
+
+# This idiom (as opposed to just "use foo;") allows you to gracefully
+# catch the case of a missing Perl module:
+eval "use MIME::Base64 ()";  
+$have_base64 = 1 unless $@;
+if (! $have_base64)  { die "FAIL: MIME:Base64 perl module required for this test\n"; }
+
+$top_builddir = shift;
+$top_srcdir   = shift;
+$tmppfx       = shift;
+
+# Make sure that any files/executables we need to access are present.
+if (! -x "$top_builddir/miniapps/esl-seqstat") { die "FAIL: esl-seqstat not found in $top_builddir/miniapps\n"; }
+
+
+# Generate the test files. See notes below, at the function.
+&write_testfiles($tmppfx); 
+
+# The bug we're catching is that esl-seqstat would fail because
+# esl_sqio_ReadWindow() returned eslEUNIMPLEMENTED.
+#
+$output = `$top_builddir/miniapps/esl-seqstat -a $tmppfx.fa 2>&1`;
+if ($? != 0) { die "FAIL: esl-seqstat fails to read BLAST-formatted FASTA file\n"; }
+
+
+# We could check more (like whether the output was what we expected)
+# but that's all we need for the bug in question.
+
+print "ok\n";
+unlink "$tmppfx.fa";
+unlink "$tmppfx.fa.phr";
+unlink "$tmppfx.fa.pin";
+unlink "$tmppfx.fa.psq";
+exit 0;
+
+
+
+# We want to test NCBI BLAST data formats, without requiring that the
+# user has "formatdb" installed.
+# 
+# So we want to carry a payload of premade files; but the files are
+# binary.
+#
+# So we carry them base64-encoded, and decode them into tmp files.
+#
+# The test files were created by
+#   % esl-shuffle -G --amino -L 60 -N 10 > test.fa
+#   % formatdb -i test.fa
+#   % base64 test.fa.phr
+#   % base64 test.fa.pin
+#   % base64 test.fa.psq
+#
+sub 
+write_testfiles
+{
+    local($pfx) = @_;
+
+$fafile = ">random0\
+LFGSQIVARDDPSSVLRDIGGSVRPRNEICKIKQKEGQNGLNHDPVKNTWEDESKKQAFA\
+>random1\
+EIARLAAQLRETPAEKAIADIYLEDCLDFIAVTSFTATSDPLEGAGGWEKVNREAPFESA\
+>random2\
+IVLNNSVDYYIPSIHTAFNGLVLPGSKVPVSFFQQPGSLLTNATILGFDLLDLAVAEGLL\
+>random3\
+LSMKVPRFGKNKREDNLQLRLGPPKYPSWNAMVRAHASKFYAVNRGVFIGSLPIQFVEKR\
+>random4\
+VKLTTGAKVLDLTFYHYCEAAISDQMLQATLNQAIGHNARETILTSAQQLDPAYRSDQVW\
+>random5\
+LLFEQVLSFDHGEYRAHGLQRTLRQVLILIAALMVLPEQTKTGDLSPACKLANATVSGKL\
+>random6\
+LERDNAAGMIALASNSEFNIEGCQKYGSKGGLESQGKMKITNQYTSEIDVYERPENVLGF\
+>random7\
+MEAPAWDTPGLGASFQASDEAPPELSLTLHNNPQVAMRKKVVRVSALTLTRPRHLLIMFA\
+>random8\
+SSLNCLQMGLPRRLQWADDPDSDNTAPNAPLVSFKNVHMVLAEEFEGYRIAIVVSYPFDR\
+>random9\
+KKQVADVLELVIEGENQRSMVVLPTGKRFEIESAWGVGRPFPSTQGLIMNLYMAKDRAAT\
+";
+
+$phr_encoded = "\
+MIAwgKCAGgdyYW5kb20wAAChgDCAqoAwgKCAGglCTF9PUkRfSUQAAKGAoIACAQAAAAAAAAAAAAAA\
+AACigAIBAAAAAAAAADCAMICggBoHcmFuZG9tMQAAoYAwgKqAMICggBoJQkxfT1JEX0lEAAChgKCA\
+AgEBAAAAAAAAAAAAAAAAooACAQAAAAAAAAAwgDCAoIAaB3JhbmRvbTIAAKGAMICqgDCAoIAaCUJM\
+X09SRF9JRAAAoYCggAIBAgAAAAAAAAAAAAAAAKKAAgEAAAAAAAAAMIAwgKCAGgdyYW5kb20zAACh\
+gDCAqoAwgKCAGglCTF9PUkRfSUQAAKGAoIACAQMAAAAAAAAAAAAAAACigAIBAAAAAAAAADCAMICg\
+gBoHcmFuZG9tNAAAoYAwgKqAMICggBoJQkxfT1JEX0lEAAChgKCAAgEEAAAAAAAAAAAAAAAAooAC\
+AQAAAAAAAAAwgDCAoIAaB3JhbmRvbTUAAKGAMICqgDCAoIAaCUJMX09SRF9JRAAAoYCggAIBBQAA\
+AAAAAAAAAAAAAKKAAgEAAAAAAAAAMIAwgKCAGgdyYW5kb202AAChgDCAqoAwgKCAGglCTF9PUkRf\
+SUQAAKGAoIACAQYAAAAAAAAAAAAAAACigAIBAAAAAAAAADCAMICggBoHcmFuZG9tNwAAoYAwgKqA\
+MICggBoJQkxfT1JEX0lEAAChgKCAAgEHAAAAAAAAAAAAAAAAooACAQAAAAAAAAAwgDCAoIAaB3Jh\
+bmRvbTgAAKGAMICqgDCAoIAaCUJMX09SRF9JRAAAoYCggAIBCAAAAAAAAAAAAAAAAKKAAgEAAAAA\
+AAAAMIAwgKCAGgdyYW5kb205AAChgDCAqoAwgKCAGglCTF9PUkRfSUQAAKGAoIACAQkAAAAAAAAA\
+AAAAAACigAIBAAAAAAAAAA==";
+
+$pin_encoded = "\
+AAAABAAAAAEAAAAHdGVzdC5mYQAAABlGZWIgMiwgMjAxMCAxMToxMyBBTQAAAAAAAAAAClgCAAAA\
+AAAAAAAAPAAAAAAAAABGAAAAjAAAANIAAAEYAAABXgAAAaQAAAHqAAACMAAAAnYAAAK8AAAAAQAA\
+AD4AAAB7AAAAuAAAAPUAAAEyAAABbwAAAawAAAHpAAACJgAAAmM=";
+
+$psq_encoded = "\
+AAsGBxEPCRMBEAQEDhEREwsQBAkHBxETEA4QDQUJAwoJCg8KBQcPDQcLDQgEDhMKDRIUBQQFEQoK\
+DwEGAQAFCQEQCwEBDwsQBRIOAQUKAQkBBAkWCwUEAwsEBgkBExIRBhIBEhEEDgsFBwEHBxQFChMN\
+EAUBDgYFEQEACRMLDQ0REwQWFgkOEQkIEgEGDQcLEwsOBxEKEw4TEQYGDw8OBxELCxINARIJCwcG\
+BAsLBAsBEwEFBwsLAAsRDAoTDhAGBwoNChAFBA0LDwsQCwcODgoWDhEUDQEMExABCAERCgYWARMN\
+EAcTBgkHEQsOCQ8GEwUKEAATCgsSEgcBChMLBAsSBhYIFgMFAQEJEQQPDAsPARILDQ8BCQcIDQEQ\
+BRIJCxIRAQ8PCwQOARYQEQQPExQACwsGBQ8TCxEGBAgHBRYQAQgHCw8QEgsQDxMLCQsJAQELDBML\
+DgUPEgoSBwQLEQ4BAwoLAQ0BEhMRBwoLAAsFEAQNAQEHDAkBCwERDREFBg0JBQcDDwoWBxEKBwcL\
+BREPBwoMCgkSDQ8WEhEFCQQTFgUQDgUNEwsHBgAMBQEOARQEEg4HCwcBEQYPAREEBQEODgULEQsS\
+CwgNDQ4PEwEMEAoKExMQExEBCxILEhAOEAgLCwkMBgEAERELDQMLDwwHCw4QEAsPFAEEBA4EEQQN\
+EgEODQEOCxMRBgoNEwgMEwsBBQUGBQcWEAkBCRMTERYOBgQQAAoKDxMBBBMLBQsTCQUHBQ0PEBEM\
+ExMLDhIHChAGBQkFEQEUBxMHEA4GDhESDwcLCQwNCxYMAQoEEAEBEgA=";
+
+open(FAFILE, ">$pfx.fa") || die;
+print FAFILE $fafile;
+close (FAFILE);
+
+open(PHRFILE, ">$pfx.fa.phr");
+print PHRFILE MIME::Base64::decode_base64($phr_encoded);
+close PHRFILE;
+
+open(PINFILE, ">$pfx.fa.pin");
+print PINFILE MIME::Base64::decode_base64($pin_encoded);
+close PINFILE;
+
+open(PSQFILE, ">$pfx.fa.psq");
+print PSQFILE MIME::Base64::decode_base64($psq_encoded);
+close PSQFILE;
+}
+
+
+
diff --git a/testsuite/i3-blank-gf.pl b/testsuite/i3-blank-gf.pl
new file mode 100755
index 0000000..831dcde
--- /dev/null
+++ b/testsuite/i3-blank-gf.pl
@@ -0,0 +1,95 @@
+#! /usr/bin/perl
+
+# Bug #e5: blank text line following #=GF <tag> handled improperly.
+#
+# Easel was allowing blank text, because we want to allow blank #=GF CC
+# lines for line spacing in human-readable comments.
+#
+# Problem is that then blank DE or AC lines are also accepted. HMMER
+# then propagates blank DESC or ACC lines to its save files. But HMMER
+# save file parser strictly requires DESC <s> or ACC <s>.
+#
+# SRE, Tue Jul 13 10:46:02 2010
+# SVN $Id$
+
+BEGIN {
+    $builddir  = shift;
+    $srcdir    = shift;
+    $tmppfx    = shift;
+}
+
+# Verify that we have all the executables we need for the test.
+if (! -x "$builddir/miniapps/esl-reformat") { die "FAIL: didn't find esl-reformat binary in $builddir/miniapps\n";  }
+
+
+# Create four test files
+#   .sto1:  AC, DE followed by spaces; invalid format
+#   .sto2:  AC, DE followed by \n;     invalid format
+#   .sto3,  CC followed by spaces;     valid format
+#   .sto4,  CC followed by \n;         valid format
+
+open(MSA1, ">$tmppfx.sto1") || die "FAIL: couldn't create $tmppfx.sto1\n";
+print MSA1 << "EOF";
+# STOCKHOLM 1.0
+#=GF AC   
+#=GF DE   
+
+seq1  ACGTACGTACGT
+seq2  ACGTACGTACGT
+//
+EOF
+close MSA1;
+
+open(MSA2, ">$tmppfx.sto2") || die "FAIL: couldn't create $tmppfx.sto2\n";
+print MSA2 << "EOF";
+# STOCKHOLM 1.0
+#=GF AC
+#=GF DE
+
+seq1  ACGTACGTACGT
+seq2  ACGTACGTACGT
+//
+EOF
+close MSA2;
+
+open(MSA3, ">$tmppfx.sto3") || die "FAIL: couldn't create $tmppfx.sto3\n";
+print MSA3 << "EOF";
+# STOCKHOLM 1.0
+#=GF CC     
+
+seq1  ACGTACGTACGT
+seq2  ACGTACGTACGT
+//
+EOF
+close MSA3;
+
+open(MSA4, ">$tmppfx.sto4") || die "FAIL: couldn't create $tmppfx.sto4\n";
+print MSA4 << "EOF";
+# STOCKHOLM 1.0
+#=GF CC
+
+seq1  ACGTACGTACGT
+seq2  ACGTACGTACGT
+//
+EOF
+close MSA4;
+
+
+$output = `$builddir/miniapps/esl-reformat stockholm $tmppfx.sto1 2>&1`;
+if ($? == 0) { die "FAIL: blank AC,DE lines should be invalid Stockholm format (bug #e5) (1)\n"; }
+
+$output = `$builddir/miniapps/esl-reformat stockholm $tmppfx.sto2 2>&1`;
+if ($? == 0) { die "FAIL: blank AC,DE lines should be invalid Stockholm format (bug #e5) (2)\n"; }
+
+$output = `$builddir/miniapps/esl-reformat stockholm $tmppfx.sto3`;
+if ($? != 0)              { die "FAIL: blank CC line should be valid Stockholm format (1)\n"; }
+if ($output !~ /#=GF CC/) { die "FAIL: blank CC line did not propagate\n"; }
+
+$output = `$builddir/miniapps/esl-reformat stockholm $tmppfx.sto4`;
+if ($? != 0)              { die "FAIL: blank CC line should be valid Stockholm format (2)\n"; }
+if ($output !~ /#=GF CC/) { die "FAIL: blank CC line did not propagate\n"; }
+
+print  "ok\n";
+unlink <$tmppfx.sto*>;
+exit 0;
+
diff --git a/testsuite/testsuite.sqc b/testsuite/testsuite.sqc
new file mode 100644
index 0000000..5eeb897
--- /dev/null
+++ b/testsuite/testsuite.sqc
@@ -0,0 +1,151 @@
+# Easel's test suite, in sqc command format
+
+#################################################################
+# Test drivers for each module.
+################################################################
+
+1 exercise alphabet-utest     @esl_alphabet_utest@
+1 exercise buffer-utest       @esl_buffer_utest@
+1 exercise cluster-utest      @esl_cluster_utest@
+1 exercise dirichlet-utest    @esl_dirichlet_utest@
+1 exercise distance-utest     @esl_distance_utest@
+1 exercise dmatrix-utest      @esl_dmatrix_utest@
+1 exercise dsqdata-utest      @esl_dsqdata_utest@
+1 exercise easel-utest        @easel_utest@
+1 exercise exponential-utest  @esl_exponential_utest@
+1 exercise fileparser-utest   @esl_fileparser_utest@
+1 exercise gamma-utest        @esl_gamma_utest@
+1 exercise gencode-utest      @esl_gencode_utest@
+1 exercise getopts-utest      @esl_getopts_utest@
+1 exercise gumbel-utest       @esl_gumbel_utest@
+1 exercise heap-utest         @esl_heap_utest@
+1 exercise histogram-utest    @esl_histogram_utest@
+1 exercise hyperexp-utest     @esl_hyperexp_utest@
+1 exercise keyhash-utest      @esl_keyhash_utest@
+1 exercise mem-utest          @esl_mem_utest@
+1 exercise msa-utest          @esl_msa_utest@
+1 exercise msacluster-utest   @esl_msacluster_utest@
+1 exercise msafile            @esl_msafile_utest@
+1 exercise msafile2           @esl_msafile2_utest@
+1 exercise msafile-a2m        @esl_msafile_a2m_utest@
+1 exercise msafile-afa        @esl_msafile_afa_utest@
+1 exercise msafile-clustal    @esl_msafile_clustal_utest@
+1 exercise msafile-phylip     @esl_msafile_phylip_utest@
+1 exercise msafile-psiblast   @esl_msafile_psiblast_utest@
+1 exercise msafile-selex      @esl_msafile_selex_utest@
+1 exercise msafile-stockholm  @esl_msafile_stockholm_utest@
+1 exercise msaweight-utest    @esl_msaweight_utest@
+1 exercise normal-utest       @esl_normal_utest@
+1 exercise random-utest       @esl_random_utest@
+1 exercise randomseq-utest    @esl_randomseq_utest@
+1 exercise ratematrix-utest   @esl_ratematrix_utest@
+1 exercise recorder-utest     @esl_recorder_utest@
+1 exercise regexp-utest       @esl_regexp_utest@
+1 exercise rootfinder-utest   @esl_rootfinder_utest@
+1 exercise scorematrix-utest  @esl_scorematrix_utest@
+1 exercise sq-utest           @esl_sq_utest@
+1 exercise sqio-utest         @esl_sqio_utest@
+1 exercise sse-utest          @esl_sse_utest@
+1 exercise ssi-utest          @esl_ssi_utest@
+1 exercise stack-utest        @esl_stack_utest@
+1 exercise stats-utest        @esl_stats_utest@
+1 exercise stretchexp-utest   @esl_stretchexp_utest@
+1 exercise tree-utest         @esl_tree_utest@
+1 exercise vectorops-utest    @esl_vectorops_utest@
+1 exercise weibull-utest      @esl_weibull_utest@
+1 exercise wuss-utest         @esl_wuss_utest@
+
+1 exercise e2                 !testsuite/e2.sh! @miniapps/esl-seqstat@ !formats/stockholm.1!
+
+1 exercise degen-residues     !testsuite/i1-degen-residues.pl! @@ !! %TESTPFX%
+1 exercise ncbi-indices       !testsuite/i2-ncbi-indices.pl!   @@ !! %TESTPFX%
+1 exercise blank-gf           !testsuite/i3-blank-gf.pl!       @@ !! %TESTPFX%
+
+1 exercise esl-translate      !miniapps/esl-translate.itest.pl! @@ !! %TESTPFX%
+
+1 exercise esl-afetch         !miniapps/esl-afetch.itest.pl!    @miniapps/esl-afetch@    %TESTPFX%
+1 exercise esl-alimanip       !miniapps/esl-alimanip.itest.pl!  @miniapps/esl-alimanip@  %TESTPFX%
+1 exercise esl-alimap         !miniapps/esl-alimap.itest.pl!    @miniapps/esl-alimap@    %TESTPFX%
+1 exercise esl-alimask        !miniapps/esl-alimask.itest.pl!   @miniapps/esl-alimask@   %TESTPFX%
+1 exercise esl-alimerge       !miniapps/esl-alimerge.itest.pl!  @miniapps/esl-alimerge@  %TESTPFX%
+1 exercise esl-alistat        !miniapps/esl-alistat.itest.pl!   @miniapps/esl-alistat@   %TESTPFX%
+1 exercise esl-compalign      !miniapps/esl-compalign.itest.pl! @miniapps/esl-compalign@ %TESTPFX%
+1 exercise esl-construct      !miniapps/esl-construct.itest.pl! @miniapps/esl-construct@ %TESTPFX%
+1 exercise esl-mask           !miniapps/esl-mask.itest.pl!      @miniapps/esl-mask@      %TESTPFX%
+1 exercise esl-seqrange       !miniapps/esl-seqrange.itest.pl!  @miniapps/esl-seqrange@  @miniapps/esl-sfetch@ %TESTPFX%
+1 exercise esl-shuffle        !miniapps/esl-shuffle.itest.pl!   @miniapps/esl-shuffle@   %TESTPFX%
+1 exercise esl-ssdraw         !miniapps/esl-ssdraw.itest.pl!    @miniapps/esl-ssdraw@    !testsuite/trna-ssdraw.ps! !testsuite/trna-5.stk! %TESTPFX%
+
+
+# Still to do:
+# gev
+# minimizer
+# mixgev
+# mpi
+# paml
+# swat
+# interface_gsl
+# interface_lapack
+
+################################################################
+# valgrind tests (optional. 'export SQC_VALGRIND=1; make SQCLEVEL=3 check'
+################################################################
+
+3 valgrind alphabet-utest     @esl_alphabet_utest@
+3 valgrind cluster-utest      @esl_cluster_utest@
+3 valgrind dirichlet-utest    @esl_dirichlet_utest@
+3 valgrind distance-utest     @esl_distance_utest@
+3 valgrind dmatrix-utest      @esl_dmatrix_utest@
+3 valgrind easel-utest        @easel_utest@
+3 valgrind exponential-utest  @esl_exponential_utest@
+3 valgrind fileparser-utest   @esl_fileparser_utest@
+3 valgrind gamma-utest        @esl_gamma_utest@
+3 valgrind getopts-utest      @esl_getopts_utest@
+3 valgrind gumbel-utest       @esl_gumbel_utest@
+3 valgrind histogram-utest    @esl_histogram_utest@
+3 valgrind hyperexp-utest     @esl_hyperexp_utest@
+3 valgrind keyhash-utest      @esl_keyhash_utest@
+3 valgrind mem-utest          @esl_mem_utest@
+3 valgrind msa-utest          @esl_msa_utest@
+3 valgrind msafile            @esl_msafile_utest@
+3 valgrind msafile2           @esl_msafile2_utest@
+3 valgrind msafile-a2m        @esl_msafile_a2m_utest@
+3 valgrind msafile-afa        @esl_msafile_afa_utest@
+3 valgrind msafile-clustal    @esl_msafile_clustal_utest@
+3 valgrind msafile-phylip     @esl_msafile_phylip_utest@
+3 valgrind msafile-psiblast   @esl_msafile_psiblast_utest@
+3 valgrind msafile-selex      @esl_msafile_selex_utest@
+3 valgrind msafile-stockholm  @esl_msafile_stockholm_utest@
+3 valgrind msacluster-utest   @esl_msacluster_utest@
+3 valgrind msaweight-utest    @esl_msaweight_utest@
+3 valgrind normal-utest       @esl_normal_utest@
+3 valgrind random-utest       @esl_random_utest@
+3 valgrind randomseq-utest    @esl_randomseq_utest@
+3 valgrind ratematrix-utest   @esl_ratematrix_utest@
+3 valgrind recorder-utest     @esl_recorder_utest@
+3 valgrind regexp-utest       @esl_regexp_utest@
+3 valgrind rootfinder-utest   @esl_rootfinder_utest@
+3 valgrind scorematrix-utest  @esl_scorematrix_utest@
+3 valgrind sq-utest           @esl_sq_utest@
+3 valgrind sqio-utest         @esl_sqio_utest@
+3 valgrind sse-utest          @esl_sse_utest@
+3 valgrind ssi-utest          @esl_ssi_utest@
+3 valgrind stack-utest        @esl_stack_utest@
+3 valgrind stats-utest        @esl_stats_utest@
+3 valgrind stretchexp-utest   @esl_stretchexp_utest@
+3 valgrind tree-utest         @esl_tree_utest@
+3 valgrind vectorops-utest    @esl_vectorops_utest@
+3 valgrind weibull-utest      @esl_weibull_utest@
+3 valgrind wuss-utest         @esl_wuss_utest@
+
+###  esl_buffer_utest exercises valgrind bug #258294 on OSX
+###  still open in valgrind 3.6.1 (Feb 2011)
+###  reinstate the test when valgrind updates
+# 3 valgrind buffer-utest       @esl_buffer_utest@
+
+
+################################################################
+# SVN $URL$
+# SVN $Id: testsuite.sqc 714 2011-07-29 21:26:26Z eddys $
+################################################################
+
diff --git a/testsuite/trna-5.stk b/testsuite/trna-5.stk
new file mode 100644
index 0000000..eba1682
--- /dev/null
+++ b/testsuite/trna-5.stk
@@ -0,0 +1,16 @@
+# STOCKHOLM 1.0
+#=GF AU Infernal 0.1
+
+tRNA1         GCGGAUUUAGCUCAGUuGGG.AGAGCGCCAGACUGAAGAUCUGGAGGuCCUGUGUUCGAUCCACAGAAUUCGCA
+#=GR tRNA1 PP ****************9887.*****************************************************
+tRNA2         UCCGAUAUAGUGUAAC.GGCuAUCACAUCACGCUUUCACCGUGGAGA.CCGGGGUUCGACUCCCCGUAUCGGAG
+#=GR tRNA2 PP ****************.8888**************************.**************************
+tRNA3         UCCGUGAUAGUUUAAU.GGUcAGAAUGGGCGCUUGUCGCGUGCCAGA.UCGGGGUUCAAUUCCCCGUCGCGGAG
+#=GR tRNA3 PP ****************.******************************.**************************
+tRNA4         GCUCGUAUGGCGCAGU.GGU.AGCGCAGCAGAUUGCAAAUCUGUUGGuCCUUAGUUCGAUCCUGAGUGCGAGCU
+#=GR tRNA4 PP ****************.***.*****************************************************
+tRNA5         ....ACAUGGCGCAGUuGGU.AGCGCGCUUCCCUUGCAAGGAAGAGGuCAUCGGUUCGAUUCCGGUUGC.....
+#=GR tRNA5 PP ....****************.************************************************.....
+#=GC SS_cons  (((((((,,<<<<___.___._>>>>,<<<<<_______>>>>>,,,.,<<<<<_______>>>>>))))))):
+#=GC RF       gccccugUAGcucAaU.GGU.AgagCauuggaCUuuuAAuccaaagg.ugugGGUUCgAaUCCcaccaggggcA
+//
diff --git a/testsuite/trna-ssdraw.ps b/testsuite/trna-ssdraw.ps
new file mode 100644
index 0000000..6919503
--- /dev/null
+++ b/testsuite/trna-ssdraw.ps
@@ -0,0 +1,181 @@
+% begin ignore
+%
+% trna-ssdraw.ps:
+% An esl-ssdraw postscript template file for drawing
+% tRNA secondary structure diagrams. The input alignment
+% must be of consensus length (nongap RF length) of 71.
+% This corresponds to the Rfam 9.1 RF00005 tRNA model
+% (http://rfam.sanger.ac.uk/). That is, this template
+% file can be used with alignments generated by Infernal's
+% 'cmalign' program using the Rfam 9.1 tRNA CM.
+%
+% setup defaults
+/Helvetica findfont 8.00 scalefont setfont
+0.00 0.00 0.00 1.00 setcmykcolor
+1.00 setlinewidth
+% end ignore
+
+% begin modelname
+% tRNA
+% end modelname
+
+% begin legend
+% 34 -80. -30. 10 0.
+% end legend
+
+% begin scale
+1.7 1.7 scale
+% end scale
+
+% begin regurgitate
+/Helvetica findfont 6.00 scalefont setfont
+0.00 0.00 0.00 1.00 setcmykcolor
+(5') 164.00 400.00 moveto show
+(3') 192.00 408.00 moveto show
+1.00 setlinewidth
+0.00 0.00 0.00 1.00 setcmykcolor
+165.50 238.00 188.50 238.00 newpath moveto lineto stroke
+166.00 244.00 166.00 238.00 newpath moveto lineto stroke
+188.00 244.00 188.00 238.00 newpath moveto lineto stroke
+(anticodon) 164.25 230.00 moveto show
+% end regurgitate
+
+% begin ignore
+% reset 8.0 fontsize
+/Helvetica findfont 8.00 scalefont setfont
+% end ignore
+
+% begin text positiontext
+(20) 124.00 297.00 moveto show
+(40) 194.50 287.00 moveto show
+(60) 211.00 354.00 moveto show
+% end text positiontext
+
+% begin lines positionticks
+151.82 331.76 148.86 338.65 newpath moveto lineto stroke
+122.05 310.19 124.69 303.17 newpath moveto lineto stroke
+168.09 273.73 160.81 275.55 newpath moveto lineto stroke
+186.00 289.00 193.50 289.00 newpath moveto lineto stroke
+215.00 326.00 215.00 318.50 newpath moveto lineto stroke
+215.00 344.00 215.00 351.50 newpath moveto lineto stroke
+185.91 394.27 193.19 392.45 newpath moveto lineto stroke
+% end lines positionticks
+
+% begin ignore
+% set color to grey for bpconnect lines
+0.00 0.00 0.00 0.50 setcmykcolor
+% end ignore
+
+% begin lines bpconnects
+179.00 394.00 175.00 394.00 newpath moveto lineto stroke
+179.00 386.00 175.00 386.00 newpath moveto lineto stroke
+179.00 378.00 175.00 378.00 newpath moveto lineto stroke
+179.00 370.00 175.00 370.00 newpath moveto lineto stroke
+179.00 362.00 175.00 362.00 newpath moveto lineto stroke
+179.00 354.00 175.00 354.00 newpath moveto lineto stroke
+179.00 346.00 175.00 346.00 newpath moveto lineto stroke
+153.00 321.00 153.00 325.00 newpath moveto lineto stroke
+145.00 321.00 145.00 325.00 newpath moveto lineto stroke
+137.00 321.00 137.00 325.00 newpath moveto lineto stroke
+129.00 321.00 129.00 325.00 newpath moveto lineto stroke
+179.00 304.00 175.00 304.00 newpath moveto lineto stroke
+179.00 296.00 175.00 296.00 newpath moveto lineto stroke
+179.00 288.00 175.00 288.00 newpath moveto lineto stroke
+179.00 280.00 175.00 280.00 newpath moveto lineto stroke
+179.00 272.00 175.00 272.00 newpath moveto lineto stroke
+191.00 337.00 191.00 333.00 newpath moveto lineto stroke
+199.00 337.00 199.00 333.00 newpath moveto lineto stroke
+207.00 337.00 207.00 333.00 newpath moveto lineto stroke
+215.00 337.00 215.00 333.00 newpath moveto lineto stroke
+223.00 337.00 223.00 333.00 newpath moveto lineto stroke
+% end lines bpconnects
+
+% begin ignore
+% reset color to black
+0.00 0.00 0.00 1.00 setcmykcolor
+% end ignore
+
+% begin text nucleotides
+(G) 168.00 392.00 moveto show
+(C) 168.00 384.00 moveto show
+(G) 168.00 376.00 moveto show
+(G) 168.00 368.00 moveto show
+(A) 168.00 360.00 moveto show
+(U) 168.00 352.00 moveto show
+(U) 168.00 344.00 moveto show
+(U) 162.00 338.00 moveto show
+(A) 156.00 332.00 moveto show
+% nucleotide 10 on next line
+(G) 150.00 326.00 moveto show
+(C) 142.00 326.00 moveto show
+(U) 134.00 326.00 moveto show
+(C) 126.00 326.00 moveto show
+(A) 118.00 330.00 moveto show
+(G) 110.00 332.00 moveto show
+(U) 102.00 328.00 moveto show
+(U) 99.00 320.00 moveto show
+(G) 102.00 312.00 moveto show
+(G) 110.00 308.00 moveto show
+% nucleotide 20 on next line
+(A) 118.00 310.00 moveto show
+(G) 126.00 314.00 moveto show
+(A) 134.00 314.00 moveto show
+(G) 142.00 314.00 moveto show
+(C) 150.00 314.00 moveto show
+(G) 159.00 308.00 moveto show
+(C) 168.00 302.00 moveto show
+(C) 168.00 294.00 moveto show
+(A) 168.00 286.00 moveto show
+(G) 168.00 278.00 moveto show
+% nucleotide 30 on next line
+(A) 168.00 270.00 moveto show
+(C) 164.00 262.00 moveto show
+(U) 162.00 254.00 moveto show
+(G) 166.00 246.00 moveto show
+(A) 174.00 243.00 moveto show
+(A) 182.00 246.00 moveto show
+(G) 186.00 254.00 moveto show
+(A) 184.00 262.00 moveto show
+(U) 180.00 270.00 moveto show
+(C) 180.00 278.00 moveto show
+% nucleotide 40 on next line
+(U) 180.00 286.00 moveto show
+(G) 180.00 294.00 moveto show
+(G) 180.00 302.00 moveto show
+(A) 188.00 306.00 moveto show
+(G) 196.00 306.00 moveto show
+(U) 200.00 314.00 moveto show
+(U) 192.00 318.00 moveto show
+(C) 188.00 326.00 moveto show
+(U) 196.00 326.00 moveto show
+(G) 204.00 326.00 moveto show
+% nucleotide 50 on next line
+(U) 212.00 326.00 moveto show
+(G) 220.00 326.00 moveto show
+(U) 228.00 322.00 moveto show
+(U) 236.00 320.00 moveto show
+(C) 244.00 324.00 moveto show
+(G) 247.00 332.00 moveto show
+(A) 244.00 340.00 moveto show
+(U) 236.00 344.00 moveto show
+(C) 228.00 342.00 moveto show
+(C) 220.00 338.00 moveto show
+% nucleotide 60 on next line
+(A) 212.00 338.00 moveto show
+(C) 204.00 338.00 moveto show
+(A) 196.00 338.00 moveto show
+(G) 188.00 338.00 moveto show
+(A) 180.00 344.00 moveto show
+(A) 180.00 352.00 moveto show
+(U) 180.00 360.00 moveto show
+(U) 180.00 368.00 moveto show
+(C) 180.00 376.00 moveto show
+(G) 180.00 384.00 moveto show
+% nucleotide 70 on next line
+(C) 180.00 392.00 moveto show
+(A) 184.00 400.00 moveto show
+% end text nucleotides
+
+% begin ignore
+showpage
+% end ignore
diff --git a/testsuite/valgrind_report.pl b/testsuite/valgrind_report.pl
new file mode 100755
index 0000000..ac4100e
--- /dev/null
+++ b/testsuite/valgrind_report.pl
@@ -0,0 +1,107 @@
+#! /usr/bin/perl
+
+# Run the testsuite under Valgrind, to check for memory leakage.
+#
+# First you have to do a 'make dev' or 'make check', or equiv;
+# all the unit test drivers need to be compiled and present.
+#
+# Usage: 
+#    valgrind_report.pl <top_builddir> <top_srcdir>
+#
+# Example, in a single directory (source+build):
+#    ./configure --enable-debugging
+#    make dev
+#    testsuite/valgrind_report.pl . .
+#
+# Example, in separate build dir:
+#     mkdir build_dir
+#     cd build_dir
+#     ../configure --enable-debugging
+#     make dev
+#     ../testsuite/valgrind_report.pl . ..
+#
+
+use File::Basename;
+
+if ($#ARGV+1 != 2) { die("Usage: valgrind_report.pl <top_builddir> <top_srcdir>"); }
+$top_builddir = shift;
+$top_srcdir   = shift;
+
+printf("Memory leak testing for Easel, using valgrind:\n\n");
+
+ at modules = <$top_srcdir/esl_*.c>;
+unshift(@modules, "$top_srcdir/easel.c");
+
+$nmodules       = 0;
+$npresent       = 0;
+$ncompiled      = 0;
+$nsuccess       = 0;
+$nleaking       = 0;
+foreach $module (@modules) {
+    $basecfile = fileparse($module);
+    $nmodules++;
+
+    # create the eslDMATRIX_TESTDRIVE flag and esl_dmatrix_utest program name from esl_dmatrix.c
+    if ($basecfile =~ /^(esl_)?(\S+).c/) { 
+        $pfx      = $1;
+	$base     = $2;
+	$progname = $pfx.$base."_utest";
+	$base     =~ tr/a-z/A-Z/;
+	$flag     = "esl".$base."_TESTDRIVE";
+    }
+
+    printf("%-28s ", $basecfile);
+
+    # one way to fail: there isn't a test driver at all
+    `grep $flag $module`;
+    if ($? != 0) { printf("                   [NO DRIVER]\n");      next; }
+    $npresent++;
+
+    # Some unit tests aren't compiled.
+    # That can be normal: for example, esl_mpi_utest on a non-MPI system
+    if (! -x "$top_builddir/$progname")  { printf("                   [UTEST NOT COMPILED]\n");       next; }
+    $ncompiled++;
+
+    $output = `valgrind $top_builddir/$progname 2>&1`;
+    if ($? != 0) { printf("                   [VALGRIND FAILED]\n");       next; };
+    $nsuccess++;
+
+    if ($output =~ / definitely lost: (\S+) bytes in (\S+) blocks/)
+    {
+	if ($1 > 0) { 
+	    $nleaking++;
+	    print("[LEAK DETECTED ]\n");
+	} else {
+	    print("ok.\n");
+	}
+    } else { print "<< problem parsing valgrind output >>\n"; }                      
+}
+
+printf("\nOf %d total modules in Easel:\n", $nmodules);
+if ($npresent != $nmodules) {
+    printf("   - %d have test drivers written, %d do not\n", $npresent, $nmodules-$npresent);
+} else {
+    printf("   - All %d have test drivers written\n", $npresent);
+}
+if ($ncompiled != $npresent) {
+    printf("   - %d test drivers were found compiled; %d were not\n", $ncompiled, $npresent-$ncompiled);
+} else {
+    printf("   - All %d test drivers were found compiled\n", $ncompiled);
+}
+if ($nsuccess != $ncompiled) {
+    printf("   - %d ran successfully, %d did not\n", $nsuccess, $ncompiled-$nsuccess);
+} else {
+    printf("   - All %d ran successfully\n", $nsuccess);
+}
+
+print "\n";
+if ($nleaking == 0) {
+    printf("None of %d modules with running test drivers show memory leaks\n", $nsuccess);
+} else {
+    printf("%d of %d modules with running test drivers are leaking.\n", $nleaking, $nsuccess);
+}
+
+
+# SRE, Fri Mar  2 08:37:48 2007 [Janelia]
+# SVN $Id$
+# SVN $URL$

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/easel.git



More information about the debian-med-commit mailing list